I want to write a script to calculate voxel count using python. I have one main folder named "PET-CT" and inside this main folder there are 100 "mrn" sub-folder named as 12345, 43523, 73092,....... Inside each sub-folder there are other 3 "followup" sub-folder named 11, 12, 13 and inside these folder there are 2 image file named "Roi_xyz.nii.gz" and "pet_xyz.nii.gz".
I have written a code for calculating the voxel_count from any single folder. I was wondering if anyone has an easy implementation using python to make it automatic. Please help me to write an automatic python script to calculate voxel_count which results two file (like 'uptake_ratio_12345_12.csv' and 'copy_pet_12345_12.nii.gz') for each of above respective folder. It has to go through these multiple folder and sub-folders and save two results. If it doesn't found any of the given file it has to processed to next folder.
Here is the code for single folder:
import nibabel as nib
import numpy as np
import pandas as pd
mrn='12345'
followup='12'
rootdir= "C:/Users/ak/Downloads/PET-CT"
fdir=os.path.join(rootdir,mrn,followup)
roi = nib.load(os.path.join(fdir,'ROI_xyz.nii.gz'))
pet = nib.load(os.path.join(fdir,'pet_xyz.nii.gz'))
copy_pet = nib.Nifti1Image(pet.get_fdata(),pet.affine)
nib.save(copy_pet,'copy_pet_12345_12.nii.gz')
roi_indices, roi_counts = np.unique(roi.get_fdata(), return_counts=True)
avg_count = roi_counts[1:].mean()
uptake_ratio = (roi_counts/avg_count)
df = pd.DataFrame({'ROI': roi_indices[1:], 'Counts': roi_counts[1:], 'UptakeRatio': uptake_ratio[1:]})
# saving the dataframe
df.to_csv('uptake_ratio_12345_12.csv') ```