Path: news.mathworks.com!not-for-mail
From: <HIDDEN>
Newsgroups: comp.soft-sys.matlab
Subject: Re: Procrustes Analysis without Reflection
Date: Thu, 10 Jul 2008 18:29:04 +0000 (UTC)
Organization: The MathWorks, Inc.
Lines: 56
Message-ID: <g55kdg$omj$1@fred.mathworks.com>
References: <435f98ff-fb02-495f-9600-16fbad0846ac@w7g2000hsa.googlegroups.com> <g09nco$6f1$1@fred.mathworks.com> <g0anam$kor$1@fred.mathworks.com> <g55807$io8$1@fred.mathworks.com>
Reply-To: <HIDDEN>
NNTP-Posting-Host: webapp-02-blr.mathworks.com
Content-Type: text/plain; charset="ISO-8859-1"
Content-Transfer-Encoding: 8bit
X-Trace: fred.mathworks.com 1215714544 25299 172.30.248.37 (10 Jul 2008 18:29:04 GMT)
X-Complaints-To: news@mathworks.com
NNTP-Posting-Date: Thu, 10 Jul 2008 18:29:04 +0000 (UTC)
X-Newsreader: MATLAB Central Newsreader 1187260
Xref: news.mathworks.com comp.soft-sys.matlab:478692


"Qasim " <qzqzqzqz@gmail.com> wrote in message <g55807$io8
$1@fred.mathworks.com>...
> I am trying to understand exactly what is done in Matlab's
> PROCRUSTES.  From your reply, it seems that given two sets
> of points, it first assumes that the center of rotation is
> at the mean of each set, which reduces the problem to just
> finding the rotation matrix using SVD.  I am dealing with a
> more general problem in which I cannot assume that the sets
> of points are symmetrical around the mean.  In that case,
> the mean assumption would lead to grossly inaccurate
> estimates of the rotation matrix.  In the general problem,
> the center-of-rotation vector just adds N unknowns to an
> N-dim shape.  In principle given a succession of rotating
> shapes plus random noise (i.e. more than N samples), it
> should be possible to simultaneously estimate the
> center-of-rotation and the rotation matrix.  Is there any
> way to do this simply in Matlab using a variant of
> PROCRUSTES, or do I need to work this all out by myself?
> Thanks
> QZ

  I'm afraid my wordage in this thread back in May 13 may have been 
misleading, Qasim.  Matlab's 'procrustes' does NOT assume that the mean 
points of the two sets are coincident.  Its first step is to translate one set in 
such a way that these do become coincident.

  The original poster, Rizwindu, wished to align two sets of data in the same 
way as 'procrustes' does, except that a possible reflection should be avoided.  
It was not to provide a reflection even if that would furnish a better match.  I 
know of no way of forcing 'procrustes' to do that, so my endeavor in 
answering this question was to show how one could achieve this goal without 
using 'procrustes'.

  The three steps one would need to use would be 1) translate one of the sets 
so that their mean points are coincident, 2) find the best fitting rotation of 
one set about that common mean point so as to match the other set, and 3) 
provide the best rescaling relative to this mean point.  I went through 1) and 
3) rather hastily because it is step 2) that is the most difficult.  I explained 
how step 2) could be modified in such a way as to prevent any reflection 
occurring.

  As I outlined the procedure, for convenience I actually assumed that both 
sets would have been translated so that their mean points lay at a common 
origin, but this is very easy to do.  You simply subtract each set's mean point 
vector from each of its points so that its new mean then lies at the origin.  It 
is fairly easy to show that any least squares solution must involve a 
translation that matches the two mean points followed by a rotation about 
that common mean point.

  However the hard part is finding the correct rotation.  If you have any 
specific questions about that material I sent in May, please don't hesitate to 
ask.

Roger Stafford