区域填充
一、
1、区域:指已经表示成点阵形式的填充图形,是像素的集合
2、区域填充:指将区域内的一点(称种子点)赋予给定颜色,然后将这种颜色扩展到整个区域内的过程。
3、区域可采用内点表示和边界表示两种表现形式
1>内点表示:枚举出区域内部的所有像素,内部的所有像素着同一个颜色,边界像素着与内部像素不同的颜色
2>边界表示:枚举出边界上的所有像素,边界上的所有像素着同一个颜色,内部像素边界像素着与边界像素不同的颜色。
4、区域填充算法要求区域是连通的,因为只有在连通区域中,才能将种子点的颜色扩展到区域内的其它点。
二、简单四连通种子填充算法(区域填充递归算法)
1、算法原理:假设在多边形区域内部有一像素已知,由此出发找到区域内的所有像素,用一定的颜色来填充。
2、使用栈结构来实现简单的种子填充算法
算法原理如下:
种子像素入栈,当栈非空时重复执行如下三步操作:
1>栈顶像素出栈
2>将出栈像素置成要填充色
3>按左、上、右、下顺序检查与栈像素相邻的四个像素,若其中某个像素不在边界且未置成填充色,则把该像素入栈。
不足之处:
1>一些像素会长期在栈内,占空间
2>递归执行,算法简单,但效率不高。区域内每一像素都引进一次递归,进/出栈,费时费内存
伪代码:
Flood_Fill_4(x, y, G0, G1)
{
if(GetPixel(x,y) ==G0 ) // GetPixel(x,y) 返回(x,y)的颜色
{
SetPixel(x, y, G1); //将(x,y)的添上颜色G1
Flood_Fill_4(x-1, y, G0, G1);
Flood_Fill_4(x, y+1, G0, G1);
Flood_Fill_4(x+1, y, G0, G1);
Flood_Fill_4(x, y-1, G0, G1);
}
}
三、多边形扫描转换与区域填充小结
(1)基本思想不同
多边形扫描转换是指将多边形的顶点表示转化为点阵表示
区域填充只改变区域的填充颜色,不改变区域表示方法
(2)基本条件不同
扫描转换是从多边形的顶点(边界)出发,利用多种形式的连贯性进行填充的(需要知道多边形的边界)
在区域填充算法中,要求给定区域内一点作为种子点,然后从这一点根据连通性将新的颜色扩散到整个区域。(不仅需要知道边界,还需要知道种子点)
反走样
一、
1、走样定义:是光栅显示的一种固有性质,(如锯齿)。
2、产生走样的原因:像素本质上的离散性
3、走样现象:
1>光栅图形产生的阶梯型(锯齿型)
2>图形中包含微小的物体时,这些物体在静态图形中容易被丢弃或忽略(小物体由于“走样”而消失)
二、反走样技术
1、用于减少或消除走样效果的技术,称为反走样
2、采用分辨率更高的显示设备,对解决走样现象有所帮助,因为可以使锯齿相对物体会更小一些
使其模糊
3、两种反走样方法
1>非加权区域采样方法(每个像素的权值是一样的):
根据物体的覆盖率计算像素的颜色。覆盖率是指某个像素区域被物体覆盖的比例。(覆盖率越大,颜色越亮)
2>加权区域采样方法
更符合人视觉系统对图像信息的处理方式,反走样效果更好