Monday 6 November 2017

Gleitender Mittel Bild Filter Matlab


Erstellt am Mittwoch, den 08. Oktober 2008 um 20:04 Uhr Zuletzt aktualisiert am Donnerstag, den 14. März 2013 um 01:29 Uhr Geschrieben von: Batuhan Osmanoglu Zugriffe: 41159 Moving Average In Matlab Oft finde ich mich in der Notwendigkeit der Mittelung der Daten habe ich, um das Rauschen ein wenig zu reduzieren Bit. Ich schrieb paar Funktionen, um genau das tun, was ich will, aber Matlabs in Filter-Funktion gebaut funktioniert auch ziemlich gut. Hier schreibe ich über 1D und 2D Mittelung von Daten. 1D-Filter kann mit der Filterfunktion realisiert werden. Die Filterfunktion erfordert mindestens drei Eingangsparameter: den Zählerkoeffizienten für den Filter (b), den Nennerkoeffizienten für den Filter (a) und natürlich die Daten (X). Ein laufender Mittelwertfilter kann einfach definiert werden: Für 2D-Daten können wir die Funktion Matlabs filter2 verwenden. Für weitere Informationen, wie der Filter funktioniert, können Sie eingeben: Hier ist eine schnelle und schmutzige Implementierung eines 16 von 16 gleitenden durchschnittlichen Filters. Zuerst müssen wir den Filter definieren. Da alles, was wir wollen, gleicher Beitrag aller Nachbarn ist, können wir einfach die Funktion verwenden. Wir teilen alles mit 256 (1616), da wir nicht den allgemeinen Pegel (Amplitude) des Signals ändern wollen. Um den Filter anzuwenden, können wir einfach Folgendes sagen: Unten sind die Ergebnisse für die Phase eines SAR-Interferogramms. In diesem Fall ist der Bereich in der Y-Achse und der Azimut auf der X-Achse abgebildet. Der Filter war 4 Pixel breit in Reichweite und 16 Pixel breit in Azimuth. I müssen einige grundlegende Bildverarbeitungstechniken in Matlab zu testen. Ich muss vor allem zwei Arten von Filtern testen und vergleichen: Mittelfilter und Medianfilter. Um das Bild mit Median-Filterung zu glätten, gibt es eine große Funktion medfilt2 aus der Bildverarbeitungs-Toolbox. Gibt es eine ähnliche Funktion für Mittelfilter Oder wie man die Filter2-Funktion verwenden, um den mittleren Filter zu erstellen Eines der wichtigsten Dinge für mich ist die Möglichkeit der Einstellung Radius des Filters haben. D. h. Für Medianfilter, wenn ich den 3 x 3 Radius (Maske) möchte, verwende ich einfach ich möchte etwas Ähnliches für Mittelfilter erreichen. Ich sehe, gute Antworten wurden bereits gegeben, aber ich dachte, es wäre schön, nur einen Weg geben, um eine mittlere Filterung in MATLAB mit keine speziellen Funktionen oder Toolboxes durchzuführen. Dies ist auch sehr gut für das Verständnis genau, wie der Prozess funktioniert, wie Sie explizit setzen die Faltung Kernel erforderlich sind. Der mittlere Filterkernel ist zum Glück sehr einfach: Beachten Sie, dass für Farbbilder Sie diese auf jeden der Kanäle im Bild anwenden müssten. User8264: Ich habe jetzt keinen Zugriff auf das Buch, aber normalerweise bietet der Gaußsche Kernel einen sanfteren Glättungseffekt und neigt dazu, die Kanten besser zu bewahren als ein mittlerer Filter derselben Größe. Denken Sie an den Frequenzgang des Tiefpaßfilters in beiden Fällen. Hier ist eine Seite mit einer guten Erklärung: homepages. inf. ed. ac. ukrbfHIPR2gsmooth. htm ndash Amro Aug 1 14 um 9: 48Dieses Tutorial behandelt die Verwendung von MATLAB für die Bildverarbeitung. Manche Vertrautheit mit MATLAB wird vorausgesetzt (Sie sollten wissen, wie Matrizen zu verwenden und schreiben Sie eine M-Datei). Es ist hilfreich, die MATLAB Image Processing Toolbox haben, aber zum Glück sind keine Toolboxes für die meisten Operationen erforderlich. Befehle, die die Bild-Toolbox erfordern, werden mit Image Toolbox angezeigt. Bilddarstellung Es gibt fünf Arten von Bildern in MATLAB. Graustufen. Ein Graustufenbild M Pixel hoch und N Pixel breit wird als eine Matrix des doppelten Datentyps der Größe M N dargestellt. Elementwerte (z. B. MyImage (m, n)) bezeichnen die Pixel-Graustufen-Intensitäten in 0,1 mit 0black und 1white. Truecolor RGB. Ein truecolor rot-grün-blaues (RGB) Bild wird als dreidimensionale M N 3 Doppelmatrix dargestellt. Jedes Pixel hat rote, grüne, blaue Komponenten entlang der dritten Dimension mit Werten in 0,1, beispielsweise die Farbkomponenten von Pixel (m, n) sind MyImage (m, n, 1) rot, MyImage (m, n, 2) grün, MyImage (m, n, 3) blue. Indexed. Indizierte (palettierte) Bilder werden mit einer Indexmatrix der Größe M N und einer Farbmapmatrix der Größe K 3 dargestellt. Die Farbpalette enthält alle Farben, die in dem Bild verwendet werden, und die Indexmatrix stellt die Pixel dar, indem auf Farben in der Farbzuordnung Bezug genommen wird. Zum Beispiel, wenn die 22. Farbe ist Magenta MyColormap (22, :) 1,0,1. Dann ist MyImage (m, n) 22 ein magentafarbenes Pixel. Ein binäres Bild wird durch eine M N logische Matrix dargestellt, wobei die Pixelwerte 1 (wahr) oder 0 (falsch).uint8 sind. Dieser Typ verwendet weniger Speicher und einige Operationen berechnen schneller als bei doppelten Typen. Zur Vereinfachung dieses Tutorials diskutiert uint8 nicht weiter. Graustufen ist in der Regel das bevorzugte Format für die Bildverarbeitung. In Fällen, die Farbe erfordern, kann ein RGB-Farbbild abgebaut und als drei separate Graustufenbilder behandelt werden. Indizierte Bilder müssen für die meisten Vorgänge in Graustufen oder RGB konvertiert werden. Im Folgenden sind einige gemeinsame Manipulationen und Conversions. Einige Befehle erfordern die Image Toolbox und werden mit Image Toolbox angezeigt. Lesen und Schreiben von Bilddateien MATLAB kann Bilder mit den Imread - und Imwrite-Befehlen lesen und schreiben. Obwohl eine angemessene Anzahl von Dateiformaten unterstützt werden, sind einige nicht. Verwenden Sie Imformate, um zu sehen, was Ihre Installation unterstützt: Beim Lesen von Bildern ist ein unglückliches Problem, dass imread die Bilddaten im uint8-Datentyp zurückgibt, der vor dem Gebrauch doppelt konvertiert und neu skaliert werden muss. Also anstatt direkt im Text zu schreiben, verwende ich die folgende M-Datei-Funktion zum Lesen und Konvertieren von Bildern: Klicken Sie mit der rechten Maustaste und speichern Sie getimage. m, um diese M-Funktion zu verwenden. Wenn image baboon. png im aktuellen Verzeichnis (oder irgendwo im MATLAB Suchpfad) ist, können Sie es mit MyImage getimage (baboon. png) lesen. Sie können auch partielle Pfade verwenden, z. B. wenn sich das Bild im aktuellen Verzeichnis gtimages mit getimage (imagesbaboon. png) befindet. Um ein Graustufen - oder RGB-Bild zu schreiben, verwenden Sie Achten Sie darauf, dass MyImage eine doppelte Matrix mit Elementen in 0,1if ist, die nicht ordnungsgemäß skaliert ist, wird die gespeicherte Datei wahrscheinlich leer sein. Beim Schreiben von Bilddateien, empfehle ich mit dem PNG-Dateiformat. Dieses Format ist eine zuverlässige Wahl, da es verlustfrei ist, unterstützt truecolor RGB, und komprimiert ziemlich gut. Verwenden Sie andere Formate mit Vorsicht. Grundlegende Operationen Im Folgenden finden Sie einige grundlegende Operationen auf einem Graustufenbild u. Befehle, die die Bild-Toolbox erfordern, werden mit Image Toolbox angezeigt. (Hinweis: Für ein beliebiges Array bedeutet die Syntax u (:), dass u in einen Spaltenvektor entrollt wird, zB wenn u 1,50,2, dann u (:) 1052 ist.) Zum Beispiel wird die Bildsignalleistung verwendet (SNR) und dem Spitzen-Signal-Rausch-Verhältnis (PSNR). Gegebenes sauberes Bild uclean und Geräusch-kontaminiertes Bild u, seien Sie vorsichtig mit Norm. Das Verhalten ist Norm (v) auf Vektor v berechnet sqrt (sum (v.2)). Aber Norm (A) auf Matrix A berechnet die induzierte L 2 - Matrix-Norm, so Norm (A) ist sicherlich nicht sqrt (sum (A ())). Es ist dennoch ein einfacher Fehler, die Norm (A) zu verwenden, wo sie Norm (A (:)) sein sollte. Lineare Filter Die lineare Filterung ist die Eckpfeilertechnik der Signalverarbeitung. Um kurz einzuführen, ist ein Linearfilter ein Vorgang, bei dem bei jedem Pixel xm, n eines Bildes eine lineare Funktion auf dem Pixel und seinen Nachbarn ausgewertet wird, um einen neuen Pixelwert ym, n zu berechnen. Ein lineares Filter in zwei Dimensionen hat die allgemeine Form, wobei x die Eingabe, y die Ausgabe und h die Filterimpulsantwort ist. Verschiedene Auswahlmöglichkeiten von h führen zu Filtern, die Kanten glätten, schärfen und erkennen, um nur einige Anwendungen zu nennen. Die rechte Seite der obigen Gleichung wird prägnant als h x bezeichnet und heißt die Faltung von h und x. Spatial-Domain-Filterung Eine zweidimensionale lineare Filterung wird in MATLAB mit conv2 implementiert. Leider kann conv2 nur filtern in der Nähe der Bildgrenzen durch Null-padding, was bedeutet, dass Filter-Ergebnisse sind in der Regel ungeeignet für Pixel in der Nähe der Grenze. Um dies zu umgehen, können wir das Eingabebild auffüllen und die gültige Option beim Aufruf von conv2 verwenden. Die folgende M-Funktion macht dies. Klicken Sie mit der rechten Maustaste und speichern Sie die Datei conv2padded. m, um diese M-Funktion zu verwenden. Hier sind einige Beispiele: Ein 2D-Filter h soll trennbar sein, wenn es als das äußere Produkt von zwei 1D-Filtern h1 und h2 ausgedrückt werden kann. Das heißt, h h1 (:) h2 (:). Es ist schneller, h1 und h2 als h durchzulassen. Wie oben für das gleitende Mittelfenster und das Gaußsche Filter getan wird. Tatsächlich sind die Sobel-Filter hx und hy auch trennbar, was h1 und h2 ist. Fourier-Domain-Filterung Die Spatial-Domain-Filterung mit conv2 ist leicht ein rechenintensiver Vorgang. Für ein K K - Filter auf einem M N-Bild kostet conv2 O (MNK 2) Additionen und Multiplikationen oder O (N 4) unter der Annahme von M N K. Für große Filter ist die Filterung in der Fourier-Domäne schneller, da die Rechenkosten auf O reduziert werden (N 2 log N). Unter Verwendung der Faltungsmultiplikationseigenschaft der Fourier-Transformation wird die Faltung äquivalent berechnet. Das Ergebnis ist äquivalent zu conv2padded (x, h), außer in der Nähe der Grenze, wobei die obige Berechnung eine periodische Grenzerweiterung verwendet. Eine Fourier-basierte Filterung kann auch mit symmetrischer Grenzerweiterung durchgeführt werden, indem der Eingang in jede Richtung reflektiert wird: (Hinweis: Eine noch effizientere Methode ist FFT-Overlap-Add-Filtering. Die Signal Processing Toolbox implementiert FFT-Overlap-Add in Eindimension in fftfilt .) Nichtlineare Filter Ein nichtlineares Filter ist ein Vorgang, bei dem jedes gefilterte Pixel ym, n eine nichtlineare Funktion von xm, n und seinen Nachbarn ist. Hier werden kurz einige Arten von nichtlinearen Filtern diskutiert. Statistische Filter bestellen Wenn Sie die Image Toolbox haben, können Sie mit statfilt2 und medfilt2 statistische Filter bestellen. Ein Auftragsstatistikfilter sortiert die Pixelwerte über einer Nachbarschaft und wählt den k-ten größten Wert aus. Die Min-, Max - und Medianfilter sind Sonderfälle. Morphologische Filter Wenn Sie die Image Toolbox haben, implementiert bwmorph verschiedene morphologische Operationen auf binären Bildern, wie Erosion, Dilatation, Open, Close und Skeleton. Es gibt auch Befehle für die Morphologie auf Graustufenbilder: imerode. Imdilate und imtophat. unter anderen. Eigenen Filter erstellen Gelegentlich wollen wir einen neuen Filter verwenden, den MATLAB nicht hat. Der nachfolgende Code ist eine Vorlage für die Implementierung von Filtern. (Anmerkung: Häufig fehlgeleitete Behauptung ist, dass Schleifen in MATLAB langsam sind und vermieden werden sollten.) Dies war einst wahr, zurück in MATLAB 5 und früher, aber Schleifen in modernen Versionen sind relativ schnell.) Beispiel: Der Alpha-Trimm-Filter Ignoriert die d 2 niedrigsten und d 2 höchsten Werte im Fenster und mittelt die verbleibenden (2 r 1) 2 d Werte. Der Filter ist ein Gleichgewicht zwischen einem Medianfilter und einem Mittelfilter. Das alpha-trimmte Mittelfilter kann in der Schablone als ein anderes Beispiel implementiert werden, wobei das zweiseitige Filter ist

No comments:

Post a Comment