陆小锋,张俊豪,陆晓成,沈苏旻
(上海大学通信与信息工程学院,上海 200072)
图像边缘是图像的基本特征,这些信息可以用于图像分析、目标识别以及图像滤波[1]。图像算法的处理可以用软件或者硬件来实现,而对于实时图像处理来说,需要很高的速度要求,因此通常采用硬件进行图像处理[2]。目前,图像处理的硬件设计有两种技术方案,一是全定制的专用集成电路(ASIC),二是半定制的数字信号处理器(DSP)以及现场可编程门阵列(FPGA),二者在设计中的运用都可以大大加快对信息的处理速度[3]。
目前边缘检测算法已有一系列基于微分的边缘检测算子,如 Roberts算子、Sobel算子、Prewitt算子、Canny算子等[4]。Sobel算子是边缘检测中常用的一种模板,其有3种算子,分别用于检测水平边缘、垂直边缘以及对角边缘。Sobel算子在运算上不涉及复杂的数据运算,适用于实时性要求高的环境。并且与Prewitt算子相比,Sobel算子对于像素的位置影响做了加权,降低了边缘的模糊程度,效果更好[5]。由于Sobel算子检测得到的是整幅图像的梯度值,最后还需要用图像分割算法对图像的梯度采取阈值处理。
由于已经用Sobel算子检测得到了图像的梯度值,在均匀光照环境下,边缘部分和非边缘部分的灰度直方图间存在一个相当清晰的波谷,因此可以采用适合于整个图像的全局单阈值处理。但是当图像中存在非均匀光源部分,会使得阈值偏大,导致图像中部分梯度值较小的边缘容易被漏检。如图1a为均匀光源环境,图像中各部分的光照程度近似。而图1b为非均匀光源环境,由于图像的左上角存在白炽灯,会造成此部分的梯度值偏大,很大程度上会影响图像的边缘检测效果。
图1 均匀光源与非均匀光源环境下的灰度图像对比
文献[8]中提到了一种简单根据图像的灰度值将其分成高灰度值部分和低灰度值的部分,然后对这两部分分别进行边缘检测。这种方法,在一定程度上能够补偿光源不均匀性。但是由于其简单针对图像的灰度进行分组,效果有限。
本文改进了这种根据图像灰度值进行分组的思想。对采集到的图像进行Sobel边缘检测处理后,根据图像的梯度值进行分组。并在全局单阈值处理算法基础上,将其分别运用分组后的子图像中。
图2为基于图像分块的边缘检测系统的软件设计框图。系统改进了全局单阈值处理算法,根据图像的梯度值进行分组,提出了一种IEDIP(Improved Edge Detection based on Image Partition)算法。该算法先通过Sobel边缘检测算子对采集到的图像进行梯度计算,并根据图像的梯度值将其分为若干个子图像。然后对各个子图像分别采用全局单阈值处理,最后将所有子图像的阈值通过简单的计算得出一个新的阈值,并以此作为当前整幅图像阈值。
图2 基于图像分块的边缘检测系统的软件设计框图
系统采用3×3的Sobel算子分别计算3个方向的梯度值,分别为x方向、y方向和对角线方向,通过比较3个方向的梯度值,取其中的最大值作为该点的梯度值,Sobel算子在3个方向的检测模板如图3所示[9]。
图3 检测3个方向边缘的Sobel模板
Sobel算子以检测的像素点为中心,其梯度计算公式分别为
Sobel边缘检测算法在FPGA上实现需要用到3×3的方形窗,为了使窗中的3行3列共9个像素能够在一个时刻同时输出,便于之后的核心算法模块进行数据处理,在3×3方形窗的硬件设计中,本文采用3个FiFo存储器。利用Quartus II的MegaWizard Plug-In Manager工具可以很方便地设计出符合设计需求的FiFo存储器,设计数据位宽度8 bit,数据长度1 024,这里需要1个“almost_full”信号,在数据长度为640(VGA分辨力为640×480)的时候,表示1行像素数据存储完成,“almost_full”信号置“1”,同时FiFo开始输出信号并将像素数据发送到下一个FiFo中,具体实现方法如图4所示。
图4 3×3方形窗的FiFo实现结构
在梯度计算的过程中需要对方形窗所产生的像素数据进行缓存,缓存数目由窗口的大小决定。每次方形窗送出像素数据后,首先要将像素数据缓存,然后再进行梯度计算,输出梯度值。通过比较器,计算3个方向的梯度,具体FPGA实现过程如图5所示。
纺织品服装类一直是我们国家贸易出口的主要产品,但是随着一带一路战略的延伸,有更多的新兴发展中国家,他们已经替代我们国家最大制造生产国的地位,因此,虽然我们国家的服装纺织类出口比重高于一些发达国家,高于一些工业国家,但却低于一些后起的发展中国家。我们国家在世界纺织业的比重开始出现下降的趋势。受到一些例如印度、越南新兴工业制造国家的挑战,优势在丧失,因此,我们国家原有的工业基础劳动力优势,已经转换为其他产品的出口优势,随着互联网经济的快速发展,劳动密集型的产业优势,在不断地被沿路国家取替。
图5 Sobel边缘检测算法的FPGA内部电路原理框图
当物体和背景像素的灰度分布十分明显时,可以用适合于整个图像的全局阈值。由于已经用Sobel算子检测得到了图像的梯度,边缘部分和非边缘部分的灰度分布十分明显,即使全局阈值是一种合适的方法,对每一幅图像有能力自动估计阈值的算法也是需要的[9]。下面的迭代算法可用于这一目的。
1)为全局阈值T选择一个初始值。
2)用T分割该图像。这将产生两组像素:G1由灰度值大于T的所有像素组成;G2由所有小于等于T的像素组成。
3)对G1和G2的像素分别计算平均灰度值(均值)m1和m2。
4)计算一个新的阈值,由公式为
5)重复步骤2)到步骤4),直到连续迭代中T值间的差小于一个预定的参数ΔT为止。
通常,ΔT越大,则算法执行的迭代次数越少。用FPGA实现时,采用VGA的场同步信号控制阈值计算,即每产生一次场同步信号,重新计算一次阈值。本设计以ΔT设定为0为例。具体FPGA实现过程如图6所示,像素经过Sobel边缘检测算子模块输出的梯度值,除了需要根据当前阈值判断该像素点为边缘点或非边缘点并输出二值图像,还要将对该像素进行上述的全局单阈值处理算法以更新下一帧图像的阈值。
图6 全局单阈值处理算法的FPGA内部电路原理框图
值得注意的是,由于上述全局单阈值处理算法仅当物体和背景的直方图模式间存在一个相当清晰的波谷时,这个算法才工作得很好。但是,当存在非均匀光源部分时,由于非均匀光源部分的梯度值极大,上述算法中的G1值将显著增大,从而导致阈值T的值增大,这会导致一些重要的边缘像素被滤除,针对这一问题提出了下述的基于图像分块的阈值处理算法(EDIP算法)。
IEDIP算法是将每一帧图像分成若干个子图像,然后针对每个子图像分别进行上述的全局单阈值处理,最后将所得到的各个子图像的阈值进行比较计算得出一个新的阈值作为下一帧图像的阈值。由于计算得到的阈值相比非均匀光源部分子图像的阈值明显要小,因此能够有效地用于补偿光照的不均匀性,使一些重要的边缘得以保留。
由于存在非均匀光源的子图像经过全局单阈值处理算法后,其阈值与其他子图像的阈值相比较会明显增大,从而导致图像显示的分块。因此,最后需要对所有子图像的阈值进行计算,得出当前图像的阈值,使显示的图像不存在分块的现象。即最后显示的边缘检测图像需要满足两个要求,一是显示的图像不存在分块现象,二是能够有效地补偿光照现象,使一些重要的边缘不被滤除。
系统的FPGA实现框图如图7所示,首先像素需要经过Sobel边缘检测算子模块输出得到梯度值,并且根据该像素所在的坐标位置(Loc_x,Loc_y)将其划分到不同的子图像中。然后需要根据当前这帧图像的整体阈值判断该像素点为边缘点或非边缘点并输出二值图像,并且根据该像素所在的子图像,仅对该子图像全局阈值处理算法以更新该图像的阈值。最后对所有子图像的阈值进行计算,得出当前图像的阈值。由于在FPGA里面的除法很难确定需要多少个时钟周期,视频图像的处理对于速度的要求相当高。这里作了简单地加法和移位运算处理,即采用4块阈值的均值代替存在非均匀光源部分的阈值,公式为
图7 基于图像分块的阈值处理算法的FPGA内部电路原理框图
系统的实验结果如图8所示,从图8b可以看出,左上脚的白炽灯处的灰度值相当大,这对于采用全局单阈值处理后的图像相当不利,其阈值将会向灯光的灰度靠近,即阈值变大,造成分割后的图像边缘信息严重丢失。针对此问题,采用EDIP算法将图像进行分块,将白炽灯独立在一个单独的子图像中,使其灰度值不影响其他3块图像阈值的计算,其效果如图8c所示。但是,图8c中可以看到明显的分块痕迹,这是边缘检测所不希望的结果,因此需要采用改进后的IEDIP算法对4个子图像的阈值进行修正计算,将得出的新阈值作为此图像的阈值,其结果如图8d所示。
图8 基于图像分块的边缘检测系统的实验结果
结果比较如图9所示,比较图9b和图9c可知,在均匀光源环境下采用全局单阈值处理和基于图像分块的阈值处理算法得出的结果基本相同,都能够将图像的主要边缘检测处理。由图9e可以看出在非均匀光源的环境下采用全局单阈值处理的边缘检测系统仅将光源白炽灯的边缘检测出来,而且其他边缘信息全部被滤除,这是由于左上脚的白炽灯光源处的梯度值相当大,这样对于采用全局单阈值处理后的图像相当不利,其阈值将会向灯光的灰度靠近,造成图像的阈值偏大。由图9f所示,在非均匀光源环境下采用基于图像分块的阈值处理的边缘检测系统能够将图像的主要边缘检测出来,和均匀光源环境下的检测效果一样好。相比之下,本算法对于非均匀光源环境的边缘检测效果明显较好。
图9 采用基于图像分块的阈值处理和全局单阈值处理的边缘检测算法比较
本文以Sobel边缘检测算子为基础,将全局单阈值处理算法进行改进,提出了一种基于图像分块的阈值处理算法,先用Sobel算子计算出图像的梯度值,然后通过将图像分块成若干个子图像,针对各个子图像分别采用全局单阈值处理,然后将所有子图像的阈值通过简单的计算得出一个新的阈值,并以此作为当前图像阈值。本算法通过FGPA得出实验结果,实验证明了该算法在非均匀光源的环境下用于实时图像的边缘检测效果理想。
:
[1]GUO Z,XU W,CHAI Z.Image edge detecton based on FPGA[C]//Proc.9th International Symposium on Distributed Computing and Applications to Business Engineerng and Science(DCABES).[S.l.]:IEEE Press,2010:169-171.
[2]HOUARI K E,CHEERAD B,ZOHIR I.A software-hardware mixed design for the FPGA implementaton of the real-time edge detection[C]//Proc.IEEE Inernational Conference on Systems Man Cybernetics(SMC).[S.l.]:IEEE Press,2010:4091-4095.
[3]甘振华,应骏.基于FPGA的嵌入式图像边缘检测系统设计[J].电视技术,2010,34(8):43-45.
[4]QIAN X,CHAKRABARTI C,KARAM L J.A distributed Canny edge detector and its implementation on FPGA[C]//Proc.Digital Signal Processing Workshop and IEEE Signal Processing Education Workshop(DSP/SPE).[S.l.]:IEEE Press,2011:500-505.
[5]YASRI I,HAMID N H,YAP V V.Performance analysis of FPGA based Sobel edge detecton operator[C]//Proc.ICED 2008.[S.l.]:IEEE Press,2008:1-4.
[6]ZHANG J,CHEN Y,HUANG X.Edge detection of images based on improved Sobel operator and genetic algorithms[C]//Proc.IASP 2009.[S.l.]:IEEE Press,2009:31-35.
[7]GAO W,ZHANG X,YANG L,et al.An improved Sobel edge detection[C]//Proc.ICCSIT 2010.[S.l.]:IEEE Press,2010:67-71.
[8]ROUTRAY A,MOHANTY K B.A fast edge detection algorithm for road boundary extraction under non-uniform light condition[C]//Proc.ICIT 2007.[S.l.]:IEEE Press,2007:38-40.
[9]GONZALEZ R C,WOODS R E.数字图像处理[M].3 版.北京:电子工业出版社,2011.