2018/06/05

文系のための「GEEによるバンド合成」

一般的なデジタルカメラには可視領域をカバーする光学センサーが搭載されている。
そして、レンズを通して入ってきた光はカラーフィルタを通過し、
赤色光緑色光青色光の三種類の光の強さに分解される。

赤色光緑色光青色光によって全ての色を表現できるため、
この三種類の光をあわせて「光の三原色」ともよぶ。
コンピュータの世界では、よくRGBという言葉で表される。

詳細についてはすでに文系のための「カラー画像のしくみ」で説明した。
また、分解された光の成分は、それぞれ、対応するRGBチャンネルに割り当てられる。
これについては文系のための「カラーチャンネル」で説明した。

人工衛星に搭載されている光学センサーを使用する場合もこの仕組みを利用する。
ただし、すでに述べたように、地球観測衛星は人の目に見えない範囲もカバーし、
光学センサーで感知した光を複数のバンド(帯域)に分けて取得する。

バンドの数は人工衛星に搭載されたセンサーに依存し、
Landsat 8OLIの場合には11のバンドに分けられている。
ちなみに、国産の人工衛星「ALOS」のAVNIR-2センサーは4バンド

一般的なデジタルカメラは可視領域3バンドに対してRGBの3チャンネル
では、三つ以上のバンドで得られた人工衛星の複数バンドに対するチャンネルは…?
実は、やはり、可視化するためにはRGBの3チャンネルに割り当てることになる。

このことは実際に試してみた方がわかりやすい。

まずは、検索バーを使って、Landsat 8ImageCollectionをインポートし、
インポートしたImageCollectionの名前を「landsat8」に変更しておく。
そして、時期と場所でフィルタリングし、雲がもっとも少ない一枚を取得する。

var ln8_2016 = ee.Image(
                landsat8
                .filterDate(beginning, ending)
                .filterBounds(heijou)
                .sort("CLOUD_COVER")
                .first()
                );
Map.centerObject(ln8_2016, 10);

詳しい手順は文系のための「Image CollectionからのImageの抽出」を参照。
なお、マップの中心は抽出した一枚の衛星画像が中心となるようにセットしている。
Map.centerObject()はジオメトリではなく、Imageに対しても使える。

さて、ここからが重要なポイントとなる。
まずは、抽出された画像の情報を詳しく見てみることにする。
以下のコードを実行し、コンソールに表示される情報を観察する。

print(ln8_2016)

実行した結果として、抽出された画像の情報が表示されるので、
bands: List (12 elements)」と書かれたところをクリックして展開すると、
以下のように表示される筈である。



一応、Landsat 8OLIの各バンドについても確認しておくと…。

  • バンド1:430-450nm(短波青色光)
  • バンド2:450-510nm (青色光)
  • バンド3:530-590nm(緑色光)
  • バンド4:640-670nm(赤色光)
  • バンド5:850-880nm(近赤外光)
  • バンド6:1,570-1,650nm(短波長赤外光)
  • バンド7:2,110-2,290nm(短波長赤外光)
  • バンド9:1,360-1,380nm(短波長赤外光)

ここには12のバンドが並んでいるように見えるが、
12番目のバンドは「QAバンド」という特殊なバンドであり、
ここでは使用しないので無視する。必要なバンドは0〜10の11バンドである。

これらのバンドには名前がついている。
バンド1であれば「B1」、バンド2であれば「B2」…。
Landsat 8 のデータの場合、各バンドの名称は極めて解り易い。

では、最初は可視領域での合成を行ってみる。
一般的に可視領域は概ね400〜700nmの範囲である。
これに該当するのは、バンド4バンド3バンド23バンドである。

この三つのバンドをRGBチャンネルに入れて表示するのが以下のコマンド。

Map.addLayer(
                ln8_2016,
                {
                  bands: ['B4', 'B3', 'B2'],
                  gamma: 1,
                  max: 12000,
                  min: 5000
                }
            );

可視化パラメータの「bands」に対して、前から順番にRGBのチャンネルを指定する。
すると、11バンドのうち可視領域の3バンドが合成され、
航空写真のような衛星画像が見事に表示される。

このように、見た目の通りに正しく表示された衛星画像は、
トゥルーカラー(True Color)」とよぶ。
まるで、航空写真に見えるが実際には人工衛星の画像である。




では、異なる表現についても実験してみることにする。
今度はバンドを入れ替えて、「偽物の色の画像」を作ってみることにする。
ちなみに、この種の画像は「フォールスカラー(False Color)」とよぶ。

まずは、ひとつ目。先程のコードの「bands」の部分を以下のように書き直す。

Map.addLayer(
                ln8_2016,
                {
                  bands: ['B5', 'B4', 'B3'],
                  gamma: 1,
                  max: 12000,
                  min: 5000
                }
            );



この合成では「近赤外光(850-880nm)」相当するバンド5を「赤色チャンネル」に、
バンド4に相当する「赤色光」を「緑色チャンネル」に、
そして、バンド3の「緑色光」を「青色チャンネル」に割り当てている。

バンド5がカバーする近赤外光は植物の活性度に大きく関わっているとされている。
植物が光合成を行う時には葉緑素(クロロフィル)が活性状態となるが、
植物にとって近赤外光はエネルギーが強すぎるために反射するのである。

したがって、このカラー合成画像を観察し、
赤く輝く部分があれば、その場所では光合成が活発に行われていることになる。
逆に、黒ずんだ赤色に見える部分は葉緑素の活性度が低いことを示している。

さて、森林が赤色に見えるのは落ち着かないかもしれない。ということで、もう一つ。

Map.addLayer(
                ln8_2016,
                {
                  bands: ['B4', 'B5', 'B3'],
                  gamma: 1,
                  max: 12000,
                  min: 5000
                }
            );



以前は「ナチュラル・カラー(Natural Color)」と呼ばれていた。
この合成では「近赤外光(850-880nm)」を緑色チャンネルに入れ、
緑色光(530-590nm)」を青色チャンネルに入れている。

このようにして、三つ以上の複数のバンドをRGBチャンネルに割り当て、
不可視な現象を可視化できることがリモートセンシングの面白さの一つである。
ただし、本当にリモートセンシングは奥が深い。これだけではない。

ということで、次回からは少しずつ、内容を深めつつ、GEEに慣れていきたい。

なお、今回の資料は公開レポジトリの中に置いてある。
Reader」の「users/yufujimoto/thinking_about_gee」の中の、
visualizing_multi_band」が該当するスクリプトである。


Creative Commons License
This work is licensed under a Creative Commons Attribution 4.0 International License.

0 件のコメント:

コメントを投稿