www.gusucode.com > 《图像配准技术及其Matlab编程实现》--源码程序 > 《图像配准技术及其Matlab编程实现》/match/Zero_Crossing.m

    function Zero_Crossing(filename)
%基于二阶导数的边缘检测
%使用Log掩膜 Laplacian of a Gaussian
f=imread(filename);
figure,imshow(f);
[width,height]=size(f);
g1=zeros(width,height);
g2=g1;
df=im2double(f);
w=[0 0 -1 0 0;0 -1 -2 -1 0;-1 -2 16 -2 -1;0 -1 -2 -1 0;0 0 -1 0 0];
for i=3:width-2
    for j=3:height-2
        gw=[df(i-2,j-2) df(i-2,j-1) df(i-2,j) df(i-2,j+1) df(i-2,j+2);df(i-1,j-2) df(i-1,j-1) df(i-1,j) df(i-1,j+1) df(i-1,j+2);df(i,j-2) df(i,j-1) df(i,j) df(i,j+1) df(i,j+2);df(i+1,j-2) df(i+1,j-1) df(i+1,j) df(i+1,j+1) df(i+1,j+2);df(i+2,j-2) df(i+2,j-1) df(i+2,j) df(i+2,j+1) df(i+2,j+2)];
        g2(i,j)=sum(sum(w.*gw));
    end
end

wx=[-1 -2 -1;0 0 0;1 2 1];
wy=[-1 0 1;-2 0 2;-1 0 1];
for i=2:width-1
    for j=2:height-1
                gw=[df(i-1,j-1) df(i-1,j) df(i-1,j+1);df(i,j-1) df(i,j) df(i,j+1);df(i+1,j-1) df(i+1,j) df(i+1,j+1)];
                g1(i,j)=sqrt((sum(sum(wx.*gw)))^2+(sum(sum(wy.*gw)))^2)/2;
    end
end

for i=1:width
    for j=1:height
        if g2(i,j)>0
            if(g2(i+1,j)<0 || g2(i,j+1)<0 || g2(i+1,j+1)<0)
                g2(i,j)=1;
            else
                g2(i,j)=0;
            end
        elseif g2(i,j)<0
            if(g2(i+1,j)>0 || g2(i,j+1)>0 || g2(i+1,j+1)>0)
                g2(i,j)=1;
            else
                g2(i,j)=0;
            end
        else
            g2(i,j)=0;
        end
    end
end

g1=g1>=0.25*max(g1(:));
g=g1.*g2;
figure,imshow(g);