Для вашего первого вопроса вы должны проверить ориентацию вашего изображения NIfTI, а затем повернуть его в нужном вам направлении.
для проверки ориентации мы используем nibabel aff2axcodes https://nipy.org/nibabel/reference/nibabel.orientations.html#nibabel.orientations.aff2axcodes
для вращения мы будем использовать nibabel.orientations.flip_axis https://nipy.org/nibabel/reference/nibabel.orientations.html#nibabel.orientations.flip_axis
'''
def check_orientation(ct_image, ct_arr):
"""
Check the NIfTI orientation, and flip to 'RPS' if needed.
:param ct_image: NIfTI file
:param ct_arr: array file
:return: array after flipping
"""
x, y, z = nib.aff2axcodes(ct_image.affine)
if x != 'R':
ct_arr = nib.orientations.flip_axis(ct_arr, axis=0)
if y != 'P':
ct_arr = nib.orientations.flip_axis(ct_arr, axis=1)
if z != 'S':
ct_arr = nib.orientations.flip_axis(ct_arr, axis=2)
return ct_arr
'''
Обратите внимание, что в вашем случае вам нужно перевернуть только ось z, но попробуйте использовать указанную выше функцию и измените свою ситуацию, чтобы проверить свои данные.
Последнее, что нужно сделать, это сохранить новое сканирование NIfTI (массив NumPy) как изображение nii. Для этого используйте Nifti1Image для создания объекта nii, а затем nibabel.save, чтобы сохранить его в файл.
'''
new_nifti = nib.Nifti1Image(***ct_arr***.astype(np.float), nii_original_scan.affine)
nib.save(new_nifti, f'***path to new scan***.nii.gz')
'''
ct_arr- это ваш массив numpy (убедитесь, что он имеет тип с плавающей запятой). Второй аргумент - это исходное сканирование NIfTI после загрузки.
в функции сохранения - убедитесь, что вы добавили в имя файла суффикс .nii или .nii.gz
Надеюсь, все понятно :)
person
avivd
schedule
25.02.2021