基于FPGA的手勢語音轉(zhuǎn)換器
摘要:
一直以來,聾啞人與健康人之間的交流就十分的困難,特別是沒有學(xué)習(xí)過手語的人。我們的這個(gè)項(xiàng)目旨在打破這個(gè)障礙,讓沒學(xué)過手語的人也能聽見聾啞人的心聲。我們的手語語音轉(zhuǎn)換器目的就是就是通過它提供一種有效的途徑將聾啞人的手勢識別出來,并轉(zhuǎn)換成我們普通人所習(xí)慣的語音信息,從而實(shí)現(xiàn)聾啞人與我們的有效溝通。目前手語識別可以分為基于視覺的識別系統(tǒng)和基于數(shù)據(jù)手套的識別系統(tǒng)?;谝曈X的手勢識別系統(tǒng)采用常見的視頻采集設(shè)備作為手勢感知輸入設(shè)備,價(jià)格便宜、便于安裝。鑒于基于視覺的手勢識別方法交互自然便利,適于普及應(yīng)用,且更能反映機(jī)器模擬人類視覺的功能,我們這次的識別方法為基于視覺的手勢識別。
1 緒論
1.1 項(xiàng)目背景與分析
一直以來,聾啞人與健康人之間的交流就十分的困難,特別是沒有學(xué)習(xí)過手語的人。我們的這個(gè)項(xiàng)目旨在打破這個(gè)障礙,讓沒學(xué)過手語的人也能聽見聾啞人的心聲。我們的手語語音轉(zhuǎn)換器目的就是就是通過它提供一種有效的途徑將聾啞人的手勢識別出來,并轉(zhuǎn)換成我們普通人所習(xí)慣的語音信息,從而實(shí)現(xiàn)聾啞人與我們的有效溝通。
目前手語識別可以分為基于視覺的識別系統(tǒng)和基于數(shù)據(jù)手套的識別系統(tǒng)。前者需要使用者戴上數(shù)據(jù)手套,這就給使用者造成一定的不便,基于視覺的手勢識別系統(tǒng)采用常見的視頻采集設(shè)備作為手勢感知輸入設(shè)備,價(jià)格便宜、便于安裝,提供了更加自然、直接的人機(jī)交互方式。在以后的發(fā)展中,手勢識別是有著很大的前景,在人機(jī)交互中起著不可忽視的作用。
我們這次的識別方法為基于視覺的手勢識別。手勢識別分為動(dòng)態(tài)手勢識別和靜態(tài)手勢識別,動(dòng)態(tài)手勢定義為手運(yùn)動(dòng)的軌跡,而靜態(tài)手勢強(qiáng)調(diào)通過手型傳遞一定的意義。本文研究靜態(tài)手勢識別。靜態(tài)手勢識別通常是基于視覺的2D手勢識別,設(shè)計(jì)一個(gè)手勢語音的轉(zhuǎn)換器可以說給聾啞人帶來了福音,解決了聾啞人與健康人的交流困難。
本文所設(shè)計(jì)的手勢語音識別器大大提高了殘疾人與正常人進(jìn)行交流溝通的方便性。系統(tǒng)的開發(fā)與利用將可以促進(jìn)手勢識別技術(shù)的發(fā)展,具有很強(qiáng)的實(shí)用性和廣闊的應(yīng)用前景。
手勢識別還可以應(yīng)用到很多其他的機(jī)器視覺領(lǐng)域,實(shí)現(xiàn)人機(jī)之間的更好的交互,在越來越注重用戶體驗(yàn)的今天,手勢識別的定會在今后的交互中大放異彩。
1.2 目前相關(guān)技術(shù)的研究及應(yīng)用狀況
當(dāng)今社會中中傳統(tǒng)的人機(jī)交互方式已經(jīng)不能滿足人們對現(xiàn)代生活方式的追求。傳統(tǒng)的一些交互方式在舒適性,易用性,趣味性,個(gè)性化等方面已經(jīng)越來越凸顯出不足之處。自然語言是人類交流的主要手段,通過語言同計(jì)算機(jī)交談無疑是廣大計(jì)算機(jī)用戶夢寐以求的愿望新型直觀自然的交互方式如動(dòng)作交互,語音交互越來越成為生活中必要的方式,但是由于由于其技術(shù)復(fù)雜度高、環(huán)境干擾因素較大、數(shù)據(jù)處理量大、成本高,研發(fā)速度和研發(fā)水平等受到嚴(yán)重的制約,但是, 現(xiàn)代化發(fā)展的今天,人們又迫切需要更加舒適更加自然的交互方式,現(xiàn)在的交互方式逐漸不能滿足人們的要求。
目前,國內(nèi)外相關(guān)技術(shù)研究大多還處于理論研究階段,很多技術(shù)都不成熟,手勢識別技術(shù)卻很少有比較成熟的產(chǎn)品出現(xiàn),基本上處于理論研究階段,即便有,也只是對一些簡單的動(dòng)作通過加速度等傳感器來實(shí)現(xiàn),相對比較簡單。但還沒有能將手勢通過圖像識別出來的相關(guān)產(chǎn)品,我們的手勢語音識別器就是在手勢動(dòng)作識別的基礎(chǔ)上實(shí)現(xiàn)的,將該技術(shù)應(yīng)用在解決聾啞人的語言交流問題,我們在這里對其進(jìn)行了嘗試。
2 系統(tǒng)功能描述及設(shè)計(jì)
2.1 功能概述
上圖是手勢語音轉(zhuǎn)換器的系統(tǒng)結(jié)構(gòu)框架圖,在手勢識別的時(shí)候需要做到準(zhǔn)確性,實(shí)時(shí)性的要求。我們的設(shè)計(jì)利用圖像傳感器在外界環(huán)境中的手勢圖像進(jìn)行實(shí)時(shí)采集,通過我們的系統(tǒng)平臺對圖像進(jìn)行一系列的處理之后,轉(zhuǎn)換為對應(yīng)的語義,再利用語音合成芯片變?yōu)槲淖终Z音輸出。將手勢轉(zhuǎn)換為對應(yīng)的語音意義輸出。其功能框架結(jié)構(gòu)圖如下:
2.2 具體方案選擇
2.2.1 圖像采集模塊
兩個(gè)方案 1.直接利用USB攝像頭進(jìn)行圖像采集2.利用模擬攝像頭,經(jīng)過AD芯片轉(zhuǎn)換
方案一
優(yōu)點(diǎn):直接利用電腦的USB攝像頭,雖然是CMOS攝像頭,但是攝像頭已經(jīng)內(nèi)置DSP芯片,無需再對模擬數(shù)據(jù)進(jìn)行AD轉(zhuǎn)換,FPGA芯片可以直接利用,并且USB接口標(biāo)準(zhǔn)已經(jīng)非常普及,所以此方案將會使用很普遍并且非常普及。我們也配備了USB攝像頭。
缺點(diǎn):USB協(xié)議非常復(fù)雜,不得不熟悉USB協(xié)議,但是USB協(xié)議學(xué)習(xí)要很長的時(shí)間,另外要增設(shè)USB的主從芯片(USB-HOST,比如SL811HS)。這也將會使我們的項(xiàng)目進(jìn)展更加緩慢。
方案二
優(yōu)點(diǎn):采用美國OmniVision公司開發(fā)的CMOS彩色/黑白圖像傳感器芯片OV7620,此芯片的功能比較強(qiáng)大,外圍元件的連接也很少,可以勝任。
缺點(diǎn):需要自己連接硬件電路,采購CCD或CMOS模擬攝像頭,并且FPGA內(nèi)部必須設(shè)計(jì)驅(qū)動(dòng)OV7620的電路邏輯。且轉(zhuǎn)換過來的數(shù)據(jù)量可能比較大,而且需要FPGA里大量的BRAM作為數(shù)據(jù)緩存。
最終,我們選擇了方案二作為我們圖像采集的最終方案。
2.2.2 圖像采集識別處理
圖像采集處理單元主要包括圖像的實(shí)時(shí)采集,平滑處理、圖像區(qū)域分割、圖像膚色提取、圖像矩特征提取和匹配等幾個(gè)部分。其目的是通過實(shí)時(shí)的圖像采集,得到手勢的圖像信息,再進(jìn)行處理得到相應(yīng)的語義含義。
采集來的圖像數(shù)據(jù)量大,采集來之后我們應(yīng)對圖像進(jìn)行預(yù)處理,去除圖像中的背景噪聲,然后提取其特征,現(xiàn)在的特征提取方法有基于圖像紋理的特征提取,基于圖像形狀的特征提取。對于采集得到的圖像,其包含了大量的數(shù)據(jù),而且采集來的圖像的背景的復(fù)雜性以及含有噪聲,我們要將圖像進(jìn)行預(yù)處理,包括對圖像進(jìn)行平滑,圖像增強(qiáng)等一些預(yù)處理來消除噪聲,背景等對后續(xù)處理的干擾。預(yù)處理的目的是改善圖像數(shù)據(jù),抑制不需要的變形或者增強(qiáng)某些對于后續(xù)處理來說比較重要的圖像特征。
2.2.3 語音合成模塊
一.利用語音合成芯片
芯片選擇是OSYNO6188嵌入式中文語音合成芯片,通過異步串口接收待合成的文本,可直接通過PWM輸出方式驅(qū)動(dòng)揚(yáng)聲器,亦可外接單支三極管驅(qū)動(dòng)揚(yáng)聲器,即可實(shí)現(xiàn)文本到聲音(TTS)的轉(zhuǎn)換。支持國家標(biāo)準(zhǔn)GB_2312 所有漢字。
一.自行設(shè)計(jì)語音合成系統(tǒng)
自行設(shè)計(jì)的語音系統(tǒng)首先要考慮方案的難易程度問題,目前技術(shù)上面采用時(shí)域和頻域的方法進(jìn)行語音合成。考慮到方案實(shí)現(xiàn)的問題以及現(xiàn)有器件情況,考慮采用較簡單的波形編輯法,將較短的數(shù)字音頻段(即合成基元)拼接并進(jìn)行段音平滑后生成連續(xù)語流的方法。這種方法占用的存儲空間大,但計(jì)算量小、計(jì)算速度快,而且合成語音自然度較高,顯然比較適合于芯片性能較弱的嵌入式系統(tǒng)方面的應(yīng)用。
語音合成將采用串口與上位機(jī)進(jìn)行連接。欲發(fā)音漢字的國標(biāo)碼(GB碼)由串口送入MCU,MCU將其映射為Flash存儲器地址表中對應(yīng)項(xiàng)的地址,然后根據(jù)此地址取得對應(yīng)項(xiàng)中的命令字,由MCU根據(jù)該命令字讀取該漢字發(fā)音對應(yīng)的語音數(shù)據(jù),連續(xù)讀出語音數(shù)據(jù)并以游程碼解碼算法解碼后,按照語音采樣時(shí)的固定速率通過D/A轉(zhuǎn)換和功率放大播放。本文中語音采樣速率為11025B/s。為滿足應(yīng)用需求,本文首先構(gòu)建易于快速解碼的語音庫,根據(jù)特定Flash存儲器的存儲格式,以快速多查找表尋址及命令字預(yù)先存儲的方式組織并存儲在Flash存儲器中,以滿足語音播放的實(shí)時(shí)要求。同樣,MCU的代碼也要優(yōu)先考慮速度而犧牲諸如模塊化、可讀性方面的要求。最后,出于實(shí)用性考慮,系統(tǒng)中需加入足夠的輸入緩沖區(qū)支持,以滿足一次輸入多個(gè)流字或整句的要求。
一.利用語音合成芯片
優(yōu)點(diǎn):利用現(xiàn)有的材料,可以加快整個(gè)課題的進(jìn)度語音合成芯片已經(jīng)成型,系統(tǒng)運(yùn)行的質(zhì)量和效果比自行設(shè)計(jì)的芯片效果要好系統(tǒng)的可靠性更高
缺點(diǎn):芯片會增加整個(gè)系統(tǒng)的成本利用芯片無法充分利用FPGA的片上資源
二.自行設(shè)計(jì)語音合成芯片
優(yōu)點(diǎn):自主設(shè)計(jì)語音合成部分,增加了整個(gè)系統(tǒng)的技術(shù)含量和含金量,充分開發(fā)了Xilinx開發(fā)板的片上資源,降低了整個(gè)系統(tǒng)的成本
缺點(diǎn):開發(fā)的難度加大,開發(fā)的周期加長,自主開發(fā)的系統(tǒng)沒有現(xiàn)有的語音合成芯片功能強(qiáng)大以及穩(wěn)定
綜合考慮:我決定在方案的初期使用語音合成芯片,因?yàn)檫@樣會加快系統(tǒng)的開發(fā)進(jìn)程,讓我們有更多的時(shí)間和精力放在手勢識別和處理方面。
在方案的后期考慮自行開發(fā)語音合成芯片,利用FPGA的片上資源。
在這里我們分為兩部分:前段文本分析部分和后端語音合成部分。
3、系統(tǒng)硬件設(shè)計(jì)
3.1 基于FPGA的片上系統(tǒng)設(shè)計(jì)
本文實(shí)現(xiàn)了一個(gè)基于FPGA的片上系統(tǒng),該片上系統(tǒng)能夠完成術(shù)中圖像的實(shí)時(shí)采集、識別匹配和其他外設(shè)的控制。該系統(tǒng)用XILINX公司EDK(Embedded Development Kit)軟件開發(fā),是一個(gè)基于Microblaze的嵌入式系統(tǒng)。系統(tǒng)該體系架構(gòu)如上圖所示。
MicroBlaze軟核是一種針對Xilinx FPGA器件而優(yōu)化的功能強(qiáng)大的32位微處理器,適用于所有現(xiàn)產(chǎn)的FPGA器件MicroBlaze軟內(nèi)核和其它外設(shè)IP核一起,可以完成可編程系統(tǒng)芯片(SOPC)的設(shè)計(jì)MicroBlaze軟內(nèi)核采用RISC(reduced instruction system computer)架構(gòu)和哈佛(Harvard)結(jié)構(gòu)的32位指令和數(shù)據(jù)總線,內(nèi)部有32個(gè)通用寄存器R0~R31和2個(gè)特殊寄存器程序指針(PC)和處理器狀態(tài)寄存器(MSR)MicroBlaze還具有指令和數(shù)據(jù)緩存,所有的指令長度都是32位,有3個(gè)操作數(shù)和兩種尋址模式,指令功能劃分有邏輯運(yùn)算,算術(shù)運(yùn)算,分支,存儲器讀/寫和特殊指令等,指令執(zhí)行的流水線是并行流水線,它分為3級流水線:取指,譯碼和執(zhí)行。 Microblaze軟核,片上本地存儲器,標(biāo)準(zhǔn)總線互連以及基于片上外設(shè)總線(OPB)的外圍設(shè)備構(gòu)成了MicroBlaze嵌入式系統(tǒng)。
3.2 視頻采集模塊設(shè)計(jì)
3.2.1 視頻采集芯片
本項(xiàng)目使用的視頻解碼器是圖像傳感器采用美國OmniVision公司開發(fā)的CMOS彩色圖像傳感器芯片OV7620,該芯片將CMOS傳感器技術(shù)與數(shù)字接口組合,是高性能的數(shù)字圖像傳感器,可提供彩色/黑白多種格式的輸出;內(nèi)置10位雙通道A/D轉(zhuǎn)換器,輸出8位/16位圖像數(shù)據(jù);具有自動(dòng)增益和自動(dòng)白平衡控制,能進(jìn)行亮度、對比度、飽和度等多種調(diào)節(jié)功能。可通過SCCB進(jìn)行內(nèi)部寄存器編程配置。只需要外接一個(gè)27MHz的晶振,就可輸出數(shù)字視頻流的同時(shí)還提供像素時(shí)鐘PCLK、行參考信號HREF、垂直同步信號VSYNC,便于外部電路讀取圖像,并可編程設(shè)置HREF、VSYNC在圖像局部開窗,輸出窗口圖像。它支持連續(xù)和隔行兩種掃描方式,VGA與QVGA兩種圖像格式;最高像素為664492,幀速率為30fp8;數(shù)據(jù)格式包括YUV、YCrCb、RGB三種,能夠滿足一般圖像采集系統(tǒng)的要求。OV7620內(nèi)部可編程功能寄存器的設(shè)置有上電模式和SCCB編程模式。本系統(tǒng)采用SCCB編程模式,連續(xù)掃描,16位YUV數(shù)據(jù)輸出。
在這里我們要用到SCL和SDA對圖像傳感器進(jìn)行配置,傳感器有16位的數(shù)據(jù)輸出還提供像素時(shí)鐘PCLK、行參考信號HREF、垂直同步信號VSYNC。
VSYNC是垂直場同步信號,其下降沿表示一幀圖像的開始;HREF是水平同步信號,其上升沿表示一行圖像數(shù)據(jù)的開始;PCLK表示輸出數(shù)據(jù)同步信號
3.2.2 SCCB總線對OV7620的配置
OV7620的控制采用SCCB(SeriaI Camera ControlBus)協(xié)議。SCCB是簡化的I2C協(xié)議,SIO-l是串行時(shí)鐘輸入線,SIO-O是串行雙向數(shù)據(jù)線,分別相當(dāng)于I2C協(xié)議的SCL和SDA。SCCB的總線時(shí)序與I2C基本相同,它的響應(yīng)信號ACK被稱為一個(gè)傳輸單元的第9位,分為Don’t care和NA。Don’t care位由從機(jī)產(chǎn)生;NA位由主機(jī)產(chǎn)生,由于SCCB不支持多字節(jié)的讀寫,NA位必須為高電平。另外,SCCB沒有重復(fù)起始的概念,因此在SCCB的讀周期中,當(dāng)主機(jī)發(fā)送完片內(nèi)寄存器地址后,必須發(fā)送總線停止條件。不然在發(fā)送讀命令時(shí),從機(jī)將不能產(chǎn)生Don’t care響應(yīng)信號。由于I2C和SCCB的一些細(xì)微差別,所以采用GPIO模擬SCCB總線的方式。SCL所連接的引腳始終設(shè)為輸出方式,而SDA所連接的引腳在數(shù)據(jù)傳輸過程中,通過設(shè)置IODIR的值,動(dòng)態(tài)改變引腳的輸入/輸出方式。SCCB的寫周期直接使用I2C總線協(xié)議的寫周期時(shí)序;而SC-CB的讀周期,則增加一個(gè)總線停止條件。OV7620功能寄存器的地址為0x00~0x7C(其中,不少是保留寄存器)。通過設(shè)置相應(yīng)的寄存器,可以使OV7620工作于不同的模式。
SCCB的寄存器是EEPROM,由于是OV6620/OV7620的片內(nèi)EEPROM,穩(wěn)定性不高。雖然理論上SCCB寫入一次,終生受用,但是數(shù)據(jù)容易丟失,因此,SCCB程序的寫入應(yīng)在讀圖像之前每次寫入,并把IICENALBE拉高使能,使SCCB寄存器起作用。
下面列出了一些常用的OV7620寄存器:
在對OV7620進(jìn)行配置的時(shí)候,主設(shè)備必須做以下操作:
①產(chǎn)生開始/停止信號
②在 SCL上施加串行時(shí)鐘
③將7位從設(shè)備地址,讀寫位和8位子地址串行放到 SDA 上
讀的一方必須在確認(rèn)位時(shí)間里拉低 SDA,返回一個(gè)確認(rèn)位作為對寫設(shè)備所寫數(shù)據(jù)的確認(rèn)。
在寫周期里,OV7620 返回確認(rèn)位,在讀周期里,主設(shè)備返回確認(rèn)位,除非讀的數(shù)據(jù)是最后一個(gè)字節(jié)。如果讀的數(shù)據(jù)是最后一個(gè)字節(jié),主設(shè)備并不返回確認(rèn)位,通知從設(shè)備讀周期可以終止。每一字節(jié)內(nèi),最高位總是先傳輸。讀/寫控制位是第一字節(jié)的最低位。標(biāo)準(zhǔn) IIC 通信僅需兩個(gè)管腳:SCL 和 SDA。 SDA 設(shè)置成開漏雙向端口。SCL 為高時(shí),SDA 上從高到低的轉(zhuǎn)換表示開始。SCL 為高時(shí),SDA 上從低到高的轉(zhuǎn)換表示結(jié)束。只有主設(shè)備可以產(chǎn)生開始/結(jié)束信號。
除了以上兩種情況外,協(xié)議要求 SDA 在時(shí)鐘 SCL位高電平器件保持穩(wěn)定。只有當(dāng) SCL為低時(shí)每一位才允許改變狀態(tài)
OV7620 的 SCCB接口支持多字節(jié)讀寫操作。主設(shè)備必須在寫周期而不是讀周期內(nèi)提供子地址。因此,OV6620/7620 讀周期的子地址是前一個(gè)寫周期的子地址。在多字節(jié)讀寫周期中,在第一個(gè)數(shù)據(jù)字節(jié)完成后,子地址自動(dòng)遞增,使得連續(xù)位置的存取可以在一個(gè)總線周期內(nèi)完成。多字節(jié)周期改變了原來的子地址。因此,如果在一個(gè)多字節(jié)周期后有一個(gè)讀周期,就必須插入一個(gè)單字節(jié)寫周期來提供新的子地址。
SCCB的具體實(shí)現(xiàn):
OV7620支持單個(gè)從設(shè)備.,當(dāng)一只有唯一個(gè)從設(shè)備時(shí),6620 ID須置為0XC0 (寫)和0XC1 (讀)。7620 ID是0X42(寫)和 0X43(讀)。 在寫周期中,IIC 總線上的第一個(gè)字節(jié)是選擇單個(gè)片內(nèi)寄存器的子地址,第三個(gè)字節(jié)是讀寫該寄存器的數(shù)據(jù)。寫一個(gè)未定義的子地址將被忽略。在讀周期中,IIC 總線上的第一個(gè)字節(jié)是讀寫該寄存器的數(shù)據(jù),子地址用前面的。讀一個(gè)未定義的子地址,返回?cái)?shù)據(jù)不定。
3.2.3 OV7620采集圖像的流程
我們的采集是連續(xù)采集模式,用到了三個(gè)同步信號:像素時(shí)鐘PCLK、行參考信號HREF、垂直同步信號VSYNC,在這三個(gè)信號中,由于我們采用的是GPIO來作為圖像數(shù)據(jù)的采集端口,而經(jīng)過我們的測試,GPIO端口的時(shí)鐘頻率在5MHz,而在我們的ov7620的三個(gè)同步信號里面,PCLK的周期最短,當(dāng)ov7620采用27MHz的系統(tǒng)時(shí)鐘頻率的時(shí)候,默認(rèn)的PCLK的周期為74ns,而我們的microblaze的中斷響應(yīng)時(shí)間遠(yuǎn)大于這個(gè)周期,在圖像數(shù)據(jù)的匹配的時(shí)候,我們只能通過改變Ov7620的寄存器的值來降低ov7620的PCLK頻率。通過設(shè)置時(shí)鐘頻率控制寄存器,可將PCLK的周期設(shè)為200ns。
3.2 語音合成模塊
3.2.1語音合成芯片OSYNO6188
利用語音合成芯片OSYNO6188嵌入式中文語音合成芯片,通過異步串口接收待合成的文本,可直接通過PWM輸出方式驅(qū)動(dòng)揚(yáng)聲器,即可實(shí)現(xiàn)文本到聲音(TTS)的轉(zhuǎn)換。支持國家標(biāo)準(zhǔn)GB_2312 所有漢字。
該模塊OSYNO 6188 提供一組全雙工的異步串行通訊(UART)接口,實(shí)現(xiàn)與系統(tǒng)板相連接,進(jìn)行數(shù)據(jù)的傳輸。OSYNO 6188利用TxD和 RxD 以及 GND 實(shí)現(xiàn)串口通信。其中GND 作為信號地。
其端口特性如下:1、 初始波特率:1200 bps ,起始位: 1 , 數(shù)據(jù)位:8 ,校驗(yàn)位:無,停止位:1 ,流控制:無。
信息終端以信息幀格式向 TTS 芯片發(fā)送命令碼,對 TTS芯片進(jìn)行系統(tǒng)設(shè)置。TTS芯片根據(jù)命令碼及參數(shù)進(jìn)行相應(yīng)操作,并向信息終端返回命令操作結(jié)果。規(guī)定每個(gè)信息幀最多 56 個(gè)字節(jié),第一個(gè)字節(jié)為開始字節(jié) 0x01,第二三四個(gè)字節(jié)為參數(shù)描述字節(jié),后面最多跟著 50個(gè)數(shù)據(jù)字節(jié),以 0x04為結(jié)束字節(jié),最后一個(gè)字節(jié)為發(fā)送異或校驗(yàn)字節(jié)。
3.2.2語音合成芯片的數(shù)據(jù)包形式:
每次都是以數(shù)據(jù)包的形式進(jìn)行傳送,其形式如下:
實(shí)際輸出范例:
漢字語義:這是我們的手勢語音轉(zhuǎn)換器;
輸出數(shù)據(jù)包:0x1 0x80 0x87 0xE1 0xD5 0xE2 0xCA 0xC7 0xCE 0xD2 0xC3 0xC7 0xB5 0xC4 0xCA 0xD6 0xCA 0xC6 0xD3 0xEF 0xD2 0xF4 0xD7 0xAA 0xBB 0xBB 0xC6 0xF7 0xA3 0x8D 0xA3 0x8A 0x4 0xF1
漢字語義:該手勢意思是A
輸出數(shù)據(jù)包:0x1 0x80 0x87 0xE1 0xB8 0xC3 0xCA 0xD6 0xCA 0xC6 0xD2 0xE2 0xCB 0xBC 0xCA 0xC7 0xA3 0xC1 0xA3 0x8D 0xA3 0x8A 0x4 0xA7
漢字語義:沒有找到該手勢的意思
輸出數(shù)據(jù)包:0x1 0x80 0x87 0xE1 0xC3 0xBB 0xD3 0xD0 0xD5 0xD2 0xB5 0xBD 0xB8 0xC3 0xCA 0xD6 0xCA 0xC6 0xB5 0xC4 0xD2 0xE2 0xCB 0xBC 0xA3 0x8D 0xA3 0x8A 0x4 0xCD
4、軟件設(shè)計(jì)
4.1 圖像的預(yù)處理
在攝像頭傳入的信號受環(huán)境的影響,后期的轉(zhuǎn)換,總要造成圖像的某些降質(zhì)。必須考慮對圖像進(jìn)行改善處理。對于手勢識別系統(tǒng),我們主要用到一些圖像增強(qiáng)技術(shù)。
圖像增強(qiáng)技術(shù)通常有兩類方法:空間域法和頻率域法。
空間域法主要是空間域中對圖像像素灰度值直接進(jìn)行運(yùn)算處理。
頻率域法只要是將圖像變換到其他域中,對圖像變換值進(jìn)行一些操作后,再變換會原來的空間域。通常采用傅立葉變換對圖像操作。
在本系統(tǒng)設(shè)計(jì)中,軟件采用了圖像的平滑,基本已經(jīng)夠用。而圖像的變換域處理方法沒有采用,主要是軟件在時(shí)間域處理的效果已經(jīng)夠用了。
圖像的銳化處理沒有采用,因?yàn)樵趯?shí)現(xiàn)中發(fā)現(xiàn)效果不是很好,并且引入了噪聲。
4.2.1 圖像的平滑處理
本系統(tǒng)的平滑用到了模板操作平滑,將原圖中的一個(gè)像素的灰度值和它周圍鄰近的八個(gè)像素的灰度值相加,然后求得平均值(除以9),取平均值作為新圖中的灰度值。
平滑模板可以濾掉一定的噪聲,但是也有一定程度的模糊。這里,我們采用了不同的矩陣模板來消除不同情況下的噪聲。其中用到的模板有:
經(jīng)過平滑處理后的圖像接著送圖像分割處理,從而分割出人體區(qū)域和背景圖像區(qū)域。
4.2.1 圖像的背景減法
圖像背景減法在圖像的分割的前期工作起到了一定的作用。
(1)初始化背景 沒有前景目標(biāo)進(jìn)入環(huán)境之前,首先對背景連續(xù)采集n幅圖像,通過這n幅圖像,可以建立一個(gè)初始背景的統(tǒng)計(jì)模型,背景中的每個(gè)點(diǎn)i,定義
為該點(diǎn)的顏色期望,為顏色值分布的方差,有如下的公式:
其中為i點(diǎn)在t幅圖像中的顏色值。這樣,所有的點(diǎn)構(gòu)成了初始背景模型。
(2)前景區(qū)域的提取 初始背景建立以后,對于每一幅新采集的當(dāng)前土地,就可以進(jìn)行前景區(qū)域的提取了。設(shè)當(dāng)前圖像中點(diǎn)i的顏色值為,可以通過以下公式將圖像二值化:
其中,所有標(biāo)志為1的點(diǎn)構(gòu)成前景區(qū)域,為0的點(diǎn)構(gòu)成背景區(qū)域,k為自行設(shè)置的常數(shù)。K值的選取對分割效果具有直接的影響,當(dāng)k過小時(shí),提取了手部區(qū)域的同時(shí)還提取了部分的背景區(qū)域;當(dāng)k過大時(shí),會使提取的手部區(qū)域不完整。通過大量的實(shí)驗(yàn),選取k=4時(shí)可以取得較好的分割結(jié)果。
(3)背景模型更新 隨著時(shí)間的推移,背景中不可避免的會發(fā)生一些變化。如果一直使用最初的背景模型,長時(shí)間后就會發(fā)生較大的誤差。為了解決這個(gè)問題,采用了背景模型更新的方法。設(shè)平均值和方差分別為時(shí)刻t點(diǎn)i的顏色期望和方差, 為時(shí)刻t采集到的圖像中點(diǎn)t的顏色值,則t+1時(shí)刻,有:
其中α為學(xué)習(xí)率,可根據(jù)實(shí)際情況進(jìn)行調(diào)解。這樣,背景模型在每一時(shí)刻不斷的得到更新,以便和實(shí)際情況盡可能保持一致。
實(shí)現(xiàn)如下:
n張圖片中一副背景圖片:
圖1-1 背景圖片
前景圖片混合背景圖片:
圖1-2 前景圖片混合背景圖片
背景圖像減法處理之后的結(jié)果
圖1-3 背景減法處理后得到的圖像
觀察處理結(jié)果可以得到,手部的圖片大致地保存下來,背景圖片絕大部分被剪掉了。
背景減法的缺點(diǎn)是,如果背景和前景顏色接近,前景圖片的數(shù)據(jù)會丟失,如上圖,手部圖像里面有黑色條紋,這是背景圖片部分像素值和前景(及手勢圖像像素)接近,而被減掉了。另外,經(jīng)背景減法處理后的圖像,邊緣部分會出現(xiàn)鋸齒,于是要繼續(xù)進(jìn)行形態(tài)學(xué)濾波、空洞填充和中值濾波處理的到最終的分割結(jié)果。
背景圖像減法需要和圖像膚色提取一起使用,相輔相成才能得到比較好的處理結(jié)果。
4.2 圖像的膚色提取
圖像處理中區(qū)別人體與外界的一個(gè)很大的特征就是膚色,通過這一特征可以將圖像分割成眾多分立的小塊。經(jīng)過這一個(gè)操作后圖像面積大大減少,提高了處理效率的同時(shí)又減少了大量外界環(huán)境的干擾,是圖像處理中的很重要的一環(huán)。
人體的皮膚膚色受很多種因素的干擾,這手部圖像的提取帶來了很多的困難。例如不同人種的膚色就有不同差異,不同的人也有細(xì)微的差異,就算是同一人不同身體不同部位膚色也有些差異。膚色同樣受到外界環(huán)境的影響,這其中最主要的就是光照。經(jīng)過分析發(fā)現(xiàn),光照因素分為光照強(qiáng)度,是否直射和光照顏色這幾個(gè)部分,其中后兩者是可以人為控制的(手的正面比較光滑,在光直接照射時(shí)出現(xiàn)反射,導(dǎo)致攝像頭捕獲的數(shù)據(jù)是純白色,而大多數(shù)干擾也是白色),而光照強(qiáng)度擇優(yōu)光照距離的遠(yuǎn)近,是否遮擋以及周圍環(huán)境反射情況決定。如果在室內(nèi),按目前的光照環(huán)境(光照環(huán)境分為自然光環(huán)境和人工光環(huán)境,目前照明主要采用日光燈,可以忽略光照顏色的影響,照明比較充分時(shí),距離也可以忽略),可以只考慮遮擋帶來的膚色變化,而遮擋實(shí)質(zhì)也就是亮度的變化,如果有某個(gè)顏色狀態(tài)不受亮度影響或與亮度是簡單的線性關(guān)系(也就是零階對應(yīng)關(guān)系或一階對應(yīng)關(guān)系,高于一階則對干擾過于敏感,規(guī)律性不強(qiáng))。
2.1 顏色空間的選擇
膚色提取常用的顏色空間除RGB外還有YUV、HSV等,在光照變化時(shí),膚色在RGB顏色空間中的值都有較大的改變,有一定的線性度,但很容易受干擾(膚色產(chǎn)生較小的變化時(shí),其值變化過于劇烈),不能直接用來做膚色提取,如果在YUV空間中,則Y值劇烈變化,線性度較差,而U、V則出現(xiàn)非線性變化,也不便于作為膚色提取的顏色空間,而通過對HSV空間中的分析也不太理想,主要是在這些之中S、V雖然波動(dòng)相對較小,但規(guī)律性不強(qiáng),H幾乎捕捉不到其規(guī)律性,且其轉(zhuǎn)化過程也過于繁瑣,相比之下RGB略為占優(yōu)。
圖2-4 RGB隨亮度的增加的變化示意圖
2.2 膚色的特征值
在觀察HSV顏色空間中的H值轉(zhuǎn)化時(shí)發(fā)現(xiàn)R、G、B相互之間差值的波動(dòng)范圍較小,而且觀察R-G與G-B比H值更加有效,因?yàn)樗鼈冊诹炼雀淖儠r(shí)只有微小的波動(dòng),例如在對某一個(gè)人進(jìn)行測試時(shí)R-G僅在15-35之間波動(dòng),G-B則在18-33波動(dòng),且波動(dòng)并不是由光照直接導(dǎo)致,其證據(jù)就是在光照比較強(qiáng)烈的情況下和光照很弱的情況下,其波動(dòng)的范圍并沒有因此而改變,監(jiān)獄對這個(gè)特性的研究,我們提出了一種不同于以往的膚色提取的方法,下面的公式就是將膚色提取并轉(zhuǎn)化為灰度圖像的一個(gè)經(jīng)驗(yàn)方程。
上式中:C表示表征膚色的量(膚色標(biāo)量),數(shù)值越小越接近膚色;R、G、B為RGB顏色空間的三種顏色的值;i,j表示橫向和縱向的坐標(biāo)值。下面的修正公式各參數(shù)的含義與此處一樣。
2.3 干擾抑制
由于膚色亮度范圍也并不是越大越好,在過亮和過暗的情況下會引入很多不必要的干擾,需要依據(jù)亮度的范圍對這些干擾進(jìn)行抑制。為了簡化計(jì)算,在已有的基礎(chǔ)上可以僅用G來代表亮度(C較大時(shí)修正值的比重很小,可以忽略,C較小時(shí)R,G,B相互間的差在一個(gè)很小的范圍內(nèi),G與亮度的線形相關(guān)度較好,且兩個(gè)差值都與G有關(guān)),膚色的亮度范圍大致在10-170,抑制項(xiàng)選用|90-G|時(shí)效果最好,經(jīng)過多次實(shí)驗(yàn),最終將這一系數(shù)確定在了2,這樣的補(bǔ)償可以使閾值在一個(gè)范圍內(nèi)調(diào)整,對過亮和過暗的顏色進(jìn)行抑制作用,最終得到的膚色經(jīng)驗(yàn)公式為:
圖2-5動(dòng)態(tài)閾值示意圖
2.4 表征膚色的二值化圖像
由于公式中涉及到了二次項(xiàng),而修正項(xiàng)為一次項(xiàng),這使得灰度值與G-B,G-B在三維空間中表現(xiàn)為一個(gè)類似拋物面的曲面,這樣,膚色轉(zhuǎn)變到非膚色時(shí),C的值變化將會很迅速(閾值為1000時(shí),R-G或G-B變化1,閾值將變化45-65),如果要將灰度圖像轉(zhuǎn)化為二值化圖像,閾值的范圍將比較自由,經(jīng)過分析發(fā)現(xiàn),不考慮修正項(xiàng)時(shí),閾值取在200-900間的值時(shí),圖像的改變并不大。從抑制干擾的角度出發(fā),以及對后面的面積處理算法的綜合考慮,我們將閾值定在1000。
我們在后期的處理中主要用二值化后的圖像進(jìn)行形態(tài)學(xué)的處理,而灰度圖像則由于其數(shù)據(jù)信息量較大,用于后期的特征提取的修正。
二值化圖像的取得方法是閾值的處理,其中閾值有表征膚色的RGB值求出,當(dāng)算得量在閾值內(nèi)時(shí),取為1(顏色值為255),當(dāng)算得量超過閾值時(shí),取為0(顏色值為0)。
4.3 區(qū)域分割處理
膚色提取的確將圖像處理成了一塊塊的分立區(qū)域,但系統(tǒng)并不知道這些區(qū)域的位置、大小等信息,在進(jìn)行后續(xù)的處理前必須將這些區(qū)域分割出來。
4.3.1 垂直投影與分割
圖像經(jīng)過膚色提取之后形成一個(gè)個(gè)分立的膚色區(qū)域,當(dāng)然也存在一些干擾,接下來的工作就是將這些區(qū)域進(jìn)行分割,保證最終進(jìn)行識別時(shí)每個(gè)單元都只有一塊簡單膚色區(qū)域,而且要求算法具有優(yōu)良的抗干擾性。
圖像中,能夠通過膚色提取篩選的主要是人的面部,手以及手臂。從人體結(jié)構(gòu)與一些平時(shí)的動(dòng)作考慮,如果在水平方向上投影,則會經(jīng)常出現(xiàn)手與手的重疊或手與臉的重疊(這里不分割手與手臂的區(qū)域),而在垂直方向則相對不太容易形成重疊?;趯Υ说乃伎迹覀冎贿M(jìn)行了垂直方向的投影,用來分割垂直的區(qū)間。
垂直投影只需在膚色處理時(shí)同步將所有值向下累加即可:
上式中:T表示投影值;C表示膚色標(biāo)量;i,j分別表示橫向和縱向坐標(biāo)。
分析這些投影曲線,將其中投影值較大且連續(xù)分布的區(qū)域分割出來,在圖像上,就將圖像分割成了垂直的長條狀的區(qū)間,而這些長條區(qū)間還是有可能是由多個(gè)重疊的投影疊加而成,所以必須進(jìn)行進(jìn)一步處理。
4.3.2 水平積分與分割
垂直投影并沒有將各個(gè)區(qū)域分割開,但卻為水平投影提供了可行性。如果對每個(gè)區(qū)間都再進(jìn)行一次投影,工作量比較大,其實(shí)有很多簡單的修改方式:在作垂直投影時(shí),順帶做一次水平從左到右積分,那么垂直的長條圖像右側(cè)積分值減去左側(cè)的積分值就可以得到投影值,減少循環(huán)次數(shù)。在獲取水平投影后,在重復(fù)剛才的分割就可以粗略的找到膚色區(qū)域存在的區(qū)間。
4.3.3 分割后的整理
在實(shí)現(xiàn)后上述分割后發(fā)現(xiàn),即使區(qū)間劃分的閾值取得再適當(dāng)也會出現(xiàn)將一個(gè)大的連續(xù)的區(qū)域被分割成多個(gè)小區(qū)域的情況,如果直接將相距比較近的區(qū)域進(jìn)行合成,則由會出現(xiàn)有些較近的區(qū)域無法分割開的情況,而且小面積的干擾也有可能被和并成一個(gè)大區(qū)間,引入不必要的麻煩,針對這種情況,我們將與大區(qū)間相鄰的小區(qū)間合并,而一定范圍內(nèi)無區(qū)間或只有小區(qū)間則將其舍棄,這樣,大區(qū)間分離的一些小區(qū)間可以被合并,而聚在一起的干擾則由于沒有一個(gè)大區(qū)間作為核心而被舍棄,在解決了區(qū)域分裂的情況的同時(shí)又實(shí)現(xiàn)了一些抗干擾的功能。
4.3.4 面積篩選算法的采用
在二值化圖像經(jīng)過水平和垂直方向上的積分篩選之后,總會有些膚色接近的區(qū)域遺留,但是,這些區(qū)域大小不是很大,于是,我們這里采用了面積篩選的算法。
在圖像對水平和垂直方向進(jìn)行投影的同時(shí),計(jì)算水平和投影方向閾值連續(xù)部分的長度,得到矩形區(qū)域的面積。
在這些面積中,將矩形面積過小的區(qū)域予以刪除,得到如下的效果。
圖3-1應(yīng)用面積刪選算法處理圖片
分析結(jié)果可以看到,因?yàn)槭植烤匦螀^(qū)域面積比較大,所以,手部矩形區(qū)域之外的接近膚色干擾小區(qū)塊被去除掉了。當(dāng)然,矩形面積算法也有瑕疵的地方,手指上端的圖像被切掉了一小部分,而且手部矩形區(qū)域依然有干擾點(diǎn)的存在。
但是,綜合整體效果,可以看出,手部的形態(tài)特征得到了保存,因此矩形區(qū)域面積篩選算法可行。在后面的圖像矩特征的提取已經(jīng)夠用。
4.4 圖像矩特征提取及分配
即使知道了手勢存在的區(qū)域,面積狀況,可如此巨量的數(shù)據(jù)對于識別來說還是過于龐大了,面對這一問題,最常見的方法就是只提取輪廓,因?yàn)閳D像本身是一塊封閉的區(qū)域,那么輪廓和區(qū)域圖像可以相互轉(zhuǎn)換,也就是說:在這種情況下,輪廓和區(qū)域圖像擁有同樣的信息量。而輪廓數(shù)據(jù)少的多,而且具有很多一維的特性,可以很方便地轉(zhuǎn)成一維數(shù)據(jù)來進(jìn)行分析,這比直接分析區(qū)域的二維特征更加簡單和直觀。
在提取輪廓特征后進(jìn)行幾何矩的計(jì)算,則形態(tài)學(xué)特征轉(zhuǎn)換成一維數(shù)據(jù)。
4.4.1 圖形矩定義簡單說明
將一幅圖像看成一個(gè)二維密度分布f(x,y),函數(shù)值f(x,y)表示點(diǎn)(x,y)處圖像像素的亮度值。
圖像f(x,y)的(p+q)階幾何矩的定義為:
其中f(x,y)是圖形函數(shù)
是圖像亮度函數(shù)f(x,y)定義的像素空間區(qū)域
是變換核
稱為p+q級幾何矩。
4.4.2 使用幾何矩進(jìn)行圖像的形狀描述
圖像不同階的幾何矩表示了圖像亮度分布的不同空間特征。因而一個(gè)幾何矩集可以成為一幅圖像整體形狀的描述子。下面說明其中一些幾何矩的物理意義。
零階幾何矩代表一副圖像的總高度。對于剪影圖像,是目標(biāo)區(qū)域的集合面積。
一階幾何矩,是圖像關(guān)于x軸和y軸的亮度矩。其亮度的“矩心”
為
對于一副剪影圖像,點(diǎn)給出了圖像區(qū)域的幾何中心。通常,能方便計(jì)算出將參照系原點(diǎn)移至圖像亮度矩心的幾何矩,稱為中心矩。這一變化使矩的計(jì)算獨(dú)立于圖像的參照系。
中心矩:一幅圖像相對于亮度矩心所計(jì)算出來的幾何矩成為中心矩。它表示為:
這一矩相當(dāng)于將坐標(biāo)原點(diǎn)移至和處,并計(jì)算得到了對于圖像位移不變的中心矩。
4.4.3 幾何矩不變量
圖像平面變換中具有不變形的幾何矩函數(shù)被應(yīng)用與目標(biāo)鑒別和模式識別等領(lǐng)域中,圖像的形狀特征通過一系列的計(jì)算能得到一組幾何矩特征不變量的集合,能夠用來識別可以的不同大小和不同方向上的具有相同特征的某一類圖像。
根據(jù)Hu氏理論,通過各種不同級別幾何矩的數(shù)學(xué)組合,可以得到七個(gè)特征量。這七個(gè)特征量具有當(dāng)圖像f(x,y)移動(dòng)、轉(zhuǎn)動(dòng)與比例大小改變時(shí)保持其數(shù)值不變的特性。因此稱它們?yōu)椴蛔兙靥卣髁?。這七個(gè)分量分別是:
其中:是歸一化的中心矩:
不變矩特征量的平移、移動(dòng)與比例大小改變而其數(shù)值不變的性質(zhì)以及其它這里就不證明了。
正是由于幾何矩具有這樣的不隨位置、方向、大小的變化而變化的良好性質(zhì),所以才將這一方法引用到手勢識別(手勢圖像的位置、方向、大小極易發(fā)生變化)這一系統(tǒng)中來。
4.4.4 本系統(tǒng)的特征空間
考慮到實(shí)現(xiàn)的效果和計(jì)算復(fù)雜度,決定使用前四個(gè)不變矩特征量,并利用這四個(gè)矩的集合組合形成特征向量,由于這每一分量都具有旋轉(zhuǎn)、平移、比例等不變性,故由其組合而成的矢量也具有相應(yīng)的不變性。這樣可以初步形成特征空間,取七個(gè)特征向量的前四個(gè)組合成特征空間。
4.4.5 圖像矩特征的匹配
一副圖像或一組圖像集的特征向量或特征矩陣必須與先驗(yàn)存儲的一類特征向量或特征矩陣進(jìn)行比較和匹配,以便建立給定圖像和標(biāo)準(zhǔn)圖像之間的一致性關(guān)系,用于模式識別、目標(biāo)鑒別和圖像分類中。
對于一種矩特征向量的前n個(gè)元素可組成一個(gè)有限特征向量。所以,我們用下式來表示第k個(gè)圖像所對應(yīng)的一個(gè)特征向量:
我們的樣本圖像取了四個(gè)特征量組合成矩特征向量。
下面的工作即是計(jì)算矩特征匹配算法的選擇。
計(jì)算方法有:
加權(quán)歐幾里德距離法,相關(guān)系數(shù)法,對數(shù)距離法。
本系統(tǒng)主要用到加權(quán)歐幾里德距離法。
向量的加權(quán)歐幾里德距離法定義如下:
這里表示對分量的加權(quán)系數(shù),這樣做可以在動(dòng)態(tài)范圍內(nèi)平衡各變量。使得函數(shù)D取最小值的k所對應(yīng)的圖像被選作匹配圖像。
4.5 實(shí)現(xiàn)結(jié)果及分析
系統(tǒng)在Windows XP 的VC6.0環(huán)境下工作,再移植到Virtux-5開發(fā)板上。故這里只做VC6.0處理的說明。
圖5-1 系統(tǒng)流程圖說明
4.5.1 手勢圖像幾何矩的提取
下面列出幾何矩計(jì)算的部分源碼:
finger_charactor DIBBARYCENTERMOMENT(unsigned char *imgBufIn,int imgWidth,int imgHeight)
{
int lineByte=(imgWidth+3)/4*4;
int PixelValue;// 圖象象素值
float nBarycentrMoment;//圖像重心矩
float m00,m10,m01;//0次矩m00,x方向的一次矩m10,和y方向的一次矩m10
int BarycenterX,BarycenterY;//重心x y坐標(biāo)
int i,j;
float temp;
finger_charactor temp_charactor;
m00=0;m01=0;m10=0;nBarycentrMoment=0;
int m02,m20,m11,m03,m30,m21,m12;
float u20,u11,u21,u30,u02,u12,u03;
float t1,t2,t3,t4,t5,t6,t7,t8,t9;
m02=0;m20=0;m11=0;
m03=0;m12=0;m21=0;
m30=0;u20=0;u11=0;
u21=0;u30=0;u02=0;
u12=0;u03=0;t1=0;
t2=0;t3=0;t4=0;
t5=0;t6=0;t7=0;
t8=0;t9=0;
//求0次矩m,x方向的一次矩m01和y方向的一次矩m10
for(j=0;jimgHeight;j++)
{
for(i=0;iimgWidth;i++)
{
PixelValue=*(imgBufIn+i*lineByte+j)/255;
m00=m00+PixelValue;
temp=i*PixelValue;//有問題的地方
m01=m01+temp;
temp=j*PixelValue;
m10=m10+temp;
}
}
BarycenterX=(int)(m01/m00+0.5);
BarycenterY=(int)(m10/m00+0.5);
printf(%d,%dn,BarycenterX,BarycenterY);
*(imgBufIn+BarycenterX*lineByte+BarycenterY)=0;
*(imgBufIn+(BarycenterX+1)*lineByte+BarycenterY)=0;
*(imgBufIn+BarycenterX*lineByte+BarycenterY+1)=0;
*(imgBufIn+(BarycenterX+1)*lineByte+BarycenterY+1)=0;
int ii,jj;
ii=0;jj=0;
for(j=0;jimgHeight;j++)
{
for(i=0;iimgWidth;i++)
{
PixelValue=*(imgBufIn+i*lineByte+j)/255;
m00=m00+PixelValue;
temp=i*PixelValue;//有問題的地方
m01=m01+temp;
temp=j*PixelValue;
m10=m10+temp;
m02=m02+(i-BarycenterX)*(i-BarycenterX)*PixelValue;
m20=m20+(j-BarycenterY)*(j-BarycenterY)*PixelValue;
m11=m11+(i-BarycenterX)*(j-BarycenterY)*PixelValue;
m30=m30+(j-BarycenterY)*(j-BarycenterY)*(j-BarycenterY)*PixelValue;
m03=m03+(i-BarycenterX)*(i-BarycenterX)*(i-BarycenterX)*PixelValue;
m21=m21+(j-BarycenterY)*(j-BarycenterY)*(i-BarycenterX)*PixelValue;
m12=m12+(i-BarycenterX)*(i-BarycenterX)*(j-BarycenterY)*PixelValue;
}
}
u20=m20/(m00*m00);u02=m02/(m00*m00);
u11=m11/(m00*m00);u21=m21/(pow(m00,2.5));
u12=m12/(pow(m00,2.5));u30=m30/(pow(m00,2.5));u03=m03/(pow(m00,2.5));
t1=m02/(m00*m00)+m20/(m00*m00);
t2=((m20-m02)/(m00*m00))*((m20-m02)/(m00*m00))+4*(m11/(m00*m00))*(m11/(m00*m00));
t3=m20*m02/(m00*m00*m00*m00)-(m11/(m00*m00))*(m11/(m00*m00));
t4=u02+u20;
t5=(u20-u02)*(u20-u02)+4*pow(u11,2);
t6=(u30-3*u12)*(u30-3*u12)+pow((3*u21-u03),2);
t7=(u30+u12)*(u30+u12)+(u03+u21)*(u03+u21);
printf(圖像的幾何矩為(%f,%f,%f,%f),t4,t5,t6,t7);
temp_charactor.t1=t4;
temp_charactor.t2=t5;
temp_charactor.t3=t6;
temp_charactor.t4=t7;
return temp_charactor;
}
4.5.2 手勢圖像的匹配
在特征匹配過程中,我們選擇的是改進(jìn)的歐式距離。
利用歐幾里德距離,我們可以這樣定義輸入的手勢圖像與手勢庫中的任一手勢圖像之間的距離:。
分別計(jì)算庫中各手勢圖像與輸入圖像的距離最小的那副圖像即為與輸入手勢匹配的手勢。
其源碼如下:
void match(finger_charactor temp)
{
int i;
/* temp.t1=temp.t1*100;
temp.t2=temp.t2*100000;
temp.t3=temp.t3*1000000;
temp.t4=temp.t4*100000;*/
float distance[NUMBER];
float lib[NUMBER][4]={
{0.978988,0.033434,0.041461,0.463083},//1
{0.738859,0.200313,0.008426,0.096310},//2
{0.695933,0.140033,0.004225,0.120884},//3
{0.585566,0.082715,0.014987,0.063054},//4
{0.650015,0.069188,0.013489,0.019868},//5
{0.812733,0.103417,0.054060,0.005729},//a
{1.042509,0.290926,0.031394,0.214864},//b
{0.932284,0.033224,0.030549,0.236714},//c
{0.571468,0.042114,0.011919,0.011260},//d
{1.186403,0.272240,0.330265,0.576809},//e
{0.060099,0.001802,0.000009,0.000001},//f
{0.045080,0.000206,0.000004,0.000001},//g
{0.057199,0.000116,0.000021,0.000025},//h
{0.046879,0.000133,0.000014,0.000003},//i
{0.050615,0.000029,0.000029,0.000005},//j
{0.054486,0.000735,0.000006,0.000001},//k
{0.059298,0.001286,0.000066,0.000056},//l
{0.043326,0.000131,0.000004,0.000000},//m
{0.046381,0.000206,0.000023,0.000002},//n
{0.051253,0.000032,0.000061,0.000008},//o
{0.051904,0.000511,0.000055,0.000013},//p
{0.052215,0.000403,0.000011,0.000004},//q
{0.059072,0.001608,0.000030,0.000013},//r
{0.043743,0.000254,0.000011,0.000000},//s
{0.044977,0.000256,0.000012,0.000001},//t
{0.056229,0.001272,0.000030,0.000013},//u
{0.074957,0.001632,0.000190,0.000040},//v
{0.046419,0.000015,0.000032,0.000002},//w
{0.050211,0.000031,0.000018,0.000001},//x
{0.051339,0.000011,0.000041,0.000003},//y
{0.059218,0.000423,0.000142,0.000003}//z
};
char gesture[NUMBER][2]={1,2,3,4,5,a,b,c,d,e,
f,g,h,i,j,k,l,m,n,o,
p,q,r,s,t,u,v,w,x,y,z
};
for(i=0;iNUMBER;i++)
{
distance[i]=fabs(temp.t1-lib[i][0])+fabs(temp.t2-lib[i][1])+fabs(temp.t3-lib[i][2])+fabs(temp.t4-lib[i][3]);
}
printf(n);
printf(match distances are:);
printf(n);
for(i=0;iNUMBER;i++)
{
printf(%fn,distance[i]);
}
float best_distance=distance[0];
int best_flag=0;
for(i=1;iNUMBER;i++)
{
if(best_distance>distance[i])
{
best_distance=distance[i];
best_flag=i;
}
}
printf(The best distance is %f,best_distance);
printf(n);
printf(The gesture is %s,gesture[best_flag]);
printf(n);
}
4.5.3 手勢庫樣本的建立
樣本庫的建立,我們采用了國際手語中的26個(gè)英文字母作樣本,每個(gè)手勢取三個(gè)圖片,求得特征矩,從而建立樣本庫。其工作流程如下:
4.5.4 實(shí)際運(yùn)行情況
這是將采集到的圖像進(jìn)行分割處理之后得到的圖像:
c1.bmp(意思為C) b2(意思為b)
在PC終端運(yùn)行情況如下。
經(jīng)過各個(gè)手勢的測試之后,手勢的識別率只有60%,不是很高,主要是手勢庫建立還沒有完善,需要很多次的數(shù)據(jù)和測試,統(tǒng)計(jì)完成。
評論