文章目录

  • 一、相机模型
    • 1、简介
    • 2、针孔相机模型
  • 二、相机内参
    • 1.相机坐标-图像坐标
    • 2.图像坐标-像素坐标
    • 3.相机坐标-像素坐标
  • 三、外参矩阵
    • 1.世界坐标-相机坐标
    • 2.世界坐标-像素坐标
  • 四、畸变系数
    • 1.畸变矫正

一、相机模型

1、简介

初中物理我们就学过小孔成像问题,这也是我们对相机的最初认识。
仅靠一个小孔进光量太小,拍摄到的照片会很暗,所以实际的相机会使用凸透镜来聚光。但是凸透镜的光学模型过于复杂,通常会简化成针孔相机模型来解释成像过程并进行建模。
这时出现了一个疑问,小孔成像成倒立的像,而照片的方向却是正常的?原因在于相机内部会对所成的像再进行一次镜像,所以用户看到的图像就跟人眼看到的方向一致了,我们可以把这一过程等效成把成像平面放到相机前方,示意图如下(之后为了直观,本文所说的成像平面均为镜像过后的等效成像平面)。

列出几个重要名词,通过下图可以简单建立下概念,后边再细品

  • 世界坐标系 o w − x w − y w − z w o_w-x_w-y_w-z_w ow​−xw​−yw​−zw​:世界坐标系不是一个有明确定义的坐标系,你可以任意指定一个在当前场景下固定不变的坐标系作为世界坐标系。
  • 相机坐标系 o c − x c − y c − z c o_c-x_c-y_c-z_c oc​−xc​−yc​−zc​:相机坐标系习惯上这样定义:以相机光心为坐标系原点;假设你在手持相机,那么你的右手边是x轴正方向,下边是y轴正方向,相机前方是z轴正方向,也就是说,拍摄的远处物体距离为正。
  • 图像坐标系 o i − x i − y i o_i-x_i-y_i oi​−xi​−yi​:图像坐标系的原点就位于感光芯片的中心(感光芯片是位于镜头背后的用于成像的小板子),x、y轴方向和相机坐标系x、y相同,不同的是图像坐标系是二维坐标系没有z轴
  • 像素坐标系 o p − x p − y p o_p-x_p-y_p op​−xp​−yp​:像素坐标系也位于成像平面上,是图像坐标系通过平移和缩放的到的。值得注意的是不同软件或者库对于像素坐标 ( u , v ) (u,v) (u,v)的定义不一样,比如OpenCV中把 u u u定义为行坐标, v v v定义为列坐标,与我们这里的定义就不太一样。所以使用前需要统一像素坐标的定义

2、针孔相机模型

P c P_c Pc​点是相机坐标系下坐标, P i P_i Pi​是图像坐标系下坐标, Z c Z_c Zc​是 P c P_c Pc​点距离光心的距离, f f f是镜头的焦距, X c X_c Xc​和 X i X_i Xi​是点在 x x x轴投影距离原点的距离,是正值。
根据相似三角形原理可得:

Z c f = − X c X i = − Y c Y i ( 1 ) \frac{Z_{c}}{f}=-\frac{X_{c}}{X_i}=-\frac{Y_{c}}{Y_i} (1) fZc​​=−Xi​Xc​​=−Yi​Yc​​(1)
回忆前文提到的等效成像平面,我们这里再强化一下这个概念,将 P ′ P' P′镜像到镜头前方

于是可以将(1)式中的负号去掉
Z c f = X c X i = Y c Y i ( 2 ) \frac{Z_{c}}{f}=\frac{X_{c}}{X_i}=\frac{Y_{c}}{Y_i} (2) fZc​​=Xi​Xc​​=Yi​Yc​​(2)

二、相机内参

内参矩阵描述的是相机坐标系下的坐标到像素坐标的变换关系

1.相机坐标-图像坐标

利用 ( 2 ) (2) (2)式,很容易可以得出二者的转换关系。
{ X i = f Z c X c Y i = f Z c Y c ( 3 ) \left\{ \begin{aligned} X_i=\frac{f}{Z_{c}}X_{c}\\ Y_i=\frac{f}{Z_{c}}Y_{c} \end{aligned} \right. (3) ⎩ ⎨ ⎧​Xi​=Zc​f​Xc​Yi​=Zc​f​Yc​​(3)

2.图像坐标-像素坐标

图像坐标是实连续值,而像素坐标是离散的正值,经过简单的平移和尺度缩放,很容易得到二者之间的转换关系如下:
{ u = α X i + c x v = β Y i + c y ( 4 ) \left\{ \begin{aligned} u=\alpha X_i+c_x\\ v=\beta Y_i+c_y \end{aligned} \right. (4) {u=αXi​+cx​v=βYi​+cy​​(4)

α \alpha α、 β \beta β与实际传感器的物理尺寸有关,单位为 p i x e l / m pixel/m pixel/m ; X i X_i Xi​、 Y i Y_i Yi​单位为 m m m; c x c_x cx​、 c y c_y cy​单位为 p i x e l pixel pixel。

3.相机坐标-像素坐标

用 ( 3 ) (3) (3)式,将 X i , Y i X_i,Y_i Xi​,Yi​用 X , Y , Z X,Y,Z X,Y,Z替换,得到像素坐标与相机坐标系下坐标的关系
{ u = f x X c Z c + c x v = f y Y c Z c + c y ( 5 ) \left\{ \begin{aligned} u=f_x \frac{X_{c}}{Z_{c}}+c_x\\ v=f_y \frac{Y_{c}}{Z_{c}}+c_y \end{aligned} \right.(5)\\ ⎩ ⎨ ⎧​u=fx​Zc​Xc​​+cx​v=fy​Zc​Yc​​+cy​​(5)
为了表达更加漂亮,引入齐次坐标
( u v 1 ) = 1 Z c ( f x 0 c x 0 f y c y 0 0 1 ) ( X c Y c Z c ) ( 6 ) \left( \begin{matrix} u\\ v\\ 1 \end{matrix} \right) =\frac{1}{Z_c} \left( \begin{matrix} f_x&0&c_x\\ 0&f_y&c_y\\ 0&0&1\\ \end{matrix} \right) \left( \begin{matrix} X_{c}\\ Y_{c}\\ Z_{c} \end{matrix} \right)(6) ​uv1​ ​=Zc​1​ ​fx​00​0fy​0​cx​cy​1​ ​ ​Xc​Yc​Zc​​ ​(6)
Z c ( u v 1 ) = K P c ( 7 ) Z_c \left( \begin{matrix} u\\ v\\ 1 \end{matrix} \right)=KP_{c}(7) Zc​ ​uv1​ ​=KPc​(7)
为了避免混淆,一些参考材料会使用 s s s来代替 Z c Z_c Zc​,注意他们意思是一样的

思考:

  • 观察(6)式可以发现,由于 1 Z c \displaystyle\frac{1}{Z_c} Zc​1​的存在,对相机坐标同时乘一个常数后的到的像素坐标是相同的。也就是说从光心发出的射线上的点,在图片里对应的像素坐标是相同的,即点的深度在投影过程中被丢失了。不用特殊手段,单目相机无法得到深度值。但如果给定距离,像素点对应的 P c P_{c} Pc​就可唯一确定。
  • 再重新处理一下(6)式
    ( u v 1 ) = ( f x 0 c x 0 f y c y 0 0 1 ) ( X c / Z c Y c / Z c 1 ) ( 8 ) \left( \begin{matrix} u\\ v\\ 1 \end{matrix} \right)= \left( \begin{matrix} f_x&0&c_x\\ 0&f_y&c_y\\ 0&0&1\\ \end{matrix} \right) \left( \begin{matrix} X_c/Z_c\\ Y_c/Z_c\\ 1 \end{matrix} \right)(8) ​uv1​ ​= ​fx​00​0fy​0​cx​cy​1​ ​ ​Xc​/Zc​Yc​/Zc​1​ ​(8)
    可以认为像素坐标是对相机前方1处平面上的点采样和量化的过程,这个平面称为归一化平面,平面上点的坐标称为归一化坐标

至此,我们推出了想要的结果!这个只和相机内部参数有关的矩阵 K K K即为相机的内参矩阵
K = ( f x 0 c x 0 f y c y 0 0 1 ) ( 7 ) K=\left( \begin{matrix} f_x&0&c_x\\ 0&f_y&c_y\\ 0&0&1\\ \end{matrix} \right)(7) K= ​fx​00​0fy​0​cx​cy​1​ ​(7)
有的时候还会引入一个 λ \lambda λ参数,来描述交轴误差(感光芯片的 X , Y X,Y X,Y轴没有完全垂直)
( f x λ c x 0 f y c y 0 0 1 ) \left( \begin{matrix} f_x&\lambda&c_x\\ 0&f_y&c_y\\ 0&0&1\\ \end{matrix} \right) ​fx​00​λfy​0​cx​cy​1​ ​

注意:

  • 感光芯片的最小单元一般不是严格的正方形,所以得到的 f x f_x fx​和 f y f_y fy​不一定相等。并且理论上 f x 、 f y 、 c x 、 c y f_x、f_y、c_x、c_y fx​、fy​、cx​、cy​应该是整数,但是最优化算出来的结果不一定是整数,影响不大。
  • K一般会由相机生产商提供,如果没有提供则可以通过单目棋盘格张正友标定法确定,这个过程被称作内参标定
  • 实际使用中交轴误差好像很少被考虑

三、外参矩阵

外参矩阵描述的是世界坐标系下坐标与相机坐标系下坐标的转换关系,众所周知,两个坐标系之间的刚体变换可以通过旋转和平移描述,这里其实也没啥好说的。

1.世界坐标-相机坐标

( X c Y c Z c ) = [ R t ] ( X w Y w Z w 1 ) ( 8 ) \left( \begin{matrix} X_{c}\\ Y_{c}\\ Z_{c} \end{matrix} \right)=[R \ \ \ t] \left( \begin{matrix} X_{w}\\ Y_{w}\\ Z_{w}\\ 1 \end{matrix} \right) \ (8) ​Xc​Yc​Zc​​ ​=[R   t] ​Xw​Yw​Zw​1​ ​ (8)
P c = [ R t ] P w ~ P_c=[R \ \ \ t]\tilde{P_w} Pc​=[R   t]Pw​~​
这里的 P w ~ \tilde{P_w} Pw​~​是齐次坐标, P w ~ = [ P w 1 ] T \tilde{P_w}=[P_w \ \ 1]^T Pw​~​=[Pw​  1]T, R R R是 3 × 3 3\times3 3×3的旋转矩阵, t t t是 3 × 1 3\times1 3×1的平移向量, R R R, t t t称为相机的外参数。

这个地方如果不理解的,可以去搜索刚体变换,我这里就不写了

2.世界坐标-像素坐标

Z c P u v = Z c ( u v 1 ) = K [ R t ] P w ~ ( 9 ) Z_cP_{uv}=Z_c \left( \begin{matrix} u\\ v\\ 1 \end{matrix} \right)= K[R\ \ t]\tilde{P_w}(9) Zc​Puv​=Zc​ ​uv1​ ​=K[R  t]Pw​~​(9)

四、畸变系数

畸变系数也是相机内参的一部分,非理想情况下,存在以下问题:

  1. 透镜自身的形状会对光线传播产生影响——径向畸变

  2. 机械组装过程中,透镜和成像平面不可能完全平行——切向畸变

其中切向畸变影响很小;径向畸变最为常见,尤其是在照片的边缘上(可以拿出手机,把自己的脸调整到边缘上,看看有没有变形),效果如下:

1.畸变矫正

如果相机畸变比较明显,那么获得图像坐标后,要使用畸变系数进行矫正,数学模型如下:
径向:
X i c = X i ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) Y i c = Y i ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) X_{ic}=X_i(1+k_1r^2+k_2r^4+k_3r^6)\\ Y_{ic}=Y_i(1+k_1r^2+k_2r^4+k_3r^6) Xic​=Xi​(1+k1​r2+k2​r4+k3​r6)Yic​=Yi​(1+k1​r2+k2​r4+k3​r6)
切向:
X i c = X i + 2 p 1 X i Y i + p 2 ( r 2 + 2 X i 2 ) Y i c = Y i + p 1 ( r 2 + 2 Y i 2 ) + 2 p 2 X i Y i X_{ic}=X_i+2p_1X_iY_i+p_2(r^2+2X_i^2)\\ Y_{ic}=Y_i+p_1(r^2+2Y_i^2)+2p_2X_iY_i Xic​=Xi​+2p1​Xi​Yi​+p2​(r2+2Xi2​)Yic​=Yi​+p1​(r2+2Yi2​)+2p2​Xi​Yi​

不同镜头畸变模型不太一样,比如鱼眼镜头和广角镜头都有,这个地方我平时用不到,引用一篇比较完整的总结常用相机投影及畸变模型(针孔|广角|鱼眼),感兴趣的可以去学习。

相机内参、外参、畸变系数简介相关推荐

  1. 计算机视觉——棋盘格标定法获取相机内参外参

    计算机视觉--棋盘格标定法获取相机内参外参 一.原理 相机标定目的 相机标定的输入 相机标定的输出 相机标定策略 相机拍摄图像变换过程 相机内参 相机外参 二.环境 三.数据集 四.运行结果与分析 角 ...

  2. 相机的内参会改变吗_相机内参外参及成像过程

    前段时间有人问我怎么由点的世界坐标计算计算对应的像素坐标,我详细的推导了下,现在把整个过程写篇博客.虽然网上有很多相关的文章,但是我可能会写的更详细些. 一.小孔成像模型 1.基本概念及公式 如图所示 ...

  3. JointCalib-雷达与相机的外参标定

    0. 简介 作为自动驾驶行业最头疼的问题之一,外参标定一直以来受到广泛的关注,尤其是最常使用的激光雷达与相机的外参标定.之前在文章:3D雷达与相机的标定方法详细教程与多传感器融合感知 --传感器外参标 ...

  4. Ubuntu18系统下采集点云数据(速腾16线激光雷达)与ZED 2 相机进行外参标定(Matlab的LCC工具箱)

    这篇是最近的实验记录:在Ubuntu系统下读取点云数据并在rviz中显示,录制自己的rosbag数据包并离线播放,将rosbag文件转化为pcd格式导入MATLAB中,和双目相机进行外参标定. 目录 ...

  5. 安卓手机标定相机IMU外参过程

    本文阐述安卓手机标定相机IMU外参过程,包括以下主要流程: 1. 制作标定板 2. 单独标定单目相机的外参 3. 单独标定IMU的外参 4. 相机IMU的联合标定 1.为什么要进行相机标定? 在图像测 ...

  6. 多激光雷达与相机的外参快速精准标定(arxiv 2021)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨paopaoslam 来源丨 泡泡机器人SLAM 标题:Fast and Accurate Ex ...

  7. 激光雷达和相机的外参标定

    激光雷达和相机的外参标定 我两年前做的本科毕设课题是激光雷达与相机的外参标定,最近抽空整理了一下当时完成的标定工具,这篇博客的目的也是来介绍一下这个标定工具(目前已经开源). 介绍 在当时的研究现状( ...

  8. velo2cam_calibration——最新最准确的激光雷达Lidar和相机Camera外参标定算法实现

    目录 写在前面 参考资料 算法原理 准备工作 开始使用 检测结果 总结 写在前面 因为实验需求,要实现相机和雷达之间的融合,因此需要完成相机内参标定和雷达与相机外参标定. 相机内参标定使用ros自带的 ...

  9. 基于点云强度的3D激光雷达与相机的外参标定

    本文提出一种新颖的方法,可以对3D lidar和带有标定板的相机进行全自动的外参标定,提出的方法能够从lidar的每一帧点云数据中利用强度信息提取标定板的角点.通过激光的反射强度和棋盘格颜色之间的相关 ...

  10. Halcon内参外参畸变矫正

    相机畸变矫正 CameraParameters := [0.00367057,-809.403,2.20647e-006,2.2e-006,1136.84,1064.02,2592,1944] Cam ...

最新文章

  1. 设置应用图标badge(徽章)
  2. 从MongoDB迁移到ES后,我们减少了80%的服务器
  3. JavaFX 之窗口大小自由拉伸(四)
  4. Junit单元测试时提示:Method should have no parameters
  5. CF1325D:Ehab the Xorcist(位运算)
  6. 2016/1/4 学习笔记 数据类型转换 注释 语句
  7. 华为收购港湾核心业务 6年恩怨尘埃落定
  8. Qemu Tracing
  9. python将列表转换成集合_python 将DataFrame转换为List
  10. java二级考纲_二级JAVA程序设计考试大纲
  11. matlab二阶系统设置参数,一阶和二阶系统响应的matlab制作
  12. 什么是组播-网工必会的组播基础概念详解
  13. 综合项目之闪讯破解(一)之 闪讯拨号用户名核心算法
  14. 最小二乘法以及正交最小二乘(OLS)的推导与简单比较
  15. requests的基本使用以及爬虫的基本介绍:QQ机器人制作基础
  16. Java--JSON嵌套JSON中带‘\‘字符的解决方式
  17. C#適應練習:幾種常見設計模式的實現
  18. 两个计算机系统安装,如何一个电脑装两个系统|一个电脑装2个系统方法
  19. 认识Excel的第三天(字数满格自动换行、插入一行/列单元格、修改边框样式)
  20. vscode自动保存代码,自动按照eslint和standard规范格式化代码设置

热门文章

  1. 如何将Excel中的数据复制到CAD中?
  2. LaTeX系列 |3、常用LaTeX表格模版
  3. DIY智能插座(一) -- 硬件搭建
  4. java面试题想涨薪时使用
  5. 智能仪器仪表行业数字化供应链管理系统:加速企业智慧供应链平台转型
  6. python的print使用
  7. 电商后台管理---Vue实战
  8. jQuery 输入框的onblur事件
  9. 上期所API头文件四、ThostFtdcTraderApi.h--交易相关组件的定义(源代码6.3.19版)
  10. 双时推迟格林函数的定义