GIST特徴抽出

GISTは代表的な大域的画像特徴量(画像全体から求まる特徴ベクトル)の一つです。コンピュータビジョン、特に一般物体認識の大家であるA.Torralbaらによって開発された特徴量*1で、現在でもしばしば用いられます。コピー画像検出タスクなどでは、bag-of-words (BoW)に匹敵する性能が得られることも報告されています*2。画像特徴とってみたいけど、BoWはなんかめんどくさそう・・・という人にはおすすめです。

本家のページでMatlabのコードが提供されています。
http://people.csail.mit.edu/torralba/code/spatialenvelope/

また、これまた有名なINRIAの研究グループがCのコードを提供しています。
http://lear.inrialpes.fr/software (一番下)
こちらを使ってみることにします。

コンパイルにはfftw3が必要。READMEに従ってhttp://www.fftw.org/からソースを落とす。普通にconfigure, make, make installでよいはず。以下のオプションは少なくとも必要。

$ cd fftw-3.3
$ ./configure --enable-float --enable-shared
$ make
$ make install

無事インストールできたら、GISTソースコードディレクトリへいってmake。

$ cd lear_gist-1.1
$ make

ディレクトリにあるサンプル画像の特徴をとってみます。

$ ./compute_gist ar.ppm
0.0579 0.1926 0.0933 ・・・ 0.0563 0.0575 0.0640

デフォルトだと、960次元のベクトルになっているはずです。画像全体を4x4のグリッドに分割し、各小領域で20方向のフィルタバンクの反応を計算します。これを各色について行うので、合計で4x4x20x3=960次元となります。パラメータはコマンドライン引数で変えられるようですが、特に理由がなければデフォルトでよいと思います。

なお、READMEに記述されているように、特徴抽出には注意が必要です。
===
The code works on non-square images, but it is of little interest:
descriptors computed on images of different sizes are not comparable.
===
つまり、特徴抽出を行う画像はあらかじめ同じサイズに揃えておく必要があります。
一般的には、適当な大きさの正方形に揃えるようです。(256x256とか)

*1:Aude Oliva, Antonio Torralba, Modeling the shape of the scene: a holistic representation of the spatial envelope, IJCV, Vol.42(3), pp.145-175, 2001.

*2: Matthijs Douze, Hervé Jégou, Harsimrat Sandhawalia, Laurent Amsaleg, Cordelia Schmid, Evaluation of GIST descriptors for web-scale image search, CIVR'09, 2009