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