CN104853220B - 一种hevc编码四叉树的递推译码方法 - Google Patents
一种hevc编码四叉树的递推译码方法 Download PDFInfo
- Publication number
- CN104853220B CN104853220B CN201510256658.3A CN201510256658A CN104853220B CN 104853220 B CN104853220 B CN 104853220B CN 201510256658 A CN201510256658 A CN 201510256658A CN 104853220 B CN104853220 B CN 104853220B
- Authority
- CN
- China
- Prior art keywords
- node
- present
- length
- index
- quaternary tree
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
本发明公开了一种HEVC编码四叉树的递推译码方法,包括步骤:构造编码块四叉树索引表,索引表的表项描述节点的属性信息,并给索引表赋初值;读取索引表中的当前节点,并根据节点描述信息判断节点是否进一步***,从而选择是执行译码操作还是继续索引孩子节点;逐一索引四个节点的位置、边长、深度等属性信息,前三个节点同时记录兄弟节点索引,最后一个节点的因兄弟节点不存在记录父节点;执行当前节点的译码(含运动预测、逆变换、逆量化、运动补偿等标准定义的运算),然后修改当前节点索引编号;计算递推译码循环终止条件。采用本发明方法对四叉树译码的递归结构进行展开,可提高程序执行效率和设计的普适性。
Description
技术领域
本发明属于视频编解码技术领域,涉及一种视频解码软件设计方法,具体涉及一种HEVC视频编解码标准的四叉树递归结构展开为递推结构的方法。
技术背景
HEVC是国际标准化组织ITU和MPEG联合开发的新一代视频编码标准,相比于目前普遍使用的H264技术,压缩效率接近翻翻。在HEVC中,最大可能的编码块扩展到64x64像素的编码单元,从而大大提高平缓区域的编码效率。另一方面,大尺寸块不能很好的处理图像的局部细节,而复杂的图像需要精细的预测,因此小尺寸块也是需要的。因此,HEVC的编码单元包含四个对称切分的矩形编码块,每个编码块又可以进一步划分为4四个子块,直到最小子块的边长不低于4个像素为止。HEVC编码单元的这种结构方便用四叉树表示,从实现的角度看,四叉树天然地具有递归迭代结构。目前代表性的HEVC参考软件,如HM、X265、FFMPEG等,都是采用递归方式实现四叉树结构的编译码。然而,一些高级编程语言不支持递归程序设计,甚至一些嵌入式平台上的C语言编译器也不支持递归;接近硬件实现的方式更不支持递归,如汇编、芯片设计。此外,递归程序设计尽管实现方便,但执行效率不高。
因此,采用某种方法将当前HEVC软件编解码器中的四叉树递归程序结构修改为递推结构极具实用价值。
发明内容
为了解决上述的技术问题,本发明提供了一种HEVC视频编解码标准的四叉树递归结构展开为递推结构的方法。
本发明所采用的技术方案是:一种HEVC编码四叉树的递推译码方法,其特征在于,包括以下步骤:
步骤1:构造编码块四叉树索引表,索引表的表项描述节点的属性信息,并给索引表赋初值;
步骤2:读取索引表中的当前节点,并根据节点描述信息判断节点是否***?
若***,则执行下述步骤3;
否则,则执行下述步骤4;
步骤3:逐一索引四个节点的位置属性、边长属性、深度属性信息,前三个节点同时记录右邻居兄弟节点索引,最后一个节点的因兄弟节点不存在而记录父节点;然后回转执行所述的步骤2;
步骤4:执行当前节点的HEVC标准译码(例如运动预测、逆变换、逆量化、运动补偿等操作),然后执行下述判断:
如果码流不够解码或解码运算出错,则终止循环,本流程结束;
否则,执行下述步骤5;
步骤5:检查当前节点,并判断:
若当前节点的右邻居节点不存在且父节点的兄弟节点也不存在,或者当前节点为根节点,则终止循环,本流程结束;
否则,执行下述步骤6;
步骤6:修改当前节点索引编号,并回转执行所述的步骤2。
作为优选,步骤1的具体实现包括以下子步骤:
步骤1.1:定义索引表的表项,表项结构体包含编码块位置横纵坐标、边长、深度、右邻居、父节点字段,其中,右邻居便于索引下一个兄弟节点,父节点便于回溯上级节点;
步骤1.2:分配索引表空间,索引表的总长度由((log2_ctb_size-log2_min_cb_size)<<1)+1给出,其中log2_ctb_size为编码单元边长2的幂次数,log2_min_cb_size为最小编码块边长2的幂次数;
步骤1.3:初始化索引表,索引表中的第一个表项的描述信息分别设置为:位置设置为码流中解析出来的编码单元的位置,边长设置为码流中解析出来的编码单元边长,深度初值为0,右邻居和父节点均设为-1;其它表项元素全部初始化为0;同时,当前节点索引编号设为0。
作为优选,步骤2中所述的判断节点是否***,其判断条件分两种情况:
①当前节点所对应的编码块不超出图像范围且边长大于最小编码块边长,此时从码流中读取块***标记;
②否则,依据编码块边长是否大于最小编码块边长来确定***标记,大于时才判断为***。
作为优选,步骤3中所述的逐一索引四个节点的位置属性、边长属性、深度属性信息,其具体实现包括以下子步骤:
步骤3.1:索引顺序按照光栅扫描顺序进行;
步骤3.2:位置依次是(x0,y0),(x1,y0),(x0,y1),(x1,y1),其中(x0,y0)为步骤2读取的当前节点位置,(x1,y1)为(x0,y0)加上当前节点边长的1/2;边长均为当前节点的1/2单位为像素;深度均增加1;
步骤3.3:前三个节点的右邻居为扫描顺序上的下一个节点的索引编号,第四个节点的父节点为当前节点索引编号;
步骤3.4:当前节点索引编号递增4。
作为优选,步骤6中所述的修改当前节点索引编号,其修改规则为:
①如果右邻居叶节点存在,则当前节点索引指向它;
②否则,如果父节点存在则回溯到父节点的兄弟节点。
本发明的HEVC四叉树递归结构展开为递推结构的过程就是按照深度优先策略遍历四叉树节点的过程。四叉树的节点分为叶节点和非叶节点,分别对应不可再分的编码块和可再分的编码块,其中根节点这个特殊的非叶节点对应编码单元。每个编码块的尺寸用边长表示,位置用左上角的坐标表示,单位均为像素。四叉树具有层次结构性,根节点到其它节点的路径长度代表了编码块的分解深度;处于同一深度且共享父节点的四个编码块又具有空间结构性。四叉树遍历过程中,访问到叶节点时,以块为单位执行编码或解码操作;反之,访问到非叶节点时,则记录有待进一步划分的四个块的层次结构和空间拓扑结构。
与目前HEVC编解码软件中普遍采用的四叉树的递归程序设计结构比较,本发明具有以下优点和积极效果:
(1)本发明通过递推迭代结构进行四叉树译码,显著降低了运算复杂度,特别适合于低功耗嵌入式平台的解码器实现;
(2)本发明为不支持递归程序设计的编译器,如Java、汇编,提供了实现HEVC解码器的可能;
(3)本发明克服了HEVC解码器硬件设计的障碍,便于FPGA或芯片实现四叉树的流水线译码。
附图说明
图1:本发明具体实施例的原理图。
具体实施方式
为了便于本领域普通技术人员理解和实施本发明,下面结合附图及实施例对本发明作进一步的详细描述,应当理解,此处所描述的实施示例仅用于说明和解释本发明,并不用于限定本发明。
请见图1,本发明提供的一种HEVC编码四叉树的递推译码方法,包括以下步骤:
步骤1:构造编码块四叉树索引表,索引表的表项描述节点的属性信息,并给索引表赋初值;其具体实现包括以下子步骤:
步骤1.1:定义四叉树索引表,表项的数据结构为一结构体类型QuadtreeIdx,包含如下整型变量的字段:X0、y0分别表示编码块的左上角的横坐标和纵坐标,log2_cb_size表示块的边长(转化成底为2的对数表示),cb_depth块的层次划分深度,right表示四叉树右邻居兄弟节点索引,parent表示父节点索引。
步骤1.2:索引表分配,用指针变量pQuadtreeIdx表示分配地址空间长度为((log2_ctb_size-log2_min_cb_size)<<1)+1的索引表,其中log2_ctb_size为编码单元边长2的幂次数,log2_min_cb_size为最小编码块边长2的幂次数。
步骤1.3:索引表初始化,索引表中的第一个表项的位置X0、y0设置为码流中解析出来的编码单元的位置,边长log2_cb_size设置为解析得到的编码单元边长,深度cb_depth置0,右邻居right和父节点parent索引编号均初始化为-1。用nNodeIdx和nNodeCount分别表示当前节点索引编号和节点计数器,初值置0。
步骤2:读取索引表中的当前节点,并根据节点描述信息判断节点是否***?
若***,则执行下述步骤3;
否则,则执行下述步骤4;
其具体实现包括以下子步骤:
步骤2.1:从索引表读取当前节点信息的形式化描述如下:
x0=pQuadtreeIdx[nNodeIdx].x0;
y0=pQuadtreeIdx[nNodeIdx].y0;
log2_cb_size=pQuadtreeIdx[nNodeIdx].log2_cb_size;
cb_size=1<<log2_cb_size;
cb_depth=pQuadtreeIdx[nNodeIdx].cb_depth。
步骤2.2:判断***条件。
如果当前节点所对应的编码块不超出图像范围且边长大于最小编码块边长,此时从码流中读取块***标记split_cu;否则,当编码块边长大于最小编码块边长时令split_cu=1,不然split_cu=0。
步骤3:如果四叉树可***,即***标记split_cu为1,则逐一索引四个节点的位置属性、边长属性、深度属性信息,前三个节点同时记录右邻居兄弟节点索引,最后一个节点的因兄弟节点不存在而记录父节点;然后回转执行所述的步骤2;
这一过程形式化描述为:
nNodeCount++;
pQuadtreeIdx[nNodeCount].x0=x0;
pQuadtreeIdx[nNodeCount].y0=y0;
pQuadtreeIdx[nNodeCount].log2_cb_size=log2_cb_size_split;
pQuadtreeIdx[nNodeCount].cb_depth=cb_depth_split;
pQuadtreeIdx[nNodeCount].right=nNodeCount+1;
nNodeCount++;
pQuadtreeIdx[nNodeCount].x0=x1;
pQuadtreeIdx[nNodeCount].y0=y0;
pQuadtreeIdx[nNodeCount].log2_cb_size=log2_cb_size_split;
pQuadtreeIdx[nNodeCount].cb_depth=cb_depth_split;
pQuadtreeIdx[nNodeCount].right=nNodeCount+1;
nNodeCount++;
pQuadtreeIdx[nNodeCount].x0=x0;
pQuadtreeIdx[nNodeCount].y0=y1;
pQuadtreeIdx[nNodeCount].log2_cb_size=log2_cb_size_split;
pQuadtreeIdx[nNodeCount].cb_depth=cb_depth_split;
pQuadtreeIdx[nNodeCount].right=nNodeCount+1;
nNodeCount++;
pQuadtreeIdx[nNodeCount].x0=x1;
pQuadtreeIdx[nNodeCount].y0=y1;
pQuadtreeIdx[nNodeCount].log2_cb_size=log2_cb_size_split;
pQuadtreeIdx[nNodeCount].cb_depth=cb_depth_split;
pQuadtreeIdx[nNodeCount].parent=nNodeIdx;
nNodeIdx=nNodeCount–3。
其具体实现包括以下子步骤:
步骤3.1:索引顺序按照光栅扫描顺序进行;
步骤3.2:位置依次是(x0,y0),(x1,y0),(x0,y1),(x1,y1),其中(x0,y0)为步骤2读取的当前节点位置,(x1,y1)为(x0,y0)加上当前节点边长的1/2;边长均为当前节点的1/2单位为像素;深度均增加1;
步骤3.3:前三个节点的右邻居为扫描顺序上的下一个节点的索引编号,第四个节点的父节点为当前节点索引编号;
步骤3.4:当前节点索引编号递增4。
步骤4:如果四叉树不可再***,即***标记split_cu为0时,执行当前节点的HEVC标准译码,然后执行下述判断:
如果码流不够解码或解码运算出错,则终止循环,本流程结束;
否则,执行下述步骤5;
步骤5:检查当前节点,并判断:
若当前节点的右邻居节点不存在且父节点的兄弟节点也不存在,或者当前节点为根节点,则终止循环,本流程结束;
否则,执行下述步骤6;
步骤6:修改当前节点索引编号,并回转执行所述的步骤2;修改修改当前节点索引编号的规则为:如果右邻居叶节点存在,则将当前节点索引修改为右邻居;否则,如果父节点存在则回溯到父节点的右邻居节点,当前节点索引修改为父节点的右邻居。形式化描述如下:
如果邻居叶节点存在,即pQuadtreeIdx[nNodeIdx].right>0,则nNodeIdx=pQuadtreeIdx[nNodeIdx].right;
否则,如果父节点存在,即pQuadtreeIdx[nNodeIdx].parent>0,则当父节点的右邻居节点存在时,即pQuadtreeIdx[nParentNodeIdx].right>0,则nNodeIdx=pQuadtreeIdx[nParentNodeIdx].right;否则结束循环。
应当理解的是,本说明书未详细阐述的部分均属于现有技术。
应当理解的是,上述针对较佳实施例的描述较为详细,并不能因此而认为是对本发明专利保护范围的限制,本领域的普通技术人员在本发明的启示下,在不脱离本发明权利要求所保护的范围情况下,还可以做出替换或变形,均落入本发明的保护范围之内,本发明的请求保护范围应以所附权利要求为准。
Claims (5)
1.一种HEVC编码四叉树的递推译码方法,其特征在于,包括以下步骤:
步骤1:构造编码块四叉树索引表,索引表的表项描述节点的属性信息,并给索引表赋初值;
步骤2:读取索引表中的当前节点,并根据节点描述信息判断节点是否***?
若***,则执行下述步骤3;
否则,则执行下述步骤4;
步骤3:逐一索引四个节点的位置属性、边长属性、深度属性信息,前三个节点同时记录右邻居兄弟节点索引,最后一个节点的因兄弟节点不存在而记录父节点;然后回转执行所述的步骤2;
步骤4:执行当前节点的HEVC标准译码,然后执行下述判断:
如果码流不够解码或解码运算出错,则终止循环,本流程结束;
否则,执行下述步骤5;
步骤5:检查当前节点,并判断:
若当前节点的右邻居节点不存在且父节点的兄弟节点也不存在,或者当前节点为根节点,则终止循环,本流程结束;
否则,执行下述步骤6;
步骤6:修改当前节点索引编号,并回转执行所述的步骤2。
2.根据权利要求1所述的HEVC编码四叉树的递推译码方法,其特征在于,步骤1的具体实现包括以下子步骤:
步骤1.1:定义索引表的表项,表项结构体包含编码块位置横纵坐标、边长、深度、右邻居、父节点字段,其中,右邻居便于索引下一个兄弟节点,父节点便于回溯上级节点;
步骤1.2:分配索引表空间,索引表的总长度由((log2_ctb_size-log2_min_cb_size)<<1)+1给出,其中log2_ctb_size为编码单元边长2的幂次数,log2_min_cb_size为最小编码块边长2的幂次数;
步骤1.3:初始化索引表,索引表中的第一个表项的描述信息分别设置为:位置设置为码流中解析出来的编码单元的位置,边长设置为码流中解析出来的编码单元边长,深度初值为0,右邻居和父节点均设为-1;其它表项元素全部初始化为0;同时,当前节点索引编号设为0。
3.根据权利要求1所述的HEVC编码四叉树的递推译码方法,其特征在于:步骤2中所述的判断节点是否***,其判断条件分两种情况:
①当前节点所对应的编码块不超出图像范围且边长大于最小编码块边长,此时从码流中读取块***标记;
②否则,依据编码块边长是否大于最小编码块边长来确定***标记,大于时才判断为***。
4.根据权利要求1所述的HEVC编码四叉树的递推译码方法,其特征在于:步骤3中所述的逐一索引四个节点的位置属性、边长属性、深度属性信息,其具体实现包括以下子步骤:
步骤3.1:索引顺序按照光栅扫描顺序进行;
步骤3.2:位置依次是(x0,y0),(x1,y0),(x0,y1),(x1,y1),其中(x0,y0)为步骤2读取的当前节点位置,(x1,y1)为(x0,y0)加上当前节点边长的1/2;边长均为当前节点的1/2,单位为像素;深度均增加1;
步骤3.3:前三个节点的右邻居为扫描顺序上的下一个节点的索引编号,第四个节点的父节点为当前节点索引编号;
步骤3.4:当前节点索引编号递增4。
5.根据权利要求1所述的HEVC编码四叉树的递推译码方法,其特征在于:步骤6中所述的修改当前节点索引编号,其修改规则为:
①如果右邻居叶节点存在,则当前节点索引指向它;
②否则,如果父节点存在则回溯到父节点的兄弟节点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510256658.3A CN104853220B (zh) | 2015-05-18 | 2015-05-18 | 一种hevc编码四叉树的递推译码方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510256658.3A CN104853220B (zh) | 2015-05-18 | 2015-05-18 | 一种hevc编码四叉树的递推译码方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104853220A CN104853220A (zh) | 2015-08-19 |
CN104853220B true CN104853220B (zh) | 2017-08-25 |
Family
ID=53852518
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510256658.3A Active CN104853220B (zh) | 2015-05-18 | 2015-05-18 | 一种hevc编码四叉树的递推译码方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104853220B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105373835B (zh) * | 2015-10-14 | 2021-07-02 | 国网湖北省电力公司 | 一种基于构造树模型的链路信息管理方法 |
CN108668136A (zh) * | 2017-03-28 | 2018-10-16 | 华为技术有限公司 | 图像编/解码方法、视频编/解码器及视频编解码*** |
CN112601083A (zh) | 2017-06-28 | 2021-04-02 | 华为技术有限公司 | 一种图像数据的编码、解码方法及装置 |
WO2019174567A1 (zh) | 2018-03-16 | 2019-09-19 | 华为技术有限公司 | 划分标志位的上下文建模方法及装置 |
CN110278443B (zh) * | 2018-03-16 | 2022-02-11 | 华为技术有限公司 | 划分标志位的上下文建模方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013162395A (ja) * | 2012-02-07 | 2013-08-19 | Nippon Telegr & Teleph Corp <Ntt> | 画像符号化方法、画像符号化装置及び画像符号化プログラム |
CN103414891A (zh) * | 2013-07-19 | 2013-11-27 | 北京交通大学 | 一种hevc帧内编码的自底向上快速四叉树裁剪算法 |
CN103747272A (zh) * | 2014-01-09 | 2014-04-23 | 西安电子科技大学 | 用于hevc的残余四叉树编码的快速变换方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120114034A1 (en) * | 2010-11-08 | 2012-05-10 | Mediatek Inc. | Method and Apparatus of Delta Quantization Parameter Processing for High Efficiency Video Coding |
US9462275B2 (en) * | 2012-01-30 | 2016-10-04 | Qualcomm Incorporated | Residual quad tree (RQT) coding for video coding |
-
2015
- 2015-05-18 CN CN201510256658.3A patent/CN104853220B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013162395A (ja) * | 2012-02-07 | 2013-08-19 | Nippon Telegr & Teleph Corp <Ntt> | 画像符号化方法、画像符号化装置及び画像符号化プログラム |
CN103414891A (zh) * | 2013-07-19 | 2013-11-27 | 北京交通大学 | 一种hevc帧内编码的自底向上快速四叉树裁剪算法 |
CN103747272A (zh) * | 2014-01-09 | 2014-04-23 | 西安电子科技大学 | 用于hevc的残余四叉树编码的快速变换方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104853220A (zh) | 2015-08-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104853220B (zh) | 一种hevc编码四叉树的递推译码方法 | |
CN103858433B (zh) | 分层熵编码及解码 | |
CN105554510B (zh) | 对视频进行解码的方法和设备 | |
CN111405281A (zh) | 一种点云属性信息的编码方法、解码方法、存储介质及终端设备 | |
CN113473127B (zh) | 一种点云几何编码方法、解码方法、编码设备及解码设备 | |
CN111615791A (zh) | 在点云压缩中使用直接译码的方法和设备 | |
CN111615792A (zh) | 用于对点云进行熵编码的方法和设备 | |
CN106488238B (zh) | 低复杂度熵编码/解码方法和设备 | |
US20230065156A1 (en) | Point cloud encoding/decoding method, encoder, decoder, and storage medium | |
JP2015216656A (ja) | 動きベクトル候補セットを生成する方法 | |
CN103814396A (zh) | 用于树结构的自适应熵编码的方法 | |
JP6178798B2 (ja) | 終了可能な空間ツリー型位置符号化および復号 | |
CN1187717C (zh) | 三维对象形变信息的编码方法和装置 | |
CN113784124B (zh) | 使用多种形状子块进行精细划分的块匹配编码和解码方法 | |
CN105027560A (zh) | 确定用于变换系数的二进制码字的方法 | |
FI3782369T3 (fi) | Monityyppipuusyvyyslaajennus kuvarajakäsittelylle | |
US20230019767A1 (en) | Point cloud encoding method and decoding method, encoder and decoder, and storage medium | |
CN102547294A (zh) | 适用于h.264和hevc视频标准的cabac硬件解码器架构 | |
CN111211787A (zh) | 一种工业数据压缩方法、***、存储介质及终端 | |
CN110278443A (zh) | 划分标志位的上下文建模方法及装置 | |
CN115297327A (zh) | 基于语义结构化编码的语义先验编解码方法与*** | |
CN104682966A (zh) | 列表数据的无损压缩方法 | |
CN102595108B (zh) | 一种语法元素的编码方法及装置 | |
Shoba et al. | A Study on Data Compression Using Huffman Coding Algorithms | |
Quddus et al. | Binary text image compression using overlapping rectangular partitioning |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20171225 Address after: 610000 Sichuan city of Chengdu province high tech Zone 387 days Renlu Building No. 3 unit 1 28 floor No. 2803 Patentee after: Chengdu Suirui cloud Technology Co. Ltd. Address before: 430070 Hubei Province, Wuhan city Hongshan District Luoshi road future city D block 2404 Patentee before: Wuhan is with sharp hundred million mountain Science and Technology Ltd.s |
|
TR01 | Transfer of patent right |