Sample Adaptive Offset 1 (SAO 样例自适应补偿)

来源:互联网 发布:linux ftp命令用法 编辑:程序博客网 时间:2024/06/04 08:52

题外话:SAO作为 HEVC少数几个 highlights 提出之后就得到了大家的广泛关注,本文就粗略整理一下SAO的工作原理,以及HM 10.0以后版本的实现代码。


主要参考JCV-VC文档

VCEG-AL27

JCTVC-A124

JCTVC-B077

JCTVC-C147

JCTVC-D122

JCTVC-E049


问题提出:

HEVC 大量采用了各种大小的变换块 (4 × 4 到 32 × 32), 这使得量化系数引入更多的ring artifacts, block artifacts. 此外, HEVC 采用 8-tap 帧内亮度插值, 这样加重了ring artifacts的效应。 为了避免由于新技术产生的 artifacts, HEVC引入了新的 去方块滤波(DF),环路滤波(LF),以及 样例自适应补偿(SAO) 技术。 如图1所示, 样例自适应补偿 位于DF之后(处于LP之中)。 引入SAO的目的是要减小块平均误差, 通过引入SAO,可以把整个帧分成不同的部分,加上不同的补偿类型来减小误差。

                              

                                                            图1

  首先帧被划分为若干LCU (一般为64×64), 然后对LCU中每个像素进行SAO操作。 根据LCU像素特征选择像素补偿以减少源图像与重构图像之间的失真。SAO 可根据图像块特性分为 边缘补偿(EO)和 带状补偿(BO)两个大类。


边缘补偿(EO)


                                

                                                                                                           图2


边缘补偿主要用于对图像的轮廓进行补偿,边缘补偿的意义在于平缓由于量化所带来的误差。由于人眼视觉对平滑区域特别敏感,边缘补偿很好的符合人眼的特性,所以SAO可以说在某种程度上提高了视觉质量效果而不仅仅体现在PSNR的提高。 如图2 所示,箭头部分用来表示将要补偿的方向。为了降低编编码端复杂度,HEVC采用了4种不同的EO模式 (如图3 )。EO 将当前像素点值与周围的2个像素值进行对比,用于比较的2个相邻像素可以在下图中所示的4种模板中选择,从而得到该像素点的类型。

         

                        图3

图3中的模板根据一下图表来确定所属类型.

                 


带状补偿(BO)


          


                           图4

带状补偿可以有效地弥补由于运动补偿和量化带来的误差。如图4所示,圈代表原始像素点,曲线段代表重构以后的像素点。可以观察出,量化后整个像素点都向右偏移,如果我们加上一个向左的补偿,那么就可以有效地提高重构像素点的精度。 带状补偿将像素值强度等级划分为若干个条带(

k, k + 1, k + 2, 和 k + 3.)对于每个条带采用不同的补偿值(offset)进行校正。


          

                        图5

为了节省码率,HEVC采用了将像素值归类的做法,(0~255)的像素值被划分为32个子带,其中连续的四个子带被用来做补偿。如图5所示,需要传递第一子带和补偿值就可以完成补偿。


下个blog将分析代码。

原创粉丝点击