Как проверить изображение NIFTI в правильной ориентации / положении с помощью Python

Я новенький здесь. В настоящее время изучаю данные медицинской визуализации на Python и задаюсь вопросом, можно ли идентифицировать изображение NIFti в правильной ориентации и как выполнить преобразование. Я поискал в Интернете и нашел алгоритм для `` поворота '' данных изображения (в основном в формате JPG) с помощью аффинного преобразования под определенным углом, но нет документации о том, как это сделать на изображении nifti и сохранить его как новое изображение nifti с помощью nibabel .

Чтобы проиллюстрировать, что я имел в виду. Я хотел бы узнать, как изменить это изображение 1 на это изображение


person amyleeslie    schedule 16.02.2021    source источник
comment
взгляните на эту полезную функцию   -  person Bilal    schedule 16.02.2021


Ответы (1)


Для вашего первого вопроса вы должны проверить ориентацию вашего изображения 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