随着数字多媒体技术的不断发展,数字图像处理技术被广泛应用于可视电话、电视会议、监控系统等各种民用、商用及工业生产领域中。但在这些数字图像处理系统中,一个突出的问题就是数据量庞大,特别是在图像帧率及分辨率要求比较高的场合下,仅用专用的视频压缩芯片(Video ASIC)、专用的视频信号处理器(Video DSP)或通用的高性能数字信号处理芯片(DSP),均无法获得令人满意的效果。为此,人们提出了多种解决方案,其中比较有代表性的方案有以下两种:
一是在中央控制器的调度下,两片或多片图像处理主芯片并行对图像进行处理。
二是整个图像处理系统由图像采集系统和图像压缩系统组成,其中图像采集系统负责接收原始的图像数据并对其进行一定的预处理;图像压缩系统负责接收图像采集系统预处理后的数据并进行压缩。
本文将基于第二种方案,分析其中图像采集系统的控制逻辑设计思想;并结合图像压缩算法的需求,着重介绍图像数据预处理的控制流程及实现方法;最后通过实验,对预处理前后图像处理系统的效率进行比较分析。
1 图像采集系统的结构及工作原理
本文以高性能、高集成度、低功耗系列FPGA作为核心部件,利用FPGA的在系统可编程以及控制逻辑实现方式灵活等特点,设计出图像采集系统。该系统能够满足多分辨率灰度和彩色图像的实时压缩处理要求,其硬件结构如图1所示,主要包括A/D转换部分、帧存部分和核心控制部分。下面分别对这三个部分进行介绍。
1.1 A/D转换部分
A/D转换部分即图1中的视频解码器,用来完成模拟视频信号到数字信号的转换,产生复合的YUV数据流,并送入采集系统的FPGA中。
A/D转换部分所选用的视频解码器是Philips公司的视频A/D芯片SAA7111A_4,它不仅具有自动场频检测牧场 生而且其场同步参考信号VREF、行同步参考信号HREF、奇偶场标志信号RTS0、像素时钟信号LLC2幸免可从芯片的输出管脚直接得到,从而简化了时钟锁相与同步功能模块的设计,使整个系统的性能和稳定性均有所提高,同时减少了整个系统的功耗[2]。
1.2 帧存部分
帧存部分采用双帧存结构,包括图1中的帧存A与帧存B,每个帧存由两片IDT71V424 SRAM构成,能够存放720X576分辨率的一帧YUV图像数据。由于采用了乒乓机制,这种结构能够使图像数据的采集与压缩并行,从而提高图像的压缩帧率。
1.3 核心控制部分
采集系统的核心控制部分即图1中的FPGA。首先对A/D转换部分的输出数据流进行一定的预处理;其次将预处理后的数据在帧存乒乓、刷新机帛的控制下写入适当帧存中;最后完成与图像压缩系统的接口控制,即适时帧存的控制权转交给图像压缩系统,由图像压缩系统将帧存中的数据读出后释放帧存的控制权。另外本部分还负责接收用户输入的图像分辨率、色彩以及相应压缩码流传输信道的带宽等控制信息,并在这些信息发生变化时用中断的方式通知图像压缩系统。
核心控制部分所选用的FPGA为Xilinx公司的Virtex-100E繁列,它具有10万等效系统门,系统时钟频率可达240MHz,用户可用的I/O管脚有196个,核电压为1.8V,峰值功耗较低[3]。
1.3.1 图像采集系统控制逻辑功能框图
图像采集系统控制逻辑框图如图2所示。①作为采集系统核心控制逻辑的主控模块,用来调用②~⑥各子功能模块。子功能模块②是整个控制逻辑执行的起点,它根据I2C协议来配置视频解码器,并且只有I2C配置过程结束后,才能启动其它子功能模块的运行。子功能模块③用于完成图像采集系统与图像压缩系统的交互。子功能模块④~⑥用于完成图像采集、预处理、存储控制等功能。下边介绍介绍各子模块的设计思想。
1.3.2 基于I2C配置视频解码器
视频解码器的初始化配置是由FPGA通过I2C总线完成的,主要包括对视频解码器的工作模式、输出行场同步参考信号的时序关系以及输出数字信号的格式等进行的设置。
1.3.3 与图像压缩系统握手
为了确保图像压缩系统与图像采集系统的同步、需要在FPGA中实现两者之间的握手机制,主要是接收图像压缩系统请示帧存控制权和释放帧存控制权的信号,并根据FPGA内部逻辑的当前运行状态进行响应。
1.3.4 原始图像数据采集
在一帧图像数据的采集过程中,最重要的就是对一帧图像数据开始和结束时刻的判断。在仔细研究了SAA7111A_4所提供的同步信号(奇偶场标识信号RTS0、场同步参考信号VREF、行同步参考信号HREF)的时序关系的基础上,用状态机实现了对采集过程起止点的精确控制。图3所示为一帧图像采集期间三个同步信号的时序示意图。
RTS0信号的上升沿标识一帧新图像的起点,VREF信号为高电平对应图像场正程扫描时的有效像素行期间,在有效像素行期间,HREF信号为高电平对应像素有效采样时间。基于这三个信号确定一帧图像采集过程起止点的流程如下:
①若检测到RTS0信号的电平为低,转到②;②若检测到RTS0信号的电平为高,转到③,同时开始一帧新图像的采集;
③若检测到VREF信号的电平为高,转到④;
④若检测到VREF信号的电平为低,则表明352X288分辨率模式下的一帧图像采集过程结束或720X576分辨率模式下的第一场图像采集过程结束,转到⑤,否则在HREF信号的电平为高期间进行有效的图像数据采集;
⑤若检测到VREF信号的电平为高,转到⑥;
⑥若检测到VREF信号的电平为低,则表明720X576分辨率模式下第二场图像采集过程结束,转到①,否则在HREF信号的电平为高期间进行有效的图像数据采集。
1.3.5 采集图像数据的预处理及存储
图像压缩系统所需要的输入图像数据流是按照宏场-SLICE-图像的分层结构组织的,如图4所示(以720X576分辨率为例)。而图像采集系统中,A/D转换后的输出数据流结构如图5所示。因此,必须对图5所示的数据流进行相应的预处理,图像压缩系统才能够直接从图像采集系统中得到需要的数据格式,从而提高整个图像处理系统的性能。
按照图4所示的分层结构,图像数据在帧存中以SLICE为单位顺序存储,其中SLICE的尺寸既要考虑图像压缩系统中图像压缩算法的要求,又要考虑与图像分辨率有着密切的关系。图6所示为图像数据在帧存中的存储结构。下面主要以720X576分辨率下的图像为例讨论数据存储地址的计算。
由A/D转换输出数据格式与图像压缩系统输入数据格式间的对应关系可知中,一帧图像中的任意像素可以用分层寻址方式准确定位,并据此产生此像素所对应的三个分量的帧存存储地址值。首先,从一帧图像的一第一行开始,每连续的16行作为一个像素块,称为行块,一帧720X576分辨率的图像可划分为36个行块;其次,每一个行块又在水平方向上平均分为3段,每段称为一个列组,每个列组的宽度为水平方向上连续的240个像素,高度为垂直方向上连续的16行。720X576图像像素分层寻址示意图如图7所示。Y、U、V三个分量在帧存中的存储地址产生过程如下:首先确定含像素所属行块在一帧图像中的偏移量及像素所属列组在行块中的像移量,即确定行块序号和列组序号;然后确定像素在所属列组中水平方向上和垂直方向上的偏移量;最后根据上述4个偏移量计数器的值即可产生此像素所对应的三个分量的帧存存储地址值。
在720X576分辨率下,一帧图像中任一像素的Y、N、V分量对应的帧存地址计算公式如下:
y_addr=(C-1)×8640+(E+1)×2880+(D-1)×120+(F-2)/2
u_addr=(C-1)×8640+(E-1)×2880+(D-1)/2)×60+(F-3)/4+1920
v_addr=(C-1)×8640+(E-1)×2880+(D-1)/2)×60+(F-4)/4+2400
式中,y_addr、u_addr、v_addr分别对应Y、
U、V三个分量的帧存存储地址;C表示行块序号,取值范围为1~36;D表示在列组垂直方向上的偏移量,取值范围为1~16;E表示列组序号,取值范围为1~3;F表示在列组中水平方向上的偏移量,取值范围为1~240。
上述地址计算公式在FPGA中实现时,考虑到各乘积项常系数(8640、2880等)所对应的二进制数中"1"较少,可将各乘积运算转化为移位与加法运算的组合,并将加法操作用分组超前进位[4]方式实现。
1.3.6 帧存乒乓刷新控制机制
两组帧存的读写过乒乓机制来管理。为确保在任何时刻,最多只有一个帧存处于图像压缩系统的控制下,设置了一个读互斥锁;同样,最多有一个帧存可接收预处理后的数据,因此又设置了一个写互斥锁。
因为图像压缩系统的压缩帧率在720×576分辨率下小于25帧/秒,为了保证图像压缩系统每次从采集系统所到的一帧图像数据是最近由FPGA预处理过的,使得图像延时较小,设计了双帧存刷新机制[5]。
在系统初始状态,帧存A处于等待写状态,帧存B处于读结束状态。采集过程开始,两个帧存的状态转换控制流程完全相同。下边以帧存A为例介绍基于读写互斥锁的帧存控制机制。帧存乒乓刷新控制机制如图8所示,其设计思想如下:
①采集过程未开始,帧存A处于等待写状态,并获得写互斥锁;
②收到一帧新图像的开始信号,采集过程开始,帧存A进入可写状态,接收图像数据;
③一帧图像的采集过程结束后,帧存A进入写结束状态,并释放写互斥锁;
④在写结束状态下,若此时帧存B拥有读互斥锁,由帧存A保持写结束状态,否则帧存A获得读互斥锁,进入读等待状态,并在下一个控制周期切换到再次读等待状态;
⑤帧存A在再次读等待状态下,如果帧存B处于写结束状态,则帧存A释放读互斥锁,进入读结束状态,否则若图像压缩系统请求帧存的控制权,则帧存A进入可读状态,并处于图像压缩系统的控制下,若以上两个条件均不满足,则帧存A保持再次读等待状态。
⑥在可读状态下,若图像压缩系统请求FPGA回收帧存控制权,则帧存A进入读结束状态,并释放读互斥锁;
⑦在读结束状态下,若帧存B拥有写互斥锁,由帧存A保持读结束状态,否则帧存A进入等待写状态,并获得写互斥锁。
2 FPGA逻辑设计中的常见问题讨论
在FPGA内部,由于LLC2时钟驱动的逻辑非常多,布线寻径优化的选择余地小,从而导致它到达每个逻辑模块驱动端的时间有一定的差异。在极端情况下这一差异(Skew)会非常大,并导致逻辑执行时的时序错误。因此在基于FPGA进行逻辑设计时,尽管各逻辑模块及模块间的通信信号基本上都是由LLC2驱动的,但模块间的通信信号与通信的接收方模块应视为异步,并按异步逻辑的思路实现模块间的通信机制[6~7]。
另外本设计中LLC2的时钟频率达13.5MHz,且FPGA内部逻辑资源的使用率已经超过了70%。为了确保控制逻辑在FPGA中的稳定运行,需要对设计进行精心的时序仿真,提高仿真程序的测试覆盖率,并对实现(Implementation)过程中生成的静态时序分析报告仔细研究,确定设计中的时序关键路径,采用先修改设计、分割关键路径,后加限制条件的方式,尽量减少关键路径的个数、降低关键路径的延时。
在对设计进行仿真验证的过程中,要尽量将所发现毛刺的发生条件找出,并用修改源设计的方法将其去除。
3 实验结果
为了验证图像采集系统的作用,进行了对比实验,实验结果如表1所示。
在两种分辨率下,经过图像采集系统的预处理,图像压缩系统的帧率有不同程度的提高,尤其是在720×576分辨率下,帧率的提高超过了60%。这主要是由于图像采集系统预处理机制的采用,使得图像压缩系统能够与图像采集系统并行工作,在很大程度上减少了图像压缩系统的等待执行时间,从而提高了图像压缩系统的压缩帧率。从表1中可以看到,在352×288分辨率下,整个系统的性能提高不大(甚至没有变化)。这是因为在此分辨率下,图像数据量较小,仅靠图像压缩系统的处理能力即可达到实时效果,所以图像采集系统预处理机制的采用无法进一步提高整个系统的性能。
当然,本采集系统还存在改进的余地[8],具体来说有以下两点:
①基于FPGA实现的图像预处理操作若具有图像增强、去噪等功能,并对图像的场景变换进行一定的处理,会使图像采集系统的输出图像质量得到很大的提高。
②帧存乒乓刷新机制在实用中还有一定的局限性,图像的主以迟效果不是很理想,而且有时会使图像压缩系统的读数据请求不能立即得到响应。考虑到系统的性价比,如果用一片高密度的SDRAM作为存储器,并且将它在物理上分为三个帧存,通过这三个帧存之间的乒乓机制,相信采集系统所输出的图像在主观效果上会于本文所采用的双帧存结构。
表1 图像采集系统对图像处理系统的性能影响