淺析監(jiān)控圖像處理系統(tǒng)的軟件結(jié)構(gòu)
Windows圖像軟件系統(tǒng)的基礎(chǔ)結(jié)構(gòu)
在Windows操作系統(tǒng)且采用單屏方式的條件下,要對圖像進(jìn)行處理,就必須將圖像裝入內(nèi)存。當(dāng)物理內(nèi)存不足時(shí),系統(tǒng)通過內(nèi)存分頁交換,利用硬盤空間模擬內(nèi)存。應(yīng)用程序使用統(tǒng)一的系統(tǒng)內(nèi)存管理,代碼簡單,維護(hù)方便,還具有自動(dòng)伸縮性。
圖像作為一個(gè)處理對象放到內(nèi)存中,必須使用數(shù)據(jù)結(jié)構(gòu)來描述它,這就是圖像數(shù)據(jù)結(jié)構(gòu)。對于任何一個(gè)圖像應(yīng)用程序來說,圖像數(shù)據(jù)總是應(yīng)用程序數(shù)據(jù)的核心部分。
應(yīng)用程序的所有功能幾乎都是圍繞它進(jìn)行的。如文件讀寫、掃描、拍攝、處理、顯示、打印等,都需要建立、訪問圖像數(shù)據(jù),實(shí)際上都是以圖像數(shù)據(jù)結(jié)構(gòu)核心為中心的。即使是最簡單的圖像顯示軟件,也需要圖像文件讀取和圖像顯示兩大部分。
一個(gè)圖像軟件系統(tǒng),包括不同的圖像處理算法、圖像顯示、掃描儀或攝像機(jī)支持、圖像采集卡支持、圖像文件格式轉(zhuǎn)換等,都涉及到圖像數(shù)據(jù)結(jié)構(gòu)。如果我們建立了一個(gè)以圖像數(shù)據(jù)結(jié)構(gòu)為核心的Windows圖像軟件系統(tǒng)的基礎(chǔ)結(jié)構(gòu),就建立了一個(gè)完整的軟件圖像環(huán)境。
圖像基礎(chǔ)結(jié)構(gòu)包括圖像數(shù)據(jù)結(jié)構(gòu)核心和圍繞此核心構(gòu)造的周邊模塊。圖像數(shù)據(jù)結(jié)構(gòu)核心是居于中心位置的。周邊模塊包括圖像文件格式支持、圖像顯示、圖像處理等。
在設(shè)計(jì)過程中,要注意以下幾個(gè)問題:
圖像基礎(chǔ)結(jié)構(gòu)的核心部分以C/C++語言完成。因?yàn)镃/C++語言編譯效率高,執(zhí)行速度快,這對于要處理大量數(shù)據(jù)的圖像應(yīng)用來說是非常關(guān)鍵的;且C/C++ 語言非常靈活,使得圖像基礎(chǔ)結(jié)構(gòu)可以高效的實(shí)現(xiàn),而用其他的語言實(shí)現(xiàn)某些相同的功能可能要花很大的精力;C/C++語言移植性強(qiáng),幾乎可以移植到任何硬件和操作系統(tǒng)中。
圖像基礎(chǔ)結(jié)構(gòu)的內(nèi)部實(shí)現(xiàn)可以使用C++,但是對外接口一律使用C界面。因?yàn)镃++的名字解析方法沒有統(tǒng)一的標(biāo)準(zhǔn),不同公司的C++編譯器對相同的C++符號解析得到的名字可能完全不同,因此不同C++編譯器生成的目標(biāo)文件不能正確連接。這使得像Windows系統(tǒng)下具有C++接口的動(dòng)態(tài)連接庫(DLL)的應(yīng)用不太可行,所以對外接口使用C語言則沒有這個(gè)問題。
避免使用依賴于平臺(tái)的聲明、函數(shù)等,保持核心的可移植性。圖像核心定義和代碼只使用標(biāo)準(zhǔn)C數(shù)據(jù)類型和標(biāo)準(zhǔn)C庫(ANSI)調(diào)用。當(dāng)需要高端應(yīng)用時(shí),圖像核心可以迅速移植到UNIX及其他平臺(tái),使整個(gè)應(yīng)用具備較強(qiáng)的移植能力和伸縮性。
目前,圖像基礎(chǔ)結(jié)構(gòu)包含如下模塊:
·StdImage:圖像數(shù)據(jù)結(jié)構(gòu)核心以及對此核心進(jìn)行操作的基本函數(shù);
·ProgressStub:進(jìn)度處理機(jī)制的定義和接口;
·VirtualFile:虛擬文件I/O界面;
·Vf_file:虛擬文件I/O的實(shí)際文件實(shí)現(xiàn);
·Vf_memory:虛擬文件I/O的內(nèi)存文件實(shí)現(xiàn);
·ImageFile:虛擬圖像文件讀寫界面;
·Jfit_file:虛擬圖像文件讀寫界面的JPEG格式實(shí)現(xiàn);
·Bmp-file:虛擬圖像文件讀寫界面的BMP格式實(shí)現(xiàn);
·Fgi_file:虛擬圖像文件讀寫界面的自由灰度圖像格式實(shí)現(xiàn);
·DibStdImage:DIB(設(shè)備無關(guān)位圖)與StdImage之間的轉(zhuǎn)換;
·mess_util:難以歸類的雜項(xiàng)輔助功能;
·ProgressWinHint:Windows下的一個(gè)進(jìn)度處理機(jī)制實(shí)現(xiàn);
·WinMessUtilities:Windows下的難以歸類的雜項(xiàng)輔助功能。
由于面向幀存的圖像硬件系統(tǒng)的結(jié)構(gòu),以圖像幀存為核心,還包括圖像的輸入輸出和處理等模塊;而面向計(jì)算機(jī)內(nèi)存的圖像系統(tǒng)里,是以計(jì)算機(jī)內(nèi)存為核心,同樣包括有圖像的輸入輸出和處理等模塊。前者以整體硬件結(jié)構(gòu)為主體,軟件似乎只是圖像處理和數(shù)據(jù)存儲(chǔ),后者以整體軟件結(jié)構(gòu)為主體,硬件則納入軟件的管理之下。這兩種系統(tǒng)結(jié)構(gòu)的差別很大,但從功能來講,有其相似之處。
面向計(jì)算機(jī)內(nèi)存的圖像軟件系統(tǒng)結(jié)構(gòu),稱之為Windows圖像基礎(chǔ)結(jié)構(gòu),這種Windows圖像基礎(chǔ)結(jié)構(gòu)的總體結(jié)構(gòu)框圖如圖2所示。在圖2中,StdImage結(jié)構(gòu)代表了一個(gè)圖像或圖像序列,所有的功能幾乎都圍繞它進(jìn)行。它可以利用ImageFile模塊從圖像文件裝入圖像,或者將圖像寫入文件中。在Windows環(huán)境下,為了顯示或打印圖像,通常會(huì)使用DIB,此外,像掃描儀、攝像機(jī)等還會(huì)以DIB的形式向計(jì)算機(jī)輸入圖像,因此圖像基礎(chǔ)結(jié)構(gòu)設(shè)有DibStdImage模塊,以便在DIB和StdImage之間進(jìn)行快速轉(zhuǎn)換。圖像通信插入在網(wǎng)絡(luò)和StdImage之間,由此可以實(shí)現(xiàn)圖像的傳輸,而這種傳輸,是以內(nèi)存為媒介,它具有速度快的優(yōu)點(diǎn)。
評論