<jupyter_start><jupyter_text>Trabalho Final PDI Discente: <NAME> Trabalho:Realize a filtragem passa baixa , passa alta e passa faixa da imagem anexa no domínio da frequência.Produza scripts em python que realize as operações de filtragem e apresente os resultados como figuras. Cada figura deve apresentar, para cada filtro, três resultados de filtragem (imagens filtradas) para três  frequências de corte distintas .Utilize os filtros de sua preferência (veja os slides do tópico filtragem no domínio da frequência)<jupyter_code>import math
import pylab
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('figura 1 (2).png', 0)
pylab.imshow(img);<jupyter_output><empty_output><jupyter_text>Filtragem Passa Baixanp.fft.fft2: Esta função calcula a Transformada de Fourier discreta n-dimensional sobre quaisquer eixos em uma matriz M-dimensional por meio da Transformada Rápida de Fourier (FFT). Por padrão, a transformação é calculada sobre os dois últimos eixos da matriz de entrada, ou seja, uma FFT bidimensional.<jupyter_code>import warnings 
warnings.simplefilter("ignore")

fourier = np.fft.fft2(img)
fourier_shifted = np.fft.fftshift(fourier)

magnitude_spectrum = 20*np.log(np.abs(fourier_shifted))

h, w = fourier_shifted.shape[0:2]
filt = np.zeros((h, w))

# wc = math.pi/8
# wc = math.pi/4
wc = 3*math.pi/8

wc_pixel = wc*(1/math.pi)*(np.floor(h/2))  # idealmente h = w<jupyter_output><empty_output><jupyter_text>Filtro Ideal É utilizado como base em todos os três cortes da filtragem passa baixa.![figura%2018.png](attachment:figura%2018.png)<jupyter_code>for i in range(h):
    for j in range(w):
        dist = ((i-(np.floor(h/2)))**2 + (j-(np.floor(w/2)))**2)**.5  # distancia do ponto a origem do filtro
        if dist <= wc_pixel:
            filt[i, j] = 1
        else:
            filt[i, j] = 0

result = np.multiply(fourier_shifted, filt)

result_non_shifted = np.fft.ifftshift(result)
filtered_img = np.fft.ifft2(result_non_shifted)
filtered_img = np.abs(filtered_img)<jupyter_output><empty_output><jupyter_text>Corte 1: Imagem Geral Filtrada<jupyter_code>plt.subplot(131), plt.imshow(img, cmap='gray')
plt.title('Imagem Original'), plt.xticks([]), plt.yticks([])

plt.subplot(132), plt.imshow(filt, cmap='gray')
plt.title('Filtro Passa Baixa'), plt.xticks([]), plt.yticks([])

plt.subplot(133), plt.imshow(filtered_img, cmap='gray')
plt.title('Imagem Filtrada'), plt.xticks([]), plt.yticks([])

plt.show()<jupyter_output><empty_output><jupyter_text>Corte 2: Imagem Cortada e Filtrada<jupyter_code># Dimensões de corte estão abaixo, em x,y,h e w:
y=0
x=0
h=450
w=450
crop2 = img[y:y+h, x:x+w]
pylab.imshow(crop2);
import warnings 
warnings.simplefilter("ignore")

fourier = np.fft.fft2(crop2)
fourier_shifted = np.fft.fftshift(fourier)

magnitude_spectrum = 20*np.log(np.abs(fourier_shifted))

h, w = fourier_shifted.shape[0:2]
filt = np.zeros((h, w))

# wc = math.pi/8
# wc = math.pi/4
wc = 3*math.pi/8

wc_pixel = wc*(1/math.pi)*(np.floor(h/2))  # idealmente h = w
for i in range(h):
    for j in range(w):
        dist = ((i-(np.floor(h/2)))**2 + (j-(np.floor(w/2)))**2)**.5  # distancia do ponto a origem do filtro
        if dist <= wc_pixel:
            filt[i, j] = 1
        else:
            filt[i, j] = 0

result = np.multiply(fourier_shifted, filt)

result_non_shifted = np.fft.ifftshift(result)
filtered_img = np.fft.ifft2(result_non_shifted)
filtered_img = np.abs(filtered_img)
plt.subplot(131), plt.imshow(crop2, cmap='gray')
plt.title('Imagem Cortada'), plt.xticks([]), plt.yticks([])

plt.subplot(132), plt.imshow(filt, cmap='gray')
plt.title('Filtro Passa Baixa'), plt.xticks([]), plt.yticks([])

plt.subplot(133), plt.imshow(filtered_img, cmap='gray')
plt.title('Imagem Filtrada'), plt.xticks([]), plt.yticks([])

plt.show()<jupyter_output><empty_output><jupyter_text>Corte 3: Imagem Cortada e Filtrada<jupyter_code># Dimensões de corte estão abaixo, em x,y,h e w:
y=0
x=0
h=500
w=350
crop3 = img[y:y+h, x:x+w]
pylab.imshow(crop3);
import warnings 
warnings.simplefilter("ignore")

fourier = np.fft.fft2(crop3)
fourier_shifted = np.fft.fftshift(fourier)

magnitude_spectrum = 20*np.log(np.abs(fourier_shifted))

h, w = fourier_shifted.shape[0:2]
filt = np.zeros((h, w))

# wc = math.pi/8
# wc = math.pi/4
wc = 3*math.pi/8

wc_pixel = wc*(1/math.pi)*(np.floor(h/2))  # idealmente h = w
for i in range(h):
    for j in range(w):
        dist = ((i-(np.floor(h/2)))**2 + (j-(np.floor(w/2)))**2)**.5  # distancia do ponto a origem do filtro
        if dist <= wc_pixel:
            filt[i, j] = 1
        else:
            filt[i, j] = 0

result = np.multiply(fourier_shifted, filt)

result_non_shifted = np.fft.ifftshift(result)
filtered_img = np.fft.ifft2(result_non_shifted)
filtered_img = np.abs(filtered_img)
plt.subplot(131), plt.imshow(crop3, cmap='gray')
plt.title('Imagem Cortada'), plt.xticks([]), plt.yticks([])

plt.subplot(132), plt.imshow(filt, cmap='gray')
plt.title('Filtro Passa Baixa'), plt.xticks([]), plt.yticks([])

plt.subplot(133), plt.imshow(filtered_img, cmap='gray')
plt.title('Imagem Filtrada'), plt.xticks([]), plt.yticks([])

plt.show()<jupyter_output><empty_output><jupyter_text>Filtragem Passa Altanp.fft.fft2: Esta função calcula a Transformada de Fourier discreta n-dimensional sobre quaisquer eixos em uma matriz M-dimensional por meio da Transformada Rápida de Fourier (FFT). Por padrão, a transformação é calculada sobre os dois últimos eixos da matriz de entrada, ou seja, uma FFT bidimensional.<jupyter_code>img4 = cv2.imread('figura 1 (2).png', 0)
pylab.imshow(img4);
fourier = np.fft.fft2(img4)
fourier_shifted = np.fft.fftshift(fourier)

magnitude_spectrum = 20*np.log(np.abs(fourier_shifted))

h, w = fourier_shifted.shape[0:2]
filt = np.zeros((h, w))

# wc = math.pi/8
# wc = math.pi/4
wc = 3*math.pi/8

wc_pixel = wc*(1/math.pi)*(np.floor(h/2))  # idealmente h = w<jupyter_output><empty_output><jupyter_text>Filtro Butterworth Passa-Alta<jupyter_code>n = 2

for i in range(h):
    for j in range(w):
        dist = ((i-(np.floor(h/2)))**2 + (j-(np.floor(w/2)))**2)**.5  # distancia ao centro da imagem
        filt[i, j] = 1-(1/(1+(dist/wc_pixel)**(2*n)))  # Filtro Butterworth Passa-Alta

result = np.multiply(fourier_shifted, filt)

result_non_shifted = np.fft.ifftshift(result)
filtered_img = np.fft.ifft2(result_non_shifted)
filtered_img = np.abs(filtered_img)
plt.subplot(131), plt.imshow(img4, cmap='gray')
plt.title('Imagem Original'), plt.xticks([]), plt.yticks([])

plt.subplot(132), plt.imshow(filt, cmap='gray')
plt.title('Filtro Passa Alta'), plt.xticks([]), plt.yticks([])

plt.subplot(133), plt.imshow(filtered_img, cmap='gray')
plt.title('Imagem Filtrada'), plt.xticks([]), plt.yticks([])

plt.show()<jupyter_output><empty_output><jupyter_text>Corte 2: Imagem Cortada e Filtrada<jupyter_code># Dimensões de corte estão abaixo, em x,y,h e w:
y=0
x=0
h=100
w=100
crop5 = img[y:y+h, x:x+w]
pylab.imshow(crop5);
fourier = np.fft.fft2(crop5)
fourier_shifted = np.fft.fftshift(fourier)

magnitude_spectrum = 20*np.log(np.abs(fourier_shifted))

h, w = fourier_shifted.shape[0:2]
filt = np.zeros((h, w))

# wc = math.pi/8
# wc = math.pi/4
wc = 3*math.pi/8

wc_pixel = wc*(1/math.pi)*(np.floor(h/2))  # idealmente h = w<jupyter_output><empty_output><jupyter_text>Filtro Butterworth Passa-Alta<jupyter_code>n = 2

for i in range(h):
    for j in range(w):
        dist = ((i-(np.floor(h/2)))**2 + (j-(np.floor(w/2)))**2)**.5  # distancia ao centro da imagem
        filt[i, j] = 1-(1/(1+(dist/wc_pixel)**(2*n)))  # Filtro Butterworth Passa-Alta

result = np.multiply(fourier_shifted, filt)

result_non_shifted = np.fft.ifftshift(result)
filtered_img = np.fft.ifft2(result_non_shifted)
filtered_img = np.abs(filtered_img)
plt.subplot(131), plt.imshow(crop5, cmap='gray')
plt.title('Imagem Original'), plt.xticks([]), plt.yticks([])

plt.subplot(132), plt.imshow(filt, cmap='gray')
plt.title('Filtro Passa Alta'), plt.xticks([]), plt.yticks([])

plt.subplot(133), plt.imshow(filtered_img, cmap='gray')
plt.title('Imagem Filtrada'), plt.xticks([]), plt.yticks([])

plt.show()<jupyter_output><empty_output><jupyter_text>Corte 3: Imagem Cortada e Filtrada<jupyter_code># Dimensões de corte estão abaixo, em x,y,h e w:
y=0
x=200
h=150
w=100
crop6 = img[y:y+h, x:x+w]
pylab.imshow(crop6);
fourier = np.fft.fft2(crop6)
fourier_shifted = np.fft.fftshift(fourier)

magnitude_spectrum = 20*np.log(np.abs(fourier_shifted))

h, w = fourier_shifted.shape[0:2]
filt = np.zeros((h, w))

# wc = math.pi/8
# wc = math.pi/4
wc = 3*math.pi/8

wc_pixel = wc*(1/math.pi)*(np.floor(h/2))  # idealmente h = w<jupyter_output><empty_output><jupyter_text>Filtro Butterworth Passa-Alta<jupyter_code>n = 2

for i in range(h):
    for j in range(w):
        dist = ((i-(np.floor(h/2)))**2 + (j-(np.floor(w/2)))**2)**.5  # distancia ao centro da imagem
        filt[i, j] = 1-(1/(1+(dist/wc_pixel)**(2*n)))  # Filtro Butterworth Passa-Alta

result = np.multiply(fourier_shifted, filt)

result_non_shifted = np.fft.ifftshift(result)
filtered_img = np.fft.ifft2(result_non_shifted)
filtered_img = np.abs(filtered_img)
plt.subplot(131), plt.imshow(crop6, cmap='gray')
plt.title('Imagem Original'), plt.xticks([]), plt.yticks([])

plt.subplot(132), plt.imshow(filt, cmap='gray')
plt.title('Filtro Passa Alta'), plt.xticks([]), plt.yticks([])

plt.subplot(133), plt.imshow(filtered_img, cmap='gray')
plt.title('Imagem Filtrada'), plt.xticks([]), plt.yticks([])

plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1669653209655318, 'fraction_numerical': 0.02687888689786023, 'mean_word_length': 5.082051282051282, 'pattern_counts': {'":': 0, '<': 53, '<?xml version=': 0, '>': 50, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '12', 'dir': 'jupyter-structured-clean-dedup', 'id': '441275', 'license': 'MIT', 'n_tokens_mistral': 4234, 'n_tokens_neox': 4059, 'n_words': 791, 'path': 'Trabalho Final -- PDI/Trabalho_Final_PDI.ipynb', 'repo_name': 'Ruann-01/Disciplina_PDI_Mestrado', 'size': '9511'}