增强样点自适应补偿(Enhanced Sample Adaptive Offset)是AVS3中新增的环路滤波技术,和SAO相比其更充分的考虑了纹理和边缘方向特征。ESAO是在整帧的层面是对所有像素进行分类,然后对每一类像素分别传输一个偏移量进行偏移补偿,偏移量在[-7,7]之间。
亮度像素分类
对于亮度像素首先按照两种方法将每个像素分为c1类、c2类。
c1类的分类方法:
c1类的分类方法是将当前像素和相邻8个像素分别比较,分类模板如图1,
图1 c1类的分类模板
对每个像素从上到下、从左到右分别和相邻像素比较,初始分类cl设置为0,有两种比较方法:
- 若周围像素比较当前像素大则cl自加1,若周围像素比较当前像素小则cl自减1。遍历完周围相邻8个像素后得到最终类别cl,这种方法cl在[-8,8]之间。
- 若周围像素比较当前像素大则cl自加1,若周围像素比较当前像素小则cl不变。遍历完周围相邻8个像素后得到最终类别cl,这种方法cl在[0,8]之间。
采用哪种比较方法由编码器决定。
c2类的分类方法:
c2的分类方法类似于SAO的边带补偿的分类方法,将像素按像素值等间隔的分为c2类,c2的大小由编码器决定,
设当前像素值为Y,则其按c2的分类结果为:
cy = (Y*c2) >> bitdepth
cy在[0,c2]之间。
将每个亮度像素按照上面两个方法分类得到c1和c2后,将c1和c2做笛卡尔积得到最终分类结果:
ct = c1 * c2
色度像素分类
色度只采用上面c2的分类方法,然后通过查表得到最终类别,
ct = tableUV[c2]
偏移量编码
每个类别都有一个偏移量,在patch级传输。对于亮度分量的偏移量直接编码每个偏移量,对于色度分量的偏移量可以选择两种编码方法:
- ct个偏移量直接采用ae编码。
- 从起始位置开始,找到第一个非零的偏移量,记录下标startIndex;从末尾开始,找到第一个非零的偏移量,记录下标endIndex;那么需要编码的偏移量数量num=startIndex-endIndex;只需要编码startIndex,num以及从stratIndex开始的num个偏移量。
开关层次
除了在图像级使用ESAO之外,AVS3还运行在LCU级使用ESAO即每个LCU单独决定是否开启ESAO,这需要对每个LUC再编码1bit标志位表示是否开启ESAO。