weixin_59094960 2023-04-18 19:37 采纳率: 55.6%
浏览 144
已结题

如何实现双折线图形匹配

img

如上图,有ab两条折线,都是以坐标(x,y)来表示其各个端点,如:a = [(x0,y0),(x1,y1)……]。a的端点有5万个,b的端点有4万个,b线的首尾两个点的横坐标也在a线的首尾附近(意思就是不会在图形的首尾出现一大段只有1根线的情况)。且各个端点的横坐标距离并不相等(意思就是X(i)-X(i-1)是一个随机正整数),且a线与b线的横坐标也并不对齐。

现在我输入另一个双折线数据,数据类型与ab相同,不过长度只有几十个端点。拿去跟原图片匹配,获取与其相似度大于90%的部分,并输出原图中相似部分X轴的范围。用代码如何实现呢?

我的疑惑

首先匹配长度并不固定,因为相似图形可能同步缩小放大,长度就变得不一样了,那就不能用简单的滑动窗口来逐帧匹配,运算量太大了。
我也考虑过用dtaidistance库来进行DTW匹配,但我所知的DTW相似度匹配都是单线匹配,像我这样的双线匹配是否能实现?因为分别匹配a和b的话,似乎无法体现a与b之间的相对距离关系。

我的要求

请给出详细代码,因为要同时运算上万个类似的匹配,越高效越好。谢谢

可以提供测试数据

请留下邮箱,我会发给你,就一个30k的 test.pkl 文件。里面的格式是一个字典如下:
{'数据库':{'a':a,'b':b},'要匹配的双折线':{'a':a,'b':b}},里面的a和b都是DataFrame,有x和y的数据。
文件可以用如下代码打开:

import pickle
with open(path, 'rb') as f:
    data = pickle.load(f)

实际上端点数据就是以DataFrame的形式来保存的,前面为了方便表达所以用列表来记录各个端点的数据,您提供的代码尽量用DataFrame,谢谢。

  • 写回答

7条回答 默认 最新

  • zuogle 2023-04-18 19:52
    关注

    你好,能不能提供一些a b 的坐标信息

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月25日
  • 修改了问题 4月18日
  • 修改了问题 4月18日
  • 创建了问题 4月18日