matlab练习程序(Frechet距离)

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距离是距离列表中的最后一个值。

posted @ 2023-04-15 16:27  Dsp Tian  阅读(293)  评论(0编辑  收藏  举报