3.2 基于边缘检测的图像分割方法

一幅图像中存在的不连续性称之为边缘。边缘检测是图像分割中的一项重要举措。不同图像的灰度是不同的,它们的边界处一般都有明显的边缘,据此特征可以对图像进行分割。图像分割技术以边缘检测为手段来尝试检测不同区域的边缘并由此开展图像分割,边缘检测方法得以实现的主要假设条件之一是在不同区域之间的边缘上灰度值的变化往往比较大。边缘检测方法的基本思路是按照一定的规则来检测图像的边缘点,并将边缘点连接成轮廓以构成分割区域。该方法的难点在于,如果提高检测精度,则噪声产生的伪边缘就会导致非常多不合常理的轮廓出现;而如果提高抗噪强度,就会带来轮廓漏检和位置偏差等问题。所以,如何保持检测精度与抗噪性之间的平衡是基于边缘检测的图像分割方法的难点。

3.2.1 边缘检测概述

边缘是图像中最基本的特征之一,是区域属性突变的地方,包括大量的信息,是图像信息的最大集中地。边缘主要存在于目标、背景、不同的颜色和区域中。边缘检测是图像分析的第一步,在计算机视觉系统的运用过程中起着关键作用,是计算机视觉研究中最为活跃的领域之一。本节主要阐述边缘检测的基本概念,并对一些常用的边缘检测算子加以介绍。

一定数量点亮度变化的地方称之为边缘,因此,边缘检测就是亮度变化的导数。如有一维数组(4,5,4,1133,112,114,123,25,26,24),我们可以观察到在第3与第4个点之间、第7与第8个点之间有边界,但我们很难确定存在于两个相邻点之间的亮度变化达到多大才算边界的阈值,除非场景中的物体非常简单并且照明条件能够得到很好的控制。

图像边缘与图像亮度或者其导数的不连续性有关。图像亮度不连续可分为线条不连续和步骤不连续。线条不连续是指图像亮度从一个值变化到另一个,保持较小的行程并返回原始值。步骤不连续是图像亮度像素的灰度值与不连续部分的像素灰度值之间的差异。在实际操作中,大多数传感元件都具有低频的特性,故图像的亮度一般不会瞬间发生变化,因此,线条和步骤图像是非常罕见的。

图像局部亮度变化最明显的部分是图像的边缘区域,即在一个非常小的缓冲区中的灰度值会戏剧性地变为另一个灰度值,边缘可以有两个特征。接下来,我们给出一些常用的与边缘相关的术语的定义:

(1)边缘:两个具有不同灰度的均匀图像区域之间的边界,即边界反映局部的灰度变化。局部边缘是图像中局部灰度级以单调的方式做很快变化的小区域。

(2)边缘点:图像中亮度变化尤其显著的点。

(3)边缘段:边缘点坐标(ij)及其方向θ的总和,边缘方向可以是梯度角。

(4)边缘方向:与边缘法线方向垂直,与目标边界的切线方向一致。

(5)边缘法线方向:在某点灰度变化最显著的方向,与边缘方向垂直。

(6)边缘位置:边缘所在的坐标位置。

(7)边缘强度:沿边缘法线方向对图像局部变化强度的量度。

(8)边缘检测器:从图像中抽取边缘点或边缘段集合的算法。

(9)轮廓:一条边缘列表的曲线模型。

(10)边缘连接:采用顺时针方向从无序边缘表形成有序边缘表的过程。

(11)边缘跟踪:搜索轮廓图像的过程。

边缘点坐标可以是边缘位置像素的行、列整数标签。边缘坐标虽然可以在原始图像的坐标系中表示,但在图像坐标系输出的边缘检测滤波器中也有更多的表示方法,因为滤波过程很有可能会导致平移或变焦图像的坐标。边缘部分可以由像素的一小段或带有方向属性的点集来定义。在实践中,边缘和边缘段被统称为边缘。边缘检测器生成的边缘集通常有真边缘集和假边缘集之分,真边缘集对应的是场景的边缘,而假边缘集对应的却不是场景的边缘。假边缘集被称为假阳性,而缺失的边缘集则被称为假阴性。

有序边缘集的输入称为边缘连接,边缘检测器产生的是一些无序边缘集。边缘跟踪输入的是图像,输出的是一个有序的边缘集。另外,可以利用局部的信息来确定边缘,边缘跟踪则是使用整幅图像来确定像素是否为边缘。

常用的边缘检测方法有两类:搜索和零交叉。在搜索边缘检测方法的基础上,利用梯度模型计算边缘强度,然后利用梯度法计算边界的局部方向,并在此方向上找到局部梯度模型的最大值。在零交叉法的基础上,通常使用拉普拉斯算子或非线性微分方程的零交点来求由图像获得的二阶导数的零交点。边缘检测的预处理操作通常采用高斯滤波方法。

3.2.2 梯度边缘检测算法

叶片边缘含有丰富的形态信息,在计算整体的形状特征时,利用叶片边缘比利用叶片本身的计算量要小一些,尤其在大批量叶片样本待处理的情况下,更能明显节约时间,因此需要进一步提取叶片的边缘形态信息。

一般来说,对检测出的边缘有以下4项要求:(1)边缘的定位精度要高,不发生边缘漂移现象;(2)不同尺度的边缘应有良好的响应,并尽量减少漏检;(3)应对噪声不敏感,不致因噪声造成虚假检测;(4)检测灵敏度受边缘方向的影响小。为了精确检测叶片的边缘,本书选用边缘跟踪法,算法思路是跟踪二值化后的图像中目标叶片每个像素点的8个方向的邻域。假设构成叶片像素的灰度值为1,背景灰度值为0,则对某灰度值为1的像素点做如下判决:如果当前像素点在8个方向上的邻域点有0像素点,则该像素点为边缘点;否则,该像素点不是边缘点。当图像中的像素点全部搜索完毕后,即可提取出完整的叶片边缘。

目标、背景和区域之间存在边缘,这是图像分割的最重要依据。由于边缘是位置的标志,对灰度变化不敏感,因此边缘也是图像匹配的一个重要特征。边缘算子大致可以分为三大类,即梯度算子、方向模板算子和拟合算子。梯度算子是数学上梯度算子的近似形式,而方向模板算子是对不同方向使用不同的模板来检测,至于拟合算子则是对图像的局部灰度值和边缘的参数模型进行拟合。常用的边缘检测算子有Roberts算子、Sobel算子、Prewitt算子、Laplacian算子、Canny算子和LoG算子(邓继忠,2005)。

3.2.2.1 梯度边缘检测算法基础

目前,已经发表的边缘检测方法通常用边界强度来度量,并且一些检测方法依赖于图像梯度的计算,采用不同种类的滤波器来估算x-方向和y-方向的梯度。

许多边缘检测操作基于数字点亮度的一阶导数,可得到原始亮度数据的梯度。利用这些信息,我们可以搜索图像亮度梯度的峰值。

也有一些边缘检测操作可以通过亮度的二阶导数来得到,即亮度梯度的变化率。在连续变化的情况下,梯度的局部最大值是通过二阶导数的零点检测得到的。二阶导数的峰值检测是用合适的尺度来表示边界线的检测。如上所述,边缘将是双重边缘,可以看到边界两边的亮度梯度。如果图像中有边缘,则在亮度梯度中可以看到剧烈的变化。为了做到这一点,可以通过在图像亮度的二阶导数中发现零值的方式来找到这些边缘。通常,梯度边缘检测算法共包含4个基本步骤:

(1)滤波。边缘检测算法可以根据一阶导数和图像强度的二阶导数进行计算,但是由于导数对噪声非常敏感,因此需要使用滤波器来提高边缘的探测功能。在很多情况下,过滤器虽然降低了噪声,但同时也失去了边缘强度,因此很有必要平衡消除噪声和提高边缘强度之间的关系。

(2)增强。边缘增强通常是通过计算渐变值来完成的。边缘增强的基础是确定每个图像的邻域强度值。增强算法可以突出显示区域强度值发生显著变化的点。

(3)检测。最简单的边缘检测准则是设置梯度振幅的阈值。虽然图像中梯度幅值有较大的点,但在某些应用领域,这些点不是边,因此我们应该设法来确定边缘区域的点。

(4)定位。边缘的位置可以用亚像素分辨率来估计,边缘的方位可以通过估计来确定。

在边缘检测算法中,滤波、增强和检测这3个步骤非常普遍。这是因为在许多情况下,没有必要指出边缘的确切位置或方向,只表示边缘出现在图像中的像素附近即可。

3.2.2.2 Robert算子

Robert算子是最简单的算子之一,它是利用局部差分方法来计算的边缘算子。检测边缘通过对角线方向相邻的两个像素之间差值的梯度来进行。Roberts Edge运算符是一个2×2模板,是与对角线相邻的两个像素之差。从图像处理的实际效果来看,该算法对边缘的定位较准,对噪声敏感。

3.2.2.3 Sobel算子

Sobel算子的计算思路是先平均后求差分,因此它有抑制噪声的能力,但因为该算子涉及3×3的邻域,故在检测阶跃边缘时得到的边缘宽度至少为两个像素。采用3×3邻域可以避免在像素之间的内插点上计算其梯度。Sobel算子是边缘检测中最常用的算子之一。

3.2.2.4 Prewitt算子

该算子包含横向及纵向两组3×3的矩阵,通过与图像作平面卷积,可得出横向和纵向的亮度差分近似值。Prewitt算子同样可以抑制噪声,若窗口放大些,则抑制噪声的效果会更明显。Prewitt与Sobel算子的方程完全一样,只是常系数c=1。

3.2.2.5 Laplacian算子

Laplacian算子是目前常用的二阶导数算子。在一阶导数的边缘检测器中设置阈值,如果一阶导数高于阈值,则此点被确定为边缘点。上述方法的缺点是产生的边缘点太多。现在我们可以通过去除一阶导数的非局部最大值来更精确地检测边缘点。因为二阶导数的零交叉与一阶导数的局部最大值对应。这样一来,要想找到精确的边缘点,只要找图像强度的二阶导数的零交叉点即可,这样就更容易找到精确的边缘点。因此,求梯度局部最大值对应点的Laplacian算子比求一阶导数的效果更优。

3.2.2.6 Canny算子

Canny算子是判断边缘提取方法性能指标的一项图像边缘检测的方法,也是目前图像处理领域的标准方法之一。Canny图像边缘检测法必须满足有效抑制噪声和精确确定边缘的位置两个条件,去除噪声可以通过图像平滑算子来达到目的,但该方法增加了边缘定位的不确定性。也可以采用双阈值法从候选边缘点中检测最终的边缘,先选取高阈值和低阈值,然后扫描图像,再检测候选边缘图像中标记为候选边缘点的任一像素点。若像素点的梯度幅值大于高阈值,则该点一定是边缘点;若该点梯度幅值小于低阈值,则该点一定不是边缘点。对于梯度幅值处于2个阈值之间的像素点,则将其看作疑似边缘点,需进一步依据边缘的连通性对其进行判断:若该像素点的邻接像素中有边缘点,则认为该点也为边缘点;否则,该点为非边缘点。

3.2.2.7 LoG算子

Laplacian算子和梯度算子对图像中的噪声非常敏感,因此在边缘检测之前往往对噪声开展滤波操作。Mar和Hildreth结合上述两种检测方法,提出了一项新的对数算法,即LoG算子。LoG算子的基本特征有3个:(1)平滑滤波器采用高斯滤波器;(2)采用二维拉普拉斯函数的二阶导数;(3)用线性插值法估计子像素分辨率水平上的边缘位置。高斯滤波器不仅能平滑图像,还能消除噪声、滤除较小的结构和单点噪声,再利用拉普拉斯函数求二阶逼近,然后选取一阶导数大于某一阈值的零交点作为边缘点。

LoG算子对图像fxy)通过卷积运算开展边缘检测,可以得到hxy),即有

LoG算子边缘检测也通过高斯滤波器对图像进行平滑,以便去除噪声。在上一节中,图像的平滑举措导致其边缘模糊。高斯平滑元素使图像的边缘和其他尖锐的不连续部分模糊,模糊度取决于σ的值。σ值越大,噪声的滤波效果越好,但重要边缘信息的丢失会影响边缘检测器的性能。如果我们采取一个小的σ值,则它可能是平滑和不完整的,将留下太多的噪声。大的σ值滤波器可以平滑相邻的两个边,它们可以被连接在一起,从而可以检测到边缘。因此,在不知道对象的大小和位置的情况下,非常难准确地确定滤波器的值。大的σ值过滤器会产生较粗的边缘,而小σ值的过滤器则能精确定位。