Skip to content

Commit a75a805

Browse files
committed
BF - load does not alter qform or pixdims in nifti
1 parent 0ce1ec5 commit a75a805

File tree

2 files changed

+35
-3
lines changed

2 files changed

+35
-3
lines changed

nibabel/analyze.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1297,15 +1297,17 @@ def from_file_map(klass, file_map):
12971297
header = klass.header_class.from_fileobj(hdrf)
12981298
if hdr_fh.fileobj is None: # was filename
12991299
hdrf.close()
1300-
affine = header.get_best_affine()
13011300
hdr_copy = header.copy()
13021301
imgf = img_fh.fileobj
13031302
if imgf is None:
13041303
imgf = img_fh.filename
13051304
data = klass.ImageArrayProxy(imgf, hdr_copy)
1306-
img = klass(data, affine, header, file_map=file_map)
1305+
# Initialize without affine to allow header to pass through unmodified
1306+
img = klass(data, None, header, file_map=file_map)
1307+
# set affine from header though
1308+
img._affine = header.get_best_affine()
13071309
img._load_cache = {'header': hdr_copy,
1308-
'affine': affine.copy(),
1310+
'affine': img._affine.copy(),
13091311
'file_map': copy_file_map(file_map)}
13101312
return img
13111313

nibabel/tests/test_nifti1.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -585,3 +585,33 @@ def test_load():
585585
assert_array_equal(arr, nifti1.load('test.img').get_data())
586586
nifti1.save(simg, 'test.hdr')
587587
assert_array_equal(arr, nifti1.load('test.hdr').get_data())
588+
589+
590+
def test_load_pixdims():
591+
# Make sure load preserves separate qform, pixdims, sform
592+
arr = np.arange(24).reshape((2,3,4))
593+
qaff = np.diag([2, 3, 4, 1])
594+
saff = np.diag([5, 6, 7, 1])
595+
hdr = Nifti1Header()
596+
hdr.set_qform(qaff)
597+
assert_array_equal(hdr.get_qform(), qaff)
598+
hdr.set_sform(saff)
599+
assert_array_equal(hdr.get_sform(), saff)
600+
simg = Nifti1Image(arr, None, hdr)
601+
img_hdr = simg.get_header()
602+
# Check qform, sform, pixdims are the same
603+
assert_array_equal(img_hdr.get_qform(), qaff)
604+
assert_array_equal(img_hdr.get_sform(), saff)
605+
assert_array_equal(img_hdr.get_zooms(), [2,3,4])
606+
# Save to stringio
607+
fm = Nifti1Image.make_file_map()
608+
fm['image'].fileobj = StringIO()
609+
simg.to_file_map(fm)
610+
# Load again
611+
re_simg = Nifti1Image.from_file_map(fm)
612+
assert_array_equal(re_simg.get_data(), arr)
613+
# Check qform, sform, pixdims are the same
614+
rimg_hdr = re_simg.get_header()
615+
assert_array_equal(rimg_hdr.get_qform(), qaff)
616+
assert_array_equal(rimg_hdr.get_sform(), saff)
617+
assert_array_equal(rimg_hdr.get_zooms(), [2,3,4])

0 commit comments

Comments
 (0)