CG透视变换推导汇总

合集下载

15、透视的变化

15、透视的变化
透视的变化
透视 有工程图学基础的会从一点透视、两点透视、三点 透视、消失线等几何学的角度谈起。而有绘画基础 的朋友又会从大气透视等角度谈起。当然也有聊透 视感等纯感性认知的。而摄影即为把三维实物转换 为二维平面,用到最简单的线性透视,和阶调透视 。
透视的分类
1、线条透视变化 2、阶调透视变化
线条透视 1、被摄主体的选择要有纵深感的线条 2、拍摄点的选择 3、选取互相照应的光线效果 4、景深
阶调透视 1、拍摄对象的选择 2、画面氛围的选择 3、技术

CG4图形变换(4.3-4.4)

CG4图形变换(4.3-4.4)
图形输出设备(如显示器、绘图仪) 图形输出设备(如显示器、绘图仪)自身都有 一个坐标系称之为设备坐标系(Device 一个坐标系称之为设备坐标系 Coordinate System), 简称DC或物理坐标系 简称 或物理坐标系 是一个二维平面坐标系 度量单位是步长(绘图仪)或象素(显示器), 度量单位是步长(绘图仪)或象素(显示器), 因此它的定义域是整数域且是有界的
x w − W xl x v − V xl V xr − V = W − W xl xr xl y −V y w − W yb v yb = W yt − W yb V yt − V yb
(5-1)
由(5-1)式得窗口中一点 (xw,yw)变换到视 )式得窗口中一点W( 区中对应的点V( 二者之间的关系为: 区中对应的点 (xv,yv)二者之间的关系为:
视区
视区是在设备坐标系(通常是屏幕) 视区是在设备坐标系(通常是屏幕)中 在设备坐标系 定义的一个矩形区域, 定义的一个矩形区域,用于输出窗口中 的图形 视区决定了窗口中的图形要显示于屏幕 上的位置和大小
视区是一个有限的整数域, 视区是一个有限的整数域,它应小于等 整数域 于屏幕区域 可以在同一屏幕上定义多个视区, 可以在同一屏幕上定义多个视区,用来 同时显示不同的图形信息
Hale Waihona Puke 解:1)交点为(-15,-20)和(25,60) 2)窗视变换矩阵:
0 0 2 T = 0 1.25 0 50 55 1
交点在视区中的坐标:
x1 x2 y1 1 − 15 − 20 1 20 30 1 = 25 • T = 100 130 1 y 2 1 50 1
YV Vyt Yw Vyb O Wyt (xW,yW) Wyb XW O Wxl Wxr Vxl

透视投影的原理和实现

透视投影的原理和实现

透视投影的原理和实现透视投影的原理和实现摘要:透视投影是3D渲染的基本概念,也是3D程序设计的基础。

掌握透视投影的原理对于深⼊理解其他3D渲染管线具有重要作⽤。

本⽂详细介绍了透视投影的原理和算法实现,包括透视投影的标准模型、⼀般模型和屏幕坐标变换等,并通过VC实现了⼀个演⽰程序。

1 概述在计算机三维图像中,投影可以看作是⼀种将三维坐标变换为⼆维坐标的⽅法,常⽤到的有正交投影和透视投影。

正交投影多⽤于三维健模,透视投影则由于和⼈的视觉系统相似,多⽤于在⼆维平⾯中对三维世界的呈现。

透视投影(Perspective Projection)是为了获得接近真实三维物体的视觉效果⽽在⼆维的纸或者画布平⾯上绘图或者渲染的⼀种⽅法,也称为透视图[1]。

它具有消失感、距离感、相同⼤⼩的形体呈现出有规律的变化等⼀系列的透视特性,能逼真地反映形体的空间形象。

透视投影通常⽤于动画、视觉仿真以及其它许多具有真实性反映的⽅⾯。

2 透视投影的原理基本的透视投影模型由视点E和视平⾯P两部分构成(要求 E不在平⾯P上)。

视点可以认为是观察者的位置,也是观察三维世界的⾓度。

视平⾯就是渲染三维对象透视图的⼆维平⾯。

如图1所⽰。

对于世界中的任⼀点X,构造⼀条起点为E并经过X点的射线R,R与平⾯P的交点Xp即是X点的透视投影结果。

三维世界的物体可以看作是由点集合 { Xi} 构成的,这样依次构造起点为E,并经过点Xi的射线Ri,这些射线与视平⾯P的交点集合便是三维世界在当前视点的透视图,如图2所⽰。

图1 透视投影的基本模型图2 透视图成像原理基本透视投影模型对视点E的位置和视平⾯P的⼤⼩都没有限制,只要视点不在视平⾯上即可。

P⽆限⼤只适⽤于理论分析,实际情况总是限定P为⼀定⼤⼩的矩形平⾯,透视结果位于P之外的透视结果将被裁减。

可以想象视平⾯为透明的玻璃窗,视点为玻璃窗前的观察者,观察者透过玻璃窗看到的外部世界,便等同于外部世界在玻璃窗上的透视投影(总感觉不是很恰当,但想不出更好的⽐喻了)。

投影变换(计算机图形学)资料

投影变换(计算机图形学)资料

2009-2010-2:CG:SCUEC
10
正投影之三视图
当投影面与某个坐标轴垂直 时,得到的空间物体的投影 为正投影(三视图)
1. 三视图分为正视图、侧视图
和俯视图.
2. 对应的投影平面分别与x轴, y 轴,z轴垂直。
三视图
三视图常用于工程制图,因为在其上可以测量距离和
角度。但一个方向上的视图只反映物体的一个侧面,只有 将三个方向上的视图结合起来,才能综合出物体的空间结 构和形状。
2009-2010-2:CG:SCUEC
4
投影变换的概念
近平面
远平面 Z
X
投影平面 V′ U′
窗口 X′ Y′
Y 投影线
视点
透视投影
视点:三维空间中任意选择的一个点,亦称为投影中心 投影平面:不经过视点的任意一个平面 投影线:从视点向投影平面的引出的任意一条射线
2009-2010-2:CG:SCUEC
x
xq zc
yq
0
0 zc
xc yc
0 0
y z
xp
xq q
,
yp
yq q
q 0
0
1
zc
1
2009-2010-2:CG:SCUEC
8
平行投影
平行投影可以看成投影中心移向无穷远时的极限情况。
设给定的投影方向为( xd , yd , zd )。在要投影的对象附近任取一点
(xs , ys , zs),以此点为起点作一射线,其指向是投影方向的反方向,
oz 和 轴的单位方向向量为 (a11, a12 , a13 ) 、 (a21, a22 , a23 ) 和
(a31, a32 , a33 ) ,那么从坐标系oxyz到 o xyz 的变换是

透视和透视投影变换

透视和透视投影变换

透视和透视投影变换——论图形变换和投影的若干问题之三何援军(上海交通大学计算机科学与工程系,上海,200030)摘要:讨论了透视变换的基本原理:由于与画面成一角度的平行线簇经透视变换后交于灭点,可采用两种不同的方法来获得透视图:一是保持画面铅垂而通过旋转物体使之与画面构成角度达到透视变换效果,得到了3种最佳透视变换矩阵;二是通过倾斜投影画面而达到透视变换效果,给出了通过倾斜画面得到三灭点透视图的齐次透视变换矩阵。

两种方法的灭点都是可预先控制(即可先决定灭点再决定变换矩阵),比较彻底的解决了透视变换的生成理论。

给出了“对一个空间物体,一定存在另一个空间物体,使前者在画面上的透视投影与后者的平行投影是一样的,且保留了深度方向的对应关系”的一个证明。

这个性质可使复杂的透视投影转化成简单的平行投影,使得立体图形的处理大为简化。

关键词:透视变换,齐次变换矩阵,CG中图法分类号:TP391Perspective and its Projection TransformationHe Yuanjun(Department of Computer Science and Engineering,Shanghai Jiaotong University, Shanghai 200030,China)Abstract: Basic principles of perspective transformation are discussed. Based on the fact that parallel-lines in some angle with view plane intersect at vanishing-point, two methods are presented to get perspective view: one is to keep the view plane vertical while rotating objects to some angle, thus to achieve perspective transformation effect, and three best perspective transformation matrixes is presented. The other is to incline projective view to get the effect. Homogenous perspective transformation matrix are present, which can generate 3-vanishing-point drawing through inclining view. Both methods are beforehand controllable (that’s to say vanishing-point is first decided, then comes out the transformation matrix), thus generating theory of perspective transformation is thoroughly solved. Prove that for each 3D object there must be another 3D object, which parallel projection is the same as the former’s perspective projection, and the corresponding depth relation is well preserved. With this useful property, a complicated perspective projection can be converted to a simple parallel projection, so the complication of 3D graphics processing becomes sharply reduced.Keywords: perspective transformation, homogenous transformation matrix, CG1.引言现实生活中的景物,由于观察距离及方位不同在视觉上会引起不同的反映,这种现象就是透视现象。

第6章 图形变换02—透视变换

第6章 图形变换02—透视变换
r 定理:对一个空间物体,一定存在另一 个空间物体,使前者在画面上的透视投 影与后者的平行投影是一样的,且保留 了深度方向的对应关系。
2006年2月27日
上海交通大学计算机系 何援军
6
6.4.2 透视投影转化为平行投影— — 理论
r 证明:设有一个空间物体B1,其空间点由 P(x y z) 表 述,用下列方法构筑另一个空间物体B2:
透视子变换阵
2006年2月27日
上海交通大学计算机系 何援军
3
1 0 0 0 1 − 1 z e 0 0 1
6.4.1 透视变换—
基本变换公式:
1 0 (X Y Z H) = (x y z 1) 0 0
— 基本公式
0 1 0 0 0 0 0 0 1 − 1 ze 0 1
cos θ • cos α y 0 = cos θ • sin α y A
cos θ • sin α y sin θ / ze − cos θ • cos α y / ze (− h sin θ − C ) / ze + cos θ
其中 : A = (− cos α y • x0 − sin α y • z0 + x0 ) • cos θ C = (sin α y • x0 − cos α y • x0 + z0 ) • cos θ
6.
Y
X
7. 8. 9.
Y Z Z
Z Y X
// ctg α y・ z e, -ctgα x/sin α y・ z e, tgα z/sinα x ・ ze, -ctgα x・ ze,
灭 备 注 点 Z 数 1 1 个灭点在中心 0, 0 2 2 个灭点位于同一 0, tg α x・ z e 垂直方向 2 2 个灭点位于同一 tg α y・ z e, 0 水平方向 1 1 个灭点在中心 0, 0 3 2 个灭点位于同一 -tgα y ・ z e, tgα x/cosα y ・ z e 垂直方向, 1 个灭 点在水平轴上 -tg α y/cos α x・ z e, 3 2 个灭点位于同一 tgα x ・ ze , 水平方向, 1 个灭 点在垂直轴上 -tg α y・cos α z・z e, 2 灭点成歪斜状态 -tg α y・sin α z・z e, 3 灭点成歪斜状态 -tg α y・ z e,0 0,tgα x ・ ze 3 2 个灭点位于同一 水平方向, 1 个灭 点在垂直轴上 灭点成歪斜状态 11

透视投影变换的推导过程-3D基础知识

透视投影变换的推导过程-3D基础知识

透视投影变换的推导过程-3D基础知识感觉很多书上都没讲清楚透视投影变换的推导过程,自己推导了下,以前一直含糊的关于方形/非方形的视平面和屏幕的宽高比的问题也有了答案.本文组织如下:1.相机空间到视平面的变换2.视平面到屏幕的变换3.综合4.一般情形1.相机空间到视平面的变换* p (xc,0, zc)/ |/ |/ |X |/ |^ *p |(xp,0,zp)| / | || / | || / | |C(cam) |/ | |--------*----|----*------------->Z0 dx zc(X-Z平面的投影示图)a.透视投影一般的视景体为棱台,相机空间的物体会投影到视平面z=d,这里考虑左手坐标系,矩阵使用行优先方式。

如图所示,由相似三角形知识可知相机空间中的物体投影到视平面上的坐标为:xp = xc*(dx/zc)yp = yc*(dy/zc)其中,xc,yc,zc为相机空间坐标,xp,yp,zp为视平面坐标,dx,dy为x,y轴向的视距view distance,视平面到camera的距离,故相机空间投影到视平面上的矩阵Tcp为:|dx 0 0 0 ||0 dy 0 0 ||0 0 1 1 ||0 0 0 0 |(验证:T cp右乘点p(xc,yc,zc,1)得点p (xc*dx, yc*dy, zc, zc),转换为3D坐标为(xc*dx/zc, yc*dy/zc, 1),正确。

)*************************************************************** *****注:因为转换过程中点使用的是4D齐次坐标,所以最后需转换为3D坐标。

4D齐次坐标(x,y,z,w)转换为3D坐标的方法为除以w分量,即对应3D坐标为(x/w,y/w,z/w)。

*************************************************************** *****考虑dx/zc和dy/zc项,如果dx != dy,则投影后x,y的比例会发生变化(原因:投影前坐标比例为xc/yc,投影后为xp/yp = xc*(dx/zc)/yc*(dy/zc) = xc*dx/yc*dy),从而投影后的图像的x,y比例会发生变形。

CG08投影变换**

CG08投影变换**
P(a,b),OP和x轴的夹角为 。 视点的球面坐标表
示为Os(R, , )。视点的球面坐标和直角
坐标的关系为:
a R sin cos b R sin sin c R cos
观察坐标系
• 观察坐标系为左手系,坐标原点位于视点 Os上。Zs轴沿着视线方向OsO,视线的正右 方为xs轴,视线的正上方为ys轴。
两点和三点透视可以先将旋转至其投影面与某个坐 标平面平行时在用一点透视的方法进行变换处理。
一点透视
当屏幕与一个坐标轴相交时,形成一个灭点,
透视投影图为一点透视投影图。 为0度时,
且 为90度时。为一点透视。
二点透视
当屏幕仅与两个坐标轴相交时,形成两
个灭点,透视投影为二点透视图,如 为90
• 首选将用户坐标系圆点平移到观察坐标系 原点Os,然后将用户右手坐标系变换为观 察左手坐标系,就可以实现从用户坐标系 到观察坐标系的变换。
z1
z
ys
xs
投影面
yp
xp
视点
zs
Os
y1
x1

物体 O

x
zp Op
y P
首选进行从用户坐标系的原点到观察坐标系原点的平移变换:
1 0 0 0 1


T2


sin
2 0


sin
2
cos
2 0
0
0 1
0 sin
0


cos
0
0

0
cos s in
0 0
0 0 1 0
0 0 0 1
0

透视投影变换过程归纳及代码

透视投影变换过程归纳及代码

成像的过程实质上是几个坐标系的转换。

首先空间中的一点由世界坐标系转换到摄像机坐标系,然后再将其投影到成像平面(图像物理坐标系),最后再将成像平面上的数据转换到图像平面(图像像素坐标系)。

1透视投影公式
1.1世界坐标系转摄像机坐标系
公式如下:
其中,R为旋转矩阵,T为平移矩阵,右侧矩阵是世界坐标系坐标点,左侧是摄像机坐标系坐标点。

R旋转矩阵表示的是摄像机在世界坐标系中绕X,Y,Z旋转的程度,平移矩阵表示的是摄像机在世界坐标系中里世界坐标原点的程度。

R矩阵为3*3的正交矩阵,T为3*1的矩阵。

绕x,y, z轴旋转的矩阵分别如下:
1.2 摄像机坐标系转图像物理坐标系公式如下:
f是焦距
1.3图像物理坐标系转图像像素坐标系
公式如下:
每个像素沿x轴的实际物理尺寸大小是dx,沿y轴的实际物理尺寸大小是dy,单位值毫米。

图像物理坐标系原点在图像像素坐标系中记为(u0,v0)
2.代码
3.逆映射相关
逆映射是将图像像素坐标系坐标点,提供已知的内外参数逆映射到真实世界坐标点。

3.1 像素坐标系到物理坐标系
internalMatrix是相机内参数,取其逆矩阵与像素坐标点相乘,得物理坐标点。

3.2 物理坐标到摄像机坐标
先求得焦距的矩阵,取其逆矩阵与物理坐标点相乘,再乘以缩放因子即可得摄像机坐标点(缩放因子目前不知,暂时全部设为250)3.3 摄像机坐标到真实坐标点
先求得旋转矩阵和平移矩阵,合并两个矩阵之后,取其逆矩阵,让该
逆矩阵与摄像机坐标点相乘,即可得真实世界坐标点。

透视变换公式

透视变换公式

透视变换公式
透视变换公式是一种数学变换,它可以将一个三维空间中的图像转换为一个二维平面上的图像。

这种变换可以用于计算机视觉和计算机图形学中,它可以用于实现图像纠正、图像增强、图像变形等应用。

在透视变换中,我们需要定义四个点来确定变换的基本形状。

这四个点通常被称为映射点,它们可以确定源图像中的四个角落,并将它们映射到输出图像中的四个角落。

这种映射可以使用矩阵运算来实现,其中矩阵的值根据输入和输出图像的坐标系而定。

透视变换公式常常用于计算机视觉中的摄影测量和三维重建。

在摄影测量中,透视变换可以用于校正图像中的透视畸变,从而更准确地测量物体的尺寸和位置。

在三维重建中,透视变换可以用于将多个视角下的图像组合成一个三维模型。

总之,透视变换公式是一种非常有用的工具,它可以帮助我们将三维的图像转换为更易于处理的二维图像,并在计算机视觉和计算机图形学中发挥重要作用。

CG-LEC6-三维图形显示变换

CG-LEC6-三维图形显示变换
γ 11 γ 12 γ 13 0 γ γ 22 γ 23 0 x y z 1 21 γ 31 γ 32 γ 33 0 γ 41 γ 42 γ 43 1 其中(γ 11,γ 12,γ 13)为坐标轴x1 在坐标系 中3个方向的分量, 2 (γ 21,γ 22,γ 23)为坐标轴y 1 在坐标系 中3个方向的分量, 2 (γ 31,γ 32,γ 33)为坐标轴z 1 在坐标系 中3个方向的分量, 2 (γ 41,γ 42,γ 43)为坐标系 原点O1 在坐标系 中3个方向的分量, 1 2
2013-8-4
4
Computer Graphics
三维图形的基本问题
4. 如何产生真实感图形?
何谓真实感图形 逼真的 示意的 人们观察现实世界产生的真实感来源于 空间位置关系----近大远小的透视关系和遮挡关系 光线传播引起的物体表面颜色的自然分布 解决方法----建立光照明模型、开发真实感图形绘制 方法
M齐
γ 11 γ 21 γ 31 γ 41
γ 12 γ 22 γ 32 γ 42
γ 13 γ 23 γ 33 γ 43
0 0 0 1
24
2013-8-4
Computer Graphics
对于空间任意一点Q,如果已知其在坐标系 2(O2, x2y2z2)中的坐标 ( x, y, z ,1) 则 Q x y z 1 x y z O
x0 , y0 , z0
u y
u u1 , u 2 , u 3 z z z z

2013-8-4
u z
u x
x’
z’
(0,0,0)
x
28
z
Computer Graphics

透视投影的坐标转换与数学推导

透视投影的坐标转换与数学推导

透视投影的坐标转换与数学推导坐标转换管线在处理顶点数据时需要经过多个坐标系的转换。

1.通过model与view矩阵先将其变换到世界坐标系中,再将其变换到观察坐标系中。

从⽽⽅便后续处理。

2.经透射投影,将3D坐标映射到视平⾯,完成从3D到2D的变换,从⽽在后续可转换为在屏幕显⽰的2D坐标。

3.透射投影将顶点转换到了单位⽴⽅体中,变换到标准化设备坐标系。

4.⽽标准化设备坐标系中的物体常常会产⽣形变,为恢复物体原⽐例,将其进⾏视⼝变换,转换到最后显⽰的屏幕坐标系中。

以上为顶点在坐标转换中的⼤致流程,其中包含的很多细节部分会在下⾯结合透射投影进⾏详细分析。

逻辑分析图 1 图 2 图 3 图41.转换:我们输⼊在程序中的坐标都是3D,⽽最终显⽰在屏幕上的只能是2D。

所以可想⽽知,需要⼀个过程来将3D坐标映射到我们的2D视平⾯上。

只有这样我们才能通过显⽰器去观看。

2.观察:如上述图1,我们在观察⾯上所观察到的正是观察点E与物体实际坐标的连线在视平⾯P上的交点,其⽐例也可形成近⼤远⼩的现实感。

图2可直观的感受。

3.问题:根据学过的知识,显然这⼀交点可以很轻松的通过相似三⾓形来求得。

但问题是,我们需要获得多⼤范围内的物体?即限定观察空间。

不在观察空间内的物体⼜该怎样去处理?即裁剪。

4.观察空间:设定近平⾯,远平⾯,和观察⾓度,来得到⼀个视椎体(frustum)。

⽽我们也常常将近平⾯作为视平⾯。

如图3。

5.裁剪:裁剪掉视锥体以外的顶点,只保留以内的。

若直接对视锥体裁剪,因平⾯的倾斜也会导致计算量过⼤,所以采⽤将其映射到单位⽴⽅体中(CVV),此时都为垂直平⾯,并且在映射过程中,顶点与视锥体的关系不变,在视锥体外的仍然在视锥体外。

裁剪时只需判定⼀个坐标即可,⼤⼤减少了计算量。

如图4。

6.恢复:但是在映射到CVV的时候,顶点间的⽐例产⽣了变化,物体常常产⽣形变,所以在映射到屏幕坐标系时,必须对其进⾏⽐例恢复。

采⽤的⽅法是:将近平⾯(即视平⾯)的宽⾼⽐例⼀开始就调整为与视⼝宽⾼⽐相同。

透视变换算法

透视变换算法

透视变换算法
透视变换(Perspective Transformation)是一种将图像投影到一个新的视平面的变
换算法。

其基本原理是利用透视中心、像点、目标点三点共线的条件,按透视旋转定律使承影面(透视面)绕迹线(透视轴)旋转某一角度,破坏原有的投影光线束,仍能保持承影面上投影几何图形不变的变换。

透视变换矩阵可以理解为透视变换的公式表达,其通用变换公式为:(u,v)为原始图像像素坐标,(x=x’/w’,y=y’/w’)为变换之后的图像像素坐标。

在应用中,例如在移动机器人视觉导航研究中,由于摄像机与地面之间有一倾斜角,而不是直接垂直朝下(正投影),有时希望将图象校正成正投影的形式,就需要利用透视变换。

透视变换关系

透视变换关系

透视变换关系
透视变换是一种几何变换,它可以将一个三维场景投影到二维平面上,以产生透视效果。

透视变换涉及到相机的位置、视角和投影平面等因素。

以下是透视变换中的一些主要关系:
1. 相机坐标系和世界坐标系:在透视变换中,通常存在一个相机坐标系和一个世界坐标系。

相机坐标系是相对于相机的坐标系,以相机为原点,相机视线方向为Z轴正方向。

世界坐标系是相对于场景的坐标系,以场景中的某个点为原点。

2. 相机位置:相机位置表示相机在世界坐标系中的位置。

它决定了相机与场景之间的距离和视角。

3. 相机朝向和视角:相机朝向是指相机的视线方向,它决定了相机观察场景时的视角。

视角越大,场景中的物体看起来越小;视角越小,场景中的物体看起来越大。

4. 投影平面:投影平面是指将场景投影到二维平面的平面。

在透视变换中,通常使用\*\*面和远平面来定义投影平面的范围。

5. 投影矩阵:投影矩阵是一个4x4的矩阵,它将三维场景坐标转换为二维投影坐标。

常见的投影矩阵包括透视投影矩阵和正交投影矩阵。

透视变换的关系可以通过数学公式和矩阵运算来表示和计算。

具体的数学推导和计算方法超出了本回答的范围,但理解上述关系可以帮助我们理解透视变换的原理和应用。

在计算机图形学和计算机视觉领域,透视变换被广泛应用于三维模型渲染、虚拟现实、机器人导航等领域。

透视变换原理

透视变换原理

透视变换原理
透视变换是一种用于图像处理和计算机视觉的技术,用于将平面图像转换为透视或透视投影的效果,以模拟人眼所感知到的透视效果。

透视变换的原理是基于成像原理和相机模型的基础上进行的。

在相机模型中,通过视点、投影面和物体之间的关系来描述透视效果。

在成像原理中,相机通过光线将物体的信息投影到感光元件上,形成一个二维的图像。

透视变换主要涉及到三个方面的变换:位移、旋转和缩放。

位移变换用于调整图像在平面上的位置,旋转变换用于调整图像在平面上的方向,而缩放变换则是调整图像在平面上的大小。

通过这些变换,可以将平面上的图像映射到一个透视投影的效果上。

透视变换的过程中,首先需要确定相机的参数,包括视点位置、投影面的位置和大小等。

然后,利用相机模型和成像原理,计算出每个像素在透视投影平面上的位置。

最后,根据计算得到的位置信息,将原始图像上的像素映射到透视投影平面上,得到最终的透视变换效果。

透视变换在计算机图形学、虚拟现实、增强现实等领域有着广泛的应用。

它可以用于场景重建、虚拟漫游、物体跟踪等任务中,能够为用户提供更加真实、直观的图像体验。

一点透视变换矩阵推导

一点透视变换矩阵推导

一点透视变换矩阵推导透视变换矩阵是用来进行透视投影的数学工具。

在三维计算机图形学中,透视投影是一种模拟人眼观察远近物体时产生的透视效果的方法。

透视变换矩阵的推导涉及到线性代数和几何学的知识。

首先,我们考虑一个简化的情况,即相机位于世界坐标系的原点,观察方向与Z轴平行,投影平面位于Z=1处。

在这种情况下,透视投影可以用一个简单的公式来表示,\[ (x_p, y_p, z_p) =(\frac{x}{z}, \frac{y}{z}, 1) \]其中,\( (x_p, y_p, z_p) \) 是投影平面上的点的坐标,\( (x, y, z) \) 是相机坐标系中的点的坐标。

这个公式表示了在Z轴方向上的线性缩放,以及在X和Y轴方向上的透视除法。

现在考虑一般情况下的透视投影。

我们需要引入一个投影矩阵,它可以将相机坐标系中的点变换到投影平面上。

这个投影矩阵通常表示为4x4的矩阵,记作P。

为了推导透视变换矩阵,我们需要考虑相机的内参矩阵K,相机的外参矩阵R和T,以及相机坐标系中的点的坐标\( (X_c, Y_c,Z_c, 1) \)。

透视变换矩阵可以通过将相机坐标系中的点变换到裁剪坐标系中,再将裁剪坐标系中的点变换到屏幕坐标系中来推导。

透视变换矩阵的推导过程比较复杂,涉及到齐次坐标、投影平面的定义、透视除法等多个概念。

推导的细节可以参考计算机图形学的相关教材或者资料。

总的来说,透视变换矩阵是通过将相机坐标系中的点变换到投影平面上来实现透视投影效果的数学工具。

它涉及到线性代数、几何学和计算机图形学等多个领域的知识。

希望这个回答能够帮助你理解透视变换矩阵的推导过程。

透视变换原理

透视变换原理

透视变换原理透视变换是计算机视觉和图形学领域中的重要概念,它在图像处理和计算机图形学中有着广泛的应用。

透视变换的原理是基于相机成像的几何关系,通过对图像进行透视变换,可以实现图像的旋转、缩放、平移等操作,同时也可以实现三维场景到二维图像的投影。

在进行透视变换时,首先需要了解相机成像的原理。

相机成像是基于针孔相机模型的,即通过一个小孔投影光线到感光元件上,形成图像。

在这个过程中,光线会经过透视变换,远处的物体会显得小,近处的物体会显得大,这就是透视效应。

而透视变换就是利用这一原理,对图像进行变换。

透视变换的原理可以用数学方法进行描述。

在进行透视变换时,需要确定一个视角点和一个投影平面。

通过将三维空间中的点投影到投影平面上,可以得到二维图像。

透视变换的过程可以用矩阵运算来表示,通过变换矩阵对图像进行变换,实现旋转、缩放、平移等操作。

透视变换的原理还涉及到投影矩阵的计算。

投影矩阵是描述相机成像过程的关键参数,它包括了相机的内参和外参,可以将三维空间中的点映射到二维图像上。

通过调整投影矩阵的参数,可以实现不同的透视效果,包括近大远小、近小远大等效果。

除了基本的透视变换,还有一些特殊的透视变换方法,例如透视畸变矫正、透视投影校正等。

这些方法可以在实际应用中对图像进行更精细的处理,提高图像的质量和准确性。

总之,透视变换是图像处理和计算机图形学中的重要概念,它基于相机成像的几何关系,通过对图像进行透视变换,可以实现图像的旋转、缩放、平移等操作,同时也可以实现三维场景到二维图像的投影。

了解透视变换的原理对于理解图像处理和计算机图形学有着重要的意义,也为实际应用提供了重要的技术支持。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

透视投影是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)写成矩阵的形式:这里(a,b,c,o)是坐标基矩阵,右边的列向量分别是向量v和点p在基下的坐标。

这样,向量和点在同一个基下就有了不同的表达:3D向量的第4个代数分量是0,而3D 点的第4个代数分量是1。

像这种这种用4个代数分量表示3D几何概念的方式是一种齐次坐标表示。

“齐次坐标表示是计算机图形学的重要手段之一,它既能够用来明确区分向量和点,同时也更易用于进行仿射(线性)几何变换。

”—— F.S. Hill, JR这样,上面的(1, 4, 7)如果写成(1,4,7,0),它就是个向量;如果是(1,4,7,1),它就是个点。

下面是如何在普通坐标 (Ordinary Coordinate)和齐次坐标(Homogeneous Coordinate)之间进行转换:从普通坐标转换成齐次坐标时,如果(x,y,z)是个点,则变为(x,y,z,1);如果(x,y,z)是个向量,则变为 (x,y,z,0)从齐次坐标转换成普通坐标时,如果是(x,y,z,1),则知道它是个点,变成(x,y,z);如果是(x,y,z,0),则知道它是个向量,仍然变成(x,y,z)以上是通过齐次坐标来区分向量和点的方式。

从中可以思考得知,对于平移T、旋转R、缩放S这3个最常见的仿射变换,平移变换只对于点才有意义,因为普通向量没有位置概念,只有大小和方向,这可以通过下面的式子清楚地看出:而旋转和缩放对于向量和点都有意义,你可以用类似上面齐次表示来检测。

从中可以看出,齐次坐标用于仿射变换非常方便。

此外,对于一个普通坐标的点P=(Px, Py, Pz),有对应的一族齐次坐标(wPx, wPy, wPz, w),其中w不等于零。

比如,P(1, 4, 7)的齐次坐标有(1, 4, 7, 1)、(2, 8, 14, 2)、(-0.1, -0.4, -0.7, -0.1)等等。

因此,如果把一个点从普通坐标变成齐次坐标,给x,y,z乘上同一个非零数w,然后增加第4个分量w;如果把一个齐次坐标转换成普通坐标,把前三个坐标同时除以第4个坐标,然后去掉第4个分量。

由于齐次坐标使用了4个分量来表达3D概念,使得平移变换可以使用矩阵进行,从而如F.S. Hill, JR所说,仿射(线性)变换的进行更加方便。

由于图形硬件已经普遍地支持齐次坐标与矩阵乘法,因此更加促进了齐次坐标使用,使得它似乎成为图形学中的一个标准。

简单的线性插值这是在图形学中普遍使用的基本技巧,我们在很多地方都会用到,比如2D位图的放大、缩小,Tweening变换,以及我们即将看到的透视投影变换等等。

基本思想是:给一个x属于[a, b],找到y属于[c, d],使得x与a的距离比上ab长度所得到的比例,等于y与c的距离比上cd长度所得到的比例,用数学表达式描述很容易理解:这样,从a到b的每一个点都与c到d上的唯一一个点对应。

有一个x,就可以求得一个y。

此外,如果x不在[a, b]内,比如x < a或者x > b,则得到的y也是符合y < c或者y > d,比例仍然不变,插值同样适用。

透视投影变换好,有了上面两个理论知识,我们开始分析这次的主角——透视投影变换。

这里我们选择OpenGL的透视投影变换进行分析,其他的 APIs会存在一些差异,但主体思想是相似的,可以类似地推导。

经过相机矩阵的变换,顶点被变换到了相机空间。

这个时候的多边形也许会被视锥体裁剪,但在这个不规则的体中进行裁剪并非那么容易的事情,所以经过图形学前辈们的精心分析,裁剪被安排到规则观察体(Canonical View Volume, CVV)中进行,CVV是一个正方体,x, y, z的范围都是[-1,1],多边形裁剪就是用这个规则体完成的。

所以,事实上是透视投影变换由两步组成:1)用透视变换矩阵把顶点从视锥体中变换到裁剪空间的CVV中。

2)CVV裁剪完成后进行透视除法(一会进行解释)。

我们一步一步来,我们先从一个方向考察投影关系。

上图是右手坐标系中顶点在相机空间中的情形。

设P(x,z)是经过相机变换之后的点,视锥体由eye——眼睛位置,np——近裁剪平面,fp——远裁剪平面组成。

N是眼睛到近裁剪平面的距离,F是眼睛到远裁剪平面的距离。

投影面可以选择任何平行于近裁剪平面的平面,这里我们选择近裁剪平面作为投影平面。

设P’(x’,z’)是投影之后的点,则有z’ = -N。

通过相似三角形性质,我们有关系:同理,有这样,我们便得到了P投影后的点P’从上面可以看出,投影的结果z’始终等于-N,在投影面上。

实际上,z’对于投影后的P’已经没有意义了,这个信息点已经没用了。

但对于3D图形管线来说,为了便于进行后面的片元操作,例如z缓冲消隐算法,有必要把投影之前的z保存下来,方便后面使用。

因此,我们利用这个没用的信息点存储z,处理成:这个形式最大化地使用了3个信息点,达到了最原始的投影变换的目的,但是它太直白了,有一点蛮干的意味,我感觉我们最终的结果不应该是它,你说呢?我们开始结合CVV进行思考,把它写得在数学上更优雅一致,更易于程序处理。

假入能够把上面写成这个形式:那么我们就可以非常方便的用矩阵以及齐次坐标理论来表达投影变换:其中哈,看到了齐次坐标的使用,这对于你来说已经不陌生了吧?这个新的形式不仅达到了上面原始投影变换的目的,而且使用了齐次坐标理论,使得处理更加规范化。

注意在把变成的一步我们是使用齐次坐标变普通坐标的规则完成的。

这一步在透视投影过程中称为透视除法(Perspective Division),这是透视投影变换的第2步,经过这一步,就丢弃了原始的z值(得到了CVV中对应的z值,后面解释),顶点才算完成了投影。

而在这两步之间的就是CVV裁剪过程,所以裁剪空间使用的是齐次坐标,主要原因在于透视除法会损失一些必要的信息(如原始z,第4个-z保留的)从而使裁剪变得更加难以处理,这里我们不讨论CVV裁剪的细节,只关注透视投影变换的两步。

矩阵就是我们投影矩阵的第一个版本。

你一定会问为什么要把z写成有两个原因:1)P’的3个代数分量统一地除以分母-z,易于使用齐次坐标变为普通坐标来完成,使得处理更加一致、高效。

2)后面的CVV是一个x,y,z的范围都为[-1,1]的规则体,便于进行多边形裁剪。

而我们可以适当的选择系数a和b,使得这个式子在z = -N的时候值为-1,而在z = -F的时候值为1,从而在z方向上构建CVV。

接下来我们就求出a和b:这样我们就得到了透视投影矩阵的第一个版本:使用这个版本的透视投影矩阵可以从z方向上构建CVV,但是x和y方向仍然没有限制在[-1,1]中,我们的透视投影矩阵的下一个版本就要解决这个问题。

为了能在x和y方向把顶点从Frustum情形变成CVV情形,我们开始对x和y进行处理。

先来观察我们目前得到的最终变换结果:我们知道-Nx / z的有效范围是投影平面的左边界值(记为left)和右边界值(记为right),即[left, right],-Ny / z则为[bottom, top]。

而现在我们想把-Nx / z 属于[left, right]映射到x属于[-1, 1]中,-Ny / z属于[bottom, top]映射到y属于[-1, 1]中。

你想到了什么?哈,就是我们简单的线性插值,你都已经掌握了!我们解决掉它:则我们得到了最终的投影点:下面要做的就是从这个新形式出发反推出下一个版本的透视投影矩阵。

注意到是经过透视除法的形式,而P’只变化了x和y分量的形式,az+b和-z是不变的,则我们做透视除法的逆处理——给P’每个分量乘上-z,得到而这个结果又是这么来的:则我们最终得到:M 就是最终的透视变换矩阵。

相机空间中的顶点,如果在视锥体中,则变换后就在CVV中。

如果在视锥体外,变换后就在CVV外。

而CVV本身的规则性对于多边形的裁剪很有利。

OpenGL在构建透视投影矩阵的时候就使用了M的形式。

注意到M的最后一行不是(0 0 0 1)而是(0 0 -1 0),因此可以看出透视变换不是一种仿射变换,它是非线性的。

另外一点你可能已经想到,对于投影面来说,它的宽和高大多数情况下不同,即宽高比不为1,比如640/480。

而CVV的宽高是相同的,即宽高比永远是1。

这就造成了多边形的失真现象,比如一个投影面上的正方形在CVV的面上可能变成了一个长方形。

解决这个问题的方法就是在对多变形进行透视变换、裁剪、透视除法之后,在归一化的设备坐标(Normalized Device Coordinates)上进行的视口(viewport)变换中进行校正,它会把归一化的顶点之间按照和投影面上相同的比例变换到视口中,从而解除透视投影变换带来的失真现象。

相关文档
最新文档