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 :
Agora, minha pergunta óbvia é: o que isso significa? O que as variáveis significam? De acordo com a Wikipedia:
: Presumo que essas coordenadas especifiquem o valor de pixel de uma imagem nas coordenadas ( 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:
- Qual é o valor de saída ? 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 :)
fonte
Respostas:
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 sintoniaf0 ou período de ajuste P0 ou λ 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 P0 significa 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 π/2 funciona 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:X da 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 especificandoP0,θ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π/6 e uma certa largura de 20 pixels. Você pode criar um filtro Gabor comP0≈20,θ0=π/6,Δf=2,Δθ=pi/2 . CUIDADO para que não exista uma relação igual entre a dimensão da sua aresta e aP0 parâ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.
fonte
(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.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.
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
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.
fonte