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:
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):
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.
fonte
Respostas:
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.
fonte
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.
fonte