Filtre moyen pour lisser les images dans Matlab

je dois tester quelques techniques de traitement d'image de base dans Matlab. Je dois tester et comparer en particulier deux types de filtres: Filtre moyen et filtre médian.

pour lisser l'image en utilisant le filtrage médian, il y a une grande fonction medfilt2 à partir de la boîte à outils de traitement d'image. Est-il une fonction similaire pour dire filtre? Ou comment utiliser les filter2 fonction pour créer le filtre moyenne?

Une des choses les plus importantes pour moi est d'avoir la possibilité de mettre en rayon du filtre. C'est-à-dire: pour le filtre médian, si je veux le rayon [3 x 3] (Masque), j'utilise juste

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

j'aimerais réaliser quelque chose de similaire pour dire filtre.

15
demandé sur Benjamin 2009-11-15 19:12:16

5 réponses

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

Voir doc fspecial: h = fspecial('average', n) renvoie un filtre de moyenne. n 1-par-2 vecteur indiquant le nombre de lignes et de colonnes h.

28
répondu rcs 2009-11-15 17:05:16

je vois que de bonnes réponses ont déjà été données, mais j'ai pensé qu'il pourrait être agréable de simplement donner une façon d'effectuer le filtrage moyen dans MATLAB en utilisant Aucune Fonction spéciale ou boîte à outils. C'est aussi très bon pour comprendre exactement comment le processus fonctionne, car vous devez définir explicitement le noyau de convolution. Le noyau filtrant moyen est heureusement très facile:

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

Notez que pour les images couleur que vous auriez à appliquer à chacun des canaux de l'image.

6
répondu Hannes Ovrén 2009-11-16 12:01:20
I = imread('peppers.png');
H = fspecial('average', [5 5]);
I = imfilter(I, H);
imshow(I)

notez que les filtres peuvent être appliqués aux images d'intensité (matrices 2D) en utilisant filter2, alors que sur les images multi-dimensionnelles (images RVB ou matrices 3D) imfilter est utilisé.

également sur les processeurs Intel,imfilter peut utiliser la bibliothèque Intel Integrated Performance Primitives (IPP) pour accélérer l'exécution.

5
répondu Amro 2009-11-15 18:35:36

et le produit de convolution est définie par une multiplication dans le domaine de la transformée en:

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

si un canal est considéré comme... pour plus de canaux cela doit être fait chaque canal

2
répondu Chris 2011-10-10 19:13:06
f=imread(...);

h=fspecial('average', [3 3]);
g= imfilter(f, h);
imshow(g);
0
répondu Afsaneh 2013-10-23 10:57:51