相机成像的过程实际是将真实的三维空间中的三维点映射到成像平面(二维空间)过程,可以简单的使用小孔成像模型来描述该过程,以了解成像过程中三维空间到二位图像空间的变换过程。本文包含两部分内容,首先介绍小孔成像模型的各种几何关系;接着描述了成像过程中的四种坐标系(像素坐标,图像坐标,相机坐标,世界坐标)的变换关系。
相机可以抽象为最简单的形式:一个小孔和一个成像平面,小孔位于成像平面和真实的三维场景之间,任何来自真实世界的光只有通过小孔才能到达成像平面。因此,在成像平面和通过小孔看到的真实三维场景存在着一种对应关系,也就是图像中的二维像点和真实三维世界的三维点存在某种变换关系。找到了这种变换关系,就可以利用图像中的二维点信息来恢复场景的三维信息。
在描述小孔的成像过程前,首先来定义两个坐标系:
成像平面中,以成像平面的中心O’为原点和坐标轴x’,y’组成了图像坐标系。小孔成像实际就是将相机坐标系中的三维点变换到成像平面中的图像坐标系中的二维点。
将上面公式整理后可以得到:
上面的公式就是小孔相机模型的基础公式了,有了此公式可以推导出更详细的小孔相机模型的参数:
*内参数*外参数在推导相机的内参数和外参数前,需要先了解下齐次坐标的概念。
相机的成像过程实际是将三维空间的点P=(X,Y,Z)变换到成像平面的过程,这个过程也可以被称为射影变换(更多关于射影变换的内容可参考《计算机视觉中的多视图几何》)。如上面描述的,设射影变换的中心O作为相机坐标系的原点,该点到成像平面的距离为f,P在成像平面的投影点为p=(x,y),根据相似三角形原理,可以得到公式:
上面的公式就描述了三位空间到二维平面的映射,但是该映射对于坐标Z来说却是非线性(作为分母),通过上面的公式方便的统一处理X,Y,Z这三个坐标轴的数据。就需要引入新的坐标(扩展坐标的维度)将其线性化,如下:
这样,可以使用矩阵的乘法统一的处理X,Y,Z这三个坐标。坐标
通过上面的公式可以很容易的推导出,怎么通过扩展坐标维度构建齐次坐标。具体步骤就是将x和y同时除以一个不为0的z,并且将z作为其添加维度的坐标,通常可以选择z=1。这就可以发现其次坐标的一个重要性质,齐次坐标缩放一个常量因子是不变:
相机的内参数由下面的两部分组成:
将上面求得的(x,y)带入上面公式可得到:
将上面的公式写为齐次坐标的形式:
上面提到对于齐次坐标,缩放一个常量因子仍然是相等的,将Z挪到左边
外参数
通过上面的推导,知道了相机成像的过程p = KP
其中,p是图像中像点的像素坐标,K是相机的内参数矩阵,P是相机坐标系下的三维点坐标。上面推导使用的三维点坐标是在相机坐标系下的,相机坐标系并不是一个“稳定”的坐标系,其会随着相机的移动而改变坐标的原点和各个坐标轴的方向,用该坐标系下坐标进行计算,显然不是一个明智的选择。需要引进一个稳定不变坐标系:世界坐标系,该坐标系是绝对不变,SLAM中的视觉里程计就是求解相机在世界坐标系下的运动轨迹。
其齐次坐标的形式
将旋转矩阵R和平移向量t带入
上面就推导得到相机的外参数(Camera Extrinsics)T
其中,R是旋转矩阵,t是平移向量.
内外参数组合到一起
为了能够和外参数联合,需要将上式齐次化
这里使用的三维点坐标P_c是相机坐标系下的,带入外参数,将其该坐标变换为世界坐标系
可以将内外参数组合到一起称为相机矩阵,其作用是将真实场景中的三维点投影到二维的成像平面。
总结
本文总结了将场景中的三维点投影到二维成像平面变为像点的过程,下面对本文再作个总结。设有一像点p=(x,y)其对应的场景中的三维点为P_c=(X_c,Y_c,Z_c),成像平面距离相机中心的距离为f,依据小孔成像的原理,得到下面的变换公式
上式左边的像点坐标是成像平面坐标系下的坐标,需要将其变换到像素坐标系下。成像平面坐标系和像素坐标系间相差一个缩放和一个原点的平移
其中,dx,dy为一个像素的长和高,在前面的描述中使用$\alpha = \frac{1}{dx},\beta=\frac{1}{dy}表示;c_x,c_y表示原点的平移量。
在上式的右边三维点的坐标P_c使用的是相机坐标系,而相机位置却不是固定不变的,需要将其变换到世界坐标系下;从相机坐标系变换到世界坐标系下需要一个旋转和平移
一个相机矩阵就由上面三个矩阵组成。
1、 相机参数是三种不同的参数。 相机的内参数是六个分别为:1/dx、1/dy、r、u0、v0、f。 opencv1里的说内参数是4个其为fx、fy、u0、v0。实际其fx=F*Sx,其中的F就是焦距上面的f,Sx是像素/没毫米即上面的dx,其是最后面图里的后两个矩阵进行先相乘,得出的,则把它看成整体,就相当于4个内参。其是把r等于零,实际上也是六个。 dx和dy表示:x方...
先来一段相机参数截图 最好的解释来自官方 sensor_msgs/CameraInfo Message Halcon中一般只考虑径向畸变Kappa的第一项,而上面的D考虑了径向畸变(k1,k2)和切向畸变(t1,t2,t3)一共5个参数(k1,k2,t1,t2,t3),可能halcon一般使用工业相机,工业相机的安装精度很高,可以忽略切向畸变吧,甚至径向畸变也只考虑第一项(k1)。...
前言 “相机就是计算机的眼睛。” —— 哲学砖家阿瓦里斯基 好吧是我说的 这句话其实仅代表的是我的观点,相机之于计算机正如眼睛之于人,人眼就可以看成两台精密的相机。不过,不同于人眼的随时调节,对人造的相机,其各项参数就相对固定,易于调节,这也为 CV 的研究提供了方便。相机的参数是 CV 里一项很重要的基础课,我在这里会尽量讲的浅显易懂。 相机模型 ...
一.题目分析 1.题目一:简单工厂模式的应用 (1)题目要求:模拟女娲造人;传入参数M,返回一个Man对象,传入参数W,返回一个Woman对象;在此实现基础上,增加一个机器人类,传入参数R,返回一个Robot对象;实现该题目要求,并且观察女娲的变化。 (2)题目应用知识点:运用简单工厂模式编程实现 2.题目二:工厂方法模式的应用 (1)题目要求:模拟不同工厂生产空调;海尔工厂生产海尔空调,美的工厂...
Pytorch教程目录 Torch and Numpy 变量 (Variable) 激励函数 关系拟合(回归) 区分类型 (分类) 快速搭建法 批训练 加速神经网络训练 Optimizer优化器 卷积神经网络 CNN 卷积神经网络(RNN、LSTM) 目录 Pytorch教程目录 什么是循环神经网络 RNN (Recurrent Neural Network) RNN 的用途 序列数据 处理序列数...
水性能完整的IAPWS IF-97标准。 基于“ 1997年国际水和蒸汽工业配方属性协会(IAPWS IF-97)”对Matlab的蒸汽和水属性进行了说明 。IF -97标准的完整实施提供了非常精确的蒸汽以及在0-1000 bar和0-2000°C范围内的水性质。提供的热力学性质是: 温度 压力 焓 比体积 密度 比熵 比内部能量 比等压热容 比等容&nb...
判定表驱动法 基本思路:对多个条件的组合进行分析,从而设计测试用例来覆盖各种组合。 判定表:是分析和表达多逻辑条件下执行不同操作的情况下的工具。 判定表5个概念: 条件桩:问题的输入条件列出问题的所有条件。(通常列出条件的顺序没有约束) &...
安装流程如上: 对于选择虚拟机软件呢,有两个选择, 相对于vwmare,vbox相对来说界面简单,功能也更简单清新。 所以呢,我选择了更简单更不用脑子的vbox。 相关下载建议到官网下载。 最新版本就ok了。 下载好后呢,按照图片流程即可。 如下: 嘻嘻,如果你的电脑性能超级好的话,你可以把这些配置全部弄到最大的哈哈哈。 可以根据自己的需要,在设置那里更改好需要, 像声音那些什么的,都不需要来,难...
8位二进制加法器模运算系统 计算0111 1111 - 0100 0000 = ? 就等于: 0111 1111 + (2^位数 - 0100 0000) 0111 1111 + (2^8 - 0100 0000) 其中一个负数的补码等于将对应正数补码,各位取反末尾加一 得到: 0111 1111 + 1100 0000 即: 1 0011 1111 只留余数去掉最高位: 0011 1111 特殊...
I have a search form I'm using with the YP (Yellow Pages) API, coded in Ruby, with Sinatra. I've managed to connect all the dots getting the search to work on the back-end, but am having trouble conne...
I have a csv file like - I need the output like - I used the below command - Now issue is that if there is no row of any department in the file, then still it should show in the output file but it is ...
I'm working on a page has an ol with nested p's, div's, and li's. Internet Explorer 6 and 7 both render the numbers for the ol tag after the p element at the end (at the very, very bottom of the li ta...
I have an web forms app that recently started experiencing issues. App is deployed on the SharePoint. We have multiple users entering data into the scheduler. Each user has access to different facilit...
I want to delete everything I did in git. I use the command git reset HEADto delete all the progress but I don't know if delete all the progress. If you want to delete the commits up until a specific ...