二值图像的细化算法.docx

上传人:b****1 文档编号:13477217 上传时间:2023-06-14 格式:DOCX 页数:7 大小:19.29KB
下载 相关 举报
二值图像的细化算法.docx_第1页
第1页 / 共7页
二值图像的细化算法.docx_第2页
第2页 / 共7页
二值图像的细化算法.docx_第3页
第3页 / 共7页
二值图像的细化算法.docx_第4页
第4页 / 共7页
二值图像的细化算法.docx_第5页
第5页 / 共7页
二值图像的细化算法.docx_第6页
第6页 / 共7页
二值图像的细化算法.docx_第7页
第7页 / 共7页
亲,该文档总共7页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

二值图像的细化算法.docx

《二值图像的细化算法.docx》由会员分享,可在线阅读,更多相关《二值图像的细化算法.docx(7页珍藏版)》请在冰点文库上搜索。

二值图像的细化算法.docx

二值图像的细化算法

二值图像的细化算法

  摘要:

二值图像是只有黑白两种颜色的图像,二值图像的细化是讨论将一个图像中的黑色部分沿着它的中心轴线将其细化为一个像素宽的线条的处理过程,细化的结果能基本保留图形中黑色部分的拓扑结构。

介绍了一个二值图像的细化算法,思想是从原图像的边界逐层消除黑色像素点,但同时保持黑色部分的连通性,直到最后得到细化结果。

  关键词:

二值图像;细化;连通性;边界点;连通点

  

  

  

  0引言

  在计算机领域,图像处理的问题越来越成为重要的一部分,因为现在的数据交流,已不再是简单的数值,而是更多地转换到大量的图片和影音图像上来。

所以一个个的图像处理的问题就摆在了我们的面前。

但形形色色的图像处理的算法,通过抽象处理,都是可以归结为一些简单的处理。

比如多颜色的处理,可以先从两个颜色的情况开始,再进行展开。

二值图像的细化就是这些简单处理中的一个问题。

二值图像就是只有黑白两种颜色构成的图像,二值图像的细化就是将图像中的黑色部分沿着它的中心轴线将其细化为一个象素宽的线条的处理过程。

二值图像的细化在计算机的图像处理领域有重要的意义,它其实是显示了整个图像的一个拓扑结构,它在一些模式识别,点阵图形的矢量化等方面有很好的作用。

  1二值图像的细化的分析

  首先,对二值图像进行设定。

这里假定二值图像以白色为底,细化黑色部分,且给出的黑色部分的图像为连通的。

这样,对任意的黑色图像,必定存在一个合适的n为正整数,使得它在以白色为底的2n×2n的正方形内。

由于假定黑色图像的连通性,则二值图像的细化处理后的图像必定是连通的。

为了便于处理,设计了一个256×256的正方形作为处理二值图像的区域,且在初始的作图中保证黑色部分图像的连通性。

  其次,对边界点、连通点、连通单位等进行说明。

边界点就是黑色图像区域内与白色图像区域接触的黑色像素,这接触判断是考虑这点对应的上、下、左、右4个方向的4点是否存在白色像素。

连通点就是若此点去掉的话,黑色图像区域会失去连通性,具体判断要考虑该点的8个方向的像素的颜色值。

因为在后面的判断中有两个黑点去掉后,黑色图像区域是否会失去连通性的,我们在此定义使之失去连通性的两点为连通单位。

  下面分析其中的一些原理。

  对细化,采用的是层层剥离的方法,就是判断出它的边界点,而它又不是连通点,就可以去掉此点,这是一个反复的扫描的过程。

如果对一个矩形区域,从左上角开始的的话,逐行扫描,反复进行,直到留下的全为连通点或为一条线段的断点。

根据实际的编程过程,我最终确定了如下的扫描细化的过程:

  在第一次扫描的时候,将黑色像素点的信息压入一个链表,包括坐标、颜色,以下的扫描过程其实是对此链表的一次次的遍历,也就是沿着链表反复的判断,将一个个的点去掉,而对边界点等等的判断,则又么用到其接触的点,这是不能从链表中得到的,只能一次次的读取原始图像的信息,同时也在改变原始图像信息(这里是改变颜色),便于后续过程的判断。

  以下是对链表的遍历(其中的边界点、连通点的判断,都留到下面的算法中具体的介绍),在一轮轮的遍历中,逐步把边界点和连通点从链表中去掉,直到链表为空。

在此我设定了一些不同的颜色值,以作不同情况的判断。

而一轮需作两次的遍历。

第一次遍历判断是否为边界点,需考虑它的4个方向的像素颜色,若确定为边界点,才再继续判它是否为连通点,接着,考虑它的8个方向的像素颜色,非连通的点,改变链表内的数据,将颜色值更改为红的,而对应的原始的图像信息也更改颜色为红的,若就是连通点,在链表中设置此点数据的颜色值为篮色(此值只在链表中出现,以作最后判断是否是连通点)。

  这第一次的遍历,只是将一些点判定为边界点或连通点,且赋了个黑白外的其它颜色值(红色)来区分,但现在的判定还不是最终的结果,还需要对如下的一些特殊情况要详细考虑。

  

  图1对特殊情况下的连通点的判断

  因为是一个有序的逐行扫描,在判定一个点为边界点时,前面已设定的红点仍相当于为黑的来考虑,而在其后的连通点判断时,将设定为红点的相当于是白来考虑;对设定的蓝点,因为只改变链表中的数据,其实在判定中直接读取原始的图像区域,它仍为黑的,所以没必要去更改原始的图像区域的点的颜色。

我们注意图1下面的角,当扫描的点1时,点2还是黑的,1只是个边界点且不为连通点,取红的,再判点2,此时,2明显是边界点,而它的八个方向上,只有点3,4为黑的,且不连接,所以2点暂时可以定为连通点,取成蓝的,接着要判定点3了,看到其它点,它现在只有一个接触的黑点,即点2,所以取为红点,这样,我们看到,点2其实可以取为黑的,所以我们在第二次扫描遍历时,对蓝点再判一次连通性,若确实是连通点,不改变原始图像区域的黑色像素的颜色,而将该点从链表中去掉,反之,则直接将对应的像素的设为白的,也就是在完成细化,该点也同样要从链表中去掉。

  

  图2对特殊情况下连通点的判断

  依照第一次的遍历,应得到如上的图形,这样的情况在一定的角度上都是存在的,很明显,这样的细化是不对的,所以在那里的红的部分,有一部分是应该为黑色像素,以正确显示图形细化后的拓扑结构。

所以应该也要对红的点进行一个判断,这就是第二步的遍历的要求了,来消除这个情况的影响。

  结合上面的分析,我们看到:

一轮的细化是要两次遍历,第一次是挑出边界点(设为红)和连通点(设为蓝),但链表元素的量不变,第二次是对链表的再一次遍历,将其中的红点的和蓝点的再各作一个不同的判断(因为前面可能出现的两种情况),而最终,这两类点在第二轮遍历中从链表中删除,同时将点判定为用黑色值还是白色值。

则经过一轮轮的细化过程,最终链表为空,也就是完成了细化的工作。

  2细化算法的处理过程

  第一步,先设计一个链表,逐行扫描保存黑点图像的信息,包括坐标,颜色值。

  第二步,接着按分析,进行一轮的遍历,则有如下的算法:

  对应链表中的每一个元素,根据其坐标,可以找出其旁边的8个点,看(图3)。

  

  图3与黑色像素相邻的8个像素

  第一次的遍历。

找边界点:

只要依顺序判断1、3、5、74个点的颜色是否都不是白的,若未是则继续链表中下一个点的判断,否就将链表中此点的颜色值改为红的,对应图像中的象素颜色为红的;在此点为边界点的情况下,找连通点,最终若是连通点,设链表中此点为蓝的,但不更改图像中的颜色,若不是连通点,它就是已更改了的边界点。

  第二次遍历。

依照上面的分析,要再次的遍历此链表,这次要去掉链表中黑色、红色的颜色值的点,但这两类点都分别有各自的判断算法,以最终确定下来。

看下面:

  

(1)遇到红点,判断对应的图像的像素颜色值是否为红的,若不是红的,即是黑的,这点就是已经处理过,保留图像中黑的情况,链表中删除此点,反之,有下面的判断。

  要判断它的周围的点是否有接触的黑点了,这个判断应该简单了。

正如图2中看到的,有的红点旁边没有接触的黑点,甚至为一串红的,我们很清楚这里的红点应该有一些被判定为黑点的。

若是有黑的点,则先在图像中对应的点颜色改为白的了,是在细化,接着删除链表中的此点,反之,则还要判断下去。

这样,这一点旁边的点只有红的和白的了,我们先看看图4的两者情况,要对应比较图4。

  

  图4比较情况

  我们注意图4、图2,箭头对应的红点,它旁边没有黑点,但有不同点,与图2的点接触的红点中没有点与黑点相连,而这图4的确是接触的红点中有点与黑点接触,对图4的情况,直接考虑将图像中的对应点设为白的,链表中的此点去掉。

对图2的情况,就要在红区域中找出一条黑的单象素宽的线,细化的一部分区域就显现了。

  下面是对这情况的算法,这里已经知道点的旁边都是为红的和黑的点了:

  第一步,作另一个链表A,将此点作为它的第一个元素,接着,将它旁边的红点的象素一个个的添加到链尾,同时在此统计一下红点的数量m,接着,走到链表的第二个元素,以至链表的更后面的元素,依顺序去判断它(红点)旁边的点是否有黑点,若无,则将它旁边的红点且又不在链表中(这里也要有设计的步骤来处理)的加入到链尾,而有的话,分两中情况:

一,如(图8)中出现的情况,这类的确定就是现在在处理的元素在链表中的位置是小于等于m+1的,正如上面介绍的,此红的接触的红点中有点与黑点接触,该考虑结束,要判的点设为白点,就如图8中箭头指向的点可以设为白的,而在原链表中将此点去掉,且将链表A释放掉,此算法在此结束;二,现在,处理的元素在链表中的位置大于了m+1了,就在图形中设它的颜色值为黑的,且显示出来,而释放链表A只留下第一个元素。

  第二步,重复第一步,直到碰到在第一步中第一个情况,结束算法。

  这个算法中,有将一些没有判断过的红点直接更改为确定的象素颜色值(黑的),所以在原链表中判断到此点时,就可以直接跳过,这就是为什么要遇到红点,先判断对应的图像的象素的颜色值是否为红的了。

  

(2)遇到蓝色的,对应着(图6)在按顺序判断一次,它还是不是连通的点,其中对红的点考虑成白的,若有蓝的点考虑成黑的。

若还是连通的,则在图像上对应的点取为黑的,链表中将此点去掉。

  可以看到,以上的步骤最终将红的和蓝的点都从链表中去掉了。

  第三步,在链表不为空的情况下,重复第二步,直到链表为空。

  3实例

  以下两个是算法实现的例子(图5、图6),原始的图像,是在256×256的矩形内,对应的右边的就是细化后的效果。

  

  

  图5二值图像的细化算法的实现效果

(1)

  

  图6二值图像的细化算法的实现效果

(2)

  4结束语

  对于二值图像的细化,我在每一轮处理中有两次的遍历,以便将一些条件的判断限制在一小部分像素上,而不需要对所有的像素都反复的判断。

处理的结果还算比较理想,能得到比较好的效果。

  当然为了保持一定的效率,在有些判断上还是比较简单。

在算法思想一定的情况下,图像处理的效果和速度总会存在一定的矛盾,需要在算法上不断改进。

  参考文献:

  [1]JAMESD.Foley,Andriesvandam.计算机图形学原理及实践,C语言描述[M],北京:

机械工业出版社,2004.

  [2]GUNILLABORGEFORS,GIULIANARAMELLA,GABRIELLASANNITIDIBAJA,etal.OntheMultiscaleRepresentationof2Dand3DShapes[C].ReceivedApril14;revisedDecember16,1998;acceptedJanuary20,1999.

  [3]G.borgeforsandG.SannitidiBaja,ShapePreservingBinaryPyramids[C].8thPortugueseConferenceonPatternRecognit.ion(RecPad96),Guimaraes,Portugal,1996.

  [4]崔凤奎,王晓强,强丰收.二值图像细化算法的比较与改进[J].洛阳工学院学报,1997(4).

  

  

  

  ThiningAlgorithmofBinaryImage

  

  Abstract:

Binaryimageisonlytwocolors,blackandwhite.Thiningofbinaryimageistheprocessofthiningblackimagetobeapixelwidelinewithitsaxlewire,theresultswillkeeptheblackimage'stopologicalstructure.Thispaperintroducesathiningalgorithmofbinaryimage,thatistoeliminateblackpixelstepbystepfromtheboundaryoftheoriginalimage,atthesametime,keepingtheblackimage'sconnectivity,untilthefinalresults.

  KeyWords:

BinaryImage;Thining;Connectivity;BoundaryPoint;ConnectedPoint

  

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2