zoukankan      html  css  js  c++  java
  • 针孔相机模型及其标定

    针孔相机模型

    1. 坐标系介绍

    在视觉应用中,总共有四个坐标系需要了解,分别是:像素坐标系(p)、图像坐标系(i)、相机坐标系(c)、世界坐标系(w)。而相机就是将世界坐标系映射到了像素坐标系。

      

    像素坐标系

    图像在相机内部的储存形式类似像素坐标系,如下图所示,其中一个像素的坐标为$(u_{i}, v_{i})$,单位是(像素)

    图像坐标系

    将像素坐标系的中心平移到中心,就得到了图像坐标系,除了原点位置不同,单位也不同,图像坐标系的单位是(m或者mm),坐标系如下图所示:

    设图像坐标系的原点为$O_{i}(u_{0}, v_{0})$,相机感光元件中每个像素点的尺寸为$dx*dy$,两坐标系之间的关系可表示为

    $$egin{cases}u = frac{x}{dx} + u_{0}\v=frac{y}{dy}+v_{0}end{cases}$$

    将其写成矩阵形式为:

    $$egin{bmatrix}u \v end{bmatrix}=egin{bmatrix}frac{1}{dx}&0\0&frac{1}{dy}end{bmatrix}egin{bmatrix}x\yend{bmatrix}+egin{bmatrix}u_{0}\v_{0}end{bmatrix}$$

    将偏移项纳入乘积项,转化为齐次坐标形式:

    $$egin{bmatrix}u\v\1 end{bmatrix}=egin{bmatrix}frac{1}{dx}&0&0\0 &frac{1}{dy}&0\0&0&0end{bmatrix}egin{bmatrix}x\y\1end{bmatrix}+egin{bmatrix}u_{0}\v_{0}\1end{bmatrix}=egin{bmatrix}frac{1}{dx}&0&u_{0}\0&dy&v_{0}\0&0&1end{bmatrix}egin{bmatrix}x\y\1end{bmatrix}$$

    相机坐标系

    相机坐标系的z轴和图像坐标系的z轴重合,x轴和y轴平行且同方向,相机坐标系原点$O_{c}$和图像坐标系原点$O_{i}$连线的距离是焦距$f$(注意这里的$f$单位为m或mm),相机坐标系中的一点$B(x_{c},y_{c},z_{c})$成像到图像坐标系$P(x,y)$,过程如下::

    根据三角形相似可得:

    $$frac{f}{z_{c}}=frac{x}{x_{c}}=frac{y}{y_{c}}$$

    即:

    $$x=frac{fx_{c}}{z_{c}},y=frac{fy_{c}}{z_{c}} $$

    相机坐标系转化为图像坐标系的齐次形式为:

    $$egin{bmatrix}x\y\1end{bmatrix}=egin{bmatrix}frac{f}{z_{c}}&0&0&0\0&frac{f}{z_{c}}&0&0\0&0&frac{1}{z_{c}}&0end{bmatrix}egin{bmatrix}x_{c}\y_{c}\z_{c}\1end{bmatrix}$$

    图像的畸变

    这是相机坐标系到理想的图像坐标系的转化,因为我们默认各个坐标系的变换是线性的。但实际上由于相机镜头中的镜片因为光线的通过产生不规则的折射,总是存在镜头畸变的。畸变的引入使得成像模型中的几何变换关系变为非线性。

    图像的畸变有很多,但通常主要考虑两种:径向畸变和切向畸变。

    径向畸变:正中心位置的畸变最小,随着半径的增大,畸变增大。径向畸变可以分为枕形畸变和桶形畸变

     径向畸变公式为:

    $$egin{cases}x_{dr}=x(1+k_{1}r^{2}+k_{2}r^{4}+k_{3}r^{6})\y_{dr}=y(1+k_{1}r^{2}+k_{2}r^{4}+k_{3}r^{6})end{cases}$$

    其中$(x,y)$为理想坐标,$(x_{dr},y_{dr})$为畸变后的坐标,$r^{2}=x^{2}+y^{2}$

    切向畸变:在透镜与成像平面不平行时就会产生,类似于透视变换。

     

    切向畸变公式为:

     $$egin{cases}x_{dt}=x+2p_{1}xy+p_{2}(r^{2}+2x^{2})\y_{dt}=y+p_{1}(r^{2}+2y^{2})+2p_{2}xyend{cases}$$

    将径向畸变和切向畸变效果叠加,可得:

    $$egin{cases}x_{distorted}=x(1+k_{1}r^{2}+k_{2}r^{4}+k_{3}r^{6})+2p_{1}xy+p_{2}(r^{2}+2x^{2})\y_{distorted}=y(1+k_{1}r^{2}+k_{2}r^{4}+k_{3}r^{6})+p_{1}(r^{2}+2y^{2})+2p_{2}xyend{cases}$$

    $(k_{1},k_{2},k_{3},p_{1},p_{2})$这五个为畸变参数,畸变参数的一般顺序是k1,k2,p1,p2,k3

    世界坐标系

    世界坐标系与相机坐标系坐标轴不一定平行或重合,它们之间可以通过刚体变换互相转换,也就是只改变物体的空间位置(平移)和朝向(旋转),而不改变物体的形状。用旋转矩阵$R$和平移向量$T$可以表示这种变换,如图所示:

    平移矩阵T为:

    $$T=egin{bmatrix}t_{x}\t_{y}\t_{z} end{bmatrix}$$

    因此,世界坐标系转化为相机坐标系的变换为:

    $$egin{bmatrix}x_{c}\y_{c}\z_{c} end{bmatrix}=egin{bmatrix}x_{w}\y_{w}\z_{w}end{bmatrix}+TRightarrowegin{bmatrix}x_{c}\y_{c}\z_{c}\1end{bmatrix}=egin{bmatrix}R & T \0 & 1 end{bmatrix}egin{bmatrix}x_{w}\y_{w}\z_{w}\1 end{bmatrix}$$

    2. 相机的内参和外参

    根据1中几个坐标系的转化,可以得到世界坐标系转化为像素坐标系:

    $$egin{bmatrix}u\v\1end{bmatrix}=egin{bmatrix}frac{1}{dx}&0&u_{0}\0&frac{1}{dy}&v_{0}\0&0&1 end{bmatrix}egin{bmatrix}frac{f}{z_{c}} &0&0&0 \0 & frac{f}{z_{c}}&0&0\0&0&frac{1}{z_{c}}&0 end{bmatrix}egin{bmatrix}R&T \0&1 end{bmatrix}egin{bmatrix}x_{w} \ y_{w} \z_{w} \ 1 end{bmatrix}=underbrace{egin{bmatrix}frac{f_{x}}{z_{c}} & 0&frac{u_{0}}{z_{c}}&0 \0&frac{f_{y}}{z_{c}} & frac{v_{0}}{z_{c}}&0\0&0&frac{1}{z_{c}}&0 end{bmatrix}}_{intrinsics}underbrace{egin{bmatrix}R & T \0 & 1 end{bmatrix}}_{extrinsics}egin{bmatrix}x_{w}\y_{w} \z_{w} \1 end{bmatrix}$$

     注意这里的fx和fy单位是像素。公式中的内参不含畸变参数。

    相机标定

    相机标定的目的就是要得到相机内参(包含畸变参数)和外参。最重要的还是内参(包含畸变参数),因为外参跟摄像机和拍摄物体的相对位置有关,所以不同图像的外参都不一样。

    有了相机内参(包含畸变参数)后,我们就可以对相机拍摄的图像进行畸变校正。

    参考资料:

    https://blog.csdn.net/qq_36342854/article/details/88933308

    https://blog.csdn.net/baidu_38172402/article/details/81949447

    https://blog.csdn.net/heiheiya/article/details/96151958

     

  • 相关阅读:
    获取控件的xy坐标
    你不知道的JavaScript--Item4 基本类型和基本包装类型(引用类型)
    你不知道的JavaScript--Item3 隐式强制转换
    ajax技术基础详解
    git回退到某个历史版本
    jQuery中 $.ajax()方法详解
    Eclipse Java注释模板设置详解
    MySQL中group_concat函数深入理解
    javascript知识详解之8张思维导图
    javascript 事件编程之事件(流,处理,对象,类型)
  • 原文地址:https://www.cnblogs.com/Peyton-Li/p/12468119.html
Copyright © 2011-2022 走看看