【问题标题】:Algorithm To Quantify The Difference Of Line Segment Paths量化线段路径差异的算法
【发布时间】:2010-11-05 17:30:23
【问题描述】:

假设我有两条线段路径,例如下面示例的子集。如何量化它们之间的差异?

  1. |__
  2. \_
  3. __
  4. /\
  5. \/
  6. |
  7. _

两条路径可能有不同的段数,每段的长度和它们之间的角度是可变的。

我认为最好建立一个坐标系并将线段定义为节点和边。差异可能可以通过将一个转换为另一个所需的操作来量化,类似于Levenshtein distance 算法。可惜操作空间很大。有任何想法吗?谢谢!

【问题讨论】:

    标签: algorithm path shapes quantization


    【解决方案1】:

    您可以将它们绘制成固定大小的图像,然后使用欧几里德距离来比较图像。

    或者您可以测量总长度并将角度的绝对值(可能还有带符号的角度)相加作为度量。基于此的东西将具有对形状方向不变的好特性(如果你想要的话!)。

    你如何量化它在某种程度上取决于为什么你想量化它们之间的差异。

    【讨论】:

      【解决方案2】:

      我会比@awoodland 指出的更进一步:如何量化它完全取决于你为什么要量化差异。

      您是否正在寻找一个唯一(至少,可能是唯一的)数字,例如线段路径的哈希码?或者您是否试图量化线段路径以说“这条路径比那条路径更复杂(或更长,或具有更多锐角)”?

      如果您想创建哈希码,我建议创建两个 32 位 CRC(或类似的东西):一个用于段长度,一个用于角度。计算完这些 CRC 后,将它们放在一个 64 位值中,高 32 位中的角度和低 32 位中的长度。根据段的数量,也许单个 CRC 值可以:对于每个段,添加长度,然后添加它与下一段之间的角度。

      请注意,上面可能会为您提供每条路径的唯一编号,但不能保证。

      如果要量化线段路径的复杂度……我的想法不多。

      【讨论】:

        【解决方案3】:

        你可以看看这篇论文:

        http://www.vision.ee.ethz.ch/~calvin/Publications/ferrari07pami.pdf

        在本文中,我们使用 kAS(分段对的泛化:您可以将多个分段相互连接)进行对象检测。我们为这些段集引入了一个描述符,您可以使用它来描述您的配对。

        我们的描述符不是旋转不变的,所以它可能不适合你。

        【讨论】:

          【解决方案4】:

          如果你使用操作:

          • 添加角和线段
          • 删除角和线段
          • 拉伸段(与重量不同)
          • 弯角(与重量不同)

          您仍然可以在 n^2 时间内使用 Levenshtein 距离。

          按照 [segment,corner]* 对段进行编码。所以它会是:

          [length, rotation] [length, rotation]...
          

          旋转与线段指向方向有关。

          计算拉伸和弯曲非常明显。 Value[i-1, j-1] + stretch + bend.

          计算添加/删除。添加Value[i,j-1] + Cost of adding,删除Value[i-1, j] + cost of removal

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-07-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-09-14
            相关资源
            最近更新 更多