APP下载

基于FPGA的双通道全景图像采集系统研制

2018-11-13曾延安

常州信息职业技术学院学报 2018年5期
关键词:鱼眼全景图像处理

李 琼 曾延安

(1. 武汉职业技术学院电子信息工程学院 湖北武汉 430074; 2. 华中科技大学光学与电子信息学院 湖北武汉 430074)

0 引言

全景相机可以同时获得其周围所有方向的图像信息,在全景显示、机器视觉领域有着重要的应用。但是传统的全景相机需要复杂的光学系统,成本高且难以小型化;或者在图像采集完成后需要后期软件进行图像拼接,极大影响了系统的实时性。

本文设计了一种基于FPGA的双鱼眼镜头全景图像采集系统,结构简单、成本低廉,并利用FPGA的并行处理能力完成了图像的实时拼接,极大方便了后续的图像处理和使用。通过USB3.0接口,本系统也可以很方便地与其他设备相连,实现图像的高效传输,从而方便与各种机器人设备相连,为机器人导航提供高速、高质量的全景图像输入。

1 系统总体设计

使用双鱼眼镜头拍摄全景图像,需要两个镜头背靠背放置,且每个镜头的可视角度大于180度,本文使用可视角为200°的鱼眼镜头。设备结构如图1所示。

a) 主视图b) 侧视图

图1设备结构图

为了避免两个CMOS图像传感器的信号相互干扰,也为了方便以后更换传感器型号,两个CMOS图像传感器分别设计在两个独立的子板上,而主板上则放置FPGA、DDR、USB芯片等主要器件,子板与主板通过软排线相连。

为了实现双通道图像的同步采集和图像实时拼接,以现场可编程逻辑阵列(FPGA)为主控和处理器件,系统的总体设计框图如图2所示。

图2 系统总体设计框图

两个CMOS图像传感器的输入分辨率均为2 304×1 728,拼接处理后的输出图像分辨率目前支持1 920×960和2 560×1 280两种。

由于FPGA拥有丰富的逻辑资源和并行处理能力,图像传感器的驱动、同步以及之后的图像处理均由FPGA完成[1-3]。FPGA通过SPI通信接口配置图像传感器的寄存器,以驱动它获取可见光数据,该数据在同步控制中心的控制下,写入一个异步FIFO中,当异步FIFO中的数据量达到DDR的一个Burst长度后,再将这些数据写入DDR中[4]。为了满足以后一些图像处理算法的需要,图像均采用10位数据输入。FPGA中的图像处理模块会周期性地从DDR中读取一帧数据进行处理,由于图像尺寸较大,FPGA无法将其全部读入内部RAM中,所以采用分块读取、分块处理的机制。借助于FPGA的高速并行处理以及DDR的快速存取,设备输出图像的帧率能达到30 fps。为了使处理后的图像能够实时传输,需要采用USB3.0接口作为数据传输接口,这通过一块USB3.0协议芯片来打包完成。

图中SYNC为图像数据同步信号,包括帧同步、行同步和像素时钟,1*和2*均为FIFO。虽然图像传感器内部有自动曝光功能,但是考虑拼接图像时最好有一致的曝光,所以在FPGA内部使用了一个独立模块同时控制两个图像传感器的曝光时间。由于鱼眼镜头所成图像为圆形,该模块通过计算图像中心和圆形边缘的平均灰度值来估计曝光参数,并通过SPI接口配置相关寄存器。FPGA中与USB3.0芯片连接的I2C接口用于接收上位机或者其他设备发过来的命令。

2 系统硬件设计

本系统的FPGA选用Xilinx公司Zynq 7020,该芯片有大量的逻辑资源用于实现对图像的实时拼接。CMOS图像传感器使用Sony公司的IMX 206[5],该传感器分像元尺寸为1.34 μm,成像质量高且支持多种分辨率和帧率的输出模式,为以后该设备支持拍摄高分辨率的照片或视频做准备。USB3.0协议芯片采用Cypress公司的CYUSB3014[6]。

2.1 图像同步采集电路

CMOS图像传感器IMX 206的电源包括模拟电源和数字电源,其中模拟电源电压为2.8 V,而数字部分,为了降低功耗,内核工作电压为1.2 V,数据输出采用LVDS接口,电平为1.8 V[5]。所以需要提供两个不同的稳压电源。为了给传感器提供稳定的驱动时钟,系统使用50 MHz的有源晶振作为时钟源,然后通过FPGA中的锁相环(PLL)产生传感器所需时钟,系统中其他模块的时钟也通过PLL产生。

为了实现双通道图像的同步采集,FPGA通过SPI接口将两个图像传感器的工作模式都配置为触发模式,分辨率设置为2 304×1 728,数据位宽为10位,输出帧率设置为30 fps。

接收的像素数据首先会进入异步FIFO,此处异步FIFO的作用有两个。第一是同步系统时钟,第二是提高DDR的传输效率,由于DDR采用的是Burst传输方式,且Burst长度为4个字节(32位),所以当异步FIFO中数据量达到4个字节后,就会请求DDR将这部分数据写入其中。

2.2 双路图像的实时拼接

每当有一帧数据采集完毕后,同步控制中心就会通知图像处理模块对DDR中的图像数据进行处理。

图像处理模块主要完成双路图像的拼接工作。将两个鱼眼图像拼接为全景图像需要鱼眼矫正和加权相加两个步骤,如图3所示。

图3 图像拼接流程图

考虑所设计的全景图像采集系统的实时性,采用目前较为成熟且投影方程简单、实时性好的等距柱状模型,结合径向畸变校正方程,建立全景图像中像素坐标与原始图像像素坐标的映射模型,实现鱼眼矫正[7]。在图1中所示的两个鱼眼镜头空间位置固定的情况下,采用棋盘格标定方法对两个镜头的内外参数进行标定,根据标定数据结合鱼眼矫正的像素坐标映射模型分别生成与图像Bayer格式对应的像素坐标映射查找表;并根据两个200°视场的重叠区域的像素映射坐标的对应关系生成重叠区域加权因子查找表。从而,鱼眼矫正和加权相加均通过查找表完成,一个查找表对应一个输入图像。查找表与图片类似,有3个通道,前两个通道的数据为鱼眼矫正时的映射坐标,后一个通道的数据为像素相加时的权重。显然,查找表的大小和系统输出图像的大小一致,但是,为了加快查找表的访问速度,系统将查找表等比例缩小至60×30的分辨率,缩小后丢失的数据通过双线性插值求出,因此,在设备启动时会将缩小后的查找表从片外Flash全部读入DDR中,需要时FPGA再将其从DDR读入内部RAM中,从而在拼接时大大加快查找表的访问速度。

由于每一帧的图像较大,FPGA无法将整个图像读入并进行处理,而鱼眼矫正利用原始图像的像 素坐标将像素映射到全景图像,这一过程可通过查找表将原始图像的像素值进行插值计算,并填充到全景图像实现,因此,可以根据所需填充的全景图像图块与原始图像图块的对应关系,采用分块读取分块处理的机制,充分利用FPGA在图像处理中的并行处理能力,改善系统的实时性。图像处理模块每次从DDR的原始图像存储区中读取大小为88×88的一块数据,处理完成后再写回DDR的全景图像存储区,然后读取下一块,以此类推。鱼眼矫正模块的设计框图如图4所示。

图4 鱼眼矫正模块的设计框图

鱼眼矫正模块根据原始图像与全景图像的图像块对应关系,利用事先约定读取顺序通过内部总线从DDR中读入一个图像块以及对应的查找表,查找表读取一次即可,处理下一个图像块时不必再读取。由于图像数据是Bayer格式存储,不方便后面的插值操作,所以首先进行数据分离,绿色通道(G)和红蓝色通道(B/R)分别存储于两个不同的缓存中,查找表(P)存储在另外一个缓存中。坐标生成器用于生成输出图像块的坐标,根据该坐标可以从查找表中读取相应坐标邻域的数据,并插值出对应的输入图像的坐标和权重,输入图像的坐标经过坐标映射,变为输入图像块中的相对坐标。通过相对坐标,G Interp模块和B/R Interp模块就能够从各自的缓存中读取对应的临近像素值并插值生成输出图像的像素值,最后得到的像素值会重新转换为Bayer格式,并与P Interp模块输出的权重相乘后写回DDR中的全景图像存储区。

使用相同的鱼眼矫正模块对两路图像进行处理,由于权重在该模块中已经与像素值相乘,所以之后只需将两路矫正好的图像直接相加即可得到完整的全景图像。

2.3 USB3.0传输电路设计

本文系统使用的CYUSB3014协议芯片,其内核为ARM926EJ-S[6]。要让其正常工作,需要提供稳定的5 V、3.3 V、2.5 V、1.8 V和1.2 V的电压。工作时钟也通过FPGA内部的PPL提供,不过内核还需要一个独立的32 KHz的看门狗时钟,这由一个外部晶振提供。GPIF是通用可编程接口,可以像FPGA的通用IO一样提供不同的电平,因此其供电电平保持与互联的FPGA上对应BANK驱动电平一样即可。通信接口与FPGA的通用IO口相连,使用的协议为I2C。最后,使用静电放电(ESD)保护芯片RCLAMP0524J为设备提供最大15 kV的ESD保护。

由于全景图像是按照8位Bayer格式输出的,因此在分辨率为1 920×960,帧率为30 fps的情况下,其输出带宽约为420 Mbps;在分辨率为2 560×1 280,帧率不变情况下,输出带宽约为750 Mbps。而根据本文的设计,USB3.0的实际带宽可以到1 600 Mbps,完全满足这两种分辨率的输出。

3 系统测试

根据本文的设计方案,系统的实物图如图5所示,采用两个鱼眼镜头背靠背放置,每个镜头的可视角为200度。通过USB3.0与上位机相连,得到的全景图像如图6所示。

图5 系统实物图

图6 本文系统输出的全景图像

测试中也记录了不同分辨率下,图像拼接过程所花费的时间以及功耗,如表1所示。由于主要控制和数据处理都在FPGA上,因此单独列出了FPGA的功耗,而设备总功耗,除了FPGA功耗外,还包括DDR、电源芯片、USB芯片等其他器件。结果显示,拼接融合所耗费的时间在可接受范围内,对于分辨率为1 920×960和2 560×1280的视频均能达到30 fps的处理速度,同时整个设备也维持着一个较低的功耗。

表1 图像处理时间与设备功耗

4 结束语

本文使用FPGA实现了一套双鱼眼镜头全景图像采集系统,该系统对两路图像进行同步采集,并在FPGA内部完成图像的实时拼接和处理,然后通过USB3.0完成图像的高速传输,大大方便了后续的图像处理和使用。测试表明,整个设备体积小、功耗低、使用简单,非常方便用于机器人导航,未来可以在该平台上加入更多的图像处理功能。

猜你喜欢

鱼眼全景图像处理
面向鱼眼图像的人群密度估计
戴上耳机,享受全景声 JVC EXOFIELD XP-EXT1
基于ARM嵌入式的关于图像处理的交通信号灯识别
基于图像处理的机器人精确抓取的设计与实现
机器学习在图像处理中的应用
全景敞视主义与侦探小说中的“看”
微信扫一扫马上看视频鱼眼视频 小程序每天带你看最有意思的摄影视频
鱼眼明目鱼头补脑是真的吗?
从5.1到全景声就这么简单 FOCAL SIB EVO DOLBY ATMOS
全景搜索