边缘检测

转自http://www.cnblogs.com/AndyJee/p/3734805.html

边缘检测

主要内容:

1.图像梯度

2.一阶微分算子

3.二阶微分算子

4.Canny算子

1、为什么要检测边缘?

一个例子:基于边缘的图像编辑

image_thumb89

2、图像边缘的产生

物体的边界、表面方向的改变、不同的颜色、光照明暗的变化

image_thumb90

3、边缘检测——图像梯度

图像梯度的定义:image_thumb91[1]   image_thumb92

水平梯度:image_thumb93

垂直梯度:image_thumb94

图像梯度指向灰度变化最快的方向:image_thumb95

梯度幅值表示边缘的强弱:image_thumb96

边缘是一阶倒数的极大值点:

image_thumb97

4、边缘检测——一阶微分算子

使用差分近似一阶微分算子:

image_thumb98

直接对图像使用差分容易受到噪声影响:

image_thumb99

解决方法:先平滑,再微分

image_thumb100

image_thumb101,可将平滑和微分合为一个算子

image_thumb102

二维高斯微分:

Prewitt算子:

Prewitt算子是一种一阶 微分算子边缘检测,利用 像素点上下、左右邻点的灰度差,在边缘处达到
极值检测边缘,去掉部分伪边缘,对 噪声具有平滑作用 。其原理是在图像空间利用两个方向模板与图
像进行 邻域 卷积来完成的,这两个方向模板一个检测水平边缘,一个检测垂直边缘。

[1]

对数字图像f(x,y),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算子处理效果图

一,主要用作 边缘检测。在技术上,它是一离散性 差分算子,用来运算图像亮度函数的梯度之近似值。在图像的任何一点使用此算子,将会产生对应的梯度矢量或是其法矢量

该算子包含两组3x3的 矩阵,分别为横向及纵向,将之与图像作平面 卷积,即可分别得出横向及纵向的亮度 差分近似值。如果以A代表原始图像,Gx及Gy分别代表经横向及纵向 边缘检测的图像,其公式如下:
图像的每一个像素的横向及纵向梯度近似值可用以下的 公式结合,来计算梯度的大小。
然后可用以下公式计算梯度方向。
在以上例子中,如果以上的角度Θ等于零,即代表图像该处拥有纵向边缘,左方较右方暗。
在边缘检测中,常用的一种模板是Sobel 算子。Sobel 算子有两个,一个是检测水平边缘的 ;另一个是检测垂直边缘的 。与Prewitt算子相比,Sobel算子对于象素的位置的影响做了加权,可以降低边缘模糊程度,因此效果更好。
Sobel算子另一种形式是各向同性Sobel(Isotropic Sobel)算子,也有两个,一个是检测水平边缘的 ,另一个是检测垂直边缘的 。各向同性Sobel算子和普通Sobel算子相比,它的位置加权系数更为准确,在检测不同方向的边沿时梯度的幅度一致。将Sobel算子矩阵中的所有2改为根号2,就能得到各向同性Sobel的矩阵。
由于 Sobel算子是滤波算子的形式,用于提取边缘,可以利用快速 卷积函数, 简单有效,因此应用广泛。美中不足的是,Sobel算子并没有将图像的主体与背景严格地区分开来,换言之就是Sobel算子没有基于 图像灰度进行处理,由于Sobel算子没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。 在观测一幅图像的时候,我们往往首先注意的是图像与背景不同的部分,正是这个部分将主体突出显示,基于该理论,我们给出了下面阈值化轮廓提取算法,该算法已在 数学上证明当像素点满足正态分布时所求解是最优的。

实际应用中:对二维高斯微分进行数值近似:Prewitt算子、Sobel算子

image_thumb103

Prewitt算子:去噪+ 增强边缘

image_thumb104

Sobel算子:去噪+ 增强边缘(给四邻域更大的权重)

image_thumb105

使用一阶微分算子提取边缘流程: 
1. 使用Prewitt或Sobel算子对图像进行卷积; 
2. 将梯度幅值大于阈值的点标记为边缘; 
3. (optional)将边缘细化为一个像素宽度。

image_thumb106

5、边缘检测——二阶微分算子

如果不使用细化,如何获得单像素宽度边缘?

image_thumb107

边缘是一阶倒数的极大值点

image_thumb108

边缘是二阶倒数的过零点 
注意:仅仅等于0不够,常数函数也为0,必须存在符号改变

image_thumb109

对平滑图像做二阶微分:image_thumb110

image_thumb111

二维高斯微分:

image_thumb112

Laplacian of Gaussian (LoG)算子:首先用Gauss函数对图像进行平滑,抑制噪声,然后对经过平滑的图像使用Laplacian算子 
LoG算子等效于:Gaussian平滑+ Laplacian二阶微分

LoG因其形状,也称为Mexican hat

image_thumb113

LoG算子与一阶微分算子的比较:

image_thumb115

LoG算子的特点: 
• 正确检测到的边缘:单像素宽度,定位准确; 
• 形成许多封闭的轮廓,这是一个主要问题; 
• 需要更加复杂的算法检测过零点。

6、边缘检测——Canny算子

  • Canny算子是最常用的边缘检测算子
  • Canny算子是一阶微分算子,但是一个优化的方案 
    -单像素宽度 
    -噪声抑制 
    -边缘增强 
    -边缘定位 
    J.Canny, “A Computational Approach to Edge Detection”, IEEE Trans. on PAMI, 8(6),1986. 
    18482 cites
  • Canny算子基本流程

image_thumb116

(1)高斯平滑滤波器卷积

image_thumb117

(2)使用一阶有限差分计算偏导数的两个阵列

image_thumb118

相当于与模板进行卷积运算:image_thumb119

当然也可以使用高斯微分算子(Prewitt或Sobel)直接与image_thumb120卷积计算image_thumb121image_thumb122

(3)边缘幅值和边缘方位角

image_thumb123

M代表梯度幅值的大小,在存在边缘的图像位置处, 
M的值变大,图像的边缘特征被“增强”。

(4)梯度非极大值抑制

局部极值周围存在相近数值的点:

image_thumb124

非极大值抑制(NMS:Non-Maxima Suppression) 
主要思想:

由梯度幅值图像image_thumb125,仅保留极大值(严格地说,保留梯度方向上的极大值点)。

具体过程:

1.初始化image_thumb126

2.对于每个点,在梯度方向和反梯度方向各找n个像素点。若image_thumb127不是这些点中的最大点,则将image_thumb128置零,否则保持image_thumb129不变。

image_thumb130

  • 在梯度方向的沿线上检测该点是否为局部极大值;
  • 简化的情形,只使用4个方向:【0,45,90,135】;
  • 得到的结果image_thumb131包含边缘的宽度为1个像素;

(5)对NMS结果进行阈值二值化—双阈值检测

  • 使用大的阈值,得到: 
    -少量的边缘点 
    -许多空隙
  • 使用小的阈值,得到: 
    -大量的边缘点 
    -大量的错误检测

两个阈值T1,T2:T2 >> T1

由T1得到image_thumb132,低阈值边缘图:更大的误检测率 
由T2得到image_thumb133,高阈值边缘图:更加可靠

image_thumb134

(6)边缘连接 
1. 将image_thumb135中相连的边缘点输出为一幅边缘图像image_thumb136; 
2. 对于image_thumb137中每条边,从端点出发在image_thumb138中寻找其延长的部分,直至image_thumb139与中另外一条边的端点相连,否则认为image_thumb140中没有它延长的部分; 
3. 将image_thumb141作为结果输出。

Canny算子流程效果图:

image_thumb142

image_thumb143

image_thumb144

• Canny算子的优点 
-参数较少 
-计算效率 
-得到的边缘连续完整 
• 参数的选择 
-Gauss滤波的尺度 
-双阈值的选择(LOW=HIGH*0.4)

image_thumb145

image_thumb146

Canny算子的处理效果:

image_thumb147

image_thumb148

九、总结

• 根据自相关矩阵特征值检测角点(Harris); 
• 高斯差分尺度空间中检测尺度不变特征点(SIFT); 
• 一阶高斯微分算子(Prewitt、Sobel)极值检测边缘; 
• 二阶高斯微分算子(LoG)过零点检测边缘; 
• 非极大值抑制+双阈值检测边缘(Canny)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值