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

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

Info

Publication number
TW202209892A
TW202209892A TW110126413A TW110126413A TW202209892A TW 202209892 A TW202209892 A TW 202209892A TW 110126413 A TW110126413 A TW 110126413A TW 110126413 A TW110126413 A TW 110126413A TW 202209892 A TW202209892 A TW 202209892A
Authority
TW
Taiwan
Prior art keywords
block
sub
current
pixel position
motion vector
Prior art date
Application number
TW110126413A
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 TW202209892A publication Critical patent/TW202209892A/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/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
    • 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

Landscapes

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

Abstract

一種幀間預測方法、編碼器、解碼器以及電腦儲存媒介,包括:解析位元流,獲取當前塊的預測模式參數;當預測模式參數指示使用幀間預測模式確定幀間預測值時,確定當前子塊的第一運動向量;確定當前子塊的第一預測值,並確定目標像素位置;當前像素位置為當前子塊內的一個像素點位置,目標像素位置為對當前像素位置的像素點進行二次預測或PROF處理的像素點位置;若目標像素位置不屬於當前子塊,則根據當前子塊對目標像素位置進行更新處理,獲得更新後像素位置;基於第一預測值和更新後像素位置,確定第二預測值並確定當前子塊的幀間預測值。

Description

幀間預測方法、編碼器、解碼器以及電腦儲存媒介
本申請涉及影像編解碼技術領域,尤其涉及一種幀間預測方法、編碼器、解碼器以及電腦儲存媒介。
在影像編解碼領域,為了兼顧性能和代價,一般情況下,在多功能影像編碼(Versatile Video Coding,VVC)及數位音頻視頻編解碼技術標準工作組(Audio Video coding Standard Workgroup of China,AVS)中的仿射預測是基於子塊來實現的。目前,一方面提出了使用光流原理的預測修正(prediction refinement with optical flow,PROF)使用光流原理對基於子塊的仿射預測進行修正;另一方面提出了在基於子塊的預測之後使用二次預測獲得更加準確的預測值,從而實現了對仿射預測的改善。具體地,PROF依賴於基準位置的水平方向和垂直方向的梯度來修正仿射預測結果,而二次預測則是使用濾波器對子塊中的一個像素位置再次進行預測。
然而,無論是二次預測中還是PROF,均需要使用到當前像素位置周圍的其他像素位置,一旦其他像素位置中的一個或者多個像素位置與當前像素位置不在同一個子塊時,計算的準確性可能會大大降低,也就是說,現有的PROF修正預測值方法和二次預測方法其實並不嚴謹,在對仿射預測進行改善時,並不能很好的適用於全部場景,編碼性能有待提升。
本申請提出一種幀間預測方法、編碼器、解碼器以及電腦儲存媒介,可以大大提升編碼性能,從而提高了編解碼效率。
本申請的技術方案是這樣實現的:
第一方面,本申請實施例提供了一種幀間預測方法,應用於解碼器,該方法包括:
解析位元流,獲取當前塊的預測模式參數;
當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前塊的當前子塊的第一運動向量;其中,所述當前塊包括多個子塊;
基於所述第一運動向量確定所述當前子塊的第一預測值,並確定當前像素位置對應的目標像素位置;其中,所述當前像素位置為所述當前子塊內的一個像素點的位置,所述目標像素位置為對所述當前像素位置的像素點進行二次預測或PROF處理的像素點的位置;
若所述目標像素位置不屬於所述當前子塊,則根據所述當前子塊對所述目標像素位置進行更新處理,獲得更新後像素位置;
基於所述第一預測值和所述更新後像素位置,確定所述當前子塊對應的第二預測值,將所述第二預測值確定為所述當前子塊的幀間預測值。
第二方面,本申請實施例提供了一種幀間預測方法,應用於編碼器,該方法包括:
確定當前塊的預測模式參數;
當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前塊的當前子塊的第一運動向量;其中,所述當前塊包括多個子塊;
基於所述第一運動向量確定所述當前子塊的第一預測值,並確定當前像素位置對應的目標像素位置;其中,所述當前像素位置為所述當前子塊內的一個像素點的位置,所述目標像素位置為對所述當前像素位置的像素點進行二次預測或PROF處理的像素點的位置;
若所述目標像素位置不屬於所述當前子塊,則根據所述當前子塊對所述目標像素位置進行更新處理,獲得更新後像素位置;
基於所述第一預測值和所述更新後像素位置,確定所述當前子塊對應的第二預測值,將所述第二預測值確定為所述當前子塊的幀間預測值。
第三方面,本申請實施例提供了一種解碼器,所述解碼器包括解析單元,第一確定單元,第一更新單元,
所述解析單元,用於解析位元流,獲取當前塊的預測模式參數;
所述第一確定單元,用於當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前塊的當前子塊的第一運動向量;其中,所述當前塊包括多個子塊;基於所述第一運動向量確定所述當前子塊的第一預測值,並確定當前像素位置對應的目標像素位置;其中,所述當前像素位置為所述當前子塊內的一個像素點的位置,所述目標像素位置為對所述當前像素位置的像素點進行二次預測或PROF處理的像素點的位置;
所述第一更新單元,用於若所述目標像素位置不屬於所述當前子塊,則根據所述當前子塊對所述目標像素位置進行更新處理,獲得更新後像素位置;
所述第一確定單元,還用於基於所述第一預測值和所述更新後像素位置,確定所述當前子塊對應的第二預測值,將所述第二預測值確定為所述當前子塊的幀間預測值。
第四方面,本申請實施例提供了一種解碼器,所述解碼器包括第一處理器、儲存有所述第一處理器可執行指令的第一記憶體,當所述指令被執行時,所述第一處理器執行時實現如上所述的幀間預測方法。
第五方面,本申請實施例提供了一種編碼器,所述編碼器包括第二確定單元,第二更新單元,
所述第二確定單元,用於確定當前塊的預測模式參數;當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前塊的當前子塊的第一運動向量;其中,所述當前塊包括多個子塊;基於所述第一運動向量確定所述當前子塊的第一預測值,並確定當前像素位置對應的目標像素位置;其中,所述當前像素位置為所述當前子塊內的一個像素點的位置,所述目標像素位置為對所述當前像素位置的像素點進行二次預測或PROF處理的像素點的位置;
所述第二更新單元,用於若所述目標像素位置不屬於所述當前子塊,則根據所述當前子塊對所述目標像素位置進行更新處理,獲得更新後像素位置;
所述第二確定單元,還用於基於所述第一預測值和所述更新後像素位置,確定所述當前子塊對應的第二預測值,將所述第二預測值確定為所述當前子塊的幀間預測值。
第六方面,本申請實施例提供了一種編碼器,所述編碼器包括第二處理器、儲存有所述第二處理器可執行指令的第二記憶體,當所述指令被執行時,所述第二處理器執行時實現如上所述的幀間預測方法。
第七方面,本申請實施例提供了一種電腦儲存媒介,該電腦儲存媒介儲存有電腦程式,所述電腦程式被第一處理器和第二處理器執行時,實現如上所述的幀間預測方法。
本申請實施例所提供的一種幀間預測方法、編碼器、解碼器以及電腦儲存媒介,解碼器解析位元流,獲取當前塊的預測模式參數;當預測模式參數指示使用幀間預測模式確定當前塊的幀間預測值時,確定當前塊的當前子塊的第一運動向量;其中,當前塊包括多個子塊;基於第一運動向量確定當前子塊的第一預測值,並確定當前像素位置對應的目標像素位置;其中,當前像素位置為當前子塊內的一個像素點的位置,目標像素位置為對當前像素位置的像素點進行二次預測或PROF處理的像素點的位置;若目標像素位置不屬於當前子塊,則根據當前子塊對目標像素位置進行更新處理,獲得更新後像素位置;基於第一預測值和更新後像素位置,確定當前子塊對應的第二預測值,將第二預測值確定為當前子塊的幀間預測值。也就是說,本申請提出的幀間預測方法,在基於子塊的預測之後,如果進行二次預測或PROF處理所需要使用的像素位置不在同一個子塊中,可以透過對當前子塊的邊界的擴展、對超出當前子塊的邊界的目標像素位置的重新定義等多種方式,將進行二次預測或PROF處理所需要使用的像素位置限制在相同的子塊中,從而解決了因為像素不相連所導致的預測性能下降的問題,能夠減小預測的誤差,大大提升編碼性能,從而提高了編解碼效率。
下面將結合本申請實施例中的附圖,對本申請實施例中的技術方案進行清楚、完整地描述。可以理解的是,此處所描述的具體實施例僅僅用於解釋相關申請,而非對該申請的限定。另外還需要說明的是,為了便於描述,附圖中僅示出了與有關申請相關的部分。
目前,通用的影像編解碼標準基於都採用基於塊的混合編碼框架。影像圖像中的每一幀被分割成相同大小(比如128×128,64×64等)的正方形的最大編碼單元(Largest Coding Unit,LCU),每個最大編碼單元還可以根據規則劃分成矩形的編碼單元(Coding Unit,CU);而且編碼單元可能還會劃分成更小的預測單元(Prediction Unit,PU)。具體地,混合編碼框架可以包括有預測、變換(Transform)、量化(Quantization)、熵編碼(EntropyCoding)、迴路濾波(In Loop Filter)等模組;其中,預測模組可以包括幀內預測(intraPrediction)和幀間預測(interPrediction),幀間預測可以包括運動估計(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]濾波器,也就是對當前像素位置,水平方向會使用到其左邊距離為1的像素位置和右邊距離為1的像素位置的預測值,垂直方向會使用到其上邊距離為1的像素位置和下邊距離為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精度樣本矩陣中各個位置的元素值透過如下的仿射亮度樣本插值過程和仿射色度樣本插值過程所定義的插值方法得到。參考圖像外的整數樣本應使用該圖像內距離該樣本最近的整數樣本(邊緣或角樣本)代替,即運動向量能指向參考圖像外的樣本。
具體地,仿射亮度樣本插值過程如下:
A,B,C,D是相鄰整像素樣本,dx與dy是整像素樣本A周邊分像素樣本a(dx,dy)與A的水平和垂直距離,dx等於fx&15,dy等於fy&15,其中(fx,fy)是該分像素樣本在1/16精度的亮度樣本矩陣中的座標。整像素Ax,y的周邊有的255個分像素樣本ax,y(dx,dy)。
具體地,樣本位置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
具體地,仿射色度樣本插值過程如下:
A,B,C,D是相鄰整像素樣本,dx與dy是整像素樣本A周邊分像素樣本a(dx,dy)與A的水平和垂直距離,dx等於fx& 31,dy等於fy& 31,其中(fx,fy)是該分像素樣本在1/32精度的色度樣本矩陣中的座標。整像素Ax,y的周邊有1023個分像素樣本ax,y(dx,dy)。
具體地,對於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
常見的仿射預測的方法可以包括以下步驟:
步驟101、確定控制點的運動向量。
步驟102、根據控制點的運動向量確定子塊的運動向量。
步驟103、根據子塊的運動向量對子塊進行預測。
目前,在透過PROF改進基於塊的仿射預測的預測值時,具體可以包括以下步驟:
步驟101、確定控制點的運動向量。
步驟102、根據控制點的運動向量確定子塊的運動向量。
步驟103、根據子塊的運動向量對子塊進行預測。
步驟104、根據控制點的運動向量與子塊的運動向量確定子塊內每個位置與子塊的運動向量偏差。
步驟105、根據控制點的運動向量確定子塊的運動向量。
步驟106、使用基於子塊的預測值匯出每一個位置計算水平和垂直方向的梯度。
步驟107、利用光流原理,根據每一個位置的運動向量偏差和水平、垂直方向的梯度,計算每一個位置的預測值的偏差值。
步驟108、對每一個位置基於子塊的預測值加上預測值的偏差值,得到修正後的預測值。
目前,在透過PROF改進基於塊的仿射預測的預測值時,具體還可以包括以下步驟:
步驟101、確定控制點的運動向量。
步驟109、根據控制點的運動向量確定子塊的運動向量及子塊內每個位置與子塊的運動向量的偏差。
步驟103、根據子塊的運動向量對子塊進行預測。
步驟106、使用基於子塊的預測值匯出每一個位置計算水平和垂直方向的梯度。
步驟107、利用光流原理,根據每一個位置的運動向量偏差和水平、垂直方向的梯度,計算每一個位置的預測值的偏差值。
步驟108、對每一個位置基於子塊的預測值加上預測值的偏差值,得到修正後的預測值。
PROF可以使用光流原理對基於子塊的仿射預測進行修正,提高了壓縮性能。然而,PROF的應用是基於子塊內的像素位置的運動向量與子塊運動向量的偏差非常小的情況,也就是說,子塊內的像素位置的運動向量與子塊運動向量的偏差非常小的情況下使用PROF的光流計算方法是有效的,但是,由於PROF依賴於基準位置的水平方向和垂直方向的梯度,在實際位置離基準位置較遠的情況下,基準位置的水平和垂直方向的梯度並不能真實的反映基準位置和實際位置之間的水平和垂直方向的梯度,因此,在子塊內的像素位置的運動向量與子塊運動向量的偏差較大的情況下,該方法就不是特別有效了。
此時,提出了二次預測的方法來克服PROF的缺陷。解碼器進行二次預測的方法可以包括以下步驟:
步驟201、根據子塊的運動向量對子塊進行預測,獲得預測值。
步驟202、確定子塊內每一個位置與子塊的運動向量偏差。
步驟203、根據每一個位置的運動向量偏差,利用二維濾波器對預測值進行濾波,得到二次預測的預測值。
也就是說,二次預測方法可以在基於子塊的預測之後,對運動向量與子塊的運動向量有偏差的像素位置,在基於子塊的預測的基礎上進行基於點的二次預測,最終完成對預測值的修正,獲得新的預測值,即二次預測的預測值。
具體地,基於點的二次預測使用二維濾波器。二維濾波器是相鄰的構成預設形狀的點的構成的濾波器。相鄰的構成預設形狀的點可以為9個點。對一個像素位置,濾波器處理的結果為該位置的二次預測的預測值。其中,二維濾波器的濾波係數由每一個位置的運動向量偏差確定,二維濾波器的輸入為預測值,輸出為二次預測的預測值。
進一步地,在本申請中,如果本申請中對當前塊使用仿射模式,那麼需要先對控制點的運動向量進行確定。解碼器進行二次預測的方法可以包括以下步驟:
步驟204、確定控制點的運動向量。
步驟205、根據控制點的運動向量確定子塊的運動向量。
步驟201、根據子塊的運動向量對子塊進行預測,獲得預測值。
步驟202、確定子塊內每一個位置與子塊的運動向量偏差。
步驟203、根據每一個位置的運動向量偏差,利用二維濾波器對預測值進行濾波,得到二次預測的預測值。
由此可見,在本申請的實施例中,在對控制點的運動向量進行確定之後,可以利用控制點的運動向量對子塊進行預測處理,並在確定出子塊中的像素位置與子塊的運動向量偏差之後,對運動向量與子塊的運動向量有偏差的像素位置,在基於子塊的預測的基礎上進行基於點的二次預測,最終完成對預測值的修正,獲得新的預測值,即二次預測的預測值。
進一步地,在本申請中,也可以將確定子塊的運動向量和確定子塊內每個位置與子塊的運動向量偏差的兩個步驟同時進行。解碼器進行二次預測的方法可以包括以下步驟:
步驟204、確定控制點的運動向量。
步驟206、根據控制點的運動向量確定子塊的運動向量,和子塊內每一個位置與子塊的運動向量偏差。
步驟201、根據子塊的運動向量對子塊進行預測,獲得預測值。
步驟203、根據每一個位置的運動向量偏差,利用二維濾波器對預測值進行濾波,得到二次預測的預測值。
由此可見,在本申請的實施例中,在對控制點的運動向量進行確定之後,可以同時進行子塊的運動向量和子塊內每一個位置與子塊的運動向量偏差的確定,然後對運動向量與子塊的運動向量有偏差的像素位置,在基於子塊的預測的基礎上進行基於點的二次預測,最終完成對預測值的修正,獲得新的預測值,即二次預測的預測值。
需要說明的是,因為仿射模型可以明確地計算出每一個像素位置的運動向量,或者說子塊內每一個像素位置與子塊運動向量的偏差,因此,二次預測方法可以用於對仿射預測進行改善,當然,二次預測也可以應用於其他基於子塊的預測的改善。也就是說,本申請所提出的基於子塊的預測包括但不限於仿射基於子塊的預測。
進一步地,二次預測方法可以以AVS3標準為基礎,也可以應用於VVC標準,本申請不作具體限定。
在使用二次預測方法對子塊中的當前像素位置進行二次預測時,會使用到當前像素位置在基於子塊的預測的預測塊(當前塊)中的、相鄰的像素位置的像素值。例如,使用的二維濾波器為3x3的矩形濾波器,相鄰的像素位置包括當前像素位置的左邊一個像素距離的像素位置、右邊一個像素距離的像素位置、上邊一個像素距離的像素位置、下邊一個像素距離的像素位置、左邊一個像素距離上邊一個像素距離的像素位置、右邊一個像素距離上邊一個像素距離的像素位置、左邊一個像素距離下邊一個像素距離的像素位置、右邊一個像素距離下邊一個像素距離的像素位置這8個像素位置。如果使用其他形狀的濾波器,也可能包括對應的其它像素位置。
如果濾波器使用到的與當前像素位置相鄰的其他像素位置與當前像素位置不屬於相同的子塊,即濾波器使用到的像素位置可能屬於不止一個子塊裡面,存在跨子塊的情況,常常假設相鄰子塊之間相鄰的像素是連續的,然而,在實際情況中,由於當前塊的多個子塊可能是基於不同的mv預測得到的,所以相鄰子塊之間相鄰的像素很可能並不是相連的,或者說實際是不相鄰的,或者說它們在參考圖像中是不相鄰的。如果當前塊的相鄰子塊mv之間的差距比較小,這種不相連性可能並不明顯,但是如果相鄰子塊mv之間的差距比較大,這種不相連性就會體現出來了。
由此可見,在當前塊的相鄰子塊之間相鄰的像素不相連的情況下,它們之間的相關性就會變弱,此時,如果濾波器使用不屬於相同的子塊的、不相連的像素位置的像素進行濾波,效果就會變差。
圖8為對當前像素位置進行二次預測的示意圖,如圖8所示,使用二次預測方法在基於子塊的預測的預測塊的基礎上進行二次預測時,假設當前像素位置為位置1,即使用3x3的矩形濾波器對位置1進行二次預測,此時,需要使用到與位置1相鄰的8個像素位置,其中,位置2為位置1的左相鄰像素,即與位置1左邊距離為1個像素距離的像素位置,而位置2與位置1並不在相同的子塊中,位置1屬於子塊1,位置2屬於子塊2。一般情況下,可以認為相鄰的子塊1和子塊2之間相鄰的像素是連續的,即位置1和位置2是相連的,但是在參考圖像中,它們的位置關係未必如此。
示例性的,圖9為像素位置不屬於相同子塊的示意圖一,如圖9所示,子塊1和子塊2這兩個相鄰的子塊在參考圖像中的一種可能的相對位置,其中,子塊1和子塊2的MV相差不大,在參考圖像中的位置稍有錯位,那麼與位置1相鄰的位置2在參考圖像中的實際位置是子塊2中的位置3。可見,子塊2中的位置3並不是子塊1中位置1的正左方一個像素距離的位置,這兩個像素位置之間存在位置偏差。
示例性的,圖10為像素位置不屬於相同子塊的示意圖二,如圖10所示,子塊1和子塊2這兩個相鄰的子塊在參考圖像中的另一種可能的相對位置,其中,子塊2中並不存在與子塊1中的位置1正左方相鄰的像素位置,如果按照目前的二次預測方法,會選擇子塊2中的位置3作為子塊1中位置1的正左方一個像素距離的位置,可以看出,位置1和位置3相差較遠,如果使用位置3作為位置1的相鄰像素位置進行濾波,會大大降低最終獲得的二次預測的預測效果。
相應地,PROF的情況也是類似的,PROF需要計算水平方向和垂直方向的梯度,水平方向的梯度計算需要使用基於子塊的預測的當前塊中的、當前像素位置的左邊一個像素距離的像素位置和右邊一個像素距離的像素位置,垂直方向的梯度計算需要使用基於子塊的預測的前塊中的、當前像素位置的上邊一個像素距離的像素位置和下邊一個像素距離的像素位置,在需要使用的這些位置中的一個或多個與當前像素位置不在同一個子塊中的情況下,如果它們在參考圖像中不相連,那麼梯度計算的準確性會下降。
示例性的,圖11為對當前像素位置使用PROF的示意圖,如圖11所示,PROF計算水平方向的梯度時,假設當前像素位置為位置1,此時,需要使用到與位置1水平相鄰的2個像素位置,其中,位置2為位置1的左相鄰像素,即與位置1左邊距離為1個像素距離的像素位置,而位置2與位置1並不在相同的子塊中,位置1屬於子塊1,位置2屬於子塊2。一般情況下,可以認為相鄰的子塊1和子塊2之間相鄰的像素是連續的,即位置1和位置2是相連的,但是在參考圖像中,它們的位置關係未必如此。
圖12為像素位置不屬於相同子塊的示意圖三,如圖12所示,子塊1和子塊2的MV相差不大,在參考圖像中的位置稍有錯位,那麼與位置1相鄰的位置2在參考圖像中的實際位置是子塊2中的位置3。可見,子塊2中的位置3並不是子塊1中位置1的正左方一個像素距離的位置,這兩個像素位置之間存在位置偏差。
由此可見,當二次預測或PROF需要使用的像素位置不在同一個子塊時,可能會由於像素位置不相連而造成預測性能下降的問題,即現有的PROF修正預測值方法和二次預測方法其實並不嚴謹,在對仿射預測進行改善時,並不能很好的適用於全部場景,編碼性能有待提升。
為了解決現有技術中存在的缺陷,在本申請的實施例中,在基於子塊的預測之後,如果進行二次預測或PROF處理所需要使用的像素位置不在同一個子塊中,可以透過對當前子塊的邊界的擴展、對超出當前子塊的邊界的目標像素位置的重新定義等多種方式,將進行二次預測或PROF處理所需要使用的像素位置限制在相同的子塊中,從而解決了因為像素不相連所導致的預測性能下降的問題,能夠減小預測的誤差,大大提升編碼性能,從而提高了編解碼效率。
應理解,本申請實施例提供一種影像編碼系統,圖13為本申請實施例提供的一種影像編碼系統的組成方塊圖示意圖,如圖13所示,該影像編碼系統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中。
本申請實施例還提供一種影像解碼系統,圖14為本申請實施例提供的一種影像解碼系統的組成方塊圖示意圖,如圖14所示,該影像解碼系統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等其他編碼標準技術,不申請對此不作具體限定。
本申請實施例提供一種幀間預測方法,該方法應用於影像解碼設備,即解碼器。該方法所實現的功能可以透過解碼器中的第一處理器調用電腦程式來實現,當然電腦程式可以保存在第一記憶體中,可見,該解碼器至少包括第一處理器和第一記憶體。
進一步地,在本申請的實施例中,圖15為幀間預測方法的實現流程示意圖一,如圖15所示,解碼器進行幀間預測的方法可以包括以下步驟:
步驟S301、解析位元流,獲取當前塊的預測模式參數。
在本申請的實施例中,解碼器可以先解析二進位位元流,從而獲得當前塊的預測模式參數。其中,預測模式參數可以用於對當前塊所使用的預測模式進行確定。
需要說明的是,待解碼圖像可以劃分為多個圖像塊,而當前待解碼的圖像塊可以稱為當前塊(可以用CU表示),與當前塊相鄰的圖像塊可以稱為相鄰塊;即在待解碼圖像中,當前塊與相鄰塊之間具有相鄰關係。這裡,每個當前塊可以包括第一圖像分量、第二圖像分量和第三圖像分量,也即當前塊表示待解碼圖像中當前待進行第一圖像分量、第二圖像分量或者第三圖像分量預測的圖像塊。
其中,假定當前塊進行第一圖像分量預測,而且第一圖像分量為亮度分量,即待預測圖像分量為亮度分量,那麼當前塊也可以稱為亮度塊;或者,假定當前塊進行第二圖像分量預測,而且第二圖像分量為色度分量,即待預測圖像分量為色度分量,那麼當前塊也可以稱為色度塊。
進一步地,在本申請的實施例中,預測模式參數不僅可以指示當前塊採用的預測模式,還可以指示與該預測模式相關的參數。
可以理解的是,在本申請的實施例中,預測模式可以包括有幀間預測模式、傳統幀內預測模式以及非傳統幀內預測模式等。
也就是說,在編碼側,編碼器可以選取最優的預測模式對當前塊進行預編碼,在這過程中就可以確定出當前塊的預測模式,然後確定用於指示預測模式的預測模式參數,從而將相應的預測模式參數寫入位元流,由編碼器傳輸到解碼器。
相應地,在解碼器側,解碼器透過解析位元流便可以直接獲取到當前塊的預測模式參數,並根據解析獲得的預測模式參數確定當前塊所使用的預測模式,以及該預測模式對應的相關參數。
進一步地,在本申請的實施例中,解碼器在解析獲得預測模式參數之後,可以基於預測模式參數確定當前塊是否使用幀間預測模式。
步驟S302、當預測模式參數指示使用幀間預測模式確定當前塊的幀間預測值時,確定當前塊的當前子塊的第一運動向量;其中,當前塊包括多個子塊。
在本申請的實施例中,解碼器在解析獲得預測模式參數之後,如果解析獲得的預測模式參數指示當前塊使用幀間預測模式確定當前塊的幀間預測值,那麼解碼器可以先確定出當前塊的每一個子塊的第一運動向量。其中,一個子塊對應有一個第一運動向量。
需要說明的是,在本申請的實施例中,當前塊為當前幀中待解碼的圖像塊,當前幀以圖像塊的形式按一定順序依次進行解碼,該當前塊為當前幀內按該順序下一時刻待解碼的圖像塊。當前塊可具有多種規格尺寸,例如16x16、32x32或32x16等規格,其中數字表示當前塊上像素點的行數和列數。
進一步對,在本申請的實施例中,當前塊可以劃分為多個子塊,其中,當前塊的每一個子塊均是基於子塊的預測的預測子塊,每一個子塊的尺寸大小都是相同的,子塊為較小規格的像素點集合。子塊的尺寸可以為8x8或4x4。
示例性的,在本申請中,當前塊的尺寸為16x16,可以劃分為4個尺寸均為8x8的子塊。
可以理解的是,在本申請的實施例中,在解碼器解析位元流獲取到預測模式參數指示使用幀間預測模式確定當前塊的幀間預測值的情況下,就可以繼續採用本申請實施例所提供的幀間預測方法。
在本申請的實施例中,進一步地,當預測模式參數指示使用幀間預測模式確定當前塊的幀間預測值時,解碼器確定當前塊的當前子塊的第一運動向量的方法可以包括以下步驟:
步驟S302a、解析位元流,獲取當前塊的仿射模式參數和預測參考模式。
步驟S302b、當仿射模式參數指示使用仿射模式時,確定控制點模式和子塊尺寸參數。
步驟S302c、根據預測參考模式、控制點模式以及子塊尺寸參數,確定第一運動向量。
在本申請的實施例中,解碼器在解析獲得預測模式參數之後,如果解析獲得的預測模式參數指示當前塊使用幀間預測模式確定當前塊的幀間預測值,那麼解碼器可以透過解析位元流,獲得仿射模式參數和預測參考模式。
需要說明的是,在本申請的實施例中,仿射模式參數用於對是否使用仿射模式進行指示。具體地,仿射模式參數可以為仿射運動補償允許標誌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控制點的情況下的左下角的子塊的運動向量偏差時與其他塊也不同。
步驟S303、基於第一運動向量確定當前子塊的第一預測值,並確定當前像素位置對應的目標像素位置;其中,當前像素位置為當前子塊內的一個像素點的位置,目標像素位置為對當前像素位置的像素點進行二次預測或PROF處理的像素點的位置。
在本申請的實施例中,解碼器在確定出當前塊的每一個子塊的第一運動向量之後,可以先基於當前子塊的第一運動向量確定出當前子塊的第一預測值,然後可以確定該當前子塊中的當前像素位置所對應的目標像素位置。其中,目標像素位置是與當前像素位置相鄰的像素位置。
需要說明的是,在本申請的實施例中,當前像素位置為當前塊的當前子塊中的一個像素點的位置,其中,當前像素位置可以表徵待處理的像素點的位置。具體地,當前像素位置可以為待二次預測的像素點的位置,也可以為待PROF處理的像素點的位置。
進一步地,在本申請的實施例中,目標像素位置為當前像素點周圍的、與當前像素位置相鄰的像素位置。具體地,如果當前像素位置為待二次預測的像素點的位置,那麼基於二次預測所使用的濾波器的形狀,可以確定與當前像素位置在各個方向上相鄰的像素位置為目標像素位置;如果當前像素位置為待PROF處理的像素點的位置,那麼可以確定與當前像素位置在水平方向和垂直方向上相鄰的像素位置為目標像素位置。
示例性的,在本申請中,如果使用矩形濾波器對當前像素位置進行二次預測,那麼目標像素位置即為當前像素位置在上、下、左、右、左上、左下、右上、右下這8個方向上相鄰的像素位置。如果對當前像素位置進行PROF處理,那麼目標像素位置即為當前像素位置在水平方向上、左右相鄰的2個像素位置,以及當前像素位置在垂直方向上、上下相鄰的2個像素位置。
需要說明的是,在本申請的實施例中,目標像素位置中的全部位置可以均屬於當前像素位置對應的當前子塊,目標像素位置中的部分位置可以不屬於當前像素位置對應的當前子塊。也就是說,目標像素位置和當前像素位置可以均屬於同一個子塊,也可以屬於不同的子塊。
可以理解的是,在本申請的實施例中,步驟S303具體可以包括:
步驟S303a、基於第一運動向量確定當前子塊的第一預測值。
步驟S303b、確定當前像素位置對應的目標像素位置。
其中,本申請實施例提出的幀間預測方法對解碼器執行步驟S303a和步驟S303b的順序不進行限定,也就是說,在本申請中,在確定出當前塊的每一個子塊的第一運動向量之後,解碼器可以先執行步驟S303a,然後執行步驟S303b,也可以先執行步驟S303b,再執行步驟S303a,還可以同時執行步驟S303a和步驟S303b。
進一步地,在本申請的實施例中,解碼器在基於第一運動向量確定當前子塊的第一預測值時,可以先確定樣本矩陣;其中,樣本矩陣包括亮度樣本矩陣和色度樣本矩陣;然後可以根據預測參考模式、子塊尺寸參數、樣本矩陣以及運動向量集合,確定第一預測值。
需要說明的是,在本申請的實施例中,解碼器在根據預測參考模式、子塊尺寸參數、樣本矩陣以及運動向量集合,確定第一預測值時,可以先根據預測參考模式和子塊尺寸參數,從運動向量集合中確定目標運動向量;然後可以利用預測參考模式對應的參考圖像佇列和參考索引樣本矩陣以及目標運動向量,確定預測樣本矩陣;其中,預測樣本矩陣包括多個子塊的第一預測值。
具體地,在本申請的實施例中,樣本矩陣可以包括亮度樣本矩陣和色度樣本矩陣,相應地,解碼器確定出的預測樣本矩陣可以包括亮度預測樣本矩陣和色度預測樣本矩陣,其中,亮度預測樣本矩陣包括多個子塊的第一亮度預測值,色度預測樣本矩陣包括多個子塊的第一色度預測值,第一亮度預測值和第一色度預測值構成子塊的第一預測值。
示例性的,在本申請中,假設當前塊左上角樣本在當前圖像的亮度樣本矩陣中的位置為(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所示,然後按照像素位置和樣本位置,計算獲得亮度樣本矩陣。
具體地,樣本位置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所示,然後按照像素位置和樣本位置,計算獲得色度樣本矩陣。
具體地,對於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)。
步驟S304、若目標像素位置不屬於當前子塊,則根據當前子塊對目標像素位置進行更新處理,獲得更新後像素位置。
在本申請的實施例中,解碼器在基於第一運動向量確定當前子塊的第一預測值,並確定當前像素位置對應的目標像素位置之後,如果目標像素位置不屬於當前子塊,即目標像素位置和當前像素位置屬於不同的子塊,那麼解碼器可以根據當前子塊對目標像素位置進行更新處理,從而獲得更新後像素位置。
需要說明的是,在本申請的實施例中,一個當前像素位置對應有多個目標像素位置,如果該當前像素位置對應有多個目標像素位置均屬於當前子塊,那麼確定目標像素位置和當前像素位置均屬於當前子塊;如果多個目標像素位置中存在不屬於當前子塊的至少一個位置,那麼確定目標像素位置和當前像素位置屬於不同的子塊。
在本申請的實施例中,進一步地,圖16為幀間預測方法的實現流程示意圖二,如圖16所示,若目標像素位置不屬於當前子塊,解碼器則根據當前子塊對目標像素位置進行更新處理,獲得更新後像素位置之前,即步驟S304之前,解碼器進行幀間預測的方法還可以包括以下步驟:
步驟S306、判斷當前子塊是否滿足預設限制條件;其中,預設限制條件用於確定是否將目標像素位置限制在當前子塊內。
步驟S307、若滿足預設限制條件,則判斷目標像素位置是否屬於當前子塊。
步驟S308、若不滿足預設限制條件,則基於第一預測值和目標像素位置,確定第二預測值,將第二預測值確定為幀間預測值。
在本申請的實施例中,解碼器可以先判斷當前子塊是否滿足預設限制條件,如果滿足預設限制條件,那麼解碼器可以繼續確定目標像素位置是否屬於當前子塊,從而進一步確定是否對目標像素位置進行限制處理,即是否對目標像素位置執行更新處理的流程;如果不滿足預設限制條件,那麼解碼器便可以不需要對目標像素位置進行限制處理,而是直接基於第一預測值和目標像素位置,進一步確定當前像素位置對應的修正後預測值,並在遍歷當前子塊中的每一個像素位置,獲得每一個像素位置對應的修正後預測值之後,確定出當前子塊對應的第二預測值,從而確定出當前子塊的幀間預測值。
需要說明的是,在本申請的實施例中,預設限制條件為解碼器預先設置的、用於確定是否將目標像素位置限制在當前子塊內,也就是說,在本申請中,解碼器可以利用預設限制條件來對是否限制當前像素位置和目標像素位置屬於相同的子塊進行確定。
可以理解的是,在本申請的實施例中,如果滿足預設限制條件,便可以認為需要將當前像素位置和目標像素位置限制在相同的子塊內,因此需要繼續確定目標像素位置是否屬於當前像素位置對應的當前子塊。
可以理解的是,在本申請的實施例中,如果不滿足預設限制條件,便可以認為不需要將當前像素位置和目標像素位置限制在相同的子塊內,因此可以直接利用目標像素位置對當前像素位置進行二次預測或PROF處理,最終獲得當前子塊對應的幀間預測值。
也就是說,在本申請中,解碼器可以基於預設限制條件來對二次預測或PROF處理所使用的全部像素位置是否屬於相同的子塊進行限制。具體地,如果滿足預設限制條件,那麼二次預測或PROF處理時所需要的像素值都使用當前子塊的像素值,即要求全部像素位置均資料當前子塊,可以按照步驟S305至步驟S307所提出的方法來對當前像素位置進行仿射預測效果的提升,獲得對應的幀間預測值;如果不滿足預設限制條件,那麼二次預測或PROF處理時所需要的像素值可以使用其他子塊的像素值,即不要求全部像素位置均資料當前子塊,可以按照步驟S308所提出的方法來對當前像素位置進行仿射預測效果的提升,獲得對應的幀間預測值。
進一步地,在本申請的實施例中,解碼器可以透過多種方式來判斷當前子塊是否滿足預設限制條件。具體地,解碼器可以透過運動向量來進一步確定是否滿足預設限制條件。
示例性的,在本申請中,解碼器在判斷當前子塊是否滿足預設限制條件時,可以先基於控制點運動向量組確定第一運動向量偏差;然後將第一運動向量偏差與預設偏差閾值進行比較,如果第一運動向量偏差大於獲得等於預設偏差閾值,那麼可以判定滿足預設限制條件;如果第一運動向量偏差小於預設偏差閾值,那麼判定不滿足預設限制條件。
可以理解的是,在本申請中,第一運動向量偏差可以為當前塊的兩個控制點的運動向量的差值。其中,在仿射模式中,如果使用的是4參數(2個控制點)模式,那麼解碼器可以直接將控制點運動向量組mvsAffine(mv0,mv1)中的這兩個控制點的運動向量mv0和mv1之間的差值確定為第一運動向量偏差;如果使用的是6參數(3個控制點)模式,那麼解碼器可以將控制點運動向量組mvsAffine(mv0,mv1,mv2)中的任意2個控制點的運動向量的差值確定為第一運動向量偏差,也可以將控制點運動向量組mvsAffine(mv0,mv1,mv2)中的運動向量的最大差值確定為第一運動向量偏差。
需要說明的是,在本申請的實施例中,如果使用表徵當前塊的兩個控制點的運動向量的差值的第一運動向量偏差進行是否滿足預設限制條件的判斷,預設偏差閾值的設置可能與當前塊的大小有關,也可能與當前仿射預測使用的當前塊的子塊的大小有關。
進一步地,在本申請中,如果使用表徵當前塊的兩個控制點的運動向量的差值的第一運動向量偏差進行是否滿足預設限制條件的判斷,基於預設偏差閾值的設置,當前塊的所有子塊全都滿足預設限制條件,或者,當前塊的所有子塊全都不滿足預設限制條件。
示例性的,在本申請中,解碼器在判斷當前子塊是否滿足預設限制條件時,可以先基於每一個子塊的第一運動向量確定第二運動向量偏差;然後將第二運動向量偏差與預設偏差閾值進行比較,如果第二運動向量偏差大於獲得等於預設偏差閾值,那麼判定滿足預設限制條件;如果第二運動向量偏差小於預設偏差閾值,那麼判定不滿足預設限制條件。
可以理解的是,在本申請中,第二運動向量偏差可以為當前塊中的任意兩個或多個子塊的運動向量的差值。其中,在AVS3中,對於不同的子塊,作為子塊的運動向量的像素位置在子塊中的相對位置不都完全相同,如圖7中所示的A左上角、B右上角、C左下角這三個子塊,因此,不同子塊之間的運動向量的差值也不完全相同,進而可以將當前塊的不同子塊之間的運動向量差值作為第二運動向量偏差,以判斷當前子塊是否滿足預設限制條件。
需要說明的是,在本申請的實施例中,如果使用表徵當前塊的不同子塊之間的運動向量差值的第二運動向量偏差進行是否滿足預設限制條件的判斷,預設偏差閾值的設置可能與當前仿射預測使用的當前塊的子塊的大小有關。
進一步地,在本申請中,如果使用表徵當前塊的不同子塊之間的運動向量差值的第二運動向量偏差進行是否滿足預設限制條件的判斷,當前塊的每一個子塊均可以基於預設偏差閾值和與其對應的第二運動向量偏差判斷當前子塊是否滿足預設限制條件,其中,除了如圖7中所示的A、B、C以及與它們相連的子塊以外的其他子塊之間均符合相同的規則,因此,其他子塊可以共用同一個條件判斷結果。
示例性的,在本申請中,解碼器在判斷當前子塊是否滿足預設限制條件時,可以先確定當前子塊內的、預設像素位置與當前子塊之間的第三運動向量偏差;然後將第三運動向量偏差與預設偏差閾值進行比較,如果第三運動向量偏差大於獲得等於預設偏差閾值,那麼判定滿足預設限制條件;如果第三運動向量偏差小於預設偏差閾值,那麼判定不滿足預設限制條件。
可以理解的是,在本申請中,第三運動向量偏差可以為當前子塊內的、預設像素位置與當前子塊之間的運動向量的差值。其中,在AVS3中,對於子塊內的不同像素位置,對應的運動向量可能是不同的,一般情況下,距離作為子塊運動向量的像素位置越遠的預設像素位置,對應的第三運動向量偏差越大,那麼與該預設像素位置相鄰的、其他子塊的像素位置的不相連的可能性就越大。
進一步地,在本申請中,如果使用表徵當前子塊內的、預設像素位置與當前子塊之間的運動向量差值的第三運動向量偏差進行是否滿足預設限制條件的判斷,當前塊的子塊內的每一個像素位置可以分別基於預設偏差閾值判斷是否滿足預設限制條件,其中,除了如圖7中所示的A、B、C以及與它們相連的子塊以外的其他子塊之間均符合相同的規則,因此,其他子塊可以共用同一個條件判斷結果。
可以理解的是,在本申請中,如果使用表徵當前子塊內的、預設像素位置與當前子塊之間的運動向量差值的第三運動向量偏差進行是否滿足預設限制條件的判斷,解碼可以選擇某一個或某幾個特定像素位置的運動向量與其對應子塊的運動向量之前的差作為第三運動向量偏差,例如,如圖7所示的A類子塊,A類子塊使用子塊內左上角的像素位置的運動向量作為子塊的運動向量,記該像素位置在子塊內的位置為(0,0),子塊寬度為sub_w,子塊高度為sub_h,那麼子塊的右下角的像素位置就為(sub_w-1,sub_h-1),由於右下角的像素位置與位置(0,0)的水平方向和垂直方向的距離都最遠,因此,可以把右下角的像素位置的運動向量與A類子塊的運動向量之間的差作為A類子塊對應的第三運動向量偏差,也可以將該差值作為當前塊對應的第三運動向量偏差。同理,對如圖7所示的B,可以選擇子塊左下角的像素位置的運動向量與其對應子塊的運動向量的差作為第三運動向量偏差;對如圖7所示的C,可以選擇子塊右上角的像素位置的運動向量與其對應子塊的運動向量的差作為第三運動向量偏差。
需要說明的是,在本申請中,可以根據當前塊的尺寸參數和\或子塊尺寸參數確定預設偏差閾值。
進一步地,在本申請的實施例中,如果目標像素位置不屬於當前子塊,那麼解碼器可以根據當前子塊對目標像素位置進行更新處理,從而可以獲得更新後像素位置。其中,解碼器可以採用多種方式獲取更新後像素位置。
可以理解的是,在本申請中,解碼器在根據當前子塊對目標像素位置進行更新處理,獲得更新後像素位置時,可以先對當前子塊進行擴展處理,獲得擴展後子塊;然後可以在擴展後子塊內確定目標像素位置對應的更新後像素位置。
也就是說,在本申請中,為了在二次預測或PROF處理時使所需要的像素值都使用當前子塊的像素值,即限制使用的像素位置均屬於當前子塊,解碼器可以先對當前的子塊基於子塊的預測的預測子塊進行擴展,即先對當前子塊進行擴展處理。具體地,由於二次預測或PROF處理時所使用的目標像素位置與當前像素位置之間的距離為1個像素位置,因此,即使目標像素位置不屬於當前子塊,也僅僅超出當前子塊的邊界一個像素位置,可見,解碼器在對當前子塊進行擴展時,只需要對基於子塊的預測的當前子塊擴展一行或兩行像素,和/或,一列或兩列像素,最終便可以獲得擴展後子塊。
示例性的,在本申請中,圖17為擴展當前子塊的示意圖,如圖17所示,以9點矩形濾波器為例,可以子塊的預測的當前子塊可以在其上下左右邊界各擴展出一個像素位置,一個簡單的擴展方法是左邊擴展的像素複製其水平方向對應的左邊界的像素值,右邊擴展的像素複製其水平方向對應的右邊界的像素值,上邊擴展的像素複製其垂直方向對應的上邊界的像素值,下邊擴展的像素複製其垂直方向對應的下邊界的像素值,擴展的四個頂點可以複製其對應的頂點的像素值。
可以理解的是,在本申請的實施例中,解碼器在對當前子塊進行擴展處理,獲得擴展後子塊時,可以選擇利用當前子塊的全部邊界位置進行擴展處理,獲得擴展後子塊;也可以選擇利用當前子塊內的、目標像素位置對應的行和\或列的邊界位置進行擴展處理,獲得擴展後子塊。
也就是說,在本申請中,在對當前子塊進行擴展時,可以對當前子塊的上下左右四個邊界都進行擴展處理,也可以僅僅對於目標像素對應的一個或者兩個邊界進行擴展處理,例如,如果一個目標像素位置屬於當前子塊左邊的子塊,那麼可以對當前子塊的左側邊界進行擴展處理,而不對當前子塊的其他三側邊界進行擴展處理。
可以理解的是,在本申請中,解碼器在根據當前子塊對目標像素位置進行更新處理,獲得更新後像素位置時,還可以利用當前子塊內的、與目標像素位置相鄰的像素位置,替換目標像素位置,從而獲得更新後像素位置。
也就是說,在本申請中,如果二次預測的濾波器的某一個位置對應的像素位置或PROF處理使用的像素位置超出了當前子塊的邊界,那麼可以調整其對應的像素位置為當前子塊內的一個像素位置。例如,當前子塊的左上角像素位置為(0,0),當前子塊的寬度是sub_width,當前子塊的高度是sub_height,那麼當前子塊水平方向的範圍是0~(sub_width-1),當前子塊垂直方向的範圍是0~(sub_height-1)。若二次預測的濾波器或PROF處理需要使用的像素位置為(x,y),如果x小於0,那麼將x設為0。如果x大於sub_width-1,那麼將x設為sub_width-1。如果y小於0,那麼將y設為0,如果y大於sub_height-1,那麼將y設為sub_height-1。
步驟S305、基於第一預測值和更新後像素位置,確定當前子塊對應的第二預測值,將第二預測值確定為當前子塊的幀間預測值。
在本申請的實施例中,如果目標像素位置不屬於當前子塊,解碼器在根據當前子塊對目標像素位置進行更新處理,獲得更新後像素位置之後,便可以基於第一預測值和更新後像素位置,確定出當前像素位置對應的修正後預測值,並在遍歷當前子塊中的每一個像素位置,獲得每一個像素位置對應的修正後預測值之後,確定當前子塊對應的第二預測值,然後可以將第二預測值確定為當前子塊的幀間預測值。
需要說明的是,在本申請的實施例中,由於目標像素位置為對當前像素位置的像素點進行二次預測或PROF處理,因此,在獲得目標像素位置對應的更新後像素位置以後,解碼器可以基於第一預測值和更新後像素位置對當前像素位置進行二次預測或PROF處理,從而獲得對應的第二預測值。
進一步地,在本申請的實施例中,解碼器基於第一預測值和更新後像素位置,確定當前子塊對應的第二預測值的方法可以包括以下步驟:
步驟S305a、解析位元流,獲取PROF參數;
步驟S305b、當PROF參數指示進行PROF處理時,基於第一預測值確定當前像素位置與更新後像素位置之間的像素水平梯度和像素垂直梯度;
步驟S305c、確定更新後像素位置與當前子塊的第四運動向量偏差;
步驟S305d、根據像素水平梯度、像素垂直梯度以及第四運動向量偏差,計算當前像素位置對應的偏差值;
步驟S305e、基於第一預測值和偏差值,獲得第二預測值。
在本申請的實施例中,解碼器可以先解析位元流,獲得PROF參數,如果PROF參數指示進行PROF處理,那麼解碼器可以基於第一預測值確定當前像素位置與更新後像素位置之間的像素水平梯度和像素垂直梯度;其中,像素水平梯度即為當前像素位置對應的像素值與水平方向上的、更新後像素位置對應的像素值之間的梯度值;像素垂直梯度即為當前像素位置對應的像素值與垂直方向上的、更新後像素位置對應的像素值之間的梯度值。同時,解碼器還可以確定更新後像素位置與當前子塊的第四運動向量偏差,第四運動向量偏差即為更新後像素位置的運動向量與當前子塊的第一運動向量之間的差值。
進一步地,在本申請的實施例中,解碼器可以根據當前像素位置所對應的像素水平梯度、像素垂直梯度以及第四運動向量偏差,計算獲得與當前像素位置對應的偏差值。其中,該偏差值可以用於對當前像素位置的像素值的預測值進行修正處理。
需要說明的是,在本申請的實施例中,解碼器可以進一步根據第一預測值和偏差值,獲得當前像素位置所對應的修正後預測值,並在遍歷當前子塊中的每一個像素位置,獲得每一個像素位置對應的修正後預測值之後,利用全部像素位置對應的修正後預測值確定出當前子塊對應的第二預測值,從而確定出對應的幀間預測值。具體地,在本申請中,在完成基於子塊的預測之後,將當前子塊的第一預測值作為當前像素位置的預測值,接著,將第一預測值與當前像素位置對應的偏差值相加,即可以完成對當前像素位置的預測值的修正處理,獲得修正後預測值,從而可以進一步獲得當前子塊的第二預測值,並將第二預測值作為當前子塊對應的幀間預測值。
進一步地,在本申請的實施例中,解碼器基於第一預測值和更新後像素位置,確定當前子塊對應的第二預測值的方法可以包括以下步驟:
步驟S305f、解析位元流,獲取二次預測參數;
步驟S305g、當二次預測參數指示使用二次預測時,確定更新後像素位置與當前子塊的第四運動向量偏差;
步驟S305h、根據第四運動向量偏差確定二維濾波器的濾波係數;其中,二維濾波器用於按照預設形狀進行二次預測處理;
步驟S305i、基於濾波係數和第一預測值,確定第二預測值,將第二預測值確定為幀間預測值。
在本申請的實施例中,解碼器可以先解析位元流,獲得二次預測參數,如果二次預測參數指示使用二次預測,那麼解碼器可以確定更新後像素位置與當前子塊的第四運動向量偏差,第四運動向量偏差即為更新後像素位置的運動向量與當前子塊的第一運動向量之間的差值,從而便可以根據第四運動向量偏差確定二維濾波器的濾波係數;其中,二維濾波器用於按照預設形狀進行二次預測處理。
進一步地,在本申請的實施例中,解碼器在目標像素位置與當前子塊之間的第四運動向量偏差時,可以基於差值變數確定當前子塊與每一個像素位置之間的第四三運動向量偏差。
具體地,在本申請的實施例中,解碼器在基於差值變數確定當前子塊與每一個像素位置之間的第四運動向量偏差時,可以按照上述步驟S302所提出的方法,根據控制點運動向量組、控制點模式以及當前塊的尺寸參數,確定出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。
可以理解的是,在本申請的實施例中,解碼器在基於差值變數確定當前子塊與每一個像素位置之間的第四運動向量偏差之後,便可以利用子塊內的全部像素位置對應的全部第四運動向量偏差,構建出該當前子塊對應的運動向量偏差矩陣。可見,運動向量偏差矩陣中包括有子塊與任意一個內部的像素點之間的第四運動向量偏差。
需要說明的是,在本申請的實施例中,二維濾波器的濾波器係數是與目標像素位置所對應的第四運動向量偏差相關的。也就是說,對於不同的目標像素位置,如果對應的第四運動向量偏差不同,那麼使用的二維濾波器的濾波係數也是不同的。
可以理解的是,在本申請的實施例中,二維濾波器用於利用多個相鄰的、構成預設形狀的像素位置進行二次預測。其中,預設形狀為矩形、菱形或任意一種對稱形狀。
也就是說,在本申請的中,用於進行二次預測的二維濾波器是相鄰的構成預設形狀的點所構成的濾波器。相鄰的構成預設形狀的點可以包括多個點,例如由9個點構成。預設形狀可以為對稱形狀,例如,預設形狀可以包括矩形、菱形或其他任意一種對稱形狀。
示例性的,在本申請中,二維濾波器是一個矩形的濾波器,具體地,二維濾波器是由9個相鄰的構成矩形的像素位置組成的濾波器。在9個像素位置中,位於中心的像素位置是當前需要二次預測的像素的像素位置,即當前像素位置。
進一步地,在本申請的實施例中,解碼器在根據第四運動向量偏差確定二維濾波器的濾波係數時,可以先解析位元流,獲取比例參數,然後可以根據比例參數和第四運動向量偏差,確定像素位置對應的濾波器係數。
需要說明的是,在本申請的實施例中,比例參數可以包括至少一個比例值,第四運動向量偏差包括水平偏差和垂直偏差;其中,至少一個比例值均為非零實數。
具體地,在本申請中,當二維濾波器利用9個相鄰的、構成矩形的像素位置進行二次預測時,位於矩形的中心的像素位置為待預測位置,即當前像素位置,其他8個目標像素位置依次位於當前像素位置的左上、上、右上、右、右下、下、左下、左這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個整像素位置。
進一步地,在本申請的實施例中,解碼器在根據第四運動向量偏差確定出二維濾波器的濾波係數之後,便可以基於濾波係數和第一預測值,確定當前子塊的第二預測值,從而可以實現對當前子塊的二次預測。
可以理解的是,在本申請的實施例中,解碼器利用像素位置所對應的第四運動向量偏差確定出濾波器係數,從而可以按照濾波器係數,透過二維濾波器對第一預測值進行修正,獲得修正後的、當前子塊的第二預測值。可見,第二預測值為基於第一預測值的修正值。
進一步地,在本申請的實施例中,解碼器在基於濾波係數和第一預測值,確定當前子塊的第二預測值時,可以先對濾波器係數與第一預測值進行乘法運算,獲得乘積結果,遍歷當前子塊中的全部像素位置之後,再對當前子塊的全部像素位置的乘積結果進行加法運算,獲得求和結果,最後可以對加法結果進行歸一化處理,最終便可以獲得當前子塊修正後的第二預測值。
需要說明的是,在本申請的實施例中,在進行二次預測之前,一般情況下是將像素位置所在的當前子塊的第一預測值作為該像素位置的修正前的預測值,因此,在透過二維濾波器進行濾波時,可以將濾波器係數與對應像素位置的預測值,即第一預測值相乘,並對每一個像素位置對應的乘積結果進行累加,然後歸一化。
可以理解的是,在本申請中,解碼器可以透過多種方式進行歸一化處理,例如,可以將濾波器係數與對應的像素位置的預測值相乘後累加的結果,右移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<<14))>>15 PredMatrixS[x+i][y+j]=Clip3(0,(1<<BitDepth)-1,PredMatrixS[x+i][y+j])。
進一步地,在本申請中,如果dMv的最大值的絕對值小於一個預設閾值,例如,該預設閾值可以等於透過1個整像素換算的2048,即,當dMv的最大值的絕對值小於2048時, UPLEFT(x+i,y+j)=PredMatrixSb[max(0,x+i-1)][max(0,y+j-1)] UP(x+i,y+j)=PredMatrixSb[x+i][max(0,y+j-1)] UPRIGHT(x+i,y+j)=PredMatrixSb[min(width-1,x+i+1)][max(0,y+j-1)] LEFT(x+i,y+j)=PredMatrixSb[max(0,x+i-1)][y+j] CENTER(x+i,y+j)=PredMatrixSb[x+i][y+j] RIGHT(x+i,y+j)=PredMatrixSb[min(width-1,x+i+1)][y+j] DOWNLEFT(x+i,y+j)=PredMatrixSb[max(0,x+i-1)][min(height-1,y+j+1)] DOWN(x+i,y+j)=PredMatrixSb[x+i][min(height-1,y+j+1)] DOWNRIGHT(x+i,y+j)=PredMatrixSb[min(width-1,x+i+1)][min(height-1,y+j+1)] 否則: UPLEFT(x+i,y+j)=PredMatrixSb[max(x,x+i-1)][max(y,y+j-1)] UP(x+i,y+j)=PredMatrixSb[x+i][max(y,y+j-1)] UPRIGHT(x+i,y+j)=PredMatrixSb[min(x+subwidth-1,x+i+1)][max(y,y+j-1)] LEFT(x+i,y+j)=PredMatrixSb[max(x,x+i-1)][y+j] CENTER(x+i,y+j)=PredMatrixSb[x+i][y+j] RIGHT(x+i,y+j)=PredMatrixSb[min(x+subwidth-1,x+i+1)][y+j] DOWNLEFT(x+i,y+j)=PredMatrixSb[max(x,x+i-1)][min(y+subheight-1,y+j+1)] DOWN(x+i,y+j)=PredMatrixSb[x+i][min(y+subheight-1,y+j+1)] DOWNRIGHT(x+i,y+j)=PredMatrixSb[min(x+subwidth-1,x+i+1)][min(y+subheight-1,y+j+1)]
其中,可以將max(a,b)理解為取a,b中的較大值,可以將min(a,b)理解為取a,b中的較小值。
可以理解的是,在本申請的實施例中,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個亮度預測樣本矩陣平均後得到新的亮度預測樣本矩陣。
進一步地,在本申請的實施例中,在得到當前塊的預測樣本矩陣後,如果當前塊沒有變換係數,那麼預測矩陣就作為當前塊的解碼結果,如果當前塊還有變換係數,那麼,可以先解碼變換係數,並透過反變換、反量化得到殘差矩陣,將殘差矩陣加到預測矩陣上得到解碼結果。
綜上所述,透過步驟S301至步驟S308所提出的幀間預測方法,在基於子塊的預測之後,如果進行二次預測或PROF處理所需要使用的像素位置不在同一個子塊中,為了避免因為像素不相連導致的預測性能的下降,解碼器可以對不屬於當前子塊的目標像素位置進行更新處理,獲得更新後的像素位置,從而可以基於更新後的像素位置進行二次預測或PROF處理。其中,上述更新處理的過程可以理解為對當前子塊的邊界的擴展,也可以理解為對超出當前子塊的邊界的目標像素位置的重新定義,從而將進行二次預測或PROF處理所需要使用的像素位置限制在相同的子塊中,進而透過保證像素之間相連而提高預測性能。
可以理解的是,在本申請中,進行二次預測所需要使用的像素位置不在同一個子塊是指對當前子塊中的某一個像素位置,即當前像素位置,二次預測需要用來濾波的目標像素位置不全部屬於該當前子塊。相應地,進行PROF處理需要使用的像素位置不在同一個子塊是指對當前子塊中的某一個像素位置,即當前像素位置,PROF處理需要用來計算梯度的目標像素位置不全部屬於該當前子塊。
需要說明的是,本申請實施例提出的幀間預測方法,可以作用於整個編碼單元或預測單元,即作用於當前塊,也可以作用於當前塊中的每一個子塊,還可以作用於任意一個子塊中的每一個像素位置。本申請不作具體限定。
進一步地,在本申請的實施例中,如果該幀間預測方法作用於當前塊中,還能夠降低當前塊中的每一個子塊之間的資料依賴性,從而可以實現基於子塊的、二次預測或PROF處理的並存執行,也就是說,在對一個子塊進行二次預測或PROF處理時,不需要等待其他子塊的、基於子塊的預測的預測值。具體地,可以實現基於子塊的預測的並行處理,還可以在基於子塊的預測的基礎上,實現基於點的預測(二次預測或PROF處理)的並行處理。
需要說明的是,本申請提出的幀間預測方法,可以適用於任何一個圖像分量上,在本實施例中示例性的對亮度分量使用二次預測方案,但是也可以用於色度分量,或者其他格式的任一分量。本申請提出的幀間預測方法也可以適用於任何一種影像格式上,包括但不限於YUV格式,包括但不限於YUV格式的亮度分量。
本實施例提供了一種幀間預測方法,在基於子塊的預測之後,如果進行二次預測或PROF處理所需要使用的像素位置不在同一個子塊中,可以透過對當前子塊的邊界的擴展、對超出當前子塊的邊界的目標像素位置的重新定義等多種方式,將進行二次預測或PROF處理所需要使用的像素位置限制在相同的子塊中,從而解決了因為像素不相連所導致的預測性能下降的問題,能夠減小預測的誤差,大大提升編碼性能,從而提高了編解碼效率。
基於上述實施例,在本申請的再一實施例中,進一步地,圖20為幀間預測方法的實現流程示意圖三,如圖20所示,解碼器進行幀間預測的方法還可以包括以下步驟:
步驟S309、當預測模式參數指示使用幀間預測模式確定當前塊的幀間預測值時,確定當前子塊的擴展子塊。
步驟S3010、基於第一運動向量確定擴展子塊的第三預測值,並確定當前像素位置對應的目標像素位置。
步驟S3011、若目標像素位置不屬於當前子塊,基於第三預測值和目標像素位置,確定第二預測值,將第二預測值確定為幀間預測值。
在本申請的實施例中,解碼器在解析獲得預測模式參數之後,如果預測模式參數指示使用幀間預測模式確定當前塊的幀間預測值,那麼解碼器可以先確定當前子塊的擴展子塊。
需要說明的是,在本申請的實施例中,擴展子塊為當前塊中的、擴展當前子塊後所確定出的。具體地,由於二次預測或PROF處理時所使用的目標像素位置與當前像素位置之間的距離為1個像素位置,即使目標像素位置不屬於當前子塊,也僅僅超出當前子塊的邊界一個像素位置,因此,解碼器在基於子塊進行預測時,可以先直接對當前子塊對應的擴展子塊進行預測,從而解決目標像素位置不屬於當前子塊所造成的預測效果不佳的問題。
進一步地,在本申請的實施例中,當前子塊對應的擴展子塊與當前子塊相比,可以在當前子塊的上側、下側、左側以及右側各增加一行(列)像素點。
需要說明的是,在本申請的實施例中,基於子塊尺寸參數確定出當前子塊的尺寸大小可以為8x8或4x4,那麼,擴展子塊的尺寸參數,即對應的擴展子塊的尺寸大小可以為10x10或6x6。
進一步地,在本申請的實施例中,解碼器在確定當前子塊的擴展子塊之後,便可以基於當前子塊的第二運動向量確定出該擴展子塊的第三預測值,同時,可以確定當前像素位置對應的目標像素位置。
可以理解的是,在本申請中,由於擴展子塊的中心點與對應的當前子塊的中心點是相同的,因此擴展子塊與對應的當前子塊的運動向量是相同的。
需要說明的是,在本申請的實施例中,步驟S3010具體可以包括:
步驟S3010a、基於第一運動向量確定擴展子塊的第三預測值。
步驟S3010b、確定當前像素位置對應的目標像素位置。
其中,本申請實施例提出的幀間預測方法對解碼器執行步驟S3010a和步驟S3010b的順序不進行限定,也就是說,在本申請中,在確定出當前塊的每一個子塊對應的第一運動向量之後,解碼器可以先執行步驟S3010a,然後執行步驟S3010b,也可以先執行步驟S3010b,再執行步驟S3010a,還可以同時執行步驟S3010a和步驟S3010b。
進一步地,在本申請的實施例中,解碼器在基於第一運動向量確定擴展子塊的第三預測值時,可以先確定樣本矩陣;其中,樣本矩陣包括亮度樣本矩陣和色度樣本矩陣;然後可以根據預測參考模式、擴展子塊的尺寸參數、樣本矩陣以及運動向量集合,確定第三預測值。
由此可見,在本申請中,在進行基於子塊的預測的過程中,可以提前將二次預測或PROF處理所需要的像素位置的像素值也同時預測出來。由於二次預測或PROF處理時所使用的目標像素位置與當前像素位置之間的距離為1個像素位置,因此在二次預測或PROF處理僅僅需要使用當前子塊的上下各一行、左右各一列的像素位置的像素值,按照該原則便可以確定出對應的擴展子塊。例如,如果當前子塊是尺寸大小為4x4的子塊,那麼二次預測或PROF處理需要使用尺寸大小為6x6的擴展子塊的基於子塊的預測值,如果當前子塊是尺寸大小為8x8的子塊,那麼二次預測或PROF處理需要使用尺寸大小為10x10的擴展子塊的基於子塊的預測值。也就是說,解碼器透過在基於子塊的預測過程中,提前將二次預測或PROF處理所需要的像素位置的像素值也一起預測出來,那麼在後續的二次預測或PROF處理過程中,便不會存在當前像素位置和目標像素位置不相連的問題。
在本申請的實施例中,進一步地,解碼器在提前預測獲得擴展子塊的第三預測值之後,如果目標像素位置不屬於當前子塊,那麼解碼器可以基於第三預測值和目標像素位置,確定出當前子塊對應的第二預測值,然後便可以將第二預測值確定為幀間預測值。
可以理解的是,在本申請中,即使目標像素位置不屬於當前子塊,也一定屬於當前子塊對應的擴展子塊,因此,在確定目標像素位置不屬於當前子塊之後,解碼器便可以利用擴展子塊的第三預測值和目標像素位置進一步對當前像素位置進行二次預測,獲得該當前像素位置所對應的修正後預測值,遍歷當前子塊中的每一個像素位置,獲得每一個像素位置對應的修正後預測值,最終便可以確定當前子塊的第二預測值,進而可以將第二預測值確定為當前塊的幀間預測值。
示例性的,在本申請中,如果當前塊的寬度和高度分別是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),當前子塊基於子塊的預測樣本矩陣為PredMatrixTmp,PredMatrixTmp是擴展子塊(subwidth+2)*(subheight+2)對應的預測樣本矩陣,二次預測的預測樣本矩陣為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<<14))>>15 PredMatrixS[x+i][y+j]=Clip3(0,(1<<BitDepth)-1,PredMatrixS[x+i][y+j])。
其中,UPLEFT(x+i,y+j)=PredMatrixTmp[i][j] UP(x+i,y+j)=PredMatrixTmp[i+1][j] UPRIGHT(x+i,y+j)=PredMatrixTmp[i+2][j] LEFT(x+i,y+j)=PredMatrixTmp[i][j+1] CENTER(x+i,y+j)=PredMatrixTmp[i+1][j+1] RIGHT(x+i,y+j)=PredMatrixTmp[i+2][j+1] DOWNLEFT(x+i,y+j)=PredMatrixTmp[i][j+2] DOWN(x+i,y+j)=PredMatrixTmp[i+1][j+2] DOWNRIGHT(x+i,y+j)=PredMatrixTmp[i+2][ j+2]
可以理解的是,在本申請中,尺寸參數為6x6或10x10的擴展子塊對應的預測樣本矩陣PredMatrixTmp,可以為在原有基於子塊的預測的子塊預測矩陣基礎上增加上下各一行、左右各一列的預測值的預測矩陣。其中,PredMatrixTmp是對應於子塊的矩陣,而PredMatrixS是對應於整個預測單元的矩陣,即當前塊的矩陣,所以它們的索引有區別。擴展子塊與當前子塊相比,由於PredMatrixTmp在左邊多一列且在上邊多一行,因此與子塊對應的位置的索引分別水平方向加1和垂直方向加1。
進一步地,在本申請的實施例中,在執行步驟S3010a之前,即在基於第一運動向量確定擴展子塊的第三預測值之前,解碼器也可以按照上述步驟S306至步驟S308所提出的方法,先對當前子塊是否滿足預設限制條件進行判斷,只有在滿足預設限制條件下,解碼器才會確定擴展子塊的第三預測值,並使用第三預測值進行二次預測或PROF處理,獲得當前子塊的幀間預測值;如果當前子塊不滿足預設限制條件,那麼解碼器便可以直接使用當前子塊的第一預測值和目標像素位置,確定第二預測值,然後將第二預測值確定為幀間預測值。
也就是說,在本申請中,預設限制條件還可以用於確定是否對當前子塊進行擴展子塊的第三預測值的確定。
可以理解的是,在本申請的實施例中,除了使用上述的第一運動向量偏差、第二運動向量偏差或者第三運動向量偏差進行是否滿足預設限制條件的判斷以外,解碼器還可以直接利用當前子塊對應的子塊尺寸參數來判斷是否滿足預設限制條件。
示例性的,在本申請中,如果當前子塊對應的子塊尺寸參數為8x8,那麼可以判定滿足預設限制條件;如果當前子塊對應的子塊尺寸參數為4x4,那麼可以判定不滿足預設限制條件。
由於基於子塊的預測需要用到插值濾波,一般情況下可以使用水平和垂直方向的8抽頭濾波器進行內插。如果將插值點數由原來的4x4變成6x6,或者由原來的8x8變成10x10,那麼需要增加額外的頻寬,計算量也會增加。因此,需要基於預設限制條件對是否確定並使用當前子塊對應的擴展子塊的第三預測值。例如,如果當前子塊的大小是8x8,那麼便判定滿足預設限制條件,則確定並使用擴展子塊的第三預測值,以進行二次預測或PROF處理;如果當前子塊的大小是4x4,那麼便判定不滿足預設限制條件,則不需要確定擴展子塊的第三預測值,而是直接使用當前子塊的第一預測值,以進行二次預測或PROF處理。
由於按現有的內插的方法增加新的預測值,如上述的上下各一行、左右各一列的預測值,會增加頻寬,為了解決頻寬增加的問題,還可以使用少於8抽頭的濾波器進行內插,從而可以在確定額外像素位置的預測值時不增加頻寬,進一步地,也可以直接使用距離最近的參考像素值作為對應的額外像素位置的預測值。本申請不作具體限定。
示例性的,在本申請中,圖21為4x4子塊的示意圖,如圖21所示,對一個4x4的子塊使用8抽頭的插值濾波器,需要使用如圖所示的、該子塊周圍的11x11的參考像素進行插值。也就是說,對一個4x4子塊來說,如果使用8抽頭的插值濾波器,左側和上側需要多出3個參考像素、右側和下側需要多出4個參考像素進行插值。
可以理解的是,在本申請中,可以透過對擴展子塊使用較少抽頭的濾波器來解決頻寬增加的問題,例如,對擴展子塊使用n抽頭的插值濾波器,獲得第三預測值;其中,n為以下值中的任一者:6,5,4,3,2。
圖22為擴展子塊示意圖一,如圖22所示,圓形1可以表徵子塊內部的像素位置對應的參考圖像中的分像素,即可以表徵該子塊的基於子塊的預測的預測值,圓形2可以表徵提前預測獲得的、擴展子塊中超出原子塊邊界的額外的預測值。其中,對圓形2使用與圓形1一樣的插值需要的參考像素就會超出原來的11x11的範圍。但是使用更少抽頭的濾波器,如6或5或4或3或2抽頭濾波器,就可以不超出該範圍從而不增加頻寬。2抽頭濾波器可以是分像素點的相鄰的2個整像素的平均或加權平均。上述所說的濾波器都是水平或垂直方向的,如果要插值的位置在水平和垂直方向都是分像素,那麼需要疊加使用水平和垂直方向的濾波器。
可以理解的是,在本申請中,為了解決頻寬增加的問題,還可以先對當前子塊對應的參考像素進行擴展處理,獲得擴展後參考像素;然後基於擴展後參考像素,使用當前子塊對應的插值濾波器,獲得第三預測值。
圖23為擴展子塊示意圖二,如圖23所示,為了不增加頻寬,還可以將原來插值的參考像素的最外面一圈進行擴展,例如,將11x11的參考像素擴充到13x13的參考像素,具體可以採用上述步驟S304所提出的擴展方法。這樣可以使用統一的濾波器。
示例性的,提出另一種不增加頻寬的方法,可以不擴展像素,而是在濾波器需要使用的像素超出了原有的像素範圍時,選擇使用就近的範圍內的像素來代替。
可以理解的是,在本申請中,為了解決頻寬增加的問題,還可以先在當前塊中確定擴展子塊對應的相鄰像素位置;然後根據相鄰像素位置的整像素值確定第三預測值。
圖24為替換像素的示意圖,如圖24所示,為了不增加頻寬,還可以直接使用最相鄰的整像素的值作為需要使用的、超出該子塊之外的預測值。具體地,可以直接使用方形3的像素值作為圓形2的預測值。如果水平方向的分像素MV小於等於(或小於)1/2像素,則使用分像素左邊的整像素,如果水平方向的分像素MV大於(或大於等於)1/2像素,則使用分像素左邊的整像素,如果垂直方向的分像素MV小於等於(或小於)1/2像素,則使用分像素上邊的整像素,如果垂直方向的分像素MV大於(或大於等於)1/2像素,則使用分像素下邊的整像素。
在本申請的實施例中,進一步地,圖25為幀間預測方法的實現流程示意圖四,如圖25所示,在基於第一運動向量確定當前子塊的第一預測值,並確定當前像素位置對應的目標像素位置之後,即步驟S303之後,解碼器進行幀間預測的方法還可以包括以下步驟:
步驟S3012、若目標像素位置不屬於當前子塊,則在當前塊中確定鄰近像素位置;其中,鄰近像素位置在當前塊中與目標像素位置相鄰。
步驟S3013、基於第一預測值和鄰近像素位置,確定第二預測值,將第二預測值確定為幀間預測值。
在本申請的實施例中,解碼器在確定當前像素位置對應的目標像素位置之後,如果目標像素位置不屬於當前子塊,即當前像素位置和目標像素位置並不在相同的子塊中,那麼解碼器可以先在當前塊中的全部像素位置中,確定出與目標像素位置距離最近的鄰近像素位置;其中,該鄰近像素位置是在當前塊中與目標像素位置相鄰的。
進一步地,在本申請的實施例中,如果進行二次預測或PROF處理時所需要的像素值是當前子塊外的目標像素位置的像素值,那麼解碼器可以重新確定該像素值。具體地,解碼器可以計算獲得當前塊中的、與該目標像素位置距離最近的一個鄰近像素位置,然後可以使用該鄰近像素位置的像素值進行二次預測或PROF處理。
示例性的,在本申請中,圖26為替代像素位置的示意圖,如圖26所示,子塊2中並不存在與子塊1中的位置1正左方相鄰的像素位置,如果按照目前的二次預測方法,會選擇子塊2中的位置3作為子塊1中位置1的正左方一個像素距離的位置,可以看出,位置1和位置3相差較遠,如果使用位置3作為位置1的相鄰像素位置進行濾波,會大大降低最終獲得的二次預測的預測效果。這時,可以在當前塊中選擇與位置4替代位置3,即該位置4為位置2的鄰近像素位置,具體地,位置4是與位置2距離最近的像素位置,兩者的偏差較小,使用位置4作為位置1的相鄰像素位置進行濾波,會比使用位置3獲得更加準確的結果。
可以理解的是,在本申請的實施例中,解碼器在當前塊中的其他子塊中確定該鄰近像素位置時,需要使用當前子塊的第一運動向量進行計算,獲得的結果也可能為當前塊中的其他子塊中不存在該鄰近像素位置,如果鄰近像素位置不存在,那麼解碼器可以選擇繼續使用目標像素位置的像素值進行二次預測或PROF處理。
也就是說,本申請實施例提出的幀間預測方法,在基於子塊的預測之後,如果進行二次預測或PROF處理所需要使用的像素位置不在同一個子塊中,為了避免因為像素不相連導致的預測性能的下降,基於將使用的像素位置限制在同一個子塊中的原則,解碼器可以對不屬於當前子塊的目標像素位置進行更新處理,獲得更新後的像素位置,從而可以基於更新後的像素位置進行二次預測或PROF處理。其中,上述更新處理的過程可以理解為對當前子塊的邊界的擴展,也可以理解為對超出當前子塊的邊界的目標像素位置的重新定義,從而將進行二次預測或PROF處理所需要使用的像素位置限制在相同的子塊中,進而透過保證像素之間相連而提高預測性能。其中,該幀間預測方法可以對當前塊作用,也可以對當前塊中的每一個子塊作用,還可以對任意一個子塊中的每一個像素位置作用。可見,本申請實施例提出的幀間預測方法,透過避免把參考圖像中明顯不相鄰的像素作為相鄰像素來進行二次預測或PROF處理,從而可以減小預測的誤差,進而提升編碼性能。
本實施例提供了一種幀間預測方法,在基於子塊的預測之後,如果進行二次預測或PROF處理所需要使用的像素位置不在同一個子塊中,可以透過對當前子塊的邊界的擴展、對超出當前子塊的邊界的目標像素位置的重新定義等多種方式,將進行二次預測或PROF處理所需要使用的像素位置限制在相同的子塊中,從而解決了因為像素不相連所導致的預測性能下降的問題,能夠減小預測的誤差,大大提升編碼性能,從而提高了編解碼效率。
本申請實施例提供一種幀間預測方法,該方法應用於影像編碼設備,即編碼器。該方法所實現的功能可以透過編碼器中的第二處理器調用電腦程式來實現,當然電腦程式可以保存在第二記憶體中,可見,該編碼器至少包括第二處理器和第二記憶體。
進一步地,在本申請的實施例中,圖31為幀間預測方法的實現流程示意圖五,如圖31所示,編碼器進行幀間預測的方法可以包括以下步驟:
步驟S401、確定當前塊的預測模式參數。
在本申請的實施例中,編碼器可以先確定當前塊的預測模式參數。具體地,編碼器可以先確定當前塊使用的預測模式,然後基於該預測模式確定對應的預測模式參數。其中,預測模式參數可以用於對當前塊所使用的預測模式進行確定。
需要說明的是,在本申請的實施例中,待編碼圖像可以劃分為多個圖像塊,當前待編碼的圖像塊可以稱為當前塊,與當前塊相鄰的圖像塊可以稱為相鄰塊;即在待編碼圖像中,當前塊與相鄰塊之間具有相鄰關係。這裡,每個當前塊可以包括第一圖像分量、第二圖像分量和第三圖像分量;也即當前塊為待編碼圖像中當前待進行第一圖像分量、第二圖像分量或者第三圖像分量預測的圖像塊。
其中,假定當前塊進行第一圖像分量預測,而且第一圖像分量為亮度分量,即待預測圖像分量為亮度分量,那麼當前塊也可以稱為亮度塊;或者,假定當前塊進行第二圖像分量預測,而且第二圖像分量為色度分量,即待預測圖像分量為色度分量,那麼當前塊也可以稱為色度塊。
需要說明的是,在本申請的實施例中,預測模式參數指示了當前塊採用的預測模式以及與該預測模式相關的參數。這裡,針對預測模式參數的確定,可以採用簡單的決策策略,比如根據失真值的大小進行確定;也可以採用複雜的決策策略,比如根據位元率失真優化(Rate Distortion Optimization,RDO)的結果進行確定,本申請實施例不作任何限定。通常而言,可以採用RDO方式來確定當前塊的預測模式參數。
具體地,在一些實施例中,編碼器在確定當前塊的預測模式參數時,可以先利用多種預測模式對當前塊進行預編碼處理,獲得每一種預測模式對應的位元率失真代價值;然後從所獲得的多個位元率失真代價值中選擇最小位元率失真代價值,並根據最小位元率失真代價值對應的預測模式確定當前塊的預測模式參數。
也就是說,在編碼器側,針對當前塊可以採用多種預測模式分別對當前塊進行預編碼處理。這裡,多種預測模式通常包括有幀間預測模式、傳統幀內預測模式和非傳統幀內預測模式;其中,傳統幀內預測模式可以包括有直流(Direct Current,DC)模式、平面(PLANAR)模式和角度模式等,非傳統幀內預測模式可以包括有基於矩陣的幀內預測(Matrix-based IntraPrediction,MIP)模式、跨分量線性模型預測(Cross-component LinearmodelPrediction,CCLM)模式、幀內塊複製(Intra Block Copy,IBC)模式和PLT(Palette)模式等,而幀間預測模式可以包括有普通幀間預測模式、GPM模式和AWP模式等。
這樣,在利用多種預測模式分別對當前塊進行預編碼之後,可以得到每一種預測模式對應的位元率失真代價值;然後從所得到的多個位元率失真代價值中選取最小位元率失真代價值,並將該最小位元率失真代價值對應的預測模式確定為當前塊的預測模式參數。除此之外,還可以在利用多種預測模式分別對當前塊進行預編碼之後,得到每一種預測模式對應的失真值;然後從所得到的多個失真值中選取最小失真值,然後將該最小失真值對應的預測模式確定為當前塊使用的預測模式,並根據該預測模式設置對應的預測模式參數。如此,最終使用所確定的預測模式參數對當前塊進行編碼,而且在這種預測模式下,可以使得預測殘差較小,能夠提高編碼效率。
也就是說,在編碼側,編碼器可以選取最優的預測模式對當前塊進行預編碼,在這過程中就可以確定出當前塊的預測模式,然後確定用於指示預測模式的預測模式參數,從而將相應的預測模式參數寫入位元流,由編碼器傳輸到解碼器。
相應地,在解碼器側,解碼器透過解析位元流便可以直接獲取到當前塊的預測模式參數,並根據解析獲得的預測模式參數確定當前塊所使用的預測模式,以及該預測模式對應的相關參數。
步驟S402、當預測模式參數指示使用幀間預測模式確定當前塊的幀間預測值時,確定當前塊的當前子塊的第一運動向量;其中,當前塊包括多個子塊。
在本申請的實施例中,如果預測模式參數指示當前塊使用幀間預測模式確定當前塊的幀間預測值,那麼編碼器可以先確定出當前塊的每一個子塊的第一運動向量。其中,一個子塊對應有一個第一運動向量。
需要說明的是,在本申請的實施例中,當前塊為當前幀中待編碼的圖像塊,當前幀以圖像塊的形式按一定順序依次進行編碼,該當前塊為當前幀內按該順序下一時刻待編碼的圖像塊。當前塊可具有多種規格尺寸,例如16x16、32x32或32x16等規格,其中數字表示當前塊上像素點的行數和列數。
進一步對,在本申請的實施例中,當前塊可以劃分為多個子塊,其中,每一個子塊的尺寸大小都是相同的,子塊為較小規格的像素點集合。子塊的尺寸可以為8x8或4x4。
示例性的,在本申請中,當前塊的尺寸為16x16,可以劃分為4個尺寸均為8x8的子塊。
可以理解的是,在本申請的實施例中,在編碼器確定預測模式參數指示使用幀間預測模式確定當前塊的幀間預測值的情況下,就可以繼續採用本申請實施例所提供的幀間預測方法。
在本申請的實施例中,進一步地,當預測模式參數指示使用幀間預測模式確定當前塊的幀間預測值時,編碼器確定當前塊的當前子塊的第一運動向量時,可以確定當前塊的仿射模式參數和預測參考模式。當仿射模式參數指示使用仿射模式時,確定控制點模式和子塊尺寸參數。最後可以根據預測參考模式、控制點模式以及子塊尺寸參數,確定第一運動向量。
需要說明的是,在本申請的實施例中,仿射模式參數用於對是否使用仿射模式進行指示。具體地,仿射模式參數可以為仿射運動補償允許標誌affine_enable_flag,編碼器透過仿射模式參數的取值的確定,可以進一步確定是否使用仿射模式。
也就是說,在本申請中,仿射模式參數可以為一個二值變數。若仿射模式參數的取值為1,則指示使用仿射模式;若仿射模式參數的取值為0,則指示不使用仿射模式。
需要說明的是,在本申請的實施例中,控制點模式用於對控制點的個數進行確定。在仿射模型中,一個子塊可以有2個控制點或者3個控制點,相應地,控制點模式可以為2個控制點對應的控制點模式,或者為3個控制點對應的控制點模式。即控制點模式可以包括4參數模式和6參數模式。
可以理解的是,在本申請的實施例中,對於AVS3標準,如果當前塊使用了仿射模式,那麼編碼器還需要確定出當前塊在仿射模式中控制點的個數進行確定,從而可以確定出使用的是4參數(2個控制點)模式,還是6參數(3個控制點)模式。
進一步地,在本申請的實施例中,如果編碼器確定的仿射模式參數指示使用仿射模式,那麼編碼器可以進一步確定子塊尺寸參數。
具體地,可以透過仿射預測子塊尺寸標誌affine_subblock_size_flag表徵子塊尺寸參數,編碼器可以對子塊尺寸標誌的取值的設定來指示子塊尺寸參數子塊尺寸參數,即指示當前塊的子塊當前塊的當前子塊的尺寸大小。其中,子塊的尺寸大小可以為8x8或4x4。
示例性的,在本申請中,若子塊尺寸參數為8x8,則將子塊尺寸標誌的設置為1,並將子塊尺寸標誌寫入位元流;若子塊尺寸參數為4x4,則將子塊尺寸標誌的設置為0,並將子塊尺寸標誌寫入位元流。
具體地,在本申請的實施例中,編碼器可以先根據預測參考模式確定控制點運動向量組;然後可以基於控制點運動向量組、控制點模式以及子塊尺寸參數,確定出子塊的第一運動向量。
可以理解的是,在本申請的實施例中,控制點運動向量組可以用於對控制點的運動向量進行確定。
需要說明的是,在本申請的實施例中,編碼器可以按照上述方法,遍歷當前塊中的每一個子塊,利用每一個子塊的控制點運動向量組、控制點模式以及子塊尺寸參數,確定出每一個子塊的第一運動向量,從而可以根據每一個子塊的第一運動向量構建獲得運動向量集合。
可以理解的是,在本申請的實施例中,當前塊的運動向量集合中可以包括當前塊的每一個子塊的第一運動向量。
進一步地,在本申請的實施例中,編碼器在根據控制點運動向量組、控制點模式以及子塊尺寸參數,確定第一運動向量時,可以先根據控制點運動向量組、控制點模式以及當前塊的尺寸參數,確定差值變數;然後可以基於預測模式參數和子塊尺寸參數,確定子塊位置;最後,便可以利用差值變數和當前子塊位置,確定當前子塊的第一運動向量,進而可以獲得當前塊的多個子塊的運動向量集合。
步驟S403、基於第一運動向量確定當前子塊的第一預測值,並確定當前像素位置對應的目標像素位置;其中,當前像素位置為當前子塊內的一個像素點的位置,目標像素位置為對當前像素位置的像素點進行二次預測或PROF處理的像素點的位置。
在本申請的實施例中,編碼器在確定出當前塊的每一個子塊的第一運動向量之後,可以先基於當前子塊的第一運動向量確定出當前子塊的第一預測值,然後可以確定該當前子塊中的當前像素位置所對應的目標像素位置。其中,目標像素位置是與當前像素位置相鄰的像素位置。
需要說明的是,在本申請的實施例中,當前像素位置為當前塊的當前子塊中的一個像素點的位置,其中,當前像素位置可以表徵待處理的像素點的位置。具體地,當前像素位置可以為待二次預測的像素點的位置,也可以為待PROF處理的像素點的位置。
可以理解的是,在本申請的實施例中,步驟S403具體可以包括:
步驟S403a、基於第一運動向量確定子塊的第一預測值。
步驟S403b、確定當前像素位置對應的目標像素位置。
其中,本申請實施例提出的幀間預測方法對編碼器執行步驟S403a和步驟S403b的順序不進行限定,也就是說,在本申請中,在確定出當前塊的每一個子塊的第一運動向量之後,編碼器可以先執行步驟S403a,然後執行步驟S403b,也可以先執行步驟S403b,再執行步驟S403a,還可以同時執行步驟S403a和步驟S403b。
步驟S404、若目標像素位置不屬於當前子塊,則根據當前子塊對目標像素位置進行更新處理,獲得更新後像素位置。
在本申請的實施例中,編碼器在基於第一運動向量確定當前子塊的第一預測值,並確定當前像素位置對應的目標像素位置之後,如果目標像素位置不屬於當前子塊,即目標像素位置和當前像素位置屬於不同的子塊,那麼編碼器便可以根據當前子塊對目標像素位置進行更新處理,從而獲得更新後像素位置。
進一步地,在本申請的實施例中,圖32為幀間預測方法的實現流程示意圖六,如圖32所示,若目標像素位置不屬於當前子塊,編碼器則根據當前子塊對目標像素位置進行更新處理,獲得更新後像素位置之前,即步驟S404之前,編碼器進行幀間預測的方法還可以包括以下步驟:
步驟S406、判斷當前子塊是否滿足預設限制條件;其中,預設限制條件用於確定是否將目標像素位置限制在當前子塊內。
步驟S407、若滿足預設限制條件,則判斷目標像素位置是否屬於當前子塊。
步驟S408、若不滿足預設限制條件,則基於第一預測值和目標像素位置,確定第二預測值,將第二預測值確定為幀間預測值。
在本申請的實施例中,編碼器可以先判斷當前子塊是否滿足預設限制條件,如果滿足預設限制條件,那麼編碼器可以繼續確定目標像素位置是否屬於當前子塊,從而進一步確定是否對目標像素位置進行限制處理,即是否對目標像素位置執行更新處理的流程;如果不滿足預設限制條件,那麼編碼器便可以不需要對目標像素位置進行限制處理,而是直接基於第一預測值和目標像素位置,進一步確定當前像素位置對應的修正後預測值,並在遍歷當前子塊中的每一個像素位置,獲得每一個像素位置對應的修正後預測值之後,確定出當前子塊對應的第二預測值,從而確定出當前子塊的幀間預測值。
進一步地,在本申請的實施例中,編碼器可以透過多種方式來判斷當前子塊是否滿足預設限制條件。具體地,編碼器可以透過運動向量來進一步確定是否滿足預設限制條件。
示例性的,在本申請中,編碼器在判斷當前子塊是否滿足預設限制條件時,可以先基於控制點運動向量組確定第一運動向量偏差;然後將第一運動向量偏差與預設偏差閾值進行比較,如果第一運動向量偏差大於獲得等於預設偏差閾值,那麼可以判定滿足預設限制條件;如果第一運動向量偏差小於預設偏差閾值,那麼判定不滿足預設限制條件。
示例性的,在本申請中,編碼器在判斷當前子塊是否滿足預設限制條件時,可以先基於每一個子塊的第一運動向量確定第二運動向量偏差;然後將第二運動向量偏差與預設偏差閾值進行比較,如果第二運動向量偏差大於獲得等於預設偏差閾值,那麼判定滿足預設限制條件;如果第二運動向量偏差小於預設偏差閾值,那麼判定不滿足預設限制條件。
示例性的,在本申請中,編碼器在判斷當前子塊是否滿足預設限制條件時,可以先確定當前子塊內的、預設像素位置與當前子塊之間的第三運動向量偏差;然後將第三運動向量偏差與預設偏差閾值進行比較,如果第三運動向量偏差大於獲得等於預設偏差閾值,那麼判定滿足預設限制條件;如果第三運動向量偏差小於預設偏差閾值,那麼判定不滿足預設限制條件。
需要說明的是,在本申請中,可以根據當前塊的尺寸參數和\或子塊尺寸參數確定預設偏差閾值。
可以理解的是,在本申請中,編碼器在根據當前子塊對目標像素位置進行更新處理,獲得更新後像素位置時,可以先對當前子塊進行擴展處理,獲得擴展後子塊;然後可以在擴展後子塊內確定目標像素位置對應的更新後像素位置。
可以理解的是,在本申請的實施例中,編碼器在對當前子塊進行擴展處理,獲得擴展後子塊時,可以選擇利用當前子塊的全部邊界位置進行擴展處理,獲得擴展後子塊;也可以選擇利用當前子塊內的、目標像素位置對應的行和\或列的邊界位置進行擴展處理,獲得擴展後子塊。
步驟S405、基於第一預測值和更新後像素位置,確定當前子塊對應的第二預測值,將第二預測值確定為當前子塊的幀間預測值。
在本申請的實施例中,如果目標像素位置不屬於當前子塊,編碼器在根據當前子塊對目標像素位置進行更新處理,獲得更新後像素位置之後,便可以基於第一預測值和更新後像素位置,確定出當前像素位置對應的修正後預測值,並在遍歷當前子塊中的每一個像素位置,獲得每一個像素位置對應的修正後預測值之後,確定當前子塊對應的第二預測值,然後可以將第二預測值確定為當前子塊的幀間預測值。
進一步地,在本申請的實施例中,編碼器基於第一預測值和更新後像素位置,確定當前子塊對應的第二預測值的方法可以包括以下步驟:
步驟S405a、確定PROF參數;
步驟S405b、當PROF參數指示進行PROF處理時,基於第一預測值確定當前像素位置與更新後像素位置之間的像素水平梯度和像素垂直梯度;
步驟S405c、確定更新後像素位置與當前子塊的第四運動向量偏差;
步驟S405d、根據像素水平梯度、像素垂直梯度以及第四運動向量偏差,計算當前像素位置對應的偏差值;
步驟S405e、基於第一預測值和偏差值,獲得第二預測值。
進一步地,在本申請的實施例中,編碼器基於第一預測值和更新後像素位置,確定當前子塊對應的第二預測值的方法可以包括以下步驟:
步驟S405f、確定二次預測參數;
步驟S405g、當二次預測參數指示使用二次預測時,確定更新後像素位置與當前子塊的第四運動向量偏差;
步驟S405h、根據第四運動向量偏差確定二維濾波器的濾波係數;其中,二維濾波器用於按照預設形狀進行二次預測處理;
步驟S405i、基於濾波係數和第一預測值,確定第二預測值,將第二預測值確定為幀間預測值。
綜上所述,透過步驟S401至步驟S408所提出的幀間預測方法,在基於子塊的預測之後,如果進行二次預測或PROF處理所需要使用的像素位置不在同一個子塊中,為了避免因為像素不相連導致的預測性能的下降,編碼器可以對不屬於當前子塊的目標像素位置進行更新處理,獲得更新後的像素位置,從而可以基於更新後的像素位置進行二次預測或PROF處理。其中,上述更新處理的過程可以理解為對當前子塊的邊界的擴展,也可以理解為對超出當前子塊的邊界的目標像素位置的重新定義,從而將進行二次預測或PROF處理所需要使用的像素位置限制在相同的子塊中,進而透過保證像素之間相連而提高預測性能。
進一步地,在本申請的實施例中,圖33為幀間預測方法的實現流程示意圖七,如圖33所示,編碼器進行幀間預測的方法還可以包括以下步驟:
步驟S409、當預測模式參數指示使用幀間預測模式確定當前塊的幀間預測值時,確定當前子塊的擴展子塊。
步驟S4010、基於第一運動向量確定擴展子塊的第三預測值,並確定當前像素位置對應的目標像素位置。
步驟S4011、若目標像素位置不屬於當前子塊,基於第三預測值和目標像素位置,確定第二預測值,將第二預測值確定為幀間預測值。
進一步地,在本申請的實施例中,在執行步驟S4010a之前,即在基於第一運動向量確定擴展子塊的第三預測值之前,編碼器也可以按照上述步驟S406至步驟S408所提出的方法,先對當前子塊是否滿足預設限制條件進行判斷,只有在滿足預設限制條件下,才會確定擴展子塊的第三預測值,並使用第三預測值進行二次預測或PROF處理,獲得當前子塊的幀間預測值;如果當前子塊不滿足預設限制條件,那麼解碼器便可以直接使用當前子塊的第一預測值和目標像素位置,確定第二預測值,然後將第二預測值確定為幀間預測值。
也就是說,在本申請中,預設限制條件還可以用於確定是否對當前子塊進行擴展子塊的第三預測值的確定。
可以理解的是,在本申請中,可以透過對擴展子塊使用較少抽頭的濾波器來解決頻寬增加的問題,例如,對擴展子塊使用n抽頭的插值濾波器,獲得第三預測值;其中,n為以下值中的任一者:6,5,4,3,2。也就是說,在本申請中,使用更少抽頭的濾波器,如6或5或4或3或2抽頭濾波器,就可以不超出該範圍從而不增加頻寬。2抽頭濾波器可以是分像素點的相鄰的2個整像素的平均或加權平均。上述所說的濾波器都是水平或垂直方向的,如果要插值的位置在水平和垂直方向都是分像素,那麼需要疊加使用水平和垂直方向的濾波器。
可以理解的是,在本申請中,為了解決頻寬增加的問題,還可以先對當前子塊對應的參考像素進行擴展處理,獲得擴展後參考像素;然後基於擴展後參考像素,使用當前子塊對應的插值濾波器,獲得第三預測值。也就是說,在本申請中,可以將原來插值的參考像素的最外面一圈進行擴展,例如,將11x11的參考像素擴充到13x13的參考像素,具體可以採用上述步驟S304所提出的擴展方法。這樣可以使用統一的濾波器。同時還提出另一種不增加頻寬的方法,可以不擴展像素,而是在濾波器需要使用的像素超出了原有的像素範圍時,選擇使用就近的範圍內的像素來代替。
可以理解的是,在本申請中,為了解決頻寬增加的問題,還可以先在當前塊中確定擴展子塊對應的相鄰像素位置;然後根據相鄰像素位置的整像素值確定第三預測值。也就是說,在本申請中,還可以直接使用最相鄰的整像素的值作為需要使用的、超出該子塊之外的預測值。具體地,可以直接使用方形3的像素值作為圓形2的預測值。如果水平方向的分像素MV小於等於(或小於)1/2像素,則使用分像素左邊的整像素,如果水平方向的分像素MV大於(或大於等於)1/2像素,則使用分像素左邊的整像素,如果垂直方向的分像素MV小於等於(或小於)1/2像素,則使用分像素上邊的整像素,如果垂直方向的分像素MV大於(或大於等於)1/2像素,則使用分像素下邊的整像素。
進一步地,在本申請的實施例中,圖34為幀間預測方法的實現流程示意圖八,如圖34所示,在基於第一運動向量確定當前子塊的第一預測值,並確定當前像素位置對應的目標像素位置之後,即步驟S403之後,編碼器進行幀間預測的方法還可以包括以下步驟:
步驟S4012、若目標像素位置不屬於當前子塊,則在當前塊中確定鄰近像素位置;其中,鄰近像素位置在當前塊中與目標像素位置相鄰。
步驟S4013、基於第一預測值和鄰近像素位置,確定第二預測值,將第二預測值確定為幀間預測值。
需要說明的是,本申請實施例提出的幀間預測方法,可以作用於整個編碼單元或預測單元,即作用於當前塊,也可以作用於當前塊中的每一個子塊,還可以作用於任意一個子塊中的每一個像素位置。本申請不作具體限定。
可以理解的是,在本申請中,編碼器可以將預測模式參數、仿射模式參數、預測參考模式寫入位元流。還可以將PROF參數、二次預測參數寫入位元流。
本實施例提供了一種幀間預測方法,在基於子塊的預測之後,如果進行二次預測或PROF處理所需要使用的像素位置不在同一個子塊中,可以透過對當前子塊的邊界的擴展、對超出當前子塊的邊界的目標像素位置的重新定義等多種方式,將進行二次預測或PROF處理所需要使用的像素位置限制在相同的子塊中,從而解決了因為像素不相連所導致的預測性能下降的問題,能夠減小預測的誤差,大大提升編碼性能,從而提高了編解碼效率。
基於上述實施例,在本申請的再一實施例中,圖27為解碼器的組成結構示意圖一,如圖27所示,本申請實施例提出的解碼器300可以包括解析單元301、第一確定單元302以及第一更新單元303。
所述解析單元301,用於解析位元流,獲取當前塊的預測模式參數;
所述第一確定單元302,用於當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前塊的當前子塊的第一運動向量;其中,所述當前塊包括多個子塊;基於所述第一運動向量確定所述當前子塊的第一預測值,並確定當前像素位置對應的目標像素位置;其中,所述當前像素位置為所述當前子塊內的一個像素點的位置,所述目標像素位置為對所述當前像素位置的像素點進行二次預測或PROF處理的像素點的位置;
所述第一更新單元303,用於若所述目標像素位置不屬於所述當前子塊,則根據所述當前子塊對所述目標像素位置進行更新處理,獲得更新後像素位置;
所述第一確定單元302,還用於基於所述第一預測值和所述更新後像素位置,確定所述當前子塊對應的第二預測值,將所述第二預測值確定為所述當前子塊的幀間預測值。
圖28為解碼器的組成結構示意圖二,如圖28所示,本申請實施例提出的解碼器300還可以包括第一處理器304、儲存有第一處理器304可執行指令的第一記憶體305、第一通訊介面306,和用於連接第一處理器304、第一記憶體305以及第一通訊介面306的第一匯流排307。
進一步地,在本申請的實施例中,上述第一處理器304,用於解析位元流,獲取當前塊的預測模式參數;當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前塊的當前子塊的第一運動向量;其中,所述當前塊包括多個子塊;基於所述第一運動向量確定所述當前子塊的第一預測值,並確定當前像素位置對應的目標像素位置;其中,所述當前像素位置為所述當前子塊內的一個像素點的位置,所述目標像素位置為對所述當前像素位置的像素點進行二次預測或PROF處理的像素點的位置;若所述目標像素位置不屬於所述當前子塊,則根據所述當前子塊對所述目標像素位置進行更新處理,獲得更新後像素位置;基於所述第一預測值和所述更新後像素位置,確定所述當前子塊對應的第二預測值,將所述第二預測值確定為所述當前子塊的幀間預測值。
圖29為編碼器的組成結構示意圖一,如圖29所示,本申請實施例提出的編碼器400可以包括第二確定單元401和第二更新單元402。
所述第二確定單元401,用於確定當前塊的預測模式參數;當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前塊的當前子塊的第一運動向量;其中,所述當前塊包括多個子塊;基於所述第一運動向量確定所述當前子塊的第一預測值,並確定當前像素位置對應的目標像素位置;其中,所述當前像素位置為所述當前子塊內的一個像素點的位置,所述目標像素位置為對所述當前像素位置的像素點進行二次預測或PROF處理的像素點的位置;
所述第二更新單元402,用於若所述目標像素位置不屬於所述當前子塊,則根據所述當前子塊對所述目標像素位置進行更新處理,獲得更新後像素位置;
所述第二確定單元401,還用於基於所述第一預測值和所述更新後像素位置,確定所述當前子塊對應的第二預測值,將所述第二預測值確定為所述當前子塊的幀間預測值。
圖30為編碼器的組成結構示意圖二,如圖30所示,本申請實施例提出的編碼器400還可以包括第二處理器403、儲存有第二處理器403可執行指令的第二記憶體404、第二通訊介面405,和用於連接第二處理器403、第二記憶體404以及第二通訊介面405的第二匯流排406。
進一步地,在本申請的實施例中,上述第二處理器403,用於確定當前塊的預測模式參數;當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前塊的當前子塊的第一運動向量;其中,所述當前塊包括多個子塊;基於所述第一運動向量確定所述當前子塊的第一預測值,並確定當前像素位置對應的目標像素位置;其中,所述當前像素位置為所述當前子塊內的一個像素點的位置,所述目標像素位置為對所述當前像素位置的像素點進行二次預測或PROF處理的像素點的位置;若所述目標像素位置不屬於所述當前子塊,則根據所述當前子塊對所述目標像素位置進行更新處理,獲得更新後像素位置;基於所述第一預測值和所述更新後像素位置,確定所述當前子塊對應的第二預測值,將所述第二預測值確定為所述當前子塊的幀間預測值。
本申請實施例提供了一種解碼器和編碼器,該解碼器和編碼器在基於子塊的預測之後,如果進行二次預測或PROF處理所需要使用的像素位置不在同一個子塊中,可以透過對當前子塊的邊界的擴展、對超出當前子塊的邊界的目標像素位置的重新定義等多種方式,將進行二次預測或PROF處理所需要使用的像素位置限制在相同的子塊中,從而解決了因為像素不相連所導致的預測性能下降的問題,能夠減小預測的誤差,大大提升編碼性能,從而提高了編解碼效率。
本申請實施例提供電腦可讀儲存媒介和電腦可讀儲存媒介,其上儲存有程式,該程式被處理器執行時實現如上述實施例所述的方法。
具體來講,本實施例中的一種幀間預測方法對應的程式指令可以被儲存在光碟,硬碟,隨身碟等儲存媒介上,當儲存媒介中的與一種幀間預測方法對應的程式指令被一電子設備讀取或被執行時,包括如下步驟:
解析位元流,獲取當前塊的預測模式參數;
當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前塊的當前子塊的第一運動向量;其中,所述當前塊包括多個子塊;
基於所述第一運動向量確定所述當前子塊的第一預測值,並確定當前像素位置對應的目標像素位置;其中,所述當前像素位置為所述當前子塊內的一個像素點的位置,所述目標像素位置為對所述當前像素位置的像素點進行二次預測或PROF處理的像素點的位置;
若所述目標像素位置不屬於所述當前子塊,則根據所述當前子塊對所述目標像素位置進行更新處理,獲得更新後像素位置;
基於所述第一預測值和所述更新後像素位置,確定所述當前子塊對應的第二預測值,將所述第二預測值確定為所述當前子塊的幀間預測值。
具體來講,本實施例中的一種幀間預測方法對應的程式指令可以被儲存在光碟,硬碟,隨身碟等儲存媒介上,當儲存媒介中的與一種幀間預測方法對應的程式指令被一電子設備讀取或被執行時,包括如下步驟:
確定當前塊的預測模式參數;
當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前塊的當前子塊的第一運動向量;其中,所述當前塊包括多個子塊;
基於所述第一運動向量確定所述當前子塊的第一預測值,並確定當前像素位置對應的目標像素位置;其中,所述當前像素位置為所述當前子塊內的一個像素點的位置,所述目標像素位置為對所述當前像素位置的像素點進行二次預測或PROF處理的像素點的位置;
若所述目標像素位置不屬於所述當前子塊,則根據所述當前子塊對所述目標像素位置進行更新處理,獲得更新後像素位置;
基於所述第一預測值和所述更新後像素位置,確定所述當前子塊對應的第二預測值,將所述第二預測值確定為所述當前子塊的幀間預測值。
本領域內的技術人員應明白,本申請的實施例可提供為方法、系統、或電腦程式產品。因此,本申請可採用硬體實施例、軟體實施例、或結合軟體和硬體方面的實施例的形式。而且,本申請可採用在一個或多個其中包含有電腦可用程式碼的電腦可用儲存媒介(包括但不限於磁碟記憶體和光學記憶體等)上實施的電腦程式產品的形式。
本申請所提供的幾個方法實施例中所揭露的方法,在不衝突的情況下可以任意組合,得到新的方法實施例。
本申請所提供的幾個產品實施例中所揭露的特徵,在不衝突的情況下可以任意組合,得到新的產品實施例。
本申請所提供的幾個方法或設備實施例中所揭露的特徵,在不衝突的情況下可以任意組合,得到新的方法實施例或設備實施例。
以上所述,僅為本申請的具體實施方式,但本申請的保護範圍並不局限於此,任何熟悉本技術領域的技術人員在本申請揭露的技術範圍內,可輕易想到變化或替換,都應涵蓋在本申請的保護範圍之內。因此,本申請的保護範圍應以所述請求項的保護範圍為準。
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:第一通訊介面 307:第一匯流排 400:編碼器 401:第二確定單元 402:第二更新單元 403:第二處理器 404:第二記憶體 405:第二通訊介面 406:第二匯流排 S301~S3013:步驟 S401~S4013:步驟
圖1為仿射模型的示意圖一;
圖2為仿射模型的示意圖二;
圖3為像素的插值示意圖;
圖4為子塊插值的示意圖一;
圖5為子塊插值的示意圖二;
圖6為每個子塊的運動向量示意圖;
圖7為樣本位置示意圖;
圖8為對當前像素位置進行二次預測的示意圖;
圖9為像素位置不屬於相同子塊的示意圖一;
圖10為像素位置不屬於相同子塊的示意圖二;
圖11為對當前像素位置使用PROF的示意圖;
圖12為像素位置不屬於相同子塊的示意圖三;
圖13為本申請實施例提供的一種影像編碼系統的組成方塊圖示意圖;
圖14為本申請實施例提供的一種影像解碼系統的組成方塊圖示意圖;
圖15為幀間預測方法的實現流程示意圖一;
圖16為幀間預測方法的實現流程示意圖二;
圖17為擴展當前子塊的示意圖;
圖18為二維濾波器的示意圖一;
圖19為二維濾波器的示意圖二;
圖20為幀間預測方法的實現流程示意圖三;
圖21為4x4子塊的示意圖;
圖22為擴展子塊示意圖一;
圖23為擴展子塊示意圖二;
圖24為替換像素的示意圖;
圖25為幀間預測方法的實現流程示意圖四;
圖26為替代像素位置的示意圖;
圖27為解碼器的組成結構示意圖一;
圖28為解碼器的組成結構示意圖二;
圖29為編碼器的組成結構示意圖一;
圖30為編碼器的組成結構示意圖二;
圖31為幀間預測方法的實現流程示意圖五;
圖32為幀間預測方法的實現流程示意圖六;
圖33為幀間預測方法的實現流程示意圖七;
圖34為幀間預測方法的實現流程示意圖八。
S301~S305:步驟

Claims (62)

  1. 一種幀間預測方法,應用於解碼器,所述方法包括: 解析位元流,獲取當前塊的預測模式參數; 當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前塊的當前子塊的第一運動向量;其中,所述當前塊包括多個子塊; 基於所述第一運動向量確定所述當前子塊的第一預測值,並確定當前像素位置對應的目標像素位置;其中,所述當前像素位置為所述當前子塊內的一個像素點的位置,所述目標像素位置為對所述當前像素位置的像素點進行二次預測或使用光流原理的預測修正PROF處理的像素點的位置; 若所述目標像素位置不屬於所述當前子塊,則根據所述當前子塊對所述目標像素位置進行更新處理,獲得更新後像素位置; 基於所述第一預測值和所述更新後像素位置,確定所述當前子塊對應的第二預測值,將所述第二預測值確定為所述當前子塊的幀間預測值。
  2. 根據請求項1所述的方法,其中,所述確定所述當前塊的當前子塊的第一運動向量,包括: 解析所述位元流,獲取所述當前塊的仿射模式參數和預測參考模式; 當所述仿射模式參數指示使用仿射模式時,確定控制點模式和子塊尺寸參數; 根據所述預測參考模式、所述控制點模式以及所述子塊尺寸參數,確定所述第一運動向量。
  3. 根據請求項2所述的方法,其中,所述根據所述預測參考模式、所述控制點模式以及所述子塊尺寸參數,確定所述第一運動向量,包括: 根據所述預測參考模式確定控制點運動向量組; 根據所述控制點運動向量組、所述控制點模式以及所述子塊尺寸參數,確定所述第一運動向量。
  4. 根據請求項3所述的方法,其中,所述根據所述控制點運動向量組、所述控制點模式以及所述子塊尺寸參數,確定所述第一運動向量,包括: 根據所述控制點運動向量組、所述控制點模式以及所述當前塊的尺寸參數,確定差值變數; 基於所述預測模式參數和所述子塊尺寸參數,確定子塊位置; 利用所述差值變數和所述子塊位置,確定所述當前子塊的所述第一運動向量。
  5. 根據請求項2-4任一項所述的方法,所述方法還包括: 遍歷所述當前塊的每一個子塊,根據所述每一個子塊的第一運動向量構建運動向量集合。
  6. 根據請求項5所述的方法,其中,所述基於所述第一運動向量確定所述當前子塊的第一預測值,包括: 確定樣本矩陣;其中,所述樣本矩陣包括亮度樣本矩陣和色度樣本矩陣; 根據所述預測參考模式、所述子塊尺寸參數、所述樣本矩陣以及所述運動向量集合,確定所述第一預測值。
  7. 根據請求項6所述的方法,所述方法還包括: 判斷所述當前子塊是否滿足預設限制條件;其中,所述預設限制條件用於確定是否將所述目標像素位置限制在所述當前子塊內; 若滿足所述預設限制條件,則判斷所述目標像素位置是否屬於所述當前子塊。
  8. 根據請求項7所述的方法,其中,所述判斷所述當前子塊是否滿足預設限制條件,包括: 基於所述控制點運動向量組確定第一運動向量偏差; 若所述第一運動向量偏差大於獲得等於預設偏差閾值,則判定滿足所述預設限制條件; 若所述第一運動向量偏差小於所述預設偏差閾值,則判定不滿足所述預設限制條件。
  9. 根據請求項7所述的方法,其中,所述判斷所述當前子塊是否滿足預設限制條件,包括: 基於所述每一個子塊的第一運動向量確定第二運動向量偏差; 若所述第二運動向量偏差大於獲得等於預設偏差閾值,則判定滿足所述預設限制條件; 若所述第二運動向量偏差小於所述預設偏差閾值,則判定不滿足所述預設限制條件。
  10. 根據請求項7所述的方法,其中,所述判斷所述當前子塊是否滿足預設限制條件,包括: 確定所述當前子塊內的、預設像素位置與所述當前子塊之間的第三運動向量偏差; 若所述第三運動向量偏差大於獲得等於預設偏差閾值,則判定滿足所述預設限制條件; 若所述第三運動向量偏差小於所述預設偏差閾值,則判定不滿足所述預設限制條件。
  11. 根據請求項1所述的方法,其中,所述根據所述當前子塊對所述目標像素位置進行更新處理,獲得更新後像素位置,包括: 對所述當前子塊進行擴展處理,獲得擴展後子塊; 在所述擴展後子塊內確定所述目標像素位置對應的所述更新後像素位置。
  12. 根據請求項11所述的方法,其中,所述對所述當前子塊進行擴展處理,獲得擴展後子塊,包括: 利用所述當前子塊的全部邊界位置進行擴展處理,獲得所述擴展後子塊;或者, 利用所述當前子塊內的、所述目標像素位置對應的行和\或列的邊界位置進行擴展處理,獲得所述擴展後子塊。
  13. 根據請求項1所述的方法,其中,所述根據所述當前子塊對所述目標像素位置進行更新處理,獲得更新後像素位置,包括: 利用所述當前子塊內的、與所述目標像素位置相鄰的像素位置,替換所述目標像素位置,獲得所述更新後像素位置。
  14. 根據請求項8至10任一項所述的方法,其中, 根據所述當前塊的尺寸參數和\或所述子塊尺寸參數確定所述預設偏差閾值。
  15. 根據請求項14所述的方法,所述方法還包括: 當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前子塊的擴展子塊; 基於所述第一運動向量確定所述擴展子塊的第三預測值,並確定所述當前像素位置對應的所述目標像素位置; 若所述目標像素位置不屬於所述當前子塊,基於所述第三預測值和所述目標像素位置,確定所述第二預測值,將所述第二預測值確定為所述幀間預測值。
  16. 根據請求項15所述的方法,其中,所述判斷所述當前子塊是否滿足預設限制條件,包括: 若所述子塊尺寸參數為8x8,則判定滿足所述預設限制條件; 若所述子塊尺寸參數為4x4,則判定不滿足所述預設限制條件。
  17. 根據請求項15所述的方法,其中, 對所述擴展子塊使用n抽頭的插值濾波器,獲得所述第三預測值;其中,所述n為以下值中的任一者:6,5,4,3,2。
  18. 根據請求項15所述的方法,其中, 對所述當前子塊對應的參考像素進行擴展處理,獲得擴展後參考像素; 基於所述擴展後參考像素,使用所述當前子塊對應的插值濾波器,獲得所述第三預測值。
  19. 根據請求項15所述的方法,其中, 在所述當前塊中確定所述擴展子塊對應的相鄰像素位置; 根據所述相鄰像素位置的整像素值確定所述第三預測值。
  20. 根據請求項14所述的方法,其中,所述基於所述第一運動向量確定所述當前子塊的第一預測值,並確定當前像素位置對應的目標像素位置之後,所述方法還包括: 若所述目標像素位置不屬於所述當前子塊,則在所述當前塊中確定鄰近像素位置;其中,所述鄰近像素位置在所述當前塊中與所述目標像素位置相鄰; 基於所述第一預測值和所述鄰近像素位置,確定所述第二預測值,將所述第二預測值確定為所述幀間預測值。
  21. 根據請求項1所述的方法,其中,所述基於所述第一預測值和所述更新後像素位置,確定所述當前子塊對應的第二預測值,包括: 解析所述位元流,獲取PROF參數; 當所述PROF參數指示進行PROF處理時,基於所述第一預測值確定所述當前像素位置與所述更新後像素位置之間的像素水平梯度和像素垂直梯度; 確定所述更新後像素位置與所述當前子塊的第四運動向量偏差; 根據所述像素水平梯度、所述像素垂直梯度以及所述第四運動向量偏差,計算所述當前像素位置對應的偏差值; 基於所述第一預測值和所述偏差值,獲得所述第二預測值。
  22. 根據請求項1所述的方法,其中,所述基於所述第一預測值和所述更新後像素位置,確定所述當前子塊對應的第二預測值,包括: 解析所述位元流,獲取二次預測參數; 當所述二次預測參數指示使用二次預測時,確定所述更新後像素位置與所述當前子塊的第四運動向量偏差; 根據所述第四運動向量偏差確定二維濾波器的濾波係數;其中,所述二維濾波器用於按照預設形狀進行二次預測處理; 基於所述濾波係數和所述第一預測值,確定所述第二預測值,將所述第二預測值確定為所述幀間預測值。
  23. 根據請求項22所述的方法,其中,所述二維濾波器用於利用多個相鄰的、構成所述預設形狀的像素位置進行二次預測。
  24. 根據請求項23所述的方法,其中,所述預設形狀為矩形、菱形或任意一種對稱形狀。
  25. 根據請求項24所述的方法,其中, 若所述仿射模式參數的取值為1,則指示使用所述仿射模式; 若所述仿射模式參數的取值為0,或者,未解析得到所述仿射模式參數,則指示不使用所述仿射模式。
  26. 根據請求項2所述的方法,其中,所述確定子塊尺寸參數,包括: 解析所述位元流,獲得子塊尺寸標誌; 若所述子塊尺寸標誌的取值為1,則確定所述子塊尺寸參數為8x8; 若所述子塊尺寸標誌的取值為0,或者,未解析得到所述子塊尺寸標誌,則確定所述子塊尺寸參數為4x4。
  27. 根據請求項2所述的方法,其中,所述控制點模式包括4參數模式和6參數模式。
  28. 一種幀間預測方法,應用於編碼器,所述方法包括: 確定當前塊的預測模式參數; 當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前塊的當前子塊的第一運動向量;其中,所述當前塊包括多個子塊; 基於所述第一運動向量確定所述當前子塊的第一預測值,並確定當前像素位置對應的目標像素位置;其中,所述當前像素位置為所述當前子塊內的一個像素點的位置,所述目標像素位置為對所述當前像素位置的像素點進行二次預測或PROF處理的像素點的位置; 若所述目標像素位置不屬於所述當前子塊,則根據所述當前子塊對所述目標像素位置進行更新處理,獲得更新後像素位置; 基於所述第一預測值和所述更新後像素位置,確定所述當前子塊對應的第二預測值,將所述第二預測值確定為所述當前子塊的幀間預測值。
  29. 根據請求項28所述的方法,其中,所述確定所述當前塊的當前子塊的第一運動向量,包括: 確定所述當前塊的仿射模式參數和預測參考模式; 當所述仿射模式參數指示使用仿射模式時,確定控制點模式和子塊尺寸參數; 根據所述預測參考模式、所述控制點模式以及所述子塊尺寸參數,確定所述第一運動向量。
  30. 根據請求項29所述的方法,其中,所述根據所述預測參考模式、所述控制點模式以及所述子塊尺寸參數,確定所述第一運動向量,包括: 根據所述預測參考模式確定控制點運動向量組; 根據所述控制點運動向量組、所述控制點模式以及所述子塊尺寸參數,確定所述第一運動向量。
  31. 根據請求項30所述的方法,其中,所述根據所述控制點運動向量組、所述控制點模式以及所述子塊尺寸參數,確定所述第一運動向量,包括: 根據所述控制點運動向量組、所述控制點模式以及所述當前塊的尺寸參數,確定差值變數; 基於所述預測模式參數和所述子塊尺寸參數,確定子塊位置; 利用所述差值變數和所述子塊位置,確定所述當前子塊的所述第一運動向量。
  32. 根據請求項29至31任一項所述的方法,所述方法還包括: 遍歷所述當前塊的每一個子塊,根據所述每一個子塊的第一運動向量構建運動向量集合。
  33. 根據請求項32所述的方法,其中,所述基於所述第一運動向量確定所述當前子塊的第一預測值,包括: 確定樣本矩陣;其中,所述樣本矩陣包括亮度樣本矩陣和色度樣本矩陣; 根據所述預測參考模式、所述子塊尺寸參數、所述樣本矩陣以及所述運動向量集合,確定所述第一預測值。
  34. 根據請求項33所述的方法,所述方法還包括: 判斷所述當前子塊是否滿足預設限制條件;其中,所述預設限制條件用於確定是否將所述目標像素位置限制在所述當前子塊內; 若滿足所述預設限制條件,則判斷所述目標像素位置是否屬於所述當前子塊。
  35. 根據請求項34所述的方法,其中,所述判斷所述當前子塊是否滿足預設限制條件,包括: 基於所述控制點運動向量組確定第一運動向量偏差; 若所述第一運動向量偏差大於獲得等於預設偏差閾值,則判定滿足所述預設限制條件; 若所述第一運動向量偏差小於所述預設偏差閾值,則判定不滿足所述預設限制條件。
  36. 根據請求項34所述的方法,其中,所述判斷所述當前子塊是否滿足預設限制條件,包括: 基於所述每一個子塊的第一運動向量確定第二運動向量偏差; 若所述第二運動向量偏差大於獲得等於預設偏差閾值,則判定滿足所述預設限制條件; 若所述第二運動向量偏差小於所述預設偏差閾值,則判定不滿足所述預設限制條件。
  37. 根據請求項34所述的方法,其中,所述判斷所述當前子塊是否滿足預設限制條件,包括: 確定所述當前子塊內的、預設像素位置與所述當前子塊之間的第三運動向量偏差; 若所述第三運動向量偏差大於獲得等於預設偏差閾值,則判定滿足所述預設限制條件; 若所述第三運動向量偏差小於所述預設偏差閾值,則判定不滿足所述預設限制條件。
  38. 根據請求項28所述的方法,其中,所述根據所述當前子塊對所述目標像素位置進行更新處理,獲得更新後像素位置,包括: 對所述當前子塊進行擴展處理,獲得擴展後子塊; 在所述擴展後子塊內確定所述目標像素位置對應的所述更新後像素位置。
  39. 根據請求項38所述的方法,其中,所述對所述當前子塊進行擴展處理,獲得擴展後子塊,包括: 利用所述當前子塊的全部邊界位置進行擴展處理,獲得所述擴展後子塊;或者, 利用所述當前子塊內的、所述目標像素位置對應的行和\或列的邊界位置進行擴展處理,獲得所述擴展後子塊。
  40. 根據請求項28所述的方法,其中,所述根據所述當前子塊對所述目標像素位置進行更新處理,獲得更新後像素位置,包括: 利用所述當前子塊內的、與所述目標像素位置相鄰的像素位置,替換所述目標像素位置,獲得所述更新後像素位置。
  41. 根據請求項35至37任一項所述的方法,其中, 根據所述當前塊的尺寸參數和\或所述子塊尺寸參數確定所述預設偏差閾值。
  42. 根據請求項41所述的方法,所述方法還包括: 當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前子塊的擴展子塊; 基於所述第一運動向量確定所述擴展子塊的第三預測值,並確定所述當前像素位置對應的所述目標像素位置; 若所述目標像素位置不屬於所述當前子塊,基於所述第三預測值和所述目標像素位置,確定所述第二預測值,將所述第二預測值確定為所述幀間預測值。
  43. 根據請求項42所述的方法,其中,所述判斷所述當前子塊是否滿足預設限制條件,包括: 若所述子塊尺寸參數為8x8,則判定滿足所述預設限制條件; 若所述子塊尺寸參數為4x4,則判定不滿足所述預設限制條件。
  44. 根據請求項42所述的方法,其中, 對所述擴展子塊使用n抽頭的插值濾波器,獲得所述第三預測值;其中,n為以下值中的任一者:6,5,4,3,2。
  45. 根據請求項42所述的方法,其中, 對所述當前子塊對應的參考像素進行擴展處理,獲得擴展後參考像素; 基於所述擴展後參考像素,使用所述當前子塊對應的插值濾波器,獲得所述第三預測值。
  46. 根據請求項42所述的方法,其中, 在所述當前塊中確定所述擴展子塊對應的相鄰像素位置; 根據所述相鄰像素位置的整像素值確定所述第三預測值。
  47. 根據請求項41所述的方法,其中,所述基於所述第一運動向量確定所述當前子塊的第一預測值,並確定當前像素位置對應的目標像素位置之後,所述方法還包括: 若所述目標像素位置不屬於所述當前子塊,則在所述當前塊中確定鄰近像素位置;其中,所述鄰近像素位置在所述當前塊中與所述目標像素位置相鄰; 基於所述第一預測值和所述鄰近像素位置,確定所述第二預測值,將所述第二預測值確定為所述幀間預測值。
  48. 根據請求項28所述的方法,其中,所述基於所述第一預測值和所述更新後像素位置,確定所述當前子塊對應的第二預測值,包括: 確定PROF參數; 當所述PROF參數指示進行PROF處理時,基於所述第一預測值確定所述當前像素位置與所述更新後像素位置之間的像素水平梯度和像素垂直梯度; 確定所述更新後像素位置與所述當前子塊的第四運動向量偏差; 根據所述像素水平梯度、所述像素垂直梯度以及所述第四運動向量偏差,計算所述當前像素位置對應的偏差值; 基於所述第一預測值和所述偏差值,獲得所述第二預測值。
  49. 根據請求項28所述的方法,其中,所述基於所述第一預測值和所述更新後像素位置,確定所述當前子塊對應的第二預測值,包括: 確定二次預測參數; 當所述二次預測參數指示使用二次預測時,確定所述更新後像素位置與所述當前子塊的第四運動向量偏差; 根據所述第四運動向量偏差確定二維濾波器的濾波係數;其中,所述二維濾波器用於按照預設形狀進行二次預測處理; 基於所述濾波係數和所述第一預測值,確定所述第二預測值,將所述第二預測值確定為所述幀間預測值。
  50. 根據請求項49所述的方法,其中,所述二維濾波器用於利用多個相鄰的、構成所述預設形狀的像素位置進行二次預測。
  51. 根據請求項50所述的方法,其中,所述預設形狀為矩形、菱形或任意一種對稱形狀。
  52. 根據請求項51所述的方法,其中, 若所述仿射模式參數的取值為1,則指示使用所述仿射模式; 若所述仿射模式參數的取值為0,或者,未解析得到所述仿射模式參數,則指示不使用所述仿射模式。
  53. 根據請求項30所述的方法,其中, 若所述子塊尺寸參數為8x8,則將所述子塊尺寸標誌的設置為1,並將所述子塊尺寸標誌寫入位元流; 若所述子塊尺寸參數為4x4,則將所述子塊尺寸標誌的設置為0,並將所述子塊尺寸標誌寫入位元流。
  54. 根據請求項30所述的方法,其中,所述控制點模式包括4參數模式和6參數模式。
  55. 根據請求項29所述的方法,其中, 將所述預測模式參數、所述仿射模式參數、所述預測參考模式寫入位元流。
  56. 根據權利要48所述的方法,其中, 將所述PROF參數寫入位元流。
  57. 根據權利要49所述的方法,其中, 將所述二次預測參數寫入位元流。
  58. 一種解碼器,所述解碼器包括解析單元,第一確定單元,第一更新單元, 所述解析單元,用於解析位元流,獲取當前塊的預測模式參數; 所述第一確定單元,用於當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前塊的當前子塊的第一運動向量;其中,所述當前塊包括多個子塊;基於所述第一運動向量確定所述當前子塊的第一預測值,並確定當前像素位置對應的目標像素位置;其中,所述當前像素位置為所述當前子塊內的一個像素點的位置,所述目標像素位置為對所述當前像素位置的像素點進行二次預測或PROF處理的像素點的位置; 所述第一更新單元,用於若所述目標像素位置不屬於所述當前子塊,則根據所述當前子塊對所述目標像素位置進行更新處理,獲得更新後像素位置; 所述第一確定單元,還用於基於所述第一預測值和所述更新後像素位置,確定所述當前子塊對應的第二預測值,將所述第二預測值確定為所述當前子塊的幀間預測值。
  59. 一種解碼器,所述解碼器包括第一處理器、儲存有所述第一處理器可執行指令的第一記憶體,當所述指令被執行時,所述第一處理器執行時實現如請求項1-27任一項所述的方法。
  60. 一種編碼器,所述編碼器包括第二確定單元,第二更新單元, 所述第二確定單元,用於確定當前塊的預測模式參數;當所述預測模式參數指示使用幀間預測模式確定所述當前塊的幀間預測值時,確定所述當前塊的當前子塊的第一運動向量;其中,所述當前塊包括多個子塊;基於所述第一運動向量確定所述當前子塊的第一預測值,並確定當前像素位置對應的目標像素位置;其中,所述當前像素位置為所述當前子塊內的一個像素點的位置,所述目標像素位置為對所述當前像素位置的像素點進行二次預測或PROF處理的像素點的位置; 所述第二更新單元,用於若所述目標像素位置不屬於所述當前子塊,則根據所述當前子塊對所述目標像素位置進行更新處理,獲得更新後像素位置; 所述第二確定單元,還用於基於所述第一預測值和所述更新後像素位置,確定所述當前子塊對應的第二預測值,將所述第二預測值確定為所述當前子塊的幀間預測值。
  61. 一種編碼器,,所述編碼器包括第二處理器、儲存有所述第二處理器可執行指令的第二記憶體,當所述指令被執行時,所述第二處理器執行時實現如請求項28-57任一項所述的方法。
  62. 一種電腦儲存媒介,所述電腦儲存媒介儲存有電腦程式,所述電腦程式被第一處理器執行時實現如請求項1-27任一項所述的方法,或者,被第二處理器執行時實現如請求項28-57任一項所述的方法。
TW110126413A 2020-08-20 2021-07-19 幀間預測方法、編碼器、解碼器以及電腦儲存媒介 TW202209892A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN202010845318.5 2020-08-20
CN202010845318.5A CN114079784A (zh) 2020-08-20 2020-08-20 帧间预测方法、编码器、解码器以及计算机存储介质

Publications (1)

Publication Number Publication Date
TW202209892A true TW202209892A (zh) 2022-03-01

Family

ID=80282186

Family Applications (1)

Application Number Title Priority Date Filing Date
TW110126413A TW202209892A (zh) 2020-08-20 2021-07-19 幀間預測方法、編碼器、解碼器以及電腦儲存媒介

Country Status (5)

Country Link
CN (3) CN114079784A (zh)
MX (1) MX2023000107A (zh)
TW (1) TW202209892A (zh)
WO (1) WO2022037344A1 (zh)
ZA (1) ZA202300127B (zh)

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110832858B (zh) * 2017-07-03 2023-10-13 Vid拓展公司 用于视频编解码的设备、方法
CN110324627B (zh) * 2018-03-30 2022-04-05 杭州海康威视数字技术股份有限公司 色度的帧内预测方法及装置
CN110868602B (zh) * 2018-08-27 2024-04-12 华为技术有限公司 视频编码器、视频解码器及相应方法
JP7311589B2 (ja) * 2018-09-21 2023-07-19 ヴィド スケール インコーポレイテッド 双方向オプティカルフローのための複雑性低減およびビット幅制御
CN111405277B (zh) * 2019-01-02 2022-08-09 华为技术有限公司 帧间预测方法、装置以及相应的编码器和解码器
CN114666582A (zh) * 2019-02-07 2022-06-24 Vid拓展公司 用于利用光流的帧间预测细化的系统、装置和方法
CN111050168B (zh) * 2019-12-27 2021-07-13 浙江大华技术股份有限公司 仿射预测方法及其相关装置

Also Published As

Publication number Publication date
MX2023000107A (es) 2023-02-09
CN114979668A (zh) 2022-08-30
CN114079784A (zh) 2022-02-22
ZA202300127B (en) 2023-09-27
CN114503582A (zh) 2022-05-13
WO2022037344A1 (zh) 2022-02-24

Similar Documents

Publication Publication Date Title
JP7500691B2 (ja) ビデオ信号の符号化/復号化方法及び前記方法のための装置
CN112425169B (zh) 用于视频译码中帧内预测和帧间预测的插值滤波方法和装置
KR20180061069A (ko) 필터링을 위한 방법 및 장치
CA3025488A1 (en) Weighted angular prediction for intra coding
CN113382234B (zh) 视频信号编码/解码方法以及用于所述方法的设备
TW202315408A (zh) 以區塊為基礎之預測技術
JP2024069588A (ja) 映像信号符号化/復号化方法及びその装置
TWI504241B (zh) 影像編碼方法、裝置、影像解碼方法、裝置及其程式產品
CN114586366A (zh) 帧间预测方法、编码器、解码器及存储介质
JP2021502031A (ja) ビデオ符号化のためのインター予測機器及び方法の補間フィルタ
JP2023519874A (ja) 符号化・復号方法、装置及びそのデバイス
EP2092752A2 (en) Adaptive interpolation method and system for motion compensated predictive video coding and decoding
WO2022022278A1 (zh) 帧间预测方法、编码器、解码器以及计算机存储介质
WO2022061680A1 (zh) 帧间预测方法、编码器、解码器以及计算机存储介质
CN111083486A (zh) 一种确定编码单元的色度信息的方法和装置
TW202209892A (zh) 幀間預測方法、編碼器、解碼器以及電腦儲存媒介
TW202332274A (zh) 在4:4:4色度格式及單一樹狀結構情況下針對所有通道之基於矩陣的內部預測技術
TW202209893A (zh) 幀間預測方法、編碼器、解碼器以及電腦儲存媒介
JP7102663B2 (ja) ビデオコーディングのためのインター予測装置及び方法
CN116980596A (zh) 一种帧内预测方法、编码器、解码器及存储介质
WO2022077495A1 (zh) 帧间预测方法、编码器、解码器以及计算机存储介质
CN115280778A (zh) 帧间预测方法、编码器、解码器以及存储介质
WO2023051654A1 (en) Method, apparatus, and medium for video processing
US20220264148A1 (en) Sample Value Clipping on MIP Reduced Prediction
TW202335495A (zh) 視頻編解碼系統中多假設幀內模式的方法和裝置