基于分水岭算法的彩色细胞图像分割
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于分水岭算法的彩色细胞图像分割
摘要
随着影像医学的发展,通过对细胞涂片影像的分析,从而对细胞影像进行区分和识别成为重要的研究课题。
细胞图像分割是细胞图像分析和识别的重要步骤。
图像分割是将图像中具有特殊含义的不同区域区分开来,是图像处理的关键步骤。
分割后的子区域互不交叉,每一个区域满足特定性质的一致性。
人体细胞种类繁多、形态多样且图像质量也很不相同,而分析应用中对细胞图像分割的质量却要求较高,所以细胞图像的自动分割极为重要且困难很大。
彩色图像与灰度图像相比,信息量更为丰富,而且颜色的描述方法也,较多。
很多经典算法只能对二值图像或灰度图像进行运算。
为此,关于彩色细胞图像的分割研究成为一个非常活跃的研究领域。
本文针对彩色细胞图像经过染色处理的特点,提出了一种彩色细胞图像的分割方法。
以快速分水蛉算法为主要分割算法,为了较好地抑制彩色细胞图像背景噪声,选择更符合人类视觉感知的HSI颜色空间,
结合自动阈值和色度提出去除图像背景的方法。
同时,使用中值滤波和均匀化处理,有效地克服了分水岭算法的过分割现象。
针对细胞图像特点改进了区域合并算法。
得到了较准确的分割结果。
本文首先概括介绍了图像分割的意义及发展现状,概述了当前主要的
图像分割算法。
其次,介绍了彩色图像颜色空间和快速分水岭算法的基本思想及实现方法。
最后列出了实验流程和实验结果并进行了讨论。
关键词:图像分割,HSI颜色空间,分水岭
二.分水岭算法
本章从对分水岭算法的定义出发,对分水岭算法的发展过程中的不同实现方法进行比较,阐明快速分水岭算法的优越特性及实现方法。
(一)分水岭算法的定义
分水岭分割的最初算法是针对地形数字高程模型提出的.目前分水岭算法在图像分割领域正得到广泛应用.分水岭算法的定义121J
对一幅二维灰度图像,,Jr的定义域为Dr cZ2,,取离散灰度值【0,N】,将该值视为对应像素点的高度,Ⅳ为一正整数。
用G表示相应的数字格网(以四邻域为例)o图像I中点p和g之间一条长度为z的路程≯为由点,Pl,⋯Pt-l,P1)组成的(斗1)元组,有
Po=P,Pl=q,且Vf∈【l,,】,(Pf-I,Pi)∈G (3-2)将路径P的长度标识为^纠,点p的邻域集标识为: (p):%Q)=p’∈Z2,(DP’)∈回(3‘3)图像f在高度矗的一个极小区膨(minimum)定义为由高度值为h的点组成的一连通区域,从该区域肘中的一点出发到达任一高度低于h的像素点。
与极小区M相关联的集水盆地∞砂定义为D。
中的一个点集,其所包含P的特点为:假设一滴水落到该点P上,则该水滴由于重力作用将沿一条最快速下降路径下滑并最终到达极小区^^在集水
盆地的基础上,分水岭的直观定义‘捌为:分割不同集水盆地的线称为分水岭。
以上定义虽然直观,但不方便用算法实现。
因此,Vincent与Soille给出了另一种算法定义(algorithmic definition)123}如下:将图像,中各点的梯度值视为该点的高度,在图像,的每个极小区M
的底部之间钻上连通小孔。
然后,向图像形成的地表面中缓慢注水,水面将逐渐浸没地面,从而形成一个个小湖——集水盆地.从高度最低的极小区出发j水面将渐渐浸没图像,中不同的集水盆地。
在此过
程中,如果来自两个不同集水盆地的水将要发生汇合,则在汇合处建一水坝。
在浸没过程的最后,每个集水盆地最终都会被水坝包围。
所有水坝的集合就对应图像的分承岭(算法定义)。
(二)常用的几种分水岭算法
Beucher和Lantu巧oul最先提出了基于“浸没”模型的分水岭算
法[241,在已知区域最小的前提下,在每个区域最小值影响的区域内,通过形态学闭运算,逐步扩展所影响的区域范围,最后得到分水岭线。
在计算的过程中,如果遇到这种情况,当同一区域呈环形时,就可能产生错误的分水岭线A.并且这种算法的效率是非常低的,因为在每
一次二值闭运算的过程中,都必须将所有的像素扫描一次.也可以通过灰度骨架来计算分水岭嘲.基于这一点,Beucher证明了分水岭从
一定程度上来说就是灰度骨架中的闭合曲线‘261。
灰度图像的骨架可以通过形态学细化运算来计算。
在形态学细化的过程中,可以很容易的将骨架内不闭合的曲线从图像中去掉。
整个过程,包括骨架提取和接下来对曲线的修剪的过程需要经过多次迭代,在每~步迭代过程中,和前一种算法类似需要对每个像素进行扫描,所以这种算法的效率基于分水岭算法的彩色细胞图像分割研究也是
很低的. FriedLander在文献【271中提出了一种有序算法【281。
在数学形态学领域,有序算法被广泛的应用【29】.这类算法按照预先
规定的顺序对图像进行扫描,在扫描的过程中每个像素的新的值可能会对下一个像素的新的值的计算产生影响。
整个算法必须有一个初始化的步骤,生成“主要蓄水盆地”。
拥有区域最小值M的主要蓄水盆地是一些像素的集合,从像素M开始,经过一个非降的浸没过程可以到达这些像素。
图像中的任何一个像素都至少属于一个主要蓄水盆地,而两个或两个以上的主要蓄水盆地重叠的区域就称为“分水岭区域”,这些区域组成了“受限蓄水盆地”,最后,可以通过SKIZ(skeleton by influence zones)得到分水岭线。
整个过程是相当快的.因为每一个步骤都是有序进行的。
另外.在算法中对每个蓄水盆地都进行了标记编号,线不是非常精确。
图3-2基于有向箭头的有序算法Beucher还提出了一种基于有向箭头的有序算法00。
算法有三个主要步骤:首先,找到图像中的区域最小值像素点(这些像素的邻接像素的狄度值都不小于当前像素的灰
度值).然后,对于每一对像素细,p2),如果Pl点灰度值严格大于p2,那么用一个箭头从PI指向P2.这样就可以用一种简洁的方式表示像素的邻接情况。
最后,对区域最小值标记编号,并根据第二步中的箭头将这个标记值进行扩展。
这种算法比前两种算法计算的速度快,但计算的结果也不是十分的精确。
上面提到的算法有以下一些特点:第一,在处理的过程中,它们都连续多次对图像进行完整的扫描。
这就意味着在每一步过程中,所有的像素都必须被扫描一次,这是非常费时的.第二,这些算法都没有一个固定的迭代次数,每一次迭代都必须对图像进行完整的扫描,
而迭代的次数可能很大。
所以,在目前的计算机中,这些算法的效率是非常低的。
针对上述算法的缺点, vincent和soille提出了一种高效精确的分水岭算法阅。
它需要解决两个问题:
①如何随机访问图像中任意像素。
②如何直接访问给定像素的邻接像素。
vincent和Soille提出的算法是基于“浸没”模型的,整个算法可以分解为两个步骤。
为了能够直接访问某一灰度值的像素,在第一步中包含一个初始排序的过程,将所有的像素按照它们的灰度值的升序进行排列。
在第二步中,通过在每个灰度级别上的宽度优先扫描可以快速的计算出所影响到的像素,这种特殊的扫描是通过像素队列来实现的,这是一个先进先出的数据结构。
许多形态学交换都可以通过应用先进先出队列来提高算法的效率.执行步骤如下;
步骤1首先计算图像中各点的梯度,然后扫描整幅图像得到各梯度的概率密度。
各像素点在排序数组中的位置由梯度分布的累积概率与该像素点的梯度值计算得到。
计算出所有像素点的摊序位置并将其存入排序数组。
在排序后的数组中,梯度值越低的点存放的位置越靠前。
步骤2像素点按梯度值从低到高的顺序处理,相同梯度值的点作为一个梯度层级.步骤3处理一个梯度层级h。
当前层,首先将该层中所有邻域已被标识的点加入到一个先进先出队列中去。
步骤4若先进先出队列非空,则弹出队列的首元素作为当前处理像素。
顺序处理当前像素所有高度为hc。
的相邻点。
如果邻点已被标识,则根据该邻点标识刷新当
前像素点的标识.如果邻点尚未标识,则将该邻点加入到基于分水
岭算法的彩色细胞图像分割研究先进先出队列中去,循环执行本步直至队列空为止。
步骤5再一次扫描当前梯度层级的像素点,检查是否
仍有未标识点。
此时的未标识点意味着一个新的极小区.因此,如果发现未标识点,则将当前区域标识值加l,并将该值赋为未标识点的
标识值。
然后,从该点出发执行与步骤4相同的浸没步骤,标识该极小区
的所有像素点.步骤6返回步骤5处理下一梯度层级,直至将所有梯度层级都处理完毕为止.上述算法中,每个像素点平均被扫描5遍(排序过程中两遍,浸没过程三遍),因此其执行时间为线性.在使用普通
的串行计算时,上述算法比几个经典算法快几百倍吲,但对某些应用而言,其计算开销仍然过大.
(三)分水岭快速分割算法
2005年邓子建等在vincent和soille提出的“浸没”模式的算法基础上提出改进基于直观分水岭定义的图像分割算法。
l、基本描述
快速算法与vineent-soille算法一样,也包括排序与浸没两部分。
两算法的区别在于浸没方式。
具体而言,在每一梯度层级(本文将梯
度值相等的像素点称为一个梯度层级)内部,vineent-soille算法是
使用一先进先出队列由内向外逐步扩展现有的集水盆地。
而快速算法的做法则是按各像素点间的空间关系顺序扫描各像
素点(自左上至右下),并在扫描过程中确定每一点是属于现有的集水盆地还是属于新的集水盆地。
判断的基本依据是该点是否有已标识邻点,若有则判为与邻点属同一集水盆地,否则判为新的极小区并赋给一新的区域标识。
有两个问题:
(1)怎样快速实现按空间位置顺序对各梯度层级中的像素点进行扫描?
(2)这样顺序扫描判断的结果是否正确?
第一个问题在vincent-mille算法的排序步骤中可以自然地得到解决。
vincent-soille算法的排序是一种地址排序算法。
在该算法中,像素点在排序数组中的位置由该点梯度以及所有参与排序点的梯度
分布计算得到。
如果在计算各点排序位置时将各点的空间位置考虑进去,则可以使得排序数组中元素的排列满足一定的空间关系(梯度值相同的像素点,空间位置位于左上的点排在右下的点之前.实际上,在真正计算排序位置时各点坐标并不需要显式地参与计算。
我们只需按由上至下,从左至右的顺序依次计算图像中各点的排序位置,并将它们挨个存放至排序数组中就可以了.使用这种方法的排序计算量与vincent-soille算法的捧序计算量完全相同.新算法的空间顺序扫描通过依次处理捧序数组各元素即可实现。
特||序图像块捧序后的数组X Y梯废
(1,3.6)
(2,3.6)
(3,3.6)
(3,I.7)
(2.2.7)
(3。
2,7)
《1.t.9)
(2,I,9)
(1。
2.9)
对于第二个问题,存在三种可能的情况(如图3.4所示)。
第一种情况,待扫描点所属集水盆地位于待扫描点A的左上方.由于A被扫描之前A 与初始集水盆地之间的所有点都已被扫描并被正确标识,所以扫描至A点时,A的左邻点与上邻点亦己正确标识.自然地,A也将被正确标识.第二种情况。
待扫描点位于其所属集水盆地的左上方。
由于A将被首先扫描,此时A的邻点未被正确标识,因此A将错误地被标识为一极小区.图3.4(c)的情况与图3-4(b)类似。
在该图中,由于新扫描线的行首(点c)与已正确标识区域不连续!因此将错误地生成一新的极小区.扫描到达点A时,点A将被划归这一错误的极小区。
圈3.4当前扫描点与已标记集水盆地的三中关系基于分水岭算法的彩色细胞图像分割研究
2、错误极小区检测纠正和快速算法
为了避免生成上述错误极小区,我们在分水岭分割过程中进行错误极小区检测纠正。
如前所述,对当前扫描点的基本处理准则是:若该点的邻点已被标识,则将该点判为邻点所属盆地。
但这一准则有时会造成混乱,即:如果当前扫描点的多个邻点被标识为属于不同盆地时,应该将当前点赋为哪一个邻点所属的盆地?出现这种情况的一个可能原因是当前点属于分水岭,则其两侧的点自然属于不同的集水盆地。
除此之外,还存在另一种可能。
以图3.4(c)为例,考察扫描进行情况,当扫描进行至C点时,由于C点与已正确标识的任何一点都不相邻,因此该点被错判为属于新的极小区2。
继续扫描至点B,此时B 点左侧邻点已被标识为2,但B的上侧邻点却被标识为1。
很明显,B应该属于集水盆地l,而集水盆地2是一错识标识的新极小区,该极小区应该划归集水盆地l。
对图3_4(b)也一样,当扫描至B点时,该点的左侧邻点标识与右侧邻点标识不一样,其左侧邻点的标识的是一错误的极小区。
由此可知,如果出现某点的邻点分属不同集水盆地的情况,则该点的邻点有可能是被划归到了错误生成的极小区。
根据这一点可以检测并发现错误极小区并将错误生成的极小区合并到正确的集水盆地中去以纠正错误。
当然,我们必须要区分正确的分水岭与错误生成的极小区。
下面是新算法处理一个梯度层级内像素点(梯度值-h。
)的具体过程以及错误极小区的确认机制:首先,记录当前的集水盆地标识值labck。
(每发现一个新的极小区,将该值加1,因此第i个发现的极小区将被标记为f)。
该值是所有
极小区高度小于11c。
的集水盆地与极小区大于h。
的集水盆地的分界标志。
也就是说,如果某集水盆地含有梯度值小于hc。
的点,则该集水盆地的标识值必定小于等于label晌.反之,如果某集水盆地所
有点的梯度值都大于h。
,则该集水盆地的标识值必定要大于labelmi.。
其次,对每个被扫描的当前点P。
依次检查它的4个邻点pnd.若pilci 尚未被标识,则转向下一邻点。
若P赫已被标识而Pc。
尚未标识,则将标识1佛力赋给P。
若P。
c和P。
都已标,则有可能发现了一错误的极小区.此时需作进一步的判断:若l口ci)与1口曲都小于l曲cl嘲,则表明它们所属的集水盆地包含低于11c。
的点,因此它们不是在当前梯度层级新生成的极小区,当前点为一分水岭.若l口11ei)与l假0任意一个大于labe。
则表示其所对应的是在本梯度层级扫描时错误生成的极小区,应该合并到标识号更小的邻点所属集水盆地中去。
为了减小运算量,我们并非每次检测到错误极小区就刷新相关
点的标识,而是使用一个合并数组来记录该合并事件.数组的第f个
元素值为矗表示标识号为i的集水盆地己被合并到标识号为.,的集
水盆地。
待所有梯度层级都扫描完毕,按照合并数组,对所有点所属的集水盆地刷新一次即可得到最后的结果。
四,小结
综上所述,在vincent.soille算法中,每个像素点在浸没步骤
中将被扫描三次,第一次扫描是为了对当前梯度层的点作标识,这一步在快速算法中是不需要的,第二次和第三次扫描为像素点的浸没,浸没过程中每个像素点都要进出队列,这是耗时的操作.相比之下,快速算法包含两次扫描,第一次扫描检查各点的四个邻点。
第二次扫描找各点所属的真正集水盆地标识。
所以选择快速分水岭算法,可以提高运算速度。
五,参考文献
1,章敏晋,中国图像工程,1999,中国图像图形学报,2000,5A(5),359—373,2,
2,林开颜,彩色图像分割方法综述,中国图像图形学报2005 10(1),卜10
3,韩恩奇,王曹,图像分割的阅值法综述,系统工程与电子技术2002,7.46,91-94(102)
4,章敏晋,图像处理和分析教程,人民邮电出版社,2009,11(1)。