基于FPGA联合Sobel算法的实时图像边沿检测系统的设计与实现
2017-02-27王晓娟翟成瑞
王晓娟,翟成瑞
(中北大学, 太原 030051)
基于FPGA联合Sobel算法的实时图像边沿检测系统的设计与实现
王晓娟,翟成瑞
(中北大学, 太原 030051)
边沿检测技术作为数字图像处理领域的重要一支,在目标匹配,交通管控,国防安全等多个领域有着广泛的应用,能够精确高效地实现边沿检测对于后续进行更高层次的图像识别以及图像处理有着密切的联系;为了实现实时有效的图像边沿检测提出了基于FPGA结合Sobel算法的实时图像边沿检测系统,硬件使用流水线结合并行处理的解决方案,能够有效提高图像处理的速度;算法设计采用Sobel算法,不但简化了运算同时获得了不错的检测效果;实验结果显示,系统可高效地达成实时图像边沿检测的设计目的,而且提升了图像的处理效率与边沿检测的效果,便于满足后续图像处理的要求。
FPGA;Sobel算法;图像边沿检测
0 引言
图像形状信息的边沿信息作为图像信息的重要组成部分,是图像的一个重要特征。边沿检测是进行图像处理分析,计算机以及人类视觉和模式识别技术的重要前提,其不但可以减少图像处理的数据量,同时能够最大限度保留图像中物体的形状信息,当前已经在目标识别与跟踪,计算机视觉等领域获得了非常广泛的应用。因而,研究设计出能够实时,准确,高效,稳定实现边沿检测的系统,对于图像处理具有极其关键的使用价值和理论意义[1]。
在实际工程需求中,图像的处理系统对于实时性的要求比较高,同时由于图像的数据量越来越大等问题,依靠单纯的软件系统来对图像进行实时处理已经显得力所不及,为此,采用FPGA或者DSP等硬件设备设计实时图像处理系统成为当前的主流[2]。由于DSP仍然采用串行指令执行系统,这很大程度上影响了他的执行效率以及吞吐量,而且扩展性不佳。另一方面,由于FPGA逻辑结构独特,存储资源丰富,同时具有实时性,可靠性以及灵活性等方面的优势,使得其在众多的图像处理芯片中脱颖而出,得到了越来越广泛的关注和使用。
采用FPGA作为处理器,结合Sobel算法作为检测算法,设计实现一种基于FPGA联合Sobel算法的实时图像边沿检测系统,设计的系统在实现实时图像边沿检测的设计目标的同时,获得了更快的图像处理速度和更好的边沿检测效果,方便了进一步的图像处理操作。
1 图像边沿检测
图像的边沿通常被我们认为是图像中灰度值或亮度发生明显变化的局部区域,即图像的亮度信息发生陡峭变化的区域[3]。图像边沿可以划分为3种形式:(1)阶梯型边沿;(2)斜坡型边沿;(3)线性边沿。如图1所示。
图1 图像边沿的三种类型
图像的边沿检测具有巨大的实用价值,根据图像的边缘区域存在陡峭的灰度值或亮度变化这一特性,采取合适的数学方法,对目标图像进行检测运算操作,能够提取出目标图的边界线。
当前的边沿检测方法大体可以归纳为三类:基于一阶微分运算的梯度边缘检测方法,基于二阶微分运算的边缘检测算子,以及运算复杂但是效果理想的Canny算子。
我们以基于一阶微分运算的边缘检测算子为例。一幅图像的灰度信息可以表示为f(x,y),x,y分别表示水平方向和垂直方向上的坐标,则该图像在x和y方向上的偏导数可以表示为公式(1)[5]:
(1)
图像中某一点p在α角度上的偏导数为fp,三者之间的关系为公式(2),如图2所示。
fp=fxcosα+fysinα
(2)
图2 关系图
由此,图像的梯度可以由公式3定义为:
(3)
其中:Gx和Gy代表灰度值在水平方向和垂直方向上的变化率,根据其值的大小可以确定图像的大体边缘信息,为了便于硬件实现,对其以1为模进行运算可得到公式4:
(4)
一般情况下,可以使用不同尺寸和数值的矩阵对图像中的每一个像素点依次进行卷积运算求出梯度值。该矩阵被称为梯度算子,梯度算子通常由水平和垂直方向上的两个算子组成。而由于梯度算子的尺寸和数值存在多样性,由此可以创造出不同性能,同时适应不同使用环境的梯度算子。
随着数字图像处理领域的不断发展,具有高灵活度,强针对性,优秀数据处理能力的嵌入式图像处理系统逐渐成为了学界的研究热潮,收到了产业界的高度青睐。FPGA(fieldprogrammablegateArray),即现场可编程门阵列是由众多的可配置逻辑模块,可编程存储资源,内部总线和I/O模块组成的专用电路,根据不同的需求,可随时根改器件的逻辑功能,烧录简单,具有无可比拟的灵活性。另一方面,它同时具有优秀的并行计算能力而且提供一定的内存带宽。基于这些优势,采用FPGA作为硬件平台研究数字图像处理成为了必然。
2 Sobel边缘检测算法
Sobel算子是一种基于一阶微分运算的边缘检测算法,Sobel算子的大小为3×3,包括水平方向和垂直方向上的两个子算子,通过计算每一个像素点水平方向和垂直方向上的亮度差分来实现边缘检测[6],该算子的数学表达式以及矩阵形式如下所示:
f(x+1,y-1)
f(x-1,y+1)
其中:A表示目标图像,f(x,y)表示图像(x,y)点的灰度值。目标图像中每一点的梯度值可以由公式(5)算得:
(5)
通常为了在硬件中便于实现并且提高运算效率,使用模1运算替代模2运算:
(6)
将该计算所得的梯度值与预先选取的合适的阀值比较,若该像素点的梯度值大于阀值,则判定该点为图像的边沿点。紧接着我们可以根据公式计算该点的梯度方向:
(7)
综上,我们可以总结出Sobel算法的主要步骤:
1)分别将横向和纵向两个梯度因子沿着图像的每一个像素点移动,将梯度因子中心与图像中的像素点位置重合。
2)将梯度因子内的系数与图像上与其对应的像素值相乘并且相加。
3)将计算结果作为梯度因子中心位置像素的梯度值。
4)选取合适的阀值,若像素梯度值大于阀值,则判定该像素点为图像的边沿点。
5)计算图像边沿点的梯度方向。
图3为Sobel算法边沿检测后的仿真效果图,由仿真结果可以看出我们成功提取出了图像中人物的边沿轮廓信息。Sobel算法根据每个像素点的上、下、左、右邻域的灰度加权算法,依据在边沿点处达到极值这一特点进行边沿检测。Sobel算法不但可以获得很好地检测效果,同时对于噪声具有相当的平滑作用,能够获得较为准确的边缘信息。但是,其也存在着会误检测到伪边沿,精确度不够高的缺点。在对精读没有苛刻要求的环境或场景,Sobel算法是一种非常有效而且常用的边沿检测方法。
图3 Sobel算法边沿检测
3 基于FPGA联合Sobel算法实时图像边沿检测系统设计
设计的基于FPGA联合Sobel算法的实时图像边沿检测系统主要有以下几个系统模块组成:负责数据采集的图像采集模块,负责灰度转换的灰度处理模块,负责缓存数据的数据缓存模块,负责图像边沿检测的系统核心边沿检测模块,以及显示图像的图像显示模块。如图4所示为系统框图,其中图像采集模块实现图像数据的采集;采集后的图像数据经过灰度处理模块处理转化为灰度图像;处理后的灰度图像存储在数据缓存模块;边沿检测模块采用Sobel算法对缓存数据进行处理提取出边沿信息后通过图像显示模块显示。
图4 图像边沿检测系统设计图
3.1 图像采集模块
视频信号的采集实质上就是将光信号转变为电信号,即将摄像头采集到的模拟视频信号转换为可以被数字系统处理的数字信号。在系统中,通过串行摄像机控制总线(SCCB)配置相机,使用三相写数据的配置方法:首先写入CMOS传感器地址,随后将需要配置的寄存器地址写入,最后将数据写入及配置完成了寄存器。依据上述方法,依序配置完成相应的寄存器后,CMOS图像传感器就可以顺利地采集图像并且将所采集的数据传输到FPGA中的图像模块。FPGA图像获取模块依据像素时钟同步信号,确认不同时段的有效数据,产生有效信号,随后预处理好的图像数据被传输到下一个模块进行后续处理。
3.2 灰度处理模块
图像收集模块获取的图像是RGB标准的彩色图像,不可以直接用来进行灰度梯度值计算,因此,我们需要对彩色图像进行灰度化处理,将其转换为我们所需的灰度数据。灰度化处理去除了图像的色彩信息,大大减少了图像处理系统要处理的数据量因而提升了计算速率,而且不破坏图像灰度信息,所以对边沿检测的效果没有影响。在图像的灰度化处理中加权平均法,最大值法和平均值法是最常用的三种。在该系统中采用加权平均值法,该方法符合人体视觉特征,将红绿蓝三种颜色分量进行亮度加权平均,计算出合理的灰度值。该方法的数学表示为公式(8):
Gary=0.299R+0.587G+0.114B
(8)
由于浮点运算在实际工程中实现较为复杂,灰度运算在该系统中进行了整数转换,具体公式如下所示:
Gary=38R+75G+15B
(9)
该实现过程使用QuartusII中的乘加器实现。
3.3 数据缓存模块
由于系统频率与数据处理速度的影响,数据采集速率与数据处理速率不匹配,会影响系统的整体工作效能,因此,设计一个符合要求的大容量存储器用来缓存待处理数据成为系统设计的一个关键步骤。SRAM和SDRAM可以适应图像数据数据量大等特点,因此经常被用作图像数据的缓存器缓存器。但是SRAM存在一些固有缺陷,其有限的容量以及昂贵的价格不利于将来对系统的进一步扩展。因此,SDRAM芯片成为了系统数据缓存模块的不二之选。
缓冲模块和控制模块组成了数据缓存模块的核心——SDRAM控制器。Wr_FIFO和Rd_FIFO两个异步FIFO作为缓冲模块中图像数据的输入和输出缓存,可以将低频数据输入转换为高频数据输出,将高频数据输入转换为低频数据输出。虽然读写两种操作不能在SDRAM中同时进行,但是由于SDRAM控制模块的工作频率低于数据传输频率的一半,即可以满足数据的读写操作操作不冲突,因此从功能以及效果上看,SDRAM是可以满足该系统同时读写的要求,到达了实时性的要求。系统中的FIFO控制模块具有以下功能:(1)外部图像数据请求输入,将数据写入WR_FIFO。(2)当外部请求输出图像数据,将Rd_FIFO中的数据输出。(3)当WR_FIFO中的数据多于256时,发送缓存请求,收到响应后写入到SDRAM。(4)当RD_FIFO中的数据少于256时,发送读取请求,收到响应后读取SDRAM数据。
control_interface,command,sdr_data_path是SDRAM控制模块的3个子功能模块。这3个子模块负责不同的功能,其中,control_interface模块根据command的命令对SDRAM进行控制;command模块与顶层交互信息,对收到的信息进行译码后得到各项命令以及目标地址等控制信息;sdr_data_path模块根据外部DQM信号确定数据读写宽度。
3.4 边沿检测模块
根据上一章的分析看出每一个像素点的梯度计算需要知道3×3大小区域内各点的灰度值,同时必须将水平和垂直方向的两个算子同对应的灰度值进行加法和乘法运算,将计算结果和选取好的阀值进行比较,根据结果判定是否为图像边沿。系统采用QUARTUS中的IP模块设计了Sobel边沿检测模块,如图5所示为其实现框图,其中运算器为计算像素点梯度值的核心。每一个梯度运算由三个乘加运算以及一个加法运算构成,该模块设计如下图所示。通过该模块计算后所得的梯度值与阀值进行比较,从而确定图像的边沿。
图5 边沿检测模块设计图
3.5 实验结果与分析
根据系统结构设计,设置相应的配置,编写各个模块所需的程序,编译运行后,实验结果如图6所示,
图6 Sobel边沿检测系统实验结果图
图6显示,经图像采集系统采集的原始图像经过Sobel边沿检测系统处理后提取出原始图像的边沿信息。通过图6中原始图像和检测后的图像比较,可以看出,设计的Sobel算法与FPGA结合的边沿检测系统很好的实现了目标图像边沿信息提取的目的。其中图像的边沿部分根据每个像素点的梯度值与预设阀值的比较进行判定,当梯度值大于阀值时则判定为边沿,并且将该点强度值设为0,其余判定为255,经过筛查之后的结果图显示为右图。由于边沿检测时的梯度值需要与预设阀值进行对比,所以阀值的设定直接影响着检测的结果。如果阀值过小会造成边沿信息的误判,反过来,如果阀值过大则会导致边沿信息的丢失。因此选取合适的阀值在边沿检测系统的设计中显得尤为重要。
4 结论
为了实现图像边沿的实时检测,采取Sobel算法作为边沿检测算法设计实现了基于FPGA硬件平台的实时图像边沿检测系统。通过实验所得到的图像可以看出,设计的系统可以在达成图像边沿检测的设计目标的同时,具备实时性强,检测效果好的特点,实时检测效果较为理想。设计方法不但达到了图像边沿检测的实时性和准确性的要求,同时避免了大量代码编写工作。在各个子功能模块的构建中都具备较好的移植性和扩展性,便于系统的进一步开发和应用,同时占用系统资源少,还为后续在FPGA上进行更过图像处理操作留下了大量的系统空间。
[1] 程鸿亮. 基于FPGA的实时图像边缘检测系统的研究[D]. 西安:长安大学,2009.
[2] 温 杰, 李锦明. 基于fpga的实时图像边沿检测系统的实现[J]. 电子技术应用, 2015,41(10):65-67.
[3] 富 爽, 许 杰, 邵一峰, 等. 基于fpga的实时图像边缘检测器的设计[J]. 黑龙江八一农垦大学学报, 2014,26(4): 76-79.
[4] 冯辉宗, 陈 叶, 徐 洋. 基于fpga的实时图像采集与sobel边缘检测[J].传感器与微系统, 2011,30(6):116-118.
[5] 李 涛. 基于FPGA的Sobel算子实时图像边缘检测系统的设计[D]. 北京:北京交通大学,2013.
[6] 王 堃. 基于FPGA的实时Sobel边缘检测系统设计[D].合肥:安徽大学,2015.
[7] 邵 莉.基于FPGA的图像边缘检测系统的研究和实现[D].北京:北京大学,2011.
[8] 张浩然. 基于fpga的sobel边缘检测实现[J]. 数字化用户,2013,36.
[9] 王绍雷, 赵进创, 周 毅. 基于fpga的图像边缘检测系统的设计. 电子技术应用, 2007,33(6):40-42.
[10] 李正明, 刘春国, 安明建. 基于fpga的sobel图像边缘检测的设计[J].现代科学仪器, 2012(4):88-90.
[11] 甘振华, 应 骏. 基于fpga的嵌入式图像边缘检测系统设计[J]. 电视技术, 2010,34(8):43-45.
[12] 杨新华, 寇为刚. 基于fpga的sobel算子图像边缘检测算法[J]. 仪表技术与传感器, 2013(1):102-104.
[13] 张 伟. 基于fpga的图像边缘检测sobel算法的研究与实现[J]. 电脑知识与技术,2014(20): 4810-4812.
[14] 林建英, 陈广明. 一种改进的实时图像边缘检测算法及其FPGA实现[A]. 全国信息获取与处理学术会议[C].2010.
[15] 方惠蓉.基于fpga的prewitt边缘检测算子的实现[J].哈尔滨师范大学自然科学学报, 2015,31(2):72-76.
The Real-time Image Edge Detection Using Sobel Algorithm Based on FPGA System Design and Realization
Wang Xiaojuan, Zhai Chengrui
(North University of China,Taiyuan 030051, China)
Edge detection technology is an important part of digital image processing, which is widely used in target matching, traffic control and homeland security, it is of prime importance to realize accurate and efficient image edge detection of further imaging processing and image recognition. The system realized real time image edge detection based on FPGA and Sobel algorithm, pipelining and parallel processing was used in hardware, which improved the speed of image processing. Sobel algorithm was used as image edge detection algorithm, it simplifies the operation and improves the detection effect. Experiment results show that the system designed in this paper can achieve real time image edge detection effectively, meanwhile, this system improves the speed of imaging processing, it can meet the needs of further imaging processing.
FPGA; Sobel algorithm; image edge detection
2016-11-22;
2016-12-13。
国家自然科学基金项目(61335008)。
王晓娟(1989-),女,山西平遥人,硕士生,主要从事数据采集方向的研究。
1671-4598(2017)01-0034-04
10.16526/j.cnki.11-4762/tp.2017.01.010
文献标识码:A
翟成瑞(1964-),教授,主要从事微系统及集成技术,存储测试技术、MEMS技术、设备和器件可靠性技术方向的研究。