|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from multiprocessing.pool import Pool |
|
|
|
import numpy as np |
|
from collections import OrderedDict |
|
|
|
from batchgenerators.utilities.file_and_folder_operations import * |
|
from nnunet.dataset_conversion.Task043_BraTS_2019 import copy_BraTS_segmentation_and_convert_labels |
|
from nnunet.paths import nnUNet_raw_data |
|
import SimpleITK as sitk |
|
import shutil |
|
|
|
|
|
def convert_labels_back_to_BraTS(seg: np.ndarray): |
|
new_seg = np.zeros_like(seg) |
|
new_seg[seg == 1] = 2 |
|
new_seg[seg == 3] = 4 |
|
new_seg[seg == 2] = 1 |
|
return new_seg |
|
|
|
|
|
def load_convert_save(filename, input_folder, output_folder): |
|
a = sitk.ReadImage(join(input_folder, filename)) |
|
b = sitk.GetArrayFromImage(a) |
|
c = convert_labels_back_to_BraTS(b) |
|
d = sitk.GetImageFromArray(c) |
|
d.CopyInformation(a) |
|
sitk.WriteImage(d, join(output_folder, filename)) |
|
|
|
|
|
def convert_labels_back_to_BraTS_2018_2019_convention(input_folder: str, output_folder: str, num_processes: int = 12): |
|
""" |
|
reads all prediction files (nifti) in the input folder, converts the labels back to BraTS convention and saves the |
|
result in output_folder |
|
:param input_folder: |
|
:param output_folder: |
|
:return: |
|
""" |
|
maybe_mkdir_p(output_folder) |
|
nii = subfiles(input_folder, suffix='.nii.gz', join=False) |
|
p = Pool(num_processes) |
|
p.starmap(load_convert_save, zip(nii, [input_folder] * len(nii), [output_folder] * len(nii))) |
|
p.close() |
|
p.join() |
|
|
|
|
|
if __name__ == "__main__": |
|
""" |
|
REMEMBER TO CONVERT LABELS BACK TO BRATS CONVENTION AFTER PREDICTION! |
|
""" |
|
|
|
task_name = "Task032_BraTS2018" |
|
downloaded_data_dir = "/home/fabian/Downloads/BraTS2018_train_val_test_data/MICCAI_BraTS_2018_Data_Training" |
|
|
|
target_base = join(nnUNet_raw_data, task_name) |
|
target_imagesTr = join(target_base, "imagesTr") |
|
target_imagesVal = join(target_base, "imagesVal") |
|
target_imagesTs = join(target_base, "imagesTs") |
|
target_labelsTr = join(target_base, "labelsTr") |
|
|
|
maybe_mkdir_p(target_imagesTr) |
|
maybe_mkdir_p(target_imagesVal) |
|
maybe_mkdir_p(target_imagesTs) |
|
maybe_mkdir_p(target_labelsTr) |
|
|
|
patient_names = [] |
|
for tpe in ["HGG", "LGG"]: |
|
cur = join(downloaded_data_dir, tpe) |
|
for p in subdirs(cur, join=False): |
|
patdir = join(cur, p) |
|
patient_name = tpe + "__" + p |
|
patient_names.append(patient_name) |
|
t1 = join(patdir, p + "_t1.nii.gz") |
|
t1c = join(patdir, p + "_t1ce.nii.gz") |
|
t2 = join(patdir, p + "_t2.nii.gz") |
|
flair = join(patdir, p + "_flair.nii.gz") |
|
seg = join(patdir, p + "_seg.nii.gz") |
|
|
|
assert all([ |
|
isfile(t1), |
|
isfile(t1c), |
|
isfile(t2), |
|
isfile(flair), |
|
isfile(seg) |
|
]), "%s" % patient_name |
|
|
|
shutil.copy(t1, join(target_imagesTr, patient_name + "_0000.nii.gz")) |
|
shutil.copy(t1c, join(target_imagesTr, patient_name + "_0001.nii.gz")) |
|
shutil.copy(t2, join(target_imagesTr, patient_name + "_0002.nii.gz")) |
|
shutil.copy(flair, join(target_imagesTr, patient_name + "_0003.nii.gz")) |
|
|
|
copy_BraTS_segmentation_and_convert_labels(seg, join(target_labelsTr, patient_name + ".nii.gz")) |
|
|
|
json_dict = OrderedDict() |
|
json_dict['name'] = "BraTS2018" |
|
json_dict['description'] = "nothing" |
|
json_dict['tensorImageSize'] = "4D" |
|
json_dict['reference'] = "see BraTS2018" |
|
json_dict['licence'] = "see BraTS2019 license" |
|
json_dict['release'] = "0.0" |
|
json_dict['modality'] = { |
|
"0": "T1", |
|
"1": "T1ce", |
|
"2": "T2", |
|
"3": "FLAIR" |
|
} |
|
json_dict['labels'] = { |
|
"0": "background", |
|
"1": "edema", |
|
"2": "non-enhancing", |
|
"3": "enhancing", |
|
} |
|
json_dict['numTraining'] = len(patient_names) |
|
json_dict['numTest'] = 0 |
|
json_dict['training'] = [{'image': "./imagesTr/%s.nii.gz" % i, "label": "./labelsTr/%s.nii.gz" % i} for i in |
|
patient_names] |
|
json_dict['test'] = [] |
|
|
|
save_json(json_dict, join(target_base, "dataset.json")) |
|
|
|
del tpe, cur |
|
downloaded_data_dir = "/home/fabian/Downloads/BraTS2018_train_val_test_data/MICCAI_BraTS_2018_Data_Validation" |
|
|
|
for p in subdirs(downloaded_data_dir, join=False): |
|
patdir = join(downloaded_data_dir, p) |
|
patient_name = p |
|
t1 = join(patdir, p + "_t1.nii.gz") |
|
t1c = join(patdir, p + "_t1ce.nii.gz") |
|
t2 = join(patdir, p + "_t2.nii.gz") |
|
flair = join(patdir, p + "_flair.nii.gz") |
|
|
|
assert all([ |
|
isfile(t1), |
|
isfile(t1c), |
|
isfile(t2), |
|
isfile(flair), |
|
]), "%s" % patient_name |
|
|
|
shutil.copy(t1, join(target_imagesVal, patient_name + "_0000.nii.gz")) |
|
shutil.copy(t1c, join(target_imagesVal, patient_name + "_0001.nii.gz")) |
|
shutil.copy(t2, join(target_imagesVal, patient_name + "_0002.nii.gz")) |
|
shutil.copy(flair, join(target_imagesVal, patient_name + "_0003.nii.gz")) |
|
|
|
downloaded_data_dir = "/home/fabian/Downloads/BraTS2018_train_val_test_data/MICCAI_BraTS_2018_Data_Testing_FIsensee" |
|
|
|
for p in subdirs(downloaded_data_dir, join=False): |
|
patdir = join(downloaded_data_dir, p) |
|
patient_name = p |
|
t1 = join(patdir, p + "_t1.nii.gz") |
|
t1c = join(patdir, p + "_t1ce.nii.gz") |
|
t2 = join(patdir, p + "_t2.nii.gz") |
|
flair = join(patdir, p + "_flair.nii.gz") |
|
|
|
assert all([ |
|
isfile(t1), |
|
isfile(t1c), |
|
isfile(t2), |
|
isfile(flair), |
|
]), "%s" % patient_name |
|
|
|
shutil.copy(t1, join(target_imagesTs, patient_name + "_0000.nii.gz")) |
|
shutil.copy(t1c, join(target_imagesTs, patient_name + "_0001.nii.gz")) |
|
shutil.copy(t2, join(target_imagesTs, patient_name + "_0002.nii.gz")) |
|
shutil.copy(flair, join(target_imagesTs, patient_name + "_0003.nii.gz")) |
|
|