问题描述
有谁知道如果没有 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 坐标系中的颅尾方向)。