Entendendo a função de filtro Gabor

9

Preciso implementar um script para gerar recursos a partir de uma imagem de entrada usando o filtro Gabor. Não tenho experiência anterior com wavelets e estou apenas aprendendo a análise de Fourier (eu entendo a idéia básica por trás da análise e transformação de Fourier), para que elas não possam me ajudar a entender o filtro Gabor, porque eu preciso fazer uma implementação em uma semana . Não preciso entender os fundamentos da função de filtro Gabor, mas gostaria de entender até certo ponto o que é e o que faz. Quais são os parâmetros? O que eles querem dizer? Qual é o resultado da função? Por exemplo, esta é a fórmula que copiei da Wikipedia :

g(x,y;λ,θ,ψ,σ,γ)=exp(x2+γ2y22σ2)exp(i(2πxλ+ψ))

Agora, minha pergunta óbvia é: o que isso significa? O que as variáveis ​​significam? De acordo com a Wikipedia:

x,y: Presumo que essas coordenadas especifiquem o valor de pixel de uma imagem nas coordenadas (x,y)( 2. Isso é bom, entendido )

λ: representa o comprimento de onda do fator sinusoidal ( fator sinusoidal , hein? 3a. Como você o seleciona? 3b. De onde vem? 3c. É um número arbitrário ou o quê? Escolhido livremente?)

θ: representa a orientação das faixas normal e paralela de uma função Gabor (4. O que isso significa?)

ψ: é o deslocamento de fase (5. deslocamento de quê? Como esse valor é determinado? É escolhido livremente?)

σ: é o desvio sigma / padrão do envelope gaussiano (6. Precisa de mais explicações ...)

γ: é a razão de aspecto espacial e especifica a elipticidade do suporte da função Gabor (7. Mais uma vez, precisamos de mais detalhes e mais explicações)

E o mais importante:

g(x,y;λ,θ,ψ,σ,γ)=X
  1. Qual é o valor de saída X? O que isso significa?

Como mencionei, não preciso de uma explicação completa da teoria, porque aposto que é longa e ler um livro de 1000 páginas sobre assunto desconhecido não é uma opção para mim no momento. Eu preciso ter um entendimento de caixa preta dessa função para poder implementá-la no código e, o mais importante, entender o que é a entrada e o que é a saída .

Obrigado por qualquer ajuda!! =)

PS

Eu li este post:

/math/259877/value-of-xy-in-computing-gabor-filter-function

mas não responde a minha pergunta suficientemente bem :)

jjepsuomi
fonte
1
Parece que você está tentando aprender muito sobre o processamento de imagens em apenas uma semana. Talvez você deva começar com um filtro mais simples primeiro, como a wavelet Haar.
Aaron
Oi @ anônimo! Você pode enumerar quais parâmetros não são explicados corretamente?
visoft
@visoft, sua resposta não é clara. Envolve muitas discussões estranhas. Eu adicionei minha resposta. Eu acho que agora está claro.
Você iniciou uma recompensa porque "Na resposta atual, os significados de vários parâmetros são descritos em forma incorreta. É necessária uma resposta direta." Fiquei curioso para saber quais explicações precisam ser reformuladas.
visoft
@visoft, sua resposta não é clara. Envolve muitas discussões estranhas. Eu adicionei minha resposta. Eu acho que agora está claro.

Respostas:

7

Uma implementação do matlab está nesta resposta: https://dsp.stackexchange.com/a/14201/5737

1) A fórmula da Wikipedia é um pouco geral demais.

2) Se você conhece o básico da transformação com Fourier, empiricamente sabe que: A imagem é vista como sendo formada pela sobreposição de uma série de ondas sinusoidais de várias frequências orientadas em todos os tipos de direções. Cada "pixel" na transformação nos diz a "intensidade" de uma onda. A posição do "pixel" nos diz a frequência e a orientação da onda. Na prática, quer-se selecionar apenas certas ondas, tendo uma frequência específica e uma orientação específica.

Então, já está: A transformação Gabor é um dos muitos filtros de passagem de banda que permite "cortar" a transformação Fourier e isolar apenas informações específicas. Outra informação importante é que cada "pixel" de Fourier é um valor complexo (parte real e imaginária)

3) Parâmetros: Dois parâmetros já são mostrados:

3.a) A frequência de sintonia f0ou período de ajuste P0ou λestabelecer a que tipo de onda sinusal o filtro responderá melhor. (f=1/P0=1/λ ou f=π/λ dependendo da implementação específica) Basicamente, um menor P0significa uma onda sinusal mais densa. Um maiorP0 significa ondas maiores. P0 está em pixels (3, 5, 30, etc. pixels) Não ultrapasse 3 pixels ou mais W/2 ou você obtém efeitos desagradáveis. Wé a largura da imagem, se a imagem for quadrada. Você especifica isso usando o parâmetro P0 no código matlab.

3.b) Ângulo central. Essas ondas podem ter qualquer direção. Você deseja selecionar apenas ondas em um ângulo específico. Então, o segundo parâmetro é o ângulo de sintonia,θ0 ou θna sua fórmula. Geralmente, em radianos. Oriente no código matlab.

Não se pode isolar apenas uma certa frequência ou uma certa orientação. (Procure o princípio da incerteza nos livros didáticos. Sim, é semelhante ao da física). Mas é possível sintonizar quanto das frequências próximas vazará. Os próximos dois parâmetros especificam que:

3.c) ΔF, largura de banda de frequência expressa em oitavas. Valores úteis, 1,5, 2, 3. Valores maiores significam capturar uma faixa mais ampla de frequências. Há um preço para um passe de banda mais apertado, uma localização espacial mais pobre. Por que, novamente, livro didático. FBW no código matlab.

3.d) Δθa largura de banda do ângulo. Expresso em radianos.π/3 ou π/2funciona muito bem. ABW no código matlab.

A relação entre Δf, Δθ do código matlab e σ,γ da Wikipedia tem uma fórmula, mas não é essencial para entender Gabor. ψ novamente não é importante para o entendimento básico.

Então você tem: Xda Wikipedia é uma matriz 2D de números que contém uma máscara de convolução. Você pega a imagem original, filtra-a com a máscara de convolução e obtém outra imagem. Esta nova imagem é a "resposta Gabor" para a imagem original.

O código do matlab executa esses dois passos juntos. Constrói o filtro Gabor com os parâmetros especificados e executa a convolução. Os resultados ReConv, ImConv são as respostas. Cada "pixel" de resposta possui uma parte real e uma imaginária. Se você deseja usar esse código, geralmente deve calcular a energia para a resposta:E=a2+b2 Onde a é a parte real da resposta (ReConv) e b é a parte imaginária (ImConv), para cada pixel.

Aí está: 1) Construa um filtro Gabor especificando P0,θ0,Δf,Δθ 2) Convolute sua imagem com o filtro. Você receberá dois valores por cada pixel. 3) Calcule a energiaE e obtenha a intensidade da resposta para cada pixel na imagem original

Outra intuição: suponha que você queira selecionar as arestas que se estendem em uma orientação perpendicular a π/6e uma certa largura de 20 pixels. Você pode criar um filtro Gabor comP020,θ0=π/6,Δf=2,Δθ=pi/2. CUIDADO para que não exista uma relação igual entre a dimensão da sua aresta e aP0parâmetro. Você deve tentar vários valores e ver o que funciona melhor. Os outros parâmetros (Δf,Δθ) toque neles quando tiver alguma experiência em ajustar os dois primeiros.

Espero que ajude!

Cristi

Atualizar

Aqui está um site que permite que você brinque um pouco com os parâmetros do Gabor e observe os resultados: http://www.cogsci.nl/pages/gabor-generator.php

Após uma rápida olhada, ambas as larguras de banda de frequência e ângulo são unidas como "Desvio padrão em pixels ... para o envelope de Gauss". O restante dos parâmetros é facilmente identificado. No entanto, observe que existem diferenças numéricas! Por exemplo. a fase pode ser expressa no intervalo 0-1 ou 0-π intervalo.

visoft
fonte
Como o tamanho do kernel depende desses parâmetros? Parece que a maioria das implementações usa apenas um tamanho arbitrário.
Jggunjer
Tl; dr: larguras de banda controlam as larguras do kernel. É uma relação proporcional inversa. Por exemplo. largura de banda mais estreita -> filtro maior. Também a frequência central também tem um papel.
Visoft
Quando estou usando filtros Gabor, penso primeiro em quais são meus parâmetros (larguras de banda, frequência central etc.) e depois "deixo" as fórmulas calcularem as dimensões.
visoft
Você pode fazer o contrário, inserir as dimensões e calcular os parâmetros de trabalho do filtro.
visoft
Na verdade, vejo que a relação de tamanho é diretamente proporcional ao lambda (pelo menos na implementação de gabor do matlab). Sua fórmula é um pouco estranha porque tem um termo (2^BW+1)/(2^BW-1)sempre igual a 4. Eles usam 7 * sigma (onde sigma ~ lambda), o exemplo da wikipedia gabor usa 3 * sigma.
Jggunjer #
6

Se virmos a definição do filtro de Gabor, saberemos que sua resposta ao impulso é um produto de uma função sinusoidal e de uma função gaussiana , que é essencialmente o que vemos na fórmula.

insira a descrição da imagem aqui

Os parâmetros λ, θ, ψ são parâmetros para a parte senoidal (ou fator).

λ e ψ são parâmetros básicos de uma onda senoidal.

λ - controla o comprimento de onda ( https://en.wikipedia.org/wiki/Wavelength ) desse sinusóide. Um λ mais alto ampliaria as elipses que você vê na imagem acima, enquanto um λ mais baixo teria o oposto.

θ - controla a rotação das elipses que você vê na imagem acima. Essas elipses são as "listras paralelas". Um valor de θ = 0 indica que não há rotação e tornaria as elipses verticais.

ψ - é a mudança de fase do senoide, ou seja, quanto as elipses precisam ser deslocadas em relação ao centro. É um parâmetro que precisa ser especificado.

σ - é o desvio padrão (ou seja, o spread) da parte gaussiana.

γ - controla a taxa de proporção das elipses (aproximadamente, qual o comprimento das elipses).

Os vários parâmetros especificados acima são as entradas.

O valor de saída do cálculo é simplesmente o coeficiente (ou peso) do filtro no local (x, y).

Esse é o significado e é o mesmo no contexto de qualquer outro filtro linear usado no processamento de imagens.


fonte
0

Alguém fez um excelente vídeo explicando os efeitos de diferentes parâmetros do filtro Gabor. Você pode encontrar o vídeo aqui .

Espero que isto ajude.

huangzonghao
fonte