Rabbit3000與HElOlO 圖像傳感器構成的網(wǎng)絡相機
1 系統(tǒng)構成
網(wǎng)絡相機系統(tǒng)結構如圖l所示,MEl010是10萬像素的CMOS圖像傳感器芯片,Rabbit3000模塊基于Rab-bit3000單片機。該單片機基于Z80內(nèi)核,最高時鐘頻率可達54MHz,有6個高速串行口和56個I/O口,直接驅動512KB SRAM、512KB Flash,通過以太網(wǎng)接口進行網(wǎng)絡傳輸時.TCP傳輸速率可達到6Mb/s。美國Z-World公司提供的Dynamic C開發(fā)工具提供了TCP協(xié)議棧函數(shù)支持, 以及C、匯編混合編程的功能, 非常適合網(wǎng)絡應用。
網(wǎng)絡相機實現(xiàn)以下功能: 直接驅動MEl010 CMOS攝像芯片攝像,并進行圖像處理,同時內(nèi)置一個微型WEB服務器,用戶可以在因特網(wǎng)上訪問WEB頁。通過CGI接口進行靜態(tài)圖像拍攝, 如增加SOCKET接口,也可通過Activex控件拍攝動態(tài)圖像??蛇x擇160×120彩色、320×240黑白兩種圖像格式。
2 CMOS攝像芯片的控制
2.1 MElO1O的結構及拍攝
南京微盟電子的MElOlO CMOS圖像傳感芯片最大可拍攝352×288的彩色及黑白圖像,內(nèi)部功能框圖如圖2所示。
該芯片的工作原理:通過Samp、SampG腳進行采樣控制,即拍攝圖像。拍攝后該芯片把圖像各點的模擬電壓存入緩沖區(qū)中,形成一個最大352×288的像素數(shù)據(jù)陣列,單片機可以通過改變行列地址ADR(8..O)逐點訪問圖像緩沖區(qū)。該圖像緩沖實際上是把每個像素的光感應電壓存入一個小電容中,通過在ADC Clk腳輸入時鐘脈沖,MElO1O在ADCclk的低電平期間進行模數(shù)轉換,上升沿輸出。然后單片機即可以從數(shù)據(jù)口ADCount(7~0)中讀出對應行、列地址的像素數(shù)據(jù)。其中行與列地址共用9條地址線,由XYSEL腳產(chǎn)生的脈沖切換。
具有圖像緩沖區(qū)是MElO1O最大的特點,一般的CMOS傳感器都必須用CPLD將圖像數(shù)據(jù)以很快的速度送人RAM存儲,通常為13MB/s左右,再由單片機來讀取,因而接口比較復雜。MElO1O的這一特點使得Rab-bit3OOO可以直接讀取,結合Rab_bit3OOO強大的網(wǎng)絡功能,從而構成了具有特色的網(wǎng)絡相機。
拍攝時序如圖3所示。
2.2圖像的讀取
使Rabbit3OOO單片機的PEl,PF(7~O)與MEIOIO的地址線ADR(8~O)、PA(7~O)與數(shù)據(jù)線ADcount(7~O)相連,PB7與模數(shù)轉換時鐘ADCclk相連?,F(xiàn)在以讀取16O×1 2O彩色圖像的一行為例,介紹讀取過程,程序用匯編實現(xiàn),以加快圖像讀取速度。讀取圖像時序如圖4所示。
#asm debug
readoneline:: ;讀入一行數(shù)據(jù)
;讀取到linbuf中
1d hl,linebuf ;指針hl指向linebuf
ld de,16O ;一行16O像素
ld C,
rp _read:
:ADC clk
ioi lda,(PBDR);產(chǎn)生ADC時鐘
res O,a
ioi ld(PBDRl,a
set O,a
iOi ld(PBDR),a
ioi lda,(PADR)
;從PA讀入數(shù)據(jù)
ld (hl),a
;讀入數(shù)據(jù)到linbuf,指針hl指向llnbuf的對應位
inc hl ;指針下移
inc c ;計數(shù)器加1
ld a,c
ioi ld(PFDR),a;地址加1
dec de ;讀完160像素
jr nz,rp_read :否則讀下一個
ret
#endasm
3 圖像處理
3.1 FPN的消除
由于CMOS圖像傳感器會產(chǎn)生固有噪聲FPN(Fixed Pattern Noise),MElO1O要求用軟件來完成噪聲消除處理,否則拍出的圖像表面將疊加許多細碎的色點,這些噪聲點的位置大小顏色是固定的,由CMOS圖像芯片及電路本身所決定。
FPN消除的方法是在正式拍攝前,先拍攝一張曝光時間接近于O的圖像,由于FPN的存在,雖然感光接近于O,但該圖像并非是均勻的全黑照片,而是會出現(xiàn)些彩色噪聲點。將此圖像存在內(nèi)存中,作為參照,照一張圖像,都與這張參照圖像相減,從而消除FPN.
3.2彩色插值
讀出并經(jīng)FPN消除后的數(shù)據(jù)實際上是RGB陣列,MN1O1O通過在感光面上蒙一層RGB彩色濾鏡(可選擇,若無濾鏡即為黑白芯片)實現(xiàn)彩色功能,濾鏡排列如圖5所示,這是一般圖像傳感器使用的Mosaic Bayer濾鏡,從O行算起,偶數(shù)行排列為RGRGRG…… 奇數(shù)行排列為GBGBGB……
因此每一點的數(shù)據(jù)只代表該點的一種顏色光強度值(灰度值),還需根據(jù)相應算法進行彩色化插值處理。利用周邊像素的信息,“猜測”算出該點“應該”具有的另外兩種顏色光強度,從而得到完整的RGB值,構成24位真彩色圖像。這種以彩色插值的方法來達到“趨近”真彩色的處理方式,其圖像質量雖然不如使用真正(R、G、B)三組像素型的彩色攝像技術,但已經(jīng)可以滿足通常的圖像檢測需要。
算法示例如下:
設i,j分別為行數(shù)和列數(shù),當Ri,j有i%2==O&&j%2==0時,算法為
R=Ri,j
G=(Gri,j-1+Gri,j+l十Gbi-1,j+Gbi+l,j)/4
B=(Bi-i,j-1+Bi—I,j+1+Bi+l,j-1+Bi+l,j+1)/4
對應的Rabbit3OOO的C程序為form_rfgb(){
…
}
3.3嵌入圖像到HTTP服務器
經(jīng)過RGB插值合成后已經(jīng)可以得到真彩色圖像,但完整的圖像處理還需要進行曝光控制,γ較正,白平衡調整等。曝光控制算法主要是計算各像素亮度的平均量。自平衡調整則是由于CMOS傳感器、人眼對RGB三顏色光的靈敏度不同,所以需對R、G、B三種像素的值乘以比例因子加以較正。Υ較正則主要是調整對比度。
獲得完整的圖像數(shù)據(jù)后,加入BMP文件頭,形成newfile,C程序代碼如下:
void makefile(){
char newfilesize[4];
newfilesize[0]=0x3a;文件大小
newfilesize[1]=Oxe5;
newfilesize[2]=O;
newfilesize[3]=O;
root2xmem(newfile,newfilesize,4);設置文件大小
sspec_addxmemfile(”/databmp”,newfile,SERVE_RHTTP);嵌入HTTP服務器
4 HTTP服務器的實現(xiàn)
通過基于Rabbit3OOO的模塊實現(xiàn)HTTP服務器并不難,只需使用網(wǎng)頁設計軟件如Dreamwave、Frontpage等,設計一個網(wǎng)頁,然后導出到Rabbit3OOO模塊的HTTP服務器中即可。設網(wǎng)頁文件名為index.html,網(wǎng)頁中含有圖片ledon.gif,存放的目錄是samples/RCM32OO/pages,使用以下指令將文件導出到HTTP服務器中。
#Ximport”samples/RCM32OO/pages/index.shtml" index html
#Ximport”samples/RCM32OO,pages/ledon.gif"ledon_gif
此外還需聲明HTTP服務器中的文件類型HttpType http_types[]及設置HTTP服務器可訪問文件、變量、函數(shù)的結構類型HttpSpec http_flashspec[]。
主程序中運行HTTP服務器的相關代碼如下:
main(){
sock__init();
while(1){
HTTP_server();
}
5 通過CGl接口控制拍攝
在HttpSpec http_flashspec[]中加入以下定義:
{ HTTPSPEC_FUNCTION, ”/get_photocgi”,O,get_hototoggle,O,NULL,NULL}。
在網(wǎng)頁中嵌入按鈕圖標,假設為button.gif,使其鏈接到”/get_photocgi”,點擊網(wǎng)頁上的button按鈕時,程序將跳轉執(zhí)行以下函數(shù):
int get_hototoggle(HTTPState*state){
get_hoto() ;拍攝圖像
cgi_redirectto(state,’data html’);跳轉到data.html網(wǎng)頁中,
;(該網(wǎng)頁含所拍攝的圖像文件)
returnO:
}
即可看到所拍攝的圖像。
本文以拍攝160×120分辨率的彩色圖像為例介紹。由于Rabbit3000單片機直接驅動的內(nèi)存有限, 當分辨率更高,如320×240時, 一般建議存儲黑白圖像, 可以減少文件大小。
結 語
結合基于互聯(lián)網(wǎng)絡的圖像技術是報警系統(tǒng)、工業(yè)控制、智能家居發(fā)展的一個熱點,主要有基于8位單片機、DSP及ARM的圖像處理方案。 其底層的圖像處理及CMOS圖像芯片的控制有諸多相通之處。盡管基于DSP及ARM具有運算速度上的優(yōu)勢,但由于Rabbit3000單片機具有強大的網(wǎng)絡支持、加密及I/0控制、串行通信、數(shù)據(jù)采集功能,結合MEl0l0的簡單單片機接口,仍然具有鮮明的特點,適用于對實時圖像傳輸要求不高的場合;并且,如果結合高性能的圖像芯片,如具有MPEG4壓縮功能的偉思GO7007也可以做到實時圖像傳輸。本文所介紹的內(nèi)容基于作者目前從事的智能小區(qū)項目, 已成功研制出樣機。