Log-Polar Registrazione immagine invariante basata su scala DFT


10

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:

La traduzione da sola funziona

Per il log-polari trasformare, in primo luogo ho trasformo in uno spazio

io^(ρ,θ)=io(r+ρcos(2πθNθ),r-ρpeccato(2πθNθ))
iorNθθ
io^log(ρ,θ)=io^(logB(ρ),θ)
B=(2r)-Nρ1 in modo che attraversi l'intero spazio polare.

ρ=θ=256

Log Polar

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):

Log Polar di DFT

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.


1
Hai capito cosa c'era che non andava?
Mr. Worship,

1
@ Mr.WorshipMe Purtroppo no.
Ha disegnato Cummins il

@Drew Cummins, immagino fosse dovuto all'immagine di prova che hai usato, perché c'è stata una netta transizione dallo sfondo. Che ne dici di altre immagini di prova? Inoltre, dall'ultima cifra, c'erano differenze evidenti tra le due magnitudini, quindi è meglio preformare una corretta pre-elaborazione della finestra prima del DFT.
lxg

Un paio di giorni prima ho trovato quel documento e ho cercato di implementare l'algoritmo senza successo. Mi chiedevo se potevi condividere la tua implementazione con un principiante :)
Alexis España,

Risposte:


1

Se vuoi qualcosa di veramente robusto, ma che potrebbe essere più costoso dal punto di vista computazionale, potresti voler controllare l'algoritmo che ho implementato qui . Implementa il documento, "Robust Image Registration Using Log-Polar Transform" ( pdf ). Ha anche il vantaggio di essere invariante alla rotazione, oltre alla traduzione e alla scala invariante. Nella mia applicazione (arte), è stato in grado di registrare anche immagini dall'aspetto simile, non solo versioni trasformate della stessa immagine.


0

Immagino sia dovuto a problemi di implementazione specifici. Ad esempio, (1) è meglio eseguire la pre-elaborazione delle finestre prima del DFT; (2) puoi controllare la funzione Highpass (), e puoi fare riferimento a quella nell'Eq di paper di Reddy Chatterji (23) - (24). Inoltre, esiste un limite per il valore di scala e puoi provare altri valori di scala.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.