我正在实现一种方法来对卷中的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)
,除非在我的情况下它具有相反的符号。因此切片排序似乎与它应该是相反的。我想知道我还需要考虑其他因素来计算正确的切片顺序。
答案 0 :(得分:4)
没有理由期望您的实现计算的偏移的符号或值应该与name
值的符号或值相同。根据DICOM规范
切片位置(0020,1041)定义为相对位置 图像平面以mm表示。这些信息是相对于 未指定的实现特定参考点。
请注意,根本没有指定位置的方向,并且明确表示原点是任意的,这意味着保证计算与Slice Location (0020,1041)
之间唯一匹配的是距离(绝对值)任何2个切片的位置的差值)。
另请注意,Slice Location
是类型3 - 根本不需要提供。
关于切片排序 - 演示顺序是您的决定。如果您想要空间排序,则需要确定订购的标准。例如,是否应从头部或脚部开始呈现轴向切片?这完全是你的电话,它将取决于你的软件的应用程序(预期用途)。
如果您不关心几何图形,则可以显示由Slice Location
订购的图像。但是不能保证排序具有任何几何意义(尽管它通常有)。