【问题标题】:Moving least squares fitting for point displacements having issues移动最小二乘拟合有问题的点位移
【发布时间】:2020-11-20 22:57:33
【问题描述】:

问题说明: 我在两个不同的时间有 (x,y,z) 坐标的点。为方便起见,可以将它们想象为沿倒置抛物面表面的不规则间隔点。 抛物面有一些最小的厚度。随着时间的推移,抛物面会稍微改变形状(就像气球膨胀一样),当它这样做时,所有的点都会移动。 通过减去time2-time1的坐标,可以得到每个点的位移向量。

重要的是要注意(我怀疑这可能是问题的根源),在第一个时间点,x 和 y 坐标范围从 0 到 2000,z 坐标都在一个更窄的范围内 -比如说 350 到 450。在变形过程中,每个点都有位移的 x 分量、y 分量和 z 分量。 x 和 y 分量很小(最多约 50),而 z 分量最大(在中心附近可达 400,在边缘附近更小)。

在每个点的位置使用加权移动最小二乘法,我试图根据该点的原始 x,y,z 坐标将位移分量拟合到二次多项式曲面:例如。 的x分量

displacement = ax^2 + bxy + cx + dy^2.. + hz^2 + iz + j

我在 MATLAB 中使用 lsqr 函数,就像这样,在每个时间间隔循环遍历每个点:

Ux = displacements{k,1}(:,1);
Cx = lsqr((adjust_B_matrix'*W*adjust_B_matrix),(adjust_B_matrix'*W*Ux),1e-7,10000); 

W 是权重矩阵,adjust_B_matrix 是时间 1 时所有 (x,y,z) 坐标的矩阵,经过移动,它们都以我尝试的点为中心拟合函数。

出了什么问题? 它只是不起作用——一旦我有了这些功能,它们就会重新以点的实际坐标为中心。 但是,一旦我通过将时间 1 的坐标插入现在发现的函数中来绘制结果点(初始点 x + 位移 x,初始点 + 位移,初始点 z + 位移z),它只会吐出一个看起来就像表面一样的表面在时间 1。

可能出了什么问题?我尝试过的事情:

  1. 这不是代码本身的问题 - 我使用点网格生成了“假”数据,它运行良好。预测的位置与实际坐标叠加,我能够恢复我开始使用的功能。但在我的试用示例中,我使用了从 0 到 5 的 x、y、z,均匀分布。
  2. 全局拟合有效(但我需要局部拟合...)。 我尝试了 MATLAB 的曲线拟合工具箱,只是尝试将其中一个位移拟合到全局的 x 和 y 坐标。效果很好。
  3. 认为我不应该有奇异矩阵问题,因为我在计算中使用了一个大半径(大约 75-80)点,在 3D 空间中有些分散。

怀疑: 我认为这与初始(x,y,z)坐标分布不均匀有关,但我不知道为什么或如何解决这个问题,甚至我可以使用什么方法。

如果您读到这里,非常感谢。任何建议将不胜感激。

图供参考: 绿色 = 时间 2 的预测点。大部分与红色重叠,即时间 1 的点的实际坐标。 蓝色是时间 2 点的正确坐标(如果一切正常,这是绿色的应该所在的位置)。

image

更新的文件链接: http://a.tmp.ninja/eWfkNmFZyTFk.zip 内容 - 代码、示例数据(请加载 .mat 文件)。

【问题讨论】:

  • 欢迎堆栈溢出!您显然已经努力描述了这个棘手的问题,但很难真正理解。如果您可以共享我们可以与示例数据一起运行的代码,我认为您更有可能获得帮助(请参阅minimal reproducible example)。我很欣赏这很棘手,但对于这类问题,我认为这将是获得有用答案的最佳方式。祝你好运!
  • 感谢您的回复和编辑!我担心代码太长(我是初学者,它显示......)但我会尝试清理它并尽快发布。再次感谢!

标签: matlab least-squares


【解决方案1】:

我实际上无法访问您发布的代码,所以这里有一些一般性建议。

看起来曲线拟合工具箱的工具完全符合您的要求,请查看本页底部:https://www.mathworks.com/help/curvefit/polynomial.html#bt9ykh

看起来无论你学习到的位移函数在哪里都非常小或为零。我怀疑这个问题只是你在管道中某个地方的一个小错字/错误,可能翻译你必须使用 fit 函数处理的内容会揭示问题。

这确实不应该是问题,但是将来如果您有更多不平衡的数据,您可以在拟合之前对其进行归一化 (x_norm = (x - x_mu)/x_std)。

另外,我认为这也不是您的问题,但是您可以通过使用 cord() 函数检查条件数来检查矩阵是否接近单数。所以你可以检查 cond(adjust_B_matrix'Wadjust_B_matrix)。其次,如果您查看 lsqr 的文档,则可以选择获取调试返回标志,这也值得查看。

【讨论】:

  • 感谢您抽出宝贵时间回复!我刚刚检查了链接,如果你有时间可以再试一次吗? a.tmp.ninja/eWfkNmFZyTFk.zip 也感谢您的建议——关于曲线拟合工具箱的问题是我无法弄清楚如何执行移动加权最小二乘拟合而不是全局拟合。工具箱中有一个权重点,但我不确定如何根据邻居与兴趣点的距离为每次拟合设置不同的权重集。
  • 是的,你说得对,学习的函数非常小。我不知道为什么——至少,对于 z 位移,它应该给我很大的值。我会检查调试返回标志和绳子功能 - 非常感谢!
  • 其实如何用曲线拟合工具箱拟合4D数据呢?我需要将位移拟合为 (x,y,z) 的函数
猜你喜欢
  • 2013-01-21
  • 1970-01-01
  • 2012-08-29
  • 2014-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-25
  • 2020-10-02
相关资源
最近更新 更多