时间:2024-07-28
杨美娜 肖世伟 冯祥虎 杜 军
(哈尔滨师范大学计算机科学与信息工程学院,黑龙江 哈尔滨 150025)
随着数字图像处理领域的不断发展,能够高效优秀处理数据的嵌入式图像处理数据系统逐渐成为学界研究的热潮。FPGA(Field Programmable GateArray,现场可编程逻辑门阵列)在图像处理领域有着巨大优势。其内部包括众多的可配置逻辑模块,可编程存储资源,内部总线和I/O模块组成的专用电路。另一方面,它还具有优秀的并行计算能力而且提供一定的带宽资源。因此FPGA可以完美契合实时视频处理需求,将视频传输数据以数据流的形式传递与计算,并能根据图像处理算法的变化重构硬件系统。
边缘检测是进行计算机以及人类视觉和模式识别与图像处理技术的重要前提,它不仅可以减少图像处理的数据量,同时能够最大限度保留图像中物体的形状信息,所以它在目标识别与跟踪、计算机视觉领域广泛应用。它可以提取图像中像素发生明显变化的像素点,即图像中的边缘。由于视频分辨率的不断提高,传统嵌入式边缘检测系统中一直存在丢帧和实时性与功耗无法满足要求的现象。
为了更好地提高视频流数据接收的实时性,本系统在视频传输方式上选择了第三代USB(Universal Serial Bus)接口,即USB3.0总线接口。其传输速度是上一代USB2.0接口的十倍以上,最高可以达到640MB/s,同时传输方式由原来的半双工通信方式改为全双工通信方式。
考虑以上内容,本文提出了一种基于FPGA和USB3.0的实时边缘检测系统,硬件采用AC6102开发板与OV5640摄像头模块设计实现,最终达到了实时边缘检测的预期效果,并且片上资源占用率小于1%。
系统由OV5640摄像头、FPGA、ARM9(FX3)、USB3.0和PC(Personal Computer)机组成,由FPGA控制采集并实时处理摄像头采集到的数据,同时将处理好的数据通过GPIF II接口(通用可编程接口)发送给ARM处理器,ARM处理器则负责接收数据并将数据按照USB3.0的视频传输协议(UVC)通过USB3.0接口发送至PC上位机,在上位机安装好驱动以及Cypress官方提供的VirtualDub工具就能查看到系统处理后的视频,系统整体框架如图1所示。
图1 硬件总体框架
系统对OV5640摄像头初始化模块配置包括:摄像头初始化配置与IIC总线控制模块;摄像头接收模块增设寄存器对数据流进行时钟控制。系统逻辑框图如图2所示。
图2 系统逻辑框图
(1)对摄像头初始化的主要参数配置为:输入与输出时钟为24MHz、帧率30fps、输出图像格式YUV422、输出接口DVP。由于OV5640支持图像质量控制:色饱和度调节、色调调节、自动曝光控制和色彩饱和度调整等,因此在初始化配置时也需要配置这些功能对应的寄存器参数。
(2)采用IIC总线的原因是接口直接在组件之上,因此IIC总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。不仅如此,IIC接口还具有简单性和有效性、代码简洁等优点。IIC接口有两条总线线路,一条是串行数据线SDA,一条是串行时钟线SCL。SCL为高电平时,SDA数据需保持稳定;SCL为低电平时,SDA数据发生变化。在进行数据传输时状态机包括:写请求、起始位请求、读请求、停止位请求、应答位请求和无应答请求。
图像的边缘通常被我们认为是图像中灰度值或亮度发生明显变化的局部区域,即图像的亮度信息发生陡峭变化的区域。图像边缘可以划分为三种形式:阶梯型边缘、斜坡型边缘、线性边缘。根据图像的边缘区域存在陡峭的灰度值或亮度变化这一特性,采取合适的数字方法,对目标图像进行检测运算操作,能够提取出目标图的边界线。当前的边缘检测方法大体可以分为三类:基于一阶微分运算的梯度边缘检测方法,基于二阶微分运算的边缘检测算子,以及运算复杂但是效果理想的Canny算子。由于Sobel算子在实际应用的场景中检测效率高,并且其算法的运算可由FPGA可编程宏功能模块实现,故选取Sobel算子作为边缘检测算法。
Sobel算子是一种基于一阶微分运算的边缘检测算法,是图像边缘检测中最重要的算子之一。该算子包含两组3×3的矩阵,分别为横向及纵向,将之与当前时钟的目标图像的3×3矩阵进行二维卷积操作,即可分别得出横向及纵向的亮度差分近似值。其中Sobel算子的横向算子与纵向算子如式(1)、(2)所示,其中A为目标图像3×3矩阵。
在得到纵向算子与横向算子后,根据两个方向的结果进行处理,求得图像的梯度向量,计算公式如式(3)所示。很多系统设计者为了计算方便,而采用取模的方式代替公式(3),但是本系统为了追求边缘检测算法结果的精确性,依旧采取原公式对横向算子与纵向算子进行计算。
对于视频流处理,首先根据YUV422格式的数据存储方式,设置计数器负责提取视频流数据中的灰度数据(Y通道),其中剩余的色度分量会被覆盖。其次将一维的视频数据流转变为至少缓存两行的格式,调用一个深度为3的Shift_RAM IP核对前两行数据进行缓存,使用Shift_RAM移位寄存器的优点是因为可以进行自动移位换行,Shift_RAM的工作原理是移位存储,后一个数据进入后将前一个数据往前推,当填满此行时,跳到下一行再继续移位存储,最终得到3×3阵列,其数据流原理如图3所示。Shift_RAM可以实时存储当前时钟的一帧图像的3×3矩阵数据,随着时钟的跳变,达到二维卷积中的滑窗操作。
图3 Shift_RAM原理
得到当前3×3阵列后将其与Sobel算子分别进行乘加运算,得到纵向算子与横向算子,其中乘2运算使用左移一位实现。将算子分别与自己相乘求和得到需要求平方根的数据,在这里调用了altsqrt IP核进行开平方的运算。将得到的梯度值与阈值(设置为100)比较,大于阈值则判定为边缘,小于阈值则相反。将输出图像数据值进行翻转,即让检测到的图像边缘为白色,非边缘显示为黑色。
UVC(全称USB video class)是USB规范协议中设备类规范的其中一种。根据UVC协议的视频功能可以分为单元和终端两种实体,它们分别有自己的描述符,每个单元的描述符包含了这个单元的所有信息,终端描述符则提供了所有终端的信息。单元描述符和端点描述符一起描述了端点和单元的组合方式。视频的终端有输入和输出终端,在此基础上扩展功能的相机终端和媒体传输终端。视频的单元包含选择单元、处理单元和扩展单元。对于一个USB视频类设备,它们在接入主机后主要通过描述符让主机获得各自的属性和被确认为标准的USB类设备,这些描述符是标准的USB描述符并在其子描述符中定义了USB设备的各种功能。从端口来看,主要可以分为视频控制端口和视频流端口两个部分。
按照UVC协议的规定,在传输无压缩的视频数据时需要在前面加一个12B的包头,主要是包含一些传输图像的属性信息,对于每一次图像传输都要加上UVC的包头。由于USB3.0图像采集系统需要传输大量的视频数据,所以在传输时本系统采用USB3.0块传输的方式,传输的最大突发为16,数据包的最大字节数为1024,一次USB3.0传输的数据量最大为16KB。
这部分设计使用到了Cypress官方提供的GPIF II Designer、EZ USB Suite、Control Center工具。通过GPIFIIDesigner工具对GPIFII接口进行配置端口与状态机设计,配置完成后需要生成相应的.h头文件以用来后面的固件程序开发;通过EZ USB Suite工具进行固件架构设计,其作用包括接收FPGA发来的数据,并将数据按照UVC协议的通信方式传给上位机,固件总体架构如图4所示。
图4 固件总体框架
该系统主程序main()函数部分主要用来对芯片时钟、端口的初始化,在主程序中启动ThreadX RTOS后,为固件应用创建两个线程:一个是UVC应用线程,主要用来接收图像数据;另一个是UVC控制线程,主要用于响应用户的请求命令。在应用线程入口函数中初始化UART端口,构建DMA通道,配置Endpoint端口,在UVC控制线程入口函数中设置图像的亮度、对比度等参数。
ARM9处理器完成外设间的配置后,DMA结构直接管理传输,不需要CPU干预,其数据传输宽带不会受到CPU性能影响,提高了数据传输速度。传输过程中为图像传输创建了两个DMA通道,每个DMA通道都有两个端口,分别为producer socket和consumer socket。在这里两个DMA通道共用一个consumer socket,传输数据采用乒乓的方式,两个DMA轮流接收来自FPGA的数据。其DMA结构如图5所示。
图5 DMA通道结构图
根据系统结构设计,将编写好的代码编译运行和烧录下载后,即可在上位机查看视频结果。为了更直观地查看结果,首先烧录的是进行Sobel边缘检测前的程序得到其原图,其结果如图6(a)所示。然后烧录加入Sobel算子处理的程序,其结果如图6(b)所示。可以看出,设计的基于FPGA和USB3.0的实时Sobel边缘检测系统能够达到预期的效果,可以很好地提取图像边缘信息,帧率达到30fps。并且片上资源占用率小于1%,为后续设计提供了足够的硬件资源。
图6 系统结果对比
本文对Sobel边缘检测进行了深入研究与设计,提出了一种软件与硬件结合的架构即USB3.0高速接口与FPGA流水线的架构。通过实验所得的图像可以看出,设计的系统达到了预期效果,实现了实时的边缘检测系统。不仅如此,系统占用资源极少,为后续的图像处理操作留下了大量的系统空间。基于以上内容,接下来将继续使用该架构实现更高层次的实时数字图像处理系统。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!