![](/img/trans.png)
[英]how to slice 3d Nifti(.nii) image to 2d image with particular plane?
[英]how to convert 3D nii multi-class mask image file into 2D .png images
我有一個包含 150 個 4D.nii 圖像的數據集。 只有第 0 幀和第 9 幀有分割,所以我只選擇了這些部分,以便新數據集包含 300 張 3D 圖像,每張圖像在 z 軸上有 13 張圖像。 input_image_mask 是 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)
盡管此代碼運行沒有問題,但 output 圖像是黑白的。 而它應該是一個多類掩碼。 如果有人可以幫助我解決這個問題,我將不勝感激。
我可以解決我的問題,這就是解決方案。 我希望它會幫助別人。
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 圖像。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.