Mugichoko's blog

Mugichoko’s blog

プログラミングを中心としたメモ書き.

Open3DのReconstruction Systemを動かす

Open3Dの公式ページに書かれているReconstruction Systemを動かすまでに,ページに書かれていない細かな作業がそれなりに必要だったのでメモ書き程度に書き留めておきます.尚,執筆中に0.5から0.6にアップデートされていました.ということで,テストしたのはv0.5です.また,今回の例ではPythonしか使いません.そして,手元にIntel RealSense SR300があるので,これをOpen3Dを介して使う方法も書いておきます.

Open3Dのインストール

  1. CondaコマンドでOpen3Dをインストール
  2. GitHubからサンプルコードをダウンロード
    • Open3D-0.5.0\examples\Python folderフォルダにコードが入っている
    • 以降これをPATHとする

SR300をセットアップする

必要なライブラリのインストール

  1. OpenCVをインストール
  2. IntelRealsense SDKのインストール
  3. C:\Program Files (x86)\Intel RealSense\bin\x64\内のライブラリ群をsite-packageにコピペ
    • site-packageC:\Users\YourName\Anaconda3\Lib\site-packagesにあるかと思います
  4. PCを再起動

SR300の内部パラメータ

ここにある"Douglas K. Tue, 03/01/2016 - 00:51"のコメントによると以下のパラメータがデフォルトの様子.

fx & fy cx cy
463.889 320 240

追記 (2019.7.30):よくよくexamples\Python\ReconstructionSystem\sensors\realsense_recorder.pyのコード(SR300を使ってRGBD画像列を保存の項を参照)を見てみると,内部パラメータがdataset\realsense\camera_intrinsic.jsonに吐き出される仕様になっている.これでセンサ個別の内部パラメータが得られる.私の場合以下のようになっていました.尚,長いので小数点第二位以下は省略します.

fx fy cx cy
613.5 613.5 319.1 240.7

RealSenseでの奥行画像のスケール

RealSense SDKのsamplesでは,奥行画像の画素値のどのくらいが1mに相当するかを決定するget_depth_scale関数なるものが用意されていて,デバイスごとに異なるスケールをコードから参照できるようになっているようです.

SR300を使ってRGBD画像列を保存

基本的には公式ページの"Capture your own dataset -- Open3D"を参照のこと.

  1. examples\Python\ReconstructionSystem\sensors\realsense_recorder.pyを開く
  2. 96行目で奥行画像の解像度をVGAに変更
    • つまり(1280, 720)(640, 480)に変更
  3. python realsense_recorder.py --record_imgsでコードを実行
    • メモ:実行すると突如として録画が開始される

Reconstruction Systemを実行

マルチスレッディングに必要なjoblibをインストール

  1. conda install -c anaconda joblibを実行

本体のコードを実行

  1. PATH\ReconstructionSystemへ移動
  2. config_fileを開く
  3. "path_dataset"を自分のパスに変更
    • 例:"dataset\realsense"
  4. コードを実行
    1. python run_system.py config_file --make
    2. python run_system.py config_file --register
    3. python run_system.py config_file --refine
    4. python run_system.py config_file --integrate
    5. もしくは一度に:python run_system.py config_file --make --register --refine --integrate

出力結果

SceneNN No. 16データセットDell New XPS13で処理した場合にこれくらいの時間がかかりました.

====================================
Elapsed time (in h:m:s)
====================================
- Making fragments    0:17:28.095645
- Register fragments  0:00:43.812156
- Refine registration 0:00:27.934999
- Integrate frames    0:01:48.144489
- Total               0:20:27.987289

最終的に作成された3次元モデルは,用意したデータセットのパス(「本体コードを実行のStep3」で設定したパス)の直下にあるsceneフォルダにintegrated.plyとして保存されています.

f:id:Mugichoko:20190409150302j:plain
Reconstruction Systemの出力結果