如何判断两条轨迹(或曲线)的相似度?

比如下图,虽然它们的重合度不高,但是它们的结构是一样的,应当认为它们是很相似的,请问如何量化的判断呢?有什么好的算法? 

做过一个小研究是关于判断曲线的相似性的,下面正文答案已经基本上解决了该问题。使用归一化后的Fréchet distance即可。另外也可使用Hausdorff distance,但是使用效果不如前者。
推荐几篇论文仅供参考:

Alt H, Godau M (1995) Computing the Fréchet distance between two polygonal curves International Journal of Computational Geometry & Applications 5:75-91. doi:10.1142/S0218195995000064

Fréchet MM (1906) Sur quelques points du calcul fonctionnel Rendiconti del Circolo Matematico di Palermo (1884-1940) 22:1-72. doi:10.1007/BF03018603

 

此外,可以使用离散化的方法使用Fréchet distance,以便于实际编程计算,同推荐一篇离散化的文章供参考,里面有该方法的伪代码,另matlab也有现成的package,搜搜即可。

Eiter T, Mannila H (1994) Computing discrete Fréchet distance See Also

 

最后推荐一个应用该方法的实例,为了解决Fréchet distance中阈值的问题对其进行了标准化从而得到一个相似指数。

Wang J, Xu C, Tong S, Chen H, Yang W (2013) Spatial dynamic patterns of hand-foot-mouth disease in the People's Republic of China Geospatial health 7:381-390

 

判断两条轨迹的相似性方法有很多

基于点方法: EDR,LCSS,DTW等

基于形状的方法: Frechet, Hausdorff(该方法可以解决上述问题)

基于分段的方法:One Way Distance, LIP distance

基于特定任务的方法:TRACLUS, Road Network,grid等

附上本人总结的Trajectory Distance slides:

作者:Di Yao
链接:https://www.zhihu.com/question/27213170/answer/271567963
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 11
    点赞
  • 183
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 要在 Python 中绘制散点图并进行拟合曲线,可以使用 Matplotlib 和 NumPy 库。以下是一个简单的例子: ```python import matplotlib.pyplot as plt import numpy as np # 创建一些随机的数据 x = np.array([1, 2, 3, 4, 5]) y = np.array([2.1, 3.9, 6.2, 8.1, 10.5]) # 绘制散点图 plt.scatter(x, y) # 拟合曲线 p = np.polyfit(x, y, 1) y_fit = np.polyval(p, x) # 绘制拟合曲线 plt.plot(x, y_fit, 'r') # 显示图像 plt.show() ``` 这个例子中,我们首先创建了一些随机的数据,并使用 `plt.scatter()` 绘制了散点图。然后,使用 NumPy 库中的 `np.polyfit()` 函数进行一次多项式拟合,得到了拟合曲线的系数。最后,使用 `np.polyval()` 函数计算出拟合曲线上的点,并使用 `plt.plot()` 函数绘制出拟合曲线。最后,使用 `plt.show()` 函数显示图像。 你可以根据自己的数据和需求修改代码来绘制散点图并进行拟合曲线。 ### 回答2: 散点拟合曲线是指通过已知的散点数据点来拟合出一条曲线,使得曲线能够较好地代表数据点的分布趋势。在Python中,可以使用NumPy和Matplotlib库来进行散点拟合曲线的计算和绘制。 首先,我们需要将数据点导入Python中,并用NumPy库来进行数学计算。假设我们有两个数组x和y,分别表示散点的横坐标和纵坐标。我们可以使用polyfit函数来拟合曲线,具体代码如下: ``` import numpy as np # 导入散点数据 x = np.array([1, 2, 3, 4, 5]) y = np.array([2, 4, 6, 8, 10]) # 进行拟合曲线计算 fit = np.polyfit(x, y, 1) # 拟合一次多项式曲线,这里选择一次拟合 # 输出斜率和截距 slope = fit[0] # 斜率 intercept = fit[1] # 截距 print("斜率:", slope) print("截距:", intercept) ``` 上述代码中,我们导入了NumPy库,并使用polyfit函数来拟合一次多项式曲线。函数中的参数x和y分别表示散点的横坐标和纵坐标,而参数1表示拟合的多项式的次数。拟合完成后,我们可以通过fit数组来获取拟合曲线的斜率和截距。 接下来,我们使用Matplotlib库将散点和拟合曲线绘制出来,具体代码如下: ``` import matplotlib.pyplot as plt # 绘制散点 plt.scatter(x, y, color='blue', label='Scatter plot') # 绘制拟合曲线 plt.plot(x, slope*x + intercept, color='red', label='Fitted line') # 显示图例 plt.legend() # 显示图形 plt.show() ``` 上述代码中,我们导入了Matplotlib库,并使用scatter函数绘制散点图,使用plot函数绘制拟合曲线。我们设置了散点的颜色为蓝色,拟合曲线的颜色为红色,同时添加了图例。最后使用show函数显示图形。 通过以上代码,我们可以得到散点拟合曲线的斜率和截距,并将散点和拟合曲线绘制在一张图上,以直观地展示数据的分布趋势。 ### 回答3: 在Python中,我们可以使用matplotlib库进行散点拟合曲线的绘制。具体步骤如下: 1. 导入所需库:首先,在Python中,我们需要导入matplotlib库和numpy库。matplotlib用于绘制图表,numpy用于进行数值计算。 2. 准备数据:准备需要绘制散点拟合曲线的数据。可以将数据存储在列表或numpy数组中。 3. 绘制散点图:使用matplotlib中的scatter函数绘制原始散点图。该函数接受x轴和y轴的数据作为参数,并将其绘制为散点图。 4. 拟合曲线:使用numpy中的polyfit函数进行数据拟合,生成拟合曲线的系数。该函数接受x轴和y轴的数据以及拟合曲线的阶数作为参数,并返回拟合曲线的系数。 5. 绘制拟合曲线:使用matplotlib中的plot函数绘制拟合曲线。该函数接受x轴和拟合曲线的y轴数据作为参数,并将其绘制为曲线。 6. 显示图表:使用matplotlib中的show函数显示绘制的图表。 以下是一个示例代码: import matplotlib.pyplot as plt import numpy as np # 准备数据 x = np.array([1, 2, 3, 4, 5]) y = np.array([2, 3, 5, 6, 8]) # 绘制散点图 plt.scatter(x, y) # 拟合曲线 coefficients = np.polyfit(x, y, 1) polynomial = np.poly1d(coefficients) # 绘制拟合曲线 x_fit = np.linspace(1, 5, 100) y_fit = polynomial(x_fit) plt.plot(x_fit, y_fit, 'r') # 显示图表 plt.show() 运行以上代码,即可得到散点拟合曲线图。根据提供的数据,代码会首先绘制散点图,然后通过拟合曲线获得相关系数,并将拟合曲线绘制在图表上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值