Spaces:
Running
Running
| import numpy as np | |
| import nibabel | |
| import glob | |
| import platform | |
| import matplotlib.pyplot as plt | |
| directory_split = "\\" if platform.system() == "Windows" else "/" | |
| def calculate_scan(image_path, label_path): | |
| voxel_spacing = nibabel.load(image_path).header.get_zooms() | |
| label_volume = nibabel.load(label_path).get_fdata() | |
| return calculate_volume(label_volume, voxel_spacing) | |
| def calculate_volume(label, voxel_spacing): | |
| voxels = np.count_nonzero(label) | |
| volume = voxels * (voxel_spacing[0]/10) * (voxel_spacing[1]/10) * (voxel_spacing[2]/10) | |
| return volume | |
| def calculate_all(image_directory, label_directory): | |
| volumes = [] | |
| for file in glob.glob(f"{image_directory}{directory_split}*"): | |
| filename = file.split(directory_split)[-1] | |
| volumes.append(calculate_scan(file, f"{label_directory}{directory_split}{filename}")) | |
| return volumes | |
| def save_volumes(volumes, save_file): | |
| with open(save_file, "w+") as file: | |
| for volume in volumes: | |
| file.write(f"{volume}\n") | |
| def read_volumes(volume_file): | |
| file = open(volume_file, "r") | |
| volumes = [] | |
| lines = file.readlines() | |
| for line in lines: | |
| volumes.append(float(line)) | |
| return volumes | |
| def plot_histogram(volumes): | |
| bins = [0, 5, 10, 15, 25, 50, 100, 150, 200, 300, 400, 1000] | |
| hist, bin_edges = np.histogram(volumes, bins) | |
| fig, ax = plt.subplots() | |
| ax.set_xticks([0.5+i for i,j in enumerate(hist)]) | |
| ax.bar(range(len(hist)),hist,width=1,color="#15497d",edgecolor='#0b2947',align='center',tick_label= | |
| ['{} - {}'.format(bins[i],bins[i+1]) for i,j in enumerate(hist)]) | |
| hist, bin_edges = np.histogram(volumes, bins) | |
| ax.bar(range(len(hist)),hist,width=1,color="#15497d",edgecolor='#0b2947',align='center',tick_label= | |
| ['{} - {}'.format(bins[i],bins[i+1]) for i,j in enumerate(hist)]) | |
| plt.xticks(rotation = 45) | |
| plt.xlabel('Volume, cm\u00b3') | |
| plt.ylabel('Number of Tumors') | |
| plt.xlim(-0.5, 10.5) | |
| plt.show() | |
| def plot_histograms(volumes): | |
| #plt.figure(figsize=(8,6)) | |
| plt.hist(volumes[2], bins=20, alpha=0.5, label="LungDx") | |
| plt.hist(volumes[1], bins=20, alpha=0.5, label="Radiomics") | |
| plt.hist(volumes[0], bins=20, alpha=1, label="MSD") | |
| plt.xlabel("Volume, cm\u00b3", size=14) | |
| plt.ylabel("Count", size=14) | |
| plt.title("Tumor Volumes") | |
| plt.legend(loc='upper right') | |
| plt.show() | |
| if __name__ == "__main__": | |
| #vol =calculate_scan("D:\\Datasets\\Temp\\Images\\radiomics_010.nii.gz", "D:\\Datasets\\Temp\\Labels\\radiomics_010.nii.gz") | |
| #print(vol) | |
| #volumes = calculate_all("D:\\Datasets\\Temp\\Images\\", "D:\\Datasets\\Temp\\Labels\\") | |
| #save_volumes(volumes, "D:\\Datasets\\radiomics.txt") | |
| volumes = [] | |
| volumes.append(read_volumes("C:\\Users\\vemun\\Desktop\\msd_volumes.txt")) | |
| volumes.append(read_volumes("C:\\Users\\vemun\\Desktop\\radiomics_volumes.txt")) | |
| volumes.append(read_volumes("C:\\Users\\vemun\\Desktop\\lungdx_volumes.txt")) | |
| plot_histograms(volumes) |