Как изменить pixDim в медицинских объемных данных, используя nibabel предпочтительно или numpy или что-то еще? - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь обучить модель, в которой один набор данных содержит определенный pixDim, тогда как другой набор содержит другой pixDim.Я хочу нормализовать и разрешение вокселей, и выполнить.

Можем ли мы изменить измерение pixDim объемных данных, таких как .nifti.gz или .mgz, используя nibabel или любую другую библиотеку python?

Для справки, я говорю о pixDim в заголовке объемного файла, выделенного на изображении ниже.

enter image description here

1 Ответ

0 голосов
/ 18 июня 2019

Предпочтительным способом является вычисление целевого пикселя или использование метода интерполяции скрипов, как показано в приведенной ниже функции, для достижения целевого пикселя или шага (в функах)

import scipy.interpolate as si
def do_interpolate(values, steps, isLabel=False):
    x, y, z = [steps[k] * np.arange(values.shape[k]) for k in range(3)]  # original grid
    if isLabel:
        method = 'nearest'
    else:
        method = 'linear'

    f = si.RegularGridInterpolator((x, y, z), values, method=method)  # interpolator

    dx, dy, dz = 2.0, 2.0, 3.0  # new step sizes # settings['EVAL']['target_voxel_dimension']
    new_grid = np.mgrid[0:x[-1]:dx, 0:y[-1]:dy, 0:z[-1]:dz]  # new grid
    new_grid = np.moveaxis(new_grid, (0, 1, 2, 3), (3, 0, 1, 2))  # reorder axes for evaluation
    return f(new_grid)

Вы получите обновленное разрешение с повышенной или пониженной частотой для вашегоданные объема с сохранением целевого пикселя.

ПРИМЕЧАНИЕ: В приведенной выше функции значения содержат объемные данные 3D, шаги содержат исходные данные Pixdim,У меня есть жестко закодированный целевой пиксель в виде dx, dy, dz.

...