%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Singular Value Decomposition Stereo Matching % % C=svdmatch(point_corr,point_dist,sigma,corr_th); % point_corr: m x n matrix of feature correlations % point_dist: m x n matrix of feature interdistance % sigma: adjust point interaction (expected displacem.) % corr_th: min acceptable correlation for a match % C: Feature mapping matrix; C(i,j)=1 when 1:1 corresp. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function C=svdmatch(point_corr,point_dist,sigma,corr_th); % Get number of features in both images [m, n] = size(point_corr); % Build correspondence strength matrix G = (point_corr+1)/2 .* exp(-point_dist.^2/(2*sigma^2)); % Perform SVD and extract orthogonal matrix P [T,D,U] = svd(G); D = diag(ones(min(n,m),1)); D(m,n)=0; % D is m x n P = T*D*U'; % Find dominant of each line and column [V, I] = max(P'); [V, J] = max(P); % Initialize correspondence matrix C C = zeros(m, n); % Set a one-to-one correspondence between Ii and Jj % only if P(i,j) is MAX of both row i and column j % AND their correlation is above corr_th for i=1:length(J) if I(J(i))==i if (point_corr(i,J(i))>corr_th) C(i,J(i)) = 1; end end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%