function [newL2] = bestMap(L1,L2) %bestmap: permute labels of L2 match L1 as good as possible % [newL2] = bestMap(L1,L2); %=========== L1 = L1(:); L2 = L2(:); if size(L1) ~= size(L2) error('size(L1) must == size(L2)'); end L1 = L1 - min(L1) + 1; % min (L1) <- 1; L2 = L2 - min(L2) + 1; % min (L2) <- 1; %=========== make bipartition graph ============ nClass = max(max(L1), max(L2)); G = zeros(nClass); for i=1:nClass for j=1:nClass G(i,j) = length(find(L1 == i & L2 == j)); end end %=========== assign with hungarian method ====== [c,t] = hungarian(-G); newL2 = zeros(nClass,1); for i=1:nClass newL2(L2 == i) = c(i); end