文献标识码:A
DOI:10.16157/j.issn.0258-7998.2017.02.020
中文引用格式:李锦明,高文刚,张虎威,等. 自适应实时边缘检测系统设计[J].电子技术应用,2017,43(2):85-87,91.
英文引用格式:Li Jinming,Gao Wengang,Zhang Huwei,et al. The design of adaptive real-time edge detection system[J].Application of Electronic Technique,2017,43(2):85-87,91.
0 引言
图像边缘是图像像素灰度值有阶跃变化的像素集合,反映了图像灰度的不连续性,包含了丰富的图像信息,被广泛应用于图像识别领域[1]。常用边缘检测算子有Roberts、Prewitt、Sobel、Canny等[2],其中Canny算子是基于最优化边缘的检测方法,具有很高的检测精度和信噪比。但计算量大、实时性差、需要预先设置阈值等弊端制约了其在系统中的应用。
为此,利用FPGA的高速并行处理能力和丰富的逻辑资源[3],设计了一种适应性较强的实时边缘检测系统。该系统无需预先设定阈值,可根据图像的幅值梯度直方图特性[4],自动计算Canny边缘检测算法所需的高低阈值,能在不同环境下完成对图像的边缘检测,具有较强的适应能力。
1 边缘检测系统结构设计
自适应实时边缘检测系统由图像采集、灰度转换、数据缓存、Canny算子边缘检测以及VGA显示控制等模块组成。系统硬件结构如图1所示。
系统选用Cyclone III系列的EP3C40F484为核心处理器。上电后,图像采集模块通过SCCB总线初始化CMOS相机并采集图像数据,然后将图像数据转换成灰度图像以便Canny算子边缘检测模块提取图像的边缘信息,而VGA显示模块是为了边缘图像的实时显示。同时采用外扩SDRAM的方式来实现对图像数据的跨时域操作。
2 Canny算子自适应双阈值选择
传统Canny算子的检测结果极易受到外部环境影响,本文采用一种自适应双阈值选取算法来增强系统的抗干扰能力。
统计非极大值抑制后图像的梯度直方图,由梯度直方图的性质可得低阈值位于第一个大波峰和第一个小波峰之间。为了便于阈值选取和硬件实现,将梯度直方图转化为差分直方图,如式(1)所示:
其中,diff(i)=|NMS(i+1)-NMS(i)|,i=1,2,3,…,NMS(i)是非极大值抑制后的梯度直方图。然后选择第一个零点的梯度值作为高阈值,如式(2)所示,低阈值可通过式(3)得到:
其中,Arg表示第一次满足Diff(i)=0的像素点i的梯度值。
3 自适应实时边缘检测系统的实现
系统前端搭载CMOS相机OV5620采集图像。上电后,图像采集模块通过SCCB总线对相机进行初始化,然后相机输出640×480像素大小的图像数据。图像采集模块在接收图像数据的同时会根据像素时钟、同步信号来确定数据的有效位,并将数据传递到下一模块进行灰度化处理。系统中采用4.7 kΩ的上拉电阻来解决SCCB接口只能输出低电平的问题。
灰度转换模块采用一个乘加器来实现。由于FPGA不擅长浮点数处理,可先将浮点参数左移10 bit变为整数参与计算,接着例化一个乘加器,然后再把输出结果右移10 bit得到图像灰度值,如式(4)所示:
3.1 图像缓存模块的实现
系统中采用外扩SDRAM芯片MT48LC8M32(2 M×32 bit×4 bank)作为数据缓存器来解决数据的跨时域问题[5]。为了充分利用FPGA的并行处理能力和SDRAM的高速读写能力,设计了双端口(Wr_FIFO和Rd_FIFO)的SDRAM控制器。在SignalTap II中对SDRAM控制器进行功能验证,仿真结果表明,所设计的SDRAM控制器满足要求。SDRAM控制器仿真波形如图2所示。
3.2 Canny边缘检测模块的实现
Canny算子是一种面向图像幅值梯度的边缘检测方法。在计算幅值梯度前利用中值滤波代替高斯滤波进行图像预处理,不仅能平滑图像噪声,而且能更好地保留图像的细小边缘。
3.2.1 幅值梯度计算
图像中某一像素的幅值梯度是不同方向模板对该像素点邻域卷积的结果。可采用水平和垂直2个方向的3×3模板来计算图像梯度。方向模板如图3所示。
中心像素点a4的梯度幅值和梯度方向如式(5)所示:
根据分析,梯度计算模块可由6个乘加器、2个加法器和1个开方器组成,实现过程如图4所示。其中一个乘加器包含3个乘法运算和1个加法运算,可直接完成一行像素与对应模板的卷积,再调用一个加法器就可得到某一方向的梯度值,然后结合两个方向梯度值和一个开方运算来确定该像素点的幅值梯度值。
3.2.2 非极大值抑制
非极大值抑制就是比较中心像素梯度值与其梯度方向上相邻像素梯度值的大小。实现时可将梯度方向分为0°、45°、90°和135°四个方向[6],每个方向包含左右各22.5°范围,梯度方向根据μ=|Py/Px|的值和tan22.5°≈13/32、tan67.5°≈77/32来确定。梯度方向定义如式(6)所示:
在确定梯度方向之后,判断中心像素点是否为该梯度方向上的极大值。先利用移位寄存器和锁存器来获得3×3邻域内的9个像素梯度值,然后通过选择器找出与中心像素点在同一梯度方向上的两个梯度值,最后利用比较器进行大小判断。如果当前像素点的梯度值大于其他两个梯度值,则该像素点梯度值为极大值,需要参与后续的双阈值化处理,否则直接输出该像素点的梯度值为0。
3.2.3 自适应双阈值处理
根据所述算法,系统利用梯度直方图的差分直方图来自适应选择双阈值。由于处理的是256灰度级的图像,需要在FPGA内部开辟一个256×16的RAM块来存储不同梯度值像素点的个数,并把对应的梯度值作为寄存器组RAM的地址。自适应双阈值选择电路如图5所示。
当接收到开始信号时,寄存器组自动清零,把图像梯度值Grad送入地址选择器来选择相应的RAM块,经累加器b对图像梯度的各个值进行个数统计后,将结果写入原来的RAM块中,直到一帧图像统计完成;当图像结束信号到来时,时钟保持电路会自动保持256个系统时钟,累加器a在时钟驱动下顺序产生寄存器组的地址,并把该地址和下一地址的数据分别送入寄存器a和 b中,由差分电路处理后,使用比较器将差分结果与0进行比较;若结果为 0 则发出停止累加信号,此时累加器a的值就是高阈值ThH,同时把ThH右移1位得到低阈值ThL。
自动计算双阈值后,直接对非极大值抑制后的图像进行双阈值分割。首先采用两个比较器将中心像素点的梯度值Grad(i,j)分别与高低阈值ThH、ThL作比较来确定强弱边缘。若Grad(i,j)>ThH,则为强边缘,输出0xFF;若Grad(i,j)
利用SignalTap II验证Canny边缘检测模块,仿真结果如图7所示。
4 实验结果及分析
根据系统设计方案,在FPGA上实现了基于自适应双阈值Canny算法的边缘检测系统。系统可自适应选择合适阈值,集图像采集、边缘提取和实时显示功能于一体,同时实现了基于传统Canny算子的边缘测系统。为了增加实验的对比性,在实验室环境下,固定CMOS相机,分别采用高低阈值与自适应阈值进行对比测试,测试结果如图8所示。
从图8中可以看出,在图像纹理较为复杂的情况下,对于传统的Canny边缘检测系统,当阈值设置过低时,尽管能得到更多的边缘信息,但虚假边缘会增加,受噪声的干扰明显,检测结果偏差较大,如图8(c)所示;随着阈值的增高,边缘检测能力减弱,将逐渐丢失部分缓变边缘,降低图像的信息量,直接表现为植物上很多细小的斑点没有被检测出来,如图8(d)所示;而所设计的自适应边缘系统无需手动设置阈值就能提取较为完整的图像边缘,对图像细节和整体轮廓表现较好,如图8(b)所示,这避免了人为因素对检测结果的影响,提高了系统的自适应性。
系统最差路径的最大频率为113.51 MHz,系统在留有20%余量情况下处理一帧图像的时间约为3.4 ms,实时性较好。
5 结论
本文以FPGA为核心设计并实现了一种实时边缘检测系统。系统利用图像的幅值梯度直方图信息,可在不同场景下自适应选取Canny算子所需的高低阈值,有效解决了Canny算子边缘检测中需要手动设置阈值的弊端。实验测试结果表明,自适应实时边缘检测系统具有精度高、实时性好、抗干扰能力强的优点,可广泛应用于视频监控、目标跟踪、医疗设备等领域。
参考文献
[1] 陈娟,陈乾辉,师路欢.图像跟踪中的边缘检测技术[J].中国光学与应用光学,2009,2(1):46-53.
[2] 陈彦燕,王元庆.常用边缘检测算法的定量比较[J].计算机工程,2008,34(17):202-204.
[3] 李佩斌,黄莹,赵誉婷.基于DSP+FPGA的嵌入式图像处理系统设计[J].现代电子技术,2014,37(20):95-98.
[4] 黄河,李庆武,范习健.采用局部动态阈值的图像分割算法[J].光电子技术,2011,31(1):78-80.
[5] 项力领,刘智,杨阳,等.单片SDRAM的数据读写乒乓操作设计[J].长春理工大学学报(自然科学版),2013(5):140-143.
[6] 李华,朱波.基于FPGA的彩色图像实时采集系统设计[J].液晶与显示,2014,29(2):258-265.
[7] 于建军,吴志勇.CameraLink在视频控制系统中的应用[J].光机电信息,2011,28(5):42-45.
作者信息:
李锦明,高文刚,张虎威,吴正洋
(中北大学 电子测试技术国家重点实验室,山西 太原030051)