• 大小: 3KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-06
  • 语言: 其他
  • 标签: Log,Canny  

资源简介

Log和Canny边缘检测算子

资源截图

代码片段和文件信息

clear;
I = imread(‘C:\Users\Auser.MEY\Desktop\CV\Tessella.bmp‘);
%I = double(I);
%I=rgb2gray(I); 
I=imnoise(I‘gaussian‘00.0005);
figure;
imshow(I)
title(‘noise image‘)
[heightwidth] = size(I);
J = I;


conv = zeros(55);%高斯卷积核
sigma = 1;%方差
sigma_2 = sigma * sigma;%临时变量
sum = 0;
for i = 1:5
    for j = 1:5
        conv(ij) = exp((-(i - 3) * (i - 3) - (j - 3) * (j - 3)) / (2 * sigma_2)) / (2 * 3.14 * sigma_2);%高斯公式
        sum = sum + conv(ij);
    end
end
conv = conv./sum;%标准化

%对图像实施高斯滤波
for i = 1:height
    for j = 1:width
        sum = 0;%临时变量
        for k = 1:5
            for m = 1:5
                if (i - 3 + k) > 0 && (i - 3 + k) <= height && (j - 3 + m) > 0 && (j - 3 + m) < width
                    sum = sum + conv(km) * I(i - 3 + kj - 3 + m);
                end
            end
        end
        J(ij) = sum;
    end
end
figureimshow(J[])
title(‘高斯滤波后的结果‘)
%求梯度
dx = zeros(heightwidth);%x方向梯度
dy = zeros(heightwidth);%y方向梯度
d = zeros(heightwidth);
for i = 1:height - 1
    for j = 1:width - 1
        dx(ij) = J(ij + 1) - J(ij);
        dy(ij) = J(i + 1j) - J(ij);
        d(ij) = sqrt(dx(ij) * dx(ij) + dy(ij) * dy(ij));
    end
end
figureimshow(d[])
title(‘求梯度后的结果‘)

%局部非极大值抑制
K = d;%记录进行非极大值抑制后的梯度
%设置图像边缘为不可能的边缘点
for j = 1:width
    K(1j) = 0;
end
for j = 1:width
    K(heightj) = 0;
end
for i = 2:width - 1
    K(i1) = 0;
end
for i = 2:width - 1
    K(iwidth) = 0;
end

for i = 2:height - 1
    for j = 2:width - 1
        %当前像素点的梯度值为0,则一定不是边缘点
        if d(ij) == 0
            K(ij) = 0;
        else
            gradX = dx(ij);%当前点x方向导数
            gradY = dy(ij);%当前点y方向导数
            gradTemp = d(ij);%当前点梯度
            %如果Y方向幅度值较大
            if abs(gradY) > abs(gradX)
                weight = abs(gradX) / abs(gradY);%权重
                grad2 = d(i - 1j);
                grad4 = d(i + 1j);
                %如果x、y方向导数符号相同
                %像素点位置关系
                %g1 g2
                %   C
                %   g4 g3
                if gradX * gradY > 0
                    grad1 = d(i - 1j - 1);
                    grad3 = d(i + 1j + 1);
                else
                    %如果x、y方向导数符号反
                    %像素点位置关系
                    %   g2 g1
                    %   C
                    %g3 g4
                    grad1 = d(i - 1j + 1);
                    grad3 = d(i + 1j - 1);
                end
            %如果X方向幅度值较大
            else
                weight = abs(gradY) / abs(gradX);%权重
                grad2 = d(ij - 1);
                grad4 = d(ij + 1);
                %如果x、y方向导数符号相同
                %像素点位置关系
                %g3
                %g4 C g2
                %     g1
                if gradX * gradY > 0
                    grad1 = d(i + 1j + 1);
                    grad3 = d(i - 1j - 1);
                else
                    %如果x、y方向导数符号反
                 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       8297  2016-07-14 19:13  Log和Canny程序(MATLAB)\canny.m

     文件       4474  2016-07-14 23:03  Log和Canny程序(MATLAB)\Laplacian.m

     目录          0  2016-07-15 17:07  Log和Canny程序(MATLAB)

----------- ---------  ---------- -----  ----

                12771                    3


评论

共有 条评论

相关资源