从世界坐标系到相机坐标系(3D物体到2D图像的转变)

news/2025/3/5 6:05:05/

转载:http://blog.sina.com.cn/s/blog_8c388a3a0101dd15.html

〇.各种坐标系及其存在的原因:

要谈坐标系变换,那么坐标系有哪些呢?依次有:物体坐标系,世界坐标系,相机坐标系,投影坐标系以及屏幕坐标系.我要讨论的就是这些坐标系间的转换。

这些坐标系不是凭空而来,他们都是为了完成计算机3D图形学最最最基本的目标而出现.计算机3D图形学最最最基本的目标就是:将构建好的3D物体显示在2D屏幕坐标上.初看好像就是将最初的物体坐标系转换到屏幕坐标系就可以了呀,为什么多出了世界坐标系,相机坐标系,投影坐标系。这是因为:在一个大世界里有多个物体,而每个物体都有自己的坐标系,如何表述这些物体间相对的关系,这就多出了世界坐标系;如果只需要看到这个世界其中一部分,这就多出了相机坐标系;至于投影坐标系那是因为直接将3D坐标转换为屏幕坐标是非常复杂的(因为它们不仅维度不同,度量不同(屏幕坐标一般都是像素为单位,3D空间中我们可以现实世界的米,厘米为单位),XY的方向也不同,在2D空间时还要进行坐标系变换),所以先将3D坐标降维到2D坐标,然后2D坐标转换到屏幕坐标。

对于整个“如何将3D物体投射并显示在2D屏幕上”这一过程而言,坐标系转换的顺序为:

物体坐标系—>世界坐标系—>相机坐标系—>投影坐标系—>图像(像素)坐标系编号设为a. b. c. d. e

当然,本篇的目的是说明如何将3D物体投射并显示在2D屏幕上,且难点也在于此(b,c,d,e过程)ab的过程不在本文讨论之内,不再赘述。如果很在意知识结构的完整性,请参考

http://www.cnblogs.com/shanhaobo/articles/1065380.html

该篇a.b过程十分详细。

 

一.3D-2D投影基础:图像的投影几何:

如何将空间中的点投射到2维图像中?这是一个问题。

假设空间中的一个点的坐标是(X0, Y0, Z0) (这个坐标称作相机坐标系”(camera coordinate system)),相对应的2D投影点坐标(此处是投影坐标系”(projection coordinate) 。如果要进行成像等操作,还要将投影变换到图像坐标(image coordinate), 这些都在后面给出)

从世界坐标系到相机坐标系(3D物体到2D图像的转变)                     1

不用捉急,请看下图 (第一,第四幅图的ZY标反了):

从世界坐标系到相机坐标系(3D物体到2D图像的转变)从世界坐标系到相机坐标系(3D物体到2D图像的转变)

 

其中,轴Z为光轴(optical axis);这个横截面Z=f被叫做图像平面(image plane)或投影平面(projection plane),与Z轴交点为图像位置(image position),该点被称为主点(principal point)(这两个个概念很重要,会影响到投影坐标系到图像坐标系的转换);原点称为投射中心(center of the projection)。如下图:

 

从世界坐标系到相机坐标系(3D物体到2D图像的转变)

二.世界坐标系与相机坐标系(含转化问题):

1、世界坐标系向相机坐标系映射流程:

  A. 世界坐标向相机坐标映射;

  B. 投影到投影平面;

  C. 从投影平面向pixel coordinate(就是image cooridnate)映射。

2、具体操作

A.相机外部参数(Camera extrinsic (or external) parameters

从世界坐标系到相机坐标系(3D物体到2D图像的转变)



 

然后,有:

从世界坐标系到相机坐标系(3D物体到2D图像的转变)                (2

其中Cw就是图中的C,是相机中心在世界坐标中的3D点的坐标。R就是Rc<w所以,从世界坐标到相机坐标的转换就是4X4的平移矩阵与4X4的旋转矩阵的乘积,如下式:

从世界坐标系到相机坐标系(3D物体到2D图像的转变)              (3

旋转矩阵R和平移向量Cw便被称为相机的外部参数,也即相机在世界坐标中的朝向与位置(orientation and position)

B投影矩阵: 三维到二维(Projection Matrix: 3D to 2D

接下来,我们需要将相机坐标投影到图像平面(Z=f, image plane)。在第一部分中,本文给出了如何将相机坐标中的3D点投影到2D的过程,即(1)式:

从世界坐标系到相机坐标系(3D物体到2D图像的转变)

(x,y)写成齐次坐标的形式,有:

从世界坐标系到相机坐标系(3D物体到2D图像的转变)

 

知,如果Z不为0,有:

从世界坐标系到相机坐标系(3D物体到2D图像的转变)

 

因而,我们能够将从3D(X,Y,Z)(这个点是在相机坐标系中的)2D投影点(x,y)的投影过程用3X4的矩阵描述成 (4)式:

从世界坐标系到相机坐标系(3D物体到2D图像的转变)                      (4)

而此3X4的矩阵便为投影矩阵。关于此矩阵仍有一些讨论,比如Z0和不0,无穷有穷,是不是原点什么的,因为过于理论,对于搞工程的亲们,洒家就不再赘述了。

  C. 相机内部参数Camera intrinsic (or internal) parameters

这一部分不太容易理解。不急,慢慢来。

通常,通过之前的步骤,我们已经能够将3D点投影到2D图像平面 (image plane,也叫投影平面, projection plane) 上了。但是,这并不够。因为,这样一个在投影平面上的图像是在投影坐标系下的,它的单位还是物理单位,位置也是物理位置。比如其单位可能是米,厘米,毫米等。因而,下一步,我们需要将投影坐标系转换至图像(也叫像素,pixel)坐标系。需要从其真实的物理位置(physical positions)转换至像素位置(pixel positions)。这就需要有放缩(scaling)平移(translation)操作。

假设,图像物理单位是mm(毫米)。放缩的目的是要确定一个mm中究竟有几个像素(因为通常情况下,一个mm并不精确对应1个像素);平移的目的是将图像原点移动到左下角(即通常情况下,图像左下角为(0,0)点,而投影坐标系中,图像是不满足这个要求的)。

对于放缩操作,有下式:

从世界坐标系到相机坐标系(3D物体到2D图像的转变)                 (5)

其中,mx表示x方向上,一单位(此处我们假设是1mm)中所含有像素个数;同理,myy方向上的。需要注意的是,尽管mxmy数值上通常非常接近,但一般并不严格相等。

对于平移操作,我们需要知道主点(在第一部分中有介绍)的物理位置,这个位置通常是固定的。举个例子,显示的图像(在图像坐标系中)必然是在显示在显示屏幕上的,而屏幕则是由像素构成。则主点的位置(也即图像位置,在第一部分有说明)便是在这个物理屏幕的中心。如果屏幕包含1536X2048列像素,则主点位置在(767.5, 1023.5)处。而我们的目的,就是将这个放缩好了的图像平移,使这个主点(也即目前的图像中心)移动至当前图像右上角处;而当前图像左下角移动至现在的主点位置,因而,当前的主点位置(767.5,1023.5)平移后便是(0,0)。这一段话够费解。我们再解释一二,后面跟张图,就清楚了。

在图像坐标系中,我们假定主点的位置是(px,py),这个理论上就是上段中的(767.5, 1023.5),当然,他们之前可能会有细微的不用,比如像素不可能不是整数。因而要获得投影点(x,y)的像素坐标,我们需要在原来的投影矩阵中加入平移量:

从世界坐标系到相机坐标系(3D物体到2D图像的转变)        (6)

请看下图:

从世界坐标系到相机坐标系(3D物体到2D图像的转变)

 

我觉得这张图已经相当清楚了。不在赘述。

而对于(6)式左侧的放缩平移矩阵,我们应当明白,这是相当理想的情况。理想状况自然就是不靠谱的情况,所以,我们还需要加入其它的参数s,这个参数叫偏度参数(skew parameter),控制了一定的错切(shear)变换因而原来的矩阵变为:

从世界坐标系到相机坐标系(3D物体到2D图像的转变) 

通常,我们给予左侧3X3的部分一个特殊的名字,

从世界坐标系到相机坐标系(3D物体到2D图像的转变) 

    这个K,我们叫做相机标定矩阵(camera calibration matrix),有时也写作:

从世界坐标系到相机坐标系(3D物体到2D图像的转变) 

这个东西,便是千呼万唤始出来的相机内部参数了。 

三.世界坐标系到图像坐标系的综合。

从世界坐标系到相机坐标系(3D物体到2D图像的转变)

从世界坐标系到相机坐标系(3D物体到2D图像的转变)

K一般是给好的。所以在实际编程中,不被过分在意。

 

至此。便讨论清楚了。

如果仍有疑问或其他需求,请自行查阅网站:

http://www.cim.mcgill.ca/~langer

里面都是瑰宝。是加拿大麦吉尔大学(加拿大最nb的大学)教授的页面,里面很多内容。讲解详细清楚。

很多网上的中文资料实在是令人遗憾。不是驴唇不对马嘴,就是简略抽象晦涩难懂。作为小白,为小白们服务义不容辞。

改变这个状况。


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

相关文章

3D 坐标系 2D坐标系

二维笛卡儿坐标系的平移等式。t( tx, ty ): ( x, y ) > ( x tx, y ty )二维笛卡儿坐标系的缩放等式。s( k ): ( x, y ) > ( kx, ky )旋转等式:r( q ): ( x, y ) > ( x cos(q) - y sin(q), x sin(q) y cos(q) ) 三维坐标系公式。平移公式&#xff1a;t( tx, ty, tz…

3D和2D游戏开发技术里的坐标系总结

from:http://www.liketocode.com/coding/208.htm 最近在做unity3d开发&#xff0c;坐标系的概念把自己搞得好迷糊&#xff0c;发现理解好坐标系的东西的确对一个新手来说是必经之路&#xff0c;而且是基础中的重点。故在此总结下在Unity3D开发中&#xff0c;以及在其他游戏开发…

2d-3d坐标转换

对于常规相机&#xff0c;SLAM里使用针孔相机模型   简而言之&#xff0c;一个空间点[x,y,z]和它在图像中的像素坐标[u,v,d] (d 指深度数据) 的对应关系是这样的&#xff1a; u x ⋅ f x z c x , ux⋅f_xzcx, ux⋅fx​zcx, v y ⋅ f y z c y , vy⋅f_yzcy, vy⋅fy​zcy…

2d图形旋转

2d图形旋转 1.这里旋转使用数学公式: xr x * cos(theta) - y * sin(theta); yr x * sin(theta) y * cos(theta); 2.如果以左上角为原点(0,0)&#xff0c;x方向向右增加,y方向向下增加的话&#xff0c;对于原图形旋转的100度并不等于连续20次的旋转5度的结果&#xff0c;可以…

2D-2D:对极几何与三角测量

文章目录 尺度不确定性对极几何尺度不确定性初始化的纯旋转问题 三角测量最小二乘法 单应性矩阵由像素系到相机系由像素系a到像素系b求解单应性矩阵 尺度不确定性 如果把相机的运动和场景同时放大两倍&#xff0c;单目相机所看到的像是一样的。同样的&#xff0c;把这个大小乘…

3D空间中的点坐标转化为屏幕二维点坐标(二)

&#x1f449;原文地址&#xff1a;3D空间中的点坐标转化为屏幕二维点坐标&#xff08;二&#xff09;&#x1f448; 上一节&#xff0c;简单的介绍了计算机时如何将三维世界中的点转化成屏幕上的二维点坐标的&#xff0c;知道了透视矩阵的作用。这一节内容&#xff0c;就是介…

3D点云综述

转载请注明作者和出处&#xff1a; http://blog.csdn.net/john_bh/ 论文链接&#xff1a;Deep Learning for 3D Point Clouds: A Survey 作者及团队&#xff1a;国防科大 & 中山大学 & 牛津大学 会议及时间&#xff1a; Arxiv 2019 code&#xff1a;https://github.co…

3D空间中的点坐标转化为屏幕二维点坐标(一)

每个人在进入计算机图形学的世界中&#xff0c;都有一个同样的困惑&#xff0c;三维世界中的三维坐标是如何被转换成屏幕上的二维坐标的&#xff0c;我如何在屏幕上找到一个点&#xff08;二维点&#xff09;对应三维世界中的点&#xff08;三维点&#xff09;呢&#xff1f; …