第6讲 扫描转换与区域填充
区域填充的递归算法 已知条件: G为一内点表示的区域 (x,y)为区域内一点 old_color为G的原色 现取(x,y)为种子点对区域G进行填充: 即先置像素(x,y)的颜色为new_color 然后逐步将整个区域G都置为同样的颜色。 区域填充的递归算法 步骤如下: 种子像素入栈,当栈非空时,执行如下三步操作: (1)栈顶像素出栈; (2)将出栈像素置成多边形色; (3)按上、下、左、右的顺序检查与出栈像素相邻的四个像素,若其中某个像素不在边界上且未置成多边形色,则把该像素入栈。 s1 2 3 4 9 8 7 6 5 11 12 13 14 10 递归算法 例:多边形P0(1,5)P1(5,5)P2(7,3)P3(7,1)P4(1,1) 种子点为(3,3) 搜索的方向是上、下、左、右。 内点表示的四连通区域的递归填充算法 void FloodFill4(int x,int y,int oldcolor,int newcolor) { if(getpixel(x,y)==oldcolor) //属于区域内点oldcolor { drawpixel(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); } } 递归算法 边界表示的四连通区域的递归填充算法 void BoundaryFill4(int x,int y,int boundarycolor,int newcolor) { int color; if(color!=newcolor color!=boundarycolor) { drawpixel(x,y,newcolor); BoundaryFill4 (x,y+1, boundarycolor,newcolor); BoundaryFill4 (x,y-1, boundarycolor,newcolor); BoundaryFill4 (x-1,y, boundarycolor,newcolor); BoundaryFill4 (x+1,y, boundarycolor,newcolor); } } 递归算法 递归算法 假设在多边形内一个像素已知,由此出发利用连通性找到区域内的所有像素。 内点检测条件 用来判断任何一个检测像素点(x,y)是不是尚未填充 内点表示 边界表示 if(getpixel(x,y)!=边界色 getpixel(x,y)!=填充色) if(getpixel(x,y)==原色) 递归算法特点 (1) 有些像素会入栈多次,降低算 法效率;栈结构占空间。 (2) 递归执行,算法简单,但效率 不高,区域内每一像素都引起 一次递归,进/出栈。 改进算法,减少递归次数,提高效率。 方法之一使用扫描线填充算法; 扫描线填充算法 算法思想 扫描线填充算法 首先填充当前扫描线上的位于给定区域内的一区段 然后确定与这一区段相邻的上下两条扫描线上位于该区段内是否存在需要填充的新区段 如果存在,则依次把它们保存起来。反复这个过程,直到所保存的各区段都填充完毕。 算法思想 算法实现 1、初始化堆栈。 2、种子压入堆栈。 3、while(堆栈非空) { (1)从堆栈弹出种子像素。 (2)如果种子像素尚未填充,则: a.求出种子区段:xleft、xright; b.填充整个区段。 c.检查相邻的上扫描线的xleft≤x≤xright区间内,是否存在需要填充的新区段,如果存在的话,则把每个新区段在xleft≤x≤xright范围内的最右边的象素,作为新的种子象素依次压入堆栈。 d.检查相邻的下扫描线的xleft≤x≤xright区间内,是否存在需要填充的新区段,如果存在的话,则把每个新区段在 xleft≤x≤xright范围内的最右边的象素,作为新的种子象素依次压入堆栈。 } 算法演示 扫描线填充算法 1、该算法考虑了扫描线上象素的相关性,种子象素不再代表一个孤立的象素,而是代表一个尚未
您可能关注的文档
最近下载
- 2025年房地产经纪人长租公寓市场调研报告撰写与数据分析能力专题试卷及解析.pdf VIP
- 2025年金融风险管理师风险资本与资本结构优化专题试卷及解析.pdf VIP
- 2025年信息系统安全专家数据脱敏与数据治理专题试卷及解析.pdf VIP
- 2025年演出经纪人演出票务销售数据统计与透视表分析专题试卷及解析.pdf VIP
- 2025年房地产经纪人商品房市场调研方法与数据分析专题试卷及解析.pdf VIP
- 2025年互联网营销师价格策略与消费趋势分析专题试卷及解析.pdf VIP
- CATIA V5 C# 二次开发:CATIAV5API基础与C#接口调用.pdf VIP
- 2022年贵州省贵阳市高考理科数学一模试卷及答案解析.pdf
- DB32T 5309-2025普通国省道智慧公路建设总体技术规范.pdf VIP
- (九华山旅游攻略图片.doc VIP
原创力文档

文档评论(0)