从较粗糙的栅格中提取图像像素值

时间:2014-05-06 04:00:26

标签: python image numpy gdal

我有2张图片。 Image_1的分辨率为250米,image_2的分辨率为500米。这些图像具有完全相同的空间内容和投影。

如何叠加这两个图像,以便对于image_1中的每个像素,我可以从图像2中提取像素值?我尝试了gdal reprojectimage(重新投影图像2),但它确实重新采样插值。这对我不起作用,因为重新采样会改变image_2中的像素值。有没有有效的方法来做到这一点? Scipy,numpy或任何类似的工具都会很棒。

1 个答案:

答案 0 :(得分:3)

您可以将重采样方法设置为最近邻居,这当然仍然是一种插值方式,但我认为结果正是您所追求的。如果使用gdalwarp,则可以输出到VRT,然后可以在Python中打开。

或者你也可以直接在Python中扩展数组,但只有在所有空间属性都相同的情况下才会有效。

可以像Numpy一样完成:

image2_250m = np.kron(image2_500m, np.ones((2,2)))

在两个维度上都将它扩展到2倍。如果你还有一个第三维包含你想要使用的带np.ones((1,2,2)),它会将带/光谱尺寸缩放为1(例如什么也不做)。它仍然是最近邻插值的一种形式

例如:

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.]])