數(shù)學運算
GEE支持多種簡單的數(shù)學運算孵滞,彼此之間分享很多共同特征罚舱,GEE能夠在逐個像素的單位上執(zhí)行這些運算:這就意味著盖腿,當某種運算被施加到一個image上時诫隅,它就被每個波段的每個沒被蒙版蒙住的像素執(zhí)行钉凌。當在兩個image上操作時咧最,運算則只被執(zhí)行在兩個image都沒蒙住的像素上。GEE會自動地在image之間對波段進行匹配御雕,當操作兩個image矢沿,就希望它們具有相同數(shù)量的波段,可以相互匹配酸纲,然而捣鲸,如果其中一個image只有一個波段,此波段則會與另一個image的所有波段進行匹配闽坡,基本上是采用自我復制的方法栽惶。
下面是一個簡單的例子:
// Load two 5-year Landsat 7 composites.
var landsat1999 = ee.Image('LANDSAT/LE7_TOA_5YEAR/1999_2003');
var landsat2008 = ee.Image('LANDSAT/LE7_TOA_5YEAR/2008_2012');
// Compute NDVI the hard way.
var ndvi1999 = landsat1999.select('B4').subtract(landsat1999.select('B3'))
.divide(landsat1999.select('B4').add(landsat1999.select('B3')));
// Compute NDVI the easy way.
var ndvi2008 = landsat2008.normalizedDifference(['B4', 'B3']);
代碼對圖像波段執(zhí)行基本的算術運算,其中就包括遙感領域常見的歸一化操作疾嗅,而歸一化由于使用頻次相當高外厂,GEE提供了一種快捷方法,在例子的第二部分中有所展現(xiàn)代承。如果想要在image中執(zhí)行相減操作導致每個像素矢量的改變汁蝶,各個波段會自動匹配:
// Compute the multi-band difference image.
var diff = landsat2008.subtract(landsat1999);
Map.addLayer(diff,
{bands: ['B4', 'B3', 'B2'], min: -32, max: 32},
'difference');
// Compute the squared difference in each band.
var squaredDifference = diff.pow(2);
Map.addLayer(squaredDifference,
{bands: ['B4', 'B3', 'B2'], max: 1000},
'squared diff.');
在本例的第二部分,使用了image.pow(2)
計算了平方差论悴,對數(shù)學運算完整的教程掖棉,可以看GEE代碼編輯器的Docs部分席爽。
表達式
如果想實現(xiàn)更復雜的數(shù)學運算,就可以需要使用image.expression()
啊片,它用文本對數(shù)學運算進行了表示只锻,下面的例子用了該函數(shù)計算了EVI:
// Load a Landsat 8 image.
var image = ee.Image('LANDSAT/LC08/C01/T1_TOA/LC08_044034_20140318');
// Compute the EVI using an expression.
var evi = image.expression(
'2.5 * ((NIR - RED) / (NIR + 6 * RED - 7.5 * BLUE + 1))', {
'NIR': image.select('B5'),
'RED': image.select('B4'),
'BLUE': image.select('B2')
});
Map.centerObject(image, 9);
Map.addLayer(evi, {min: -1, max: 1, palette: ['FF0000', '00FF00']});
該函數(shù)的第一個參量是數(shù)學運算的文本表示,第二個參數(shù)則是一個dictionary紫谷,它的Key是表達式中使用的變量名稱齐饮,Value則是變量應該映射到的圖像波段。圖像中的波段可以以b(index)
形式或b(0)
進行表示笤昨,而不是給出整個dictionary祖驱。請注意,除法與Python中執(zhí)行的相同:兩個整數(shù)相除結果必然是整數(shù)瞒窒,如:10 / 20 = 0捺僻。如果想要產(chǎn)生小數(shù)結果,也很簡單:10 * 1.0 / 20 = 0.5崇裁,下表展示了所有支持的運算符:
expression()支持的運算 |
---|
算數(shù)運算 | + - * / % ** | 加減乘除余方 |
---|---|---|
比較運算 | == != < > <= >= | 很顯然 |
邏輯運算 | && || ! ^ | 與或非抑 |
三目運算 | ?: | if-else |