主要内容

本文对裂缝检测技术进行了深入研究,并结合裂缝图像的特征,提出了一种基于传统机器学习和图像处理技术的裂缝检测方法,实现裂缝基本参数的计算和显示。内容如下:

1.裂缝图像采集(无人机)

2.裂缝图像预处理

3.裂缝分割(提取)、裂缝连接

4.裂缝分类(SVM支持向量机)

5.裂缝主要参数计算(裂缝长度、裂缝最大宽度、裂缝面积占比)

6.MATLAB GUI软件界面设计

7.结束语

​​​​​​本文提供裂缝检测系统软件及完整程序(含裂缝图片数据),访问(评论区置顶):

软件界面展示、裂缝检测结果展示:

1、裂缝图像采集

采集裂缝图像的设备可以是相机、无人机等,这不影响后续裂缝的处理,本文使用四无人机来采集桥梁裂缝图像。通过控制无人机遥控器并结合预先计算好的无人机飞行参数(下文详细介绍),让无人机与桥梁面保持一定距离飞行,采集桥梁图像。

1.1图像尺寸标定

完成裂缝图像采集之后,需要对裂缝的主要参数,例如长度、最大宽度以及面积进行计算,所以提前对图像进行尺寸标定,确定好图像中像素代表的实际物理尺寸十分必要,最后在软件界面中直接输出实际裂缝的具体参数。

要想准确计算出裂缝的各项参数,那么在图像采集的整个过程中必须让无人机摄像头与桥面保持固定的距离,并需要考虑到测量所要实现的精度。本文图像采集的精度不得低于0.2mm,则通过计算可得,在拍摄像素为2720×1530时,要求采集到的图像实际覆盖区域不得超过544×306mm。确定拍摄距离的方法如下表所示:

步骤序号

具体方法

1

由于无人机摄像头的像素为2720×1530,故提前在白纸上画出长为544mm,宽为306mm的长方形;

2

将白纸固定在任意墙面上,让无人机悬停在空中,通过调整无人机与墙面之间的距离,使得摄像头拍摄到的画面刚好覆盖住整个长方形;

3

此时,使用辅助工具(卷尺)测量无人机摄像头到墙面的距离;

4

反复多次进行测量,求得距离的平均值为350mm;

在拍摄距离得到确认后,就需要计算出一个像素所代表的的实际物理尺寸。首先将无人机悬停在距离墙面300mm(小于350mm即可)的位置处,保证无人机镜头与墙面90°垂直,此时测量出摄像头所覆盖区域的长度和宽度,分别为513mm和288mm,此时可计算出图片中每一个像素代表的实际长度为δ1=513/2720≈0.19mm/pixel,δ2=288/1530≈0.19mm/pixel,故δ=0.19mm/pixel,完成尺寸标定。

2、裂缝图像预处理

2.1图像灰度化

为提高系统处理和分析图像的效率,就需要对多余的色彩信息进行剔除,将彩色图像转换成灰度图像可以有效的达到这一目的。

img=rgb2gray(img);

2.2图像对比度增强

在图像灰度化后,仍然可能会存在图像光照不均、细节部分较暗等问题,使用线性灰度变换可以使图像中的裂缝目标获得更好的视觉效果,增强裂缝目标细节,方便后续步骤的处理。

img=imadjust(img,[0.25,0.6],[0,1]);%对比度增强

也可使用直方图均衡化来增强图像对比度,但效果不是很好。

2.3图像滤波去噪

图像增强后,虽然能提高图像整体的对比度,但是不能消除图像中的干扰因素,因此需要经过滤波去噪算法来消除干扰,使裂缝轮廓更加清晰。但是在进行去噪前可以添加一步形态学低帽变换,突出裂缝特征,以此来达到一个更好的去噪效果。

%形态学低帽变换,体现原始图像的灰度谷值
se=strel('disk',7);
img=imbothat(img,se);

图像去噪的方法有很多:均值滤波法、中值滤波法以及高斯滤波等等,对比各种去噪方法,发现高斯去噪效果最好。

%滤波去噪H = fspecial('gaussian',3,3);%高斯滤波算子img = imfilter(img,H,'replicate');%进行高斯滤波
%   img=medfilt2(img,[3 3]);%中值法平滑效果不好

 3、裂缝分割、裂缝连接

3.1裂缝分割

最常见的自动确定阈值的算法是大津阈值法(Otsu),但大津阈值法只适用于双峰性质较明显的图像,观察上示裂缝图像直方图,发现双峰性质并不明显,故本文直接给出了固定分割阈值,设定为90/255,分割效果如图。

  img=im2bw(img,90/255);

阈值分割效果图

显然,图像分割后还是会存在大量噪声区域,故必须进行二次去噪,本文提出一种基于连通域的动态去噪方法。通过观察裂缝图像发现,裂缝的连通域面积远远大于噪声的连通域面积,故可通过计算噪声面积和裂缝面积的比值,以此确定是否滤除当前的连通区域。

img=bwareaopen(img,50);
[L,num] = bwlabel(img);%计算裂缝连通域
stats = regionprops(L);
Ar = cat(1, stats.Area);
a=max(Ar);for i = 1 : numA=stats(i).Area;%遍历各个连通域的面积if((A/a)<0.1)ind = find(A);img(find(L==i))=0;%设为背景elseind = find(A);img(find(L==i))=1;%设为目标endend

基于连通域的动态去噪效果图

3.2裂缝连接

(1)形态学闭运算

观察上图,噪声区域已经基本被滤除,但是裂缝毛刺较多,且出现了断裂情况,可以通过形态学闭操作运算解决此问题,获得更好的裂缝提取效果。

形态学闭运算效果图

(2)KD树裂缝连接算法

尽管形态学闭运算可以实现部分断裂裂缝的连接,但是它并不适用于处理所有断裂裂缝。故本文提出一种基于KD树的裂缝连接算法,利用KD树的思想来找出相邻裂缝的端点,通过判断端点间的欧几里得距离是否符合阈值条件,从而来确定这两个端点是否需要连接起来,效果如图。

BW=img;
[L,num] = bwlabel(BW,8);%找到图中连通域,num为连通域个数
if(num>1)    s=regionprops(BW,'ConvexHull');%找到图像的最小凸多边形axes(handles.axes9);imshow(BW);[m1 ,~]=size(s(1).ConvexHull);[m2 ,~]=size(s(2).ConvexHull);len=length(s);for i=1:len-1for j=i+1:len        [m1 ,~]=size(s(i).ConvexHull);[m2 ,~]=size(s(j).ConvexHull);      for h=1:m1for k=1:m2              if  pdist([s(i).ConvexHull(h,:) ;s(j).ConvexHull(k,:)],'euclidean')<20hold on;plot([s(i).ConvexHull(h,1) ,s(j).ConvexHull(k,1)]  ,[s(i).ConvexHull(h,2) ,s(j).ConvexHull(k,2)],'w');endendendend
endelse
%           title('无断裂情况');end

至此,我们就得到了较为理想的二值裂缝图像。

4、裂缝分类(SVM)

不同类型的裂缝在其物理参数计算时用到的方法也有差异,故需先对裂缝进行分类处理,大致可分为规则裂缝和非规则裂缝,规则裂缝又包括横向裂缝和纵向裂缝。本文使用传统的机器学习算法——SVM支持向量机来进行分类。

支持向量机的分类原理在此就不多做赘述,读者可查阅相关博文进行了解,或者我后续可就裂缝分类专门发表一篇博文。裂缝分类流程如图所示:

本文选取的裂缝训练特征是HOG特征,将裂缝分为横向裂缝、纵向裂缝以及其他裂缝,采用SVM一对多的分类方式,最后用混淆矩阵评估分类器准确度。

5、裂缝参数计算

对于规则裂缝(横向、纵向),需计算裂缝的长度和最大宽度,对于非规则裂缝,则需计算裂缝区域的面积占比。

5.1裂缝长度

计算裂缝长度时,可以先将裂缝图像细化,得到裂缝单像素线条,再用图像中总像素个数乘以每个像素代表的实际长度即为裂缝的总长度,在第一小节已经计算出每个像素代表的实际物理长度为0.19mm/pixel,从而可直接计算出实际裂缝长度。

 B=im2bw(img,0.5);I = bwmorph(B,'skel',Inf);%细化

5.2裂缝最大宽度

本文提出一种基于形态学腐蚀操作的裂缝最大宽度求解算法。根据形态学腐蚀的原理,裂缝图像每进行一次腐蚀操作,裂缝面积就会缩小一圈,对于裂缝最宽的部分肯定是最后被腐蚀掉的。所以可以选择一个半径较小的结构元素对裂缝二值图像进行腐蚀,统计在图像像素个数逐渐变为0的过程中产生的腐蚀次数n,设裂缝最大宽度为P,L代表每腐蚀一次消除掉的宽度,得到以下最大宽度计算公式:

P=n×L

本文求解出的L=0.05mm

 bw=imread('picture1.png');%读入裂缝图像cont=1;for i =1 : 10se=strel('disk',1);bw=imerode(bw,se);%腐蚀一次m=sum(sum(bw));if(m==0)disp(cont);elsecont = cont+1;endendM=cont*0.05;

由于本文针对的是桥梁裂缝图像,故还对桥梁健康状况进行评估。当裂缝最大宽度小于0.2mm时认为桥梁状况安全;数值大于0.2mm且小于0.3mm时,建议维护;当数值大于0.3mm时发出危险警报,建议立即维护。

5.3裂缝面积占比

对于非规则裂缝,无法求出裂缝长度和宽度,故用裂缝面积占比来衡量桥梁健康状况。方法如下:

(1)计算图像总像素个数M;

(2)计算裂缝区域(像素灰度值为1)像素个数;

(3)则裂缝面积占比P的计算公式为:P=N/M

6、MATLAB GUI软件界面设计

在成功计算出所有裂缝参数后,为了更直观的展示测量结果,方便用户使用,本文还进一步设计了基于MATLAB GUI的软件界面。软件界面如文章开头处所示,分为三个区域:图像显示区域、控制面板以及参数显示区域,实现了五个功能。

(1)载入图像:载入原始裂缝图像。

(2)图像处理:通过上述操作,得到裂缝二值图像,并进行显示。同时计算出裂缝的主要参数,将其显示在参数显示区域。

(3)保存结果:利用MATLAB与Office Excel之间的便捷接口,可以方便的将裂缝的主要参数保存在Excel表格中。

(4)清空数据。

(5)退出界面。

软件系统运行结果展示:

7、结束语

##本文提供了完整的程序代码(包括GUI界面)以及所有裂缝图像数据集,下载即可运行:##

(评论区置顶链接)

文章难免有疏漏之处,请多多包涵,如果有更好的实现方法欢迎各位赐教!

基于MATLAB GUI的裂缝检测(识别)系统(支持向量机)相关推荐

  1. 基于MATLAB的烟雾火灾检测识别系统

    火灾监测报警技术是预防火灾的重要手段.近年来, 火灾发生的频率高.覆盖范围广,给人民群众的生命财产 和社会经济造成了巨大损失,已成为一种普遍且损害巨大 的自然灾害.一旦引起火灾,火势将迅速蔓延,烟雾浓 ...

  2. 【图像识别】基于计算机视觉实现路面裂缝检测识别系统matlab代码

    1 简介 随着公路与铁路事业的飞速发展,各类车辆和里程的增加,铁路的一次次提速,都对路面产生了巨大的压力.不论是公路路面还是铁路路面,路面裂纹都能随处可见,由路面裂纹造成的交通事故时有发生.研究路面裂 ...

  3. 【身份证识别】基于matlab GUI形态学二代身份证识别系统【含Matlab源码 947期】

    ⛄一.身份证号码识别简介 1 引言 作为居民身份的象征,身份证是居民身份的唯一标识,它已成为生活中必不可少的证件.在火车站.酒吧等公共场所,流动人口大人员复杂,警察需要对公民的身份证进行核对,排除可疑 ...

  4. 基于MATLAB的路面裂缝检测识别算法仿真

    目录 1.算法仿真效果 2.MATLAB源码 3.算法概述 4.部分参考文献 1.算法仿真效果 matlab2022a仿真结果如下: 2.MATLAB源码 %********************

  5. 03系统多界面_基于MATLAB的多方法车牌识别系统[带GUI界面+万字技术文档+直播]

    一.课题介绍 随着汽车数量的增加,城市交通状况日益受到人们的重视,如何进行有效的交通管理更是成为了人们关注的焦点.智能交通系统通过车辆检测装置对过往的车辆实施检测,提取有关交通数据,达到监控.管理和指 ...

  6. 基于MATLAB人脸面部检测的口罩识别系统

    基于MATLAB人脸面部检测的口罩识别系统 课题意义 作为数字图像处理和计算机视觉领域的一个重要组成部分,利用摄像机对图像进行采集,从图像中检测人脸并进行口罩穿戴的识别的有着非常重要的研究意义和应用价 ...

  7. matlab 图像模板匹配,基于MATLAB模板匹配的车牌识别系统

    一.课题名称[Q1321814823] 基于MATLAB模板匹配的车牌识别系统 二.课题背景 随着汽车数量的增加,城市交通状况日益受到人们的重视,如何进行有效的交通管理更是成为了人们关注的焦点.针对此 ...

  8. 基于MATLAB图像处理的硬币个数识别系统

    基于MATLAB图像处理的硬币个数识别系统 1.课题介绍 本设计为基于MATLAB的硬币图像识别统计装置,通过数码相机获取平铺无重叠堆积的硬币的图像,并通过Matlab工具处理后统计硬币的数目.通过控 ...

  9. 基于MatLab的PCA降维人脸识别系统(超详细解说)

    (一)基于MatLab的PCA降维人脸识别系统 本次博客内容将详细介绍如何使用MatLab,进行PCA降维来识别人脸.内容参考张铮<精通MatLab数字图像处理与识别>.书中有些内容应该是 ...

最新文章

  1. 图像边缘检测--OpenCV之cvCanny函数
  2. Remove Nth Node From End of List
  3. ibm v3700添加硬盘_机 · 科普帖丨从大到小又从小到大,硬盘这些年是怎么过来的...
  4. python跳过ssl验证_Python SSL证书验证问题解决方案
  5. [STL][C++]LIST
  6. webstorm 2017 2016 各个版本 激活破解大全 实测可用
  7. LINUX上使用命令ln新建,修改链接
  8. C语言:Fibonacci数列打印
  9. Windows编程语言VBA学习(四)——VBA代码调试
  10. 概率假设密度滤波 matlab,概率假设密度滤波的物理空间意义
  11. 谷歌、亚马逊在区块链都耽搁了什么 竟让后起的脸书名声大噪
  12. 关于 iOS 的 StoryBoard,接受的那一刻才发现她的美 - 当然美的事物都需要业心照料
  13. 免费P2P穿透通信(4) RDT可靠通信模块测试使用
  14. 如何优雅的美化kali,实现双桌面环境
  15. 奥运五环的绘制-进阶
  16. 比较好做的计算机毕设,大学几年快结束了,计算机毕设到底该怎么做?
  17. 怎么自定义服务器的404,如何自定义404页面
  18. 飞行棋 java_java版飞行棋
  19. Jetson Xavier NX安装opencv3.4.5(小白教程)
  20. OpenGL-GLSL语言入门教程(1)

热门文章

  1. 蓝宝小企鹅双面取暖器,安全增暖,如春天般舒适
  2. 【转载】特殊符号大全2016v2
  3. java三国杀百度云,GitHub - wzk1015/sanguosha: 文字版三国杀,10000+行java实现
  4. html文件设置成mac屏保,mac如何自定义设置屏保-mac将图片设置为屏保的方法 - 河东软件园...
  5. 「部署全流程」 中科院学术专业版chatGPT来啦
  6. React Native 按需加载 手Q狼人杀探索之路
  7. 提词器是用来干嘛的?好用的提词器软件分享
  8. 【软件工程基础】个人数独项目介绍及制作流程
  9. 【Vuejs】778- 超全 Vuejs 知识点(基础到进阶)
  10. 在线考试系统全套(任务书+开题报告+外文翻译+毕业论文+项目源代码)