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:
dft = np.fft.fft2(image)
dft_shift = np.fft.fftshift(dft)
é 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 borrada. Máscara passa-baixa:
rows, cols = image.shape
crow, ccol = rows // 2, cols // 2
mask = np.zeros((rows, cols), np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1
rows, cols = image.shape
: recupera o número de linhas e colunas da imagem em escala de cinza;crow, ccol = rows // 2, cols // 2
: calcula as coordenadas centrais da imagem;mask = np.zeros((rows, cols), np.uint8)
: cria uma máscara de zeros com as mesmas dimensões da imagem;mask[crow-30:crow+30, ccol-30:ccol+30] = 1
: define uma região quadrada de 60×60 no centro da máscara como 1, permitindo apenas a passagem dos componentes de baixa frequência (próximos ao centro do domínio da frequência) enquanto filtra os detalhes de alta frequência.
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)
highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0
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 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 o filtro e transformar a imagem de volta para o domínio espacial:
dft_filtered = dft_shift * mask
dft_inverse = np.fft.ifftshift(dft_filtered) # Inverse shifting
image_filtered = np.fft.ifft2(dft_inverse) # Inverse transformation
image_filtered = np.abs(image_filtered) # Remove negative values
dft_filtered = dft_shift * mask
: aplica a máscara no domínio da frequência (por exemplo, passa-baixa ou passa-alta) por 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
emdft_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
; - Realize 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_filtered
:- Faça o deslocamento inverso e armazene em
highpass_dft_inverse
; - Realize 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!
single
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Awesome!
Completion rate improved to 3.45
Filtros Passa-Baixa e Passa-Alta
Deslize para mostrar o menu
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:
dft = np.fft.fft2(image)
dft_shift = np.fft.fftshift(dft)
é 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 borrada. Máscara passa-baixa:
rows, cols = image.shape
crow, ccol = rows // 2, cols // 2
mask = np.zeros((rows, cols), np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1
rows, cols = image.shape
: recupera o número de linhas e colunas da imagem em escala de cinza;crow, ccol = rows // 2, cols // 2
: calcula as coordenadas centrais da imagem;mask = np.zeros((rows, cols), np.uint8)
: cria uma máscara de zeros com as mesmas dimensões da imagem;mask[crow-30:crow+30, ccol-30:ccol+30] = 1
: define uma região quadrada de 60×60 no centro da máscara como 1, permitindo apenas a passagem dos componentes de baixa frequência (próximos ao centro do domínio da frequência) enquanto filtra os detalhes de alta frequência.
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)
highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0
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 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 o filtro e transformar a imagem de volta para o domínio espacial:
dft_filtered = dft_shift * mask
dft_inverse = np.fft.ifftshift(dft_filtered) # Inverse shifting
image_filtered = np.fft.ifft2(dft_inverse) # Inverse transformation
image_filtered = np.abs(image_filtered) # Remove negative values
dft_filtered = dft_shift * mask
: aplica a máscara no domínio da frequência (por exemplo, passa-baixa ou passa-alta) por 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
emdft_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
; - Realize 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_filtered
:- Faça o deslocamento inverso e armazene em
highpass_dft_inverse
; - Realize 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!
single