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

bookFiltros 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.
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 em 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;
    • Realize 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_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.

Solução

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 3
single

single

Pergunte à IA

expand

Pergunte à IA

ChatGPT

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

close

Awesome!

Completion rate improved to 3.45

bookFiltros 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.
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 em 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;
    • Realize 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_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.

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
single

single

some-alt