国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

C#與Matlab混合編程在HDPE膜數(shù)據(jù)成像中的應(yīng)用

2015-05-30 15:30:36成秋蕾高慧

成秋蕾 高慧

摘 ?要:填埋場滲漏檢測系統(tǒng)是以Visual studio 2010為開發(fā)平臺,C#為編程語言,Matlabr2009a為主要做圖工具的軟件。針對其數(shù)據(jù)成像功能,文章提出了一種以C#與Matlab混合編程的數(shù)據(jù)成像方法,它通過相關(guān)算法去除干擾數(shù)據(jù)達(dá)到成像效果,并將生成的Matlab圖像嵌入到VC界面,使HDPE膜的成像效果更加明顯并提升了系統(tǒng)的運行速度。

關(guān)鍵詞:COM組件;異常干擾數(shù)據(jù);數(shù)據(jù)成像

中圖分類號:TP277 ? ? 文獻(xiàn)標(biāo)識碼:A ? ? ?文章編號:1006-8937(2015)35-0077-02

垂直鋪設(shè)防滲膜是環(huán)境工程領(lǐng)域常用的防滲處理手段,在鋪塑過程中,由不同原因造成的防滲膜搭接不好、劃破及漏點等問題會大大降低防滲膜的防滲效果,導(dǎo)致檢測過程中存在一定的局限性。目前國內(nèi)對于防滲膜的滲漏檢測一般采用雙電極法、電極柵格等,但其檢測漏洞的效果不明顯,不宜發(fā)現(xiàn)錯誤和異常且運行速度緩慢等。

C#語言繼承了C/C++的優(yōu)點,利用C#.NET開發(fā)的系統(tǒng)具有界面友好、執(zhí)行速度快等優(yōu)點,生成的可執(zhí)行文件能有效保護(hù)算法和數(shù)據(jù)。Matlab是常用的科學(xué)及工程計算軟件,具有強大的數(shù)據(jù)可視化功能。本文將C#.NET與Matlab混合編程的方法用于垂直防滲膜檢測的數(shù)據(jù)可視化過程來模擬刻畫垂直防滲膜的滲漏情況,通過算法去除干擾數(shù)據(jù),并將檢測的HDPE防滲膜數(shù)據(jù)生成的Matlab圖像嵌入到VC界面中,相比傳統(tǒng)的滲漏檢測方法節(jié)約運行時間并有更佳的可視化效果。

1 ?C#與Matlab混編的實現(xiàn)過程

在C#中調(diào)用Matlab使用Matlab DeployTool生成生成COM組件或者.NET DLL文件的方法。因為使用Com Builder連接則十分簡單,具有跨平臺優(yōu)勢,軟件版本的兼容性較好,COM組件成為本文首先的連接方式。

1.1 ?數(shù)據(jù)準(zhǔn)備

第一步:安裝軟件。按先后順序依次安裝Visual Studio 2010、Matlab r2009a和MCRInstall.exe。安裝MCRInstall.exe的過程:在matlab命令窗口輸入mcr命令,得到MCRInstall.exe的路徑,雙擊打開并安裝。

第二步:利用MATLAB編譯器將m文件編譯為dll文件。

第三步:利用MATLAB Builder for COM將m函數(shù)編譯封裝成COM組件。

新建一個項目,在MATLAB的命令窗口中輸入“deploytool”。選擇Project- >Add File 添加相應(yīng)的M文件,則M文件將作為類的方法出現(xiàn)在COM組件中,選擇Build ->COM Object編譯和發(fā)布COM組件。

1.2 ?COM組件的導(dǎo)入和編程

在新建C#工程中,引用生成的DLL文件。在C#.NET應(yīng)用程序中使用該COM組件,右鍵單擊工程項目下引用,在瀏覽中找到Xlunwen.dll的位置添加至引用中,添加完成后可在C#.NET中使用。使用COM組件需要調(diào)用組件中類的方法,創(chuàng)建包含這個方法的類的實例。代碼如下:

Xlunwen.Xlunwen t = new Xlunwen.Xlunwen();

MWNumericArray s = array2;

t.Xiaolunwen(s); //其中Xiaolunwen為實現(xiàn)數(shù)據(jù)成像效果的M文件。

運行結(jié)果,如圖1所示。

2 ?基于時間序列的HDPE膜數(shù)據(jù)去噪算法

采集的HDPE膜數(shù)據(jù)左右兩邊受電勢影響普遍偏高,造成了局部時間點數(shù)據(jù)異常的特征,而漏洞數(shù)據(jù)也比正常數(shù)據(jù)偏高,如何區(qū)分?jǐn)?shù)據(jù)中漏洞數(shù)據(jù)和去除電勢干擾形成的異常數(shù)據(jù)是本文的難點所在。

2.1 ?算法的基本思想

本文采用的是基于時間序列的HDPE膜數(shù)據(jù)去噪算法,基本思想是對整體數(shù)據(jù)進(jìn)行分類為正常數(shù)據(jù)、漏洞數(shù)據(jù)和受電勢干擾數(shù)值升高的非漏洞數(shù)據(jù),通過算法對數(shù)據(jù)加以分析,將非漏洞數(shù)據(jù)識別并轉(zhuǎn)化為正常數(shù)據(jù),達(dá)到去除干擾數(shù)據(jù)的目的。2.2 ?具體做法

①對整體數(shù)據(jù)求均值。所有小于均值的數(shù)據(jù)為正常數(shù)據(jù),將其值至為0,大于均值的數(shù)據(jù)為漏洞數(shù)據(jù)和異常數(shù)據(jù),將其保留為矩陣A[m,n]。

②對矩陣A[m,n]求一階導(dǎo)數(shù)得B[m,n]。觀察數(shù)據(jù)的特征得知,發(fā)現(xiàn)矩陣左端異常數(shù)據(jù)走向為單調(diào)遞減,導(dǎo)數(shù)值均為負(fù)數(shù);矩陣右端異常數(shù)據(jù)走向為單調(diào)遞增,導(dǎo)數(shù)值均為正數(shù);而漏洞數(shù)據(jù)走向特征則是先遞增后遞減的趨勢。

③將干擾數(shù)據(jù)的導(dǎo)數(shù)值至0。將B[m,n]在Y軸分成m等份區(qū)間,每一個區(qū)間內(nèi)的數(shù)據(jù)都是一個時間序列數(shù)據(jù),依次從左邊掃描矩陣B[m,n]直到找到第一個導(dǎo)數(shù)值為正數(shù)的數(shù)據(jù)為止,將導(dǎo)數(shù)值為負(fù)數(shù)的數(shù)據(jù)全部至為0,達(dá)到去除左端的異常干擾數(shù)據(jù)的目的。同理,去除右端的異常干擾數(shù)據(jù),則矩陣中只剩漏洞部分的導(dǎo)數(shù)值。

④將漏洞部分還原為原數(shù)據(jù)進(jìn)行數(shù)據(jù)成像,效果如圖2所示。

3 ?窗體間的嵌入

VS2010中有4個對窗口進(jìn)行操作的API函數(shù):FindWindow、SetParent、SetWindowLong和MoveWindow。基本思想:將Matlab生成的圖形窗口嵌入到VS界面,通過VS平臺獲取Figure窗口的句柄,將Figure圖像要嵌入的空間設(shè)置為父窗口,F(xiàn)igure窗口設(shè)置為子窗口。 程序執(zhí)行代碼如下:

IntPtr hChild = IntPtr.Zero; ?//子窗口句

IntPtr handle =pictureBox1.Handle;//父窗口

hChild = dll.FindWindow(null, “Figure 1”);

......

dll.SetParent(hChild, handle); //將子窗口嵌入到父窗口中

運行結(jié)果如圖3所示。

4 ?編程方式的運行時間對比

C#與Matlab混合編程對110次采樣值32個采集點(110×32)的數(shù)據(jù)多次成像所用的

平均時間對比,見表1。

5 ?結(jié) ?論

表1中說明采用混編代碼長度較VS2010語言代碼長度大大縮短,而運行時間又比Matlabr2009a語言編程減少許多。本文充分發(fā)揮了MATLAB和C#各自的優(yōu)勢,實現(xiàn)了MATLAB和C#的混合編程,利用算法去除干擾數(shù)據(jù),并完成了Figure窗口到C#界面的內(nèi)嵌,提高了程序運行速度和成像數(shù)據(jù)的精確度。

參考文獻(xiàn):

[1] 能昌信,董路,姜文峰,等.土工膜滲漏檢測系統(tǒng)研究[J].環(huán)境科學(xué)與技 ? 術(shù),2005,(28).

[2] 王麗輝,袁保宗.魯棒的模糊C均值和點云雙邊濾波去噪[J].北京交 ? 通大學(xué)學(xué)報,2008,(2).

[3] 蘇金明,查國明.MATLAB 與外部程序接口[M].北京:電子工業(yè)出版 ? 社,2004.

[4] 潘愛民.COM原理及應(yīng)用[M].北京:清華大學(xué)出版社,2003.

景泰县| 育儿| 湖南省| 红河县| 赤城县| 泽库县| 正宁县| 长寿区| 开原市| 美姑县| 敖汉旗| 澄江县| 东光县| 铅山县| 团风县| 弥勒县| 香港 | 辽源市| 喀喇沁旗| 博白县| 岳池县| 西峡县| 登封市| 泰州市| 保德县| 迁安市| 沙坪坝区| 四川省| 闸北区| 宁强县| 绩溪县| 青海省| 驻马店市| 陈巴尔虎旗| 民和| 仙游县| 盐源县| 张家川| 罗城| 定西市| 新源县|