一种分水岭图象分割处理方法
技术领域
本发明涉及一种图像分割处理方法,尤其是涉及一种形态学分水岭图像分割处理方法。
背景技术
图像分割分水岭方法最初由Digabel和Lantujoul引入图像处理领域,用于分析简单的二值图像,Meyer于1990年提出了最原始的形态学分水岭分割方法(Meyer F,Beucher S.Morphological Segmentation[J].Journal of Visual Communication and ImageRepresentation,1990,1(1):21-46.),但是该方法计算复杂度极高,实现起来非常困难,Vincent和Soille在1991年提出了快速的形态学分水岭方法(Luc Vincent,Pierre Soille、Watersheds inDigital Spaces:An Efficient Algorithm Based on Immersion Simulations、IEEE Transactions onpattern analysis and machine intelligence、JUNE 1991、VOL.13、NO.6、PAGE 583-598),使分水岭的理论得以建立,并大量用于灰度图像的分割之中。分水岭变化基本上克服了阈值分割、边缘检测方法的缺点,且又分割精细,是一种全新的图像分割方法。近几年来针对图像分割分水岭方法的研究仍在继续,但是由于分水岭方法的计算复杂度相对较高,始终没有一种方法能够满足实时高速图像分割场合的应用。在众多现有的分水岭方法中,Vincent与Soille提出的基于沉浸模拟的方法是最著名的,也是最快的方法。该方法包括两个部分:第一部分为排序;第二部分为泛洪。方法可简述如下(其中步骤1为排序。步骤2至步骤6为泛洪):
步骤1:首先计算图像中各点的梯度,然后扫描整幅图像得到梯度图像的直方图和各梯度层的概率密度。各像素点在排序数组中的位置由梯度分布的累积概率与该像素点的梯度值计算得到。计算出所有像素点的排序位置并将其存入排序数组。在排序后的数组中,梯度值越低的点存放的位置越靠前。
步骤2:像素点按梯度值从低到高的顺序处理,相同梯度值的点作为一个梯度层级。
步骤3:处理一个梯度层级hcur(当前层),首先将该层中所有邻域已被标识的点加入到一个先进先出队列中去。
步骤4:若先进先出队列非空。则弹出队列的首元素作为当前处理像素。顺序处理当前像素所有高度为hcur的相邻点。如果邻点已被标识则根据该邻点标识刷新当前像素点的标识。如果邻点尚未标识,则将该邻点加入到先进先出队列中去循环执行本步直至队列空为止。
步骤5:再一次扫描当前梯度层级的像素点。检查是否仍有未标识点。此时的未标识点意味着一个新的极小区。因此。如果发现未标识点,则将当前区域标识值加1,并将该值赋为未标识点的标识值。然后,从该点出发执行与步骤4相同的泛洪步骤。标识该极小区的所有像素点。
步骤6:返回步骤3处理下一梯度层级。直至将所有梯度层级都处理完毕为止。
在以往分水岭图象分割方法中,每个像素点平均被扫描多次,如Vincent-Soille提出的方法排序过程两次,泛洪过程三次,共五次,因此其执行时间为线性。
对于某些实时性要求较高的方法而言(实时视频分割),其计算开销仍然过大。因此,一种快速有效的分水岭方法成为图像学研究的技术问题。
发明内容
本发明的目的是提供一种快速有效的分水岭图像处理方法,其分为三步完成,即分水岭方法的前处理过程,分水岭过程和分水岭后处理过程,其方法流程如图1所示。
一种分水岭图像分割处理方法,其步骤为:
1)将原始图像通过一低通滤波器进行滤波;
2)对图像每个像素点进行平滑处理,得到平滑的图像;
3)分别求出图像各象素点的水平梯度和垂直梯度,取梯度较大者作为该点的梯度,提取出图像的边界,得到梯度图像;
4)遍历各个象素点得出梯度图像的直方图和各梯度层的概率密度,再次遍历各个象素点得出每个象素点在排序数组中的位置,对象素点进行排序;
5)对梯度图像进行标号,其方法为判断当前处理点的上下左右四个邻点是否已经被标号:若当前处理点的上下左右四个邻点存在已经标号的点,则当前处理点的标号等于该标号;若当前处理点的上下左右四个邻点不存在已经标号的点,则当前处理点为新标号;
6)顺序扫描每一梯度层的各像素点,并在扫描过程中直接判定出每一点的标号;所述判定出每一点标号的方法为:根据当前处理点的上下左右四邻点已有标号的种类进行判定,若当前处理点的上下左右四个邻点只有一种标号,则当前处理点的标号等于该标号;若当前处理点的上下左右四个邻点有两种或两种以上的标号,则当前处理点位于两个或两个以上区域的交界处,当前处理点为分水岭点;若当前处理点的上下左右四个邻点均未标号,则当前处理点为新标号;
7)将标号相同的点划为一个区域,不同的区域用分水岭线加以分割,从而实现图象分割。
所述排序数组为整幅图像依梯度值从小到大的一个一维排序数组,梯度小的点排在梯度大的点的前面,左上方的点排在右下方点的前面。
所述方法对梯度值设有一阈值,梯度值小于阈值的点标号设为零。
所述方法在区域划分中对已标号区域内的点数设有一阈值,如果已标号区域内的点数小于设定的阈值,则将该区域合并到其左侧相邻区域。
所述方法中对象素点进行排序的方法为沉浸模拟方法。
所述方法中采用高斯模版对所述图像每个像素点进行平滑处理。
所述高斯模版为:
所述方法中采用Sobel算子求出所述图像各象素点的水平梯度和垂直梯度。
所述Sobel算子为:
其中H1为水平梯度,H2为垂直梯度。
本发明的有益效果
本发明可以在基本保证图象分割效果的同时更快的完成图象分割的过程。图2列出了本文提出的图象分割方法与Vincent-Soille提出的图象分割方法的效果图。表1列出了本文提出的图象分割方法和Vincent-Soille提出方法的处理速度比较。
表1本文方法与Vincent方法处理速度比较
图像 |
图像宽度 |
图像高度 |
Vincent总用时 |
本文算法总用时 |
clair |
128 |
128 |
32 |
16 |
lena |
512 |
512 |
469 |
171 |
测试电脑使用:AMD1.6G 512M |
宽高单位:像素,时间单位:毫秒 |
附图说明
图1本发明的***流程图;
图2本文提出方法与VINCENT-SOILLE方法分水岭线效果图;
图3使用阈值方法减少过渡分割的效果图,从上到下依次采用梯度阈值2、阈值10、阈值15、阈值22;左图为本文提出方法的分割效果,右图为VINCENT-SOILLE提出方法的分割效果;
图4使用阈值方法后再使用区域融合的效果图,从上到下依次采用区域融合阈值10、50、100、120,左图为本文提出方法分割效果,右图为VINCENT-SOILLE提出方法的分割效果。
具体实施方式
本图象分割方法可以用于实时性要求较高的图象分割场合,比如MPEG-4的视频对象VOB提取过程中,下面结合附图和实施例对本发明做进一步说明:
分水岭方法图象分割前处理:
由于原始图像在数据采集和存储过程中可能会带上一些与原始图像无关的噪声点。这些噪声点会大大影响分水岭方法的处理效果,从而造成过度分割现象。因此必须先使原始灰度图像经过一个低通滤波器,滤掉不必要的噪声点。
为了能够更好的通过分水岭方法为图像进行区域划分,需要强调图像的区域边缘,这一目的可以通过微分算子边缘检测来实现。
在图像的平滑过程中,使用高斯模板(1)对每个像素点进行处理(吕凤军,《数字图象处理编程入门》,清华大学出版社,1999年12月出版,P43-P46)。
在图像的边界提取过程中,使用Sobel算子(2)分别求出图像各象素点的水平梯度和垂直梯度,取其梯度较大者作为该点的梯度(吕凤军,《数字图象处理编程入门》,清华大学出版社,1999年12月出版,P118-P121)。
H1为水平梯度,H2为垂直梯度
分水岭方法图象分割处理过程:
经过前处理后,便可对图像进行分水岭图象分割了。本文提出的分水岭图象分割方法利用泛洪过程中排序数组内各像素点间的位置关系,对每一个梯度层,从左上到右下的顺序逐列逐行进行标号扩展。图象分割处理方法可分为排序、种子生成和泛洪三个步骤:
步骤1排序:在排序模块中本图象处理所用方法采用和VINCENT-SOILLE相同的方式,即通过第一次遍历求得梯度图像的直方图和各梯度层的概率密度,再通过第二次遍历得出每个象素点在排序数组中的位置。具体而言,由于梯度的概率密度表示梯度值小于该梯度的象素点的个数。所以当求得概率密度后再次遍历整个梯度图像,若某点的梯度值为n,则取梯度为n的概率密度,作为该点在排序数组中的地址,并将梯度n的概率密度加1,作为下次遇到梯度为n的点在排序数组中的地址。这样经过两次遍历后,便可以得到整幅图像依梯度值从小到大的一个一维排序数组。在该数组中,梯度小的点排在梯度大的点的前面,左上方的点排在右下方点的前面。
步骤2种子生成:种子生成模块是为了得到梯度图像最初的标号(种子),本文对最低梯度层进行标号扩展。即将排序数组中最小梯度层的像素点依次取出,然后根据最小梯度层中各点是否相邻判定为相同或不同的标号(本文中标记与标号的概念不同,标记包含标号和分水岭)。处理方法为:判断当前处理点的上下左右四个邻点是否已经被标号:
若当前处理点的上下左右四个邻点存在已经标号的点,则当前处理点的标号等于该标号;
若当前处理点的上下左右四个邻点不存在已经标号的点,则当前处理点为新标号。
步骤3泛洪:考虑到图像梯度的相关性,即一幅图像中具有相同梯度的点通常不会孤立出现,都以聚集的小区域的形式出现;又考虑到在排序过程中对某梯度层像素点的排序是按照从左上到右下顺序排列在排序数组中的。故本文的泛洪模块中采用基于排序顺序的泛洪方法,该方法将顺序扫描每一梯度层的各像素点(从上到下,自左到右),并在扫描过程中直接判定出每一点的标号。确定的方法是泛洪模块根据当前处理点的上下左右四邻点已有标号的种类进行判定:
若当前处理点的上下左右四个邻点只有一种标号,则当前处理点的标号等于该标号;
若当前处理点的上下左右四个邻点有两种或两种以上的标号,则当前处理点位于两个或两个以上区域的交界处,当前处理点为分水岭点;
若当前处理点的上下左右四个邻点均未标号,则当前处理点为新标号。
原始输入图象在经过高斯模板平滑处理,对平滑后的每一帧图象进行排序、种子生成、泛洪步骤后便对一副图象的每个象素点进行标号,标号相同的点构成一个区域,不同的区域用分水岭线加以分割,这便实现了图象分割。如果分割块过小,可以选择使用分水岭方法图象分割的后处理步骤,以实现小区域合并的目的,得到更好的的图象分割效果。
分水岭方法图象分割的后处理:
分水岭方法都会产生一定的过渡分割问题,本文采用两步操作来减小过渡分割的影响。其中步骤一可以独立使用,当要求分割更加明确时,可以添加步骤二。
步骤一:由于梯度表示像素点间的变化关系。本文在这里使用近似法,将两个像素间灰度变化小的点,即梯度值小的点近似认为像素间没有变化,认为其梯度为零。这样,在求得梯度后对梯度进行阈值处理,即梯度小于阈值的点都认为是梯度为零的点。由于种子生成过程会对梯度最低的层进行标号,这些标号将成为以后泛洪过程中的参考点。通过合理地设定阈值可以产生较好的分割效果。图3为使用阈值方法减少过渡分割的效果图,从上到下依次采用梯度阈值2、阈值10、阈值15、阈值22;左图为本文提出方法的分割效果,右图为VINCENT-SOILLE提出方法的分割效果。
表2列出了取不同阈值时,两种方法的区域数。
表2图Clair采用不同阈值处理后区域个数
Clair图像不同梯度阈值对应区域个数 |
阈值 |
本文算法区域数 |
Vincent算法区域数 |
2 |
1197 |
522 |
10 |
626 |
308 |
15 |
124 |
77 |
22 |
76 |
42 |
步骤二:对已经标号的区域进行区域融合,即统计每个区域的点的个数。如果小于提前设定的阈值,则将该区域合并到其左侧相邻区域中。对于Claire图像选用其梯度阈值为22的图像再做处理。图4为使用阈值方法后再使用区域融合的效果图,从上到下依次采用区域融合阈值10、50、100、120,左图为本文提出方法分割效果,右图为VINCENT-SOILLE提出方法的分割效果。
表3列出了Claire图像进行区域融合后的区域个数。
表3图Clair使用阈值处理和最小区融合后区域个数
Claire图像取不同融合阈值对应区域个数 |
阈值 |
本文算法区域数 |
Vincent算法区域数 |
10 |
34 |
19 |
50 |
12 |
25 |
100 |
11 |
22 |
120 |
9 |
20。 |