草庐IT

MATLAB 双目相机标定

champrin 2023-03-28 原文

MATLAB 双目相机标定

Write by Champrin on 2022-12-11
GUET Evolution Team Visual Group
Reference article:
双目相机标定——从MATLAB到OpenCV
相机标定——标定图片拍摄规范
相机标定—>标定图片拍摄规范(附棋盘图)
关于相机标定的问题!

本文使用 MATLAB R2022b 进行双目标定。

采用本文的一些标定选项以及结果数据处理,在 C++ OpenCV 4.5.3 及其双目视觉的相关方法,是能够得到预期的结果的。

标定操作流程

1. 命令行窗口输入 stereoCameraCalibrator

2. 点击 Add Images

  • Folder for images from camera 1 选择左相机所拍摄的标定棋盘图
  • Folder for images from camera 2 选择右相机所拍摄的标定棋盘图
  • Size of checkerboard square 为每个棋盘格实际长度(mm)
  • 点击 确定

3. 等待完成筛选有效标定图

  • Total stereo pairs processed 为总计标定图数量
  • Added stereo pairs 为有效标定图数量
  • Rejected stereo pairs 为无效标定图数量
  • 点击 确定

4. 设置标定参数

  • OPTIONS 栏中
    • 选择 2 Coefficients (图片上忽略,截错图)
      • 3 Coefficients 一般用于鱼眼相机
    • 勾选 Tangential Distortion,计算切向畸变
    • 不勾选 Skew,若勾选,标定相机内参结果将出现参数 s ,即内参的第一行是 [fx, s, u0] ,这将会与 OpenCV 的格式不同,会导致 OpenCV 立体校正结果错误
  • INTRINSICS 栏中,选择 Compute Intrinsics
  • 点击 Calibrate

5. 查看校正效果,筛去误差大的标定图

  • 点击 Show Rectified 查看校正后的效果
  • 筛去误差大的标定图,鼠标点击选择或者拖拽红线选择,使得重投影误差小于等于 0.1 pixels(在左下角图例中 Overall Mean Error 后的数值)
    • 忽略图片上的,这是由于我自己手头上没有实物标定板,使用了iPad显示来代替,但是由于工业相机的曝光,黑白像素点会被“吃掉”,误差会很大

6. 导出标定结果

  • 点击 Export Camera Parameters
  • 设置结果变量名(默认即可)Stereo parameters variable
  • 点击 确定

7. 回到工作区查看标定结果

最终双目相机标定结果,后续使用OpenCV做双目测距所需参数:
假设结果变量名设置为 stereoParams

  • stereoParams.CameraParameters1

    • K 相机1(左相机)内参矩阵
    • RadialDistortion 相机1径向畸变参数 k1,k2,k3
    • TangentialDistortion 相机1切向畸变参数 p1,p2
  • stereoParams.CameraParameters2

    • K 相机2(右相机)内参矩阵
    • RadialDistortion 相机2径向畸变参数 k1,k2,k3
    • TangentialDistortion 相机2切向畸变参数 p1,p2
  • stereoParams.PoseCamera2

    • R 相机1到相机2的旋转矩阵,也即相机2相对于相机1的旋转矩阵
      • R2022b版本在OpenCV上使用无需转置
    • Translation 相机1到相机2的平移矩阵

OpenCV 相机内参矩阵:\(\begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix}\)

OpenCV 相机畸变向量:\(\begin{pmatrix} k_1 & k_2 & p_1 & p_2 & k_3 \end{pmatrix}\)

附:标定棋盘图拍摄规范

  1. 在一次标定的整个过程中,不能调节相机的光圈、焦距,要保证在标定中摄像头进光量与焦距的一致,改变需要重新标定
  2. 把相机图像分成四个象限(如图1所示),应保证拍摄的标定板图像均匀分布在五个位置(四个象限以及正中心)中,且在每个位置进行不同方向的两次倾斜,参考图2;同时,可以固定住标定板,在不同角度拍摄。
  3. 标定板的成像应大致占摄像头视野的1/4左右
  4. 标定板成像不能过爆,过爆会导致特征轮廓的提取的偏移
  5. 拍摄过程中可以对标定板适当的进行补光,调节标定板到镜头的距离,以便于排出清晰的图片
  6. 标定图片数量通常在15~25张之间,数量太少,标定的参数会不准确
  7. 标定时用的标定板最好选择x方向与y方向棋盘格不同的,便于标定程序识别标定板方向

有关MATLAB 双目相机标定的更多相关文章

  1. Matlab imread()读到了什么 (浅显 当复习文档了) - 2

    matlab打开matlab,用最简单的imread方法读取一个图像clcclearimg_h=imread('hua.jpg');返回一个数组(矩阵),往往是a*b*cunit8类型解释一下这个三维数组的意思,行数、数和层数,unit8:指数据类型,无符号八位整形,可理解为0~2^8的数三个层数分别代表RGB三个通道图像rgb最常用的是24-位实现方法,即RGB每个通道有256色阶(2^8)。基于这样的24-位RGB模型的色彩空间可以表现256×256×256≈1670万色当imshow传入了一个二维数组,它将以灰度方式绘制;可以把图像拆分为rgb三层,可以以灰度的方式观察它figure(1

  2. MIMO-OFDM无线通信技术及MATLAB实现(1)无线信道:传播和衰落 - 2

     MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO

  3. [工业相机] 分辨率、精度和公差之间的关系 - 2

    📢博客主页:https://blog.csdn.net/weixin_43197380📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢本文由Loewen丶原创,首发于CSDN,转载注明出处🙉📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨文章预览:一.分辨率(Resolution)1、工业相机的分辨率是如何定义的?2、工业相机的分辨率是如何选择的?二.精度(Accuracy)1、像素精度(PixelAccuracy)2、定位精度和重复定位精度(RepeatPrecision)三.公差(Tolerance)四.课后作业(Post-ClassExercises)视觉行业的初学者,甚至是做了1~2年

  4. 建模分析 | 平面2R机器人(二连杆)运动学与动力学建模(附Matlab仿真) - 2

    目录0专栏介绍1平面2R机器人概述2运动学建模2.1正运动学模型2.2逆运动学模型2.3机器人运动学仿真3动力学建模3.1计算动能3.2势能计算与动力学方程3.3动力学仿真0专栏介绍?附C++/Python/Matlab全套代码?课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);曲线优化(贝塞尔曲线、B样条曲线等)。?详情:图解自动驾驶中的运动规划(MotionPlanning),附几十种规划算法1平面2R机器人概述如图1所示为本文的研究本体——平面2R机器人。对参数进行如下定义:机器人广义坐标

  5. ABB-IRB-1200运动学分析MATLAB RVC工具分析+Simulink-Adams联合仿真 - 2

    一、机器人介绍        此处是基于MATLABRVC工具箱,对ABB-IRB-1200型号的微型机械臂进行正逆向运动学分析,并利Simulink工具实现对机械臂进行具有动力学参数的末端轨迹规划仿真,最后根据机械模型设计Simulink-Adams联合仿真。 图1.ABBIRB 1200尺寸参数示意图ABBIRB 1200提供的两种型号广泛适用于各作业,且两者间零部件通用,两种型号的工作范围分别为700 mm 和 900 mm,大有效负载分别为 7 kg 和5 kg。 IRB 1200 能够在狭小空间内能发挥其工作范围与性能优势,具有全新的设计、小型化的体积、高效的性能、易于集成、便捷的接

  6. 相机校准—外参矩阵 - 2

    在本文中,我们将探讨摄影机的外参,并通过Python中的一个实践示例来加强我们的理解。相机外参摄像头可以位于世界任何地方,并且可以指向任何方向。我们想从摄像机的角度来观察世界上的物体,这种从世界坐标系到摄像机坐标系的转换被称为摄像机外参。那么,我们怎样才能找到相机外参呢?一旦我们弄清楚相机是如何变换的,我们就可以找到从世界坐标系到相机坐标系的基变换的变化。我们将详细探讨这个想法。具体来说,我们需要知道相机是如何定位的,以及它在世界空间中的位置,有两种转换可以帮助我们:有助于确定摄影机方向的旋转变换。有助于移动相机的平移变换。让我们详细看看每一个。旋转通过旋转改变坐标让我们看一下将点旋转一个角度

  7. 慢跑者与狗 & 地中海鲨鱼问题的matlab解法 - 2

    慢跑者与狗问题描述一个慢跑者在平面上沿椭圆以恒定的速率𝒗=𝟏跑步,设椭圆方程为:𝒙=𝟏𝟎+𝟐𝟎𝒄𝒐𝒔(𝒕),𝒚=𝟐𝟎+𝟓𝒔𝒊𝒏(𝒕)。突然有一只狗攻击他,这只狗从原点出发,以恒定速率𝒘跑向慢跑者,狗的运动方向始终指向慢跑者。分别求出𝒘=𝟐𝟎,𝒘=𝟓时狗的运动轨迹。模型建立设时刻t慢跑者的坐标为(𝑿(𝒕),𝒀(𝒕)),狗的坐标为(𝒙(𝒕),𝒚(𝒕))。则𝑿=𝟏𝟎+𝟐𝟎𝒄𝒐𝒔(𝒕),𝒀=𝟐𝟎+𝟏𝟓𝒔𝒊𝒏(𝒕),狗从(0,0)出发,建立狗的运动轨迹的参数方程:由于狗始终对准人,因而狗的速度方向平行于狗与人位置的差向量:消去𝝀,得由题意𝑿=𝟏𝟎+𝟐𝟎𝒄𝒐𝒔𝒕,𝒀=𝟐𝟎+1𝟓𝒔𝒊𝒏(𝒕),狗从(0,0)

  8. C++调用matlab函数(未安装 matlab 也可以使用) - 2

            在正常工作环境中往往是可以使用无线网络的,此时安装一个matlab也不是什么难事;但是也难免也会遇到一些工作电脑不允许链接无线网络,此时若安装一个matlab则是一件非常痛苦的事,因为其安装包就20多个G,当时我是用手机开热点下载的,仅仅下载安装包就浪费了一个下午+一个晚上;       下面就举一个例子,针对安装过matlab和未安装过matlab的情况去介绍C++调用matlab函数的操作流程:一、封装matlab函数首先把matlab代码封装成函数的形式,下面举一个简单的函数为例;functionc=myadd(a,b)c=a+b;end二、编译matlab函数具体的编译

  9. 有仰拍相机和俯拍相机时,俯拍相机中心和吸嘴中心的标定 - 2

    俯拍相机中心和吸嘴中心的标定文章目录俯拍相机中心和吸嘴中心的标定前言适用模型如下:一、使用一个标定片进行标定1.关键注意:2.标定步骤:二、使用一个L型的工件1.关键注意:2.标定步骤:总结前言在自动化设备领域,使用相机进行定位是很普遍存在的,而使用相机定位就必定会用到标定,本文介绍两种关于吸嘴上方的俯拍相机和吸嘴中心的标定方法(前提是带有仰拍相机和俯拍相机)。【还有很多相机的使用场景的标定方法将在以后的文章中进行阐述】适用模型如下:一、使用一个标定片进行标定1.关键注意:关键是使用两个相机的中心和识别偏差,得到两个相机的中心固定偏差。注:后续俯拍相机拍物料识别得到的偏差以吸嘴中心在俯拍相机中

  10. 相机内参标定,相机和激光雷达联合标定 - 2

    相机内参标定,相机和激光雷达联合标定一、相机标定原理1.1成像过程1.2标定详解二、相机和激光雷达联合标定2.1标定方法汇总2.2Autoware的安装与运行2.2.1安装方式2.2.2安装Autoware的依赖(Ubuntu16.04/kinetic)2.2.3编译Autoware1.创造工作空间2.下载Autoware源码3.其他依赖4.编译5.效果2.3Autoware标定激光雷达和相机的外参过程一、相机标定原理1.1成像过程现实物体在相机中的成像过程离不开世界坐标系、相机坐标系、图像坐标系以及像素坐标系,只有理解了这些才能对获取的图像进行准确的分析。成像过程:四个坐标系如下图所示:世界

随机推荐