--- a +++ b/Preprocessing Medical Data Pipeline/writeout_dataset.py @@ -0,0 +1,104 @@ +# Exporting Training Scan and Mask Data +import os +import numpy as np +from PIL import Image +import matplotlib.pyplot as plt +import re +import numpy as np +import nibabel as nib +import matplotlib.pyplot as plt +from tqdm import tqdm + +def WriteOutTextFile(data_array, save_dir, starting_slice): + num_files = data_array.shape[0] + + # Create the save directory if it doesn't exist + if not os.path.exists(save_dir): + os.makedirs(save_dir) + + for i in range(num_files): + file_name = f"data_{i + starting_slice}.txt" + file_path = save_dir + '/' + file_name + np.savetxt(file_path, data_array[i], delimiter=',', fmt='%.4f') + print(f"Saved {file_path}") + + +def WriteOutImagePNGFiles(data_array, save_dir, starting_slice): + num_files = data_array.shape[0] + + # Create the save directory if it doesn't exist + if not os.path.exists(save_dir): + os.makedirs(save_dir) + + for i in range(num_files): + file_name = f"image_{i + starting_slice}.png" + file_path = save_dir + '/' + file_name + + # Scale the pixel values to the range [0, 255] if necessary + image_data = ((data_array[i] * 255).astype(np.uint8)).squeeze() + # Create an Image object and save as PNG + image = Image.fromarray(image_data) + + if True: + image.save(file_path) + + print(f"Saved {file_path}") + + +def ReadInDatasets(folder_path): + files = os.listdir(folder_path) + num_files = len(files) + result_array = np.empty((num_files, 512, 512)) + + for i, file in enumerate(files): + file_path = os.path.join(folder_path, file) + with open(file_path, 'r') as f: + # Read the contents of the text file + content = f.read() + + # Convert the content into a 2D NumPy array of floats + array_2d = np.array([list(map(float, line.split(','))) for line in content.splitlines()]) + + # Store the 2D array in the result array + result_array[i] = array_2d + + return result_array + +def ReadInDatasetNPY(folder_path): + # Get a list of all files in the folder + file_list = os.listdir(folder_path) + + # Filter out only the .npy files + npy_files = [file for file in file_list if file.endswith('.npy')] + + # Sort the .npy files based on the numeric order in their filenames + npy_files.sort(key=lambda x: int(x.split('_')[0])) + + # Initialize an empty list to store arrays from each .npy file + arrays_list = [] + + # Read in each .npy file and append it to the list + for file_name in npy_files: + file_path = os.path.join(folder_path, file_name) + array = np.load(file_path) + arrays_list.append(array) + + # Concatenate the arrays into a single array + concatenated_array = np.concatenate(arrays_list, axis=0) + + return concatenated_array + +def Export2CompressedNifiti(imgs_train, scans_path, colab_fname, imgs_mask_train, orientation): + nii_img_train = nib.Nifti1Image(imgs_train, affine=np.eye(4)) + scan_idx_fnamecolab = int((colab_fname[0].split('_'))[1]) + scan_idx_fnamecolab = '{:03d}'.format(scan_idx_fnamecolab) + output_file_path = ('{}/nnUNet Data/unprocessed_scans/msk_{}.nii.gz').format(scans_path, scan_idx_fnamecolab) + nib.save(nii_img_train, output_file_path) + + nii_img_mask = nib.Nifti1Image(imgs_mask_train, affine=np.eye(4)) + output_file_path = ('{}/nnUNet Data/masks/{}/{}_{}.nii.gz').format(scans_path, ((colab_fname[0]).split('_'))[0],colab_fname[0], orientation) + nib.save(nii_img_mask, output_file_path) + + print("Conversion to NIfTI complete with shape: ", imgs_mask_train.shape) + print('\n') + print('Successfully Exported Preprocessed Data!')