[HEVC] Palette Mode

2024-02-01 18:18
文章标签 mode palette hevc

本文主要是介绍[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就只包含一个组成部分。

这篇关于[HEVC] Palette Mode的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/668065

相关文章

Unstructured cannot write mode RGBA as JPEG 错误解决

Unstructured cannot write mode RGBA as JPEG 错误解决 0. 错误详细1. 解决方法 0. 错误详细 Image Extraction Error: Skipping the failed imageTraceback (most recent call last):File "/root/miniconda3/envs/learn-y

混合模式属性background-blend-mode

background-blend-mode 是 CSS 中的一个属性,它允许你将背景图像与背景颜色或背景图像之间以一种特定的混合模式进行混合。这个属性为网页设计师提供了一种强大的方式来创建视觉上吸引人的背景效果,无需使用图像编辑软件或额外的图像文件。 background-blend-mode 可以应用于单个背景图像与背景颜色之间,或者当设置多个背景图像时,应用于这些图像之间。混合模式包括了许多

【Mysql】系统服务启动访问报错问题处理:this is incompatible with sql_mode=only_full_group_by

一、背景: 本来已经正常运行的平台,突然有一天由于对服务器进行部分操作迁移,发现jar可以正常启动,但是访问功能一直报错,监控后台日志后,发现了问题: 报错的具体信息如下: Caused by: java.sql.SQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and conta

Hugging Face Offline Mode 离线模式

Hugging Face Offline Mode 离线模式 1. 缓存管理2. 遥测日志 在使用 Hugging Face 的库时,缓存和遥测日志是两个重要的功能。本文将介绍如何管理缓存、启用离线模式以及如何关闭遥测日志。 1. 缓存管理 在使用 Hugging Face 模型时,权重和文件通常会从 Hub 下载并存储在默认的缓存目录中,这个目录通常位于用户的主目录。如果

关闭qcom soc系列手机的ramdump mode

在 kernel/msm-3.10 / arch/arm64/configs/ze550kl_user_defconfig中 将CONFIG_MSM_DLOAD_MODE=y改成 #CONFIG_MSM_DLOAD_MODE is not set 然后在/ drivers/power/reset/msm-poweroff.c中将 if (!in_panic) { // Normal re

CUDA-MODE课程笔记 第9课: 归约(也对应PMPP的第10章)

我的课程笔记,欢迎关注:https://github.com/BBuf/how-to-optim-algorithm-in-cuda/tree/master/cuda-mode CUDA-MODE课程笔记 第9课: 归约(也对应PMPP的第10章) 课程笔记 本节课的题目。 这节课的内容主要是 Chapter 10 of PMPP book ,Slides里面还给出了本节课的

初探UML(User-Mode-Linux)

由标题我们已经知道这里要说的UML不是“统一建模语言”,而是“用户模式的Linux”,使用它有什么好处呢?让我们先保留点神秘感,一步一步学习,通过实践来感悟它的魅力。 实验环境:电脑一台(装有Ubuntu13.10系统,Kernel版本为3.11.0-12-generic,64位) 下面将通过UML环境的搭建、GDB调试、网络测试这3个方面来了解下UML: 一.搭建UML实验环境 1.下载

MySQL 主从幂等复制slave_exec_mode=IDEMPOTENT

MySQL slave_exec_mode 参数用于控制主从复制数据冲突时的处理策略,可选值有STRICT和IDEMPOTENT,分别代表严格模式和幂等模式,默认值为STRICT,该参数可动态调整。 原文地址: https://mytecdb.com/blogDetail.php?id=76 STRICT,严格模式IDEMPOTENT,幂等模式 默认STRICT模式下,从库复制过程中

MYSQL5.7版本sql_mode=only_full_group_by问题,重启有效的方法

1./etc/mysql/mysql.conf.d/mysqld.cnf 或者my.cnf   总之就是mysql的配置文件 2.查看当前的sql模式 select @@sql_mode; 3.添加语句 sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CR

第二十九篇:USER MODE DLL开发过程中的调试技巧心得分享

最近由于项目需要,被老板安排开发一个WINDOWS USER MODE DLL, 即WINDOWS用户模式下的动态链接库。 写代码,实现具体的功能这类初等工作,对于大多数软件开发工程师来讲,只是时间与工作量上的问题,具体的WINDOWS DLL的知识点,本人参考了Jeffrey Richter的《WINDOWS核心编程》中的DLL几章,不再熬述。 这里谈一下关于USER MODE