画像コレクション

画像コレクションは、Earth Engine 画像のセットを指します。たとえば、すべての Landsat 8 画像のコレクションは ee.ImageCollection です。これまで使用してきた SRTM 画像と同様に、画像コレクションにも ID があります。単一の画像と同様に、コードエディタから Earth Engine データカタログを検索し、データセットの詳細ページを確認することで、画像コレクションの ID を見つけることができます。たとえば、「landsat 8 toa」を検索し、最初の結果をクリックします。これは、 USGS Landsat 8 Collection 1 Tier 1 TOA 反射率データセットに対応しているはずです。[インポート] ボタンを使用してデータセットをインポートし、l8 に名前を変更するか、ID を画像コレクション コンストラクタにコピーします。

コードエディタ(JavaScript)

var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');

画像コレクションのフィルタリング

このコレクションは、地球上のすべての Landsat 8 シーンを表しています。アルゴリズムをテストする単一の画像または画像のサブセットを抽出すると便利なことがよくあります。コレクションを時間またはスペースで制限するには、フィルタリングします。たとえば、特定の場所をカバーする画像にコレクションをフィルタするには、まずジオメトリ描画ツールを使用して、ポイント(または線やポリゴン)で対象領域を定義します。目的のエリアに移動し、[ジオメトリのインポート] にカーソルを合わせ(1 つ以上のジオメトリがすでに定義されている場合)、[+ 新しいレイヤ] をクリックします(インポートがない場合は、次のステップに進みます)。ポイント描画ツール()を取得し、対象地域にポイントを作成します。インポートに point という名前を付けます。次に、l8 コレクションをフィルタして、ポイントと交差する画像のみを取得し、2 つ目のフィルタを追加して、コレクションを 2015 年に取得された画像のみに制限します。

コードエディタ(JavaScript)

var spatialFiltered = l8.filterBounds(point);
print('spatialFiltered', spatialFiltered);

var temporalFiltered = spatialFiltered.filterDate('2015-01-01', '2015-12-31');
print('temporalFiltered', temporalFiltered);

ここで、filterBounds()filterDate() は、画像コレクションのより一般的な filter() メソッドのショートカット メソッドです。このメソッドは、引数として ee.Filter() を取ります。これらのメソッドの詳細については、コード エディタの [ドキュメント] タブをご覧ください。filterBounds() の引数はデジタイズしたポイントで、filterDate() の引数は文字列で表された 2 つの日付です。

フィルタされたコレクションは print() できます。一度に 5,000 個を超えるアイテムを印刷することはできません。たとえば、l8 コレクション全体を印刷することはできません。print() メソッドを実行すると、コンソールで出力されたコレクションを検査できます。ジッピー()を使用して ImageCollection を展開し、features のリストを展開すると、画像のリストが表示されます。各画像も展開して検査できます。これは、個々の画像の ID を見つける方法の 1 つです。分析用の個々の画像を取得するもう 1 つのプログラム的な方法は、コレクションを並べ替えて、メタデータ プロパティに関連する最新、最古、または最適な画像を取得することです。たとえば、印刷された画像コレクションの画像オブジェクトを調べると、CLOUD_COVER というメタデータ プロパティが見つかることがあります。このプロパティを使用して、対象地域で 2015 年に最も雲の少ない画像を取得できます。

コードエディタ(JavaScript)

// This will sort from least to most cloudy.
var sorted = temporalFiltered.sort('CLOUD_COVER');

// Get the first (least cloudy) image.
var scene = sorted.first();

これで、画像を表示する準備が整いました。

余談: RGB 画像の表示

マルチバンド画像を地図に追加すると、Earth Engine は画像の最初の 3 つのバンドを選択し、デフォルトで赤、緑、青として表示します。また、データ型に応じて、前述のとおり、バンドをストレッチします。通常、これでは十分ではありません。たとえば、Landsat 画像(前の例の scene)を地図に追加すると、結果は次のようになります。

コードエディタ(JavaScript)

Map.centerObject(scene, 9);
Map.addLayer(scene, {}, 'default RGB');

まず、地図はズームスケール 9 で画像の中央に配置されます。次に、visParams パラメータの空のオブジェクト({})とともに画像が表示されます(詳細については、Map.addLayer() のドキュメントをご覧ください)。その結果、画像はデフォルトの可視化で表示されます。最初の 3 つのバンドはそれぞれ R、G、B にマッピングされ、バンドは float データ型であるため、[0, 1] にストレッチされます。つまり、沿岸エアロゾル帯域(「B1」)は赤で、青帯域(「B2」)は緑で、緑帯域(「B3」)は青でレンダリングされます。画像をトゥルーカラーの合成としてレンダリングするには、R、G、B にそれぞれ Landsat 8 バンドの「B4」、「B3」、「B2」を使用するように Earth Engine に指示する必要があります。visParams オブジェクトの bands プロパティを使用して、使用する帯域を指定します。Landsat バンドの詳細については、こちらのリファレンスをご覧ください。

また、一般的な地球表面のターゲットからの反射率を表示するのに適した minmax の値も指定する必要があります。リストを使用して帯域ごとに異なる値を指定することもできますが、ここでは 0.3max として指定し、min パラメータのデフォルト値である 0 を使用するだけで十分です。可視化パラメータを 1 つのオブジェクトに結合して表示します。

コードエディタ(JavaScript)

var visParams = {bands: ['B4', 'B3', 'B2'], max: 0.3};
Map.addLayer(scene, visParams, 'true-color composite');

結果は図 5 のようになります。このコードでは、将来使用できるように、可視化パラメータのオブジェクトを変数に割り当てています。このオブジェクトは、画像コレクションを可視化する際に役立ちます。

Tutorial_api_05_true_color.png
図 5. トゥルーカラー合成として、[0, 0.3] にストレッチされた Landsat 8 TOA 反射率画像。

さまざまなバンドを可視化して遊んでみてください。もう 1 つのお気に入りの組み合わせは、疑似カラー合成と呼ばれる「B5」、「B4」、「B3」です。その他の興味深い疑似カラー合成については、こちらをご覧ください。

Earth Engine は大規模な分析を行うように設計されているため、1 つのシーンのみを扱う必要はありません。次に、コレクション全体を RGB 合成として表示します。

画像コレクションの表示

画像コレクションを地図に追加する方法は、画像を地図に追加する方法と似ています。たとえば、l8 コレクションの 2016 年の画像と、以前に定義した visParams オブジェクトを使用すると、

コードエディタ(JavaScript)

var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');
var landsat2016 = l8.filterDate('2016-01-01', '2016-12-31');
Map.addLayer(landsat2016, visParams, 'l8 collection');

ズームアウトすると、Landsat 画像が収集された場所(陸上)の連続したモザイクが表示されます。また、[インスペクタ] タブを使用して画像をクリックすると、[ピクセル] セクションにピクセル値のリスト(またはグラフ)が表示され、インスペクタの [オブジェクト] セクションに画像オブジェクトのリストが表示されます。

十分にズームアウトすると、モザイクの中に雲があることに気づくでしょう。マップに ImageCollection を追加すると、最新の値の複合として表示されます。つまり、最新のピクセルのみが表示されます(コレクションで mosaic() を呼び出す場合と同様です)。そのため、異なる時間に取得されたパス間に不連続性が見られることがあります。そのため、多くの領域が曇って見えることがあります。次のページでは、画像を合成する方法を変更して、厄介な雲を取り除く方法を説明します。