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

  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. javaSE阶段中 关于Sring类方法的应用

    String类中有很多常用的方法,今天就一些方法涉及到的一些常见题 做两个小Demo   其中一个要求如下: 获取指定字符串中,大写字母.小写字母.数字 的个数 题目分析 * 为了统计大写字母.小写字 ...

  2. Joda Time 使用

    Joda Time 使用 对于系统的一些时间操作很是不方便,为了方便转化,有时候用date,有时候用timestmp,有时候用calendar,忍不住想更改了. 但是任务巨大,先把笔记收藏了,后面有机 ...

  3. cross validation

    k-folder cross-validation:k个子集,每个子集均做一次测试集,其余的作为训练集.交叉验证重复k次,每次选择一个子集作为测试集,并将k次的平均交叉验证识别正确率作为结果.优点:所 ...

  4. 抽象类(abstract)【转】

    抽象类(abstract) abstract修饰符可以和类.方法.属性.索引器及事件一起使用.在类声明中使用abstract修饰符以指示某个类只能是其它类的基类.标记为抽象或包含在抽象类中的成员必须通 ...

  5. C#字符串拼接的三种方式

    static void Main(string[] args) { string name = "asher"; //方法1 string str1 = "hello & ...

  6. 认识data-xxx 的属性

    认识data-xxx 的属性 如, 在bootstrap之data-toggle="table", 不加这个属性,就不能实现框架自带的js效果. 1.它属于 HTML5 的 dat ...

  7. Go语言环境安装-Mac

    1.环境安装 Go SDK下载和安装,下载地址为:https://golang.org/dl/ Visual Studio Code下载和安装,下载地址为:https://code.visualstu ...

  8. 入门GitHub

    Step 1: 创建一个我们自己的账号 我们先登录https://github.com,然后单击sign up for Github,我们输入用户名,密码和邮箱就可以有一个 属于我们自己的Github ...

  9. thinkphp3.2.3 无法调用带下划线的模型

    thinkphp 3.2.3 如果表名中带有下划线,在分割的时候命名模型类,首字母大写,例如:order_customer_bom 为表名 .模型名为OrderCustomerBomModel 引用的 ...

  10. HashMap vs Hashtable

    一.散列 1. HashMap 1)  hashmap的数据结构 Hashmap是一个数组和链表的结合体(在数据结构称“链表散列“),如下图示: 当我们往hashmap中put元素的时候,先根据key ...