手部姿態(tài)的視覺識別程序設(shè)計_第1頁
手部姿態(tài)的視覺識別程序設(shè)計_第2頁
手部姿態(tài)的視覺識別程序設(shè)計_第3頁
手部姿態(tài)的視覺識別程序設(shè)計_第4頁
手部姿態(tài)的視覺識別程序設(shè)計_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

-PAGEI-題目:手部姿態(tài)的視覺識別程序設(shè)計摘要手勢從古至今一直都是人們的一種最基本的交流方式,某些時間甚至比語言交流更加的可靠方便。隨著科技的進(jìn)步和發(fā)展,計算機(jī)逐漸的走進(jìn)了每個人的生活中,所以手勢識別也作為一項人機(jī)交互技術(shù)被人們所研究,其涉及的領(lǐng)域包括醫(yī)學(xué)、交通和攝影等。人機(jī)交互最重要的就是用戶體驗,只有用戶體驗良好的技術(shù)才能真正的被廣大用戶所認(rèn)可。近幾年,人機(jī)交互技術(shù)的發(fā)展飛快,參與人機(jī)交互相關(guān)技術(shù)研究的人數(shù)眾多,這其中就有許多令人震撼的研究成果,比如鍵盤和鼠標(biāo)、手機(jī)的觸摸屏等。手勢識別技術(shù)是近年所研究出來的一種新型的人機(jī)交互方式,這種技術(shù)通俗一點的來陳述就是計算機(jī)利用一系列的數(shù)學(xué)算法計算并識別出讀入的人們手部的姿態(tài),然后做出一定響應(yīng)的過程,屬于機(jī)器學(xué)習(xí)的范疇。邊緣檢測、手部區(qū)域檢測與手部特征識別技術(shù)都是手勢識別中經(jīng)常應(yīng)用的技術(shù)。手勢識別的一般過程可以簡單描述為三個階段:預(yù)處理,特征提取,模板匹配。預(yù)處理通俗來說就是將讀取的手勢圖片中的噪聲信號過濾;特征提取就是確定一個手勢的特征,然后將這個特征從手勢圖片中提取出來備用;模板匹配就是將提取出來的特征通過歐氏距離的判定來確定圖片對應(yīng)的手勢。本文設(shè)計的是手部姿態(tài)識別的程序,該MATLAB代碼經(jīng)過調(diào)試后可以對一些簡單的手勢進(jìn)行識別。關(guān)鍵詞:預(yù)處理;邊緣檢測;特征提取;模板匹配AbstractGestureshavealwaysbeenthemostbasicwayofcommunicationforpeoplefromancienttimestillnow,andtheyareevenmorereliableandconvenientthanlanguagecommunicationatcertaintimes.Withtheprogressanddevelopmentofscienceandtechnology,computershavegraduallyenteredeveryone'slife,sogesturerecognitionisalsostudiedbypeopleasahuman-computerinteractiontechnology,anditsfieldsincludemedicine,transportationandphotography.Themostimportantthingforhuman-computerinteractionisuserexperience.Onlytechnologieswithgooduserexperiencecanbetrulyrecognizedbythevastnumberofusers.Inrecentyears,thedevelopmentofhuman-computerinteractiontechnologyisfast,andtherearealargenumberofpeopleinvolvedintheresearchofhuman-computerinteractionrelatedtechnologies,amongwhichtherearemanyshockingresearchresults,suchaskeyboardandmouse,touchscreenofmobilephone,etc.Gesturerecognitiontechnologyisanewtypeofman-machineinteractiondevelopedinrecentyears.Thistechnologyisapopularstatementthatthecomputerusesaseriesofmathematicalalgorithmstocalculateandrecognizethelearnedgesturesofpeople'shands,andthenmakesacertainresponse.Itbelongstothecategoryofmachinelearning.Edgedetection,handregiondetectionandhandfeaturerecognitionareallcommonlyusedtechniquesingesturerecognition.Thegeneralprocessofgesturerecognitioncanbesimplydescribedasthreestages:preprocessing,featureextractionandtemplatematching.Preprocessinggenerallymeansfilteringnoisesignalsinthereadgesturepictures;Featureextractionistodeterminethefeatureofagestureandthenextractthefeaturefromthegesturepictureforlateruse.TemplatematchingistodeterminethegesturecorrespondingtothepicturebyjudgingtheEuclideandistanceoftheextractedfeatures.Thispaperdesignsaprogramforhandgesturerecognition.TheMATLABcodecanrecognizesomesimplegesturesafterdebugging.Keywords:Pretreatment;Edgedetection;Featureextraction;Templatematching目錄TOC\o"1-3"\h\u4921摘要 II6329Abstract 331301目錄 414184第1章緒論 6293981.1課題背景與意義 6244401.2國內(nèi)外發(fā)展現(xiàn)狀 657621.2.1國內(nèi)發(fā)展現(xiàn)狀 7116531.2.2國外發(fā)展現(xiàn)狀 7233711.3本文的研究主要內(nèi)容 817402第2章手勢識別簡述 852752.1手勢識別定義 883462.2手勢識別的意義 8269152.3手勢識別的流程 922380第3章手勢圖像 919610第4章預(yù)處理 1196994.1圖像濾波 11175974.1.1中值濾波法 11103674.1.2高斯濾波法 12150984.1.3均值濾波法 1236394.2圖像二值化 13267864.2.1二值化圖像 13164914.2.2P參數(shù)法 1365644.2.3模式法 1327440第5章MATLAB簡介 1487265.1MATLAB簡述 14289805.2MATLAB的功能 1613095.2.1數(shù)值計算與符號計算功能 17285565.2.2繪圖功能 17327495.2.3Simulink仿真 17228275.3MATLAB的語言特點 175091.效率高 17119872.使用方便 1891203.開放性好 18163134.語句簡單 18303715.高效方便的運(yùn)算方式 18586.繪圖功能 18104005.4MATLAB的優(yōu)勢 18121205.4.1優(yōu)秀的編程環(huán)境 19279435.4.2簡單的程序語言 1922485.4.3高效的數(shù)據(jù)處理能力 1956105.4.4出色的圖形處理能力 19288985.4.5廣泛應(yīng)用模塊集合工具箱 20126885.4.6實用的程序接口 20124715.5MATLAB的函數(shù) 208263第6章基于MATLAB的手勢識別實現(xiàn)方法 2220776.1邊緣檢測 22123596.1.1邊緣檢測函數(shù) 23125996.1.2MATLAB中邊緣檢測的實現(xiàn) 23145406.2特征提取 25242686.2.1特征提取函數(shù) 25252856.2.2MATLAB中特征提取的實現(xiàn) 25123846.3匹配識別 2718600結(jié)論 294982致謝 3029517參考文獻(xiàn) 3124950附錄 3217059附錄A手勢識別源代碼 32第1章緒論課題背景與意義隨著科技的不斷地進(jìn)步和發(fā)展,人機(jī)交互逐漸地進(jìn)入了更多用戶的生活之中,但是簡單的觸摸屏和鼠標(biāo)鍵盤這種最基礎(chǔ)的人機(jī)交互方式好像已經(jīng)逐漸地變得麻煩起來了,所以手勢識別這種技術(shù)開始走進(jìn)了各個研究人員的視野中。有些時候,一個簡單的手勢就可以表達(dá)出一個人很多句話想要表達(dá)的意思,所以手勢是一個人們最原始但是卻最方便最有效的一種交流方式,如果能將手勢應(yīng)用到人機(jī)交互這一領(lǐng)域,這無疑是一項偉大的成就,所以現(xiàn)在越來越多的電子產(chǎn)品應(yīng)用了手勢識別的相關(guān)內(nèi)容,如近幾年比較火的刷臉支付和指紋識別等[1][2]。人們的日常生活當(dāng)中,人機(jī)交互幾乎無處不在,但是鍵盤、鼠標(biāo)、觸摸屏等傳統(tǒng)人機(jī)交互方式在某些場合是低效率甚至是不可用的。隨著人們的科技水平和要求的不斷提高,人機(jī)交互的需求和質(zhì)量也日漸提高,首當(dāng)其沖的就是人臉識別、語音識別、手勢識別等,這些人機(jī)交互的方法的出現(xiàn),不但可以讓人機(jī)交互更加的便捷通用,而且能讓人更加自然的控制機(jī)器。手勢識別的發(fā)展不僅讓人們可以更加高效便捷的生活,同時又可以讓人們在工作時免去一些不必要的危險[3]。國內(nèi)外發(fā)展現(xiàn)狀國內(nèi)發(fā)展現(xiàn)狀作為世界最大的發(fā)展中國家,近幾年中國的手勢識別技術(shù)也是發(fā)展的相當(dāng)迅速,在國內(nèi)許多優(yōu)秀的研究人員和領(lǐng)先于世界的科技巨頭都加入了手勢識別的研究,取得了許多令人稱贊的研究成果[4]。上海大學(xué)的研究人員丁友勇等人運(yùn)用改進(jìn)的LBP算法,利用AdaBoost分類器進(jìn)行手勢識別,建立了多種手勢數(shù)據(jù)集,其中包括一些大角度變化的手勢圖像[5]。實驗表明該方法可較好地對手勢特征進(jìn)行分割和分類[5]?;诖笮∈值穆闶质謩葑R別[6]由中國科學(xué)技術(shù)大學(xué)和哈爾濱工業(yè)大學(xué)的藤達(dá),劉巖[6]等人研究,將雙手分為大手和小手,兩手重疊時按照一只手處理,他們利用背景差分算法將背景去除,利用大小手算法檢測出手勢,再結(jié)合動態(tài)時間手勢進(jìn)行識別,該系統(tǒng)實現(xiàn)了17個常用手勢的識別,識別率可達(dá)94.1%[6]。國外發(fā)展現(xiàn)狀手勢識別作為一個被長期研究的對象,許多國外的研究人員已經(jīng)有了很多出色的研究成果。手勢識別隨著技術(shù)的不斷成熟與發(fā)展,也逐漸變得更加的完善和便利,應(yīng)用到了國內(nèi)外許多大企業(yè)的項目上。韓國Inda大學(xué)和Korea?Polytechnic大學(xué)的Jong?Shill?Lee、Young?Joo?Lee等人用熵分析法從背景復(fù)雜的視頻流中分割出手勢區(qū)域并進(jìn)行手勢識別。使用鏈碼的方法檢測手勢區(qū)域的輪廓,最后計算出從手勢區(qū)域的質(zhì)心到輪廓邊界的距離。該系統(tǒng)可識別6種手勢,平均識別率超過95%;6個人分別做每個手勢的識別率平均達(dá)到90%~100%[7]。印度研究者M(jìn)eenakshi?Panwar在視覺手勢識別的基礎(chǔ)上提出了一種基于結(jié)構(gòu)特征的手勢識別算法,通過背景去除、方向檢測、拇指檢測和手指數(shù)量檢測,來最終識別手勢。于成龍等人采用基于視覺的組合特征進(jìn)行手勢識別,將手的面積、周長、重心、面積比和長寬比等特征結(jié)合,使得識別率得以提高[8]?,F(xiàn)在有一種比較流行的濾波方法,這種方法是粒子濾波器,它可以實現(xiàn)追蹤噪聲的狀態(tài)再進(jìn)行進(jìn)一步的濾波。粒子濾波器使用一組加權(quán)粒子逼近系統(tǒng)的后向概率分布。粒子濾波器通過連續(xù)反復(fù)更新粒子的狀態(tài)和重量,從粒子的平均狀態(tài)預(yù)測目標(biāo)對象的位置,實現(xiàn)目標(biāo)跟蹤。LarsBretzner等使用粒子濾波器進(jìn)行收拾的定位跟蹤[9]。NikolayStefanov等在粒子濾波器中引入了變長馬爾科夫模型解決了表現(xiàn)非連續(xù)變化的手勢跟蹤問題[10]。CaifengShan等結(jié)合粒子濾波器和MeanShift算法二者的優(yōu)點,提出一種MeanShiftEmbeddedParticleFilter的方法,實現(xiàn)對手勢的實時跟蹤[11]。Gianni等使用三個粒子濾波器同時跟蹤人手和頭部,通過引入重采樣和退火步驟,提高了對遮擋和肢體快速變化的魯棒性[12]。本文的研究主要內(nèi)容本文針對人類手勢的計算機(jī)視覺識別程序展開研究,擬完成matlab下的程序設(shè)計任務(wù),相關(guān)的研究內(nèi)容與需要解決的問題如下:1.圖像的收集與標(biāo)準(zhǔn)化:主要是指以圖片的方式獲取手勢圖像,并通過基本的圖像處理,使得每一幅圖像都能符合使用標(biāo)準(zhǔn),例如圖像的大小、格式、目標(biāo)在圖像中的大體比例等參數(shù)。2.手勢圖像的目標(biāo)分割:主要是指如何從獲取的圖像中分割出來人類手部的圖像,去除其他無用的圖像部分。3.特征提取在手勢識別中的過程:如何從獲得的手勢圖像目標(biāo)的像素數(shù)據(jù)中,采用圖像分析的方法獲得手勢圖像的特征,例如角點、輪廓、方向等信息,并采用何種方法進(jìn)行識別。手勢識別簡述2.1手勢識別定義在計算機(jī)科學(xué)中,手勢識別指的就是計算機(jī)可以實時的通過攝像頭捕捉到手勢的圖像,然后進(jìn)行一些預(yù)處理,最后識別出手勢的樣子和這個手勢想要表達(dá)的意思,最后做出響應(yīng)。手勢識別不一定是必須是人手部的姿態(tài),也可以是人的臉部,就比如現(xiàn)在最火的刷臉支付,其實也算是一種手勢識別。2.2手勢識別的意義現(xiàn)在手勢識別依舊算是一個比較火熱的研究課,而且截止到目前已經(jīng)有了許多優(yōu)秀的研究成果,而且也有許多優(yōu)秀的研究人員進(jìn)行了大量的相關(guān)實驗。由于目前手勢識別應(yīng)用的環(huán)境和識別的種類較多,所以不同的研究者就根據(jù)自身需要研究并產(chǎn)生了許多不同的手勢識別技術(shù)。將手勢識別應(yīng)用在虛擬現(xiàn)實的情況下,可以讓人們有一種身臨其境的感覺,使人們在虛擬場景中更有可能地去感受現(xiàn)實。手勢是一種具有簡潔性和直接性的人機(jī)交互方式,這種人機(jī)交互方式不僅效率高,也會讓一般用戶的使用感受更加的好。手勢識別的出現(xiàn)令某些不方便用語言進(jìn)行交流的情況下可以讓人們有交流的方法。手勢識別在某些場合可以代替語言交流,甚至高于語言交流,比如在某個安靜的房間里,簡單的手勢交流不但可以表達(dá)清楚手勢發(fā)出者想要表達(dá)意思,同時也可以在不影響其他人的情況下將這個信息傳遞出去,所以手勢識別的出現(xiàn)是必然的,因為這種交流方式在某一情況是必須的,也是十分方便的。2.3手勢識別的流程針對手勢輸入方法的研究,采用計算機(jī)視覺的方式輸入手勢并選擇合適的手勢識別方法和編程工具,做好手勢識別的前期工作。對手勢圖像進(jìn)行預(yù)處理,然后提取出圖像的邊緣,在與計算機(jī)中已經(jīng)輸入的模板進(jìn)行匹配,選擇出匹配最佳的模板圖片,這張模板圖片就是識別結(jié)果。結(jié)合上面的設(shè)計流程和思路,使用MATLAB開發(fā)工具進(jìn)行代碼編寫和構(gòu)建手勢識別系統(tǒng),最終達(dá)成手勢識別的目的。手勢圖像為了能讓計算機(jī)識別各種手勢圖像的類型,就要將圖像轉(zhuǎn)換為計算機(jī)可以運(yùn)算的符號,通常有兩種類型:一維波形,比如核磁共振、心腦電波圖等。二維圖像,比如照片、文字、指紋等。3.1灰度圖灰度代表一個像素的亮度值,在黑白照片中,它可以通過漸變而不是像肉眼看到的那樣簡單的非黑色來區(qū)別于灰度?;叶确侄卧骄?xì),它就能夠準(zhǔn)確地表示單個圖像的信息。其中灰度值的范圍是從零到二百五十五,零代表全黑,而二百五十五代表全白。在手勢識別的過程中,首先都會將由計算機(jī)捕捉到的手勢圖像轉(zhuǎn)換成灰度圖,因為在計算機(jī)視覺中的中灰度圖像可以更好的描述一幅圖像,因為計算機(jī)的語言中只有數(shù)字,而灰度圖就相當(dāng)于把一張彩色的圖片給量化了,然后讓計算機(jī)可以有效且清晰地識別出這張圖片。3.2簡單的圖像操作在手勢識別之前可能要對獲得的圖片進(jìn)行一些簡單的操作,使計算機(jī)進(jìn)行手勢識別時更加的準(zhǔn)確.3.2.1平移平移是將原圖像向上下左右平移一段距離,它在MATLAB中的實現(xiàn)方式是移動后的結(jié)果圖像=imtranslate(原始圖像,移動方向),移動方向=[h,v],其中h>0右移、h<0左移動、v>下移、v<0上移。3.2.2旋轉(zhuǎn)旋轉(zhuǎn)圖像就是將圖像旋轉(zhuǎn)一個角度,它在MATLAB中的實現(xiàn)方式為結(jié)果圖像=imrotate(原始圖像,旋轉(zhuǎn)方向A),其中A>0為逆時針旋轉(zhuǎn)。3.2.3圖像的縮放縮放就是將圖像按照一定比例放大或縮小,它在MATLAB中的實現(xiàn)方式為結(jié)果圖像=imresize(原始圖像,縮放倍數(shù)A),其中A>1為放大。3.2.4剪切圖像的剪切就是將圖像的某一部分提取出來,手勢識別中有的手勢圖像的大小可能難以被計算機(jī)所使用,所以我們要對手勢圖像進(jìn)行剪切,然后將剪切出來的大小合適的圖像用于后續(xù)的手勢識別。3.2.5亮度調(diào)整圖像亮度調(diào)整操作在MATLAB中的函數(shù)為voidCimage:AdjustLight(intnLight),其中需要調(diào)整的亮度大小為輸入的參數(shù)。nLight的值是正數(shù)表示增大手勢圖像的亮度,反之則是降低手勢圖像的亮度。手勢識別時我們采用的圖像均為256灰度圖像,因此任何一點的RGB三個數(shù)值大小相等,也就是說任一點的像素值的飽和度為0,一般在這種情況下,我們可以用代碼nR+nLight來調(diào)整R通道的亮度值,G和B通道同理。預(yù)處理預(yù)處理獲得的手部姿態(tài)圖像是手勢識別的第一步也是不可或缺的一步。手勢圖像在生成和變換過程中更容易受到外界噪聲的影響,由于噪聲會在一定程度上改變圖像質(zhì)量,因此必須對圖像進(jìn)行濾波、銳化和去噪等預(yù)處理。預(yù)處理的最重要的目的是去除圖像中的噪聲,增強(qiáng)圖像中的有用信息,通過在一定程度上恢復(fù)輸入過程中產(chǎn)生的損失,預(yù)處理在濾波的過程中整體進(jìn)行,這種濾波的主要目的是濾除圖像中的噪聲,保存圖像的有用信息。在絕大多數(shù)的情況下獲得的手勢圖像都會擴(kuò)大取景的范圍,這種范圍的擴(kuò)大會使計算機(jī)進(jìn)行許多無用的計算,而且會對之后的手勢識別有一定程度的干擾,所以預(yù)處理也可以讓計算機(jī)更加的準(zhǔn)確讀入包含手勢的部分,這個過程的主要難度還是如何判斷哪部分需要保留,如果判斷錯誤將會對后期的識別有非常大的影響[3]。4.1圖像濾波圖像在獲取、傳輸和保存過程中會受到噪聲的影響,對圖像質(zhì)量和后續(xù)的處理將會造成很大影響,所以我們在進(jìn)行手勢識別之前要進(jìn)行濾波,手勢識別中經(jīng)典的濾波方法有中值濾波法、高斯濾波法和均值濾波法等。4.1.1中值濾波法中值濾波是一種非線性平滑方法,將每個像素點的灰度值設(shè)置為該點的特定相鄰窗口中所有像素的灰度值的中值[13][14]。在光學(xué)測量條紋圖像的相位分析和處理方法中發(fā)揮特別的作用,但對條紋中心分析法幾乎沒有影響。中值濾波器是由外國研究人員上個世紀(jì)七十年代所提出的非線性濾波器的思想,并迅速成為了非線性濾波器的典型代表,濾除實值離散信號就經(jīng)常由非線性濾波器來完成。從一維空間的角度來看中值濾波器,它的實質(zhì)是一個包含奇數(shù)個像素的滑動窗口,窗口中間的像素值被窗口中每個像素值的中值替換。它以二維方式傳播,使用某種形式的二維窗口,它主要是一個3*3和5*5的模板。中值濾波的優(yōu)點是,它能夠克服線性濾波帶來的模糊,同時有效地揭示脈沖噪聲,以此來保護(hù)良好的邊緣特征。但是中值濾波窗口內(nèi)各點對輸出的作用是相同的,如果希望強(qiáng)調(diào)中間點是鄰近點的作用,則可以采用加權(quán)中值濾波法[15]。4.1.2高斯濾波法高斯濾波器表面上是對圖像的噪聲行處理,但是實質(zhì)上它的作用在信號,它會對信號進(jìn)行平滑處理,這種對信號的平滑處理也算是一種對噪聲的過濾。由于這種誤差是累積傳輸?shù)?,許多圖像處理材料從早期就引入高斯濾波,以獲得高信噪比的圖像信噪比。高斯-拉普拉斯變換與此相關(guān),為了實際獲得良好的圖像邊緣,首先對圖像應(yīng)用高斯平滑濾波器,去除噪聲,確定二次微分向量,確定二次微分的零交叉點處的邊緣,在計算期間它成為頻域乘積的空間面積卷積。4.1.3均值濾波法平均值濾波是一種常見的線性濾波算法,也就是說,模板提供給圖像上的目標(biāo)像素。這個模板包含相鄰像素(當(dāng)目標(biāo)像素的中心形成過濾器模板時,將刪除目標(biāo)像素周圍的8個像素,即目標(biāo)像素本身),然后將這個模板中所有像素的平均值用來替換原始像素值。均值濾波方法是從圖像數(shù)據(jù)中生成模板,例如3x3矩陣或5x5,然后處理該矩陣模板。模板將模板提供給圖像上的目標(biāo)像素,模板中包含其周圍的相鄰像素(圍繞目標(biāo)像素,8個像素形成濾鏡模板,即刪除目標(biāo)像素本身),并且模板中所有像素的平均值明確地說,這9個數(shù)字的平均值取代了中間的數(shù)字。FPGA中則將目標(biāo)像素周圍的八個點相加,然后除以八以替換目標(biāo)像素點,這種操作更加的簡便快捷。以上介紹的集中手勢識別的經(jīng)典濾波方法在MATLAB中都有相對應(yīng)的函數(shù)供我們直接使用。4.2圖像二值化圖像離散化是通過將圖像上像素點的灰度值設(shè)置為0或255來以黑白方式表示整個圖像的過程。在數(shù)字圖像處理中,二值圖像占據(jù)著非常重要的位置,圖像的二值化大大減少了圖像中的數(shù)據(jù)量,所以更有可能將目標(biāo)的輪廓突出。圖像二值化的常見方法是p參數(shù)法、模式法等。4.2.1二值化圖像在進(jìn)行手勢識別之前,要將原圖像轉(zhuǎn)化為二值化圖像,因為二值化圖像可以很清楚的表明哪里是手部的輪廓,哪里是背景,這樣計算機(jī)就可以對這張手勢圖像有一個大致的位置估計,可以使接下來的手勢識別更加的順利。其次,為了執(zhí)行二值圖像的處理和分析,首先對灰度圖像進(jìn)行二值化以獲得二值化圖像[15]。所有灰度大于或等于閾值的像素被判定為屬于要識別的特殊物體,這些大于或等于閾值的灰度值由全白代替,否則,將這些像素點將從對象區(qū)域中排除,這些小于閾值的灰度值由全黑代替。4.2.2P參數(shù)法P參數(shù)法大部分情況下都會被應(yīng)用在灰度圖像中,它的大致的使用流程是先獲得圖像的直方灰度圖和它在目標(biāo)中所占的百分比,然后逐漸積累,直到達(dá)到那個百分比,記錄達(dá)到這個百分比時的灰度值,然后使用這個灰度值來分割圖像。但是在現(xiàn)實情況中,已知對象所占的面積比率十分罕見,通常都是按照一定的比例推算出來的,這種方法在文字部分所在比率可以估算出來的場合來使用才會更加的有效。4.2.3模式法如果灰色直方圖具有雙峰值,則對象的灰色級別和背景將分別顯示在兩個峰值附近。因此,將山谷的中心值作為閾值來識別稱為模式方式。但是,在顯示情況下,灰色直方圖不像理想的那樣平滑,因為幾個小隆起會生成幾個局部極值,自動的判定將會變得不方便。因此,更簡單的方法是使用這兩個點來平滑灰色直方圖、選取臨界值、檢查所選灰色周圍的1k的兩個點,并且推測灰色值是否為極端值。MATLAB簡介5.1MATLAB簡述MATLAB是由美國mathworks公司發(fā)布的主要面對可視化、科學(xué)計算以及交互式程序設(shè)計的高科技的計算環(huán)境。它將科學(xué)數(shù)據(jù)可視化、矩陣計算、數(shù)值分析以及非線性動態(tài)系統(tǒng)的建模和仿真等眾多強(qiáng)大的功能集合在一個易于使用的視窗環(huán)境當(dāng)中,為工程設(shè)計、科學(xué)研究以及必須進(jìn)行有效數(shù)值計算的眾多科學(xué)領(lǐng)域提供了一種全面的解決方案,并在很大程度上擺脫了傳統(tǒng)上的非交互式程序設(shè)計語言(如C、Fortran)的編輯模式,代表了當(dāng)今國際科學(xué)計算軟件的先進(jìn)水平[12]。MATLAB的應(yīng)用范圍非常廣泛,包括通訊、信號與圖像處理、測試和測量、控制系統(tǒng)設(shè)計、財務(wù)建模和分析以及計算生物學(xué)等眾多應(yīng)用的領(lǐng)域。附加的工具箱(單獨(dú)提供的專用MATLAB函數(shù)集)擴(kuò)展了MATLAB應(yīng)用環(huán)境,主要用來解決這些應(yīng)用領(lǐng)域內(nèi)特定類型的問題[16]。它有如下的特點:(1)功能較強(qiáng)的數(shù)值運(yùn)算。MATLAB中含有豐富的,涉及范圍廣的函數(shù)。這些函數(shù)涉及到的領(lǐng)域有數(shù)學(xué)、工學(xué)和醫(yī)學(xué)等,每個函數(shù)都有明確的標(biāo)注,這讓各個領(lǐng)域的人在使用的時候可以更加簡單的發(fā)現(xiàn)那些函數(shù),從而高效的進(jìn)行對這一領(lǐng)域的研究,這讓這些研究者們極大地節(jié)省了操作電腦的時間,可以將更多地心思放在對該領(lǐng)域課題的思考上面。(2)先進(jìn)的資料視覺化。MATLAB在用戶使用時可以應(yīng)用MATLAB中的圖形架構(gòu),這可以讓用戶可以制作出一些相比其他環(huán)境更高品質(zhì)的圖形,來讓這些用戶在它們的領(lǐng)域研究更加的順利。(3)簡單卻又高階的程式環(huán)境。MATLAB作為一種直譯型的程式語言,MATLAB可以讓它的用戶快速地完成對某一個程序的編寫,這就明顯區(qū)別于其他的編譯環(huán)境,而且在MATLAB中這些編程還不需要編譯就可以運(yùn)行。(4)開放及可延伸的架構(gòu)。MATLAB允許使用者使用大多數(shù)的數(shù)學(xué)原始碼、更改現(xiàn)存函數(shù)、檢視運(yùn)算法,甚至加入自己的函數(shù)使MATLAB成為使用者所須要的環(huán)境。MATLAB的本意是由英文矩陣實驗室的翻譯而翻譯過來,因為MATLAB中使用的大部分的編程都是以矩陣為主要的載體的。MATLAB主要的應(yīng)用還是給編程人員們進(jìn)行編程,因為它具有許多非常強(qiáng)大的功能和良好的編程環(huán)境,比如MATLAB可以對不同領(lǐng)域的不同數(shù)據(jù)進(jìn)行數(shù)據(jù)分析和對一些數(shù)學(xué)運(yùn)算進(jìn)行高效的運(yùn)算。MATLAB由于它的簡潔高效等優(yōu)點,MATLAB被廣泛應(yīng)用到了各個科研領(lǐng)域,這些領(lǐng)域涉及到了工學(xué)、醫(yī)學(xué)、土木工程、數(shù)學(xué)建模和各種測量領(lǐng)域等。矩陣計算是MATLAB的靈魂,其創(chuàng)始人的設(shè)計哲學(xué)是“一切都是矩陣”,所以矩陣遍布MATLAB。如果再加上附加的工具箱,可以說能解決絕大部分工程與科學(xué)研究問題。也正是基于這一點,MATLAB的軟件十分的龐大,可能有些方面就沒有那么人性化[17]。MATLAB還有另外一種翻譯,這種翻譯被稱為矩陣工廠,這個翻譯可以說是因為MATLAB的大部分運(yùn)算都是以矩陣為主要的載體。MATLAB的編程環(huán)境相對于其他編程環(huán)境來說一點也不落后,甚至有些方面顯得比其他編程環(huán)境更加的高級,MATLAB可以運(yùn)行各個國家的權(quán)威研究所公布的大部分科學(xué)的計算和對這些科學(xué)的編程運(yùn)行。MATLAB又因為它不但可以進(jìn)行對某一數(shù)值的分析,還可以將這個分析的結(jié)果可視化,并且除此之外MATLAB還將它們與非線性系統(tǒng)的模擬和分析功能與數(shù)值分析等功能共同合并到了同一個窗口之中,這就讓用戶在使用MATLAB進(jìn)行一些科學(xué)的運(yùn)算時可以有更方便的操作過程,這就讓MATLAB大大地擺脫了傳統(tǒng)的運(yùn)行環(huán)境模式,讓用戶的人機(jī)交互更加的自然。除此之外,MATLAB中有大量的函數(shù)模型,這些模型大部分都是不斷進(jìn)行更新的最新的科研研究成果,并且代表了目前各個領(lǐng)域的研究人員所研究出來的最高水準(zhǔn)。MATLAB是目前被人們大量使用的三大數(shù)學(xué)軟件之一,這三個軟件是被人們公認(rèn)的最好的數(shù)學(xué)科學(xué)應(yīng)用的軟件。MATLAB可以進(jìn)行矩陣的運(yùn)算、各種函數(shù)以及一些函數(shù)圖像的呈現(xiàn)和與其他的編程語言進(jìn)行聯(lián)動,MATLAB在日常生活中主要應(yīng)用于工程學(xué)、控制領(lǐng)域、信號與統(tǒng)計和圖像處理等多個領(lǐng)域[18]。MATLAB的基本數(shù)據(jù)單元是矩陣,MATLAB的指令公式非常類似于數(shù)學(xué)和工程中常用的格式,所以用MATLAB解決一些數(shù)學(xué)編程類問題比用c和FORTRAN等語言解決同樣的數(shù)學(xué)問題容易得多,并且可以節(jié)省許多運(yùn)算的空間。此外,MATLAB還吸收了Maple等許多編程軟件的優(yōu)點,使MATLAB成為了一個強(qiáng)大的數(shù)學(xué)編程軟件。MATLAB是由MATLABWorks開發(fā)的,并已更新為MATLABR2018a版本。MathWorks成立于1984年,總部位于美國馬薩諸塞州迪克市,在全球15個國家擁有超過兩千名員工,是為工程師和科學(xué)家提供數(shù)學(xué)計算軟件的頂級供應(yīng)商,其主要產(chǎn)品有MATLAB、Simulink和PolySpace產(chǎn)品系列。MATLAB的最初起源可以追溯到1980年前后,當(dāng)時任美國新墨西哥大學(xué)計算機(jī)科學(xué)系主任的教授在教授線性代數(shù)課時想使用計算機(jī)來解決,但當(dāng)時流行的軟件包Linpack和Eispack同其他高級語言編程十分不方便,便自己開始寫相關(guān)程序,這就是MATLAB的雛形。早期的MATLAB使用的是FORTRAN語言編寫的,這種語言雖然簡單,但是由于它是免費(fèi)的,所以吸引了大批的使用者。后來經(jīng)過幾年的發(fā)展,在JohnLittle的推動下,由JohnLittle、CleveMoler和SteveBanger合作成立了MathWorks公司,從這時起MATLAB核心代碼用C語言編寫,功能也越來越強(qiáng)大。隨著技術(shù)的不斷地提升和發(fā)展,MATLAB的各項功能也越來越完善和強(qiáng)大。MATLAB的4.0突破性版本是在1992年引進(jìn)的,微電腦版本是在1993年引進(jìn)的。它可以在Windows3.X上運(yùn)行,并且除此之外可以在許多的環(huán)境中運(yùn)行,這一點令MATLAB的應(yīng)用越來越廣泛。MATLAB在1997年,推出了支持更多數(shù)據(jù)結(jié)構(gòu)的MATLAB5.0,以獲得更方便、更完善的編程語言(雖然那時許多程序員都不認(rèn)為MATLAB是編程語言)。2000年,Simulink有了顯著的改進(jìn)。在那之后MATLAB的發(fā)展就非常的迅速了,這里就不一一去說明了?,F(xiàn)在,MATLAB已經(jīng)不在僅僅是一個矩陣實驗室了,它已成為線性代數(shù)、自動控制理論、數(shù)值分析領(lǐng)域的新型高級語言。5.2MATLAB的功能MATLAB自推向市場以來,風(fēng)風(fēng)雨雨20多年,現(xiàn)已經(jīng)獨(dú)樹一幟了。MATLAB的主要特性包括可靠的數(shù)字計算和符號計算功能、強(qiáng)大的繪圖功能、簡單易懂的語言系統(tǒng)以及許多應(yīng)用程序工具箱。但是,由于這些特性的原因,MATLAB軟件變得非常龐大,因此要求計算機(jī)需要擁有較高的性能,這些是對MATLAB的開發(fā)和推廣不利的。5.2.1數(shù)值計算與符號計算功能MATLAB將矩陣作為數(shù)據(jù)操作的基本單元,使矩陣相關(guān)操作非常簡潔、方便和高效?!八袛?shù)據(jù)都可以轉(zhuǎn)換為行列”,這就是MATLAB的哲學(xué)。5.2.2繪圖功能MATLAB擁有給高級人員使用的高層繪圖和給一般用戶使用的底層繪圖,這兩種繪圖級別就讓MATLAB對于擁有特別需求的用戶可以得到不同層次的繪圖方式。這種繪圖層次的分類就讓有著不同操作要求的不同用戶可以更加方便的應(yīng)用繪圖功能。底層繪圖操作相對于高層繪圖更加的簡單方便,適合一些學(xué)生和對繪圖要求不是很高的用戶使用。用戶有高層繪圖需求的話,就可以保證用戶不用考慮太多的因素與繪圖細(xì)節(jié),只要一些基本操作就行。5.2.3Simulink仿真Simulink是MATLAB中的一個應(yīng)用廣泛的部分,Simulink為某些領(lǐng)域的仿真做出了巨大的貢獻(xiàn),比如電廠的過程控制和電場中一些常見的故障的處理方式等。Simulink并不需要用戶具有多么強(qiáng)大的編程能力,用戶完全可以通過那些代表性十分強(qiáng)烈的控件的相互聯(lián)系去實現(xiàn)仿真某一復(fù)雜的控制系統(tǒng)。Simulink在操作時非常的靈活,而且它的適用領(lǐng)域非常的廣闊。Simulink在仿真時對一些細(xì)節(jié)和流程顯示的十分清晰,并且它能對這些控制環(huán)節(jié)進(jìn)行實際封閉且高效的運(yùn)行。Simulink因為以上介紹的這些諸多好處,早已被廣泛地應(yīng)用到了一些復(fù)雜的各個信號處理和過程控制的設(shè)計中。除此之外,一些其它的編程軟件在實現(xiàn)某一過程中都可能會被要求應(yīng)用Simulink或者是提出在Simulink運(yùn)行某一環(huán)節(jié)的申請。5.3MATLAB的語言特點效率高M(jìn)ATLAB是一種科學(xué)的高級語言,它允許用數(shù)學(xué)語言格式編寫程序,因此MATLAB的編程過程更接近人類的思維方式,在MATLAB中計算就像你使用草稿紙進(jìn)行一些計算,由于編程的思維方式更廣泛,同時也提高了用戶的使用效率。使用方便MATLAB是一種給用戶使用體驗極佳的軟件,它不但可以解釋程序還能夠在它的運(yùn)行環(huán)境中去運(yùn)行這些程序,而且運(yùn)行的過程十分靈活和方便。MATLAB和其他的編程語言相比,把編程、編譯、鏈接和執(zhí)行融合成了一體,這使MATLAB可以在同一個界面更加的靈活,快速的發(fā)現(xiàn)并指出語法錯誤等,這就讓用戶的編程、修改和調(diào)試的速度大幅度增加,這在某種程度上也為用戶提供了方便的編譯環(huán)境。開放性好MATLAB可以和C語言的編程環(huán)境互通,因為C語言作為MATLAB之前的一個環(huán)境,受到了MATLAB的借鑒,所以C語言的移植性就被MATLAB所繼承,這就使C語言的運(yùn)行環(huán)境可以運(yùn)行MATLAB程序。MATLAB中的所有重要文件都是打開、可讀和可寫的源文件,所以用戶可以修改原始源文件,使其成為自己的新文件。語句簡單MATLAB可以將許多輸入和許多輸出分別對應(yīng)起來,這種對應(yīng)就讓MATLAB中出現(xiàn)了許多中不同的排列組合,這些排列組合再對應(yīng)相同的函數(shù)名,就讓同一個函數(shù)可以在不同的環(huán)境發(fā)揮不通的作用,這就讓MATLAB的函數(shù)應(yīng)用范圍變得十分廣闊。這種數(shù)組組合用于表示函數(shù)的方式不僅豐富了MATLAB的功能,而且節(jié)省了大量的存儲空間,使MATLAB文件更加簡單高效。高效方便的運(yùn)算方式MATLAB中有許多比如矩陣加減乘除、矩陣之間的關(guān)系運(yùn)算和矩陣之間的邏輯運(yùn)算等運(yùn)算符,在MATLAB中某些運(yùn)算可以直接復(fù)制大多數(shù)上述運(yùn)算符,以便在數(shù)組之間進(jìn)行操作,但是有些運(yùn)算符不能直接復(fù)制,只要我們將'.'添加到某些運(yùn)算符后就可直接用于數(shù)組運(yùn)算。此外,這些運(yùn)算符不需要定義數(shù)組維,但只需提供特殊的庫函數(shù),這些算法使MATLAB解法更加簡單。繪圖功能MATLAB中的繪圖功能相比于其他的編程軟件是十分方便且優(yōu)秀的,它的繪圖軟件中包含大量坐標(biāo)的繪制,和數(shù)量龐大的繪圖函數(shù)。在繪圖時只需要調(diào)用MATLAB中已有的繪圖函數(shù)就可以完成對圖像的繪制,并且可以在已經(jīng)繪制好的圖像里標(biāo)注一些點或線的信息。這種直觀并且方便的繪圖功能是其他編程語言不具有的。5.4MATLAB的優(yōu)勢某種語言之所以傳播如此之快,并表現(xiàn)出如此旺盛的生命力,是因為被稱為第四代計算機(jī)語言的MATLAB利用豐富的功能資源,將程序員從復(fù)雜的程序代碼中解放出來,使得FORTRAN和c等高級語言不必直接操作計算機(jī)硬件資源。MATLAB自研發(fā)就一直以簡單的操作環(huán)境而出名,MATLAB的運(yùn)行環(huán)境十分符合人們在草紙上計算的過程,整個編程都像是自己在心里計算一樣,而不是像其他編程軟件有那么多額外的規(guī)則限制。5.4.1優(yōu)秀的編程環(huán)境MATLAB由一系列工具組成,用戶可以直接使用簡單的程序語言功能和文件。MATLAB的連續(xù)升級和更新使MATLAB用戶界面變得越來越完美,這種界面更接近人們在日常生活中使用最多的PC界面,使MATLAB與用戶之間的人與計算機(jī)的交互更加流暢,更加方便操作。MATLAB的新版本還提供了完整的幫助系統(tǒng),用戶可以更方便地使用它。雖然MATLAB編程環(huán)境很簡單,但是提供了較完整的調(diào)試系統(tǒng),這就令程序可以不經(jīng)過編譯就可以直接運(yùn)行,同時還能及時的將錯誤報告給用戶,并能分析出原因且給用戶修改建議。5.4.2簡單的程序語言用戶可以在命令窗口中同步命令和輸入語句的執(zhí)行,也可以在完成大型程序的編譯之后再將整個大型程序一起執(zhí)行。由于新版本的MATLAB基于c++編程語言,因MATLAB的語法非常類似于c++,并且是符合用戶公式描述格式的語法。這使得MATLAB對于非計算機(jī)研究者更加方便。此外,MATLAB還具有良好的便攜性,這也是MATLAB能夠融入并應(yīng)用到各種領(lǐng)域中的一個重要原因。5.4.3高效的數(shù)據(jù)處理能力由于MATLAB擁有的功能涉及到了許多不同的領(lǐng)域,因此絕大多數(shù)領(lǐng)域的用戶都可以輕松地使用MATLAB。MATLAB的功能非常嚴(yán)謹(jǐn),這些功能大部分也是目前科研的最新研究結(jié)果,這些功能被許多代優(yōu)秀的研究人員優(yōu)化和改進(jìn)。一般來說,MATLAB可以在計算量要求相同時直接調(diào)用函數(shù),從而大大減少編程工作量,因此可以在某些情況下代替c語言,甚至效果要優(yōu)于c語言。MATLAB的功能不僅包括最基本的矩陣和特征向量等,而且MATLAB還包括非常復(fù)雜的功能。這些函數(shù)可以解決的問題包括矩陣運(yùn)算、方程解、微分方程解、三角函數(shù)、傅里葉變換和動態(tài)建模。5.4.4出色的圖形處理能力MATLAB的圖像處理功能相對于其他的編程語言來說一直都是十分的出類拔萃。這種圖像處理功能可以用圖形向量和矩陣來表示,同時這種圖像處理功能還可以用于標(biāo)記和列印圖形。此外,還可以使用MATLAB來進(jìn)行工程映射和科學(xué)計算。新版本的MATLAB在整個圖形處理方面都更加的完善并且使整體圖形處理功能更加的完整高效,而MATLAB還為其他軟件不可用的功能提供了特殊的處理功能。同時,MATLAB具有特殊的可視化要求,MATLAB還具有一些函數(shù),這些函數(shù)還包含了響應(yīng)處理功能,能夠保證不同用戶的不同需求。5.4.5廣泛應(yīng)用模塊集合工具箱MATLAB中有許多由各個領(lǐng)域的權(quán)威人士研究的工具箱,這些工具箱經(jīng)過該領(lǐng)域的大牛檢查和完善,已經(jīng)日漸完善,而且它們功能強(qiáng)大,可以滿足各個領(lǐng)域用戶的需求。普通用戶可以直接使用工具箱完整地編程、學(xué)習(xí)和評估自己的代碼。MATLAB工具箱目前涉及多個領(lǐng)域,包括模糊邏輯、數(shù)學(xué)統(tǒng)計、小波分析、信號處理、模型預(yù)測、地圖工具、各種模擬、與DSP的通信、非線性控制和嵌入式系統(tǒng)開發(fā)。5.4.6實用的程序接口MATLAB在大部分情況下都可以運(yùn)行那些在C語言環(huán)境中編寫的C語言程序段,因為MATLAB在它的最新版本被允許使用C語言編程環(huán)境的各種功能,所以MATLAB和C語言編程環(huán)境有一定的相似性,這就使它們可以相互通用。因此,普通的用戶就可以在實際的編程應(yīng)用中建立一些可以在MATLAB環(huán)境中進(jìn)行編寫的C語言程序。MATLAB在Web的服務(wù)程序允許在Web上使用一些MATLAB所具備的某些數(shù)學(xué)和圖形的相關(guān)程序段。MATLAB與其他的編譯環(huán)境的最明顯的區(qū)別就是,MATLAB有可以被擴(kuò)展的擴(kuò)展系統(tǒng)和被稱為工具箱的一些特殊的子程序庫。每一個工具箱都有一個它所針對的一個領(lǐng)域,這些工具箱可以說是對某一領(lǐng)域進(jìn)行量身定做的,這些領(lǐng)域和之前所介紹的MATLAB的應(yīng)用領(lǐng)域大體上一致。5.5MATLAB的函數(shù)MATLAB中的函數(shù)十分的豐富,也涉及到了各個領(lǐng)域,這也是MATLAB運(yùn)算功能強(qiáng)大的原因之一,比如數(shù)學(xué)中的各種函數(shù)、邏輯運(yùn)算的各種函數(shù)和用來模擬隨機(jī)發(fā)生時間的隨機(jī)函數(shù)。但是即使MATLAB擁有各種各樣的函數(shù),但決定不能包含所有的函數(shù),所以MATLAB還提供了自定義函數(shù)功能。常見的數(shù)學(xué)函數(shù)MATLAB中提供了許多內(nèi)建函數(shù),比如三角函數(shù)和多項式函數(shù)等。使用函數(shù)時需要注意的是等式的右邊放函數(shù)名,等式的左邊放計算該函數(shù)的表達(dá)式。除此之外,這些函數(shù)都可以嵌套,就是當(dāng)做另一個函數(shù)的自變量使用。以下是編程中可能經(jīng)常使用的部分函數(shù),取余函數(shù):rem(a,b),求a%b的值。冪指函數(shù):exp(A),求e的冪指數(shù)。取整函數(shù):round函數(shù):對輸入的值按照所定的規(guī)則取整,這種規(guī)則是四舍五入;ceil函數(shù):向上取整,取大于等于這個數(shù)的第一個整數(shù);floor函數(shù):向下取整,取小于等于這個數(shù)的第一個數(shù)。常用的數(shù)據(jù)分析函數(shù)MATLAB中也提供了許多用于數(shù)據(jù)分析的函數(shù),常見的數(shù)據(jù)分析函數(shù)如下:方差(var)函數(shù):var(x,y,z)的三個參數(shù)的說明如下:x表示要求方差的矩陣或者向量;y的取值為0或1,0表示以(N-1)歸一化,1表示以N歸一化,即最后計算時的分母的值;第三個參數(shù)表示按行還是按列進(jìn)行求方差,若值為1則表示按列求方差,若為0表示按行求方差。

fsolve數(shù)值解方程(組)函數(shù):fsolve的參數(shù)意義大部分與fzero相同,只是優(yōu)化參數(shù)更多了,使用更靈活另外一定注意x0的長度必須與變量的個數(shù)相等。它可以直接方便的求解多變量方程組,線性和非線性,超靜定和靜不定方程,還可求解復(fù)數(shù)方程fun同樣可以是句柄、inline函數(shù)或M文件。基于MATLAB的手勢識別實現(xiàn)方法MATLAB中大部分的圖像識別都是從圖像中提取如輪廓矩、區(qū)域矩、直方圖等表現(xiàn)特征,但是人的手部姿態(tài)是一個復(fù)雜的變形體,不能僅靠這些簡單的參數(shù)來確定手部的姿態(tài)。人的手部姿態(tài)隨著關(guān)節(jié)的轉(zhuǎn)動、手指間角度的變化都會呈現(xiàn)出不同的手勢,所以手勢識別的參數(shù)構(gòu)造一定要具有一定的相對不變且要在各種情況下都能進(jìn)行有效的識別[19]。邊緣檢測將輸入圖像中灰度值變化劇烈的點找到就是邊緣檢測的目的,這種灰度值變化特別大的點表現(xiàn)出來的經(jīng)常就是圖像的輪廓。如果我們能夠?qū)⑤斎氲膱D像的邊緣準(zhǔn)確的找到,那么就說明著我們可以將這個物體在圖像中發(fā)現(xiàn)它的在目標(biāo)圖像中差不多的位置,這就意味著我們能夠?qū)ΜF(xiàn)實中的那個物體的位置進(jìn)行定位并且可以對它的一些參數(shù)進(jìn)行測量,檢測大致的流程如圖6-1所示,圖6-1邊緣檢測流程圖6.1.1邊緣檢測函數(shù)邊緣檢測是運(yùn)用sobel算子進(jìn)行邊緣提取的,其函數(shù)說明見表6-1所示:表6-1邊緣檢測函數(shù)說明函數(shù)原型voidSobel_Image(int*Graydata,longwidth,longheight,int*edgedata)入口參數(shù)Graydata,二值化圖片(灰度值取值0/255)Width,圖片寬度(以像素點個數(shù)為單位)Height,圖片高度(以像素點個數(shù)為單位)出口參數(shù)Edgedata,邊緣檢測后圖片(灰度值取值0/1)6.1.2MATLAB中邊緣檢測的實現(xiàn)該程序的邊緣檢測閾值經(jīng)過多次試驗后設(shè)定為90,邊緣檢測在MATLAB仿真中主要代碼如下,voidSobel_Image(int*Graydata,longwidth,longheight,int*edgedata){ intSobel_X[9]={-1,0,1,-2,0,2,-1,0,1}; intSobel_Y[9]={1,2,1,0,0,0,-1,-2,-1}; inti,j; intThreshold=90; inttemp1=0,temp2=0,temp3=0; for(i=1;i<height-1;i++){ for(j=1;j<width-1;j++){ temp1=Sobel_X[0]*(*(Graydata+(i-1)*width+j-1))+Sobel_X[1]*(*(Graydata+(i-1)*width+j))+Sobel_X[2]*(*(Graydata+(i-1)*width+j+1))+Sobel_X[3]*(*(Graydata+(i)*width+j-1))+Sobel_X[4]*(*(Graydata+(i)*width+j))+Sobel_X[5]*(*(Graydata+(i)*width+j+1))+Sobel_X[6]*(*(Graydata+(i+1)*width+j-1))+Sobel_X[7]*(*(Graydata+(i+1)*width+j))+Sobel_X[8]*(*(Graydata+(i+1)*width+j+1)); temp2=Sobel_Y[0]*(*(Graydata+(i-1)*width+j-1))+Sobel_Y[1]*(*(Graydata+(i-1)*width+j))+Sobel_Y[2]*(*(Graydata+(i-1)*width+j+1))+Sobel_Y[3]*(*(Graydata+(i)*width+j-1))+Sobel_Y[4]*(*(Graydata+(i)*width+j))+Sobel_Y[5]*(*(Graydata+(i)*width+j+1))+Sobel_Y[6]*(*(Graydata+(i+1)*width+j-1))+Sobel_Y[7]*(*(Graydata+(i+1)*width+j))+Sobel_Y[8]*(*(Graydata+(i+1)*width+j+1)); temp3=abs(temp1)+abs(temp2);if(temp3>Threshold)*(edgedata+i*width+j)=1;//Blackelse*(edgedata+i*width+j)=0;//White } }}特征提取在手勢識別中,如何去判斷手部姿態(tài)是最為關(guān)鍵的,所以如何準(zhǔn)確的確定手部的特征就顯得非常重要。如果特征尋找錯誤,那么整個手部姿態(tài)識別也有極大的概率發(fā)生錯誤,手部姿態(tài)的分類就不能準(zhǔn)確的判斷。當(dāng)我們需要判斷一個手部姿態(tài)時,要考慮它在不同情況下所代表得不同的意思,要具體情況具體分析,不能只根據(jù)一種情況來判這個手勢的意思[20]。特征形成、特征提取、特征選擇是特征提取與選擇的三個步驟。特征選擇就是指一個手勢圖像可能有許多個可以識別的特征,如手指的角度、手掌的面積和手指的個數(shù)等等,但是如果對這些特征全部進(jìn)行一個比較和處理會占用大量的計算空間,雖然得到的結(jié)果更加的精確,但是在一般的手勢識別中不需要那種非常高的精度,所以我們要根據(jù)我們手勢識別的環(huán)境和目標(biāo)來進(jìn)行一次特征的選擇,選擇出在這個特定的環(huán)境最具有代表性的特征,然后對該特征進(jìn)行一個有效的提取,最后完成識別。有效的特征選擇可以大大地提高手勢識別的效率,也可以讓計算機(jī)有更多的計算空間來計算更多內(nèi)容。6.2.1特征提取函數(shù)提取特征值是對圖片的Hu不變一階、二階、三階矩進(jìn)行提取,其函數(shù)說明見表6-2所示:表6-2提取特征值函數(shù)函數(shù)原型voidOriginMoment(int*edgedata,longwidth,longheight,int*output)入口參數(shù)Edgedata,邊緣檢測后的圖片Width,圖片寬度(以像素點個數(shù)為單位)Height,圖片高度(以像素點個數(shù)為單位)出口參數(shù)Output,H1、H2、H3數(shù)據(jù)存放的數(shù)組6.2.2MATLAB中特征提取的實現(xiàn)特征提取是手勢識別中最關(guān)鍵的步驟也是最復(fù)雜的步驟,手部姿態(tài)的特征有很多種,如手指之間的角度、手指的長度和掌心的位置,這些都可以作為一個手部姿態(tài)圖像的特征,所以我們可以有目的地去提取這些特征,使手勢識別更加的準(zhǔn)確。手勢的特征可以簡單分為手部的周長和面積,手部的周長大致的概念就是手勢圖片中手勢邊緣上像素點的總和,通過預(yù)處理中的邊緣檢測可以很簡單的獲得手勢圖像的邊緣,進(jìn)而求出手勢圖像的周長;手部的面積大致的概念就是手勢圖像中手勢區(qū)域內(nèi)所包含的像素點個數(shù)的總和,手勢區(qū)域可以通過預(yù)處理中的二值化圖像獲取。本次畢業(yè)設(shè)計我選擇采用胡不便具進(jìn)行特征提取,胡不變矩的求取主要分為以下幾個步驟。(1)先求圖片(0+1)階原點矩、(1+0)階原點矩、(0+0)階原點矩。(2)根據(jù)原點矩,求出圖片的重心坐標(biāo)。(3)根據(jù)重心坐標(biāo),求出圖片的(1+1)階、(2+0)階、(0+2)階、(2+1)階、(1+2)階、(3+0)階、(0+3)階幾何中心矩。(4)求出。(5)分別求出。在MATLAB中特征提取的主要代碼如下:voidOriginMoment(int*edgedata,longwidth,longheight,int*output){intsum_00=0,sum_01=0,sum_10=0;intmiu_00=0,miu_20=0,miu_02=0,miu_21=0,miu_12=0;intmiu_11=0,miu_30=0,miu_03=0; intning_20=0,ning_02=0,ning_11=0; intning_21=0,ning_12=0,ning_30=0,ning_03=0;intx_ba=0,y_ba=0; inti,j; for(i=0;i<height;i++){ for(j=0;j<width;j++){ sum_00=sum_00+*(edgedata+width*i+j); sum_01=sum_01+(*(edgedata+width*i+j))*j; sum_10=sum_10+(*(edgedata+width*i+j))*i; } } x_ba=sum_10/sum_00;//重心坐標(biāo)xy_ba=sum_01/sum_00;//重心坐標(biāo)y miu_00=sum_00;//perimeter=miu_00; for(i=0;i<height;i++){ for(j=0;j<width;j++){miu_11=miu_11+(i-x_ba)*(j-y_ba)*(*(edgedata+width*i+j));miu_20=miu_20+(i-x_ba)*(i-x_ba)*(*(edgedata+width*i+j));miu_02=miu_02+(j-y_ba)*(j-y_ba)*(*(edgedata+width*i+j));miu_21=miu_21+(i-x_ba)*(i-x_ba)*(j-y_ba)*(*(edgedata+width*i+j));miu_12=miu_12+(i-x_ba)*(j-y_ba)*(j-y_ba)*(*(edgedata+width*i+j));miu_30=miu_30+(i-x_ba)*(i-x_ba)*(i-x_ba)*(*(edgedata+width*i+j));miu_03=miu_03+(j-y_ba)*(j-y_ba)*(j-y_ba)*(*(edgedata+width*i+j)); } }ning_20=miu_20/(miu_00*miu_00);ning_02=miu_02/(miu_00*miu_00);ning_11=miu_11/(miu_00*miu_00);ning_21=miu_21/(miu_00*miu_00);ning_12=miu_12/(miu_00*miu_00);ning_30=miu_30/(miu_00*miu_00);ning_03=miu_03/(miu_00*miu_00); *(output)=ning_20+ning_02;*(output+1)=(ning_20-ning_02)*(ning_20-ning_02)+4*ning_11*ning_11;*(output+2)=(ning_30-3*ning_12)*(ning_30-3*ning_12)+(3*ning_21-ning_03)*(3*ning_21-ning_03); *(output+4)=sum_00; return;}6.3匹配識別靜態(tài)手勢識別的定義就是在某時刻的輸入圖像中,能夠準(zhǔn)確識別出用戶的手部做出的是哪一種姿勢,其中模板匹配就是最具代表性的方法,因為這種識別方法相對于其他的方法來說實現(xiàn)起來更加的簡單方便,匹配速度更快。這種算法核心就是從輸入的待識別圖像提取出若干特征量和對應(yīng)的模板來比較,從而判斷待識別的歸類。我的匹配思路大致就是先在計算機(jī)里預(yù)先輸入幾個模板,并獲得這些模板的數(shù)據(jù),然后再輸入一張手勢圖像,也獲得這張圖像的數(shù)據(jù),然后對這輸入的圖像和各個模板逐個像素點求歐式距離,然后選取獲得歐式距離最小的那模板作為手勢識別的結(jié)果并輸出。歐式距離用來表征空間中兩點間的真實距離,對于n維空間上的點M和N,M和N之間的歐式距離可以表示為各目標(biāo)“點”與樣本點之間的歐式距離的大小。最后選擇一個與輸入圖像歐式距離最小的模板輸出即可。仿真結(jié)果計算機(jī)中識別流程計算機(jī)中手勢識別的流程一般是用攝像頭獲取原始圖像,然后對圖像進(jìn)行預(yù)處理,然后進(jìn)行手勢分割邊緣檢測等操作,最后用已輸入的模板和輸入的圖像進(jìn)行比較來完成識別,具體流程如圖6-2所示,圖6-2手勢識別流程圖仿真結(jié)果以下幾張圖片是我選擇的模板的圖片,如圖6-3所示,圖6-3手勢識別模板輸入一張圖片,然后獲得輸入圖像的RGB圖、灰度圖、二值化圖和邊緣檢測圖,如圖6-4所示,圖6-4運(yùn)行結(jié)果圖像這張輸入的圖片經(jīng)過運(yùn)行得出的結(jié)果和模板3最為匹配,于是輸出結(jié)果為手勢3。匹配結(jié)果如圖6-5所示,圖6-5匹配結(jié)果結(jié)論本文的主題是手部姿態(tài)識別的程序設(shè)計,主要的思路就是輸入一張經(jīng)過預(yù)處理的手部姿態(tài)圖片,然后根據(jù)這張圖片的手部姿態(tài)特征,如手指個數(shù)、手指之間的角度來進(jìn)行和模板的匹配,最終實現(xiàn)識別手勢的目的。這次使用MATLAB來進(jìn)行這次手勢識別的仿真的結(jié)果表明了這個程序具有一定的抗干擾能力和記憶能力,并且對一些手勢有識別能力,這種方法是一種有效的手勢識別方法,但是對于某一些圖片的識別可能會有一些誤差。這一次的畢業(yè)設(shè)計讓我對MATLAB的使用更加的深入,并且對MATLAB有了一個更全面的認(rèn)識,而且對手勢識別技術(shù)也有了一定的理解和掌握?,F(xiàn)在正是手勢識別進(jìn)行的火熱年代,如果能將這種識別技術(shù)應(yīng)用到我們的生活中就可以大大地提高我們生活的質(zhì)量,使人機(jī)交互更加的流暢和自然。我相信經(jīng)過手勢識別領(lǐng)域的研究人員們的不懈努力之下一定會將基于MATLAB的手勢識別技術(shù)推廣到各個領(lǐng)域中。附錄附錄A手勢識別源代碼closeall;clearall;clc;function[outputIma]=Sobel_Image(inputIma)Sobel_X=[-1,0,1,-2,0,2,-1,0,1];Sobel_Y=[1,2,1,0,0,0,-1,-2,-1];Threshold=90;[height,width]=size(inputIma);outputIma=zeros(height,width);fori=2:height-1forj=2:width-1temp1=Sobel_X(1)*inputIma(i-1,j-1)+Sobel_X(2)*inputIma(i-1,j)+Sobel_X(3)*inputIma(i-1,j+1)+...Sobel_X(4)*inputIma(i,j-1)+Sobel_X(5)*inputIma(i,j)+Sobel_X(6)*inputIma(i,j+1)+...Sobel_X(7)*inputIma(i+1,j-1)+Sobel_X(8)*inputIma(i+1,j)+Sobel_X(9)*inputIma(i+1,j+1);temp2=Sobel_Y(1)*inputIma(i-1,j-1)+Sobel_Y(2)*inputIma(i-1,j)+Sobel_Y(3)*inputIma(i-1,j+1)+...Sobel_Y(4)*inputIma(i,j-1)+Sobel_Y(5)*inputIma(i,j)+Sobel_Y(6)*inputIma(i,j+1)+...Sobel_Y(7)*inputIma(i+1,j-1)+Sobel_Y(8)*inputIma(i+1,j)+Sobel_Y(9)*inputIma(i+1,j+1);%temp3=sqrt(temp1*temp1+temp2*temp2);temp3=abs(temp1)+abs(temp2);if(temp3>Threshold)outputIma(i,j)=1;%BlackelseoutputIma(i,j)=0;%Whiteendendendendfunction[H1,H2,H3,perimeter]=OriginMoment(image)%以下是特征提取H1=int32(0);H2=int32(0);H3=int32(0);perimeter=int32(0);sum_00=int32(0);sum_01=int32(0);sum_10=int32(0);miu_00=int32(0);miu_20=int32(0);miu_11=int32(0);miu_02=int32(0);miu_21=int32(0);miu_12=int32(0);miu_30=int32(0);miu_03=int32(0);ning_20=int32(0);ning_02=int32(0);ning_21=int32(0);ning_12=int32(0);ning_11=int32(0);ning_30=int32(0);ning_03=int32(0);x_ba=int32(0);y_ba=int32(0);[height,width]=size(image);forx=1:heightfory=1:widthsum_00=sum_00+image(x,y);sum_01=sum_01+(y-1)*image(x,y);sum_10=sum_10+(x-1)*image(x,y);endendx_ba=sum_10/sum_00;%重心坐標(biāo)xy_ba=sum_01/sum_00;%重心坐標(biāo)ymiu_00=sum_00;perimeter=miu_00;forx=1:heightfory=1:widthmiu_11=miu_11+(x-x_ba-1)*(y-y_ba-1)*image(x,y);miu_20=miu_20+(x-x_ba-1)*(x-x_ba-1)*image(x,y);miu_02=miu_02+(y-y_ba-1)*(y-y_ba-1)*image(x,y);miu_21=miu_21+(x-x_ba-1)*(x-x_ba-1)*(y-y_ba-1)*image(x,y);miu_12=miu_12+(x-x_ba-1)*(y-y_ba-1)*(y-y_ba-1)*image(x,y);miu_30=miu_30+(x-x_ba-1)*(x-x_ba-1)*(x-x_ba-1)*image(x,y);miu_03=miu_03+(y-y_ba-1)*(y-y_ba-1)*(y-y_ba-1)*image(x,y);endendning_20=miu_20/(miu_00*miu_00);ning_02=miu_02/(miu_00*miu_00);ning_11=miu_11/(miu_00*miu_00);ning_21=miu_21/(miu_00*miu_00);ning_12=miu_12/(miu_00*miu_00);ning_30=miu_30/(miu_00*miu_00);ning_03=miu_03/(miu_00*miu_00);H1=ning_20+ning_02;H2=(ning_20-ning_02)*(ning_20-ning_02)+4*ning_11*ning_11;H3=(ning_30-3*ning_12)*(ning_30-3*ning_12)+(3*ning_21-ning_03)*(3*ning_21-ning_03);endarea=int32(0);%面積perimeter=int32(0);%周長%讀進(jìn)圖像[filename,pathname]=uigetfile({'*.bmp';'*.jpg';'*.gif'},'選擇圖片');RGB_data=imread([pathname,filename]);[ROW,COL,DIM]=size(RGB_data);%提取圖片的行列數(shù)R_data=sin

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論