Filtros Passa-Baixa e Passa-Alta
Um dos principais benefícios da Transformada de Fourier é permitir a realização de filtragem passa-alta e passa-baixa.
Após aplicarmos a Transformada de Fourier:
é necessário criar uma máscara de filtragem
Filtragem Passa-Baixa (Desfoque)
Um filtro passa-baixa remove componentes de alta frequência, resultando em uma imagem desfocada. Máscara passa-baixa:
rows, cols = image.shape
: retrieves the number of rows and columns from the grayscale image;crow, ccol = rows // 2, cols // 2
: computes the center coordinates of the image;mask = np.zeros((rows, cols), np.uint8)
: creates a mask of zeros with the same dimensions as the image;mask[crow-30:crow+30, ccol-30:ccol+30] = 1
: sets a 60×60 square region at the center of the mask to 1, allowing only the low-frequency components (near the center of the frequency domain) to pass through while filtering out high-frequency details.
Filtragem Passa-Alta (Detecção de Bordas)
Um filtro passa-alta remove componentes de baixa frequência e realça as bordas. Máscara passa-alta:
highpass_mask = np.ones((rows, cols), np.uint8)
: inicializa uma máscara de uns com as mesmas dimensões da imagem, permitindo que todas as frequências passem inicialmente;highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0
: define um pequeno quadrado de 10×10 no centro (região de baixa frequência) como zero, bloqueando efetivamente essas frequências.
Aplicando o filtro
Após criar a máscara, é necessário aplicar um filtro e transformar a foto de volta para o domínio espacial:
dft_filtered = dft_shift * mask
: aplica a máscara no domínio da frequência (por exemplo, passa-baixa ou passa-alta) por meio da multiplicação elemento a elemento com o DFT deslocado da imagem;dft_inverse = np.fft.ifftshift(dft_filtered)
: reverte o deslocamento aplicado anteriormente para retornar os componentes de frequência às suas posições originais;image_filtered = np.fft.ifft2(dft_inverse)
: calcula a Transformada Inversa de Fourier para converter os dados de frequência filtrados de volta ao domínio espacial;image_filtered = np.abs(image_filtered)
: obtém o valor absoluto para remover quaisquer componentes imaginários residuais, resultando em uma imagem filtrada com valores reais.
Swipe to start coding
Você recebe uma imagem da ovelha na variável image
e uma imagem no domínio da frequência na variável dft_shift
:
- Obtenha o formato da matriz
image
e armazene nas variáveisrows
ecols
; - Calcule o ponto central e armazene em
crow
eccol
; - Defina
low_mask
como um array de zeros com formato(rows, cols)
e tiponp.uint8
; - Selecione a região central 20x20 de
low_mask
e preencha com1
. - Defina
high_mask
como um array de uns com formato(rows, cols)
e tiponp.uint8
; - Selecione a região central 20x20 de
high_mask
e preencha com0
; - Aplique
low_mask
ehigh_mask
adft_shift
e armazene as frequências filtradas emlowpass_dft_filtered
ehighpass_dft_filtered
, respectivamente; - Realize a transformação inversa para
lowpass_dft_filtered
:- Faça o deslocamento inverso e armazene em
lowpass_dft_inverse
; - Faça a transformação inversa e armazene a imagem em
image_lowpass
; - Remova valores negativos de
image_lowpass
.
- Faça o deslocamento inverso e armazene em
- Realize a transformação inversa para
highpass_dft_inverse
:- Faça o deslocamento inverso e armazene em
lowpass_dft_inverse
; - Faça a transformação inversa e armazene a imagem em
image_highpass
; - Remova valores negativos de
image_highpass
.
- Faça o deslocamento inverso e armazene em
Solução
Obrigado pelo seu feedback!