Frechet距离用于描述路径的相似性。
可以用一个二维矩阵$Ca$来表示。
设$d(i,j)$为A,B路径第$i$和第$j$个点的欧式距离。
首先计算A路径第一个点到B路径第一个点的欧式距离,设为$Ca$矩阵的第一个元素。
然后再计算$Ca$矩阵的第一行和第一列:
$Ca(1,j)=Max(Ca(1,j-1),d(1,j))$ $Ca(i,1)=Max(Ca(i-1,1),d(i,1))$然后根据下面公式计算出Ca矩阵的所有元素即可:
$Ca(i,j)=Max(Min(Ca(i,j-1),Ca(i-1,j-1),Ca(i-1,j)),d(i,j))$
Frechet距离即为$Ca$矩阵的最后一个元素。
matlab代码如下:
clear all;close all;clc; x1 = (0:0.1:2*pi)'; p1 = [x1 sin(x1)]; x2 = (0:0.2:2*pi)'; p2 = [x2 cos(x2)]; plot(p1(:,1),p1(:,2)); hold on; plot(p2(:,1),p2(:,2)); ca = zeros(length(x1),length(x2)); ca(1,1) = norm(p1(1,:)-p2(1,:)); for i=2:length(x1) ca(i,1) = max(ca(i-1,1),norm(p1(i,:)-p2(1,:))); end for i=2:length(x2) ca(1,i) = max(ca(1,i-1),norm(p1(1,:)-p2(i,:))); end for i=2:length(x1) for j=2:length(x2) ca(i,j) = max(min([ca(i-1,j),ca(i-1,j-1),ca(i,j-1)]),norm(p1(i,:)-p2(j,:))); end end figure; mesh(ca); dis = ca(end,end)
结果如下:
两条路径:
距离矩阵$Ca$:
最终Frechet距离是距离列表中的最后一个值。
标签:p2,p1,end,Ca,练习,Frechet,matlab,x2,ca From: https://www.cnblogs.com/tiandsp/p/17320837.html