资源简介
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
评论
共有 条评论