diff --git a/fsl/data/image.py b/fsl/data/image.py index 8ca0d1ed264d603bfad040763481bcb820060909..fbebad5330e82b39fe01e6e93f875bda4cf0f867 100644 --- a/fsl/data/image.py +++ b/fsl/data/image.py @@ -150,9 +150,25 @@ class Nifti1(object): shape, pixdim = self.__determineShape(self.nibImage) - self.shape = shape - self.pixdim = pixdim - self.voxToWorldMat = np.array(self.nibImage.get_affine()) + self.shape = shape + self.pixdim = pixdim + + # We have to treat FSL/FNIRT images + # specially, as FNIRT clobbers the + # sform section of the NIFTI header + # to store other data. The hard coded + # numbers here are the intent codes + # output by FNIRT. + intent = self.nibImage.get_header().get('intent_code', -1) + if intent in (2006, 2007, 2008, 2009): + log.debug('FNIRT output image detected - using qform matrix') + self.voxToWorldMat = self.nibImage.get_qform() + + # Otherwise we let nibabel decide + # which transform to use. + else: + self.voxToWorldMat = np.array(self.nibImage.get_affine()) + self.worldToVoxMat = transform.invert(self.voxToWorldMat) if loadData: