[Dcmlib] [DICOM] Ongoing effort for supporting Private Dictionaries in ITK-gdcm
Jean-Pierre ROUX
jean-pierre.roux at creatis.insa-lyon.fr
Tue Sep 6 05:54:49 CEST 2005
At 21:46 -0400 5/09/05, Mathieu Malaterre wrote:
>Hello,
>
> There has been some recent discussion for improving support
>of private dictionary in ITK, namely it's dicom library: gdcm. For
>now gdcm has only very basic support of additional dictionaries. In
>fact the structure that hold the lookup from a DICOM tag to it's
>name, is a std::map. Therefore we can only lookup one and only one
>tag (since it's the key of the std::map). Unfortunately private
>dictionary can be shared across manufacturer (eg.
>philips/siemens/SPI). And often the manufacturer reuse old tags for
>there newer stations. Thus the current implementation of gdcm only
>allow loading one dictionary (or else we might have collisions).
>As a side note, so far only two or three tags from private
>dictionary have been reported as being needed to read the image
>(that's the reason why gdcm was initially designed without support
>for those).
Hi, Mathieu,
Do you mean some images are *not* 'gdcm readable' when their relevant
Private Dicom Dictionary is not used? (in this case, it's a gdcm bug
we (-I-) have to fix)
Or just that users want to get the value of some Dicom entries
belonging to a Shadow (private) Group?
*With* or *without* the Private Dictionary, the value is available in memory.
If user knows, he wants to get the value of, say (0019,5100) element,
he just writes :
gdcm::DocEntry *e = f->GetDocEntry(0x0019,0x5100);
and then :
std::string value = f->GetDocEntryValue(e);
or
uint8_t *value = f->GetDocEntryBinArea(e);
whether the value is 'std::string representable' or not
(user knows that)
The only differerence between using or not a Private Dict is when the
Private element is 'Implicit VR' :
Without using a Private Dict, the value will always be considered as
'non std::string representable', even if actualy it is (gdcm cannot
guess) !
I can/shall add a 3 lines accessor to force the returned value to be
a std::string
std::string value = f->GetDocEntryForcedStringValue(e);
Wouldn't it solve the problem ?
JP
>
> The other approach would be to have one std::map per
>dictionary (eg. the public one and then one private per
>station/manufacter). Therefore the problem of collisions will be
>avoided. Drawbacks: the time to lookup is no longer O(log(n)) but
>O(nb_dict*log(n)) for the worse case. This also means that we have
>to hold in memory much more dictionaries.
The problem will to 'guess' which private Dict we has to use with a
given image..
>
> Anyway the work can be done -I believe- without breaking gdcm
>API, only internal structures will be changed. But this would be a
>very long effort as there are multiple vendor, and multiple
>station(*). Everyone of which require generating a custom dictionary
>to describe it.
>
>What is the current need of such feature in ITK community ?
>
>Comments welcome,
>Mathieu
>
>Just for fun here are the station for GEMS:
Nightmarish ...
>Applicare/RadWorks/Version 5.0
>Applicare/RadWorks/Version 6.0
>Applicare/RadWorks/Version 6.0/Summary
>DLX_ANNOT_01
>DLX_EXAMS_01
>DLX_LKUP_01
>DLX_PATNT_01
>DLX_SERIE_01
>GEIIS
>GEMS_3DSTATE_001
>GEMS_ACQU_01
>GEMS_ACRQA_1.0 BLOCK1
>GEMS_ACRQA_1.0 BLOCK2
>GEMS_ACRQA_1.0 BLOCK3
>GEMS_ACRQA_2.0 BLOCK1
>GEMS_ACRQA_2.0 BLOCK2
>GEMS_ACRQA_2.0 BLOCK3
>GEMS_ADWSoft_3D1
>GEMS_ADWSoft_DPO
>GEMS_AWSOFT_CD1
>GEMS_AWSoft_SB1
>GEMS_CTHD_01
>GEMS_CT_CARDIAC_001
>GEMS_CT_HINO_01
>GEMS_CT_VES_01
>GEMS_DRS_1
>GEMS_GENIE_1
>GEMS_GNHD_01
>GEMS_HELIOS_01
>GEMS_IDEN_01
>GEMS_IMAG_01
>GEMS_IMPS_01
>GEMS_IQTB_IDEN_47
>GEMS_PARM_01
>GEMS_PATI_01
>GEMS_PETD_01
>GEMS_RELA_01
>GEMS_SENO_02
>GEMS_SERS_01
>GEMS_STDY_01
>GEMS_YMHD_01
>GE_GENESIS_REV3.0
>Mayo/IBM Archive Project
>
>
>And some of the vendors(groups) are:
>Camtron
>GEMS
>Picker
>Siemens
>Vli
>Acuson
>ISG
>Papyrus
>Toshiba
>Agfa
>Elscint
>Philips
>SPI
>
>(*) Without mentioning that you have to parse a pdf file to generate
>a txt file, which usually contains typoes, and require manual
>investigation to fix the errors.
>_______________________________________________
>Dcmlib mailing list
>Dcmlib at creatis.insa-lyon.fr
>http://www.creatis.insa-lyon.fr/mailman/listinfo/dcmlib
Jean-Pierre ROUX
CREATIS - CNRS UMR 5515, INSERM U 630
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 creatis.univ-lyon1.fr
More information about the Dcmlib
mailing list