图像边缘检测器的FPGA实现

覃永新,田玉晓,陈文辉

(广西科技大学 电气与信息工程学院,广西 柳州 545006)

摘 要:提高图像处理系统的处理速度,是当前图像处理技术的主要目标之一,其中纯硬件设计是一种越来越热门的手段.本文介绍了一种采用FPGA芯片实现Sobel算法来获取图像中的边缘像素的设计方法,图像在经过预处理得到灰度信息后,通过帧窗口处理、计算Sobel算子、与阈值比较等处理,判断出图像中的每一个像素是否为边缘像素,然后将边缘检测处理后的图像显示.系统采用50 MHz的时钟,经仿真波形可以看出,处理完一帧数据需要4.8 ms,相对于DSP系统来说,系统的处理速度得到极大的提高.

关键词:图像处理;图像边缘检测;Sobel算法;现场可编程门阵列

0 引言

图像边缘检测是数字图像处理、计算机视觉等技术的关键步骤[1].图像边缘检测技术广泛应用于工业检测、图像分割、运动检测、人脸识别和目标跟踪等领域[2].边缘是指图像的灰度值或者颜色发生剧烈变化的地方,能直接反映物体的轮廓和拓扑结构信息[3].边缘检测就是要检测出图像像素中这种变化的灰度的非连续性,同时确定这些像素在图像中的精确位置并表示出来,这是从图像进行后续处理的关键一步[4].图像处理通常采用DSP,DSP+FPGA等方式实现.近几年,图像处理技术的应用范围也越来越广,高性能的视觉检测对数据处理设备的实时性提出了更严格的要求.随着集成电路制造技术的高速发展,特别是可编程逻辑门阵列FPGA(Field Programmable Gate Array)的高速发展,为处理速度的提高提供了新的解决方法.在过去20年里产生了很多边缘检测算法,如Rorberts算子、Sobel算子、Prewitt算子、Laplacian算子、Canny算子等[5-6].由于Sobel算法只涉及加法操作,却可以得到很好的划分效果,因而是图像处理系统中最常用的边缘检测算法.本设计利用FPGA芯片在并行高速数据处理方面的优势,将Sobel算法分解得到的4个算子进行并行加法和比较等运算后,实现边缘检测,被标志为边缘的像素的位置被精确记录,并且可以在VGA显示屏上显示边缘检测后的图像.由于此计算方法简单易行、耗费芯片内部资源较少,同时又可以得到很好的检测效果[7],本设计为之后的图像处理技术打好基础.

1 边缘检测Sobel算法

Sobel算法包括带4个3×3掩码的输入图像数据,即Sobel算子,设置权重来检测水平、垂直、左对角、右对角各个不同方向上密度幅度的不同,这个过程叫做过滤.图1是一个3×3的像素窗口,用于计算中心像素点Q4的4个算子.Q4坐标为[I,J],利用Q4点在其水平、垂直、左对角、右对角各图像方向上的密度变化可以用如下4个算子进行计算:

图1 3×3的像素窗口
Fig.1 3×3 pixel window

H,V,DR,DL这4个参数用于计算梯度大小和方向,梯度的普遍估计值为Magnitude=MAX(H,V,DR,DL).Magnitude与区分度阈值Threshold比较,如果Magnitude>Threshold,则像素点被声明为边界像素,否则为一般像素.

2 基于FPGA的边缘检测系统的原理框图

基于FPGA的边缘检测系统以ALTERA公司的FPGA芯片EP4CE6F17C8为核心器件,与图像传感器、片外寄存器和VGA接口显示屏等外围设备连接构成.图像传感器采用CCD摄像头OV7670,30万像素,输出分辨率为640×480,像素时钟最高达24 MHz;片外寄存器组由两片IS61LV51216组成,VGA接口显示器的分辨率为640×480.边缘检测系统的总体框图如图2所示.

从图2中可以看出,基于FPGA进行边缘检测的过程分为3部分,即图像信息的预处理、边缘检测以及存储控制.FPGA首先通过I2C总线对OV7670进行模式设置,输出数据为 YCbCr 4∶2∶2 格式(“Y”表示明亮度,也就是灰阶值),从数据流中抽取Y分量;然后在边缘检测部分中,串行进入的Y灰度数据流经过帧窗口接收模块的串并转换处理,获取3×3像素窗口所需的Q0~Q8这9个像素值,将之并行送入至Sobel计算模块,计算出H,V,DR,DL 4个算子,再送入比较模块后得到最大值Magnitude,进而与外部输入的阈值Threshold进行比较,判断其是否为边缘像素.在存储控制部分,读写控制器为了保证图像数据显示的实时性与连续性,通常采用乒乓切换模式对图像数据进行读写操作,即将边缘检测处理后的数据写入一片SRAM的同时,读取另一片SRAM中已经写满的一帧处理后的图像数据,送入产生VGA驱动信号的显示控制模块进行显示.

图2 边缘检测系统的工作原理框图
Fig.2 The working principle diagram edge detection sysetm

3 边缘检测系统的模块设计

3.1 预处理部分

摄像头采集到的图像信号在OV7670模块中经过A/D转换,得到标准的YCbCr制式的数字信号流.由于Sobel算法中只用到亮度Y分量,因此只将YCbCr中的Y分量进行提取.由于在YCbCr 4∶2∶2格式中有效像素数据流的格式为:Y0Cb0Y1Cr0Y2Cb2Y3Cr2Y4Cb4Y5Cr4…,利用像素时钟Pclk的二分频信号提取出一个Y像素,送入到FPGA中的LPM_FIFO中缓存.由于高速设备与慢速设备之间处理速度的差别,它们之间的数据传输一般采用查询方式,存储器的类型一般选用先进先出FIFO器件.这里采用3个深度为1 024的LPM_FIFO来缓存第一、第二、第三行的Y像素,存满后对边缘检测模块的写信号wr发出高电平,进行帧窗口处理后的串并转换以及边缘检测计算.预处理的工作方式是流水方式,即第一个窗口的数据处理完毕后,窗口向右滑动一个像素,每个时钟滑动一格,直至最后一个像素,每个像素都遍历这个3×3像素窗口;第一行所有的像素处理后,原来存储第一行数据的LPM_FIFO被读空;读出的同时可以写入第四行的像素数据.LPM_FIFO缓存第二、第三和第四行的Y像素数据,再次将每个窗口数据进行处理.

3.2 边缘检测部分Edge_Detection的设计

边缘检测部分的内部结构如图3所示,输入端口有:系统外部输入的阈值Threshold[7.0],写信号wr,像素灰度值Pix_in[7.0],系统时钟端 sysclk,系统异步复位端 rst_n;输出端口是边缘像素信号 Magout.边缘检测部分由帧窗口接收模块Wid_9word,计算模块Sobel_Filter和比较模块Comparer构成.

图3 边缘检测部分的内部结构图
Fig.3 Edge detection modules internal structure

3.2.1 帧窗口接收模块Wid_9word

Wid_9word模块接收串行进入的像素数据Pix_in[7:0],完成串并转换和帧窗口转换得到Q0至Q8(其中Q4不需要进入计算模块).由于在预处理部分,已经按照3×3窗口的规则将数据串行读出,则在这个模块的设计里就是一个简单的串并转换,每9个时钟就输出一组新的窗口数据Q0至Q8,以保证Sobel算法中4个算子的连续的高速并行运算.

3.2.2 计算模块Sobel_Filter和比较模块Comparer

Sobel_Filter模块实现Sobel检测算法,并行进入的一个窗口的9个像素数据,根据式(1)—式(4),计算4个方向的图像梯度数据绝对值H,V,DR,DL,然后进入比较模块Comparer进行逐次比较得到最大值,再与阈值Threshold进行比较,如果大于阈值则判断为边缘像素,输出1;否则输出0.由于式(1)—式(4)可以采用如图4所示的同一累加电路,因此可以使用流水线方式计算出这4个梯度的数值.比如第一组送入的数据是 Q0,Q3,Q6,Q2,Q5,Q8,可以计算出水平算子 H 值;下一个时钟脉冲送入第二组数据是 Q0,Q1,Q2,Q6,Q7,Q8,可以计算出垂直算子 V 值;第三组数据是 Q1,Q0,Q3,Q5,Q8,Q7,可以计算出右对角算子 DR 值;第四组数据是 Q1,Q2,Q5,Q3,Q6,Q7,可以计算出左对角算子值DL;这4组数据呈流水线方式送入加法器后,总共花费了5个时钟周期.但是此模块经过编译后,所消耗的逻辑单元的数量,对比直接使用并行加法的程序要少122个.

图4 Sobel算法的示意图
Fig.4 Sobel schematic diagram of the algorithm

在比较模块,通过对比得到4个算子里的最大值,再与阈值相比较.阈值的确定是通过很多次实验后得到的一个拟合值.边缘像素点显示为白色,对一帧图像的像素逐个计算后,就可以得到只显示边缘像素的黑白图像,进而显示出来.

3.3 存储控制模块

Magout输出1 bit的数值,为了减少存储空间,先将串行输出值转换为16 bit的双字节数据,经过缓存再送入VGA显示器.寄存器组由两片可同时进行读写控制的随机存储器IS61LV51216构成,两片SRAM芯片采用乒乓方式工作,将处理后的数据写入其中一个SRAM的同时,读取另一SRAM的数据至显示控制模块,写满一个SRAM或读空另一个SRAM后切换两个芯片的读写操作,如此循环下去[8].保证了图像数据处理连续性,能够满足视频数据高速实时处理的要求.

显示控制模块同时对VGA接口产生行场扫描的时序信号和传送边缘像素信号,然后采用逐行扫描的方式显示图像.

4 边缘检测系统的硬件测试及实时性分析

图5 (a)是一张未经处理的原图,图5(b)是经过Sober算子的边缘检测处理后的图片.从图5(b)中可以看出,在图5(a)中符合边缘特征的像素几乎都被标示并显示出来.

图5 Sobel算法处理后的显示结果
Fig.5 Improved Sobel edge detection result

5 总结

边缘检测是图像处理过程中首要的关键的一步,其处理速度的提高对整个图像处理速度的影响很大.图像数据处理一般情况都是基于PC机的软件处理或DSP+FPGA来实现[9].但面对高清画质和超大像素的要求提高,传统方法已经越来越无能为力.DSP虽然具备指令流水线,但其处理速度还是受到限制[10].与40 MHz工作时钟的6级流水的DSP相比,DSP处理器检测一幅图像所需的时间大约为1.4 s.由于在本设计中进行Y分量的抽取,而使得像素被处理的频率变为12 MHz,处理完一帧640*480的图像历时26 μs,比DSP的处理速度多了大约两个数量级.在边缘检测系统的顶层文件的编译报告中,也可以看到FPGA内部资源的占用情况,如表1所示.因此,本文提出的基于FPGA实现的Sobel边缘检测方法,是一种高速、耗费资源少、高效的解决方案,可以满足实际工程应用需要.

表1 FPGA内部资源消耗
Tab.1 Resource occupancy in FPGA

参考文献:

[1]ARBELÁEZ P,MAIRE M,FOWLKES C,et al.Contour detection and hierarchical image segmentation[J].IEEE Transactions on Pattern Analysis and Machine Intelligence,2011,33(5):898-916.

[2]YANG Q Y,GAO X Y.Tracking on motion of small target based on edge detection[C].Proceedings of 2009 WRI World Congress on Computer Science and Information Engineering.Los Angeles,California USA,2009.

[3]曾俊.图像边缘检测技术及其应用研究[D].武汉:华中科技大学,2011.

[4]付麦霞,邢超,廉飞宇,等.基于 FPGA 的图像边缘检测器的研究和设计[J].计算机技术与发展,2009,19(4):196-198.

[5]俞昊,林川,谭光兴,等.视觉注意机制与 Canny 算子结合的目标轮廓检测方法[J].广西科技大学学报,2016,27(2):87-92.

[6]齐榕,齐敏,赵子岩,等.数字图像边缘检测的 FPGA 实现[J].电子设计工程,2013,21(19):178-180.

[7]官鑫,王黎,高晓蓉,等.图像边缘检测 Sobel算法的 FPGA 仿真与实现[J].现代电子技术,2009(8):109-111.

[8]柯宝中.基于 FPGA 的乒乓式存取高速数据采集通道设计[J].广西科技大学学报,2015,26(1):43-48.

[9]蒋炜华,万留杰.基于 EDA 的图像边缘检测器的设计研究[J].数字技术与应用,2011(9):84-85.

[10]杜正聪,宁龙飞.基于 Sobel算法图像边缘检测的 FPGA 实现[J].电子技术应用,2016,42(10):89-91,95.

The implementation of image edge detector based on FPGA

QIN Yong-xin,TIAN Yu-xiao,CHEN Wen-hui
(School of Electric and Information Engineering,Guangxi University of Science and Technology,Liuzhou 545006,China)

Abstract:Accelerating the image processing is one of the main goals of the image processing technology,which can be implemented by constructing the image processing system with pure hardware.A practical method based on Sobel algorithm is introduced,in which the FPGA chip is exploited to detect the edge pixel in the image.The gray level data of each pixel in the image is read by pre-processing module firstly,and then is extracted by module of frame-window to transform into the module of Sobel algorithm.After the results of Sobel algorithm are compared with a threshold,it can be determined that whether this pixel is an edge-pixel or not.After the processing of edge detection,the image is shown on the screen ultimately.It only takes 4.8 ms to process one frame of image data when the system clock frequency is 50 MHz.The result of the hardware testing shows that using a FPGA chip to process the image is faster than using a DSP processor.

Key words:image processing;image edge detector;Sobel algorithm;field programmable gate array

中图分类号:TP 391.41

文献标志码:A

(学科编辑:黎 娅)

文章编号:2095-7335(2017)03-0088-04

DOI:10.16375/j.cnki.cn45-1395/t.2017.03.014

收稿日期:2017-02-17

基金项目:广西汽车零部件与整车技术重点实验室自主研究课题(15-A-02-02)资助.

作者简介:覃永新,硕士,副教授,硕士生导师,研究方向:嵌入式系统设计,E-mail∶124790121@qq.com.