depth from sequence
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 とか実測)
ご静聴ありがとうございました