[Dcmlib] gdcm proposal (1)
Benoit Regrain
benoit.regrain at creatis.insa-lyon.fr
Thu Apr 28 17:23:31 CEST 2005
1ere partie (sinon ca passait pas...)
Je crois qu'il y a eu confusion dans la compréhension de Document.
Pour moi, Document, c'est le contenu Dicom (donc une donnée qui equivaudrait
à un vtkImageData).
Pour Mathieu, il semble que c'etait plutot la partie Reader/Writer.
Ce qui je crois amene des confusions dans les reponses aux questions.
Je crois qu'il faut commencer à donner des noms correct. Voici ce que je propose
(je ne prefixe pas de gdcm pour ne pas alourdir les choses) :
DocEntry : comme le DocEntry actuel (contient gr|elem + VR + value)
dérivé en ValEntry, BinEntry, SeqEntry
SQItem : comme le SQItem actuel, données contenant une liste de DocEntry.
Document : données contenant une liste de DocEntry.
gère une image Dicom. Contient des méthodes facilitant l'accès aux
informations de l'image : taille, spacing, origin, orientation, etc.
DicomDir : données contenant une arborescence
DicomDirPatient / DicomDirStudy / DicomDirSerie / DicomDirImage
(qui sont aussi des données dérivant de SQItem)
Image : donnée image Dicom décompressée + Document ?
Reader : traitement qui permet de lire un fichier au format Dicom
DocReader : traitement qui permet de lire un fichier Dicom contenant un Document
retourne un Document
derive de Reader
DicomDirReader : traitement qui permet de lire un fichier Dicom contenant un DicomDir
retourne un DicomDir
derive de Reader
Writer : traitement qui permet d'ecrire un fichier au format Dicom
DocWriter : traitement qui permet d'ecrire un fichier au format Dicom à partir d'un Document
DicomV3Writer : traitement qui permet d'ecrire un fichier au format DicomV3
prend un Document en entrée
derive de DocWriter
LibidoWriter : traitement qui permet d'ecrire un fichier au format Libido
prend un Document en entrée
derive de DocWriter
AcrNemaWriter : traitement qui permet d'ecrire un fichier au format ACR-NEMA
prend un Document en entrée
derive de DocWriter
DicomDirWriter : traitement qui permet d'ecrire un fichier au format Dicom à partir d'un DicomDir
prend un DicomDir en entrée
derive de Writer
DocValidator : traitement qui verifie la structure d'un Document
prend un Document en entrée
retourne du texte
DicomDirValidator : traitement qui verifie la structure d'un DicomDir
prend un DicomDir en entrée
retourne du texte
SerieOrder : traitement ordonnant une serie de Document
prend une liste de Document en entrée
retourne l'ordre de ces documents (sous quelle forme ?)
Decompress : traitement decompressant l'image d'un Document
prend un Document en entrée
retourne une Image
Document2DicomDirImage : tranforme un Document en DicomDirImage
prend un Document en entrée
retourne un DicomDirImage
DicomDirImage2Document : tranforme un DicomDirImage en Document
prend un DicomDirImage en entrée
retourne un Document
On voit donc apparaitre une dérivation comme suit (incomplète bien sur) :
Data
- Document
- DicomDir
- Image
Process
- Reader
- DicomDirReader
- DocReader
- Writer
- DicomDirWriter
- DocWriter
- DicomV3Writer
- LibidoWriter
- DicomV3Writer
- Validator
- DicomDirValidator
- DocValidator
- SerieOrder
- Decompress
- Document2DicomDirImage
- DicomDirImage2Document
Si j'ai bien tout compris, Mathieu, on aura une séparation données traitements (comme dans VTK).
Ceci n'est bien sur qu'une ebauche, s'appuyant sur ce qui fonctionne deja et les morceaux à changer.
L'arborescence n'est pas complète, et il y a peut etre des choses fausses ou a revoir.
Mais une question se pose avec cela... on fait comme dans VTK avec un pipeline mis a jour automatiquement
ou pas ? Comment on gere les sorties, comme en VTK avec la meme sortie a chaque fois ou avec une
nouvelle sortie ? Et quand le traitement est détruit, qui détruit la sortie ?
Désolé de ne parler que de VTK, je ne connais pas encore ITK (mais c'est pour bientot)
Ce qui me plait pas dans ce que je viens de présenter (et vi, on peut faire des choses pas belles des
le début...) c'est la différence entre Document et DicomDirImage... ce qui nous oblige apres a avoir
des passerelles entre les 2. Mais d'un autre coté, c'est justifiable sur le fait que les deux n'ont pas
tout en commun... mais la question va etre : pourquoi ne pas dire qu'un DicomDirImage est un Document ?
et bien tout simplement car dans le DicomDirImage (actuel), on n'a que les champs correspondant au
niveau image du DicomDir, le DicomDirSerie contenant les info de la serie, idem avec Study et Patient.
Or, le Document doit contenir toutes les infos de chaque niveau du DicomDir (Patient + Study + Serie + Image).
Avoir ces convertisseurs obligerait aussi a pouvoir remonter de l'Image jusqu'au Patient, ce qui n'est pas le cas
actuellement (mais rien empeche de le faire ;-) )
----- Original Message -----
From: "Mathieu Malaterre" <mathieu.malaterre at kitware.com>
To: "Benoit Regrain" <benoit.regrain at creatis.insa-lyon.fr>
Cc: "Mailing list gdcm" <dcmlib at creatis.insa-lyon.fr>
Sent: Wednesday, April 27, 2005 5:45 PM
Subject: Re: [Dcmlib] gdcm proposal
>
>> Par contre je n'ai pas compris : tu veux que ton gdcm.Writer modifie
>> définitivement le gdcm.Document passé en entrée ? ou que la modification
>> soit juste temporaire (le temps de l'écriture du fichier) ?
>
> Mon probleme est plus vaste, je voudrais un mechnisme qui interdise de
> modifier l'input d'un filtre. Je concois parfaitement maintenant que
> j'ai souligner le probleme on aille le deplacer ailleurs ou le cacher....
>
> Sinon pour l'ecriture effectivement le 12 qui devient un 16 ca devrait
> etre temporaire. Par exemple un gdcm.Validator ne pourrait pas reporter
> que BitsStorage=12 est une faute, pourtant dans le cas present -et pour
> lontemps- nous sommes incapable de gerer ca. Donc au moment de
> l'ecriture gdcm.Writer fais la suite d'actions:
>
> (version gourmande):
> - recopie du gdcm.Document dans un gdcm.Document interne
> - ensuite gdcm.Writer regarde gdcm.Image et doit determiner les valeurs
> a changer: BitStord 12 devient 16, dans le Cas clunie, les spacing=0
> deviennent 1 ...
> - ensuite on ecrase les anciennes UID (user request ?) par les valeurs
> generer
> -> derniere etape on ecris le fichier.
Autre solution, utiliser ma méthode d'archivage des Entry de facon temporaire,
modifier la source, puis tout remettre en place. Mais est-ce une bonne solution ?
Pour ce qui est de la copie, cela ne risque-t-il pas de ralentir les choses ?
Ou sinon, il faudrait pouvoir faire comme dans VTK... des DeepCopy et
des ShallowCopy. Dans ce cas, il faudrait proprement gerer l'appartenance d'un Entry
par un Document... donc ajouter du reference counting...
Benoit
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.creatis.insa-lyon.fr/pipermail/dcmlib/attachments/20050428/8520a109/attachment.html>
More information about the Dcmlib
mailing list