[英]how to find principal components and orientation of a point cloud using point cloud library
我有一個木塊的點雲。 我已經找到了該點雲的質心。 現在,我嘗試使用點雲庫查找主成分和方向。 以下是我嘗試過的代碼。 如果您還不了解,請指正我。
Eigen::Vector4f centroid;
Eigen::Matrix3f covariance_matrix;
// Extract the eigenvalues and eigenvectors
Eigen::Vector3f eigen_values;
Eigen::Matrix3f eigen_vectors;
pcl::compute3DCentroid(*cloud_filtered,cluster_indices,centroid);
// Compute the 3x3 covariance matrix
pcl::computeCovarianceMatrix (*cloud_filtered, centroid, covariance_matrix);
pcl::eigen33 (covariance_matrix, eigen_vectors, eigen_values);
std::cout << "centroid-x:"<<centroid[0]<<"centroid-y:"<<centroid[1]<<"centroid-z:"<<centroid[2]<<std::endl;
如果需要代表方向的旋轉矩陣,我們可以選擇對象的體積分布最高的軸(標准化的第一特征向量-與最大特征值相關的特征向量)作為矩陣的第一列。
對於矩陣的第二列,請選擇第二個特征向量,但是您必須從中減去它在第一個特征向量上的投影,以使其與第一個特征向量正交。 要計算其投影,您可以使用點積-如果特征向量已經歸一化,則可以使用點積計算要減去的向量的長度:因此,將兩個向量點積,然后將第一個向量乘以點積,然后從第一個特征向量中減去所得的向量。
對於第三列,只剩下一個選擇-上面計算出的兩個乘積。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.