とらりもんHOME  Index  Search  Changes  Login

GRASSによる画像解析

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

これまでは, 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

GRASS_lake_red.jpg

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

   GRASS > d.rgb red=lake.red green=lake.green blue=lake.blue

GRASS_lake_rgb.jpg

   GRASS > d.rgb red=lake.blue green=lake.green blue=lake.red

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

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

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

GRASS_lake_red_M.jpg

GRASSの終了

GRASSを終了するには,

   GRASS > exit

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

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

Last modified:2015/10/27 16:06:34
Keyword(s):
References:[画像解析入門]