基于数学形态学的图像处理二
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第五章二值图像的形态学分割算法
5.1概述
图像分割是计算机视觉领域中的一项关键技术,是实现自动图像分析时首先需要完成的操作。
它是根据图像的某些特征或特征集合的相似性准则,对图像进行分类,将图像平面划分成一系列“有意义”的区域。
分类结果的好坏直接影响到后面的目标检测、特征提取和目标识别等工作,因此分割的方法和精确程度是至关重要的。
5.1 .1图像分割的数学描述
图像分割是将图像分成若干个区域,每一个区域内部有相同或者相似的特性,而相邻区域的特性不同,下面给出图像分割的确切数学描述[26]:
设(x,y)为数字图像象素的空间坐标,G={0,1,…,k}为象素的灰度层次。
一幅数字化图像I由M×M个象素组成,M={1,2,…,n},(x,y)∈M×M,于是图像函数可以定义为一种映射f: M×M→G,图像在点(x,y)处的强度记为f(x,y)。
根据灰度和纹理结构的特征,可将图像中的区域B定义为I的相互连通的均匀的子集。
设F为定义在B区域上一致性测量的逻辑准则,则有
定义H:B→
~
D为B的一致性估计的函数,
~
D是已经定义的D的子区域。
图像分割就是
将图像阵列I分割成若干个邻近且互不交迭的非空的子集B1、B2…、B m,即B i应满足下面的条件:
5.1.2图像分割的一般方法[27]
图像分割大致可以分为基于边缘检测的方法和基于区域的方法。
基于边缘检测的方法使用局部窗口操作,检测出通过给定点的边缘或边界,这些边界把图像分成不同的区域。
基于区域的方法按某种准则人为地把图像分为若干规则块,以后按属性一致的原则,反复分开属性不一致的图像块,合并具有一致属性的相邻图像块,直至形成一张区域图。
在实际应用中,从不同的理论角度提出了许多方法,这些方法主要可划分为三种类型:闽值型,边缘检测型和区域跟踪型。
(l)灰度阈值分割法
灰度阈值分割法是一种简单的基于区域的技术。
这种方法是先确定一个处于图像灰度取值范围之中的灰度阈值,然后将图像中各个象素的灰度值都与这个阈值相比较,并根据比较
结果将对应的象素划分为两类:象素的灰度值大于阈值的为一类,象素的灰度值小于阈值的为另一类。
这两类象素一般分属于图像中的两类区域,所以对象素根据闭值分类达到了区域分割的目的。
由以上步骤中可知,确定阈值是分割的关键。
阈值一般可写成如下形式[1]:
T=T[x,y,P(X,y),q(x,y)] (5 .1)
其中p(x,y)代表象素点(x,y)处的灰度值,q(x,y)代表该点邻域的局部特性。
如果p(x,y)>T,则点(x,y)记作物体点,反之则记作背景点。
根据对T的不同限制,可得到三种不同类型的阈值,即
全局阈值:T=T[p(x,y)] (只与全图各象素的本身性质有关)
局部阈值:T=T[p(x,y),q(x,y)] (与区域内各象素的值,相邻象素值的关系等有关)
动态阈值:T=T[x,y,p(x,y),q(x,y)] (与象素空间坐标、该点象素性质、该点的局部邻域特征有关)
阈值的选择通常是利用直方图。
基于直方图分析的门限分割法最直观、应用最普遍。
这种方法对于直方图具有明显的双峰图像,可获得很好的分割效果。
在图像内容不太复杂、灰度分布较集中的情况下,往往采用最简单的全局阈值,并不考虑图像中点的位置和其邻域性质。
但现实生活中大多数自然景象的图像直方图变化丰富,很少表现为明显的双峰。
对于这类图像,一种方法是将图像分成若干小块即子图像,并对每块设定局部阈值。
另一种方法是根据空间信息和灰度信息值采用动态阈值。
(2)边缘检测分割法
边缘检测分割法是通过检测出不同区域边界来进行分割的。
边缘总是以强度突变的形式出现,可以定义为图像局部特性的不连续性,如灰度的突变、纹理结构的突变等。
边缘常常意味着一个区域的终结和另一个区域的开始。
图像的边缘包含了物体形状的重要信息,它不仅在分析图像时大幅度地减少了要处理的信息量,而且还保护了目标的边界结构。
因此,边缘检测可以看作是处理许多复杂问题的关键。
对于边缘的检测常常借助于空域微分算子进行。
通过将其模板与图像卷积完成。
两个具有不同灰度值的相邻区域之间总存在灰度边缘。
灰度边缘是灰度值不连续(或突变)的结果,这种不连续常可利用求一阶和二阶导数方便的检测到。
己有的局部技术边缘检测方法,主要有一次微分(Sobel算子、Roberts算子等)、二次微分(拉普拉斯算子等)和模板操作(Prewitt算子、Kirsch算子、Robinson算子等)等。
这些边缘检测器对边缘灰度值过渡比较尖锐且噪声较小等不太复杂的图像,大多数提取算法均可以取得较好的效果。
但对于边缘复杂、采光不均匀的图像来说,则效果不太理想。
主要表现为边缘模糊、边缘非单象素宽、弱边缘丢失和整体边缘的不连续等方面。
在噪声较大的情况下常用的边缘检测算法,如Marr算子,递归滤波器和Canny算子等都是先对图像进行适当的平滑,抑制噪声,然后求导数、或先对图像进行局部拟合,然后再用拟合的光滑函数的导数来代替直接的数值导数。
Canny算子较为简单,而且考虑了梯度方向,效果比较好。
(3)区域跟踪分割法
上面所讲述的两种方法感兴趣的是象素值的差别,而区域跟踪是寻找具有相似性的象素群,它们对应某种实体世界的平面或物体,它的方法是从某一象素出发按照属性一致性原则(一致性可以是灰度级、彩色、组织、梯度或其他特性)逐步地增加象素,即区域增长。
对由这些象素组成的区域使用某种均匀测度函数测试其均匀性,若为真,则继续扩大区域,直到均匀测度为假。
常用的方法有区域分割、区域生长法和区域分裂合并法。
区域生长法是从满足检测准则的点开始,从各个方向开始“生长”物体。
因为物体同一区域中象素点的灰度级相差很小,可假设1为一个已满足检测准则的一小块物体,那么开始检查它所有邻近点的灰度值,如果满足检测准则,则将该邻点并入上述小块中。
当邻近点被
接受后“生长”成新的1,再用得到的新1重复上面的过程,直到没有可接受的邻近点可并入为止。
区域分裂合并方法首先将图像分割为初始的区域,然后分裂合并这些区域,逐步改善区域分割的性能,直到最后将图像分割为最少的均匀区域为止。
下面给出一种用金字塔形四叉树数据结构指导下的分割方法[2]:
设R代表整个正方形区域,P代表检验准则。
(l)四叉树分裂
对任意一个区域R i,如果P(R i)=FALSE,将其分裂成不重叠的四等分。
(2)四叉树合并
对相邻的两个区域R i和R j(它们可以大小不同,即不在同一层),如果条件P(R i∪R j)=TRUE 满足,就将它们合并起来。
(3)如果进一步的分裂和合并都不可能,则结束。
区域生长算法更多的把灰度或纹理的同一性与空间的位置联系在一起,因此能得到满意的效果。
目前,图像块的初始划分常常或是固定的或是人为规定的。
实际上,每幅图像应当存在一个适合它的初始块的最佳划分,因此有必要自适应地确定图像块的初始划分。
对于图像块的一致性度量,现有文献中常常利用灰度或灰度统计特性的方法。
用灰度的方法比较简单但效果不很好,用灰度统计特性的方法效果比较好,但计算量大,影响处理速度,因此也有必要探求更有效的度量图像块属性一致性的方法。
5.2区域分水岭算法
数学形态学是研究区域整体形状特征的数学工具,它的基本思想是用一定形状的结构元素去度量和提取图像中的对应形状以达到对图像分析和识别的目的,涉及到微分几何、拓扑逻辑、集合论以及自动机等领域的知识,利用膨胀、腐蚀、开启和闭合四个基本运算进行推导和组合。
分水岭法是一种基于拓扑理论发展起来的数学形态学分割方法,其基本思想是把图像看作测地学上的拓扑地貌,图像中的每一点的象素值表示该点的海拔高度,图像中的每一个局部极小值及其影响区域被称为集水盆,而集水盆的边界则为分水岭。
分水岭算法比较好地解决了边缘的连续性和区域的标注问题,为进行图像区域特征分析提供了可能。
分水岭的形成可以通过模拟浸入过程实现,在图像每一个局部极小值表面刺穿一小孔,然后把整个图像模型慢慢浸入水中,随着浸入的加深,每一个局部极小值的影响域慢慢向外扩散,在两个集水盆汇合的地方,将产生一峰顶线,即为分水岭。
显然,如果输入的是梯度图像,分水岭表示的就是图像的边缘信息。
区域分水岭算法是一种典型的分割图像中相接触目标的形态学方法,它的基本步骤是连续腐蚀二值图像。
这个算法包括三个步骤[l8]:
(l)产生距离图
距离图是一种其中各个象素的灰度与该象素到图像或目标边界成比例的图。
考虑一幅包含目标和背景的二值图,如将较大的值赋予接近目标内部的象素(与距离成反比)就可得到一幅距离图。
为了用形态学方法产生距离图,可迭代地腐蚀二值图,在每次腐蚀后将所有剩下的象素值加1。
图5.1给出距离图计算的一个实例,图5.1(a)是一幅二值图,图5.1(b)是结构元素。
图5.1距离图计算示例
用图5.1(b)腐蚀图5.1(a),将第一次腐蚀所剩下的元素标记为2就得到图5.1(c),继续腐蚀,将第二次腐蚀所剩下的元素标记为3就得到图5.1(d)。
如果继续腐蚀,将除去所有象素,所以腐蚀停止。
此时综合前面各次腐蚀的结果并对每个象素保留最大值就得到如图5.1(e)的距离图。
利用形态学的术语,迭代腐蚀可写为:
A、=AΘkB,k=1,...,.,m (5.2)
其中,{m:A m≠Φ},这里m是非空图的最大个数。
A k的下标代表迭代腐蚀中的不同迭代次数。
从拓扑的角度来看,把距离图当作山脉,则其中的最大值对应山峰而最小值对应山谷。
这些山谷就是分水岭。
将各山峰周围的分水岭连起来可得到对目标的分割。
(2)计算最终腐蚀了的集合
在条件X(X可看作是一个限定集合)的情况下,用B膨胀A记为“A⊕B;X”,并定义为:
A⊕B;X=(A⊕B)∩X (5.3)
反复条件膨胀是上述操作的扩展并记为A⊕{B};X(这里{B}代表迭代地用B膨胀A直到不再有变化):
A⊕{B};X=[[[(A⊕B)∩X]⊕④B]∩X] ⊕B…(5.4)
最终腐蚀(也称极限腐蚀)的意思是指反复腐蚀一个目标直到它消失,此时保留这之前最后一步的结果(这个结果也称为目标的种子)。
令A k=AΘKB,其中B是单位圆,kB是半径为k的圆。
最终腐蚀Y i可定义为A i中元素,如果l>k,则A k在A l中消失。
最终腐蚀的第一步是:
U k=(A K+1⊕{B}); A k (5 .5)
最终腐蚀的第二步是从A的腐蚀中减去上述膨胀结果。
Y k二A k-U k (5 .6) 如果图像中有多个目标,可求它们各自Y k的并集就得到最终腐蚀了的目标集合A。
换句话说,最终腐蚀图像是:
其中m是腐蚀的次数。
从5.1(e)中可看出种子就是图中的山峰区域。
这些山峰区域很容易被认证出来,因为它们周围都被较小距离的象素所包围。
(3)从种子开始生长回原始尺寸但不使各区域相连
这里要使用条件粗化,条件粗化算法由初始化和迭代计算两步构成,分别见下两式:
其中最后得到的W1是分水岭运算的结果,m对应前面第一步腐蚀的次数,T(k),k=l,2,…12,代表图6.2中的12个结构元素。
图5.2用于分水岭区域分割的结构元素
图5.3给出了一个结合图5.1的例子。
首先将图5.1中的最后两个种子结合(如图5.3(a)所示),接下来考虑使用击中击不中变换。
利用图5.2的第一个结构元素,将其中心与包围种子的第一个象素,例如W n重合。
为生长这个种子,结构元素中的各象素必须准确地与其下的种子区域匹配。
换句话说,在结构元素中象素为1的地方,种子区象素也必须为1,在结构元素为0的地方,种子区域也必须为0。
结构元素中没有指定的象素可以是1或者0,它所定对应的种子区象素也可以是1或者是0。
如果以上匹配条件都满足,就给对应结构元素中心象素的W n赋一个1。
这样种子区域在尺寸上就增加了一个象素。
依次使用图5.2的12个结构元素,每个结构元素都有零象素,需要将结构元素的零象素与W n匹配以避免生长的区域相连。
图5.3(b)给出对图5.3(a)进行一次粗化的结果。
在对12个结构元素T(k)都使用后,求W n和一幅图像的交集。
这样所得的结果是将一个象素宽的区域加在种子周围,除非另一个种子区域与它非常接近。
图5.3(c)给出求图53(b)和图5.1(c)交集的结果。
图5.3种子生长过程
上述生长和求并集步骤再次对12个结构元素重复进行,直到没有变化为止。
由各对应步骤得到的最终腐蚀了的集合要加起来,条件是生长限定在对应腐蚀步骤中,为方便以上工作可利用距离图。
对应的腐蚀步骤可根据距离图中的灰度值确定。
由上可知,区域分水岭算法虽然能够很好的保持目标的原始形状,在目标间加入的分界比较清晰和逻辑。
不过区域分水岭算法计算量较大,需要对每个最终腐蚀集用12个结构元素进行粗化,另外还要跟踪所有腐蚀了的步骤。
因此,现有的分水岭算法的主要缺陷还不能很好地解决耗时问题。
形态学对图像分割具有优异的特性,将使其在未来的图像分割中起主导作用,将形态学的方法与一些节约时间的措施结合起来,是图像分割的一种趋势。
5.3改进方法分析及实验[28-30]
为了有效地实现区域生长型分水岭算法,需要有一种巧妙的图象扫描模式,如果使用传统的光栅扫描方式,则算法实现的效率就不高,因为大量的象素只是被检查,但不能判定它们是否属于一个特定的区域,实现算法需要对整幅图象进行多次的扫描。
在上面阐述分水岭算法的概念时,我们意识到浸没模拟依赖于以下的双重排序:首先,海拔低的点比海拔高的点先被淹没;其次,在同一海拔高度,靠近己被淹没点的点先被淹没。
本文提出一种采用分级队列结构的图象扫描方式。
这种扫描方式只检查能被判定属于某一确定区域的象素,极大地提高了算法的实现效率。
分级队列就是一组具有不同优先级的队列,每个队列都是先进先出(FIFO)的数据结构。
队列的操作单元是象素的位置,在具体实现时就是指向象素的指针。
这种结构提供了一种双重排序的表示法:象素放入哪一级队列取决于该象素所属的优先级,对同一优先级队列中的象素按照FIFO的规则进行处理。
首先从队列中取出的象素是最先放入最高优先级队列的那个象素。
接着,再按FIFO的次序逐个取出最高优先级队列中的所有其它象素。
最后,如果最高优先级已空,则再依次取出非空的次优先级队列中的象素。
使用分级队列实现区域生长型分水岭算法包括以下两个步骤:(l)队列初始化。
将对应于区域内部的所有己标号种子象素的位置放入最高优先级队列。
因为已标号的种子象素是肯定属于某一确定区域的,所以其优先级是最高的。
(2)区域生长过程。
从队列中取出一个象素,如果取出的当前象素仍未属于某一确定区域,则由于象素放入队列过程的规则,至少有一个区域与当前象素相邻。
于是,通过计算当前象素与每一个相邻区域之间的相似度(对于二值图象,非黑即白),把当前象素归并到其中一个最合适的区域。
接着,检查当前象素的邻点象素是否己被归并到某一确定区域。
如果没有,则将该邻点象素放入相应优先级的队列中,其优先级由当前象素值与该邻点象素值之差来决定,差值越小,优先级越高。
由此可见,放入队列的任何一个象素至少有一个相邻的区域,这就是为什么都能对从队列中取出的象素进行判决的原因。
这种方法在对图象处理的过程中,将各象素排放在一组具有不同优先级的队列中,而在利用种子生长的过程中,没有采用12个结构元素进行粗化,而是将其与所有存放在队列中的象素利用相似度进行合并,大大简化了步骤,能有效的分割物体,确定物体的边缘。
如图5.4所示。
(a)原始图象(b)分割结果
图5 .4
5.3小结
本章首先介绍了图象分割的原理,然后对区域分水岭算法进行了深入的分析,传统区域分水岭算法计算量较大,主要缺陷是不能很好地解决耗时问题。
采用一组队列来记录图象处理过程中不同优先级的象素,最后在种子生长过程中,根据相似度来进行区域合并,大大降低了分割时间。