时间:2024-09-03
四川大学电子信息学院 代临风 邓洪敏
提出了一种改进的Sobel算子:在传统Sobel算子的基础上,使用快速中值滤波滤除系统杂波、加入旋转模式下的CORDIC(Coordinate Rotation Digital Computer)算法,增加了Sobel算子的模板数,使系统的检测精度提高、并利用双滤波器求出局部图像像素点的均值作为自适应阈值,提高了检测算法在局部图像特性上的适应性。最后,将所提算法运用到FPGA处理平台上,并进行图像边缘检测的验证。实验结果表明,该方法提取得到的边缘更加精细,局部特性更好,抗噪声能力更强,且由于FPGA的高主频和并行性,硬件资源的占用率大大降低,系统整体处理时间大大减少。
引言:随着电子、计算机领域工程技术的迅猛发展,图像边缘检测已经成为图像处理技术中关键的一项。图像边缘是图像的基本特征([1]陆小锋,张俊豪,陆晓成,等.基于FPGA的图像分块实时边缘检测系统[J].电视技术,2012,36(21):51-54),图像的边缘区域集中着大量的图像信息,具有不确定性,是图像中属性变换最为剧烈的一部分。在许多的工程应用中我们都会用到图像的边缘处理作为基础从而进行之后的更为高级的图像处理,比如:人脸识别、车牌识别、手写体识别等。
在研究边缘检测算法时,通常采用基于图像强度的一阶或二阶导数,根据其变化规律和一定的检测规则,判定图像的边缘。常见的边缘检测算子有Robert算子,Sobel算子、Prewitt算子、Laplacian算子、LOG算子、Canny算子等([2]米曾真,谢志江,陈涛,等.重轨图像增强与边缘提取的关键技术[J].光学精密工程,2012,20(7):1645-1652)。但是导数很容易受到噪声的影响([5]毛星云,冷雪飞,等.OpenCV3编程入门[M].北京:电子工业出版社),因此必须在边缘检测算子中加入滤波器用以抑制噪声。
在实时图像处理中,不能出现延迟,对处理速度要求极高,如果运用软件的方法,实时性往往较差,所以我们利用FPGA主频高、并行性等特点,将其运用在实时图像处理的前端处理中,比如:滤波、边缘提取等。
文献([3]祁佳,刘紫燕.实时图像双边缘检测算法及FPGA实现[J].电视技术,2014,38(03):64-65+85)中通过Robert算子和Sobel算子进行双边缘检测方法,这篇文章中作者着重考虑了传统Sobel算子在精度上面的欠缺,通过两个算子模板一起检测的方法,加大了检测精度。但使用两种不同的算子模板难免会损坏一些局部图像上的边缘特性,且使用固定阈值和经验阈值,对图像的边缘处理不具备普遍适应性。文献([7]宁赛男,朱明,孙宏海,徐芳.一种改进的Sobel自适应边缘检测的FPGA实现[J].液晶与显示,2014,29(03):395-402)采用4个方向上的梯度模板进行Sobel边缘检测,并且加入人眼视觉特性的自适应阈值选取方法,使得在低亮度背景下的图像边缘能够被检测出来。但就其实验结果,边缘的精度相比经典算法没有明显的改进,高亮度部分检测效果甚至更差。
以上两种方法在传统Sobel边缘检测的基础得到了一定改进,但都没有周全的考虑。而综合考虑边缘检测中的干扰因素,本文借鉴并改进文献([4]李秩博,李小兵,周娴.基于FPGA的快速中值滤波器设计与实现[J].液晶与显示,2010,25(2),292-295)中的快速中值滤波进行前端的滤波处理,使用基于旋转模式下的CORDIC算法进行梯度计算,并利用中值滤波后的算子模板进行均值计算,得出局部阈值,最后实现了高清视频图像的实时处理输出,每一帧分辨率可达1920*1080。该方法精度更高,边缘更细,并有效的抑制了背景与传输噪声。
中值滤波是一种典型的非线性滤波技术,基本思想是用像素点邻域灰度值的中值来代替该像素点的灰度值[5],该方法可以很好地去除图像传输过程中的椒盐噪声,并且同时能够不破坏图像的边缘细节。
传统的中值滤波将所选3×3的矩阵中9个值依次进行比较,需要大量的硬件资源和处理时间。由于我们需要提高系统的实时性,这里采用一种快速中值滤波算法([6]李国燕,侯向丹,顾军华,陆益财,范培培.快速中值滤波算法的改进及其FPGA实现[J].电子技术应用,2013,39(02):137-140),利用FPGA并行特征,采用流水线设计,仅需要3个时钟周期就可以得到一个3×3矩阵的中值。
快速中值滤波的核心思想是利用并行特征,分成三组进行比较,通过理论分析排除一些不可能为中值的点,以快速得出3×3矩阵的中值。首先我们通过如图1所示的线性缓冲器得到3×3的滑动窗口:
图1 中值滤波矩阵实现结构图
如图1所示,本系统采用Xilinx中的线性缓冲模块得到3×3的矩阵模块,其中P11~P33为一个中值滤波模板中待检测的图像灰度值。利用FPGA的并行性,我们先将3×3矩阵每一行进行比较,分别得到三个最大值(Max),中值(Med),最小值(Min)。根据理论分析,中值的数可能为三行Max中的最小值,Med中的中值,或Min中的最大值,再对这三个值进行比较就可以得到3×3矩阵的中值,整个过程仅仅需要3个时钟周期,大大改善了系统在前端滤波时的效率问题。其程序运行示意图如图2所示:
图2 快速中值滤波示意图
Sobel算子常用于边缘检测当中,是一个离散的差分算子,经典算法以图像某点的横向和纵向与一个奇数模板进行卷积,横向与纵向计算结果分别为公式(1)和公式(2),其中I为快速中值滤波提取的3×3矩阵。
这里需要利用范数整合所求的梯度值,利用常用的P-范数进行数据整合。若,那么:
求得两个方向(X方向、Y方向)上的梯度值,此时利用P-范数求出最终的近似梯度值。经典Sobel算法采用P=1的情形,即:
计算出最终近似梯度值G后,将其与某个固定的阈值T进行比较,得出最终的边缘集合g (x, y):
上述便是经典算法中所运用到的检测方法,可以明显看出,该方法存在很大的缺陷:
在X和Y方向上进行了梯度检测,对水平和垂直方向上的边缘有较好的检测效果。但是对其他方向没有作出相应处理,导致图像的一些特定角度上的边缘容易被忽略。
做差分运算,虽然对噪声有一定的抑制能力,但是先经过算子模板加权,大大降低了抗噪声能力,并且会导致边缘信息模糊,影响处理效果[7]。
检测阈值常常人为设定,不具备普遍适应性,在图像局部容易造成粗边缘,在边缘信息较为密集的区域容易造成模糊。
我们在原算法的基础上,加入CORDIC旋转算法,利用空间矢量的旋转性,得到更多角度的梯度。在FPGA中,我们比较难直接实现正弦和余弦函数,在此利用一种旋转平移的方法得到任意角度的三角函数值。
由于FPGA的硬件特性,在实现三角函数,反三角函数,对数函数等函数时存在困难。通常使用的方法是利用查找表,将某个运算的输入与输出罗列起来,放到ROM中,根据输入查找输出。该方法可以有效地避免延时但却牺牲了大量的硬件资源,是一种用面积换取速度的设计方法,在工程应用中并不可取。
CORDIC算法的几何原理图如图3所示:
图3 CORDIC几何原理图
由图3所示我们可以推导出以下两个公式:
同样,在传统CORDIC算法的基础上进行优化。其中θi为第i次的旋转角度,θi符合条件式(,)。所以需要对几何原理部分作以下修改。
假设在直角坐标系中有一个点P0(x0, y0),将P0经零点旋转,旋转角度为θ,旋转后所得点Pn(xn, yn),我们由公式(6)、(7)可得到他们的关系:
我们将旋转角细化过后,由于每次的旋转角度θi满足,如果无法控制旋转方向的话,一定旋转次数后必将超过θ。在这里设置一个方向标志di,每次旋转前判断累计旋转角度是否已经大于目标角θ,如若大于,则设置di= —1,表示向顺时针旋转。这样每次的旋转角度就变成了diθi。我们令旋转剩余值为zi+1,则有zi+1=zi—diθi。其中z0为θ,旋转过程中zi+1会逐渐趋近于0,当达到系统需要的精度时,便结束运算。
在旋转迭代过程中,由(8)式可以看出,每次迭代都会出现cosθi和tanθi。虽然硬件(FPGA)无法执行三角函数,其中我们知道,所以我们可以利用位移操作来替代tanθi。对于cosθi,每次迭代都会产生,我们将其提取出来,即得到,利用Matlab进行仿真,当迭代次数达到一定的门限值过后,将趋近于一个常数。表1为旋转向量下Matlab仿真得出的数据表:
表1 Matlab仿真数据表
从表1所示我们可以看出,当i=15,即经过16次迭代,cosθi的值无限趋近于1,即θi无限趋近于0,此时我们可以令迭代结束。此时我们所得到的旋转点已经无限接近于我们的所求点Pn。所以当迭代次数n =16时,以式子(9)成立:
式(9)中已知的量有x0, y0以及θ,通过16次迭代,我们可以得到xn, yn。其中的值由仿真可知约等于0.607253,我们可以将其预先存入系统中。便可以得到旋转后的坐标。同时我们令,y0= 0,代入(9)式便可以得到:
由(10)式可知,我们便完成了正弦函数和余弦函数的求解。将相关值代入(9)式,便可以得出旋转平移后的目标值。图4为ModelSim仿真波形图:
图4 CORDIC算法ModelSim仿真波形图
在通过算法得到我们需要30°,60°,120°,150°的梯度G30,G60,G120,G150后,我们采用文献[8]、[9]中提到的CORDIC算法的向量模式进行梯度G的平方和开根号运算([8]J.Duprat,J.-Michel.Muller.The CORDIC Algorithm:New Result for Fast VLSI Implementation.Transaction on Computers,42(2):168-178,1993;[9]Pramod K.Meher,J.Valls,Tso-Bing Juang,K.Sridharan,K.Maharatna.50 Years of CORDIC:Algorithms,and Applications.Circuits and Systems I:Regular Papers,IEEE,9:1893-1907,2009),即使用2-范数进行最终梯度值G得求解:
在自适应的阈值选择过程中,结合了中值滤波与均值滤波结合的方法。在求解该值时,我们同样使用图1中的线性缓冲器3×3的矩阵,并利用一个时钟周期将三行像素进行快速排序。我们取三行像素的中值,即Med1,Med2,Med3进行均值运算:
在以前的方法中,单纯的采用中值滤波作为产生阈值的方法([10]李余钱,苏光大.基于FPGA的自适应阈值边缘检测的实现[J].仪表技术与传感器,2016(04):57-59)。该方法在一定程度上根据图像的局部信息进行滤波处理,但却仍然无法避免在图像局部信息差别较大时产生伪边或无法生成正确的边缘。此时,我们为了修正该方法的缺陷,在中值滤波的基础上加入了均值滤波作双滤波方法的处理。我们选取3×3矩阵的三行进行升序(降序)排序,对每行进行中值滤波方法处理,得到三个中值Med1,Med2,Med3。然后我们加入均值滤波方法求得三个中值的均值mean_value,即式(12)。以此为阈值来表示图像的局部信息。该方法能够在以往使用中值滤波的基础上产生更加精细的边缘,抗噪声干扰能力更强,能够有效的去除伪边以使最后提取到的边缘更具有局部特性,并且更加精细。
本系统使用Verilog HDL作为硬件描述语言在ModelSim上实现仿真,并在ISE上实现整个系统的设计,实验平台为基于Xilinx的Spartan 6自制电路板。本系统硬件主要以下四个部分组成:图像采集模块、图像传输转换模块、图像处理模块以及图像显示模块。图像采集模块是由模拟摄像头采集通过AV线输入。通过视频A/D转换芯片TW2867将其转换成一路8位数字信号,此为图像前端传输模块。经过FPGA核心图像处理模块进行滤波、阈值选择、边缘检测等操作后,通过HDMI发送芯片Sil9134合成HDMI传输所需的数据,并输出到HDMI显示器上。系统结构框图如图5所示:
图5 系统整体结构框图
图6 经典算法与改进算法实验对比图
我们在验证该方法的实验过程中,使用Xilinx的Spartan 6作为系统的主芯片,将改进的算法与传统算法进行对比验证,如图6所示,其中图6(a)为模拟传感器采集的原始图像,图6(b)为经典Sobel边缘检测在Spartan 6芯片中的测试结果,图6(c)为改进Sobel边缘检测在Spartan 6芯片中的测试结果。通过(b)和(c)的比较,我们可以看出改进的Sobel边缘检测在细节处的处理,更加精细,对于图像在特殊角度的处理更加的完备并且局部信息体现更加清晰,有效的滤除了系统中产生的噪声。该输出图像分辨率为1920*1080,实现了实时高清图像的处理,满足当前流行的1080P高清图像处理,并且不受传感器输入分辨率的影响。
本文所描述的系统,选择Xilinx公司的Spartan 6作为目标芯片,通过IES综合器综合之后,得到改进的Sobel硬件检测模块资源使用情况综合报告表如表2所示,该设计整体占用资源少,适合于工程开发中资源紧缺的情况。但是该设计由于使用了HDMI接口进行输出,占用了较多的I/O资源,因HDMI传输的强大优势,所以牺牲I/O资源作为代价也是可以接受的。
表2 改进算法Sobel片上资源占用表
本文采用一种全新的思路进行Sobel边缘检测,结合了快速中值滤波和自适应阈值选择,使整个系统在Spartan 6芯片上能够成功实现。从实验结果我们可以看出,该方法取得了更多的边缘检测模板,使一些特定细节上的处理相较于传统方法更为优秀,取得了更为精细的边缘,抗噪声能力大大加强。使用更为更为先进的芯片,使得整个系统的传输速率和处理精度更高,能够实时处理1080P的图像,满足了现代图像处理前端任务,为后续图像处理提供了高速高清的支撑材料。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!