Zentrieren der Nullfrequenz für die diskrete Fourier-Transformation


11

Ich arbeite an einer Bildverarbeitungsanwendung, die eine diskrete Fourier-Transformation verwendet, um Unschärfe / Schärfen zu implementieren. Die Anwendung funktioniert mehr oder weniger, aber etwas an der Mechanik verwirrt mich immer noch.

Insbesondere wird auf diese Weise der Prozess des Zentrierens der Nullfrequenzen durchgeführt.

In dem Beispiel, das ich gesehen habe, wird das Eingabebild (mit Graustufenintensitäten) vorverarbeitet, indem es mit einer Matrix der Größe multipliziert wird, die dem Eingabebild entspricht, dessen Werte , wobei x die Zeile, y die Spalte ist. also ein Muster abwechselnd 1 und - 1(- -1)x+yxy1- -1

Gemäß den Anmerkungen entspricht dies dem Vertauschen der Quadranten der Matrix durch Umdrehen der und y- Achse.xy

Ich verstehe, warum dies getan wird, und ich möchte betonen, dass ich verstehe, dass mein Code / Fourier-Zeug funktioniert. Ich verstehe nur nicht, warum das Multiplizieren der Eingabematrix mit 1 / -1 dazu führt, dass die Nullfrequenzkomponente um 0 zentriert wird.

Vielen Dank


Eine Referenz finden Sie auch in Kapitel 4, 4.6 - Implementierung aus der digitalen Bildverarbeitung von Gonzalez (ich habe die zweite Ausgabe). Ich hoffe es hilft.
Hakamami

Antworten:


18

Oh! Was für ein cooler Trick! Es funktioniert aufgrund des Faltungssatzes (dh die Multiplikation im räumlichen / zeitlichen Bereich entspricht der Faltung im Frequenzbereich).

Es dreht sich nicht um die und y- Achse, sondern dreht das Bild der Fourier-Transformation (denken Sie daran, sich halb um einen Zylinder zu verschieben). Der Trick dabei ist, dass das Abwechseln von -1,1 im räumlichen Bereich ein Signal mit der höchsten Frequenz ist. Die Fourier-Transformation dieses Bildes ist also ein einzelner Punkt im Frequenzbereich. Das Falten um einen einzelnen Punkt entspricht dem Verschieben (Drehen) des Bildes um den Versatz des Punktes von der Nullfrequenz.xy

Hier ist ein Testbild : Testbild. Die Fourier-Transformation sieht so aus:Fourier-Transformation des Testbildes

Wenn Sie die Fourier-Transformation des alternierenden Bildes ( Schachbrettbild) durchführen, ergibt sich ein einzelner Punkt genau in der Mitte der Fourier-Transformation : Geben Sie hier die Bildbeschreibung ein. (Denken Sie daran, dass wir unsere Rotation noch nicht durchgeführt haben. Das Zentrum der Fourier-Transformation sind also die hohen Frequenzen und die niedrigen Frequenzen befinden sich immer noch an den Ecken.) Aber dies ist der "Rotationskern"! Wenn Sie sich mit diesem Rotationskern befassen, wird alles nach unten und rechts verschoben (aber Dinge, die von unten rechts abfallen, drehen sich nach oben links.)

Wenn Sie das Originalbild mit dem Rotationskern (in der Bilddomäne) falten, erhalten Sie: gefaltetes BildWährend Sie das Fourier-Transformationsbild mit dem Rotationskern (im Frequenzbereich) falten, erhalten Sie : gedrehte Fourier-Transformation.

Und wir können überprüfen, ob das Multiplizieren des Zeugnisses mit dem Schachbrett in der Bilddomäne ergibt Multiplikationsbild, was eine Fourier-Transformation von: hat erneut gedrehte Fourier-Transformation.


Ich bin verwirrt. Dies verwendet Faltung, um eine fftshiftähnliche Funktion zu implementieren ? Ist es nicht rechnerisch billiger, die 4 Quadranten direkt neu anzuordnen?
Endolith

2
Hier gibt es keine direkte Faltung. Dies verwendet eine pixelweise Multiplikation in der Bilddomäne, um das Äquivalent einer Faltung in der Fourierdomäne zu erhalten. Ja, fftshiftist nicht sehr teuer, aber dieser Trick hat möglicherweise ein besseres Cache-Verhalten. Die pixelweise Multiplikation dreht tatsächlich nur das Vorzeichen jedes anderen Pixels. Das Schreiben des Lese-, Änderungs- und Schreibvorgangs ist so einfach zu vektorisieren, dass es ein garantierter Cache-Treffer ist und es für den Prozessor einfach ist, die Lesevorgänge vorab abzurufen.
Wandering Logic

Oh, richtig, es ist ein Vorzeichenwechsel, keine echte Multiplikation.
Endolith

Warum sieht die Fourier-Transformation des Testbildes (das zweite Bild) so aus? Ich sehe tatsächlich zwei Bilder, schwarz übereinander.
Hakamami

10

Die Antwort von Wandering Logic ist korrekt und detailliert. Ich dachte nur, Sie möchten etwas Mathematik anstelle von Bildern sehen:

(- -1)k=ejωω2π(k/.2)

Der Effekt ist, dass die Nullfrequenz - die zuvor bei Index 0 lag - jetzt die Hälfte der Bildbreite (oder -höhe) beträgt, je nachdem, ob Sie die Spalten oder die Zeilen multiplizieren.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.