def set_new_data(image, new_data, new_dtype=None, remove_nan=True):
"""
From a nibabel image and a numpy array it creates a new image with
the same header of the image and the new_data as its data.
:param image: nibabel image
:param new_data:
:param new_dtype: numpy array
:param remove_nan:
:return: nibabel image
"""
hd = image.header
if remove_nan:
new_data = np.nan_to_num(new_data)
# update data type:
if new_dtype is not None:
new_data = new_data.astype(new_dtype)
image.set_data_dtype(new_dtype)
# if nifty1
if hd['sizeof_hdr'] == 348:
new_image = nib.Nifti1Image(new_data, image.affine, header=hd)
# if nifty2
elif hd['sizeof_hdr'] == 540:
new_image = nib.Nifti2Image(new_data, image.affine, header=hd)
else:
raise IOError('Input image header problem')
return new_image
评论列表
文章目录