孫潔,歐陽亞麗,薛亮
(1.華北理工大學 電氣工程學院,河北 唐山 063210;2.河鋼集團唐山鋼鐵公司,河北 唐山 063000)
?
C#和MATLAB混合編程在連鑄坯裂紋檢測中的應用
孫潔1,歐陽亞麗1,薛亮2
(1.華北理工大學 電氣工程學院,河北 唐山 063210;2.河鋼集團唐山鋼鐵公司,河北 唐山 063000)
混合編程;鑄坯裂紋;圖像處理;紅外熱像圖;特征提取
介紹了一種通過C#調用MATLAB生成的.NET組件實現(xiàn)二者混合編程的方法,以及利用混合編程的圖像處理算法實現(xiàn)連鑄坯裂紋的檢測。通過紅外熱像儀在線實時采集連鑄過程中鑄坯紅外熱像圖,C#調用MATLAB的圖像處理函數(shù)對熱像圖進行處理及特征提取,從而識別目標。實驗結果表明,通過C#和MATLAB混合編程的方法,可以充分結合兩者各自優(yōu)點,較好地實現(xiàn)連鑄坯表面裂紋的檢測。
隨著中國鋼鐵規(guī)模的擴大和工業(yè)技術的發(fā)展,鋼鐵連鑄在生產(chǎn)中所占的比例也隨之增高。在鋼坯連鑄過程中,由于種種原因,鑄坯表面會產(chǎn)生裂紋及其他的缺陷,給鑄坯質量造成極大影響甚至影響生產(chǎn)。因此,提高鑄坯質量、控制產(chǎn)品廢品率的首要任務就是實時發(fā)現(xiàn)裂紋并采取措施予以清除[1]?;诩t外熱像技術的圖像檢測方法是一種新型的無損檢測方法,而如何快速準確地從一幅紅外熱像圖中識別出表面裂紋是目前研究的重要課題。
目前,基于紅外圖像處理技術的鑄坯表面裂紋檢測主要通過功能強大的圖像處理軟件完成,所以需要使用一種集強大數(shù)值運算功能、圖像處理功能和強大界面實現(xiàn)功能為一體的開發(fā)軟件。針對于目前通用軟件開發(fā)效率低、功能單一、檢測精度低和實時性不足問題,提出一種使用混合編程方式實現(xiàn)對圖像的處理和界面設計以及數(shù)值的計算。
MATLAB是數(shù)據(jù)計算、系統(tǒng)控制與仿真、圖像和信號處理、矩陣計算和建模等強大功能集合在一起的高性能軟件,在很多領域得到了很好的應用,尤其是在對圖像的處理過程中非常有優(yōu)勢[2]。但是其系統(tǒng)的可移植性不是很好,在可視化界面的設計上也表現(xiàn)平平,所以單憑MATLAB想要設計出功能完善、人機交互較為友好的界面是非常困難的。
C#是微軟公司發(fā)布的一種面向對象的、運行于.NET Framework之上的高級程序設計語言。它綜合了Visual Baisc簡單的可視化操作和C++的強大功能,具有強大的界面實現(xiàn)功能、快捷的執(zhí)行速度、較好的算法和數(shù)據(jù)保密性,而且WIN7及后續(xù)微軟系統(tǒng)分別內置了C#運行所需的.NET運行庫,在.NET運行庫的支持下,.NET框架的各種優(yōu)點在C#中表現(xiàn)得淋漓盡致。但是它的數(shù)值計算能力比較差,一旦涉及大量的運算,其速度會大大降低。導致在處理的過程中會出現(xiàn)耗費的時間較長,處理不及時等問題。
由此可見,C#和MATLAB具有一定的互補性,如果可以將二者的優(yōu)勢充分結合起來,混合編程,就可以開發(fā)出一種運行效率高的界面型應用窗體[3]。將C#和MATLAB混合編程應用于基于紅外熱像技術對連鑄過程中鑄坯表面裂紋的檢測中。采用均值濾波對圖像進行平滑去噪,Gauss-Laplace邊緣檢測算子對目標邊緣進行提取,在檢測系統(tǒng)開發(fā)上選擇C#和MATLAB混合編程的方法,C#開發(fā)可視化界面,MATLAB對采集到的紅外熱像圖進行圖像數(shù)據(jù)處理運算,從而獲得圖像處理結果,取得較好的應用效果。用戶可通過功能區(qū)的不同按鈕實現(xiàn)參數(shù)設置、數(shù)據(jù)保存等功能,人機界面合理友好。
C#和MATLAB可通過以下4種方式實現(xiàn)混合編程[4]:
(1)C#調用MATLAB的*.m文件生成的C語言DLL;
(2)C#調用MATLAB工作區(qū)計算并返回結果;
(3)C#調用MATLAB的DeployTool生成的COM組件;
(4)C#調用MATLAB的DeployTool生成的.NET組件。
考慮到.NET具有編譯速度快、運行穩(wěn)定及可移植性較好等特點,采用.NET方式實現(xiàn)混合編程。
首先在MATLAB中將圖像處理的功能模塊編譯成M文件,然后利用MATLAB的DeployTool生成.NET組件,具體步驟如下:
matlabR2012b(64位) + vs2010(64位)+ win7(64位)(上位機的配置環(huán)境);
(1)編譯MATLAB的M文件,*.m :Function [a] = imagepro(b);
(2)在command window輸入deploytool命令,然后創(chuàng)建Project,選擇.NET Assembly類型,確定項目名稱及儲存位置,生成新項目,如圖1所示。
圖1 生成新項目
(3)在Project中添加imagepro.m文件,點擊build the project生成。如圖2所示。
圖2 添加m函數(shù)
下面是C#對生成的.NET組件的調用,流程如下:
從D:MATLAB oolboxdotnetbuilder binwin64v2.0(視本機安裝路徑而定)中復制出MWArray.dll到D:Visual Studio 2010My projectsmatlabtestmatlabtest in Debug目錄下(視本機安裝路徑而定),將imageprodistrib里的imagepro.dll同樣復制到debug目錄下。然后右擊解決方案添加引用,瀏覽debug目錄。如圖3所示。
圖3 添加引用
C#調用MATLAB過程中如出現(xiàn)類型初始化異?,F(xiàn)象,將項目屬性-目標平臺改成X64。以上步驟實現(xiàn)了C#對MATLAB的.NET組件的調用。
2.1 缺陷圖像平滑濾波
首先將采集到鑄坯表面存在裂紋的紅外熱像圖傳輸至計算機,為了消除噪聲的影響從而更加精確地對圖像邊緣進行提取,要對圖像進行平滑處理,同時也為識別圖像特征信息做鋪墊[5]。選擇均值濾波來消除噪聲。
均值濾波是比較經(jīng)典的線性算法。鄰域平均法是均值濾波的主要方法,它的原理是將當前像素點的數(shù)值替換成周圍8個像素的平均值。其中3X3均值濾波應用最為廣泛且比較經(jīng)典。目標像素點和它周圍8個像素點組成一個濾波模板,如圖4所示,然后將模板像素點的值替換成8個周圍像素點的平均值。
圖4 3X3濾波模板
均值濾波的公式如下:
(1)
式中:f(i,j)表示一副噪聲灰度圖像,g(i,j)表示處理后圖像在該點的像素值,m表示鄰域內除了本身以外的像素個數(shù),S表示鄰域內除了本身以外的像素點集合。對圖像進行平滑處理,就將模板與圖像進行卷積,即可濾出圖像中的噪聲,常用的3X3模板f如下:
(2)
2.2 缺陷圖像邊緣檢測
LOG算子通過二階導數(shù)的過零點來檢測圖像的邊緣,是一種基于二階的邊緣檢測[6]。該算法首先對圖像進行高斯濾波,然后再求其拉普拉斯二階導數(shù),最后可以通過檢測濾波結果的零交叉獲得圖像或物體的邊緣。所以它對缺陷圖像進行濾波去噪處理,最大程度上抑制噪聲后,再對濾波后的圖像的邊緣進行提取。Marr視覺理論是邊緣提取的思想來源。它是高斯濾波平滑器和拉普拉斯銳化濾波器的結合,是一個先濾波再微分的過程。LOG算子的推導如下:
g(x,y)=2(G(x,y)*f(x,y))2=+
(3)
其中g(x,y)表示輸出圖像,f(x,y)表示輸入圖像,G(x,y)表示高斯濾波函數(shù),2為拉普拉斯算子,*為卷積符號。
由卷積的交換性可得:
g(x,y)=2G(x,y)*f(x,y)
(4)
LOG(x,y)=2G(x,y)=(-1)(5)
LOG算子是5X5的模板,如下所示:
(6)
LOG算子的尺度參數(shù)δ的選取非常重要。參數(shù)δ選取較大時,對噪聲的抑制效果較好,定位精度較低;反之,如果參數(shù)δ選擇較小,則會出現(xiàn)定位精度高,但是邊緣較為毛躁,噪聲影響較大的現(xiàn)象。因此,根據(jù)實際情況選取合適的尺度參數(shù)δ以得到較好的處理效果是非常重要的。原圖、均值濾波后的圖像及LOG邊緣檢測的圖像如圖5、圖6所示。
圖5 裂紋灰度原圖
圖6 圖像濾波及邊緣提取
系統(tǒng)采用C#設計程序界面,系統(tǒng)可實時在線顯示板坯熱像圖與處理后的熱像圖,系統(tǒng)具有缺陷圖像數(shù)據(jù)信息自動保存,歷史記錄查看與導出,參數(shù)在線設置等功能;系統(tǒng)首先從C#界面獲取連鑄坯熱像圖數(shù)據(jù),將數(shù)據(jù)傳送至.NET組件,通過MATLAB的圖像預處理與邊緣檢測后,通過邊界跟蹤法計算出裂紋的長度、周長、面積等特征信息,系統(tǒng)根據(jù)特征數(shù)據(jù)判斷是否存在裂紋,若存在,啟動裂紋報警并給出裂紋等級,同時保存裂紋產(chǎn)生的時間及裂紋相關數(shù)據(jù)信息至數(shù)據(jù)庫,以便技術人員分析決策。系統(tǒng)程序流程如圖7所示,檢測系統(tǒng)界面如圖8所示。
如圖8所示,系統(tǒng)對板坯熱像圖進行處理及特征提取,計算得裂紋長度為169,周長為328,面積為886,裂紋的圓形度為9.67,通過與設定的閾值進行比較得出裂紋存在,等級為2級,系統(tǒng)發(fā)生報警并保存缺陷圖像信息。
圖7 程序流程圖
圖8 連鑄板坯裂紋檢測系統(tǒng)
經(jīng)仿真實驗表明,本程序在連鑄坯裂紋檢測應用中準確率較高,運算速度較快,是一個較為實際的設計方案。此方案能夠有效識別裂紋,減少生產(chǎn)過程中板坯報廢率,輔助技術人員更好地操縱設備,提高生產(chǎn)質量產(chǎn)量。
(1)該項目介紹了一種通過MATLAB生成.NET組件供C#調用實現(xiàn)混合編程的方法,應用在紅外熱像技術在連鑄坯表面裂紋檢測系統(tǒng)中。
(2)開發(fā)了基于C#的連鑄坯裂紋檢測系統(tǒng),大大提高了開發(fā)效率,經(jīng)仿真實驗,本系統(tǒng)具有較好的可操作性和移植性,同時缺陷圖像識別效率及準確率較高。結合MATLAB和C#二者優(yōu)勢,較好地實現(xiàn)了連鑄坯裂紋的檢測,具有一定的實用性,可應用于實際生產(chǎn)。
[1] 李培玉,張志欣,董月.基于圖像特征的板坯表面裂紋檢測方法[J].鋼鐵研究學報,2013,25(8):58-62.
[2] 陳愛梅,李慧東.MATLAB與C#混合編程在數(shù)字圖像處理中的應用[J].電腦開發(fā)與應用,2014,243(11):67-69.
[3] 李潔,王瑞富.Matlab和C#混合編程在SAR圖像船只檢測中的應用[J].測繪與空間地理信息,2017,40(2):75-78.
[4] 張燕,馬永杰,袁秋林.Visual C#與Matlab混合編程方法及其實現(xiàn)[J].西北師范大學學報自然科學版,2008,44(6):41-43.
[5] 孫潔,孟慶嬌,黃曉婷.基于紅外熱像技術鑄坯表面質量檢測的研究[J].紅外技術,2015,37(8):707-710.
[6] 鄒福輝,李忠科.圖像邊緣檢測算法的對比分析[J].計算機應用,2008,28(s1):215-216.
Application of Mixed Programming of C# and MATLAB in Crack Detection of Continuously Cast Slab
SUN Jie1,OUYANG Ya-li1,XUE Liang2
(1.College of Electrical Engineering,North China University of Science and Technology,Tangshan Hebei 063210,China;2.Tangshan Iron and Steel Company,Hebei Iron Steel Group,Tangshan Hebei 063000,China)
mix-programming; crack of cast slab; image processing; infrared thermal image; feature extraction
A method to realize the mixed programming of the two components by the.NET component generated by the C# call MATLAB,and the image processing algorithm of mixed programming to realize the detection of the continuous casting slab crack were introduced.The infrared thermal image of the slab during the continuous casting process was collected online by the infrared thermal imager,and the image processing function of the C# called MATLAB was to be used to process the thermal image and extract the features.The experimental results show that the method of C# and MATLAB mixed programming can fully combine the advantages of both,and can realize the detection of surface cracks of continuous casting slab.
2095-2716(2017)03-0057-07
2017-03-29
2017-05-17
河北省自然科學基金項目(F2013209326)。
TG245
A