function ipar =selfmatchpiont(features1,features2,Movement_features_1,Movement_features_2)
[m1,~] = size(features1);
[m2,~] = size(features2);
v1 = Movement_features_1(2,:); %用于竖向限制
v2 = Movement_features_2(2,:);
Similarity = zeros(m1,m2); %确定匹配矩阵
deta_v = zeros(m1,m2);
for i = 1:m1
for j=1:m2
Similarity(i,j) = norm(double(features1(i,:)-features2(j,:)));
deta_v(i,j) = abs(v1(i)-v2(j));
end
end
Mix_similarities = (Similarity+0.01*deta_v); % 特征相似性和竖向的共同约束
temps = (Similarity+0.01*deta_v); %由于后期会改变变量,暂存一个未改变的以便后续查询
ipar = [];
if m1<=m2
for l = 1:min([m1,m2])
Mix_similarities =Mix_similarities';
maxs = max(Mix_similarities,[],'all');
[mn1,mn2] = find(Mix_similarities == min(Mix_similarities,[],'all'));
ipar = [ipar;mn2,mn1];
Mix_similarities(:,mn2) = maxs;
Mix_similarities(mn1,:) = maxs;
end
for ml = 1:min([m1,m2])
similarities(ml) = temps(ipar(ml,1),ipar(ml,2));
deta_vs(ml) = deta_v(ipar(ml,1),ipar(ml,2));
end
else
for l = 1:min([m1,m2])
maxs = max(Mix_similarities,[],'all');
[mn1,mn2] = find(Mix_similarities == min(Mix_similarities,[],'all'));
ipar = [ipar;mn1,mn2];
Mix_similarities(mn1,:) = maxs;
Mix_similarities(:,mn2) = maxs;
end
for ml = 1:min([m1,m2])
similarities(ml) = temps(ipar(ml,1),ipar(ml,2));
deta_vs(ml) = deta_v(ipar(ml,1),ipar(ml,2));
end
end
h=1;
lipar= find(similarities<=h);
ldeta_vs = find(deta_vs<8);
ls = intersect(lipar,lipar);
ipar = ipar(ls,:);
在双目匹配中,matlab给定算法未出结果。遂自编,欢迎交流