1

我有一些 3D 点,大致但清楚地形成了一个圆的一部分。我现在必须确定最适合所有点的圆。我认为必须有某种最适合的最小二乘,但我不知道如何开始。这些点按照它们在圆上的位置进行排序。我在每个点上也有一个估计的曲率。我需要圆的半径和平面。我必须使用 c/c++ 或使用外部脚本。

4

3 回答 3

4

您可以使用主成分分析(PCA) 将坐标从三维映射到二维。

计算 PCA 并将您的数据投影到第一个到主成分上。然后,您可以使用任何 2D 算法来查找圆心及其半径。一旦找到/安装了这些,您可以将中心投影回 3D 坐标。

由于您的数据是嘈杂的,因此在您挤出的第三维中仍然会有一些数据,但请记住,PCA 选择此维度是为了尽量减少丢失的数据量,即通过最大化所表示的数据量在前两个组件中,所以你应该是安全的。

于 2012-10-22T09:15:15.100 回答
3

这种数据拟合的一个很好的算法是RANSAC(随机样本共识)。您可以在链接中找到一个很好的描述,所以这只是重要部分的简短概述:

在您的特殊情况下,模型将是 3D 圆。为了构建这个,从你的集合中挑选三个随机的非共线点,计算它们嵌入的超平面(叉积),将随机点投影到平面上,然后应用通常的 2D 圆拟合。有了这个,你就得到了圆心、半径和超平面方程。现在很容易检查每个剩余点的支持。支撑可以表示为到圆的距离,它由两部分组成:到平面的正交距离和到平面内的圆边界的距离。

编辑: 因为更喜欢 RANSAC 而不是普通的最小二乘(LS),原因是它在严重异常值的情况下具有出色的稳定性。下图显示了 LS 与 RANSAC 的示例比较。理想模型线由 RANSAC 创建,而虚线由 LS 创建。在此处输入图像描述

于 2012-10-22T09:25:04.300 回答
1

可以说最简单的算法称为最小二乘曲线拟合。您可能想检查数学,或查看类似的问题,例如用于图像曲线拟合的多项式最小二乘法
但是我宁愿使用库来执行此操作。

于 2012-10-22T10:09:21.720 回答