2015-10-13 12 views
5

DCMTK(3.6.0)ライブラリを使用して、画像番号である(0020,0013)タグの値を取得します。DICOMフィールドの値が予想よりも高い

私は、それは通常、うまくいくが、時にはこの値は常に全体セリエに「0」に設定されているバッチスクリプトで

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) 

を以下のように使用します。

私たちが見ることができるように、このコマンドを使用して、

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」ではありません)を取得する値は最後です。この場合、すべてが良いです。しかし、特定の場合には、正しい値が2つの '0'の間に格納されます。

私はまた別のダンパー(DCM4CHE 2.0.23)で試してみましたが、同じ結果が出ました。

なぜこれが起こっているのか知りたい。それ以上に正しい値を得る方法は?

正しい番号まで0を取り除く方法はありますか?

上記の私のコマンドラインは、最後のフィールドを取る...私は思う。

答えて

6

ほとんどの場合、余分なInstanceNumberタグはの一部でありますダイコンのシーケンスであり、あなたが望むものではないかもしれません。

あなたは、このようにdcmdump実行する場合:

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

あなたはず得るように、完全にスコープ出力:それはあなたが本当に欲しいInstanceNumberだけ正確に検証する問題であるべきその後

(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 
    ) 
    
  • またはfind[0]をフィルタリング:

    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 
    
関連する問題