Hi Kamran,
My mistake -- still learning about SPM's implementation of HDW
myself... I now think the stored field is actually a mapping of where
that voxel ends up (in world/mm space), so the displacement itself is
indeed from the world location of that voxel based on the usual affine
voxel-world mapping.
So, the following hopefully makes sense...
>> W = squeeze(warp.dat(70,60,50,1,1:3))
W =
55.1213
-29.1896
61.4091
>> w = warp.mat0(1:3,:)*[70;60;50;1]
w =
54.8438
-28.9427
61.2996
>> W-w % the displacement (check from/to convention though)
ans =
0.2775
-0.2468
0.1095
>> norm(W-w) % gives a much more reasonable length!
ans =
0.3872
Best,
Ged.
kamran kazemi wrote:
> Hi Ged
>
> Thanks for your help.
>
> i did what you wrote on SPM5. i think it works but my problem is
> understanding the vector and the norm of the vector.
> i mean, when i run such commands, i get answers which i cann't
> interperate them.
>
> Example: the question is this:
> i have a mri and want to normalize it to the template. the image has
> resolution of 1mm in 3 directions.
> so after normalization and creation of 'y_image.nii', i want to find the
> length of deformation vector which used to transform (x,y,z) from
> original image to the (X,Y,Z)on the normalized image.
> then i want to check in which regions i have large deformations? and
> what is the max length of deformation.
>
> when i use the below commands:
>
> warp = nifti('y_image.nii');
> norm(squeeze(warp.dat(10,20,30,1,1:3)))
> i get for example:
> 77.8921
> -100.4536
> -14.1708
>
> and the norm is:
> 127.902
>
> is this means that the deformation vector is 127mm? or i am wrong? or
> maybe i should remove the affine parameters at first?
>
> i will be gald if you can help me.
> kind regards
> kamran
>
>
> */Ged Ridgway <[log in to unmask]>/* wrote:
>
> Hi Kamran,
>
> With SPM5 you can load the deformation fields in using John's nifti
> library (rather than the spm_vol stuff, which I don't think is happy
> with their 5D representation -- 4th dim is still time, 5th dim indexes
> vector component from 1 to 3).
>
> So for example:
> warp = nifti('y_image.nii');
> norm(squeeze(warp.dat(10,20,30,1,1:3)))
> will give you the length (norm) of the vector at image location
> (10,20,30). The "squeeze" command just makes the 1-by-1-by-1-by-1-by-3
> tensor a 1-by-3 vector suitable for norm. Hope that's clearer than it
> looks ;-)
>
> For the mean/max... well, depends on what you have in mind, e.g. max
> *length* within one deformation field? Or voxel-wise max length over
> several fields? In any case, once you've got the data into Matlab as a
> multidimensional array you should be able to do pretty much whatever
> you want with it.
>
> If you're using SPM2, ask me/the list again, as I have to rush off
> now, and don't have time to check, sorry!
>
> Best,
> Ged.
>
>
> kamran kazemi wrote:
> > Dear SPMers
> > i have problem on calculation of deformation vector.
> > i want to calculate the mean and max of deformation vector after
> > normalization.
> > i will be glad if some one help me.
> > kind regards
> > kamran
> >
> >
> ------------------------------------------------------------------------
> > Do you Yahoo!?
> > Get on board. You're invited
> >
> > to try the new Yahoo! Mail.
>
>
> ------------------------------------------------------------------------
> Do you Yahoo!?
> Everyone is raving about the all-new Yahoo! Mail.
> <http://us.rd.yahoo.com/evt=42297/*http://advision.webevents.yahoo.com/mailbeta>
>
|