Python 将unet应答转换回.nii文件

Python 将unet应答转换回.nii文件,python,medical-imaging,Python,Medical Imaging,我是一名新的深度学习者,目前正在从事图像分割网络的工作。我设法训练了网络,但问题是如何将网络响应转换为nii格式。我将CT图像中的训练样本切成512X512个切片,然后切成128X128个补丁。因此,我将补丁传输到网络的输入端,并在输出端获得128x128的掩码。我设法把面具组合成一个小数组。但是,当从阵列转移到nii并试图在原始CT上施加生成的掩模时,我的刻度不匹配。请告诉我有什么问题?我真的很感谢你的帮助 例如,为了简单起见,我从训练样本中选取了一个面具 input_path = Patc

我是一名新的深度学习者,目前正在从事图像分割网络的工作。我设法训练了网络,但问题是如何将网络响应转换为nii格式。我将CT图像中的训练样本切成512X512个切片,然后切成128X128个补丁。因此,我将补丁传输到网络的输入端,并在输出端获得128x128的掩码。我设法把面具组合成一个小数组。但是,当从阵列转移到nii并试图在原始CT上施加生成的掩模时,我的刻度不匹配。请告诉我有什么问题?我真的很感谢你的帮助

例如,为了简单起见,我从训练样本中选取了一个面具


input_path = PatchPathOutput
ls = os.listdir(input_path)#dir with patches(128) of inital mask
slices = []

for i in range(0, len(ls), 16):
    line1 = np.array(Image.open(input_path + '/'+ ls[i]))
    #here I get the first slice line from patches
    for j in range(1, 4):
        a = np.array(Image.open(input_path + '/'+ ls[i+j]))
        line1 = np.concatenate((line1, a), axis = 1)
    
    line2 = np.array(Image.open(input_path + '/'+ ls[i + 4]))
    for j in range(5, 8):
        a = np.array(Image.open(input_path + '/'+ ls[i+j]))
        line2 = np.concatenate((line2, a), axis = 1)

    line3 = np.array(Image.open(input_path + '/'+ ls[i + 8]))
    for j in range(9, 12):
        a = np.array(Image.open(input_path + '/'+ ls[i+j]))
        line3 = np.concatenate((line3, a), axis = 1)
        
    line4 = np.array(Image.open(input_path + '/'+ ls[i + 12]))
    for j in range(13, 16):
        a = np.array(Image.open(input_path + '/'+ ls[i+j]))
        line4 = np.concatenate((line4, a), axis = 1)
    
    #all lines to slice (512 x 512)
    slice_ = np.concatenate((line1, line2), axis = 0)
    slice_ = np.concatenate((slice_, line3), axis = 0)
    slice_ = np.concatenate((slice_, line4), axis = 0)
    
    slices.append(slice_)

    slices_ = np.asarray(slices)#shape (137, 512, 512)
    slices_ = np.swapaxes(slices_,0,2)#shape (512, 512, 137)

    import nibabel as nib

    new_image = nib.Nifti1Image(slices_, affine=np.eye(4))
    nib.save(new_image, 'new_image.nii')



我意识到了问题所在,在保存过程中,需要使用原始nii图像的仿射变换

ct_scan = nib.load(CtPathInput + '/019.nii')

import nibabel as nib

new_image = nib.Nifti1Image(slices_, ct_scan.affine)
nib.save(new_image, 'new_image.nii')