Forum: Digitale Signalverarbeitung / DSP / Machine Learning Image denoising mit Kalman Filter in Matlab


von Jörg L. (scoobydoo)


Angehängte Dateien:

Lesenswert?

Hallo allerseits,

ich möchte ein digitales grauwertskaliertes Bild mit einem Kalman Filter 
entrauschen. Aus Testzwecken simuliere ich mir das Rauschen, das im Bild 
auftritt, selbst. Mit der Matlab Fkt.
1
imnoise(I,'gaussian',m,var_gauss)
 generiere ich ein mittelwertfreies (m=0) additives weißes Gaußsches 
Rauschen. Das verrauschte Bild möchte ich mit einem Kalman Filter 
entrauschen. Bei meiner bisherigen Methode arbeite ich mich hierbei 
pixelweise Zeile für Zeile vorwärts. Sprich, um die Intensität des 
aktuell interessierenden Pixels s(m,n) zu schätzen, dient die Intensität 
des vorherigen Pixels s(m,n-1) als prädiktiver Wert. Die bisherige 
Implementierung des genannten Ablaufs in Matlab ist mit angehähngt.

Nun meine Frage: Wie kann ich in die Schätzung der aktuellen 
Pixelintensität s(m,n) nicht nur einen prädiktiven Wert s(m,n-1), 
sondern mehrere, wie z.B. s(m,n-1), s(m-1,n+1),s(m-1,n), s(m-1,n-1), 
einfließen lassen?

Ich möchte die Voraussetzungen meiner angehängten bisherige 
Implementierung noch kurz beschreiben (falls hierbei schon Denkfehler, 
bzw. Unstimmigkeiten auftreten, würde ich mich sehr über Anmerkungen 
freuen):

Zur Anwendung des Kalman Filters muss das zu entrauschende Bild in eine 
Zustandsdarstellung

überführt werden.
Hierbei ist s der Zustandsvektor, welcher das originale (unverrauschte) 
Bild repräsentiert, r ist das verrauschte Bild, w das Prozessrauschen, v 
das (von mir eigens simulierte) Messrauschen. u ist der Eingangsvektor, 
wobei dieser im Folgenden gleich 0 gesetzt wird, da kein Eingangssignal 
existiert (B und D werden somit im Folgenden ebenfalls nicht weiter 
betrachtet). A und C sind System- und Ausgangsmatrix und G richtet sich 
danach welcher Pixel mit welchem Prozessrauschen behaftet ist. Da ich 
bisher nur jeweils einen Pixel betrachte, gilt im Folgenden A=C=G=1.

Im Weiteren wird vorausgesetzt, dass die Rauschvariablen w und v 
voneinander unabhängig sind und jeweils weißes normalverteiltes, und 
mittelwertfreies Rauschen reprästentieren (Voraussetzung für Anwendung 
des Kalman Filters). Die Varianzen der beiden Rauschsignale Q (zu w 
gehörig) und R (zu v gehörig) werden für die Gleichungen des Kalman 
Filters benötigt.

Alle weiteren Informationen sind den angehängen Matlab-Codeteilen zu 
entnehmen. Die Funktion kalmanFunc.m gibt die Gleichungen des Kalman 
Filters wieder, welche bei Bedarf z.B. auf Wikipedia oder anderweitigen 
Literaturquellen nachgesehen werden können.

Ich wäre äußerst erfreut, wenn mir jemand weiterhelfen kann, bzw. einen 
Denkanstoß geben kann.

: Bearbeitet durch User
von Michael W. (Gast)


Lesenswert?

Was wäre denn jetzt die Frage? Das entscheidende ist die Kenntnis über 
das Bild und die realen Rauschfrequenzen und das ist eine reine Annahme, 
nach deren Massgabe dann frequenzmässig abgeschnitten wird. Interessant 
wird es dann, wenn man das Rauschen aus dem vorherigen Bild ermitteln 
kann. Dann muss aber in die Zeit hineingemessen werden.

von Jörg L. (scoobydoo)


Lesenswert?

Markus W. schrieb:
> Was wäre denn jetzt die Frage?

Die Hauptfrage lautet: Wie kann ich in die Schätzung der aktuellen
Pixelintensität s(m,n) nicht nur einen prädiktiven Wert s(m,n-1),
sondern mehrere, wie z.B. s(m,n-1), s(m-1,n+1),s(m-1,n), s(m-1,n-1),
einfließen lassen?

Markus W. schrieb:
> Das entscheidende ist die Kenntnis über
> das Bild und die realen Rauschfrequenzen und das ist eine reine Annahme,
> nach deren Massgabe dann frequenzmässig abgeschnitten wird. Interessant
> wird es dann, wenn man das Rauschen aus dem vorherigen Bild ermitteln
> kann. Dann muss aber in die Zeit hineingemessen werden.

Im Realfall besteht keine Kenntnis über das originale Bild, 
beziehungsweise die realen Rauschfrequenzen. Es besteht auch kein 
vorhergehendes oder nachfolgendes Bild, sprich in die Zeit kann leider 
nicht hineingemessen werden. Grundlage ist also ein unbekanntes Bild, 
das mit Rauschen behaftet (im derzeitigen Modell wird von Gaußschem 
Rauschen ausgegangen).

Ich möchte allein aus mehreren Intensitätswerten umliegender Pixel sowie 
der (anfangs teils empirischen) Einstellung der Rauschvariablen Q und R 
die möglichst ursprüngliche Intensität des aktuell betrachteten Pixels 
bestimmen. Da ich mir derzeit das Rauschen selbst simuliere besteht in 
der Simulation bereits Kenntnis über die Varianz R.

: Bearbeitet durch User
von Rolf S. (audiorolf)


Lesenswert?

Jörg L. schrieb:
> Im Realfall besteht keine Kenntnis über das originale Bild,
> beziehungsweise die realen Rauschfrequenzen.

Die Rauschfrequenzen sind im Bild normalerweise gleichförmig verteilt, 
weil das Photonenrauschen das Integral der eintreffenden statistischen 
Wellen ist und sich jeweils unabhängig von dem in den Nachbarpixeln 
darstellt. Das ist nicht wie eine Störwelle im zweidimensionalen, wo man 
das Rauschen über Pixel hinweg interpretieren könnte. Das gilt nur für 
geringe Störfrequenzen elektrischer Art.

Üblich wäre, sich einen Eindruck über die Bildfreuqenzen zu verschaffen 
und die "Angriffslustigkeit" des Rauschfilters zu steuern.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.