30 lines
No EOL
943 B
Matlab
30 lines
No EOL
943 B
Matlab
function [ A, T, error, alignedShape ] = AlignShapesWithScale( alignFrom, alignTo )
|
|
%ALIGNSHAPESWITHSCALE Summary of this function goes here
|
|
% Detailed explanation goes here
|
|
|
|
numPoints = size(alignFrom,1);
|
|
|
|
meanFrom = mean(alignFrom);
|
|
meanTo = mean(alignTo);
|
|
|
|
alignFromMeanNormed = bsxfun(@minus, alignFrom, meanFrom);
|
|
alignToMeanNormed = bsxfun(@minus, alignTo, meanTo);
|
|
|
|
% scale now
|
|
sFrom = sqrt(sum(alignFromMeanNormed(:).^2)/numPoints);
|
|
sTo = sqrt(sum(alignToMeanNormed(:).^2)/numPoints);
|
|
|
|
s = sTo / sFrom;
|
|
|
|
alignFromMeanNormed = alignFromMeanNormed/sFrom;
|
|
alignToMeanNormed = alignToMeanNormed/sTo;
|
|
|
|
[R, t] = AlignShapesKabsch(alignFromMeanNormed, alignToMeanNormed);
|
|
|
|
A = s * R;
|
|
aligned = (A * alignFrom')';
|
|
T = mean(alignTo - aligned);
|
|
alignedShape = bsxfun(@plus, aligned, T);
|
|
error = sqrt(mean(sum((alignedShape - alignTo).^2,2)));
|
|
|
|
end |