陳韜
(江蘇科技大學計算機學院,江蘇鎮(zhèn)江212003)
在人們進入到信息大爆炸時代的背景下,各種信息也不斷豐富,網(wǎng)絡技術(shù)及數(shù)字信息技術(shù)也處于高度發(fā)展狀態(tài),只有通過計算,才能夠?qū)Ω鞣N信息進行合理。并且目前計算機并不只是局限于傳統(tǒng)PC,而是包括各種性能、形態(tài)的嵌入式系統(tǒng),在后PC時代不斷到來的過程中,人們也開始逐漸接觸嵌入式產(chǎn)品的概念,嵌入式產(chǎn)品也被廣泛應用與人們?nèi)粘I罴肮ぷ鬟^程中,包括手機、空調(diào)及冰箱等家電。將嵌入式技術(shù)和圖像處理相互結(jié)合,開發(fā)設計基于嵌入式圖像處理的系統(tǒng),能夠進一步的降低系統(tǒng)成本,提高系統(tǒng)的可靠性、可移動性及可控性。那么本文就從嵌入式圖像處理系統(tǒng)的軟件方面進行設計,包括圖像采集模塊、Linux系統(tǒng)、文件模塊等。
基于嵌入式圖像處理系統(tǒng)軟件主要包括文件模塊、圖像編碼模塊、Linux系統(tǒng)等構(gòu)成,能夠?qū)崿F(xiàn)嵌入式圖像的優(yōu)化處理,提高系統(tǒng)的性能,并且使系統(tǒng)具有可擴展性[1]。系統(tǒng)的設計流程為:
圖1 嵌入式圖像處理系統(tǒng)軟件設計結(jié)構(gòu)
圖像采集模塊是系統(tǒng)在工作過程中能夠良好運行的條件,其不僅要有硬件設計,還要有相應的軟件支持實現(xiàn),軟件的設計主要包括器件邏輯控制時序設計及通訊設計,其都是通過CPLD實現(xiàn)[2]。
通過CCD圖像傳感器實現(xiàn)圖像信號采集過程中,首先就要對CCD驅(qū)動電路進行設計。CCD驅(qū)動信號較多且復雜,并且要通過不同的電壓實現(xiàn)驅(qū)動,所以就要設計軟件驅(qū)動電路。在面陣像素不斷增多的過程中,幀頻率也會不斷的提高,對于CCD驅(qū)動時序的要求也會越來越嚴格[3]。
本系統(tǒng)的CCD驅(qū)動時序主要包括感光區(qū)、串行寄存器、存儲區(qū)及信號放大模塊組成。使用單項時鐘驅(qū)動作為基礎,CCD的正常驅(qū)動要通過信號實現(xiàn),分別為復位信號、控制存儲器像素移動信號、控制感光區(qū)像素移動信號、控制串行讀出串行寄存器們信號等。要根據(jù)讀出模式,選擇雙通道或者單通道的輸出及不同的模式[4]。圖2為系統(tǒng)的時序圖,通過圖2可以看出來,要想能夠使CCD正常的工作,需要的驅(qū)動時序數(shù)量要較多,并且關(guān)系較為復雜[5]。
圖2 系統(tǒng)的時序圖
CCD驅(qū)動方法中,單片機驅(qū)動是系統(tǒng)軟件設計中常用的方式,具有良好的靈活性,但是頻率較低。在復雜可編程邏輯器件不斷發(fā)展的過程中,CCD的驅(qū)動方式也在發(fā)生著變化[6],通過可編程邏輯器件CPLD實現(xiàn)電子電路設計能夠縮短系統(tǒng)的開發(fā)周期,降低成本,提高系統(tǒng)的靈活性,并且其還具有擦除可編程的能力,在系統(tǒng)研發(fā)的過程中,在出現(xiàn)設計錯誤或者需要吸怪的時候,只要在原設計文件中實現(xiàn)重新變成就行,不需要對電路的布局進行修改,從而其被廣泛應用到驅(qū)動電路維護、設計及升級過程中[7]。
圖像的采集要通過圖像清除、感光、并行傳輸及讀出4個階段,讀出階段的時間最長,在采集過程中,通過處理器發(fā)出信號并且告訴CPLD開始采集,在開始新采集之前,要先將所有的狀態(tài)進行清除,從而能夠提高ODB信號[8]。在清除之后進入到感光期,感光的時間相當于曝光的長度,短時間的曝光會導致CCD受到光子沖擊,從而導致圖像的曝光不足,但是長時間的曝光會導致圖像感光過度。在曝光之后,就要使光電轉(zhuǎn)換,將電荷進行轉(zhuǎn)移。最后階段就是將存儲區(qū)中的像素通過串行寄存器發(fā)送輸出端,讀出期包括串行及傳輸兩個過程,通過時鐘脈沖實現(xiàn)[9]。圖3為圖像采集的實現(xiàn)過程。
圖3 圖像采集的實現(xiàn)過程
A表示空閑狀態(tài);B表示CCD清除狀態(tài);C表示光積分狀態(tài);D表示信號并行傳輸狀態(tài);E表示信號讀出狀態(tài);F表示信號讀出狀態(tài);G表示完成狀態(tài)。
在嵌入式圖像處理系統(tǒng)中文件模塊的設計,使用LED接口直接和內(nèi)置接口相互連接,在設計系統(tǒng)觸摸屏的過程中,選擇ADS作為系統(tǒng)界面觸摸屏控制器,從而有效提高系統(tǒng)界面的控制能力。系統(tǒng)功能的實現(xiàn)包括圖像文件的打開、包括、打印及退出等操作,系統(tǒng)文件的處理模塊通過圖像文件讀取問題針對性的精心設計,從而能夠?qū)崿F(xiàn)圖像的各種操作[10],以下為系統(tǒng)圖像文件的打開及保存功能的設計:
在嵌入式圖像處理系統(tǒng)中,菜單的打開主要是在系統(tǒng)設計過程中使用uigetfile()函數(shù)實現(xiàn),實現(xiàn)圖像標準的讀取,從而能夠在文件處理對話框中將圖像打開[11],設計代碼主要代碼為:
嵌入式圖像處理系統(tǒng)設計中的圖像堡村菜單主要是通過uiputfile()標準實現(xiàn)的,設計代碼為:
處理器要創(chuàng)建嵌入式Linux系統(tǒng)功能,從而使應用軟件能夠在系統(tǒng)上運行,以此實現(xiàn)圖像的捕獲、編碼及傳輸?shù)裙δ堋J紫?,將板卡的撥碼開關(guān)設置為SD卡啟動,將u boot bin啟動文件進行燒寫到nandflash中,之后將撥碼開關(guān)設置為nandflash方式啟動,將nfs根文件系統(tǒng)進行掛截,之后實現(xiàn)上電啟動,實現(xiàn)應用程序的開發(fā)。在SD卡方式啟動下,嵌入式操作系統(tǒng)要通過Uboot及MLO作為引導[12],嵌入式Linux系統(tǒng)的引導過程詳見圖4。
圖4 嵌入式Linux系統(tǒng)的引導過程
通過TI公司的底層驅(qū)動程序及軟件開發(fā)包,通過虛擬機進入開發(fā)包目錄,實現(xiàn)uboot源文件的編譯,從而生成可執(zhí)行ubootbin及MLO文件;實現(xiàn)linux源文件的編譯,從而生成內(nèi)核,將開發(fā)包中的rootfs文件系統(tǒng)打包壓縮,將SD卡通過USB接口實現(xiàn)虛擬機的掛載,通過分區(qū)命令生成rootfs及boot分區(qū),將其中的各文件寶貝到boot分區(qū)中,之后再rootfs分區(qū)中創(chuàng)建文件夾,將uimage及ibootbin拷貝到新建文件夾中。
將SD卡放入到卡板槽中,將板卡撥碼的開關(guān)設置為啟動,在通電之后,板卡系統(tǒng)的啟動就會登錄到新建文件夾中,實現(xiàn)loadsh腳本的運行。在等待命令運行完成之后,那么uimage及ubootbin就會到nadflash中燒寫,斷開板卡通電,將SD卡取出[13]。
啟動nandflash,嵌入式操作系統(tǒng)的引導通過uboot實現(xiàn),嵌入式liunx系統(tǒng)的引導實現(xiàn)詳見圖5。
圖5 嵌入式liunx系統(tǒng)的引導實現(xiàn)
通過上圖可以看出來,在系統(tǒng)啟動之后,芯片內(nèi)部的RBL會將Nandflash中的uboot程序引導到RAM運行中,uboot會根據(jù)不同的環(huán)境參數(shù)將文件到DDR存儲器中加載并且運行,uimage啟動之后會實現(xiàn)NFS根文件系統(tǒng)在虛擬機中的掛載,從而實現(xiàn)其他程序的開發(fā)。
根據(jù)上文對系統(tǒng)的設計,系統(tǒng)的基本功能就是文件采集、圖像采集等,本節(jié)就將模塊的具體實現(xiàn)進行詳細講述。
在嵌入式平臺中,并沒有自帶的實際文件庫函數(shù)能夠?qū)崿F(xiàn),所以要將文件讀取到內(nèi)存中,是系統(tǒng)得以實現(xiàn)的基礎。本文所設計的系統(tǒng)主要處理兩大塊的圖像,分別為256色圖像及真彩圖,所以要通過兩個文件讀入函數(shù)的設計進行實現(xiàn)。文件入讀是算法中必須的,所以要將兩個函數(shù)放入到文件夾中,以備后用,以下為圖像數(shù)據(jù)讀取的公共函數(shù):
為了具有良好的人機交互界面,系統(tǒng)通過層次化結(jié)構(gòu)實現(xiàn)圖像界面,系統(tǒng)中的接口通過圖像方式表示,通過鍵盤消息及觸摸屏實現(xiàn)各分支的相應,以下介紹主界面接口的實現(xiàn)。
主界面接口為系統(tǒng)的核心,其中包括引導界面的功能,并且向下發(fā)展了不同框架的算法。從整體進行分析,其主要作用就是承上啟下,將嵌入式系統(tǒng)的處理實現(xiàn)分級映射。主界面接口和引導界面的不同之處是在消息處理方面,主界面接口能夠向下連接7個二級界面及返回處理,在處理過程中要注意程序設計的問題,也就是如何返回上級及如何做好下級返回。在確定圖形界面實現(xiàn)細節(jié)之后,就能夠?qū)崿F(xiàn)具體算法接口,本節(jié)對其中某個接口代碼進行說明,調(diào)用接口連接程序要通過觸發(fā)事件實現(xiàn),所以以下代碼為消息等待的循環(huán)[14]。
(1)message=WaitMessage(0);
(2)switch(message->Message){
(3)case OSM_TOUCH_SCREEN:
(4)position1.x=message->W(wǎng)Param&0xffff;
(5)position1.y=message->W(wǎng)Param>>16;
(6)if(IsInRect2(prect1,pposition1)){
(7)ClearScreen();
(8)Menu31(pdc);
(9)ClearScreen();
(10)ShowBmp(pdc,bmpname10,0,0);
(11)}
(12)else if
1為代碼等待消息,之后實現(xiàn)消息等待,如果滿足3的消息類型,就會將消息中的觸摸點縱橫坐標參數(shù)進行提取,在得到消息參數(shù)之后進入到接口程序分支判斷中,根據(jù)判斷的結(jié)果轉(zhuǎn)入到分支實現(xiàn)函數(shù)調(diào)用。8為接口部分,其上下都為在連接接口之前的必要處理。
圖像處理系統(tǒng)使用事件驅(qū)動編程,也就是程序流程并不是只有一個入口及若干個出口的線路,而是程序會在循環(huán)狀態(tài),其中的程序從外部輸入設備得到某些事件,比如鼠標或者按鍵操作等,之后根據(jù)事件類別做出針對性的相應,從而做出針對性的相應及功能,直到程序接收某個消息。事件驅(qū)動屬于底層設備,其中包括消息循環(huán)及消息隊列。通過命令能夠進入到圖像處理系統(tǒng)中,之后出來引導界面,點擊觸摸屏中的任意位置進入系統(tǒng)主界面,圖6為系統(tǒng)主界面的功能。
圖6 系統(tǒng)主界面的功能
系統(tǒng)具有其中圖像算法選擇,能夠點擊對應的觸摸屏實現(xiàn)自身需求[15]。
目前,基于嵌入式的圖像處理系統(tǒng)正在不斷的被各個領(lǐng)域深入研究及豐富,將其通過模塊化的設計,不僅能夠?qū)崿F(xiàn)圖像信息的在線自動處理[16],還能夠?qū)崿F(xiàn)圖形的編輯處理,提高系統(tǒng)圖像處理的準確率,并且實現(xiàn)圖像幾何變換、分割、增強及目標定位等功能,滿足嵌入式圖像處理的在線需求,有效提高系統(tǒng)的設計性能。