我有一个大小为(3,2)
的二维数组,我必须使用最近邻,线性和双三次插值方法重新对此进行采样,以使大小变为(4,3)
。
我正在使用 Python ,numpy
和scipy
。
如何实现输入数组的重采样?
答案 0 :(得分:1)
有一个很好的使用卷积here重新采样的教程。
对于整数因子放大:
import numpy
import scipy
from scipy import ndimage, signal
# Scale factor
factor = 2
# Input image
a = numpy.arange(16).reshape((4,4))
# Empty image enlarged by scale factor
b = numpy.zeros((a.shape[0]*factor, a.shape[0]*factor))
# Fill the new array with the original values
b[::factor,::factor] = a
# Define the convolution kernel
kernel_1d = scipy.signal.boxcar(factor)
kernel_2d = numpy.outer(kernel_1d, kernel_1d)
# Apply the kernel by convolution, seperately in each axis
c = scipy.signal.convolve(b, kernel_2d, mode="valid")
请注意,每个轴的因子可能不同,您也可以在每个轴上顺序应用卷积。双线性和双立方的核也在链接中显示,双线性插值利用三角信号(scipy.signal.triang
),双三次是一个分段函数。
您还应该注意插值图像的哪个部分有效;沿着边缘没有足够的内核支持。
就卫星图像而言,双三次插值是三者的最佳选择。