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.
fuente
Respuestas:
Si desea algo realmente robusto, pero que puede ser más costoso desde el punto de vista computacional, puede consultar el algoritmo que implementé aquí . Implementa el documento, "Registro robusto de imágenes usando la transformación Log-Polar" ( pdf ). También tiene la ventaja de ser invariante en rotación, además de invariante de traducción y escala. En mi aplicación (arte), fue capaz de registrar incluso imágenes de aspecto similar, no solo versiones transformadas de la misma imagen.
fuente
Supongo que se debe a problemas de implementación específicos. Por ejemplo, (1) es mejor realizar el preprocesamiento de ventanas antes del DFT; (2) puede verificar la función Highpass (), y puede consultar la que se encuentra en la ecuación de papel de Reddy Chatterji (23) - (24). Además, hay un límite para el valor de escala, y puede probar otros valores de escala.
fuente