在计算机图形学中,我们将表面参数化表示为从表面到 R2R^2R2 。它通常由网格的每个顶点的一组新的 2D 坐标编码(并且可能还通过与原始曲面的面一一对应的一组新面)请注意,此定义与经典微分几何定义相反。
参数化有很多应用,从纹理映射到表面重新网格化。 已经提出了许多算法,它们可以大致分为四个分支:

  1. 单面片,固定边界:这些算法可以参数化表面的盘状部分,给定其边界的固定 2D 位置。 这些算法高效且简单,但由于边界固定,它们通常会产生高失真的匹配。
  2. 单面片,自由边界:这些算法让边界自由变形,大大减少了地图失真。 应注意防止边界自相交。
  3. 全局参数化:这些算法适用于具有任意属的网格。 他们最初将网格切割成多个可以单独参数化的补丁。 生成的贴图在切口(通常称为接缝)上是不连续的。
  4. 全局无缝参数化:这些是隐藏接缝的全局参数化算法,使参数化“连续”,具体假设我们将在后面讨论。

谐波参数化

谐波参数化是一种单面片、固定边界参数化算法,将扁平网格的 2D 坐标计算为两个谐波函数。
该算法分为3个步骤:

  1. 检测边界顶点
  2. 将边界顶点映射到圆
  3. 计算两个调和函数(一个用于 u,一个用于 v 坐标)。 调和函数使用圆上的固定顶点作为边界约束。

该算法可以使用 libigl 进行编码,如下所示:

Eigen::VectorXi bnd;
igl::boundary_loop(V,F,bnd);Eigen::MatrixXd bnd_uv;
igl::map_vertices_to_circle(V,bnd,bnd_uv);igl::harmonic(V,F,bnd,bnd_uv,1,V_uv);

其中 bnd 包含边界顶点的索引,bnd_uv 它们在 UV 平面上的位置,“1”表示我们要计算调和函数(2 表示双谐波,3 表示三谐波,等等)。
请注意,这三个函数中的每一个都被设计为可在其他参数化算法中重用。
可以通过以下方式在查看器中可视化 UV 参数化:

viewer.data().set_uv(V_uv);

然后使用 UV 坐标将程序棋盘纹理应用于网格:

最小二乘保形贴图

最小二乘保形贴图参数化最小化了参数化的保形(角度)失真。 与谐波参数化不同,它不需要有固定的边界。
LSCM 最小化以下能量:
ELSCM(u,v)=∫X12∣∇u⊥−∇v∣2dAE_{LSCM}(\mathbf u,\mathbf v)=\int_X\frac{1}{2}|\nabla \mathbf u^{\perp}-\nabla \mathbf v|^2dAELSCM​(u,v)=∫X​21​∣∇u⊥−∇v∣2dA
使用矩阵的形式可以改写为
ELSCM(u,v)=12[u,v]t(Lc−2A)[u,v]E_{LSCM}(\mathbf u,\mathbf v)=\frac{1}{2}[\mathbf u,\mathbf v]^t(L_c-2A)[\mathbf u,\mathbf v]ELSCM​(u,v)=21​[u,v]t(Lc​−2A)[u,v]
其中LcL_cLc​是一个余切拉普拉斯矩阵,A是一个使得[u,v]t(Lc−2A)[u,v][\mathbf u,\mathbf v]^t(L_c-2A)[\mathbf u,\mathbf v][u,v]t(Lc​−2A)[u,v]等于网格的矢量面积的矩阵。
使用 libigl,这个矩阵能量可以用几行代码编写。 余切矩阵可以使用 igl::cotmatrix 计算:

SparseMatrix<double> L;
igl::cotmatrix(V,F,L);

请注意,我们希望将拉普拉斯矩阵同时应用于 u 和 v 坐标,因此我们需要将其扩展为具有 2x2 单位矩阵的左 Kronecker 乘积:

SparseMatrix<double> L_flat;
igl::repdiag(L,2,L_flat);

面积矩阵用 igl::vector_area_matrix 计算:

SparseMatrix<double> A;
igl::vector_area_matrix(F,A);

最终的能量矩阵是Lflat−2AL_{flat}-2ALflat​−2A。请注意,在这种情况下,我们不需要修复边界。 为了去除能量的零空间并使最小值唯一,将两个任意顶点固定到两个任意位置就足够了。 示例 502 中提供了完整的源代码。

尽可能刚性的参数化

As-rigid-as-possible 参数化是一种强大的单面片非线性算法,用于计算努力保持距离(以及角度)的参数化。这个想法与 ARAP 表面变形非常相似:每个三角形都映射到试图保持其原始形状的平面,直至进行刚性旋转。
该算法可以重复使用变形章节中讨论的函数来实现:igl::arap_precomputation 和 igl::arap_solve。 唯一的区别是优化必须在 2D 而不是 3D 中完成,并且我们需要计算一个起点。虽然对于 3D 变形,优化是使用原始网格自举的,但对于 ARAP 参数化,情况并非如此,因为起点必须是 2D 网格。在示例 503 中,我们使用谐波参数化初始化优化。 与 LSCM 类似,边界可以自由变形以最小化失真。

N-旋转对称切场

切场设计是用于设计均匀四边形和六面体网格重新划分的引导场的基本工具。Libigl 包含所有最先进算法的实现,用于设计 N-RoSy 字段及其泛化。
在 libigl 中,切线单位长度向量场在三角形网格的面上是分段常数,并且它们由每个面的一个或多个向量来描述。 函数

igl::nrosy(V,F,b,bc,b_soft,b_soft_weight,bc_soft,N,0.5,output_field,output_singularities);

从一组稀疏的约束面开始创建一个平滑的单位长度向量场 (N=1),其索引在 b 中列出,它们的约束值在 bc 中指定.这些函数支持soft_constraints(b_soft、b_soft_weight、bc_soft),并返回三角形网格每个面的插值场(output_field),加上场的奇异性(output_singularities)。

奇点是场消失的顶点(在上图中以红色突出显示)。,这是向量场的概括,其中在每个面中,向量被定义为恒定旋转π/2\pi/2π/2。从下图中可以看出,不同N生成的场的奇点类型不同,出现的位置也不同。


我们在示例 504 中演示了如何调用和绘制 N-RoSy 字段,其中可以按数字键更改字段的程度。 igl::nrosy 实现了 26 中提出的算法.N-RoSy 字段也可以使用许多其他算法进行插值,请参阅库 libdirectional 以获得最流行算法的参考实现。有关各种应用中使用的字段的完整分类,请参见 Vaxman 等人。 2016 年。

全局无缝整数网格参数化

以前的参数化方法专注于创建表面补丁的参数化,旨在纹理映射或烘焙其他表面属性,如法线和高频细节。全局无缝参数化旨在通过参数化对复杂形状进行参数化,该参数化与给定的一组方向对齐,以用于表面重新网格化。在 libigl 中,我们提供了混合整数四边形论文中提出的管道的参考实现。
第一步涉及 4-RoSy 场(有时称为交叉场)的设计,它描述了所需四边形重新网格化的边缘的对齐方式。场约束通常是手动指定或从主曲率方向提取的。在示例 506 中,我们只是将一张脸固定在随机方向上。

梳理和切割

给定交叉场,我们现在要切割表面,使其与圆盘同胚。虽然这可以直接在交叉场上完成,但我们选择在其平分场(旋转 45 度的场的副本)上执行此操作,因为它更稳定和通用。在平分线上工作使我们能够将广义的、非正交的和非单位长度的交叉场作为输入。
因此,我们旋转场,

我们通过为每个面分配一个 u 和一个 v 方向来消除旋转歧义。 分配是通过从随机面片开始的广度优先搜索完成的。

你可以把这个过程想象成梳理一个毛茸茸的表面:你将能够梳理它的一部分,但在某些时候你将无法始终梳理整个表面(毛球定理)。 梳理中的不连续点定义了割图:

最后,我们将梳状场旋转 45 度以撤消初始旋转度数:

梳状交叉场可以看作是参数化的理想雅可比行列式,将在下一节中计算。

泊松参数化

沿着接缝切割网格并计算参数化,试图找到两个标量函数,其梯度与梳状交叉场方向相匹配。这是一个经典的泊松问题,可以通过最小化以下二次能量来解决:
E(u,v)=∣∇u−Xu∣2+∣∇v−Xv∣2E(\mathbf u,\mathbf v)=|\nabla \mathbf u-X_u|^2+|\nabla \mathbf v-X_v|^2E(u,v)=∣∇u−Xu​∣2+∣∇v−Xv​∣2
其中XuX_uXu​和XvX_vXv​表示精梳交叉场。解决这个问题会生成一个参数化,其 u 和 v 等值线与输入交叉场对齐。

我们通过向泊松问题添加整数约束来隐藏接缝,使每个接缝两侧的等值线对齐。

请注意,此参数化只能用于重新划分网格,因为它包含许多重叠。

可以使用 libQEx(未包含在 libigl 中)从此参数化中提取四边形网格。 完整的流水线在示例 505 中实现。

各向异性重新划分网格

各向异性和非均匀四边形重新划分网格对于将元素集中在具有更多细节的区域中非常重要。可以扩展 MIQ 四边形网格划分框架以使用网格变形方法生成各向异性四边形网格。
各向异性重新划分网格算法的输入是一组稀疏的约束,这些约束定义了所需四边形的形状和比例。这可以编码为帧字段,它是一对非正交和非单位长度的向量。帧场可以通过将其分解为 4-RoSy 场和独特的仿射变换来进行插值。 然后可以分别对这两个部分进行插值,对交叉场使用 igl::nrosy,对仿射部分使用谐波插值。

插值后,曲面被扭曲以将每个帧转换为正交和单位长度的交叉(即从帧中移除缩放和偏斜)。 这种变形为表面定义了一个新的嵌入(和一个新的度量)。

可以使用上一节中介绍的 MIQ 算法对变形表面进行各向同性重新划分网格。

然后可以使用变形表面的 UV 坐标将参数化传输到原始表面,其中等值线将跟踪四边形网格,其元素与输入帧字段中规定的形状相似。

我们的实现(示例 506)使用 MIQ 生成 UV 参数化,但也可以应用其他算法:唯一的要求是生成的四边形网格应尽可能各向同性。

平面化

可以使用 Shape-Up 将四边形网格转换为平面四边形网格,这是一种局部/全局方法,使用全局步骤来强制表面连续性和局部步骤来强制平面性。
示例 507 对四边形网格进行平面化,直到其满足用户给定的平面度阈值。

libigl第五章-参数化相关推荐

  1. 《Go语言圣经》学习笔记 第五章函数

    <Go语言圣经>学习笔记 第五章 函数 目录 函数声明 递归 多返回值 匿名函数 可变参数 Deferred函数 Panic异常 Recover捕获异常 注:学习<Go语言圣经> ...

  2. MLAPP————第五章 贝叶斯统计

    第五章 贝叶斯统计 5.1 简介 前面我们已经介绍了很多不同的概率分布,以及如果将这些概率分布与我们的数据进行结合.我们考虑了各种各样的先验,我们学习了MAP去估计参数,从而去判别新的样本,我们学会了 ...

  3. 第五章 Spring Boot的数据库编程

    若有错,请指出 第二章 搭建Springboot环境,配置视图解析器jsp页面 第三章 全注解下的Spring Ioc 第四章 约定编程-Spring AOP 第五章 Spring Boot的数据库编 ...

  4. 王道考研 计算机网络笔记 第五章:传输层

    本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 第一章:王道考研 计算机网络笔记 第一章:概述&计算机网络体系结构 第二章:王道考研 计算机网络笔记 第 ...

  5. 数字图像处理——第五章 图像复原与重建

    数字图像处理--第五章 图像复原与重建 文章目录 数字图像处理--第五章 图像复原与重建 写在前面 1 图像退化/复原过程的模型 2 噪声模型 2.1 高斯噪声 2.2 椒盐噪声 3 仅有噪声的复原- ...

  6. c语言逐步搜索法求有根区间,[C语言第五章.ppt

    [C语言第五章 算法举例 基本思想是,根据提出的问题,列举所有可能的情况,并 用问题中给定的条件检验哪些是需要的,哪些是不需要的. 教学进程 列举与试探 列举法常用于解决"是否存在" ...

  7. 2018-4-8蚁群算法---包子阳《智能优化算法以及Matlab实现》第五章

    资料来源: <智能优化算法以及matlab实现>包子阳  余继周 编著 第五章-----蚁群算法 是一种元启发式优化算法(自己理解:就是作为群体的单位个体也就是元,在里面充当着随机的选择搜 ...

  8. Linux内核分析——第五章 系统调用

    第五章 系统调用 5.1 与内核通信 1.系统调用在用户空间进程和硬件设备之间添加了一个中间层,该层主要作用有三个: (1)为用户空间提供了一种硬件的抽象接口 (2)系统调用保证了系统的稳定和安全 ( ...

  9. 2021 线性代数 第五章 习题课

    第5章 实对称矩阵与二次型 5.1 实对称矩阵的对角化(基础部分) 5.1 实对称矩阵的对角化(提高部分) 5.2 二次型及标准形(基础部分) 5.2 二次型及标准形(提高部分) 5.3 正定二次型与 ...

最新文章

  1. 服务器系统摁c,如何系统有效学习c服务器开发
  2. Xcode环境变量,Build Settings参数
  3. 对象的内置属性和js的对象之父Object()
  4. 反编译中内部类调用外部类成员问题
  5. 聊聊flink的Execution Plan Visualization
  6. 【小程序】刘一哥课堂随机点名提问神器V1.0(附源程序)
  7. ArcUser 2006第2期拾零
  8. java生成pdf417_生成PDF417的JAVA包.rar
  9. 成大事必备9种能力.9种手段.9种心态
  10. C/C++——C++中new与malloc的10点区别
  11. android 人脸识别边框_Android相机预览,指定区域显示预览框,在区域内出现人脸进行人脸识别,并抓拍人脸照片存在本地,CameraX,虹软人脸识别...
  12. 编程语言:类型系统的本质
  13. 仿360水波评分特效、加速球特效、水波动态加载动画、可改造成圆形进度条,很丝滑!
  14. 如何合并两个excel表格数据
  15. 线性代数笔记33——基变换和图像压缩
  16. linux find工作原理,Linux基础教程:find 与 xargs
  17. 概要设计与详细设计分别要做什么
  18. 常见SOC启动流程分析
  19. 如何给Mac挑选外接显示器?苹果外接显示器选购指南
  20. 基于ImagePy工具的岩块图像二值化分割研究

热门文章

  1. 使用腾讯云服务器搭建离线(中转)网盘
  2. 深度学习评估指标之目标检测——(yolov5 可视化训练结果以及result.txt解析)
  3. node和npm的关系,node和npm的关联
  4. linux 下安装mysql相关笔记
  5. 递归与迭代,台阶问题,斐波那契,分治算法
  6. 微信 {errcode:48001,errmsg:api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]}
  7. C# 设置线程的默认CultureInfo
  8. JavaScript教程-setTimeout,setInterval,
  9. average and standard deviation-平均数和标准差
  10. java file.separator_关于Java的File.separator