2016-12-02 4 views
1

医用画像登録用にSimpleITKをインストールしました。それは3D CT/CTおよび3D CT/MRI画像登録に非常によく機能します。今、私はモデル/画像登録を実装したいと思います。モデルは球です。 ITKには、モデル、画像の登録に使用できる空間オブジェクト、例えば楕円形があります。しかし、私はSimpleITKでそれらのオブジェクトを見つけることができません。モデルから仮想画像を作成し、画像/画像登録を使用してモデル/画像登録をシミュレートする必要がありますか?SimpleITKでモデル間登録を実装する方法は?

おかげで、

デビッドラウ画像に空間オブジェクトを変換

答えて

0

、次に画像間レジストレーションを使用することは確かに一つの解決策です。登録精度は、SpatialObject - >Imageに変換する画像グリッドの解像度に多少依存します。他の画像と同じピクセル間隔が合理的な選択肢です。

+0

ありがとうDzenan。あなたの答えはとても役に立ちます。 SpatialObjectをImageに変換できるSimpleITKのフィルタはありますか?その変換を行うことができるITKにはいくつかのフィルタがあります。 –

0

現在、SimpleITKは空間オブジェクトまたは空間オブジェクトの登録をサポートしていません。前回私が画像登録に空間オブジェクトをしたのはむしろ遅かったので、空間オブジェクトを画像に「レンダリング」して、画像から画像の登録を実行しました。このイメージを生成するために採用できるC++ ITKの例がいくつかあります(SpatialObjectToImage [0-3] .cxx)。

また、SimpleITKにはPhysicalPointImageSourceがあり、ポイントのイメージが生成されます。次に、オーバーロードされた演算子を使用して、球または超楕円の方程式を使用して、暗黙のオブジェクトの近似を生成することができます。 Hereが生成さマルシュナーロブ関数の例である:

def marschner_lobb(size=40, alpha=0.25, f_M=6.0): 
    img = sitk.PhysicalPointSource(sitk.sitkVectorFloat32, [size]*3, [-1]*3, [2.0/size]*3) 
    imgx = sitk.VectorIndexSelectionCast(img, 0) 
    imgy = sitk.VectorIndexSelectionCast(img, 1) 
    imgz = sitk.VectorIndexSelectionCast(img, 2) 
    del img 
    r = sitk.Sqrt(imgx**2 + imgy**2) 
    del imgx, imgy 
    pr = sitk.Cos((2.0*math.pi*f_M)*sitk.Cos((math.pi/2.0)*r)) 
    return (1.0 - sitk.Sin((math.pi/2.0)*imgz) + alpha*(1.0+pr))/(2.0*(1.0+alpha)) 

同様の動作が他の暗黙の機能のために行うことができます。

関連する問題