【MATLAB图像处理3】 canny边缘检测 (附源码)

canny边缘检测,相对于sobel是较为复杂的一种检测算法,也是迄今为止最优秀的一种边缘检测算法,但是不可否认,它也带来了大量的运算。

 

canny分四步:

1.对灰度图进行高斯滤波  (很简单)

2.. 求出梯度的幅值图像和角度图像(一般用sobel求,简单)

3.对梯度幅值图形进行非最大值抑制,并进行双阈值处理。(难)

4.连接分析来检测并连接边缘。(很难)

 

 

1、高斯滤波。

使用二维高斯公式,产生高斯滤波模版。公式就不写,源码里会有。然后用模版和图像进行卷积。这一步很简单,就不多说了

 

2、求梯度的赋值和角度

用sobel算子,x方向为[-1,-2,-1;               y方向的算子为x方向的转置。然后分别用这两个算子和图像做卷积。然后用公式 A=sqrt(x.^2+y.^2)就是梯度幅值图了。

                                            0, 0, 0

                                            1, 2, 1 ]

 

然后是求角度,没一点的角度为arctan[y/x],求出梯度角度图;

 

3、利用求出的梯度角度图,把各个梯度分别划分到水平,垂直,45°,-45°,四个方向上。然后把赋值图按所划分的四个方向,分别同邻近的两个点比较,若为最大值则保留,若不是,则变为0;这样就得到非最大值抑制图,然后设置一个大阈值和一个小阈值,再用小阈值图减去大阈值图。得到阈值图。

 

4、在大阈值图中定位下一个非0像素P;在小阈值图中用8连通的方式,连接到P,如此递归,连接所有连线。

 

下面是源码

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%函数功能:canny边缘检测%%%%%%%%%%%%%%%%%%%%%
%%作者:张小胖疯了%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%时间:2013.9.28%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all;close all; clc;
src=imread('D:\Documents\Desktop\lenna.JPG');  %读入图形
[m,n,q]=size(src);
src_gray=my_gray(src);                         %变为灰度图
  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值