zoukankan      html  css  js  c++  java
  • 针孔相机成像模型

    相机成像模型

    1. 小孔成像

    大部分相机成像原理都可以简化为小孔成像,如下图所示:

    和以前课本上学习的一样,上图中蜡烛透过相机的针孔,在感光器上成倒立的像,这一个简单的模型即为针孔相机的成像模型。基于这个模型,我们最希望解决的问题是:蜡烛在现实世界中的位置和图片中蜡烛像素点之间有着怎样的关系呢?

    2. 四个坐标系

    为了用数学语言来描述针孔相机模型,我们需要建立四个坐标系:世界坐标系,摄像机坐标系,图像物理坐标系和图像像素坐标系。在下图中P是现实世界中物体,P‘是其对应的图片中的像素点,光心O即为相机的针孔处,对应的四个坐标系如下:

    • 世界坐标系:是客观三维世界的绝对坐标系,也称客观坐标系。就是物体在真实世界中的坐标。 世界坐标系是随着物体的大小和位置变化的,单位是长度单位。如图中P点是现实世界中的物体,若以地球中心为原点,便能确定其坐标(P_w(X_w,Y_w,Z_w))
    • 摄像机坐标系:以相机的光心(针孔处)为坐标系的原点,以平行于图像的x和y方向为x轴和y轴,z轴和光轴平行,x, y,z互相垂直,单位是长度单位。如图中以光心O为原点建立的xyz三个坐标轴O(x,y,z)
    • 图像物理坐标系:以主光轴和图像平面交点为坐标原点,x'和y'方向为坐标轴,如图所示,单位是长度单位。如图中以O’为原点,建立的x‘y'坐标轴O'(x',y')
    • 图像像素坐标系:以图像的左上角顶点为坐标原点,u和v方向平行于x'和y'方向,单位是以像素计。一般以图片左上角为原点,图片的宽为x轴,高为y轴。(注意:其他三个坐标系单位是长度单位,只有图像坐标系是像素单位)

    建立好这四个坐标系后,从现实世界中的物体,到图片中的像素点,可以描述为下面几个步骤:

    1. 在世界坐标系中建立物体的坐标

    2. 世界坐标系和摄像机坐标系之间的转换

    3. 摄像机坐标系和图像物理坐标系之间的转换

    4. 图像物理坐标系和图像像素坐标之间的转换

    3. 坐标系转换

    3.1 世界坐标系转换摄像机坐标系

    世界坐标系通过旋转和平移,可以转换为摄像机坐标系。如下图中,P为现实世界中物体,坐标系(x_wy_wz_w)通过旋转和平移能得到坐标系(x_cy_cz_c)

    假设物体P在世界坐标系中的坐标为((X_w, Y_w, Z_w)), 变换到摄像机坐标系后的坐标后为((X_c, Y_c, Z_c)),由于变换过程只涉及到旋转和平移,可以通过旋转矩阵和平移矩阵来描述,根据欧式变换可以得到下面表达式:

    [egin{bmatrix} X_c \ Y_c \ Z_c \ 1 end{bmatrix}=egin{bmatrix} R & t \ 0^T & 1 end{bmatrix} egin{bmatrix} X_w \ Y_w \ Z_w \ 1 end{bmatrix} = L_wegin{bmatrix} X_w \ Y_w \ Z_w \ 1 end{bmatrix} \ ]

    表达式有两点说明下:

    • 其中R为旋转矩阵,一般为3x3矩阵,t为平移向量,一般为3x1矩阵,则L_w为4x4矩阵
    • 其中的坐标中加1,是齐次坐标形式,为了方便矩阵计算

    欧式变换和齐次坐标不了解的参考:

    欧式变换:https://zhuanlan.zhihu.com/p/279198334

    齐次坐标:https://www.zhihu.com/question/59595799

    3.2 摄像机坐标系转换图像物理坐标系

    以O点为中心,可以构建一个下图中的相似三角形(注意图中O'P'的距离虽然不是X‘,想象把P’分别投影到x', y'的三角形依然是相似的),对于这个相似三角形有疑问的可以参考:https://www.edmundoptics.cn/knowledge-center/application-notes/imaging/understanding-focal-length-and-field-of-view/

    根据相似三角形,可以构建如下关系:

    [X' = ffrac{X_c}{Z_c}\ Y' = ffrac{Y_c}{Z_c}\ (X',Y')是图像物理坐标系坐标,(X_c,Y_c,Z_c)是摄像机坐标系坐标,f是相机焦距 ]

    用矩阵表示如下:

    [Z_c*egin{bmatrix} X' \ Y' \ 1 end{bmatrix} = egin{bmatrix} f & 0 & 0 \ 0 & f & 0 \ 0 & 0 & 1 end{bmatrix}egin{bmatrix} X_c \ Y_c \ Z_c end{bmatrix} ]

    3.3 图像物理坐标系转换图像像素坐标系

    图像物理坐标系采用的是长度单位,坐标原点一般是图片中心位置;而图像像素坐标系采用的是像素单位,坐标原点一般是图片左上角位置,如下图所示,因此图像物理坐标系转换成图像像素坐标系需要两步:

    • 根据一个像素占多少长度,将长度单位转换为像素单位
    • 将转换后的像素坐标进行平移,使坐标原点为左上角

    用数学公式描述两个步骤如下:

    [u = frac{X'}{dx} +u_0\ v = frac{Y'}{dy} +v_0\ ]

    上述表达式需要说明下:

    • ((u,v))是图像像素坐标系坐标,((X',Y'))是图像物理坐标系坐标
    • (u_0,v_0)是需要平移的长度,一般为图片宽,高的一半
    • (dx和dy):x方向和y方向的一个像素分别占多少个(可能是小数)长度单位

    用矩阵表示上面关系如下:

    [egin{bmatrix} u \ v \ 1 end{bmatrix} = egin{bmatrix} frac{1}{dx} & 0 & u_0 \ 0 & frac{1}{dy} & v_0 \ 0 & 0 & 1 end{bmatrix}egin{bmatrix} X' \ Y' \ 1 end{bmatrix} ]

    4. 公式汇总

    将上面三步转换过程进行汇总,可以得到如下的关系式:

    [egin{bmatrix} u \ v \ 1 end{bmatrix} = frac{1}{Z_c}egin{bmatrix} frac{1}{dx} & 0 & u_0 \ 0 & frac{1}{dy} & v_0 \ 0 & 0 & 1 end{bmatrix}egin{bmatrix} f & 0 & 0 & 0 \ 0 & f & 0 & 0\ 0 & 0 & 1 & 0 end{bmatrix}egin{bmatrix} R & t \ 0^T & 1 end{bmatrix} egin{bmatrix} X_w \ Y_w \ Z_w \ 1 end{bmatrix} ]

    注意:等式左边第二个矩阵多补了一列0,是为了凑成3x4的矩阵,因为后面欧式变换矩阵是4x4的矩阵

    关系式含义描述如下:

    对于上面最终的表达式,常常会写成不同的形式,其中涉及到的两个概念:相机内参矩阵和外参矩阵,归一化坐标。

    1. 相机内参和外参

    相机焦距f,光心位置(u_0,v_0)等都是相机内部参数,组成的矩阵即为内参矩阵,旋转矩阵R,平移矩阵t等外部参数组成的即为外参矩阵

    上图中内参矩阵的两个矩阵相乘,可以写成一个矩阵:

    [egin{bmatrix} frac{f}{dx} & 0 & u_0 & 0\ 0 & frac{f}{dy} & v_0 & 0\ 0 & 0 & 1 & 0 end{bmatrix} ]

    因此,最终的表达式可以写成:

    [egin{bmatrix} u \ v \ 1 end{bmatrix} = frac{1}{Z_c}egin{bmatrix} frac{f}{dx} & 0 & u_0 & 0\ 0 & frac{f}{dy} & v_0 & 0\ 0 & 0 & 1 & 0 end{bmatrix}egin{bmatrix} R & t \ 0^T & 1 end{bmatrix} egin{bmatrix} X_w \ Y_w \ Z_w \ 1 end{bmatrix} = frac{1}{Z_c}KTegin{bmatrix} X_w \ Y_w \ Z_w \ 1 end{bmatrix}\ K为内参矩阵,T为外参矩阵 ]

    2. 归一化坐标

    上面计算公式里面有一个(frac{1}{Z_c})(Z_c)是相机坐标系下物体的Z轴坐标,当得到相机坐标系下的坐标后,常会归一化坐标

    [egin{bmatrix} X_c \ Y_c \ Z_c end{bmatrix} longrightarrow egin{bmatrix} frac{X_c}{Z_c} \ frac{Y_c}{Z_c} \ 1 end{bmatrix} ]

    因此最终表达式可以总结为:

    [egin{bmatrix} u \ v \ 1 end{bmatrix} = Kfrac{1}{Z_c}Tegin{bmatrix} X_w \ Y_w \ Z_w \ 1 end{bmatrix}\ K为内参矩阵,frac{1}{Z_c}为坐标归一化系数,T为外参矩阵 ]

    5. 归纳总结

    了解了上面一大段的推算和概念,我们可以总结下针孔相机成像模型整个过程:

    1. 首先,世界坐标系下有一个三维点(P_w)
    2. 若世界坐标系到相机坐标系下的变换为旋转矩阵 R 和平移向量t 组成的变换矩阵 T,那么(P_w)在相机坐标系下的坐标为 (P_c = RP_w+ t = T*P_w)
    3. 此时的(P_c)三个分量分别是(X_c, Y_c, Z_c),我们需要把它投影到归一化平面Z=1上,这样我们得到了相机坐标系下(P_c)的归一化坐标 (P_c' = (X_c/Z_c, Y_c/Z_c, 1))
    4. 用内参矩阵乘K以归一化坐标就得到了像素坐标 (P_{uv} = K*P_c')

    参考:https://mp.weixin.qq.com/s/TdMU67oMmbQCw-H7sEYHDQ

  • 相关阅读:
    安装Flume的时候出现File Channel transaction capacity cannot be greater than the capacity of the channel capacity -解决方案 摘自网络
    在linux中配置环境变量
    CentOS中安装JAVA环境
    怎么在linux 用nginx做代理 配置.net core
    Another app is currently holding the yum lock; waiting for it to exit.. yum被锁定无法使用
    jQueryUI modal dialog does not show close button (x) JQueryUI和BootStrap混用时候,右上角关闭按钮显示不出图标的解决办法
    C#中 如何处理 JSON中的特殊字符
    php面向对象精要(3)
    php面向对象精要(2)
    php面向对象精要(1)
  • 原文地址:https://www.cnblogs.com/silence-cho/p/15023822.html
Copyright © 2011-2022 走看看