衛星画像のサムネイル(JPEG)を作成する方法を解説します。
衛星画像はスマホやデジカメ、ドローンで撮影した画像とは異なるフォーマットとなっているため注意が必要です。
・衛星画像のBand数、並び順
・画素値の範囲
サムネイル作成コマンド
gdal_translateのサムネイル作成コマンドは下記になります。
パラメータの解説を順番に行っていきます。
1 |
gdal_translate -of JPEG -b 3 -b 2 -b 1 -ot Byte -scale 1041 9645 -outsize 1000 0 origin.tif thumbneil.jpg |
衛星画像のBand数、並び順
衛星画像は機種によってBand数が異なります。さらにBandの順序もバラバラです。
そのためサムネイルを作成する場合にRGBでどのBandを使用するのか指定しないと見た目の色合いがおかしいな画像になってしまいます。
例えばRapidEyeの場合マルチ画像が5Band存在しています。
さらに色の並び順がRGBではなくBGRになっているため作成されたサムネイルの色がおかしなことになります。
バンド | RapidEyeのRGB |
---|---|
Band1 | Blue |
Band2 | Green |
Band3 | Red |
Band4 | Red Edge |
Band5 | Near IR |
この問題を解決する方法として使用するBandを指定する方法があります。
JPEGを作成する場合Red、Green、Blueを順に指定する必要があります。
-bのオプションを使うことでRed、Green、Blueに何番目のBandを使用するか指定することができます。
上記のRapidEyeの場合は「-b 3 -b 2 -b 1」と指定することでRed、Green、Blueの順になります。
画素値の範囲
JPEGファイルを作成する場合は画素の範囲を0~255に収める必要がありますが、衛星画像の画素の範囲は0~65535となっているためそのまま変換すると対応したビューアーを使用しなければ見ることができません。
そこで画素の範囲を0~65536を0~255に変換する必要があります。
-scaleを指定することで使用する画素の範囲を指定することが可能です。
指定する範囲はgdalinfoコマンドを使用して確認します。
コマンド
1 |
gdalinfo -mm origin.tif |
結果抜粋
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Band 1 Block=5000x1 Type=UInt16, ColorInterp=Gray Description = Layer_1 Computed Min/Max=2032.000,58926.000 Metadata: LAYER_TYPE=athematic Band 2 Block=5000x1 Type=UInt16, ColorInterp=Undefined Description = Layer_2 Computed Min/Max=0.000,60851.000 Metadata: LAYER_TYPE=athematic Band 3 Block=5000x1 Type=UInt16, ColorInterp=Undefined Description = Layer_3 Computed Min/Max=651.000,57198.000 Metadata: LAYER_TYPE=athematic |
Band1~Band3のComputed Min/Maxの部分を参照して最小値と最大値を確認できるのでこの範囲を指定としたいのですが、衛星画像の画素値にはゴミが含まれていることがあり範囲が広くなりすぎてしまいます。
衛星画像のヒストグラムを見ると「10000~最大」の部分と「0~1000」くらいの部分はゴミ画素として扱ってしまって問題ないことが分かります。

この範囲についてはヒストグラムを確認するか画素の前後2%くらいを除いた範囲を算出したほうが良いです。
ここで有効な範囲は1041~9645とします。そのためオプションは「-scale 1041 9645」です。
実行結果
実行したコマンドと実行結果のサンプルは下記になります。
コマンド
1 |
gdal_translate -of JPEG -b 3 -b 2 -b 1 -ot Byte -scale 1041 9645 -outsize 1000 0 origin.tif thumbneil.jpg |
サムネイル

