
Peath模式原理Paeth预测模式AV1引入的新的帧内预测模式由计算机科学家Alan W. Paeth在开发PNG格式时提出因此以他的名字进行命名该模式原理是一种加权预测如图所示根据其顶部T、左侧L和左上角TL的参考样本预测每个样本。在这些参考样本中与T L – TL的值最接近的那个值被选为预测样本。应用Paeth预测模式特别适合于图像的平滑区域因为它可以有效地减少预测误差提高压缩效率。在AV1中这种模式是多种帧内预测模式之一与其他模式一起使用以适应不同类型的图像内容。libaom相关源码分析libaom 模式序号为 12在 enums.h 中定义。libaom 源码相关函数关系paeth_predictor函数外层循环遍历块的高度bh。内层循环遍历块的宽度bw。paeth_predictor_single函数被调用来计算每个像素的预测值该函数接受三个参数左侧像素值left[r]上方像素值above[c]以及左上角像素值ytop_left。计算得到的预测值被存储在dst[c]中。每次内层循环结束后dst指针增加stride以移动到下一行的目标缓冲区。staticINLINEvoidpaeth_predictor(uint8_t*dst,ptrdiff_tstride,intbw,intbh,constuint8_t*above,constuint8_t*left){intr,c;constuint8_tytop_leftabove[-1];for(r0;rbh;r){for(c0;cbw;c)dst[c](uint8_t)paeth_predictor_single(left[r],above[c],ytop_left);dststride;}}paeth_predictor_single函数计算基础值basebase 是通过将顶部像素值 top 和左侧像素值 left 相加然后减去左上角像素值 top_left 来计算的。这个基础值用于后续的差值计算。计算绝对差值p_left 是 base 和 left 之间的绝对差值。p_top 是 base 和 top 之间的绝对差值。p_top_left 是 base 和 top_left 之间的绝对差值。这些差值用于确定哪个参考像素left、top 或 top_left最接近 base。选择最接近的像素值函数使用三元运算符来确定哪个参考像素的差值最小即最接近 base。如果 p_left 是三个差值中最小的返回 left。如果 p_top 小于 p_top_left 且不大于 p_left返回 top。否则返回 top_left。返回预测值函数返回最接近 base 的像素值这个值被认为是当前像素的最佳预测。staticINLINEuint16_tpaeth_predictor_single(uint16_tleft,uint16_ttop,uint16_ttop_left){constintbasetopleft-top_left;constintp_leftabs_diff(base,left);constintp_topabs_diff(base,top);constintp_top_leftabs_diff(base,top_left);// Return nearest to base of left, top and top_left.return(p_leftp_topp_leftp_top_left)?left:(p_topp_top_left)?top:top_left;}abs_diff 函数用于计算两个整数 a 和 b 之间的绝对差值。这个函数的实现非常简单且高效它通过一个条件表达式三元运算符来确定 a 和 b 中哪个更大并返回两者之间的差值。staticINLINEintabs_diff(inta,intb){return(ab)?a-b:b-a;}