第四章 图元的属性 讲 授:董兰芳 研究方向:科学计算可视化 图形、图像处理 模式识别 Telephone:

Slides:



Advertisements
Similar presentations
人的性别遗传 合肥市第四十九中学 丁 艳. 男女成对染色体排序图 1 、男性和女性各 23 对染色体有何异同 ? 哪 一对被称为性染色体 ? 2 、这两幅图中,哪幅 图显示的是男性的染色 体?哪幅图显示的是女 性染色体? 3 、图中哪条染色体是 Y 染色体?它与 X 染色体 在形态上的主要区别是.
Advertisements

第八章 文件的发排与输出. 8.1 发 排 文 件 PSP Pro PSP Pro (全称为 PostScript Processor Pro )是北大方正电子有限公 司研制开发的支持 PostScript Level 2 的栅格图像处理器。 栅格图像处理器是一种能够将排版软件形成的 PostScript.
第 2 讲 计算机中的颜色表示 1 如何刻画颜色 2 如何计算颜色 如何 “ 刻画 ” 颜色.
第10章 色彩与色调调整.
广告及物料类型培训 印刷、喷绘篇.
報告人:教育部會計處處長 黃 永 傳 日 期:103 年12 月27 日
哮 病.
1、一般地说,在生物的体细胞中, 和 都是成对存在的。
辨性别 A B. 辨性别 A B 第三节人类染色体与性别决定 昌邑市龙池初中 杨伟红 学习目标 1.理解人的染色体组成和传递规律。 2.解释人类性别决定的原理。 3.通过探究活动,解读数据了解生男生女的比例。
荃灣區旅游景點 成功組 全程制作人:游恒延.
问卷调查的规范与技术 问卷调查的规范与技术.
一、平面点集 定义: x、y ---自变量,u ---因变量. 点集 E ---定义域, --- 值域.
七(7)中队读书节 韩茜、蒋霁制作.
教 师:曾晓东 电 话: E_mail: 计算机软件技术基础 教 师:曾晓东 电 话: E_mail:
第三课 走向自立人生.
數位科技產品意象語彙與造形之對應分析 國三丙 AEL 鄭純玗.
黃金比例.
第1章 色彩的科学知识.
共产党员致力 新疆油田信息化建设 数据公司信息业务党支部 2013年6月.
管理学基本知识.
滁州学院首届微课程教学设计竞赛 课程名称:高等数学 主讲人:胡贝贝 数学与金融学院.
Adobe Illustrator Speaker:林昱志.
第三章 3D 数学基础.
C语言实现俄罗斯方块 邓友明( ) 胡文峰( ) 李乐( ) 李博( )
看图找关系.
函数式编程语言、编程和程序验证 计算机科学与技术学院 陈意云
色 弱 與 色 盲.
基隆市立八斗高中 102 學年度第二學期 402 班『親師座談』
一 二 三 四 五 六 七 项目建设总体情况 建设工作机制与举措 项目建设进展 建设经费投入与使用 贡献与示范 典型案例
慈禧药方(人参健脾丸) 【简介】:清代太医院的设制基本上沿袭了明朝的旧制,顺治1644年设太医院为独立的中央医事机构,为帝后及宫内人员诊视疾病、配制药物,也担负其他医药事务。此为宫廷处方,内容如下: 老佛爷 人参健脾丸 党参七钱 白术二钱 怀山药七钱 炒 薏米五钱六分 欠实五钱六分 广皮一钱.
1.5楼梯与雨篷 1.5.1楼梯   板式楼梯(最常见)、梁式楼梯、   (螺旋楼梯、悬挑楼梯) 楼梯的结构设计步骤:
宠物之家 我的宠物性别? 雌(♀) or 雄(♂) 第一阶段:我的宠物我做主 第二阶段:宠物“相亲记” 第三阶段:家族诞生
拾貳、 教育行政 一、教育行政的意義 教育行政,可視為國家對教育事務的管理 ,以增進教育效果。 教育行政,乃是一利用有限資源在教育參
课标教材下教研工作的 实践与思考 山东临沂市教育科学研究中心 郭允远.
把握命题趋势 ★ 科学应考 实现最后阶段的有效增分
第十二章 生产与费用循环审计.
用字母表示数 A=X+Y+Z 执教:建阳市西门小学 雷正明.
課程銜接 九年一貫暫行綱要( )  九年一貫課程綱要( ) 國立台南大學數學教育系 謝 堅.
2.4 二元一次方程组的应用(1).
数据结构与算法 数据结构与算法实验
C++程序设计 王希 图书馆三楼办公室.
正比與反比 大綱: 比與比值 比的運算性質 比例式 比例式的運算 蘇德宙 台灣數位學習科技股份有限公司.
第四章 输出图元的属性.
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
编译原理与技术 类型检查 2018/11/21 《编译原理与技术》-类型检查.
PhotoCap 4.3 輕鬆上手 製作者:林秀吟.
第5章 语义分析(Semantic Analysis)
1.1 数据结构讨论的范畴 1.2 基本概念 1.3 算法和算法的量度.
Attributes of Output Primitives
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言程序设计.
OOP6 結構Struct 黃兆武.
网站信息员 2011年2月.
3.5 Region Filling Region Filling is a process of “coloring in” a definite image area or region. 2019/4/19.
第三章 二维图形基础 物体的形状和颜色可用象素矩阵或直线线段和多边形填充区域等基本几何结构来描述。点和直线段是最简单的几何成分,其它可供构造图形的输出图元有圆及其它圆锥曲线、二次曲面、样条曲线和曲面、多边形填充区域以及字符串等。而二维图形的生成是三维图形生成的基础,研究计算机生成图形需先从二维图形的生成开始。下面将讨论一些基本二维图元生成技术和算法,以光栅图形系统的扫描转换方法为基础。
平面设计软件——Photoshop 基础知识.
第四章 基本图形生成算法 (二) 2019/4/25 IBM Confidential.
欢迎未列其中的各类新型交叉领域的论文和报告
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
資料結構簡介 綠園.
中国传统色彩 主讲人:武献鸽.
第二章 基本数据类型 ——数据的表示.
计算机视觉
第八章 服務部門成本分攤.
圖像的色彩表示法.
4.1 概 述 4.2 组合体视图绘制方法 4.3 组合体的尺寸标注 4.4 组合体视图的读图方法
百雞問題 製作者:張美玲 資料來源:數學誕生的故事—凡異出版社.
用加減消去法解一元二次聯立方程式 台北縣立中山國中 第二團隊.
第二节 偏 导 数 一、 偏导数概念及其计算 二 、高阶偏导数.
安排座位.
Presentation transcript:

第四章 图元的属性 讲 授:董兰芳 研究方向:科学计算可视化 图形、图像处理 模式识别 Telephone:0551-3603484 第四章 图元的属性 讲 授:董兰芳 研究方向:科学计算可视化 图形、图像处理 模式识别 Telephone:0551-3603484 Email:lfdong@ustc.edu.cn Homepage: http://staff.ustc.edu.cn/~lfdong/research.html 中国科学技术大学 视觉计算与可视化实验室

第四章 图元的属性 任何影响图元显示方法的参数一般称为属性参数。 将属性选择加入图形软件包的方法: 为每个输出图元功能扩充相关的参数表。 第四章 图元的属性 任何影响图元显示方法的参数一般称为属性参数。 将属性选择加入图形软件包的方法: 为每个输出图元功能扩充相关的参数表。 提供一张系统的当前属性值表。 维护属性和其他参数当前值表的图形系统称为状态系统。 输出图元的属性和其他参数当前值表的图形系统称为状 态系统。

第四章 图元的属性 4.1 颜色和查找表 4.2 点的属性 4.3 线的属性 4.4 曲线属性 4.5 填充区属性 第四章 图元的属性 4.1 颜色和查找表 4.2 点的属性 4.3 线的属性 4.4 曲线属性 4.5 填充区属性 4.6 通用扫描线填充算法 4.7 凸多边形的扫描线填充 4.8 曲线边界区域扫描线填充 4.9 不规则边界区域填充方法 4.10 字符属性 4.11 反走样

4.1 颜色和查找表 颜色是所有图元的一个基本 属性.用户可以选择多种颜色, 依赖于特定系统的能力和设计 目标.颜色可用数值指定,也可 以从菜单或显示的标尺中选择.

4.1 颜色和查找表 4.1.1 RGB颜色分量 在彩色光栅系统中,可选用的颜色数量依赖于帧缓存 中提供的存储容量。颜色信息有两种存储方法: 存储颜色码。 4.1.2 颜色表:提供了“合理”数量的可同时显示的 颜色而不要求大容量的帧缓存。

4.1 颜色和查找表 4.1.3 灰度 当RGB函数中指定相同量的红色、绿色和蓝色时,结果是某种程度的灰色。 4.1.4 其他颜色参数 4.1.3 灰度 当RGB函数中指定相同量的红色、绿色和蓝色时,结果是某种程度的灰色。 4.1.4 其他颜色参数 CMY和CMYK模型针对彩色打印机。 HSI彩色模型更符合人描述和解释颜色的方式。

第四章 图元的属性 4.1 颜色和查找表 4.2 点的属性 4.3 线的属性 4.4 曲线属性 4.5 填充区属性 第四章 图元的属性 4.1 颜色和查找表 4.2 点的属性 4.3 线的属性 4.4 曲线属性 4.5 填充区属性 4.6 通用扫描线填充算法 4.7 凸多边形的扫描线填充 4.8 曲线边界区域扫描线填充 4.9 不规则边界区域填充方法 4.10 字符属性 4.11 反走样 4.12 OpenGL学习(2)

4.2 点的属性 颜 色 用RGB值或指向颜色表的索引值设定。 大 小 像素的整数倍。

第四章 图元的属性 4.1 颜色和查找表 4.2 点的属性 4.3 线的属性 4.7 凸多边形的扫描线填充 4.4 曲线属性 第四章 图元的属性 4.1 颜色和查找表 4.2 点的属性 4.3 线的属性 4.4 曲线属性 4.5 填充区属性 4.6 通用扫描线填充算法 4.7 凸多边形的扫描线填充 4.8 曲线边界区域扫描线填充 4.9 不规则边界区域填充方法 4.10 字符属性 4.11 反走样 4.12 OpenGL学习(2)

4.3 线的属性 线宽 重复像素法 优点: 实现简单 用重复像素法绘制线段 用重复像素法绘制圆弧

4.3 线的属性 线宽 缺点: 线段两端要么为水平的,要么是竖直的。 折线顶点处有缺口

4.3 线的属性 线宽 图元的宽度不均匀 产生宽度为偶数像素的图元效果不好 (a)水平线段 (b)45°线段

4.3 线的属性 线型 四种常用的线型

4.3 线的属性 线型 线型可以用0、1序列来表示,存放在数组中。 4.3 线的属性 线型 线型可以用0、1序列来表示,存放在数组中。 例:可以用包含8个元素的整数数组来表示线型(11111111表示实线,11110000表示长划线,11001100表示短划线),此时线型以8为周期重复。 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 绘制 if ( 线型[i%8] ) write_pixel(x, y);

4.3 线的属性 画笔和画刷

4.3 线的属性 画笔和画刷 用移动画笔法绘制线段

4.3 线的属性 画笔和画刷 用移动画笔法绘制圆弧

4.3 线的属性 画笔和画刷 (a)水平线段 (b)45°线段

4.3 线的属性 区域填充 可以根据线条的宽度,计算出线条的外轮廓,再用区域填充的方法,产生具有一定线宽的线条。 优点 生成的图形质量高 4.3 线的属性 区域填充 优点 生成的图形质量高 缺点 计算量大 有些图形的等距线难以获得 可以根据线条的宽度,计算出线条的外轮廓,再用区域填充的方法,产生具有一定线宽的线条。

4.3 线的属性 区域填充 为了改善线条端点处的形状,可以在线条端点处加上线帽(line cap)。 粗线段的连接处需要特别考虑 4.3 线的属性 区域填充 为了改善线条端点处的形状,可以在线条端点处加上线帽(line cap)。 粗线段的连接处需要特别考虑 三种常用的线帽 三种常用的粗线段的连接方式

第四章 图元的属性 4.1 颜色和查找表 4.2 点的属性 4.3 线的属性 4.7 凸多边形的扫描线填充 4.4 曲线属性 第四章 图元的属性 4.1 颜色和查找表 4.2 点的属性 4.3 线的属性 4.4 曲线属性 4.5 填充区属性 4.6 通用扫描线填充算法 4.7 凸多边形的扫描线填充 4.8 曲线边界区域扫描线填充 4.9 不规则边界区域填充方法 4.10 字符属性 4.11 反走样 4.12 OpenGL学习(2)

4.4 曲线的属性 区域填充 对于封闭曲线来说,可以先生成两条距离为线宽的曲线,再填充两条曲线之间的区域。

第四章 图元的属性 4.1 颜色和查找表 4.2 点的属性 4.3 线的属性 4.7 凸多边形的扫描线填充 4.4 曲线属性 第四章 图元的属性 4.1 颜色和查找表 4.2 点的属性 4.3 线的属性 4.4 曲线属性 4.5 填充区属性 4.6 通用扫描线填充算法 4.7 凸多边形的扫描线填充 4.8 曲线边界区域扫描线填充 4.9 不规则边界区域填充方法 4.10 字符属性 4.11 反走样 4.12 OpenGL学习(2)

4.5 填充区属性 4.5.1 填充模式 4.5.2 颜色调和填充区域

4.5.1 填充模式 填充方法 基本问题

4.5.1 填充模式 填充方法 均匀着色方法:将图元内部像素置成同一颜色 位图不透明:若像素对应的位图单元为1,则以前景色显示该像素;若为0,则以背景色显示该像素; 位图透明:若像素对应的位图单元为1,则以前景色显示该像素;若为0,则不做任何处理。 像素图填充:以像素对应的像素图单元的颜色值显示该像素。

4.5.1 填充模式 建立区域与图像间的对应关系

4.5.1 填充模式

4.5.1 填充模式 以数组形式存储在处理器内存里的二维图像称为纹理。 此时数组元素称为纹素(texel),可以由应用程序生成, 也可以将照片扫描输入。 把离散数组看成一个连续的二维矩形区域纹理图案 T(s,t),独立变量s和t是纹理坐标一般把纹理坐标缩放到 [0,1]区间。

4.5.1 填充模式 把图像映射到曲面上是一个非常复杂的任务。

4.5.1 填充模式 涉及到的坐标系 参数坐标系可以用来建立曲线、曲面。 纹理坐标系用来识别要被映射的图像上的点。 世界坐标系从概念上说,就是映射发生的地方。 屏幕坐标系最终图像生成的地方。

4.5.1 填充模式 映射函数 考虑从纹理坐标到曲面上一点的映射。 直观地看,需要如下函数 x=x(s,t) y=y(s,t) z=z(s,t) w=w(s,t) 实际采用的是间接方法。

4.5.1 填充模式 逆映射 给定对象上的一个点,我们想知道它对应 于纹理中的哪个点。 此时需要如下形式的映射 s = s(x,y,z,w) t = t(x,y,z,w) 这样的函数一般是很难求出来的。

4.5.1 填充模式 实际困难 假设要计算中心在(xs, ys)的一个矩形像素的颜色。 中心点对应于对象上的点(x,y,z) 。 如果对象是弯曲的,那么矩形像素的原像是一个曲 边四边形。 这个曲边四边形在纹理上的原像才是对当前矩形像 素的颜色有贡献的纹理元素。

4.5.1 填充模式 纹理坐标到屏幕坐标的映射 xs=xs(s,t) ys=ys(s,t) (xs,ys)表示颜色缓存中的某个位置。

4.5 填充区属性 4.5.1 填充模式 4.5.2 颜色调和填充区域

4.5.2 颜色调和填充区域 线性软填充算法是这类填充的一个例子,该算法在将前景色F与单一背景色B(F<>B)合并后绘制的区域上重新绘制。 假如F和B的值为已知,那么通过检测帧缓冲器中当前的颜色内容,就可确定这些颜色原来是怎样组合的。 区域内将要重新填充酌每个像素的当前颜色P,则是F和B的线性组合: P=tF十(1-t)B

第四章 图元的属性 4.1 颜色和查找表 4.2 点的属性 4.3 线的属性 4.7 凸多边形的扫描线填充 4.4 曲线属性 第四章 图元的属性 4.1 颜色和查找表 4.2 点的属性 4.3 线的属性 4.4 曲线属性 4.5 填充区属性 4.6 通用扫描线填充算法 4.7 凸多边形的扫描线填充 4.8 曲线边界区域扫描线填充 4.9 不规则边界区域填充方法 4.10 字符属性 4.11 反走样 4.12 OpenGL学习(2)

4.6 通用扫描线填充算法 4.6.1 扫描线算法 4.6.2 有序边表算法

4.6.1 扫描线算法 边的连贯性:某条边与当前扫描线相交,也可能 与下一条扫描线相交; 扫描线的连贯性:当前扫描线与各边的交点顺序 4.6.1 扫描线算法 边的连贯性:某条边与当前扫描线相交,也可能 与下一条扫描线相交; 扫描线的连贯性:当前扫描线与各边的交点顺序 与下一条扫描线与各边的交点顺序 可能相同或类似; 区间连贯性:同一区间上的像素取同一颜色属性

4.6.1 扫描线算法 扫描线算法 目标:利用相邻像素之间的连贯性,提高算法效率 处理对象:非自交多边形 (边与边之间除了顶点外无其它交点)

4.6 通用扫描线填充算法 4.6.1 扫描线算法 4.6.2 有序边表算法

4.6.2 有序边表算法 基本原理 一条扫描线与多边形的边有偶数个交点 步骤(对于每一条扫描线): 求交点 交点排序 交点配对,填充区段

4.6.2 有序边表算法 边的连贯性 第一类交点:新出现的边与扫描线的交点 第二类交点:位于同一条边上的后继交点

4.6.2 有序边表算法 交点的取整规则 要求:使生成的像素全部位于多边形之内 4.6.2 有序边表算法 交点的取整规则 要求:使生成的像素全部位于多边形之内 用于线画图元生成的四舍五入原则导致部分像素位于多边形之外,从而不可用 假定非水平边与扫描线y=e相交,交点的横坐标为x.

4.6.2 有序边表算法 规则1 X为小数,即交点落于扫描线上两个相邻像素之间 (a)交点位于左边之上,向右取整 4.6.2 有序边表算法 规则1 X为小数,即交点落于扫描线上两个相邻像素之间 (a)交点位于左边之上,向右取整 (b)交点位于右边之上,向左取整

4.6.2 有序边表算法 规则2 边界上象素的取舍问题,避免填充扩大化。 解决方法: 4.6.2 有序边表算法 规则2 边界上象素的取舍问题,避免填充扩大化。 解决方法: 边界象素:规定落在右边界的象素不予填充。具体实现时,只要对扫描线与多边形的相交区间左闭右开。

4.6.2 有序边表算法 算法所涉及的数据结构: 活性边:与当前扫描线相交的边。按交点x的增量顺序存放在一个链表中;该链表称作活性边表(AEL)。 AEL 的结点信息(p75): Ymax: 所交边的最高扫描线号 X:当前扫描线与边的交点的 x坐标 △X:边的斜率的倒数 Nextage: 下一条边的指针 typedef struct {int ymax; float x,deltax; Edge *nextEdge; }Edge;

4.6.2 有序边表算法 边的分类表(ET) 按照边的下端点y坐标对非水平边进行分类的指针数组,下端点y坐标值等于i的边属于第i类。 4.6.2 有序边表算法 边的分类表(ET) 按照边的下端点y坐标对非水平边进行分类的指针数组,下端点y坐标值等于i的边属于第i类。 typedef struct {int ymax; float x,deltax; Edge *nextEdge; }Edge; 边的分类表的作用是避免盲目求交。 当处理一条扫描线时,为了求出它与多 边形边的所有交点,必须将它与所有的 边进行求交测试。而实际上只有某几条 边与该扫描线有交点。边的分类表正是 用来排除不必要的求求交测试的。

4.6.2 有序边表算法 建立ET; 将扫描线纵坐标y的初值置为ET中非空元素的最小序号,如在上图中, y=1; 置AEL为空; 4.6.2 有序边表算法 建立ET; 将扫描线纵坐标y的初值置为ET中非空元素的最小序号,如在上图中, y=1; 置AEL为空; 执行下列步骤直至ET和AEL都为空. 如ET中的第y类非空,则将其中的所有边取出并插入AEL中; 如果有新边插入AEL,则对AEL中各边排序; 对AEL中的边两两配对,(1和2为一对,3和4为一对,…),将每对边中x坐标按规则取整,获得有效的填充区段,再填充. 将当前扫描线纵坐标y值递值1; 将AEL中满足y=ymax边删去(!每条边被看作下闭上开的); 对AEL中剩下的每一条边的x递增deltax,即x = x+deltax.

4.6 通用扫描线填充算法 4.6.1 扫描线算法 4.6.2 有序边表算法

第四章 图元的属性 4.1 颜色和查找表 4.2 点的属性 4.3 线的属性 4.4 曲线属性 4.5 填充区属性 第四章 图元的属性 4.1 颜色和查找表 4.2 点的属性 4.3 线的属性 4.4 曲线属性 4.5 填充区属性 4.6 通用扫描线填充算法 4.7 凸多边形的扫描线填充 4.8 曲线边界区域扫描线填充 4.9 不规则边界区域填充方法 4.10 字符属性 4.11 反走样

第四章 图元的属性 4.1 颜色和查找表 4.2 点的属性 4.3 线的属性 4.4 曲线属性 4.5 填充区属性 第四章 图元的属性 4.1 颜色和查找表 4.2 点的属性 4.3 线的属性 4.4 曲线属性 4.5 填充区属性 4.6 通用扫描线填充算法 4.7 凸多边形的扫描线填充 4.8 曲线边界区域扫描线填充 4.9 不规则边界区域填充方法 4.10 字符属性 4.11 反走样

4.8 曲线边界区域扫描线填充 扇形区域的描述: 原理:同多边形 问题:如何确定扫描线与直线段和圆弧段的相交顺序 方法:分类

4.8 曲线边界区域扫描线填充 假设 点落在第一象限 ,扇形区域的图元生成 分四种情况 在第一象限

4.8 曲线边界区域扫描线填充 落在第二象限,此时又分为两种情况 当 时

4.8 曲线边界区域扫描线填充 落在第三象限 落在第四象限

4.8 曲线边界区域扫描线填充 遗留问题:当 落在其它区域时? 还有什么方法?

第四章 图元的属性 4.1 颜色和查找表 4.2 点的属性 4.3 线的属性 4.4 曲线属性 4.5 填充区属性 第四章 图元的属性 4.1 颜色和查找表 4.2 点的属性 4.3 线的属性 4.4 曲线属性 4.5 填充区属性 4.6 通用扫描线填充算法 4.7 凸多边形的扫描线填充 4.8 曲线边界区域扫描线填充 4.9 不规则边界区域填充方法 4.10 字符属性 4.11 反走样

4.9 不规则边界区域填充方法 内部定义区域,是指区域内部的所有像素都具有相同的颜色(old_color),而区域边界上的像素具有不是old_color的任意其它颜色。 填充内部定义区域,将该区域中的所有像素都设置为填充颜色(fill_color)的算法,称为洪水填充算法(flood-fill algorithm)。 边界定义区域,是指区域边界上的所有像素都具有相同的颜色(boundary_color),而区域内部的像素具有不是boundary_color的任意其它颜色。 填充边界定义区域,将该区域中的所有像素都设置为填充颜色的算法,称为边界填充算法(boundary-fill algorithm)。

4.9 不规则边界区域填充方法 内部定义区域示意图 边界定义区域示意图

4.9 不规则边界区域填充方法 4.9.1 简单递归 4.9.2 扫描线算法

4.9 不规则边界区域填充方法 区域内部的所有像素都具有颜色old_color,从区域 内部某一像素(x,y)开始对区域进行填充(该像素称为 4.9 不规则边界区域填充方法 区域内部的所有像素都具有颜色old_color,从区域 内部某一像素(x,y)开始对区域进行填充(该像素称为 种子点),将区域内部的所有像素都设置为填充颜色 fill_color。 基本方法是:测试像素(x,y)是否在区域内尚未被 填充的部分,即测试像素(x,y)的颜色,若该像素的颜 色等于old_color且不等于fill_color,则设置该像素的 颜色为fill_color,并对与该像素相邻的像素作同样处理 (递归调用);否则说明该像素在区域外或已被填充过, 不再进行处理。

4.9 不规则边界区域填充方法 适用于四连通内部定义区域的边界填充算法为: 4.9 不规则边界区域填充方法 适用于四连通内部定义区域的边界填充算法为: void flood_fill_4(int x, y, old_color, fill_color) { int current; current = read_pixel(x, y); if ( current==old_color && current!=fill_color ) write_pixel(x, y, fill_color); flood_fill_4(x, y+1, old_color, fill_color); /* 上 */ flood_fill_4(x, y-1, old_color, fill_color); /* 下 */ flood_fill_4(x-1, y, old_color, fill_color); /* 左 */ flood_fill_4(x+1, y, old_color, fill_color); /* 右 */ }

4.9 不规则边界区域填充方法 适用于四连通边界定义区域的边界填充算法为: 4.9 不规则边界区域填充方法 适用于四连通边界定义区域的边界填充算法为: void boundary_fill_4(int x, y, boundary_color, fill_color) { int current; current = read_pixel(x, y); if ( current!=boundary_color && current!=fill_color ) write_pixel(x, y, fill_color); boundary_fill_4(x, y+1, boundary_color, fill_color); /* 上 */ boundary_fill_4(x, y-1, boundary_color, fill_color); /* 下 */ boundary_fill_4(x-1, y, boundary_color, fill_color); /* 左 */ boundary_fill_4(x+1, y, boundary_color, fill_color); /* 右 */ }

4.9 不规则边界区域填充方法 当区域内部某些像素的颜色为fill_color时,上述边界填充算法可能无法正确工作。 4.9 不规则边界区域填充方法 当区域内部某些像素的颜色为fill_color时,上述边界填充算法可能无法正确工作。 解决方法:首先建立一个与帧缓冲区对应的临时缓冲区,帧缓冲区中颜色为boundary_color的像素在临时缓冲区中用0来表示,颜色不为boundary_color的像素在临时缓冲区中用1来表示,再用上述算法在临时缓冲区中用2进行填充,最后在帧缓冲区中将对应于临时缓冲区中为2的像素填充为fill_color。

4.9 不规则边界区域填充方法 4.9.1 简单递归 4.9.2 扫描线算法

4.9 不规则边界区域填充方法 种子点(x,y)入栈。 栈顶元素(x,y)出栈作为种子点。 4.9 不规则边界区域填充方法 种子点(x,y)入栈。 栈顶元素(x,y)出栈作为种子点。 从种子点(x,y)开始沿着扫描线向左右两个方向逐个 像素进行填充,直到到达边界像素为止。 将上述填充区段的左右端点的横坐标分别记为xleft和 xright。 在与当前扫描线相邻的上下两条扫描线的[xleft,xright]范围内进行检查,看看是否全部为边界像素或已填充像素,若存在着非边界且未填充的像素,那么将该区段的最右端像素作为种子点入栈。

4.9 不规则边界区域填充方法 区域填充的扫描线算法的执行过程

4.9 不规则边界区域填充方法

第四章 图元的属性 4.1 颜色和查找表 4.2 点的属性 4.3 线的属性 4.4 曲线属性 4.5 填充区属性 第四章 图元的属性 4.1 颜色和查找表 4.2 点的属性 4.3 线的属性 4.4 曲线属性 4.5 填充区属性 4.6 通用扫描线填充算法 4.7 凸多边形的扫描线填充 4.8 曲线边界区域扫描线填充 4.9 不规则边界区域填充方法 4.10 字符属性 4.11 反走样

4.10 字符属性 表示字符形状的方法: 位 图:点阵表示 轮廓线:用直线或曲线来描述字符的轮廓。 需要采用扫描转换算法对轮廓线 4.10 字符属性 表示字符形状的方法: 位 图:点阵表示 轮廓线:用直线或曲线来描述字符的轮廓。 需要采用扫描转换算法对轮廓线 内部进行填充。 如True Type 、PostScript。 两种方法的比较 位图表示: 显示速度快 占用大量的存储空间 效果不能令人满意 轮 廓 线:节省空间 扫描转换需要更长的处理时间

4.10 字符属性 英文字符体

4.10 字符属性 字符对齐

第四章 图元的属性 4.1 颜色和查找表 4.2 点的属性 4.3 线的属性 4.4 曲线属性 4.5 填充区属性 第四章 图元的属性 4.1 颜色和查找表 4.2 点的属性 4.3 线的属性 4.4 曲线属性 4.5 填充区属性 4.6 通用扫描线填充算法 4.7 凸多边形的扫描线填充 4.8 曲线边界区域扫描线填充 4.9 不规则边界区域填充方法 4.10 字符属性 4.11 反走样

4.11 反走样 走样: 用离散量(像素)表示连续的量(图形)而引起 的失真,叫混淆或叫走样(aliasing)。 光栅图形的走样现象: 阶梯状边界; 图形细节失真; 狭小图形遗失:动画序列中时隐时现,产生闪烁。

4.11 反走样 不光滑(阶梯状)的图形边界 走样现象

4.11 反走样 图形细节失真 走样现象

4.11 反走样 狭小图形的遗失与 动态图形的闪烁 走样现象

4.11 反走样 什么是反走样 在图形显示过程中,用于减少或消除走样现象的方法。 提高分辨率方法 非加权区域采样 加权区域采样

4.11 反走样 提高分辨率的反走样方法 –过采样 方法简单,但代价非常大! 显示器的水平、竖直分辩率各提高一倍,则显示器 的点距减少一倍,帧缓存容量则增加到原来的4倍,而 扫描转换同样大小的图元却要花4倍时间。

4.11 反走样 走样原因 两点假设 象素是数学上抽象的点,它的面积为0, 它的亮度由覆盖该点的图形的亮度所决定; 直线段是数学上抽象直线段,它的宽度为0。 现实 像素的面积不为0; 直线段的宽度至少为1个像素; 假设与现实的矛盾是导致走样出现的原因之一

4.11 反走样 解决方法:改变直线段模型,由此产生区域采样算法步 骤: 将直线段看作具有一定宽度的狭长矩形; 当直线段与某象素有交时,求出两者相交区域的面积; 根据相交区域的面积,确定该象素的亮度值

4.11 反走样 区域采样 直线段对一个像素亮度的贡献与两者相交区域的面积 成正比; 当直线段和某个像素不相交时,它对该像素的亮度无 影响; 相同面积的相交区域对像素的亮度贡献相同,而与这 个相交区域落在像素内什麽位置无关。 关键:如何计算这个面积?

4.11 反走样 计算相交区域的面积 加权区域采样 保真多边形边界

4.11 反走样 求相交区域的近似面积 将屏幕象素分割成n个更小的子象素; 计算中心点落在直线段内的子象素的个数,记为k, k/n为线段与象素相交区域面积的近似值 目的:简化计算 左图:n = 16, k = 3 近似面积 = 3/16

4.11 反走样 加权区域采样 改进非加权区域采样方法 相交区域对象素亮度的贡献 依赖于该区域与象素中心的距离

4.11 反走样 反走样技术实例 立方体滤波器 圆锥体滤波器 保真多边形边界

4.11 反走样 1.立方体滤波器

4.11 反走样 2.圆锥体滤波器

4.11 反走样 3.保真多边形边界 -- 计算相交区域的面积 像素实际显示的灰度值 = 相交面积*该像素的最大灰度值

第四章 图元的属性 4.1 颜色和查找表 4.2 点的属性 4.3 线的属性 4.7 凸多边形的扫描线填充 4.4 曲线属性 第四章 图元的属性 4.1 颜色和查找表 4.2 点的属性 4.3 线的属性 4.4 曲线属性 4.5 填充区属性 4.6 通用扫描线填充算法 4.7 凸多边形的扫描线填充 4.8 曲线边界区域扫描线填充 4.9 不规则边界区域填充方法 4.10 字符属性 4.11 反走样

计算机图形学 谢谢 欢迎交流! 更多信息请参见 http://staff.ustc.edu.cn/~lfdong/research.html