| import SimpleITK |
| import numpy as np |
| from batchgenerators.utilities.file_and_folder_operations import * |
| import shutil |
|
|
| import SimpleITK as sitk |
| from nnunet.paths import nnUNet_raw_data |
| from nnunet.dataset_conversion.utils import generate_dataset_json |
| from nnunet.utilities.sitk_stuff import copy_geometry |
|
|
|
|
| def convert_labels_to_nnunet(source_nifti: str, target_nifti: str): |
| img = sitk.ReadImage(source_nifti) |
| img_npy = sitk.GetArrayFromImage(img) |
| nnunet_seg = np.zeros(img_npy.shape, dtype=np.uint8) |
| |
| nnunet_seg[img_npy == 500] = 1 |
| nnunet_seg[img_npy == 600] = 2 |
| nnunet_seg[img_npy == 200] = 3 |
| nnunet_seg[img_npy == 1220] = 4 |
| nnunet_seg[img_npy == 2221] = 5 |
| nnunet_seg_itk = sitk.GetImageFromArray(nnunet_seg) |
| nnunet_seg_itk = copy_geometry(nnunet_seg_itk, img) |
| sitk.WriteImage(nnunet_seg_itk, target_nifti) |
|
|
|
|
| def convert_labels_back_to_myops(source_nifti: str, target_nifti: str): |
| nnunet_itk = sitk.ReadImage(source_nifti) |
| nnunet_npy = sitk.GetArrayFromImage(nnunet_itk) |
| myops_seg = np.zeros(nnunet_npy.shape, dtype=np.uint8) |
| |
| myops_seg[nnunet_npy == 1] = 500 |
| myops_seg[nnunet_npy == 2] = 600 |
| myops_seg[nnunet_npy == 3] = 200 |
| myops_seg[nnunet_npy == 4] = 1220 |
| myops_seg[nnunet_npy == 5] = 2221 |
| myops_seg_itk = sitk.GetImageFromArray(myops_seg) |
| myops_seg_itk = copy_geometry(myops_seg_itk, nnunet_itk) |
| sitk.WriteImage(myops_seg_itk, target_nifti) |
|
|
|
|
| if __name__ == '__main__': |
| |
| |
| base = '/home/fabian/Downloads/MyoPS 2020 Dataset' |
|
|
| |
| |
| task_id = 159 |
| task_name = "MyoPS2020" |
|
|
| foldername = "Task%03.0d_%s" % (task_id, task_name) |
|
|
| |
| out_base = join(nnUNet_raw_data, foldername) |
| imagestr = join(out_base, "imagesTr") |
| imagests = join(out_base, "imagesTs") |
| labelstr = join(out_base, "labelsTr") |
| maybe_mkdir_p(imagestr) |
| maybe_mkdir_p(imagests) |
| maybe_mkdir_p(labelstr) |
|
|
| imagestr_source = join(base, 'train25') |
| imagests_source = join(base, 'test20') |
| labelstr_source = join(base, 'train25_myops_gd') |
|
|
| |
| nii_files = nifti_files(imagestr_source, join=False) |
| |
| identifiers = np.unique([i[:-len('_C0.nii.gz')] for i in nii_files]) |
| for i in identifiers: |
| shutil.copy(join(imagestr_source, i + "_C0.nii.gz"), join(imagestr, i + '_0000.nii.gz')) |
| shutil.copy(join(imagestr_source, i + "_DE.nii.gz"), join(imagestr, i + '_0001.nii.gz')) |
| shutil.copy(join(imagestr_source, i + "_T2.nii.gz"), join(imagestr, i + '_0002.nii.gz')) |
| convert_labels_to_nnunet(join(labelstr_source, i + '_gd.nii.gz'), join(labelstr, i + '.nii.gz')) |
|
|
| |
| nii_files = nifti_files(imagests_source, join=False) |
| |
| identifiers = np.unique([i[:-len('_C0.nii.gz')] for i in nii_files]) |
| for i in identifiers: |
| shutil.copy(join(imagests_source, i + "_C0.nii.gz"), join(imagests, i + '_0000.nii.gz')) |
| shutil.copy(join(imagests_source, i + "_DE.nii.gz"), join(imagests, i + '_0001.nii.gz')) |
| shutil.copy(join(imagests_source, i + "_T2.nii.gz"), join(imagests, i + '_0002.nii.gz')) |
|
|
| generate_dataset_json(join(out_base, 'dataset.json'), |
| imagestr, |
| None, |
| ('C0', 'DE', 'T2'), |
| { |
| 0: 'background', |
| 1: "left ventricular (LV) blood pool", |
| 2: "right ventricular blood pool", |
| 3: "LV normal myocardium", |
| 4: "LV myocardial edema", |
| 5: "LV myocardial scars", |
| }, |
| task_name, |
| license='see http://www.sdspeople.fudan.edu.cn/zhuangxiahai/0/myops20/index.html', |
| dataset_description='see http://www.sdspeople.fudan.edu.cn/zhuangxiahai/0/myops20/index.html', |
| dataset_reference='http://www.sdspeople.fudan.edu.cn/zhuangxiahai/0/myops20/index.html', |
| dataset_release='0') |
|
|
| |
| |
| |