从粗糙栅格中提取图像像素值
我有两张图片。第一张图片的分辨率是250米,第二张图片的分辨率是500米。这两张图片的内容和投影完全一样。
我想把这两张图片叠加在一起,这样我就可以从第二张图片中提取出与第一张图片每个像素对应的像素值。我试过用gdal的reprojectimage来重新投影第二张图片,但这个方法会进行重采样和插值处理。这对我来说不行,因为重采样会改变第二张图片的像素值。有没有什么有效的方法可以做到这一点?使用Scipy、numpy或者类似的工具都可以。
1 个回答
3
你可以把重采样的方法设置为最近邻,这其实也是一种插值方法,但我觉得结果正是你想要的。如果你使用gdalwarp,可以输出一个VRT文件,然后在Python中打开它。
另外,你也可以直接在Python中放大数组,但这只有在所有空间属性完全相同的情况下才有效。
可以用Numpy来实现,像这样:
image2_250m = np.kron(image2_500m, np.ones((2,2)))
这样可以在两个维度上都放大2倍。如果你还有一个包含波段的第三维度,想用的话可以用 np.ones((1,2,2))
,这样就会在波段/光谱维度上保持不变(也就是不做任何改变)。这仍然是一种最近邻插值的形式。
例如:
In [1]: import numpy as np
In [2]: a = np.random.randint(0,100, (2,2))
In [3]: a
Out[3]:
array([[38, 85],
[99, 19]])
In [4]: a_hires = np.kron(a, np.ones((2,2)))
In [5]: a_hires
Out[5]:
array([[ 38., 38., 85., 85.],
[ 38., 38., 85., 85.],
[ 99., 99., 19., 19.],
[ 99., 99., 19., 19.]])