canny边缘检测法是高斯函数的一阶微分,它能在噪声抑制和边缘检测之间取得较好的平衡.
环境:windows xp+matlab 2010b
时间:2011/12/25
canny算法检测边缘主要步骤:
1)用3x3高斯滤波器进行滤波,消除噪声;
2)针对每一个像素,计算横向与纵向两方向的微分近似,以得到像素的梯度大小和方向;
3)对梯度进行"非极大抑制"(非局部最大值置0);
4)对梯度取两次阈值;
5)对边缘进行连接;
下面详细说明各个步骤:
0)读入图像:
clear;
clc;
i=imread('light.jpg');
k=rgb2y(i);%获取h分量,即亮度分量
又根据公式Brightness = 0.3 * R + 0.6 * G + 0.1 * B;计算出亮度分量y;
function k=rgb2y(z)
%i必须为rgb三维矩阵
[m,n,p]=size(z);
k=zeros(m,n);
z=double(z);
for i=1:m
for j=1:n
k(i,j)=0.3*z(i,j,1)+0.6*z(i,j,2)+0.1*z(i,j,3);
end
end
1)用3x3高斯滤波器进行滤波,消除噪声;
function j=gaosi(i);
%i必须为二维double矩阵
j=i;
[h,w]=size(i);
for m=2;h-1
for n=2:w-1
j(m,n)=(i(m,n-1)+2*i(m,n)+i(m,n+1))/4;%横向高斯滤波
end
end