《管道过滤器模式在数字图像处理中的应用研究.pdf》由会员分享,可在线阅读,更多相关《管道过滤器模式在数字图像处理中的应用研究.pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 5 4计算机与数字工程第3 4 卷管道过滤器模式在数字图像处理中的应用研究邓红耀1 管庶安1 宋秀丽2 ( 武汉工业学院计算机与信息工程系1 武汉4 3 0 0 2 3 ) ( 湖北工业大学计算机学院2 武汉4 螂2 )摘要管道和过滤器模式是面向模式的结构体系中的一种。就管道和过滤器模式的结构、特点、应用领域、动态特性以及具体的实现方法做了一定的研究,并将该模式在数字图像处理中的应用做了具体的分析。关键词模式软件体系结构管道过滤器算法中图分类号烈9 1 1 7 3融辩a r c l lo fP ! i p 姻a I l l lF 丑t e 璐P a t 细塔a n dA p p H t i
2、 伽t oD i 咖l 卫m a g eP I 0 c 俗s i I l gD e n g 琢) n ;剿1 ) G l l 觚嘶1 ) s 0 I l g l l u 2 )( D e p t o fc 咖p 哪h l I o 劢撕帆E I l g i n e e r i I l g ,W I l l 啪蛳“cu 试v e r s 对,w u h a n4 3 0 0 3 2 )( c 嘣l p u t e rC 0 u e g e , 砌) e iu 血髓畸0 fT e c h 删o g j i 2 ,4 3 0 0 r 7 2 )A b s 打a c IH p e sa 1 1 df m
3、 e r sp a t t e m sa r e8k i r l d0 ft h ep a t f e m 一谢e n t e d 卑D 蛳a r ea r c l l i t e c t u I e T h ep a p e r 出s c u s s e st h ea I l I i t e c t u r e ,c l l a r a c t e r ,a p p l i e dr e a l I I l ,d y n a I I l i ci m p r e s s i o n 觚di t si I I 】一即:l e m 撕鲫o fp i p a n d6 h e I sp a n
4、e m F i I l a y ,“a n a l y s e st 1 1 ep 毗e mt l a ti s 印-p I i e dt ot l ed i 西t a li r 瑚I g ep r o c e 鹤i n g 酗rw o r d s 肛啦e m ,s o f h a r ea I c l l i t e c t 山七,p i p e ,f i h e r ,蛔t I l m( 】a 锚m l 瑚b e r 田四1 1 7 3l前言模式是软件开发实践智慧的结晶,它作为一种理论反过来对软件的开发又起着指导作用。根据软件开发的阶段以及开发的粒度,模式可分为:体系结构模式、设计模式和惯
5、用法。而本文的管道和过滤器模式是体系结构模式中的一种,主要的特征是:( 1 ) 为处理数据的系统提供了一种结构;( 2 ) 每个处理步骤封装在一个过滤器组件中,每个过滤器可以单独修改,其功能单一;( 3 ) 数据通过相邻过滤器之间的管道传输;( 4 ) 重组过滤器可以建立相关的系统族;( 5 ) 过滤器是独立运行的部件:每个过滤器除了输入和输出外,受任何其他过滤器运行的影响。也就是,在设计上过滤器之间不共享任何状态信息;一个过滤器对其处理的上游和下游连接的过滤器是“无知”的;独立性还表现在它的设计和使用不对与其连接的任何过滤器施加限制,唯一关心的是其输人数据,然后进行加工处理,最后产生数据输出
6、。- 收到本文时间:2 0 0 5 年1 0 月1 7 日该模式应用的基本特点是:把系统任务分成几个相连的处理步骤,一步骤的输出是一步骤的输入,而且数据的处理和控制并发进行。目前典型的管道过滤器体系结构的例子是以u n 没s h e u 编写的程序。u n i ) 【既提供一种符号,以连接各组成部分( u n i ) 【的进程) ,又提供某种进程运行时机制以实现管道。另一个著名的例子是传统的编译器。传统的编译器一直被认为是一种管道系统,在该系统中,一个阶段( 包括词法分析、语法分析、语义分析和代码生成) 的输出是另一个阶段的输入。2问题在处理数据流的语境中,建立一个必须处理或转换输入数据流的系
7、统。这样的系统需要满足以下强制条件:对数据的处理可以容易地分成几个处理步骤;操作顺序精确一致;数据顺序精确一致;处理并行性;系统的升级可以通过替换增加重组处理步骤实现,有时甚至由使用者完成操作;不同的处理步骤不共享信息;存在不同的输人数据源;负载要求尽可能的平衡。在该系统中可进一步细分如下四种:( 1 ) 将系统任务分成几个顺序的处理步万方数据第3 4 卷( 2 0 0 6 ) 第8 期计算机与数字工程1 5 5骤,这些步骤之间通过数据流连接,每个步骤称为过滤器。( 2 ) 系统的输入由诸如文本文件,或者其他的数据源提供。( 3 ) 系统的输出流人数据汇点。( 4 ) 管道连接数据源、过滤器和
8、数据汇点,它负责实现相邻步骤之间的数据流动。3系统用到的四种数据结构3 1 过滤器结构过滤器是流水线的处理单元,负责丰富,提炼或转换它的输入数据,如图l 所示。它以下面的三种方式工作:随后的流水线单元从过滤器中拉出数据( 被动过滤器) ;前面的流水线单元把新的输入数据压人过滤器( 被动过滤器) ;过滤器以循环的方式工作,从流水线中拉出输人数据并且将其输出数据压人流水线( 主动过滤器) 。类协作者过滤器管道责任获得输入数据在其输入上执行一个函数供给输出数据图1 过滤器结构的C R C 图3 2 管道结构管道表示过滤器之间的连接;数据源和第一个过滤器之间的连接;以及最后的过滤器和数据汇点之间的连接
9、。如果管道连接两个主动过滤器,那么管道需要进行缓冲和同步,如图2 所示。如果两个主动组件是由管道中的某个过滤器控制,那么管道可以直接调用来实现。但是,直接的调用将使得过滤器的重组更加困难。类协作者管道数据源责任数据汇点 获得输入数据过滤器 在其输入上执行一个函数供给输出数据3 3 数据源图2 管道结构的c R c 图类协作者数据源 管道责任 将输入递送到处理流水线图3 数据源的C R C 图数据源表示系统的输入,它提供一系列相同结、 构或类型的值,如图3 所示。流水线的数据源可以主动地把数据值推人第一个处理阶段,也可以在第 一个过滤器拉出时被动地提供数据。3 4 数据汇点数据汇点收集来自流水线
10、端的结果,如图4 所示。其工作方式有两种:主动数据汇点把前面处理阶段的结果拉出来;被动数据汇点允许前面的过滤器把结果推或写进出。类协作者数据汇点管道责任消耗输出图4 数据汇点的C R C 图4管道和过滤器模式的动态特性流水线规定了数据流的流动方向,但是其控制流根据不同的情况可以有多种方式。具体到确定控制流,可以根据实际的系统中有哪些主动组件来确定。以下是动态特性的四种场景( 其中f l 和亿是计算函数) 。场景1 :推进流水线,其活动从数据源开始,每个过滤器是被动的过滤器。如图5 所示:图5 动态特性的场景1图6 动态特性的场景2场景2 :拉出流水线,其活动从数据汇点开始,每个过滤器是主动过滤
11、器。如图6 所示。万方数据SUME COLLECTION1 5 6管道过滤器模式在数字图像处理中的应用研究第3 4 卷场景3 :推一拉流水线,其活动从第二个过滤器开始。如图7 所示:图7 动态特性的场景3场景4 :典型的管道个过滤器系统,所有的过滤器都循环主动拉出、计算并推人数据。在这种情况下,每个过滤器以它自己的控制线程运行,过滤器之间利用管道进行同步。如图8 所示:图8 动态特性的场景45实现方案5 1 将系统任务分成一系列处理阶段( 1 ) 每个阶段必须只依赖前一阶段的输出。( 2 ) 需要注意替换处理步骤时的方法:重新设计时替换;运行时刻替换;安装后进行替换。5 2 定义沿每个管道传输
12、的数据格式( 1 ) 定义一个统一的格式可以获得最大的灵活性,但是可能带来效率问题。( 2 ) 必须定义如何标识输入结束:0 值,一1 值等。( 3 ) 可能需要有其他的语义控制标志:比如数据帧结束,数据异常标志等。5 3 决定如何实现每个管道连接( 1 ) 确定每个过滤器是被动的还是主动的。( 2 ) 定义每个过滤器的数据是由压人数据还是由拉出数据启动的。( 3 ) 定义数据如何传递:通过直接调用;通过分离的管道机制进行缓冲和同步;同时,使用相同的管道机制使得过滤器重组更加容易。5 4 设计和实现过滤器( 1 ) 基于过滤器需要完成的任务,相邻的管道来设计过滤器。( 2 ) 考虑地址空间之间
13、拷贝数据的需要。( 3 ) 考虑管道缓冲区大小。( 4 ) 考虑重用过滤器,能够按照特定的方式控制他们的行为:从哪个管道读取数据? 向那个管道输送数据?5 5 设计出错处理( 1 ) 错误处理很难做到,往往被忽略。( 2 ) 如果一个过滤器在其输入数据中探测到错:它可以忽略输入,直到一些清楚的分隔符出现;停止处理,重置状态,等待某个特定的开始符号出现。( 3 ) 很难给出处理错误的一般策略。5 6 考虑管道的动态重组( 1 ) 当需要重组过滤器的时候,首先要考虑在什么时候可以进行动态重组? ( 2 ) 如何重新定向过滤器的输入和输出? ( 3 ) 由谁启动? 是否在输人数据流中增加控制符号?6
14、管道和过滤器的一个应用实例假若要开发这样的软件:汽车牌照识别系统 3 | 。该系统一般可顺序地分为车辆图像获取、车辆牌照子图像定位与分割、字符识别。流程如图9所示:图9 汽车牌照识别系统流程图由于系统任务分成几个顺序的处理步骤,这些步骤之间通过数据流连接,而且前一步骤的输出是下一步骤的输入,如图1 0 。因而开发整个系统可应用道和过滤器模式来开 图1 0 数据处理流程图发第二个方框图的牌照子图像的定位。相应的对象建模图可设计成图l1 :万方数据第3 4 卷( 2 0 0 6 ) 第8 期计算机与数字工程1 5 7图l l 对象建模图该对象建模图出现的场景如下1 2 J :彩色位图的输入是通过视
15、频捕获到的2 4 位真彩色图。为了便于对图像的处理,将彩色图进行灰度化形成8 位的灰度图。这可采用主动过滤器来调用I J D a d B i m 印( ) 函数得到灰度化的数据流。灰度 化可以采用现行标准的平均值算法g = O 3 R +0 5 9 G + 0 1 1 B 。( g :表示灰度化后的值,R 、G 、B 表示红绿蓝三元色)由于得到的图像一般有一些缺陷,例如成像时光线不足,使得整幅图偏暗,或者成像时光照过强,使得整幅图偏亮,从而造成图像的对比度偏低,这就需要进行灰度拉伸。灰度拉伸可设计成主动过滤器,来调用灰度化函数C o l o r T I 丑n s G r a y ( ) 来作为
16、自己的数据输入。边缘提取也可采用主动过滤器,调用灰度拉伸函数G m y s 晚t c h ( ) 作为自己的数据输入。其算法可用R o b e r D ,s o b e m I B ,P r e w i n 中的一种,产生的是边缘幅度图像,用H o u 曲变换提取直线的算法进一步来补充产生的边缘幅度图像。模板匹配可设计成P u 和P u s h 过滤器,一方面它将边缘提取函数的输出作为自己的数据流输入,通过调用边缘提取函数来完成。另一方面将模板匹配计算的结果压人管道进行缓存。验证并输出图像对象读取管道中的数据,调用c o u t h - a g e ( ) 函数输出字符分割对象。7 效果7 1
17、 管道和过滤器模式有许多优点可通过组件的重组和重用来创建新的处理流水线,例如在实例中,汽车牌照定位系统是一个没有数据汇点的处理流水线,将它加入到字符分割识别处理流水线中,在加上前面的图像的获取形成一个新的处理流水线一汽车牌照识别系统。也就是说管道和过滤器的重组和重用的特性增加了软件开发的灵活性。处理数据流不一定需要中间文件,这是管道和过滤器的又一个优点。在一个把中间结果放在文件中的系统,文件目录的安排策略是不容易的。而且在每次运行系统时不得不重新建立处理步骤,这种方法是易出错的。7 2 管道和过滤器模式也有它自己的不足第一,不相连的处理步骤不共享信息。假如该模式有大量的共享全局数据,那么用该模
18、式建立的系统不仅不够灵活,而且还很昂贵。第二,对所有过滤器的输入和输出使用单数据格式增加了数据转换的额外开销。第三,错误恢复和错误处理策略难以实现。8结束语本文只讨论了管道和过滤器模式,它只是许多模式中的一种。模式覆盖了软件开发的各个方面,根据不同的应用应选择不同的模式,或者多种模式同时并存。例如用代理者模式、微核模式、管道和 过滤器模式来开发分布式系统,用M A V 模式和P A v 模式来开发交互式系统,用映像模式和微核模式来开发适应式系统,等等,这样形成了模式系统。特别在软件开发的过程当中,要利用我们的经验和智慧来开发挖掘模式、组织模式和利用模式,在软件开发中发挥指导作用。参考文献 1 如I I l l 【B I l s c h m a n n ,R e 舀mM e I 】I I i e r ,H 蛐R 0 h r 耐,P e t e rs o m l I l e d a d ,c h 弛ls t a l 著,郭福亮,赵皑等译面向模式的软件体系结构 M 机械工业出版社,2 0 0 3 2 何斌,马天予等编著v i 吼l a 】c + + 数字图像处理 M 人民邮电出版社,2 0 0 4 3 张宏林编著s u a lC + + 图像模式识别技术及工程实践 M 人民邮电出版社,2 0 0 3万方数据SUME COLLECTION