国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于OpenCV的目標(biāo)物體顏色及輪廓的識別方法

2014-12-18 18:36:12侯賓張文志戴源成田洪強(qiáng)
現(xiàn)代電子技術(shù) 2014年24期

侯賓+張文志+戴源成+田洪強(qiáng)

摘 ?要: 針對機(jī)器人視覺中對目標(biāo)物體的拾取問題,提出一種基于OpenCV函數(shù)對從攝像頭輸入的目標(biāo)物體的顏色及輪廓進(jìn)行有效識別的方法。首先利用攝像頭讀取目標(biāo)物體及周圍環(huán)境,經(jīng)一系列圖像處理后進(jìn)行目標(biāo)物體的顏色識別,在此基礎(chǔ)上進(jìn)行Canny邊緣檢測并查找輪廓,最后將輪廓顯示。結(jié)果表明,該實(shí)驗(yàn)程序可以很好地完成對目標(biāo)物體的顏色及輪廓提取,且有效地避免了目標(biāo)物體周圍相近顏色的干擾。

關(guān)鍵詞: 機(jī)器人視覺; 顏色識別; 輪廓識別; Canny邊緣檢測

中圖分類號: TN919?34; TP391 ? ? ? ? ? ? ? ?文獻(xiàn)標(biāo)識碼: A ? ? ? ? ? ? ? ? ? ? ?文章編號: 1004?373X(2014)24?0076?04

Method of objects color and contour recognition based on OpenCV

HOU Bin, ZHANG Wen?zhi, DAI Yuan?cheng, TIAN Hong?qiang

(Inner Mongolia University of Technology, Huhhot 010051, China)

Abstract: Aiming at the problem of recognizing the target object in robot visual, a way based on OpenCV is proposed, which can effectively recognize the color and the contour of ?the objects from the camera. The target object and its surrounding environment are read out by camera, and then the color of the object is recognized after a series of image processing. On the basis of this, the Canny edge detection is carried on, and the contour is determined and displayed. The results show that the expe?

rimental procedure can complete the extraction of target objects' color and contour perfectly, and avoid the interference of similar color around objects effectively.

Keywords: robot vision; color recognition; contour recognition; Canny edge detection

0 ?引 ?言

機(jī)器人視覺是機(jī)器人感知外部世界的重要媒介,也是未來機(jī)器人傳感器發(fā)展的主流方向。機(jī)器人視覺通過視覺傳感器獲取環(huán)境的圖像數(shù)據(jù),并通過軟件進(jìn)行圖像的分析和理解,使機(jī)器人能夠辨識目標(biāo)物體及確定其位置[1]。隨著機(jī)器人技術(shù)的快速發(fā)展及其在工業(yè)、醫(yī)學(xué)、軍事等領(lǐng)域的廣泛應(yīng)用,機(jī)器人視覺技術(shù)取得了快速發(fā)展,對機(jī)器人靈敏感知周圍環(huán)境的能力要求也不斷提高[2]。對目標(biāo)物體的精確識別問題是機(jī)器人視覺中最基本的環(huán)節(jié),而顏色識別和輪廓識別又是進(jìn)行其他深入研究的基礎(chǔ)。目前在這方面的主要應(yīng)用是單一的對顏色或輪廓的提取。

基于上述情況,本文提出了基于OpenCV函數(shù)庫,對攝像頭取景范圍內(nèi)目標(biāo)物體顏色及輪廓共同精確提取的方法。利用OpenCV函數(shù)庫中提供的函數(shù),對目標(biāo)物體首先進(jìn)行各種圖像學(xué)方面的預(yù)處理以使得到的圖像符合實(shí)驗(yàn)要求,然后利用閾值調(diào)節(jié)進(jìn)行顏色識別,最后在顏色識別的基礎(chǔ)上進(jìn)行邊緣檢測及輪廓識別。

1 ?OpenCV簡介

OpenCV是由Intel公司資助的開源計(jì)算機(jī)視覺庫,它由一系列C函數(shù)和少量C ++類所組成,可實(shí)現(xiàn)圖像處理和計(jì)算機(jī)視覺方面的很多通用算法,例如特征檢測與跟蹤、運(yùn)動分析、目標(biāo)分割與識別以及3D重建等[3?4]。由于OpenCV的源代碼是完全開放的,而且源代碼的編寫簡潔而又高效,所以近年來在國內(nèi)外的圖像處理相關(guān)領(lǐng)域中被廣泛地使用,成為一種流行的圖像處理函數(shù)庫。本實(shí)驗(yàn)是在Windows XP系統(tǒng)下基于OpenCV 1.0版本及VC++ 6.0環(huán)境下實(shí)現(xiàn)的。

2 ?顏色空間的選取

顏色空間的用途是在某些標(biāo)準(zhǔn)下用通常可接受的方式對彩色加以說明。常用的顏色空間有RGB,CMY,HSV,HSI等。本文采用的顏色空間為RGB和HSV[5]。

RGB(紅、綠、藍(lán))如圖1所示,可將R,G,B看成一個(gè)三維的坐標(biāo)系,其中每一個(gè)坐標(biāo)點(diǎn)都代表了一種顏色。HSV顏色空間,如圖2所示。Hue表示的是顏色,通常使用一個(gè)帶有角度的圓形表示。Saturation表示的是飽和度,在圓心處的取值是0,表示顏色很淡,沿著圓的半徑方向增大顏色越來越濃。Value表示的是顏色的亮度,在圓錐的底端Value表示的是黑色,在頂端是白色。在實(shí)際中,RGB顏色表示容易受到強(qiáng)光,弱光,陰影等因素的影響。相比之下,HSV空間面對這些光照的變化更穩(wěn)定一些,能很好地反應(yīng)顏色的本質(zhì)。

本實(shí)驗(yàn)采用普通CCD攝像頭讀入RGB顏色,再將RGB顏色轉(zhuǎn)換為HSV顏色。在OpenCV中RGB轉(zhuǎn)換到HSV時(shí),對Hue通道的存儲是用一個(gè)字節(jié)(8位)來表示,取值為[0,255],而Hue的取值[0,360],故需將Hue取值壓縮一倍為[0,180]。其余兩個(gè)量的取值為[0,255]。

3 ?算法實(shí)現(xiàn)

如圖3所示為整個(gè)算法的大體流程圖。

3.1 ?圖像獲取及預(yù)處理

利用普通CCD攝像頭獲取周圍環(huán)境圖像,對獲取的圖像進(jìn)行平滑濾波處理[6]:

(1) 進(jìn)行高斯濾波處理。由于高斯濾波器是一個(gè)低通濾波器故適合進(jìn)行平滑濾波處理,相對于均值濾波它的平滑效果更柔和,而且邊緣保留得也更好。

高斯濾波函數(shù):cvSmooth( src,dst,CV_GAUSSIAN,3,3,0,0)。src為輸入的源圖像,dst為輸出的圖像。由于真實(shí)圖像在空間內(nèi)的像素是緩慢變化的,鄰近點(diǎn)的像素變化不會很明顯,但是隨機(jī)的兩個(gè)點(diǎn)就可能形成很大的像素差(也就是說空間上噪聲點(diǎn)不是相互聯(lián)系的),正是基于這一點(diǎn),高斯濾波在保留信號的條件下減少了噪聲[3]。

(2) 中值濾波器(CV_MEDIAN)將中心像素的正方形鄰域內(nèi)的每個(gè)像素值用中間像素值替換?;谄骄惴ǖ膕imple blur對噪聲圖像特別是有大的孤立點(diǎn)的圖像非常敏感,即使有少量點(diǎn)存在較大差異也會導(dǎo)致平均值的明顯波動,因此中值濾波可以通過選擇中間值避免這些點(diǎn)的影響[7]。

中值濾波函數(shù):cvSmooth( src,dst,CV_MEDIAN,3,3,0,0)。

基于兩種濾波器各自的特點(diǎn)及互補(bǔ)的特性故在程序中同時(shí)使用了這兩種濾波函數(shù)以使得到的圖像更平滑從而減少噪聲影響。

3.2 ?顏色空間轉(zhuǎn)換及圖像通道的分離

由于HSV顏色空間相比于RGB顏色空間的優(yōu)越性,故將RGB轉(zhuǎn)化為HSV。

RGB到HSV的數(shù)學(xué)轉(zhuǎn)換函數(shù)如下所示:

[k1=max{r,g,b},k2=min{r,g,b};v=k1255] (1)

[s=0, ? ? ? ? ? ? ? ? ? ? k1=0(k1-k2)k1, ? ? k1≠0] (2)

[h=(0+g-bk1-k2)×60, ? ? ? s≠0,k1=r(2+b-rk1-k2)×60, ? ? ? s≠0,k1=g(4+r-gk1-k2)×60, ? ? ? s≠0,k1=bundefined, ? ? ? ? ? ? ? ? ? s=0] (3)

式中:r,g,b為RGB顏色空間中紅色、綠色、藍(lán)色3個(gè)分量的值;h,s,v為HSV顏色空間中色度、飽和度、亮度的值。采用下列函數(shù)實(shí)現(xiàn)RGB到HSV轉(zhuǎn)換:cvCvtColor(src,dst,CV_BGR2HSV)。

接下來對得到的HSV圖像進(jìn)行通道分離,分離為3個(gè)單通道圖像,分別為H(色度通道圖像)、S(飽和度通道圖像)及V(亮度通道圖像)。采用如下函數(shù)實(shí)現(xiàn):cvCvtPixToPlane(src,H,S,V,0)。

3.3 ?創(chuàng)建滑動條及閾值化處理

創(chuàng)建滑動條的目的是返回所想要的顏色參數(shù)閾值。本實(shí)驗(yàn)設(shè)定了6個(gè)調(diào)節(jié)參數(shù)LowHue(色度下限值)、HighHue(色度上限值)、LowSaturation(飽和度下限值)、HighSaturation(飽和度上限值)、LowBrightness(亮度下限值)、int HighBrightness(亮度上限值)。cvInRangeS( )函數(shù)用于檢查圖像中像素的灰度是否屬于某一指定范圍。可以通過接收滑動條返回的各個(gè)閾值而得到目標(biāo)顏色的色度、飽和度和亮度單通道圖像。

3.4 ?圖像生成及圖像形態(tài)學(xué)處理

應(yīng)用“cvAnd()”函數(shù)對得到的三個(gè)單通道圖像進(jìn)行按位與運(yùn)算,最后得到檢測目標(biāo)的二值圖像。但是得到的圖像會出現(xiàn)噪聲,故接下來需對得到的圖像進(jìn)行圖像形態(tài)學(xué)處理。

采用膨脹腐蝕的方法進(jìn)行處理得到的圖像,可以明顯去除或減少噪點(diǎn),使得到的目標(biāo)體進(jìn)行最大的連通。膨脹是指將一些圖像與核進(jìn)行卷積,求局部最大值的操作,數(shù)學(xué)公式為:

[dst(x,y)=max{src(x+x′,y+y′)}] ?(4)

[(x′,y′)∈kernel]

式中: dst 為輸出圖像; src 為輸入源圖像; kernel 為用于腐蝕或膨脹的核結(jié)構(gòu)元素,本實(shí)驗(yàn)選取的核大小為3×3像素如圖4所示。

腐蝕是膨脹的反操作。腐蝕操作要計(jì)算核區(qū)域像素的最小值。腐蝕的數(shù)學(xué)函數(shù)為:

[dst(x,y)=min{src(x+x′,y+y′)}] ?(5)

在OpenCV中膨脹采用的函數(shù)是“cvDilate()”,腐蝕函數(shù)為“cvErode()”。

一般來說,膨脹擴(kuò)展了區(qū)域,而腐蝕縮小區(qū)域。膨脹可以填補(bǔ)凹洞,腐蝕能夠消除凸起。腐蝕操作通常是用來消除圖像中的“斑點(diǎn)”噪聲,可以將斑點(diǎn)腐蝕掉,且能確保圖像內(nèi)的較大區(qū)域依然存在。在試圖找到連通分支(即具有相似顏色或強(qiáng)度的像素點(diǎn)的大塊的互相分離的區(qū)域)時(shí)通常使用膨脹操作。故程序中采用先膨脹后腐蝕的方法可以有效的去除被檢測到物體的邊緣噪點(diǎn)及其他噪聲影響[8]。

3.5 ?查找輪廓和繪制輪廓

Canny邊緣檢測法是最常用到的進(jìn)行邊緣檢測的方法,其最重要的特點(diǎn)是試圖將獨(dú)立的候選像素拼裝成輪廓[9]。輪廓的形成是對這些像素運(yùn)用滯后性閾值,本實(shí)驗(yàn)所采用的上下限閾值比為3∶1。Canny 邊緣檢測算法是高斯函數(shù)的一階導(dǎo)數(shù),是對信噪比與定位精度之乘積的最優(yōu)化逼近算子[7]。

Canny 算法(見圖5)首先用二維高斯函數(shù)的一階導(dǎo)數(shù), 對圖像進(jìn)行平滑, 設(shè)二維高斯函數(shù)為:

[G(x,y)=12πσ2exp-x2+y22σ2] (6)

其梯度矢量為:

[?G=?G/?x?G/?y] (7)

通過上式進(jìn)行平滑, 抑制圖像噪聲。其中σ為平滑參數(shù), σ較小時(shí), 邊緣定位精度高, 但圖像平滑作用較弱, 抑制噪聲的能力差;σ較大時(shí)則相反。梯度計(jì)算完成平滑后接下來進(jìn)行“非極大值抑制”細(xì)化梯度幅值矩陣,尋找圖像中的可能邊緣點(diǎn); 最后進(jìn)行“雙門限檢測”則是通過雙閾值遞歸尋找圖像邊緣點(diǎn), 實(shí)現(xiàn)邊緣提取[10]。

實(shí)現(xiàn)Canny檢測的OpenCV函數(shù)是 cvCanny(src,dst,50,150,3),該函數(shù)需要輸入一幅灰度圖,輸出也是一幅灰度圖。進(jìn)行完邊緣檢測緊接著把圖像輸出給查找輪廓函數(shù)即“cvFindContours()”,從二值圖像中檢索輪廓,并返回檢測到的輪廓的個(gè)數(shù)。

利用“cvDrawContours()”函數(shù)在屏幕上繪制檢測到的輪廓。繪制的屏幕圖像可以選擇源圖像。

4 ?實(shí)驗(yàn)結(jié)果及分析

根據(jù)上述算法思想和實(shí)現(xiàn)過程,在Windows XP系統(tǒng)中使用VC++ 6.0和OpenCV 1. 0 來實(shí)現(xiàn)目標(biāo)物體的顏色檢測及輪廓檢測實(shí)驗(yàn)。本文采用的是普通的CCD攝像頭,若采用分辨率更高的攝像頭其執(zhí)行后的效果會更好。

圖6為從攝像頭直接讀取的視頻截圖,未經(jīng)OpenCV的函數(shù)處理。

圖7為對一藍(lán)色目標(biāo)物體進(jìn)行顏色拾取,圖8為所需的色度、飽和度和亮度的閾值。通過調(diào)節(jié)所需的閾值可以有效的拾取目標(biāo)的顏色。目標(biāo)物體與背景的顏色較為相近,用實(shí)驗(yàn)中的算法可以有效的區(qū)分目標(biāo)體與背景。

圖9為在拾取顏色的前提下進(jìn)行輪廓的拾取,可以看出輪廓能夠很精確地識別出,由于是先拾取顏色所以可以將其他顏色的物體區(qū)別開。根據(jù)顏色進(jìn)行輪廓提取可以很好的避免與目標(biāo)物體輪廓相近的物體的影響。

圖10~圖12為在同一視頻流中對另外的紅色物體進(jìn)行拾取,可以看到目標(biāo)物體中的紅色斑點(diǎn)可以很好的拾取出來。最后在顏色拾取的基礎(chǔ)上輪廓也很好的拾取了。背景中的桌面發(fā)黃色,在色度中黃色的閾值范圍緊挨著紅色的閾值范圍,但通過實(shí)驗(yàn)效果可以看出,紅色和黃色完全可以區(qū)分且根本沒有影響。

以上兩組截圖為來自同一攝像頭的視頻流輸入,從實(shí)驗(yàn)結(jié)果截圖可以看出該程序較好的拾取了目標(biāo)物體的顏色及輪廓,對顏色的獲取結(jié)果令人滿意,基本可以去除周圍其他相近顏色的干擾。

5 ?結(jié) ?論

采用OpenCV開發(fā)的目標(biāo)物體顏色及輪廓識別程序可以得到比較理想的實(shí)驗(yàn)效果。采用此設(shè)計(jì)的算法復(fù)雜度并不高,易于實(shí)現(xiàn),加上OpenCV庫設(shè)計(jì)高效率性,可以快捷地實(shí)現(xiàn)圖像的處理。

實(shí)驗(yàn)結(jié)果表明,本文設(shè)計(jì)的目標(biāo)物體顏色及輪廓同時(shí)精確識別的程序具有較高的可行性。這種先通過顏色閾值滑動條調(diào)整確定出目標(biāo)物體,再在此基礎(chǔ)上對目標(biāo)物體進(jìn)行輪廓提取的方法比單一的目標(biāo)顏色提取或輪廓提取更實(shí)用更便捷,為目標(biāo)跟蹤及其他視覺方面的研究奠定了基礎(chǔ)。

參考文獻(xiàn)

[1] 徐德,譚民,李原.機(jī)器人視覺測量與控制[M].2版.北京:國防工業(yè)出版社,2011.

[2] R西格沃特,I R 諾巴克什,D 斯卡拉穆扎.自主移動機(jī)器人導(dǎo)論[M].李人厚,宋青松,譯.2版.西安:西安交通大學(xué)出版社,2013.

[3] BRADSKI Gary, KAEHLER Adrian.學(xué)習(xí)OpenCV(中文版)[M].于仕琪,劉瑞禎,譯.北京:清華大學(xué)出版社,2009.

[4] 馬新明,趙曉莉,時(shí)雷,等.基于OpenCV的圖像處理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].河南農(nóng)業(yè)大學(xué)學(xué)報(bào),2014(1):87?90.

[5] 章毓晉.圖像工程(上冊):圖像處理[M].2版.北京:清華大學(xué)出版社,2007.

[6] LIN C, TANG Y L. Research and design of the intelligent surveillance system based on DirectShow and ?OpenCV ?[C]// IEEE conference on Consumer Electronics, Communications and Networks. Piscataway, NJ, USA: IEEE, 2011: 4307?4310.

[7] STEGER C, ULRICH M, WIEDEMANN C. 機(jī)器視覺算法與應(yīng)用[M].楊少榮,吳迪靖,段德山,譯.北京:清華大學(xué)出版社,2008.

[8] 劉瑞禎,于仕琪.OpenCV教程基礎(chǔ)篇[M].北京:北京航空航天大學(xué)出版社,2007.

[9] 黃凱奇,任偉強(qiáng),譚鐵牛.圖像物體分類與檢測算法綜述[J].計(jì)算機(jī)學(xué)報(bào),2014(6):1225?1240.

[10] 王娜,李霞.一種新的改進(jìn)Canny邊緣檢測算法[J].深圳大學(xué)學(xué)報(bào),2005(2):149?153.

[11] 崔鵬.基于視頻去噪算法移動機(jī)器人視覺定位研究[J].現(xiàn)代電子技術(shù),2012,35(20):111?113.

绥中县| 宁阳县| 凤山县| 东丰县| 牡丹江市| 遵义县| 辽中县| 汾阳市| 武威市| 义马市| 石阡县| 绥滨县| 江孜县| 万全县| 利川市| 怀来县| 乌兰浩特市| 沧源| 五原县| 宜黄县| 内黄县| 县级市| 沽源县| 柞水县| 武功县| 武邑县| 深泽县| 贺兰县| 城固县| 上饶市| 淳化县| 闽侯县| 固阳县| 遂平县| 灌南县| 精河县| 汝州市| 乃东县| 渝中区| 龙陵县| 红河县|