基于FPGA的自适应阈值边缘检测系统设计*
2019-12-24杨康,卫敏,孙磊
杨 康, 卫 敏, 孙 磊
(安徽大学 电气与自动化学院,安徽 合肥 230601)
0 引 言
图像边缘检测是计算机视觉、模式识别等专业领域极其重要的步骤,其目的是通过算法把图像的边缘检测出来,为后续复杂算法做准备,对目标识别、图像分割等高层次应用有很大的影响[1]。常见的边缘检测算子有很多种,比如一阶的Roberts算子、Prewitt算子、Sobel算子,二阶的有Laplace算子、Log算子、Canny算子[2]。相对于前几种边缘检测算子抗干扰性差,对噪声敏感,Canny算子对图像边缘检测效果更加,因而被广泛使用,但该算法的双边缘阈值需要人为根据经验给定,并且算法在用软件实现时,数据量大,处理速度较慢,满足不了实时性的要求。
随着现场可编程门阵列(field programmable gate array,FPGA)技术的快速发展,利用FPGA平台设计的边缘检测系统由于其并行流水线、高速数据处理的特点而被广泛采用[3]。传统的Canny算法的阈值需要人为给定,自适应性较差。本文在Bernsen算法[4]基础上,利用中值滤波算法求出的中值、最大值、最小值,再结合加权平均法自动生成高低阈值。最后在FPGA平台,利用Verilog编程语言进行系统设计与验证。
1 传统Canny边缘检测算法的原理
由于Canny算法[5]对噪声有较强的抗干扰能力,并且边缘提取更为准确而被广泛的使用。Canny算法具体可以分为以下几个步骤,首先选用合适的高斯滤波函数,对图像进行平滑处理,滤除一定的噪声。然后利用2×2模板梯度算子计算梯度幅值以及方向,其次对梯度幅值进行非极大值抑制,细化边缘,最后利用双边缘法,去除伪边缘,连接有效边缘。经典Canny算法相比前几个算法有很好的边缘提取效果,但仍有其自身的局限性[6]:
1)传统的Canny算法计算梯度幅值是利用2×2模板,尽管模板越小,边缘定位越准确,但对噪声的抗干扰能力较弱,3×3检测模板兼顾了检测速度与精度,是理想的检测模板。
2)传统的Canny算法采用双阈值方法连接边缘,需要人为设定阈值,阈值设置过高会丢失大量边缘,设置过低,会产生许多伪边缘,不具备自适应能力。
2 改进的Canny算法设计
2.1 扩大卷积模板
针对传统算法的不足先进行以下改进,把2×2检测模板改为3×3的Sobel检测模板。
设图像函数为f(i,j),图1(a)为目标像素点P22的8领域窗口,图1(b) 和图1(c)分别为水平方向和垂直方向的梯度算子。
图1 Sobel梯度算子
水平梯度和垂直梯度公式如下
Gx=(P13+2P23+P33)-(P11+2P21+P31)
(1)
Gy=(P31+2P32+P33)-(P11+2P12+P13)
(2)
梯度幅值为
(3)
梯度方向为
θ=arctan(Gx/Gy)
(4)
2.2 自适应阈值生成
Bernsen算法是经典的局部阈值自适应算法,原理是利用矩阵窗口中的像素灰度级的最大值和最小值的平均值作为窗口中心像素的自适应阈值,为了使算法更具代表性和自适应性,加入中值滤波算法求得的中值并引入权值系数不断调整阈值的大小。改进后的算法描绘如下:
设在以目标像素点(i,j)为中心的3×3窗口中,窗口中最大像素值为Max(Pij),中值为Med(Pij),最小值为Min(Pij),权值系数分别为f1,f2,f3,则图像像素各点的阈值为
T(i,j)=(f1×Max(Pij)+f2×Med(Pij)+
f3×Min(Pij))/3
(5)
式(5)权值系数的范围大于0小于1,随着矩形窗口的扩大而相应的增加。在求得式(5)中的自适应阈值后,把它作为Canny算法的高阈值Th,低阈值取其1/2大小,即Tl=0.5Th。
3 系统的硬件设计
系统由OV7725摄像头、海力士提供的容量为256 Mb的SDRAM芯片、FPGA控制单元以及VGA显示器组成。硬件总体结构图如图2所示。首先通过IIC接口及数据采集模块,实现摄像头对外界视频图像的采集,采集来的图像数据经过SDRAM缓存,然后经过灰度变换处理模块,处理后的图像数据一方面经过高斯滤波、梯度幅值和方向计算模块、非极大值抑制等处理模块,另一方面同时进行自适应阈值处理,为经过非极大值后的图像进行双阈值处理提供实时自适应阈值做准备。最后得到的边缘图像在VGA显示器上显示。其中FPGA控制单元主要对外部接口芯片及图像输入数据进行控制与处理。
图2 系统总体结构
3.1 视频图像的采集
I2C接口是由串行时钟线和串行数据线组成,通过I2C时序电路的设计来完成对摄像头中寄存器的配置,最后通过设计OV7725的通信时序,来完成对图像数据的采集。IIC接口时序分为写操作与读操作两大部分,图3给出了写操作时序仿真波形,读操作原理类似。当时钟信号为高电平,数据线为低电平时,数据传输开始,首先写入设备地址42 H,收到设备应答信号ACK,开始写入寄存器地址12 H,再次收到应答信号ACK后,开始写入8位数据80 H,之后进行读操作,由于原理类似,不再做赘述。
图3 I2C接口写操作时序仿真
3.2 SDRAM缓存模块设计
在图像处理模块中,VGA接口模块是25 MHz的时钟域,SDRAM的接口模块是100 MHz时钟域,由于速率的不匹配,会影响整个系统的工作性能,为了解决这种跨时钟域的问题,引入两种控制技巧[7]。
1)引入WFIFO和RFIFO两个异步FIFO作为图像数据的输入输出缓存模块。当一帧640×480的图像的每个像素点按顺序写入到WFIFO时,WFIFO的数据大于或等于256个时,WFIFO请求写SDRAM;当SDRAM响应了写请求时,从WFIFO中读取数据写入到SDRAM。同理当RFIFO中的数据小于256时,给SDRAM发送读请求,把从SDRAM中读出的数据写到RFIFO中,VGA接口模块在行场信号到达有效区域后,给RFIFO发送读请求,读取图像数据。
2)为了减少图像拖影等问题利用乒乓操作进行Bank切换,以完成数据无缝缓存与处理。阶段A,WFIFO数据写入Bank0,RFIFO从Bank读出数据,等写完且读完一帧图像后,切换Bank;阶段B,WFIFO数据写入Bank3,RFIFO从Bank0读出数据,等写完且读完一帧图像后,再切换Bank,依次反复循环。Bank切换过程如图4所示。
图4 Bank切换过程
3.3 矩阵窗口的生成
矩阵窗口的获取是后续图像处理算法中必不可少的一环,传统的矩阵窗口利用FIFO或RAM作为缓冲器[8],本文通过调用软件中的IP核中的2个移位寄存器来进行延迟生成矩阵窗口,由于OV7225摄像头的分辨率为640×480,移位寄存器中的行缓存深度可以设置为640。移位的2行与当前的图像数据流组成3行数据,为了使数据对齐即能够同时并行输出,可以每行增加3个寄存器进行延迟,结构如图5所示,模块仿真波形图如图6所示。由仿真波形可知:3个时钟周期后矩阵窗口形成。
图5 矩形窗口生成
图6 矩形窗口仿真
3.4 自适应阈值生成模块
利用FPGA并行处理快速求得所需的中值,运算过程如图7所示。
图7 自适应阈值运算结构
利用FPGA并行处理数据的特点,首先把并行输入的9个数据分成3组,利用3个三输入的比较器进行排序,一个时钟周期的并行运算后,每个比较器都输出相应的最大值、中间值、最小值,然后再次利用3个比较器分别给3个最大值、3个中间值、3个最小值进行排序,经过1个时钟周期后,把3个最大值比较器进行比较得到的最小值、中间值比较器得到的中间值、最小值比较器得到的最大值再次进行比较,总共3个时钟周期得到矩阵窗口中值。由于窗口中的最大值,最小值在第2个时钟周期就已经可以得出,为了使数据同步,把最大值、最小值分别利用寄存器打一拍。最后利用式(5)加权平均计算得到自适应阈值,为了计算方便,这里取f1=f2=f3=0.5。
3.5 梯度幅值与梯度方向计算
梯度幅值和方向可以利用式(3)、式(4)精确计算出来,但开方运算和反三角函数在硬件实现过程中会消耗大量逻辑资源,不宜采用,在实际设计中梯度幅值可以近似为水平梯度与垂直梯度的绝对值的和,即M=|Gx|+|Gy|。对梯度方向而言,为节省逻辑开销,方向可以根据水平梯度值Gx和垂直梯度值Gy及其二者的绝对值的比较运算具体量化成一定的范围,运算量化准则如图8(a)所示。利用中心对称原理,只需求得Ⅰ,Ⅱ,Ⅲ,Ⅳ四个方向即可。图8(b)是为了进行非极大值抑制运算做准备的矩阵窗口领域内4方向梯度标记图。
图8 梯度方向量化示意
当运算结果符合8扇区的Ⅰ区域时即为水平方向记为“00”以此类推Ⅱ扇区对应“10”、 Ⅲ扇区对应“01”、Ⅳ扇区对应“11”。
3.6 非极大值抑制
非极大值抑制主要是对前面计算的梯度幅值及梯度方向的计算结果进行开窗运算[9],遍历梯度幅值图像中的每一个像素,将矩阵中心的梯度像素值与其同方向的两个梯度值作比较,如果当前梯度值为最大值,则为边缘点,否则为非边缘点。硬件实现过程如图9所示。
图9 非极大值抑制硬件实现
3.7 边缘连接及双阈值处理
将经过非极大值抑制算法输出的梯度值与前面所求得的高低阈值进行比较,若大于高阈值则将其值置为1,所得的图像记为f1,称之为强边缘图像,小于低阈值则全部置为0,大于低阈值小于高阈值的值置为1,所得的图像记为f2,称之为弱边缘图像。统计f1,f2的值,若f1=1,则该点是边缘点,若f1=0并且f2=1,判断前8领域是否有强边缘点,若有,则该点为边缘点置为1,否则为非边缘点置为0。其硬件实现结构如图10所示。
图10 边缘连接硬件实现
4 实验现象与分析
将本文设计的阈值自适应边缘检测系统利用Verilog语言编程,Quartus13.1软件综合,在Altera公司提供的CycloneⅣ系统芯片EP4CE6F17C8N上实现,图11(a)为彩色图像经过灰度变换后的灰度图像,图11(b)是利用经典的Sobel算子、阈值人为给定的检测结果,图11(c)是传统的Canny的算子检测图,图11(d)是利用本文设计的自适应阈值后的出的结果,对比可知经典的Sobel算子检测边缘较宽,并且丢失了大量的真实边缘,传统的Canny算子边缘定位较精确,但也受人为设定阈值的影响,会丢失一些边缘,而且含有一定的伪边缘。本文设计的边缘检测系统能够弥补前两种传统算法的缺点,边缘定位准确,同时很好满足地实时性的要求。
图11 实验现象
5 结 论
本文利用FPGA并行流水线,高速处理数据的能力,设计了实时性视频边缘检测系统。相比传统的Canny算子阈值需要人为给定的情况下,利用中值滤波算法结合加权系数自适应给定阈值,边缘定位准确、自适应性强。本系统在车牌识别,目标追踪等专业领域有较强应用前景。