当前位置:文档之家› 逆透视变换程序

逆透视变换程序

逆透视变换程序
逆透视变换程序

图像处理课后习题

第一章绪论 1. 模拟图像处理与数字图像处理主要区别表现在哪些方面? (什么是图像?什么是数字图像?什么是灰度图像?模拟图像处理与数字图像处理主要区别表现在哪些方面?) 图像:是对客观对象的一种相似性的、生动性的描述或写真。 数字图像:一种空间坐标和灰度均不连续的、用离散数字(一般用整数)表示的图像。 灰度图像:在计算机领域中,灰度数字图像是每个像素只有一个采样颜色的图像。在数字图像领域之外,“黑白图像”也表示“灰度图像”,例如灰度的照片通常叫做 “黑白照片”。 模拟图像处理与数字图像处理主要区别:模拟图像处理是利用光学、照相方法对模拟图像的处理。(优点:速度快,一般为实时处理,理论上讲可达到光的速度, 并可同时并行处理。缺点:精度较差,灵活性差,很难有判断能力和非线性处理能力) 数字图像处理(称计算机图像处理,指将图像信号转换成数字格式并利用计算机对数据进行处理的过程)是利用计算机对数字图像进行系列操作,从而达到某种预期目的的技术.(优点:精度高,内容丰富,可进行复杂的非线性处理,灵活的变通能力,一只要改变软件就可以改变处理内容) 2. 图像处理学包括哪几个层次?各层次间有何区别和联系? 数字图像处理可分为三个层次:狭义图像处理、图像分析和图像理解。狭义图像处理是对输入图像进行某种变换得到输出图像,是一种图像到图像的过程。 图像分析主要是对图像中感兴趣的目标进行检测和测量,从而建立对图像目标的描述,图像分析是一个从图像到数值或符号的过程。 图像理解则是在图像分析的基础上,基于人工智能和认知理论研究图像中各目标的性质和它们之间的相互联系,对图像内容的含义加以理解以及对原来客观场景加以解译,从而指导和规划行动。 区别和联系:狭义图像处理是低层操作,它主要在图像像素级上进行处理,处理的数据量非常大;图像分析则进入了中层,经分割和特征提取,把原来以像素构成的图像转变成比较简洁的、非图像形式的描述;图像理解是高层操作,它是对描述中抽象出来的符号进行推理,其处理过程和方法与人类的思维推理有许多类似之处。 3. 图像处理与计算机图形学的区别与联系是什么? 数字图像处理,是指有计算机及其它有关的数字技术,对图像施加某种运算和处理,从而达到某种预期的目的,而计算机图形学是研究采用计算机生成,处理和显示图形的一门科学。 二者区别:研究对象不同,计算机图形学研究的研究对象是能在人的视觉系统中产生视觉印象的事物,包括自然景物,拍摄的图片,用数学方法描述的图形等,而数字图像处理研究对象是图像;研究内容不同,计算机图像学研究内容为图像生成,透视,消阴等,而数字图像处理研究内容为图像处理,图像分割,图像透析等;过程不同,计算机图像学是由数学公式生成仿真图形或图像,而数字图像处理是由原始图像处理出分析结果,计算机图形与图像处理是逆过程。 结合每个人的本专业学科、工作应用,谈谈数字图像处理的关系或在本专业学科中的应用。 检测技术与自动化装置是把自动化、电子、计算机、控制工程、信息处理、机械等多种

立方体纹理映射

1问题描述与算法思想 1.1纹理映射简介 纹理映射(Texture Mapping)是将纹理空间中的纹理像素映射到屏幕空间中的像素的过程。在三维图形中,纹理映射(Texture Mapping)的方法运用得最广,尤其描述具有真实感的物体。比如绘制一面砖墙,就可以使用一幅具有真实感的图像或者照片作为纹理贴到一个矩形上,这样,一面逼真的砖墙就画好了。如果不用纹理映射的方法,这墙上的每一块砖都要作为一个独立的多边形来绘制。另外,纹理映射能够保证在变换多边形时,多边形上的纹理也会随之变化。例如,用透视投影模式观察墙面时,离视点远的墙壁的砖块的尺寸就会缩小,而离视点近的就会大些,这些是符合视觉规律的。此外,纹理映射也被用在其他一些领域。如飞行仿真中常把一大片植被的图像映射到一些大多边形上用以表示地面,或者用大理石、木材等自然物质的图像作为纹理映射到多边形上表示相应的物体。纹理对象通过一个单独的数字来标识。这允许硬件能够在内存中保存多个纹理,而不是每次使用的时候再加载它们,从而减少了运算量,提高了速度。纹理映射是真实感图像制作的一个重要部分,运用它可以方便的制作出极具真实感的图形而不必花过多时间来考虑物体的表面细节。然而纹理加载的过程可能会影响程序运行速度,当纹理图像非常大时,这种情况尤为明显。如何妥善的管理纹理,减少不必要的开销,是系统优化时必须考虑的一个问题。还好,相关软件提供了纹理对象对象管理技术来解决上述问题。与显示列表一样,纹理对象通过一个单独的数字来标识。 立方体映射(cube-map)纹理是一种特殊类型的纹理,用于环境映射,使用一组图像并把他们作为立方体的面。立方体映射的6个面用正方形并且大小相同的6个子纹理表示。要从立方体纹理中采样的时候,使用的纹理坐标是3维,并且被看做来自原点的方向。方向指向用来读取纹理的立方体映射表面的位置。立方体纹理映射主要思想是通过观察向量和表面的法向量反射来确定采样的纹理坐标。 1.2实验目的 1) 掌握位图纹理读入方法; 2)掌握立方体纹理映射算法。 1.3功能要求 1)建立三维坐标系Oxyz,远点位于屏幕客户区中心,x轴水平向右为正,y轴垂直向上为正,z轴垂直于屏幕指向观察者。 2)设置屏幕背景色为黑色。 3)读入六张构成天空盒的位图作为纹理映射到立方体的可见表面上。 4)按下鼠标左键缩小立方体,按下鼠标右键增大立方体。 5)使用键盘方向旋转纹理立方体。 6)使用动画按钮播放或停止立方体动画。 1.4算法原理(算法思想) 立方体进行纹理映射是纹理对象并不是直接绑定到着色器,而是绑定到一个

透视投影(Perspective Projection)变换推导

透视投影是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)之间进行转换:

深入探索3D拾取技术

深入探索3D拾取技术 在游戏中,玩家需要通过点击2D屏幕来选择3D物体,这个过程就是拾取(picking)。拾取是3D游戏必不可少的基本操作,它实现了玩家和游戏世界内对象的交互。 虽然拾取技术很基本,但它却迷惑了很多3D初学者。很多朋友都问过我关于拾取的细节问题,这让我觉得很有必要具体探讨一下该技术。其实,拾取之所以让很多开发者感到复杂,主要原因在于它跨域了流水线的多个阶段,并且是逆流水线上行。另外,它是一个2D信息扩展到3D的过程,必须对信息做相应的扩展和额外的计算才能够得到正确的结果。下面我门具体分析一下这个技术。 水流线主要阶段分析 我们来直观地看一下从相机空间到viewport的变换 相机空间中的一个顶点v,经过透视变换后进入了CVV中。这个变换矩阵实际上完成了两个工作: 1)将顶点从3D空间投影到2D的投影平面(Projection Plane)上。 2)将投影平面上的2D投影点通过线性插值变换到齐次裁剪空间CVV中。 这些变换都通过透视矩阵一次完成。我之所以把这一步分解为两步,因为这对于分析拾取很重要。 顶点进入齐次裁剪空间并经过CVV裁剪,最终进行透视除法从4D齐次形式变回成3D形式。然后经过一个线性插值(被封装在视口(viewport)变换中),变换到viewport中,多个点以三角形的形式经过光栅化后被玩家看到。最后一步的点变换可以描述为: 3)将CVV中的点通过线性插值变换到viewport中。

分析了这个变换过程之后,我们知道了从相机空间开始实际处理点位置信息的操作,就是上面的三个步骤。这样,我们可以先把顶点从viewport中先变换回投影平面上,也就是我们可以先完成(2)和(3)的逆处理。这里我们不用考虑裁剪和透视除法这些操作,因为反推的时候,处于视口中的点,已经是经过裁剪后留下的有效点了,必定处于CVV内,也必定处于projection plane内!而且从viewport逆变换到projection plane,点一直保持2D形式。 picking的开始是玩家在屏幕上点击一个位置——这实际上是在viewport中进行了点击。我们通过响应玩家的点击事件,得到在viewport中的点击位置,记为P0(Xp0,Yp0)。然后我们把p0从viewport中线性插值到CVV中,得到P1(Xp1,Yp1): 上面的线性插值(如果对线性插值公式不熟悉,请参考《深入探索透视投影变换》一文中的线性插值部分)公式在x方向上计算出了CVV中的P1,y方向的公式同理。接下来我们再把P1从CVV中变换到projection plane中,得到P2(Xp2,Yp2): y方向的计算同理。P2就是viewport中玩家点击的点在projection plane上所对应的位置。目前来看很好。我们已经获得了相机空间中的投影平面上,玩家点击的位置。但目前的点是一个2D点——它处于投影平面上。玩家需要拾取的是一个3D对象,因此我们需要将2D信息拓展到3D中。 向3D世界拓展 将2D的点信息拓展到3D空间进行picking,会使用射线(ray)进行。ray就是一端固定,另一端无限延伸的线性模型。如下图所示:

深入探索透视投影变换

深入探索透视投影变换 -Twinsen编写 -本人水平有限,疏忽错误在所难免,还请各位数学高手、编程高手不吝赐教 -email: popyy@https://www.doczj.com/doc/b07207969.html, 透视投影是3D固定流水线的重要组成部分,是将相机空间中的点从视锥体(frustum)变换到规则观察体(Canonical View Volume)中,待裁剪完毕后进行透视除法的行为。在算法中它是通过透视矩阵乘法和透视除法两步完成的。 透视投影变换是令很多刚刚进入3D图形领域的开发人员感到迷惑乃至神秘的一个图形技术。其中的理解困难在于步骤繁琐,对一些基础知识过分依赖,一旦对它们中的任何地方感到陌生,立刻导致理解停止不前。 没错,主流的3D APIs如OpenGL、D3D的确把具体的透视投影细节封装起来,比如 gluPerspective(…)就可以根据输入生成一个透视投影矩阵。而且在大多数情况下不需要了解具体的内幕算法也可以完成任务。但是你不觉得,如果想要成为一个职业的图形程序员或游戏开发者,就应该真正降伏透视投影这个家伙么?我们先从必需的基础知识着手,一步一步深入下去(这些知识在很多地方可以单独找到,但我从来没有在同一个地方全部找到,但是你现在找到了 )。 我们首先介绍两个必须掌握的知识。有了它们,我们才不至于在理解透视投影变换的过程中迷失方向(这里会使用到向量几何、矩阵的部分知识,如果你对此不是很熟悉,可以参考《向量几何在游戏编程中的使用》系列文章)。 齐次坐标表示 透视投影变换是在齐次坐标下进行的,而齐次坐标本身就是一个令人迷惑的概念,这里我们先把它理解清楚。 根据《向量几何在游戏编程中的使用6》中关于基的概念。对于一个向量v以及基oabc, 可以找到一组坐标(v1,v2,v3),使得 v = v1 a + v2 b + v3 c (1)

深入探索透视投影矩阵.

-Twinsen 编写 - 本人水平有限,疏忽错误在所难免,还请各位数学高手、编程高手不吝赐教 -email: 透视投影是 3D 固定流水线的重要组成部分,是将相机空间中的点从视锥 体 (frustum) 变换到规则观察体 (Canonical View Volume) 中,待裁剪完毕后进行透视除法的行为。在算法中它是通过透视矩阵乘法和透视除法两步完成的。 透视投影变换是令很多刚刚进入 3D 图形领域的开发人员感到迷惑乃至神秘的一个图形技术。其中的理解困难在于步骤繁琐,对一些基础知识过分依赖,一旦对它们中的任何地方感到陌生,立刻导致理解停止不前。 没错,主流的 3D APIs 如 OpenGL 、 D3D 的确把具体的透视投影细节封装起来,比如 gluPerspective(…) 就可以根据输入生成一个透视投影矩阵。而且在大多数情况下不需要了解具体的内幕算法也可以完成任务。但是你不觉得,如果想要成为一个职业的图形程序员或游戏开发者,就应该真正降伏透视投影这个家伙么?我们先从必需的基础知识着手,一步一步深入下去(这些知识在很多地方可以单独找到,但我从来没有在同一个地方全部找到,但是你现在找到了)。 我们首先介绍两个必须掌握的知识。有了它们,我们才不至于在理解透视投影变换的过程中迷失方向(这里会使用到向量几何、矩阵的部分知识,如果你对此不是很熟悉,可以参考《向量几何在游戏编程中的使用》系列文章)。 齐次坐标表示 透视投影变换是在齐次坐标下进行的,而齐次坐标本身就是一个令人迷惑的概念,这里我们先把它理解清楚。 根据《向量几何在游戏编程中的使用 6 》中关于基的概念。对于一个向量 v 以及基 oabc ,

深入探索正交投影变换

深入探索正交投影变换 之前我们在《深入探索透视投影变换》以及《深入探索透视投影变换(续)》中研究了OpenGL、D3D以及M3G的透视投影变换的原理以及生成方法。这些方法在当前的主流图形API 中得到了普遍使用。但关于投影应用,还有一类经常使用的投影方式需要我们深入理解——正交投影,我们在本篇文章里面研究它(这里假设读者已经看过前两篇文章,并理解了绝大多数的理论,因为正交投影比透视投影的推导关系简单得多,因此我们的推导会非常得快,如果读者有任何的不解,请参考前两篇文章或者通过email联系我)。 在具体研究之前我觉得有必要把平面投影的分类简单介绍一下,目的是为了让大家有一个总体的认识,从而更好的理解这个知识体系。请看下图: 平面投影分为平行投影和透视投影两种类型,后者我们在前两篇文章中介绍了。平行投影则是具有矩形观察体的投影方式(透视投影则是视锥观察体),它不会根据物体离视点的远近缩放物体(透视投影则会)。平行投影可以分成侧投影和正交投影两种类型。这两种类型如何区分呢?我们继续看图吧: 上图中,v是投影平面,n是它的法线。p和q是平面外两点,p’和q’分别是它们在平面上的投影点。q的投影方向向量为Q = 单位化(q’-q),而p的投影方向向量为P = 单

位化(p’-p),其中Q不平行于n而P平行于n,则q的投影叫做侧投影,而p的投影叫做正交投影。正交投影是我们今天的研究对象。 实际上上面对平面投影的分类还可以继续向下细分,比如透视投影可以分为一灭点、二灭点以及三灭点透视投影。侧投影则可以继续分为散点侧投、斜二轴侧投等等。而正交投影则可以分成轴侧投影以及多视点正交投影等等。如果读者对此感兴趣,可以参考相关的图形学教程。 接下来我们研究正交投影。分别介绍OpenGL、D3D以及M3G的。我们的环境约定(左右手坐标系、行列向量乘法、CVV范围)仍然尊重相应API自己的设置。 OpenGL正交投影变换 下图是OpenGL的右手坐标系中观察空间的情形,我们看到的是正交投影的矩形观察体,原点是相机位置,n是近裁剪平面到相机平面的距离,f是远裁剪平面到相机平面的距离。p是观察体中的一个点,p’是它投影之后的点。 投影之后我们有关系: 因为是正交投影,没有统一的投影射线目标点,因此投影之后的x和y不会变,而z 则永远地变成了-n,跑到了投影平面上(我们让投影平面和近裁剪平面重合),它已经没用了,则我们用这个没用的信息保存z(为了之后片元操作的时候用),写为:

一种透视变换图像金字塔匹配改进算法

2007,43(24)ComputerEngineeringandApplications计算机工程与应用 图像匹配算法由特征空间、相似性度量、变换类型和变换参数搜索四方面组成[1]。特征空间是指从原始图像中抽取的用于参与匹配的信息;相似性度量用来衡量待配准图像和参考图像之间的相似程度;变换类型用来刻画两幅图像之间几何位置的差别;变换参数的搜索指用什么方式来寻找变换类型中的参数,使得相似性度量达到极值点。 照片在拍摄时,受光照时间、角度、环境和噪声的影响,存在灰度失真和几何畸变。在这种条件下,匹配算法如何达到精度高、速度快以及抗干扰性强是人们追求的目标。目前图像匹配算法可以分为基于灰度相关的匹配算法、基于特征的匹配算法以及基于相位相关的匹配算法。 本文从提高匹配算法的速度、精度和稳定性入手,用改进的LMA(Levenberg-MarquardtAalgorithm)对图像匹配进行了研究。用多分辨率图像金字塔法,从低分辨率开始,搜索图像透视变换过程中的8个参数,然后缩小搜索的范围,对较高分辨率进行搜索。通过对照片进行匹配测试,证明这种方法可提高子象素的匹配速度、精度和稳定性,使匹配照片的象素成最佳排列,并可以对光学和数字两种相机拍摄的图像进行匹配,效果较好。 1图像特征提取 图像中的边缘和拐点是显著的特征,其中包含了许多重要的信息。准确地提取图像中的特征是算法鲁棒性的前提和保障。本文首先提取图像的边缘信息,再从边缘点中抽取特征较强的点,即拐点,作为最后的特征点。需要用到的边缘信息包括边缘点的位置、梯度方向及梯度值。首先利用Canny算法[6]提取图像的边缘。对图像中任一点p(i,j),规定向左和向下为正方向!i,j,则梯度方向!i,j由下式得到: !i,j= !′!′∈[0,2π] !′+2nπ!′"[0,2π # ] !′= 3 2 πy>0,x=0 -argtgy x x>0 π 2 y>0,x=0 π-argtg y x x< $ & & & & & & & & & & % & & & & & & & & & & ’ 0 (1)其中x= I(i+1,j)-I(i-1,j) 2 ,y= I(i,j+1)-I(i,j-1) 2 ,n为适当整数,使!落在区间[0,2π]内。 梯度值-Mag(i,j)由下式给出: Magp=(I(i+1,j)-I(i-1,j) 2 )2+( I(i,j+1)-I(i,j-1) 2 )2 ((2)上面得到的!i,j在[0,2π]内,取值复杂且不是整数,不利于进一步的处理。因此,将!i,j按 π 4 为区间长度进行归类,即Cp=n,当 一种透视变换图像金字塔匹配改进算法 金勇俊,李言俊,张科 JINYong-jun,LIYan-jun,ZHANGKe 西北工业大学航天学院,西安710072 CollegeofAstronautics,NorthwesternPolytechnicalUniversity,Xi’an710072,China E-mail:jingyjun@yahoo.com.cn JINYong-jun,LIYan-jun,ZHANGKe.Improvedperspectivetransformationimagepyramidregistrationmethod.ComputerEngineeringandApplications,2007,43(24):78-80. Abstract:Inordertoimprovetherobustandpreciseinimageregistration,wegettheHessianmatrixremovedtoimproveLMAforsearchingtheeightunknownparametersoftwoinputperspectivetransformationimagesandgetcomputationalgains.Weusemulti-resolutionpyramidconsistsofasetofimagesrepresentinganimageinmulti-resolution.Withthecoarsestleveltothefinestlevelsearchstrategy,wegetlargecomputationalgainsandhelppreventgettingtrappedinlocalminima.Astheexperimen-talresultsreveal,thisapproachisefficientanduseful. Keywords:perspectivetransformation;imageregistration;pyramidimage;Levenberg-MarquardtAalgorithm(LMA) 摘要:为提高图像匹配的精度和稳定性,在图像匹配过程中用消除了Hessian矩阵的LMA改进算法对两幅图像透视变换矩阵的8个未知参数进行拟合,减少了迭代的计算量。匹配过程中用多分辨率金字塔法对图像进行分解,采用由粗到精的搜索策略,进一步减少了计算量并避免了误匹配。通过对照片进行匹配测试,证明了这种方法的有效性和实用价值。 关键词:透视变换;图像匹配;图像金字塔;LMA 文章编号:1002-8331(2007)24-0078-03文献标识码:A中图分类号:TP751 基金项目:国家航空科学基金资助项目(No.04I53067)。 作者简介:金勇俊,博士研究生,主要研究方向:图像匹配制导。 78

透视投影矩阵推导

在上一篇文章中我们讨论了透视投影变换的原理,分析了 OPe nGL 所使用的透视 投影矩阵的生成方法。正如我们所说,不同的图形APl 因为左右手坐标系、行向 量列向量矩阵以及变换范围等等的不同导致了矩阵的差异,可以有几十个不同的 透视投影矩阵,但它们的原理大同小异。这次我们准备讨论一下 DireCt3D (以 下简称D3D 以及J2ME 平台上的JSR184(M3G (以下简称M3G 的透视投影矩 阵,主要出于以下几个目的: (1) 我们在写图形引擎的时候需要采用不同的图形 API 实现,当前主要 是OPenGL 和D3D 虽然二者的推导极为相似,但 D3D 的自身特点导致了一些地 方仍然需要澄清。 (2) DireCtX SDK 的手册中有关于透视投影矩阵的一些说明,但并不详 细,甚至有一些错误,从而使初学者理解起来变得困难, 而这正是本文写作的目 的。 (3) M3G 是J2ME 平台上的3D 开发包,采用了 OPenG!作为底层标准进 行封装。它的透视投影矩阵使用 OPe nG 啲环境但又进行了简化,值得一提。 本文努力让读者清楚地了解D3D 与 M3G 透视投影矩阵的原理,从而能够知道它与 OPenG 啲一些差别,为构建跨 API 的图形引擎打好基础。需要指出的一点是为 了完全理解本文的内容,请读者先理解上一篇文章 《深入探索透视投影变换》的 内容,因为OPenGL 和它们的透视投影矩阵的原理非常相似,因此这里不会像上 一篇文章从基础知识讲起,而是对比它们的差异来推导变换矩阵。我们开始! OPenGL ? D3D 的基本差异 前面提到,不同API 的基本差异导致了最终变换矩阵的不同,而导致 OPenGL 和 D3D 的透视投影矩阵不同的原因有以下几个: (1) OPe nGL 默认使用右手坐标系,而 D3D 默认使用左手坐标系 OPerLGL ri^iUxandeci CoOrdinate system DmD handed coordinate SyStem

推导相机变换矩阵

推导相机变换矩阵 -潘宏 -2009.12.31 -本人水平有限,疏忽错误在所难免,还请各位数学高手、编程高手不吝赐教 -email: popyy@https://www.doczj.com/doc/b07207969.html, 一些网友写信给我希望能够了解固定流水线中世界空间到相机空间变换矩阵的具体推导过程。其实之前我在《向量几何在游戏编程中的使用6》中已经简单的把相机变换作为一个使用基理论的例子进行了说明,但可能仍然不够具体。这篇文章中,我会尽力阐述相机变换的整个来龙去脉。希望能够对正在学习固定流水线的朋友们有所帮助。这里我们仍然会在推导相机变换之前介绍几个理论知识,目的是为了更好的理解推导过程。我们马上开始! 什么是相机变换? 在流水线中,当物体从模型坐标通过世界矩阵变换到世界空间之后,它将通过相机变换从世界空间变换到相机空间。下图的固定流水线中,蓝色框中的部分就是这个过程。 其实,所谓的相机空间,就是以相机作为坐标原点的一个参考系,所以,从世界空间变换到相机空间,就是把物体从世界坐标系,变换到相机为原点的相机坐标系,如下图所示。

左半部分是小人在世界空间中的位置,右半部分是小人变换到相机空间后的位置。这样的一个变换可以有很多种方式来实现:欧拉相机系统、UVN系统、Two Points & A Twist等等。这里我们讨论最为广泛的UVN系统构建相机矩阵,如果读者对其他方法感兴趣,可以查找相关的资料。我们仍然讨论OpenGL的相机矩阵的推导,其他API可以类似的推导。 坐标转换公式 我们在《向量几何在游戏编程中的使用6》中提到了正交矩阵,这是在基理论基础上的一个概念(如果对基理论不是很熟悉,请参考《向量几何在游戏编程中的使用6》)。正交矩阵所有列(行)向量构成了一个标准正交基(它的列向量都是互相正交,并且长度为1),因此,可以把正交矩阵看成是对一个坐标系的描述。同时,我们知道:同一个向量,在不同的基下面的坐标是不同的。因此,可以用正交矩阵来代表坐标系(也可以看作基)从而写出在统一的参考系(全局坐标系)下同一个向量在不同基中的坐标。 上面的式子表示,参考系中向量v在基Q中的坐标是v’,在基R中的坐标是v’’(注意这里的环境下基矩阵是用列向量表示的,这样相乘之后的结果表示的是基向量的线性组合)。如下图,黑色基表示的是参考系,红色是基Q,蓝色是基R,v是参考系中的一个向量。

透视投影矩阵推导

在上一篇文章中我们讨论了透视投影变换的原理,分析了OpenGL所使用的透视投影矩阵的生成方法。正如我们所说,不同的图形API因为左右手坐标系、行向量列向量矩阵以及变换范围等等的不同导致了矩阵的差异,可以有几十个不同的透视投影矩阵,但它们的原理大同小异。这次我们准备讨论一下Direct3D(以下简称D3D)以及J2ME平台上的JSR184(M3G)(以下简称M3G)的透视投影矩阵,主要出于以下几个目的: (1) 我们在写图形引擎的时候需要采用不同的图形API实现,当前主要是OpenGL和D3D。虽然二者的推导极为相似,但D3D的自身特点导致了一些地方仍然需要澄清。 (2) DirectX SDK的手册中有关于透视投影矩阵的一些说明,但并不详细,甚至有一些错误,从而使初学者理解起来变得困难,而这正是本文写作的目的。 (3) M3G是J2ME平台上的3D开发包,采用了OpenGL作为底层标准进行封装。它的透视投影矩阵使用OpenGL的环境但又进行了简化,值得一提。 本文努力让读者清楚地了解D3D与M3G透视投影矩阵的原理,从而能够知道它与OpenGL的一些差别,为构建跨API的图形引擎打好基础。需要指出的一点是为了完全理解本文的内容,请读者先理解上一篇文章《深入探索透视投影变换》的内容,因为OpenGL和它们的透视投影矩阵的原理非常相似,因此这里不会像上一篇文章从基础知识讲起,而是对比它们的差异来推导变换矩阵。我们开始! OpenGL与D3D的基本差异 前面提到,不同API的基本差异导致了最终变换矩阵的不同,而导致OpenGL和D3D的透视投影矩阵不同的原因有以下几个: (1) OpenGL默认使用右手坐标系,而D3D 默认使用左手坐标系。

基于消失点的鲁棒逆透视变换

基于消失点的鲁棒逆透视变换 重庆大学硕士学位论文 (学术学位) 学生姓名:张代明 指导教师:房斌教授 专业:计算机应用技术 学科门类:工学 重庆大学计算机学院 二O一五年四月

Robust Inverse Perspective Mapping Based on Vanishing Point A Thesis Submitted to Chongqing University In Partial Fulfillment of the Requirement for the Master’s Degree of Engineering By Zhang Daiming Supervised by Prof. Fang Bin Specialty:Computer Application Technology College of Computer Science of Chongqing University, Chongqing, China April 2015

摘要 逆透视变换在计算机视觉和道路交通标志检测和识别方面得到了广泛的应用。逆透视变换是透视变换的逆过程,主要是结合相机的内在和外在参数,将图像从图像坐标系映射到世界坐标系,从而消除透视影响对图像检测和识别任务的干扰和误差。因此,鲁棒的逆透视变换对于透视影响的消除和获取图像信息的不变量有着非常重要的作用。本文主要研究了基于消失点的鲁棒逆透视变换及其应用,采用消失点对逆透视变换需要的部分偏转角度参数进行了自动计算,并将逆透视变换应用到导向箭头的检测和识别任务中。 首先,本文介绍了基于消失点的鲁棒逆透视变换的选题背景以及研究意义,总结了现有逆透视变换算法的国内外研究现状以及存在的难点问题。 其次,本文介绍了逆透视变换的基本概念及其数学原理,总结了逆透视变换在道路交通标线检测的广泛应用,并对常见逆透视变换方法进行了分类总结。从基于点变换的逆透视变换、基于矩阵变换的逆透视变换和基于简化相机模型推导的逆透视变换三个方面介绍了现有逆透视变换的优点和缺点。其中,本文主要介绍了基于简化相机模型推导的逆透视变换,该类逆透视变换方法计算简单,具有很高的实用价值。 再次,本文提出了一种基于消失点检测的鲁棒逆透视变换方法。消失点反映了图像的透视结构,可以采用消失点坐标对相机俯仰角和偏航角进行计算,为逆透视变换提供实时偏转角度参数,增强逆透视变换对于上下坡等非常规道路环境的鲁棒性。同时,改进了一种逆透视变换方法,加上了偏航角矫正,提高了道路平面俯视图的质量。本文首先检测出消失点坐标,然后根据消失点计算相机俯仰角和偏航角,最后通过逆透视变换得到道路平面的俯视图,消除道路平面的透视形变。 最后,本文将逆透视变换应用到导向箭头的检测和识别当中。导向箭头作为一种道路交通标线,对车辆的规范行驶有着重要的指示作用。因此,导向箭头的检测与识别可以为智能交通系统提供重要的导向信息。本文首先通过逆透视变换消除透视影响从而得到道路平面的俯视图,然后检测出导向箭头候选区域,最后对候选区域采用形状上下文进行形状特征提取,并结合基于蚁群优化的形状匹配算法来识别导向箭头。 关键词:消失点检测,逆透视变换,智能交通,导向箭头检测与识别,形状匹配

中国矿业大学地学可视化考试重点地学可视化复习资料讲解

中国矿业大学地学可视化考试重点地 学可视化复习

科学计算可视化:通过研制计算机工具、技术和系统,把实验或数值计算获得的大量抽象数据转换为人的视觉可以直接感受的计算机图形图像,从而可进行数据探索和分析,是帮助科学家理解信息的计算方法。 地学可视化:是将科学计算可视化应用于地球科学观察,对地学实验数据以及模型计算数据进行图形表达、显示和分析,以便于探索地学规律。 虚拟现实:一种基于可计算信息的沉浸式交互环境。以计算机技术为核心的由现代 高科技技术生成的逼真的视、听、触觉一体化的虚拟环境,用户借助必要的设备以自然的方式与虚拟环境中的对象进行交互作用、相互影响,从而产生亲临等同真实环境的感受和体验。 虚拟地理环境:为用户提供一个虚拟空间和世界,让用户以化身虚拟地进入该空间和世界,并“身临其境”地分析现实地理环境中的现象和过程。 数字地球:数字地球是以计算机技术、多媒体技术和大规模存储技术为基础,以宽带网络为纽带运用海量地球信息对地球进行多分辨率、多尺度、多时空和多种类的三维描述,并利用它作为工具来支持和改善人类活动和生活质量。 数字城市:指利用数字城市理论,运用地理信息系统、遥感、遥测、网络、多媒体及虚拟仿真等关键技术,深入开发与应用空间信息资源,对城市基础设施、功能机制进行自动采集、动态监测、管理和辅助决策的技术系统。 虚拟现实的特点: (1)沉浸感(Immersion)用户可以沉浸于计算机生成的虚拟环境中,所看、所听、所闻(嗅)、所触 完全与真实环境感受一样。三维、立体、多通道。 (2)交互性(Interaction )可采取现实生活中习以为常的方式来操纵虚拟环境中的物体。对于用户 的交互虚拟环境会做出的响应; (3)构想(Imag in atio n)

图像处理之直方图匹配.

直方图匹配,又称直方图规定化,即变换原图的直方图为规定的某种形式的直方图,从而使两幅图像具有类似的色调和反差。直方图匹配属于非线性点运算。 直方图规定化的原理:对两个直方图都做均衡化,变成相同的归一化的均匀直方图,以此均匀直方图为媒介,再对参考图像做均衡化的逆运算 ///

/// 直方图匹配 /// /// 原始图像 /// 匹配图像 /// 处理后图像 /// 处理成功true 失败false public static bool HistogramMatching(Bitmap srcBmp, Bitmap matchingBmp, out Bitmap dstBmp) { if (srcBmp == null || matchingBmp == null) { dstBmp = null; return false; } dstBmp = new Bitmap(srcBmp); Bitmap tempSrcBmp = new Bitmap(srcBmp); Bitmap tempMatchingBmp = new Bitmap(matchingBmp); double[] srcCpR = null; double[] srcCpG = null; double[] srcCpB = null; double[] matchCpB = null; double[] matchCpG = null; double[] matchCpR = null; //分别计算两幅图像的累计概率分布 getCumulativeProbabilityRGB(tempSrcBmp, out srcCpR, out srcCpG, out srcCpB); getCumulativeProbabilityRGB(tempMatchingBmp, out matchCpR, out matchCpG, out matchCpB); double diffAR = 0, diffBR = 0, diffAG = 0, diffBG = 0, diffAB = 0, diffBB = 0; byte kR = 0, kG = 0, kB = 0; //逆映射函数 byte[] mapPixelR = new byte[256]; byte[] mapPixelG = new byte[256]; byte[] mapPixelB = new byte[256]; //分别计算RGB三个分量的逆映射函数 //R for (int i = 0; i < 256; i++) { diffBR = 1; for (int j = kR; j < 256; j++) {

深入探索透视纹理映射(下)

深入探索透视纹理映射(下) 在上一篇文章中,我们探讨了学习透视纹理映射所需要的基础知识。我们知道了顶点在通过透视投影变换之后,是如何一步一步通过流水线进入屏幕空间的。也知道了一个非常简单的三角形扫描线转换算法,以及通过线性插值实现的仿射纹理映射。尽管我们使用的这个流程非常的直接、简洁,还有大量的细节没有添加(片元操作、雾化、颜色累加、混合等等等等),但这些真的就是组成一个固定流水线的简单光栅器的基本步骤了。但我们目前所提及的光栅化算法完全局限于屏幕空间——我们完全没有考虑进入屏幕空间之前的转换过程,只是在屏幕空间里面对纹理坐标玩弄线性插值。可正如我所说的,仿射纹理映射所基于的假设是不对的,对纹理坐标本身做线性插值也是不对的。那么,错在什么地方呢?我们来分析一下。 仿射纹理映射错在什么地方? 到底错在什么地方呢?我们再来看看我们上一篇的仿射纹理映射算法,我们把其中的一部分伪代码实现出来: double x, y, xleft, xright; double s, t, sleft, sright, tleft, tright, sstep, tstep; for(y = y0; y < y1; ++y) {

xleft = 用y和左边的直线方程来求出左边的x xright = 用y和右边的直线方程来求出右边的x sleft = (y – y0) * (s1 – s0) / (y1 – y0) + s0; sright = (y – y0) * (s2 – s0) / (y2 – y0) + s0; tleft = (y – y0) * (t1 – t0) / (y1 – y0) + t0; tright = (y – y0) * (t2 – t0) / (y2 – y0) + t0; sstep = (sright – sleft) / (xright – xleft); tstep = (tright – tleft) / ( xright – xleft); for(x = xleft, s = sleft, t = tleft; x < xright; ++x, s += sstep, t += tstep) { 帧缓冲像素[x, y] = 纹理[s, t]; } } 请注意,在上面的算法中,我们计算sleft、sright以及tleft、tright的时候,是做了关于y的线性插值。 这表明在y方向上,纹理坐标s和t的变化和y的变化是按照线性、均匀的方式处理的。另外,纹理坐标s和t的扫描线步长sstep和tstep的计算,是根据扫描线的长度平均分配纹理变化量,也是按照线性、均匀的方式处理的。但是问题在于:投影平面上的线性关系,还原到空间中,就不是那么回事了,这还要从透视投影那段说起,请看下图。

图像处理课后习题答案

第一章绪论 1.模拟图像处理与数字图像处理主要区别表现在哪些方面? (什么是图像?什么是数字图像?什么是灰度图像?模拟图像处理与数字图像处理主要区别表现在哪些方面?) 图像:是对客观对象的一种相似性的、生动性的描述或写真。 数字图像:一种空间坐标和灰度均不连续的、用离散数字(一般用整数)表示的图像。 灰度图像:在计算机领域中,灰度数字图像是每个像素只有一个采样颜色的图像。在数字图像领域之外,“黑白图像”也表示“灰度图像”,例 如灰度的照片通常叫做“黑白照片”。 模拟图像处理与数字图像处理主要区别:模拟图像处理是利用光学、照相方法对模拟图像的处理。(优点:速度快,一般为实时处理,理论上讲可达到光的速度,并可同时并行处理。缺点:精度较差,灵活性差,很难有判断能力和非线性处理能力) 数字图像处理(称计算机图像处理,指将图像信号转换成数字格式并利用计算机对数据进行处理的过程)是利用计算机对数字图像进行系列操作,从而达到某种预期目的的技术.(优点:精度高,内容丰富,可进行复杂的非线性处理,灵活的变通能力,一只要改变软件就可以改变处理内容) 2.图像处理学包括哪几个层次?各层次间有何区别和联系? 数字图像处理可分为三个层次:狭义图像处理、图像分析和图像理解。 狭义图像处理是对输入图像进行某种变换得到输出图像,是一种图像到图像的过程。 图像分析主要是对图像中感兴趣的目标进行检测和测量,从而建立对图像目标的描述,图像分析是一个从图像到数值或符号的过程。 图像理解则是在图像分析的基础上,基于人工智能和认知理论研究图像中各目标的性质和它们之间的相互联系,对图像内容的含义加以理解以及对原来客观场景加以解译,从而指导和规划行动。 区别和联系:狭义图像处理是低层操作,它主要在图像像素级上进行处理,处理的数据量非常大;图像分析则进入了中层,经分割和特征提取,把原来以像素构成的图像转变成比较简洁的、非图像形式的描述;图像理解是高层操作,它是对描述中抽象出来的符号进行推理,其处理过程和方法与人类的思维推理有许多类似之处。 3.图像处理与计算机图形学的区别与联系是什么? 数字图像处理,是指有计算机及其它有关的数字技术,对图像施加某种运算和处理,从而达到某种预期的目的,而计算机图形学是研究采用计算机生成,处理和显示图形的一门科学。 二者区别:研究对象不同,计算机图形学研究的研究对象是能在人的视觉系统中产生视觉印象的事物,包括自然景物,拍摄的图片,用数学方法描述的图形等,而数字图像处理研究对象是图像;研究内容不同,计算机图像学研究内容为图像生成,透视,消阴等,而数字图像处理研究内容为图像处理,图像分割,图像透

相关主题
文本预览
相关文档 最新文档