[Dcmlib] Pb metaphysique gdcm

Jean-Pierre ROUX jean-pierre.roux at creatis.insa-lyon.fr
Mon Oct 27 10:25:44 CET 2003


Bonjour.

--> Actuellement, le constructeur de gdcmHeader renvoie .. un 
gdcmHeader, c'est à dire le contenu de ce qu'il a trouvé sur disque 
concernant les champs du Header, et GetPixelData renvoie les Pixels, 
présentés de telle sorte que l'utilisateur n'ai pas à se soucier de 
la manière dont ils étaient écrits sur disque.
Facile.
Ainsi, les pixels, qu'ils aient été big Endian ou little endian sur 
disque, sont renvoyés dans un ordre compatible avec celui du 
processeur, que la 'Planar Configuration' ait indique que le 'RGB' 
est codé au niveau du Pixel (RGBRGBRGBRGB ...) ou au niveau du Plan 
(RRRRR.... GGGGG.... BBBBB.....), on renvoie RGBRGBRGB..., ce qui 
permet à vtk d'afficher sans se poser pb.
Jusque la, tout va bien.

Lorsqu'il y a une ou des 'Palettes LUT', GetPixelData 'fabrique' une 
'image RGB', de telle sorte que vtk, etc, et met à jour dans le 
Header les info qui 'décrivent' une image RGB, afin que les 
programmes qui interrogent le Header trouvent une info cohérente.
Et c'est là que ça se gâte ...
Si un programme a accédé à un ensemble d'images, conservé en mémoire 
les Headers des images sur lesquelles il souhaite travailler, puis 
appelle GetPixelData, il aura des info incohérentes dans 'ses' 
Headers lorsqu'il voudra exploiter les Pixels :-(

La solution qui consisterait à 'mettre à jour' le Header dès qu'il 
est lu n'est pas à retenir, car GetPixelData ne disposerait plus des 
'bonnes' info pour mettre les Pixels en forme.

Doit-on faire des accesseurs -aux noms clairement identifiables- qui 
renverraient, non pas la valeur contenue dans le Header, mais la 
valeur qui *sera* utilisable lorsque GetPixelData aura réorganisé les 
Pixels?

Dans cette hypothèse -qui me parait satisfaisante-, doit-on faire une 
classe pour ces trucs-là?
Les mettre dans la classe gdcmHeaderHelper qu'a fait Mathieu Malaterre?

--> Autre pb, plus 'sensible'.

Toute l'architecture de gdcm est basée sur le fait, vrai en première 
approximation seulement (euphémisme pour dire : faux) que le 'Dicom 
tag', c'est à dire 'Group Number + Element Number' est un identifiant 
pour les Dicom Elements dans le Header (le Dicom Tag est bien un 
identifiant, mais dans le Dicom Dictionnary seulement).
Lorsque le même Dicom Tag apparait plusieurs fois, c'est 
systématiquement le dernier qui est retenu (Hash Table oblige), ce 
qui fait que le Header résultant *ne permet plus* de reconstituer sur 
disque une image DICOM 'équivalente' à l'image d'origine, et, pire, 
que les info 'restantes' ne sont pas pertinentes (par exemple, dans 
le cas d'une image 'avec icone', le Row Number, Column Number, Bits 
stored, Bits Allocated ne donnent pas les info attendues)

Serait-ce une idée (mais là, je suis moins sûr de sa pertinence) que 
de créér une 'Liste' des Dicoms Elements rencontrés sur disque, en 
même temps que les deux tables de hachage (sur le Tag et sur le nom), 
qui contiendraient toutes les deux un pointeur vers le Dicom Element 
à l'intérieur de la Liste ?
On pourrait ainsi être mesure de restaurer dans les tables de Hachage 
des info s'il s'avère qu'elles ont été 'écrasées' de manière abusive, 
sans être obligé de tester, à la volée, et pour chaque Elément, lors 
du parsage du Header si on ne s'apprete pas a écraser abusivement qq 
chose.

--> Troisième pb, anecdotique par rapport aux précédents :

Certains applicatifs (Creatis) font la supposition que le nom du Tag 
est un identifiant.
Il ne l'est, ni dans le Dicom Dictionnary, ni dans le Header.
De plus sa valeur peut être modifiée d'une année sur l'autre, avec la 
nouvelle mouture annuelle des spécifs Dicoms (le site de David Clunie 
répertorie les modifs d'une année sur l'autre -éléments ajoutés, 
éléments modifiés-.
L'exemple le plus tristement célèbre est 'Patient Name' devenu 
'Patient's Name', qui a causé pas mal de sueurs froides aux gdcmLib 
users...

Voila.
Toute suggestion sur les 2 premiers points serait la bienvenue.

Thx

JPRx



  Jean-Pierre ROUX
  UMR CNRS 5515-CREATIS
  Laboratoire de Radiologie Experimentale
  Hopital Cardiologique
  28 Avenue du Doyen LEPINE
  B.P. Lyon-Montchat
  69394 Lyon Cedex 03

  Tel      : (+33) 04 72 35 74 12
  Fax      : (+33) 04 72 68 49 16
  URL      : http://www.creatis.univ-lyon1.fr
  e-mail   : jpr at univ-lyon1.fr
								   




More information about the Dcmlib mailing list