图像处理___细化


From:  http://www.dakaren.com/index.php/archives/199.htm


二、细化

  图像处理中物体的形状信息是十分重要的,为了便于描述和抽取图像特定区域的特征,对那些表示物体的区域通常需要采用细化算法处理,得到与原来物体区域形状近似的由简单的弧或曲线组成的图形,这些细线处于物体的中轴附近,这就是所谓的图像的细化。通俗的说图像细化就是从原来的图像中去掉一些点,但仍要保持目标区域的原来形状,通过细化操作可以将一个物体细化为一条单像素宽的线,从而图形化的显示出其拓补性质。实际上,图像细化就是保持原图的骨架。所谓骨架,可以理解为图象的中轴,例如一个长方形的骨架是它的长方向上的中轴线;正方形的骨架是它的中心点;圆的骨架是它的圆心,直线的骨架是它自身,孤立点的骨架也是自身。对于任意形状的区域,细化实质上是腐蚀操作的变体,细化过程中要根据每个像素点的八个相邻点的情况来判断该点是否可以剔除或保留。下面我们给几个例子来说明如何判断当前像素点是否该保留或剔除。

 
图二 根据某点的八个相邻点的情况来判断该点是否能删除

  上图给出了当前需要处理的像素点在不同的八邻域条件下的情况,可以看出:(1)不能删,因为它是个内部点,我们要求的是骨架,如果连内部点也删了,骨架也会被掏空的;(2)不能删,和(1)是同样的道理;(3)可以删,这样的点不是骨架;(4)不能删,因为删掉后,原来相连的部分断开了;(5)可以删,这样的点不是骨架;(6)不能删,因为它是直线的端点,如果这样的点删了,那么最后整个直线也被删了,剩不下什么;(7)不能删,因为孤立点的骨架就是它自身。 总结一下,有如下的判据:1.内部点不能删除;2.孤立点不能删除;3.直线端点不能删除;4.如果P是边界点,去掉P后,如果连通分量不增加,则P可以删除。我们可以根据上述的判据,事先做出一张表,从0到255共有256个元素,每个元素要么是0,要么是1。我们根据某点(当然是要处理的黑色点了)的八个相邻点的情况查表,若表中的元素是1,则表示该点可删,否则保留。查表的方法是,设白点为1,黑点为0;左上方点对应一个8位数的第一位(最低位),正上方点对应第二位,右上方点对应的第三位,左邻点对应第四位,右邻点对应第五位,左下方点对应第六位,正下方点对应第七位,右下方点对应的第八位,按这样组成的8位数去查表即可。例如上面的例子中(1)对应表中的第0项,该项应该为0;(2)对应37,该项应该为0;(3)对应173,该项应该为1;(4)对应231,该项应该为0;(5)对应237,该项应该为1;(6)对应254,该项应该为0;(7)对应255,该项应该为0。仔细考虑当前像素点的各种八邻域的情况,我们可以得到一个细化操作查找表,该表在下面的细化算法中详细介绍。

  为了避免分裂物体,细化的过程分为两个步骤,第一步是正常的腐蚀操作,但是它是有条件的,也就是说那些被标记的可除去的像素点并不立即消去;在第二步中,只将那些消除后并不破坏连通性的点消除,否则的话保留这些边界点。以上的步骤是在一个3×3邻域内运算,可以通过查表实现细化的操作。算法的实现步骤如下:

  1) 定义一个3×3模板和一个查找表,模板和查找表分别如图二和表一所示:

124
1282568
643216

图二 细化模板

erasetable[256]={
0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,1,1,0,0,1,1,1,1,
0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,
1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,1,0,0,1,1,0,0,1,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,
1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,
1,1,0,1,1,1,0,1,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,
1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,
0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1,0,1,1,1,0,0,
1,1,0,0,1,1,1,0,1,1,0,0,1,0,0,0
};

  
表一 细化查找表

  2)对二值图像从上到下、从左到右进行扫描;该过程结束后再对图像进行从左到右,从上到下的扫描;如果图像中当前像素点的灰度值为”0″,且其左右(第一次扫描过程考虑左右像素点)或上下(第二次扫描过程考虑上下两个像素点)两个像素点中有任意一个为”255″则转至步骤三,否则回转到步骤二;

  3) 该像素点为中心的3×3区域内的各个像素值和定义的模板中的权值进行卷积求和,得到表4.1中的查找索引值k;

  4) 根据这个索引值k得到表里相应的数据,如果为”1″,那么该像素点的灰度值设为”255″,如果为”0″,则该像素点的灰度值为”0″。

  5) 图像从头至尾扫描二遍后,如果该次扫描修改了图像中的点,则跳转至步骤二,开始新的一轮扫描。否则图像细化结束。


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值