Ansätze
Es gibt viele Methoden zur Entfaltung (der Degradationsoperator ist nämlich linear und zeit- / rauminvariant).
Alle versuchen, mit der Tatsache umzugehen, dass das Problem in vielen Fällen schlecht ist.
Bessere Methoden sind solche, die dem Modell der wiederherzustellenden Daten eine gewisse Regularisierung hinzufügen.
Dies können statistische Modelle (Priors) oder beliebiges Wissen sein.
Für Bilder ist ein gutes Modell stückweise glatt oder spärlich in den Verläufen.
Um der Antwort willen wird jedoch ein einfacher parametrischer Ansatz gewählt: - Minimierung des Fehlers der kleinsten Quadrate zwischen den wiederhergestellten Daten im Modell und den Messungen.
Modell
Das Modell der kleinsten Quadrate ist einfach.
Die Zielfunktion als Funktion der Daten ist gegeben durch:
f( x ) = 12∥ h ∗ x - y∥22
Das Optimierungsproblem ist gegeben durch:
argMindestxf( x ) = argMindestx12∥ h ∗ x - y∥22
xhy
x ∈ R.nh ∈ R.ky∈ R.mm = n - k + 1
Dies ist eine lineare Operation im endlichen Raum und kann daher unter Verwendung einer Matrixform geschrieben werden:
argMindestxf( x ) = argMindestx12∥ H.x - y∥22
H.∈ R.m × n
Lösung
Die Lösung der kleinsten Quadrate ist gegeben durch:
x^= ( H.T.H.)- 1H.T.y
H.T.H.cond( H.) = cond( H.T.H.)- -- -- -- -- -- -- -- -- -- -√
Zustandsnummernanalyse
Was steckt hinter dieser Bedingungsnummer?
Man könnte es mit linearer Algebra beantworten.
Ein meiner Meinung nach intuitiverer Ansatz wäre es jedoch, im Frequenzbereich darüber nachzudenken.
Grundsätzlich dämpft der Degradationsoperator Energie mit im Allgemeinen hoher Frequenz.
Da dies in der Frequenz im Grunde genommen eine elementweise Multiplikation ist, würde man sagen, dass der einfache Weg, sie zu invertieren, die elementweise Division durch das inverse Filter ist.
Nun, es ist das, was oben gemacht wurde.
Das Problem tritt in Fällen auf, in denen der Filter die Energie praktisch auf Null abschwächt. Dann haben wir echte Probleme ...
Dies ist im Grunde das, was uns die Bedingungsnummer sagt, wie stark einige Frequenzen im Vergleich zu anderen gedämpft wurden.
Oben konnte man die Bedingungsnummer (unter Verwendung von [dB] -Einheiten) als Funktion des Gaussian Filter STD-Parameters sehen.
Wie erwartet, ist die Zustandszahl umso schlechter, je höher die STD ist, da eine höhere STD eine stärkere LPF bedeutet (Werte, die am Ende sinken, sind numerische Probleme).
Numerische Lösung
Das Ensemble des Gaußschen Weichzeichnungskerns wurde erstellt.
n = 300k = 31m = 270
In MATLAB wurde das lineare System gelöst, pinv()
das SVD-basiertes Pseudo Inverse und den \
Operator verwendet.
Wie man sehen kann, ist die Lösung bei Verwendung der SVD erwartungsgemäß viel weniger empfindlich.
Warum liegt ein Fehler vor?
Suche nach einer Lösung (für die höchste sexuell übertragbare Krankheit):
Wie man sehen konnte, ist das Signal bis auf den Anfang und das Ende sehr gut wiederhergestellt.
Dies ist auf die Verwendung von Valid Convolution zurückzuführen, die wenig über diese Beispiele aussagt.
Lärm
Wenn wir Lärm hinzufügen würden, würden die Dinge anders aussehen!
Der Grund, warum die Ergebnisse zuvor gut waren, liegt in der Tatsache, dass MATLAB die DR der Daten verarbeiten und die Gleichungen lösen konnte, obwohl sie eine große Bedingungszahl hatten.
Eine große Bedingungszahl bedeutet jedoch, dass das inverse Filter einige Frequenzen stark verstärkt (um die starke Dämpfung umzukehren).
Wenn diese Geräusche enthalten, bedeutet dies, dass die Geräusche verstärkt werden und die Wiederherstellung schlecht ist.
Wie man oben sehen konnte, wird der Wiederaufbau jetzt nicht mehr funktionieren.
Zusammenfassung
Wenn man den Degradationsoperator genau kennt und das SNR sehr gut ist, funktionieren einfache Entfaltungsmethoden.
Das Hauptproblem der Entfaltung ist, wie stark der Degradationsoperator Frequenzen dämpft.
Je mehr es abschwächt, desto mehr SNR wird für die Wiederherstellung benötigt (dies ist im Grunde die Idee hinter Wiener Filter ).
Frequenzen, die auf Null gesetzt wurden, können nicht wiederhergestellt werden!
In der Praxis sollten einige Prioritäten hinzugefügt werden, um stabile Ergebnisse zu erzielen.
Der Code ist in meinem StackExchange Signal Processing Q2969 GitHub Repository verfügbar .