杨先凤,吴媛媛,赵 玲
(西南石油大学 计算机科学学院,四川 成都 610500)
目前,油管裂纹检测的方法主要采用无损检测法,无损检测法主要包括观察法、超声波检测法、漏磁场检测法、涡流检测法和弹性波检测法[1]。然而这些传统检测算法各自都存在着一些问题。尽管有一定效果,但是结果并不精确。为得到检测结果需要付出的代价是得不偿失的。传统的物理检测法经济代价高,工作量巨大,同时操作人员也有一定的安全风险。针对这些问题寻找一种经济有效的油管裂纹检测方法是一个迫切的问题。本文提出了将数字图像中的边缘检测算法应用于油管的裂纹检测中,在经典的边缘检测算子中,Canny算子应用最为普遍[2]。Canny算子是一个多级边缘的检测算法,其检测结果包含了图像细节的同时有效排除了噪音的影响,因此能够取得更好的检测结果。然而,Canny算子的计算步骤相对复杂,对计算机性能要求较高,而且只有当弱边缘和强边缘相连时,才将弱边缘包含在输出图像中,检测到的边缘连接性不高[3]。
Canny算子曾被运用到路面裂缝检测,取得不错的效果,本文针对Canny算子在边缘检测方面的缺点,提出了一种基于改进的Canny算子,应用于油管裂纹检测[4]。这种算法主要是在Canny算子的基础之上进行了三方面的改进:首先,为了克服弱边缘的问题,我们改变了梯度幅值和方向,用一个3*3的模板代替原有的2*2模板[5];其次,应用Otsu最大类间方差法来自动获取高低阈值[6,7];最后,用模糊判决的方式进行边缘连接,从而获得更好的裂纹连贯性[8]。
由于油管所处的环境特殊,通常管道被埋在地底,其表面不可避免附着了油污、泥土等杂质,且为了保持裂纹的原真性,很难在保证不损坏原裂纹的情况下进行有效清理。另外,在图像采集过程中,图像的拍摄和传输过程会产生各种噪音。首先对图像进行预处理,降低这些外部原因给图像带来的杂声,也使裂纹检测的实验结果更加准确[9]。图1是预处理的流程。
图1 油管裂纹图像的预处理过程
在图像RGB模型中,令R=G=B,图像灰度化的定义见文献[10]。本文从常用的灰度图获取法中选取了在实际应用中效果最佳的经验公式法,进行灰度转换。如以下公式所示
Gray(i,j)=0.11R(i,j)+0.59G(i,j)+0.30B(i,j)
(1)
式中:Gray(i,j) 代表转换后的灰度图像中点 (i,j) 所在位置的灰度值。用MATLAB将彩色图像变换为灰度图像,图2为灰度变换前后的图像对比。
图2 原始裂纹图像与灰度处理后的图像
(1)直方图均衡化
直方图均衡化是一个点操作,逐点改变图像的灰度值,尽可能是每个灰度级具有相同的像素数,从而使直方图均衡分布。假设图像A有N个灰度级,M个像素,ha(u)是输入图像a(x,y)的直方图,b(x,y)是直方图均衡化处理后的输出图像。直方图均衡化的公式如下
(2)
图3是直方图均衡化处理后的图像。
图3 直方图均衡化处理后的图像
(2)对数变换
对数变换用以对灰度范围的缩放,是图像增强处理中的常用算法,在对数变换中,要使变换后的图像达到增强,图像细节更易辨别的目的,需要缩小低灰度范围。假设原始图像f(i,j),则对数变换后的图像
f′(i,j)=C*log(1+|f(i,j)|)
(3)
其中,C为尺度比例常数。
经过以上3个步骤,图像已经可以用于仿真实验。与处理前后的对比图像如图4所示。
图4 经过图像增强处理的最终图像和原始图对比
John Canny提出Canny算子,Canny 算子的检测方法是先平滑之后再求导数[11]。John Canny不仅提出了Canny算子检测算法,还给出了判定是否最优检测算法的3个评价标准:
(1)错误率低:尽可能多地标识出目标物体的实际边缘并减少噪声产生的误报;
(2)精确定位:检测到的边缘点位置与实际图像中的位置尽可能一致;
(3)抑制虚假响应:边缘仅被标识以此并且要对虚假响应边缘达到最大抑制。
Canny边缘检测算法步骤为:
(1)消除噪声。用G(x,y)对图像f(x,y)进行卷积运算,得到平滑图像S(x,y)=G(x,y)⊗f(x,y), 其中
(4)
如下是一个大小为5的高斯内核
(5)
(2)计算梯度值和方向。首先使用一阶微分卷积,计算x和y方向偏导,即(Gx,Gy),获得梯度幅值的大小和梯度方向
(6)
(7)
其中
(8)
(3)非极大值抑制:在计算完梯度幅值后并不能确定边缘,因为计算梯度幅值得到的结果仅为幅值局部最大值,要得到边缘必须只保留幅值局部变化最明显的点,抑制非极大值点。
(4)高低阈值排查:选用两个阈值,其中一个为高阈值T1,另一个为低阈值T0。对于任意边缘像素若幅值高于T1,则看为边缘像素。若低于T0,则该像素被丢弃。若某一像素幅值在高低阈值之间且该像素只连接到一个大于T1的像素时被保留,否则丢弃。
使用Canny算子进行边缘检测可以得到较好的实验结果,其优异的抗干扰能力和边缘定位性可以很好地保留边缘的细节,该方法甚至也是一种评价其它边缘检测算法优劣的基础。
然而在油管裂纹检测的实际应用当中,裂纹图像会由于客观因素干扰导致图像背景与目标对比度不一致,或者边缘信息不确定。如果仅使用传统的Canny算子,会存在一定限制:
(1)高斯滤波的窗口系数需要手工确定,并且窗口系数值的选取对检测结果起到重要影响,现实中窗口系数很难既保证降低噪声又不影响边缘信息。
(2)传统的Canny算子采用了均值的方式得到梯度幅值,在2*2的邻域范围内取得差分均值来计算,这种方法对于裂纹的定位并不准确,对噪声的抑制性也较差,最后的检测结果出现伪劣纹的可能性很高。
(3)对裂纹边缘检测中,阈值的设定尤其重要,对检测结果影响很大。传统的人工经验法设置阈值会使边缘检测结果不稳定,得到的边缘图像效果不佳。
本文中把彩色油管图像在MATLAB仿真实验下分别进行了灰度化操作,直方图均衡化增强处理,对数变换增强等3个步骤的预处理,图像可以用于后面的裂纹检测仿真实验。
近年来,许多图像处理领域的国内外的研究者都对Canny算子提出了改进方法,并且进展颇丰。很多研究人员从以上的限制方面改进了Canny算子,也提出了很多有效的改进方法[12,13]。在针对得到的原始油管裂纹图像具体情况进行分析后,选择了从以下3个方向改进的Canny算子[14]。
传统的Canny 算子是将梯度幅值作为依据来判断是否为边缘的,本文得到的原始油管裂纹图像是有相机拍摄,在拍摄过程中有相机本身的成像质量限制,加之设备本身的杂质,图像会存在各种类型的噪声。虽然图像已经经过了几种方式的预处理,可是传统的Canny算子用2*2模板,检测结果并不佳,对噪声的抗干扰性和边缘检测的准确性也无法得到保障。本文中,用一个3*3的模板代替原有的2*2模板,这样确定的中心像素点的梯度是由较多的像素点共同完成的,可以使检测效果得到提高,改进的方法如下:
传统Canny算子的x和y方向的导数的计算方式为
(9)
(10)
本文提出的方法在原基础上加入了对角线方向的偏导数,改进后的计算如下:
x方向的偏导数
Gx(i,j)=I(i,j+1)-I(i,j-1)
(11)
y方向的偏导数
Gy(i,j)=I(i+1,j)-I(i-1,j)
(12)
45°方向偏导数
G45(i,j)=I(i-1,j+1)-I(i+1,j-1)
(13)
135°方向偏导数
G135(i,j)=I(i+1,j+1)-I(i-1,j-1)
(14)
水平方向的差分为
(15)
垂直方向的差分为
(16)
采用直角坐标转为数学极坐标的方式,以点(i,j)为例,梯度幅值和梯度方向分别表示如下
(17)
θ(i,j)=arctan(fx(i,j)/fy(i,j))
(18)
采用这种方法计算,可以兼顾水平竖直方向和对角线方向上的像素点对于中心像素点的影响,这样得到的x和y方向的差分均值对裂纹边缘的定位性相对更准确,抗噪性也较为理想。
传统的Canny算子高低阈值设置仅依靠人工,因此对油管裂纹检测效果不是很好。针对这个缺陷,本文改用Otsu 最大类间方差法来自动获取与之,实现了裂纹边缘检测的自适应性[15]。Otsu又名大津算法,是1979年日本学者大津展之提出来的一种自适应确定阈值的方法,利用最优化思想,分割图像背景目标,本文获取最佳阈值即是用Otsu大津展之法实现的[14]。
在Otsu算法中,当前景和背景的类间方差值达到最大时,该阈值即为所求最佳阈值。令分割阈值为t,目标像素点在图像的占比为t0,目标裂纹像素点的灰度平均为g0;非目标裂纹的像素点的图像占比为t1,非目标裂纹像素点的平均灰度值为g1。则可以得到整幅图像的平均灰度q,将该过程用算式表达为
q=t0×g0×t1×g1
(19)
目标和前景方差表示为
p=t0×(g0-q)2×t1×(g1-q)2
(20)
当类间方差达到最大
pmax=max(w0×(q0-q)2×w1×(q1-q)2
(21)
则图像的最佳阈值G可表示为
G=argpmax
(22)
极大值抑制操作中需要两个阈值:高阈值和低阈值,这里用T0表示高阈值,T1表示低阈值。从上式不难看出,Canny算子中判断边缘的高低阈值中,高阈值T0是梯度图中作为裂纹边缘的起始点的判断依据,这是因为T0值的设置要尽可能兼顾保留油管裂纹的原始信息和最大程度的抗噪和消除伪边缘,相较于人工设置阈值的缺陷,Otsu法利用类间方差最大化选取高阈值,可以同时满足这几个要求。在实际操作中,一般来说,T0值都会比T1要大,使用T1的目的是得到裂纹信息更为全面的梯度图,当然伴随T1值的减小,大量的噪声和伪裂纹的出现难以避免。对于T0和T1的取值,本文根据经验将T0设为t,而T1设为0.4t。
除了抗噪性差和人工阈值选取的缺陷,Canny 算子还易出现边界不连续,这也是许多学者改进Canny算子方向中的热点。因此本文对裂纹的连接也做了改进。裂纹连接过程中判断像素相似性的3个依据为:
(1)梯度值必须满足
|f(x,y)-f(x1,y1)|≤T
(23)
其中,T是一个非负门限,T=Thigh。
(2)梯度方向必须满足
|∅(x,y)-∅(x1,y1)|≤Q
(24)
(3)距离:指的是裂纹的顶点(x,y)与其相邻区域中的候选裂纹顶点(x1,y1)之间的距离。
如果裂纹像素点为(x,y),以(x,y)为中心建一个3*3的邻域(x+i,y+j)(i,j=0,±1),上式中i和j不能同时为0。则判断某一像素是否为与裂纹像素点(x,y)连接时,需要由梯度幅值、梯度方向和与中心像素的距离远近程度来共同确认。判断是否为裂纹连接点的隶属度函数表示为
(25)
以上算式中,a≤x≤b(其中k≥0为常数)。
若要确定在邻域(x+i,y+j)点的像素隶属于与(x,y)连接的裂纹像素点,首先要计算隶属度,隶属度可以表达为
ε=aεΔ+bεφ+cεd(a+b+c=1)
(26)
其中,εΔ为预测点的梯度值,εφ为预测点的梯度方向,εd为预测点到裂纹点的距离。
已知了判断相似度的依据,根据上式,本文中a,b,c的取值分别为0.6,0.3,0.1。在3*3的邻域内的待选点中,选出隶属度最大的点,判断为裂纹点(隶属度相同时,选择中间点)。这一搜索过程可以同时对所有需要判断的像素点逐个筛查,判断其与邻域中的另一个像素点能否连通。本文停止搜索的标准:当得到的新的裂纹点是当下已被判断为裂纹的点,或者当前判断为裂纹的点与前一个裂纹点直接相邻时,停止搜索。
为验证本文所提出的Canny改进算子在油管裂纹检测中的应用,在提高检测效果和保持裂纹联通性,仿真实验对拍摄的两幅原始油管裂纹图像如图5和图7所示[16]。对这两幅图先进行了去噪处理后,分别用传统的边缘检测算子:Roberts算子、Log算子、Canny算子以及改进后的Canny算子进行仿真实验,得到的效果如图6和图8所示。其中图(a)~图(d)分别代表了对油管裂纹图像1和图像2用Roberts算子、Log算子、Canny算子以及改进后的Canny算子进行仿真后的结果。
图5 油管裂纹图像1
图6 不同算法对图像1裂纹检测结果比对
图7 油管裂纹图像2
图8 不同算法对图像2裂纹检测结果比对
从图6的图6(a)~图6(d)4幅子图可以看出,相较于图5的原始图像,Roberts算子的检测效果是4种算法中最差的,Log算子比Roberts算子表现稍好,但是裂纹边缘的连通性比较差。传统Canny算子裂纹边缘效果较好,但噪声仍然很多,而本文改进后的Canny算子检测的结果,裂纹边缘更为清晰,对噪声的抑制也有一定效果。
图7是油管裂纹图像2,在MATLAB仿真实验环境下,与其它几种检测算子比较,结果如图8所示。从图8(a)~图8(d)4幅子图可以看出,Roberts检测算子和Log检测算子得到的油管裂纹边缘的连通性不佳。传统Canny算子得到的裂纹边缘效果虽然较好,但存在很多噪声,而本文改进后的 Canny 算子检测的结果,裂纹边缘比较清晰,对噪声的抗干扰性也相对有较大提高。
本文分析了传统油管裂纹检测算法的缺陷,提出了用数字图像处理中边缘检测算法进行油管裂纹检测处理。通过改进传统的Canny算子,克服了裂纹检测中裂纹连接度低,裂纹误判率高等缺点。进而改善了传统的无损检测方法中,检测设备昂贵、检测危险度高、工作量大的问题。首先在对原始油管图像进行了去噪过滤后,得到成像质量较高的图像,然后对边缘检测算子Roberts算子,Log算子,Canny算子,及改进的Canny算子对两幅油管裂纹图像进行了MATLAB实验对比分析,实验结果可以明显看到改进后的Canny算子在裂纹检测的连贯性、完整性和准确性上都有了大幅提高,验证了本文提出的基于Canny改进算子的油管裂纹检测算法是一种方便有效低成本的油管裂纹检测方法。
[1]WANG Meng,MA Yunxiu,CHENG Wenfeng.Discussion on magnetic flux leakage testing technology for oil pipeline[J].China Science and Technology Expo,2015(7):31(in Chinese).[王蒙,马云修,成文峰.输油管道裂纹缺陷漏磁检测技术的探讨[J].中国科技博览,2015(7):31.]
[2]SUN Yan,LI Mengni.Comparison of several classical edge detection operators[J].Information Technology and Information Technology,2015(8):186-187(in Chinese).[孙岩,李梦妮.几种经典边缘检测算子的比较[J].信息技术与信息化,2015(8):186-187.]
[3]XU Hongke,QIN Yanyan,CHEN Huiru.An edge detection algorithm based on improved Canny[J].Infrared Technology,2014,36(3):210-214(in Chinese).[许宏科,秦严严,陈会茹.一种基于改进Canny的边缘检测算法[J].红外技术,2014,36(3):210-214.]
[4]XU Huan,LI Zhenbi,JIANG Yuanyuan,et al.Detection of road surface cracks based on OpenCV and improved Canny ope-rator[J].Computer Engineering and Design,2014,35(12):4254-4258(in Chinese).[徐欢,李振璧,姜媛媛,等.基于OpenCV和改进Canny算子的路面裂缝检测[J].计算机工程与设计,2014,35(12):4254-4258.]
[5]ZHU Geming,YING Zilu.Based on Canny,Sobel and its improved template operator fusion Freeman chain edge extraction algorithm[J].Journal of Wuyi University (Natural Science Edition),2015(4):42-47(in Chinese).[朱戈明,应自炉.基于Canny,Sobel及其改进模板算子融合的Freeman链码边缘点提取算法[J].五邑大学学报(自然科学版),2015(4):42-47.]
[6]ZHANG Zhiqiang,SONG Haisheng.Image edge detection method using Otsu improved Canny operator[J].Computer & Digital Engineering,2014,42(1):122-128(in Chinese).[张志强,宋海生.应用Otsu改进Canny算子的图像边缘检测方法[J].计算机与数字工程,2014,42(1):122-128.]
[7]XU Chao,HUANG Fenghua,MAO Zhengyuan.Improved two-dimensional Otsu threshold segmentation algorithm[J].Electronic Technology Applications,2016,42(12):108-111(in Chinese).[徐超,黄风华,毛政元.一种改进的二维Otsu阈值分割算法[J].电子技术应用,2016,42(12):108-111.]
[8]LI Junfeng.Improved Canny edge detection method[J].Computer Era,2016(9):67-69(in Chinese).[李俊峰.一种改进的Canny边缘检测方法[J].计算机时代,2016(9):67-69.]
[9]WU Xi.Research and implementation of image edge detection algorithm based on Matlab[D].Jilin:Jilin University,2014(in Chinese).[吴曦.基于Matlab的图像边缘检测算法的研究和实现[D].吉林:吉林大学,2014.]
[10]ZHONG Cai.Application of edge detection algorithm in image preprocessing[J].Software,2013,34(1):158-159(in Chinese).[钟彩.边缘检测算法在图像预处理中的应用[J].软件,2013,34(1):158-159.]
[11]XU Liang,WEI Rui.An optimization algorithm of image edge detection based on Canny operator[J].Science Bulletin,2013,29(7):127-131(in Chinese).[徐亮,魏锐.基于Canny算子的图像边缘检测优化算法[J].科技通报,2013,29(7):127-131.]
[12]WANG Zhengzhou,WANG Wei,WANG Wei,et al.Image edge detection method based on multi-scale adaptive gradient[J].Computer Engineering and Design,2014,35(7):2442-2446(in Chinese).[王拯洲,王伟,王维,等.基于多尺度自适应梯度的图像边缘检测方法[J].计算机工程与设计,2014,35(7):2442-2446.]
[13]ZHENG Yingjuan,ZHANG Youhui,WANG Zhiwei,et al.Edge detection algorithm based on eight-direction Sobel operator[J].Computer Science,2013,40(11A):354-356(in Chinese).[郑英娟,张有会,王志巍,等.基于八方向Sobel算子的边缘检测算法[J].计算机科学,2013,40(11A):354-356.]
[14]LI Jing.Research and application of digital image detection methods based on oil pipeline crack[D].Chengdu:SouthWest Petroleum University,2015(in Chinese).[李静.基于油管裂纹的数字图像检测算法的研究与应用[D].成都:西南石油大学,2015.]
[15]DING Xiaofeng,HE Kailin.Improved image segmentation algorithm based on maximum interclass variance[J].Computer Engineering and Design,2015,36(10):2765-2768(in Chinese).[丁晓峰,何凯霖.基于最大类间方差的改进图像分割算法[J].计算机工程与设计,2015,36(10):2765-2768.]
[16]CAI Yongzhi,XIA Ling,PING Xiaoyan, et al.Research on image enhancement method based on MATLAB[J].Journal of Langfang Teachers College:Natural Science Edition,2014,14(5):37-39(in Chinese).[蔡勇智,夏龄,平小燕,等.基于MATLAB的图像增强方法研究[J].廊坊师范学院学报:自然科学版,2014,14(5):37-39.]