900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > c#用canny算子做边缘提取_【图像处理】边缘检测

c#用canny算子做边缘提取_【图像处理】边缘检测

时间:2019-10-11 06:14:40

相关推荐

c#用canny算子做边缘提取_【图像处理】边缘检测

边缘检测

sobel

sobel是最常见也是最常用的边缘检测算子。一般来说,当我们想要获取图像的边缘时,首先想到的就是像素值发生突变的位置,而如何用数学表达来刻画"突变",一个很好的方式就是使用导数,而在图像中,由于像素是离散的,我们一般使用差分来近似处理,使用某种算子来近似计算全图每一点的梯度值,其中梯度明显大于邻近像素的点就被认为是边缘(实际处理中,使用大于某一阈值作为评判标准)。

sobel算子就是实现上述算法的一种基本算子,其一般分为水平和垂直两个方向的计算,两个方向上的算子互为转置。在两个方向分别计算完成之后,取其绝对值的和或平方和的算术平方根(1,2范数),即得到最终的梯度结果。(一般来说在硬件上计算绝对值要比平方开方廉价很多,所以一般使用绝对值较多)

此外,当滤波器大小为3的时候,sobel算子的近似将会带来明显的准确度下降,这时可以使用相同计算量但更为精确的Scharr算子,其近似计算更加精确。

具体的效果对比图如下:(左原图,中sobel,右scharr)

图中可以看到在scharr对于头发,嘴唇,皮肤纹理等细节的梯度信息提取的更好。

laplace

sobel及scharr是基于一阶导数,选取一阶导数的较大部分(例如极大值),那么自然,二阶导数也成为了一个可用的评判指标,即用二阶导数等于0来作为判断是否为边缘。当然由于导数等于0只是一个取极值的必要条件,所以不仅仅是边缘的二阶导数才为0,某些无意义(例如图像的平坦区域,一阶导数,二阶导数都是0)的点也会存在,在实际处理中一般是添加滤波器来处理(比如检测像素左右两个像素差的绝对值大于阈值)。

在实际图像处理中,一般使用laplace算子的差分近似,故得到常用模板如下:

此外,sobel算子具有明确的方向性(垂直和水平),将图像旋转某一角度,其提取效果就会下降,但是laplace算子却是具有旋转不变性的,这一点可从其模板中心对称性,或者从原始公式证明得到(令

,代入公式化简即可得证)。

还有,由于laplace算子使用了二阶导数,所以其相比sobel这种一阶方法对噪声更敏感,其受噪声的影响更明显(想象一下一条平滑的函数图像上出现了很多锯齿段,这样自然会错误地发现更多虚假的极值点)。

canny

canny算子是一种更系统性的边缘检测算子,其使用sobel算子作为检测器的补一份,同时首先使用gauss滤波器减弱噪声的影响,提取出边缘之后再用NMS(非极大值抑制)和阈值筛选来减少虚假边缘,这里我主要涉及其中的非极大值抑制部分。

在目标检测任务中对检测框NMS已经是一个家喻户晓的基本操作,但其实这是图像处理算法中的常用技巧。canny中的非极大值抑制,即要在sobel提取出的梯度图中找到梯度的局部最大值,并将非极大值置为0,从而减少虚检。而canny中的NMS是指是否为梯度方向上的极大值,不像角点检测等场景下是其邻域中的最大值。具体的算法步骤如下:

对sobel提取的垂直和水平方向的结果使用反正切的近似获得梯度方向根据梯度方向在滤波器范围内找到两个邻近的亚像素点(sub-pixel)使用双线性插值获得这两个亚像素点的梯度估计值将两个估计值和当前点的梯度相比较,若不是极大值,则置为0,否则保持不变

噪声影响下的边缘检测

高斯白噪声:

高斯白噪声(AWGN),简单来说就均值为0,方差为

的服从高斯分布的噪声,由于"白化"条件,所以噪声的二阶矩是不相关的。

高斯-泊松噪声

高斯-泊松噪声,将噪声的来源分为两部分,一部分是光子到达sensor时,即拍照时产生的噪声(shot noise),shot noise可近似看作一个Poisson随机变量,其均值是真实的的光子强度。另一部分是从电路中读取像素值时产生的噪声(read noise),它可以近似看作一个均值为0,方差为定值的Gaussian随机变量。

在具体实现时,一般使用如下的近似策略

将其近似看作一个信号相关(signal-dependent)的高斯分布,即满足如下公式:

其中x是真实值,noise是噪声,y是加了噪声之后的值

椒盐噪声

椒盐噪声(Pepper and Salt Noise),即随机出现的hot point和dead point,即某个点的像素值为最大值(hot point)或最小值(dead point),在实际图像设备中一般是由于sensor和传输中的干扰和错误产生,使得像素值达到上限或下限。

实验效果

添加噪声的后图片如下:(从上到下依次为:原图,高斯,高斯-泊松,椒盐)

三种算子在添加噪声后的效果如下:(三种边缘检测从左往右依次是sobel,laplace,canny)

从图中可以看到sobel和laplace对噪声的敏感性,天空部分在高斯-泊松噪声和椒盐噪声的情形下,会错误保留大量的噪声,致使整个梯度图天空部分非常杂乱,而canny由于NMS和阈值抑制就会相对干净很多。sobel的鲁棒性要强于laplace,可以看到草地上sobel还是可以发现部分主干纹理,而laplace已基本和噪声混为一体。 对于孤立点,可以看到由于算子模板的不同,sobel倾向于将其提取为"口"字状的小方块,而laplace倾向于提取为中心放射状的点。 同时,对于纹理复杂的图像,可以发现噪声对于边缘提取算法的影响十分严重,对比草地细节可以发现提取到的纹理变化较多,只是由于纹理过于密集所以远观感觉差异不大。

(注:此处所有边缘检测算法都在检测之前做了高斯滤波,一定程度上减弱噪声)对于较为简洁,图像复杂纹理不多的图像,canny对于噪声的抵御能力明显较强,可以看到三种噪声带来的影响都不是很大,而sobel和laplace在高斯-泊松噪声和椒盐噪声下仍然会有严重的问题。对于虚化部分,如该图中的背景部分,虽然人眼仍然能看到一些物体边缘,但是由于虚化之后像素变化幅度愈加小,致使大部分梯度值无法超过提取算法的阈值,故没有呈现在结果图中。人像图片的细节纹理,由于本身像素值变化幅度较小,加上磨皮等人像处理算法的作用,一般很难直接应用边缘检测算法提取出好的结果。对于人像,canny提取出来的边缘可视感比sobel和laplace要差,尤其是图中的右眼部分,其更倾向于边缘本身而不是保留原图观感。第三行第2,3列这量张图很有意思,可以看到在这种噪声情形下人脸的轮廓,部分头发和嘴唇细节也都有一定程度的响应。猜想适当的噪声辅助可以提高某些情况下的边缘检测效果,人眼可视感明显加强,这类似于人像图像处理流程最后一定要适当放回部分噪声,从而增强人像整体的可视感。(不过机器视觉可能并不认为这样观感好)

模糊影响下的边缘检测

线性运动模糊和非线性运动模糊

这里我使用传统方法来生成模糊图像,即使用运动模糊核和原图做卷积运算,得到模糊后的结果,具体操作中使用了下列两种模糊核,分别用来近似线性和非线性。

线性核:

非线性核:

高斯模糊

即在图片进行边缘检测之前再使用一个更大的(kernel_size=7)的高斯核进一步磨平图像。

实验效果

从上到下依次是原图,线性模糊,非线性模糊,高斯模糊

运动模糊对于边缘检测的影响非常严重,对于线性运动模糊,几乎只有和运动方向相同的梯度可以检测出,而对于非线性运动模糊,图像模糊程度进一步加强,sobel由于算子的方向性,检测效果下降很多,canny由于其复杂的抑制机制直接检测不出任何边缘,laplace虽然有响应,但是检测到的也是杂乱无章的效果,类似图片旋转多次后的梯度叠加(天空和树尤为明显)。而换个角度考虑,canny可以作为运动模糊的检测器。高斯模糊则更接近一种磨平的效果,草地纹理减少了很多,碉堡上的圆孔也消失不见,但是部分过于杂乱的纹理也变的清晰一些。所以,适当的高斯模糊可以有效压制噪声,并简化细节纹理,但是过强的则会丢失信息。运动模糊本质上是一种积分操作,即可以简单视作原图和运动生成图的叠加,简化后,对运动模糊后的图提取梯度可以看作原图和生成图的梯度叠加,这其中会有正负梯度的叠加导致信息减弱或消失,这从另一个方面解释了为什么模糊后的图像边缘提取效果会严重下降。高斯模糊下,canny左半部花的轮廓丢失,而sobel和laplace仍然可以看出轮廓。孤立点,单个响应点,例如原图中的白点,在高斯blur之后,canny由于其复杂的抑制处理,对其的提取能力会大大下降,其与周围像素点的像素差被减弱,故无法通过阈值,而laplace仍可以保持一定的响应。故laplace对于孤立点的检测效果更加robust。

边缘检测与锐化

暴力加边缘

边缘检测算法的另一用途就是图像锐化,人眼对于边缘,细节纹理等高频区域更加敏感,所以图像处理中也因此要对其进行增强。一个最直观的方法即将提取到的边缘直接加到原图上,从而达到增强效果。而由于laplace算子对于细节纹理信息的效果更好,所以锐化时一般使用laplace来提取高频信息。

USM(unsharpened mask)

暴力加边缘只是一种很初级的锐化算法。在各种图像编辑中更加常用的是USM。USM的核心是去间接获取高频信息,具体的算法流程如下:

使用高斯滤波器提取低频成分,并用原图-低频成分间接得到高频成分diff对原图做对比度(constrast)处理得到增强图以diff为判断依据,并结合事先确定好的阈值进行判断,小于阈值的点保留原图像素值,大于阈值的点通过公式$I = (1-r)O+rC$ 线性插值获得,其中r是增益系数,O是原图,C是增强图。

实验效果

从左到右依次是原图,暴力加,USM

USM总的效果还是更好一些,不过USM的高斯滤波器参数设置需要调节,默认设置会产生明显的artifact。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。