Mastering open cv kinectv1 marker based ar
-
Upload
satoshi-fujimoto -
Category
Software
-
view
207 -
download
1
Transcript of Mastering open cv kinectv1 marker based ar
Mastering OpenCVKinectV1 Marker-based AR
藤本賢志
2015/03/18
AR(Augmented Reality)とは
•実世界にコンピュータグラフィクスを重ねたもの
• リアルタイムに情報を環境に重ね合わせて表示すること
• ユーザーの周りでインタラクティブに情報を操作できる
ARアプリケーションを作ろう
• 使用する機器やソフトウェア環境• Kinect v1• Visual Studio 2013(C++)• OpenCV 2.4.10• OpenGLの代わりにViz
• 手順• プロジェクトの作成• アプリケーションのフローチャート• Kinectに接続とデータ取得• マーカー検出• マーカーID(コード)作成• マーカーコード認識• マーカーの3D位置推定• 情報提示• 3Dオブジェクトのレンダリング
プロジェクト作成とOpenCVの使い方
• めんどくさい
•詳しくはKinect for Windows SDK 実践プログラミングを買ってね♥
• RGB-D取得のプログラムを参照
アプリケーションのフローチャート
• Kinectに接続(省略)
• RGB-Dデータの取得(省略)
• マーカーの検出
• マーカーの識別
• マーカーの3次元位置を推定
•情報提示• (ここではマーカー中心の推定値とDepth値を表示してみる)
• 3Dオブジェクトを表示して電脳っぽくしたいね
マーカー検出
•次のマーカーを用意する
• マーカーのサイズを測っておく
•内側の白い四角形(5×5)がマーカーIDとなる
9cm
9cm
マーカー検出の流れ
1. 取得したカラー画像をグレースケールにする
2. グレースケールから二値化する
3. 輪郭を検出する
4. マーカーの候補を検出する
5. マーカーのデコードと検出
6. マーカーの3次元位置を推定する
1.カラー画像をグレースケールにする
• Kinectのカラー画像は4チャンネル• cv::Mat colorMat(rows, cols, CV_8UC4), grayMat(rows, cols, CV_8UC1);
• カラー画像をグレースケールに変換• cv::cvtColor(colorMat, grayMat, CV_BGRA2GRAY);
2.グレースケールを二値化する
•二値化(白255か黒0)にする処理
•今回、輪郭を検出するために用いる
•一般的な二値化• cv::threshold(grayMat, binMat, 0, 255, cv::THRESH_BINARY |
cv::THRESH_OTSU);
3.輪郭検出
•二値画像を入力するとポリゴンのコーナー点が出力される• cv::findContours
• minContourPointsAllowed以下のサイズの輪郭を除く
•輪郭の線を描く
4.マーカーの候補を探す
•輪郭のコーナー(ポリゴンの頂点)が4点
•輪郭のサイズが閾値以上のもの
5.マーカーのデコードと検出
•輪郭コーナー4点から平面に投影し、デコードする
• IDが一致すれば、検出される
6.マーカーの3次元位置推定
•検出したマーカーのコーナー4点より、マーカーの実際のサイズが分かっているとき、3次元位置が推定できる
情報提示
• マーカーの中心位置(3D位置)が分かったので、推定した奥行Z値を表示する
• 3次元位置からカラー画像上の座標を求め、Depthからカラー画像上に変換した点群より、Depth値を求める
•推定値とDepth値を比べてみよう
参考文献
• Code for the book "Mastering OpenCV with Practical Computer Vision Projects" by Packt Publishing 2012.
• https://github.com/MasteringOpenCV