Spaces:
Runtime error
Runtime error
| # ------------------------------------------------------------ # | |
| # | |
| # file : utils/io/read.py | |
| # author : CM | |
| # Function to read dataset | |
| # | |
| # ------------------------------------------------------------ # | |
| import os | |
| import sys | |
| import nibabel as nib | |
| import numpy as np | |
| # read nii file and load it into a numpy 3d array | |
| def niiToNp(filename): | |
| data = nib.load(filename).get_data().astype('float16') | |
| return data/data.max() | |
| # read a dataset and load it into a numpy 4d array | |
| def readDataset(folder, size, size_x, size_y, size_z): | |
| dataset = np.empty((size, size_x, size_y, size_z), dtype='float16') | |
| i = 0 | |
| files = os.listdir(folder) | |
| files.sort() | |
| for filename in files: | |
| if(i>=size): | |
| break | |
| print(filename) | |
| dataset[i, :, :, :] = niiToNp(os.path.join(folder, filename)) | |
| i = i+1 | |
| return dataset | |
| # return dataset affine | |
| def getAffine_subdir(folder): | |
| subdir = os.listdir(folder) | |
| subdir.sort() | |
| files = os.listdir(folder+subdir[0]) | |
| path = folder + subdir[0] | |
| image = nib.load(os.path.join(path, files[0])) | |
| return image.affine | |
| def getAffine(folder): | |
| files = os.listdir(folder) | |
| files.sort() | |
| image = nib.load(os.path.join(folder, files[0])) | |
| return image.affine | |
| # reshape the dataset to match keras input shape (add channel dimension) | |
| def reshapeDataset(d): | |
| return d.reshape(d.shape[0], d.shape[1], d.shape[2], d.shape[3], 1) | |
| # read a dataset and load it into a numpy 3d array as raw data (no normalisation) | |
| def readRawDataset(folder, size, size_x, size_y, size_z, dtype): | |
| files = os.listdir(folder) | |
| files.sort() | |
| if(len(files) < size): | |
| sys.exit(2) | |
| count = 0 | |
| # astype depend on your dataset type. | |
| dataset = np.empty((size, size_x, size_y, size_z)).astype(dtype) | |
| for filename in files: | |
| if(count>=size): | |
| break | |
| dataset[count, :, :, :] = nib.load(os.path.join(folder, filename)).get_data() | |
| count += 1 | |
| print(count, '/', size, os.path.join(folder, filename)) | |
| return dataset | |
| def readTrainValid(config): | |
| print("Loading training dataset") | |
| train_gd_dataset = readRawDataset(config["dataset_train_gd_path"], | |
| config["dataset_train_size"], | |
| config["image_size_x"], | |
| config["image_size_y"], | |
| config["image_size_z"], | |
| 'uint16') | |
| print("Training ground truth dataset shape", train_gd_dataset.shape) | |
| print("Training ground truth dataset dtype", train_gd_dataset.dtype) | |
| train_in_dataset = readRawDataset(config["dataset_train_mra_path"], | |
| config["dataset_train_size"], | |
| config["image_size_x"], | |
| config["image_size_y"], | |
| config["image_size_z"], | |
| 'uint16') | |
| print("Training input image dataset shape", train_in_dataset.shape) | |
| print("Training input image dataset dtype", train_in_dataset.dtype) | |
| print("Loading validation dataset") | |
| valid_gd_dataset = readRawDataset(config["dataset_valid_gd_path"], | |
| config["dataset_valid_size"], | |
| config["image_size_x"], | |
| config["image_size_y"], | |
| config["image_size_z"], | |
| 'uint16') | |
| print("Validation ground truth dataset shape", valid_gd_dataset.shape) | |
| print("Validation ground truth dataset dtype", valid_gd_dataset.dtype) | |
| valid_in_dataset = readRawDataset(config["dataset_valid_mra_path"], | |
| config["dataset_valid_size"], | |
| config["image_size_x"], | |
| config["image_size_y"], | |
| config["image_size_z"], | |
| 'uint16') | |
| print("Validation input image dataset shape", valid_in_dataset.shape) | |
| print("Validation input image dataset dtype", valid_in_dataset.dtype) | |
| return train_gd_dataset, train_in_dataset, valid_gd_dataset, valid_in_dataset | |
| # read a dataset and load it into a numpy 3d without any preprocessing | |
| def getDataset(folder, size, type=None): | |
| files = os.listdir(folder) | |
| files.sort() | |
| if(len(files) < size): | |
| sys.exit(0x2001) | |
| image = nib.load(os.path.join(folder, files[0])) | |
| if type==None: | |
| dtype = image.get_data_dtype() | |
| else: | |
| dtype = type | |
| dataset = np.empty((size, image.shape[0], image.shape[1], image.shape[2])).astype(dtype) | |
| del image | |
| count = 0 | |
| for filename in files: | |
| dataset[count, :, :, :] = nib.load(os.path.join(folder, filename)).get_data() | |
| count += 1 | |
| if(count>=size): | |
| break | |
| return dataset | |
| # read a dataset and load it into a numpy 3d without any preprocessing with "start" index and number of files | |
| def readDatasetPart(folder, start, size, type=None): | |
| files = os.listdir(folder) | |
| files.sort() | |
| if(len(files) < start + size): | |
| sys.exit("readDatasetPart : len(files) < start + size") | |
| image = nib.load(os.path.join(folder, files[0])) | |
| if type==None: | |
| dtype = image.get_data_dtype() | |
| else: | |
| dtype = type | |
| dataset = np.empty(((size), image.shape[0], image.shape[1], image.shape[2])).astype(dtype) | |
| del image | |
| count = 0 | |
| for i in range(start, start + size): | |
| dataset[count, :, :, :] = nib.load(os.path.join(folder, files[i])).get_data() | |
| count += 1 | |
| return dataset | |