H.266/VVC技術學習53:Affine相關

1 簡介

Affine表示仿射(Affine motion compensated prediction)。
在HEVC中,僅將平移運動模型應用於運動補償預測(MCP)。但是在現實世界中,有多種運動,例如放大/縮小,旋轉,透視運動和其他不規則運動。
在VVC中,爲應對上述運動,應用了基於塊的仿射變換運動補償預測。
如下圖所示,該塊的仿射運動場由兩個控制點(4參數)或三個控制點運動矢量(6參數)的運動信息描述。
在這裏插入圖片描述

1.1 計算方法

4參數模型下,在(x,y)點的小塊的Mv計算如下:
在這裏插入圖片描述
6參數模型下,在(x,y)點的小塊的Mv計算如下:
在這裏插入圖片描述
其中(mv0x,mv0y)是左上角控制點MV, (mv1x, mv1y) 是右上角控制點MV,(mv2x, mv2y) 左下角控制點MV。

1.2 子塊大小

爲了簡化運動補償預測,應用了基於塊的仿射變換預測。
1、爲了導出每個4×4亮度子塊的運動矢量,根據上述等式計算每個子塊的中心樣本的運動矢量,如下圖所示,並四捨五入爲1/16像素精度。然後,將運動補償插值濾波器應用於生成具有導出運動矢量的每個子塊的預測。
2、色度分量的子塊大小也設置爲4×4。將4×4色度子塊的MV計算爲四個對應的4×4亮度子塊的MV的平均值。
在這裏插入圖片描述

與平移運動幀間預測一樣,仿射運動幀間預測模式也有兩種:仿射AMVP模式和仿射merge模式。
兩者的區別:對於仿射merge方式無需傳輸一些額外的索引值,只需傳輸索引即可,而仿射AMVP要傳MVD等內容。
**術語:
CPMV:Affine的MV。
繼承:當前CU的相鄰CU是由affine得到的,那麼把相鄰CU的控制點的MV,直接作用到當前CU上。
構造:當前CU的相鄰CU的MV
**

2 Affine merge

Affine merge模式可應用於寬度和高度均大於或等於8的CU。
在此模式下,當前CU的CPMV基於空間相鄰CU的運動信息生成。
Affine merge模式裏面需要構造一個屬於自己的,存有5個值(五個值是指五組MV集合,每一組有2個或3個MV)的列表。這5個進行競爭,找到最好的併發信號以指示將用於當前CU的索引。這5個值的列表構造方法如下:

以下三種CPVM候選類型用於形成Affine merge候選列表:
1)使用相鄰CU的CPMV,推斷出的繼承的仿射merge候選(最多2個);
2)使用相鄰CU的MV,構造出的仿射merge候選者CPMVP(共6種組合,儘量填到5個);
3)零MV(如不足5個時使用)。

2.1 繼承Affine merge候選

在VVC中,最多有兩個繼承的Affine候選,它們是從相鄰塊的仿射運動模型導出的,一個來自左相鄰CU,一個來自上相鄰CU。候選塊如下圖所示。
在這裏插入圖片描述
1、對於左預測變量,掃描順序爲A0到 A1;
2、對於上預測變量,掃描順序爲B0到B1再到B2。
3、僅選擇來自雙方的第一個候選(一般A0和B0)。在兩個候選之間不執行冗餘檢查。

當識別出相鄰的仿射CU時,其控制點MV被用於導出當前CU的仿射merge列表中的CPMVP候選。
在這裏插入圖片描述
如圖所示,如果以仿射模式對相鄰的左下塊A進行編碼,則獲得包含塊A的CU的左上角,右上角和左下角的運動矢量v2,v3和v4。
1、如果塊A使用4參數仿射模型時,將根據v2和v3計算當前CU的CPMV1和CPMV2;
2、如果塊A使用6參數仿射模型時,則根據v2,v3和v4計算當前CU的CPMV1、CPMV2和CPMV3。

構成的一組列表候選種這2或3個CPMV直接作用到Cur(當前CU)上,進行仿射旋轉。

2.2 構造Affine merge候選

構造Affine候選是指通過組合每個控制點的相鄰平移運動信息來構造候選。控制點的運動信息是從下圖的指定空間相鄰獲得的:
在這裏插入圖片描述

CPMVk(k = 1,2,3,4)表示第k個控制點。
1、對於CPMV1,檢查B2-> B3-> A2塊,並使用第一個可用塊的MV;
2、對於CPMV2,檢查B1-> B0塊;
3、對於CPMV3,檢查A1-> A0塊;
4、對於CPMV4,檢查TMVP是否可用。

在獲得四個控制點的MV之後,基於這些運動信息構造Affine merge候選。控制點MV的以下組合用於按順序構建:
1、{CPMV1,CPMV2,CPMV3}
2、{CPMV1,CPMV2,CPMV4}
3、{CPMV1,CPMV3,CPMV4}
4、{CPMV2,CPMV3,CPMV4}
5、{CPMV1,CPMV2}
6、{CPMV1,CPMV3}

3個MV可以構成6參數的仿射merge候選,2個MV可以構成4參數仿射merge候選。爲了避免運動縮放過程,如果控制點的參考索引不同,則將丟棄控制點MV的相關組合。

2.3 零MV候選

在檢查繼承的仿射merge候選和構造的仿射meger候選之後,如果列表仍然不完整,則將零MV插入到列表的末尾。

3 Affine AMVP

Affine AMVP模式可應用於寬度和高度均大於或等於16的CU。限制:同一參考幀。
在比特流中發信號通知CU級別的仿射標誌以指示是否使用仿射AMVP模式,然後發信號通知另一個標誌以指示是否4參數仿射或6參數仿射。

在這種模式下,當前CU的CPMV和其預測變量CPMVP的差MVD在比特流中用信號發送。
仿射AVMP候選列表大小爲2,它是通過使用以下四種方式找到CPMV候選,從而順序生成的:
1)來自相鄰CU的CPMV推斷的繼承的仿射AMVP候選
2)來自相鄰CU的導出MV獲取的仿射AMVP候選CPMVP
3)來自相鄰CU的MV
4)零MV候選

3.1 繼承Affine AMVP候選

繼承的仿射AMVP候選的檢查順序與繼承的仿射merge候選者的檢查順序相同,下面回顧一下:
在這裏插入圖片描述
1、對於左預測變量,掃描順序爲A0到 A1;
2、對於上預測變量,掃描順序爲B0到B1再到B2。

唯一的區別是,對於AVMP候選,僅考慮具有與當前塊中相同的參考幀的仿射CU。將繼承的仿射運動預測變量插入候選列表時,不應用冗餘檢測過程。

3.2 構造Affine AMVP候選

構造的AMVP候選依然從相鄰塊中派生。同樣使用Affine merge候選構造中相同的檢查順序。下面我們再次回顧一下:
在這裏插入圖片描述

CPMVk(k = 1,2,3,4)表示第k個控制點。
1、對於CPMV1,檢查B2-> B3-> A2塊,並使用第一個可用塊的MV;
2、對於CPMV2,檢查B1-> B0塊;
3、對於CPMV3,檢查A1-> A0塊;
4、對於CPMV4,檢查TMVP是否可用。
另外,還檢查相鄰塊的參考幀索引。使用檢查順序中的第一個塊,該塊進行了幀間編碼並具有與當前CU中相同的參考幀。
不同於Affine merge,它得到的MV並不是排列組成作爲候選,而是直接應用。

1、當使用4參數仿射模式對當前CU進行編碼,並且兩個CPMV都是可用的時,它們被添加爲仿射AMVP列表中的一個候選對象。
2、當使用6參數仿射模式對當前CU進行編碼,並且所有三個CPMV均可用時,它們被添加爲仿射AMVP列表中的一個候選對象。
3、以上兩個條件不成立時,構造Affine AMVP候選不可用。

3.3 相鄰塊的MV候選

如果在檢查繼承的仿射AMVP候選者和構造AMVP候選者之後,仿射AMVP列表候選者仍小於2,則將按順序添加mv0,mv1和mv2(當這些MV可用時),作爲平移MV來預測當前CU的所有控制點MV。

3.4 零MV候選

最後,如果仿射AMVP列表仍不滿,則使用零MV來填充。

4 Affine運動信息存儲

在VVC中,仿射CU的CPMV存儲在單獨的緩衝區中。
1、存儲的CPMV僅用於爲最近編碼的CU以仿射merge模式和仿射AMVP模式生成繼承的CPMVP。
2、從CPMV派生的子塊MV用於運動補償,MV派生,合併MV /平移MV的AMVP列表和去方塊濾波。

爲了避免額外CPMV的圖片行緩衝區,對來自上方CTU的CU的仿射運動數據繼承與來自正常相鄰CU的繼承進行區別對待。
1、如果用於仿射運動數據繼承的候選CU在上面CTU行中,則將行緩衝區中的左下和右下子塊MV而不是CPMV用於仿射MVP推導。這樣,CPMV僅存儲在本地緩衝區中。
2、如果候選CU被6參數仿射編碼,則仿射模型降級爲4參數模型。如下圖所示,沿着頂部CTU邊界,CU的左下和右下子塊運動矢量用於仿射繼承底部CTU中的CU。
在這裏插入圖片描述

5 PROF

PROF是指使用Affine模式的光流進行預測細化。
與基於像素的運動補償相比,基於子塊的仿射運動補償可以節省內存訪問帶寬並降低計算複雜度,但會降低預測精度。爲實現更精細的運動補償粒度,使用光流預測細化(PROF)來細化基於子塊的仿射運動補償預測,而無需增加用於運動補償的內存訪問帶寬;在VVC中,在執行基於子塊的仿射運動補償後,通過添加由光流方程得出的差。

5.1 步驟

PROF描述爲以下四個步驟:
步驟1)執行基於子塊的仿射運動補償以生成子塊預測I(i,j)。
步驟2)使用3抽頭濾波器[-1,0,1]在每個樣本位置計算子塊預測的空間梯度gx (i,j) 和 gy (i,j)。梯度計算與BDOF中的梯度計算完全相同。算式中shift1用於控制漸變的精度。將子塊(即4x4)預測在每側擴展一個樣本以進行梯度計算。爲避免額外的內存帶寬和額外的插值計算,從參考圖片中最近的整數像素位置複製了擴展邊界上的那些擴展樣本。
在這裏插入圖片描述
步驟3)通過以下光流方程計算亮度預測細化,下列算式中其中,Δv(i,j) 是爲樣本位置(i,j)計算的樣本MV(用v(i,j)表示)與樣本(i,j)所屬的子塊的子塊MV之差,如下圖所示。其中Δv(i,j)以1/32 像素精度爲單位進行量化。
在這裏插入圖片描述
在這裏插入圖片描述
由於仿射模型參數和相對於子塊中心的樣本位置不會在子塊之間更改,因此可以爲第一個子塊計算Δv(i,j),並在同一CU中將其重新用於其他子塊。令 dx(i,j) and dy(i,j) 是從樣本位置(i,j) 到子塊(xsB,ysB) 的中心的水平和垂直偏移,Δv(x,y)可以通過以下公式得出:
在這裏插入圖片描述
爲了保持準確性,子塊的輸入(x_SB,y_SB )計算爲((WSB-1)/2, (HSB-1)/2),其中WSB和HSB分別是子塊的寬度和高度。

對於4參數affine模型:
在這裏插入圖片描述
對於6參數affine模型:
在這裏插入圖片描述
步驟4)最後,將亮度預測細化ΔI(i,j)添加到子塊預測I(i,j)。最終預測I’生成爲以下等式:
在這裏插入圖片描述

5.2 限制

對於仿射編碼CU,在兩種情況下不應用PROF:
1)所有控制點MV都相同,這表明CU僅具有平移運動;
2)仿射運動參數大於指定的限制,因爲基於子塊的仿射MC降級爲基於CU的MC,以避免對大內存訪問帶寬的需求。

5.3 快速算法

一種快速編碼方法被應用於降低使用PROF進行仿射運動估計的編碼複雜度。
在以下兩種情況下,仿射運動估計階段未應用PROF:
1)如果此CU不是最大塊,並且其父塊未選擇Affine模式作爲其最佳模式,則不應用PROF,因爲當前CU可能選擇仿射模式,因爲最佳模式並不好;
2)如果四個仿射參數(C,D,E,F)的大小均小於預定義閾值,並且當前圖片不是低延遲圖片,則不應用PROF因爲對於這種情況,因爲PROF引入的改進很小。這樣,可以加速使用PROF的仿射運動估計。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章