问题描述
SGLI将数据的经纬度进行了重采样,例如本来是10001000的图像重采样到了100100像元,这导致在对影像插值时需要先把经/纬度重采样到1000*1000,本文主要记录在重采样中遇到的输入数据维度问题
scipy.interpolate.interp2d二维插值
scipy.interpolate.interp2d是我主要用到的方法,当然还有其他的二维插值方法本文并不涉及,我最开始采用了如下方法进行二维插值
https://zhuanlan.zhihu.com/p/565489268
但是发现效果并不好。下面待插值数据记为原始数据,想要的插值后的数据记为目标数据。
原始数据:
可以看到空间过度比较平滑。然后我采用了二维线性插值,这里以https://zhuanlan.zhihu.com/p/565489268给出的代码为例(图和代码不匹配,但是原理一样):
from scipy.interpolate import interp2d
import numpy as np
import matplotlib.pyplot as plt
x=np.arange(1,11)
y=np.arange(1,11)
X,Y = np.meshgrid(x,y)
R = np.sqrt(X**2 +Y**2)
Z = np.sin(R)
x1 = np.arange(1,10.2,0.2)
y1 = np.arange(1,10.2,0.2)
X1,Y1 = np.meshgrid(x1,y1)
f1 = interp2d(X,Y,Z,kind='linear')
Z1 = f1(x1,y1)
依照上述代码,插值结果如下
粗看没有什么我呢提,但是细看会发现右边有类似条形噪声的现象,具体原理上的问题并不清楚,欢迎大佬指点,这里只说现象。这导致后面的重投影的时候,像元的空间顺序是乱的。
解决方法
然后参考了scipy的原始文档(https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp2d.html#scipy.interpolate.interp2d),发现f1 = interp2d(X,Y,Z,kind=‘linear’)这里输入的数据维度应该是一维的,也就是x,y,而不是X,Y。
from scipy import interpolate
x = np.arange(-5.01, 5.01, 0.25)
y = np.arange(-5.01, 5.01, 0.25)
xx, yy = np.meshgrid(x, y)
z = np.sin(xx**2+yy**2)
f = interpolate.interp2d(x, y, z, kind='cubic')
进行上述修改后获得了满意的结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)