J'ai mis la terminology histoire de rentre consistant gdcm. Je trouve
que c'est aussi important pour que l'on se mette d'accord sur le nom
des classes. Si on est d'accord sur la termino alors le nom des classes
devraient etre deduit facilement.<br>
Sinon tu as raison gdcm2 fais un melange entre Read/Load sur les
sequences. Apres discussion avec Kitware, c'est assez mauvais comme
design(*) de mettre les methodes Read/Load dans l'objet. Il me faudra
externaliser tout le code pour faire une classe identique a gdcm::Parse
pour faire un gdcm::Read et un gdcm::Skip ...<br>
<br>
Tu as aussi raison pour les info minimales. Un gdcm::ImageReader aura
besoin d'un gdcm::Parser (FileSeeker) pour acceder au groupe 0028.
Cette remarque devrait etre dans l'ImageReader, si c'est pas clair je
peux mettre plus de details. J'aime toujours pas le AddForceLoad,
surtout qd dans notre cas c'est linverse : par defaut on ne lit rien
(Parsing). Uniquement une classe specialiser pour les DICOMDIR pourra
demander des infos precises (intelligentes).<br>
<br>
Mathieu<br>
(*) Read est different selon que l'on lit du DICOM ou ACR NEMA. Faire
une classe laisse aussi l'option aux advanced users de faire une sous
classes plus intelligente...<br><br><div><span class="gmail_quote">On 1/6/06, <b class="gmail_sendername">Jean-Pierre Roux</b> <<a href="mailto:jpr@creatis.insa-lyon.fr">jpr@creatis.insa-lyon.fr</a>> wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Salut, Mathieu.<br><br>--> Veux-tu dire que ces options existent, ou bien que c'est qq chose<br>qui devra etre ajouté?<br><br>>+<br>>+ TERMINOLOGY:<br>>+ - SKIP: DICOM has Group Length which allow us to skip elements
<br>>+ - Seek: Read a Group/Element+Length and then *seek* through an element<br>>+
- Parse: Browse through a DICOM file without loading any information
other than the minimum need for it's parsing (almost nothing for ACR,
and group 0002 for DICOM)<br>>+ - Load: Actually load each and every single element of a DICOM file. Very usefull for a PRINT operation<br>>+
- DUMP/PRINT: Operation that consist of displaying all information (up
to a certain level of detail) contained in a DICOM file<br>><br>><br>><br>><br>-->J'ai modifie l'operateur << de Value pour qu'il affiche, lorsque<br>c'est possible la valeur des DataElement.<br>L'option par defaut est donc actuellement Load, c'est ca?
<br><br>--> Je n'ai pas trouve ce qu'il fallait faire, (ou si ca existe) pour<br>charger (recursivement) une SequenceOfItems.<br>Ca n'est pas fait par defaut, n'est ce pas?<br>C'est une bonne option, car dans 99% des cas, on se tape de leur contenu.
<br>Si l'utilisateur en a besoin (par exemple 'Icon Image Sequence'), il<br>devrait pouvoir faire qq chose comme 'ForceLoad(tag)'.<br>Dans le cas d'un DICOMDIR, *toutes* les info pertinentes sont dans une<br>seule SequenceOfItems. Il est donc imporatnt qu'on puisse la charger de
<br>maniere simple.<br><br>--> En plus du Parse (qui ne charge rien), il faudrait une métode qui<br>charge uniquement les 10 elements strictement necessaires pour la<br>lecture des pixels d'une image,<br>a savoir :<br>
imageElem  
0028 0002
"1"                    //
Samples per Pixel<br>imageElem   0028 0004 "
"                    //
Photometric Interpretation<br>imageElem   0028 0006
"0"                    //
Planar Configuration<br>imageElem   0028 0008
"1"                    //
Number of Frames<br>imageElem   0028 0010
"0"                    //
Rows<br>imageElem   0028 0011
"0"                    //
Columns<br>imageElem   0028 0030 "1.0\1.0
"            
// Pixel Spacing<br>imageElem   0028 0100 "
"                    //
Bits Allocated<br>imageElem   0028 0101 "
"                    //
Bits Stored<br>imageElem   0028 0103 "
"                    //
Pixel Representation<br><br>et une autre qui permette de demander a l'utilisateur de preciser<br>*quels* DataElements il veut qu'on charge (Pour creer un DicomDir, par<br>exemple, ou pour avoir les info necessaires a un browser d'images
<br>évolué, il y a 40 elements utiles (jamais vu personne qui a besoin<br>d'autre chose, mais si l'utilisateur en veut 3 autres, il dit<br>'AddForceLoad(tag)', et son pb est resolu.<br><br>
0010 0010
""                    
// Patient's Name<br> 0010 0020
""                    
// Patient ID<br> 0010 0030
""                    
// Patient's Birthdate<br> 0010 0040
""                    
// Patient's Sex<br> 0008
0020                        //
Study Date       // Type 1C<br>Conditional Element<br>
0008
0030                        //
Study Time       // Type 1C<br>Conditional Element<br>
0008
0050                        //
Accession Number // Type 1C<br>Conditional Element<br> 0008 1030
""                    
// Study Description<br> 0020 000d
""                    
// Study Instance UID :<br> 0020 0010
""                    
// Study ID :<br> 0008 0021
""                    
// Series Date<br> 0008 0031
""                    
// Series Time<br> 0008 0060
""                    
// Modality<br> 0008 0080
""                    
// Institution Name  :<br> 0008 0081
""                    
// Institution Address :<br> 0008 1010
""                    
// Station Name<br> 0008 1050
""                    
// Performing Physician's Name<br> 0008 103e
""                    
// Series Description :<br> 0018 1030
""                    
// Protocol Name<br> 0020 000e
""                    
// Series Instance UID :<br> 0020 0011
"0"                    //
Series Number :<br>   000 1512
""                    
//  Transfer Syntax<br>   000 0008
""                    
// Image Type<br> 0008 0016
""                    
// SOP Class UID :<br> 0008 0018
""                    
// SOP Instance UID :<br> 0008 0023
""                    
// Content Date<br> 0008 0033
""                    
// Content Time<br> 0018 1060
"0"                    //
Trigger Time<br> 0020 0013
"0"                    //
Image Number<br> 0020 0032 "1.0\1.0\1.0 "         // Image Position Patient<br> 0020 0037 "1\0\0\0\1\0 "         // Image Orientation Patient<br>
0020 0052
"0"                    //
Frame of Reference UID<br> 0020 1041
"0.0"                  //
Slice Location<br> 0020 4000
""                    
// Image Comments<br> 0028 1052 "0
"                  
// Rescale Intercept<br> 0028 1053 "1
"                  
// Rescale Slope<br> 0050 0004
"0"                    //
Calibration Image<br><br>JP<br><br><br><br></blockquote></div><br>