Structure From Motion 事始め

PCも組み終わり,SFMの勉強に入っていきます.
まずは理論の勉強からですが,いきなり数式とにらめっこするのはつらいので,サンプルのアプリを落としてそのコードと教科書を往復して勉強をすることにしました.

題材

1.教科書
この本,ググるとPDFでまんま落ちてます.そのリンクを張るのはさすがに怖かったのでアマゾンリンクにしましたが...この教科書の4章にSFMの概要とサンプルコードに対しての説明が書かれてます.

Mastering OpenCV With Practical Computer Vision Projects: Step-by-step Tutorials to Solve Common Real-world Computer Vision Problems for Desktop or Mobile, from Augmented Reality and Number Plate Recognition

Mastering OpenCV With Practical Computer Vision Projects: Step-by-step Tutorials to Solve Common Real-world Computer Vision Problems for Desktop or Mobile, from Augmented Reality and Number Plate Recognition

  • 作者: Daniel Lelis Baggio,Shervin Emami,David Millan Escriva,Khvedchenia Ievgen,Naureen Mahmood
  • 出版社/メーカー: Packt Publishing
  • 発売日: 2012/12/03
  • メディア: ペーパーバック
  • この商品を含むブログ (2件) を見る

2.サンプルコード
上記教科書にはチャプター毎にサンプルコードがあるようなのですが,このコードもGITに落ちてます.自分は4章のSFMを使います.
github.com

サンプルコードコンパイルまで

コマンド開始時点のフォルダははすべて workspace というフォルダのイメージで書いてます.

1.サンプルコードを落とします.
mkdir reps/mastering_opencv/build
cd reps/mastering_opencv
git clone https://github.com/MasteringOpenCV/code.git
2.OpenCV2.4.11を落とします.

上記サンプルコードは OpenCV3 系には未対応ということで,2.4.11を落としてコンパイルします.
gstreamer 周りのコンパイルが通らなかったので,ひとまずOFFでコンパイルしました.

mkdir reps/opencv-2.4.11 reps/opencv-2.4.11/install reps/opencv-2.4.11/installd reps/opencv-2.4.11/build
cd reps/opencv-2.4.11
git clone https://github.com/opencv/opencv.git
cd opencv
git checkout 2.4.11
cmake -DCMAKE_INSTALL_PREFIX=../install -DBUILD_EXAMPLES=ON -DINSTALL_C_EXAMPLES=ON -DWITH_OPENGL=ON -DWITH_V4L=ON -DWITH_GSTREAMER=OFF -DWITH_QT=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release -DWITH_CUDA=YES -DCUDA_GENERATION=Auto ../opencv
make install -j8
cmake -DCMAKE_INSTALL_PREFIX=../installd -DBUILD_EXAMPLES=ON -DINSTALL_C_EXAMPLES=ON -DWITH_OPENGL=ON -DWITH_V4L=ON -DWITH_GSTREAMER=OFF -DWITH_QT=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Debug -DWITH_CUDA=YES -DCUDA_GENERATION=Auto ../opencv
make install -j8
3.SSBAを落とします.

サンプルコード内でバンドル調整をしているみたいのなので,必要なコードを落とします.

mkdir reps/SSBA/build
cd reps/SSBA
git clone https://github.com/chzach/SSBA.git
cd build
cmake -DCMAKE_BUILD_TYPE=Release ../SSBA-4.0/
4.Mastering OpenCV のサンプルコードを一部改変します.

これは自分の環境依存のせいかもしれないですが,そのままコンパイルが通らなかったので,一部 CMakeLists.txt とコードを改変しました.
1. CMakeLists.txt の変更
SSBA_LIBRARY_DIR, SSBA_INCLUDE_DIR, OpenCV_DIRを自分がビルド/インストールしたとこにポイントします.
自分の場合は,,,,

set(OpenCV_DIR "${CMAKE_SOURCE_DIR}/../../opencv-2.4.11/install/share/OpenCV")
set(SSBA_LIBRARY_DIR "${CMAKE_SOURCE_DIR}/../../SSBA/build")
include_directories(${SSBA_LIBRARY_DIR}/../SSBA-4.0)

2. GPUSURFFeatureMatcher.h の変更
SURF 特徴量が nonfree パッケージに入っているので,下記の include を追記します.

#include <opencv2/nonfree/gpu.hpp>

3. Visualization.cpp
PCL, ROS メッセージ変換のメソッドのヘッダファイルのパスが異なっていたので,追記します.

#include <pcl/ros/conversions.h>

4. graphcuts.cpp
Cuda8.0 からはGraphCutsがサポートされていないらしく,下記の記述を追記します.

#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)

から

#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)  || (CUDART_VERSION >= 8000)

に変更します.

5.Mastering OpenCV のサンプルコードをビルドします.
cd reps/mastering_opencv/build
cmake -G "Eclipse CDT4 - Unix Makefiles" -DCMAKE_BUILD_TYPE:STRING="Release" ../Chapter4_StructureFromMotion
make -j8

と,ここまでくればひとまず eclipse でコードを見ながら実行できるようになります.
次のエントリでは中身を見ていきます.