【发布时间】:2016-04-17 20:48:04
【问题描述】:
我想将一条线拟合到线段,即大约属于该线的少量(通常少于 10 个)线段。这条线有一个小坡度。但也有异常值:线外的段(通常更小)。下图是一个典型案例。碎片之间没有水平重叠。
我宁愿避免尝试拟合所有细分子集并保持最佳状态。我也不会依赖 RANSAC,因为样本太小了。
有什么建议吗?
更新:
我现在计划将问题改写为在点上拟合一条线的问题,即各个线段上的点的无穷大,假设线性密度恒定。通过以积分形式重写最小二乘方程,我们可以看到我们可以认为这些线段集中在它们的中间,权重等于它们的长度;还有一个额外的术语考虑了它们的斜率。这为段上的拟合提供了良好的基础。
现在我仍然需要结合异常值检测。受 RANSAC 的启发,我可以选择最长的线段并单独或成对使用它们来获得候选线。对于每一行,评估总误差,并保留给出最小值的行。从那里开始,一些标准(尚未找到)应该允许拒绝异常值并对内部值执行最终最小二乘拟合。
【问题讨论】:
-
以最短行的 1/10 长度分割每一行;最小二乘最佳拟合;删除最差的异常值line;重复。对于每次迭代计算the sigma 整体,看到急剧下降,停止。或者,在每一步,为每条线计算其与最佳拟合线的豪斯多夫距离,删除最远的线,重复;当距离小于某个预设值时停止 // 幅度显着下降。
-
@WillNess:嗯,如果对所有段进行初始拟合,最小二乘拟合将表现不佳,并且会受到异常值的很大影响。然后存在拒绝内点的风险。无论如何,将异常值一一去除的想法很有趣。
-
为什么?你说异常值很短。以相同的长度进行分割可以增强更接近的较长线的影响。
-
@WillNess:这是最小二乘法的弱点:误差是平方的,过度强调异常值。一个点可能会破坏原本非常适合的。
-
@WillNess: demonstrations.wolfram.com/…(查看左下角快照)。
标签: algorithm geometry curve-fitting robustness