Wie funktioniert die Subpixel-Bildverschiebung mit DFT wirklich?

12

Ich versuche, die Qualität mehrerer Bildinterpolationsmethoden für eine Anwendung zu bewerten, bei der subpixelverschobene Bilder erzeugt werden. Ich dachte, ich könnte die Ergebnisse einer Subpixelverschiebung mit all diesen Interpolationsvarianten mit einem perfekt verschobenen Bild vergleichen, aber es ist wahrscheinlich nicht möglich, es zu erhalten (was wäre dann die Notwendigkeit einer Interpolation?).

Ich habe überlegt, die DFT + -Verschiebung im Frequenzbereich zu verwenden, und bin mir nicht sicher, wie sie im Vergleich zur expliziten Interpolation des Bildes (mit bilinearen, bikubischen usw.) tatsächlich funktioniert. Ich bin sicher, dass es unmöglich ein perfekt verschobenes Bild erzeugen kann , aber ich kann nicht meinen Finger darauf legen. Entspricht die Subpixelverschiebung mit DFT der Anwendung der Interpolation und wenn ja, welche? Welche Vorspannung haben die Pixelwerte in Bildern, die mit dieser Methode erhalten wurden? Vielen Dank!

EDIT: Nachdem ich über die Sache nachgedacht hatte, stellte ich fest, dass die FFT eine Annäherung (noch mehr die DFT) der ursprünglichen Funktion in Bezug auf Harmonische (Sinusfunktionen) ist, die einer Art trigonometrischer Interpolation gleichkommt. Ich erinnere mich an eine "Fourier-Reihen-Interpolations" -Formel für diskrete Daten, die eine trigonometrische Interpolation waren, aber nicht sicher, ob sie verbunden sind.

neuviemeporte
quelle
Die schnelle Fourier-Transformation (FFT) ist ein Algorithmus für die diskrete Fourier-Transformation. Die DFT ist keine Annäherung an die ursprüngliche Funktion in Bezug auf Harmonische, sondern eine Projektion eines Signals auf eine komplexe exponentielle orthogonale Basis.
Bryan
Okay, aber das Signal selbst ist eine abgetastete und quantisierte Annäherung an eine Intensitätsverteilung, und die DFT ist im Vergleich zu dieser theoretischen Verteilung in Bezug auf den Oberwellengehalt begrenzt. Sie können das genaue Signal von IDFT zurückerhalten, aber es wird eine gewisse Verzerrung geben, wenn Sie Dinge tun (wie das Verschieben), bevor Sie es zurückerhalten. Oder vermisse ich etwas?
Neuviemeporte
Die DFT akzeptiert zwar diskretisierte Eingaben, ist jedoch nicht auf quantisierte Eingaben beschränkt. Was das Signal ist, spielt keine Rolle. Wie Sie bereits betont haben, können Sie das genaue Signal zurückerhalten. Ich bin mir jedoch nicht sicher, was Sie unter "Verschieben" verstehen. Die Verschiebungseigenschaften im Frequenzbereich sind bekannt (komplexe Frequenzverschiebung im Zeitbereich). Wenn Sie den Wunsch haben, sich in der "Zeit" -Domäne zu verschieben, müssen Sie über das DFT-Dual davon nachdenken.
Bryan
1
Ich meine, wenn ich eine Operation an der DFT eines Signals durchführe (wie in meinem Fall - Subpixelverschiebung eines Bildes in der "Pixeldomäne" unter Verwendung des Fourier-Shift-Theorems), gibt die IDFT interpolierte Ergebnisse zurück, wie durch @ hotpaw2 erklärt Antworten. Diese Interpolation ist unvollkommen, weil das Signal nicht bandbegrenzt ist und die DFT selbst aus einem endlichen Satz quantisierter (0-255) Abtastwerte berechnet wurde.
Neuviemeporte

Antworten:

4

Eine DFT / FFT sowie eine zusätzliche Nullpunktauffüllung im Frequenzbereich und dann eine längere IDFT / IFFT geben interpolierte Punkte zurück. Diese Punkte werden mit einem periodischen Sinc-Kernel interpoliert. Dies ist eine perfekte Interpolation für Originaldaten, die streng bandbegrenzt auf weniger als die Hälfte der Originalabtastrate sind. Die Daten werden jedoch so behandelt, als wären sie kreisförmig umbrochen, was an den Rändern einiger Bilder zu merkwürdigen Ergebnissen führen kann. Daher möchten Sie die Ränder der Originalquelle vor der Interpolation mit einem schönen Füll- oder Rahmenfarbe auffüllen.

Wenn Sie das Upsampling um das Zweifache erhöhen (die FFT auf Null setzen, um die Länge vor der IFFT zu verdoppeln), können Sie mithilfe der interpolierten Punkte eine Verschiebung um ein halbes Pixel vornehmen. 3X für eine dritte Pixelverschiebung usw. Zum Verschieben können Sie die ursprünglichen Punkte plus alle überzähligen interpolierten Punkte wegwerfen, um die gewünschte Größe zu erhalten.

hotpaw2
quelle
5
@ hotpaw2: Der interpolierende Kernel für die DFT ist kein sinc () von unendlichem Ausmaß, in der Tat ist die DFT eine diskrete, endliche Transformation. Die Interpolation durch die DFT entspricht der Faltung mit dem Dirichlet-Kernel, von einigen Autoren auch als " periodic sinc ()" bezeichnet : en.wikipedia.org/wiki/Dirichlet_kernel
Arrigo
@ Arrigo: Einverstanden. Bearbeitete Antwort zum Reparieren.
hotpaw2
@ hotpaw2: Wenn ich die FFT auf die doppelte Größe auffülle, liefert die IFFT eine Rekonstruktion mit der doppelten Größe. Sie sind sich nicht sicher, was Sie mit dem Überschuss anfangen sollen? Thanks
neuviemeporte
Wirf die überschüssigen Punkte weg, die du nicht brauchst. In einem 2X-Upsampling wird jeder zweite Punkt im Wechsel mit den rekonstruierten Originalpunkten verschoben. In einem 3X-Upsample erhalten Sie 2 verschobene Punkte (um 1/3 und um 2/3) im Wechsel mit den Originalen. Je mehr Sie nachmustern, desto mehr werfen Sie weg.
hotpaw2
7

Es gibt mehrere wichtige Erkenntnisse, die Sie benötigen, um zu verstehen, wie Sie mit DFT ein Bild verschieben können.

Zunächst das Fourier-Theorum: Es ist wahrscheinlich einfacher, zuerst den kontinuierlichen (dh analogen) Fall zu betrachten. Stellen Sie sich vor, Sie haben eine Funktion, nennen Sie sie g (t). Nehmen wir der Einfachheit halber an, dass g (t) eine analoge Audioaufnahme ist, also eine eindimensionale Funktion, die kontinuierlich ist und den momentanen Druck als Funktion der Zeit darstellt.

Nun, g (t) ist eine Möglichkeit, wie wir unsere Audioaufnahme darstellen können. Ein anderes ist G (f). G (f) ist die Fourier-Transformation von g (t). Also ist G (f) = FT (g (t)). G (f) hat die gleichen Informationen wie g (t), repräsentiert diese Informationen jedoch im Frequenzbereich anstelle des Zeitbereichs. Es gibt ein paar wählerische Details zu Fourier-Transformationen, die ich nicht erwähnen werde.

Sie können sich G (f) gewissermaßen als die in g (t) enthaltene "Häufigkeitsverteilung" vorstellen. Wenn also g (t) eine Sinuswelle ist (dh ein reiner Ton), dann ist G (f) überall Null, außer bei der Frequenz dieses Tons. Dies ist wahrscheinlich ein guter Punkt, um zu erwähnen, dass G (f) im Allgemeinen eine komplexe Funktion ist - das heißt, dass es komplexe Zahlen zurückgibt, von denen angenommen werden kann, dass sie eine reelle und imaginäre Komponente oder eine Größe und Phase haben.

δ(w)δ

Ok, jetzt haben wir ununterbrochene FT's unter unserer Gürtellinie.

Hier ist die zweite Erkenntnis: Eine diskrete Fouriertransformation ist eine Fouriertransformation, wie ein abgetastetes Signal ein analoges Signal ist. In diesem Fall bezieht sich "diskret" auf die Quantisierung des Funktionsbereichs (Zeit oder Frequenz), nicht auf dessen Bereich. (Das abgetastete digitale Signal, das Sie von Ihrer Soundkarte erhalten, wird sowohl in der Domäne als auch im Bereich quantisiert.)

Der digitale Byte-Stream, den Sie von Ihrer Soundkarte erhalten, enthält "Samples" des ursprünglichen kontinuierlichen (analogen) Signals vom Mikrofon. Wenn wir die DFT unseres abgetasteten g (t) nehmen, erhalten wir immer noch ein G (f). Denken Sie daran, dass G (f) nur eine andere Art der Darstellung der in g (t) enthaltenen Informationen ist. Wenn wir Nyquists Theorum befolgen , enthält das abgetastete Signal g (t) die gesamte "Intelligenz" des ursprünglichen kontinuierlichen Signals, so dass unser diskretes G (f) alle Informationen aus unserem ursprünglichen kontinuierlichen Signal enthalten muss. In Klammern ist G (f) immer noch eine komplexe Funktion.

Hier kommt die Magie der Subpixel-Verschiebung ins Spiel, aber in diesem Fall schreibe ich über die zeitliche Verschiebung des Audiosignals um weniger als ein Sample, da es dasselbe ist.

eichπ2

Das heißt, wir können unsere Audioaufnahme zeitlich verschieben (um einen beliebigen Betrag, einschließlich eines Bruchteils der Abtastzeit), indem wir einfach die Phase von G (t) ändern. Eigentlich ist diese Aussage vielleicht etwas zu beiläufig. Für ein nicht quantisiertes, abgetastetes Signal kann die Phase willkürlich eingestellt werden (dies ist ein Teil des Grundes, warum ich früher zwischen der Quantisierung der Domäne und dem Bereich unterschieden habe). Für ein quantisiertes abgetastetes Signal (zum Beispiel unseren Audio-Bytestrom) bestimmt die Quantisierungsschrittgröße (dh die Anzahl der Bits) die Auflösung, mit der wir die Phase einstellen können. Wenn wir die Fouriertransformation G (f) invertieren (oder für dieses abgetastete Signal DIFT), wird der neue Satz von Abtastwerten g '(t) = DIFT (G (F)) alle zeitlich um den von uns ausgewählten Betrag verschoben.

Wenn Sie dies auf Ihre Pixel anwenden, verwenden Sie einfach eine zweidimensionale FT anstelle der hier beschriebenen eindimensionalen FT.

nick g
quelle