Mesh Saliency论文阅读

问题

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

基本思想

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

算法

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

G(C(v),σ)=xN(v,2σ)C(x)exv2/(2σ2)xN(v,2σ)exv2/(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})}}

通过对不同σ\sigma的选取,事实上我们建立了三维模型的高斯金字塔。对于一个给定的σ\sigma,重要程度S(v)\mathscr{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)|

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

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

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

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

应用:模型简化

QSlim

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

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

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

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

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

图9

应用:视角选择

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

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

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

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

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

图11

发布了36 篇原创文章 · 获赞 16 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 书香水墨 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览