版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、基于VC與Matlab的混合編程實(shí)現(xiàn)圖像的三維顯示陳翔 李進(jìn)文 吳小雅(廣州氣象衛(wèi)星地面站 廣州 510640)摘 要 本文介紹了VC+與Matlab混合編程的一般實(shí)現(xiàn)方法,并實(shí)現(xiàn)對(duì)二維影像圖的三維效果顯示。關(guān)鍵詞 VC+ MATLAB M文件 三維顯示引言 通常我們看到的圖像是二維狀態(tài)下的,而在某些特殊領(lǐng)域需要根據(jù)三維影像才能做出更進(jìn)一步的信息抽取,這就需要通過后處理的手段根據(jù)原始二維影像虛擬出其三維效果。MATLAB既是一種直觀、高效的計(jì)算機(jī)語(yǔ)言,同時(shí)又是一個(gè)科學(xué)計(jì)算平臺(tái)。它為數(shù)據(jù)分析和數(shù)據(jù)可視化、算法和應(yīng)用程序開發(fā)提供了最核心的數(shù)學(xué)和高級(jí)圖形工具。根據(jù)它提供的500多個(gè)數(shù)學(xué)和工程函數(shù),工
2、程技術(shù)人員和科學(xué)工作者可以在它的集成環(huán)境中交互或編程以完成各自的計(jì)算。MATLA具有強(qiáng)大的矩陣運(yùn)算、數(shù)據(jù)處理和圖形顯示功能,其輸出結(jié)果可視化,編程效率極高,極少的代碼即可實(shí)現(xiàn)復(fù)雜的運(yùn)行.然而其邊解釋邊執(zhí)行,運(yùn)算效率較低,實(shí)現(xiàn)相同功能的代碼跟其他編程平臺(tái)相比運(yùn)行時(shí)間相對(duì)較長(zhǎng),且不適合作為通用的編程平臺(tái)。因此,為系統(tǒng)整體效率考慮,采取具有很高編程效率的通用編程平臺(tái)VC+與Matlab混合編程的方式,將更有助于發(fā)揮Matlab和VC的各自優(yōu)勢(shì)。1 VC+與Matlab幾種常用的集成方法 Matlab與VC+混合編程的具體方式有多種,根據(jù)Matlab是否運(yùn)行可大致分為兩類:Matlab在后臺(tái)運(yùn)行和可以
3、脫離Matlab環(huán)境運(yùn)行。Matlab 5.0以后版本均自帶C/C+編譯器,可將其程序文件(M文件)轉(zhuǎn)換為C-MEX或C/C+程序。 第一種方式是Matlab引擎采用客戶機(jī)/服務(wù)器的計(jì)算方式,通過Windows的ActivcX通道和Matlab接口。在具體的應(yīng)用中,VC的程序作為前端客戶機(jī),通過調(diào)用Matlab引擎在后臺(tái)與Matlab服務(wù)器建立連接,實(shí)現(xiàn)動(dòng)態(tài)通信。這種方法實(shí)現(xiàn)較為簡(jiǎn)單,不要求連接整個(gè)Matlab,只需要嵌入必要的Matlab引擎庫(kù),可大大地節(jié)省系統(tǒng)資源,但這種Matlab在后臺(tái)運(yùn)行,運(yùn)行效率低下。 第二種方式是使用Mathtools公司推出的Matlab集成編譯開發(fā)平臺(tái)Mide
4、va,它提供了對(duì)M文件的解釋執(zhí)行和開發(fā)環(huán)境支持。經(jīng)過簡(jiǎn)單設(shè)置后Mideva可以將M源文件轉(zhuǎn)換為C/C+,然后添加到VC+工程中。 也可以先利用Mideva直接生成EXE文件(方法是啟動(dòng)Mideva,在菜單File-Compile to exe中, 選出需要轉(zhuǎn)換的M文件),然后在VC+中通過shellexec()或winexec()等外部函數(shù)完成Shell調(diào)用。這種方法簡(jiǎn)單方便,但運(yùn)行時(shí)出現(xiàn)一個(gè)控制臺(tái)窗口,而且由于VC和Matlab之間不能交互,通用性差。 第三種方式是通過Mablab編譯器將其m文件轉(zhuǎn)換成為C/C+代碼文件并生成必要的dll庫(kù)后再通過VC+編譯器生成可獨(dú)立執(zhí)行的應(yīng)用程序,這種方
5、式可以直接調(diào)用其中的庫(kù)函數(shù),生成并發(fā)布不必依賴Matlab的可執(zhí)行文件。在建立好函數(shù)m文件(不能是腳本m文件)后,用mcc命令將其轉(zhuǎn)換為C+代碼,命令行參數(shù)如下(假定m文件為test.m):mcc -t -L Cpp test.m然后繼續(xù)生成動(dòng)態(tài)鏈接庫(kù)函數(shù):mcc -t -W lib:test2 -T link:lib test.m 需要注意的是,lib:后跟生成的庫(kù)文件名不能和原m文件名相同(此處為test2),而且此處只能生成C語(yǔ)言方式的動(dòng)態(tài)鏈接庫(kù)。該編譯命令共生成9個(gè)文件,其中test.lib和test.dll是可以在C/C+應(yīng)用程序中調(diào)用的動(dòng)態(tài)鏈接庫(kù)文件。 最后一種方式是通過Matla
6、b Add-in實(shí)現(xiàn)Matlab與VC的混合編程,這是最方便的也是本文下面將要使用的集成方式。在Matlab 6.0以后版本對(duì)其編譯器作了較大的改進(jìn),其支持更多的數(shù)據(jù)類型,更強(qiáng)的優(yōu)化功能,更為重要的是其Matlab Add-in提供了一個(gè)Matlab和VC直接集成的途徑。它具有一些新的特征:快速集成M文件到C+工程中,創(chuàng)建獨(dú)立的 C/C+應(yīng)用程序或C MEX DLL;通過M文件創(chuàng)建共享庫(kù)或MEX文件;內(nèi)含Visual Matrix Viewer,調(diào)試過程中可以查看矩陣變量的值; 直接修改M源文件而不是修改生成的C/C+文件;方便快捷地打包應(yīng)用程序等。下面給出Matlab Add-in的具體安裝
7、步驟:1. 1 啟動(dòng)Matlab,運(yùn)行mex-setup,按照菜單提示選取MSVC。它將配置MEX使用VC為默認(rèn)的編譯器(創(chuàng)建C-MEX文件必需),并安裝Matlab Add-in所需文件到VC目錄。 1.2. 在Matlab環(huán)境下運(yùn)行mbuild-setup, 按提示選取MSVC。它將配置使用VC為默認(rèn)的編譯器(創(chuàng)建獨(dú)立應(yīng)用程序必需),并安裝Matlab Add-in所需的Matlab Compiler和C/C+數(shù)學(xué)庫(kù)文件到VC目錄。 1.3. 在Matlab環(huán)境下運(yùn)行cd(prefdir)和mccsavepath。它將保存當(dāng)前Matlab路徑到mccpath文件中,這是因?yàn)镸atlab A
8、dd-in脫離Matlab運(yùn)行,否則它無(wú)從知道Matlab路徑。 1.4. 啟動(dòng)VC環(huán)境,從菜單Tools - Customize選擇Add-ins and Macro Files選項(xiàng)卡,選中Matlab Add-in, 點(diǎn)擊Close。VC工具欄出現(xiàn)Matlab Add-in圖標(biāo),完成Matlab Add-in的配置,以后每次啟動(dòng)VC將自動(dòng)加載Matlab Add-in。1.5. 配置Windows系統(tǒng)。如果是Windows 95/98系統(tǒng),找到config.sys, 添加一行:shell= c: /e:32768 /p;如果是Windows ME則需設(shè)置Conagent.exe的屬性Mem
9、ory選項(xiàng)卡的Initial Environment值為4096。2 三維顯示程序的創(chuàng)建 三維顯示處理的核心部分由Matlab實(shí)現(xiàn),首先通過imread()與imfinfo()函數(shù)得到圖象點(diǎn)陣數(shù)據(jù)及其大小,在meshgrid()創(chuàng)建相應(yīng)的網(wǎng)格后以圖象灰度值作為高度坐標(biāo)值,并通過meshc()進(jìn)行三維網(wǎng)格繪制,最后由surf()完成表面繪制。具體實(shí)現(xiàn)代碼如下:% 讀取圖象數(shù)據(jù)到矩陣A, map = imread(input.bmp);% 得到圖象信息info = imfinfo(input.bmp);w = info.Width;h = info.Height;% 創(chuàng)建與圖象大小相對(duì)應(yīng)的網(wǎng)格x,
10、y = meshgrid(1:w,1:h);z = x - y + y - x;i = 1;j = 1;% 用圖象灰度值填充高度值while (i - 1) * w + j wj = 1;i = i + 1;end end;% 繪制三維圖象meshc(x,y,z);% 繪制表面surf(x,y,z,FaceColor,interp,EdgeColor,none,FaceLighting,phong)此m文件創(chuàng)建完畢后,啟動(dòng)VC+,創(chuàng)建一個(gè)Matlab Project Wizard工程,選擇所生成的應(yīng)用程序的類型為Windows Console EXE、C+程序、Debug模式、生成Main函數(shù)
11、、需要圖形支持。點(diǎn)擊Finish后在出現(xiàn)的對(duì)話框中將剛創(chuàng)建的M文件添加到工程,這時(shí)VC將調(diào)用MCC生成一個(gè)混合M文件和C+的工程。在File View選項(xiàng)卡中可以看到添加的M文件和自動(dòng)生成的C+文件。 編譯運(yùn)行后,將能夠?qū)崿F(xiàn)二維圖像的三維顯示。3 在主程序中完成對(duì)三維顯示程序的調(diào)用 由于上述三維顯示程序只是整個(gè)系統(tǒng)中的一個(gè)部分,因此還需要在主程序中通過CreateProcess()完成對(duì)其進(jìn)程的創(chuàng)建:char cCommandLineMAX_PATH;PROCESS_INFORMATION pi;STARTUPINFO si = sizeof(si);/ 啟動(dòng)子進(jìn)程CString sComma
12、ndLine = GetCurPath() + LandmineShower.exe;:strcpy(cCommandLine, sCommandLine);CreateProcess(NULL, cCommandLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);三維顯示程序是一個(gè)控制臺(tái)程序。如果需要隱藏其界面,可以在其進(jìn)程創(chuàng)建完畢之后通過FindWindow()函數(shù)找到其窗口句柄并進(jìn)而通過向ShowWindow()指定該窗口句炳來實(shí)現(xiàn):Sleep(100);/ 關(guān)閉子進(jìn)程的主線程句柄CloseHandle(pi.hThread);/ 隱藏控制臺(tái)窗口m_hwnd3DShower = :FindWindow(NULL, sCommandLine);if (m_hwnd3DShower != NULL):ShowWindow(m_hwnd3DShower, SW_HIDE);4小結(jié)混合編程是綜合使用多種開發(fā)工具技術(shù)優(yōu)勢(shì)的一種常用手段,本文通過對(duì)VC+和Matlab的集成開發(fā),以精練的代碼和較高的運(yùn)行效率實(shí)現(xiàn)了對(duì)二維遙感影像的三維效果顯示。通過本文所述Matlab與VC+集成開發(fā)方法,讀者可以自行對(duì)其他類似程序進(jìn)行開發(fā)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度龐寒離婚協(xié)議書:情感糾葛與財(cái)產(chǎn)分配協(xié)議4篇
- 二零二五版戶外用品銷售代理及品牌合作合同2篇
- 2025年度幕墻施工勞務(wù)分包合同施工資料管理與歸檔范本4篇
- 臨時(shí)場(chǎng)地租賃協(xié)議2024版3篇
- 二零二五年度農(nóng)家樂餐飲承包合作協(xié)議3篇
- 二零二五年度年薪制員工聘用合同書:行業(yè)特定版
- 二零二五年度居民供水用水節(jié)能減排合同范本3篇
- 2025年度生物制藥研發(fā)人員聘用勞動(dòng)合同范本3篇
- 2025年度個(gè)人小戶型房產(chǎn)買賣合同附帶房產(chǎn)過戶手續(xù)指導(dǎo)3篇
- 2025年食品生產(chǎn)HACCP體系審核與認(rèn)證協(xié)議2篇
- 大疆80分鐘在線測(cè)評(píng)題
- 2023年成都市青白江區(qū)村(社區(qū))“兩委”后備人才考試真題
- 2024中考復(fù)習(xí)必背初中英語(yǔ)單詞詞匯表(蘇教譯林版)
- 海員的營(yíng)養(yǎng)-1315醫(yī)學(xué)營(yíng)養(yǎng)霍建穎等講解
- 《現(xiàn)代根管治療術(shù)》課件
- 肩袖損傷的護(hù)理查房課件
- 2023屆北京市順義區(qū)高三二模數(shù)學(xué)試卷
- 公司差旅費(fèi)報(bào)銷單
- 我國(guó)全科醫(yī)生培訓(xùn)模式
- 2021年上海市楊浦區(qū)初三一模語(yǔ)文試卷及參考答案(精校word打印版)
- 八年級(jí)上冊(cè)英語(yǔ)完形填空、閱讀理解100題含參考答案
評(píng)論
0/150
提交評(píng)論