对没有 SliceLocation 属性的 DICOM 图像进行排序

问题描述

有谁知道如果没有 SliceLocation 属性是否可以对 dicom 文件进行排序?

“排序”是指纵向(以头尾方向)排列图像,最高级的图像首先是劣质的图像。

查看论坛后发现 SliceLocation 是一个可选参数。

我可以访问我的 dicom 数据集中的以下属性

(0008,0018) SOP Instance UID                    UI: ID_32fede0dc
(0008,0060) Modality                            CS: 'CT'
(0010,0020) Patient ID                          LO: 'ID_4c8ee851'
(0020,000d) Study Instance UID                  UI: ID_a362744476
(0020,000e) Series Instance UID                 UI: ID_1ec35eec9c
(0020,0010) Study ID                            SH: ''
(0020,0032) Image Position (Patient)            DS: [-115,-1,146.599976]
(0020,0037) Image Orientation (Patient)         DS: [1,1,0]
(0028,0002) Samples per Pixel                   US: 1
(0028,0004) Photometric Interpretation          CS: 'MONOCHROME2'
(0028,0010) Rows                                US: 512
(0028,0011) Columns                             US: 512
(0028,0030) Pixel Spacing                       DS: [0.44921875,0.44921875]
(0028,0100) Bits Allocated                      US: 16
(0028,0101) Bits Stored                         US: 12
(0028,0102) High Bit                            US: 11
(0028,0103) Pixel Representation                US: 0
(0028,1050) Window Center                       DS: [00036,00036]
(0028,1051) Window Width                        DS: [00080,00080]
(0028,1052) Rescale Intercept                   DS: "-1024.0"
(0028,1053) Rescale Slope                       DS: "1.0"
(7fe0,0010) Pixel Data                          OW: Array of 524288 elements

最初我虽然图像位置(患者)可能会起作用,但这似乎并没有按顺序排列图像。 我需要一个序列,因为时间信息与异常检测相关。

有人有什么好主意吗,或者这根本不可能?

我正在使用:

  • pydicom 1.4.2
  • python 3.6.9

解决方法

如果该标签可用,最好使用 Image Position (Patient) [(0020,0032)] 按位置对图像进行排序(例如在 CT 和 MR 图像中总是如此)。这是最可靠的方法。

由于标签包含三个元素,分别代表 DICOM coordinate system 中的 x、y 和 z 坐标,因此您最好按主轴排序,例如位置变化最大的轴。在大多数情况下,您可能已经知道该轴(在您的情况下,您想对颅尾进行排序,所以轴应该在那个方向),或者您可以通过比较切片位置轻松检查它,但您也可以从Image Orientation (Patient)

Image Orientation (Patient) [(0020,0037)] 包含归一化的行和列向量。要得到主轴,您可以将它们相乘,在得到的向量中,绝对值最大的分量将显示主轴。

在您的示例中,您有行向量和列向量 (1,0) 和 (0,1,0),通过将它们相乘得到 (0,1),这意味着主轴是z 轴(例如 DICOM 坐标系中的颅尾方向)。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...