如何在插值过程中处理丢失的卫星数据

时间:2016-11-14 11:35:55

标签: python numpy scipy interpolation

我下载的卫星数据包含某些物种的空间分布信息。

当卫星立交桥被视为NaN值时被云覆盖的一些地方。

但是当我想将卫星数据(2-D数组)插入另一种形状时(例如,分辨率更粗糙)。 NaN值让我很烦恼。

由于存在NaN值,scipy.interpolate函数无法返回有限值。

这是我的代码,我上传的数据文件here

 lon,lat = np.linespace(75.12,135.12,241), np.linespace(18.12, 55.12, 149)
 data = pd.read_csv("./CH2O-NO2/test.csv").values.reshape(lat.shape[0],lon.shape[1]) 

我可以使用Basemap包绘制data的2-d分布。

enter image description here

插值

from scipy import interpolate
#### Coarse lat-lon pairs

lon_2,lat_2 = np.linespace(75.12,135.12,100), np.linespace(18.12, 55.12, 50)  

hfunc =  interpolate.interp2d(lon, lat, data)

xx,yy = np.meshgrid(lon_2,lat_2)
data_coarser = np.zeros(xx.shape[0]*xx.shape[1])
for i,(x,y) in enumerate(zip(xx,yy)):
    data_coarser[i]=hfunc(x,y)

代码运行缓慢,data_coarser有很多NaN值。

我的尝试

在我的日常工作中处理缺失的数据是一个棘手的问题。对于二维阵列式数据集,是否有任何方法可以将NaN值替换为其邻域网格?

1 个答案:

答案 0 :(得分:0)

无法发表评论。

正如offeltoffel所提到的,任何填充都会给数据带来偏见。 如果NaN区域不是那么大,您可能会对图像修复技术感兴趣。我能够在OpenCV找到一些实现,但理论上还有更多不同的想法:http://docs.opencv.org/trunk/df/d3d/tutorial_py_inpainting.html

我能够找到一些用于修复的Wolfram Mathematica函数:https://reference.wolfram.com/language/ref/Inpaint.html。 你也可以谷歌“图像修复”。查询将产生大量关于此事的科学文章。如果你有信心,可以试试其中几个。

另一种可能带来一些成功的方法:用零(或平均值或其他)替换所有NaN,重新缩放它,然后再次用NaN替换零(...)。

希望这可以提供帮助