とらりもんHOME  Index  Search  Changes  Login

画像解析入門

サイト移行中。元サイトはこちら

注: このサイトで学ぶには, C言語とLinux (Unix)の基礎知識が必要です。適宜, こちらこちらを参照してください。

目次

  1. 画像解析入門: はじめに ... 下を読んで下さい!
  2. 画像解析入門: 準備
  3. 画像解析入門: 画像データの基礎知識
  4. 画像解析入門: 画像のフォーマットに関する実習
  5. C言語による画像処理: 画像の切り出し
  6. C言語による画像処理: 画像の左右反転・上下反転
  7. C言語による画像処理: 画像の右90度回転
  8. C言語による画像処理: 色の抜き出し/入れ換え/反転
  9. C言語による画像処理: 明るさの調整・GIFアニメ
  10. C言語による画像処理: フォールスカラー合成
  11. GRASSによる画像解析
  12. 任意の角度の回転
  13. [[複数の画像の, 位置ズレ・角度ズレの補正とマッチング
  14. 便利なツール1: ImageMagick
  15. シェルスクリプトによる大量処理
  16. 便利なツール2: ImageJ
  17. JPEG画像の読み書き jpeg_test_io.c ... コメントの日本語はUTF8でエンコード

はじめに

 画像処理や画像解析は, 計算機の応用におけるひとつの花形です。計算機があれば, いろんな画像を自分の思うままに加工・編集でき, 画像から様々な情報を抽出できます。

 世の中には, 画像処理の専用ソフトがたくさんあります。その代表は, プロプライエタリソフト(商用ソフト)ではAdobe Photoshop, オープンソースソフトではGIMPImageMagickです。これらを使えば, もちろん様々な処理ができます。しかし, 画像処理の原理は, 実は意外に単純であり, しかも奥が深いので, 独自のプログラミングで画像処理をやってみることはとても楽しいし勉強になります。

 画像処理技術は衛星リモートセンシングやGISで有用です。最近は衛星データや地理情報を解析するためのソフトがいろいろ公開・市販されていて, どれかひとつでも使いこなせば, 素人でも相当いろんなことができます。

  • 参考: 代表的な衛星画像処理ソフト
    • Google Earth Engine
    • ENVI (市販)
    • ERDAS(市販)
    • Arc/GIS(市販)
    • TerrSet (昔はIDRISIと呼ばれていた)(市販)

 しかし若い皆さんには, 上記のようなソフトを使わずに「自力」である程度の画像解析ができるようになってほしいのです。つまり, 必要なソフトを自分で作ったりどこかからダウンロードして改造したりしてなんとかする, ということです。

 その理由は以下の通りです:

上記のソフトはほとんどが高価である

なかには数100万円もするソフトもありますし, それらを維持するには年間数十万円のライセンス料を払う必要があります(筑波大学ではArc/GISの一括ライセンスを持っていますが)。業務でこれらのソフトを使うことによって, このような金額以上の利益を挙げられるのならもちろんOKですが。

 しかし, 何もがんばってそういうソフトを買わなくても,

実は自力でも結構いろんなことができる

のです。例えば以下のようなことは, ある程度勉強をすれば, 自力でこなせます:

  • 画像の中から一部分を切り出す。
  • 画像を拡大・縮小する。
  • 画像の色調や明るさを調整する。
  • 画像を回転・反転する。
  • 複数の画像を, ずらしながらぴったり重なる位置を見つけ出す。
  • 画像のデータを関数で変換したり植生指数などを計算する。
  • 画像に写っているデータを分類する。
  • 画像の投影法を変換する。

 もちろん, 上記のソフトはこれらを使いやすい形で用意しています。しかし, とりあえず目の前の数枚の画像についてこの程度の処理をしたいというときに, 何十万円もするソフトを買うのはちょっと考えものです。あるいは逆に, 似たような画像が何百枚・何千枚もあって, それらすべてについてこのような処理をしたいような場合にも自力でやることが有効だったりします。なぜなら, 商用ソフトの多くはGUI(グラフィカル・ユーザーインターフェース)に依存しており, マウスでいちいち操作を指定しなければならず, 同じ処理を無数に繰り返すということが案外苦手です(そういうのに対応したソフトもありますが, そのやりかたを覚えるのもめんどくさいものです)。

 そして最も大切なことは,

自力でやってこそ解析の意味が理解できる

ということです。誰かが用意したツールを頭から信用して使っているばかりでは, その解析がどういう意味で, どう有効なのか理解できません。

 そして,

こういう勉強は若いときにしかできない

のです。若さとは, 時間が膨大にあり, 頭が柔軟で吸収力が旺盛な, 素晴らしい時期です。若いときにこのような基礎的なスキルを得れば一生の財産になります。商用ソフトの使い方を学ぶのにも若さは有効ですが, そのスキルは10年後・20年後には陳腐化してしまうかもしれません。

 この入門では以下のようなことを念頭に置いています:

  • 衛星画像のみならず, 研究目的でいろんな画像を扱うための基礎を養うことを目的とする。
  • 実行環境はLinux (Ubuntu Linux 20.04)とC言語を想定する。
  • 読者はLinuxとC言語の基礎を知っているものとする。具体的にはシェル, 標準入出力などUNIXの基礎知識と, for, while, if, 関数, ポインタ, 変数型などC言語のコマンドや基礎的概念を知っているものとする。

注意: 近年, 画像解析ではプログラミング言語としてPythonがよく使われています。Pythonには画像解析用の高機能なパッケージが整備されており, それらを利用すると, 手軽にすごいことができてしまいます。しかしこの実習はあえてPythonを使いません。その理由は以下のとおりです:

  • 高機能のパッケージを使うと, 結局はブラックボックスの操作を覚えるだけで, 上記のような商用ソフトに依存するのと大差ない。
  • 高機能のパッケージを使うときも, 画像処理に関する基礎的な仕組みや概念の理解がおおいに手助けになる。それを学ぶには, C言語で自作することが有用。
  • C言語でのプログラムは高速・大容量処理が可能。膨大な数量の画像を扱う時にC言語での画像処理スキルは役立つ。

というわけで, まずはC言語での画像処理を学んで, その後にPythonでの画像処理を学ぶとよいでしょう。