Skip to content

CSimon-A/TP1_IMN708

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TP1 — Visualisation NIfTI : mode d’emploi (README)


1) Prérequis

  • Python 3.10 (recommandé)
  • macOS / Linux (testé sur macOS 15)
  • Packages listés dans requirements.txt
  • Données d’exemple : /Data_TP0/IRM/Brain/flair.nii

2) Créer et activer l’environnement virtuel

# À exécuter dans un terminal (depuis TP/TP1/)
python3.10 -m venv .venvs/TP1
source .venvs/TP1/bin/activate
python -V
python -m pip install --upgrade pip

3) Installer les dépendances

# Toujours dans l’environnement virtuel
python -m pip install -r requirements.txt

4) Visualiser un volume NIfTI (viewer interactif)

Le script view_image.py permet d’afficher un volume 2D/3D/4D NIfTI sous forme interactive, avec réglage de contraste, sélection de coupe, et visualisation canonique RAS.

Exemple d’utilisation

source .venvs/TP1/bin/activate
python src/view_image.py ../Data_TP0/IRM/Brain/flair.nii \
  --clim 2,98 \
  --square \
  --clim-nonzero \
  --canonical \
  --log image_viewer.log \
  --log-level INFO

Principaux arguments

Option Description
--clim a,b Bornes de contraste en percentiles (ex. 2,98).
--clim-nonzero Calcule les percentiles sur les voxels non nuls uniquement.
--square Force un rapport d’aspect carré.
--canonical Réoriente le volume en RAS avant affichage.
--time t / --no-time-slider Sélection du volume temporel si données 4D.
--log <path> Fichier journal (.log) de sortie.
--log-level {DEBUG,INFO,…} Niveau de verbosité pour le logging.

Consultez l’aide complète :
python src/view_image.py -h


Exemples supplémentaires

• Affichage simple (3 vues)

python src/view_image.py path/to/brain.nii.gz

• Volume 4D avec temps fixé

python src/view_image.py .venvs/TP1/lib/python3.10/site-packages/dipy/data/files/small_64D.nii \
  --time 3 --no-time-slider

5) Générer des projections d’intensité (MIP / mIP)

Le script compute_mIP_MIP.py calcule des projections d’intensité maximale, minimale, moyenne ou par percentile le long d’un axe (x, y, z).
Il permet d’obtenir des vues synthétiques en 2D d’un volume 3D, utiles pour observer des structures lumineuses internes ou isoler un slab spécifique.

Ce script supporte aussi les masques, la réorientation canonique RAS et les sous-volumes (slabs).

Exemple d’utilisation

# Vue moyenne à travers un slab (coupes 5 à 40) — “inside the skull”
python TP/TP1/src/compute_mIP_MIP.py TP/Data_TP0/IRM/Brain/flair.nii \
  --axis z --mode mean --slab 5:40

# Vue robuste des structures brillantes (90e percentile)
python TP/TP1/src/compute_mIP_MIP.py TP/Data_TP0/IRM/Brain/flair.nii \
  --axis z --mode percentile --percentile 90 --slab 5:40

# Avec un masque cérébral (si disponible)
python TP/TP1/src/compute_mIP_MIP.py TP/Data_TP0/IRM/Brain/flair.nii \
  --axis z --mode percentile --percentile 50 --mask BrainMask.nii.gz

# Vue anatomique Z, slab interne, 50e percentile (médiane)
python TP/TP1/src/compute_mIP_MIP.py TP/Data_TP0/IRM/Brain/flair.nii \
  --canonical --axis z --mode percentile --percentile 50 --slab 2:-2

Principaux arguments

Option Description
--axis {x,y,z} Axe de projection (x = gauche-droite, y = post-ant, z = inf-sup).
--mode {min,max,mean,percentile} Type de projection (défaut : max).
--percentile <val> Percentile utilisé en mode percentile (défaut : 90).
--slab start:end Plage d’indices de tranches à inclure (ex. 5:40).
--mask <fichier> Masque optionnel (mêmes dimensions que le volume 3D).
--canonical Réorientation RAS avant projection.
-o <fichier> Nom du fichier PNG de sortie (automatique sinon).
--save-nifti Sauvegarde également la projection en NIfTI 2D (.nii.gz).

Résultats

Chaque exécution produit :

  • un fichier PNG (projection 2D visualisable directement) ;
  • éventuellement un fichier NIfTI 2D si --save-nifti est activé ;
  • un résumé console : dimensions utilisées et statistiques de l’image projetée.

6) Calculer des statistiques d’image (taille, résolution, contraste)

Le script show_image_stats.py calcule des statistiques globales pour un ou plusieurs fichiers NIfTI : dimensions, résolutions (zooms), et métriques de contraste (Michelson, RMS, STD).
Il peut parcourir un fichier unique ou un dossier (recherche récursive).

Rappels de définitions :
Michelson = (Imax − Imin) / (Imax + Imin) — robuste si on utilise des percentiles.
RMS = √(mean(I²)) — intensité quadratique moyenne (relative à zéro).
STD = √(mean((I − mean)²)) — dispersion autour de la moyenne.

Exemple d’utilisation

# Exemple (dossier) — depuis TP/TP1/
source .venvs/TP1/bin/activate
python src/show_image_stats.py ../Data_TP0 \
  --canonical --clim-nonzero --robust --p-low 2 --p-high 98 \
  --out-csv tp_stats.csv \
  --log show_image_stats.log --log-level INFO

Principaux arguments

Option Description
input Fichier NIfTI ou dossier à parcourir (récursif).
--canonical Réoriente en RAS avant calcul (géré par utils.io).
--clim-nonzero Traite les zéros comme manquants (ignorés dans les stats).
--robust Utilise des percentiles (--p-low, --p-high) pour Michelson au lieu de min/max bruts.
--p-low <float> Percentile bas pour Michelson robuste (défaut : 2).
--p-high <float> Percentile haut pour Michelson robuste (défaut : 98).
--out-csv <fichier> Sauvegarde les résultats en CSV (1 ligne par image).
--out-json <fichier> Sauvegarde aussi les résultats en JSON (liste de lignes).
--log <fichier> Fichier journal (défaut : show_image_stats.log).
--log-level {DEBUG,INFO,…} Niveau de verbosité fichier (défaut : INFO).
--console-level {DEBUG,INFO,…} Niveau de verbosité console (par défaut : même que --log-level).

Résultats

Pour chaque image, le script produit une ligne contenant notamment :

  • relpath (chemin relatif), shape (ex. 208×256×22), zooms_mm (ex. 0.820,0.820,7.425)
  • michelson, rms, mean, std
  • vmin_used, vmax_used (min/max robustes si --robust)
  • n_vox (nombre de voxels pris en compte — hors NaN, Inf, et 0 si --clim-nonzero)

Exemples supplémentaires

• Fichier unique (avec min/max bruts)

python src/show_image_stats.py ../Data_TP0/IRM/Brain/flair.nii \
  --canonical \
  --out-csv flair_stats.csv

• Dossier complet, robust percentiles 1–99, JSON + CSV

python src/show_image_stats.py ../Data_TP0 \
  --canonical --clim-nonzero --robust --p-low 1 --p-high 99 \
  --out-csv tp_stats.csv --out-json tp_stats.json

7) Débruiter une image (NLMeans / BM3D / Bilatéral)

Le script denoise_image.py applique des méthodes de débruitage sur une image NIfTI (3D, ou 4D via --time) afin de comparer NLMeans, BM3D et bilatéral.

Aperçu rapide :
NLMeans — excellent pour réduire le bruit tout en conservant des motifs répétitifs.
BM3D — référence en débruitage, très performant (nécessite pip install bm3d).
Bilatéral — lisse intra-région tout en préservant les bords (appliqué coupe-par-coupe).

Exemple d’utilisation

# 1) NLMeans (FLAIR)
source .venvs/TP1/bin/activate
python src/denoise_image.py --in ../Data_TP0/IRM/Brain/flair.nii \
  --method nlmeans \
  --patch-size 3 --patch-distance 7 --h 0.9 \
  --norm-robust --p-low 2 --p-high 98 \
  --canonical \
  --out ../out/flair_nlmeans.nii.gz \
  --log denoise_image.log --log-level INFO

# 2) BM3D (T1) — nécessite: pip install bm3d
python src/denoise_image.py --in ../Data_TP0/IRM/Brain/T1.nii \
  --method bm3d --sigma 0.015 \
  --norm-robust --p-low 2 --p-high 98 \
  --canonical \
  --out ../out/T1_bm3d.nii.gz

# 3) Bilatéral (T1)
python src/denoise_image.py --in ../Data_TP0/IRM/Brain/T1.nii \
  --method bilateral \
  --bil-sigma-color 0.08 --bil-sigma-spatial 2 --bil-axis z \
  --norm-robust --p-low 2 --p-high 98 \
  --canonical \
  --out ../out/T1_bilateral.nii.gz

Astuce : créez d’abord le dossier de sortie si besoin :
mkdir -p ../out

Principaux arguments

Option Description
--in <fichier> Fichier NIfTI d’entrée (3D/4D).
--out <fichier> Chemin de sortie (.nii/.nii.gz). Si omis, auto-nommage à côté de l’entrée.
--method {nlmeans,bm3d,bilateral} Méthode de débruitage.
--time <int> Index temporel si 4D (défaut : 0).
--canonical Réorientation RAS via utils.io.load_nifti.
--norm-robust Normalisation interne dans [0,1] via percentiles.
--p-low, --p-high Percentiles pour la normalisation robuste (défauts : 2, 98).
--log <path> Fichier journal (défaut : denoise_image.log).
--log-level {DEBUG,INFO,…} Verbosité fichier (défaut : INFO).
--console-level {…} Verbosité console (défaut : même que --log-level).

Hyperparamètres par méthode

Méthode Paramètres Interprétation rapide
nlmeans --patch-size (3–5), --patch-distance (5–10), --h (~0.6–1.2) Plus h est grand, lissage plus fort. patch-* contrôlent la recherche de voisinage. Si --h omis, estimé depuis le bruit.
bm3d --sigma (0–1, si omis, estimé) Écart-type du bruit dans l’échelle normalisée [0,1].
bilateral --bil-sigma-color (~0.05–0.12), --bil-sigma-spatial (~2), --bil-axis {x,y,z} Lissage qui respecte les bords; sigma_color selon la dynamique d’intensité; appliqué coupe-par-coupe le long de bil-axis.

Résultats & comparaison

Chaque exécution produit :

  • un NIfTI débruité (ré-utilisable pour analyse),
  • des logs (paramètres, temps d’exécution), éventuellement un aperçu PNG si votre script le prévoit.

Conseils d’analyse :

  • Comparez SNR/STD et contraste de Michelson avant/après (voir §6 show_image_stats).
  • Surveillez les bords et textures (éviter le sur-lissage).
  • Ajustez les hyperparamètres par modalité (FLAIR vs T1) et par niveau/type de bruit.

Batch d’exemples (FLAIR & T1)

mkdir -p ../out

# FLAIR — NLMeans, BM3D, Bilatéral
python src/denoise_image.py --in ../Data_TP0/IRM/Brain/flair.nii \
  --method nlmeans --patch-size 3 --patch-distance 7 \
  --norm-robust --p-low 2 --p-high 98 --canonical \
  --out ../out/flair_nlmeans.nii.gz && \
python src/denoise_image.py --in ../Data_TP0/IRM/Brain/flair.nii \
  --method bm3d --sigma 0.015 \
  --norm-robust --p-low 2 --p-high 98 --canonical \
  --out ../out/flair_bm3d.nii.gz && \
python src/denoise_image.py --in ../Data_TP0/IRM/Brain/flair.nii \
  --method bilateral --bil-sigma-color 0.06 --bil-sigma-spatial 2 --bil-axis z \
  --norm-robust --p-low 2 --p-high 98 --canonical \
  --out ../out/flair_bilateral.nii.gz

# T1 — NLMeans, Bilatéral, BM3D
python src/denoise_image.py --in ../Data_TP_0/IRM/Brain/T1.nii \
  --method nlmeans --patch-size 3 --patch-distance 7 \
  --norm-robust --p-low 2 --p-high 98 --canonical \
  --out ../out/T1_nlmeans.nii.gz && \
python src/denoise_image.py --in ../Data_TP0/IRM/Brain/T1.nii \
  --method bilateral --bil-sigma-color 0.08 --bil-sigma-spatial 2 --bil-axis z \
  --norm-robust --p-low 2 --p-high 98 --canonical \
  --out ../out/T1_bilateral.nii.gz && \
python src/denoise_image.py --in ../Data_TP0/IRM/Brain/T1.nii \
  --method bm3d --sigma 0.012 \
  --norm-robust --p-low 2 --p-high 98 --canonical \
  --out ../out/T1_bm3d.nii.gz

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages