基于VC的图像分割

图像分割与边缘检测技术概览

图像分割(Image Segmentation)是把图像分割成若干个特定的、具有独特性质的区域并提取出感兴趣的目标的技术和过程。在对图像的研究和应用中,人们往往仅对图像的某些部分感兴趣(目标或背景),他们一般对应图像中的特定的、具有独特性质的区域。为了分析和识别目标,需要将他们分割并提取出来。

图像分割是由图像处理转到图像分析的关键。一方面,它是目标图像表达的基础,对特征测量有重要的影响。另一方面,图像分割和分割的目标表达、特征提取和参数测量等将原始图像转化为数学表达形式,使得利用计算机进行图像分析和理解成为可能。本章主要介绍图像分割的基本概念和分割所用的主要方法。

1.1 图像分割的基本概念
1.1.1 图像分割定义

有关对于一幅图像进行分割的形式化表达有不同的说法,学界比较一致的思想是,通过借助于集合概念描述图像分割的特性来表述图像分割的定义:设一个集合表示一幅完整的目标图像,这样有关目标图像集合clip_image002[1]的分割,可以认为是将clip_image004[1]个符合下面几个条件的非空子集(子区域)clip_image006[1]进行划分的过程:

clip_image008[1];

②对所有的i和j,有i≠j, clip_image010[1]Φ;

③对i=1,2,…,N,有clip_image012[1](clip_image014[1])为真;

④对i≠j,clip_image012[2](clip_image017[1])为假;

⑤i=1,2, …,N, clip_image019[1]是连通的区域。

其中clip_image012[3](clip_image014[2])是对所有在集合中元素的逻辑谓词,Φ代表空集。

下面先对上述各个条件分别给予简略解释。条件①指出,对一幅目标图像,其分割所得的全部子集的并集应能包括原始图像中所有像素。条件②指出,对图像分割后所得的结果所表示的区域中,这些区域是互不重叠的。条件③指出,分割后所得的区域中,属于同一个区域中的各个像素应该具有共性。条件④指出,在分割结果中,不属于同一个区域中的各个像素不应具有共性。条件⑤指出,分割结果中同一个子区域内的像素应当是连通的,通过分割得到的各个图像区域其自身应该是一个连通组元。

1.2 图像分割中的边缘检测方法

边缘(Edge)是指图像局部亮度变化最显著的部分。一般来说,一幅图像的边缘主要存在于图像中的物体,物体及其背景,图像中不同区域,图像内的不同色彩间。图像分析和理解的的出发点往往就是边缘检测,对图像的边缘分析,是对目标图像进行分割、特征提取等分析手段的重要基础。由于边缘检测十分重要,因此边缘检测的方法学研究成为机器视觉研究领域最重要的理论点。一般说来,一幅图像中的边缘通常与图像亮度的一阶导数的不连续性有关。图像亮度的不连续可分为:

① 图像亮度阶跃不连续:即图像的亮度在其一阶导数不连续处2个端点处的像素灰度值有着非常明显的不同。

② 图像亮度线条不连续:即图像亮度在其一阶导数不连续处从一个像素灰度变化到另一个像素灰度,像素灰度的变化在间隔一个较小的区间后又返回到原来的像素灰度。

对一幅图像的边缘来说,边缘的图像亮度有可能同时具有阶跃性和线条性。由于边缘可能与场景中物体的重要特性对应,所以它是很重要的图像特征。比如,一个物体的轮廓通常产生阶跃边缘,因为物体的图像亮度不同于背景的图像亮度。

在讨论边缘算子之前,首先给出下列术语的定义。

① 边缘点:图像中亮度显著变化的点。

② 边缘段:边缘点坐标[i,j]及其方向θ的综合,边缘的方向是可以是梯度角。

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

④ 轮廓:边缘列表,或是一条边缘列表的曲线模型。

⑤ 边缘连接:从无序边缘表形成有序边缘表的过程。习惯上边缘的表示采用顺时针方向来排序。

⑥ 边缘跟踪:一个用来确定轮廓图像(指滤波后的图像)的搜索过程。

边缘点的坐标可以是边缘位置像素点的行、列整数标号,也可以在子像素分辨率水平上表示。边缘坐标可以在原始图像坐标系上表示,但大多数情况下是在边缘检测滤波器的是输出图像的坐标系上表示,因为滤波过程可能导致图像坐标平移或者缩放。边缘段可以用像素点尺寸大小的小线段定义,或用具有方向属性的一个点定义。在实际应用中,边缘点和边缘段都称为边缘。

边缘连接和边缘跟踪之间的区别在于:边缘连接是把边缘检测器产生的无序边缘集作为输出,输入一个有序边缘集;边缘跟踪则是将一幅图像作为输入,输出一个有序边缘集。另外,边缘检测使用局部信息来决定边缘,而边缘跟踪使用整个图像信息来决定一个像素点是不是边缘。

1.3 边缘检测算法

边缘检测算法有如下4个步骤。

(1) 滤波:边缘检测算法主要是基于图像强度的一阶和二阶导数,但导数的计算对噪声敏感,因此必须使用滤波器来改善与噪声有关的边缘检测器的功能。需要指出的是,大多数滤波器在降低噪声的同时也导致了边缘强度的损失,因此,增强边缘和降低噪声之间需要折中。

(2) 增强:增强边缘的基础是确定图像各点邻域强度的变化值。增强算法可以将邻域(或局部)强度值有显著变化的点突显出来。边缘增强一般是通过计算梯度幅值来完成的。

(3) 检测:在图像中有许多点的梯度幅值比较大,而这些点在特定的应用领域中并不都是边缘,所以应该用某些方法来确定哪些点是边缘带内。最简单的边缘检测判据是梯度幅值阈值判据。

(4) 定位:如果某一应用场合要求来确定边缘位置,则边缘的位置可在子像素分辨率上来估计,边缘的方位可以被估计出来。

在边缘检测算法中,前3个步骤用得十分普遍。这是因为大多数场合下,仅仅需要边缘检测器指出边缘出现在图像某一像素点的附近,而没必要指出边缘的精确位置或方向。在这本文主要讨论常用的几种边缘检测器,并调用其中的函数进行边缘检测得出效果图。

clip_image020[1]

1.3.1 Robert算子检测

Robert交叉算子为梯度幅值计算提供了一种简单的近似方法: clip_image022[1] (1-1)

用卷积模板表示方法,上式变成:

clip_image024[1] (1-2)

1

0

0

-1

其中 和 由下面的模板(1-3)计算:
 
 

0

-1

1

0

clip_image026[1]= clip_image028[1]=

在计算梯度时,计算空间同一位置(x,y)的真实偏导数非常重要。采用上述2×2邻域模板计算的梯度近似值clip_image026[2]clip_image030[1]并不位于同一位置,clip_image026[3]实际上是内差点clip_image032[1]处的近似梯度,clip_image030[2]实际上是内差点clip_image034[1]处的近似梯度。因此,Robert算子是该点连续梯度的近似值,而不是所预期点clip_image036[1]处的近似值。所以,通常用3×3邻域计算梯度值。

1.3.2 Sobel算子

正如前面所讲,采用3×3邻域可以避免在像素之间内插点上计算梯度。考虑下图中所示的点clip_image036[2]周围点的排列。

clip_image038[1]

clip_image040[1]

clip_image042[1]

clip_image044[1]

clip_image036[3]

clip_image046[1]

clip_image048[1]

clip_image050[1]

clip_image052[1]

Sobel算子也是一种梯度幅值:

clip_image054[1] (1-4)

其中的偏导数用下式计算:

clip_image056[1] (1-5)

clip_image058[1] (1-6)

其中常系数c=2.

和其他的梯度算子一样clip_image060[1]clip_image062[1]可分别用卷积模板表示为:

-1

0

1

-2

0

2

-1

0

1

1

2

1

0

0

0

-1

-2

-1

这一算子把重点放在接近于模板中心的像素点。Sobel算子是边缘检测中最常用的算子之一。

1.3.3 Prewitt算子

Prewitt与Sobel算子的方程完全一样,只是常系数c=1。所以clip_image060[2]clip_image062[2]可分别用卷积模板表示为:

-1

0

1

-1

0

1

-1

0

1

1

1

1

0

0

0

-1

-1

-1

下面用其中的Prewitt算子检测图像1-2(a),检测结果如图1-2(b)所示。程序清单见附录,以下用Prewitt算子检测边缘:

clip_image064[1] clip_image066[1]

(a)原始图像 (b)Prewitt算子检测的边缘

图1-2 边缘检测效果图

1.3.4 拉普拉斯(Laplacian)算子

前面讨论了计算一阶导数的边缘检测器,如果所求的一阶导数高于某一阈值,则可确定该点为边缘点,这样做会导致检测的边缘点太多。一种更好的方法就是求梯度局部最大值对应的点,并认定它们是边缘点,如图1-3所示。在图1-3中,若用阈值来进行边缘检测,则在a和b之间的所以点都被记为边缘点。但通过去除一阶导数中的非局部最大值,可以检测出更精确的边缘。一阶导数的局部最大值对应着二阶导数的零交叉点(Zero crossing)。这样,通过找图像强度的二阶导数的零交叉点就能找到精确边缘点。拉普拉斯(Laplacian)算子是常用的二阶导数算子。

clip_image068[1]

clip_image069[1] clip_image070[1] clip_image071[1] clip_image072[1] clip_image073[1]

clip_image075[1]

x

clip_image077[1]
 
 clip_image078[1]

图1-3 阈值边缘检测和二阶导数的零交叉边缘检测比较

平滑过的阶跃边缘二阶导数是一个在边缘点处过零的函数。拉普拉斯算子是二阶导数的二维等效式,函数clip_image080[1]的拉普拉斯算子公式为:

clip_image082[1] (1-7)

使用差分方程对x和y方向上的二阶偏导数近似如下:

clip_image084[1]clip_image086[1] (1-8)

上式近似是以点clip_image088[1]为中心的,以点clip_image036[4]为中心的近似为:

clip_image091[1] (1-9)

类似地有:

clip_image093[1] (1-10)

将(1-9)和(1-10)两式合并为一个算子,用近似的拉普拉斯算子模板表示:

clip_image095[1] (1-11)

当拉普拉斯输出出现过零点时就表明有边缘存在,但是要去除无意义的零点(灰度值为0的区域)。

1.3.5 坎尼(Canny)算子

检测阶跃边缘的基本思想是在图像中找出具有局部最大梯度幅值的像素点。检测阶跃边缘的大部分工作集中在寻找能够用于实际图像的梯度数字逼近。由于实际的图像经过了摄像机光学系统和电路系统(带宽限制)固有的低通滤波器的平滑,因此,图像中的阶跃边缘不是十分陡立。图像也受到摄像机噪声和场景中不希望的细节的干扰。图像梯度逼近必须满足两个要求:①逼近必须能够抑制噪声效应:②必须尽量精确地确定边缘的位置。抑制噪声和边缘精确定位是无法同时得到满足的,也就是说,边缘检测算法通过图像平滑算子去除了噪声,但却增加了边缘定位的不确定性;反过来,若提高边缘检测算子对边缘的敏感性,同时也提高了对噪声的敏感性。有一种先行算子可以在抗噪声干扰和精确定位之间选择一个最佳折衷方案,它就是高斯函数的一阶导数,对应于图像的高斯函数平滑和梯度计算。

在高斯噪声中,一个典型的边缘代表一个阶跃的强度变化。根据这个模型,好的边缘检测算子应该有3个指标:①低失误概率,即真正的边缘点尽可能少的丢失又要尽可能避免将非边缘点检测为边缘:②高位置精度,检测的边缘应尽可能接近真实的边缘;③对每一个边缘点有惟一的响应,得到单像素宽度的边缘。坎尼算子提出了边缘算子的如下3个准则。

(1) 信噪比准则

信噪比越大,提取的边缘质量越高。信噪比clip_image097[1]定义为:

clip_image099[1] (1-12)

其中G(x)代表边缘函数,h(x)代表宽度为W的滤波器的脉冲响应。

(2) 定位精确度准则

边缘定位精度L如下定义:

clip_image101[1] (1-13)

其中clip_image103[1]clip_image105[1]分别是clip_image107[1]clip_image109[1]的导数。L越大表明定位精度越高。

(3) 单边缘响应准则

为了保证单边缘只有一个响应,检测算子的脉冲响应导数的零交叉点平均距离clip_image111[1]应满足:

clip_image113[1] (1-14)

clip_image115[1]clip_image117[1]的二阶导数

以上述指标和准则为基础,利用泛函数求导的方法可导出坎尼边缘检测器是信噪比与定位之乘积的最优逼近算子,表达式近似于高斯函数的一阶导数。将坎尼3个准则相结合可以获得最优的检测算子。坎尼边缘检测的算法步骤如下:

(1) 用高斯滤波器平滑图像;

(2) 用一阶偏导的有限差分来计算梯度的幅值和方向;

(3) 对梯度幅值进行非极大值抑制;

(4) 用双阈值算法检测和连接边缘。

坎尼算子也可以用MATLAB中的edge函数来检测边缘:

BW1=edge(I,’canny’,thresh,sigma)

式中的thresh是边缘检测的阈值,sigma是高斯滤波器的σ值,默认为2。

用Canny算子检测图像1-2(a)的边缘,程序清单见附录,检测结果如图1-5所示。

clip_image119[1]

图1-4 Canny算子边缘检测

比较前面梯度算子、LoG算子和Canny算子,由图1-2(b)、1-3和1-4,可以发现坎尼算子的边缘检测结果最满意。

1.4 灰度阈值分割

阈值化分割算法是图像分割中应用数量最多的一类。简单地说,对灰度图像的阈值分割就是先确定一个处于图像灰度取值范围内的灰度阈值,然后将图像中各个像素的灰度值与这个阈值相比较,并根据比较的结果将对应的像素划分为(分割)为两类:像素灰度大于阈值的一类,像素灰度值小于阈值的为另一类,灰度值等于阈值的像素可以归如这两类之一。分割后的两类像素一般分属图像的两个不同区域,所以对像素根据阈值分类达到了区域分割的目的。由此可见,阈值分割算法主要有两个步骤:

(1) 确定需要分割的阈值;

(2) 将分割阈值与像素点的灰度值比较,以分割图像的像素。

以上步骤中,确定阈值是分割的关键,如果能确定一个合适的阈值就可准确地将图像分割开来。阈值确定后,将阈值与像素点的灰度值比较和像素分割可对像素并行地进行,分割的结果直接给出图像区域。

在利用取阈值方法来分割灰度图像时一般对图像的灰度分布有一定的假设,或者说是基于一定的图像模型。最常用的模型可描述如下:假设图像由具有单峰灰度分布的目标和背景组成,处于目标和背景内部相邻像素间的灰度值是高度相关的,但处于目标和背景交界处两边的像素在灰度值上有很大的差别。若一幅图像满足这些条件,它的灰度直方图基本上可看作是由分别对应于目标和背景的两个单峰直方图混合构成的。而且如果这两个分布大小(数量)接近且均值相距足够远,两部分的均方差也足够小,则直方图应为较明显的双峰。类似地,如果图像中有多个单峰灰度分布的目标,则直方图有可能表现为较明显的多峰。对这类图像常可用取阈值方法来较好地分割。

把图像中各种灰度的像素分成两个不同的类,需要确定一个阈值。如果要把图像中各种灰度的像素分成多个不同的类,那么需要选择一系列阈值以将每个像素分到合适的类别中去。如果只用一个阈值分割称为单阈值分割方法,如果用多个阈值分割称为多阈值分割方法。单阈值分割可以看作是多阈值分割的特例,许多单阈值分割算法可推广以进行多阈值分割。反之,有时候也可以将多阈值分割问题转化为一系列单阈值分割问题来解决。不管用任何方法选取阈值,一幅原始图像f(x,y)取单阈值T分割后的图像可定义为:

clip_image121[1] (1-15)

这样得到的clip_image123[1]是一幅二值图像。

在一般的多阈值情况下,取阈值分割后的图像可表示为:

clip_image125[1] (1-16)

其中clip_image127[1]是一系列分割阈值,k表示赋予分割后图像各区域不同的标号。

需要指出,无论是单阈值分割或多阈值分割,分割结果中都有可能出现不同区域具有相同标号或区域值的情况。这是因为取阈值分割时只考虑了像素本身的值,未考虑像素的空间位置。所以根据像素值划分到同一类的像素有可能分属于图像中不相连通的区域。这时候往往需要借助一些对场景的先验知识来进一步确定目标的区域。

当图像中有如下一些情况:有阴影、光照不均匀、各处的对比度不同、突发噪声、背景灰度变化等,如果只用一个固定的全局阈值对整幅图进行分割,则由于不能兼顾图像各处的情况而使分割效果受到影响。有一种解决方法是用与坐标相关的一组阈值(即阈值是坐标的函数)来对图像各部分分别进行分割。这种与坐标相关的阈值也叫动态阈值,这种取阈值分割方法也叫变化阈值法(也有称自适应阈值法的)。这类算法的时间复杂度和空间复杂度比较大,但抗噪声能力强,对一些用全局阈值法不易分割的图像(如目标和背景的灰度有梯度变化的图像)有较好的效果。这种动态阈值化方法在二值化文档图像分割时有较好的性能。

一种比较简单的动态阈值算法是对每个像素确定以它为中心的一个窗口,计算窗口内的最大值和最小值,再取它们的平均值作为该点的阈值,可以证明图像像素点灰度值和该阈值的差具有二阶导数的性质,所以取差的过零点就可以得到二值分割结果。

阈值分析的流程图如图1-5所示:

clip_image128[1]

1.5 区域分割

区域分割的基本思想是将具有相似性质的像素集合起来构成区域。具体先对每个需要分割的区域找一个种子像素作为生长的起点,然后将种子像素周围邻域中与种子像素有相同或相似性质的像素(根据某些事先确定的生长或相似准则来判定)合并到种子像素所在的区域中。将这些新像素当作新的种子像素继续进行上面的过程,直到再没有满足条件的像素可被包括进来。这样一个区域就长成了。

确定种子像素

clip_image129[1]

图1-7(a)给出需分割的图像,设已知有两个种子像素(标为深浅不同的灰色方块),先要进行区域生长。设这里采用的判断准则是:如果所考虑的像素与种子像素灰度差的绝对值小于某个门限T,则将该像素包括进种子像素所在区域。图1-7(b)给出了T=3时的区域生长结果,整幅图被较好地分成2个区域;图1-7(c)给出了T=1时的区域生长结果,有些像素无法判定;图1-7(d)给出T=6时的区域生长结果,整幅图都被分在一个区域中了。由此可见门限的选择是很重要的。

clip_image130[1]

从上面的示例可知,在实际因果能够区域生长方法时需要解决3个问题:

① 如何选择一组能正确代表所需区域的种子像素;

② 如何确定在生长过程中能将相邻像素包括进来的准则;

③ 如何确定生长终止的条件和规则。

第一个问题通常可以根据具体图像的特点来选取种子像素。例如,在红外图像检测技术中,通常目标的辐射都比较大,所以可以选择图像中最亮的像素作为种子像素。如果没有图像的先验知识,那么可以借助生长准则对像素进行相应的计算。如果计算结果可以看出聚类的情况,那么可以选择聚类中心作为种子像素。

第二个问题的解决不但依赖于具体问题的特征,还与图像的数据类型有关。如果图像是RGB彩色图像,那么如果使用单色准则就会影响分割结果。另外,还需要考虑像素间的连通性是否有时会出现无意义的分割结果。

一般生长过程在进行到再没有满足生长准则需要的像素时停止。但常用的基于灰度、纹理、彩色的准则大都基于图像中的局部性质,并没有充分考虑生长的“历史”。为增加区域生长的能力长需要考虑一些与尺寸、形状等图像和目标的全局性质有关的准则。在这种情况下需对分割结果建立一定的模型或辅以一定的先验知识。

区域生长的一个关键是选择合适的生长或相似准则,大部分区域生长准则使用图像的局部性质。生长准则可根据不同原则制定,而使用不同的生长准则会影响生长的过程。下面介绍基于灰度差准则的生长准则和方法。

区域生长方法将图像以像素为基本单位来进行操作,基于区域灰度差的方法主要有如下步骤:

(1) 对图像进行逐行扫描,找出尚没有归属的像素;

(2) 以该像素为中心检查它的邻域像素,即将邻域中的像素逐个与它相比较,如果灰度差小于预先确定的阈值,将它们合并;

(3) 以新合并的像素为中心,返回到步骤(2),检查新像素的邻域,直到区域不能进一步扩张;

返回到步骤(1),继续扫描直到不能发现没有归属的像素,则结束整个生长过程。

转载于:https://www.cnblogs.com/statestreet/archive/2012/03/31/2426928.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值