为什么需要SAO
当变化块尺寸较大时,容易出现振铃效应,SAO就是用来削弱这种效应的。
SAO首先利用分类器将样点分类,然后根据类别对样点值加上一个偏移值。
样点的类别下标以及偏移值会被编码到码流中。
HEVC中有两种SAO type,edge offset(EO) 和 band offset(BO),其中EO是根据样点值与周围样点值的关系来分类,而BO是根据样点本身的值来分类。
HEVC中以CTU为单位进行SAO,不同的CTU可以使用相同的SAO参数(也就是region merging),一个CTU包含的色度CTB共享SAO type,但是可以有不同的偏移值。
Edge Offset(EO)
上图表示的是编码中的振铃效应,横轴表示像素坐标,纵轴表示像素值,虚线代表实际值,实线代表编码后的结果。可以看到,原本应该是边缘的地方现在却出现了波动。
那么怎么去除这种效应呢,很直观的想法就是对样点加上一个偏移值,让虚线靠近实线,如对波峰处的样点加上负的偏移,对波谷处的样点加上正的偏移值。
EO有四种分类器,如下图:
其中c代表当前样点,a和b是其相邻样点