2011-01-08 10 views
4

Ich habe nach dem großartigen Quellcode des OpenCV gesucht, um die Punktzahlberechnung zu verstehen. Wie Sie vielleicht bemerkt haben, kann die Bibliothek eine Vorlage in einem Bild mit einem Konfidenzwert finden. Die cvMatchTemplate-Funktion gibt die Wahrscheinlichkeit und den Speicherort der Vorlage im Bild an.Wo finde ich eine gute Informationsquelle, die FFT-Phasenkorrelationsscoring erklärt

Da DFT langsam ist, entschied ich mich, die FFTW-Bibliothek für die Phasenkorrelation zu verwenden. Ich bekomme das Bild, expandiert auf eine Größe, die eine Potenz von 2 ist, dann das gleiche wie bei der Vorlage, berechnet zunächst die FFT für beide, multipliziert die beiden Arrays, berechnet die inverse FFT, normalisiert schließlich das Ergebnis.

Wenn ich dieses Ergebnis auf einer Bitmap zeige, zeigt es deutlich die Position der Vorlage, aber ich habe Schwierigkeiten bei der Berechnung der Korrelation. Ich habe versucht, cvMatchTemplate Methode Zeile für Zeile unter Debugger zu laufen, es hat nicht geholfen, da die Bibliothek DFT und beliebige Bildgrößen verwendet. Alle Tabellen, die in dieser Methode verwendet werden (Summe, Quadrat usw.), die für entsprechende willkürliche Größen und FFT erzeugt werden, verwenden Zweierpotenzen.

Ich würde für jede Information dankbar sein, wie man die Kerbe von diesem Ergebnis der Phasenkorrelation berechnet. Es gibt viele Quellen, die beschreiben "nimm das, nimm das, multipliziere sie, du siehst den weißen Punkt auf dem Bild, ja du findest es". Ich brauche eine Punktzahl genau wie cvMatchTemplate.

Ich bitte Sie, mich auf eine Website oder auf ein Papier mit der Logik dieser Berechnung oder auf ein Buch zu verweisen. Der Quellcode wäre perfekt, aber darauf habe ich keine Hoffnung.

Antwort

1

Zuerst stellen Sie sicher, dass Sie nicht "das Bild auf eine Potenz von 2 erweitern". Ich bin mir sicher, du meintest das nicht, aber mit FFTW kannst du trotzdem eine beliebige Größe FT berechnen.

Ich verstehe nicht, wofür Sie OpenCV verwenden. Wenn Sie die FFT haben, dann ist es ziemlich einfach, das normierte Kreuzleistungsspektrum selbst zu berechnen, mit anderen Worten die "Phasenkorrelationsformel".

Holen Sie sich die größte Größe FFT der Bilder, die Sie können, nicht zu Fenster zu vergessen. Berechnen Sie die CPS. Sobald Sie die Korrelationsoberfläche haben, suchen Sie nach dem Peak.

Ich weiß nicht, was OpenCV für Phase Korrelation bietet neben FT, aber das Papier Sie wollen,

G.A. Thomas, Television Motion Measurement for DATV and Other Applications, 1987, BBC Research Department.

+0

Vielen Dank für die schnelle Antwort. Ich benutze OpenCV, um kleine Bilder in größeren Bildern zu finden. Denkst du ich muss das Signal Fenster? Ich bin es in der Wave (Sound) Verarbeitung gewohnt. Aber das ist Bildverarbeitung. Übrigens weiß ich, dass FFTW eine beliebige FT-Größe berechnen kann, aber die Potenz von 2 ist schneller zu berechnen. Ich werde sowieso nach CPS suchen. –

+0

Ja, Sie müssen das Bild in 2 Dimensionen Fenster, das ist grundlegende Signalverarbeitung vor dem Finden der FT. Denken Sie darüber nach: Wenn Sie kein Fenster haben, falten Sie Ihr Signal implizit mit einer Zylinderfunktion. Wenn Sie eine Stärke von 2 FT verwenden möchten, verwenden Sie einen zentrierten Block in dem Bild der gewünschten Dimensionen, nicht "erweitern". FFTW ist sehr schnell für Nicht-Power von 2 Bildern. – koan

1

1) FFTW mit nicht-Power-of-2 Größe Arrays arbeiten können.

2) Der Fachgebiet Sie könnte/Studie zur Suche in der FFT Kreuzkorrelations Theorem:

„der Fourier-Transformation der Kreuzkorrelation von zwei Funktionen Transformation auf das Produkt der einzelnen Fouriertransformationen gleichwertig ist , wo einer von ihnen komplex konjugiert wurde "