我正在寻找一种算法来找到点云和球体之间的最佳拟合。
也就是说,我想最小化
其中C是球体的中心,r是球体的半径,每个P是我的n个点集中的一个点。变量显然是Cx、Cy、Cz和r。在我的情况下,我可以事先获得一个已知的r,只留下C的组件作为变量。
我真的不想使用任何类型的迭代最小化(例如牛顿法、Levenberg-Marquardt 等)——我更喜欢一组线性方程或明确使用 SVD 的解决方案。
我正在寻找一种算法来找到点云和球体之间的最佳拟合。
也就是说,我想最小化
其中C是球体的中心,r是球体的半径,每个P是我的n个点集中的一个点。变量显然是Cx、Cy、Cz和r。在我的情况下,我可以事先获得一个已知的r,只留下C的组件作为变量。
我真的不想使用任何类型的迭代最小化(例如牛顿法、Levenberg-Marquardt 等)——我更喜欢一组线性方程或明确使用 SVD 的解决方案。
没有即将出现的矩阵方程。您选择的 E 表现不佳;它的偏导数甚至不是连续的,更不用说线性了。即使有不同的目标,这个优化问题似乎基本上是非凸的。具有一个点 P 和非零半径 r,最优解集是关于 P 的球体。
您可能应该重新询问更多优化知识的交流。
您可能会发现以下参考资料很有趣,但我会警告您,您需要熟悉几何代数 - 特别是保形几何代数才能理解数学。但是,该算法可以直接使用标准线性代数技术实现,并且不是迭代的。
需要注意的是,该算法至少符合中心和半径,您可以找到一种方法来约束拟合,从而限制半径。
使用 (n+ 2)-D 等距表示法对 nD 欧几里得空间中的 k 球体进行总最小二乘拟合。L Dorst,数学成像与视觉杂志,2014 p1-21
您可以从 Leo Dorst 的 researchgate 页面获取一份副本
最后一件事,我和作者没有任何关系。
没有迭代很难做到这一点。
我将按如下方式进行:
通过对所有点的 (X,Y,Z) 坐标求平均来找到整体中点
有了这个结果,找到到中点的平均距离 Ravg,决定好还是继续..
从您的集合中删除距离步骤 2 中发现的 Ravg 太远的点
返回第 1 步(再次平均点,产生更好的中点)
当然,这将需要 (2) 和 (4) 的一些条件,这取决于您的点云的质量!
Ian Coope 有一个有趣的算法,他使用变量的变化来线性化问题。拟合非常稳健,虽然它略微重新定义了最优性条件,但我发现它通常在视觉上更好,尤其是对于嘈杂的数据。
Coope 论文的预印本可在此处获得:https ://ir.canterbury.ac.nz/bitstream/handle/10092/11104/coope_report_no69_1992.pdf 。
我发现该算法非常有用,因此我在scikit-guess中将其实现为skg.nsphere_fit
. 假设你有一个(m, n)
数组p
,由 M 个维度为 N 的点组成(这里 N=3):
r, c = skg.nsphere_fit(p)
半径 ,r
是一个标量,c
是一个n
包含中心的向量。
您可能对最适合的 d 维球体感兴趣,即最小化到中心的平方距离的总体方差;它有一个简单的解析解(矩阵微积分):参见 Cerisier 等人的开放获取论文的附录。在 J. 计算机。生物学。24(11), 1134-1137 (2017), https://doi.org/10.1089/cmb.2017.0061 它在数据点被加权时起作用(它甚至适用于连续分布;作为副产品,当 d= 1,检索一个众所周知的不等式:峰度总是大于平方偏度加 1)。