楊先鳳,吳媛媛,趙 玲
(西南石油大學 計算機科學學院,四川 成都 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.]