重庆交通大学 重庆 400041
摘要:文中提出了一种运用python_opencv的计算机视觉库进行桥梁裂缝识别的方法,梳理了进行裂缝图像识别中的灰度化、图像平滑,图像阈值分割,形态学计算的流程方法。结果表明通过计算机视觉库技术对图像进行处理可以有效的提取裂缝图像信息。
关键词:计算机视觉;桥梁检测;图像识别
1 绪论
运用基于计算机视觉的图像技术是当今桥梁检测中的前沿技术。通过计算机视觉技术,处理识别智能机器人搭载的工业相机拍摄采集得到的图像信息,为全桥的检测分析计算提供了精确的数据,并且适用于各种桥型以及桥梁环境,同时采集方案灵活多变时效高具有推广价值[1]。
本文针对桥梁裂缝病害图片,综合运用图像采集技术、图像分割技术以及图像识别分析技术,提出了一种桥梁裂缝快速识别检测方法。
2 开发环境选择
为了处理桥梁检测作业中庞大冗杂的图像数据,减少人工工作量,引入了OpenCV计算机视觉库,这是一个开源的计算机视觉库,可以跨平台运行,能够自动完成诸如获取、处理、分析和理解数字图像等任务的技术。此外它还为C++、Java、Python、MATLAB等语言提供了接口,包含众多图像处理函数库,极度简化了计算机视觉软件的开发,减少了对硬件的依赖,做到成本低、识别率高、复杂性低。同时基于此数据库使用python语言编写,有大量接口和丰富库应用,扩展方便,因此采用python-OpenCV的语言环境封装的视觉库编写程序。
登录www.python.org,选择相应的win版本,由于Python3.X较2.X版本作了较大的版本升级,且适用于pyhton的opencv库针对python3.X版本修改整合了部分函数,建议选择Python3.X版本,这是Python未来的发展方向。
在Windows CMD模式下,通过Python集成的pip方法安装 OpenCV:pip install OpenCV-Python,Python就会自动安装OpenCV开发包。
3 实现原理
整个桥梁病害图片裂缝识别流程依次由图像灰度化、图像平滑、图像阈值分割、形态学运算构成。
3.1 图像灰度化
#采用加权均法实现原始图片灰度化
emptyImage = np.zeros(img.shape,np.uint8)
for i in range(img.shape[0]):
for j in range(img.shape[1]):
emptyImage[i,j] = 0.298 * img[i,j][0] + 0.590 * img[i,j][1] + 0.112 * img[i,j][2]
首先要将原始采集机器采集得到的桥梁裂缝图片转为计算机可识别的灰度图。灰度化的第一步就是识别彩色图片的三色信息,图像信息作为矩阵排列,用f(i,j)表示一张图像,每个元素包含了RGB红绿蓝三色信息,为了便于后期的计算机识别处理,需要将其转化为每个元素包含一种0-255的灰度值。
本文依据不同分量的重要性和其它的指标性质,将RGB图像中R(红)、G(绿)、B(蓝)三个分量按照不同的权值加权均值后当作图像的灰度值。因为人的眼睛对于现实世界中的绿色(G)的敏感度最高,对于现实世界中的蓝色(B)的敏感度最低,采用以下(1)式对RGB三分量进行加权平均求和能够得到比较合理的灰度图像:
3.2 图像平滑
#高斯去噪
gauss = cv2.GaussianBlur(img,(3,3),0)
#中值滤波
median = cv2.medianBlur(img,3)
在灰度化后的原始采集图片依然包含了现场环境的所有信息,通过将图像与低通滤波器内核进行卷积来实现图像模糊。这对于消除噪音很有用。它实际上从图像中消除了高频部分(例如噪声,边缘),最大程度突显了裂缝信息。选用3x3模块的高斯滤波和中值滤波相结合的方式可大幅降低麻面散点状的背景噪声。
3.3图像阈值分割
#自适应高斯法滤波二值
maxvalue = 255
gaus = cv2.adaptiveThreshold(img,maxvalue,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,3,1)
图像分割是将图像中有意义的特征部分如图像中的边缘、区域等提取出来,这是进一步进行图像识别、分析和理解的基础。采用自适应的阈值算法,可以有效提取不同光线强度下的图像信息,其中高斯法对裂缝轮廓提取更加清晰[2]。
即是通过设置阈值,把像素点按灰度级分为若干类,从而实现图像分割。在原始图像f(x,y)中,选出一个灰度值 k 作为阈值,将图像分割为两部分,把大于该阈值的像素点的灰度值置为 255,小于该阈值的像素点的灰度值置为 0,阈值运算后的图像为二值图像 g(x,y),从而实现图像的二值分割,运算如下(2)式表示:
3.3形态学运算
#形态学连接裂缝并反转二值区域
element = cv2.getStructuringElement(
cv2.MORPH_RECT,(3,3))
erosion=cv2.erode(img,element,iterations=1)
erosion2=cv2.dilate(erosion,element,iterations=1)
erosion3=cv2.medianBlur(erosion2,3)
reverse_erosion3 = cv2.bitwise_not(erosion3)
在得到二值化裂缝图像后,执行形态学操作:腐蚀和膨胀。图像的腐蚀与膨胀,其实就是一个卷积核结构从头到尾进行图像矩阵遍历,并将中心点所在像素赋予卷积核区域内像素最大值或最小值的过程,腐蚀膨胀算法将保留裂缝细节更多,边缘更加锐利锯齿化,在一些局部连接段,骨架精线更加明显。在得到过滤后的裂缝图像后,结合相应计算函数便可用于精细化分析裂缝宽度及长度。
4 结论
本文采用python_opencv计算机视觉识别技术、使用桥梁采集得到的裂缝图片,研究了一种图像识别裂缝信息的方法流程。利用python_OpenCV中提供的函数库,可以使裂缝图像识别变得便捷。通过相应程序步骤可以使原图像和处理后的结果图像相比,保留较好的裂缝图像细节。综上表明固定阀值的图像分割技术具有很大的实用价值。
参考文献:
[1] 陈榕峰,徐群丽,秦凯强.桥梁裂缝智能检测系统的研究新进展_陈榕峰[J].公路,2019,64(5):101-105.
[2] 周崟.数字图像处理中分割方法的研究思路构架[J].信息通信,2017,(2):48-49.
作者简介:
陈亨驰,男,建筑与土木工程,重庆交通大学,硕士研究生。