ボリューム内の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)
に等しくなければなりません。したがって、スライスの順序は、必要なものよりも逆になっているようです。正しいスライス順序を計算するために何か他のものを考慮する必要があるかどうかを知りたいと思っています。
お返事ありがとうございます。それは私を少し安心させます。しかし、この順序が恣意的であれば、解剖学的ラベルはどのように意味がありますか? – Luca
「患者向き(0020,0020)」という解剖学的ラベルをお持ちですか?もしそうなら、これは面内の向きにすぎないことに注意してください。スライス順序は、面内方向に影響しません。また、「患者向き」の値は、両方の値が存在する場合、「画像の向き(患者)」の値と一致しなければならない。 –
私はスルー・プレイスの方向にスクロールするときのことを意味します...注文が一意でない場合、頭 - つま先またはそれ以外の方向から行くかどうかをどのように判断できますか? – Luca