Как изменить ориентацию файла mgh / dicom / nifti с помощью nibabel - PullRequest
0 голосов
/ 13 мая 2019

Мне трудно найти правильное аффинное преобразование для 3-х различных видов: коронального, осевого и саггитального, каждое из которых имеет свои проблемы, как показано ниже:

1: осевая цветовая карта перекрывается саггитальным оригиналомview.

enter image description here

2: Аналогично, сагиттальная цветовая карта перекрывается с осевым исходным изображением.

enter image description here

3: И у всех есть какие-то проблемы с ориентацией, которые лучше всего видны здесь, когда цветная карта и исходное изображение для коронала соответствуют друг другу, но с неправильной ориентацией.

enter image description here

Я сохраняю исходный файл, который отправляю на сервер для какого-либо прогноза, который генерирует карту цветов и возвращает этот файл длявизуализация, позже я отображаю все вместе.

На сервере после прогнозирования приведен код для сохранения файла.

 nifti_img = nib.MGHImage(idx, affine, header=header)

Принимая во внимание, что affine и header - это исходный аффин и заголовок, извлеченный из файла, который я отправил.

Мне нужно обработать "idx" значение, которое содержит необработанные данные в формате массива Numpy, но не уверенчто именно нужно сделать.Нужна помощь здесь.

Старался решить проблему с использованием nibabel библиотеки Python, но из-за моих очень ограниченных знаний о том, как работают эти файлы и об аффинном преобразовании, у меня возниклоТрудно понять, что мне делать, чтобы они были правильными.

Я использую AMI js с поддержкой threejs во внешнем интерфейсе и nibabel с python в конце.Решение на веб-интерфейсе или бэкэнде в любом месте приемлемо.

Пожалуйста, помогите.Заранее спасибо.

1 Ответ

0 голосов
/ 16 мая 2019

Это было просто, используя операции numpy.moveaxis () и numpy.flip () для rawdata из nibabel. как ниже.

    # Getting raw data back to process for better orienation and label mapping.
    orig_img_data = nib.MGHImage(numpy_arr, affine)
    nifti_img = nib.MGHImage(segmented_arr_output, affine)  

    # Getting original and predicted data to preprocess to original shape and view for visualisation.
    orig_img = orig_img_data.get_fdata()
    seg_img = nifti_img.get_fdata()

    # Placing proper views in proper place and flipping it for a better visualisation as required.
    # moveaxis to get original order.
    orig_img_ = np.moveaxis(orig_img, -1, 0)
    seg_img = np.moveaxis(seg_img, -1, 0)

    # Flip axis to overcome mirror image/ flipped view.        
    orig_img_ = np.flip(orig_img_, 2)
    seg_img = np.flip(seg_img, 2)

    orig_img_data_ = nib.MGHImage(orig_img_.astype(np.uint8), np.eye(4), header)
    nifti_img_ = nib.MGHImage(seg_img.astype(np.uint8), np.eye(4), header)

Примечание: Очень важно иметь одинаковую аффинную матрицу, чтобы обернуть оба этих массива обратно. Матрица идентичности 4 * 4 лучше, чем использование оригинальной аффинной матрицы, поскольку это создавало для меня проблему.

...