【0053】
予測方向0(Vertical)(1602)の場合、以下の数式1によって予測を行う。
(数1)
・左側および上側に隣接するブロックが利用できる場合
Ref1 = p[x, -1]
Ref2 = (p[-1, 3] + p[-2, 3] + p[-3, 3] + p[-4, 3] + 2) >> 2
pred4x4[x, y] = ROUND(Ref1 + (Ref2 Ref1) * (y+1) / 4)
・上側に隣接するブロックが利用でき、左側に隣接するブロックが利用できない場合
Ref1 = p[x, -1]
Ref2 = 2 * p[x, -1] - p[x, -4]
pred4x4[x, y] = ROUND(Ref1 + (Ref2 Ref1) * (y+1) / 4)
予測方向1(Horizontal)(1603)の場合、以下の数式2によって予測を行う。
(数2)
・左側および上側に隣接するブロックが利用できる場合
Ref1 = p[-1, y]
Ref2 = (p[3, -1] + p[3, -2] + p[3, -3] + p[3, -4] + 2) >> 2
pred4x4[x, y] = ROUND(Ref1 + (Ref2 Ref1) * (x+1) / 4)
・左側に隣接するブロックが利用でき、上側に隣接するブロックが利用できない場合
Ref1 = p[-1, y]
Ref2 = 2 * p[-1, y] - p[-4, y]
pred4x4[x, y] = ROUND(Ref1 + (Ref2 Ref1) * (x+1) / 4)
予測方向3(Diagonal Down Left)(1605)の場合、以下の数式3によって予測を行う。
(数3)
・左側および上側に隣接するブロックが利用できる場合
・x=y=3の場合
Ref1 = (p[6, -1] + 3 * p[7, -1] + 2) >> 2
Ref2 = (p[-1, 2] + 3 * p[ -1, 3 ] + 2) >> 2
pred4x4[x, y] = ROUND( (Ref1 + Ref2) / 2)
・それ以外の場合(xが3ではなく、かつyが3ではない場合)
Ref1 = ( p[x+y, -1] + 2 * p[x+y+1, -1] + p[x+y+2, -1] + 2 ) >> 2
Ref2 = ( p[-1, Min(3, x+y)] + 2 * p[-1, Min(3, x+y+1)] + p[-1, Min(3
, x+y+2)] + 2 ) >> 2
pred4x4[x, y] = ROUND(Ref1 + (Ref2 Ref1) * (y+1) / (x+y+2))
・上側に隣接するブロックが利用でき、左側に隣接するブロックが利用できない場合
・x=y=3の場合
Ref1 = (p[6, -1] + 3 * p[7, -1] + 2) >> 2
Ref2 = (p[3, -1] + p[3, -2] + p[3, -3] + p[3, -4] + 2) >> 2
pred4x4[x, y] = ROUND( (Ref1 + Ref2) / 2)
・それ以外の場合(xが3ではなく、かつyが3ではない場合)
Ref1 = ( p[x+y, -1] + 2 * p[x+y+1, -1] + p[x+y+2, -1] + 2 ) >> 2
Ref2 = (p[3, -1] + p[3, -2] + p[3, -3] + p[3, -4] + 2) >> 2
pred4x4[x, y] = ROUND(Ref1 + (Ref2 Ref1) * (y+1) / (x+y+2))
予測方向4(Diagonal Down Right)(1606)の場合、以下の数式4によって予測を行う。
(数4)
・左側および上側に隣接するブロックが利用できる場合
・x>yの場合
Ref1 = (p[x-y-2, -1] + 2 * p[x-y-1, -1] + p[x-y, -1] + 2 ) >> 2
Ref2 = (p[3, -1] + p[3, -2] + p[3, -3] + p[3, -4] + 2) >> 2
pred4x4[x, y] = ROUND(Ref1 + (Ref2 - Ref1) * x / 3)
・x<yの場合
Ref1 = (p[-1, y-x-2] + 2 * p[-1, y-x-1] + p[-1, y-x] + 2 ) >> 2
Ref2 = (p[-1, 3] + p[-2, 3] + p[-3, 3] + p[-4, 3] + 2) >> 2
pred4x4[x, y] = ROUND(Ref1 + (Ref2 - Ref1) * y / 3)
・x=yの場合
Ref1 = (p[0, -1] + 2 * p[-1, -1] + p[-1, 0] + 2) >> 2
Ref2 = (p[3, -1] + p[3, -2] + p[-1, 3] + p[-2, 3] + 2) >> 2
pred4x4[x, y] = ROUND(Ref1 + (Ref2 - Ref1) * (x+1) / 4)
予測方向5(1607)(Vertical Right)の場合、以下の数式5によって予測を行う。
(数5)
zVR = 2 * x y としたとき、
・左側および上側に隣接するブロックが利用できる場合
・zVR = 0, 2, 4, 6の場合
Ref1 = (p[x-(y>>1)-1, -1] + p[x-(y>>1), -1] + 1) >> 1
Ref2 = (p[-1, 3] + p[-2, 3] + p[-3, 3] + p[-4, 3] + 2) >> 2
pred4x4[x, y] = ROUND(Ref1 + (Ref2 - Ref1) * (y+1) / 4)
・zVR = 1, 3, 5の場合
Ref1 = (p[x-(y>>1)-2, -1] + 2*p[x-(y>>1)-1, -1] + p[x-(y>>1), -1] + 2)
>> 2
Ref2 = (p[-1, 3] + p[-2, 3] + p[-3, 3] + p[-4, 3] + 2) >> 2
pred4x4[x, y] = ROUND(Ref1 + (Ref2 - Ref1) * (y+1) / 4)
・zVR = -1の場合
Ref1 = (p[-1, 0] + 2*p[-1, -1] + p[0, -1] + 2) >> 2
Ref2 = (p[-1, 3] + p[-2, 3] + p[-3, 3] + p[-4, 3] + 2) >> 2
pred4x4[x, y] = ROUND(Ref1 + (Ref2 - Ref1) * (y+1) / 4)
・それ以外(zVR = -2, -3の場合)
Ref1 = (-1, y-1] + 2*p[-1, y-2] + p[-1, y-3] + 2) >> 2
Ref2 = (p[-1, 3] + p[-2, 3] + p[-3, 3] + p[-4, 3] + 2) >> 2
pred4x4[x, y] = ROUND(Ref1 + (Ref2 - Ref1) * (y+1) / 4)
予測方向6(Horizontal Down)(1608)の場合、以下の数式6によって予測を行う。
(数6)
zHD = 2 * y x としたとき、
・左側および上側に隣接するブロックが利用できる場合
・zHD = 0, 2, 4, 6の場合
Ref1 = (p[-1, y-(x>>1)-1] + p[-1, y-(x>>1)] + 1) >> 1
Ref2 = (p[3, -1] + p[3, -2] + p[-1, 3] + p[-2, 3] + 2) >> 2
pred4x4[x, y] = ROUND(Ref1 + (Ref2 - Ref1) * (x+1) / 4)
・zHD = 1, 3, 5の場合
Ref1 = (p[-1, y-(x>>1)-2] + 2*p[-1, y-(x>>1)-1] + p[-1, y-(x>>1)] + 2)
>> 2
Ref2 = (p[3, -1] + p[3, -2] + p[-1, 3] + p[-2, 3] + 2) >> 2
pred4x4[x, y] = ROUND(Ref1 + (Ref2 - Ref1) * (x+1) / 4)
・zHD = -1の場合
Ref1 = (p[-1, 0] + 2*p[-1, -1] + p[0, -1] + 2) >> 2
Ref2 = (p[3, -1] + p[3, -2] + p[-1, 3] + p[-2, 3] + 2) >> 2
pred4x4[x, y] = ROUND(Ref1 + (Ref2 - Ref1) * (x+1) / 4)
・それ以外(zHD = -2, -3の場合)
Ref1 = (p[x-1, -1] + 2*p[x-2, -1] + p[x-3, -1] + 2) >> 2
Ref2 = (p[3, -1] + p[3, -2] + p[-1, 3] + p[-2, 3] + 2) >> 2
pred4x4[x, y] = ROUND(Ref1 + (Ref2 - Ref1) * (x+1) / 4)
予測方向7(Vertical Left)(1609)の場合、以下の数式7によって予測を行う。
(数7)
・左側および上側に隣接するブロックが利用できる場合
・y = 0, 2の場合
Ref1 = (p[x+(y>>1), -1] + p[x+(y>>1)+1, -1] + 1) >> 1
Ref2 = (p[-1, 3] + p[-2, 3] + p[-3, 3] + p[-4, 3] + 2) >> 2
pred4x4[x, y] = ROUND(Ref1 + (Ref2 - Ref1) * (y+1) / (x+y+2))
・それ以外(y = 1, 3の場合)
Ref1 = (p[x+(y>>1), -1] + 2 * p[x+(y>>1)+1, -1] + p[x+(y>>1)+2, -1]+ 2)
>> 2
Ref2 = (p[-1, 3] + p[-2, 3] + p[-3, 3] + p[-4, 3] + 2) >> 2
pred4x4[x, y] = ROUND(Ref1 + (Ref2 - Ref1) * (y+1) / (x+y+2))
・上側に隣接するブロックが利用でき、左側に隣接するブロックが利用できない場合
・y = 0, 2の場合
Ref1 = (p[x+(y>>1), -1] + p[x+(y>>1)+1, -1] + 1) >> 1
Ref2 = 2 * p[x, -1] - p[x, -4]
pred4x4[x, y] = ROUND(Ref1 + (Ref2 - Ref1) * (y+1) / (x+y+2))
・それ以外(y = 1, 3の場合)
Ref1 = (p[x+(y>>1), -1] + 2 * p[x+(y>>1)+1, -1] + p[x+(y>>1)+2, -1]+ 2)
>> 2
Ref2 = 2 * p[x, -1] - p[x, -4]
pred4x4[x, y] = ROUND(Ref1 + (Ref2 - Ref1) * (y+1) / (x+y+2))
予測方向8(Horizontal Up)(1610)の場合、以下の数式8によって予測を行う。
(数8)
zHU = x + 2 * y としたとき、
・左側および上側に隣接するブロックが利用できる場合
・zHU = 0, 2, 4の場合
Ref1 = (p[-1, y+(x>>1)] + p[-1, y+(x>>1)+1] + 1) >> 1
Ref2 = (p[3, -1] + p[3, -2] + p[-1, 3] + p[-2, 3] + 2) >> 2
pred4x4[x, y] = ROUND(Ref1 + (Ref2 - Ref1) * (x+1) / 4)
・zHU = 1, 3の場合
Ref1 = (p[-1, y+(x>>1)] + 2*p[-1, y+(x>>1)+1] + p[-1, y+(x>>1)+2] + 2)
>> 2
Ref2 = (p[3, -1] + p[3, -2] + p[-1, 3] + p[-2, 3] + 2) >> 2
pred4x4[x, y] = ROUND(Ref1 + (Ref2 - Ref1) * (x+1) / 4)
・zHU = 5の場合
Ref1 = (p[-1, 2] + 3*p[-1, 3] + 2) >> 2
Ref2 = (p[3, -1] + p[3, -2] + p[-1, 3] + p[-2, 3] + 2) >> 2
pred4x4[x, y] = ROUND(Ref1 + (Ref2 - Ref1) * (x+1) / 4)
・それ以外(zHU > 5の場合)
Ref1 = p[-1, 3]
Ref2 = (p[3, -1] + p[3, -2] + p[-1, 3] + p[-2, 3] + 2) >> 2
pred4x4[x, y] = ROUND(Ref1 + (Ref2 - Ref1) * (x+1) / 4)
・左側に隣接するブロックが利用でき、上側に隣接するブロックが利用できない場合
・zHU = 0, 2, 4の場合
Ref1 = (p[-1, y+(x>>1)] + p[-1, y+(x>>1)+1] + 1) >> 1
Ref2 = 2 * p[-1, y] - p[-4, y]
pred4x4[x, y] = ROUND(Ref1 + (Ref2 - Ref1) * (x+1) / 4)
・zHU = 1, 3の場合
Ref1 = (p[-1, y+(x>>1)] + 2*p[-1, y+(x>>1)+1] + p[-1, y+(x>>1)+2] + 2)
>> 2
Ref2 = 2 * p[-1, y] - p[-4, y]
pred4x4[x, y] = ROUND(Ref1 + (Ref2 - Ref1) * (x+1) / 4)
・zHU = 5の場合
Ref1 = (p[-1, 2] + 3*p[-1, 3] + 2) >> 2
Ref2 = 2 * p[-1, y] - p[-4, y]
pred4x4[x, y] = ROUND(Ref1 + (Ref2 - Ref1) * (x+1) / 4)
・それ以外(zHU > 5の場合)
Ref1 = p[-1, 3]
Ref2 = 2 * p[-1, y] - p[-4, y]
pred4x4[x, y] = ROUND(Ref1 + (Ref2 - Ref1) * (x+1) / 4)
上記の実施例では、2つの参照画素のうち符号化済み(復号化済み)の画素から選択できないものの予測(例えば
図4のステップ1における境界画素E、F、G、Hの予測)を、主に符号化済み隣接ブロックの同じ行(もしくは列)に属する画素の平均値によって行っているが、特に平均値でなくても、例えば最小値や最大値、あるいは中間値などを用いても良いし、これらの画素を用いた外挿予測や内挿予測など、どんな計算式を用いても良い。特に内挿予測を行う場合には線形補間、非線形補間などどのような方法を用いても良いし、外挿予測を行う場合には、例えば最小二乗法を用いた直線・放物線近似、ニュートン補間、ラグランジュ補間など、どのようなモデルを利用して予測を行っても構わない。