Estoy tratando de hacer el registro de imágenes usando la correlación de fase como se describe en el documento de Reddy Chatterji . En mi caso, las imágenes pueden ser escaladas y traducidas entre sí.
El algoritmo para encontrar la escala relativa, según tengo entendido, es (ver: el diagrama de flujo del 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 escala me da valores aparentemente sin sentido (muy diferentes de una imagen a otra y nunca correctos).
Pero ignorando la escala, el mismo enfoque de correlación de fase funciona bien para la traducción; y entonces sospecho que tengo un problema con mi transformación log-polar. Aquí hay un ejemplo, donde resolví la traducción: la imagen de la izquierda es la original y la derecha se ha recortado y traducido, la solución se muestra en la parte superior del original:
Para el log-polar transformar, I primera transformo en el espacio dondeIes la imagen original,res el radio de la imagen (medio ancho) yNθes el número de muestras en ladirecciónθ. I a continuación muestra a partir de esta transformar en espacio de registro polar:Ilog(ρ,θ)=I(logb(ρ),θ) , dondeb=(2r)-Nρcomo se describe en
Por último, esto muestra la transformación real por la que pasan las imágenes antes del paso de correlación de fase (la parte superior es el filtro de paso alto de magnitud DFT, la parte inferior es la del espacio polar logarítmico):
Estoy usando OpenCV, que tiene los métodos LogPolar y PhaseCorrelate. Mientras que PhaseCorrelate, como mi implementación manual, me da la respuesta correcta para la traducción, es incorrecta en escala. Dado que el uso de OpenCV LogPolar o el mío no afecta la corrección, me falta algo.
Cualquier ayuda sería apreciada.