Laplacian on Triangle Mesh

2023-10-12 12:20
文章标签 triangle mesh laplacian

本文主要是介绍Laplacian on Triangle Mesh,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Laplacian on Triangle Mesh

局部平均区域

基本思想是mesh面上的点x的值设置为其局部领域的平均。下图是几种具体的情况:

在这里插入图片描述

其中蓝色区域为局部平均区域。

  1. Barycentric cell:三角形的重心和三角形边的中点相连
  2. Voronoi cell:三角形的外心和三角形的中点相连(对于钝角三角形可能会出现外心在外部)
  3. Mixed Voronoi cell:在Voronoi cell的基础上,将钝角三角形的外心替换成钝角对边的中点

梯度

拉普拉斯算子是梯度的散度,所以我们需要先求出梯度。

在这里插入图片描述

属性插值函数:
f ( x ) = α f i + β f j + γ f k f(x)=\alpha f_i+\beta f_j+\gamma f_k \\ f(x)=αfi+βfj+γfk
其中: f i , f j , f k f_i,f_j,f_k fi,fj,fk是三角形三个顶点的属性值,x为三角形内部的点, α , β , γ \alpha , \beta , \gamma α,β,γ 是点x在三角形的重心坐标, α + β + γ = 1 \alpha + \beta + \gamma = 1 α+β+γ=1

梯度:
∇ x f ( x ) = f i ∇ x α + f j ∇ x β + f k ∇ x γ \nabla_xf(x)=f_i\nabla_x\alpha +f_j\nabla_x\beta +f_k\nabla_x\gamma xf(x)=fixα+fjxβ+fkxγ
对于 α \alpha α来说:
α = A i A T = ( ( x − x j ) ⋅ ( x k − x j ) ⊥ ∣ ∣ x k − x j ∣ ∣ 2 ) ∣ ∣ x k − x j ∣ ∣ 2 2 A T = ( x − x j ) ⋅ ( x k − x j ) ⊥ 2 A T \alpha = \frac{A_i}{A_T}=\frac{((x-x_j)\cdot\frac{(x_k-x_j)^\bot}{||x_k-x_j||_2})||x_k-x_j||_2}{2A_T}=\frac{(x-x_j)\cdot(x_k-x_j)^\bot}{2A_T} α=ATAi=2AT((xxj)xkxj2(xkxj))xkxj2=2AT(xxj)(xkxj)
x x x求导:
∇ x α = ( x k − x j ) ⊥ 2 A T ∇ x β = ( x i − x k ) ⊥ 2 A T ∇ x γ = ( x j − x i ) ⊥ 2 A T \nabla_x\alpha=\frac{(x_k-x_j)^\bot}{2A_T} \\ \nabla_x\beta=\frac{(x_i-x_k)^\bot}{2A_T} \\ \nabla_x\gamma=\frac{(x_j-x_i)^\bot}{2A_T} xα=2AT(xkxj)xβ=2AT(xixk)xγ=2AT(xjxi)
得到梯度公式:
∇ x f ( x ) = f i ( x k − x j ) ⊥ 2 A T + f j ( x i − x k ) ⊥ 2 A T + f k ( x j − x i ) ⊥ 2 A T \nabla_xf(x)=f_i\frac{(x_k-x_j)^\bot}{2A_T} +f_j\frac{(x_i-x_k)^\bot}{2A_T}+f_k\frac{(x_j-x_i)^\bot}{2A_T} xf(x)=fi2AT(xkxj)+fj2AT(xixk)+fk2AT(xjxi)
因为
( x k − x j ) ⊥ + ( x i − x k ) ⊥ + ( x j − x i ) ⊥ = 0 (x_k-x_j)^\bot+(x_i-x_k)^\bot+(x_j-x_i)^\bot=0 (xkxj)+(xixk)+(xjxi)=0
所以
∇ x f ( x ) = ( f j − f i ) ( x i − x k ) ⊥ 2 A T + ( f k − f i ) ( x j − x i ) ⊥ 2 A T \nabla_xf(x)=(f_j-f_i)\frac{(x_i-x_k)^\bot}{2A_T}+(f_k-f_i)\frac{(x_j-x_i)^\bot}{2A_T} xf(x)=(fjfi)2AT(xixk)+(fkfi)2AT(xjxi)

离散拉普拉斯算子

均匀拉普拉斯

Δ f ( v i ) = 1 ∣ N 1 ( v i ) ∣ ∑ v j ∈ N 1 ( v i ) ( f j − f i ) \Delta f(v_i) =\frac {1}{|N_1(v_i)|}\sum_{v_j \in N_1(v_i)}(f_j-f_i) Δf(vi)=N1(vi)1vjN1(vi)(fjfi)

此公式可以用于各向同性的remesh上。

余切形式的拉普拉斯

使用混合的有限元/有限体方法(mixed finite element/finite volume method),拉普拉斯算子可以更加精确地进行离散推导。目标是在局部平均区域A_i=A(v_i)上,对逐片线性函数梯度地散度进行积分。

在这里插入图片描述

∫ A i Δ f d A = ∫ A i d i v ∇ f d A = ∫ ∂ A i ( ∇ f ) ⋅ n d s \int_{A_i}\Delta fdA=\int_{A_i}div\nabla fdA=\int_{\partial{A_i}}(\nabla f)\cdot n ds AiΔfdA=AidivfdA=Ai(f)nds
将积分分解到每个三角形上,并且局部的Voronoi区域通过三角形两条边的中点 a a a b b b,并且每个三角形中 ∇ f ( x ) \nabla f(x) f(x)是常数,那么在该三角形 T T T上的积分为
∫ ∂ A i ∩ T ∇ f ⋅ n d s = ∇ f ⋅ ( a − b ) ⊥ = 1 2 ∇ f ( u ) ⋅ ( x j − x k ) ⊥ \int_{\partial{A_i\cap T}}∇f⋅nds = ∇f⋅(a−b) ^⊥= \frac{1}{2}∇f(u)⋅(x_j-x_k)^\bot AiTfnds=f(ab)=21f(u)(xjxk)

将梯度公式代入:
∫ ∂ A i ∩ T ∇ f ⋅ n d s = ( f j − f i ) ( x i − x k ) ⊥ ⋅ ( x j − x k ) ⊥ 2 A T + ( f k − f i ) ( x j − x i ) ⊥ ⋅ ( x j − x k ) ⊥ 2 A T \int_{\partial{A_i\cap T}}∇f⋅nds =(f_j-f_i)\frac{(x_i-x_k)^\bot \cdot (x_j-x_k)^\bot}{2A_T}+(f_k-f_i)\frac{(x_j-x_i)^\bot \cdot (x_j-x_k)^\bot}{2A_T} AiTfnds=(fjfi)2AT(xixk)(xjxk)+(fkfi)2AT(xjxi)(xjxk)

因为
A T = 1 2 s i n γ j ∣ ∣ x j − x i ∣ ∣ ∣ ∣ x j − x k ∣ ∣ = 1 2 s i n γ k ∣ ∣ x i − x k ∣ ∣ ∣ ∣ x j − x k ∣ ∣ A_T=\frac{1}{2}sin\gamma_j||x_j-x_i|| ||x_j-x_k||=\frac{1}{2}sin\gamma_k||x_i-x_k|| ||x_j-x_k|| AT=21sinγjxjxixjxk=21sinγkxixkxjxk

c o s γ j = ( x j − x k ) ⋅ ( x j − x k ) ∣ ∣ x j − x i ∣ ∣ ∣ ∣ x j − x k ∣ ∣ c o s γ k = ( x i − x k ) ⋅ ( x j − x k ) ∣ ∣ x i − x k ∣ ∣ ∣ ∣ x j − x k ∣ ∣ cos\gamma_j=\frac{(x_j-x_k)\cdot (x_j-x_k)}{||x_j-x_i||||x_j-x_k||} \\ cos\gamma_k=\frac{(x_i-x_k)\cdot (x_j-x_k)}{||x_i-x_k||||x_j-x_k||} cosγj=xjxixjxk(xjxk)(xjxk)cosγk=xixkxjxk(xixk)(xjxk)

于是得到:
∫ ∂ A i ∩ T ∇ f ⋅ n d s = 1 2 ( c o t γ k ( f j − f i ) + c o t γ j ( f k − f i ) ) \int_{\partial{A_i\cap T}}∇f⋅nds = \frac{1}{2}(cot\gamma_k(f_j-f_i)+cot\gamma_j(f_k-f_i)) AiTfnds=21(cotγk(fjfi)+cotγj(fkfi))
在整个局部平均区域 A i A_i Ai上积分得到:
∫ ∂ A i ∩ T ∇ f ⋅ n d s = 1 2 ∑ j ∈ Ω ( i ) ( c o t α i j + c o t β i j ) ( f j − f i ) \int_{\partial{A_i\cap T}}∇f⋅nds = \frac{1}{2} \sum_{j \in \Omega(i)}(cot\alpha_{ij}+cot\beta_{ij})(f_j-f_i) AiTfnds=21jΩ(i)(cotαij+cotβij)(fjfi)
所以在顶点 v i v_i vi处,函数 f f f拉普拉斯算子的离散平均为:
Δ f ( v i ) = 1 2 A i ∑ j ∈ Ω ( i ) ( c o t α i j + c o t β i j ) ( f j − f i ) \Delta f(v_i)=\frac{1}{2A_i} \sum_{j \in \Omega(i)}(cot\alpha_{ij}+cot\beta_{ij})(f_j-f_i) Δf(vi)=2Ai1jΩ(i)(cotαij+cotβij)(fjfi)

矩阵化求解拉普拉斯

Δ f ( v i ) = w i ∑ v j ∈ N 1 ( v i ) w i j ( f ( v j ) − f ( v i ) ) \Delta f(v_i) = w_i \sum_{v_j \in \mathcal{N}_1(v_i)} w_{ij} (f(v_j) - f(v_i)) Δf(vi)=wivjN1(vi)wij(f(vj)f(vi))
其中 w i = 1 2 A i , w i j = c o t α i j + c o t β i j w_i=\frac{1}{2A_i},w_{ij}=cot\alpha_{ij}+cot\beta_{ij} wi=2Ai1,wij=cotαij+cotβij。将线性和写成矩阵形式:
( Δ f ( v 1 ) ⋮ Δ f ( v n ) ) = D M ⏟ L ( f ( v 1 ) ⋮ f ( v n ) ) \begin{pmatrix} \Delta f(v_1) \\ \vdots \\ \Delta f(v_n) \end{pmatrix}=\underbrace{DM}_L \begin{pmatrix} f(v_1) \\ \vdots \\ f(v_n) \end{pmatrix} Δf(v1)Δf(vn)=L DMf(v1)f(vn)
其中 D = d i a g ( w 1 , . . . , w n ) D=diag(w_1,...,w_n) D=diag(w1,...,wn),M是对称矩阵:
m i , j = { − ∑ v k ∈ N 1 ( v i ) w i k , i = j w i j , v j ∈ N i ( v i ) 0 , otherwise m_{i,j} = \begin{cases} -\sum_{v_k \in \mathcal{N}_1(v_i)} w_{ik}, &i = j \\ w_{ij}, &v_j \in \mathcal{N}_i(v_i) \\ 0, & \text{otherwise} \end{cases} mi,j=vkN1(vi)wik,wij,0,i=jvjNi(vi)otherwise
更高阶的拉普拉斯可以递归得到:
Δ k f ( v i ) = w i ∑ v j ∈ N 1 ( v i ) w i j ( Δ k − 1 f ( v j ) − Δ k − 1 f ( v i ) ) \Delta^k f(v_i) = w_i \sum_{v_j \in \mathcal{N}_1(v_i)} w_{ij} ( \Delta^{k-1} f(v_j) - \Delta^{k-1} f(v_i)) Δkf(vi)=wivjN1(vi)wij(Δk1f(vj)Δk1f(vi))
那么这个矩阵表示就很简单的对应拉普拉斯矩阵 L L L k k k次幂 L k = ( D M ) k L^k=(DM)^k Lk=(DM)k

因此在n个顶点的mesh上更高阶的偏微分方程 Δ k f = b Δ^kf=b Δkf=b离散化之后会得到一个 ( n × n ) (n×n) (n×n)的线性系统:
L k x = b L^kx=b Lkx=b
其中 x = ( f ( v 1 ) , . . . , f ( v n ) ) T x=(f(v_1),...,f(v_n))^T x=(f(v1),...,f(vn))T,且 b = ( ( b ( v 1 ) , . . . , b ( v n ) ) ) T b=((b(v_1),...,b(v_n)))^T b=((b(v1),...,b(vn)))T

矩阵性质

稀疏性 简单说一下吧。拉普拉斯矩阵中只有对角元和边对应的元素是非0的,其余全是0。根据欧拉公式,平均每一行大约7个非0元素。

对称性 由于对角矩阵 D D D捣乱,所以矩阵 L = D M L=DM L=DM不是对称的。不过对于任意k阶的拉普拉斯系统很容易转换为对称系统,即
M ( D M ) k − 1 x = D − 1 b M(DM)^{k-1}x=D^{-1}b M(DM)k1x=D1b
正定性 一般来讲,解偏微分方程都需要边界条件。即对于一个线性系统 A x = b Ax=b Ax=b,有部分变量 x i x_i xi保持不变,此时它们不再是未知量了。此时将对应的列 a i a_i ai移到右手边,即 b ← b − x i a i b←b−x_ia_i bbxiai,同时对应的行从整个系统中移除。注意到此时整个系统还是保持对称的!!!在移除边界条件之后,可以证明矩阵 L L L是负定的!负定很简单,直接在每个 L L L上乘一个-1就行,因此我们最后得到
( − 1 ) k M ( D M ) k − 1 x = ( − 1 ) k D − 1 b (-1)^kM(DM)^{k-1}x=(-1)^kD^{-1}b (1)kM(DM)k1x=(1)kD1b
由此我们就得到了一个稀疏、对称且正定的线性系统。

Reference

[1]http://staff.ustc.edu.cn/~fuxm/course/2019_Spring_DGP/index.html
[2]https://optsolution.github.io/archives/19907.html

这篇关于Laplacian on Triangle Mesh的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/195768

相关文章

数据集 3DPW-开源户外三维人体建模-姿态估计-人体关键点-人体mesh建模 >> DataBall

3DPW 3DPW-开源户外三维人体建模数据集-姿态估计-人体关键点-人体mesh建模 开源户外三维人体数据集 @inproceedings{vonMarcard2018, title = {Recovering Accurate 3D Human Pose in The Wild Using IMUs and a Moving Camera}, author = {von Marc

数据集 Ubody人体smplx三维建模mesh-姿态估计 >> DataBall

Ubody开源人体三维源数据集-smplx-三维建模-姿态估计 UBody:一个连接全身网格恢复和真实生活场景的上半身数据集,旨在拟合全身网格恢复任务与现实场景之间的差距。 UBody包含来自多人的现实场景的1051k张高质量图像,这些图像拥有2D全身关键点、3D SMPLX模型。 UBody由国际数字经济学院(IDEA)提供。 (UBody was used for mesh r

leetCode#119. Pascal's Triangle II

Description Given an index k, return the kth row of the Pascal’s triangle. For example, given k = 3, Return [1,3,3,1]. Note: Could you optimize your algorithm to use only O(k) extra space? Code

Data Mesh,数据网格的道与术

周末的时候,看到有群友讨论关于 Data Mesh 的话题。这个名词我在2020年初的时候听到过一次,当时感觉就是一个概念,看的糊里糊涂,没有当回事。最近突然又被推上了话题风口,所以静下心来看了一下相关的论文和介绍。 在讨论 Data Mesh 之前,首先要给大家介绍一下 Service Mesh。 Service Mesh 公认的定义,是用以处理服务与服务之间通信的专用基础设施层。更本质的理

CodeForces 407A Triangle

题意: 一个直角三角形所有点都在二维平面整点上  其中两条边长度分别为a和b  且没有任何一条边与坐标轴平行  问  这样的三角形存不存在  如果存在输出一组坐标 思路: 可以设解存在  然后先固定(0,0)这个点  这样就可以求出所有满足边长是a和b的(x,y)坐标分别放在两个数组里 注意只枚举第一、二象限即可  要不还要防止三点共线 枚举a和b的所有解  如果这确定的三个点满足

National Contest for Private Universities (NCPU), 2019 E. Generalized Pascal's Triangle

编辑代码 2000ms 262144K Generalized Pascal's Triangle Pascal's triangle is a triangular array in which each number can be calculated by the sum of the two numbers directly above that number as shown i

Open3D mesh 模型精细化处理--中点剖分

目录 一、概述 1.1原理 1.2实现步骤 二、代码实现 2.1关键函数 输入参数 输出参数 三、实现效果 3.1原始mesh 3.2精细化mesh Open3D点云算法汇总及实战案例汇总的目录地址: Open3D点云算法与点云深度学习案例汇总(长期更新)-CSDN博客 一、概述         在三维模型处理过程中,精细化处理(subdivision)是一个

Open3D mesh 拉普拉斯laplacian滤波

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数  参数详解 返回值 2.2完整代码 三、实现效果 3.1加入噪点的mesh 3.2迭代10次 3.3迭代100次 Open3D点云算法汇总及实战案例汇总的目录地址: Open3D点云算法与点云深度学习案例汇总(长期更新)-CSDN博客 一、概述         拉普

Open3D mesh Taubin滤波

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 参数详解 返回值 2.2完整代码 三、实现效果 3.1加入噪声的mesh 3.2Taubin迭代10次 3.3Taubin迭代100次 Open3D点云算法汇总及实战案例汇总的目录地址: Open3D点云算法与点云深度学习案例汇总(长期更新)-CSDN博客 一、概述

Sobel算子,Scharr算子和Laplacian算子

图像边缘检测大幅度地减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性。有许多方法用于边缘检测, 绝大部分可以划分为两类:基于搜索和基于零穿越。 基于搜索:通过寻找图像一阶导数中的最大值来检测边界,然后利用计算结果估计边缘的局部方向,通常采用梯度的方向,并利用此方向找到局部梯度模的最大值,代表算法是Sobel算子和Scharr算子 基于零穿越:通过寻找图像二阶导数零穿越来寻找边