Python 是否有一种解决方案可以调整三维数据的大小,而不会使数据变得凌乱?

Python 是否有一种解决方案可以调整三维数据的大小,而不会使数据变得凌乱?,python,numpy,3d,resize,nifti,Python,Numpy,3d,Resize,Nifti,我使用这段代码来调整3d nifti数据的大小,但是当我检查结果时,我发现结果很混乱,轴也发生了变化 import numpy as np import nibabel as nib import itertools initial_size_x = 560 initial_size_y = 560 initial_size_z = 240 new_size_x = 512 new_size_y = 512 new_size_z = 216 initial_data = nib.load(

我使用这段代码来调整3d nifti数据的大小,但是当我检查结果时,我发现结果很混乱,轴也发生了变化

import numpy as np
import nibabel as nib
import itertools

initial_size_x = 560
initial_size_y = 560
initial_size_z = 240

new_size_x = 512
new_size_y = 512
new_size_z = 216

initial_data = nib.load("id001-512x512x216.nii.gz-pred.nii").get_data()
print('helooooooooooooooooooo')
delta_x = initial_size_x/new_size_x
delta_y = initial_size_y/new_size_y
delta_z = initial_size_z/new_size_z

new_data = np.zeros((new_size_x,new_size_y,new_size_z))

for x, y, z in itertools.product(range(new_size_x),
                                 range(new_size_y),
                                 range(new_size_z)):
    new_data[x][y][z] = initial_data[int(x*delta_x)][int(y*delta_y)][int(z*delta_z)]

img = nib.Nifti1Image(new_data, np.eye(4))
img.to_filename("test_"+str(new_size_x)+""+str(new_size_y)+""+str(new_size_z)+".nii")


在这个问题中,我相信您希望稍微更改3D数据的分辨率。我提出的解决方案只适用于将数据放大或缩小整数倍

要放大数据,可以使用np.repeat;要缩小数据,可以使用切片。例如,这里我们可以写:

将numpy作为np导入 将nibabel作为nib导入 进口itertools 初始尺寸=560 初始尺寸y=560 初始尺寸=240 新_尺寸_x=1120 新尺寸y=1120 新尺寸=720 初始_数据=nib.loadid001-512x512x216.nii.gz-pred.nii.get_数据 代表尺寸=新尺寸/初始尺寸2 代表y=新尺寸y/初始尺寸y 2 rep_z=新尺寸_z/初始尺寸_z 3 新数据=np。重复初始数据,重复x,轴=0 新数据=np。重复新数据,重复y,轴=1 新数据=np。重复新数据,重复z轴,轴=2 可能的改进 我相信这个答案是可以改进的。但是,我不确定您对浮点重复的想法


例如,我的_repeatdata,0.9,axis=axis是否应该每10个元素跳过一次?

你试过np.repeat吗?@taless no我怎么用它!!