0

我刚来这地方。目前正在学习 Python 上的医学成像数据,想知道是否可以识别 NIFti 图像的方向是否正确以及如何进行转换。我在网上查找了一些算法,通过仿射变换将成像数据(主要以 JPG 格式)“旋转”一定角度,但没有关于如何在 nifti 图像上执行此操作并通过 nibabel 将其保存为新 nifti 图像的文档.

为了说明我的意思。我想学习如何将此图像 1更改为此图像

4

1 回答 1

2

对于您的第一个问题,您应该检查 NIfTI 图像的方向,然后将其旋转到您想要的方向。为了检查方向,我们使用nibabelaff2axcodes 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 回答