5

DCMTK (3.6.0) ライブラリを使用して、(0020,0013) タグの値を取得しています。これは、シリーズのスライス番号とも呼ばれる画像番号です。

バッチスクリプトで次を使用します

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」ではない) が最後になる場合があります。この場合、すべてが良いです。ただし、特定のケースでは、正しい値が 2 つの「0」の間に格納されます。

別のダンパー (DCM4CHE 2.0.23) でも試してみましたが、同じ結果が得られました。

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

バッチ ファイルで、正しい番号になるまで 0 を削除する方法はありますか?

デフォルトでは、上記のコマンドラインは最後のフィールドを取ります...と思います。

4

2 に答える 2

6

ほとんどの場合、余分な InstanceNumber タグは 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

次に、本当に必要な InstanceNumber (おそらくグローバルなもの) を正確に検証するだけです。

バッチ ファイルでは、おそらく findstr を実行して行を選択する必要があります。あなたは試してみたいかもしれません:

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

「グローバル」な InstanceNumber タグを引き出す。次に、トークンをそのまま解析できるはずです。

于 2015-10-13T16:50:36.560 に答える
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]またはwith を除外します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
    
于 2015-10-13T15:06:03.737 に答える