it-swarm.com.de

Mittlerer Filter zum Glätten von Bildern in Matlab

Ich muss einige grundlegende Bildverarbeitungstechniken in Matlab testen. Ich muss vor allem zwei Arten von Filtern testen und vergleichen: Durchschnittsfilter und Medianfilter.

Um das Bild mithilfe der Medianfilterung zu glätten, gibt es eine große Funktion medfilt2 aus der Bildverarbeitungs-Toolbox. Gibt es eine ähnliche Funktion für den Mittelwertfilter? Oder wie Sie die filter2-Funktion verwenden, um den Mittelwertfilter zu erstellen? 

Eines der wichtigsten Dinge für mich ist die Möglichkeit, den Radius des Filters einzustellen. Das heißt Für den Medianfilter verwende ich nur den [3 x 3] -Radius (Maske)

imSmoothed = medfilt2(img, [3 3]);

Ich möchte etwas ähnliches für den mittleren Filter erreichen.

15
Gacek
h = fspecial('average', n);
filter2(h, img);

Siehe doc fspecial: h = fspecial('average', n) gibt einen Durchschnittsfilter zurück. n ist ein 1-mal-2-Vektor, der die Anzahl der Zeilen und Spalten in h angibt.

28
rcs

Ich sehe bereits gute Antworten, aber ich dachte, es wäre schön, einfach eine Mittelwertfilterung in MATLAB mit speziellen Funktionen oder Toolboxen durchzuführen. Dies ist auch sehr gut für das genaue Verständnis der Funktionsweise des Prozesses, da Sie den Faltungskern explizit setzen müssen. Der mittlere Filterkern ist zum Glück sehr einfach:

I = imread(...)
kernel = ones(3, 3) / 9; % 3x3 mean kernel
J = conv2(I, kernel, 'same'); % Convolve keeping size of I

Beachten Sie, dass Sie dies für Farbbilder auf jeden der Kanäle im Bild anwenden müssen.

6
Hannes Ovrén
I = imread('peppers.png');
H = fspecial('average', [5 5]);
I = imfilter(I, H);
imshow(I)

Beachten Sie, dass Filter mit filter2 auf Intensitätsbilder (2D-Matrizen) angewendet werden können, während auf mehrdimensionalen Bildern (RGB-Bilder oder 3D-Matrizen) imfilter verwendet wird.

Auf Intel-Prozessoren kann imfilter die Intel Integrated Performance Primitives (IPP) -Bibliothek verwenden, um die Ausführung zu beschleunigen.

5
Amro

und die Faltung wird durch eine Multiplikation im Transformationsbereich definiert:

conv2(x,y) = fftshift(ifft2(fft2(x).*fft2(y)))

wenn ein Kanal berücksichtigt wird ... für mehrere Kanäle muss dies für jeden Kanal erfolgen

2
Chris
f=imread(...);

h=fspecial('average', [3 3]);
g= imfilter(f, h);
imshow(g);
0
Afsaneh