王炳松,李汶洲,莊圣賢
(西南交通大學(xué)信息科學(xué)與技術(shù)學(xué)院,成都 610031)
CIS 圖像采集處理系統(tǒng)存在數(shù)據(jù)量大,圖像質(zhì)量要求高,同時(shí)對(duì)便攜性、體積、功耗、成本也有極高的要求,因此在設(shè)計(jì)時(shí)必須綜合考慮這些因素,提出合理的設(shè)計(jì)方案。通常的方案是以FPGA 作為主處理器,先將采集到的數(shù)據(jù)全部存到外部緩存,然后從緩存中讀出數(shù)據(jù)處理,后經(jīng)D/A 轉(zhuǎn)換送至PC 端顯示[1]。這種系統(tǒng)雖很穩(wěn)定也不會(huì)出現(xiàn)掉數(shù)據(jù)的情況,但由于FPGA的硬件電路特性,只能做一些簡(jiǎn)單的圖像處理,同時(shí)時(shí)效性、功耗、靈活性也會(huì)很差,不能滿足CIS 圖像處理的要求。另一種方案是,將采集到的數(shù)據(jù)在FPGA 內(nèi)部緩存預(yù)處理之后送DSP 做后續(xù)復(fù)雜處理[2],但有時(shí)我們只要實(shí)時(shí)獲取很好的圖像質(zhì)量,后續(xù)處理不是必須或特定的,并且對(duì)速度要求也不高(如便攜式掃描儀系統(tǒng)),采用FPGA +DSP 會(huì)加大復(fù)雜度和浪費(fèi)資源。所以本設(shè)計(jì)提出一種既能滿足實(shí)時(shí)獲取圖像,又能做后續(xù)復(fù)雜處理的低成本方案。
CIS 圖像采集與處理系統(tǒng)主要由CIS 圖像獲取模塊、實(shí)時(shí)圖像濾波模塊、通信模塊、Qt 顯示與處理模塊以及相應(yīng)的外圍電路組成,各個(gè)模塊的功能介紹如下:
圖像獲取模塊:將CIS 輸出的模擬信號(hào),經(jīng)隔直、放大后,在FPGA的控制下完成A/D 轉(zhuǎn)換,將模擬信號(hào)轉(zhuǎn)換成數(shù)字信號(hào),并將數(shù)字信號(hào)送圖像濾波模塊。
數(shù)字濾波模塊:該模塊的主要功能是:①在FPGA內(nèi)部,對(duì)進(jìn)入該模塊的數(shù)字信號(hào)完成濾波;②將濾波后的數(shù)據(jù)寫入外部緩存器,并在濾波算法間隙將外部緩存中的數(shù)據(jù)讀出發(fā)往USB 傳輸模塊。數(shù)字濾波模塊是整個(gè)設(shè)計(jì)能否成功的關(guān)鍵部分。
通信模塊:配置好USB 固件后,在FPGA 控制下,圖像數(shù)據(jù)通過(guò)USB 傳送到PC 端。同時(shí),USB 也可以接收PC 端的命令,并把命令讀出給FPGA,F(xiàn)PGA譯碼出命令后執(zhí)行相應(yīng)的操作。
PC 端顯示與處理模塊:一方面,PC 端軟件接收到數(shù)據(jù)后,把數(shù)據(jù)編碼成圖像顯示出來(lái)。另一方面,用戶還可以在Qt 軟件上通過(guò)操作界面控制硬件工作,或?qū)D像做復(fù)雜的后續(xù)處理。
CIS 采集處理系統(tǒng)框圖如下圖1 所示。
圖1 CIS 采集處理系統(tǒng)結(jié)構(gòu)框圖
明確了各模塊的功能后,現(xiàn)在要解決的問(wèn)題是:如何把這些模塊組合起來(lái),讓它易于實(shí)現(xiàn),并保持長(zhǎng)時(shí)間的穩(wěn)定性;同時(shí)尋求可靠的改進(jìn)方法,讓圖像質(zhì)量更好。下面將詳細(xì)介紹各模塊的實(shí)現(xiàn)方式。
為擴(kuò)展系統(tǒng)應(yīng)用,該設(shè)計(jì)可選如下采樣模式:按接觸面大小有A4、A5、A6、A7 和任意幅面五種模式,按需求顏色有彩色、黑白、二值三種選擇,按分辨率有300DPI 和600DPI 兩種模式??筛鶕?jù)需要在PC 端選擇好,然后再開(kāi)始采樣。由于CIS是行采集器件,所以必須要計(jì)算好行頻、每行的有效點(diǎn)數(shù)以及采樣的行數(shù),讓采樣出來(lái)的數(shù)據(jù)和PC 端設(shè)置的工作模式相對(duì)應(yīng),同時(shí)為了圖像色彩更加真實(shí),必須調(diào)節(jié)好曝光時(shí)間。再者CIS的輸出是模擬信號(hào),在進(jìn)入FPGA之前,必須把它轉(zhuǎn)換成數(shù)字信號(hào),而要獲得我們需要的數(shù)字信號(hào)必須先對(duì)A/D 內(nèi)部寄存器進(jìn)行正確的配置。當(dāng)然,為防止外部信號(hào)的干擾,數(shù)字信號(hào)在進(jìn)入FPGA 之前會(huì)加隔離芯片對(duì)干擾信號(hào)隔離。
由于電子電路噪聲和低照明度或高溫帶來(lái)的傳感器噪聲大體上呈現(xiàn)高斯分布,為了消除這些噪聲而獲得較好的圖像質(zhì)量,本模塊采用高斯平滑濾波器。實(shí)現(xiàn)高斯濾波,常選用的高斯核有:3 ×3,5 ×5,7 ×7。更大的高斯核需要更多的緩存,也即意味著所需的FPGA 價(jià)格也就更高。綜合性價(jià)比,本設(shè)計(jì)選擇高性價(jià)比FPGA EP4CE10F17C8,此芯片內(nèi)部有46KB RAM,最高工作頻率可達(dá)200MHz,能滿足設(shè)計(jì)要求。
進(jìn)入到FPGA 中的數(shù)字信號(hào),實(shí)時(shí)寫入雙口RAM 緩存,同時(shí)從緩存中讀出所需的圖像數(shù)據(jù)構(gòu)成3 ×3的高斯核,然后進(jìn)行高斯濾波算法,把計(jì)算出的值寫入SDRAM,去檢測(cè)是否可以從雙口RAM 中讀出數(shù)據(jù),如若能,繼續(xù)讀出數(shù)據(jù)計(jì)算,否則把SDRAM 中的數(shù)據(jù)讀出來(lái)寫入FIFO 中,以備下一個(gè)模塊使用。此過(guò)程圖像數(shù)據(jù)依次流入:實(shí)例化雙口RAM、SDRAM、實(shí)例化FIFO,具體的操作流程如下圖2 所示。
圖像傳輸采用外部FPGA 主控Slave FIFO 方式來(lái)實(shí)現(xiàn),因此USB 通信模塊由三部分組成。
(1)FPGA 主控部分
控制濾波后的數(shù)據(jù)有效地寫入已激活的USB大端點(diǎn)FIFO。在USB 固件中配置好端點(diǎn)后,F(xiàn)PGA中完成的只是檢測(cè)端點(diǎn)數(shù)據(jù)包非滿后,從上一模塊的FIFO 中讀出數(shù)據(jù),寫入有效的端點(diǎn)FIFO,直到圖像的數(shù)據(jù)全部寫完,回到初始狀態(tài)。
(2)USB 固件配置部分
Cypress的安裝程序中提供了一些固件配置例程,通常的應(yīng)用只要根據(jù)需要修改相應(yīng)的程序即可,本設(shè)計(jì)是通過(guò)修改例程Bulkloop 中的bulkllop.c 完成的,其它的文件,包括端點(diǎn)配置或協(xié)議文件等,如非必要,盡量不要?jiǎng)?。bulkllop.c 已經(jīng)為用戶搭好了架構(gòu),用戶只需在對(duì)應(yīng)的函數(shù)中添加代碼即可。此處要完成USB 大小端點(diǎn)的配置、檢測(cè)啟動(dòng)掃描信號(hào)及PC 與FPGA 間的通信。端點(diǎn)配置在TD_Init()函數(shù)中完成,需配置的寄存器如下表1 所示。
圖2 圖像濾波算法流程圖
表1 USB 固件配置的寄存器
檢測(cè)啟動(dòng)信號(hào)在TD_Poll(void)函數(shù)中實(shí)現(xiàn),此函數(shù)會(huì)在USB 空閑時(shí)反復(fù)調(diào)用。PC 與FPGA的通信會(huì)在ISR_Ep1out(void)interrupt 0 函數(shù)中完成,當(dāng)EP1OUT 中有數(shù)據(jù)時(shí)就會(huì)觸發(fā)中斷,接收PC 端發(fā)來(lái)的命令,驗(yàn)證后把它傳遞給FPGA 中的編譯碼部分。
FPGA 編譯碼部分,譯碼USB 發(fā)送的指令,并控制FPGA 執(zhí)行相應(yīng)的操作,同時(shí)也可編碼FPGA的狀態(tài)通過(guò)USB 告知PC 端。
設(shè)計(jì)中存在USB 芯片與應(yīng)用程序之間的通信,而應(yīng)用程序和硬件交互信息要借助API 接口,所以本例調(diào)用了Cypress的CyAPI 庫(kù)接收USB的端點(diǎn)數(shù)據(jù)并應(yīng)用Qt 庫(kù)函數(shù)將RGB 數(shù)據(jù)轉(zhuǎn)換成圖像顯示在Qt 軟件上。接收?qǐng)D像數(shù)據(jù)流程如圖3 所示。
圖像顯示出來(lái)后,隨即可以利用Qt 庫(kù)函數(shù)或手寫算法完成圖像的后續(xù)處理。本設(shè)計(jì)調(diào)用QMtrix庫(kù)函數(shù)實(shí)現(xiàn)了圖像的放大、縮小、旋轉(zhuǎn)、鏡像,手寫算法完成了圖像的銳化、對(duì)比度飽和度校正、伽馬值矯正、自動(dòng)裁剪、手動(dòng)裁剪等操作,如有需要還可簡(jiǎn)便地添加其它圖像處理算法。
下面僅對(duì)在Qt 界面中加入縮小動(dòng)作做介紹,其它以此類推。因?yàn)镼t是利用信號(hào)槽機(jī)制完成界面操作的響應(yīng),信號(hào)會(huì)在某個(gè)特定情況下被觸發(fā),槽是等同于接收并處理信號(hào)的函數(shù)。所以首先在工具欄中加入縮小動(dòng)作按鈕,然后給這個(gè)動(dòng)作配上相應(yīng)的槽函數(shù),當(dāng)點(diǎn)擊縮小圖標(biāo)時(shí),信號(hào)被觸發(fā),槽函數(shù)響應(yīng)事件并實(shí)現(xiàn)圖像的縮小算法,處理完成后,調(diào)用Qt的相關(guān)庫(kù)函數(shù)顯示圖像。圖4,圖5 分別是原圖與縮略圖。
圖3 Qt 軟件接收?qǐng)D像數(shù)據(jù)流程圖
圖4 原始圖像
根據(jù)上面提到的設(shè)計(jì)思路完成了CIS 圖像采集處理系統(tǒng)的設(shè)計(jì),并在軟硬件平臺(tái)上得到了驗(yàn)證。實(shí)驗(yàn)結(jié)果表明:CIS 采集完成后界面上可立即出現(xiàn)圖像,延時(shí)不超過(guò)1s。顯示效果如圖(5)所示,從圖中可看出已采集到了完整的圖像,但是由于PCB 板布線及抗干擾措施并沒(méi)做的很好,以及后期調(diào)試時(shí)間有限,所以后續(xù)圖像質(zhì)量改善的空間很大。
在設(shè)計(jì)中,數(shù)據(jù)傳輸用到的是Cypress 超低功耗芯片CY7C68013A,它的工作電壓為3.3V,容限輸入為5V,而采集板上的最高電壓是CIS的供電電壓5V,所以可以借助USB 供電,滿足即插即用。
Qt 軟件是微軟旗下的開(kāi)源跨平臺(tái)界面軟件,利用它可以方便的完成很多圖像處理操作,代碼不用重寫就可以再移植到其它操作平臺(tái)上,給后續(xù)的升級(jí)擴(kuò)展帶來(lái)了很大方便?,F(xiàn)在圖像處理應(yīng)用非常廣泛,以此設(shè)計(jì)為基礎(chǔ),只要稍加改動(dòng)就能應(yīng)用到許多軟硬件相結(jié)合的圖像處理系統(tǒng)中。
圖5 縮略圖像
[1]伍乾永,陳彬.基于FPGA的實(shí)時(shí)圖像數(shù)據(jù)采集模塊設(shè)計(jì)[J].微電子學(xué),2010(3):453-456.
[2]羅戈亮,魯新平,李吉成.基于FPGA +DSP的實(shí)時(shí)圖像處理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].微處理機(jī),2010(2):108-110.
[3]WaleWasfy,Hong Zheng.General Structure Design for fast Image Processing algorithms based upon FPGA DSP slice[R].IEEE ISEC 2010 國(guó)際計(jì)算通信控制管理研討會(huì),2010:726-729.
[4]王誠(chéng),蔡海寧,吳繼華.Altera FPGA/CPLD 設(shè)計(jì)[M].北京:人民郵電出版社,2011.
[5]錢峰.EZ- USB FX2 單片機(jī)原理、編程及開(kāi)發(fā)應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2006.
[6]譚安菊,龔彬.USB2.0 控制器CY7C68013 與FPGA 接口的Verilog HDL 實(shí)現(xiàn)[J].電子工程師,2007(7):52-54.
[7]鄭阿奇.Qt4 開(kāi)發(fā)實(shí)踐[M].北京:電子工業(yè)出版社,2011.
[8][英]Mark Summerfield.Qt 高級(jí)編程[M].白建平,王軍鋒,閆鋒欣,白凈,譯.北京:電子工業(yè)出版社,2011.
[9]詹紅霞.Visual C ++6.0 程序設(shè)計(jì)[M].西安:西安電子科技大學(xué)出版社,2009.
[10]求是科技.Visual C++圖像處理典型算法[M].北京:人民名郵電出版社,2006.