diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 4ff49b20c5fd9ccfcf6c5d0605f036e1c0ef01c8..124547fc22a8b59885df6173959d23fc42784bba 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -6,6 +6,13 @@ order. ------------------------- +Added +^^^^^ + + +* New :meth:`.Image.iscomplex` attribute. + + Changed ^^^^^^^ diff --git a/fsl/data/image.py b/fsl/data/image.py index dd423d4b5f8fc5341ea104378e5cf1d58e3aed1f..2e75733899cffac91a691305e19851d3e1bf1fbd 100644 --- a/fsl/data/image.py +++ b/fsl/data/image.py @@ -1195,6 +1195,14 @@ class Image(Nifti): else: return nvals + @property + def iscomplex(self): + """Returns ``True`` if this image has a complex data type, ``False`` + otherwise. + """ + return np.issubdtype(self.dtype, np.complexfloating) + + @Nifti.voxToWorldMat.setter def voxToWorldMat(self, xform): """Overrides the :meth:`Nifti.voxToWorldMat` property setter. diff --git a/tests/test_image.py b/tests/test_image.py index 58d9fc625d5e107385c7280088b1c0c3d595af91..22402c4c2c4b3d5ec3255259f9d606d22d463024 100644 --- a/tests/test_image.py +++ b/tests/test_image.py @@ -299,6 +299,7 @@ def _test_Image_atts(imgtype): path = op.abspath(op.join(testdir, path)) i = fslimage.Image(path) + assert not i.iscomplex assert tuple(i.shape) == tuple(expdims) assert tuple(i.data.shape) == tuple(expdims) assert tuple(i.pixdim) == tuple(exppixdims) @@ -1369,3 +1370,15 @@ def test_identifyAffine(): rubbish = np.random.random((4, 4)) with pytest.raises(ValueError): identify(img, rubbish) + + +def test_complex(): + data = np.random.random((5, 5, 5)) + \ + np.random.random((5, 5, 5)) * 1j + image = fslimage.Image(data) + dmin, dmax = image.dataRange + + assert image.iscomplex + assert image[3, 3, 3] == data[3, 3, 3] + assert dmin == data.min() + assert dmax == data.max()