• 
    

    
    

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

      C#與MATLAB混編方法在圖像處理中的應(yīng)用研究

      2018-07-10 09:17:50陳曉勇
      關(guān)鍵詞:圖像處理內(nèi)存編程

      盧 興, 陳曉勇

      (1.東華理工大學(xué)測(cè)繪工程學(xué)院,江西 南昌 330013;2.流域生態(tài)與地理環(huán)境監(jiān)測(cè)國(guó)家測(cè)繪地理信息局重點(diǎn)實(shí)驗(yàn)室,江西 南昌 330013)

      1984年,美國(guó) MathWorks 公司首次推出MATLAB軟件,MATLAB擁有國(guó)際公認(rèn)的最優(yōu)秀的數(shù)值計(jì)算和仿真分析能力,其科學(xué)計(jì)算與可視化功能強(qiáng)大,它提供了一個(gè)功能完善的程序設(shè)計(jì)和數(shù)據(jù)處理集成環(huán)境(李雯,2016)。MATLAB是一個(gè)高度集成的模塊化系統(tǒng),集科學(xué)計(jì)算 、圖象處理等于一體,使用解釋性語言,具有極高的編程效率(Shen et al.,2005)。MATLAB雖然有眾多優(yōu)點(diǎn),但缺點(diǎn)也不少:其提供的M語言需要逐行解釋執(zhí)行,效率較低,界面開發(fā)能力差,十分依賴MATLAB運(yùn)行環(huán)境(朱艷平,2016)。

      C#(C sharp)是微軟于2000年推出的一種以面向?qū)ο鬄榫幊汤砟畹母呒?jí)編程語言。C#與C/C++語言相比,C#編程更加簡(jiǎn)易、安全,而且是以面向?qū)ο鬄榫幊趟枷氲莫?dú)特編程語言。因?yàn)檫@種繼承關(guān)系,C#與C/C++具有極大的相似性,熟悉類似語言的開發(fā)者可以很快的轉(zhuǎn)向C#( Roberto et al.,2003)。

      C#擁有優(yōu)良的用戶應(yīng)用界面設(shè)計(jì)與開發(fā)能力,具備許多種類的界面高級(jí)設(shè)置。而MATLAB則擁有優(yōu)秀的數(shù)值計(jì)算能力。MATLAB中的函數(shù)儲(chǔ)存在.m腳本文件中,并對(duì)用戶完全開放,用戶可以隨時(shí)修改文件中的內(nèi)容。利用MATLAB中提供的函數(shù)和算法實(shí)現(xiàn)某些功能的編寫,而主體軟件和界面用C#.NET進(jìn)行開發(fā)(王文斌等,2015)。充分結(jié)合兩者的優(yōu)點(diǎn),可以更加高效地設(shè)計(jì)出優(yōu)秀的應(yīng)用軟件,用途廣泛,前景廣闊。

      1 C#與MATLAB混合編程

      1.1 混合編程的基本思想

      混合編程即在一個(gè)軟件的開發(fā)過程中,將不同方面,不同階段的編程、算法或數(shù)據(jù)處理分別由相應(yīng)方面能力更強(qiáng)的軟件去執(zhí)行,最后完成優(yōu)勢(shì)互補(bǔ),開發(fā)成效率更高的軟件。

      在混合編程研究方面,許多專業(yè)人員取得了良好的研究成果。張燕等(2008)利用M函數(shù)文件編譯成C共享庫(kù)的方法實(shí)現(xiàn)了C#與MATLAB混編;Bistak(2013)利用C#與MATLAB/Simulink混合編程開發(fā)遠(yuǎn)程控制實(shí)驗(yàn)室系統(tǒng),并介紹了該系統(tǒng)在磁懸浮與液壓系統(tǒng)中的應(yīng)用;許茂增等(2015)運(yùn)用C#與MATLAB混合編程設(shè)計(jì)并實(shí)現(xiàn)了物流需求預(yù)測(cè)系統(tǒng),并在實(shí)例中表現(xiàn)出該系統(tǒng)良好的適用性與高預(yù)測(cè)精度。

      1.2 C#與MATLAB混合編程的方法

      (1)C#直接調(diào)用MATLAB程序文件。MATLAB以自身為引擎,提供了一系列可供其他程序調(diào)用的函數(shù),其他編程軟件可以通過這些函數(shù)來調(diào)用MATLAB程序。該引擎提供的3個(gè)常用接口為:Execute、PutFullMatrix、GetFullMatrix。其功能分別是:執(zhí)行腳本命令、從MATLAB Server中添加矩陣和讀取矩陣(曹洪濤等,2015)。

      (2)C#調(diào)用MATLAB編譯器生成的C語言共享庫(kù)。MATLAB編譯器模塊能夠生成多種共享庫(kù),其中便包括C語言共享庫(kù)。C語言共享庫(kù)是可與外界程序鏈接的函數(shù)接口庫(kù)。

      (3)使用MATLAB DeployTool生成.Net組件或.com組件。COM(組件對(duì)象模型,Componet Object Model)是以組件為發(fā)布單元的對(duì)象模型,該模型有利于各個(gè)軟件組件之間采用統(tǒng)一的格式相互通訊,使得不同語言程序之間可以相互調(diào)用(朱峰等,2011)。由MATLAB編譯器生成的.Net獨(dú)立組件是動(dòng)態(tài)鏈接庫(kù)dll文件,可以脫離MATLAB環(huán)境與其他任何支持集成開發(fā)的程序相結(jié)合,并在沒有安裝MATLAB的計(jì)算機(jī)中運(yùn)行。

      在以上三種方法中,第一種方法操作簡(jiǎn)單、易行,但是執(zhí)行效率太低,無法脫離MATLAB獨(dú)立運(yùn)行。利用MATLAB生成C語言共享庫(kù)的方法使速度明顯提升,但程序不穩(wěn)定,易出錯(cuò)。利用.com或.Net組件的方法生成的動(dòng)態(tài)鏈接庫(kù)dll文件可脫離MATLAB環(huán)境,較好的與其他程序結(jié)合,且生成和編譯過程較簡(jiǎn)單,效率頗高。綜上所述,實(shí)際應(yīng)用過程中采用C#調(diào)用.Net組件或.com組件的方法最為合適。

      2 圖像處理

      2.1 圖像處理技術(shù)

      20世紀(jì)中期,人們對(duì)數(shù)字圖像處理的研究步入正軌。數(shù)字圖像處理(Digital Image Processing)是利用計(jì)算機(jī)的強(qiáng)大能力處理數(shù)字圖像,從而增強(qiáng)數(shù)字圖像的識(shí)別度、信息量或?qū)n}化等等的方法和技術(shù)。圖像處理的目的是恢復(fù)圖像的本來面目,改善人的視覺效果,突出圖像中目標(biāo)物的某些特征,提取目標(biāo)物的特征參數(shù)(李俊山等,2006)。常見的處理有圖像數(shù)字化、圖像增強(qiáng)、圖像復(fù)原、圖像分割、圖像分析等(陳汗青等,2013)。

      圖像可能由于各類原因?qū)е聢D像數(shù)據(jù)破壞,通常利用圖像增強(qiáng)來改善圖像數(shù)據(jù)質(zhì)量。圖像增強(qiáng)是利用各種數(shù)學(xué)方法和變換手段來提高圖像的對(duì)比度和清晰度(劉治群等,2010)。濾波是圖像增強(qiáng)的常用方法,圖像濾波可以去除圖像中的噪聲或突出特征以恢復(fù)或提升圖像質(zhì)量。

      圖像分割:即把圖像劃分為幾個(gè)特定部分,從中提取出對(duì)人類有用的對(duì)象。圖像分割是計(jì)算機(jī)視覺和圖像處理領(lǐng)域具有挑戰(zhàn)的重要問題,它在圖像檢索、目標(biāo)識(shí)別和圖像分析等更高級(jí)的任務(wù)中充當(dāng)著基本的,也是關(guān)鍵的一步(何斌等,2001)。分割方法大致分為三種:基于閾值的分割方法、基于區(qū)域的分割方法、基于邊緣的分割方法(殷國(guó)軍等,2009)。

      2.2 MATLAB中的數(shù)字圖像處理

      MATLAB提供的圖像處理工具箱(Image Processing Toolbox),是利用MATLAB強(qiáng)大的數(shù)學(xué)計(jì)算能力,提供可參照的標(biāo)準(zhǔn)算法和圖形工具給用戶,并實(shí)現(xiàn)廣泛的圖像處理操作(楊保華等,2016)。MATLAB中的部分圖像處理函數(shù)如下:

      rgb2gray():該函數(shù)能實(shí)現(xiàn)圖像的灰度化,向該函數(shù)輸入圖像矩陣即可得相應(yīng)圖像的灰度圖。

      imhist():該函數(shù)可計(jì)算輸入圖像的灰度值信息,并顯示相應(yīng)直方圖。

      histeq():該函數(shù)可實(shí)現(xiàn)直方圖的均衡化處理。

      imnoise():該函數(shù)可向圖像中加入噪聲,輸入值可自定義噪聲類型與參數(shù)。

      imfilter():該函數(shù)能對(duì)多位圖像進(jìn)行濾波處理,輸入值中可自定義模版與參數(shù)。

      medfilt2():該函數(shù)用于圖像的中值濾波處理。輸入值中可自定義模版與參數(shù)。

      fspecial():該函數(shù)可創(chuàng)建自定義的濾波算子。輸入值中可自定義算子類型與參數(shù)。

      edge():該函數(shù)用于邊緣檢測(cè)。輸入值中包括6種算法類型:Sobel,Prewitt,Roberts,Laplacian,均值(zero-cross),Canny。

      3 C#與MATLAB混合編程在圖像處理中的應(yīng)用

      3.1 混合編程程序功能結(jié)構(gòu)

      在混合編程前,設(shè)計(jì)程序的界面與框架。程序中包含多種經(jīng)典圖像處理功能以及必要的基礎(chǔ)功能。程序的框架如圖1所示。

      圖1 混合編程程序框架Fig.1 Mixed programming framework

      3.2 C#與MATLAB混合編程過程與關(guān)鍵技術(shù)

      (1)MATLAB函數(shù)編譯工作。C#與MATLAB混合編程需要用到MATLAB中的圖像處理函數(shù),因此在混編之前,需要運(yùn)用MATLAB提供的編譯工具(DeployTool)將這類函數(shù)編譯成.NET組件。

      研究中所使用的MATLAB版本號(hào)為R2015b。編譯過程為:打開MATLAB,在主窗體Command Window中輸入Deploy指令,打開Deployment Project窗口,輸入自定義的文件名稱,存儲(chǔ)位置以及編譯類型,編譯類型選擇.Net Assembly。

      在生成的.Net組件內(nèi)容構(gòu)筑中,加入自定義的類名并向類中添加要編譯的 MATLAB函數(shù).m文件。最后選擇Build完成.Net組件的生成。

      (2)C#調(diào)用.Net組件。在混合編程項(xiàng)目的引用中添加.Net組件,MWArray.dll和CsharpMATLABMix.dll文件,并添加到相應(yīng)的命名空間,主要代碼如下:

      using MathWorks.MATLAB.NET.Arrays;

      using MathWorks.MATLAB.NET.Utility;

      using CsharpMATLABMix;

      (3)C#與MATLAB數(shù)據(jù)傳遞。因?yàn)镃#與MATLAB之間的語言思路與計(jì)算方式不同,數(shù)據(jù)間無法直接傳遞。因此,.Net組件中運(yùn)用MWArray類型作為中間類型,使得C#中數(shù)據(jù)的類型與MATLAB中數(shù)據(jù)的類型皆可轉(zhuǎn)換至MWArray類型,從而達(dá)到相互轉(zhuǎn)換的目的。.Net數(shù)據(jù)類型、MATLAB類型與MWArray類三者間的轉(zhuǎn)換表如下(表1)。

      (4)C#圖像處理。C#編程過程中,需要用到C#的圖像處理方法。C#中常用的三種圖像處理方法分別是:像素法、內(nèi)存法與指針法。其中像素法最簡(jiǎn)單,核心思想是利用Bitmap類中的GetPixel與SetPixel方法獲取與設(shè)置圖像中一個(gè)指定的像素的顏色。使用像素法需要對(duì)每一個(gè)像素進(jìn)行提取和重新設(shè)置顏色,方法簡(jiǎn)單,操作方便,但效率太慢,導(dǎo)致性能大大降低,運(yùn)行時(shí)間太長(zhǎng),在實(shí)際項(xiàng)目中是不可取的。

      表1 MATLAB類型、.Net類型與MWArray類轉(zhuǎn)換表

      內(nèi)存法的核心思想是利用鎖定位圖的方式將圖像鎖定并復(fù)制于內(nèi)存中,然后對(duì)內(nèi)存中的圖像數(shù)據(jù)直接進(jìn)行處理。內(nèi)存法的圖像處理效率比像素法明顯有極大的提高,代碼難度較為一般,不難編寫。內(nèi)存法的關(guān)鍵代碼如下:

      Bitmap bitImage = new Bitmap(image);

      Rectangle rt = new Rectangle(0, 0, bitImage.Width, bitImage.Height);

      //鎖定位圖并設(shè)置相關(guān)屬性

      BitmapData bmpData = bitImage.LockBits (rt,ImageLockMode.ReadWrite,PixelFormat.Format24bppRgb);

      指針法直接運(yùn)用指針的特殊性能來進(jìn)行圖像的處理,運(yùn)行速度比內(nèi)存法更快,但其不足是編碼較難,不易掌握,而且使用不安全代碼需要承擔(dān)風(fēng)險(xiǎn),一旦代碼有誤,可能引發(fā)安全性問題,造成更多損失。

      通過以上分析,本文程序中主要運(yùn)用內(nèi)存法編寫圖像處理代碼,內(nèi)存法處理效率遠(yuǎn)遠(yuǎn)高于像素法,處理速度上稍慢于指針法,但代碼安全度高,不易出現(xiàn)安全性錯(cuò)誤,是相對(duì)合理的一種方法。

      (5)C#與MATLAB混編函數(shù)應(yīng)用。使用內(nèi)存法加載圖像數(shù)據(jù)后,將其加入編譯函數(shù)中處理,最后輸出處理完成的圖像數(shù)據(jù)。且在C#編寫中,函數(shù)的使用與MATLAB中對(duì)應(yīng)函數(shù)的使用是幾乎一致的。以函數(shù)filter2()為例:

      函數(shù)filter2()的調(diào)用格式如下:

      Y=filter2(B,X),參數(shù)說明:filter2()使用矩陣B中的二維FIR濾波器對(duì)數(shù)據(jù)X進(jìn)行濾波,如果Y是通過二維互相關(guān)計(jì)算出來的,其大小與X一樣。

      在C#中實(shí)際應(yīng)用代碼如下:

      ImageSmoothingSharpening iss = new ImageSmoothingSharpening();

      MWArray smoothingDate = iss.filter2(iss.fspecial("average", 3), mwDate);

      其中,mwDate為待處理的圖像數(shù)據(jù)。函數(shù)fspecial()的作用是依據(jù)輸入?yún)?shù)輸出相應(yīng)模版,用于圖像的濾波處理。函數(shù)fspecial()的調(diào)用格式如下:

      h=fspecial(type)

      h=fspecial(type,para)

      參數(shù)說明:type:指定算子的類型;para指定相應(yīng)的參數(shù);h:返回的模版。

      3.3 C#與MATLAB混合編程實(shí)現(xiàn)與分析

      運(yùn)用C#與MATLAB混合編程實(shí)現(xiàn)的圖像處理程序中實(shí)現(xiàn)了多項(xiàng)功能,其中除了基本功能外,所有圖像處理功能都是基于C#與MATLAB混合編寫的。在函數(shù)的使用方面,C#與MATLAB的混合編程具有較高的兼容性,這使得編程人員可以更方便地使用混合編程中的函數(shù)。而基于C#與MATLAB混合編程的圖像處理效果也較為理想。在程序編寫過程中,使用東華理工大學(xué)南昌校區(qū)高分影像作為程序的實(shí)驗(yàn)圖像(圖2)。處理成果見圖3至圖5。

      圖2 程序界面與原圖Fig.2 program interface master map

      圖3 均值濾波處理后的圖像Fig.3 Image processed by mean filter

      圖4 Sobel算子邊緣檢測(cè)圖Fig.4 Edge detection graph of Sobel operator

      圖5 迭代分割效果圖Fig.5 Iterative segmentation effect diagram

      3.4 C#編程、MATLAB編程與混編三種編程方法對(duì)比

      本文針對(duì)580*800的8位圖像,分別使用C#語言、MATLAB語言與混合編程方法,在CPU為i3-2310,內(nèi)存為4G的PC機(jī)進(jìn)行線性濾波和迭代分割,其結(jié)果如表2、表3所示。

      表2 三種編程方法實(shí)現(xiàn)圖像線性濾波

      表3 三種編程方法實(shí)現(xiàn)圖像迭代分割

      從以上兩個(gè)實(shí)驗(yàn)中可以看出,MATLAB擁有良好的科學(xué)計(jì)算能力,能夠用較簡(jiǎn)短的代碼實(shí)現(xiàn)圖像處理方法,缺點(diǎn)是運(yùn)行較長(zhǎng);C#語言編寫的方法運(yùn)行時(shí)間較快,且越好的代碼運(yùn)行速度越快,但代碼長(zhǎng)度也越長(zhǎng),需要更久的編寫時(shí)間;C#與MATLAB混編編寫的所有方法中,其代碼基本都保持在較短的長(zhǎng)度,比前兩者方法更加簡(jiǎn)化。在運(yùn)行速度方面, MATLAB運(yùn)行時(shí)間最長(zhǎng),C#編寫方法速度通常最快,C#與MATLAB混編方法能夠保持較快速度,并且個(gè)別代碼運(yùn)行速度快于C#編寫方法。

      由此分析可以得出,C#與MATLAB混編方法在代碼長(zhǎng)度上比MATLAB編寫方法和C#編寫方法都更加簡(jiǎn)化,能用較短代碼實(shí)現(xiàn)圖像處理方法?;炀幏椒ㄔ谶\(yùn)行時(shí)間上保持著較快速度,遠(yuǎn)快于MATLAB編寫方法。

      4 結(jié)論

      本文用C#與MATLAB混合編程的方法處理圖像,達(dá)到了令人滿意的結(jié)果。從上節(jié)分析中可以看出,混編方法極大的縮短了代碼長(zhǎng)度,減少了編程工作量,提高了軟件開發(fā)的效率?;旌暇幊谭椒ǔ浞掷昧薓ATLAB強(qiáng)大的計(jì)算能力與高效的圖像處理能力,高度結(jié)合C#優(yōu)秀的用戶界面開發(fā)能力與C#語言優(yōu)勢(shì),彌補(bǔ)了MATLAB界面開發(fā)能力不足與C#代碼冗長(zhǎng)的缺點(diǎn)。以C#與MATLAB混合編程為基礎(chǔ),可以進(jìn)一步擴(kuò)展其他軟件的結(jié)合開發(fā),如MATLAB與ArcEngine結(jié)合等?;炀幏椒閳D像處理提供了一種提高效率的思路,也為軟件開發(fā)提供了更多的可能。

      猜你喜歡
      圖像處理內(nèi)存編程
      我家有只編程貓
      我家有只編程貓
      我家有只編程貓
      我家有只編程貓
      “春夏秋冬”的內(nèi)存
      機(jī)器學(xué)習(xí)在圖像處理中的應(yīng)用
      電子制作(2018年18期)2018-11-14 01:48:20
      模糊圖像處理,刑事偵查利器
      圖像處理技術(shù)的實(shí)戰(zhàn)應(yīng)用
      Photo Shop通道在圖像處理中的應(yīng)用
      河南科技(2014年1期)2014-02-27 14:04:06
      基于內(nèi)存的地理信息訪問技術(shù)
      介休市| 康定县| 汉中市| 墨竹工卡县| 河南省| 德昌县| 巩义市| 汕头市| 池州市| 榆树市| 福清市| 樟树市| 太湖县| 盘锦市| 贡山| 琼海市| 那坡县| 邹城市| 绵阳市| 铅山县| 阆中市| 洞头县| 汉源县| 静乐县| 英山县| 镇康县| 朝阳县| 会同县| 萨嘎县| 天长市| 伊宁市| 双江| 自贡市| 左权县| 民县| 黔江区| 弋阳县| 周宁县| 浦县| 治多县| 中江县|