基于FPGA的透视投影变换算法的设计与实现
扫描二维码
随时随地手机看文章
摘 要: 在阐述了嵌入式地形三维显示系统的透视投影变换算法的基础上,着重论述了基于FPGA设计实现透视投影变换算法的方法,并在XILINX公司的SPARTAN XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">XC3S500E" title="XC3S500E">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为像空间坐标系,它是用来表示像点在像空间的位置的右手空间直角坐标系统。OT-XTYTZT为地面辅助坐标系,是一种过渡性的地面坐标系统。透视投影变换算法最终实现地面坐标OT-XTYTZT上的点到像平面坐标o-xy的空间映射。
1.2 投影变换数学算法实现
在透视投影过程中,需要定量描述视点的姿态和空间位置,从而确定投影像片和地面之间的几何关系。为了确定投影光束在地面辅助坐标系中的位置,需要有3个线元素和3个角元素,共需6个元素。其中3个线元素是投影中心S在地面辅助坐标系中的坐标(XS,YS,ZS),用来确定投影光束顶点在地面辅助坐标系中的空间位置;3个角元素用来确定投影光束在地面辅助坐标系中的姿态。为便于说明,在图1左图中引入θ-α-kv角元素系统,如右图所示,两图的坐标定义一致。
根据视域范围内地面点与像片映射点间的坐标关系,使用θ-α-kv角元素系统,将S-XYZ坐标系依次绕Z-X-Y轴相继旋转θ-α-kv角之后,与视点的像空间坐标系S-xyz重合。通过空间坐标的旋转转换,可以推出如下的坐标转换公式:
假定:视点S在地辅坐标系OT-XTYTZT中的坐标为(XS,YS,ZS),地面点A在地辅坐标系OT-XTYTZT中的坐标为(XM,YM,ZM),像点α在像空间坐标系S-xyz中的坐标为(x,y,z);其中z=-f。
地面点A在坐标系S-XYZ中的坐标为(XM-XS,YM-YS,ZM-ZS)。经过推导,得到整理后的投影变换公式:
最后进行平面相似变换,变换为屏幕坐标(xc,yc),其转换方法如下(定义:屏幕显示分辨率范围是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)的第二寄存区使能信号CE,用于FDEII接收门限(Gate)的开启,缓存来自FDEI的数据。在延迟半个cs时钟周期后,COUNT计数单元输出第三寄存区FDEIII的读取信号rd,该信号用来保证算法读取稳定和准确的三维坐标数据。本文设计3个阶段的寄存区分别实现的是:FDEI用于存储FIFO输出的16位串行数据;FDEII用于核心算法的3个并行数据的输出;而FDEIII则实现三维数据的稳定读取,并将可靠的地形数据输入下一核心算法模块。图4为该电路的时序仿真图。
2.1.2 透视投影变换核心算法电路
通过对透视投影变换原理的分析可知,坐标转换过程中涉及空间坐标旋转,数学运算上表现为矩阵的乘积。但由于地形三维数据空间旋转的复杂性,实现过程中不仅涉及大量的矩阵运算,而且要考虑空间转换的方向性,因此在电路的算法设计上必须采取一些辅助的方法来保证数据流的正确。数据符号矫正电路、数据位截取电路和时序控制电路是本系统的主要辅助手段,在很大程度上保证了数据处理的准确和高速。
(1)运算器电路设计
由数据有效位(clk_en)启动的运算模块接收来自缓存区的数据。进入算法模块的数据,总共进行3次空间坐标转换,将来自世界坐标的三维数据旋转至屏幕坐标的相应映射点。该运算单元主要涉及大量的乘法运算器,通过空间转换系数CONST实现无符号乘法运算,同时输出数据标志位const_int,多个乘法器可以并行处理。图5右为设计的标志位产生电路,各个运算单元的标志位通过与门之后产生总的读取信号int_all。这里使用一个读取请求信号,其原因是多个读取标志位会由于信号延迟问题发生冲突等情况,使读数据混乱,不利于下一步数据的读取存储。
(2)数据符号位矫正电路
由于乘法器中采用无符号的逻辑运算,因此需要对乘法器输出值进行逻辑加减后的数据结果进行符号位(T_a,T_c)的判断,并通过并置符(&)输出符号标志位(T_mula),对下一步除法器的输出结果进行数据符号位的检测并矫正,从而实现有符号数据的运算过程无符号化,更加适合FPGA的逻辑结构特点,提高硬件逻辑中的数据运算速率。图6为矫正电路及其时序仿真图。
(3)各运算单元的时序分配
流水线的设计特别适合高速的数据流操作。其最大特点是数据流在各个步骤的处理从时间上看是连续的,关键在各个步骤时序设计的合理安排,尤其对于复杂的混合逻辑运算的电路,时序安排不当,容易造成后级数据丢失或溢出。
图7中的逻辑时序控制设计,在综合片内的混合逻辑周期后,实现了算法中步骤的单周期运行,不仅满足了流水线时钟的有序分配,同时以最少周期实现单步骤的算法运算,极大地提高了整个系统的实时性。
3 仿真结果与说明
应用本系统的硬件实现算法,本文对同一区域的地形三维数据进行了数据误差和时间损耗测试。
3.1 准确性分析
根据FPGA的硬件逻辑特点采取了浮点转定点方法,在整个地形三维透视投影变换的运算中,其前后的结果数据误差分析如图8。
图8(a)为提供测试的三维地形数据;图8(b)为采用软件设计实现的浮点型透视投影变换算法,X轴、Y轴的数据为空间转换后各点对应的二维坐标;图8(c)为采用VHDL编程在FPGA上实现的定点型透视投影变换算法;图8(d)则是(b)、(c)两图各相应点的坐标数据误差。从中可以得出:(1)即使在地形数据高程值大的区域,其精度误差也不超过5个单位数值。平均精度误差数据:X轴为1.7367,Y轴为2.2183。(2)通过增加平移仍可继续缩小误差值。
3.2 时间损耗分析
根据透视投影变换算法,测试了该算法运用软件编程在ARM系统下的运行时间,并与采用VHDL编程在硬件架构下的算法消耗时间进行对比。测试环境:ARM处理器SAMSUNG S3C2410,主频为203 MHz,DMA传输频率101.4 MHz,FIFO读写时钟频率101.4 MHz,FPGA时钟周期为101 MHz。对同一地形数据的时间测试参数如图9。图9(a)为在ARM系统下采用软件编程运行该算法,调用次数为55 651时,耗时13.23 s,如采用本系统的运行数据,则需调用180 880次,耗时达到43 s;图9(b)则是硬件架构下的算法时间损耗,调用55 651时,耗时6.1 ms,调用180 880次,只需19.8 ms。
实验结果表明:采用基于FPGA硬件架构的透视投影变换算法,在损失数据部分精度的条件下,数据运行时间损耗大大缩减,这将有利于提高嵌入式地形三维显示系统的实时性。
参考文献
[1] 蓝荣钦,李淑霞,刘阳,等.地理信息系统的发展现状和趋势[J].地理空间信息,2007,2(1):8-11.
[2] David F.Rogers著.计算机图形学的算法基础.石教英,彭群生译.北京:机械工业出版社,2005.
[3] Xilinx.Using embedded multipliers in spartan-3 FPGAs.2005,3.
[4] Uwe Meyer-Baese著.数字信号处理的FPGA实现.刘凌译.北京:清华大学出版社,2006.
[5] Xilinx.Using block RAM in spartan-3 generation FPGAs.2005,3.
[6] GOSLIN G.Using Xilinx FPGAs to design custom digitalsignal processing devices in proceeding of the DSP.SpringerBerlin,2006.
[7] TREICHLER J,JOHNSON C,LARIMORE M.Theory anddesign of adaptive filters.Prentice Hall,2001.
[8] POLTMANN R.Conversion of the delayed LMS algorithminto the LMS algorithm.IEEE signal Processing letters,2005.