陳韜
(江蘇科技大學計算機學院,江蘇鎮江212003)
在人們進入到信息大爆炸時代的背景下,各種信息也不斷豐富,網絡技術及數字信息技術也處于高度發展狀態,只有通過計算,才能夠對各種信息進行合理。并且目前計算機并不只是局限于傳統PC,而是包括各種性能、形態的嵌入式系統,在后PC時代不斷到來的過程中,人們也開始逐漸接觸嵌入式產品的概念,嵌入式產品也被廣泛應用與人們日常生活及工作過程中,包括手機、空調及冰箱等家電。將嵌入式技術和圖像處理相互結合,開發設計基于嵌入式圖像處理的系統,能夠進一步的降低系統成本,提高系統的可靠性、可移動性及可控性。那么本文就從嵌入式圖像處理系統的軟件方面進行設計,包括圖像采集模塊、Linux系統、文件模塊等。
基于嵌入式圖像處理系統軟件主要包括文件模塊、圖像編碼模塊、Linux系統等構成,能夠實現嵌入式圖像的優化處理,提高系統的性能,并且使系統具有可擴展性[1]。系統的設計流程為:

圖1 嵌入式圖像處理系統軟件設計結構
圖像采集模塊是系統在工作過程中能夠良好運行的條件,其不僅要有硬件設計,還要有相應的軟件支持實現,軟件的設計主要包括器件邏輯控制時序設計及通訊設計,其都是通過CPLD實現[2]。
通過CCD圖像傳感器實現圖像信號采集過程中,首先就要對CCD驅動電路進行設計。CCD驅動信號較多且復雜,并且要通過不同的電壓實現驅動,所以就要設計軟件驅動電路。在面陣像素不斷增多的過程中,幀頻率也會不斷的提高,對于CCD驅動時序的要求也會越來越嚴格[3]。
本系統的CCD驅動時序主要包括感光區、串行寄存器、存儲區及信號放大模塊組成。使用單項時鐘驅動作為基礎,CCD的正常驅動要通過信號實現,分別為復位信號、控制存儲器像素移動信號、控制感光區像素移動信號、控制串行讀出串行寄存器們信號等。要根據讀出模式,選擇雙通道或者單通道的輸出及不同的模式[4]。圖2為系統的時序圖,通過圖2可以看出來,要想能夠使CCD正常的工作,需要的驅動時序數量要較多,并且關系較為復雜[5]。

圖2 系統的時序圖
CCD驅動方法中,單片機驅動是系統軟件設計中常用的方式,具有良好的靈活性,但是頻率較低。在復雜可編程邏輯器件不斷發展的過程中,CCD的驅動方式也在發生著變化[6],通過可編程邏輯器件CPLD實現電子電路設計能夠縮短系統的開發周期,降低成本,提高系統的靈活性,并且其還具有擦除可編程的能力,在系統研發的過程中,在出現設計錯誤或者需要吸怪的時候,只要在原設計文件中實現重新變成就行,不需要對電路的布局進行修改,從而其被廣泛應用到驅動電路維護、設計及升級過程中[7]。
圖像的采集要通過圖像清除、感光、并行傳輸及讀出4個階段,讀出階段的時間最長,在采集過程中,通過處理器發出信號并且告訴CPLD開始采集,在開始新采集之前,要先將所有的狀態進行清除,從而能夠提高ODB信號[8]。在清除之后進入到感光期,感光的時間相當于曝光的長度,短時間的曝光會導致CCD受到光子沖擊,從而導致圖像的曝光不足,但是長時間的曝光會導致圖像感光過度。在曝光之后,就要使光電轉換,將電荷進行轉移。最后階段就是將存儲區中的像素通過串行寄存器發送輸出端,讀出期包括串行及傳輸兩個過程,通過時鐘脈沖實現[9]。圖3為圖像采集的實現過程。

圖3 圖像采集的實現過程
A表示空閑狀態;B表示CCD清除狀態;C表示光積分狀態;D表示信號并行傳輸狀態;E表示信號讀出狀態;F表示信號讀出狀態;G表示完成狀態。
在嵌入式圖像處理系統中文件模塊的設計,使用LED接口直接和內置接口相互連接,在設計系統觸摸屏的過程中,選擇ADS作為系統界面觸摸屏控制器,從而有效提高系統界面的控制能力。系統功能的實現包括圖像文件的打開、包括、打印及退出等操作,系統文件的處理模塊通過圖像文件讀取問題針對性的精心設計,從而能夠實現圖像的各種操作[10],以下為系統圖像文件的打開及保存功能的設計:
在嵌入式圖像處理系統中,菜單的打開主要是在系統設計過程中使用uigetfile()函數實現,實現圖像標準的讀取,從而能夠在文件處理對話框中將圖像打開[11],設計代碼主要代碼為:


嵌入式圖像處理系統設計中的圖像堡村菜單主要是通過uiputfile()標準實現的,設計代碼為:

處理器要創建嵌入式Linux系統功能,從而使應用軟件能夠在系統上運行,以此實現圖像的捕獲、編碼及傳輸等功能。首先,將板卡的撥碼開關設置為SD卡啟動,將u boot bin啟動文件進行燒寫到nandflash中,之后將撥碼開關設置為nandflash方式啟動,將nfs根文件系統進行掛截,之后實現上電啟動,實現應用程序的開發。在SD卡方式啟動下,嵌入式操作系統要通過Uboot及MLO作為引導[12],嵌入式Linux系統的引導過程詳見圖4。

圖4 嵌入式Linux系統的引導過程
通過TI公司的底層驅動程序及軟件開發包,通過虛擬機進入開發包目錄,實現uboot源文件的編譯,從而生成可執行ubootbin及MLO文件;實現linux源文件的編譯,從而生成內核,將開發包中的rootfs文件系統打包壓縮,將SD卡通過USB接口實現虛擬機的掛載,通過分區命令生成rootfs及boot分區,將其中的各文件寶貝到boot分區中,之后再rootfs分區中創建文件夾,將uimage及ibootbin拷貝到新建文件夾中。
將SD卡放入到卡板槽中,將板卡撥碼的開關設置為啟動,在通電之后,板卡系統的啟動就會登錄到新建文件夾中,實現loadsh腳本的運行。在等待命令運行完成之后,那么uimage及ubootbin就會到nadflash中燒寫,斷開板卡通電,將SD卡取出[13]。
啟動nandflash,嵌入式操作系統的引導通過uboot實現,嵌入式liunx系統的引導實現詳見圖5。

圖5 嵌入式liunx系統的引導實現
通過上圖可以看出來,在系統啟動之后,芯片內部的RBL會將Nandflash中的uboot程序引導到RAM運行中,uboot會根據不同的環境參數將文件到DDR存儲器中加載并且運行,uimage啟動之后會實現NFS根文件系統在虛擬機中的掛載,從而實現其他程序的開發。
根據上文對系統的設計,系統的基本功能就是文件采集、圖像采集等,本節就將模塊的具體實現進行詳細講述。
在嵌入式平臺中,并沒有自帶的實際文件庫函數能夠實現,所以要將文件讀取到內存中,是系統得以實現的基礎。本文所設計的系統主要處理兩大塊的圖像,分別為256色圖像及真彩圖,所以要通過兩個文件讀入函數的設計進行實現。文件入讀是算法中必須的,所以要將兩個函數放入到文件夾中,以備后用,以下為圖像數據讀取的公共函數:

為了具有良好的人機交互界面,系統通過層次化結構實現圖像界面,系統中的接口通過圖像方式表示,通過鍵盤消息及觸摸屏實現各分支的相應,以下介紹主界面接口的實現。
主界面接口為系統的核心,其中包括引導界面的功能,并且向下發展了不同框架的算法。從整體進行分析,其主要作用就是承上啟下,將嵌入式系統的處理實現分級映射。主界面接口和引導界面的不同之處是在消息處理方面,主界面接口能夠向下連接7個二級界面及返回處理,在處理過程中要注意程序設計的問題,也就是如何返回上級及如何做好下級返回。在確定圖形界面實現細節之后,就能夠實現具體算法接口,本節對其中某個接口代碼進行說明,調用接口連接程序要通過觸發事件實現,所以以下代碼為消息等待的循環[14]。
(1)message=WaitMessage(0);
(2)switch(message->Message){
(3)case OSM_TOUCH_SCREEN:
(4)position1.x=message->WParam&0xffff;
(5)position1.y=message->WParam>>16;
(6)if(IsInRect2(prect1,pposition1)){
(7)ClearScreen();
(8)Menu31(pdc);
(9)ClearScreen();
(10)ShowBmp(pdc,bmpname10,0,0);
(11)}
(12)else if
1為代碼等待消息,之后實現消息等待,如果滿足3的消息類型,就會將消息中的觸摸點縱橫坐標參數進行提取,在得到消息參數之后進入到接口程序分支判斷中,根據判斷的結果轉入到分支實現函數調用。8為接口部分,其上下都為在連接接口之前的必要處理。
圖像處理系統使用事件驅動編程,也就是程序流程并不是只有一個入口及若干個出口的線路,而是程序會在循環狀態,其中的程序從外部輸入設備得到某些事件,比如鼠標或者按鍵操作等,之后根據事件類別做出針對性的相應,從而做出針對性的相應及功能,直到程序接收某個消息。事件驅動屬于底層設備,其中包括消息循環及消息隊列。通過命令能夠進入到圖像處理系統中,之后出來引導界面,點擊觸摸屏中的任意位置進入系統主界面,圖6為系統主界面的功能。

圖6 系統主界面的功能
系統具有其中圖像算法選擇,能夠點擊對應的觸摸屏實現自身需求[15]。
目前,基于嵌入式的圖像處理系統正在不斷的被各個領域深入研究及豐富,將其通過模塊化的設計,不僅能夠實現圖像信息的在線自動處理[16],還能夠實現圖形的編輯處理,提高系統圖像處理的準確率,并且實現圖像幾何變換、分割、增強及目標定位等功能,滿足嵌入式圖像處理的在線需求,有效提高系統的設計性能。