新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 反射式全景视频实时平面显示技术的FPGA实现

反射式全景视频实时平面显示技术的FPGA实现

作者:时间:2017-06-05来源:网络收藏

虚拟现实技术可分为两类[1],一类是基于三维图形生成的虚拟场景技术,另一类则是基于实景采集通过几何变换获得近似的真实场景。反射式全景传感器非常适合于构建实景采集的真实场景。在过去的十年中, 多种反射式全景传感器相继问世[2]。反射式全景传感器由摄像机和曲面反射镜组成, 与普通摄像机不同的是,它可以一次性采集360°圆周内的全部景象, 因此得到了广泛应用[3]。

目前,反射式全景技术的研究主要将注意力集中在几何变换算法和镜头校正算法的改进,对采集和显示的同步性问题研究甚少,如文献[1]和文献[4]所做的工作是在图形工作站实现的,便携性差,无法适应嵌入式多媒体应用的要求。另一方面,实际应用中往往要求展开后的平面显示图像有较高的分辨率,而反射镜体积的限制使成像分辨率有限,展开后的图像呈现有规律的和灰度阶梯化现象。这就需要通过相应的视频后处理算法生成人眼能够接受的图像。上述两个问题给反射式全景视频的实时平面显示在嵌入式视频处理平台上的应用带来挑战。

1 展开算法及其存在的问题

1.1 展开算法

本文引用地址:http://www.eepw.com.cn/article/201706/349235.htm

1.2 失真现象的产生原因及解决

经过变换展开后的平面图像,其坐标变换是非线性采样过程,即采样点呈环状分布,不同半径的环状采样点数相同。如果以原图像最大半径的采样点数作为基准对整幅图像进行展开,则半径越小放大倍数越高,从而导致原图像中靠近圆心的部分展开后存在明显的锯齿化和阶梯化失真现象。具体地说,由于像素值的不连续性,直接放大图像会使这种不连续性被放大。就是由于放大了图像边缘的锯齿状像素产生的;阶梯失真的产生,则是由于不连续的图像梯度边缘像素值直接被复制放大,使原先并不明显的梯度边缘像素值被放大为肉眼能够分辨的一个接一个的阶梯。

2 算法的改进和硬件实现

考虑到在平面图像的放大研究中,为避免图像失真,常采用经典的双线性插值和三次线性差值及其改进算法[5~7]。而的展开与平面图像的放大存在不同,每个像素的邻域位置不固定,是非线性的放大过程。因此经典的差值算法及其改进算法不能应用于全景图像的展开。根据上述全景图像展开的特性,结合硬件的可实现性,提出算法如下:对展开的图像采用参数可变的高斯空间滤波,其基本思路是对展开后的图像根据锯齿和阶梯失真的程度,使用不同尺寸的高斯滤波窗进行空间滤波。

3 硬件系统实现


实时反射式全景视频处理要求高的处理能力。例如,NTSC制式视频标准要求30帧/s,每帧约0.25 M像素,即每秒7.5 M像素流量;PAL制式视频标准要求25帧/s,而每帧的像素数却更多,总的像素流量与NTSC制式基本相当。而对每个像素的处理量取决于采用的具体算法。通常的方法是使用DSP处理器阵列或单片高端DSP完成。考虑到本算法的查找表操作,需要大量的存储器资源,对于DSP处理器来说,由于成本和空间的限制,需要外接DRAM存储器和复杂控制逻辑,而外接存储器控制逻辑存在带宽限制,使其成为DSP高速图像处理的主要瓶颈之一。另外,考虑到今后更高分辨率显示导致的更高的数据处理量,DSP的实现方案将更加难以实现。提供了可替代的视频处理平台,支持高效并发数据流结构,这对于图像处理算法的实时实现至关重要。此外FPGA内部的嵌入式SRAM存储器是查找表操作的理想选择。

3.1 整体硬件系统设计

本系统实现平台以Altera的FPGA芯片Cyclone II EP2C70F896C6为核心。系统的主要模块结构如图2所示。

由于平面显示器一次只能显示90°场景,故将全景图像分为四块,待需要显示时再通过展开算法模块进行展开计算并显示。图像展开算法及VGA控制模块为本系统中的核心模块。由于图像展开时有效图像信息占原图的3/4,为了节省资源,本文对分块之后的图像筛选出有效图像部分存入M4K存储器中,利用VGA控制模块产生的VGA行列扫描信号和正余弦查找表实时产生M4K存储器读地址,实现展开算法。模块结构如图3所示。

3.2 空间滤波器的硬件设计

图4为二维图像滤波器的结构图。输入像素在Line Buffer中前移,产生延迟的一行。Buffer的深度依赖于每一行的像素数。这些延迟的行的像素不断输入滤波器组。在每个滤波器节点,像素被做特定的滤波操作,全部累加器的结果在地址树叠加后产生滤波器输出。

一般硬件执行效率用累加次数来衡量。这样,非对称滤波器的复杂度就正比于m×m。m×m是卷积和的尺寸。噪声抑制功能由m×m的高斯核实现,这个核在图像上按行滑动。所谓参数可变的空间滤波器,即m×m的高斯核尺寸是可调节的。考虑到高斯函数的计算涉及三角函数运算,每次尺寸改变时采用硬件计算生成新的高斯核的方法不妥,且随着高斯核的尺寸增大计算时间也相应增大。为了满足时钟同步的要求就必须提供最大高斯核计算所需的时间,作为每个高斯核计算的固定延时,这样做显然在小尺寸的高斯核计算时间中存在大量的冗余等待时间,这对整个系统的实时性十分不利。考虑视频图像的尺寸是一定的,故采用查找表记录高斯核序列,由于高斯核的尺寸相对于整幅图像非常小,且其序列个数与图像的行数呈正比,故占用的存储空间也不大。这里将图像划分为12个横向带状区域,最上方的带状区域采用3×3的高斯核,而下一行则在上一行的基础上+2,以此类推,最后第n带状区域所使用的高斯核的尺寸为2n+1=25。

4 实验

4.1 硬件系统实时性

本文中系统的延迟指视频流进入FPGA到VGA显示的时间差,在系统中表现为A/D输出数据管脚(iTD1_D)上出现的第一个数据和D/A输入数据管脚(oVGA_R,oVGA_G,oVGA_B)上出现的第一个数据之间的时间差。

使用Quartus II中集成的SignalTap在线逻辑分析仪对系统延迟进行测量。SignalTap的作用是在系统中添加一个与JTAG接口相连的模块,将用户关心的管脚数据波形通过JTAG接口上传。由于FPGA芯片内部SRAM的限制使SignalTap数据长度有限,所以本文设计了一个计数器模块对上述时间差中的系统时钟(iTD1_CLK27,27 MHz)进行计数,从而计算得到系统延迟,以证明本系统的实时性。

由于开机时间的误差,所以每次计算所得的计数值都不相同。本文对展开前、展开后无滤波和展开后滤波分别实验10次,对总共30次的实验结果进行分析得到系统延迟。30次实验结果如表1所示。

分别取均值后得到展开前数据延迟为2 417 159个系统时钟,即系统延迟为89.254 ms;展开后无滤波数据延迟为2 432 706个系统时钟,即系统延迟为90.100 ms;展开后滤波数据延迟为2 533 135个系统时钟,即系统延迟为93.820 ms。其中展开算法和滤波算法耗时分别为0.846 ms和3.720 ms。直观观察,显示器显示内容的移动和实际物体移动基本同时进行。

4.2 实际显示效果

分别进行直接展开、参数固定和参数可变高斯空间滤波器处理后展开说明三者区别。
在图5(b)中,展开图像下部锯齿和阶梯失真非常明显;图5(c)中虽然下部锯齿被消除,但是上部图像也变得模糊,图像细节被严重破坏;图5(d)中使用的参数可变高斯滤波器保持了图像上部的细节,同时消除了下部的锯齿。

本文以ALTERA主流FPGA为开发平台,实现了对反射式全景摄像机所得的视频流的实时平面展开,并使用参数可变高斯滤波器对展开后产生的锯齿和阶梯失真进行了有效的抑制,同时保留了图像的细节。本系统展开算法耗时0.846 ms,滤波算法耗时3.720 ms,而VGA显示64.4帧/s,平均每帧为15.528 ms,远远大于本系统算法总耗时4.566 ms。本系统可以在一帧的时间内完成算法,能够满足绝大多数高速应用的要求。



评论


相关推荐

技术专区

关闭