图像二值化处理硬件加速引擎的设计
2021-12-10宋宇鲲张多利
阳 欣, 魏 可, 宋宇鲲, 张多利
(合肥工业大学 微电子学院,安徽 合肥 230601)
0 引 言
图像二值化处理是一种用于分离图像背景和前景的数字图像处理方法,被广泛应用于机器视觉、医学影像、文本提取等领域[1-3]。图像二值化处理的关键在于获取合适的阈值,获取阈值通常需要处理大量图像数据,而处理器仅访问内存就需要3个以上时钟周期[4],计算过程耗时长,无法满足某些实时性要求高的场合。
针对低成本、高实时性等嵌入式系统需求,本文提出了一种图像二值化处理硬件加速架构,并完成了基于该架构的硬件电路设计。所设计的硬件电路作为处理器的从设备实现多种规格、不同环境下的图像二值化处理,具有电路面积小、加速效率高等优点。
1 算法原理
图像二值化处理又称为图像阈值处理,主要实现方法有全局阈值算法和自适应阈值算法。全局阈值算法对整幅图像的像素点运算获取最佳阈值,其算法通用性好,但是对图像噪声敏感[5],而且内存开销大;自适应阈值算法将原始图像分割成若干个子图像并分别求子图像的最优阈值,它能够减小图像噪声的影响,但是计算过程相对复杂[6]。
综合考虑处理效果、硬件成本以及算法复杂度等因素,本文将Box Filter算法引入到图像二值化处理过程中。这是一种自适应阈值算法,以待处理像素点为中心、(2r+1)为边长的正方形框作为阈值窗口,阈值窗口内所有像素点亮度值的数学期望是该像素点的阈值T(x,y)[7]。基于该算法的硬件电路只需要(图像宽度×阈值窗口宽度)字节图像缓存,具有算法复杂度低、抗噪声能力强等优点[8]。
1.1 处理流程
图像像素点按照从左到右、从上到下顺序依次输入。针对以上特点,首先计算阈值窗口内图像的第i列像素点的亮度和C(i),即
(1)
其中:g(i,y+j)为横坐标为i、纵坐标为y+j的像素点的亮度值;y为阈值窗口中心像素点的纵坐标;r为阈值窗口的半径。
阈值窗口内所有像素点的亮度和R(x,y)是其每列像素点亮度和的累加,即
(2)
其中:x为阈值窗口中心像素点的横坐标;r为阈值窗口的半径。
随着阈值窗口向图像右方移动,当前阈值窗口与前一个阈值窗口大部分像素点是相同的,阈值窗口所有像素点的亮度和R(m,n)的计算公式为:
R(m-1,n)+C(m+r)-C(m-r-1)
(3)
其中:R(m-1,n)为前一个阈值窗口所有像素点的亮度和;C(m-r-1)为阈值窗口前一列像素点的亮度和;C(m+r)为阈值窗口最新一列像素点的亮度和。
像素点对应的阈值T(x,y)等于阈值窗口所有像素点的亮度和R(x,y)除以阈值窗口的像素点总个数(2r+1)2,即
(4)
二值图像b(x,y)由阈值偏置参数σ、待处理像素点的亮度值g(x,y)和对应的阈值T(x,y)的数值大小决定,即
(5)
1.2 阈值窗口空白部分填充
当阈值窗口的中心像素点是图像边沿或靠近边沿时,可能会出现部分阈值窗口在图像有效区外的情况。
阈值窗口空白部分的填充步骤如图1所示。
当窗口半径r=2、中心像素点坐标为(0,0)时,阈值窗口的像素点分布如图1a所示,图1中的阴影部分在图像有效区外。以图1a为例,本文填充阈值窗口空白部分的具体步骤如下:
(1) 使用图像的边沿行像素点扩展图像的高度,如图1b所示。
(2) 复制扩展后的图像边沿列像素点填充阈值窗口的剩余空白部分,如图1c所示。
2 系统架构
图像二值化处理加速引擎、处理器、静态随机存取存储器(static random access memory,SRAM)等分立的硬件单元,通过高级高性能总线(advanced high preformance bus,AHB)互联成一个系统,如图2所示。
图像二值化加速引擎包括内存控制、图像缓存和图像运算等模块。其中,图像缓存模块由(2r+1)个行缓存单元构成,每个行缓存单元存储1行像素点;内存控制模块是图像缓存模块的控制中枢,其主要作用是将像素点g(x,y)存储在对应行缓存的子存储单元中,并输出阈值窗口像素点;图像运算模块根据(1)~(5)式计算阈值并输出二值图像。
总线接口包括AHB slave和AHB master。AHB slave收发图像二值化处理的工作参数和控制命令,如图像大小、阈值偏置参数σ以及图像二值化处理开始、结束等信息;AHB master将二值图像传输到挂载在AHB总线上的SRAM中。
3 图像二值化加速引擎的实现
3.1 图像缓存模块的控制算法
本文采用循环行缓存读写算法控制行缓存单元[9],其主要思想是:将第1行像素点同时存储在行缓存0,1,2,…,r中,实现图1b扩展图像高度的功能,图像其他行像素点按照轮换规则对应唯一的行缓存,即
(6)
其中:N为行缓存的序号;y为输入像素点在图像中的纵坐标;r为阈值窗口的半径;%为取余运算。
相比于存储整帧图像,本算法优势在于图像缓存模块只存储包含阈值窗口的整行像素点,大大减少了图像缓存的数量。
行缓存读写控制如图3所示。图3的纵坐标V为行缓存的序号,横坐标U为行缓存的子存储单元,每个子单元对应唯一的存储地址,像素点在行缓存中的存储地址是其在图像中的横坐标。为了加快图像读写速率,分步输出阈值窗口内的像素点,由图3可知,当阈值窗口的1列像素点缓存完成后,下一个时钟节拍将整列像素点输出到图像运算模块。
图3 行缓存读写控制
3.2 运算流水线
图像运算模块数据运算量大,因此其处理速度直接决定了整个电路的性能。本文采用流水线结构分级计算阈值并输出二值图像,提高图像运算模块的主频[10]。
运算流水线结构如图4所示,运算流水线由分级运算单元和计数器构成。每输入1列图像像素点计数器的值加1,计数到图像的行尾时归0,其作用是计算输入列像素点在图像中的横坐标。
图4 运算流水线结构
运算单元分为累加、移位缓存等不同步骤,每级流水线的原理介绍如下。
(1) 第1级流水线由若干个加法器和寄存器构成,采用嵌套子流水线的方式,分步计算由图像缓存模块输入的阈值窗口整列像素点的亮度和C(i)。
(2) 第2级流水线由(2r+3)个寄存器buffer(0)、buffer(1)、buffer(2)……buffer(2r+1)、buffer(2r+2)组成。其中:buffer(0)缓存阈值窗口前一列像素点的亮度和;buffer(1)、buffer(2)……buffer(2r+1)依次缓存阈值窗口内每列像素点的亮度和;buffer(2r+2)缓存图像最后一列像素点的亮度和C(w)。当图像第1列像素点的亮度和C(0)输入时,将其同时存储在buffer(2r+1)、buffer(2r)、buffer(2r-1)……buffer(r)中,实现填补阈值窗口左半部分空白区域的功能。
(3) 第3级流水线由加法器、减法器和寄存器构成,计算阈值窗口所有像素点的亮度和R(x,y)。① 当阈值窗口的中心像素点位于图像的第1列时,根据(2)式对阈值窗口内每列像素点亮度和求和;② 阈值窗口在图像其他位置时,根据(3)式计算R(x,y)。其中,寄存器缓存前一个阈值窗口所有像素点的亮度和R(x-1,y),阈值窗口前一列像素点的亮度和C(x-r-1)缓存在buffer(0)中。一般情况下,阈值窗口最新一列像素点的亮度和C(x+r)缓存在buffer(2r+1)中。当阈值窗口右半部分在图像有效区外时,使用图像最后一列像素点将空白部分补全,图像最后一列像素点的亮度和C(w)缓存在buffer(2r+2)中。
(7)
其中:an=0或1;Mτ为近似值。
(5) 第5级流水线由加法器和比较器构成,根据(5)式比较g(x,y)+σ的和与阈值T(x,y)的数值大小,并输出二值图像。
3.3 图像二值化加速引擎的具体实现
图像二值化加速引擎的具体实现如图5所示。
图5 图像二值化加速引擎的具体结构
内存控制模块分为主控制器、行缓存选通单元以及地址选通单元。主控制器根据图像缓存模块输入像素点和输出像素点的时序关系,产生读写图像缓存模块的控制信号。行缓存选通单元由计数器构成,当像素点输入时,根据(6)式产生该像素点对应行缓存的选通信号。地址选通单元也由计数器构成,计算输入、输出像素点在图像中的横坐标,并产生像素点对应子存储单元的选通信号。
图像运算模块由图4介绍的运算流水线和待处理像素点计数器构成。待处理像素点计数器计算待处理像素点对应的行缓存及其存储地址,并从图像缓存模块中读取待处理像素点的亮度值。
结合图2与以上叙述,图像二值化加速引擎的工作流程概括如下:① 处理器通过AHB slave启动图像二值化加速引擎并配置其工作参数;② 将输入像素点存储在对应的行缓存的子存储单元中;③ 阈值窗口的整列像素点存储完成后,立即将它们输出;④ 图像运算单元分步计算阈值窗口的阈值,并通过AHB master将二值图像写入到SRAM中;⑤ 当前图像处理结束后,图像二值化加速引擎配置AHB slave中表示图像处理结束的寄存器,并等待下一帧图像二值化处理。
4 实验结果分析
4.1 FPGA原型验证
本文使用Xilinx XC5VLX110T FPGA开发板验证图像二值化加速电路的正确性。电路经过优化、综合后由FPGA的逻辑单元配置而成,FPGA测试平台如图6所示。
图6 FPGA测试平台
图6中,控制单元一方面发出图像二值化处理的工作参数和控制命令,另一方面控制存储单元有序地读写。亮度图像由外部导入开发板的存储单元内,图像二值化处理结束后,将处理结果存储为文本文件,并使用Matlab查看处理效果。不同阈值窗口半径r和阈值偏置参数σ的图像二值化处理效果如图7所示。
图7 不同窗口半径和阈值参数的处理效果
本文提出的架构(r=5、r=10)与文献[12]图像二值化处理架构FPGA实现的处理性能和资源消耗见表1所列,测试图像的分辨率为280×265。
表1 不同架构处理性能和资源消耗对比
文献[12]采用Ostu全局阈值算法,需要缓存整张图像像素点的亮度值。由表1可知:① 文献[12]的处理速度比本文架构约快11.5%,但本文架构(r=10时)消耗的内存(BRAMs)只有其47.7%,当图像分辨率增大到640×480时,该比例将减至12%以下;② 由于流水线处理结构,窗口半径r的大小对架构的性能几乎没有影响,但资源消耗随着r的增大而增加。在150 MHz时钟频率下,每s能处理240张640×480分辨率的图片。
4.2 系统测试
本文提出的图像二值化处理加速架构经过寄存器传输级(register transfer level,RTL)描述、FPGA验证、版图验证等步骤后,已被集成于某款QR码识别芯片。芯片的制造工艺是SMIC 110 nm,面积为14.975 63 mm2,工作时钟频率的范围为120~220 MHz,当时钟频率为150 MHz时,其功耗为55.744 mW。芯片的部分版图如图8所示,由于图像二值化处理加速电路属于数字集成电路,其分散在系统的版图中。
图8 芯片的部分版图
芯片测试平台和测试结果如图9所示。由图9a可知,QR码识别芯片将摄像头采集的图像转换成二值图像,并通过处理器对二值图像译码,解码信息通过UART接口传输到管理设备。
当时钟频率为120 MHz时,由图9b可知,采用图像二值化加速电路的QR码识别芯片每s能精确地识别6张QR码图像,具有较高的识别精度和实时性。加速电路有效地压缩了图像处理的时间,同时也达到了低功耗处理的目的。
图9 芯片测试平台和测试结果
5 结 论
针对低成本、高实时性等嵌入式系统需求,本文对图像二值化处理的原理和特点进行了深入研究,并设计了一种图像二值化处理的硬件加速电路。该加速电路采用循环行缓存读写算法减小图像缓存、增大图像读写速率,并通过流水线处理等方式提高处理性能。在完成FPGA验证等步骤后,该加速电路已应用于某款QR码识别芯片,并取得了良好的处理效果。