基于ZYNQ的实时视频边缘检测系统设计
2024-05-29苏恒关烨锋和河向
苏恒 关烨锋 和河向
关键词:ZYNQ 芯片;实时视频;边缘检测;现场可编程逻辑门阵列
中图分类号:TP23;TP391.41 文献标识码:A
0 引言
人类视觉基础是图像信息,随着嵌入式及集成电路技术的飞速发展,视觉图像处理在日常生活与科研领域均得到广泛应用,图像处理技术的快速发展已使其成为图像信息传递的重要手段[1] 且在相关领域取得显著成果[2-3]。边缘是一帧图像中信息最为丰富的区域,如何对采集到的视频图像进行准确、高效的边缘提取成为图像处理领域的一个热点问题。相较于利用软件实现边缘检测算法,硬件电路有着处理速度快、实时性高等优点。本研究的实验平台以可扩展处理平台ZYNQ 作为主要的开发环境[4],该平台结合了现场可编程逻辑门阵列(fieldprogrammable gate array,FPGA)和一个双核ARMCortex-A9 处理器[5-6]。通过软硬件协同设计,成功构建了一个嵌入式图像处理系统[7]。与传统图像检测系统相比,基于ZYNQ 的图像处理系统在边缘阈值设置合理时,能显著提升边缘检测质量,具备良好的实时性和可扩展性,为后续复杂图像处理算法的扩展和移植提供了有利条件。
1 系统整体架构
ZYNQ-7000 系列是由Xilinx 公司于2010 年4月推出的采用28 nm 制造工艺的嵌入式处理平台,也就是一片带有可编程片上系统的芯片。其包括可编程逻辑(programmable logic,PL)部分和处理系统(processing system,PS)部分。其中,PL 部分是传统的FPGA,而PS 部分则包含了ARM 处理器,该设计使得ZYNQ 芯片兼具FPGA 的灵活性和ARM 处理器的通用计算能力。如图1 所示,上方为FPGA 可编程逻辑部分,下方为ARM 处理系统部分,上下部分通过AXI 接口来进行大数据量的交互。PL 端包括图像OV5640 采集、边缘检测和AXI 视频直接内存访问(video direct memoryaccess,VDMA)IP 核等模块。PS 端包括高性能(high performance,HP)接口、通用目的(generalpurpose,GP)接口、OV5640 配置等模块。根据PL 端获取外界视频流信息所做的处理,PS 端通过GP 接口对各IP 核进行任务调度,两者功能的不同可在图1 中具体划分为数据流和控制流。
(1)数据流:首先使用PS 端的串行摄像机控制总线协议(serial camera control bus,SCCB)接口对OV5640 摄像头进行配置,利用PS 端扩展的多路输入/ 输出(extended multi-channel input/output,EMIO)来模拟SCCB 协议[8],从而驱动500 W 的OV5640 摄像头采集外界视频图像信息。摄像头图像采集IP 核负责将摄像头采集到的外界图像数据转换成视频流数据。然后经过灰度处理和边缘检测算法IP 核处理,使用AXI4-Stream IP 核将处理后的视频流数据处理转换成AXI4-Stream 格式的数据流。之后VDMA 的写数据通道将这些数据转换成Memory Map 格式,并将其写入PS 端搭载的DDR3存储器中缓存数据。为了实现与DDR3 存储器进行大数据量的交互,AXI -SmartConnect 连接VDMA和HP 接口。VDMA 在DDR3 中读出之前缓存过的视频图像信息,并将其按行传输至AXI4-Stream toVideo Out IP 核。在视频时序控制器(video timingcontroller,VTC) 的控制下,AXI4-Stream to VideoOut IP 核将所有AXI4-Stream 数据转换为视频传输的标准数据流格式,并将已处理过的视频数据流连接至高清多媒体接口(high definition multimediainterface,HDMI)驱动IP 核的输入端口。最后,采集并经过处理的图像会实时显示在HDMI 屏上。
(2)控制流:ZNYQ 的PS 端通过GP 接口的AXI-Interconnect 连接IP 核对VTC 模块进行系统配置,使得VTC 根据灰度处理配置信息,将AXI4-Stream 格式的数据转换成符合HDMI 显示屏输出的标准数据流格式。PS 端根据HDMI 显示屏的不同型号,通过识别显示屏编码(identity document,ID)控制动态时钟IP 核,灵活配置时钟的IP。这样的设计允许系统输出与HDMI 显示屏兼容的时钟频率,从而达到匹配不同分辨率HDMI 显示屏的目的。
2 软件算法设计
2.1 RGB 转YUV
采用500 W 的摄像头OV5640 采集RGB565 格式的视频数据流,但由于RGB 格式图片像素数据的复杂性和庞大性对后续高层次操作的图像处理构成了挑战[9]。为了解决这个难题,对RGB 彩色图像进行预处理,即去除多余的色彩信息,仅保留图像的亮度等级分布特征。在图像编码领域,YUV(YCbCr)是一种更为适合处理的图像格式,可将色度和亮度进行分离[10]。为了降低图像数据所需的存储容量、减少后续算法处理时间,首先需要进行RGB 到YUV 图像格式的转换。
在当前的RGB 转YUV 算法中,采用加权平均法的图像灰度化效果最为优越[11],能够有效保留图像的亮度特征。通过对彩色图像的每个像素点的3个分量进行加权平均,其中不同的权值考虑了人眼對不同颜色的敏感度[12],得到心理学灰度值的计算公式如下:
Y=0.299×R+0.587×G+0.114×B。 ( 1)
Cb=-0.169×R-0.331×G+0.5×B+128。 ( 2)
Cr=0.5×R-0.419×G-0.081×B+128。 ( 3)
其中,Y、Cb、Cr 分别为YCbCr 图像格式的3 个不同颜色分量,R、G、B 分别为24 位RGB 数据的红、绿、蓝颜色分量。
用Verilog HDL 语言(一种硬件描述语言)对公式进行描述时,由于其无法进行浮点运算,因此将其扩大256 倍再缩小至原值的1/256,最后为避免过程中结果出现负数可以对其进行变换,变换后的计算公式如下:
Y=(77×R+150×G+29×B)÷256。 ( 4)
Cb=(-43×R-85×G+128×B+32768)÷256。 ( 5)
Cr=(128×R-107×G-21×B+32768)÷256。 ( 6)
2.2 Sobel 边缘检测
2.2.1 获得3×3 原始图像
将周围像素灰度值变化较为明显的像素所组成集合称为边缘,其代表了图像中信息最丰富的区域,因此该集合是后续进行复杂图像处理算法的重要依据。同时在图像预处理时,保证图像边缘信息的完整性、边缘轮廓的清晰性是后续处理的重要保障。目前在图像处理领域使用较为广泛的边缘检测算法包括Roberts 算子、改进的LoG 算子、Sobel 算子[13]等,其中Sobel 算子可以满足本研究的需求,该算子是一种离散性差分算子,具有便于在硬件平台上实现的特点,因此适用于实际工程。通过在每个像素点上与Sobel 模版因子(2 组3×3 的矩阵)进行卷积,可以得到相应的灰度矢量。在进行Sobel 边缘检测算法之前,需要先获得一个3×3 原始图像模板。
为了获取一个3×3 原始图像模板,可以将输入图像数据的前两行存入随机存取存储器(randomaccess memory,RAM)中,第3 行是当前串口输入的图像数据。当输入的图像数据到达时,使用两个RAM 模块(一个用于读取,一个用于写入)进行实例化,如表1 所示。同时从RAM1 和RAM0中读取前两行数据与第3 行数据进行合并,得到一个“三行一列”的像素数据。通过连续地寄存该“三行一列”的阵列3 次,获取一个“三行三列”的图像矩阵,该矩阵就是后续图像算法处理所需要的3×3 原始图像模板。
读出RAM1 和RAM0 中存储的两行数据之后,将存储在RAM0 中的第2 行图像数据写入RAM1中作为第1 行,之前输入的一行图像数据写入RAM0,从而不断刷新两个RAM 中的数据实现双RAM 连续操作。
2.2.2 卷积操作
Sobel 模版因子是2 组3×3 的矩阵,2 组矩阵因子用于进行水平和竖直方向的边缘检测。将原始图像模板与各方向上不同权重的Sobel 模版因子做卷积操作可以得到两个不同方向上的亮度差分近似值。水平和竖直方向的图像灰度值计算公式如下:
通过将结果边缘阈值与设定好的合理阈值进行比较,大于设定阈值即可判断该像素点是边缘信息点,在显示屏上显示白色边缘,反之显示黑色。
3 实验结果及分析
对搭建好的图像处理系统平台进行功能和性能测试,通过调整边缘检测阈值参数大小,将处理后的图像数据在HDMI 显示屏上进行实时显示。结果表明不同阈值下的实时视频(分辨率为1 280×720)检测效果各不相同,通过调整阈值大小可以有效地显示较小字体,如图2 所示。当阈值为55 时,图像边缘部分变得更加纤细同时也较为清晰,图像完整性得以保留(图2b)。如图2c 所示,经过阈值为160 的检测算法处理后,由于阈值设置过大导致一些颜色特征变化不明显的边缘点未能准确检测,导致文字边缘模糊不清。当阈值为30 时,图像处理结果如图2d 所示,阈值设置过小是出现很多虚假边缘的主要原因。因此,设置合适的阈值对边缘检测处理效果有较为明显的影响。通过对相同物体进行不同阈值的边缘检测,实验结果较好地验证了该系统功能的完备性以及图像算法的有效性。
同时对系统片内消耗的逻辑资源进行汇总,由表2 可以看出,边缘检测算法片内资源使用合理,检测结果完全符合预期且留有丰富资源,为实现后续更复杂的图像处理算法提供了一个较好的硬件平台。
性能测试阶段,在OpenCV 平台和本系统平台(软硬件平台)上对单帧图像检测时间进行对比,各平台边缘检测耗时比较如表3 所示。在ARM 处理器上调用OpenCV 函数对一帧图像进行边缘检测从而获得一帧检测时间。在本文设计的平台上,通过调用中断来获取单帧的检测时间,并将其与OpenCV 平台的检测时间进行比较,以评估边缘检测速度差异。由表3 可知,采用软硬件协同工作的方法对实时视频中一帧图像进行边缘检测,软硬件平台平均检测耗时相比于OpenCV 平台处理速度平均提高了7.225 倍,证明该系统在进行图像处理时具有更快的速度且后期开发价值大。
4 结论
本文提出一种基于FPGA+ARM 的实时视频边缘检测系统,使用全面可编程芯片ZYNQ 作为开发平台,系统结合了FPGA 的并行处理数据能力和ARM 处理器的灵活任务调度优势对图像进行算法处理,处理后的图像数据通过HDMI 顯示屏进行实时显示。该系统充分发挥了ZYNQ 的PL 端和PS 端通过AXI 接口进行大吞吐量数据流交互的优势,合理利用片内资源,为后续算法的实现提供一定空间。同时视频采集速度能够达到实时传输的要求,相较于纯软件平台算法处理具有明显优势,为进一步开发复杂功能的嵌入式视觉系统奠定基础。