一,环境介绍
语言环境:Matlab
算法:神经网络CNN
二,项目简介
改革开放以来中国经济的飞速发展,也带动了基础设施建设的大力投入,目前全国公路里程总数己达到550多万公里,这比新中国成立里时的8万公里翻了近七倍。如此大的公路里程数,也带来了维护麻烦,公路在使用的过程中,长期受到车辆的反复磨损,还有雨水浸泡等带来的影响,使得公路经常出现损坏,其中最常见的就是公路中的裂缝,年久失修会造成裂缝越来越大。现有的主要检测还是通过传统的人工检测的方式,时效低,成本高,影响整体的检测和维护进程。如果能开发一套路面裂缝自动检测识别的系统来代替传统路面检修工人的工作,工作效率和成效将会大大提高。
本课题采用Matlab来对目公路的裂缝图像进行处理,主要经过图像预处理、裂缝检测、特征分割提取、目标识别和结果的保存几个步骤,通过这几个步骤来完成对公路列缝的检测和识别,将检测的结果通过程序设计的GUI页面来进行调用处理和展示。本实验设计流程清晰,处理方法简捷、易懂,可以方便地拓展到诸如社会生活中其它有关裂缝检测的应用中去,比如建筑墙面裂缝检测等,具有一定的通用性。
路面裂缝检测识别系统的设计涵盖了四个方面的研究内容:图像预处理、图像分割(二值化)、目标检测识别和图像特征提取保存。其中,图像预处理用于对原始采集的彩色路面裂缝图像进行处理,以改善图像质量。图像分割则将路面裂缝图像转化为二值图像,便于后续的目标检测识别操作。目标检测识别是指对图像中的裂缝目标进行自动化识别和检测。最后,图像特征提取保存会在识别完成后对目标的特征进行提取和保存,为后续数据分析和应用提供支持。这些方面的综合研究和应用,可以有效地提高路面裂缝检测识别的准确性和效率。本次开发设计的裂缝检测系统的整体设计流程图如图2-1所示。
图2-1设计流程图
针对裂缝图像的特点,在对其进行目标检测和识别之前,必须对其进行图像的预处理,其中主要有:直方图均衡化增强、中值滤波去噪、对比度增强、二值化处理、二值图像滤波等。在二进制处理时,采用了自定义阈值方法和迭代自适应方法;二值图象去噪主要是对连通区的面积去噪,对小范围内的杂讯和噪音进行剔除。
通过对裂隙图像的预处理,提取出能够突出裂隙对象的二值化图像,再结合形态学的区域特征提取出裂隙对象,实现了对裂隙对象的检测和识别。在此基础上,提出了一种新的裂纹识别方法。
在试验过程中,本案例根据以上的处理流程对 GUI进行了设计,以使每一处理步骤都能清楚的显示出试验结果,从而提高了应用程序的简便性。
路面裂纹的检测在视觉上是一种典型的线性物体,所以对其进行增强和定位也是一种线性物体的检测。与常规线性目标相比,道路裂纹具有对象较小、图像对比度不高、自然不连续、分叉、杂点等特性,且仅从整体上表现为线性特征121。传统的基于阈值分割、边缘检测、小波变换等方法通常假定路面裂纹在整个影像上是高反差、良好连续的,而这一假定并不适用于实际工程。受气象条件、路面破损、裂缝劣化等影响,部分裂缝与路面背景的反差很小,导致常规裂缝识别方法难以奏效,故需在裂缝图像处理之前进行预处理。
图像预处理是一种对图像进行预处理的方法,可用于图像的识别和表达。由于各种原因,在获取和传输图像时,常常会造成图像质量的下降。比如,在一幅图画中,如果从主观的视觉角度来看,就会发现这个图画的轮廓位置太过鲜明,太过突兀;由于被探测对象的尺寸、形状等特点,其影像特征较为模糊,定位困难;在图象反差方面,一定的噪音会对图象造成影响;在整个图像中,存在着一些扭曲,变形等现象。因而,所要处理的影像,在视觉直观性与加工的可操作性上,会产生许多的干扰,我们不妨将这些干扰统称为影像品质问题。图像预处理就是指在图像质量的改善处理中,利用一定的计算步骤,展开合适的变换,从而将图像中一些有兴趣的信息凸显出来,消除或减少干扰信息,比如图像对比度增强、图像去噪或边缘提取等处理。通常,裂缝图像的获取都是在户外进行的,因此获取的图像不可避免地带有噪声、畸变等因素,给直接探测与提取裂缝对象带来了困难。为此,本文首先对裂纹影像进行了预处理,以提高影像品质,然后对试验结果进行了优化。图像的预处理主要包括灰度变换,频率变换,直方图变换,噪声去除,锐化,颜色变换等。本文将选取这些方法中的一部分用于对裂纹图像进行预处理。
三,系统展示
在试验过程中,本案例根据以上的处理流程对 GUI进行了设计,以使每一处理步骤都能清楚的显示出试验结果,从而提高了应用程序的简便性。软件设计界面具体如图4-1所示,在右侧控制面板中,可以对主算法流程的分步处理结果进行逐步访问,在左侧显示区域中,可以显示图像处理、投影曲线等结果。
在预处理过程中,直方图均衡化增强、中值滤波去噪、图像增强(Gamma矫正)等步骤比较简单,实验结果如图4-2所示。
裂缝识别结果如图4-3所示。
图4-3 裂缝识别结果
在对裂缝目标进行了检测和定位之后,为了能够准确地获得裂缝的区域信息,本实验采用了经典的像素积分投影的思想,对裂缝的水平、垂直方向进行了积分投影,并绘制投影曲线,进而定位裂缝的具体区域和参数信息,具体代码如下所示。
function[projectr,projectc]=Project(bw) projectr=sum(bw,2); projectc=sum(bw,1);
裂缝投影如图4-4所示。
图4-4 裂缝投影
裂缝判别及特征提取如图4-5所示。
(a)裂缝标记图像
(b)裂缝参数信息
图4-5 裂缝判别及特征提取
四,核心代码展示
function Result=Process_Main(I) if ndims(I)==3 I1=rgb2gray(I); else I1=I; end I2=hist_con(I1); I3=med_process(I2); I4=adjgamma(I3,2); [bw,th]=IterProcess(I4); bw=~bw; bwn1=bw_filter(bw,15); bwn2=Identify_Object(bwn1); [projectr,projectc]=Project(bwn2); [r,c]=size(bwn2); bwn3=Judge_Crack(bwn2,I4); bwn4=Bridge_Crack(bwn3); [flag,rect]=Judge_Direction(bwn4); if flag==1 str='横向裂缝'; wdmax=max(projectc); wdmin=min(projectc); else str='纵向裂缝'; wdmax=max(projectr); wdmin=min(projectr); end Result.Image=I1; Result.hist=I2; Result.Medfilt=I3; Result.Enance=I4; Result.Bw=bw; Result.BwFilter=bwn1; Result.CrackRec=bwn2; Result.Projectr=projectr; Result.Projectc=projectc; Result.CrackJudge=bwn3; Result.CrackBridge=bwn4; Result.str=str; Result.rect=rect; Result.BwEnd=bwn4; Result.BwArea=bwarea(bwn4); Result.BwLength=max(rect(3:4)); Result.BwWidthMax=wdmax; Result.BwWidthMin=wdmin; Result.BwTh=th;
五,相关作品展示
基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的实战项目
基于Nodejs、Vue等前端技术开发的前端实战项目
基于微信小程序和安卓APP应用开发的相关作品
基于51单片机等嵌入式物联网开发应用
基于各类算法实现的AI智能应用
基于大数据实现的各类数据管理和推荐系统