[Neuroimaging] How to apply an affine transform estimated from ITK?

Matthew Brett matthew.brett at gmail.com
Wed Jul 22 16:50:03 CEST 2015


On Wed, Jul 22, 2015 at 2:55 PM, François Rousseau
<francois.rousseau at telecom-bretagne.eu> wrote:
>> Not transparently, no.  I'm afraid you have do something like:
>> RAS2LPS = np.diag([-1, -1, 1, 1])
>> vox2itk_world = LPS2RAS.dot(img.affine)
>> lpi_world_pts = nib.affines.apply_affine(vox2itk_world, vox_pts)
>> Is that what you mean?
> Yes, exactly. This is what I’m doing right now. Thank you Matthew.
> However, I still do have another question.
> In ITK, the index coordinates (say for instance (0,0,0) ) correspond to the center of a voxel.
> It seems that in nibabel, it correspond to the corner of a voxel. Am I right? (I didn’t find that in the documentation)
> Such difference can introduce a shift of half a voxel in registration / interpolation / reconstruction algorithms.

You're right to worry about this, of course.  The NIfTI standard says that:

"The (x,y,z) coordinates refer to the CENTER of a voxel"


That is also the convention that nibabel uses, in general, but it's
true that isn't documented properly:




More information about the Neuroimaging mailing list