Hi Dan, cc List,
 
what I previously suggested is only true in a specific situation, where you need to transform a point P in a certain image A to a new location in another nii image B of the same object when you known the affine transformation between them. This clearly is not what you are after apparently (see below), so I'd leave this one to John. I usually work with the V.mat matrices directly, and am not very familiar with the spm_reslice function.
 
Good luck,
 
Bas
 
 
 
--------------------------------------------------
Dr. S.F.W. Neggers
Division of Brain Research
Rudolf Magnus Institute for Neuroscience
Utrecht University Medical Center
Visiting : Heidelberglaan 100, 3584 CX Utrecht
              Room B.01.1.03
Mail     : Huispost B.01.206, P.O. Box 85500
             3508 GA Utrecht, the Netherlands
Tel       : +31 (0)88 7559609
Fax      : +31 (0)88 7555443
E-mail  : [log in to unmask]
Web    : http://www.neuromri.nl/people/bas-neggers
             http://www.neuralnavigator.com
--------------------------------------------------
 


Van: [log in to unmask] [mailto:[log in to unmask]] Namens Dan Golding
Verzonden: woensdag 2 juni 2010 16:48
Aan: [log in to unmask]
CC: Neggers, S.F.W.; [log in to unmask]
Onderwerp: Re: [SPM] Finding affine transformation parameters

Hi,

Thanks for the responses. I've been trying to work this out over the last couple of weeks. The reason I have to work with the matrix algebra is that I need to apply this transformation to a completely different data set and so I am currently trying to reapply the transform on the original data to see if I can replicate what spm is doing. But I have having trouble getting spm to apply an affine transform from the command line. Here is what I have been trying (ignore the file names), perhaps someone can point out what I'm doing wrong? (Note I am trying to transform ef1t to look like fu2t)

src = spm_vol('EF1T_t1.nii');
trg = spm_vol('FU2T_t1.nii');

x = spm_coreg(trg, src);
A = spm_matrix(x)*spm_get_space('fu2t_t1.nii');

spm_get_space('ef1t_t1.nii',A);
spm_reslice(['fu2t_t1.nii';'ef1t_t1.nii'])

However this is not changing the image at all. I also tried spm_reslice('ef1t_t1.nii') which also did not help. I guess I'm not using the reslice function correctly, or else I haven't changed the header in EF1T_t1.nii correctly to contain the tranform.

How do I do this?

Thanks
Dan


On Fri, May 21, 2010 at 6:33 PM, John Ashburner <[log in to unmask]> wrote:
After alignment and the modification of the headers, mapping from voxel
to voxel is by A\B or B\A.  Coregistration estimates a rigid-body matrix
(R), which is used to update the voxel-to-world mapping of the moved
image so that the A\B or B\A thing does as it should.

Best regards.
-John

On Fri, 2010-05-21 at 15:55 +0200, Neggers, S.F.W. wrote:
> Just to verify:
>
> The method I suggested was : voxel-to-world matrices A and B division,
> eg A/B, or A*inv(B) which is the same mathematically. This in my
> experience maps a coordinate in world space of image 1 to the world
> space of image 2, assuming both images overlapped in voxel space. I just
> guessed that is what Dan asked for, but I could easily be mistaken. I
> use this to map a world space point p in an image to the same location
> in that image after coregistration.
>
> John: what you suggest maps voxels in one image to voxels in another
> image, right? This of course is something different.
>
> Don't want to cause any confusion, so just checking...
>
> So Dan, just pick what you need for the problem you are working on.
>
> Have a nice weekend,
>
> Bas
>
> --------------------------------------------------
> Dr. S.F.W. Neggers
> Division of Brain Research
> Rudolf Magnus Institute for Neuroscience
> Utrecht University Medical Center
> Visiting : Heidelberglaan 100, 3584 CX Utrecht
>               Room B.01.1.03
> Mail     : Huispost B.01.206, P.O. Box 85500
>              3508 GA Utrecht, the Netherlands
> Tel       : +31 (0)88 7559609
> Fax      : +31 (0)88 7555443
> E-mail  : [log in to unmask]
> Web    : http://www.neuromri.nl/people/bas-neggers
>              http://www.neuralnavigator.com
> --------------------------------------------------
>
>
>
> > -----Oorspronkelijk bericht-----
> > Van: SPM (Statistical Parametric Mapping)
> > [mailto:[log in to unmask]] Namens John Ashburner
> > Verzonden: vrijdag 21 mei 2010 15:24
> > Aan: [log in to unmask]
> > Onderwerp: Re: [SPM] Finding affine transformation parameters
> >
> > To register two images of the same subject, the objective is
> > to be able to map from voxels in one image to voxels in the
> > other.  Doing this requires the "voxel to world" matrices in
> > the headers.  So, to go from image 1 (whos voxel-to-world
> > mapping is M1) to image 2 (whose mapping is M2), you would need to:
> >
> > 1) Map from voxels in image 1 to world space (multiply by M1)
> > 2) Rotate and translate this world space into alignment with
> > the world space of image 2 (multiply by R)
> > 3) Map from this world space back to voxels in image 2
> > (multiply by the inverse of M2).
> >
> > So the overall matrix is:  M2\R*M1
> > And the mapping from voxels in image 2 to those in image 1 is:
> > inv(M1)*inv(R)*M2
> >
> >
> > The six parameters computed by spm_coreg are as described in
> > spm_matrix.m .  They paramaterise R (or its inverse).  Going
> > back from a matrix R to the parameters can be done by spm_imatrix.
> >
> > Best regards,
> > -John
> >
> >
> > On Fri, 2010-05-21 at 13:42 +0100, Dan Golding wrote:
> > > Hi,
> > >
> > > I would like to find the 12 parameters for an affine
> > transformation between two nifti images. I have been looking
> > into using spm_coreg and spm_matrix but I couldn't quite
> > understand how to use them form their help. spm_coreg outputs
> > 6 parameters, I'm not sure what these 6 are?
> > >
> > > Also is there a function that does the reverse of
> > spm_matrix, i.e. one that can take an affine transformation
> > matrix and split it into 3 rotations, 3 scalings etc...?
> > >
> > > Thanks
> > > Dan
> > >
> >
> > --
> > John Ashburner <[log in to unmask]>
> >
>
> ------------------------------------------------------------------------------
>
> De informatie opgenomen in dit bericht kan vertrouwelijk zijn en is
> uitsluitend bestemd voor de geadresseerde. Indien u dit bericht onterecht
> ontvangt, wordt u verzocht de inhoud niet te gebruiken en de afzender direct
> te informeren door het bericht te retourneren. Het Universitair Medisch
> Centrum Utrecht is een publiekrechtelijke rechtspersoon in de zin van de W.H.W.
> (Wet Hoger Onderwijs en Wetenschappelijk Onderzoek) en staat geregistreerd bij
> de Kamer van Koophandel voor Midden-Nederland onder nr. 30244197.
>
> Denk s.v.p aan het milieu voor u deze e-mail afdrukt.
>
> ------------------------------------------------------------------------------
>
> This message may contain confidential information and is intended exclusively
> for the addressee. If you receive this message unintentionally, please do not
> use the contents but notify the sender immediately by return e-mail. University
> Medical Center Utrecht is a legal person by public law and is registered at
> the Chamber of Commerce for Midden-Nederland under no. 30244197.
>
> Please consider the environment before printing this e-mail.
>

--
John Ashburner <[log in to unmask]>