matlab双目标定(详细过程)

双目相机标定主要是为了获得摄像头的内参(f,1/dx,1/dy,cx,cy)、畸变参数(k1,k2,k3,p1,p1)和外参(R,t),用于接下来的双目校正和深度图生成。具体内容参照:https://blog.csdn.net/qq_38236355/article/details/88933839

具体标定步骤如下:

一、获得棋盘格图像

大多数双目标定都是用棋盘格进行标定,如下所示:
在这里插入图片描述
这里有一段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、载入图像

点击添加图像在这里插入图片描述出现如下界面:

在这里插入图片描述
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。切记不可弄错,否则后续的立体匹配会出现很大的偏差。

由上述方法获得双目的标定参数后,就可以进一步进行双目校正、匹配以及生成深度图了,具体内容参照:
https://blog.csdn.net/qq_38236355/article/details/88933839

  • 91
    点赞
  • 785
    收藏
    觉得还不错? 一键收藏
  • 90
    评论
Matlab双目标定是一种用于对双目相机进行标定的方法。标定的目的是确定相机的内部参数(如焦距、主点位置)和外部参数(如相机之间的旋转和平移关系),从而使得相机能够准确地测量和重构三维场景中的物体。 Matlab提供了一个标定工具箱,可以帮助用户进行自动标定。这个工具箱可以在Matlab环境中使用,并且具有用户友好的界面。用户可以根据实际情况选择合适的Matlab版本,并使用标定工具箱进行相机标定的操作。 在进行Matlab双目标定之前,有些相机在出厂时已经完成了标定,例如Intel Realsense系列。但是也有一些相机在出厂时并没有完成标定工作,这时候就需要用户自己进行标定标定过程涉及相机的参数调整、图像采集和标定板的使用。具体的标定方法和步骤可以参考相关博客或文档。 总结来说,Matlab双目标定是一种通过使用Matlab工具箱来对双目相机进行标定的方法。可以根据实际情况选择合适的Matlab版本,并按照标定工具箱提供的操作界面和步骤进行相机标定的操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Matlab双目相机标定](https://blog.csdn.net/weixin_46133643/article/details/123897977)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 90
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值