用于二维路径比较的 Java 库

Flo*_*tig 4 java algorithm

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

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

谁能帮我?

编辑:

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

所以相似性的标准是:

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

(颜色无所谓)

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

Ast*_*ain 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) 抽样

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

比较

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

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