Eigen和SVD在给定一组点的情况下找到最佳拟合平面

尘土最大

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

我的算法是:

  1. 中心数据点围绕(0,0,0)。
  2. 形成点坐标的3xN矩阵。
  3. 计算矩阵的SVD。
  4. 将与最小奇异值对应的最小奇异矢量设置为平面法线。
  5. 将原点到平面的距离设置为法线∙重心。

我无法弄清楚如何使用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);
Billx

用表示U = svd.matrixU(),矢量U.col(0)U.col(1)定义平面的底面,U.col(2)并且垂直于平面。

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

即使您的点共面,也应使用标记ComputeFullU而不是ComputeThinU具有正确的尺寸。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在给定起点的情况下找到适合一组点的最大圆(numpy)

如何在给定一组值的情况下找到数组中剩余的 % 值?

在给定一组6位数字的情况下,找到每种可能的“非重复”组合

在给定新名称列表的情况下,如何重命名一组目录?

在给定距起点的距离的情况下,在贝塞尔曲线上找到一个点?

Python:如何在给定开始日期和增加的天数的情况下找到一周?

在给定坐标和最大距离的情况下找到最接近某个点的点-使用Mongoose和MEAN Stack查询结果不确定

在给定一组预定键的情况下,如何对键进行重新排序,以便在插入B树时使用最少数量的节点?

SQL Server:在给定一组项目的情况下,如何选择倒数第二个条目?

在给定分辨率和中心点的情况下检索图像的角坐标

在给定的当前点,距离和方位的情况下获取准确的经/纬度

在给定中心点和半径的情况下获取边界框的经度/纬度值

在给定均值、阈值和概率的情况下,如何找到正态分布的标准偏差?

对于 RSA 加密,在给定 p、q 和 e 的情况下找到 d?

递归。在给定起点和最大距离的情况下找到所有最长的路径

在给定一条线的情况下找到周围的矩形区域

python-在给定条件的情况下找到列表中下一项的位置

如何在给定两个点和转折点的情况下制作抛物线?

在给定常量类和唯一ID的情况下获取元素的索引

在给定起点,方向四元数和行进距离的情况下查找下一个3D点

在给定高度,宽度和每个元素可以具有的状态数的情况下,找到唯一,不等效的配置的算法

在给定纬度和经度的情况下,生成快照的最佳方法是什么,因此确实建议跳过MKMapView

在给定4个角的情况下计算3d平面的变换矩阵

使用奇异值分解将平面拟合到一组点

在不降低质量的情况下裁剪和调整一组图像的大小

平面中的一组点

默认情况下对一组类进行排序

在 Python 中,如何在不使用 itertools 的情况下从给定元组列表中组合一组元组?

在不使用枚举的情况下,从 MySQL 的一组预选数据中输入数据的最佳方法是什么?