计算切片位置与DICOM文件中的切片位置不同

时间:2016-10-21 15:22:30

标签: dicom

我正在实现一种方法来对卷中的DICOM切片进行空间排序。我这样做的方法是按照切片法线的位置排序。计算方法如下:

slice_normal = [0, 0, 0] 
dir_cosines = ds[0x0020, 0x0037]  # Direction cosines 
slice_normal[0] = dir_cosines[1] * dir_cosines[5] - dir_cosines[2] * dir_cosines[4] 
slice_normal[1] = dir_cosines[2] * dir_cosines[3] - dir_cosines[0] * dir_cosines[5] 
slice_normal[2] = dir_cosines[0] * dir_cosines[4] - dir_cosines[1] * dir_cosines[3] 

image_pos = ds[0x0020, 0x0032]  # IPP 
distance_along_normal = 0 
for i in range(len(slice_normal)): 
    distance_along_normal += slice_normal[i] * image_pos[i] 

现在,此值distance_along_normal应该等于slice location(0x0020, 0x1041),除非在我的情况下它具有相反的符号。因此切片排序似乎与它应该是相反的。我想知道我还需要考虑其他因素来计算正确的切片顺序。

1 个答案:

答案 0 :(得分:4)

没有理由期望您的实现计算的偏移的符号或值应该与name值的符号或值相同。根据DICOM规范

  

切片位置(0020,1041)定义为相对位置   图像平面以mm表示。这些信息是相对于   未指定的实现特定参考点。

请注意,根本没有指定位置的方向,并且明确表示原点是任意的,这意味着保证计算与Slice Location (0020,1041)之间唯一匹配的是距离(绝对值)任何2个切片的位置的差值)。

另请注意,Slice Location是类型3 - 根本不需要提供。

关于切片排序 - 演示顺序是您的决定。如果您想要空间排序,则需要确定订购的标准。例如,是否应从头部或脚部开始呈现轴向切片?这完全是你的电话,它将取决于你的软件的应用程序(预期用途)。

如果您不关心几何图形,则可以显示由Slice Location订购的图像。但是不能保证排序具有任何几何意义(尽管它通常有)。