使用Matlab、Opencv、Ros三种方法完成相机标定

一、前置知识总结

1、相机标定的意义

        在机器视觉领域,相机的标定是一个关键的环节,它决定了机器视觉系统能否有效的定位,能否有效的计算目标物。相机标定意义在于将现实世界中的三维物体与相机图像对应的二维物体映射起来,实际上就是透视投影。

2、相机标定原理

        针对针孔相机模型, 相机标定,标定的是指内参矩阵和外参矩阵,就可以确定为一的相机模型。

  • 相机的内参: 主要包含 焦距,相机主点坐标,以及畸变参数即 fx fy  cx cy k1 k2 k3 p1 p2
  • 相机的外参: 包含 旋转矩阵和平移矩阵 即 R  t     
 2、相机成像几何模型
  • 世界坐标系:是客观三维世界的绝对坐标系,也称客观坐标系。
  • 相机坐标系(光心坐标系):以相机的光心为坐标原点, X 轴和 Y 轴分别平行于图像坐标系的 X 轴和 Y 轴,相机的光轴为 Z 轴。
  • 图像坐标系:以图像平面的中心为坐标原点,X 轴和 Y 轴分别平行于图像平面的两条垂直边, 用( x , y )表示其坐标值。 图像坐标系是用物理单位(例如毫米)表示像素在图像中的位置。
  • 像素坐标系:以图像平面的左上角顶点为原点,X 轴和 Y 轴分别平行于图像坐标系的 X 轴和 Y 轴,用(u , v )表示其坐标值,单位是像素。
3、相机内外参基本原理    

        相机坐标系世界坐标系之间的坐标转换关系称为相机外参,一般由平移旋转两部分参数组成。求取外参的过程称之为外参标定,外参标定的结果关系到如何引导机器人进行抓取。
        相机内部参数(简称内参)只与相机内部属性(如焦距、分辨率、像素尺寸、镜头畸变等)
有关。利用相机内参可以将相机坐标系中的三维空间点变换到图像平面坐标系中,经过镜头畸变等校正过程之后可进一步变换至图像像素坐标系中的二维像素点。求取这一关系的
过程称为相机内参标定。

4、相机内参矩阵推导   
4.1 相机坐标系–>图像坐标系

        真实世界中的某点会投影在相机的成像平面上,利用针孔成像原理,空间任意一点Pc与图像点p之间的关系,Pc与相机光心Oc的连线为OcPc,与像面的交点p即为空间点Pc在图像平面上的投影。

        该过程为透视投影,利用相似三角形关系可得:

        其中f为焦距,z轴方向上s为Pc点到光心的距离,一般称为比例因子。投影关系为写成矩阵形式:

        其中,s为比例因子(s不为0),f为有效焦距(光心到图像平面的距离),(x,y,z,1)T是空间点P在坐标系oxyz中的齐次坐标,(x,y,1)T是像点p在图像坐标系OXY中的齐次坐标。

        注意:此时投影点p的单位还是mm,并不是pixel,需要进一步转换到像素坐标系。

4.2、图像坐标系–>像素平面坐标系

       像素坐标系和图像坐标系都在成像平面上,只是各自的原点和度量单位不一样。图像坐标系的原点为相机光轴与成像平面的交点,通常情况下是成像平面的中点或者叫principal point。图像坐标系的单位是mm,属于物理单位,而像素坐标系的单位是pixel,我们平常描述一个像素点都是几行几列。所以这二者之间的转换如下:

dx和dy表示每一列和每一行分别代表多少mm,即1pixel=dx mm。

5、相机透镜畸变与校正
5.1、径向畸变

 光线经过透镜中心会发生弯曲,这种现象称为径向畸变,径向畸变分为枕型畸变与筒形畸变。

<think>好的,我需要帮助用户了解如何使用MATLAB和棋盘格对D435i相机进行标定。用户之前已经询问过D435i是双目还是单目相机,现在转向标定方法,特别是使用MATLAB和棋盘格。 首先,我需要回忆用户提供的引用内容。引用1提到单目相机标定的流程,包括图像采集、角点提取、坐标系生成、参数计算、评估和应用。引用2提到了D435i的各类标定,包括RGB、单目、双目和IMU标定使用kalibr库,但用户现在问的是MATLAB,所以可能需要调整方法。 用户的问题明确提到MATLAB和棋盘格,所以需要结合这两个工具。D435i作为双目相机,但用户可能只想标定单目(比如RGB摄像头)还是双目标定?根据之前的回答,D435i有双目红外和RGB传感器,但用户可能指的是RGB的单目标定,或者双目的立体标定。需要明确。 根据用户引用的内容,引用1是关于单目标定的,而引用2提到D435i的双目标定。但用户现在的问题是用MATLAB,而MATLAB标定工具通常用于单目或立体标定,但可能需要不同的工具箱。比如,单目标定用Camera Calibrator,立体标定需要Stereo Camera Calibrator。 因此,可能需要分步骤说明如何分别标定RGB摄像头(单目)和红外双目(立体)。但用户可能主要关注单目,因为提到了棋盘格,而棋盘格通常用于单目标定。不过D435i的双目可能也需要标定,但MATLAB的立体标定可能需要同时使用左右红外摄像头和棋盘格。 需要确认MATLAB是否支持RealSense相机的直接连接,或者是否需要先捕获图像再处理。通常标定过程是捕获图像后离线处理,所以步骤可能包括使用RealSense SDK或ROS获取图像,保存后导入MATLAB。 另外,用户引用2中提到使用kalibr库,但用户现在要用MATLAB,所以可能需要转换方法。需要确保步骤适用于MATLAB环境,比如使用Image Acquisition Toolbox捕获图像,或用Computer Vision Toolbox进行标定。 需要组织步骤:硬件准备、图像采集、MATLAB标定流程(单目或立体)、参数应用。同时要注意D435i的RGB和双目的不同传感器可能需要分别标定,比如单目标定RGB,立体标定红外双目。 此外,用户的问题可能涉及如何具体操作,比如棋盘格的大小、拍摄注意事项、MATLAB函数调用等。需要详细说明每个步骤,确保用户能跟随操作。可能还需要提到标定结果的评估,如重投影误差,以及如何导出参数应用在实际中。 最后,确保引用之前的引用内容,比如在步骤中提到标定板需要完整可见,参考引用1,或者在双目标定中提到基线参数,参考之前的回答中的公式。同时,根据用户之前的回答,D435i有IMU,但用户的问题未涉及IMU标定,所以可能不需要涉及。 总结步骤可能为: 1. 准备棋盘格并打印 2. 使用D435i拍摄多角度图像(RGB和/或红外双目) 3. 导入MATLAB使用Camera Calibrator或Stereo Calibrator 4. 提取角点,计算参数 5. 评估误差 6. 导出参数并应用 需要检查MATLAB工具是否支持同时处理双目的标定,或者是否需要分别标定左右摄像头后再进行立体标定。此外,D435i的双目是红外,可能需要红外下的棋盘格图像,但通常标定使用可见光棋盘格,可能需要开启RGB摄像头或使用带有红外投射的棋盘格。不过通常棋盘格标定在可见光下进行,所以可能需要使用RGB摄像头进行单目标定,而红外双目的标定可能需要其他方法,但用户的问题可能集中在RGB摄像头的标定,所以需要明确。 可能用户主要想标定RGB摄像头,所以步骤以单目为主,但如果有需要,也要提及双目标定的不同之处。需要参考引用1的单目流程,并结合D435i的硬件特性。</think>### D435i 相机标定方法MATLAB + 棋盘格) 以下是基于 **MATLAB 单目/立体标定工具箱** 的详细操作流程,结合 D435i 的硬件特性设计: --- #### **一、标定前准备** 1. **硬件配置** - 打印 **棋盘格标定板**(建议使用 7×9 或 9×11 黑白棋盘格,方格尺寸精确测量并输入MATLAB) - 固定 D435i 相机位置,确保 RGB 摄像头或双目红外摄像头可清晰拍摄棋盘格[^1] - 关闭红外激光投射器(避免干扰棋盘格纹理) 2. **环境要求** - 均匀光照,避免反光或阴影覆盖棋盘格 - 标定板需覆盖图像不同区域(边缘/中心、倾斜/正对) --- #### **二、单目(RGB摄像头)标定步骤** 1. **图像采集** - 使用 MATLAB **Image Acquisition Tool** 或 RealSense SDK 捕获至少 **15~20 张** RGB 图像(不同角度/距离) - 保存图像时确保棋盘格完整可见(每张图像中标定板占比 >50%) 2. **MATLAB 标定流程** ```matlab % 1. 启动相机标定工具 cameraCalibrator % 2. 导入标定图像,输入棋盘格实际尺寸(单位:mm) % 3. 自动检测角点,手动修正误检点 % 4. 计算参数(焦距 fx/fy、主点 cx/cy、畸变系数 k1/k2/p1/p2/k3) % 5. 分析重投影误差(理想值 <0.5像素) ``` 3. **参数导出与应用** - 导出 `cameraParams` 对象至工作区 - 调用 `undistortImage()` 函数校正图像畸变: ```matlab correctedImg = undistortImage(rawImg, cameraParams); ``` --- #### **三、双目(红外摄像头)标定扩展**[^2] 若需标定双目红外摄像头,需使用 **Stereo Camera Calibrator**: 1. **同步采集左右红外图像**(通过 RealSense SDK 获取 `left_ir` 和 `right_ir` 图像序列) 2. **立体标定流程** ```matlab % 1. 启动立体标定工具 stereoCameraCalibrator % 2. 分别导入左右红外图像,输入棋盘格尺寸 % 3. 计算双目参数(基线距离 B、相对旋转矩阵 R、平移向量 T) % 4. 验证立体校正效果(使用 rectifyStereoImages()) ``` --- #### **四、关键注意事项** 1. **标定板稳定性** - 标定过程中需固定相机标定板,避免运动模糊[^1] 2. **畸变校正优先级** - D435i 的 RGB 摄像头径向畸变较大,需优先优化 `k1, k2` 参数 3. **标定结果验证** - 使用 `showReprojectionErrors()` 可视化误差分布,剔除异常图像 --- ### 相关问题 1. 如何通过标定参数计算 D435i 的实际测量误差? 2. 双目立体标定中,如何优化极线对齐效果? 3. 标定后的参数如何集成到 ROSOpenCV 应用中?
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值