j计算机图形学(区域填充).doc
文本预览下载声明
西北师范大学计算机科学与工程学院学生实验报告
学号 专业 计算机科学与技术 班级 师范(1)班 姓名 课程名称 图形学 课程类型 实验名称 实验二 区域填充 实验目的:(1)掌握区域填充的基本算法原理;
(2)实践与巩固区域填充的基本生成算法;
(3)掌握这些算法的原理及实现;
(4)编程实现区域填充算法,得出相应的输出图形。 实验内容:
什么是区域填充?
(1)区域填充即给出一个区域的边界,要求对边界范围内的所有像素单元赋予指定的颜色代码;
(2)区域填充中最常用的是多边形填色。多边形填色即给出一个多边形的边界,要求对多边形边界范围的所有像素单元赋予指定的色代码;
(3)要完成这个任务,一个首要的问题就是判断一个像素是在多边形内还是外。
扫描线种子填充算法
1.基本思想:种子填充算法采用的边界定义是区域边界上所有像素均具有某个特定的颜色值,区域内部所有像素均不取这一特定颜色,而边界外的像素则可具有与边界相同的颜色值。程序从(x,y)开始,先检测该点的颜色,如果它与边界色和填充色均不相同,就用填充色填充该点,然后检测相邻位置,以确定它们是不是边界色和填充色,若不是,就填充该相邻点。从这个过程延续到已检测完区域边界范围内的所有像素为止。
2.实现方法:从当前点检测相邻像素有两种方法,四向连通和八向连通。
(1)四向连通方法指的是从区域上一点出发,可以通过四个方向,即上、下、左、右移 动的组合,在不越出区域的前提下,检测区域内的任意像素;
(2)八向连通方法指的是区域内的每一个像素,可以通过左右上下左上右上左下右下这8个方向的移动的组合来检测。
3.实现过程:扫描线种子填充算法的基本过程如下:当给定种子点(x, y)时,首先分别向左和向右两个方向填充种子点所在扫描线上的位于给定区域的一个区段,同时记下这个区段的范围[xLeft, xRight],然后确定与这一区段相连通的上、下两条扫描线上位于给定区域内的区段,并依次保存下来。反复这个过程,直到填充结束。
扫描线种子填充算法可由下列四个步骤实现:
(1) 初始化一个空的栈用于存放种子点,将种子点(x, y)入栈;
(2) 判断栈是否为空,如果栈为空则结束算法,否则取出栈顶元素作为当前扫描线的种子点(x, y),y是当前的扫描线;
(3) 从种子点(x, y)出发,沿当前扫描线向左、右两个方向填充,直到边界。分别标记区段的左、右端点坐标为xLeft和xRight;
(4) 分别检查与当前扫描线相邻的y - 1和y + 1两条扫描线在区间[xLeft, xRight]中的像素,从xLeft开始向xRight方向搜索,若存在非边界且未填充的像素点,则找出这些相邻的像素点中最右边的一个,并将其作为种子点压入栈中,然后返回第(2)步
实验总结:
通过本次实验本人掌握常用图形程序设计、菜单设计等方法和编程实现区域填充算法,得出相应的输出图形;
区域填充算法的递归算法原理很简单,关键是选择扫描线算法来减少递归次数,提高效率。
实验评语:
实验成绩 教师签名
显示全部