华北电力大学 控制与计算机工程学院,河北保定 071003
绝缘子是输电线路中的重要元件,起到电气绝缘及线路支撑的作用,同时也是故障频发元件,自爆、破损、裂纹和异物等故障严重威胁着输电线的安全可靠运行[1]。据统计,因绝缘子故障导致的跳闸事故占目前输电线路事故的81.3%[2]。
因此,定期监测绝缘子状况,及时发现绝缘子故障至关重要。近几年,因无人机巡线的高效、快捷、可靠、成本低、不受地域影响等优点[1],通过对无人机巡线采集的图像数据进行分析处理,从而发现绝缘子故障已成为研究热点。而实现绝缘子的精确定位是实现绝缘子故障自动诊断的重要前提。
输电线路中使用的绝缘子种类繁多,根据绝缘子片结构型式可分为盘形绝缘子、针式绝缘子、蝶形绝缘子和棒形绝缘子[3]。但是各类绝缘子串具有以下相同特点:绝缘子串的片状结构具有平行排列的规律特征。
因此,本文提出一种基于聚类分析与Adaboost算法的绝缘子串识别方法,通过聚类分析初步确定绝缘子串区域,通过Adaboost分类器对初识别结果进行进一步判定,实现绝缘子串的准确识别,识别准确率达到91.5%。
本文所提绝缘子串识别方法的思路如图1所示。首先对待测航拍巡检图像进行预处理后,采用LSD算法检测直线段,通过聚类分析检测平行线段,初步确定绝缘子串区域。由于航拍背景中有可能存在其他同样具备平行特征的目标,通过建立正负样本集,提取不变矩特征进行学习训练,得到Adaboost级联分类器,用此分类器对绝缘子串初始识别结果进行进一步判定,得到最终识别结果。
LSD[4]是一种线段检测子,相比于其它线段检测算法,它具有运算时间短,不需要人工设置参数等优点。该算法的核心思想是区域生长和误差控制,具体处理过程如下所示:
(1)梯度特征计算
首先对图像进行高斯下采样来消除锯齿效应,并计算图像中每一个像素点的梯度值和梯度方向。
(2)像素点伪排序
根据梯度值对所有的点进行伪排序,建立状态列表,所有的点初始状态均为UNUSED,将梯度值小于阈值ρ的点的状态设为USED。
(3)区域生长
取出列表伪排序中数值最大的点作为种子点,以该点为起点搜索周围状态为UNUSED且梯度方向满足阈值[-t,t]的点,修改满足条件点的状态为USED,生成包含所有满足条件点的矩形。
(4)一致性判断
判断该矩形内一致性点密度是否满足阈值要求,将不满足的矩形切断为多个矩形,并重复本步骤,直至满足阈值要求。点一致性判别公式为:
式中:region_ang(t) —第t个区域的方向角;
ang(i,j)—像素(i,j)的梯度方向角。
(5)线段判断
用一个随机分配平均分布于[0-2π]像素值且不包含直线段的噪声图像作为模板,计算NFA值,定义如下:
式中:N—当前图像中直线(矩形框)的数量;
k(r,l)—模板图片l中r矩形内一致性点的个数;
k(r,i)—测试图片i中r矩形内一致性点的个数。
如果NFA值很大,则认为当前区域是背景中的一部分,相反,如果NFA值小于阈值,此时矩形框内的区域则认定为线段,并输出,线段检测效果如图2所示。
统计每一条直线段的长度、方向和中心点坐标,依据绝缘子串的特点,线段本身满足平行性, 线段中心点保持在一条直线上,线段的长度、相邻线段之间的距离保持在一定的范围内。根据这些特征,给出一种 ADKC(adaptive dynamic k-means clustering)聚类算法[5]对直线段进行聚类,检测出满足以上特征的平行线段。
ADKC不需要初始确定聚类质心,只需要执行一次循环遍历即可获得最终聚类结果,且每次聚类结果相同。具体操作过程如下:
假设直线段集合S={x1,x2,…,xn},其中直线x1的方程为:y=m1x+b1。
(1)构建样本距离矩阵D
其中:di,j—样本集中两两之间的距离
(2)计算距离矩阵中非对角原始的均值和方差
其中,1{·}—表示指示函数。
(3)计算阈值
其中,δ—正常数。
(4)平行段聚类
初始化样本集的聚类数为1,样本聚类中为μ1=x1,第1聚类结果为S1={x1},计算待处理样本xi到所有聚类中心的距离,并获得该样本属于的聚类类别jmin,如果该样本的最小距离小于阈值ξ,说明样本属于第jmin类,并记录该直线段样本的长度、方向、中心点位置,以此对所有直线段进行处理后,对K个聚类结果执行权重归一化操作,并计算直线段聚类结果。
通过聚类分析后,平行线段检测结果如图3所示。
矩是一种线性特征,矩特征对于图像的旋转、比例和平移具有不变性,因而被用来描述图像中的区域特征[6]。
一幅数字图像f(x,y)的二维(p+q)阶矩定义为:
其中,p,q=0, 1, 2……。
相应中心矩定义为:
归一化(p+q)阶中心矩定义为:
Hu[7]利用上述矩理论构造了7个具有平移、比例和旋转不变性的矩不变量,即Hu不变矩。
Adaboost算法[8]起源于Schapire在1959年提出的Boosting算法,它是一种能够提升任意给定学习算法精度的普适方法。其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。
其算法本身是通过改变数据分布来实现的,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改过权值的新数据集送给下层分类器进行训练,最后将每次训练得到的分类器最后融合起来,作为最后的决策分类器。使用Adaboost分类器可以排除一些不必要的训练数据特征,并放在关键的训练数据上面。
AdaBoost算法的具体步骤如下:
1、给定训练样本集S:
其中,X和Y—分别对应于正例样本和负例样本;
T—训练的最大循环次数。
2、初始化样本权重为1/n,即为训练样本的初始概率分布;
3、第一次迭代:
(1)训练样本的概率分布相似的情况下,训练弱分类器;
(2)计算弱分类器的错误率;
(3)选取合适阈值,使得误差最小;
(4)更新样本权重;
经T次循环后,得到T个弱分类器,按更新的权重叠加,最终得到的强分类器。
图4是Adaboost算法训练过程。
利用上述方法对绝缘子串进行识别,本文选取500张正样本(绝缘子串)图像和500张负样本(背景)图像,分别提取正负样本的7个Hu不变矩后,采用Adaboost算法进行分类器训练,得到一个级联分类器,运用该分类器对聚类分析初始识别区域进行进一步识别,最终识别效果如图5所示。该算法在VS2008,opencv2.4.3的环境下编程实现。
将本文算法与文献[9]的方法进行比较,算法的平均时耗和检测率见表1。
表1 算法的平均耗时与检测率比较
在输电线路识别中,准确识别绝缘子串位置是检测绝缘子串故障的前提,本文针对绝缘子串的特点,提出了一种有效的绝缘子串识别方法,通过聚类分析检测平行线段,通过Adaboost分类器进一步识别绝缘子串。实验证明,本文提出的绝缘子串方法具有以下特点。
(1)鲁棒性强。对于不同背景下的输电线路航拍图像,只要图像中绝缘子串结构清晰,该算法就能对绝缘子串进行准确识别与定位。
(2)识别效果好。对于不同种类的绝缘子串都能准确定位,检测率能够达到91%以上。
(3)实时性好。该算法利用聚类分析检测平行线段的方式对绝缘子串区域进行预定位,大大减少了机器学习遍历搜索的区域,整体计算用时少,保证了算法的实时性。
本文所提的绝缘子串识别方法面向电力系统工程应用,具有鲁棒性强、定位效果好、实时性高等优点,在工程实际中有很好的应用前景。