刘紫燕
(贵州大学计算机科学与信息学院,贵州贵阳 550025)
实时图像边缘检测的设计及FPGA实现
刘紫燕
(贵州大学计算机科学与信息学院,贵州贵阳 550025)
传统Sobel算法实现边缘检测是基于静态图像,而在实时图像处理中,边缘检测存在一定的复杂度和难度,文中将FPGA应用于实时图像边缘检测系统,从而实现动态实时图像的边缘检测。通过搭建实验平台仿真验证表明,检测精度和数据处理的运算效率均有所提高。
Sobel算法;边缘检测;实时图像;FPGA
边缘是图像最基本的特征。边缘指图像局部亮度变化最显著的部分,即图像局部特征不连续,表现为图像灰度级突变、纹理结构突变和彩色变化等。图像的边缘信息包含了大部分的图像特征信息,对图像分析来说十分重要。边缘检测技术是图像处理和计算机视觉等领域的一项基本技术,在工业、航天、医学、军事等领域中有着广泛应用。如何快速、精确地提取图像边缘信息是国内外研究的热点,然而边缘检测又是图像处理中的一个难题。
在实时图像处理中,实现边缘检测算法的计算步骤复杂,对处理速度要求较高,因此,用纯软件方法很难达到要求。然而,FPGA器件对同时可完成的处理任务几乎没有限制,适合高速、并行信号处理,并且FPGA密度高、容量大,有内置存储器、容易实现,故FPGA被广泛用于实时图像处理系统,对边缘检测的工程实现以及实现效率和成本具有重要意义。文中设计了一种基于FPGA的实时图像边缘检测系统,利用FPGA对图像数据进行实时处理,从而获得较高的处理性能。
Sobel算子是图像边缘检测算法中的常用算法,其计算简便、检测效果好。采用Sobel算法对图像进行边缘检测时,首先要利用Sobel算子计算出水平梯度和垂直梯度,然后再把两个方向的梯度结合起来,最后应用门限处理模块判断图像边缘并输出边缘检测结果,其框图如图1所示。
图1 Sobel算子原理框图
一般情况下,在数字图像处理中,每幅图像都被量化成许多像素。常用的Sobel算子有两个,一个水平方向的,一个垂直方向的,如图2所示[1]。
图2 Sobel算子示意图
Sobel边缘检测算法用3×3的卷积表来存储一个像素及其相邻像素用于计算亮度导数。把这个卷积表逐个像素地移动,最后完全通过一幅图像。除边缘像素不可导之外,对于一幅640×480的图像,这个卷积表将要移动302 964(638×468)次位置。
边缘检测首先需要将原始图像转化为灰度图像,其中的每一个像素都代表了原始图像的一个亮度水平:用10位二进制数据表示,“0”代表黑色,“1023”代表白色。这就将一幅图像创建成了一张很清楚的灰度图像。边缘信息来源于两个相邻像素的亮度变化:如果所有相邻像素有同样的亮度,则说明此区域不是边缘;相反,如果一些相邻像素的亮度明显高于另一些,则说明此区域为边缘。测量相邻像素的亮度关系就是计算亮度导数[2]
其中,G为亮度导数,Gx与Gy是Sobel边缘检测在X方向与Y方向的Kernel。
通过摄像头获得的未处理图像被转化为一个RGB(Red Green Blue)格式图像,然后把这个图像进行二值化处理转为灰度图像,以获得进行边缘提取时需要的图像强度。灰度图像被镜像后正确地显示到液晶屏上,并且存储在SDRAM FIFO(First In First Out)中。以640个像素为宽度,3行数据连续存储在M4K块里,一旦数据被准备好,就开始进行边缘检测。液晶屏控制器连续刷新屏幕将边缘检测的结果显示到液晶屏上。基于FPGA的实时图像边缘检测的系统如图3所示。
图3 基于FPGA的实时图像边缘检测的系统框图
(1)灰度图像。
为进行边缘检测,必须将从摄像头采集来的RGB彩色图像转换为灰度图像。在灰度图像中,绿色需要较高的强度[2]。直接将RGB图像转换为灰度图像的表达式。
理论上效果最好、用硬件实现效率最高的是
然而,这样的处理结果还不能为边缘检测提供足够的对比度。经过反复调试,发现在使用的设备上提高绿色强度的最好方法是
(2)梯度计算。
在用Sobel进行边缘检测时,可以用Sobel算子与图像像素做卷积运算,然后用梯度公式计算图像像素点梯度。如图 4 所示,P1、P2、P3、P4、P5、P6、P7、P8、P9为图像像素点,若对P5点做卷积,虽然是对P5运算,但是必须同时知道 P1、P2、P3、P4、P6、P7、P8、P9的信息,这在C语言中不是问题,因为它们保存在一个数组内,只要改变数组的下标即可得到,但在Verilog HDL中却做不到。
图4 具有9个点的亮度导数计算示意图
对Gx做运算时,根据Sobel边缘检测算法,P5对Gx的亮度导数为[2]
可以用Parameter定义来取得X1~X9,但很难获得 P1~ P9,因为 P1、P2、P3,…,P9是依序传入的,但Verilog HDL没有C语言中地址的概念,更没有二维数组的概念,为此,设计了3条Line Buffer做以上运算,如图5所示。
图5 具有3条Line Buffer做卷积运算示意图
设计的 3条 Line Buffer与 Gx乘加的部分由Megafunction的altmult_add与 parallel_add完成,每条Line Buffer只有3个点的程序来仿真,结果如图6所示。从图6中可以看出,在最后一个pixel:9输入后,下一个 clock得到的值是1、4、7,再下个 clock是2、5、8,最后一个 clock是9、6、3,也就是 Line0依次得到9、8、7,Line1 得到6、5、4,Line3 得到3、2、1,所以 Line0 必须与 X9、X8、X7做乘加,其余同理,所以:
图6 具有3条Line Buffer做卷积运算仿真结果
Mac_3是 Megafunction的 altmult_add,其余的 X1、X2与 Y0、Y1、Y2同理。
(3)图像数据缓冲器。
在图像的空域滤波中,为得到3×3的方形模板窗,通常使用FIFO(First In First Out)模块作为图像数据的缓冲器。文中摄像头采集的图像被送到SDRAM FIFO中,故需将图像信息装载到3个连续的M4K块中,这些块存储了3行像素以备边缘检测计算用,边缘检测状态机启动对第一个3×3卷积表进行卷积运算,结果被送到SDRAM并用液晶屏输出。接着进行下一个3×3卷积表计算,依次类推,直到最后一个3×3卷积表的计算完成。当计算完成一行后,需要读取更多由M4K块组成的行,但是这次仅需要读取第4个M4K作为第1个M4K,余下第2个M4K的值仍作为第2个M4K,第3个M4K的值仍作为第3个M4K,如此重复,直到计算完整幅图像,然后继续计算下一帧。
为验证该方法的有效性,文中搭建了验证平台并对Sobel边缘检测模块进行验证。由Matlab产生原始数据和期望结果数据,并分别存放在original.txt和result.txt两个文件中。如图7所示,将原始数据读进test_up_mpdule_Sobel单元,与控制信号一起产生数据流。期望结果数据被test_result_module_Sobel读入。这个模块将来自Sobel模块的数据与期望数据相比,给出相应的测试结果。
图7 Sobel测试示意图
图8所示为Sobel实时边缘检测的仿真时序图,在每一行的开始,读数据状态机从SDRAM中读取640个像素并写入3个M4K块。先用3个时钟周期来定位M4K中的3×3卷积表,当卷积表更新完成后开始边缘检测。需要花4个时钟周期计算最大的边缘值。然后,将边缘检测结果存入SRAM中。通常用一个周期决定下一个状态。如果像素点少于640个,将从M4K块中读取新值组成640个像素。
图8 Sobel实时边缘检测的仿真时序图
Sobel实时边缘检测效果如图9所示。(a)为原始图像,(b)为采用Sobel算法进行边缘提取后的图像,从系统的运行结果可以看出,该系统可以对实时图像进行边缘检测运算,并且检测精度较高。
图9 实时边缘检测效果对比图
使用Quartus II综合器对Sobel模块进行综合后,得到的综合报告如图10所示。由综合报告可知,Sobel边缘检测模块占用资源相对合理。因此,完全由硬件电路进行数据处理算法,并且能在数据处理中实现高并行度是FPGA的优势。
图10 Sobel边缘检测综合报告
用Sobel算法实现基于FPGA的实时图像边缘检测。传统Sobel算法实现边缘检测是基于静态图像的,文中方法是用摄像头采集连续的视频流,在FPGA上用Sobel算法实现实时图像的边缘检测,同时显示在液晶屏上。传统的图像处理系统由于对数据进行串行操作,处理一次卷积需要几十至几百个指令周期,而利用FPGA硬件资源进行数据运算则可以在一个周期内得到运算结果,效率大大提高。
[1]吴海彬,何祖恩,李文锦.基于改进Sobel算子的图像边缘检测及其嵌入式实现[J].2009,37(10):133-136.
[2]张广军.视觉测量[M].北京:科学出版社,2008.
[3]谷陆生.基于SoPC的实时边缘检测系统研究[J].电子技术应用,2009(8):47 -48,75.
[4]李明,赵勋杰,毛伟民.Sobel边缘检测的FPGA实现[J].现代电子技术,2009,33(16):44 -46.
[5]张志刚.FPGA与SOPC设计教程-DE2实践[M].西安:西安电子科技大学出版社,2007.
Edge Detection of Real-Time Image Based on FPGA
LIU Ziyan
(College of Computer Science and Information,Guizhou University,Guiyang 550025,China)
The traditional Sobel algorithm for edge detection is based on static image,and it is difficult to carry out in the process of real-time image processing.We design an edge detection system of real-time image based on FPGA,which can implement the edge detection dynamically,and has high detection accuracy and efficiency.
Sobel algorithm;edge detection;real-time image;FPGA
TP391.41
A
1007-7820(2011)12-001-04
2011-06-16
贵州省自然科学基金资助项目([2011]2193号)
刘紫燕(1977—),女,副教授,硕士生导师。研究方向:无线通信,嵌入式通信,下一代网络等。