2017-06-09 33 views
0

シンプルなITKで3D画像を回転しようとしています。 ここに私のコードです: imagetoresize元の画像です。画像のサイズは(512,512,149)です。3D画像回転シンプルなITK Python

targetimage = imagetoresize 
origin = imagetoresize.GetOrigin() 
targetimage = imagetoresize 
imagetoresize.SetOrigin((0,0,0)) 
transform = sitk.VersorTransform((0,0,1), np.pi) 
transform.SetCenter((256,256,74)) 
outimage=sitk.Resample(imagetoresize,targetimage.GetSize(),transform,sitk.sitkLinear,[0,0,0], imagetoresize.GetSpacing(), imagetoresize.GetDirection()) 
outimage.SetOrigin(origin) 

コードは画像を回転しますが、中心は移動します。
Orginal Image Image after rotate

なぜセンターがシフトされたのか説明できますか?

ご協力いただければ幸いです。

+0

物理的なポイントが画像のインデックスと同じであると思われるようです。あなたのイメージの残りのメタデータを共有できますか?間隔、原点、および方向のマトリックス。 – blowekamp

+0

Orginal: 寸法:3つの 寸法:512 512 149 マトリックス: 0.832031 0 0 0 0.832031 0 0 0 1.5 オフセット:[-200.584、-382.084、-1431.5] センター:[0、0、0 ] 翻訳:[-200.584、-382.084、-1431.5] 逆: 1.20188 0 0 0 1.20188 0 0 0 0.666667 スケール:1 1 1 起源:[-200.584、-382.084、-1431.5] 間隔:[0.832031,0.832031,1.5] EvenlySpaced:1 DirectionVector:[0、0、1 ] スライス:149 – Noobie555

+0

回転: 寸法:3つの 寸法:512 512 149 マトリックス: 0.832031 0 0 0 0.832031 0 0 0 1.5 オフセット:[-200.584、-382.084、-1431.5] センター:[ 0、0、0] 翻訳:[-200.584、-382.084、-1431.5] 逆: 1.20188 0 0 0 1.20188 0 0 0 0.666667 スケール:1 1 1 起源:[-200.584、-382.084、 -1431.5] 間隔:[0.832031,0.832031,1.5] 等間隔:1 DirectionVector:[0、0、1] スライス:149 – Noobie555

答えて

0

回転中心をピクセル単位で設定します。物理空間ではありません。

SimpleITK(およびITK)は、物理空間での変換と再サンプリングを行い、インデックス空間は実行しません。画像の原点をに設定する必要はありません。私はimagetoresize.TransformContinuousIndexToPhysicalPoint(center_index)を使用して、物理空間の中心を取得する必要があると信じています。

+0

ありがとうございました!それは本当に役に立ちました。 しかし、私は原点を0に設定する必要があります。そうしないと、黒い画像が得られます。 – Noobie555