[Dcmlib] converting itk,vtk or any other 3D images into dicom.
Mathieu Malaterre
mathieu.malaterre at kitware.com
Tue Nov 9 21:47:42 CET 2004
> Maintenant que Jean-Michel Rouet a fort gentiment essuye' les platres pour
> nous, et que Mathieu a aussi un peu souffert en voulant ecrire des
tu veux dire 'beaucoup' faut pas oublier que j'ai integre gdcm dans ITK :P
> images, je pense (comme JPR, mais a plus court terme) qu'il est en effet
> assez urgent de parler de l'API.
ok
> Je pense paticulierement aux points suivants qu'il faudrait clarifier:
> 1/ l'acces au tag
> 2/ distinction des operations de modification/creation d'un tag
> 3/ definition du mode d'ecriture.
Avant meme de commencer je suis toujours surpris de voir des reponses
sans avoir vu passer les questions dans les groupes comme
comp.protocols.dicom, sans avoir analyser les sources de dcmtk, osirix ...
> Avant de lancer le[s] troll[s], je cite l'extrait suivant du commentaire
> doxygen de la definition de TagKey (typedef) dans src/Common.h:
[ snip ]
> Bref, la representation interne a gdcm d'une clef de tag (appele' pompeusement
> clef generalise'e) est un string de la forme:
> - 0028|1201 pour un tag "a plat" (pas dans une sequence).
> - 0004|1220/2#0008|0082/0#0008|0090... pour un tag de sequence
Ca dois etre une question stupide. Mais pourquoi ne pas faire une notion
de namespace. 0028|1201 serait dans le namespace 'root'. Et ensuite ont
pourrait avoir 0028|1201 dans la SQ 'SQ1', puir 0028|1201 dans 'SQ34' ...
Je suis un peu contre le fait de construire des chaines de caracteres
complique'e.
> Question 1a/:
> D'ou la question: ne devrait-on purement et simplement supprimer
> l'acces au tag par nom ?
Je suis pour. Ca permettra en plus de reduire le nom de la methode
'Get*ByNumber' devient 'Get*'
> Question 1b/:
> - DictEntry::TranslateToKey(group,element) )
> - et une version a ecrire pour la clef generalise'e
cf au dessus. Je trouve la version 'a la volee' plus flexible. Et en
interne dans GDCM, on utilise que group/element. Donc le surcout ne sera
que pour l'utilisateur final.
> Question 1c/:
> les sequences "collapsables" a la e-Film: c'est une demande
houla je comprends deja plus...
> ######################
> Point 2/ distinction des operations de modification/creation d'un tag
> Actuellement nous offrons ReplaceOrCreateByNumber(). Il serait bon,
J'ai toujours haie cette methode. Je suis incapadle de taper plus de
trois caracteres sans me tromper, donc imaginer avec un nom de methode
aussi long. Dans aucune structure stl je ne vois d'equivalent. Pour il a
trois choses: Set/ Get/ Insert:
- Set(i, val), on met la valeur val a la position i. Si i n'existe pas
le prog seg fault, tant pis pour nous.
- Get(i), retourne la valeur val a la position i
- Insert(i, val), comme set. Mais si i n'existe pas alors on le cree.
ReplaceOrCreateByNumber n'a de sense que parce qu'on manipule en interne
des pointeurs 'raw'. Il faut s'en cesse verifier qu'il n'est pas nulle.
Je suis convaincu qu'on ne perdrait rien s'il on utilisait les objets
directement plutot qu'un pointeur...
>
> ######################
> Point 3/ definition du mode d'ecriture.
> Mathieu a deja propose' que l'API soit VTK-like. Il faudrait donc
Je vais qd meme pas etre d'avis contraire :)
Sinon comme j'ai dis precedemment j'aimerais differencier input/output
(ifstream/ofstream).
Ex concret, Jean Michel proposait une methode qui remplit avec des
valeurs pas defaut certains champ (equivalent de l'image template de
theralys). Je pose la question qu'est ce qu'une methode fais qd on ne
fais que lire des images DICOM.
Meme si ca fais tres VTK, ITK je pense que c'est pas mal de differencier
les reader des writers.
Inversement un writer n'a pas a connaitre d'heuristique pour determiner
l'endianness d'un fichier (c'est le probleme d'un reader).
>
> Si apres une telle incontinence verbale, y'a pas de commentaire, c'est a
> se flinguer...
J'aurais fais de mon mieux :)
Mathieu
More information about the Dcmlib
mailing list