图象分割法
图像阈值化的目的是根据灰度划分像素集合,每个子集形成一个对应于真实场景的区域。每个区域都有一致的属性,但相邻区域没有。这种划分可以通过从灰度级中选择一个或多个阈值来实现。
基本原理是:通过设置不同的特征阈值,将图像像素分为若干类。
常用的特征包括:直接来自原始图像的灰度或彩色特征;从原始灰度或颜色值的变换中得到的特征。
设原图像为f(x,y),根据一定的准则f(x,y)求特征值t,将图像分为两部分。分割后的图像是:
如果b0=0(黑色),b1=1(白色),就是我们通常所说的图像二值化。
阈值分割方法实际上是从输入图像f到输出图像g的以下变换:
其中t是阈值,g(i,j)=1用于对象的图像元素,g(i,j)=0用于背景的图像元素。
可见,阈值分割算法的关键是确定阈值,如果能确定一个合适的阈值,就能准确地分割出图像。阈值确定后,将阈值与每个像素的灰度值逐一比较,可以对每个像素并行进行像素分割,分割结果直接给出图像面积。
阈值分割的优点是计算简单,运算效率高,速度快。阈值处理技术多种多样,包括全局阈值、自适应阈值、最优阈值等。
阈值处理技术参见:
区域分割是指根据相似性准则将图像划分成不同的区域,主要包括区域生长、区域分割合并和分水岭。
区域生长是一种连续区域分割的图像分割方法。区域增长是指从一个像素开始,按照一定的标准,逐渐增加相邻的像素。当某些条件满足时,区域增长终止。区域增长的质量取决于1。初始点(种子点)的选择。2.成长标准。3.终止条件。区域生长从一个或几个像素开始,最后得到整个区域,从而提取目标。
区域生长的基本思想是将具有相似属性的像素集合起来形成区域。具体来说,首先为每个要分割的区域寻找一个种子像素作为生长的起点,然后将种子像素周围邻域中与种子像素具有相同或相似属性的像素(根据某种预定的生长或相似性准则判断)合并到种子像素所在的区域中。将这些新像素作为新的种子像素继续上述过程,直到不再包括满足条件的像素。于是一个区域成长起来。
区域生长需要选择一组能够正确表示所需区域的种子像素,确定生长过程中的相似性准则,制定停止生长的条件或准则。相似性标准可以是灰度、颜色、纹理、梯度等特征。所选择的种子像素可以是单个像素或包含几个像素的小区域。大多数区域增长标准使用图像的局部属性。增长标准可以根据不同的原则制定,不同增长标准的使用会影响地区增长的进程。
图1是区域增长的一个例子。
区域生长是一种古老的图像分割方法,最早的区域生长图像分割方法是由Levine等人提出的。这种方法一般有两种方式。一种方式是在图像中待分割的目标物体中给定一个小块或种子点,然后在种子区域的基础上按照一定的规则将周围的像素点加入其中,最终将代表物体的所有像素点组合成一个区域;另一种是将图像分割成许多一致性强的小区域,比如区域内像素灰度值相同,然后按照一定的规则将小区域合并成大区域,达到图像分割的目的。典型的区域生长方法,如T. C. Pong提出的基于刻面模型的区域生长方法,有一个固有的缺点,即往往会导致过度分割,即图像被分割成过多的区域。
实现区域增长的步骤如下:
区域分裂与合并算法的基本思想是确定一个分裂与合并的准则,即区域特征一致性的度量。当图像中某个区域的特征不一致时,将该区域分割成四个相等的子区域,当相邻子区域满足一致性特征时,将它们合并成一个大区域,直到所有区域不再满足分割合并的条件。当不能进一步划分时,划分结束,然后它会寻找相邻区域是否有相似的特征,如果有,就合并相似的区域,最终实现划分的功能。在一定程度上,区域生长和区域分裂合并算法具有相同的效果,相互促进,相辅相成。区域分裂到极致就是分成单个像素点,然后按照一定的度量标准进行合并,在一定程度上可以看作是单个像素点的区域生长方法。区域生长比区域分裂合并法省去了分裂过程,区域分裂合并法可以在更大的相似区域基础上进行相似合并,而区域生长只能从单个像素开始。
一种重复拆分和聚合以满足约束的算法。
设R代表整个图像区域,选择一个谓词P,分割R的一种方法是反复将分割后的图像分成四个区域,直到P (Ri) = true对于任意区域Ri。这是从整体图像开始的。如果P(R)=FALSE,则图像被分成四个区域。如果p的值为假。对于任何一个区域,将四个区域中的每一个再分成四个区域,以此类推。这种特殊的分割技术最便于用所谓的四叉树(即每个非叶节点恰好有四个子树)的形式来表示,就像图10.42所示的树一样。注意,树的根对应于整个图像,每个节点对应于被分割的子部分。至此,只有R4被进一步细分。
如果仅使用拆分,则最后一个分区可能包含具有相同属性的相邻区域。这一缺陷可以通过在分裂的同时允许区域聚合来纠正。也就是说,只有当P(Rj∪Rk)=TRUE时,两个相邻区域Rj和Rk才能聚合。
前面的讨论可以总结为以下过程。在迭代操作的每一步,我们需要做:
你可以对上面提到的基本思想做一些改变。例如,一种可能的变化是最初将图像分割成一组图像块。然后如上所述进一步分割每个块,但是聚集操作受到这样一个事实的限制,即在开始时只能将四个块合并成一个组。这四个块是四叉树表示中节点的后代,并且都满足谓词p,当这种聚集不能再进行时,这个过程以最终的区域聚集满足步骤2而结束。在这种情况下,聚集区域的大小可能不同。这种方法的主要优点是在聚合的最后一步之前,分裂和聚合都使用相同的四叉树。
分水岭分割法是一种基于拓扑理论的数学形态学分割方法。其基本思想是将图像视为测地线拓扑地貌,图像中每个像素的灰度值代表该点的海拔高度。每个局部极小值及其影响区域称为集水盆地,集水盆地的边界形成流域。分水岭的概念和形成可以通过模拟浸泡过程来说明。在每个局部最小面上扎一个小洞,然后将整个模型慢慢浸入水中。随着浸没的加深,每个局部极小值的影响区域慢慢向外扩展,在两个集水池的交界处筑起一道堤坝,即形成一个分水岭。
分水岭的计算过程是一个迭代标注的过程。经典的流域计算方法是由L. Vincent提出的。在该算法中,分水岭计算分为两个步骤,一个是排序过程,另一个是洪泛过程。首先对每个像素的灰度进行由低到高的排序,然后在由低到高的淹没过程中,用FIFO结构判断并标记H阶高度上每个局部最小值的影响域。
分水岭变换是输入图像的分水岭图像,分水岭之间的边界点是分水岭。显然,分水岭表示输入图像的最大点。因此,为了得到图像的边缘信息,通常使用梯度图像作为输入图像,即,
分水岭算法对弱边缘有很好的反应,图像中的噪声和物体表面细微的灰度变化都会产生过度分割。但同时需要注意的是,分水岭算法对弱边缘有很好的响应,这是由闭合的连续边缘保证的。此外,分水岭算法得到的闭合集水盆地为分析图像的区域特征提供了可能。
为了消除分水岭算法造成的过分割,通常有两种处理方法。一种是利用先验知识去除不相关的边缘信息。二是修改梯度函数,使集水盆地只响应待测目标。
为了减少分水岭算法造成的过分割,通常需要修改梯度函数。一种简单的方法是对梯度图像进行阈值处理,以消除由灰度级的微小变化引起的过分割。也就是
程序可以采用以下方法:用一个阈值对梯度图像进行限制,消除由于灰度值微小变化造成的过度分割,得到合适的区域,然后将这些区域边缘点的灰度由低到高排序,再实现由低到高的淹没过程,用Sobel算子计算梯度图像。在对梯度图像进行阈值分割时,合适阈值的选择对最终分割图像有很大影响,因此阈值的选择是图像分割效果的一个关键。缺点:实际图像可能包含弱边缘,灰度变化的数值差异不是特别明显。如果阈值太大,这些弱边缘可能会被消除。
参考文章:
图像分割的一个重要方式是通过边缘检测,即检测灰度或结构发生突变的地方,表明一个区域的结束也是另一个区域开始的地方。这种不连续性叫做边。不同的图像灰度不同,边界处有明显的边缘。该特征可用于分割图像。
图像边缘像素的灰度值是不连续的,这可以通过求导来检测。对于阶跃边缘,其位置对应于一阶导数的极值点和二阶导数的过零点。因此,微分算子常用于边缘检测。常用的一阶微分算子有Roberts算子、Prewitt算子和Sobel算子,二阶微分算子有Laplace算子和Kirsh算子。实际中,各种微分算子往往用小面积模板来表示,微分运算是通过模板和图像的卷积来实现的。这些算子对噪声敏感,只适用于噪声较小、复杂度较低的图像。
由于边缘和噪声都是灰度不连续的,都是频域中的高频成分,直接微分运算很难克服噪声的影响。因此,在用微分算子进行边缘检测之前,必须对图像进行平滑处理。LoG算子和Canny算子是具有平滑功能的二阶和一阶微分算子,边缘检测效果较好。
在边缘检测算法中,前三个步骤非常常见。这是因为在大多数情况下,边缘检测器只需要指出边缘出现在图像的像素附近,而不需要指出边缘的确切位置或方向。边缘检测误差通常是指边缘误分类的误差,即伪边缘被识别为边缘并保留,而真边缘被识别为伪边缘并去除。边缘估计误差由概率统计模型描述。我们区分边缘检测误差和边缘估计误差,因为它们的计算方法完全不同,它们的误差也不同。
Roberts算子:边缘定位准确,但对噪声敏感。适用于边缘明显、噪声较少的图像分割。Roberts边缘检测算子是一种利用局部差分算子来寻找边缘的算子。经过图像处理后,罗伯特算子的边缘不是很光滑。经过分析,由于罗伯特算子通常在图像边缘附近的区域产生较宽的响应,上述算子检测到的边缘图像往往需要细化,边缘定位的精度不是很高。
Prewitt算子:可以压制噪音。噪声抑制的原理是像素平均,但是像素平均相当于图像的低通滤波,所以Prewitt算子在边缘定位上不如Roberts算子。
Sobel算子:Sobel算子和Prewitt算子都是加权平均,但是Sobel算子认为相邻像素对当前像素的影响是不等价的,所以不同距离的像素权重不同,对算子结果的影响也不同。一般来说,距离越远,影响越小。
各向同性Sobel算子:加权平均算子,权重与邻点与中心点的距离成反比,在不同方向检测边缘时梯度幅度相同,俗称各向同性。
Sobel算子是边缘检测中常用的模板。有两个Sobel算子,一个是检测水平边缘;另一个是检测垂直平坦边缘。Sobel算子的另一种形式是各向同性Sobel(各向同性Sobel)算子,有两种算子,一种用于检测水平边缘,另一种用于检测垂直平坦边缘。与普通的Sobel算子相比,各向同性的Sobel算子具有更精确的位置加权系数,在检测不同方向的边缘时梯度幅度一致。由于建筑物图像的特殊性,我们可以发现在处理这类图像的轮廓时,不需要计算梯度方向,所以程序没有给出各向同性Sobel算子的处理方法。
在1971中,R.Kirsch[34]提出了一种新的可以检测边缘方向的Kirsch算子方法:使用八个模板来确定梯度幅度和梯度方向。
图像中的每个点都与8个掩模进行卷积,每个掩模对某个边缘方向的响应最大。所有八个方向上的最大值被用作边缘幅度图像的输出。最大响应掩码的序列号构成了边缘方向的编码。
Kirsch算子的梯度幅度值由以下公式表示:
不同检测算子的比较;
参考文章:
文章引自《木夜迹》。
编辑Lornatang
校准Lornatang