对数域梯度与改进Sobel算子相结合的边缘检测
2019-05-14任克强
任克强,张 镕
(江西理工大学 信息工程学院,江西 赣州341000)
1 引 言
边缘是模式识别中的重要的低层次特征信息,它是基于局部特征识别的重要依据。边缘信息对光照非常敏感,尤其当物体表面被阴影遮挡或光照角度变化时,不容易检测到完整的边缘信息,会造成严重的识别错误。因此解决好光照给边缘检测带来的问题,将会给社会生产、交通以及医学影像等领域带来重大意义[1-3]。
目前,常用的边缘检测算法有很多,传统的边缘检测算法包括Roberts算子、Canny算子以及Sobel算子等[4-6]。随着数学理论及技术的不断发展,涌现了许多新的检测算法,如基于小波变换、数学形态学、神经网络以及自适应阈值选取的边缘检测算法等。近年来,研究人员开始对光照问题的数字图像处理有了密切的关注[7-9],为解决光照不均的图像边缘检测问题提供了不少新的思路。文献[10]针对文本图像在二值化时,光照不均导致文本图像OCR识别率降低的问题,提出采用改进Roberts算子和分块动态双阈值相结合来削弱光照不均的影响;该方法在处理复杂文本时效果也很显著,但是存在复杂度较高的不足。文献[11]为了解决光照不均给准确测量微米尺度条纹间距带来的问题,先采用Retinex方法对原图像进行增强,然后使用Ostu最佳阈值对图像进行二次分割,克服了条纹边缘存在凹陷的困难,使得光学显微线条纹图像中心线能够准确提取;但该方法在进行阈值分割时存在较大的噪声,处理时间也比较长。文献[12]提出一种IKDSIFT(Improve keypoint detection algorithm based-on SIFT)算法,它是针对非均匀光照下基于对象识别的关键点检测算法,使用传统SIFT方法、形态学操作以及Top-Hat过滤等方法实现预处理,然后比较数据集的关键点速率,检测出一些峰值确定最佳阈值;该算法在处理不均匀图像的检测的效果比较显著,但是过程太过繁琐,效率较低。
针对上述方法处理剧烈光照变化导致的图像不均匀光照现象所存在的不足,本文提出一种基于对数域梯度与改进Sobel算子的边缘检测方法,通过在对数域建立梯度场来消除光照影响,再结合改进的Sobel算子以及通过Bernsen算法确定阈值进行边缘检测,以提升边缘检测的效果。
2 本文算法
2.1 对数域梯度预处理
光照条件的变化会对图像像素灰度分布产生显著的影响。由于光源发出光照射到物体,一部分光会经物体表面反射,一部分光会穿透物体,还有一部分会被物体吸收形成热能,因此只有反射光和透射光能刺激人眼产生视觉效果。图像亮度一般用图像辐照度来描述,辐照度对应物体对光的表面的反射,所以物体的图像亮度有两个因素影响,一个是入射光照射,其次是物体表面反射光照射。入射光照射取决于物体相对于光源分布,而物体表面反射光取决于物体的表面光学特性。
一幅二维数字图像可以用函数f(x,y)表示,用i(x,y)表示入射光量,用r(x,y)表示反射光量,可以表示为:
f(x,y)=i(x,y)×r(x,y)
0
(1)
由于反射光取决于物体表面的光学特性,可以认定是图像的光照不变特征。无论光照条件如何,一般可以认为i(x,y)为图像低频部分,反射系数r(x,y)包含物体的各种细节可以认为图像高频部分。如果可将两者分开,然后削弱低频部分,增强高频部分,就能达到对光照不均的补偿目的。
对图像进行边缘检测,梯度信息受不均匀光照影响较大。为克服光照不均的影响,先将图像变换到对数域(仅对非零灰度值的像素变换到对数域,为零灰度值的像素直接取对应位置梯度取代),再采用梯度计算。幅度公式和梯度方向公式分别表示为:
(2)
(3)
假设i(x,y)分量是缓慢变化的,即i(x+1,y)≈i(x,y),i(x,y+1)≈i(x,y)。在此基础上可以证明对数域梯度变换只与反射分量r(x,y)有关,从而完成上述分离两分量,并削弱低频成分的目的。证明如下:
(4)
同理可证:
(5)
由式(4)、(5)的证明,可知图像边缘的对数域梯度的变化,近似反映为反射分量的变化,而与入射分量无关,所以对数域梯度场对光照具有不变性。最后对式(2)~(5)进行整合,可以将对数域梯度幅值和方向表示为:
(6)
(7)
2.2 改进Sobel算子
Sobel算子作为基于模板检测的一阶导数算子,在使用小模板时,能够获得较高质量的边缘像素集合。Sobel算子含有包括横向和纵向2个方向的3×3模板,在进行图像处理过程中,图像的每个点与两个方向的模板进行领域卷积,从而达到检测出水平和垂直边缘的目的,卷积运算表示为:
(8)
(9)
式中:A代表原始图像,Lx、Ly分别代表横向与纵向边缘检测图像灰度值,假设图像函数为f(x,y),则具体计算如式(10)、(11)所示。
将Lx、Ly进行合成梯度,梯度幅值与梯度
Lx=[f(x-1,y+1)+2f(x,y+1)+f(x+1,y+1)]-
[f(x-1,y-1)+2f(x,y-1)+f(x+1,y-1)],
(10)
Ly=[f(x+1,y+1)+2f(x+1,y)+f(x+1,y-1)]-
[f(x-1,y+1)+2f(x-1,y)+f(x-1,y-1)],
(11)
方向角分别表示为:
(12)
θ(x,y)=arctan(Ly/Lx).
(13)
考虑到梯度方向具有对称性,经典的sobel算子2个梯度模板能构成4个方向。为了同时能保证灰度图像的检测效果与效率,在水平梯度和垂直梯度的基础上,改进的Sobel算子另外增加了45°和135°方向的梯度计算,这样在进行检测时能达到8个方向,能有效提高检测效果。增加的梯度模板如图1所示。
图1 Sobel算子模板Fig.1 Sobel operator template
图像函数f(x,y)的3×3窗口:
(14)
将Sobel算子0°、45°、90°和135°模板分别与f(x,y)卷积:
(15)
梯度幅值用无穷范数表示为:
(16)
2.3 边缘检测的阈值优化
经典Sobel算子是在卷积得到梯度幅值后,通过选取人工设定的阈值进行边缘提取,这样检测到的边缘效果较差。Bernsen算法作为一种局部二值化算法是将图像分割成块,然后分别计算阈值,通过比较选出最佳阈值。一般算法通常会忽略扫描框对周边像素的阈值选取,从而造成边缘断点或缺失,因此该方法可以抑制不均匀光照给图像带来的影响。
设定当前像素为Y(i,j),以Y(i,j)为中心做一个边长为2w+1的(2w+1)×(2w+1)窗口,w为窗口宽度参数,然后计算每个窗口的阈值TY(x,y):
(17)
原始Bernsen算法得出来的阈值TY(i,j),若经强制处理则会无法避免噪声点,在细节上会变得极其敏感,故结合高斯滤波进行改进得出新的阈值TG(i,j),然后将TY(i,j)与TG(i,j)进行线性组合,通过调节线性参数a来确定最适阈值T(i,j)。
经高斯滤波后的Bernsen算法阈值TG(i,j):
(18)
由于得出来的阈值容易产生伪影现象,故在线性组合确定最佳阈值之前,先对TY(i,j)与TG(i,j)进行平滑处理:
(19)
(20)
线性组合确定最佳阈值:
(21)
(22)
(23)
(24)