基于FPGA的透视投影变换算法的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于FPGA的透视投影变换算法的设计与实现
摘要:在阐述了嵌入式地形三维显示系统的透视投影变换算法的基础上,着重论述了基于FPGA设计实现透视投影变换算法的方法,并在XILINX公司的SPARTAN XC3S500E上实现了本算法的基本功能。实验数据表明该硬件算法系统具有实时性高和时间开销低等优点。
关键词: FPGA;透视投影变换;时间开销
大规模地形绘制技术一直是国内外虚拟现实领域的研究热点,被广泛应用于战场仿真、飞行模拟、电子地图和地形漫游等方面。目前基于PC平台上的地理信息系统技术已比较成熟,广泛应用的有美国的MapInfo和ArcInfo,国内慧图公司TopMap和中国地质大学的MapGIS等。而随着嵌入式系统的广泛应用,三维地理信息系统小型化已成为新的研究方向。相比之下,国内嵌入式地形三维的GIS应用系统目前还比
较少。
本文在研究地形三维显示算法的基础上,设计了一个面向嵌入式系统的透视投影变换算法模块,实现基于FPGA上的算法加速,极大提高了嵌入式系统下的数据处理速度。
1 透视投影变换的原理及算法
在实现地形三维建模过程中,一个重要步骤就是通过透视投影变换实现世界坐标(project coordinates)向像(视)点坐标(view coordinates)的过渡。世界坐标中的各类地形数据参数正是通过透视投影变换,转换为视域坐标内相应点的二维数据,进而加以渲染形成二维坐标系统上的三维立体地形图像。
1.1 透视投影变换的坐标转换
所谓透视投影变换,就是世界坐标到视点坐标的空间转换步骤,其作用是将x和y坐标映射到投影平面的正确位置上,同时保持深度信息。如图1所示,S为视点(观察者),地面上一点A在像平面上的映射点为α。o-xy为像平面坐标系,用以表示像点在像平面的位置。其坐标原点定义为像点o;S-xyz为像空
间坐标系,它是用来表示像点在像空间的位置的右手空间直角坐标系统。O
T -X
T
Y
T
Z
T
为地面辅助坐标系,是一
种过渡性的地面坐标系统。透视投影变换算法最终实现地面坐标O
T -X
T
Y
T
Z
T
上的点到像平面坐标o-xy的空间
映射。
1.2 投影变换数学算法实现
在透视投影过程中,需要定量描述视点的姿态和空间位置,从而确定投影像片和地面之间的几何关系。为了确定投影光束在地面辅助坐标系中的位置,需要有3个线元素和3个角元素,共需6个元素。其中3
个线元素是投影中心S在地面辅助坐标系中的坐标(X
S ,Y
S
,Z
S
),用来确定投影光束顶点在地面辅助坐标系
中的空间位置;3个角元素用来确定投影光束在地面辅助坐标系中的姿态。为便于说明,在图1左图中引入θ-α-k
v
角元素系统,如右图所示,两图的坐标定义一致。
根据视域范围内地面点与像片映射点间的坐标关系,使用θ-α-k
v
角元素系统,将S-XYZ坐标系依次
绕Z-X-Y轴相继旋转θ-α-k
v
角之后,与视点的像空间坐标系S-xyz重合。通过空间坐标的旋转转换,可
以推出如下的坐标转换公式:
假定:视点S在地辅坐标系O
T -X
T
Y
T
Z
T
中的坐标为(X
S
,Y
S
,Z
S
),地面点A在地辅坐标系O
T
-X
T
Y
T
Z
T
中的坐
标为(X
M ,Y
M
,Z
M
),像点α在像空间坐标系S-xyz中的坐标为(x,y,z);其中z=-f。
地面点A在坐标系S-XYZ中的坐标为(X
M -X
S
,Y
M
-Y
S
,Z
M
-Z
S
)。经过推导,得到整理后的投影变换公式:
最后进行平面相似变换,变换为屏幕坐标(x
c ,y
c
),其转换方法如下(定义:屏幕显示分辨率范围是
ROW_MAX*COL_MAX):
经过取整以后即为屏幕上显示的二维坐标。
2 FPGA硬件电路组成
系统硬件包括片内的SRAM数据缓存区,逻辑控制单元和透视投影变换算法模块三部分,其核心设计为透视投影算法部分。算法硬件加速系统实现结构框架如图2所示。
该算法加速模块对输入的地形三维数据进行相应的透视投影变换运算。它的功能正是基于FPGA的并行处理机制和流水线的工作模式来实现三维数据的高速空间坐标转换。系统包括两组片内的SRAM,分别位于数据输入、输出端及该系统的核心算法单元-透视投影变换运算,以及相应的时钟、逻辑控制模块。
嵌入式处理器通过片外的FIFO芯片实现对硬件加速模块的数据输入和读取。FPGA数据处理模块的通信接口则采用乒乓机制协调片内的SRAM缓存区资源与片外FIFO的数据交互。即FPGA核心算法模块读取1#数据时,FIFO写2#数据;反之,算法模块读取2#数据时,FIFO写1#数据。这种交互模式提高了系统对地形数据的采集、透视投影变换运算和二维数据的实时反馈速度。
2.1 透视投影变换算法的实现结构
透视投影变换最终实现的是世界坐标上的高程数据点到视野屏幕坐标的二维空间转换。地形三维的建模过程正是通过频繁调度该算法来实现庞大数据量的空间转换,因此存在很高的时间开销。
系统正是利用流水线设计来实现多层数据逻辑运算的并行处理,从而达到数据的高速缓存和逻辑控制,并最终缩短三维数据的处理时间。针对FPGA硬件逻辑特点,该算法模块在对数据精度进行估计以后,通过左移8位来实现定点运算,大大加速了原算法。内部的逻辑设计主要涉及运算器的运用及时序和触发信号的控制。下面详细介绍算法内部各个逻辑单元的实现。
2.1.1 向片内SRAM写数据的电路
首先说明算法数据接口的SRAM缓冲区,即每组片外的FIFO对应一个片内的SRAM缓存区。本文以数据输入段为例说明该接口设计对数据的存储和读取过程,在FPGA内部电路图截取其接口的一组SRAM来进行
描述,如图3所示。
图中的din[15:0]表示输入端FIFO缓存的16位数据线,只要FIFO的非空信号(int_ram)有效,该接口电路就不断从FIFO中读取地形数据,cs为来自模块的全局时钟信号。通过地址发生器ADDR_1、ADDR_2、ADDR_3产生存储地址,FDE寄存器分别接收来自FIFO的地形数据。在数据写入SRAM的同时,启动数据个数计数器(COUNT),在接收完一个完整单点的三维数据(X、Y、Z坐标)后,启动计数器(COUNT)的第二寄存