给定3D空间中的一组N个点,我试图使用SVD和Eigen找到最佳拟合平面.
我的算法是:
我无法弄清楚如何使用Eigen的SVD模块来找到对应于点坐标矩阵的最小奇异值的最小奇异向量.
到目前为止,我有这个代码(算法的步骤1,2和5):
Eigen::Matrix<float, 3, 1> mean = points.rowwise().mean();
const Eigen::Matrix3Xf points_centered = points.colwise() - mean;
int setting = Eigen::ComputeThinU | Eigen::ComputeThinV;
Eigen::JacobiSVD<Eigen::Matrix3Xf> svd = points_centered.jacobiSvd(setting);
Eigen::Vector3d normal = **???**
double d = normal.dot(mean);
Run Code Online (Sandbox Code Playgroud)