it-swarm.com.de

Gauß-Filter in MATLAB

Faltet der 'Gauß'-Filter in MATLAB das Bild mit dem Gaußschen Kernel zusammen? Wie wählen Sie außerdem die Parameter hsize (Größe des Filters) und sigma aus? Worauf gründest du es?

30
md86

Sie erstellen den Filter zuerst mit fspecial und falten dann das Bild mit dem Filter mit imfilter (funktioniert bei mehrdimensionalen Bildern wie im Beispiel).

Sie geben sigma und hsize in fspecial an.

Code:

%%# Read an image
I = imread('peppers.png');
%# Create the gaussian filter with hsize = [5 5] and sigma = 2
G = fspecial('gaussian',[5 5],2);
%# Filter it
Ig = imfilter(I,G,'same');
%# Display
imshow(Ig)
55
Jacob

@ Jacob hat dir bereits gezeigt, wie man den Gaußschen Filter in Matlab benutzt, also werde ich das nicht wiederholen.

Ich würde Filtergröße wählen, um ungefähr 3 * Sigma in jeder Richtung zu sein (rund zur ungeraden ganzen Zahl). Daher fällt der Filter an den Rändern auf nahezu Null ab, und das gefilterte Bild weist keine Diskontinuitäten auf.

Die Wahl des Sigmas hängt stark davon ab, was Sie tun möchten. Bei der Gaußschen Glättung handelt es sich um eine Tiefpassfilterung. Dies bedeutet, dass hochfrequente Details (Rauschen, aber auch Kanten) unterdrückt werden, während die niederfrequenten Bildteile (d. H. Diejenigen, die nicht so stark variieren) erhalten bleiben. Mit anderen Worten, der Filter verwischt alles, was kleiner als der Filter ist.

Wenn Sie beispielsweise Rauschen in einem Bild unterdrücken möchten, um die Erkennung kleiner Merkmale zu verbessern, empfehle ich, ein Sigma zu wählen, das den Gaußschen Wert nur geringfügig kleiner als das Merkmal macht.

21
Jonas

In MATLAB R2015a oder höher ist es nicht mehr erforderlich (oder vom Standpunkt der Leistung aus ratsam), fspecial gefolgt von imfilter zu verwenden, da es eine neue Funktion namens imgaussfilt gibt ] _ das führt diese Operation in einem Schritt und effizienter aus.

Die grundlegende Syntax:

B = imgaussfilt(A,sigma) filtert image A mit einem 2-D-Gaußschen Glättungskern mit der durch sigma angegebenen Standardabweichung.

Die Größe des Filters für eine bestimmte Gaußsche Standardabweichung (sigam) wird automatisch ausgewählt, kann aber auch manuell festgelegt werden:

B = imgaussfilt(A,sigma,'FilterSize',[3 3]);

Der Standardwert ist 2*ceil(2*sigma)+1.

Zusätzliche Funktionen von imgaussfilter sind die Funktion zum Bearbeiten von gpuArrays, Filtern nach Frequenz oder räumlichem Bereich und erweiterte Bildauffülloptionen. Es sieht sehr nach IPP aus ... hmmm. Außerdem gibt es eine 3D-Version namens imgaussfilt3 .

14
chappjc