Sto provando a fare la registrazione delle immagini usando la correlazione di fase come descritto nel documento di Reddy Chatterji . Nel mio caso, le immagini possono essere ridimensionate e tradotte l'una rispetto all'altra.
L'algoritmo per trovare la scala relativa, a quanto ho capito, è (vedi: il diagramma di flusso dal documento ):
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]
La scala mi dà valori apparentemente senza senso (selvaggiamente diversi da immagine a immagine e mai corretti).
Ma ignorando la scala, lo stesso approccio di correlazione di fase funziona bene per la traduzione; e quindi sospetto di avere un problema con la mia trasformazione log-polare. Ecco un esempio, in cui ho risolto la traduzione - l'immagine di sinistra è l'originale e quella di destra è stata ritagliata e tradotta - la soluzione è mostrata sopra l'originale:
Per il log-polari trasformare, in primo luogo ho trasformo in uno spazio
Infine, questo mostra l'effettiva trasformazione che attraversano le immagini prima del passaggio di correlazione di fase (in alto si trova DFT magnitudo post filtro passa-alto, in basso è quello nello spazio polare di registro):
Sto usando OpenCV, che ha i metodi LogPolar e PhaseCorrelate. Mentre PhaseCorrelate, come la mia implementazione manuale, mi dà la risposta corretta per la traduzione, non è corretto su scala. Poiché l'utilizzo di OpenCV LogPolar o il mio non influisce sulla correttezza, mi manca qualcosa.
Qualsiasi aiuto sarebbe apprezzato.