14
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Structure From Motion (SfM)を試す 〜 OpenCV3.3.1 + SfMモジュール編 (Ubuntu 16.04) 〜

Last updated at Posted at 2017-12-04

今回は、Structure From Motion (SfM) について
OpenCV(3.3.1) + SfMモジュールを使い、サンプルを実行してみました。

Structure From Motion (SfM) とは

Structure From Motion は、複数の画像から三次元形状を復元する手法になります。
https://en.wikipedia.org/wiki/Structure_from_motion

実行環境

・Ubuntu 16.04 LTS
・OpenCV 3.3.1

導入手順

SfMモジュール導入

参考)
https://docs.opencv.org/3.3.1/db/db8/tutorial_sfm_installation.html

要求されるパッケージをインストール

sudo apt-get install libeigen3-dev libgflags-dev libgoogle-glog-dev

無ければ Cmake もインストール

sudo apt-get install cmake

Ceres Solver ビルド&インストール

git clone https://ceres-solver.googlesource.com/ceres-solver
cd ceres-solver
mkdir build && cd build
cmake ..
make -j4
make test
sudo make install

OpenCV(3.3.1) + contrib 導入

参考)
https://docs.opencv.org/3.3.1/d7/d9f/tutorial_linux_install.html

要求されるパッケージをインストール

sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

チュートリアルに載っていないが必要なパッケージ(Viz)をインストール

sudo apt-get -y install libvtk5-dev

Git Repository から最新ソースコードを取得

cd ~/<my_working_directory>
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git

OpenCV(3.3.1) + contrib ビルド&インストール

cd ./opencv
mkdir build
cd build

# cmake [<some optional parameters>] <path to the OpenCV source directory>
# オプション: OPENCV_EXTRA_MODULES_PATH=<path to opencv_contrib modules directory>
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local .. <path to the OpenCV source directory>
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=<path to opencv_contrib modules directory> ..

# make
# ジョブ数:8 (任意)
make -j8

# make install
sudo make install

サンプルコード実行

参考)
https://docs.opencv.org/3.3.1/d5/dab/tutorial_sfm_trajectory_estimation.html#gsc.tab=0
https://qiita.com/ChaoticActivity/items/178d23508b92a09e59ea
https://iwaki2009.blogspot.jp/2016/01/ubuntu-1404_7.html

trajectory_reconstruccion.cpp をコンパイル

cd <path to opencv_contrib directory>/modules/sfm/samples/
g++ -o trajectory_reconstruccion trajectory_reconstruccion.cpp `pkg-config --libs opencv` -I/usr/local/include -I/usr/include/eigen3 -DCERES_FOUND=1

※エラー対応メモ
・エラーケース1
/usr/local/include/opencv2/sfm/numeric.hpp:41:22: fatal error: Eigen/Core: No such file or directory
compilation terminated.
→ -I/usr/include/eigen3 オプション追加

・エラーケース2
trajectory_reconstruccion.cpp: In function ‘int main(int, char**)’:
trajectory_reconstruccion.cpp:148:77: error: ‘reconstruct’ was not declared in this scope
reconstruct(points2d, Rs_est, ts_est, K, points3d_estimated, is_projective);
→ -DCERES_FOUND=1 オプション追加

Viz のパスを通す

  • ライブラリのパスの確認する
ldd trajectory_reconstruccion

not found となっており、パスが通っていない・・

	linux-vdso.so.1 =>  (0x0000~)
	libopencv_sfm.so.3.3 => /usr/local/lib/libopencv_sfm.so.3.3 (0x0000~))
	libopencv_viz.so.3.3 => not found
    ...
  • libopencv_viz のパスを通す
# ファイル生成
cd /etc/ld.so.conf.d
touch opencv_viz.conf

ファイル生成後、opencv_viz.conf に /usr/local/lib を記載し保存し、
ldconf.cache を更新(※高速化のためキャッシュから読み出されるため)

# ldconf.cache 更新
ldconfig

パスを確認

ldconfig -p | grep opencv_viz

パスが通っている事が確認出来ました。

	libopencv_viz.so.3.3 (libc6,x86-64) => /usr/local/lib/libopencv_viz.so.3.3
	libopencv_viz.so (libc6,x86-64) => /usr/local/lib/libopencv_viz.so

trajectory_reconstruccion 実行

./trajectory_reconstruccion ./data/desktop_tracks.txt 1914 640 360

実行すると Viz が起動します。

S1.png

マウスで角度を変える事が出来る他、以下のキーが使えます。

キー 内容
s カメラ視点にスイッチ
q 終了

scene_reconstruction 実行

サクラダファミリアを撮影した4枚の画像から三次元情報を復元します。
※画像はこちらになります。

  • コンパイル
g++ -o scene_reconstruction scene_reconstruction.cpp `pkg-config --libs opencv` -I/usr/local/include -I/usr/include/eigen3 -DCERES_FOUND=1
  • 実行
./scene_reconstruction ./data/images/dataset_files.txt 350 240 360

Vizが起動し、サクラダファミリアの点群が表示されます。
下部の線の黄色い点はカメラでの撮影位置になっています。

S2.png

キー 内容
q 終了

以上、Structure From Motion (SfM) として OpenCV(3.3.1) + SfMモジュールを試しました。

14
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?