博客
关于我
环路滤波(四):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/

你可能感兴趣的文章
Nginx 集成Zipkin服务链路追踪
查看>>
nginx 集群配置方式 静态文件处理
查看>>
Nginx+Django-Python+BPMN-JS的整合工作流实战项目
查看>>
Nginx+Keepalived+LVS集群实战
查看>>
Nginx+Keepalived实现简单版高可用主备切换
查看>>
Nginx+Lua 开发高性能Web应用实战
查看>>
nginx+mysql+redis+mongdb+rabbitmq 自动化部署脚本
查看>>
nginx+php的搭建
查看>>
nginx+tomcat+memcached
查看>>
nginx+tomcat单个域名及多个域名配置
查看>>
Nginx+Tomcat实现动静分离
查看>>
nginx+Tomcat性能监控
查看>>
nginx+uwsgi+django
查看>>
nginx+vsftp搭建图片服务器
查看>>
Nginx-http-flv-module流媒体服务器搭建+模拟推流+flv.js在前端html和Vue中播放HTTP-FLV视频流
查看>>
nginx-vts + prometheus 监控nginx
查看>>
Nginx/Apache反向代理
查看>>
Nginx: 413 – Request Entity Too Large Error and Solution
查看>>
nginx: [emerg] getpwnam(“www”) failed 错误处理方法
查看>>
nginx: [emerg] the “ssl“ parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:
查看>>