《电子技术应用》
您所在的位置:首页 > 可编程逻辑 > 设计应用 > 基于FPGA的Sobel边缘检测应用
基于FPGA的Sobel边缘检测应用
来源:电子技术应用2011年第8期
张丽红1,2,凌朝东1,2
1.华侨大学 信息科学与工程学院,福建 厦门361021; 2.厦门市专用集成电路系统重点实验室,福建 厦门 361008
摘要: 针对目前数字图像处理速度慢的问题, 提出了一种基于 FPGA器件的 Sobel 边缘检测实现方案。Sobel 边缘检测分别在FPGA和MATLAB上仿真实现,仿真结果表明,该方案可以大幅提高Sobel 边缘检测的速度,并且获得了很好的边缘检测效果。最后列举了一个基于FPGA器件的Sobel边缘检测的应用实例。
中图分类号: TN911.73;TP391.41
文献标识码: B
文章编号: 0258-7998(2011)08-0026-04
Application of Sobel edge detection based on FPGA
Zhang Lihong1,2,Ling Chaodong1,2
1.College of Information Science & Engineering, Huaqiao University, Xiamen 361021,China; 2.Key Laboratory of ASIC and System of Xiamen,Xiamen 361008,China
Abstract: Considering the slow speed of recent digital image processing, a new design scheme of Sobel edge detection based on FPGA device was proposed. Sobel edge detection was respectively implemented on MATLAB and FPGA, Simulation result showed that the scheme can greatly increase the speed of Sobel edge detection and acheive a good effect. Finally, an application example of Sobel edge detection based on FPGA device was given.
Key words : Sobel;MATLAB;FPGA;edge detection;DE2-70


    边缘检测是图像处理、计算机视觉的基础内容;是图像分析与识别的重要环节;是目标检测、图像分割所依赖的重要特征。在 PC机上,MATLAB是图像处理的强大工具,如何将成熟的算法转移到嵌入式系统上实现是急需解决的问题。在实时图像处理中,用Sobel算子进行物体的边缘检测是经常用到的算法, 由于对处理速度要求较高且算法处理的数据量较大,用一般的软件实现会比较慢, 无法达到实时系统的要求。而使用FPGA芯片, 用硬件实现对底层的图像预处理可提高图像处理的速度, 满足系统实时要求。FPGA技术的关键就是利用强有力的设计工具以缩短开发周期,提高器件资源利用率,提供综合器的选择(例如在最佳速度和设计规模之间做出选择)。随着FPGA 芯片技术的进步, 其价格逐步降低,而性能迅速增强, 这为使用 FPGA 芯片搭建图像处理平台提供了可能[1]。
1 Sobel边缘检测算法
    Sobel算法是一种较成熟的微分边缘检测算法,它计算简单,且能产生较好的检测效果, 对噪声具有平滑作用, 可以提供较为精确的边缘方向信息[2]。
    Sobel 边缘检测算子使用两个方向算子(垂直算子和水平算子),如图1所示。其原理是分别用这两个算子对图像进行卷积运算,得到两个矩阵,再求这两个矩阵对应位置的两个数的均方根,得到一个新的矩阵,即为灰度图像矩阵中各个像素点的梯度值。最后将梯度值与门限T进行比较,当梯度值≥T时,规定该点的灰度值为255,反之为0。

    根据Sobel算子边缘检测的原理可得出如图2所示的Sobel边缘检测算法框图。对一幅图像进行Sobel边缘检测时,首先要利用Sobel算子计算出水平梯度和垂直梯度,这涉及到卷积运算。然后再把两个方向的梯度结合起来,这就涉及到均方根运算,最后进行门限处理来判断图像边缘并输出边缘检测结果,这部分可通过编写Verilog HDL代码实现[3]。

2 Sobel 边缘检测的硬件实现
    Sobel边缘检测的硬件实现系统应包含梯度计算模块和门限处理模块,其中梯度计算模块可分为图像行缓冲模块和卷积计算模块。此外,各个模块功能的实现可通过调用 Quartus II软件提供的各种宏功能模块(Megafunctions)来实现,如图3所示。

 

 

2.1 图像行缓冲模块器
    梯度计算模块主要完成两个Sobel算子分别与图像像素矩阵(3×3窗口)的卷积运算。首先要构造3×3图像像素矩阵,要完成这个功能,必须引入一个容量足够大的存储单元来缓冲串行输入的图像数据流, 并把串行图像数据转化为并行的3行图像数据,这样在3个像素时钟后就可以得到3×3图像像素矩阵。以往常使用先入先出栈(FIFO)作为图像数据的缓冲器[4],但对 FIFO的读写操作较为复杂。本文通过调用Quartus II软件提供的基于RAM移位寄存器宏模块altshift_taps也能实现同样功能。
    altshift_taps宏模块是一个可配置的、具有抽头(Taps)输出的移位寄存器,每个抽头在移位寄存器链的指定位置输出数据。对MATLAB常用的256×256图像进行Sobel边缘检测,altshift_taps模块参数设置为8 bit输入/8 bit输出、3抽头,相邻两个抽头相距256个寄存器,如图4所示。其中相邻两个抽头的距离是根据图像的大小来设置的,例如在硬件下载仿真上,TRDB-LTM液晶屏能正常显示的图像大小是800×480,此时抽头距离应设置为800。

2.2 卷积计算模块
    卷积计算模块是为了得到水平、垂直两个方向的梯度值,要实现卷积运算需要做大量的乘法和加法运算。如果采用以往分立的D触发器和加法器以及乘法器来完成[5],但其结构复杂。本文通过调用 Quartus II软件提供的宏功能模块中的可编程乘加器 altmult_add和可编程多路并行加法器 parallel_add来实现。
    卷积运算的具体实现是垂直算子和水平算子使用并行结构,与altshift_taps宏功能模块输出的数据同时相乘并相加,需用到6个可编程乘加器altmult_add模块,其参数设置如图5所示,得到的6个数据可分为水平和垂直两组各3个。再将这两组数据分别送往可编程多路并行加法器parallel_add模块,其参数设置如图6所示,得到两个数据。最后通过调用浮点平方根altfp_sqrt模块来计算这两个数据的均方根,即得到3×3 窗口中心点像素的梯度值,该模块的参数设置如图7所示。该方法可以保证每个周期输出一个像素点的Sobel 梯度值。此外,所用到的这些模块可以根据系统设计需求灵活选用[6]。

2.3 门限处理模块
    门限处理模块编写的Verilog HDL代码实现如下:
reg [9:0] cnt;
always@(posedge iCLK, negedge iRST_N)
begin
    if (!iRST_N)
    begin 
        oDVAL <= 0; cnt<=10'b0;
    end
    else
    begin
        if(cnt==10'd768) //3*256=768
        begin 
            oDVAL<=iDVAL; cnt<=10'b0;  end
        else  cnt<=cnt+10'b1;
        if (oDVAL)
        oDATA<=(Abs_mag< iTHRESHOLD) ? 0 : 1023;
        else  oDATA <= 0;
    end
end
    该模块检测到的边缘数据需经过3行时间的延时才能输出,如图8中间线处的时间为15.4 &mu;s,是第769个周期。如果不延时,仿真出来的图像会出现上下偏移的现象。延时产生的原因是移位寄存器宏功能模块altshift_taps填充需要的延时和门限处理需要的延时。

3 软件仿真和分析
    为了更加直观地验证Sobel 边缘检测的FPGA硬件实现效果,本文采用 MATLAB 和 Modelsim 进行混合仿真[7],并与Sobel 边缘检测的MATLAB实现进行比较。
3.1 Quartus II编译
    在Quartus II中编译整个工程,产生Modelsim仿真测试时所需的文件*.vo和*.sdo。本文选用Altera公司的Cyclone II 系列FPGA EP2C70F896C6器件,利用 Quartus II 7.2软件完成Sobel边缘检测的 FPGA系统设计。图9给出了该系统所消耗的资源情况,从中可以看出,该系统仅仅占用了芯片1%的逻辑单元,剩余的资源可以用来实现更复杂的功能。

3.2 Modelsim测试
    在Modelsim中编写测试文件,并存储检测到的边缘数据。系统仿真的时钟信号设为50 MHz,处理一幅256&times;256的8 bit图像, 所需时间为1.3 ms,则每秒可处理图像为770幅, 达到了实时系统的要求, 解决了普通计算机运算需时长的问题。
3.3 MATLAB处理
    最后将Modelsim存储的数据经过MATLAB处理,得到边缘图像。图10是阈值为150时lena图像的仿真情况。
3.4 仿真结果分析
    由图10可知,(a)是原始图像,(b)是Sobel 边缘检测的MATLAB实现,(c)是Sobel 边缘检测的FGPA实现。比较(b)和(c)可以看出,在边缘检测效果方面,硬件时序仿真结果和MATLAB处理结果是一致的。这是因为原始图像也是采用8 bit定点存储格式,所以没有量化精度的损失,即该设计取得了很好的边缘检测效果。

4 Sobel边缘检测的FPGA应用
4.1 开发环境

    开发环境的硬件验证平台是DE2-70开发板,其目标芯片是Altera公司的Cyclone II系列中的 EP2C70-
F896C6N型FPGA器件。该板可外接TRDB-D5M摄像头和彩色TRDB-LTM 触摸屏。
4.2 系统结构框架
    图11是整个系统结构框架,其中虚线部分是Altera公司的FPGA。该系统将TRDB-D5M摄像头采集的图像数据送FPGA板进行处理,并在TRDB-LTM液晶屏上显示。

4.3 系统仿真结果
    该系统可以调整曝光值和阈值,选择是否镜像,控制显示的图像为彩色模式、灰阶模式或者Sobel边缘检测模式。图12、图13的四幅图像依次为彩色模式、灰阶模式和Sobel边缘检测模式下当阈值分别为3和96时的图像。

    从仿真结果及实验所得到的图像来看, 该系统较好地完成了Sobel 算子边缘检测的任务。实验结果表明,使用 FPGA 器件能较为准确地检测出有用的边缘信息,即能较好地完成图像处理的边缘检测工作。
    该设计利用可编程的FPGA模块完成Sobel 边缘检测的硬件设计。该方法既避免了自己编写大量程序代码的繁琐,又获得了很好的综合和实现结果。在系统构建时,各功能模块具有良好的移植性和系统扩展性。且使用的逻辑门个数少,占用很少系统资源,可以在FPGA 上完成更多更复杂的图像处理工作,为FPGA 单芯片图像处理系统的实现提供了条件。

参考文献
[1] 宇野由麻子,大石基之,成英.FPGA产品市场现状与展望[J].电子设计应用,2004(12):63-72.
[2] SHARIFI M,FATHY M,MAHMOUDI M T.A classified  and comparative study of edge detection algorithms[A].Proceedings of the International Conference on Information Technology:Coding and Computing[C].Iran,2002:117-120.
[3] 夏宇闻.Verilog数字系统设计[M].北京:北京航空航天大学出版社,2003.
[4] 官鑫,王黎,高晓蓉,等.图像边缘检测Sobel算法的FPGA仿真与实现[J].现代电子设计,2009(8):109-111.
[5] 艾扬利,杨兵.基于FPGA的Sobel算子并行计算研究[J].现代电子技术,2005,28(9):50-51.
[6] 李明,赵勋杰,毛伟民.Sobel边缘检测的FPGA实现[J]. 现代电子技术,2009,16:44-46.
[7] 杜勇,刘帝英.Matlab在FPGA设计中的应用[J].电子工程师,2007,33(1):9211.

此内容为AET网站原创,未经授权禁止转载。