图像为什么会有边缘?
图像边缘一般指图像的灰度变化率最大的位置。成因主要如下:
1.图像灰度在表面方向变化不连续;
2.图像中物体在空间上的深度不一致;
3.在光滑的表面上颜色不一致;
4.图像中物体的光影
所以边缘检测指的是从图像中检测边缘点和边缘段,并且描述边缘方向的过程。图像可以看成二元函数f(x,y),(x,y)是pixel的位置,f(x,y)是该处的灰度值,这样图像就可以想象成是一个曲面。看作曲面以后,就可以用数学的方法来处理了。边缘即曲面上变化最剧烈的位置,这个位置也是曲面的局部极值点的位置,求极值大家都知道,可以用导数来求。基于边缘检测的图像分割方法的基本思路就是先确定图像中的边缘像素,然后再把这些像素连接在一起就构成所需的区域边界。
下图展示了图像边缘类型及导数曲线规律示例
如何计算边缘点?
知道了原理后,我们的目标:一是找到边缘的位置,二是要确定边缘的方向。
而在实际的图像处理中,可以采用差分的方法来进行计算。但用差分的方法进行边缘检测必须使差分的方向和边缘的方向相垂直,这就需要对图像的不同方向分别进行差分运算,增加了运算量。一般可将边缘分为水平边缘、垂直边缘和对角线边缘。
两个关键点:
1. 图像是离散的,微分算子也要离散化,我们用差分的方式去逼近微分,并将微分算子简化为模板;
2. 到底要不要把一个点看作边缘点,我们是通过设定一个阈值来判断的,微分后大于这个阈值,就判作边缘。
一个注意点:
导数是检测突变的地方,如果某处有噪声干扰,很容易误检,即一阶微分不能抵抗噪声。所以在使用一阶微分检测边缘之前,通常进行预处理抵抗噪声。
Reberts算子
Roberts 梯度算子利用对角方向相邻两像素值之差作为衡量标准,其计算方法如下:
如果写成卷积运算的形式,卷积核分别为:
prewitt算子
prewitt算子结合了差分运算与邻域平均的方法。其卷积模板如下:
Sobel算子
Sobel 算子有两个,一个是检测水平边缘的 ;另一个是检测垂直边缘的 。它对于象素的位置的影响做了加权,可以降低边缘模糊程度,因此效果更好。由于Sobel算子是滤波算子的形式,用于提取边缘,可以利用快速卷积函数, 简单有效,因此应用广泛。但缺点就是Sobel算子并没有将图像的主体与背景严格地区分开来,即:Sobel算子没有基于图像灰度进行处理,由于Sobel算子没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。
sobel算子的模板为
参考: