可变块大小运动补偿分象素插值的实现方法及实现装置的制作方法

文档序号:7962747阅读:236来源:国知局
专利名称:可变块大小运动补偿分象素插值的实现方法及实现装置的制作方法
技术领域
本发明属于信号处理中的视频和图像编解码技术领域,特别涉及在编码解码过程中可变块大小运动补偿的VLSI体系结构及数据缓存方法。
背景技术
H.264/AVC是最新的视频编码国际标准。新的视频编码国际标准采用了许多新的编码技术,如基于上下文的变长编码(CAVLC),更高精度的运动矢量预测,可变块大小运动预测与补偿,intra预测,整型变换等,与MPEG-4视频编码国际标准相比,编码效率提高了一倍。
运动补偿的方法是,对于当前帧图像一个被解码的宏块(16×16的象素块),在片外参考帧图像存储器中,根据运动矢量,调入相应的预测块象素值并对预测块象素值进行数据缓存;根据运动矢量分象素的位置,对数据缓存中的预测块象素值,进行分象素精度插值(包括1/4象素精度和1/2象素精度插值),共有16个分象素插值点,其中有1个整象素点G和15个分象素点(a,b,c,d,e,f,g,h,i,j,k,n,p,q,r)。如图1所示。采用运动矢量分象素指向位置的插值点的值作为当前解码象素块的运动预测值。
1/4象素的插值,提高了编码效率,也增加了运算的复杂度和计算量。
传统的实现方法中,因为同一列(或者同一行)象素数据在同一个存储器单元,因此不能并行的读写同一列(同一行)象素数据。硬件实现中,采用移位寄存器阵列,来实现水平方向或者垂直方向的插值。即包括行插值运算单元,又包括列插值运算单元,硬件的使用率较低。同时插值所需的时钟周期数多。

发明内容
本发明的目的是为克服已有技术的不足之处,提供一种分象素插值的实现方法及实现装置,以提高分象素插值的效率。
本发明提出的可变块大小运动补偿分象素插值的实现方法,包括以下步骤1)将用于插值的象素数据存储到参考象素块数据缓存区;2)将多个插值点分为多种类型,分别对每种类型的插值点进行插值,得到运动预测值;3)将所述运动预测值,根据各类型插值点的按行或者按列存储到运动预测值存储器。
本发明提出的分象素插值实现装置,其特征在于,该装置包括依次相连的参考象素块数据缓存模块,分象素插值单元和运动预测值存储器;其中所述参考象素块数据缓存模块,用于将输入数据根据输入地址进存储到参考象素块缓存器中,所述根据输出地址进行读取参考象素块缓存器中的数据;所述分象素插值模块,用于根据当前块的运动矢量,确定所需运动预测值的插值点类型,并设定N个分象素的插值单元,一个分象素的插值单元,完成一个分象素点的插值,N个分象素的插值单元并行计算N个分象素点的值;所述运动预测值存储器,用于存储插值后的结果。
本发明的特点及效果本发明可提高插值运算单元的硬件利用率。同时大大减少了插值所需的时钟周期数。


图1为可变块大小的7种分块模式。
图2为本发明的可变块大小运动补偿分象素插值的实现方法框图。
图3为本发明的可变块大小运动补偿分象素插值实现装置的结构框图。
图4为本发明装置中的参考象素块数据缓存的电路结构框图。
具体实施例方式
本发明提出的可变块大小运动补偿分象素插值的实现方法及实现装置结合附图及实施例详细说明如下本发明提出的可变块大小运动补偿分象素插值的实现方法,包括以下步骤1)将用于插值的象素数据存储到参考象素块数据缓存区;2)将多个插值点分为多种类型,分别对每种类型的插值点进行插值,得到运动预测值;3)将所述运动预测值,根据各类型插值点的按行或者按列存储到运动预测值存储器。
下面以H.264/AVC为实施例,对本发明的分象素插值实现方法进行详细说明,本实施例包括如下的步骤,如图2所示1)将用于插值的象素数据存储到参考象素块数据缓存区;设定参考象素块数据缓存区的存储器单元块数为B,B的取值,可以根据应用的不同,方便的通过增加或减少提高并行度或减少硬件的开销,在本实施例中,B取16;B×B大小的块为一个基本块;B×B块内的象素点(p,q),0≤p<B,0≤q<B,映射到B个存储器单元中的位置为(b,A′),其中b为存储器单元的索引,A′为相应与B×B块位置的地址偏移。
所述映射可采用直接映射方式b=(p+q%B)%BA′=q或采用另外一种映射方式将B×B块分成4×4的小块,先对4×4小块进行块的线性移位,再对每一个小块进行线性移位,同样可以使行列数据存储分布在不同的存储器模块中。
2)将16个插值点分为6种类型,分别对6种类型的插值点进行插值;21)根据运动矢量,将16个分象素插值点分为六种类型,分别为类型0,类型1,类型2,类型3,类型4,类型5。如表1所示。
表1


22)对6种类型的插值点分别进行插值,N个插值运算单元可以并行插值,插值运算单元的数目可配置,可以根据应用的不同,选择不同数目的插值运算单元。在本实施例中,N为4。
如图1所示,对于类型0,直接将整象素位置的象素值作为运动预测值;对于类型1,在水平方向上,将象素(例如E,F,G,H,I,J等)逐行并行读取,对读取的象素进行水平方向上的插值,将插值的结果作为运动预测值;对于类型2,在垂直方向上,将象素(例如A,C,G,M,R,T等)逐列并行读取,对读取的象素进行垂直方向上的插值,将插值的结果作为运动预测值;对于类型3,首先在垂直方向,将象素(例如A,C,G,M,R,T等)逐列并行读取,对读取的象素进行垂直方向上的插值,得到垂直方向的半象素值(例如cc,dd,h,m,ee,ff),将垂直方向的半象素值保存在寄存器中;然后在水平方向上,将象素(例如E,F,G,H,I,J等)逐行并行读取,对读取的象素进行水平方向的插值,得到水平方向的半象素值(例如aa,bb,b,s,gg,hh);将水平方向的半象素值和垂直方向的半象素值进行线性插值,将线性插值的结果作为运动预测值;对于类型4,首先在水平方向上,将象素(例如E,F,G,H,I,J等)逐行并行读取,对读取的象素进行水平方向的插值,得到水平方向的半象素值(例如aa,bb,b,s,gg,hh),将水平方向的半象素值保存在寄存器中;然后将水平方向的半象素值(例如aa,bb,b,s,gg,hh)在垂直方向并行读取,对读取的象素值进行垂直方向的插值,将插值的结果作为运动预测值;对于类型5,首先在垂直方向上,将象素(例如A,C,G,M,R,T)逐列并行读取,对读取的象素进行垂直方向的插值,得到垂直方向的半象素值(例如cc,dd,h,m,ee,ff);然后将垂直方向的半象素值(例如cc,dd,h,m,ee,ff)在水平方向并行读取,对读取的垂直方向的半象素值进行水平方向的插值,将插值的结果作为运动预测值;3)将插值的结果,即运动预测值,根据各插值类型点的按行或者按列存储到运动预测值存储器。
本发明提出的分象素插值装置,如图3所示,包括以下模块参考象素块数据缓存模块,分象素插值单元,运动预测值存储器。
1、参考象素块数据缓存模块参考象素块数据缓存器将输入数据根据输入地址存储到参考象素块数据缓存。根据输出地址,读取参考象素块暑假缓存器中的数据。
参考象素块数据缓存器的结构,如图4所示,包括以下模块11、输入地址调整单元;输入地址调整单元将B×B块的地址通过映射转换成片上数据缓存存储器的物理地址。该映射采用如下的直接映射方式B×B块内的象素点(p,q),0≤p<B,0≤q<B,映射到B个存储器模块中的位置为(b,A′),b=(p+q%B)%BA′=q其中b为存储器单元的索引,A′为相应与B×B块位置的地址偏移;B×B块中每一行和每一列的数据在不同的存储器模块中,从而实现行列数据的并行存取;或采用另外一种映射方式是,将B×B块分成4×4的小块,先对4×4小块进行块的线性移位,再对每一个小块进行线性移位,同样可以使行列数据存储分布在不同的存储器模块中。
12、输入数据调整单元;输入数据调整单元将输入数据,移位到对应的存储器单元的位置。
13、输出地址调整单元;输出地址调整单元将B×B块的地址通过映射转换成片上数据缓存存储器的物理地址。该转换包括如下的直接映射B×B块内的象素点(p,q),0≤p<B,0≤q<B,映射到B个存储器模块中的位置为(b,A′),b=(p+q%B)%BA′=q其中b为存储器单元的索引,A′为相应与B×B块位置的地址偏移;B×B块中每一行和每一列的数据在不同的存储器模块中,从而实现行列数据的并行存取。
或采用另外一种映射方式将B×B块分成4×4的小块,先对4×4小块进行块的线性移位,再对每一个小块进行线性移位,同样可以使行列数据存储分布在不同的存储器模块中。
14、输出数据调整单元;输出数据调整单元将输出数据进行调整,调整为B×B块中数据的顺序。
15、B个存储器单元用于存储参考帧象素块数据。
2、分象素插值模块用于设定分象素的插值单元的个数为N,使一个分象素的插值单元,完成一个分象素点的插值。N个插值单元可并行插值,其数目可配置,可以根据应用的不同,方便的通过增加或减少插值运算单元的数目提高插值速度或减少硬件的开销。
根据当前块的运动矢量,确定所需运动预测值的插值点类型,N个分象素的插值单元并行的计算N个分象素点的值。
3、运动预测值存储器运动预测值存储器用于存储插值后的结果。
权利要求
1.一种可变块大小运动补偿分象素插值的实现方法,其特征在于,包括以下步骤1)将用于插值的象素数据存储到参考象素块数据缓存区;2)将多个插值点分为多种类型,分别对每种类型的插值点进行插值,得到运动预测值;3)将所述运动预测值,根据各类型插值点的按行或者按列存储到运动预测值存储器。
2.如权利要求1所述的方法,其特征在于,所述步骤1)具体包括设定参考象素块数据缓存区的存储器单元块数为B,B×B块内的象素点(p,q),0≤p<B,0≤q<B,映射到B个存储器单元中的位置为(b,A′),其中b为存储器单元的索引,A′为相应与B×B块位置的地址偏移。
3.如权利要求2所述的方法,其特征在于,所述映射为b=(p+q%B)%BA′=q
4.如权利要求2所述的方法,其特征在于,所述映射为将B×B块分成小块,先对小块进行块的线性移位,再对每一个小块进行线性移位,使行列数据存储分布在不同的存储器模块中。
5.如权利要求1所述的方法,其特征在于,所述步骤2)中B的取值为16,具体包括21)根据运动矢量,将16个象素插值点分为六种类型,分别为类型0,类型1,类型2,类型3,类型4,类型5,每种类型对应的象素插值点分别为类型0为整象素点G,类型1为分象素点a,b,c,类型2为分象素点d,h,n,类型3为分象素点e,g,p,r,类型4为分象素点f,j,q,类型5为分象素点i,k;22)对所述6种类型的插值点分别在N个插值运算单元进行插值;对于类型0,直接将整象素位置的象素值作为运动预测值;对于类型1,在水平方向上,将象素逐行并行读取,对读取的象素进行水平方向上的插值,将插值的结果作为运动预测值;对于类型2,在垂直方向上,将象素逐列并行读取,对读取的象素进行垂直方向上的插值,将插值的结果作为运动预测值;对于类型3,首先在垂直方向,将象素逐列并行读取,对读取的象素进行垂直方向上的插值,得到垂直方向的半象素值,将垂直方向的半象素值保存在寄存器中;然后在水平方向上,将象素逐行并行读取,对读取的象素进行水平方向的插值,得到水平方向的半象素值;将水平方向的半象素值和垂直方向的半象素值进行线性插值,将线性插值的结果作为运动预测值;对于类型4,首先在水平方向上,将象素逐行并行读取,对读取的象素进行水平方向的插值,得到水平方向的半象素值,将水平方向的半象素值保存在寄存器中;然后将水平方向的半象素值在垂直方向并行读取,对读取的象素值进行垂直方向的插值,将插值的结果作为运动预测值;对于类型5,首先在垂直方向上,将象素逐列并行读取,对读取的象素进行垂直方向的插值,得到垂直方向的半象素值;然后将垂直方向的半象素值在水平方向并行读取,对读取的垂直方向的半象素值进行水平方向的插值,将插值的结果作为运动预测值;
6.一种如权利要求1所述的方法的分象素插值实现装置,其特征在于,该装置包括依次相连的参考象素块数据缓存模块,分象素插值单元和运动预测值存储器;其中所述参考象素块数据缓存模块,用于将输入数据根据输入地址进存储到参考象素块缓存器中,所述根据输出地址进行读取参考象素块缓存器中的数据;所述分象素插值模块,用于根据当前块的运动矢量,确定所需运动预测值的插值点类型,并设定N个分象素的插值单元,一个分象素的插值单元,完成一个分象素点的插值,N个分象素的插值单元并行计算N个分象素点的值;所述运动预测值存储器,用于存储插值后的结果。
7.如权利要求6所述的装置,其特征在于,所述参考象素块数据缓存器包括输入地址调整单元用于将B×B块的地址通过映射转换成片上数据缓存存储器的物理地址;输入数据调整单元用于将输入数据,移位到对应的存储器单元的位置;输出地址调整单元用于将B×B块的地址转换成片上数据缓存存储器的物理地址。输出数据调整单元用于输出数据调整单元将输出数据进行调整,调整为B×B块中数据的顺序;B个存储器单元用于存储参考帧象素块数据。
8.如权利要求7所述的装置,其特征在于,所述输入地址调整单元和输出地址调整单元中的映射关系为B×B块内的象素点(p,q),0≤p<B,0≤q<B,映射到B个存储器模块中的位置为(b,A′),直接映射为b=(p+q%B)%BA′=q其中b为存储器单元的索引,A′为相应与B×B块位置的地址偏移;B×B块中每一行和每一列的数据在不同的存储器模块中,从而实现行列数据的并行存取。
9.如权利要求7所述的装置,其特征在于,所述输入地址调整单元和输出地址调整单元中的映射关系为将B×B块分成4×4的小块,先对4×4小块进行块的线性移位,再对每一个小块进行线性移位,同样可以使行列数据存储分布在不同的存储器模块中。
全文摘要
本发明涉及可变块大小运动补偿分象素插值的实现方法及实现装置,属于信号处理中的视频和图像编解码技术领域,该方法包括将用于插值的象素数据存储到参考象素块数据缓存区;将多个插值点分为多种类型,分别对每种类型的插值点进行插值,得到运动预测值;将所述运动预测值,根据各类型插值点的按行或者按列存储到运动预测值存储器。该装置包括依次相连的参考象素块数据缓存模块,分象素插值单元和运动预测值存储器。本发明可以提高分象素插值的效率。
文档编号H04N7/32GK1909665SQ20061008914
公开日2007年2月7日 申请日期2006年8月7日 优先权日2006年8月7日
发明者何芸, 李宇, 瞿艳梅 申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1