OV7670和ADV611的图像采集与压缩系统设计
扫描二维码
随时随地手机看文章
引言
随着图像传感器、DSP及计算机技术的快速发展,图像监控系统已经被人们用于生活、工业控制、科学研究等各个领域,因此图像信息的采集得到了广泛的应用。根据对磁悬浮试验线通信基站系统诊断的需要,设计了图像信息采集及其压缩传输的子系统,将基站的图像监控信息作为整个系统诊断数据的一部分实时地传回控制室。鉴于传输带宽有限以及原始图像数据的冗余性,对原始图像数据进行压缩处理。由于图像的突变性较大,在控制压缩率时采用了PID控制算法。在接收终端对压缩后的数据进行解码处理,就可以得到实时的监控图像。
1 系统原理及结构
该系统作为整个磁悬浮试验线通信基站诊断系统的一部分,系统的结构图如图1所示。
OV7670采集到的图像信息经过ADV611压缩处理后,由FPGA通过低电压差分信号(LVDS)将压缩后的数据传输到板卡的控制模块,由控制模块将包括监控图像数据在内的诊断数据组帧后传输到控制中心。OV7670图像传感器是OmniVision公司生产的CMOS图像传感器,其体积小,工作电压低,内部集成了感光矩阵、模拟信号处理器、数字信号处理器、DSP处理器、寄存器控制接口以及影像处理单元。它主要具有以下特点:
①内部有效感光阵列为640×480,最大帧率为30 fps。
②标准的SCCB接口,兼容I2C总线接口。
③支持RawRGB/GRB4:2:2、RGB565/555/444、YUV4:2:2和YCbCr4:2:2等多种输出格式。
④50/60 Hz自动检测。
OV7670内部提供大量的控制寄存器,通过SCCB总线配置寄存器就可以输出不同的图像格式。
图像压缩模块采用的是ADI公司推出的基于小波变换的ADV611图像解压缩编码CMOS芯片,它能够对符合CCIR-601格式的数字图像进行从视觉元损压缩到高达7500:1压缩和解压缩。主要特点如下:
①可编程的控制“质量窗”(Quality Box)。
②精确的压缩比控制。
③单场独立压缩。
④集成DARM接口控制器。
芯片集成无缝视频和主机接口,内置片内SRAM,能以较少的器件实现适合各种应用的系统级解决方案。
2 系统设计
2.1 图像采集模块设计
SCCB总线是OmniVision公司推出的串行摄像头控制总线(Serial Camera Control Bus),兼容I2C总线接口,最高传输速率可达400 Kb/s,OV7670内部寄存器的配置和图像数据的输入与输出是通过SCCB总线交换的,SCCB总线的时序图如图2所示。
SCCB总线由片选信号线SCCB_E、时钟信号线SIO_C和数据信号线SIO_D构成。在与主设备数据交换过程中,当SIO_C是高电平时,SCCB_E从高电平向低电平切换时表示数据传输开始,SCCB_E线由低电平向高电平切换时表示数据传输停止。发送到SIO_D线上的每个字节必须为8位,每次传输可以发送的字节数量不受限制,首先传输的是数据的最高位MSB,每个字节后必须跟一个响应位ACK。SCCB总线的控制功能完全是由SIO_C、SIO_D两条总线上电平的状态以及两者之间的相互配合实现的,其过程如图3所示。
OV7670支持两种地址格式:从设备地址ID—Ad—dress,包括读地址和写地址,其中地址的高7位用来选中从设备,最低位是读写控制位(R/W),低电平表示发送数据,高电平表示读数据;内部寄存器地址Sub—Address,用于执行对寄存器单元进行操作,支持地址单元连续的多字节顺序读写操作。对OV7670的寄存器的写操作由三部分构成,先写设备地址,再写寄存器地址,最后向指定寄存器写数据,即ID-Address+SUB-Address+W-Data。OV7670的设备地址为0x42,最后一位用来判断读写,即读的时候为0x43。依次发送ID-Address+SUB-Ad-dress+W-Data。读操作时,需要先发送从设备地址和寄存器地址,然后再次发送从设备地址,读取指定寄存器的数据,即{ID-Address+SUB-Address}+{ID-Address+R-Data)。在系统中,使用Verilog语言实现SCCB总线协议,Modelsim中的仿真结果如图4所示。
由图4可知,在SIOC为高,SIOD拉低时,数据传输开始,SIOD线在SIOC线上的时钟的作用下,开始传输数据。由图4可知,第一个传输的字节位为0x42(01000010),即OV7670的设备地址,紧接着是一个从设备响应信号ACK。
2.2 图像压缩模块设计
ADV611主要由质量窗控制模块、小波滤波器组、游程编码和Huffman编码、I/O接口以及DRAM控制器组成。压缩编码时,从它的数字视频接口接收原始的OV76708位的数字图像信号,经帧抽取和小波变换后得到一系列不同尺度、不同方向的42个块信号(Mallat Block),再经过游程编码和哈夫曼编码获得压缩数据,送入集成于片内的512×32位大小的FIFO缓冲区,一旦FIFO的数据量达到主机在寄存器里的预设值时,ADV611就发出中断请求信号,从它与主处理器的接口输出压缩数据比特流,解码时是相反的过程。ADV611内部原理框图如图5所示。
当图像从一幅简单的图像切换到含有丰富高频细节的复杂图像时,图像压缩后比特率就会发生很大的变化。为了获得恒定的压缩码率,ADV611在图像压缩方面采用了自适应的量化方案。一般情况下,人眼对图像的高频部分的敏感度没有对低频部分的敏感度高,所以ADV611对通过小波变换后得到的42个Block,根据每个Block对图像的重要性不同,采取不同的量化带宽/量化系数BW(解码是为RBW),即对不同的寄存器自适应地输入适当的量化系数,然后经过编码压缩得到比较恒定的码流。对于每一场图像,ADV611都要单独地计算其量化系数,但由于前后两场图像的相关性较大,ADV611是将前一场图像的统计信息传送到与之相连的FPGA来计算本场图像的量化系数。ADV611输出的前一场图像的统计信息包括:
①各个Mallat子块数据的平方和;
②Y、Cb、Cr各个分量的和;
③Y、Cb、Cr各个分量的最大值和最小值;
④前一场图像压缩后的数据大小。
ADV611计算量化系数的流程如图6所示。
其中R0,R1为传输信道所允许的最小和最大比特率,压缩比例Sk为每个Block的量化系数,最小值为0,最大值为1,BW(bn)为每个Block的量化系数。在计算Sk时,采用了PID控制算法:
Sk=Err×Kp+Err_int×Ki+Err_dir×Kd (1)
式中,Err为系统实际输出与目标输出的偏差;Kp是比例系数,成比例地反映控制系统的偏差信号;Ki是积分系数,用于消除静差,提高系统的无差度;Kd为微分系数,反映偏差信号的变化速率。PID控制将系统偏差通过线性组合构成控制量,对被控对象进行控制。由式(1)可以得到每个Block的压缩比例Sk,根据压缩系数通过公式(2)和(3)就可以计算每个Block的量化系数:
结语
本文介绍了基于OV7670和ADV611对磁悬浮试验线通信基站的实时图像监控系统的设计,并对SCCB总线协议的实现和图像压缩算法进行了分析。实验结果表明,解压后图像的失真度与压缩比成负相关,这是由于图像压缩时对图像进行帧抽取和量化系数的截断所带来的。