相机内参与外参分析,从建模,推导到求解:Camera Extrinsics and Intrinsics.

  • I. 坐标系的建立,Coordinate System.
  • II. 转换关系,Transformation.
  • III. From the world coord to the sensor coord.
    • 3.1 Extrinsics,相机的外参
      • 3.1.1 从世界坐标系到相机坐标系
    • 3.2 Intrinsics,相机的内参
      • 3.2.1 从相机到图像平面
      • 3.2.2 从图像平面到传感器
      • 3.2.3 传感器平面的非线性误差
  • IV. 总结.

一些内容来自于:Camera Extrinsics and Intrinsics. Link: Extrinsics, Intrinsics.

本文的坐标变换,矩阵变换完全建立在单应性坐标 homogeneous coordinate和单应性变换的基础上,包括了基础的刚体变换,以及投影变换等。具体的描述参见:homogeneous单应性坐标的定义,以及不同投影,仿射,相似,刚体变换矩阵的关系和自由度分析。

I. 坐标系的建立,Coordinate System.

主要讲从世界坐标系到图像平面坐标系以及到相机的传感器感光元件上的坐标系定义。注意:下面开始,所有的坐标点的含义均遵循下面的命名规则:

  • 用ooo表示的是object,world,也就是世界坐标系下面的坐标或者转换矩阵,3D;
  • 用kkk表示camera,相机坐标系下的坐标或者变换矩阵;
  • 用ccc表示image plane,图像平面坐标系下的坐标点或者变换矩阵;
  • 用sss表示sensor,传感器平面坐标系下的坐标点或者变换矩阵;
  • 一个投影变换矩阵,写成bHa^bH_abHa​或者写成bPa^bP_abPa​,它的含义为:从a坐标系投影到b坐标系下的homo矩阵H或者投影矩阵P,都是可以的。也可以说成,将a坐标系下的点投影到b坐标系下的transformation变换矩阵。

因此, sHc{^sH_c}sHc​表示从image plane图像平面投影到sensor传感器平面的投影矩阵,以此类推,cHk{^cH_k}cHk​表示从camera相机坐标系投影到image plane图像平面的投影矩阵,kHo{^kH_o}kHo​表示从object/ world世界坐标系投影到camera相机坐标系下的投影矩阵,也可以称之为homo矩阵。

根据表述规则,罗列出不同坐标系下的坐标点的表示方法。

  1. World/ Object coordinate system.
    So=[X,Y,Z]T,oforobject.S_{o}=[X, Y, Z]^T,\ o \ for \ object. So​=[X,Y,Z]T, o for object.
  2. Camera coordinate system.
    Sk=[kX,kY,kZ]T,kforcamera.S_{k}=[{^kX}, {^kY}, {^kZ}]^T,\ k \ for \ camera. Sk​=[kX,kY,kZ]T, k for camera.
  3. Image (plane) coordinate system.
    Sc=[cx,cy]T,cforimageorplane.S_c=[^cx,{^cy}]^T, \ c \ for \ image \ or \ plane. Sc​=[cx,cy]T, c for image or plane.
  4. Sensor coordinate system. This has some distortion and nonlinearity from image coord to sensor coord.
    Ss=[sx,sy]T,sforsensor.S_s=[^sx, {^sy}]^T, \ s \ for \ sensor. Ss​=[sx,sy]T, s for sensor.

II. 转换关系,Transformation.

从目标的世界坐标系3D,转换到相机坐标系3D,然后转换到图像平面坐标系2D,最后转换到传感器坐标系2D。转换的矩阵关系为:
[sxsy1]=sHccHkkHo[XYZ1]\left[ \begin{matrix} ^sx \\ ^sy \\ 1 \end{matrix} \right] = {^sH_c} {^cH_k} {^kH_o}\left[\begin{matrix} X\\ Y\\ Z\\ 1 \end{matrix}\right] ⎣⎡​sxsy1​⎦⎤​=sHc​cHk​kHo​⎣⎢⎢⎡​XYZ1​⎦⎥⎥⎤​
其中,image plane和camera system的原点,在x和y方向是重合的,只是说image plane的原点坐标相较于camera origin向z轴平移了c。因此,图像平面的原点可以表示为相机平面的z轴平移。
kOc=k[0,0,−c]T^kO_c={^k[0, 0, -c]^T} kOc​=k[0,0,−c]T
下图展示了图像平面与相机平面的原点关系。

III. From the world coord to the sensor coord.

下面分析从世界坐标系,通过一系列转换,到图像和传感器平面坐标的关系。其中,目标到相机是外参,相机与图像平面,传感器平面,是内参。

他们之间的变换关系,对应的刚体变换到投影变换等不同方式。具体如下图:

3.1 Extrinsics,相机的外参

Extrinsic parameters describe the pose of the camera in the world.

3.1.1 从世界坐标系到相机坐标系

world coordinate to camera coordinate.
从世界坐标系到相机坐标系的转换是可逆的。知道了外参,就知道转换的矩阵。求逆就可以相互转换。
是目标点的3D位置与相机点的3D位置的相互关系所组成的homo矩阵。包括的目标位置和相机位置的一个平移和旋转关系。是一个刚体变换。只是旋转和平移。6个自由度。XpX_pXp​为投影的目标点的世界坐标系下的3D坐标。
kXp=kHXp{^kX_p} = {^kH}X_p kXp​=kHXp​
其中,kH{^kH}kH矩阵为:
kH=[R−RXo0T1]{^kH}= \left[ \begin{matrix} R &-RX_o \\ 0^T&1 \end{matrix} \right] kH=[R0T​−RXo​1​]
XoX_oXo​为camera在世界坐标系下的坐标。通过kH^kHkH矩阵,将世界坐标系下的点XpX_pXp​投影到相机坐标系下的kXP^kX_PkXP​。
下图是对上面的一个小的总结,手写的推导。

3.2 Intrinsics,相机的内参

Intrinsic parameters describe the mapping of the scene in front of the camera to the pixels in the final image (sensor).
其中,可逆的部分是从图像平面到sensor平面以及传感器的偏差,这里表述为model deviation。这两部分是可逆的,都是2D与2D直接的变换。而对于相机到图像,这是一个中心投影,由3D到2D的一个变换。在这个过程中,缺少了深度信息,因此,是不可逆的变换。

3.2.1 从相机到图像平面

相机坐标系到图像平面坐标系,camera coordinate to image plane。
这里采用了相似三角形的方式,来分析相机上的一点PPP和图像平面上的一点pˉ\bar ppˉ​。其中,x,yx, yx,y采用的是相似三角形的变换,而zzz上所有的点,即深度信息,全是mapping到一个平面上,均为常数ccc,这个常数,也可以设置为focal length,焦距。

因此,得到了图像平面上的一点cxpˉ^cx_{\bar p}cxpˉ​​。
cxpˉ=cPkkXp^cx_{\bar p} = {^cP_k}{^kX_p} cxpˉ​​=cPk​kXp​
其中,cPk^cP_kcPk​为:
cPk=[c0000c000010]^cP_k=\left[ \begin{matrix} c &0 &0&0 \\ 0&c&0&0\\ 0&0&1&0 \end{matrix} \right] cPk​=⎣⎡​c00​0c0​001​000​⎦⎤​
对kH{^kH}kH和cPk^cP_kcPk​做合并处理,就能够直接得到从世界坐标系投影到图像平面的矩阵cP^cPcP。这里表示从世界坐标系投影到相机坐标系,通过kH{^kH}kH;然后,在从相机投影到图像平面,通过cPk{^cP_k}cPk​。
cP=cPkkH=[c0000c000010][R−RXo0T1]^cP={^cP_k}{^kH}=\left[ \begin{matrix} c &0 &0&0 \\ 0&c&0&0\\ 0&0&1&0 \end{matrix} \right] \left[ \begin{matrix} R &-RX_o \\ 0^T&1 \end{matrix} \right] cP=cPk​kH=⎣⎡​c00​0c0​001​000​⎦⎤​[R0T​−RXo​1​]
其中,由于cPk{^cP_k}cPk​的最后一列全为0,对最后一列做简化,得到calibration matrix ck^ckck:
ck=[c000c0001]^ck=\left[ \begin{matrix} c &0 &0 \\ 0&c&0\\ 0&0&1 \end{matrix} \right] ck=⎣⎡​c00​0c0​001​⎦⎤​
得到最后的投影矩阵cP^cPcP:
cP=ck[R−RXo]=ckR[I−Xo]3×4^cP={^ck} \left[ \begin{matrix} R &-RX_o \end{matrix} \right] ={^ck}R \left[ \begin{matrix} I &-X_o \end{matrix} \right] _{3\times4} cP=ck[R​−RXo​​]=ckR[I​−Xo​​]3×4​
因此,我们能够将任何的世界坐标的点XpX_pXp​,投影到图像平面cx^cxcx:
cx=ckR[I−Xo]Xp^cx={^ck}R \left[ \begin{matrix} I &-X_o \end{matrix} \right] X_p cx=ckR[I​−Xo​​]Xp​

3.2.2 从图像平面到传感器

image plane to sensors. 很多时候,传感器坐标系的初始原点(0,0)(0,0)(0,0)不是平面的中心点。有一个小的位移。一般还包括了剪切和尺度的变换。因此,从图像平面到传感器的变换矩阵sHc^sH_csHc​为:
sHc=[1sxH01+myH001]^sH_c=\left[ \begin{matrix} 1 &s &x_H \\ 0&1+m&y_H\\ 0&0&1 \end{matrix} \right] sHc​=⎣⎡​100​s1+m0​xH​yH​1​⎦⎤​
将sHc^sH_csHc​矩阵与calibration matrix矩阵ck^ckck结合,得到:
K=sHcck=[1sxH01+myH001][c000c0001]=[ccsxH0c(1+m)yH001]K={^sH_c}{^ck}=\left[ \begin{matrix} 1 &s &x_H \\ 0&1+m&y_H\\ 0&0&1 \end{matrix} \right] \left[ \begin{matrix} c &0 &0 \\ 0&c&0\\ 0&0&1 \end{matrix} \right] \\=\left[ \begin{matrix} c &cs&x_H \\ 0&c(1+m)&y_H\\ 0&0&1 \end{matrix} \right] K=sHc​ck=⎣⎡​100​s1+m0​xH​yH​1​⎦⎤​⎣⎡​c00​0c0​001​⎦⎤​=⎣⎡​c00​csc(1+m)0​xH​yH​1​⎦⎤​
其中,矩阵KKK是仿射变换,包含5个参数,自由度为5:相机的常数,也就是焦距ccc, 原点xH,yHx_H,y_HxH​,yH​,尺度因子mmm,剪切因子sss。
sx=KR[I−Xo]X^sx=KR \left[ \begin{matrix} I &-X_o \end{matrix} \right] X sx=KR[I​−Xo​​]X
下图是一个对相机内参的总结,包括了上述讲的几个方面。

3.2.3 传感器平面的非线性误差

上面的所有设定都只考虑了线性的误差,在真实世界里面,具有镜头的畸变,传感器的不平整性。包括径向畸变和切向畸变。需要用一些参数来进行校正。这个矩阵为aHs^aH_saHs​:
aHs(x)=[10Δx(x,q)01Δy(x,q)001]^aH_s(x)= \left[ \begin{matrix} 1 &0 &\Delta_x(x,q)\\ 0&1&\Delta_y(x,q)\\ 0&0&1 \end{matrix} \right] aHs​(x)=⎣⎡​100​010​Δx​(x,q)Δy​(x,q)1​⎦⎤​
最后得到非线性误差后的在传感器上的图像坐标:
ax=aHssx{^ax}={^aH_s}{^sx} ax=aHs​sx

IV. 总结.

可以将整个投影看做两部分。

  1. 仿射变换,将世界坐标下的点XpX_pXp​投影到传感器坐标系下为点sx^sxsx:
    sx=PXp^sx=PX_p sx=PXp​
  2. 非线性变换,考虑传感器的非线性误差:
    ax=aHs(x)sx^ax={^aH_s}(x){^sx} ax=aHs​(x)sx
  3. 整个参数量为11个,包括了外参6个,内参5个

下图对本文所描述的外参和内参做了总结。

如果有用,记得点赞

最本质的相机内参intrinsics与外参extrinsics分析,从建模,推导到求解相关推荐

  1. 浅析相机相关坐标系的相互转换(世界坐标系、相机坐标系、图像坐标系、像素坐标系、内参矩阵、外参矩阵、扭转因子)【相机标定计算机视觉】

    最近在网上看到了很多关于坐标系转换的帖子,但是其内容很多都是相互转载(甚至还有一部分是错误的),同时大部分的文章内容都是告诉你四种坐标系间的相互转化的数学公式,看完之后很多时候还是不知所云,本文意在深 ...

  2. 【图像处理】像素坐标系、像平面坐标系、相机坐标系、世界坐标系、内参矩阵、外参矩阵

    [图像处理]像素坐标系.像平面坐标系.相机坐标系.世界坐标系.内参矩阵.外参矩阵 像素坐标系 像平面坐标系 相机坐标系 世界坐标系 像素坐标系<=>像平面坐标系 像素坐标系<=> ...

  3. 内参矩阵、外参矩阵、旋转矩阵、平移矩阵、单应矩阵、本征矩阵、基础矩阵

    自己在单目结构光系统.双单目结构光系统及双目相机系统学习的过程中接触到如标题所列的各种矩阵,总感觉理解不到位,现在特总结下,方便日后查阅及修正自己的理解. 自己已经总结了单目相机各坐标系的变换,链接如 ...

  4. 相机和livox激光雷达外参标定:ROS功能包---livox_camera_lidar_calibration 介绍

    相机和livox激光雷达外参标定:ROS功能包---livox_camera_lidar_calibration 相机与激光雷达外参标定 功能包介绍 环境配置及功能包安装 功能包节点 准备内容 1 l ...

  5. 相机和livox激光雷达外参标定:ROS功能包---livox_camera_lidar_calibration 使用方法

    相机和livox激光雷达外参标定:ROS功能包---livox_camera_lidar_calibration 使用方法 livox_camera_lidar_calibration 功能包介绍 使 ...

  6. 相机与激光测距仪的外参标定(提升相机标定)

    文章目录 Abstract I Introduction II Basic Equations A Geometric Constraints III Solving Extrinsic calibr ...

  7. 无标定物体环境下,高分辨率雷达与相机的像素级外参标定

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 标题:Pixel-level Extrinsic Self Calibration of High R ...

  8. 无目标场景下高分辨率激光雷达和相机的像素级外参自标定

    文章:Pixel-level Extrinsic Self Calibration of High Resolution LiDAR and Camera in Targetless Environm ...

  9. 相机内参和相机外参和标定

    在单目视觉系统中,最重要的参数之一是相机的内参坐标,它反映了环境信息到图像信息之间的映射关系,一个精确的内参系数是通过单目相机对观景进行观测和测量的首要保证,相机内参系统与相机感光片位置,镜头位置等有 ...

最新文章

  1. 一步一步深入spring(6)--使用基于XML配置的spring实现的AOP
  2. 【杂谈】一招,同时可视化18个开源框架的网络模型结构和权重
  3. 采购订单相关Table
  4. docker-compose部署常用服务
  5. MS SQL巡检系列mdash;mdash;检查重复索引
  6. 久玩玉之魂服务器维护,玉之魂1级到57级挂机心得详情分享
  7. rider连接mysql数据库_GitHub - alchemystar/Rider: 文件数据库
  8. 输入序列连续的序列检测
  9. 为什么云服务器没西南的_去年“双11“我买的那台云服务器
  10. 网络基础知识 快速计算子网掩码的2种方法
  11. Cmake确实应该用到的时候再学
  12. VMware vSphere功能特性比较 6.5 6.7 7.0
  13. 要成为linux网站运维工程师必须要掌握的技能
  14. Rust常用编程概念之变量和可变性
  15. Facebook采取赤裸裸抄袭的战略 争夺用户
  16. [Asp.Net WebApi]WebApi入门
  17. U盘删除文件时提示“文件或目录损坏且无法读取”的解决方法
  18. 【移动应用开发】2022/2023 年 8 大移动应用程序开发趋势
  19. 走进诺奖大师系列:科斯(Ronald H.Coase)
  20. 双向绑定原理(个人理解)

热门文章

  1. 果断型性格分析,果断型人格的职业发展
  2. 交换机和路由器到底有什么区别???
  3. 小程序报错 Invalid regular expression: invalid group specifier name
  4. 1.4 计算机网络的定义和分类
  5. WEB安全——CS中Beacon的使用
  6. 恰星V3S投影仪好不好?适合学生党购入么?
  7. Linux 环境下配置远程jupyter notebook server
  8. 你的安卓手机为什么会卡-Android混乱生态的缺位者:推送
  9. 2021-06-10-APP PUSH推送机制
  10. 第七天 位置参数 变量运算if case || find locate compress