VCmatlab混合編程快速提取數(shù)字圖像特征值_第1頁(yè)
VCmatlab混合編程快速提取數(shù)字圖像特征值_第2頁(yè)
VCmatlab混合編程快速提取數(shù)字圖像特征值_第3頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡(jiǎn)介

1、VC+/matlab混合編程快速提取數(shù)字圖像特征值2008-06-12 17:021、引言VC+是流行的通用程序設(shè)計(jì)語(yǔ)言,靈活高效,使用其MFC進(jìn)行面向?qū)ο缶幊?,可以快捷地完成windows風(fēng)格的人機(jī)交互界面設(shè)計(jì)。matlab是一種數(shù)值計(jì)算能力很強(qiáng)的面向科學(xué)應(yīng)用的軟件,以矩陣為基本數(shù)據(jù)結(jié)構(gòu)進(jìn)行運(yùn)算,語(yǔ)法簡(jiǎn)潔。matlab針對(duì)科學(xué)研究工作的實(shí)際需要,由各領(lǐng)域?qū)<议_(kāi)發(fā)了若干工具箱(函數(shù)庫(kù)),極大地方便了科研工作。在數(shù)字圖像處理領(lǐng)域,其圖像處理工具箱中現(xiàn)有200多個(gè)工具,可以實(shí)現(xiàn)大部分處理算法。如果將VC與matlab優(yōu)勢(shì)結(jié)合,進(jìn)行混合編程,可以大幅度提高編程效率而不失靈活性、可靠性。特征值的選擇和

2、提取是由圖像分析過(guò)程中的一個(gè)主要環(huán)節(jié),是實(shí)現(xiàn)圖像理解的前提。matlab以矩陣為基本數(shù)據(jù)結(jié)構(gòu),對(duì)處理圖像這種二維數(shù)據(jù)具有編程效率上的先天優(yōu)勢(shì)。在很多預(yù)處理算法日漸成熟的今天,我們希望用更簡(jiǎn)便的方法來(lái)實(shí)現(xiàn)圖像特征值的提取,從而將研究重點(diǎn)放到圖像分析和理解上。2、接口實(shí)現(xiàn)及相關(guān)函數(shù)介紹鑒于VC程序界面友好,通用性好,VC/matlab混合編程一般都采用從VC中調(diào)用matlab函數(shù)的方式。實(shí)現(xiàn)二者的結(jié)合有多種方法。本文采用matlab引擎的方法,這種方法的特點(diǎn)是操作簡(jiǎn)便,不需要進(jìn)行過(guò)多的設(shè)置和轉(zhuǎn)換,也不需要對(duì)matlab的程序結(jié)構(gòu)有較深研究,只要熟悉matlab工具箱中相關(guān)函數(shù)即可。缺點(diǎn)是工作環(huán)境內(nèi)

3、必須安裝matlab環(huán)境,另外程序運(yùn)行時(shí)會(huì)啟動(dòng)matlab進(jìn)程,影響了速度。VC中調(diào)用matlab語(yǔ)言實(shí)現(xiàn)圖像處理的示例程序如下(運(yùn)行環(huán)境VC+6.0,matlat6.5):Engine *ep;/定義引掣指針if(!(ep=engOpen(NULL) exit(1); /打開(kāi)引掣mxArray *input=NULL,*num=NULL;/mxArray是專用數(shù)據(jù)結(jié)構(gòu),必須用此結(jié)構(gòu)與引掣區(qū)傳遞數(shù)據(jù),這里定義二個(gè)數(shù)據(jù)input用來(lái)傳遞圖像數(shù)據(jù),num用來(lái)傳遞參數(shù)值const int dims2=GetWidth(),GetHeight();/定義二維數(shù)組大小,即VC中像素區(qū)大小input=mx

4、CreateNumericArray(2,dims,mxUINT8_CLASS,mxREAL);/建立相應(yīng)大小數(shù)據(jù)區(qū)num=mxCreateDoubleMatrix(1,1,mxREAL);/單值參數(shù)也要定義成矩陣形式memcpy(mxGetPr(input),m_pData,high*wide*sizeof(byte);/將VC中數(shù)據(jù)賦值給matlab可識(shí)別的變量engPutVariable(ep,"input",input);/放入引掣,準(zhǔn)備調(diào)用matlab函數(shù)進(jìn)行計(jì)算,并命以別名engPutVariable(ep,"num",num);engEva

5、lString(ep,"input=im2bw(input,graythresh(input)");/在引掣中執(zhí)行matlab命令進(jìn)行二值化engEvalString(ep,"num=bwarea(input);");/matlab函數(shù)計(jì)算面積大小input=engGetVariable(ep,"input"); num=engGetVariable(ep,"num");/處理后結(jié)果出引掣double *result=mxGetPr(num); double real=result0;/得到面積值 mxDestro

6、yArray(input); mxDestroyArray(num); /釋放內(nèi)存engClose(ep);/關(guān)閉引掣通過(guò)以上幾句程序就實(shí)現(xiàn)了VC與matlab的交互。本方法的基本思想是:對(duì)于圖像的讀取、顯示、儲(chǔ)存等基本輸入輸出操作采用VC實(shí)現(xiàn),完全采用VC界面,matlab完全在后臺(tái)運(yùn)行。在需要調(diào)用matlab函數(shù)進(jìn)行圖像處理時(shí),將VC中的圖像數(shù)據(jù)轉(zhuǎn)換為matlab可識(shí)別的格式并裝入引掣區(qū),調(diào)用matlab的圖像處理函數(shù)進(jìn)行運(yùn)算,并將結(jié)果轉(zhuǎn)換后復(fù)制回VC。在進(jìn)行下一步圖像分析時(shí),可利用VC的ODBC功能,將特征數(shù)據(jù)直接轉(zhuǎn)入access等數(shù)據(jù)庫(kù)中。以下介紹幾個(gè)與特征提取密切相關(guān)的matlab函

7、數(shù),為簡(jiǎn)便起見(jiàn),省略輸入輸出參數(shù)。帶星號(hào)的函數(shù)為參考文獻(xiàn)1所自帶,其非商業(yè)版本可以在該書(shū)網(wǎng)站免費(fèi)下載。regionprops(),imfeature(),區(qū)域的特征度量.輸出區(qū)域的若干特征值;mean2(), std2(), corr2()二維數(shù)組的摘要統(tǒng)計(jì)值:均值,標(biāo)準(zhǔn)差,相關(guān)系數(shù);bwlabel() 將二值化圖像作區(qū)域標(biāo)記,同時(shí)返回標(biāo)記區(qū)域塊數(shù);fft2(),dct2(), 快速傅立葉變換和離散余弦變換,可以求頻域特征*statxture();紋理特征計(jì)算,返回平均值,標(biāo)準(zhǔn)差,平滑度,直方圖偏斜度,均勻性,紋理熵;* invmoments() 可計(jì)算出七個(gè)不變矩;*specxture()頻

8、譜特征,計(jì)算S(r)和S()*polyangles()計(jì)算多邊形區(qū)域各頂點(diǎn)內(nèi)角值上述函數(shù)可以直接計(jì)算二十個(gè)左右特征值,另外通過(guò)這些值之間的運(yùn)算,可以求出更多的值。3、實(shí)例介紹/input為灰度圖像數(shù)據(jù)engEvalString(ep,"num=statxture(input);"); /調(diào)用statxture計(jì)算灰度差分紋理值num=engGetVariable(ep,"num");/提取計(jì)算結(jié)果,是包含七個(gè)值的數(shù)據(jù)結(jié)構(gòu)double *result=mxGetPr(num);m_mean1=result0;/第一項(xiàng),平均灰度  

9、60; m_std1=result1;/第二項(xiàng),標(biāo)準(zhǔn)差(對(duì)比度m_smooth=result2;/第三項(xiàng),平滑度    m_tm=result3;/第四項(xiàng),三階矩    m_asm1=result4;/第五項(xiàng),慣性矩(均衡度)m_ent1=result5;/第六項(xiàng),熵/下面二值化計(jì)算形狀特征engEvalString(ep,"input=im2bw(input,graythresh(input);”);自動(dòng)計(jì)算閾值進(jìn)行二值化engEvalString(ep,"input=bwareaopen(output,1500

10、);");形態(tài)學(xué)處理去除小面積區(qū)域engEvalString(ep,"output=imfill(output,'holes');");填補(bǔ)最大面積區(qū)域內(nèi)的空洞    engEvalString(ep,"output=bwlabel(output);");/區(qū)域標(biāo)記后再調(diào)用props /以下調(diào)用matlab的regionprops求幾何形狀特征    engEvalString(ep,"a=regionprops(output,'all');n

11、um=a.Area;");num=engGetVariable(ep,"num");/獲得面積值result=mxGetPr(num);m_area=result0;/面積值存入VC數(shù)據(jù)   engEvalString(ep,"num=a.Eccentricity;");num=engGetVariable(ep,"num");/獲得偏心率值result=mxGetPr(num);m_ecc=result0;/同理可求出長(zhǎng)度,寬度值,質(zhì)心坐標(biāo)值,矩形度等若干特征值4、 小結(jié)及討論提取特征值前,要進(jìn)行圖像預(yù)處理,如圖像增強(qiáng)及分割等,可以使用matlab的圖像處理工具,快速實(shí)現(xiàn)相關(guān)功能。用matlab進(jìn)行圖像預(yù)處理,通常在1個(gè)子函數(shù)內(nèi)就可全部完成,與VC相比大大節(jié)省了編程量,節(jié)約了時(shí)間,減少了出錯(cuò)的可能。matlab的工具箱是開(kāi)放的系統(tǒng),隨版本升級(jí)也在不斷擴(kuò)充。使用者,完全可以根據(jù)需要自己開(kāi)發(fā)相應(yīng)的matlab不函數(shù),加入自己的工具箱使用。對(duì)于指紋、車牌、人臉等特征的提取,均可根據(jù)各自不同的需要使用matlab技術(shù)進(jìn)行圖像預(yù)處理。使用混編要選擇matlab中語(yǔ)法簡(jiǎn)單而功能強(qiáng)大的函數(shù),對(duì)于涉

溫馨提示

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

評(píng)論

0/150

提交評(píng)論