CG-光栅图形学区域填充算法-学习笔记

一、区域填充

1. 与多边形扫描转换算法对比

1)基本思想不同

a. 多边形扫描转换是指将多边形的顶点表示转化为点阵表示;

b. 区域填充只改变区域的填充颜色,不改变区域表示方法;

2)基本条件不同

a. 在区域填充算法中,要求给定区域内一点作为种子点,然后从这一点根据连通性将新的颜色扩散到整个区域;

b. 扫描转换多边形是从多边形的边界(顶点)信息出发,利用多种形式的连贯性进行填充的;

2. 基本概念

1)区域——指已经表示成点阵形式的填充图形,是像素的几何;

2)区域填充——指将区域内的一点(常称种子点)赋予给定颜色,然后将这种颜色扩展到整个区域内的过程。

3)区域可采用内点表示和边界表示两种表示形式

内点表示:枚举出区域内部的所有像素,内部的所有像素着同一个颜色,边界像素着与内部像素不同的颜色;

边界表示:枚举出边界上的所有像素,边界上的所有像素着同一个颜色,内部像素着与边界像素不同的颜色;

4)4连通区域和8连通区域

3. 简单四连通种子填充算法(区域填充递归算法)

1)原理:假设在多边形区域内部有一像素已知,由此出发找到区域内的所有像素,用一定的颜色或灰度来填充;假设区域采用边界定义,即区域边界上所有像素均具有某个特定值,区域内部所有像素均不取这一特定值,而边界外的像素则可具有与边界相同的值;

2)使用栈结构来实现简单的种子填充算法:

             种子像素入栈,当栈非空时重复执行如下三步操作:

      a)栈顶像素出栈;

      b)将出栈像素置成要填充色;

      c)按左、上、右、下顺序检查与栈像素相邻的四个像素,若其中某个像素不在边界且未置成填充色,则把该像素入栈;

3)示例图

【说明】八连通种子填充算法只在第三步不同,依次按八个方向检查入栈像素。

4. 种子填充算法的不足之处

1)有些像素入栈多次,降低算法效率;栈结构占空间;

2)递归执行,算法简单,但效率不高;

原文地址:https://www.cnblogs.com/mzyan/p/9707450.html