Python二维插值(scipy.interpolate.interp2d)注意输入参数维度问题

编程入门 行业动态 更新时间:2024-10-22 20:23:14

Python二维插值(scipy.interpolate.interp2d)注意输入参数<a href=https://www.elefans.com/category/jswz/34/1767143.html style=维度问题"/>

Python二维插值(scipy.interpolate.interp2d)注意输入参数维度问题

问题描述

SGLI将数据的经纬度进行了重采样,例如本来是10001000的图像重采样到了100100像元,这导致在对影像插值时需要先把经/纬度重采样到1000*1000,本文主要记录在重采样中遇到的输入数据维度问题

scipy.interpolate.interp2d二维插值

scipy.interpolate.interp2d是我主要用到的方法,当然还有其他的二维插值方法本文并不涉及,我最开始采用了如下方法进行二维插值

但是发现效果并不好。下面待插值数据记为原始数据,想要的插值后的数据记为目标数据。
原始数据:

可以看到空间过度比较平滑。然后我采用了二维线性插值,这里以(图和代码不匹配,但是原理一样):

from scipy.interpolate import interp2d
import numpy as np
import matplotlib.pyplot as plt
#x,y数据为1维
x=np.arange(1,11)
y=np.arange(1,11)
#X,Y为二维
X,Y = np.meshgrid(x,y)
#R或者Z可以类比为原始影像经纬度,x,y类比为图像行列坐标
R = np.sqrt(X**2 +Y**2)
Z = np.sin(R)
#X1,Y1类别为目标影像行列坐标,需要根据此坐标插值获得目标影像的经纬度
x1 = np.arange(1,10.2,0.2)
y1 = np.arange(1,10.2,0.2)
X1,Y1 = np.meshgrid(x1,y1)
# 原文方法interp2d输入的是二维的坐标数据,kind='linear'
f1 = interp2d(X,Y,Z,kind='linear')
Z1 = f1(x1,y1)	#注意这里也是一维的

依照上述代码,插值结果如下

粗看没有什么我呢提,但是细看会发现右边有类似条形噪声的现象,具体原理上的问题并不清楚,欢迎大佬指点,这里只说现象。这导致后面的重投影的时候,像元的空间顺序是乱的。

解决方法

然后参考了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')	#这里是一维的输入

进行上述修改后获得了满意的结果。

更多推荐

Python二维插值(scipy.interpolate.interp2d)注意输入参数维度问题

本文发布于:2024-02-26 13:27:47,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1702647.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:维度   插值   参数   Python   scipy

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!