摄像机投射投影模型

news/2024/10/22 12:24:44/

转载于:https://blog.csdn.net/shenziheng1/article/details/52890223

1.写在前面的话

摄像机通过成像透镜将三维场景投影到摄像机二维像平面上,这个投影可以用成像变换进行表示,也就是我们平常说的摄像机投影模型。摄像机成像模型有不同的描述方式。这里仅仅总结了机器视觉中常用的坐标系,然后主要分析了摄像机的线性模型和非线性模型。

2.坐标系描述:图像坐标系、摄像机坐标系、世界坐标系

摄像机采集的图像以标准的电视信号的形式经高速图像采集系统变换为数字图像,并输入计算机。每幅图像都是M*N数组,M行N列的图像中的每一个元素(也就是像素)的数值就是图像点的亮度(也就是图像灰度)。如下图所示:


(u,v)就是一像素为单位的图像坐标系坐标。由于(u,v)只表示像素位于数组中的列数和行数,并没有用物理单位表示出该像素在图像中的位置。因此,需要在建立以物理单位(如毫米)表示的图像坐标系,也就是我们图中所表示的XOY坐标系。在X.Y坐标系中,原点O通常定义为摄像机光轴与图像平面的交点,该店一般就位于图像中心处,但由于一些原因,也会发生偏离。二维摄像机坐标系到图像坐标系的变换可以用下面的矩阵进行刻画:


那么,摄像机的成像几何关系就可以用下图来刻画:


其中,O点称为摄像机光心,x轴和y轴与图像的X轴、Y轴平行,z轴为摄像机光轴,他与图像平面垂直。光轴与图像平面的焦点即为图像坐标系的原点,由点O与x、y、z轴构成的直角坐标系称为摄像机坐标系。OO1为摄像机焦距

世界坐标系的选取具有任意性。但是我们能够肯定的就是摄像机坐标系到世界坐标系的变换是一个3D-3D的变换过程,他们的关系就能够用旋转矩阵R和平移向量t进行完美的刻画。即存在如下关系:


3.针孔成像模型(线性摄像机模型)

针孔成像模型又称为线性计算机模型。空间任何一点P在图像中的成像位置可以用针孔成像模型近似表示,即任何点P在图像中的投影位置p,为光心O与P点的连线OP与图像平面的交点。这种关系也被称为中心射影(也就是我们平时说的透射投影 perspective projection)。参考上图模型,比例关系可以确定如下:


(X,Y)为p点的图像坐标;(x,y,z)为空间点P在摄像机坐标系下的坐标,f为xy平面与图像平面的距离(大多数的时候我们把f称为摄像机的焦距),上面的关系我们仍能够用一个矩阵表示:


其中,s是一个比例因子,P就是我们最为关心的透视投影矩阵。

那么,通过上面的总结,我们就能够很轻易地得到世界坐标系表示下的P点与其在图像坐标系下的p点的坐标变换关系。具体如下所示:


ax=f/dX:u轴上的尺度因子(平时我们叫u轴上归一化焦距);ay=f/dY:为v轴上的尺度因子(平时我们称v轴上归一化焦距)。M是投影矩阵;M1由ax,ay,u0,v0四个参数决定(这些参数可是仅仅跟摄像机内部参数有关,所以我们叫摄像机内部参数)。M2由摄像机相对于世界坐标系的方位决定,称为摄像机外部参数。确定某一摄像机的内外参数,称为摄像机的标定

通过上式,我们还能发现一个事儿,如果我们得到了摄像机的内外参数,就拿到了投影矩阵M,这是对于任何空间点P,如果我们知道他在世界坐标系下的坐标Cw=(Xw,Yw,Zw),就可以准确定位他在图像中的投影位置。但是,反过来这是不成立的,这就是摄像机成像损失了成像深度的理论来源(这也是很多科研工作者进行机器视觉的研究意义)。

4.非线性模型

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


其中,δx和δy是非线畸变值!他与图像点在图像中的位置相关。理论上镜头会同时存在径向畸变和切向畸变。但是一般来讲切向畸变变化很小,而径向畸变的修正由距图像中心的径向距离的偶次幂多项式模型来表示:


其中,(u0,v0)是主点位置的精确值。而:


上式也说明了一个道理,X方向和Y方向的畸变相对值(δx/X,δy/Y)与径向半径平方成正比,即在图像边缘处畸变较大。对于非精密的机器视觉而言,一届的径向畸变已经足够描述非线性畸变,那么上式就可以简写为:


那么,此时的非线性模型摄像机内参数就包括:线性模型参数(ax,ay,u0,v0)+非线性畸变参数(k1,k2)


http://www.ppmy.cn/news/545806.html

相关文章

VSCode gdb 调试 qemu u-boot 的方法

前言 最近使用 VS Code GDB 调试 qemu,有了一点收获,u-boot 编译后生成了一个 elf 文件:u-boot,是否也可以调试一下? 为何需要 VS Code GDB 调试,直接 gdb 调试不就可以了吗?答案就是&#xff…

设计模式-工厂方法模式

​ 文章目录 发展:简单实现:命名不规范:可读性差可维护性差可扩展性差团队合作问题 除数不能为0问题:开闭原则问题:想象力创造力:首先是发现力:接下来是想象力:总结 大话设计模式这本书反反复复…

2023年如何选购一部4000元价位的笔记本电脑(附跳坑说明)

2023年如何选购一部4000元价位的笔记本电脑(附带坑的说明) 本文是一个快速指南,不包含选购中涉及的所有知识点,尤其是大量的具体硬件参数,内容主要关注在如何快速抓住自己真正的需求,快速筛选掉不匹配的型…

你真的会写 HelloWorld 吗?

目录 Hello World 写一个批处理命令行脚本 关于include 关于程序的入口 输出充定向 在内存的存储详情 WinHex工具介绍 初学C语言时,第一个程序一定是Hello World!。但是Hello World的具体实现细节你真的了解吗? Hello World C语言代码如下&#…

java replace会替换吗,java replace replaceAll 替换字符串的用法和区别实例

java replace replaceAll 是替换字符串最常用的方法,但实际上用法是有区别的,replace只能传字符不能传正则表达式,replaceAll 默认传入的就是正则表达式。下面是实例测试代码: public class TestDemo { public static void main(S…

Python学习笔记之常用操作符,条件分支和循环用法示例

本文实例讲述了Python常用操作符,条件分支和循环用法。分享给大家供大家参考,具体如下: #Pyhon常用操作符想要学习Python?Python学习交流群:973783996满足你的需求,资料都已经上传群文件,可以自行下载&…

新装mac系统finder不断重启

自从安装了新系统小牛,我被烦人finder重启问题折磨得不能正常工作了。终于找到解决方法。罪魁祸首就是kanbox,酷盘。卸载了以后一切ok。 sudo mv /Library/Application\ Support/KanBox /Library/Application\ Support/KanBox_bak

Postgresql学习笔记(1)

PostgreSQL In BigData BigSQL(整合了pg和hadoop的开源项目) :http://www.bigsql.org/se/ Hadoopdb(耶鲁大学开源项目)SQL to MapReduce to SQL :http://hadoopdb.sourceforge.net/guide/ http://db.cs.yale.edu/hadoo…