面向教学的可视化图像处理编程语言设计

来源 :中国教育信息化·基础教育 | 被引量 : 0次 | 上传用户:stonefountain
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要: 针对学生对《数字图像处理》课程内容感到抽象,对编程存在一定畏难情绪的状况,提出利用可视化编程来提高学生对数字图像处理实践的参与程度。为此设计了一种基于XML的图像处理可视化编程语言,为图像处理任务的可视化编程打下了基础。语言定义了图像处理功能模块和程序的结构,以包含可视化实现图像处理流程的必要信息;给出了针对该语言的翻译器的基本原理与关键步骤,能将可视化程序翻译为m文件,从而能在MATLAB环境中执行。基于所设计的语言和翻译器能够实现可视化图像处理程序设计软件,并可引入不同难度层次的图像处理编程训练,有助于学生掌握和运用《数字图像处理》课程的相关方法和技术。
  关键词: 数字图像处理;可视化编程;XML;MATLAB
  中图分类号: G434 文献标志码:A 文章编号:1673-8454(2017)08-0093-04
  一、可视化图像处理编程语言的设计目的
  《数字图像处理》是电子信息类专业一门重要的专业课,因其与机器视觉具有密切关系,在我国制造业升级的大环境下,该课程的教学更具有了重要的意义。《数字图像处理》实践性强,因此针对本课程的演示实验和学生动手的课程实验,已经有许多研究者基于诸如Visual C [1]、OpenCV[2,3]、ImageJ[4]、DSP[5,6]以及MATLAB[7-9]等不同软件和技术提出了实验教学的方案。但从学生实际情况来看,若仅提供操作界面,通过菜单和按钮操作来观察图像处理方法的效果,虽然能适应多数学生的水平,也能帮助直观了解有关方法的效果,但对方法的编程实现训练不足;但若使用某种编程语言来进行实验,哪怕是使用OpenCV或MATLAB這类直接支持图像处理的语言,仍会使相当部分的学生产生畏难情绪,且在实现过程中易于陷入语言本身的细节问题,难以专注于对特定图像处理应用的整体框架性理解。
  在多年的教学过程中,学生普遍对可视化的编程工具表现出新奇感,较少产生畏难情绪,实验的参与度普遍较高。除此之外,可视化编程本身的框图特性,能够直观便捷地描述出算法的主要步骤和流程。因此,本文设计了一种MATLAB环境下用于数字图像处理的可视化编程语言xGIPL(XML-based Graphical Image Processing Language),它将相关实现代码封装为图像处理“功能模块”,使学生可以将注意力集中在整体算法步骤的理解上,而不用担心语言细节。基于该语言,可以开发面向图像处理的可视化编程软件,其用户界面和操作类似于Simulink,即通过图形化模块设计界面或直接书写所需要的XML模块文件,来预先实现好所需的图像处理步骤的功能,如图像的二值化、颜色空间转换、常用的滤波操作、区域标记和特征提取等等,然后由用户在可视化编程界面中通过拖放、删除、连接模块以及图形化的设置模块参数等操作,实现完整的图像处理任务的编程,之后可视化编程软件将负责分析和解释所实现的图形化程序,将其翻译为MATLAB m文件函数,并自动在MATLAB执行程序和返回处理结果。
  二、图像处理功能模块的设计
  图像处理功能模块(Image Processing Module,IPM)是具有输入和输出、完成特定图像处理步骤的基本编程单元。在可视化编程界面中,每个IPM就是一个可独立增减、拖拽并能够与程序的其他部分通过连线相连接的实体。IPM的定义由IPM文件给出。我们用XML语言来定义模块,因为XML语言本身具有灵活性和易读性,能够自由地定义所需的内容;XML的编辑很方便,通过普通的文本编辑器即可进行;此外在很多开发环境中,都有现成的XML解析器可用,从而大大方便了IPM和可视化图像处理程序的翻译过程。
  1.IPM的具体设计
  每个IPM的XML结构中包含一个名为“ipmod”的根节点,其下包含如下子节点:①mod_name节点。给出了每个IPM在模块库中的全局唯一的标识,且与IPM的XML文件名相同;②mod_help节点。提供了本IPM的帮助信息,可在可视化编程界面中为用户提供模块的用法;③glyph节点。用于指定一个图片文件路径,以便在可视化编程界面中提供更加直观和美观的模块外观;④parent_group节点。用于以树状结构组织和管理众多IPM构成的模块库;⑤port_pos节点。用于指定可视化界面中IPM的输入输出端口出现的位置。port_pos又包含两个子节点:inport_pos节点和outport_pos节点,分别指定了输入端口和输出端口的位置;⑥inputs节点和outputs节点。分别用于定义与IPM的输入和输出有关的信息。在inputs节点和outputs节点之下,又分别可包含一个或多个inport节点和outport节点,它们具体定义了每个输入端口和输出端口,其结构稍后介绍。inputs节点和outputs节点为可选节点,即一个IPM可以没有输入(没有inputs节点)或没有输出(没有outputs节点),但不能两者均无;⑦implement节点。给出了实现本IPM的处理功能的MATLAB代码。
  inputs节点下的inport节点及outputs节点下的outport节点定义了IPM的各输入、输出端口,相当于IPM的输入和输出参数。inport节点和outport节点均包含如下子节点:
  (1)port_name节点。给出了该端口在IPM内的唯一名称,并且在IPM的implement代码中通过“%port_name”的方式加以引用。
  (2)port_help节点。给出了该端口的帮助性文本。
  此外,inport节点还包含:
  (3)可选的value_range节点。当一个inport节点包含value_range节点时,表示该端口的取值有一定的范围限制,因此在可视化界面中可以采用适当的方式(如滚动条或下拉菜单等)更方便地加以设定。输入端口的取值范围又可采用如下三种形式之一:①整数取值范围。用value_range节点下的int_range子节点表示,而int_range下又含一个max子节点和一个min子节点,分别给出可选的整数值的上下限;②实数取值范围。用real_range子节点表示,其下同样包含一个max和一个min子节点来给出上下限;③类别型取值范围。用cat_set字节点表示,其下包含若干cat子节点,每个cat子节点的值一般为一个MATLAB字符串。   (4)可选的default节点。表明当该输入端口未与其他模块的输出端口相连,也没有通过用户编辑来设置一个值时,该端口的缺省取值。若存在default节点,则表明该输入是可选参数,否则输入是必选参数,必须由用户通过上述两种方式之一为其提供所需的值。
  2.IPM示例
  下面以一个示例性的ReadImage IPM的XML文件来说明所定义的结构。ReadImage模块定义的代码如下,为简洁起见,其中略去了mod_help、glyph、port_pos、parent_group和port_help等非核心节点:
  
  ReadImage
  
  Path
   Format
  
  
  ’Auto-determined’
  ’bmp’
  ’jpeg’
  ...
  

  ’Auto-determined’
  

  ImageData
  
  if strcmp(%Format, ’Auto-determined’)
  %ImageData = imread(%Path);
  else
  %ImageData = imread(%Path, %Format);
  end
  

  由上述代碼可见,ReadImage模块包含两个输入端口——Path端口和Format端口。Path端口用于指定待读取的图像文件的路径,是必选端口,需要用户在可视化编程的模块编辑界面中输入或通过其他模块传入;Format端口用于指定图像文件的格式,具有类别型的取值范围,指出了模块支持的图像文件格式,而缺省值为“Auto-determined”,即模块根据文件后缀名自动确定图像文件格式。输出端口只有一个,即ImageData端口,是所读取到的图像数据矩阵。在implement节点中可以看到模块功能的实现代码。
  三、可视化图像处理程序的结构设计
  1.图像处理程序的设计
  在可视化编程界面上放置、拖拽和连接IPM的实例,即可构成图像处理程序(Image Processing Program,IPP)。我们同样利用XML来作为程序源代码的组织方式。图像处理程序的XML根节点是“ipprog”节点,其下包括1个memo节点和若干个block节点。memo节点仅是对IPP的描述和介绍,而构成IPP实质功能的部分是block节点。
  block节点包含如下子节点:
  (1)block_name节点。block_name是程序中每个IPM实例在IPP范围内的唯一标识。一个IPM可能在一个IPP中有多个实例,但这些实例必须具有不同的block_name。
  (2)module节点。储存了该IPM实例所使用的IPM的名字,即IPM定义中的mod_name。
  (3)inputs节点。储存了该IPM实例的输入值的信息。inputs节点下包含一个或多个inport节点,每个inport节点描述了相应的输入端口的输入值信息,由如下子节点构成:①port_name节点。输入端口的端口名,即IPM定义中的port_name;②value_type节点。value_type节点的可能取值为“internal”或“external”。internal表示该端口的输入值是由用户在模块编辑界面中输入而来,并非来自其他IPM实例的输出;external则表示该端口的输入值由其他IPM实例的输出所提供;③value节点。当value_type为internal时,用户提供的输入值储存于value节点中;当value_type为external时,则不应出现value节点;④src_block节点和src_outport节点。当value_type为external时,src_block节点储存了该输入端口的输入所来自的那个IPM实例的名字,即前述的block_name;src_outport节点指出了所来自的该IPM实例的具体输出端口名。通过src_block和src_outport便隐含地描述了IPM间的连接情况。当value_type为internal时,不应出现src_block和src_outport节点。
  2.IPP示例
  我们通过如下示例IPP来进行说明:
  
  This is an examplar application diagram.
  

  
  writer
  SaveImage
  
   ImageIn
  external
  reader
  ImageData

   Path
  internal
  ’result.jpg’

   Format
  internal
  ’Auto-determined’
  

  
  reader
  ReadImage
  
   Path
  internal
  ’image1.jpg’

   Format
  internal
  ’Auto-determined’
  

  這个简单的程序包括两个IPM实例:reader和writer。reader模块是一个ReadImage IPM,在程序的输入设置下由“image.jpg”文件读入图像;writer模块是一个SaveImage IPM,在程序的输出设置下将reader读入的图像数据再保存为图像文件“result.jpg”。
  四、可视化图像处理程序翻译器
  可视化图像处理程序翻译器的作用,是将IPP自动转为可在MATLAB中执行的.m函数文件。翻译器的基本工作思路是首先对IPM和IPP的XML文件进行解析,获取各个XML节点信息,然后以系统性的编码和命名方式来产生所需的.m文件。
  在完成XML文件解析后,先根据程序所用各IPM的implement元素,以子函数形式封装这些代码。封装的主要思路是,利用IPM名作为子函数名,采用系统性的方法定义输入输出的变量名,例如对于第1个输入,可以定义为“in1__”。在定义了输入输出的变量名后,将implement代码中以%port_name形式给出的输入输出变量替换为所生成的变量名。
  整个IPP的翻译则首先需要对IPM实例按调用的逻辑顺序进行排序。程序要能够执行,要求每个IPM实例(所对应的子函数)在被调用前,其输入都已确定。因此我们需要对IPM实例排序。考虑到IPM实例数量通常不大,我们重复地遍历这些IPM实例,并对它们进行标号。开始时,所有IPM实例的标号均为0。如果一个IPM实例的某个输入端口的value_type为internal,或者该端口为external,但与其连接的src_block IPM实例已经被标号,那么这个输入端口的值就已经确定;如果一个IPM实例没有输入端口,或者所有输入端口的值均已确定,那么就用一个大于0的整数值标号该IPM实例。当所有IPM实例均被标号,或者在一次遍历中没有IPM实例被标号,那么整个排序过程即告完成。
  之后,按标号由小到大的顺序将每个IPM实例转为对相应子函数的调用代码,并采用系统性的方法来命名IPM实例的输入输出端口对应的变量,最后以程序文件名作为函数名,为翻译好的代码加上MATLAB函数定义头,并保存为同名的.m文件,便完成了翻译。
  例如,经过翻译之后,由第二节中示例IPM所得的子函数以及第三节中示例IPP对该子函数进行调用的MATLAB代码如下:
  function example()
  reader_Path_in__ = ’image1.jpg’;
  Reader_Format_in__ = ’Auto-determined’;
  [reader_ImageData_out__] = ReadImage
  (reader_Path_in__,reader_Format_in__);
  function [out1__] = ReadImage(in1__, in2__)
  if strcmp(in2__, ’Auto-determined’)
  out1__ = imread(in1__);
  else
  out1__ = imread(in1__, in2__);
  end
  五、开展图像处理编程训练的若干层次
  利用本文所设计的xGIPL可视化图像处理编程语言,可以开展不同层次的图像处理编程训练。我们目前所能考虑到的就至少包括以下三个层次:
  (1)使用xGIPL在已有模块的基础上进行可视化编程。学生通过使用现成的IPM来进行可视化编程,能够了解和掌握解决特定图像处理任务的整体性思路,并能够直观地感受处理的效果以及程序的性能。这一层次属于较低的训练层次。
  (2)通过MATLAB编程来自行实现关键的IPM,并通过可视化编程完成应用的完整实现。在该训练层次下,学生应对MATLAB语言编程有相当程度地掌握,并且也能够完成IPM的设计,从而能够针对特定的图像处理问题自行实现其中的关键步骤,并完成IPM的封装。这一层次属于中等训练层次,能够锻炼学生对MATLAB这一高级编程语言的运用。
  (3)通过MATLAB的C/C MEX编程来实现关键的、对于计算性能有较高要求的图像处理功能,从而能够更高效地完成整个图像处理任务。这一训练层次要求学生不但熟悉xGIPL和MATLAB语言,而且也熟悉C/C 编程,并且能够使用C/C 语言进行图像处理算法的低层级编程,因此属于最高的训练层次。
  参考文献:
  [1]翁花群,林元国.基于Visual C 的数字图像处理实验教学软件开发[J].廊坊师范学院学报(自然科学版),2015(1):24-28.
  [2]李志欣,卓亚琦.基于OpenCV的数字图像处理实验教学研究[J].大学教育,2013(9):42-43.
  [3]张帆.基于OpenCV实践项目的数字图像处理教学方法探索[J].亚太教育,2015(22):133.
  [4]郑林涛,董永生.ImageJ软件在数字图像处理课程教学中的应用[J].中国电力教育,2014(8):112-113.
  [5]施帮利,韩武红,杨奕.基于DSP的数字图像基本处理实验教学探讨[J].中国电力教育,2013(10):171-173.
  [6]鲁亿方,蓝金辉,迟健男.基于DSP的数字图像处理实验的探究[J].实验技术与管理,2014(3):109-113.
  [7]邱广萍.MATLABGUIDE在数字图像处理教学中的应用[J].价值工程,2014(3):184,186.
  [8]赵敏.MATLAB用于数字图像处理的教学实践研究[J].电脑知识与技术,2012(31):7539-7540.
  [9]肖龙飞,李金龙,杨凯,etal.基于MATLAB的数字图像处理教学软件的设计[J].信息技术,2014(12):185-187.
  (编辑:鲁利瑞)
其他文献
摘要:Wiki技术是随着Internet的应用而出现的一种新的网络应用方式,它具有使用简单、协作共享、自组织的特点,能够满足教育教学的应用需求。由于Wiki能够完整地记录下网站建设过程中的数据和信息,把大家共同关心的问题进行深入充分地探讨和研究,并且平台实现非常简单,相关软件能够从网上免费下载,所以比较好地满足农远工程教学模式课题研究的需要,在其它课题研究中也具有比较好的应用前景。  关键词:Wi
摘 要:通过智能手机学习英语不受时间和空间的限制,因此成为大学生课后学习备考的方式之一。目前,一种移动端应用与社交媒体相结合的“打卡”模式逐步成为大学生英语学习的热潮。该模式在先前研究中被误解和忽视,认为是一种商业模式或年輕人的自我表现行为。文章旨在基于活动理论重新探究英语学习“打卡”模式,从而更好地了解社交媒体分享行为的特征和机制,及其如何促进移动端英语学习。350名以中文为母语的某师范大学学生
典 故:出自清·曾樸《孽海花》第三十五回:“我是秉笔直书,悬之国门,不能增损一字。”  原始义:指史官无所畏惧地、真实地、公正地记录历史事实。  造 句:陈明秉笔直书,向上级提了不少意见和建议。
周六晚上,我们全家正在吃晚饭,突然停电了。妈妈从客厅里拿出一支蜡烛点上,房间又亮了。但我发现墙上有了我们全家人的影子:那个弓着背的是爷爷,那个又高又大的是爸爸,那个苗条纤细的是媽妈,那个身材最矮一直在动的肯定是我。爸爸还教我用手比画出各种有趣的影子图案:鸭子、小兔子、老鹰……想不到停电也给我带来这么多快乐!
摘要:通过对幼儿教师的问卷调查和访谈了解到,多数幼儿教师有使用电脑游戏教学的经历,电脑游戏被应用到了幼儿教学领域,对教学有一定的帮助作用,但电脑游戏并没有引起幼儿教师足够的重视,幼儿园电脑游戏数量不足,与教学整合存在着一些问题。文章在描述电脑游戏在幼儿园应用现状的基础上对所反映出的问题进行分析并探讨对策。  关键词:电脑游戏;幼儿教师;幼儿园;幼儿教学  中图分类号:G434文献标识码:A文章编号
“大家小心点!前面有一群水母!”尼卡的母亲雪发出了警告。  一大群水母像一大片白云,扑天盖地地朝尼卡飘过来。水母像白色的云朵,它们一张一合,在海中跳着舞。它们一起游动的时候发出阵阵莹光,宛若夜空中的星星。  “尼卡!尼卡!”尼罗轻声叫它,“小心点儿,别让水母给蜇了!”尼卡跟着父亲小心翼翼地在水母间穿行。  穿过水母群,大家松了一口气。可是小黑背心却在水里打转转,尾巴急剧地晃动,然后又蜷起身子在水里
一年有四季,詩词也有四季。  春天,发现“竹外桃花三两枝”,看到鸟儿在忙碌“几处早莺争暖树”;一场春雨“随风潜入夜”之后,发现“客舍青青柳色新”,不过“草色遥看近却无”;春风吹过 “无边光景一时新,万紫千红总是春”;满园春色“万般红紫斗芳菲”??总之,春天在我眼中就是“万物生光辉”!  一场“黄梅时节家家雨”后,来到了“树荫照水爱晴柔”的夏季,忽然在池塘里发现“小荷才露尖尖角”。我们追逐着蝴蝶,却
摘要:《追风筝的人》一经出版,立即受到多方瞩目和追捧,迅速畅销蹿红,销量居高不下,在众多赞誉和鲜花簇拥的缝隙中,也浮上来诸多的争议和不解。没有一个事物是单独存在的,每一个事物都同时承载两个对立面。卡勒德·胡赛尼和他的《追风筝的人》就很鲜明地体现了这一点。同时,这部小说的主要意象以及其重要线索——风筝,更加体现了事物的多样性和对立性。  关键词:《追风筝的人》 风筝 意象  引言  卡勒德·胡赛尼以
摘要:针对静态IP地址管理方法中管理和安全方面存在的隐患,提出了一种基于WEB与三层交换机的IP地址管理思想,该思想以Linux网络操作系统和三层交换机的远程访问服务为依托,以Apache、PHP和MySQL为手段,成功解决了IP地址管理中存在的这些问题。  关键词:IP;MAC;路由器;Telnet   中图分类号:TP391文献标识码 :B文章编号:1673-8454(2008)04-0070