基于Sobel算子边缘检测的仪表盘二值化阈值算法
2012-07-05梁宏希汪仁煌李宁李逸乐朱颖
梁宏希 汪仁煌 李宁 李逸乐 朱颖
(广东工业大学自动化学院)
0 引言
在对原始图像预处理的基础上获得清晰的二值图,是仪表自动读数系统进行后续处理的保证。我国仪表自动读数、检定系统的研究始于近几年,但由于仪表自身及其使用环境的复杂性,到目前为止投入实际工业应用的案例还不多,主要原因之一是仪表自动化系统的光源处理难度较大。如果直接在仪表盘正面加以光照,必然会在保护罩上产生大面积的反光区域,导致信息丢失;若光源在仪表盘侧面或上方接近处,则容易造成图片亮度不均匀和阴影颜色较深,影响处理效果。目前普遍采用的照明方法是在较远处的上方或侧面采用单个或多个大面积光源,以保证图片亮度不会过低。这种情况下阴影颜色较浅,不会严重反光,但容易造成亮度不均匀。除了光源的位置,仪表盘玻璃罩对光线的折射也会使仪表图片产生局部的亮度不均匀区域。
同态滤波是一种比较常用的光照补偿方法,可以对亮度不均的图像进行校正[1]。但对于普遍的图像二值化阈值计算方法,需要在同态滤波效果的好坏与阈值计算精确性间作出取舍。在同态滤波参数取值比较极端时,会造成图片亮度范围的严重压缩,导致大多数阈值算法二值化的结果产生偏差。
本文针对仪表盘和极端参数下同态滤波后图像的特点,提出了一种针对仪表图像的二值化方法。该方法首先使用基于Sobel算子的边缘检测法,检测出图像的边缘线,再通过统计边缘线相邻点像素值的方法获得阈值。运用Matlab中对本文方法和大津法[2]、迭代法进行仿真,说明该方法的可行性、有效性和稳定性。
1 仪表盘图像的预处理
对于大多数的原始仪表图片,亮度补偿是预处理的必须步骤。同态滤波是一种在频域中同时将图像亮度范围进行压缩和将图像对比度进行增强的方法[3]。其原理是将像素的灰度看作由照射分量和反射分量两种因素共同作用的结果,其中照射分量反映图像的内容。通过分别处理照度和反射率对像元灰度值的影响,达到揭示阴影区细节特征的目的。由于照射分量相对变化很小,可看作是图像的低频成份,而反射分量则是高频成份。同态滤波的过程如下:
其中, S (x ,y)表示原始图像; T (x ,y)表示处理后的图像;Log代表对数运算;DFT代表傅立叶变换;IDFT代表傅立叶逆变换;Exp代表指数运算;代表滤波器,使用不同的滤波器可以获得不同的滤波结果。
使用同态滤波器需要对其参数进行设定,3个参数分别为高频增益 Rh、低频增益 Rl和截止频率D。由于本文使用的Sobel算子对噪声不敏感,截止频率D对结果影响不大。当时,会产生减少低频和增强高频的效果,使动态范围压缩和对比度增强。在高、低频增益之差变小时,滤波效果增强,优点是可以获得亮度比较均匀的图片,但同时具有亮度范围压缩比较明显的缺点,此时一般阈值计算方法的结果容易发生偏差。
本文对图片进行二值化前,先进行同态滤波处理,使用Butterworth滤波器进行频域滤波,3个参数分别为
2 基于Sobel算子边缘检测的阈值计算方法
2.1 边缘检测二值化方法
仪表盘图像具有前景与背景比例悬殊,一般只有黑白二色(指针可能有彩色)的特点。一般阈值计算方法涉及图片中所有像素点的灰度值,当图片的前景和背景分离不够清晰时,由于前景所占比例极少(绝大多数情况下少于10%),错误地从属于背景的灰度区间中找出阈值。同样,在图像亮度范围小的情况下,背景部分数据对结果的权重过大,屡屡导致最终计算结果出错。
使用边缘检测的阈值计算方法对仪表盘二值化是基于其边缘线比较明显的特性。此计算方法并没有对全图的像素灰度值进行计算,仅仅使用了边缘检测算子所检测出来的属于边缘点及其相邻点的信息,保证了仪表盘图像二值化结果的有效性。
在边缘检测中有多种边缘模板,包括Roberts算子、Sobel算子、Canny算子、Prewitt算子、Kirsch算子、LOG算子等。其中,Sobel算子有平滑噪声的作用,能提供较为精确的边缘方向信息;Canny算子搜索边缘线比Sobel算子完整,但由于计算时考虑了大量无效边缘,影响最终结果的精确性。基于边缘的二值化阈值计算,由于不需要把所有边缘搜索出来,且考虑到仪表盘自带的玻璃罩容易造成图像噪点,本文用采Sobel算子进行边缘检测。
2.2 边缘检测的实现
Sobel算子在求梯度前,首先进行邻域平均或加权平均,然后再进行微分,这样可抑制噪声。水平和垂直的Sobel算子分别为[4]:
这两个Sobel算子分别对应偏导数:
由于Sobel算子是滤波算子的形式,提取边缘时可利用快速卷积函数。
2.3 阈值计算步骤
获得边缘后,用边缘信息计算阈值的步骤[5]:
1)对每个边缘点的相邻像素值进行比较。比较后取灰度值最大的像素点,判断其是否为边缘点,若不是则归入高阈值点的集合 Sh;取灰度值最小的像素点,判断其是否为边缘点,若不是则归入低阈值点的集合 Sl。仪表盘上主要的有效区域(刻度线)极少出现水平线,为了减少计算量,仅选取目标像素点左右相邻的两个像素点;
4)以TH为阈值对原图进行二值化。
仪表盘图像的前景、背景权重取值不同,对结果影响很大。由于原图中前景所占比例极少,前景权重取0.9或以上才能取得比较好的结果。为了减少计算量,可以直接取前景权重为1,并在计算时不统计背景像素。
3 实验结果
运用 Matlab对本文方法进行仿真,并与传统的二值化方法进行比较。测试环境为Intel Core i5m 2.3 GHz,内存为1.5 GB,Windows xp sp3,Matlab 6.5。
图1(a)为已有的旧图片;图1(b)、图1(c)是白天室内拍摄所得,并没有对仪表加装专用光源。其中图1(a)的弧形黑色区域会对各种阈值算法造成严重干扰;图1(b)的光源主要为日光灯,位于仪表的正右上方,所以图像整体呈左暗右亮;图1(c)的光源是从斜后方照射过来的自然光,因而有一定的反射分量,在中央偏下的位置又因摄像头的遮挡产生了一块较暗的区域。
图1 原始图像
图2 对原图使用大津法获得的二值图
图3 同态滤波图
图4 同态滤波后使用大津法获得的二值图
图5 同态滤波后使用本文方法获得的二值图
由图2 、图4与图5的对比中可以看出:
1)在原图亮度均匀性比较好的情况下,直接对原图进行二值化和使用本文方法的二值化结果相近;
2)同态滤波具有较好的亮度均衡效果;
3)大津法使用本文参数的同态滤波后的图进行阈值计算时结果偏差比较大;
4)在亮度不均衡时,使用大津法未能获得足够清晰的二值图,而本文的方法都能获得比较稳定、清晰的结果。
表1是图1的3幅图像在Matlab中的仿真数据。
表1 Matlab仿真数据
4 结论
本文提出了一种基于Sobel算子边缘检测的图像二值化阈值计算方法。实验结果表明,在仪表图像二值化应用场合,与一些传统的阈值算法比较,本文的方法具有较好的稳定性,能获得更清晰的二值图。计算时间虽然略长于大津法,但比迭代法短。程序运算时间主要消耗在时间复杂度为 O (n)的边缘检测上,因此总运算时间与图片像素基本成正比。
[1]郭贵法,汪仁煌,王欢.改进的同态滤波在指针式仪表图像预处理中的应用[J].广东工业大学学报,2009,26(3):57-59.
[2]刘胜利,贾传荧,马鲲.一种仪表图像整体阈值分割方法[J].计量技术,2003,10:5-7,14.
[3]韩文静.基于ZDPCA和多分类器融合的人脸识别[D].青岛:山东科技大学,2009.
[4]邢军.基于 Sobel算子数字图像的边缘检测[J].微机发展,2005,15(9):48-49,52.
[5]韩琳,傅勇,盛翊智.基于边缘算子的车牌图像二值化方法[J].计算机与数字工程,2007,35(1):94-96.