周科成 劉資 劉旭 代淇源
摘 要:管道作為輸送石油和天然氣最為安全有效的方式,其質量優(yōu)劣直接關系到油氣輸送的安全性,因此,對管道故障的有效提取檢測至關重要。在故障的圖像處理工作中,選擇合適的處理閾值十分重要。本文基于OpenCV計算機視覺庫,改進傳統(tǒng)圖像處理算法,提供一套可以根據檢測環(huán)境中光強條件自適應選取最佳檢測閾值范圍的算法。實驗結果表明,該方法在管道檢測領域中可以準確地選取一定光照強度下的最佳檢測閾值,為后續(xù)的處理過程提供了便利。
關鍵詞:油氣輸送;管道故障;自適應算法;最佳閾值范圍
中圖分類號:TP391.41 文獻標識碼:A 文章編號:1671-2064(2018)23-0013-04
1 引言
隨著國家能源工程的大力開展,作為最有效、安全的輸送方式,管道運輸一直備受青睞,而管道的安全運營是決定能源工程能發(fā)揮持續(xù)作用的基礎保障。
針對預備役管道的常見缺陷,國內外學者已經研發(fā)了諸多檢測方法來排除運營風險。在國內,韓文花等人引入小波系數去噪算法,用于去除管道檢測漏磁信號中系統(tǒng)噪聲[1];廖高華、甘志梅等人總結了以CCD攝像頭采集信息的焊縫檢測視覺圖像處理的方法[2];林蘭極,王庫等提出了一種基于DSP的石油管道焊縫檢測算法[3]。國際上,ANATOLY D,SERGEY K等研究了磁記憶方法對于管道缺陷線上檢測的應用[4];美國通用電氣公司(GE)應用的具有腐蝕檢測模式的超聲波相空陣管道內檢測器,檢測精確度可達90%[5]。
然而,管道內部空間狹小、光照不足及噪聲種類繁多等不利因素都為檢測閾值的選取帶來了困難。針對此現象,本文在前人研究基礎上提出一種可以根據檢測環(huán)境中的光照強度自適應選取最佳閾值的算法。
2 圖像處理平臺——OpenCV簡介
2.1 OpenCV的基本特點
OpenCV實際是經開發(fā)而得到的C源碼,全部的算法均以封裝在IPL的動態(tài)數據結構為基礎,擁有高靈活性。其以Intel處理器指令集為基礎,超過50%的函數在進行匯編或設計時,均能以Intel處理器指令集為對象,不斷優(yōu)化代碼并提高代碼運行速度;OpenCV不僅有統(tǒng)一的功能定義與結構,而且還有便捷且靈活的接口,包含C/C++函數達300多個,其強大的矩陣計算能力幫助技術人員大幅減少開發(fā)時間與精力投入,不僅對程序開發(fā)質量與效率有提升作用,還能提高整個程序運行的穩(wěn)定性與可靠性;除此之外,OpenCV可以兼容多種操作系統(tǒng),包括MacOS、Linux、Windows等。同時支持大多C/C++編譯器,保證了代碼可以在多種平臺間無障礙移植,諸如C++Builder、VC.NET2005、Visual Studio及VC++6.0等。[6]
2.2 與本文算法相關的OpenCV庫函數簡介
由于本算法基于OpenCV實現,所以在此將與本算法相關的OpenCV庫函數做簡單介紹,方便讀者在復現算法的同時也可以根據實際需求靈活地進行修改。
(1)Mat():
Mat是OpenCV中最基本的庫函數,屬于core模塊。嚴格意義上講Mat屬于“類”概念,由兩個數據部分組成:矩陣頭和一個指向存儲所有像素值的矩陣的指針。用于創(chuàng)建一個矩陣類型,開辟內存空間來存放指定圖像。
函數原型:cv::Mat::Mat(int rows, int cols, int type, const Scalar &s;)
rows:預先指定圖像的行數;cols:預先指定圖像的列數;
type:圖像矩陣中每個元素在內存中的存儲類型;
Scalar:OpenCV中的數據類,常用來定義每個通道中的值。
(下文中起相同作用的輸入變量不再做詳細介紹)
(2)at動態(tài)地址:
at()函數隸屬于Mat類。給使用者一個非常方便的接口以訪問圖像中的每個像素。可用于遍歷單通道以及多通道圖像。用法如下:
at
type:該圖像的類型,包括灰度、GRB等;
channel:圖像的通道數。
除此之外還用幾種常見的圖像遍歷方法,比如迭代法、查找表法以及利用LUT函數等方法。在此就不一一贅述了。
(3)threshold():
threshold()函數是OpenCV所提供的一種用于執(zhí)行基本閾值操作的庫函數,屬于imgproc模塊。應用此函數可以進行多種閾值操作包括二進制閾值化、反二進制閾值化、截斷閾值化等。具體用法如下:
double threshold(Mat InputArray,Mat OutputArray, double threshold,double maxval,int threshold_type);
Mat InputArray:輸入圖像;Mat OutputArray:輸出圖像;
double threshold:使用者指定的操作閾值;
double maxval:進行二值化操作時的最大閾值(最小閾值默認為0);
int threshold_type:使用者可選定要進行的閾值操作。
(4)Canny():
Canny()是OpenCV中的一種基本的邊緣檢測函數,屬于imgproc模塊。其函數模型基于John F.Canny于1986年開發(fā)出來的一種多級邊緣檢測算法,又名Canny算法,至今被很多人認為是邊緣檢測的最優(yōu)算法。Canny算法主要步驟包括使用高斯平滑濾波器卷積降噪、計算梯度幅值和方向、非極大值抑制和滯后閾值選取。[7]
在OpenCV中,其具體用法如下:
Canny(detected_edges,detected_edges,lowThreshold, lowThreshold*ratio,kernel_size);
lowThreshold:進行滯后閾值選取時的低閾值;
lowThreshold*ratio:進行滯后閾值選取時用到的高閾值(一般選為低閾值的三倍);
kernel_size:進行卷積降噪時用到的卷積核的大小。
(5)findContours():
findContours()具有強大的尋找輪廓功能,屬于imgproc模塊。可以在圖像中尋找輪廓,并將輪廓的點陣信息存放在一個向量中以供調用。除此之外,用戶還可以利用此函數按照輪廓的層級關系指定將要被選擇的輪廓種類。具體用法如下:
void cv::findContours(InputOutputArray image, OutputArrayOfArrays contours,OutputArray hierarchy, int mode,int method,Point offset = Point() )
OutputArray hierarchy:函數返回的一個內部包含有輪廓信息的向量。
int mode:使用者想要提取的輪廓層級類型。
int method:檢測輪廓時所使用的方法,包括四像素鄰域檢測和八像素鄰域檢測。
Point offset:檢測時的錨點相對坐標,默認為中心點。
(6)drawContours():
drawContours()函數可以將按照一定格式規(guī)則存放在向量中的輪廓信息輸出在指定圖像上。通常與findContours()聯(lián)用。具體用法如下:
void DrawContours(Arr*img,Seq*contour,Scalar external_color,Scalar hole_color,int max_level,int thickness=1,int line_type=8,Pointoffset=Point(0,0));
Seq*contour:輸入一個存放輪廓信息的向量。
int max_level:向量中存儲的輪廓號,使用者可指定想要繪出的特定輪廓。
int thickness:繪出輪廓線條的厚度。
int line_type:繪出輪廓線條的類型,默認值為8。
3 一種光強自適應閾值選取方法過程
3.1 方法概述
在基于圖像處理的管道檢測過程中,對光照條件的要求總是十分嚴格。光源的位置、強度、色調等諸多因素都會可能對最終的檢測結果造成影響,基于此,該算法提出了一種在管道檢測領域中可以自行根據外界光強條件而選取最佳檢測閾值的方法。(本文中的最佳檢測閾值是指經過二值化分割后直接可以準確提取出故障輪廓的閾值)具體操作方法如下:
(1)圖像有效區(qū)域的獲取。考慮到不同的管道檢測系統(tǒng)有著較大的機械結構差異,由于光源和攝像頭位置的不同,導致采集到的圖像也不盡相同。在圖像采集過程中,很有可能因為這些因素而導致采集到的圖像存在一部分的未受光照區(qū)域(下文稱為“無效區(qū)域”)。為了盡可能真實地反應出圖像的受光照情況,首先需要將獲取的圖像進行截取操作,以保證操作之后的圖像最大程度上地受光照覆蓋,以達到最理想的分析效果。本文中對采集到的圖像進行灰度化處理之后截取得到長、寬分別為原圖長、寬的q倍的中心有效區(qū)域(q<1)以去除未受光照的無效區(qū)域。
(2)相關量的定義與計算。統(tǒng)計(1)所得圖像中像素點總數,記為j;設λ是人工定義的圖像基準灰度值,統(tǒng)計圖像中灰度值大于λ的像素點總數,記為α。定義灰度光強比例:β=,分別有四個特殊點α1,α2,α3,α4,滿足關系式:
;=λ;
;=2λ;
β1,β2,β3,β4分別為α1,α2,α3,α4四個特殊點對應的灰度光強比例。
對關系式進行求解,得到:
α1=;α2=;α3=;α4=;
(3)有效區(qū)域閾值計算前的條件判斷。根據條件Ⅰ:α> α4,判斷有效灰度圖像是否滿足光照條件:當滿足條件Ⅰ時,繼續(xù)步驟4);如果不滿足條件Ⅰ,即圖像中灰度值大于基準灰度值的像素個數較小,反應出檢測環(huán)境光照強度不足,如果此時仍要繼續(xù)檢測會嚴重影響故障信息的提取準確度。因此當α<α4時應當停止檢測,并提高檢測儀器的光源亮度。
(4)基于灰度光強比例的最佳閾值計算。根據灰度值大于λ的像素點總數α,運用函數δ=δ(α)求得最佳閾值δ;
δ=;
函數中ε為特殊設定的閾值補償量,α1,α2,α3,α4分別為該目標圖像最佳閾值函數的分段區(qū)間的區(qū)間端點,依據α所處的區(qū)間,由分段函數計算δ。
通過分析此函數不難發(fā)現,該函數有兩個最值,δmax= λ,δmin=λ,該函數所選取的所有閾值均在此范圍之間??梢酝ㄟ^人工選取λ值使所選閾值較為準確地反應出真實的最佳檢測閾值。(本文所選取的λ值為200,后文的實驗部分對此有詳細闡述)
3.2 應用舉例
基于本算法的處理流程,下面將列舉對一幅采集到的實際管道圖像的處理過程進行說明。
本例證使用了OpenCV3.4.3,并在PC端的Visual Studio 2015編譯環(huán)境下進行操作。在此基礎上,本文還使用了搭載Linux系統(tǒng)的樹莓派3b+主板(微處理器型號為ARM Cortex A53系列)進行算法驗證,并在管道中進行實際測試。處理效果顯示本算法可以在開發(fā)板上進行復現,可以應用于實際管道檢測產品。下文介紹的操作方法是在PC端上進行的相關操作。
(1)通過攝像頭返回一張三通道彩色圖像并進行灰度化處理。如圖1。
(2)將所得的圖片進行截取,以獲得中心有效區(qū)域。這里的q值為0.6,以下的數據計算均為在此區(qū)域內計算得出的。
(3)相關量的計算,此處設定基準灰度值λ=200,需要計算超過基準灰度值的像素總個數j、像素個數α以及灰度光強比例β。(如圖2)
判斷光照強度是否達到檢測要求,并根據公式δ=δ(α)對最佳檢測閾值進行求解,(如圖3)得到此時的最佳處理閾值δ=190。
4 實驗與分析
實驗在模擬性半封閉的管道中開展,該管道中有5組人工制造的經典故障。實驗共采取了三種不同強度的光照條件(下文分別以光強Ⅰ、光強Ⅱ和光強Ⅲ代替,三種光強依次減弱),每種條件下分別對每組故障進行三次圖像采集,并分別對采集到的圖像進行實際最佳閾值范圍的手動測量和算法對最佳閾值范圍的計算測量,共計得到了135組有效閾值范圍。下面將選取其中具有代表性的5組實驗數據(最強光強條件下的實驗三次,普通光強和最弱光強條件下的實驗各一次)進行結果分析。
為了得到最接近實際最佳的檢測閾值范圍,可以通過手動調節(jié)二值化閾值參數并人工觀測各組圖像中故障輪廓能夠被識別和檢測出的最小臨界閾值和最大臨界閾值,從而得出對于該故障的實際最佳閾值范圍,表1所示的表格展示了實際最佳的檢測閾值范圍的測量情況;另外,先計算每組故障圖片的灰度光強比例β,進而按照本文提出的光強自適應算法得出一個最佳檢測閾值,表2所示的表格展示了最佳檢測閾值范圍的算法預測情況。
通過對比表1和表2中的數據可以發(fā)現,算法預測的最佳檢測閾值均基本落在實際最佳檢測閾值范圍內,證明了本算法的有效性。
本文根據表1中的數據繪制了如圖4-1和圖4-2的閾值分布范圍直方圖。對比圖中數據可以發(fā)現,當光強變弱時,最佳檢測閾值范圍呈下降趨勢,同時最佳閾值的區(qū)間長度也隨著光強變弱而逐漸縮短。因此,如果光強過弱,將會導致檢測效果不穩(wěn)定、誤檢率高等問題。為解決這些問題,本文建議使用者在檢測過程中適當提高工作環(huán)境的光照強度。
另外,通過觀察閾值分布直方圖可以發(fā)現,在最強光強下,高亮故障的最佳檢測閾值范圍為190-200,陰影故障的最佳檢測范圍為140-150,兩區(qū)間上(下)限差值為50。因此本文在算法中采用50作為高低閾值區(qū)間上(下)限的差值。
5 結語
本文提出了一種管道內基于圖像處理的光強自適應檢測算法并且展示了對實際管道故障進行的檢測實驗。該算法具體包括了一種基于灰度光強比例的閾值自適應算法,基于OpenCV視覺庫,可以有效地適應檢測過程中光照強度條件變化產生的影響,計算出適合該光照條件下的最佳檢測閾值范圍。實驗結果表明,本文提出的算法可以準確地選取最適合當前光強條件的檢測閾值,這為后續(xù)管道故障圖像處理工作打下識別和提取方面的基礎。
參考文獻
[1]韓文花.油氣管道漏磁信號去噪及缺陷重構算法的研究[D].上海:上海交通大學,2006:2-5.
[2]廖志華,甘志梅,吳園.管道焊縫檢測視覺圖像處理的研究[J].工藝與新技術,2011,40(6):33-36.
[3]林蘭極,王庫,陳立國.給予DSP的石油管道焊縫檢測機器人系統(tǒng)[J].電子測量技術,微處理器應用,2007,30(1):144-146.
[4]ANATOLY D, SERGEY K. The metal magnetic memory method application for monitoring of damage development in steel pipes and welded joints specimens[J].Weld World, 2013,57(12):123-136.
[5]NAVA B L,SOTO C J A.Development of an ulteasonic thickness measurement equipment[M].IEEE Signal Processing Magezine,2002,49(6):848-851.
[6]陳之堯.以OpenCV為基礎的圖像預處理技術在無人機視頻的應用[J].電子技術與軟件工程,2018,(16):63-64.
[7]楊少令,刁燕,羅華,徐天雄.一種改進的Canny圖像分割算法[J].計算機與現代化,2018,(08):57-60.