Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Filtros Passa-Baixa e Passa-Alta | Processamento de Imagens com OpenCV
Fundamentos de Visão Computacional

Deslize para mostrar o menu

book
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.

Tarefa

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áveis rows e cols;
  • Calcule o ponto central e armazene em crow e ccol;
  • Defina low_mask como um array de zeros com formato (rows, cols) e tipo np.uint8;
  • Selecione a região central 20x20 de low_mask e preencha com 1.
  • Defina high_mask como um array de uns com formato (rows, cols) e tipo np.uint8;
  • Selecione a região central 20x20 de high_mask e preencha com 0;
  • Aplique low_mask e high_mask a dft_shift e armazene as frequências filtradas em lowpass_dft_filtered e highpass_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.
  • 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.

Solução

Switch to desktopMude para o desktop para praticar no mundo realContinue de onde você está usando uma das opções abaixo
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 3
Sentimos muito que algo saiu errado. O que aconteceu?

Pergunte à IA

expand
ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

book
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.

Tarefa

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áveis rows e cols;
  • Calcule o ponto central e armazene em crow e ccol;
  • Defina low_mask como um array de zeros com formato (rows, cols) e tipo np.uint8;
  • Selecione a região central 20x20 de low_mask e preencha com 1.
  • Defina high_mask como um array de uns com formato (rows, cols) e tipo np.uint8;
  • Selecione a região central 20x20 de high_mask e preencha com 0;
  • Aplique low_mask e high_mask a dft_shift e armazene as frequências filtradas em lowpass_dft_filtered e highpass_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.
  • 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.

Solução

Switch to desktopMude para o desktop para praticar no mundo realContinue de onde você está usando uma das opções abaixo
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 3
Switch to desktopMude para o desktop para praticar no mundo realContinue de onde você está usando uma das opções abaixo
Sentimos muito que algo saiu errado. O que aconteceu?
some-alt