| import os
|
| import sys
|
| import numpy as np
|
| import matplotlib.pyplot as plt
|
| from dipy.data import fetch_ivim
|
| from dipy.core.gradients import gradient_table
|
| import nibabel as nib
|
| from tempfile import TemporaryDirectory
|
|
|
|
|
| sys.path.append(os.path.join(os.path.dirname(__file__), 'src'))
|
|
|
| from ivim_model import process_slice_parallel
|
| from utils import filtro_2D
|
|
|
| def main():
|
| print("=== DIPY IVIM Dataset Demo ===")
|
|
|
|
|
| print("Fetching IVIM data from DIPY...")
|
|
|
| files, folder = fetch_ivim()
|
|
|
|
|
|
|
|
|
| print(f"Data downloaded to: {folder}")
|
|
|
| nii_path = os.path.join(folder, 'ivim.nii.gz')
|
| bval_path = os.path.join(folder, 'ivim.bval')
|
|
|
| if not os.path.exists(nii_path):
|
|
|
| nii_path = os.path.join(folder, 'ivim_data.nii.gz')
|
|
|
| print(f"Loading NIfTI: {nii_path}")
|
| img = nib.load(nii_path)
|
| data = img.get_fdata()
|
|
|
| print(f"Loading b-values: {bval_path}")
|
| bvals = np.loadtxt(bval_path)
|
|
|
| print(f"Data shape: {data.shape}")
|
| print(f"b-values: {bvals}")
|
|
|
|
|
| slice_idx = 15
|
| if slice_idx >= data.shape[2]:
|
| slice_idx = data.shape[2] // 2
|
|
|
| print(f"Processing slice {slice_idx}...")
|
|
|
| slice_data = data[:, :, slice_idx, :]
|
| rows, cols, _ = slice_data.shape
|
|
|
|
|
| b0_idx = np.argmin(bvals)
|
| b0_img = slice_data[:, :, b0_idx]
|
| mask = b0_img > np.mean(b0_img) * 0.2
|
|
|
| print(f"Processing full slice with parallel execution.")
|
|
|
|
|
|
|
|
|
| map_R2, map_D, map_f, map_D_star, map_K = process_slice_parallel(
|
| bvals, slice_data, mask=mask, gof=0.90, model_type='quadratic', n_jobs=-1
|
| )
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| print("Plotting results...")
|
| fig, axes = plt.subplots(1, 5, figsize=(20, 4))
|
|
|
| def show_map(ax, data, title, vmin=None, vmax=None, cmap='gray'):
|
|
|
| im = ax.imshow(np.rot90(data), cmap=cmap, vmin=vmin, vmax=vmax, interpolation='none')
|
| ax.set_title(title)
|
| plt.colorbar(im, ax=ax, fraction=0.046, pad=0.04)
|
| ax.axis('off')
|
|
|
|
|
| show_map(axes[0], map_R2, "R2", 0.5, 1.0, 'gray')
|
| show_map(axes[1], map_D, "D (Diffusion)", 0, 0.002, 'viridis')
|
| show_map(axes[2], map_f, "f (Perfusion)", 0, 0.3, 'viridis')
|
| show_map(axes[3], map_D_star, "D* (Pseudo-Diff)", 0, 0.05, 'viridis')
|
| show_map(axes[4], map_K, "K (Kurtosis)", 0, 1.5, 'viridis')
|
|
|
| plt.tight_layout()
|
| plt.savefig('dipy_ivim_results.png')
|
| print("Results saved to dipy_ivim_results.png")
|
|
|
| if __name__ == "__main__":
|
| main()
|
|
|