J'essaie de faire l'enregistrement d'image en utilisant la corrélation de phase comme décrit dans l'article de Reddy Chatterji . Dans mon cas, les images peuvent être redimensionnées et traduites les unes par rapport aux autres.
L'algorithme pour trouver l'échelle relative, si je comprends bien, est (voir: l'organigramme de l'article ):
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]
L'échelle me donne des valeurs apparemment absurdes (très différentes d'une image à l'autre et jamais correctes).
Mais en ignorant l'échelle, la même approche de corrélation de phase fonctionne bien pour la traduction; et donc je soupçonne que j'ai un problème avec ma transformée log-polaire. Voici un exemple, où j'ai résolu pour la traduction - l'image de gauche est l'original et la droite a été recadrée et traduite - la solution est montrée au-dessus de l'original:
Pour la transformation log-polaire, je me transforme d'abord en espace polaire: où est l'image d'origine, est le le rayon de l'image (demi-largeur) et est le nombre d'échantillons dans la direction . J'échantillonne ensuite à partir de cela pour me transformer en espace polaire logarithmique: où comme décrit en 1 pour qu'il couvre tout l'espace polaire.IrNθθIlog(ρ,θ)=I(logb(ρ),θ)b=(2r)-Nρ
Voici les exemples d'images dans l'espace log-polaire avec (au cas où il y aurait quelque chose de mal):
Enfin, cela montre la transformation réelle des images avant l'étape de corrélation de phase (en haut est le filtre passe-haut de magnitude DFT, en bas celui dans l'espace polaire logarithmique):
J'utilise OpenCV, qui dispose des méthodes LogPolar et PhaseCorrelate. Bien que PhaseCorrelate, comme mon implémentation manuelle, me donne la bonne réponse pour la traduction, elle est incorrecte à l'échelle. Étant donné que l'utilisation d'OpenCV LogPolar ou de la mienne n'affecte pas l'exactitude, je dois manquer quelque chose.
Toute aide serait appréciée.
la source
Réponses:
Si vous voulez quelque chose de vraiment robuste, mais qui pourrait être plus coûteux en calcul, vous voudrez peut-être consulter l'algorithme que j'ai implémenté ici . Il met en œuvre le document, "Enregistrement d'image robuste à l'aide de la transformation Log-Polar" ( pdf ). Il présente également l'avantage d'être invariant en rotation, en plus de la translation et de l'échelle invariante. Dans mon application (art), il était capable d'enregistrer même des images d'apparence similaire, pas seulement des versions transformées de la même image.
la source
Je suppose que cela est dû à des problèmes de mise en œuvre spécifiques. Par exemple, (1) il est préférable d'effectuer le prétraitement de fenêtrage avant la DFT; (2) vous pouvez vérifier la fonction Highpass (), et vous pouvez vous référer à celle dans le papier de Reddy Chatterji Eq. (23) - (24). En outre, la valeur d'échelle est limitée et vous pouvez essayer d'autres valeurs d'échelle.
la source