美文网首页@EZ翻译计划
EZ | Mathematical operations |

EZ | Mathematical operations |

作者: 杜若飞er | 来源:发表于2019-07-28 11:44 被阅读0次

    Mathematical\ operations


    数学运算

    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部分。

    Expressions


    表达式

    如果想实现更复杂的数学运算,就可以需要使用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

    \tag{此页面最后更新于2019年3月18日}

    相关文章

      网友评论

        本文标题:EZ | Mathematical operations |

        本文链接:https://www.haomeiwen.com/subject/jipurctx.html