HEVC标准中的SAO以CTB为基本单位,这里的CTB是亮度和色度的结合体,通过选择一个合适的分类器将重建像素划分类别,然后对不同类别像素使用不同的补偿值。SAO包括两大类补偿形式,分别为边界补偿 edge offset EO 和边带补偿 Band offset BO。
SAO技术
1.边界补偿 EO
EO通过比较当前像素和相邻像素之间的大小关系对重建像素进行分类,然后对每一类的像素补偿相同数值。HEVC中EO选择了一维三像素分类模式。一维指的应该是同一图像,三像素为使用两个参考像素对当前像素进行分类;
EO的四种模式只是选取参考像素的不同,后续的分类方法上并无区别,但是对分类的结果是有影响的,如何选择模式?那么就是采用率失真的方法。
若不属于上图4种情况,那么当前像素归类为种类0。EO对种类1~4的重建像素进行补充,对种类0的重建像素不进行补偿。不同种的像素的offset可能不同,但同种像素的offset必定一样。
2.边带补偿 BO
BO根据像素强度值进行分类,BO将像素范围等分成32条边带。例如对bitdepth == 8的像素值,像素值大小为0~255,每条边带则包含8个像素值。然后则根据边带进行offset,即同一边带用一个offset值。
不仅如此,HEVC规定一个CTB只能用四条连续的边带,属于4条内的边带按边带进行补偿,不属于4条边带内的像素则不进行像素补偿。如何选择合适的边带,则用万金油率失真确定,传的时候只用传最小边带号和4个补偿值给解码端。
3.SAO参数融合
参数融合Merge是指对于一个CTB块,其SAO参数也就是补偿的各种参数直接使用相邻块的SAO参数,且只使用左侧和上侧相邻CTB块的SAO参数。
或者不使用参数融合的方法,按照自己的像素特点产生SAO参数。
SAO的实现方法
1.快速SAO模式识别
快速SAO模式识别则是针对BO和EO的,EO有4个模式,BO则要选择最好的四条边带,Merge则是要选择合适的参考CTB或者是非Merge,但如何选择模式以率失真代价为准:
2.SAO在HM10.0中的实现过程
SAO过程的重点是利用率失真代价选择最优的SAO参数。
在HM中的流程如下:
(1)信息统计
(2)亮度CTB的SAO模式
首先分别尝试EO和BO,然后再选择出最优的m值(offset),然后再以最优m值计算率失真代价。
还要计算不补偿模式的率失真代价,以及left和upmerge下的率失真代价。
(3)色度CTB的SAO模式
两个色度块共用相同的划分模式,其余步骤与亮度相同。
(4)CTU的最优SAO模式
CTB有亮度CTB和色度CTB,选择最优SAO模式时先划分为merge和非merge,merge则有up和left的率失真代价,非merge则包括BO和EO。
(5)CTU的SAO滤波
采用最优的SAO参数对CTU进行滤波。
(6)EO模式
如上文所述,EO模式下有两个参数要进行选择,首先进行模式选择(EO_0,EO_1,EO_2,EO_3),在每个模式下,又要对该模式的4个补偿值(m0_1,m0_2,mo_3,mo3_4,第0类像素不用补偿)进行选择。
(m0_1)''代表的是初始补偿值,n0_1代表的是EO_0模式下的属于种类1的像素个数,E则为插值和,然后根据算出的初始补偿值再进一步进行计算,特别注意的是:种类1和种类2的补偿值必须大于等于0,若算出来的m<0,则令m=0;种类3和种类4的补偿值必须小于等于0,同理。
(7)BO模式
BO模式的确定过程:先选择出0~31条边带的最优m值,再根据率失真代价选择出连续的四条band
可以看到,BO的最优m的取定和EO的十分相似,也就是少了一个种类正负的限定。
这里的m4,0 应该表示的是选择四条边带,当前边带为第零条,也就是第零条的m。
在HM10.0中是以一个Slice进行SAO的,先将该Slice的所有CTU进行参数统计,再计算SAO参数,然后进行补偿。