发明名称 一种H.264解码器的运动补偿插值方法
摘要 本发明涉及视频解码电路的运动补偿插值技术领域,其特征在于:采用同一组半像素插值滤波器形成亮度(或色度)部分的4个整像素点和5个半像素点的值,然后再依次通过9选4、4选2模块用待求的像素点对应的运动向量的最低2比特或3比特来判断待求像素点所处的位置,找到它的相邻两个像素点,再通过求算术平均来算出待求像素点的值;对于色度像素部分,9选4模块首次选出的小正方形的4个顶点对应的像素值需要被反馈回纵向半像素滤波器,用于求出小正方形中的5个像素点,该5个像素点和4个顶点共9个点构成“田”字形,然后它们依次通过9选4、4选2模块完成和亮度部分相类似的过程。本发明所述的方法可以有效的降低芯片面积,节约成本。
申请公布号 CN100493192C 申请公布日期 2009.05.27
申请号 CN200610144288.5 申请日期 2006.12.01
申请人 清华大学 发明人 杨华中;俞尧;罗嵘
分类号 H04N7/26(2006.01)I;H04N9/77(2006.01)I 主分类号 H04N7/26(2006.01)I
代理机构 代理人
主权项 1. 一种H.264解码器的运动补偿插值方法,其特征在于所述方法是在ASIC上实现的,其中,对于4 x 4大小的亮度块和4 x 4大小的色度块分别按以下步骤实现:I. 对于所述亮度块,计算待求当前1/4像素点X时,依次含有以下步骤:步骤(1. 0),初始化,设定整像素点A、B、C、D是当前4 x 4亮度块中的一个2 x 2块中的4个点,且X处在A、B、C、D构成的正方形区域内,A、B、C、D按顺时针方向设置,其中,A是2 x 2块中的左上角顶点,以A为原点,横坐标沿A=>B方向设置,纵坐标沿A=>D方向设置,A、A0、A1依次是待求1/4像素点X附近上侧逆水平方向上的相邻整像素点,B、B0、B1依次是X附近上侧顺水平方向的相邻整像素点,D、D0、D1依次是X下侧逆水平方向的相邻整像素点,C、C0、C1是X下侧顺水平方向上的相邻整像素点,同理,A、J0、J1及D、L0、L1分别是该像素点X附近左侧逆、顺垂直方向的相邻整像素点,B、K0、K1及C、M0、M1分别是该像素点X附近右侧逆、顺垂直方向上的相邻整像素点;E、H、I、F依次是线段AB、BC、CD、DA的中点,都是半像素点,G是线段FH的中点,为半像素点,F1、F0、F及H1、H0、H分别为半像素点G同一水平线的左方和右方最近的3个半像素点;步骤(1. 1),在横向半像素插值滤波器1存入整像素点A1、A0、A、B、B0、B1的值,在横向半像素插值滤波器2存入半像素点F1、F0、F、H、H0、H1的值,在横向半像素插值滤波器3存入整像素点D1、D0、D、C、C0、C1的值;步骤(1. 2),在第一个时钟周期内执行以下步骤:纵向半像素插值滤波器从参考帧读入整像素点A、D一列的6个相邻整像素点,从上到下依次为J1、J0、A、D、L0、L1,并按以下公式计算半像素点F的值:F=(J1-5×J0+20×A+20×D-5×L0+L1+16)/32,该纵向半像素插值滤波器分别把半像素点F的值送入移位寄存器组2,把整像素点A送入移位寄存器组1,把整像素点D送入移位寄存器组3;步骤(1. 3),在第二个时钟周期依次执行以下的步骤:该纵向半像素插值滤波器参考帧读入整像素点B、C所在一列的6个相邻整像素点,从上到下依次为K1、K0、B、C、M0、M1,并按以下公式求出半像素点H的值:H=(K1-5×K0+20×B+20×D-5×M0+M1+16)/32,该纵向半像素插值滤波器分别把半像素点H送入移位寄存器组2,把整像素点B送入移位寄存器组1,把整像素点C送入移位寄存器组3;步骤(1. 4),移位寄存器组1把整像素点A1、A0、A、B、B0、B1送入横向半像素插值器1,该插值滤波器按照如下公式计算半像素点E的值:E=(A1-5×A0+20×A+20×B-5×B0+B1+16)/32;移位寄存器组3把整像素点D1、D0、D、C、C0、C1送入横向半像素插值器3,该插值滤波器按照如下公式计算半像素点I的值:I=(D1-5×D0+20×D+20×C-5×C0+C1+16)/32;移位寄存器组2把半像素点F1、F0、F、H、H0、H1送入横向半像素插值器2,该插值滤波器按照如下公式计算半像素点G的值:G=(F1-5×F0+20×F+20×H-5×H0+H1+16)/32;步骤(1. 5),移位寄存器组1把整像素点A、B的值,移位寄存器组2把整像素点F、H的值,移位寄存器组3把整像素点C、D的值,横向半像素插值滤波器1把半像素点E的值,横向半像素插值滤波器2把半像素点G的值,横向半像素插值滤波器3把半像素点I的值,并行送入9选4模块;步骤(1. 6),该9选4模块按输入的4 x 4块的横、纵轴方向的运动向量分量的最低2比特确定所求1/4像素点所处的位置;若横轴方向运动向量mvx的最低2比特mvx[1:0]为00,则该待求像素在横轴方向位于整像素位置;若mvx[1:0]为01,则该待求像素在横轴方向位于整像素向右1/4像素位置;若mvx[1:0]为10,则该待求像素在横轴方向位于整像素向右1/2像素位置;若mvx[1:0]为11,则该待求像素在横轴方向位于整像素向右3/4像素位置;对于纵轴方向的运动向量mvy,则用“向下”代替上述的“向右”即可;根据由上述方法得到的所求1/4像素点所处的位置,9选4模块选择确定像素点X所在的小正方形的4个顶点A、E、G、F;步骤(1. 7),该9选4模块把步骤(1.6)所得到用于进一步计算所需的作为小正方形的4个像素点送入4选2模块;用步骤(1. 6)所述的运动向量最低2比特来判别:若待求1/4像素点位于该小正方形的一条边上,该4选2输出该小正方形该边的两个顶点;若待求1/4像素点位于该小正方形中央,该4选2输出该小正方形对角线的两个顶点,所述的这两个点为半像素点;步骤(1. 8),该4选2模块把步骤(1.7)得到的2个像素点输入到2求1模块;该2求1模块对这两个点求加权平均并完成舍如,即求出待求的1/4像素点;II对于所述的色度块,计算当前待求1/8像素点X’时,依次含有以下步骤:步骤(2. 0),初始化,设定,整像素点A’、B’、C’、D’是当前4 x 4色度块中的一个2x2块中的4个点,且X’处在A’、B’、C’、D’构成的正方形区域内,A’、B’、C’、D’按顺时针方向设置,其中,A’是2 x 2块中的左上角顶点,以A’为原点,横坐标沿A’=>B’方向设置,纵坐标沿A’=>D’方向设置,不失一般性,不妨设X’位于边A’B’上;步骤(2. 1),所述的纵向半像素插值滤波器从参考帧读入A’、B’、C’、D’4个整像素点,按以下方式求出正方形A’B’C’D’范围内所有5个半像素点:对于处在整像素点连线位置上的半像素点,利用连线端点上的两个整像素点求算术平均值,即得到该半像素点的值;对于处在正方形A’B’C’D’中心的半像素点,利用A’、B’、C’、D’4个点求算术平均值,即得到该半像素点的值;步骤(2. 2),把步骤(2.1)所述的4个顶点A’、B’、C’、D’及5个半像素点共9个点送入9选4模块;该9选4模块根据待求1/8像素点X’的横、纵轴方向的运动向量mvx、mvy的最低3比特mvx[2:0]、mvy[2:0],按如下方法确定待求1/8像素点X’所处的位置:若mvx[2∶0]为000,则处于横轴方向的整像素位置;若mvx[2∶0]为001,则处于横轴方向的1/8像素位置;若mvx[2∶0]为010,则处于横轴方向的1/4像素位置;若mvx[2∶0]为011,则处于横轴方向的3/8像素位置;若mvx[2∶0]为100,则处于横轴方向的1/2像素位置;若mvx[2∶0]为101,则处于横轴方向的5/8像素位置;若mvx[2∶0]为110,则处于横轴方向的3/4像素位置;若mvx[2∶0]为111,则处于横轴方向的7/8像素位置;对于纵轴方向,把所述的“向右”改成“向下”即可;步骤(2. 3),该9选4模块根据步骤(2.2)中得到的所求像素点X’的位置信息,确定X’所处的小正方形的四个顶点:A’、E’、F’、G’,并通过一个暂存寄存器组把A’、E’、F’、G’的值送入纵向半像素插值滤波器;步骤(2. 4),所述的纵向半像素插值滤波器根据输入的4个像素点A’、E’、F’、G’,算出5个1/4像素点,这5个1/4像素点和输入的A’、E’、F’、G’构成一个3x3的“田”字形阵列;计算的方法同步骤(2.1);纵向半像素插值滤波器把这9个点送入9选4模块;步骤(2. 5),所述9选4模块按照步骤(2.2)所述的方法找到待求像素点X’所处的小正方形的4个顶点A’、H’、I’、J’,并把A’、H’、I’、J’送入到4选2模块;步骤(2. 6),所述的4选2模块向所述的2求1模块输出小正方形A’、H’、I’、J’的X’所在的一条边的端点A’、H’;步骤(2. 7),所述2求1模块对接收到的像素点A’、H’求算术平均值,并完成舍入,得到所求的1/8像素点X’。
地址 100084北京市100084-82信箱