1

我有一些尺寸为(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 对象,但是我将如何修改仿射以考虑轴的变化?

感谢您的任何帮助。

4

1 回答 1

0

如果你使用 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

于 2020-06-25T14:14:09.627 回答