发明名称 用于H.264/AVC编码器的运动估计方法
摘要 本发明属于用于H.264/AVC编码器的运动估计方法,其特征在于,把整数运动估计分为粗糙层和精细层,依次分别估计;然后通过一个输入分别为参考帧数据和粗糙层运动向量的整数象素数据输入结构并行的进行精细层运动估计和半象素插值,接着,依次进行半象素运动估计和1/4象素运动估计,从而通过粗糙层运动估计得到的最佳预测模式下其最小残差对应的运动向量来计算最终的最小残差和其对应的最终运动向量。实践证明,本发明提出的方法可以节省64.5%的计算时间。
申请公布号 CN100471275C 申请公布日期 2009.03.18
申请号 CN200610113030.9 申请日期 2006.09.08
申请人 清华大学 发明人 罗嵘;杨春雷;杨华中
分类号 H04N7/26(2006.01)I 主分类号 H04N7/26(2006.01)I
代理机构 代理人
主权项 1. 用于H.264/AVC编码器的运动估计方法,其特征在于,该方法是在一块数字集成电路芯片内依以下步骤实现的:步骤(1),把运动图像以帧为单位输入当前帧存储器,该当前帧存储器以宏块为单位把当前宏块输入当前宏块存储器;把符合H.264/AVC视频编码标准的视频图像以帧为单位输入参考帧存储器;步骤(2),粗糙层数据预处理器按以下步骤进行粗糙层数据预处理:步骤(2. 1),第1数据输入缓存器从当前宏块存储器中读取32位当前宏块数据;第2数据输入缓存器从参考帧存储器中读取32位搜索区域数据;步骤(2. 2),步骤(2.1)中所述的两个数据输入缓存器各自把4个连续输入的32位数据合并成一个128位数据输出:第1数据输入缓存器输出的数据送到第1均值滤波器阵列,第2数据输入缓存器输出的数据送到第2均值滤波器阵列;步骤(2. 3),步骤(2.2)中所述的两个均值滤波器阵列同时获取粗糙层当前宏块数据和粗糙层整数运动估计搜索区域数据,上述获取的粗糙层当前宏块数据和粗糙层整数运动估计搜索区域数据每次输出均为64位;其中,粗糙层整数运动估计搜索区域中的每个象素用以下公式求得:Pelc=(Pel00+Pel01+Pel10+Pel11)/4,Pelc表示粗糙层的一个象素;Pel00、Pel01分别表示原始参考帧搜索区域第2*n行第2*m、第2*m+1个象素,Pel10、Pel11分别表示原始参考帧搜索区域第2*n+1行第2*m、第2*m+1个象素,n、m在[0,23]之间,从而得到一个48*48位的粗糙层运动估计的搜索区域,该宏块的搜索区域中心位于当前该宏块左上角象素;步骤(2. 4),第1、第2两个均值滤波器阵列分别依次向当前宏块均值滤波后数据存储器阵列和搜索区域移位寄存器阵列输出64位的数据,这两个阵列中的每个存储器存放一个8位象素数据;步骤(3),粗糙层运动估计器按以下步骤进行粗糙层运动估计,并输出预测模式以及相应运动向量:步骤(3. 1),粗糙层数据预处理器向粗糙层运动估计器中的8位2*2块的残差计算器输入当前宏块数据及粗糙层运动估计搜索区域数据,残差用SAD表示;步骤(3. 2),所述8位2*2块残差计算器采用加法树结构在一个时钟周期内计算出4*4、4*8、8*4、8*8、8*16、16*8和16*16共7种预测模式对应的所有2*2、2*4、4*2、4*4、4*8、8*4和8*8子块对应的残差;步骤(3. 3),最相似块搜索器在每个时钟来临时比较从所述8位2*2块残差计算器得到的各种预测模式下当前所有子块的残差与当前时钟前得到的最小残差的大小,保存更小的残差数据,若当前时钟得到的残差更小,则根据当前相似块的位置更新最小残差对应的运动向量;循环执行步骤(3.1)~(3.3),直到粗糙层搜索区域搜索完毕,得到最小残差及其相应的运动向量;步骤(3. 4),在步骤(3.3)执行结束后,先把上述各种预测模式下各自对应的各子块的最小残差相加,分别得到每种预测模式下的残差和;其次,比较7个残差和,选择其中残差和最小的预测模式作为最佳模式;步骤(3. 5),运动向量均值器根据步骤(3.4)得到的最佳预测模式,把该模式对应的各子块的运动向量相加,取其均值,得到粗糙层运动估计的运动向量;步骤(4),用并行处理器按以下步骤并行执行精细层运动估计和半象素插值:步骤(4. 1),粗糙层运动估计器和参考帧存储器依次分别把粗糙层运动估计的运动向量和参考帧数据送入整数象素输入缓存器;步骤(4. 2),所述整数象素输入缓存器把24*24的精细层搜索区域数据输入到精细层搜索区域移位寄存器阵列,而所述移位寄存器阵列再把该精细层搜索区域数据送入精细层运动估计器,依次按以下步骤计算出精细层最小残差及相应的运动向量:步骤(4. 2.1),把所述精细层搜索区域数据、相应的当前宏块数据送入一个精细层残差计算器,计算出4*4、4*8、8*4、8*8、8*16、16*8以及16*16块的残差:所述残差计算器由4个各自的元素为8*8个残差数据构成的子残差计算器构成;在该子残差计算器中,同一行每4个残差数据通过加法树相加得到一个4*1子块的残差,4个4*1子块的残差相加得到一个4*4子块的残差,在一个时钟周期内计算出所有4*4块的残差,再通过加法树结构,计算出当前宏块所有子块对应的残差,循环执行,一直到精细层搜索区域全部处理完毕;步骤(4. 2.2),最相似搜索器在每个时钟来临时比较步骤(4.2.1)所述的时钟周期得到的残差与此时钟周期前得到的最小残差的大小,若此时钟周期得到的残差更小,则根据当前相似块的位置更新最小的残差对应的运动向量;循环执行,直到精细层搜索区域搜索完毕,得到最小残差及其相应的运动向量;步骤(4. 3),所述整数象素输入缓存器同时把30*30的半象素搜索区域数据送入半象素插值滤波器阵列,所述半象素插值滤波器采用H.264/AVC标准指定的6抽头FIR滤波器,所述半象素插值滤波器阵列使用4个水平半象素插值滤波器和8个垂直半象素插值滤波器,该4个水平半象素插值滤波器使用一行整数象素中的6个象素插值,该8个垂直半象素插值滤波器使用一列整数象素或一列半象素中的六个象素插值,插值公式为:Pelh=round((Pel0-5Pel1+20Pel2+20Pel3-5Pel4+Pel5)/32),其中,round()表示取整,下标h表示半象素,下标0~5表示产生半象素的6个整数象素和半象素所述半象素插值滤波器阵列通过半象素插值存储器I输出整数象素,同时通过A、B、C三个半象素存储器分别输出水平、垂直半象素以及夹于水平和垂直两个插值之间的半象素之值;步骤(4. 4),用并行计算结束判决器判决精细层运动估计和半象素插值滤波计算是否结束,如已结束,发出结束信号;步骤(5),用半象素运动估计器以及1/4象素运动估计器按以下步骤依次进行半象素运动估计和1/4象素运动估计:步骤(5. 1),用半象素运动估计器进行半象素运动估计,并输出半象素最小残差和相应的半象素运动向量,其步骤依次如下:步骤(5. 1.1),精细层运动估计器向半象素运动估计器中的片上存储器接口输入最小残差及相应的运动向量;所述三个半象素存储器A、B、C向所述片上存储器接口输入半象素A、半象素B及半象素C;步骤(5. 1.2),所述片上存储器接口通过3个半象素输入缓存器把A、B、C三类半象素分别送往三个半象素搜索区域存储器后,再分别用3个半象素运动估计器按以下步骤对A、B、C三类半象素进行运动估计:首先,每个半象素运动估计器用一个4*4子块的残差计算器计算当前宏块的4*4子块与半象素搜索区域4*4子块的残差;然后,用一个最相似块选择器对照不同类型搜索区域得到的最相似子块的残差,选择其中最小的残差与精细层搜索得到的最小残差对比,得出更小的残差对应的相似块为半象素运动估计的最相似块,得出其半象素残差及相应的运动向量;步骤(5. 2),用1/4象素运动估计器进行1/4象素运动估计,按以下步骤得到1/4象素的最小残差及相应的1/4运动向量:步骤(5. 2.1),把从半象素运动估计器输出的半象素最小残差以及相应的运动向量、半象素插值存储器I得到的整数象素I、半象素插值存储器A、B、C得到的半象素A、B、C以及当前宏块存储器的当前宏块都输入1/4象素插值存储器接口;步骤(5. 2.2),1/4象素插值计算器阵列从所述1/4象素插值存储器接口输入的要计算的一个1/4象素所相邻的两个半象素或者一个半象素和一个整数象素求均值得到该1/4象素,可得到12种1/4象素,但只计算所述半象素运动估计器得到的半象素最相似块的象素周围的8种1/4象素;步骤(5. 2.3),所述1/4象素插值计算器阵列把所得的所有1/4象素分别存入8个1/4象素搜索区域存储器,并分别送入8个1/4象素运动估计器;步骤(5. 2.4),8个1/4象素运动估计器分别用一个4*4块的残差计算器分别从所述8个1/4象素搜索区域存储器得到1/4象素块和预先内存的当前宏块的4*4子块之间的残差;步骤(5. 2.5),一个最相似块选择器选择步骤(5.2.4)中所述8种搜索区域中残差最小的作为最佳1/4象素相似块,并计算相应的运动向量,再把该残差与半象素搜索得到的最小残差相比,选择最小的残差对应的相似块作为H.264/AVC运动估计器生成的最终选择的最佳相似块;步骤(6),用一个最终运动向量计算器计算H.264/AVC运动估计器生成的最终运动向量MVf,并存入运动估计结果存储器:MVf=8MVc+4MVp+2MVh+MVq,其中,c、p、h、q对应的运动向量分别表示粗糙层、精细层、半象素和1/4象素运动估计器得到的运动向量。
地址 100084北京市100084-82信箱