使用sgbm的视差图

时间:2016-07-21 09:32:07

标签: c++ opencv

我使用立体相机拍摄了2张包含2个门(1个打开,1个关闭)的图像。这2张图片已经纠正并且没有失真。我已经尝试使用sgbm方法生成视差图。以下是我用于sgbm的参数。

numberOfDisparities = 48;
SAD windowsize = 9;

sgbm->setPreFilterCap(63);
sgbm->setBlockSize(9);
sgbm->setP1(8*cn*sgbmWinSize*sgbmWinSize);  //cn=3,sgbmWinSize=9    
sgbm->setP2(32*cn*sgbmWinSize*sgbmWinSize); 
sgbm->setMinDisparity(0);
sgbm->setNumDisparities(48); 
sgbm->setUniquenessRatio(1);
sgbm->setSpeckleWindowSize(100);
sgbm->setSpeckleRange(20);
sgbm->setDisp12MaxDiff(1);
sgbm->compute(img1, img2, disp);

disp.convertTo(disp8, CV_8UC1, 255/(numberOfDisparities*16.));
imshow("disparity8", disp8);

可以在下面的链接中找到2张图像和视差图。 !(http://i.stack.imgur.com/Qbhh6.png

我需要调整哪些参数才能进一步改善视差图?

此外,我想使用视差图生成深度图,但不知道如何去做。 最后,我想通过使用深度图检测打开的门。任何人对此都有任何建议或方法吗?

1 个答案:

答案 0 :(得分:0)

  • 您可以调整blocksize(仅奇数),numdisparity(%16 = 0),唯一性比率最高为100.
  • 您也可以使用其他配置。
  • 此外,您可以使用opencv-contrib中的xfilter来改善sgbm中的视差图。它的作用是将一个阈值应用于您的视差图,使用该阈值作为输入蒙版来平滑您的视差图。