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矩阵修正,得到的三维点云是正确点云的镜像。