Il existe plusieurs bibliothèques qui lisent DICOM, mais cet article explique comment utiliser SimpleITK pour lire des images médicales telles que l'IRM et la tomodensitométrie.
SimpleITK est une bibliothèque qui facilite l'utilisation de ITK, un format d'analyse d'images médicales, en Python et dans d'autres langages. (Https://en.wikipedia.org/wiki/SimpleITK) Il est également utilisé dans des logiciels tels que 3D Slicer, ImageJ et ITK-Snap.
Par exemple, les images IRM sont souvent utilisées comme données DICOM, et Simple ITK peut lire DICOM directement. En outre, les images DICOM sont souvent enregistrées au format NIFTI (.nii, .nii.gz) ou NRRD (.nrrd), mais peuvent également être lues. (Https://simpleitk.readthedocs.io/en/master/IO.html) Cependant, en ce qui concerne la sortie, il semble qu'elle ne puisse pas être sortie au format DICOM.
Les images lues au format SimpleITK peuvent être affichées et converties au format ndarray pour traitement et analyse. Le but de l'utilisation de cette bibliothèque est qu'il était nécessaire de charger des images au format SimpleITK sur une autre bibliothèque pour l'analyse d'images appelée PyRadiomics. Je l'ai résumé comme mon propre dossier d'apprentissage.
Vous pouvez faire la même chose avec Google Collaboratory, mais il est difficile de télécharger des données DICOM locales une par une, nous avons donc créé l'environnement.
conda install -c simpleitk simpleitk
Il peut être installé normalement avec pip.
On suppose que plusieurs images DICOM sont enregistrées dans le même dossier.
import SimpleITK as sitk
import numpy as np
import matplotlib.pyplot as plt
#Chargement Dicom
imgdir = "Nom du répertoire dans lequel DICOM existe"
sys.argv[1] = imgdir
reader = sitk.ImageSeriesReader()
dicom_names = reader.GetGDCMSeriesFileNames(sys.argv[1])
reader.SetFileNames(dicom_names)
image = reader.Execute() #Image lue au format ITK
#Lors de la lecture de NIFTI ou NRRD
image = sitk.ReadImage("Répertoire d'images")
#Obtenir la taille de l'image
size = pre.GetSize()
print("Image size:", size[0], size[1], size[2])
#Convertir le format ITK au format ndarray
ndImage = sitk.GetArrayFromImage(image)
#Afficher l'image
plt.imshow(ndImage[n], cmap='gray') #n montre pour n'importe quelle tranche
Dans le code ci-dessus, nous avons vérifié la taille et l'avons brièvement affichée. Il existe différentes utilisations après le chargement d'une image. Par exemple, comme il est au format 3D ndarray, vous pouvez voir la valeur du signal de n'importe quel boxel avec impression. Je voudrais résumer dans un autre article quel type d'analyse peut être fait et de sortie d'images.
Recommended Posts