wiener_filter_ni
— Bildrestauration mittels Wiener-Filterung.
wiener_filter_ni(Image, Psf, NoiseRegion : RestoredImage : MaskWidth, MaskHeight : )
wiener_filter_ni
(ni = noise-estimation integrated) liefert eine
Abschätzung des unbeeinträchtigten Originalbildes. Die Abschätzung ist im
Sinne eines minimalen, quadratischen Fehlers zwischen dem Originalbild und
seiner Abschätzung optimal.
Diese Abschätzung stellt eine restaurierte Version eines durch verschiedene
Einflüsse (z.B. relative Bewegung zwischen aufzunehmendem Objekt und
Aufnahmesystem, falsch fokussiertes Linsensystem, atmosphärische Störungen
usw.) beeinträchtigten Bildes dar.
Ausgangspunkt ist das beeinträchtigte Bild, das als Ausgabe eines gestörten,
linearen Systems interpretiert wird. Das Verhalten eines linearen Systems,
ist durch seine Impulsantwort bestimmt. Folgerichtig wird davon ausgegangen,
dass das beeinträchtigte Bild das Ergebnis einer Faltung von Originalbild
und Impulsantwort des linearen Systems darstellt. Diese Impulsantwort
beschreibt die Bildaufnahme und die dabei aufgetretenen Störungen. Um auch
Störungsursachen stochastischer Natur (Rauschen) einbeziehen zu können, wird
zu dem Faltungsergebnis ein Rauschterm addiert.
Insgesamt ergibt sich also das beeinträchtigte Bild aus
[Faltung(Impulsantwort und Originalbild)] + Rauschterm
Der Rauschterm beinhaltet zwei Komponenten, von denen jeweils eine das
bildabhängige und bildunabhängige Rauschen beschreibt.
Die Routine wiener_filter_ni
schätzt die Stärke des Rauschens
innerhalb einer Bildregion ab. Dies geschieht, indem mittels einer
(ungewichteten) Median-Filterung (mit einer rechteckigen Filtermaske) eine
rauschreduzierte Version der Bildregion erzeugt wird. Die Stärke des Rauschens
ergibt sich punktweise durch Subtraktion des Median-Wertes vom dortigen
Grauwert. Daraus wird die durchschnittliche Rauschamplitude innerhalb der
Bildregion berechnet.
Als zweites wird der durchschnittliche Grauwert des gesamten zu filternden
Bildes gebildet. Hiermit lässt sich das durchschnittliche Verhältnis vom
Rauschen und Bildwert abschätzen. Das Quadrat dieses Quotienten ergibt
wiederum eine Abschätzung des Verhältnisses der spektralen Leistungsdichten
vom Rauschen und Bild.
Bei der Wiener-Filterung mit wiener_filter_ni
wird also (im Gegensatz zu der
Version von wiener_filter
) angenommen, dass dieses Verhältnis innerhalb des
gesamten Bildraums näherungsweise konstant bleibt. Die Bildregion, die die
Grundlage der Rauschabschätzung bildet, muss durch den Anwender in einer
Vorverarbeitung bestimmt werden. Dabei ist zu beachten, dass eine möglichst
homogene Region auszuwählen ist, da starke Texturen oder Kanten große Fehler
bei der Rauschabschätzung verursachen können. Um dem Anwender einen
(begrenzten) Einfluss auf die Abschätzung zu ermöglichen, sind die Breite bzw.
Höhe der rechteckigen Filtermaske als Eingabe-Steuerparameter anzugeben.
Weiterhin ist durch den Anwender eine Impulsantwort zu erzeugen, die die
spezielle Beeinträchtigung im Bild beschreibt. Die Impulsantwort wird als
Bildmatrix eingegeben (Bildtyp: 'real'). Sie stellt die Impulsantwort
im Ortsraum dar und muss dahingehend in die Bildmatrix eingetragen werden, dass
der Nullpunkt in der Bildecke „links oben“ liegt. Das bedeutet folgende
Einteilung der insgesamt NxM-großen Bildmatrix in vier rechteckige Regionen:
Erstes Rechteck („links oben“): (Bildkoordinaten xb= 0..(N/2)-1, yb = 0..(M/2)-1)
-entspricht dem vierten Quadranten des kartesischen Koordinatensystems, enthält also die Werte der Impulsantwort für x = 0..N/2 und y = 0..-M/2
Zweites Rechteck („rechts oben“): (Bildkoordinaten xb = N/2..N-1, yb = 0..(M/2)-1)
-entspricht dem dritten Quadranten des kartesischen Koordinatensystems, enthält also die Werte der Impulsantwort für x = -N/2..-1 und y = -1..-M/2
Drittes Rechteck („links unten“): (Bildkoordinaten xb = 0..(N/2)-1, yb = M/2..M-1)
-entspricht dem ersten Quadranten des kartesischen Koordinatensystems, enthält also die Werte der Impulsantwort für x = 1..N/2 und y = M/2..0
Viertes Rechteck („rechts unten“): (Bildkoordinaten xb = N/2..N-1, yb = M/2..M-1)
-entspricht dem zweiten Quadranten des kartesischen Koordinatensystems, enthält also die Werte der Impulsantwort für x = -N/2..-1 und y = M/2..1
wiener_filter_ni
verwendet folgende Strategie zur Erzeugung des
restaurierten Bildes:
- Abschätzen des durchschnittlichen Verhältnisses der spektralen Leistungsdichten vom Rauschen und Originalbild (siehe oben). - Mit Hilfe dieses Verhältnisses und der Fouriertransformierten der Impulsantwort wird das Wiener-Filter gebildet. - Durchführung der Wiener-Filterung durch Faltung von dem Eingabebild und der Frequenzantwort des Filters (= Multiplikation von deren diskreten Fouriertransformierten). - Rücktransformiertes Produkt stellt das restaurierte Bild dar.
Das Restaurationsergebnis ist vom Bildtyp 'real'.
Die Impulsantwort Psf
muss vom Bildtyp 'real' sein und dieselbe
Bildbreite und -länge wie Image
besitzen.
Die Bildregion zur Rauschabschätzung darf keine Bereiche außerhalb des
Bildes umfassen.
Die Filtermaskengröße MaskWidth
und MaskHeight
muss größer oder gleich 0
und kleiner oder gleich der Bildgröße sein.
Werden für MaskWidth
und MaskHeight
gerade statt ungerader
Werte übergeben, verwendet die Routine an ihrer Stelle die nächstgrößeren
ungeraden Werte (damit ist der Schwerpunkt der Filtermaske immer eindeutig
bestimmt).
Image
(input_object) (multichannel-)image →
object (byte / direction / cyclic / int1 / int2 / uint2 / int4 / real)
Beeinträchtigtes Bild, das gefiltert werden soll.
Psf
(input_object) (multichannel-)image →
object (real)
Impulsantwort (Point Spread Function) der Bildbeeinträchtigung (im Ortsraum mit dem Nullpunkt in der Bildecke angegeben).
NoiseRegion
(input_object) region(-array) →
object
Bildregion, innerhalb der die durchschnittliche Stärke des Rauschens abgeschätzt werden soll.
RestoredImage
(output_object) image →
object (real)
Restauriertes Bild
MaskWidth
(input_control) integer →
(integer)
Breite der rechteckigen Filtermaske, die bei der Median-Filterung zur internen Rauschabschätzung verwendet wird.
Defaultwert: 3
Wertevorschläge: 3, 5, 7, 9
Typischer Wertebereich: 0
≤
MaskWidth
≤
width(Image)
MaskHeight
(input_control) integer →
(integer)
Höhe der rechteckigen Filtermaske, die bei der Median-Filterung zur internen Rauschabschätzung verwendet wird.
Defaultwert: 3
Wertevorschläge: 3, 5, 7, 9
Typischer Wertebereich: 0
≤
MaskHeight
≤
height(Image)
/* Restoration of a noisy image (size=256x256), that was blurred by motion*/ Hobject object; Hobject restored; Hobject psf; Hobject noise_region; /* 1. Generate a Point-Spread-Function for a motion-blur with */ /* parameter a=10 and direction of the x-axis */ gen_psf_motion(&psf,256,256,10,0,3); /* 2. Segmentation of a region for the noise-estimation */ open_window(0,0,256,256,0,"visible",&WindowHandle); disp_image(object,WindowHandle); draw_region(&noise_region,draw_region); /* 3. Wiener-filtering */ wiener_filter_ni(object,psf,noise_region,&restored,3,3);
Sind die Parameterwerte korrekt, dann liefert wiener_filter_ni
den Wert 2 (H_MSG_TRUE).
Bei einer leeren Eingabe wird mit einer entsprechenden Fehlermeldung
abgebrochen.
gen_psf_motion
,
simulate_motion
,
simulate_defocus
,
gen_psf_defocus
,
optimize_fft_speed
simulate_motion
,
gen_psf_motion
,
simulate_defocus
,
gen_psf_defocus
M. Lückenhaus:„Grundlagen des Wiener-Filters und seine Anwendung
in der Bildanalyse“; Diplomarbeit;
Technische Universität München, Institut für Informatik;
Lehrstuhl Prof. Radig; 1995
Azriel Rosenfeld, Avinash C. Kak: Digital Picture Processing,
Computer Science and Aplied Mathematics, Academic Press New York/San
Francisco/London 1982
Foundation