数学运算
GEE支持多种简单的数学运算,彼此之间分享很多共同特征,GEE能够在逐个像素的单位上执行这些运算:这就意味着,当某种运算被施加到一个image上时,它就被每个波段的每个没被蒙版蒙住的像素执行。当在两个image上操作时,运算则只被执行在两个image都没蒙住的像素上。GEE会自动地在image之间对波段进行匹配,当操作两个image,就希望它们具有相同数量的波段,可以相互匹配,然而,如果其中一个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']);
代码对图像波段执行基本的算术运算,其中就包括遥感领域常见的归一化操作,而归一化由于使用频次相当高,GEE提供了一种快捷方法,在例子的第二部分中有所展现。如果想要在image中执行相减操作导致每个像素矢量的改变,各个波段会自动匹配:
// 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)
计算了平方差,对数学运算完整的教程,可以看GEE代码编辑器的Docs部分。
表达式
如果想实现更复杂的数学运算,就可以需要使用image.expression()
,它用文本对数学运算进行了表示,下面的例子用了该函数计算了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']});
该函数的第一个参量是数学运算的文本表示,第二个参数则是一个dictionary,它的Key是表达式中使用的变量名称,Value则是变量应该映射到的图像波段。图像中的波段可以以b(index)
形式或b(0)
进行表示,而不是给出整个dictionary。请注意,除法与Python中执行的相同:两个整数相除结果必然是整数,如:10 / 20 = 0。如果想要产生小数结果,也很简单:10 * 1.0 / 20 = 0.5,下表展示了所有支持的运算符:
expression()支持的运算 |
---|
算数运算 | + - * / % ** | 加减乘除余方 |
---|---|---|
比较运算 | == != < > <= >= | 很显然 |
逻辑运算 | && || ! ^ | 与或非抑 |
三目运算 | ?: | if-else |
网友评论