一个简单的问题,因为我正在开发基于dcm4che的Java应用程序......
我想计算/找到"位置"将dicom图像放入其序列(系列)中。按位置我的意思是找到这个图像是否是其系列中的第一个,第二个等。更具体地说,我想计算/找到:
序列中的切片数量
每个切片(dicom图像)在序列中的位置
对于第一个问题,我知道我可以使用标签0020,1002(但它并不总是填充)...对于第二个问题?
答案 0 :(得分:2)
如果您正在处理体积图像系列,订购系列的最佳方法是使用图像位置(患者)(0020,0032)。这是必需的Type 1标签(应始终具有值),它是图像平面模块的一部分。它将包含表示图像左上角的X,Y和Z值坐标,单位为mm。如果切片彼此平行,则切片之间只应更改一个值。 请注意,切片位置(0020,1041)是可选(类型3)元素,它可能不存在于DICOM文件中。
答案 1 :(得分:1)
我们使用InstanceNumber标记(0x0020,0x0013)作为切片位置的首选。如果没有InstanceNumber,或者它们都是相同的,那么我们使用SliceLocation标记(0x0020,0x1041)。如果两个标签都不可用,那么我们就放弃了。
我们检查InstanceNumber标签,使得Max(InstanceNumber) - Min(InstanceNumber)+ 1等于序列中的切片数量(以防一些制造商开始计数为0或1,甚至一些其他号码)。我们以同样的方式检查SliceLocation。
此max - min + 1则是序列中的切片数(替换标签ImagesInAcquisition 0x0020,0x1002)。
如果没有ImagesInAcquisition标签,我们无法事先知道预期有多少片......
答案 2 :(得分:0)
我认为如果切片位置可用,请使用它。它将与图像采集更加一致。如果它不可用,那么您必须使用或计算图像位置(患者)属性。第3部分C.7.6.2.1有关于这些属性的详细信息。
当你有一个倾斜的系列时,主要问题就出现了。如果您只使用图像位置(患者)的z值,则切片厚度/切片属性之间的间距可能不会改变,而切片位置通常会改变。这可能会给最终用户造成混淆。