1 简介
随着公路与铁路事业的飞速发展,各类车辆和里程的增加,铁路的一次次提速,都对路面产生了巨大的压力。不论是公路路面还是铁路路面,路面裂纹都能随处可见,由路面裂纹造成的交通事故时有发生。研究路面裂纹检测方法对于路面维护、交通安全具有极其重大意义。近年来,路面裂纹检测大多采用基于图像特性的方法和基于机器学习的方法。基于图像特性的方法包括边缘检测,直方图分析和形态学方法等,这类方法虽可以达到快速检测,但需手工设置较多阈值,对不同数据集甚至同一数据集的不同图像需要设置不同阈值,严重依赖于阈值的选取。而最近几年,大量学者采用基于有监督学习方式进行裂纹检测,如支持向量机、神经网络、结构化随机森林等,这种方法一般需要先对特征进行标记,然后再通过模型进行训练,可以大大提高裂纹检测的准确率,但缺点是检测效果依赖于数据集的选取,学习速度慢,因此算法难以被推广。实际上,裂纹检测需要同时兼顾性能和效率,为此,本文主要针对无监督的路面裂纹检测方法进行研究,在保证性能的前提下,提高裂纹检测的效率。本文的主要工作有:(1)提出了自适应的无监督裂纹检测方法。为了克服有监督学习适应性和推广能力差的问题,研究了基于块的无监督裂纹检测方法,具有速度快,自适应性好,易于推广到不同类型的线路等优点。但是也存在着误检和漏检等问题。为此,针对漏检裂纹,提出了基于上下文信息的自适应块裂纹检测方法;针对误检裂纹,提出了基于连通区域的裂纹几何特性分析方法。同时扩充数据集,不仅将算法应用于公路路面,还在铁路路面数据集上进一步验证了算法的有效性;(2)实现了路面裂纹特征表示算法,给出了路面裂纹类型划分和严重程度判定依据,并在公路和铁路测试集中进行了验证;(3)设计和实现了路面裂纹检测系统,将优化后的裂纹检测算法以及裂纹类型与严重程度划分算法应用于该系统中,并在不同数据集上进行了测试。
2 部分代码
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;
3 仿真结果
4 参考文献
[1]张旭. 基于计算机视觉的智能化道路裂缝检测系统研究[D]. 华中师范大学.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。