【问题标题】:DICOM field have more value than expectedDICOM 字段的价值超出预期
【发布时间】:2015-10-13 15:01:48
【问题描述】:

我正在使用 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”)是最后一个。在这种情况下,一切都很好。但在某些特定情况下,正确的值存储在两个 '0' 之间。

我也尝试过使用不同的转储程序 (DCM4CHE 2.0.23),它给了我相同的结果。

我想知道为什么会这样。不仅如此,如何得到正确的值?

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

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

【问题讨论】:

    标签: batch-file dicom dcm4che dcmtk


    【解决方案1】:

    很可能,额外的 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 标签。然后你应该能够像你一样解析令牌。

    【讨论】:

    • 它给了我类似的东西。我仍然有 3 个实例编号等于 0,4 和 0。显然,我想要 4,它在中间。这个标签是 (0020,0013)。我做了('@echo. ^|c:\Libs\dcmtk-3.6.0\bin\dcmdump +p +P "0020,0013" %%i'),但仍然有最后一个值,0 ...如何进行?
    【解决方案2】:
    • 在循环内添加比较:

      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
      

    【讨论】:

      猜你喜欢
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多