Fast SIFT Image Features Library のインストール(Ubuntu 上)
この Web ページで行うこと
- Fast SIFT Image Features Library のビルドとインストール
- siftfast コマンドを使い,PGM 画像ファイル(濃淡画像)から SIFT 特徴量を求める
- Octave を起動し SIFT 特徴量を求める
SIFT 画像特徴量のうち座標値 (x,y) をプロットしたもの
前準備
Ubuntu のシステム更新
Ubuntu で OS のシステム更新を行うときは, 端末で,次のコマンドを実行する。これは、パッケージ情報を最新の状態に保ち、インストール済みのパッケージをセキュリティアップデートやバグ修正を含めて更新するためである。
# パッケージリストの情報を更新
sudo apt update
# インストール済みのパッケージを包括的に更新 (依存関係も考慮)
sudo apt full-upgrade
# カーネル更新等で実際に再起動が必要な場合のみ実行を推奨
# sudo shutdown -r now
C/C++ コンパイラと Make とビルドツールのインストール
ソースコードからビルドするには、C/C++ コンパイラ (通常は GCC) や make ユーティリティといった開発ツールが必要である。Ubuntu では、これらのツールは build-essential パッケージにまとめられている。インストールするには,端末で,次のコマンドを実行する。
sudo apt -y install build-essential libtool texinfo dpkg-dev pkg-config
libtool, texinfo, dpkg-dev, pkg-config は、ビルドやパッケージ管理の際に使用される開発関連ツールである。
cmake, curl のインストール(Ubuntu 上)
インストールするには, 端末で,次のコマンドを実行する.
# パッケージリストの情報を更新
sudo apt update
sudo apt -y install cmake cmake-curses-gui cmake-gui curl
Fast SIFT Image Features Library のインストール(ソースコードを使用)(Ubuntu 上)
- SourceForge の Fast SIFT Image Features Library の Web ページを開く
利用条件などを確認する.
- 「View all files」をクリックし,配布ファイルの一覧を確認する
- libsiftfast のインストール
端末で,次のコマンドを実行する.ソースコードは 2009 年公開の 1.2 であるため,現在の GCC でビルドできるように
-std=gnu++14,-Wno-narrowing,-fpermissiveを指定している.cd /tmp curl -L -O https://sourceforge.net/projects/libsift/files/libsiftfast/libsiftfast-1.2/libsiftfast-1.2-src.tgz cd /usr/local sudo rm -rf libsiftfast-1.2-src sudo tar -xvzof /tmp/libsiftfast-1.2-src.tgz sudo chown -R $USER libsiftfast-1.2-src cd libsiftfast-1.2-src rm -rf build mkdir build cd build cmake -DCMAKE_VERBOSE_MAKEFILE=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-std=gnu++14 -Wno-narrowing -fpermissive" .. make sudo make install # 共有ライブラリのキャッシュを更新 sudo ldconfig - 結果の確認
エラーメッセージが出ていないこと
- siftfast コマンドが使用できることの確認
端末で,次のコマンドを実行する.インストール先のパスが表示されればよい.
which siftfast
テスト実行(Ubuntu 上)
ここでサンプルとして使用する画像
curl コマンドを用いてダウンロードできる.あるいは Web ブラウザでもダウンロードできる.
curl -L https://github.com/opencv/opencv/blob/master/samples/data/fruits.jpg?raw=true -o fruits.jpg
テスト実行の手順
siftfast を使って PGM 画像ファイル(濃淡画像)から SIFT 特徴量を求める.siftfast コマンドは標準入力から PGM 形式の濃淡画像を読み込み,標準出力に特徴量を書き出す.
- ImageMagick のインストール
JPEG から PGM への変換に ImageMagick を使うので,ImageMagick のインストールを行っておく.
インストールするには, 端末で,次のコマンドを実行する.
# パッケージリストの情報を更新 sudo apt update sudo apt -y install imagemagickUbuntu の
imagemagickパッケージは ImageMagick 6 であり,コマンド名はconvert,displayである.ImageMagick 7 を別途導入している場合は,convertの代わりにmagick,displayの代わりにmagick displayを使用する. - テストに使う PGM 画像ファイルの準備と確認表示
ImageMagick の convert コマンドを使い,PGM 画像ファイルに変換する.
-colorspace Grayの指定により濃淡画像に変換される.convert fruits.jpg -colorspace Gray fruits.pgm display fruits.pgm
- siftfast を用いた SIFT 特徴量の算出.確認のため,結果の先頭 10 行を表示.
siftfast < fruits.pgm > fruits.key head fruits.key
- 結果のファイルを整形
出力ファイルでは 1 個の特徴量が複数行に分かれて記録されている.次のコマンドは,1 個の特徴量を 1 行にまとめる整形を行う.
cat fruits.key | sed 's/^$/@/g' | tr -d '\n' | sed 's/@/\n/g' > fruits.sift head fruits.sift
Octave を起動し SIFT 特徴量を求める
- Octave のインストール
端末で,次のコマンドを実行する.
rgb2gray関数を使うため,image パッケージも併せてインストールする.# パッケージリストの情報を更新 sudo apt update sudo apt -y install octave octave-image - ドキュメントの確認
cat /usr/local/share/siftfast/octave/siftfast.m
- Octave を起動し siftfast 関数を使う
* 「lena_std.jpg」の部分は画像ファイル名に書き換えて使う.
curl -O https://www.kkaneko.jp/sample/lena_std.jpg octaveOctave のプロンプトで,次を実行する.
pkg load image addpath('/usr/local/share/siftfast/octave') rgb = imread("lena_std.jpg"); mono = rgb2gray( rgb ); colormap(gray(256)); imshow(mono); MA = 1 / double( max(max( mono )) ); [frames, descriptors] = siftfast( double(mono) * MA );* addpath の実行を忘れると,siftfast 関数が見つからず,次のようなエラーが出る.その場合は addpath を実行してから再度実行する.
- SIFT 画像特徴量のうち座標値 (x,y) をプロット
framesの 1 行目が x 座標,2 行目が y 座標である.imshow(mono) hold on plot(frames(1,:), frames(2,:), 'r.') hold off