大佬谈边缘检测,边缘检测方案剖析
扫描二维码
随时随地手机看文章
边缘检测是图像处理领域中的不可回避的问题,对于边缘检测,我们应该有所了解。为增进大家对边缘检测的认识,本文将对边缘检测以及边缘检测方案予以介绍。如果你对边缘检测具有兴趣,不妨一起和小编继续往下阅读哦。
所谓边缘是指其周围像素灰度急剧变化的那些象素的集合,它是图像最基本的特征。边缘存在于目标、背景和区域之间,所以,它是图像分割所依赖的最重要的依据。由于边缘是位置的标志,对灰度的变化不敏感,因此,边缘也是图像匹配的重要的特征。
边缘检测和区域划分是图像分割的两种不同的方法,二者具有相互补充的特点。在边缘检测中,是提取图像中不连续部分的特征,根据闭合的边缘确定区域。而在区域划分中,是把图像分割成特征相同的区域,区域之间的边界就是边缘。由于边缘检测方法不需要将图像逐个像素地分割,因此更适合大图像的分割。
边缘大致可以分为两种,一种是阶跃状边缘,边缘两边像素的灰度值明显不同;另一种为屋顶状边缘,边缘处于灰度值由小到大再到小的变化转折点处。边缘检测的主要工具是边缘检测模板。我们以一个一维模板为例来考察边缘检测模板是如何作用的。
模板的作用是将右邻点的灰度值减去左邻点的灰度值作为该点的灰度值。在灰度相近的区域内,这么做的结果使得该点的灰度值接近于0;而在边缘附近,灰度值有明显的跳变,这么做的结果使得该点的灰度值很大,这样就出现了上面的结果。这种模板就是一种边缘检测器,它在数学上的涵义是一种基于梯度的滤波器,习惯上又称边缘算子。我们知道,梯度是有方向的,和边缘的方向总是垂直的。模板 是水平方向的,而上面那幅图像的边缘恰好是垂直方向的,使用模板 就可以将它检测出来。如果图像的边缘是水平方向的,我们可以用梯度是垂直
方向的模板 检测它的边缘。如果图像的边缘是45。方向的,我们可以用模板检测它的边缘。
常用的边缘检测模板有Laplacian算子、Roberts算子、Sobel算子、log(Laplacian-Gauss)算子、Kirsch算子和Prewitt算子等。
边缘检测一般是提取轮廓部分梯度变化最大的地方,既然是提取变化最大的地方,那么直接求取二阶导数不就可以了嘛,顺着这个思路继续思考,如果直接提取图像像素值的二阶导,确实是可以得到图像边缘部分的,也就是说求取图像像素值的二阶导会避免只求取一阶导而导致图像轮廓线段杂乱的现象。
但是如果只是求取图像像素值的二阶导数获取图像边缘的话,其实得到的结果是不太理想的,最主要问题就是图像的边缘部分可能是断断续续的,或者边缘连接部分不够平滑,这主要是由于图像的噪声、以及图像当中的漏洞造成的。所以在对图像进行梯度计算之前,应该先进行图像形态学操作,使用开操作和闭操作分别进行去噪和填补漏洞,让所有的边缘尽量都连接成完整闭合的线段,这样提取图像边缘的时候才不会出现断断续续、或者杂乱的线段。
到此,好像能够影响图像边缘检测的因素都被排除了,但是还有一种情况要说明,就是当被检测的图像边缘部分的像素变化不够明显的时候,是否还能够正常的检测分割出图像的边缘呢?以文章后面的人脸CT图片为例,要检测出人脸的轮廓部分是有很大难度的。
一般这种情况如果直接按照上面的流程进行检测,实际上效果是非常不理想的。由于图像本身应该被分割的边缘部分由于像素差异过小,从而导致计算出来的梯度也非常的小,这种情况求取像素值的二阶导会忽略掉这部分,二阶导数求取是图像像素梯度变化最大的地方,很明显,在这一点上,我们所要求应该被分割的“边缘”是不符合算法的要求的。
接着这个问题继续探讨,我们可以从两方面去思考解决方案,第一种解决方案就是直接抛弃图像梯度计算的这种方法,使用一种完全按照我们对图像边缘要求分割的方法;第二种方案就是继续按照图像像素梯度的计算方法改进当前的算法。
如果按照第一种方案的话,就不需要计算图像像素的梯度了,目前传统算法对于图像边缘分割都是基于像素梯度的计算,而不需要图像梯度就能实现图像分割的就只有深度学习的算法了,深度学习算法是一种基于端到端的学习方法,对于算法的设计难度较低,只需要指定输入和输出,以及对于标签的设定就可以了,深度学习方法除了对于设备的要求较高之外,训练技巧也较多,是需要一定的经验和技术积累的。
第二种方案是我们要探讨的重点,如何按照图像像素梯度计算的方法对弱边缘图像进行分割呢?其实答案的线索就藏在这个问题里面,既然图像的边缘较弱,那么意味着这部分图像的像素梯度也较弱,如果有一种方法能够增加这部分图像的像素梯度,那么问题就迎刃而解了。
以上便是此次小编带来的检测相关内容,通过本文,希望大家对边缘检测具备一定的认知。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!