1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
I=imread('cameraman.tif');
figure;imshow(I);title ('fig1');
thetax=[1/2,1/4,1/2];thetay=[1/2 1/4 1/2].';
dx=[1/4 1/2 1/4];dy=[1/4 1/2 1/4].';
n=3;
Imgs = [];
I= double(I)/256;
for i=1:n
I =conv2(I,thetax,'same');
I =conv2(I,thetay,'same');
Imgs{i} = I; % un tableau de cellules:
end;
figure;imshow(I);title ('fig2');
I1=conv2(I,dx,'same');
w1=immultiply(I1,sqrt(n));
figure;imshow(w1);title ('fig3');
I2=conv2(I,dy,'same');
w2=immultiply(I2,sqrt(n));
figure;imshow(w2);title ('fig4');
%calcule de la norme de gradient l'image :
I3=immultiply(w1,w1);
I4=immultiply(w2,w2);
I5=imadd(I3,I4);
mf=sqrt(I5);
figure;imshow(mf);title ('fig5');
% calcule de la direction de gradient de l'image:
I6=imdivide(w2,w1);
af=atan(I6);
figure;imshow(af);title ('fig6');
af2= (af*180)/pi;
imagesc(af2);title ('fig7');
%calcul des maxima locaux:
im=ones(256,256)*0;
for i=2:254
for j=2:254
angle=af(i,j);
point=mf(i,j);
if (angle>=180) angle =180;
if(angle<0) angle=180;
if ((0<=angle)&(angle<22.5))
grada=mf(i,j+1);
gradb=mf(i,j-1);
if (22.5<=angle)& (angle<67.5)
grada=mf(i-1,j+1);
gradb=mf(i+1,j-1);
if (67.5<=angle)& (angle<112.5)
grada=mf(i-1,j);
gradb=mf(i+1,j);
if (112.5<=angle)& (angle<157.5)
grada=mf(i-1,j-1);
gradb=mf(i+1,j+1) ;
if (157.5<=angle)& (angle<180)
grada=mf(i,j-1);
gradb=mf(i,j+1);
if (point>grada )& (point>garab)
im(i,j)=255;
else
im(i,j)=0;
end
end
end
end
end
end
end
end
end
end
figure;imshow(im);title('fig8') |
Partager