
本文共 14360 字,大约阅读时间需要 47 分钟。
PCL MLS論文Computing and Rendering Point Set Surfaces研讀筆記
前言
做點雲處理最有名的庫當屬PCL了。PCL的MLS(Moving Least Squares)模塊用於表面平滑,而其理論基礎便是Computing and Rendering Point Set Surfaces這篇論文。本篇主要探討論文裡的3 Defining the surface - projecting
及5 Generating the representation point set
這兩部份。
本文著重理解算法各步驟的前後關係,並補全了論文當中省略的公式推導。文章中螢光標記的部份表示還沒完全明白,需要再仔細研究。
定義曲面 - 投影
投影步驟
MLS對點雲做平滑,實際上在做的事情是對點雲中的每個點,都用它附近的點擬合一個曲面,然後再將該點投影到曲面上。但是在這篇論文中,並不是直接尋找曲面,而是先在局部擬合一個"平"面,然後才去尋找曲面。
尋找點 r r r的擬合平面(或說座標系) H H H
論文裡對平面H的描述如下: H = { x ∣ < n , x > − D = 0 , x ∈ R 3 } , n ∈ R 3 , ∥ n ∥ = 1 H = \{x | \left<n, x\right> - D = 0, x \in R^3\}, n \in \R^3, \|n\| = 1 H={ x∣⟨n,x⟩−D=0,x∈R3},n∈R3,∥n∥=1。乍看之下有點不明所以。
我們可以先從我們熟悉的平面方程上手: a x 1 + b x 2 + c x 3 + d = 0 ax_1+bx_2+cx_3+d = 0 ax1+bx2+cx3+d=0。論文裡寫的 < n , x > − D = 0 \left< n,x \right>-D = 0 ⟨n,x⟩−D=0與上式是其實同一個意思,只要把 n n n這個法向量看成 ( a , b , c ) (a,b,c) (a,b,c), D D D看成 − d -d −d即可。觀察 < n , x > − D = 0 \left< n,x \right>-D = 0 ⟨n,x⟩−D=0,我們可以發現,一個平面是可以由其法向量及其到原點的距離來定義的。
要用點 r r r附近的點擬合一個平面,我們有無數種選擇,因此這裡我們還需要一個cost function,用來指引什麼樣的平面是我們所偏好的。MLS希望找到的平面用文字說明如下:希望找到一個平面 H H H,使得集合 { p 1 , . . . , p N } \{p_1, ..., p_N\} { p1,...,pN}裡的所有點 p i p_i pi到平面 H H H的距離平方和是最小的。另外,每個點還會被進行加權,離點 r r r越近的點權重越高,反之則越低。到此,已經明確了我們的目標:最小化加權距離平方和。
以下即為論文裡的方程式(1),代表尋找 H H H時用的cost function:
Σ i = 1 N ( < n , p i > − D ) 2 θ ( ∥ p i − q ∥ ) \Sigma_{i=1}^N(\left<n,p_i\right>-D)^2\theta(\|p_i-q\|) Σi=1N(⟨n,pi⟩−D)2θ(∥pi−q∥)
其中 q q q為點 r r r在平面 H H H上的投影,即 r r r沿平面法向量 n n n方向移動到平面上的點,它們的關係可以用 q = r + t n q = r + tn q=r+tn描述,其中 t t t為一個常數。
方程式(1)中的 ( < n , p i > − D ) 2 (\left<n,p_i\right>-D)^2 (⟨n,pi⟩−D)2代表點 p i p_i pi到平面 H H H的距離的平方; θ ( ∥ p i − q ∥ ) \theta(\|p_i-q\|) θ(∥pi−q∥)則是點 p i p_i pi的權重,與 p i p_i pi到 q q q的距離成反相關,即距離越遠權重越低。
cost function還有另一種型式,即論文裡的方程式(2):
Σ i = 1 N < n , p i − r − t n > 2 θ ( ∥ p i − r − t n ∥ ) \Sigma_{i=1}^N \left< n, p_i-r-tn\right>^2 \theta(\|p_i-r-tn\|) Σi=1N⟨n,pi−r−tn⟩2θ(∥pi−r−tn∥)
θ ( ∥ p i − r − t n ∥ ) \theta(\|p_i-r-tn\|) θ(∥pi−r−tn∥)這一項很好理解,就是把 q q q替換成 r + t n r+tn r+tn而已。那麼 < n , p i − r − t n > 2 \left< n, p_i-r-tn\right>^2 ⟨n,pi−r−tn⟩2要怎麼理解呢?
先把 < n , p i − r − t n > 2 \left< n, p_i-r-tn\right>^2 ⟨n,pi−r−tn⟩2中的 r + t n r+tn r+tn替換回 q q q,得到 < n , p i − q > 2 = ( < n , p i > − < n , q > ) 2 \left< n,p_i-q \right>^2 = (\left< n,p_i\right>-\left< n,q\right>)^2 ⟨n,pi−q⟩2=(⟨n,pi⟩−⟨n,q⟩)2。因為點 q q q在平面上,故 < n , q > = D \left< n, q \right> = D ⟨n,q⟩=D。代回上式: ( < n , p i > − < n , q > ) 2 = ( < n , p i > − D ) 2 (\left< n,p_i\right>-\left< n,q\right>)^2 = (\left< n,p_i\right>-D)^2 (⟨n,pi⟩−⟨n,q⟩)2=(⟨n,pi⟩−D)2,得到了與方程式(1)相同型式。因此方程式(2)與方程式(1)是等價的。
cost function中,點 p i p_i pi的權重 θ ( ∥ p i − r − t n ∥ ) \theta(\|p_i-r-tn\|) θ(∥pi−r−tn∥)是將 p i p_i pi與 q q q的距離代入一個平滑、單調遞減、恆為正值的函數 θ \theta θ中所得到,我們通常選取高斯函數作為 θ \theta θ。另外,這裡代入 θ \theta θ的是 p i p_i pi與 q q q的距離而非 p i p_i pi與 r r r的距離,這在3.2節會詳述。
注意到當我們把平面 H H H定義好了,我們同時也定義了局部座標系,這個座標系的原點即點 q q q。接下來在尋找曲面時,就會用到這個局部座標系。
尋找由 r r r定義的曲面 S p S_p Sp
在這篇論文中,是用一個雙變量的多項式來表達一個曲面的。為何是雙變量呢?這是因為一個曲面有兩個自由度。曲面的數學式寫為 g ( x , y ) g(x,y) g(x,y)。
來看看投影是怎麼進行的:對點 r r r來說,它在平面 H H H上的投影為 q = r + t n q = r + tn q=r+tn,在曲面 S p S_p Sp上的投影則為 P ( r ) = q + g ( 0 , 0 ) n = r + ( t + g ( 0 , 0 ) ) n \mathscr{P}(r) = q + g(0, 0)n = r + (t+g(0, 0))n P(r)=q+g(0,0)n=r+(t+g(0,0))n。
對 r r r鄰域內的點 p i p_i pi,其在局部座標系下的座標為 ( x i , y i , f i ) (x_i,y_i,f_i) (xi,yi,fi),其中 f i = n ⋅ ( p i − q ) f_i = n \cdot (p_i - q) fi=n⋅(pi−q)為點 p i p_i pi在局部座標系下的z座標。點 p i p_i pi在平面 H H H上的投影為 q i = ( x i , y i , 0 ) q_i = (x_i, y_i, 0) qi=(xi,yi,0),注意投影後的z座標為0。在曲面 S p S_p Sp上的投影為 P ( p i ) = q i + g ( x i , y i ) n = ( x i , y i , g ( x i , y i ) ) \mathscr{P}(p_i) = q_i + g(x_i, y_i)n = (x_i, y_i, g(x_i, y_i)) P(pi)=qi+g(xi,yi)n=(xi,yi,g(xi,yi))。注意不論是投影到平面或曲面上,x座標及y座標都不會改變。
到了這裡,我們就看得懂論文裡公式(3):
Σ i = 1 N ( g ( x i , y i ) − f i ) 2 θ ( ∥ p i − q ∥ ) \Sigma_{i=1}^N(g(x_i,y_i)-f_i)^2\theta(\|p_i-q\|) Σi=1N(g(xi,yi)−fi)2θ(∥pi−q∥)
在寫什麼了:它定義了一個cost function,希望找到一個曲面 S p S_p Sp(或 g g g),使得 p i p_i pi投影到曲面上之後,能與原來的 p i p_i pi越接近越好(只關注它們的z座標)。公式(3)的第二項即為權重,其定義跟找 H H H時相同。
projection property
這一小節提到了projection property: P ( P ( r ) ) = P ( r ) \mathscr{P}(\mathscr{P}(r))=\mathscr{P}(r) P(P(r))=P(r),用白話來說就是投影函數 P \mathscr{P} P對點 r r r投影一次跟投影多次都會在同一個位置上。
計算權重時用的是 p i p_i pi與 q q q的距離而非 p i p_i pi與 r r r的距離,這裡說如果使用的是 p i p_i pi與 r r r的距離,那麼 θ \theta θ的值將會在法向量方向上變動,這將導致 P \mathscr{P} P不再會是一個projection。 → \rightarrow →這句話沒看懂, θ \theta θ的值不是本來就會在法向量方向上變動?
在前一小節不論是定義 H H H或 S p S_p Sp的cost function時,裡面都有一項 θ \theta θ權重函數,這裡建議的權重函數為高斯函數: θ ( d ) = e ( − d 2 h 2 ) \theta(d) = e^{(-\frac{d^2}{h^2})} θ(d)=e(−h2d2)
,其參數 d d d如上面所看到的,應該代入 p i p_i pi與 q q q的距離。另外還有個參數 h h h, h h h越小得到的曲面細節越豐富,反之則曲面越平滑。
實際計算投影
尋找平面H
觀察方程式(2),其中 { p 1 , p 2 , . . . p N } \{p_1,p_2,...p_N\} { p1,p2,...pN}是給定的輸入,只有 t t t與 n n n是未知數,我們的目標便是找到一組 n n n跟 t t t,使得方程式(2)能最小化。方程式(2)有多個局部最小值,我們要找t最小的一個,也就是希望 q q q離 r r r越近越好(因為 q = r + t n q=r+tn q=r+tn)。
第一步:固定t=0求n
第一步先固定 t = 0 t=0 t=0來求 n n n的方向( n n n的長度被固定為1)。
將 t = 0 t=0 t=0代入方程式(2), t n tn tn這項消失,並且 θ \theta θ變為 p i p_i pi的函數,跟 n n n無關,在此記為 θ i \theta_i θi,是一個常數。方程式(2)至此化簡為 Σ i = 1 N < n , p i − r > 2 θ i \Sigma_{i=1}^N \left< n, p_i-r\right>^2 \theta_i Σi=1N⟨n,pi−r⟩2θi。
接下來是將它寫成向量與矩陣相乘的形式,更正式的名稱為bilinear form。
為了推導出方程式(2)的bilinear form,我們先只關注 i i i這一項:$ \left< n, p_i-r\right>^2 \theta_i$。
將它展開:
< n , p i − r > 2 θ i = ( n 1 ( p i 1 − r 1 ) + n 2 ( p i 2 − r 2 ) + n 3 ( p i 3 − r 3 ) ) 2 θ i = ( ( p i 1 − r 1 ) 2 n 1 2 + ( p i 1 − r 1 ) ( p i 2 − r 2 ) n 1 n 2 + ( p i 1 − r 1 ) ( p i 3 − r 3 ) n 1 n 3 + ( p i 2 − r 2 ) ( p i 1 − r 1 ) n 2 n 1 + ( p i 2 − r 2 ) 2 n 2 2 + ( p i 2 − r 2 ) ( p i 3 − r 3 ) n 2 n 3 + ( p i 3 − r 3 ) ( p i 1 − r 1 ) n 3 n 1 + ( p i 3 − r 3 ) ( p i 2 − r 2 ) n 3 n 2 + ( p i 3 − r 3 ) 2 n 3 2 ) θ i \begin{aligned} \left< n, p_i-r\right>^2 \theta_i &= (n_1(p_{i1}-r_1)+n_2(p_{i2}-r_2)+n_3(p_{i3}-r_3))^2\theta_i \\ &= ((p_{i1}-r_1)^2n_1^2 + (p_{i1}-r_1)(p_{i2}-r_2)n_1n_2+(p_{i1}-r_1)(p_{i3}-r_3)n_1n_3 \\ &+ (p_{i2}-r_2)(p_{i1}-r_1)n_2n_1+(p_{i2}-r_2)^2n_2^2+(p_{i2}-r_2)(p_{i3}-r_3)n_2n_3 \\ &+(p_{i3}-r_3)(p_{i1}-r_1)n_3n_1+(p_{i3}-r_3)(p_{i2}-r_2)n_3n_2+(p_{i3}-r_3)^2n_3^2)\theta_i \end{aligned} ⟨n,pi−r⟩2θi=(n1(pi1−r1)+n2(pi2−r2)+n3(pi3−r3))2θi=((pi1−r1)2n12+(pi1−r1)(pi2−r2)n1n2+(pi1−r1)(pi3−r3)n1n3+(pi2−r2)(pi1−r1)n2n1+(pi2−r2)2n22+(pi2−r2)(pi3−r3)n2n3+(pi3−r3)(pi1−r1)n3n1+(pi3−r3)(pi2−r2)n3n2+(pi3−r3)2n32)θi
到了這裡已經能看出矩陣的雛形了,接下來是把向量跟係數矩陣找出來,寫成向量與矩陣相乘的形式。
我們要找的向量自然是 n n n,所以在找係數矩陣時,可以先暫時忽略 n n n。找出的係數矩陣為:
[ ( p i 1 − r 1 ) 2 ( p i 1 − r 1 ) ( p i 2 − r 2 ) ( p i 1 − r 1 ) ( p i 3 − r 3 ) ( p i 2 − r 2 ) ( p i 1 − r 1 ) ( p i 2 − r 2 ) 2 ( p i 2 − r 2 ) ( p i 3 − r 3 ) ( p i 3 − r 3 ) ( p i 1 − r 1 ) ( p i 3 − r 3 ) ( p i 2 − r 2 ) ( p i 3 − r 3 ) 2 ] θ i \begin{bmatrix} (p_{i1}-r_1)^2 & (p_{i1}-r_1)(p_{i2}-r_2) & (p_{i1}-r_1)(p_{i3}-r_3) \\ (p_{i2}-r_2)(p_{i1}-r_1) & (p_{i2}-r_2)^2 & (p_{i2}-r_2)(p_{i3}-r_3) \\ (p_{i3}-r_3)(p_{i1}-r_1) & (p_{i3}-r_3)(p_{i2}-r_2) & (p_{i3}-r_3)^2 \end{bmatrix}\theta_i ⎣⎡(pi1−r1)2(pi2−r2)(pi1−r1)(pi3−r3)(pi1−r1)(pi1−r1)(pi2−r2)(pi2−r2)2(pi3−r3)(pi2−r2)(pi1−r1)(pi3−r3)(pi2−r2)(pi3−r3)(pi3−r3)2⎦⎤θi
得到 n n n跟係數矩陣後可以自行驗證一下, n T [ . . . ] n = < n , p i − r > 2 θ i n^T[...]n = \left< n, p_i-r\right>^2 \theta_i nT[...]n=⟨n,pi−r⟩2θi應該是成立的。
記得剛剛我們只看了 i i i這一項,但我們要的應該是 Σ i N \Sigma_i^N ΣiN,因此還要對上面的係數矩陣中的各項都加上 Σ i N \Sigma_i^N ΣiN。到了這裡,應該可以很容易地看出,我們計算得到的矩陣跟論文裡的 B B B矩陣是一致的: B = { b j k } , B ∈ R 3 × 3 , b j k = Σ i θ i ( p i j − r j ) ( p i k − r k ) B = \{b_{jk}\}, B \in \R^{3 \times 3}, b_{jk} = \Sigma_i \theta_i ({p_i}_j - r_j)({p_i}_k - r_k) B={ bjk},B∈R3×3,bjk=Σiθi(pij−rj)(pik−rk)
我們可以來看一下矩陣 B B B是由哪些元素組成的,也就是: { p 1 , . . . p N } \{p_1,...p_N\} { p1,...pN}, r r r及 { θ 1 , . . . θ N } \{\theta_1,...\theta_N\} { θ1,...θN}。我們已經知道 θ i \theta_i θi是由 p i p_i pi及 r r r決定的常數,所以矩陣 B B B實際上由 { p 1 , . . . p N } \{p_1,...p_N\} { p1,...pN}及 r r r決定,而這些向量全是已知的,所以矩陣 B B B也是已知的。
向量 n n n及矩陣 B B B都找到了之後,就可以將方程式(2)寫成bilinear form: n T B n n^TBn nTBn,回想方程式(2)是一個cost function,所以我們希望找到一個 n n n使得該式算出來的值最小化,於是我們的目標變成了:
m i n ∥ n ∥ = 1 n T B n min_{\|n\|=1}n^TBn min∥n∥=1nTBn
此最小化問題的解為矩陣 B B B最小特徵值所對應的特徵向量。原因為何?
先來回顧一下矩陣特徵值及特徵向量的物理意義:如果一個向量經過矩陣的變換後方向不變,則稱該向量為特徵向量,其縮放程度則為該特徵向量對應的特徵值。我們知道矩陣 B B B對"其最小特徵值對應的特徵向量"所進行的放大程度最小,所以這裡我們選擇該特徵向量的方向作為第一步的解 n n n。
回頭看一下矩陣 B B B,它其實是一個共變異數/協方差矩陣,這是為什麼呢?
我們可以把 r r r看作 p i p_i pi的期望值,即 E [ p i ] E[p_i] E[pi]。那麼 p i j {p_i}_j pij與 p i k {p_i}_k pik的共變異數 c o v [ p i j , p i k ] = E [ ( p i j − r j ) ( p i k − r k ) ] cov[{p_i}_j,{p_i}_k] = E[({p_i}_j-r_j)({p_i}_k-r_k)] cov[pij,pik]=E[(pij−rj)(pik−rk)],與矩陣 B B B的元素 b j k = Σ i θ i ( p i j − r j ) ( p i k − r k ) b_{jk} = \Sigma_i \theta_i ({p_i}_j - r_j)({p_i}_k - r_k) bjk=Σiθi(pij−rj)(pik−rk)兩相對照,發現兩者十分吻合,只要我們將 Σ i θ i \Sigma_i\theta_i Σiθi這個加權平均的動作看成是取期望值即可。既然知道 b j k = c o v [ p i j , p i k ] b_{jk} = cov[{p_i}_j,{p_i}_k] bjk=cov[pij,pik],那麼我們也就知道 B B B是由 p i p_i pi任兩分量的變異數所組成的3*3共變異數矩陣!
第二步:固定n求t
為了求解方便,在論文中限制 t t t的範圍為 [ − h / 2 , h / 2 ] [-h/2,h/2] [−h/2,h/2],因為在此處 t t t只會有一個局部極小值。 → \rightarrow →為什麼?
因為我們知道 t t t只有一個局部極小值,所以這一步可以直接設方程式(2)對 t t t的偏微分等於0來求出。
欲求 Σ i = 1 N < n , p i − r − t n > 2 θ ( ∥ p i − r − t n ∥ ) \Sigma_{i=1}^N \left< n, p_i-r-tn\right>^2 \theta(\|p_i-r-tn\|) Σi=1N⟨n,pi−r−tn⟩2θ(∥pi−r−tn∥)對 t t t的微分,同樣先只關注 i i i這一項,令 A = C 2 = < n , p i − r − t n > 2 A = C^2 = \left< n, p_i-r-tn\right>^2 A=C2=⟨n,pi−r−tn⟩2,所以目前我們所關注的是 A θ A\theta Aθ,其中 A A A及 θ \theta θ都是 t t t的函數( n n n在這一步固定)。
i i i這一項的微分: d ( A θ ) d t = d A d t θ + A d θ d t \frac{d(A\theta)}{dt} = \frac{dA}{dt}\theta + A\frac{d\theta}{dt} dtd(Aθ)=dtdAθ+Adtdθ。
-
先看第一項: d A d t = d A d C d C d t \frac{dA}{dt} = \frac{dA}{dC}\frac{dC}{dt} dtdA=dCdAdtdC,其中 d A d C = 2 C \frac{dA}{dC} = 2C dCdA=2C。
要計算 d C d t \frac{dC}{dt} dtdC,我們可以先把 C C C拆開來看看,即:
C = < n , p i − r − t n > = n 1 ( p i 1 − r 1 − t n 1 ) + n 2 ( p i 2 − r 2 − t n 2 ) + n 3 ( p i 3 − r 3 − t n 3 ) = − ( n 1 2 + n 2 2 + n 3 2 ) t + < n , p i − r > = − t + < n , p i − r > \begin{aligned} C &= \left< n, p_i-r-tn\right> \\ &= n_1({p_i}_1-r_1-tn_1)+n_2({p_i}_2-r_2-tn_2)+n_3({p_i}_3-r_3-tn_3) \\ &= -(n_1^2 + n_2^2 + n_3^2)t + \left< n, p_i-r\right> \\ &= -t + \left< n, p_i-r\right> \end{aligned} C=⟨n,pi−r−tn⟩=n1(pi1−r1−tn1)+n2(pi2−r2−tn2)+n3(pi3−r3−tn3)=−(n12+n22+n32)t+⟨n,pi−r⟩=−t+⟨n,pi−r⟩
所以 d C d t = − 1 \frac{dC}{dt} = -1 dtdC=−1。
所以微分第一項 d A d t θ = d A d C d C d t θ = 2 C ∗ ( − 1 ) ∗ θ = − 2 C θ \frac{dA}{dt}\theta = \frac{dA}{dC}\frac{dC}{dt}\theta = 2C*(-1)*\theta = -2C\theta dtdAθ=dCdAdtdCθ=2C∗(−1)∗θ=−2Cθ,算出來的跟方程式(6)差一個負號?
-
再看第二項: A d θ d t A\frac{d\theta}{dt} Adtdθ
其中 θ ( t ) = e ( − d 2 h 2 ) \theta(t) = e^{(-\frac{d^2}{h^2})} θ(t)=e(−h2d2), d = ∥ p i − r − t n ∥ d = \|p_i-r-tn\| d=∥pi−r−tn∥
θ ( t ) \theta(t) θ(t)對 t t t的微分: d θ d t = d θ d d 2 d d 2 d d d d d t \frac{d\theta}{dt} = \frac{d\theta}{dd^2} \frac{dd^2}{dd} \frac{dd}{dt} dtdθ=dd2dθdddd2dtdd
其中 d θ d d 2 = θ ∗ ( − 1 h 2 ) \frac{d\theta}{dd^2} = \theta*(-\frac{1}{h^2}) dd2dθ=θ∗(−h21), d ( d 2 ) d d = 2 d \frac{d(d^2)}{dd} = 2d ddd(d2)=2d
d d d t \frac{dd}{dt} dtdd的計算較為複雜。我們先將d化簡:
d = ∥ p i − r − t n ∥ = ( p i 1 − r 1 − t n 1 ) 2 + ( p i 2 − r 2 − t n 2 ) 2 + ( p i 3 − r 3 − t n 3 ) 2 = ( n 1 2 + n 2 2 + n 3 2 ) t 2 − 2 [ n 1 ( p i 1 − r 1 ) + n 2 ( p i 2 − r 2 ) + n 3 ( p i 3 − r 3 ) ] t + ( p i 1 − r 1 ) 2 + ( p i 2 − r 2 ) 2 + ( p i 3 − r 3 ) 2 = t 2 − 2 < n , p i − r > t + ( p i 1 − r 1 ) 2 + ( p i 2 − r 2 ) 2 + ( p i 3 − r 3 ) 2 d = \|p_i-r-tn\| \\= \sqrt{({p_i}_1-r_1-tn_1)^2+({p_i}_2-r_2-tn_2)^2+({p_i}_3-r_3-tn_3)^2} \\= \sqrt{(n_1^2 + n_2^2 + n_3^2)t^2 - 2[n_1({p_i}_1-r_1)+n_2({p_i}_2-r_2)+n_3({p_i}_3-r_3)]t + ({p_i}_1-r_1)^2+({p_i}_2-r_2)^2+({p_i}_3-r_3)^2} \\= \sqrt{t^2 - 2\left< n, p_i-r \right> t + ({p_i}_1-r_1)^2+({p_i}_2-r_2)^2+({p_i}_3-r_3)^2} d=∥pi−r−tn∥=(pi1−r1−tn1)2+(pi2−r2−tn2)2+(pi3−r3−tn3)2=(n12+n22+n32)t2−2[n1(pi1−r1)+n2(pi2−r2)+n3(pi3−r3)]t+(pi1−r1)2+(pi2−r2)2+(pi3−r3)2=t2−2⟨n,pi−r⟩t+(pi1−r1)2+(pi2−r2)2+(pi3−r3)2
d d d t = 1 2 d ( 2 t − 2 < n , p i − r > ) = t − < n , p i − r > d = − C d \frac{dd}{dt} = \frac{1}{2d} (2t-2\left< n, p_i-r \right>) = \frac{t-\left< n, p_i-r \right>}{d} = \frac{-C}{d} dtdd=2d1(2t−2⟨n,pi−r⟩)=dt−⟨n,pi−r⟩=d−C
所以微分第二項 A ∗ d θ d t = A ∗ θ ∗ ( − 1 h 2 ) ∗ 2 d ∗ ( − C d ) = 2 A θ C h 2 A*\frac{d\theta}{dt} = A*\theta*(-\frac{1}{h^2})*2d*(\frac{-C}{d}) = 2A\theta \frac{C}{h^2} A∗dtdθ=A∗θ∗(−h21)∗2d∗(d−C)=2Aθh2C
算出cost function對 t t t的一階導數:
2 Σ i = 1 N < n , p i − r − t n > ( 1 + < n , p i − r − t n > 2 h 2 ) e ∥ p i − r − t n ∥ 2 h 2 2\Sigma_{i=1}^N\left<n, p_i-r-tn\right>(1+\frac{\left<n, p_i-r-tn \right>^2}{h^2})e^{\frac{\|p_i-r-tn\|^2}{h^2}} 2Σi=1N⟨n,pi−r−tn⟩(1+h2⟨n,pi−r−tn⟩2)eh2∥pi−r−tn∥2
之後,可以使用裡提到的迭代的最小化方法來求解。
第三步:固定t求n
-
Initial normal estimate in r
第二步算完,得到一個非0的 t t t後,這裡要估計 r r r的法向量當作 n n n。
n n n的算法與第一步無異,即加權的共變異數矩陣 B B B的最小的特徵值所對應的特徵向量。
-
Iterative non-linear minimization
接下來是交替優化 t t t與 q q q,為什麼不是優化 t t t與 n n n呢?論文中說道,在 t t t固定的情況下,其實我們本來是應該是要優化 n n n,相當於在一個球面上尋找更好的 q q q。但是為了使用conjugate gradient method來進行優化,所以這裡用的是球面的近似,也就是只在平面 H H H上尋找 q q q。
- 優化 t t t:在 [ − t / 2 , t / 2 ] [-t/2,t/2] [−t/2,t/2]的範圍內找一個使損失函數最小化的 t t t,計算方法同第二步。
- 優化 q q q:使用conjugate gradient method在平面 H H H上找一個更好的 q q q。 ← \leftarrow ←這樣子 q = r + t n q = r + tn q=r+tn還會成立?
這個過程會持續進行,直到所有的參數在某一輪的變化量都小於一個事先定義的閾值 ϵ \epsilon ϵ才結束。
計算曲面Sp
回顧一下計算曲面的cost function: Σ i = 1 N ( g ( x i , y i ) − f i ) 2 θ ( ∥ p i − q ∥ ) \Sigma_{i=1}^N(g(x_i,y_i)-f_i)^2\theta(\|p_i-q\|) Σi=1N(g(xi,yi)−fi)2θ(∥pi−q∥)。
H找到後,cost function裡的 θ i \theta_i θi及 f i f_i fi都變為常數。計算cost function對曲面多項式中各係數的一階導數,可以得到一個線性方程組,其方程式數量正好等於多項式係數的個數。這個問題可以使用linear least squares的方法來求解。
生成具代表性的點雲
下採樣
下採樣的核心思想是計算各點的貢獻度,然後逐一移除貢獻度最低的點,直到停止條件被滿足為止。
貢獻度的計算:
-
理想:用 P P P擬合一個曲面 S S S,再用 { P − P i } \{P-P_i\} { P−Pi}擬合一個曲面 S { P − p i } S_{\{P-p_i\}} S{ P−pi},然後計算兩曲面的Hausdorff distance。但是這種做法的計算量太大,因此論文裡採用以下做法。
-
現實:將 p i p_i pi投影到 S { P − p i } S_{\{P-p_i\}} S{ P−pi}。(然後呢?論文沒說後續怎麼做)猜想是把加上 p i p_i pi投影點的 S { P − p i } S_{\{P-p_i\}} S{ P−pi}當作 S S S,然後計算它們的Hausdorff distance。
得到每個點的貢獻度之後,將點存到一個priority queue裡面。在迭代過程中,每次會移除貢獻度最低的點。當一個點被移除後,我們需要重新計算該點附近的點的貢獻度。
以上過程會一直重複,直到點的數量小於某一閾值或者是各點的貢獻度都大於某一閾值後才停止。
上採樣
上採樣的核心思想是在MLS曲面上畫vonoroi diagram。畫法如下:取平面上任意三個點畫圓,圓要穿過這三個點(但實際上可能穿過更多的點),並要注意不能讓圓內包含其它的點。這些圓的圓心即為vonoroi diagram的頂點。得到vonoroi diagram之後,我們會挑選擁有最大半徑的圓的圓心,將它投影到MLS曲面上,得到的結果就是一個上採樣的點。
vonoroi diagram的畫法:
- 理想:在MLS曲面上畫vonoroi diagram。
- 現實:隨機從點雲裡挑選一個點,在點的鄰域內擬合一個"平面",將鄰域內的點都投影到該平面上。然後在該平面上畫vonoroi diagram。
上採樣的過程會一直重複,直到最小圓的半徑小於一個事先定義好的值才停止。
发表评论
最新留言
关于作者
