《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 基于OpenCV的高压传输线位置检测
基于OpenCV的高压传输线位置检测
2015年微型机与应用第11期
张鹏展1,刘堂友1,樊 帅2
(1.东华大学 信息学院,上海 201620; 2.辽宁石油化工大学 信息与控制工程学院,辽宁 抚顺 113001)
摘要: 高压传输线的智能检测一直以来都是计算机视觉识别的热点。本文打破传统的人工检测方式,利用无人机搭载开源硬件Arduino和相机模块采集高压传输线的数据,对采集回来的高压传输线图片用OpenCV和C++进行加载、灰度处理、二值化、边缘检测、直线检测、设计函数等系列处理,最终得到一幅只有传输线边界的直线检测图像,同时过滤掉复杂图背景,从而达到良好的识别效果。
Abstract:
Key words :

  张鹏展1,刘堂友1,樊 帅2

  (1.东华大学 信息学院,上海 201620;

  2.辽宁石油化工大学 信息与控制工程学院,辽宁 抚顺 113001)

  摘  要: 高压传输线的智能检测一直以来都是计算机视觉识别的热点。本文打破传统的人工检测方式,利用无人机搭载开源硬件Arduino和相机模块采集高压传输线的数据,对采集回来的高压传输线图片用OpenCV和C++进行加载、灰度处理、二值化、边缘检测、直线检测、设计函数等系列处理,最终得到一幅只有传输线边界的直线检测图像,同时过滤掉复杂图背景,从而达到良好的识别效果。

  关键词传输线检测;计算机视觉识别;图像处理

0 引言

  随着市场竞争愈来愈激烈,以及人民生活水平的提高,架空线路也在全国各地迅速崛起,虽然摆脱了以往的断电、缺电情况,但同时也给电力工作人员带来了不小的麻烦,每年都要到人迹罕至的地方攀岩检测传输线的损坏情况,不仅增大了工作人员的负担,也带来了一定的户外风险。基于这种情况,人们更热衷于一种简便的方式来实现高压传输线的智能检测,不再是利用人工自驾飞机的检测方式,而是利用无人机导航巡检,通过识别出来的高压传输线与x轴的角度和图像中心像素点到传输线的距离,从而控制无人飞行航向来完成巡检,大大降低了电力员工作量,提高了安全性,并更加的智能化。

1 设计流程图

  基于OpenCV的高压传输线位置检测流程图如图1所示。

001.jpg

  1.1 加载图像

  利用OpenCV里的Mat来加载一幅图像。它是一个类,表示一个n维的密集数值单通道或多通道数组[1-2]。简单来说可以把它理解成一个存放数据的矩阵,可以用来存储实数或复数值的向量和矩阵、灰度或彩色图像。Mat数组布局是由阵列M.step[]定义的,元素的地址(i0,…,iM.dim-1)(其中0<ik<M.size[k]),可以表示为:addr(Mi0;…;iM.dims-1)=M.data+M.step[0]i0+M.step[1]i1+…+M.step[M:dims-1]iM:dims-1,那么二维数组就可以写成如下形式:

  addr(Mi,j)=M.data+M.step[0]i+M.step[1]j[2]

  Mat加载一幅图像形式如下:

  Mat in_img=cvLoadImage(char*filename,int flags=CV_LOAD_IMAGE_COLOR)

  其中,filename:图像所在的路径;flags如下:

  #define CV_LOAD_IMAGE_COLOR1(彩色三通道图像)

  #define CV_LOAD_IMAGE_GRAYSCALE 0(灰色单通道图像)

  #define CV_LOAD_IMAGE_UNCHANGED-1(图像颜色不变)

  1.2 灰度处理

  加载完图像之后,下一步要做的就是进行灰度变换。图像处理着重强调的是在图像之间进行各种变换,对图像进行加工以改善图像的视觉效果。图像灰度处理中,增强操作、直方图及图像间的变换是实现点操作的增强方式,又称灰度变换[3]。通过改变图像的灰度来达到一种很好的视觉效果,这是图像增强的一种手段。灰度图像的目的是为了改善画质,使得图像显示效果更加清晰,有选择地突出图像中感兴趣的特征或者抑制图像中某些不显著的特征[4]。在计算机图形学与图像处理中,数字图像的灰度是进行图像识别与处理的基础,掌握一定的灰度处理技术对提升自己的计算机应用能力有很大帮助。

  RGB色彩空间中,根据色彩与深度的映射关系主要有真彩色、伪彩色和调配色三种。真彩色是指在组成一幅图像的像素值中有R,G,B三个基色分量,每个基色分量直接决定图像的基色强度[5]。伪彩色图像的每个像素值实际上是一个索引值或代码,此代码值作为色彩查找表中CLUT某一项的入口地址,根据地址查找R,G,B的强度值。调配色的获取是通过每个像素点的R,G,B分量作为单独的索引值进行变换,然后经相应的色彩变换表找出各自的基色强度,是用变换后的R,G,B强度值产生的色彩。

  灰度是描述灰度图像最直接的特征。指的是黑白图像中的像素点的深度,通常为0~255,黑色为0,白色为255,因此黑白图像也称灰度图像[5]。0表示纯黑色,255表示纯白色,中间的颜色表示过渡色,即可以表示不同的灰度等级。

  cvtColor(const CvArr*src,CvArr*dst,int code)

  此函数为OpenCV里面的颜色空间转换函数,可以实现RGB向HSV和HIS等颜色空间转换,当然也可以转换为灰度图像。

  cvtColor()函数的参数说明如下:

  第一个参数为原始图像src,输入的8 bit、16 bit或32 bit单倍精度浮点数影像。

  第二个参数为目标图像dst,输出的8 bit、16 bit或32 bit单倍精度浮点数影像。

  第三个参数为转换模式,比如CV_BGR2GRAY表示彩色图像转化为灰度图像。

  1.3 二值化

  二值图像指只有两个灰度级的图像。它具有处理速度快、存储空间小等优点,既保留了原始图像的主要特征,也使图像的信息量得到了极大压缩,更重要的是在图像经过二值化后,可以进一步进行处理得到一些几何特征及其他更重要的特征[6]。二值化也是图像处理的一项基本技术,是整个图像处理过程的预处理阶段,如果二值化过程中阈值取得不当会丢失图像的重要信息。二值化处理主要包括全局阈值法和局部阈值法。

  全局阈值法指的是整个二值化处理过程中只使用一个阈值T。它将图像的每个像素值与其进行比较,大于T则取前景色,否则为背景色。局部阈值法是根据像素的邻域块的像素值分布来确定该像素位置上的二值化阈值[7],例如若图像光照不均匀、噪声突发、背景灰度变换较大时,采用局部阈值法,实现图像的局部自适应阈值[8]。

  cvThreshold(const CvArr*src,CvArr*dst,double threshold,double max_value,int threshold_type)

  cvThreshold是OpenCV的库函数,其典型应用就是对灰度图像进行阈值操作从而得到二值图像。

  cvThreshold()函数的参数说明如下:

  第一和第二个参数同cvtColor()。

  threshold:阈值。

  max_value:CV_THRESH_BINARY和CV_THRESH_BINARY_INV的最大值。

  threshold_type:阈值类型。

  threshold_type=CV_THRESH_BINARY

  若src(x,y)>threshold,则dst(x,y)=max_value;否则dst(x,y)=0。

  threshold_type=CV_THRESH_BINARY_INV

  若src(x,y)>threshold,则dst(x,y)=0;否则dst(x,y)=max_value。

  threshold_type=CV_THRESH_TRUNC

  若src(x,y)>threshold,则dst(x,y)=threshold;否则dst(x,y)=src(x,y)。

  threshold_type=CV_THRESH_TOZERO

  若src(x,y)>threshold,则dst(x,y)=src(x,y);否则dst(x,y)=0。

  threshold_type=CV_THRESH_TOZERO_INV

  若src(x,y)>threshold,则dst(x,y)=0;否则dst(x,y)=src(x,y)。

  1.4 边缘检测

  图像的边缘是指图像局部区域亮度变化较大的部分,此区域的灰度值在很小的缓冲区内可以变换到另一个相差较大的灰度值,图像的边缘包含了图像的大部分信息[9],由此对图像的边缘检测显得尤为重要。

  Canny算法同拉普拉斯算法的不同之处在于在Canny算法中,首先在x,y方向求一阶导数,然后组成四个方向的导数,这些方向导数达到局部最大值的点就是组成图像边缘的候选点[10]。显然,此算法最大的一个优点在于能将独立边的候选像素拼装成轮廓,较高的亮度梯度比较有可能是边缘,但是没有一个确切的值来限定多大的亮度梯度是边缘多大又不是,所以Canny使用了滞后阈值。滞后阈值需要两个阈值,即上限阈值与下限阈值。如果一个像素的梯度大于上限阈值,则被认为是边缘像素,保留下来,若梯度低于下限阈值则被丢弃,介于二者之间,只有当与其高于上限阈值的像素紧紧相连时才会被选中[11]。Canny推荐的上下限阈值比为2:1到3:1之间,此函数运用时需要输入的图像为灰度图像,输出也为灰度图,实际上为布尔图像。

  cvCanny(const CvArr*img,CvArr*edges,double lowThresh,double highThresh,int apertureSize=3)

  小的阈值用来控制边缘连接,大的阈值用来控制边缘分割,apertureSize为内核算子。主要分为四个步骤:

  (1)滤波。边缘检测基于导数计算,但受噪声影响,所以去噪是很必要的。

  (2)增强。增强算法把邻域中灰度变化突出的点显现出来,通常通过计算梯度幅值完成。

  (3)检测。最简单的边缘检测是梯度幅值阈值判断。

  (4)定位。精确确定边缘位置。

  1.5 直线检测

  霍夫变换是图像处理中的一种特征提取方法。它经过投票算法检测具有特征形状的物体,此过程是在一个参数空间中通过累计计算结果的局部最大值而得到符合该特定性状的集合作为霍夫变换的结果。霍夫变换是一种在图像中寻找直线、圆和其他简单几何形状的方法,原始的霍夫变换是一种直线变换,简单来说就是在二值图像中寻找直线的一种相对较快的算法,变换后可以推广到其他普通情况,而不仅仅是直线。它的基本理论是基于二值图像中任何像素点都可能是一些候选直线集合的一部分[12],它有标准和累加概率霍夫变换两种,只是参数不同。下面介绍标准霍夫变换:

  cvHoughLines(CvArr*img,lines,double rho,double theta,int threshold)

  经典霍夫变换用来检测直线,lines是一个向量,用来存放rho和theta,通过设定的阈值来确定返回的线段,大于该阈值则返回一条线段。

  1.6 设计算法

  经过霍夫变换可以得到传输线与图片上边沿的夹角theta与rho(OpenCV中的图像原点在左上顶点),接着就要计算出图像的原点到高压传输线的距离d,传统意义上会先计算出传输线的直线方程,然后用公式点到直线的距离求得结果,但要分情况讨论,因为传输线与x抽(图像的上边沿)的夹角不确定,大致要分四种情况,显然比较麻烦,也不利于进行检验,最好的办法是只用一种格式就把所有的情况都包括进来,熟练运用平面几何的向量与复数之间的转换来实现算法。

  假设下图2的中心点像素坐标为C(u0,v0),左边灰色高压传输线上有任意两个像素点即P和Q,Q是距离P一个单位的像素点,则P点坐标可以表示为(ρcos_`E0`_DNE%H7451_B`}Q$UH.jpg, ρsin_`E0`_DNE%H7451_B`}Q$UH.jpg),那么Q点坐标为((ρcos_`E0`_DNE%H7451_B`}Q$UH.jpg+iρsin_`E0`_DNE%H7451_B`}Q$UH.jpg),(-icos_`E0`_DNE%H7451_B`}Q$UH.jpg+sin_`E0`_DNE%H7451_B`}Q$UH.jpg)),有向线段CP、CQ分别用向量a、b表示,最后把复数转换为向量表示,即:

  E~KSF8F(TN~VIXLAL$L4Q{Y.png

  1.7 显示结果

002.jpg

  图2是房屋图片原图,上面有两根高压传输线,左边一根灰色的为旧传输线,右边白色的为新传输线,图3为图2基础上的二值化结果,图4为图3基础上的房屋边缘检测结果图,图5是提取高压传输线的边缘图,同时过滤掉了复杂的房屋背景,只显示传输线的边缘直线,图6显示了PC机的运行结果,包括整个过程的处理时间,图片中心像素点到每一根边缘直线的距离以及该边缘直线与x抽的夹角,从而顺利地控制无人机的飞行航向,完成高压传输线的检测。

2 总结

  通过上面的方法可以初步得到预期的结果,但算法并不是很完善,还需要改进,比如在设定阈值方面可以进一步做得更优化,不用手动去调阈值,而是通过设置自动选取阈值来达到更好的预期结果。

参考文献

  [1] 方玫,喻擎苍,李华强.C++Builder下基于OpenCV的数字图像处理[J].计算机工程与设计,2008(4):43-46.

  [2] 刘洁,冯贵玉,张汗灵.一种图像处理和计算机视觉的开发工具[J].计算机仿真,2006(11):56-59.

  [3] 黎松,平西建,丁益洪.开放源代码的计算机视觉类库OpenCV的应用[J].计算机应用与软件,2005(8):38-40.

  [4] 阴法明.基于OpenCV的图像处理[J].科技信息,2009(32):67-70.

  [5] 陈毅.基于灰度图像和彩色图像的瑕疵胶囊识别算法研究[D].武汉:武汉科技大学,2014.

  [6] 马超玉.光照不均匀条件下图像增强算法研究[D].长春:长春理工大学,2014.

  [7] 吴辰夏.二值化图像特征及其应用[D].杭州:浙江大学,2013.

  [8] 李书茉.非均匀光照下文本图像二值化方法的研究[D].秦皇岛:燕山大学,2012.

  [9] 林化武,王庆麟,陈心海.一种新的图象边缘检测算法[J].山东工业大学学报,1990(3):51-53.

  [10] CANNY J.A computational approach to edge detection[J]. IEEE Transactions on Pattern Analysis and Ma-chine Intelligence, 1986 (12):47-49.

  [11] Wang Zhiqian, JEZEKIEL B A. Detection and seg-mentation of generic shapes based on affine modeling energy eigenspace[J]. IEEE Transactions on Im-age Processing,2001(27):35-39.

  [12] 刘春阁.基于Hough变换的直线提取与匹配[D].沈阳:辽宁工程技术大学,2009.


此内容为AET网站原创,未经授权禁止转载。