2016-05-26 8 views
0

Ich habe eine Bildverarbeitungsanwendung geerbt. Versuche, die Dinge hier herauszufinden. Ich habe drei Fragen. 1) Habe ich die Sequenz korrekt F2C, C2C, C2F? 2) Soll ich C2C einmal in eine Richtung laufen lassen? 3) Welche Richtung soll ich verwenden (vorwärts oder rückwärts)?cammt Bildverarbeitung

Hintergrund:

Der Eingang und der Ausgang ist ein 2D-Bild.

Zuerst wird ein R2C mit cufftF2C (Cuda aus dem Regal) Dann ist ein C2C fertig. Dies wurde von Originalentwickler handkodiert. Schließlich C2R erfolgt mit CuffC2F (Cuda aus dem Regal)

Das Ergebnis ist ein großartiges Bild nur unschöne Zick-Zack-Linien erscheinen. Der ursprüngliche Entwickler verwendete 1D-Pläne (nx = x und batch = y). Ich möchte diese durch 2D-Pläne ersetzen (nx = x und ny = y). Ich möchte auch den selbstgewachsenen C2C durch die Cuda aus dem Regal cmtC2C ersetzen.

+3

Es gibt kein F2C oder C2F in [CUFFT] (http://docs.nvidia.com/cuda/contt/index).html # Zusammenfassung). Vielleicht meinst du R2C und C2R. Eine wirklich gute Antwort würde (IMO) eine wirklich lange Antwort erfordern, meistens ein Tutorial zur Fourier-Transformation. Es scheint mir eine ziemlich breite Frage zu sein. Es ist nicht klar, was für ein Wissen Sie von Fourier-Transformationen haben, was sie tun und wie sie verwendet werden (ein Thema, das völlig unabhängig von CUDA ist). –

Antwort

1

1) Habe ich die Sequenz korrekt [R2C], C2C, [C2R]? Nein, in der Fourier-Transformation gibt es zwei Bereiche: Raum und Frequenz. Eine Transformation geht von Raum zu Frequenz mit CUFFT_FORWARD und Frequenz zu Raum mit CUFFT_INVERSE.

2) Sollte ich C2C einmal in einer Richtung laufen lassen? Abhängig von der Verwendung der hermiteschen Symmetrie benötigen Sie nicht unbedingt C2C (siehe unten).

3) Welche Richtung soll ich verwenden (vorwärts oder rückwärts)? Wenn Sie einen Bildverarbeitungsfilter anwenden möchten, liegt Ihre Ausgabe höchstwahrscheinlich im selben Bereich wie Ihre Eingabe. Daher müssen Sie sie als eine Vorwärts- und eine Rückwärtstransformation anwenden.

Hinweise zur Datenlayout und R2C/C2R Optimierungen

Wenn C2R oder R2C Transformationen verwenden, cufftis making use of the Hermitian symmetry des Frequenzraumvektor, also lediglich den ersten Hälfte des Vektors Speichern (der restliche Teil ist nicht sogar berührt):

Neben der allgemeinen Komplex-zu-Komplex (C2C) zu transformieren, cuFFT implementiert effizient zwei andere Arten: real-to-Komplex (R2C) und komplex-to-real (C2R). In vielen praktischen Anwendungen ist der Eingabevektor reellwertig. Es kann leicht gezeigt werden, dass in diesem Fall die Ausgabe die hermitesche Symmetrie erfüllt (X k = X N - k *, wobei der Stern die komplexe Konjugation bezeichnet). Das Umgekehrte ist auch wahr: Für den komplex-hermiteschen Eingang wird die inverse Transformation rein reellwertig sein. cuFFT nutzt diese Redundanz und arbeitet nur auf der ersten Hälfte des hermiteschen Vektors.

Wenn die Operation Sie in der Frequenzdomäne ausführen nicht die gleiche Hermitesche Symmetrie hat, ist die Optimierung nicht mehr wahr, und der C2R Betrieb würde Ihnen das nicht das erwartete Ergebnis liefern.

Beachten Sie auch die Datenanforderungen und das Layout des Ansatzes, der sich etwas von dem für C2C unterscheidet.