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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章