點雲法線估計 C 實現

2021-10-22 23:21:33 字數 1923 閱讀 1387

二、程式實現

三、執行結果

四、法線估計存在的問題

表面法線是幾何體表面的重要屬性,在很多領域都有大量應用,例如:在進行光照渲染時產生符合可視習慣的效果時需要表面法線資訊才能正常進行,對於乙個已知的幾何體表面,根據垂直於點表面的向量,因此推斷表面某一點的法線方向通常比較簡單。然而,由於我們獲取的點雲資料集在真實物體的表面表現為一組定點樣本,這樣就會有兩種解決方法:

1)使用曲面重建技術,從獲取的點雲資料集中得到取樣點對應的曲面,然後從曲面模型中計算表面法線;

2)直接從點雲資料集中近似推斷表面法線。

總的來說,就是點雲的法線可以便是點雲的特徵,如果法向量連續,可以判斷是平面,法向量突變,是角點。

本節將針對後一種情況進行講解,已知乙個點雲資料集,在其中的每個點處直接近似計算表面法線。

對於物體表面一點,將它和領域的點雲看成是空間的橢球體,法向量方向對應橢球體的最短軸方向。

思路:要求乙個點的法線,對這個點的k近鄰擬合平面,求這個平面的法線。將問題轉換成乙個最小二乘平面擬合問題。

1)平面方程

常規的平面方程如下,這個方程是過原點的

對於k個點,我們先求得這些點的重心,確保這個平面是過重心的,這個過程就是將資料去中心化:

2)最小二乘擬合,計算協方差矩陣

理想情況下所有點都通過這個平面,但實際是不可能的,因此利用最小二乘演算法,使得誤差最小。

3)對協方差矩陣a進行svd分解,最小的特徵向量即為法向量(理解:橢圓的最短軸方向)

另一種理解:a有三個特徵值,對應三個特徵向量,求得ax=0的解等價於求的最小的特徵值minλ²,

故x表示最小特徵值對應的特徵向量。x即為上述的[a, b, c]t,即為法線。

第三種理解:平面上做特徵值分解,其特徵向量,大的表示主方向,稍微小的是另乙個方向,第三個就是法線方向。

1、怎麼確定鄰域?

鄰域選擇太大:法線估計比較平滑,但會受不相關物體的影響,比如要估計桌角的法向量,可能會把桌面的點也算進去

鄰域選擇太小:法線估計比較sharper,能估計比較精細的結構,但是受雜訊的影響

2、解決方法

(1)帶權重的法線估計,例如把反射強度,rgb等資訊考慮進去

(2)先去噪

ransac去噪,濾波,降取樣

(3)利用深度學習的方法

點雲法線計算

法線在點雲的處理中有著重要的意義,大部分點雲的處理都要用到法線如 點雲平滑濾波 配準 特徵計算與提取,曲率計算等都息息相關。關於法線的計算最早應該 於 su ce reconstruction from unorganized points hugues hoppe的文章。其中hoppe關於法線的計...

點雲的平滑與法線計算

需要平滑的情況 1 用rgb d雷射掃瞄器等裝置掃瞄物體,尤其是比較小的物體時,往往會有測量誤差。這些誤差所造成的不規則資料如果直接拿來曲面重建的話,會使得重建的曲面不光滑或者有漏洞,而且這種不規則資料很難用前面我們提到過的統計分析等濾波方法消除 2 後處理過程中,對同乙個物體從不同方向進行了多次掃...

點雲學習 PCA演算法實現與法向量估計

最近報了個點雲學習的網課,前段時間因為各種問題,落下了很多課程,今天開始要好好搞起來了 python真的有點難,之前很少用,也藉著這次課程好好學習一下python 雖然pcl一些現成的庫裡面封裝了pca,但是自己寫出來,雖然是照著別人抄的,但是一點一點搞懂,也是有成就感的 import open3d...