基于FPGA实现视频图像的一种运动估计设计
人类获取的信息中70%来自于视觉。视频信息具有直观性、确切性和高效性等优点,其在多媒体信息中占有重要地位,成为了主导现代生活的主力军。然而,视频信息信息量太大,对信息存储设备及通信网络均提出了很高要求,严重阻碍了人们对有效信息的获取和使用。而解决这个问题的途径就是视频编码即视频压缩。
目前,视频编码的主控制芯片主要有3种:ASIC、FPGA和DSP。ASIC和PGA属于硬件设计,DSP属于软件设计。从功能上说,全定制ASIC(Applieation Speeifie IntegratedCircuit)的功耗低、设计密度大并且能够完成高速设计,但同时其开发周期很长,投片成本很高而且不容易对解决方案进行优化,应用范围很窄;DSp(Digital Signal Proeessing)可以提供强大的数字信号处理能力,其可编程特色可以支持各种标准格式的视频编解码算法,但其处理速度低、硬件结构不灵活;FPGA(Field Programmable Gato Airay)兼有了两者的一些优点如可编程、功耗低等,同时又具有设计周期短、开发成本低、处理速度快、设计灵活等特点。
1 运动估计原理
运动估计主要是针对帧间预测,去除视频帧在空间域和时间域的冗余度。块匹配方法是目前编码效率较高,普遍采用的一种编码方法。首先,其要将当前帧进行划分。长期实践表明,将当前帧划分为多个16x16的块是比较合理的。其次,要根据划分出的当前块的具体情况,以及所采用的搜索方法来决定搜索窗口的大小。最后,要在所确定的搜索窗口里面,依据某种块匹配准则找到当前块的匹配块以及由匹配块到当前块的运动矢量。图1所示是块匹配法的原理框图,其中的箭头就是由参考帧到当前帧的运动矢量。
目前经常采用的块匹配准则主要有归一化互相关函数(NCCF),最小均方差(MSE)以及最小绝对值(MAD)。其中由于SAD准则在算法上并不需要做任何的乘法运算,可以减少很多的时间资源和硬件资源,从而使得SAD准则成为了现在通常使用的匹配准则。
其中A是参考帧中的搜索窗口区域,k-1和fk分别是当前帧和参考帧中的像素点值,(x0,y0)是块中的其中一个点。
搜索采用的是三步搜索法,它是按照由粗到细的搜索理念,以一个像素为搜索精度,分为4,2,1,3个搜索步长进行搜索。一般选取原点作为起始点,分别按照4,2,1,3个步长组成9个点构成的点群进行匹配运算,每次都是以误差最小的块为准匹配块,在第二和第三步搜索时分别以第一和第二步搜索到的准匹配块作为它们搜索的起始点。原理如图2所示。
2 硬件实现
运动估计的原理图如图3所示。
2.1 地址计数器模块
地址计数器主要是产生出可以在RRAM(参考块存储器)和CRAM(当前块存储器)中有目的地进行寻址的地址信号。如图4所示。
地址计数器模块的设计与当前块和参考块的存储有很大的关系。将数据存入当前块存储器和参考块存储器时的顺序是由左到右,由下到上,即当前块存储器是(-7,-7),(-6,-7),(-5,-7)……(8,-7),(-7,-6),(-6,-6)……(8,7),(8,8)。而参考块存储器是(-15,-15),(-15,-14),(-15,-13)……(-15,16),(-14,-15),(-14,-14)……(16,15),(16,16)。则可知在寻址当前块存储器时可以直接按照地址的由左到右,由下到上累加。其计算公式如式(2)所示:
C_addr=(j+7)×16+(i+8) (2)
对于参考块存储器,它是一个32x32的数据块,设计的目的是从其中取出符合三步搜索法的9个数据块,当然这九个数据块都是16x16的,而且是以原点为中心组成的搜索点群。其计算公式如式(3)所示:
R_addr=(j+15)x32+(i+16) (3)
Clk是时钟频率信号,当它发生上升沿跳变时会使得产生的地址跳变到下一个新值。
Clr是清零信号,当它是低电平时,地址计数器可以产生从零开始的连续地址。
由于,当前块存储器只是一个16x16的RAM,其总的存储空间是256,则可知使用八位地址就可以进行寻址整个空间,即CRAM_ADDR是八位输出信号。而参考块存储器是一个32x32的的RAM,其总的存储空间是1 024,则可知使用十位地址就可以进行寻址整个空间,即RRAM_ADDR是十位输出信号。
2.2 参考块分频器模块
参考块分频器模块主要是将从参考块存储器中输出的信号经过分频处理后,存储在9个独立的单元,以便后续的处理,如图5所示。
由参考块输出的信号是256x9个连续的像素值,而当前块输出的信号只是256个连续信号在连续时钟驱动下的九次重复,这样就很难在256x9个时钟周期内完成对9个匹配块的处理,更难在256个时钟周期内完成。因此要通过参考块分频器将参考块存储器连续输出的256x9个像素点值进行九次分频,存储在9个RAM单元之中。这样当下一个时钟周期的上升沿到来时,这9个RAM可以同时输出信号,并在接下来的255个时钟周期之后将里面存储的所有信号输出,而且输出的这些信号相互之间是完全独立的。同时,为了使后面的各模块能够很好的进行,参考块分频器模块还引入了当前块的像素值信号,使得存入9个RAM单元的信号不仅仅是参考块的像素点值,还有当前块的像素点值以便保证后面的减法器可以正常工作。
2.3 减法器模块
减法器模块主要是完成当前块像素点值和参考块像素点值之间的作差,并将做差结果进行取绝对值运算。本减法器是采用9个LPM(参数化模块库)元件库中的减法器合成的。而LPM中的减法器将被减数和减数明确地分开了。因此,在将当前块和参考块像素点值输入到减法器之前先对二者进行比较,再分别输入到减法器的被减数和减数端口。这样当减法器设置为无符号数运算时,输出结果就相当于取了绝对值的差值。从时钟周期的角度发现,整个减法器在256x9个时钟周期内是都在运行的,但是所要采集的有用信号仅仅是9个独立的256个时钟周期,即每个减法器仅仅使用256个时钟周期的有用信号,其他时钟周期内的信号对于其他减法器是有用信号,但是对于本减法器却是干扰信号,必须要消除。这就是在参考块分频器里面引入当前块信息的原因。
2.4 累加比较器模块
累加比较器主要是完成对每个减法器输出的取过绝对值的差值信号的累加,并将累加结果进行比较输出最佳运动矢量。累加比较器的设计和减法器的设计有很大关系,除了在上述的取绝对值方面二者相互要求比较严格之外,在时序方面,二者也有很大关联。9个减法器在参考块分频器模块的作用下,工作于所有的时钟周期里面,而累加比较器则是以减法器输出的信号作为累加原材料的,这就使得累加比较器也必须从时钟的起始点就开始工作。确定运动矢量的标准是SAD最小值。也就是要通过比较9个累加结果,确定出最小值,并由地址计数器模块找到这个最小值所对应的运动矢量。
2.5 整体方案
整体方案主要是将三步搜索法中的三步分开进行。在外部输入信号的控制下,先输入第一步搜索的地址计算控制因子,使得寻址范围是在步长为4的9个数据块群里面,第一步搜索完成时将第一步搜索到的最佳运动矢量输入到第二步的搜索中,完成机制和第一步唯一的区别就是地址计算和产生的寻址范围不同,这样一直到完成第三步搜索时,将第三步搜索得到的最佳运动矢量作为当前块在这个搜索窗口里面的最佳运动矢量。
- 用数字信号处理器优化视频编码器(03-11)
- 基于ADSP-BF561的H.264视频编码器的实现(01-10)
- 基于ADSP-BF561处理器的视频编码器平台(01-16)
- 基于嵌入式平台的视频编码器的实现(07-30)
- 基于ADSP-BF561的H.264视频编码器系统的实现(03-05)
- 数字图像倍焦系统设计与实现综合实例之:设计需求分析与芯片选型(06-05)