DICOM字段的价值超出预期

Atn*_*ize 5 batch-file dicom dcm4che dcmtk

我正在使用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)
Run Code Online (Sandbox Code Playgroud)

它通常很顺利,但有时这个值总是设置为整个系列的'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
Run Code Online (Sandbox Code Playgroud)

我们可以看到,有时得到的值(不是'0')是最后一个.在这种情况下,一切都很好.但在某些特定情况下,正确的值存储在两个"0"之间.

我也试过一个不同的翻斗车(DCM4CHE 2.0.23),它给了我相同的结果.

我想知道为什么会这样.更重要的是,如何获得正确的价值?

在批处理文件中,有没有办法消除0直到正确的数字?

默认情况下,上面引用的命令行采用最后一个字段......我想.

rkh*_*rkh 6

最有可能的是,额外的InstanceNumber标记是dicom序列的一部分,可能不是您想要的标记.

如果你像这样运行dcmdump:

dcmdump +p +P "0020,0013" PathToInvalideDICOM\img.dcm
Run Code Online (Sandbox Code Playgroud)

您应该获得完全范围的输出,如:

(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
Run Code Online (Sandbox Code Playgroud)

那么它应该只是确切地验证你真正想要的InstanceNumber(可能是全局的)

在批处理文件中,您可能希望使用findstr来挑选该行.您可能想尝试:

dcmdump +p +P "0020,0013" PathToInvalideDICOM\img.dcm | findstr /b (0020
Run Code Online (Sandbox Code Playgroud)

提取"全局"InstanceNumber标记.然后你应该能够像你一样解析令牌.