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.
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
.
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.
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.
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
f=imread(...);
h=fspecial('average', [3 3]);
g= imfilter(f, h);
imshow(g);