LungTumorMask / training /Utils /volume_histogram.py
Vemund Fredriksen
Add training pipeline (#21)
1cc0005 unverified
raw
history blame
No virus
3.03 kB
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)