使用SimpleITK工具进行脑部MRI图像放缩

背景需求

需要对MRI图像进行裁剪、放缩,但是要求放缩之后的影像空间必须与原图片的影像空间一致。
例:对(32, 32, 32)的图片放缩到(256, 256, 256),原始图片空间为(1.0, 1.0, 1.0)。对图片进行空间设置:放缩后图片空间(1.0, 1.0, 1.0);不对空间进行设置:放缩后的图片空间(0.125, 0.125, 0.125)。

代码实现

import numpy as np
import SimpleITK as sitk

 # 读入图片
img_path = './mri.nii.gz'
img = sitk.ReadImage(img_path)

# re_img为放缩之后的图片大小,(256, 256, 256)为目标大小,sitkNeartestNeighbor是放缩用到的算法,默认为线性放缩,这里选择了最近邻
re_img = resize_image_itk(img, (256, 256, 256), resamplemethod=sitk.sitkNearestNeighbor)

# 对放缩后的图片进行一些操作
# 1.原图,2.空间,3.方向
re_img.SetOrigin(img.GetOrigin())
re_img.SetSpacing(img.GetSpacing())
re_img.SetDirection(img.GetDirection())

# 保存图片
sitk.WriteImage(re_img, './re_img.nii.gz')

其中resize_image_itk函数为:

def resize_image_itk(itkimage, newSize, resamplemethod=sitk.sitkNearestNeighbor):
    resampler = sitk.ResampleImageFilter()

    originSize = itkimage.GetSize()  # 获取原图size
    originSpacing = itkimage.GetSpacing()  # 获取原图spacing
    newSize = np.array(newSize, dtype='uint32')
    factor = originSize / newSize
    newSpacing = originSpacing * factor

    resampler.SetReferenceImage(itkimage)   # 指定需要重新采样的目标图像
    resampler.SetSize(newSize.tolist())
    resampler.SetOutputSpacing(newSpacing.tolist())
    resampler.SetTransform(sitk.Transform(3, sitk.sitkIdentity))
    resampler.SetInterpolator(resamplemethod)
    itkimgResampled = resampler.Execute(itkimage)  # 得到重新采样后的图像
    return itkimgResampled

至此,图片已经完成了放缩,并且放缩后图片的空间与原图片空间大小是同一的。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九久呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值