EZ | Mathematical operations | GEE - 10

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日}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容