MATLAB-Bild-Tiefpassfilter
In diesem Tutorial wird die Erstellung eines 2D-Tiefpassfilters für ein Bild mit der Funktion fspecial()
in MATLAB erläutert.
Glätten Sie ein Bild mit einem Tiefpassfilter in MATLAB
In einem Bild sind zwei Frequenzniveaus vorhanden. Die Kanten und das Rauschen in einem Bild repräsentieren hochfrequente Komponenten, und die glatten Bereiche repräsentieren niederfrequente Komponenten.
Die hochfrequenten Komponenten haben einen hohen Intensitätspegel oder hohen Kontrast, und die niederfrequenten Komponenten haben einen niedrigen Intensitätspegel oder niedrigen Kontrast.
Angenommen, ein Bild hat scharfe Kanten oder Rauschen und wir möchten es glätten. In diesem Fall müssen wir einen Tiefpassfilter erstellen, der es den niederfrequenten Komponenten oder Pixeln ermöglicht, die hochfrequenten Komponenten oder Pixel zu passieren und zu stoppen, wodurch der Intensitätspegel der Pixel im Bild verringert wird.
Angenommen, ein Bild hat glatte oder kontrastarme Bereiche und wir möchten es schärfen. In diesem Fall müssen wir einen Hochpassfilter erstellen, der es den hochfrequenten Komponenten oder Pixeln ermöglicht, die niederfrequenten Komponenten oder Pixel zu passieren und zu stoppen, wodurch die Intensität der Pixel im Bild erhöht wird.
Es gibt verschiedene Arten von Filtern, die wir verwenden können, um einen Tief- oder Hochpassfilter zu erstellen.
Die Funktion fspecial()
von MATLAB kann verwendet werden, um einen 2D-Tief- oder Hochpassfilter zu erstellen. Nachdem wir einen Filter erstellt haben, können wir ihn mit der Funktion imfilter()
oder filter2()
auf das angegebene Bild anwenden.
Die Funktion fspecial()
hat je nach Filter unterschiedliche Syntaxen. Die verfügbaren fspecial()
-Filter und ihre Syntax sind unten aufgeführt.
Filter_object = fspecial(type)
Filter_object = fspecial('average',hsize)
Filter_object = fspecial('disk',radius)
Filter_object = fspecial('gaussian',hsize,sigma)
Filter_object = fspecial('laplacian',alpha)
Filter_object = fspecial('log',hsize,sigma)
Filter_object = fspecial('motion',len,theta)
Filter_object = fspecial('prewitt')
Filter_object = fspecial('sobel')
Die erste Syntax ist die grundlegende Syntax der Funktion fspecial()
, und die sechs Filter nach der ersten Syntax sind Tiefpassfilter, die zum Glätten eines Bildes verwendet werden, und die letzten beiden Filter sind Hochpassfilter, die zum Schärfen der vorhandenen Kanten verwendet werden das gegebene Bild. Wir müssen den Typ des Filters oder den Filternamen übergeben, um einen Filter dieses bestimmten Typs zu erstellen.
Einige Filter haben auch optionale Argumente, aber wenn wir nur den Filternamen übergeben, verwendet die Funktion Standardwerte für optionale Argumente. Wir können auch die optionalen Argumente von Filtern mit ihrer spezifischen Syntax setzen, die nach der ersten Syntax angezeigt wird.
Im Falle eines Mittelungsfilters können wir beispielsweise die Filtergröße festlegen, die eine positive Ganzzahl oder ein Vektor aus zwei Elementen sein kann, indem wir die zweite oben aufgeführte Syntax verwenden.
Wenn wir hsize
als positive Ganzzahl oder Scaler einstellen, ist der Filter eine quadratische Matrix. Wenn wir hsize
als Vektor aus zwei Elementen festlegen, repräsentiert das erste Element die Anzahl der Zeilen und das zweite Element die Anzahl der Spalten der Filtermatrix.
Die dritte Syntax wird verwendet, um einen kreisförmigen Mittelungsfilter oder Scheibenfilter gemäß dem angegebenen Radius zu erstellen, der eine positive ganze Zahl sein kann und standardmäßig auf 5 gesetzt ist. Die vierte Syntax wird verwendet, um einen Gaußschen Filter mit dem zu erstellen size hsize
und sigma
, das die Standardabweichung darstellt, und standardmäßig auf 0.5
gesetzt ist.
Wir können auch die Funktionen imgaussfilt()
und imgaussfilt3()
in MATLAB verwenden, um einen Gaußschen Filter zu erstellen und auf ein bestimmtes Bild anzuwenden. Die fünfte Syntax wird verwendet, um einen Laplace-Filter
gemäß alpha
zu erstellen, der die Form von Laplace festlegt, und sein Standardwert ist 0.2
.
Die sechste Syntax wird verwendet, um einen Laplace-Filter des Gaußschen Filters gemäß der Filtergröße hsize
und sigma
zu erstellen, die die Standardabweichung darstellen.
Die siebte Syntax wird verwendet, um einen Bewegungsfilter zu erstellen, um ein Bild zu glätten, das eine lineare Bewegung der Kamera gemäß der durch len
angegebenen Bewegungslänge enthält, die einen Standardwert von 9 hat, und der Bewegungswinkel in Grad angegeben ist spezifiziert durch theta
. Der Winkel ist gegen den Uhrzeigersinn und sein Standardwert ist 0.
Die achte Syntax erstellt einen Hochpassfilter, um den Intensitätspegel horizontaler Kanten unter Verwendung eines vertikalen Gradienten zu verbessern. Wenn wir einen Filter erstellen möchten, um die vertikalen Kanten zu verbessern, können wir die Transponierung der Ausgangsfiltermatrix nehmen.
Die letzte Syntax ist die gleiche wie die vorletzte Syntax; Der einzige Unterschied besteht darin, dass die letzte Syntax verwendet wird, um einen Filter mit dem Glättungseffekt zu erstellen. Lassen Sie uns zum Beispiel die Funktion fspecial()
verwenden, um den Mittelungsfilter zu erstellen, um Salz- und Pfefferrauschen in einem Bild zu entfernen.
Siehe Code unten.
clc
clear
Input_image = imread('eight.tif');
Noisy_image = imnoise(Input_image,'salt & pepper',0.03);
h = fspecial('average');
Smoothed_image = filter2(h, Input_image);
imshowpair(Noisy_image,Smoothed_image,'montage')
Ausgabe:
Im obigen Code haben wir die Funktion imnoise()
verwendet, um Salz- und Pfefferrauschen in das gegebene Bild einzufügen, und wir haben die Funktion filter2()
verwendet, um den Mittelungsfilter auf das verrauschte Bild anzuwenden. Wir verwenden die Funktion imshowpair()
, um die verrauschten und geglätteten Bilder zum Vergleich anzuzeigen.
Wir können in der obigen Ausgabe sehen, dass das rechte Bild mit dem Mittelungsfilter geglättet wird. Wir können verschiedene Filter auf ein Bild anwenden, um das Ergebnis zu überprüfen.
Wir können auch die Funktion imfilter()
verwenden, um einen Filter auf ein bestimmtes Bild anzuwenden. Der Unterschied zwischen filter2()
und imfilter()
ist ihr Algorithmus, um den Filter auf das gegebene Bild anzuwenden.
imfilter()
verwendet doppelte Genauigkeit und Fließkommaarithmetik, um den Wert der Pixel des Ausgabebildes zu berechnen, und filter2()
nimmt die 2D-Faltung des gegebenen Bildes und der Filtermatrix, die um 180 Grad gedreht wird um die ausgegebenen Pixelwerte zu finden. Wir können diese beiden Funktionen ausprobieren und ihr Ergebnis vergleichen.
Wir können auch einige Optionen der Funktion imfilter()
einstellen, wie die Fülloptionen für das Eingabearray, die Größe der Ausgabematrix und die Faltungsoptionen. Wir können auch die Form der ausgegebenen gefilterten Daten im Falle der Funktion filter2()
festlegen, die standardmäßig auf same
eingestellt ist, aber wir können sie auch auf full
für vollständig 2D-gefilterte Daten und valid
setzen für Daten, die ohne Verwendung der mit Nullen aufgefüllten Kanten berechnet werden.
Überprüfen Sie diesen Link für weitere Details über die Funktion filter2()
. Überprüfen Sie diesen Link für weitere Details über die Funktion imfilter()
.