从像素坐标到相机坐标_多视图几何基础——深入理解相机内外参数
上一篇:前言(comming soon)
关键词:相机模型,多视图几何,相机内参数,相机外参数,skew畸变
1. 针孔相机模型
针孔相机模型是一种理想化的简单相机模型,也是成像的最基本原理,在这种模型中,有一个暗室,暗室中有一个足够小的针孔,外部世界的光线通过这个针孔进入暗室盒子,光线投射到暗室盒子中的二维平面,即将一个三维的场景(Scene)映射成了一张二维的影像。
这个针孔到成像平面的距离,叫做焦距(focal length)f:
由于在上述过程中像平面中的图像和实际场景中的影像是镜像的。为了让成像的过程更加直观,我们假象一个平面,这个平面位于相机针孔前距离针孔f的距离,在这个平面上场景的成像没有被镜像,拥有和真实场景相同的方向,我们把这个假象的平面称为像平面(image plane),这个假想的平面上的成像避免了数学计算时的正负号反转,如Figure 3所示
然而,通过理论上的这个无穷小的针孔进入的光线是极其有限的,我们可以通过扩大这个“针孔”来增加进光量,但是三维世界中的不同的位置通过这样的较大的一个孔会投射到成像平面上的同一个位置造成模糊的成像。解决这个问题的一种办法是采用一个透镜在聚焦通过这个较大的孔的光线,然而即使最优秀的透镜也只能保证在三维世界中一定的距离范围的光源投射到成像平面清晰,这个成像清晰的范围被称为景深(depth of field),在这个景深范围内的三维物体的成像几何接近于上述的针孔相机模型,这里提到的“针孔”我们将其称为投影中心(center of projection)或相机中心(camera center)。这个理想的模型的投影过程,我们将其称为透视投影(perspective projection)。顺便提及一点,为了减小成像形变使成像的几何更加的接近针孔相机模型,现实中这里所述的透镜通常是一系复杂的透镜的组合,而不是一个简单的凸透镜。
2. 以相机坐标系为参考的针孔相机的成像几何
为了将三维世界的场景映射到二维影像的过程建立数学模型,我们先考虑将相机自身的坐标系作为参考来建立投影过程的数学关系,如Figure 4所示为一个以相机为中心的坐标系(camera-centered reference frame),这是一个右手坐标系,其坐标原点为之前所述的投影中心。它的Z轴为相机的主光轴——通过投影中心并且垂直于像平面的直线,在这样的坐标定义下,像平面的表达式为
在上述过程中,我们所采用的像平面坐标都是基于公制单位(metric unit)的(即以米为单位),坐标
在计算机视觉的大多数约定中,像素的位置可以通过像素在像平面上所处的行列来索引,并且将影像的左上角规定为坐标系的原点,这里所说的用来索引像素位置的行列的数字被称为图像的像素坐标(pixel coordinates),我们将其表示为
- 像素被赋予的
坐标数值递增的顺序与数码相机内部的传感器的像素的读取(read out)顺序一致:从图像的左上角开始,逐行的读取;
- 相机坐标系通常采用的右手坐标系,这样的坐标规定意味着相机坐标系的Z轴由相机的位置指所摄三维场景,在这样的坐标定义下,场景中的点的Z坐标即为该点相对于相机的深度(depth),这个深度即是三维重建中很多过程中试图求解的未知数;
由于我们无法用无限的精度来表示像平面上的坐标,我们在影像处理及三维重建的过程中并不关心某一像点的公制坐标
在上述两种定义在像平面的坐标系中,坐标轴
接下来要将上述公制的坐标转换为像素坐标值需要将其除以一个像素的公制的长宽,我们用
等价的,
其中,
然而在现实中,由于以下一些原因数值上会有一些不同:
- 相机传感器的制造缺陷;
- 影像在后期处理中经过了非等比缩放;
- 相机镜头引入了非预期的畸变;
- 相机采用了某种带有长宽比变形的格式,在这种格式中镜头将一个宽场景压缩到了标准的画幅;
- 相机标定中产生的误差;
以上各个因素均导致最终的像素变形为非标准正方形。
采用来个不同方向的焦距值来表示相机的焦距并不是很直观,因为他无法与一个物理的焦距的概念对应起来(物理焦距只有一个,无法分为水平和竖直两个方向),一些教科书中采用一个焦距值
3. 相机坐标系下投影的矩阵表达
如果我么借助齐次坐标系,我们可以将上述公式(2-1)更加优雅的表达为矩阵的形式,齐次坐标系可以简单的理解为在原始的坐标下添加一个维度并将其值为数值1,同时我们将其坐标采用列向量来表示,这样原来像点m的坐标
通过上述矩阵可以得到,如果我们将像点的齐次坐标
表示了从一个三维世界中的物理量测单位(m,cm或mm)是如何映射到以像素为单位的数字影像上的。这个矩阵被称为相机矩阵(calibration matrix),也称为相机内参矩阵(camera instrinsic),其更加通用的表达是一个上三角矩阵:
其中的参数
为更加直观的理解相机内参矩阵可以将其拆分为几个连续的2D变换:
同样,为了更加直观的理解
有了上述基础,我们可以更加简单的矩阵形式将投影关系表示为:
其中
4. 基于任意坐标系为参考的成像几何
当我们的场景中有多余一个相机或者我们的场景需要表示在某一指定的全局唯一的世界坐标系(world frame)下时,相机的位置和姿态将有一个相机中心
世界坐标系中的一个三维点M要转换到相机坐标系下去,我们只需要将表示两个坐标系之间的相对平移的向量
其中,
一些教科书中也会将场景中的点M也采用齐次坐标来表示,即
令
5. 非线性畸变
截至目前为止,上述所讨论的所有成像几何中都认为相机中心
像点
于是考虑畸变的像平面坐标变为:
最总终的像素坐标为:
我们这里将相机的畸变置于相机的外参数与内参数之间,也可以将畸变参数应用在像素坐标系的坐标之上。实际中相机畸变的建模通常还会有非径向的非对称的切向畸变,Brown-Conrady镜头畸变模型是一种常用的畸变模型,关于相机畸变更多的内容可以参考Distortion。如果镜头的畸变参数已知我们可以计算出影像上各个像素畸变前的位置,这个过程叫做畸变矫正(undistort),畸变校矫正后的影像可以近似的认为其满足相机中心、三维空间中的点极其成像三点共线。后续我们的介绍中均认为影像已经经过了畸变矫正。
下一篇: 三维重建(comming soon)
从像素坐标到相机坐标_多视图几何基础——深入理解相机内外参数相关推荐
- iphone相机原理_在iPhone上获取HTML5相机和视频
iphone相机原理 One of the questions I get asked most often via my contact form is how to get access to t ...
- ios相机内存_传iPhone 11 Pro配备相机专用内存
中关村在线消息:近日据外媒爆料,在周三通过 Xcode 对 Apple Watch 和第七代 iPad 展开深入研究之后,开发人员 Steven Troughton-Smith 谈到了传说中的 iPh ...
- 从像素坐标到相机坐标_相机标定方法
在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数.在大多数条件下这些参数(内参.外参.畸 ...
- 从像素坐标到相机坐标_鱼眼相机模型EUCM(一)
前言 相较于普通的针孔相机,鱼眼相机的能够观测到的范围更广,在一定程度上其实是可以增强视觉的鲁棒性的.针对于鱼眼相机的模型其实有挺多的,也有论文对这些模型进行了评测,但对于本人来说,最熟知的还是针孔模 ...
- 从像素坐标到相机坐标_【视觉知识】机器视觉几何坐标概论
作者:林青春 来源:知乎 一.机器视觉几何坐标概论 机器视觉系统有三大坐标系,分别是:1.世界坐标系,2.摄像机坐标系,3.图像(像素)坐标系. 1.世界坐标系 世界坐标系(Xw,Yw,Zw)是目标物 ...
- 相机计算坐标公式_相机标定后,从图像坐标(像素)向物理坐标的转换计算,...
各位大侠,本人用1组35张图片,标定相机参数.分别用MATLAB和OPENCV分别标定,标定结果基本一致. 现在,我希望从标定的一副图像中(使用这幅图像标定的相机外参),计算图像上几个红点之间的在3维 ...
- matlab 相机焦距,世界坐标、相机坐标、图像坐标、像素坐标的原理、关系,并用matlab仿真...
照相机是日常生活中最常见的.它能把三维的空间图片等比例缩小投影在照片上,称为一个二维图像. 以下我们就讲一讲原理,并相应的进行matlab仿真. 在学之前,先要了解几个概念: 什么是世界坐标? 也就是 ...
- python画三维坐标图像_由RGB-D图像获取三维坐标(相机坐标) Python
由RGB-D图像获取三维坐标(相机坐标) Python 由RGB-D图像获取三维坐标(相机坐标) Python 图像数据 获取相机坐标(本处是在深度摄像头下) 相信大家最感兴趣的 肯定是代码啦 由RG ...
- 像素坐标、图像坐标、相机坐标和世界坐标
相机成像时,世界坐标系下三维空间的一点(X_w, Y_w, Z_w)到像素(u,v)的转换需要经历世界坐标系->相机坐标系->图像坐标系->像素坐标系一系列变换. 世界坐标系-> ...
最新文章
- 餐厅前台php,餐厅前台接听电话技巧
- linux运维趋势 37期刊为啥没有,linux运维常见问题
- 如何测试Java类的线程安全性
- arcgis标注牵引线_解析ArcGis的标注(三)——标注的放置 与 转注记修改
- 《Pytorch - 神经风格转换》
- Rust —— 一门没有GC的语言
- string与wstring转换
- RSA加密与签名的区别
- 突破某书新版登录流程逆向分析
- es7新特性随堂笔记
- css画钟表_用CSS3实现钟表效果
- 圣诞节贺卡计算机基础知识,制作圣诞节贺卡 如何制作圣诞节贺卡?圣诞节电子贺卡制作方法|电脑制作圣诞节贺卡...
- 一个超级实用的单片机调试技巧!DWT组件
- LR杂记--Loadrunner分析系统资源
- 阿里员工调侃:花名考拉的妹子离职去了网易考拉,现在又回来了
- [转]谷歌企业文化建设分析
- uniapp轻松集成极光推送自定义消息+通知 Android极光 IOS极光 两行代码集成极光SDK
- 预备内容:---软件安装篇(1)
- Google卫星地图定位(Resources)
- java中的线程及常用方法