gpt4 book ai didi

c++ - 给定一组点的特征和 SVD 找到最佳拟合平面

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:36:55 25 4
gpt4 key购买 nike

给定 3D 空间中的一组 N 个点,我尝试使用 SVD 和 Eigen 找到最合适的平面。

我的算法是:

  1. 以 (0,0,0) 为中心的数据点。
  2. 组成点坐标的3xN矩阵。
  3. 计算矩阵的 SVD。
  4. 将最小奇异值对应的最小奇异 vector 设为平面的法线。
  5. 将原点到平面的距离设置为正常∙质心。

我不知道如何使用 Eigen's SVD Module求点坐标矩阵的最小奇异值对应的最小奇异 vector 。

到目前为止,我有这段代码(算法的第 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);

最佳答案

表示 U = svd.matrixU(), vector U.col(0)U.col(1) 定义了一个你的飞机的基地和 U.col(2) 是正常的你的飞机。

U.col(0) 还定义了标准偏差最大的方向。

您应该使用标志 ComputeFullU 而不是 ComputeThinU 以获得正确的尺寸,即使您的点是共面的也是如此。

关于c++ - 给定一组点的特征和 SVD 找到最佳拟合平面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39370370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com