pca演算法可以降低資料量,且最大程度保持原有資訊,因此pca演算法在機器學習演算法中得到廣泛應用。(pca證明詳見「機器學習」板塊中的「一、資料清洗」)
pca演算法流程:1 計算資料平均值。2 資料歸一化(減掉平均值)。3 構造h矩陣。4 svd分解。5 最大特徵值對應特徵向量為第一主成分,以此類推。
話不多說,直接上**
import open3d as o3d
import numpy as np
from pyntcloud import pyntcloud
from pandas import dataframe
defpca
(data,correlation=
false
,sort=
true):
data_mean = np.mean(data,axis=0)
data_normalize = data - data_mean
h = np.dot(data_normalize.t,data_normalize)
eigenvectors,eigenvalues,eigenvectors_t=np.linalg.svd(h)
if sort:
sort = eigenvalues.argsort()[
::-1
] eigenvalues = eigenvalues[sort]
eigenvectors = eigenvectors[
:,sort]
return eigenvectors , eigenvalues
defmain()
:#建立陣列**資料 讀取txt文件
raw_point_cloud_matrix = np.genfromtxt(
r"f:\\point cloud\\三維點雲課程\\3d資料集\\modelnet40_normal_resampled\\airplane\\airplane_0002.txt"
, delimiter=
",")
#可以理解為建立**,類似excel,且只需要前三列資料(x,y,z)
raw_point_cloud=dataframe(raw_point_cloud_matrix[:,
0:3]
) raw_point_cloud.columns =
['x'
,'y'
,'z'
]#將資料轉化為open3d可以識別的格式
point_cloud_pynt = pyntcloud(raw_point_cloud)
#從點雲中獲取點
points = point_cloud_pynt.points
print
("total points number is :"points.shape[0]
)#使用pca分析點雲主方向
w,v = pca(points)
#提取前兩個主分量
點雲學習 PCA演算法實現與法向量估計
最近報了個點雲學習的網課,前段時間因為各種問題,落下了很多課程,今天開始要好好搞起來了 python真的有點難,之前很少用,也藉著這次課程好好學習一下python 雖然pcl一些現成的庫裡面封裝了pca,但是自己寫出來,雖然是照著別人抄的,但是一點一點搞懂,也是有成就感的 import open3d...
利用Eigen庫,PCA構建點雲法向量
疫情在家,想做科研,可是資料都在學校電腦裡面。只能看看能不能回想起什麼寫點什麼。這次主要是想把提取出的點雲patch單獨進行點雲法向量的計算,因為已經構成patch,則不需使用knn或者設定鄰域半徑。接下來手撕 pca 來構建點雲法向量。1 define crt secure no warnings...
3D 24 PCA點雲法向量估計
點雲法向量的估計在很多場景都會用到,比如icp配準,以及曲面重建。基於pca的點雲法向量估計,其實是從最小二乘法推導出來的。假設我們要估計某一點的法向量,我們需要通過利用該點的近鄰點估計出乙個平面,然後我們就能計算出該點的法向量。或者可以這麼說,通過最小化乙個目標函式 要求的引數為法向量 使得該點與...