Skip to content

Commit 8e7c29c

Browse files
committed
Add image_like function for generic SpatialImage
1 parent 7fe2ebc commit 8e7c29c

File tree

3 files changed

+20
-1
lines changed

3 files changed

+20
-1
lines changed

nibabel/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
from .freesurfer import MGHImage
5959
from .funcs import (squeeze_image, concat_images, four_to_three,
6060
as_closest_canonical)
61+
from .spatialimages import image_like
6162
from .orientations import (io_orientation, orientation_affine,
6263
flip_axis, OrientationError,
6364
apply_orientation, aff2axcodes)

nibabel/spatialimages.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -872,3 +872,11 @@ def __getitem__(self):
872872
raise TypeError("Cannot slice image objects; consider slicing image "
873873
"array data with `img.dataobj[slice]` or "
874874
"`img.get_data()[slice]`")
875+
876+
877+
def image_like(img, data):
878+
''' Create new SpatialImage with metadata of `img`, and data
879+
contained in `data`.
880+
'''
881+
return img.__class__(data, img.affine, img.header.copy(),
882+
extra=img.extra.copy())

nibabel/tests/test_spatialimages.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import numpy as np
1414

1515
from ..spatialimages import (Header, SpatialImage, HeaderDataError,
16-
ImageDataError)
16+
ImageDataError, image_like)
1717

1818
from unittest import TestCase
1919

@@ -382,3 +382,13 @@ def test_load_mmap(self):
382382
# Check invalid values raise error
383383
assert_raises(ValueError, func, param1, mmap='rw')
384384
assert_raises(ValueError, func, param1, mmap='r+')
385+
386+
387+
def test_image_like():
388+
zeros = SpatialImage(np.zeros((2, 3, 4)), np.eye(4))
389+
ones = image_like(zeros, np.ones((2, 3, 4)))
390+
391+
assert np.all(ones.dataobj != zeros.dataobj)
392+
assert np.all(ones.affine == zeros.affine)
393+
assert ones.header == zeros.header
394+
assert ones.extra == zeros.extra

0 commit comments

Comments
 (0)