边缘提取

 


前言

尽管前文中我们使用的点线检测十分重要,但是在图像处理中,边缘提取仍然是最常用的检测灰度不连续性的方法。而使用边缘检测最常用的函数就是edge函数,最常用的模板是sobel边缘检测器、LOG边缘检测器、Canny检测器。

 

一、基础概念

edge函数的使用方法是:

[g,t]=edge(f,method,T,dir);

其中g为处理后的图像;f为原图;method代表要使用的方法,例如sobel、LOG等等;T为阈值,代表边缘提取后对照的阈值,高于阈值的保留,否则舍去(不给定的情况下系统会自动给定一个合适的阈值);dir代表提取的方向,例如horizontal代表水平提取;both代表均提取;vertical代表竖直提取。

值得一提的是,使用LOG和Canny检测器时,末尾一项不是dir而是sigma,代表平滑滤波器的标准差,可自行给定或按系统默认值操作。

LOG边缘检测器是首先对图像进行高斯滤波处理,之后再按照拉普拉斯算子的方法进行边缘提取,通过寻找零交叉发现边缘;

Canny边缘检测器是目前已知的效果最好的边缘检测器。它通过寻找I(x,y)的梯度的局部发现最大边缘。梯度由高斯滤波器的导数进行计算。该方法用两个阈值检测强边缘和弱边缘,并仅在它们连接到强边缘时将弱边缘包含到输出中。该方法可以真正检测到弱边缘。

二、代码示例

I1=imread('house.tif');
[I2,t1]=edge(I1,'sobel','vertical');%sobel算子竖直边缘提取
[I3,t2]=edge(I1,'sobel',0.15,'vertical');%给定一个阈值再竖直边缘提取
[I4,t3]=edge(I1,'sobel',0.15,'both');%给定一个阈值竖直水平提取
%edge函数是不能够实现45°角提取的,如果要进行斜方向的提取则需要采用imfilter函数进行滤波处理
w1=[-2 -1 0;-1 0 1;0 1 2];%-45°模板
I5=imfilter(tofloat(I1),w1,'replicate');
T1=0.3*max(abs(I5(:)));%选定阈值
I5=I5>=T1;
w2=[0 1 2;-1 0 1;-2 -1 0];%+45°模板
I6=imfilter(tofloat(I1),w2,'replicate');
T2=0.3*max(abs(I6(:)));%选定阈值
I6=I6>=T2;
subplot(321),imshow(I1),title('原图');
subplot(322),imshow(I2),title('垂直边缘提取图');
subplot(323),imshow(I3),title('使用指定阈值的垂直边缘提取图');
subplot(324),imshow(I4),title('使用指定阈值的水平垂直边缘提取图');
subplot(325),imshow(I5),title('-45°边缘提取图');
subplot(326),imshow(I6),title('+45°边缘提取图');

figure(2)
I1=tofloat(I1);
[I7,t4]=edge(I1,'sobel');
[I8,t5]=edge(I1,'log');
[I9,t6]=edge(I1,'canny');
[I10,t7]=edge(I1,'sobel',0.05);%自定义sobel的阈值为0.05
[I11,t8]=edge(I1,'log',0.003,2.25);%自定义log的阈值为0.003且方差为2.25
[I12,t9]=edge(I1,'canny',[0.04 0.10],1.5);%自定义canny的弱阈值为0.04,强阈值为0.1,方差1.5
subplot(231),imshow(I7),title('默认值sobel算子的边缘提取图');
subplot(232),imshow(I8),title('默认值log算子的边缘提取图');
subplot(233),imshow(I9),title('默认值canny算子的边缘提取图');
subplot(234),imshow(I10),title('自定义sobel算子的边缘提取图');
subplot(235),imshow(I11),title('自定义log算子的边缘提取图');
subplot(236),imshow(I12),title('自定义canny算子的边缘提取图');

三、结果展示


总结

edge的边缘提取在水平方向和竖直方向拥有强大的功能,但是无法处理45°这样的斜向,要处理斜方向的边缘提取仍需采用imfilter函数进行滤波处理再阈值操作。

与sobel边缘检测器和Log边缘检测器相比Canny检测器功能强大,不仅能够清晰的检测各个我们关注的边缘还可以得到最清晰的图。(以后都用Canny方法就好了,┑( ̄Д  ̄)┍)

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值