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.