OpenCV学习笔记(11)OpenCV+MFC的双目视觉测距与景深实现 之 问题探讨

robot_vision

学习OpenCV快3个月了,主要是根据课题需要实现双目视觉测距、景深重建和目标(障碍物)检测。目前已经能实现摄像头定标和校正、双目匹配、获取视差图和环境景深图像,但是在测距方面还没有精确实现,主要是还没彻底弄清楚摄像头定标,有几个问题希望能和大家探讨下:

1、进行摄像头定标时,棋盘方格的实际大小 square_size (默认为 1.0f )的设置对定标参数是否有影响?
具体地,假如棋盘方格大小的 3 cm,那么 square_size 就应该设置为 30.0f 吧?
另外,定标所得的摄像头内参数,即焦距和原点坐标,其数值单位都是一致的吗?
怎么把焦距数值换算为实际的物理量?

2、在使用 cvStereoCalibrate 进行双摄像头定标时,flags 的设置怎样才是最优?
我目前的设置是 CV_CALIB_FIX_ASPECT_RATIO +
                      CV_CALIB_FIX_PRINCIPAL_POINT +
                      CV_CALIB_SAME_FOCAL_LENGTH
同样地,怎么把定标得到的两个摄像头之间的平移矩阵参数 Transaction_matrix 转换为实际的物理量?其中的 Tx 值应该是两个摄像头成像原点之间的距离,根据公式 Z = f*Tx/(d-(Cxl-Cxr)) 来测算目标距离。

3、关于 cvStereoRectify 函数
在双目校正(Stereo Rectification)上,我目前使用的是 BOUGUET 方法,即 cvStereoRectify 函数,因为要获取景深图像,所以 cvStereoRectify 函数要输出一个变换矩阵 Q,并且最后的参数 flag 我设置为0,而不是 CV_CALIB_ZERO_DISPARITY。这样设置应该没问题吧?

Q_matrix

(1)校正后得到的变换矩阵Q,Q[0][3]、Q[1][3]存储的是校正后左摄像头的原点坐标(principal point)cx和cy,Q[2][3]是焦距,Learning OpenCV 书中说是“Here the parameters are from the left image”,但为什么与 cvStereoCalibrate 得到的左摄像头内参数据不同呢?
(2)如上图公式所示,按照 Learning OpenCV P435给出的 Q 矩阵,计算距离 Z 的公式是带负号的,但这与 P436 给出的对应公式刚好是反号了的!

4、关于双目匹配求取视差图
OpenCV提供了两个函数来进行双目匹配、获取视差:cvFindStereoCorrespondenceBM 和 cvFindStereoCorrespondenceGC。
BM 的执行速度快,我用30帧/秒的速度读入352*288的摄像头画面,用 BM 方法不会卡,算是实时了,但 BM 方法得到的视差不精确,所得的视差图只是大致上与实物轮廓相似;而GC 方法则能得到非常好的视差图,但是速度极慢,大概4、5秒才能处理完一帧画面。
我的 BMState 是这样设置的:

      // 创建 CvStereoBMState 类的一个实例 BMState,进行双目匹配
      BMState = cvCreateStereoBMState();
      assert(BMState != 0);
      BMState->preFilterSize=13;
      BMState->preFilterCap=13;
      BMState->SADWindowSize=13;
      BMState->minDisparity=-16;
      BMState->numberOfDisparities=64;
      BMState->textureThreshold=10;
      BMState->uniquenessRatio=15;

视差矩阵是 CV_16S 数据类型。目前的问题是,所得的视差数值范围是从 -272 到 800 左右,不明白是怎么算出来的。原理上,对于左视图的一个特征点,应该是从右视图对应的同一行像素点上,在设定的 numberOfDisparities 和 minDisparity 范围内,寻找匹配的特征点、并求出视差值,这样的话,视差数据的数值范围应该是在[minDisparity, numberOfDisparities]内的(例如这里应该是[-16, 64]范围)。

下面是摄像头定标所得的参数,有兴趣的朋友麻烦帮忙看看、分析一下 O(∩_∩)O~


   
   xml version="1.0"?>
<opencv_storage>
<num_frames>40
    
    num_frames>
<image_size>
  352 </
  • 11
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 47
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 47
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值