Weighted Prediction of HEVC
来源:互联网 发布:边境杀手 知乎 编辑:程序博客网 时间:2024/06/05 01:56
一、预测原理
加权预测可用于修正P Slice 或 B Slice 中的运动补偿预测像素。HEVC中存在两种加权预测
1、默认(default)加权预测
P =(PLX+2LWD-1)>>LWD
单向预测
P =(PL0+PL1+2LWD)>>(LWD+1)
双向预测
2、显示(explict)加权预测
P=Clip1((PLX*WLX+2LWD-1)>>LWD+OLX) 单向预测
P=Clip1(((PL0*WL0+PL1*WL1+2LWD)>>(LWD+1))+(OL0+OL1+1)>>1) 双向预测
P是目标图像的预测值,PLX则是参考列表X(0或1)中相应参考帧的重建像素值。>>操作对应于亚像素精度运动补偿过程中对预测值的放大,LWD为具体系数,W为权重,O为偏移量,其中W与O在码流中获得。
二、HM工程中的参数结构体
struct WPScalingParam
{
Bool bPresentFlag;//为加权因子,决定某个像素点是否进行加权预测
UInt uiLog2WeightDenom;//LWD
Int iWeight;//权重
Int iOffset;//偏移量
// Weighted prediction scaling values built from above parameters (bitdepth scaled):
Int w;//权重 w=iWeight
Int o;//o=iOffset*offsetScalingFactor
Int offset;//双向加权预测与单向的offset应用有所不同,但均来源于o
Int shift;//LWD
Int round;//
};
三、HM中Slice级的WP参数初始化
1、xCalcACDCParamSlice()中确定AC、DC的值
weightACDCParam[compID].iDC=(((iOrgDC<<fixedBitShift)+(iSample>>1))/iSample)
weightACDCParam[compID].iAC=iOrgAC+= abs( (Int)pPel[x] - (Int)iOrgNormDC )
其中iOrgDC为像素值总和,fixedBitShift如果不采用高精度加权预测即为0,故iDC值为当前帧像素值平均值。iOrgNormDC为当前帧像素值平均值,iAC即为当前帧像素值与平均值的差的总和。
2、UpdatingWPParameters()中对WP参数进行初步赋值
dWeight=(refAC==0)?(Double)1.0:Clip3(-16.0,15.0,((Double)currAC/(Double)refAC) )
weight = (Int)( 0.5 + dWeight * (Double)(1<<log2Denom) )
offset=(Int)(((currDC<<log2Denom)- ((Int64)weight * refDC) + (Int64)realOffset) >> realLog2Denom )
clippedOffset = Clip3( -range, range-1, offset)
m_wp[refList][refIdxTemp][comp].iWeight = weight;
m_wp[refList][refIdxTemp][comp].iOffset = clippedOffset;
m_wp[refList][refIdxTemp][comp].uiLog2WeightDenom = log2Denom
其中refAC为参考帧AC,currAC为当前帧AC,DC以此类推;log2Denom在外部定义为iDenom,值为6,即为LWD。iWeight、iOffset、uiLog2WeightDenom即为之前所提到的参数结构体中的参数值。
四、运动补偿中的加权预测
1、单向WP函数
pwp[yuv].w = pwp[yuv].iWeight;
pwp[yuv].offset = pwp[yuv].iOffset * offsetScalingFactor;
pwp[yuv].shift = pwp[yuv].uiLog2WeightDenom;
对w、offset、shift赋值,分别为权重,偏移量及LWD。
pDst[x] = weightUnidir(w0, pSrc0[x], round, shift, offset, clipBD)
之后再按公式进行加权运算
2、双向WP函数
wp0[yuv].w = wp0[yuv].iWeight;
wp1[yuv].w = wp1[yuv].iWeight;
wp0[yuv].o = wp0[yuv].iOffset * offsetScalingFactor;
wp1[yuv].o = wp1[yuv].iOffset * offsetScalingFactor;
wp0[yuv].offset = wp0[yuv].o + wp1[yuv].o;
wp0[yuv].shift = wp0[yuv].uiLog2WeightDenom + 1;
wp1[yuv].offset = wp0[yuv].offset;
wp1[yuv].shift = wp0[yuv].shift;
对offset、w进行赋值
pDst[x] = weightBidir(w0,pSrc0[x], w1,pSrc1[x], round, shift, offset, clipBD)
加权预测
- Weighted Prediction of HEVC
- Something about the Inter Prediction of HEVC Based on HM9.0
- HEVC Intra Prediction博客汇总
- Weighted version of quick union
- HEVC加权预测(Weight Prediction)原理兼解码代码
- HEVC帧内/帧间预测:Cross-Component Prediction (CCP)
- HEVC代码学习4:cross-component prediction代码实现
- HEVC代码学习5:cross-component prediction代码实现2
- overview of hevc (二)
- overview of hevc
- HEVC中的帧内预测模式选择(Intra prediction mode selection in HEVC)
- overview of hevc(一)
- (转)overview of hevc
- 加权平均资本成本(Weighted Average Cost of Capital,WACC)
- Overview of HEVC之3 术语
- Comparison of open-source HEVC encoders - x265
- Overview of HEVC帧内预测
- branch prediction~~out-of-order execution~~Retirement Unit
- Android 工具类 判定有无网络 NetworkUtils
- Python基础——yield的使用与解释
- The entity name must immediately follow the ‘&’ in the entity reference
- 安卓学习之路13之签名打包和SDK开发文档
- Gradle Plugin Samples 之 Gradle Build Configs(五)
- Weighted Prediction of HEVC
- ASP.NET MVC 4.0 中使用NPOI 2.2.0 按模板生成Excel报表
- 98,MRC转ARC
- springmvc 使用filter过滤的时候放置出现循环条
- Android自定义控件--波浪球SurfaceView实现
- js中的double
- android的Log详解(Log.v Log.d Log.i Log.w Log.e)
- JVM堆大小的调整
- ZZUOJ-10436: easy problem