【发布时间】:2015-02-24 16:34:56
【问题描述】:
我有一个木块的点云。我找到了那个点云的质心。现在我正在尝试使用点云库查找主成分和方向。下面是我尝试过的代码。如果您还没有理解,请纠正我。
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;
【问题讨论】:
-
看起来不错。有问题吗?
-
我想在cluster_indices中找到点云的方向。
-
最大特征值对应的特征向量应该近似为物体最大体积分布的方向,我假设这就是你想要的。您是否想以其他形式表达这种倾向?
-
是的,我想找到主成分相对于世界坐标的变换矩阵。
-
你想要的三个特征向量应该是独立的,你只需要它们正交以组成一个旋转矩阵(IIRC),所以我建议按原样采用第一个特征向量,从第二个特征向量第二个特征向量到第一个特征向量的投影,然后从第三个特征向量中减去它在由第一个和第二个特征向量形成的平面上的投影。我认为应该足够了。
标签: c++ point-cloud-library point-clouds