13 Mar 2010

图像边缘检测算子的比较


边缘存在于目标与背景、目标与目标、区域与区域、基元与基元之间,一般是指图像中像素灰度有阶跃变化或屋顶状变化的那些像素的集合,可以粗略地分为两 种: ① 阶跃性 边缘(step edge), 它两边 的像 素的灰度值有显著的不同; ② 屋顶状 边缘(roof edge), 它位 于灰度 值从增 加到减少的变化转折点。对于阶跃性边缘, 二阶方向导数在边缘处呈零交叉; 对于屋顶状边缘, 二阶方向导数在边缘处取极值。


图像的边缘是由灰度不 连续性 所反映 的。经典的 边缘 提取方法是考察图像的每个像素在某个区域内灰度的变化, 利用边缘邻近一阶或二阶方向导数变化规律, 用简单的方法检测边缘, 这种方法称为边缘检测局部算子法。边缘检测的基本思想是通过检测每个像元和其邻域的状态,以决定该像元是否位于一个物体的边界上。如果每一个像元位于一个物体的边界上,则其邻域像元灰度值的变化就比较大。假如可以应用某种算法检测出这种变化并进行量化表示,那么就可以确定物体的边界.

边缘对图像识别和分析十分有用,它能勾画出目标物体轮廓,使观察者一目了然,包含了丰富的信息(如方向、阶跃性质、形状等),是图像识别中抽取的重要属性。随着数学和人工智能的发展,出现了一些新的边缘检测方法,如数学形态法、小波变换法、神经网络法、模糊检测法、IFS边缘检测算子等等。而常用的方法有:基于一阶微分算子的Roberts算子、Sobel算子、Prewitt算子、Canny算子方法和基于二阶微分算子的拉Laplacian算子。下面将简要分析比较一下各种经典算子的优劣:

=============
Roberts边缘算子
=============

Roberts边缘算子是一种斜向偏差分的梯度计算方法,梯度的大小代表边缘的强度,梯度的方向与边缘走向垂直。

Roberts边缘算子定位精度高,在水平和垂直方向效果较好,但对噪声敏感。

=============
Sobel边缘算子
=============

Sobel算子是一组方向算子,从不同的方向检测边缘。索贝尔算子不是简单求平均再差分,而是加强了中心像素上下左右四个方向像素的权重,运算结果是一幅边缘图像。

Sobel算子通常对灰度渐变和噪声较多的图像处理得较好。

=============
Prewitt边缘算子
=============

Prewitt边缘算子是一种边缘样板算子,利用像素点上下、左右邻点灰度差,在边缘处达到极值检测边缘,对噪声具有平滑作用。由于边缘点像素的灰度值与其邻域点像素的灰度值有显著不同,在实际应用中通常采用微分算子和模板匹配方法检测图像的边缘.

Prewitt算子不仅能检测边缘点,而且能抑制噪声的影响,因此对灰度和噪声较多的图像处理得较好。

=============
Laplacian边缘算子
=============

拉普拉斯算子是一个二阶导数算子,而前面提到的三种算子均为一阶导数算子。该算子是一个与方向无关的各向同性(旋转轴对称)边缘检测算子。若只关心边缘点的位置而不顾其周围的实际灰度差时,一般选择该算子进行检测。

由于拉普拉斯算子为二阶差分,其方向信息丢失,常产生双像素,对噪声有双倍加强作用,因此它很少直接用于边缘检测。

鉴于此,Marr和Hildreth将高斯滤波和拉普拉斯边缘检测结合在一起,形成了 LoG(Laplacian of Gaussian)算子,即高斯-拉普拉斯算子,也常称为马尔算子(Marr-Hildreth)。该算子先用高斯算子对图像进行平滑,然后采用拉普拉斯算子根据二阶微分过零点来检测图像边缘.

高斯拉普拉斯算子是两种算子的结合,既具备高斯算子的平滑特点又具备拉普拉斯算子锐化特点。平滑和锐化,积分和微分是一对矛盾的两个侧面,统一在一起后就变成了最佳因子。因为图像中包含噪声,平滑和积分可以滤掉这些噪声,消除噪声后再进行边缘检测(锐化和微分)会得到较好的效果。

=============
Canny边缘算子
=============

坎尼算子是一类最优边缘检测算子,它在许多图像处理领域得到了广泛应用。Canny考核边缘检测算子的指标是:
(1)低误判率,即尽可能地把边缘点误认为是非边缘点;
(2)高定位精度,即准确地把边缘点定位在灰度变化最大的像素上;
(3)抑制虚假边缘.

Canny从这三项指标出发,推导出了最佳边缘检测算子-Canny边缘算子。该算子的基本思想是:先对处理的图像选择一定的Guass滤波器进行平滑滤波,抑制图像噪声;然后采用一种称之为“非极值抑制”(Nonmaxima Suppression)的技术,细化平滑后的图像梯度幅值矩阵,寻找图像中的可能边缘点;最后利用双门限检测通过双阈值递归寻找图像边缘点,实现边缘提取。

Canny方法也使用拉普拉斯算子,该方法与其它边缘检测方法的不同之处在于,它使用2种不同的阈值分别检测强边缘和弱边缘,并且仅当弱边缘与强边缘相连时才将弱边缘包含在输出图像中,因此这种方法较其它方法而言不容易被噪声“填充”,更容易检查出真正的弱边缘。

针对这些边缘检测算子,matlab提供了多个函数实现边缘检测.具体调用方法如下:
BW = edge(I,'sobel')
BW = edge(I,'sobel',thresh)
BW = edge(I,'sobel',thresh,direction)
[BW,thresh] = edge(I,'sobel',...)

BW = edge(I,'prewitt')
BW = edge(I,'prewitt',thresh)
BW = edge(I,'prewitt',thresh,direction)
[BW,thresh] = edge(I,'prewitt',...)

BW = edge(I,'roberts')
BW = edge(I,'roberts',thresh)
[BW,thresh] = edge(I,'roberts',...)

BW = edge(I,'log')
BW = edge(I,'log',thresh)
BW = edge(I,'log',thresh,sigma)
[BW,threshold] = edge(I,'log',...)

BW = edge(I,'zerocross',thresh,h)
[BW,thresh] = edge(I,'zerocross',...)

BW = edge(I,'canny')
BW = edge(I,'canny',thresh)
BW = edge(I,'canny',thresh,sigma)
[BW,threshold] = edge(I,'canny',...)

下面简单对比一下不同算子的特点;
LoG算子:对噪声很敏感,产生原因是采用的二阶求导,所以先用滤波去噪
方法之后,再用该算子提取边缘效果会比较好;
Robert算子:边缘漏检会比较多,原因是采用的一阶求导;
Canny算子:对噪声敏感,边缘提取会较多;
Sobel算子:精度不高需要门限控制对噪声敏感

No comments :

Post a Comment