dcmect: une bibliothèque pour manipuler les objets Enhanced CT
Table des matières
- Introduction
- Utilisation de dcmect
- Création
- Lecture
- Enregistrement
- Modification
- Exemple de code
- Compression
- Modules pris en charge
- Macros de groupes fonctionnels prises en charge
Introduction
Ce module contient des classes permettant de manipuler les objets Enhanced CT DICOM. Il permet de les créer, de les charger et de les enregistrer. Plusieurs vérifications (dans la mesure du possible) garantissent que seuls des objets Enhanced CT valides sont écrits. Ce module utilise abondamment le module dcmiod pour gérer les attributs IOD communs, ainsi que le module dcmfg pour gérer les groupes fonctionnels requis pour les objets Enhanced CT.
La classe principale de ce module est :
Utilisation de dcmect
Le module dcmect propose une classe principale, EctEnhancedCT, à utiliser comme point de départ pour charger ou créer des objets Enhanced CT. La classe EctEnhancedCT gère ses données d'une manière proche de celle dont l'IOD Enhanced CT correspondant est organisé dans la norme. Elle contient une liste de modules (voir Modules pris en charge) ainsi qu'un ensemble de macros de groupes fonctionnels (voir Macros de groupes fonctionnels prises en charge) qui, ensemble, constituent l'objet Enhanced CT.
Création
Pour créer un nouvel objet Enhanced CT à partir de rien, il faut utiliser une méthode de fabrique, EctEnhancedCT::create() (le constructeur habituel est protégé). create() demande certaines informations obligatoires, qui sont de toute manière nécessaires pour créer des objets Enhanced CT valides.
Ensuite, les différents attributs des modules pris en charge peuvent être définis. Chaque module dispose d'une méthode get() qui renvoie une référence, par exemple EctEnhancedCT::getIODPatientModule() pour récupérer le module Patient afin de définir l'attribut Patient's Name (IODPatientModule::setPatientName())
Une exception concerne les attributs du module Enhanced CT Image, qui peuvent être définis directement à l'aide des méthodes set() de la classe EctEnhancedCT, par exemple EctEnhancedCT::setISOCenterPosition().
Les groupes fonctionnels s'ajoutent de deux façons :
- EctEnhancedCT::addForAllFrames() ajoute un groupe fonctionnel comme partagé (shared), c'est-à-dire valable pour toutes les frames qui feront partie de cet objet Enhanced CT.
- EctEnhancedCT::Frames::addFrame() ajoute une nouvelle frame avec des données de pixels, et prend également en paramètre un ensemble de groupes fonctionnels à ajouter par frame.
Une fois l'objet Enhanced CT construit, il peut être écrit dans un DcmItem ou dans un fichier DICOM (EctEnhancedCT::writeDataset() et EctEnhancedCT::saveFile()).
Lecture
Un objet Enhanced CT existant peut être lu au moyen des méthodes statiques EctEnhancedCT::loadFile() (chargement depuis un fichier DICOM) ou EctEnhancedCT::loadDataset() (lecture depuis un objet DcmItem existant en mémoire).
Pour la compression, consultez la section sur la compression.
Enregistrement
Un objet Enhanced CT existant peut être écrit au moyen des méthodes EctEnhancedCT::saveFile() (enregistrement dans un fichier DICOM) ou EctEnhancedCT::writeDataset() (écriture dans un objet DcmItem existant en mémoire). Par défaut, EctEnhancedCT écrit des fichiers non compressés dans la syntaxe de transfert Little Endian Explicit.
Pour la compression, consultez la section sur la compression.
Modification
Un objet EctEnhancedCT existant peut être modifié en mémoire au moyen des méthodes décrites ci-dessus. Notez que la modification doit être effectuée avec prudence et peut conduire à des objets incohérents. C'est pourquoi il n'est pas recommandé de modifier des objets existants avec le module dcmect.
Exemple de code
Le répertoire dcmect/tests contient un fichier appelé t_roundtrip.cc, qui renferme du code créant, écrivant et lisant un objet Enhanced CT ; il s'agit donc d'une démonstration à peu près complète de l'utilisation du module dcmect.
Compression
EctEnhancedCT fonctionne avec des données de pixels non compressées. Il essaie donc d'abord de décompresser un fichier encodé avec une syntaxe de transfert compressée ("encapsulée").
DCMTK prend en charge diverses syntaxes de transfert compressées ; toutefois, les codecs correspondants, qui réalisent la compression ou la décompression, doivent d'abord être enregistrés par l'application qui souhaite les utiliser. EctEnhancedCT n'enregistre pas automatiquement ces codecs et laisse ce soin à l'utilisateur du module. Une fois les codecs enregistrés, EctEnhancedCT les utilise pour tenter de décompresser le jeu de données compressé.
Pour un exemple de fonctionnement de l'enregistrement (et plus tard du désenregistrement) des codecs, consultez par exemple le module dcmjpeg.
Lors de l'enregistrement, EctEnhancedCT::saveFile() écrit le fichier dans la syntaxe de transfert Little Endian Explicit. En définissant son paramètre writeXfer sur une syntaxe de transfert compressée, dcmect tente de compresser le fichier avant de l'écrire. Comme pour la lecture d'un jeu de données ou d'un fichier, cela ne fonctionne que si l'utilisateur a préalablement enregistré les codecs de décompression correspondants.
Modules pris en charge
Les modules suivants de l'IOD Enhanced CT sont pris en charge :
- Patient Module
- Patient Study Module
- General Study Module
- General Series Module
- Enhanced CT Series Module
- Frame of Reference Module
- Synchronization Module
- General Equipment Module
- Enhanced General Equipment Module
- Image Pixel Module
- Multi-frame Functional Groups Module
- Multi-frame Dimension Module
- Acquisition Context Module
- Enhanced CT Module
- SOP Common Module
- Common Instance Reference Module
Les modules suivants ne sont pas (encore) pris en charge :
- Enhanced Contrast/Bolus Module
- Cardiac Synchronization Module
- Respiratory Synchronization Module
- Supplemental Palette Color Lookup Table Module
- Device Module
- Specimen Module
- Enhanced Multi-energy CT Acquisition Module
- ICC Profile Module
- Frame Extraction Module
D'autres modules optionnels non pris en charge ont pu être ajoutés à la norme DICOM depuis la dernière mise à jour de cette documentation.
Macros de groupes fonctionnels prises en charge
Les macros de groupes fonctionnels suivantes sont prises en charge :
- Pixel Measures
- Frame Content
- Plane Position (Patient)
- Plane Orientation (Patient)
- Derivation Image
- Frame Anatomy
- Frame VOI LUT
- Real World Value Mapping
- Irradiation Event Identification
- CT Image Frame Type
- CT Acquisition Type
- CT Acquisition Details
- CT Table Dynamics
- CT Position
- CT Geometry
- CT Reconstruction
- CT Exposure
- CT X-Ray Details
- CT Pixel Value Transformation
- CT Additional X-Ray Source
- Temporal Position
Les macros de groupes fonctionnels suivantes ne sont pas (encore) prises en charge :
- Referenced Image
- Cardiac Synchronization
- Contrast/Bolus Usage
- Respiratory Synchronization
- Multi-energy CT Processing
- Multi-energy CT Characteristics
D'autres macros de groupes fonctionnels optionnelles non prises en charge ont pu être ajoutées à la norme DICOM depuis la dernière mise à jour de cette documentation.