视觉相机笔记

参考文献:

  1. 《视觉SLAM十四讲–从理论到实践》
  2. 《计算机视觉–模型、学习和推理》
  3. https://www.jianshu.com/p/b4479e746025
  4. https://my.oschina.net/abcijkxyz/blog/787659
  5. https://www.cnblogs.com/zyly/p/9373991.html

1 相机模型

相机将三维世界中的坐标点(单位米)映射到二维图像平面(单位像素)的过程可以使用小孔成像进行描述。相机标定的目的即是获取摄像机的内参和外参矩阵,建立起三维世界和二维图像平面的对应关系,涉及如下坐标系的变化:
世界坐标系 --> 相机坐标系 --> 图像坐标系 --> 像素坐标系

1.1 小孔成像模型

小孔成像模型能够将三维世界的物体投影到二维成像平面,通过该模型可描述相机坐标系 --> 图像坐标系的坐标转换。

  • 相机坐标系(三维坐标系)
    相机的中心被称为焦点或者光心,以焦点O为原点和坐标轴x,y,z组成了相机坐标系,z指向相机的前方,x向右,y向下
  • 图像坐标系(二维坐标系)
    成像平面中,以成像平面的中心O′为原点和坐标轴x′,y′组成了图像坐标系。
    在这里插入图片描述
    现实世界的空间点P,经过小孔O投影后,落在成像平面上,成像点为P’。
    P的坐标为[X,Y,Z]T;P’为[X’,Y’]T,并且设物理成像平面到小孔的距离为f(f是焦距),那么可以知道像点p在相机坐标系中的坐标是P’=[X’,Y’,Z’]T(Z’ = f)。
    在这里插入图片描述
    由上图根据三角形的相似关系,可以得到如下公式:
    Z f = X X ′ = Y Y ′ \frac{Z} {f}\quad = \quad {X\over X'} = \quad {Y\over Y'} fZ=XX=YY
    整理后,
    { X ’ = f X Z Y ’ = f Y Z Z ′ = f \begin{cases} X’ = f\frac XZ \\ Y’ = f\frac YZ \\ Z' = f \end{cases} X=fZXY=fZYZ=f
    上式描述了点P和它的像平面的空间关系。不过,在相机中,我们最终获得的是一个个的像素,这需要在成像平面上对像进行采样和量化。为了描述传感器将感受到的光线转换成图像像素的过程,设在物理成像平面上固定着一个像素平面o-u-v。像素平面得到P’的像素坐标[u, v]T。
    { u = α X ′ + c x v = β Y ′ + c y \begin{cases} u = \alpha X' + c_x \\ v = \beta Y' + c_y \\ \end{cases} {u=αX+cxv=βY+cy
  • 像素坐标系
    原点o’位于图像的左上角,u轴向右与x轴平行,v轴向下与y轴平行。像素坐标系与成像平面之间,相差了一个缩放和一个远点的平移。设像素坐标在u轴上缩放了 α \alpha α倍,在v轴上缩放了 β \beta β倍,同时原点平移了[cx, cy]T。上式实现了图像坐标系到像素坐标系间的转换。
    经计算,得到:
    { u = f x X Z + c x v = f y Y Z + c y \begin{cases} u = f_x \frac XZ + c_x \\ v = f_y \frac YZ + c_y \\ \end{cases} {u=fxZX+cxv=fyZY+cy
    其中, f x = α f , f y = β f f_x=\alpha f, f_y=\beta f fx=αf,fy=βf
    将上面的公式写为齐次坐标的形式:(齐次坐标原因可以参见为什么要引入齐次坐标)
    ( u v 1 ) = 1 Z ( f x 0 c x 0 f y c y 0 0 1 ) ( X Y Z ) \begin{pmatrix} u \\ v \\ 1 \end{pmatrix} = \frac 1Z \begin{pmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} X \\ Y \\ Z \end{pmatrix} uv1=Z1fx000fy0cxcy1XYZ
    上面提到对于齐次坐标,缩放一个常量因子仍然是相等的,将Z挪到左边
    Z ( u v 1 ) = ( f x 0 c x 0 f y c y 0 0 1 ) ( X Y Z ) Z\begin{pmatrix} u \\ v \\ 1 \end{pmatrix} = \begin{pmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} X \\ Y \\ Z \end{pmatrix} Zuv1=fx000fy0cxcy1XYZ
    中间的量组成的矩阵称为相机的内参矩阵K,
    K = ( f x 0 c x 0 f y c y 0 0 1 ) K = \begin{pmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{pmatrix} K=fx000fy0cxcy1
    K有4个未知数和相机的构造相关,fx,fy和相机的焦距,像素的大小有关;cx,cy是平移的距离,和相机成像平面的大小有关。
    相机的内参在出厂之后是固定的,不会在使用过程中发生变化,求解内参矩阵的过程也是标定的过程。
    有内参,自然也有对应的外参。内存矩阵实现了相机坐标系 --> 图像坐标系 --> 像素坐标系的转换,那么外参矩阵实现的肯定是世界坐标系 --> 相机坐标系的转换。
    相机坐标系的P在世界坐标系中的坐标Pw,根据相机的当前位姿,可得到两者的对应关系。相机的位姿由它的旋转矩阵R和平移像量t来描述。
    P = R P w + t P=RP_w+t P=RPw+t
    其中,R是一个3×3的旋转矩阵,t是3×1的平移向量。
    将旋转矩阵R和偏移矩阵T合起来即得外参矩阵即为:
    ( R 3 ∗ 3 t 3 ∗ 1 0 T 1 ) \begin{pmatrix} R_3*3 & t_3*1\\ 0^T & 1\\ \end{pmatrix} (R330Tt311)
    内外参组合到一起,即完成了世界坐标系到像素坐标系间的转换。

1.2 畸变

径向畸变

x0=x(1+k1r2+k2r4+k3r6)
y0=y(1+k1r2+k2r4+k3r6)

切向畸变

x0=2p1xy+p2(r2+2x2)+1
y0=p2(r2+2y2)+2p2xy+1

径向畸变和切向畸变模型中一共有5个畸变参数,在Opencv中他们被排列成一个5×1的矩阵,依次包含k1、k2、p1、p2、k3,经常被定义为Mat矩阵的形式,如Mat distCoeffs=Mat(1,5,CV_32FC1,Scalar::all(0));这5个参数就是相机标定中需要确定的相机的5个畸变系数。求得这5个参数后,就可以校正由于镜头畸变引起的图像的变形失真。

2 单目相机标定

2.1 张正友标定的opencv实现

相机标定的目的是获取摄像机的内参和外参矩阵(同时会得到每一幅标定图像的旋转和平移矩阵),内参和外参系数可以对之后相机拍摄的图像就进行矫正,得到畸变相对很小的图像。
张正友于1998年在论文:"A Flexible New Technique fro Camera Calibration"提出了基于单平面棋盘格的相机标定方法。该方法使用简单实用性强。
在opencv的samples下tutorial_code/calib3d/camera_calibration/目录下有标定实现的示例代码。

3 双目相机

https://www.cnblogs.com/zyly/p/9373991.html

4 深度相机

  1. 深度图像也叫距离影像,是指将从图像采集器到场景中各点的距离(深度)值作为像素值的图像。获取方法有:激光雷达深度成像法、计算机立体视觉成像、坐标测量机法、莫尔条纹法、结构光法。

  2. 点云:当一束激光照射到物体表面时,所反射的激光会携带方位、距离等信息。若将激光束按照某种轨迹进行扫描,便会边扫描边记录到反射的激光点信息,由于扫描极为精细,则能够得到大量的激光点,因而就可形成激光点云。点云格式有*.las ;*.pcd; *.txt等。
    点云里面存的是相对相机原点的世界坐标。
    深度图像经过坐标转换可以计算为点云数据;有规则及必要信息的点云数据可以反算为深度图像。

  3. 深度转化为点云
    深度图转为点云说白了其实就是坐标系的变换:图像坐标系-->世界坐标系。变换的约束条件就是相机内参,公式很简单:
    在这里插入图片描述

,其中x,y,z是点云坐标系,x’,y’是图像坐标系,D为深度值。
在进行上述转换之前必须对x’,y’进行undistort运算,即便如此最终得到的点云数据还是存在误差的。棋盘标定出的内参本身是带有误差的,它是一种近似逼近值,也就是说它不能真实的映射相机内部结构。

to be continued

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值