一、区域概念
1) 区域:指相互连通的一组象素的集合。区域通常由一个封闭的轮廓线来定义,处于一个封闭轮廓线内的所有象素点构成一个区域。
2) 区域填充:将区域内的象素置成新的颜色,新的颜色可以是常数,表示填以某种颜色;也可以是变量,表示填充的是图案。
3) 区域填充需解决的问题:
a)确定需要填充哪些象素;b)确定用什么颜色;
4) 区域的表示形式: 顶点表示法、 点阵表示法、 内点表示法、 边界表示法
5) 区域填充的算法类别:
a) 种子填充(递归算法): 简单种子填充、扫描线种子填充
b)有序边表法(适于软件实现):对每个元素值访问一次,输入输出要求最少
c)边填充算法(正负相消法,适合硬件实现): 边填充、栅栏填充、边标志法
二、种子填充算法
1. 区域划分
区域是连通的 -- 只有在连通的区域,才可能将种子点的颜色扩散到区域的其他点。
连通性 -- 区域中的两点,在某种规则下通过运动可以相互到达。
连通区域分类 -- 四连通区域、八连通区域
区域限制 -- 四连通区域可以看作是八连通区域,但它看作是四连通区域或看作是八连通区域时,边界是不同的。看作是四连通区域时,边界只需要是八连通;而作为八连通区域,边界必须是四连通的。
1. 简单种子填充算法
算法思想:给定区域中一种子点(x,y),首先判断该点是否是区域内一点,若是,则将该点填充为新颜色,然后将周围的四个点作为新的种子进行同样的处理,通过这种扩散完成对整个区域的填充 (边界、内点,颜色不同)
算法前提:1). 区域用点阵方法表示 ;2). 区域内部像素具有同一种颜色,而边界像素具有另一种颜色
算法特点:算法基于连通域内像素的连贯性,以递归方式确定区域内部点与边界点,而不涉及区域外部的点,从而有效地提高了算法的效率。
2. 简单种子填充算法实现 -- 内点表示
3. 简单种子填充算法实现 -- 边界表示
4. 简单种子填充算法 -- 边界表示 -- 栈实现