【问题标题】:Get Dicom image position into a sequence将 Dicom 图像位置获取到序列中
【发布时间】:2015-07-14 10:20:12
【问题描述】:

一个简单的问题,我正在开发一个基于 dcm4che 的 java 应用程序......

我想计算/查找 dicom 图像在其序列(系列)中的“位置”。通过位置,我的意思是查找此图像是否是其系列中的第一个、第二个等。更具体地说,我想计算/查找:

  • 序列中的切片数

  • 每个切片(dicom 图像)在序列中的位置

对于第一个问题,我知道我可以使用标签 0020,1002(但它并不总是填充)...对于第二个问题?

【问题讨论】:

    标签: dicom dcm4che


    【解决方案1】:

    如果您正在处理体积图像系列,订购系列的最佳方式是使用图像位置(患者)(0020、0032)。这是一个必需的类型 1 标签(应该总是有值),它是图像平面模块的一部分。它将包含代表图像左上角的 X、Y 和 Z 值坐标,以 mm 为单位。如果切片彼此平行,则切片之间仅应改变一个值。 请注意,切片位置 (0020, 1041) 是可选的(类型 3)元素,它可能不存在于 DICOM 文件中。

    【讨论】:

    • 平行但从扫描仪的参考系倾斜的切片可能会更改所有 x、y 和 z 值。这可能导致这些单独的坐标值在切片之间不会发生适当的变化。不过,两个切片之间的 距离 应该是正确的。
    【解决方案2】:

    我们使用 InstanceNumber 标签 (0x0020, 0x0013) 作为切片位置的首选。如果没有 InstanceNumber,或者它们都相同,那么我们使用 SliceLocation 标签 (0x0020, 0x1041)。如果两个标签都不可用,那么我们就放弃。

    我们检查 InstanceNumber 标签,使得 Max(InstanceNumber) - Min(InstanceNumber) + 1 等于我们在序列中拥有的切片数(以防某些制造商从 0 或 1 开始计数,甚至某些其他号码)。我们以同样的方式检查 SliceLocation。

    然后这个 max - min + 1 就是序列中的切片数(代替标签 ImagesInAcquisition 0x0020, 0x1002)。

    如果没有 ImagesInAcquisition 标签,我们无法提前知道需要多少切片...

    【讨论】:

      【解决方案3】:

      我认为如果切片位置可用,请使用它。与图像采集更加一致。如果它不可用,那么您将不得不使用或计算图像位置(患者)属性。第 3 部分 C.7.6.2.1 节详细介绍了这些属性。

      当你有一个倾斜的系列时,主要问题就出现了。如果您只使用图像位置(患者)的 z 值,它可能不会因切片属性之间的切片厚度/间距而改变,而切片位置通常会改变。这可能会给最终用户带来困惑。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-16
        • 1970-01-01
        • 1970-01-01
        • 2017-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多