HEVC标准(draft)翻译--亮度帧内预测
参考文档JCTVC-B205_draft007.doc
/*由于直接从word文档拷贝,各标题序号有误,所有标号为1.1....的应为6.2....。
由于无法复制公式,故各公式显示有误,请参阅英文源文档*/
1.1.1 亮度样点的帧内预测过程
当预测单元PredMode为MODE_INTRA且planar_flag == 0时调用本过程。
本过程的输入是相邻预测单元的IntraPredMode(如果可用)值。
依赖于intra_split_flag的值,预测单元的亮度分量由一个活四个亮度样点块组成。当intra_split_flag等于0时变量PartMode推导为PART_2Nx2N,intra_split_flag等于1时变量PartMode推导为PART_ NxN。这些块通过调用4.2.4节定义的逆扫描过程进行逆扫描。
对所有的预测单元分割块,调用6.2.1.1节规定的IntraPredMode的推导过程,在这个过程中,puPartIdx和相邻亮度预测单元去块效应滤波之前的(解码顺序)重建样点作为输入,输出为变量IntraPredMode。
对每个预测单元:
– 调用6.2.1.2节规定的帧内亮度样点预测过程,puPartIdx和相邻亮度预测单元去块效应滤波之前的(解码顺序)重建样点作为输入,输出为帧内亮度预测样点predPartL[ x, y ],其中 x = 0..PuPartWidth( puPartIdx ),y = 0..PuPartHeight( puPartIdx )。
– 调用4.2.4.2节定义的逆预测单元分割扫描过程,可以得到当前预测单元中索引为puPartIdx的预测单元分隔块的左上角样点位置,这个过程的输入是puPartIdx,输出值赋给( xO, yO ), x = 0..PuPartWidth( puPartIdx ),y = 0..PuPartHeight( puPartIdx )。
predL[ xO + x, yO + y ] = predPartL[ x, y ]
– 调用6.4节定义的位于去块效应滤波之前的变换系数解码过程和图像重建过程,输入是predL和puPartIdx,输出是当前预测单元分割S’L的重建样点。
1.1.1.1 IntraPredMode的推导过程
本过程的输入是索引puPartIdx和先前(按照解码顺序)已经得到的相邻预测单元的变量序列IntraPredMode(如果可用)。
本过程的输出是变量IntraPredMode[ puPartIdx ]。
表6-1定义了IntraPredMode[ puPartIdx ]的值和相应的名称。
表6-1 IntraPredMode[ puPartIdx ]及相关名称的规范
IntraPredMode |
IntraPredType [ puPartIdx ] |
IntraPredAngleID |
0 |
Intra_Vertical |
0 |
1 |
Intra_Horizontal |
0 |
2 |
Intra_DC |
- |
3 |
Intra_Vertical |
-8 |
4 |
Intra_Vertical |
-4 |
5 |
Intra_Vertical |
+4 |
6 |
Intra_Vertical |
+8 |
7 |
Intra_Horizontal |
-4 |
8 |
Intra_Horizontal |
+4 |
9 |
Intra_Horizontal |
+8 |
10 |
Intra_Vertical |
-6 |
11 |
Intra_Vertical |
-2 |
12 |
Intra_Vertical |
+2 |
13 |
Intra_Vertical |
+6 |
14 |
Intra_Horizontal |
-6 |
15 |
Intra_Horizontal |
-2 |
16 |
Intra_Horizontal |
+2 |
17 |
Intra_Horizontal |
+6 |
18 |
Intra_Vertical |
-7 |
19 |
Intra_Vertical |
-5 |
20 |
Intra_Vertical |
-3 |
21 |
Intra_Vertical |
-1 |
22 |
Intra_Vertical |
+1 |
23 |
Intra_Vertical |
+3 |
24 |
Intra_Vertical |
+5 |
25 |
Intra_Vertical |
+7 |
26 |
Intra_Horizontal |
-7 |
27 |
Intra_Horizontal |
-5 |
28 |
Intra_Horizontal |
-3 |
29 |
Intra_Horizontal |
-1 |
30 |
Intra_Horizontal |
+1 |
31 |
Intra_Horizontal |
+3 |
32 |
Intra_Horizontal |
+5 |
33 |
Intra_Horizontal |
+7 |
表6-2定义了根据变量IntraPredMode和IntraPredModeNum相应的MappedMostProbable值。
表6-2 与IntraPredMode和IntraPredModeNum相应的MappedMostProbable值得规范
IntraPredModeNum [puPartIdx] IntraPredMode |
5 |
17 |
34 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
2 |
2 |
2 |
2 |
3 |
3 |
3 |
3 |
4 |
4 |
4 |
4 |
5 |
0 |
5 |
5 |
6 |
2 |
6 |
6 |
7 |
1 |
7 |
7 |
8 |
1 |
8 |
8 |
9 |
2 |
9 |
9 |
10 |
2 |
10 |
10 |
11 |
0 |
11 |
11 |
12 |
0 |
12 |
12 |
13 |
2 |
13 |
13 |
14 |
2 |
14 |
14 |
15 |
1 |
15 |
15 |
16 |
1 |
16 |
16 |
17 |
2 |
2 |
17 |
18 |
2 |
3 |
18 |
19 |
4 |
10 |
19 |
20 |
4 |
11 |
20 |
21 |
0 |
0 |
21 |
22 |
0 |
0 |
22 |
23 |
0 |
12 |
23 |
24 |
2 |
5 |
24 |
25 |
2 |
13 |
25 |
26 |
2 |
14 |
26 |
27 |
2 |
7 |
27 |
28 |
1 |
15 |
28 |
29 |
1 |
1 |
29 |
30 |
1 |
1 |
30 |
31 |
1 |
16 |
31 |
32 |
2 |
8 |
32 |
33 |
2 |
2 |
33 |
IntraPredMode[ puPartIdx ]由以下方式得到:
– 调用4.3.4.4节定义的相邻分割的推导过程,输入是puPartIdx,输出分别赋值给lcuAddrA, puIdxA, partIdxA, lcuAddrB, puIdxB及partIdxB。
– 应用以下步骤推导IntraPredMode[ puPartIdx ]:
– 变量intraPredModeN(N用A或B代替)由以下方式得到:
- 如果地址为lcuAddN的LCU不可用,intraPredModeN设为-1
- 否则,如果所有为puIdxN的预测单元(PU)不是以帧内预测模式编码的,intraPredModeN设为Intra_DC
- 否则,intraPredModeN设为IntraPredMode[ puPartIdxN ],这里IntraPredMode是分配给预测单元puIdxN的变量阵列。
– 程序如下:
MostProbable = Min( intraPredModeA, intraPredModeB )
if ( MostProbable >= IntraPredModeNum[ puPartIdx ] )
MostProbable = MappedMostProbable ( IntraPredModeNum[ puPartIdx ], MostProbable )
if ( MostProbable == -1 )
MostProbable = 2
if ( prev_intra_luma_pred_flag[ puPartIdx ] )
IntraPredMode[ puPartIdx ] = MostProbable
else
if ( rem_intra_luma_pred_mode[ puPartIdx ] < MostProbable )
IntraPredMode[ puPartIdx ] = rem_intra_luma_pred_mode[ puPartIdx ]
else
IntraPredMode[ puPartIdx ] = rem_intra_luma_pred_mode[ puPartIdx ] + 1
1.1.1.2 帧内样点预测
对每个PU分割,位于本过程之后的是去块效应滤波之前的变换解码过程和图像重建过程。
本过程的输入是:
– PU分割索引puPartIdx
– 6.2.1.1小节推导的帧内预测模式IntraPredMode[ puPartIdx ]和
– 指示参考样点滤波的标志intra_luma_filt_flag
本过程的输出是索引为puPartIdx的PU分割的预测样点predPartL[ x, y ], 其中x = 0..PuPartWidth[ puPartIdx ],y = 0..PuPartHeight[ puPartIdx ]。
当前PU内索引为puPartIdx的PU分割的左上角样点位置是根据4.2.4.2节所定义的逆PU分割扫描过程得到的,这个过程的输入是puPartIdx,输出赋值给( xO, yO )。
令PuPartSize = max( PuPartWidth, PuPartHeight )。
去块效应滤波之前的PuPartSize*4 + 1个相邻重建亮度样点p[ x, y ]和pf[ x, y ]由以下方式得到,x = -1, y = -1..PuPartSize*2 - 1 还有x = 0..PuPartSize*2 - 1, y = -1:
– 亮度位置( xN, yN )规定如下:
xN = xO + x
yN = yO + y
– 调用4.3.5节所定义的相邻位置推导过程,输入是亮度位置( xN, yN ),输出是lcuAddrN和( xW, yW )。
– 如果lcuAddN可用,在覆盖亮度位置( xW, yW )的LCU块lcuAddN内的PU分割索引指定给partIdxN,否则,partIdxN标记为不可用。
– 每个样点p[ x, y ]由以下方式得到,其中x = -1, y = -1..PuPartSize*2 – 1,以及x = 0..PuPartSize*2 – 1, y = -1:
– 如果以下条件之一成立,样点p[ x, y ]被标记为“不可用于帧内预测”:
- lcuAddrN不可用
- partIdxN不可用
– 否则,样点p[ x, y ]标记为“可用于帧内预测”,并且p[ x, y ]的值等于地址为lcuAddrN的LCU内的( xW, yW )位置上的亮度样点。
当样点p[ x, -1 ], 其中x = PuPartSize..PuPartSize*2 – 1,标记为“不可用于帧内预测”,而样点p[ PuPartSize – 1, -1 ]标记为“可用于帧内预测”,那么样点p[ x, -1 ], 其中x = PuPartSize..PuPartSize*2 – 1得值使用p[ PuPartSize – 1, -1 ]的值替代,并且样点p[ x, -1 ], 其中x = PuPartSize..PuPartSize*2 – 1,标记为“可用于帧内预测”。
当样点p[-1, y], 其中y = PuPartSize..PuPartSize*2 – 1,标记为“不可用于帧内预测”,而样点p[ -1, PuPartSize – 1 ]标记为“可用于帧内预测”,那么样点p[ -1, y], 其中y = PuPartSize..PuPartSize*2 – 1得值使用p[ -1, PuPartSize – 1 ]的值替代,并且样点p[ -1, y ], 其中y = PuPartSize..PuPartSize*2 – 1,标记为“可用于帧内预测”。
对所有剩下标记为“不可用于帧内预测”的样点p[ x, y ],应用如下规则:
p[ x, y ] = 1 << ( ( BitDepthY + increased_bit_depth_luma ) – 1 )
当intra_luma_filt_flag == 1时,滤波后的相邻样点pf[ x, y ]构建方法如下,其中x = -1, y = -1..PuPartSize*2 – 1,x = 0..PuPartSize*2 - 1, y = -1:
pf[ -1, y ] = p[ -1, y ] y = 0 或 y=PuPartSize*2 – 1
pf[ -1, y ] = ( p[ -1, y + 1 ] + 2*p[ -1, y ] + p[ -1, y – 1 ] + 2 ) >> 2 否则
pf[ x, -1 ] = p[ x, -1 ] x = 0 或 x=PuPartSize*2 – 1
pf[ x, -1 ] = ( p[ x – 1, -1 ] + 2*p[ x, -1 ] + p[ x + 1, -1 ] + 2 ) >> 2 否则
pf[ -1, -1 ] = ( p[ -1, 0 ] + 2*p[ -1, -1 ] + p[ 0, -1 ] + 2 ) >> 2 x = 0 并且 y = 0
如果intra_luma_filt_flag == 0,滤波后的相邻样点值等于没有滤波的样点值:
pf[ x, y ] = p[ x, y ]
1.1.1.2.1 平面预测规范
当planar_flag == 1时使用这种帧内预测模式。预测样点predPartL[ x, y ]的值由以下公式推导,其中x, y = 0..PuPartSize – 1:
predPartL[ x, y ] = ((PuPartSize – (y+1))*TR(x) + (y+1)*BR(x) + (PuPartSize – (x+1))*LC(y) + (x+1)*RC(y) + PuPartSize)/(PuPartSize*2)
其中,TR像素数组的值推导如下:
– 如果样点p[ x, -1 ]标记为“可用于帧内预测”,x = 0..PuPartSize – 1
TR(i) = p[i,-1 ] with i = 0..PuPartSize - 1
– 否则,如果样点p[-1, y ]标记为“可用于帧内预测”,y = 0..PuPartSize – 1
TR(i) = ((PuPartSize – (i+1))*M(-1,0) + (i+1)*BRS + (PuPartSize>>1))/PuPartSize with i = 0..PuPartSize - 1
– 否则:
TR(i) = 128 with i = 0..PuPartSize - 1
其中,LC像素数组的值推导如下:
– 如果样点p[-1, y ]标记为“可用于帧内预测”,y = 0..PuPartSize – 1
LC(i) = p[ -1, i ] with i = 0..PuPartSize – 1
– 否则,如果样点p[ x, -1 ]标记为“可用于帧内预测”,x = 0..PuPartSize – 1
LC(j) = ((PuPartSize – (j+1))*M(0,-1) + (j+1)*BRS + (PuPartSize>>1))/PuPartSize
– 否则:
LC(i) = 128 with i = 0..PuPartSize - 1
其中,BR像素数组的值推导如下:
BR(i) = ((PuPartSize – (i+1)*LC[ PuPartSize-1 ] + (i+1)*BRS + (PuPartSize>>1))/PuPartSize with i = 0..PuPartSize - 1
其中,RC像素数组的值推导如下:
RC(i) = ((PuPartSize – (i+1))*TR[ PuPartSize-1 ] + (i+1)*BRS + (PuPartSize>>1))/PuPartSize 其中,i = 0..PuPartSize
其中,BRS的值推导如下:
BRS = DC + planar_delta_y
DC的计算与6.2.1.2.2.2节规定的DC预测中得到DC值的计算相同。
1.1.1.2.2 方向帧内预测规范
对planar_flag == 0的PU,使用帧内角度预测模式还是DC预测模式依赖于IntraPredMode[ puPartIdx ]的值。
1.1.1.2.2.1 帧内角度预测模式规范
当IntraPredType[ puPartIdx ]不等于Intra_DC时调用此预测模式。
令intraPredType等于IntraPredType[ puPartIdx ]。变量intraPredAngle作为IntraPredAngleID[ puPartIdx ]的函数,从下表格得到:
IntraPredAngleID[ puPartIdx ] |
-8 |
-7 |
-6 |
-5 |
-4 |
-3 |
-2 |
-1 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
intraPredAngle |
-32 |
-26 |
-21 |
-17 |
-13 |
-9 |
-5 |
-2 |
0 |
2 |
5 |
9 |
13 |
17 |
21 |
26 |
32 |
预测样点predPartL[ x, y ]的值由以下程序推导,其中,x, y = 0..PuPartSize – 1:
- For k=0..(PuPartSize – 1)
deltaInt = ((k+1)* intraPredAngle)/32
deltaFract = ((k+1)*abs(intraPredAngle))%32
if(intraPredAngle < 0)
deltaFract = (32 – deltaFract)%32
for l = 0..(PuPartSize – 1)
refMainInd = l+deltaInt+1
if(intraPredAngle >= 0)
if(deltaFract != 0)
p(k,l) = ((32-deltaFract)*refMain[refMainInd]+deltaFract*refMain[refMainInd+1]+16) >> 5
else
p(k,l) = refMain[refMainInd]
else
if(refMainInd >= 0)
p(k,l) = ((32-deltaFract)*refMain[refMainInd]+deltaFract*refMain[refMainInd+1]+16) >> 5
else
deltaIntSide = (32*32*(l+1)/abs(IntraPredAngle))>>5
deltaFractSide = (32*32*(l+1)/abs(IntraPredAngle))%32
refSideIndex = k+l-deltaIntSide
if(deltaFractSide)
p(k,l) = ((32-deltaFractSide)*refSide[refSideIndex]+
deltaFractSide*refSide[refSideIndex-1]+16) >> 5
else
p(k,l) = refSide[refSideIndex]
if(IntraPredType == Intra_Vertical)
predPartL[ x, y ] = p(k,l)
else
predPartL[ y, x ] = p(k,l)
end for
end for
其中,像素数组refMain和refSide如下指定:
– 如果intraPredType == Intra_Vertical
refMain[ x ] = p[ x, -1], 其中x = 0..PuPartSize – 1
refSide[ x ] = p[ -1, x], 其中 x = 0..PuPartSize – 1
– 否则
refMain[ x ] = p[ -1, x ], with x = 0..PuPartSize – 1
refSide[ x ] = p[ x, -1 ], with x = 0..PuPartSize – 1
1.1.1.2.2.2 Intra_DC预测模式规范
当IntraPredType[ puPartIdx ]等于Intra_DC时调用此预测模式。
依赖于变量edge_based_prediction_flag,应用如下方式:
– 如果edge_based_prediction_flag等于0,调用6.2.1.2.2.2.2节规定的DC预测模式过程。
– 如果edge_based_prediction_flag等于1,调用6.2.1.2.2.2.1节规定的边缘检测过程:
– 如果边缘检测过程输出值edge_detected等于0,调用6.2.1.2.2.2.2节规定的DC预测模式过程。
– 如果边缘检测过程输出值edge_detected等于1,调用6.2.1.2.2.2.3节规定的基于边缘的预测过程。
1.1.1.2.2.2.1 边缘检测过程规范
边缘检测过程使用Sobel操作子处理已解码的亮度样点。当IntraPredMode[ puPartIdx ]等于Intra_DC并且edge_based_prediction_flag等于1时调用本过程。
本过程的输入是:
– PU分割索引puPartIdx。
– threshold_edge的值。
本过程的输出是:
– edge_detected的值,依赖于下面所描述的对已重建像素进行Sobel操作的结果。
– 如果edge_detected的值等于1,如下所描述的检测边缘的水平与垂直方向的坐标dir[i],i=0,1。
当前PU内索引为puPartIdx的PU分割的左上角样点位置是根据4.2.4.2节所定义的逆PU分割扫描过程得到的,这个过程的输入是puPartIdx,输出赋值给( xOE, yOE )。
令PuPartSize等于max( PuPartWidth, PuPartHeight )。
去块效应滤波过程之前的16*PuPartSize + 16个相邻解码亮度样点pE[ x, y ]的推导如下,其中,x = -4..-1, y = -4..PuPartSize*2 - 1,x = 0..PuPartSize*2 - 1, y = -4..-1:
– 亮度位置( xNE, yNE )规定如下:
xNE = xOE + x
yNE = yOE + y
– 调用4.3.5节所定义的相邻位置推导过程,输入是亮度位置( xNE, yNE ),输出是lcuAddrNE和( xWE, yWE )。
– 如果lcuAddNE可用,在覆盖亮度位置( xWE, yWE )的LCU块lcuAddNE内的PU分割索引指定给partIdxNE,否则,partIdxNE标记为不可用。
– 每个样点pE [ x, y ]由以下方式得到,其中x = -4..-1, y = -4..PuPartSize*2 – 1,以及x = 0..PuPartSize*2 – 1, y = -4..-1:
– 如果以下条件之一成立,样点pE [ x, y ]被标记为“不可用于帧内预测”:
- lcuAddrNE不可用
- partIdxNE不可用
– 否则,样点pE [ x, y ]标记为“可用于帧内预测”,并且pE [ x, y ]的值等于地址为lcuAddrNE的LCU内的( xWE, yWE )位置上的亮度样点。
– 对每个被标记为“可用于帧内预测”的样点pE[ x, y ],其中x = -4..-1, y = -4..PuPartSize*2 – 1及x = 0..PuPartSize*2 – 1, y = -4..-1,使用如下方式推导:
pE[ x, y ] = ( pE[ x, y ] + ( 1 << (increased_bit_depth_luma – 1 ) ) ) >> increased_bit_depth_luma
令norm_max为初始值为0 的整数。
对x = -3, -2,y = -3..2*PuPartSize-2, 及x = -1..2*PuPartSize-2,y = -3,-2:
– 如果样点pE[x,y], pE[x-1,y-1], pE[x-1,y], pE[x-1,y+1], pE[x,y-1], pE[x,y+1], pE[x+1,y-1], pE[x+1,y]及pE[x+1,y+1]被标记为“可用于帧内预测”,gradX和gradY的值计算如下:
gradX = – pE[x-1,y-1] – 2 * pE[x-1,y] – pE[x-1,y+1] + pE[x+1,y-1] + 2 * pE[x+1,y] + pE[x+1,y+1]
gradY = – pE[x-1,y-1] – 2 * pE[x,y-1] – pE[x+1,y-1] + pE[x-1,y+1] + 2 * pE[x,y+1] + pE[x+1,y+1]
– 如果|gradX|²+|gradY|² > norm_max,以gradX, gradY, x, y, PuPartWidth和PuPartHeight的值作为输入,调用下面描述的边缘推导过程。
– 如果调用了边缘推导过程并且输出值cross_block等于1,那么gradY的值赋给dir[0],gradX值赋给dir[1],|gradX|²+|gradY|²的结果赋给norm_max。
如果norm_max的最终值大于等于(threshold_edge << 8),edge_detected设为1。否则,edge_detected的值设为0,并且dir[0]和dir[1]的值都设为0.
边缘推导过程
此过程的输入为:
– 梯度值gradX和gradY
– 值x和y.
– 分割单元的宽度和高度PuPartWidth, PuPartHeight
此过程的输出是cross_block。
cross_block初始化为0。
如果gradX的值为负:
gradX = – gradX
gradY = – gradY
如果gradX的值不等于0,计算and的值:
如果并且,cross_block的值设为1。
如果并且, cross_block的值设为1。
如果gradY的值为正:
gradX = – gradX
gradY = – gradY
如果gradY的值不等于0,计算and的值:
如果并且,cross_block的值设为1.
如果并且,cross_block的值设为1.
1.1.1.2.2.2.2 DC预测模式规范
满足如下条件时调用本过程:
– 当IntraPredMode[ puPartIdx ]等于Intra_DC,或
– 当edge_based_prediction_flag等于1,或edge_based_prediction_flag等于0而且6.2.1.2.2.2.1节描述的边缘检测过程的输出值edge_detected等于0.
预测样点predPartL[ x, y ]的值推导如下,其中,x, y = 0..PuPartSize – 1:
– 如果所有的样点p[ x, -1 ],x = 0..PuPartSize-1,和p[ -1, y ],y = 0..PuPartSize-1,被标记为“可用于帧内预测”,预测样点predPartL[ x, y ]的值推导如下,其中x, y = 0..PuPartSize-1:
predPartL[ x, y ] = >> (k+1), 其中,x, y = 0..PuPartSize – 1,2k = PuPartSize
– 否则,如果任何样点p[ x, -1 ], x = 0..PuPartSize-1,被标记为“不可用于帧内预测”,并且所有的样点p[ -1, y ], y = 0..PuPartSize-1,被标记为“可用于帧内预测”,预测样点predPartL[ x, y ]的值推导如下,其中x, y = 0..PuPartSize-1:
predPartL[ x, y ] = >> k, 其中, x, y = 0..PuPartSize – 1,2k = PuPartSize
– 否则,如果所有的样点p[ x, -1 ],x = 0..PuPartSize-1,被标记为“可用于帧内预测”,而且任何样点p[ -1, y ], y = 0..PuPartSize-1,被标记为“不可用于帧内预测”,预测样点predPartL[ x, y ]的值推导如下,其中x, y = 0..PuPartSize-1:
predPartL[ x, y ] = >> k, 其中 x, y = 0..PuPartSize – 1,2k = PuPartSize
– 否则,预测样点predPartL[ x, y ]的值推导如下,其中x, y = 0..PuPartSize-1:
predPartL[ x, y ] = 1 << ( ( BitDepthY + increased_bit_depth_luma ) – 1 )
1.1.1.2.2.2.3 基于边缘的预测模式规范
当IntraPredMode[ puPartIdx ]等于Intra_DC,edge_based_prediction_flag等于1,并且6.2.1.2.2.2.1节描述的边缘检测过程输出值edge_detected等于1时调用本过程。
本过程的输入是:
– PU分割索引puPartIdx。
– 6.2.1.2.2.2.1节规定的边缘检测过程计算的dir[0]和dir[1]值。
本过程的输出是索引为puPartIdx的PU分割的预测样点predPartL[ x, y ], 其中x = 0..PuPartWidth[ puPartIdx ],y = 0..PuPartHeight[ puPartIdx ]。
当前PU内索引为puPartIdx的PU分割的左上角样点位置是根据4.2.4.2节所定义的逆PU分割扫描过程得到的,这个过程的输入是puPartIdx,输出赋值给( xOEP, yOEP )。
令PuPartSize = max( PuPartWidth, PuPartHeight )。
去块效应滤波之前的PuPartSize*4 + 1个相邻重建样点pEP [ x, y ]由以下方式得到,x = -1, y = -1..PuPartSize*2 - 1 及x = 0..PuPartSize*2 - 1, y = -1:
– 亮度位置( xNEP, yNEP )规定如下:
xNEP = xOEP + x
yNEP = yOEP + y
– 调用4.3.5节所定义的相邻位置推导过程,输入是亮度位置( xNEP, yNEP ),输出是lcuAddrNEP和( xWEP, yWEP )。
– 如果lcuAddNEP可用,在覆盖亮度位置( xWEP, yWEP )的LCU块lcuAddN内的PU分割索引指定给partIdxNEP,否则,partIdxNEP标记为不可用。
– 每个样点pEP [ x, y ]由以下方式得到,其中x = -1, y = -1..PuPartSize*2 – 1,以及x = 0..PuPartSize*2 – 1, y = -1:
– 如果以下条件之一成立,样点pEP [ x, y ]被标记为“不可用于帧内预测”:
lcuAddrNEP不可用
partIdxNEP不可用
– 否则,样点pEP [ x, y ]标记为“可用于帧内预测”,并且pEP [ x, y ]的值等于地址为lcuAddrNEP的LCU内的( xWEP, yWEP )位置上的亮度样点。
预测样点predPartL[ x, y ]值通过周围样点的线性内插得到,周围样点使用dir[0]和dir[1]值定义的预测方向。计算如下:
– 如果dir[0]的值不等于0,并且至少一个样点pEP[z,-1],z=-1..2*PuPartSize-1,被标记为“可用于帧内预测”, 值推导如下:
计算下面四个值:
如果=0
如果不等于0
如果和都被标记为“可用于帧内预测”,那么predup[x,y]标记为“计算过的”,推导如下(图1举例):
否则,predup[x,y]标记为“没有计算过”。
图1帧内编码的基于边缘预测
– 如果dir[1]的值不等于0,并且至少一个样点pEP[-1,z],z=-1..2*PuPartSize-1,被标记为“可用于帧内预测”,值推导如下:
计算下面四个值:
如果等于0
如果不等于0
如果和都被标记为“可用于帧内预测”,那么predleft [x,y]标记为“计算过的”,推导如下:
否则,predleft [x,y]标记为“没有计算过”。
– 如果predup[x,y]和predleft[x,y]都标记为“计算过的”,预测样点predPartL[ x, y ]推导如下:
predPartL[ x, y ] = ( predup[x,y] + predleft[x,y] ) >> 1
– 如果predup[x,y]标记为“计算过的”,而predleft[x,y]标记为“没有计算过”,预测样点predPartL[ x, y ]推导如下:
predPartL[ x, y ] = predup[x,y]
– 如果predleft [x,y]标记为“计算过的”,而predup [x,y]标记为“没有计算过”,预测样点predPartL[ x, y ]推导如下:
predPartL[ x, y ] = predleft[x,y]
如果predup[x,y]和predleft[x,y]都标记为“没有计算过”,预测样点predPartL[ x, y ]推导如下:
如果x = 0, y = 0,并且 pEP[-1,-1]标记为“可用于帧内预测”
如果x = 0, y = 0,pEP[-1,-1]标记为“不可用于帧内预测”,并且pEP[0,-1]标记为“可用于帧内预测”
如果x = 0, y = 0,pEP[-1,-1]标记为“不可用于帧内预测”,并且pEP[-1,0]标记为“可用于帧内预测”
predPartL[ x, y ] = predPartL[ x, y-1 ] 如果 x = 0
predPartL[ x, y ] = predPartL[ x-1, y ] 如果 y = 0
predPartL[ x, y ] = ( 2*predPartL[ x-1, y-1 ] + predPartL[ x, y-1 ] + predPartL[ x-1, y ] ) >> 2对其它所有情况
HEVC标准(draft)翻译--亮度帧内预测相关推荐
- [HEVC] HEVC学习(五) —— 帧内预测系列之三
[HEVC] HEVC学习(五) -- 帧内预测系列之三 今天主要介绍帧内预测一个很重要的函数initAdiPattern,它的主要功能有三个,(1)检测当前PU的相邻样点包括左上.上.右上.左.左下 ...
- HEVC学习(六) —— 帧内预测系列之四
本文主要把实现亮度分量帧内预测的主函数的大体框架通过代码注释的方式介绍一下. [cpp] view plain copy Void TEncSearch::estIntraPredQT( TComD ...
- HEVC学习(五) —— 帧内预测系列之三
由于研究的需要,现将一晨不变大神的关于HEVC帧内预测的相关博客进行转载,方便自己查阅.一直都看一晨不变大神的帖子,受益匪浅.原著博客地址:http://blog.csdn.net/HEVC_CJL/ ...
- HEVC学习-帧内预测-亮度分量预测主函数
QP的详解:https://blog.csdn.net/liangjiubujiu/article/details/80569391 代码部分:https://blog.csdn.net/HEVC_C ...
- HEVC亮度分量帧内预测模式代码详解
作者:66 (转载请注明出处) 从我自身的学习历程来看,建议大家先把理论扎实了再去理解代码,代码里也有注释,与理论的地方一对应加上一点C编程基础很容易就能理解. 我们先了解相关理论,此处可参考这一篇博 ...
- HEVC算法和体系结构:预测编码之帧内预测
预测编码之帧内预测(Intra-Picture Prediction) 预测编码(Prediction Coding)是视频编码的核心技术之一,指利用已编码的一个或几个样本值,根据某种模型或方法,对当 ...
- Overview of HEVC之4 帧内预测
帧内预测是根据传输块的尺寸进行操作的,并且空间上相邻传输块的先前解码的边界像素被用来形成预测信号,对4*4到32*32的传输块定义了33种不同的方向预测.图6显示了可能的预测方向.另外也用到了平面预测 ...
- HEVC帧内预测参考相邻帧代码解析
作者:66 (转载请注明出处) 参考链接:http://blog.csdn.net/hevc_cjl/article/details/8200793 亮度分量的帧内预测涉及到的模块比较多,CU-> ...
- 视频编码(结构、帧内预测、帧间预测)参考自公众号Video Coding
编码结构 H.265/HEVC(高效视频编码)提出了编码树单元CTU(Coding Tree Unit),CTU按四叉树方式向下划分成CU(Coding Unit).VCC允许的最大CTU尺寸为128 ...
最新文章
- 对Java泛型的简单理解
- 【练习】c++分别用链队列和普通队列输出杨辉三角
- Redis缓存与数据库双写一致性
- 允许网站使用相机和麦克风_手机使用应用时总是需要获取权限,这3个权限不能随意给,望周知...
- 中山大学校队选拔赛第二试题试题3【Compressed suffix array】-------2015年2月8日
- 程序员述职报告范文_物流人员述职报告范文(通用5篇)
- 北外发布2019就业质量报告,超50人就业于外交部,本科生平均年薪12.2万
- php期末作业经验,期末作业.php
- 【BZOJ4561】[JLoi2016]圆的异或并
- 智能优化算法:类电磁机制算法 - 附代码
- ICSharpCode.SharpZipLib实现压缩解压缩
- 2011-2017年中国各地政府BIM相关标准政策汇总
- 【Linux】安装系统的时候遇到grub-install Error 问题的解决,超详细傻瓜式教程
- Unity3D 唤醒微信 打开微信(非微信登录、微信分享)
- 51单片机数码管显示60秒倒计时(C语言)
- 官宣!微软跨平台 UI 框架 .NET MAUI 6 正式发布!
- 百度搜索广告投放的展现位置!百度推广广告是如何扣费的?
- Python3利用VirusTotal的vt库通过API上传样本
- 【敏捷开发每日一贴】DoD“完成”的定义
- 软件服务与汽车修理技术