参数化

参数化方法可大致分为四族:

  1. Single patch, fixed boundary. parametrize a disk-like part of the surface given fixed 2D positions for its boundary. 简单,高校,但是参数化后的map有很大distortion
  2. Single patch, free boundary. 减少了map distortion,但是可能出现self-intersection
  3. Global parametrization. 对任意亏格的网格均适用。初始的时候把网格切为多个patches,然后分别参数化。生成的maps在切边是不连续的(切边也称为seams,缝)
  4. Global seamless parametrization. 使得参数化结果”continuous“

Harmonic Parametrization

调和参数化是一种single patch,fixed boundary的算法。

算法步骤如下:

  1. 检测boundary vertices
  2. 把boundary vertices映射到一个圆上
  3. 计算两个harmonic functions(uv坐标)。调和函数使用固定在圆上的顶点作为边界约束

libigl实现

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

bnd是边界顶点的序列号,bnd_uv是他们在UV平面上的位置,1表示我们使用harmonic function计算(2表示biharmonic,3表示triharmonic等等)

UV参数化结果可以展示为:

viewer.data().set_uv(V_uv);

LSCM (Least Squares Conformal Maps)

LSCM参数化是最小化conformal (angular) 失真,LSCM不需要固定边界。

LSCM最小化如下能量:
ELSCM(u,v)=∫X12∣∇u⊥−∇v∣2dAE_{LSCM}(u,v)=\int_{X}\frac{1}{2}|\nabla u^{\perp }-\nabla v|^2dA ELSCM(u,v)=X21uv2dA
写成矩阵形式:
ELSCM(u,v)=12[u,v]t(Lc−2A)[u,v]E_{LSCM}(u,v)=\frac{1}{2}[u,v]^t(L_{c}-2A)[u,v] ELSCM(u,v)=21[u,v]t(Lc2A)[u,v]
这里LcL_cLc是余切Laplacian矩阵;A是面积变换矩阵,[u,v]tA[u,v][u,v]^tA[u,v][u,v]tA[u,v]和网格的vector area相等。

libigl首先使用igl::cotmatrix计算余切矩阵

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

因为我们想同时对u和v坐标使用Laplacian matrix,把它扩展一下:

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

面积矩阵A计算如下:

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

最终能量矩阵是Lflat−2AL_{flat}-2ALflat2A

ARAP (As-rigid-as-possible)

ARAP是single patch,free boundary方法。尽可能保留距离。每个三角形在映射到平面上时尽可能保留它的原始外形,顶多发生rigid rotation

首先,利用harmonic参数化计算ARAP的初始解

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

然后,初始化ARAP

igl::ARAPData arap_data;
arap_data.with_dynamics = true;
Eigen::VectorXi b = Eigen::VectorXi::Zero(0);
Eigen::MatrixXd bc = Eigen::MatrixXd::Zero(0, 0);arap_data.max_iter = 100;
arap_precomputation(V, F, 2, b, arap_data);

接着,求解优化

V_uv = initial_guess;
arap_solve(bc, arap_data, V_uv);

N-rotationally Symmetric Tangent Fields

Tangent fields 这个东西是用来design guidance fields,为uniform quadrilateral 和 hexahedral remeshing服务的。Libigl提供了一些N-RoSy fields 的算法,

在libigl里,tangent unit-length vector fields 是piece-wise constant的,对三角网格的每个面片而言。每个面片上用一个或多个vectors描述。

函数igl::nrosy(V,F,b,bc,b_soft,b_soft_weight,bc_soft,N,0.5,output_field,output_singularities)创建了一个光滑的单位长度向量场(N=1),从一个sparse set of constrained faces开始,faces的indices是b,它们的约束值定义在bc里。函数支持软约束,返回插值的场,还有场的奇异值。

所谓奇异值,是指场vanished的顶点。igl::nrosy还能生成N-RoSy场,这是向量场的一种泛化,对每个面,向量取决去一个旋转常量2π/N2\pi/N2π/N。不同的N值,奇异值的样式和位置都不一样。

Global, Semless Integer-grid Parametrization

全局的,无缝的参数化,目标是把一个复杂形状参数化,使其和一个给定的set of directions对齐。目的是做surface remeshing。

Libigl提供了mixed integer quadrangulation paper的求解过程:

  1. 设计一个4-RoSy场(也叫cross field),描述了remeshing所需要对齐的边。这个场的约束通常是人工设置或者通过主曲率方向提取的。
  2. Combing and cutting。给定cross field后,需要把表面剪开,使其与圆盘拓扑同胚。这个可以直接在cross-field上做,也可以在它的bisector field(把cross-field旋转45度)上做。因为在后者上做更加stable和generic。因此我们首先旋转cross field,然后通过给每个面指定u和v方向,移除掉歧义的rotation。这个指定使用广度优先搜索,从任意一个face开始。这个过程类似梳毛,在某些点,无法一致性地区把整个表面捋顺,这些不连续边就定义了cut graph。最后,我们把combed filed旋转45度,恢复初始的角度。combed cross field可以认为是一个理想的Jacobian。
  3. Poisson参数化。网格沿着上述找到的缝切开,参数化通过计算试图找到两个标量函数,使其梯度和combed cross field匹配。E(u,v)=∣∇u−Xu∣2+∣∇v−Xv∣2E(u,v)=|\nabla u-X_u|^2+|\nabla v-X_v|^2E(u,v)=uXu2+vXv2。通过求解这个能量最小化问题,得到一个参数化表示,其中u和v等值线和输入的cross field是对齐的。我们通过增加interger constraints来对齐缝的两边。

这种参数化方法只能用于remeshing,因为它包含了很多overlaps

Anisotropic Remeshing

各项异的remeshing和非统一的quad remeshing对于concentrate the elements in the regions with more details十分重要。可以通过扩展MIQ quad meshing framework,使用一个mesh deformation方法来生成各项异的quad meshed。

输入是一个sparse set of constraints,定义了shape和所需的quads的scale。这个可以被编码成一个frame field(一对non-orthogonal和non-unit length vectors)。这个frame field可以通过分解成一个4-RoSy场和一个unique affine transformation来插值。这两部分可以分别插值。对cross field,使用igl::nrosy,对affine part使用harmonic interpolant。

插值后,表面被warp,each frame被变形为一个正交的和单位长度的cross(移除了尺度和skewness from the frame)。这个变形定义了一个新的表面嵌入(embedding,同时一个新的metric)。

变形后的表面可以使用MIQ算法做各项异的remeshing。变形后的表面的uv坐标可以用来把参数化传递到原始表面。

Planarizatoin

一个quad mesh可以变形到一个平面quad mesh,使用Shape-Up方法。这是一种local/global方法,global step确保surface continuity,local step确保planarity。

igl::planarize

【笔记】Libig从入门到放弃(续)相关推荐

  1. Python学习笔记 之 从入门到放弃

    笔记目录 9月22日:<基础教程>基础知识 ·模块导入 ·用变量引用函数(或者Python中大多数的对象) ·将数值转换成字符串的方法:str类型.repr函数 9月23日:列表.元组 · ...

  2. python复数的实部和虚部都是整数嘛_Python学习笔记:从入门到放弃(2)基本语法...

    这次主要就记录一下Python中的基本语法,有标识符,注释,行与缩进,print函数输出以及数字类型和字符串 标志符: 第一个字符必须是字母表中字母或下划线 _ . 标识符的其他的部分由字母.数字和下 ...

  3. python中复数的实部和虚部都是浮点数_Python学习笔记:从入门到放弃(2)基本语法...

    这次主要就记录一下Python中的基本语法,有标识符,注释,行与缩进,print函数输出以及数字类型和字符串 标志符: 第一个字符必须是字母表中字母或下划线 _ . 标识符的其他的部分由字母.数字和下 ...

  4. AI从入门到放弃:BP神经网络算法推导及代码实现笔记

    作者 | @Aloys (腾讯员工,后台工程师) 本文授权转自腾讯的知乎专栏 ▌一. 前言: 作为AI入门小白,参考了一些文章,想记点笔记加深印象,发出来是给有需求的童鞋学习共勉,大神轻拍! [毒鸡汤 ...

  5. Django入门到放弃 学习笔记 03

    跟b站武沛齐老师的视频学习 对学习过程进行一些记录以便复习 同时自我督促 :D冲鸭 视频链接: 15天django入门到放弃-哔哩哔哩. 文章目录 内容回顾 Bootstrap安装 Fontaweso ...

  6. iOS即时通讯,从入门到“放弃”?

    image 前言 本文会用实例的方式,将iOS各种IM的方案都简单的实现一遍.并且提供一些选型.实现细节以及优化的建议. 注:文中的所有的代码示例,在github中都有demo: iOS即时通讯,从入 ...

  7. iOS即时通讯从入门到“放弃”?

    前言 本文会用实例的方式,将iOS各种IM的方案都简单的实现一遍.并且提供一些选型.实现细节以及优化的建议. 注:文中的所有的代码示例,在github中都有demo: iOS即时通讯,从入门到&quo ...

  8. AI从入门到放弃2:CNN的导火索,用MLP做图像分类识别?

    来源 | 腾讯知乎专栏 作者 | AIoys(腾讯员工,后台工程师) 项目文档和代码在此:github项目地址: https://github.com/zsysuper/AI_Notes ▌一.前言 ...

  9. python从入门到放弃图片大全-Python 从入门到放弃(一)

    Python 从入门到放弃(一) 一个没有逻辑顺序的python笔记,包括日常使用python时的总结与阅读<Python基础教程>([挪] Magnus Lie Hetland 著) 的 ...

最新文章

  1. linux下载哪个python版本-修改linux下python的默认版本
  2. 使用Ubuntu挂载NTFS格式分区
  3. nginx和apache的伪静态区别
  4. 事务默认的传播属性和事务默认的隔离级别
  5. .NET Core实战项目之CMS 第三章 入门篇-源码解析配置文件及依赖注入
  6. 超级硬盘数据恢复软件v2.7.2.6_超级硬盘数据恢复软件的U盘存储卡删除文件的恢复方式...
  7. Apache的流处理技术概述
  8. c#图片处理之:在图片上打上文字
  9. OpenCV统计应用-CvHistogram直方图资料
  10. intellij idea 的常用有用快捷键
  11. r-cnn 行人检测_了解对象检测和R-CNN。
  12. Linux学习笔记5 - Shell编程(类似于Windows下的批处理)
  13. Epicor ERP
  14. 搞懂朴素贝叶斯分类算法
  15. 关于微信支付电商平台二清解决方案
  16. 大数据背景下的信息资源管理
  17. 开源开放 | 面向家庭常见疾病的知识图谱(东南大学)
  18. Kubernetes 之 二进制安装(二) 证书详解
  19. 认认真真推荐 10 个优质自学平台
  20. 如何在苹果电脑上装软件

热门文章

  1. MOSFET 和 IGBT 栅极驱动器电路的基本原理学习笔记(六)变压器耦合栅极驱动
  2. Unity 导入人形骨骼模型及动画
  3. 【汉诺塔】C语言递归解法,深层次地带你理解汉诺塔公式
  4. WuThreat身份安全云-TVD每日漏洞情报-2022-12-22
  5. HTML 的静态网页分页样式
  6. cmd(命令行)操作或连接mysql数据库,以及创建数据库与表
  7. 解决:navicat连接mysql报错10060
  8. AI 操控战斗机战胜飞行员?道翰天琼认知智能机器人平台API接口大脑为您揭秘-3。
  9. 【踩坑】spconf.sty Latex样式模板的name包含下划线
  10. vue之组件传值 爷到孙 provide inject