La mise en œuvre de IMFILTER dans matlab
Je suis en train de filtrer une image avec l'aide de imfilter
. Je devrais obtenir les mêmes résultats que imfilter
mais je reçois diffrent résultats. Quelqu'un peut-il me dire où je suis allé mal?
orignal=imread('obj6__17.png');
filter=1/9*[-1 -1 -1 ; -1 17 -1 ; -1 -1 -1];
s=size(orignal);
r=zeros(s(1));
temp = zeros(3);
for i= 2: s(1)-1
for j = 2: s(2)-1
for n= 1: 3
for m= 1:3
temp(n,m)=orignal(i+2-n,j+2-m)*filter(n,m);
end
end
r(i,j)=sum(single(sum(temp)));
end
end
Avez-vous essayez de regarder dans imfilter.m sous MATLAB\toolbox\images\images pour voir comment
imfilter
est mis en œuvre?OriginalL'auteur Aya Abdelsalam | 2012-05-20
Vous devez vous connecter pour publier un commentaire.
La taille de
r
doit être le même que l'original je pense. Et je ne comprends pas pourquoi vous convertir de simple précision à l'aide desingle
. De toute façon, je pense que vous voulez pour effectuer les opérations suivantes:Le résultat est comme suit:
Et avec
imfilter
, c'est:Comme vous le voyez, les résultats sont les mêmes à l'exception de ceux sur les frontières. Il y a quelques stratégies pour calculer les uns sur les frontières, comme la mise en miroir de l'image à l'extérieur des frontières, en gardant les mêmes, etc. Veuillez lire la documentation de
imfilter
et choisir une stratégie.Notez que je n'ai pas retourné
filter
ici depuis le filtre est symétrique dans les deux directions. Et je vous recommande d'éviter les boucles! Il y a des boucles imbriquées de la profondeur de quatre dans votre code!Enfin, vous pouvez utiliser 2-D de la convolution à faire la même chose que
imfilter
:OriginalL'auteur petrichor
C'est modifie code et donne exactement le même résultat que imfilter....
Cela donne le résultat de la matrice qui est exactement la même qu'avec la
fonction...
OriginalL'auteur Vipul Divyanshu