转自http://www.cnblogs.com/AndyJee/p/3734805.html
边缘检测
主要内容:
1.图像梯度
2.一阶微分算子
3.二阶微分算子
4.Canny算子
1、为什么要检测边缘?
一个例子:基于边缘的图像编辑
2、图像边缘的产生
物体的边界、表面方向的改变、不同的颜色、光照明暗的变化
3、边缘检测——图像梯度
边缘是一阶倒数的极大值点:
4、边缘检测——一阶微分算子
使用差分近似一阶微分算子:
直接对图像使用差分容易受到噪声影响:
解决方法:先平滑,再微分
二维高斯微分:
Prewitt算子:
极值检测边缘,去掉部分伪边缘,对 噪声具有平滑作用 。其原理是在图像空间利用两个方向模板与图G(i)=|[f(i-1,j-1)+f(i-1,j)+f(i-1,j+1)]-[f(i+1,j-1)+f(i+1,j)+f(i+1,j+1)]|G(j)=|[f(i-1,j+1)+f(i,j+1)+f(i+1,j+1)]-[f(i-1,j-1)+f(i,j-1)+f(i+1,j-1)]|则 P(i,j)=max[G(i),G(j)]或 P(i,j)=G(i)+G(j)经典Prewitt算子认为:凡灰度新值大于或等于 阈值的像素点都是边缘点。即选择适当的阈值T,若P(i,j)≥T,则(i,j)为边缘点,P(i,j)为边缘图像。这种判定是欠合理的,会造成边缘点的误判,因为许多噪声点的灰度值也很大,而且对于幅值较小的边缘点,其边缘反而丢失了。Sobel算子
索贝尔算子(Sobel operator)是 图像处理中的算子之
图像的每一个像素的横向及纵向梯度近似值可用以下的 公式结合,来计算梯度的大小。然后可用以下公式计算梯度方向。在以上例子中,如果以上的角度Θ等于零,即代表图像该处拥有纵向边缘,左方较右方暗。在边缘检测中,常用的一种模板是Sobel 算子。Sobel 算子有两个,一个是检测水平边缘的 ;另一个是检测垂直边缘的 。与Prewitt算子相比,Sobel算子对于象素的位置的影响做了加权,可以降低边缘模糊程度,因此效果更好。Sobel算子另一种形式是各向同性Sobel(Isotropic Sobel)算子,也有两个,一个是检测水平边缘的 ,另一个是检测垂直边缘的 。各向同性Sobel算子和普通Sobel算子相比,它的位置加权系数更为准确,在检测不同方向的边沿时梯度的幅度一致。将Sobel算子矩阵中的所有2改为根号2,就能得到各向同性Sobel的矩阵。由于 Sobel算子是滤波算子的形式,用于提取边缘,可以利用快速 卷积函数, 简单有效,因此应用广泛。美中不足的是,Sobel算子并没有将图像的主体与背景严格地区分开来,换言之就是Sobel算子没有基于 图像灰度进行处理,由于Sobel算子没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。 在观测一幅图像的时候,我们往往首先注意的是图像与背景不同的部分,正是这个部分将主体突出显示,基于该理论,我们给出了下面阈值化轮廓提取算法,该算法已在 数学上证明当像素点满足正态分布时所求解是最优的。实际应用中:对二维高斯微分进行数值近似:Prewitt算子、Sobel算子
Prewitt算子:去噪+ 增强边缘
Sobel算子:去噪+ 增强边缘(给四邻域更大的权重)
使用一阶微分算子提取边缘流程:
1. 使用Prewitt或Sobel算子对图像进行卷积;
2. 将梯度幅值大于阈值的点标记为边缘;
3. (optional)将边缘细化为一个像素宽度。5、边缘检测——二阶微分算子
如果不使用细化,如何获得单像素宽度边缘?
边缘是一阶倒数的极大值点
边缘是二阶倒数的过零点
注意:仅仅等于0不够,常数函数也为0,必须存在符号改变
二维高斯微分:
Laplacian of Gaussian (LoG)算子:首先用Gauss函数对图像进行平滑,抑制噪声,然后对经过平滑的图像使用Laplacian算子
LoG算子等效于:Gaussian平滑+ Laplacian二阶微分LoG因其形状,也称为Mexican hat
LoG算子与一阶微分算子的比较:
LoG算子的特点:
• 正确检测到的边缘:单像素宽度,定位准确;
• 形成许多封闭的轮廓,这是一个主要问题;
• 需要更加复杂的算法检测过零点。6、边缘检测——Canny算子
- Canny算子是最常用的边缘检测算子
- Canny算子是一阶微分算子,但是一个优化的方案
-单像素宽度
-噪声抑制
-边缘增强
-边缘定位
J.Canny, “A Computational Approach to Edge Detection”, IEEE Trans. on PAMI, 8(6),1986.
18482 cites- Canny算子基本流程
(1)高斯平滑滤波器卷积
(2)使用一阶有限差分计算偏导数的两个阵列
当然也可以使用高斯微分算子(Prewitt或Sobel)直接与
卷积计算
和
(3)边缘幅值和边缘方位角
M代表梯度幅值的大小,在存在边缘的图像位置处,
M的值变大,图像的边缘特征被“增强”。(4)梯度非极大值抑制
局部极值周围存在相近数值的点:
非极大值抑制(NMS:Non-Maxima Suppression)
主要思想:由梯度幅值图像
,仅保留极大值(严格地说,保留梯度方向上的极大值点)。
具体过程:
2.对于每个点,在梯度方向和反梯度方向各找n个像素点。若
不是这些点中的最大点,则将
置零,否则保持
不变。
(5)对NMS结果进行阈值二值化—双阈值检测
- 使用大的阈值,得到:
-少量的边缘点
-许多空隙- 使用小的阈值,得到:
-大量的边缘点
-大量的错误检测两个阈值T1,T2:T2 >> T1
由T1得到
,低阈值边缘图:更大的误检测率
由T2得到,高阈值边缘图:更加可靠
(6)边缘连接
1. 将中相连的边缘点输出为一幅边缘图像
;
2. 对于中每条边,从端点出发在
中寻找其延长的部分,直至
与中另外一条边的端点相连,否则认为
中没有它延长的部分;
3. 将作为结果输出。
Canny算子流程效果图:
• Canny算子的优点
-参数较少
-计算效率
-得到的边缘连续完整
• 参数的选择
-Gauss滤波的尺度
-双阈值的选择(LOW=HIGH*0.4)Canny算子的处理效果:
九、总结
• 根据自相关矩阵特征值检测角点(Harris);
• 高斯差分尺度空间中检测尺度不变特征点(SIFT);
• 一阶高斯微分算子(Prewitt、Sobel)极值检测边缘;
• 二阶高斯微分算子(LoG)过零点检测边缘;
• 非极大值抑制+双阈值检测边缘(Canny)。