Предпочтительным способом является вычисление целевого пикселя или использование метода интерполяции скрипов, как показано в приведенной ниже функции, для достижения целевого пикселя или шага (в функах)
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.