张萍萍,李 童,李 茹,卢胜男
(西安石油大学 计算机学院,陕西 西安 710000)
边缘是图像最基本的特征。边缘图像[1]是利用微分算子对原有的图像进行边缘提取,是图像识别和分析的主要特征提取工具。边缘图像包含了很多有用的信息,在诸多领域有着十分重要的作用。常见的边缘检测算子可分为一阶微分算子和二阶微分算子。其中,一阶微分算子包括Sobel 算子、Roberts 算子及Prewitt 算子等;二阶微分算子包括Laplace 算子、canny 算子、及Log 算子等。其中,Sobel 算子具有抗噪声强、不漏检边缘、不误检边缘以及定位准确的优点,因此常用于图像边缘检测中。
一些普通的图像处理软件不能满足图像检测实时性要求。随着集成电路和图像传感器工艺的不断发展,现场可编程逻辑门阵列(Field Programmable Gate Array,FPGA)[2]的出现解决了这个问题。FPGA 利用自身的特点,可以实时处理大量的图像数据,满足实时性要求。传统的Sobel算子原理计算简单,通俗易懂,但是传统的Sobel 算子只有垂直和水平这两个方向模板的检测,易出现边缘定位不够精细、边缘检测效果不佳等问题[3]。因此,本文拟在传统Sobel 算子基础上,提出一种基于多方向的改进的Sobel 算子,通过拓展方向模板,提高边缘检测精度,以适应具有更多形状特性的目标的边缘检测应用,进一步提高检测效果。
Sobel 算子是图像边缘检测最重要的算子之一,属于一种离散差分算子,主要用于获取数字图像的阶跃,是在Prewitt 算子的基础上改进而来的。通过Sobel 算法的运算,可以得到图像的灰度近似值来监测图像的边界位置。Sobel 是一个梯度的计算,通常用梯度Δf来表示一幅图像f在(x,y)位置处的边缘强度的方向。梯度的定义如式(1)所示,梯度向量的幅值用g(x,y)表示,计算如式(2)所示;方向用θ(x,y)表示,如式(3)所示。
式(1)中:grad(f)表示f在任意(x,y)处的梯度,即求函数在X轴和Y轴方向的一阶偏导数。式(2)中:为了简化运算,梯度的幅值约等于函数在X、Y轴方向一阶偏导数的绝对值之和。式(3)中:梯度的方向θ(x,y)即在Y方向和X方向偏导之比的反正切函数值。
Sobel 算子使用垂直方向和水平方向的3×3 算子模板进行图像边缘检测,方向模板如图1 所示。
图1 Sobel 算子模板
算法的具体原理[5]是:首先计算从上至下、从左至右的两个方向分别在X和Y轴上的卷积函数;其次,令模板的中心与图像的某个像素在同一位置,将该像素周围的点和模板上的系数相乘相加;再次,将卷积函数计算出来的最大值作为该像素新的灰度值,取代图像中模板中心位置的像素值;最后,根据设置的阈值,将灰度值与阈值进行比较,来判定哪些点为边缘点。
Sobel 算子计算方法简单,使用加权平均算法能够有效地抑制图像的随机噪声。然而,只利用两个方向的模板[6]对图像进行边缘检测,检测边缘很不完整。
Sobel 算子通过卷积公式计算出每个像素在水平和垂直方向的一阶导数。当一阶导数为0,可以求出像素的最大值和最小值。计算卷积函数的过程分为以下3 个步骤[7]。
(1)设定滚动窗口的尺寸,作为数字图像算法的输出窗口,滚动窗口一般选择3×3,5×5 等奇数窗口。考虑到算法的执行效率和FPGA 芯片的资源消耗,本文选择3×3 的奇数窗口。
(2)确定卷积系数表。本文将方向模板由原来的2 个扩展到8 个,变成0°,45°,90°,135°,180°,225°,270°及315°共8 个方向,其算子模板如图2 所示。
图2 八方向Sobel 边缘模板
(3)根据Sobel 算子计算出每个方向的梯度值,并且将其与阈值[9]进行比较。
传统的软件方法在进行边缘检测系统的设计时,很难达到较高的实时性要求。FPGA 具有很强的动态配置灵活性,能在设计上实现硬件并行和流水线技术,具有处理速度快、处理系统通用性以及可移植性强的明显优势,在底层硬件中直接实现算法的运算及数据的处理,具有较好的实时性。因此,本文将采用FPGA 实现边缘检测系统的实时采集及显示功能。利用FPGA 的并行处理以及流水线操作的优势[8],使各个模块可以同时运行,在一个时钟下进行多级流水线的操作,大大提高图像处理速度。
整个系统设计如图3 所示,主要包括摄像头采集及驱动模块、存储模块、边缘检测模块、VGA 显示及驱动模块。为了实现图像的实时采集与显示,本设计首先完成对摄像头的初始化和寄存器配置,并将实时读取的图像数据存入SDRAM 存储器中,在FPGA 芯片内部并行实现边缘检测算法,最后通VGA 显示器进行检测结果的显示。整个FPGA 设计采用自顶向下的设计思想,使用全局复位和跨时钟域处理。
图3 基于FPGA 的图像采集及边缘提取系统原理图
为了验证提出的改进Sobel 算子的边缘检测功能,本文在Quartus II 平台上,采用Verilog 语言对该系统进行实现。FPGA 为Altera 公司的Cyclone IV 系列EP4CE10E17C8N 芯片,摄像头型号为OV5640。VGA 模式下,分辨率为1 280×1 024,处理速度为30 f·s-1。本文采用传统的Sobel 算子及改进的Sobel 算子两种边缘检测算法进行实时图像的边缘检测,动态画面流畅清晰,边缘检测图像能够实时、清晰地显示图像边缘,检测结果如图4 所示。
图4 基于FPGA 的实时边缘检测系统效果图
通过对比可以看出,传统的Sobel 算子对边缘的提取不够完整和精确,而改进后的算法明显地弥补了该算法对边缘提取的不足之处,对图像边缘的提取更加完整,信息更加丰富。
本文基于Sobel 算子在图像边缘检测中存在的缺陷,对传统的Sobel 算子做出了改进,提出了一种基于八方向模板的改进Sobel 算子。实验结果证明了新Sobel 算子在图像边缘检测中的有效性。此外,提出的系统利用FPGA 的优势,满足了实时性的要求,提高了检测效率。