4

我有一条 2d 线(它可以是一条曲线,带有循环等),以及多条类似的路径。我想将第一条路径与其他路径进行比较,并确定哪一条最相似(如果可能,以百分比表示)。

我在想也许将路径转换为位图,然后使用库来比较位图,但这似乎有点矫枉过正。就我而言,我只有一条不间断的路径,由点组成,没有不同的颜色或任何东西。

谁能帮我?

编辑:

所以第一行是黑色的。我将所有其他行与它进行比较。我想要一个库或算法,它可以说:红线是 90% 准确的(因为它的形状几乎相同,并且接近黑线);蓝线是 5% 的准确度——这个百分比是为了这个例子而弥补的......——因为它有相似的形状,但它更小,而且不靠近黑色路径。

所以相似度的标准是:

  • 线条彼此之间的距离有多近
  • 它们有什么形状
  • 它们有多大

(颜色无所谓)

我知道不可能找到一个考虑所有这些的图书馆。但最重要的比较应该是:它们的形状和大小是否相同?我可以自己计算的距离。 在此处输入图像描述

4

1 回答 1

5

我可以想出两种方法来表达两条线 N(定义为点 p0、p1...pr 之间的直线段)M(在 q0、q1、...qs 之间的直线段)之间的相似性。我假设 p0 和 q0 总是比 p0 和 qs 更接近。

1) 面积

使用包围在 N 和 M 之间的区域的总和,其中 N 和 M 随着区域变大而更加不同。要使 N 和 M 形成闭合形状,您应该将 p0 和 q0 以及 pr 和 qs 用直线段连接起来。为了能够计算封闭区域的表面,在 N 和 M 段之间的交点处引入新点,以便得到一个或多个没有孔或自相交的简单多边形。这种多边形的面积计算起来相对简单(在网上搜索“多边形面积计算”),对面积求和,你就有了(不)相似度的度量。

2) 抽样

取位于 N 上的预定义数量(例如 1000 个)样本点 O(相对于整条线均匀分布,或在 N 的每个线段上均匀分布)。对于 O 中的每个样本点 o,我们将计算到 M 上最近对应点的距离:结果是这些距离的总和。接下来,颠倒角色:从 M 中取出样本点,计算 N 上每个最近的对应点,并将它们的距离相加。这两者中的哪一个产生最小的和(它们可能不一样!)是(不)相似性的度量。
笔记:要定位M上最近的对应点,定位M中每条直线段的最近点(这是简单的代数,谷歌为“点到直线段之间的最短距离”)。使用与 o 距离最小的线段的结果。

比较

方法一需要几个几何图元(点、线段、多边形)和对它们的操作(例如计算交点和多边形面积),才能实现。这是更多的工作,但会产生更强大的结果,并且更容易针对由许多线段组成的线进行优化。

方法 2 需要选择“正确”数量的采样点,如果线条具有交替的细节很少的部分和细节很多的部分(即很多线段靠近),这可能会很困难,并且它的实现可能很快使用大量样本点变得(非常)慢(将每个样本点与每个线段匹配是二次运算)。从好的方面来说,它不需要大量的几何运算并且相对容易实现。

于 2013-09-12T19:53:04.757 回答