我正在尝试训练一个模型,其中一组数据包含特定的 pixDim,而另一组包含不同的 pixDim。我想标准化体素分辨率并执行。
我们可以使用 nibabel 或任何其他 python 库更改体积数据(如 .nifti.gz 或 .mgz 文件)的 pixDim 维度吗?
作为参考,我在下图中突出显示的体积文件的标题中谈论 pixDim。
我正在尝试训练一个模型,其中一组数据包含特定的 pixDim,而另一组包含不同的 pixDim。我想标准化体素分辨率并执行。
我们可以使用 nibabel 或任何其他 python 库更改体积数据(如 .nifti.gz 或 .mgz 文件)的 pixDim 维度吗?
作为参考,我在下图中突出显示的体积文件的标题中谈论 pixDim。
最好的方法是计算目标 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 进行了硬编码。