algorithm - 分段线拟合

标签 algorithm geometry curve-fitting robustness

我想要将一条线拟合到线段,即大约属于该线的少量(通常少于 10 个)线段。该线有一个小坡度。但也存在异常值:线外的线段(通常较小)。下图是一个典型案例。各个部分之间没有水平重叠。

enter image description here

我宁愿避免尝试对所有分割子集进行拟合并保持最佳状态。我也不会依赖 RANSAC,因为样本太小。

有什么建议吗?


更新:

我现在计划将问题重新定义为在点上拟合直线的问题,即假设线性密度恒定,即各个线段上的无穷多个点。通过以积分形式重写最小二乘方程,我们可以认为线段集中在中间,权重等于它们的长度;还有一个额外的术语考虑了它们的斜率。这为分段安装提供了良好的接地。

现在我仍然需要加入异常值检测。受 RANSAC 的启发,我可以选择最长的线段并单独或成对使用它们来获得候选线。对于每一行,评估总误差,并保留给出最小值的行。从那里,一些标准(尚未找到)应该允许拒绝异常值并对内部值执行最终的最小二乘拟合。

最佳答案

我猜测斜率将约为线片段斜率的平均值乘以等于片段长度的因子(或片段长度的平方,具体取决于外围片段的长度)比较)。然后将该线与该斜率进行最佳拟合。

因此,获取线片段,将斜率转换为角度 (arctan2(y1-y0,x1-x0)) 乘以长度,将它们全部加起来,除以(所有片段的总长度)。对位置(线片段的中点位置 * 片段长度)/(所有片段的总长度)执行相同的操作,然后确保具有该斜率的线与具有该值的点相交。

更新:

如果我们不考虑太多斜坡,我们应该根据各个路段的影响在位置上对线路进行最佳拟合,我们再次根据其长度进行加权。

求片段的总长度。迭代片段,直到达到片段总长度的 1/3。这将是你的第一点的x。然后选择一些任意小的值并再次迭代片段,以您选择的速率采样。那么该样本的影响就是给定的 y 乘以 x 与穿过总片段的 x 1/3 的线性距离,所有片段均由所有片段的线性距离总和标准化。对 2/3 的路程执行相同的操作。并在两个结果点之间画一条线。

关于algorithm - 分段线拟合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36682067/

相关文章:

javascript - 找出 4 个百分比之间的所有可能性

html - 黑色的左/右指向三角形大小不一样

c# - 最适合固定大小但具有标准化位置的实体

python - 如何从 curve_fit 获得置信区间

python - 具有固定峰值的抛物线拟合

Python 拟合任意高斯函数 - 拟合不佳?

javascript - 循环算法递增一个数字直到达到一个值,然后递减

c++ - 所需的最少出租车(算法)

algorithm - 什么是线程推文的一套好的启发式方法?

javascript - 用一条线连接两个圆圈(使用 DOM 元素)