王鵬程,官洪運(yùn),許文杰,鄔曉琳
(東華大學(xué) 信息學(xué)院,上海 201620)
隨著計算機(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)是基于顏色識別的多點(diǎn)跟蹤識別系統(tǒng),可以通過識別手部的動作(如拉伸、靠近等動作)實現(xiàn)對計算機(jī)及與其連接設(shè)備的控制功能,讓用戶完全擺脫對遙控器和鼠標(biāo)的依賴,實現(xiàn)更加便捷、人性化的人機(jī)交互。
傳統(tǒng)的人機(jī)交互方式在使用過程中確定性比較強(qiáng),比如按下鍵盤的按鈕或者點(diǎn)擊鼠標(biāo)的左右鍵,計算機(jī)都己將此關(guān)聯(lián)到一定的系統(tǒng)事件中。
而基于顏色識別的手指多點(diǎn)跟蹤交互方式表達(dá)的意義豐富。如帶上顏色標(biāo)記的指套后,通過不同手勢、位置、方向等可以組合出多種信息,更能符合人的操作習(xí)慣。整個交互的流程為:先通過攝像頭拍攝手勢圖像視頻流,然后從圖像中根據(jù)特定算法提取出手指的顏色和識別點(diǎn)以及位置信息,之后把這些信息點(diǎn)進(jìn)行相應(yīng)分類取舍,接著基于Windows API將這些提取出的信息點(diǎn)根據(jù)需求驅(qū)動相應(yīng)的系統(tǒng)動作。
本系統(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影像的情況只有在每個成份改變的情形都一樣時,才不會造成顏色失真。
(2)HSV 顏色模型
HSV色彩屬性模式是根據(jù)色彩的三個基本屬性:色相、飽和度和亮度來確定顏色的一種方法。
色相(H)是色彩的基本屬性,就是平常所說的顏色名稱,如紅色、黃色等,依照在標(biāo)準(zhǔn)色輪上的位置,取0~360°的數(shù)值(也有用100%的方法確定的)。飽和度(S)是指色彩的純度,越高色彩越純,低則逐漸變灰,取0~100%的數(shù)值。明度(V)也叫“亮度”,取 0~100%。這種模式是1978年由AlvyRaysmith創(chuàng)立的,它是三原色光模式的一種非線性變換。
研究表明,雖然不同人的膚色相差很大,但通常不同人的膚色相差主要是亮度,而在色度上的差異并不大。因此需要把圖像中表達(dá)顏色的色度與亮度分開。通常是將獲取的圖像中所用的R、G、B三原色的顏色分量所表達(dá)的色彩空間轉(zhuǎn)換為HSV色彩空間,轉(zhuǎn)換后就可以對人體膚色的色度進(jìn)行一個閉值分割來達(dá)到膚色分割的目的。
(1)膚色模型
[1]結(jié)合了HSV顏色空間和RGB空間構(gòu)造出混合膚色模型,該論文首先分析了膚色在H-S平面的聚類情況。并通過大量膚色樣本,發(fā)現(xiàn)膚色像素在HS平面上表現(xiàn)出的明顯聚類,表明人體膚色的RGB圖像轉(zhuǎn)換到HSV色彩空間后H與S分量的關(guān)系。并且隨光照強(qiáng)度不同,V的取值范圍應(yīng)較大,否則會忽略某些膚色像素點(diǎn),同時也會引入誤差。
(2)CamShift顏色跟蹤算法及其改進(jìn)
CamShift算 法 (即 “Continuously Apative Mean-Shift”算法)基本思想是將視頻圖像的所有幀作MeanShift運(yùn)算,并將上一幀的結(jié)果作為搜索窗的初始值,如此迭代下去實現(xiàn)對目標(biāo)的跟蹤。
(3)膚色模型+CamShift跟蹤
CamShift算法簡單,跟蹤實時效果較好,在簡單背景下完全勝任跟蹤識別要求,缺點(diǎn)是復(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)的實施方案。
系統(tǒng)通過對4個指套顏色的識別與跟蹤,可以在Windows操作系統(tǒng)中實現(xiàn)[2]如鼠標(biāo)移動、點(diǎn)擊、文檔翻頁和多點(diǎn)放大縮小。為了方便操作,一般左右手食指和拇指各戴一個指套,右手手指的移動作為鼠標(biāo)移動和單擊消息,用右手食指和拇指的“捏”的動作實現(xiàn)單擊操作,而“捏住”并移動手指可以實現(xiàn)拖動操作。左手作為多點(diǎn)觸控消息,在左右手的食指拇指同時“捏住”后,通過兩手的遠(yuǎn)離拉開和靠近縮回實現(xiàn)“多點(diǎn)觸控”。
OpenCV (全稱是OpenSourceComputerVision Library)[3]作為一個基本的計算機(jī)視覺、圖像處理和模式識別的開源項目,可以直接應(yīng)用于很多領(lǐng)域,作為二次開發(fā)的理想工具。
先將原圖像RGB色彩空間轉(zhuǎn)換到HSV空間,然后判斷像素點(diǎn)是否在膚色模型HSV取值中,若在范圍內(nèi),則該像素點(diǎn)置”1”(255),即置為白色,否則設(shè)置為”0”(黑色)。再進(jìn)行相應(yīng)形態(tài)學(xué)處理以及輪廓提取便可得到膚色二值圖像,進(jìn)行深度信息提取。
CamShift算法是MeanShift的修改算法,克服了MeanShift不適合實時跟蹤的缺點(diǎn)。
CamShift算法基本實現(xiàn)流程如下:
(1)Back Projection 背景投影計算
計算Back Projection的步驟如下:
①根據(jù)目標(biāo)顏色圖像計算被跟蹤目標(biāo)的色彩直方圖。
根據(jù)如圖1的目標(biāo)顏色計算出如圖2的直方圖。
利用背景投影圖計算質(zhì)心即跟蹤窗口進(jìn)行顏色跟蹤。
②根據(jù)獲得的色彩直方圖將原始圖像轉(zhuǎn)化成色彩概率分布圖像,這個過程稱為Back Projection。
(2)MeanShift重心計算
MeanShift算法是一種一組數(shù)據(jù)的密度分布中尋找局部極值的穩(wěn)定的方法。若分布是連續(xù)的,處理過程比較容易,這種情況下本質(zhì)上只需對密度的直方分布圖應(yīng)用爬山算法即可。然而,對于離散的數(shù)據(jù)集,這個問題某種程度上是比較麻煩的。
MeanShift算法步驟如下:
①選擇搜索窗口。
·窗口的初始位置;
·窗口的類型(均勻、多項式、指數(shù)或者高斯類型);
·窗口的形狀(對稱的或歪斜的,可能旋轉(zhuǎn)的,圓形或巨型);
·窗口的大?。ǔ龃翱诖笮t被刪除)。
②計算窗口(可能帶權(quán)值的)的重心。
③將窗口中心設(shè)置在計算出的重心處。
④返回第②步,直到窗口的位置不再變化 (通常會)。
(3)CamShift算法
將MeanShift算法擴(kuò)展到連續(xù)圖像序列,就形成了CamShift算法。它的基本思想是視頻圖像的所有幀作MeanShift運(yùn)算,并將上一幀的結(jié)果作為下一幀MeanShift算法的Search Window的初始值,如此迭代下去,就可以實現(xiàn)對目標(biāo)的跟蹤。整個算法的具體步驟分5步:
①將整個圖像設(shè)為搜尋區(qū)域。
②初始化Search Window的大小和位置。
③計算Search Window內(nèi)的彩色概率分布,此區(qū)域的大小比Search Window要稍微大一點(diǎn)。
④運(yùn)行MeanShift,獲得Search Window新的位置和大小。
⑤在下一幀視頻圖像中,用③獲得的值初始化Search Window的位置和大小。跳轉(zhuǎn)到③繼續(xù)運(yùn)行。
在OpenCV中,有實現(xiàn)CamShift算法的函數(shù)cvCamShift,使用較方便。
結(jié)合膚色識別和CamShift顏色跟蹤算法,在每幀同時得到CamShift顏色跟蹤窗口以及膚色二值圖像,在顏色跟蹤窗口中包含一定數(shù)量膚色二值像素時才認(rèn)為是有效目標(biāo)。如圖3所示,系統(tǒng)分別識別出了膚色和目標(biāo)色紅色,并確認(rèn)出介于膚色之間的紅色位置才是目標(biāo)位置。
綜合膚色模型和CamShift顏色跟蹤算法,可以在較復(fù)雜背景下實現(xiàn)目標(biāo)顏色跟蹤。
系統(tǒng)硬件組成包括:核心控制系統(tǒng)、視頻采集系統(tǒng)、USB接口的電視棒、天線、視頻音頻輸出模塊,系統(tǒng)硬件構(gòu)成如圖4所示。
圖4 系統(tǒng)硬件框圖
整個軟件系統(tǒng)分為三種狀態(tài):移動狀態(tài)、單點(diǎn)狀態(tài)、多點(diǎn)狀態(tài)。通過設(shè)置兩個標(biāo)志位flag來判斷所處狀態(tài)。只有進(jìn)入單機(jī)狀態(tài)后才能進(jìn)入多點(diǎn)狀態(tài),而一旦退出多點(diǎn)狀態(tài)將進(jìn)入移動狀態(tài)(如圖5)。在圖形界面上,本系統(tǒng)用VS2005的MFC框架,基于Dialog的結(jié)構(gòu),編寫了友好的人機(jī)交互界面[4]。
圖5 軟件流程圖
如下代碼介紹了如何在獲取的視頻信號中識別紅色指套,其他顏色的指套采用相同的方法可進(jìn)行識別,由識別到的手指位置對Whindows鼠標(biāo)消息進(jìn)行響應(yīng),從而對系統(tǒng)進(jìn)行控制[5]。
(1)構(gòu)建搜索目標(biāo)色的數(shù)據(jù)結(jié)構(gòu)
本系統(tǒng)最大的特色在于用雙手手指更形象的操作代替原來鼠標(biāo)單一的左右鍵點(diǎn)擊,并能完成部分鼠標(biāo)單擊無法完成的多點(diǎn)觸控功能[6]。本系統(tǒng)使用OpenCV技術(shù),通過對顏色的識別跟蹤,實現(xiàn)了新型的輸入方式,讓電腦能夠讀懂人的動作。本系統(tǒng)的另一個特色是可以和電視棒、網(wǎng)絡(luò)視頻軟件結(jié)合起來。多少年來,電視機(jī)的操作設(shè)備一直是遙控器,用戶每次要對電視操作時都要找遙控器,費(fèi)時費(fèi)力,隨著科學(xué)技術(shù)的發(fā)展,這種方式顯得過于落后,本系統(tǒng)創(chuàng)新性的將基于顏色的手部動作識別和電視操作結(jié)合在一起,符合智能家居的概念,使得操作更加人性化。在實際測試過程中,本系統(tǒng)穩(wěn)定運(yùn)行,并且效果良好。
參考文獻(xiàn)
[1]黃菁.基于單目視覺的觸摸屏技術(shù)研究[D].杭州:浙江工商大學(xué),2009.
[2]RICHTER J, NASARREC.Windows核 心 編 程 [M].北京:清華大學(xué)出版社,2009.
[3]BRADSKIG, KAEBLER A.LearningOpenCV[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]齊婷.基于視覺的多點(diǎn)觸摸基本技術(shù)實現(xiàn)方法 [D].昆明:昆明理工大學(xué),2009.