[Google Earth Engine入門] バンド間演算を行う
概要
イメージオブジェクトのexpressionメソッドを使うと、衛星画像のバンド値を計算式を用いて評価し、演算結果を新たなイメージオブジェクトとして生成できます。
この記事では、正規化水指数や正規化植生指数などのイメージ指数をexpressionメソッドを使って演算し、地図へオーバーレイする方法について説明します。
イメージ指数は、マルチバンドの画像から計算された画像です。画像は、画像内に存在する特定の現象を強調する一方で、その影響を低下させるその他の要因を軽減します。たとえば、植生指数では、健康な植生は指数画像に明るく表示され、健康でない植生は値が低く、荒れ地のテレインが暗く表示されます。
データセットのロード
1 2 3 4 5 6 7 8 9 10 11 |
//位置を指定 var point = ee.Geometry.Point([139.41128393528618, 35.76928898000714]); //指定した位置へ地図を移動する Map.centerObject(point, 10) //データセットのロード var dataset = ee.ImageCollection('LANDSAT/LC08/C01/T1_RT_TOA') .filterDate('2018-01-01', '2018-12-31') .filterBounds(point) var img = dataset.first(); |
expressionの基本
expressionメソッドでは、評価式を文字列として記述し、式の中で使用する変数にバンド値をマッピングすることで演算を行います。
1 2 3 4 5 6 7 |
var newImage = img.expression( '評価式(文字列)', { 式で使用する変数: 適用する値, }); print(newImage); |
演算結果は新しいイメージオブジェクトとして返ってきますが、演算結果が収められているバンド名を任意に指定する方法がないらしいのでprint文を使ってコンソールで確認します。
(今のところリファレンスにも載っていない)
正規化水指数を計算する
地表面における水の存在と深い関連をもつ指標の1つで、赤波長(R)と中間赤外波長(SWIR)を用いて、(R-SWIR)/(R+SWIR)で計算される。NDWIが高いときは表面が帯水状況にあると判断される。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
//正規化水指数:Normalized Difference Water Index) // NDWI = (赤波長-短波長赤外波長)/(赤波長+短波長赤外波長) var NDWI = img.expression( '(red - swir) / (red + swir)', { red: img.select('B4'), swir: img.select('B6') }); // Open Water Index // OWI = (緑波長-短波長赤外波長)/(緑波長+短波長赤外波長) var OWI = img.expression( '(green - swir) / (green + swir)', { swir: img.select('B6'), green: img.select('B3') }); //NDWI, OWIをビジュアライズするための設定 var NDWICOLOR = { "opacity":1, "bands":["B0"], "min":-0.7421127557754517, "max":0.4728425443172455, "palette":["ff0000","efff00","27ff00","00ffdb","0013ff"] } //同じビジュアライズ設定を使えるようにバンドネームを変更 NDWI = NDWI.select(["B4"], ["B0"]) OWI = OWI.select(["B3"], ["B0"]) Map.addLayer(NDWI, NDWICOLOR, "NDWI"); Map.addLayer(OWI, NDWICOLOR, "OWI"); |
実行結果
正規化植生指数を計算する
植生指標とは、植物による光の反射の特徴を生かし衛星データを使って簡易な計算式で植生の状況を把握することを目的として考案された指標で、植物の量や活力を表しています。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// 正規化植生指数:Normalized Difference Vegetation Index // NDVI= (近赤外波長-赤波長)/(近赤外波長+赤波長) var NDVI = img.expression( '(nir - red) / (nir + red)', { nir: img.select('B5'), red: img.select('B4') }); //NDVIをビジュアライズするための設定 var NDVICOLOR = { bands: ["B0"], max: 0.7188666462898254, min: -0.5202493667602539, opacity: 1, palette: ["0036ff","ff58e2","efff00","05ff19"] } //バンドネームを変更 NDVI = NDVI.select(["B5"], ["B0"]) Map.addLayer(NDVI, NDVICOLOR, "NDVI"); |
実行結果
アドベントカレンダー
この記事は、Google Earth / Google Earth Engine Advent Calendar 2018への参加投稿です。