2015-10-13 17 views
5

Ich benutze die DCMTK (3.6.0) -Bibliothek, um den Wert des (0020,0013) -Tags zu erhalten, der die Bildnummer alias die Schichtnummer der Serie ist.DICOM-Feld haben mehr Wert als erwartet

Ich benutze das folgende in einer Batch-Skript

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) 

es in der Regel gut geht, aber manchmal wird dieser Wert immer auf ‚0‘ auf die ganze Serie.

Ich habe versucht, dass mit diesem Befehl

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 

dump Wie wir manchmal den Wert zu sehen zu bekommen ist (was nicht der ‚0‘ ist) die letzte. In diesem Fall ist alles gut. In einigen besonderen Fällen wird der korrekte Wert zwischen zwei "0" gespeichert.

Ich habe es auch mit einem anderen Dumper (DCM4CHE 2.0.23) versucht und es gibt mir das gleiche Ergebnis.

Ich möchte wissen, warum das passiert. Und mehr als das, wie bekomme ich den richtigen Wert?

Gibt es eine Möglichkeit, in einer Batch-Datei die 0 bis zur richtigen Zahl zu eliminieren?

Standardmäßig nimmt meine oben genannte Befehlszeile das letzte Feld ... ich denke.

Antwort

6

Höchstwahrscheinlich die zusätzlichen InstanceNumber Tags sind Teil eine dicom-Sequenz und möglicherweise nicht diejenigen, die Sie wollen.

Wenn Sie laufen dcmdump wie folgt aus:

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

Sie sollten die Vollbereichs-Ausgabe erhalten wie:

(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 

Dann sollte es eine Angelegenheit von nur genau wollen die InstanceNumber Sie wirklich Validierung sein (wahrscheinlich die globale)

In einer Batch-Datei möchten Sie wahrscheinlich ein Findstr machen, um die Linie auszuwählen. Möglicherweise möchten Sie Folgendes versuchen:

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

Um das "globale" InstanceNumber-Tag herauszuziehen. Dann sollten Sie in der Lage sein, die Token wie Sie zu analysieren.

+0

Es gibt mir etwas ähnliches. Ich habe noch 3 Instanznummern gleich 0,4 und 0. Offensichtlich möchte ich die 4, die auf der Mitte ist. Dieser Tag ist der (0020,0013). Und ich mache '('@echo.^| C: \ Bibliotheken \ dcmtk-3.6.0 \ bin \ dcmdump + p + P" 0020,0013 "%% i')' aber immer noch den letzten Wert, die 0. .. Wie geht es weiter? – Raccoon

1
  • einen Vergleich innerhalb der Schleife hinzufügen:

    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 
    ) 
    
  • oder die [0] mit find herauszufiltern:

    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