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

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

Info

Publication number
TW202201958A
TW202201958A TW110118910A TW110118910A TW202201958A TW 202201958 A TW202201958 A TW 202201958A TW 110118910 A TW110118910 A TW 110118910A TW 110118910 A TW110118910 A TW 110118910A TW 202201958 A TW202201958 A TW 202201958A
Authority
TW
Taiwan
Prior art keywords
candidate position
current block
initial candidate
motion information
initial
Prior art date
Application number
TW110118910A
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 TW202201958A publication Critical patent/TW202201958A/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/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • H04N19/109Selection of coding mode or of prediction mode among a plurality of temporal predictive coding modes
    • 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/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/44Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
    • 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/513Processing of motion vectors
    • H04N19/517Processing of motion vectors by encoding
    • H04N19/52Processing of motion vectors by encoding by predictive encoding

Landscapes

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

Abstract

一種幀間預測方法、編碼器、解碼器以及電腦儲存媒介,該方法包括:解析位元流,獲取當前塊的預測模式參數;當預測模式參數指示使用預設的幀間預測模式確定當前塊的幀間預測值時,確定當前塊的至少一個初始候選位置;在至少一個初始候選位置超出當前塊的最大編碼單元LCU邊界的情況下,對至少一個初始候選位置進行調整,得到當前塊的至少一個目標候選位置;基於至少一個目標候選位置,確定當前塊的至少一個時域運動訊息;基於至少一個時域運動訊息,構建新的運動訊息候選清單;根據新的運動訊息候選清單,確定當前塊的幀間預測值。

Description

幀間預測方法、編碼器、解碼器以及電腦儲存媒介
本申請涉及影像編解碼技術領域,尤其涉及一種幀間預測方法、編碼器、解碼器以及電腦儲存媒介。
在影像編解碼領域,針對當前塊進行編解碼的過程,除了採用幀內預測方式外,還可以採用幀間預測方式。其中,幀間預測可以包括幀間幾何劃分預測模式(Geometric Partitioning Mode,GPM)和角度加權預測模式(Angular Weighted Prediction,AWP)等,透過將幀間的當前塊劃分為兩個非矩形的分區(或兩個塊)分別進行預測後再加權融合,能夠得到當前塊的預測值。
目前,在GPM或AWP的預測過程中,時域運動訊息是來自於已編碼完成的參考幀,這時候不再局限於當前塊左上角位置。針對右上、左下、右下等三個位置都處於當前塊的外部,如果某一個位置不可用,比如超出圖像邊界、片(patch)邊界等,那麼才會調整為當前塊的內部位置。然而針對當前塊的最大編碼單元(Largest Coding Unit,LCU),目前只暫存與當前LCU相同位置的一個LCU大小的部分的運動訊息。如果當前塊的右邊界正好與當前LCU的右邊界重合,或當前塊的下邊界正好與當前LCU的下邊界重合,那麼右上、左下、右下三個位置中至少有一個超出當前LCU的邊界,這時候如果某個或這幾個位置仍然在圖像內部或patch內部,表示仍然是可用的,此時硬體就需要增加額外的頻寬來獲取某個或這幾個位置的運動訊息。
本申請提出一種幀間預測方法、編碼器、解碼器以及電腦儲存媒介,可以使硬體實現時不增加額外的頻寬,同時還能夠保證編解碼性能。
本申請的技術方案是這樣實現的:
第一方面,本申請實施例提供了一種幀間預測方法,應用於解碼器,該方法包括:
解析位元流,獲取當前塊的預測模式參數;
當所述預測模式參數指示使用預設的幀間預測模式確定當前塊的幀間預測值時,確定所述當前塊的至少一個初始候選位置;
在所述至少一個初始候選位置超出所述當前塊的最大編碼單元LCU邊界的情況下,對所述至少一個初始候選位置進行調整,得到所述當前塊的至少一個目標候選位置;
基於所述至少一個目標候選位置,確定所述當前塊的至少一個時域運動訊息;
基於所述至少一個時域運動訊息,構建新的運動訊息候選清單;
根據所述新的運動訊息候選清單,確定所述當前塊的幀間預測值。
在一實施例中,所述確定所述當前塊的至少一個初始候選位置,包括:獲取所述當前塊的至少一個角初始候選位置,組成初始候選位置集合;其中,所述至少一個角初始候選位置包括下述至少一項:左上初始候選位置、右上初始候選位置、左下初始候選位置和右下初始候選位置;從所述初始候選位置集合中,確定所述當前塊的至少一個初始候選位置。
在一實施例中,所述左上初始候選位置至少包括下述其中之一:第一左上候選位置、第二左上候選位置、第三左上候選位置和第四左上候選位置;所述右上初始候選位置至少包括下述其中之一:第一右上候選位置、第二右上候選位置、第三右上候選位置和第四右上候選位置;所述左下初始候選位置至少包括下述其中之一:第一左下候選位置、第二左下候選位置、第三左下候選位置和第四左下候選位置;所述右下初始候選位置至少包括下述其中之一:第一右下候選位置、第二右下候選位置、第三右下候選位置和第四右下候選位置;其中,所述第一左上候選位置、所述第一右上候選位置、所述第一左下候選位置和所述第一右下候選位置表徵所述當前塊內部的四個角位置,所述第二左上候選位置、所述第三左上候選位置和所述第四左上候選位置表徵所述當前塊外部的左上角位置,所述第二右上候選位置、所述第三右上候選位置和所述第四右上候選位置表徵所述當前塊外部的右上角位置,所述第二左下候選位置、所述第三左下候選位置和所述第四左下候選位置表徵所述當前塊外部的左下角位置,所述第二右下候選位置、所述第三右下候選位置和所述第四右下候選位置表徵所述當前塊外部的右下角位置。
在一實施例中,所述預設的幀間預測模式包括:幾何劃分預測模式或角度加權預測模式;相應地,所述方法還包括:當所述預測模式參數指示使用所述預設的幀間預測模式確定當前塊的幀間預測值時,確定所述當前塊的兩個分區;其中,所述兩個分區包括第一分區和第二分區。
第二方面,本申請實施例提供了一種幀間預測方法,應用於編碼器,該方法包括:
確定當前塊的預測模式參數;
當所述預測模式參數指示使用預設的幀間預測模式確定當前塊的幀間預測值時,確定所述當前塊的至少一個初始候選位置;
在所述至少一個初始候選位置超出所述當前塊的最大編碼單元LCU邊界的情況下,對所述至少一個初始候選位置進行調整,得到所述當前塊的至少一個目標候選位置;
基於所述至少一個目標候選位置,確定所述當前塊的至少一個時域運動訊息;
基於所述至少一個時域運動訊息,構建新的運動訊息候選清單;
根據所述新的運動訊息候選清單,確定所述當前塊的幀間預測值。
在一實施例中,所述確定所述當前塊的至少一個初始候選位置,包括:獲取所述當前塊的至少一個角初始候選位置,組成初始候選位置集合;其中,所述至少一個角初始候選位置包括下述至少一項:左上初始候選位置、右上初始候選位置、左下初始候選位置和右下初始候選位置;從所述初始候選位置集合中,確定所述當前塊的至少一個初始候選位置。
在一實施例中,所述左上初始候選位置至少包括下述其中之一:第一左上候選位置、第二左上候選位置、第三左上候選位置和第四左上候選位置;所述右上初始候選位置至少包括下述其中之一:第一右上候選位置、第二右上候選位置、第三右上候選位置和第四右上候選位置;所述左下初始候選位置至少包括下述其中之一:第一左下候選位置、第二左下候選位置、第三左下候選位置和第四左下候選位置;所述右下初始候選位置至少包括下述其中之一:第一右下候選位置、第二右下候選位置、第三右下候選位置和第四右下候選位置;其中,所述第一左上候選位置、所述第一右上候選位置、所述第一左下候選位置和所述第一右下候選位置表徵所述當前塊內部的四個角位置,所述第二左上候選位置、所述第三左上候選位置和所述第四左上候選位置表徵所述當前塊外部的左上角位置,所述第二右上候選位置、所述第三右上候選位置和所述第四右上候選位置表徵所述當前塊外部的右上角位置,所述第二左下候選位置、所述第三左下候選位置和所述第四左下候選位置表徵所述當前塊外部的左下角位置,所述第二右下候選位置、所述第三右下候選位置和所述第四右下候選位置表徵所述當前塊外部的右下角位置。
在一實施例中,所述預設的幀間預測模式包括:幾何劃分預測模式或角度加權預測模式;相應地,所述方法還包括:當所述預測模式參數指示使用所述預設的幀間預測模式確定當前塊的幀間預測值時,確定所述當前塊的兩個分區;其中,所述兩個分區包括第一分區和第二分區。
第三方面,本申請實施例提供了一種解碼器,該解碼器包括解析單元、第一確定單元、第一調整單元、第一構建單元和第一預測單元;其中,
所述解析單元,配置為解析位元流,獲取當前塊的預測模式參數;
所述第一確定單元,配置為當所述預測模式參數指示使用預設的幀間預測模式確定當前塊的幀間預測值時,確定所述當前塊的至少一個初始候選位置;
所述第一調整單元,配置為在所述至少一個初始候選位置超出所述當前塊的最大編碼單元LCU邊界的情況下,對所述至少一個初始候選位置進行調整,得到所述當前塊的至少一個目標候選位置;
所述第一確定單元,還配置為基於所述至少一個目標候選位置,確定所述當前塊的至少一個時域運動訊息;
所述第一構建單元,配置為基於所述至少一個時域運動訊息,構建新的運動訊息候選清單;
所述第一預測單元,配置為根據所述新的運動訊息候選清單,確定所述當前塊的幀間預測值。
第四方面,本申請實施例提供了一種解碼器,該解碼器包括第一記憶體和第一處理器;其中,
所述第一記憶體,用於儲存能夠在所述第一處理器上運行的電腦程式;
所述第一處理器,用於在運行所述電腦程式時,執行如第一方面所述的方法。
第五方面,本申請實施例提供了一種編碼器,該編碼器包括第二確定單元、第二調整單元、第二構建單元和第二預測單元;其中,
所述第二確定單元,配置為確定當前塊的預測模式參數;及當所述預測模式參數指示使用預設的幀間預測模式確定當前塊的幀間預測值時,確定所述當前塊的至少一個初始候選位置;
所述第二調整單元,配置為在所述至少一個初始候選位置超出所述當前塊的最大編碼單元LCU邊界的情況下,對所述至少一個初始候選位置進行調整,得到所述當前塊的至少一個目標候選位置;
所述第二確定單元,還配置為基於所述至少一個目標候選位置,確定所述當前塊的至少一個時域運動訊息;
所述第二構建單元,配置為基於所述至少一個時域運動訊息,構建新的運動訊息候選清單;
所述第二預測單元,配置為根據所述新的運動訊息候選清單,確定所述當前塊的幀間預測值。
第六方面,本申請實施例提供了一種編碼器,該編碼器包括第二記憶體和第二處理器;其中,
所述第二記憶體,用於儲存能夠在所述第二處理器上運行的電腦程式;
所述第二處理器,用於在運行所述電腦程式時,執行如第二方面所述的方法。
第七方面,本申請實施例提供了一種電腦儲存媒介,該電腦儲存媒介儲存有電腦程式,所述電腦程式被第一處理器執行時實現如第一方面所述的方法、或者被第二處理器執行時實現如第二方面所述的方法。
本申請實施例所提供的一種幀間預測方法、編碼器、解碼器以及電腦儲存媒介,解析位元流,獲取當前塊的預測模式參數;當所述預測模式參數指示使用預設的幀間預測模式確定當前塊的幀間預測值時,確定所述當前塊的至少一個初始候選位置;在所述至少一個初始候選位置超出所述當前塊的LCU邊界的情況下,對所述至少一個初始候選位置進行調整,得到所述當前塊的至少一個目標候選位置;基於所述至少一個目標候選位置,確定所述當前塊的至少一個時域運動訊息;基於所述至少一個時域運動訊息,構建新的運動訊息候選清單;根據所述新的運動訊息候選清單,確定所述當前塊的幀間預測值。這樣,在確定出當前塊的至少一個初始候選位置之後,透過對至少一個初始候選位置進行調整以使得至少一個目標候選位置不會超出當前塊的LCU邊界,從而能夠使硬體實現時不增加額外的頻寬,同時還能夠保證編解碼性能。
下面將結合本申請實施例中的附圖,對本申請實施例中的技術方案進行清楚、完整地描述。可以理解的是,此處所描述的具體實施例僅僅用於解釋相關申請,而非對該申請的限定。另外還需要說明的是,為了便於描述,附圖中僅示出了與有關申請相關的部分。
在影像圖像中,一般採用第一圖像分量、第二圖像分量和第三圖像分量來表徵當前塊(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)、熵編碼(Entropy Coding)、迴路濾波(In Loop Filter)等模組;其中,預測模組可以包括幀內預測(intra prediction)和幀間預測(inter prediction),幀間預測可以包括運動估計(motion estimation)和運動補償(motion compensation)。由於影像圖像的一個幀內相鄰像素之間存在很強的相關性,在影像編解碼技術中使用幀內預測方式能夠消除相鄰像素之間的空間冗餘;但是由於影像圖像中的相鄰幀之間也存在著很強的相似性,在影像編解碼技術中使用幀間預測方式消除相鄰幀之間的時間冗餘,從而能夠提高編碼效率。下述本申請將以幀間預測進行詳細描述。
需要說明的是,運動訊息可以包括運動向量(Motion Vector,MV)訊息和參考幀訊息。具體地,對於使用幀間預測的當前塊而言,該當前塊所在的當前幀具有一個或多個參考幀,而當前塊可以是編碼單元或預測單元,可以使用一個包含一組運動向量和參考幀訊息的運動訊息指示到某一參考幀內一個與當前塊大小相同的像素區域,這裡稱之為參考塊,也可以使用一個包含兩組運動向量和參考幀訊息的運動訊息指示到某兩個可以相同也可以不同的參考幀內的兩個參考塊;然後運動補償可以根據運動訊息所指示的參考塊得到當前塊的幀間預測值。
應理解,P幀(Predictive Frame)是只能使用圖像播放順序(Picture Order Count,POC)在當前幀之前的參考幀進行預測的幀。這時候當前參考幀只有一個參考幀清單,用RefPicList0表示;且RefPicList0中都是POC在當前幀之前的參考幀。B幀(Bi-directional Interpolated Prediction Frame)早期是可以使用POC在當前幀之前的參考幀及POC在當前幀之後的參考幀進行預測的幀。B幀有兩個參考幀清單,分別用RefPicList0和RefPicList1表示;其中,RefPicList0中都是POC在當前幀之前的參考幀,RefPicList1中都是POC在當前幀之後的參考幀。對於當前塊而言,可以只參考RefPicList0中某一幀的參考塊,這種情況可稱為前向預測;或者也可以只參考RefPicList1中某一幀的參考塊,這種情況可稱為後向預測;或者還可以同時參考RefPicList0中某一幀的參考塊和RefPicList1中某一幀的參考塊,這種情況可稱為雙向預測。同時參考兩個參考塊的一種簡單方式是將兩個參考塊內每一個對應位置的像素進行平均以得到當前塊內每一像素的幀間預測值(或者可以稱為預測塊)。後期B幀不再限制RefPicList0中都是POC在當前幀之前的參考幀,RefPicList1中都是POC在當前幀之後的參考幀。換句話說,RefPicList0中也可以有POC在當前幀之後的參考幀,RefPicList1中也可以有POC在當前幀之前的參考幀,也即是指當前塊可以同時參考POC在當前幀之前的參考幀或者同時參考POC在當前幀之後的參考幀。但是當前塊為雙向預測時所使用的參考幀必須一個來自於RefPicList0,一個來自於RefPicList1;這種B幀也稱為廣義B幀。
由於隨機存取(Random Access,RA)配置的編解碼順序與POC順序不同,這樣B幀可以同時參考當前幀之前的訊息和當前幀之後的訊息,能夠明顯提高編碼性能。示例性地,RA的一種經典的圖像組(Group Of Pictures,GOP)結構如圖1所示,在圖1中,箭頭表示參考關係,由於I幀不需要參考幀,那麼在POC為0的I幀解碼後,將會解碼POC為4的P幀,而在解碼POC為4的P幀時可以參考POC為0的I幀。在POC為4的P幀解碼後,然後再解碼POC為2的B幀,而在解碼POC為2的B幀時可以參考POC為0的I幀和POC為4的P幀,等等。這樣,根據圖1可以得到,POC順序為{0  1  2  3  4  5  6  7  8}的情況下,其對應的解碼順序為{0  3  2  4  1  7  6  8  5}。
另外,低延遲(Low Delay,LD)配置的編解碼順序與POC順序是相同的,這時候當前幀只能參考當前幀之前的訊息。其中,Low Delay配置又分Low Delay P和Low Delay B。Low Delay P即傳統的Low Delay配置。其典型的結構是IPPP……,即先編解碼一個I幀,之後解碼的幀都是P幀。Low Delay B的典型結構是IBBB……,與Low Delay P的區別在於每個幀間幀都是B幀,即使用兩個參考幀清單,當前塊可以同時參考RefPicList0中的某一幀的參考塊和RefPicList1中的某一幀的參考塊。這裡,當前幀的一個參考幀清單最多可以有幾個參考幀,如2個、3個或4個等。當編碼或解碼某一個當前幀時,RefPicList0和RefPicList1內各有哪幾個參考幀是由預設配置或演算法決定的,但是同一個參考幀可以同時出現在RefPicList0和RefPicList1中,即編碼器或解碼器允許當前塊同時參考同一個參考幀中的兩個參考塊。
在本申請實施例中,編碼器或解碼器通常可以使用參考幀清單裡的索引值(用index表示)來對應參考幀。如果一個參考幀清單長度為4,那麼index有0、1、2、3等四個值。例如,如果當前幀的RefPicList0有POC為5,4,3,0的4個參考幀,那麼RefPicList0的index 0為POC 5的參考幀,RefPicList0的index 1為POC 4的參考幀,RefPicList0的index 2為POC 3的參考幀,RefPicList0的index 3為POC 0的參考幀。
目前的多功能影像編碼(Versatile Video Coding,VVC)標準中,預設的幀間預測模式可以為GPM預測模式。目前的數位音訊視訊編解碼技術標準(Audio Video coding Standard,AVS)中,預設的幀間預測模式可以為AWP預測模式。這兩種預測模式雖然名稱不同、具體的實現形式不同、但原理上是共通的,即這兩種預測模式都可以適用本申請實施例的幀間預測方法。
具體來講,對於GPM預測模式來說,如果使用GPM,那麼位元流中將會傳輸GPM下的預測模式參數,比如GPM具體的劃分模式;通常情況下,GPM包括有64種劃分模式。對於AWP預測模式來說,如果使用AWP,那麼位元流中將會傳輸AWP下的預測模式參數,比如AWP具體的劃分模式;通常情況下,AWP包括有56種劃分模式。
在預設的預測模式下,比如GPM和AWP均需要使用兩個單向運動訊息查找兩個參考塊。目前的實現方式是在編碼器側利用當前塊之前已編碼/已解碼部分的相關訊息構建一個運動訊息候選清單(也可以稱為單向運動訊息候選清單),從該運動訊息候選清單中選擇單向運動訊息,將這兩個單向運動訊息在運動訊息候選清單中的索引值(index)寫入位元流。在解碼器側採用同樣的方式,即利用當前塊之前已解碼部分的相關訊息構建一個運動訊息候選清單,這個運動訊息候選清單與編碼器側構建的候選清單一定是相同的。如此,從位元流中解析出兩個運動訊息的索引值,然後從運動訊息候選清單中查找出這兩個單向運動訊息即為當前塊需要使用的兩個單向運動訊息。
還需要說明的是,本申請實施例所描述的單向運動訊息可以包括有運動向量訊息,即(x,y)的值,以及對應的參考幀訊息,即參考幀清單及在參考幀清單中的參考索引值。一種表示方式是記錄兩個參考幀清單的參考索引值,其中一個參考幀清單對應的參考索引值有效,如0,1,2等;另一個參考幀清單對應的參考索引值為無效,即-1。參考索引值有效的參考幀清單即為當前塊的運動訊息所使用的參考幀清單,根據參考索引值可以從該參考幀清單中查找到對應的參考幀。每個參考幀清單都有一個對應的運動向量,有效的參考幀清單對應的運動向量是有效的,無效的參考幀清單對應的運動向量是無效的。解碼器可以透過單向運動訊息中的參考幀訊息找到所需的參考幀,根據當前塊的位置以及運動向量即(x,y)的值可以在參考幀中找到參考塊,進而確定出當前塊的幀間預測值。
實際應用中,運動訊息候選清單的構建方式不僅使用了空域運動訊息,還使用了時域運動訊息。其中,在VVC中構建合併候選清單(merge list)時,也用到了時域運動訊息和空域運動訊息。如圖2A所示,其示出了merge list構建時所使用到的相關位置的運動訊息,填充元素為1、2、3、4、5的候選位置表示空域相關位置,即當前幀內與當前塊相鄰的這些位置塊所使用的運動訊息;填充元素為6和7的候選位置表示時域相關位置,即某一個參考幀中對應位置所使用的運動訊息,這些運動訊息還可以是經過了縮放(scaling)。這裡,對於時域運動訊息來說,如果候選位置6可用,那麼可以使用6位置對應的運動訊息;否則,可以使用7位置對應的運動訊息。需要注意的是,三角劃分預測模式(Triangle Partition Mode,TPM)和GPM預測模式中關於運動訊息候選清單的構建中也涉及到了這幾個位置的使用;而且這裡塊的大小並非為實際大小,只是作為示例說明。
對於AWP預測模式來說,如圖2B所示,塊E為當前塊,而塊A、塊B、塊C、塊D、塊F、塊G均為塊E的相鄰塊。具體來講,塊E的相鄰塊A是樣本(x0 -1, y0 )所在的塊,塊E的相鄰塊B是樣本(x0 , y0 -1)所在的塊,塊E的相鄰塊C是樣本(x0 +1, y0 -1)所在的塊,塊E的相鄰塊D是樣本(x0 -1, y0 -1)所在的塊,塊E的相鄰塊F是樣本(x0 -1, y1 )所在的塊,塊E的相鄰塊G是樣本(x1 , y0 -1)所在的塊。其中,(x0 , y0 )是塊E左上角樣本在圖像中的座標,(x1 , y0 )是塊E右上角樣本在圖像中的座標,(x0 , y1 )是塊E左下角樣本在圖像中的座標。這裡,塊E和它的相鄰塊A、B、C、D、F和G之間的空間位置關係見圖2B。
需要指出,相鄰塊X(X可為A、B、C、D、F或G)“存在”指該塊應在圖像內並且該塊應與塊E屬於同一片;否則相鄰塊“不存在”。
如果塊“不存在”或者尚未解碼,則此塊“不可用”;否則此塊“可用”。如果圖像樣本所在的塊“不存在”或者此樣本尚未解碼,則此樣本“不可用”;否則此樣本“可用”。
還需要注意的是,片(patch)是圖像中的矩形區域,包含有若干最大編碼單元在圖像內的部分,片結構如圖3所示,比如A、B、C、D、E、F等片,片與片之間不應重疊。
進一步地,圖像劃分為最大編碼單元,最大編碼單元之間不應重疊,最大編碼單元左上角的樣本不應超出圖像邊界,最大編碼單元右下角的樣本可超出圖像邊界。這裡,最大編碼單元劃分為一個或多個編碼單元,由編碼樹決定,而編碼單元可劃分為一個或多個變換單元。
在構建運動訊息候選清單的過程中,目前提案中時域運動訊息由於來自於已編碼完成的參考幀,不再局限於當前塊左上角的位置。目前提案所提出的方式是“哪裡不夠補哪裡”,這裡設置有四個不同的位置,假定當前塊的左上角是(x, y),當前塊的寬度是width,高度是height,那麼這4個位置分別如下表1所示。需要注意的是,這裡所說的寬度和高度通常是指亮度分量的寬度(即l_width)和高度(即l_height),但不作具體限定。
表1
Pos 0 左上角 (x, y)
Pos 1 右上角 (x + width, y)
Pos 2 左下角 (x, y + height)
Pos 3 右下角 (x + width, y + height)
對AWP的每一個模式,小角在上述4個位置中的哪一個位置,時域運動訊息就可以利用哪一個位置確定。具體如下表2所示。在表2中,0即表示“Pos 0”,1即表示“Pos 1”,2即表示“Pos 2”,3即表示“Pos 3”。
表2
0 0 3 1 2 2 3 0
0 0 3 1 2 2 3 0
0 3 3 3 2 3 3 3
3 3 3 3 3 3 3 3
3 3 3 3 1 3 3 3
3 3 3 2 1 1 3 3
3 3 3 2 1 1 3 3
具體地,假定TmvpPos=AwpIdxToTmvpPos[AwpIdx],那麼
若TmvpPos等於0,則按方法一推導出時域雙向的運動訊息;
若TmvpPos等於1,則按方法二推導出時域雙向的運動訊息;
若TmvpPos等於2,則按方法三推導出時域雙向的運動訊息;
若TmvpPos等於3,則按方法四推導出時域雙向的運動訊息。
這裡,AwpIdxToTmvpPos對應的查閱資料表如表2所示。將匯出的時域雙向的運動訊息拆分為指向參考幀清單List0的單向運動訊息以及指向參考幀清單List1的單向運動訊息,先進行單向運動訊息查重操作,若不重複則放入AwpUniArray,直至長度為4或遍歷結束。
下面將以當前塊的左上角、右上角、左下角和右下角為例,分別提供方法一、方法二、方法三和方法四推導出時域運動訊息的具體步驟。
方法一,以當前塊的左上角為例,推導運動訊息的步驟如下:
第一步,
如果參考圖像佇列1中參考索引值為0的圖像中與當前預測單元的左上角亮度樣本位置對應的亮度樣本所在的時域運動訊息儲存單元儲存的參考幀索引為-1,則當前預測單元的L0參考索引和L1參考索引均等於0。以當前預測單元所在編碼單元的尺寸和位置作為當前預測單元的尺寸和位置,然後將所得到的L0運動向量預測值和L1運動向量預測值分別作為當前預測單元的L0運動向量MvE0和L1運動向量MvE1,並令當前預測單元的L0參考索引RefIdxL0和L1參考索引RefIdxL1均等於0,結束運動訊息匯出過程。
否則,
當前預測單元的L0參考索引和L1參考索引均等於0。當前預測單元的L0參考索引和L1參考索引對應的圖像的距離索引分別記為DistanceIndexL0和DistanceIndexL1;當前預測單元的L0參考索引和L1參考索引對應的圖像的BlockDistance分別記為BlockDistanceL0和BlockDistanceL1。
在參考圖像佇列1中參考索引為0的圖像中與當前預測單元的左上角亮度樣本位置對應的亮度樣本所在的時域運動訊息儲存單元的L0運動向量記為mvRef(mvRef_x,mvRef_y),該運動訊息儲存單元所在的圖像的距離索引記為DistanceIndexCol,該運動向量指向的參考單元所在的圖像的距離索引記為DistanceIndexRef。
第二步,
BlockDistanceRef = DistanceIndexCol - DistanceIndexRef
第三步,
令當前預測單元的L0參考索引RefIdxL0等於0,計算當前預測單元的L0運動向量mvE0(mvE0_x, mvE0_y):
mvE0_x = Clip3(-32768, 32767, Sign(mvRef_x * BlockDistanceL0 * BlockDistanceRef) * (((Abs(mvRef_x * BlockDistanceL0 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
mvE0_y = Clip3(-32768, 32767, Sign(mvRef_y * BlockDistanceL0 * BlockDistanceRef) * (((Abs(mvRef_y * BlockDistanceL0 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
這裡,mvX即為mvRef,MVX即為mvE0。
令當前預測單元的L1參考索引RefIdxL1等於0,計算當前預測單元的L1運動向量mvE1(mvE1_x, mvE1_y):
mvE1_x = Clip3(-32768, 32767, Sign(mvRef_x * BlockDistanceL1 * BlockDistanceRef) * (((Abs(mvRef_x * BlockDistanceL1 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
mvE1_y = Clip3(-32768, 32767, Sign(mvRef_y * BlockDistanceL1 * BlockDistanceRef) * (((Abs(mvRef_y * BlockDistanceL1 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
這裡,mvX即為mvRef,MVX即為mvE1。
第四步,interPredRefMode的值等於‘PRED_List01’。
方法二,以當前塊的右上角為例,推導運動訊息的步驟如下:
第一步,
假定當前預測單元的左上角亮度樣本位置為(x,y),亮度預測塊的寬度為l_width,亮度預測塊的高度為l_height;而所選當前預測單元的右上角亮度樣本位置為(x’,y’),x’ = x + l_width,y’ = y
如果上面推導出的(x’,y’)不可用,比如超出圖像邊界,patch邊界等,那麼x’ = x + l_width-1,y’ = y。
第二步,
如果參考圖像佇列1中參考索引值為0 的圖像中與所選當前預測單元的右上角亮度樣本位置對應的亮度樣本所在的時域運動訊息儲存單元儲存的參考幀索引為-1,則當前預測單元的L0參考索引和L1參考索引均等於0。以當前預測單元所在編碼單元的尺寸和位置作為當前預測單元的尺寸和位置,然後將所得到的L0運動向量預測值和L1運動向量預測值分別作為當前預測單元的L0運動向量MvE0和L1運動向量MvE1,並令當前預測單元的L0參考索引RefIdxL0和L1參考索引RefIdxL1均等於0,結束運動訊息匯出過程。
否則,
當前預測單元的L0參考索引和L1參考索引均等於0。當前預測單元的L0參考索引和L1參考索引對應的圖像的距離索引分別記為DistanceIndexL0和DistanceIndexL1;當前預測單元的L0參考索引和L1參考索引對應的圖像的BlockDistance分別記為BlockDistanceL0和BlockDistanceL1。
在參考圖像佇列1中參考索引為0的圖像中與所選當前預測單元的右上角亮度樣本位置對應的亮度樣本所在的時域運動訊息儲存單元的L0運動向量記為mvRef(mvRef_x,mvRef_y),該運動訊息儲存單元所在的圖像的距離索引記為DistanceIndexCol,該運動向量指向的參考單元所在的圖像的距離索引記為DistanceIndexRef。
第三步,
BlockDistanceRef = DistanceIndexCol - DistanceIndexRef
第四步,
令當前預測單元的L0參考索引RefIdxL0等於0,計算當前預測單元的L0運動向量mvE0(mvE0_x, mvE0_y):
mvE0_x = Clip3(-32768, 32767, Sign(mvRef_x * BlockDistanceL0 * BlockDistanceRef) * (((Abs(mvRef_x * BlockDistanceL0 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
mvE0_y = Clip3(-32768, 32767, Sign(mvRef_y * BlockDistanceL0 * BlockDistanceRef) * (((Abs(mvRef_y * BlockDistanceL0 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
這裡,mvX即為mvRef,MVX即為mvE0。
令當前預測單元的L1參考索引RefIdxL1等於0,計算當前預測單元的L1運動向量mvE1(mvE1_x, mvE1_y):
mvE1_x = Clip3(-32768, 32767, Sign(mvRef_x * BlockDistanceL1 * BlockDistanceRef) * (((Abs(mvRef_x * BlockDistanceL1 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
mvE1_y = Clip3(-32768, 32767, Sign(mvRef_y * BlockDistanceL1 * BlockDistanceRef) * (((Abs(mvRef_y * BlockDistanceL1 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
這裡,mvX即為mvRef,MVX即為mvE1。
第五步,interPredRefMode的值等於‘PRED_List01’。
方法三,以當前塊的左下角為例,推導運動訊息的步驟如下:
第一步,
假定當前預測單元的左上角亮度樣本位置為(x,y),亮度預測塊的寬度為l_width,亮度預測塊的高度為l_height;而所選當前預測單元的左下角亮度樣本位置為(x’,y’),x’ = x,y’ = y + l_height。
如果上面推導出的(x’,y’)不可用,比如超出圖像邊界、patch邊界等,那麼x’ = x, y’ = y + l_height-1。
第二步,
如果參考圖像佇列1中參考索引值為0 的圖像中與所選當前預測單元的左下角亮度樣本位置對應的亮度樣本所在的時域運動訊息儲存單元儲存的參考幀索引為-1,則當前預測單元的L0參考索引和L1參考索引均等於0。以當前預測單元所在編碼單元的尺寸和位置作為當前預測單元的尺寸和位置,然後將所得到的L0運動向量預測值和L1運動向量預測值分別作為當前預測單元的L0運動向量MvE0和L1運動向量MvE1,並令當前預測單元的L0參考索引RefIdxL0和L1參考索引RefIdxL1均等於0,結束運動訊息匯出過程。
否則,
當前預測單元的L0參考索引和L1參考索引均等於0。當前預測單元的L0參考索引和L1參考索引對應的圖像的距離索引分別記為DistanceIndexL0和DistanceIndexL1;當前預測單元的L0參考索引和L1參考索引對應的圖像的BlockDistance分別記為BlockDistanceL0和BlockDistanceL1。
在參考圖像佇列1中參考索引為0的圖像中與所選當前預測單元的左下角亮度樣本位置對應的亮度樣本所在的時域運動訊息儲存單元的L0運動向量記為mvRef(mvRef_x,mvRef_y),該運動訊息儲存單元所在的圖像的距離索引記為DistanceIndexCol,該運動向量指向的參考單元所在的圖像的距離索引記為DistanceIndexRef。
第三步,
BlockDistanceRef = DistanceIndexCol - DistanceIndexRef
第四步,
令當前預測單元的L0參考索引RefIdxL0等於0,計算當前預測單元的L0運動向量mvE0(mvE0_x, mvE0_y):
mvE0_x = Clip3(-32768, 32767, Sign(mvRef_x * BlockDistanceL0 * BlockDistanceRef) * (((Abs(mvRef_x * BlockDistanceL0 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
mvE0_y = Clip3(-32768, 32767, Sign(mvRef_y * BlockDistanceL0 * BlockDistanceRef) * (((Abs(mvRef_y * BlockDistanceL0 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
這裡,mvX即為mvRef,MVX即為mvE0。
令當前預測單元的L1參考索引RefIdxL1等於0,計算當前預測單元的L1運動向量mvE1(mvE1_x, mvE1_y):
mvE1_x = Clip3(-32768, 32767, Sign(mvRef_x * BlockDistanceL1 * BlockDistanceRef) * (((Abs(mvRef_x * BlockDistanceL1 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
mvE1_y = Clip3(-32768, 32767, Sign(mvRef_y * BlockDistanceL1 * BlockDistanceRef) * (((Abs(mvRef_y * BlockDistanceL1 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
這裡,mvX即為mvRef,MVX即為mvE1。
第五步,interPredRefMode的值等於‘PRED_List01’。
方法四,以當前塊的右下角為例,推導運動訊息的步驟如下:
第一步,
假定當前預測單元的左上角亮度樣本位置為(x,y),亮度預測塊的寬度為l_width,亮度預測塊的高度為l_height;而所選當前預測單元的右下角亮度樣本位置為(x’,y’),x’ = x + l_width,y’ = y + l_height。
如果上面推導出的(x’,y’)不可用,比如超出圖像邊界、patch邊界等,那麼如果x’不可用,x’ = x + l_width-1;如果y’不可用,y’ = y + l_height-1。
第二步,
如果參考圖像佇列1中參考索引值為0 的圖像中與所選當前預測單元的右下角亮度樣本位置對應的亮度樣本所在的時域運動訊息儲存單元儲存的參考幀索引為-1,則當前預測單元的L0參考索引和L1參考索引均等於0。以當前預測單元所在編碼單元的尺寸和位置作為當前預測單元的尺寸和位置,然後將所得到的L0運動向量預測值和L1運動向量預測值分別作為當前預測單元的L0運動向量MvE0和L1運動向量MvE1,並令當前預測單元的L0參考索引RefIdxL0和L1參考索引RefIdxL1均等於0,結束運動訊息匯出過程。
否則,
當前預測單元的L0參考索引和L1參考索引均等於0。當前預測單元的L0參考索引和L1參考索引對應的圖像的距離索引分別記為DistanceIndexL0和DistanceIndexL1;當前預測單元的L0參考索引和L1參考索引對應的圖像的BlockDistance分別記為BlockDistanceL0和BlockDistanceL1。
在參考圖像佇列1中參考索引為0的圖像中與所選當前預測單元的右下角亮度樣本位置對應的亮度樣本所在的時域運動訊息儲存單元的L0運動向量記為mvRef(mvRef_x,mvRef_y),該運動訊息儲存單元所在的圖像的距離索引記為DistanceIndexCol,該運動向量指向的參考單元所在的圖像的距離索引記為DistanceIndexRef。
第三步,
BlockDistanceRef = DistanceIndexCol - DistanceIndexRef
第四步,
令當前預測單元的L0參考索引RefIdxL0等於0,計算當前預測單元的L0運動向量mvE0(mvE0_x, mvE0_y):
mvE0_x = Clip3(-32768, 32767, Sign(mvRef_x * BlockDistanceL0 * BlockDistanceRef) * (((Abs(mvRef_x * BlockDistanceL0 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
mvE0_y = Clip3(-32768, 32767, Sign(mvRef_y * BlockDistanceL0 * BlockDistanceRef) * (((Abs(mvRef_y * BlockDistanceL0 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
這裡,mvX即為mvRef,MVX即為mvE0。
令當前預測單元的L1參考索引RefIdxL1等於0,計算當前預測單元的L1運動向量mvE1(mvE1_x, mvE1_y):
mvE1_x = Clip3(-32768, 32767, Sign(mvRef_x * BlockDistanceL1 * BlockDistanceRef) * (((Abs(mvRef_x * BlockDistanceL1 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
mvE1_y = Clip3(-32768, 32767, Sign(mvRef_y * BlockDistanceL1 * BlockDistanceRef) * (((Abs(mvRef_y * BlockDistanceL1 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
這裡,mvX即為mvRef,MVX即為mvE1。
第五步,interPredRefMode的值等於‘PRED_List01’。
上述的相關技術方案對壓縮性能提升明顯,但是由於目前設計的右上、左下、右下三個位置都在當前塊的外部,對右上、左下、右下三個位置中的某一個位置如果不可用,比如超出圖像邊界,patch邊界等才會修改為當前塊的內部位置。
然而,在確定匯出時域運動訊息所使用的位置時,由於它所使用的參考幀已經編碼完成,故在超出圖像邊界,patch邊界等的時候不可用。但是這樣對現有的硬體實現不太友好。因為硬體實現時並不會把所使用的匯出時域運動訊息的參考幀的所有的用於匯出時域運動訊息的運動訊息全部暫存,而是對當前塊的LCU,只暫存與當前LCU相同位置的一個LCU大小的部分的運動訊息。那麼在目前的相關技術方案中,如果當前塊的右邊界正好與當前LCU的右邊界重合,或者當前塊的下邊界正好與當前LCU的下邊界重合,那麼右上、左下、右下三個位置中至少有一個超出當前LCU的邊界,這時如果這個或這幾個位置仍然在圖像內部或patch內部,意味著它仍然是可用的,此時硬體就需要增加額外的頻寬去獲取這個或這幾個位置的運動訊息。
需要注意的是,用於匯出時域運動訊息的幀儲存匯出時域運動訊息的運動訊息時通常不會對每一個像素都保存一個運動訊息,而是按一定大小的塊共用一個運動訊息,如16×16個像素或8×8個像素或4×4個像素等共用一個運動訊息,這裡,16×16個像素或8×8個像素或4×4個像素通常預設指的是亮度分量的像素數。
基於此,本申請實施例提供了一種幀間預測方法,可應用於編碼器或解碼器。在得到當前塊的預測模式參數後,當所述預測模式參數指示使用預設的幀間預測模式確定當前塊的幀間預測值時,確定所述當前塊的至少一個初始候選位置;在所述至少一個初始候選位置超出所述當前塊的LCU邊界的情況下,對所述至少一個初始候選位置進行調整,得到所述當前塊的至少一個目標候選位置;基於所述至少一個目標候選位置,確定所述當前塊的至少一個時域運動訊息;基於所述至少一個時域運動訊息,構建新的運動訊息候選清單;根據所述新的運動訊息候選清單,確定所述當前塊的幀間預測值。這樣,在確定出當前塊的至少一個初始候選位置之後,透過對至少一個初始候選位置進行調整以使得至少一個目標候選位置不會超出當前塊的LCU邊界,從而能夠使硬體實現時不增加額外的頻寬,同時還能夠保證編解碼性能。
參見圖4A,其示出了本申請實施例提供的一種影像編碼系統方塊圖。如圖4A所示,該影像編碼系統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中。
參見圖4B,其示出了本申請實施例提供的本申請實施例還提供一種影像解碼系統方塊圖。如圖4B所示,該影像解碼系統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,也能夠改善影像解碼恢復品質,從而提高解碼性能。
下面將結合附圖和實施例對本申請的技術方案進一步詳細闡述。在進行詳細闡述之前,需要說明的是,說明書通篇中提到的“第一”、“第二”、“第三”等,僅僅是為了區分不同的特徵,不具有限定優先順序、先後順序、大小關係等功能。
本申請實施例提供一種幀間預測方法,該方法應用於影像解碼設備,即解碼器。該方法所實現的功能可以透過解碼器中的第一處理器調用電腦程式來實現,當然電腦程式可以保存在第一記憶體中,可見,該解碼器至少包括第一處理器和第一記憶體。
參見圖5,其示出了本申請實施例一種幀間預測方法的流程示意圖。如圖5所示,該方法可以包括:
S501:解析位元流,獲取當前塊的預測模式參數。
需要說明的是,待解碼圖像可以劃分為多個圖像塊,而當前待解碼的圖像塊可以稱為當前塊(可以用CU或PU表示),與當前塊相鄰的圖像塊可以稱為相鄰塊;即在待解碼圖像中,當前塊與相鄰塊之間具有相鄰關係。這裡,每個當前塊可以包括第一圖像分量、第二圖像分量和第三圖像分量,也即當前塊表示待解碼圖像中當前待進行第一圖像分量、第二圖像分量或者第三圖像分量預測的圖像塊。
其中,假定當前塊進行第一圖像分量預測,而且第一圖像分量為亮度分量,即待預測圖像分量為亮度分量,那麼當前塊也可以稱為亮度塊;或者,假定當前塊進行第二圖像分量預測,而且第二圖像分量為色度分量,即待預測圖像分量為色度分量,那麼當前塊也可以稱為色度塊。
還需要說明的是,預測模式參數指示了當前塊採用的預測模式以及與該預測模式相關的參數。其中,預測模式通常包括有幀間預測模式、傳統幀內預測模式和非傳統幀內預測模式等,而幀間預測模式又包括有普通幀間預測模式、GPM預測模式和AWP預測模式等。也就是說,編碼器會選取最優的預測模式對當前塊進行預編碼,在這過程中就可以確定出當前塊的預測模式,從而將相應的預測模式參數寫入位元流,由編碼器傳輸到解碼器。
這樣,在解碼器側,透過解析位元流就可以直接獲取到當前塊的預測模式參數,根據所獲取的預測模式參數用以確定當前塊是否使用預設的幀間預測模式,比如GPM預測模式或AWP預測模式。
S502:當所述預測模式參數指示使用預設的幀間預測模式確定當前塊的幀間預測值時,確定當前塊的至少一個初始候選位置。
需要說明的是,在解碼器解析位元流獲取到預測模式參數指示使用預設的幀間預測模式確定當前塊的幀間預測值的情況下,就可以採用本申請實施例所提供的幀間預測方法。
還需要說明的是,運動訊息可以包括運動向量訊息和參考幀訊息。具體地,對於使用幀間預測的當前塊而言,該當前塊所在的當前幀具有一個或多個參考幀,而當前塊可以是編碼單元或預測單元,可以使用一個包含一組運動向量和參考幀訊息的運動訊息指示到某一參考幀內一個與當前塊大小相同的像素區域,這裡稱之為參考塊,也可以使用一個包含兩組運動向量和參考幀訊息的運動訊息指示到某兩個可以相同也可以不同的參考幀內的兩個參考塊;然後運動補償可以根據運動訊息所指示的參考塊得到當前塊的幀間預測值。
在本申請實施例中,為了避免硬體實現時增加額外的頻寬,本申請實施例的目的就是使硬體實現時不增加額外的頻寬而且儘量保持其壓縮性能。這裡,使硬體實現時不增加額外地頻寬就需要使得確定時域運動訊息所使用的像素位置不超過當前LCU的邊界。需要注意的是,後面統一將確定時域運動訊息所使用的像素位置簡稱為位置。
在一些實施例中,對於S502來說,所述確定所述當前塊的至少一個候選位置,可以包括:
獲取所述當前塊的至少一個角初始候選位置,組成初始候選位置集合;其中,所述至少一個角初始候選位置包括下述至少一項:左上初始候選位置、右上初始候選位置、左下初始候選位置和右下初始候選位置;
從所述初始候選位置集合中,確定所述當前塊的至少一個初始候選位置。
進一步地,在一些實施例中,左上初始候選位置至少包括下述其中之一:第一左上候選位置、第二左上候選位置、第三左上候選位置和第四左上候選位置;
右上初始候選位置至少包括下述其中之一:第一右上候選位置、第二右上候選位置、第三右上候選位置和第四右上候選位置;
左下初始候選位置至少包括下述其中之一:第一左下候選位置、第二左下候選位置、第三左下候選位置和第四左下候選位置;
右下初始候選位置至少包括下述其中之一:第一右下候選位置、第二右下候選位置、第三右下候選位置和第四右下候選位置;
其中,所述第一左上候選位置、所述第一右上候選位置、所述第一左下候選位置和所述第一右下候選位置表徵所述當前塊內部的四個角位置,所述第二左上候選位置、所述第三左上候選位置和所述第四左上候選位置表徵所述當前塊外部的左上角位置,所述第二右上候選位置、所述第三右上候選位置和所述第四右上候選位置表徵所述當前塊外部的右上角位置,所述第二左下候選位置、所述第三左下候選位置和所述第四左下候選位置表徵所述當前塊外部的左下角位置,所述第二右下候選位置、所述第三右下候選位置和所述第四右下候選位置表徵所述當前塊外部的右下角位置。
需要說明的是,假定當前塊內部的左上角位置,也就是當前塊左上角第一個像素對應的像素位置為(x, y),當前塊的寬度為width,當前塊的高度為height。另外,這裡所說的寬度和高度通常是指亮度分量的寬度(即l_width)和高度(即l_height),但不作具體限定。
還需要說明的是,由於上面提到用於匯出時域運動訊息的參考幀儲存匯出時域運動訊息的運動訊息是按照塊保存運動訊息,那麼按照某一個像素位置確定的時域運動訊息和按照與該像素位置處在同一個儲存塊內其他像素位置確定的時域運動訊息是相同的,這樣在匯出過程中可能有一些中間計算將某一個像素位置透過一些計算得到某些統一格式的位置,這裡只要它們都處在同一個儲存塊內,那麼可以認為這些位置是相同的。
一種可能的實施方式中,以圖6A為例,當前塊可使用的左上角(即左上初始候選位置)、右上角(即右上初始候選位置)、左下角(即左下初始候選位置)和右下角(即右下初始候選位置)的候選位置可以有多種選擇。具體地,對於左上角(用灰色填充),可以使用第一左上候選位置、第二左上候選位置、第三左上候選位置和第四左上候選位置來表示,具體表示為(x, y)、(x-1, y)、(x, y-1)、(x-1, y-1)等四個位置。對右上角(用灰色填充),可以使用第一右上候選位置、第二右上候選位置、第三右上候選位置和第四右上候選位置來表示,具體表示為(x+width-1, y)、(x+width, y)、(x+width, y-1)、(x+width-1, y-1)等四個位置。對左下角(用灰色填充),可以使用第一左下候選位置、第二左下候選位置、第三左下候選位置和第四左下候選位置來表示,具體表示為(x, y+height-1)、(x, y+height)、(x-1, y+height)、(x-1, y+height -1)等四個位置。對右下角(用灰色填充),可以使用第一右下候選位置、第二右下候選位置、第三右下候選位置和第四右下候選位置來表示,具體表示為(x+width-1, y+height-1)、(x+width, y+height)、(x+width-1, y+height)、(x+width, y+height-1)等四個位置。
另一種可能的實施方式中,以圖6B為例,針對每一個當前塊,當前塊可以是CU或PU,這時候可以使用的4個初始候選位置如圖6B所示。這四個位置落在當前塊內部的四個角位置,具體地,這四個位置分別為:左上初始候選位置為(x, y),右上初始候選位置為(x+width-1, y),左下初始候選位置為(x, y+height-1),右下初始候選位置為(x+width-1,y+height-1)。
又一種可能的實施方式中,以圖6C為例,針對當前塊的四個位置,即左上角、右上角、左下角、右下角的初始(預設)位置可以各自初始選擇其中一個位置。具體地,如圖6C所示,這四個位置分別為:左上初始候選位置為(x, y)、右上初始候選位置為(x+width, y)、左下初始候選位置為(x, y+height)、右下初始候選位置為(x+width,y+height)。
再一種可能的實施方式中,以圖6D為例,針對當前塊的四個位置,即左上角、右上角、左下角、右下角的初始(預設)位置可以各自初始選擇其中一個位置。具體地,如圖6D所示,這四個位置分別為:左上初始候選位置為(x, y)、右上初始候選位置為(x+width, y-1)、左下初始候選位置為(x-1, y+height)、右下初始候選位置為(x+width,y+height)。
再一種可能的實施方式中,以圖6E為例,針對當前塊的四個位置,即左上角、右上角、左下角、右下角的初始(預設)位置可以各自初始選擇其中一個位置。具體地,如圖6E所示,這四個位置分別為:左上初始候選位置為(x-1, y-1)、右上初始候選位置為(x+width, y-1)、左下初始候選位置為(x-1, y+height)、右下初始候選位置為(x+width,y+height)。
這樣,以圖6A~圖6E為例,其提供了多種初始候選位置的情況。在得到初始候選位置之後,需要判斷該初始候選位置是否超出當前塊的LCU邊界,以進一步確定當初始候選位置落在LCU邊界之外時如何處理。
S503:在所述至少一個初始候選位置超出所述當前塊的最大編碼單元LCU邊界的情況下,對所述至少一個初始候選位置進行調整,得到所述當前塊的至少一個目標候選位置。
需要說明的是,為了避免硬體實現時增加額外的頻寬,這時候需要判斷用於確定時域運動訊息所使用的至少一個初始候選位置是否超過當前塊的LCU邊界。
在一些實施例中,對於S503來說,該方法還可以包括:在所述至少一個初始候選位置未超出所述當前塊的LCU邊界的情況下,將所述至少一個初始候選位置確定為所述當前塊的至少一個目標候選位置。
也就是說,如果某一初始候選位置超出LCU邊界,那麼這時候需要針對該初始候選位置進行調整,以使得調整後得到的目標候選位置未超出LCU邊界;如果某一初始候選位置未超出LCU邊界,那麼這時候就不需要針對該初始候選位置進行調整,可以直接將該初始候選位置確定為目標候選位置。
一種可能的實施方式中,可以選取當前塊內部的候選位置,這時候所使用的候選位置都不超出當前塊的LCU邊界,能夠將其直接確定為目標候選位置。因此,在一些實施例中,該方法還可以包括:
若所述至少一個初始候選位置包括所述第一左上候選位置,和/或,所述第一右上候選位置,和/或,所述第一左下候選位置,和/或,所述第一右下候選位置,則確定所述至少一個初始候選位置未超出LCU邊界,將所述至少一個初始候選位置確定為所述當前塊的至少一個目標候選位置。
需要說明的是,以圖6B為例,由於第一左上候選位置為(x, y),和/或,第一右上候選位置為(x+width-1, y),和/或,第一左下候選位置為(x, y+height-1),和/或,第一右下候選位置(x+width-1,y+height-1),這幾個初始候選位置處於當前塊內部,即這幾個初始候選位置都未超出當前塊的LCU邊界,那麼這時候就可以將這幾個初始候選位置確定為目標候選位置。
還需要說明的是,如果某一個位置落在LCU邊界外部時,那麼可以將這個位置調整到LCU邊界之內,即落在LCU內部;否則,如果一個位置在當前塊外部而落在LCU內部,這時候也不做調整。
另一種可能的實施方式中,針對某一個角,如果初始候選位置落在LCU邊界外部,那麼首選調整到這個角的LCU內部且當前塊外部的某一候選位置。
在一些實施例中,該方法還可以包括:
若所述至少一個初始候選位置包括其中一個角的初始候選位置,且所述其中一個角的初始候選位置超出LCU邊界,則從所述其中一個角對應的候選位置中選擇未超出所述LCU邊界的候選位置,將所述其中一個角的初始候選位置調整到所選擇的候選位置,以得到所述當前塊的一個目標候選位置。
進一步地,當其中一個角的初始候選位置為右下初始候選位置時,該方法還可以包括:
若所述至少一個初始候選位置包括所述右下初始候選位置,且所述右下初始候選位置超出LCU邊界,則從所述當前塊外部的右下角位置中選擇未超出LCU邊界的候選位置,將所述右下初始候選位置調整到所選擇的候選位置,以得到所述當前塊的一個目標候選位置。
進一步地,該方法還可以包括:若從所述當前塊外部的右下角位置中沒有選擇到未超出LCU邊界的候選位置,則將所述右下初始候選位置調整到所述當前塊內部的右下角位置,以得到所述當前塊的一個目標候選位置。
也就是說,以右下角為例,如果右下初始候選位置超出LCU邊界,那麼首先調整到右下角的LCU內部但是當前塊外部的某一候選位置;如果從當前塊外部的右下角位置中沒有選擇到未超出LCU邊界的候選位置,這時候就需要調整到當前塊內部的右下角位置,以確定出對應的目標候選位置。
具體地,以右下角為例,如果初始候選位置是(x+width,y+height),如果當前塊的右邊界和LCU的右邊界重合而當前塊的下邊界在LCU的內部,那麼把右下角調整到(x+width-1,y+height)。如果當前塊的右邊界在LCU的內部而當前塊的下邊界和LCU的下邊界重合,那麼把右下角調整到(x+width,y+height-1)。如果當前塊的右邊界和LCU的右邊界重合而當前塊的下邊界和LCU的下邊界重合,那麼把右下角調整到(x+width-1,y+height-1)。這裡,其餘的左上角、右上角、左下角,都可以按上述步驟進行調整。
針對該過程,文本描述如下。其中,該文本描述僅修改了方法一、方法二、方法三和方法四種的像素位置。
方法一,以當前塊的左上角為例,推導運動訊息的步驟如下:
第一步,
假定當前預測單元的左上角亮度樣本位置為(x,y),亮度預測塊的寬度為l_width,亮度預測塊的高度為l_height;而所選當前預測單元的左上角亮度樣本位置為(x’, y’),x’ = x – 1,y’ = y – 1。
如果x’小於當前預測單元所在的LCU的最左邊的亮度樣本位置的橫坐標x_lcu_left,或x’不可用,比如x’小於當前預測單元所在的圖像或patch的最左邊的亮度樣本位置的橫坐標x_boundary_left;那麼x’ = x;
如果y’小於當前預測單元所在的LCU的最上邊的亮度樣本位置的縱坐標y_lcu_top,或y’ 不可用,比如y’小於當前預測單元所在的圖像或patch的最上邊的亮度樣本位置的縱坐標y_boundary_top;那麼y’ = y。
方法二,以當前塊的右上角為例,推導運動訊息的步驟如下:
第一步,
假定當前預測單元的左上角亮度樣本位置為(x,y),亮度預測塊的寬度為l_width,亮度預測塊的高度為l_height;而所選當前預測單元的右上角亮度樣本位置為(x’,y’),x’ = x + l_width,y’ = y-1
如果x’大於當前預測單元所在的LCU的最右邊的亮度樣本位置的橫坐標x_lcu_right, 或x’不可用,比如x’大於當前預測單元所在的圖像或patch的最右邊的亮度樣本位置的橫坐標x_boundary_right;那麼x’ = x + l_width-1;
如果y’小於當前預測單元所在的LCU的最上邊的亮度樣本位置的縱坐標y_lcu_top, 或y’ 不可用,比如y’小於當前預測單元所在的圖像或patch的最上邊的亮度樣本位置的縱坐標y_boundary_top;那麼y’ = y。
方法三,以當前塊的左下角為例,推導運動訊息的步驟如下:
第一步,
假定當前預測單元的左上角亮度樣本位置為(x,y),亮度預測塊的寬度為l_width,亮度預測塊的高度為l_height;而所選當前預測單元的左下角亮度樣本位置為(x’,y’),x’ = x-1,y’ = y + l_height。
如果x’小於當前預測單元所在的LCU的最左邊的亮度樣本位置的橫坐標x_l, 或x’不可用,比如x’小於當前預測單元所在的圖像或patch的最左邊的亮度樣本位置的橫坐標x_boundary_left;那麼x’ = x;
如果y’大於當前預測單元所在的LCU的最下邊的亮度樣本位置的縱坐標y_b, 或y’不可用,比如y’大於當前預測單元所在的圖像或patch的最下邊的亮度樣本位置的縱坐標y_boundary_bottom;那麼,y’ = y + l_height - 1。
方法四,以當前塊的右下角為例,推導運動訊息的步驟如下:
第一步,
假定當前預測單元的左上角亮度樣本位置為(x,y),亮度預測塊的寬度為l_width,亮度預測塊的高度為l_height;而所選當前預測單元的右下角亮度樣本位置為(x’,y’),x’ = x + l_width,y’ = y + l_height。
如果x’大於當前預測單元所在的LCU的最右邊的亮度樣本位置的橫坐標x_lcu_right, 或x’不可用,比如x’大於當前預測單元所在的圖像或patch的最右邊的亮度樣本位置的橫坐標x_boundary_right;那麼x’ = x + l_width-1;
如果y’大於當前預測單元所在的LCU的最下邊的亮度樣本位置的縱坐標y_lcu_bottom, 或y’不可用,比如y’大於當前預測單元所在的圖像或patch的最下邊的亮度樣本位置的縱坐標y_boundary_top;那麼y’ = y + l_height - 1。
需要說明的是,由於在目前標準協議中的片(patch)總是矩形區域,所以上述對片邊界的處理是沒有問題的;但是如果後續patch不止限制為矩形區域,那麼對x’,y’不可用的判斷就要改成判斷(x’,y’)是否在patch的範圍內,這裡不再贅述。
具體地,如果當前預測單元,也就是當前塊不會超過圖像或片邊界,目前的標準協定中是這樣的情況。但是如果當前預測單元,也就是當前塊可能超過圖像或片邊界,那麼上面的文本描述中可寫為:
方法一,以當前塊的左上角為例,推導運動訊息的步驟如下:
第一步,
假定當前預測單元的左上角亮度樣本位置為(x,y),亮度預測塊的寬度為l_width,亮度預測塊的高度為l_height;而所選當前預測單元的左上角亮度樣本位置為(x’, y’),x’ = x – 1,y’ = y – 1。
如果x’小於當前預測單元所在的LCU的最左邊的亮度樣本位置的橫坐標x_lcu_left,那麼x’ = x;
如果x’不可用,比如x’小於當前預測單元所在的圖像或patch的最左邊的亮度樣本位置的橫坐標x_boundary_left,那麼x’ = x_boundary_left;
如果y’小於當前預測單元所在的LCU的最上邊的亮度樣本位置的縱坐標y_lcu_top,那麼y’ = y;
如果y’不可用,比如y’小於當前預測單元所在的圖像或patch的最上邊的亮度樣本位置的縱坐標y_boundary_top,那麼y’ = y_boundary_top。
方法二,以當前塊的右上角為例,推導運動訊息的步驟如下:
第一步,
假定當前預測單元的左上角亮度樣本位置為(x,y),亮度預測塊的寬度為l_width,亮度預測塊的高度為l_height;而所選當前預測單元的右上角亮度樣本位置為(x’, y’),x’ = x + l_width,y’ = y – 1。
如果x’大於當前預測單元所在的LCU的最右邊的亮度樣本位置的橫坐標x_lcu_right,那麼x’ = x + l_width-1;
如果x’不可用,比如x’大於當前預測單元所在的圖像或patch的最右邊的亮度樣本位置的橫坐標x_boundary_right,那麼x’ = x_boundary_right;
如果y’小於當前預測單元所在的LCU的最上邊的亮度樣本位置的縱坐標y_lcu_top,那麼y’ = y;
如果y’不可用,如y’小於當前預測單元所在的圖像或patch的最上邊的亮度樣本位置的縱坐標y_boundary_top,那麼y’ = y_boundary_top。
方法三,以當前塊的左下角為例,推導運動訊息的步驟如下:
第一步,
假定當前預測單元的左上角亮度樣本位置為(x,y),亮度預測塊的寬度為l_width,亮度預測塊的高度為l_height;而所選當前預測單元的右上角亮度樣本位置為(x’, y’),x’ = x - 1,y’ = y + l_height。
如果x’小於當前預測單元所在的LCU的最左邊的亮度樣本位置的橫坐標x_l,那麼x’ = x;
如果x’不可用,比如x’小於當前預測單元所在的圖像或patch的最左邊的亮度樣本位置的橫坐標x_boundary_left,那麼x’ = x_boundary_left;
如果y’大於當前預測單元所在的LCU的最下邊的亮度樣本位置的縱坐標y_b,那麼y’ = y + l_height – 1;
如果y’不可用,比如y’大於當前預測單元所在的圖像或patch的最下邊的亮度樣本位置的縱坐標y_boundary_bottom,那麼y’ = y_boundary_bottom。
方法四,以當前塊的右下角為例,推導運動訊息的步驟如下:
第一步,
假定當前預測單元的左上角亮度樣本位置為(x,y),亮度預測塊的寬度為l_width,亮度預測塊的高度為l_height;而所選當前預測單元的右下角亮度樣本位置為(x’, y’),x’ = x + l_width,y’ = y + l_height。
如果x’大於當前預測單元所在的LCU的最右邊的亮度樣本位置的橫坐標x_lcu_right,那麼x’ = x + l_width-1;
如果x’不可用,比如x’大於當前預測單元所在的圖像或patch的最右邊的亮度樣本位置的橫坐標x_boundary_right,那麼x’ = x_boundary_right;
如果y’大於當前預測單元所在的LCU的最下邊的亮度樣本位置的縱坐標y_lcu_bottom,那麼y’ = y + l_height – 1;
如果y’不可用,比如y’大於當前預測單元所在的圖像或patch的最下邊的亮度樣本位置的縱坐標y_boundary_top,那麼y’ = y_boundary_top。
還需要注意的是,左上角亮度樣本位置(x, y)可能怎麼都不會超過圖像或片邊界;也就是說,上述的文本描述只是為了改動保持格式上的一致。
又一種可能的實施方式中,針對某一個角,如果初始候選位置落在LCU邊界外部,那麼可以調整到另外一個初始位置落在LCU內部的角的候選位置。
在一些實施例中,該方法還可以包括:
若所述至少一個初始候選位置包括其中一個角的初始候選位置,且所述其中一個角的初始候選位置超出LCU邊界,則從除所述其中一個角之外剩餘角對應的候選位置中選擇未超出所述LCU邊界的候選位置,將所述其中一個角的初始候選位置調整到所選擇的候選位置,以得到所述當前塊的一個目標候選位置。
進一步地,當其中一個角的初始候選位置為右下初始候選位置時,該方法還可以包括:
若所述至少一個初始候選位置包括所述右下初始候選位置,且所述右下初始候選位置超出LCU邊界,則在所述右上初始候選位置未超出LCU邊界的情況下,將所述右下初始候選位置調整到所述右上初始候選位置,以得到所述當前塊的一個目標候選位置。
也就是說,針對不同的劃分模式,可以具有不同的初始候選位置。以劃分模式54為例(從0開始),如果匯出時域運動訊息應該使用右下角的初始候選位置,即(x+width, y+height);但是如果當前塊的右邊界在LCU內部而當前塊的下邊界和LCU的下邊界重合,那麼該初始候選位置(x+width, y+height)超出LCU邊界,這時候如果右上角的候選位置在LCU內部,可以使用右上角的候選位置。其中,右上角的候選位置可能是(x+width, y)、(x+width-1, y)或者(x+width, y-1)。
再一種可能的實施方式中,針對某一個角,如果初始候選位置落在LCU邊界外部,且這個角只能調整到當前塊內部,那麼可以調整到另外一個初始位置落在LCU內部的角的候選位置。
在一些實施例中,該方法還可以包括:
若所述至少一個初始候選位置包括其中一個角的初始候選位置,且所述其中一個角的初始候選位置超出LCU邊界,且所述其中一個角對應的候選位置中僅所述當前塊內部的候選位置未超出LCU邊界,則從除所述其中一個角之外剩餘角對應的候選位置中選擇未超出所述LCU邊界的候選位置,將所述其中一個角的初始候選位置調整到所選擇的候選位置,以得到所述當前塊的一個目標候選位置。
進一步地,當其中一個角的初始候選位置為右下初始候選位置時,該方法還可以包括:
若所述至少一個初始候選位置包括所述右下初始候選位置,且所述右下初始候選位置超出LCU邊界,且所述當前塊內部和外部的右下角位置中僅所述第一右下候選位置未超出LCU邊界,則在所述右上初始候選位置未超出LCU邊界的情況下,將所述右下初始候選位置調整到所述右上初始候選位置,以得到所述當前塊的一個目標候選位置。
也就是說,針對不同的劃分模式,可以具有不同的初始候選位置。以劃分模式54為例(從0開始),如果匯出時域運動訊息應該使用右下角的初始候選位置,即(x+width, y+height);但是如果當前塊的右邊界與LCU的右邊界重合且當前塊的下邊界和LCU的下邊界重合,那麼該初始候選位置(x+width, y+height)超出LCU邊界,且右下角處的(x+width-1, y+height)和(x+width, y+height-1)也超出LCU邊界,而僅(x+width-1, y+height-1)在當前塊內部而沒有超出LCU邊界,這時候如果右上角的候選位置在LCU內部,可以使用右上角的候選位置。其中,右上角的候選位置可能是(x+width, y)、(x+width-1, y)或者(x+width, y-1)。
再一種可能的實施方式中,還可以是對每一個劃分模式設置這至少一個初始候選位置的優先順序排序,然後依次檢查是否超出當前塊的LCU邊界。
在一些實施例中,該方法還可以包括:
針對不同的劃分模式,根據預設優先順序設置所述初始候選位置集合中不同初始候選位置對應的優先順序;
按照所述預設優先順序選取一個初始候選位置,並判斷所選取的初始候選位置是否超出LCU邊界;
若所選取的初始候選位置超出LCU邊界,則返回執行所述按照所述預設優先順序選取一個初始候選位置的步驟;
若所選取的初始候選位置未超出LCU邊界,則將所選取的初始候選位置確定為所述當前塊的一個目標候選位置。
也就是說,針對不同的劃分模式,可以設置不同的預設優先順序。仍以劃分模式54為例(從0開始),針對劃分模式54,可以設置左上角、右上角、左下角和右下角等四個初始候選位置的優先順序排序,比如設置的初始候選位置排序為3、1、2、0,即優先選取右下角,再選取右上角,然後再選取左下角,最後選取左上角;按照上述方式依次進行判斷。
再一種可能的實施方式中,還可以是對每一個劃分模式設置這至少一個初始候選位置的固定排序順序,然後依次檢查是否超出當前塊的LCU邊界。
在一些實施例中,該方法還可以包括:
針對不同的劃分模式,根據預設順序對所述初始候選位置集合中不同初始候選位置進行排序;
按照所述預設順序選取一個初始候選位置,並判斷所選取的初始候選位置是否超出LCU邊界;
若所選取的初始候選位置超出LCU邊界,則返回執行所述按照所述預設順序選取一個初始候選位置的步驟;
若所選取的初始候選位置未超出LCU邊界,則將所選取的初始候選位置確定為所述當前塊的一個目標候選位置。
也就是說,還可以是按照一個固定的預設順序排序,比如按照0,1,2,3,0,1,……的順序,如果某一個劃分模式首先選取3,即右下角,但是右下角不能落在LCU內部(即超出LCU邊界)但位於當前塊外部;那麼選取0再次嘗試,即左上角,如果0也不滿足,那麼選取1再次嘗試,即右上角,以此類推,直至4個初始候選位置都依次判斷過。
進一步地,如果四個初始候選位置都不能落在LCU內部而位於當前塊外部,那麼還可以設置位置排序(比如預設優先順序或者預設順序)的第一個角的當前塊內部位置,以將其確定為目標候選位置;或者,如果四個初始候選位置都不能落在LCU內部而位於當前塊外部,另一種方式是選擇一個預設位置,比如當前塊內部的左上角位置,以將其確定為目標候選位置。
這裡,計算(x,y)和(x’,y’)是不是在同一個LCU內部可以簡單地判斷。具體地,如果x除以LCU的亮度樣本的寬度等於x’除以LCU的亮度樣本的寬度,且y除以LCU的亮度樣本的高度等於y’除以LCU的亮度樣本的高度,那麼(x,y)和(x’,y’)位於同一個LCU內部;否則,(x,y)和(x’,y’)不位於同一個LCU內部。
S504:基於所述至少一個目標候選位置,確定所述當前塊的至少一個時域運動訊息。
需要說明的是,在得到至少一個目標候選位置之後,可以根據所得到的目標候選位置來確定時域運動訊息,具體是將對應參考幀中的時域位置所使用的運動訊息作為該目標候選位置的時域運動訊息。這裡,當前塊所屬的幀可以稱為當前幀,當前幀中的目標候選位置與參考幀中的時域位置雖然所屬的幀不同,但是位置是相同的。
在一些實施例中,對於S504來說,所述基於所述至少一個目標候選位置,確定所述當前塊的至少一個時域運動訊息,可以包括:
確定所述至少一個目標候選位置中每一目標候選位置對應的參考幀訊息;
針對每一目標候選位置,在對應的參考幀訊息中確定與所述目標候選位置關聯的時域位置,並將所述時域位置使用的運動訊息確定為所述目標候選位置對應的時域運動訊息;
基於所述至少一個目標候選位置,對應得到至少一個時域運動訊息。
也就是說,時域運動訊息是根據某一個參考幀訊息中對應位置所使用的運動訊息來確定的。而且針對不同的目標候選位置,可以得到不同的時域運動訊息。
示例性地,方法一,以當前塊的左上角為例,推導運動訊息的步驟如下:
第一步,
假定當前預測單元的左上角亮度樣本位置為(x,y),亮度預測塊的寬度為l_width,亮度預測塊的高度為l_height;而所選當前預測單元的左上角亮度樣本位置為(x’, y’),x’ = x – 1,y’ = y – 1。
如果x’小於當前預測單元所在的LCU的最左邊的亮度樣本位置的橫坐標x_lcu_left,或x’不可用,比如x’小於當前預測單元所在的圖像或patch的最左邊的亮度樣本位置的橫坐標x_boundary_left;那麼x’ = x;
如果y’小於當前預測單元所在的LCU的最上邊的亮度樣本位置的縱坐標y_lcu_top,或y’ 不可用,比如y’小於當前預測單元所在的圖像或patch的最上邊的亮度樣本位置的縱坐標y_boundary_top;那麼y’ = y。
第二步,
如果參考圖像佇列1中參考索引值為0的圖像中與當前預測單元的左上角亮度樣本位置對應的亮度樣本所在的時域運動訊息儲存單元儲存的參考幀索引為-1,則當前預測單元的L0參考索引和L1參考索引均等於0。以當前預測單元所在編碼單元的尺寸和位置作為當前預測單元的尺寸和位置,然後將所得到的L0運動向量預測值和L1運動向量預測值分別作為當前預測單元的L0運動向量MvE0和L1運動向量MvE1,並令當前預測單元的L0參考索引RefIdxL0和L1參考索引RefIdxL1均等於0,結束運動訊息匯出過程。
否則,
當前預測單元的L0參考索引和L1參考索引均等於0。當前預測單元的L0參考索引和L1參考索引對應的圖像的距離索引分別記為DistanceIndexL0和DistanceIndexL1;當前預測單元的L0參考索引和L1參考索引對應的圖像的BlockDistance分別記為BlockDistanceL0和BlockDistanceL1。
在參考圖像佇列1中參考索引為0的圖像中與當前預測單元的左上角亮度樣本位置對應的亮度樣本所在的時域運動訊息儲存單元的L0運動向量記為mvRef(mvRef_x,mvRef_y),該運動訊息儲存單元所在的圖像的距離索引記為DistanceIndexCol,該運動向量指向的參考單元所在的圖像的距離索引記為DistanceIndexRef。
第三步,
BlockDistanceRef = DistanceIndexCol - DistanceIndexRef
第四步,
令當前預測單元的L0參考索引RefIdxL0等於0,計算當前預測單元的L0運動向量mvE0(mvE0_x, mvE0_y):
mvE0_x = Clip3(-32768, 32767, Sign(mvRef_x * BlockDistanceL0 * BlockDistanceRef) * (((Abs(mvRef_x * BlockDistanceL0 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
mvE0_y = Clip3(-32768, 32767, Sign(mvRef_y * BlockDistanceL0 * BlockDistanceRef) * (((Abs(mvRef_y * BlockDistanceL0 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
這裡,mvX即為mvRef,MVX即為mvE0。
令當前預測單元的L1參考索引RefIdxL1等於0,計算當前預測單元的L1運動向量mvE1(mvE1_x, mvE1_y):
mvE1_x = Clip3(-32768, 32767, Sign(mvRef_x * BlockDistanceL1 * BlockDistanceRef) * (((Abs(mvRef_x * BlockDistanceL1 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
mvE1_y = Clip3(-32768, 32767, Sign(mvRef_y * BlockDistanceL1 * BlockDistanceRef) * (((Abs(mvRef_y * BlockDistanceL1 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
這裡,mvX即為mvRef,MVX即為mvE1。
第五步,interPredRefMode的值等於‘PRED_List01’。
方法二,以當前塊的右上角為例,推導運動訊息的步驟如下:
第一步,
假定當前預測單元的左上角亮度樣本位置為(x,y),亮度預測塊的寬度為l_width,亮度預測塊的高度為l_height;而所選當前預測單元的右上角亮度樣本位置為(x’,y’),x’ = x + l_width,y’ = y-1
如果x’大於當前預測單元所在的LCU的最右邊的亮度樣本位置的橫坐標x_lcu_right, 或x’不可用,比如x’大於當前預測單元所在的圖像或patch的最右邊的亮度樣本位置的橫坐標x_boundary_right;那麼x’ = x + l_width-1;
如果y’小於當前預測單元所在的LCU的最上邊的亮度樣本位置的縱坐標y_lcu_top, 或y’ 不可用,比如y’小於當前預測單元所在的圖像或patch的最上邊的亮度樣本位置的縱坐標y_boundary_top;那麼y’ = y。
第二步,
如果參考圖像佇列1中參考索引值為0 的圖像中與所選當前預測單元的右上角亮度樣本位置對應的亮度樣本所在的時域運動訊息儲存單元儲存的參考幀索引為-1,則當前預測單元的L0參考索引和L1參考索引均等於0。以當前預測單元所在編碼單元的尺寸和位置作為當前預測單元的尺寸和位置,然後將所得到的L0運動向量預測值和L1運動向量預測值分別作為當前預測單元的L0運動向量MvE0和L1運動向量MvE1,並令當前預測單元的L0參考索引RefIdxL0和L1參考索引RefIdxL1均等於0,結束運動訊息匯出過程。
否則,
當前預測單元的L0參考索引和L1參考索引均等於0。當前預測單元的L0參考索引和L1參考索引對應的圖像的距離索引分別記為DistanceIndexL0和DistanceIndexL1;當前預測單元的L0參考索引和L1參考索引對應的圖像的BlockDistance分別記為BlockDistanceL0和BlockDistanceL1。
在參考圖像佇列1中參考索引為0的圖像中與所選當前預測單元的右上角亮度樣本位置對應的亮度樣本所在的時域運動訊息儲存單元的L0運動向量記為mvRef(mvRef_x,mvRef_y),該運動訊息儲存單元所在的圖像的距離索引記為DistanceIndexCol,該運動向量指向的參考單元所在的圖像的距離索引記為DistanceIndexRef。
第三步,
BlockDistanceRef = DistanceIndexCol - DistanceIndexRef
第四步,
令當前預測單元的L0參考索引RefIdxL0等於0,計算當前預測單元的L0運動向量mvE0(mvE0_x, mvE0_y):
mvE0_x = Clip3(-32768, 32767, Sign(mvRef_x * BlockDistanceL0 * BlockDistanceRef) * (((Abs(mvRef_x * BlockDistanceL0 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
mvE0_y = Clip3(-32768, 32767, Sign(mvRef_y * BlockDistanceL0 * BlockDistanceRef) * (((Abs(mvRef_y * BlockDistanceL0 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
這裡,mvX即為mvRef,MVX即為mvE0。
令當前預測單元的L1參考索引RefIdxL1等於0,計算當前預測單元的L1運動向量mvE1(mvE1_x, mvE1_y):
mvE1_x = Clip3(-32768, 32767, Sign(mvRef_x * BlockDistanceL1 * BlockDistanceRef) * (((Abs(mvRef_x * BlockDistanceL1 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
mvE1_y = Clip3(-32768, 32767, Sign(mvRef_y * BlockDistanceL1 * BlockDistanceRef) * (((Abs(mvRef_y * BlockDistanceL1 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
這裡,mvX即為mvRef,MVX即為mvE1。
第五步,interPredRefMode的值等於‘PRED_List01’。
方法三,以當前塊的左下角為例,推導運動訊息的步驟如下:
第一步,
假定當前預測單元的左上角亮度樣本位置為(x,y),亮度預測塊的寬度為l_width,亮度預測塊的高度為l_height;而所選當前預測單元的左下角亮度樣本位置為(x’,y’),x’ = x-1,y’ = y + l_height。
如果x’小於當前預測單元所在的LCU的最左邊的亮度樣本位置的橫坐標x_l, 或x’不可用,比如x’小於當前預測單元所在的圖像或patch的最左邊的亮度樣本位置的橫坐標x_boundary_left;那麼x’ = x;
如果y’大於當前預測單元所在的LCU的最下邊的亮度樣本位置的縱坐標y_b, 或y’不可用,比如y’大於當前預測單元所在的圖像或patch的最下邊的亮度樣本位置的縱坐標y_boundary_bottom;那麼,y’ = y + l_height - 1。
第二步,
如果參考圖像佇列1中參考索引值為0 的圖像中與所選當前預測單元的左下角亮度樣本位置對應的亮度樣本所在的時域運動訊息儲存單元儲存的參考幀索引為-1,則當前預測單元的L0參考索引和L1參考索引均等於0。以當前預測單元所在編碼單元的尺寸和位置作為當前預測單元的尺寸和位置,然後將所得到的L0運動向量預測值和L1運動向量預測值分別作為當前預測單元的L0運動向量MvE0和L1運動向量MvE1,並令當前預測單元的L0參考索引RefIdxL0和L1參考索引RefIdxL1均等於0,結束運動訊息匯出過程。
否則,
當前預測單元的L0參考索引和L1參考索引均等於0。當前預測單元的L0參考索引和L1參考索引對應的圖像的距離索引分別記為DistanceIndexL0和DistanceIndexL1;當前預測單元的L0參考索引和L1參考索引對應的圖像的BlockDistance分別記為BlockDistanceL0和BlockDistanceL1。
在參考圖像佇列1中參考索引為0的圖像中與所選當前預測單元的左下角亮度樣本位置對應的亮度樣本所在的時域運動訊息儲存單元的L0運動向量記為mvRef(mvRef_x,mvRef_y),該運動訊息儲存單元所在的圖像的距離索引記為DistanceIndexCol,該運動向量指向的參考單元所在的圖像的距離索引記為DistanceIndexRef。
第三步,
BlockDistanceRef = DistanceIndexCol - DistanceIndexRef
第四步,
令當前預測單元的L0參考索引RefIdxL0等於0,計算當前預測單元的L0運動向量mvE0(mvE0_x, mvE0_y):
mvE0_x = Clip3(-32768, 32767, Sign(mvRef_x * BlockDistanceL0 * BlockDistanceRef) * (((Abs(mvRef_x * BlockDistanceL0 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
mvE0_y = Clip3(-32768, 32767, Sign(mvRef_y * BlockDistanceL0 * BlockDistanceRef) * (((Abs(mvRef_y * BlockDistanceL0 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
這裡,mvX即為mvRef,MVX即為mvE0。
令當前預測單元的L1參考索引RefIdxL1等於0,計算當前預測單元的L1運動向量mvE1(mvE1_x, mvE1_y):
mvE1_x = Clip3(-32768, 32767, Sign(mvRef_x * BlockDistanceL1 * BlockDistanceRef) * (((Abs(mvRef_x * BlockDistanceL1 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
mvE1_y = Clip3(-32768, 32767, Sign(mvRef_y * BlockDistanceL1 * BlockDistanceRef) * (((Abs(mvRef_y * BlockDistanceL1 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
這裡,mvX即為mvRef,MVX即為mvE1。
第五步,interPredRefMode的值等於‘PRED_List01’。
方法四,以當前塊的右下角為例,推導運動訊息的步驟如下:
第一步,
假定當前預測單元的左上角亮度樣本位置為(x,y),亮度預測塊的寬度為l_width,亮度預測塊的高度為l_height;而所選當前預測單元的右下角亮度樣本位置為(x’,y’),x’ = x + l_width,y’ = y + l_height。
如果x’大於當前預測單元所在的LCU的最右邊的亮度樣本位置的橫坐標x_lcu_right, 或x’不可用,比如x’大於當前預測單元所在的圖像或patch的最右邊的亮度樣本位置的橫坐標x_boundary_right;那麼x’ = x + l_width-1;
如果y’大於當前預測單元所在的LCU的最下邊的亮度樣本位置的縱坐標y_lcu_bottom, 或y’不可用,比如y’大於當前預測單元所在的圖像或patch的最下邊的亮度樣本位置的縱坐標y_boundary_top;那麼y’ = y + l_height - 1。
第二步,
如果參考圖像佇列1中參考索引值為0 的圖像中與所選當前預測單元的右下角亮度樣本位置對應的亮度樣本所在的時域運動訊息儲存單元儲存的參考幀索引為-1,則當前預測單元的L0參考索引和L1參考索引均等於0。以當前預測單元所在編碼單元的尺寸和位置作為當前預測單元的尺寸和位置,然後將所得到的L0運動向量預測值和L1運動向量預測值分別作為當前預測單元的L0運動向量MvE0和L1運動向量MvE1,並令當前預測單元的L0參考索引RefIdxL0和L1參考索引RefIdxL1均等於0,結束運動訊息匯出過程。
否則,
當前預測單元的L0參考索引和L1參考索引均等於0。當前預測單元的L0參考索引和L1參考索引對應的圖像的距離索引分別記為DistanceIndexL0和DistanceIndexL1;當前預測單元的L0參考索引和L1參考索引對應的圖像的BlockDistance分別記為BlockDistanceL0和BlockDistanceL1。
在參考圖像佇列1中參考索引為0的圖像中與所選當前預測單元的右下角亮度樣本位置對應的亮度樣本所在的時域運動訊息儲存單元的L0運動向量記為mvRef(mvRef_x,mvRef_y),該運動訊息儲存單元所在的圖像的距離索引記為DistanceIndexCol,該運動向量指向的參考單元所在的圖像的距離索引記為DistanceIndexRef。
第三步,
BlockDistanceRef = DistanceIndexCol - DistanceIndexRef
第四步,
令當前預測單元的L0參考索引RefIdxL0等於0,計算當前預測單元的L0運動向量mvE0(mvE0_x, mvE0_y):
mvE0_x = Clip3(-32768, 32767, Sign(mvRef_x * BlockDistanceL0 * BlockDistanceRef) * (((Abs(mvRef_x * BlockDistanceL0 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
mvE0_y = Clip3(-32768, 32767, Sign(mvRef_y * BlockDistanceL0 * BlockDistanceRef) * (((Abs(mvRef_y * BlockDistanceL0 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
這裡,mvX即為mvRef,MVX即為mvE0。
令當前預測單元的L1參考索引RefIdxL1等於0,計算當前預測單元的L1運動向量mvE1(mvE1_x, mvE1_y):
mvE1_x = Clip3(-32768, 32767, Sign(mvRef_x * BlockDistanceL1 * BlockDistanceRef) * (((Abs(mvRef_x * BlockDistanceL1 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
mvE1_y = Clip3(-32768, 32767, Sign(mvRef_y * BlockDistanceL1 * BlockDistanceRef) * (((Abs(mvRef_y * BlockDistanceL1 * (16384 / BlockDistanceRef))) + 8192 ) >> 14))
這裡,mvX即為mvRef,MVX即為mvE1。
第五步,interPredRefMode的值等於‘PRED_List01’。
這樣,在匯出時域運動訊息之後,可以將所得到的時域運動訊息填充至運動訊息候選清單中,以得到新的運動訊息候選清單。
S505:基於所述至少一個時域運動訊息,構建新的運動訊息候選清單。
需要說明的是,在得到至少一個時域運動訊息之後,可以將其填入到運動訊息候選清單中,以得到新的運動訊息候選清單。具體地,對於S505來說,該步驟可以包括:將至少一個時域運動訊息填入運動訊息候選清單中,得到所述新的運動訊息候選清單。
還需要說明的是,現有的運動訊息候選清單中只預留一個時域運動訊息的填充位置,為了提高右下角的相關性,還可以增加運動訊息候選清單中時域運動訊息的填充位置。具體地,在一些實施例中,該方法還可以包括:
調整時域運動訊息在所述新的運動訊息候選清單中的比例值;
根據所調整的比例值,控制所述新的運動訊息候選清單中預留至少兩個時域運動訊息的填充位置。
也就是說,可以增加時域運動訊息在運動訊息候選清單中的比例值。如果AWP預測模式下候選清單中給時域運動訊息保留了至少1個位置,那麼可以調整為AWP預測模式下候選清單中給時域運動訊息保留了至少2個(或3個)位置,使得新的運動訊息候選清單中預留至少兩個時域運動訊息的填充位置。
這樣,在推導出時域運動訊息之後,可以構建出新的運動訊息候選清單。後續根據新的運動訊息候選清單來確定當前塊的幀間預測值。
S506:根據所述新的運動訊息候選清單,確定所述當前塊的幀間預測值。
需要說明的是,當預測模式參數指示使用預設的幀間預測模式(比如GPM或AWP)確定當前塊的幀間預測值時,這時候可以確定出當前塊的兩個分區。也就是說,該方法還可以包括:當預測模式參數指示使用GPM或AWP確定當前塊的幀間預測值時,確定所述當前塊的兩個分區;其中,所述兩個分區包括第一分區和第二分區。
還需要說明的是,在得到新的運動訊息候選清單後,可以確定出當前塊的第一分區對應的運動訊息和所述第二分區的運動訊息;然後根據第一分區對應的運動訊息和所述第二分區的運動訊息,能夠確定出當前塊的幀間預測值。
具體地,如圖7所示,其示出了本申請實施例提供的另一種幀間預測方法的流程示意圖。該方法可以包括:
S701:解析位元流,確定所述第一分區對應的第一運動訊息索引值和所述第二分區對應的第二運動訊息索引值;
S702:基於新的運動訊息候選清單,將所述第一運動訊息索引值指示的所述新的運動訊息候選清單中的運動訊息確定為所述第一分區的運動訊息,將所述第二運動訊息索引值指示的所述新的運動訊息候選清單中的運動訊息確定為所述第二分區的運動訊息;
S703:利用所述第一分區的運動訊息計算所述第一分區的第一預測值,利用所述第二分區的運動訊息計算所述第二分區的第二預測值;
S704:對所述第一預測值和所述第二預測值進行加權融合,得到所述當前塊的幀間預測值。
需要說明的是,傳統的單向預測只是查找一個與當前塊大小相同的參考塊,而傳統的雙向預測使用兩個與當前塊大小相同的參考塊,且預測塊內每個點的像素值為兩個參考塊對應位置的平均值,即每一個參考塊的所有點都占50%的比例。雙向加權預測使得兩個參考塊的比例可以不同,如第一個參考塊中所有點都占75%的比例,第二個參考塊中所有點都占25%的比例。但同一個參考塊中的所有點的比例都相同。其他一些優化方式比如採用解碼端運動向量修正(Decoder side Motion Vector Refinement,DMVR)技術、雙向光流(Bi-directional Optical Flow,BIO)等會使參考像素或預測像素產生一些變化,而且GPM或AWP也使用兩個與當前塊大小相同的參考塊,但某些像素位置100%使用第一個參考塊對應位置的像素值,某些像素位置100%使用第二個參考塊對應位置的像素值,而在交界區域,按一定比例使用這兩個參考塊對應位置的像素值。具體這些權重如何分配,由GPM或AWP的預測模式決定,或者也可以認為GPM或AWP使用兩個與當前塊大小不相同的參考塊,即各取所需的一部分作為參考塊。
示例性地,如圖8A所示,其示出了本申請實施例提供的一種GPM在64×64的當前塊上的多種劃分模式的權重分配示意圖。在圖8A中,GPM存在有64種劃分模式。如圖8B所示,其示出了本申請實施例提供的一種AWP在64×64的當前塊上的多種劃分模式的權重分配示意圖。在圖8B中,AWP存在有56種劃分模式。無論是圖8A還是圖8B,每一種劃分模式下,黑色區域表示第一個參考塊對應位置的權重值為0%,白色區域表示第一個參考塊對應位置的權重值為100%,灰色區域則按顏色深淺的不同表示第一個參考塊對應位置的權重值為大於0%且小於100%的某一個權重值,第二個參考塊對應位置的權重值則為100%減去第一個參考塊對應位置的權重值。
應理解,早期的編解碼技術中只存在矩形的劃分方式,無論是CU、PU還是變換單元(Transform Unit,TU)的劃分。而GPM或AWP均實現了非矩形的劃分,即用一條直線可以將一個矩形塊分成兩個分區,根據直線的位置和角度的不同,劃分的兩個分區可能是三角形或梯形或矩形等,從而能使得劃分更貼近物體的邊緣或者兩個運動不同區域的邊緣。需要注意的是,這裡所說的劃分並不是真正意義上的劃分,而更像是一種預測效果上的劃分。因為這個劃分只是劃分了兩個參考塊在產生預測塊時的權重,或者可以簡單地理解為預測塊的一部分位置來自於第一個參考塊,而另一部分位置來自於第二個參考塊,並沒有真正按劃分線把當前塊劃分成兩個CU或PU或TU。這樣,在預測之後殘差的變換、量化、反變換、反量化等也都是將當前塊作為一個整體進行處理。
還需要說明的是,GPM或AWP屬於一種幀間預測技術,GPM或AWP需要在位元流中傳輸一個GPM或AWP是否使用的標誌(flag),該flag可以指示當前塊是否使用GPM或AWP。如果使用GPM或AWP,編碼器在位元流中需要傳輸具體使用的模式,即GPM的64種劃分模式之一,或AWP的56種劃分模式之一;以及兩個單向運動訊息的索引值。也就是說,對於當前塊而言,解碼器透過解析位元流可以得到GPM或AWP是否使用的訊息,如果確定使用GPM或AWP,解碼器可以解析出GPM或AWP的預測模式參數以及兩個運動訊息索引值,比如當前塊可以劃分為兩個分區,那麼可以解析出第一分區對應的第一運動訊息索引值和第二分區對應的第二運動訊息索引值。
在計算當前塊的幀間預測值之前,首先需要構建一個新的運動訊息候選清單,下面以AVS中的AWP為例介紹運動訊息候選清單的構建方法。
如圖2B所示,塊E為當前塊,而塊A、塊B、塊C、塊D、塊F、塊G均為塊E的相鄰塊。其中,塊E的相鄰塊A是樣本( x0 -1, y0 )所在的塊,塊E的相鄰塊B是樣本(x0 , y0 -1)所在的塊,塊E的相鄰塊C是樣本(x0 +1, y0 -1)所在的塊,塊E的相鄰塊D是樣本(x0 -1, y0 -1)所在的塊,塊E的相鄰塊F是樣本(x0 -1, y1 )所在的塊,塊E的相鄰塊G是樣本(x1 , y0 -1)所在的塊。其中(x0 , y0 )是塊E左上角樣本在圖像中的座標,(x1 , y0 )是塊E右上角樣本在圖像中的座標,(x0 , y1 )是塊E左下角樣本在圖像中的座標。也就是說,塊E和它的相鄰塊A、B、C、D、F和G的空間位置關係詳見圖2B。
對於圖2B而言,相鄰塊X(X表示為A、B、C、D、F或G)“存在”是指該塊應在待解碼圖像內並且該塊應與塊E屬於同一空間區域;否則相鄰塊“不存在”。可以得到,如果塊“不存在”或者尚未解碼,那麼此塊“不可用”;否則此塊“可用”。或者,如果待解碼圖像樣本所在的塊“不存在”或者此樣本尚未解碼,那麼此樣本“不可用”;否則此樣本“可用”。
假定第一個單向運動訊息表示為mvAwp0L0、mvAwp0L1、RefIdxAwp0L0和RefIdxAwp0L1。其中,mvAwp0L0表示在第一個參考幀清單RefPicList0中對應的運動向量,RefIdxAwp0L0表示在第一個參考幀清單RefPicList0中對應的參考幀的參考索引值;mvAwp0L1表示在第二個參考幀清單RefPicList1中對應運動向量,RefIdxAwp0L1表示在第二個參考幀清單RefPicList1中對應的參考幀的參考索引值。第二個單向運動訊息以此類推。
由於這裡的運動訊息都是單向的,所以RefIdxAwp0L0和RefIdxAwp0L1必有一個為有效值,比如0,1,2等;另一個為無效值,比如-1。如果RefIdxAwp0L0為有效值,那麼RefIdxAwp0L1為-1;這時候對應的mvAwp0L0即為所需要的運動向量,即(x,y),mvAwp0L1不需要考慮。反之亦然。
具體來講,推導mvAwp0L0、mvAwp0L1、RefIdxAwp0L0、RefIdxAwp0L1、mvAwp1L0、mvAwp1L1、RefIdxAwp1L0和RefIdxAwp1L1的步驟如下:
第一步,如圖2B所示,F、G、C、A、B和D是當前塊E的相鄰塊,確定F、G、C、A、B和D的“可用”性:
(a)如果F存在且採用幀間預測模式,那麼F“可用”;否則F“不可用”。
(b)如果G存在且採用幀間預測模式,則G“可用”;否則G“不可用”。
(c)如果C存在且採用幀間預測模式,則C“可用”;否則C“不可用”。
(d)如果A存在且採用幀間預測模式,則A“可用”;否則A“不可用”。
(e)如果B存在且採用幀間預測模式,則B“可用”;否則B“不可用”。
(f)如果D存在且採用幀間預測模式,則D“可用”;否則D“不可用”。
第二步,按F、G、C、A、B和D的順序將單向可用的運動訊息放入單向運動訊息候選清單(用AwpUniArray表示),直至AwpUniArray長度為3或遍歷結束。
第三步,如果AwpUniArray的長度小於3,按F、G、C、A、B和D的順序將雙向可用的運動訊息拆分為指向參考幀清單List0的單向運動訊息以及指向參考幀清單List1的單向運動訊息,先進行單向運動訊息查重操作,若不重複則放入AwpUniArray,直至長度為3或遍歷結束。
第四步,將推導出的時域雙向的運動訊息拆分為指向參考幀清單List0的單向運動訊息以及指向參考幀清單List1的單向運動訊息,先進行單向運動訊息查重操作,若不重複則放入AwpUniArray,直至長度為4或遍歷結束。
第五步,如果AwpUniArray的長度小於4,那麼將AwpUniArray中最後一個單向運動訊息進行重複填充操作,直至AwpUniArray長度為4。
第六步,將AwpUniArray中第AwpCandIdx0+1個運動訊息賦值給mvAwp0L0、mvAwp0L1、RefIdxAwp0L0和RefIdxAwp0L1;將AwpUniArray中第AwpCandIdx1+1個運動訊息賦值給mvAwp1L0、mvAwp1L1、RefIdxAwp1L0和RefIdxAwp1L1。
在最近一次的標準會議中,上述具體的文本描述修改如下,
第一步,如圖2B所示,F、G、C、A、B和D是當前塊E的相鄰塊,確定F、G、C、A、B和D的“可用”性:
(a)如果F存在且採用幀間預測模式,則F“可用”;否則F“不可用”。
(b)如果G存在且採用幀間預測模式且G和F的運動訊息不相同,則G“可用”;否則G“不可用”。
(c)如果C存在且採用幀間預測模式且C和G的運動訊息不相同,則C“可用”;否則C“不可用”。
(d)如果A存在且採用幀間預測模式且A和F的運動訊息不相同,則A“可用”;否則A“不可用”。
(e)如果B存在且採用幀間預測模式,則B“可用”;否則B“不可用”。
(f)如果D存在且採用幀間預測模式且D和A的運動訊息不相同且D和G的運動訊息也不相同,則D“可用”;否則D“不可用”
第二步,按F、G、C、A、B和D的順序將可用的運動訊息放入運動候選清單AwpCandArray,直至AwpCandArray長度為4或遍歷結束。
第三步,將推導出的時域雙向的運動訊息放入運動候選清單AwpCandArray。
第四步,如果AwpCandArray的長度小於5,依次生成四個運動訊息,生成的四個運動訊息的參考幀訊息與AwpCandArray中第一個運動訊息的參考幀訊息相同。依次對AwpCandArray中第一個運動訊息的List0和List1清單對應的運動向量記為(x, y),生成的四個運動訊息對應候選清單中的運動向量分別為(x0, y0)、(x1, y1)、(x2, y2)和(x3, y3),計算如下,
x0 = abs(x) < 8 ? 8 : (abs(x) <= 64 ? ((abs(x) * 5 + 2) >> 2) : (abs(x) <= 128 ? ((abs(x) * 9 + 4) >> 3) : ((abs(x) * 33 + 16) >> 5)))
x0=x<0?-x0:x0
y0=y
x1=x
y1 = abs(y) < 8 ? 8 : (abs(y) <= 64 ? ((abs(y) * 5 + 2) >> 2) : (abs(y) <= 128 ? ((abs(y) * 9 + 4) >> 3) : ((abs(y) * 33 + 16) >> 5)))
y1=y<0?-y1:y1
x2 = abs(x) < 8 ? 8 : (abs(x) <= 64 ? ((abs(x) * 3 + 2) >> 2) : (abs(x) <= 128 ? ((abs(x) * 7 + 4) >> 3) : ((abs(x) * 31 + 16) >> 5)))
x2=x<0?-x2:x2
x2= abs(x) < 8 ? -x2:x2
y2=y
x3=x
y3 = abs(y) < 8 ? 8 : (abs(y) <= 64 ? ((abs(y) * 3 + 2) >> 2) : (abs(y) <= 128 ? ((abs(y) * 7 + 4) >> 3) : ((abs(y) * 31 + 16) >> 5)))
y3=y<0?-y3:y3
y3= abs(y) < 8 ?-y3:y3
將新生成的四個運動訊息依次加入AwpCandArray,直至AwpCandArray的長度為5。
第五步,將AwpCandArray中第AwpCandIdx0+1個運動候選的某一個單項運動訊息賦值給mvAwp0L0、mvAwp0L1、RefIdxAwp0L0和RefIdxAwp0L1:
(a)如果AwpCandIdx0是偶數,將運動候選指向參考幀清單List0的單向運動訊息賦值給mvAwp0L0和RefIdxAwp0L0, mvAwp0L1等於零,RefIdxAwp0L1等於-1;如果List0單向運動訊息不存在,將運動候選指向參考幀清單List1的單向運動訊息賦值給mvAwp0L1和RefIdxAwp0L1,mvAwp0L0等於零,RefIdxAwp0L0等於-1。
(b)如果AwpCandIdx0是奇數,將運動候選指向參考幀清單List1的單向運動訊息賦值給mvAwp0L1和RefIdxAwp0L1,mvAwp0L0等於零,RefIdxAwp0L0等於-1;如果List1單向運動訊息不存在,將運動候選指向參考幀清單List0的單向運動訊息賦值給mvAwp0L0和RefIdxAwp0L0,mvAwp0L1等於零,RefIdxAwp0L1等於-1。
第六步,將AwpCandArray中第AwpCandIdx1+1個運動候選的某一個單項運動訊息賦值給mvAwp1L0、mvAwp1L1、RefIdxAwp1L0和RefIdxAwp1L1:
(a)如果AwpCandIdx1是偶數,將運動候選指向參考幀清單List0的單向運動訊息賦值給mvAwp1L0和RefIdxAwp1L0,mvAwp1L1等於零,RefIdxAwp1L1等於-1;如果List0單向運動訊息不存在,將運動候選指向參考幀清單List1的單向運動訊息賦值給mvAwp1L1和RefIdxAwp1L1,mvAwp1L0等於零,RefIdxAwp1L0等於-1。
(b)如果AwpCandIdx1是奇數,將運動候選指向參考幀清單List1的單向運動訊息賦值給mvAwp1L1和RefIdxAwp1L1,mvAwp1L0等於零,RefIdxAwp1L0等於-1;如果List1單向運動訊息不存在,將運動候選指向參考幀清單List0的單向運動訊息賦值給mvAwp1L0和RefIdxAwp1L0,mvAwp1L1等於零,RefIdxAwp1L1等於-1。
利用上述方法確定的兩個單向運動訊息找到兩個參考塊,根據GPM或AWP使用的具體的模式確定兩個參考塊在每一個像素位置的權值,並將兩個參考塊加權得到當前塊的預測塊。
這樣,對於當前塊而言,解碼器透過解析位元流可以得到GPM或AWP是否使用的訊息,如果確定使用GPM或AWP,解碼器可以解析出GPM或AWP的預測模式參數以及兩個運動訊息索引值,並且解碼器建構當前塊GPM或AWP使用的運動訊息候選清單,然後根據解析到的兩個運動訊息索引值可以在上述構建出新的運動訊息候選清單中找到兩個單向運動訊息,然後利用這兩個單向運動訊息可以查找到兩個參考塊,根據GPM或AWP使用的具體預測模式能夠確定出兩個參考塊在每一個像素位置的權值,最後將兩個參考塊加權計算以得到當前塊的預測塊。
進一步地,如果當前模式是跳過(skip)模式,那麼預測塊就是解碼塊,意味著當前塊的解碼結束。如果當前模式不是跳過模式,熵解碼解析量化係數,接著反量化與反變換以得到殘差塊,最後將殘差塊與預測塊相加可以得到解碼塊,意味著當前塊的解碼結束。
這樣,本申請實施例限制匯出時域運動訊息所使用的像素位置不會超出當前塊的LCU邊界以使硬體實現沒有額外頻寬增加的應用場景。在本申請實施例中,主要採用的方式包括:(1)將所有的初始候選位置都設置在當前塊內部;(2)針對某一個角,如果初始候選位置落在LCU外部,那麼首選調整到這個角的LCU內部而當前塊外部的某一個候選位置。(3)如果某一個角的初始位置落在了LCU外部,那麼調整到另外一個初始位置落在LCU內部的角的位置。其中,大多數採用的是第(2)方式,以使硬體實現時不增加額外的頻寬而且儘量保持其壓縮性能。
本實施例提供了一種幀間預測方法,應用於解碼器。解析位元流,獲取當前塊的預測模式參數;當所述預測模式參數指示使用預設的幀間預測模式確定當前塊的幀間預測值時,確定所述當前塊的至少一個初始候選位置;在所述至少一個初始候選位置超出所述當前塊的LCU邊界的情況下,對所述至少一個初始候選位置進行調整,得到所述當前塊的至少一個目標候選位置;基於所述至少一個目標候選位置,確定所述當前塊的至少一個時域運動訊息;基於所述至少一個時域運動訊息,構建新的運動訊息候選清單;根據所述新的運動訊息候選清單,確定所述當前塊的幀間預測值。這樣,在確定出當前塊的至少一個初始候選位置之後,透過對至少一個初始候選位置進行調整以使得至少一個目標候選位置不會超出當前塊的LCU邊界,從而能夠使硬體實現時不增加額外的頻寬,同時還能夠保證編解碼性能。
本申請實施例提供一種幀間預測方法,該方法應用於影像編碼設備,即編碼器。該方法所實現的功能可以透過編碼器中的第二處理器調用電腦程式來實現,當然電腦程式可以保存在第二記憶體中,可見,該編碼器至少包括第二處理器和第二記憶體。
參見圖9,其示出了本申請實施例又一種幀間預測方法的流程示意圖。如圖9所示,該方法可以包括:
S901:確定當前塊的預測模式參數;
需要說明的是,待編碼圖像可以劃分為多個圖像塊,當前待編碼的圖像塊可以稱為當前塊,與當前塊相鄰的圖像塊可以稱為相鄰塊;即在待編碼圖像中,當前塊與相鄰塊之間具有相鄰關係。這裡,每個當前塊可以包括第一圖像分量、第二圖像分量和第三圖像分量;也即當前塊為待編碼圖像中當前待進行第一圖像分量、第二圖像分量或者第三圖像分量預測的圖像塊。
其中,假定當前塊進行第一圖像分量預測,而且第一圖像分量為亮度分量,即待預測圖像分量為亮度分量,那麼當前塊也可以稱為亮度塊;或者,假定當前塊進行第二圖像分量預測,而且第二圖像分量為色度分量,即待預測圖像分量為色度分量,那麼當前塊也可以稱為色度塊。
還需要說明的是,預測模式參數指示了當前塊採用的預測模式以及與該預測模式相關的參數。這裡,針對預測模式參數的確定,可以採用簡單的決策策略,比如根據失真值的大小進行確定;也可以採用複雜的決策策略,比如根據位元率失真優化(Rate Distortion Optimization,RDO)的結果進行確定,本申請實施例不作任何限定。通常而言,可以採用RDO方式來確定當前塊的預測模式參數。
具體地,在一些實施例中,對於S901來說,所述確定當前塊的預測模式參數,可以包括:
利用多種預測模式對所述當前塊進行預編碼處理,獲得每一種預測模式對應的位元率失真代價值;
從所獲得的多個位元率失真代價值中選擇最小位元率失真代價值,將所述最小位元率失真代價值對應的預測模式確定為當前塊的預測模式參數。
也就是說,在編碼器側,針對當前塊可以採用多種預測模式分別對當前塊進行預編碼處理。這裡,多種預測模式通常包括有幀間預測模式、傳統幀內預測模式和非傳統幀內預測模式;其中,傳統幀內預測模式可以包括有直流(Direct Current,DC)模式、平面(PLANAR)模式和角度模式等,非傳統幀內預測模式可以包括有基於矩陣的幀內預測(Matrix-based Intra Prediction,MIP)模式、跨分量線性模型預測(Cross-component Linear Model Prediction,CCLM)模式、幀內塊複製(Intra Block Copy,IBC)模式和PLT(Palette)模式等,而幀間預測模式可以包括有普通幀間預測模式、GPM預測模式和AWP預測模式等。
這樣,在利用多種預測模式分別對當前塊進行預編碼之後,可以得到每一種預測模式對應的位元率失真代價值;然後從所得到的多個位元率失真代價值中選取最小位元率失真代價值,並將該最小位元率失真代價值對應的預測模式確定為當前塊的預測模式參數。除此之外,還可以在利用多種預測模式分別對當前塊進行預編碼之後,得到每一種預測模式對應的失真值;然後從所得到的多個失真值中選取最小失真值,並將該最小失真值對應的預測模式確定為當前塊的預測模式參數。如此,最終使用所確定的預測模式參數對當前塊進行編碼,而且在這種預測模式下,可以使得預測殘差較小,能夠提高編碼效率。
S902:當所述預測模式參數指示使用預設的幀間預測模式確定當前塊的幀間預測值時,確定所述當前塊的至少一個初始候選位置。
需要說明的是,如果預測模式參數指示使用預設的幀間預測模式確定當前塊的幀間預測值的情況下,就可以採用本申請實施例所提供的幀間預測方法。這裡,預設的幀間預測模式可以為GPM預測模式或AWP預測模式等。
還需要說明的是,運動訊息可以包括運動向量訊息和參考幀訊息。另外,參考幀訊息可以是由參考幀清單以及參考索引值共同確定所對應的參考幀。
在一些實施例中,對於S902來說,所述確定所述當前塊的至少一個初始候選位置,可以包括:
獲取所述當前塊的至少一個角初始候選位置,組成初始候選位置集合;其中,所述至少一個角初始候選位置包括下述至少一項:左上初始候選位置、右上初始候選位置、左下初始候選位置和右下初始候選位置;
從所述初始候選位置集合中,確定所述當前塊的至少一個初始候選位置。
進一步地,在一些實施例中,左上初始候選位置至少包括下述其中之一:第一左上候選位置、第二左上候選位置、第三左上候選位置和第四左上候選位置;
右上初始候選位置至少包括下述其中之一:第一右上候選位置、第二右上候選位置、第三右上候選位置和第四右上候選位置;
左下初始候選位置至少包括下述其中之一:第一左下候選位置、第二左下候選位置、第三左下候選位置和第四左下候選位置;
右下初始候選位置至少包括下述其中之一:第一右下候選位置、第二右下候選位置、第三右下候選位置和第四右下候選位置;
其中,所述第一左上候選位置、所述第一右上候選位置、所述第一左下候選位置和所述第一右下候選位置表徵所述當前塊內部的四個角位置,所述第二左上候選位置、所述第三左上候選位置和所述第四左上候選位置表徵所述當前塊外部的左上角位置,所述第二右上候選位置、所述第三右上候選位置和所述第四右上候選位置表徵所述當前塊外部的右上角位置,所述第二左下候選位置、所述第三左下候選位置和所述第四左下候選位置表徵所述當前塊外部的左下角位置,所述第二右下候選位置、所述第三右下候選位置和所述第四右下候選位置表徵所述當前塊外部的右下角位置。
需要說明的是,假定當前塊內部的左上角位置,也就是當前塊左上角第一個像素對應的像素位置為(x, y),當前塊的寬度為width,當前塊的高度為height。另外,這裡所說的寬度和高度通常是指亮度分量的寬度(即l_width)和高度(即l_height),但不作具體限定。
還需要說明的是,由於上面提到用於匯出時域運動訊息的參考幀儲存匯出時域運動訊息的運動訊息是按照塊保存運動訊息,那麼按照某一個像素位置確定的時域運動訊息和按照與該像素位置處在同一個儲存塊內其他像素位置確定的時域運動訊息是相同的,這樣在匯出過程中可能有一些中間計算將某一個像素位置透過一些計算得到某些統一格式的位置,這裡只要它們都處在同一個儲存塊內,那麼可以認為這些位置是相同的。
以圖6A~圖6E為例,其提供了多種初始候選位置的情況。在得到初始候選位置之後,需要判斷該初始候選位置是否超出當前塊的LCU邊界,以進一步確定當初始候選位置落在LCU邊界之外時如何處理。
S903:在所述至少一個初始候選位置超出所述當前塊的最大編碼單元LCU邊界的情況下,對所述至少一個初始候選位置進行調整,得到所述當前塊的至少一個目標候選位置。
需要說明的是,為了避免硬體實現時增加額外的頻寬,這時候需要判斷用於確定時域運動訊息所使用的至少一個初始候選位置是否超過當前塊的LCU邊界。
在一些實施例中,對於S903來說,該方法還可以包括:在所述至少一個初始候選位置未超出所述當前塊的LCU邊界的情況下,將所述至少一個初始候選位置確定為所述當前塊的至少一個目標候選位置。
也就是說,如果某一初始候選位置超出LCU邊界,那麼這時候需要針對該初始候選位置進行調整,以使得調整後得到的目標候選位置未超出LCU邊界;如果某一初始候選位置未超出LCU邊界,那麼這時候就不需要針對該初始候選位置進行調整,可以直接將該初始候選位置確定為目標候選位置。
一種可能的實施方式中,可以選取當前塊內部的候選位置,這時候所使用的候選位置都不超出當前塊的LCU邊界,能夠將其直接確定為目標候選位置。因此,在一些實施例中,該方法還可以包括:
若所述至少一個初始候選位置包括所述第一左上候選位置,和/或,所述第一右上候選位置,和/或,所述第一左下候選位置,和/或,所述第一右下候選位置,則確定所述至少一個初始候選位置未超出LCU邊界,將所述至少一個初始候選位置確定為所述當前塊的至少一個目標候選位置。
另一種可能的實施方式中,針對某一個角,如果初始候選位置落在LCU邊界外部,那麼首選調整到這個角的LCU內部且當前塊外部的某一候選位置。因此,在一些實施例中,該方法還可以包括:
若所述至少一個初始候選位置包括其中一個角的初始候選位置,且所述其中一個角的初始候選位置超出LCU邊界,則從所述其中一個角對應的候選位置中選擇未超出所述LCU邊界的候選位置,將所述其中一個角的初始候選位置調整到所選擇的候選位置,以得到所述當前塊的一個目標候選位置。
進一步地,當其中一個角的初始候選位置為右下初始候選位置時,該方法還可以包括:
若所述至少一個初始候選位置包括所述右下初始候選位置,且所述右下初始候選位置超出LCU邊界,則從所述當前塊外部的右下角位置中選擇未超出LCU邊界的候選位置,將所述右下初始候選位置調整到所選擇的候選位置,以得到所述當前塊的一個目標候選位置。
進一步地,該方法還可以包括:若從所述當前塊外部的右下角位置中沒有選擇到未超出LCU邊界的候選位置,則將所述右下初始候選位置調整到所述當前塊內部的右下角位置,以得到所述當前塊的一個目標候選位置。
也就是說,以右下角為例,如果右下初始候選位置超出LCU邊界,那麼首先調整到右下角的LCU內部但是當前塊外部的某一候選位置;如果從當前塊外部的右下角位置中沒有選擇到未超出LCU邊界的候選位置,這時候就需要調整到當前塊內部的右下角位置,以確定出對應的目標候選位置。
又一種可能的實施方式中,針對某一個角,如果初始候選位置落在LCU邊界外部,那麼可以調整到另外一個初始位置落在LCU內部的角的候選位置。因此,在一些實施例中,該方法還可以包括:
若所述至少一個初始候選位置包括其中一個角的初始候選位置,且所述其中一個角的初始候選位置超出LCU邊界,則從除所述其中一個角之外剩餘角對應的候選位置中選擇未超出所述LCU邊界的候選位置,將所述其中一個角的初始候選位置調整到所選擇的候選位置,以得到所述當前塊的一個目標候選位置。
進一步地,當其中一個角的初始候選位置為右下初始候選位置時,該方法還可以包括:
若所述至少一個初始候選位置包括所述右下初始候選位置,且所述右下初始候選位置超出LCU邊界,則在所述右上初始候選位置未超出LCU邊界的情況下,將所述右下初始候選位置調整到所述右上初始候選位置,以得到所述當前塊的一個目標候選位置。
再一種可能的實施方式中,針對某一個角,如果初始候選位置落在LCU邊界外部,且這個角只能調整到當前塊內部,那麼可以調整到另外一個初始位置落在LCU內部的角的候選位置。因此,在一些實施例中,該方法還可以包括:
若所述至少一個初始候選位置包括其中一個角的初始候選位置,且所述其中一個角的初始候選位置超出LCU邊界,且所述其中一個角對應的候選位置中僅所述當前塊內部的候選位置未超出LCU邊界,則從除所述其中一個角之外剩餘角對應的候選位置中選擇未超出所述LCU邊界的候選位置,將所述其中一個角的初始候選位置調整到所選擇的候選位置,以得到所述當前塊的一個目標候選位置。
進一步地,當其中一個角的初始候選位置為右下初始候選位置時,該方法還可以包括:
若所述至少一個初始候選位置包括所述右下初始候選位置,且所述右下初始候選位置超出LCU邊界,且所述當前塊內部和外部的右下角位置中僅所述第一右下候選位置未超出LCU邊界,則在所述右上初始候選位置未超出LCU邊界的情況下,將所述右下初始候選位置調整到所述右上初始候選位置,以得到所述當前塊的一個目標候選位置。
再一種可能的實施方式中,還可以是對每一個劃分模式設置這至少一個初始候選位置的優先順序排序,然後依次檢查是否超出當前塊的LCU邊界。因此,在一些實施例中,該方法還可以包括:
針對不同的劃分模式,根據預設優先順序設置所述初始候選位置集合中不同初始候選位置對應的優先順序;
按照所述預設優先順序選取一個初始候選位置,並判斷所選取的初始候選位置是否超出LCU邊界;
若所選取的初始候選位置超出LCU邊界,則返回執行所述按照所述預設優先順序選取一個初始候選位置的步驟;
若所選取的初始候選位置未超出LCU邊界,則將所選取的初始候選位置確定為所述當前塊的一個目標候選位置。
也就是說,針對不同的劃分模式,可以設置不同的預設優先順序。仍以劃分模式54為例(從0開始),針對劃分模式54,可以設置左上角、右上角、左下角和右下角等四個初始候選位置的優先順序排序,比如設置的初始候選位置排序為3、1、2、0,即優先選取右下角,再選取右上角,然後再選取左下角,最後選取左上角;按照上述方式依次進行判斷。
再一種可能的實施方式中,還可以是對每一個劃分模式設置這至少一個初始候選位置的固定排序順序,然後依次檢查是否超出當前塊的LCU邊界。因此,在一些實施例中,該方法還可以包括:
針對不同的劃分模式,根據預設順序對所述初始候選位置集合中不同初始候選位置進行排序;
按照所述預設順序選取一個初始候選位置,並判斷所選取的初始候選位置是否超出LCU邊界;
若所選取的初始候選位置超出LCU邊界,則返回執行所述按照所述預設順序選取一個初始候選位置的步驟;
若所選取的初始候選位置未超出LCU邊界,則將所選取的初始候選位置確定為所述當前塊的一個目標候選位置。
也就是說,還可以是按照一個固定的預設順序排序,比如按照0,1,2,3,0,1,……的順序,如果某一個劃分模式首先選取3,即右下角,但是右下角不能落在LCU內部但位於當前塊外部;那麼選取0再次嘗試,即左上角,如果0也不滿足,那麼選取1再次嘗試,即右上角,以此類推,直至4個初始候選位置都依次判斷過。
進一步地,如果四個初始候選位置都不能落在LCU內部而位於當前塊外部,那麼還可以設置位置排序(比如預設優先順序或者預設順序)的第一個角的當前塊內部位置,以將其確定為目標候選位置;或者,如果四個初始候選位置都不能落在LCU內部而位於當前塊外部,另一種方式是選擇一個預設位置,比如當前塊內部的左上角位置,以將其確定為目標候選位置。
S904:基於所述至少一個目標候選位置,確定所述當前塊的至少一個時域運動訊息。
需要說明的是,在得到至少一個目標候選位置之後,可以根據所得到的目標候選位置來確定時域運動訊息,具體是將對應參考幀中的時域位置所使用的運動訊息作為該目標候選位置的時域運動訊息。這裡,當前塊所屬的幀可以稱為當前幀,當前幀中的目標候選位置與參考幀中的時域位置雖然所屬的幀不同,但是位置是相同的。
在一些實施例中,對於S904來說,所述基於所述至少一個目標候選位置,確定所述當前塊的至少一個時域運動訊息,可以包括:
確定所述至少一個目標候選位置中每一目標候選位置對應的參考幀訊息;
針對每一目標候選位置,在對應的參考幀訊息中確定與所述目標候選位置關聯的時域位置,並將所述時域位置使用的運動訊息確定為所述目標候選位置對應的時域運動訊息;
基於所述至少一個目標候選位置,對應得到至少一個時域運動訊息。
也就是說,時域運動訊息是根據某一個參考幀訊息中對應位置所使用的運動訊息來確定的。而且針對不同的目標候選位置,可得到不同的時域運動訊息。
這樣,在推導出時域運動訊息之後,可以將所得到的時域運動訊息填充至運動訊息候選清單中,以得到新的運動訊息候選清單。
S905:基於所述至少一個時域運動訊息,構建新的運動訊息候選清單。
需要說明的是,在得到至少一個時域運動訊息之後,可以將其填入到運動訊息候選清單中,以得到新的運動訊息候選清單。具體地,對於S905來說,該步驟可以包括:將至少一個時域運動訊息填入運動訊息候選清單中,得到所述新的運動訊息候選清單。
還需要說明的是,現有的運動訊息候選清單中只預留一個時域運動訊息的填充位置,為了提高右下角的相關性,還可以增加運動訊息候選清單中時域運動訊息的填充位置。具體地,在一些實施例中,該方法還可以包括:
調整時域運動訊息在所述新的運動訊息候選清單中的比例值;
根據所調整的比例值,控制所述新的運動訊息候選清單中預留至少兩個時域運動訊息的填充位置。
也就是說,可以增加時域運動訊息在運動訊息候選清單中的比例值。如果AWP預測模式下候選清單中給時域運動訊息保留了至少1個位置,那麼可以調整為AWP預測模式下候選清單中給時域運動訊息保留了至少2個(或3個)位置,使得新的運動訊息候選清單中預留至少兩個時域運動訊息的填充位置。
這樣,在推導出時域運動訊息之後,可以構建出新的運動訊息候選清單。後續根據新的運動訊息候選清單來確定當前塊的幀間預測值。
S906:根據所述新的運動訊息候選清單,確定所述當前塊的幀間預測值。
需要說明的是,當預測模式參數指示使用預設的幀間預測模式(比如GPM或AWP)確定當前塊的幀間預測值時,這時候可以確定出當前塊的兩個分區。也就是說,該方法還可以包括:當預測模式參數指示使用GPM或AWP確定當前塊的幀間預測值時,確定所述當前塊的兩個分區;其中,所述兩個分區包括第一分區和第二分區。
還需要說明的是,在得到新的運動訊息候選清單後,可以確定出當前塊的第一分區對應的運動訊息和所述第二分區的運動訊息;然後根據第一分區對應的運動訊息和所述第二分區的運動訊息,能夠確定出當前塊的幀間預測值。
具體地,如圖10所示,其示出了本申請實施例提供的再一種幀間預測方法的流程示意圖。該方法可以包括:
S1001:基於所述新的運動訊息候選清單,確定所述第一分區的運動訊息和所述第二分區的運動訊息;
S1002:將第一運動訊息索引值設置為所述第一分區的運動訊息在所述新的運動訊息候選清單中的索引序號值,將第二運動訊息索引值設置為所述第二分區的運動訊息在所述新的運動訊息候選清單中的索引序號值;
S1003:利用所述第一分區的運動訊息計算所述第一分區的第一預測值,利用所述第二分區的運動訊息計算所述第二分區的第二預測值;
S1004:對所述第一預測值和所述第二預測值進行加權融合,得到所述當前塊的幀間預測值。
進一步地,在一些實施例中,該方法還可以包括:
將所述第一運動訊息索引值和所述第二運動訊息索引值寫入位元流。
早期的編解碼技術中只存在矩形的劃分方式,無論是CU、PU還是變換單元(Transform Unit,TU)的劃分。而GPM或AWP均實現了非矩形的劃分,即用一條直線可以將一個矩形塊分成兩個分區,根據直線的位置和角度的不同,劃分的兩個分區可能是三角形或梯形或矩形等,從而能使得劃分更貼近物體的邊緣或者兩個運動不同區域的邊緣。需要注意的是,這裡所說的劃分並不是真正意義上的劃分,而更像是一種預測效果上的劃分。因為這個劃分只是劃分了兩個參考塊在產生預測塊時的權重,或者可以簡單地理解為預測塊的一部分位置來自於第一個參考塊,而另一部分位置來自於第二個參考塊,並沒有真正按劃分線把當前塊劃分成兩個CU或PU或TU。這樣,在預測之後殘差的變換、量化、反變換、反量化等也都是將當前塊作為一個整體進行處理。
還需要說明的是,GPM或AWP屬於一種幀間預測技術,在編碼器側,GPM或AWP需要在位元流中傳輸一個GPM或AWP是否使用的標誌(flag)以及兩個運動訊息索引值(比如第一運動訊息索引值和第二運動訊息索引值),這樣後續解碼器側,能夠透過解析位元流直接得到GPM或AWP是否使用的flag以及兩個運動訊息索引值。
也就是說,對於當前塊而言,可以嘗試使用GPM或AWP進行預編碼及其他可用預測模式進行預編碼,確定是否使用GPM或AWP。如果GPM或AWP的預編碼代價最小,那麼可以使用GPM或AWP。同時,在嘗試使用GPM或AWP時,還可以構建運動訊息候選清單,該構建方式和解碼器側實施例所述的構建方式相同。
這樣,在編碼器側,從運動訊息候選清單中選擇兩個單向運動訊息,然後從GPM或AWP的劃分模式中選擇一種模式進行預編碼來確定GPM或AWP的預編碼代價。一種可能的方式是對所有可能的單向運動訊息候選的組合,基於所有可能的GPM或AWP的劃分模式確定其代價,然後取代價最小的兩個單向運動訊息和GPM或AWP的劃分模式的組合作為最終所確定的兩個單向運動訊息和GPM或AWP的預測模式。
最後,在位元流中寫入GPM或AWP是否使用的訊息。如果確定使用GPM或AWP,在位元流中寫入GPM或AWP的預測模式參數和兩個單向運動訊息索引值。如此,如果當前模式是跳過模式,那麼預測塊既是編碼塊,意味著當前塊的編碼結束。如果當前模式不是跳過模式,還需要在位元流中寫入量化係數;其中,量化係數由當前塊的實際值減去幀間預測值所得到的殘差而組成的殘差塊,並對殘差塊進行變換與量化得到,這時候當前塊的編碼結束。也就是說,如果當前模式不是跳過模式,需要將當前塊與幀間預測塊相減得到殘差塊,然後將殘差塊進行變換、量化、熵編碼;後續在解碼器側,對於當前模式不是跳過模式的情況,透過熵解碼解析量化係數,然後反量化、反變換以得到殘差塊,最後將殘差塊與預測塊相加得到解碼塊,意味著當前塊的解碼結束。
本實施例提供了一種幀間預測方法,應用於編碼器。確定當前塊的預測模式參數;當所述預測模式參數指示使用預設的幀間預測模式確定當前塊的幀間預測值時,確定所述當前塊的至少一個初始候選位置;在所述至少一個初始候選位置超出所述當前塊的最大編碼單元LCU邊界的情況下,對所述至少一個初始候選位置進行調整,得到所述當前塊的至少一個目標候選位置;基於所述至少一個目標候選位置,確定所述當前塊的至少一個時域運動訊息;基於所述至少一個時域運動訊息,構建新的運動訊息候選清單;根據所述新的運動訊息候選清單,確定所述當前塊的幀間預測值。這樣,在確定出當前塊的至少一個初始候選位置之後,透過對至少一個初始候選位置進行調整以使得至少一個目標候選位置不會超出當前塊的LCU邊界,從而能夠使硬體實現時不增加額外的頻寬,同時還能夠保證編解碼性能。
基於前述實施例相同的發明構思,參見圖11,其示出了本申請實施例提供的一種解碼器1100的組成結構示意圖。如圖11所示,解碼器1100可以包括:解析單元1101、第一確定單元1102、第一調整單元1103、第一構建單元1104和第一預測單元1105;其中,
解析單元1101,配置為解析位元流,獲取當前塊的預測模式參數;
第一確定單元1102,配置為當所述預測模式參數指示使用預設的幀間預測模式確定當前塊的幀間預測值時,確定所述當前塊的至少一個初始候選位置;
第一調整單元1103,配置為在所述至少一個初始候選位置超出所述當前塊的最大編碼單元LCU邊界的情況下,對所述至少一個初始候選位置進行調整,得到所述當前塊的至少一個目標候選位置;
第一確定單元1102,還配置為基於所述至少一個目標候選位置,確定所述當前塊的至少一個時域運動訊息;
第一構建單元1104,配置為基於所述至少一個時域運動訊息,構建新的運動訊息候選清單;
第一預測單元1105,配置為根據所述新的運動訊息候選清單,確定所述當前塊的幀間預測值。
在一些實施例中,第一確定單元1102,還配置為在所述至少一個初始候選位置未超出所述當前塊的LCU邊界的情況下,將所述至少一個初始候選位置確定為所述當前塊的至少一個目標候選位置。
在一些實施例中,第一確定單元1102,還配置為獲取所述當前塊的至少一個角初始候選位置,組成初始候選位置集合;其中,所述至少一個角初始候選位置包括下述至少一項:左上初始候選位置、右上初始候選位置、左下初始候選位置和右下初始候選位置;以及從所述初始候選位置集合中,確定所述當前塊的至少一個初始候選位置。
在一些實施例中,所述左上初始候選位置至少包括下述其中之一:第一左上候選位置、第二左上候選位置、第三左上候選位置和第四左上候選位置;
所述右上初始候選位置至少包括下述其中之一:第一右上候選位置、第二右上候選位置、第三右上候選位置和第四右上候選位置;
所述左下初始候選位置至少包括下述其中之一:第一左下候選位置、第二左下候選位置、第三左下候選位置和第四左下候選位置;
所述右下初始候選位置至少包括下述其中之一:第一右下候選位置、第二右下候選位置、第三右下候選位置和第四右下候選位置;
其中,所述第一左上候選位置、所述第一右上候選位置、所述第一左下候選位置和所述第一右下候選位置表徵所述當前塊內部的四個角位置,所述第二左上候選位置、所述第三左上候選位置和所述第四左上候選位置表徵所述當前塊外部的左上角位置,所述第二右上候選位置、所述第三右上候選位置和所述第四右上候選位置表徵所述當前塊外部的右上角位置,所述第二左下候選位置、所述第三左下候選位置和所述第四左下候選位置表徵所述當前塊外部的左下角位置,所述第二右下候選位置、所述第三右下候選位置和所述第四右下候選位置表徵所述當前塊外部的右下角位置。
在一些實施例中,第一確定單元1102,還配置為若所述至少一個初始候選位置包括所述第一左上候選位置,和/或,所述第一右上候選位置,和/或,所述第一左下候選位置,和/或,所述第一右下候選位置,則確定所述至少一個初始候選位置未超出LCU邊界,將所述至少一個初始候選位置確定為所述當前塊的至少一個目標候選位置。
在一些實施例中,第一確定單元1102,還配置為若所述至少一個初始候選位置包括其中一個角的初始候選位置,且所述其中一個角的初始候選位置超出LCU邊界,則從所述其中一個角對應的候選位置中選擇未超出所述LCU邊界的候選位置,將所述其中一個角的初始候選位置調整到所選擇的候選位置,以得到所述當前塊的一個目標候選位置。
在一些實施例中,第一確定單元1102,還配置為當所述其中一個角的初始候選位置為所述右下初始候選位置時,若所述至少一個初始候選位置包括所述右下初始候選位置,且所述右下初始候選位置超出LCU邊界,則從所述當前塊外部的右下角位置中選擇未超出LCU邊界的候選位置,將所述右下初始候選位置調整到所選擇的候選位置,以得到所述當前塊的一個目標候選位置。
進一步地,第一確定單元1102,還配置為若從所述當前塊外部的右下角位置中沒有選擇到未超出LCU邊界的候選位置,則將所述右下初始候選位置調整到所述當前塊內部的右下角位置,以得到所述當前塊的一個目標候選位置。
在一些實施例中,第一確定單元1102,還配置為若所述至少一個初始候選位置包括其中一個角的初始候選位置,且所述其中一個角的初始候選位置超出LCU邊界,則從除所述其中一個角之外剩餘角對應的候選位置中選擇未超出所述LCU邊界的候選位置,將所述其中一個角的初始候選位置調整到所選擇的候選位置,以得到所述當前塊的一個目標候選位置。
在一些實施例中,第一確定單元1102,還配置為當所述其中一個角的初始候選位置為所述右下初始候選位置時,所述方法還包括:
若所述至少一個初始候選位置包括所述右下初始候選位置,且所述右下初始候選位置超出LCU邊界,則在所述右上初始候選位置未超出LCU邊界的情況下,將所述右下初始候選位置調整到所述右上初始候選位置,以得到所述當前塊的一個目標候選位置。
在一些實施例中,第一確定單元1102,還配置為若所述至少一個初始候選位置包括其中一個角的初始候選位置,且所述其中一個角的初始候選位置超出LCU邊界,且所述其中一個角對應的候選位置中僅所述當前塊內部的候選位置未超出LCU邊界,則從除所述其中一個角之外剩餘角對應的候選位置中選擇未超出所述LCU邊界的候選位置,將所述其中一個角的初始候選位置調整到所選擇的候選位置,以得到所述當前塊的一個目標候選位置。
在一些實施例中,第一確定單元1102,還配置為當所述其中一個角的初始候選位置為所述右下初始候選位置時,若所述至少一個初始候選位置包括所述右下初始候選位置,且所述右下初始候選位置超出LCU邊界,且所述當前塊內部和外部的右下角位置中僅所述第一右下候選位置未超出LCU邊界,則在所述右上初始候選位置未超出LCU邊界的情況下,將所述右下初始候選位置調整到所述右上初始候選位置,以得到所述當前塊的一個目標候選位置。
在一些實施例中,參見圖11,解碼器1100還可以包括第一設置單元1106和第一判斷單元1107;其中,
第一設置單元1106,配置為針對不同的劃分模式,根據預設優先順序設置所述初始候選位置集合中不同初始候選位置對應的優先順序;
第一判斷單元1107,配置為按照所述預設優先順序選取一個初始候選位置,並判斷所選取的初始候選位置是否超出LCU邊界;以及若所選取的初始候選位置超出LCU邊界,則返回執行所述按照所述預設優先順序選取一個初始候選位置的步驟;若所選取的初始候選位置未超出LCU邊界,則將所選取的初始候選位置確定為所述當前塊的一個目標候選位置。
在一些實施例中,第一設置單元1106,還配置為針對不同的劃分模式,根據預設順序對所述初始候選位置集合中不同初始候選位置進行排序;
第一判斷單元1107,還配置為按照所述預設順序選取一個初始候選位置,並判斷所選取的初始候選位置是否超出LCU邊界;以及若所選取的初始候選位置超出LCU邊界,則返回執行所述按照所述預設順序選取一個初始候選位置的步驟;若所選取的初始候選位置未超出LCU邊界,則將所選取的初始候選位置確定為所述當前塊的一個目標候選位置。
在一些實施例中,第一調整單元1103,還配置為調整時域運動訊息在所述新的運動訊息候選清單中的比例值;以及根據所調整的比例值,控制所述新的運動訊息候選清單中預留至少兩個時域運動訊息的填充位置。
在一些實施例中,第一確定單元1102,還配置為確定所述至少一個目標候選位置中每一目標候選位置對應的參考幀訊息;以及針對每一目標候選位置,在對應的參考幀訊息中確定與所述目標候選位置關聯的時域位置,並將所述時域位置使用的運動訊息確定為所述目標候選位置對應的時域運動訊息;基於所述至少一個目標候選位置,對應得到至少一個時域運動訊息。
在一些實施例中,所述預設的幀間預測模式包括:幾何劃分預測模式或角度加權預測模式;
第一確定單元1102,還配置為當所述預測模式參數指示使用所述預設的幀間預測模式確定當前塊的幀間預測值時,確定所述當前塊的兩個分區;其中,所述兩個分區包括第一分區和第二分區。
在一些實施例中,解析單元1101,還配置為解析位元流,確定所述第一分區對應的第一運動訊息索引值和所述第二分區對應的第二運動訊息索引值;
第一確定單元1102,還配置為基於所述新的運動訊息候選清單,將所述第一運動訊息索引值指示的所述新的運動訊息候選清單中的運動訊息確定為所述第一分區的運動訊息,將所述第二運動訊息索引值指示的所述新的運動訊息候選清單中的運動訊息確定為所述第二分區的運動訊息;
第一預測單元1105,還配置為利用所述第一分區的運動訊息計算所述第一分區的第一預測值,利用所述第二分區的運動訊息計算所述第二分區的第二預測值;以及對所述第一預測值和所述第二預測值進行加權融合,得到所述當前塊的幀間預測值。
可以理解地,在本申請實施例中,“單元”可以是部分電路、部分處理器、部分程式或軟體等等,當然也可以是模組,還可以是非模組化的。而且在本實施例中的各組成部分可以集成在一個處理單元中,也可以是各個單元單獨實體存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以採用硬體的形式實現,也可以採用軟體功能模組的形式實現。
所述集成的單元如果以軟體功能模組的形式實現並非作為獨立的產品進行銷售或使用時,可以儲存在一個電腦可讀取儲存媒介中,基於這樣的理解,本實施例的技術方案本質上或者說對現有技術做出貢獻的部分或者該技術方案的全部或部分可以以軟體產品的形式體現出來,該電腦軟體產品儲存在一個儲存媒介中,包括若干指令用以使得一台電腦設備(可以是個人電腦,伺服器,或者網路設備等)或processor(處理器)執行本實施例所述方法的全部或部分步驟。而前述的儲存媒介包括:隨身碟、行動硬碟、唯讀記憶體(Read Only Memory,ROM)、隨機存取記憶體(Random Access Memory,RAM)、磁碟或者光碟等各種可以儲存程式碼的媒介。
因此,本申請實施例提供了一種電腦儲存媒介,應用於解碼器1100,該電腦儲存媒介儲存有幀間預測程式,所述幀間預測程式被第一處理器執行時實現前述實施例中解碼器側所述的方法。
基於上述解碼器1100的組成以及電腦儲存媒介,參見圖12,其示出了本申請實施例提供的解碼器1100的具體硬體結構示例,可以包括:第一通訊介面1201、第一記憶體1202和第一處理器1203;各個元件透過第一匯流排系統1204耦合在一起。可理解,第一匯流排系統1204用於實現這些元件之間的連接通訊。第一匯流排系統1204除包括資料匯流排之外,還包括電源匯流排、控制匯流排和狀態訊號匯流排。但是為了清楚說明起見,在圖12中將各種匯流排都標為第一匯流排系統1204。其中,
第一通訊介面1201,用於在與其他外部網路元件之間進行收發訊息過程中,訊號的接收和發送;
第一記憶體1202,用於儲存能夠在第一處理器1203上運行的電腦程式;
第一處理器1203,用於在運行所述電腦程式時,執行:
解析位元流,獲取當前塊的預測模式參數;
當所述預測模式參數指示使用預設的幀間預測模式確定當前塊的幀間預測值時,確定所述當前塊的至少一個初始候選位置;
在所述至少一個初始候選位置超出所述當前塊的最大編碼單元LCU邊界的情況下,對所述至少一個初始候選位置進行調整,得到所述當前塊的至少一個目標候選位置;
基於所述至少一個目標候選位置,確定所述當前塊的至少一個時域運動訊息;
基於所述至少一個時域運動訊息,構建新的運動訊息候選清單;
根據所述新的運動訊息候選清單,確定所述當前塊的幀間預測值。
可以理解,本申請實施例中的第一記憶體1202可以是揮發性記憶體或非揮發性記憶體,或可包括揮發性和非揮發性記憶體兩者。其中,非揮發性記憶體可以是唯讀記憶體(Read-Only Memory,ROM)、可程式唯讀記憶體(Programmable ROM,PROM)、可擦除可程式唯讀記憶體(Erasable PROM,EPROM)、電可擦除可程式唯讀記憶體(Electrically EPROM,EEPROM)或快閃記憶體。揮發性記憶體可以是隨機存取記憶體(Random Access Memory,RAM),其用作外部快取記憶體。透過示例性但不是限制性說明,許多形式的RAM可用,例如靜態隨機存取記憶體(Static RAM,SRAM)、動態隨機存取記憶體(Dynamic RAM,DRAM)、同步動態隨機存取記憶體(Synchronous DRAM,SDRAM)、雙倍數據速率同步動態隨機存取記憶體(Double Data Rate SDRAM,DDRSDRAM)、增強型同步動態隨機存取記憶體(Enhanced SDRAM,ESDRAM)、同步連接動態隨機存取記憶體(Synclink DRAM,SLDRAM)和直接記憶體匯流排隨機存取記憶體(Direct Rambus RAM,DRRAM)。本申請描述的系統和方法的第一記憶體1202旨在包括但不限於這些和任意其它適合類型的記憶體。
而第一處理器1203可能是一種積體電路晶片,具有訊號的處理能力。在實現過程中,上述方法的各步驟可以透過第一處理器1203中的硬體的集成邏輯電路或者軟體形式的指令完成。上述的第一處理器1203可以是通用處理器、數位訊號處理器(Digital Signal Processor,DSP)、專用積體電路(Application Specific Integrated Circuit,ASIC)、場域可程式閘陣列(Field Programmable Gate Array,FPGA)或者其他可程式邏輯器件、離散閘或者電晶體邏輯器件、離散硬體元件。可以實現或者執行本申請實施例中的公開的各方法、步驟及邏輯方塊圖。通用處理器可以是微處理器或者該處理器也可以是任何常規的處理器等。結合本申請實施例所公開的方法的步驟可以直接體現為硬體解碼處理器執行完成,或者用解碼處理器中的硬體及軟體模組組合執行完成。軟體模組可以位於隨機記憶體,快閃記憶體、唯讀記憶體,可程式唯讀記憶體或者電可讀寫可程式記憶體、暫存器等本領域成熟的儲存媒介中。該儲存媒介位於第一記憶體1202,第一處理器1203讀取第一記憶體1202中的訊息,結合其硬體完成上述方法的步驟。
可以理解的是,本申請描述的這些實施例可以用硬體、軟體、韌體、中介軟體、微碼或其組合來實現。對於硬體實現,處理單元可以實現在一個或多個專用積體電路(Application Specific Integrated Circuits,ASIC)、數位訊號處理器(Digital Signal Processing,DSP)、數位訊號處理設備(DSP Device,DSPD)、可程式邏輯裝置(Programmable Logic Device,PLD)、場域可程式閘陣列(Field-Programmable Gate Array,FPGA)、通用處理器、控制器、微控制器、微處理器、用於執行本申請所述功能的其它電子單元或其組合中。對於軟體實現,可透過執行本申請所述功能的模組(例如過程、函數等)來實現本申請所述的技術。軟體代碼可儲存在記憶體中並透過處理器執行。記憶體可以在處理器中或在處理器外部實現。
可選地,作為另一個實施例,第一處理器1203還配置為在運行所述電腦程式時,執行前述實施例中任一項所述的方法。
本實施例提供了一種解碼器,該解碼器可以包括解析單元、第一確定單元、第一調整單元、第一構建單元和第一預測單元。在該解碼器中,確定出當前塊的至少一個初始候選位置之後,透過對至少一個初始候選位置進行調整以使得至少一個目標候選位置不會超出當前塊的LCU邊界,從而能夠使硬體實現時不增加額外的頻寬,同時還能夠保證編解碼性能。
基於前述實施例相同的發明構思,參見圖13,其示出了本申請實施例提供的一種編碼器130的組成結構示意圖。如圖13所示,該編碼器130可以包括:第二確定單元1301、第二調整單元1302、第二構建單元1303和第二預測單元1304;其中,
第二確定單元1301,配置為確定當前塊的預測模式參數;及當所述預測模式參數指示使用預設的幀間預測模式確定當前塊的幀間預測值時,確定所述當前塊的至少一個初始候選位置;
第二調整單元1302,配置為在所述至少一個初始候選位置超出所述當前塊的最大編碼單元LCU邊界的情況下,對所述至少一個初始候選位置進行調整,得到所述當前塊的至少一個目標候選位置;
第二確定單元1301,還配置為基於所述至少一個目標候選位置,確定所述當前塊的至少一個時域運動訊息;
第二構建單元1303,配置為基於所述至少一個時域運動訊息,構建新的運動訊息候選清單;
第二預測單元1304,配置為根據所述新的運動訊息候選清單,確定所述當前塊的幀間預測值。
在一些實施例中,參見圖13,編碼器130還可以包括預編碼單元1305,配置為利用多種預測模式對所述當前塊進行預編碼處理,獲得每一種預測模式對應的位元率失真代價值;以及從所獲得的多個位元率失真代價值中選擇最小位元率失真代價值,將所述最小位元率失真代價值對應的預測模式確定為當前塊的預測模式參數。
在一些實施例中,第二確定單元1301,還配置為在所述至少一個初始候選位置未超出所述當前塊的LCU邊界的情況下,將所述至少一個初始候選位置確定為所述當前塊的至少一個目標候選位置。
在一些實施例中,第二確定單元1301,還配置為獲取所述當前塊的至少一個角初始候選位置,組成初始候選位置集合;其中,所述至少一個角初始候選位置包括下述至少一項:左上初始候選位置、右上初始候選位置、左下初始候選位置和右下初始候選位置;以及從所述初始候選位置集合中,確定所述當前塊的至少一個初始候選位置。
在一些實施例中,所述左上初始候選位置至少包括下述其中之一:第一左上候選位置、第二左上候選位置、第三左上候選位置和第四左上候選位置;
所述右上初始候選位置至少包括下述其中之一:第一右上候選位置、第二右上候選位置、第三右上候選位置和第四右上候選位置;
所述左下初始候選位置至少包括下述其中之一:第一左下候選位置、第二左下候選位置、第三左下候選位置和第四左下候選位置;
所述右下初始候選位置至少包括下述其中之一:第一右下候選位置、第二右下候選位置、第三右下候選位置和第四右下候選位置;
其中,所述第一左上候選位置、所述第一右上候選位置、所述第一左下候選位置和所述第一右下候選位置表徵所述當前塊內部的四個角位置,所述第二左上候選位置、所述第三左上候選位置和所述第四左上候選位置表徵所述當前塊外部的左上角位置,所述第二右上候選位置、所述第三右上候選位置和所述第四右上候選位置表徵所述當前塊外部的右上角位置,所述第二左下候選位置、所述第三左下候選位置和所述第四左下候選位置表徵所述當前塊外部的左下角位置,所述第二右下候選位置、所述第三右下候選位置和所述第四右下候選位置表徵所述當前塊外部的右下角位置。
在一些實施例中,第二確定單元1301,還配置為若所述至少一個初始候選位置包括所述第一左上候選位置,和/或,所述第一右上候選位置,和/或,所述第一左下候選位置,和/或,所述第一右下候選位置,則確定所述至少一個初始候選位置未超出LCU邊界,將所述至少一個初始候選位置確定為所述當前塊的至少一個目標候選位置。
在一些實施例中,第二確定單元1301,還配置為若所述至少一個初始候選位置包括其中一個角的初始候選位置,且所述其中一個角的初始候選位置超出LCU邊界,則從所述其中一個角對應的候選位置中選擇未超出所述LCU邊界的候選位置,將所述其中一個角的初始候選位置調整到所選擇的候選位置,以得到所述當前塊的一個目標候選位置。
在一些實施例中,第二確定單元1301,還配置為當所述其中一個角的初始候選位置為所述右下初始候選位置時,若所述至少一個初始候選位置包括所述右下初始候選位置,且所述右下初始候選位置超出LCU邊界,則從所述當前塊外部的右下角位置中選擇未超出LCU邊界的候選位置,將所述右下初始候選位置調整到所選擇的候選位置,以得到所述當前塊的一個目標候選位置。
進一步地,第二確定單元1301,還配置為若從所述當前塊外部的右下角位置中沒有選擇到未超出LCU邊界的候選位置,則將所述右下初始候選位置調整到所述當前塊內部的右下角位置,以得到所述當前塊的一個目標候選位置。
在一些實施例中,第二確定單元1301,還配置為若所述至少一個初始候選位置包括其中一個角的初始候選位置,且所述其中一個角的初始候選位置超出LCU邊界,則從除所述其中一個角之外剩餘角對應的候選位置中選擇未超出所述LCU邊界的候選位置,將所述其中一個角的初始候選位置調整到所選擇的候選位置,以得到所述當前塊的一個目標候選位置。
在一些實施例中,第二確定單元1301,還配置為當所述其中一個角的初始候選位置為所述右下初始候選位置時,若所述至少一個初始候選位置包括所述右下初始候選位置,且所述右下初始候選位置超出LCU邊界,則在所述右上初始候選位置未超出LCU邊界的情況下,將所述右下初始候選位置調整到所述右上初始候選位置,以得到所述當前塊的一個目標候選位置。
在一些實施例中,第二確定單元1301,還配置為若所述至少一個初始候選位置包括其中一個角的初始候選位置,且所述其中一個角的初始候選位置超出LCU邊界,且所述其中一個角對應的候選位置中僅所述當前塊內部的候選位置未超出LCU邊界,則從除所述其中一個角之外剩餘角對應的候選位置中選擇未超出所述LCU邊界的候選位置,將所述其中一個角的初始候選位置調整到所選擇的候選位置,以得到所述當前塊的一個目標候選位置。
在一些實施例中,第二確定單元1301,還配置為當所述其中一個角的初始候選位置為所述右下初始候選位置時,若所述至少一個初始候選位置包括所述右下初始候選位置,且所述右下初始候選位置超出LCU邊界,且所述當前塊內部和外部的右下角位置中僅所述第一右下候選位置未超出LCU邊界,則在所述右上初始候選位置未超出LCU邊界的情況下,將所述右下初始候選位置調整到所述右上初始候選位置,以得到所述當前塊的一個目標候選位置。
在一些實施例中,參見圖13,編碼器130還可以包括第二設置單元1306和第二判斷單元1307;其中,
第二設置單元1306,配置為針對不同的劃分模式,根據預設優先順序設置所述初始候選位置集合中不同初始候選位置對應的優先順序;
第二判斷單元1307,配置為按照所述預設優先順序選取一個初始候選位置,並判斷所選取的初始候選位置是否超出LCU邊界;以及若所選取的初始候選位置超出LCU邊界,則返回執行所述按照所述預設優先順序選取一個初始候選位置的步驟;若所選取的初始候選位置未超出LCU邊界,則將所選取的初始候選位置確定為所述當前塊的一個目標候選位置。
在一些實施例中,第二設置單元1306,還配置為針對不同的劃分模式,根據預設順序對所述初始候選位置集合中不同初始候選位置進行排序;
第二判斷單元1307,還配置為按照所述預設順序選取一個初始候選位置,並判斷所選取的初始候選位置是否超出LCU邊界;以及若所選取的初始候選位置超出LCU邊界,則返回執行所述按照所述預設順序選取一個初始候選位置的步驟;若所選取的初始候選位置未超出LCU邊界,則將所選取的初始候選位置確定為所述當前塊的一個目標候選位置。
在一些實施例中,第二調整單元1302,還配置為調整時域運動訊息在所述新的運動訊息候選清單中的比例值;以及根據所調整的比例值,控制所述新的運動訊息候選清單中預留至少兩個時域運動訊息的填充位置。
在一些實施例中,第二確定單元1301,還配置為確定所述至少一個目標候選位置中每一目標候選位置對應的參考幀訊息;以及針對每一目標候選位置,在對應的參考幀訊息中確定與所述目標候選位置關聯的時域位置,並將所述時域位置使用的運動訊息確定為所述目標候選位置對應的時域運動訊息;基於所述至少一個目標候選位置,對應得到至少一個時域運動訊息。
在一些實施例中,所述預設的幀間預測模式包括:幾何劃分預測模式或角度加權預測模式;
第二確定單元1301,還配置為當所述預測模式參數指示使用所述預設的幀間預測模式確定當前塊的幀間預測值時,確定所述當前塊的兩個分區;其中,所述兩個分區包括第一分區和第二分區。
在一些實施例中,第二確定單元1301,還配置為基於所述新的運動訊息候選清單,確定所述第一分區的運動訊息和所述第二分區的運動訊息,並將第一運動訊息索引值設置為所述第一分區的運動訊息在所述新的運動訊息候選清單中的索引序號值,將第二運動訊息索引值設置為所述第二分區的運動訊息在所述新的運動訊息候選清單中的索引序號值;
第二預測單元1304,還配置為利用所述第一分區的運動訊息計算所述第一分區的第一預測值,利用所述第二分區的運動訊息計算所述第二分區的第二預測值;以及對所述第一預測值和所述第二預測值進行加權融合,得到所述當前塊的幀間預測值。
在一些實施例中,參見圖13,編碼器130還可以包括寫入單元1308,配置為將所述第一運動訊息索引值和所述第二運動訊息索引值寫入位元流。
可以理解地,在本實施例中,“單元”可以是部分電路、部分處理器、部分程式或軟體等等,當然也可以是模組,還可以是非模組化的。而且在本實施例中的各組成部分可以集成在一個處理單元中,也可以是各個單元單獨實體存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以採用硬體的形式實現,也可以採用軟體功能模組的形式實現。
所述集成的單元如果以軟體功能模組的形式實現並非作為獨立的產品進行銷售或使用時,可以儲存在一個電腦可讀取儲存媒介中,基於這樣的理解,本實施例提供了一種電腦儲存媒介,應用於編碼器130,該電腦儲存媒介儲存有幀間預測程式,所述幀間預測程式被第二處理器執行時實現前述實施例中編碼器側所述的方法。
基於上述編碼器130的組成以及電腦儲存媒介,參見圖14,其示出了本申請實施例提供的編碼器130的具體硬體結構示例,可以包括:第二通訊介面1401、第二記憶體1402和第二處理器1403;各個元件透過第二匯流排系統1404耦合在一起。可理解,第二匯流排系統1404用於實現這些元件之間的連接通訊。第二匯流排系統1404除包括資料匯流排之外,還包括電源匯流排、控制匯流排和狀態訊號匯流排。但是為了清楚說明起見,在圖14中將各種匯流排都標為第二匯流排系統1404。其中,
第二通訊介面1401,用於在與其他外部網路元件之間進行收發訊息過程中,訊號的接收和發送;
第二記憶體1402,用於儲存能夠在第二處理器1403上運行的電腦程式;
第二處理器1403,用於在運行所述電腦程式時,執行:
確定當前塊的預測模式參數;
當所述預測模式參數指示使用預設的幀間預測模式確定當前塊的幀間預測值時,確定所述當前塊的至少一個初始候選位置;
在所述至少一個初始候選位置超出所述當前塊的最大編碼單元LCU邊界的情況下,對所述至少一個初始候選位置進行調整,得到所述當前塊的至少一個目標候選位置;
基於所述至少一個目標候選位置,確定所述當前塊的至少一個時域運動訊息;
基於所述至少一個時域運動訊息,構建新的運動訊息候選清單;
根據所述新的運動訊息候選清單,確定所述當前塊的幀間預測值。
可選地,作為另一個實施例,第二處理器1403還配置為在運行所述電腦程式時,執行前述實施例中任一項所述的方法。
可以理解,第二記憶體1402與第一記憶體1202的硬體功能類似,第二處理器1403與第一處理器1203的硬體功能類似;這裡不再詳述。
本實施例提供了一種編碼器,該編碼器可以包括第二確定單元、第二調整單元、第二構建單元和第二預測單元。在該編碼器中,確定出當前塊的至少一個初始候選位置後,透過對至少一個初始候選位置進行調整以使得至少一個目標候選位置不會超出當前塊的LCU邊界,從而能夠使硬體實現時不增加額外的頻寬,同時還能夠保證編解碼性能。
需要說明的是,在本申請中,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者裝置不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者裝置所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,並不排除在包括該要素的過程、方法、物品或者裝置中還存在另外的相同要素。
上述本申請實施例序號僅僅為了描述,不代表實施例的優劣。
本申請所提供的幾個方法實施例中所揭露的方法,在不衝突的情況下可以任意組合,得到新的方法實施例。
本申請所提供的幾個產品實施例中所揭露的特徵,在不衝突的情況下可以任意組合,得到新的產品實施例。
本申請所提供的幾個方法或設備實施例中所揭露的特徵,在不衝突的情況下可以任意組合,得到新的方法實施例或設備實施例。
以上所述,僅為本申請的具體實施方式,但本申請的保護範圍並不局限於此,任何熟悉本技術領域的技術人員在本申請揭露的技術範圍內,可輕易想到變化或替換,都應涵蓋在本申請的保護範圍之內。因此,本申請的保護範圍應以所述請求項的保護範圍為準。
11:影像編碼系統 110:解碼圖像暫存單元 111:變換單元 112:量化單元 113:模式選擇和編碼控制邏輯單元 114:幀內預測單元 115:幀間預測單元 116:反量化單元 117:反變換單元 118:迴路濾波單元 119:編碼單元 12:影像解碼系統 121:解碼單元 122:反量化單元 123:幀內預測單元 124:運動補償單元 125:迴路濾波單元 126:解碼圖像暫存單元 127:反變換單元 1100:解碼器 1101:解析單元 1102:第一確定單元 1103:第一調整單元 1104:第一構建單元 1105:第一預測單元 1106:第一設置單元 1107:第一判斷單元 1201:第一通訊介面 1202:第一記憶體 1203:第一處理器 1204:第一匯流排系統 130:編碼器 1301:第二確定單元 1302:第二調整單元 1303:第二構建單元 1304:第二預測單元 1305:預編碼單元 1306:第二設置單元 1307:第二判斷單元 1308:寫入單元 1401:第二通訊介面 1402:第二記憶體 1403:第二處理器 1404:第二匯流排系統 S501~S506:步驟 S701~S704:步驟 S901~S906:步驟 S1001~S1004:步驟
圖1為本申請實施例提供的一種典型圖像組的結構示意圖;
圖2A為本申請實施例提供的一種當前塊與相鄰塊的空間位置關係示意圖;
圖2B為本申請實施例提供的另一種當前塊與相鄰塊的空間位置關係示意圖;
圖3為本申請實施例提供的一種片結構的空間位置關係示意圖;
圖4A為本申請實施例提供的一種影像編碼系統的組成方塊圖示意圖;
圖4B為本申請實施例提供的一種影像解碼系統的組成方塊圖示意圖;
圖5為本申請實施例提供的一種幀間預測方法的流程示意圖;
圖6A為本申請實施例提供的一種初始候選位置的結構示意圖;
圖6B為本申請實施例提供的另一種初始候選位置的結構示意圖;
圖6C為本申請實施例提供的又一種初始候選位置的結構示意圖;
圖6D為本申請實施例提供的再一種初始候選位置的結構示意圖;
圖6E為本申請實施例提供的再一種初始候選位置的結構示意圖;
圖7為本申請實施例提供的另一種幀間預測方法的流程示意圖;
圖8A為本申請實施例提供的一種GPM在64×64的當前塊上多種劃分模式的權重分配示意圖;
圖8B為本申請實施例提供的一種AWP在64×64的當前塊上多種劃分模式的權重分配示意圖;
圖9為本申請實施例提供的又一種幀間預測方法的流程示意圖;
圖10為本申請實施例提供的再一種幀間預測方法的流程示意圖;
圖11為本申請實施例提供的一種解碼器的組成結構示意圖;
圖12為本申請實施例提供的一種解碼器的硬體結構示意圖;
圖13為本申請實施例提供的一種編碼器的組成結構示意圖;
圖14為本申請實施例提供的一種編碼器的硬體結構示意圖。
S501~S506:步驟

Claims (45)

  1. 一種幀間預測方法,應用於解碼器,所述方法包括: 解析位元流,獲取當前塊的預測模式參數; 當所述預測模式參數指示使用預設的幀間預測模式確定當前塊的幀間預測值時,確定所述當前塊的至少一個初始候選位置; 在所述至少一個初始候選位置超出所述當前塊的最大編碼單元LCU邊界的情況下,對所述至少一個初始候選位置進行調整,得到所述當前塊的至少一個目標候選位置; 基於所述至少一個目標候選位置,確定所述當前塊的至少一個時域運動訊息; 基於所述至少一個時域運動訊息,構建運動訊息候選清單; 根據所述運動訊息候選清單,確定所述當前塊的幀間預測值。
  2. 根據請求項1所述的方法,所述方法還包括: 在所述至少一個初始候選位置未超出所述當前塊的LCU邊界的情況下,將所述至少一個初始候選位置確定為所述當前塊的至少一個目標候選位置。
  3. 根據請求項1所述的方法,其中,所述確定所述當前塊的至少一個初始候選位置,包括: 右下初始候選位置; 從所述初始候選位置集合中,確定所述當前塊的至少一個初始候選位置。
  4. 根據請求項3所述的方法,其中, 所述右下初始候選位置至少包括下述其中之一:第一右下候選位置、第二右下候選位置、第三右下候選位置和第四右下候選位置; 其中,所述第一右下候選位置表徵所述當前塊內部的四個角位置,所述第二右下候選位置、所述第三右下候選位置和所述第四右下候選位置表徵所述當前塊外部的右下角位置。
  5. 根據請求項4所述的方法,所述方法還包括: 若所述至少一個初始候選位置包括所述第一左上候選位置,和/或,所述第一右上候選位置,和/或,所述第一左下候選位置,和/或,所述第一右下候選位置,則確定所述至少一個初始候選位置未超出LCU邊界,將所述至少一個初始候選位置確定為所述當前塊的至少一個目標候選位置。
  6. 根據請求項4所述的方法,所述方法還包括: 若所述至少一個初始候選位置包括其中一個角的初始候選位置,且所述其中一個角的初始候選位置超出LCU邊界,則從所述其中一個角對應的候選位置中選擇未超出所述LCU邊界的候選位置,將所述其中一個角的初始候選位置調整到所選擇的候選位置,以得到所述當前塊的一個目標候選位置。
  7. 根據請求項6所述的方法,其中,當所述其中一個角的初始候選位置為所述右下初始候選位置時,所述方法還包括: 若所述至少一個初始候選位置包括所述右下初始候選位置,且所述右下初始候選位置超出LCU邊界,則從所述當前塊外部的右下角位置中選擇未超出LCU邊界的候選位置,將所述右下初始候選位置調整到所選擇的候選位置,以得到所述當前塊的一個目標候選位置。
  8. 根據請求項7所述的方法,所述方法還包括: 若從所述當前塊外部的右下角位置中沒有選擇到未超出LCU邊界的候選位置,則將所述右下初始候選位置調整到所述當前塊內部的右下角位置,以得到所述當前塊的一個目標候選位置。
  9. 根據請求項4所述的方法,所述方法還包括: 若所述至少一個初始候選位置包括其中一個角的初始候選位置,且所述其中一個角的初始候選位置超出LCU邊界,則從除所述其中一個角之外剩餘角對應的候選位置中選擇未超出所述LCU邊界的候選位置,將所述其中一個角的初始候選位置調整到所選擇的候選位置,以得到所述當前塊的一個目標候選位置。
  10. 根據請求項9所述的方法,其中,當所述其中一個角的初始候選位置為所述右下初始候選位置時,所述方法還包括: 若所述至少一個初始候選位置包括所述右下初始候選位置,且所述右下初始候選位置超出LCU邊界,則在所述右上初始候選位置未超出LCU邊界的情況下,將所述右下初始候選位置調整到所述右上初始候選位置,以得到所述當前塊的一個目標候選位置。
  11. 根據請求項4所述的方法,所述方法還包括: 若所述至少一個初始候選位置包括其中一個角的初始候選位置,且所述其中一個角的初始候選位置超出LCU邊界,且所述其中一個角對應的候選位置中僅所述當前塊內部的候選位置未超出LCU邊界,則從除所述其中一個角之外剩餘角對應的候選位置中選擇未超出所述LCU邊界的候選位置,將所述其中一個角的初始候選位置調整到所選擇的候選位置,以得到所述當前塊的一個目標候選位置。
  12. 根據請求項11所述的方法,其中,當所述其中一個角的初始候選位置為所述右下初始候選位置時,所述方法還包括: 若所述至少一個初始候選位置包括所述右下初始候選位置,且所述右下初始候選位置超出LCU邊界,且所述當前塊內部和外部的右下角位置中僅所述第一右下候選位置未超出LCU邊界,則在所述右上初始候選位置未超出LCU邊界的情況下,將所述右下初始候選位置調整到所述右上初始候選位置,以得到所述當前塊的一個目標候選位置。
  13. 根據請求項3所述的方法,所述方法還包括: 針對不同的劃分模式,根據預設優先順序設置所述初始候選位置集合中不同初始候選位置對應的優先順序; 按照所述預設優先順序選取一個初始候選位置,並判斷所選取的初始候選位置是否超出LCU邊界; 若所選取的初始候選位置超出LCU邊界,則返回執行所述按照所述預設優先順序選取一個初始候選位置的步驟; 若所選取的初始候選位置未超出LCU邊界,則將所選取的初始候選位置確定為所述當前塊的一個目標候選位置。
  14. 根據請求項3所述的方法,所述方法還包括: 針對不同的劃分模式,根據預設順序對所述初始候選位置集合中不同初始候選位置進行排序; 按照所述預設順序選取一個初始候選位置,並判斷所選取的初始候選位置是否超出LCU邊界; 若所選取的初始候選位置超出LCU邊界,則返回執行所述按照所述預設順序選取一個初始候選位置的步驟; 若所選取的初始候選位置未超出LCU邊界,則將所選取的初始候選位置確定為所述當前塊的一個目標候選位置。
  15. 根據請求項1所述的方法,所述方法還包括: 調整時域運動訊息在所述運動訊息候選清單中的比例值; 根據所調整的比例值,控制所述運動訊息候選清單中預留至少兩個時域運動訊息的填充位置。
  16. 根據請求項1所述的方法,其中,所述基於所述至少一個目標候選位置,確定所述當前塊的至少一個時域運動訊息,包括: 確定所述至少一個目標候選位置中每一目標候選位置對應的參考幀訊息; 針對每一目標候選位置,在對應的參考幀訊息中確定與所述目標候選位置關聯的時域位置,並根據所述時域位置使用的運動訊息確定為所述目標候選位置對應的時域運動訊息; 基於所述至少一個目標候選位置,對應得到至少一個時域運動訊息。
  17. 根據請求項1所述的方法,其中,所述預設的幀間預測模式包括:角度加權預測模式。
  18. 根據請求項1所述的方法,其中,所述方法還包括: 確定所述當前塊的兩個分區;其中,所述兩個分區包括第一分區和第二分區,所述第一分區和所述第二分區的運動訊息不同。
  19. 根據請求項17所述的方法,其中,所述根據所述運動訊息候選清單,確定所述當前塊的幀間預測值,包括: 解析位元流,確定所述第一分區對應的第一運動訊息索引值和所述第二分區對應的第二運動訊息索引值; 基於所述運動訊息候選清單,根據所述第一運動訊息索引值指示的所述運動訊息候選清單中的運動訊息確定所述第一分區的運動訊息,根據所述第二運動訊息索引值指示的所述運動訊息候選清單中的運動訊息確定為所述第二分區的運動訊息; 利用所述第一分區的運動訊息計算所述第一分區的第一預測值,利用所述第二分區的運動訊息計算所述第二分區的第二預測值; 對所述第一預測值和所述第二預測值進行加權融合,得到所述當前塊的幀間預測值。
  20. 一種幀間預測方法,應用於編碼器,所述方法包括: 確定當前塊的預測模式參數; 當所述預測模式參數指示使用預設的幀間預測模式確定當前塊的幀間預測值時,確定所述當前塊的至少一個初始候選位置; 在所述至少一個初始候選位置超出所述當前塊的最大編碼單元LCU邊界的情況下,對所述至少一個初始候選位置進行調整,得到所述當前塊的至少一個目標候選位置; 基於所述至少一個目標候選位置,確定所述當前塊的至少一個時域運動訊息; 基於所述至少一個時域運動訊息,構建運動訊息候選清單; 根據所述運動訊息候選清單,確定所述當前塊的幀間預測值。
  21. 根據請求項20所述的方法,其中,所述確定當前塊的預測模式參數,包括: 利用多種預測模式對所述當前塊進行預編碼處理,獲得每一種預測模式對應的位元率失真代價值; 從所獲得的多個位元率失真代價值中選擇最小位元率失真代價值,將所述最小位元率失真代價值對應的預測模式確定為當前塊的預測模式參數。
  22. 根據請求項20所述的方法,所述方法還包括: 在所述至少一個初始候選位置未超出所述當前塊的LCU邊界的情況下,將所述至少一個初始候選位置確定為所述當前塊的至少一個目標候選位置。
  23. 根據請求項20所述的方法,其中,所述確定所述當前塊的至少一個初始候選位置,包括: 右下初始候選位置; 從所述初始候選位置集合中,確定所述當前塊的至少一個初始候選位置。
  24. 根據請求項23所述的方法,其中, 所述右下初始候選位置至少包括下述其中之一:第一右下候選位置、第二右下候選位置、第三右下候選位置和第四右下候選位置; 其中,所述第一右下候選位置表徵所述當前塊內部的四個角位置,所述第二右下候選位置、所述第三右下候選位置和所述第四右下候選位置表徵所述當前塊外部的右下角位置。
  25. 根據請求項24所述的方法,所述方法還包括: 若所述至少一個初始候選位置包括所述第一左上候選位置,和/或,所述第一右上候選位置,和/或,所述第一左下候選位置,和/或,所述第一右下候選位置,則確定所述至少一個初始候選位置未超出LCU邊界,將所述至少一個初始候選位置確定為所述當前塊的至少一個目標候選位置。
  26. 根據請求項24所述的方法,所述方法還包括: 若所述至少一個初始候選位置包括其中一個角的初始候選位置,且所述其中一個角的初始候選位置超出LCU邊界,則從所述其中一個角對應的候選位置中選擇未超出所述LCU邊界的候選位置,將所述其中一個角的初始候選位置調整到所選擇的候選位置,以得到所述當前塊的一個目標候選位置。
  27. 根據請求項26所述的方法,其中,當所述其中一個角的初始候選位置為所述右下初始候選位置時,所述方法還包括: 若所述至少一個初始候選位置包括所述右下初始候選位置,且所述右下初始候選位置超出LCU邊界,則從所述當前塊外部的右下角位置中選擇未超出LCU邊界的候選位置,將所述右下初始候選位置調整到所選擇的候選位置,以得到所述當前塊的一個目標候選位置。
  28. 根據請求項27所述的方法,所述方法還包括: 若從所述當前塊外部的右下角位置中沒有選擇到未超出LCU邊界的候選位置,則將所述右下初始候選位置調整到所述當前塊內部的右下角位置,以得到所述當前塊的一個目標候選位置。
  29. 根據請求項24所述的方法,所述方法還包括: 若所述至少一個初始候選位置包括其中一個角的初始候選位置,且所述其中一個角的初始候選位置超出LCU邊界,則從除所述其中一個角之外剩餘角對應的候選位置中選擇未超出所述LCU邊界的候選位置,將所述其中一個角的初始候選位置調整到所選擇的候選位置,以得到所述當前塊的一個目標候選位置。
  30. 根據請求項29所述的方法,其中,當所述其中一個角的初始候選位置為所述右下初始候選位置時,所述方法還包括: 若所述至少一個初始候選位置包括所述右下初始候選位置,且所述右下初始候選位置超出LCU邊界,則在所述右上初始候選位置未超出LCU邊界的情況下,將所述右下初始候選位置調整到所述右上初始候選位置,以得到所述當前塊的一個目標候選位置。
  31. 根據請求項24所述的方法,所述方法還包括: 若所述至少一個初始候選位置包括其中一個角的初始候選位置,且所述其中一個角的初始候選位置超出LCU邊界,且所述其中一個角對應的候選位置中僅所述當前塊內部的候選位置未超出LCU邊界,則從除所述其中一個角之外剩餘角對應的候選位置中選擇未超出所述LCU邊界的候選位置,將所述其中一個角的初始候選位置調整到所選擇的候選位置,以得到所述當前塊的一個目標候選位置。
  32. 根據請求項31所述的方法,其中,當所述其中一個角的初始候選位置為所述右下初始候選位置時,所述方法還包括: 若所述至少一個初始候選位置包括所述右下初始候選位置,且所述右下初始候選位置超出LCU邊界,且所述當前塊內部和外部的右下角位置中僅所述第一右下候選位置未超出LCU邊界,則在所述右上初始候選位置未超出LCU邊界的情況下,將所述右下初始候選位置調整到所述右上初始候選位置,以得到所述當前塊的一個目標候選位置。
  33. 根據請求項23所述的方法,所述方法還包括: 針對不同的劃分模式,根據預設優先順序設置所述初始候選位置集合中不同初始候選位置對應的優先順序; 按照所述預設優先順序選取一個初始候選位置,並判斷所選取的初始候選位置是否超出LCU邊界; 若所選取的初始候選位置超出LCU邊界,則返回執行所述按照所述預設優先順序選取一個初始候選位置的步驟; 若所選取的初始候選位置未超出LCU邊界,則將所選取的初始候選位置確定為所述當前塊的一個目標候選位置。
  34. 根據請求項23所述的方法,所述方法還包括: 針對不同的劃分模式,根據預設順序對所述初始候選位置集合中不同初始候選位置進行排序; 按照所述預設順序選取一個初始候選位置,並判斷所選取的初始候選位置是否超出LCU邊界; 若所選取的初始候選位置超出LCU邊界,則返回執行所述按照所述預設順序選取一個初始候選位置的步驟; 若所選取的初始候選位置未超出LCU邊界,則將所選取的初始候選位置確定為所述當前塊的一個目標候選位置。
  35. 根據請求項20所述的方法,所述方法還包括: 調整時域運動訊息在所述運動訊息候選清單中的比例值; 根據所調整的比例值,控制所述運動訊息候選清單中預留至少兩個時域運動訊息的填充位置。
  36. 根據請求項20所述的方法,其中,所述基於所述至少一個目標候選位置,確定所述當前塊的至少一個時域運動訊息,包括: 確定所述至少一個目標候選位置中每一目標候選位置對應的參考幀訊息; 針對每一目標候選位置,在對應的參考幀訊息中確定與所述目標候選位置關聯的時域位置,並根據所述時域位置使用的運動訊息確定為所述目標候選位置對應的時域運動訊息; 基於所述至少一個目標候選位置,對應得到至少一個時域運動訊息。
  37. 根據請求項20所述的方法,其中,所述預設的幀間預測模式包括:角度加權預測模式。
  38. 根據請求項20所述的方法,其中,所述方法還包括: 確定所述當前塊的兩個分區;其中,所述兩個分區包括第一分區和第二分區,所述第一分區和所述第二分區的運動訊息不同。
  39. 根據請求項37所述的方法,其中,所述根據所述運動訊息候選清單,確定所述當前塊的幀間預測值,包括: 基於所述運動訊息候選清單,確定所述第一分區的運動訊息和所述第二分區的運動訊息,並將第一運動訊息索引值設置為所述第一分區的運動訊息在所述運動訊息候選清單中的索引序號值,將第二運動訊息索引值設置為所述第二分區的運動訊息在所述運動訊息候選清單中的索引序號值; 利用所述第一分區的運動訊息計算所述第一分區的第一預測值,利用所述第二分區的運動訊息計算所述第二分區的第二預測值; 對所述第一預測值和所述第二預測值進行加權融合,得到所述當前塊的幀間預測值。
  40. 根據請求項39所述的方法,所述方法還包括: 將所述第一運動訊息索引值和所述第二運動訊息索引值寫入位元流。
  41. 一種解碼器,所述解碼器包括解析單元、第一確定單元、第一調整單元、第一構建單元和第一預測單元;其中, 所述解析單元,配置為解析位元流,獲取當前塊的預測模式參數; 所述第一確定單元,配置為當所述預測模式參數指示使用預設的幀間預測模式確定當前塊的幀間預測值時,確定所述當前塊的至少一個初始候選位置; 所述第一調整單元,配置為在所述至少一個初始候選位置超出所述當前塊的最大編碼單元LCU邊界的情況下,對所述至少一個初始候選位置進行調整,得到所述當前塊的至少一個目標候選位置; 所述第一確定單元,還配置為基於所述至少一個目標候選位置,確定所述當前塊的至少一個時域運動訊息; 所述第一構建單元,配置為基於所述至少一個時域運動訊息,構建運動訊息候選清單; 所述第一預測單元,配置為根據所述運動訊息候選清單,確定所述當前塊的幀間預測值。
  42. 一種解碼器,所述解碼器包括第一記憶體和第一處理器;其中, 所述第一記憶體,用於儲存能夠在所述第一處理器上運行的電腦程式; 所述第一處理器,用於在運行所述電腦程式時,執行如請求項1至19任一項所述的方法。
  43. 一種編碼器,所述編碼器包括第二確定單元、第二調整單元、第二構建單元和第二預測單元;其中, 所述第二確定單元,配置為確定當前塊的預測模式參數;及當所述預測模式參數指示使用預設的幀間預測模式確定當前塊的幀間預測值時,確定所述當前塊的至少一個初始候選位置; 所述第二調整單元,配置為在所述至少一個初始候選位置超出所述當前塊的最大編碼單元LCU邊界的情況下,對所述至少一個初始候選位置進行調整,得到所述當前塊的至少一個目標候選位置; 所述第二確定單元,還配置為基於所述至少一個目標候選位置,確定所述當前塊的至少一個時域運動訊息; 所述第二構建單元,配置為基於所述至少一個時域運動訊息,構建運動訊息候選清單; 所述第二預測單元,配置為根據所述運動訊息候選清單,確定所述當前塊的幀間預測值。
  44. 一種編碼器,所述編碼器包括第二記憶體和第二處理器;其中, 所述第二記憶體,用於儲存能夠在所述第二處理器上運行的電腦程式; 所述第二處理器,用於在運行所述電腦程式時,執行如請求項20至40任一項所述的方法。
  45. 一種電腦儲存媒介,所述電腦儲存媒介儲存有電腦程式,所述電腦程式被第一處理器執行時實現如請求項1至19任一項所述的方法、或者被第二處理器執行時實現如請求項20至40任一項所述的方法。
TW110118910A 2020-06-24 2021-05-25 幀間預測方法、編碼器、解碼器以及電腦儲存媒介 TW202201958A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN202010591597.7 2020-06-24
CN202010591597.7A CN113840148A (zh) 2020-06-24 2020-06-24 帧间预测方法、编码器、解码器以及计算机存储介质

Publications (1)

Publication Number Publication Date
TW202201958A true TW202201958A (zh) 2022-01-01

Family

ID=78964752

Family Applications (1)

Application Number Title Priority Date Filing Date
TW110118910A TW202201958A (zh) 2020-06-24 2021-05-25 幀間預測方法、編碼器、解碼器以及電腦儲存媒介

Country Status (4)

Country Link
CN (3) CN113840148A (zh)
MX (1) MX2022010727A (zh)
TW (1) TW202201958A (zh)
WO (1) WO2021258841A1 (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023123478A1 (zh) * 2021-12-31 2023-07-06 Oppo广东移动通信有限公司 预测方法、装置、设备、系统、及存储介质
WO2024027700A1 (en) * 2022-08-05 2024-02-08 Mediatek Inc. Joint indexing of geometric partitioning mode in video coding

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105376577A (zh) * 2011-08-29 2016-03-02 苗太平洋控股有限公司 用于解码合并模式下的运动信息的装置
RU2716563C2 (ru) * 2011-09-09 2020-03-12 Кт Корпорейшен Способ декодирования видеосигнала
KR20130050407A (ko) * 2011-11-07 2013-05-16 오수미 인터 모드에서의 움직임 정보 생성 방법
KR20130050405A (ko) * 2011-11-07 2013-05-16 오수미 인터 모드에서의 시간 후보자 결정방법
US10785494B2 (en) * 2017-10-11 2020-09-22 Qualcomm Incorporated Low-complexity design for FRUC
US11184633B2 (en) * 2018-11-27 2021-11-23 Qualcomm Incorporated Simplification of history-based motion vector prediction

Also Published As

Publication number Publication date
CN114930838A (zh) 2022-08-19
WO2021258841A1 (zh) 2021-12-30
CN116471418A (zh) 2023-07-21
CN113840148A (zh) 2021-12-24
MX2022010727A (es) 2022-09-23

Similar Documents

Publication Publication Date Title
CN113678453B (zh) 基于矩阵的帧内预测的上下文确定
CN113748676B (zh) 帧内编解码模式下的矩阵推导
US20180278940A1 (en) Image encoding/decoding method and device for same
JP7463460B2 (ja) ビデオ復号方法およびビデオデコーダ
KR102616713B1 (ko) 이미지 예측 방법, 장치 및 시스템, 디바이스 및 저장 매체
CN113853791B (zh) 数字视频中的变换旁路编解码残差块
CN115176468A (zh) 跨分量自适应环路滤波器
TW202201958A (zh) 幀間預測方法、編碼器、解碼器以及電腦儲存媒介
JP2022553364A (ja) ビデオ・データを処理する方法、装置及び記憶媒体
US20230370597A1 (en) Picture partitioning method and apparatus
TW202145794A (zh) 幀間預測方法、編碼器、解碼器以及電腦儲存媒介
TW202145784A (zh) 幀間預測方法、編碼器、解碼器以及電腦儲存媒介
CN115211108A (zh) 环路滤波和视频片之间的相互作用
US20220329787A1 (en) A method, an apparatus and a computer program product for video encoding and video decoding with wavefront-based gradual random access
TW202147851A (zh) 幀間預測方法、編碼器、解碼器以及電腦儲存媒介
TW202145783A (zh) 幀間預測方法、編碼器、解碼器以及電腦儲存媒介
RU2815738C2 (ru) Определение режима кодирования цветности на основе внутрикадрового предсказания на основе матрицы
WO2022140905A1 (zh) 预测方法、编码器、解码器以及存储介质
WO2024098263A1 (zh) 编解码方法、码流、编码器、解码器以及存储介质
WO2024092425A1 (zh) 视频编解码方法、装置、设备、及存储介质
TW202209884A (zh) 幀間預測方法、編碼器、解碼器及電腦可讀儲存媒介
TW202209883A (zh) 幀間預測方法、編碼器、解碼器及儲存媒介
KR20230140450A (ko) 디코딩 프로세스의 에너지 소비를 나타내는 정보를 시그널링하기 위한 메타데이터