Chroma from Luma 预测方法总结
1.术语
- IPP:Inter plane prediction
- CCP:Cross component predition
CCLM:Cross-component linear model prediction
CfL:Chroma from luma
2.背景
因为原来发的paper是基于RGB编码,看过相关性的paper;也就在那段时间,range extension software引入了CCP。
最早是RGB编码中的inter plane prediction,由Woo-Shik Kim搞出来的。265时代,被引入HEVC range extension,技术命名为cross component prediction,至此主要还是支持444 format;到了266、av1时代,JEM和BMS,改名为cross-component linear model prediction,增加了下采样对YUV420 format的支持,而AV1中叫chroma from luma,由Mozilla贡献;后面的提案又引入的5种enhanced linear model,在最近的会议中,enhanced linear model并没有被接受,仅保留CCLM。
但换汤不换药,最根源的思想还是在去除分量间的相关性。
E0077:enhanced linear model
K0190:only keep CCLM
3.算法详解
4.代码
预测流程
//! 预测流程
//! 调用1:编码:模式预测
//! 调用2:编码:实际编码
//! 调用3:解码:重构...//===== get prediction signal =====
#if COM16_C806_LMCHROMAif( uiChFinalMode == LM_CHROMA_IDX )///< 使用cclm mode{predLMIntraChroma(rTu, compID, piPred, uiStride, uiWidth, uiHeight);}else ///< 使用正常intra mode{
#endifpredIntraAng( compID, uiChFinalMode, piOrg, uiStride, piPred, uiStride, rTu, bUseFilteredPredictions );#if COM16_C806_LMCHROMAif( compID == COMPONENT_Cr && pcCU->getSlice()->getSPS()->getUseLMChroma() ){ ///< Cb-to-CraddCrossColorResi( rTu, compID, piPred, uiStride, uiWidth, uiHeight, pcResiYuv->getAddr( COMPONENT_Cb, uiAbsPartIdx ), pcResiYuv->getStride(COMPONENT_Cb) );}}
#endif...
预测流程之Luma-to-Chroma
Void TComPrediction::predLMIntraChroma( TComTU& rTu, const ComponentID compID, Pel* pPred, UInt uiPredStride, UInt uiCWidth, UInt uiCHeight )
{// LLS parameters estimation -->Int a, b, iShift;xGetLMParameters( rTu, compID, uiCWidth, uiCHeight, 0, a, b, iShift );// get prediction -->Int iLumaStride = m_iLumaRecStride;Pel *pLuma = m_pLumaRecBuffer + iLumaStride + 1;for( Int i = 0; i < uiCHeight; i++ ){for( Int j = 0; j < uiCWidth; j++ ){pPred[j] = Clip3(0, maxV, ( ( a * pLuma[j] ) >> iShift ) + b );}pPred += uiPredStride;pLuma += iLumaStride;}// <-- end of get prediction
}
预测流程之Cb-to-Cr
//! Cb residual predict Cr residual
Void TComPrediction::addCrossColorResi( TComTU& rTu, const ComponentID compID, Pel* piPred, UInt uiPredStride, UInt uiWidth, UInt uiHeight, Pel* piResi, UInt uiResiStride )
{Int a, b, iShift;xGetLMParameters( rTu, compID, uiWidth, uiHeight, 1, a, b, iShift ); ///< cb-to-cr lambdaInt offset = 1 << (iShift - 1);if (a >= 0){return;}Pel* pPred = piPred; ///< [out]Cr resi predPel* pResi = piResi; ///< [in]Cb resifor( UInt uiY = 0; uiY < uiHeight; uiY++ ){for( UInt uiX = 0; uiX < uiWidth; uiX++ ){pPred[ uiX ] = Clip3(0, maxV, pPred[ uiX ] + (( pResi[ uiX ] * a + offset) >> iShift ) );}pPred += uiPredStride;pResi += uiResiStride;}
}
预测之线性模型参数推算
//! 生成线性模型的参数
Void TComPrediction::xCalcLMParameters( Int x, Int y, Int xx, Int xy, Int iCountShift, Int iPredType, Int bitDepth, Int &a, Int &b, Int &iShift );
Chroma from Luma
Cr from Cb
whereλ=∑(Cb(n)∗Cb(n))>>9λ=∑(Cb(n)∗Cb(n))>>9\lambda = \sum(Cb(n)*Cb(n))>>9
熵编码
Void TEncSbac::codeIntraDirChroma( TComDataCU* pcCU, UInt uiAbsPartIdx )
{UInt uiIntraDirChroma = pcCU->getIntraDir( CHANNEL_TYPE_CHROMA, uiAbsPartIdx );if( uiIntraDirChroma == DM_CHROMA_IDX ){m_pcBinIf->encodeBin( 0, m_cCUChromaPredSCModel.get( 0, 0, 0 ) ); ///< dm}#if COM16_C806_LMCHROMAelse if( uiIntraDirChroma == LM_CHROMA_IDX && pcCU->getSlice()->getSPS()->getUseLMChroma() ){m_pcBinIf->encodeBin( 1, m_cCUChromaPredSCModel.get( 0, 0, 0 ) );m_pcBinIf->encodeBin( 0, m_cCUChromaPredSCModel.get( 0, 0, 1 ) ); ///< cclm}#endifelse{m_pcBinIf->encodeBin( 1, m_cCUChromaPredSCModel.get( 0, 0, 0 ) );
#if COM16_C806_LMCHROMAif (pcCU->getSlice()->getSPS()->getUseLMChroma()){m_pcBinIf->encodeBin( 1, m_cCUChromaPredSCModel.get( 0, 0, 1 )); ///< intra pred mode}
#endifUInt uiAllowedChromaDir[ NUM_CHROMA_MODE ];pcCU->getAllowedChromaDir( uiAbsPartIdx, uiAllowedChromaDir );#if COM16_C806_LMCHROMAfor( Int i = 0; i < NUM_CHROMA_MODE - 2; i++ )
#endif{if( uiIntraDirChroma == uiAllowedChromaDir[i] ){uiIntraDirChroma = i;break;}}m_pcBinIf->encodeBinsEP( uiIntraDirChroma, 2 );}return;
}
熵解码
Void TDecSbac::parseIntraDirChroma( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )
{UInt uiSymbol;m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUChromaPredSCModel.get( 0, 0, 0 ) RExt__DECODER_DEBUG_BIT_STATISTICS_PASS_OPT_ARG(ctype) );if( uiSymbol == 0 ) ///< dm{uiSymbol = DM_CHROMA_IDX;}else{
#if COM16_C806_LMCHROMAif( pcCU->getSlice()->getSPS()->getUseLMChroma() ){m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUChromaPredSCModel.get( 0, 0, 1 ) RExt__DECODER_DEBUG_BIT_STATISTICS_PASS_OPT_ARG(ctype) );}else{uiSymbol = 1;}if( uiSymbol == 0 ) ///< cclm{uiSymbol = LM_CHROMA_IDX;}else ///< intra pred mode{
#endifUInt uiIPredMode;m_pcTDecBinIf->decodeBinsEP( uiIPredMode, 2 RExt__DECODER_DEBUG_BIT_STATISTICS_PASS_OPT_ARG(ctype) );UInt uiAllowedChromaDir[ NUM_CHROMA_MODE ];pcCU->getAllowedChromaDir( uiAbsPartIdx, uiAllowedChromaDir );uiSymbol = uiAllowedChromaDir[ uiIPredMode ];
#if COM16_C806_LMCHROMA}
#endif}pcCU->setIntraDirSubParts( CHANNEL_TYPE_CHROMA, uiSymbol, uiAbsPartIdx, uiDepth );
}
Chroma from Luma 预测方法总结相关推荐
- [AV1] Chroma from Luma Prediction
返回AV1专栏目录 Chroma from Luma 预测,也简称为CfL,是一种仅针对chroma的帧内预测技术.早期其实在HEVC中就已经被提出过,但是由于复杂度太高被reject了,最后加入到了 ...
- AV1技术学习之Chroma from Luma(CfL)
一.Chroma from Luma原理 Chroma from Luma(CfL)是一种色度帧内预测技术,是通过建立重建亮度像素和色度像素的线性模型来预测色度像素的: 其中表示亮度重建像素,线性模型 ...
- H265/HEVC名词解释-- CTU,CTB,CU,CB,TU,PU,TB,PB,LCU,Slice,Tile,Chroma,Luma,I帧,B帧,P帧
H265/HEVC名词解释 学H265的时候,一堆名词 CTU,CTB,CU,CB,TU,PU,TB,PB,LCU,Slice,Tile,Chroma,Luma,I帧,B帧,P帧,绕的头疼,写篇博客汇 ...
- 综合评价模型的缺点_浅谈交通影响评价中不同交通预测方法的特性
目前,据小编经验觉得,我国交通影响评价的工作中仍有很多问题未得到很好的解决,主要表现在:交通需求预测模型有待进一步精细.交通的影响程度评价内容与指标不够明确.报告中提出的交通改善措施很难落实到位等方面 ...
- 风电功率预测matlab,一种基于二十四节气的风电功率预测方法与流程
本发明属于风电场技术领域,尤其涉及一种基于二十四节气的风电功率预测方法. 背景技术: 风能的随机波动性对电网产生的较大冲击给风电产业的发展带来了巨大挑战.目前风电功率预测误差较大,数值天气预报精度.训 ...
- 网站推广下吉利关联公司公开“车辆故障预测方法”将在事故发生前预警
近日,根据某款提供免费商业查询服务软件的资料消息称,宁波吉利汽车研究开发有限公司新增多项专利信息,其中一项专利十分吸睛--"车辆故障预测方法.预测系统及车辆".申请人为浙江吉利控股 ...
- 多元经验模态分解_【Applied Energy最新原创论文】一个基于多元搜索引擎数据的多尺度油价预测方法...
原文信息: A multi-scale method for forecasting oil price with multi-factor search engine data 原文链接: http ...
- 时间序列预测方法汇总:从理论到实践(附Kaggle经典比赛方案)
©作者 | Light 学校 | 中国科学院大学 研究方向 | 机器学习 时间序列是我最喜欢研究的一种问题,这里我列一下时间序列最常用的方法,包括理论和实践两部分.理论部分大多是各路神仙原创的高赞解读 ...
- 两步路轨迹文件位置_最新Uber ATG的轨迹预测方法LiRaNet介绍
arXiv今年10月刚刚上传论文"LiRaNet: End-to-End Trajectory Prediction using Spatio-Temporal Radar Fusion&q ...
最新文章
- 玩转python字体
- FTP资源下检测URL地址下文件大小
- Part1_4 python函数、文件操作、异常处理
- systemctl常用命令
- postman模拟post请求的四种请求体
- 阿里开发者们的第5个感悟:听话,出活
- [国家集训队]middle(二分+主席树[中位数思维题])
- eclipse 中文乱码
- 【dfs】Election of Evil
- 应对深度学习人才缺口,百度黄埔学院发起深度学习架构师培养计划...
- 寻仙服务器要维护多久,新寻仙正式服5.2.62.1版本更新公告
- Redis 笔记之 Java 操作 Redis(Jedis)
- [笔记] 最大权闭合子图最大流最小割相关笔记
- 网页百度云盘服务器有点忙,百度网盘使用提示网络异常,建议使用三种解决方法...
- 广西大学计算机与电子信息学院李智,赵进创,广西大学 计算机与电子信息学院...
- 第二次数学建模训练题
- IE浏览器 请求报304,解决办法 设置页面禁止缓存
- 好课堂Scratch编程10 趣学篇(六)听题!格里芬的挑战
- 百度二级域名大全 目前为234个http://www.twocity.cn/blog/article.asp?id=818
- 【源码阅读】【苦练基本功】Golang内置函数分析