1、引言

对于如何评价两条曲线的相似度现已经存在许多较为直接有效的方法,诸如基于各种距离测度的距离评判、利用相关系数进行相似度分析等等,其中对于距离测度运用较为广泛便是欧式距离、Hausdorff距离等等。而在1906年法国数学家Maurice René Fréchet提出了一种基于空间路径相似度描述方式[1],其着重将路径空间距离考虑进去,使得其对于有一定空间时序的曲线相似度评价效率相比之下更高,这便是Fréchet distance(弗雷歇距离)。

图1:两条曲线间的Hausdorff距离和Fréchet距离[2]

如果Hausdorff距离用表示,Fréchet距离使用表示,则图1中的两曲线可有而。因此在某些情景下Fréchet距离的处理要优于Hausdorff距离,但具体需要使用何种距离测度是需要视具体情况而定的。

2、定义

对于其定义其中最为简单直观的一个理解,主人和狗在两条不同的轨迹上运动,主人和狗之间是由狗绳相连接的,Fréchet距离即两者能各自走完整个轨迹的情况下满足条件的狗绳的最短长度。

图2:A为主人行走轨迹,B为狗的运动轨迹,在此情况下可知Fréchet距离为0.25时刻或者0.75时刻人和狗之间的距离

对于上述人和狗行走问题我们给出严格的数学定义,假设人行走的轨迹为P且长度为N,狗行走的轨迹为Q且长度为M。而两者运动位置的描述可以用一个t变量的连续递增函数来刻画,我们用来表示人运动位置描述函数,用表示狗运动位置描述函数。同时为了方便讨论,我们将变量t约束到区间[0,1]内,那么有,,.。我们用和分别表示t时刻人和狗在各自轨迹上的空间位置,那么人和狗之间的距离会随着和函数本身的不同和变量t的变化而不同,而Fréchet距离实际是寻找一对这样的函数最小化人和狗之间的最长狗绳。

更为严格的Fréchet距离数学表达式如下[3]

对于上述数学表达式的理解为,对于每一对可能的描述函数和我们总能找到整个运动过程中狗绳最长的距离,通过改变和可使得这个最长的狗绳达到最小,这个最小的距离即为Fréchet距离。当然,这个距离也可以是其他形式的距离测度,在这里我们采用欧拉距离。

基于此定义,Eiter 和 Mannila 于1994年提出了离散Fréchet距离的定义[4]。首先我们将上述两轨迹进行离散化,设曲线P是由p个轨迹点所组成,曲线Q是由q个轨迹点所组成。使用和分别表示两轨迹点的顺序集合,则有和。同时,我们可以得到如下序列点对L

其中,, 对于任意 有或和。

P、Q轨迹点之间的序列对之间长度定义为各序列对中欧式距离最大的值,表达式如下

那么其离散Fréchet距离定义如下

可以很容易看出,同时如果,则就有和连续Fréchet距离一样其也满足三角不等式,即

3、连续Fréchet距离和离散Fréchet距离的关系[5]

离散Fréchet距离是连续Fréchet距离的近似,当曲线所选取的离散点足够多时离散Fréchet距离近似等于连续Fréchet距离。

图3:连续Fréchet距离和离散Fréchet距离示意图

图3中(a)部分是在两条曲线离散轨迹点较少的情况,可知此时得到的离散Fréchet距离为和之间的欧拉距离。(b)部分则表示两条曲线的离散轨迹点较多的情况,而此时的离散Fréchet距离为和之间的欧拉距离。两种情况下的连续Fréchet距离都为和之间的欧式距离,故随着曲线的离散轨迹点的数量的增加而离散Fréchet距离将逐渐接近于连续Fréchet距离。

4、离散Fréchet距离计算算法[4]

5、代码示例function dF = DiscreteFrechetDistance(P,Q)

%%

%initialize

Size_P = size(P);

Size_Q = size(Q);

ca = ones(Size_P(1),Size_Q(1)) .* -1;

if Size_P(2) ~= Size_Q(2)

error('The input P and Q must be of the same dimension');

elseif Size_P(1) == 0 && Size_Q(1) == 0

dF = 0;

return;

end

dF = c(Size_P(1),Size_Q(1));

%%

%function c

function c_ij = c(i,j)

d = @(u,v) sqrt(sum((u - v).^2));

if ca(i,j) > -1

c_ij = ca(i,j);

elseif i==1 && j==1

ca(i,j) = d(P(1,:),Q(1,:));

c_ij = ca(i,j);

elseif i > 1 && j == 1

ca(i,j) = max(c(i - 1,1),d(P(i,:),Q(1,:)));

c_ij = ca(i,j);

elseif i == 1 && j > 1

ca(i,j) = max(c(1,j - 1),d(P(1,:),Q(j,:)));

c_ij = ca(i,j);

elseif i > 1 && j > 1

ca(i,j) = max(min([c(i - 1,j),c(i - 1,j - 1),c(i,j - 1)]),d(P(i,:),Q(j,:)));

c_ij = ca(i,j);

else

ca(i,j) = inf;

end

end

end

6、参考文献

[1] Fréchet M M. Sur quelques points du calcul fonctionnel[J]. Rendiconti Del Circolo Matematico Di Palermo, 1906, 22(1):1-72.

[2] Wylie T, Zhu B. Intermittent Map Matching with the Discrete Fr\’echet Distance[J]. Eprint Arxiv, 2014.

[3] Alt H, Godau M. Computing the Fréchet Distance between Two Polygonal Curves[J]. International Journal of Computational Geometry & Applications, 1995, 5(01n02):75-91.

[4] Eiter T, Mannila H. Computing discrete Fréchet distance[R]. Tech. Report CD-TR 94/64, Information Systems Department, Technical University of Vienna, 1994.

[5] Timothy, Randall, Wylie. THE DISCRETE FRECHET DISTANCE AND APPLICATIONS[D]. Montana State University Bozeman, 2013,7-8.

弗雷歇距离 matlab,离散Fréchet(弗雷歇) 距离评价曲线相似度相关推荐

  1. 离散Fréchet(弗雷歇) 距离评价曲线相似度

    离散Fréchet(弗雷歇) 距离评价曲线相似度 1.引言 对于如何评价两条曲线的相似度现已经存在许多较为直接有效的方法,诸如基于各种距离测度的距离评判.利用相关系数进行相似度分析等等,其中对于距离测 ...

  2. 离散Fréchet算法

    目录 离散Fréchet算法 总结 Fréchet算法原理[^1] Fréchet算法实现 参考: 离散Fréchet算法 总结 实现Fréchet算法的过程中巩固递归算法的基本操作,就是终止条件和M ...

  3. MATLAB离散傅里叶变换实验结果分析,Matlab离散傅里叶变换实验报告

    Matlab离散傅里叶变换实验报告 班级 信工082 学号 16 姓名 刘刚 实验组别 实验日期 室温 报告日期 成绩 报告内容:(目的和要求,原理,步骤,数据,计算,小结等) 实验三 离散傅立叶变换 ...

  4. matlab 离散控制系统仿真,实验二-基于Matlab的离散控制系统仿真.doc

    实验 基于Matlab的离散控制系统仿真一.实验目的 学习使用Matlab命令对控制系统进行仿真的方法. 学习使用Simulink工具箱对控制系统进行仿真的方法. 二.实验原理 1. 控制系统命令行仿 ...

  5. Matlab子图间距和边缘距离调整

    Matlab子图间距和边缘距离调整 MATLAB绘图,尤其是绘制多子图时,会在周围留下许多空白,子图的间距有时也需要更改,但是subplot并没有提供这个功能,手动修改太过麻烦. 一共有两种方法可以解 ...

  6. 手把手MATLAB 离散信号表示 指数 正弦 单位阶跃序列的表示

    MATLAB 离散信号表示 指数 正弦 单位阶跃序列的表示 序号 内容 1 指数序列 2 正弦序列 3 单位阶跃序列 一,指数序列 1,指数序列的数学表达式: f ( t ) = A e α t f( ...

  7. matlab中 点到线的距离,用matlab求解点到直线的距离

    满意答案 cith4gbai 2013.12.31 采纳率:59%    等级:12 已帮助:46219人 用matlab求解点到直线的距离,可自定义函数,方法如下: 先用直线上的一点和代表直线方向的 ...

  8. 激光雷达方程应用(使用MATLAB和Python语言得到回波强度、距离平方矫正信号、消光系数随距离的变化曲线)

    文章目录 前言 一.MATLAB语言程序内容 二.Python语言程序内容 总结 前言 上学期刚上完<激光大气探测>这门儿课程,课程报告要求是对激光雷达得到的数据进行处理,最终得到回波强度 ...

  9. fmcw matlab仿真,干货 | 利用MATLAB实现FMCW雷达的距离多普勒估计

    利用Chirp序列的FMCW(Frequency Modulated Continuous Wave)毫米波雷达在汽车防撞等领域得到了广泛的应用.这篇文章基于Matlab对该Chirp序列的Range ...

  10. 根据坐标如何在matlab中l连成曲线,matlab中,如何将两条曲线画在一个坐标系里,plot(x1,x2,y1,y2)还是怎样...

    matlab中,如何将两条曲线画在一个坐标系里,plot(x1,x2,y1,y2)还是怎样以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快 ...

最新文章

  1. 数学建模学习笔记——时间序列分析
  2. matlab 2017 ubuntu,ubuntu安装matlab R2017,
  3. mysql性能优化-学习笔记
  4. JDBC8.0 URL配置
  5. 使用Maven进行Selenium测试自动化
  6. php date( ymd_PHP DATE()
  7. 数据--第26课 - 排序的概念及分类
  8. 使用SecureCRT下载服务器日志到本地windows
  9. py验证码-联众验证码接入
  10. 230页10万字智慧城管系统整体建设方案
  11. 计算机硬盘的参数错误,电脑提示移动硬盘参数错误的解决方法
  12. Linux:进程(二)
  13. 精伦身份证阅读器php_华视CVR-100身份证阅读器BS开发包
  14. OSI网络模型,IO模型,BIO模型,NIO模型,AIO模型,TCP/IP协议
  15. linux/init.h 中__init
  16. 提取特征点和特征点描述
  17. anaconda安装与使用
  18. python周环比增长率怎么算_平均增长速度可以根据各个环比增长速度直接求得。()...
  19. 微型四轴DIY机架,轻巧稳固耐摔,通用720空心杯电机,9厘米轴距
  20. unity聚光灯_聚光灯团队最佳实践:碰撞性能优化

热门文章

  1. R语言ggplot2可视化:loess回归曲线可视化、填充两条 loess回归曲线之间的区域实战(Fill region between two loess-smoothed lines)
  2. 计算机专业本科毕业论文周进展,周进展记录.docx
  3. java怎么做rfif上位机软件,最简单的【上位机软件】详解
  4. 计算机打印怎么取消,电脑怎么取消打印任务_打印机取消打印任务的详细步骤...
  5. 开源、私有化部署,这款知识管理系统还有多少惊喜是我们不知道的
  6. python SMTP发送带图片的邮件时,报TypeError: Could not guess image MIME subtype错误的解决办法
  7. 蓝桥杯近三年初赛题之一(15年b组)
  8. TeamViewer正版许可证到底多少钱?
  9. python开发桌面软件实例-Python开发的第一步:利用Python开发一个桌面小程序
  10. 【新征程】1、考研路漫漫