2015-10-13 7 views
5

Sto utilizzando la libreria DCMTK (3.6.0) per ottenere il valore del tag (0020.0013) che corrisponde al numero di immagine o al numero di slice della serie.Il campo DICOM ha più valore del previsto

Io uso il seguente in uno script batch

for /f "tokens=2 delims=[]" %%a in ('@echo. ^|c:\Libs\dcmtk-3.6.0\bin\dcmdump +P "0020,0013" %%i') do (set img_no=%%a) 

E di solito va bene, ma a volte questo valore è impostato a '0' per l'intera serie.

ho cercato di eseguire il dump che con questo comando

C:\Libs\dcmtk-3.6.0\bin>dcmdump +P "0020,0013" PathToInvalideDICOM\img.dcm 
(0020,0013) IS [0]          # 2, 1 InstanceNumber 
(0020,0013) IS [4]          # 2, 1 InstanceNumber 
(0020,0013) IS [0]          # 2, 1 InstanceNumber 

C:\Libs\dcmtk-3.6.0\bin>dcmdump +P "0020,0013" PathToCorrectDICOM\img.dcm 
(0020,0013) IS [0]          # 2, 1 InstanceNumber 
(0020,0013) IS [5]          # 2, 1 InstanceNumber 

Come possiamo vedere, a volte il valore per ottenere (che non è il '0') è l'ultimo. In questo caso, tutto è buono. Ma in alcuni casi particolari, il valore corretto viene memorizzato tra due "0".

Ho anche provato con un altro dumper (DCM4CHE 2.0.23) e mi da lo stesso risultato.

Voglio sapere perché questo sta accadendo. E oltre a questo, come ottenere il valore corretto?

C'è un modo, in un file batch, di eliminare lo 0 fino al numero corretto?

Per impostazione predefinita, la mia riga di comando citata sopra prende l'ultimo campo ... Penso.

risposta

6

Molto probabilmente, i tag InstanceNumber supplementari sono parte di una sequenza dicom e potrebbe non essere quella che vuoi.

Se si esegue dcmdump in questo modo:

dcmdump +p +P "0020,0013" PathToInvalideDICOM\img.dcm 

si dovrebbe ottenere l'output pienamente ambito come:

(0008,1111).(0020,0013) IS [0]          # 2, 1 InstanceNumber 
(0020,0013) IS [1]          # 2, 1 InstanceNumber 
(5200,9230).(2005,140f).(0020,0013) IS [1]          # 2, 1 InstanceNumber 

Allora dovrebbe essere una questione di solo convalidare esattamente quali InstanceNumber si vuole veramente (probabilmente quello globale)

In un file batch, probabilmente si vuole fare un findstr per selezionare la linea. Potresti provare:

dcmdump +p +P "0020,0013" PathToInvalideDICOM\img.dcm | findstr /b (0020 

Per estrarre il tag "globale" InstanceNumber. Quindi dovresti essere in grado di analizzare i token come hai fatto tu.

+0

Mi dà qualcosa di simile. Ho ancora 3 numeri di istanza uguale a 0,4 e 0. Ovviamente, voglio il 4, che è al centro. Questo tag è il (0020,0013). E faccio '('@echo.^| C: \ Libs \ dcmtk-3.6.0 \ bin \ dcmdump + p + P" 0020.0013 "%% i')' ma ha ancora l'ultimo valore, lo 0. .. Come procedere ? – Raccoon

1
  • Aggiungere un confronto all'interno del ciclo:

    for /f "tokens=2 delims=[]" %%a in (' 
        @echo. ^|c:\Libs\dcmtk-3.6.0\bin\dcmdump +P "0020,0013" %%i 
    ') do (
        if not "%%a"=="0" set img_no=%%a 
    ) 
    
  • o filtrare il [0] con find:

    for /f "tokens=2 delims=[]" %%a in (' 
        @echo. ^|c:\Libs\dcmtk-3.6.0\bin\dcmdump +P "0020,0013" %%i ^|find /v "[0]" 
    ') do set img_no=%%a 
    
Problemi correlati