如何从DICOM文件中获取系列数?

时间:2019-01-08 20:28:49

标签: dicom

我在DICOM中有一些4维MR数据。第四维可以是时间,DWI中的b值或其他任何值。如何确定我在第四维中有多少个切片和几个序列? 例如,我有400张图像。如何确定是否有100个序列和4个切片,反之亦然?

编辑: 我已经通过检查切片的位置弄清楚了。如果给定位置重复,则增加堆栈数。我的Python代码如下:

def getNumOfStacks(self, someImage):
    sliceDict = dict()
    for n in range(0, someImage.ImagesInAcquisition):
        location = pydicom.dcmread(self.path+self.fileList[n]).SliceLocation
        if location in sliceDict:
            sliceDict[location] = sliceDict.get(location) + 1 
        else:
            sliceDict[location] = 1
    return list(sliceDict.values())[0]

2 个答案:

答案 0 :(得分:2)

唯一的方法是检查每个单个实例的SeriesInstanceUID(标记号0020,000e)的值。

根据所使用的工具,解决方案可能会有所不同。例如,如果您有dcmtkgdcm,那么在bash中将是这样的:

find /path/to/dicom/files -exec dcmdump "{}"  2>/dev/null ";" | grep SeriesInstanceUID |sort  -u

如果您使用gdcm,则将gdcmdump放在上面的dcmdump上。

答案 1 :(得分:2)

DICOM中的MRI图像具有两种不同的风格:

  • “传统” MR图像存储(SOP类UID 1.2.840.10008.5.1.4.1.1.4)
  • 增强的MR图像存储(SOP类UID 1.2.840.10008.5.1.4.1.1.4.1)

对于这两者,就像Bartlomiej所写的那样,系列实例UID可用于确定哪个切片属于同一系列,并且通常一个系列代表一堆图像。

对于增强型MR,引入了堆栈的概念。也就是说,单个DICOM对象(“文件”)包含多个帧(“图像”),这些帧可以细分为堆栈。在“每帧功能组序列”(5200,9230)中,您可以找到特定于各个帧的属性。在这种情况下,您应该阅读堆栈ID(0020,9056)和堆栈中位置编号(0020,9057),以分隔堆栈并在堆栈中对切片进行排序。