どせいたんさき。

ナスダヨー

MATLAB画像処理入門―使い方の基本から、画像処理まで

本書は数値解析ソフト MATLAB を使用して画像処理の基礎的な手法を学ぶものです.僕は MATLAB クローンの 1 つである GNU/Octave をよく使用しています.本書の内容は自分のプログラミングに大いに生かせるのではないかと思い購入しました.実際にコードを入力して動作を確認するという作業はしていませんが,本書に記載されている内容はだいたい理解しました.

はじめに

これまで何冊か MATLAB, Octave の入門書と冠した書籍を立ち読みしてきましたが,ほとんどの書籍において MATLABOctave は for loop が苦手であるという事実を軽視しているのではないかと感じました*1.だいぶ前になりますが Octave において for loop での計算と組み込みアレイでの計算の速度を簡単に比較してみたことがあります.詳細はこのエントリを参考にしてもらうとして,だいたい時間にして 2 桁ほど速度差があるようです.

本書も僕がこれまでみてきた書籍の例に漏れず, for loop をふんだんに使用した内容になっています.本書はあくまでも MATLAB の入門書ではなく画像処理の入門書なので仕方ない部分はあります.しかし,画像データは 2 次元アレイであり基本的にデータ量が多くなります.本書で紹介されているようなアルゴリズムで処理した場合,画像のサイズによっては非現実的な計算時間がかかるのではないかという不安を感じました.

本書の構成

本書の目次は以下のようになっています.

目次
  1. 「画像データ」の扱い方
  2. 「画像演算」の基礎 〜行列・ベクトル・スカラー
  3. 「図形」と「画像」の「アフィン変換」
  4. 空間フィルタリング
  5. 2値画像の「ラベリング処理」
  6. 2値画像の「連結数」と「細線化」
  7. 「指紋」の「稜線解析」
  8. 「ハフ変換」による「直線の検出」
  9. フーリエ画像処理
  10. 干渉画像処理

前半は 7 章の「指紋の稜線解析」を目標として画像解析の基本的な手法を学びます. 8 章と 9,10 章は(それまでの章の内容はもちろん使いますが)ちょっと独立したような位置づけになっています.

2値画像の処理が主なターゲット

本書はでは「2値画像」を主に扱います.これは画素値が 1,0 だけの画像で,いわゆるモノクロ画像です.モノクロ以外の画像も使用することはありますが,その場合も単色(グレースケール)の画像ばかりを使用します.色相の変換やパレットの減色処理というような話題にはほとんど触れません.カラー画像なんてなかった……と思いましょう.

「なんだモノクロ画像ばっかりなのか……」と落胆するのはまだ早いです.紹介されている解析手法はなかなか面白いです.特に「不均一画像の2値化」や「連結成分のラベリング」,「ハフ変換」といった内容はとても興味深かったです.

不満なところ

本書で紹介されているプログラムは for loop を多用しているせいで大変非効率なプログラムになっている点は既に述べました.これは「画像処理の基本的なアルゴリズムを理解する」という目的のためには仕方ないと思います.

全体的な構成としては 9 章の一部(フーリエ変換の導入部)をもっと前半に入れるべきだと思いました.

紹介されているプログラムは機能ごとにもっと分割できるはずです.機能ごとに複数の関数として与えればプログラムをリスト①,リスト②と途中で分割して記載する必要もなかったはずです.その方が画像処理のアルゴリズムを理解する上でも役立つと思います.

本書で最も不満なところはプログラムの体裁です.2013 年に発売されたばかりの本なので多少の誤植は仕方ないとは思いますが,

  • プログラムに等幅フォントが使用されていない
  • ところどころインデントが狂っている

といった部分はコードを載せるにあたり最低限要求されるレベルを満たしていないと思います.おかげでプログラムを目で追いながらストレスを感じました.工学社の校正担当者の方は何故こんな状態で出版してしまったのでしょうか.大変残念に思います.


色々と不満点はありますが面白い部分もありました.正直なところ,紹介されているプログラムはあまり参考にならないと感じましたが,自分なりに実装し直すことで画像処理のアルゴリズムと触れ合いたいと思います.

*1:IDL も同様です.