双目相机(1)标定

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生成标定图
}

 生成

双目相机(1)标定

 

 

 

生成棋盘格后,拿双目相机对棋盘格进行不同位姿的多次拍照采样,一般在20张左右即可。分别将左目和右目的图像存在两个文件夹中。图像如下:

双目相机(1)标定

 

 双目相机(1)标定

 

 双目相机(1)标定

 

 

二、matlab标定工具箱

1、打开标定工具箱

在命令行输入stereoCameraCalibrator,出现如下界面:

双目相机(1)标定

 

 

将上面的“Skew”、“Tangential Distortion”以及“3 Coefficients”等选项选上,将“2 Coefficients”选项去掉,如下:

双目相机(1)标定

 

 

2、载入图像

点击添加图像出现如下界面:

双目相机(1)标定

 

 

双目相机(1)标定

 

这里用的标定板子是20mm的网格.修改参数.

 

Camera1代表左摄像头,Camera2代表右摄像头,分别选择存放着左右图像的文件夹,需要特别注意的是棋盘格的边长应该根据打印的实际大小填写,单位可以选择,然后点击OK,程序会自动检测采集的图像到底有多少可以使用,可以说MATLAB2015的这个工具十分挑剔,如果角度不好的话,将使用不了,因此在采集图像时,最好多的采集一些。

双目相机(1)标定

 

 

3、标定

点击按钮,开始标定:

双目相机(1)标定

 

 

左下方的直方图为左右图像的标定误差,点击误差较大的直方图,可以直接在左边的图像对中找到对应的图像,右键选择“Remove and Recalibrate”,可以重复上述步骤,直到认为误差满足标定需求为止。

双目相机(1)标定

 

 

4、导出参数

点击选择Export camera parameters,并点击“OK”。

双目相机(1)标定

 

 双目相机(1)标定

 

 

三、读取参数

标定结束后,会得到如下标定参数:

双目相机(1)标定

 

 

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

双目相机(1)标定

 

 

双目相机(1)标定

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

双目相机(1)标定

 

 

双目相机(1)标定

 

 

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

双目相机(1)标定

 

 

 

CameraParameters1与CameraParameters2中包含如下文件:

双目相机(1)标定

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

双目相机(1)标定双目相机(1)标定

 

 

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

双目相机(1)标定双目相机(1)标定

 

 

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

双目相机(1)标定双目相机(1)标定

 

 

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

 

原文链接: https://www.cnblogs.com/gooutlook/p/15412050.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    双目相机(1)标定

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/214355

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 上午2:13
下一篇 2023年2月13日 上午2:15

相关推荐