[Dcmlib] gdcm proposal

Mathieu Malaterre mathieu.malaterre at kitware.com
Tue Apr 26 23:42:16 CEST 2005


> J'ai l'impression que decris la situation  'gdcm-Juillet 2004' ...
> L'ecriture d'un fichier provoquait'en douce' la modif de certains champs 
> (comme ce que tu décrits), ce qui fait qu'effectivement un Print() 
> n'aurait pas eu le même output avant et pares l'ecrire du fichier.


Alors c'est quoi ca:

bool File::Write(std::string fileName, FileType writetype)
...
    // Bits Allocated
    if ( GetEntryValue(0x0028,0x0100) ==  "12")
    {
       SetValEntry("16", 0x0028,0x0100);
    }
...



> Ce n'est plus le cas actuellement, et j'ai l'impression que le 
> 'dictionaire dont les valeurs se baseraient sur gdcm.Image (et 
> ecraseraient celles de l'input)', il y a deja le 'Archive' qu'a ecrit 
> Benoit il y a plusieurs mois, qui fait ca.
> Me trompe-je?


ben je suis pas convaincu. Il y a enormement de logique complique (je 
reconnais sans probleme que je ne comprends pas) pour essayer de support 
le format ACR NEMA / Libidi / Papyruss: pour moi ca doit etre 
externaliser dans un dictionnaire.  Par exemple il n'y pas pas de notion 
de dictionaire qd on un image DICOM. Notre approche pour trouver le 
spacing c'est ben on essai DICOM V3, puis ACR NEMA puis d'autre champs 
selon l'humeur. Non c'est faux, une image est lu par rapport a un 
dictionaire. Si l'image ne respecte pas le dict: c'est que notre 
heurisitque pour determiner le format est foireuse soit l'image est 
foireuse et dans ce cas il faut un warning.

Pareil pour les Serie, j'aimerais qu'on fasse la difference entre un 
gdcm::SerieWriter et un gdcm::Writer. Le premier ecris une serie le 
second ecris une image. Donc en bonne logique pour ecrire SerieWriter on 
ecris  proprelemt gdcm::Writer et on fait un loop sur la derniere 
coordonnees (ca permet par exemple d'ecrire une serie d'image 3D ...)



> J'avais proposé, en son temps, de faire un 'Check Header'qu'on aurait 
> lancé juste avant d'écrire, et puis laissé tomber l'idée :
> Si, lors du Test Write Dicom (ou l'on prend tous les champs, un par un, 
> pour faire un nouveau 'gdcm::Document'), on trouve une VM qui n'est pas 
> bonne, que fait-on? On refuse d'écrire le fichier, alors qu'il aurait 
> été la copie conforme d'un fichier Siemens, par exemple?


C'est pour ca que je fais une difference entre un gdcmWriter et un 
gdcmValidator. Le premier ecris ce qu'on lui donne (donc dans le cas 
Siemens il gardera le bug dans la chaine de caractere). Mais on laisse 
la chance a un utilsateur de lire l'image, de la valider PUIS de 
l'ecrire. Les roles sont completement independant.

> Quant aux champs de type 1, 1C, 2, 2C, 3, vu que leur type varie selon 
> la modalité (et que les constructeurs ne le respectent pas), ca ferait 
> de la programmation kilometrique, pour, probablement pas grand-chose.

Je vois pas de quoi tu parles ? C'est quoi ces champs ?




Je suis toujours sur la retenue qd quelqu'un lance qu'il veut reinventer 
la roue, mais je reste persuade qu'il a des choix dans gdcm: que soit je 
ne comprends vraiment pas soit que sont -IMHO- sont mauvais voire faux. 
Je n'ai pas passer bcp de temps a explorer l'implementation si ca ce 
trouve il y a bcp de similitudes (plus que je ne pense peutr etr). Dans 
tous les cas ca reste plus un sondage d'opinion qu'autre chose vu que je 
n'ai en ce moment pas du tout de temps a consacrer a yet another dicom 
library...

Mathieu



More information about the Dcmlib mailing list