首页 > 解决方案 > 在python中插值时如何保持图像的大小?

问题描述

我已经通过线性方法插入了我的 nifti 图像(mri 数据)。但问题是输出中的视野发生变化(输入为 400*400 但输出为 4000*3000 )我正在寻找一种在插值时保持尺寸的方法。你有解决办法吗?谢谢

t1_ = "name.nii.gz"
img_t1_ = nib.load(t1_)
img_t1_ = np.double(img_t1_.get_fdata())
slice_ = 300
img_t1_ = np.rot90(img_t1_[:,:,slice_,0])
x = np.linspace(0, img_t1_.shape[1],  img_t1_.shape[1])
y = np.linspace(0, img_t1_.shape[0],  img_t1_.shape[0])
X, Y = np.meshgrid(x, y)
Z = img_t1_
x2 = np.linspace(0, img_t1_.shape[1],  9*img_t1_.shape[1])
y2 = np.linspace(0, img_t1_.shape[0],  9*img_t1_.shape[0])
print(x2.shape[0], y2.shape[0])
tmp_z_ = np.zeros((x2.shape[0], y2.shape[0]))
f_linear = interp2d(x, y, Z, kind='linear')
Z2 = f_linear(x2, y2)

标签: pythonimage-processinginterpolation

解决方案


我假设通过保持尺寸,您的意思是保持纵横比(即输入:400x400 -> 输出:4000x4000)。另外,我不确定您要通过插值实现什么。但是,根据用例,'模块中的zoom函数可以完成这项工作。如果您选择参数,这对应于线性插值。scipyndimageorder=1

我不熟悉您用于导入图像的包。以下示例假设图像数据已加载到img_data二维浮点数组。只需适应您的用例即可。

from scipy.ndimage import zoom
interpolated_img_data = zoom(img_data, 10, order=1)

推荐阅读