SlideShare a Scribd company logo
1 of 22
Download to read offline
iPhoneで奥行き推定する 
プログラムを作りました 
第25回CV勉強会@関東 
Yuichi Takeda / @ginrou799
iPhoneのカメラだけで動く 
iPhoneで奥行き推定する 
プログラムを作りました 
デプスセンサ作りました 
第25回CV勉強会@関東 
Yuichi Takeda / @ginrou799
自己紹介 
• 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 
• 画像処理のコア 
うまく行ったらiiPPhhoonneeの部分を作る
残りの課題 
• パラメータチューニング (もう少しよく出来そう) 
• ステレオ法だけで挑んでみる 
• CocoaPods化 
• 実スケール単位での計測(1m, 2m とか実測)
ご静聴ありがとうございました

More Related Content

More from yuichi takeda

Cvpr2021で発表されたvirtual try on まとめ
Cvpr2021で発表されたvirtual try on まとめCvpr2021で発表されたvirtual try on まとめ
Cvpr2021で発表されたvirtual try on まとめyuichi takeda
 
拡大縮小から始める画像処理
拡大縮小から始める画像処理拡大縮小から始める画像処理
拡大縮小から始める画像処理yuichi takeda
 

More from yuichi takeda (6)

Cvpr2021で発表されたvirtual try on まとめ
Cvpr2021で発表されたvirtual try on まとめCvpr2021で発表されたvirtual try on まとめ
Cvpr2021で発表されたvirtual try on まとめ
 
iOS Traning #0
iOS Traning #0iOS Traning #0
iOS Traning #0
 
Jenkins on-mac
Jenkins on-macJenkins on-mac
Jenkins on-mac
 
App dojo-2014-03-27
App dojo-2014-03-27App dojo-2014-03-27
App dojo-2014-03-27
 
130624 auto layout
130624 auto layout130624 auto layout
130624 auto layout
 
拡大縮小から始める画像処理
拡大縮小から始める画像処理拡大縮小から始める画像処理
拡大縮小から始める画像処理
 

Depth From Sequence