草庐IT

相机内参标定,相机和激光雷达联合标定

学无止境的小龟 2025-06-14 原文

相机内参标定,相机和激光雷达联合标定

一、相机标定原理

1.1 成像过程

现实物体在相机中的成像过程离不开世界坐标系、相机坐标系、图像坐标系以及像素坐标系,只有理解了这些才能对获取的图像进行准确的分析。

成像过程:

四个坐标系如下图所示:

世界坐标系(world coordinate system):
现实世界的三维坐标系,是现实世界的物理模型,单位为m。

相机坐标系(camera coordinate system):
以镜头硬件的光电系统为基础,建立的坐标系,为了从相机的角度描述物体位置而定义,首先建立相机的坐标系,作为沟通现实世界和图像/像素坐标系的中间桥梁,单位为m;世界坐标系到相机坐标系只涉及旋转和平移,所以是刚体变换,不涉及形变。

世界坐标系 —> 相机坐标系

绕Z轴旋转的坐标关系如下:

所以从世界坐标系到相机坐标系的转换关系如下所示:

用齐次坐标表示:

图像坐标系(image coordinate system):
为了描述成像过程中物体从相机坐标系到图像坐标系的投影透射关系而引入,方便进一步得到像素坐标系下的坐标,单位为m;从相机坐标系到图像坐标系,属于透视投影关系,从3D转换到2D。如图所示此时相机坐标到图像坐标的关系表示为:

其中,相机坐标系的Z轴,与图像坐标系的Z轴,同方向。

像素坐标系(pixel coordinate system):
为了描述物体成像后的像点在数字图像上(相片)的坐标而引入,是真正从相机内读取到的信息所在的坐标系,单位为个(像素数目);以图像左上角为原点建立以像素为单位的直接坐标系u-v。像素的横坐标u与纵坐标v分别是在其图像数组中所在的列数与所在行数。(在OpenCV中u对应x,v对应y)图像坐标到像素坐标如下图所示:

所以,
世界坐标系到像素坐标系的,变换为:

其中:

是相机内参;

是相机外参。

图片来源:
计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换
参考大佬:
1、相机针孔模型----从世界坐标系,到相机坐标系,再到图像物理坐标系,最后到图像像素坐标系的转换过程解析
2、世界坐标系、相机坐标系、图像坐标系、像素坐标系
3、相机内参详解

其中相机的内参和外参可以通过张正友标定获取(戳这里查看张正友标定的资料)。通过最终的转换关系来看,一个三维中的坐标点,的确可以在图像中找到一个对应的像素点,但是反过来,通过图像中的一个点找到它在三维中对应的点就很成了一个问题,因为我们并不知道等式左边的Zc的值。

1.2 标定详解

转换公式:


内参矩阵:

相机内参分别为:
f:焦距,单位毫米
fx:使用像素来描述x轴方向焦距的长度
fy:使用像素来描述y轴方向焦距的长度
u0v0:主点坐标(相对于成像平面),单位也是像素
γ:为坐标轴倾斜参数,理想情况下为0

内参矩阵是相机自身的属性,通过标定就可以得到这些参数。

外参矩阵:


相机的外参是世界坐标系在相机坐标系下的描述,R是旋转参数是每个轴的旋转矩阵的乘积,T是平移参数。

畸变参数: k1、k2、k3径向畸变系数,p1、p2是切向畸变系数。径向畸变发生在相机坐标系转图像物理坐标系的过程中。而切向畸变是发生在相机制作过程,其是由于感光元平面跟透镜不平行。其如下:

1、径向畸变:产生原因是光线在远离透镜中心的地方比靠近中心的地方更加弯曲径向畸变主要包含枕形畸变(左图)桶形畸变(右图)两种。下面两幅图是这两种畸变的示意:


现实中真实照片:

2、切向畸变:产生的原因透镜不完全平行于图像平面,这种现象发生于成像仪被粘贴在摄像机的时候。下面图片来自于《学习opencv》p413:

相机标定:
相机标定是后续计算机视觉工作的前提,其标定的目的是为了确定相机的内参、外参以及畸变参数。标定的方法有:线性标定法、非线性优化标定法、两步标定法。线性标定法:运算速度快但是标定的精度不高,因为相机畸变都是非线性的。非线性优化标定法:标定精度高,但模型复杂。两步标定法有:Tsai的经典两步法和张正友的标定方法。

参考大佬:
1、内参、外参、畸变参数三种参数与相机的标定方法与相机坐标系的理解
2、相机标定的几何数学原理–操作流程–应用管理

二、相机和激光雷达联合标定

2.1 标定方法汇总

这里列举开源的五种标定方案,即百度阿波罗标定方法、but_calibration_camera_velodyne方法、基于ArUco_ros和ArUco_mapping包的方法、Autoware标定工具Calibration Tool Kit、览沃科技标定方法。

方案比较:

综合来看,选用Autoware来进行激光雷达和相机的联合标定。

2.2 Autoware的安装与运行

温馨提醒:记得换源,保证网速的可靠。安装1.10版本,此处环境:Ubuntu16.04+ROS kinetic,Qt5.2.1虽然指明要求 5.2.1以上但是测试中发现Qt4也能正常使用,CUDA安装是可选的没有CUDA也能顺利安装使用,但是要安装CUDA的话记住一定要选择10.0版本,不然会出错。另外经过我的实践,显卡配置一般(显存<8G)的时候在使用autoware的过程中选择CUDA加速节点也会卡死。

Autoware现在有基于ROS1的Autoware.AI和基于ROS2的Autoware.Auto两个大的版本,其中Autoware.AI将在2020年年底停止更新,同时Autoware.Auto将拥有现在.ai有的所有功能(不过他官网上2019年的时间树还没填满,存疑)。本篇博客讲述Autoware.AI的安装,下面直接称autoware。

2.2.1 安装方式

autoware的安装分为Docker和Source两种,docker安装相对简单,但是为了以后更方便的查看和研究源码,此处选择源码安装。
【注】:ROS和Qt的安装不再赘述,请自行安装。

2.2.2 安装Autoware的依赖(Ubuntu16.04 /kinetic)

sudo apt-get update
sudo apt-get install -y python-catkin-pkg python-rosdep ros-$ROS_DISTRO-catkin gksu
sudo apt-get install -y python3-pip python3-colcon-common-extensions python3-setuptools python3-vcstool
pip3 install -U setuptools

2.2.3 编译Autoware

1.创造工作空间

mkdir -p autoware.ai/src

2.下载Autoware源码

建议直接下载源码放在autoware.ai/src下,操作如下:
网址:https://gitlab.com/autowarefoundation/autoware.ai/autoware/-/tree/1.10.0

3.其他依赖

除官方提到的内容之外,测试中我们发现运行时无法出现图形化界面,因此可以先安装psutil模块

sudo apt-get install python-pip
pip install --upgrade psutil

4.编译

AutoWare是基于ROS开发的,因此编译前需要按照ROS的通用要求安装依赖库,即在源码中的ros文件夹下:

// 1. 进入 autoware 的 ros 目录下
cd autoware.ai/src/ros

// 2. rosdep 安装依赖
rosdep update
rosdep install -y --from-paths src --ignore-src --rosdistro $ROS_DISTRO

// 3. 编译运行
// 在源码的ros文件夹下直接运行脚本进行编译(有可能会遇到拒绝访问的问题,给src中所有文件赋予执行权限:https://blog.csdn.net/weixin_48262500/article/details/120058215)
./catkin_make_release

// 4. 运行脚本
./run

5.效果

正常的图形化界面如图所示,终端可能出现一些错误信息,但是能出现该界面说明运行正常,测试中虽然报了一些错误信息,但是标定过程一切正常。

2.3 Autoware标定激光雷达和相机的外参过程

参考大佬:
1、自动驾驶之Autoware的安装,此篇文章有不同系统版本的对应安装版本。
2、Ubuntu16.04下Autoware1.10编译安装
3、Ubuntu16.04下Autoware安装与demo测试
4、Autoware 标定工具 Calibration Tool Kit 联合标定 Robosense-16 和 ZED 相机!
5、激光雷达和相机的联合标定
6、autoware 激光-相机联合标定
7、无人驾驶汽车系统入门(二十二)——使用Autoware实践激光雷达与摄像机组合标定

【番外】:
1、自动驾驶(七十八)---------Apollo之标定模块
2、手眼标定之基本原理

有关相机内参标定,相机和激光雷达联合标定的更多相关文章

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

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

  2. 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 能够在狭小空间内能发挥其工作范围与性能优势,具有全新的设计、小型化的体积、高效的性能、易于集成、便捷的接

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

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

  4. 【华为OD技术面试 | 真八股 】MySQL联合索引,谈springIOC的理解,谈springAOP的理解,Erika和zookeeper等问题 - 2

    文章目录华为OD面试流程1.mysql数据库建了两个字段,且设置了联合索引,如果其中有一个字段为空会出现什么问题?2.谈谈springIOC的理解,有什么好处,解决了什么问题3.谈谈springAOP的理解,切面编程有没有实际应用,有哪些注解,作用是什么,有那些应用场景?4.Erika和zookeeper有了解过吗,作用是什么,主要解决了什么问题5.谈谈JDK、JRE、JVM的理解,区别是什么6.谈谈对泛型的理解7.JVM的组成华为OD面试流程机试:三道算法题,关于机试,橡皮擦已经准备好了各语言专栏,可以直接订阅。性格测试:机试技术一面(本专栏核心)技术二面(本专栏核心)主管面试定级定薪发of

  5. ruby - 如何从两个哈希数组中获取联合/交叉/差异并忽略一些键 - 2

    我想从两个哈希数组中获取并集/交集/差集,例如:array1=[{:name=>'Guy1',:age=>45},{:name=>'Guy2',:age=>45}]array2=[{:name=>'Guy1',:age=>45},{:name=>'Guy3',:age=>45}]...parray1-array2=>[{:name=>"Guy2",:age=>45}]parray2-array1=>[{:name=>"Guy3",:age=>45}]parray1|array2=>[{:name=>"Guy1",:age=>45},{:name=>"Guy2",:age=>45},{:

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

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

  7. 相机内参标定,相机和激光雷达联合标定 - 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成像过程现实物体在相机中的成像过程离不开世界坐标系、相机坐标系、图像坐标系以及像素坐标系,只有理解了这些才能对获取的图像进行准确的分析。成像过程:四个坐标系如下图所示:世界

  8. 相机面试问题总结 - 2

    1,Camera基本工作原理答案:光线通过镜头Lens进入摄像头内部,然后经过IRFilter过滤红外光,最后到达sensor(传感器),senor分为按照材质可以分为CMOS和CCD两种,可以将光学信号转换为电信号,再通过内部的ADC电路转换为数字信号,然后传输给DSP(如果有的话,如果没有则以DVP的方式传送数据到基带芯片baseband,此时的数据格式RawData,后面有讲进行加工)加工处理,转换成RGB、YUV等格式输出。数据流是如何从sensor到APP的?上述描述结束后,在ISP处理后面的阶段,数据会进行分流,分为capture,preview,video等以供后续动作使用。例如

  9. ruby-on-rails - 如何组合重叠的时间范围(时间范围联合) - 2

    我有一个包含多个时间范围的数组:[Tue,24May201108:00:00CEST+02:00..Tue,24May201113:00:00CEST+02:00,Tue,24May201116:30:00CEST+02:00..Tue,24May201118:00:00CEST+02:00,Tue,24May201108:00:00CEST+02:00..Tue,24May201109:00:00CEST+02:00,Tue,24May201115:30:00CEST+02:00..Tue,24May201118:00:00CEST+02:00]我想获得具有重叠时间范围组合的相同数组

  10. ruby-on-rails - 数组合并(联合) - 2

    我有两个数组需要合并,使用Union(|)运算符非常慢..还有其他方法可以完成数组合并吗?此外,数组中填充的是对象,而不是字符串。数组中对象的示例#events.waikato.ac其中source是一小段XML。编辑对不起!“合并”是指我不需要插入重复项。A=>[1,2,3,4,5]B=>[3,4,5,6,7]A.magic_merge(B)#=>[1,2,3,4,5,6,7]了解整数实际上是Article对象,并且Union运算符似乎永远 最佳答案 这是一个对两种合并技术进行基准测试的脚本:使用管道运算符(a1|a2)和使用co

随机推荐