用于视频编码的低复杂度帧内预测的制作方法_4

文档序号:9474678阅读:来源:国知局
302中从refV向refH中复制参考像素 时,参考像素可以通过低通滤波器以减少预测块中的可能混叠。低通滤波器的强度可以根 据angle的值变化。例如当angle等于-size时,可以应用弱低通滤波,并且当angle等 于-2时,可以应用强低通滤波。
[0093] 如上文说明的那样,未向refH中复制refV中的所有参考像素。由于未复制 refV中的所有参考像素,所以当复制像素时丢失一些信息。为了减轻信息丢失,可以倍 增refH和refV中的参考像素的分辨率,从而refH和refV不仅包含来自先前编码并且 重建的块的像素且包含在两个相邻的重建的像素之间的通过插值两个相邻像素而生成的 一个像素。可以简单地平均两个相邻像素以生成插值像素。可以当在图9的步骤900中 读取参考像素时执行插值过程。当在refH和refV中倍增像素分辨率时,需要缩放比如 在图9中的步骤907、910、915和919以及图10中的步骤1001中执行的、存储于refH和 refV中的参考像素的地址的标识。例如在步骤907、910和915中执行的"int+col+Ι"需 要改变成"int+2Xcol+2"。在步骤907、910和915中执行的"int+col+2"需要改变成 "int+2Xcol+3"。在步骤919中执行的"int2+row+l"和"int2+row+2"需要分别改变成 " int2+2 X row+2 " 和 " int2+2 X row+3 "〇
[0094] 在另一实施方式中,图12中的步骤1202的过程可以简单地改变成 "refH[C0l] - refV[-C0l]"以进一步简化复制过程。虽然降低预测准确度,但是这一实施 方式向帧内预测操作提供最低复杂度。
[0095] 图11B示出了向refH添加的扩展部分1104。无需用来自refV的参考像素形成扩 展部分1104。可以用来自先前重建的块的区域中的像素形成扩展部分1104,该区域在空间 上对应于扩展部分1104的位置。在图11B中,由于在负方向上扩展,所以扩展的refH(部 分1102和1104)范围从-size+Ι至2X size。可以通过在对扩展的refH中的参考像素寻 址时添加适当偏移来重新缩放扩展的refH的范围以使范围从0至3X size-Ι。这对于重新 缩放refV的范围同样成立。
[0096] 在另一实施方式中,可以自由选择angle的范围限制。在上述实施方式中,假 设angle取在从-size至size的范围内的值(-size < angle < size)。换言之,在上述 实施方式中,用目标块的大小限定angle的范围限制。请注意可以与目标块的大小独立 地限定angle的范围限制,尽管仍然可优选的是用2的整数幂限定范围限制,从而log2_ rangelimit 是正整数并且等式"rangelimit = l〈〈log2_rangelimit" 成立。通过为 rangelimit选择适当大数,可以建立大量预测方向并且由角度间隔充分宽的angle值代 表。
[0097] 如果与目标块的大小独立地限定angle的范围限制,则除了步骤909、912、917 和921之外,需要用rangelimit替换图9和图10中出现的size,并且需要用log2_ rangelimit 替换 log2_size。也需要用或者"angleXsize/rangelimit 多-1" 或者 "angleXsize多-rangelimit"替换图10的步骤1000中执行的比较"angle多-1"。另 外,需要用rangelimit替换图12和图13中的步骤1202和1301中出现的size,并且需要 用 "col = angle X size/rangelimit ? " 替换步骤 1204 中执行的比较 "col = angle ? "。
[0098] 如果引入rangelimit作为angle的范围限制,贝lj可以改变(上文提供的)表1如 下:
[0101] 在表2中,将rangelimit设置成32。Angle*等于 "rangelimitXtan( π Xangle/8) " 的整数近似,其中 angle = 1、2、3、4、5、6、7 和 8〇 InvAngle等于256Xrangelimit/angle*。表2中的值都是通过向上取整而推导的整数。可 以向下取整而不是向上取整这些数。在下文提供的表3中,InvAngle等于32Xrangelimit/ angle*。由于使用"32"而不是"256",所以预测准确度必然低于表2的预测准确度。
[0104] 图14是示出了另一实施方式的流程图,该实施方式进一步简化图10中所示过程。 在流程进入主预测循环之前执行图10中所示的从refV向refH中复制参考像素的过程,而 在主预测循环内执行图14中所示复制过程。图14中所示过程也消除变量InvAngle。图 14中所示步骤900、902和921来自图10中的对应步骤。
[0105] 在步骤1401,将计数器lastlnt初始化成-1。lastlnt代表向refH添加的最后 像素的索引。在步骤902中,按照angleX(row+l)计算pos。如上文说明的那样,pos标识 边界与angle代表的预测方向之间的交点的位置。在图9的背景中,步骤902产生pos,该 pos标识水平边界与angle代表的预测方向之间的交点的位置。进一步在步骤902中,pos 中的整数部分存储于int中,并且pos中的分数部分存储于参数"frac"中。在步骤1402 中,确定int是否小于lastlnt。如果int小于lastlnt,则在"int+Ι"标识的地址向refH 中复制refV中的由row标识的参考像素。步骤1404由图9和图10中所示步骤904、905、 906、907、908、909、910、911和912构成,这里未重复这些步骤的描述。在步骤1405中,向 lastlnt复制int。可以在步骤1403而不是步骤1405中执行向lastlnt复制int的操作。
[0106] 在步骤1403中的复制操作造成复制如在步骤1202和1302中复制的相同像素, 其中在这些步骤中使用向下取整。可以修改步骤1403以当在步骤902中计算的分数位 置frac大于由ranglimit+(angle?l)限定的offset时通过在步骤1403中有条件地使 用"row+Ι"而不是"row"来向最接近整数取整请注意angle是-ve并且frac是+ve〇 使用"row+1"造成向上取整。为了实现将row有条件递增1,在步骤1403中执行的过程 改变成 refH[int+l] - refV[row - ((offset-frac) >>31)],其中假设在 32 位算术中, "offset-frac"的右移在frac大于offset时产生-1而在别的情况下产生因此,地址 标识符"row - ((offset_frac)>>31"在frac大于offset时变成"row+Ι"而在别的情况下 变成"row"D如果offset设置成rangelimit,则"offset-frac"将总是为正,因此将无取 整出现。
[0107] 下文列举实施图14中所示过程的、用C++编程语言开发的源代码。根据在 TComPrediction. cpp 文件中发现的 TComPrediction: :xPredIntraAng 函数修改源代码,该 文件是 JCT-VC 开发的、在 http://hevc. kw. bbc. co. uk/svn/jctvc. al24/tags/0. 7 可获得 的TMuC 0. 7软件的部分。
[0108] //用于推导简化的角度帧内预测的函数
[0109] Void TComPrediction:· :xPredlntraAng ( Int* pSrc,工nt iSrcStridey rpDst, Int i.Ds-tS-tride, UInt iWidthf. .U工rvt. iH.ei.ght., Dint uiDirMode; Bool bAbove, Bool bL.eft .) ? Int I:at deltia-Fract:, refM:a i nlndex ; Int intraPredAngie - 0; Int absAng ^ G ;: Int sig.nAng ~ 0; Int blkSize· = iWidth;:· Bool mo.deDG false;· B〇:g1 modeler' = false.; Bool .inodeHor =_ false.;· Pel* pDst = rpDs:t^
[0110] //将模式索引映射到主预测方向和角度
[0111] if ftii:D.ir'M0.de. Q) xnodeOC - t rue; else If iBiDirMade ^ 18) rfiodeVer - true; else moideHor ^ true; intraPredangle - modeVer ? uiDi^Mbde - 9- : modeHor ? uipirMode ~ 25 : 〇; absitog 句 afes ; sigrt^g = intraPredAngle < 0 ? -1 ; 1:.;
[0112] //设置位移位并且将角度参数缩放成size2
[0113] Int iAngTable[9] = {0,2,5,9,13,17,21,26,32};
[0114] absAng = iAngTable [absAng];
[0115] intraPredAngle = signAng * absAng ;
[0116] //执行DC预测
[0117] if .{modeDC) { Pel dcval = predlntraGetPredValDC (pSrc, xSxcStridev .iWa-dth,. .iKeig:ht>- bBbove, b.Left); f-o-r· {k=: G; k<blkS:i ze; k+ 4-). { for (1=0.?1<?3?.]?$.:?ζ.Θ'.?1++.Η p:Ds t (k:* i.Ds tstrid?+11 =. dc^al.i .}
[0118] //执行角度预测
[0119] e:iee ΡΘ:1. tijip; Ι:ηφ *pSrcTL ~· ;pS;rc: 'iSr.eSfe-rid'e^ .^· 1; Int IStepMain ^ (modeVer) ? 1 : iSrcStride; i f (.int ra.PredAng;le -= 0.)· { for .(k:二0:k<fel k-S.izek十十 H. for (61.-0; t<t>lkSize; 1++) { post (k^iDstStride+l ] = piSrcT.L·]; (.1+1) .iStepMain].; }; }: }: el-se j: Int i-S.t.fepS.i'cle :{modeVer) ? iSrcStride 1 ; int lastDeltalnt = -1;. int iOffset ^ -^2- + UntraB:redAsg.le :>> 1;) ; //实现向最近侧参考取整 If Int iOffset ,32,;; //无取整 Pel ref [2*MAX_CCJ_SIZE]; Pel:*
当前第4页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1