Login  Register

Re: Transform stack using eigenvectors

Posted by Stephan Saalfeld on Aug 21, 2008; 6:38pm
URL: http://imagej.273.s1.nabble.com/Transform-stack-using-eigenvectors-tp3695184p3695186.html

Hi Mike,

once you have the axes x'=(x1,y1,z1), y'=(x2,y2,z2), z'=(x3,y3,z3) of
the new coordinate frame you can easily write down the linear component
of the homogeneous matrix that transfers your coordinates into this
coordinate frame as:

 x' y' z'

 |  |  |
 v  v  v

 x1 x2 x3
 y1 y2 y3  } = A
 z1 z2 z3

such that Aa = a'.  If you want to map an image into the `normalized'
coordinate space, you will typically iterate over the pixels in the
target image and pick the corresponding coordinates from the
source---for this you will have to invert A.

I have in mind, that eigenvectors are only defined up to a rotation of
180deg such that you would have to find out where is top and where is
bottom for each of them.  I would be glad if someone could prove me
wrong with this, particularly because I don't find any reference about
it any more...

Best regards,
Stephan


On Thu, 2008-08-21 at 16:19 +0100, Michael Doube wrote:

> To answer my own question:
>
> The aligned position is the 3 dot products of the original coordinate
> (x,y,z) and the 3 eigenvectors (the principal axes).  Each eigenvector
> is a normal to the plane that contains the other 2 eigenvectors because
> they are orthogonal.  A plane is defined by the vector of its normal and
> the position of the plane on that normal.  The dot product of a plane
> and a point is the distance between plane and point, assuming that
> (0,0,0) is a solution for the plane.  So if you subtract the centroid
> from the point and work out the 3 dot products corresponding to the 3
> eigenplanes, you have the distance along each of the eigenvectors which
> defines the point in the principal axis coordinate frame, and hence
> gives you 'aligned' coordinates.  Then the aligned coordinates can be
> drawn in ordinary image coordinates and the object is aligned according
> to its principal axes.
>
> If that makes no sense or is blatantly wrong, please email me, otherwise
> it's going in a plugin tonight...
>
> Mike
> > -----Original Message-----
> > From: ImageJ Interest Group [mailto:[hidden email]] On Behalf Of
> > Michael Doube
> > Sent: Friday, August 15, 2008 5:57 PM
> > To: [hidden email]
> > Subject: Transform stack using eigenvectors
> >
> > Hi all
> >
> > I have written a plugin that calculates the 3D moments of inertia of a
> > bone imaged in CT, using the Jama package and eigen decomposition.
> >
> > Now that I have a set of eigenvalues and eigenvectors I want to align my
> > object such that its principal axes are parallel with the x,y,z axes of
> > a new stack.
> >
> > Can anyone shed some light as to how to best achieve this?
> >
> > Mike
> >
> >