Rageya's picture
Create utils.py
f60b8aa verified
Raw
History Blame Contribute Delete
1.28 kB
import numpy as np
import nibabel as nib
from pathlib import Path
def preprocess_input(file_path, target_shape=(128, 128, 128)):
"""Load and preprocess a NIfTI file"""
img = nib.load(str(file_path)).get_fdata().astype(np.float32)
if img.shape != target_shape:
from scipy.ndimage import zoom
factors = [t/s for t, s in zip(target_shape, img.shape)]
img = zoom(img, factors, order=1)
img = (img - img.min()) / (img.max() - img.min() + 1e-8)
return img
def load_multimodal_scan(t1_path, t1ce_path, t2_path, flair_path):
"""Load all 4 MRI modalities and stack them"""
channels = []
for path in [t1_path, t1ce_path, t2_path, flair_path]:
if path and Path(path).exists():
img = preprocess_input(path)
else:
img = np.zeros((128, 128, 128), dtype=np.float32)
channels.append(img)
return np.stack(channels, axis=0)
def calculate_tumor_metrics(pred_mask):
"""Calculate tumor volume metrics"""
return {
'total_voxels': np.sum(pred_mask > 0),
'necrotic_voxels': np.sum(pred_mask == 1),
'edema_voxels': np.sum(pred_mask == 2),
'enhancing_voxels': np.sum(pred_mask == 3),
'volume_ml': np.sum(pred_mask > 0) * 0.001
}