利用Eigen庫,PCA構建點雲法向量

2022-06-13 16:54:18 字數 1639 閱讀 1755

疫情在家,想做科研,可是資料都在學校電腦裡面。只能看看能不能回想起什麼寫點什麼。

這次主要是想把提取出的點雲patch單獨進行點雲法向量的計算,因為已經構成patch,則不需使用knn或者設定鄰域半徑。

接下來手撕 pca 來構建點雲法向量。

1

#define _crt_secure_no_warnings

2#define _scl_secure_no_warnings

3 #include 4 #include 5 #include 6 #include 7

8 #include 9

10using

namespace

std;

1112

intmain()

1329 center_x /=cld_sz;

30 center_y /=cld_sz;

31 center_z /=cld_sz;

32//

計算協方差矩陣

33double xx = 0, xy = 0, xz = 0, yy = 0, yz = 0, zz = 0;34

for (int i = 0; i < cld_sz; i++)

42//

大小為3*3的協方差矩陣

43 eigen::matrix3f covmat(3, 3

);44 covmat(0, 0) = xx /cld_sz;

45 covmat(0, 1) = covmat(1, 0) = xy /cld_sz;

46 covmat(0, 2) = covmat(2, 0) = xz /cld_sz;

47 covmat(1, 1) = yy /cld_sz;

48 covmat(1, 2) = covmat(2, 1) = yz /cld_sz;

49 covmat(2, 2) = zz /cld_sz;

5051

//求特徵值與特徵向量

52 eigen::eigensolveres(covmat);

53 eigen::matrix3f val =es.pseudoeigenvaluematrix();

54 eigen::matrix3f vec =es.pseudoeigenvectors();

5556

//找到最小特徵值t1

57double t1 = val(0, 0

);58

int ii = 0;59

if (t1 > val(1, 1

)) 63

if (t1 > val(2, 2

))67

68//

最小特徵值對應的特徵向量v_n

69 eigen::vector3f v(vec(0, ii), vec(1, ii), vec(2

, ii));

70//

特徵向量單位化

71 v /=v.norm();

72  for (int i = 0; i < cld_sz; i++)

7980 cin.get

();81

return0;

82 }

點雲學習 1 1 PCA

pca演算法可以降低資料量,且最大程度保持原有資訊,因此pca演算法在機器學習演算法中得到廣泛應用。pca證明詳見 機器學習 板塊中的 一 資料清洗 pca演算法流程 1 計算資料平均值。2 資料歸一化 減掉平均值 3 構造h矩陣。4 svd分解。5 最大特徵值對應特徵向量為第一主成分,以此類推。話...

利用PCA視覺化異常點

異常點往往是由於某乙個特徵或者多個特徵數值異常。但是對於多維度特徵無法直接進行視覺化觀測異常點,利用pca技術進行維度縮減,可以在二維或者三維空間上進行視覺化展示。原資料如下 pcapca pca n components 2 壓縮到二維空間中 x pca pca.fit transform df ...

利用matlab點雲工具處理點雲

本文主要分享利用matlab點雲工具的相關模組來處理點雲,並通過點雲輪廓對點雲體積進行簡單的估計測量。主要的操作流程圖 2具體流程 假設有乙個名為pointcloud.ply的點雲檔案。ply格式簡介 pc pcread path pointcloud.ply 讀入點雲檔案 pcshow pc 顯示...