我需要一个算法来数值计算两条手绘线的相似度。这些线是使用鼠标绘制的,并且在使用不同的算法进行过滤和平滑处理之前,它们被存储为一组笛卡尔坐标。例如,在下图中: 线A和B明显相似,但B和C则不是。该算法应反映这一点。此外,线的“方向”,由起点和终点表示,也很重要。是否已经存在这样的算法?
这个答案极其延迟,但出于像我这样通过搜索偶然发现它的人的利益,我将发布它。我认为 Fréchet距离 可能是你正在寻找的度量方式,特别是因为方向很重要。您可以用许多方法来解决此问题,其中一种是以某些采样率对绘制的点进行采样,并在时间戳上计算每两个样本之间的欧几里得距离,然后取最大值。
一种简单的方法是对两条线上相应点之间的距离进行求和。假设两条线的长度几乎相同,线上的点数量大致相同且等距分布。1. 将线2平移,使其起始点与线1的起始点相同。2. 计算线1和线2之间相应点之间的距离总和。3. 如果平均距离(即SUM/NUMBER_OF_POINTS)小于THRESHOLD,则表示这两条线相似,否则它们不同。可以扩展此方法以支持具有不同大小的线。在这种情况下,只需将较小的线放大以与较长的线匹配,然后其余部分可以类似于上述方法。除了计算距离外,还可以计算线条斜率之间的差异。如果在任何点处(或者一些点处,需要进行一些实验)斜率的差异过大(高于某个阈值),则它们不相似。