环路滤波(五):SAO

样点自适应补偿(Sample Adaptive Offset,SAO)用于消除振铃效应。振铃效应是由于高频交流系数的量化失真,解码后会在边缘周围产生波纹的现象,变换块尺寸越大振铃效应越明显。如下图所示,虚线是原始像素值,实线是重构像素值。

 

造成振铃效应的根本原因是高频信息的丢失。SAO的基本原理就是对重构曲线中的波峰像素加上负值进行补偿,波谷像素加上正值进行补充。

SAO以CTB为基本单位,包括两大类补偿形式:边界补偿(Edge Offset,EO)和边带补偿(Band Offset,BO),此外还引入了参数融合技术。

边界补偿

边界补偿技术是通过将当前像素和相邻像素进行比较然后归类,然后对同类像素补偿相同数值。为了均衡复杂度和编码效率,EO采用1维3像素分类模式。

根据选取的像素位置差异,EO有4种模式:水平方向EO_0、垂直方向EO_1、135°方向EO_2、45°方向EO_3。如下图所示,c是当前像素,ab是相邻像素。

 

 

4类的形状如下图所示:

 

边界补偿技术首先根据上面的规则将CTB中所有像素分为5类,然后对种类1、2、3、4的像素进行补偿,即增减一定数值,对种类0的像素不进行补偿。不同种类像素补偿值可以不同,但同一类像素补偿值必须相同。

实验表明大部分补偿值的符号与种类相匹配,所以可以根据种类对补偿值进行限制:种类1、2补偿值大于等于0,种类3、4补偿值小于等于0。所以码流中只需传输补偿值的绝对值,解码器可以根据像素所属类别判断符号。

边带补偿

边带补偿根据像素值大小进行分类,它将像素分为32个等长的边带。例如8比特像素,像素值范围0~255,则每个边带包含256/32=8个像素值,即像素值属于[8k,8k+7]范围属于第k个边带,k=0...31。同一边带使用相同补偿值。

一般情况下,在一定区域内像素值波动范围很小,一个CTB中大多数像素属于少数几个边带。H.265/HEVC规定一个CTB只能选择4条连续的边带,且只对属于这4条边带的像素进行补偿。可以通过率失真优化决定选择哪4条边带,然后将最小边带号及4个补偿值传到解码端。

 

参数融合

参数融合(Merge)是指对于一个CTB,其SAO参数可以直接使用相邻块的SAO参数,这时只需标识采用了哪个相邻块的SAO参数即可。

 

如上图所示,当对C进行SAO参数决策时,A和B的SAO参数已经确定。此时C的SAO参数有以下3种选择:

  1. 直接使用A块的参数。

  2. 直接使用B块的参数。

  3. 通过分析自身像素的特点,选择不同于A和B的参数。

enum SAOModeMergeTypes
{
  SAO_MERGE_LEFT =0,
  SAO_MERGE_ABOVE,
  NUM_SAO_MERGE_TYPES
};

当一个CTU使用参数融合时,其亮度和色度分量必须同时使用同一个相邻块的对应参数。否则,采用非参数融合技术,亮度和色度可以独立的根据自身像素特点选择划分模式和补偿值,此时两个色度分量共用相同划分模式。

语法结构

H.265/HEVC中规定的SAO的语法结构如下图所示:

感兴趣的请关注微信公众号Video Coding

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章