Mesh Saliency论文阅读

问题

判定mesh上各点的“重要程度”,这里的重要程度,基本上是指在不同尺度(分辨率)下,几何特征的重要程度。

基本思想

在求解各点的平均曲率基础上,计算该点平均曲率在邻域内的显著性。类似于二维图像中金字塔的方法,建立三维模型的金字塔。

算法

假设我们已经计算得到了三维模型每个点上的平均曲率 C ( v ) \mathscr{C}(v) C(v),以高斯函数为权重(实际上就是一个带权的邻域,但通过全局计算,避免了对邻域直接求解),取 σ \sigma σ为高斯函数方差(或半径),按照下式计算其高斯滤波后的平均曲率 G ( C ( v ) , σ ) G(\mathscr{C}(v), \sigma) G(C(v),σ)

G ( C ( v ) , σ ) = ∑ x ∈ N ( v , 2 σ ) C ( x ) e − ∥ x − v ∥ 2 / ( 2 σ 2 ) ∑ x ∈ N ( v , 2 σ ) e − ∥ x − v ∥ 2 / ( 2 σ 2 ) G(\mathscr{C}(v), \sigma)=\frac{\sum_{x \in N(v, 2 \sigma)} \mathscr{C}(x) e^{-\|x-v\|^{2} / (2 \sigma^{2})}}{\sum_{x \in N(v, 2 \sigma)} e^{-\|x-v\|^{2} / (2 \sigma^{2})}} G(C(v),σ)=xN(v,2σ)exv2/(2σ2)xN(v,2σ)C(x)exv2/(2σ2)

通过对不同 σ \sigma σ的选取,事实上我们建立了三维模型的高斯金字塔。对于一个给定的 σ \sigma σ,重要程度 S ( v ) \mathscr{S}(v) S(v)计算方式如下:

S ( v ) = ∣ G ( C ( v ) , σ ) − G ( C ( v ) , 2 σ ) ∣ \mathscr{S}(v)=|G(\mathscr{C}(v), \sigma)-G(\mathscr{C}(v), 2 \sigma)| S(v)=G(C(v),σ)G(C(v),2σ)

显然,这和二维图像中计算特征点的方式也非常类似。

如果我们选择了多个不同的 σ i \sigma_i σi,那么我们也可以得到不同的 S i \mathscr{S}_i Si。对于不同分辨率下的Saliency,我们通过加权求和得到最终的Saliency。加权的原则是,如果Saliency方差越大,权重越大,方差越小,权重越小。因此我们首先对 S i \mathscr{S}_i Si归一化,然后选出其中最大值 M i M_i Mi和平均值 m ˉ i \bar{m}_i mˉi,权重就是 ( M i − m ˉ i ) 2 \left(M_{i}-\bar{m}_{i}\right)^{2} (Mimˉi)2。因此,最终的Saliency为

S = ∑ i ( M i − m ˉ i ) 2 S i \mathscr{S}=\sum_{i} (M_i-\bar{m}_i)^{2} \mathscr{S}_{i} S=i(Mimˉi)2Si

Saliency计算非常简单,到这里就结束了,所以下面是对重要性的两个简单应用。

应用:模型简化

QSlim

首先介绍QSlim算法,然后讲Saliency如何改进QSlim算法。QSlim算法基本思想,是每次合并一组相邻的顶点,使得顶点数量越来越少。对于每一个顶点 v v v,相邻平面组成的几何为 P P P。遍历每一个 p ∈ P p \in P pP,计算平面方程 a x + b y + c z + d = 0 , a 2 + b 2 + c 2 = 1 ax+by+cz+d=0,a^2+b^2+c^2=1 ax+by+cz+d=0,a2+b2+c2=1,将四个系数表示成 p = ( a   b   c   d ) T p=(a~b~c~d)^T p=(a b c d)T。对于任何一点 x x x,计算它到平面的距离为 x T p p T x x^Tpp^Tx xTppTx。计算它到顶点 v v v邻近所有平面的距离之和,如果将 p p T pp^T ppT写成 Q p Q_p Qp,则距离和为 ∑ p x T Q p x = x T ( ∑ p Q p ) x \sum_p x^TQ_px = x^T (\sum_p Q_p) x pxTQpx=xT(pQp)x。将 ∑ p Q p \sum_p Q_p pQp记做 Q v Q_v Qv

对于一对相邻的点 ( v i , v j ) (v_i,v_j) (vi,vj),分别计算 v i v_i vi到以 v j v_j vj为中心的所有面的距离,和 v j v_j vj到以 v i v_i vi为中心的所有面的距离,并求和,得到 v i T Q v j v i + v j T Q v i v j v_i^T Q_{v_j} v_i + v_j^T Q_{v_i} v_j viTQvjvi+vjTQvivj。如果我们要合并 v i v_i vi v j v_j vj到中间的一点 v ˉ \bar{v} vˉ,则 v ˉ \bar{v} vˉ对应的距离为 v ˉ T ( Q v j + Q v i ) v ˉ \bar{v}^T (Q_{v_j} + Q_{v_i}) \bar{v} vˉT(Qvj+Qvi)vˉ(称之为Quadric)。对于每一条边,我们计算这一 v ˉ \bar{v} vˉ和对应的距离和,将最小距离和的那一对边进行合并。合并后,新的 Q v ˉ = Q v i + Q v j Q_{\bar{v}} = Q_{v_i} + Q_{v_j} Qvˉ=Qvi+Qvj,并更新所有会影响到的邻近的边的 v ˉ \bar{v} vˉ和Quadric值。

Saliency的改进

Saliency的改进是,包含模型特征的点不应该过早地被合并。因此,它给Quadric值之上,额外增加了一个权重项,这个权重项附带在每个顶点上,为

W ( v ) = A ( S ( v ) , α , λ ) = { λ S ( v )  if  S ( v ) > = α S ( v )  if  S ( v ) < α \mathscr{W}(v)=A(\mathscr{S}(v), \alpha, \lambda)=\left\{\begin{array}{ll} \lambda \mathscr{S}(v) & \text { if } \mathscr{S}(v)>=\alpha \\ \mathscr{S}(v) & \text { if } \mathscr{S}(v)<\alpha \end{array}\right. W(v)=A(S(v),α,λ)={ λS(v)S(v) if S(v)>=α if S(v)<α

即如果Saliency小于某一阈值 α \alpha α,则权重就是Saliency值;如果大于阈值,则表示极其关键的特征,因此需尽量不被合并,因此再额外增加一个比例系数 λ > 1 \lambda>1 λ>1。在原文中,作者取 λ = 100 \lambda=100 λ=100 α \alpha α为第30大的saliency值。

注意到这个权重是加在顶点上的,对于边 e ( v i , v j ) e(v_i,v_j) e(vi,vj),则权重为 W ( v i ) + W ( v j ) \mathscr{W}\left(v_{i}\right)+\mathscr{W}\left(v_{j}\right) W(vi)+W(vj)

原文给了一个例子,见Figure 9,可以看到,在Saliency权重下,特征得到了更好地保持。

Mesh Saliency论文阅读_第1张图片

应用:视角选择

假设在视角 v v v下,能看到的部分模型表面顶点集合为 F ( v ) F(v) F(v)。则对于视角下的Saliency总和 U ( v ) U(v) U(v),为

U ( v ) = Σ x ∈ F ( v ) S ( x ) U(v)=\Sigma_{x \in F(v)} \mathscr{S}(x) U(v)=ΣxF(v)S(x)

显然,最佳视角应该是 v m = argmax ⁡ v U ( v ) v_{m}=\operatorname{argmax}_v U(v) vm=argmaxvU(v)。在Saliency算法之前, U ( v ) U(v) U(v)通常是所有可见顶点的平均曲率之和。

直接计算 v m v_m vm会非常耗时,作者使用了梯度下降的方法,先随机选择一个视角 v ( θ , ϕ ) v(\theta,\phi) v(θ,ϕ),其中 θ \theta θ ϕ \phi ϕ分别表示经度和纬度。然后搜索附近的视角,选择使Saliency和最大的一个,重复上述过程。多选几个随机初始点,重复过程。

结果显示(见Figure 11),Saliency的视角选择比直接平均曲率视角选择要更好。

Mesh Saliency论文阅读_第2张图片

你可能感兴趣的:(图形学)