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
Discrete Frechet Distance代码
最新推荐文章于 2022-11-18 18:40:50 发布