繁体   English   中英

用于2d路径比较的Java库

[英]Java library for 2d path comparison

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

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

谁能帮我?

编辑:

所以第一行是黑色的。 我比较所有其他线条。 我想要一个库或算法可以说:红线准确度为90%(因为它的形状几乎相同,并且接近黑色); 蓝线准确度为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的分段之间的交叉处引入新点,以便获得一个或多个没有孔或自交叉的简单多边形。 这样一个多边形的区域相对比较简单(在网上搜索“多边形区域计算”),对区域求和,你有(dis)相似度。

2)抽样

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

对照

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM