数字图像局部分割算法的研究
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字图像局部分割算法的研究
摘要:提出了一种基于最小生成树的分割方法。
该方法受到水在地形表面自由流动的启发,根据各个像素之间的位置关系和大小把每一个像素点都分配到一个最小生成树上去。
为了保证分割目标的连续性和完整性,在算法中增加了梯度计算的漏点检测,通过该方法在数字图像分割中的应用,结果表明:基于最小生成树的分割方法能够准确地刻画目标区域的轮廓,尤其是分割图像局部目标,能够保证分割目
标的完整,有利于后续的图像分析,模式识别。
关键词:图像分割;最小生成树;漏点检测;图论
0 引言
图像分割在图像处理中处于一个重要的地位,尤其在医学领域和人工智能领域的应用,比如,一幅人体局部器官的X光图片,它的某个局部部位分割结果就直接影响到后续的图像分析和医学诊断。
在人工智能领域,目标图像的定位和精确分析也直接影响了系统后续
的行为以及最终产生的结果。
在实际的应用过程中,人们往往希望从图像的局部区域提取信息,根据某个局部区域的特点,比如区域大小、区域颜色、区域形状等这些方面去判断局部对象的状态和识别局部对象。
比如在医学领域,病人的一幅X光片中某个病灶部位的定量分析是医生后续诊断的重要依据和参考。
因此,对病灶部位的图像分割与提取的效果就直
接决定了定量分析的精确性。
近年来,基于图论思想的分割方法成为了当前研究的一个热点和方向,具体的思想就是把一幅数字图像映射为图,图中的节点表示图像中的像素,图的边表示两个像素间的连接关系,把对图像本身的处理转化为对一幅图的处理,运用图论的基本知识和算法进行图像的分割处理。
这种方法的好处是能够简化图像处理的过程,提高算法的执行速度,提高分割的质量。
本文受到基于山地模型的浸水过程的启发,采用了图论中最小生成树的算法来实现图像局部区域的分割。
1 基本思想
把一幅数字图像想象成一片起伏跌宕的山地模型,其中每个像素的灰度值代表该点的海拔,在这样的地形中,既有地势很低的山谷(局部的极小区域),也有高高耸立的山脊,如图1所示。
我们可以模拟一个浸水的过程,也就是在一个谷底刺穿一个小孔,让水从小孔处不断的流出来,水就会自动的根据地势的高低来选择首先要流经的地
方和路线。
只要水量足够大,水就可以流到山地的任何一个地方和角落,最终把地表淹没,水的这种自由的流动能够很好地描绘地形表面的局部特征和整体特征,如图2所示。
在图2中,菱形表示水源,也就是出水的小孔,每个黑点旁边的值代表地形的高度,图2中模拟出了当水位高度为2时的水流路线。
把这种思想用到图像分割上就能很好的
描绘目标区域的轮廓和特征。
由上面的水流运动的模拟图可以看出,水会从地势最低的地方流过,不同的水深会有不同的路径,水能够主动选择最优的路径,这
个过程和图论中最小生成树非常相似。
2 算法描述
在本算法中,首先将一幅数字图像映射为四连通的图,图中的节点代表数字图像的像素点,边代表了像素点之间的邻接关系,赋予边的权值表示两个直接相邻的两个点之间的像素差值,如图3所示。
为了计算边的权值,需要定义一个权值函数,根据目标区域内
灰度变化的信息,本文定义的权值函数为:
Edge_cost(a,b) =|P(a)-P(b)|ifa,b∈M else[JY](1)
其中,Edge_cost(a,b)是边<a,b>的权值,P(a),P(b)分别表示像素
点a,b在图像中的像素值,M表示像素间的四连接的邻接关系。
本算法是基于水自由流动的思想,自由流动能够很好的刻画地表的地形地貌,但是水流这种自由流动也要受到一定的限制,让水流到需要的地方去,在本算法中采用梯度插值的方法阀值控制路径寻找的方向。
根据普里姆的最小生成树算法,本文提出的分割方法的具体算
法如下:
N=(V,{E})是连通图,TE是N上最小生成树中边的集合。
算法从U={u0}(u0∈V),TE={}开始,重复执行下述操作:在所有u∈U,v ∈V-U的边(u,v) ∈E中找一条代价最小的边(u0,v0)并入集合TE,
同时v0并入U,直到U=V为止。
辅助数据结构:
(1)closedge。
辅助数组,以记录从U到V-U具有最小代价的边。
对每个顶点vi∈V-U,在辅助数组中存在一个相应分量closedge[i-1],它包含两个域,其中lowcost存储该边上的权。
显然,closedge[i-1].lowcost=Min{cost(u,vi)|u∈U},而vex域存储该边依附的在U中的顶点。
(2)G。
无向网,它是一个结构体,具体定义如下:
//----------图的数组(邻接矩阵)存储表示--------
#define INFINITYINT_MAX //最大值∞
Typedef struct ArcCell{
VRType adj; //VRType是顶点关系类型。
对无权图,用1或
0表示相邻否;对带权图,则为权值类型
InfoType *info; //该弧相关信息的指针
}AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
Typedef struct{
VertexType vexs[MAX_VERTEX_NUM]; //顶点向量
AdjMatrix arcs; //邻接矩阵
int vexnum,arcnum; //图的当前顶点数和弧数
}G;
(3)parent。
二维数组,用来存放生成的最小生成树中每个顶点
的父亲节点。
(4)T。
阀值,用来控制最小生成树的生长。
(5)seed。
最小生成树的根节点,由用户在分割目标上选择一个顶点作为整棵最小生成树的种子点。
本文提出的基于最小生成树算法如下:
void MiniSpanTree(MGraph G,VertexType u){
//从u顶点出发构造网G的最小生成树T
//记录从顶点集U到V-U的代价最小的边的辅助数组定义:
// struct {
VertexType adjvex;
VRTypelowcost;
}closedge[MAX_VERTEX_NUM];
k=LocateVex(G,u);
for(j=0;j<G.vexnum;++j) //辅助数组初始化
if(j!=k) closedge[j]={u,G.arcs[k][j].adj}; //{adjvex,lowcost}
closedge[k].lowcost=0; //初始化,U={u}
for(i=1;i<G.vexnum;++i){
k=minimum(closedge); //求出T的下一个结点:第k顶点
if(closedge[vi]>T) //如果边的代价值大于阀值T,那么拒绝顶点vi加入集合U中
continue; //进入下一次循环
//此时closedge[k].lowcost=MIN{closedge[vi].lowcost|closedge[vi]>0,vi∈V-U}
closedge[k].lowcost=0; //第k顶点并入U集
prarent[vi]=k; //把vi的父亲结点指向k
for(j=0;j<G.vexnum;++j)
if(G.arcs[k][j].adj<closedge[j].lowcost) //新顶点并入U后重新选择最小边
closedge[j]={G.vexs[k],G.arcs[k][j].adj};
}
}
利用本算法对图3图像的四连通图处理结果如图4所示。
3 漏点检测
我们可以把要分割的目标区域想象成一个盆地,目标上的像素值的大小表示该像素点处地形的高度。
在分割目标上选择一个种子点,在种子点处挖一个小孔,让水不断流出,随着水量的增加,水会向四周自由流动。
在现实当中,图像上每个目标的边界点的高度是不一样
的,这样水会通过目标边界上高度很低的边界点流到图像背景上去或者其它区域上去,这样就造成了不必要的分割(如图5所示)。
为了能充分刻画目标的轮廓,而又不引起多余的分割,本文引入了一种漏点
检测算法。
漏点检测的步骤为:
(1)去除孤立点。
孤立点一般指的是在一个图像灰度级均匀的区域内的异常点,它与周围的像素灰度级差别会很大。
所以,为了在漏点检测中更准确地定位漏点,就必须去除这些孤立点,孤立点去除
的方法如下:
利用图6所示的3×3模板:
用图6所示的模板,如果
|R|≥T[JY](2)
则在模板中心位置上就检测到一个点,其中T是一个非负的门限,R=w1z1+w2z2+…w9z9,zi是与模板系数wi相联系的像素的灰度级。
(2)寻找漏点所在的路径。
计算最小生成树上的每个节点的孩子数量,对图4的每个节点的孩子数量进行计算,结果如图7所示。
通过计算最小生成树上的各个节点孩子的数量,本文总结出两个规律:①从种子节点到达背景或其它区域的这条路径上的孩子节点数量较多;②)路径上每个节点的孩子数量随该节点远离种子节点而
逐渐的减少,如图7中所示。
这两个规律对于进行漏点的查找很有帮助,在进行漏点查找时,我们就沿着拥有孩子节点数量最多的那条路径,因为漏点一定在这条路径上。
(3)梯度检测。
根据步骤(2)的判断,可以找到漏点所在的路径,然后利用Cany算子求出该路径上每个结点梯度值,判断该点是否为边缘点
由于Canny算子在边缘检测中容易出现孤立的边缘点(假边缘点),故需要在检测点八邻域的0°,45°,90°,135°方向(如图8所示)上判断是否有边缘点出现,如果存在那么检测点就是边缘点,同时也就检测到了漏点,如图9所示。
(4)剪断以步骤(3)检测出的漏点为根节点的子树,剩下的最短路径森林就是我们要分割的目标。
对图4最终的分割结果如图10所示。
4 实验结果分析与结论
为验证本文提出的算法,对几幅图像进行了分割对比实验,实验中,每幅图像在同样的阀值T控制下分别用基于像素值比较的传统区域生长算法和本文提出的基于最短路径的算法进行分割,分割的结果如图11所示。
从上面的实验结果可以看出,基于最小生成树的图像局部分割算法采用了自由寻找路径的方法,能够充分勾画目标轮廓,保证分割
目标的完整,尤其对目标上的某些奇异的点能够准确的捕捉,例如,人体舌苔上由于疾病引起的病变部位,如果用传统的区域生长的算法很难把这些目标分割完整,因为区域生长算法严格按照像素点与种子点之间像素值大小关系,它没有考虑到像素点之间的距离以及像素之间像素值的变化。
该算法与Dijkstra相比,速度较快,因为算法中不需要处理每一个节点,只需要处理节点的四邻域节点,这样就减少了处理的次数。
算法与传统的基于像素值比较的分割方法相比,速度和效率很高,因为在比较节点的像素值时,不需要把当前节点的像素值与所有的节点像素值进行比较。
而且,基于最小生成树算法的分割结果有利于图像的后续处理,因为本算法可以从目标上任意一点开始,无需遍历图像,仅仅从该像素点的Parent和Label就能知道该点属于哪个分割目标。
而从种子节点进行回溯操作的同时,可以得到各个分割目标的相关信息,例如目标的大小、目标的灰度均值、方差等,而传统的区域生长算法却不能做到这些。
5 结束语
本文借鉴了图论中的最小生成树的思想和水自由流动的思想,从一个新的角度去进行图像局部分割算法的研究,实验结果表明,该
算法分割目标准确、分割充分。
参考文献:
[1] YI FEI ZHANG,SHANG WU,GEYU,et al.Medical image segmentation based on fast region connection[C].International
Conference on Complex Medical En2ineerin2,2007 IEEE/ICME.
[2] A.NAGARAJA RAO,DR V VIJAY KUMAR,C NAGARAJU.A new segmentation method using waersheds on grey level images.1-4244-0716-8/06/$20.00 2006 IEEE.
[3] HUA BAO,DE YU LI,YU BO FAN,et al.A new feature based on two direction angles difference for edge detection[C].International
Conference on Complex Medical En2ineerin2,2007 IEEE/ICME.
[4] A X FALC ~AO,J STOLFI,R A LOTUFO.The image foresting transform:Theory,algorithms,and applications[J].IEEE Trans.on
Pattern Analysis and Machine Intelligence,2004(1).
[5] 孙涵,任明武.基于链码的分水岭变换算法[J].中国图像图形学报,2004(9).。