Spaces:
Sleeping
Sleeping
File size: 3,026 Bytes
1cc0005 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
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) |