《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于OpenCV的高壓傳輸線位置檢測
基于OpenCV的高壓傳輸線位置檢測
2015年微型機與應用第11期
張鵬展1,劉堂友1,樊 帥2
(1.東華大學 信息學院,上海 201620; 2.遼寧石油化工大學 信息與控制工程學院,遼寧 撫順 113001)
摘要: 高壓傳輸線的智能檢測一直以來都是計算機視覺識別的熱點。本文打破傳統(tǒng)的人工檢測方式,利用無人機搭載開源硬件Arduino和相機模塊采集高壓傳輸線的數據,對采集回來的高壓傳輸線圖片用OpenCV和C++進行加載、灰度處理、二值化、邊緣檢測、直線檢測、設計函數等系列處理,最終得到一幅只有傳輸線邊界的直線檢測圖像,同時過濾掉復雜圖背景,從而達到良好的識別效果。
Abstract:
Key words :

  張鵬展1,劉堂友1,樊 帥2

 ?。?.東華大學 信息學院,上海 201620;

  2.遼寧石油化工大學 信息與控制工程學院,遼寧 撫順 113001)

  摘  要: 高壓傳輸線的智能檢測一直以來都是計算機視覺識別的熱點。本文打破傳統(tǒng)的人工檢測方式,利用無人機搭載開源硬件Arduino和相機模塊采集高壓傳輸線的數據,對采集回來的高壓傳輸線圖片用OpenCV和C++進行加載、灰度處理、二值化、邊緣檢測、直線檢測、設計函數等系列處理,最終得到一幅只有傳輸線邊界的直線檢測圖像,同時過濾掉復雜圖背景,從而達到良好的識別效果。

  關鍵詞傳輸線檢測;計算機視覺識別;圖像處理

0 引言

  隨著市場競爭愈來愈激烈,以及人民生活水平的提高,架空線路也在全國各地迅速崛起,雖然擺脫了以往的斷電、缺電情況,但同時也給電力工作人員帶來了不小的麻煩,每年都要到人跡罕至的地方攀巖檢測傳輸線的損壞情況,不僅增大了工作人員的負擔,也帶來了一定的戶外風險?;谶@種情況,人們更熱衷于一種簡便的方式來實現高壓傳輸線的智能檢測,不再是利用人工自駕飛機的檢測方式,而是利用無人機導航巡檢,通過識別出來的高壓傳輸線與x軸的角度和圖像中心像素點到傳輸線的距離,從而控制無人飛行航向來完成巡檢,大大降低了電力員工作量,提高了安全性,并更加的智能化。

1 設計流程圖

  基于OpenCV的高壓傳輸線位置檢測流程圖如圖1所示。

001.jpg

  1.1 加載圖像

  利用OpenCV里的Mat來加載一幅圖像。它是一個類,表示一個n維的密集數值單通道或多通道數組[1-2]。簡單來說可以把它理解成一個存放數據的矩陣,可以用來存儲實數或復數值的向量和矩陣、灰度或彩色圖像。Mat數組布局是由陣列M.step[]定義的,元素的地址(i0,…,iM.dim-1)(其中0<ik<M.size[k]),可以表示為:addr(Mi0;…;iM.dims-1)=M.data+M.step[0]i0+M.step[1]i1+…+M.step[M:dims-1]iM:dims-1,那么二維數組就可以寫成如下形式:

  addr(Mi,j)=M.data+M.step[0]i+M.step[1]j[2]

  Mat加載一幅圖像形式如下:

  Mat in_img=cvLoadImage(char*filename,int flags=CV_LOAD_IMAGE_COLOR)

  其中,filename:圖像所在的路徑;flags如下:

  #define CV_LOAD_IMAGE_COLOR1(彩色三通道圖像)

  #define CV_LOAD_IMAGE_GRAYSCALE 0(灰色單通道圖像)

  #define CV_LOAD_IMAGE_UNCHANGED-1(圖像顏色不變)

  1.2 灰度處理

  加載完圖像之后,下一步要做的就是進行灰度變換。圖像處理著重強調的是在圖像之間進行各種變換,對圖像進行加工以改善圖像的視覺效果。圖像灰度處理中,增強操作、直方圖及圖像間的變換是實現點操作的增強方式,又稱灰度變換[3]。通過改變圖像的灰度來達到一種很好的視覺效果,這是圖像增強的一種手段?;叶葓D像的目的是為了改善畫質,使得圖像顯示效果更加清晰,有選擇地突出圖像中感興趣的特征或者抑制圖像中某些不顯著的特征[4]。在計算機圖形學與圖像處理中,數字圖像的灰度是進行圖像識別與處理的基礎,掌握一定的灰度處理技術對提升自己的計算機應用能力有很大幫助。

  RGB色彩空間中,根據色彩與深度的映射關系主要有真彩色、偽彩色和調配色三種。真彩色是指在組成一幅圖像的像素值中有R,G,B三個基色分量,每個基色分量直接決定圖像的基色強度[5]。偽彩色圖像的每個像素值實際上是一個索引值或代碼,此代碼值作為色彩查找表中CLUT某一項的入口地址,根據地址查找R,G,B的強度值。調配色的獲取是通過每個像素點的R,G,B分量作為單獨的索引值進行變換,然后經相應的色彩變換表找出各自的基色強度,是用變換后的R,G,B強度值產生的色彩。

  灰度是描述灰度圖像最直接的特征。指的是黑白圖像中的像素點的深度,通常為0~255,黑色為0,白色為255,因此黑白圖像也稱灰度圖像[5]。0表示純黑色,255表示純白色,中間的顏色表示過渡色,即可以表示不同的灰度等級。

  cvtColor(const CvArr*src,CvArr*dst,int code)

  此函數為OpenCV里面的顏色空間轉換函數,可以實現RGB向HSV和HIS等顏色空間轉換,當然也可以轉換為灰度圖像。

  cvtColor()函數的參數說明如下:

  第一個參數為原始圖像src,輸入的8 bit、16 bit或32 bit單倍精度浮點數影像。

  第二個參數為目標圖像dst,輸出的8 bit、16 bit或32 bit單倍精度浮點數影像。

  第三個參數為轉換模式,比如CV_BGR2GRAY表示彩色圖像轉化為灰度圖像。

  1.3 二值化

  二值圖像指只有兩個灰度級的圖像。它具有處理速度快、存儲空間小等優(yōu)點,既保留了原始圖像的主要特征,也使圖像的信息量得到了極大壓縮,更重要的是在圖像經過二值化后,可以進一步進行處理得到一些幾何特征及其他更重要的特征[6]。二值化也是圖像處理的一項基本技術,是整個圖像處理過程的預處理階段,如果二值化過程中閾值取得不當會丟失圖像的重要信息。二值化處理主要包括全局閾值法和局部閾值法。

  全局閾值法指的是整個二值化處理過程中只使用一個閾值T。它將圖像的每個像素值與其進行比較,大于T則取前景色,否則為背景色。局部閾值法是根據像素的鄰域塊的像素值分布來確定該像素位置上的二值化閾值[7],例如若圖像光照不均勻、噪聲突發(fā)、背景灰度變換較大時,采用局部閾值法,實現圖像的局部自適應閾值[8]。

  cvThreshold(const CvArr*src,CvArr*dst,double threshold,double max_value,int threshold_type)

  cvThreshold是OpenCV的庫函數,其典型應用就是對灰度圖像進行閾值操作從而得到二值圖像。

  cvThreshold()函數的參數說明如下:

  第一和第二個參數同cvtColor()。

  threshold:閾值。

  max_value:CV_THRESH_BINARY和CV_THRESH_BINARY_INV的最大值。

  threshold_type:閾值類型。

  threshold_type=CV_THRESH_BINARY

  若src(x,y)>threshold,則dst(x,y)=max_value;否則dst(x,y)=0。

  threshold_type=CV_THRESH_BINARY_INV

  若src(x,y)>threshold,則dst(x,y)=0;否則dst(x,y)=max_value。

  threshold_type=CV_THRESH_TRUNC

  若src(x,y)>threshold,則dst(x,y)=threshold;否則dst(x,y)=src(x,y)。

  threshold_type=CV_THRESH_TOZERO

  若src(x,y)>threshold,則dst(x,y)=src(x,y);否則dst(x,y)=0。

  threshold_type=CV_THRESH_TOZERO_INV

  若src(x,y)>threshold,則dst(x,y)=0;否則dst(x,y)=src(x,y)。

  1.4 邊緣檢測

  圖像的邊緣是指圖像局部區(qū)域亮度變化較大的部分,此區(qū)域的灰度值在很小的緩沖區(qū)內可以變換到另一個相差較大的灰度值,圖像的邊緣包含了圖像的大部分信息[9],由此對圖像的邊緣檢測顯得尤為重要。

  Canny算法同拉普拉斯算法的不同之處在于在Canny算法中,首先在x,y方向求一階導數,然后組成四個方向的導數,這些方向導數達到局部最大值的點就是組成圖像邊緣的候選點[10]。顯然,此算法最大的一個優(yōu)點在于能將獨立邊的候選像素拼裝成輪廓,較高的亮度梯度比較有可能是邊緣,但是沒有一個確切的值來限定多大的亮度梯度是邊緣多大又不是,所以Canny使用了滯后閾值。滯后閾值需要兩個閾值,即上限閾值與下限閾值。如果一個像素的梯度大于上限閾值,則被認為是邊緣像素,保留下來,若梯度低于下限閾值則被丟棄,介于二者之間,只有當與其高于上限閾值的像素緊緊相連時才會被選中[11]。Canny推薦的上下限閾值比為2:1到3:1之間,此函數運用時需要輸入的圖像為灰度圖像,輸出也為灰度圖,實際上為布爾圖像。

  cvCanny(const CvArr*img,CvArr*edges,double lowThresh,double highThresh,int apertureSize=3)

  小的閾值用來控制邊緣連接,大的閾值用來控制邊緣分割,apertureSize為內核算子。主要分為四個步驟:

 ?。?)濾波。邊緣檢測基于導數計算,但受噪聲影響,所以去噪是很必要的。

  (2)增強。增強算法把鄰域中灰度變化突出的點顯現出來,通常通過計算梯度幅值完成。

 ?。?)檢測。最簡單的邊緣檢測是梯度幅值閾值判斷。

 ?。?)定位。精確確定邊緣位置。

  1.5 直線檢測

  霍夫變換是圖像處理中的一種特征提取方法。它經過投票算法檢測具有特征形狀的物體,此過程是在一個參數空間中通過累計計算結果的局部最大值而得到符合該特定性狀的集合作為霍夫變換的結果。霍夫變換是一種在圖像中尋找直線、圓和其他簡單幾何形狀的方法,原始的霍夫變換是一種直線變換,簡單來說就是在二值圖像中尋找直線的一種相對較快的算法,變換后可以推廣到其他普通情況,而不僅僅是直線。它的基本理論是基于二值圖像中任何像素點都可能是一些候選直線集合的一部分[12],它有標準和累加概率霍夫變換兩種,只是參數不同。下面介紹標準霍夫變換:

  cvHoughLines(CvArr*img,lines,double rho,double theta,int threshold)

  經典霍夫變換用來檢測直線,lines是一個向量,用來存放rho和theta,通過設定的閾值來確定返回的線段,大于該閾值則返回一條線段。

  1.6 設計算法

  經過霍夫變換可以得到傳輸線與圖片上邊沿的夾角theta與rho(OpenCV中的圖像原點在左上頂點),接著就要計算出圖像的原點到高壓傳輸線的距離d,傳統(tǒng)意義上會先計算出傳輸線的直線方程,然后用公式點到直線的距離求得結果,但要分情況討論,因為傳輸線與x抽(圖像的上邊沿)的夾角不確定,大致要分四種情況,顯然比較麻煩,也不利于進行檢驗,最好的辦法是只用一種格式就把所有的情況都包括進來,熟練運用平面幾何的向量與復數之間的轉換來實現算法。

  假設下圖2的中心點像素坐標為C(u0,v0),左邊灰色高壓傳輸線上有任意兩個像素點即P和Q,Q是距離P一個單位的像素點,則P點坐標可以表示為(ρcos_`E0`_DNE%H7451_B`}Q$UH.jpg, ρsin_`E0`_DNE%H7451_B`}Q$UH.jpg),那么Q點坐標為((ρcos_`E0`_DNE%H7451_B`}Q$UH.jpg+iρsin_`E0`_DNE%H7451_B`}Q$UH.jpg),(-icos_`E0`_DNE%H7451_B`}Q$UH.jpg+sin_`E0`_DNE%H7451_B`}Q$UH.jpg)),有向線段CP、CQ分別用向量a、b表示,最后把復數轉換為向量表示,即:

  E~KSF8F(TN~VIXLAL$L4Q{Y.png

  1.7 顯示結果

002.jpg

  圖2是房屋圖片原圖,上面有兩根高壓傳輸線,左邊一根灰色的為舊傳輸線,右邊白色的為新傳輸線,圖3為圖2基礎上的二值化結果,圖4為圖3基礎上的房屋邊緣檢測結果圖,圖5是提取高壓傳輸線的邊緣圖,同時過濾掉了復雜的房屋背景,只顯示傳輸線的邊緣直線,圖6顯示了PC機的運行結果,包括整個過程的處理時間,圖片中心像素點到每一根邊緣直線的距離以及該邊緣直線與x抽的夾角,從而順利地控制無人機的飛行航向,完成高壓傳輸線的檢測。

2 總結

  通過上面的方法可以初步得到預期的結果,但算法并不是很完善,還需要改進,比如在設定閾值方面可以進一步做得更優(yōu)化,不用手動去調閾值,而是通過設置自動選取閾值來達到更好的預期結果。

參考文獻

  [1] 方玫,喻擎蒼,李華強.C++Builder下基于OpenCV的數字圖像處理[J].計算機工程與設計,2008(4):43-46.

  [2] 劉潔,馮貴玉,張汗靈.一種圖像處理和計算機視覺的開發(fā)工具[J].計算機仿真,2006(11):56-59.

  [3] 黎松,平西建,丁益洪.開放源代碼的計算機視覺類庫OpenCV的應用[J].計算機應用與軟件,2005(8):38-40.

  [4] 陰法明.基于OpenCV的圖像處理[J].科技信息,2009(32):67-70.

  [5] 陳毅.基于灰度圖像和彩色圖像的瑕疵膠囊識別算法研究[D].武漢:武漢科技大學,2014.

  [6] 馬超玉.光照不均勻條件下圖像增強算法研究[D].長春:長春理工大學,2014.

  [7] 吳辰夏.二值化圖像特征及其應用[D].杭州:浙江大學,2013.

  [8] 李書茉.非均勻光照下文本圖像二值化方法的研究[D].秦皇島:燕山大學,2012.

  [9] 林化武,王慶麟,陳心海.一種新的圖象邊緣檢測算法[J].山東工業(yè)大學學報,1990(3):51-53.

  [10] CANNY J.A computational approach to edge detection[J]. IEEE Transactions on Pattern Analysis and Ma-chine Intelligence, 1986 (12):47-49.

  [11] Wang Zhiqian, JEZEKIEL B A. Detection and seg-mentation of generic shapes based on affine modeling energy eigenspace[J]. IEEE Transactions on Im-age Processing,2001(27):35-39.

  [12] 劉春閣.基于Hough變換的直線提取與匹配[D].沈陽:遼寧工程技術大學,2009.


此內容為AET網站原創(chuàng),未經授權禁止轉載。