0

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

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

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

在此处输入图像描述

4

1 回答 1

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 的情况下,您将获得体积数据的更新上采样或下采样分辨率。

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

于 2019-06-18T14:29:57.673 回答