• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于MATLAB與C/C++混合編程的數(shù)字圖像處理實驗教學研究

      2017-07-18 11:52:49魏毅林麗惠
      武夷學院學報 2017年6期
      關鍵詞:調用編程混合

      魏毅,林麗惠

      (武夷學院數(shù)學與計算機學院,福建武夷山354300)

      基于MATLAB與C/C++混合編程的數(shù)字圖像處理實驗教學研究

      魏毅,林麗惠

      (武夷學院數(shù)學與計算機學院,福建武夷山354300)

      針對數(shù)字圖像處理實驗教學難度大的問題,提出一種基于MATLAB與C/C++語言混合編程的數(shù)字圖像處理實驗教學方法。該方法用MATLAB編寫圖形用戶界面、主流圖像格式的讀寫函數(shù)、統(tǒng)計圖表的生成函數(shù),用C/C++語言編寫數(shù)字圖像處理的核心算法,并用MATLAB的編譯器將C/C++程序轉換為MATLAB環(huán)境中的可執(zhí)行程序。這種以MATLAB為主框架、C/C++為子框架的架構能充分發(fā)揮MATLAB和C/C++語言在數(shù)字圖像處理實驗中的優(yōu)勢,增強數(shù)字圖像處理實驗的可實踐性,降低非核心實驗內容的實踐難度,有效提高學生在數(shù)字圖像處理方面的技能。

      數(shù)字圖像處理;MATLAB與C/C++混合編程技術;實驗教學

      數(shù)字圖像處理是計算機工程、電子工程、自動化等學科的一門重要專業(yè)課程。數(shù)字圖像處理涉及大量的復雜數(shù)學推導,對于應用型本科院校的學生而言,很難通過對數(shù)學推導的學習來直觀地理解數(shù)字圖像處理算法的核心思想。因此,學生動手編寫數(shù)字圖像處理算法的代碼對于提升他們對算法的理解就尤為必要。

      目前有兩種數(shù)字圖像處理實驗教學模式。1)基于MATLAB數(shù)字圖像處理工具箱的模式。MATLAB是美國MathWorks公司出品的商業(yè)數(shù)學軟件,主要用于數(shù)值計算、數(shù)據(jù)分析與可視化、算法原型開發(fā)等。它具有簡潔的腳本語言、良好的圖形化界面、強大的統(tǒng)計圖表制作與顯示功能,初學者易于上手學習。MTALAB數(shù)字圖像處理工具箱實現(xiàn)了常見的數(shù)字圖像處理算法,已在很多教學實驗中得到應用[1-4]。該模式優(yōu)點在于學生能使用工具箱的API(application programming interface)快速看到圖像處理算法的實現(xiàn)效果,但缺點在于MATLAB采用解釋型的腳本語言,其程序的執(zhí)行速度相較于編譯型語言,如C語言,要較慢很多,此外,它的可移植性也不佳,因此不適合在實際的工程項目中應用。2)基于C/C++語言的模式。該模式使用C/C++語言編寫圖像處理算法[5-6],或使用第三方庫,如OpenCV[7]。該模式的優(yōu)點在于能通過編寫數(shù)字圖像處理算法的底層代碼來了解算法的思想,并且基于C/C++語言編寫的代碼具有很高的執(zhí)行效率和較好的跨平臺性,適用于實際工程項目的開發(fā)。該模式的缺點在于需要編寫大量的代碼來處理多種主流圖片格式的輸入/輸出,掌握MFC(microsoft foundation class)或者QT等用戶界面的開發(fā)工具來生成用戶友好的界面以及各類統(tǒng)計圖表的展示。這些非數(shù)字圖像處理核心的代碼編寫任務是繁重的,對于非計算機專業(yè)的學生而言更是如此。

      基于MATLAB與C/C++混合編程的數(shù)字圖像處理實驗教學是解決上述問題的一種有效方法。該方法用MATLAB編寫圖像用戶界面、主流圖像格式的讀寫、統(tǒng)計分析圖表的生成,用C/C++言語編寫圖像處理的核心算法,充分發(fā)揮MATLAB和C/C++語言在數(shù)字圖像處理實驗中的優(yōu)勢。這種以MATLAB為主框架、C/C++為子框架的程序架構提升了實驗的可動手性,降低了實驗中非核心內容的實踐難度。事實上,基于MATLAB與C/C++混合編程的模式是解決工程與研究問題的一種有效方法,已在機械動態(tài)仿真[8]、電力系統(tǒng)負荷計算[9]、圖像處理[10]等方面得到廣泛應用。學生通過實踐基于MATLAB與C/C++混合編程的數(shù)字圖像處理實驗,將使其掌握這種在工程項目開發(fā)中的先進技術。

      1 MATLAB與C/C++混合編程方法

      MATLAB與C/C++混合編程分為兩類:MATLAB調用C/C++和C/C++調用MATLAB。主要關注MATLAB調用C/C++的方法,C/C++調用MATLAB的方法本文不涉及,相關內容可參閱文獻[11]。在MATLAB環(huán)境下調用C/C++程序需要借助MATLAB編譯器將C/C++程序編譯為MEX(MATLAB Executable)文件,然后在MATLAB命令提示符下鍵入MEX文件的文件名就完成了對C/C++程序的間接調用。圖1以example.c的C/C++程序為例,說明整個流程。

      圖1 MATLAB環(huán)境下調用C/C++程序的流程Figure 1 The flow of calling a C/C++program in MATLAB

      C/C++程序需要包括兩個指定的部分:頭文件信息,#include“mex.h”;入口函數(shù):mexFunction。mex-Function函數(shù)的作用與C/C++中main函數(shù)的功能類似,它是MATLAB與C/C++語言之間的接口。例如,在文件example.c中寫入圖2中的C/C++代碼,然后在MATLAB中執(zhí)行命令mex example.c,則在與文件example.c相同的目錄下就生成了example.mexw64文件,這是編譯成功的MEX文件。

      圖2 example.c文件Figure 2 The file of example.c

      mexFunction函數(shù)中的參數(shù)含義有如下4點。1)int nlhs:輸出參數(shù)的個數(shù);2)mxArray*plhs[]:輸出參數(shù)的mxArray數(shù)組;3)int nrhs:輸入?yún)?shù)的個數(shù);4)mxArray*prhs[]:輸入?yún)?shù)的mxArray數(shù)組。假設在MATLAB環(huán)境中調用example函數(shù):[Out1,Out2]=example(In1,In2,In3)。則example函數(shù)輸入?yún)?shù)的對應關系是:prhs[0]←In1,prhs[1]←In2,prhs[2]←In3;example函數(shù)輸出參數(shù)的對應關系是:plhs[0]→Out1,plhs[1]→Out2;nlhs是2,nrhs是3。用C/C++編寫代碼的關鍵之處在于mexFunction函數(shù)中MATLAB與C/C++之間的數(shù)據(jù)交換。MATLAB規(guī)定所有數(shù)據(jù)類型均可用mxArray描述,并且mexFunction函數(shù)的所有輸入輸出參數(shù)均采用mxArray來定義。MATLAB提供多個以mex為前綴的API將mxArray類型的數(shù)據(jù)轉化為C/C++可直接使用的基本數(shù)據(jù)類型,如int、char、double等[11]。MATLAB調用C/C++的規(guī)范簡單易懂,學生動手實驗幾個實例之后就可掌握。

      2 數(shù)字圖像處理實驗的內容設置

      目前開設數(shù)字圖像處理課程的理工科專業(yè)越來越多,涵蓋了計算機工程、電子工程、自動化、數(shù)字媒體等。根據(jù)人才培養(yǎng)方案的目標,不同專業(yè)安排的實驗教學課時通常在10~24課時之間。為兼顧基本知識面與擴展知識點,將實驗內容分成8個實驗單元,每個實驗單元的課時為2~4個。8個實驗單元中的6個單元構成實驗的基本模塊,2個單元構成實驗的進階模塊,教師可根據(jù)學生專業(yè)需求安排具體的實驗單元(圖3)。

      圖3 數(shù)字圖像處理實驗的內容Figure 3 The content of digital image processing experiments

      8個單元涵蓋的實驗內容如下:

      1)圖像點運算模塊,線性變換、閾值變換、窗口變換和灰度拉伸等;

      2)圖像幾何變換模塊,圖像平移、圖像縮放、圖像鏡像變換和圖像旋轉等;

      3)圖像頻域變換模塊,傅里葉變換、離散余弦變換、沃爾什變換、哈達瑪變換和小波變換等;

      4)圖像編碼模塊,哈夫曼編碼、香農(nóng)編碼、行程編碼、算術編碼和JPEG編碼等;

      5)圖像恢復模塊,逆濾波、Wiener濾波、約束最小二乘濾波和盲解卷積等;

      6)圖像增強模塊,空間濾波、圖像平滑、圖像銳化、頻域濾波和偽彩色增強等;

      7)圖像分割模塊,基于閾值的分割、基于邊緣的分割和基于區(qū)域的分割等;

      8)圖像特征提取模塊,圖像幾何特征描述、圖像形狀特征描述和圖像區(qū)域特征描述等。

      考慮到不同專業(yè)的實踐要求,實驗可按圖4所示的雙軌制方法進行。例如,對于計算機工程專業(yè)的學生,采用MATLAB與C/C++混合編程的方法進行實驗,并將實驗結果與直接調用MATLAB數(shù)字圖像處理工具箱中API的運行結果進行對比,以加深對算法原理的理解。對于數(shù)字媒體專業(yè)的學生,只需調用MATLAB數(shù)字圖像處理工具箱中的API進行實驗,以使他們對算法原理和處理結果有直觀理解,而不過多強調編程技巧。

      圖4 數(shù)字圖像處理實驗的雙軌制方法Figure 4 The double-track method for digital image processing experiment

      3 實驗案例

      以數(shù)字圖像處理中的線性變換算法為例,按照MATLAB規(guī)范,用C/C++編寫數(shù)字圖像的線性變換程序(圖5),然后將該程序與MATLAB數(shù)字圖像處理工具箱的API函數(shù)imadjust進行對比,觀察它們對同一組輸入?yún)?shù)的輸出結果。實驗步驟如下:

      1)創(chuàng)建名為testMEX.c的文件,然后在其中寫入下述步驟2、3的代碼;

      2)用C/C++編寫數(shù)字圖像處理函數(shù)imadjustbyC,其函數(shù)形式參考API函數(shù)imadjust(I,[low_in;hign_in],[low_out;high_out]),寫為void imadjustbyC(double*img,int len,double low_in,double hig_in,double low_out,double hig_out)。參數(shù)double*img指向存放圖像數(shù)據(jù)的首地址,int len是圖像數(shù)據(jù)包含的像素個數(shù),double low_in、double hig_in、double low_out、double hig_out與imadjust中的含義一致;

      3)按照MATLAB規(guī)范,編寫固定頭格式的函數(shù)void mexFunction(int nlhs,mxArray*plhs[],int nrhs,constmxArray*prhs[])。該函數(shù)把輸入的數(shù)據(jù)轉化為C/C++可識別的格式,然后再調用imadjustbyC函數(shù)對轉換格式后的輸入數(shù)據(jù)進行處理,最后將處理結果按MATLAB規(guī)范返回。這其中用到的函數(shù)mxGetM、mxGetN、mxGetPr、mxCreateDoubleMatrix均是MATLAB提供的API,細節(jié)可參閱MATLAB的外部程序接口手冊[12];

      4)在MATLAB中輸入命令mex testMEX.c,編譯成功后,生成了可在MATLAB環(huán)境中直接調用的模塊testMEX.mexw64;

      5)調用testMEX.mexw64和imadjust對數(shù)字圖像處理實驗中的一幅標準圖片(圖6a)進行處理,對比實驗結果。調用語句如下:

      >>A=imread('cameraman.tif');

      >>B=uint8(testMEX(double(A),0.5,0.9,0,1));

      >>D=imadjust(A,[0.5 0.9],[0 1]);

      圖6b和圖6c給出了兩種方法的處理結果。為比較這兩個結果是否一致,首先將矩陣B和D相減,然后輸出其中絕對值最大的元素。命令語句如下:

      電力系統(tǒng)負荷計算研究[J].大連海事大學學報,2013,39(1):103-106.

      [10]范芳蕾,李亮玉,周鑫,等.基于VC++與Matlab混合編程的焊接熔池圖像處理[J].天津工業(yè)大學學報,2007,26(4):51-53.

      [11]劉維.精通Matlab與C/C++混合程序設計[M]四版.北京:北京航天航空大學出版社,2015.

      [12]The MathWorks,Inc.MATLAB External Interfaces Reference(R2017a)[EB/OL].(2017-03-01)[2017-03-30].https://www.mathworks.com/help/pdf_doc/matlab/apiext.pdf.

      (責任編輯:葉麗娜)

      Research on Experimental Teaching of Digital Image Processing Based on M ixed Programm ing Technology of MATLAB and C/C++

      WEIYi,LIN Lihui
      (School ofMathematics and Computer,WuyiUniversity,Wuyishan,Fujian 354300)

      An experimental teachingmethod based onmixed programming technology of MATLAB and C/C++is proposed to solve the difficulty of practice teaching on digital image processing.In thismethod,the graphical user interface,the input/output functions formainstream images’formats and the functions for creating statistical charts are coded by MATLAB.The key algorithms are coded by C/C++and these C/C++programs are compiled into executable files by MATLAB Compiler.This framework in which MATLAB ismaster and C/C++is slave canmake better use of themeritofMATLAB and C/C++in practice of digital image processing,enhance the practicalness of experiments,reduce the difficulty of practice of non-key parts in experiments and improve students’skill of digital image processing effectively.

      digital image processing;mixed programming technology ofMATLAB and C/C++;experimental teaching

      G642.0

      :A

      :1674-2109(2017)06-0092-05

      2017-03-31

      武夷學院引進人才科研啟動項目(YJ201607)。

      魏毅(1978-),男,漢族,講師,主要從事虛擬現(xiàn)實的研究。

      猜你喜歡
      調用編程混合
      我家有只編程貓
      我家有只編程貓
      我家有只編程貓
      我家有只編程貓
      混合宅
      一起來學習“混合運算”
      核電項目物項調用管理的應用研究
      LabWindows/CVI下基于ActiveX技術的Excel調用
      測控技術(2018年5期)2018-12-09 09:04:46
      油水混合
      基于系統(tǒng)調用的惡意軟件檢測技術研究
      尼勒克县| 保康县| 清流县| 自贡市| 阿拉尔市| 韶关市| 苍山县| 新蔡县| 曲阜市| 韩城市| 兴山县| 拜泉县| 哈尔滨市| 汝州市| 灵寿县| 那曲县| 仁怀市| 荣成市| 准格尔旗| 诸城市| 农安县| 巧家县| 余庆县| 沂水县| 会同县| 沈丘县| 镇赉县| 庆城县| 金塔县| 定边县| 麟游县| 桑日县| 巴东县| 济阳县| 苏州市| 禄劝| 铜梁县| 库尔勒市| 彩票| 兖州市| 灵璧县|