计算机图形学——区域填充算法(基本光栅图形算法)王陸

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

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

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

1)四向连通区域:从区域上一点出发可通过【上、下、左、右】四个方向移动的组合,在不越出区域的前提下,到达区域内的任意象素。2)八向连通区域:从区域上一点出发可通过【上、下、左、右、左上、右上、左下、右下】八个方向移动的组合,在不越出区域的前提下,到达区域内的任意象素。

给定区域G一种子点(x,y),首先判断该点是否是区域内的一点,如果是,则将该点填充为新的颜色,然后将该点周围的四个点(四连通)或八个点(八连通)作为新的种子点进行同样的处理,通过这种扩散完成对整个区域的填充。

这里给出一个四连通的种子填充算法(区域填充递归算法),使用【栈结构】来实现原理算法原理如下:种子像素入栈,当【栈非空】时重复如下三步:

这里给出八连通的种子填充算法的代码:

voidflood_fill_8(int[]pixels,intx,inty,intold_color,intnew_color){if(x0&&y0){if(pixels[y*w+x]==old_color){pixels[y*w+x]==new_color);flood_fill_8(pixels,x,y+1,old_color,new_color);flood_fill_8(pixels,x,y-1,old_color,new_color);flood_fill_8(pixels,x-1,y,old_color,new_color);flood_fill_8(pixels,x+1,y,old_color,new_color);flood_fill_8(pixels,x+1,y+1,old_color,new_color);flood_fill_8(pixels,x+1,y-1,old_color,new_color);flood_fill_8(pixels,x-1,y+1,old_color,new_color);flood_fill_8(pixels,x-1,y-1,old_color,new_color);}}}简单种子填充算法的不足a)有些像素会多次入栈,降低算法效率,栈结构占空间b)递归执行,算法简单,但效率不高,区域内每一像素都要进/出栈,费时费内存c)改进算法,减少递归次数,提高效率

从给定的种子点开始,填充当前扫描线上种子点所在的一区段,然后确定与这一段相邻的上下两条扫描线上位于区域内的区段(需要填充的区间),从这些区间上各取一个种子点依次把它们存起来,作为下次填充的种子点。反复进行这过程,直到所保存的各区段都填充完毕。

步骤1:(初始化)将算法设置的堆栈置为空。将给定的种子点(x,y)压入堆栈步骤2:(出栈)如果堆栈为空,算法结束;否则取栈顶元素(x,y)作为种子点步骤3:(区段填充)从种子点(x,y)开始,沿纵坐标为y的当前扫描线向左右两个方向逐个像素用新的颜色值进行填充,直到边界为止即象素颜色等于边界色。设区间两边界的横坐标分别为xleft和xright。步骤4:在与当前扫描线相邻的上下两条扫描线上,以区间[xleft,xright]为搜索范围,求出需要填充的各小区间,把各小区间中最右边的点并作为种子点压入堆栈,转到步骤2。

1)搜索原则:

从前一个填充的区间(边界之间的范围xleft,xright)作为后一条扫描线种子点寻找的范围。2)填充原则:

从种子点往左,右填,填到边界

上述算法的描述过于抽象,直接看演示

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

区域填充只改变填充颜色,不改变区域表示方式

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

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

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

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

填充一个定义的区域的选择包括:

a)选择实区域颜色或图案填充方式

b)选择某种颜色和图案

这些填充选择可以应用于多边形区域或用曲线边界定义的区域;此外,区域可用多种画笔、颜色和透明度参数来绘制

THE END
1.C#生成随机数的方法示例C#教程本文介绍了C#中的Random类,用于生成随机数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧+ 目录 GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用!【 如果你想靠AI翻身,你先需要一个靠谱的工具!】 C# 提供了一种强大而方便的工具类 https://www.jb51.net/program/332486365.htm
2.洛谷刷题C++语言P1319压缩技术【代码详解】 #include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; int inCnt=0, outCnt=0; int x; while (cin >> x) { inCnt++; if (inCnt%2 == 1) { for (int i=1; i<=x; i++) { cout << 0; https://zhuanlan.zhihu.com/p/654340107
3.种子填充算法皮德日记算法改进 基础算法在实际应用中,除了上面所说的当填充面积过大时,出现栈溢出的错误外,还会出现重复填充,很大程度上影响效率。一种改进思路就是,建立一个存放每条连续扫描线的最右端点的堆栈。在这篇论文中有具体的伪代码实现扫描线种子填充算法的改进。 https://segmentfault.com/a/1190000004174091
4.计算机图形学——区域填充算法原理算法原理如下:种子像素入栈,当【栈非空】时重复如下三步: 算法代码 这里给出八连通的种子填充算法的代码: void flood_fill_8(int[] pixels,int x,int y,int old_color,intnew_color) {if(x<w&&x>0&&y<h&&y>0) {if (pixels[y*w+x]==old_color) https://www.pianshen.com/article/75621623407/
5.MFC实现种子填充算法(附完整源码)C和C++Everything教程在这个例子中,我们使用MFC的CDC类进行图形绘制,并在一个按钮点击事件中触发种子填充算法。 创建一个MFC应用程序。 打开资源编辑器,添加一个按钮(IDC_BUTTON_FILL)和一个静态画布(IDC_STATIC_CANVAS)。 接下来,将以下代码添加到你的MyMFCDlg.h文件: #pragmaonceclassCMyMFCDlg:https://download.csdn.net/blog/column/11106658/134473460
6.第2关:边缘填充法第3关:区域四连通种子填充算法第4关:区域简介: 【头歌 计算机图形学 练习】多边形填充v1.0 (第1关:扫描线填充算法(活动边表AET法) 第2关:边缘填充法 第3关:区域四连通种子填充算法 第4关:区域扫描线种子填充算法) 前言 不支持学术抄袭,抄袭后果自负,仅供参考学习。 链接: 头歌计算机图形学 第1关:扫描线填充算法(活动边表AET法) // 评测代码所https://developer.aliyun.com/article/1389883
7.计算机图形学种子填充算法MFCVC码农集市专业分享IT编程学习种子填充算法,自己写的,希望对大家有用 // 种子法View.cpp : implementation of the CMyView class // #include "stdafx.h" #include "种子法.h" #include "种子法Doc.h" #include "种子法View.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #https://www.coder100.com/index/index/content/id/874898
8.自动填充范文10篇(全文)关键词:扫描线填充算法;种子填充算法;链队列 中图分类号:TP391.41 1 区域填充概述 区域填充指的是在输出平面的闭合区域内使用某种指定的颜色或图案完整地进行填充,通俗点讲就是指定一个区域的边界,用指定的颜色代码赋予给边界范围内的所有像素点。它是计算机图形学的一项重要内容,主要广泛应用于真实感图形显示、交互https://www.99xueshu.com/w/ikeyybc68okm.html
9.填充方法(精选十篇)浅析区域填充算法 篇3 关键词:扫描线填充算法;种子填充算法;链队列 中图分类号:TP391.41 1 区域填充概述 区域填充指的是在输出平面的闭合区域内使用某种指定的颜色或图案完整地进行填充,通俗点讲就是指定一个区域的边界,用指定的颜色代码赋予给边界范围内的所有像素点。它是计算机图形学的一项重要内容,主要广泛应用https://www.360wenmi.com/f/cnkeyj1a7272.html
10.408预言家们,指出了45个必考点,如下:成组链接法 集线器 B树 ppp协议下的填充 硬布线 硬布式 兄弟算法 优先队列(大根堆)-第k大的元素 网络前缀 组帧 外部排序败者树 括号匹配 中断 并查集 cache 页面置换 虚拟文件系统 图邻接矩阵 拓扑排序 dfs求连通分量个数 DHCP 虚实地址转换 sdn 管程https://mp.weixin.qq.com/s?__biz=MzUyNTk1NjI5Nw==&mid=2247548128&idx=2&sn=8e0b84b1f34225cfe516d12627cff17f&chksm=fb7054e22a06954d9ba5354e58132ccd1a84e6f50d22b043431d4d6843fd3c37d9f2ccd6372e&scene=27
11.计算机图形学几个算法的关键C++代码算法软件开发四、多边形区域填充算法: //扫描线填充算法 void CFieldFillView::ScanlineSeedfill(CDC *pDC, int x, int y, COLORREF boundaryvalue, COLORREF newvalue) { int x0,xl,xr,y0,xid; int flag,xnextspan; stack<CPoint> s;//堆栈 CPoint p; s.push(CPoint(x,y));//第一个种子入栈 while (!s.https://www.open-open.com/lib/view/open1340957044155.html
12.种子填充算法python种子填充算法流程图cnolnic的技术博客常见的这种填充有四连通种子边界填充还有八连通种子边界填充,以四连通种子边界填充为例,写下伪代码: #simple seed fill algorithm for 4-connected boundary-defined regions #简单的四连通种子边界填充算法 #Seed(x,y) is the seed pixel:这是种子像素 https://blog.51cto.com/u_13521/8992244
13.计算机图形学实验报告8种子点填充.pdf计算机图形学实验报告8-种子点填充.pdf,《计算机图形学实验》报告 2016 年春季学期 实验四:种子点填充算法 Seed Filling 实验时间:2016 年 9 月底 实验地点: 实验目的:掌握使用opengl 的种子点填充算法,观察改变参数对生成图形的 改变(改变点的位置、颜色等) 1 / 1 文档https://max.book118.com/html/2022/0525/7012200125004124.shtm
14.种子填充法学术百科提供全面的“种子填充法”相关文献(论文)下载,论文摘要免费查询,种子填充法论文全文下载提供PDF格式文件。种子填充法中文、英文词汇释义(解释),“种子填充法”各类研究资料、调研报告等。https://wiki.cnki.com.cn/HotWord/619307.htm
15.二值图像中封闭孔洞的高效填充算法(附源码)。一种直觉的想法就是,用FloodFill,不过如果直接用FloodFill,我们无法直接定位那些未知需要进行种子填充的, 但是Gabriel Landini, G.Landini 在2008年5月给我们写了个非常简单的代码实现了这一过程(原始代码是JAVA的,话说JAVA的算法代码改为C#基本就不要做什么改动啊): https://cloud.tencent.com/developer/article/1011742
16.种子搜索填充,Seedsearchingandfilling,音标,读音,翻译,英文提出一种用仿射参数模型来近似场景中摄像机的复杂运动,采用参数化的多分辨率估计方法鲁棒地估计出仿射参数;然后在当前帧与运动补偿后的帧之间求光流场,得到目标轮廓的初始分割;最后通过聚类和搜索填充算法分割出完整的目标。 3) nodes for research 搜索种子 http://www.dictall.com/indu/200/19941438F8B.htm
17.第四课:多边形填充算法寂静岭第二种,种子算法,先取多边形内部任意一点做种子,由这个种子,向左右,上下扩散,最终填充整个多边形内部。我认为,扫描线算法适用于,多边形各顶点值已知,即边界已知情况下的填充。种子算法适用于,边界未知情况,例如,屏幕上有多个多边形重叠区域的填充。详细的算法细节请参考点击下载的相关章节。下面给出扫描线算法的实现代码http://www.cppblog.com/yaoming/articles/139363.html