如何在python中使用SimpleITK.WarpImageFilter函数

时间:2017-11-18 18:38:11

标签: simpleitk

我在这个函数上找不到任何python文档。

我尝试了以下代码,但输出绝对错误。

warp = sitk.WarpImageFilter()
warp.SetInterpolator(sitk.sitkLinear)
out = warp.Execute(reference_img, transform_img)

它完全给了我reference_img,但不是转换后的图像。

你有没有用过这个功能?你能帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

与所有其他SimpleITK过滤器一样,WarpImageFilter在SimpleITK构建基础架构中经过严格测试。过滤器包装包括多个测试的描述,其中验证结果并验证跨语言的行为。此外,在SimpleITK中,所有过滤器都会自动测试几种行为的一致性,这些行为是通过SimpleITK的代码生成过程完成的。

ResampleImageFilter现在是WarpImageFilter的首选方法。它应用任何变换来重新采样图像,其中DisplacementFieldTransform包含位移场图像。这与仅占用置换字段的WarpImageFilter不同。

“参考图像”似乎有些混乱。重采样和扭曲滤波器都需要知道图像的输出信息。这包括输出原点,输出大小,输出间隔和输出方向。这些可以单独手动设置或从“参考图像”设置。有ResampleImageFilter.SetRefenceImage()WarpImageFilter.SetOutputParametersFromImage方法可以做同样的事情。参考图像是可选的。

使用SimpleITK测试数据的WarpImageFilter的示例用法:

img = sitk.ReadImage("cthead1-Float.mha")
dis = sitk.ReadImage("cthead1-dis1.nrrd")
warper = sitk.WarpImageFilter()
warper.SetOutputParameteresFromImage(img)
out = warper.Execute(img,dis)

以下是使用ResampleImageFilter完成的相同操作。它需要将位移场图像转换为float64以与变换一起使用:

resampler = sitk.ResampleImageFilter()
resampler.SetReferenceImage(img)
dis_tx = sitk.DisplacementFieldTransform(sitk.Cast(dis,sitk.sitkVectorFloat64))
resampler.SetTransform(dis_tx)
out = resampler.Execute(img)