基于FPGA 的颜色与运动特征识别系统设计

2022-10-28 13:42刘建国李祖明刘晓宏李昱龙
电子设计工程 2022年20期
关键词:灰度运算图像

刘建国,李祖明,刘晓宏,李昱龙

(1.南京理工大学 机械学院,江苏 南京 210094;2.南京工程学院 电力学院,江苏 南京 210095;3.盐城供电公司,江苏盐城 224005;4.苏州长风航空电子有限公司,江苏苏州 215151)

目标识别是机器视觉的重要研究方向,其在无人驾驶、自动导航、军事制导、安防监控等领域应用广泛。近年来,随着现代微电子技术的不断发展,人们在体积、精度、速度等方面对运动目标识别系统的要求不断提高[1-3]。运动目标识别系统大多是基于PC 机或嵌入式平台实现。PC 机体积大、质量重,无法满足便捷性这一需求;而图像处理计算量庞大,传统的嵌入式平台又难以满足实时性要求[4]。

现场可编程门阵列(FPGA)以灵活著称,具有并行处理、实时性好、成本低等优点[4]。FPGA 在视频处理方面已有广泛的研究与应用,文献[5-6]基于FPGA 实现了视频实时监控与显示,文献[7-10]基于FPGA 平台实现了运动目标识别。然而,目前的基于FPGA 平台的运动目标检测系统研究,大多都基于单一的帧间差分法或背景差分法来实现,容易受到环境、光照以及其他干扰物体的影响,系统的抗干扰性与检测精度难以得到保证。

鉴于此,该文设计了一套基于FPGA 的颜色与运动特征识别系统,实现了目标的运动特征检测与颜色特征在FPGA中的检测并进行结合,借助FPGA的高速运算能力,只对同时满足运动特征与颜色特征的物体进行检测,以达到准确高速的目标识别要求。

1 目标检测算法介绍

1.1 帧间差分法

运动目标识别领域中常用的方法有光流法、帧间差分法和背景差分法三种典型算法。光流法的算法复杂、计算量大,在嵌入式平台上难以实现。背景差分法检测信息较为精确,但容易受周围环境影响,稳定性欠佳[11-12]。帧间差分法通过将视频流相邻两帧图像的灰度值先进行差分相减,再进行阈值判断来提取图像中的运动部分。设相邻两帧图像分别为第K帧、第K+1 帧,x、y表示图像中像素点的坐标位置,则这两帧图像可分别用fk(x,y),fk+1(x,y)表示。差分运算的阈值设置为T,得到二值化图像用G(x,y)表示,如式(1)所示,其中“1”表示运动的像素点。

1.2 HSV颜色空间

帧间差分法对所有的移动物体都进行判断,单一使用帧间差分法难以达到精确的识别效果。鉴于此,针对具有特定颜色特征的物体进行颜色检测,并与帧间差分法相结合,从而提升目标物体的识别精确度。

如图1 所示,HSV 颜色空间中,H代表色调、S代表饱和度、V代表亮度。H以角度度量,绕V轴旋转一周,构成一个圆,取值范围为[0°,360°];S与V的取值范围均为[0,1][13]。

图1 HSV颜色空间模型

相较于RGB 颜色空间,HSV 颜色空间的各颜色分量冗余信息少,对目标物体颜色的描述相对简单。HSV 颜色空间能够独立感知各颜色分量的变化,H和S分量可以减少光照变化的影响[14]。将RGB数据转换至HSV 颜色空间,设置H、S、V三个颜色分量的上下阈值可进行颜色特征识别。RGB 转HSV的转换公式如式(2)-(6)所示:

2 系统总体设计

该系统基于Altera公司的Cyclone Ⅳ系列EP4E10 F17C8 芯片来开发,开发环境为Quartus Prime 17.1,借助Verilog HDL 硬件描述语言来实现逻辑设计。

系统的整体设计方案如图2 所示,由FPGA 主控芯片、OV5640 摄像头、SDRAM 以及TFT 显示屏等四部分组成,能够同时实现图像采集、图像缓存、图像处理以及图像显示的工作,各个模块协同工作,实现运动目标的识别跟踪。

图2 系统总体结构框图

系统工作原理:1)系统上电后,先进行SDRAM 和OV5640 摄像头的初始化配置工作。2)初始化成功后,OV5640 采集到的图像数据由图像采集模块捕获,图像采集模块将视频数据分为两路,分别输送至SDRAM 控制模块和图像处理模块。SDRAM 控制模块负责图像数据的缓存,图像处理模块负责图像数据的处理,二者相互配合完成目标识别功能。3)经过相关图像处理运算,数据传输至目标指示模块,进行图像显示与位置数据发送。

3 基于FPGA的目标识别系统设计

3.1 摄像头配置模块

在OV5640 正常工作前,需要通过IIC 总线配置相关寄存器来保证摄像头在预期的模式下工作。如图2 所示,摄像头配置模块由IIC 驱动模块和IIC 配置模块构成。其中,IIC 驱动模块负责驱动OV5640的接口总线,为IIC 配置模块提供时钟;IIC 配置模块向OV5640 输出寄存器的配置数据以及控制IIC 驱动模块的执行与否。该设计设定的图像分辨率为640×480像素,帧率为30 fps,数据输出格式设置为RGB565。

3.2 图像采集模块

OV5640 正常工作时,在每个像素时钟T-PCLK向FPGA 输出8 位宽的图像数据DATA。在RGB565输出模式下,一个像素的数据为16 位,因此需要两个像素时钟周期才能输出一个RGB565 数据。

图像采集模块在像素时钟的驱动下,第一个时钟先采集RGB565 的低八位数据,第二个时钟采集RGB565 的高八位数据,通过设置的一位宽的标志信号作为数据拼接完成信号即可拼接成RGB565[15:0]数据格式。

3.3 SDRAM控制模块

系统对图像数据进行算法处理需要大量的存储空间。该系统使用读写速率快,存储容量大的同步动态随机存储器(Synchronous Dynamic Random Access Memory,SDRAM)完成数据缓存[15]。

SDRAM 控制模块负责实现复杂的SDRAM 读写操作,是FPGA与SDRAM 内部进行数据交互的桥梁。

FPGA 与SDRAM 进行数据交互时,会产生跨时钟域的问题[16]。该系统设计调用读、写各两个FIFO来解决跨时钟的问题。写FIFO 对需要写入SDRAM的数据进行缓冲缓存,读FIFO 对从SDRAM 读出的数据进行缓冲缓存。设置四个FIFO,分别为Write-FIFO0、Write-FIFO1、Read-FIFO0、Read-FIFO1,数据位宽均为16 位,存储深度均为2 048 个。

如图3所示,系统工作时,当前帧的灰度图像数据与当前帧的RGB 彩色图像(有包围盒)数据分别先存入FIFO-Write0 与FIFO-Write1 之中进行缓存。当写fifo 向SDRAM 发送写请求并得到SDRAM 的写请求响应后,两个写fifo 将数据读出,依次写入到SDRAM 的存储空间中。为了避免数据存储的紊乱,SDRAM 存放两路数据的地址完全不同,分别为0~(640×480-1)、(640×480)~(640×480×2-1),深度均等于一帧图像的数据量。两个读FIFO 负责向SDRAM 发送读请求,当得到SDRAM 的读请求响应后,将SDRAM 中的两个不同地址的数据依次读出,分别进行后续处理和显示。

图3 SDRAM读、写控制流程图

3.4 图像处理模块

图像处理模块对数据进行格式转换、运动目标识别、颜色特征识别、形态学滤波等算法处理,最终实现对运动目标的检测跟踪。图像处理流程示意图如图4 所示。

图4 图像处理流程示意图

3.4.1 格式转化模块

将RGB 视频流分别转换为灰度格式和HSV 格式。灰度格式数据用于运动特征检测,HSV 格式数据用于颜色特征检测。

RGB 数据转灰度数据的公式如式(7)所示:

Verilog 无法进行浮点数的运算,因此先将式(7)前的各系数统一扩大256 倍,再将结果右移8 bit,以实现RGB 转灰度的运算,如式(8)所示:

为了进行颜色特征识别,需要完成数据从RGB格式到HSV 格式的转换。由式(2)-(6)可知,计算中包含着大量的除法运算。通过调用FPGA 内部自带的IP 核来实现除法运算,最终将HSV的H、S、V三个分量的值都按比例映射至0~255 之间。

为了验证格式转换算法的正确性,借助Quartus软件中的SignalTap 抓取到波形,图像数据格式转换结果如图5 所示。由图5 可知,数据转换结果准确。

图5 图像数据格式转换结果

3.4.2 目标检测模块

如图6 所示,帧差法模块、颜色识别模块、“与”运算模块、时钟对齐模块等各模块协同完成目标检测功能。

图6 目标检测模块

帧差法模块将上一帧存入SDRAM 的灰度数据,与当前帧的灰度数据进行差分运算后进行二值化处理。颜色识别模块对当前帧的所有像素点值进行阈值判断后进行二值化处理。两路二值化数据在上一步的运算中耗费的时钟周期数不一样,“与”运算比较的是同一帧同一位置的像素数据,因此需要先进行时钟对齐,再进行“与”运算,若为真,即为符合运动与颜色双重特征的目标物体。

3.4.3 形态学滤波模块

上述运算后输出的二值化数据存在椒盐噪声,该文选用形态学滤波中的“开运算”去除椒盐噪声。“开运算”将图像数据先“腐蚀”后“膨胀”,可以很好地抑制椒盐噪声,增强图像的边缘信息,有利于增强目标检测的准确度[8]。

在FPGA 中实现“腐蚀”和“膨胀”处理时,需要借助一个3×3 的模板窗口进行滤波运算。该文通过调用两个双端口RAM 移位存储前两行的数据[9],设置位宽为1 位,深度为640 个。如图7 所示,当第三行的数据来临时,读取前两行数据,同时让RAM 保持移位寄存,就可以得到滤波计算所需的3×3像素窗口。

图7 3×3像素模板示意图

在实现软件算法设计时,为了提高运算速度,采用二级流水线的方式来实现滤波的计算。以“腐蚀”计算为例,实现“腐蚀”计算的Verilog 代码如下:

第一级:

Corrosion1=matrix_p11matrix_p12matrix_p13

Corrosion2=matrix_p21matrix_p22matrix_p23

Corrosion3=matrix_p31matrix_p32matrix_p33

第二级:

Corrosion_Result=Corrosion1&Corrosion2&Corrosion3

“膨胀”的计算与“腐蚀”大体一致,只需将“&”运算改成“||”运算即可。

3.4.4 目标指示模块

经过形态学滤波处理后直接二值化显示效果太差,且无法得到直观的目标运动数据。为了解决上述问题,找出一帧像素中“真”区域的边界值,形成一个包围盒,将包围盒叠加到当前帧的RGB 视频流中来实现运动目标指示跟踪。

需要注意的是,经过一系列的图像处理,包围盒数据与当前的RGB 视频流存在着时间差。直接叠加显示,包围盒与移动目标之间会有明显的滞后效果。因此,需要先对两路数据进行时钟对齐,再将带有包围盒的RGB 视频流在VGA 显示器上显示出来。同时将包围盒边界值通过串口发送出去,发送频率为30 Hz,与摄像头捕获图像的帧率保持一致。运动目标的中心位置可通过计算包围盒的中心点近似得到。

4 系统验证

4.1 目标检测验证

实验室环境下,在移动平台上设置一个红色标签作为目标物体,以检验目标识别算法的可行性。经过多次试验调试,这次实验将运动识别的灰度阈值设置为10,颜色特征识别阈值设置如表1 所示。实验结果如图8 所示。

表1 颜色特征识别阈值设置

图8(a)为摄像头直接捕获的原始图像,图8(b)为仅使用帧间差分法得到的二值化图像,其对所有移动的物体都进行了识别。图8(c)为仅使用颜色识别得到的二值化图像,仅对设置的红色目标进行识别。图8(d)为帧差法与颜色识别结合后得到的二值化图像,其识别范围更加精确,但是显示上仍有空洞问题存在。在图8(d)的基础上,计算得到包围盒,将包围盒与RGB视频流叠加后进行显示,得到图9(a)。

图8 算法效果图

图9 不同环境识别效果图

在不同场景下,分别进行实验验证,得到图9。由图9 可知,系统最终在各个环境中都可以实现对移动物体的准确识别与跟踪,且在显示上克服了帧差法的空洞缺陷。

4.2 识别准确度分析

在不同的环境下试验后,将某次的实验数据基于Matlab 平台进行处理,然后绘制得到图10。

设测量值为y1,根据y1通过最小二乘拟合出y2。因为目标的真实运动轨迹是一条直线,因此将y2作为真值来计算相对误差σ,则有:

统计分析图10 中的σ得到表1。由图10 和表1可知,若数据误差σ=0.05 在误差允许的范围内,则95%以上的点的识别结果是准确的。

表1 σ 结果统计

图10 实验数据及误差图

5 结论

针对目标识别系统小型化、精确化的要求,设计了一套基于FPGA 的颜色与运动特征识别系统。通过驱动OV5640 模块获取到彩色视频流后,将其分成灰度、HSV、RGB 三个数据流。其中灰度数据流用于运动目标检测,HSV 数据流用于颜色特征检测,RGB数据流用于运动目标的显示与跟踪。基于Verilog HDL 语言进行算法的逻辑设计,在FPGA 中通过实现格式转换、运动识别、颜色识别、形态学滤波与目标指示等图像处理操作,最终实现了目标识别功能。

文章的创新点在于将运动特征识别与颜色特征识别相结合,并在FPGA 中成功实现。通过实验证明,系统在不同的场景下可以实现对目标物体的精确识别,且识别准确率都高于95%。

猜你喜欢
灰度运算图像
基于二值化灰度图像的大豆蛋白液喷雾相对雾化程度的研究
天津港智慧工作平台灰度发布系统和流程设计
Arduino小车巡线程序的灰度阈值优化方案
长算式的简便运算
A、B两点漂流记
加减运算符号的由来
“整式的乘法与因式分解”知识归纳
名人语录的极简图像表达
一次函数图像与性质的重难点讲析
趣味数独等4则