Verwenden des inversen Filters zum Korrigieren eines räumlich gefalteten Bildes (Entfaltung)

8

Im Rahmen einer Hausaufgabe implementieren wir den Inverse Filter. Verschlechtern Sie ein Bild und stellen Sie es mit einem inversen Filter wieder her.

Ich falte das Bild im räumlichen Bereich mit einem 5x5-Boxfilter. I FFT den Filter, FFT das verschlechterte Bild, dann dividiere das verschlechterte Bild durch den Filter. Inverse FFT das Ergebnis in ein Bild und ich bekomme Müll.

Wenn ich das Bild FFT, den Filter FFT, die beiden multipliziere, das Ergebnis durch den FFT-Filter dividiere, komme ich dem Originalbild offensichtlich sehr nahe. ((X * Y) / Y ~ == X)

Ich habe eine Ahnung, dass die Mathematik nicht so einfach ist wie "räumlich gefaltete == FFT-Multiplikation".

Was ist der richtige Weg, um den Inversen Filter zu verwenden? Ich habe den genauen verwendeten Kernel, der das Bild verschlechtert. Ich füge keinen Lärm hinzu.

In Boviks Lehrbuch The Essential Guide to Image Processing wird der Inverse Filter fast vollständig verworfen. Gonzalez & Woods ist etwas hoffnungsvoller, springt aber fast sofort zum Wiener Filter.

Ich habe eine ähnliche Frage auf stackoverflow.com /programming/7930803/inverse-filter-of-spatially-convolved-versus-frequency-convolved-image

(Diese Fragen sollten auch mit [Hausaufgaben] markiert sein, aber das Tag existiert noch nicht und ich habe nicht den Repräsentanten, um es zu erstellen.)

BEARBEITEN. Für einige der großartigen Vorschläge unten. @ dipan-mehta Bevor ich FFT, fülle ich den Faltungskern auf die gleiche Größe wie das Bild. Ich setze den Kernel oben links ein. Ich ifft (ifftshift ()) speichere dann auf einem Bild und bekomme ein gutes Ergebnis. Ich habe das ifft (ifftshift ()) sowohl für den Kernel als auch für das Image ausgeführt. Gute (ish) Ergebnisse. (Bilder finden Sie in meiner Frage zu /programming/7930803/inverse-filter-of-spatially-convolved-versus-frequency-convolved-image .)

@ Jason-r ist wahrscheinlich richtig. Ich verstehe die Mathematik der zugrunde liegenden Faltung + Transformation nicht. "Entfaltung" war ein neues Wort für mich. Ich habe noch viel zu lernen. Danke für die Hilfe!

Meine Lösung für die Hausaufgabe besteht darin, alles im Frequenzbereich zu erledigen. Ich habe mit dem Professor gesprochen. Ich machte die Aufgabe schwieriger als nötig. Sie wollte, dass wir Rauschen hinzufügen und dann den Inverse Filter, den Wiener Filter und den Constrained Least Squares Filter ausprobieren. Der Punkt der Übung war zu sehen, wie die Filter mit Rauschen umgehen.

David Poole
quelle
1
Füllen Sie den Filter mit Nullen auf, damit er die gleiche Größe wie das Bild hat, bevor Sie die FFT aufnehmen? Machst du die komplexe Aufteilung richtig?
Dima
Ja, den Filter mit Nullen aufgefüllt, Kernel oben links. Mein gesamter Python / Numpy-Code befindet sich unter dem oben genannten Link stackoverflow.com. Die komplexe Aufteilung ist wahrscheinlich mein Problem.
David Poole

Antworten:

8

Es gibt einige Unterfragen, die ich separat behandeln werde:

  • Die Faltung im räumlichen Bereich (oder entsprechend im Zeitbereich für zeitabgetastete Signale) entspricht der Multiplikation im Frequenzbereich. In abgetasteten Systemen gibt es einige Feinheiten bei Grenzfällen (dh bei Verwendung der DFT ergibt die Multiplikation im Frequenzbereich tatsächlich eine kreisförmige Faltung, keine lineare Faltung), aber im Allgemeinen ist es wirklich so einfach.

  • Reine inverse Filterung ist in der Praxis fast nie die richtige Lösung. In den meisten Fällen haben Sie keinen Zugriff auf den genauen Filter, der auf Ihre Daten angewendet wurde, sodass Sie ihn ohnehin nicht einfach invertieren können. Selbst wenn Sie den Filter kennen, ist er immer noch problematisch. Berücksichtigen Sie die Tatsache, dass der Filter bei bestimmten räumlichen Frequenzen Nullen haben kann. Wenn dies der Fall ist, gehen nach dem Anwenden des Filters auf Ihr Bild alle Informationen bei diesen Frequenzen verloren. Wenn Sie diesen Filter naiv invertieren, hat er bei diesen Nullen eine unendliche (oder zumindest sehr hohe) Verstärkung. Wenn Sie dann die naive Umkehrung auf ein Bild anwenden, das bei diesen Frequenzen einen additiven Gehalt aufweist (z. B. Rauschen, was wahrscheinlich der Fall ist), wird diese nicht überwachte Komponente stark verstärkt. Dies ist im Allgemeinen nicht wünschenswert.

    Dieses inverse Filterproblem ist dem Ausgleich in Kommunikationssystemen sehr ähnlich, wo dieses Phänomen als Rauschverbesserung bezeichnet wird . In diesem Zusammenhang wird der Inverse-Filter-Ansatz als Zero-Forcing-Equalizer bezeichnet , der selten tatsächlich verwendet wird.

  • Das Gebiet, das Sie erkunden, wird allgemein als Entfaltung bezeichnet . Entfaltung ist in der Regel eine knifflige Operation. Selbst wenn Sie den genauen Filter kennen, der angewendet wurde, und ihn rückgängig machen möchten, ist dies nicht immer so einfach. Wie Sie bereits bemerkt haben, wird der inverse Filteransatz normalerweise zugunsten eines Wiener-Filters oder einer anderen Struktur beiseite geschoben , die nicht darauf abzielt, das System genau zu invertieren, sondern die Eingabe in das System abzuschätzen und gleichzeitig ein Fehlerkriterium zu minimieren (Mittelwert minimieren) -quadratischer Fehler ist ein häufiges Ziel). Wie zu erwarten ist, wird das Anwenden eines Wiener-Filters auf dieses Problem als Wiener-Entfaltung bezeichnet .

Jason R.
quelle
"Entfaltung" war ein neues Wort für mich. Ich muss noch viel lernen. Vielen Dank!
David Poole
@JasonR Müssen wir nicht eine "Trainer" -Sequenz im Bild für die Wiener Entfaltung kennen, damit das MMSE-Kriterium in Bezug auf etwas, von dem bekannt ist, dass es wahr ist, minimiert wird?
Spacey
1
Im Allgemeinen müssen Sie die spektrale Leistungsdichte des Signals und die Übertragungsfunktion kennen, die auf das Signal angewendet wurde, um das Wiener-Filter zu entwerfen. Für den wahrscheinlichen Fall, dass Sie nicht alle diese Informationen kennen, können Sie fundierte Vermutungen anstellen, die eine Funktionsstruktur ergeben, die robuster als der inverse Filter ist. In diesem Abschnitt auf der Wikipedia-Seite finden Sie eine Diskussion.
Jason R
3

Ich hoffe, Sie haben keinen Fehler bei der Berechnung gemacht für -

Ich falte das Bild im räumlichen Bereich mit einem 5x5-Boxfilter. I FFT den Filter, FFT das verschlechterte Bild, dann dividiere das verschlechterte Bild durch den Filter. Inverse FFT das Ergebnis in ein Bild und ich bekomme Müll.

Angenommen, Ihr Bild hat eine Größe von 256 x 256 und ein Filter eine Größe von 5 x 5. Um die Filterung durch Multiplikation der FFTs anzuwenden, müssen Sie zuerst den Filter in eine äquivalente Größe konvertieren. Dazu müssen Sie den 5x5-Box-Filter in der "TOP-Ecke" (nicht in der Bildmitte) belassen und ihn mit Nullen auffüllen, um 256x256 zu füllen. Sie sollten eine FFT von 256x256 für den Filter erhalten.

Um die Diagnose zu erleichtern, nehmen Sie in Programmierschritt 1 zunächst nur eine 256 x 256 FFT Filter und prüfen Sie, ob die IFFT-Routine Ihnen den Filter zurückgeben kann. Testen Sie auf die gleiche Weise, ob FFT -> IFFT des Bildes selbst rückwärts richtig funktioniert.

Schritt 2 - Wenn Sie nur Filter (und keinen inversen Filter) in der FFT-Domäne durch Multiplizieren anwenden, überprüfen Sie das resultierende Bild, nachdem IFFT in Ordnung ist. Es sollte grundsätzlich unscharfes Bild sein.

Wenn alle Ihre Programmierungen korrekt sind, stellen Sie bitte sicher, dass bei 1 / x für den FFT-Koeffizienten keine Fehler durch Null geteilt werden. Wenn umgekehrt zu viele Spitzenwerte auftreten, führen die Multiplikationen zu starken Verzerrungen.

Im Allgemeinen - für jedes stabile Filter ist das inverse Filter per Definition instabil - könnte dies der Hauptgrund sein. Ich möchte jedoch immer die Implementierung überprüfen, bevor ich theoretische Grenzen erkunde.

Wenn es gut gemacht wird, habe ich gesehen, dass die Multiplikation in FFT eine Faltung im Probenraum ist, sowohl für Bilder als auch für Audiosignale.

Dipan.

Dipan Mehta
quelle