ステレオカメラ作成の道

9,147 views
8,642 views

Published on

OpenCVSharpを使ってステレオカメラから距離を求めるまでの手順を書きました。

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
9,147
On SlideShare
0
From Embeds
0
Number of Embeds
173
Actions
Shares
0
Downloads
17
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

ステレオカメラ作成の道

  1. 1. ステレオカメラ作成の道丹野 嘉信サイト http://ytanno.herokuapp.com/連絡先 tannoyoshinobu@gmail.com
  2. 2. 目次• ステレオカメラって何?• 利用したもの• 作成手順• 躓いたところ
  3. 3. ステレオカメラって何• 二つ並べたカメラ• 縦もできるが普通は横向き• 目のような働き(物体までの距離が分かる)=
  4. 4. 利用したもの 色々• OpenCVSharp2.4.5• OpenCV2.4.5• Visual Studio 2012 C#• Logicool® HD Pro Webcam C920 x 2• キャプチャーボード• カメラの固定フレーム• OpenCV 2 プログラミングブック• OpenCVのドキュメント
  5. 5. 手順1 フレームの作成• 左右にカメラを設置します。• 移動させたときにずれないように固定する仕組みが必要
  6. 6. 手順2 キャリブレーション - 1キャリブレーションとはカメラの歪みや位置の補正をすること• まず、キャプチャボードを用意• ボードを移動させながら2台のカメラで撮影• 20-30枚くらい撮影する
  7. 7. 手順2 キャリブレーション 21. 撮影した画像をグレースケール変換2. コーナー検知 (FindChessboardCorners関数)でキャプチャボードの世界座標を求める3. ステレオキャリブレーション (Stereocalibrate関数)で2台のカメラの内部パラメータ(焦点距離など)や外部パラメータ(歪みなど)を求める4. ステレオカメラの更正 (StereoRectify関数)でお互いが水平に見えるように回転行列と移動行列を求める。この時視差を距離に変換するための透視変換行列も求められる詳しくはOpenCVSharpのサンプルプログラムCalibrateStereoCamera.csを参照してください
  8. 8. 画像の補正1. InitUndistortRectifyMap関数で補正するためのパラメータを求める2. Remap関数でUSBカメラから取得した画像を補正するBeforeAfter
  9. 9. 視差の計算• 補正した画像を元に視差を計算する。• OpenCVには視差を求める関数が色々ある。• CvStereoBMState、FindStereoCorrespondenceBMを使用してBlockMatchを採用。計算時間が短いのでリアルタイムで更新が可能
  10. 10. 距離変換• ReprojectImageTo3D関数で視差を距離に変換する• 下記画像はクリックした所の距離を表示しているプログラム
  11. 11. 躓いたところ1CalibrateStereoCamera.csのCvMat distCoeffs1 = new CvMat(1, 4, MatrixType.F64C1);CvMat distCoeffs2 = new CvMat(1, 4, MatrixType.F64C1);をCvMat distCoeffs1 = new CvMat(1, 8, MatrixType.F64C1);CvMat distCoeffs2 = new CvMat(1, 8, MatrixType.F64C1);に直すといいパラメータが得られた
  12. 12. 躓いたところ2• cvFindStereoCorrespondenceBMで出力する視差のマップを16ビット符号ありを選択すると視差が16倍された値が帰ってくる• つまりこの時、距離変換時も16倍する必要がある

×