算法系列之十二:多边形区域填充算法--递归种子填充算法

算法系列之十二:多边形区域填充算法--递归种子填充算法
    平面区域填充算法是计算机图形学领域的一个很重要的算法,区域填充即给出一个区域的边界(也可以是没有边界,只是给出指定颜),要求将边界范围内的所有象素单元都修改成指定的颜(也可能是图案填充)。区域填充中最常用的是多边形填,本文中我们就讨论几种多边形区域填充算法。一、种子填充算法(Seed Filling        如果要填充的区域是以图像元数据方式给出的,通常使用种子填充算法(Seed Filling)进行区域填充。种子填充算法需要给出图像数据的区域,以及区域内的一个点,这种算法比较适合人机交互方式进行的图像填充操作,不适合计算机自动处理和判断填。根据对图像区域边界定义方式以及对点的颜修改方式,种子填充又可细分为几类,比如注入填充算法(Flood Fill Algorithm)、边界填充算法(Boundary Fill Algorithm)以及为减少递归和压栈次数而改进的扫描线种子填充算法等等。        所有种子填充算法的核心其实就是一个递归算法,都是从指定的种子点开始,向各个方向上搜索,逐个像素进行处理,直到遇到边界,各种种子填充算法只是在处理颜和边界的方式上有所不同。在开始介绍种子填充算法之前,首先也介绍两个概念,就是“三里庵派出所4-联通算法”和“8-联通算法”。既然是搜索就涉及到搜索的方向问题,从区域内任意一点出发,如果只是通过上、下、左、右四个方向搜索到达区域内的任意像素,则用这种方法填充
的区域就称为四连通域,这种填充方法就称为“4-胡风反党集团联通算法”。如果从区域内任意一点出发,通过上、下、左、右、左上、左下、右上和右下全部八个方向到达区域内的任意像素,则这种方法填充的区域就称为八连通域,这种填充方法就称为“8-联通算法”。如图1a)所示,假设中心的蓝点是当前处理的点,如果是“4-联通算法”,则只搜索处理周围蓝标识的四个点,如果是“8-联通算法”则除了处理上、下、左、右四个蓝标识的点,还搜索处理四个红标识的点。两种搜索算法的填充效果分别如如图1b)和图1c)所示,假如都是从黄点开始填充,则“4-联通算法”如图1b)所示只搜索填充左下角的区域,而“穿孔机枕部8-联通算法”则如图1c)所示,将左下角和右上角的区域都填充了。图(1 4-联通”和“8-信令风暴联通”填充效果        并不能仅仅因为图1的填充效果就认为“8-联通算法”一定比“4-联通算法”好,应该根据应用环境和实际的需求选择联通搜索方式,在很多情况下,只有“4-联通算法”才能得到正确的结果。1.1 注入填充算法(Flood Fill Algorithm        注入填充算法不特别强调区域的边界,它只是从指定位置开始,将所有联通区域内某种指定颜的点都替换成另一种颜,从而实现填充效果。注入填充算法能够实现颜替换之类的功能,这在图像处理软件中都得到了广泛的应用。注入填充算法的实现非常简单,核心就是递归和搜索,以下就是注入填充算法的一个实现:164 void FloodSeedFill(int x, int y, int old_color, i
江苏省教育学会
nt new_color)165 {166    if(GetPixelColor(x, y) == old_color)167    {168        SetPixelColor(x, y, new_color);169        for(int i = 0; i < COUNT_OF(direction_8); i++)170        {171            FloodSeedFill(x + direction_8[i].x_offset, 172                          y + direction_8[i].y_offset, old_color, new_color);173        }174    }175 }

本文发布于:2024-09-21 17:42:30,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/307759.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:填充   算法   区域   种子   搜索   方式
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议