图像边缘检测技术的研究和比较

  • 格式:doc
  • 大小:613.50 KB
  • 文档页数:15

图像边缘检测技术的研究和比较摘要边缘描绘对象的边界,因此边缘提取是图像处理的基础而重要的问题。

图像边缘检测大大地减少了图像数据量,过滤了无用的信息,而保留了图像重要属性结构。

由于边缘检测是对象检测的第一步,因此对边缘检测算法的正确理解是问题的关键。

本文对各种各样的图像边缘检测技术进行了比较分析。

通过编写MATLAB 70程序,显示在几乎所有情景下Canny边缘检测算法比其他所有的算法的执行效果都好。

对处理后图像的评估显示:在有噪声的情况下,LoG算子,Robert算子,Prewitt算子,Sobel算子各自都表现出色。

观察Canny边缘检测算法在计算上比LoG算子,Sobel算子、Prewitt算子和Robert 算子代价高。

关键字:边缘检测,噪声,数字图像处理1 介绍边缘检测定义为识别和定位图像突变间断性的过程。

间断性是描述像素灰度急剧变化的描述对象边界的地方。

经典的边缘检测方法包括用算子对图像进行卷积,该算子对图像梯度敏感,当在平坦区域时,返回值为0。

现在设计出大量的边缘检测算子,它们各自针对某种特定边缘敏感。

在选择边缘检测算子时,要根据边缘取向、噪声环境和边缘结构等的变化而变。

算子的几何形状决定了边缘最敏感的特征方向。

可以选选择合适的算子来寻找水平,垂直或者对角边缘。

由于噪声和边缘信息在高频部分,对有噪声的图像,边缘检测是比较困难的。

而尝试减少噪声,又导致边缘模糊和变形。

用于有噪声图像的算子通常具有更大的尺寸,因此它能用足够的数据进行均衡,以削弱噪声像元,这个结果使检测出的边缘定位精度降低。

不是所有的边缘包含灰度的阶跃变化。

例如折射或弱焦点可能导致对象的边界灰度逐渐变化。

这些情况下,选择的算子要对这种渐变敏感。

因此,就出现了检测为伪边缘、真实的边缘的漏检、边缘定位精度、高计算时间的问题和由噪声产生的问题等。

所以,本文诣在对各种边缘检测技术进行比较和分析,并且指出各自适用的情况。

这里有许多方法进行边缘检测。

然而,这些检测方法大多可以分为两类:基于梯度的边缘检测:梯度法通过寻找图像一阶导数极大值和极小值来检测边缘。

基于Laplacian边缘检测:Laplacian算法是搜索图像二阶导数的零交叉点来寻找边缘。

边缘具有一维的倾斜形状,并且计算图像导数可能突出它的位置。

假设我们有以下由灰度跃迁显示边缘的信号:如果我们采用这个信号的梯度,我们得到如下图:明显地,原始的信号中位于的边缘中心的地方显示出了一个最大值。

这种找出边缘的方法属于边缘检测滤波中的“梯度滤波”,包括Sobel算子。

如果梯度的值超出某阈值,该像素点称为边缘点。

如上所述,边缘比周围具有更大的像素灰度值。

因此,一旦设置阈值,就用该阈值与梯度值相比较,检测出任何超出阈值的边缘。

此外,当一阶导数为最大值时,二阶导数为零。

由此可知,我们可以用定位二阶导数为零的方法来找到边缘的位置,这个方法叫作Laplacian,信号的二阶导数如下所示:在本篇文章,我们对最常用的基于梯度和Laplacian边缘检测技术的分析和可视化比较。

第2章是对问题的定义。

第3章是对各种边缘检测技术的研究和分析。

第4章通过开发MATLAB 70程序对各种边缘检测技术进行可视化比较。

第5章讨论各种边缘检测技术的优缺点。

第6章对MATLAB 70程序实验中分析和可视化比较说得出的结论进行讨论。

2 问题定义这里的问题有伪边缘检测的、真实的边缘漏检,导致线变窄或变粗和由噪声引起的问题等。

在本文我们对最常用的基于梯度和Laplacian边缘检测技术的的检测精度、漏检、导致线变窄或变粗的问题和由噪声引起的问题等作出了分析和可视化比较,并用MATLAB 70开发了这个软件。

3 边缘检测技术3.1 Sobel算子如图1所示,这个算子包括一对3×3卷积核。

其中一个核是另一个核转动90°的情况。

图1 :sobel算子的模板这些核为最大地反应垂直和水平相对应的像素网格而设计,每个核对应着二个垂直方向之一的边缘。

这种核可以独立地应用于输入图像,测量各自方向的梯度成分(称这些为Gx和Gy)。

然后组合这些梯度来找到在每个点的绝对幅值和那个梯度的方向[3]。

梯度幅值由下式的出:通常,近似幅值可以这样计算:这种方法加快了计算的速度。

影响空间梯度的是边缘(与像素网格相关)的方向角,可由下式得出:3.2 Robert交叉算子Robert交叉算子执行起来简单,计算速度快,是对图像的二维空间梯度测量。

在每个输出点的像素值代表了对输入图像在该点空间梯度估计的绝对幅值。

如图2所示,该算子包括一对2×2卷积核,其中一个是将另一个简单的旋转90°得到[4]。

这与Sobel 算子非常类似。

图2 Robert算子模板。

这些核为最大地反应边缘45°相对应的像素网格而设计,每个核对应着二个垂直方向之一的边缘。

这种核可以独立地应用于输入图像,测量各自方向的梯度成分(称这些为Gx和Gy)。

然后组合这些梯度来找到在每个点的绝对幅值和那个梯度的方向[3]。

梯度幅值由下式的出:通常,近似幅值可以这样计算:这种方法加快了计算的速度。

影响空间梯度的是边缘(与像素网格相关)的方向角,可由下式得出:3.3 Prewitt算子Prewitt算子[5]类似于Sobel算子用于检测图像的垂直和水平的边缘。

图3 Prewitt梯度边缘检测器模板3.4 Laplacian-高斯算子Laplacian是图像空间二阶导数的二维同向性测量法。

Laplacian突出图像灰度快速变化的地区,因此常常被用于边缘检测。

Laplacian经常用于图像处理,首先得对图像进行一些近似高斯平滑滤波的方法进行平滑处理,降低对噪声的敏感度。

该算子通常采取输入一个单灰度级图像,而输出另一个灰度级图像。

Laplacian L (x,y)可由图像像素灰度值I(x,y)得到:因为输入图像是离散像元,我们必须找到一个接近Laplacian定义的二阶导数的离散卷积核[5]。

三个常用的小核如图4所示。

图4通常使用接近Laplacian的离散滤波器。

由于这些核接近图像的二阶导数的测量,他们对噪声是非常敏感的。

为了抗噪,在应用Laplacian滤波器之前通常用高斯平滑图像。

图像预处理减少高频噪声成分,应在差分处理之前进行。

实际上,因为卷积操作是关联的,我们可以首先把Laplacian过滤器与高斯平滑滤波器进行卷积,然后用这种混合滤波器对图像进行卷积以达到需要的结果。

这样做有两个好处:因为高斯和Laplacian核通常都小于图像,通常这个方法的算术运算量少。

LoG[6]核可以是预先计算好的,在图像处理时只需运用一次卷积就可以实现了。

二维LoG函数[7]以零为中心,以高斯标准偏差σ的形式表示:在图5显示了图5 二维Laplacian-高斯函数,x和y轴以标准偏差(σ)标记接近这个函数的离散核(高斯σ=14)在图6显示。

图6近似σ=14 LoG函数的离散模板注意,当高斯核越来越小时,LoG核就与简单的Laplacian核一样了,如图4。

这是因为使用一个很窄的高斯(σ<05像元)去光滑离散的网格是没有效果的。

因此,对于离散像素网格,简单的Laplacian可以替代高斯狭窄的LoG。

3.5 Canny边缘检测算法Canny边缘检测算法是大家公认最优的边缘探测器。

在他开始工作时候Canny的目的是提高大多已存在的边缘探测器的效果。

他是非常成功地实现了他的目标,他的想法和方法可以在他的论文中找到,“用于边缘检测的计算方法”[11]。

在他的论文中,他遵守了一系列标准来改进当前边缘检测方法。

排在第一位也是最明显的标准是低误差率。

重要的是,不应该丢失图像的边缘,也不会对非边缘响应。

第二个标准是边缘定位准确。

换句话说,如实际边缘探测器找到的边缘像素点之间的距离最小。

第三个标准是对单边缘的只有一次响应。

采用这个标准是因为前两个标准从根本上不足够完全地消除对边缘的多次响应。

凭这些标准,Canny边缘探测器首先对图像平滑以消除噪声。

后来发现图像梯度能突出高阶空间导数区域。

然后,该算法沿这些区域进行检测,同时抑制不是最大值的所有像素点。

通过滞后作用梯度列阵得到了进一步减少的。

滞后作用用于沿剩余的未被抑制的像素点进行跟踪。

滞后作用使用双阈值,如果幅度在第一阈值之下,则设为零(做一个非边缘)。

如果幅度在高阈值之上,则它被做边缘。

如果幅度在2阈值之间,除非有从这个像素点到其梯度在T2之上的另一个像素点之间是一条道路,否则它也设置为零。

步骤1:我们必须按照一系列的步骤来使用Canny边缘探测器算法。

第一步在定位和检测边缘之前应滤除原始图像的所有噪声。

因为高斯过滤器可以用一个简单的模板来计算,这个模板专门在Canny中使用。

只要设计好了适当的模板,就可以用标准卷积方法进行高斯平滑。

通常,卷积模板小于实际图像。

因此,模板在图像中滑动,每次操作方形像素块。

高斯模板的宽度越大,探测器对噪声的敏感度越低。

当增加高斯模板宽度时,边缘检测定位的错误也稍有增加。

步骤2:对图像进行平滑和去噪后,下一个步骤是通过图像的梯度找到边缘的强度。

Sobel算子是在图像的二维空间进行梯度测量。

然后,在每点可以找到近似绝对梯度的幅度(边缘强度)。

Sobel算子[3]用一对3x3卷积模板,一个估算x方向(列)的梯度,另一个估算y方向(行)的梯度。

它们如下所示:用如下公式来近似梯度幅度或者边缘强度:步骤3:-用x和y方向的梯度来计算边缘的方向。

然而,当sum(X)等于零时,就会产生错误,因此必须用代码限制任何时候出现这种情况。

每当在x方向的梯度等于零,边缘方向必须等于90度或0度,这取决于梯度在y方向的值,如果GY有值为零,边缘方向为0度。

否则边缘方向为90度。

计算边缘方向的公式为:Theta = invtan (Gy/Gx)步骤4:一旦知道边缘方向,下一步就是把该边缘方向与图像追踪方向联系起来。

如果5x5图像的像素如下排列:通过看像素点“a”可以看到,当描述像素点的周围像素时,只有四个可能的方向,0度(在水平方向),45度(沿正对角线),90度(在垂直的方向),或者135度(沿负对角线)。

根据本判断这四个方向中最接近的方向来确定边缘方向(即,如果发现方向角度3度,则让它为零度)。

由此用一个半圆,把它划分它成5个地区。

因此,属于黄色区域(0到225和1575到180的范围)的所有边缘方向被置为0度。

在绿色区域(225到67的范围)的所有边缘方向被置为45度。

在蓝色区域(675到1125的范围)的所有边缘方向被置为90度。

最后,属于红色区域(1125到1575程度)的所有边缘方向被置为135度。

步骤 5 :知道边缘方向后,现在进行非最大值抑制。

非最大值抑制用于沿在边缘方向进行追踪和压制不是边缘的所有像素点(设为0)。