李国民,曹隆,朱代先
(西安科技大学通信与信息工程学院,陕西西安 710054)
当今社会,人们在追求高品质生活的基础上,更加注重安全问题,特别是房屋居住安全。但是近年来,人们在房屋安全问题上产生了一些质疑,墙面出现裂纹问题尤为突出。
图像分割能够准确地把裂纹区域从背景中提取出来,而且能够保留裂纹边缘特征。边缘检测是图像分割中的一种常用方法,其原理是提取图像中灰度发生变化大的区域,由此确定裂纹区域的位置。经典的边缘检测算子一般有以一阶微分和二阶微分为基础的两种类型[1],一阶微分算子主要有Kirsch 算子、Roberts 算子和Sobel 算子等,特点是运算速度快,但是边缘定位不精准;二阶微分算子主要有LoG 算子、Laplacian 算子和Canny 算子等,特点是弥补了一阶微分算子边缘定位不精准的问题,但是出现了对噪声敏感的问题[2-3]。在此背景下,文中提出了一种动态阈值检测和形态学综合算法,该算法能在抑制噪声的同时较好地检测到裂纹图像的边缘。
房屋墙面裂纹检测是利用HALCON 软件中的图像处理方法进行编程实现的。HALCON 是德国Mvtec 公司研发的一款机器视觉软件,拥有广泛的机器视觉集成开发环境,便于对图像进行分析处理。墙面裂纹检测流程如图1 所示。
图1 墙面裂纹检测流程图
为了方便后期进行图像处理,在图像采集过程中规定采集环境为自然光,在垂直于墙面高度约为40 cm 处完成采集。
在采集图像前需要在裂纹附件贴5 cm 长黑白格进行标定,贴黑白格的目的有以下两方面:首先是图像畸变之后进行校准;其次是进行开裂大小的计算,利用黑白格长度与像素进行换算。
由于采集环境的影响,不便设立一个固定机位进行图像采集,所以由操作人员进行手持相机进行拍摄。这种方式在采集图像的过程中有一定的不确定性,特别是手的抖动和采集角度改变容易造成图像畸变。如果不及时进行图像校正,就会使处理结果产生误差[4]。经研究发现,采用投影变换对畸变图像进行校正的效果最优。
在变换过程中,直线映射后仍然是直线,但不一定保持原有的平行度,投影变换是将产生畸变的图像投影到一个新的视平面,其变换公式如下[5],
也可以将上述四对点代入式(2),得到八个方程,联立之后可得变换矩阵。
图像校正流程图如图2 所示,其中包含了图像校正过程所用的方法和算子。
图2 图像校正流程图
图像校准过程的第一步是对目标图像进行边缘检测,由于黑白格与背景色差异较大,因此根据灰度值和形状进行提取区域并生成轮廓,对应算子为threshold、shanpe_trans 和gen_contour_region_xld;第二步对提取到的边缘轮廓进行分离,并对分离之后的轮廓进行分类,对应算子为segment_contour_region_xld 和select_shap-e_xld;第三步是边缘拟合,使用算子fit_line_contour_xld,其目的是对整理好的轮廓xld 进行计算[6];第四步是使用算子intersection_lines 求出四个点,经过上述一系列操作之后便可得到变换前后的四对点;最后将得到的点代入到投影变换算子hom_vector_to_proj_hom_mat2d 中,得到最终的校正图像。畸变图像如图3(a)所示,校正后图像如图3(b)所示。
图3 图像校正
2.2.1 图像滤波
采集到的图像由于外界环境或者是相机的问题,会存在一定的噪声。为了去除这些噪声,以达到更好的处理效果,在预处理时进行图像滤波操作。图像滤波其实就是在尽量保留图像细节特征的条件下,对图像噪声进行抑制。常见的滤波方式有中值滤波、均值滤波、高斯滤波和导向滤波,而不同的滤波方式处理后的图像效果也不相同,处理效果的好坏直接影响到后续图像处理和分析的有效性和可靠性[7]。
1)中值滤波是非线性的图像处理方法,在去噪的同时可以保留边缘信息,它将临近像素的灰度值按照大小排列,取中间位置的值作为中值滤波后像素点的灰度值。中值滤波对图像中孤立的噪声点消除效果好,尤其是椒盐噪声,对应的算子为median_image。
2)均值滤波是典型的线性图像处理方法,对图像内部的噪声有很好的抑制作用。它将临近的像素灰度值进行取平均值,用该平均值代替原来的像素值,因此降噪后图像的清晰度不理想,对应的算子为mean_image。
3)高斯滤波是一种线性平衡滤波,高斯滤波器的高斯核内各系数是根据二维高斯分布函数得到的[8],可用于图像模糊化(去除细节和噪声)。
式中,G(x,y)是高斯函数值,x、y是横纵坐标值,σ是高斯函数标准差。
4)导向滤波不仅能实现双边滤波的边缘平滑,而且在边缘检测方面有很好的效果[9]。滤波器的数学公式为:
式中,p是输入图像,I是引导图像,q是经过滤波后的输出图像,i、j分别表示像素下标,Wij是和引导图像I相关的滤波核。
导向滤波器的一个重要假设就是认为滤波后的结果图q和引导图像I在滤波窗口内存在线性关系:
式中,wk是以k为中心像素的窗口,ak和bk都是该窗口对应的线性系数。
需注意的是,文中引导图像就是原图像,此时导向滤波器就变成了保边滤波器(Edge Preserving Filter)。
使用以上四种图像滤波方法,对墙面原始图像进行滤波操作,原始图像与滤波图像如图4 所示。
图4 原始图像与滤波图像
考虑到所要处理的图像受环境影响较大,噪声也较大,因此为保留图像中裂纹细节,通过对比处理效果,优先选取导向滤波。
2.2.2 图像增强
经过滤波去除掉噪声后,进行图像增强,图像增强的目的是增强图像高频区域(边缘和拐角)的对比度,为后续的特征提取做准备[10]。图像增强后的效果如图5 所示。
图5 图像增强后的效果
2.3.1 动态阈值检测和形态学综合算法
阈值分割是图像分割中的一项技术,是直接对被检测图像目标区域进行分割的方法[11]。设定不同的阈值,根据阈值将像素强度不同的区域分开,进而选取ROI(Region of Interest),即感兴趣区域。阈值分割可以用式(6)表示[12]:
式中,f(x,y)是输入图像,g(x,y)是输出图像,T为阈值,“1”表示选中区域,“0”表示背景区域。
由式(6)可知,选取适当的的阈值T是至关重要的,文中主要针对全局阈值分割(算子threshold)和动态阈值分割(算子binary_threshold)这两种方法进行阈值的选取。全局阈值分割利用直方图进行分析,根据波峰和波谷的关系,选取出一个中间阈值;而动态阈值分割相对于全局阈值分割的优势是不用人为设置阈值,适用范围更广,其原理是对原图像和处理后的图像做差,选取亮色区域或暗色区域即可,特点是抗干扰性强,不会随光照变换而变换。图像灰度直方图以及处理效果如图6 所示。
图6 阈值分割图
全局阈值算法中根据灰度直方图选取阈值为130,图像中裂纹像素在分割的同时包含了一部分背景像素;动态阈值算法相对于全局阈值,在处理裂纹像素的精度上更高,且在适用广泛性上要优于全局阈值分割算法,因此优先选取动态阈值算法。
利用形态学方法,对细小裂纹处产生的断裂采用闭运算,它的运算过程是先对图像进行膨胀再进行腐蚀的过程[13],数学表达式如下:
式中,⊕代表膨胀运算,Θ 代表腐蚀运算。
对提取到的裂纹进行分析,对裂纹数量(密度)、裂纹的面积和裂纹的最大宽度进行读取。通过2.1 章节中所述黑白格进行像素和尺寸的换算,进而可以得出裂纹的面积和宽度[14]。该方法提取到的裂纹数量为3,裂纹面积为439.29 mm2,最大宽度为2.48 mm。
2.3.2 Roberts算子
Roberts 算子是一阶导数边缘算子,类似于Sobel算子和Prewitt 算子,采用2×2 模板求相邻对角的像素之差,但忽视了水平和垂直方向,导致漏检,适合用于边缘灰度变化明显的图像分割[15],其卷积模板如图7 所示,处理效果如图8(a)所示。
图7 Roberts算子模板
2.3.3 Sobel算子
Sobel 算子是在Roberts 基础上改进的3×3 算子,对图像像素进行微分求导,计算图像梯度值,对生成像素的灰度值做阈值计算,从而求得边缘信息,计算过程如下:
式中,Gx、Gy分别表示对原始图像在x和y方向上求导,I是输入图像,三阶矩阵分别是垂直方向和水平方向上的模板。
求出图像近似梯度值如下:
处理效果如图8(b)所示。
2.3.4 Kirsch算子
Kirsch 算子是R.Kirsch 提出的一种边缘检测算法,在保持图像细节和去除噪声方面有很好的效果,但存在边缘判定不精准、选取边缘较粗等缺点[16]。
采用代表八个方向的模板对图像中的像素点进行卷积并求导数,取结果中最大值作为图像的边缘输出,处理效果如图8(c)所示。
2.3.5 LoG算子
LoG 算子是二阶微分算子,是在拉普拉斯算子基础上改进的一种边缘检测算子。在图像进行拉普拉斯边缘检测之前使用高斯滤波对图像进行降噪[17],正是这一过程导致在降低噪声干扰的同时也会把尖锐的边缘变得平滑。该算子的缺点是弱边缘检测效果并不理想,处理效果如图8(d)所示。
图8 裂纹检测效果图
为验证所设计方法的检测效果,利用HALCON软件与2.3 节所述方法进行对比。由于裂纹面积和宽度不便于计算,所以用黑白格进行对比,面积误差检测结果如表1 所示,宽度误差检测结果如表2所示。
表1 面积误差检测结果
表2 宽度误差检测结果
分析表1 和表2 可知,所提方法检测裂纹面积和宽度的误差率明显低于其他四种方法,用所提方法检测裂纹结果如表3 所示。由于个别裂纹距离太近,因此检测出裂纹的数量(密度)因检测方法的不同会产生很小的差异,这里没有列出,而裂纹的面积实质上也是数量的另一种表达。
表3 裂纹检测结果
针对墙面裂纹的检测,文中提出了一种动态阈值检测和形态学综合算法,该算法能够有效降低图像噪声,并提取特征信息,达到了预期的处理效果。通过对比LoG 算子、Sobel 算子、Kirsch 算子和Roberts算子,证明提出的算法在裂纹面积和宽度误差方面有明显的优势。但是房屋安全问题不仅仅是裂纹这一个问题,还有力学等各方面知识交汇在一起,所述方法将来可以与其他学科知识进一步改善交融,以获得更满意的处理效果。