Изменить порядок осей файла 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