文献标识码: B
文章编号: 0258-7998(2011)08-0026-04
边缘检测是图像处理、计算机视觉的基础内容;是图像分析与识别的重要环节;是目标检测、图像分割所依赖的重要特征。在 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 μ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×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.