TW202211690A - 幀間預測方法、編碼器、解碼器以及電腦儲存媒介 - Google Patents

幀間預測方法、編碼器、解碼器以及電腦儲存媒介 Download PDF

Info

Publication number
TW202211690A
TW202211690A TW110123864A TW110123864A TW202211690A TW 202211690 A TW202211690 A TW 202211690A TW 110123864 A TW110123864 A TW 110123864A TW 110123864 A TW110123864 A TW 110123864A TW 202211690 A TW202211690 A TW 202211690A
Authority
TW
Taiwan
Prior art keywords
sub
block
motion vector
prediction
value
Prior art date
Application number
TW110123864A
Other languages
English (en)
Inventor
楊寧
Original Assignee
大陸商Oppo廣東移動通信有限公司
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 大陸商Oppo廣東移動通信有限公司 filed Critical 大陸商Oppo廣東移動通信有限公司
Publication of TW202211690A publication Critical patent/TW202211690A/zh

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/182Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a pixel
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/513Processing of motion vectors
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/523Motion estimation or motion compensation with sub-pixel accuracy
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/533Motion estimation using multistep search, e.g. 2D-log search or one-at-a-time search [OTS]

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

一種幀間預測方法、編碼器、解碼器以及電腦儲存媒介,解碼器解析位元流,獲取當前塊的預測模式參數;當預測模式參數指示使用幀間預測模式確定當前塊的幀間預測值時,確定當前塊的子塊的第一運動向量;其中,當前塊包括多個子塊;基於第一運動向量確定子塊的第一預測值,和像素位置與子塊之間的運動向量偏差;其中,像素位置為子塊內的像素點的位置;根據運動向量偏差確定二維濾波器的濾波係數;其中,二維濾波器用於按照預設形狀進行二次預測處理;基於濾波係數和第一預測值,確定子塊的第二預測值,將第二預測值確定為子塊的幀間預測值。

Description

幀間預測方法、編碼器、解碼器以及電腦儲存媒介
本申請涉及影像編解碼技術領域,尤其涉及一種幀間預測方法、編碼器、解碼器以及電腦儲存媒介。
在影像編解碼領域,為了兼顧性能和代價,一般情況下,在多功能影像編碼(Versatile Video Coding,VVC)及數位音影像編解碼技術標準工作組(Audio Video coding Standard Workgroup of China,AVS)中的仿射預測是基於子塊來實現的。目前,提出了使用光流原理的預測修正(prediction refinement with optical flow,PROF)使用光流原理對基於子塊的仿射預測進行修正,進而提高了壓縮性能。
然而,PROF的應用是基於子塊內的像素位置的運動向量與子塊運動向量的偏差非常小的情況,也就是說,子塊內的像素位置的運動向量與子塊運動向量的偏差非常小的情況下使用PROF的光流計算方法是有效的,但是,由於PROF依賴於基準位置的水平方向和垂直方向的梯度,在實際位置離基準位置較遠的情況下,基準位置的水平和垂直方向的梯度並不能真實的反映基準位置和實際位置之間的水平和垂直方向的梯度,因此,在子塊內的像素位置的運動向量與子塊運動向量的偏差較大的情況下,該方法就不是特別有效了。
本申請提出一種幀間預測方法、編碼器、解碼器以及電腦儲存媒介,可以大大提升編碼性能,從而提高了編解碼效率。
本申請的技術方案是這樣實現的:
第一方面,本申請實施例提供了一種幀間預測方法,應用於解碼器,該方法包括:
解析位元流,獲取當前塊的預測模式參數;
當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前塊的子塊的第一運動向量;其中,所述當前塊包括多個子塊;
基於所述第一運動向量確定所述子塊的第一預測值,和所述像素位置與子塊之間的運動向量偏差;其中,所述像素位置為所述子塊內的像素點的位置;
根據所述運動向量偏差確定二維濾波器的濾波係數;其中,所述二維濾波器用於按照預設形狀進行二次預測處理;
基於所述濾波係數和所述第一預測值,確定所述子塊的第二預測值,將所述第二預測值確定為所述子塊的幀間預測值。
第二方面,本申請實施例提供了一種幀間預測方法,應用於編碼器,該方法包括:
確定當前塊的預測模式參數;
當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前塊的子塊的第一運動向量;其中,所述當前塊包括多個子塊;
基於所述第一運動向量確定所述子塊的第一預測值,和所述像素位置與子塊之間的運動向量偏差;其中,所述像素位置為所述子塊內的像素點的位置;
根據所述運動向量偏差確定二維濾波器的濾波係數;其中,所述二維濾波器用於按照預設形狀使用二次預測;
基於所述濾波係數和所述第一預測值,確定所述子塊的第二預測值,將所述第二預測值確定為所述子塊的幀間預測值。
第三方面,本申請實施例提供了一種解碼器,所述解碼器包括解析單元,第一確定單元;
所述解析單元,用於解析位元流,獲取當前塊的預測模式參數;
所述第一確定單元,用於當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前塊的子塊的第一運動向量;其中,所述當前塊包括多個子塊;以及基於所述第一運動向量確定所述子塊的第一預測值,和所述像素位置與子塊之間的運動向量偏差;其中,所述像素位置為所述子塊內的像素點的位置;以及根據所述運動向量偏差確定二維濾波器的濾波係數;其中,所述二維濾波器用於按照預設形狀進行二次預測處理;以及基於所述濾波係數和所述第一預測值,確定所述子塊的第二預測值,將所述第二預測值確定為所述子塊的幀間預測值。
第四方面,本申請實施例提供了一種解碼器,所述解碼器包括第一處理器、儲存有所述第一處理器可執行指令的第一記憶體,當所述指令被執行時,所述第一處理器執行時實現如上所述的幀間預測方法。
第五方面,本申請實施例提供了一種編碼器,所述編碼器包括第二確定單元;
所述第二確定單元,用於確定當前塊的預測模式參數;以及當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前塊的子塊的第一運動向量;其中,所述當前塊包括多個子塊;以及基於所述第一運動向量確定所述子塊的第一預測值,和所述像素位置與子塊之間的運動向量偏差;其中,所述像素位置為所述子塊內的像素點的位置;以及根據所述運動向量偏差確定二維濾波器的濾波係數;其中,所述二維濾波器用於按照預設形狀使用二次預測;以及基於所述濾波係數和所述第一預測值,確定所述子塊的第二預測值,將所述第二預測值確定為所述子塊的幀間預測值。
第六方面,本申請實施例提供了一種編碼器,所述編碼器包括第二處理器、儲存有所述第二處理器可執行指令的第二記憶體,當所述指令被執行時,所述第二處理器執行時實現如上所述的幀間預測方法。
第七方面,本申請實施例提供了一種電腦儲存媒介,該電腦儲存媒介儲存有電腦程式,所述電腦程式被第一處理器和第二處理器執行時,實現如上所述的幀間預測方法。
本申請實施例所提供的一種幀間預測方法、編碼器、解碼器以及電腦儲存媒介,解碼器解析位元流,獲取當前塊的預測模式參數;當預測模式參數指示使用幀間預測模式確定當前塊的幀間預測值時,確定當前塊的子塊的第一運動向量;其中,當前塊包括多個子塊;基於第一運動向量確定子塊的第一預測值,和像素位置與子塊之間的運動向量偏差;其中,像素位置為子塊內的像素點的位置;根據運動向量偏差確定二維濾波器的濾波係數;其中,二維濾波器用於按照預設形狀進行二次預測處理;基於濾波係數和第一預測值,確定子塊的第二預測值,將第二預測值確定為子塊的幀間預測值。編碼器確定當前塊的預測模式參數;當預測模式參數指示使用幀間預測模式確定當前塊的幀間預測值時,確定當前塊的子塊的第一運動向量;其中,當前塊包括多個子塊;基於第一運動向量確定子塊的第一預測值,和像素位置與子塊之間的運動向量偏差;其中,像素位置為子塊內的像素點的位置;根據運動向量偏差確定二維濾波器的濾波係數;其中,二維濾波器用於按照預設形狀使用二次預測;基於濾波係數和第一預測值,確定子塊的第二預測值,將第二預測值確定為子塊的幀間預測值。也就是說,本申請提出的幀間預測方法,可以在基於子塊的預測之後,對運動向量與子塊的運動向量有偏差的像素位置,在基於子塊的第一預測值的基礎上進行基於點的二次預測,獲得第二預測值。其中,利用二維濾波器進行的基於點的二次預測,可以使用構成預設形狀的幾個點的訊息對第一預測值進行修正,最終獲得修正後的第二預測值,本申請提出的幀間預測方法能夠很好的適用於全部場景,大大提升編碼性能,從而提高了編解碼效率。
下面將結合本申請實施例中的附圖,對本申請實施例中的技術方案進行清楚、完整地描述。可以理解的是,此處所描述的具體實施例僅僅用於解釋相關申請,而非對該申請的限定。另外還需要說明的是,為了便於描述,附圖中僅示出了與有關申請相關的部分。
在影像圖像中,一般採用第一圖像分量、第二圖像分量和第三圖像分量來表徵當前塊(Coding Block,CB);其中,這三個圖像分量分別為一個亮度分量、一個藍色色度分量和一個紅色色度分量,具體地,亮度分量通常使用符號Y表示,藍色色度分量通常使用符號Cb或者U表示,紅色色度分量通常使用符號Cr或者V表示;這樣,影像圖像可以用YCbCr格式表示,也可以用YUV格式表示。
目前,通用的影像編解碼標準基於都採用基於塊的混合編碼框架。影像圖像中的每一幀被分割成相同大小(比如128×128,64×64等)的正方形的最大編碼單元(Largest Coding Unit,LCU),每個最大編碼單元還可以根據規則劃分成矩形的編碼單元(Coding Unit,CU);而且編碼單元可能還會劃分成更小的預測單元(Prediction Unit,PU)。具體地,混合編碼框架可以包括有預測、變換(Transform)、量化(Quantization)、熵編碼(EntropyCoding)、迴路濾波(In Loop Filter)等模組;其中,預測模組可以包括幀內預測(intra prediction)和幀間預測(inter prediction),幀間預測可以包括運動估計(motion estimation)和運動補償(motion compensation)。由於影像圖像的一個幀內相鄰像素之間存在很強的相關性,在影像編解碼技術中使用幀內預測方式能夠消除相鄰像素之間的空間冗餘;但是由於影像圖像中的相鄰幀之間也存在著很強的相似性,在影像編解碼技術中使用幀間預測方式消除相鄰幀之間的時間冗餘,從而能夠提高編碼效率。下述本申請將以幀間預測進行詳細描述。
幀間預測即使用已經編/解碼的幀來預測當前幀中需要編/解碼的部分,在基於塊的編解碼框架裡,需要編/解碼的部分通常是編碼單元或預測單元。這裡把需要編/解碼的編碼單元或預測單元統稱為當前塊。平移運動是影像中的一種常見而且簡單的運動方式,所以平移的預測也是影像編解碼中的一種傳統的預測方法。影像中的平移運動可以理解為一部分內容隨著時間的變化,從一個幀上的某一個位置移動到了另一個幀上的某一個位置。平移的一個簡單的單向預測可以用某一幀與當前幀之間的一個運動向量(motion vector,MV)來表示。這裡所說的某一幀為當前幀的一個參考幀,當前塊透過這個包含參考幀和運動向量的運動訊息可以找到參考幀上的一個與當前塊大小相同的參考塊,把這個參考塊作為當前塊的預測塊。理想的平移運動中,當前塊的內容在不同幀之間沒有變形、旋轉等變化以及亮度顏色的變化等,然而,影像中的內容並不總是符合這樣的理想情況。雙向預測在一定程度上可以解決上述問題。通常的雙向預測是指雙向的平移的預測。雙向預測即是用兩個參考幀和運動向量的運動訊息分別從兩個參考幀(兩個參考幀可能是同一個參考幀)找到兩個與當前塊大小相同的參考塊,利用這兩個參考塊生成當前塊的預測塊。生成方法包括平均、加權平均以及一些其他的計算等。
在本申請中,可以認為預測是運動補償的一部分,有些文獻會把本申請中的預測稱為運動補償,如本申請所說仿射預測,有些文獻會叫作仿射運動補償。
旋轉、放大、縮小、扭曲、形變等也是在影像中常見的變化,然而,普通的平移預測並不能很好地處理這種變化,於是仿射(affine)預測模型被應用於影像編解碼中,如VVC和AVS中的仿射,其中,VVC和AVS3的仿射預測模型相似。在旋轉、放大、縮小、扭曲、形變等變化中,可以認為當前塊不是所有點都使用相同的MV,因此需要匯出每一個點的MV。仿射預測模型用少量的幾個參數透過計算匯出每一個點的MV。VVC和AVS3的仿射預測模型都使用了2控制點(4參數)和3控制點(6參數)模型。2控制點即當前塊的左上角和右上角2個控制點,3控制點即當前塊的左上角、右上角和左下角3個控制點。示例性的,圖1為仿射模型的示意圖一,圖2為仿射模型的示意圖二,如圖1和2所示。因為每個MV包括一個x分量和一個y分量,所以2個控制點有4個參數,3個控制點有6個參數。
根據仿射預測模型可以為每一個像素位置匯出一個MV,每一個像素位置都可以在參考幀中找到其對應的位置,如果這個位置不是整像素位置,那麼需要透過插值的方法得出這個分像素位置的值。現在影像編解碼標準中使用的插值方法通常都是有限脈衝反應(Finite Impulse Response,FIR)濾波器來實現,而按這種方式實現複雜度(成本)是很高的。例如,在AVS3中,對亮度分量使用8抽頭的插值濾波器,而且普通模式分像素精度是1/4像素的,affine模式的分像素精度是1/16像素的。對每一個符合1/16像素精度的分像素點,需要使用水平方向的8個整像素和垂直方向8個整像素即64個整像素插值得到。圖3為像素的插值示意圖,如圖3所示,圓形像素是想要得到的分像素點,深色的正方形像素是該分像素對應的整像素的位置,它們兩個之間的向量就是分像素的運動向量,淺色的正方形像素是對圓形分像素位置的插值需要用到的像素,要得到該分像素位置的值,需要這些8x8的淺色的正方形像素區域的像素值進行插值,也包含深色的像素位置。
在傳統的平移的預測中,當前塊的每個像素位置的MV是相同的。如果進一步地引入子塊的概念,子塊的大小如4x4,8x8等。圖4為子塊插值的示意圖一,4x4的塊插值需要使用的像素區域如圖4所示。圖5為子塊插值的示意圖二,8x8的塊插值需要使用的像素區域如圖5所示。
如果一個子塊中的每個像素位置的MV是相同的。那麼一個子塊中的像素位置可以一起進行插值,從而分攤頻寬、使用同一個相位的濾波器以及共用插值過程的中間值。但是如果每一個像素點使用一個MV,那麼頻寬就會增加,而且可能會使用不同相位的濾波器以及不能共用插值過程的中間值。
基於點的仿射預測代價很高,因此,為了兼顧性能和代價,在VVC和AVS3中的仿射預測是基於子塊來實現的。AVS3中的子塊大小有4x4和8x8兩種大小,VVC中使用4x4的子塊大小。每一個子塊有一個MV,子塊內部的像素位置共用同一個MV。從而對子塊內部的所有像素位置統一做插值。透過上述方法,基於子塊的仿射預測與其他基於子塊的預測方法的運動補償複雜度相近。
可見,基於子塊的仿射預測方法中,子塊內部的像素位置共用同一個MV,其中,確定這個共用MV的方法是取當前子塊中心的MV。而對4x4、8x8等水平垂直方向上至少有一個是偶數個像素的子塊來說,其中心其實是落在非整數像素位置上的。目前的標準中都取一個整數像素的位置,例如,如對4x4子塊,取距離左上角位置為(2,2)的像素位置。對8x8子塊,取距離左上角位置為(4,4)的像素位置。
仿射預測模型可以根據當前塊所使用的控制點(2個控制點或3個控制點)匯出每一個像素位置的MV。在基於子塊的仿射預測中,根據上一段中所述像素位置計算出這個位置的MV,作為該子塊的MV。圖6為每個子塊的運動向量示意圖,如圖6所示,為了推導每個子塊的運動向量,每個子塊的中心採樣的運動向量如圖所示,取整到1/16精度,然後進行運動補償。
隨著技術的發展,一個叫做使用光流的預測改進技術PROF的方法被提出。這個技術可以在不增加頻寬的情況下,對基於塊的仿射預測的預測值進行改進。在基於子塊的仿射預測做完後,對每一個已完成基於子塊的仿射預測的像素點計算其水平方向和垂直方向的梯度。在VVC中PROF計算梯度時使用的是3抽頭的濾波器[-1,0,1],其計算方法和雙向光流(Bi-directional Optical flow,BDOF)的方法相同。之後,對每一個像素位置,計算其運動向量偏差,該運動向量偏差即為當前像素位置的運動向量與整個子塊使用MV的差值。這些運動向量偏差都可以根據仿射預測模型的公式計算得出。由於公式的特性,一些子塊的相同位置的運動向量偏差是相同的,對這些子塊,只需要計算出一組運動向量偏差,其他子塊可以直接複用這些值。對每一個像素位置,使用該點的水平垂直梯度及運動向量偏差(包括水平方向的偏差和垂直方向的偏差)計算出該像素位置的預測值的修正值,然後將原預測值,即基於子塊的仿射預測的預測值,加上預測值的修正值,便可以得到修正後的預測值。
計算水平垂直方向的梯度時,使用[-1,0,1]濾波器,也就是對當前像素位置,水平方向會使用到其左邊距離為一的像素位置和右邊距離為一的像素位置的預測值,垂直方向會使用到其上邊距離為一的像素位置和下邊距離為一的像素位置的預測值。如果當前像素位置是當前塊的邊界位置,那麼上述的幾個像素位置中有的會超過當前塊的邊界一個像素距離。使用當前塊的邊界的預測值向外填充一個像素距離的位置以滿足梯度計算,從而不需要額外地增加上述超過當前塊的邊界一個像素距離的預測值。由於梯度計算只需要使用基於子塊的仿射預測的預測值,所以不需要增加額外的頻寬。
在VVC標準文本中,對根據控制點的MV匯出當前塊的各個子塊的MV以及子塊內的各像素位置的運動向量偏差。VVC中每個子塊使用的作為子塊MV的像素位置都相同,所以只需要匯出一組子塊的運動向量偏差,其他子塊可以複用該子塊。進一步地,在VVC標準文本中,對PROF流程的描述,PROF對運動向量偏差的計算包含在上面的流程中。
AVS3的仿射預測在計算子塊的MV時,和VVC的基本原理相同,但AVS3對當前塊的左上角子塊A,右上角子塊B和左下角子塊C有特殊的處理。
下面是AVS3標準文本對仿射運動單元子塊運動向量陣列的匯出的描述:
如果仿射控制點運動向量組中有3個運動向量,那麼運動向量組可以表示為mvsAffine(mv0,mv1,mv2);如果仿射控制點運動向量組中有2個運動向量,那麼運動向量組可以表示為mvsAffine(mv0,mv1)。接著,可以按照以下步驟匯出仿射運動單元子塊運動向量陣列:
1、計算變數dHorX、dVerX、dHorY和dVerY:
dHorX=(mv1_x-mv0_x)<<(7-Log(width));
dHorY=(mv1_y-mv0_y)<<(7-Log(width));
若運動向量組為mvsAffine(mv0,mv1,mv2),則:
dVerX=(mv2_x-mv0_x)<<(7-Log(height));
dVerY=(mv2_y-mv0_y)<<(7-Log(height));
若運動向量組為mvsAffine(mv0,mv1),則:
dVerX=−dHorY;
dVerY=dHorX;
需要說明的是,圖7為樣本位置示意圖,如圖7所示,(xE,yE)是當前預測單元亮度預測塊左上角樣本在當前圖像的亮度樣本矩陣中的位置,當前預測單元的寬度和高度分別是width和height,每個子塊的寬度和高度分別是subwidth和subheight,當前預測單元亮度預測塊的左上角樣本所在的子塊為A,右上角樣本所在的子塊為B,左下角樣本所在的子塊為C。
2.1、如果當前預測單元的預測參考模式是‘Pred_List01’或AffineSubblockSizeFlag等於1(AffineSubblockSizeFlag用於指示子塊尺寸的大小),則subwidth和subheight均等於8,(x,y)是尺寸為8x8的子塊左上角位置的座標,則可以計算每個8x8亮度子塊的運動向量mvE(mvE_x ,mvE_y):
如果當前子塊是A,則xPos和yPos均等於0;
如果當前子塊是B,則xPos等於width,yPos等於0;
如果當前子塊為C且mvsAffine中有3個運動向量,則xPos等於 0,yPos等於height;
否則,xPos等於(x-xE)+4,yPos等於(y-yE)+4;
因此,當前8x8子塊的運動向量mvE為:
mvE_x=Clip3(-131072,131071,Rounding((mv0_x<<7)+dHorX×xPos+dVerX×yPos,7));
mvE_y=Clip3(-131072,131071,Rounding((mv0_y<<7)+dHorY×xPos+dVerY×yPos,7));
2.2、如果當前預測單元的預測參考模式是‘Pred_List0’或‘Pred_List1’,且AffineSubblockSizeFlag等於0,則subwidth和subheight均等於4,(x,y)是尺寸為4x4的子塊左上角位置的座標,計算每個4x4亮度子塊的運動向量mvE(mvE_x ,mvE_y):
如果當前子塊是A,則xPos和yPos均等於0;
如果當前子塊是B,則xPos等於width,yPos等於0;
如果當前子塊是C且mvAffine中有3個運動向量,則xPos等於0,yPos等height;
否則,xPos等於(x-xE)+2,yPos等於(y-yE)+2;
因此,當前4x4子塊的運動向量mvE為:
mvE_x=Clip3(-131072,131071,Rounding((mv0_x<<7)+dHorX×xPos+dVerX×yPos,7));
mvE_y=Clip3(-131072,131071,Rounding((mv0_y<<7)+dHorY×xPos+dVerY×yPos,7))。
下面是AVS3文本對於仿射預測樣本匯出及亮度、色度樣本插值的描述:
如果當前預測單元亮度預測塊左上角樣本在當前圖像的亮度樣本矩陣中的位置為(xE,yE)。
如果當前預測單元的預測參考模式是‘PRED_List0’且AffineSubblockSizeFlag的值為0,mv0E0是MvArrayL0運動向量集合在(xE+x,yE+y)位置的、4x4單元的LO運動向量。亮度預測樣本矩陣predMatrixL0中的元素predMatrixL0[x][y]的值,是參考圖像佇列0中參考索引為RefIdxL0的1/16精度亮度樣本矩陣中位置為(((xE+x)<<4)+mv0E0_x,(yE+y)<<4)+mv0E0_y)))的樣本值,色度預測樣本矩陣predMatrixL0中的元素predMatrixL0[x][y]的值,是參考圖像佇列0中參考索引為RefIdxL0的1/32精度色度樣本矩陣中位置為(((xE+2x)<<4)+MvC_x,(yE+2y)<<4)+MvC_y)))的樣本值。其中,x1=((xE+2x)>>3)<<3,y1=((yE+2y)>>3)<<3,mv1E0是MvArrayL0運動向量集合在(x1,y1)位置的4x4單元的LO運動向量,mv2E0是MvArrayL0運動向量集合在(x1+4,y1)位置的4x4單元的LO運動向量,mv3E0是MvArrayL0運動向量集合在(x1,y1+4)位置的4x4單元的LO運動向量,mv4E0是MvArrayL0運動向量集合在(x1+4,y1+4)位置的4x4單元的LO運動向量。
MvC_x=(mv1E0_x+mv2E0_x+mv3E0_x+mv4E0_x+2)>>2
MvC_y=(mv1E0_y+mv2E0_y+mv3E0_y+mv4E0_y+2)>>2
如果當前預測單元的預測參考模式是‘PRED_List0’且AffineSubblockSizeFlag的值為1,mv0E0是MvArrayL0運動向量集合在(xE+x,yE+y)位置的、8x8單元的LO運動向量。亮度預測樣本矩陣predMatrixL0中的元素predMatrixL0[x][y]的值,是參考圖像佇列0中參考索引為RefIdxL0的1/16精度亮度樣本矩陣中位置為(((xE+x)<<4)+mv0E0_x,(yE+y)<<4)+mv0E0_y)))的樣本值,色度預測樣本矩陣predMatrixL0中的元素predMatrixL0[x][y]的值是參考圖像佇列0中參考索引為RefIdxL0的1/32精度色度樣本矩陣中位置為(((xE+2x)<<4)+MvC_x,(yE+2y)<<4)+MvC_y)))的樣本值。其中,MvC_x等於mv0E0_x,MvC_y等於mv0E0。
如果當前預測單元的預測參考模式是‘PRED_List1’且AffineSubblockSizeFlag的值為0,mv0E1是MvArrayL1運動向量集合在(xE+x,yE+y)位置的、4x4單元的L1運動向量。亮度預測樣本矩陣predMatrixL1中的元素predMatrixL1[x][y]的值,是參考圖像佇列1中參考索引為RefIdxL1的1/16精度亮度樣本矩陣中位置為(((xE+x)<<4)+mv0E1_x,(yE+y)<<4)+mv0E1_y)))的樣本值,色度預測樣本矩陣predMatrixL1中的元素predMatrixL1[x][y]的值是參考圖像佇列1中參考索引為RefIdxL1的1/32精度色度樣本矩陣中位置為(((xE+2x)<<4)+MvC_x,(yE+2y)<<4)+MvC_y)))的樣本值。其中,x1=((xE+2x)>>3)<<3,y1=((yE+2y)>>3)<<3,mv1E1是MvArrayL1運動向量集合在(x1,y1)位置的4x4單元的L1運動向量,mv2E1是MvArrayL1運動向量集合在(x1+4,y1)位置的4x4單元的L1運動向量,mv3E1是MvArrayL1運動向量集合在(x1,y1+4)位置的4x4單元的L1運動向量,mv4E1是MvArrayL1運動向量集合在(x1+4,y1+4)位置的4x4單元的L1運動向量。
MvC_x=(mv1E1_x+mv2E1_x+mv3E1_x+mv4E1_x+2)>>2
MvC_y=(mv1E1_y+mv2E1_y+mv3E1_y+mv4E1_y+2)>>2
如果當前預測單元的預測參考模式是‘PRED_List1’且AffineSubblockSizeFlag的值為1,mv0E1是MvArrayL1運動向量集合在(xE+x,yE+y)位置的、8x8單元的L1運動向量。亮度預測樣本矩陣predMatrixL1中的元素predMatrixL1[x][y]的值,是參考圖像佇列1中參考索引為RefIdxL1的1/16精度亮度樣本矩陣中位置為(((xE+x)<<4)+mv0E1_x,(yE+y)<<4)+mv0E1_y)))的樣本值,色度預測樣本矩陣predMatrixL1中的元素predMatrixL1[x][y]的值是參考圖像佇列1中參考索引為RefIdxL1的1/32精度色度樣本矩陣中位置為(((xE+2x)<<4)+MvC_x,(yE+2y)<<4)+MvC_y)))的樣本值。其中MvC_x等於mv0E1_x,MvC_y等於mv0E1。
如果當前預測單元的預測模式是‘PRED_List01’,mv0E0是MvArrayL0運動向量集合在(xE+x,yE+y)位置的8x8單元的L0運動向量,mv0E1是MvArrayL1運動向量集合在(x,y)位置的、8x8單元的L1運動向量。亮度預測樣本矩陣predMatrixL0中的元素predMatrixL0[x][y]的值是參考圖像佇列0中參考索引為RefIdxL0的1/16精度亮度樣本矩陣中位置為(((xE+x)<<4)+mv0E0_x,(yE+y)<<4)+mv0E0_y)))的樣本值,色度預測樣本矩陣predMatrixL0中的元素predMatrixL0[x][y]的值是參考圖像佇列0中參考索引為RefIdxL0的1/32精度色度樣本矩陣中位置為(((xE+2x)<<4)+MvC0_x,(yE+2y)<<4)+MvC0_y)))的樣本值,亮度預測樣本矩陣predMatrixL1中的元素predMatrixL1[x][y]的值是參考圖像佇列1中參考索引為RefIdxL1的1/16精度亮度樣本矩陣中位置為((((xE+x)<<4)+mv0E1_x,(yE+y)<<4)+mv0E1_y))))的樣本值,色度預測樣本矩陣predMatrixL1中的元素predMatrixL1[x][y]的值是參考圖像佇列1中參考索引為RefIdxL1的1/32精度色度樣本矩陣中位置為(((xE+2x)<<4)+MvC1_x,(yE+2y)<<4)+MvC1_y)))的樣本值。其中MvC0_x等於mv0E0_x,MvC0_y等於mv0E0_y,MvC1_x等於mv0E1_x,MvC1_y等於mv0E1_y。
其中,參考圖像的亮度1/16精度樣本矩陣和色度1/32精度樣本矩陣中各個位置的元素值透過如下的仿射亮度樣本插值過程和仿射色度樣本插值過程所定義的插值方法得到。參考圖像外的整數樣本應使用該圖像內距離該樣本最近的整數樣本(邊緣或角樣本)代替,即運動向量能指向參考圖像外的樣本。
具體地,仿射亮度樣本插值過程如下:
圖8為仿射預測亮度樣本的位置示意圖,如圖8所示,A,B,C,D是相鄰整像素樣本,dx與dy是整像素樣本A周邊分像素樣本a(dx,dy)與A的水平和垂直距離,dx等於fx& 15,dy等於fy& 15,其中(fx,fy)是該分像素樣本在1/16精度的亮度樣本矩陣中的座標。圖9為仿射預測整像素樣本和分像素樣本的位置示意圖,整像素Ax,y和周邊的255個分像素樣本ax,y(dx,dy)的具體位置如圖9所示。
具體地,樣本位置ax,0(x=1~15)由水平方向上距離插值點最近得8個整數值濾波得到,預測值的獲取方式如下:
ax,0=Clip1((fL[x][0]×A−3,0+fL[x][1]×A−2,0+fL[x][2]×A−1,0+fL[x][3]×A0,0+fL[x][4]×A1,0+fL[x][5]×A2,0+fL[x][6]×A3,0+fL[x][7]×A4,0+32)>>6)。
具體地,樣本位置a0,y(y=1~15)由垂直方向上距離插值點最近得8個整數值濾波得到,預測值的獲取方式如下:
a0,y=Clip1((fL[y][0]×A0,−3+fL[y][1]×A−2,0+fL[y][2]×A−1,0+fL[y][3]×A0,0+fL[y][4]×A1,0+fL[y][5]×A2,0+fL[y][6]×A3,0+fL[y][7]×A−4,0+32)>>6)。
具體地,樣本位置ax,y(x=1~15,y=1~15)的預測值的獲取方式如下:
ax,y=Clip1((fL[y][0]×a'x,y-3+fL[y][1]×a'x,y-2+fL[y][2]×a'x,y-1+fL[y][3]×a'x,y+fL[y][4]×a'x,y+1+fL[y][5]×a'x,y+2+fL[y][6]×a'x,y+3+fL[y][7]×a'x,y+4+(1<<(19-BitDepth)))>>(20-BitDepth))。
其中:
a'x,y=(fL[x][0]×A−3,y+fL[x][1]×A−2,y+fL[x][2]×A−1,y+fL[x][3]×A0,y+fL[x][4]×A1,y+fL[x][5]×A2,y+fL[x][6]×A3,y+fL[x][7]×A4,y+((1<<(BitDepth-8))>>1))>>(BitDepth-8)。
亮度插值濾波器係數如表1所示:
表1
分像素點位置 亮度插值濾波器係數
fL[p][0] fL[p][1] fL[p][2] fL[p][3] fL[p][4] fL[p][5] fL[p][6] fL[p][7]
1 0 1 −3 63 4 −2 1 0
2 −1 2 −5 62 8 −3 1 0
3 −1 3 −8 60 13 −4 1 0
4 −1 4 −10 58 17 −5 1 0
5 −1 4 −11 52 26 −8 3 −1
6 −1 3 −9 47 31 −10 4 −1
7 −1 4 −11 45 34 −10 4 −1
8 −1 4 −11 40 40 −11 4 −1
9 −1 4 −10 34 45 −11 4 −1
10 −1 4 −10 31 47 −9 3 −1
11 −1 3 −8 26 52 −11 4 −1
12 0 1 −5 17 58 −10 4 −1
13 0 1 −4 13 60 −8 3 −1
14 0 1 −3 8 62 −5 2 −1
15 0 1 −2 4 63 −3 1 0
具體地,仿射色度樣本插值過程如下:
圖10為仿射預測色度樣本的位置示意圖,如圖10所示,A,B,C,D是相鄰整像素樣本,dx與dy是整像素樣本A周邊分像素樣本a(dx,dy)與A的水平和垂直距離,dx等於fx& 31,dy等於fy& 31,其中(fx,fy)是該分像素樣本在1/32精度的色度樣本矩陣中的座標。圖11為仿射預測整像素樣本和分像素樣本的位置示意圖,整像素Ax,y和周邊的1023個分像素樣本ax,y(dx,dy)的具體位置如圖11所示。
具體地,對於dx等於0或dy等於0的分像素點,可直接用色度整像素插值得到,對於dx不等於0且dy不等於0的點,使用整像素行(dy等於0)上的分像素進行計算:
if(dx==0){ ax,y(0,dy)=Clip3(0,(1<<BitDepth)-1,(fC[dy][0]×Ax,y-1+fC[dy][1]×Ax,y+fC[dy][2]×Ax,y+1+fC[dy][3]×Ax,y+2+32)>>6) } else if(dy==0){ ax,y(dx,0)=Clip3(0,(1<<BitDepth)-1,(fC[dx][0]×Ax-1,y+fC[dx][1]×Ax,y+fC[dx][2]×Ax+1,y+fC[dx][3]×Ax+2,y+32)>>6) } else{ ax,y(dx,dy)=Clip3(0,(1<<BitDepth)-1,(C[dy][0]×a'x,y-1(dx,0)+C[dy][1]×a'x,y(dx,0)+C[dy][2]×a'x,y+1(dx,0)+C[dy][3]×a'x,y+2(dx,0)+(1<<(19-BitDepth)))>>(20-BitDepth)) }
其中,a'x,y(dx,0)是整像素行上的分像素的臨時值,定義為:a'x,y(dx,0)=(fC[dx][0]×Ax-1,y+fC[dx][1]×Ax,y+fC[dx][2]×Ax+1,y+fC[dx][3]×Ax+2,y+((1<<(BitDepth-8))>>1))>>(BitDepth-8)。
色度插值濾波器係數如表2所示:
表2
分像素位置 插值濾波器係數
  fC[p][0] fC[p][1] fC[p][2] fC[p][3]
1 −1 63 2 0
2 −2 62 4 0
3 -2 60 7 −1
4 −2 58 10 −2
5 −3 57 12 −2
6 −4 56 14 −2
7 −4 55 15 −2
8 −4 54 16 −2
9 −5 53 18 −2
10 −6 52 20 −2
11 −6 49 24 −3
12 −6 46 28 −4
13 −5 44 29 −4
14 −4 42 30 −4
15 −4 39 33 −4
16 −4 36 36 −4
17 −4 33 39 −4
18 −4 30 42 −4
19 −4 29 44 −5
20 −4 28 46 −6
21 −3 24 49 −6
22 −2 20 52 −6
23 −2 18 53 −5
24 −2 16 54 −4
25 −2 15 55 −4
26 −2 14 56 −4
27 −2 12 57 −3
28 −2 10 58 −2
29 −1 7 60 −2
30 0 4 62 −2
31 0 2 63 −1
圖12為仿射預測的流程的示意圖,如圖12所示,常見的仿射預測的方法可以包括以下步驟:
步驟S101、確定控制點的運動向量。
步驟S102、根據控制點的運動向量確定子塊的運動向量。
步驟S103、根據子塊的運動向量對子塊進行預測。
目前,圖13為PROF修正預測值的流程示意圖一,如圖13所示,在透過PROF改進基於塊的仿射預測的預測值時,具體可以包括以下步驟:
步驟S101、確定控制點的運動向量。
步驟S102、根據控制點的運動向量確定子塊的運動向量。
步驟S103、根據子塊的運動向量對子塊進行預測。
步驟S104、根據控制點的運動向量與子塊的運動向量確定子塊內每個位置與子塊的運動向量偏差。
步驟S105、根據控制點的運動向量確定子塊的運動向量。
步驟S106、使用基於子塊的預測值匯出每一個位置計算水平和垂直方向的梯度。
步驟S107、利用光流原理,根據每一個位置的運動向量偏差和水平、垂直方向的梯度,計算每一個位置的預測值的偏差值。
步驟S108、對每一個位置基於子塊的預測值加上預測值的偏差值,得到修正後的預測值。
目前,圖14為PROF修正預測值的流程示意圖二,如圖14所示,在透過PROF改進基於塊的仿射預測的預測值時,具體還可以包括以下步驟:
步驟S101、確定控制點的運動向量。
步驟S109、根據控制點的運動向量確定子塊的運動向量及子塊內每個位置與子塊的運動向量的偏差。
步驟S103、根據子塊的運動向量對子塊進行預測。
步驟S106、使用基於子塊的預測值匯出每一個位置計算水平和垂直方向的梯度。
步驟S107、利用光流原理,根據每一個位置的運動向量偏差和水平、垂直方向的梯度,計算每一個位置的預測值的偏差值。
步驟S108、對每一個位置基於子塊的預測值加上預測值的偏差值,得到修正後的預測值。
使用光流原理的預測修正PROF可以使用光流原理對基於子塊的仿射預測進行修正,提高了壓縮性能。然而,PROF的應用是基於子塊內的像素位置的運動向量與子塊運動向量的偏差非常小的情況,也就是說,子塊內的像素位置的運動向量與子塊運動向量的偏差非常小的情況下使用PROF的光流計算方法是有效的,但是,由於PROF依賴於基準位置的水平方向和垂直方向的梯度,在實際位置離基準位置較遠的情況下,基準位置的水平和垂直方向的梯度並不能真實的反映基準位置和實際位置之間的水平和垂直方向的梯度,因此,在子塊內的像素位置的運動向量與子塊運動向量的偏差較大的情況下,該方法就不是特別有效了。
由此可見,現有的PROF修正預測值方法並不嚴謹,在對仿射預測進行改善時,並不能很好的適用於全部場景,編碼性能有待提升。
為了解決現有技術中存在的缺陷,在本申請的實施例中,可以在基於子塊的預測之後,對運動向量與子塊的運動向量有偏差的像素位置,在基於子塊的第一預測值的基礎上進行基於點的二次預測,獲得第二預測值。其中,利用二維濾波器進行的基於點的二次預測,可以使用構成預設形狀的幾個點的訊息對第一預測值進行修正,最終獲得修正後的第二預測值,本申請提出的幀間預測方法能夠很好的適用於全部場景,大大提升編碼性能,從而提高了編解碼效率。
應理解,本申請實施例提供一種影像編碼系統,圖15為本申請實施例提供的一種影像編碼系統的組成方塊圖示意圖,如圖15所示,該影像編碼系統11可以包括:變換單元111、量化單元112、模式選擇和編碼控制邏輯單元113、幀內預測單元114、幀間預測單元115(包括:運動補償和運動估計)、反量化單元116、反變換單元117、迴路濾波單元118、編碼單元119和解碼圖像暫存單元110;針對輸入的原始影像訊號,透過編碼樹單元(Coding Tree Unit,CTU)的劃分可以得到一個影像重建塊,透過模式選擇和編碼控制邏輯單元113確定編碼模式,然後,對經過幀內或幀間預測後得到的殘差像素訊息,透過變換單元111、量化單元112對該影像重建塊進行變換,包括將殘差訊息從像素域變換到變換域,並對所得的變換係數進行量化,用以進一步減少位元速率;幀內預測單元114用於對該影像重建塊進行幀內預測;其中,幀內預測單元114用於確定該影像重建塊的最優幀內預測模式(即目標預測模式);幀間預測單元115用於執行所接收的影像重建塊相對於一或多個參考幀中的一或多個塊的幀間預測編碼,以提供時間預測訊息;其中,運動估計為產生運動向量的過程,運動向量可以估計該影像重建塊的運動,然後,運動補償基於由運動估計所確定的運動向量執行運動補償;在確定幀間預測模式之後,幀間預測單元115還用於將所選擇的幀間預測資料提供到編碼單元119,而且,將所計算確定的運動向量資料也發送到編碼單元119;此外,反量化單元116和反變換單元117用於該影像重建塊的重構建,在像素域中重構建殘差塊,該重構建殘差塊透過迴路濾波單元118去除區塊效應假影,然後,將該重構殘差塊添加到解碼圖像暫存單元110的幀中的一個預測性塊,用以產生經重構建的影像重建塊;編碼單元119是用於編碼各種編碼參數及量化後的變換係數。而解碼圖像暫存單元110用於存放重構建的影像重建塊,用於預測參考。隨著影像圖像編碼的進行,會不斷生成新的重構建的影像重建塊,這些重構建的影像重建塊都會被存放在解碼圖像暫存單元110中。
本申請實施例還提供一種影像解碼系統,圖16為本申請實施例提供的一種影像解碼系統的組成方塊圖示意圖,如圖16所示,該影像解碼系統12可以包括:解碼單元121、反變換單元127,與反量化單元122、幀內預測單元123、運動補償單元124、迴路濾波單元125和解碼圖像暫存單元126單元;輸入的影像訊號經過影像編碼系統11進行編碼處理之後,輸出該影像訊號的位元流;該位元流輸入影像解碼系統12中,首先經過解碼單元121,用於得到解碼後的變換係數;針對該變換係數透過反變換單元127與反量化單元122進行處理,以便在像素域中產生殘差塊;幀內預測單元123可用於基於所確定的幀內預測方向和來自當前幀或圖片的先前經解碼塊的資料而產生當前影像解碼塊的預測資料;運動補償單元124是透過剖析運動向量和其他關聯語法元素來確定用於影像解碼塊的預測訊息,並使用該預測訊息以產生正被解碼的影像解碼塊的預測性塊;透過對來自反變換單元127與反量化單元122的殘差塊與由幀內預測單元123或運動補償單元124產生的對應預測性塊進行求和,而形成解碼的影像塊;該解碼的影像訊號透過迴路濾波單元125以便去除區塊效應假影,可以改善影像品質;然後將經解碼的影像塊儲存於解碼圖像暫存單元126中,解碼圖像暫存單元126儲存用於後續幀內預測或運動補償的參考圖像,同時也用於影像訊號的輸出,得到所恢復的原始影像訊號。
本申請實施例提供的一種幀間預測方法主要作用於影像編碼系統11的幀間預測單元115和影像解碼系統12的幀間預測單元,即運動補償單元124;也就是說,如果在影像編碼系統11能夠透過本申請實施例提供的幀間預測方法得到一個較好的預測效果,那麼,對應地,在影像解碼系統12,也能夠改善影像解碼恢復品質。
基於此,下面結合附圖和實施例對本申請的技術方案進一步詳細闡述。在進行詳細闡述之前,需要說明的是,說明書通篇中提到的“第一”、“第二”、“第三”等,僅僅是為了區分不同的特徵,不具有限定優先順序、先後順序、大小關係等功能。
需要說明的是,本實施例以AVS3標準為基礎進行示例性說明,本申請提出的幀間預測方法同樣可以適用於VVC等其他編碼標準技術,不申請對此不作具體限定。
本申請實施例提供一種幀間預測方法,該方法應用於影像解碼設備,即解碼器。該方法所實現的功能可以透過解碼器中的第一處理器調用電腦程式來實現,當然電腦程式可以保存在第一記憶體中,可見,該解碼器至少包括第一處理器和第一記憶體。
進一步地,在本申請的實施例中,圖17為幀間預測方法的實現流程示意圖一,如圖17所示,解碼器進行幀間預測的方法可以包括以下步驟:
步驟S201、解析位元流,獲取當前塊的預測模式參數。
在本申請的實施例中,解碼器可以先解析二進位位元流,從而獲得當前塊的預測模式參數。其中,預測模式參數可以用於對當前塊所使用的預測模式進行確定。
需要說明的是,待解碼圖像可以劃分為多個圖像塊,而當前待解碼的圖像塊可以稱為當前塊(可以用CU表示),與當前塊相鄰的圖像塊可以稱為相鄰塊;即在待解碼圖像中,當前塊與相鄰塊之間具有相鄰關係。這裡,每個當前塊可以包括第一圖像分量、第二圖像分量和第三圖像分量,也即當前塊表示待解碼圖像中當前待進行第一圖像分量、第二圖像分量或者第三圖像分量預測的圖像塊。
其中,假定當前塊進行第一圖像分量預測,而且第一圖像分量為亮度分量,即待預測圖像分量為亮度分量,那麼當前塊也可以稱為亮度塊;或者,假定當前塊進行第二圖像分量預測,而且第二圖像分量為色度分量,即待預測圖像分量為色度分量,那麼當前塊也可以稱為色度塊。
進一步地,在本申請的實施例中,預測模式參數不僅可以指示當前塊採用的預測模式,還可以指示與該預測模式相關的參數。
可以理解的是,在本申請的實施例中,預測模式可以包括有幀間預測模式、傳統幀內預測模式以及非傳統幀內預測模式等。
也就是說,在編碼側,編碼器可以選取最優的預測模式對當前塊進行預編碼,在這過程中就可以確定出當前塊的預測模式,然後確定用於指示預測模式的預測模式參數,從而將相應的預測模式參數寫入位元流,由編碼器傳輸到解碼器。
相應地,在解碼器側,解碼器透過解析位元流便可以直接獲取到當前塊的預測模式參數,並根據解析獲得的預測模式參數確定當前塊所使用的預測模式,以及該預測模式對應的相關參數。
進一步地,在本申請的實施例中,解碼器在解析獲得預測模式參數之後,可以基於預測模式參數確定當前塊是否使用幀間預測模式。
步驟S202、當預測模式參數指示使用幀間預測模式確定當前塊的幀間預測值時,確定當前塊的子塊的第一運動向量;其中,當前塊包括多個子塊。
在本申請的實施例中,解碼器在解析獲得預測模式參數之後,如果解析獲得的預測模式參數指示當前塊使用幀間預測模式確定當前塊的幀間預測值,那麼解碼器可以先確定出當前塊的每一個子塊的第一運動向量。其中,一個子塊對應有一個第一運動向量。
需要說明的是,在本申請的實施例中,當前塊為當前幀中待解碼的圖像塊,當前幀以圖像塊的形式按一定順序依次進行解碼,該當前塊為當前幀內按該順序下一時刻待解碼的圖像塊。當前塊可具有多種規格尺寸,例如16x16、32x32或32x16等規格,其中數字表示當前塊上像素點的行數和列數。
進一步對,在本申請的實施例中,當前塊可以劃分為多個子塊,其中,每一個子塊的尺寸大小都是相同的,子塊為較小規格的像素點集合。子塊的尺寸可以為8x8或4x4。
示例性的,在本申請中,當前塊的尺寸為16x16,可以劃分為4個尺寸均為8x8的子塊。
可以理解的是,在本申請的實施例中,在解碼器解析位元流獲取到預測模式參數指示使用幀間預測模式確定當前塊的幀間預測值的情況下,就可以繼續採用本申請實施例所提供的幀間預測方法。
在本申請的實施例中,進一步地,當預測模式參數指示使用幀間預測模式確定當前塊的幀間預測值時,解碼器確定當前塊的子塊的第一運動向量的方法可以包括以下步驟:
步驟S202a、解析位元流,獲取當前塊的仿射模式參數和預測參考模式。
步驟S202b、當仿射模式參數指示使用仿射模式時,確定控制點模式和子塊尺寸參數。
步驟S202c、根據預測參考模式、控制點模式以及子塊尺寸參數,確定第一運動向量。
在本申請的實施例中,解碼器在解析獲得預測模式參數之後,如果解析獲得的預測模式參數指示當前塊使用幀間預測模式確定當前塊的幀間預測值,那麼解碼器可以透過解析位元流,獲得仿射模式參數和預測參考模式。
需要說明的是,在本申請的實施例中,仿射模式參數用於對是否使用仿射模式進行指示。具體地,仿射模式參數可以為仿射運動補償允許標誌affine_enable_flag,解碼器透過仿射模式參數的取值的確定,可以進一步確定是否使用仿射模式。
也就是說,在本申請中,仿射模式參數可以為一個二值變數。若所述仿射模式參數的取值為1,則指示使用所述仿射模式;若所述仿射模式參數的取值為0,則指示不使用所述仿射模式。
可以理解的是,在本申請中,解碼器解析位元流,如果未解析得到所述仿射模式參數,那麼也可以理解為指示不使用所述仿射模式。
示例性的,在本申請中,仿射模式參數的取值可以等於仿射運動補償允許標誌affine_enable_flag的值,如果affine_enable_flag的值為‘1’,表示可使用仿射運動補償;如果affine_enable_flag的值為‘0’,表示不應使用仿射運動補償。
進一步地,在本申請的實施例中,如果解碼器解析位元流所獲取的仿射模式參數指示使用仿射模式,那麼解碼器可以進行獲取控制點模式和子塊尺寸參數。
需要說明的是,在本申請的實施例中,控制點模式用於對控制點的個數進行確定。在仿射模型中,一個子塊可以有2個控制點或者3個控制點,相應地,控制點模式可以為2個控制點對應的控制點模式,或者為3個控制點對應的控制點模式。即控制點模式可以包括4參數模式和6參數模式。
可以理解的是,在本申請的實施例中,對於AVS3標準,如果當前塊使用了仿射模式,那麼解碼器還需要確定出當前塊在仿射模式中控制點的個數進行確定,從而可以確定出使用的是4參數(2個控制點)模式,還是6參數(3個控制點)模式。
進一步地,在本申請的實施例中,如果解碼器解析位元流所獲取的仿射模式參數指示使用仿射模式,那麼解碼器可以透過解析位元流,進一步獲取子塊尺寸參數。
具體地,子塊尺寸參數可以透過仿射預測子塊尺寸標誌affine_subblock_size_flag確定,解碼器透過解析位元流,獲得子塊尺寸標誌,並根據子塊標誌的取值確定當前塊的子塊的尺寸大小。其中,子塊的尺寸大小可以為8x8或4x4。具體地,在本申請中,子塊尺寸標誌可以為一個二值變數。若子塊尺寸標誌的取值為1,則指示子塊尺寸參數為8x8;若子塊尺寸標誌的取值為0,則指示子塊尺寸參數為4x4。
示例性的,在本申請中,子塊尺寸標誌的取值可以等於仿射預測子塊尺寸標誌affine_subblock_size_flag的值,如果affine_subblock_size_flag的值為‘1’,則當前塊劃分為尺寸為8x8的子塊;如果affine_subblock_size_flag的值為‘0’,則當前塊劃分為尺寸為4x4的子塊。
可以理解的是,在本申請中,解碼器解析位元流,如果未解析得到子塊尺寸標誌,那麼也可以理解為當前塊劃分為4x4的子塊。也就是說,如果位元流中不存在affine_subblock_size_flag,可以直接將子塊尺寸標誌的取值設置為0。
進一步地,在本申請的實施例中,解碼器在確定控制點模式和子塊尺寸參數之後,便可以根據預測參考模式、控制點模式以及子塊尺寸參數,進一步確定出當前塊中的子塊的第一運動向量。
具體地,在本申請的實施例中,解碼器可以先根據所述預測參考模式確定控制點運動向量組;然後可以基於所述控制點運動向量組、所述控制點模式以及所述子塊尺寸參數,確定出子塊的第一運動向量。
可以理解的是,在本申請的實施例中,控制點運動向量組可以用於對控制點的運動向量進行確定。
需要說明的是,在本申請的實施例中,解碼器可以按照上述方法,遍歷當前塊中的每一個子塊,利用每一個子塊的控制點運動向量組、控制點模式以及子塊尺寸參數,確定出每一個子塊的第一運動向量,從而可以根據每一個子塊的第一運動向量構建獲得運動向量集合。
可以理解的是,在本申請的實施例中,當前塊的運動向量集合中可以包括當前塊的每一個子塊的第一運動向量。
進一步地,在本申請的實施例中,解碼器在根據所述控制點運動向量組、所述控制點模式以及所述子塊尺寸參數,確定所述第一運動向量時,可以先根據所述控制點運動向量組、所述控制點模式以及所述當前塊的尺寸參數,確定差值變數;然後可以基於所述預測模式參數和所述子塊尺寸參數,確定子塊位置;最後,便可以利用所述差值變數和所述子塊位置,確定所述子塊的所述第一運動向量,進而可以獲得當前塊的多個子塊的運動向量集合。
示例性的,在本申請中,差值變數可以包括4個變數,具體為dHorX、dVerX、dHorY和dVerY,在計算差值變數時,解碼器需要先確定出控制點運動向量組,其中,控制點運動向量組可以對控制點的運動向量進行表徵。
具體地,如果控制點模式為6參數模式,即存在3個控制點,那麼控制點運動向量組可以為包括3個運動向量的運動向量組,表示為mvsAffine(mv0,mv1,mv2);如果控制點模式為4參數模式,即存在2個控制點,那麼控制點運動向量組可以為包括2個運動向量的運動向量組,表示為mvsAffine(mv0,mv1)。
接著,解碼器便可以利用控制點運動向量組進行差值變數的計算:
dHorX=(mv1_x-mv0_x)<<(7-Log(width));
dHorY=(mv1_y-mv0_y)<<(7-Log(width));
若運動向量組為mvsAffine(mv0,mv1,mv2),則:
dVerX=(mv2_x-mv0_x)<<(7-Log(height));
dVerY=(mv2_y-mv0_y)<<(7-Log(height));
若運動向量組為mvsAffine(mv0,mv1),則:
dVerX=−dHorY;
dVerY=dHorX。
其中,width和height分別為當前塊的寬度和高度,即當前塊的尺寸參數,具體地,當前塊的尺寸參數可以為解碼器透過解析位元流獲取的。
進一步地,在本申請的實施例中,解碼器在確定出差值變數之後,可以接著基於所述預測模式參數和所述子塊尺寸參數,確定子塊位置。具體地,解碼器可以透過子塊尺寸標誌確定出子塊的尺寸,同時可以透過預測模式參數確定具體使用哪一種預測模式,然後便可以根據子塊的尺寸和使用的預測模式,確定出子塊位置。
示例性的,在本申請中,如果當前塊的預測參考模式的取值為2,即為第三參考模式‘Pred_List01’,或者,子塊尺寸標誌的取值為1,即子塊的寬度subwidth和高度subheight均等於8,則(x,y)是8×8子塊左上角位置的座標,那麼可以透過以下方式確定子塊位置的座標xPos和yPos:
如果子塊是當前塊的左上角的控制點,則xPos和yPos均等於0;
如果子塊是當前塊的右上角的控制點,則xPos等於width,yPos等於0;
如果子塊是當前塊的左下角的控制點,控制點運動向量組可以為包括3個運動向量的運動向量組,則xPos等於0,yPos等於height;
否則,xPos等於(x-xE)+4,yPos等於(y-yE)+4。
示例性的,在本申請中,如果當前塊的預測參考模式的取值0或1,即為第一參考模式‘Pred_List0’或第二參考模式‘Pred_List1’,且子塊尺寸標誌的取值為0,即子塊的寬度subwidth和高度subheight均等於4,(x,y)是4×4子塊左上角位置的座標,那麼可以透過以下方式確定子塊位置的座標xPos和yPos:
如果子塊是當前塊的左上角的控制點,則xPos和yPos均等於0;
如果子塊是當前塊的右上角的控制點,則xPos等於width,yPos等於0;
如果子塊是當前塊的左下角的控制點,控制點運動向量組可以為包括3個運動向量的運動向量組,則xPos等於0,yPos等於height;
否則,xPos等於(x-xE)+2,yPos等於(y-yE)+2。
進一步地,在本申請的實施例中,解碼器計算獲得子塊位置之後,接著可以基於子塊位置和差值變數確定出該子塊的第一運動向量,最後,遍歷當前塊的每一個子塊,獲得每一個子塊的第一運動向量,便可以構建獲得當前塊的多個子塊的運動向量集合。
示例性的,在本申請中,解碼器在確定出子塊位置xPos和yPos之後,可以透過以下方式確定出子塊的第一運動向量mvE(mvE_x,mvE_y)
mvE_x=Clip3(-131072,131071,Rounding((mv0_x<<7)+dHorX×xPos+dVerX×yPos,7));
mvE_y=Clip3(-131072,131071,Rounding((mv0_y<<7)+dHorY×xPos+dVerY×yPos,7))。
需要說明的是,在本申請中,在確定子塊內的每個位置與子塊的運動向量的偏差時,如果當前塊使用的是仿射預測模型,可以根據仿射預測模型的公式計算出子塊內的每個位置的運動向量,與子塊的運動向量相減得到它們的偏差。如果子塊的運動向量都選擇子塊內同一位置的運動向量,如4x4的塊使用距離左上角(2,2)的位置,8x8的塊使用距離左上角(4,4)的位置,根據現在標準包括VVC和AVS3中使用的仿射模型,每個子塊相同位置的運動向量偏差都是相同的。但是AVS在左上角,右上角,以及3控制點的情況下的左下角(上述AVS3文本中的,如圖7所示的A,B,C位置)與其他塊使用的位置不同,相應地在計算左上角,右上角,以及3控制點的情況下的左下角的子塊的運動向量偏差時與其他塊也不同。具體如實施例。
步驟S203、基於第一運動向量確定子塊的第一預測值,和像素位置與子塊之間的運動向量偏差;其中,像素位置為子塊內的像素點的位置。
在本申請的實施例中,解碼器在確定出當前塊的每一個子塊的第一運動向量之後,可以基於子塊的第一運動向量,分別確定出子塊的第一預測值和像素位置與子塊之間的運動向量偏差。
可以理解的是,在本申請的實施例中,步驟S203具體可以包括:
步驟S203a、基於第一運動向量確定子塊的第一預測值。
步驟S203b、基於第一運動向量確定像素位置與子塊之間的運動向量偏差。
其中,本申請實施例提出的幀間預測方法對解碼器執行步驟S203a和步驟S203b的順序不進行限定,也就是說,在本申請中,在確定出當前塊的每一個子塊的第一運動向量之後,解碼器可以先執行步驟S203a,然後執行步驟S203b,也可以先執行步驟S203b,再執行步驟S203a,還可以同時執行步驟S203a和步驟S203b。
進一步地,在本申請的實施例中,解碼器在基於所述第一運動向量確定所述子塊的第一預測值時,可以先確定樣本矩陣;其中,所述樣本矩陣包括亮度樣本矩陣和色度樣本矩陣;然後可以根據所述預測參考模式、所述子塊尺寸參數、所述樣本矩陣以及所述運動向量集合,確定所述第一預測值。
需要說明的是,在本申請的實施例中,解碼器在根據所述預測參考模式、所述子塊尺寸參數、所述樣本矩陣以及所述運動向量集合,確定所述第一預測值時,可以先根據所述預測參考模式和所述子塊尺寸參數,從所述運動向量集合中確定目標運動向量;然後可以利用預測參考模式對應的參考圖像佇列和參考索引所述樣本矩陣以及所述目標運動向量,確定預測樣本矩陣;其中,所述預測樣本矩陣包括多個子塊的所述第一預測值。
具體地,在本申請的實施例中,樣本矩陣可以包括亮度樣本矩陣和色度樣本矩陣,相應地,解碼器確定出的預測樣本矩陣可以包括亮度預測樣本矩陣和色度預測樣本矩陣,其中,亮度預測樣本矩陣包括多個子塊的第一亮度預測值,色度預測樣本矩陣包括多個子塊的第一色度預測值,第一亮度預測值和第一色度預測值構成子塊的第一預測值。
示例性的,在本申請中,假設當前塊左上角樣本在當前圖像的亮度樣本矩陣中的位置為(xE,yE)。如果當前塊的預測參考模式取值為0,即使用第一參考模式‘PRED_List0’,且子塊尺寸標誌的取值為0,即子塊尺寸參數為4×4,那麼目標運動向量mv0E0是當前塊的運動向量集合在(xE+x,yE+y)位置的4×4子塊的第一運動向量。亮度預測樣本矩陣predMatrixL0中的元素predMatrixL0[x][y]的值是參考圖像佇列0中參考索引為RefIdxL0的1/16精度亮度樣本矩陣中位置為(((xE+x)<<4)+mv0E0_x,(yE+y)<<4)+mv0E0_y)))的樣本值,色度預測樣本矩陣predMatrixL0中的元素predMatrixL0[x][y]的值是參考圖像佇列0中參考索引為RefIdxL0的1/32精度色度樣本矩陣中位置為(((xE+2×x)<<4)+MvC_x,(yE+2×y)<<4)+MvC_y)))的樣本值。其中,x1=((xE+2×x)>>3)<<3,y1=((yE+2×y)>>3)<<3,mv1E0是當前塊的運動向量集合在(x1,y1)位置的4×4單元的第一運動向量,mv2E0是當前塊的運動向量集合在(x1+4,y1)位置的4×4單元的第一運動向量,mv3E0是當前塊的運動向量集合在(x1,y1+4)位置的4×4單元的第一運動向量,mv4E0是當前塊的運動向量集合在(x1+4,y1+4)位置的4×4單元的第一運動向量。
具體地,MvC_x和MvC_y可以透過以下方式確定:
MvC_x=(mv1E0_x+mv2E0_x+mv3E0_x+mv4E0_x+2)>>2
MvC_y=(mv1E0_y+mv2E0_y+mv3E0_y+mv4E0_y+2)>>2
示例性的,在本申請中,假設當前塊左上角樣本在當前圖像的亮度樣本矩陣中的位置為(xE,yE),如果當前塊的預測參考模式取值為0,即使用第一參考模式‘PRED_List0’,且子塊尺寸標誌的取值為1,即子塊尺寸參數為8×8,那麼目標運動向量mv0E0是當前塊的運動向量集合在(xE+x,yE+y)位置的8×8單元的第一運動向量。亮度預測樣本矩陣predMatrixL0中的元素predMatrixL0[x][y]的值是參考圖像佇列0中參考索引為RefIdxL0的1/16精度亮度樣本矩陣中位置為(((xE+x)<<4)+mv0E0_x,(yE+y)<<4)+mv0E0_y)))的樣本值,色度預測樣本矩陣predMatrixL0中的元素predMatrixL0[x][y]的值是參考圖像佇列0中參考索引為RefIdxL0的1/32精度色度樣本矩陣中位置為(((xE+2×x)<<4)+MvC_x,(yE+2×y)<<4)+MvC_y)))的樣本值。其中,MvC_x等於mv0E0_x,MvC_y等於mv0E0。
示例性的,在本申請中,假設當前塊左上角樣本在當前圖像的亮度樣本矩陣中的位置為(xE,yE)。如果當前塊的預測參考模式取值為1,即使用第二參考模式‘PRED_List1’,且子塊尺寸標誌的取值為0,即子塊尺寸參數為4×4,那麼目標運動向量mv0E1是當前塊的運動向量集合在(xE+x,yE+y)位置的4×4單元的第一運動向量。亮度預測樣本矩陣predMatrixL1中的元素predMatrixL1[x][y]的值是參考圖像佇列1中參考索引為RefIdxL1的1/16精度亮度樣本矩陣中位置為(((xE+x)<<4)+mv0E1_x,(yE+y)<<4)+mv0E1_y)))的樣本值,色度預測樣本矩陣predMatrixL1中的元素predMatrixL1[x][y]的值是參考圖像佇列1中參考索引為RefIdxL1的1/32精度色度樣本矩陣中位置為(((xE+2×x)<<4)+MvC_x,(yE+2×y)<<4)+MvC_y)))的樣本值。其中,x1=((xE+2×x)>>3)<<3,y1=((yE+2×y)>>3)<<3,mv1E1是MvArray第一運動向量集合在(x1,y1)位置的4×4單元的第一運動向量,mv2E1是MvArray第一運動向量集合在(x1+4,y1)位置的4×4單元的第一運動向量,mv3E1是MvArray第一運動向量集合在(x1,y1+4)位置的4×4單元的第一運動向量,mv4E1是MvArray第一運動向量集合在(x1+4,y1+4)位置的4×4單元的第一運動向量。
具體地,MvC_x和MvC_y可以透過以下方式確定:
MvC_x=(mv1E1_x+mv2E1_x+mv3E1_x+mv4E1_x+2)>>2
MvC_y=(mv1E1_y+mv2E1_y+mv3E1_y+mv4E1_y+2)>>2
示例性的,在本申請中,假設當前塊左上角樣本在當前圖像的亮度樣本矩陣中的位置為(xE,yE)。如果當前塊的預測參考模式取值為1,即使用第二參考模式‘PRED_List1’,且子塊尺寸標誌的取值為1,即子塊尺寸參數為8×8,那麼目標運動向量mv0E1是當前塊的運動向量集合在(xE+x,yE+y)位置的8×8單元的第一運動向量。亮度預測樣本矩陣predMatrixL1中的元素predMatrixL1[x][y]的值是參考圖像佇列1中參考索引為RefIdxL1的1/16精度亮度樣本矩陣中位置為(((xE+x)<<4)+mv0E1_x,(yE+y)<<4)+mv0E1_y)))的樣本值,色度預測樣本矩陣predMatrixL1中的元素predMatrixL1[x][y]的值是參考圖像佇列1中參考索引為RefIdxL1的1/32精度色度樣本矩陣中位置為(((xE+2×x)<<4)+MvC_x,(yE+2×y)<<4)+MvC_y)))的樣本值。其中MvC_x等於mv0E1_x,MvC_y等於mv0E1。
示例性的,在本申請中,假設當前塊左上角樣本在當前圖像的亮度樣本矩陣中的位置為(xE,yE)。如果當前塊的預測參考模式取值為2,即使用第三參考模式‘PRED_List01’,那麼目標運動向量mv0E0是當前塊的運動向量集合在(xE+x,yE+y)位置的8×8單元的第一運動向量,目標運動向量mv0E1是當前塊的運動向量集合在(x,y)位置的8×8單元的第一運動向量。亮度預測樣本矩陣predMatrixL0中的元素predMatrixL0[x][y]的值是參考圖像佇列0中參考索引為RefIdxL0的1/16精度亮度樣本矩陣中位置為(((xE+x)<<4)+mv0E0_x,(yE+y)<<4)+mv0E0_y)))的樣本值,色度預測樣本矩陣predMatrixL0中的元素predMatrixL0[x][y]的值是參考圖像佇列0中參考索引為RefIdxL0的1/32精度色度樣本矩陣中位置為(((xE+2×x)<<4)+MvC0_x,(yE+2×y)<<4)+MvC0_y)))的樣本值,亮度預測樣本矩陣predMatrixL1中的元素predMatrixL1[x][y]的值是參考圖像佇列1中參考索引為RefIdxL1的1/16精度亮度樣本矩陣中位置為((((xE+x)<<4)+mv0E1_x,(yE+y)<<4)+mv0E1_y))))的樣本值,色度預測樣本矩陣predMatrixL1中的元素predMatrixL1[x][y]的值是參考圖像佇列1中參考索引為RefIdxL1的1/32精度色度樣本矩陣中位置為(((xE+2×x)<<4)+MvC1_x,(yE+2×y)<<4)+MvC1_y)))的樣本值。其中MvC0_x等於mv0E0_x,MvC0_y等於mv0E0_y,MvC1_x等於mv0E1_x,MvC1_y等於mv0E1_y。
需要說明的是,在申請的實施例中,樣本矩陣中的亮度樣本矩陣可以為1/16精度亮度樣本矩陣,樣本矩陣中的色度樣本矩陣可以為1/32精度色度樣本矩陣。
可以理解的是,在本申請的實施例中,對於不同的預測參考模式,解碼器透過解析位元流所獲取的參考圖像佇列和參考索引是不相同的。
進一步地,在本申請的實施例中,解碼器確定樣本矩陣時,可以先獲取亮度插值濾波器係數和色度插值濾波器係數;然後可以基於所述亮度插值濾波器係數確定所述亮度樣本矩陣,同時,可以基於所述色度插值濾波器係數確定所述色度樣本矩陣。
示例性的,在本申請中,解碼器在確定亮度樣本矩陣時,獲取的亮度插值濾波器係數如上述表1所示,然後按照如圖8和圖9所示的像素位置和樣本位置,計算獲得亮度樣本矩陣。
具體地,樣本位置ax,0(x=1~15)由水平方向上距離插值點最近得8個整數值濾波得到,預測值的獲取方式如下:
ax,0=Clip1((fL[x][0]×A−3,0+fL[x][1]×A−2,0+fL[x][2]×A−1,0+fL[x][3]×A0,0+fL[x][4]×A1,0+fL[x][5]×A2,0+fL[x][6]×A3,0+fL[x][7]×A4,0+32)>>6)。
具體地,樣本位置a0,y(y=1~15)由垂直方向上距離插值點最近得8個整數值濾波得到,預測值的獲取方式如下:
a0,y=Clip1((fL[y][0]×A0,−3+fL[y][1]×A−2,0+fL[y][2]×A−1,0+fL[y][3]×A0,0+fL[y][4]×A1,0+fL[y][5]×A2,0+fL[y][6]×A3,0+fL[y][7]×A−4,0+32)>>6)。
具體地,樣本位置ax,y(x=1~15,y=1~15)的預測值的獲取方式如下:
ax,y=Clip1((fL[y][0]×a'x,y-3+fL[y][1]×a'x,y-2+fL[y][2]×a'x,y-1+fL[y][3]×a'x,y+fL[y][4]×a'x,y+1+fL[y][5]×a'x,y+2+fL[y][6]×a'x,y+3+fL[y][7]×a'x,y+4+(1<<(19-BitDepth)))>>(20-BitDepth))。
其中:
a'x,y=(fL[x][0]×A−3,y+fL[x][1]×A−2,y+fL[x][2]×A−1,y+fL[x][3]×A0,y+fL[x][4]×A1,y+fL[x][5]×A2,y+fL[x][6]×A3,y+fL[x][7]×A4,y+((1<<(BitDepth-8))>>1))>>(BitDepth-8)。
示例性的,在本申請中,解碼器在確定色度樣本矩陣時,可以先解析位元流獲得色度插值濾波器係數如上述表2所示,然後按照如圖10和圖11所示的像素位置和樣本位置,計算獲得色度樣本矩陣。
具體地,對於dx等於0或dy等於0的分像素點,可直接用色度整像素插值得到,對於dx不等於0且dy不等於0的點,使用整像素行(dy等於0)上的分像素進行計算:
if(dx==0){ ax,y(0,dy)=Clip3(0,(1<<BitDepth)-1,(fC[dy][0]×Ax,y-1+fC[dy][1]×Ax,y+fC[dy][2]×Ax,y+1+fC[dy][3]×Ax,y+2+32)>>6) } else if(dy==0){ ax,y(dx,0)=Clip3(0,(1<<BitDepth)-1,(fC[dx][0]×Ax-1,y+fC[dx][1]×Ax,y+fC[dx][2]×Ax+1,y+fC[dx][3]×Ax+2,y+32)>>6) } else{ ax,y(dx,dy)=Clip3(0,(1<<BitDepth)-1,(C[dy][0]×a'x,y-1(dx,0)+C[dy][1]×a'x,y(dx,0)+C[dy][2]×a'x,y+1(dx,0)+C[dy][3]×a'x,y+2(dx,0)+(1<<(19-BitDepth)))>>(20-BitDepth)) }
其中,a'x,y(dx,0)是整像素行上的分像素的臨時值,定義為:a'x,y(dx,0)=(fC[dx][0]×Ax-1,y+fC[dx][1]×Ax,y+fC[dx][2]×Ax+1,y+fC[dx][3]×Ax+2,y+((1<<(BitDepth-8))>>1))>>(BitDepth-8)。
進一步地,在本申請的實施例中,解碼器在基於所述像素位置與子塊之間的運動向量偏差時,可以先解析所述位元流,獲取二次預測參數;如果二次預測參數指示使用二次預測,那麼解碼器可以基於所述差值變數確定所述子塊與每一個像素位置之間的所述運動向量偏差。
具體地,在本申請的實施例中,解碼器在基於所述差值變數確定所述子塊與每一個像素位置之間的所述運動向量偏差時,可以按照上述步驟S202所提出的方法,根據所述控制點運動向量組、所述控制點模式以及所述當前塊的尺寸參數,確定出dHorX、dVerX、dHorY和dVerY這4個差值變數,然後在利用差值變數進一步確定出子塊中的每一個像素位置所對應的運動向量偏差。
示例性的,在本申請中,width和height分別為解碼器獲取的當前塊的寬度和高度,利用子塊尺寸參數所確定出子塊的寬度subwidth和高度subheight。假設(i,j)為子塊內部的任意像素點的座標,其中,i的取值範圍是0~(subwidth-1),j的取值範圍是0~(subheight-1),那麼,可以透過以下方法計算4不同類型的子塊的內部每個像素(i,j)位置的運動向量偏差:
如果子塊是當前塊的左上角的控制點A,那麼(i,j)像素的運動向量偏差dMvA[i][j]:
dMvA[i][j][0]=dHorX×i+dVerX×j
dMvA[i][j][1]=dHorY×i+dVerY×j;
如果子塊是當前塊的右上角的控制點B,那麼(i,j)像素的運動向量偏差dMvB[i][j]:
dMvB[i][j][0]=dHorX×(i-subwidth)+dVerX×j
dMvB[i][j][1]=dHorY×(i-subwidth)+dVerY×j;
如果子塊是當前塊的左下角的控制點C,控制點運動向量組可以為包括3個運動向量的運動向量組,那麼(i,j)像素的運動向量偏差dMvC[i][j]:
dMvC[i][j][0]=dHorX×i+dVerX×(j-subheight)
dMvC[i][j][1]=dHorY×i+dVerY×(j-subheight);
否則,(i,j)像素的運動向量偏差dMvN[i][j]:
dMvN[i][j][0]=dHorX×(i –(subwidth>>1))+dVerX×(j –(subheight>>1))
dMvN[i][j][1]=dHorY×(i –(subwidth>>1))+dVerY×(j –(subheight>>1))。
其中,dMvX[i][j][0]表示運動向量偏差在水平分量的偏差值,dMvX[i][j][1]表示運動向量偏差在垂直分量的偏差值。X為A,B,C或N。
可以理解的是,在本申請的實施例中,解碼器在基於所述差值變數確定所述子塊與每一個像素位置之間的所述運動向量偏差之後,便可以利用子塊內的全部像素位置對應的全部運動向量偏差,構建出該子塊對應的運動向量偏差矩陣。可見,運動向量偏差矩陣中包括有子塊與任意一個內部的像素點之間的運動向量偏差,即運動向量偏差。
進一步地,在本申請的實施例中,如果解碼器解析位元流獲得的二次預測參數指示不使用二次預測,那麼,解碼器可以選擇直接將上述步驟S203a中所獲得的當前塊的子塊的第一預測值作為子塊的第二預測值,而不再進行下述步驟S204和步驟S205的處理。
具體地,在本本申請的實施例中,如果二次預測參數指示不使用二次預測,那麼解碼器可以利用所述預測樣本矩陣確定出第二預測值。其中,預測樣本矩陣包括多個子塊的所述第一預測值,解碼器可以將像素位置所在的子塊的第一預測值確定為自身的第二預測值。
示例性的,在本申請中,如果當前塊的預測參考模式取值為0或1,即使用第一參考模式‘PRED_List0’,或使用第二參考模式‘PRED_List1’,那麼可以直接從包括有一個亮度預測樣本矩陣和兩個色度預測樣本矩陣的預測樣本矩陣中,選擇像素位置所在的子塊的第一預測值,並將該第一預測值確定為像素位置的幀間預測值,即第二預測值。
示例性的,在本申請中,如果當前塊的預測參考模式取值為2,即使用第三參考模式‘PRED_List01’,那麼可以先對預測樣本矩陣中所包括的2個亮度預測樣本矩陣(2組共4個色度預測樣本矩陣)進行均值運算,得到1個平均後的亮度預測樣本(2個平均後的色度預測樣本),最後便從這個平均後的亮度預測樣本(2個平均後的色度預測樣本)中,選擇像素位置所在的子塊的第一預測值,並將該第一預測值確定為像素位置的幀間預測值,即第二預測值。
步驟S204、根據運動向量偏差確定二維濾波器的濾波係數;其中,二維濾波器用於按照預設形狀進行二次預測處理。
在本申請的實施例中,解碼器在基於所述第一運動向量分別確定所述子塊的第一預測值,和所述像素位置與子塊之間的運動向量偏差之後,便可以根據運動向量偏差進一步確定出二維濾波器的濾波係數。
需要說明的是,在本申請的實施例中,二維濾波器的濾波器係數是與像素位置所對應的運動向量偏差相關的。也就是說,對於不同的像素位置,如果對應的運動向量偏差不同,那麼使用的二維濾波器的濾波係數也是不同的。
可以理解的是,在本申請的實施例中,二維濾波器用於利用多個相鄰的、構成所述預設形狀的像素位置進行二次預測。其中,預設形狀為矩形、菱形或任意一種對稱形狀。
也就是說,在本申請的中,用於進行二次預測的二維濾波器是相鄰的構成預設形狀的點所構成的濾波器。相鄰的構成預設形狀的點可以包括多個點,例如由9個點構成。預設形狀可以為對稱形狀,例如,預設形狀可以包括矩形、菱形或其他任意一種對稱形狀。
示例性的,在本申請中,二維濾波器是一個矩形的濾波器,具體地,二維濾波器是由9個相鄰的構成矩形的像素位置組成的濾波器。在9個像素位置中,位於中心的像素位置是當前需要二次預測的像素位置的像素位置。
進一步地,在本申請的實施例中,解碼器在根據所述運動向量偏差確定二維濾波器的濾波係數時,可以先解析位元流,獲取比例參數,然後可以根據比例參數和運動向量偏差,確定所述像素位置對應的所述濾波器係數。
需要說明的是,在本申請的實施例中,比例參數可以包括至少一個比例值,所述運動向量偏差包括水平偏差和垂直偏差;其中,所述至少一個比例值均為非零實數。
具體地,在本申請中,當所述二維濾波器利用9個相鄰的、構成矩形的像素位置進行二次預測時,位於所述矩形的中心的像素位置為待預測位置,其他8個像素位置依次位於所述待預測位置的左上、上、右上、右、右下、下、左下、左的相鄰位置。
相應地,在本申請中,解碼器可以基於所述至少一個比例值和所述待預測位置的所述運動向量偏差,按照預設計算規則計算獲得所述9個相鄰的像素位置對應的9個濾波器係數。
需要說明的是,在本申請中,預設計算規則可以包括多種不同的計算方式,如加法運算、減法運算、乘法運算等。其中,對於不同的像素位置,可以使用不同的計算方式進行濾波器係數的計算。
可以理解的是,在本申請中,解碼器在按照預設計算規則中不同的計算方法計算獲得多個像素位置對應的多個濾波器係數中,部分濾波器係數可以為運動向量偏差的一次函數,即兩者為線性關係,還可以為運動向量偏差的二次函數或高次函數,即兩者為非線性關係。
也就是說,在本申請中,多個相鄰的像素位置對應的多個濾波器係數中的任意一個濾波器係數,可以為所述運動向量偏差的一次函數、二次函數或者高次函數。
示例性的,在本申請中,假設像素位置的運動向量偏差為(dmv_x,dmv_y),其中,如果目標像素位置的座標為(i,j),那麼dmv_x可以表示為dMvX[i][j][0],即表示運動向量偏差在水平分量的偏差值,dmv_y可以表示為dMvX[i][j][1],即表示運動向量偏差在垂直分量的偏差值。
相應地,表3為基於運動向量偏差(dmv_x,dmv_y)所獲得的濾波器係數,如表3所示,對於二維濾波器,按照像素位置的運動向量偏差(水平偏差為dmv_x,所述垂直偏差為dmv_y)和不同的比例參數,如m和n,可以獲得9個相鄰的像素位置對應的9個濾波器係數,其中,解碼器可以直接將中心的待預測位置的濾波器係數設置為1。
表3
像素位置 濾波器係數
左上 (-dmv_x-dmv_y)×m
-dmv_x×n
左下 (-dmv_x+dmv_y)×m
-dmv_y×n
中心 1
dmv_y× n
右上 (dmv_x-dmv_y)×m
dmv_x×n
右下 (dmv_x+dmv_y)×m
其中,比例參數m和n一般是小數或分數,一種可能的情況是m和n都是2的冪,如1/2,1/4,1/8等。這裡的dmv_x,dmv_y都是其實際的大小,即dmv_x,dmv_y的1表示1個像素的距離,dmv_x,dmv_y是小數或者分數。
需要說明的是,在本申請的實施例中,與現有的8抽頭的濾波器相比,目前常見的8抽頭的濾波器所對應的整像素位置和分像素位置的運動向量在水平和垂直方向均為非負的,且大小均屬於0像素到1像素之間,即dmv_x,dmv_y不可以為負的。而在本申請中,濾波器對應的整像素位置和分像素位置的運動向量在水平和垂直方向都可以為負的,即dmv_x,dmv_y可以為負的。
示例性的,在本申請的實施例中,如果比例參數m為1/16,n為1/2,那麼上述表3可以表示為下表4:
表4
像素位置 濾波器係數
左上 (-dmv_x-dmv_y)/16
-dmv_x/2
左下 (-dmv_x+dmv_y)/16
-dmv_y/2
中心 1
dmv_y/2
右上 (dmv_x-dmv_y)/16
dmv_x/2
右下 (dmv_x+dmv_y)/16
可以理解的是,在本申請的實施例中,在影像編解碼技術以及標準中,通常使用放大倍數以避免小數,浮點數運算,然後將計算的結果縮小合適的倍數以得到正確的結果。放大倍數時通常使用左移,縮小倍數時通常使用右移。因此,在透過二維濾波器進行二次預測時,在實際應用時會寫成如下的形式:
假設像素位置的運動向量偏差為(dmv_x,dmv_y),經過左移shift1得到(dmv_x’,dmv_y’),基於上述表4,二維濾波器的係數可以表示為下表5:
表5
像素位置 濾波器係數
左上 -dmv_x’-dmv_y’
-dmv_x’×8
左下 -dmv_x’+dmv_y’
-dmv_y’×8
中心 16<<shift1
dmv_y’×8
右上 dmv_x’-dmv_y’
dmv_x×8
右下 dmv_x’+dmv_y’
圖18為二維濾波器的示意圖一,如圖18所示,以基於子塊的預測的結果為二次預測的基礎,淺色正方形為該濾波器的整像素位置,也就是基於子塊的預測得到的位置。圓形是需要進行二次預測的分像素位置,即像素位置的位置,深色正方形是該分像素位置對應的整像素位置,插值得到這個分像素位置時需要如圖所示的9個整像素位置。
圖19為二維濾波器的示意圖二,如圖19所示,以基於子塊的預測的結果為二次預測的基礎,淺色正方形為該濾波器的整像素位置,也就是基於子塊的預測得到的位置。圓形是需要進行二次預測的分像素位置,即像素位置的位置,深色正方形是該分像素位置對應的整像素位置,插值得到這個分像素位置時需要如圖所示的13個整像素位置。
步驟S205、基於濾波係數和第一預測值,確定子塊的第二預測值,將第二預測值確定為子塊的幀間預測值。
在本申請的實施例中,解碼器在根據運動向量偏差確定出二維濾波器的濾波係數之後,便可以基於所述濾波係數和所述第一預測值,確定所述子塊的第二預測值,從而可以實現結合與像素位置的運動向量偏差對子塊的二次預測,完成對第一預測值的修正。
可以理解的是,在本申請的實施例中,解碼器利用像素位置所對應的運動向量偏差確定出濾波器係數,從而可以按照濾波器係數,透過二維濾波器對第一預測值進行修正,獲得修正後的、子塊的第二預測值。可見,第二預測值為基於所述第一預測值的修正值。
進一步地,在本申請的實施例中,解碼器在基於所述濾波係數和所述第一預測值,確定所述子塊的第二預測值時,可以先對濾波器係數與子塊的第一預測值進行乘法運算,獲得乘積結果,遍歷子塊中的全部像素位置之後,再對子塊的全部像素位置的所述乘積結果進行加法運算,獲得求和結果,最後可以對加法結果進行歸一化處理,最終便可以獲得子塊修正後的第二預測值。
需要說明的是,在本申請的實施例中,在進行二次預測之前,一般情況下是將像素位置所在的子塊的第一預測值作為該像素位置的修正前的預測值,因此,在透過二維濾波器進行濾波時,可以將濾波器係數與對應像素位置的預測值,即第一預測值相乘,並對每一個像素位置對應的乘積結果進行累加,然後歸一化。
可以理解的是,在本申請中,解碼器可以透過多種方式進行歸一化處理,例如,可以將濾波器係數與對應的像素位置的預測值相乘後累加的結果,右移4+shift1位。或者,還可以將濾波器係數與對應的像素位置的預測值相乘後累加的結果,再加上(1<<(3+shift1)),然後右移4+shift1位。
可見,在本申請中,在獲得子塊內部的像素位置對應的運動向量偏差之後,對每一個子塊,以及每一個子塊中的每一個像素位置,可以根據運動向量偏差,基於子塊的運動補償的第一預測值,使用二維濾波器進行濾波,完成對子塊的二次預測,得到新的第二預測值。
進一步地,在本申請的實施例中,二維濾波器可以理解為利用多個相鄰的、構成所述預設形狀的像素位置進行二次預測。其中,預設形狀可以為矩形、菱形或任意一種對稱形狀。
具體地,在本申請的實施例中,二維濾波器在利用9個相鄰的、構成矩形的像素位置進行二次預測時,可以先確定所述當前塊的預測樣本矩陣,和所述當前塊的所述子塊的運動向量偏差集合;其中,所述運動向量偏差矩陣包括全部像素位置對應的所述運動向量偏差;然後基於所述9個相鄰的、構成矩形的像素位置,利用所述預測樣本矩陣和所述運動向量偏差集合,確定所述當前塊的二次預測後的樣本矩陣。
示例性的,在本申請中,如果當前塊的寬度和高度分別是width和height,每個子塊的寬度和高度分別是subwidth和subheight。如圖7所示,當前塊的亮度預測樣本矩陣的左上角樣本所在的子塊為A,右上角樣本所在的子塊為B,左下角樣本所在的子塊為C,其他位置所在子塊為其它子塊。
對當前塊中的每個子塊,可以將子塊的運動向量偏差矩陣為dMv,那麼:
1、如果子塊是A,dMv等於dMvA;
2、如果子塊是B,dMv等於dMvB;
3、如果子塊為C,且該子塊的控制點運動向量組mvAffine中有3個運動向量,dMv等於dMvC;
4、如果子塊為A、B、C以外的其他子塊,dMv等於dMvN。
進一步地,假設(x,y)是當前子塊左上角位置的座標,(i,j)是亮度子塊內部像素的座標,i的取值範圍是0~(subwidth-1),j的取值範圍是0~(subheight-1),基於子塊的預測樣本矩陣為PredMatrixSb,二次預測的預測樣本矩陣為PredMatrixS,可以按照以下方法計算(x+i,y+j)的二次預測的預測樣本PredMatrixS[x+i][y+j]:
PredMatrixS[x+i][y+j]= (UPLEFT(x+i,y+j)×(-dMv[i][j][0]-dMv[i][j][1])+ UP(x+i,y+j)×((-dMv[i][j][1])<<3)+ UPRIGHT(x+i,y+j)×(dMv[i][j][0]-dMv[i][j][1])+ LEFT(x+i,y+j)×((-dMv[i][j][0])<<3)+ CENTER(x+i,y+j)×(1<<15)+ RIGHT(x+i,y+j)×(dMv[i][j][0]<<3)+ DOWNLEFT(x+i,y+j)×(-dMv[i][j][0]+dMv[i][j][1])+ DOWN(x+i,y+j)×(dMv[i][j][1]<<3)+ DOWNRIGHT(x+i,y+j)×(dMv[i][j][0]+dMv[i][j][1])+ (1<<10))>>11 PredMatrixS[x+i][y+j]=Clip3(0,(1<<BitDepth)-1,PredMatrixS[x+i][y+j])。
其中,UPLEFT(x+i,y+j)=predMatrix[x+i-1<0?0:x+i-1][y+j-1<0?0:y+j-1] UP(x+i,y+j)=predMatrix[x+i][y+j-1<0?0:y+j-1] UPRIGHT(x+i,y+j)=predMatrix[x+i+1>width-1?width-1:x+i+1][y+j-1<0?0:y+j-1] LEFT(x+i,y+j)=predMatrix[x+i-1<0?0:x+i-1][y+j] CENTER(x+i,y+j)=predMatrix[x+i][y+j] RIGHT(x+i,y+j)=predMatrix[x+i+1>width-1?width-1:x+i+1][y+j] DOWNLEFT(x+i,y+j)=predMatrix[x+i-1<0?0:x+i-1][y+j+1<0?0:y+j-1] DOWN(x+i,y+j)=predMatrix[x+i][y+j-1<0?0:y+j-1] DOWNRIGHT(x+i,y+j)=predMatrix[x+i+1>width-1?width-1:x+i+1][ y+j+1>height-1?height-1:y+j+1]。
可以理解的是,在本申請的實施例中,CENTER(x+i,y+j)像素位置可以為上述9個相鄰的、構成矩形的像素位置中的中心位置,然後可以基於該(x+i,y+j)像素位置,以及與其相鄰的其他8個像素位置,進行二次預測處理。具體地,其他8個像素位置分別為UP(上)、UPRIGHT(右上)、LEFT(左)、RIGHT(右)、DOWNLEFT(左下)、DOWN(下)、DOWNRIGHT(右下)、UPLEFT(左上)。
需要說明的是,在本申請中,PredMatrixS[x+i][y+j]的計算公式的精度可以使用更低的精度。比如將每一個乘法右邊的項都右移,如dMv[i][j][0]和dMv[i][j][1]都右移shift3位,相應的,1<<15變為1<<(15-shift3), …+(1<<10))>>11變為…+(1<<(10-shift3)))>>(11-shift3)。
示例性的,可以限制運動向量的大小在一個合理的範圍,如上述使用的運動向量在水平方向和垂直方向的正負值都不超過1個像素或1/2像素或1/4像素等。
可以理解的是,如果當前塊的預測參考模式是‘Pred_List01’,那麼解碼器將各分量的多個預測樣本矩陣平均得到該分量的最終的預測樣本矩陣。例如,2個亮度預測樣本矩陣平均後得到新的亮度預測樣本矩陣。
進一步地,在本申請的實施例中,在得到當前塊的預測樣本矩陣後,如果當前塊沒有變換係數,那麼預測矩陣就作為當前塊的解碼結果,如果當前塊還有變換係數,那麼,可以先解碼變換係數,並透過反變換、反量化得到殘差矩陣,將殘差矩陣加到預測矩陣上得到解碼結果。
綜上所述,透過步驟S201至步驟S205所提出的幀間預測方法,在基於子塊的預測之後,對運動向量與子塊的運動向量有偏差的像素位置,在基於子塊的預測的基礎上進行基於點的二次預測。基於點的二次預測使用構成矩形、菱形等預設形狀的多個點的訊息。基於點的二次預測使用二維濾波器。二維濾波器是相鄰的構成預設形狀的點的構成的濾波器。相鄰的構成預設形狀的點可以為9個點。對一個像素位置,濾波器處理的結果為該位置的新預測值。
本申請提出的幀間預測方法,適用於像素位置的運動向量與子塊的運動向量有偏差的情況,也就是說本申請中,解碼器是在基於子塊的預測後,由於對於像素位置沒有完全預測而進行的二次預測。如果像素位置的運動向量與子塊的運動向量沒有偏差,那麼使用本申請提出的幀間預測方法預測後的第二預測值應該和使用本申請提出的幀間預測方法之前的第一預測值相同。在本申請中,在像素位置的運動向量與子塊的運動向量沒有偏差時對,也可以選擇對該像素位置不使用本申請提出的幀間預測方法。
本申請提出的幀間預測方法可以適用於所有像素位置的運動向量與子塊的運動向量有偏差的情況,包括如仿射預測模型這種可以計算出每個像素位置的運動向量,而只進行了基於子塊的預測的情況,也就是當前塊所有像素位置的運動向量都可以計算出來,當前塊並不是所有像素位置的運動向量都與它所在子塊的運動向量相同。還可以適用於並非所有的像素位置的運動向量都可以根據一個模型計算出來,但是當前塊內部的一些像素位置,如一個子塊的運動向量發生變化而與其他位置的運動向量不相同的時候,假設這些內容在當前幀的時間點上是連續變化的,那麼這些相鄰的而運動向量不同的部分,如子塊之間的運動向量可能是連續變化的,這時候根據計算模型等方式重新計算一些相關像素位置的運動向量後,這些運動向量與原來的運動向量有偏差的情況。也就是說,本申請提出的幀間預測方法,可以適用於仿射預測或者其他場景,並不對應用場景進行限定。
本申請提出的幀間預測方法所使用的二維濾波器,可以為一個矩形的濾波器,也可以為一個菱形的濾波器,或者其他形狀的濾波器。示例性的,二維濾波器是由9個相鄰的構成矩形的像素位置組成的濾波器。9個像素位置中位於中心的像素位置是當前需要預測的像素位置。
需要說明的是,本申請提出的幀間預測方法,可以適用於任何一個圖像分量上,在本實施例中示例性的對亮度分量使用二次預測方案,但是也可以用於色度分量,或者其他格式的任一分量。本申請提出的幀間預測方法也可以適用於任何一種影像格式上,包括但不限於YUV格式,包括但不限於YUV格式的亮度分量。
本實施例提供了一種幀間預測方法,解碼器解析位元流,獲取當前塊的預測模式參數;當預測模式參數指示使用幀間預測模式確定當前塊的幀間預測值時,確定當前塊的子塊的第一運動向量;其中,當前塊包括多個子塊;基於第一運動向量確定子塊的第一預測值,和像素位置與子塊之間的運動向量偏差;其中,像素位置為子塊內的像素點的位置;根據運動向量偏差確定二維濾波器的濾波係數;其中,二維濾波器用於按照預設形狀進行二次預測處理;基於濾波係數和第一預測值,確定子塊的第二預測值,將第二預測值確定為子塊的幀間預測值。也就是說,本申請提出的幀間預測方法,可以在基於子塊的預測之後,對運動向量與子塊的運動向量有偏差的像素位置,在基於子塊的第一預測值的基礎上進行基於點的二次預測,獲得第二預測值。其中,利用二維濾波器進行的基於點的二次預測,可以使用構成預設形狀的幾個點的訊息對第一預測值進行修正,最終獲得修正後的第二預測值,本申請提出的幀間預測方法能夠很好的適用於全部場景,大大提升編碼性能,從而提高了編解碼效率。
基於上述實施例中,在本申請的再一實施例中,圖20為幀間預測方法的實現流程示意圖二,如圖20所示,解碼器進行幀間預測的方法可以包括以下步驟:
步驟S301、根據子塊的第一運動向量對子塊進行預測,獲得第一預測值。
步驟S302、確定子塊內每一個位置與子塊的運動向量偏差。
步驟S303、根據每一個位置的運動向量偏差,利用二維濾波器對第一預測值進行濾波,得到第二預測值。
也就是說,本申請提出的幀間預測方法,可以在基於子塊的預測之後,對運動向量與子塊的運動向量有偏差的像素位置,在基於子塊的預測的基礎上進行基於點的二次預測,最終完成對第一預測值的修正,獲得新的預測值,即第二預測值。
具體地,基於點的二次預測使用二維濾波器。二維濾波器是相鄰的構成預設形狀的點的構成的濾波器。相鄰的構成預設形狀的點可以為9個點。對一個像素位置,濾波器處理的結果為該位置的新預測值。其中,二維濾波器的濾波係數由每一個位置的運動向量偏差確定,二維濾波器的輸入為第一預測值,輸出為第二預測值。
進一步地,在本申請中,如果本申請中對當前塊使用仿射模式,那麼需要先對控制點的運動向量進行確定。圖21為幀間預測方法的實現流程示意圖三,如圖21所示,解碼器進行幀間預測的方法可以包括以下步驟:
步驟S304、確定控制點的第二運動向量。
步驟S305、根據第二運動向量確定子塊的第一運動向量。
步驟S301、根據子塊的第一運動向量對子塊進行預測,獲得第一預測值。
步驟S302、確定子塊內每一個位置與子塊的運動向量偏差。
步驟S303、根據每一個位置的運動向量偏差,利用二維濾波器對第一預測值進行濾波,得到第二預測值。
由此可見,在本申請的實施例中,在對控制點的運動向量進行確定之後,可以利用控制點的運動向量對子塊進行預測處理,並在確定出子塊中的像素位置與子塊的運動向量偏差之後,對運動向量與子塊的運動向量有偏差的像素位置,在基於子塊的預測的基礎上進行基於點的二次預測,最終完成對第一預測值的修正,獲得新的預測值,即第二預測值。
進一步地,在本申請中,也可以將確定子塊的第一運動向量和確定子塊內每個位置與子塊的運動向量偏差的兩個步驟同時進行。圖22為幀間預測方法的實現流程示意圖四,如圖22所示,解碼器進行幀間預測的方法可以包括以下步驟:
步驟S304、確定控制點的第二運動向量。
步驟S306、根據第二運動向量確定子塊的第一運動向量,和子塊內每一個位置與子塊的運動向量偏差。
步驟S301、根據子塊的第一運動向量對子塊進行預測,獲得第一預測值。
步驟S303、根據每一個位置的運動向量偏差,利用二維濾波器對第一預測值進行濾波,得到第二預測值。
由此可見,在本申請的實施例中,在對控制點的運動向量進行確定之後,可以同時進行子塊的第一運動向量和子塊內每一個位置與子塊的運動向量偏差的確定,然後對運動向量與子塊的運動向量有偏差的像素位置,在基於子塊的預測的基礎上進行基於點的二次預測,最終完成對第一預測值的修正,獲得新的預測值,即第二預測值。
需要說明的是,在本申請的實施例中,因為仿射模型可以明確地計算出每一個像素位置的運動向量,或者說子塊內每一個像素位置與子塊運動向量的偏差,因此,本申請提出的幀間預測方法可以用於對仿射預測進行改善,當然,該方法也可以應用於其他基於子塊的預測的改善。
進一步地,本申請提出的幀間預測方法可以以AVS3標準為基礎,也可以應用於VVC標準,本申請不作具體限定。
示例性的,在本申請中,解析位元流的序列頭訊息,判斷對該序列解碼時是否使用本申請提出的二次預測方法。一般情況下,對該二次預測方法的控制級別是序列級的,如果是這樣,就按上述方法判斷。如果對該二次預測方法的控制級別是圖像級的,也就是說對每一幀圖像都需要判斷解碼時是否使用本申請提出的二次預測方法,那麼在解碼每一幀圖像時,解析位元流的圖像頭訊息,判斷對該幀圖像解碼時是否使用本技術。如果對當前序列或當前幀圖像使用本技術,那麼對應地當前序列或當前幀圖像符合條件的編碼單元使用本申請提出的二次預測方法。在本實施例中,該技術使用在用仿射模式解碼的編碼單元,也就是說對應地當前序列或當前幀圖像中使用仿射模式的編碼單元使用本技術。仿射模式是序列級控制的,該序列是否使用仿射模式需要解析序列頭的訊息,文本描述如表6所示的序列頭定義:
表6
序列頭定義 描述符
sequence_header(){  
video_sequence_start_code f(32)
profile_id u(8)
level_id u(8)
 
affine_enable_flag u(1)
 
reserved_bits r(2)
next_start_code()  
}  
其中,仿射運動補償允許標誌affine_enable_flag為二值變數。值為‘1’表示可使用仿射運動補償;值為‘0’表示不應使用仿射運動補償。AffineEnableFlag的值等於affine_enable_flag的值。
進一步地,如果使用序列級的控制,那麼可以在文本中加入如下表7所示的序列頭定義:
表7
序列頭定義 描述符
sequence_header(){  
video_sequence_start_code f(32)
profile_id u(8)
level_id u(8)
 
affine_enable_flag u(1)
secondary_pred_enable_flag u(1)
 
reserved_bits r(2)
next_start_code()  
}  
其中,二次預測允許標誌secondary_pred_enable_flag為二值變數。值為‘1’表示可使用二次預測;值為‘0’表示不應使用二次預測。SencondaryPredEnableFlag的值等於secondary_pred_enable_flag的值。
進一步地,如果本申請提出的二次預測方法只對仿射模式使用,那麼也可以在文本中加入如下表8所示的序列頭定義:
表8
序列頭定義 描述符
sequence_header(){  
video_sequence_start_code f(32)
profile_id u(8)
level_id u(8)
 
affine_enable_flag u(1)
if(AffineEnableFlag){  
secondary_pred_enable_flag u(1)
}  
 
reserved_bits r(2)
next_start_code()  
}  
進一步地,在AVS3中,仿射預測的子塊的尺寸可以使用4x4或8x8,選擇哪一個尺寸是在圖像級控制的,文本描述如下表9所示的幀間預測圖像頭定義:
表9
幀間預測圖像頭定義 描述符
inter_picture_header(){  
inter_picture_start_code f(32)
random_access_decodable_flag u(1)
bbv_delay u(32)
picture_coding_type u(2)
decode_order_index u(8)
 
if(AffineEnableFlag){  
affine_subblock_size_flag u(1)
}  
 
next_start_code()  
}  
其中,仿射預測子塊尺寸標誌affine_subblock_size_flag為二值變數。值為‘0’表示當前圖像仿射預測子塊最小尺寸為4x4;值為‘1’表示最小尺寸為8x8。AffineSubblockSizeFlag的值等於affine_subblock_size_flag的值。如果位流中不存在affine_subblock_size_flag,AffineSubblockSizeFlag的值等於0。
解碼當前塊時,需要解析其是否使用仿射模式。在AVS3中,如果當前塊使用了仿射模式,還需要確定使用的是4參數(2控制點)模式還是6參數(3控制點)模式,預測參考模式,以及各個控制點的運動訊息。預測參考模式包括只參考參考幀清單0的預測參考模式‘Pred_List0’,只參考參考幀清單1的預測參考模式‘Pred_List1’,參考參考幀清單0和參考幀清單1的預測參考模式‘Pred_List01’,確定使用的是4參數(2控制點)模式還是6參數(3控制點)模式,預測參考模式,以及各個控制點的運動訊息在不同的模式(直接模式、跳過模式、普通模式)下有不同的確定方法。
仿射模式標誌affine_flag為二值變數。值為‘1’表示當前塊是仿射模式;值為‘0’表示不是仿射模式。AffineFlag的值等於affine_flag的值。如果位流中不存在affine_flag,AffineFlag的值為0。
仿射運動向量索引cu_affine_cand_idx,跳過模式或直接模式下的仿射模式索引值。AffineCandIdx的值等於cu_affine_cand_idx的值。如果位流中不存在cu_affine_cand_idx,AffineCandIdx的值等於0。
仿射自我調整運動向量精度索引affine_amvr_index,用於確定編碼單元的仿射運動向量精度。AffineAmvrIndex的值等於affine_amvr_index的值。如果位流中不存在affine_amvr_index,則AffineAmvrIndex的值等於0。
仿射幀間模式L0運動向量水平分量差絕對值mv_diff_x_abs_l0_affine,仿射幀間模式L0運動向量垂直分量差絕對值mv_diff_y_abs_l0_affine,來自參考圖像佇列0的運動向量差值的絕對值。MvDiffXAbsL0Affine等於mv_diff_x_abs_l0_affine的值,MvDiffYAbsAffineAffine等於mv_diff_y_abs_l0_affine的值。
仿射幀間模式L0運動向量水平分量差符號值mv_diff_x_sign_l0_affine,仿射幀間模式L0運動向量垂直分量差符號值mv_diff_y_sign_l0_affine,來自參考圖像佇列0的運動向量差值的符號位。MvDiffXSignL0Affine的值等於mv_diff_x_sign_l0_affine的值,MvDiffYSignL0Affine的值等於mv_diff_y_sign_l0_affine。如果位流中不存在mv_diff_x_sign_l0_affine或mv_diff_y_sign_l0_affine,則MvDiffXSignL0Affine或MvDiffYSignL0Affine的值為0。如果MvDiffXSignL0Affine的值為0,MvDiffXL0Affine等於MvDiffXAbsL0Affine;如果MvDiffXSignL0Affine的值為1,MvDiffXL0Affine等於-MvDiffXAbsL0Affine。如果MvDiffYSignL0Affine的值為0,MvDiffYL0Affine等於MvDiffYAbsL0Affine;如果MvDiffYSignL0Affine的值為1,MvDiffYL0Affine等於-MvDiffYAbsL0Affine。MvDiffXL0Affine和MvDiffYL0Affine的取值範圍為-32768~32767。
仿射幀間模式L1運動向量水平分量差絕對值mv_diff_x_abs_l1_affine,仿射幀間模式L1運動向量垂直分量差絕對值mv_diff_y_abs_l1_affine,來自參考圖像佇列1的運動向量差值的絕對值。MvDiffXAbsL1Affine等於mv_diff_x_abs_l1_affine的值,MvDiffYAbsAffineAffine等於mv_diff_y_abs_l1_affine的值。
仿射幀間模式L1運動向量水平分量差符號值mv_diff_x_sign_l1_affine,仿射幀間模式L1運動向量垂直分量差符號值mv_diff_y_sign_l1_affine,來自參考圖像佇列1的運動向量差值的符號位。MvDiffXSignL1Affine的值等於mv_diff_x_sign_l1_affine的值,MvDiffYSignL1Affine的值等於mv_diff_y_sign_l1_affine。如果位流中不存在mv_diff_x_sign_l1_affine或mv_diff_y_sign_l1_affine,則MvDiffXSignL1Affine或MvDiffYSignL1Affine的值為0。如果MvDiffXSignL1Affine的值為0,MvDiffXL1Affine等於MvDiffXAbsL1Affine;如果MvDiffXSignL1Affine的值為1,MvDiffXL1Affine等於-MvDiffXAbsL1Affine。如果MvDiffYSignL1Affine的值為0,MvDiffYL1Affine等於MvDiffYAbsL1Affine;如果MvDiffYSignL1Affine的值為1,MvDiffYL0Affine等於-MvDiffYAbsL1Affine。MvDiffXL1Affine和MvDiffYL1Affine的取值範圍為-32768~32767。
進一步地,在本申請的一個實施例中,如果當前塊使用了仿射模式,也確定了仿射模式的控制點模式,預測參考模式,以及子塊尺寸參數,就可以使用仿射模型匯出每個子塊的運動向量。
如果當前預測單元(這裡預測單元等於編碼塊)的預測參考模式是‘Pred_List0’,將mvs_L0(對應參考幀清單0的仿射控制點運動向量組)作為仿射控制點運動向量組,並透過仿射運動單元子塊運動向量陣列的匯出的方法得到當前預測單元的L0運動向量集合(記作MvArrayL0)。MvArrayL0集合由所有亮度預測子塊的L0運動向量組成。
如果當前預測單元(這裡預測單元等於編碼塊)的預測參考模式是‘Pred_List1’,將mvs_L1(對應參考幀清單1的仿射控制點運動向量組)作為仿射控制點運動向量組,並透過仿射運動單元子塊運動向量陣列的匯出的方法得到當前預測單元的L1運動向量集合(記作MvArrayL1)。MvArrayL1由所有亮度預測子塊的L1運動向量組成。
如果當前預測單元(這裡預測單元等於編碼塊)的預測參考模式是‘Pred_List01’,分別將mvs_L0和mvs_L1作為仿射控制點運動向量組並按“仿射運動單元子塊運動向量陣列的匯出”定義的方法得到當前預測單元的L0運動向量集合(記作MvArrayL0)和L1運動向量集合(記作MvArrayL1)。MvArrayL0和MvArrayL1分別由所有亮度預測子塊的L0運動向量和L1運動向量組成。
接下來,可以進一步獲取色度運動向量的矩陣,及仿射亮度樣本插值和仿射色度樣本插值得到仿射模式的亮度預測樣本矩陣,以及色度預測樣本矩陣。
若當前序列或當前幀圖像不使用本技術,如果當前預測單元(這裡預測單元等於編碼塊)的預測參考模式是‘Pred_List0’或Pred_List1’,那麼得到的亮度預測樣本矩陣以及色度預測樣本矩陣即為當前預測單元的預測樣本矩陣,如果當前預測單元(這裡預測單元等於編碼塊)的預測參考模式是‘Pred_List01’,那麼得到的2個亮度預測樣本矩陣平均後得到當前預測單元的亮度預測樣本矩陣,對每一個色度分量,上一步得到的2組(每組2個,共4個)色度預測樣本矩陣平均得到當前預測單元的色度預測樣本矩陣。
若當前序列或當前幀圖像使用本技術,匯出仿射運動單元子塊內部像素運動向量偏差矩陣:
如果當前預測單元(這裡預測單元等於編碼塊)的預測參考模式是‘Pred_List0’,將mvs_L0(對應參考幀清單0的仿射控制點運動向量組)作為仿射控制點運動向量組,並透過仿射運動單元子塊內部像素運動向量偏差矩陣的匯出的方法得到當前預測單元的L0的4種子塊內部運動向量偏差矩陣運動向量集合dMvA_L0,dMvB_L0,dMvC_L0,dMvN_L0。然後透過仿射運動單元子塊內部像素運動向量偏差矩陣的匯出的dMvA,dMvB,dMvC,dMvN分別作為dMvA_L0,dMvB_L0,dMvC_L0,dMvN_L0。
如果當前預測單元(這裡預測單元等於編碼塊)的預測參考模式是‘Pred_List1’,將mvs_L1(對應參考幀清單1的仿射控制點運動向量組)作為仿射控制點運動向量組,並透過仿射運動單元子塊內部像素運動向量偏差矩陣的匯出的方法得到當前預測單元的L1的4種子塊內部運動向量偏差矩陣運動向量集合dMvA_L1,dMvB_L1,dMvC_L1,dMvN_L1。然後透過仿射運動單元子塊內部像素運動向量偏差矩陣的匯出的dMvA,dMvB,dMvC,dMvN分別作為dMvA_L1,dMvB_L1,dMvC_L1,dMvN_L1。
如果當前預測單元(這裡預測單元等於編碼塊)的預測參考模式是‘Pred_List01’,分別將mvs_L0和mvs_L1作為仿射控制點運動向量組,並透過仿射運動單元子塊內部像素運動向量偏差矩陣的匯出的方法得到當前預測單元的L0的4種子塊內部運動向量偏差矩陣運動向量集合dMvA_L0,dMvB_L0,dMvC_L0,dMvN_L0 和L1的4種子塊內部運動向量偏差矩陣運動向量集合dMvA_L1,dMvB_L1,dMvC_L1,dMvN_L1。
進一步地,在本申請中,可以按照以下方法進行仿射運動單元子塊內部像素運動向量偏差矩陣的匯出:
如果仿射控制點運動向量組中有3個運動向量,運動向量組表示為mvsAffine(mv0,mv1,mv2);否則(仿射控制點運動向量組中有2個運動向量),運動向量組表示為mvsAffine(mv0,mv1)。
1、計算變數dHorX、dVerX、dHorY和dVerY:
dHorX=(mv1_x-mv0_x)<<(7-Log(width))
dHorY=(mv1_y-mv0_y)<<(7-Log(width))
如果mvsAffine中有3個運動向量,則:
dVerX=(mv2_x-mv0_x)<<(7-Log(height))
dVerY=(mv2_y-mv0_y)<<(7-Log(height))
否則(mvsAffine中有2個運動向量):
dVerX=−dHorY
dVerY=dHorX。
如圖7,假設前預測單元的寬度和高度分別是width和height,每個子塊的寬度和高度分別是subwidth和subheight。當前預測單元亮度預測塊的左上角樣本所在的子塊為A,右上角樣本所在的子塊為B,左下角樣本所在的子塊為C,其他位置所在子塊為其它子塊。
(i,j)是亮度子塊內部像素的座標,i的取值範圍是0~(subwidth-1),j的取值範圍是0~(subheight-1),計算4種亮度預測子塊內部每個像素(i,j)位置的運動向量偏差:
2.1、如果當前子塊是A,(i,j)像素的運動向量偏差dMvA[i][j]:
dMvA[i][j][0]=dHorX×i+dVerX×j
dMvA[i][j][1]=dHorY×i+dVerY×j;
2.2、如果當前子塊是B,(i,j)像素的運動向量偏差dMvB[i][j]:
dMvB[i][j][0]=dHorX×(i-subwidth)+dVerX×j
dMvB[i][j][1]=dHorY×(i-subwidth)+dVerY×j;
2.3、如果當前子塊為C且mvAffine中有3個運動向量,(i,j)像素的運動向量偏差dMvC[i][j]:
dMvC[i][j][0]=dHorX×i+dVerX×(j-subheight)
dMvC[i][j][1]=dHorY×i+dVerY×(j-subheight;
2.4、(i,j)像素的運動向量偏差dMvN[i][j]:
dMvN[i][j][0]=dHorX×(i –(subwidth>>1))+dVerX×(j –(subheight>>1))
dMvN[i][j][1]=dHorY×(i –(subwidth>>1))+dVerY×(j –(subheight>>1))。
其中,dMvX[i][j][0]表示水平分量的值,dMvX[i][j][1]表示豎直分量的值。X為A,B,C或N。
進一步地,在本申請中,匯出仿射運動單元子塊內部像素運動向量偏差矩陣後,對每一個子塊,對每一個像素位置,根據運動向量偏差,基於子塊的運動補償的第一預測值,使用二維濾波器進行濾波得到新的第二預測值。在本實施例中該幀間預測技術對亮度分量使用,然而,該幀間預測技術也可以用在色度分量,或者其他格式的任一分量。
具體地,在本申請的實施例中,二維濾波器在利用9個相鄰的、構成矩形的像素位置進行二次預測時,可以先確定當前塊的預測樣本矩陣,和當前塊的子塊的運動向量偏差集合;其中,運動向量偏差矩陣包括全部像素位置對應的運動向量偏差;然後基於9個相鄰的、構成矩形的像素位置,利用預測樣本矩陣和運動向量偏差集合,確定當前塊的二次預測後的樣本矩陣。
示例性的,在本申請中,二維濾波器在利用9個相鄰的、構成矩形的像素位置進行二次預測的過程如下:
如果當前預測單元(這裡預測單元等於編碼塊)的預測參考模式是‘Pred_List0’,將亮度預測樣本矩陣PredMatrixL0作為PredMatrixSb,並透過仿射二次預測的預測矩陣匯出的方法得到PredMatrixS作為新的亮度預測樣本矩陣PredMatrixL0。
如果當前預測單元(這裡預測單元等於編碼塊)的預測參考模式是‘Pred_List1’,將亮度預測樣本矩陣PredMatrixL1作為PredMatrixSb,並透過仿射二次預測的預測矩陣匯出的方法得到PredMatrixS作為新的亮度預測樣本矩陣PredMatrixL1。
如果當前預測單元(這裡預測單元等於編碼塊)的預測參考模式是‘Pred_List01’,分別將亮度預測樣本矩陣PredMatrixL0和PredMatrixL1作為PredMatrixSb,並透過仿射二次預測的預測矩陣匯出的方法得到PredMatrixS作為新的亮度預測樣本矩陣PredMatrixL0和PredMatrixL1。
進一步地,在本申請中,可以按照以下方法進行仿射二次預測的預測矩陣匯出:
如圖7,假設當前塊的寬度和高度分別是width和height,每個子塊的寬度和高度分別是subwidth和subheight。當前塊亮度預測樣本矩陣的左上角樣本所在的子塊為A,右上角樣本所在的子塊為B,左下角樣本所在的子塊為C,其他位置所在子塊為其它子塊。
對當前塊中的每個子塊,記子塊的運動向量偏差矩陣為dMv。執行如下操作:
1、如果子塊是A,dMv等於dMvA;
2、如果子塊是B,dMv等於dMvB;
3、如果子塊為C且mvAffine中有3個運動向量,dMv等於dMvC;
4、dMv等於dMvN。
(x,y)是子塊左上角位置的座標,(i,j)是亮度子塊內部像素的座標,i的取值範圍是0~(subwidth-1),j的取值範圍是0~(subheight-1),基於子塊的預測樣本矩陣為PredMatrixSb,二次預測的預測樣本矩陣為PredMatrixS,按照如下方法計算(x+i,y+j)的二次預測的預測樣本PredMatrixS[x+i][y+j]:
PredMatrixS[x+i][y+j]=(UPLEFT(x+i,y+j)×(-dMv[i][j][0]-dMv[i][j][1])+UP(x+i,y+j)×((-dMv[i][j][1])<<3)+ UPRIGHT(x+i,y+j)×(dMv[i][j][0]-dMv[i][j][1])+ LEFT(x+i,y+j)×((-dMv[i][j][0])<<3)+ CENTER(x+i,y+j)×(1<<15)+ RIGHT(x+i,y+j)×(dMv[i][j][0]<<3)+ DOWNLEFT(x+i,y+j)×(-dMv[i][j][0]+dMv[i][j][1])+ DOWN(x+i,y+j)×(dMv[i][j][1]<<3)+ DOWNRIGHT(x+i,y+j)×(dMv[i][j][0]+dMv[i][j][1])+ (1<<10))>>11 PredMatrixS[x+i][y+j] = Clip3(0,(1<<BitDepth)-1,PredMatrixS[x+i][y+j])。
其中,UPLEFT(x+i,y+j)=predMatrix[x+i-1<0?0:x+i-1][y+j-1<0?0:y+j-1] UP(x+i,y+j)=predMatrix[x+i][y+j-1<0?0:y+j-1] UPRIGHT(x+i,y+j)=predMatrix[x+i+1>width-1?width-1:x+i+1][y+j-1<0?0:y+j-1] LEFT(x+i,y+j)=predMatrix[x+i-1<0?0:x+i-1][y+j] CENTER(x+i,y+j)=predMatrix[x+i][y+j] RIGHT(x+i,y+j)=predMatrix[x+i+1>width-1?width-1:x+i+1][y+j] DOWNLEFT(x+i,y+j)=predMatrix[x+i-1<0?0:x+i-1][y+j+1<0?0:y+j-1] DOWN(x+i,y+j)=predMatrix[x+i][y+j-1<0?0:y+j-1] DOWNRIGHT(x+i,y+j)=predMatrix[x+i+1>width-1?width-1:x+i+1][ y+j+1>height-1?height-1:y+j+1]。
可以理解的是,在本申請的實施例中,CENTER(x+i,y+j)像素位置可以為上述9個相鄰的、構成矩形的像素位置中的中心位置,然後可以基於該(x+i,y+j)像素位置,以及與其相鄰的其他8個像素位置,進行二次預測處理。具體地,其他8個像素位置分別為UP(上)、UPRIGHT(右上)、LEFT(左)、RIGHT(右)、DOWNLEFT(左下)、DOWN(下)、DOWNRIGHT(右下)、UPLEFT(左上)。
需要說明的是,在本申請的實施例中,在對當前塊中的每一個像素位置進行濾波時,二維濾波器使用的對應像素位置的值是上述基於子塊的預測的預測值,濾波後的結果是透過本技術得到的新的預測值。具體地,根據二維濾波器的形狀(如矩形、菱形)可知,二維濾波器需要使用的像素位置有可能超過當前塊的邊界。圖23為對邊界像素位置濾波的示意圖,如圖23所示,以上述的9點矩形濾波器為例,如果待濾波的像素位置處在當前塊的邊界上,那麼對這個點濾波時濾波器對應的部分像素位置就會超出當前塊邊界。
針對上述問題,本申請提出了一種解決方法,具體是將當前塊的、基於子塊的預測的當前塊的邊界進行擴展,以使二維濾波器需要的像素位置不會超過擴展後的塊的邊界。也就是說,如果二維濾波器所要使用的像素位置不屬於當前塊,那麼可以根據當前塊的邊界位置對該當前塊進行擴展處理。圖24為邊界的擴展示意圖,如圖24所示,以上述的9點矩形濾波器為例,基於子塊的預測的當前塊需要上下左右邊界各擴展出一個像素位置,一個簡單的擴展方法是左邊擴展的像素複製其水平方向對應的左邊界的像素值,右邊擴展的像素複製其水平方向對應的右邊界的像素值,上邊擴展的像素複製其豎直方向對應的上邊界的像素值,下邊擴展的像素複製其豎直方向對應的下邊界的像素值,擴展的四個頂點可以複製其對應的頂點的像素值。
可以理解的是,透過擴展處理保證二維濾波器需要的像素位置不會超過擴展後的塊的邊界的方法,同樣可以應用於其他形狀的二維濾波器,不申請不作具體限定。
針對上述問題,本申請還提出了一種解決方法,如果二維濾波器的某一個位置對應的像素位置超出了當前塊的邊界,那麼調整其對應的像素位置為當前塊內的一個位置。也就是說,如果二維濾波器所要使用的像素位置不屬於當前塊,那麼可以利用所述當前塊內的像素位置替換該像素位置。例如,設當前塊的左上角像素位置為(0,0),當前塊的寬度是width,當前塊的高度是height,那麼當前塊水平方向的範圍是0~(width-1),當前塊豎直方向的範圍是0~(height-1)。如果濾波器需要使用的像素位置為(x,y),如果x小於0,那麼將x設為0。如果x大於width-1,那麼將x設為width-1。如果y小於0,那麼將y設為0,如果y大於height-1,那麼將y設為height-1。
可以理解的是,利用所述當前塊內的像素位置替換超出當前塊的像素位置的方式來保證二維濾波器需要的像素位置不會超過擴展後的塊的邊界的方法,同樣可以應用於其他形狀的二維濾波器,不申請不作具體限定。
本申請實施例提供一種幀間預測方法,可以在基於子塊的預測之後,對運動向量與子塊的運動向量有偏差的像素位置,在基於子塊的第一預測值的基礎上進行基於點的二次預測,獲得第二預測值。其中,利用二維濾波器進行的基於點的二次預測,可以使用構成預設形狀的幾個點的訊息對第一預測值進行修正,最終獲得修正後的第二預測值,本申請提出的幀間預測方法能夠很好的適用於全部場景,大大提升編碼性能,從而提高了編解碼效率。
本申請實施例提供一種幀間預測方法,該方法應用於影像編碼設備,即編碼器。該方法所實現的功能可以透過編碼器中的第二處理器調用電腦程式來實現,當然電腦程式可以保存在第二記憶體中,可見,該編碼器至少包括第二處理器和第二記憶體。
圖25為幀間預測方法的實現流程示意圖五,如圖25所示,編碼器進行幀間預測的方法可以包括以下步驟:
步驟S401、確定當前塊的預測模式參數。
在本申請的實施例中,編碼器可以先確定當前塊的預測模式參數。具體地,編碼器可以先確定當前塊使用的預測模式,然後基於該預測模式確定對應的預測模式參數。其中,預測模式參數可以用於對當前塊所使用的預測模式進行確定。
需要說明的是,在本申請的實施例中,待編碼圖像可以劃分為多個圖像塊,當前待編碼的圖像塊可以稱為當前塊,與當前塊相鄰的圖像塊可以稱為相鄰塊;即在待編碼圖像中,當前塊與相鄰塊之間具有相鄰關係。這裡,每個當前塊可以包括第一圖像分量、第二圖像分量和第三圖像分量;也即當前塊為待編碼圖像中當前待進行第一圖像分量、第二圖像分量或者第三圖像分量預測的圖像塊。
其中,假定當前塊進行第一圖像分量預測,而且第一圖像分量為亮度分量,即待預測圖像分量為亮度分量,那麼當前塊也可以稱為亮度塊;或者,假定當前塊進行第二圖像分量預測,而且第二圖像分量為色度分量,即待預測圖像分量為色度分量,那麼當前塊也可以稱為色度塊。
說明的是,在本申請的實施例中,預測模式參數指示了當前塊採用的預測模式以及與該預測模式相關的參數。這裡,針對預測模式參數的確定,可以採用簡單的決策策略,比如根據失真值的大小進行確定;也可以採用複雜的決策策略,比如根據位元率失真優化(Rate Distortion Optimization,RDO)的結果進行確定,本申請實施例不作任何限定。通常而言,可以採用RDO方式來確定當前塊的預測模式參數。
具體地,在一些實施例中,編碼器在確定當前塊的預測模式參數時,可以先利用多種預測模式對當前塊進行預編碼處理,獲得每一種預測模式對應的位元率失真代價值;然後從所獲得的多個位元率失真代價值中選擇最小位元率失真代價值,並根據最小位元率失真代價值對應的預測模式確定當前塊的預測模式參數。
也就是說,在編碼器側,針對當前塊可以採用多種預測模式分別對當前塊進行預編碼處理。這裡,多種預測模式通常包括有幀間預測模式、傳統幀內預測模式和非傳統幀內預測模式;其中,傳統幀內預測模式可以包括有直流(Direct Current,DC)模式、平面(PLANAR)模式和角度模式等,非傳統幀內預測模式可以包括有基於矩陣的幀內預測(Matrix-based Intra Prediction,MIP)模式、跨分量線性模型預測(Cross-component Linear Model Prediction,CCLM)模式、幀內塊複製(Intra Block Copy,IBC)模式和PLT(Palette)模式等,而幀間預測模式可以包括有普通幀間預測模式、GPM模式和AWP模式等。
這樣,在利用多種預測模式分別對當前塊進行預編碼之後,可以得到每一種預測模式對應的位元率失真代價值;然後從所得到的多個位元率失真代價值中選取最小位元率失真代價值,並將該最小位元率失真代價值對應的預測模式確定為當前塊的預測模式參數。除此之外,還可以在利用多種預測模式分別對當前塊進行預編碼之後,得到每一種預測模式對應的失真值;然後從所得到的多個失真值中選取最小失真值,然後將該最小失真值對應的預測模式確定為當前塊使用的預測模式,並根據該預測模式設置對應的預測模式參數。如此,最終使用所確定的預測模式參數對當前塊進行編碼,而且在這種預測模式下,可以使得預測殘差較小,能夠提高編碼效率。
也就是說,在編碼側,編碼器可以選取最優的預測模式對當前塊進行預編碼,在這過程中就可以確定出當前塊的預測模式,然後確定用於指示預測模式的預測模式參數,從而將相應的預測模式參數寫入位元流,由編碼器傳輸到解碼器。
相應地,在解碼器側,解碼器透過解析位元流便可以直接獲取到當前塊的預測模式參數,並根據解析獲得的預測模式參數確定當前塊所使用的預測模式,以及該預測模式對應的相關參數。
步驟S402、當預測模式參數指示使用幀間預測模式確定當前塊的幀間預測值時,確定當前塊的子塊的第一運動向量;其中,當前塊包括多個子塊。
在本申請的實施例中,如果預測模式參數指示當前塊使用幀間預測模式確定當前塊的幀間預測值,那麼編碼器可以先確定出當前塊的每一個子塊的第一運動向量。其中,一個子塊對應有一個第一運動向量。
需要說明的是,在本申請的實施例中,當前塊為當前幀中待編碼的圖像塊,當前幀以圖像塊的形式按一定順序依次進行編碼,該當前塊為當前幀內按該順序下一時刻待編碼的圖像塊。當前塊可具有多種規格尺寸,例如16x16、32x32或32x16等規格,其中數字表示當前塊上像素點的行數和列數。
進一步對,在本申請的實施例中,當前塊可以劃分為多個子塊,其中,每一個子塊的尺寸大小都是相同的,子塊為較小規格的像素點集合。子塊的尺寸可以為8x8或4x4。
示例性的,在本申請中,當前塊的尺寸為16x16,可以劃分為4個尺寸均為8x8的子塊。
可以理解的是,在本申請的實施例中,在編碼器確定預測模式參數指示使用幀間預測模式確定當前塊的幀間預測值的情況下,就可以繼續採用本申請實施例所提供的幀間預測方法。
在本申請的實施例中,進一步地,當預測模式參數指示使用幀間預測模式確定當前塊的幀間預測值時,編碼器確定當前塊的子塊的第一運動向量時,可以確定當前塊的仿射模式參數和預測參考模式。當仿射模式參數指示使用仿射模式時,確定控制點模式和子塊尺寸參數。最後可以根據預測參考模式、控制點模式以及子塊尺寸參數,確定第一運動向量。
在本申請的實施例中,編碼器在確定預測模式參數之後,如果預測模式參數指示當前塊使用幀間預測模式確定當前塊的幀間預測值,那麼編碼器可以確定仿射模式參數和預測參考模式。
說明的是,在本申請的實施例中,仿射模式參數用於對是否使用仿射模式進行指示。具體地,仿射模式參數可以為仿射運動補償允許標誌affine_enable_flag,編碼器透過仿射模式參數的取值的確定,可以進一步確定是否使用仿射模式。
也就是說,在本申請中,仿射模式參數可以為一個二值變數。若所述仿射模式參數的取值為1,則指示使用所述仿射模式;若所述仿射模式參數的取值為0,則指示不使用所述仿射模式。
示例性的,在本申請中,仿射模式參數的取值可以等於仿射運動補償允許標誌affine_enable_flag的值,如果affine_enable_flag的值為‘1’,表示可使用仿射運動補償;如果affine_enable_flag的值為‘0’,表示不應使用仿射運動補償。
進一步地,在本申請的實施例中,如果編碼器確定的仿射模式參數指示使用仿射模式,那麼編碼器可以進行獲取控制點模式和子塊尺寸參數。
需要說明的是,在本申請的實施例中,控制點模式用於對控制點的個數進行確定。在仿射模型中,一個子塊可以有2個控制點或者3個控制點,相應地,控制點模式可以為2個控制點對應的控制點模式,或者為3個控制點對應的控制點模式。即控制點模式可以包括4參數模式和6參數模式。
可以理解的是,在本申請的實施例中,對於AVS3標準,如果當前塊使用了仿射模式,那麼編碼器還需要確定出當前塊在仿射模式中控制點的個數進行確定,從而可以確定出使用的是4參數(2個控制點)模式,還是6參數(3個控制點)模式。
進一步地,在本申請的實施例中,如果編碼器確定的仿射模式參數指示使用仿射模式,那麼編碼器可以進一步確定子塊尺寸參數。
具體地,可以透過仿射預測子塊尺寸標誌affine_subblock_size_flag表徵子塊尺寸參數,編碼器可以對子塊尺寸標誌的取值的設定來指示子塊尺寸參數,即指示當前塊的子塊的尺寸大小。其中,子塊的尺寸大小可以為8x8或4x4。具體地,在本申請中,子塊尺寸標誌可以為一個二值變數。若子塊尺寸標誌的取值為1,則指示子塊尺寸參數為8x8;若子塊尺寸標誌的取值為0,則指示子塊尺寸參數為4x4。
示例性的,在本申請中,子塊尺寸標誌的取值可以等於仿射預測子塊尺寸標誌affine_subblock_size_flag的值,如果affine_subblock_size_flag的值為‘1’,則當前塊劃分為尺寸為8x8的子塊;如果affine_subblock_size_flag的值為‘0’,則當前塊劃分為尺寸為4x4的子塊。
進一步地,在本申請的實施例中,編碼器在確定控制點模式和子塊尺寸參數之後,便可以根據預測參考模式、控制點模式以及子塊尺寸參數,進一步確定出當前塊中的子塊的第一運動向量。
具體地,在本申請的實施例中,編碼器可以先根據所述預測參考模式確定控制點運動向量組;然後可以基於所述控制點運動向量組、所述控制點模式以及所述子塊尺寸參數,確定出子塊的第一運動向量。
可以理解的是,在本申請的實施例中,控制點運動向量組可以用於對控制點的運動向量進行確定。
需要說明的是,在本申請的實施例中,編碼器可以按照上述方法,遍歷當前塊中的每一個子塊,利用每一個子塊的控制點運動向量組、控制點模式以及子塊尺寸參數,確定出每一個子塊的第一運動向量,從而可以根據每一個子塊的第一運動向量構建獲得運動向量集合。
可以理解的是,在本申請的實施例中,當前塊的運動向量集合中可以包括當前塊的每一個子塊的第一運動向量。
進一步地,在本申請的實施例中,編碼器在根據所述控制點運動向量組、所述控制點模式以及所述子塊尺寸參數,確定所述第一運動向量時,可以先根據所述控制點運動向量組、所述控制點模式以及所述當前塊的尺寸參數,確定差值變數;然後可以基於所述預測模式參數和所述子塊尺寸參數,確定子塊位置;最後,便可以利用所述差值變數和所述子塊位置,確定所述子塊的所述第一運動向量,進而可以獲得當前塊的多個子塊的運動向量集合。
需要說明的是,在本申請中,在確定子塊內的每個位置與子塊的運動向量的偏差時,如果當前塊使用的是仿射預測模型,可以根據仿射預測模型的公式計算出子塊內的每個位置的運動向量,與子塊的運動向量相減得到它們的偏差。如果子塊的運動向量都選擇子塊內同一位置的運動向量,如4x4的塊使用距離左上角(2,2)的位置,8x8的塊使用距離左上角(4,4)的位置,根據現在標準包括VVC和AVS3中使用的仿射模型,每個子塊相同位置的運動向量偏差都是相同的。但是AVS在左上角,右上角,以及3控制點的情況下的左下角(上述AVS3文本中的,如圖7所示的A,B,C位置)與其他塊使用的位置不同,相應地在計算左上角,右上角,以及3控制點的情況下的左下角的子塊的運動向量偏差時與其他塊也不同。具體如實施例。
步驟S403、基於第一運動向量確定子塊的第一預測值,和像素位置與子塊之間的運動向量偏差;其中,像素位置為子塊內的像素點的位置。
在本申請的實施例中,編碼器在確定出當前塊的每一個子塊的第一運動向量之後,可以基於子塊的第一運動向量,分別確定出子塊的第一預測值和像素位置與子塊之間的運動向量偏差。
可以理解的是,在本申請的實施例中,步驟S403具體可以包括:
步驟S403a、基於第一運動向量確定子塊的第一預測值。
步驟S403b、基於第一運動向量確定像素位置與子塊之間的運動向量偏差。
其中,本申請實施例提出的幀間預測方法對編碼器執行步驟S403a和步驟S403b的順序不進行限定,也就是說,在本申請中,在確定出當前塊的每一個子塊的第一運動向量之後,編碼器可以先執行步驟S403a,然後執行步驟S403b,也可以先執行步驟S403b,再執行步驟S403a,還可以同時執行步驟S403a和步驟S403b。
進一步地,在本申請的實施例中,編碼器在基於所述第一運動向量確定所述子塊的第一預測值時,可以先確定樣本矩陣;其中,所述樣本矩陣包括亮度樣本矩陣和色度樣本矩陣;然後可以根據所述預測參考模式、所述子塊尺寸參數、所述樣本矩陣以及所述運動向量集合,確定所述第一預測值。
需要說明的是,在本申請的實施例中,編碼器在根據所述預測參考模式、所述子塊尺寸參數、所述樣本矩陣以及所述運動向量集合,確定所述第一預測值時,可以先根據所述預測參考模式和所述子塊尺寸參數,從所述運動向量集合中確定目標運動向量;然後可以利用預測參考模式對應的參考圖像佇列和參考索引所述樣本矩陣以及所述目標運動向量,確定預測樣本矩陣;其中,所述預測樣本矩陣包括多個子塊的所述第一預測值。
具體地,在本申請的實施例中,樣本矩陣可以包括亮度樣本矩陣和色度樣本矩陣,相應地,編碼器確定出的預測樣本矩陣可以包括亮度預測樣本矩陣和色度預測樣本矩陣,其中,亮度預測樣本矩陣包括多個子塊的第一亮度預測值,色度預測樣本矩陣包括多個子塊的第一色度預測值,第一亮度預測值和第一色度預測值構成子塊的第一預測值。
需要說明的是,在申請的實施例中,樣本矩陣中的亮度樣本矩陣可以為1/16精度亮度樣本矩陣,樣本矩陣中的色度樣本矩陣可以為1/32精度色度樣本矩陣。
可以理解的是,在本申請的實施例中,對於不同的預測參考模式,編碼器獲取的參考圖像佇列和參考索引是不相同的。
進一步地,在本申請的實施例中,編碼器確定樣本矩陣時,可以先獲取亮度插值濾波器係數和色度插值濾波器係數;然後可以基於所述亮度插值濾波器係數確定所述亮度樣本矩陣,同時,可以基於所述色度插值濾波器係數確定所述色度樣本矩陣。
進一步地,在本申請的實施例中,編碼器在基於所述像素位置與子塊之間的運動向量偏差時,可以確定二次預測參數;如果二次預測參數指示使用二次預測,那麼編碼器可以基於所述差值變數確定所述子塊與每一個像素位置之間的所述運動向量偏差。
可以理解的是,在本申請的實施例中,編碼器在基於所述差值變數確定所述子塊與每一個像素位置之間的所述運動向量偏差之後,便可以利用子塊內的全部像素位置對應的全部運動向量偏差,構建出該子塊對應的運動向量偏差矩陣。可見,運動向量偏差矩陣中包括有子塊與任意一個內部的像素點之間的運動向量偏差,即運動向量偏差。
進一步地,在本申請的實施例中,如果編碼器確定的二次預測參數指示不使用二次預測,那麼,編碼器可以選擇直接將上述步驟S403a中所獲得的當前塊的子塊的第一預測值作為子塊的第二預測值,而不再進行下述步驟S404和步驟S405的處理。
具體地,在本本申請的實施例中,如果二次預測參數指示不使用二次預測,那麼編碼器可以利用所述預測樣本矩陣確定出第二預測值。其中,預測樣本矩陣包括多個子塊的所述第一預測值,編碼器可以將像素位置所在的子塊的第一預測值確定為自身的第二預測值。
示例性的,在本申請中,如果當前塊的預測參考模式取值為0或1,即使用第一參考模式‘PRED_List0’,或使用第二參考模式‘PRED_List1’,那麼可以直接從包括有1個亮度預測樣本矩陣(2個色度預測樣本矩陣)的預測樣本矩陣中,選擇像素位置所在的子塊的第一預測值,並將該第一預測值確定為像素位置的幀間預測值,即第二預測值。
示例性的,在本申請中,如果當前塊的預測參考模式取值為2,即使用第三參考模式‘PRED_List01’,那麼可以先對預測樣本矩陣中所包括的2個亮度預測樣本矩陣(2組共4個色度預測樣本矩陣)進行均值運算,得到1個平均後的亮度預測樣本(2個平均後的色度預測樣本),最後便從這個平均後的亮度預測樣本(2個平均後的色度預測樣本)中,選擇像素位置所在的子塊的第一預測值,並將該第一預測值確定為像素位置的幀間預測值,即第二預測值。
步驟S404、根據運動向量偏差確定二維濾波器的濾波係數;其中,二維濾波器用於按照預設形狀進行二次預測處理。
在本申請的實施例中,編碼器在基於所述第一運動向量分別確定所述子塊的第一預測值,和所述像素位置與子塊之間的運動向量偏差之後,便可以根據運動向量偏差進一步確定出二維濾波器的濾波係數。
需要說明的是,在本申請的實施例中,二維濾波器的濾波器係數是與像素位置所對應的運動向量偏差相關的。也就是說,對於不同的像素位置,如果對應的運動向量偏差不同,那麼使用的二維濾波器的濾波係數也是不同的。
進一步地,在本申請的實施例中,編碼器在根據所述運動向量偏差確定二維濾波器的濾波係數時,可以先確定比例參數,然後可以根據比例參數和運動向量偏差,確定所述像素位置對應的所述濾波器係數。
需要說明的是,在本申請的實施例中,比例參數可以包括至少一個比例值,所述運動向量偏差包括水平偏差和垂直偏差;其中,所述至少一個比例值均為非零實數。
具體地,在本申請中,當所述二維濾波器利用9個相鄰的、構成矩形的像素位置進行二次預測時,位於所述矩形的中心的像素位置為待預測位置,其他8個像素位置依次位於所述待預測位置的左上、上、右上、右、右下、下、左下、左的相鄰位置。
相應地,在本申請中,編碼器可以基於所述至少一個比例值和所述待預測位置的所述運動向量偏差,按照預設計算規則計算獲得所述9個相鄰的像素位置對應的9個濾波器係數。
需要說明的是,在本申請中,預設計算規則可以包括多種不同的計算方式,如加法運算、減法運算、乘法運算等。其中,對於不同的像素位置,可以使用不同的計算方式進行濾波器係數的計算。
可以理解的是,在本申請中,編碼器在按照預設計算規則中不同的計算方法計算獲得多個像素位置對應的多個濾波器係數中,部分濾波器係數可以為運動向量偏差的一次函數,即兩者為線性關係,還可以為運動向量偏差的二次函數或高次函數,即兩者為非線性關係。
也就是說,在本申請中,多個相鄰的像素位置對應的多個濾波器係數中的任意一個濾波器係數,可以為所述運動向量偏差的一次函數、二次函數或者高次函數。
示例性的,在本申請中,假設像素位置的運動向量偏差為(dmv_x,dmv_y),其中,如果目標像素位置的座標為(i,j),那麼dmv_x可以表示為dMvX[i][j][0],即表示運動向量偏差在水平分量的偏差值,dmv_y可以表示為dMvX[i][j][1],即表示運動向量偏差在垂直分量的偏差值。
其中,比例參數一般是小數或分數,一種可能的情況是比例參數都是2的冪,如1/2,1/4,1/8等。這裡的dmv_x,dmv_y都是其實際的大小,即dmv_x,dmv_y的1表示1個像素的距離,dmv_x,dmv_y是小數或者分數。
需要說明的是,在本申請的實施例中,與現有的8抽頭的濾波器相比,目前常見的8抽頭的濾波器所對應的整像素位置和分像素位置的運動向量在水平和垂直方向均為非負的,且大小均屬於0像素到1像素之間,即dmv_x,dmv_y不可以為負的。而在本申請中,濾波器對應的整像素位置和分像素位置的運動向量在水平和垂直方向都可以為負的,即dmv_x,dmv_y可以為負的。
需要說明的是,在本申請的實施例中,用於進行二次預測的二維濾波器是相鄰的構成預設形狀的點所構成的濾波器。相鄰的構成預設形狀的點可以包括多個點,例如由9個點構成。
可以理解的是,在本申請的實施例中,預設形狀可以為對稱形狀,例如,預設形狀可以包括矩形、菱形或其他任意一種對稱形狀。
示例性的,在本申請中,二維濾波器是一個矩形的濾波器,具體地,二維濾波器是由9個相鄰的構成矩形的像素位置組成的濾波器。在9個像素位置中,位於中心的像素位置是當前需要二次預測的像素位置的像素位置。
步驟S405、基於濾波係數和第一預測值,確定子塊的第二預測值,將第二預測值確定為子塊的幀間預測值。
在本申請的實施例中,編碼器在根據運動向量偏差確定出二維濾波器的濾波係數之後,便可以基於所述濾波係數和所述第一預測值,確定所述子塊的第二預測值,從而可以實現結合與像素位置的運動向量偏差對子塊的二次預測,完成對第一預測值的修正。
可以理解的是,在本申請的實施例中,編碼器利用像素位置所對應的運動向量偏差確定出濾波器係數,從而可以按照濾波器係數,透過二維濾波器對第一預測值進行修正,獲得修正後的、子塊的第二預測值。可見,第二預測值為基於所述第一預測值的修正值。
進一步地,在本申請的實施例中,編碼器在基於所述濾波係數和所述第一預測值,確定所述子塊的第二預測值時,可以先對濾波器係數與子塊的第一預測值進行乘法運算,獲得乘積結果,遍歷子塊中的全部像素位置之後,再對子塊的全部像素位置的所述乘積結果進行加法運算,獲得求和結果,最後可以對加法結果進行歸一化處理,最終便可以獲得子塊修正後的第二預測值。
需要說明的是,在本申請的實施例中,在進行二次預測之前,一般情況下是將像素位置所在的子塊的第一預測值作為該像素位置的修正前的預測值,因此,在透過二維濾波器進行濾波時,可以將濾波器係數與對應像素位置的預測值,即第一預測值相乘,並對每一個像素位置對應的乘積結果進行累加,然後歸一化。
可以理解的是,在本申請中,編碼器可以透過多種方式進行歸一化處理,例如,可以將濾波器係數與對應的像素位置的預測值相乘後累加的結果,右移4+shift1位。或者,還可以將濾波器係數與對應的像素位置的預測值相乘後累加的結果,再加上(1<<(3+shift1)),然後右移4+shift1位。
可見,在本申請中,在獲得子塊內部的像素位置對應的運動向量偏差之後,對每一個子塊,以及每一個子塊中的每一個像素位置,可以根據運動向量偏差,基於子塊的運動補償的第一預測值,使用二維濾波器進行濾波,完成對子塊的二次預測,得到新的第二預測值。
進一步地,在本申請的實施例中,二維濾波器可以理解為利用多個相鄰的、構成所述預設形狀的像素位置進行二次預測。其中,預設形狀可以為矩形、菱形或任意一種對稱形狀。
具體地,在本申請的實施例中,二維濾波器在利用9個相鄰的、構成矩形的像素位置進行二次預測時,可以先確定所述當前塊的預測樣本矩陣,和所述當前塊的所述子塊的運動向量偏差集合;其中,所述運動向量偏差矩陣包括全部像素位置對應的所述運動向量偏差;然後基於所述9個相鄰的、構成矩形的像素位置,利用所述預測樣本矩陣和所述運動向量偏差集合,確定所述當前塊的二次預測後的樣本矩陣。
示例性的,可以限制運動向量的大小在一個合理的範圍,如上述使用的運動向量在水平方向和垂直方向的正負值都不超過1個像素或1/2像素或1/4像素等。
可以理解的是,如果當前塊的預測參考模式是‘Pred_List01’,那麼編碼器將各分量的多個預測樣本矩陣平均得到該分量的最終的預測樣本矩陣。例如,2個亮度預測樣本矩陣平均後得到新的亮度預測樣本矩陣。
進一步地,在本申請的實施例中,在得到當前塊的預測樣本矩陣後,如果當前塊沒有變換係數,那麼預測矩陣就作為當前塊的編碼結果,如果當前塊還有變換係數,那麼,可以先編碼變換係數,並透過反變換、反量化得到殘差矩陣,將殘差矩陣加到預測矩陣上得到編碼結果。
綜上所述,透過步驟S401至步驟S405所提出的幀間預測方法,在基於子塊的預測之後,對運動向量與子塊的運動向量有偏差的像素位置,在基於子塊的預測的基礎上進行基於點的二次預測。基於點的二次預測使用構成矩形、菱形等預設形狀的多個點的訊息。基於點的二次預測使用二維濾波器。二維濾波器是相鄰的構成預設形狀的點的構成的濾波器。相鄰的構成預設形狀的點可以為9個點。對一個像素位置,濾波器處理的結果為該位置的新預測值。
本實施例提供了一種幀間預測方法,可以在基於子塊的預測之後,對運動向量與子塊的運動向量有偏差的像素位置,在基於子塊的第一預測值的基礎上進行基於點的二次預測,獲得第二預測值。其中,利用二維濾波器進行的基於點的二次預測,可以使用構成預設形狀的幾個點的訊息對第一預測值進行修正,最終獲得修正後的第二預測值,本申請提出的幀間預測方法能夠很好的適用於全部場景,大大提升編碼性能,從而提高了編解碼效率。
基於上述實施例,在本申請的再一實施例中,圖26為解碼器的組成結構示意圖一,如圖26所示,本申請實施例提出的解碼器300可以包括解析單元301和第一確定單元302;
所述解析單元301,用於解析位元流,獲取當前塊的預測模式參數;
所述第一確定單元302,用於當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前塊的子塊的第一運動向量;其中,所述當前塊包括多個子塊;以及基於所述第一運動向量確定所述子塊的第一預測值,和所述像素位置與子塊之間的運動向量偏差;其中,所述像素位置為所述子塊內的像素點的位置;以及根據所述運動向量偏差確定二維濾波器的濾波係數;其中,所述二維濾波器用於按照預設形狀進行二次預測處理;以及基於所述濾波係數和所述第一預測值,確定所述子塊的第二預測值,將所述第二預測值確定為所述子塊的幀間預測值。
圖27為解碼器的組成結構示意圖二,如圖27所示,本申請實施例提出的解碼器300還可以包括第一處理器303、儲存有第一處理器303可執行指令的第一記憶體304、第一通訊介面305,和用於連接第一處理器303、第一記憶體304以及第一通訊介面305的第一匯流排306。
進一步地,在本申請的實施例中,上述第一處理器303,用於解析位元流,獲取當前塊的預測模式參數;
當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前塊的子塊的第一運動向量;其中,所述當前塊包括多個子塊;基於所述第一運動向量確定所述子塊的第一預測值,和所述像素位置與子塊之間的運動向量偏差;其中,所述像素位置為所述子塊內的像素點的位置;根據所述運動向量偏差確定二維濾波器的濾波係數;其中,所述二維濾波器用於按照預設形狀進行二次預測處理;基於所述濾波係數和所述第一預測值,確定所述子塊的第二預測值,將所述第二預測值確定為所述子塊的幀間預測值。
集成的單元如果以軟體功能模組的形式實現並非作為獨立的產品進行銷售或使用時,可以儲存在一個電腦可讀取儲存媒介中,基於這樣的理解,本實施例的技術方案本質上或者說對現有技術做出貢獻的部分或者該技術方案的全部或部分可以以軟體產品的形式體現出來,該電腦軟體產品儲存在一個儲存媒介中,包括若干指令用以使得一台電腦設備(可以是個人電腦,伺服器,或者網路設備等)或processor(處理器)執行本實施例方法的全部或部分步驟。而前述的儲存媒介包括:隨身碟、行動硬碟、唯讀記憶體(Read Only Memory,ROM)、隨機存取記憶體(Random Access Memory,RAM)、磁碟或者光碟等各種可以儲存程式碼的媒介。
本申請實施例提供了一種解碼器,該解碼器可以在基於子塊的預測之後,對運動向量與子塊的運動向量有偏差的像素位置,在基於子塊的第一預測值的基礎上進行基於點的二次預測,獲得第二預測值。其中,利用二維濾波器進行的基於點的二次預測,可以使用構成預設形狀的幾個點的訊息對第一預測值進行修正,最終獲得修正後的第二預測值,本申請提出的幀間預測方法能夠很好的適用於全部場景,大大提升編碼性能,從而提高了編解碼效率。
圖28為編碼器的組成結構示意圖一,如圖28所示,本申請實施例提出的編碼器400可以包括第二確定單元401;
所述第二確定單元401,用於確定當前塊的預測模式參數;以及當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前塊的子塊的第一運動向量;其中,所述當前塊包括多個子塊;以及基於所述第一運動向量確定所述子塊的第一預測值,和所述像素位置與子塊之間的運動向量偏差;其中,所述像素位置為所述子塊內的像素點的位置;以及根據所述運動向量偏差確定二維濾波器的濾波係數;其中,所述二維濾波器用於按照預設形狀使用二次預測;以及基於所述濾波係數和所述第一預測值,確定所述子塊的第二預測值,將所述第二預測值確定為所述子塊的幀間預測值。
圖29為編碼器的組成結構示意圖二,如圖29所示,本申請實施例提出的編碼器400還可以包括第二處理器402、儲存有第二處理器402可執行指令的第二記憶體403、第二通訊介面404,和用於連接第二處理器402、第二記憶體403以及第二通訊介面404的第二匯流排405。
進一步地,在本申請的實施例中,上述第二處理器402,用於確定當前塊的預測模式參數;
當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前塊的子塊的第一運動向量;其中,所述當前塊包括多個子塊;基於所述第一運動向量確定所述子塊的第一預測值,和所述像素位置與子塊之間的運動向量偏差;其中,所述像素位置為所述子塊內的像素點的位置;根據所述運動向量偏差確定二維濾波器的濾波係數;其中,所述二維濾波器用於按照預設形狀使用二次預測;基於所述濾波係數和所述第一預測值,確定所述子塊的第二預測值,將所述第二預測值確定為所述子塊的幀間預測值。
集成的單元如果以軟體功能模組的形式實現並非作為獨立的產品進行銷售或使用時,可以儲存在一個電腦可讀取儲存媒介中,基於這樣的理解,本實施例的技術方案本質上或者說對現有技術做出貢獻的部分或者該技術方案的全部或部分可以以軟體產品的形式體現出來,該電腦軟體產品儲存在一個儲存媒介中,包括若干指令用以使得一台電腦設備(可以是個人電腦,伺服器,或者網路設備等)或processor(處理器)執行本實施例方法的全部或部分步驟。而前述的儲存媒介包括:隨身碟、行動硬碟、唯讀記憶體(Read Only Memory,ROM)、隨機存取記憶體(Random Access Memory,RAM)、磁碟或者光碟等各種可以儲存程式碼的媒介。
本申請實施例提供了一種編碼器,該編碼器可以在基於子塊的預測之後,對運動向量與子塊的運動向量有偏差的像素位置,在基於子塊的第一預測值的基礎上進行基於點的二次預測,獲得第二預測值。其中,利用二維濾波器進行的基於點的二次預測,可以使用構成預設形狀的幾個點的訊息對第一預測值進行修正,最終獲得修正後的第二預測值,本申請提出的幀間預測方法能夠很好的適用於全部場景,大大提升編碼性能,從而提高了編解碼效率。
本申請實施例提供電腦可讀儲存媒介和電腦可讀儲存媒介,其上儲存有程式,該程式被處理器執行時實現如上述實施例所述的方法。
具體來講,本實施例中的一種幀間預測方法對應的程式指令可以被儲存在光碟,硬碟,隨身碟等儲存媒介上,當儲存媒介中的與一種幀間預測方法對應的程式指令被一電子設備讀取或被執行時,包括如下步驟:
解析位元流,獲取當前塊的預測模式參數;
當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前塊的子塊的第一運動向量;其中,所述當前塊包括多個子塊;
基於所述第一運動向量確定所述子塊的第一預測值,和所述像素位置與子塊之間的運動向量偏差;其中,所述像素位置為所述子塊內的像素點的位置;
根據所述運動向量偏差確定二維濾波器的濾波係數;其中,所述二維濾波器用於按照預設形狀進行二次預測處理;
基於所述濾波係數和所述第一預測值,確定所述子塊的第二預測值,將所述第二預測值確定為所述子塊的幀間預測值。
具體來講,本實施例中的一種幀間預測方法對應的程式指令可以被儲存在光碟,硬碟,隨身碟等儲存媒介上,當儲存媒介中的與一種幀間預測方法對應的程式指令被一電子設備讀取或被執行時,包括如下步驟:
確定當前塊的預測模式參數;
當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前塊的子塊的第一運動向量;其中,所述當前塊包括多個子塊;
基於所述第一運動向量確定所述子塊的第一預測值,和所述像素位置與子塊之間的運動向量偏差;其中,所述像素位置為所述子塊內的像素點的位置;
根據所述運動向量偏差確定二維濾波器的濾波係數;其中,所述二維濾波器用於按照預設形狀使用二次預測;
基於所述濾波係數和所述第一預測值,確定所述子塊的第二預測值,將所述第二預測值確定為所述子塊的幀間預測值。
本領域內的技術人員應明白,本申請的實施例可提供為方法、系統、或電腦程式產品。因此,本申請可採用硬體實施例、軟體實施例、或結合軟體和硬體方面的實施例的形式。而且,本申請可採用在一個或多個其中包含有電腦可用程式碼的電腦可用儲存媒介(包括但不限於磁碟記憶體和光學記憶體等)上實施的電腦程式產品的形式。
本申請是參照根據本申請實施例的方法、設備(系統)、和電腦程式產品的實現流程示意圖和/或方塊圖來描述的。應理解可由電腦程式指令實現流程示意圖和/或方塊圖中的每一流程和/或方塊、以及實現流程示意圖和/或方塊圖中的流程和/或方塊的結合。可提供這些電腦程式指令到通用電腦、專用電腦、嵌入式處理機或其他可程式資料處理設備的處理器以產生一個機器,使得透過電腦或其他可程式資料處理設備的處理器執行的指令產生用於實現在實現流程示意圖一個流程或多個流程和/或方塊圖一個方塊或多個方塊中指定的功能的裝置。
這些電腦程式指令也可儲存在能引導電腦或其他可程式資料處理設備以特定方式工作的電腦可讀記憶體中,使得儲存在該電腦可讀記憶體中的指令產生包括指令裝置的製造品,該指令裝置實現在實現流程示意圖一個流程或多個流程和/或方塊圖一個方塊或多個方塊中指定的功能。
這些電腦程式指令也可裝載到電腦或其他可程式資料處理設備上,使得在電腦或其他可程式設備上執行一系列操作步驟以產生電腦實現的處理,從而在電腦或其他可程式設備上執行的指令提供用於實現在實現流程示意圖一個流程或多個流程和/或方塊圖一個方塊或多個方塊中指定的功能的步驟。
本申請所提供的幾個方法實施例中所揭露的方法,在不衝突的情況下可以任意組合,得到新的方法實施例。
本申請所提供的幾個產品實施例中所揭露的特徵,在不衝突的情況下可以任意組合,得到新的產品實施例。
本申請所提供的幾個方法或設備實施例中所揭露的特徵,在不衝突的情況下可以任意組合,得到新的方法實施例或設備實施例。
以上所述,僅為本申請的具體實施方式,但本申請的保護範圍並不局限於此,任何熟悉本技術領域的技術人員在本申請揭露的技術範圍內,可輕易想到變化或替換,都應涵蓋在本申請的保護範圍之內。因此,本申請的保護範圍應以所述請求項的保護範圍為準。
11:影像編碼系統 110:解碼圖像暫存單元 111:變換單元 112:量化單元 113:模式選擇和編碼控制邏輯單元 114:幀內預測單元 115:幀間預測單元 116:反量化單元 117:反變換單元 118:迴路濾波單元 119:編碼單元 12:影像解碼系統 121:解碼單元 122:反量化單元 123:幀內預測單元 124:運動補償單元 125:迴路濾波單元 126:解碼圖像暫存單元 127:反變換單元 300:解碼器 301:解析單元 302:第一確定單元 303:第一處理器 304:第一記憶體 305:第一通訊介面 306:第一匯流排 400:編碼器 401:第二確定單元 402:第二處理器 403:第二記憶體 404:第二通訊介面 405:第二匯流排 S101~S109:步驟 S201~S205:步驟 S301~S306:步驟 S401~S405:步驟
圖1為仿射模型的示意圖一;
圖2為仿射模型的示意圖二;
圖3為像素的插值示意圖;
圖4為子塊插值的示意圖一;
圖5為子塊插值的示意圖二;
圖6為每個子塊的運動向量示意圖;
圖7為樣本位置示意圖;
圖8為仿射預測亮度樣本的位置示意圖;
圖9為仿射預測整像素樣本和分像素樣本的位置示意圖;
圖10為仿射預測色度樣本的位置示意圖;
圖11為仿射預測整像素樣本和分像素樣本的位置示意圖;
圖12為仿射預測的流程的示意圖;
圖13為PROF修正預測值的流程示意圖一;
圖14為PROF修正預測值的流程示意圖二;
圖15為本申請實施例提供的一種影像編碼系統的組成方塊圖示意圖;
圖16為本申請實施例提供的一種影像解碼系統的組成方塊圖示意圖;
圖17為幀間預測方法的實現流程示意圖一;
圖18為二維濾波器的示意圖一;
圖19為二維濾波器的示意圖二;
圖20為幀間預測方法的實現流程示意圖二;
圖21為幀間預測方法的實現流程示意圖三;
圖22為幀間預測方法的實現流程示意圖四;
圖23為對邊界像素位置濾波的示意圖;
圖24為邊界的擴展示意圖;
圖25為幀間預測方法的實現流程示意圖五;
圖26為解碼器的組成結構示意圖一;
圖27為解碼器的組成結構示意圖二;
圖28為編碼器的組成結構示意圖一;
圖29為編碼器的組成結構示意圖二。
S201~S205:步驟

Claims (61)

  1. 一種幀間預測方法,應用於解碼器,所述方法包括: 解析位元流,獲取當前塊的預測模式參數; 當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前塊的子塊的第一運動向量;其中,所述當前塊包括多個子塊; 基於所述第一運動向量確定所述子塊的第一預測值,和所述像素位置與子塊之間的運動向量偏差;其中,所述像素位置為所述子塊內的像素點的位置; 根據所述運動向量偏差確定二維濾波器的濾波係數;其中,所述二維濾波器用於按照預設形狀進行二次預測處理; 基於所述濾波係數和所述第一預測值,確定所述子塊的第二預測值,將所述第二預測值確定為所述子塊的幀間預測值。
  2. 根據請求項1所述的方法,其中,所述確定所述當前塊的子塊的第一運動向量,包括: 解析所述位元流,獲取所述當前塊的仿射模式參數和預測參考模式; 當所述仿射模式參數指示使用仿射模式時,確定控制點模式和子塊尺寸參數; 根據所述預測參考模式、所述控制點模式以及所述子塊尺寸參數,確定所述第一運動向量。
  3. 根據請求項2所述的方法,其中,所述根據所述預測參考模式、所述控制點模式以及所述子塊尺寸參數,確定所述第一運動向量,包括: 根據所述預測參考模式確定控制點運動向量組; 根據所述控制點運動向量組、所述控制點模式以及所述子塊尺寸參數,確定所述第一運動向量。
  4. 根據請求項3所述的方法,所述方法還包括: 遍歷所述當前塊的每一個子塊,根據所述每一個子塊的第一運動向量構建運動向量集合。
  5. 根據請求項4所述的方法,其中,所述根據所述控制點運動向量組、所述控制點模式以及所述子塊尺寸參數,確定所述第一運動向量,包括: 根據所述控制點運動向量組、所述控制點模式以及所述當前塊的尺寸參數,確定差值變數; 基於所述預測模式參數和所述子塊尺寸參數,確定子塊位置; 利用所述差值變數和所述子塊位置,確定所述子塊的所述第一運動向量。
  6. 根據請求項4所述的方法,其中,所述基於所述第一運動向量確定所述子塊的第一預測值,和所述像素位置與子塊之間的運動向量偏差,包括: 確定樣本矩陣;其中,所述樣本矩陣包括亮度樣本矩陣和色度樣本矩陣; 根據所述預測參考模式、所述子塊尺寸參數、所述樣本矩陣以及所述運動向量集合,確定所述第一預測值。
  7. 根據請求項6所述的方法,其中,所述確定樣本矩陣,包括: 獲取亮度插值濾波器係數和色度插值濾波器係數; 基於所述亮度插值濾波器係數確定所述亮度樣本矩陣,基於所述色度插值濾波器係數確定所述色度樣本矩陣。
  8. 根據請求項6所述的方法,其中,所述根據所述預測參考模式、所述子塊尺寸參數、所述樣本矩陣以及所述運動向量集合,確定所述第一預測值,包括: 根據所述預測參考模式和所述子塊尺寸參數,從所述運動向量集合中確定目標運動向量; 利用所述預測參考模式對應的參考圖像佇列和參考索引、所述樣本矩陣以及所述目標運動向量,確定預測樣本矩陣;其中,所述預測樣本矩陣包括多個子塊的所述第一預測值。
  9. 根據請求項5所述的方法,其中,所述基於所述第一運動向量確定所述子塊的第一預測值,和所述像素位置與子塊之間的運動向量偏差,包括: 解析所述位元流,獲取二次預測參數; 當所述二次預測參數指示使用二次預測時,基於所述差值變數確定所述子塊與每一個像素位置之間的所述運動向量偏差。
  10. 根據請求項8所述的方法,所述方法還包括: 解析所述位元流,獲取二次預測參數; 當所述二次預測參數指示不使用二次預測時,將所述預測樣本矩陣中的所述第一預測值確定為所述第二預測值。
  11. 根據請求項1所述的方法,其中,所述二維濾波器用於利用多個相鄰的、構成所述預設形狀的像素位置進行二次預測。
  12. 根據請求項11所述的方法,其中,所述預設形狀為矩形、菱形或任意一種對稱形狀。
  13. 根據請求項12所述的方法,其中,所述根據所述運動向量偏差確定二維濾波器的濾波係數,包括: 解析所述位元流,獲取比例參數; 根據所述比例參數和所述運動向量偏差,確定所述像素位置對應的所述濾波器係數。
  14. 根據請求項11所述的方法,其中,所述比例參數包括至少一個比例值,所述運動向量偏差包括水平偏差和垂直偏差;其中,所述至少一個比例值均為非零實數。
  15. 根據請求項14所述的方法,其中,當所述二維濾波器利用9個相鄰的、構成矩形的像素位置進行二次預測時,位於所述矩形的中心的像素位置為待預測位置,其他8個像素位置依次位於所述待預測位置的左上、上、右上、右、右下、下、左下、左的相鄰位置。
  16. 根據請求項15所述的方法,其中,所述根據所述比例參數和所述運動向量偏差,確定所述像素位置對應的所述濾波器係數,包括: 基於所述至少一個比例值和所述待預測位置的所述運動向量偏差,按照預設計算規則計算獲得所述9個相鄰的像素位置對應的9個濾波器係數。
  17. 根據請求項16所述的方法,其中, 將所述待預測位置的濾波器係數設置為1。
  18. 根據請求項16所述的方法,其中,所述根據所述比例參數和所述運動向量偏差,確定所述像素位置對應的所述濾波器係數,包括: 對所述運動向量偏差進行移位處理,獲得移位後運動向量偏差; 基於所述至少一個比例值和所述待預測位置的所述移位後運動向量偏差,按照預設計算規則計算獲得所述濾波器係數。
  19. 根據請求項11所述的方法,其中,所述多個相鄰的像素位置對應的多個濾波器係數中的任意一個濾波器係數,為所述運動向量偏差的一次函數、二次函數或者高次函數。
  20. 根據請求項1所述的方法,其中,所述基於所述濾波係數和所述第一預測值,確定所述子塊的第二預測值,包括: 對所述濾波係數和所述第一預測值進行乘法運算,獲得所述像素位置對應的乘積結果; 對所述子塊的全部像素位置的所述乘積結果進行加法運算,獲得求和結果; 對所述求和結果進行歸一化處理,獲得所述第二預測值。
  21. 根據請求項12所述的方法,其中,當所述二維濾波器利用9個相鄰的、構成矩形的像素位置進行二次預測時, 確定所述當前塊的預測樣本矩陣,和所述當前塊的所述子塊的運動向量偏差集合;其中,所述運動向量偏差矩陣包括全部像素位置對應的所述運動向量偏差; 基於所述9個相鄰的、構成矩形的像素位置,利用所述預測樣本矩陣和所述運動向量偏差集合,確定所述當前塊的二次預測後的樣本矩陣。
  22. 根據請求項21所述的方法,其中, 若所述9個相鄰的、構成矩形的像素位置中的至少一個像素位置不屬於所述當前塊,則利用所述當前塊的邊界位置對所述當前塊進行擴展處理。
  23. 根據請求項21所述的方法,其中, 若所述9個相鄰的、構成矩形的像素位置中的至少一個像素位置不屬於所述當前塊,則利用所述當前塊內的像素位置替換所述至少一個像素位置。
  24. 根據請求項2所述的方法,其中, 若所述仿射模式參數的取值為1,則指示使用所述仿射模式; 若所述仿射模式參數的取值為0,或者,未解析得到所述仿射模式參數,則指示不使用所述仿射模式。
  25. 根據請求項2所述的方法,其中,所述確定子塊尺寸參數,包括: 解析所述位元流,獲得子塊尺寸標誌; 若所述子塊尺寸標誌的取值為1,則確定所述子塊尺寸參數為8x8; 若所述子塊尺寸標誌的取值為0,或者,未解析得到所述子塊尺寸標誌,則確定所述子塊尺寸參數為4x4。
  26. 根據請求項2所述的方法,其中,所述控制點模式包括4參數模式和6參數模式。
  27. 根據請求項8所述的方法,其中, 解析所述位元流,獲得所述預測參考模式對應的所述參考圖像佇列和所述參考索引。
  28. 一種幀間預測方法,應用於編碼器,所述方法包括: 確定當前塊的預測模式參數; 當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前塊的子塊的第一運動向量;其中,所述當前塊包括多個子塊; 基於所述第一運動向量確定所述子塊的第一預測值,和所述像素位置與子塊之間的運動向量偏差;其中,所述像素位置為所述子塊內的像素點的位置; 根據所述運動向量偏差確定二維濾波器的濾波係數;其中,所述二維濾波器用於按照預設形狀使用二次預測; 基於所述濾波係數和所述第一預測值,確定所述子塊的第二預測值,將所述第二預測值確定為所述子塊的幀間預測值。
  29. 根據請求項28所述的方法,其中,所述確定當前塊的預測模式參數,包括: 利用多種預測模式對所述當前塊進行預編碼處理,獲得每一種預測模式對應的位元率失真代價值; 從所獲得的多個位元率失真代價值中選擇最小位元率失真代價值,根據所述最小位元率失真代價值對應的預測模式確定當前塊的預測模式參數。
  30. 根據請求項28所述的方法,其中,所述確定所述當前塊的子塊的第一運動向量,包括: 確定所述當前塊的仿射模式參數和預測參考模式; 當所述仿射模式參數指示使用仿射模式時,確定控制點模式和子塊尺寸參數; 根據所述預測參考模式、所述控制點模式以及所述子塊尺寸參數,確定所述第一運動向量。
  31. 根據請求項29所述的方法,其中,所述根據所述預測參考模式、所述控制點模式以及所述子塊尺寸參數,確定所述第一運動向量,包括: 根據所述預測參考模式確定控制點運動向量組; 根據所述控制點運動向量組、所述控制點模式以及所述子塊尺寸參數,確定所述第一運動向量。
  32. 根據請求項31所述的方法,所述方法還包括: 遍歷所述當前塊的每一個子塊,根據所述每一個子塊的第一運動向量構建運動向量集合。
  33. 根據請求項31所述的方法,其中,所述根據所述控制點運動向量組、所述控制點模式以及所述子塊尺寸參數,確定所述第一運動向量,包括: 根據所述控制點運動向量組、所述控制點模式以及所述當前塊的尺寸參數,確定差值變數; 基於所述預測模式參數和所述子塊尺寸參數,確定子塊位置; 利用所述差值變數和所述子塊位置,確定所述子塊的所述第一運動向量。
  34. 根據請求項31所述的方法,其中,所述基於所述第一運動向量確定所述子塊的第一預測值,和所述像素位置與子塊之間的運動向量偏差,包括: 確定樣本矩陣;其中,所述樣本矩陣包括亮度樣本矩陣和色度樣本矩陣; 根據所述預測參考模式、所述子塊尺寸參數、所述樣本矩陣以及所述運動向量集合,確定所述第一預測值。
  35. 根據請求項34所述的方法,其中,所述確定樣本矩陣,包括: 獲取亮度插值濾波器係數和色度插值濾波器係數; 基於所述亮度插值濾波器係數確定所述亮度樣本矩陣,基於所述色度插值濾波器係數確定所述色度樣本矩陣。
  36. 根據請求項34所述的方法,其中,所述根據所述預測參考模式、所述子塊尺寸參數、所述樣本矩陣以及所述運動向量集合,確定所述第一預測值,包括: 根據所述預測參考模式和所述子塊尺寸參數,從所述運動向量集合中確定目標運動向量; 利用所述預測參考模式對應的參考圖像佇列和參考索引、所述樣本矩陣以及所述目標運動向量,確定預測樣本矩陣;其中,所述預測樣本矩陣包括多個子塊的所述第一預測值。
  37. 根據請求項33所述的方法,其中,所述基於所述第一運動向量確定所述子塊的第一預測值,和所述像素位置與子塊之間的運動向量偏差,包括: 確定二次預測參數; 當所述二次預測參數指示使用二次預測時,基於所述差值變數確定所述子塊與每一個像素位置之間的所述運動向量偏差。
  38. 根據請求項36所述的方法,所述方法還包括: 確定二次預測參數; 當所述二次預測參數指示不使用二次預測時,將所述預測樣本矩陣中的所述第一預測值確定為所述第二預測值。
  39. 根據請求項28所述的方法,其中,所述二維濾波器用於利用多個相鄰的、構成所述預設形狀的像素位置進行二次預測。
  40. 根據請求項39所述的方法,其中,所述預設形狀為矩形、菱形或任意一種對稱形狀。
  41. 根據請求項40所述的方法,其中,所述根據所述運動向量偏差確定二維濾波器的濾波係數,包括: 確定比例參數; 根據所述比例參數和所述運動向量偏差,確定所述像素位置對應的所述濾波器係數。
  42. 根據請求項41所述的方法,其中,所述比例參數包括至少一個比例值,所述運動向量偏差包括水平偏差和垂直偏差;其中,所述至少一個比例值均為非零實數。
  43. 根據請求項42所述的方法,其中,當所述二維濾波器利用9個相鄰的、構成矩形的像素位置進行二次預測時,位於所述矩形的中心的像素位置為待預測位置,其他8個像素位置依次位於所述待預測位置的左上、上、右上、右、右下、下、左下、左的相鄰位置。
  44. 根據請求項43所述的方法,其中,所述根據所述比例參數和所述運動向量偏差,確定所述像素位置對應的所述濾波器係數,包括: 基於所述至少一個比例值和所述待預測位置的所述運動向量偏差,按照預設計算規則計算獲得所述9個相鄰的像素位置對應的9個濾波器係數。
  45. 根據請求項44所述的方法,其中, 將所述待預測位置的濾波器係數設置為1。
  46. 根據請求項43所述的方法,其中,所述根據所述比例參數和所述運動向量偏差,確定所述像素位置對應的所述濾波器係數,包括: 對所述運動向量偏差進行移位處理,獲得移位後運動向量偏差; 基於所述至少一個比例值和所述待預測位置的所述移位後運動向量偏差,按照預設計算規則計算獲得所述濾波器係數。
  47. 根據請求項39所述的方法,其中,所述多個相鄰的像素位置對應的多個濾波器係數中的任意一個濾波器係數,為所述運動向量偏差的一次函數、二次函數或者高次函數。
  48. 根據請求項28所述的方法,其中,所述基於所述濾波係數和所述第一預測值,確定所述子塊的第二預測值,包括: 對所述濾波係數和所述第一預測值進行乘法運算,獲得所述像素位置對應的乘積結果; 對所述子塊的全部像素位置的所述乘積結果進行加法運算,獲得求和結果; 對所述求和結果進行歸一化處理,獲得所述第二預測值。
  49. 根據請求項40所述的方法,其中,當所述二維濾波器利用9個相鄰的、構成矩形的像素位置進行二次預測時, 確定所述當前塊的預測樣本矩陣,和所述當前塊的所述子塊的運動向量偏差集合;其中,所述運動向量偏差矩陣包括全部像素位置對應的所述運動向量偏差; 基於所述9個相鄰的、構成矩形的像素位置,利用所述預測樣本矩陣和所述運動向量偏差集合,確定所述當前塊的二次預測後的樣本矩陣。
  50. 根據請求項49所述的方法,其中, 若所述9個相鄰的、構成矩形的像素位置中的至少一個像素位置不屬於所述當前塊,則利用所述當前塊的邊界位置對所述當前塊進行擴展處理。
  51. 根據請求項49所述的方法,其中, 若所述9個相鄰的、構成矩形的像素位置中的至少一個像素位置不屬於所述當前塊,則利用所述當前塊內的像素位置替換所述至少一個像素位置。
  52. 根據請求項30所述的方法,其中, 將所述預測模式參數、所述仿射模式參數、所述預測參考模式寫入位元流。
  53. 根據請求項30所述的方法,其中, 若所述子塊尺寸參數為8x8,則將所述子塊尺寸標誌的設置為1,並將所述子塊尺寸標誌寫入位元流; 若所述子塊尺寸參數為4x4,則將所述子塊尺寸標誌的設置為0,並將所述子塊尺寸標誌寫入位元流。
  54. 根據請求項30所述的方法,其中,所述控制點模式包括4參數模式和6參數模式。
  55. 根據請求項37或38所述的方法,其中, 將所述二次預測參數寫入位元流。
  56. 根據請求項41所述的方法,其中, 將所述比例參數寫入位元流。
  57. 一種解碼器,所述解碼器包括解析單元,第一確定單元; 所述解析單元,用於解析位元流,獲取當前塊的預測模式參數; 所述第一確定單元,用於當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前塊的子塊的第一運動向量;其中,所述當前塊包括多個子塊;以及基於所述第一運動向量確定所述子塊的第一預測值,和所述像素位置與子塊之間的運動向量偏差;其中,所述像素位置為所述子塊內的像素點的位置;以及根據所述運動向量偏差確定二維濾波器的濾波係數;其中,所述二維濾波器用於按照預設形狀進行二次預測處理;以及基於所述濾波係數和所述第一預測值,確定所述子塊的第二預測值,將所述第二預測值確定為所述子塊的幀間預測值。
  58. 一種解碼器,所述解碼器包括第一處理器、儲存有所述第一處理器可執行指令的第一記憶體,當所述指令被執行時,所述第一處理器執行時實現如請求項1-27任一項所述的方法。
  59. 一種編碼器,所述編碼器包括第二確定單元; 所述第二確定單元,用於確定當前塊的預測模式參數;以及當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前塊的子塊的第一運動向量;其中,所述當前塊包括多個子塊;以及基於所述第一運動向量確定所述子塊的第一預測值,和所述像素位置與子塊之間的運動向量偏差;其中,所述像素位置為所述子塊內的像素點的位置;以及根據所述運動向量偏差確定二維濾波器的濾波係數;其中,所述二維濾波器用於按照預設形狀使用二次預測;以及基於所述濾波係數和所述第一預測值,確定所述子塊的第二預測值,將所述第二預測值確定為所述子塊的幀間預測值。
  60. 一種編碼器,所述編碼器包括第二處理器、儲存有所述第二處理器可執行指令的第二記憶體,當所述指令被執行時,所述第二處理器執行時實現如請求項28-56任一項所述的方法。
  61. 一種電腦儲存媒介,所述電腦儲存媒介儲存有電腦程式,所述電腦程式被第一處理器執行時實現如請求項1-27任一項所述的方法,或者,被第二處理器執行時實現如請求項28-56任一項所述的方法。
TW110123864A 2020-07-29 2021-06-29 幀間預測方法、編碼器、解碼器以及電腦儲存媒介 TW202211690A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN202010746227.6 2020-07-29
CN202010746227.6A CN114071157A (zh) 2020-07-29 2020-07-29 帧间预测方法、编码器、解码器以及计算机存储介质

Publications (1)

Publication Number Publication Date
TW202211690A true TW202211690A (zh) 2022-03-16

Family

ID=80037497

Family Applications (1)

Application Number Title Priority Date Filing Date
TW110123864A TW202211690A (zh) 2020-07-29 2021-06-29 幀間預測方法、編碼器、解碼器以及電腦儲存媒介

Country Status (5)

Country Link
CN (3) CN114071157A (zh)
MX (1) MX2023000959A (zh)
TW (1) TW202211690A (zh)
WO (1) WO2022022278A1 (zh)
ZA (1) ZA202213227B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115278255B (zh) * 2022-09-23 2022-12-20 山东宝德龙健身器材有限公司 一种用于力量器械安全管理的数据存储系统

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118042154A (zh) * 2018-01-25 2024-05-14 三星电子株式会社 使用基于子块的运动补偿进行视频信号处理的方法和装置
EP3741121B1 (en) * 2018-02-14 2024-09-25 Huawei Technologies Co., Ltd. Adaptive interpolation filter
CN110662073B (zh) * 2018-06-29 2022-08-30 北京字节跳动网络技术有限公司 子块的边界滤波
CN111050168B (zh) * 2019-12-27 2021-07-13 浙江大华技术股份有限公司 仿射预测方法及其相关装置
CN112601081B (zh) * 2020-12-04 2022-06-24 浙江大华技术股份有限公司 一种自适应分区多次预测方法及装置

Also Published As

Publication number Publication date
WO2022022278A1 (zh) 2022-02-03
MX2023000959A (es) 2023-02-22
ZA202213227B (en) 2023-09-27
CN114866783A (zh) 2022-08-05
CN114556944A (zh) 2022-05-27
CN114071157A (zh) 2022-02-18

Similar Documents

Publication Publication Date Title
CN112425169B (zh) 用于视频译码中帧内预测和帧间预测的插值滤波方法和装置
JP2022078048A (ja) 画像復号方法及び画像符号化方法
RU2562762C2 (ru) Усовершенствованное кодирование с внутрикадровым предсказанием с использованием планарных представлений
CN108449604B (zh) 使用亮度采样的色度块的内部预测方法以及使用其的装置
CN109845263B (zh) 用于视频编码的设备和方法
CN117528111A (zh) 图像编码方法、图像解码方法及用于传送比特流的方法
WO2013042888A2 (ko) 머지 후보 블록 유도 방법 및 이러한 방법을 사용하는 장치
JP6784836B2 (ja) ビデオコーディングのための装置及び方法
TW201347558A (zh) 圖像處理裝置及方法
TWI504241B (zh) 影像編碼方法、裝置、影像解碼方法、裝置及其程式產品
WO2022116113A1 (zh) 一种帧内预测方法、装置及解码器和编码器
KR20200098433A (ko) 영상 부호화/복호화 방법, 장치 및 비트스트림을 저장한 기록 매체
CN114830663A (zh) 变换方法、编码器、解码器以及存储介质
WO2022022278A1 (zh) 帧间预测方法、编码器、解码器以及计算机存储介质
WO2022061680A1 (zh) 帧间预测方法、编码器、解码器以及计算机存储介质
WO2022077495A1 (zh) 帧间预测方法、编码器、解码器以及计算机存储介质
TW202332274A (zh) 在4:4:4色度格式及單一樹狀結構情況下針對所有通道之基於矩陣的內部預測技術
TW202209893A (zh) 幀間預測方法、編碼器、解碼器以及電腦儲存媒介
WO2022037344A1 (zh) 帧间预测方法、编码器、解码器以及计算机存储介质
CN116980596A (zh) 一种帧内预测方法、编码器、解码器及存储介质
TW202335495A (zh) 視頻編解碼系統中多假設幀內模式的方法和裝置
JP2021010193A (ja) ビデオコーディングのための装置及び方法
TW202335496A (zh) 用於視頻編解碼系統幀間預測的方法和装置
CN118511508A (zh) 用于视频处理的方法、装置和介质
KR20180000886A (ko) 비디오 신호 처리 방법 및 장치