CN103118250B - 一种帧内划分标志的编解码方法及装置 - Google Patents
一种帧内划分标志的编解码方法及装置 Download PDFInfo
- Publication number
- CN103118250B CN103118250B CN201110363936.7A CN201110363936A CN103118250B CN 103118250 B CN103118250 B CN 103118250B CN 201110363936 A CN201110363936 A CN 201110363936A CN 103118250 B CN103118250 B CN 103118250B
- Authority
- CN
- China
- Prior art keywords
- lcu
- depth
- division symbolizing
- symbolizing
- division
- 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.)
- Expired - Fee Related
Links
Landscapes
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
本发明公开了一种帧内划分标志的编码方法,用于解决现有编码方法压缩编码效率低的技术问题。本发明对深度0仅编码划分标志为0的LCU地址或地址差,对深度1仅编码相邻图像划分方式上存在的差异,从而有效降低深度0和1划分标志编码比特数,提高压缩编码效率。
Description
技术领域
本发明属于视频编解码领域,尤其涉及一种帧内划分标志的编解码方法及装置。
背景技术
为了更高效的压缩高分辨率视频,正在制定中(2010~2013)的下一代国际视频标准-高效视频编码标准(HEVC)中,引入了编码单元的概念。具体来说,一帧图像可以分成若干个片(slice),每个slice由片头(slice header)和片数据(slice data)组成,一个slice又可以包括多个最大编码单元(Largest Coding Unit,LCU),每个LCU根据图像区域纹理特性可以进一步划分成更小的编码单元CU,划分方式采用递归四叉树方式。对每个LCU来说,除最大深度外每个深度都存在一个划分标志用来表示该深度(层)对应的CU是否进行四叉树分割,划分标志为1时表示对该层需要进行四叉树分割,为0时表示对该层不进行四叉树分割,深度0即指根层。为表示这种递归四叉树划分方式,HEVC引入了一个新的语法元素,名称为编码单元划分标志(split_coding_unit_flag,以下简称划分标志),该语法元素用于标识一个编码单元是否进行四叉树划分。
帧内预测模式下,当前HEVC参考软件HM3.0对split_coding_unit_flag采用逐层编码方式,先编码深度0(即第1层LCU)的划分标志split_coding_unit_flag,如果深度0划分标志为1,表示允许对LCU的深度0进行四叉树划分,并编码深度0划分标志,依次递归下去,直至允许的最大分割深度MaxPartitionDepth为止。一方面,对一个较大图像区域来说,通常情况下存在着图像纹理特性差异,因而进行四叉树划分的可能性较大;另一方面,编码图像存在的时间相关性会影响相邻帧相同位置编码块的划分方式。
发明内容
有鉴于此,本发明的主要目的在于提供一种帧内划分标志的编解码方法及装置,用于解决现有编码方法压缩编码效率低的技术问题。
为达到上述目的,本发明的技术方案是这样实现的:
基于本发明实施例提供一种帧内划分标志的编码方法,该方法包括:
A、初始化当前编码图像第一个最大编码单元LCU地址CurrLcuAddr和根层划分标志为0的LCU数目split_root_counter为0;
B、获取当前编码LCU根层划分标志;
C、如果当前编码LCU根层划分标志为1,则执行步骤E,否则执行步骤D;
D、如果split_root_counter为0,则保存当前编码LCU地址并递增split_root_counter,然后执行步骤F;否则,如果split_root_counter大于0,则保存当前编码LCU与前一个根层划分标志为0的LCU地址之差并递增split_root_counter,然后执行步骤F;
E、根据LCU划分情况,递归编码除根层之外的其余各层划分标志;
F、如果当前编码LCU是图像最后一个LCU,则执行步骤G,否则,递增LCU地址CurrLcuAddr后,执行步骤B;
G、在片头Slice Header编码split_root_counter;
H、如果split_root_counter为0,则处理完毕;否则,对第1个根层划分标志为0的LCU在Slice Header编码其地址,对其他根层划分标志为0的LCU在Slice Header编码其与前一个根层划分标志为0的LCU的地址之差,处理完毕。
进一步地,在步骤A和步骤B之间还包括如下判断步骤:
AB1、如果编码图像每LCU行包括非整数个LCU且当前编码LCU属于图像右边界LCU或编码图像每LCU列包括非整数个LCU且当前编码LCU属于下边界LCU,则执行步骤E,否则执行步骤B;
相应地,步骤F中,如果当前编码LCU不是图像最后一个LCU,则递增LCU地址后,执行步骤AB1。
进一步地,在步骤C和步骤E之间,即如果当前编码LCU根层划分标志为1时,在执行步骤E之前还包括下述步骤CE1和CE2:
CE1、获取当前编码LCU深度1的四个编码单元CU的划分标志SplitFlag0Dep1、SplitFlag1Dep1、SplitFlag2Dep1和SplitFlag3Dep1,计算出当前编码LCU深度1划分标志之和uiSumSplitFlagDep1;
CE2、如果当前编码图像是序列第1个编码图像,则编码深度1划分标志,并将uiSumSplitFlagDep1保存到uiSumPrePicSplit[CurrLcuAddr];否则,计算当前编码LCU与其前一帧紧邻图像相同位置LCU深度1划分标志之和的差uiDiffSplitSum并编码uiDiffSplitSum;
此外,在步骤D和步骤F之间还包括将当前编码LCU深度1划分标志之和uiSumSplitFlagDep1设置为预设值的步骤。
基于本发明实施例提供一种帧内划分标志的解码方法,该方法包括:
A、初始化当前解码图像所有LCU深度0划分标志为1,初始化第一个LCU地址CurrLcuAddr为0;
B、从Slice Header解析出当前解码图像的根层划分标志为0的LCU数目split_root_counter;
C、如果split_root_counter为0,则进入步骤E;否则,从Slice Header解析出深度0划分标志为0的第1个LCU地址和其他深度0划分标志为0的LCU与其前一个深度0划分标志为0的LCU地址之差,从而计算得到深度0划分标志为0的各LCU地址;
D、将深度0划分标志为0的各LCU根层划分标志设置为0;
E、如果解码图像每LCU行或列包含非整数个LCU且当前解码LCU属于图像右边界LCU或下边界LCU,按照原方法解码当前LCU划分标志,然后执行步骤G;否则,执行步骤F;
F、解码除深度0之外的其余各层划分标志,然后执行步骤G;
G、如果当前解码LCU是图像最后一个LCU,则处理结束;否则,递增LCU地址,转至步骤E,解码下一个LCU,直至当前解码图像中的LCU全部处理完毕。
进一步地,步骤F包括下述步骤FG1和FG2,即已经确定了当前解码LCU根层划分标志取值时,根据根层划分标志取值情况在执行步骤G之前还包括下述步骤FG1和FG2:
FG1、如果当前解码LCU深度0划分标志为1且当前解码LCU属于第1个解码图像,则解码深度1划分标志并将深度1划分标志之和保存到uiSumPrePicSplit[CurrLcuAddr],转至步骤FG2;否则,如果当前解码LCU深度0划分标志为1且当前解码LCU不属于第1个解码图像,则解码uiDiffSplitSum,计算当前解码LCU深度1划分标志及划分标志之和,保存深度1划分标志之和到uiSumPrePicSplit[CurrLcuAddr],转至步骤FG2;否则,如果当前解码LCU深度0划分标志为0,则将当前解码LCU深度1划分标志之和uiSumSplitFlagDep1设置为预设值,转至步骤G;
FG2、解码除深度0和1外的其他各深度划分标志,然后执行步骤G。
基于本发明实施例提供一种帧内划分标志的编码装置,该装置包括:
初始化模块,用于初始化当前编码图像第一个LCU地址CurrLcuAddr和根层划分标志为0的LCU数目split_root_counter为0;
边界LCU判断模块,用于判断是否解码图像每LCU行或列包含非整数个LCU且当前解码LCU属于图像右边界LCU或下边界LCU,若是则指示其它层划分标志编码模块执行,否则指示根层划分标志判断模块执行;
根层划分标志判断模块,用于获取当前编码LCU根层划分标志,并判断当前编码LCU根层划分标志是否为1,若为1则指示其它层划分标志编码模块执行,否则指示计数处理模块执行;
计数处理模块,用于在当前编码LCU根层划分标志为0时,保存当前编码LCU地址并递增split_root_counter,在当前编码LCU根层划分标志大于0时,保存当前编码LCU与前一个根层划分标志为0的LCU地址之差并递增split_root_counter,然后指示最后LCU判断模块执行;
其它层划分标志编码模块,用于在当前编码LCU根层划分标志为1时,根据LCU划分情况,递归编码除根层之外的其余各层划分标志,然后指示最后LCU判断模块执行;
最后LCU判断模块,用于判断当前编码LCU是否为图像最后一个LCU,若是指示片头编码模块执行,否则指示LCU地址递增模块执行;
LCU地址递增模块,用于递增LCU地址CurrLcuAddr后,指示边界LCU判断模块执行;
片头编码模块,用于在片头Slice Header编码split_root_counter,然后指示根层划分标志编码模块执行;
根层划分标志编码模块,用于在split_root_counter为0时,对第1个根层划分标志为0的LCU在Slice Header编码其地址,对其他根层划分标志为0的LCU在Slice Header编码其与前一个根层划分标志为0的LCU的地址之差。
进一步地,所述装置在根层划分标志判断模块和其它层划分标志编码模块之间还包括:
深度1划分标志之和计算模块,用于当前编码LCU根层划分标志为1时,获取当前编码LCU深度1的四个编码单元CU的划分标志SplitFlag0Dep1、SplitFlag1Dep1、SplitFlag2Dep1和SplitFlag3Dep1,计算出当前编码LCU深度1划分标志之和uiSumSplitFlagDep1,然后指示深度1划分标志编码模块执行;
深度1划分标志编码模块,用于在当前编码图像是序列第1个编码图像时,编码深度1划分标志,并将uiSumSplitFlagDep1保存到uiSumPrePicSplit[CurrLcuAddr];在当前编码图像不是序列第1个编码图像时,计算当前编码LCU与其前一帧紧邻图像相同位置LCU深度1划分标志之和的差uiDiffSplitSum并编码uiDiffSplitSum;然后指示其它层划分标志编码模块执行;
所述装置在计数处理模块和最后LCU判断模块之间,还包括:
深度1划分标志设置模块,用于将当前编码LCU深度1划分标志之和uiSumSplitFlagDep1设置为预设值。
基于本发明实施例提供一种帧内划分标志的解码装置,该装置包括:
初始化模块,用于初始化当前解码图像所有LCU深度0划分标志为1,初始化第一个LCU地址CurrLcuAddr为0;
片头解码模块,用于从Slice Header解析出当前解码图像的根层划分标志为0的LCU数目split_root_counter;
根层划分标志解码模块,如果split_root_counter为0,则指示边界LCU判断模块执行;否则,从Slice Header解析出深度0划分标志为0的第1个LCU地址和其他深度0划分标志为0的LCU与其前一个深度0划分标志为0的LCU地址之差,从而计算得到深度0划分标志为0的各LCU地址;
根层划分标志设置模块,将深度0划分标志为0的各LCU根层划分标志设置为0;
边界LCU判断模块,如果解码图像每LCU行或列包含非整数个LCU且当前解码LCU属于图像右边界LCU或下边界LCU,则按照原方法解码当前LCU划分标志;否则,指示深度1划分标志解码模块执行;
深度1划分标志解码模块,如果当前解码LCU深度0划分标志为1且当前解码LCU属于第1个解码图像,则解码深度1划分标志并将深度1划分标志之和保存到uiSumPrePicSplit[CurrLcuAddr],然后指示其它层划分标志解码模块执行;否则,如果当前解码LCU深度0划分标志为1且当前解码LCU不属于第1个解码图像,则解码uiDiffSplitSum,计算当前解码LCU深度1划分标志及划分标志之和,保存深度1划分标志之和到uiSumPrePicSplit[CurrLcuAddr],然后指示其它层划分标志解码模块执行;否则,如果当前解码LCU深度0划分标志为0,则将当前解码LCU深度1划分标志之和uiSumSplitFlagDep1设置为预设值,然后指示最后LCU判断模块执行;
其它层划分标志解码模块,用于解码除深度0和1外的其他各深度划分标志,然后指示最后LCU判断模块执行。最后LCU判断模块,如果当前解码LCU是图像最后一个LCU,则处理结束;否则,递增LCU地址后,指示边界LCU判断模块执行。
本发明不编码深度0和1的LCU的划分标志,深度0仅编码划分标志为0的LCU地址或地址差,深度1仅编码相邻图像划分方式上存在的差异,则会有效降低深度0和1划分标志编码比特数,从而提高压缩编码效率。本发明方法在不影响图像质量和不增加编解码复杂度的情况下,降低了编码图像的编码比特数,提高了视频编码压缩的效率。
附图说明
图1为本发明实施例1的编码流程图;
图2为本发明实施例1的解码流程图;
图3为本发明实施例2的编码流程图;
图4为本发明实施例2的解码流程图;
图5为本发明实施例3的编码流程图;
图6为本发明实施例3的解码流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下举实施例并参照附图,对本发明进一步详细说明。
实施例1:
该实施例针对LCU深度0划分标志压缩效率不高的问题,对深度0仅编码划分标志为0的LCU地址或地址差,有效降低深度0划分标志编码比特数,提高压缩编码效率。为实施本技术方案,需要在片头语法(Slice header syntax)中增加两个语法元素split_root_counter和split_root_addr,其中,split_root_counter表示编码图像根层LCU划分标志为0的LCU个数,split_root_addr表示编码图像中深度0不进行四叉树分割的LCU地址差,同时需要对编码树语法(Coding tree syntax)进行修改。上述所提到的修改如表1和表2所示。
表1实施例1所述方法的Slice header syntax表
slice_header(){ | Descriptor |
first_tb_in_slice | ue(v) |
entropy_slice_flag | u(l) |
if(!entropy_slice_flag){ | |
slice_type | ue(v) |
pic_parameter_set_id | ue(v) |
frame_num | u(v) |
if(IdrPicFlag) | |
idr_pic_id | ue(v) |
if(pic_order_cnt_type==0) | |
pic_order_cnt_lsb/* | u(v) |
if(slice_type==P‖slice_type==B){ | |
num_ref_idx_active_override_flag | u(l) |
if(num_ref_idx_active_override_flag){ | |
num_ref_idx_l0_active_minus1 | ue(v) |
if(slice_type==B) | |
num_ref_idx_l1_active_minus1 | ue(v) |
} | |
} | |
ref_pic_list_modification() | |
ref_pic_list_combination() | |
if(nal_ref_idc!=0) | |
dec_ref_pic_marking() | |
if(entropy_coding_mode_flag && slice_type!=I) | |
cabac_init_idc | ue(v) |
slice_qp_delta | se(v) |
if(adaptive_loop_filter_enabled_flag) | |
alf_param() | |
if(deblocking_filter_control_present_flag){ | |
disable_deblocking_filter_idc | |
if(disable_deblocking_filter_idc!=1){ | |
slice_alpha_c0_offset_div2 | |
slice_beta_offset_div2 | |
} |
} | |
if(slice_type==B) | |
collocated_from_l0_flag | u(l) |
}else | |
if(entropy_coding_mode_flag && slice_type!=I) | |
cabac_init_idc | ue(v) |
if(slice_type==I){ | |
split_root_counter | ue(v) |
for(i=0;i<split_root_counter;i++){ | |
split_root_addr | ue(v) |
} | |
} | |
} |
表2实施例1所述方法的Coding tree syntax表
图1为该实施例编码端具体处理过程,步骤如下:
第一步:初始化当前编码图像第一个LCU地址CurrLcuAddr和深度0划分标志为0的LCU数目split_root_counter为0;
第二步:如果编码图像每LCU行或列包含非整数个LCU且当前编码LCU属于图像右边界LCU或下边界LCU,则转至第六步;否则,进入第三步。
如果编码图像每LCU行或列都为整数个LCU,例如64x64大小的情况,则可省略该步骤,直接执行第三步;
第三步:获取当前进行编码的LCU根层划分标志split_coding_unit_flag;
为简化表述,下文和符图中的深度0划分标志split_coding_unit_flag可用split_root_flag来表示;
第四步:如果split_root_flag为1,进入第六步;否则,进入第五步。
第五步:如果split_root_counter为0,则保存当前编码LCU地址并递增split_root_counter,然后执行第七步;否则,如果split_root_counter大于0,则保存当前编码LCU与前一个split_coding_unit_flag为0的LCU地址之差并递增split_root_counter,然后执行第七步;
第六步:根据LCU划分情况,递归编码除根层之外的其余各层划分标志split_coding_unit_flag;
第七步:如果当前编码LCU是图像最后一个LCU,进入第八步;否则,递增LCU地址,转至第二步,直至所有LCU均编码完成,进入第八步。
第八步:在Slice Header编码split_root_counter;
第九步:如果split_root_counter为0,则处理完毕;否则,对第1个split_root_flag为0的LCU在Slice Header编码其地址,对其他split_root_flag为0的LCU在SliceHeader编码其与前一个split_root_flag为0的LCU地址之差,处理完毕。
图2为该实施例解码端具体处理过程,具体步骤如下:
第一步:初始化当前解码图像所有LCU深度0划分标志split_coding_unit_flag为1,初始化第一个LCU地址CurrLcuAddr为0;
第二步:从Slice Header解析出当前解码图像的split_root_counter;
第三步:如果split_root_counter为0,则进入第五步;否则,从Slice Header解析出split_root_flag为0的第1个LCU地址和其他split_root_flag为0的LCU与其前一个split_root_flag为0的LCU地址之差,从而计算得到split_root_flag为0的各LCU地址;
第四步:将split_root_flag为0的各LCU根层划分标志split_coding_unit_flag设置为0;
第五步:如果解码图像每LCU行或列包含非整数个LCU且当前解码LCU属于图像右边界LCU或下边界LCU,则转至第七步;否则,进入第六步。
如果编码图像每LCU行或列都为整数个LCU,例如64x64大小的情况,则可省略该步骤,第四步完成后可直接执行第六步;
第六步:根据split_root_flag,设置当前解码LCU子分割深度;
第七步:解码除根层之外的其余各层划分标志split_coding_unit_flag;
第八步:如果当前解码LCU是图像最后一个LCU,则处理结束;否则,递增LCU地址,转至第五步,解码下一个LCU,直至当前解码图像中的LCU全部处理完毕。
实施例2:
该实施例针对LCU深度1划分标志的压缩效率不高的问题,对深度1仅编码相邻图像划分方式上存在的差异,能够有效降低深度1划分标志编码比特数,从而提高压缩编码效率。为实施本技术方案,需要对Coding tree syntax进行修改,增加语法元素diff_split_sum,该语法元素表示相邻帧共同位置LCU深度1划分标志之差,如表3所示。
表3实施例2所述方法的Coding tree syntax表
图3为该实施例编码端具体处理过程,具体步骤如下:
第一步:初始化当前编码图像第一个LCU地址CurrLcuAddr为0;
第二步:如果编码图像每LCU行或列包含非整数个LCU且当前编码LCU属于图像右边界LCU或下边界LCU,则编码除深度0外的各深度划分标志,并转至第七步;否则,进入第三步。
如果编码图像每LCU行或列都为整数个LCU,例如64x64大小的情况,则可省略该步骤,直接执行第三步;
第三步:获取第CurrLcuAddr个LCU深度0划分标志uiCurrSplitFlag并编码该标志;
第四步:如果深度0划分标志uiCurrSplitFlag为1,则获取第CurrLcuAddr个LCU深度1划分标志uiSplitFlag0Dep1、uiSplitFlag1Dep1、uiSplitFlag2Dep1和uiSplitFlag3Dep1,计算出深度1划分标志之和uiSumSplitFlagDep1,进入第五步;否则,将当前LCU深度1划分标志之和uiSumPrePicSplit[CurrLcuAddr]设置为某预设值,转至第七步;
第五步:如果当前编码图像是序列第1个编码图像,则编码深度1划分标志,并将深度1划分标志之和uiSumSplitFlagDep1赋给uiSumPrePicSplit[CurrLcuAddr];否则,计算当前编码LCU与其前一帧紧邻图像共相同位置LCU深度1划分标志之和的差uiDiffSplitSum,并编码uiDiffSplitSum。
第六步:根据当前编码LCU划分情况,编码其他深度划分标志;
第七步:如果当前编码LCU是图像最后一个LCU,则处理完毕;否则,递增LCU地址,转至第二步,直至所有LCU均编码完成。
图4该实施例解码端具体处理过程,具体步骤如下:
第一步:初始化当前解码图像第一个LCU地址CurrLcuAddr为0;
第二步:如果解码图像每LCU行或列包含非整数个LCU且当前解码LCU属于图像右边界LCU或下边界LCU,则解码除深度0外的各深度划分标志,并转至第七步;否则,进入第三步。
如果编码图像每LCU行或列都为整数个LCU,例如64x64大小的情况,则可省略该步骤,直接执行第三步;
第三步:解码深度0划分标志uiCurrSplitFlag;
第四步:如果当前解码图像是序列第1个解码图像,则进入第五步;否则,解码当前LCU与其前一帧紧邻图像共同位置LCU的uiSumSplitFlagDep1之差uiDiffSplitSum,计算出当前解码LCU深度1划分标志之和uiSumSplitFlagDep1,并将uiSumSplitFlagDep1赋给uiSumPrePicSplit[CurrLcuAddr],转至第六步。
第五步:如果当前解码LCU深度0划分标志为0,则将前一个图像共同位置LCU深度1划分标志之和uiSumPrePicSplit[CurrLcuAddr]设置为某个预设值,转至第七步;否则,解码LCU深度1划分标志之和uiSumSplitFlagDep1并保存到uiSumPrePicSplit[CurrLcuAddr],然后执行第六步。
第六步:解码除深度0和深度1外的其他各深度划分标志;
第七步:如果当前解码LCU是图像最后一个LCU,则处理结束;否则,递增LCU地址,转至第二步,解码下一个LCU,直至当前解码图像中的LCU全部处理完毕。
实施例3:
该实施例针对LCU深度0和深度1划分标志压缩效率不高的问题,对深度0仅编码划分标志为0的LCU地址或地址差,对深度1仅编码相邻图像划分方式上存在的差异,能够有效降低深度0和1划分标志编码比特数,从而提高压缩编码效率。为实施本技术方案,需要在Slice header syntax增加语法元素split_root_counter和split_root_addr,其中,前者表示编码图像不进行四叉树分割的LCU个数,后者表示编码图像中深度0不进行四叉树分割的LCU地址差,同时需要在Coding tree syntax增加语法元素diff_split_sum,该语法元素表示相邻帧共同位置LCU深度1划分标志之差,上述所提到的的修改如表4和表5所示。
表4实施例3所述方法的Slice header syntax表
slice_header(){ | Deseriptor |
first_tb_in_slice | ue(v) |
entropy_slice_flag | u(l) |
if(!entropy_slice_flag){ | |
slice_type | ue(v) |
pic_parameter_set_id | ue(v) |
frame_num | u(v) |
if(IdrPicFlag) | |
idr_pic_id | ue(v) |
if(pic_order_cnt_type==0) | |
pic_order_cnt_lsb/* | u(v) |
if(slice_type==P‖slice_type==B){ | |
num_ref_idx_active_overtide_flag | u(l) |
if(num_ref_idx_active_override_flag){ | |
num_ref_idx_l0_active_minus1 | ue(v) |
if(slice_type==B) | |
num_ref_idx_l1_active_minus1 | ue(v) |
} | |
} | |
ref_pic_list_modification() | |
ref_pic_list_combination() | |
if(nal_ref_idc!=0) | |
dec_ref_pic_marking() | |
if(entropy_coding_mode_flag && slice_type!=I) | |
cabac_init_idc | ue(v) |
slice_qp_delta | se(v) |
if(adaptive_loop_filter_enabled_flag) | |
alf_param() | |
if(deblocking_filter_control_present_flag){ | |
disable_deblocking_filter_idc | |
if(disable_deblocking_filter_idc!=1){ | |
slice_alpha_c0_offset_div2 | |
slice_beta_offset_div2 | |
} |
} | |
if(slice_type==B) | |
collocated_from_l0_flag | u(l) |
}else | |
if(entropy_coding_mode_flag && slice_type!=I) | |
cabac_init_idc | ue(v) |
if(slice_type==I){ | |
split_root_counter | ue(v) |
for(i=0;i<split_root_counter;i++){ | |
split_root_addr | ue(v) |
} | |
} | |
} |
表5实施例3所述方法的Coding tree syntax表
图5为该实施例编码端具体处理过程,具体步骤如下:
第一步:初始化当前编码图像第一个LCU地址CurrLcuAddr和深度0划分标志为0的LCU数目split_root_counter为0
第二步:如果编码图像每LCU行或列包含非整数个LCU且当前编码LCU属于图像右边界LCU或下边界LCU,则转至第十步;否则,进入第三步。
如果编码图像每LCU行或列都为整数个LCU,例如64x64大小的情况,则可省略该步骤,直接执行第三步;
第三步:获取当前编码LCU深度0划分标志uiCurrSplitFlag;
第四步:如果uiCurrSplitFlag为1,转至第七步;否则,进入第五步。
第五步:如果split_root_counter为0,则保存当前编码LCU地址并递增split_root_counter;否则,保存当前编码LCU与前一个深度0划分标志为0的LCU地址之差并递增split_root_counter。
第六步:将当前LCU深度0四叉树子分割划分标志之和(即当前LCU深度1划分标志之和)设置为某个预设值,在计算下一帧共同位置划分标志时,该值可作为参考,然后执行第十步;
第七步:获取当前编码LCU深度1划分标志,计算出当前编码LCU深度1划分标志之和uiSumSplitFlagDep1并保存到uiSumPrePicSplit[CurrLcuAddr];
第八步:如果当前编码图像是序列第1个编码图像,则编码深度1划分标志;否则,计算当前编码LCU与其前一帧紧邻图像相同位置LCU深度1划分标志之差uiDiffSplitSum并编码uiDiffSplitSum。
第九步:根据当前编码LCU划分情况,编码其他深度划分标志;
第十步:如果当前编码LCU是图像最后一个LCU,进入第十一步;否则,递增LCU地址,转至第二步,直至所有LCU均编码完成,进入第十一步。
第十一步:在Slice Header编码split_root_counter;
第十二步:如果split_root_counter为0,则处理完毕;否则,对第1个深度0划分标志为0的LCU在Slice Header编码其地址,对其他深度0划分标志为0的LCU在Slice Header编码其与前一个深度0划分标志为0的LCU地址之差,处理完毕。
图6为该实施例解码端具体处理过程,具体步骤如下:
第一步:初始化解码图像第一个LCU地址和深度0划分标志为0的LCU数目split_root_counter为0,初始化图像所有LCU深度0划分标志为1;
第二步:从Slice Header解析出当前解码图像的split_root_counter;
第三步:如果split_root_counter大于0,则从Slice Header解析出深度0划分标志为0的第1个LCU地址和其他深度0划分标志为0的LCU与其前一个深度0划分标志为0的LCU地址之差,进入第四步;否则,进入第五步;
第四步:重新设置解码图像各LCU深度0划分标志;
第五步:如果解码图像每LCU行或列包含非整数个LCU且当前解码LCU属于图像右边界LCU或下边界LCU,则解码除深度0外的其他深度划分标志并转至第十步;否则,进入第六步。
如果编码图像每LCU行或列都为整数个LCU,例如64x64大小的情况,则可省略该步骤,第四步完成后可直接执行第六步;
第六步:如果当前解码LCU深度0划分标志为0,则将uiSumPrePicSplit[CurrLcuAddr]设置为某个值,转至第十步;否则,进入第七步;
第七步:如果当前解码图像是序列第1个解码图像,则进入第八步;否则,解码uiDiffSplitSum,计算SumSplitFlagDep1并保存至uiSumPrePicSplit[CurrLcuAddr],转至第九步。
第八步:解码深度0四叉树子分割的划分标志即解码深度1划分标志,并将子分割划分标志之和SumSplitFlagDep1保存至uiSumPrePicSplit[CurrLcuAddr];
第九步:解码除深度0和深度1外的其他各深度划分标志;
第十步:如果当前解码LCU是图像最后一个LCU,则处理结束;否则,递增LCU地址,转至第五步,解码下一个LCU,直至当前解码图像中的LCU全部处理完毕。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
Claims (8)
1.一种帧内划分标志的编码方法,其特征在于,该方法包括:
A、初始化当前编码图像第一个最大编码单元LCU地址CurrLcuAddr和根层划分标志为0的LCU数目split_root_counter为0;
B、获取当前编码LCU根层划分标志;
C、如果当前编码LCU根层划分标志为1,则执行步骤E,否则执行步骤D;
D、如果split_root_counter为0,则保存当前编码LCU地址并递增split_root_counter,然后执行步骤F;否则,如果split_root_counter大于0,则保存当前编码LCU与前一个根层划分标志为0的LCU地址之差并递增split_root_counter,然后执行步骤F;
E、根据LCU划分情况,递归编码除根层之外的其余各层划分标志;
F、如果当前编码LCU是图像最后一个LCU,则执行步骤G,否则,递增LCU地址CurrLcuAddr后,执行步骤B;
G、在片头Slice Header编码split_root_counter;
H、如果split_root_counter为0,则处理完毕;否则,对第1个根层划分标志为0的LCU在Slice Header编码其地址,对其他根层划分标志为0的LCU在Slice Header编码其与前一个根层划分标志为0的LCU的地址之差,处理完毕。
2.根据权利要求1所述的方法,其特征在于,在步骤A和步骤B之间还包括如下判断步骤:
AB1、如果编码图像每LCU行包括非整数个LCU且当前编码LCU属于图像右边界LCU或编码图像每LCU列包括非整数个LCU且当前编码LCU属于下边界LCU,则执行步骤E,否则执行步骤B;
相应地,步骤F中,如果当前编码LCU不是图像最后一个LCU,则递增LCU地址后,执行步骤AB1。
3.根据权利要求2所述的方法,其特征在于,在步骤C和步骤E之间,即如果当前编码LCU根层划分标志为1时,在执行步骤E之前还包括下述步骤CE1和CE2:
CE1、获取当前编码LCU深度1的四个编码单元CU的划分标志SplitFlag0Dep1、SplitFlag1Dep1、SplitFlag2Dep1和SplitFlag3Dep1,计算出当前编码LCU深度1划分标志之和uiSumSplitFlagDep1;
CE2、如果当前编码图像是序列第1个编码图像,则编码深度1划分标志,并将uiSumSplitFlagDep1保存到uiSumPrePicSplit[CurrLcuAddr];否则,计算当前编码LCU与其前一帧紧邻图像相同位置LCU深度1划分标志之和的差uiDiffSplitSum并编码uiDiffSplitSum;
此外,在步骤D和步骤F之间还包括将当前编码LCU深度1划分标志之和uiSumSplitFlagDep1设置为预设值的步骤。
4.一种帧内划分标志的解码方法,其特征在于,该方法包括:
A、初始化当前解码图像所有LCU深度0划分标志为1,初始化第一个LCU地址CurrLcuAddr为0;
B、从Slice Header解析出当前解码图像的根层划分标志为0的LCU数目split_root_counter;
C、如果split_root_counter为0,则进入步骤E;否则,从Slice Header解析出深度0划分标志为0的第1个LCU地址和其他深度0划分标志为0的LCU与其前一个深度0划分标志为0的LCU地址之差,从而计算得到深度0划分标志为0的各LCU地址;
D、将深度0划分标志为0的各LCU根层划分标志设置为0;
E、如果解码图像每LCU行或列包含非整数个LCU且当前解码LCU属于图像右边界LCU或下边界LCU,执行步骤F;否则,根据LCU根层划分标志,设置当前解码LCU子分割深度,然后执行步骤F;
F、解码除深度0之外的其余各层划分标志,然后执行步骤G;
G、如果当前解码LCU是图像最后一个LCU,则处理结束;否则,递增LCU地址,转至步骤E,解码下一个LCU,直至当前解码图像中的LCU全部处理完毕。
5.根据权利要求4所述的方法,其特征在于,步骤F包括下述步骤FG1和FG2,即已经确定了当前解码LCU根层划分标志取值时,根据根层划分标志取值情况在执行步骤G之前还包括下述步骤FG1和FG2:
FG1、如果当前解码LCU深度0划分标志为1且当前解码LCU属于第1个解码图像,则解码深度1划分标志并将深度1划分标志之和保存到uiSumPrePicSplit[CurrLcuAddr],转至步骤FG2;否则,如果当前解码LCU深度0划分标志为1且当前解码LCU不属于第1个解码图像,则解码当前LCU与其前一帧紧邻图像相同位置LCU深度1划分标志之和的差uiDiffSplitSum,计算当前解码LCU深度1划分标志及划分标志之和,保存深度1划分标志之和到uiSumPrePicSplit[CurrLcuAddr],转至步骤FG2;否则,如果当前解码LCU深度0划分标志为0,则将当前解码LCU深度1划分标志之和uiSumSplitFlagDep1设置为预设值,转至步骤G;
FG2、解码除深度0和1外的其他各深度划分标志,然后执行步骤G。
6.一种帧内划分标志的编码装置,其特征在于,该装置包括:
初始化模块,用于初始化当前编码图像第一个LCU地址CurrLcuAddr和根层划分标志为0的LCU数目split_root_counter为0;
边界LCU判断模块,用于判断是否解码图像每LCU行或列包含非整数个LCU且当前解码LCU属于图像右边界LCU或下边界LCU,若是则指示其它层划分标志编码模块执行,否则指示根层划分标志判断模块执行;
根层划分标志判断模块,用于获取当前编码LCU根层划分标志,并判断当前编码LCU根层划分标志是否为1,若为1则指示其它层划分标志编码模块执行,否则指示计数处理模块执行;
计数处理模块,用于在当前编码LCU根层划分标志为0时,保存当前编码LCU地址并递增split_root_counter,在当前编码LCU根层划分标志大于0时,保存当前编码LCU与前一个根层划分标志为0的LCU地址之差并递增split_root_counter,然后指示最后LCU判断模块执行;
其它层划分标志编码模块,用于在当前编码LCU根层划分标志为1时,根据LCU划分情况,递归编码除根层之外的其余各层划分标志,然后指示最后LCU判断模块执行;
最后LCU判断模块,用于判断当前编码LCU是否为图像最后一个LCU,若是指示片头编码模块执行,否则指示LCU地址递增模块执行;
LCU地址递增模块,用于递增LCU地址CurrLcuAddr后,指示边界LCU判断模块执行;
片头编码模块,用于在片头Slice Header编码split_root_counter,然后指示根层划分标志编码模块执行;
根层划分标志编码模块,用于在split_root_counter为0时,对第1个根层划分标志为0的LCU在Slice Header编码其地址,对其他根层划分标志为0的LCU在Slice Header编码其与前一个根层划分标志为0的LCU的地址之差。
7.根据权利要求6所述的装置,其特征在于,所述装置在根层划分标志判断模块和其它层划分标志编码模块之间还包括:
深度1划分标志之和计算模块,用于当前编码LCU根层划分标志为1时,获取当前编码LCU深度1的四个编码单元CU的划分标志SplitFlag0Dep1、SplitFlag1Dep1、SplitFlag2Dep1和SplitFlag3Dep1,计算出当前编码LCU深度1划分标志之和uiSumSplitFlagDep1,然后指示深度1划分标志编码模块执行;
深度1划分标志编码模块,用于在当前编码图像是序列第1个编码图像时,编码深度1划分标志,并将uiSumSplitFlagDep1保存到uiSumPrePicSplit[CurrLcuAddr];在当前编码图像不是序列第1个编码图像时,计算当前编码LCU与其前一帧紧邻图像相同位置LCU深度1划分标志之和的差uiDiffSplitSum并编码uiDiffSplitSum;然后指示其它层划分标志编码模块执行;
所述装置在计数处理模块和最后LCU判断模块之间,还包括:
深度1划分标志设置模块,用于将当前编码LCU深度1划分标志之和uiSumSplitFlagDep1设置为预设值。
8.一种帧内划分标志的解码装置,其特征在于,该装置包括:
初始化模块,用于初始化当前解码图像所有LCU深度0划分标志为1,初始化第一个LCU地址CurrLcuAddr为0;
片头解码模块,用于从Slice Header解析出当前解码图像的根层划分标志为0的LCU数目split_root_counter;
根层划分标志解码模块,如果split_root_counter为0,则指示边界LCU判断模块执行;否则,从Slice Header解析出深度0划分标志为0的第1个LCU地址和其他深度0划分标志为0的LCU与其前一个深度0划分标志为0的LCU地址之差,从而计算得到深度0划分标志为0的各LCU地址;
根层划分标志设置模块,将深度0划分标志为0的各LCU根层划分标志设置为0;
边界LCU判断模块,如果解码图像每LCU行或列包含非整数个LCU且当前解码LCU属于图像右边界LCU或下边界LCU,则解码除深度0之外的其余各层划分标志;否则,指示深度1划分标志解码模块执行;
深度1划分标志解码模块,如果当前解码LCU深度0划分标志为1且当前解码LCU属于第1个解码图像,则解码深度1划分标志并将深度1划分标志之和保存到uiSumPrePicSplit[CurrLcuAddr],然后指示其它层划分标志解码模块执行;否则,如果当前解码LCU深度0划分标志为1且当前解码LCU不属于第1个解码图像,则解码当前LCU与其前一帧紧邻图像相同位置LCU深度1划分标志之和的差uiDiffSplitSum,计算当前解码LCU深度1划分标志及划分标志之和,保存深度1划分标志之和到uiSumPrePicSplit[CurrLcuAddr],然后指示其它层划分标志解码模块执行;否则,如果当前解码LCU深度0划分标志为0,则将当前解码LCU深度1划分标志之和uiSumSplitFlagDep1设置为预设值,然后指示最后LCU判断模块执行;
其它层划分标志解码模块,用于解码除深度0和1外的其他各深度划分标志,然后指示最后LCU判断模块执行;
最后LCU判断模块,如果当前解码LCU是图像最后一个LCU,则处理结束;否则,递增LCU地址后,指示边界LCU判断模块执行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110363936.7A CN103118250B (zh) | 2011-11-16 | 2011-11-16 | 一种帧内划分标志的编解码方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110363936.7A CN103118250B (zh) | 2011-11-16 | 2011-11-16 | 一种帧内划分标志的编解码方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103118250A CN103118250A (zh) | 2013-05-22 |
CN103118250B true CN103118250B (zh) | 2017-09-26 |
Family
ID=48416510
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110363936.7A Expired - Fee Related CN103118250B (zh) | 2011-11-16 | 2011-11-16 | 一种帧内划分标志的编解码方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103118250B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016153146A1 (ko) * | 2015-03-23 | 2016-09-29 | 엘지전자(주) | 인트라 예측 모드 기반 영상 처리 방법 및 이를 위한 장치 |
CN107241597B (zh) * | 2017-05-05 | 2019-10-15 | 中国人民武装警察部队工程大学 | 一种结合四叉树自适应编码的可逆信息隐藏方法 |
CN111586416B (zh) * | 2020-06-02 | 2024-07-12 | 浙江大华技术股份有限公司 | 视频编码方法、装置、编码器及存储装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1513349A2 (en) * | 2003-09-07 | 2005-03-09 | Microsoft Corporation | Bitstream-controlled post-processing video filtering |
CN101822064A (zh) * | 2007-10-16 | 2010-09-01 | 汤姆逊许可公司 | 用于几何分割超级块的视频编码和解码的方法和设备 |
WO2011121843A1 (ja) * | 2010-03-30 | 2011-10-06 | 株式会社 東芝 | 画像符号化及び画像復号化方法 |
-
2011
- 2011-11-16 CN CN201110363936.7A patent/CN103118250B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1513349A2 (en) * | 2003-09-07 | 2005-03-09 | Microsoft Corporation | Bitstream-controlled post-processing video filtering |
CN101822064A (zh) * | 2007-10-16 | 2010-09-01 | 汤姆逊许可公司 | 用于几何分割超级块的视频编码和解码的方法和设备 |
WO2011121843A1 (ja) * | 2010-03-30 | 2011-10-06 | 株式会社 東芝 | 画像符号化及び画像復号化方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103118250A (zh) | 2013-05-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101752615B1 (ko) | 인트라 모드 코딩을 위한 방법 및 장치 | |
TWI663873B (zh) | 使用靈活型四叉樹與二叉樹塊分割的視訊編解碼方法及裝置 | |
CN104185990B (zh) | 视频译码中的系数的译码 | |
KR102515601B1 (ko) | 영상 부호화 또는 복호화하기 위한 장치 및 방법 | |
CN104509112B (zh) | 视频解码方法和使用其的装置 | |
CN106464894B (zh) | 视频处理方法及装置 | |
ES2568493T3 (es) | Indicador de estructura de mosaico fija indicando la posibilidad de un procesamiento paralelo para una secuencia de video comprimido | |
KR102590840B1 (ko) | 영상 부호화 또는 복호화하기 위한 장치 및 방법 | |
ES2641443T3 (es) | Método y aparato para filtración de bucle a través de límites de corte o pieza | |
CN105247863B (zh) | 三维或多视图视频编码或解码的方法 | |
US20190387222A1 (en) | Method and apparatus for intra chroma coding in image and video coding | |
EP3550836A1 (en) | Decoding method and apparatus | |
CN104469365B (zh) | 一种视频编码装置和方法 | |
EP4398579A2 (en) | Method for decoding video and encoding video, computer readable storage medium and method for transmitting data | |
KR20180004249A (ko) | 고효율 비디오 코딩(hevc) 스크린 콘텐츠 코딩(scc) 확장을 위한 어드밴스드 코딩 기법 | |
EP3007442A1 (en) | Method of pulse-code modulation and palette coding for video coding | |
WO2010039731A3 (en) | Video coding with large macroblocks | |
WO2012058909A1 (en) | Appraatus and method for high efficiency video coding using flexible slice structure | |
WO2015055134A1 (zh) | 视频编解码中的块分割方式确定方法及相关装置 | |
CN103051892B (zh) | 内嵌式回路滤波方法以及内嵌式回路滤波装置 | |
GB201206571D0 (en) | Method and device for providing adaptation parameters to a decoder | |
CN103118250B (zh) | 一种帧内划分标志的编解码方法及装置 | |
CN103096092A (zh) | 基于颜色空间变换进行编解码误差修正的方法和系统 | |
CN103873872B (zh) | 参考图像管理方法及装置 | |
EP4277280A2 (en) | Reducing redundancy between tree types |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20170926 Termination date: 20201116 |
|
CF01 | Termination of patent right due to non-payment of annual fee |