opencv立体校正函数cvStereoRectify()纠错


转自:

http://hi.baidu.com/lin65505578/item/145a68e09a8839fb2a09a4d3
1、opencv中Bouguet校正方法对应的函数:cvstereorectify(),注意Flags参数的设置。Flags的默认设置为无穷远处的视差,即《learning opencv》p453,图12-4中的通常情景。不设置Flags参数,意味着我们想要摄像机相互重合,从而使得有限距离内的视差为0。在三维重建应该选择Flags的默认值,Flags=1024。(   注:这里的flag=1024就是所谓的CV_CALIB_ZERO_DISPARITY

2、matlab中将双目校正后得到双目之间的距离T为[-359.1782 , 0.0, 0.0](用Bouguet的matlab标定工具箱),用opencv计算得到的重投影矩阵Q,Q[14]=-1/Tx=-0.00278368,Tx=359.23619。和matlab的结果基本一样,但有符号不一样。如果查看相机校正前,双目之间的结果参数,opencv计算的Tx是的符号是负,但从Q矩阵中反推出校正后Tx的符号怎么是正的?注意校正前后Tx的符号应该是不变的。根据matlab的校正结果,可以认为opencv的cvstereorectify()函数中计算Q矩阵错误,用公式分析下


d-(cx-cx’)这个式子为正,f为正,Z为正,所以-Tx为正,Tx为负。

故对cvstereorectify()求得的重投影矩阵Q,Q[14]与Q[15]都要添加符号,才是正确的重投影矩阵。

把修改后的Q矩阵,代入cvReprojectImageTo3D()函数,可求得三维点云。如果不对Q矩阵修正,得到的三维点云是正确点云的镜像。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值