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

?

面向教學(xué)的可視化圖像處理編程語言設(shè)計*

2017-06-05 15:04:53郭斯羽孟志強滕召勝
中國教育信息化 2017年8期
關(guān)鍵詞:編程語言圖像處理實例

郭斯羽,溫 和,孟志強,滕召勝,陳 燕

(湖南大學(xué) 電氣與信息工程學(xué)院,湖南 長沙410082)

面向教學(xué)的可視化圖像處理編程語言設(shè)計*

郭斯羽,溫 和,孟志強①,滕召勝,陳 燕

(湖南大學(xué) 電氣與信息工程學(xué)院,湖南 長沙410082)

針對學(xué)生對《數(shù)字圖像處理》課程內(nèi)容感到抽象,對編程存在一定畏難情緒的狀況,提出利用可視化編程來提高學(xué)生對數(shù)字圖像處理實踐的參與程度。為此設(shè)計了一種基于XML的圖像處理可視化編程語言,為圖像處理任務(wù)的可視化編程打下了基礎(chǔ)。語言定義了圖像處理功能模塊和程序的結(jié)構(gòu),以包含可視化實現(xiàn)圖像處理流程的必要信息;給出了針對該語言的翻譯器的基本原理與關(guān)鍵步驟,能將可視化程序翻譯為m文件,從而能在MATLAB環(huán)境中執(zhí)行?;谒O(shè)計的語言和翻譯器能夠?qū)崿F(xiàn)可視化圖像處理程序設(shè)計軟件,并可引入不同難度層次的圖像處理編程訓(xùn)練,有助于學(xué)生掌握和運用《數(shù)字圖像處理》課程的相關(guān)方法和技術(shù)。

數(shù)字圖像處理;可視化編程;XML;MATLAB

一、可視化圖像處理編程語言的設(shè)計目的

《數(shù)字圖像處理》是電子信息類專業(yè)一門重要的專業(yè)課,因其與機器視覺具有密切關(guān)系,在我國制造業(yè)升級的大環(huán)境下,該課程的教學(xué)更具有了重要的意義?!稊?shù)字圖像處理》實踐性強,因此針對本課程的演示實驗和學(xué)生動手的課程實驗,已經(jīng)有許多研究者基于諸如Visual C++[1]、OpenCV[2,3]、ImageJ[4]、DSP[5,6]以及 MATLAB[7-9]等不同軟件和技術(shù)提出了實驗教學(xué)的方案。但從學(xué)生實際情況來看,若僅提供操作界面,通過菜單和按鈕操作來觀察圖像處理方法的效果,雖然能適應(yīng)多數(shù)學(xué)生的水平,也能幫助直觀了解有關(guān)方法的效果,但對方法的編程實現(xiàn)訓(xùn)練不足;但若使用某種編程語言來進行實驗,哪怕是使用OpenCV或MATLAB這類直接支持圖像處理的語言,仍會使相當(dāng)部分的學(xué)生產(chǎn)生畏難情緒,且在實現(xiàn)過程中易于陷入語言本身的細(xì)節(jié)問題,難以專注于對特定圖像處理應(yīng)用的整體框架性理解。

在多年的教學(xué)過程中,學(xué)生普遍對可視化的編程工具表現(xiàn)出新奇感,較少產(chǎn)生畏難情緒,實驗的參與度普遍較高。除此之外,可視化編程本身的框圖特性,能夠直觀便捷地描述出算法的主要步驟和流程。因此,本文設(shè)計了一種MATLAB環(huán)境下用于數(shù)字圖像處理的可視化編程語言xGIPL(XML-based Graphical Image Processing Language),它將相關(guān)實現(xiàn)代碼封裝為圖像處理“功能模塊”,使學(xué)生可以將注意力集中在整體算法步驟的理解上,而不用擔(dān)心語言細(xì)節(jié)。基于該語言,可以開發(fā)面向圖像處理的可視化編程軟件,其用戶界面和操作類似于Simulink,即通過圖形化模塊設(shè)計界面或直接書寫所需要的XML模塊文件,來預(yù)先實現(xiàn)好所需的圖像處理步驟的功能,如圖像的二值化、顏色空間轉(zhuǎn)換、常用的濾波操作、區(qū)域標(biāo)記和特征提取等等,然后由用戶在可視化編程界面中通過拖放、刪除、連接模塊以及圖形化的設(shè)置模塊參數(shù)等操作,實現(xiàn)完整的圖像處理任務(wù)的編程,之后可視化編程軟件將負(fù)責(zé)分析和解釋所實現(xiàn)的圖形化程序,將其翻譯為MATLAB m文件函數(shù),并自動在MATLAB執(zhí)行程序和返回處理結(jié)果。

二、圖像處理功能模塊的設(shè)計

圖像處理功能模塊(Image Processing Module,IPM)是具有輸入和輸出、完成特定圖像處理步驟的基本編程單元。在可視化編程界面中,每個IPM就是一個可獨立增減、拖拽并能夠與程序的其他部分通過連線相連接的實體。IPM的定義由IPM文件給出。我們用XML語言來定義模塊,因為XML語言本身具有靈活性和易讀性,能夠自由地定義所需的內(nèi)容;XML的編輯很方便,通過普通的文本編輯器即可進行;此外在很多開發(fā)環(huán)境中,都有現(xiàn)成的XML解析器可用,從而大大方便了IPM和可視化圖像處理程序的翻譯過程。

1.IPM的具體設(shè)計

每個IPM的XML結(jié)構(gòu)中包含一個名為 “ipmod”的根節(jié)點,其下包含如下子節(jié)點:①mod_name節(jié)點。給出了每個IPM在模塊庫中的全局唯一的標(biāo)識,且與IPM的XML文件名相同;②mod_help節(jié)點。提供了本IPM的幫助信息,可在可視化編程界面中為用戶提供模塊的用法;③glyph節(jié)點。用于指定一個圖片文件路徑,以便在可視化編程界面中提供更加直觀和美觀的模塊外觀;④parent_group節(jié)點。用于以樹狀結(jié)構(gòu)組織和管理眾多IPM構(gòu)成的模塊庫;⑤port_pos節(jié)點。用于指定可視化界面中IPM的輸入輸出端口出現(xiàn)的位置。port_pos又包含兩個子節(jié)點:inport_pos節(jié)點和outport_pos節(jié)點,分別指定了輸入端口和輸出端口的位置;⑥inputs節(jié)點和outputs節(jié)點。分別用于定義與IPM的輸入和輸出有關(guān)的信息。在inputs節(jié)點和outputs節(jié)點之下,又分別可包含一個或多個inport節(jié)點和outport節(jié)點,它們具體定義了每個輸入端口和輸出端口,其結(jié)構(gòu)稍后介紹。inputs節(jié)點和outputs節(jié)點為可選節(jié)點,即一個IPM可以沒有輸入(沒有inputs節(jié)點)或沒有輸出(沒有outputs節(jié)點),但不能兩者均無;⑦implement節(jié)點。給出了實現(xiàn)本IPM的處理功能的MATLAB代碼。

inputs節(jié)點下的 inport節(jié)點及 outputs節(jié)點下的outport節(jié)點定義了IPM的各輸入、輸出端口,相當(dāng)于IPM的輸入和輸出參數(shù)。inport節(jié)點和outport節(jié)點均包含如下子節(jié)點:

(1)port_name節(jié)點。給出了該端口在IPM內(nèi)的唯一名稱,并且在 IPM 的 implement代碼中通過“% port_name”的方式加以引用。

(2)port_help節(jié)點。給出了該端口的幫助性文本。

此外,inport節(jié)點還包含:

(3)可選的value_range節(jié)點。當(dāng)一個inport節(jié)點包含value_range節(jié)點時,表示該端口的取值有一定的范圍限制,因此在可視化界面中可以采用適當(dāng)?shù)姆绞剑ㄈ鐫L動條或下拉菜單等)更方便地加以設(shè)定。輸入端口的取值范圍又可采用如下三種形式之一:①整數(shù)取值范圍。用value_range節(jié)點下的int_range子節(jié)點表示,而int_range下又含一個max子節(jié)點和一個min子節(jié)點,分別給出可選的整數(shù)值的上下限;②實數(shù)取值范圍。用real_range子節(jié)點表示,其下同樣包含一個max和一個min子節(jié)點來給出上下限;③類別型取值范圍。用cat_set字節(jié)點表示,其下包含若干cat子節(jié)點,每個cat子節(jié)點的值一般為一個MATLAB字符串。

(4)可選的default節(jié)點。表明當(dāng)該輸入端口未與其他模塊的輸出端口相連,也沒有通過用戶編輯來設(shè)置一個值時,該端口的缺省取值。若存在default節(jié)點,則表明該輸入是可選參數(shù),否則輸入是必選參數(shù),必須由用戶通過上述兩種方式之一為其提供所需的值。

2.IPM示例

下面以一個示例性的ReadImage IPM的XML文件來說明所定義的結(jié)構(gòu)。ReadImage模塊定義的代碼如下,為簡潔起見,其中略去了mod_help、glyph、port_pos、parent_group和port_help等非核心節(jié)點:

由上述代碼可見,ReadImage模塊包含兩個輸入端口——Path端口和Format端口。Path端口用于指定待讀取的圖像文件的路徑,是必選端口,需要用戶在可視化編程的模塊編輯界面中輸入或通過其他模塊傳入;Format端口用于指定圖像文件的格式,具有類別型的取值范圍,指出了模塊支持的圖像文件格式,而缺省值為“Auto-determined”,即模塊根據(jù)文件后綴名自動確定圖像文件格式。輸出端口只有一個,即ImageData端口,是所讀取到的圖像數(shù)據(jù)矩陣。在implement節(jié)點中可以看到模塊功能的實現(xiàn)代碼。

三、可視化圖像處理程序的結(jié)構(gòu)設(shè)計

1.圖像處理程序的設(shè)計

在可視化編程界面上放置、拖拽和連接IPM的實例,即可構(gòu)成圖像處理程序(Image Processing Program,IPP)。我們同樣利用XML來作為程序源代碼的組織方式。圖像處理程序的XML根節(jié)點是“ipprog”節(jié)點,其下包括1個memo節(jié)點和若干個block節(jié)點。memo節(jié)點僅是對IPP的描述和介紹,而構(gòu)成IPP實質(zhì)功能的部分是block節(jié)點。

block節(jié)點包含如下子節(jié)點:

(1)block_name節(jié)點。block_name是程序中每個IPM實例在IPP范圍內(nèi)的唯一標(biāo)識。一個IPM可能在一個IPP中有多個實例,但這些實例必須具有不同的block_name。

(2)module節(jié)點。儲存了該IPM實例所使用的IPM的名字,即IPM定義中的mod_name。

(3)inputs節(jié)點。儲存了該IPM實例的輸入值的信息。inputs節(jié)點下包含一個或多個inport節(jié)點,每個inport節(jié)點描述了相應(yīng)的輸入端口的輸入值信息,由如下子節(jié)點構(gòu)成:①port_name節(jié)點。輸入端口的端口名,即IPM定義中的port_name;②value_type節(jié)點。value_type節(jié)點的可能取值為“internal”或“external”。internal表示該端口的輸入值是由用戶在模塊編輯界面中輸入而來,并非來自其他IPM實例的輸出;external則表示該端口的輸入值由其他IPM實例的輸出所提供;③value節(jié)點。當(dāng)value_type為internal時,用戶提供的輸入值儲存于value節(jié)點中;當(dāng)value_type為external時,則不應(yīng)出現(xiàn)value節(jié)點;④src_block節(jié)點和src_outport節(jié)點。當(dāng)value_type為external時,src_block節(jié)點儲存了該輸入端口的輸入所來自的那個 IPM實例的名字,即前述的block_name;src_outport節(jié)點指出了所來自的該IPM實例的具體輸出端口名。通過src_block和src_outport便隱含地描述了IPM間的連接情況。當(dāng)value_type為internal時,不應(yīng)出現(xiàn)src_block和src_outport節(jié)點。

2.IPP示例

我們通過如下示例IPP來進行說明:

這個簡單的程序包括兩個IPM實例:reader和writer。reader模塊是一個ReadImage IPM,在程序的輸入設(shè)置下由 “image.jpg”文件讀入圖像;writer模塊是一個SaveImage IPM,在程序的輸出設(shè)置下將reader讀入的圖像數(shù)據(jù)再保存為圖像文件“result.jpg”。

四、可視化圖像處理程序翻譯器

可視化圖像處理程序翻譯器的作用,是將IPP自動轉(zhuǎn)為可在MATLAB中執(zhí)行的.m函數(shù)文件。翻譯器的基本工作思路是首先對IPM和IPP的XML文件進行解析,獲取各個XML節(jié)點信息,然后以系統(tǒng)性的編碼和命名方式來產(chǎn)生所需的.m文件。

在完成XML文件解析后,先根據(jù)程序所用各IPM的implement元素,以子函數(shù)形式封裝這些代碼。封裝的主要思路是,利用IPM名作為子函數(shù)名,采用系統(tǒng)性的方法定義輸入輸出的變量名,例如對于第1個輸入,可以定義為 “in1__”。在定義了輸入輸出的變量名后,將implement代碼中以%port_name形式給出的輸入輸出變量替換為所生成的變量名。

整個IPP的翻譯則首先需要對IPM實例按調(diào)用的邏輯順序進行排序。程序要能夠執(zhí)行,要求每個IPM實例(所對應(yīng)的子函數(shù))在被調(diào)用前,其輸入都已確定。因此我們需要對IPM實例排序??紤]到IPM實例數(shù)量通常不大,我們重復(fù)地遍歷這些IPM實例,并對它們進行標(biāo)號。開始時,所有IPM實例的標(biāo)號均為0。如果一個IPM實例的某個輸入端口的value_type為internal,或者該端口為external,但與其連接的src_block IPM實例已經(jīng)被標(biāo)號,那么這個輸入端口的值就已經(jīng)確定;如果一個IPM實例沒有輸入端口,或者所有輸入端口的值均已確定,那么就用一個大于0的整數(shù)值標(biāo)號該IPM實例。當(dāng)所有IPM實例均被標(biāo)號,或者在一次遍歷中沒有IPM實例被標(biāo)號,那么整個排序過程即告完成。

之后,按標(biāo)號由小到大的順序?qū)⒚總€IPM實例轉(zhuǎn)為對相應(yīng)子函數(shù)的調(diào)用代碼,并采用系統(tǒng)性的方法來命名IPM實例的輸入輸出端口對應(yīng)的變量,最后以程序文件名作為函數(shù)名,為翻譯好的代碼加上MATLAB函數(shù)定義頭,并保存為同名的.m文件,便完成了翻譯。

例如,經(jīng)過翻譯之后,由第二節(jié)中示例IPM所得的子函數(shù)以及第三節(jié)中示例IPP對該子函數(shù)進行調(diào)用的MATLAB代碼如下:

五、開展圖像處理編程訓(xùn)練的若干層次

利用本文所設(shè)計的xGIPL可視化圖像處理編程語言,可以開展不同層次的圖像處理編程訓(xùn)練。我們目前所能考慮到的就至少包括以下三個層次:

(1)使用xGIPL在已有模塊的基礎(chǔ)上進行可視化編程。學(xué)生通過使用現(xiàn)成的IPM來進行可視化編程,能夠了解和掌握解決特定圖像處理任務(wù)的整體性思路,并能夠直觀地感受處理的效果以及程序的性能。這一層次屬于較低的訓(xùn)練層次。

(2)通過MATLAB編程來自行實現(xiàn)關(guān)鍵的IPM,并通過可視化編程完成應(yīng)用的完整實現(xiàn)。在該訓(xùn)練層次下,學(xué)生應(yīng)對MATLAB語言編程有相當(dāng)程度地掌握,并且也能夠完成IPM的設(shè)計,從而能夠針對特定的圖像處理問題自行實現(xiàn)其中的關(guān)鍵步驟,并完成IPM的封裝。這一層次屬于中等訓(xùn)練層次,能夠鍛煉學(xué)生對MATLAB這一高級編程語言的運用。

(3)通過MATLAB的C/C++MEX編程來實現(xiàn)關(guān)鍵的、對于計算性能有較高要求的圖像處理功能,從而能夠更高效地完成整個圖像處理任務(wù)。這一訓(xùn)練層次要求學(xué)生不但熟悉xGIPL和MATLAB語言,而且也熟悉C/ C++編程,并且能夠使用C/C++語言進行圖像處理算法的低層級編程,因此屬于最高的訓(xùn)練層次。

[1]翁花群,林元國.基于Visual C++的數(shù)字圖像處理實驗教學(xué)軟件開發(fā)[J].廊坊師范學(xué)院學(xué)報(自然科學(xué)版), 2015(1):24-28.

[2]李志欣,卓亞琦.基于OpenCV的數(shù)字圖像處理實驗教學(xué)研究[J].大學(xué)教育,2013(9):42-43.

[3]張帆.基于OpenCV實踐項目的數(shù)字圖像處理教學(xué)方法探索[J].亞太教育,2015(22):133.

[4]鄭林濤,董永生.ImageJ軟件在數(shù)字圖像處理課程教學(xué)中的應(yīng)用[J].中國電力教育,2014(8):112-113.

[5]施幫利,韓武紅,楊奕.基于DSP的數(shù)字圖像基本處理實驗教學(xué)探討[J].中國電力教育,2013(10):171-173.

[6]魯億方,藍(lán)金輝,遲健男.基于DSP的數(shù)字圖像處理實驗的探究[J].實驗技術(shù)與管理,2014(3):109-113.

[7]邱廣萍.MATLABGUIDE在數(shù)字圖像處理教學(xué)中的應(yīng)用[J].價值工程,2014(3):184,186.

[8]趙敏.MATLAB用于數(shù)字圖像處理的教學(xué)實踐研究[J].電腦知識與技術(shù),2012(31):7539-7540.

[9]肖龍飛,李金龍,楊凱,etal.基于MATLAB的數(shù)字圖像處理教學(xué)軟件的設(shè)計[J].信息技術(shù),2014(12):185-187.

(編輯:魯利瑞)

G434

A

1673-8454(2017)08-0093-04

湖南省普通高等學(xué)校教學(xué)改革研究項目 “面向MOOC的 《數(shù)字圖像處理》可視化編程遠(yuǎn)程實驗系統(tǒng)研究”(521293198);湖南大學(xué)教學(xué)改革研究項目“面向MOOC的《科學(xué)與工程計算方法及應(yīng)用》遠(yuǎn)程實驗系統(tǒng)研究”(521202085);教育部卓越工程師計劃項目:湖南大學(xué)測控技術(shù)與儀器(教高[2011]1號);全國專業(yè)改革綜合試點項目:湖南大學(xué)測控技術(shù)與儀器專業(yè)綜合改革(教高司函[2011]226號)。

猜你喜歡
編程語言圖像處理實例
壓力-體積轉(zhuǎn)換在CFC編程語言中的實現(xiàn)解析
Java編程語言的特點與應(yīng)用
機器學(xué)習(xí)在圖像處理中的應(yīng)用
電子制作(2018年18期)2018-11-14 01:48:20
淺談不同編程語言對計算機軟件開發(fā)的影響
電子制作(2018年1期)2018-04-04 01:48:36
模糊圖像處理,刑事偵查利器
圖像處理技術(shù)的實戰(zhàn)應(yīng)用
面向?qū)ο骔eb開發(fā)編程語言的的評估方法
完形填空Ⅱ
完形填空Ⅰ
Photo Shop通道在圖像處理中的應(yīng)用
河南科技(2014年1期)2014-02-27 14:04:06
博客| 探索| 清丰县| 盐源县| 武隆县| 成武县| 中西区| 商城县| 南通市| 宣汉县| 连南| 磴口县| 鹤壁市| 丰顺县| 香格里拉县| 凌云县| 新乡县| 黄浦区| 启东市| 阿鲁科尔沁旗| 涪陵区| 盐源县| 千阳县| 宁乡县| 平陆县| 潞西市| 定南县| 灵台县| 江川县| 黄浦区| 武安市| 澄迈县| 紫云| 高密市| 平凉市| 南平市| 民乐县| 墨竹工卡县| 阿鲁科尔沁旗| 松溪县| 红桥区|