とらりもんHOME  Index  Search  Changes  Login

とらりもん - GRASSによる画像解析 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

筑波大学農林工学系 奈佐原(西田)顕郎

これまでは, C言語でいちいちプログラムを組んで画像解析をやってみた。このようなやりかたは, 科学的・技術的な研究開発において, 最も本道を行くものであり, 基礎技術として重要である。しかしながら, C言語によるプログラミングは, 開発効率という点ではいまひとつであり, 我々は, もっと楽に便利にさまざまなことをさくっとやりたい, と思うのだ。そのために, 世の中にはさまざまな画像解析ソフトが出回っている。その中から, GRASSを使って, 画像解析をやってみよう。

GRASSはGeographic Resources Analysis Support Systemの略であり, 本来は地理情報システム(GIS)であって, 画像解析ソフトではない。しかし, GISの機能の多くは, 画像解析である。たとえば人工衛星画像や空中写真は, GISの解析対象となるデータだが, これらの解析の一部は, 画像解析そのものと言っても過言ではない。それどころか, GISは, 一般の画像処理ソフトよりも, 自由度が高く, 高度な解析もできてしまう。

なによりも素晴らしいのは, GRASSはオープンソースソフト(FOSS)である, ということだ。

!GRASSの起動と設定

では, 実際にGRASSで画像解析をやってみよう。GRASSは, 現在の多くのLinuxディストリビューション(SUSE, Fedora, Ubuntu等)では標準的にパッケージが用意されており, コマンドひとつで簡単にインストールできる。諸君が使っているLinux端末にも既にGRASSは入っているだろう。

GRASSは, 以下のようにすれば起動できる:


    $ grass -text

    起動できない場合は,
    $ sudo apt-get install grass
    でgrassをインストールすること。

!LOCATIONの初期設定

GRASSを起動すると, まず, コンソールに以下のような表示があらわれる:
                            GRASS 6.4.4

DATABASE: A directory (folder) on disk to contain all GRASS maps and data.

LOCATION: This is the name of a geographic location. It is defined by a
          co-ordinate system and a rectangular boundary.

MAPSET:   Each GRASS session runs under a particular MAPSET. This consists of
          a rectangular REGION and a set of maps. Every LOCATION contains at
          least a MAPSET called PERMANENT, which is readable by all sessions.

         The REGION defaults to the entire area of the chosen LOCATION.
         You may change it later with the command: g.region
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

LOCATION:   XY_______________________  (enter list for a list of locations)
MAPSET:     PERMANENT________________  (or mapsets within a location)

DATABASE: /home/gis/__________________________________________________

           AFTER COMPLETING ALL ANSWERS, HIT <ESC><ENTER> TO CONTINUE
                            (OR <Ctrl-C> TO CANCEL)

ここでは,

    LOCATION .... XY
    MAPSET ...... PERMANENT
    DATABASE .... /home/gis/ ... 諸君のホームディレクトリ  例) /home/s10?????/

のように入力しよう。項目の移動はENTERキー。打ち間違いは上書きして修正。消したいときはBackSpaceやDELを使わないでスペースキーで書き潰す。

入力ができたら, ESCAPE, ENTER。するとつぎのように聞かれる:

    Would you like to create location <latlon> ? (y/n)

当然, yでENTER。するとつぎのように聞かれる:

    To create a new LOCATION, you will need the following information:

    1. The coordinate system for the database
            x,y (for imagery and other unreferenced data)
            Latitude-Longitude
            UTM
    2. The zone for the UTM database
       and all the necessary parameters for projections other than
       Latitude-Longitude, x,y, and UTM
    3. The coordinates of the area to become the default region
       and the grid resolution of this region
    4. A short, one-line description or title for the location

    Do you have all this information for location <latlon> ? (y/n)

たいしたことは言ってない。yでENTER。すると, 次のように聞かれる:

    Please specify the coordinate system for location <latlon>

    A   x,y
    B   Latitude-Longitude
    C   UTM
    D   Other Projection
    RETURN to cancel

ここではAを選んでENTERを押す。

このあたりのメッセージは, GRASSを本来のGISとして使うための詳細な設定のためのものだが, ここでは我々はGRASSを 単なる画像解析ソフトとして使うだけだから, あまり深く考える必要はない。

すると,

    x,y coordinate system? (y/n) [y]

当然, yでENTER。すると,

    Please enter a one line description for location <latlon>
    >

なんかメモを入れていいよ, ということなので, 何も入れずに単にENTERでも良し。すると,

    =====================================================

    =====================================================
    ok? (y/n) [n]

けっこうくどい。yでENTER。次の画面は,

                         DEFINE THE DEFAULT REGION

                       ====== DEFAULT REGION =======
                       | NORTH EDGE:1000______     |
                       |                           |
            WEST EDGE  |                           |EAST EDGE
            0_________ |                           |1000______
                       | SOUTH EDGE:0_________     |
                       =============================

           PROJECTION: 3 (Latitude-Longitude)         ZONE: 0

                             GRID RESOLUTION
                                 East-West:     1_________
                               North-South:     1_________

   AFTER COMPLETING ALL ANSWERS, HIT <ESC><ENTER> TO CONTINUE
                            (OR <Ctrl-C> TO CANCEL)

と入れる(ていうか, 適当でよい)。その後, Do you accept this region? (y/n) [y] と聞かれるが, ここもyでENTER。最後に上と同様の確認画面がもういちどあらわれるが, ESC, ENTER。すると, コンソールにはGRASSのプロンプトが表示される:

    GRASS 6.4.4 (XY):~ >

以下の記述では, GRASSのプロンプトを下記のように略記する。

    GRASS >

!GRASSもUNIXシェルである

このGRASSのプロンプトのもとでも, UNIXのコマンドを実行することもできる。というよりもむしろ, この環境は, UNIXのシェルに, GISや画像解析に必要な機能(コマンドなど)を追加したものであり, 従って, 普通にUNIXのシェルでできることは(シェルスクリプトもawkも標準入出力のリダイレクトやパイプも何もかも)ほとんどなんでもできるのである。

以下のような操作をして, 普通のUNIXシェルとかわらない結果が出ることを確認せよ:

    GRASS > ls
    GRASS > pwd

画像の読み込みと表示

lake.jpgを読み込んでみよう:

    GRASS > r.in.gdal input=lake.jpg output=lake

こうすると, lake.jpgの, red, green, blueの3つのチャンネルが, それぞれlake.red, lake.green, lake.blueという名前の「マップ」として読み込まれる。

ではこれを表示してみよう:

    GRASS > d.mon x0
    GRASS > g.region rast=lake.red
    GRASS > d.rast lake.red
http://pen.agbi.tsukuba.ac.jp/~torarimon/data4download/GRASS_lake_red.jpghttp://pen.envr.tsukuba.ac.jp/~torarimon/data4download/GRASS_lake_red.jpg

カラー合成は簡単である。以下のように, d.rgbというコマンドを使うだけだ:

    GRASS > d.rgb red=lake.red green=lake.green blue=lake.blue
http://pen.agbi.tsukuba.ac.jp/~torarimon/data4download/GRASS_lake_rgb.jpghttp://pen.envr.tsukuba.ac.jp/~torarimon/data4download/GRASS_lake_rgb.jpg

    GRASS > d.rgb red=lake.blue green=lake.green blue=lake.red
http://pen.agbi.tsukuba.ac.jp/~torarimon/data4download/GRASS_lake_bgr.jpghttp://pen.envr.tsukuba.ac.jp/~torarimon/data4download/GRASS_lake_bgr.jpg

画像を明るくしたり暗くするには, カラーテーブルという考え方を使えばよい。カラーテーブルとは, 画像の各ピクセルの数値に対して, どのように表示色を割り当てるかの, 対応関係である。ここで扱っているような1バイト非負整数値(0から255まで)の場合, 白黒だと, ゼロに黒を, 255に白を割り当てるのが普通だが, そこをあえて, 255の半分くらい以上を白にしてしまえば, 画像は白っぽくなる。これを, 三原色のそれぞれのマップに対して行ってからカラー合成すれば, 明るい画像になる:

    GRASS > r.colors map=lake.red color=rules << EOF
    0 black
    127 white
    255 white
    EOF
    GRASS > r.colors map=lake.blue rast=lake.red
    GRASS > r.colors map=lake.green rast=lake.red
    GRASS > d.rgb red=lake.red green=lake.green blue=lake.blue
http://pen.agbi.tsukuba.ac.jp/~torarimon/data4download/GRASS_lake_rgb_2.jpghttp://pen.envr.tsukuba.ac.jp/~torarimon/data4download/GRASS_lake_rgb_2.jpg

!フィルター処理

ラプラシアンフィルター

    GRASS > r.mapcalc "lake.red_L=(lake.red[0,1]+lake.red[1,0]+lake.red[0,-1]+lake.red[-1,0]-4*lake.red[0,0])"
    GRASS > r.colors map=lake.red_L color=grey
    GRASS > d.rast lake.red_L
http://pen.envr.tsukuba.ac.jp/~torarimon/data4download/GRASS_lake_red_L.jpg

平均化フィルター

    GRASS > r.mapcalc "x=lake.red"
    GRASS > r.mapcalc "lake.red_M=(x[0,1]+x[1,0]+x[0,-1]+x[-1,0]+x[1,1]+x[1,-1]+x[-1,1]+x[-1,-1]+x[0,0])/9"
    GRASS > r.colors map=lake.red_M rast=lake.red
    GRASS > d.rast lake.red_M
http://pen.envr.tsukuba.ac.jp/~torarimon/data4download/GRASS_lake_red_M.jpg

!GRASSの終了
GRASSを終了するには,

    GRASS > exit

でOK。ただしグラフィックウィンドウは個別に(マウスで)閉じること。

(ブラウザの「戻る」ボタンで戻ってください。)