Canny边缘检测基本特征如下:
(1) 必须满足两个条件:①能有效地抑制噪声;②必须尽量精确确定边缘的位置。
(2) 根据对信噪比与定位乘积进行测度,得到最优化逼近算子。这就是Canny边缘检测算子。
(3) 类似与Marr(LoG)边缘检测方法,也属于先平滑后求导数的方法。
Canny边缘检测算法步骤:
步骤1:用高斯滤波器平滑处理原图像;
步骤2:用一阶偏导的有限差分进行计算梯度的幅值和方向;
步骤3:对梯度幅值进行非极大值抑制;
步骤4:用双阈值算法检测和连接边缘。
matlab:C语言逻辑实现canny边缘算子。
代码:
clc;
clear all;
%导入原图
data=imread('C:\Users\Barca\Desktop\234.jpg');
%显示原图
figure(1);
imshow(data);
[m,n,r]=size(data);
%图像灰度化
if r>1
data1=rgb2gray(data);
else
data1=data;
end
%显示灰度化图
figure(2);
imshow(data1);
%数据转为double格式
data1=double(data1);
%step1.高斯滤波
%生成一个3*3的高斯模板,标准差为0.8
template=fspecial('gaussian',3,0.8);
%模板滤波
img_filt=imfilter(data1,template);
%step2.计算图像的梯度(幅度和方向)
%x方向上的梯度模板
ax=[-1,-1,-1;0,0,0;1,1,1];
%y方向上的梯度模板
ay=[-1,0,1;-1,