区域填充算法的研究

发布时间 : 星期二 文章区域填充算法的研究更新完毕开始阅读

区域填充算法的探究

摘要

区域填充算法是计算机图形学的一个重要研究课题.传统的区域填充算法存在填充结果不完备及算法效率不高的问题,在分析了两种传统区域填充算法的原理的基础上,详细阐述了四种改进的区域填充算法,并对算法的效率性能进行比较分析,指明了区域填充算法未来的研究热点,着重探究区域填充算法尤其是扫描线种子填充算法和种子填充算法近年来的发展状况,比较它们之间的优点与足,对图形学的区域填充算法有更深入的理解介绍种子填充算法及其改进算法。 关键词:区域填充;填充算法;扫描线算法;种子填充算法

本文由天空乐园大学生旅游网整理分享

1 引言

区域填充是指用不同的颜色、灰度、线条或符号填充一个有界区域,该区域可以是带孔的,也可以是不带孔的.它是计算机图形学的一项重要内容,在交互式图形设计、真实感图形显示、计算机辅助设计、图形分析等领域有着广泛的应用,一直是研究的热点.传统的区域填充算法有两种,一种是通过确定横跨区域的扫描线的覆盖间隔来填充的扫描线算法,另一种是从给定的位置开始填充直到指定的边界为止的种子填充算法.扫描线算法主要用来填充比较简单的标准多边形区域,比如圆、椭圆以及其他一些简单的多边形,它对轮廓线的形状有一定的要求,在处理复杂区域时往往失效.种子填充算法可以解决边界比较复的多边形区域填充问题,它必须首先确定一个或者多个区域内部的点作为种子点,并赋予填充色,然后以该点为起点,用四向连通方法或八向连通方法找到区域内的所有点填充。扫描线算法在处理带水平边的凹拐点时不能正确填充,这是该算法的一个突出问题,但由于利用了扫描线上象素之问的连贯性,因此具有较高的效率.最简单直观的种子填充算法采用递归方法,由于进行大量的出入栈操作,因此效率很低,在填充较大的区域时,要求分配较大的堆栈空问,不仅浪费了内存,也可能出现堆栈溢出现象.填充结果的完备性和填充过程的高效高速是区域填充算法的度量标准.在传统区域填充算法的基础上,很多文献提出了更加正确高效的算法.本文介绍四种改进的区域填充算法,并对其进行比较分析。

2 区域填充基本知识点介绍

2.1多边形扫描转换

在计算机图形学中,多边形有两种重要的表示方法:顶点表示和点阵表示。顶点表示是用多边形的顶点序列来表示多边形,特点直观、几何意义强、占内存少,易于进行几何变换,但由于它没有明确指出哪些像素在多边形内,故不能直接用于面着色。点阵表示是用位于多边形内的像素集合来刻画多边形。这种表示丢失了许多几何信息,但便于帧缓冲器表示图形,是面着色所需要的图形表示形式。光栅图形的一个基本问题是把多边形的顶点表示转换为点阵表示。这种转换称为多边形的扫描转换。

多边形可分为凸多边形、凹多边形、含内环多边形。 (1)凸多边形:任意两顶点间的连线均在多边形内。

(2)凹多边形:任意两顶点间的连线有不在多边形内的部分。 (3)含内环多边形:多边形内包含有封闭多边形。

扫描线多边形区域填充算法是按扫描线顺序,计算扫描线与多边形的相交区间,再用要求的颜色显示这些区间的像素。区间的端点可以通过计算扫描线与多边形边界线的交点获得。对于一条扫描线,多边形的填充过程可以分为4个步骤。 (1)求交:计算扫描线与多边形各边的交点。 (2)排序:把所有交点按x值递增顺序排序。

(3)配对:第一个与第二个,第三个与第四个等,每对交点代表扫描线与多边形的一个相交区间。

(4)填色:把相交区间内的像素置成多边形颜色,把相交区间外的像素置成背景色。

多边形扫描转换算法步骤如下:

1

(1)初始化:构造边表。

(2)对边表进行排序,构造活性边表。

(3)对每条扫描线对应的活性边表中求交点。 (4)判断交点类型,并两两配对。

(5)对符合条件的交点之间用画线方式填充。 (6)下一条扫描线,直至满足扫描结束条件。

2.2区域填充算法

这里的区域指已表示成点阵形式的填充图形,是像素的集合。区域有两种表示形式:内点表示和边界表示,如图1所示。内点表示,即区域内的所有像素有相同颜色;边界表示,即区域的边界点有相同颜色。区域填充指先将区域的一点赋予指定的颜色,然后将该颜色扩展到整个区域的过程。

○表示边界点●表示内点

图1 区域的内点表示和边界表示 图2 4连通区域和8连通区域

区域填充算法要求区域是连通的。区域可分为4向连通区域和8向连通区域,如图2所示。4向连通区域指的是从区域上一点出发,可通过四个方向,即上、下、左、右移动的组合,在不越出区域的前提下,到达区域内的任意像素;8向连通区域指的是从区域内每一像素出发,可通过8个方向,即上、下、左、右、左上、右上、左下、右下这八个方向的移动的组合来到达。 2.2.1区域填充的扫描线算法

扫描线算法是按照扫描线顺序,计算扫描线与多边形的相交区间,再用颜色显示这个区间,区间的端点则是扫描线与多边形边界线的交点,可以通过计算获得.要完成这个扫描转换过程,首先计算扫描线与多边形各边的交点,然后对求得的交点进行排序,接下来利用奇偶配对求出扫描线与边形的相交区间,最后对这些相交区问填色.由于扫描线是一组连续的水平平行的直线,因此在计算其与多边形的交点时较容易,因为交点的纵坐标已知,即扫描线的编号,则可根据多边形的数学表达式求出交点的横坐标.对交点进行排序时采用横坐标由小到大的顺序,便于相交区间的确定.对于已经排序的交点,使用奇偶配对法确定相交区间,如:交点a。与交点a2为一对,交点a。与交点a4为一对,代表直线ala2和a3a4是扫描线与多边形的相交区间,al-,a2、a。、a4是相交区间的各端点.填充时则可以直接用填充色将相交区问的各端点连接.

扫描线算法采用邻接链表的数据结构,每条扫描线在该表中都对应有一项,利用初始边表OET与活动边表AET记录扫描线与多边形相交的情况.该算法效率较高,但填充结果的完备性不好,在处理复杂区域时,往往不能正确填充.

算法的基本过程如下:给定种子点(x,y),首先填充种子点所在扫描线上给定区域的一个区段,然后确定与这一区段相连通的上、下两条扫描线上位于给定区域内的区段,并依次保存下来。反复这个过程,直到填充结束。

2

图3扫描线填充算法流程图

区域填充的扫描线算法可由下列3个步骤实现。 Step1:求出每条水平扫描线与多边形各边的交点。

Step2:将每条水平扫描线上的交点按X值递增的顺序排列。 Step3:将交点的交点配成“交点对”。 Step4:在交点对间填色。 2.2.2区域填充的种子算法

种子填充算法又称为边界填充算法。其基本思想是:种子填充算法是从多边形区域内部的一点开始,由此出发找到区域内的所有像素.该算法采用的边界定义是:区域边界上所有像素均具有某个特定的颜色值;区域内部所有像素均不取这一特定颜色;而边界外的像素则可具有与边界相同的颜色值.根据边界定义,算法从多边形区域内部的一个像素点开始,先检测该点的颜色,如果它与边界色和填充色均不相同,就用填充色填充该点.然后检测相邻位置的各个像素点,以确定它们是否与边界色和填充色均相同,若不相同,就填充该相邻点.这个过程持续到已经检测完区边界范围内的所有像素点为止.

从当前点检测相邻像素有4向连通和8向连通两种方法.4向连通方法指的是从区域上一点出发,可通过上、下、左、右4个方向的移动,在不越出区域的前提下,到达区域内的任意像素点;8向连通方法则可以通过左、右、上、下、左上、右上、左下、右下这8个方向的移动来到达.

种子填充算法简单,易于实现,可以处理复杂区域的填充问题,填充结果的完备性较好.但是这种算法需要很大的存储空间以实现栈结构,同一个像素多次人栈和出栈,所花费的时间也很多,导致算法效率不高

种子填充算法常用四连通域和八连通域技术进行填充操作。

3

联系合同范文客服:xxxxx#qq.com(#替换为@)