Изменить порядок осей файла Nifti

У меня есть файлы 3D nifti размеров (50, 100, 50). Я хотел бы перевернуть оси 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, но как мне изменить аффинное, чтобы учесть изменение оси?

Спасибо за любую помощь.

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.htmlhttps://simpleitk.org/doxygen/latest/html/namespaceitk_1_1simple.html

Другие вопросы по тегам