摄像机通过成像透镜将三维场景投影到摄像机二维像平面上,这个投影可用成像变换描述,即摄像机成像模型。摄像机成像模型有不同描述方式,本节首先介绍机器视觉中的常用坐标系,然后介绍摄像机的线性模型和非线性模型。

  1. 图像坐标系、摄像机坐标系和世界坐标系
  2. 针孔成像模型
  3. 非线性模型

1,图像坐标系、摄像机坐标系和世界坐标系

摄像机采集的图像在计算机内为MxN数组,M行N列的图像中的每一个像素的数值即是图像点的亮度。如下图所示,在图像上定义直角坐标系u、v,每一像素的坐标\((u,v)\)分别是该像素在数组中的列数与行数。所以,\((u,v)\)是以像素为单位的图像坐标系

由于\((u,v)\)只表示像素位于数组中的列数与行数,并没有用物理单位表示出该像素在图像中的位置。因此需要再建立以物理单位(如毫米)表示的图像坐标系。该坐标系以图像内某一点\(O_1\)为原点,X轴和Y轴分别与u、v轴平行,如上图所示。其中\((u,v)\)表示以像素为单位的图像坐标系的坐标,\((X,Y)\)表示以毫米为单位的图像坐标系的坐标。在X、Y坐标系中,原点\(O_1\)定义在摄像机光轴与图像平面的交点,该点一般位于图像中心处,但由于某些原因,也会有些偏离,若\(O_1\)在u、v坐标系中坐标为\((u_0, v_0)\),每一个像素在X轴与Y轴方向上的物理尺寸为dX、dY,则图像中的任意一个像素在两个坐标系下的坐标有如下关系:

\( \left\{\begin{matrix} u = \frac{X}{dX} + u_0 \\ v = \frac{Y}{dY} + v_0 \end{matrix}\right. \)

为以后使用方便,用齐次坐标与矩阵形式将上式表示为

\(\begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = \begin{bmatrix} \frac{1}{dX} \ 0 \ u_0 \\ 0 \ \frac{1}{dY} \ v_0 \\ 0 \ 0 \ 1 \end{bmatrix} \begin{bmatrix} X \\ Y \\ 1 \end{bmatrix} \)

摄像机成像几何关系可下图表示,其中O点成为摄像机光心,x轴和y轴与图像的X轴和Y轴平行,z轴为摄像机光轴,它与图像平面垂直。光轴与图像平面的交点即为图像坐标系的原点,由点O与x、y、z轴组成的直角坐标系称为摄像机坐标系。\(OO_1\)为摄像机焦距。

由于摄像机可安放在环境中的任意位置,在环境中选择一个基准坐标系来描述摄像机的位置,并用它描述环境中任何物体的位置,该坐标系称为世界坐标系。它由\(X_w\)、\(Y_w\)、\(Z_w\)轴组成。摄像机坐标系与世界坐标系之间的关系可以用旋转矩阵R和平移向量t来描述。因此,空间中某一点P在世界坐标系与摄像机坐标系的齐次坐标如果分别是\(X_w=(X_w, Y_w, Z_w, 1)^T\)与\(x = (x, y, z, 1)^T\),则存在如下关系:

\(\begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} = \begin{bmatrix} R \ t \\ 0^T \ 1 \end{bmatrix} \begin{bmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{bmatrix} = M_2\begin{bmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{bmatrix} \)

其中,\(R \)为\(3 \times 3\)正交单位矩阵;\(t\)为三维平移向量;\(0 = (0, 0, 0)^T\);\(M_2\)为\(4 \times4 \)矩阵

2,针孔成像模型

针孔成像模型又称为线性摄像机模型。空间任何一点P在图像中的成像位置可以用针孔成像模型近似表示,即任何点P在图像中的投影位置p,为光心O与P点的连线OP与图像平面的交点。这种关系也称为中心射影或透视投影(perspective projection)。由比例关系有如下关系式:

\(\left\{\begin{matrix} X = \frac{fx}{z} \\ Y = \frac{fy}{z} \end{matrix}\right. \)

其中,\((X,Y)\)为p点的图像坐标;\((x, y, z)\)为空间点P在摄像机坐标系下的坐标,\(f\)为\(xy\)平面与图像平面的距离,一般称为摄像机的焦距。用齐次坐标和矩阵表示上述透视投影关系

\(s\begin{bmatrix} X \\ Y \\ 1 \end{bmatrix} = \begin{bmatrix} f \ 0 \ 0 \ 0 \\ 0 \ f \ 0 \ 0 \\ 0 \ 0 \ 1 \ 0 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} = P \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} \)

其中,s为一比例因子,P为透视投影矩阵。将第一节中的矩阵公式代入上式,得到以世界坐标系表示的P点坐标与其投影点p的坐标\((u,v)\)的关系

\(s\begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = \begin{bmatrix} \frac{1}{dX} \ 0 \ u_0 \\ 0 \ \frac{1}{dY} \ v_0 \\ 0 \ 0 \ 1 \end{bmatrix} \begin{bmatrix} f \ 0 \ 0 \ 0 \\ 0 \ f \ 0 \ 0 \\ 0 \ 0 \ 1 \ 0 \end{bmatrix} \begin{bmatrix} R \ t \\ 0^T \ 1 \end{bmatrix} \begin{bmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{bmatrix} = \begin{bmatrix} a_x \ 0 \ u_0 \ 0 \\ 0 \ a_y \ v_0 \ 0 \\ 0 \ 0 \ 1 \ 0 \end{bmatrix} \begin{bmatrix} R \ t \\ 0^T \ 1 \end{bmatrix} \begin{bmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{bmatrix} = M_1 M_2 X_w = MX_w \)

其中,\(a_x = f / dX\)为u轴上尺度因子,或称为u轴上归一化焦距;\(a_y=f / dY\)为v轴上的尺度因子,或成为v轴上归一化焦距;\(M\)为\(3 \times 3\)矩阵,成为投影矩阵;\(M_1\)由\(a_x\)、\(a_y\)、\(u_0\)、\(v_0\)决定,由于这四个参数只与摄像机内部参数有关,称这些参数为摄像机内部参数;\(M_2\)由摄像机相对于世界坐标系的方位决定,称为摄像机外部参数。确定某一摄像机的内外参数,称为摄像机标定

由上式可知,如果已知某空间点P的图像点p的位置\((u,v)\),即使已知摄像机的内外参数,\(X_w\)也是不确定的。事实上,由于\(M\)是\(3 \times 4 \)不可逆矩阵,当已知\(M\)和\((u,v)\)时,消去z只可得到关于\(X_w\)、\(Y_w\)、\(Z_w\)的两个线性方程,由着两个线性方程组成的方程组即为射线OP的方程,也就是说,投影点为p的所有点均在该射线上。当已知图像点p时,由针孔成像模型,任何位于射线OP上的空间点的图像都是p点。因此,该空间点是不能唯一确定的。

3,非线性模型

实际上,由于实际的镜头并不是理想的透视成像,而是带有不同程度的畸变,使得空间点所成的像并不在线性模型所描述的位置(X, Y),而是在受到镜头失真影响而偏移的实际像平面坐标(X', Y')

\( \left\{\begin{matrix} X=X'+\delta x \\ Y = Y' +\delta y \end{matrix}\right. \)

其中,\( \delta x\)和\(\delta y\)是非线性畸变值,它与图像点再图像中的位置有关。理论上镜头会同时存在径向畸变和切向畸变。但一般来讲切向畸变比较小,径向畸变的修正量由距图像中心的径向距离的偶次幂多项式模型来表示

\(\left\{\begin{matrix} \delta x = (X'-u_0)(k_1 r^2+k_2 r^4 + \cdots \\ \delta y = (Y'-v_0)(k_1 r^2 + k_2 r^4 + \cdots \end{matrix}\right. \)

其中,\(u_0, v_0\)是主点位置坐标的精确值,而

\(r^2 = (X'-u_0)^2 + (Y'-v_0)^2 \)

表明X方向和Y方向的畸变相对值\(\delta x / X, \delta y / Y\)与径向半径的平方成正比,即在图像边缘处的畸变较大。对一般机器视觉,一阶径向畸变已足够描述非线性畸变,即省略上式中大于等于4的高次项。

线性模型参数\(\alpha _x\)、\(\alpha _y\)、\(u_0\)、\(v_0\)与非线性畸变参数\(k_1\)和\(k_2\)一起构成了摄像机非线性模型的内部参数。

摄像机模型 (Camera Model)的更多相关文章

  1. thinkphp模型层Model、Logic、Service讲解

    thinkphp模型层Model.Logic.Service讲解 时间:2014-08-24 15:54:56   编辑:一切随缘   文章来源:php教程网 已阅读:771 次       js特效 ...

  2. Scikit-learn:模型评估Model evaluation

    http://blog.csdn.net/pipisorry/article/details/52250760 模型评估Model evaluation: quantifying the qualit ...

  3. 图标跟着摄像机(Camera)orthographicSize的值改变大小

    默认摄像机(Camera)orthographicSize默认大小为51 #region //滚轮滑动,大地图放大缩小 ) { if (screenView_1Main.myEquipSearch.i ...

  4. 盒子模型(Box Model)

    盒子模型(Box Model) ■ 盒子模型——概念 在网页设计中常用的属性名:内容(content),填充(padding),边框(border),边界(margin),CSS 盒子模式都具备这些属 ...

  5. 使用 Jackson 树模型(tree model) API 处理 JSON

    http://blog.csdn.net/gao1440156051/article/details/54091702 http://blog.csdn.net/u010003835/article/ ...

  6. css盒模型(Box Model)

    所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用. CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和 ...

  7. HTML和CSS的盒子模型(Box model)

    本文作为属性篇的最后一篇文章, 将讲述HTML和CSS的关键—盒子模型(Box model). 理解Box model的关键便是margin和padding属性, 而正确理解这两个属性也是学习用css ...

  8. OpenCV —— 摄像机模型与标定

    这种理论看的已经够多了,感觉应用价值不大(矫正畸变图像还凑合,用摄像机测距神马的...) 有始有终吧,简单把内容梳理一下 针孔  摄像机模型 —— 过于理想(不能为快速曝光收集足够的光线) 透镜可以聚 ...

  9. ORM之模型对象Model

    模型对象Model Odoo的模型对象在odoo模块的models.py文件中,最基础的对象是BaseModel; Odoo的模型对象有三个:AbstractModel.Model.Transient ...

随机推荐

  1. 多线程学习-基础(五)sleep()和yield()的区别(理论)

    一.sleep()和yield()的区别 (1)sleep()使当前线程进入停滞状态(即阻塞状态),所以执行sleep()的线程在指定的时间内不会被执行: (2)yield()只是使当前线程从运行状态 ...

  2. easyui 展开缩起

    1.引用jquery-easyui-1.4.4/datagrid-detailview 2.增加属性 view: detailview, detailFormatter: function (rowI ...

  3. DataGridView增加全选列

    最近的一个winform的项目中,碰到datagridview控件的第一列添加全选的功能,通常这个功能,有两种实现方式:1. 为控件添加DataGridViewCheckBoxColumn来实现,但是 ...

  4. Mybatis环境搭建中的案例分析 及 如果自己编写DAO接口的实现类

    Mybatis环境搭建中的案例分析public static void main (String[] args) throws Exception { //读配置文件 //第一个: 使用类加载器,只能 ...

  5. (原创)Codeforces Round #550 (Div. 3) D. Equalize Them All

    D. Equalize Them All time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  6. loj #2021. 「AHOI / HNOI2017」大佬

    #2021. 「AHOI / HNOI2017」大佬   题目描述 人们总是难免会碰到大佬.他们趾高气昂地谈论凡人不能理解的算法和数据结构,走到任何一个地方,大佬的气场就能让周围的人吓得瑟瑟发抖,不敢 ...

  7. uoj#453. 【集训队作业2018】围绕着我们的圆环(线性代数+递推)

    题面 传送门 题解 我对线代一无所知 如果下面有啥说错的地方请说出来省的我一辈子都搞不明白 如果你没看懂以下在讲什么不要紧,因为我也没看懂 首先,关于\(A\times B \equiv C \pmo ...

  8. (Python OpenGL)【 0】关于VAO和VBO以及OpenGL新特性

    (Python OpenGL)关于新版OpenGL需要了解的: 随着OpenGL状态和固定管线模式的移除,我们不在用任何glEnable函数调用,而且也不会有glVertex.glColor等函数调用 ...

  9. Tarjan缩点+LCA【洛谷P2416】 泡芙

    P2416 泡芙 题目描述 火星猫经过一番努力终于到达了冥王星.他发现冥王星有 N 座城市,M 条无向边.火星猫准备出发去找冥王兔,他听说有若干泡芙掉落在一些边上,他准备采集一些去送给冥王兔.但是火星 ...

  10. 有趣的数 zoj 月赛

    题目描述 让我们来考虑1到N的正整数集合.让我们把集合中的元素按照字典序排列,例如当N=11时,其顺序应该为:1,10,11,2,3,4,5,6,7,8,9. 定义K在N个数中的位置为Q(N,K),例 ...