【问题标题】:Reorder Nifti file axes重新排序 Nifti 文件轴
【发布时间】:2020-06-25 08:44:59
【问题描述】:

我有一些尺寸为(50、100、50)的 3D nifti 文件。我想翻转 y 和 z 轴,使尺寸为(50、50、100)。执行此操作的最佳方法是什么?如何修改与文件关联的仿射?

目前,我正在将 nifti 文件制作成一个 numpy 数组并像这样交换轴

array = np.asanyarray(niiobj.dataobj)
img_after_resample_swapped_array = np.swapaxes(img_after_reample_array, 1, 2)

我对下一步感到困惑。我知道我可以使用函数 nib.Nifti1Image 将 numpy 数组变成一个 nifti 对象,但是我必须如何修改仿射以考虑轴的变化?

感谢您的帮助。

【问题讨论】:

  • 能否分享您的数据集样本?
  • @BelalHomaidan 不幸的是,您无权这样做。有什么可以为您解答的吗?
  • 不用了,我只是想看一个样本来测试一下,否则我帮不上什么忙。

标签: python numpy nifti nibabel nilearn


【解决方案1】:

如果你使用 SimpleITK,有一个 PermuteAxes 函数可以看到 Y 和 Z 轴。并且它会正确地保留图像的转换。

下面是一个例子:

import SimpleITK as sitk

img = sitk.ReadImage("tetra.nii.gz")
print (img.GetDirection())

img2 = sitk.PermuteAxes(img, [0,2,1])
print (img2.GetDirection())

sitk.WriteImage(img2, "permuted.nii.gz")

这是 3x3 方向矩阵输出:

(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0)
(1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0)

输入图像具有方向的单位矩阵,对于置换矩阵,Y 和 Z 行交换。

这里是 PermuteAxesImageFilter 和 PermuteAxes 函数的文档:

https://simpleitk.org/doxygen/latest/html/classitk_1_1simple_1_1PermuteAxesImageFilter.html https://simpleitk.org/doxygen/latest/html/namespaceitk_1_1simple.html#a892cc754413ba3b60c731aac05dddc65

【讨论】:

    猜你喜欢
    • 2021-09-04
    • 2015-11-14
    • 2021-12-18
    • 2010-12-18
    • 1970-01-01
    • 2016-02-18
    • 2014-07-02
    • 2018-05-14
    • 2021-07-09
    相关资源
    最近更新 更多