如何最好使用nibabel或numpy或其他方式更改医学体积数据中的pixDim?

时间:2019-06-11 16:36:14

标签: python-3.x numpy nifti nibabel

我正在尝试训练一个模型,其中一组数据包含特定的pixDim,而另一组数据包含不同的pixDim。我想同时规范体素分辨率并执行。

我们可以使用nibabel或其他任何python库来更改.nifti.gz或.mgz文件等体积数据的pixDim维吗?

作为参考,我正在谈论下图突出显示的体积文件标题中的pixDim。

enter image description here

1 个答案:

答案 0 :(得分:0)

首选方法是计算目标pixdim或使用如下函数中的scipy内插法来实现目标pixdim或步骤(在func中)

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)

在保持目标pixdim的情况下,您将获得针对体积数据的更新的上采样或下采样分辨率。

注意:在上面的函数中,保存3d体积数据, steps 保存原始pixdim数据,我在其中将目标pixdim进行了硬编码。 dx,dy,dz的形式。