depth from sequence

Post on 05-Dec-2014

1.870 Views

Category:

Engineering

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

第25回コンピュータビジョン勉強会@関東での発表資料です。 http://connpass.com/event/8082/

TRANSCRIPT

iPhoneで奥行き推定するプログラムを作りました

第25回CV勉強会@関東 Yuichi Takeda / @ginrou799

iPhoneで奥行き推定するプログラムを作りました

第25回CV勉強会@関東 Yuichi Takeda / @ginrou799

iPhoneのカメラだけで動く

デプスセンサ作りました

自己紹介• Yuichi Takeda / @ginrou799

• CV

• コンピュテーショナルフォトグラフィ

• MIRU 2012 優秀賞

• iOS

• ミクシィでiPhoneアプリの開発

• 本も出してますhttp://goo.gl/OaLUDc

AndroidのLensBlur ご存知ですか?

LensBlur

• Android に搭載されているカメラの機能 • シーンの奥行きを推定してリフォーカス

出典 http://googleresearch.blogspot.jp/2014/04/lens-blur-in-new-google-camera-app.html

そのiPhone版を 作りました。

Depth From Sequence

iPhoneを手に持って撮影した画像シーケンスから奥行きを推定します

Depth From Sequence• ソースコードは公開しています。

• https://github.com/ginrou/DepthFromSequence

• C++

• 動作環境

• CMake OpenCVの動く環境

• Mac, Linux(多分)

• iOS

元ネタ

• 元ネタはLensBlurの元になった論文

• 3D Reconstruction from Accidental Motion (Fisher Yu et al. CVPR 2014)

• この論文をベースに実際に使えるように少し改良

アルゴリズム・入力画像

• 1280x720で撮影して 640x320 に縮小して処理 • 実際のデプスを計測するのは中央の320x320の領域 • 10 ~ 15枚ほどが安定している

アルゴリズムFeature Tracking

Bundle Adjustment

Plane Sweep

• KLT Trackerを使って特徴点追跡

最初のフレームでは150個の特徴点を追跡し、 最終フレームで70個まで減ったら失敗

アルゴリズムFeature Tracking

Bundle Adjustment

Plane Sweep

• Feature Trackingの結果からカメラの位置と姿勢を推定 • Bundle Adjustment • 便利ライブラリなかったので実装しました

アルゴリズムFeature Tracking

Bundle Adjustment

Plane Sweep

• パラメータ • 最大反復回数は 5 回 • 反復終了時に再投影エラーが 1.0 未満だと失敗とみなす

アルゴリズムFeature Tracking

Bundle Adjustment

Plane Sweep

•入力画像がある奥行き上にあると仮定してワーピング •ワーピング画像を積み重ね、輝度一致度で奥行きを推定

アルゴリズムFeature Tracking

Bundle Adjustment

Plane Sweep

•輝度一致度だけで奥行きを求めると精度が悪い •テクスチャのない箇所に弱い •グラフカットを利用して精度向上 •http://graphics.stanford.edu/projects/densecrf/ を利用

アルゴリズムFeature Tracking

Bundle Adjustment

Plane Sweep

•輝度一致度だけで奥行きを求めると精度が悪い •テクスチャのない箇所に弱い •グラフカットを利用して精度向上 •http://graphics.stanford.edu/projects/densecrf/ を利用

アルゴリズムFeature Tracking

Bundle Adjustment

Plane Sweep

•奥行き分解能は奥行きに反比例 •近いものは細かく計れるが、遠いものは粗くなる

•奥行き分解能は20~32段階くらい •分解能を上げるとメモリを圧迫する

•100MBくらい食うのでスマートフォンにはキツイ

iPhoneへ移植

• iOSはC++をそのまま使える

• ただそのままだと扱いづらい

• C++ / Objective-C / Objective-C++ を使い分ける

Objective-C/ Objective-C++ / C++

Objective-C Objective-C++ C++

• Obj-C C++ の橋渡し • UIImage と cv::Matの変換

• 非同期処理

• カメラのバッファ • UI

どう使い分けるか?

• 画像処理のコア

まずはコア部分を独立して開発

Objective-C/ Objective-C++ / C++

Objective-C Objective-C++ C++

• Obj-C C++ の橋渡し • UIImage と cv::Matの変換

• 非同期処理

• カメラのバッファ • UI

どう使い分けるか?

• 画像処理のコア

うまく行ったらiPhoneの部分を作るうまく行ったらiPhoneの部分を作る

残りの課題

• パラメータチューニング (もう少しよく出来そう)

• ステレオ法だけで挑んでみる

• CocoaPods化

• 実スケール単位での計測(1m, 2m とか実測)

ご静聴ありがとうございました

top related