今回はJPG画像をGRASSに取り込み,位置情報を付加します.
今回使用するデータは気象庁が発表している震央地名の画像です.

0.画像に関する注意

毎度の事ですが,ページ内の画像はひどく荒い画像です.
特に今回は格子状になっているものが線しか見えないなど非常に質が悪いといわざるを得ません.
そこで,画像のあるページの最下部にはそれぞれの画像のリンクが貼ってありますので,そちらをご参考ください.
ただし,原寸大表示ですので,見づらいことがあるかもしれません.

1.画像を変換する

まず,eosmaiにログインしてください.
そして,作業をするためのディレクトリを作成し,ディレクトリの移動をしてください.
mkdir Epicenter
cd Epicenter
このディレクトリに今回使用するデータ[Epi4.pdf]をコピーします.
ただし,[Epi4.pdf]はeosmer内に格納されているので,ftp(File Transfer Protocol)ソフト[lftp]を使用して,ディレクトリ[Epicenter]に持ってきます.
lftp -u ユーザー名 eosmer
コマンドを入力すると,パスワードの入力が求められます.
人によっては文字化けを起こしている可能性があります(私の場合は,[鴻若]と表示されました)が,普通にeosmerのログインパスワードを入力してください.
ログインに成功すると,一番左のところが[eosmai]から[lftp ユーザー名@eosmer]に変わります.

ログインできたら,データ[Epi4.pdf]をコマンド[get]を使って持ってきます.
get /tmp/Epi4.pdf
getが成功すると,下のように表示されます.
529023 bytes transferred
成功したら,exitでlftpを終了し,[ls]でディレクトリ[Epicenter]にあるかどうか確認してください.
exit
ls

では,[Epi4.pdf]がどのような画像であるのかを見るために,画像編集ソフト[GIMP]を使って見てみてみましょう.
gimp &

画像をGRASSに取り込む一般的な方法はpdfをjpgやgifに変換してからGRASSに取り込む方法です.
画像の変換にはGIMPを使ってもいいですが,今回はImageMagickを使用します.
では,画像変換のコマンド[convert]を使ってみましょう.
convert -density 400 Epi4.pdf Epi4.jpg
今回は,pdfの文字を読み取る(OCR:Optical Character Recognition:光学文字認識)ために,解像度を300dpi以上にする必要があります.
今回は400dpiで変換させるので,オプション[-density]の後に400と記入しています.

2.lonlatの作成

GRASSに1.で作成した[Epi4.jpg]を取り込みますが,GISとして用いるために,位置情報を付加させる必要があります.
都合良く,[Epi4.jpg]には緯度経度1度ごとに緯線・経線が引かれていますので,それを元に緯度経度を付加させようと思います.

その準備として,GRASSのベクター形式で南北32N~38N,東西132E~138Eの範囲で緯度経度2度ごとにラインを作って,格子を作ります.
エディター[emacs]を立ち上げて,データ[lonlat]を作成しましょう.
emacs &
lonlatは長いので,別ページに格納してあります.
ここをクリックしてください.

3.lonlatの取り込み

では,2.で作成した[lonlat]をGRASSに取り込みます.
まず,GRASS6.2を立ち上げてください.
grass62
それでは,新しいロケーション[Epi4_ll]を作成します.
特に言及しない場合,[yes/no]の選択肢は[yes]を選択してください.

  1. 画面の右下にある[Projection values]をクリック
  2. 黒い設定画面になったら、LOCATIONのところに[Epi4_ll]と入力する
  3. しばらく[yes]
  4. 座標系の選択:B(lat-lon)
  5. ロケーションの一言説明を入力
  6. geodetic detum : no
  7. ellipsoids : wgs84
  8. ロケーション範囲の設定
North : 40N
South : 30N
West : 130E
East : 140E
East-West : 0.1
North-South : 0.1

ロケーション[Epi4_ll]が作成できたら,早速[lonlat]を取り込みましょう.取り込むためのコマンドは[v.in.ascii]です.
v.in.ascii in=lonlat out=lonlat format=standard
取り込みが終わったら,モニターを立ち上げて[lonlat]を表示させてみてください.
d.mon start=x0
d.vect lonlat
上のような横線4本,縦線4本からなる格子ができるはずです.

4.Epi4.jpgの取り込み

1.で,Epi4.jpgの解像度を400dpiに設定しました.
しかし,ロケーション[Epi4_ll]の解像度は[0.1]と荒いので,[Epi4.jpg]のデータが損なわれてしまう可能性があります.
そこで,ロケーションの解像度を上げて,データの損傷をできるだけふさごうと思います.

そのために,まず,[Epi4.jpg]の解像度を知る必要があります.
GIMPで調べてもいいのですが,ここではImageMagickを用いてみます.
新たにktermを立ち上げ,ディレクトリ[Epicenter]に移動した後,下のコマンドを入力してください.
display Epi4.jpg
すると,[Epi4.jpg]が画面に表示されます.
その状態で,画面内で右クリックを押すと,オプションの選択画面が表示されます.
そこで,[ImageInfo]を選択してください.
すると,[Epi4.jpg]の詳しい情報が別窓で表示されます.
詳細を見てみると,解像度が[3306×4678]であるとわかりました.

ロケーション[Epi4_ll]は縦横100×100の解像度ですので,解像度を[0.1]==>[0.002]に変更します.

GRASSを立ち上げている方のktermに戻って,次のようにコマンドを入力してください.
g.region res=0.002
すると,解像度が南北・東西ともに[0.002]になっているはずです.
これを確認してみましょう.
コマンド[g.region]にオプション[-p]をつけると,現在のロケーション範囲の設定を表示させる事ができます.
g.region -p
そこで,縦横の解像度が以下のようであればOKです.
rows: 5000
cols: 5000

では,コマンド[r.in.gdal]を用いて,[Epi4.jpg]をGRASSに取り込みます.
ここで,GDAL(Geospatial Data Abstraction Library)とは様々なデータを変換する際に用いられるライブラリのことを言います.
r.in.gdal in=Epi4.jpg out=epi4 location=epi4_jpg
上のコマンドで正しく取り込む事ができると,下のように表示されます.
r.in.gdal completed. 
この場合,新しいロケーション[epi4_jpg]を作成し,そこにラスター形式で[Epi4.jpg]を取り込むという形になります.

では,一度GRASSを終了させて,取り込んだjpg画像を見てみましょう.
exit

5.Epi4.jpgの編集

再度GRASSを立ち上げて,ロケーション[epi4_jpg]に入ってみましょう.
また,ここではmapsetが[PERMANENT]になっている事に注意してください.

まず,ロケーション内のラスターデータを確認してみましょう.
g.list rast
すると,[Epi4.jpg]を取り込んだはずが,[epi4.red],[epi4.green],[epi4.blue]という3つのラスターデータができています.
これはjpgのデータを取り込んだ際に赤・青・緑の3つに分けて取り込んでいるからです.
では,どういったデータなのか,一度モニターを立ち上げて,見てみましょう.
d.mon start=x0
d.rast epi4.red
すると,白黒の画像が出てきたと思います.
他のgreenとblueも確認してみてください.

また,これら3つをあわせて,カラーで表示させる事もできます.
d.rgb r=epi4.red g=epi4.green b=epi4.blue

続いて,[epi4.red],[epi4.green],[epi4.blue]は,元々一つのデータであったものを分割したのですから,ひとまとめにするためにグループ化します.グループ化のコマンドは[i.group]です.
i.group gr=jpg in=epi4.red,epi4.green,epi4.blue
上のコマンドでは[epi4.red],[epi4.green],[epi4.blue]の3つをグループ名[jpg]としてグルーピングしています.

また,[Epi4.jpg]に位置情報を付加させるために,ロケーション[Epi4_ll]のベクターデータ[lonlat]と対応させる必要があります.そのためのコマンドが[i.target]です.
i.target gr=jpg location=Epi4_ll mapset=ユーザー名

ここまでできたら,いよいよ[Epi4.jpg]と[lonlat]とを対応させます.
ここでの作業はモニターとマウスを使う必要があるので,モニターはできるだけ大きくしておいてください.
コマンドを入力した後はモニターの大きさを変える事はできませんので注意が必要です.

ラスターデータとベクターデータ,もしくはベクターデータ同士を対応させるためのコマンドは[i.vpoints]と言います.また,ラスターデータ同士の場合は[i.points]という違うコマンドになるので注意してください.
i.vpoints gr=jpg
上のように入力すると,モニターの画面左側にに[epi4.red],[epi4.green],[epi4.blue]が表示されます.ここでは例として[epi4.green]を選択しますが,redでもblueでも大丈夫です.

続いて,モニター下側の[VECTER]をクリックすると,今度はモニター画面右側に[lonlat]が表示されるので,選択してください.
ここで,ベクターの色を指定するように求められるので,見やすい色を選択してください.

すると,モニター上には上図のように左側に[epi4.green]が,右側に[lonlat]が表示されます.

ここですることは,[lonlat]の格子点16点と対応する[epi4.green]の点を指定する事です.
作業手順を説明します.
  1. 画面下側にある[ZOOM]を用いて,[epi4.green]と[lonlat]の同じ緯度経度の地点を拡大表示させる
  2. [epi4.green]の格子点をクリック(ポイントはオレンジ色です)
  3. 2と同じ緯度経度の[lonlat]の格子点をクリック(ポイントの色が緑に変化します)
  4. 1,2,3を繰り返し,全ての格子点でポイントを打つ(下図を参照)
  5. 画面下側の[ANALYSE]をクリック
  6. 画面下側の[1st Order]をクリック
  7. [2nd Order]を選択
  8. [Done]
以上の作業ができたら,画面下側の[QUIT]で[i.vpoints]を終了させてください.

では,上で行った編集作業を反映させるような形でグループ[jpg]を修正します.そのコマンドは[i.rectify]です.
i.rectify -a gr=jpg ex="" or=2
上の作業が終わったら,一度GRASSを終了させてください.

では,再びGRASSを起動させますが,今度はロケーションを[Epi4_ll]に、マップセットを[ユーザー名]にしてください.
ここで,リストを取って,ラスターデータを確認してみましょう.
g.list rast
すると,[epi4.red],[epi4.green],[epi4.blue]が表示されると思います.
それでは,モニターを立ち上げて,表示させてみましょう.
d.rgb r=epi4.red g=epi4.green b=epi4.blue
d.vect lonlat col=blue

以上で今回の作業は終了です.
皆様お疲れ様でした!


タグ:

+ タグ編集
  • タグ:
最終更新:2007年07月03日 16:16