張鵬展1,劉堂友1,,樊 帥2
?。?.東華大學(xué) 信息學(xué)院,上海 201620,;
2.遼寧石油化工大學(xué) 信息與控制工程學(xué)院,,遼寧 撫順 113001)
摘 要: 高壓傳輸線的智能檢測(cè)一直以來(lái)都是計(jì)算機(jī)視覺(jué)識(shí)別的熱點(diǎn)。本文打破傳統(tǒng)的人工檢測(cè)方式,,利用無(wú)人機(jī)搭載開(kāi)源硬件Arduino和相機(jī)模塊采集高壓傳輸線的數(shù)據(jù),,對(duì)采集回來(lái)的高壓傳輸線圖片用OpenCV和C++進(jìn)行加載、灰度處理,、二值化,、邊緣檢測(cè)、直線檢測(cè),、設(shè)計(jì)函數(shù)等系列處理,,最終得到一幅只有傳輸線邊界的直線檢測(cè)圖像,同時(shí)過(guò)濾掉復(fù)雜圖背景,,從而達(dá)到良好的識(shí)別效果,。
關(guān)鍵詞: 傳輸線檢測(cè);計(jì)算機(jī)視覺(jué)識(shí)別,;圖像處理
0 引言
隨著市場(chǎng)競(jìng)爭(zhēng)愈來(lái)愈激烈,,以及人民生活水平的提高,架空線路也在全國(guó)各地迅速崛起,,雖然擺脫了以往的斷電,、缺電情況,但同時(shí)也給電力工作人員帶來(lái)了不小的麻煩,,每年都要到人跡罕至的地方攀巖檢測(cè)傳輸線的損壞情況,,不僅增大了工作人員的負(fù)擔(dān),也帶來(lái)了一定的戶外風(fēng)險(xiǎn),?;谶@種情況,,人們更熱衷于一種簡(jiǎn)便的方式來(lái)實(shí)現(xiàn)高壓傳輸線的智能檢測(cè),不再是利用人工自駕飛機(jī)的檢測(cè)方式,,而是利用無(wú)人機(jī)導(dǎo)航巡檢,,通過(guò)識(shí)別出來(lái)的高壓傳輸線與x軸的角度和圖像中心像素點(diǎn)到傳輸線的距離,從而控制無(wú)人飛行航向來(lái)完成巡檢,,大大降低了電力員工作量,,提高了安全性,并更加的智能化,。
1 設(shè)計(jì)流程圖
基于OpenCV的高壓傳輸線位置檢測(cè)流程圖如圖1所示,。
1.1 加載圖像
利用OpenCV里的Mat來(lái)加載一幅圖像。它是一個(gè)類,,表示一個(gè)n維的密集數(shù)值單通道或多通道數(shù)組[1-2],。簡(jiǎn)單來(lái)說(shuō)可以把它理解成一個(gè)存放數(shù)據(jù)的矩陣,可以用來(lái)存儲(chǔ)實(shí)數(shù)或復(fù)數(shù)值的向量和矩陣,、灰度或彩色圖像,。Mat數(shù)組布局是由陣列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,那么二維數(shù)組就可以寫成如下形式:
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 灰度處理
加載完圖像之后,,下一步要做的就是進(jìn)行灰度變換。圖像處理著重強(qiáng)調(diào)的是在圖像之間進(jìn)行各種變換,,對(duì)圖像進(jìn)行加工以改善圖像的視覺(jué)效果,。圖像灰度處理中,增強(qiáng)操作,、直方圖及圖像間的變換是實(shí)現(xiàn)點(diǎn)操作的增強(qiáng)方式,,又稱灰度變換[3]。通過(guò)改變圖像的灰度來(lái)達(dá)到一種很好的視覺(jué)效果,,這是圖像增強(qiáng)的一種手段,。灰度圖像的目的是為了改善畫質(zhì),使得圖像顯示效果更加清晰,,有選擇地突出圖像中感興趣的特征或者抑制圖像中某些不顯著的特征[4],。在計(jì)算機(jī)圖形學(xué)與圖像處理中,數(shù)字圖像的灰度是進(jìn)行圖像識(shí)別與處理的基礎(chǔ),,掌握一定的灰度處理技術(shù)對(duì)提升自己的計(jì)算機(jī)應(yīng)用能力有很大幫助,。
RGB色彩空間中,根據(jù)色彩與深度的映射關(guān)系主要有真彩色,、偽彩色和調(diào)配色三種,。真彩色是指在組成一幅圖像的像素值中有R,G,,B三個(gè)基色分量,每個(gè)基色分量直接決定圖像的基色強(qiáng)度[5],。偽彩色圖像的每個(gè)像素值實(shí)際上是一個(gè)索引值或代碼,,此代碼值作為色彩查找表中CLUT某一項(xiàng)的入口地址,根據(jù)地址查找R,,G,,B的強(qiáng)度值。調(diào)配色的獲取是通過(guò)每個(gè)像素點(diǎn)的R,,G,,B分量作為單獨(dú)的索引值進(jìn)行變換,然后經(jīng)相應(yīng)的色彩變換表找出各自的基色強(qiáng)度,,是用變換后的R,,G,B強(qiáng)度值產(chǎn)生的色彩,。
灰度是描述灰度圖像最直接的特征,。指的是黑白圖像中的像素點(diǎn)的深度,通常為0~255,,黑色為0,,白色為255,因此黑白圖像也稱灰度圖像[5],。0表示純黑色,,255表示純白色,中間的顏色表示過(guò)渡色,,即可以表示不同的灰度等級(jí),。
cvtColor(const CvArr*src,CvArr*dst,,int code)
此函數(shù)為OpenCV里面的顏色空間轉(zhuǎn)換函數(shù),,可以實(shí)現(xiàn)RGB向HSV和HIS等顏色空間轉(zhuǎn)換,當(dāng)然也可以轉(zhuǎn)換為灰度圖像。
cvtColor()函數(shù)的參數(shù)說(shuō)明如下:
第一個(gè)參數(shù)為原始圖像src,,輸入的8 bit,、16 bit或32 bit單倍精度浮點(diǎn)數(shù)影像。
第二個(gè)參數(shù)為目標(biāo)圖像dst,,輸出的8 bit,、16 bit或32 bit單倍精度浮點(diǎn)數(shù)影像。
第三個(gè)參數(shù)為轉(zhuǎn)換模式,,比如CV_BGR2GRAY表示彩色圖像轉(zhuǎn)化為灰度圖像,。
1.3 二值化
二值圖像指只有兩個(gè)灰度級(jí)的圖像。它具有處理速度快,、存儲(chǔ)空間小等優(yōu)點(diǎn),,既保留了原始圖像的主要特征,也使圖像的信息量得到了極大壓縮,,更重要的是在圖像經(jīng)過(guò)二值化后,,可以進(jìn)一步進(jìn)行處理得到一些幾何特征及其他更重要的特征[6]。二值化也是圖像處理的一項(xiàng)基本技術(shù),,是整個(gè)圖像處理過(guò)程的預(yù)處理階段,,如果二值化過(guò)程中閾值取得不當(dāng)會(huì)丟失圖像的重要信息。二值化處理主要包括全局閾值法和局部閾值法,。
全局閾值法指的是整個(gè)二值化處理過(guò)程中只使用一個(gè)閾值T,。它將圖像的每個(gè)像素值與其進(jìn)行比較,大于T則取前景色,,否則為背景色,。局部閾值法是根據(jù)像素的鄰域塊的像素值分布來(lái)確定該像素位置上的二值化閾值[7],例如若圖像光照不均勻,、噪聲突發(fā),、背景灰度變換較大時(shí),采用局部閾值法,,實(shí)現(xiàn)圖像的局部自適應(yīng)閾值[8],。
cvThreshold(const CvArr*src,CvArr*dst,,double threshold,,double max_value,int threshold_type)
cvThreshold是OpenCV的庫(kù)函數(shù),,其典型應(yīng)用就是對(duì)灰度圖像進(jìn)行閾值操作從而得到二值圖像,。
cvThreshold()函數(shù)的參數(shù)說(shuō)明如下:
第一和第二個(gè)參數(shù)同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 邊緣檢測(cè)
圖像的邊緣是指圖像局部區(qū)域亮度變化較大的部分,,此區(qū)域的灰度值在很小的緩沖區(qū)內(nèi)可以變換到另一個(gè)相差較大的灰度值,,圖像的邊緣包含了圖像的大部分信息[9],由此對(duì)圖像的邊緣檢測(cè)顯得尤為重要,。
Canny算法同拉普拉斯算法的不同之處在于在Canny算法中,,首先在x,y方向求一階導(dǎo)數(shù),然后組成四個(gè)方向的導(dǎo)數(shù),,這些方向?qū)?shù)達(dá)到局部最大值的點(diǎn)就是組成圖像邊緣的候選點(diǎn)[10],。顯然,此算法最大的一個(gè)優(yōu)點(diǎn)在于能將獨(dú)立邊的候選像素拼裝成輪廓,,較高的亮度梯度比較有可能是邊緣,,但是沒(méi)有一個(gè)確切的值來(lái)限定多大的亮度梯度是邊緣多大又不是,所以Canny使用了滯后閾值,。滯后閾值需要兩個(gè)閾值,,即上限閾值與下限閾值。如果一個(gè)像素的梯度大于上限閾值,,則被認(rèn)為是邊緣像素,,保留下來(lái),若梯度低于下限閾值則被丟棄,,介于二者之間,,只有當(dāng)與其高于上限閾值的像素緊緊相連時(shí)才會(huì)被選中[11]。Canny推薦的上下限閾值比為2:1到3:1之間,,此函數(shù)運(yùn)用時(shí)需要輸入的圖像為灰度圖像,,輸出也為灰度圖,實(shí)際上為布爾圖像,。
cvCanny(const CvArr*img,,CvArr*edges,double lowThresh,,double highThresh,,int apertureSize=3)
小的閾值用來(lái)控制邊緣連接,大的閾值用來(lái)控制邊緣分割,,apertureSize為內(nèi)核算子,。主要分為四個(gè)步驟:
(1)濾波,。邊緣檢測(cè)基于導(dǎo)數(shù)計(jì)算,,但受噪聲影響,所以去噪是很必要的,。
?。?)增強(qiáng)。增強(qiáng)算法把鄰域中灰度變化突出的點(diǎn)顯現(xiàn)出來(lái),,通常通過(guò)計(jì)算梯度幅值完成,。
(3)檢測(cè),。最簡(jiǎn)單的邊緣檢測(cè)是梯度幅值閾值判斷,。
?。?)定位。精確確定邊緣位置,。
1.5 直線檢測(cè)
霍夫變換是圖像處理中的一種特征提取方法,。它經(jīng)過(guò)投票算法檢測(cè)具有特征形狀的物體,此過(guò)程是在一個(gè)參數(shù)空間中通過(guò)累計(jì)計(jì)算結(jié)果的局部最大值而得到符合該特定性狀的集合作為霍夫變換的結(jié)果,?;舴蜃儞Q是一種在圖像中尋找直線、圓和其他簡(jiǎn)單幾何形狀的方法,,原始的霍夫變換是一種直線變換,,簡(jiǎn)單來(lái)說(shuō)就是在二值圖像中尋找直線的一種相對(duì)較快的算法,變換后可以推廣到其他普通情況,,而不僅僅是直線,。它的基本理論是基于二值圖像中任何像素點(diǎn)都可能是一些候選直線集合的一部分[12],它有標(biāo)準(zhǔn)和累加概率霍夫變換兩種,,只是參數(shù)不同,。下面介紹標(biāo)準(zhǔn)霍夫變換:
cvHoughLines(CvArr*img,lines,,double rho,,double theta,int threshold)
經(jīng)典霍夫變換用來(lái)檢測(cè)直線,,lines是一個(gè)向量,,用來(lái)存放rho和theta,通過(guò)設(shè)定的閾值來(lái)確定返回的線段,,大于該閾值則返回一條線段。
1.6 設(shè)計(jì)算法
經(jīng)過(guò)霍夫變換可以得到傳輸線與圖片上邊沿的夾角theta與rho(OpenCV中的圖像原點(diǎn)在左上頂點(diǎn)),,接著就要計(jì)算出圖像的原點(diǎn)到高壓傳輸線的距離d,,傳統(tǒng)意義上會(huì)先計(jì)算出傳輸線的直線方程,然后用公式點(diǎn)到直線的距離求得結(jié)果,,但要分情況討論,,因?yàn)閭鬏斁€與x抽(圖像的上邊沿)的夾角不確定,大致要分四種情況,,顯然比較麻煩,,也不利于進(jìn)行檢驗(yàn),最好的辦法是只用一種格式就把所有的情況都包括進(jìn)來(lái),,熟練運(yùn)用平面幾何的向量與復(fù)數(shù)之間的轉(zhuǎn)換來(lái)實(shí)現(xiàn)算法,。
假設(shè)下圖2的中心點(diǎn)像素坐標(biāo)為C(u0,v0),,左邊灰色高壓傳輸線上有任意兩個(gè)像素點(diǎn)即P和Q,,Q是距離P一個(gè)單位的像素點(diǎn),,則P點(diǎn)坐標(biāo)可以表示為(ρcos, ρsin),,那么Q點(diǎn)坐標(biāo)為((ρcos+iρsin),,(-icos+sin)),有向線段CP,、CQ分別用向量a,、b表示,最后把復(fù)數(shù)轉(zhuǎn)換為向量表示,,即:
1.7 顯示結(jié)果
圖2是房屋圖片原圖,,上面有兩根高壓傳輸線,左邊一根灰色的為舊傳輸線,,右邊白色的為新傳輸線,,圖3為圖2基礎(chǔ)上的二值化結(jié)果,圖4為圖3基礎(chǔ)上的房屋邊緣檢測(cè)結(jié)果圖,,圖5是提取高壓傳輸線的邊緣圖,,同時(shí)過(guò)濾掉了復(fù)雜的房屋背景,只顯示傳輸線的邊緣直線,,圖6顯示了PC機(jī)的運(yùn)行結(jié)果,,包括整個(gè)過(guò)程的處理時(shí)間,圖片中心像素點(diǎn)到每一根邊緣直線的距離以及該邊緣直線與x抽的夾角,,從而順利地控制無(wú)人機(jī)的飛行航向,,完成高壓傳輸線的檢測(cè)。
2 總結(jié)
通過(guò)上面的方法可以初步得到預(yù)期的結(jié)果,,但算法并不是很完善,,還需要改進(jìn),比如在設(shè)定閾值方面可以進(jìn)一步做得更優(yōu)化,,不用手動(dòng)去調(diào)閾值,,而是通過(guò)設(shè)置自動(dòng)選取閾值來(lái)達(dá)到更好的預(yù)期結(jié)果。
參考文獻(xiàn)
[1] 方玫,,喻擎蒼,,李華強(qiáng).C++Builder下基于OpenCV的數(shù)字圖像處理[J].計(jì)算機(jī)工程與設(shè)計(jì),2008(4):43-46.
[2] 劉潔,,馮貴玉,,張汗靈.一種圖像處理和計(jì)算機(jī)視覺(jué)的開(kāi)發(fā)工具[J].計(jì)算機(jī)仿真,2006(11):56-59.
[3] 黎松,,平西建,,丁益洪.開(kāi)放源代碼的計(jì)算機(jī)視覺(jué)類庫(kù)OpenCV的應(yīng)用[J].計(jì)算機(jī)應(yīng)用與軟件,2005(8):38-40.
[4] 陰法明.基于OpenCV的圖像處理[J].科技信息,,2009(32):67-70.
[5] 陳毅.基于灰度圖像和彩色圖像的瑕疵膠囊識(shí)別算法研究[D].武漢:武漢科技大學(xué),,2014.
[6] 馬超玉.光照不均勻條件下圖像增強(qiáng)算法研究[D].長(zhǎng)春:長(zhǎng)春理工大學(xué),,2014.
[7] 吳辰夏.二值化圖像特征及其應(yīng)用[D].杭州:浙江大學(xué),2013.
[8] 李書茉.非均勻光照下文本圖像二值化方法的研究[D].秦皇島:燕山大學(xué),,2012.
[9] 林化武,,王慶麟,陳心海.一種新的圖象邊緣檢測(cè)算法[J].山東工業(yè)大學(xué)學(xué)報(bào),,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].沈陽(yáng):遼寧工程技術(shù)大學(xué),,2009.