博客
关于我
环路滤波(四):LMCS
阅读量:537 次
发布时间:2019-03-09

本文共 1911 字,大约阅读时间需要 6 分钟。

LMCS( luma mapping with chroma scaling)是VVC中新增的技术,其位于去方块滤波之前,也被称为环路重整形(in-loop reshaper)。该技术用于HDR和SDR视频中。

LMCS包括两部分:(1)基于自适应分段线性模型的环内亮度映射;(2)基于亮度的色度残差缩放;

 

上图是解码端的LMCS框架,上面是亮度处理下面是色度处理。淡蓝色框在映射域(mapped domain)包括反量化、反变换、亮度帧内预测、亮度预测值和残差值相加;非阴影框在普通域(非映射)(original domain)包括环路滤波、运动补偿、色度帧内预测、色度预测值和残差值相加、DPB中参考图像存取。浅黄色框是LMCS相关功能,包括亮度信号正向和逆向映射、基于亮度的色度缩放。SPS中有一个标志位控制LMCS功能开启。

基于分段线性模型的环内亮度映射

环内亮度映射是调整输入信号的动态范围来提高压缩效率。对于HDR图像其动态范围很高可能需要10比特才能表示,而显示设备可能只有8比特这就需要色调映射改变信号的范围。

亮度映射通过一个前向映射函数FwdMap和与之对应的逆向映射函数InvMap实现。FwdMap是一个分段线性模型,有16个均匀分段。InvMap可由FwdMap推导出,所以码流中只需传输FwdMap函数。

亮度映射模型在tile组级别( tile group level)上传输,即每个tile组的模型相互独立。首先传输一个标志位表示当前tile组是否存在分段映射模型,如果存在则传输相应模型参数。tile组中还存在另外一个标志位表示当前tile组是否使用LCMS。

分段线性模型将输入信号的动态范围映射到16个等长区间,每个区间的线性映射参数用映射到该区间的码字数表示。以10比特输入为例,2^10=1024,每个区间默认有1024/16=64个码字,区间实际传输的码字数用来计算缩放因子和调整映射函数。

FwdMap的每个分段区间由InputPivot[]和MappedPivot[]定义。InputPivot[]和MappedPivot[]按下列方法生成(假设输入信号为10比特):

1)OrgCW = 642)For i = 0:16, InputPivot[ i ] = i * OrgCW3)For i=0:16, MappedPivot[i] is calculated as follows:  MappedPivot[ 0 ] = 0;for( i = 0; i <16 ; i++)  MappedPivot[ i + 1 ] = MappedPivot[ i ] + SignalledCW[ i ]SignalledCW[ i ]是第i个分段区间传输的码字数。

映射过程(前向或逆向)可以通过 look-up-tables (LUT)或动态计算(on-the-fly computation)实现。

如果使用LUT,每个tile组可以预先计算和存储FwdMapLUT和InvMapLUT,然后可以通过FwdMap(Y_pred)=FwdMapLUT[Y_pred]和InvMap(Y_pred)=InvMapLUT[Y_pred]进行前向和逆向映射。

如果使用动态计算,以前向映射FwdMap 为例,为了得到亮度像素所属的区间,首先像素值要右移6位得到所属区间,然后检索该区间的模型参数并使用动态计算得到映射值。假设区间索引为i,令a1=InputPivot[i],a2=InputPivot[i+1],b1=MappedPivot[i],b2=MappedPivot[i+1],则映射函数可以表示为:

 

逆映射InvMap 过程类似,只不过上面比特右移操作换成条件检测,因为映射域的区间不是均匀划分的。

基于亮度的色度残差缩放

如果使用了亮度映射,且当前tile组没有使用dual tree partition,则需要一个额外的标志位表示是否使用基于亮度的色度残差缩放。

如果没有使用亮度映射或当前tile组使用了dual tree partition,不允许使用基于亮度的色度残差缩放。且当色度块小于等于4时也不允许使用基于亮度的色度残差缩放。

色度残差缩放依赖于相应亮度预测块平均值,计算方式如下:

 

int  Reshape::calculateChromaAdj(Pel avgLuma){  int lumaIdx = Clip3
(0, (1<

整个色度块的缩放因子都相同,缩放过程如下:

感兴趣的请关注微信公众号Video Coding

 

转载地址:http://wraiz.baihongyu.com/

你可能感兴趣的文章
mysql 往字段后面加字符串
查看>>
mysql 快照读 幻读_innodb当前读 与 快照读 and rr级别是否真正避免了幻读
查看>>
MySQL 快速创建千万级测试数据
查看>>
mysql 快速自增假数据, 新增假数据,mysql自增假数据
查看>>
MySql 手动执行主从备份
查看>>
Mysql 批量修改四种方式效率对比(一)
查看>>
Mysql 报错 Field 'id' doesn't have a default value
查看>>
MySQL 报错:Duplicate entry 'xxx' for key 'UNIQ_XXXX'
查看>>
Mysql 拼接多个字段作为查询条件查询方法
查看>>
mysql 排序id_mysql如何按特定id排序
查看>>
Mysql 提示:Communication link failure
查看>>
mysql 插入是否成功_PDO mysql:如何知道插入是否成功
查看>>
Mysql 数据库InnoDB存储引擎中主要组件的刷新清理条件:脏页、RedoLog重做日志、Insert Buffer或ChangeBuffer、Undo Log
查看>>
mysql 数据库中 count(*),count(1),count(列名)区别和效率问题
查看>>
mysql 数据库备份及ibdata1的瘦身
查看>>
MySQL 数据库备份种类以及常用备份工具汇总
查看>>
mysql 数据库存储引擎怎么选择?快来看看性能测试吧
查看>>
MySQL 数据库操作指南:学习如何使用 Python 进行增删改查操作
查看>>
MySQL 数据库的高可用性分析
查看>>
MySQL 数据库设计总结
查看>>