当前位置:网站首页>相机标定(标定目的、原理)
相机标定(标定目的、原理)
2022-06-24 06:43:00 【没李不邢】
1.相机标定的目的:
(1)一个就是矫正由于镜头畸变造成的图片的变形,例如,现实中的直线,拍摄成图像后会外凸或内凹,进行相机标定后可以对这种情况进行校正;
(2)另一个是根据拍摄获得的二维图像来重构三维场景,因为标定的过程就是通过一系列的三维点和它对应的二维图像点进行数学变换,求出相机的内参数和外参数。
标定之后的相机,可以进行测距、三维场景的重建等。
2.四个坐标系
相机标定的目的之一是为了建立物体从三维世界到成像平面上各坐标点的对应关系,所以首先要了解以下四个坐标系:
世界坐标系:用户定义的三维世界的坐标系,为了描述目标物在真实世界里的位置以及相机所在的位置而被引入。
相机坐标系:在相机上建立的坐标系,为了从相机的角度描述物体位置而定义,作为沟通世界坐标系和图像/像素坐标系的中间一环。
图像坐标系:为了描述成像过程中物体从相机坐标系到图像坐标系的投影透射关系而引入,方便进一步得到像素坐标系下的坐标。
像素坐标系:为了描述物体成像后的像点在数字图像上(相片)的坐标而引入,是我们真正从相机内读取到的信息所在的坐标系,单位为个(像素数目)。
3.坐标之间的转换

世界坐标系:Xw、Yw、Zw。
相机坐标系: Xc、Yc、Zc。
图像坐标系:x、y。
像素坐标系:u、v。
其中,相机坐标系的Z轴与光轴重合,且垂直于图像坐标系平面并通过图像坐标系的原点,相机坐标系与图像坐标系之间的距离为焦距f。像素坐标系平面u-v和图像坐标系平面x-y重合,但像素坐标系原点位于图中左上角。
3.1世界坐标系到相机坐标系
假设绕x轴旋转(逆时针)


以此类推,绕其它轴旋转(顺时针)


世界坐标系到相机坐标系要6个自由度,除了旋转还要进行平移

3.2相机坐标系转图像坐标系


3.3图像坐标系转像素坐标系

图像坐标系的原点在图像的中央,单位mm。
像素坐标系的原点在图像的左上角,单位是像素Pixel(个)。
dx,dy:是传感器固有的参数,代表每个像素的毫米数。
u0,v0:代表图像坐标系原点相对于像素坐标系的偏移量,单位是像素。


3.4 世界坐标系到像素坐标系转换的全过程
至此,要想通过拍摄到的二维图像重建三维场景,那么就要求得内参M1和外参M2。
3.5张正友标定法




单应性(Homography)变换。可以简单的理解为它用来描述物体在世界坐标系和像素坐标系之间的位置映射关系。对应的变换矩阵称为单应性矩阵。




![]()
如何根据标定图得到单应矩阵?
经过前面一系列的介绍,我们应该大致明白如何根据打印的棋盘标定图和拍摄的照片来计算单应矩阵H。我们来总结一下大致过程。
1. 打印一张棋盘格标定图纸,将其贴在平面物体的表面。
2. 拍摄一组不同方向棋盘格的图片,可以通过移动相机来实现,也可以移动标定图片来实现。
3. 对于每张拍摄的棋盘图片,检测图片中所有棋盘格的特征点(角点,也就是下图中黑白棋盘交叉点,中间品红色的圆圈内就是一个角点,四个对角(红黄蓝绿)是最特别的角点)。我们定义打印的棋盘图纸位于世界坐标系Zw=0的平面上,世界坐标系的原点位于左图棋盘图纸的固定一角(比如下图中黄色点)。像素坐标系原点位于右图图片左上角。

因为棋盘标定图纸中所有角点的空间坐标是已知的,这些角点对应在拍摄的标定图片中的角点的像素坐标也是已知的,如果我们得到这样的N>=4个匹配点对(越多计算结果越鲁棒),就可以根据LM等优化方法得到这个视角下的单应矩阵H。当然计算单应矩阵一般不需要自己写函数实现,OpenCV中就有现成的函数可以调用。
但是,以上只是理论推导,在真实的应用场景中,我们计算的点对中都会包含噪声。比如点的位置偏差几个像素,甚至出现特征点对误匹配的现象,如果只使用4个点对来计算单应矩阵,那会出现很大的误差。因此,为了使得计算更精确,一般都会使用远大于4个点对来计算单应矩阵。另外上述方程组采用直接线性解法通常很难得到最优解,所以实际使用中一般会用其他优化方法,如奇异值分解、Levenberg-Marquarat(LM)算法
通过以上方法求得的单应性矩阵H后,以下是通过H反推相机的内外参



通过上面2.28与2.29得:

可以自行计算B为对角矩阵,所以B只有6个未知数,所以向量b设置6个参数即可



部分图片来自B站视频截图,欢迎交流学习。
强烈建议看这个文章:相机标定之张正友标定法数学原理详解(含python源码) - 知乎
边栏推荐
- 游戏思考14:对cache_server缓冲服务器的问题思考(读云峰博客有感)
- 1. go deep into tidb: see tidb for the first time
- [image segmentation] retinal vessel segmentation based on morphology with matlab code
- 【图像融合】基于伪 Wigner 分布 (PWD) 实现图像融合附matlab代码
- 二分专题训练
- 0 foundation a literature club low code development member management applet (III)
- 内网学习笔记(4)
- 0 foundation a literature club low code development member management applet (6)
- I failed to delete the database and run away
- JVM調試工具-Arthas
猜你喜欢

PIP install XXX on the terminal but no module named XXX on pycharm

软件性能测试分析与调优实践之路-JMeter对RPC服务的性能压测分析与调优-手稿节选

【图像融合】基于伪 Wigner 分布 (PWD) 实现图像融合附matlab代码

MFC使用控制台时 项目路径中不能有空格和中文,否则会报错误 LNK1342 未能保存要编辑的二进制文件的备份副本等

How can genetic testing help patients fight disease?

Spark project Packaging Optimization Practice

6000多万铲屎官,捧得出一个国产主粮的春天吗?
![[MRCTF2020]千层套路](/img/8e/d7b6e7025b87ea0f43a6123760a113.png)
[MRCTF2020]千层套路

【图像融合】基于方向离散余弦变换和主成分分析的图像融合附matlab代码

【小技巧】使用matlab的深度学习工具箱deepNetworkDesigner快速设计
随机推荐
[WordPress website] 5 Set code highlight
使用SystemParametersInfo访问用户界面设置
伦敦金的资金管理比其他都重要
One year since joining Tencent
Graduation season advance technology
0 foundation a literature club low code development member management applet (4)
华为云数据库进阶学习
超宽带脉冲定位方案,UWB精准定位技术,无线室内定位应用
树莓派4B开发板入门
Tencent host security captures Yapi remote code execution 0day vulnerability for wild exploitation. The attack is spreading and can be intercepted by firewall
Functions in setinterval cannot have parentheses
【图像融合】基于像素显着性结合小波变换实现多焦点和多光谱图像融合附matlab代码
Win11笔记本省电模式怎么开启?Win11电脑节电模式打开方法
【图像融合】基于NSST结合PCNN实现图像融合附matlab代码
Kaseya of the United States was attacked by hackers, and 1500 downstream enterprises were damaged. How can small and medium-sized enterprises prevent extortion virus?
大厂不是衡量能力的唯一出路,上财学姐毕业三年的经验分享
Win11分磁盘怎么分?Win11系统怎么分磁盘?
The fund management of London gold is more important than others
Summary of 2022 blue team HW elementary interview questions
bjdctf_2020_babystack