MRが楽しい

MRやVRについて学習したことを書き残す

VisualSFMを用いて写真から三次元点群データを生成する

本日は画像解析に関する技術調査枠です。
写真から三次元点群データを生成する技術、所謂 SfM(Structure for Motion) を試します。
今回利用するのは VisualSFM です。

前回紹介した openMVG と異なり、VisualSFM はソースコードが公開されておらず、商用利用もできません。
一方でGUIが提供されており、ビルドも不要なため、セットアップ含めて利用が容易です。

今回は出力データの可視化ツールとして MeshLab を利用します。
VisualSFM と MeshLab のインストール手順は以下の記事です。
bluebirdofoz.hatenablog.com
bluebirdofoz.hatenablog.com

サンプルには以下の OpenMVG のときに取得した写真を再利用します。
bluebirdofoz.hatenablog.com

VisualSFM を起動します。
f:id:bluebirdofoz:20171107022319j:plain

メニューから File -> Open+ Multi Images を選択します。
f:id:bluebirdofoz:20171107022328j:plain

利用する画像を全て選択し、「開く」をクリックします。
f:id:bluebirdofoz:20171107022343j:plain

処理に NVIDIAGPU を利用する場合は Enable GPU -> Match using CUDA を選択しておきます。
f:id:bluebirdofoz:20171107022351j:plain

メニューから SfM -> Pairwise Matching -> Compute Missing Match を選択します。
f:id:bluebirdofoz:20171107022401j:plain
特徴点の抽出と、画像間の対応点の探索が行われます。

次にメニューから SfM -> Reconstruct Sparse を選択します。
f:id:bluebirdofoz:20171107022414j:plain
撮影位置の推定と荒い点群の生成、カメラパラメータの計算が行われます。

この時点で以下のような荒い点群データが表示されていると思います。
f:id:bluebirdofoz:20171107022425j:plain

このままだと形が分からないので更に密な点群データを生成します。
メニューから SfM -> Reconstruct Danse を選択します。
f:id:bluebirdofoz:20171107022434j:plain
本機能の実行は VisualSFM の環境構築で PMVS/CMVS の適用を行っていることが前提条件です。
適用していない場合、本機能はコマンドエラーにより実行されません。

ファイルの出力先を指定すると、処理が開始します。
f:id:bluebirdofoz:20171107022505j:plain
本処理は時間がかかります。ログウィンドウに finished が表示されるまで待ちます。

処理が完了したら密な点群データを確認するため、表示形式を変更します。
メニューから View -> Dense 3D Points にチェックを入れます。
f:id:bluebirdofoz:20171107022515j:plain

それらしい点群データが取得できました。
f:id:bluebirdofoz:20171107022523j:plain
点群データなので少しカメラを離した方がディテールが分かります。
f:id:bluebirdofoz:20171107022533j:plain
横から見ると、ちゃんと奥行きも取れていることが分かります。

最後に、出力されたファイルを MeshLab で確認してみます。
MeshLab を起動し、メニューから File -> Import Mesh を選択します。
f:id:bluebirdofoz:20171107022556j:plain

先ほど Reconstruct Danse で出力した ply ファイルを読み込みます。
f:id:bluebirdofoz:20171107022622j:plain

MeshLab に点群データを読み込むことができました。
f:id:bluebirdofoz:20171107022640j:plain

HoloLensの開発環境構築手順 MeshLab編

本日は環境構築の手順枠です。
bluebirdofoz.hatenablog.com

MeshLab のインストール手順を記録します。

MeshLab のダウンロードページは以下です。
・MeshLab
 http://www.meshlab.net/
2017/11/06現在、MeshLab の最新バージョンは 2016 です。

利用するOS環境に応じてダウンロードページのリンクをクリックします。
f:id:bluebirdofoz:20171107021957j:plain

ダウンロードした MeshLab2016.12.exe を実行します。
インストーラが起動するので、Next をクリックします。
f:id:bluebirdofoz:20171107022007j:plain

利用規約が表示されます。確認したら IAgree をクリックします。
f:id:bluebirdofoz:20171107022016j:plain

プライバシーに関する免責事項が表示されます。確認したら IAgree をクリックします。
f:id:bluebirdofoz:20171107022027j:plain

インストールディレクトリの選択です。
インストール先を指定し、Installをクリックし、インストールを開始します。
f:id:bluebirdofoz:20171107022040j:plain

これで MeshLab のインストールは完了です。
f:id:bluebirdofoz:20171107022048j:plain

プログラムメニューから MeshLab を立ち上げて確認します。
f:id:bluebirdofoz:20171107022054j:plain

HoloLensの開発環境構築手順 VisualSFM編

本日は環境構築の手順枠です。
bluebirdofoz.hatenablog.com

VisualSFM のインストール手順を記録します。

VisualSFM のダウンロードページは以下です。
・VisualSFM
 http://ccwu.me/vsfm/
2017/11/06現在、VisualSFMの最新バージョンは 5.26 です。

利用するOS環境に応じてダウンロードファイルを選択します。
f:id:bluebirdofoz:20171107020448j:plain

ダウンロードした VisualSFM_windows_cuda_64bit.zip ファイルを任意の場所に展開します。
f:id:bluebirdofoz:20171107020459j:plain

以上で VisualSFM のインストールは完了です。
展開したディレクトリの VisualSFM.exe を起動します。
f:id:bluebirdofoz:20171107020519j:plain

VisualSFM が起動しました。
f:id:bluebirdofoz:20171107020534j:plain


VisualSFM にはライブラリの追加により、追加で利用できる機能があります。
その中の一つ、密な点群データを出力する PMVS/CMVS の適用手順を以下に記録します。

CMVS-PMVS の実行ファイルを取得します。
以下の環境構築手順に基づき、実行ファイルを取得してください。
bluebirdofoz.hatenablog.com

binariesWin-Linux\Win64-VS2010 ディレクトリの実行ファイル群から以下のファイルをコピーします。
・cmvs.exe
・genOption.exe
・pmvs2.exe
f:id:bluebirdofoz:20171107020620j:plain

VisualSFM の実行ディレクトリ配下に貼りつけます。
f:id:bluebirdofoz:20171107020633j:plain

これにより、VisualSFM の SfM -> Reconstruct Dense で密な点群データの出力が可能となります。
f:id:bluebirdofoz:20171107020641j:plain

HoloLensの開発環境構築手順 CMVS-PMVS編

本日は環境構築の手順枠です。
bluebirdofoz.hatenablog.com

3Dデータの可視化ツールである CMVS-PMVS のインストール手順を記録します。

PMVS は以下のGitHubで公開されています。
github.com

CloneOrDownload -> DownloadZIP でファイルをダウンロードできます。
f:id:bluebirdofoz:20171107020308j:plain

リポジトリには既に各環境向けにビルドされた実行ファイルが入っています。
f:id:bluebirdofoz:20171107020318j:plain

利用する際はこれらの実行ファイルをコマンドプロンプトから直接実行すればOKです。
f:id:bluebirdofoz:20171107020325j:plain

OpenMVGをWindows環境で試す その2(実行編)

本日は画像解析に関する技術調査枠です。
前回の続きとなります。
bluebirdofoz.hatenablog.com

写真から三次元点群データを生成する技術、所謂 SfM(Structure for Motion) を試します。
今回利用するのはオープンソースで公開されている OpenMVG です。

以下の記事を参考に、Windows環境での動作確認を試みます。
blog.goo.ne.jp
blog.goo.ne.jp
公式のドキュメントページは以下です。
・openMVG documentation
 https://openmvg.readthedocs.io/en/latest/software/SfM/SfM/
今回はビルドしたモジュールを実際に利用してみます。

まず実行用のディレクトリ構成を作成します。
参考記事に従い、以下のようにディレクトリを作成してみました。
・D:\OpenMVG\ProjectTest\build64
 ビルドしたOpenMVGのプロジェクトがあるフォルダ
・D:\OpenMVG\ProjectTest\SfmTest\images
 解析対象の写真を置くフォルダ
・D:\OpenMVG\ProjectTest\SfmTest\matches
 特徴点およびマッチング結果を出力するためのフォルダ
・D:\OpenMVG\ProjectTest\SfmTest\outReconstruction
 3Dデータ出力先フォルダ

解析対象の写真として以下の異なるSfMであるBundlerからサンプル写真を拝借しました。
github.com

取得した写真を images フォルダに配置します。
f:id:bluebirdofoz:20171106022623j:plain

カメラ画像を解析するにあたり、撮影したカメラの情報が必要となるようです。
Gitでダウンロードしたディレクトリの以下ファイルにカメラのデータベースファイルが存在します。
・src\openMVG\exif\sensor_width_database\sensor_width_camera_database.txt
これと写真のEXIFデータを比較し、カメラの情報を取得するようです。
f:id:bluebirdofoz:20171106022652j:plain
このリストに含まれないカメラを利用する場合は自身で情報を追加する必要があります。

参照しやすいように以下の通り、コピーしました。
・D:\OpenMVG\ProjectTest\SfmTest\sensor_width_camera_database.txt
f:id:bluebirdofoz:20171106022702j:plain

EXIFデータはファイルのプロパティの詳細から確認できます。
f:id:bluebirdofoz:20171106022709j:plain
今回用いるサンプルデータは「Canon Powershot A10」で撮影された写真のようです。

sensor_width_camera_database.txtを確認すると、以下の通りデータが含まれていました。問題なさそうです。
f:id:bluebirdofoz:20171106022717j:plain

では解析を開始します。
解析を実行するフォルダで Shift + 右クリック -> PowerShellウィンドウをここに開く を選択します。
f:id:bluebirdofoz:20171106022727j:plain

解析用の実行ファイル群はビルドを行ったディレクトリに含まれています。
前回、Debug,x64 でビルドを行ったので、私の環境では以下のディレクトリに実行ファイルがありました。
・build64\Windows-AMD64-\Debug
f:id:bluebirdofoz:20171106022737j:plain
利用するのは以下の実行ファイルです。(実行順)
・openMVG_main_SfMInit_ImageListing.exe
・openMVG_main_ComputeFeatures.exe
・openMVG_main_computeMatches.exe
・openMVG_main_IncrementalSfM.exe


紹介記事の実行手順に基づき、コマンドを実行します。
1つ目は openMVG_main_SfMInit_ImageListing.exe です。
・D:\OpenMVG\ProjectTest\build64\Windows-AMD64-\Debug\openMVG_main_SfMInit_ImageListing.exe -i D:\OpenMVG\ProjectTest\SfmTest\images -d D:\OpenMVG\ProjectTest\SfmTest\sensor_width_camera_database.txt -o D:\OpenMVG\ProjectTest\SfmTest\matches
f:id:bluebirdofoz:20171106022744j:plain

以下のようなメッセージが表示されれば成功です。
f:id:bluebirdofoz:20171106022752j:plain
matches ディレクトリに以下の sfm_data.json ファイルが出力されています。
f:id:bluebirdofoz:20171106022801j:plain
なお、前述のカメラのデータベースファイルにカメラ情報の不足があれば、ここでエラーが発生するようです。

2つ目は openMVG_main_ComputeFeatures.exe です。
・D:\OpenMVG\ProjectTest\build64\Windows-AMD64-\Debug\openMVG_main_ComputeFeatures.exe -i D:\OpenMVG\ProjectTest\SfmTest\matches\sfm_data.json -o D:\OpenMVG\ProjectTest\SfmTest\matches\
f:id:bluebirdofoz:20171106022815j:plain

以下のようなメッセージが表示されれば成功です。
f:id:bluebirdofoz:20171106022825j:plain
matches ディレクトリに以下の特徴点の抽出ファイルが出力されています。
f:id:bluebirdofoz:20171106022834j:plain

3つ目は openMVG_main_computeMatches.exe です。
・D:\OpenMVG\ProjectTest\build64\Windows-AMD64-\Debug\openMVG_main_computeMatches.exe -i D:\OpenMVG\ProjectTest\SfmTest\matches\sfm_data.json -o D:\OpenMVG\ProjectTest\SfmTest\matches\
f:id:bluebirdofoz:20171106022843j:plain

ここで私の環境では以下のエラーメッセージが表示されました。
「'neato'は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません」

調べてみると、Graphviz というライブラリのコマンドのようです。
d.hatena.ne.jp

以下にインストール手順をまとめました。
bluebirdofoz.hatenablog.com

インストール後、再実行するとエラーが発生しなくなることを確認しました。
以下のようなメッセージが表示されれば成功です。
f:id:bluebirdofoz:20171106022921j:plain
matches ディレクトリに以下の特徴点のマッチング結果ファイルが出力されています。
f:id:bluebirdofoz:20171106022933j:plain

4つ目は openMVG_main_IncrementalSfM.exe です。
・D:\OpenMVG\ProjectTest\build64\Windows-AMD64-\Debug\openMVG_main_IncrementalSfM.exe -i D:\OpenMVG\ProjectTest\SfmTest\matches\sfm_data.json -m D:\OpenMVG\ProjectTest\SfmTest\matches\ -o D:\OpenMVG\ProjectTest\SfmTest\outReconstruction\
f:id:bluebirdofoz:20171106022943j:plain

途中で入力を求められます。初期ペアというものを選択する必要があるそうです。
f:id:bluebirdofoz:20171106023003j:plain
とりあえずは X:0 Y:1 を初期ペアとしました。ここで何を選ぶのが適切なのかは追々調べます。
f:id:bluebirdofoz:20171106022954j:plain

以下のようなメッセージが表示されれば成功です。
f:id:bluebirdofoz:20171106023013j:plain

出力先フォルダに3Dファイルが出力されています。
f:id:bluebirdofoz:20171106023022j:plain

HoloLensの開発環境構築手順 Windows版Graphviz編

本日は環境構築の手順枠です。
bluebirdofoz.hatenablog.com

WindowsGraphviz のインストール手順を記録します。

WindowsGraphviz のダウンロードページは以下です。
Graphviz - Graph Visualization Software
 http://www.graphviz.org/Download_windows.php
2017/11/05現在、WindowsGraphviz の最新バージョンは 2.38 です。

ダウンロードページの graphviz-2.38.msi のリンクをクリックします。
f:id:bluebirdofoz:20171106022354j:plain

ダウンロードした graphviz-2.38.msi を実行します。
インストーラが起動するので、Next をクリックします。
f:id:bluebirdofoz:20171106022403j:plain

インストールディレクトリと利用ユーザの選択です。
インストール先と利用ユーザを指定し、Nextをクリックします。
f:id:bluebirdofoz:20171106022411j:plain

Next をクリックするとインストールが開始します。
f:id:bluebirdofoz:20171106022422j:plain

これで Graphviz のインストールは完了です。
f:id:bluebirdofoz:20171106022430j:plain

コマンドプロンプトで利用する場合、環境変数に Path を追加しておきます。
f:id:bluebirdofoz:20171106022441j:plain
Graphviz の「bin」ディレクトリを追加します。

以下のコマンドを実行して応答があれば、問題ありません。
・dot -v
f:id:bluebirdofoz:20171106022451j:plain


参考ページ
d.hatena.ne.jp

OpenMVGをWindows環境で試す その1(ビルド編)

本日は画像解析に関する技術調査枠です。
写真から三次元点群データを生成する技術、所謂 SfM(Structure for Motion) を試します。
今回利用するのはオープンソースで公開されている OpenMVG です。

以下の記事を参考に、Windows環境での動作確認を試みます。
blog.goo.ne.jp
blog.goo.ne.jp
今回はビルドまでをまとめます。

前提条件として、CMake と TortoiseGit、VisualStudio 2017 のインストールが必要です。
環境構築手順の記事は以下です。
bluebirdofoz.hatenablog.com
bluebirdofoz.hatenablog.com

OpenMVG は以下の gitHub にて公開されています。
github.com

TortoiseGit で GitHub から OpenMVG を取得します。
取得用のフォルダを作成し、右クリック -> Git クローン(複製) を選択します。
f:id:bluebirdofoz:20171105091159j:plain

Gitクローンダイアログが表示されます。
URL に「https://github.com/openMVG/openMVG.git」を設定して「OK」ボタンをクリックします。
f:id:bluebirdofoz:20171105091213j:plain

GitHub のクローンが完了します。
f:id:bluebirdofoz:20171105091221j:plain

クローンが完了したら、git ディレクトリをエクスプローラで開きます。
右クリック -> TortoiseGit -> サブモジュールのアップデート を選択します。
f:id:bluebirdofoz:20171105091233j:plain

「サブモジュールを更新」ダイアログが開くので、「OK」をクリックします。
f:id:bluebirdofoz:20171105091242j:plain

更新が完了します。
f:id:bluebirdofoz:20171105091255j:plain

次に OpenMVG のビルド用のフォルダを作成します。
参考記事に従い、build64 ディレクトリを作成してみました。
f:id:bluebirdofoz:20171105091304j:plain
因みに紹介記事で説明されている Qt4 の変更は現バージョン(2017/11/05現在)では変更済みでした。

CMake を起動します。
「Where is the source code:」の欄にクローンしたソースコードのフォルダを設定します。
「Where to build the binaries:」には作成したビルド用のフォルダを設定します。
f:id:bluebirdofoz:20171105091315j:plain

次に「Configure」ボタンをクリックします。
f:id:bluebirdofoz:20171105091325j:plain

コンパイラの選択画面が表示されるので、ビルドを行う環境を選択します。
今回は Visual Studio 2017 を利用するので「Visual Studio 15 2017 Win64」を選択します。
f:id:bluebirdofoz:20171105091340j:plain

Configuration done が表示され、Configureが完了します。
f:id:bluebirdofoz:20171105091349j:plain

次に「Generate」ボタンをクリックします。
f:id:bluebirdofoz:20171105091359j:plain

Generation done が表示されれば完了です。
f:id:bluebirdofoz:20171105091412j:plain

ビルド用のフォルダを確認すると、Visual Studio プロジェクトが生成されています。
f:id:bluebirdofoz:20171105091422j:plain

後は通常の Visual Studio プロジェクトと同様にビルドするだけです。
f:id:bluebirdofoz:20171105220123j:plain
ただし私の環境だと一部失敗するプロジェクトがありました。原因は現状不明です。
(Debug,x64 でビルドを実行)