基于改进SIFT 算法的缺陷测量方法
2023-10-21谢忠阳杨成禹
谢忠阳,杨成禹
(长春理工大学 光电工程学院,长春 130022)
工业内窥镜是一种可在不拆卸被检测设备甚至被测设备仍处在正常运行的情况下,对缺陷面实现缺陷检测的光学传感器。因其具备镜头尺寸小、简易便携和直观可靠的特点,被广泛用于汽车发动机、航空发动机、铁路建筑和机械制造等领域[1]。
检测人员在使用工业内窥镜进行缺陷检测时,首先要将内窥镜头伸入被检测物体内部(一般是狭窄空间),然后调整镜头焦距、调节镜头与观察面的距离,最后,通过移动镜头,对观察面出现的缺陷进行拍摄。因为工业内窥镜使用场合多是狭窄、灰暗的地方,且内窥镜头通常是靠近缺陷区域的,这就造成其视野范围相对较小。当被检测设备出现较大、较长的缺陷时,检测人员凭借内窥镜只能看到局部缺陷的图片,便会造成检测结果错误。
尺度不变特征变换(Scale-Invariant Feature Transform,SIFT)是Lowe[2]在2004 年提出的图像特征描述方法,被广泛用于图像拼接、图像匹配等领域。SIFT 算法的优点在于检测出来的关键点对图像尺度和旋转是不变的,而且能在一定程度上不受仿射失真、三维视点变化、噪声和光照变化的干扰,具有很好的稳定性和不变性。面对需要处理的大量特征信息时,也能够进行高效的信息区分,区分性强,此外,还具备多量性、高速性和扩展性等优点,能够满足工业内窥镜的使用场合。
在目标检测及缺陷识别领域,基于深度学习的检测算法已经逐步取代了传统的检测算法[3]。YOLO(You Only Look Once)算法是Redmon 等人[4]在2016 年提出的基于深度神经网络的一种onestage 类型的对象识别和定位算法,运行速度快,可以进行实时检测。本研究在图像拼接完成后,利用YOLOv3 算法,对缺陷区域进行识别[5]。
SIFT 算法虽然具有很多优势,但步骤十分复杂,在处理过程中,因计算量较大,使得实用性大大降低。基于此,提出一种基于改进SIFT 算法的缺陷测量方法。
1 理论分析
1.1 基于改进SIFT 的图像拼接算法
在对获取的缺陷图片进行拼接实验过程中,经常会发现图片中有许多区域是无缺陷的空白区域,然而使用SIFT 算法进行角点检测的过程,却要对图片进行全局处理,获取整个图片的尺度空间结构。基于此,决定在进行尺度空间的获取中使用灰度阈值处理的方法,利用阈值,按图像的灰度特性,将原图像分成前景、背景两个图像,对被检测设备的缺陷区域和背景区域进行划分,减少对图像中无效区域的处理,通过将图像检测范围缩小,既可以大幅度降低检测的计算量,又能够满足检测区域对精度的要求。
1.1.1 改进的SIFT 角点检测算法
(1)构建尺度空间
灰度阈值处理算法步骤概括:①计算输入图像的归一化直方图;②计算累积和;③计算累积均值;④计算全局灰度均值;⑤计算类间方差;⑥得到两个阈值;⑦计算全局方差。通过对图像的计算处理,获得合适的阈值区间,进而将图像中缺陷区域与空白区域划分出来。
物体都是通过一定的尺度来反映的,不同尺度的观察会得到不同的变化。基于此,在所获得的缺陷区域图像中找到对尺度变化不变的图像位置,在所有可能的尺度上使用一个称为尺度空间的函数,搜索稳定的特征实现图像的分层。在SIFT 中,使用高斯核实现平滑,控制平滑的参数称为尺度参数。建立起不同的尺度空间,也被称为图像的高斯金字塔。灰度图像的尺度空间L(x,y,σ)是f与一个可变尺度高斯核的卷积,计算公式:
其中,*代表卷积。
SIFT 将尺度空间细分为倍频程,每个倍频程对应于σ的加倍,再将每个倍频程进一步细分为s个整数区间。尺度空间的获取如图1 所示。
图1 SIFT 算法的尺度空间获取
图1 中,经过灰度阈值处理后的图像,按相同尺度变换,形成不同层次的倍频程,每个倍频程的各个高斯低通核中使用的标准差(有着相同幂次k的相同数量的图像是在每个倍频程生成的)。
(2)得到初始关键点
首先检测一个倍频程中两幅相邻尺度空间图像的高斯差的极值,然后与对应于这个倍频程的输入图像进行卷积。获得关键点的示意图,如图2 所示。
图2 获得初始关键点
中间的检测点和与他同尺度的8 个相邻点和上下相邻尺度对应的26 个点比较,以确保在尺度空间和二维图像空间都检测到极值点。
Lindberg 证明了尺度空间中的真正尺度不变性,要求使用σ2对LOG 进行归一化:
因此,DOG 函数已经“内置”了必要的尺度,因子(k-1)在所有尺度上都是常数,它不影响尺度空间中极值的定位过程。
(3)提高关键点位置的精度
一个连续函数被取样时,它真正的最大值或最小值实际上可能位于样本点之间。得到接近真实极值(亚像素精度)的一种方法是,首先在数字函数中的每个极值点处拟合一个内插函数,然后在内插后的函数中查找改进精度后的极值位置。
利用DOG 函数在尺度空间进行泰勒展开,对展开式进行求导,使其为0,便可以得到极值点。通常,保留绝对值不低于0.03 的特征点,可以达到去除低对比度点的目的。
(4)删除不合适的关键点,消除边缘响应
产生边缘效应主要是指高斯函数在边缘易产生噪声。DOG 函数峰值点在横跨边缘的方向有较大的主曲率,而在垂直边缘的方向有较小的主曲率。
利用Hessian 矩阵来判断关键点是否位于边缘。由于DOG 函数的主曲率和Hessian 的特征值成正比,为了避免直接计算这些特征值,处理过程中只考虑他们之间的比率。当特征值的比值小于设定值时,将关键点保留,反之剔除。
(5)计算关键点方向
通过求每个极值点的梯度来为极值点赋予方向,使其具备旋转不变性。所有方向的计算都以尺度不变的方式执行,对这一尺度的每个图像样本L(x,y),使用像素差计算梯度幅度M(x,y)和方向角θ(x,y),计算公式如下:
(6)计算关键点描述子
特征描述符指的是检测图像的局部特征(比如边缘、角点、轮廓等),然后根据匹配目标的需要进行特征的组合、变换,以形成易于匹配、稳定性好的特征向量,从而把图像匹配问题转化为特征的匹配问题,进而将特征的匹配问题转化为特征空间特征向量的聚类问题。
以关键点为中心的邻域窗口采样,并用直方图统计邻域像素的梯度方向。直方图的峰值代表了该关键点邻域梯度的主方向,相当于主峰值80%能量的峰值称为关键点辅方向。主方向与辅方向共同存在,可以增强匹配的鲁棒性、稳定性。SIFT 用描述子来识别两幅或多幅图像中局部区域之间的匹配(相似性),描述子数据被组织为一个128 维的向量。该向量选取16×16 领域,然后将这个大区域分为16 个4×4 区域,分别对每个4×4 区域8 方向分布,共计16×8=128 维向量组成的特征点描述子。具体步骤如图3 所示。此时的SIFT 特征向量已经去除了尺度变化、旋转等几何变形因素的影响,再继续将特征向量的长度归一化,则可以进一步去除光照变化的影响。
图3 计算关键点描述子
当两幅图像的SIFT 特征向量生成后,下一步采用关键点特征向量的欧式距离来作为两幅图像中关键点的相似性判定度量。取一个图像中的某个关键点,并找出其与另一个图像中欧式距离最近的前两个关键点,在这两个关键点中,如果最近的距离除以次近的距离少于某个比例阈值,则接受这一对匹配点。降低这个比例阈值,SIFT 匹配点数目会减少,但更加稳定。过程步骤如图3 所示。
1.1.2 BF 匹配算法
暴力匹配(Brute Force,BF)是一种模式匹配算法。在计算机语言中,一幅图片就是一组数据的集合,处理图像其实就是在处理图片中的像素数据。两幅缺陷图像在进行拼接处理的过程中,把其中一幅缺陷图像数据视为目标串数据S,另一幅要与之拼接的图像称为模式串数据T。通过使用BF 算法将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。
图像匹配通过识别出图像之间相似的部分,将两幅或多幅图像中的某种性质进行对比,被广泛应用于诸多领域。
通过BF 算法,将两幅图片中相同的角点进行匹配,寻找两张图片中的相似处。据此使两张缺陷图片完成融合。实验中,在融合之后,对图片做了修剪处理。
1.2 基于YOLOv3 算法的缺陷识别算法
目标检测可以看成图像分类与定位的结合,给定一张图像,目标检测系统要能够识别出图片的目标并给出其位置,由于图片中目标数是不定的,且要给出目标的精确位置,目标检测相比分类任务更复杂。其中,YOLO 系列算法比较简洁且速度快,由于是对整张图片做卷积,所以其在检测目标的过程中有更大的视野,不容易对背景误判。另外,YOLO 的泛化能力强,在做迁移时,模型鲁棒性高[6]。
YOLOv3 算法采用多尺度融合预测的方案,提高了对小目标的检测精度。通过FPN 操作将下采样得到的特征图进行多尺度融合,分别得到13×13、26×26 和52×52 的三种尺度特征图,实现了对大、中、小目标的预测。将原来的单标签分类改为多标签分类,实现对重叠区域的分类和框选。借鉴残差结构的设计思想,使用Darknet-53 作为主干特征提取,整个网络没有使用池化层和全连接层,而是通过增加卷积核步长来实现采样。YOLOv3 总共有106 层,实现了对每张图像在大、中、小三个尺度上检测目标,网格有三个出口,分别是82 层、94 层、106 层[7]。YOLOv3的网络结构,如图4 所示。
图4 YOLOv3 网络结构
YOLOv3 将目标检测当作回归问题进行处理,所以采用的损失函数为均方差损失函数。YOLOv3 的损失函数losstotal由三部分组成,分别是边界框预测损失函数losscoord、边界框置信度损失函数lossconfidence、分类损失函数lossclass,计算公式为:
YOLOv3 的评价指标主要为精度和召回率,精度以及召回率的计算如下:
2 实验验证
2.1 图像拼接实验
2.1.1 图像预处理
实验中,对钢管上较长、较大的缺陷进行拍摄,得到了两幅局部缺陷图,如图5(a)所示。因为在获取图像的过程中,会产生以高斯噪声和椒盐噪声为主的噪声信号,所以在进行缺陷测量前,需要对图像进行预处理,降低由于噪声所产生的误检率[8]。
图5 图像预处理
为改善检测的效果,本实验使用高斯滤波算法进行图片的滤波处理。高斯滤波是一种通过对整幅图像进行加权平均的线性平滑滤波算法。处理效果如图5(b)所示。为了增强图像的视觉效果,有目的地强调图像的整体或局部特性,将原来不清晰的图像变得清晰,扩大图像中不同物体特征之间的差别,使用图像增强算法对图像进行预处理,结果如图5(c)所示。
2.1.2 角点检测
图像经过预处理后,已经基本满足使用条件。分别对两幅图使用灰度阈值分割算法,结果如图6(a)所示。根据分割结果,对原图片进行切分处理,得到新的缺陷图片,结果如图6(b)所示。
图6 阈值图像分割结果
角点也被称为兴趣点和特征点,能够在一定程度上保留图像中重要的特征信息。角点检测是图像拼接的重要环节,检测效果的好坏将直接影响到拼接结果的准确性。实验对两幅图像分别进行SIFT 角点检测,检测结果如图7(a)所示。
图7 缺陷拼接结果
与SIFT 算法类似,FAST、Harris、SURF 等也可以用于角点检测。其中,SIFT 和SURF 检测效果是优于FAST 和Harris 的,但SIFT 在尺度和旋转变换的情况优于SURF,所以SIFT 算法更适合工业内窥镜的使用场合。为了验证所选算法的适宜性,本实验在完成检测环节之后,通过检测同一张图片,将几种算法的检测效果作了对比,实验进行20 组,结果如表1 所示。
表1 角点检测对比
从表中可以看出,FAST 和Harris 检测速度非常快,但FAST 检测出的角点个数明显过多,Harris检测出的角点个数过少,将会使拼接效果变差。SIFT 与SURF 检测个数居中,在拼接中具有优势,改进的SIFT 算法检测速度得到明显提升,与传统的SIFT 算法相比提高了44.3%。
2.1.3 匹配融合
使用BF 匹配算法,将两幅图片中的角点进行匹配。匹配结果如图7(b)所示。最后,对图像进行融合,完成拼接实验。拼接结果如图7(c)所示。
2.2 缺陷测量实验
2.2.1 基于YOLOv3 算法的缺陷检测实验
在完成实验之前,需要在不同的光照场景、角度对缺陷进行拍摄,共拍摄3 000 张缺陷图片,建立数据集[9]。利用Matlab 编写YOLOv3 训练程序,并在训练中对参数进行优化设置,总的训练次数为200 轮次(epoch)。YOLOv3 的总损失值分别来自位置、置信度和分类带来的误差,函数曲线如图8(a)所示。根据公式(6)和公式(7),计算得到准确率及召回率曲线,如图8(b)、图8(c)所示,平均精度均值(mean Average Precision,mAP)最大值为83.28%,函数曲线如图8(d)所示。
图8 YOLOv3 训练结果
训练结束后,利用得到的参数模型对50 组拼接后的图像进行识别,实验结果证明,缺陷检测率高达92.83%,满足实际使用要求[10]。部分检测图如图9 所示。
图9 缺陷识别结果
2.2.2 测量实验
通过像素尺寸与实际尺寸的转换关系,得到缺陷的测量长度。将测量长度减去真实长度的绝对值除以真实值,得到测量的相对误差[11]。进行50 组实验后,部分测量结果如表2 所示。平均相对误差达到0.63%,满足使用要求。
表2 拼接图像测量结果
3 结论
本文针对工业内窥镜在缺陷检测时无法一次性完成对较大、较长的缺陷的识别和测量问题,提出一种基于改进SIFT 算法的缺陷测量方法。在建立尺度空间的过程中,使用灰度阈值的方法,缩小了检测范围,解决了SIFT 算法在使用过程中计算量过大的问题。使用YOLOv3 算法完成对缺陷区域的识别,并通过像素尺寸与实际尺寸的关系,实现对拼接后图像真实长度的测量。
论文使用SIFT 图像拼接算法,解决了工业内窥镜在缺陷检测时,因使用空间狭窄、镜头检测范围有限,而无法一次性识别、测量大尺寸缺陷的问题;在建立尺度空间的过程中,使用灰度阈值的方法,缩小了检测范围,解决了SIFT 算法在使用过程中计算量过大的问题;使用YOLOv3 深度学习算法代替传统的检测算法,完成对缺陷区域的识别。
借助工业内窥摄像头,开展了缺陷拼接、识别和测量实验。实验结果表明,利用改进的SIFT算法对缺陷图像的拼接识别准确率可达92.83%;角点检测速度提高了44.3%;拼接后的图像测量相对误差可达0.63%,能够满足使用需求。