リモートセンシング1 イコノス画像をGrassへ

Jun. 14, 2013 作成開始  追加修正 

はじめに Jun. 14, 2013

0. 座標系の変換  Jun. 14, 2013

1. Grassの平面直角座標系へのマルチスペクトル画像の取り込みと表示  Jun. 15, 16, 2013

2. マルチスペクトル画像のカラー合成  Jun. 16, 23, 2013

3. r.rescale.eqを使ってマルチスペクトル画像を最適化と合成 Jun. 23, 2013

4. RGBレイヤーのDN値のチェック Jun. 27, 2013

はじめに

 イコノスの画像ファイル OrthorectifiedをGrass-GISに取り込むプロセスをここに示す。Landsatなど比較的古い衛星画像はUTM図法に投影されていたが,イコノスの画像のメタファイルには,座標系については次の様に掲載されている。

Map Projection: Transverse Mercator
TM Specific Parameters
Latitude of central parallel: 36.0000000000 degrees
Longitude of central meridian: 136.0000000000 degrees
Scale Factor: 0.9999000000
False Easting: 0.00
False Northing: 0.00
Datum: JGD2000

 ここで扱う奈良県はUTM zone 53であり,この中央子午線は135Eである。投影法はTransverse Mercatorとなっていて,中央緯線36,中央子午線が136というのは,日本だけの平面直角座標系VI系を意味している。取り込むLocationは,平面直角座標系VIだから座標変換の必要がない。

 それゆえ,4枚のマルチスペクトルファイルをgrassにgdalコマンドを使って取り込むところから作業は始まる。イコノスの一般的な情報を次に示す。

- IKONOSのマルチスペクトル情報


band情報など(Ikonos-2)
  高度:約681km
  観測時刻:地方平均時10:30〜11時頃
 センサー1画素あたりの情報量: 11bits (0から2047までの2048階調)

  マルチスペクトル
     1 band / 0.445 〜 0.516μm / 青 / 3.28m / 土壌と植物,針葉樹と広葉樹の区分,水質調査など
     2 band / 0.505 〜 0.595μm / 緑 / 3.28m / 活力ある植物からの反射量
     3 band / 0.632 〜 0.698μm / 赤 / 3.28m / 植物のクロロフィルの吸収量
     4 band / 0.757 〜 0.853μm / 近赤外 / 4m / 活力ある植物の近赤外反射量
  解像度3.28mは,90度直下の場合。

  パンクロマチック
     0.526 〜 0.929μm / 可視 / 0.82m
  解像度0.82mは,90度直下の場合。

各バンドの波長域の図を次に示す。このソースは日本スペースイメージング社の宣伝パンフpdfである。

 

カラー合成
  フォールスカラー  R = 4 band / G = 3 band / B = 2 band
  ナチュラルカラー  R = 3 band / G = 4 band / B = 2 band
  トゥルーカラー    R = 3 band / G = 2 band / B = 1band

なお,今回購入されたプロダクツのメタデータは次の様である。
==============================================================
Product Component Metadata
Number of Components: 1
Component ID: 0000000
Product Image ID: 000
Component File Name:
各ファイルの対応band番号:3 po_1469893_red_0000000.tif
各ファイルの対応band番号:2 po_1469893_grn_0000000.tif
各ファイルの対応band番号:1 po_1469893_blu_0000000.tif
各ファイルの対応band番号:4 po_1469893_nir_0000000.tif
Component Map Corner Coordinates
Number of Coordinates: 4
Coordinate: 1
Map X (Easting): -20198.00 meters
Map Y (Northing): -162356.00 meters
Coordinate: 2
Map X (Easting): -14013.00 meters
Map Y (Northing): -162356.00 meters
Coordinate: 3
Map X (Easting): -14013.00 meters
Map Y (Northing): -170041.00 meters
Coordinate: 4
Map X (Easting): -20198.00 meters
Map Y (Northing): -170041.00 meters
Component Map Coordinates (in Map Units)
UL Map X (Easting): -20198.00 meters
UL Map Y (Northing): -162356.00 meters
Pixel Size X: 1.0000000000 meters
Pixel Size Y: 1.0000000000 meters
Product Order Map Units: meters
Columns: 6186 pixels
Rows: 7686 pixels

 

0. 座標系の変換

 この必要がないのだが,UTM座標系53のものを平面直角座標系VIに変換する場合のコマンドを次に示す。

 EPSGコードでいうと,3099(http://www.spatialreference.org/ref/epsg/3099/) から2448 (http://www.spatialreference.org/ref/epsg/2448/)に変換することになる。geotif画像を適当なフォルダに入れて,pathを指定する必要がある。なお,解像度は1mとすると,-tr 1 1としなければならない。R, G, B, NIRのそれぞれについて実行することになる。redの実行例を示す。

GRASS 6.4.2 (Plane6_JGD2000):~ > gdalwarp -s_srs "EPSG:3099" -t_srs "EPSG:2448" -tr 1 1 -r bilinear -dstnodata -9999 "/Users/moto/grassdata/FileConvert_folder/Asuka/ikonos/po_1469893_red_0000000.tif" "/Users/moto/grassdata/FileConvert_folder/Asuka/ikonos/po_1469893_red_cs6.tif"
Creating output file that is 6202P x 7703L.
Processing input file /Users/moto/grassdata/FileConvert_folder/Asuka/ikonos/po_1469893_red_0000000.tif.
for band 1, destination nodata value has been clamped to 0, the original value being out of range.
0...10...20...30...40...50...60...70...80...90...100 - done.
GRASS 6.4.2 (Plane6_JGD2000):~ >

1.Grassの平面直角座標系への取り込みと表示

 さて,平面直角座標系VIのLocationでAsukaのmapsetに取り込む。これはコマンドではなく,guiを使う。File/import raster map/multiple format using GDAL (r.in.gdal)。
 bands 1〜4の画像ファイルから複数の画像を使って表示する場合,複数の画像を合成して新たなファイルを作る場合(次の節で示す)と,個々の画像を使ってGrassで合成して表示する場合がある。ここでは,後者の例を示す。ポピュラーなカラー合成には上に示したように3種類ある。カラー合成のそれぞれの意味は,大阪市大の升本先生のウェブページ(いつまで残っているのか不安だが)に簡潔に区分が紹介されているので,参照してほしい。
 さて,表示法は,tkltkとpythonの場合で異なる。
 tkltkの場合は,
1. GIS managerのパネル(メインパネルと言っていいのか)の上段のアイコン群の左から2番目の,add RGB or HIS layerを追加するアイコンをクリックして,Map layers for Display 1に新たなレイヤーを追加する。RGBとはRed, Green, Blue,HISとはHue色相, Intensity明度, Saturation彩度のこと。
2. フォールスカラー  R = 4 band / G = 3 band / B = 2 band を表示する。
 GIS managerパネルのように3画像ファイルを下のように設定している。そして,耳成山付近について,方位と5m contours from 5m DEMを追加してMap Display 1に表示されたものをPhotoshopでレベルと明度・コントラストを調整した結果の図をweb用に変換したものを下に示している。

 ・赤色にバンド4,緑色にバンド3,青色にバンド2を対応させている。住宅地は青く見え,活性の高い植物はより赤く見える。

3. ナチュラルカラー画像を次に示す。緑が強調される。
 R = 3 band / G = 4 band / B = 2 band,2.と同様の処理をしたものを次に示す。

 

4. トゥルーカラー画像も示しておいた方がいいだろう。
 R = 3 band / G = 2 band / B = 1band,2.と同様の処理をしたものを次に示す。

 海の様子や道路・市街地などの人口構造物の識別に利用されるだけあって,建物や道路が上の2種の合成画像に比べてよく識別できる。

5. Pythonによる表示は,osgeo4wのサイトに掲載されているpdfのp.255-を参照してください。以下の記述はこの案内にかなり依存しています。

2. マルチスペクトル画像の合成 以降Grass 6.4.3 RC2 guiを使う

 2.1 regionの指定
ピクセル深度が高い場合やピクセル数が多い場合,先にregionを必要な部分に限定しないと計算・表示ができない場合がある。そこで4枚の衛星画像rasterを使ってregionの設定をする。
設定/領域/領域設定。これで,衛星画像に応じた領域と解像度が設定される。

 2.2 RGB画像ファイルと階調数の設定,表示

 レイヤーマネージャのメニューから[ラスター]-[カラー調整]-[RGB作成]を選択。ナチュラル画像ファイルを作成する。新規作成するファイル名をAsukaIkonos_342compositeとする。RGBに対応する衛星画像band番号を表示しておくと忘れないだろう。
 レベルタブで各レイヤーの階調数を指定する。既定値は32となっている。ここで使っている衛星画像データは11bitであるが,3枚の画像をr.compositeすると,例えば既定値を使うと,32x32x32=32768色となる。8bit=256であるが256x256x256=1677万色つまりフルカラーになる。
 試しに,まとめて,レベルタブの,各コンポーネントに使用されるレベルの数,で,256として実行した(個々のRGB画像について異なるレベルを設定する際は,個々に入れる必要がある)。ぼくのMac上のWindowsでは4分30秒ほどかかった。

 Map Displayの上段のアイコン群のうち,various zoom optionsをクリックして,解析領域でズームg.regionを選ぶと,領域一杯が表示される。しかしながら,コントラストが悪くて極めて区別しにくい。そこで次の作業が必要となる。

次の図はr.compositeの結果

 

次の図は上の図をPhotoshopで自動レベル調整,明度とコントラスト調整後。

 

2.3  色調補正(実施しない)

 レイヤーマネージャのメニューから[画像]-[画像カラーの管理]-[RGBのカ ラーバランス]i.landsat.rgbを選択。オプションタブで,全てのチャンネルのデータの色を全領域に拡張(-fオプション)を選ぶ。これによって,全てのチャンネルでのヒストグラムを最大値から最小値まで引き伸ばすことができる。最適な結果を得るには多少の試行錯誤が必要である。i.landsat.rgbは現在のところ8bitの色深度のレイヤーだけがサポートされるので,256階調を限界とする。いずれにしろ,この色調補正プロセスは,表示だけでファイルが作られない。
 なお,このイコノス画像をそのまま使うと,次の様なメッセージが出る。一画像の分だけ示す。i.landsat.rgb -p -r red=AsukaIkonos_red@Asuka green=AsukaIkonos_nir@Asuka blue=AsukaIkonos_grn@Asuka
WARNING: カラールールがデータ全体のレンジをカバーしていません!
(ルールは 0.000000 から 255.000000 ですがデータは 1.000000 から 2047.000000 です)
ラスターマップ <AsukaIkonos_red@Asuka> のカラーテーブルが 'rules' に設定されました

 2.4  ラスターデータのエクスポート

 出力結果がGISで使える形式で出力するためには,
レイヤーマネージャのメニューから、[ファイル]-[ラスターマップのエクスポート]のサブメニューから,[一般的なエクスポートフォーマットr.out.gdal]を選択する。実行例を次に。

2.4.1 geotifで単精度浮動小数(失敗)
書き出すGISフォーマットGTiff ファイルタイプ: CFloat32 (単精度浮動小数)

(Sun Jun 23 13:02:04 2013)
r.out.gdal input=AsukaIkonos_342composite@Asuka type=CFloat32 output=\\.psf\Mac_Win_Shared\AsukaIkonos_342composite@Asuka
GDALデータ型にエクスポート: CFloat32
GDAlデータタイプとデータ無しの値を確認中
ERROR 6: SetColorTable() only supported for Byte or UInt16
bands in TIFF format.
GDALラスターにエクスポート: Exporting to GDAL raster
WARNING: Too many values, color table cut to 65535 entries
Warning 1: Lost metadata writing to GeoTIFF ... too large to
fit in tag.
r.out.gdal 完了.
(Sun Jun 23 13:05:19 2013) コマンド終了 (3 min 14 sec)

 この衛星画像は符合無し2048階調であるし,上のメッセージにあるようにonly supported for Byte or UInt16だから,ファイルタイプはUInt16 (符号無し16bit整数 0〜65,535)を選ぶ必要がある。

2.4.2 geotifでUInt16 (符号無し16bit整数 0〜65,535)(失敗)

(Sun Jun 23 13:32:29 2013)
r.out.gdal input=AsukaIkonos_342composite@Asuka type=UInt16 output=AsukaIkonos_342composite@Asuka
GDALデータ型にエクスポート: UInt16
GDAlデータタイプとデータ無しの値を確認中
WARNING: 選択されたGDALデータタイプはデータ範囲をカバーしません
WARNING: GDALデータタイプ: UInt16, 領域: 0 - 65535
WARNING: ラスターマップ <AsukaIkonos_342composite@Asuka> 領域: 0 - 1.67772e+007
WARNING: Raster export results in data loss.
ERROR: ラスターエクスポートは失敗しました
(Sun Jun 23 13:33:53 2013) コマンド終了 (1 min 24 sec)

 そういえば,r.compositeしたファイルは(2^11)^3だから1677万階調なんだなあ。用意されたファイルタイプはUInt32(429万)までしかないので,結局,イコノス衛星画像の階調のままでは,r.out.gdalが使えないことになる。

2.4.3 Tiffのエクスポート(成功)

 これまで同様にwxphythonで,[ファイル]-[ラスターマップのエクスポート]-[TIFFのエクスポート]を選択し、オプションに"TIFFワールドファイルを出力"

Sun Jun 23 13:56:21 2013)
r.out.tiff -t input=AsukaIkonos_342composite@Asuka output=AsukaIkonos_342composite@Asuka
TIFFワールドファイルを書出します
r.out.tiff 完了.
(Sun Jun 23 13:58:15 2013) コマンド終了 (1 min 54 sec)

 と,出力されたように見えるがどこにもみつからない。出力パスの指定がない。これはGrass wxphython 6.4.3のバグか,当方の使用環境に基づくものかもしれない(5 hrs以上格闘)。

 さて,tkltkでは,パス指定も可能でワールドファイルもtiffも問題なく出力される。

r.out.tiff -t input=AsukaIkonos_342composite@Asuka output=//.psf/Mac_Win_Shared/仮の作業フォルダ/AsukaIkonos_342compTif compression=none

TIFFワールドファイルを書出します
r.out.tiff 完了.

3. r.rescale.eqを使ってマルチスペクトル画像を最適化と合成

3.1 r.rescale.eq実行

 Ikonosマルチスペクトル画像の階調数が多く,Landsatレベル(階調数8bits)に対応したGrassで解析することが難しい。そこで,種々トライした結果,次の画像を得た。もともとのband1(青色画像)は2048階調全体ではかなり狭い範囲に偏っている。

下の図は,r.rescale.eqで256階調で最もダイナミックレンジを大きくしたもの。

もともとのband1のヒストグラムは次のものである。

 wxphythonでこの結果が得られた手順を下に示す。

 ラスター/カテゴリー値・ラベルの変更/ヒストグラムの再スケールr.rescale.eqで,必須タブだけで入力する。入出力ファイル名を入力し,出力するデータの範囲,に,0,255を入れる。
 画像のヒストグラムを得るには,画像/ヒストグラム,のパネルで実行する。

3.2  他のband画像ファイルも実行して,r.composite

 前述のように,レイヤーマネージャのメニューから[ラスター]-[カラー調整]-[RGB作成]を選択。そして,シュード画像ファイルを作成する。新規作成するファイル名をAsukaIkonos_rescaled432compositeとする。レベルタブで各レイヤーの階調数を指定するのだがここでは既定値32を使う。

(Thu Jun 27 00:03:40 2013)
r.composite red=AsukaIkonos_nir_rescaled@Asuka green=AsukaIkonos_red_rescaled@Asuka blue=AsukaIkonos_grn_rescaled@Asuka output=AsukaIkonos_rescaled432composite
出力ラスターマップのカラーテーブルを作成しています...
ラスターマップ <AsukaIkonos_rescaled432composite> を書出し中...
r.composite 完了. ラスターマップ <AsukaIkonos_rescaled432composite> が作成されました
(Thu Jun 27 00:09:48 2013) コマンド終了 (6 min 8 sec)

 

4. RGBレイヤーのDN値のチェック

 上記compositeファイルのメタデータを示すと,Range of Dataは,0〜32767と表記される。
耕地の赤紫色や集落の紺色付近の情報をみると最大値に近い値,森林の明るい緑色の部分をクリックすると992などの値が表示される。compositeファイルには次の様に,3画像の情報が単に積で表現されていることになる。(256x32/256)^3 = (2^5)^3 = 2^15 = 32767 である。
 下の図で左欄が見えないので,次に示す。
 easting|northing|site_name|AsukaIkonos+rescaled432composite
 -15198.829658 | -165274.824146 || 31749 |

 r.compositeで3枚の画像ともレベルを最大の256にした場合のメタデータをみると,

Type of Map: raster Number of Categories: 16777215 |
| Data Type: CELL |
| Rows: 7686 |
| Columns: 6186 |
| Total Cells: 47545596 |
| Projection: Transverse Mercator |
| N: -162355.5 S: -170041.5 Res: 1 |
| E: -14012.5 W: -20198.5 Res: 1 |
| Range of data: min = 0 max = 16777215

となり,Queary raster/vector mapsのピクセル値は最大値を16777215としてかなり大きな数値となる。実用上を考えると,レベルは既定値の32で十分だと言える。

 RGBそれぞれの画像を合成しないでただ表示する場合には,それぞれのピクセル値が表示される。
出力を次の様に単に改行して整理した。

(Thu Jun 27 20:00:02 2013) r.what --v -f -n input=AsukaIkonos_nir_rescaled@Asuka,AsukaIkonos_red_rescaled@Asuka,AsukaIkonos_grn_rescaled@Asuka east_north=-18584.657125,-164569.554811 easting|northing|site_name
| AsukaIkonos_nir_rescaled@Asuka
| AsukaIkonos_nir_rescaled@Asuka_label
| AsukaIkonos_red_rescaled@Asuka
| AsukaIkonos_red_rescaled@Asuka_label
| AsukaIkonos_grn_rescaled@Asuka
| AsukaIkonos_grn_rescaled@Asuka_label
-18584.657125 | -164569.554811
|| 171 | 726 thru 728
| 228 | 448 thru 451
| 225 | 545 thru 547

(Thu Jun 27 20:00:03 2013) コマンド終了 (0 sec)

 上の赤のペア,3行の最初の行について見ると,eg. 171は明度0〜255に対応。ヒストグラムの726 - 728はrescaled前の0- 2047の値がラベル値として残っている。DN値として生きるのは前者の数値である。さて,RGB表示で3画像のピクセル値gradientが求まっても,地上情報の解析に役立てることは難しい。