大家好啊,我是morning777,今天给大家带来些想看的东西啊。
最近在做有关医疗影像分割的项目,原本使用了3dunet,在BTCV数据集上做实验,但是之后发现很多的官方示例都是在2维影像上使用的,所以研究了一下怎么从3d中提取2d图像。
首先还是先和大家介绍一下我是如何运行3d影像分割的,主要使用了tutorials/3d_segmentation/unetr_btcv_segmentation_3d.ipynb at main · Project-MONAI/tutorials (github.com)https://github.com/Project-MONAI/tutorials/blob/main/3d_segmentation/unetr_btcv_segmentation_3d.ipynb
该项目便是monai给的例程,完全是基于BTCV的raw data来做的。https://github.com/Project-MONAI/tutorials/blob/main/modules/2d_slices_from_3d_training.ipynb
上述连接则是MONAI给出的从3d图像得到2d图像的例程,上述两种方法全都是使用了monai的API,但是我将上述两个例程结合起来的时候容易出问题,大伙其实也可以试试。
另外一种方法主要是下面的例程:
CASCADE/utils/preprocess_synapse_data.py at main · SLDGroup/CASCADE (github.com)https://github.com/SLDGroup/CASCADE/blob/main/utils/preprocess_synapse_data.py采取的不一样的思路,将3d图像读取后,直接按顺序将每个切片保存。
关键代码:
for s_idx in range(ct_array.shape[0]):
ct_array_s = ct_array[s_idx, :, :]
seg_array_s = seg_array[s_idx, :, :]
slice_no = "{:03d}".format(s_idx)
new_ct_name = ct_number.replace('img', 'case') + '_slice' + slice_no
np.savez(os.path.join(save_path, new_ct_name), image=ct_array_s, label=seg_array_s)
s_idx就代表每个切片的编号,将每个切片保存就好啦!