Canny双阈值边缘检测和弱边缘连接详解

描述

在上一篇FPGA图像处理--Canny边缘检测(一)里介绍了Canny边缘检测的NMS计算,这里就介绍一下双阈值边缘检测和弱边缘连接。

双阈值检测顾名思义就是要有两个阈值,在Sobel中只有一个阈值,这样就可能带来一些潜在的问题,比如阈值设置过低导致检测出来的边缘很多,或者设定的过高导致检测出来的边缘比较少。

在Canny中引入了双阈值检测,也就是定义一个高阈值和一个低阈值。当边缘的幅值大于高阈值的时候就认为这个边缘是一个强边缘,低于低阈值的时候就认为他不是边缘,而在高阈值和低阈值之间的值被认为是弱边缘。通过后面的弱边缘连接就可以让弱边缘有可能被识别为边缘,也有可能被忽视掉。从而带来更好的检测效果。

我们来看一下Python的参考模型:

Canny

这里定义了一个函数来处理双阈值的问题,当像素的值大于等于高阈值的时候就设置当前像素为255,介于低阈值和高阈值之间的值设置为127,小于低阈值的值设置为0,这个就很简单了。

我们来看一下效果吧。

 

可以看到边缘信息都被很好的检测出来了,但是有的边缘是断断续续的,这个时候就需要使用弱边缘连接了。

最理想的弱边缘连接肯定是做一遍深搜,但是这个对于资源消耗太大了,那么我们就退而求其次,如果一个点是弱边缘的话,只要他周围八个点里面有一个是强边缘,那么我们就把这个点变为强边缘。是不是很简单。

来看看Python的参考模型:

Canny

只要当前值是127也就是我们在第一步中分离出来的弱边缘,然后做一个判断,判断他周边有没有强边缘,来决定是否将其变为强边缘点。

我们来看一下做了一次弱边缘连接的效果:

 

大家注意看红色框里面的这部分,可以看到一部分边缘相对于之前已经连接了起来。

如果我们多做几次弱边缘连接效果肯定会更好,不过与之带来的就是计算成本的增加。

Canny

这里通过一个循环来控制做弱边缘连接的次数。

来看一下弱边缘连接改为五次的效果,可以看到效果比之前更好一点。

 

再来看一下不做高斯模糊的效果,可以看到有很多的噪点:

 

最后来展示下所有的效果图,分别是原图,sobel,nms,canny后的结果:

 

 

参考模型到这里就介绍完毕了,之后就是用Verilog来实现它。

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分