摘 要: 基于英特爾凌動處理器的嵌入式平臺和Windows操作系統(tǒng),,以OpenCV2.0庫為圖形識別處理基礎(chǔ),,運(yùn)用顏色識別、膚色識別,、手指動作識別等非接觸式實現(xiàn)跟蹤技術(shù),,構(gòu)建了一個基于手指動作識別的多點人機(jī)交互系統(tǒng)。該系統(tǒng)能夠跟蹤雙手共四個手指的動作,,實現(xiàn)圖片的多點“觸控”,、畫圖、PDF文件瀏覽功能,。
關(guān)鍵詞: 多點跟蹤,;顏色識別;OpenCV,;人機(jī)交互
隨著計算機(jī)視覺技術(shù)的發(fā)展以及人們對新的交互手段的需求,,基于計算機(jī)視覺的交互系統(tǒng)也逐漸發(fā)展起來,。傳統(tǒng)的交互方式如鼠標(biāo)、鍵盤,、手柄等在某些特殊領(lǐng)域己經(jīng)無法發(fā)揮便利的作用,。本系統(tǒng)將計算機(jī)視覺技術(shù)做新的應(yīng)用,帶來了人機(jī)交互的便利,,實現(xiàn)如畫圖,、圖片瀏覽等功能,將電視棒連接到處理器后還可實現(xiàn)對網(wǎng)絡(luò)電視的頻道切換和音量控制,。本系統(tǒng)是基于顏色識別的多點跟蹤識別系統(tǒng),,可以通過識別手部的動作(如拉伸、靠近等動作)實現(xiàn)對計算機(jī)及與其連接設(shè)備的控制功能,,讓用戶完全擺脫對遙控器和鼠標(biāo)的依賴,,實現(xiàn)更加便捷、人性化的人機(jī)交互,。
傳統(tǒng)的人機(jī)交互方式在使用過程中確定性比較強(qiáng),,比如按下鍵盤的按鈕或者點擊鼠標(biāo)的左右鍵,計算機(jī)都己將此關(guān)聯(lián)到一定的系統(tǒng)事件中,。
而基于顏色識別的手指多點跟蹤交互方式表達(dá)的意義豐富,。如帶上顏色標(biāo)記的指套后,通過不同手勢,、位置,、方向等可以組合出多種信息,更能符合人的操作習(xí)慣,。整個交互的流程為:先通過攝像頭拍攝手勢圖像視頻流,,然后從圖像中根據(jù)特定算法提取出手指的顏色和識別點以及位置信息,之后把這些信息點進(jìn)行相應(yīng)分類取舍,,接著基于Windows API將這些提取出的信息點根據(jù)需求驅(qū)動相應(yīng)的系統(tǒng)動作,。
1 常用的色彩模型及轉(zhuǎn)換
1.1 常用的色彩模型
本系統(tǒng)涉及到的色彩空間有:
(1)RGB顏色模型
RGB彩色系統(tǒng)為一直角坐標(biāo)系統(tǒng),,其中的三個基量是選擇可見光中的三原色光,為使色光定義能夠統(tǒng)一,,CIE定出三原色的波長為紅(700 nm),、綠(546.1 nm)和藍(lán)(435.8 nm)。通常不直接處理RGB彩色影像,,例如欲從一個彩色影像中找出物體的邊緣,,如果分別對R、G和B以邊緣強(qiáng)化處理,,如此得到的為一個別成份的邊緣而非物體的真正邊緣,。直接處理RGB影像的情況只有在每個成份改變的情形都一樣時,,才不會造成顏色失真。
?。?)HSV顏色模型
HSV色彩屬性模式是根據(jù)色彩的三個基本屬性:色相,、飽和度和亮度來確定顏色的一種方法。
色相(H)是色彩的基本屬性,,就是平常所說的顏色名稱,,如紅色、黃色等,,依照在標(biāo)準(zhǔn)色輪上的位置,,取0~360°的數(shù)值(也有用100%的方法確定的)。飽和度(S)是指色彩的純度,,越高色彩越純,,低則逐漸變灰,取0~100%的數(shù)值,。明度(V)也叫“亮度”,,取0~100%。這種模式是1978年由AlvyRaysmith創(chuàng)立的,,它是三原色光模式的一種非線性變換,。
1.2 顏色模型轉(zhuǎn)換
研究表明,雖然不同人的膚色相差很大,,但通常不同人的膚色相差主要是亮度,,而在色度上的差異并不大。因此需要把圖像中表達(dá)顏色的色度與亮度分開,。通常是將獲取的圖像中所用的R,、G、B三原色的顏色分量所表達(dá)的色彩空間轉(zhuǎn)換為HSV色彩空間,,轉(zhuǎn)換后就可以對人體膚色的色度進(jìn)行一個閉值分割來達(dá)到膚色分割的目的,。
(1)膚色模型
參考文獻(xiàn)[1]結(jié)合了HSV顏色空間和RGB空間構(gòu)造出混合膚色模型,,該論文首先分析了膚色在H-S平面的聚類情況,。并通過大量膚色樣本,發(fā)現(xiàn)膚色像素在H-S平面上表現(xiàn)出的明顯聚類,,表明人體膚色的RGB圖像轉(zhuǎn)換到HSV色彩空間后H與S分量的關(guān)系,。并且隨光照強(qiáng)度不同,V的取值范圍應(yīng)較大,,否則會忽略某些膚色像素點,,同時也會引入誤差。
(2)CamShift顏色跟蹤算法及其改進(jìn)
CamShift算法(即“Continuously Apative Mean-Shift”算法)基本思想是將視頻圖像的所有幀作MeanShift運(yùn)算,,并將上一幀的結(jié)果作為搜索窗的初始值,,如此迭代下去實現(xiàn)對目標(biāo)的跟蹤。
?。?)膚色模型+CamShift跟蹤
CamShift算法簡單,,跟蹤實時效果較好,在簡單背景下完全勝任跟蹤識別要求,,缺點是復(fù)雜背景圖對識別精度有一定的干擾,,導(dǎo)致跟蹤不穩(wěn)定。結(jié)合膚色識別和CamShift顏色跟蹤算法,,在每幀同時得到CamShift顏色跟蹤窗口以及膚色二值圖像,,在顏色跟蹤窗口中包含一定數(shù)量膚色二值像素時才認(rèn)為是有效目標(biāo)。
合成的方案具有較好的識別跟蹤效果,,使用改進(jìn)的CamShift算法,,即便出現(xiàn)跟蹤丟失現(xiàn)象,也會在數(shù)幀內(nèi)再次跟蹤上目標(biāo)顏色,,因此采用此方案為系統(tǒng)的實施方案,。
2 系統(tǒng)功能與指標(biāo)
系統(tǒng)通過對4個指套顏色的識別與跟蹤,可以在Windows操作系統(tǒng)中實現(xiàn)[2]如鼠標(biāo)移動,、點擊,、文檔翻頁和多點放大縮小。為了方便操作,,一般左右手食指和拇指各戴一個指套,,右手手指的移動作為鼠標(biāo)移動和單擊消息,用右手食指和拇指的“捏”的動作實現(xiàn)單擊操作,,而“捏住”并移動手指可以實現(xiàn)拖動操作,。左手作為多點觸控消息,在左右手的食指拇指同時“捏住”后,,通過兩手的遠(yuǎn)離拉開和靠近縮回實現(xiàn)“多點觸控”,。
3 實現(xiàn)原理
3.1 OpenCV基礎(chǔ)
OpenCV(全稱是Open Source Computer Vision Library)[3]作為一個基本的計算機(jī)視覺、圖像處理和模式識別的開源項目,,可以直接應(yīng)用于很多領(lǐng)域,,作為二次開發(fā)的理想工具。
3.2 膚色模型
先將原圖像RGB色彩空間轉(zhuǎn)換到HSV空間,,然后判斷像素點是否在膚色模型HSV取值中,,若在范圍內(nèi),則該像素點置”1”(255),,即置為白色,,否則設(shè)置為”0”(黑色)。再進(jìn)行相應(yīng)形態(tài)學(xué)處理以及輪廓提取便可得到膚色二值圖像,,進(jìn)行深度信息提取,。
3.3 CamShift顏色跟蹤算法
CamShift算法是MeanShift的修改算法,克服了MeanShift不適合實時跟蹤的缺點,。
CamShift算法基本實現(xiàn)流程如下:
?。?)Back Projection背景投影計算
計算Back Projection的步驟如下:
①根據(jù)目標(biāo)顏色圖像計算被跟蹤目標(biāo)的色彩直方圖,。
根據(jù)如圖1的目標(biāo)顏色計算出如圖2的直方圖,。
利用背景投影圖計算質(zhì)心即跟蹤窗口進(jìn)行顏色跟蹤。
?、诟鶕?jù)獲得的色彩直方圖將原始圖像轉(zhuǎn)化成色彩概率分布圖像,,這個過程稱為Back Projection。
?。?)MeanShift重心計算
MeanShift算法是一種一組數(shù)據(jù)的密度分布中尋找局部極值的穩(wěn)定的方法,。若分布是連續(xù)的,處理過程比較容易,,這種情況下本質(zhì)上只需對密度的直方分布圖應(yīng)用爬山算法即可,。然而,對于離散的數(shù)據(jù)集,,這個問題某種程度上是比較麻煩的,。
MeanShift算法步驟如下:
①選擇搜索窗口,。
·窗口的初始位置,;
·窗口的類型(均勻、多項式,、指數(shù)或者高斯類型),;
·窗口的形狀(對稱的或歪斜的,可能旋轉(zhuǎn)的,,圓形或巨型),;
·窗口的大小(超出窗口大小則被刪除),。
?、谟嬎愦翱冢赡軒?quán)值的)的重心。
?、蹖⒋翱谥行脑O(shè)置在計算出的重心處,。
④返回第②步,,直到窗口的位置不再變化(通常會),。
(3)CamShift算法
將MeanShift算法擴(kuò)展到連續(xù)圖像序列,,就形成了CamShift算法。它的基本思想是視頻圖像的所有幀作MeanShift運(yùn)算,,并將上一幀的結(jié)果作為下一幀MeanShift算法的Search Window的初始值,,如此迭代下去,就可以實現(xiàn)對目標(biāo)的跟蹤,。整個算法的具體步驟分5步:
?、賹⒄麄€圖像設(shè)為搜尋區(qū)域。
?、诔跏蓟疭earch Window的大小和位置,。
③計算Search Window內(nèi)的彩色概率分布,,此區(qū)域的大小比Search Window要稍微大一點,。
④運(yùn)行MeanShift,,獲得Search Window新的位置和大小,。
⑤在下一幀視頻圖像中,,用③獲得的值初始化Search Window的位置和大小,。跳轉(zhuǎn)到③繼續(xù)運(yùn)行。
在OpenCV中,,有實現(xiàn)CamShift算法的函數(shù)cvCamShift,,使用較方便。
3.4 合成方案:膚色模型+改進(jìn)CamShift跟蹤
結(jié)合膚色識別和CamShift顏色跟蹤算法,,在每幀同時得到CamShift顏色跟蹤窗口以及膚色二值圖像,,在顏色跟蹤窗口中包含一定數(shù)量膚色二值像素時才認(rèn)為是有效目標(biāo)。如圖3所示,,系統(tǒng)分別識別出了膚色和目標(biāo)色紅色,,并確認(rèn)出介于膚色之間的紅色位置才是目標(biāo)位置。
綜合膚色模型和CamShift顏色跟蹤算法,,可以在較復(fù)雜背景下實現(xiàn)目標(biāo)顏色跟蹤,。
4 系統(tǒng)硬件組成
系統(tǒng)硬件組成包括:核心控制系統(tǒng)、視頻采集系統(tǒng),、USB接口的電視棒,、天線、視頻音頻輸出模塊,,系統(tǒng)硬件構(gòu)成如圖4所示,。
5 系統(tǒng)軟件流程
整個軟件系統(tǒng)分為三種狀態(tài):移動狀態(tài)、單點狀態(tài),、多點狀態(tài),。通過設(shè)置兩個標(biāo)志位flag來判斷所處狀態(tài),。只有進(jìn)入單機(jī)狀態(tài)后才能進(jìn)入多點狀態(tài),而一旦退出多點狀態(tài)將進(jìn)入移動狀態(tài)(如圖5),。在圖形界面上,,本系統(tǒng)用VS2005的MFC框架,基于Dialog的結(jié)構(gòu),,編寫了友好的人機(jī)交互界面[4]。
如下代碼介紹了如何在獲取的視頻信號中識別紅色指套,,其他顏色的指套采用相同的方法可進(jìn)行識別,,由識別到的手指位置對Whindows鼠標(biāo)消息進(jìn)行響應(yīng),從而對系統(tǒng)進(jìn)行控制[5],。
?。?)構(gòu)建搜索目標(biāo)色的數(shù)據(jù)結(jié)構(gòu)
histRed=cvCreateHist(1,&hdims,,CV_HIST_ARRAY,,
&hranges,1),; //分配直方圖
imgRed=cvLoadImage("red.jpg"),;//讀取四色基圖
cvCvtColor(image,hsv,,CV_BGR2HSV),;
//彩色空間轉(zhuǎn)換 BGR to HSV
cvScalar(180,256,,MAX(_vmin,,_vmax),0),,mask),;
//得到二值的MASK
cvSplit(hsv,hue,,0,,0,0),; //只提取HUE分量
?。?)CAMSHIFT算法及形態(tài)學(xué)濾波
cvCalcBackProject(&hue,backproject,,histRed),;
//使用back project方法
cvAnd(backproject, mask,, backproject,,0),;
cvMorphologyEx(backproject,backproject,,0,,0,CV_MOP_ OPEN,,1),;
cvMorphologyEx(backproject,backproject,,0,,0,CV_MOP_ CLOSE,,1),;
cvCamShift(backproject, track_windowRed,,
cvTermCriteria(CV_TERMCRIT_EPS | CV_TERMCRIT_ITER,,10,2),,
&track_compRed,, &track_boxRed );
本系統(tǒng)最大的特色在于用雙手手指更形象的操作代替原來鼠標(biāo)單一的左右鍵點擊,,并能完成部分鼠標(biāo)單擊無法完成的多點觸控功能[6],。本系統(tǒng)使用OpenCV技術(shù),通過對顏色的識別跟蹤,,實現(xiàn)了新型的輸入方式,,讓電腦能夠讀懂人的動作。本系統(tǒng)的另一個特色是可以和電視棒,、網(wǎng)絡(luò)視頻軟件結(jié)合起來,。多少年來,電視機(jī)的操作設(shè)備一直是遙控器,,用戶每次要對電視操作時都要找遙控器,,費時費力,隨著科學(xué)技術(shù)的發(fā)展,,這種方式顯得過于落后,,本系統(tǒng)創(chuàng)新性的將基于顏色的手部動作識別和電視操作結(jié)合在一起,符合智能家居的概念,,使得操作更加人性化,。在實際測試過程中,本系統(tǒng)穩(wěn)定運(yùn)行,,并且效果良好,。
參考文獻(xiàn)
[1] 黃菁.基于單目視覺的觸摸屏技術(shù)研究[D].杭州:浙江工商大學(xué),,2009.
[2] RICHTER J, NASARRE C.Windows核心編程[M].北京:清華大學(xué)出版社,,2009.
[3] BRADSKI G,, KAEBLER A. Learning OpenCV[M].北京:清華大學(xué)出版社,2009.
[4] PROSISE J. Programing Windows with MFC Windows[M]. Microsoft Press,, 2007.05.01.
[5] 郭世龍.基于Camshift算法的移動機(jī)器人視覺跟蹤系統(tǒng)[D].武漢:華中科技大學(xué),,2008.
[6] 齊婷.基于視覺的多點觸摸基本技術(shù)實現(xiàn)方法[D].昆明:昆明理工大學(xué),2009.