matlab双目标定(详细过程)
https://blog.csdn.net/qq_38236355/article/details/89280633
双目相机标定主要是为了获得摄像头的内参(f,1/dx,1/dy,cx,cy)、畸变参数(k1,k2,k3,p1,p1)和外参(R,t),用于接下来的双目校正和深度图生成。具体内容参照:https://blog.csdn.net/qq_38236355/article/details/88933839
1采集图像
实物:
测试 用一个zed双目相机采集图像.
具体标定步骤如下:
一、获得棋盘格图像
大多数双目标定都是用棋盘格进行标定,如下所示:
这里有一段c++代码,用于生成棋盘格图像:
#include <opencv2/opencv.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> using namespace cv; using namespace std; void main() { //---生成标定图 IplImage *img; int chess_size = 500; int dx = 10; //棋盘格大小,像素为单位 int dy = 7; //棋盘格数目 img = cvCreateImage(cvSize(chess_size*dy, chess_size*dx), IPL_DEPTH_8U, 1); cvZero(img); int flag = 0; for (int i = 0; i < dx; i++) for (int j = 0; j < dy; j++) { flag = (i + j) % 2; if (flag == 0) { for (int m = i*chess_size; m < (i + 1)*chess_size; m++) for (int n = j*chess_size; n < (j + 1)*chess_size; n++) *(img->imageData + m*img->widthStep + n) = 255; } } cvSaveImage("标定图2.jpg", img); // 生成的棋盘格图保存在该工程目录下 cvNamedWindow("cab", 1); cvShowImage("cab", img); char ch = cv::waitKey(0); if (ch == 27) { exit(0); } //system("PAUSE"); //---END生成标定图 }
生成
生成棋盘格后,拿双目相机对棋盘格进行不同位姿的多次拍照采样,一般在20张左右即可。分别将左目和右目的图像存在两个文件夹中。图像如下:
二、matlab标定工具箱
1、打开标定工具箱
在命令行输入stereoCameraCalibrator,出现如下界面:
将上面的“Skew”、“Tangential Distortion”以及“3 Coefficients”等选项选上,将“2 Coefficients”选项去掉,如下:
2、载入图像
点击添加图像出现如下界面:
这里用的标定板子是20mm的网格.修改参数.
Camera1代表左摄像头,Camera2代表右摄像头,分别选择存放着左右图像的文件夹,需要特别注意的是棋盘格的边长应该根据打印的实际大小填写,单位可以选择,然后点击OK,程序会自动检测采集的图像到底有多少可以使用,可以说MATLAB2015的这个工具十分挑剔,如果角度不好的话,将使用不了,因此在采集图像时,最好多的采集一些。
3、标定
点击按钮,开始标定:
左下方的直方图为左右图像的标定误差,点击误差较大的直方图,可以直接在左边的图像对中找到对应的图像,右键选择“Remove and Recalibrate”,可以重复上述步骤,直到认为误差满足标定需求为止。
4、导出参数
点击选择Export camera parameters,并点击“OK”。
三、读取参数
标定结束后,会得到如下标定参数:
TranslationOfCamera2:相机2相对于相机1的偏移矩阵,可以直接使用。
RotationOfCamera2:相机2相对于相机1的旋转矩阵,需要转置之后才能使用。
CameraParameters1与CameraParameters2为左右摄像头的单独标定参数。
CameraParameters1与CameraParameters2中包含如下文件:
IntrinsicMatrix存放的是摄像头的内参,只与摄像机的内部结构有关,需要先转置再使用。
RadialDistortion:径向畸变,摄像头由于光学透镜的特性使得成像存在着径向畸变,可由K1,K2,K3确定。
TangentialDistortion:切向畸变,由于装配方面的误差,传感器与光学镜头之间并非完全平行,因此成像存在切向畸变,可由两个参数P1,P2确定。
使用时,需要注意参数的排放顺序,即K1,K2,P1,P2,K3。切记不可弄错,否则后续的立体匹配会出现很大的偏差。