Registro de imagem invariante em escala baseada em DFT da Log-Polar


10

Estou tentando fazer o registro de imagens usando a correlação de fases, conforme descrito no artigo de Reddy Chatterji . No meu caso, as imagens podem ser dimensionadas e traduzidas uma em relação à outra.

O algoritmo para encontrar a escala relativa, como eu a entendo, é (veja: o fluxograma do artigo ):

F1 = DFT(I1)
F2 = DFT(I2)
H1 = Highpass(F1)
H2 = Highpass(F2)
L1 = LogPolar(Magnitude(H1))
L2 = LogPolar(Magnitude(H2))
PC = PhaseCorrelate(L1,L2)
PM = norm(PC)
R = IDFT(PhaseCorr/PM)
P = Peak(R)
Scale = LogBase^P[1]

A escala me fornece valores aparentemente sem sentido (muito diferentes de imagem para imagem e nunca corretos).

Mas, ignorando a escala, a mesma abordagem de correlação de fase funciona bem para a tradução; e, portanto, suspeito que tenho um problema com minha transformação log-polar. Aqui está um exemplo, em que resolvi a tradução - a imagem da esquerda é a original e a direita foi cortada e traduzida - a solução é mostrada na parte superior do original:

Só a tradução funciona

Eu^(ρ,θ)=Eu(r+ρporque(2πθNθ),r-ρpecado(2πθNθ))
EurNθθ
Eu^euog(ρ,θ)=Eu^(registrob(ρ),θ)
b=(2r)-Nρ1 para que abranja todo o espaço polar.

ρ=θ=256

Log Polar

Por fim, isso mostra a transformação real pelas quais as imagens passam antes do passo de correlação de fase (o topo é o filtro DFT de magnitude após o highpass, o fundo é o do espaço polar do log):

Log Polar da DFT

Estou usando o OpenCV, que possui os métodos LogPolar e PhaseCorrelate. Embora o PhaseCorrelate, como minha implementação manual, me dê a resposta correta para a tradução, ele está incorreto na escala. Como o uso do OpenCV LogPolar ou o meu não afeta a correção, devo estar perdendo alguma coisa.

Qualquer ajuda seria apreciada.


11
Você descobriu o que estava errado?
Mr.WorshipMe

11
@ Mr.WorshipMe Infelizmente não.
Drew Cummins

@ Drew Cummins, acho que foi devido à imagem de teste que você usou, porque houve uma transição acentuada do plano de fundo. E quanto a outras imagens de teste? Além disso, a partir da última figura, houve diferenças aparentes entre as duas magnitudes; portanto, é melhor pré-formar o pré-processamento adequado da janela antes da DFT.
Lxg 27/03

Alguns dias antes de encontrar esse documento, estive tentando implementar o algoritmo sem sucesso. Eu queria saber se você poderia compartilhar sua implementação para um iniciante :)
Alexis España

Respostas:


1

Se você quiser algo realmente robusto, mas que possa ser mais caro em termos de computação, confira o algoritmo que implementei aqui . Ele implementa o artigo "Registro robusto de imagens usando a transformação log-polar" ( pdf ). Ele também tem a vantagem de ser invariante em rotação, além de invariante em conversão e escala. No meu aplicativo (art), ele foi capaz de registrar até mesmo imagens de aparência semelhante, não apenas versões transformadas da mesma imagem.


0

Eu acho que é devido a problemas de implementação específicos. Por exemplo, (1) é melhor executar o pré-processamento da janela antes da DFT; (2) você pode verificar a função Highpass () e pode consultar a do artigo de Reddy Chatterji Eq. (23) - (24). Além disso, há um limite para o valor da escala e você pode tentar outros valores da escala.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.