相机的内外参与相机标定
相机的内外参与相机标定
我们所生活的现实世界是一个三维的世界,人类生活期间,已经能够熟练地估计周围物体的深度及定位,但是,现在的照相机一般都只能拍摄二维图像,场景从三维变到二维的时候,一个最重要的信息,深度,就丢失了,在只是为了观赏的时候,一个二维的图像也是足够的,如果想做导航,定位及其它3D 重建等应用的时候,这个深度信息及物体之间的相对关系,距离就显得很重要了,如何从二维图像,估计出真实的三维世界,也是计算机视觉一个比较重要的任务,由此发展出多视几何,计算几何等学科。
相机的内外参估计,是几何测量的基础,相机的内外参,构建了三维世界坐标系到图像坐标系的变换关系,也就是完成了一个三维坐标到二维坐标的映射。相机的内外参,对我们理解相机成像模型也有很大的帮助。
我们先给出如下的定义:
- 世界坐标系, Pw=(xw,yw,zw)P_w = (x_w, y_w, z_w)Pw=(xw,yw,zw), 原点为 OwO_wOw,这个原点可以是三维世界的任意一个点
- 相机坐标系, Pc=(xc,yc,zc)P_c = (x_c, y_c, z_c)Pc=(xc,yc,zc), 原点为 OcO_cOc,一般把相机的原点设置在相机的光心处
- 图像坐标系, Pi=(ui,vi,1)P_i = (u_i, v_i, 1)Pi=(ui,vi,1), 原点为 OiO_iOi,一般把图像的左上角设为图像坐标系的原点
相机外参
世界坐标系的一个点 PwP_wPw,如果以相机作为参考系,相机原点在世界坐标系中的坐标为 OcO_cOc,则该点的坐标就变成了 Pw−CP_w - CPw−C,CCC 表示世界坐标系的原点与相机坐标系原点之间的偏移量,这个比较好理解,我们以二维平面坐标为例,如果二维坐标的原点为 (0, 0),那么在二维坐标系中的一个点为 (2, 3),如果相机的原点就在 (2, 3),那么以相机作为参考,该点的坐标就是 (0, 0),所以世界坐标系中的一个点在相机坐标系中有一个平移的关系。
另外,由于相机本身在三维坐标系中,会发生不同角度的旋转,就是我们常说的 pitch, yaw, roll,所以相机坐标系的三个坐标轴与世界坐标系的三个坐标轴,会存在三个夹角,所以相机坐标系中的一个点与世界坐标系中的一个点的关系满足如下的式子:
Pc=R(Pw−C)P_c = \mathbf{R}(P_w - C) Pc=R(Pw−C)
上式中的 R\mathbf{R}R 表示一个旋转矩阵,CCC 表示世界坐标系的原点与相机坐标系原点之间的偏移量,这两个量构成了相机的外参,将世界坐标系与相机坐标系联系起来了。
相机内参
接下来,我们再看一下相机的内参,相机的内参主要表示相机坐标系到图像坐标系的映射,在相机坐标系中,真实世界的一个点还是一个三维的点,Pc=(xc,yc,zc)P_c = (x_c, y_c, z_c)Pc=(xc,yc,zc),但是投影到图像坐标系之后,深度消失了,也就是 zcz_czc 消失了,只剩下 xc,ycx_c, y_cxc,yc,假设相机镜头的焦距为 fff,在小孔成像模型中,像平面就在焦距 fff 处,根据简单的三角关系,我们可以推出:
ui=fxczcvi=fyczcu_i = f \frac{x_c}{z_c} \quad v_i = f \frac{y_c}{z_c} ui=fzcxcvi=fzcyc
上面的式子说明了相机坐标系与图像坐标系存在一个尺度的变化,这个尺度和点的物距有关,这个式子也很好的解释了为什么小孔成像中会有近大远小的关系。
不过,上面的式子,像平面的原点是在像平面与主光轴的交点处,也就是图像的中心,我们一般设定的图像原点在图像的左上角,为了适配这种关系,可以给上面的式子再加一个平移量,则上式变为:
ui=fxczc+puvi=fyczc+pvu_i = f \frac{x_c}{z_c} + p_u \quad v_i = f \frac{y_c}{z_c} + p_v ui=fzcxc+puvi=fzcyc+pv
上面的式子换成矩阵形式:
zc[uivi1]=[f0pu0fpv001][xcyczc]z_c \begin{bmatrix} u_i \\ v_i \\ 1 \end{bmatrix} = \begin{bmatrix} f & 0 & p_u \\ 0 & f & p_v \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x_c \\ y_c \\ z_c \end{bmatrix} zc⎣⎡uivi1⎦⎤=⎣⎡f000f0pupv1⎦⎤⎣⎡xcyczc⎦⎤
写成一个更紧凑的形式:
zcPi=KPcz_c P_i = \mathbf{K}P_c zcPi=KPc
上面这个式子描述了相机坐标系到图像坐标系的映射关系,zcz_czc 表示一个点在相机坐标系下的深度,K\mathbf{K}K 表示相机内参矩阵
投影矩阵
现在,我们有了相机的外参,表示世界坐标系到相机坐标系的变换,也有了相机的内参,表示相机坐标系到图像坐标系的变换,那么将内外参联合起来,就可以得到世界坐标系到图像坐标系的映射:
zcPi=KPc=KR(Pw−C)z_c P_i = \mathbf{K} P_c = \mathbf{K}\mathbf{R}(P_w - C) zcPi=KPc=KR(Pw−C)
为了写成一个更加紧凑的形式,引入齐次坐标,将世界坐标系写成 Pw=(xw,yw,zw,1)P_w = (x_w, y_w, z_w, 1)Pw=(xw,yw,zw,1),则上述式子可以表示成:
zcPi=[KR−KRC]Pw=HPwz_c P_i = \begin{bmatrix} \mathbf{K}\mathbf{R} & - \mathbf{K}\mathbf{R} C \end{bmatrix} P_w = \mathbf{H} P_w zcPi=[KR−KRC]Pw=HPw
上式的 H\mathbf{H}H 是一个 3×43 \times 43×4 的投影矩阵,可以表示成:
H=KR[I−C]\mathbf{H} = \mathbf{K}\mathbf{R} \begin{bmatrix} \mathbf{I} & -C \end{bmatrix} H=KR[I−C]
K\mathbf{K}K 就是相机内参矩阵,R\mathbf{R}R 是相机外参中的旋转矩阵,CCC 是平移量,上面的内参矩阵 K\mathbf{K}K 是理想的小孔成像模型,如果考虑到实际情况,更一般的内参矩阵会考虑到装配误差,像素的长宽不一致等问题,内参矩阵更一般的形式如下所示:
K=[axspx0aypy001]\mathbf{K} = \begin{bmatrix} a_x & s & p_x \\ 0 & a_y & p_y \\ 0 & 0 & 1 \end{bmatrix} K=⎣⎡ax00say0pxpy1⎦⎤
其中,
ax=fdxay=fdya_x = \frac{f}{dx} \quad a_y = \frac{f}{dy} ax=dxfay=dyf
上式将尺度由实际的 mm 转换成像素为单位,dx,dy 表示单个像素的长宽值,px,pyp_x, p_ypx,py 也表示实际的像素个数
相机标定
为了得到相机的外参,内参,根据上面的表达式,可以通过精确地测量三维世界的坐标点和图像上的坐标点,建议对应关系,再求解线性方程,从而获得投影矩阵,然后再通过矩阵分析,获得相机的内参,外参,这种方法的缺陷就是需要知道精确的三维坐标,这个在实际使用的时候不太方便,在实际使用的时候,一般都是用张正友标定法,这个方法的具体细节后面可以找个时间单独讲,这里就大概介绍一下基本的流程,这个方法已经集成到 OpenCV 里了。
- 准备一个标定板,比如黑白棋盘格,测量棋盘格格子的尺寸
- 对需要标定的相机,从各个角度拍摄一组图像
- 对获取的图像提取角点信息,获取角点在图像上的坐标,调用函数 cv2.findChessboardCorners
- 进一步获取更精确的角点坐标,调用函数 cv2.cornerSubPix
- 调用 OpenCV 的函数进行内外参的计算,调用函数 cv2.calibrateCamera
- 最后会返回四组参数:mtx, dist, rvecs, tvecs
- mtx 内参矩阵
- dist 畸变系数
- rvecs 外参的旋转矩阵
- tvecs 外参的平移量
参考
CMU 计算摄影课 http://graphics.cs.cmu.edu/courses/15-463/
多视图几何基础——深入理解相机内外参数 https://zhuanlan.zhihu.com/p/54139614
相机标定的原理及实现 https://blog.csdn.net/weixin_43843780/article/details/89294131
相机的内外参与相机标定相关推荐
- ICRA 2023 | 最新激光雷达-相机联合内外参标定,一步到位!
点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 今天自动驾驶之心很荣幸邀请到石头,为大家分享ICRA 2023最新的激光雷达-相机的联合标定方法,可同时标定内 ...
- 相机投影原理、相机模型中的坐标系统以及标定方法(转载)
文章目录 0 引言 1 相机投影中的坐标系及其转换关系 1.1 世界坐标系与相机坐标系 1.2 相机坐标系与图像坐标系:称为摄像机模型以及投影矩阵 1.3 图像坐标系与像素坐标系 1.4 从世界坐标系 ...
- 相机模型-鱼眼模型/鱼眼镜头标定基本原理及实现(2)
问题: 1 广角/超广角与鱼眼摄像机,角度界限 2 畸变模型中radtan畸变模型与鱼眼畸变模型在小于150范围是否都时能适用. (同数据,拟合模型不同,,参数结果不同,不欠拟合和过拟合就可) 3 ...
- ORBBEC(奥比中光)AstraPro相机在ROS2下的标定与D2C(标定与配准)
文章目录 1.rgb.depth相机标定矫正 1.1.标定rgb相机 1.2.标定depth相机 1.3.rgb.depth相机一起标定(效果重复了,但是推荐使用) 1.4.取得标定结果 1.4.1. ...
- ros --- 双目相机内参与外参标定
ros --- 双目相机内参与外参标定 小觅相机直接获取参数 手动重新标定 1. 双目相机内外参标定 生成标定板 录制 stereo_calibra.bag 标定 标定结果 标定验证 2. 双目 + ...
- 相机成像模型、相机内参、外参、以及相机标定
看了一圈各个平台讲解相机模型.相机标定的文章,很多只是简单罗列几个公式,其中的细节都没说明,本着学习的出发点写下这篇文章,希望能给初学者解惑.本文主要讲解相机模型,一步步推导从世界坐标系到图像坐标系的 ...
- 一款支持大恒相机、IDS相机、普通USB相机和机械手的标定工具
最近做了一款相机的标定软件,可以用来标定本软件支持的相机和机械手坐标系的关系.目前软件支持的相机有大恒USB相机,IDS的uEye网口相机,普通的USB相机.其中镜面靶标其实就是一种特定规则形状的标定 ...
- 极线的绘制(已知相机的内外参数,极线几何)
极线几何与立体视觉 目标: 极限几何的约束网上有很多资料,但是大多数是理论知识和一些推导.但是在具体的应用中,**常常拿极限约束来判断相机的位姿是否准确,对于这个介绍相对较少.**本博客将介绍在一直相 ...
- Ubuntu20.04 ROS读取basler相机图像步骤。MATLAB2021b标定basler单目相机
运行环境:Ubuntu20.04(64-Bit) ROS版本:Noetic 网卡型号:Realtek RTL 8156外置网卡 相机型号:acA 1920-25gc (GigE接口) 驱动版本:pyl ...
最新文章
- 调试来自于逐飞的MM32F3277移植有MicroPython开发板
- 计算机四级嵌入式真题,2014年3月计算机四级嵌入式工程师真题试题及答案
- 第二章kNN分类算法sorted函数
- ubuntu 下安装 VIM 依赖vim-common错误
- 想成为程序员的话,这些书单必不可少——算法篇
- nginx location 在配置中的优先级
- scala字符串的拉链操作_在Scala中对字符串进行操作
- 2. 性能测试中常见术语集合
- mysql命令_MySql常用命令
- 【华为云技术分享】ArcFace简介
- java absolute_Java Path isAbsolute()用法及代码示例
- Jenkins 学习总结(9)—— Jenkins 有哪些替代方案?
- tomcat启动之后,Chrome浏览器可以访问,IE不行(IE无法访问8080 端口)
- JAVA实现简单的FTP服务器
- python framework jdon_python – Django Rest Framework和JSONField
- MyBatis3与Spring3的整合配置(初级篇)
- Linux下安装AliSQL(MySQL)及相关环境配置
- LaTex制作中文简历模板_PART 1
- 【winui3】轻量笔记本应用
- 河南省软考报名时间成绩查询河南省教育考试院河南省人事考试网报名入口
热门文章
- ubuntu 终端显示英文,桌面环境显示中文方法
- Xceed Words for .NET转换和页眉/页脚功能
- (已解决)ModuleNotFoundError: No module named ‘pycocotools‘
- 淘宝二维码对网店推广的好处
- linux php cpu,理解Linux CPU负载和 CPU使用率
- 上传图片直接显示图片操作
- 通过PowerShell管理Office 365的网站
- USB-CDC-ECM 类设备之USB2.0接口100M以太网芯片 SR9900(A)
- 树莓派4B开机自启动Python程序,发送WIFI-IP至指定邮箱
- 【2】Kubernetes集群安装