如何在Python中翻转MRI图像以匹配目标取向?
实现MRI图像从图1到图2的翻转操作
对比图1和图2的取向,需要对图像进行左右翻转(沿冠状轴/x轴翻转),同时要同步更新图像的空间定位信息,避免后续处理出现偏差。以下分别用nibabel和SimpleITK实现:
使用nibabel库
import nibabel as nib import numpy as np # 加载原始MRI图像 img = nib.load("input_image.nii.gz") data = img.get_fdata() affine = img.affine.copy() # 沿x轴(左右方向)翻转图像数据 flipped_data = np.flip(data, axis=0) # 更新affine矩阵,修正翻转后的空间定位 affine[0] = -affine[0] affine[0, 3] = np.max(data.shape[0] * affine[0]) + affine[0, 3] # 创建新的nibabel图像对象并保存 flipped_img = nib.Nifti1Image(flipped_data, affine) nib.save(flipped_img, "output_flipped.nii.gz")
说明:
- 若左右翻转对应其他轴(比如
axis=1),可根据图像实际轴定义调整 - 更新affine是关键步骤,确保翻转后的图像空间坐标正确映射
使用SimpleITK库
import SimpleITK as sitk # 加载原始MRI图像 img = sitk.ReadImage("input_image.nii.gz") # 创建翻转过滤器,设置要翻转的轴(这里设为0轴对应左右方向) flip_filter = sitk.FlipImageFilter() flip_filter.SetFlipAxes([True, False, False]) # 仅翻转x轴,根据实际情况调整轴参数 # 执行翻转 flipped_img = flip_filter.Execute(img) # 保存翻转后的图像 sitk.WriteImage(flipped_img, "output_flipped.nii.gz")
说明:
SetFlipAxes([True, False, False])中的布尔值对应x、y、z轴,True表示翻转对应轴,可根据图像实际取向调整- SimpleITK会自动处理空间信息的更新,无需手动修改方向矩阵
注:如果实际测试中轴对应不对,可以尝试调整翻转的轴参数(比如把
axis=0换成axis=1,或调整FlipAxes的参数),根据图像的实际空间编码适配。
内容的提问来源于stack exchange,提问作者CodingAddict
相关产品推荐
相关产品推荐

