Hi Matt,
This is a little tricky... I think your problems might come from the
fact that your diffusion image is radiological (negative determinant
from diag([-2 2 2 1])) but your structural is neurological (positive
determinant from diag([1 1 1 1])).
I've battled through this myself before, and your post has just
prompted me to put the code online, which I'd been meaning to do for
ages. You should be able to find it here:
http://www.nitrc.org/snippet/detail.php?type=package&id=1
though downloading is currently a bit of a faff (I think NITRC are
still developing their snippets library procedures). You'll have to
download flirtmat_read (and name it flirtmat_read.m, not something
like snippet_1.m!) and flirtmat2worldmat (similarly), then look at the
help of the latter. Let me know if you have any problems -- with an
email to ged.ridgway at gmail, since I'm not very active on here right
now.
Best of luck,
Ged
2009/7/24 Matt Glasser <[log in to unmask]>:
> My group is having difficulty implementing the application of a FLIRT affine
> transform outside of FLIRT on mm coordinates. Basically, we have vectors in
> diffusion space that need to be moved into structural space without
> resampling (or we would just use vecreg). To avoid resampling, we are
> converting the vectors to a format that stores the mm coordinates of their
> origin (the center of the voxel in diffusion space) and x y and z components
> of the unit vector. Thus, we need to apply a diff2str.mat FLIRT transform
> to each set of mm coordinates to find out where they will be in structural
> space (where we have cortical surfaces). This is proving less than
> straightforward for our programmer to implement in Caret, potentially
> because of differences in how the origin of the volumes are defined. We
> have the following example situation (which works in flirt or vecreg, but,
> we need to do it on mm coordinates):
>
>
>
> A diffusion volume with the vectors has the following sform:
>
>
>
> sto_xyz:1 -2.000000 0.000000 0.000000 121.510132
>
> sto_xyz:2 0.000000 2.000000 0.000000 -101.654175
>
> sto_xyz:3 0.000000 0.000000 2.000000 -36.245544
>
> sto_xyz:4 0.000000 0.000000 0.000000 1.000000
>
> sform_xorient Right-to-Left
>
> sform_yorient Posterior-to-Anterior
>
> sform_zorient Inferior-to-Superior
>
>
>
> An affine matrix diff2str.mat:
>
>
>
> 0.954197 0.0818732 -0.00957881 -45.0519
>
> -0.0968743 1.04984 0.0603049 -21.6026
>
> 0.0306892 -0.0608188 1.09415 25.3402
>
> 0 0 0 1
>
>
>
> And a structural volume with the following sform:
>
>
>
> sto_xyz:1 1.000000 0.000000 0.000000 -88.500000
>
> sto_xyz:2 0.000000 1.000000 0.000000 -123.500000
>
> sto_xyz:3 0.000000 0.000000 1.000000 -74.500000
>
> sto_xyz:4 0.000000 0.000000 0.000000 1.000000
>
> sform_xorient Left-to-Right
>
> sform_yorient Posterior-to-Anterior
>
> sform_zorient Inferior-to-Superior
>
>
>
> My intuition tells me that some appropriate combination of these matrices
> will lead to a mm to mm affine transform that we can apply to the vectors.
> The separate issue of rotating the vectors to account for the affine
> transform, once we have the correct mm 2 mm one, has been addressed
> elsewhere.
>
>
>
> Thanks,
>
>
>
> Matt.
|