[HEVC] Palette Mode

本文技术全部基于HEVC SCM-4 (JCTVC T1014) 2015年2月

Palette Mode 是一种在HEVC-SCC2中新提出的技术,该技术在画面仅仅由几种主要颜色组成的情况下使用,在CU层次进行编码。

首先应该知道palette mode 的编码过程中的位置。

Palette Mode Position in HEVC

本文只是简述palette mode,更加详细的信息请参照JCTVC-R0348

简介

palette mode的基本思想就是利用CU内部的样本只是有少数几种典型的颜色组成的特性进行编码。其中,收集CU内部的较为集中分布的集中颜色组成一个set。这个set即为palette,当然,CU内部样板中,颜色不属于set的,会被集中起来归为一个escape。

Example of a block coded in palette mode

从图上我们可以看出,前部分3个样本被收集到set中,分别为2,0,3,蓝色的方块因为其颜色没有在palette mode的set中,被另外分配到escape中。

在CU层次的flag中,有palette_escape_val_present_flag语法来指明当前CU内部是否有escape模式的。如果存在的话,palette模式在set最后增加一个种类存放escape。

在编码的过程中,如果解码器想完成解码,则其需要知道两个参数

  1. palette entries
  2. palette indices

如果palette 的类型值为escape,则其escape值将会被单独传输。

Palette 参数提取

在SCM-3版HM 源码中,对于palette编码分为两种:lossy coding 和 lossless coding

对于loosy编码,采用改进的K平均值聚类算法:
  1. 把第一个样本值加入palette,作为第一个entry。
  2. 对于随后的每一个样本值,计算其与当前的entry的SAD(the sum of absolute distance),如果计算出来distortion小于预定定义的阈值。则当前样本值将会被加入到相对应entry的clustering belonging中,如果distortion 大于预定的阈值,则当前的样本值将会被作为新的一个entry加入到palette中。
  3. 如果clustering中的样本数量超过一定量,针对这些值,计算出聚类中心值,把聚类中心值更新当前entry。

完成聚类算法之后,根据出现频率的高低,对所有cluster按照出现频率由高到低排序,然后针对每一个palette entry,其值进行更新。一般来说,更新值是根据cluster的聚类中心值确定,但是与此同时,palette predictor中的值是否比cluster聚类中心值更好,需要计算两者的RD值。在最后,如果发现某一个entry的cluster仅仅只有一个sample,那么这个sample将会被移入escape中。再最后删除整个palette mode表中重复的entry值,并且合并重复的entry所带的cluster sample。

对于lossless编码,则编码的方法完全不同:

把CU中的值做成柱状图,图中所有的值按照出现频率由高到底排列,从出现频率最高的entry开始,依次将他们加入到palette,同样,在此过程中,如果有某些值,只出现一次,并且不存在于palette predictor中。那么这些值将被加入到escape中。

经过上述的编码过程以后,在当前编码的block中,每一个sample都拥有了一个index,其指向palette entry(SAD最小)。依据这些index,对每一个sample赋予INDEX或者COPY_ABOVE其中的一个模式,选择以后,每个sample的run随即就被确定了。然后根据编码该模式的cost,run,该index值的可能性,根据三个判断条件,依据贪心算法,采用拥有最小的cost值的模式。
##编码Palette entries

在前文提及到,在做完聚类分析算法后,确定palette entry的时候,要用聚类中心值和palette predictor中的值进行计算比较。

在编码palette entry时,palette table和palette predictor的大小都在SPS中定义,在SCM4中,在PPS中定义了一个palette_predictor_initializer_present_flag 的标志值。当其值为 1 时,palette predictor将被传输到比特流中,在每一个CTU,slice,每个文件的开头,palette predictor都会被初始化。当设置为0时,则palette predictor被设置为0。

对于palette predictor中的每一个entry,都有个指示值。指示该值是否是参照之前的predictor而得到的。相应的关系如下图
这里写图片描述

所有的pred flag将会使用使用游程编码进行编码传输,然后需要传输的“新的”palette entry的数量。最后再传输对应的元素值。

palette indice编码

当我们完成palette entry的编码后,该轮到palette indice了,相应的扫描的方式在palette_transpose_flag中定义了。扫描方式有水平扫描和垂直扫描两种,分别如图:
这里写图片描述

下面即以水平扫描为例:

在palette indices中,有INDEX或者COPY_ABOVE 两种模式,在COPY_ABOVE 中,当前sample的palette index是直接从上一行的对应位置拷贝过来使用。在INDEX 模式中,palette indice 是被直接传输的。无论选择哪种模式,都会有一个run值,指示在该sample后有多少个sample是使用的相同的模式。

这里写图片描述

如果在INDEX或者COPY_ABOVE 模式中存在escape的样块,如图中蓝色部分所示,则其应该单独编码。

在SCM-4之前,编码传输的顺序是 palette sample mode(如果有) -> index value(如果有)-> run -> escape component value。但是在SCM-4中,为了使indices和escape symbol 更加好地结合在一起,首先传送在CU单位内index值的数量,然后接着传输真实的index值(截断二进制编码(trancated binary coding)),第二步将以交替模式(interleaved manner)传输palette sample mode 和 run 值。最后,每个CU的escape样本值将被一起传输。

palette mode一样适应于4:2:2和4:2:0模式,当画面包含彩色成分时,palette table包含YUV三个组成部分,但是单色的时候,则palette table的每一个entry就只包含一个组成部分。

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

轻舞飞扬SR

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值