當(dāng)前位置:全球化工設(shè)備網(wǎng) > 技術(shù) > 論文文集 > 正文

管道過濾器模式在數(shù)字圖像處理中的應(yīng)用研究

作者: 2013年07月18日 來源: 瀏覽量:
字號(hào):T | T
模式是軟件開發(fā)實(shí)踐智慧的結(jié)晶,它作為一種理論反過來對軟件的開發(fā)又起著指導(dǎo)作用。根據(jù)軟件開發(fā)的階段以及開發(fā)的粒度,模式可分為:體系結(jié)構(gòu)模式、設(shè)計(jì)模式和慣用法?1。而本文的管道和過濾器模式是體系結(jié)構(gòu)模式中的

  模式是軟件開發(fā)實(shí)踐智慧的結(jié)晶,它作為一種理論反過來對軟件的開發(fā)又起著指導(dǎo)作用。根據(jù)軟件開發(fā)的階段以及開發(fā)的粒度,模式可分為:體系結(jié)構(gòu)模式、設(shè)計(jì)模式和慣用法?1。而本文的管道和過濾器模式是體系結(jié)構(gòu)模式中的一種
  1 主要的特征是:
  (1)為處理數(shù)據(jù)的系統(tǒng)提供了一種結(jié)構(gòu);
  (2)每個(gè)處理步驟封裝在一個(gè)過濾器組件中,每個(gè)過濾器可以單獨(dú)修改,其功能單一;
  (3)數(shù)據(jù)通過相鄰過濾器之間的管道傳輸;
  (4)重組過濾器可以建立相關(guān)的系統(tǒng)族;
  (5)過濾器是獨(dú)立運(yùn)行的部件:
 ?、倜總€(gè)過濾器除了輸入和輸出外,受了壬何其他過濾器運(yùn)行的影響。也就是,在設(shè)計(jì)上過濾器之間不共享任何狀態(tài)信息;
 ?、谝粋€(gè)過濾器對其處理的上游和下游連接的過濾器是“無知”的;獨(dú)立性還表現(xiàn)在它的設(shè)計(jì)和使用不對與其連接的任何過濾器施加限制,唯一關(guān)心的是其輸人數(shù)據(jù),然后進(jìn)行加工處理,最后產(chǎn)生數(shù)據(jù)輸出。該模式應(yīng)用的基本特點(diǎn)是:把系統(tǒng)任務(wù)分成幾個(gè)相連的處理步驟,一步驟的輸出是一步驟的輸入,而且數(shù)據(jù)的處理和控制并發(fā)進(jìn)行。目前典型的管道過濾器體系結(jié)構(gòu)的例子是以Unix sheu編寫的程序。Unix既提供一種符號(hào),以連接各組成部分(Unix的進(jìn)程),又提供某種進(jìn)程運(yùn)行時(shí)機(jī)制以實(shí)現(xiàn)管道。另一個(gè)著名的例子是傳統(tǒng)的編譯器。傳統(tǒng)的編譯器一直被認(rèn)為是一種管道系統(tǒng),在該系統(tǒng)中,一個(gè)階段(包括詞法分析、語法分析、語義分析和代碼生成)的輸出是另一個(gè)階段的輸入。

  2 問題
  在處理數(shù)據(jù)流的語境中,建立一個(gè)必須處理或轉(zhuǎn)換輸入數(shù)據(jù)流的系統(tǒng)。這樣的系統(tǒng)需要滿足以下強(qiáng)制條件:對數(shù)據(jù)的處理可以容易地分成幾個(gè)處理步驟;操作順序精確一致;數(shù)據(jù)順序精確一致;處理并行性;系統(tǒng)的升級可以通過替換/增an/重組處理步驟實(shí)現(xiàn),有時(shí)甚至由使用者完成操作;不同的處理步驟不共享信息;存在不同的輸人數(shù)據(jù)源;負(fù)載要求盡可能的平衡。在該系統(tǒng)中可進(jìn)一步細(xì)分如下四種:(1)將系統(tǒng)任務(wù)分成幾個(gè)順序的處理步驟,這些步驟之間通過數(shù)據(jù)流連接,每個(gè)步驟稱為過濾器。(2)系統(tǒng)的輸人由諸如文本文件,或者其他的數(shù)據(jù)源提供。(3)系統(tǒng)的輸出流人數(shù)據(jù)匯點(diǎn)。(4)管道連接數(shù)據(jù)源、過濾器和數(shù)據(jù)匯點(diǎn),它負(fù)責(zé)實(shí)現(xiàn)相鄰步驟之間的數(shù)據(jù)流動(dòng)。

  3 系統(tǒng)用到的四種數(shù)據(jù)結(jié)構(gòu)
  3.1過濾器結(jié)構(gòu)
  過濾器是流水線的處理單元,負(fù)責(zé)豐富,提煉或轉(zhuǎn)換它的輸人數(shù)據(jù),如圖1所示。它以下面的三種方式工作:隨后的流水線單元從過濾器中拉出數(shù)據(jù)(被動(dòng)過濾器);前面的流水線單元把新的輸人數(shù)據(jù)壓人過濾器(被動(dòng)過濾器);過濾器以循環(huán)的方式工作,從流水線中拉出輸人數(shù)據(jù)并且將其輸出數(shù)據(jù)壓人流水線(主動(dòng)過濾器)。
  
  3.2管道結(jié)構(gòu)
  管道表示過濾器之間的連接;數(shù)據(jù)源和第一個(gè)過濾器之間的連接;以及最后的過濾器和數(shù)據(jù)匯點(diǎn)之間的連接。如果管道連接兩個(gè)主動(dòng)過濾器,那么管道需要進(jìn)行緩沖和同步,如圖2所示。如果兩個(gè)主動(dòng)組件是由管道中的某個(gè)過濾器控制,那么管道可以直接調(diào)用來實(shí)現(xiàn)。但是,直接的調(diào)用將使得過濾器的重組更加困難。
  
  數(shù)據(jù)源表示系統(tǒng)的輸人,它提供一系列相同結(jié)構(gòu)或類型的值,如圖3所示。流水線的數(shù)據(jù)源可以主動(dòng)地把數(shù)據(jù)值推人第一個(gè)處理階段,也可以在第一個(gè)過濾器拉出時(shí)被動(dòng)地提供數(shù)據(jù)。
  3.4數(shù)據(jù)匯點(diǎn)
  數(shù)據(jù)匯點(diǎn)收集來自流水線端的結(jié)果,如圖4所示。其工作方式有兩種:主動(dòng)數(shù)據(jù)匯點(diǎn)把前面處理階段的結(jié)果拉出來;被動(dòng)數(shù)據(jù)匯點(diǎn)允許前面的過濾器把結(jié)果推或?qū)戇M(jìn)出。
  

  4 管道和過濾器模式的動(dòng)態(tài)特性
  流水線規(guī)定了數(shù)據(jù)流的流動(dòng)方向,但是其控制流根據(jù)不同的情況可以有多種方式。具體到確定控制流,可以根據(jù)實(shí)際的系統(tǒng)中有哪些主動(dòng)組件來確定。以下是動(dòng)態(tài)特性的四種場景(其中n和f2是計(jì)算函數(shù))。
  場景1:推進(jìn)流水線,其活動(dòng)從數(shù)據(jù)源開始,每個(gè)過濾器是被動(dòng)的過濾器。如圖5所示:

  場景2:拉出流水線,其活動(dòng)從數(shù)據(jù)匯點(diǎn)開始,每個(gè)過濾器是主動(dòng)過濾器。如圖6所示。
  場景3:推一拉流水線,其活動(dòng)從第二個(gè)過濾器開始。如圖7所示:
  
  場景4:典型的管道個(gè)過濾器系統(tǒng),所有的過濾器都循環(huán)主動(dòng)拉出、計(jì)算并推人數(shù)據(jù)。在這種情況下,每個(gè)過濾器以它自己的控制線程運(yùn)行,過濾器之間利用管道進(jìn)行同步。如圖8所示:
  
  5 實(shí)現(xiàn)方案
  5.1將系統(tǒng)任務(wù)分成一系列處理階段
  (1)每個(gè)階段必須只依賴前一階段的輸出。
  (2)需要注意替換處理步驟時(shí)的方法:重新設(shè)計(jì)時(shí)替換;運(yùn)行時(shí)刻替換;安裝后進(jìn)行替換。
  5.2定義沿每個(gè)管道傳輸?shù)臄?shù)據(jù)格式
  (1)定義一個(gè)統(tǒng)一的格式可以獲得最大的靈活性,但是可能帶來效率問題。
  (2)必須定義如何標(biāo)識(shí)輸人結(jié)束:0值,一1值等。
  (3)可能需要有其他的語義控制標(biāo)志:比如數(shù)據(jù)幀結(jié)束,數(shù)據(jù)異常標(biāo)志等。
  5.3決定如何實(shí)現(xiàn)每個(gè)管道連接
  (1)確定每個(gè)過濾器是被動(dòng)的還是主動(dòng)的。
  (2)定義每個(gè)過濾器的數(shù)據(jù)是由壓人數(shù)據(jù)還是由拉出數(shù)據(jù)啟動(dòng)的。
  (3)定義數(shù)據(jù)如何傳遞:通過直接調(diào)用;通過分離的管道機(jī)制進(jìn)行緩沖和同步;同時(shí),使用相同的管道機(jī)制使得過濾器重組更加容易。
  5.4設(shè)計(jì)和實(shí)現(xiàn)過濾器
  (1)基于過濾器需要完成的任務(wù),相鄰的管道來設(shè)計(jì)過濾器。
  (2)考慮地址空間之間拷貝數(shù)據(jù)的需要。
  (3)考慮管道緩沖區(qū)大小。
  (4)考慮重用過濾器,能夠按照特定的方式控制他們的行為:從哪個(gè)管道讀取數(shù)據(jù)?向那個(gè)管道輸送數(shù)據(jù)?
  5.5設(shè)計(jì)出錯(cuò)處理
  (1)錯(cuò)誤處理很難做到,往往被忽略。
  (2)如果一個(gè)過濾器在其輸人數(shù)據(jù)中探測到錯(cuò):它可以忽略輸入,直到一些清楚的分隔符出現(xiàn);停止處理,重置狀態(tài),等待某個(gè)特定的開始符號(hào)出現(xiàn)。
  (3)很難給出處理錯(cuò)誤的一般策略。
  5.6考慮管道的動(dòng)態(tài)重組
  (1)當(dāng)需要重組過濾器的時(shí)候,首先要考慮在什么時(shí)候可以進(jìn)行動(dòng)態(tài)重組?   
  (2)如何重新定向過濾器的輸人和輸出?
  (3)由誰啟動(dòng)?是否在輸人數(shù)據(jù)流中增加控制符號(hào)?

  6 管道和過濾器的一個(gè)應(yīng)用實(shí)例
  假若要開發(fā)這樣的軟件:汽車牌照識(shí)別系統(tǒng)[引。該系統(tǒng)一般可順序地分為車輛圖像獲取、車輛牌照子圖像定位與分割、字符識(shí)別。流程如圖9所示:
   
  由于系統(tǒng)任務(wù)分成幾個(gè)順序的處理步驟,這些步驟之間通過數(shù)據(jù)流連接,而且前一步驟的輸出是下一步驟的輸人,如圖10。因而開發(fā)整個(gè)系統(tǒng)可應(yīng)用管道和過濾器模式。整個(gè)系統(tǒng)不僅如此,每一個(gè)步驟也具有該特征。該系統(tǒng)的關(guān)鍵步驟是上圖的第一和第二兩個(gè)方框圖,并且第二個(gè)框圖的開發(fā)質(zhì)量直接影響到第三個(gè)框圖。現(xiàn)在用管道和過濾器模式來開發(fā)第二個(gè)方框圖的牌照子圖像的定位。相應(yīng)的對象建模圖可設(shè)計(jì)成圖1 1:


  該對象建模圖出現(xiàn)的場景如下[ ]:
  · 彩色位圖的輸人是通過視頻捕獲到的24位真彩色圖。
  · 為了便于對圖像的處理,將彩色圖進(jìn)行灰度化形成8位的灰度圖。這可采用主動(dòng)過濾器來調(diào)用LoadBitMap()函數(shù)得到灰度化的數(shù)據(jù)流?;叶然梢圆捎矛F(xiàn)行標(biāo)準(zhǔn)的平均值算法g=0.3R+0.59G+0.1lB。(g:表示灰度化后的值,R、G、B表示紅綠藍(lán)三元色)
  · 由于得到的圖像一般有一些缺陷,例如成像時(shí)光線不足,使得整幅圖偏暗,或者成像時(shí)光照過強(qiáng),使得整幅圖偏亮,從而造成圖像的對比度偏低,這就需要進(jìn)行灰度拉伸?;叶壤炜稍O(shè)計(jì)成主動(dòng)過濾器,來調(diào)用灰度化函數(shù)ColorTransGray()來作為自己的數(shù)據(jù)輸人。
  · 邊緣提取也可采用主動(dòng)過濾器,調(diào)用灰度拉伸函數(shù)GrayStreteh()作為自己的數(shù)據(jù)輸人。其算法可用RoberDIB,SobelDIB,Prewitt中的一種,產(chǎn)生的是邊緣幅度圖像,用Hough變換提取直線的算法進(jìn)一步來補(bǔ)充產(chǎn)生的邊緣幅度圖像。
  · 模板匹配可設(shè)計(jì)成Pull和Push過濾器,一方面它將邊緣提取函數(shù)的輸出作為自己的數(shù)據(jù)流輸人,通過調(diào)用邊緣提取函數(shù)來完成。另一方面將模板匹配計(jì)算的結(jié)果壓人管道進(jìn)行緩存。
  · 驗(yàn)證并輸出圖像對象讀取管道中的數(shù)據(jù),調(diào)用CoutImage()函數(shù)輸出字符分割對象。

  7 效果
  7.1管道和過濾器模式有許多優(yōu)點(diǎn)
  可通過組件的重組和重用來創(chuàng)建新的處理流水線,例如在實(shí)例中,汽車牌照定位系統(tǒng)是一個(gè)沒有數(shù)據(jù)匯點(diǎn)的處理流水線,將它加人到字符分割識(shí)別處理流水線中,在加上前面的圖像的獲取形成一個(gè)新的處理流水線一汽車牌照識(shí)別系統(tǒng)。也就是說管道和過濾器的重組和重用的特性增加了軟件開發(fā)的靈活性。處理數(shù)據(jù)流不一定需要中問文件,這是管道和過濾器的又一個(gè)優(yōu)點(diǎn)。在一個(gè)把中間結(jié)果放在文件中的系統(tǒng),文件目錄的安排策略是不容易的。而且在每次運(yùn)行系統(tǒng)時(shí)不得不重新建立處理步驟,這種方法是易出錯(cuò)的。
  7.2管道和過濾器模式也有它自己的不足
  第一,不相連的處理步驟不共享信息。假如該模式有大量的共享全局?jǐn)?shù)據(jù),那么用該模式建立的系統(tǒng)不僅不夠靈活,而且還很昂貴。第二,對所有過濾器的輸人和輸出使用單數(shù)據(jù)格式增加了數(shù)據(jù)轉(zhuǎn)換的額外開銷。第三,錯(cuò)誤恢復(fù)和錯(cuò)誤處理策略難以實(shí)現(xiàn)。

  8 結(jié)束語
  本文只討論了管道和過濾器模式,它只是許多模式中的一種。模式覆蓋了軟件開發(fā)的各個(gè)方面,根據(jù)不同的應(yīng)用應(yīng)選擇不同的模式,或者多種模式同時(shí)并存。例如用代理者模式、微核模式、管道和過濾器模式來開發(fā)分布式系統(tǒng),用M—A—V模式和P—A—V模式來開發(fā)交互式系統(tǒng),用映像模式和微核模式來開發(fā)適應(yīng)式系統(tǒng),等等,這樣形成了模式系統(tǒng)_1 J。特別在軟件開發(fā)的過程當(dāng)中,要利用我們的經(jīng)驗(yàn)和智慧來開發(fā)挖掘模式、組織模式和利用模式,在軟件開發(fā)中發(fā)揮指導(dǎo)作用。
 

全球化工設(shè)備網(wǎng)(http://www.bhmbl.cn )友情提醒,轉(zhuǎn)載請務(wù)必注明來源:全球化工設(shè)備網(wǎng)!違者必究.

標(biāo)簽:

分享到:
免責(zé)聲明:1、本文系本網(wǎng)編輯轉(zhuǎn)載或者作者自行發(fā)布,本網(wǎng)發(fā)布文章的目的在于傳遞更多信息給訪問者,并不代表本網(wǎng)贊同其觀點(diǎn),同時(shí)本網(wǎng)亦不對文章內(nèi)容的真實(shí)性負(fù)責(zé)。
2、如涉及作品內(nèi)容、版權(quán)和其它問題,請?jiān)?0日內(nèi)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間作出適當(dāng)處理!有關(guān)作品版權(quán)事宜請聯(lián)系:+86-571-88970062