CN101826213A - 一种基于链码描述的区域填充方法 - Google Patents
一种基于链码描述的区域填充方法 Download PDFInfo
- Publication number
- CN101826213A CN101826213A CN 201010151745 CN201010151745A CN101826213A CN 101826213 A CN101826213 A CN 101826213A CN 201010151745 CN201010151745 CN 201010151745 CN 201010151745 A CN201010151745 A CN 201010151745A CN 101826213 A CN101826213 A CN 101826213A
- Authority
- CN
- China
- Prior art keywords
- point
- color
- outline
- fill
- isolated
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Abstract
本发明涉及一种基于链码描述的区域填充方法。现有的方法处理速度慢、占用的存储空间大。本发明方法首先用八邻域轮廓跟踪算法逐个查找填充区域的轮廓点,把找到的轮廓点P(xi,yi)保存到链表Point中,并根据轮廓点的方向码DIn和DOut确定该点的类型;然后判断链表是否为空,不为空的话则从链表取出一个轮廓点,判断轮廓点P(xi,yi)的颜色,最后根据当前轮廓点的类型,进行扫描线填充。本发明方法处理速度快,提高了区域填充的效率。
Description
技术领域
本发明属于图形图像区域填充技术领域,具体涉及一种基于链码描述的区域填充方法。
背景技术
区域填充技术是计算机图形图像学研究的基本内容之一,其指的是在输出平面的闭合区域内完整地填充某种颜色或图案的过程,其亦可用于遍历指定区域内部的像素,在交互式图形设计、动画和计算机辅助设计等领域有着广泛的应用。区域填充算法的填充效率是计算机图形图像学中的关键问题之一。
目前基本的区域填充方法有两个:扫描线种子填充方法和简单的递归种子填充方法。
递归种子填充方法就是在封闭区域内部有一像素已知,由此出发找到区域内的所有像素。区域可以由内部点或边界来定义,一般来说是采用边界定义,即边界区域上所有像素被置为特定值,而区域内部所有的像素均不取这个值。区域内每一个像素可以通过上、下、左、右四个方向组合或者通过上、下、左、右以及四个对角线方向的移动组合到达。递归算法的优点是方法简单、表达清楚,可以用于内点表示或边界表示的四连通或八连通区域。但该方法可能会把太多的像素压入堆栈而使堆栈变得很大,有些像素甚至会多次入栈使堆栈内经常包含一些重复的和不必要的信息,这一方面降低了算法的效率,另一方面还要求很大的存储空间以实现堆栈结构。所以该方法一般用于较小区域的填充。
扫描线种子填充方法基本原理就是在任一个扫描线与封闭区域的相交区间中只取一个种子像素,然后向左右两个方向填充。其很好地利用了区域在扫描线上的连贯性和相邻扫描线之间的连贯性,克服了递归方法的缺点。但扫描线方法中存在大量像素点颜色判读的重复操作,也存在着不必要的回溯操作。很多改进的区域填充扫描线方法对原方法中的堆栈结构进行了修改。但是扫描线方法只能填充边界表示的区域,由于按扫描线方向进行填充,因此很难实现对区域的渐变填充。
发明内容
本发明针对现有技术不足,提出一种基于链码描述的区域填充方法。
本发明方法的具体步骤为:
步骤(1)用八邻域轮廓跟踪算法逐个查找填充区域的轮廓点,把找到的轮廓点P(xi,yi)保存到链表Point中,同时生成该点的方向链码,用DIn表示进入点P(xi,yi)的八方向码,DOut表示从点P(xi,yi)出来的八方向码,其中xi是第i个轮廓点的横坐标,yi是第i个轮廓点的纵坐标;八邻域轮廓跟踪算法为成熟的技术。
步骤(2)根据轮廓点P(xi,yi)的方向码DIn和DOut确定该点的类型,轮廓点的类型包括上方端点、下方端点和孤立点;其中孤立点是指该点是轮廓线的极左点或极右点,并将轮廓点的颜色置为Outline_Color。轮廓点的分类在具体实施方式中有详细说明。
这里用Outline_Color表示轮廓点颜色,Full_Color表示区域填充颜色,Isolated_Color来表示孤立点的颜色;
步骤(3)判断链表Point是否为空,如果链表Point是为空,则结束填充,否则从链表Point取出一个轮廓点,执行步骤(4);
步骤(4)判断当前轮廓点P(xi,yi)的颜色,若已经是Full_Color,则跳过此点,并跳转至步骤(3);否则若颜色为Isolated_Color,将其颜色置为Full_Color,并跳过此点,跳转至步骤(3);否则若颜色为Outline_Color,则跳到步骤(5);
步骤(5)根据当前轮廓点P(xi,yi)的类型,进行扫描线填充,完成填充后跳转至步骤(3):
1)若为上方端点,从轮廓点P(xi,yi)出发,xi保持不变,yi递减一直遇到颜色为Outline_Color的点(xi,yi-n)为止(这里n为从点(xi,yi)开始到遇到颜色为Outline_Color的点时需填充的像素个数),点(xi,yi)和点(xi,yi-n)及它们之间所有的点颜色置为Full_Color;
2)若为下方端点时,从点(xi,yi)出发,xi保持不变,yi递增一直遇到颜色为Outline_Color的点(xi,yi+n)为止(这里n为从点(xi,yi)开始到遇到颜色为Outline_Color的点时需填充的像素个数),点(xi,yi)和点(xi,yi+n)及它们之间所有的点颜色置为Full_Color;
本发明所具有的有益效果:
(1)该方法用方向链码描述填充区域的轮廓线,然后根据进出轮廓点的方向码来判定该点的类型,然后再进行扫描线填充,若是上方端点则扫描线方向向下;若是下方端点则扫描线方向向上;若是孤立点则表明该点位于轮廓的极左或极右,无需进行扫描填充。这样就避免了传统方法需要多次遍历轮廓点,同时需要将已填充的子轮廓线从轮廓线链表中删除的操作,如果要保存原来的轮廓线链表还需要用同样大小的一个链表作为辅助空间。该方法克服了扫描线方法填充中存在大量像素点颜色判读的重复操作,也存在着不必要的回溯操作。
(2)该方法只需一次遍历轮廓点就可完成对轮廓线内部区域的各像素点的填充,克服了种子填充方法需要不断进出堆栈的情况,要求有比较大的堆栈空间,费时费内存,填充稍稍大一些的图形就会出现堆栈溢出现象的缺点。该方法不需要用到堆栈操作,不需要辅助空间,也不存在像素点的重复多次访问的问题,进一步提高了区域填充的效率。
附图说明
图1为轮廓点的方向链码示意图;
图2为八邻域轮廓跟踪查找模型图;
图3为待填充区域图;
图4为填充区域轮廓线的链码图;
图5为轮廓点的孤立点示意图;
图6为上方端点填充过程示意图;
图7为下方端点填充过程示意图。
具体实施方式
以下结合附图对本发明作进一步说明。本发明方法具体包括如下步骤:
步骤(1)用八邻域轮廓跟踪算法逐个查找填充区域的轮廓点,把找到的轮廓点P(xi,yi)保存到链表Point中,同时生成该点的方向链码,DIn表示进入点P(xi,yi)的八方向码和DOut表示从点P(xi,yi)出来的八方向码,其中xi是第i个轮廓点的横坐标,yi是第i个轮廓点的纵坐标;
方向链码就是用1、2、3、4、5、6、7、8代表8个方向,八邻域轮廓跟踪方法以点P(x,y)为当前点,其八邻域内像素的方向可由图1所示的方向链码来表示。八邻域轮廓跟踪算法可以描述为逐行逐列找到图像中最左上方的边界点为起始点。从第一个边界点开始,如图2所示,定义初始的搜索方向为W点的左下方;如果左下方的点是黑点,则为边界点,否则搜索方向顺时针旋转45度。这样一直到找到第一个黑点为止。然后把这个黑点作为新的边界点,在当前搜索方向的基础上逆时针旋转135度,继续用同样的方法继续搜索下一个黑点,直到返回最初的边界点为止。最后获取填充区域的轮廓线,如图4所示。图4是图3所示的待填充区域用八邻域轮廓跟踪方法提取的用方向链码表示的轮廓线。
步骤(2)根据轮廓点P(xi,yi)的方向码DIn和DOut确定该点的类型,类型是指该轮廓点是填充区域的轮廓线的上方端点、下方端点和孤立点,其中孤立点是指该点是轮廓线的极左或极右点。
将轮廓点的颜色置为Outline_Color。这里用Outline_Color表示轮廓点颜色,Full_Color表示区域填充颜色,Isolated_Color来表示孤立点的颜色;
根据轮廓点P(xi,yi)的方向码DIn和DOut确定该点的类型,类型主要是判断该轮廓点的走向。轮廓点的分类见表1,其中T表示区域的上方端点,B表示区域的下方端点,N表示边界中的孤立点,×表示方向链码中不存在的组合。
例如图4中A点的DIn和DOut值分别为1和7,该点的类型就定义为上方端点;而图4中B点的DIn和DOut值分别为7和1,该点的类型就定义为下方端点;而图4中的C点和图5中的点A为孤立点。
表1轮廓点分类表
步骤(3)判断链表Point是否为空,如果链表Point是为空,则结束填充,否则从链表Point取出一个轮廓点,执行步骤(4);
步骤(4)判断当前轮廓点P(xi,yi)的颜色,若已经是Full_Color,则跳过此点,并跳到步骤(3);否则若颜色为Isolated_Color,将其颜色置为Full_Color,并跳过此点,跳到步骤(3);否则若颜色为Outline_Color,则跳到步骤(5);
步骤(5)根据当前轮廓点P(xi,yi)的类型,进行扫描线填充,填充完后跳转至步骤(3)
1)若为上方端点,从点(xi,yi)出发,xi保持不变,yi逐步减一一直遇到颜色为Outline_Color的点(xi,yi-n)为止(这里n为从点(xi,yi)开始遇到颜色为Outline_Color的点时需填充的像素个数),点(xi,yi)和点(xi,yi-n)及它们之间所有的点颜色置为Full_Color。图6所示的是图4中上方端点A点的填充过程;
2)若为下方端点时,从点(xi,yi)出发,xi保持不变,yi逐步加一一直遇到颜色为Outline_Color的点(xi,yi+n)为止(这里n为从点(xi,yi)开始遇到颜色为Outline_Color的点时需填充的像素个数),点(xi,yi)和点(xi,yi+n)及它们之间所有的点颜色置为Full_Color;图7所示的是图4中下方端点B点的填充过程。
Claims (1)
1.一种基于链码描述的区域填充方法,其特征在于该方法包括如下步骤:
步骤(1)用八邻域轮廓跟踪算法逐个查找填充区域的轮廓点,把找到的轮廓点P(xi,yi)保存到链表Point中,同时生成该点的方向链码,用DIn表示进入点P(xi,yi)的八方向码,DOut表示从点P(xi,yi)出来的八方向码,其中xi是第i个轮廓点的横坐标,yi是第i个轮廓点的纵坐标;
步骤(2)根据轮廓点P(xi,yi)的方向码DIn和DOut确定该点的类型,并将轮廓点的颜色置为Outline_Color;轮廓点的类型包括上方端点、下方端点和孤立点;其中孤立点是指该点是轮廓线的极左点或极右点;
其中Outline_Color表示轮廓点颜色,Full_Color表示区域填充颜色,Isolated_Color表示孤立点的颜色;
步骤(3)判断链表Point是否为空:如果链表Point是为空,则结束填充;如果链表Point是为不为空,则从链表Point取出一个轮廓点;
步骤(4)判断当前轮廓点P(xi,yi)的颜色,若该点颜色已经是Full_Color,则跳过此点,并跳转至步骤(3);若该点颜色为Isolated_Color,将其颜色置为Full_Color,并跳过此点,跳转至步骤(3);若该点颜色为Outline_Color,则跳到步骤(5);
步骤(5)根据当前轮廓点P(xi,yi)的类型,进行扫描线填充,完成填充后跳转至步骤(3);扫描线填充的具体方法为:
1)若为上方端点,从轮廓点P(xi,yi)出发,xi保持不变,yi递减一直遇到颜色为Outline_Color的点(xi,yi-n)为止,并把点(xi,yi)、点(xi,yi-n)及它们之间所有的点颜色置为Full_Color;其中n表示从点(xi,yi)开始到遇到颜色为Outline_Color的点时需填充的像素个数;
2)若为下方端点时,从点(xi,yi)出发,xi保持不变,yi递增一直遇到颜色为Outline_Color的点(xi,yi+n)为止,并把点(xi,yi)和点(xi,yi+n)及它们之间所有的点颜色置为Full_Color。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010151745 CN101826213A (zh) | 2010-04-20 | 2010-04-20 | 一种基于链码描述的区域填充方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010151745 CN101826213A (zh) | 2010-04-20 | 2010-04-20 | 一种基于链码描述的区域填充方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101826213A true CN101826213A (zh) | 2010-09-08 |
Family
ID=42690118
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201010151745 Pending CN101826213A (zh) | 2010-04-20 | 2010-04-20 | 一种基于链码描述的区域填充方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101826213A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102073868A (zh) * | 2010-12-28 | 2011-05-25 | 北京航空航天大学 | 基于数字图象闭合轮廓链的图象区域识别方法 |
CN102176205A (zh) * | 2010-12-15 | 2011-09-07 | 中航华东光电有限公司 | 链码图像序列存储的文件格式及解码算法 |
CN102184515A (zh) * | 2011-04-13 | 2011-09-14 | 合肥芯硕半导体有限公司 | 一种在fpga中实现梯形图填充的方法 |
CN103593862A (zh) * | 2013-11-21 | 2014-02-19 | 广东威创视讯科技股份有限公司 | 一种图像显示方法及控制单元 |
CN105204298A (zh) * | 2015-09-30 | 2015-12-30 | 合肥芯碁微电子装备有限公司 | 一种用于直写式光刻机图形发生器的凹四边形fpga硬件填充方法 |
CN106296773A (zh) * | 2016-08-12 | 2017-01-04 | 中国科学院计算技术研究所 | 一种生成多层次矢量图的方法与装置 |
CN115115644A (zh) * | 2022-08-31 | 2022-09-27 | 启东市德立神起重运输机械有限公司 | 一种基于人工智能的车辆焊接缺陷检测方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101201938A (zh) * | 2006-12-13 | 2008-06-18 | 上海吉量软件科技有限公司 | 快速左右边界点配对的填充算法 |
-
2010
- 2010-04-20 CN CN 201010151745 patent/CN101826213A/zh active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101201938A (zh) * | 2006-12-13 | 2008-06-18 | 上海吉量软件科技有限公司 | 快速左右边界点配对的填充算法 |
Non-Patent Citations (1)
Title |
---|
《中国优秀硕士学位论文全文数据库》 20091215 葛伟华 链码生成、区域填充和非均匀光照文本图像的分割算法 全文 1 , 第12期 2 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102176205A (zh) * | 2010-12-15 | 2011-09-07 | 中航华东光电有限公司 | 链码图像序列存储的文件格式及解码算法 |
CN102073868A (zh) * | 2010-12-28 | 2011-05-25 | 北京航空航天大学 | 基于数字图象闭合轮廓链的图象区域识别方法 |
CN102184515A (zh) * | 2011-04-13 | 2011-09-14 | 合肥芯硕半导体有限公司 | 一种在fpga中实现梯形图填充的方法 |
CN102184515B (zh) * | 2011-04-13 | 2013-02-06 | 合肥芯硕半导体有限公司 | 一种在fpga中实现梯形图填充的方法 |
CN103593862A (zh) * | 2013-11-21 | 2014-02-19 | 广东威创视讯科技股份有限公司 | 一种图像显示方法及控制单元 |
CN105204298A (zh) * | 2015-09-30 | 2015-12-30 | 合肥芯碁微电子装备有限公司 | 一种用于直写式光刻机图形发生器的凹四边形fpga硬件填充方法 |
CN106296773A (zh) * | 2016-08-12 | 2017-01-04 | 中国科学院计算技术研究所 | 一种生成多层次矢量图的方法与装置 |
CN106296773B (zh) * | 2016-08-12 | 2019-11-29 | 中国科学院计算技术研究所 | 一种生成多层次矢量图的方法与装置 |
CN115115644A (zh) * | 2022-08-31 | 2022-09-27 | 启东市德立神起重运输机械有限公司 | 一种基于人工智能的车辆焊接缺陷检测方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101826213A (zh) | 一种基于链码描述的区域填充方法 | |
CN112733919B (zh) | 基于空洞卷积和多尺度多分支的图像语义分割方法及系统 | |
CN109816669A (zh) | 一种识别电力设备缺陷的改进Mask R-CNN图像实例分割方法 | |
CN107798348A (zh) | 基于邻域信息深度学习的高光谱图像分类方法 | |
US10908877B2 (en) | Median value determination in a data processing system | |
US20240037693A1 (en) | Tiling a primitive in a graphics processing system by testing subsets of tiles in a rendering space | |
EP3086289B1 (en) | Tiling a primitive in a graphics processing system | |
CN103942081A (zh) | Plc梯形图il指令表生成方法 | |
CN102929621B (zh) | 重迭物件的绘制方法及装置 | |
WO2016040717A2 (en) | Text realization | |
CN115578530A (zh) | 基于Dynamo创建三维隧道地质模型的方法 | |
CN106204408A (zh) | 绘图处理电路及其前置深度信息处理方法 | |
CN102867181A (zh) | 一种用于数字图像处理的特征提取模块及遍历方法 | |
CN103135790B (zh) | 标的物的空间位置侦测方法及系统 | |
CN102117409B (zh) | 基于积分图的特征查找和遍历的硬件特征框 | |
CN202736078U (zh) | 一种用于数字图像处理的特征提取模块 | |
CN101908062A (zh) | Gis空间谓词判断方法及其系统 | |
CN110648287A (zh) | 盒式滤波器并行高效计算方法 | |
CN101145246A (zh) | 一种产生体积阴影的方法及系统 | |
CN102117326A (zh) | 一种用于图像特征查找的遍历方法 | |
KR20150012921A (ko) | 선박 설계 방법 | |
CN100472566C (zh) | 二值光栅图像的最佳边缘欧拉回路生成方法 | |
GB2537660A (en) | Tiling a primitive in a graphics processing system | |
CN117095207A (zh) | 芯片图像标注方法、装置、计算设备及存储介质 | |
Xu et al. | Fast texture synthesis based on correlation by block tiling |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20100908 |