我正在尝试使用Simple ITK旋转3D图像。 这是我的代码: imagetoresize 是原始图片。图像的大小是(512,512,149)
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 :(得分:2)
您正在设置旋转中心,而不是物理空间。
SimpleITK(和ITK)在物理空间而不是索引空间中执行转换和重新采样。不必将图像的原点设置为 0 。我相信你应该使用imagetoresize.TransformContinuousIndexToPhysicalPoint(center_index)来获得物理空间的中心。