wiener_filter_niwiener_filter_niWienerFilterNiWienerFilterNi (Operator)

Name

wiener_filter_niwiener_filter_niWienerFilterNiWienerFilterNi — Bildrestauration mittels Wiener-Filterung.

Signatur

wiener_filter_ni(Image, Psf, NoiseRegion : RestoredImage : MaskWidth, MaskHeight : )

Herror wiener_filter_ni(const Hobject Image, const Hobject Psf, const Hobject NoiseRegion, Hobject* RestoredImage, const Hlong MaskWidth, const Hlong MaskHeight)

Herror T_wiener_filter_ni(const Hobject Image, const Hobject Psf, const Hobject NoiseRegion, Hobject* RestoredImage, const Htuple MaskWidth, const Htuple MaskHeight)

void WienerFilterNi(const HObject& Image, const HObject& Psf, const HObject& NoiseRegion, HObject* RestoredImage, const HTuple& MaskWidth, const HTuple& MaskHeight)

HImage HImage::WienerFilterNi(const HImage& Psf, const HRegion& NoiseRegion, Hlong MaskWidth, Hlong MaskHeight) const

static void HOperatorSet.WienerFilterNi(HObject image, HObject psf, HObject noiseRegion, out HObject restoredImage, HTuple maskWidth, HTuple maskHeight)

HImage HImage.WienerFilterNi(HImage psf, HRegion noiseRegion, int maskWidth, int maskHeight)

Beschreibung

wiener_filter_niwiener_filter_niWienerFilterNiWienerFilterNiWienerFilterNi (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_niwiener_filter_niWienerFilterNiWienerFilterNiWienerFilterNi 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_niwiener_filter_niWienerFilterNiWienerFilterNiWienerFilterNi wird also (im Gegensatz zu der Version von wiener_filterwiener_filterWienerFilterWienerFilterWienerFilter) 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:

wiener_filter_niwiener_filter_niWienerFilterNiWienerFilterNiWienerFilterNi 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'.

Achtung

Die Impulsantwort PsfPsfPsfPsfpsf muss vom Bildtyp 'real' sein und dieselbe Bildbreite und -länge wie ImageImageImageImageimage besitzen. Die Bildregion zur Rauschabschätzung darf keine Bereiche außerhalb des Bildes umfassen. Die Filtermaskengröße MaskWidthMaskWidthMaskWidthMaskWidthmaskWidth und MaskHeightMaskHeightMaskHeightMaskHeightmaskHeight muss größer oder gleich 0 und kleiner oder gleich der Bildgröße sein. Werden für MaskWidthMaskWidthMaskWidthMaskWidthmaskWidth und MaskHeightMaskHeightMaskHeightMaskHeightmaskHeight 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).

Ausführungsinformationen

Parameter

ImageImageImageImageimage (input_object)  (multichannel-)image objectHImageHImageHobject (byte / direction / cyclic / int1 / int2 / uint2 / int4 / real)

Beeinträchtigtes Bild, das gefiltert werden soll.

PsfPsfPsfPsfpsf (input_object)  (multichannel-)image objectHImageHImageHobject (real)

Impulsantwort (Point Spread Function) der Bildbeeinträchtigung (im Ortsraum mit dem Nullpunkt in der Bildecke angegeben).

NoiseRegionNoiseRegionNoiseRegionNoiseRegionnoiseRegion (input_object)  region(-array) objectHRegionHRegionHobject

Bildregion, innerhalb der die durchschnittliche Stärke des Rauschens abgeschätzt werden soll.

RestoredImageRestoredImageRestoredImageRestoredImagerestoredImage (output_object)  image objectHImageHImageHobject * (real)

Restauriertes Bild

MaskWidthMaskWidthMaskWidthMaskWidthmaskWidth (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

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 MaskWidth MaskWidth MaskWidth maskWidth ≤ width(Image)

MaskHeightMaskHeightMaskHeightMaskHeightmaskHeight (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

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 MaskHeight MaskHeight MaskHeight maskHeight ≤ height(Image)

Beispiel (C)

/* 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);

Ergebnis

Sind die Parameterwerte korrekt, dann liefert wiener_filter_niwiener_filter_niWienerFilterNiWienerFilterNiWienerFilterNi den Wert 2 (H_MSG_TRUE). Bei einer leeren Eingabe wird mit einer entsprechenden Fehlermeldung abgebrochen.

Vorgänger

gen_psf_motiongen_psf_motionGenPsfMotionGenPsfMotionGenPsfMotion, simulate_motionsimulate_motionSimulateMotionSimulateMotionSimulateMotion, simulate_defocussimulate_defocusSimulateDefocusSimulateDefocusSimulateDefocus, gen_psf_defocusgen_psf_defocusGenPsfDefocusGenPsfDefocusGenPsfDefocus, optimize_fft_speedoptimize_fft_speedOptimizeFftSpeedOptimizeFftSpeedOptimizeFftSpeed

Alternativen

wiener_filterwiener_filterWienerFilterWienerFilterWienerFilter

Siehe auch

simulate_motionsimulate_motionSimulateMotionSimulateMotionSimulateMotion, gen_psf_motiongen_psf_motionGenPsfMotionGenPsfMotionGenPsfMotion, simulate_defocussimulate_defocusSimulateDefocusSimulateDefocusSimulateDefocus, gen_psf_defocusgen_psf_defocusGenPsfDefocusGenPsfDefocusGenPsfDefocus

Literatur

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

Modul

Foundation