【问题标题】:Recognizing line segments from a sequence of points从一系列点中识别线段
【发布时间】:2012-02-26 03:37:56
【问题描述】:

给定一个二维点的输入,我想将它们分割成线。因此,如果您绘制锯齿形线,则每个线段都应被识别为一条线。通常,我会使用 OpenCV cvHoughLines 或类似的方法(带有异常值去除器的 PCA),但在这种情况下,程序不允许出现“假阳性”错误。如果用户画了一条线并且它没有被识别 - 没关系,但如果用户画了一个 curcle 并且它作为一个正方形出现 - 那就不行了。所以我对错误有一个上限 - 但如果它是一条长线,并且某些点与近似线的距离更大,那又可以了。总结:

-线检测 - 没有误报 - 有界,动态调整误差

哦,而且点是按顺序绘制的,就像手绘一样。

至少它不必很快。这是一个素描工具。有人有想法吗?

【问题讨论】:

    标签: geometry 2d line sketching


    【解决方案1】:

    这与语音和手势识别具有相同的难度。换句话说,你永远不能 100% 确定你已经找到了所有的拐角/交叉点,而且在你找到的那些中,你永远不能 100% 确定它们是正确的。你不能绝对确定的原因是因为模棱两可。用户可能已经进行了一次笔划,打算创建两条以直角相交的线。但如果他们做得很快,“角落”可能会很圆,所以不会被检测到。

    因此,您将永远无法避免误报。您可以做的最好的事情是通过探索几种可能的细分来减轻它们,并使用上下文信息来决定哪个最有可能。

    每年都有很多关于草图分割的论文。这似乎是一个非常基本的问题,但它仍然是一个开放的话题。我使用的是德克萨斯 A&M 公司,称为 MergeCF。本文很好地总结了这一点:http://srlweb.cs.tamu.edu/srlng_media/content/objects/object-1246390659-1e1d2af6b25a2ba175670f9cb2e989fe/mergeCF-sbim09-fin.pdf

    基本上,您会发现曲率高(高于平均曲率的一部分)速度慢的区域(因此您需要时间戳)。曲率和速度的结合极大地改善了初始贴合度。这将为您提供点集群,您可以以某种方式将其减少为单个点(例如,最接近集群中间的点,或曲率最高的点等)。然而,这是中风的“过拟合”。该算法的下一阶段是迭代地挑选最小的段,看看如果它与它的相邻段之一合并会发生什么。如果合并不会过多地增加整体误差,则删除分隔两个段的点。冲洗,重复,直到完成。

    我已经有一段时间没有研究新的分段器了,但我认为没有任何突破。

    在我的实现中,我在初始阈值中使用曲率 median 而不是 mean,这似乎给了我更好的结果。我的大量修改的实现在这里,这绝对不是一个独立的东西,但它可能会给你一些洞察力。 http://code.google.com/p/pen-ui/source/browse/trunk/thesis-code/src/org/six11/sf/CornerFinder.java

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-10
      • 2014-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-18
      • 1970-01-01
      相关资源
      最近更新 更多