光干涉位移测量的Sobel改进算法
2020-05-08杨庆江王卫鑫
杨庆江, 杨 硕, 王卫鑫
(黑龙江科技大学 电子与信息工程学院, 哈尔滨 150022)
随着光学技术的不断发展,对条纹的处理方法也越来越多,对检测精度的要求也越来越高。目前,比较流行的检测方法主要有条纹中心线法[1]和全灰度法[2]。在全灰度法中主要分为相移法[3]和傅里叶变换法[4]。虽然这两种方法的精度比较高,但是相移法的检测精度依赖于条纹图数量,傅里叶变换法比较容易受到噪声的影响。条纹中心线法是一种直接测量条纹位移的方法,但是光干涉型甲烷测定仪[5]的光源是由一个小灯泡发出的,不能准确得到光源的实际波长,这就给中心线的提取带来了困难。利用工业相机采集光干涉型甲烷测定仪的干涉条纹,在图像处理技术的基础上,采用边缘检测算子对图像进行边缘检测,但传统的Sobel边缘检测算子对图像边缘的方向特征考虑较少, 常丢失部分边缘细节,使检测到的位移量有着很大的误差。笔者在传统Sobel算子的基础上,提出一种多方向的边缘检测算法,以提升检测条纹边缘的完整性与连续性。
1 改进的位移测量方法
1.1 算法流程
文中利用工业相机对干涉图像进行采集,然后对采集到的图像进行预处理,预处理包括灰度化,中值滤波以及二值化。利用改进的Sobel算法对二值化后的图像进行边缘检测,得到白色条纹的坐标,从而计算出条纹的位移量。其设计算法的具体实现流程如图1所示。
图1 条纹处理过程Fig. 1 Stripe processing
1.2 图像预处理
采集到的干涉条纹是一幅包含大量的R、G、B的彩色图像。为了使资源最大化与减少处理时间需要先对图像进行灰度化处理。灰度化后图像的亮度信息与原图像保持一致,只是由原来的具有三个通道的图像变为了仅有一个灰度通道的图像。灰度化后的图像特征是通过灰度的强度信息来体现的,它的每一个像素的位置都在0~255之间。其中图像中白色的部分代表着它的灰度是255,黑色的部分代表着它的灰度为0,其余的部分则在0~255之间。通过对采集到的图像分析,发现在所包含的众多噪声中,椒盐噪声占据了非常大的比例,为了减少噪声对后面边缘检测的影响,故选用中值滤波器对图像进行预处理[6]。为了增加识别效率,需要对图像进行二值化处理。大津法(OTSU)是一种确定图像二值化分割阈值的算法,OSTU算法又称最大类间方差法[7]。它计算简单快捷,不会因为图像的亮度和对比度的破坏而受到影响,OSTU二值化法是在图像的直方图上进行处理的。
OSTU算法利用阈值把图像分为目标和背景分割成两个部分。目标和背景之间的类间方差越大,构成图像的两部分的差别就越大,如果将部分的目标错分成了背景或者把部分的背景错分成了目标都会导致这两部分的差别变得很小。所以使用这种方法分割最大的优点是错分几率非常小。预处理后的图像如图3所示。
图2 原图像Fig. 2 Original image
图3 预处理后图像Fig. 3 Pre-processed image
2 Sobel算子的边缘检测
2.1 传统的边缘检测算子
Sobel算子是一种基于图像梯度的边缘检测算法,它利用离散型的差分算子计算图像亮度函数的灰度近似值,在图像的每一个角落使用这个算子,都会产生与之相匹配的法矢量。Sobel算法主要是采用Sobel边缘检测算子对图像的横向与纵向2个方向与图像进行平面卷积[8]。用B作为原始图像,Gx代表横向检测的图像灰度值,Gy代表纵向检测的图像灰度值,其关系式为:
Sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息。但是该算法也存在两个些缺点:(1)Sobel算法使用的是水平方向和垂直方向的3×3模板与邻域卷积运算,当进行其它方向的检测时效果一般。(2)Sobel边缘检测算法判定边缘点的依据是只要通过Sobel边缘检测算子计算出的像素点梯度值大于阈值。阈值的选择关乎到最终结果的成败,使用单一的阈值会非常容易的把一些应该是噪声的点给认为是边缘的点。所以当有很多噪声的时候,Sobel边缘检测算法检测出的边缘信息效果就会非常的不好。
2.2 改进的Sobel算子
文中提到的Sobel算法采用了3×3算子模板检测图像边缘,这种方法很容易提取到错误的信息。因此,为了提高边缘信息的精度,增加抗噪性,使用了5×5的模板来代替原有的3×3的模板,而且在传统的基础上增加了十二个方向上的梯度运算,相当于八个方向的梯度检测,分别为0°、22.5°、45°、67.5°、90°、112.5°、135°、157.5°、180°、202.5°、225°、247.5°、270°、292.5°、315°、337.5°十六个方向的模板进行检测,扩大了检测的方向范围,不仅提高了鲁棒性,而且错检率在一定程度上得到了大大的减少。改进的像素模板如图4所示。
传统的Sobel边缘检测采用的是单阈值分割。这种分割方式不仅不能保证误检率与错检率同时最小,而且在提取边缘的连续上也有一定的缺陷。阈值的选取非常重要,选得过低,会误选许多错误边缘信息,为后续的处理带来困难;阈值选取过高,则会漏选边缘信息。
文中设计了一种自适应能力较强的自适用阈值分割算法。本次边缘检测是在二值化后的图像上进行的,因为在二值化的时候,已经对图像进行了第一轮的阈值处理,现在图像的灰度不是杂乱无章的,只有0和1两个像素,利用3×3的矩阵,在图像范围内求和,如果为1,则当前设为0,若不为1,则不进行阈值处理。图5为不同Sobel算子边缘检测图。由图5可以看出,边缘远远大于传统的Sobel边缘检测算子,为后续测量干涉条纹的位移量打下了坚实的基础。
图4 十六方向算子模板及模板值Fig. 4 Sixteen-direction operator template and template value
图5 不同的边缘检测算子Fig. 5 Different edge detection operator
从图5可以清楚的看到,本系统的边缘检测算子可以较好地检测到干涉条纹的边缘。
3 获取干涉条纹量
经过二值化处理后的数据成方波状。对处理过的数据进行查询,记录每个方波波峰,最开始的位置Xi,波峰的长度Li,iN。将这些组的数据长度进行对比,找出其中的最大长度Lmax,这个Lmax就是上面提到的白色条纹所在的位置如图6所示。将这个位置记录下来,然后与标准的位置进行比对,由于线阵CMOS的像素位置是整齐排列的,完全可以利用像素值来求得白色条纹移动的距离,这样就可以得到条纹偏移的距离
S=(X2-X2′)×σ,
(1)
式中:S——条纹偏移的距离;
X2——条纹移动前Lmax的初始位置;
X2′——在条纹发生移动后,Lmax的初始位置;
σ——相机相邻像元的中心距。
图6 干涉条纹偏移前后位置Fig. 6 Interference fringes shifted back and forth
利用本系统的方法进行测验的结果如表1所示。
表1 水平位移实验结果
由表1可以看出,使用本系统测量位移的方法,误差可以达到 0.01 mm,如果采用性能更好的工业相机其精度就会达到更高。
4 结束语
在对干涉条纹的位移检测中,改进了传统的Sobel边缘检测算子,给出一种多方向的边缘检测算子,改进的算子减少了边缘断点的产生,能够比较稳定地检测出完整的边缘。通过重新设置传统Sobel 算子的阈值,使其变为自适应阈值,使检测出的边缘更加变清晰,大大降低噪声和伪边缘对其干扰,利用文中提出的边缘检测算法成功获得了干涉条纹的位移量,达到了预期的效果。