mastering open cv kinectv1 marker based ar

15
Mastering OpenCV KinectV1 Marker-based AR 藤本賢志 2015/03/18

Upload: satoshi-fujimoto

Post on 29-Jul-2015

207 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Mastering open cv kinectv1 marker based ar

Mastering OpenCVKinectV1 Marker-based AR

藤本賢志

2015/03/18

Page 2: Mastering open cv kinectv1 marker based ar

AR(Augmented Reality)とは

•実世界にコンピュータグラフィクスを重ねたもの

• リアルタイムに情報を環境に重ね合わせて表示すること

• ユーザーの周りでインタラクティブに情報を操作できる

Page 3: Mastering open cv kinectv1 marker based ar

ARアプリケーションを作ろう

• 使用する機器やソフトウェア環境• Kinect v1• Visual Studio 2013(C++)• OpenCV 2.4.10• OpenGLの代わりにViz

• 手順• プロジェクトの作成• アプリケーションのフローチャート• Kinectに接続とデータ取得• マーカー検出• マーカーID(コード)作成• マーカーコード認識• マーカーの3D位置推定• 情報提示• 3Dオブジェクトのレンダリング

Page 4: Mastering open cv kinectv1 marker based ar

プロジェクト作成とOpenCVの使い方

• めんどくさい

•詳しくはKinect for Windows SDK 実践プログラミングを買ってね♥

• RGB-D取得のプログラムを参照

Page 5: Mastering open cv kinectv1 marker based ar

アプリケーションのフローチャート

• Kinectに接続(省略)

• RGB-Dデータの取得(省略)

• マーカーの検出

• マーカーの識別

• マーカーの3次元位置を推定

•情報提示• (ここではマーカー中心の推定値とDepth値を表示してみる)

• 3Dオブジェクトを表示して電脳っぽくしたいね

Page 6: Mastering open cv kinectv1 marker based ar

マーカー検出

•次のマーカーを用意する

• マーカーのサイズを測っておく

•内側の白い四角形(5×5)がマーカーIDとなる

9cm

9cm

Page 7: Mastering open cv kinectv1 marker based ar

マーカー検出の流れ

1. 取得したカラー画像をグレースケールにする

2. グレースケールから二値化する

3. 輪郭を検出する

4. マーカーの候補を検出する

5. マーカーのデコードと検出

6. マーカーの3次元位置を推定する

Page 8: Mastering open cv kinectv1 marker based ar

1.カラー画像をグレースケールにする

• Kinectのカラー画像は4チャンネル• cv::Mat colorMat(rows, cols, CV_8UC4), grayMat(rows, cols, CV_8UC1);

• カラー画像をグレースケールに変換• cv::cvtColor(colorMat, grayMat, CV_BGRA2GRAY);

Page 9: Mastering open cv kinectv1 marker based ar

2.グレースケールを二値化する

•二値化(白255か黒0)にする処理

•今回、輪郭を検出するために用いる

•一般的な二値化• cv::threshold(grayMat, binMat, 0, 255, cv::THRESH_BINARY |

cv::THRESH_OTSU);

Page 10: Mastering open cv kinectv1 marker based ar

3.輪郭検出

•二値画像を入力するとポリゴンのコーナー点が出力される• cv::findContours

• minContourPointsAllowed以下のサイズの輪郭を除く

•輪郭の線を描く

Page 11: Mastering open cv kinectv1 marker based ar

4.マーカーの候補を探す

•輪郭のコーナー(ポリゴンの頂点)が4点

•輪郭のサイズが閾値以上のもの

Page 12: Mastering open cv kinectv1 marker based ar

5.マーカーのデコードと検出

•輪郭コーナー4点から平面に投影し、デコードする

• IDが一致すれば、検出される

Page 13: Mastering open cv kinectv1 marker based ar

6.マーカーの3次元位置推定

•検出したマーカーのコーナー4点より、マーカーの実際のサイズが分かっているとき、3次元位置が推定できる

Page 14: Mastering open cv kinectv1 marker based ar

情報提示

• マーカーの中心位置(3D位置)が分かったので、推定した奥行Z値を表示する

• 3次元位置からカラー画像上の座標を求め、Depthからカラー画像上に変換した点群より、Depth値を求める

•推定値とDepth値を比べてみよう

Page 15: Mastering open cv kinectv1 marker based ar

参考文献

• Code for the book "Mastering OpenCV with Practical Computer Vision Projects" by Packt Publishing 2012.

• https://github.com/MasteringOpenCV