點雲法向量是最基本的點雲特征,在諸多點雲處理算法中起着至關重要的作用。本文記錄了兩種常用的點雲法向量估計方法,分別針對一般點雲和深度圖兩種點雲組織形式。
一般點雲的法向量估計
估計一般點雲法向量的思路是根據鄰域內的點擬合一個平面,則平面的法線方向即為點的法向量。記點的鄰域為:
需擬合的平面的一般形式是:
\begin{align}
Ax+By+Cz+D &= 0 \notag \newline
A^2 + B^2 + C^2 &= 1 \notag
\end{align}
采用最小二乘法進行平面的擬合,即求解如下的最小值問題:
通過求導並令導數為\(0\),且將方程組中的\(D\)消去,可以得到如下線性方程組:
其中\(M\)是協方差矩陣,\(\bar{x}=\frac{1}{n}\sum_{i=1}^nx_i\), \(\bar{xy}=\frac{1}{n}\sum_(i=1)^nx_iy_i\),依此類推。
這是典型的在單位圓上求解尋找方程組的解。一般情況下,協方差矩陣是非奇異的,因此上述方程沒有精確解,只能尋找近似解,令\(n=\left[A,B,C\right]^T\)滿足:
利用拉格朗日乘子法,構造新的優化函數:
從而能夠推導出上式的解是協方差矩陣\(M\)的最小特征值所對應的歸一化特征向量
從而可以得到點雲的法向量是:$$\vec{n}=[n_x,n_y,n_z]^T=\pm[A,B,C]^T$$。
深度圖的法向量估計
對於結構化的點雲——深度圖而言,可以更加簡便的估計點雲的法向量。思路是利用深度梯度來近似估計點雲法向量。記深度是\(d\),已知深度圖,與圖像梯度的計算方式相同(梯度方向定義為函數上升的方向),可以直接求出\(x\)和\(y\)方向上的深度梯度,分別記作\(\nabla{d_x}\)和\(\nabla{d_y}\)。
根據針孔相機模型,可以將圖像坐標轉化為三維空間坐標:
其中\(f,c_x,c_y\)是相機內參,\(u,v\)是像素坐標,以及將深度梯度轉化為\(z\)關於\(x,y\)的梯度:
則點雲的法向量可以近似估計為:
法向量方向的統一
前述方法計算得到的法向量方向具有不確定性,有必要進行統一,通常做法是根據視線方向進行統一,確保法向量方向的一致性。一般將原點作為視點位置,則視線為:$$\vec{v}={(-x,-y,-z)}^T$$
對點雲的法向量進行調整,使得: