cvl-robot's diary

研究ノート メモメモ https://github.com/dotchang/

LeapMotion v2.1に更新したofxLeapMotionでCamera Imagesを使ってステレオ復元

(編集中)

ofxCvを導入しておく。

testApp.cppをちょっと編集。

if(on_distortion){
  leap.getRectifiedImages();

  cv::Mat left, right;
  left = ofxCv::toCv(leap.distortion[0]);
  right = ofxCv::toCv(leap.distortion[1]);

  stereo(left,right);
}

 ステレオ用のテスト関数を追加。

void stereo(cv::Mat& img1, cv::Mat& img2)
{
  // Load Images and initialize parameters.
  Mat g1, g2;
  Mat disp, disp8;

  cvtColor(img1, g1, CV_BGR2GRAY);
  cvtColor(img2, g2, CV_BGR2GRAY);

  // StereoBM
  StereoBM sbm;
  sbm.state->SADWindowSize = 7;
  sbm.state->numberOfDisparities = 128;
  sbm.state->preFilterSize = 5;
  sbm.state->preFilterCap = 61;
  sbm.state->minDisparity = -64;
  sbm.state->textureThreshold = 12;
  sbm.state->uniquenessRatio = 10;
  sbm.state->speckleWindowSize = 50;
  sbm.state->speckleRange = 16;
  sbm.state->disp12MaxDiff = 10;

  sbm(g1, g2, disp);
  normalize(disp, disp8, 0, 255, CV_MINMAX, CV_8U);

  imshow("left", img1);
  imshow("right", img2);
  imshow("disp", disp8);

}

 

f:id:cvl-robot:20140902235456p:plain

ディスパリティを取るまでは簡単ですね。

これをXYZに変換するにはどうすればいいんだろう・・・?

 

 

[1] http://www.jayrambhia.com/blog/disparity-maps/

[2] https://community.leapmotion.com/t/sdk-2-1-raw-data-get-pixel-position-xyz/1604

[3] Use of Distortion() to get an OpenCV usable calibration map - Leap Motion Community