使用Matlab做相机标定(获取相机的内外参数矩阵)

本文详细介绍使用Matlab进行单目和双目相机标定的步骤,包括前期准备、参数设置及误差分析,适用于计算机视觉领域的研究者和工程师。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相机标定

本文章相机标定主要分为单目相机和双目相机的标定,使用Matlab进行标定。

前期准备(获取图片)

准备一个标定板,使用OpenCV程序进行拍照,拍照时尽量让标定板占据更多的画面,拍摄20张图片(可以增加或减少)。

单目标定

1.打开Matlab.界面如下图1所示。
在这里插入图片描述 图1.Matlab界面
2.点击上方“APP”功能,进入如下界面,红色部分为相机标定功能(上方为弹单目相机标定功能,下方是双目相机标定)。
在这里插入图片描述
图2.相机标定功能
3.点击单目相机标定,进入如下标定界面,点击红色部分的**“下三角”**选择“From file”,选择文件夹,选择照片。
在这里插入图片描述
图3.选择文件夹
4.选择照片后,进入如下界面,选择标定板的大小(单位 mm),我的设置为25mm。
在这里插入图片描述
图4.设置标定板大小

5.参数设置。Radial Distortion.畸变参数(需理解畸变参数含义)。2 Coefficients 表示计算2个畸变参数:k1/k2;3 Coefficients 表示计算3个畸变参数:k1/k2/k3。一般来说选择计算2个畸变参数即可。计算3个畸变参数时,k3值比较小,大概量级为1e-5,可以忽略(实际计算过程中,如果考虑太多高阶的畸变参数,会导致标定求解的不稳定。如果选择了计算3个畸变参数,需要注意畸变矩阵的排列顺序:[k1,k2,p1,p2,k3])。

点击**“Calibrate”**开始标定。
在这里插入图片描述
图5.参数设置
6.标定参数误差。如图6中的红色部分是标定误差,标定误差平均值小于0.3个像素,相机参数可用。(从标定误差中可以看出每张照片的误差,如果某张照片误差过大,可以在左侧图片列表中将其删除,重新标定)。

在这里插入图片描述
图6 标定误差
7.点击图7中的红色部分进行参数保存。会出现图8的命令框,点击确定即可。
在这里插入图片描述
图7 参数保存
在这里插入图片描述
图8 命令框
8.参数保存后,关闭标定界面,会出现图9界面。(工作区内的文件即为标定参数,双击会出现图10界面)
在这里插入图片描述
图9 标定之后的主界面
在这里插入图片描述
图10 标定结果
其中,“RadiaDistortion”即为相机的畸变矩阵,“IntrinsicMatrix”即为内参矩阵。

双目标定

双目标定与单目标定几乎相同。
1.导入左右相机的图片。
在这里插入图片描述
图 11 双目相机的文件导入
2.如图12所示为,导入双目相机之后的图片,下方为平均误差分析区域。导入图片后设置**“Radial Distortion”,之后点击“Calibrate”开始标定。
在这里插入图片描述
图12 双目相机文件导入之后的界面
3.标定结束后保存参数,出现如下界面。
在这里插入图片描述
图13 保存参数
4.关闭标定界面,返回主界面查看参数,(点击主界面
工作区**内的文件,查看参数。如图14所示)。其中CameraParameters1,为左相机参数;CameraParameters2,是右相机参数;RotationOfCamera2为旋转矩阵,TranslationOfCamera2是平移矩阵。
在这里插入图片描述
5.使用OpenCV中的stereoRectify函数可以获得其他参数矩阵(校正旋转矩阵Rl,Rr,重投影矩阵Q,投影矩阵P等)。

### MATLAB 中查看双目相机标定后的内外参数MATLAB中完成双目相机标定后,可以通过特定的方式访问和查看所获得的内部参数(内参)和外部参数(外参)。当标定过程结束并保存了结果,在主界面的工作区内能够找到相应的变量用于表示各个相机的具体属性。 对于左相机而言,其参数被存储于`CameraParameters1`对象之中;而对于右相机,则有对应的`CameraParameters2`来记录相关信息[^2]。具体来说: - **内参数**:这包含了焦距、光学中心位置以及可能存在的径向畸变系数等信息。这些数值共同决定了成像过程中光线如何映射至图像传感器上的每一个像素点。 - **外参数**:指的是描述两个摄像设备相对姿态的数据集——即旋转和平移变换矩阵(`RotationOfCamera2`, `TranslationOfCamera2`),它们揭示了一个摄像机相对于另一个的位置关系及其方向指向情况。 #### 访问与显示参数的方法 为了直观地展示上述提到的各项参数值,可以在命令窗口输入相应变量名加上`.`操作符连接具体的字段名称来进行查询。例如要获取相机的焦距focal length可键入如下指令: ```matlab disp(CameraParameters1.IntrinsicMatrix); ``` 同样地,如果想要了解两台相机间的相对位姿变化量,则可通过下面这段代码实现: ```matlab % 显示相机相对于左相机的姿态 disp('Right Camera Rotation Matrix:'); disp(RotationOfCamera2); disp('Right Camera Translation Vector:'); disp(TranslationOfCamera2); ``` 此外,还可以利用MATLAB内置的一些辅助函数进一步处理或可视化这些数据,比如绘制立体匹配视差图等功能模块,从而更好地理解和应用所得出的结果。
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值