palette indice编码

本文技术全部基于HEVC SCM-4 (JCTVC T1014) 2015年2月
Mode 是一种在HEVC-SCC2中新提出的技术 , 该技术在画面仅仅由几种主要颜色组成的情况下使用 , 在CU层次进行编码 。
首先应该知道 mode 的编码过程中的位置 。
本文只是简述 mode , 更加详细的信息请参照JCTVC-R0348
简介
mode的基本思想就是利用CU内部的样本只是有少数几种典型的颜色组成的特性进行编码 。其中 , 收集CU内部的较为集中分布的集中颜色组成一个set 。这个set即为 , 当然 , CU内部样板中 , 颜色不属于set的 , 会被集中起来归为一个 。
从图上我们可以看出 , 前部分3个样本被收集到set中 , 分别为2 , 0 , 3 , 蓝色的方块因为其颜色没有在 mode的set中 , 被另外分配到中 。
在CU层次的flag中 , 有语法来指明当前CU内部是否有模式的 。如果存在的话 , 模式在set最后增加一个种类存放 。
在编码的过程中 , 如果解码器想完成解码 , 则其需要知道两个参数
如果 的类型值为 , 则其值将会被单独传输 。
参数提取
在SCM-3版HM 源码中 , 对于编码分为两种:lossy和
对于loosy编码 , 采用改进的K平均值聚类算法: 把第一个样本值加入 , 作为第一个entry 。对于随后的每一个样本值 , 计算其与当前的entry的SAD(the sum of),如果计算出来小于预定定义的阈值 。则当前样本值将会被加入到相对应entry的 中 , 如果 大于预定的阈值 , 则当前的样本值将会被作为新的一个entry加入到中 。如果中的样本数量超过一定量 , 针对这些值 , 计算出聚类中心值 , 把聚类中心值更新当前entry 。
完成聚类算法之后 , 根据出现频率的高低 , 对所有按照出现频率由高到低排序 , 然后针对每一个 entry , 其值进行更新 。一般来说 , 更新值是根据的聚类中心值确定 , 但是与此同时 ,  中的值是否比聚类中心值更好 , 需要计算两者的RD值 。在最后 , 如果发现某一个entry的仅仅只有一个 , 那么这个将会被移入中 。再最后删除整个 mode表中重复的entry值 , 并且合并重复的entry所带的。
对于编码 , 则编码的方法完全不同:
把CU中的值做成柱状图 , 图中所有的值按照出现频率由高到底排列 , 从出现频率最高的entry开始 , 依次将他们加入到 , 同样 , 在此过程中 , 如果有某些值 , 只出现一次 , 并且不存在于 中 。那么这些值将被加入到中 。
经过上述的编码过程以后 , 在当前编码的block中 , 每一个都拥有了一个index , 其指向 entry(SAD最小) 。依据这些index , 对每一个赋予INDEX或者其中的一个模式 , 选择以后 , 每个的run随即就被确定了 。然后根据编码该模式的cost , run , 该index值的可能性 , 根据三个判断条件 , 依据贪心算法 , 采用拥有最小的cost值的模式 。
##编码
在前文提及到 , 在做完聚类分析算法后 , 确定 entry的时候 , 要用聚类中心值和 中的值进行计算比较 。
在编码 entry时 ,  table和 的大小都在SPS中定义 , 在SCM4中 , 在PPS中定义了一个ag 的标志值 。当其值为 1 时 ,  将被传输到比特流中 , 在每一个CTU , slice , 每个文件的开头 ,  都会被初始化 。当设置为0时 , 则 被设置为0 。