• 区域填充


    区域填充

    区域---指已经表示成点阵形式的填充图形,是象素的集合

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

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

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

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

    区域填充算法要求区域是连通的,因为只有在连通区域中, 才可能将种子点的颜色扩展到区域内的其它点。

    区域可分为4向连通区域和8向连通区域

    4向连通区域指的是从区域上一点出发,可通过四个方向 ,即上、下、左、右移动的组合,在不越出区域的前提 下,到达区域内的任意象素

    8向连通区域指的是从区域内每一象素出发,可通过八个方向,即上、下、左、右、左上、右上、左下、右下这 八个方向的移动的组合来到达

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

    种子填充算法的原理是:假设在多边形区域内部有一像 素已知,由此出发找到区域内的所有像素,用一定的颜色或灰度来填充

    假设区域采用边界定义,即区域边界上所有像素均具有某 个特定值,区域内部所有像素均不取这一特定值,而边界外的像素则可具有与边界相同的值

    考虑区域的四向连通,即从区域上一点出发,可通过四个方 向,即上、下、左、右移动的组合,在不越出区域的前提下 ,到达区域内的任意像素。

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

    算法原理如下:

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

    (1)栈顶像素出栈

    (2)将出栈像素置成要填充色

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

     

    种子填充算法的不足之处

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

    (2)递归执行,算法简单,但效率不高。区域内每一像素 都引进一次递归,进/出栈,费时费内存

    (3)改进算法,减少递归次数,提高效率

    可以采用区域填充的扫描线算法

    多边形的扫描转换与区域填充算法小结

    基本思想不同

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

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

     基本条件不同

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

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

    扫描转换区域填充的核心是知道多边形的边界,要得到多 边形内部的像素集,有多种方法。其中扫描线算法是利用 一套特殊的数据结构,避免求交,然后一条条扫描线确定

    区域填充条件更强一些,不但知道边界,而且还知道区域 内的一点,可以利用四连通或八连通区域不断往外扩展

  • 相关阅读:
    C#基于Socket的简单聊天室实践
    进程及进程间通信
    一次千万级别的SQL查询简单优化体验
    Attribute和Property
    解析Resources.arsc
    数据挖掘十大算法之决策树详解(2)
    数据挖掘十大算法之决策树详解(1)
    线性回归浅谈(Linear Regression)
    贝叶斯推断及其互联网应用(三):拼写检查
    贝叶斯推断及其互联网应用(二):过滤垃圾邮件
  • 原文地址:https://www.cnblogs.com/cnblog-wuran/p/9769238.html
Copyright © 2020-2023  润新知