我需要在matlab中为3D数据拟合最佳圆

时间:2015-07-01 19:01:46

标签: matlab

基本上,我在地面上有许多不规则圆圈,形式为x,y,z坐标(200 * 3矩阵)。但我想在x,y,z坐标(200 * 3矩阵)的数据中修复一个最佳圆。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

我会尝试使用RANSAC algorithm来查找模型的参数(在您的情况下是圆圈),给出噪音数据。该算法非常容易理解并且可以抵抗异常值。

维基百科文章有一个Matlab示例用于拟合一条线,但是它不应该太难以使它适应一个圆。

These幻灯片对RANSAC算法进行了很好的介绍(从第42页开始)。他们甚至展示了拟合圆的例子。

答案 1 :(得分:0)

尽管这个答案很晚,但我希望这对其他人有帮助

使圆适合3d点

  1. 查找3d点(nx3矩阵)的质心
  2. 从3D点中减去质心。
  3. 使用RANSAC,将平面拟合到3D点。您可以参考here获取使用RANSAC拟合平面的功能
  4. 将SVD应用于3d点(nx3矩阵)并获得v矩阵
  5. 使用SVD中的轴生成沿RANSAC平面的轴。例如,如果平面范数沿z方向,则v矩阵的第一列与平面范数之间的叉积将沿y方向生成矢量,然后将生成的y矢量与平面之间的叉积范数将沿x方向生成向量。使用生成的向量,形成旋转矩阵[x_vector y_vector z_vector]
  6. 将“旋转矩阵”乘以质心减去3d点,以使这些点与XY平面平行。
  7. 只需从3d点中删除Z轴,即可将点投影到XY平面
  8. 使用Least squares circle fit
  9. 使用从第5步获得的旋转矩阵的逆矩阵旋转圆心
  10. 使用质心将中心平移回原始位置

3D中的圆将具有中心,半径将与我们从步骤8中获得的2D圆相同,圆平面将成为我们从步骤3中获得的RANSAC平面。