H265HEVC编解码系列(1):图像分割(Slice、Tile、CTU)

更新时间:2023-05-12 08:51:31 阅读: 评论:0

H265HEVC编解码系列(1):图像分割(Slice、Tile、CTU)
H265/HEVC编解码系列(1):图像分割(Slice、Tile、CTU)
⼀、Slice 和 Slice Segment
  H265和H264类似,图⽚也采⽤了slice的分割⽅法,⼀帧图⽚可以被分割成⼀个或者多个slice,每⼀个slice都可以独⽴解码,不依赖于同张图⽚的其他slice。那也就意味着在进⾏帧内和帧间预测时不能越过slice的边界,但是在解码最后环路滤波时,允许滤波器跨越slice边界进⾏滤波。
  采⽤slice分割主要有以下好处:
  第⼀,鲁棒性良好,把⼀张图⽚分成⼀个个独⽴的slice,在解码时遇到错误,也可以实现再同步,减少错误蔓延,⽽代价仅仅是失去了⼀个slice。
  第⼆,匹配MTU(Maximum Transmission Unit)⼤⼩,这涉及到⽹络层的概念,⽹络上发包时,每个包的⼤⼩受到限制,把图像分割成slice可以减⼩打包的⼤⼩。
  第三,并⾏处理,由于每个slice相互独⽴的缘故,编码、解码以⾄环路滤波均可以并⾏处理,加快处理速度,提⾼效率。
  如下图,为⼀张图⽚分割后的结果,这张图⽚被分割成两个slice,图中⿊⾊实线(即Slice Boundary)为slice边界,可以看到实线下⽅为⼀块完整的区域,⽽实线上⽅⼜被分成了3块⼩区域,以虚线分隔。这每⼀块⼩区域称为⽚段SS(Slice Segment),即slice⼜可以分为SS,每个slice的第⼀块SS称为独⽴SS(图中蓝⾊部分),后⾯的均为依赖SS(图中未涂⾊部分);独⽴SS是指它所涉及的句法元素可以由⾃⾝确定,依赖SS是指它所涉及的某些句法元素由已解码的独⽴SS推导得到,依赖SS可以共享独⽴SS携带的⼀些信息。预测的过程不可以跨越独⽴SS的边界,但是可以跨越依赖SS的边界,⼀个slice中的SS可以互相参考。
  下⾯的图中,还可以看到标有数字的⼩⽅格,每个SS由这⼀个个⼩⽅格组成,这每⼀个⼩⽅格称为⼀个树形编码单元CTU(Coding Tree Unit),这类似于H264中的宏块。有些⽂章⾥把这些⼩⽅格叫做树形编码块CTB(Coding Tree Block),其实差不多。实际上,⼀个CTU是由⼀个亮度(luma)CTB和相应⾊度(chroma)CTB构成。
⼆、Tile单元
  H265与H264不同之处在于引⼊了Tile的概念,PPS(Picture Parameter Set)中tiles_enabled_flag参数指定了是否使⽤Tile格式,num_tile_columns_minus1、num_tile_rows_ minus1、uniform_spacing_flag、column_width_minus1、row_
height_minus1规定了Tile的结构⼤⼩(这些参数以后再说)。Tile和slice⼀样也是可以单独解码,不依赖其他Tile。
  如下图,⼀张图⽚被分为了九个区域,但是这些区域必须是矩形,⽽slice是条带状。可以看到,Tile是由CTU直接组成。相⽐于slice的分割⽅法,Tile的分割⽅法使得编码效率更⾼,因为条带状的分割⽅式使得像素之间的关联程度⼤⼤下降,编解码的效率⼤打折扣。同
时,slice的传输需要加上⼀个slice header,当码率较⼤时,header的开销⽆法被忽略,⽽Tile不需要header,进⼀步提⾼了编码效率。
  细⼼⼀点可以注意到,slice中的CTU是以光栅扫描(raster scan)的形式排布的,即从左到右、从上到下;⽽Tile在划分为矩形块后,不仅每个⼩块内以光栅扫描⽅式排布,⽽且每个矩形块也是按光栅扫描⽅式排布。这种扫描⽅式可以减少运动估计(Motion Estimation)时所需⾏buffer⼤⼩。如下图所⽰,虚线矩形框代表的时运动估计的范围,涂⿊的⽅格为⼀⾏参与编码的CTU,若⽤公式表达⼀般raster scan和Tile的扫描⽅式所占⽤的运动估计buffer:
RSBuffer = PicW * (2 * SRy + CtuHeight)
TileBuffer = (TileW + 2 * SRx) * (2 * SRy + CtuHeight)
  PicW是图像的宽度,SRy是CTU上下延伸的范围(图中绿⾊双向箭头),SRx是CTU左右延伸的范围(图中⿊⾊双向箭
头),CtuHeight为每个CTU的⾼度。能看到,当PicW⼤于(TileW + 2 * SRx)时,Tile在做运动估计时将占⽤更⼩的内存。
  如下图所⽰,图⽚中使⽤了Tile和slice结合的分割⽅法。左图和右图均被分为了两个Tile,中间竖直虚线为分界线。左图中只划分了⼀个slice,⼀个独⽴SS和四个依赖SS(蓝⾊部分为独⽴SS,未涂⾊部分为依赖SS);⽽右图划分了3个slice,每个slice包含⼀个独⽴SS和⼀个依赖SS。这两种划分⽅式并不是随意划分,⽽是需要遵循⼀定规则:
  第⼀,⼀个slice/SS中的所有CTU属于同⼀个Tile;
  第⼆,⼀个Tile中的所有CTU属于同⼀个slice/SS。
三、CTU、CU
  之前传统的编码(例如H264)均是基于宏块实现的,对于4:2:0的采样格式,每个宏块包含⼀个16x16⼤⼩的⾊度块,以及⼀个8x8⼤⼩的亮度块。⽽H265提出了CTU的概念,它的尺⼨可以由编码器指定,在图像细节较多的地⽅可以采⽤较⼩的编码块,在平坦的地⽅可以选择较⼤的编码块。除了CTU,H265还提出了CU(Coding Unit)、PU(Prediction Unit)、TU(Transform Unit),这些后⾯再说。
  上⾯说了⼀个CTU由⼀个亮度CTB和相应⾊度CTB构成,因为采样的格式不同,亮度CTB相同的情况下,⾊度CTB的⼤⼩会不⼀样,所以我们只需要关注亮度CTB⼤⼩即可。⼀个CTU所含亮度CTB的⼤⼩为NxN,N取值为16、32、64。下图a即是16x16⼤⼩的CTU,b 图是64x64⼤⼩的CTU,可以看到,a图CTU所包含的区域很⼩,⽽b图CTU包含的区域⼜很⼤,所以在H265中,⼤的区域可以以四叉树
的形式继续往下分割。
  CTU再往下⼀级叫做CU,和它的⽼⼤CTU⼀样,CU也是由⼀个亮度CB(Coding Block)和相应⾊度CB构成。同样道理,CTU可以继续分割,CTB也可以继续往下分割为更⼩的CB,上⾯讲到亮度CTB最⼩为16x16,⽽分割成的CB最⼩为8x8。先看⼀张直观的图,很直
观,直观到应该不⽤我过多赘述。
错误的请指正,共同学习。
参考
[1] [新⼀代⾼效视频编码H.265/HEVC原理、标准与实现]
[2] [High Efficiency Video Coding(Hevc) Algorithms and Architectures]
[3] [An Overview of Tiles in HEVC, Kiran Misra, Member, IEEE]

本文发布于:2023-05-12 08:51:31,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/887213.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:编码   分割   解码
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图