我刚来这地方。目前正在学习 Python 上的医学成像数据,想知道是否可以识别 NIFti 图像的方向是否正确以及如何进行转换。我在网上查找了一些算法,通过仿射变换将成像数据(主要以 JPG 格式)“旋转”一定角度,但没有关于如何在 nifti 图像上执行此操作并通过 nibabel 将其保存为新 nifti 图像的文档.
问问题
1359 次
1 回答
2
对于您的第一个问题,您应该检查 NIfTI 图像的方向,然后将其旋转到您想要的方向。为了检查方向,我们使用nibabel
aff2axcodes https://nipy.org/nibabel/reference/nibabel.orientations.html#nibabel.orientations.aff2axcodes
对于旋转,我们将使用nibabel
.orientations.flip_axis https://nipy.org/nibabel/reference/nibabel.orientations.html#nibabel.orientations.flip_axis
def check_orientation(ct_image, ct_arr):
"""
Check the NIfTI orientation, and flip to 'RPS' if needed.
:param ct_image: NIfTI file
:param ct_arr: array file
:return: array after flipping
"""
x, y, z = nib.aff2axcodes(ct_image.affine)
if x != 'R':
ct_arr = nib.orientations.flip_axis(ct_arr, axis=0)
if y != 'P':
ct_arr = nib.orientations.flip_axis(ct_arr, axis=1)
if z != 'S':
ct_arr = nib.orientations.flip_axis(ct_arr, axis=2)
return ct_arr
请注意,在您的情况下,您只需要翻转 z 轴,但请尝试使用上面的功能并更改您的情况以检查您的数据。
最后一件事是将新的 NIfTI 扫描(NumPy 数组)保存为nii
图像。为了做到这一点,使用 Nifti1Image 创建 nii 对象,然后nibabel
. save 将其保存到文件中。
new_nifti = nib.Nifti1Image(<ct_arr>.astype(np.float), nii_original_scan.affine)
nib.save(new_nifti, f'< path to new scan >.nii.gz')
这ct_arr
是你的 numpy 数组(确保是浮点类型)。第二个参数是加载后的原始 NIfTI 扫描。在同一个函数中,确保在文件名中添加后缀.nii
或.nii.gz
希望很清楚:)
于 2021-02-25T16:16:26.303 回答