function [RR,TT,data] = svdPre(correspondings,points)
% PreRegistration for known coresponding points
%INPUT:
% correspondings - matrix with model points, [ X_1; X_2; ...;X_M ]
% points - matrix with data points, [ P_1;P_2; ...;P_N ]
%OUTPUT:
% R - rotation matrix
% T - translation vector
% data2 - matrix with transformed data points, [ P_1;P_2;...;P_N ]
% data2 = R*data + T
%
% Usage:
% [R,T,data2] = svdPre(model,data)
% Check input arguments
if or(isempty(correspondings),isempty(points))
error('Something is wrong with the model points and data points');
end
x=points;
y=correspondings;
% Size of model points and data points
m=size(y,2);%y向量列的维数
M=size(y,1);%y向量行的维数
if m~=size(x,2)
error('The dimension of the model points and data points must be equal');
end
N=size(x,1);
%PreRegistration
vi=1:N;
meanx=mean(x,1);
meany=mean(y,1);
C=zeros(3,3);
for i=1:N
C=C+(x(i,:)-meanx)'*(y(i,:)-meany);%这一行的物理意义是什么呢?
end
[U,~,V]=svd(C);
RR=V*U';
if det(RR)<0
V(:,end)=-V(:,end);
RR=V*U';
end
TT=meany'-RR*meanx';
data=RR*x'; % Apply transformation
for i=1:m
data(i,:)=data(i,:)+TT(i); %
end
data = data';
你好,我是有问必答小助手。为了技术专家团更好地为您解答问题,烦请您补充下(1)问题背景详情,(2)您想解决的具体问题,(3)问题相关代码图片或者报错信息。便于技术专家团更好地理解问题,并给出解决方案。
您可以点击问题下方的【编辑】,进行补充修改问题。