方夏章, 李 垚, 方 毅
(中国科学技术大学 电子科学与技术系,安徽 合肥 230022)
结构光[1~5]图像处理的关键在于提取出图像的光条部分。在简单背景环境下,极值法广泛使用。极值法以图像的一列(或一行)中灰度最大的点(极值点)作为光条的粗略中心,为了提高精度,在极值法的基础上使用灰度重心法,高斯拟合法等处理方法[6~9]。这些方法以极值法确定粗略中心,并利用极值点附近一定范围内的像素进行光条中心精确定位。以上方法在致力于精度的同时忽略了鲁棒性。本文基于室内环境情况复杂,受被测物体与光源距离、背景灰度变化的影响,整幅图像中光条的亮度不一,且存在环境光干扰(光滑表面对环境光的反射),这种干扰在图像上的亮度可能达到甚至超过光条的亮度,因此,以极值法来提取光条粗略中心变得不可靠。
本文提出了一种适用于室内环境的实时光条图像分割算法。为了便于表达,该算法由阈值法分割图像,分割结果包含强光源区域图像中光条亮度较高的区域的光条以及图像中亮度较高的环境光干扰;利用边缘检测去除分割结果中的环境光干扰部分,根据边缘检测的结果划分出图像中的弱光源区域(图像中光条亮度较低的区域);根据截面灰度分布特征提取出弱光源区域的光条。
强光源区域光条亮度大,采用阈值法可分割出强光源区域的光条。本文提出直方图最右峰法,可快速自适应获取阈值。该方法的原理为:若光条亮度高,有一定面积,则会在直方图最右边引入一个峰值。因此可在直方图中根据最右边的峰确定分割阈值,分割出光条部分。
本文使用水平线结构光,为了更好地适应背景整体灰度的变化,首先将图像从左到右分为16个子图像,每个子图像的宽度为原图像宽度的1/16。然后为每个子图像分别确定分割阈值Gcut:
1)建立子图像灰度直方图;
2)找到直方图最右边(灰度最大)的峰;
3)找到最右峰左边第1个谷,则Gcut为该谷对应的灰度值。
为了初步区分强弱光源区域,设定一个强光阈值Gstro。对每个子图像,根据其平均灰度Gavg自适应获得Gstro:Gstro=s×Gavg,s为强光因子,取1.2~1.4。
a.如果Gcut>Gstro,该子图像可能处于强光源区域,分割阈值有效;
b.如果Gcut 根据有效Gcut分割后的图像也可能包含环境光干扰,如图1(a)左下部分。相比真正的光条环境光的干扰没有明显的边缘特性,因此,采用边缘检测法区分环境干扰和光条。 图1 环境光干扰对图像分割的影响 首先用各子图像的有效Gcut进行图像二值化,然后进行连通域标记。 连通域标记以后,先进行面积约束,将面积过小的连通域认为是噪声去除。对保留下来的连通域,提取其轮廓点,分为上轮廓点和下轮廓点。然后将sobel边缘检测算子仅应用于这些轮廓点在原图中对应的位置,以减少边缘检测的计算时间。因为本文中光条为水平光条,所以使用纵向的sobel算子。 如图1(c)显示图1(b)中环境光形成的连通域被去除,强光源区域光条被准确提取。弱光源区域也被准确划分出来,即暂时没有提取出光条的列都为弱光源区域。 弱光源区域一种可能的情况如图2所示,光条出现在A点,但该列灰度最大值出现在B点,且整列还有很多点的灰度等于或高于光条所在点,极值法,阈值法均难以在弱光源区域识别出光条。因此,本文以列为单位分析光条的截面灰度特征,以此来提取出弱光源区域的光条。 图2 弱光源区域某列灰度分布 观察光条的截面灰度分布,有如下特征:在局部范围内,光条中心像素灰度表现为峰值;在光条的范围内,光条横截面灰度分布满足高斯分布。本文方法的思路为: 1)检索出符合特征一的像素点:将一列的灰度分布看作一条曲线g(y),对g(y)进行1次均值平滑减少噪声,然后找出曲线中所有的峰值点,再对峰值点进行非极大值抑制,如图2。 2)检测这些峰值点是否符合特征二,分析高斯分布函数 (1) 用Yc表示峰值点坐标,Yu和Yd分别代表峰值点上下梯度最大点的坐标,则条件(a)~条件(c)表示为 (2) 一列中同时满足条件(a)~条件(c)的峰值点才是光条中心,找到这个峰值点并根据其上下梯度最大的点即可提取出该列的光条。 上述灰度分布特征法两个比较关键的阈值Gdiff和Ggrad与影响因子s1,s2的设定相关。由于噪声的影响,会使得某些列光条的截面灰度分布与高斯分布相似性降低。若影响因子设定的较为严格,则部分列的光条会因噪声影响而被排除,即漏提取;若影响因子设定较为宽松,则会加大引入误提取的可能。 考虑到光条横向分布的连续特性:图像某列存在一个峰值点B,其相邻列存在已经被确认为光条的峰值点A,且A,B点的纵坐标很接近,则峰值点B为光条中心的可能性很大。亦即对于峰值点B,可以适当放宽阈值。 本文根据以上特性,采用双阈值法,将Gdiff和Ggrad分别扩展成1对阈值,包括1个宽松阈值和1个严格阈值。 设某列一峰值点纵坐标为Y,宽度为W(由其边界点确定),若其相邻列纵坐标在(Y±W)区间内存在光条,则使用宽松Gdiff和Ggrad;否则,使用严格Gdiff和Ggrad。 图3为使用双阈值法的结果,与仅使用单一阈值相比,双阈值法显著提高了光条提取的鲁棒性。 图3 双阈值法提取光条结果 本文实验基于主频为1 GHz的smart—210嵌入式核心板,选取了几个典型室内场景,如图4。 图4 几种典型室内场景 对于这些场景,极值法和本文方法提取光条的准确率(准确提取出光条的列占总列数的比例)如表1。从表1可以看出,极值法在较简单的场景(即图像几乎全是强光源区域)下,能够保持较高的准确率。但面对稍复杂的场景,其准确率大幅下降。而本文方法在上述4种场景下,均有接近100 %的准确率,表现良好。 表1 光条提取方法准确率对比 图5为图4中场景3的图像处理结果。对比极值法可知,本文方法提取的光条与原图像中的光条几乎完全重合,且准确判断出哪些列存在光条哪些列不存在光条。 此外,本方法处理一帧分辨率为640×240的结构光图像平均时间在50 ms左右,满足实时性要求。 图5 场景3的光条提取结果 实验证明,本文提出的方法在复杂的室内环境下,能准确快速地提取出光条。另外,本方法还自适应地获取了光条在不同列的宽度,只需在该宽度内使用高斯拟合等方法即可精确定位光条中心,因此,本方法同样适用于对精度要求高的应用场合。1.2 边缘检测去除环境光干扰
2 弱光源区域光条提取方法
2.1 光条截面灰度分布特征
2.2 双阈值法
3 实验与分析
4 结束语