2015-10-13 35 views
5

我正在使用DCMTK(3.6.0)庫來獲取(0020,0013)標記的值,該標記是圖像編號(即圖像序號的切片編號)。DICOM字段具有比預期的更多的值

我使用批處理腳本

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) 

它通常遠遠以下,但有時該值始終設置爲「0」整個意甲。

我企圖把與此命令

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 

正如我們所看到的,有時值來獲得(這不是「0」)是最後一個。在這種情況下,一切都很好。但在某些特定情況下,正確的值存儲在兩個「0」之間。

我也試過用不同的自卸車(DCM4CHE 2.0.23),它給了我相同的結果。

我想知道爲什麼會發生這種情況。更重要的是,如何獲得正確的價值?

有沒有一種方法,在批處理文件中,以消除0,直到正確的數字?

默認情況下,我上面引用的命令行採用最後一個字段......我想。

回答

6

最有可能的,額外的實例號標籤的一部分一個dicom序列,可能不是你想要的。

如果運行dcmdump這樣的:

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

你應該得到全範圍的輸出,如:

(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 

那麼它應該只是驗證完全是一個無論哪個實例號你真的想(可能是全球之一)

在一個批處理文件中,您可能需要執行findstr來挑選該行。您可能想嘗試:

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

拉出「全局」InstanceNumber標記。那麼你應該能夠解析令牌。

+0

它給了我類似的東西。我仍然有3個實例編號等於0,4和0.顯然,我想要4,這是在中間。這個標籤是(0020,0013)。我做'('@echo。^ | c:\ Libs \ dcmtk-3.6.0 \ bin \ dcmdump + p + P「0020,0013」%% i')'但仍然有最後一個值0。 .. 如何進行 ? – Raccoon

1
  • 添加環內的比較:

    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 
    ) 
    
  • 或過濾掉[0]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