预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共60页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

边缘填充算法以扫描线为中心的边缘填充算法以扫描线为中心的边缘填充算法以扫描线为中心的边缘填充算法以扫描线为中心的边缘填充算法以扫描线为中心的边缘填充算法以扫描线为中心的边缘填充算法以扫描线为中心的边缘填充算法以扫描线为中心的边缘填充算法以扫描线为中心的边缘填充算法以扫描线为中心的边缘填充算法以边为中心的边缘填充算法以边为中心的边缘填充算法以边为中心的边缘填充算法以边为中心的边缘填充算法以边为中心的边缘填充算法以边为中心的边缘填充算法优点:与扫描线算法相比,边缘填充算法的数据结构和程序结构简单。缺点:但该算法需要对帧缓存的大量象素反复赋值,速度较慢。栅栏填充算法栅栏填充算法向左求余向左求余向右求余边标志填充算法(1)边标志填充算法(2)扫描线算法:对每条扫描线,首先计算它与扇形区域边界的交点,再把配对交点之间的像素用指定颜色填充。区域(种子)填充是指先将区域内的一点(种子点)赋予给定颜色,然后将颜色扩充到整个区域内的过程(染色过程).区域:已经表示成点阵形式的象素集合,具有相同颜色.与多边形扫描转换的比较基本思想边界要求基于的条件区域的两种表示:内点表示、边界表示.边界表示:给位于边界上的所有象素着同一种颜色(特征值),而区域内着不同的颜色.种子填充算法要求:区域具有一定的连通性:4连通或8连通。4连通区域:取区域内任意两点,在该区域内(不能通过区域外的点),若从其中一点出发,通过上、下、左、右四种运动可到达另一点时,则称该区域为4连通区域.4连通运动方向区域连通性(3)区域连通性(4)种子填充算法算法思想:设G为一内点表示的区域,(x,y)是G内一点,以(x,y)为种子点,先将(x,y)置为newcolor,然后对(x,y)的4(或8)领域进行递归处理,逐步将整个区域G置为newcolor.voidFloodFill4(intx,inty,intoldColor,intnewColor){if(GetPixel(x,y)==oldColor){PutPixel(x,y,newColor);FloodFill4(x,y+1,oldColor,newColor);FloodFill4(x,y-1,oldColor,newColor);FloodFill4(x-1,y,oldColor,newColor);FloodFill4(x+1,y,oldColor,newColor);}}1优点:算法原理和程序都很简单缺点:效率不高,原因是递归次数太多,区域内的每个象素都引起一次递归,即系统堆栈的一次进出操作,费时费内存。思想:(1)填充并确定种子点所在的区段;(2)将种子区段压栈;(3)若堆栈非空,栈顶区段出栈;否则算法结束;(4)填充并确定新的区段,将其区段信息压栈,返回第(3)步。扫描线种子填充算法流程(1)扫描线种子填充算法流程(2)扫描线种子填充算法流程(3)扫描线种子填充算法的改进思路PatternfillingTwoissuesRelativeanchor(相对锚定)Absoluteanchor(绝对锚定)writemode(写模式)Patternfillingwithoutrepeatedscanconversion(a)MountainsceneThickprimitives在产生一定宽度的线条时,只需用一个“刷子”来替代单象素直线段中扫描生成的单象素即可.Replicatingpixels(1)(线刷子)原理:假设直线斜率在[-1,+1]之间,如图(a)所示.这时可把刷子置成垂直方向图(b).首先将刷子的中点对准直线的一个端点,从该点开始,让刷子中点沿直线的轨迹往直线的另一端点平移即可“刷出”具有一定宽度的直线.如图(c).缺点:(1)线的始末端总是水平或垂直的.(2)线的粗细不一样.水平和垂直线最粗,45斜线最细.(3)当线宽为偶数个时,绘制的线条宽度不精确.方形刷子是一个宽度为指定线宽的正方形.将正方形的中心对准直线作平移运动即可.TheMovingPen(方形刷子)该方法将会重复的写象素.为避免重复,可采用与活化边表类似的技术.j先算出直线的四个角点的坐标,将其顺序连接成一个四边形,再用区域填充的方法将四边形填充.如虚线、实线、点划线等不同线型的处理.上机作业