第一章 引言
1.1 研究背景
铁路运输是陆上交通非常重要的一种运输方式,特别是近几年,随着国家经济水平的提高以及对运输效率要求的提高,铁路运输的速度和铁路的铺设长度也在不断的提升。在中国中长期铁路规划中,2020年中国的四纵四横客运专线网络全长将达到16000公里,仅行驶旅客列车的客运专线时速可以达到300公里或以上,而旅客列车和货物列车混行的客运专线的时速则为200~250公里。正是由于铁路运输的重要性,铁路运输的安全性也受到了越来越多的关注,为了保障铁路运输的安全,很有必要对铁路进行安全隐患检测及预防。
钢轨是保证铁路运输能够正常运行的重要部分,由于在长期的使用过程中会不可避免的有一些伤损,因此使用中的钢轨必须定期进行检查,例如美国的联邦铁路管理局 (FRA)就明确要求每两个星期检查铁路轨面的物理伤损 [1,2]。
本课题是暨南大学光电工程研究所与中国南车株洲电力机车研究所的合作项目“高速电力机车安全综合检测预警系统”的子项目“铁路轨面高速图像检测系统”,本项目的目的是自主研发一套针对铁路轨面伤损的高速自动检测系统。
铁路轨面伤损高速自动检测系统的硬件部分用于在列车行进中不断采集所经过钢轨的表面图像;由于硬件采集部分采集到的轨面图像数量巨大,必须通过图像处理的方法对采集图像进行快速的检测并且对轨面伤损进行标记,最后将有轨面伤损的图像单独提取出来。在此之前,暨南大学光电工程研究所的郭龙已经运用matlab对铁路轨面检测系统的图像处理算法部分进行了研究[3]。本文主要对已有的图像处理matlab程序算法进行了工程上的性能优化,从而实现对硬件系统采集的采集图像进行快速的处理。
1
暨南大学硕士学位论文
1.2国内外研究现状
1.2.1铁路轨面检测方法的介绍
机器视觉检测法是应用成像技术,通过图像获取装置取得轨面图像;然后将该图像传送至图像处理部分,通过数字图像处理技术,根据图像像素分布、亮度等特征信息来进行伤损存在的判定;若存在伤损,再对伤损进行几何尺寸、形状等的识别,并对伤损危害等级进行判定。机器视觉检测法是全自动化作业,具有非接触、速度快、精度高、抗干扰性强等特点,为轨道检测提供了更为有效的方法,在节约人力资源的同时,提高了检测的速度和精度。
1.2.2机器视觉检测法的发展介绍
本项目组采用机器视觉检测方法,搭建了一套铁路轨面伤损检测系统,这套检测系统由负责图像采集的铁路轨面图像采集部分以及负责图像处理的铁路轨面伤损检测软件两部分组成。
在上世纪 70 年代机器视觉首次应用于铁轨检测,但由于当时落后的计算机硬件,未能投入到实际应用中,直到90 年代这一技术在铁路轨面检测方面才有所推进。英国伯灵顿大学在1995 年开发出一种用于测量轨道几何参数的系统,这个系统可在 60km/h 的速度下实时测量铁轨的断面轮廓和铁轨的一些几何参数[4]。同时,美国纽约的 KLD 实验室研发的铁轨测量与分析光学系统 ORIAN(Optical Rail Inspection and Analysis) 可以说是机器视觉在轨道检测方面最具有代表性的系统。ORIAN 主要用于动态检测钢轨磨损的状况,理论上ORIAN 可以在高达 175km/h 的速度下对钢轨磨损状况进行非接触测量。ORIAN 系统将两个超高分辨率的数字摄像机和两个激光模块分别安装在轨检车的车轴两端,激光模块采用激光线光源以保持轨道表面光照的均匀性,摄像机用于摄取轨道表面的动态视频图像,然后采用视频处理技术对获取的视频进行实时处理[5]。英国伯明翰大学的 Clemens Mai 在1998 年提出了可以在运行状态下使用机器视觉技术全方位地检测铁轨各个方面的参数的观点[6]。俄罗斯莫斯科国立大学研发出非接触式检测车 KSIR用于莫斯科地铁系统,KSIR包括五对红外线线光源和矩阵式 CCD,四对红外线点光源和高速线阵CCD,能实现在 70km/h 的速度下对轨道进行在线检测[7、8、9]。2013年,美国的Rail Transportation and
2
暨南大学硕士学位论文
Engineering Center, UIUC正在研究一种包括轨面,以及铁轨扣件同时检测的算法[10];图 1-1 是美国联邦铁路局基于计算机视觉理论研发的一种小型轨道检测车[11]。
图 1-1 小型轨检车
在我国,一些院校和研究所近几年来开展了这方面的研究,并且取得了一些成果。1999 年,西安电子科技大学开展了一些预研性实验,运用机器视觉的技术对铁轨样本图像进行判别,做了一些算法方面的研究。西南交通大学的孟佳[12]等于 2005年做了一些基础性工作,针对铁轨表面不同类型的缺陷,给出了经各图像处理步骤及模式识别后的缺陷分类结果,证明了计算机视觉技术能实现轨道表面缺陷正确检测的目的。2005 年,大连海事大学的谭伟[13]等人对铁轨表面缺陷图像的算法进行研究,有效区分出了缺陷。在2010年,北京交通大学的轨道交通控制实验室发表文章描述了在实验室用于实验的轨面伤损检测系统,该系统理论上可对在100km/h的运行速度上进行轨面检测[14]。2012年,南昌大学吴禄慎[15]对钢轨表面缺陷提取技术进行了研究。在2013年,暨南大学光电工程研究所的郭龙、孙亮、葛嘉的学位论文上描述了一套铁路轨面伤损高速检测的实验样机,实验样机的基本原理如图1-2所示,郭龙、孙亮、葛嘉设计的这整套铁路轨面检测系统已经有了初步的[16,17,18],进行了相关的实验,葛嘉的论文对光学系统进行了计算分析;孙亮的论文主要讨论的是系统机械结构;郭龙用matlab作为工具,对已经采集完成并存储于计算计中的铁路轨面图像进行图像处理,并针对检测算法进行了研究。
3
暨南大学硕士学位论文
图 1-2 铁路轨面伤损检测系统
1.3本文的主要工作内容
本文主要介绍的是铁路轨面伤损图像检测软件系统和对该系统进行的一系列优化实验。首先介绍整个铁路轨面伤损检测软件的流程以及图像处理部分的部分重要算法的原理。然后通过实验室的模拟小车实验和实地的上车实验对前期的算法进行验证,并对之前的算法以及处理流程进行相应的优化。在确定基本的流程和算法后,通过不同的方法进行实验,对整个软件系统进行工程上的优化。最后确定一个比较理想的铁路轨面伤损图像检测软件系统。
第一章首先阐述了本课题的研究背景和意义,然后介绍了机器视觉技术应用到铁路轨面检测上国内外的成果和发展,重点描述了本课题组郭龙、孙亮、葛嘉完成的系统。
第二章本章简要介绍了铁路轨面伤损检测系统的组成, 针对轨面伤损图像检测软件的主要部分进行详细的分析。然后阐述在多次不同环境实验中的检测算法的实现。
第三章在项目中对轨面图像检测系统进行工程上的优化,这一章主要描述在软件工程上的优化过程中采取的一些方法和采用相关方法后进行的实验,并对实验中的实验结果进行了展示和分析。
第四章对本论文进行了总结,并且提出了对铁路轨面伤损图像检测软件系统的展望。
4
暨南大学硕士学位论文
第二章 轨面伤损图像检测软件系统
2.1轨面图像检测系统简介
针对图1-2所示的铁路轨面图像检测系统,尽管已经建立了基于Matlab程序的轨面图像检测系统,但程序主要是针对计算机存储的图像进行检测,而且检测耗时较长。
为了能将基于Matlab的轨面检测算法加以应用,并在实际应用中能以较快的检测速度对大量的轨面图像进行检测,从而使研究的算法具有实际应用性,本文用C语言实现轨面图像处理算法。
2.2软件开发平台
这套铁路轨面伤损图像检测软件系统在Visual C++ 2010平台上用C语言进行开发,通过调用图形处理函数库Opencv对采集到的轨面图像进行处理变换,最后将结果在MFC编辑的软件界面上显示。 2.2.1 Visual C++ 2010
Microsoft Visual C++(是微软公司的开发工具,具有集成开发环境,可提供编辑C语言,C++等编程语言。由于C语言是大量工程软件的编辑语言,是目前最流行也是使用面最广的编译语言,因此本文铁路轨面检测系统检测软件是在Visual C++ 2010的环境下编写完成。
2.2.2 机器视觉Opencv
OpenCV的全称是:Open Source Computer Vision Library。OpenCV是一个基于(开源)发行的跨平台计算机视觉库。OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口,通过这些接口可用多种计算机语言开发实时的图像处理、计算机视觉以及模式识别程序[21]。总而言之,Opencv实现了图像处理和计算机视觉方面的很多通用算法,是一个跨平台的计算机视觉库。在编辑本项目的铁轨轨面检测系统软件中,调用了Opencv1.0。
5
暨南大学硕士学位论文
2.3检测软件系统工作原理
图2-1是铁路轨面伤损图像检测软件系统流程图。轨面伤损检测软件先读入图像,然后对读入的轨面图像进行预处理。在预处理中主要是对图像采集系统采集的图片进行去噪处理以及钢轨表面部分的剪辑,对轨面伤损图像进行预处理是为了降低后续图像处理的复杂度,提高检测速度。预处理之后是伤损提取,这部分主要包括对预处理后的图像进行阈值分割,对图像进行形态学处理,再对有伤损的图片进行伤损定位。伤损定位后是对已经检测出的最大面积伤损进行特征值的计算,本文伤损的特征值主要有面积、周长、长宽比、以及圆形度。最后,软件系统将对已经被标记的伤损图像进行储存,并将检测结果在检测软件的界面中显示。
图像读入 阈值分割 形态学处理 伤损定位 伤损提取 滤波去噪 目标区域剪辑 图像预处理 特征值计算 检测结果保存、显示 图 2-1 铁路轨面伤损图像检测软件系统流程图
由图2-1可知铁路轨面伤损图像检测软件系统共有图像读入、图像预处理部分、伤损提取部分、伤损特征值计算部分、以及检测结果的保存和显示五个部分组成:其中涉及到图像处理算法的部分有图像预处理部分、伤损提取部分和伤损特征值计算部分,图像预处理部分包括对采集到的轨面图像进行滤波去噪、轨面区域剪辑;伤损提取部分包括阈值分割二值化、对轨面进行形态算处理和对伤损进行定位。
对于我们已有的基于Matlab软件的轨面伤损图像检测软件系统,其运行的模式如图2-2所示:
6
暨南大学硕士学位论文
事后处理 高速相机 采集图像储存于计算机 轨面图像处理分析 图2-1 Matlab软件图像处理系统的运行模式
首先高速相机对轨面图像进行采集,然后将采集到的轨面图像储存在计算机硬盘当中,当需要检测的钢轨的图像都存储完毕后,利用轨面伤损图像检测软件系统对轨面图像进行处理。经过计时测试,我们发现基于Matlab软件的轨面伤损检测软件系统处理轨面图像的时间较长,其速度相当于是10KM/H的火车运行1小时,软件系统处理图像经过1小时后可以处理完。即如果此系统安装上车,火车的车速需要控制在小于10KM/H的情况下,这样软件系统才可以实现实时检测。因此,本文以C语言作为软件开发语言,对已有软件系统的算法进行验证以及实现,并结合编译工具和图像处理函数库的特点对现有的图像算法进行优化,从而提高软件处理系统的分析速度,以满足轨面伤损检测系统实时检测的目的。
2.4室内轨面伤损检测软件系统
为了能在实地上车实验前,对轨面伤损图像检测算法和轨面图像采集系统的可行性进行验证,在实验室的条件下,本课题组搭建了一套实验室轨面图像采集系统样机(图2-3(a)),并且用轨面伤损图像检测软件对实验室内采集的轨面图像进行了检测。图2-3(b)是实验室轨面伤损检测系统样机采集到的规定长宽为1024*480像素的轨面图片。
图2-3(a)实验室轨面伤损检测系统样机
7
暨南大学硕士学位论文
图2-3(b)实验室样机采集到的轨面图像
2.4.1室内轨面图像检测原理
根据实验室内采集到的轨面图像的特点,在如图2-2所示的基本轨面伤损图像检测系统流程框图的基础上,对轨面伤损检测软件系统的算法进行更具体的设计,其流程图如图2-4所示。
8
暨南大学硕士学位论文
截取轨面区域 开始 读入图像 去噪滤波 对图像做垂直方向取和
NO 连通区域判定 灰度值比较 图像二值化 标识伤损 形态算 伤损特征值计算 YES 检测结果输出
结束
图2-4实验室轨面图像检测软件流程图
由图2-4所示的轨面伤损检测软件的设计流程图可以看到在读入图片后,开始对采集到的轨面图像进行处理。对比图2-2所示的算法流程图,图2-4中的滤波去噪、对图像做垂直方向取和与截取轨面区域部分属于软件的预处理部分;灰度值比较、对图像进行二值化、对图像进行形态算、连通区域的判定、以及对伤损进行标示属于轨面伤损定位部分;最后的伤损特征值表示部分包括:伤损特征值的计算和显示。
9
暨南大学硕士学位论文
2.4.2主要算法实现
依据图2-4所示的流程图,运用C语言和Opencv函数库对流程图中的各个模块进行实现,完成软件程序。 2.4.2.1 滤波去噪
在拍摄铁轨图像的过程由于光线的影响和相机镜头上的灰尘等因素都会造成拍得图像的噪点。这些噪点会影响我们稍后对铁路轨面有效区域的判断,为了尽可能的减少外界环境和图像采集系统硬件系统等因素对轨面图像造成的影响,尽可能的保证铁路轨面伤损检测软件对图像中的有效区域的判定,在判定图像中的轨面有效区域前需要对采集得到的原始图片进行滤波去噪。
在暨南大学郭龙的论文中提到[22]:频域滤波需要多次的空间变换,相对于空间域滤波法来说,较为复杂,处理速度慢,占用资源多,在铁路轨面伤损检测软件中采取空间域滤波的方法。郭龙用matlab软件对常用空间域滤波算法进行了比较,最后选择了中值滤波作为轨面有效区域剪辑之前的滤波方法。图2-5 是在visual C++的环境下对采集到的轨面图片进行了中值滤波后的效果。
图2-5 原图(左)及中值滤波后的图片(右)
2.4.2.2轨面剪辑
图2-6(b)是多张室内采集的轨面图像,从图中可以看出轨面部分的灰度值与非轨面区域的灰度值有明显的差异。随机挑选一张轨面图像(图2-6(b)),对此图像做垂直方向灰
10
暨南大学硕士学位论文
度投影,投影后的灰度结果示意图如图2-6(c)所示,在轨面部分和背景部分的交界处的图像垂直投影的灰度值呈现阶跃式的变化,两侧灰度值阶跃曲线的中间部分就是灰度值较高的轨面部分。
图2-6(a)多张室内轨面图像
图2-6(b) 图2-6(c)垂直方向灰度投影图
实验室的铁轨宽度是固定的,将轨面宽度设为d,轨面图像第i列灰度值之和是g(i),整幅图像是在x轴上的灰度累加值G=[g(1),g(2),...,g(1024)],沿x轴计算G中每个固定宽度为d区间的灰度值累加S(i),则使S(i)取最大值的坐标x为钢轨在x轴上的起始位置,而x+d为结束位置,剪辑即得到轨面区域图像J。由于轨面图像采集装置,已经尽量将轨面区域固定显示在整幅图像的中间部分,将采集到的整幅图像的长设为W,宽度设为H,考虑到降低程序算法的复杂度和加快软件的运行速度要求,取累加的起点像素点时,只要从0取到整幅图像的宽度的1/2处(i=0,1,2...W/2)就能满足找到累加的灰度值最大部分S(i)max,即需要剪辑出来的轨面部分。
11
暨南大学硕士学位论文
运行轨面检测程序对图2-6(b)进行检测,得到的图像区域如图2-7所示,成功剪辑出了采集到图像的轨面部分,完成了轨面区域剪辑算法的要求
图2-7剪辑的轨面区域
2.4.2.3灰度值比较
在成功截取了轨面区域后,只要对轨面区域进行图像处理。对于有伤损的轨面,需要对轨面伤损进行定位标记,因此需要对伤损区域和轨面正常区域进行区分。图2-8是两张轨面上有模拟伤损的轨面图片,可以看到两张轨面图像上的伤损与拍摄得到的正常轨面在灰度值上有明显的差异,根据轨面伤损和正常轨面区域灰度值有明显差异这一特点,对轨面部分进行灰度值的比较,通过遍历轨面图像上的各个像素点,取得各个像素点的灰度值,并用各个灰度值与正常轨面的灰度值做差,最后将差值较大的区域认定是有伤损的位置,将有伤损的部分设定一个统一的灰度值(高灰度值);将差值较小的区域认为是无伤损的正常的轨面区域,并且将这一部分也设定一个统一的灰度值(低灰度值)。
12
暨南大学硕士学位论文
图2-8(a) 图2-8(b)
在本软件系统的图像检测算法中,通过检测轨面区域的第一行第一列像点素的灰度值W和最后一行第一列像点素的灰度值W1,再遍历组成整个轨面的像素点的灰度值p(i),将这些遍历后的灰度值p(i)与w做差得到结果z(i),并对所求得的差z(i)做绝对值运算|z(i)|=zz(i);同时将p(i)加上w,得到r(i)=p(i)+w;将zz(i)与K*r(i)进行比较,这就意味着将K*r(i)作为二值化时重要的阈值。设轨面图像上某像素点的灰度值为g(m,n),其中m表示像素点所在轨面图像像素点矩阵的第m行,n表示像素点所在轨面图像像素点矩阵的第n列。当zz(im,n)=|g(m,n)-w| >K*r(im,ni)时,这种情况正是此像素点的灰度值g(m,n)与取样灰度值的平均值的灰度差异很大,我们把这样像素点称为T;当zz(im,n)=|g(m,n)-w| 暨南大学硕士学位论文 图2-9(a) 图2-9(b) 运行轨面检测程序对图2-8中两幅轨面图像分别进行检测,得到的二值化图像如2-9所示,成功将轨面上的伤损区域与正常区域区别开,完成了轨面伤损定位的要求。 2.4.2.4形态算 在我们基于Matlab软件进行的算法研究中没有涉及到对图像进行形态算,在进行C语言的检测程序编写的过程中,在对图像进行了阈值分割二值化后,得到图2-9,虽然轨面上正常区域和伤损区域已经有了明显的区别,伤损区域是白色像素点的区域,可是在非伤损区域也会有许多较分散的白色像素点,这些分散的像素点并不是伤损区域,这些分散的白色像素点可视为噪点,于是在用C语言对轨面伤损检测软件系统进行开发时,采用了形态算的方法对轨面的二值图像进行噪点去除。 数学形态学是由一组形态学的代数运算子组成的,它的基本运算有4个:膨胀、腐蚀、开启和闭合。 膨胀的作用是将与物体接触的所有背景点合并到物体中,使目标增大,可填补目标中的空洞。Opencv中图像膨胀操作函数是: voidcvDilate( constCvArr* src, CvArr* dst, IplConvKernel* element=NULL, int iterations=1 ); 14 暨南大学硕士学位论文 其中,src表示输入的原图像;dst表示对原图进行膨胀处理后的输出图像;element表示用于膨胀的结构元素;iterations表示膨胀的次数。 腐蚀的作用是消除物体边界点,使目标缩小,可以消除小于结构元素的噪声点。Opencv中图像腐蚀操作是: voidcvErode( constCvArr* src, CvArr* dst, IplConvKernel* element=NULL, int iterations=1 ); 其中,src表示输入的原图像;dst表示对原图进行腐蚀处理后的输出图像;element表示用于腐蚀的结构元素;iterations表示腐蚀的次数。 开运算是先腐蚀后膨胀的过程,可以消除图像上细小的噪声,并平滑物体边界。闭运算是先膨胀后腐蚀的过程,可以填充物体内细小的空洞,并平滑物体边界。 根据形态学算子的功能,以及对二值化后的轨面图像的分析,本文对已经二值化的轨面图像进行行开运算操作,即先对轨面二值图像进行腐蚀运算来消除白色小噪点的影响,然后对腐蚀后的图像进行膨胀从而使伤损区域更明显,方便之后对伤损区域的定位标记。 对图2-9(a)进行开运算,处理结果如图2-10所示: 图2-10(a) 图2-10(b) 15 暨南大学硕士学位论文 图2-10(a)是在进行腐蚀运算处理后的效果图片,与图2-9(a)所示的二值图相比较,在经过腐蚀运算处理后的轨面二值图像上的白色离散的噪点明显减少了,二值图像上只有有伤损的区域是由白色像素点组成的。图2-10(b)所示的图像是对图2-10(a)所示的图像进行膨胀运算后的效果。相较于图2-10(a)白色像素点聚集表示的伤损区域,图2-10(b)所示的轨面图像的伤损区域的连通性更强,同时也更明显。 2.4.2.5轨面伤损区域定位 经过了以上对图像进行的二值化和形态算除去轨面区域的噪声之后,轨面图像的伤损区域已经和正常轨面很明显的区分开来,这就涉及到对连通区域进行寻找。所谓的连通区域,形象地讲就是系统上一个步骤完成后输出的膨胀图像中灰度值相同的部分,即全黑或全白的部分,本文要寻找的连通区域是图像中的白色部分。在找到轨面二值图像上的连通区域后,在白色连通区域的外围做最小的外接矩形,即对轨面上的伤损部分用红色的最小外接矩形进行标记,以示此轨面上有伤损。 查找连通区域的C语言程序如下所示: CvMemStorage* storage=cvCreateMemStorage(0); //创建一个存贮连通区域轮廓的内存存储器storage; CvSeq* seq=0; //设定一个序列 cvFindContours(SE0,storage,&seq,sizeof(CvContour),CV_RETR_EXTERNAL,CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0)); 其中cvFindContours函数的作用是对需要检测连通区域的图像SE0进行检测,该函数先检测轨面上白色连通区域的外围轮廓,再将检测到的轮廓存储在storage中,指针seq指向storage中保存的一个轮廓。 确定轨面上的连通区域后,对轨面上的连通区域的外围添加最小外接矩形,外接矩形标示的区域即是轨面伤损的所在位置。 对铁轨表面的伤损进行定位并进行标记的结果如图2-11所示,开发的轨面伤损检测软件系统成功定位出铁轨表面上的模拟伤损。 16 暨南大学硕士学位论文 图 2-11 对轨面伤损进行定位表示的效果图 2.4.2.6轨面伤损的特征值计算 在用红色的最小外接矩形框对轨面上的伤损部分进行标记后,对外接矩形的周长,面积和圆形度进行计算,以这些计算出来的数据作为轨面伤损的特征值来对伤损进行量化。若某一被检测的轨面上有多个伤损,则本轨面伤损检测软件系统表示出各个伤损的红色外接矩形,但只对最大外接矩形的各特征值进行计算并保存。 周长(C):轨面上伤损边缘上的像素点个数。 面积(A):伤损区域中含有像素点的个数,在采集轨面图像的相机固定后,根据图像像素面积和物体实际面积的比例关系,可得到轨面上伤损的实际面积。 圆形度(P):P=C2/A,P的数值越小表示计算区域的形状越接近圆,P数值越大表示计算的区域形状越复杂。 2.4.3 实验结果 图2-12是对实验室模拟实验采集的轨面图片进行的伤损检测结果。图2-12(a)所示的是原轨面上有两处伤损,轨面伤损检测软件将轨面上的两处伤损用红色矩形标示出来。图2-12(b)所示的是采集到的轨面上没有伤损,软件系统的检测后未发现伤损,软件系统跳出对话框显示“此段无伤损”。 17 暨南大学硕士学位论文 图2-12(a) 图2-12(b) 2.5室外环境轨面伤损检测软件系统 在进行了实验室的模拟实验后,为了得到户外环境下采集到的铁轨图像,本项目组在室外的实地铁路上利用已经搭建好的轨面图像采集小车对室外轨道轨面图像进行采集。 18 暨南大学硕士学位论文 图 2-13 室外小车模拟实验装置 图2-13是试验样机在室外铁轨上进行图像采集的的实验图像;图2-14是试验样机在室外采集到的规定长宽为1024*480的轨面图片。从图2-14可以看出,室外图片与室内图片有明显的区别:1)背景复杂;2)轨面不在图片的正中间;3)轨面发生倾斜。 图 2-14户外小车模拟实验采集到的图像 2.5.1室外轨面图像检测原理 实验室环境是比较理想的环境,室外的环境不同,因此用于实验室的轨面图像的检测软件算法上不能完全适用于室外所采集的铁路轨面图像。于是在图2-2所示的基本轨面伤损图像检测系统流程框图的基础上,在轨面伤损检测软件系统的算法上进行了具体的设计,得到室外轨面图像检测的流程图如图2-15所示。 19 暨南大学硕士学位论文 图2-15室外环境实验轨面检测软件设计流程图 图2-15所示的轨面伤损检测软件的设计流程图中,省略号部分表示接下来的流程图模块与图2-4所示流程图的对应部分一致。在读入图片后,开始对采集到的轨面图像进行处理。根据图2-2所示的算法流程图,图2-15中的滤波去噪、边缘检测、霍夫算子边缘检测和截取轨面区域部分属于软件的预处理部分;灰度值比较、对图像进行二值化、对图像进行形态算、连通区域的判定以及对伤损进行标示属于轨面伤损定位部分;最后的伤损特征值表示部分包括:伤损特征值的计算和显示。 2.5.2室外轨面图像的主要算法的实现 由于室外铁轨图像的复杂性,为了能够得到室外采集到的图像的轨面区域(ROI区域),对比室内软件程序流程图,图像处理在截取轨面区域部分有所不同,即在预处理部分中对 20 暨南大学硕士学位论文 图像先进行边缘检测,使轨面的边缘在图像中更清晰,再通过霍夫算子检测获取轨面边缘,最后利用霍夫算子检测的结果剪辑轨面图像。本节只介绍与室内实验不同的算法部分。 2.5.2.1图像的边缘检测 边缘是轨面图像最基本特征。 在计算机视觉、图像分析等应用中边缘检测起着重要的作用,图像的边缘包含了用于识别的有用信息,边缘检测是图像分析与识别的重要环节,是图像分析和模式识别的主要特征提取手段。 在对室外实验采集到的轨面图像进行检测时,采用了Sobel算子对采集到的室外模拟轨面图像进行边缘检测,使轨面边缘更清晰可辨,从而便于后续的定位区分轨面与周围环境的边缘线,实现轨面区域的剪辑。Opencv中的Sobel边缘检测函数如下所示: void cvSobel( constCvArr* src, CvArr* dst, intxorder, intyorder, intaperture_size=3 ); void cvSobel中的intxorder和第intyorder分别表示x方向的差分阶数和y方向上的差分阶数。x、y方向上的差分阶数设置的不同对轨面边缘检测的效果会有区别。找到最适合的参数组合才能更精确的剪辑需要的轨面区域,为了找到x、y方向上对于检测室外实验轨面图像最适合的参数组合,采用了不同的参数组合对轨面图像进行多次实验,最终确定各参数组合如下: voidcvSobel ( constCvArr* src, CvArr* dst,1, 0, 3 ); 经过Sobel边缘检测后的轨面图像效果如图2-16(b)所示,可以看到经过Sobel边缘检测的轨面图像在原图中灰度值变化大的部分在图2-16(b)中变得更明显,也就是轨面图像中的边界更加的明显,边界部分的灰度值比非边界部分的灰度值更大,这样为之后进行的二值化计算创造了条件,图2-16(c)所示的是对轨面图像进行二值化后的效果,图像中的两条白色线段中间区域即是采集到的轨面图像的边缘。 21 暨南大学硕士学位论文 图2-16(a) 图2-16(b) 图2-16(c) 2.5.2.2霍夫变换检测边缘 在对室外实验采集到的轨面图像进行完边缘检测和阈值分割二值化后,得到了如图2-15(c)所示的二值化图像, 从图像中可以看到,相较于背景区域,轨面区域两边有两条完整的直线,在不同的图像中这两条直线倾斜的角度会有不同(图2-17)。利用直线的图形特点,只要沿着这两条平行线对轨面图像进行剪辑就可以得到需要的轨面区域。在这里本软件系统采用了霍夫变换的方法对这两条直线进行确定。 22 暨南大学硕士学位论文 图2-17轨道倾斜角度不同的室外采集图像 用C语言实现时,为了实现霍夫变换检测边缘直线的功能,调用了Opencv中的cvHoughLines2函数: CvSeq*cvHoughLines2 ( CvArr* image, void* line_storage, int method, double rho, double theta, intthreshold,double param1=0, double param2=0 ); 图像进行霍夫变换检测轨面边缘的效果如图2-18所示。图2-18(a)中的轨面图像背景复杂,铁轨的边缘也并不垂直于x轴的水平方向,可是经过霍夫变换进行轨面边缘的查找后,铁轨的边缘可在图像中标示出来,如图2-18(b)所示: 图2-18(a)室外实验原图 (b)利用霍夫变换找到的轨面边缘 23 暨南大学硕士学位论文 2.5.3 实验结果 在经过霍夫算子检测到轨面图像中的铁轨边缘后,将图2-19左图中靠左的直线标示位置的左侧全部像素点的值置为255,即黑色;将图2-19左图中靠右的直线标示位置的右侧全部像素点也置为黑色。从而得到没有背景区域剪辑出来的轨面图像,如图2-19右图所示。 图2-19 在得到剪辑出来的轨面图像之后,后续图像处理可以延用2.4节中的对轨面区域进行阈值分割、二值化、查找连通区域和最终定位伤损等方法。图2-20是将在室外实验中采集到的铁路轨面图片放在检测软件中进行检测,软件上有两个图像显示框,左边的图像显示框显示的是采集的原轨面图片,右侧的图像显示框显示的是经过软件检测后的轨面图片,图中轨面上模拟的伤损用红色的矩形标示出来。 24 暨南大学硕士学位论文 图2-20室外实验轨面伤损检测软件效果图 2.6实地上车实验图像检测系统 经过了实验室条件和室外环境的轨面图像处理实验,在铁路轨面图像处理的算法研究上有了一定的基础。项目的最终目的是为了研发一套能用到列车上的轨面图像伤损检测系统,为了到能达到这个目的,我们在列车上搭建了轨面伤损图像采集系统,并取得了列车运行时的轨面图像。在得到列车运行中采集到的轨面图像后,对采集到的实地轨面图像进行分析,以在室内室外实验时设计的轨面伤损检测算法为参考,然后设计一套针对在运行列车上采集的轨面图像适用的检测算法。图2-21是实地上车实验的现场图;在这次实地上车实验中,列车运行的速度为0~70km/h的速度区间里运行。图2-22是实验采集到的规定长宽为1024*480的轨面图片。 25 暨南大学硕士学位论文 图2-21实地上车实验现场图 图2-22实地实验采集的轨面图像 2.6.1实地图像检测原理 室内实验和室外分析实验轨面图像伤损检测算法对实地上车实验采集到的轨面图片提供了参考。分析图2-22所示的实地采集到的铁路轨面图像可以发现,由于安装在列车上的铁路轨面图像采集系统将像面很好的调整到铁路轨面上,所以图中所示的实地采集到的轨面图像中的背景没有室外实验所采集到的图片复杂;不仅如此,因为图像采集系统很好的固定在列车上,所以图2-22所示的轨面图像也没有室外轨面图像中不规则的倾斜。实地采集的轨面图像的这些特点无疑降低了铁路轨面系统算法的复杂度。结合室内和室外实验中使用的图像处理算法,实地上车实验的轨面伤损检测软件系统的流程图如图2-23 26 暨南大学硕士学位论文 所示。与实验室实验的轨面伤损检测软件系统流程图2-4相比,唯一有改变的部分是在预处理部分中,在滤波去噪后对实地上车实验采集的图像采用的是对图像进行水平方向的累加,这一点主要与图像采集系统采集的轨面图像的方向有关。对图像进行水平投影后再截取轨面图像的方法和之前介绍的垂直投影后再截取轨面图像的方法类似。 去噪滤波 开始 读入图像 对图像做水平方向累加 截取轨面区域 „„ 2.6.2实验结果 在实地上车实验中,为了能够采集到有伤损的轨面图像,本实验在使用中的铁路轨面上贴上白色碎纸片来模拟伤损。按照图2-23所示的软件程序流程图进行轨面软件的编写,如图2-24所示,实地轨面图像在经过铁路轨面伤损检测软件的检测后,轨面上的模拟伤损被检测出来,并用红色的矩形进行了标注。 图2-23实地实验轨面检测软件设计流程图 27 暨南大学硕士学位论文 图2-24 2.7轨面伤损检测软件系统 前面的章节较详细地介绍了整套轨面伤损检测软件的重要算法以及针对各次试验设计的软件流程和检测效果,为了能够实现人机之间良好的操作性,并且为软件的工程化做好前期准备,本项目组设计了铁路轨面伤损检测软件的操作界面,除了能对单张轨面图像进行检测,还能对多幅图像进行连续的自动检测,并且能将检测得到的结果自动地保存在指定路径。 28 暨南大学硕士学位论文 图2-25 图2-25所示是铁路轨面伤损检测系统的人机交互界面。从图2-25可以看到本系统软件界面主要由单幅图像检测栏和多幅图像检测栏组成。在单幅图像检测栏中的各项操作主要是完成对单幅铁路轨面图像的检测,如图2-26所示,单击单幅图像检测栏中的“读入图片”按钮后,将会跳出文件路径选择对话框,选择需要进行检测的轨面图像后,软件界面左侧的图像显示区域显示待检测的原图,在点击单幅图像检测栏中的“开始检测”按钮后,得到的检测图像会在界面右侧图像显示区域显示出来,若被检测的轨面图像上有伤损,伤损的各项特征值会在单幅图像检测栏中的相应位置显示。 29 暨南大学硕士学位论文 图2-26 整套的轨面图像检测系统需要要安装在高速列车上,随着列车的高速行进,安装在列车上的铁路轨面图像采集系统随着列车的运行速度调整采集铁路轨面图像的频率,可想而知在整个轨面图像采集的过程中采集到的铁路轨面图像的数量是巨大的,因此,必须有一套能够自动地检测保存在文件夹中的铁路轨面图像并且对检测出的有伤损的轨面图像的伤损各项特征值进行自动记录的软件。图2-26所示的轨面图像检测软件界面的右侧的多幅图像检测栏就是为检测大量的连续铁路轨面图像设计的。如图2-27所示,单击多幅图像检测栏中的“伤损图像保存路径选择”按钮后,将会跳出文件路径选择对话框,选择检测结果的保存路径,检测完毕后检测出有伤损的轨面图像和相关参数记录文件都将会保存在选择的文件夹中。然后单击多幅图像栏中的“读入文件”,软件将会读入所选文件夹中的图片,点击多幅图像检测栏中的“开始检测”按钮后,软件将对待检测文件夹中的轨面图像进行自动地、连续地检测,并将有伤损的轨面图像保存在第一步选择的文件夹位置(图2-28(a)),各有伤损的轨面图像的原始路径以及伤损的各个特征量将记录在“out.txt”中(图2-28(b)),此txt文档与有伤损的轨面图片保存在同一文件夹中。 图2-27 30 暨南大学硕士学位论文 图2-28(a) 图2-28(b) 2.8本章小结 本章简要介绍了铁路轨面伤损检测系统的组成, 针对轨面伤损图像检测软件的主要部分:图像预处理部分,伤损提取部分和轨面伤损特征值的计算部分,进行了详细的分析。 然后阐述了做的三个实验,首先在介绍室内轨面伤损检测实验时,详细介绍了滤波去噪、轨面剪辑、灰度值比较、形态算、轨面伤损区域定位、轨面伤损的特征值计算和主要算法的C语言实现。其次,对于室外轨面采集图像背景复杂,因此详细介绍了边缘检测和霍夫变换检测边缘的算法以及实现。然后,上车现场实验的处理方法与室内轨面检测方法基本一致。 最后,介绍了铁路轨面伤损检测软件的系统。 31 暨南大学硕士学位论文 第三章 轨面图像检测系统优化 第二章在算法上对轨面伤损图像检测软件进行了验证。本课题的研究主要是希望进一步实现检测软件的工程化,除了对检测软件的算法用效率较高的编译型C语言进行实现外,为了进一步对检测软件进行优化,提高检测软件运行速度,在不影响检测效果的前提下,本文尝试使用多种方法对检测软件的检测速度进行优化,包括: 1、C语言程序的算法优化 2、引入多cpu 3、引入固态硬盘(SSD: Solid State Disk)4、利用图像采集卡等。通过对以上不同的技术方案的实验和验证,完成整个铁路轨面伤损图像处理系统的工程化和优化。由前面的第二章内容可知,处理实地上车实验中采集到的轨面图像和处理实验室采集到的轨面图像所用的算法相似,由于在实验室进行小车实验较为方便,并且方便在轨面上模拟不同形状、大小、和颜色的伤损,所以在本章用于检测软件不同的优化方案的轨面图像都是在实验室环境下获得的。 3.1软件各模块耗时检测 为了获得铁路轨面伤损检测软件的检测效率的定量结果,对软件程序的各个重要算法进行了耗时测试,在之后的软件优化中检测时间将作为一个很重要的参数来检验优化方案的可行性。 图3-1检测实验环境 图3-1所示是软件各模块耗时检测实验的实验环境,本文实验都是在此实验环境下进行,并用图3-2所示的在实验室实验中采集得到的轨面图像进行实验。在完全相同的实验 32 暨南大学硕士学位论文 环境下,对同样一幅轨面图像进行九次测试,得到九次测试结果。图3-3对检测整张轨面图像并进行伤损定位的耗时进行了展示。为了更清楚地比较各个模块的耗时,在对各个模块的耗时测试时选用微秒(us)作为计时单位。通过编写程序,在检测过程中实时的向detecteddamages.log文件中记录各模块的耗时,图3-4是九次实验中其中一次实验的detecteddamages.log中记录的各模块耗时结果。 图3-2各模块耗时测试实验用图 图3-3 33 暨南大学硕士学位论文 图3-4 表1是铁路轨面伤损检测软件在检测轨面图片时各个重要组成模块的耗时进行的统计表,这些模块的耗时数据,为之后轨面伤损图像检测软件在算法上的优化提供了重要的依据。 表1:各模块耗时统计表(单位:微秒) 为了更直观地表示各个模块在检测时的耗时所占整体运行时间的比例,使用各个模块耗时的均值绘制了模块耗时比例图(如图3-5所示)。 34 暨南大学硕士学位论文 阈值分割二值化 对原图滤波去噪 轨面剪辑 图3-5各模块耗时比例图(单位:微秒) 从图3-5可以看出,对原图进行滤波去噪、剪辑轨面区域和对轨面进行阈值分割二值化是检测程序的主要耗时模块,各模块耗时占程序运行总时间的比例分别为:滤波去噪占59%,剪辑轨面区域占21.6%,阈值分割二值化占17.1%。 3.2程序算法上的优化 从图3-5的各模块耗时比例图可以很明显的看出对原图进行滤波去噪模块的耗时占据整个程序运行时间的60%,即滤波去噪耗时最多,也就是轨面图像预处理部分的对原始图像进行滤波去噪这一个算法在整个软件程序运行中耗费的时间是最长的。为了尽可能地提高软件检测效率,希望在保持检测准确度的前提下缩短进行轨面检测时的耗时。如果去掉对原始的轨面图像进行滤波去噪这一模块,整个轨面检测程序的检测耗时将大大减少,可是去掉预处理部分的滤波去噪模块是否对轨面伤损检测的效果有影响,带着这个问题,进行了下面的实验。 为了保证实验是在伤损能准确的提取定位前提下进行,在由轨面图像采集系统采集到的铁路轨面图像中取一幅轨面图像,分别由原检测算法和优化后的检测算法对图像进行检测,以检验去除预处理阶段的滤波去噪模块是否对轨面检测软件造成影响。最后得到的检测结果如图3-6和图3-7所示。 35 暨南大学硕士学位论文 图3-6(a)是在检测界面上显示的检测结果;图3-6(b)显示的是经过滤波去噪后的轨面图像;图3-6(c)显示的是图像处理中经过其他各个模块的效果;图3-6(d)展示的是detecteddamages.log中记录的检测软件各模块耗时数据。 图3-6(a)在铁路轨面伤损检测软件界面上显示的检测结果 图3-6(b)对轨面样图进行中值滤波后的轨面图 36 暨南大学硕士学位论文 轨面剪辑后阈值分割 二值化 图像腐蚀 图像膨胀 图3-6(c)用原轨面伤损检测软件程序进行检测后的各模块效果 37 暨南大学硕士学位论文 图3-6(d)用原轨面伤损检测软件程序进行检测后的各重点模块耗时 用去掉滤波过程的轨面检测程序对同一张图片进行检测,检测结果如图3-7(a)、(b)、(c)所示。图3-7(a)是在检测界面上显示的检测结果;图3-7(b)显示的是图像处理中经过各个模块的效果;图3-7(c)展示的是detecteddamages.log中记录的检测软件各模块耗时数据。 图3-7(a)去除对原图进行滤波去噪后软件界面上显示的检测结果 38 暨南大学硕士学位论文 轨面剪辑阈值分割 二值化 图像腐蚀 图像膨胀 图3-7(b)用去除对轨面图像进行滤波的轨面伤损检测软件程序进行检测后的各模块效果 39 暨南大学硕士学位论文 图3-7(c) 用去除对轨面图像进行滤波的轨面伤损检测软件程序进行检测后的各模块耗时 去除滤波去噪模块后的轨面检测软件同样能将轨面图像上的伤损检测出来。观察两组软件处理后的图片数据,原检测程序和去除滤波去噪的检测程序在对轨面图像进行阈值分割二值化后所产生的图像有所不同,可是在经过腐蚀运算后,两个软件程序对轨面图像的检测效果相同。由此可以证明,去除对图像的滤波去噪模块并不影响轨面伤损检测软件对伤损的定位和标示。 在验证了优化算法的准确性和实用性之后,以及耗时缩短的程度。运行优化后的轨面图像伤损检测软件对图3-2所示的轨面图像进行9次重复检测,测得的耗时结果如表2所示: 表二:算法优化后软件各模块耗时统计表(单位:微秒) 40 暨南大学硕士学位论文 图3-8 进行优化前和优化后软件总耗时 图3-8是将表1、表2中检测总耗时用折线表示的结果。从图3-8中可以直观的看出未进行优化和优化后的轨面检测软件的耗时对比,优化前软件处理一幅图像平均耗时为32417微秒,而优化后,软件处理一幅图像平均耗时15221.2微秒。优化后,软件处理一幅图像可以节省一半时间。 上述结果表明,去除对轨面图像的滤波去噪模块不仅不影响伤损的定位检测,而且大大节省了整个轨面伤损检测软件一幅图像的检测时间,轨面伤损检测软件运行效率有了显著的提升。 3.3在电脑硬件上加入固态硬盘 为了提升铁路轨面伤损检测软件的运行速度,本文不仅要在检测软件的程序设计上尝试用新的技术进行优化,而且从多角度尝试提高运行速度的方法。其中在软件运行过程中,我们发现检测图像时花费在读取图像和存储图像上耗时也较多,所以当检测软件运行在PC机上时,我们尝试运用能加速图像读取和存储的设备,以节省图像在读取与保存上所花费的时间。 3. 3.1固态硬盘简介 41 暨南大学硕士学位论文 固态硬盘(Solid State Disk、Solid State Drive,简称SSD)是一种以存储器作为永久性存储器的计算机存储设备。和传统硬盘相比,固态硬盘具有低功耗、无噪音、抗震动、低热量的特点。 3.3.2 固态硬盘与普通硬盘耗时对比 实验主要目的在于对比固态硬盘和普通硬盘对检测时间的影响,实验中用1800张全部有伤损的图片进行此次实验。 首先在普通硬盘作为读取和存储设备的环境下,对作为检测样本的1800张轨面图片进行批量轨面图像检测实验,实验中得到的耗时包括轨面图像的读取时间、轨面图像的检测时间、有伤损轨面图像的储存时间以及伤损图片各个参数的记录时间。用这组样本图像在普通硬盘下进行5次检测实验,图3-9是其中一次实验的检测结果。 图3-9普通硬盘环境下测试结果 从图3-9可以看到,在铁路轨面伤损检测软件界面的多幅图像检测栏中显示了此次实验共检测了1800张轨面图像,其中在1620张图像中检测到了伤损,此次实验共耗时46665.00毫秒。 42 暨南大学硕士学位论文 用固态硬盘(SSD)替代普通机械硬盘,对作为检测样本的1800张轨面图片进行批量轨面图像检测实验,和普通机械硬盘的检测实验相似,对这组样本图像在进行5次检测实验,图3-10是其中一次实验的检测结果。 图3-10固态硬盘环境下测试结果 从图3-10可以看到,在铁路轨面伤损检测软件界面的多幅图像检测栏中显示了此次实验轨面图像张数和检测出的有伤损的轨面图像张数与图3-9所示的结果完全一致,但此次实验却只耗时31095.00毫秒。 图3-9和图3-10是随机选取了两种环境下的一次实验结果作为对比,表3给出了普通硬盘和固态硬盘环境下共10次实验的耗时结果。从实验一到实验五中的数据是五次实验测得的耗时,计算五次耗时结果的算术平均值得到表3中的耗时平均值,表3中每幅图像耗时是用耗时平均值除以1800求得的。 表3:在普通硬盘和固态硬盘下检测1800幅轨面图像耗时统计 43 暨南大学硕士学位论文 表3说明在普通硬盘环境下检测一幅轨面图像平均耗时23.9ms;在固态硬盘的环境下检测一幅轨面图像平均耗时17.5ms。图3-11是将表3中的数据画成折线图的结果: 图3-11 通过图3-11所示的折线图,很明显的看到在普通硬盘环境下进行实验所得的各检测耗时明显比在固态硬盘的环境下进行实验所得的检测耗时要多,可证明用固态硬盘(SSD)替换普通机械硬盘在轨面伤损图像检测系统中作为图像的读取存储设备,和数据的记录数据的装置,能优化提高的轨面伤损检测软件的效率。 3.4基于CPU多核并行处理的系统改进 进程是一个执行中的程序,线程是进程的一条执行途径,每一个线程享有它所属的进程 的所有的资源,这些可享用的资源包括动态分配的内存等。 图3-12是计算机中线程和进程之间的关系,如果某程序采用了多线程方法的话,该程序的运行可以看成是一个计算机的进程,该进程是由多个线程共同完成的,这些可以利用进程拥有的资源。 44 暨南大学硕士学位论文 图3-12 现在的计算机一般有两个或两个以上的CPU,当线程不大于CPU数目时,操作系统会保证不同的线程在不同的CPU上运行。为了提高轨面伤损图像检测软件对轨面图像的检测速度,希望能够利用多线程技术的优势,利用多核功能对轨面图像检测软件进行优化。本节将多线程技术应用到算法已经确定好的铁路轨面伤损检测软件的程序中,用加入多线程技术的轨面检测软件和原软件检测同一批轨面图像,比较两种进程软件的检测耗时,最后确定加入多线程的方法到原有检测软件中能否提高检测软件的检测效率。 3.4.1OpenMP多核并行处理技术 OpenMP是一个跨平台的多线程并行处理实现技术,主线程在生成一系列的子线程后,将任务分配给这些生成的子线程进行执行。在这些子线程并行运行时, 运行时系统环境将各个子线程分配给不同的处理器。 在铁路轨面伤损检测软件中,主要是将OpenMP多核并行处理应用到多幅图像的连续检测中。由于在实际的轨面图像检测中,需要检测大量的轨面图像,尝试应用多线程技术将不同的轨面图像分配到不同的子线程上进行检测,这样能节省单线程处理的等待时间。 3.4.2单线程与多线程比较实验 运用OpenMP多核并行处理技术,在原有的轨面伤损图像检测软件程序的基础上加入多线程技术,并对加入多线程的软件程序进行测试,通过对大量的轨面图像进行连续的测试,得到多线程软件程序对轨面伤损图像的检测时间,同时用原检测软件程序检测同一批采集到的轨面图像并得到检测时间,比较运用多线程技术前和运用多线程技术后的检测时间,最后确定多线程技术能否提升铁路轨面伤损图像检测软件对轨面图像的检测速度,从 45 暨南大学硕士学位论文 而确定是否有必要将多线程技术运用到铁路轨面伤损检测软件中。在本检测实验中将3.3节使用的1800张铁路轨面图片作为检测的样图,因为已经证明了固态硬盘对轨面伤损检测效率有所提升,本节以及本节以后的所有实验都是在固态硬盘的环境下进行的。 由于实验环境和进行检测是轨面图像样本与3.3中引入固态硬盘的检测实验完全一样,故实验将3.3中在固态硬盘环境下得到的实验数据作为单线程实验的检测数据。那么只要对引入多线程技术的铁路轨面伤损图像检测软件检测样图时的耗时进行测试,同样是做5组实验。图3-13是其中一次时间检测结果,在图3-13(a)中右侧的多幅图像检测栏中显示对1800幅轨面图像进行检测,检测出共有1620幅轨面图像有伤损,这此实验总共耗时22992毫秒(us)。图3-13(b)是保存检测结果和数据的文件夹,可以看到图中右下角的文件夹属性中显示,总共有1621个文件,此1621个文件包括1620张检测出有伤损的轨面和记录各有伤损轨面的路径和伤损特征值的“out.txt”文件。 图3-13(a) 46 暨南大学硕士学位论文 图3-13(b) 图3-14是记录检测出伤损图像原路径以及轨面伤损特征值的“out.txt”文件,可以看到在此txt文件中还记录了检测各幅图像所在的线程,图中用虚线框表示的部分可以看到第16和第17张被记录下来的被判为有伤损轨面图像分别是由序号为0的线程和序号为6的线程检测完成的。 图3-14 表4记录了应用多线程的检测软件和单线程检测软件在相同的环境下,对相同的1880幅轨面图像的耗时结果。实验一到实验五中的数据是五次实验测得的耗时,计算前面的五 47 暨南大学硕士学位论文 次耗时结果的算术平均值得到表4中的耗时平均值,表4中每幅图像耗时是用耗时平均值除以1800求得的。 表4:单线程软件和多线程软件检测1800幅轨面图像耗时统计(单位:毫秒) 图3-15 图3-15是将表4的数据画成折线图后的结果,从图3-15,可以看出运用了多线程技术的轨面检测软件进行实验所得的各次检测耗时明显比在单线程检测软件进行实验所得的检测耗时要少,单线程总耗时31633.8毫秒,多线程总耗时23941.6毫秒。多线程软件比单线程软件少耗时7692.2毫秒。通过使用多线程软件,使每幅图像耗时从单线程的17.5毫秒降到了12.7毫秒。因此可以得出结论,多线程软件可以提高轨面伤损检测软件系统的检测速度。 48 暨南大学硕士学位论文 3.5轨面图像帧幅变化 本铁路轨面伤损检测系统的轨面图像采集部分采用线阵和面阵的两种拍摄模式的高速相机进行轨面的采集。采用面阵相机的轨面采集装置只能以固定的长宽来采集铁路轨面图像,而线阵相机的轨面采集装置可以设置一幅图像中拍摄的轨面长度。前面所分析的图像都是480帧为一幅图像。如果增加单幅图像铁轨长度方向的帧数,即用720、960帧为一幅图像,则可以节省截图的时间,从而提高轨面伤损检测软件的检测效率,为了验证轨面检测软件对不同轨面长度的图像伤损的检测精度,本节将通过实验来得到检测软件在检测不同长度的铁路轨面图像时的伤损定位精确度。 3.5.1实验 本次实验将轨面的长度从480个像素点开始往上递增,每次递增240个像素点。在进行实验室的轨面图像采集时,在轨面上粘贴碎纸来模拟伤损,在不同宽度的轨面图像中找到这个模拟伤损,对此模拟伤损进行定位。 设置轨面图像大小为480*1024(图3-16(a))时,对轨面图像进行伤损检测。 图3-16 (a) 480*1024轨面图像 图3-16(b)的是轨面伤损检测软件对大小为480*1024的图像进行检测的结果。轨面伤损检测软件准确的定位到了轨面伤损的位置,并且用矩形进行了标记。 49 暨南大学硕士学位论文 图3-16(b) 设置轨面图像大小为720*1024(图3-17(a))时,选取相同模拟伤损附近的一段轨面图像,对轨面图像进行伤损检测。 图3-17(a) 图3-17(b)的是轨面伤损检测软件对大小为720*1024的图像检测的结果。轨面伤损检测软件定位到了轨面伤损的位置,并且用矩形进行了标记,但和图3-16(b)的表示伤损位置的外接矩形相比,图3-17(b)中的外接矩形在宽度上有所压缩,从软件界面中显 50 暨南大学硕士学位论文 示的轨面上伤损参数来看,长宽比显然是没有变化,但是面积减小了个像素点,圆形度增加了。 图3-17(b) 设置轨面图像大小为960*1024(图3-18(a))时,选取相同模拟伤损附近的一段轨面图像,对轨面图像进行伤损检测。 图3-18(a)960*1024轨面图像 51 暨南大学硕士学位论文 图3-18(b)的是轨面伤损检测软件对大小为960*1024的图像的检测结果。轨面伤损检测软件定位到了轨面伤损的位置,并且用红色矩形进行了标记,但和图3-16(b)、3-17(b)的标示伤损位置的外接矩形相比,图3-18(b)中的红色外接矩形在宽度上又有所压缩,最小外接矩形的圆形度依旧没有变化,面积相较图3-16(b)显示的数值减小了94个像素点,圆形度相较图3-16(b)、图3-17(b)所示结果继续增大。 图3-18(b) 接下来在完全同样的实验环境下设置设置轨面图像大小为1200*1024时,选取相同模拟伤损附近的一段轨面图像,对轨面图像进行伤损检测。得到的检测结果如图3-19所示。在检测到1680*1024的轨面图像时,目前的轨面伤损检测软件已经不能正确的定位伤损,如图3-20所示。 52 暨南大学硕士学位论文 图3-19对1200*1024轨面图像的检测结果 图3-20 对1680*1024轨面图像的检测结果 3.5.2实验小结 本节对轨面图像铁轨长度方向像素点分别为480、720、960、1200、1680的图像进行了检测实验,图像铁轨长度方向的像素点数量为480时,轨面伤损图像检测软件能够准确的检测到轨面上伤损的位置,随着轨面图像像素的点的增加轨面伤损面积会有一定程度的压缩,在图像的宽度增加到1200个像素点的时候,软件依然能够定位到轨面伤损的位置。图像宽度的像素点增加到1680个时,轨面伤损检测软件已经不能定位轨面上的伤损。 从耗时看,每幅图像的耗时相似,基本上是20毫秒,因此可以得出结论:单幅图像的像素值可以设置为1200像素。从而节约截取图片的时间,进一步提高轨面伤损检测软件的检测速度。 3.6本章小结 本章是在第2章中已经确定的各个算法和设计完成的铁路轨面伤损检测软件的基础上,以室内模拟环境下采集到的轨面图像为实验样图,在定位伤损准确度不变的前提下为提高,进行了一系列的实验。 53 暨南大学硕士学位论文 首先,通过对各算法模块耗时进行研究,并进一步比较了优化滤波去噪后,伤损定位的准确度,在确认伤损定位准确度不变的前提下,去掉了滤波去噪模块,从而使软件单幅图像检测时间从原来的32毫秒,降低到15.2毫秒,速度提升了52.5%。 其次,用固态硬盘替代普通硬盘进行数据的存储、读取等操作,使得软件对1800张图片检测时间从原来的43040.4毫秒(平均值)降低到31602毫秒,速度提升了27%。平均到每张图像的检测耗时是从23.9毫秒降低到17.5毫秒。 然后,利用多线程技术,使得软件对1800张图片检测时间从原来的31633.8毫秒,降低到23941.6毫秒,速度提升了24.3%。平均到每张图像的检测耗时是从17.5毫秒降低到12.7毫秒。 最后,针对线阵相机拍摄图片的幅度可调的特点,对图像的铁轨方向像素数量进行实验。结果显示当铁轨方向像素点数变为720、960、1200时,轨面伤损检测软件都能很好的定位伤损,而且伤损的长宽比参数没有变化,检测时间也相同;但是所示伤损面积分别压缩了39.5%、58%、.8%,而当铁轨方向像素数量变为1680时,轨面伤损检测软件无法正确定位伤损。 54 暨南大学硕士学位论文 第四章 总结与展望 4.1总结 为了实现铁路轨面图像实时采集,实时分析处理的目的,本文利用运行速度较快的编译型语言——C语言作为检测软件的编辑语言,编写完成了用于铁路轨面伤损检测软件系统。并针对该系统对轨面伤损检测算法进行了优化,对系统的运行环境和运行方式也进行了优化。 得到了以下成果: 1)铁路轨面伤损图像检测软件系统可以准确检测铁路轨面的伤损。 2)通过对铁路轨面伤损图像检测算法的优化,实现检测速度提高了52.5%。 3)通过对系统存储和读取数据的硬件进行优化,利用固态硬盘,实现检测速度提高了27%。 4)通过多线程技术的应用,实现检测速度提高24.3%。 5)实现单幅图像处理时间将为12.7毫秒,如采集系统的检测精度设定为1mm/线,通过换算软件可实现火车运行的时速为290KM/H情况下的轨面图像实时处理,可实现铁路轨面图片的实时处理。 6)针对线阵相机拍摄图片的幅度可调的特点,确定了在幅度为1200像素点时,铁路轨面伤损检测软件系统可以较好的定位伤损,但是像素点继续增加到1680个像素点时,软件系统则无法准确检测伤损。 4.2展望 本文的轨面伤损检测软件系统是在铁路轨面图像采集系统对采集的图像进行硬盘存储后,再由轨面伤损检测软件对已经存储在硬盘中的轨面图像进行检测。在实际运行中,轨面图像采集系统采集图片到图像采集卡,再由图像采集卡将图片存入硬盘,因此,轨面 55
因篇幅问题不能全部显示,请点此查看更多更全内容