如何将3D nii多类遮罩图像文件转换为2D.png图像

2024-04-16 14:31:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含150个4D.nii图像的数据集。只有0和9个时间帧有分割,所以我选择了这些部分,这样新的数据集包含300个3D图像,每个图像在z轴上有13个图像。输入图像遮罩是一个3D图像:


input_image_mask = nib.load('masks/mask0A0S9V9_sa_gt.nii' + '.gz')  
for i in range(input_mask.shape[2]):  
    input_slice_mask = np.asarray(input_mask.get_data()*255) [:,:,i].astype(np.float32)  
    if len(input_slice_mask.shape)==2:  
        input_slice_mask = np.expand_dims(input_slice_mask, axis=-1)  
        path_mask = os.path.join('Desktop/Ilkay/M/masks/2d/' + "slicem" + str(i) + ".png")  
        cv2.imwrite(path_mask, input_slice_mask)  
    else:
        # if there are multiple channel, move axis to have the channel dimension as first dimension
        input_slice_mask = np.moveaxis(input_slice_mask, 2, 0)


虽然此代码运行时没有问题,但输出图像是黑白的。而它应该是一个多类掩码。如果有人能帮我解决这个问题,我将不胜感激


Tags: 数据path图像inputifnp时间channel
1条回答
网友
1楼 · 发布于 2024-04-16 14:31:00

我可以解决我的问题,这就是解决办法。我希望它能帮助别人

all_img = os.listdir(path)

new_size = 256
masks = []
images = []
time = [0,9,10,11,12,23,30]
for name in all_img:
    path_ = path + name
#     print('path_number', path_)
    train_ids = next(os.walk(path_))[2]
    img_tr = nib.load(path_ + '/' + train_ids[0]).get_data()
    mask_tr = nib.load(path_ + '/' + train_ids[1]).get_data()
    img_arr = np.asarray(img_tr)
    mask_arr = np.asarray(mask_tr)
    for t in time: 
        if t in range((mask_tr.shape)[3]-1):
            
            init_mask = mask_tr[:,:,:,t].astype(np.float32)
            init_img = img_tr[:,:,:,t].astype(np.float32)

        #     print(init_mask.shape)
            for z in range((img_arr.shape)[2]):
                init2_mask = init_mask[:,:,z]
                _mask = st.resize(init2_mask, (new_size, new_size))
                masks.append(_mask)
                init2_img = init_img[:,:,z]
                _img = st.resize(init2_img, (new_size, new_size))
                images.append(_img)

masks = np.asarray(masks)
images = np.asarray(images)

np.save('mmn_masks', masks) # save the file 
np.save('mmn_images', images)

我决定将它们保存为NumPy数组,而不是转换为.png图像

相关问题 更多 >