diff --git a/fsl/data/image.py b/fsl/data/image.py index db4c04ea60cd048622dd72461391f23e5694714c..0fc1f6ff03bf0fd8c9f14cea9426949d2ad318c7 100644 --- a/fsl/data/image.py +++ b/fsl/data/image.py @@ -144,7 +144,7 @@ class Nifti(notifier.Notifier): if not isinstance(header, nib.analyze.AnalyzeHeader): raise ValueError('Unrecognised header: {}'.format(header)) - header = header.copy() + header = header origShape, shape, pixdim = self.__determineShape(header) if len(shape) < 3 or len(shape) > 4: @@ -765,6 +765,23 @@ class Image(Nifti): coords = [0] * len(self.__nibImage.shape) return self.__nibImage.dataobj[tuple(coords)].dtype + + @Nifti.voxToWorldMat.setter + def voxToWorldMat(self, xform): + """Overrides the :meth:`Nifti.voxToWorldMat` property setter. + In ``nibabel``, the header and image affines can easily get + out of sync when they are modified. The ``Nifti`` implementation + updates the header, and this implementation makes sure the + image is also updated. + """ + + Nifti.voxToWorldMat.fset(self, xform) + + xform = self.voxToWorldMat + + self.__nibImage.set_sform(xform) + self.__nibImage.set_qform(xform) + def __transformChanged(self, *args, **kwargs): """Called when the ``voxToWorldMat`` of this :class:`Nifti` instance @@ -871,6 +888,7 @@ class Image(Nifti): nib.save(self.__nibImage, filename) self.__fileobj.close() self.__nibImage, self.__fileobj = loadIndexedImageFile(filename) + self.header = self.__nibImage.get_header() self.__dataSource = filename self.__saveState = True