Ich habe dies bei Mathematics Stack Exchange gestellt, aber da diese Art von an der Grenze der Fragen liegt, die normalerweise dort gestellt werden, und der Fragen, die Sie hier sehen, werde ich sie auch hier stellen. (Bis jetzt gab es dort keine Aktivität zu meiner Frage.)
In der zweidimensionalen diskreten Signalanalyse (insbesondere Bildverarbeitung) fand ich eine Definition für die normalisierte Kreuzkorrelation zwischen zwei Bildern, beide von Größe und ist:
Dies wird angeblich von der Funktion normxcorr2
in der Signal Processing Toolbox in MATLAB ausgeführt, obwohl der Fast Normalized Cross-Correlation-Algorithmus von JP Lewis verwendet wird. Im Vergleich zu der von Kuglin und Hines vorgeschlagenen Phasenkorrelationsmethode (mit normalisiertem Kreuzleistungsspektrum):
Ohne die elementweise Normalisierung vor der inversen Fourier-Transformation ist dasselbe wie eine nicht normalisierte Kreuzkorrelation, mit der Ausnahme, dass die Fourier-Transformation davon ausgeht, dass sich das Signal im räumlichen Bereich wiederholt. Es ist klar, dass durch Betrachten der resultierenden Korrelation "Bilder" in MATLAB, die ich aber erwartet hatte scheint fast diskontinuierlich von den Bildern, auf denen ich die Methode teste, während fällt immer viel glatter aus (das Ergebnis Bilder sind immer "fleckig", sind nicht). Warum ist das? Ich nehme an, es hat etwas mit der elementweisen Normalisierung im Fourier-Bereich zu tun, was im Grunde genommen so ist, als würde man das Signal auf eine Art und Weise beschneiden, aber ich weiß nicht, wie ich dies aus bekannten Eigenschaften des (inversen) schließen kann. Fourier-Transformation, wenn dies überhaupt eine korrekte Annahme ist.
Hier sind Beispiele für die Unterschiede (wurde verstärkt, um den Unterschied in den Eigenschaften der Bilder deutlicher darzustellen). Sie werden an denselben 2 Bildern ausgeführt.
- : Normalisierte Kreuzkorrelation
- : Phasenkorrelation
Zusammenfassend meine Frage: Warum ist so "fleckig", während ist nicht?
r2
, versuchen Sie zu erniedrigeng1
undg2
wenden Sie dann zuerst diefft
.r1
undr2
sollte gleich sein. eine für den Raumbereich und die andere für den Frequenzbereich, aber äquivalent bis auf eine Normalisierung durch die Normen.Antworten:
Ich bin auf dieses Rätsel in einem eindimensionalen Fall gestoßen, und so werde ich es präsentieren. Betrachten Sie zwei Signale, die Sie korrelieren möchten. Signal 1 (Abbildung Tafel a) ist eine gedämpfte Sinuswelle und Signal 2 (Abbildung Tafel b) ist zwei Instanzen von Signal 1, jedoch mit leicht unterschiedlichen Amplituden.
Verwenden Sie nun eine normalisierte Kreuzkorrelation, wie Sie sie in Ihrer Frage definiert haben (Abbildung c). Das Ergebnis ist eine sanft oszillierende Funktion, die eine Spitzenamplitude aufweist, wenn die Spitze von Signal 1 und die Spitze von Signal 2 ausgerichtet sind. Umgekehrt weist die normalisierte Kreuzkorrelationsfunktion Täler auf, wenn die Spitze von Signal 1 mit den Tälern von Signal 2 übereinstimmt .
Verwenden Sie dann eine Phasenkorrelation, wie Sie sie in Ihrer Frage definiert haben (Abbildung d). Eine Phasenkorrelation beinhaltet eine Division des Absolutwerts (oder der Amplitude) der beiden Signale. In einem 1D-Fall ist das ein Vektor und in einem 2d-Fall, wie Ihre Frage lautet, ist das eine Matrix. In beiden Fällen können die Werte in diesem Divisor sehr nahe bei Null liegen, und wenn Sie durch etwas nahe Null dividieren, erhalten Sie Spitzen oder Diskontinuitäten .
Es gibt verschiedene Strategien, die eine Tiefpassfilterung der Eingangssignale oder der phasenkorrelierten Funktion umfassen. Diese Seite zum Stapelüberlauf kann hilfreich sein: /programming/30630632/performing-a-phase-correlation-with-fft-in-r
quelle