全景图像实时展开在FPGA上的实现
扫描二维码
随时随地手机看文章
目前,全景技术的研究主要将注意力集中在集合变换算法和镜头矫正算法的改进,对实时性问题研究较少。本系统利用FPGA对圆形极坐标图像进行实时展开。
系统总体设计
本系统在以EP2C70 FPGA芯片为核心的DE2-70开发板上实现,系统主要模块如图1所示。
(1)视频采集模块:将ADV7180芯片输出的数字视频信号采集到SDRAM中缓存,并获取相应的控制信号。
(2)VGA控制模块:将已经处理好的数字视频信号输出到ADV7123,之后进入VGA显示器进行显示,并生成VGA控制信号和坐标信号。
(3)展开算法模块:利用VGA控制模块产生的坐标信号对极坐标数字视频信号进行展开操作,生成矩形视频信号。
系统模块设计
根据系统框图,本系统可分为以下几个主要模块:视频采集模块、展开算法模块和VGA控制模块。系统时钟为ADV7180产生的27MHz像素时钟,保证了采集与处理的同步进行。
视频采集模块
视频采集模块接收由ADV7180芯片串行输出的格式为ITU-R BT.656、分辨率为720×525的数字视频信号,并提取信号中有效像素信息,同时将其转换为分辨率为640×480的数字视频信号,存入SDRAM中,之后,再提取缓存中数据转换为适合VGA显示的RGB信号传输到后续模块。
ITU-R BT.656解码器
ITU-R BT.656协议以27MHz速率复用传送数字视频数据,其顺序是:Cb,Y,Cr,Y,Cb,Y,Cr,?? 其中,Cb,Y,Cr 这三个字指的是同一个像素的亮度和色差信号,之后的Y 对应于下一个像素的亮度。Y、Cb、Cr在传输中数据量的比为Y:Cb:Cr=4:2:2。另外,信号同时包括相应的场、行信号。ITU-R BT.656解码器的目的是将ADV7180芯片产生的ITU-R BT.656协议数据流中的8位像素信息提取出来,并根据协议中的控制信号生成相应的行列扫描信号与像素有效信号。在提取像素信息的同时,将数据存储顺序变换为:Y,Cb,Y,Cr,Y,Cb,Y,Cr??。在存入SDRAM时,偶数地址存储{Y,Cb},奇数地址存储{Y,Cr}。
SDRAM控制器
SDRAM控制器采集ITU-R BT.656解码器输出的像素信号,将其存入DE2-70开发板上的IS42S16160B SDRAM中。系统将其设计为一个四端口控制器,包括两个读口和两个写口,并且使用108MHz时钟驱动SDRAM控制器和SDRAM芯片,保证在分频之后,每一个读写端口的频率为27MHz,与像素时钟同步。
由于ADV7180产生的视频数据流是隔行扫描数据,分为奇数场和偶数场,所以SDRAM控制器除了对数据流进行存储,还要在读取数据时进行去交织操作。SDRAM控制器的双读口设计可以出色地完成去交织任务。在读取数据时,利用VGA的行扫描信号控制这两个读口分别读取:当VGA控制器扫描到奇数行时,由第一个读口读取相应奇数行数据;否则,由第二个读口读取相应偶数行数据。之后,再合并这两个读口读取的数据得到逐行扫描的、分辨率为640×480的视频数据流。
YCbCr到RGB转换模块
本系统的最终目的是将视频流输出到VGA显示器进行显示,而从SDRAM读取得到的数据是YCbCr422格式,不符合VGA显示要求,所以需要将其转换为RGB数据格式。
首先将YCbCr422格式转换为YCbCr444格式。在每一个时钟上跳沿,判断当前VGA列扫描信号,若当前列为奇数,则将SDRAM读口得到的16位YCbCr信号的前8位赋值给Y作为当前像素的Y值,后8位赋值给Cr作为当前像素的Cr值,Cb保持不变;若当前列为偶数,则YCbCr的前8位仍为当前像素的Y值,后8位为当前像素的Cb值,Cr保持不变。这样就保证了输出的Y、Cb、Cr三个信号是当前像素的对应描述信号。
在确定了每个像素对应的YCbCr值之后,就可以通过如下公式计算得到对应的RGB值。
DE2-70上的EP2C70 FPGA芯片内嵌了150个乘法器块,每一个乘法器块可以配置为两个9×9位的乘法器或者一个18×18位的乘法器。所以本系统使用QuartusⅡ中集成的MegaWizard Plug-In Manager配置乘加器模块用于实现YCbCr颜色空间到RGB颜色空间的转换。另外,上述转换公式涉及浮点运算,在Verilog中不易实现,所以将公式中各浮点值左移9位变为整数,从而公式调整为:
展开算法模块为本系统的核心模块,利用EP2C70内嵌的M4K存储器和正余弦生成器实现了极坐标视图到直接坐标视图的实时展开。
人眼视角约为120°。考虑到人眼观察的习惯,系统将圆形的极坐标视图分割成为第一、二、三、四象限四个部分,每部分90°,由使用者选取感兴趣的部分进行展开,这样既符合人眼观察的习惯,又节省了空间。
视频分块
全景极坐标视图在显示器上显示时类似于图5,其中矩形代表整个显示器显示的内容,分辨率为640×480,圆形代表全景图像出现的位置,半径大约为240个像素,所以可以按图5中虚线部分将视频每一帧分为4块,每一块分辨率为240×240。系统使用VGA控制器生成的行列扫描信号标定当前像素的位置,当像素位置位于全景图像区域内时,则将像素值存入M4K存储器,否则继续搜索下一个满足条件的像素。
M4K存储器设计
M4K存储器是内嵌在EP2C70中的存储器块,其中每一块容量达到4096bit,可配置为真双口存储器,在EP2C70芯片上共有250块M4K存储器块。本系统使用了209块M4K存储器块,借助其高寻址精度,实现图像的实时展开。
M4K存储器写地址
将数据写入M4K存储器时,可以将数据流按照图像显示顺序全部存入,这样就需要生成0~360°的所有正余弦查找表;同时,由于存入了全部图像信息,将会有1/4左右的无效像素点,浪费了宝贵的存储器资源。系统利用M4K存储器精确的寻址操作将第二、三、四象限的信息在存入时进行翻转,使得存入M4K存储器的图像仅显示为第一象限的特性,则只需要生成0~90°的正余弦表就可以完成对整幅图像的展开计算。其次,固定摄像头之后,圆形全景图像在显示器中的位置是固定的,所以可以确定每一行有效像素的坐标范围。当行列扫描信号在此范围之内,则将该像素值存入M4K存储器中,否则,继续寻找下一个符合条件的像素点。所以,对第i象限的第M行第N个像素,如果为有效像素,则存入M4K存储器的地址按如下规则计算:
这里的M和N取值范围均为[0,239],Invalid_pixel(K)表示在第K行第一个有效像素之前所有无效像素点总数。
M4K存储器读地址
M4K存储器的读操作完成了全景图像的展开。本系统采用极坐标与直角坐标的对应关系实现全景图像展开。如图6所示,全景图像中的点P(x,y)在矩形图像中对应的点为P’(x’,y’),则x’,y’与x,y的对应关系应为:
其中xΔ为横坐标方向角度步长,yΔ为纵坐标方向上的半径步长,分别由以下参数确定:
之前对不同象限图像的翻转存储操作已经简化了M4K中数据的读取,所以只需要0~90°的正余弦查找表,查找表长度为640。在VGA显示器上的第M行第N个像素,其对应像素值在M4K存储器中的地址按如下规则进行计算:
其中sin_table(N)和cos_table(N)为正余弦查找表中第N列对应的正余弦值。
VGA控制模块
VGA控制模块根据系统时钟生成行同步信号和场同步信号,同时接收前端模块生成的RGB像素信号,并参照VGA显示标准对VGA显示进行控制。本系统采用640×480的显示分辨率,帧速为64.4fps。
系统性能
本系统每一帧画面分辨率为640×480,像素时钟为27MHz,在不考虑实时显示而只考虑存储的条件下,一秒钟内可存储87.89帧图像。另外,如果忽视人眼观察习惯,一次性展开整幅图像,帧速将降低为原来的四分之一,即21.97fps,展开图像分辨率提高到2560×480。
总结
本文以Terasic公司的DE2-70开发板为平台,实现了对反射式全景摄像机采集的全景视频流的实时展开,系统结构清晰,具有较高的稳定性和可操作性。系统时钟为27MHz,显示分辨率为640×480,帧速达到64.4fps,达到了实时性的要求。