²é¿´: 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)/2N-1)/2],[-(N-1)/2N-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 =2m-1)  
    for j=2n-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 = 2m-1)
    for j = 2n-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Ëã×ÓÌáÈ¡µÄ±ßÔµ');
»Ø¸´´ËÂ¥

» ²ÂÄãϲ»¶

ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

ÖÇÄÜ»úÆ÷ÈË

Robot (super robot)

ÎÒÃǶ¼°®Ð¡Ä¾³æ

ÕÒµ½Ò»Ð©Ïà¹ØµÄ¾«»ªÌû×Ó£¬Ï£ÍûÓÐÓÃŶ~

¿ÆÑдÓСľ³æ¿ªÊ¼£¬ÈËÈËΪÎÒ£¬ÎÒΪÈËÈË
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ ÌÀºÍ¼Ó·Æ µÄÖ÷Ìâ¸üÐÂ
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û