一种解决种子填充算法中像素多次出入栈问题的方法

文档序号:6369185阅读:3369来源:国知局
专利名称:一种解决种子填充算法中像素多次出入栈问题的方法
技术领域
本发明涉及ー种解决简单的种子填充算法中存在某些像素多次出入栈结构问题的方法,属于计算机图形学区域填充领域。
(ニ)
背景技术
区域填充是指根据区域轮廓线,将其围成的封闭区域用不同的顔色、灰度、线条或者符号进行填充,该区域可以是带孔的也可以是不带孔的。区域填充一般分为两步进行第一,确定需要进行填充的像素有哪些;第二,确定用什么颜色值进行填充。区域填充是计算机图形学图形生成领域中的ー项重要而基本的内容,在交互式图形设计、图形分析等领域中有着广泛的应用,因此一直是计算机图形学研究的热点问题之一。在光栅显示系统中有两种传统的区域填充算法,一种是通过确定横越区域的扫描线的覆盖间隔来填充的扫描线算法,另ー种是从给定的位置开始填充直到指定的边界为止的种子填充算法。扫描线算法主要用来填充比较简单的多边形区域,比如一些简单的多边形和圆,该算法对轮廓线的形状有一定的要求,在处理复杂区域时往往失效。而种子填充算法则可以很好地解决边界比较复杂的区域填充问题,该算法通过事先确定需要填充区域内的ー些点,这些点被称为种子点,然后以这些点为起点,用四向连通方法或者八向连通方法寻找区域内的所有点并进行填充。种子填充算法及在其基础上进行改进形成的算法目前已经是区域填充的主流算法。可以使用栈结构实现简单的种子填充算法,算法原理如下种子像素入栈;当栈非空时重复执行如下三步操作(I)栈顶像素出栈;(2)将出栈像素进行颜色填充;(3)按顺序检查与出栈像素相邻的四个像素(四向连通方法)或者八个像素(八向连通方法),若其中某个像素不在边界且未进行颜色填充,则把该像素入栈。简单的种子填充算法把太多的像素压入栈结构,有些像素甚至会多次出入栈结 构,一方面在很大程度上降低了算法执行的效率,另ー方法还要求很大的存储空间来实现栈结构。如果能对已经进入过栈结构的像素进行标志,使得该像素不会再次进入栈结构,这将能很好地解决某些像素多次出入栈结构的问题,在一定程度上降低算法对存储空间的要求,并提高算法的执行效率。通过对现有国内资料的分析,发现目前还缺少从实现种子填充算法的三个步骤着手进行分析解决某些像素多次出入栈结构的问题的方法。本发明正是通过分析实现种子填充算法的三个步骤相互之间的关系,提出一种可以简单有效地解决某些像素多次出入栈结构问题的方法。
发明内容
本发明的目的在于提出ー种可以简单有效地解决种子填充算法中某些像素多次出入栈结构问题的方法,可用于提高传统种子填充算法执行效率和減少实现栈结构所需要的存储空间。本发明的目的通过如下措施来达到首先,将种子像素置成填充区域所要求的颜色(简称区域填充颜色),并压入栈结构;然后,当栈非空时重复执行如下两个步骤(I)栈顶像素出栈;(2)按左、上、右、下的顺序检查与出栈像素相邻的四个像素,若其中某个像素未置成区域填充颜色且不属于边界像素,则将该像素置成区域填充颜色,并入栈。


图I为传统的简单种子填充算法流程图。图2为本发明提出的经过改进后的种子填充算法流程图。图3中的A、B、C、D为出栈像素根据四向连通算法确定的四个像素。图4中的白点为对大小为128X128像素的正方形区域进行填充之前确定的种子点。图5给出需要进行填充的区域轮廓,轮廓内部的白点表示选择的种子点。图6给出图5运行本发明算法后的結果。
具体实施例方式下面结合附图对本发明的技术方案作进ー步的详细描述。本发明设计了ー种解决简单种子填充算法中存在的对某些像素进行多次出入栈操作问题的方法。经过该方法改进后的种子填充算法相比于未改进的简单种子填充算法,无论在算法的执行效率还是实现栈结构所需要的存储空间都有一定程度的优化。传统的种子填充算法流程如图I所示,本发明的算法流程如图2所示,现以图5给定的需要进行填充的区域为具体实例详细说明具体实施步骤。(I)对区域轮廓像素进行标志该步骤的具体方法是,对图像中的所有像素均设置ー个标志值,例如对于像素(X,y),其对应的标志值为Flag (x, y),如像素(x, y)属于区域轮廓,则令Flag (x, y)=l,否则令 Flag (X,y) =0。(2)确定种子点种子点的选择范围需要限定在所需填充的区域内部,图5中轮廓内部的白点即符合这样的要求。(3)将种子点入栈并置为需要填充的区域顔色种子点作为第一个元素被压入栈结构中,由于种子点处于被填充区域内部,因此种子点像素填充的颜色需要和区域填充的颜色一致。(4)如果栈结构为空,表示区域填充任务完成,直接退出程序;否则,重复执行如下三步操作首先,栈顶像素(x0,y0)出栈;
其次,顺序判断出栈像素左、上、右、下四个相邻的像素(对应的坐标分别为(x0-l,y0)、(x0,y0+l)、(xO+1,y0)、(x0,y0_l),即图 3 中的 A、B、C、D 像素)是否满足入栈条件。入栈条件表述如下如果某像素不属于区域轮廓(Flag=O)并且未被置为区域填充颜色,则认为该像素符合入栈条件。最后,将A、B、C、D中符合入栈条件的按顺序压入栈结构并置为区域填充颜色。为说明本发明算法相对于传统简单算法的优越性,将两种算法通过Matlab7. 11. O编程实现,井分别对图4和图5给定的种子点对区域轮廓限定的区域进行填充,表I和表2分别给出这两种算法在填充图4和图5区域时所需要的执行时间、栈结构的大小(即算法运行时栈结构最多含有的元素个数)、像素进出栈结构的次数以及填充区域内部所含像素总数。表I对于图4,两种算法的性能比较
权利要求
1.本发明提出了ー种解决种子填充算法中像素多次出入栈问题的方法,可防止某些像素多次出入栈结构,从而有效减少栈结构中元素的数量以及提高算法的执行效率;其特征在于首先,将种子像素置成区域填充颜色,并压入栈结构;然后,当栈非空时重复执行如下两个步骤 步骤ー栈顶像素出栈; 步骤ニ按左、上、右、下的顺序检查与出栈像素相邻的四个像素,若其中某个像素未置成填充区域所要求的顔色且不属于边界像素,则将该像素置成区域填充颜色,并入栈。
全文摘要
本发明提出了一种解决种子填充算法中像素多次出入栈问题的方法,可概括为首先,将种子像素置为填充区域所要求的颜色(简称区域填充颜色)并压入栈结构;然后,在栈非空的前提下,重复执行栈顶像素出栈和将栈顶像素周边符合入栈条件的像素置为区域填充颜色并入栈这两步操作。该方法能够有效解决简单的种子填充算法中由于某些像素多次出入栈结构从而降低算法效率的问题。
文档编号G06T1/60GK102693525SQ20121013973
公开日2012年9月26日 申请日期2012年5月8日 优先权日2012年5月8日
发明者刘运龙, 毛峡, 薛雨丽, 陈立江 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1