疫情在家,想做科研,可是資料都在學校電腦裡面。只能看看能不能回想起什麼寫點什麼。
這次主要是想把提取出的點雲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 顯示...