2016-10-21 14 views
0

ボリューム内の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)に等しくなければなりません。したがって、スライスの順序は、必要なものよりも逆になっているようです。正しいスライス順序を計算するために何か他のものを考慮する必要があるかどうかを知りたいと思っています。

答えて

3

実装によって計算されたオフセットまたは符号の値がSlice Location (0020,1041)値の符号または値と同じである必要があるとは限りません。 DICOM仕様書に従って

スライス位置(0020,1041)は、mmで表される イメージプレーンの相対位置として定義されます。この情報は、 特定されていない実装固有の参照ポイントに関連しています。

位置の方向が全く指定されていない場合、唯一のものは、あなたの計算とSlice Locationは(距離の絶対値と一致することを保証することを意味し、原点は任意であることを明示的に言われていることに注意してくださいその差の2つのスライスの位置のうちの1つを選択する。

また、Slice Locationはタイプ3であることに注意してください。全く提供する必要はありません。

スライスオーダリングに関しては、プレゼンテーションオーダーはあなたの判断です。空間的な順序付けが必要な場合は、順序付けの基準を決定する必要があります。例えば、軸線方向スライスは頭部から、または足部から始めるべきですか?それは完全にあなたの呼び出しであり、それはあなたのソフトウェアのアプリケーション(意図された使用)に依存します。

ジオメトリを気にしない場合は、たとえばInstance Number (0020,0013)の順序で画像を表示できます。しかし、注文に何らかの幾何学的意味があるとは保証されません(通常はありますが)。

+0

お返事ありがとうございます。それは私を少し安心させます。しかし、この順序が恣意的であれば、解剖学的ラベルはどのように意味がありますか? – Luca

+0

「患者向き(0020,0020)」という解剖学的ラベルをお持ちですか?もしそうなら、これは面内の向きにすぎないことに注意してください。スライス順序は、面内方向に影響しません。また、「患者向き」の値は、両方の値が存在する場合、「画像の向き(患者)」の値と一致しなければならない。 –

+0

私はスルー・プレイスの方向にスクロールするときのことを意味します...注文が一意でない場合、頭 - つま先またはそれ以外の方向から行くかどうかをどのように判断できますか? – Luca

関連する問題