This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the English version of the page.

Note: This page has been translated by MathWorks. Click here to see
To view all translated materials including this page, select Country from the country navigator on the bottom of this page.


Procrustes analysis


d = procrustes(X,Y)
[d,Z] = procrustes(X,Y)
[d,Z,transform] = procrustes(X,Y)
[...] = procrustes(...,'scaling',flag)
[...] = procrustes(...,'reflection',flag)


d = procrustes(X,Y) determines a linear transformation (translation, reflection, orthogonal rotation, and scaling) of the points in matrix Y to best conform them to the points in matrix X. The goodness-of-fit criterion is the sum of squared errors. procrustes returns the minimized value of this dissimilarity measure in d. d is standardized by a measure of the scale of X, given by:


That is, the sum of squared elements of a centered version of X. However, if X comprises repetitions of the same point, the sum of squared errors is not standardized.

X and Y must have the same number of points (rows), and procrustes matches Y(i) to X(i). Points in Y can have smaller dimension (number of columns) than those in X. In this case, procrustes adds columns of zeros to Y as necessary.

[d,Z] = procrustes(X,Y) also returns the transformed Y values.

[d,Z,transform] = procrustes(X,Y) also returns the transformation that maps Y to Z. transform is a structure array with fields:

  • c — Translation component

  • T — Orthogonal rotation and reflection component

  • b — Scale component

That is:

c = transform.c;
T = transform.T;
b = transform.b;

Z = b*Y*T + c;

[...] = procrustes(...,'scaling',flag), when flag is false, allows you to compute the transformation without a scale component (that is, with b equal to 1). The default flag is true.

[...] = procrustes(...,'reflection',flag), when flag is false, allows you to compute the transformation without a reflection component (that is, with det(T) equal to 1). The default flag is 'best', which computes the best-fitting transformation, whether or not it includes a reflection component. A flag of true forces the transformation to be computed with a reflection component (that is, with det(T) equal to -1)


collapse all

Generate the sample data in two dimensions.

n = 10;  
X = normrnd(0,1,[n 2]);

Rotate, scale, translate, and add some noise to sample points.

S = [0.5 -sqrt(3)/2; sqrt(3)/2 0.5];
Y = normrnd(0.5*X*S+2,0.05,n,2);

Conform Y to X using procrustes analysis.

[d,Z,tr] = procrustes(X,Y);

Plot the original X and Y with the transformed Y .



[1] Kendall, David G. “A Survey of the Statistical Theory of Shape.” Statistical Science. Vol. 4, No. 2, 1989, pp. 87–99.

[2] Bookstein, Fred L. Morphometric Tools for Landmark Data. Cambridge, UK: Cambridge University Press, 1991.

[3] Seber, G. A. F. Multivariate Observations. Hoboken, NJ: John Wiley & Sons, Inc., 1984.

See Also


Introduced before R2006a