"); //-->
在家用报警系统、工业监控、智能小区中,由于原有的系统一般只能采集相关数据,然后按专有的或特定的网络传送。在应用中,用户常常反映有两大缺点。其一,不能看到现场图像。其二,监视限于特定专网,比如通过局域网、电话网、视频线监控网等。因而通过internet进行网络摄像的需求十分迫切。
1 系统构成
网络相机系统结构如图l所示,mel010是10万像素的cmos图像传感器芯片,rabbit3000模块基于rab-bit3000单片机。该单片机基于z80内核,最高时钟频率可达54mhz,有6个高速串行口和56个i/o口,直接驱动512kb sram、512kb flash,通过以太网接口进行网络传输时.tcp传输速率可达到6mb/s。美国z-world公司提供的dynamic c开发工具提供了tcp协议栈函数支持, 以及c、汇编混合编程的功能, 非常适合网络应用。
网络相机实现以下功能: 直接驱动mel010 cmos摄像芯片摄像,并进行图像处理,同时内置一个微型web服务器,用户可以在因特网上访问web页。通过cgi接口进行静态图像拍摄, 如增加socket接口,也可通过activex控件拍摄动态图像。可选择160×120彩色、320×240黑白两种图像格式。
2 cmos摄像芯片的控制
2.1 melo1o的结构及拍摄
南京微盟电子的melolo cmos图像传感芯片最大可拍摄352×288的彩色及黑白图像,内部功能框图如图2所示。
该芯片的工作原理:通过samp、sampg脚进行采样控制,即拍摄图像。拍摄后该芯片把图像各点的模拟电压存入缓冲区中,形成一个最大352×288的像素数据阵列,单片机可以通过改变行列地址adr(8..o)逐点访问图像缓冲区。该图像缓冲实际上是把每个像素的光感应电压存入一个小电容中,通过在adc clk脚输入时钟脉冲,melo1o在adcclk的低电平期间进行模数转换,上升沿输出。然后单片机即可以从数据口adcount(7~0)中读出对应行、列地址的像素数据。其中行与列地址共用9条地址线,由xysel脚产生的脉冲切换。
具有图像缓冲区是melo1o最大的特点,一般的cmos传感器都必须用cpld将图像数据以很快的速度送人ram存储,通常为13mb/s左右,再由单片机来读取,因而接口比较复杂。melo1o的这一特点使得rab-bit3ooo可以直接读取,结合rab_bit3ooo强大的网络功能,从而构成了具有特色的网络相机。
拍摄时序如图3所示。
2.2图像的读取
使rabbit3ooo单片机的pel,pf(7~o)与meioio的地址线adr(8~o)、pa(7~o)与数据线adcount(7~o)相连,pb7与模数转换时钟adcclk相连。现在以读取16o×1 2o彩色图像的一行为例,介绍读取过程,程序用汇编实现,以加快图像读取速度。读取图像时序如图4所示。
#asm debug
readoneline:: ;读入一行数据
;读取到linbuf中
1d hl,linebuf ;指针hl指向linebuf
ld de,16o ;一行16o像素
ld c,
rp _read:
:adc clk
ioi lda,(pbdr);产生adc时钟
res o,a
ioi ld(pbdrl,a
set o,a
ioi ld(pbdr),a
ioi lda,(padr)
;从pa读入数据
ld (hl),a
;读入数据到linbuf,指针hl指向llnbuf的对应位
inc hl ;指针下移
inc c ;计数器加1
ld a,c
ioi ld(pfdr),a;地址加1
dec de ;读完160像素
jr nz,rp_read :否则读下一个
ret
#endasm
3 图像处理
3.1 fpn的消除
由于cmos图像传感器会产生固有噪声fpn(fixed pattern noise),melo1o要求用软件来完成噪声消除处理,否则拍出的图像表面将叠加许多细碎的色点,这些噪声点的位置大小颜色是固定的,由cmos图像芯片及电路本身所决定。
fpn消除的方法是在正式拍摄前,先拍摄一张曝光时间接近于o的图像,由于fpn的存在,虽然感光接近于o,但该图像并非是均匀的全黑照片,而是会出现些彩色噪声点。将此图像存在内存中,作为参照,照一张图像,都与这张参照图像相减,从而消除fpn.
3.2彩色插值
读出并经fpn消除后的数据实际上是rgb阵列,mn1o1o通过在感光面上蒙一层rgb彩色滤镜(可选择,若无滤镜即为黑白芯片)实现彩色功能,滤镜排列如图5所示,这是一般图像传感器使用的mosaic bayer滤镜,从o行算起,偶数行排列为rgrgrg…… 奇数行排列为gbgbgb……
因此每一点的数据只代表该点的一种颜色光强度值(灰度值),还需根据相应算法进行彩色化插值处理。利用周边像素的信息,“猜测”算出该点“应该”具有的另外两种颜色光强度,从而得到完整的rgb值,构成24位真彩色图像。这种以彩色插值的方法来达到“趋近”真彩色的处理方式,其图像质量虽然不如使用真正(r、g、b)三组像素型的彩色摄像技术,但已经可以满足通常的图像检测需要。
算法示例如下:
设i,j分别为行数和列数,当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服务器
经过rgb插值合成后已经可以得到真彩色图像,但完整的图像处理还需要进行曝光控制,γ较正,白平衡调整等。曝光控制算法主要是计算各像素亮度的平均量。自平衡调整则是由于cmos传感器、人眼对rgb三颜色光的灵敏度不同,所以需对r、g、b三种像素的值乘以比例因子加以较正。υ较正则主要是调整对比度。
获得完整的图像数据后,加入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服务器的实现
通过基于rabbit3ooo的模块实现http服务器并不难,只需使用网页设计软件如dreamwave、frontpage等,设计一个网页,然后导出到rabbit3ooo模块的http服务器中即可。设网页文件名为index.html,网页中含有图片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服务器可访问文件、变量、函数的结构类型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}。
在网页中嵌入按钮图标,假设为button.gif,使其链接到”/get_photocgi”,点击网页上的button按钮时,程序将跳转执行以下函数:
int get_hototoggle(httpstate*state){
get_hoto() ;拍摄图像
cgi_redirectto(state,’data html’);跳转到data.html网页中,
;(该网页含所拍摄的图像文件)
returno:
}
即可看到所拍摄的图像。
本文以拍摄160×120分辨率的彩色图像为例介绍。由于rabbit3000单片机直接驱动的内存有限, 当分辨率更高,如320×240时, 一般建议存储黑白图像, 可以减少文件大小。
结 语
结合基于互联网络的图像技术是报警系统、工业控制、智能家居发展的一个热点,主要有基于8位单片机、dsp及arm的图像处理方案。 其底层的图像处理及cmos图像芯片的控制有诸多相通之处。尽管基于dsp及arm具有运算速度上的优势,但由于rabbit3000单片机具有强大的网络支持、加密及i/0控制、串行通信、数据采集功能,结合mel0l0的简单单片机接口,仍然具有鲜明的特点,适用于对实时图像传输要求不高的场合;并且,如果结合高性能的图像芯片,如具有mpeg4压缩功能的伟思go7007也可以做到实时图像传输。本文所介绍的内容基于作者目前从事的智能小区项目, 已成功研制出样机。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。