为什么一运行相机坐标与世界坐标系系转换的坐标就被改变

一、四个坐标系简介和转换
相机模型为以后一切标定算法的关键,只有这边有相当透彻的理解,对以后的标定算法才能有更好的理解。本人研究了好长时间,几乎每天都重复看几遍,最终才会明白其推导过程。 & & &我觉得首先我们要理解相机模型中的四个平面坐标系的关系:像素平面坐标系(u,v)、像平面坐标系(图像物理坐标第(x,y)、相机坐标系(Xc,Yc,Zc)和世界坐标系(Xw,Yw,Zw),在每一篇介绍相机模型的文章中都有介绍。 & & &我刚开始理解时,看着那一堆的公式十分的头晕,我相信很多初学者和我一样,但仔细想想,只不过是,我们假设了一些参数,使四个坐标系之间的坐标联系起来,这样我们就可以从拍摄的图片上一个点坐标一路反推出世界中的那个点的坐标,这样就达到了我们的目的,三维重建。而那些我们假设的参数,就是我们要标定的内外参数。
1、像素坐标与像平面坐标系之间的关系&
& & & 确定他们的关系之前,我们可以假设每一个像素在u轴和v轴方向上的物理尺寸为dx和dy。仔细看下他们的模型可以推出以下公式(这个还是比较好理解的):
解释:1、dx,dy,u0,v0其实都是我们假设出来的参数,dxdy表示感光芯片上像素的实际大小,是连接像素坐标系和真实尺寸坐标系的,u0,v0是图像平面中心,最终是要我们求的内外参数。
得出这个公式后我们可以运用线性代数的知识把方程用矩阵形式表示:
当然我们也可以用另一种矩阵形式表示:
2、相机坐标系与世界坐标系之间的关系&
& & &这两个坐标系之间的关系我们可以旋转矩阵R和平移矩阵T来得到以下关系:
& & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & 公式4
& &解释:1、 在这个公式中,R为3*3矩阵,T为3*1,0为(0,0,0),简化用Lw表示后为4*4矩阵。
3、成像投影关系(相机坐标系与像平面坐标系)&
& & &在相机模型中我们可以得到以下公式:
& & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &公式5
& & & & & &解释:1、
同样我们用矩阵形式表示:
& & & & & & & & & & & & & & & & & & & & &&
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &公式6
4、得到公式
而我们可以将以上公式综合一下就可以得到:
因此,内参数矩阵可以表示为:
外参矩阵可以表示为:,由旋转矩阵R和平移向量T组成
二、图像坐标:我想和世界坐标谈谈(B)
& & & & &玉米将在这篇博文中,对图像坐标与世界坐标的这场对话中涉及的第二个问题:谈话方式,进行总结。世界坐标是怎样变换进摄像机,投影成图像坐标的呢?
& & & & 玉米做了一个简单的图示,在这里做一个提纲。图中显示,世界坐标系通过刚体变换到达摄像机坐标系,然后摄像机坐标系通过透视投影变换到达图像坐标系。可以看出,世界坐标与图像坐标的关系建立在刚体变换和透视投影变换的基础上。为了奖励刚体变和透视投影变换沟通了“世界上最远的距离”,玉米在图上奖励了他们两朵小红花。哈哈
&首先,让我们来看一下刚体变换是如何将世界坐标系与图像坐标系联系起来的吧。这里,先对刚体变换做一个介绍:
& & & & 刚体变换(regidbody motion):中, 当物体不发生形变时,对一个物体作,&的,称之为。
因为世界坐标系和摄像机坐标都是右手坐标系,所以其不会发生形变。我们想把世界坐标系下的坐标转换到摄像机坐标下的坐标,如下图所示,可以通过刚体变换的方式。空间中一个坐标系,总可以通过刚体变换转换到另外一个个坐标系的。转一转,走一走,就到另外一个坐标系下了。以前可能是面朝大海,经过平移旋转,最终可能只能面朝冰山了,哈哈
下面让我来看一下,二者之间刚体变化的数学表达。
其中,XC代表摄像机坐标系,X代表世界坐标系。R代表旋转,T代表平移。R、T与摄像机无关,所以称这两个参数为摄像机的外参数(extrinsic parameter)可以理解为两个坐标原点之间的距离,因其受x,y,z三个方向上的分量共同控制,所以其具有三个自由度。
& & & & &R则为分别绕XYZ三轴旋转的效果之和。如下面所示:
&R=r1*r2*r3.其由三个方向的θ控制,故具有三个自由度。
& & & & & &好了,刚体变换就讲完了。大家应该都了解,世界坐标系到摄像机坐标系之间的转换过程了吧。
& & & & & 接下来,让我们看看摄像机坐标下的坐标如何投影到图像坐标系下,最终变为照片中的一个像素。这其中包含两个过程:一是从摄像机坐标到“空间图像坐标”(x,y)所发生的透视投影;二是从“连续图像坐标”到“离散图像坐标”(u,v)。后者我们已经在第一篇博文中解释过。所以在这里,主要介绍一下透视投影。
& & & & &透视投影(perspective projection):&用中心投影法将形体投射到投影面上,从而获得的一种较为接近视觉效果的单面投影图。有一点像皮影戏。它符合人们心理习惯,即离视点近的物体大,离视点远的物体小,不平行于成像平面的平行线会相交于消隐点(vanish point)。
& & & & &啰嗦这么多,其实大家看看示意图,看看公式,秒懂。
&&以图中B(XB,YB)点为例,在小孔成像摄像机模型下(几何分析的最常用模型)。这里的f为摄像机的焦距,其属于摄像机的内参数(intrinsic parameter)。其在成像平面上的投影点b(xb,yb)的坐标利用简单的相似三角形比例关系很容易求出:
上面两式也阐明了摄像机坐标与图像坐标之间的透视投影关系。
& & & & & & 好吧,现在玉米已经把图像坐标与世界坐标之间的这场对话所需经历的三个波折的过程加以了解释。即:刚体变换、透视投影、(x,y)换(u,v)(ps.这个在上一篇博文中讲过)。接下来玉米用一张图把三个过程连接起来。实现从世界坐标(X,Y,Z)到(u,v)之间的转换。让图像坐标与世界坐标直接对话。
& & & & &下图中的转换关系,都是用齐次坐标表达的,大家会发现这样的表达非常整洁。
& & & & &其实这张图显示的过程还有一个名字:摄像机模型(camera model)。其实也就是摄像机的几何模型了。
& & & & &将三者相乘,可以把这三个过程和在一起,写成一个矩阵:
P就是世界坐标到图像坐标的直接联系人,P就表示了一个投影相机,有下面公式:
注意在表示齐次坐标时,需要在符号上面加个小帽子。除去齐次坐标控制位P23,P具有11个自由度。
&& & & 摄像机模型及其中涉及的坐标系等,是弄清3D重建几何框架的基础。可以把它们视为基本运算关系。后面对于三维重建几何框架的推导,都是要用到三个基本坐标系和摄像机模型的。
相关标签/搜索没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!OpenGL学习脚印: 理解坐标系及坐标变换(上)
我的图书馆
OpenGL学习脚印: 理解坐标系及坐标变换(上)
OpenGL学习脚印: 理解坐标系及坐标变换(上)
&&&&&&&&&&&&&&&本文为学习计算机图形学及利用OpenGL开发图形程序做数学准备工作。有关3D math的学习不是一蹴而就的,因此这里整理总结的是图形学中的基本数学问题。参考资料列在文章末尾。如有错误请纠正我。
&&&&&&&&&&&& 鉴于OpenGL中使用列向量表达向量,因此本节统一使用列向量表达向量,必要时使用转置表达行向量。
1.三大空间
&&&&&& 在计算机图形学中,需要表示和处理像点和线段这样的几何元素,为此要用到的数学知识可以在各种类型的抽象空间的研究中找到。
&& 这里我们认识3类这样的空间:向量空间vector space(线性空间linear space)、仿射空间affine space、欧几里得空间Euclid space 。
1.1&向量空间
&&&&&&&&&向量空间包含两类对象:&标量(scalar)和向量(vector)。
&&&&&&&&标量是只有大小而没有方向的量。例如实数就是标量的例子。标量是对我们平时所用数字的技术称谓。使用该术语时是想强调数量值。
&&&&&&&在两个标量之间定义了两种基本运算,即加法和乘法,这两种运算满足交换律、结合律和分配律。这就是我们熟悉的加减法中使用的规律:
[plain] 加法交换律:a+b=b+a&&&&乘法交换律:a*b=b*a&&&&加法结合律:(a+b)+c=a+(b+c)&&乘法结合律:a*b*c=a*(b*c)=(a*b)*c&&&&分配律:(a+b)*c=a*c+b*c&&
同时通过加法和乘法的逆元(加法逆元就是相反数,乘法逆元就是倒数),隐含地定义了减法和除法。
&为了能够处理方向,我们需要另一种类型,即向量。物理学家和数学家使用向量这个术语来表示任何既有方向又有大小的量。
关于向量,定义了两种运算:向量-向量加法和标量-向量乘法。
向量-向量加法是封闭的,即任意u,v∈V,则& u+v ∈V。向量加法满足交换律和结合律。
标量-向量乘法是这样定义的,对于任意的标量a和任意的向量u,则au是V中的一个向量。
标量-向量乘法满足分配律:
a(u+v)=au+av
(α+β)u = au+βu
关于向量的介绍先到这里,后面在必要时会再展开。
如果想获取向量与坐标全面的在线教案,可参考:
1.2&仿射空间
仿射空间是向量空间的拓展,除了标量和向量,还包括另外一种对象:点。
在向量空间中,没有像位置和距离这样的几何概念。如果把由有向线段构成的向量空间作为考虑几何问题的自然向量空间,就会遇到困难,因为这些向量就像物理中的向量那样,具有大小和方向,但是没有位置。我们可以通过引入坐标系来考虑问题。坐标系如下图所示:
但是在向量空间中没有办法表示原点O,因为向量空间中只有标量和向量。因此就引入了仿射空间。
仿射空间比向量空间多一类实体:点。
设P,Q,R为仿射空间中的点。在仿射空间中定义了新的运算:点-点减法,这个运算的结果就是一个向量。
对于任意两点P,Q,v = P-Q,其中v为V中的一个向量;反之对于任意v和P,我们总可以找到一个Q使该关系成立,这样就定义了一种点-向量加法:P = Q+v。点-向量加法可以看做把点Q移动到新位置P,移动的长度和方向由向量v决定。如下图所示:
1.3&欧几里得空间
&& 虽然仿射空间里包含了几何模型的必要元素,但是在仿射空间中不能度量两个点相距多远,或者说没有向量长度的概念。
&& 欧几里得空间是向量空间的拓展,它增加了对大小或者距离的度量,可以定义线段的长度等概念。严格地说,欧几里得空间只包含向量和标量。
&&&&我们定义一种的新的运算,内积(inner product)或者叫点积(dot product),该运算由两个向量得到一个实数。
&&&内积满足这样的性质:&对于任意3个向量u,v,w和变量α,β都有:
&&&& u.v=v.u(交换律)
&&& (αu+βv).w = αu.w+βv.w
对于v ≠0,则有v.v & 0;如果u.v = 0,则称u和v是正交的(orthogonal)
一个向量的大小(长度,也称为向量的模)通常定义为:&
把仿射空间中点的概念加入到欧几里得空间后,则两点之间的距离,可以看做向量的模,例如两点P和Q,则
2.坐标系基本概念
2.1&坐标系定义
使用坐标系是为了以代数的方法来研究几何,这就是解析几何的方式。通过建立一个坐标系使得空间中点用有序实数组表示,空间图形用方程表示,这样就方便研究几何图形的性质。
定义一个坐标系需要指定:
坐标系的维度 2D, 3D, 4D等等
定义坐标空间轴的向量,这些向量成为基向量,他们有名字,例如x,y,z;这些向量不一定非得互相正交(只要线性无关即可),但是每一个维度必须只有一个轴。坐标系的原点O,原点是导出其他点的参考点。一个表明空间中点是否合法的区域,在此区域之外的点就不再合法。这个区域根据空间不同,可以是无穷的。
这里,维度已由基向量维数确定,合法区域我们一般是无穷的,但是在图形处理中某些坐标空间是有限的,例如规范化设备空间。
基向量不一定非得正交,可以参见:《Learning Modern 3D Graphics Programming》中介绍。
2D笛卡尔坐标系如下图所示:
在2D笛卡尔坐标系中(x,y)可以定位一个点。坐标的每个分量都是到相应轴的有符号距离。例如,x分量表示改变到y轴的有符号距离,同样,y分量表示该点到x轴的有符号距离。这里,有符号距离,是指在某个方向上为正,而在相反的方向上为负,需要根据相应轴的正方向来定。
给2D笛卡尔坐标系增加第三个维度,即增加一个Z轴,则定义了3D坐标系,如下图所示:
3D中,任意一对轴都定义了一个平面并垂直于第3个轴,例如x,y轴的xy平面垂直于z轴;同样xz平面垂直于y轴,yz平面垂直于x轴。
我们可以认为这三个平面是3个2D笛卡尔空间。
3D笛卡尔空间中,定位一个点需要(x,y,z)3个数。3个分量分别代表该点到yz、xz、xy平面的有符号距离。如下图所示:
2.2&左手/右手坐标系及左/右手规则
对于任意2个2D坐标系,我们通过旋转、移动翻转可以将两个坐标系xy轴的指向相同。
但是对于3D坐标系,任意两个坐标系却不能等价。实际上,存在两种完全不同的3D坐标系:左手坐标系和右手坐标系。如果同属于左手坐标系或者右手坐标系,则可以通过旋转来重合,否则不可以。
关于左右手坐标系理解可参考下图:
如上右图右手坐标系,这里拇指、食指、其余手指分别代表x,y,z轴的正方向。
高等数学教材上上使用的是右手坐标系,DirectX使用左手坐标系,OpenGL使用的是右手坐标系。
同样还存在一个左手规则和右手规则,主要用于判断当物体绕轴旋转时正方向的判定问题。
对于左手规则,确定一个旋转轴后,左手握成拳头,拇指指向旋转轴的正方向,则其余手指弯曲方向即为旋转的正方向。从旋转轴正向末端来看,正向旋转是顺时针的。对于右手规则,有同样的方法。可参见下图:
关于如何快速判定旋转正向,还有一个巧妙的方法,可以参见:。
3.坐标变换
&&& 在计算机图形学中,为了更方便的描述物体,对物体进行处理,需要使用多个坐标系。
&& 使用多个坐标系的原因就是:某些信息只能在特定的上下文环境中才能获取(参考自[2])。
&&&& 怎么理解这句话呢?补充一个例子吧。比如,定义一个机器人模型,机器人模型的原点设在身体中央,成为一个坐标系C;同时为机器人构造复杂的头部模型时,需要使用一个新坐标系C1;构造机器人手部时需要一个新的坐标系C2;那么要想获取手指离鼻子的距离distance,则必须在C坐标系中获取,而在C1或者C2两个局部坐标系中却无法获取。那么需要将C1和C2中手指和机器人鼻子的局部坐标转换为C坐标系中位置,才能计算其距离distance。
这里引出一个重要问题:&怎么在一个坐标系中描述另一个坐标系?
所谓坐标变换,就是知道某一点的坐标,怎么样在另一个坐标系中描述该点。这就需要坐标变换。
个人理解,坐标转换,也就是从另一个坐标系来"看"原坐标系中的点,这个点还在原来坐标系,只是用另外一组原点和基向量来解释而已,因此坐标值发生了变换。坐标变换并不神秘。
3.1&二维变换引例
这里以csdn 汤永康&&博客 坐标系的旋转为例,该坐标系变换如下图所示:
这里将原坐标系XOY下点P(x,y),经过旋转theta后,变换到新坐标系SOT下点(s,t)。
那么,点P经过旋转变换后,变换到坐标系SOT下的坐标与原坐标系下坐标之间的关系经推导后如下所示:
推导过程可参见原文,原文利用点在坐标系中的位置关系进行推导的。
本节稍后将使用坐标系变换的观点,直接推导出变换矩阵。
3.2&坐标系变换
3.2.1 复习预备概念
设V为n维向量的集合,如果集合V非空,且集合V对于向量的加法和乘数运算封闭,那么就称集合V为向量空间。
这里封闭的意思是指在集合V中可以进行向量的加法和乘数运算。具体的讲即是满足:
若a∈V,b∈V则a+b∈V
若a∈V,λ∈R,则λa∈V
例如3维向量的全体构成3维空间。
一般地,由向量组u生成的向量空间记为:
n个向量的线性组合(linear combination)是形如下式的一个向量:
如果使得:u=0成立的唯一一组标量是:
则称这组向量是线性无关的(linear independent)。
设V为向量空间,如果r个向量都属于V,且满足:
1)r个向量线性无关
2)V中任意一个向量都可以由这r个向量线性表示
那么,这r个向量称为向量空间V的一个基,r称为向量空间的维数,并称V为r维向量空间。
实际上,在一个向量空间里,线性无关向量组中向量数目的最大值就是这个空间的维数,如果一个向量空间的维数是n,那么任何n个线性无关的向量都构成了一个基。
如果在向量空间中选取一个向量组u作为基,那么任意一个向量x可以唯一地表示为:
则称数组λ为向量x在基u下的坐标。
3.2.2&& 坐标变换
假设n维向量空间,有两个基向量组如下:
则对于一个给定的向量w可以表示为:
我们可以把w的坐标写成:
也可以写成
这取决于使用哪个基。
现在来考虑如何从w变到w‘。
基u中每个向量都可以用基v来表示,因此存在一组标量λ使得:
利用列矩阵重新表达向量w,则有:
由上两式子可得:
矩阵A是这两个基之间变换的矩阵表示,也称为过渡矩阵。利用过渡矩阵可以再两个基下表示之间进行切换,即进行坐标转换。
下面举出一个例子,帮助熟悉。
这里使用列向量来表达单个向量。
假设向量w在基v下表示为:
设另一基u满足:
则两个基之间的过渡矩阵为:
则可以求得:
3.2.3&求出变换矩阵的技巧
从上述可以看出,要进行坐标变换,关键是怎么样快速构建变换矩阵。
这里摘自【2】中的结论,导出如下:
对于基向量[1,0,0]^T、[0,1,0]^T、[0,0,1]^T(以列向量表示),任意矩阵M乘以它们时的情况:
观察发现矩阵M乘以[1 0 0]^T时得出的是M的第一列,其他两列有同样的结果。
这里得出一个重要的结论:矩阵M的每一列都能解释为转换后的基向量。
(参考书[2]中使用行向量推导,则结论为矩阵每一行为转换后的基向量)。
这个结论能帮助我们反向建立矩阵的可能。给出一个期望的变换(如旋转、缩放等),能够构造一个矩阵代表此变换。
我们要做的一切就是计算基向量的变换,然后将变换后的基向量填入矩阵。
设基向量组u,v满足如下关系,则两个基下坐标b,a满足关系如下:
由于使用列向量表达向量,因此,使用上述填充矩阵方法实际上找到的就是这个公式里的M矩阵的转置,注意这个细节。
3.2.4&&二维变换的示例
首先利用这个方法,我们推导上述二维旋转的坐标如下:
这里,基向量转换的基向量组成的矩阵为(每列构成的):
则原来的XOY坐标系下点p(x,y)在新坐标系SOT中坐标为:
3.2.5&齐次坐标系下变换
上面的讨论中的变换,可以实现对一个基的旋转和缩放得到另一个基的变换。但是上面的变换中,原点是不变的。这样不能表示平移变换。而借助齐次坐标系我们可以实现标架变换,同时仍然使用矩阵来表示标架变换。
标架(frame)是图形学教材[1]引入的一个术语,原点和基向量决定一个标架。
标架的一个不太严谨的说法是:它把向量坐标系的原点固定在了某个点P0处。
在一个给定的标架下,每个向量w和点P唯一的表示为:
这样表示一个向量需要3个标量,而表示一个点需要3个标量和原点的位置。
通过使用标架,我们可以避免向量和点的混淆。
齐次坐标系:
&&&&齐次坐标(homogeneous coordinate)可以克服点和向量在表示形式上一样(3维空间中都是x,y,z,3个分量表达)而导致混淆的缺点。
&&&& 齐次坐标使用四个分量来表达3维空间中的点和向量。
&&&&在由(P0,v1,v2,v3)确定的标架中,任一点P可以唯一地表示为:
通过定义点和标量0,1的乘法:
我们可以利用矩阵乘法把点P形式地表示为:
这里严格来讲并不是点积,但是把它当做点积来计算。
在同一标架下,任意一个向量w可以写为:
至此明确了,在齐次坐标系下,向量第四个分量,称为w分量,为0;而点的w分量为1。
设有两个标架(v,P0)和(u,Q0),把第二个标架的基向量和参考点用第一个标架来表示:
把方程写为矩阵形式:
其中M是一个4x4矩阵:
假设a和b是同一点或者向量在这两个标架下的齐次坐标表示,则有:
&&&&&&&&&&&&
根据该式可以实现两个标架下坐标之间的转换。
这里M的转置矩阵为:
注意:& 上面我们讨论的通过基向量变换情况,来构造M转置的方式,在其次坐标系下需要把原点也包括进去,原点的变换写在第4列。
3.2.6&齐次坐标系下变换示例
&&&&&&&&&这里摘自教材[1]的一个例子很有代表性。
&&&&&如下图所示,世界标架下指定相机位置:
&&&&&& 将照相机指定在世界标架的点P(1,0,1,1)位置处,指向世界标架的原点。则照相机的这个指向可以用向量n=(-1,0,-1,0)来表示。
&&&&&&& 同时照相机的观察正向和世界标架的y轴正方向一致为v=(0,1,0,0),这样利用叉积找出第三个方向u=nxv = (1,0,-1,0)。这样照相机构成的标架则为(u,v,n,P)。
&&&&&&&&&这里可以构造出把点和向量从世界标架下转换到照相机标架下表示的矩阵:
&&&&&&&这里M矩阵的转置中,每一列即为世界标架的基向量和原点,转换后的对应向量和点。
&&&&&&&我的感觉,我们一开始构造的就是M的转置,所以从M的转置,而不是M矩阵思考会轻松很多。
&&&&&&&这里取世界标架的原点,这个点在照相机标架下的坐标为:
也就是说,世界标架下原点(0,0,0,1),在照相机标架下解释为(0,0,1,1)点,即在照相机标架的n轴上。
而照相机标架的原点(0,0,0,1),在世界标架下解释为点P(1,0,1,1)。
上篇,到此结束,下篇还要继续整理包括仿射变换、投影变换以及结合OpenGL具体变换的展开。
4.主要参考资料
[1]&交互式计算机图形学-基于OpenGL着色器的自顶向下方法&&第六版&&电子工业出版社
[2] 3D数学基础:图形与游戏开发&&清华大学出版社
[3]&线性代数&同济大学第五版
[转]&[转]&[转]&[转]&[转]&[转]&
喜欢该文的人也喜欢没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!为什么一运行相机的坐标就被改变_百度知道
为什么一运行相机的坐标就被改变
我有更好的答案
如果你说的坐标是地理坐标。国内相机不能使用地理坐标。你说的坐标改变可能是程序地理坐标偏移。
采纳率:80%
来自团队:
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 相机标定 坐标系转换 的文章

 

随机推荐