あかすくぱるふぇ

同人サークル「あかすくぱるふぇ」のブログです。

SfMのオープンソースOpenMVGをVisualStudio2015でビルドする方法を紹介します。

・厄介なところ
VS2015だと以下のstdioの互換性問題が発生し、VS2013だとC++11のconstexprに対応していないので、そのままだとVS2015でもVS2013でもビルドできません。
http://stackoverflow.com/questions/30412951/unresolved-external-symbol-imp-fprintf-and-imp-iob-func-sdl2

本記事では、stdio問題への対応を含め、OpenMVGをVS2015でビルドする方法を紹介します。

1. ソースコード入手
以下のページからソースコードを入手します。
それだけだとsrc/dependenciesが空なので、git submodule update -iします。
https://github.com/openMVG/openMVG

2. CMake
警告がたくさん出ますが無視しても大丈夫です。
下手にMOSEKなど必須でないライブラリを使おうとするとバージョン問題でビルドできなかったりするようです。

3. stdio問題対応
samplesとsoftwareの全てのプロジェクトについて以下の対応を行う。

一.
extern "C" { FILE __iob_func[3] = { *stdin,*stdout,*stderr }; }
と書いたヘッダファイルを用意してインクルードする。

二.
legacy_stdio_definition.libをリンクする。


以上で、OpenMVGをVS2015でビルドできるはずです。

原論文
"Linear Least-Squares Optimization for Point-to-Plane ICP Surface Registration"

Point-to-Planeの対応付けを線形近似で高速化。

Point-to-Planeの対応付けは、モデル形状の接平面と変換後のデータ点との距離の二乗を全データ点について加算したものを目的関数として、これを最小化する変換を求める(式1, 7)。

ここで、求める変換の回転成分が十分小さいと仮定して、回転行列の要素を線形近似する(式5)。

式7を変形すると式12となり、疑似逆行列を用いて最適な変換を算出することができる。

↑このページのトップヘ