基于投影矩阵的数码相机定位

基于投影矩阵的数码相机定位
基于投影矩阵的数码相机定位

基于投影矩阵的数码相机定位

摘 要

本文根据数码相机定位的相关数据图像,建立了一个多坐标系下投影矩阵的相机定位模型,并对模型进行了检验,使用立体几何的方法解决了双目定位。

1.针对问题一,根据图像坐标系、摄像机坐标系与世界坐标系之间关系及摄像机标定原理,引入了投影矩阵M :

11031

120321303310321031

22032

23033

2033132

33

3x x x x y y y y f r u r f r u r f r u r f t u t M f r v r f r v r f r v r f t v t r r r t ++++????=++++?????

?

导出了世界坐标系中的点与其投影点之间的关系:

[][]1 M 1 T

T c w w

w Z u v X Y Z =

其中投影矩阵M 至少需要6个控制点才能确定。

2.问题二是在问题一的基础上,利用仿射变换的不变性,通过公切线交点法,确定出投影矩阵M ,从而得到靶标上圆的圆心在图像坐标系和摄相机坐标系中的坐标。如下表:

3.针对问题三,先求出靶标平面上特殊点(即控制点)在像平面上的坐标,然后将其与在像平面上相应点的距离作为检验模型的参数。通过测定得出该模型的误差小于3个像素,由此得出该方法有较高的精度和稳定性。

4.针对问题四,建立以靶标为xoy 面的空间直角坐标系,根据靶标及其对应的像,采用立体几何的方法建立了相机相对位置的数学模型,确定了两个相机在坐标系下的坐标以及其光轴与靶标平面的夹角。

关键字:世界坐标系投影矩阵控制点几何分析

一问题重述

数码相机定位在交通监管(电子警察)等方面有广泛的应用。所谓数码相机定位是指用数码相机摄制物体的相片确定物体表面某些特征点的位置。最常用的定位方法是双目定位,即用两部相机来定位。对物体上一个特征点,用两部固定于不同位置的相机摄得物体的像,分别获得该点在两部相机像平面上的坐标。只要知道两部相机精确的相对位置,就可用几何的方法得到该特征点在固定一部相机的坐标系中的坐标,即确定了特征点的位置。于是对双目定位,精确地确定两部相机的相对位置就是关键,这一过程称为系统标定。标定的一种做法是:在一块平板上画若干个点,同时用这两部相机照相,分别得到这些点在它们像平面上的像点,利用这两组像点的几何关系就可以得到这两部相机的相对位置。然而,无论在物平面或像平面上我们都无法直接得到没有几何尺寸的“点”。实际的做法是在物平面上画若干个圆(称为靶标),它们的圆心就是几何的点了。而它们的像一般会变形,则必须从靶标上的这些圆的像中把圆心的像精确地找到,标定就可实现。

(1)建立数学模型和算法以确定靶标上圆的圆心在该相机像平面的像坐标, 这里坐标系原点取在该相机的光学中心,x-y平面平行于像平面;

(2)对由题中给出的图像分别给出的靶标及其像,计算靶标上圆的圆心在像平面上的像坐标, 该相机的像距(即光学中心到像平面的距离)是1577个像素单位(1毫米约为3.78个像素单位),相机分辨率为1024×768;

(3)设计一种方法检验你们的模型,并对方法的精度和稳定性进行讨论;

(4)建立用此靶标给出两部固定相机相对位置的数学模型和方法。

二 模型假设

(1)靶标为物平面;

(2)相机在拍照时,机身不晃动且靶标也是静止的; (3)在拍照时,光线充足; (4)不考虑拍照时发生畸变; (5)相机的焦距是不变的。

三 符号说明

(,,)w w w X Y Z

靶标中某一点的坐标(世界坐标系) (,,1)u v

像坐标系下点的坐标 (,,)c c c X Y Z 摄像机坐标下点的坐标

12M M M 、、

投影矩阵、外部参数矩阵、内部参数矩阵 ,dx dy

一个像素在x 轴和y 轴上的物理尺度 00(,)u v

光学中心在向坐标系下的坐标 R

旋转矩阵 t

三维平移向量

x y a a 、 焦距与一个像素物理尺寸的比 ij r

旋转矩阵中的元素 1234,,,H H H H …

靶标上圆共切线的切点 1234,,,H H H H ''''… 靶标上圆共切线的切点的像 ,,,,A B C D E '''''

靶标上圆的像 1020,h h … 靶标上圆的其它切点 12,h h …

圆对应像中的切点 a b c d 、、、

靶标所在平面方程的系数

α、β

靶标平面法向量与z 轴和光轴的夹角, p q 、

垂点及光轴与靶标平面的交点

四 模型分析建立与求解

4.1问题一

由于物平面(靶标)与相机像平面是分离的,而且靶标中的点(,,)w w w X Y Z 与像平面中的点(,,1)u v 是一一对应的关系,据此我们可以求得靶标中的点与像平面中的点满足的矩阵方程式(,,1)(,,)T T w w w u v M X Y Z =,只要确定投影矩阵M ,就可以确定靶标上任一点(例如圆的圆心)在该相机像平面的像坐标。这就是解决问题的相机模型。

这里(,,1)u v 中的,u v 是图像上定义的直角坐标系,每一个像素的坐标(,)u v 分别是指该像素在矩阵中的列数和行数,而z 坐标1是指三维图形所形成平面的像,称为齐次坐标。 4.1.1题目使用的四个坐标系

(1)世界坐标系

图一中w w w w O x y z -,在世界坐标系中,三维空间中的一点可以表示为

(,,)w w w w P X Y Z =。在本题中,靶标上的点就是在世界坐标系中度量的。

(2)照相机坐标系

图一中c c c c O x y z -,该坐标系以相机镜头的光学中心为原点,光轴为z 轴。摄像机坐标系上的一点可以表示为(,,)c c c c P X Y Z =。

(3)像素坐标系

图一中,u v ,每一个像素的坐标(,)u v 分别是指该像素在矩阵中的列数和行数。由于(,)u v 只表示像素位于矩阵中列数和行数,并没有用物理单位表示出该像素在图像中的位置,因而需要建立以物理单位(毫米)表示的图像坐标系。

(4)图像坐标系

图1中o xy -,该坐标系以图像内某一点o 为原点,x 轴与y 轴分别与,u v 轴平行,(,)x y 表示以毫米为单位的图像坐标系坐标。本题中,原点o 定义在相机

的光轴与图像平面是交点,该点为与图像的中心处。

图1

4.1.2 四个坐标系之间的相互联系

(1)图像坐标系与像素坐标系

如图2所示,若o 在uv 坐标系(像素坐标系中)的坐标为00(,)u v ,每一个像素在x 轴和y 轴上的物理尺度分别为,dx dy ,则图像中任意一个像素在两个坐标系下的坐标满足如下公式:

00

(1)x u u dx y v v dy ?=+??

??=+??

将公式(1)用齐次坐标表示:

001/0001/0 (2)100111u u dx

x v dy y v ????????????????=+????????????????????????

图2

(2)相机坐标系与世界坐标系

在整个空间区域中,相机可安放在任何位置,从4.1.1中知道,世界坐标系是一个最为普遍意义的坐标系,是一个基准坐标系,根据相关资料[2],设法找到相机坐标系与世界坐标系的关系。

相机坐标系与世界坐标系之间的关系可以用旋转矩阵R 尺和平移向量t 来描述,满足下式:

1

=M (3)01111c w w c w w T

c w w X X X Y Y Y R

t Z Z Z ????????

????????????=??????

????????????

????

对(3)式的几点说明:

1)(,,,1)(,,,1)c c c w w w X Y Z X Y Z 与分别表示两个坐标系下的齐次坐标; 2)0(0,0,0)T =,33R ?旋转矩阵为单位正交矩阵,t 为三维平移向量; 3)1M 是由相机所处外界环境决定的,称为外部参数。 (3)相机坐标系与像素坐标系

相机坐标系与像素坐标系之间的关系是由相机自身的参数决定的,相机自身

的参数主要有:焦距f ,像素是物理长度,dx dy ,光轴与像平面的交点00(,)u v 。

根据相关资料[2],得到相机坐标系与像素坐标系之间的关系:

00200110 0 (4)10

1011c c x c c y

c

c c c X X u a u Y Y v a v M Z Z Z Z ????????????????????==???

???????????

??????????

注 上式中/x a f dx =,/y a f dy =,f 为相机焦距,,dx dy 分别是每一个像素在x 轴和y 轴上的物理尺度;243M ?为矩阵,称为相机内部参数。 4.1.3计算投影矩阵

由(3)(4)两式,得到像素坐标和空间某一点的世界坐标的关系:

0012000 0M M M (5)0110

10111w w w x

w w w c y

T

w w w X X X u a u Y Y Y R t Z v a v Z Z Z ??????

????

??????????????

????===????????????????????????????

??????

其中M 为投影矩阵且12M=M M ,即已知空间点的世界坐标和图像坐标可求得M 矩阵。

对于世界坐标系中的任意一点,只要求出矩阵M ,即可求出该点在相机像平面上成像的像素位置,还可以根据(2)式得到图像坐标系o xy -中具体坐标。 4.1.4相机内外参数(1M 、2M )的求解

(1)由12M=M M ,可得:

11031

120321303310321031

22032

23033

2033132

33

3 (6)x x x x y y y y f r u r f r u r f r u r f t u t M f r v r f r v r f r v r f t v t r r r t ++++????=++++?????

?

其中/,/x y f f dx f f dy ==,矩阵M 中共含有17个未知参数,只要确定出这17个参数,就可求出矩阵M 。

(2)33R ?旋转矩阵为单位正交矩阵,得到部分约束条件如下:

2221112132

22

212223222313233112233322312233121331321322231

111

r r r r r r r r r r r r r r r r r r r r r r r r ?++=?++=??++=??

=-??=-??=-? (7) 旋转矩阵R 中虽然有9个未知参数,但只要确定其中三个,根据(7)式,另外的参数就可由这三个求得,即矩阵R 中有三个独立参数。

综上所述,矩阵M 中需要确定的未知量有11个,这里定义控制点[3]:世界坐标系中某点(,,)w w w X Y Z 所对应像素坐标系里的某点(,)u v ,这两个点称为一个控制点。一个控制点可以确定两个方程(u 方向v 方向各一个),所以只需要取6个控制点便可以求取相机内部参数和外部参数,从而求出投影矩阵M ,即找出世界坐标系内6个点和它们所对应像素坐标系内6个点的坐标,便可得矩阵M 。

求得投影矩阵M ,根据(5)式,对世界坐标系内的任意点(,,)w w w w P X Y Z =,都可以给出这点在像素坐标系的坐标(,)u v ,进而得到图像坐标系o xy -中的坐标

(,)x y ,如果像距c Z 已知,(,,)c x y Z 就是这点在相机坐标系中的坐标。

4.2问题二

本题是问题一的模型在实际问题中的应用,解题思路是找出在原图与照片中满足几何上一一对应的点,这些点称为控制点,找到控制点,用解方程组的办法确立(5)式的各个系数。

根据题意,确定了(5)式的各个参数,也就得知模型的旋转矩阵R 、平移向量t ,进而得到投影矩阵M ,这样,(5)式就变为一个方程左边是像平面坐标(像素坐标系)右边是物平面坐标(在世界坐标系下,或者称为靶标平面)的矩阵方程,此时,只要知道物平面上任意点坐标(在世界坐标系下),就可以得到像平面坐标。 4.1.1问题分析

由题意,(5)式中的内部参数是可以确定的:

(1)照片分辨率是1024×768,按照图2建立像素坐标系,则(5)式中

0512u =,0384v =;

(2)每个像素的大小1/3.28(),/x y dx dy mm a a f dx ==== 所以; (3)在相机坐标系里相机光学中心(原点)到像平面的距离为c Z ,根据题意,1577()417.20c Z mm =像素或;

(4)视相机焦距为未知参数进行求解。

综上,(5)式中独立的未知参数只有7个(旋转矩阵R 有3个独立的未知参数,平移向量t 有3个未知参数,焦距f 未知),每个控制点能确立两个方程,最少需要找到四组控制点才能将7个参量确定。 4.2.2模型建立求解 4.2.2.1确定控制点

首先要找到控制点,就是找到物平面某点E (世界坐标)与对应像平面的像

E '(相机坐标)的坐标。找控制点的步骤:

1)引理:若物平面上一直线l 经过某点A ,则该点在像平面上的像A '一定在l 的投影直线l '上;

反之,若直线l 不经过点A (光轴c Z 与,l A 直线点共面的情况除外),则像平面上点A 的投影点A '一定不在直线l 在像平面的投影l '上。

这个定理等价于直线所成的像仍然是直线(除直线与光轴重合的情况)。用反证法能简单证明(证明略)。

2)分析原图(靶标),如下图所示,做出过靶标中两个圆的公切线,公切线的交点分别为1234,,,H H H H …,

五个圆在像平面的像分别命名为,,,,A B C D E ''''',如下图,由上面定理可知,原图中的公切线在像平面的像仍然是闭合曲线,,,,A B C D E '''''的公切线,

1234,,,H H H H …的像

1234,,,H H H H ''''…是闭合曲线,,,,A B C D E '''''的公切线的交点。我们取1234,,,H H H H ''''…的原则是使点的分布尽量均匀,减小由于切线判断造成的误差。

图3

1234,,,H H H H …在世界坐标内的坐标根据题意可直接读出,

1234,,,H H H H ''''…在像平面(像素坐标系)的坐标可以用Matlab 软件处理照片

得到。

3)确定1234,,,H H H H ''''…

要在像素坐标系内找到照片中闭合曲线,,,,A B C D E '''''的公切线的交点

1234,,,H H H H ''''…,公切线必须精确找到,寻找公切线产生误差会对结果造成很

大影响。

采用Matlab 命令分析和图像观察不失为寻找公切线的一个办法。 用绘图软件Photoshop 能准确描绘出公切线,然后把照片导入Matlab ,用imtool 命令分析照片,用Pixel Region 观察放大后的照片像素点,这样就可以直接在像素图上读取1234,,,H H H H ''''…,如下图:

图4

用这种方法,读出图3中1238,,,,H H H H ''''…八组数据,数据见下表,这样就有了八个控制点,

表1

4.2.2.2模型求解

四组控制点就可以确定投影矩阵,我们分别以14~H H '',58~H H ''分别计算投影矩阵,然后取均值,由于时间仓促,我们并没能够做出很多组值来降低误差,但是我们发现这两组数据求得的投影矩阵很相似,而且求得的最后圆心的像坐标也很相似,所以将两种方法求得的均值作为结果。

(1)第一组数据求解

用Matlab 中fsolve 函数求旋转矩阵R 和平移向量t ,得如下结果:

0512u =,0384v =,1346.355x y f f ==

0.732350.391120.55739-0.11403-0.736570.66668(8)0.67131-0.551810.49483R ??

??=??

???? 19.7965-13.6013(9)417.5711t -??

??=??

????

由(8)(9)两式求投影矩阵

将50205050

50505050

5050000001

11

111w w w

X Y Z ---???????

?--????=???????

?

????和投影矩阵M 代入(5)式得靶标上

的点在像素坐标系中的坐标,由(1)式还可以确定图像坐标系坐标,由于在相机坐标系中z 轴垂直于像平面,且像距为1577/3.78=417.20(mm),可以确定相机坐标系坐标:

表2

(2)第二组数据求解

0512u =,0384v =,31.539510x y f f ==?

旋转矩阵R

,平移向量t ,投影矩阵

M

分别为:

1329.58243.98496.99187147.1104.2751203.43707.44 195486.90.671310.55181-0.49483417.571M ??

??=??

????

0.292890.956070.011920.02297-0.245980.969000.000006-0.519210.85465R -????=??????,11.1623132.770310.66455t -??

??=??

????

求出像素坐标系坐标、图像坐标系坐标、相机坐标系坐标,这里只列出了像素坐标系坐标和相机坐标系坐标:

表3

对于表2表3的数据取均值,得到结论:

表4

4.3检验模型方法 4.3.1检验模型

在我们模型中,我们是选取八个公切线的交点,然后计算出投影矩阵,用投影矩阵计算圆心的像点坐标。对这个模型的可行性进行检验。

1329.58

4074.24491.6950331.1104.2951316.004727.0 153555.50.000006-0.519210.854650.66455M -????=-??

????

如图7所示,在模型中用12381238,,,,,,,,H H H H H H H H ''''…,…求解得到投影矩阵,为检验模型的可行性,在靶标上,取另外的公切线交点12,h h …,用投影矩阵计算出这两点在像平面的像点1020,h h …,而像平面上12,h h …对应的公切线交点,比较1020,h h …和12,h h …坐标之间的距离,距离越短,重合程度越高,我们在问题二中的模型越合理。

如图7,举例说明

图5

1h '点的像素坐标(491.5,241.5),

经计算1h 在像平面的投影为(493.34,242.85)

误差小于3像素,说明我们的模型是合理的。 4.3.2分析检验方法的精度和稳定度

通过分析,影响检验方法精度和稳定度主要在两个方面: (1)世界坐标系变换的算法本身的精度; (2)在求解的过程中用到的切线的描绘。

参阅相关资料[1][2],这个算法的精度和鲁棒性(稳定性)都是非常好的,即使系统有大的波动,也能较好地恢复靶标的欧式度量(坐标系的转换)。所以在分析检验方法的精度主要考虑切线描绘的精度,也就是说,检验方法的精度和稳定度在受到切线误差的影响越小,那么检验方法的精度和稳定度就越好。

在求每条公切线的时候,都有可能产生误差,这是因为在照片处理的过程中,不可能存在绝对圆滑的图形,图形的边缘或多或少都是有“颗粒”的。所以误差的出现是随机的,这个误差可以认为是系统误差,所以减小系统误差的办法就是

多次测量,多次的试验。

在本题中,公切线有很多交点,可以选择很多对点对模型进行度量,然后可以取像平面上点的参差平方和检验模型。所以,这种大量点检验的方法是精度较高稳定性较好,也是合理的。

4.4问题四

要根据题中所给的正方形靶标建立确定两相机方位的模型,只需求出相机透镜光学中心(假设相机的位置由光学中心决定)在我们建立统一坐标系下的坐标,由于相机还有镜头的方向性,故我们还要得到它镜头的朝向。由于题中只给了一台相机所拍摄的靶标的像,所以这台相机的位置和方向是可以根据我们要建立的模型去确定的,而另外一台相机的方位的确定采用类似的方法,即可得到它们的相对位置,确立的基本算法如下:

第一步,由题中所给的图2、3,以及第二问求得的五个圆心所在像的坐标(这里坐标系的原点在相机的光学中心),根据光学中透镜成像的原理(图五),

++=,将所得到圆心的像沿反方向与靶标平面设靶标所在面的方程为ax by cz d

相交一点,这样可以得到五个圆心的位置,又因为这五个圆圆心的连线要满足图2中正方形(边长为100mm)这一要求,就可以列出对应的方程组,用相关的matlab 软件工具可以得到a b c d

、、、的值即唯一确定靶标的平面方程。

图 6

第二步,在确定了靶标平面方程以后,由于前面解决问题都是建立在以相机镜头的光学中心为原点的空间坐标系中的,要确立相机的方位,我们需要建立另

外一个参考坐标系,从而来得到相机在这个坐标体系下的具体位置,我们考虑将新坐标系的原点定在靶标平面正方形的中心位置上,以垂直靶标平面的轴为z 轴。

在最初的坐标系(原点为镜头的光学中心)下,已知靶标平面的方程,由此确立

了该面的法向量n

,可以求出其与z 轴方向单位向量的夹角α,从而计算得出光

轴与靶标平面的夹角β。

第三步,从镜头的光学中心(相机所在位置)引靶标平面的垂线并做出光轴在其面上的投影,设垂点为p ,光轴与靶标平面的交点为q ,现设定x y 、轴,以平行pq 边为y 轴,以垂直pq 边为x 轴。

图7

第四步,确定相机的位置,首先确定坐标,因为p q 、点的坐标都可以相应求出,从而很容易得到相机的横纵坐标,竖坐标即为在原坐标体系下,镜头光学中心(原点)到靶标平面的距离,根据点到面的距离公式可求得。其次确立相机的光轴方向,即和靶标平面成β角度。

综上所知,由所要解决的具体问题出发,分析问题所需要的参考坐标系,在已知实物和相机所拍摄的像的具体坐标时,可以确定相机空间位置及光轴朝向,同样的方法我们可以确定另一相机的具体位置和光轴方向,即根据靶标平面来确定两相机的相对位置。

五模型优缺点

5.1模型优点:

模型计算简单,精度较高。

引入多坐标系投影矩阵分析问题,大大简化了相机成像的物理分析,把繁杂的几何分析简化称为简单的矩阵运算,这样求解,是一个在简化运算的同时有不失精度的好方法。

5.2模型缺点

(1)需要确定的参数多

投影矩阵M中位置参数有很多,内部参数有5个,外部参数有12个,要确定这些参数,意味着需要很多的已知条件,这也是这个模型的限制之一,因为在现实情况中,往往是没有足够的已知条件的。

(2)模型中求公切线的过程中会引入误差,而且误差的引入是随机的,没有办法完全消除,所以这是这个模型最为难以处理的地方,我们采用的是多次测量计算来尽量减小误差对模型的影响。

六模型的改进

问题二中,由于切线的不精确定位会对模型造成大的误差,所以为了尽量减小误差,应该找出更多的控制点,计算出更多的投影矩阵,减少由于公切线不精确定位造成的误差。

七参考文献

[1] 吴谨王俊,基于投影矩阵的摄像机参数标定,福建电脑,2008年第8期

[2] 中国科学院自动化研究所模式识别国家重点实验室

(https://www.360docs.net/doc/d23156355.html,/english/rv),摄相机标定

[3] 郭启军钱新恩,线性模型下的摄像机标定,湖北汽车工业学院学报,第22卷第1期: 2008年3月

[4]王正林刘明,精通Matlab7,北京:电子工业出版社,2008年6月

摄像机内外参计算过程

摄像机内外参计算过程 罗海风2011-2-28 1.对内参的初始化: 涉及函数:init_intrinsic_param_fisheye.m 输入:x_1,x_2,x_3,…--角点的图像坐标,X_1,X_2,X_3,…--角点的世界坐标; 输出:所有内参,包括摄像机焦距fc,摄像机坐标系原点在图像上的坐标cc,几何畸变系数kc,斜交系数alpha_c,摄像机矩阵KK(包含以上系数)。 焦距的初始值:fc= max(,) _ max(,) nx ny f init nx ny π π ?? ?? =?? ?? ?? ?? 原点坐标的初始值设为图像中心处,即cc= 0.50.5 _ 0.50.5 nx c init ny - ?? =?? - ?? 计算内参时不考虑畸变,畸变系数初始值为零,即kc= 0 _ 0 k init ?? ?? ?? = ?? ?? ?? 不考虑摄像机坐标轴夹角非正交情况,即alpha_c=_0 alpha init= 内参数矩阵初始值 max(,) 00.50.5 max(,) 00.50.5 001 nx ny nx nx ny KK ny π π ?? - ?? ?? ?? =- ?? ?? ?? ?? ?? -------------------(1)

2.对外参的初始化: 涉及函数:comp_ext_calib_fisheye.m 功能:主要是调用compute_extrinsic_init_fisheye.m 和compute_extrinsic_refine_fisheye.m compute_extrinsic_init_fisheye.m 输入:像点的世界坐标和图像坐标x_kk 和X_kk,以及所有内参fc,cc,kc,alpha_c; 输出:所有外参初始值,包括平移矩阵Tckk ,旋转矩阵Rckk 和旋转向量omckk compute_extrinsic_refine_fisheye.m 输入:像点的世界坐标和图像坐标x_kk 和X_kk,最大迭代次数MaxIter 以及所有内参fc,cc,kc,alpha_c; 输出:所有外参初始值,包括平移矩阵Tckk ,旋转矩阵Rckk 和旋转向量omckk 对像点世界坐标和图像坐标进行整理(整理过程考虑到坐标变换和畸变模型,涉及normalize_pixel_fisheye .m 输入:像点图像坐标x_kk,所有内参fc,cc,kc,alpha_c;输出:标准化无畸变图像坐标xn )。 坐标变换首先按照原点坐标进行线性映射,转换成以焦距为单位: 111 222___x kk cc fc x distort x kk cc fc -????? ?=-?????? 然后校正相机平面和图像平面不平行带来的误差: 122_____x distrot alpha c x distrot x distort x distrot -??? =???? 最后进行畸变补偿:(调用函数comp_fisheye_distortion.m 输入:畸变的像点图像坐标xd ,畸变系数k ; 输出: 无畸变的像点图像坐标x ) xd 是畸变后的像素坐标,令__theta d theta theta d == 进入循环20次的补偿迭代,每次循环中有 12 24682468 1121314112223242__11theta d theta d theta k theta k theta k theta k theta k theta k theta k theta k theta ??=??++++++++?? ,其中k 为畸变系数。本程序中,只考虑径向畸变不考虑切向畸变,k 虽然是5x1矢量,但是 最后一位即切向畸变系数没有使用。 然后有1212tan()tan()__theta theta scaling theta d theta d ?? =? ??? 111 1221211 2222Np Np Np Np xd scaling xd scaling xd scaling xn xd scaling xd scaling xd scaling ?? =? ??? 畸变补偿结束。 得到标准化无畸变的世界坐标X_new 和图像坐标xn 。 由这两组坐标计算得到透视投影矩阵H(计算过程见摄像机定标程序中透视投影矩阵H 的计算过程.doc ),并对H 进行整理得到 ((:,1))()((:,2))H H H norm H sc mean norm H = =???? ??

矩阵投影与最小二乘方法

题目:《神奇的矩阵——矩阵投影与最小二乘方法》 学校:哈尔滨工程大学 姓名:黎文科 联系方式: QQ群:53937814 联系方式: 190356321@https://www.360docs.net/doc/d23156355.html,

矩阵投影与最小二乘方法 最小二乘法(Least Squares Method,简记为LSE)是一个比较古老的方法,源于天文学和测地学上的应用需要。在早期数理统计方法的发展中,这两门科学起了很大的作用。丹麦统计学家霍尔把它们称为“数理统计学的母亲”。此后近三百年来,它广泛应用于科学实验与工程技术中。美国统计史学家斯蒂格勒( S. M. Stigler)指出, 最小二乘方法是19世纪数理统计学的压倒一切的主题。1815年时,这方法已成为法国、意大利和普鲁士在天文和测地学中的标准工具,到1825年时已在英国普遍使用。 追溯到1801年,意大利天文学家朱赛普·皮亚齐发现了第一颗小行星谷神星。经过40天的跟踪观测后,由于谷神星运行至太阳背后,使得皮亚齐失去了谷神星的位置。随后全世界的科学家利用皮亚齐的观测数据开始寻找谷神星,但是根据大多数人计算的结果来寻找谷神星都没有结果。时年24岁的高斯也计算了谷神星的轨道。奥地利天文学家海因里希·奥尔伯斯根据高斯计算出来的轨道重新发现了谷神星。高斯于其1809年的著作《关于绕日行星运动的理论》中。在此书中声称他自1799年以来就使用最小二乘方法,由此爆发了一场与勒让德的优先权之争。 近代学者经过对原始文献的研究,认为两人可能是独立发明了这个方法,但首先见于书面形式的,以勒让德为早。然而,现今教科书和著作中,多把这个发明权归功于高斯。其原因,除了高斯有更大的名气外,主要可能是因为其正态误差理论对这个方法的重要意义。勒让德在其著作中,对最小二乘方法的优点有所阐述。然而,缺少误差分析。我们不知道,使用这个方法引起的误差如何,就需建立一种误差分析理论。高斯于1823年在误差e 1 ,… , e n 独立同分布的假定下,证明了最小二乘方法的一个最优性质: 在所有无偏的线性估计类中,最小二乘方法是其中方差最小的!在德国10马克的钞票上有高斯像,并配了一条正态曲线。在高斯众多伟大的数学成就中挑选了这一条,亦可见这一成就对世界文明的影响。 现行的最小二乘法是勒让德( A. M. Legendre)于1805年在其著作《计算慧星轨道的新方法》中提出的。它的主要思想就是选择未知参数,使得理论值与观测值之差的平方和达到最小: 2 211 ()()m m i i i H y y ===-=-∑∑理论值观测值

透视投影与正投影相关函数介绍

OpenGL 入门纪录--2 .透视函数glFrustum(), gluPerspective()函数用法和glOrtho()函数用 法 2008-12-24 16:14 在OpenGL中,如果想对模型进行操作,就要对这个模型的状态(当前的矩阵)乘上这个操作对应的一个矩阵. 如果乘以变换矩阵(平移, 缩放, 旋转), 那相乘之后, 模型的位置被变换; 如果乘以投影矩阵(将3D物体投影到2D平面), 相乘后, 模型的投影方式被设置; 如果乘以纹理矩阵(), 模型的纹理方式被设置. 而用来指定乘以什么类型的矩阵, 就是glMatriMode(GLenum mode); glMatrixMode有3种模式: GL_PROJECTION 投影, GL_MODELVIEW 模型视图, GL_TEXTURE 纹理. 所以,在操作投影矩阵以前,需要调用函数: glMatrixMode(GL_PROJECTION); //将当前矩阵指定为投影矩阵 然后把矩阵设为单位矩阵: glLoadIdentity(); 然后调用glFrustum()或gluPerspective(),它们生成的矩阵会与当前的矩阵相乘,生成透视的效果; 1.glFrustum() 这个函数原型为: void glFrustum(GLdouble left, GLdouble Right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far); 创建一个透视型的视景体。其操作是创建一个透视投影的矩阵,并且用这个矩阵乘以当前矩阵。这个函数的参数只义近裁剪平面的左下角点和右上角点的三维空间坐标,即(left,bottom,-near)和(right,top,-near);最后一个参数far是远裁剪平面的离视点的距离值,其左下角点和右上角点空间坐标由函数根据透视投影原理自动生成。ne 和far表示离视点的远近,它们总为正值(near/far 必须>0)。 2.gluPerspective()

投影大屏系统混合矩阵说明书

混合矩阵切换器说明书 第一章系统简介 MultiView Matrix 系列混合矩阵切换器,是一款高性能的专业PC信号切换设备,用于多个PC信号输入输出交叉切换,提供四种信号源的输入,信号源分别是是Video,VGA,DVI,YPbPr,每种信号单独传输,单独切换,输出可以是RGB和DVI,使信号传输衰减降至最低,图像信号能高保真输出。广泛应用在大屏幕显示工程、电视教学、指挥控制中心等场合。 Multiview Matrix系列混合矩阵切换器,主板采用自主研发出应于切换系统的巨量数据传输芯片技术,全新推出我公司独创的 180G/s处理高速宽带总线,彻底根除了处理数据总线带宽低下引起的显示速度慢且不稳定的瓶颈。 采用网络控制,可以传输数据量大。 可以支持RGB、DVI、HDTV、S-Video、NTSC/PAL格式信号输入,分辨率从640x480到1920x1200,刷新频率为60Hz;对每路输入信号采样都有特征记忆功能,在前级矩阵中可以任意切换输入信号,只要做过采样调整的信号再此输入,设备会自动配置记忆参数,无需二次采样调整。 可以支持RGB和 DVI信号同时输出,分辨率最高可达到1920x1200,刷新频率为60Hz,方便客户配置显示单元。 第二章技术参数 一计算机输入信号: 数量 4到72路DVI/RGB信号; 类型 DVI(数字)/ RGB(模拟); 分辨率 640x350,640x400,720x400,640x480,848x480,800x600, 848x480,1024x768,1152x864,1280x720,1280X768, 1280X960,1280x1024,1360x768,1400x1050,1440x900, 1600x1200,1680x1050,1792x1344,1856x1392, 1920x1080,1920x1200 像素, 刷新频率为60Hz;

透视投影(perspectiveprojection)变换推导

透视投影是3D固定流水线的重要组成部分,是将相机空间中的点从视锥体(frustum)变换到规则观察体(Canonical View Volume)中,待裁剪完毕后进行透视除法的行为。在算法中它是通过透视矩阵乘法和透视除法两步完成的。 透视投影变换是令很多刚刚进入3D图形领域的开发人员感到迷惑乃至神秘的一个图形技术。其中的理解困难在于步骤繁琐,对一些基础知识过分依赖,一旦对它们中的任何地方感到陌生,立刻导致理解停止不前。 没错,主流的3D APIs如OpenGL、D3D的确把具体的透视投影细节封装起来,比如 gluPerspective(…) 就可以根据输入生成一个透视投影矩阵。而且在大多数情况下不需要了解具体的内幕算法也可以完成任务。但是你不觉得,如果想要成为一个职业的图形程序员或游戏开发者,就应该真正降伏透视投影这个家伙么?我们先从必需的基础知识着手,一步一步深入下去(这些知识在很多地方可以单独找到,但我从来没有在同一个地方全部找到,但是你现在找到了)。 我们首先介绍两个必须掌握的知识。有了它们,我们才不至于在理解透视投影变换的过程中迷失方向(这里会使用到向量几何、矩阵的部分知识,如果你对此不是很熟悉,可以参考 可以找到一组坐标(v1,v2,v3),使得 v = v1 a + v2 b + v3 c (1) 而对于一个点p,则可以找到一组坐标(p1,p2,p3),使得 p – o = p1 a + p2 b + p3 c (2) 从上面对向量和点的表达,我们可以看出为了在坐标系中表示一个点(如p),我们把点的位置看作是对这个基的原点o所进行的一个位移,即一个向量——p – o(有的书中把这样的向量叫做位置向量——起始于坐标原点的特殊向量),我们在表达这个向量的同时用等价的方式表达出了点p: p = o + p1 a + p2 b + p3 c (3) (1)(3)是坐标系下表达一个向量和点的不同表达方式。这里可以看出,虽然都是用代数分量的形式表达向量和点,但表达一个点比一个向量需要额外的信息。如果我写出一个代数分量表达(1, 4, 7),谁知道它是个向量还是个点! 我们现在把(1)(3)写成矩阵的形式:

openGL投影矩阵原理及数学推导

openGL投影矩阵 概述 显示器是2d的。3d场景需要转换为2d图像才能显示在屏幕上。投影矩阵(GL_PROJECTION)用于完成这个工作。投影矩阵将观察坐标(eye coordinates)转换成裁剪坐标(clip coordinates)。然后,裁剪坐标被除以w,转换为规范化的设备坐标(NDC)。 需要记住的一点是,裁剪操作和规范化都由投影矩阵(GL_PROJECTION)完成。下面介绍如何用6个参数(left,right,bottom,top,near,far)构建投影矩阵。 裁剪(clipping)操作是在裁剪坐标上进行的,安排在透视除法执行之前。裁剪坐标xc,yc,zc同wc比较,若每个分量都落在(-wc,wc)外,那么此坐标将被裁剪掉。 在透视投影中,3d场景中的点(观察坐标)从平截头体中映射到正方体(NDC)中;x坐标从[l,r]映射到[-1,1],y坐标从[b,t]映射到[-1,1],z坐标从[n,f]映射到[-1,1]。 注意到,观察坐标系是右手系,规范设备坐标系是左手系。这就有,在观察坐标系中,摄像机朝向沿着-z,而在NDC中,方向沿着z。由于glFrustum()只接受正参数,所以构造投影矩阵的时候要变号。 openGL中,3d场景中,观察坐标系下的点被投影到近投影面。下图展示了观察坐标系点(xe,ye,ze)投影到近投影面上的点(xp,yp,zp)。 从Top View of Projection看,xe投影到xp,根据等比性质:

从Side View of Projection看,yp计算类似: 注意到,xp和yp依赖于-ze,这一点要引起重视。在观察坐标被投影矩阵转换为裁剪坐标后,裁剪坐标仍然是同质坐标。在规范化阶段执行透视除法变为规范设备坐标(NDC)。 因此,可以将wc的值定为-ze。投影矩阵最后一行为(0,0,-1,0) 下一步,将xp,yp映射到xn,yn,此为线性映射[l,r]=>[-1,1],[b,t]=>[-1,1]:

投影矩阵的定义

视锥就是场景中的一个三维空间,它的位置由视口的摄像机来决定。这个空间的形状决定了摄像机空间中的模型将被如何投影到屏幕上。透视投影是最常用的一种投影类型,使用这种投影,会使近处的对象看起来比远处的大一些。对于透视投影,视锥可以被初始化成金字塔形,将摄像机放在顶端。这个金字塔再经过前、后两个剪切面的分割,位于这两个面之间的部分就是视锥。只有位于视锥内的对象才可见。 视锥由凹视野( 在上图中,变量 投影矩阵是一个典型的缩放和透视矩阵。投影变换将视锥变换成一个直平行六面体的形状。因为视锥的近处比远处小,这样就会对靠近摄像机的对象起到放大的作用,也就将透视应用到了场景当中。 在视锥中,摄像机与空间原点间的距离被定义为变量 视矩阵将摄像机放置在场景的原点。又因为投影矩阵需要将摄像机放在 将两个矩阵相乘,得到下面的矩阵: 下图显示了透视变换如何将一个视锥变换成一个新的坐标空间。注意:锥形体变成了直平行六面体,原点从场景的右上角移到了中心。 在透视变换中,

这个矩阵基于一定的距离(这个距离是从摄像机到邻近的剪切面)对对象进行平移和旋转,但是它没有考虑到视野( 在这个矩阵中, 在程序中,使用视野角度来定义x和y缩放系数比使用视口的水平和垂直尺寸(在摄像机空间中)并不方便多少。下面两式使用了视口的尺寸,并且与上面的公式相等: 在这些公式中,Zn表示邻近的剪切面的位置,变量Vw和Vh表示视口的高和宽。这两个参数与 D3DVIEWPORT2结构中的dwWidth和dwHeight成员相关。 不管你使用那个公式,将同世界和视变换一样,可以调用下面的 D3DMATRIX ProjectionMatrix(const float near_plane,// distance to near clipping plane const float far_plane,// distance to far clipping plane const float fov_horiz,// horizontal field of view angle, in radians const float fov_vert)// vertical field of view angle, in radians { float h, w, Q; w = (float)cot(fov_horiz*0.5); h = (float)cot(fov_vert*0.5); Q = far_plane/(far_plane - near_plane); D3DMATRIX ret = ZeroMatrix(); ret(0, 0) = w; ret(1, 1) = h; ret(2, 2) = Q; ret(3, 2) = -Q*near_plane; ret(2, 3) = 1; return ret; } // end of ProjectionMatrix()

弹塑性矩阵推导

弹塑性矩阵推导

考虑材料的塑性,其增量形式的本构关系可表达为 p d σ=(D -D )d ε (1) 式(1)中,D 为弹性矩阵,p D 为塑性矩阵。 弹性矩阵D 的形式为 422000333242000333224000333000000 000000000K G K G K G K G K G K G K G K G K G G G G ??+--??????-+-???? =??--+?????? ?????? D (2) 体积模量3(12) E K μ= -,剪切模量2(1) E G μ=+。 在应变空间内,塑性矩阵可表达为 1()T f f A ??= ??p D D D σσ (3) 式中, ( )()T T p f f f f A B ????=--????D D σσσσ (4) f 为屈服函数;p σ为塑性应力,p p =σD ε; 1/2(()())T p T p T p f f f f B f f f ωθε??? ???? ??? '=???? ????????? σσ I σσσ (5) [111000]T '=I ;p ω为塑性功;p θ为塑性体应变;p ε为等效塑性应变; κ为反映加载历史的参数。 当p κω=时 当p κθ=时 当p κε=时

对于Drucker-Prager 模型,其屈服条件为 120f I J α== (6) 1x y z I σσσ=++,222222 21()2 x y z xy yz zx J S S S S S S = +++++,α为材料常数。 2 2f J α?''=?I σ (7) 222T x y z xy yz zx S S S S S S '??=??S (8) 22 ()32f K J J αα?'''==+?D D I I σ (9) 222 ( )()(3)92T T T f f A K K G J J ααα??'''===+??D I I σσ (10) 1()T f f A ??= ??p D D D σσ 222 22222 222222112123113211212311321121231131121121121(3)(3)999(9)(9)(9)(T T T T T T K K K G J J K G K G K G J K G J K G J m mn ml S m S m S m mn n nl S n S n S n ml nl l S l S l S l S m S n S l ααααααααβββββββββββββ''= + +''''=++++++=p D I I I I S SS 21121122231122132123123123 1122231231132232 113113113113212113223113)()()S S S S S S m S n S l S S S S S S m S n S l S S S S S ββββββββββββββββββββ?? ? ? ???? ? ? ?????? ?????????? 令4 3 p K G =+,23 q K G =- 弹塑性矩阵可表达为 211212311321121231132 1121231132112112112112112223112213123 123123 112223()(p m q mn q ml S m S m S m q mn p n q nl S n S n S n q ml q nl p l S l S l S l S m S n S l G S S S S S S m S n S l S S G βββββββββββββββββββββββ------------------=-=-----?-?----?-ep p D D D 21231132232 113113113113212 113223 113)()S S S S m S n S l S S S S G S ββββββββββ?? ?? ? ??? ? ? ???? -???----?-?-??? ?

透视投影详解

透视投影 透视投影是用中心投影法将形体投射到投影面上,从而获得的一种较为接近视觉效果的单面投影图。它具消失感、距离感、相同大小的形体呈现出有规律的变化等一系列的透视特性,能逼真地反映形体的空间形象。透视投影也称为透视图,简称透视。在建筑设计过程中,透视图常用来表达设计对象的外貌,帮助设计构思,研究和比较建筑物的空间造型和立面处理,是建筑设计中重要的辅助图样。 透视投影符合人们心理习惯,即离视点近的物体大,离视点远的物体小,远到极点即为消失,成为灭点。它的视景体类似于一个顶部和底部都被切除掉的棱椎,也就是棱台。这个投影通常用于动画、视觉仿真以及其它许多具有真实性反映的方面。 在平行投影中,图形沿平行线变换到投影面上;对透视投影,图形沿收敛于某一点的直线变换到投影面上,此点称为投影中心,相当于观察点,也称为视点。平行投影和透视投影区别在于透视投影的投影中心到投影面之间的距离是有限的,而平行投影的投影中心到投影面之间的距离是无限的。当投影中心在无限远时,投影线互相平行,所以定义平行投影时,给出投影线的方向就可以了,而定义透视投影时,需要指定投影中心的具体位置平行投影保持物体的有关比例不变,这是三维绘图中产生比例图画的方法。物体的各个面的精确视图可以由平行投影得到。另一方面,透视投影不保持相关比例,但能够生成真实感视图。对同样大小的物体,离投影面较远的物体比离投影面较近物体的投影图象要小,产生近大远小的效果. 透视投影的原理和实现 by Goncely 摘要:透视投影是3D渲染的基本概念,也是3D程序设计的基础。掌握透视投影的原理对于深入理解其他3D渲染管线具有重要作用。本文详细介绍了透视投影的原理和算法实

投影矩阵的计算过程

投影矩阵的计算过程3d模型经过世界坐标变换、相机坐标变换后,下一步需要投影变换。投影变换的目的就是要把相机空间转换到标准视图空间,在这个空间的坐标都是正规化的,也就是坐标范围都在[-1,1]之间,之所以转换到这个空间是为了后续操作更方便。下面的讨论都是以列向量来表示,这样在变换操作时,采用的是矩阵左乘法,如果采用的是行向量的话,那就相反,矩阵右乘法即是向量在左边乘以变换矩阵。采用哪种表示并不影响结果,只需要把该种表示下得出的变换矩阵转置一下,就是采用另外一种表示模式需要的结果。常见的投影有两种,正交投影和透视投影,正交投影相对来说更简单,所以先来看看正交投影。最简单的正交变换矩阵 1 0 0 0 0 1 0 0 0 0 0 1 这个正交变换是不可逆变换,变换后x和y保留,z变成了0,在实际应用中,更常见的情况是限定x、y、z在一定的范围内的进行投影变换,比如x[l,r],y[b,t],z[n,f]。那么要把这段空间中的点变换到-1和1之间,只要完成两个变换,首先把坐标轴移到中心,然后进行缩放就可以了。采用列向量的话,那就是缩放矩阵乘以平移矩阵。2/(r-l) 0 0 0 1 0 0 -(r+l)/2 2/(r-l) 0 0 -(r+l)/(r-l) 0 2/(t-b) 0 0 x 0 1 0 -(b+t)/2 = 0 2/(t-b) 0 -(t+b)/(t-b) 0 0 2/(f-n) 0 0 0 1 -(n+f)/2 0 0 2/(f-n) -(f+n)/(f-n) 0 0 0 1 0 0 0 1 0 0 0 1 透视投影类比于我们人眼系统,看一个物体,会有远小近大的效果。在转换到相机空间后,相机是这个空间的原点,和正交投影体是一个长方体或者立方体不同,透视投影体是一个锥体被近平面截取掉头部剩下的空间。假定仍然采用上面的坐标表示。在透视投影下,空间上面的任何一点P投影到近平面上某点q,通过三角几何学我们可以得到qx=px*n/pz ,y点同理。假定直接投影到近平面,则该矩阵很简单,用Ma表示下面的矩阵1 0 0 0 0 1 0 0 0 0 1 0 0 0 1/n 0 则齐次空间某点(x,y,z ,1)被该矩阵转换后变成了(x ,y z, z/n) ,除以z/n,则变成了(nx/z,ny/z,n ,1) 正好吻合上面的公式。 undefined 但是我们知道投影变换需要把坐标变换到-1和1之间,假定先不考虑z轴的变换,在x轴和y轴上面经过上述变换后,已经投影在近平面了,假设近平面xy在[l,r] 和[b,t]之间了,因此只需要和上面的正交投影一样,进行平移和缩放操作就可以了,平移矩阵Mb为 1 0 0 -(l+r)/2 0 1 0 -(t+p)/2 0 0 1 -(f+n)/2 0 0 0 1 以及缩放矩阵Mc 2/(r-l) 0 0 0 0 2/(t-b) 0 0 0 0 2/(f-n) 0 0 0 0 1 McXMbXMa 得到的矩阵为2/(r-l) 0 -(r+l)/(n*(r-l))0 0 2/(t-b) -(t+b)/(n*(t-b)) 0 0 0 j k 0 0 1/n 0 j k 为未知数,这个矩阵也可以同时乘以n,则变为2n/(r-l) 0 -(r+l)/(r-l) 0 0 2n/(t-b) -(t+b)/(t-b) 0 0 0 j k 0 0 1 0 为了求解J k,我们需要把z变换到-1 和1 因此当z=n时为-1,z=f时为1 (j*n+k)/n= j+k/n=-1; 同理j+k/f=1; 得到k=2f*n/(n-f) j=-(n+f)/(n-f) 代入上面的矩阵,就得出通用的正交变换矩阵。而且在一般情况下r=-l ,b=-t 因此上述矩阵可以简化为n/r 0 0 0 0 n/t 0 0 0 0 -(n+f)/(n-f) 2f*n/(n-f) 0 0 1 0 n/r 和n/t可以进一步简化成水平半视角和垂直半视角的三角函数来表示,而水平视角和垂直视角和透视窗口的宽高比有是成正比的,最终上面两行可以用宽高

快速投影Hessian矩阵算法

文章编号:1671 1114(2009)03 0018 04 快速投影Hessian 矩阵算法 收稿日期:2008 03 10 基金项目:天津市高校发展基金项目(20060402) 作 者:汤大林(1965 ),男,高级工程师,主要从事数学建模及应用方面的研究. 汤大林 (天津理工大学理学院,天津300191) 摘 要:分析了求解等式约束非线性规划问题的投影H essian 矩阵算法,找出了算法两步Q 超线性收敛的原因,并用BY RD 的例子说明此算法的收敛效果较差,即甚至不是线性收敛;对算法进行了合理的改进,并用改进后的算法求解BY RD 问题,得到了满意的收敛效果,即Q 超线性收敛.借助数值试验验证了改进算法的快速收敛性.关键词:等式约束非线性规划;投影H essian 矩阵算法;超线性收敛中图分类号:O 221.2 文献标识码:A Q uick projection method with H essian matrix T AN G Dalin (School of Science,T ianjin University of Techn ology,T ian jin 300191,China) Abstract:T he project ion method wit h H essian mat rix used to so lve nonlinear prog ramming w ith equality co nstr aint is analyzed and the r easo n w hy the method is superlinear conver gent by two steps is found o ut.Its bad converg ent effect at linear ity is illuminated by BYRD's example.T he method is impr ov ed and quickly super linear conver gence o f the impr ov ed metho d is illuminated using BY RD's ex ample.T he quickly co nv erg ent effect o f t he impro ved method is verified by a numerical experiment. Key words:nonlinear pr og ramming w ith equality constra int ;project ion method wit h H essian mat rix ;super linear conver gence 1 投影Hessian 矩阵算法的缺点 考察等式约束非线性规划问题: m in x R n f (x ),约束c(x)=0,(1) 其中,目标函数f (x ):R n !R,约束c(x):R n !R m 是二次可微函数,且m ?n,即m 个等式约束.为叙述方便,引入如下记号: x =(x (1),x (2),#,x (n)), c(x)=(c (1)(x ),c (2)(x ),#,c (m)(x ))T , g(x)= f (x )= ( f x (1), f x (2) ,#, f x (n))T , A(x)= c(x)= c (1) x (1) c (2) x (1)# c (m) x (1) c (1) x (2) c (2) x (2)# c (m) x (2) ! c (1) x (n) c (2) x (n)# c (m) x (n ) ,L (x, )=f (x )-?m i=1 (i) c (i)(x ), 其中, (i)为拉格朗日乘子,i =1,2,#,m. 将A(x)QR 分解为A(x)=(y(x),z(x)) (R(x)O ) , 其中y (x),z(x)均为n 阶正交矩阵,R(x)为m 阶上三角矩阵. V ol.29N o.3 Jul.2009 第29卷 第3期2009年7月 天津师范大学学报(自然科学版) Jour nal of T ianjin N orma l U niver sity (N atural Science Edit ion)

深度探讨透视投影坐标系.

3d图形程序,就一定会做坐标变换。而谈到坐标变换,就不得不提起投影变换,因为它是所有变换中最不容易弄懂的。但有趣的是,各种关于透视变换的文档却依然是简之又简,甚至还有前后矛盾的地方。看来如此这般光景,想要弄清楚它,非得自己动手不可了。所以在下面的文章里,作者尝试推导一遍这个难缠的透视变换,然后把它套用到DX和PS2lib 的实例中去。 1.一般概念 所谓透视投影变换,就是view 空间到project 空间的带透视性质的坐标变换步骤(这两个空间的定义可以参考其他文档和书籍)。我们首先来考虑它应该具有那些变换性质。很显然,它至少要保证我们在view空间中所有处于可视范围内的点通过变换之后,统统落在project空间的可视区域内。好极了,我们就从这里着手——先来看看两个空间的可视区域。 由于是透视变换,view空间中的可见范围既是常说的视平截体(view frustum)。如图, (图1)它就是由前后两个截面截成的这个棱台。 从view空间的x正半轴看过去是下图这个样子。

(图2)接下来是project空间的可视范围。这个空间应当是处于你所见到的屏幕上。实际上将屏幕表面视作project空间的xoy平面,再加一条垂直屏幕向里(或向外)的z轴(这取决于你的坐标系是左手系还是右手系),这样就构成了我们想要的坐标系。好了,现在我们可以用视口(view port)的大小来描述这个可视范围了。比如说全屏幕640*480的分辨率,原点在屏幕中心,那我们得到的可视区域为一个长方体,它如下图(a)所示。 (图3) 但是,这样会带来一些设备相关性而分散我们的注意力,所以不妨先向DirectX文档学学,将project空间的可视范围定义为x∈[-1,1], y∈[-1,1], z∈[0,1]的一个立方体(上图b)。这实际

模型视图矩阵和投影矩阵:webgl笔记

最近在学习WebGL技术的过程中,我补充了一些原本了解甚少的计算机图形学知识。如果有同学和我一样,没有系统学过计算机图形学就接触了3D图形编程,而对不少略为艰深的概念有困惑,希望这些笔记能够帮助你。 模型矩阵 我们必须考虑,当空间中点的位置会发生变化的时候,其坐标如何变化。考虑三种基本的变换:平移、旋转和缩放。 “变换”的含义就是,将点的初始位置的坐标P映射到平移、旋转、缩放后的位置坐标P’,即: 平移变换是最简单的变换: 旋转变换有一些复杂,先看在二维平面上的旋转变换: 很容易得到:

矩阵形式的表达更加简洁,后面大多使用这种形式: 推广到三维空间中: 点绕z轴旋转: 点绕x轴旋转: 点绕y轴旋转: 绕指定的任意轴旋转变换是由几个绕坐标轴旋转变换和平移变换效果叠加而成的,后文会有详细叙述。 缩放变换也比较简单: 总结一下:平移变换,变换后点坐标等于初始位置点坐标加上一个平移向量;而旋转变换和缩放变换,http://fei https://www.360docs.net/doc/d23156355.html,变换后点坐标等于初始位置点坐标乘以一个变换矩阵。

齐次坐标这天才的发明,允许平移变换也表示成初始位置点坐标左乘一个变换矩阵的形式。齐次坐标使用4个分量来表示三维空间中的点,前三个分量和普通坐标一样,第四个分量为1。 平移变换巧妙地表示为: 旋转变换(以绕z轴旋转为例)和缩放变换相应为: 综上,在齐次坐标下三种基本变换实现了形式上的统一,这种形式的统一意义重大。 矩阵有一个性质: 考虑一个点,https://www.360docs.net/doc/d23156355.html,先进行了一次平移变换,又进行了一次旋转变换,结合上面矩阵的性质,可知变换后的点P’为:

投影计算公式

投影计算公式往往表达方式不止一种,有时很难分辨谁对谁错,我只把“墨卡托投影”、“高斯-克吕格投影”、“UTM投影”、“兰勃特等角投影” (1:100万地形图规范中称作正轴等角圆锥投影,GB/T 14512-93)的正反转换公式列出,因为我基本能保证这些公式的正确性。 “海洋地质制图常用地图投影系列小程序已升级,原下载者请注意下载更新版本。 1.约定 本文中所列的转换公式都基于椭球体 a -- 椭球体长半轴 b -- 椭球体短半轴 f -- 扁率 e -- 第一偏心率 e’ -- 第二偏心率 N -- 卯酉圈曲率半径 R -- 子午圈曲率半径 B -- 纬度,L -- 经度,单位弧度(RAD) -- 纵直角坐标, -- 横直角坐标,单位米(M) 2.椭球体参数 我国常用的3个椭球体参数如下(源自“全球定位系统测量规范 GB/T 18314-2001”):

需要说明的是,在“海洋地质制图常用地图投影系列小程序”中,程序界面上的所谓“北京1954“西安1980”及“WGS 84”在实际计算中只涉及了相应的椭球体参数。 3.墨卡托(Mercator)投影 3.1 墨卡托投影简介 墨卡托(Mercator)投影,是一种"等角正切圆柱投影”,荷兰地图学家墨卡托(Gerhardus Mercator 1512-1594)在1569年拟定, 假设地球被围在一中空的圆柱里,其标准纬线与圆柱相切接触,然后再假想地球中心有一盏灯,把球面上的图形投影到圆柱体上,再把圆柱体展开,这就是一幅选定标准纬线上的“墨卡托投影”绘制出的地图。 墨卡托投影没有角度变形,由每一点向各方向的长度比相等,它的经纬线都是平行直线,且相交成直角,经线间隔相等,纬线间隔从标准纬线向两极逐渐增大。墨卡托投影的地图上长度和面积变形明显,但标准纬线无变形,从标准纬线向两极变形逐渐增大,但因为它具有各个方向均等扩大的特性,保持了方向和相互位置关系的正确。 在地图上保持方向和角度的正确是墨卡托投影的优点,墨卡托投影地图常用作航海图和航空图,如果循着墨卡托投影图上两点间的直线航行,方向不变可以一直到达目的地,因此它对船舰在航行中定位、确定航向都具有有利条件,给航海者带来很大方便。 “海底地形图编绘规范”(GB/T 17834-1999,海军航保部起草)中规定1:25万及更小比例尺的海图采用墨卡托投影,其中基本比例尺海底地形图(1:5万,

投影矩阵的推导

投影矩阵的推导(OpenGL D3D) OpenGL矩阵推导——模型视图变化 在三维编程中,模型视图变换是从三维世界到二维屏幕中一个很重要的变换,但是这个变换往往很多人都不太理解,要么是事而非。而这方面的文章不是太少就是讲的太浅没有真正的理解模型视图变换,本人在这个过程中曾经走过很多歪路,不过好在最终在自己的不懈努力下终于降伏了这只猛虎。本人就以自己的理解,通过矩阵推导过程一步一步来了解模型视图变化,最后通过两个OpenGl的程序来进一步理解模型视图矩阵。先从一个基本的模 型视图—透视投影变换讲起。 透射投影是将相机空间中的点从视锥体(frustum)变换到规则观 察体(Canonical View Volume 以下简称CVV)中,待裁剪完毕后进行透视除法的行为。 透视投影变换是令很多刚刚进入3D图形领域的开发人员感到迷 惑乃至神秘的一个图形技术。其中的理解困难在于步骤繁琐,对一些基础知识过分依赖,一旦对它们中的任何地方感到陌生,立刻导致理解停止不前。 主流的3D APIs 都把透射投影的具体细节进行了封装,从而只 需一个函数便可生成一个透射投影矩阵比如gluPerspective(),使得我们不需要了解其算法便可实现三维到二维的转化,然而实

事是,一些三维图形或游戏开发人员遇到一些视图矩阵的问题往往会不知所措,比如视景体裁剪。 以下部分内容是从别处那转过来的,主要感谢Twinsen和一个叫丁欧南的高中生。 透视投影变换是在齐次坐标下进行的,而齐次坐标本身就是一个令人迷惑的概念,这里我们先把它理解清楚。齐次坐标 对于一个向量v以及基oabc, 可以找到一组坐标(v1,v2,v3),使得 v = v1 a + v2 b + v3 c (1) 而对于一个点p,则可以找到一组坐标(p1,p2,p3),使得 p–o = p1 a + p2 b + p3 c (2) 从上面对向量和点的表达,我们可以看出为了在坐标系中表示一个点(如p),我们把点的位置看作是对这个基的原点o所进行的一个位移,即一个向量——p –o(有的书中把这样的向量叫做位置向量——起始于坐标原点的特殊向量),我们在表达这个向量的同时用等价的方式表达出了点p: p = o + p1 a + p2 b + p3 c (3)

投影矩阵的计算过程

投影矩阵的计算过程 3d模型经过世界坐标变换、相机坐标变换后,下一步需要投影变换。投影变换的目的就是要把相机空间转换到标准视图空间,在这个空间的坐标都是正规化的,也就是坐标范围都在[-1,1]之间,之所以转换到这个空间是为了后续操作更方便。 下面的讨论都是以列向量来表示,这样在变换操作时,采用的是矩阵左乘法,如果采用的是行向量的话,那就相反,矩阵右乘法即是向量在左边乘以变换矩阵。采用哪种表示并不影响结果,只需要把该种表示下得出的变换矩阵转置一下,就是采用另外一种表示模式需要的结果。 常见的投影有两种,正交投影和透视投影,正交投影相对来说更简单,所以先来看看正交投影。 最简单的正交变换矩阵 1 0 0 0 0 1 0 0 0 0 0 1 这个正交变换是不可逆变换,变换后x和y保留,z变成了0,在实际应用中,更常见的情况是限定x、y、z在一定的范围内的进行投影变换,比如x[l,r],y[b,t],z[n,f]。那么要把这段空间中的点变换到-1和1之间,只要完成两个变换,首先把坐标轴移到中心,然后进行缩放就可以了。采用列向量的话,那就是缩放矩阵乘以平移矩阵。 2/(r-l) 0 0 0 1 0 0 - (r+l)/2 2/(r-l) 0 0 -(r+l)/(r-l) 0 2/(t-b) 0 0 x 0 1 0 - (b+t)/2 = 0 2/(t-b) 0 -(t+b)/(t-b) 0 0 2/(f-n) 0 0 0 1 - (n+f)/2 0 0 2/(f-n) -(f+n)/(f-n) 0 0 0 1 0 0 0 1 0 0 0 1 透视投影类比于我们人眼系统,看一个物体,会有远小近大的效果。在转换到相机空间后,相机是这个空间的原点,和正交投影体是一个长方体或者立方体不同,透视投影体是一个锥体被近平面截取掉头部剩下的空间。假定仍然采用上面的坐标表示。在透视投影下,空间上面

投影矩阵的计算过程

3d模型经过世界坐标变换、相机坐标变换后,下一步需要投影变换。投影变换的目的就是要把相机空间转换到标准视图空间,在这个空间的坐标都是正规化的,也就是坐标范围都在[-1,1]之间,之所以转换到这个空间是为了后续操作更方便。 下面的讨论都是以列向量来表示,这样在变换操作时,采用的是矩阵左乘法,如果采用的是行向量的话,那就相反,矩阵右乘法即是向量在左边乘以变换矩阵。采用哪种表示并不影响结果,只需要把该种表示下得出的变换矩阵转置一下,就是采用另外一种表示模式需要的结果。 常见的投影有两种,正交投影和透视投影,正交投影相对来说更简单,所以先来看看正交投影。 最简单的正交变换矩阵 1 0 0 0 0 1 0 0 0 0 0 1 这个正交变换是不可逆变换,变换后x和y保留,z变成了0,在实际应用中,更常见的情况是限定x、y、z在一定的范围内的进行投影变换,比如x[l,r],y[b,t],z[n,f]。那么要把这段空间中的点变换到-1和1之间,只要完成两个变换,首先把坐标轴移到中心,然后进行缩放就可以了。采用列向量的话,那就是缩放矩阵乘以平移矩阵。 2/(r-l) 0 0 0 1 0 0 -(r+l)/2 2/(r-l) 0 0 -(r+l)/(r-l) 0 2/(t-b) 0 0 x 0 1 0 -(b+t)/2 = 0 2/(t-b) 0 -(t+b)/(t-b) 0 0 2/(f-n) 0 0 0 1 -(n+f)/2 0 0 2/(f-n) -(f+n)/(f-n) 0 0 0 1 0 0 0 1 0 0 0 1 透视投影类比于我们人眼系统,看一个物体,会有远小近大的效果。在转换到相机空间后,相机是这个空间的原点,和正交投影体是一个长方体或者立方体不同,透视投影体是一个锥体被近平面截取掉头部剩下的空间。假定仍然采用上面的坐标表示。在透视投影下,空间上面的任何一点P投影到近平面上某点q,通过三角几何学我们可以得到q x=p x*n/p z ,y点同理。假定直接投影到近平面,则该矩阵很简单,用Ma表示下面的矩阵 1 0 0 0 0 1 0 0 0 0 1 0

相关文档
最新文档