| ²é¿´: 292 | »Ø¸´: 0 | ||
ÌÀºÍ¼Ó·ÆÒø³æ (СÓÐÃûÆø)
|
[ÇóÖú]
ÏÂÃæµÄCanny±ßÔµÌáÈ¡´úÂë´íÔÚÄÄÀ
|
|
ÏÂÃæµÄ³ÌÐò´íÔÚÄÄÀΪʲôÌáÈ¡³öµÄ±ßԵͼÏñÈ«ºÚ£¬¶øÈç¹ûɾµô¸ß˹Â˲¨´úÂ룬·´¶øÄܹ»³öÀ´½á¹û£¿ I=imread('F:\rose.jpg');%¶ÁÈëÔʼͼƬ figure, imshow(I),title('Ôͼ'); Y=rgb2gray(I); %°Ñ²ÊɫͼƬת»¯³É»Ò¶ÈͼƬ£¬256¼¶ figure, imshow(Y),title('»Ò¶ÈͼÏñ'); I1=double(Y); [m,n]=size(I1); %£¨1£©Óøß˹Â˲¨Æ÷ƽ»¬Í¼Ïñ sigma=2;N=5;%¶¨Òå¸ß˹²ÎÊý [d,f]=meshgrid([-(N-1)/2 N-1)/2],[-(N-1)/2 N-1)/2]);g=exp(-((d.*d+f.*f)/(2*sigma.*sigma))); S=conv2(Y,g,'same');%¶þά¾í»ýµÃµ½¸ß˹Â˲¨ºóµÄͼÏó I1=mat2gray(S);%¹éÒ»»¯£¬Ê¹¾ØÕóÖÐÿ¸öÔªËØµÄÖµ¶¼ÔÚ0-1Ö®¼ä % gaussian=[1/79 2/79 3/79 2/79 1/79; 2/79 4/79 6/79 4/79 2/79; 3/79 6/79 7/79 6/79 3/79; 2/79 4/79 6/79 4/79 2/79; 1/79 2/79 3/79 2/79 1/79]; % I1 =conv2(I1,gaussian); imshow(I1);title('¸ß˹Â˲¨½á¹û'); %£¨2£©ÓÃÒ»½×Æ«µ¼µÄÓÐÏÞ²î·ÖÀ´¼ÆËãÌݶȵķùÖµºÍ·½Ïò£» IP=zeros(m,n); IQ=zeros(m,n); f=zeros(m,n); a=zeros(m,n); for x=1:m-1 for y=1:n-1 IP(x,y)=(I1(x,y+1)-I1(x,y)+I1(x+1,y+1)-I1(x+1,y))/2; IQ(x,y)=(I1(x,y)-I1(x+1,y)+I1(x,y+1)-I1(x+1,y+1))/2; f(x,y)=sqrt(IP(x,y)^2+IQ(x,y)^2);%ÌݶȷùÖµ¾ØÕó a(x,y)=0; if(IP(x,y)<0) a(x,y)=atan(IQ(x,y)/IP(x,y))+pi/2; else a(x,y)=atan(IQ(x,y)/IP(x,y)); end end end % H1 = [-1 -1; 1 1]; % H2 = [1 -1; 1 -1]; % fx = conv2(I1,H1); % fy = conv2(I1,H2); % f = sqrt(fx.^2 + fy.^2); % a = atan(fx./eps(fy)); for i = 1:m for j = 1:n if(a(i,j) > -pi/8 && a(i,j) <= pi/8) a(i,j) = 0; elseif(a(i,j) > pi/8 && a(i,j) <= 3*pi/8) a(i,j) = 1; elseif((a(i,j) > 3*pi/8 || a(i,j) <= -3*pi/8)) a(i,j) = 2; else a(i,j) = 3; end end end %£¨3£©¶ÔÌݶȷùÖµ½øÐзǼ«´óÖµÒÖÖÆ£» F = f; for i =2 m-1) for j=2 n-1) switch(a(i,j)) case 0 if(F(i,j) <= F(i,j-1) || F(i,j) <= F(i,j+1)) f(i,j) = 0; end case 1 if(F(i,j) <= F(i-1,j+1) || F(i,j) <= F(i+1,j-1)) f(i,j) = 0; end case 2 if(F(i,j) <= F(i-1,j) || F(i,j) <= F(i+1,j)) f(i,j) = 0; end case 3 if(F(i,j) <= F(i-1,j-1) || F(i,j) <= F(i+1,j+1)) f(i,j) = 0; end end end end figure,imshow(f),title('·Ç¼«´óÖµÒÖÖÆºó½á¹û'); %step4:ÓÃË«ãÐÖµËã·¨¼ì²âºÍÁ¬½Ó±ßÔµ¡£ t1 =str2double(get(handles.edit1,'string'));%µÍãÐÖµ t2 =str2double(get(handles.edit2,'string'));%¸ßãÐÖµ Canny_1 = zeros(m,n); Canny_2 = zeros(m,n); for i = 1:m for j =1:n if(f(i,j) >= t1 ) Canny_1(i,j) = 255; else Canny_1(i,j) = 0; end if(f(i,j) >= t2 ) Canny_2(i,j) = 255; else Canny_2(i,j) = 0; end end end for i = 2 m-1) for j = 2 n-1) if((Canny_1(i,j)==255) && (Canny_2(i,j)~=255)) if((Canny_2(i-1,j-1)==255) || (Canny_2(i-1,j)==255) || (Canny_2(i-1,j+1)==255)|| ( Canny_2(i,j-1)==255 ) || (Canny_2(i,j+1)==255) || (Canny_2(i+1,j-1)==255) || (Canny_2(i+1,j)==255) ||(Canny_2(i+1,j+1) ==255)) Canny_2(i,j)=255; end end end end Canny=Canny_2; title('CannyËã×ÓÌáÈ¡µÄ±ßÔµ'); |
» ²ÂÄãϲ»¶
Óö¼û²»Ê¡ÐĵļÒÈ˺ÜÄѹý
ÒѾÓÐ17È˻ظ´
ÍËѧ»ò¼á³Ö¶Á
ÒѾÓÐ25È˻ظ´
²©Ê¿ÑÓµÃÎÒ£¬¿ÆÑÐÄÜÁ¦Ö±ÍùÉÏ´Ú
ÒѾÓÐ4È˻ظ´
ÃâÒßѧ²©Ê¿ÓÐÃû¶î£¬ËÙÁªÏµ
ÒѾÓÐ14È˻ظ´
ÃæÉÏ»ù½ðÉ걨ûÓÐÆäËûµÄ²ÎÓëÕß³ÉÂð
ÒѾÓÐ4È˻ظ´
¶à×é·Ö¾«ÁóÇóÖú
ÒѾÓÐ6È˻ظ´
ÕÒµ½Ò»Ð©Ïà¹ØµÄ¾«»ªÌû×Ó£¬Ï£ÍûÓÐÓÃŶ~
¿ÆÑдÓСľ³æ¿ªÊ¼£¬ÈËÈËΪÎÒ£¬ÎÒΪÈËÈË













N-1)/2],[-(N-1)/2
»Ø¸´´ËÂ¥
µã»÷ÕâÀïËÑË÷¸ü¶àÏà¹Ø×ÊÔ´