(農業)情報工学・課題 (2016/12/01)

画像処理入門(1)

画素と正方形格子
今回の講義では、コンピュータで画像データを取り扱う手法について学ぶ。
コンピュータにおける画像データは、デジタル画像である。すなわち、画面を画素(ピクセル)と呼ばれる小さな離散的な点の集合として分割し、各画素における濃淡の値を数値(整数値)として表現した物である。
通常、画面は縦・横の格子状に分割され(平方格子)、画素に対応した小さな正方形の集合として表現される。この場合、隣接する画素間の距離は、斜め方向に位置する画素との方が縦横の場合より大きいという特徴がある。この特徴は、本来は直線をスムースに見せる場合などには留意する必要があるが、通常はアプリケーションソフトがその作業を代行しているために利用者が意識する必要は無い。
画素と隣接画素の関係
左上
(-1,-1)

(0,-1)
右上
(1,-1)

(-1,0)

中心画素

(1,0)
左下
(-1,1)

(0,1)
右下
(1,1)

解像度と階調数
解像度とは、標本化(サンプリング)レートの事である。すなわち、原画像を縦・横・何ドットで表現するかの尺度である。
代表的な例(Lenaの画像)を用いて、説明する。
lenna.gif 画素数:256x256。1ドットあたりの諧調数:256段階
この場合、画像データが非圧縮なら1ドットあたり1バイト必要なので、ファイルサイズは65536バイト(64KB)となる。

解像度の実例

Resolution 128 Resolution 64 Resolution 32 Resolution 16 Resolution 8
解像度:128
情報量:1/4
解像度:64
情報量:1/16
解像度:32
情報量:1/64
解像度:16
情報量:1/256
解像度:8
情報量:1/1024

階調数の実例

Graduation 128 Graduation 64 Graduation 32 Graduation 8 Graduation 4 Graduation 2
階調数:128
情報量:1/2
階調数:64
情報量:1/4
階調数:32
情報量:1/8
階調数:8
情報量:1/16
階調数:4
情報量:1/64
2値画像
情報量:1/128
この例で分かる通り、情報量が同じ(1/64)の画像で比べると、人間の目は解像度には敏感で(解像度:32)程度ですでに対象の判別が困難になっているのに対し、階調数では(階調数:4)なら、対象をきちんと把握することができる。このあたりに、即ち、解像度を上げる=画素数を増やす競争のヒントがありそうである。

ImageJ
今回の課題では、画像解析ツールとしてImageJを利用する。これは、特に医学・生物学分野で用いられる画像解析ツールで、アメリカNIHのWayne Rasband氏が、仕事の合間に開発したソフトで、無料で公開されている。本ソフトの前身はNIH-Imageと呼ばれ、これも広く使われていた。
ImageJの特徴としては、 事があげられる。
ImageJは、上記のリンクからダウンロードし、自分の好きなディレクトリに保存すると良い。使用中、倍率や測定値などのパラメータに(誤って)日本語を入れるとハングするようであるので、注意が必要である。
ImageJのサイトからダウンロードする対象は、Platform Independentを勧める。ダウンロード後、IJ.jarを起動する。なお、MacOSの場合インターネットからダウンロードした直後のアプリを開く場合には、Ctrlキーを押して、メニューを表示させ、メニューの中から「開く」をクリックすると良い。(セキュリティの関係)
画像解析の実際(葉の特徴量の測定)
今回は、画像解析の入門なので、いくつかの特徴量を検出する作業を行う。 サンプルデータとしては、この画像ファイル(タバコの葉)を用いる。 画像データとしてはBMP形式で、ピクセル数718x615、ドット毎の階調数は256色(8ビット)のグレイスケールとなっている。
それでは、早速読み込んでみよう。
  1. まず、上記の画像データをどこかのフォルダ(例:デスクトップにImageフォルダを作成する)に保存する。
    (やみくもにデスクトップに保存する習慣は、やめよう!)
  2. ImageJを起動して、画像データを読み込む。
  3. 画面の上部にデータが表示される。ピクセル数、階調数、ファイルサイズとなっている。
  4. マウスを移動させると、ツールバーウィンドウ上に、マウスポインタの値が表示される。
    これは、当該ピクセルのX座標、Y座標と、濃淡の値になっている。
    この値は0~255の数値を取り、黒が0、白が255のグレースケール画像である。
    即ち、1ピクセルを表現するために8ビット(=1バイト)を用いている。
  5. どこかで、マウスをクリックし、そのままドラッグしてみよう。
    黄色い作業線が表示され、ツールバーでの表示が始まる。今回は、黄色区間の高さと幅である。
  6. ヒストグラムを表示させてみよう。Anallyze->Histogramである。
    ヒストグラムとは、先ほどのピクセル値の分布を示すグラフで、その値を持つピクセルが何点存在するかを示すものである。
    従って、黒っぽい画像の場合は数値の小さい方の点が多くなり、白っぽい場合はその逆となる。
  7. さて、この画像はどのようなヒストグラムとなったであろうか。
    ヒストグラムの内容を理解してみよう。
    ImageJの面白いところは、ヒストグラム自体も、また、別の画像ファイルとなっている事である。
    であるから、ヒストグラムのヒストグラムも表示させることができる。(もっとも、0と255しか存在しないが。。)
  8. 今度は、画像イメージを操作する。最も重要な2値化の作業である。
    2値化とは、画像を白と黒だけの2つで表現する事である。葉面積の測定では、2値化が必要である。
  9. ImageJでの2値化は、Image->Adjust->Thresholdで行う。
  10. この画面である特定の数値を持った値のピクセルだけを選択し、黒と白に分類するのである。
  11. ここでは、ヒストグラムの右側の山を指定すると、葉の部分を赤く抜き出すことができる。
  12. 値(画面上の帯グラフの右側に表示されている)が決定したら提出用に数値のメモを取りApplyボタンを押してみよう。間違えた場合には、何度でもオリジナルデータを呼び出せるのであまり心配する必要は無い
    Applyボタンを押した後の指定ウインドウでは、上の2つのチェックボックスを適用する。すなわち、赤色部分を黒に、それ以外を白にしてするということである。
  13. 葉の付け根の光っている部分を取り込む事や、葉の先端の陰の部分をどのように判断するかが難しい。
  14. 2値化が完了したら、いよいよ測定である。
    これ以降は、要点を述べるにとどめる。工夫しながら行うこと。
  15. まず、この図は、微妙に傾いている。このままでは少し不便であるため、回転せせる。
    Image->Transform->Rotate
  16. ピクセルと長さの関連づけを行う
    直線ツールで、物差しの一定の長さ(cm)を指定してから、Analyze->Set Scale で、ピクセル数とcmを関連づける。
    Set Sceleの画面では、Distance in lengthは、現在の黄色い直線のピクセル数になっているので、Known Distanceに物差しの長さ、unitにcmと指定すると良い。
    すると、OKボタンを押す前に、画面上にScaleの数値が表示されているので、その数値のメモを取ると良い。
  17. その後、直線ツールを使って、全長、全幅を測定する。
  18. マジックワンド(魔法の杖:棒の先がとげとげしているもの)を使って、葉面積を測る。
    選択後、Analyse->Measureで計算してくれる。
  19. これ以外にも、いろいろな特徴量が計測可能である。各人でトライしてもらいたい。
    例:内接円直径、外接円直径、完全楕円と見なしたときの面積と実際の様面積との比率、元画像のグレースケール平均値、葉脈部分の占有%数などなど。。
  20. カラー画像を白黒グレースケールにするには、Image->Type->8-bitと指定すると良い。

課題の提出
今回の課題は、これらの植物の葉データに関して、次の特徴量を算出することである。
  1. 2値化の境界値(閾値)
  2. 1cmあたりのピクセル数
  3. 葉の全長
  4. 葉の最大幅
  5. 葉面積
  6. 縦横比
  7. 自分で考えた葉画像の特徴量とその数値
の数値を、LMSで提出することである。
エクセルの表形式などで作成すると良い。健闘を祈る。
【応用課題】 今回は手動で操作しているが、これをプログラムで自動的に判断する時には、どのようなロジックとなるだろうか。。
余裕のある人は、少し考えてみよう。
参考ウェブ

Valid HTML 4.01 Transitional