2014-05-06 44 views
2

我有2个图像。 Image_1的分辨率为250米,image_2的分辨率为500米。这些图像具有完全相同的空间内容和投影。从粗栅格提取图像像素值

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

+0

我真的不明白想要做的完全一样。如果你只是想让image_2中的其他像素出现,那么image_2 [:: 2,:: 2]会为你做。 (每个维度都可以用(start:stop:skip)给出一个片段,所以如果你做了“:: 2”,这意味着没有特殊的值用于Start Start for Stop,但跳过2 - >跳过其他所有像素)I有一种感觉,但这不是你要求的,对吧? – Magellan88

回答

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