APP下载

基于OpenCV的分水岭分割算法的研究及应用

2012-08-08王云吉

长春师范大学学报 2012年12期
关键词:集水分水岭盆地

燕 杨 1,2,王云吉 2

(1.长春师范学院计算机科学与技术学院,吉林长春 130032;2.吉林大学通信工程学院,吉林长春 130022)

1 分水岭算法简介

分水岭算法是基于形态学的图像分割方法,其分割特点为定位精确和分割图像边缘准确,在图像分割领域得到了广泛的应用。在许多实际情况下,我们要分割图像,但无法从背景图像中获得有用信息。分水岭算法在这方面往往是有效的,该算法可以将图像中的边缘转化为“山脉”,将均匀区域转化为“山谷”以便分隔目标。分水岭算法先计算灰度图像的梯度,让亮度值低的点(山谷)、山脊对应的边缘(山头)同时形成,然后从指定点开始持续“灌注”盆地,直到这些区域链接在一起。这种方法产生的标记可以把各个区域合并到一起,合并后的区域又通过“聚集”的方式进行分割,好像图像被“填充”起来一样。与指示点相连的盆地就为指示点“所拥有”,从而得到被分割成相应的标记区域的图像。分水岭算法允许用户来标记目标某个部分为目标,或背景的某个部分为背景。用户也可以通过画一条简单的线,告知分水岭算法把这些点组合起来。分水岭算法就会通过“拥有”边沿定义的山谷来分割图像。

分水岭算法定位精确且分割细致,对微弱的物体边缘响应比较敏感,能确保得到目标区域封闭连续边缘。但物体表面一些细微的灰度变化以及图像中的噪声干扰等因素皆会导致对图像过度分割的产生,从而产生过多无用的边缘信息。

本文在对分水岭算法进行了深入的研究的基础上针对其过分割的问题提出改进:使用区域合并方法限制允许出现的区域的数目,这样不仅可以有效地抑制过分割问题,还能较好地分割出图像中的目标区域,以达到提取图像有效边缘信息的目的。

2 原理

2.1 分水岭传统方法

分水岭分割方法是基于拓扑理论的形态学分割方法,它的基本概念是将图像看成地形学上被水覆盖的自然地貌,图像中的每一点像素的灰度值表示这一点海拔的高度,其中每一个局部极小值和它所影响的区域称为集水盆,集水盆的边界形成了分水岭[1];其思想和形成可以通过模拟“溢流”的过程来说明:首先,在各个极小区域的底部打一个小孔,让水从孔中溢出,慢慢浸没极小区域周围的区域,这样各个极小区域所波及的范围就是相应的集水盆,各个不同区域的水相连时的边界,就是想要获取的分水岭[2]。

分水岭的经典算法是L.Vincent提出的模拟沉浸算法,其计算过程是一个迭代标注过程。在这个算法中两个步骤,分别是排序过程和淹没过程[3];首先对各个像素的灰度级进行低到高排序,然后在从低到高实施浸没的过程中,对各个局部极小值在h阶-高度的影响域采用FIFO(先进先出)结构来进行判断和标注[4]。

设hmin和hmax是灰度图像I的最低灰度和最高灰度,Th(I)表示灰度值小于等于阈值h的所有像素,即Th(I)={p|I(p)≤h}。M1,M2,…,MR为图像中的局部最小点,即低洼。C(Mi)表示与低洼Mi相对应的集水盆地。Ch(Mi)表示C(Mi)的一个子集,它由该集水盆地中灰度值小于等于h的所有像素组成,即Ch(Mi)=C(Mi)∩Th(I)。minh(I)表示灰度值等于h的所有局部最小值。

令C[h]表示所有集水盆地中灰度值小于等于阈值h的像素集合,即:

那么,C[hmax]就是所有集水盆地的并集。显然,C[h-1]是Th(I)的一个子集。

假设已经得到阈值h-1下的C[h-1],现在需要从C[h-1]获得C[h]。若Y为包含于Th(I)的一个连通成分,则Y与C[h-1]的交集有以下三种可能:(1)Y∩C[h-1]为空;(2)Y∩C[h-1]不为空且包含C[h-1]中的一个连通分量;(3)Y∩C[h-1]不为空且包含C[h-1]中的多个连通分量。

于是,C[h]就包含对C[h-1]中的各集水盆地在水平h下扩展得到的区域以及水平h下新出现的低洼。模拟沉浸法将C[hmin]初始化为Thmin(I),从最小灰度hmin开始,逐灰度级由C[h-1]构造出C[h],直到hmax,此时,得到的C[hmax]就是所需标记的集水盆地。其他不属于任何一个集水盆地的点就是分水线点,通过在图像中求C[hmax]的补集可以得到[5]。

2.2 改进方法

利用上述传统方法经常会因为噪声的干扰和梯度的局部不规则性影响而造成过度分割。如对图1使用传统算法得到的实验结果如图2所示,图2中的过度分割产生了很多无关的边缘信息,过多的无关信息让结果没有意义。

图1 原图像

图2 使用传统分水岭分割算法得到的结果

利用区域合并的方法来限制出现的区域的数目可以有效解决该问题。控制过度分割,我们将标记作为基础。本文以Opencv中的函数cvWatershed(const Mat&image,Mat&markers)为例进行说明。markers即是输入矩阵也是输出矩阵,大小与image大小相同。使用该函数时,在markers矩阵中粗略指定两种以上区域,该区域为1个点以上的连通点集,并用不同的正整数(1,2,3…)标记。这些区域可以用cvFindContour(),和cvDrawContour()标记。用户或算法可以通过画一条简单的线,有效地告知分水岭算法把这些点组合起来。markers矩阵其他区域为0。调用cvWatered()函数后,markers矩阵中所有为0的部分被重新标记为正整数,或为-1,-1代表筑起来的坝。

标记是图像的连通分量,分为内部标记和外部标记,内部标记与目标体相关,外部标记与背景相关。图像中存在的许多隐含的极小值是导致图2过度分割的原因之一,因为这些区域都很小,所以这些值中有很多是没有意义的细节。此时将图像用平滑滤波器过滤,将这些对图像产生影响的极小的无关细节降到最少,然后假定在这种情况下,把内部标记定义成:(1)区域中的点组成的一个连通分量;(2)这个连通分量中点的相同灰度值;(3)被海拔更高的点包围起来的区域,然后对经过平滑处理后的图像进行分水岭分割,并将这些得到的分水线定义成外部标记,将定义局部最小值为内部标记。这时,沿着分水线的点就是相对理想的背景选择点,因为这些点都经过了相邻的标记间的最顶点。

外部标记有效地将图像分割成包含一个唯一内部标记和部分背景的单独区域,并对这些单独的区域依次使用分水岭分割算法,这个操作在求得平滑后图像的梯度之后进行。使用这种方法得到的结果如图3所示,与图2相比较效果明显改善,原图像中的楼体、路灯、树枝、车辆都相对图2获得更多、更有意义的边缘提取结果。

图3 使用改进分水岭分割算法得到的结果

3 结果分析

本文利用区域合并改进了分水岭的传统算法,实现了既可以有效地抑制噪声,又达到了增强图像的目的,解决了两者之间平衡的矛盾,得到了相对较好的效果。我们的实验样本图像从彩色风景图像、彩色建筑物图像、彩色人脸图像中选取,在这些图像中实施本文算法抑制过分割效果较为明显,但在医学图像等灰度图像中算法效果有待进一步改善。

[1]徐奕奕,刘智琦,刘琦.基于改进的分水岭算法图像分割方法研究[J].计算机仿真,2011(9):272-274.

[2]周小红,蔚立磊,王国权.基于分水岭算法的图像分割方法研究[J].计算机仿真,2009(5):255-258.

[3]韩明.基于单目视觉的颗粒粒度现场检测技术研究[D].绵阳:西南科技大学,2011.

[4]吴德.基于图像处理的胶囊检测系统的研究[D].广州:广东工业大学,2011.

[5]GaryBradski,Adrian Kaebler.学习OpenCV[M].于仕琪,刘瑞祯,译.北京:清华大学出版社,2009:328.

猜你喜欢

集水分水岭盆地
纤维素基超疏水材料的制备与应用研究进展
盆地是怎样形成的
选 择
板栗树下打坑集水技术
2019,一定是个分水岭!
二叠盆地Wolfcamp统致密油成藏特征及主控因素
自制冲洗液收集装置在关节镜手术中的应用
集水明排与深井井点联合降水工程应用
江淮分水岭地理内涵辨析
楚雄盆地扭动构造及其演化