将固定矩形拟合到点集

时间:2016-07-08 06:50:27

标签: python math computational-geometry curve-fitting least-squares

我想知道是否有人试图将一个固定大小的矩形拟合到给定的一组点。

想象一下,你有一组未分类的点,并不总是显示一个矩形的完整外壳。下图应该证明问题: enter image description here

点数可能会有所不同,可能会丢失点数。 我想找到一个最小二乘法来找到具有固定边长的最佳拟合矩形。

也许我可以先找回回归线,但接缝可以采用不同的方式。

我很欣赏任何暗示。

3 个答案:

答案 0 :(得分:0)

只是解决方案的大纲:

  1. 矩形的高度和宽度是固定的,因此您可以使用三个参数(x0,y0,theta)定义它:比如说左下角和旋转。
  2. 使用此处http://www.fundza.com/vectors/point2line/index.html
  3. pnt2line之类的距离函数
  4. 现在编写一个包装函数:对于每个点,计算距矩形的所有四个边的距离,并指定distance[i]作为这四个距离的最小值
  5. distance中使用此scipy.optimize.curve_fit数组来查找最适合的参数

答案 1 :(得分:0)

如果有异常值,RANSAC可以成为你的好朋友。要进行拟合,需要从不同侧面取三个点。因此,只需选择三个随机点并假设其中两个属于一侧而另一个属于正交侧。找到姿势参数没什么大不了的。您可以根据@VBB描述的距离函数计算拟合误差(对于每个点,距离一侧最短距离)。

根据您的喜好,您可以使用相同的三个点,任意一个侧面任务,或尝试不同的任务并保持最佳状态。

对于内部的最终拟合,你可以使用技巧。

  • 将每个内部分配到最近的一侧;

  • 将每一侧的星团集中在各自的质心上;

  • 将每一侧的星团旋转90°;

  • 这会产生一个具有单一方向的群集;执行普通的线条拟合以获得该方向。

答案 2 :(得分:0)

定义位置P处的固定尺寸矩形R(P)与点Q之间的距离d(R(P),Q),该点Q是连接两者的最短直线的长度。这很容易定义为一个由案例推理的函数。

现在只需使用某种形式的梯度下降来找到最佳P *,使得点集中Q的总和(R(P *),Q)^ 2最小化。