700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 基本矩阵 双目 matlab MATLAB双目标定与OpenCV计算矫正参数矩阵

基本矩阵 双目 matlab MATLAB双目标定与OpenCV计算矫正参数矩阵

时间:2022-07-23 14:51:24

相关推荐

基本矩阵 双目 matlab MATLAB双目标定与OpenCV计算矫正参数矩阵

Intrinsic parameters of left camera:

Focal Length: fc_left = [ 320.53138 321.62046 ] ?[ 1.32444 1.28994 ]

Principal point: cc_left = [ 189.07393 138.31678 ] ?[ 1.46055 1.15690 ]

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

Distortion: kc_left = [ 0.04024 -0.03178 0.00151 -0.00474 0.00000 ] ?[ 0.01025 0.04459 0.00135 0.00163 0.00000 ]

Intrinsic parameters of right camera:

Focal Length: fc_right = [ 320.67065 321.90891 ] ?[ 1.37908 1.31535 ]

Principal point: cc_right = [ 173.92413 126.43983 ] ?[ 1.44923 1.13767 ]

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

Distortion: kc_right = [ 0.01930 -0.00796 0.00184 -0.00471 0.00000 ] ?[ 0.00889 0.02241 0.00118 0.00162 0.00000 ]

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

Rotation vector: om = [ -0.00097 -0.00406 -0.00463 ] ?[ 0.00351 0.00459 0.00029 ]

Translation vector: T = [ -50.53242 0.09040 -0.62284 ] ?[ 0.38731 0.32873 1.79637 ]

根据上面使用MATLAB得到的参数矩阵和R,T使用OPENCV计算mx1,my1,mx2,my2

左相机内参数矩阵

3

3

d

320.53138 0.00000 189.07393

0.00000 321.62046 138.31678

0.00000 0.00000 1.00000

右相机内参数矩阵

3

3

d

320.67065 0.00000 173.92413

0.00000 321.90891 126.43983

0.00000 0.00000 1.00000

左相机畸变参数矩阵

1

5

d

0.04024 -0.03178 0.00151 -0.00474 0.00000

右相机畸变参数矩阵

1

5

d

0.01930 -0.00796 0.00184 -0.00471 0.00000

左右相机间的旋转矩阵R

3

1

d

-0.00097 -0.00406 -0.00463

左右相机间的平移矩阵T

3

1

d

-50.53242 0.09040 -0.62284

最后使用OpenCV计算矫正参数矩阵

/// here used BOUGUET'S METHOD for calibration

/// as I have got the parameter from MATLAB Calib_ToolBox

///

#include

#include "cv.h"

#include "cxcore.h"

#include "highgui.h"

#pragma comment(lib, "cv")

#pragma comment(lib, "cxcore")

#pragma comment(lib, "highgui")

using namespace std;

#define WIDTH 320

#define HEIGHT 240

void main()

{

CvMat* _M1 = cvCreateMat(3, 3, CV_64F); // left camera intrinisc matrix

CvMat* _M2 = cvCreateMat(3, 3, CV_64F); // right camera intrinisc matrix

CvMat* _D1 = cvCreateMat(1, 5, CV_64F); // left camera distort matrix

CvMat* _D2 = cvCreateMat(1, 5, CV_64F); // right camera distort matrix

CvMat* _R = cvCreateMat(3, 3, CV_64F); // rotate matrix

CvMat* _T = cvCreateMat(3, 1, CV_64F); // transmit matrix

CvMat* _E = cvCreateMat(3, 3, CV_64F); // essential matrix

CvMat* _F = cvCreateMat(3, 3, CV_64F); // fundmental matrix

CvMat* RM = cvCreateMat(3, 1, CV_64F);

_M1 = (CvMat*)cvLoad("D:\\RectifiedParameter\\left_intrinsics.xml");

_M2 = (CvMat*)cvLoad("D:\\RectifiedParameter\\right_intrinsics.xml");

_D1 = (CvMat*)cvLoad("D:\\RectifiedParameter\\left_distorted.xml");

_D2 = (CvMat*)cvLoad("D:\\RectifiedParameter\\right_distorted.xml");

RM = (CvMat*)cvLoad("D:\\RectifiedParameter\\R.xml");

_T = (CvMat*)cvLoad("D:\\RectifiedParameter\\T.xml");

// Rodrigues transform

cvRodrigues2(RM, _R, 0);

double R1[3][3], R2[3][3], P1[3][4], P2[3][4];

CvMat _R1 = cvMat(3, 3, CV_64F, R1);

CvMat _R2 = cvMat(3, 3, CV_64F, R2);

CvMat _P1 = cvMat(3, 4, CV_64F, P1);

CvMat _P2 = cvMat(3, 4, CV_64F, P2);

cvStereoRectify( _M1,

_M2,

_D1,

_D2,

cvSize(WIDTH, HEIGHT),

_R,

_T,

&_R1, // 左右相机平面间的行对准的校正旋转矩阵

&_R2, // 左右相机平面间的行对准的校正旋转矩阵

&_P1, // 左右投影方程

&_P2, // 左右投影方程

0,

0/*CV_CALIB_ZERO_DISPARITY*/ );

CvMat* mx1 = cvCreateMat( HEIGHT, WIDTH, CV_32F );

CvMat* my1 = cvCreateMat( HEIGHT, WIDTH, CV_32F );

CvMat* mx2 = cvCreateMat( HEIGHT, WIDTH, CV_32F );

CvMat* my2 = cvCreateMat( HEIGHT, WIDTH, CV_32F );

cvInitUndistortRectifyMap(_M1,_D1,&_R1,&_P1,mx1,my1);

cvInitUndistortRectifyMap(_M2,_D2,&_R2,&_P2,mx2,my2);

cvSave("D:\\mymx1.xml", mx1);

cvSave("D:\\mymy1.xml", my1);

cvSave("D:\\mymx2.xml", mx2);

cvSave("D:\\mymy2.xml", my2);

system("pause");

}现在可以计算得到的参数矩阵做Remap了。

本文参考如下:

1. http://www.vision.caltech.edu/bouguetj/calib_doc/

2. /scyscyao/article/details/5443341

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。