web-dev-qa-db-fra.com

Filtre moyen pour le lissage des images dans Matlab

J'ai besoin de tester certaines techniques de traitement d'image de base dans Matlab. Je dois tester et comparer en particulier deux types de filtres: le filtre moyen et le filtre médian.

Pour lisser les images à l’aide du filtrage médian, il existe une excellente fonction medfilt2 dans la boîte à outils de traitement des images. Existe-t-il une fonction similaire pour le filtre moyen? Ou comment utiliser la fonction filter2 pour créer le filtre moyen? 

L'une des choses les plus importantes pour moi est d'avoir la possibilité de définir le rayon du filtre. C'est à dire. pour le filtre médian, si je veux le [3 x 3] rayon (masque), je viens d'utiliser

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

Je voudrais réaliser quelque chose de similaire pour le filtre moyen.

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

Voir doc fspecial: h = fspecial('average', n) renvoie un filtre de moyennage. n est un vecteur 1 sur 2 spécifiant le nombre de lignes et de colonnes dans h.

28
rcs

Je vois que de bonnes réponses ont déjà été données, mais j’ai pensé qu’il serait peut-être agréable de donner un moyen d’effectuer un filtrage moyen dans MATLAB sans utiliser de fonctions spéciales ni de boîtes à outils. Cela est également très utile pour comprendre exactement le fonctionnement du processus car il vous est demandé de définir explicitement le noyau de convolution. Le noyau de filtrage moyen est heureusement très simple:

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 en couleur, vous devez appliquer cela à chacun des canaux de l'image.

6
Hannes Ovrén
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) à l'aide de filter2, tandis que les images multidimensionnelles (images RVB ou matrices 3D) imfilter sont utilisées.

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

5
Amro

et la convolution est définie par une multiplication dans le domaine de transformation:

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

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

2
Chris
f=imread(...);

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