当前位置:全球化工设备网 > 技术 > 论文文集 > 正文

管道过滤器模式在数字图像处理中的应用研究

作者: 2013年07月18日 来源: 浏览量:
字号:T | T
模式是软件开发实践智慧的结晶,它作为一种理论反过来对软件的开发又起着指导作用。根据软件开发的阶段以及开发的粒度,模式可分为:体系结构模式、设计模式和惯用法?1。而本文的管道和过滤器模式是体系结构模式中的

  模式是软件开发实践智慧的结晶,它作为一种理论反过来对软件的开发又起着指导作用。根据软件开发的阶段以及开发的粒度,模式可分为:体系结构模式、设计模式和惯用法?1。而本文的管道和过滤器模式是体系结构模式中的一种
  1 主要的特征是:
  (1)为处理数据的系统提供了一种结构;
  (2)每个处理步骤封装在一个过滤器组件中,每个过滤器可以单独修改,其功能单一;
  (3)数据通过相邻过滤器之间的管道传输;
  (4)重组过滤器可以建立相关的系统族;
  (5)过滤器是独立运行的部件:
  ①每个过滤器除了输入和输出外,受了壬何其他过滤器运行的影响。也就是,在设计上过滤器之间不共享任何状态信息;
  ②一个过滤器对其处理的上游和下游连接的过滤器是“无知”的;独立性还表现在它的设计和使用不对与其连接的任何过滤器施加限制,唯一关心的是其输人数据,然后进行加工处理,最后产生数据输出。该模式应用的基本特点是:把系统任务分成几个相连的处理步骤,一步骤的输出是一步骤的输入,而且数据的处理和控制并发进行。目前典型的管道过滤器体系结构的例子是以Unix sheu编写的程序。Unix既提供一种符号,以连接各组成部分(Unix的进程),又提供某种进程运行时机制以实现管道。另一个著名的例子是传统的编译器。传统的编译器一直被认为是一种管道系统,在该系统中,一个阶段(包括词法分析、语法分析、语义分析和代码生成)的输出是另一个阶段的输入。

  2 问题
  在处理数据流的语境中,建立一个必须处理或转换输入数据流的系统。这样的系统需要满足以下强制条件:对数据的处理可以容易地分成几个处理步骤;操作顺序精确一致;数据顺序精确一致;处理并行性;系统的升级可以通过替换/增an/重组处理步骤实现,有时甚至由使用者完成操作;不同的处理步骤不共享信息;存在不同的输人数据源;负载要求尽可能的平衡。在该系统中可进一步细分如下四种:(1)将系统任务分成几个顺序的处理步骤,这些步骤之间通过数据流连接,每个步骤称为过滤器。(2)系统的输人由诸如文本文件,或者其他的数据源提供。(3)系统的输出流人数据汇点。(4)管道连接数据源、过滤器和数据汇点,它负责实现相邻步骤之间的数据流动。

  3 系统用到的四种数据结构
  3.1过滤器结构
  过滤器是流水线的处理单元,负责丰富,提炼或转换它的输人数据,如图1所示。它以下面的三种方式工作:随后的流水线单元从过滤器中拉出数据(被动过滤器);前面的流水线单元把新的输人数据压人过滤器(被动过滤器);过滤器以循环的方式工作,从流水线中拉出输人数据并且将其输出数据压人流水线(主动过滤器)。
  
  3.2管道结构
  管道表示过滤器之间的连接;数据源和第一个过滤器之间的连接;以及最后的过滤器和数据汇点之间的连接。如果管道连接两个主动过滤器,那么管道需要进行缓冲和同步,如图2所示。如果两个主动组件是由管道中的某个过滤器控制,那么管道可以直接调用来实现。但是,直接的调用将使得过滤器的重组更加困难。
  
  数据源表示系统的输人,它提供一系列相同结构或类型的值,如图3所示。流水线的数据源可以主动地把数据值推人第一个处理阶段,也可以在第一个过滤器拉出时被动地提供数据。
  3.4数据汇点
  数据汇点收集来自流水线端的结果,如图4所示。其工作方式有两种:主动数据汇点把前面处理阶段的结果拉出来;被动数据汇点允许前面的过滤器把结果推或写进出。
  

  4 管道和过滤器模式的动态特性
  流水线规定了数据流的流动方向,但是其控制流根据不同的情况可以有多种方式。具体到确定控制流,可以根据实际的系统中有哪些主动组件来确定。以下是动态特性的四种场景(其中n和f2是计算函数)。
  场景1:推进流水线,其活动从数据源开始,每个过滤器是被动的过滤器。如图5所示:

  场景2:拉出流水线,其活动从数据汇点开始,每个过滤器是主动过滤器。如图6所示。
  场景3:推一拉流水线,其活动从第二个过滤器开始。如图7所示:
  
  场景4:典型的管道个过滤器系统,所有的过滤器都循环主动拉出、计算并推人数据。在这种情况下,每个过滤器以它自己的控制线程运行,过滤器之间利用管道进行同步。如图8所示:
  
  5 实现方案
  5.1将系统任务分成一系列处理阶段
  (1)每个阶段必须只依赖前一阶段的输出。
  (2)需要注意替换处理步骤时的方法:重新设计时替换;运行时刻替换;安装后进行替换。
  5.2定义沿每个管道传输的数据格式
  (1)定义一个统一的格式可以获得最大的灵活性,但是可能带来效率问题。
  (2)必须定义如何标识输人结束:0值,一1值等。
  (3)可能需要有其他的语义控制标志:比如数据帧结束,数据异常标志等。
  5.3决定如何实现每个管道连接
  (1)确定每个过滤器是被动的还是主动的。
  (2)定义每个过滤器的数据是由压人数据还是由拉出数据启动的。
  (3)定义数据如何传递:通过直接调用;通过分离的管道机制进行缓冲和同步;同时,使用相同的管道机制使得过滤器重组更加容易。
  5.4设计和实现过滤器
  (1)基于过滤器需要完成的任务,相邻的管道来设计过滤器。
  (2)考虑地址空间之间拷贝数据的需要。
  (3)考虑管道缓冲区大小。
  (4)考虑重用过滤器,能够按照特定的方式控制他们的行为:从哪个管道读取数据?向那个管道输送数据?
  5.5设计出错处理
  (1)错误处理很难做到,往往被忽略。
  (2)如果一个过滤器在其输人数据中探测到错:它可以忽略输入,直到一些清楚的分隔符出现;停止处理,重置状态,等待某个特定的开始符号出现。
  (3)很难给出处理错误的一般策略。
  5.6考虑管道的动态重组
  (1)当需要重组过滤器的时候,首先要考虑在什么时候可以进行动态重组?   
  (2)如何重新定向过滤器的输人和输出?
  (3)由谁启动?是否在输人数据流中增加控制符号?

  6 管道和过滤器的一个应用实例
  假若要开发这样的软件:汽车牌照识别系统[引。该系统一般可顺序地分为车辆图像获取、车辆牌照子图像定位与分割、字符识别。流程如图9所示:
   
  由于系统任务分成几个顺序的处理步骤,这些步骤之间通过数据流连接,而且前一步骤的输出是下一步骤的输人,如图10。因而开发整个系统可应用管道和过滤器模式。整个系统不仅如此,每一个步骤也具有该特征。该系统的关键步骤是上图的第一和第二两个方框图,并且第二个框图的开发质量直接影响到第三个框图。现在用管道和过滤器模式来开发第二个方框图的牌照子图像的定位。相应的对象建模图可设计成图1 1:


  该对象建模图出现的场景如下[ ]:
  · 彩色位图的输人是通过视频捕获到的24位真彩色图。
  · 为了便于对图像的处理,将彩色图进行灰度化形成8位的灰度图。这可采用主动过滤器来调用LoadBitMap()函数得到灰度化的数据流。灰度化可以采用现行标准的平均值算法g=0.3R+0.59G+0.1lB。(g:表示灰度化后的值,R、G、B表示红绿蓝三元色)
  · 由于得到的图像一般有一些缺陷,例如成像时光线不足,使得整幅图偏暗,或者成像时光照过强,使得整幅图偏亮,从而造成图像的对比度偏低,这就需要进行灰度拉伸。灰度拉伸可设计成主动过滤器,来调用灰度化函数ColorTransGray()来作为自己的数据输人。
  · 边缘提取也可采用主动过滤器,调用灰度拉伸函数GrayStreteh()作为自己的数据输人。其算法可用RoberDIB,SobelDIB,Prewitt中的一种,产生的是边缘幅度图像,用Hough变换提取直线的算法进一步来补充产生的边缘幅度图像。
  · 模板匹配可设计成Pull和Push过滤器,一方面它将边缘提取函数的输出作为自己的数据流输人,通过调用边缘提取函数来完成。另一方面将模板匹配计算的结果压人管道进行缓存。
  · 验证并输出图像对象读取管道中的数据,调用CoutImage()函数输出字符分割对象。

  7 效果
  7.1管道和过滤器模式有许多优点
  可通过组件的重组和重用来创建新的处理流水线,例如在实例中,汽车牌照定位系统是一个没有数据汇点的处理流水线,将它加人到字符分割识别处理流水线中,在加上前面的图像的获取形成一个新的处理流水线一汽车牌照识别系统。也就是说管道和过滤器的重组和重用的特性增加了软件开发的灵活性。处理数据流不一定需要中问文件,这是管道和过滤器的又一个优点。在一个把中间结果放在文件中的系统,文件目录的安排策略是不容易的。而且在每次运行系统时不得不重新建立处理步骤,这种方法是易出错的。
  7.2管道和过滤器模式也有它自己的不足
  第一,不相连的处理步骤不共享信息。假如该模式有大量的共享全局数据,那么用该模式建立的系统不仅不够灵活,而且还很昂贵。第二,对所有过滤器的输人和输出使用单数据格式增加了数据转换的额外开销。第三,错误恢复和错误处理策略难以实现。

  8 结束语
  本文只讨论了管道和过滤器模式,它只是许多模式中的一种。模式覆盖了软件开发的各个方面,根据不同的应用应选择不同的模式,或者多种模式同时并存。例如用代理者模式、微核模式、管道和过滤器模式来开发分布式系统,用M—A—V模式和P—A—V模式来开发交互式系统,用映像模式和微核模式来开发适应式系统,等等,这样形成了模式系统_1 J。特别在软件开发的过程当中,要利用我们的经验和智慧来开发挖掘模式、组织模式和利用模式,在软件开发中发挥指导作用。
 

全球化工设备网(http://www.chemsb.com )友情提醒,转载请务必注明来源:全球化工设备网!违者必究.

标签:

分享到:
免责声明:1、本文系本网编辑转载或者作者自行发布,本网发布文章的目的在于传递更多信息给访问者,并不代表本网赞同其观点,同时本网亦不对文章内容的真实性负责。
2、如涉及作品内容、版权和其它问题,请在30日内与本网联系,我们将在第一时间作出适当处理!有关作品版权事宜请联系:+86-571-88970062