基于FPGA的Sobel边缘检测算法实现及VGA显示
2019-09-10孙敬成王正彦张斌李增刚毛菲菲
孙敬成 王正彦 张斌 李增刚 毛菲菲
摘要: 针对已有的边缘检测算法存在的问题,本文采用Verilog语言对Sobel边缘检测算法进行研究。给出Sobel算法的現场可编程门阵列(FieldProgrammable Gate Array,FPGA)实现方案,分析了视频图形阵列(video graphics array,VGA)显示图像的工作机理,构造了完整的电路模型,并在Altera的Cyclone II系列FPGA芯片上进行仿真及硬件调试,同时以实际算例进行仿真分析。仿真结果表明,基于FPGA的Sobel算法实现与VGA显示技术相结合,不仅实现了在VGA上快速显示图像边缘检测结果,而且与串行相比,检测速度提高了9倍,保证检测结果的准确性。该研究为应用于嵌入式设计的图像边缘检测提供了方法和策略,具有实际应用价值。
关键词: Sobel算法; 边缘检测; FPGA; VGA显示
中图分类号: TP274+.5; TN911.73 文献标识码: A
随着机器视觉领域的广泛应用,边缘检测作为应用基础,在处理过程中迎来更高的标准。边缘是指像素灰度急剧变化的点的集合,是图像最基本的特征。边缘检测的目的是标识数字图像中灰度变化明显的点,在计算机视觉和图形分析等应用中起着重要作用。边缘检测的常见算法有梯度算子、Roberts、Laplacian、Kirsch、Sobel和Prewitt等算子[1]。目前,对这些常见算法的研究技术较为成熟,应用领域也不断扩大,在公安军事方面,如公安业务图片的判读分析、指纹识别、人脸识别和图片复原等都是成功应用边缘检测的例子;在生物医学方面,CT技术、X光肺部图像增强和心电图分析等也都应用到图像边缘分析技术。这些应用设计均采用Sobel算子,该算子可以利用卷积函数快速提取边缘[2]。目前,该算法存在多种利用硬件描述语言实现的方式,但多数为串行输入数据,处理速度较慢,已不能很好地满足实际应用需求。基于此,本文采用Verilog语言,设计了Sobel算法的并行处理电路,并与VGA显示控制相结合[3],实现了图像的检测和显示,通过对比验证了该模型的实用性和有效性。该研究为应用于嵌入式设计的图像边缘检测奠定了理论基础,具有一定的实际应用价值。
1 Sobel算法
Sobel算法是计算机视觉领域重要处理方法之一,主要通过获取数字图像的一阶梯度,实现边缘检测,以被处理像素为中心,对其邻域进行灰度分析[4]。Sobel算法的核心在于像素矩阵的卷积,利用自身模板算子检测水平边缘和垂直边缘,因此Sobel边缘检测通常带有方向性。
Sobel算法主要依靠两个模板算子,X算子(水平算子)和Y算子(竖直算子),利用两个算子与已知的图像像素点矩阵进行卷积运算,图像像素点与其邻域像素点的灰度值组成3×3的像素矩阵[5]。Sobel算子及3×3像素矩阵如图1所示。
2.2 并行输入方案
以上串行方案需要9个时钟周期才能检测1个像素点,速度较慢。为了提高检测速度,本研究提出并行输入方案,采用9个ROM存放图像灰度数据,每个时钟可同时并行取出计算所需的9个像素值。
以256×256图片为例,ROM结构如表1所示。令addr为16位地址,中addl为低8位,addh为高8位。设P1~P9为3×3的中心像素点及其邻域,经分析可知,由P5的地址可推算出其余8个数据的地址。例如,若P5地址addr5为{addh,addl},那么addr2为{addh1,addl},addr4为{addh,addl1},依次类推出其余地址。因此只要在时钟信号作用下递增产生addr5,其余地址均可计算得到。若中心地址的邻域数目不足8个,可令缺失的像素数据P输入为零。并行处理框图如图5所示。
地址计算的Verilog代码如下。
并行输入仿真结果如图6所示,当中心地址addr5为102时,其余地址如图所示,可同时提取9个像素数据P1~P9进行处理,并行计算出GX、GY、G、edge。而且每个时钟可检测1个像素点,检测速度提高了9倍。
3 VGA图像显示控制
3.1 VGA显示标准
视频图形阵列(video graphics array,VGA)使用模拟信号的电脑显示标准,支持640×480,1 024×768等多种分辨率,是目前常用的图像标准之一[10]。VGA标准有5个标准信号,分别为行同步信号HS、场同步信号VS、红、绿、蓝颜色信号R、G、B,其中颜色信号是模拟信号[11]。
VGA显示器以逐行扫描的方式显示图像,扫描顺序从左到右,从上到下[12]。以640×480分辨率为例,时钟频率为25 MHz,从左上角开始往右扫描(称为行正程),直到扫完640个像素点,再回到最左边(称为行逆程),开始第2行的扫描,如此往复,扫完第480行即完成一帧图像的显示(称为场正程),这时又回到左上角(称为场逆程),开始扫描下一帧图像。在行、场扫描的正程显示图像,逆程不显示图像,称为消隐[13]。行、场扫描的逆程分别是在行同步、场同步信号的控制下进行,VGA扫描时序图如图7所示。其中,一个行同步周期(图7a中Tg)为800个像素时间,一个场同步周期(图7b中Tg)为525行时间[14]。
3.2 VGA显示控制原理
VGA显示控制原理框图如图8所示,通过对25 MHz时钟进行800进制计数分频得到行同步HS,对行频信号进行525进制计数分频得到场同步信号VS[15]。计数值hcnt、vcnt与屏幕位置一一对应,hcnt=0,vcnt=0对应屏幕左上角像素点[16],可根据此计数值确定屏幕位置控制R、G、B颜色值。产生行同步信号HS、场同步信号VS的Verilog代码如下:
//行同步信号HS发生
always @ (posedge clk) begin
if ((hcnt >= 656) && (hcnt < 752)) HS =1′b0;
else HS=1′b1; end
//場同步信号VS发生
always @ (posedge clk) begin
if ((vcnt >= 490) && (vcnt < 492)) VS=1′b0;
else VS=1′b1; end
FPGA产生的R、G、B数字信号要经过数模转换再送到VGA接口。本设计采用的 ADV7123数模转换器具有30位数字量输入,R、G、B各10位[17]。如在第30行~第130行,第30列~第130列显示红色,显示结构示意图如图9所示。
主要Verilog代码如下:
always @ (hcnt,vcnt) begin
if (vcnt >= 29 && vcnt <= 129 && hcnt >= 29 && hcnt <= 129)
//划分显示区域
{r,g,b}={10′d1023,10′d0,10′d0};//显示红色
else {r,g,b}={10′d0,10′d0,10′d0}; //显示黑色 end
4 整体设计及结果分析
将Sobel处理的判决结果edge送VGA显示控制,即可在VGA屏幕上显示图像边缘[18],整体结构如图10所示。由hcnt和vcnt产生ROM地址,读取ROM数据送Sobel算法模块,判决结果送颜色控制模块,在屏幕对应位置上显示边缘,以黑底白边为例,若edge = 0(非边缘),则显示黑色;若edge =1(边缘),则显示白色。
ROM5地址产生的Verilog代码如下:
assign addl = hcnt; //ROM5低位地址
assign addh = vcnt; //ROM5 高位地址
VGA颜色赋值的Verilog代码如下:
always @ (hcnt, vcnt) begin
if (vcnt > 0 && vcnt < 256 && hcnt > 0 && hcnt < 256) //划分显示区域
begin if (edge = = 1) {r,g,b}={10′d1023,10′d1023,10′d1023};//边缘,显示白色
else {r,g,b}={10′d0,10′d0,10′d0}; //非边缘,显示黑色
end end
以上设计采用友晶公司的FPGA开发板DE270及VGA液晶显示器进行硬件调试[19],开发板上的FPGA,其型号为Altera公司的 Cyclone II 系列EP2C70F896C6N芯片,利用Quartus II 130软件对代码进行编译下载[20]。对256×256尺寸的两幅图片进行测试,原图及检测结果如图11所示。由图11可以看出,Sobel边缘检测算法能够正确检测图像边缘,并在VGA显示器上显示结果。
5 结束语
本文对Sobel边缘检测算法的FPGA实现进行研究,提出了图像数据的并行输入方案,相比串行输入,处理速度提高了9倍,并采用Verilog进行编码实现,给出了基于ModelSim的仿真结果。同时,研究了基于FPGA的VGA显示控制技术,采用Verilog代码,设计了显示控制电路,并将Sobel的边缘检测结果送至VGA显示电路,控制VGA显示器显示图像边缘,使处理结果更具直观性。该设计基于Intel 公司的 Cyclone II 系列FPGA芯片EP2C70F896C6N进行了验证,并在台湾友晶公司的DE270开发板上进行了硬件测试,仿真结果验证了该模型的实用性和有效性。该设计为实时、便携式图像边缘检测设备的研制提供了思路和方法。
参考文献:
[1] 康牧. 图像处理中几个关键算法的研究[D]. 西安: 西安电子科技大学, 2009.
[2] 马宇飞. 基于梯度算子的图像边缘检测算法研究[D]. 西安: 西安电子科技大学, 2012.
[3] 官鑫, 王黎, 高晓蓉, 等. 图像边缘检测Sobel算法FPGA仿真与实现[J]. 现代电子技术, 2009, 32(8): 109111.
[4] 高飞, 黄启宏, 程卫东, 等. Sobel边缘检测算子的改进研究[J]. 数字技术与应用, 2016(1): 143145.
[5] 沈德海, 侯建, 鄂旭. 基于改进的Sobel算子边缘检测算法[J]. 计算机技术与发展, 2013, 23(11): 2225.
[6] 何毅, 葛日波. 关于图像方向性边缘检测算法的研究[J]. 电气自动化, 2006, 28(6): 6870.
[7] 孙红. 移位寄存器在实验中的应用[J]. 实验科学与技术, 2007(6): 2426.
[8] 黄文举, 陈卓佳, 李健创, 等. Sobel与阈值相融合的边缘检测算法[J]. 企业技术开发, 2016, 35(22): 4647, 54.
[9] 孙百洋, 冷建伟, 赵嘉祺. 基于FPGA的Sobel边缘检测算法研究与实现[J]. 化工自动化及仪表, 2018, 45(3): 180183, 231.
[10] 曹杨, 苏丽娜, 沈琪, 等. 一种改进的Sobel边缘检测算法的设计及其FPGA实现[J]. 微电子学与计算机, 2012, 29(10): 124127, 132.
[11] 李龙澍. VGA 256种颜色的显示[J]. 计算机应用研究, 1994(3): 31.
[12] 杜宗展, 王振河, 冯迎春. 基于FPGA的VGA图像显示系统的设计[J]. 现代电子技术, 2015, 38(16): 9599.
[13] 马思群, 李荭. VGA 彩色汉字图像的消隐[J]. 中文信息, 1995(3): 5860.
[14] 吴伟学. 基于FPGA的图像采集与处理系统设计[D]. 广州: 华南理工大学, 2015.
[15] 朱奕丹, 方怡冰. 基于FPGA的图像采集与VGA显示系统[J]. 计算机应用, 2011, 31(5): 12581261, 1264.
[16] 吴婷婷, 石博雅. 基于FPGA的VGA接口技术[J]. 电脑知识与技术, 2008, 3(20): 240242.
[17] 喬建社, 杨寸明, 何灼容, 等. 基于FPGA和ADV7123的CCIR显示接口的设计和应用[J]. 半导体光电, 2010, 31(5): 793796.
[18] 姜世杰, 余红英, 洪永学, 等. 基于FPGA的VGA接口驱动技术[J]. 电子测试, 2012(12): 2932, 71.
[19] 惠为君, 沈兆军. 基于Verilog的VGA控制器[J]. 计算机光盘软件与应用, 2014, 17(24): 5556.
[20] 刘莉琛. QuartusⅡ11.0在《EDA技术》课程中的应用[J]. 科技展望, 2015, 25(21): 281.