一种hevc编码四叉树的递推译码方法

文档序号:8530660阅读:747来源:国知局
一种hevc编码四叉树的递推译码方法
【专利说明】一种HEVC编码四叉树的递推译码方法
[0001]
技术领域
[0002]本发明属于视频编解码技术领域,涉及一种视频解码软件设计方法,具体涉及一种HEVC视频编解码标准的四叉树递归结构展开为递推结构的方法。
[0003]
技术背景
[0004]HEVC是国际标准化组织ITU和MPEG联合开发的新一代视频编码标准,相比于目前普遍使用的H264技术,压缩效率接近翻翻。在HEVC中,最大可能的编码块扩展到64x64像素的编码单元,从而大大提高平缓区域的编码效率。另一方面,大尺寸块不能很好的处理图像的局部细节,而复杂的图像需要精细的预测,因此小尺寸块也是需要的。因此,HEVC的编码单元包含四个对称切分的矩形编码块,每个编码块又可以进一步划分为4四个子块,直到最小子块的边长不低于4个像素为止。HEVC编码单元的这种结构方便用四叉树表示,从实现的角度看,四叉树天然地具有递归迭代结构。目前代表性的HEVC参考软件,如HM、X265、FFMPEG等,都是采用递归方式实现四叉树结构的编译码。然而,一些高级编程语言不支持递归程序设计,甚至一些嵌入式平台上的C语言编译器也不支持递归;接近硬件实现的方式更不支持递归,如汇编、芯片设计。此外,递归程序设计尽管实现方便,但执行效率不尚O
[0005]因此,采用某种方法将当前HEVC软件编解码器中的四叉树递归程序结构修改为递推结构极具实用价值。
[0006]

【发明内容】

[0007]为了解决上述的技术问题,本发明提供了一种HEVC视频编解码标准的四叉树递归结构展开为递推结构的方法。
[0008]本发明所采用的技术方案是:一种HEVC编码四叉树的递推译码方法,其特征在于,包括以下步骤:
步骤1:构造编码块四叉树索引表,索引表的表项描述节点的属性信息,并给索引表赋初值;
步骤2:读取索引表中的当前节点,并根据节点描述信息判断节点是否分裂?
若分裂,则执行下述步骤3;
否则,则执行下述步骤4;
步骤3:逐一索引四个节点的位置属性、边长属性、深度属性信息,前三个节点同时记录右邻居兄弟节点索引,最后一个节点的因兄弟节点不存在而记录父节点;然后回转执行所述的步骤2 ; 步骤4:执行当前节点的HEVC标准译码(例如运动预测、逆变换、逆量化、运动补偿等操作),然后执行下述判断:
如果码流不够解码或解码运算出错,则终止循环,本流程结束;
否则,执行下述步骤5;
步骤5:检查当前节点,并判断:
若当前节点的右邻居节点不存在且父节点的兄弟节点也不存在,或者当前节点为根节点,则终止循环,本流程结束;
否则,执行下述步骤6;
步骤6:修改当前节点索引编号,并回转执行所述的步骤2。
[0009]作为优选,步骤I的具体实现包括以下子步骤:
步骤1.1:定义索引表的表项,表项结构体包含编码块位置横纵坐标、边长、深度、右邻居、父节点字段,其中,右邻居便于索引下一个兄弟节点,父节点便于回溯上级节点;
步骤1.2:分配索引表空间,索引表的总长度由((log2_ctb_size-log2_min_cb_size) ?I) + I给出,其中log2_ctb_size为编码单元边长2的幂次数,log2_min_cb_size为最小编码块边长2的幂次数;
步骤1.3:初始化索引表,索引表中的第一个表项的描述信息分别设置为:位置设置为码流中解析出来的编码单元的位置,边长设置为码流中解析出来的编码单元边长,深度初值为0,右邻居和父节点均设为-1 ;其它表项元素全部初始化为O ;同时,当前节点索引编号设为O。
[0010]作为优选,步骤2中所述的判断节点是否分裂,其判断条件分两种情况:
①当前节点所对应的编码块不超出图像范围且边长大于最小编码块边长,此时从码流中读取块分裂标记;
②否则,依据编码块边长是否大于最小编码块边长来确定分裂标记,大于时才判断为分裂。
[0011]作为优选,步骤3中所述的逐一索引四个节点的位置属性、边长属性、深度属性信息,其具体实现包括以下子步骤:
步骤3.1:索引顺序按照光栅扫描顺序进行;
步骤 3.2:位置依次是(x0, y0),(xl, y0),(x0, yl),(xl, yl),其中(x0, yO)为步骤 2读取的当前节点位置,(xl,yl)为(x0,y0)加上当前节点边长的1/2;边长均为当前节点的1/2 ;深度均增加I ;
步骤3.3:前三个节点的右邻居为扫描顺序上下一个节点的索引编号,第四个节点的父节点为当前节点索引编号;
步骤3.4:当前节点索引编号递增4。
[0012]作为优选,步骤6中所述的修改当前节点索引编号,其修改规则为:
①如果右邻居叶节点存在,则当前节点索引指向它;
②否则,如果父节点存在则回溯到父节点的兄弟节点。
[0013]本发明的HEVC四叉树递归结构展开为递推结构的过程就是按照深度优先策略遍历四叉树节点的过程。四叉树的节点分为叶节点和非叶节点,分别对应不可再分的编码块和可再分的编码块,其中根节点这个特殊的非叶节点对应编码单元。每个编码块的尺寸用边长表示,位置用左上角的坐标表示,单位均为像素。四叉树具有层次结构性,根节点到其它节点的路径长度代表了编码块的分解深度;处于同一深度且共享父节点的四个编码块又具有空间结构性。四叉树遍历过程中,访问到叶节点时,以块为单位执行编码或解码操作;反之,访问到非叶节点时,则记录有待进一步划分的四个块的层次结构和空间拓扑结构。
[0014]与目前HEVC编解码软件中普遍采用的四叉树的递归程序设计结构比较,本发明具有以下优点和积极效果:
(1)本发明通过递推迭代结构进行四叉树译码,显著降低了运算复杂度,特别适合于低功耗嵌入式平台的解码器实现;
(2)本发明为不支持递归程序设计的编译器,如Java、汇编,提供了实现HEVC解码器的可能;
(3)本发明克服了HEVC解码器硬件设计的障碍,便于FPGA或芯片实现四叉树的流水线译码。
[0015]
【附图说明】
[0016]图1:本发明具体实施例的原理图。
[0017]
【具体实施方式】
[0018]为了便于本领域普通技术人员理解和实施本发明,下面结合附图及实施例对本发明作进一步的详细描述,应当理解,此处所描述的实施示例仅用于说明和解释本发明,并不用于限定本发明。
[0019]请见图1,本发明提供的一种HEVC编码四叉树的递推译码方法,包括以下步骤: 步骤1:构造编码块四叉树索引表,索引表的表项描述节点的属性信息,并给索引表赋初值;其具体实现包括以下子步骤:
步骤1.1:定义四叉树索引表,表项的数据结构为一结构体类型Quadtreeldx,包含如下整型变量的字段:X0、yO分别表示编码块的左上角的横坐标和纵坐标,log2_cb_size表示块的边长(转化成底为2的对数表示),cb_depth块的层次划分深度,right表示四叉树右邻居兄弟节点索引,parent表示父节点索引。
[0020]步骤1.2:索引表分配,用指针变量pQuadtreeldx表示分配地址空间长度为((log2_ctb_size_log2_min_cb_size)〈〈I) + I 的索引表,其中 log2_ctb_size 为编码单元边长2的幂次数,log2_min_cb_size为最小编码块边长2的幂次数。
[0021]步骤1.3:索引表初始化,索引表中的第一个表项的位置XO、yO设置为码流中解析出来的编码单元的位置,边长log2_cb_size设置为解析得到的编码单元边长,深度cb_depth置0,右邻居right和父节点parent索引编号均初始化为-1。用nNodeldx和nNodeCount分别表示当前节点索引编号和节点计数器,初值置O。
[0022]步骤2:读取索引表中的当前节点,并根据节点描述信息判断节点是否分裂? 若分裂,则执行下述步骤3;
否则,则执行下述步骤4; 其具体实现包括以下子步骤:
步骤2.1:从索引表读取当前节点信息的形式化描述如下: xO = pQuadtreeldx[nNodeldx].xO; yO = pQuadtreeldx[nNodeldx].yO;
log2_cb_size = pQuadtreeldx[nNodeldx].log2_cb_size;
cb_size = I << log2_cb_size;
cb—depth = pQuadtreeldx[nNodeldx].cb—depth0
[0023]步骤2.2:判断分裂条件。
[0024]如果当前节点所对应的编码块不超出图像范围且边长大于最小编码块边长,此时从码流中读取块分裂标记split—cu ;否则,当编码块边长大于最小编码块边长时令split—cu=l,不然 split_cu=0o
[0025]步骤3:如果四叉树可分裂,即分裂标记split—CU为1,则逐一索引四个节点的位置属性、边长属性、深度属
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1