总结

  • Post author:
  • Post category:其他


CameraParameters1与CameraParameters2为左右摄像头的单独标定参数。

  1.  两个摄像头的平移和旋转参数
    

stereoParams.TranslationOfCamera2:相机2相对于相机1的偏移矩阵,可以直接使用。

stereoParams.RotationOfCamera2:相机2相对于相机1的旋转矩阵,需要转置之后才能使用。

2. 摄像机内参矩阵

CameraParameters1与CameraParameters2中包含如下文件:

在这里插入图片描述

在这里插入图片描述

IntrinsicMatrix存放的是摄像头的内参,只与摄像机的内部结构有关,需要先转置再使用。

  1.  畸变参数
    

RadialDistortion:径向畸变,摄像头由于光学透镜的特性使得成像存在着径向畸变,可由K1,K2,K3确定。

TangentialDistortion:切向畸变,由于装配方面的误差,传感器与光学镜头之间并非完全平行,因此成像存在切向畸变,可由两个参数P1,P2确定。

使用时,需要注意参数的排放顺序,即K1,K2,P1,P2,K3。切记不可弄错,否则后续的立体匹配会出现很大的偏差。E

二 采用标定工具箱

1.先利用Matlab标定得到如下所示的结果:

Intrinsic parameters of left camera:

Focal Length: fc_left = [ 209.35975 209.91146 ] ?[ 1.29389 1.28810 ]

Principal point: cc_left = [ 112.70811 83.34529 ] ?[ 2.94940 2.31088 ]

Skew: alpha_c_left = [ 0.00000 ] ?[ 0.00000 ] => angle of pixel axes = 90.00000 ?0.00000 degrees

Distortion: kc_left = [ 0.08414 -2.06248 -0.00441 0.00295 0.00000 ] ?[ 0.08103 0.71627 0.00294 0.00358 0.00000 ]

Intrinsic parameters of right camera:

Focal Length: fc_right = [ 1208.84080 1208.58242 ] ?[ 3.04212 3.10299 ]

Principal point: cc_right = [ 593.84687 340.22721 ] ?[ 5.56734 4.44145 ]

Skew: alpha_c_right = [ 0.00000 ] ?[ 0.00000 ] => angle of pixel axes = 90.00000 ?0.00000 degrees

Distortion: kc_right = [ -0.17114 0.00931 -0.00018 0.00056 0.00000 ] ?[ 0.01366 0.10070 0.00083 0.00097 0.00000 ]

Extrinsic parameters (position of right camera wrt left camera):

Rotation vector: om = [ -0.02893 -0.02493 0.00643 ] ?[ 0.01112 0.01464 0.00069 ]

Translation vector: T = [ -39.21639 -0.63083 15.74866 ] ?[ 0.47172 0.45645 2.87469 ]

A.内参对应关系

opencv内参矩阵如下

Fx 0 Cx

0 Fy Cy

0 0 1

而Matlab的存储格式为

Focal Length: fc_left = [ 209.35975 209.91146 ] = [fx fy]

Principal point: cc_left = [ 112.70811 83.34529 ] = [cx cy]

B.畸变矩阵对应关系

opencv对应畸变矩阵为 [k1 k2 p1 p2 k3],

而Matlab的存储格式为(一般对于非球面相机,k3为0)

Distortion: kc_left = [ 0.08414 -2.06248 -0.00441 0.00295 0.00000 ] = [k1 k2 p1 p2 k3]

C.两相机旋转矩阵对应关系

matlab标定的结果为

Rotation vector: om = [ -0.02893 -0.02493 0.00643 ] ?[ 0.01112 0.01464 0.00069 ]

处理三维问题是,通常采用的是旋转矩阵的方式来描述.一个向量乘以旋转矩阵等价于向量以某种方式进行旋转.除了采用旋转矩阵来描述外,还可以用旋转向量来描述旋转,旋转向量的长度(模)表示绕轴逆时针旋转的角度(弧度).旋转向量与旋转矩阵可以通过罗德里格斯(Rodrigues)变换进行转换.matlab中使用的是旋转向量,进行移植时要进行转换变为旋转矩阵.变换程序如下

start ------------使用cvRodrigues2()将 3*1矩阵变为3*3矩阵 --------------------
int i;
double r_vec[3]={-2.100418,-2.167796,0.273330};
double R_matrix[9];
CvMat pr_vec;
CvMat pR_matrix;

cvInitMatHeader(&pr_vec,1,3,CV_64FC1,r_vec,CV_AUTOSTEP);
cvInitMatHeader(&pR_matrix,3,3,CV_64FC1,R_matrix,CV_AUTOSTEP);
cvRodrigues2(&pr_vec, &pR_matrix,0);

for(i=0; i<9; i++)
{
    printf("%f\n",R_matrix[i]);
}
end ------------使用cvRodrigues2()将 3*1矩阵变为3*3矩阵 (matlab使用 rodrigues(),从向量变到矩阵用rotationVectorToMatrix())--------------------

d.两相机平移矩阵对应关系

matlab参数如下,matlab下是以右相机为基准变到左相机的坐标系.直接使用就可以

Translation vector: T = [ -39.21639 -0.63083 15.74866 ] ?[ 0.47172 0.45645 2.87469 ]

<———————————————————————– end — matlab参数导入opencv

注:

~ 内参解释

在这里插入图片描述

其中fx,fy为焦距,u0和v0为主点坐标,表示图像的中心像素坐标和图像原点像素坐标之间相差的横向和纵向像素数



版权声明:本文为ALZFterry原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。