简化算法的误差测度(度量质量和误差)

误差测度用于度量模型简化的质量和误差,因此它对模型的简化过程和最后的简化结果都具有重要的影响。大多数简化算法采用对象空间(Object-space)的一种或综合几种形式的几何误差(Geometric errors)作为误差测度,一些视点相关算法通常将对象空间的误差转换为屏幕空间(Screen-space)的误差值为误差测度,有些算法也考虑模型的颜色、法向量和纹理坐标等属性误差(Attribute errors)。几何误差
几何误差测度一般采用欧式空间距离表示。通常有顶点到顶点、顶点到平面和平面到平面的距离等形式。
Hausdorff距离是现有算法中常常用到度量顶点到表面、表面到表面距离的几何误差测度,该距离为两个模型的顶点之间的最小距离中的最大值。
给定欧式空间的两点集
,Haousdorff距离就是用来衡量这两个点集间的距离。



算法过程:







该算法的时间复杂度是O(n,m),其中n和m分别为集合A和集合B中的点数。屏幕空间误差计算
视点相关算法常常需要将对象空间误差转换为屏幕空间误差。设对象空间几何误差为e,x为以像素表示的屏幕某方向的分辨率,d是视点到模型对象的距离,θ为视野夹角,则e对应的屏幕空间误差p为:

属性误差(材质、纹理)

网格模型上的三角面片、、法向量、纹理坐标、顶点的颜色是其常见的属性。
网格模型的颜色一般以(r, g, b)三元组形式来表示,各分量分别在[0, 1]中取值。最直接的方法是采用欧式空间距离求解方法来求取颜色的距离。设简化过程的两模型M1、M2的颜色分别表示为(r1, g1, b1)和(r2, g2, b2),则两模型的颜色距离dc可以表示为:

两个法向量的误差距离dn通常采用角度值进行度量:

多边形表面的纹理坐标用(u, v)坐标对来表示网格模型顶点到二维纹理空间的映射,其中,u,v通常在[0, 1]中取值。一般也是采用欧式空间距离求解方法来计算纹理坐标误差:

简化算法的约束条件或运行条件

模型简化过程中或简化算法运行时往往存在一些限制条件,这些条件也决定了算法采用的技术、算法运行效果和模型简化结构等。细节层次(LOD)
对于各种简化细节层次的LOD模型的管理技术可以分成离散LOD(Discrete LOD)、连续LOD(Continuous LOD)和视点相关LOD技术。
早期简化算法大多采用离散LOD技术。这种技术首先采用离线(offline)方式对原始模型进行预处理,生成一系列不同分辨率的简化模型。在实际运行时,根据需要选择已生成的某个简化模型进行绘制。由于在实时显示绘制时不需要再次进行简化操作,因此该技术具有实时运行速度快、数据存储结构简单等优点。但是因为需要保存多个预处理的中间简化模型,所以占用存储空间大;且在简化预处理时无法考虑视点及实时运行环境因素等要求,只能根据模型本身信息进行简化,因而简化效率不高;同时由于技术限制,预简化生成LOD模型数量不可能过多,粒度不可能太细,因此实时显示绘制时候,在不同简化模型切换过程中会出现画面跳跃、视觉不连续等的效果。离散LOD简化也称为静态简化。
连续LOD技术是对传统的离散LOD技术的改进和发展。与离散LOD技术不同,连续LOD技术的各简化模型不是在预处理中生成,而是通过构造特定的数据结构进行编码存储,在实时显示运行时根据需要生成对应细节层次的简化模型。因此连续LOD技术具有更高的LOD粒度表示,占用空间较小,运行时画面连续性较好等优点;但由于运行时需要进行简化模型的生成处理,因此实时显示速度收到一定影响。连续LOD技术支持多边形网格模型的传输,常被应用于网格模型的各种递进简化算法中。简化模型的拓扑结构保持
简化过程中是否保持网格模型的拓扑结构不变也是区分不同简化算法的一个重要依据。网格模型的拓扑结构通常指构成网格模型的各三角网格之间的连接关系。衡量模型简化算法是否能保持拓扑结构一般是通过判断网格表面的亏格(Genus)和流型(Manifold)是否在简化过程中保持不变来确定。亏格采用网格表面的孔洞数量来计算。
下图为两种类型的顶点对:

模型试验结果:

QEM算法的基本操作基于边折叠,误差测度采用的是二次误差测度。二次误差测度最早是由Garland提出,采用点到平面距离的平方作为误差测度。它的优点是具有较高的计算速度,较小的内存消耗,而且得到的简化网格具有较高质量。它是在速度非常快但简化质量很差、速度很慢但简化质量非常好的两类方法之间的一种折中,是一种兼顾了速度和质量的较理想的误差测度。
在三维欧氏空间中,一个平面可以表示为: 其中 时平面的单位法向量,d时常量。点 到该平面的距离就可以表示为:

表面属性

在计算机图形学中, 三角网格模型最常见的表面属性有颜色、纹理和法线。为了使简化模型同初始模型具有良好的相似性, 必须在保持模型几何信息的同时保留这些属性特征。由于点到平面的距离考虑了简化操作对顶点周围区域属性值变化的影响, 可以比较准确地描述局部属性误差, 同时又比点到表面或表面到表面的距离计算简便快捷。因此, 采用点到平面的距离作为属性误差测度, 将二次误差测度应用到属性误差的计算中。
网格模型的每个顶点除了空间坐标外,还具有描述其属性的数值。在网格模型的三角面上, 属性值根据几何位置插值得到。因此, 三角面上的属性值是连续的, 而且两个属性值之间的距离用欧氏距离来度量。
比如对于颜色属性,可以用三维矢量r,g,bT 来表示(0≤r,g,b≤1 ),所有颜色矢量构成了RGB彩色空间,在RGB彩色空间中点到平面的距离平方同样可以用二次误差Q(v)来计算。边折叠后的新顶点采用子集选择法,不用重新计算顶点的空间位置和属性值,在计算误差的时候不用考虑空间坐标和属性值的相关性,只需分别建立几何二次误差测度和属性二次误差测度,并计算几何和属性误差。

边折叠操作的代价

采用带有颜色属性的模型应用算法,带有其他属性的网格模型可以同理推出。三角网格模型的每个顶点vg=x,y,zT 和vc=r,g,bT (0≤r,g,b≤1 )来表征几何和颜色信息。为每个三角面建立几何二次误差测度Qfg 和颜色二次误差测度Qfc 。各顶点的二次误差测度之和:

当边折叠(v1 , v2 )到顶点v的时候,总的二次误差测度为:

故而边折叠引起的几何误差Eg=Qgvg ,颜色属性误差Ec=Qcvc 。则总的边折叠代价为:

其中α为颜色属性误差在总代价中的影响系数,可以根据实际情况进行调节

参考资料:

Garland Heckbert. 网格简化算法
网格简化
vcglib库
vcglib库文章
网格简化 QEM 方法详解

网格简化 二 、QEM算法相关推荐

  1. 【图形学】网格简化及边坍缩( Edge Collapse )算法

    本文参考论文: Surface Simplification Using Quadric Error Metrics 本文参考书籍:Real-Time Rendering 第四版 目录 1. 网格简化 ...

  2. 12、计算机图形学——几何(网格细分与网格简化)

    一.网格细分 1.1.概念 网格细分指的是将原有模型上的网格分成更多个网格,从而将模型变得更加精细,提高渲染出来的效果,让画面更加漂亮 下图就是一个网格细分的示意,左图是细分前的效果,右图是细分后的效 ...

  3. 实现边坍塌的网格简化方法

    一.算法介绍 关于边塌陷的网格简化方法,SIGGRAPH 有一篇97年的论文Surface Simplification Using Quadric Error Metrics(Michael& ...

  4. 感知机(Perceptro)二分类算法原理学习小结记录

    感知机是非常古老的一个二分类算法,原理非常简单,直观地来说,对于平面上的两类数据点,找到一条直线来将其划分开来,对于空间中的点,用一个平面来将两部分完全划分开,这样的数据都是线性可分的,也就是在平面或 ...

  5. 视相关细节层次网格简化方法(VDPM-LOD)

    基于视相关技术的 LOD 允许使用复杂度可变的三角形网格面来渲染同一个对象, 可以根据对象和视点的相关位置来动态调整网格的复杂性 .当对象接近视点时细化三角形网格 , 当对象远离视点时粗化三角形网格 ...

  6. 大话分布式理论之二——共识算法与一致性的区别

    [系列目录] 大话分布式理论之二--共识算法与一致性的区别 大话分布式理论之一--从单体到SOA再到微服务 文章目录 共识算法 拜占庭将军问题 分布式理论中的将军们 共识算法-Paxos/Raft等 ...

  7. matlab 绘制方格网格(二维)

    绘制方格网格(二维) close all; clc,clear;[x,y]=meshgrid(0:151); %产生网格数据. plot(x,y,'k',y,x,'k'); %横线&竖线. a ...

  8. ML之LiRSGDR:基于二种算法(LiR、SGDR)对Boston(波士顿房价)数据集(506,13+1)进行价格回归预测并对比各自性能

    ML之LiR&SGDR:基于二种算法(LiR.SGDR)对Boston(波士顿房价)数据集(506,13+1)进行价格回归预测并对比各自性能 目录 输出结果 设计思路 核心代码 输出结果 Bo ...

  9. Algorithm:【Algorithm算法进阶之路】之数据结构二十多种算法演示

    Algorithm:[Algorithm算法进阶之路]之数据结构二十多种算法演示 目录 一.数据结构算法 1.顺序表 2.链表 3.栈和队列 4.串的模式匹配 5.稀疏矩阵 6.广义表 7.二叉树 8 ...

  10. JavaScript实现数乘以二multiplyByTwo算法(附完整源码)

    JavaScript实现数乘以二multiplyByTwo算法(附完整源码) multiplyByTwo.js完整源代码 multiplyByTwo.js完整源代码 /*** @param {numb ...

最新文章

  1. Python 之 Pandas (六)合并
  2. 深入理解数据结构之链表
  3. shell中通过sed替换文件中路径
  4. python学习 day2 (3月2日)
  5. Synchronize和Lock 的区别与用法
  6. bpython使用_使用Python实现一个简单的A/B测试
  7. 去螨虫能不能用去螨皂?
  8. 个人工作总结04(冲刺二)
  9. Java描述设计模式(20):命令模式
  10. 30.课时30.【Django模板】autoescape标签使用详解(Av61533158,P30)
  11. Ubuntu安装特定版本安装包
  12. 【java】java基础之SPI框架实现-整体设计
  13. 基于Cocos2d-x的手机游戏性能监控
  14. 小D课堂 - 新版本微服务springcloud+Docker教程_5-08 断路器监控仪表参数
  15. iOS C语言~bzero函数、memset函数
  16. 计组第六章 计算机的运算方法
  17. nmap超快高效扫描端口
  18. ios wifi 定位_iOS中三种定位方式
  19. jQuery即点即改
  20. Linux之sudo自动输入密码

热门文章

  1. 九度 OJ 之 题目1538:GrassLand密码
  2. 天行健,君子以自强不息;地势坤,君子以厚德载物的权威解释
  3. lisp 圆柱螺旋线_AutoCAD.Lisp等距3D螺旋线
  4. 我们总是喜欢拿顺其自然来敷衍人生道路上的荆棘坎坷,却很少承认,真正的顺其自然是竭尽所能之后的不强求,而非两手一摊的不作为。
  5. android 拍照水印日期,胶片日期水印app安卓版-胶片日期水印手机版预约v1.0-发卡屋...
  6. FDMA/TDMA信号分析 IP core
  7. PowerBI中常用的DAX函数
  8. Microsoft SQL Server Native Client(sqlncli.msi)的安装程序包
  9. SpringCloud 微服务网关Gateway常用限流算法以及简单实现
  10. gateway请求就是404 nacos+gateway 搭建网关gateway