画像処理・CGのための付け焼刃数学

またの名を「ひと月前までは行列さえ知らなかった文系の僕が行列を1日で学ぶために使った本」。割と嫌いなのよね、こーいう学ぶ前の自分の状況を卑下して、そこからこんなに伸びた俺偉いでしょみたいな奴。
さて……卒論で画像処理とCGのどちらも必要になった。実世界からの入力(画像処理)と実世界への出力(CG)がいる。プログラマ的に言うとOpenCVOpenGLを使うということ。それらのどちらでも画像を扱うので2次元、立体も扱うから3次元のデータを扱うわけで、それらの基礎は「行列」になっている。OpenCVでもGLでもライブラリの基礎となるデータ型は行列なのだ。そして多くの幾何学処理、フィルターは行列の演算で実現される。それらの処理は関数として提供され、内部で行列演算を行なっているが、そのリファレンスには数式を使って表される。行列を理解していなければ、ある程度までしかこれらのライブラリを活かせないのである。

ゲーム開発のための数学・物理学入門 改訂版 (Professional game programming)

ゲーム開発のための数学・物理学入門 改訂版 (Professional game programming)

というわけでこれを買った。改訂版を出しておくけど、その前の版で買ってるのでそれのお話になるよ。先に書いておくけど、ゲーム開発のためのという枕詞通りプログラミングの理解が必要で、この本に使われている言語はC++C++の経験は必須ではないもののCとかJavaらへんのプログラミングの経験がない場合は全く薦められない。
この本、数学を完全に道具として使うための本である。思わず使ったことのない強調を使うほど完全に数学を道具として使う。数学部分に含まれているのはゲーム、プログラミングでよく扱う三角法、ベクトル、行列と、もっと基礎の部分。日本だと理系のひとは高校までで学ぶ分野になる。そして個別の章の構成が

  1. 概念の説明
  2. いくつかの例題
  3. 練習問題

を繰り返す感じになっている。概念の説明と例題のところにちょこちょことプログラムではどう表現するか、どう実装するかが入ってくる。
この本が数学を道具として使っているというのは、出てくる数式の定義を証明したり、どうしてそうなっているかなどを説明することが一切ないというところにある。ただひたすらこういう風になっているから、こう使えます、実装はこうやりますていうことは書かれるんだけど、その説明はない。そこに物足りなさを感じないこともないが、むしろこの割り切りのお陰で数時間で1章ペースですぐに学べる面があり、本としてはきれいにまとまっていて良い。数学的な説明が欲しければ他の本を当たれという割り切り方はむしろ好ましい。僕も行列を勉強している最中に、忘れていたというか当時も理解していなかったベクトルの内積が出てきたんだけど、出てきたときに忘れたひとのための前の章への案内もついててすぐ戻れて親切設計。
というわけで、僕のような高校で行列やってないひとでプログラミングは割と出来る画像処理erにはおすすめ。範囲狭いな。ちなみに画像処理とCGの分野に関しては、先日献本されていたCG-ARTS協会の新版を読む機会があったけど、かなり良い感じなのでそのうち紹介する予定。