编辑:保罗在下面解决了这个问题。谢谢!
我正在尝试将 3x3 矩阵重新采样(放大)到 5x5,用 interpolate.interp2d 或 interpolate.RectBivariateSpline (或任何有效的方法)填充中间点。
如果有一个简单的现有功能可以做到这一点,我想使用它,但我还没有找到它。例如,一个功能如下:
# upscale 2x2 to 4x4
matrixSmall = ([[-1,8],[3,5]])
matrixBig = matrixSmall.resample(4,4,cubic)
所以,如果我从一个 3x3 矩阵/数组开始:
0,-2,0
-2,11,-2
0,-2,0
我想计算一个新的 5x5 矩阵(“I”表示插值):
0, I[1,0], -2, I[3,0], 0
I[0,1], I[1,1], I[2,1], I[3,1], I[4,1]
-2, I[1,2], 11, I[3,2], -2
I[0,3], I[1,3], I[2,3], I[3,3], I[4,3]
0, I[1,4], -2, I[3,4], 0
我一直在搜索和阅读并尝试各种不同的测试代码,但我还没有完全弄清楚我正在尝试做的正确语法。我也不确定是否需要在某些行中使用 meshgrid、mgrid 或 linspace。
编辑:修复和工作感谢保罗
import numpy, scipy
from scipy import interpolate
kernelIn = numpy.array([[0,-2,0],
[-2,11,-2],
[0,-2,0]])
inKSize = len(kernelIn)
outKSize = 5
kernelOut = numpy.zeros((outKSize,outKSize),numpy.uint8)
x = numpy.array([0,1,2])
y = numpy.array([0,1,2])
z = kernelIn
xx = numpy.linspace(x.min(),x.max(),outKSize)
yy = numpy.linspace(y.min(),y.max(),outKSize)
newKernel = interpolate.RectBivariateSpline(x,y,z, kx=2,ky=2)
kernelOut = newKernel(xx,yy)
print kernelOut