TW202241132A - 係數編解碼方法、編碼器、解碼器以及電腦儲存媒介 - Google Patents

係數編解碼方法、編碼器、解碼器以及電腦儲存媒介 Download PDF

Info

Publication number
TW202241132A
TW202241132A TW111108667A TW111108667A TW202241132A TW 202241132 A TW202241132 A TW 202241132A TW 111108667 A TW111108667 A TW 111108667A TW 111108667 A TW111108667 A TW 111108667A TW 202241132 A TW202241132 A TW 202241132A
Authority
TW
Taiwan
Prior art keywords
last
zero coefficient
last non
coefficient
block
Prior art date
Application number
TW111108667A
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 TW202241132A publication Critical patent/TW202241132A/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/46Embedding additional information in the video signal during the compression process
    • 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/129Scanning of coding units, e.g. zig-zag scan of transform coefficients or flexible macroblock ordering [FMO]
    • 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/13Adaptive entropy coding, e.g. adaptive variable length coding [AVLC] or context adaptive binary arithmetic coding [CABAC]
    • 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/132Sampling, masking or truncation of coding units, e.g. adaptive resampling, frame skipping, frame interpolation or high-frequency transform coefficient masking
    • 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/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/146Data rate or code amount at the encoder output
    • 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/18Methods 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 set of transform coefficients
    • 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/70Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/91Entropy coding, e.g. variable length coding [VLC] or arithmetic coding

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Signal Processing For Digital Recording And Reproducing (AREA)
  • Error Detection And Correction (AREA)

Abstract

本申請公開了一種係數編解碼方法、編碼器、解碼器以及電腦儲存媒介,該方法包括:解析碼流,獲取影像標識訊息;當影像標識訊息指示影像滿足預設條件時,解析碼流,獲取最後一個非零係數位置翻轉標識訊息和最後一個非零係數的座標訊息;當最後一個非零係數位置翻轉標識訊息指示使用最後一個非零係數位置翻轉時,對最後一個非零係數的座標訊息進行計算,確定最後一個非零係數的位置;按照預設掃描順序對最後一個非零係數的位置之前的所有係數進行解碼,確定當前塊的係數。本申請不僅提高了係數編碼的輸送量和編解碼速度,還提升了壓縮效率。

Description

係數編解碼方法、編碼器、解碼器以及電腦儲存媒介
本申請實施例涉及影像編解碼技術領域,尤其涉及一種係數編解碼方法、編碼器、解碼器以及電腦儲存媒介。
隨著人們對影像顯示品質要求的提高,電腦視覺相關領域得到了越來越多的關注。近年來,影像處理技術在各行各業都取得了成功地應用。對於影像圖像的編解碼過程而言,在編碼端,針對待編碼的圖像資料,在經過變換和量化處理之後將透過熵編碼單元進行壓縮編碼,而熵編碼處理後所生成的碼流將傳輸到解碼端;然後解析碼流,再經過反量化和逆變換處理之後,可以恢復出原始輸入的圖像資料。
目前,高位寬、高品質、高碼率的影像編解碼(簡稱為“三高影像”)相較於較低位寬、低品質、低碼率的影像編解碼(可稱為“常規影像”),通常需要編解碼的係數更多,而且係數更大。這樣,對於三高影像來說,已有的相關方案可能會帶來更大的開銷,產生浪費,甚至影響編解碼的速度和輸送量。
本申請實施例提供一種係數編解碼方法、編碼器、解碼器以及電腦儲存媒介,在高位寬、高碼率、高品質或無損的影像編解碼場景中,可以提高係數編碼的輸送量和編解碼速度,同時還可以提升壓縮效率。
本申請實施例的技術方案可以如下實現:
第一方面,本申請實施例提供了一種係數解碼方法,應用於解碼器,該方法包括:
解析碼流,獲取影像標識訊息;
當影像標識訊息指示影像滿足預設條件時,解析碼流,獲取最後一個非零係數位置翻轉標識訊息和最後一個非零係數的座標訊息;
當最後一個非零係數位置翻轉標識訊息指示當前塊使用最後一個非零係數位置翻轉時,對最後一個非零係數的座標訊息進行計算,確定最後一個非零係數的位置;
按照預設掃描順序對最後一個非零係數的位置之前的所有係數進行解碼,確定當前塊的係數。
第二方面,本申請實施例提供了一種係數編碼方法,應用於編碼器,該方法包括:
確定影像標識訊息以及最後一個非零係數的位置;
當影像標識訊息指示影像滿足預設條件時,確定最後一個非零係數位置翻轉標識訊息;
根據最後一個非零係數的位置以及最後一個非零係數位置翻轉標識訊息,確定最後一個非零係數的座標訊息;
按照預設掃描順序對最後一個非零係數的位置之前的所有係數進行編碼,並將編碼後得到的位元訊息、影像標識訊息以及最後一個非零係數的座標訊息寫入碼流。
第三方面,本申請實施例提供了一種編碼器,該編碼器包括第一確定單元和編碼單元;其中,
第一確定單元,配置為確定影像標識訊息以及最後一個非零係數的位置;以及當影像標識訊息指示影像滿足預設條件時,確定最後一個非零係數位置翻轉標識訊息;
第一確定單元,還配置為根據最後一個非零係數的位置以及最後一個非零係數位置翻轉標識訊息,確定最後一個非零係數的座標訊息;
編碼單元,配置為按照預設掃描順序對最後一個非零係數的位置之前的所有係數進行編碼,並將編碼後得到的位元訊息、影像標識訊息以及最後一個非零係數的座標訊息寫入碼流。
第四方面,本申請實施例提供了一種編碼器,該編碼器包括第一記憶體和第一處理器;其中,
第一記憶體,用於儲存能夠在第一處理器上運行的電腦程式;
第一處理器,用於在運行電腦程式時,執行如第二方面所述的方法。
第五方面,本申請實施例提供了一種解碼器,該解碼器包括解析單元和第二確定單元;其中,
解析單元,配置為解析碼流,獲取影像標識訊息;以及當影像標識訊息指示影像滿足預設條件時,解析碼流,獲取最後一個非零係數位置翻轉標識訊息和最後一個非零係數的座標訊息;
第二確定單元,配置為當最後一個非零係數位置翻轉標識訊息指示當前塊使用最後一個非零係數位置翻轉時,對最後一個非零係數的座標訊息進行計算,確定最後一個非零係數的位置;
解析單元,還配置為按照預設掃描順序對最後一個非零係數的位置之前的所有係數進行解碼,確定當前塊的係數。
第六方面,本申請實施例提供了一種解碼器,該解碼器包括第二記憶體和第二處理器;其中,
第二記憶體,用於儲存能夠在第二處理器上運行的電腦程式;
第二處理器,用於在運行電腦程式時,執行如第一方面所述的方法。
第七方面,本申請實施例提供了一種電腦儲存媒介,該電腦儲存媒介儲存有電腦程式,所述電腦程式被執行時實現如第一方面所述的方法、或者實現如第二方面所述的方法。
本申請實施例提供了一種係數編解碼方法、編碼器、解碼器以及電腦儲存媒介,在編碼器中,確定影像標識訊息以及最後一個非零係數的位置;當影像標識訊息指示影像滿足預設條件時,確定最後一個非零係數位置翻轉標識訊息;根據最後一個非零係數的位置以及最後一個非零係數位置翻轉標識訊息,確定最後一個非零係數的座標訊息;按照預設掃描順序對最後一個非零係數的位置之前的所有係數進行編碼,並將編碼後得到的位元訊息、影像標識訊息以及最後一個非零係數的座標訊息寫入碼流。在解碼器中,解析碼流,獲取影像標識訊息;當影像標識訊息指示影像滿足預設條件時,解析碼流,獲取最後一個非零係數位置翻轉標識訊息和最後一個非零係數的座標訊息;當最後一個非零係數位置翻轉標識訊息指示當前塊使用最後一個非零係數位置翻轉時,對最後一個非零係數的座標訊息進行計算,確定最後一個非零係數的位置;按照預設掃描順序對最後一個非零係數的位置之前的所有係數進行解碼,確定當前塊的係數。這樣,在高位寬、高碼率、高品質或無損的影像編解碼場景中,由於係數分佈規律與常規影像場景不同,在係數編碼中透過減少甚至消除上下文模式編碼的語法元素個數,比如關於最後一個非零係數位置、子塊編碼標識等語法元素,甚至還可以在最後一個非零係數的座標訊息的值偏大時進行座標變換,從而可以減少碼流中編碼所帶來的開銷,進而提高係數編碼的輸送量和編解碼速度;另外,由於減少或消除的語法元素在高位寬、高碼率、高品質或無損的影像編解碼中的影響較小,還能夠提升壓縮效率。
為了能夠更加詳盡地瞭解本申請實施例的特點與技術內容,下面結合附圖對本申請實施例的實現進行詳細闡述,所附附圖僅供參考說明之用,並非用來限定本申請實施例。
除非另有定義,本文所使用的所有的技術和科學術語與屬於本申請的技術領域的技術人員通常理解的含義相同。本文中所使用的術語只是為了描述本申請實施例的目的,不是旨在限制本申請。
在以下的描述中,涉及到“一些實施例”,其描述了所有可能實施例的子集,但是可以理解,“一些實施例”可以是所有可能實施例的相同子集或不同子集,並且可以在不衝突的情況下相互結合。還需要指出,本申請實施例所涉及的術語“第一\第二\第三”僅是用於區別類似的元件,不代表針對元件的特定排序,可以理解地,“第一\第二\第三”在允許的情況下可以互換特定的順序或先後次序,以使這裡描述的本申請實施例能夠以除了在這裡圖示或描述的以外的順序實施。
在影像圖像中,一般採用第一圖像分量、第二圖像分量和第三圖像分量來表徵編碼塊(Coding Block,CB);其中,這三個圖像分量分別為一個亮度分量、一個藍色色度分量和一個紅色色度分量,具體地,亮度分量通常使用符號Y表示,藍色色度分量通常使用符號Cb或者U表示,紅色色度分量通常使用符號Cr或者V表示;這樣,影像圖像可以用YCbCr格式表示,也可以用YUV格式表示。
對本申請實施例進行進一步詳細說明之前,先對本申請實施例中涉及的名詞和術語進行說明,本申請實施例中涉及的名詞和術語適用於如下的解釋:
動態影像專家群(Moving Picture Experts Group,MPEG)
國際標準組織(International Standardization Organization,ISO)
國際電子電機委員會(International Electrotechnical Commission,IEC)
聯合影像專家組(Joint Video Experts Team,JVET)
開放媒體聯盟(Alliance for Open Media,AOM)
新一代影像編碼標準H.266/多功能影像編碼(Versatile Video Coding,VVC)
VVC的參考軟體測試平臺(VVC Test Model,VTM)
音影像編碼標準(Audio Video Standard,AVS)
AVS的高性能測試模型(High-Performance Model,HPM)
前文參考之適應性二元算術編碼(Context-based Adaptive Binary Arithmetic Coding,CABAC)
普通殘差編碼(Regular Residual Coding,RRC)
變換跳過殘差編碼(Transform Skip Residual Coding,TSRC)
可以理解,目前通用的影像編解碼標準(如VVC)都採用基於塊的混合編碼框架。影像圖像中的每一幀被分割成相同大小(如128×128,64×64等)的正方形的最大編碼單元(Largest Coding Unit,LCU),每個最大編碼單元還可以根據規則劃分成矩形的編碼單元(Coding Unit,CU);而且編碼單元可能還會劃分成更小的預測單元(Prediction Unit,PU)、變換單元(Transform Unit,TU)等。具體地,如圖1所示,混合編碼框架可以包括有預測(Prediction)、變換(Transform)、量化(Quantization)、熵編碼(Entropy Coding)、迴路濾波(In Loop Filter)等模組。其中,預測模組可以包括幀內預測(Intra Prediction)和幀間預測(Inter Prediction),幀間預測可以包括運動估計(Motion Estimation)和運動補償(Motion Compensation)。由於影像圖像的一個幀內相鄰像素之間存在很強的相關性,在影像編解碼技術中使用幀內預測方式能夠消除相鄰像素之間的空間冗餘;但是由於影像圖像中的相鄰幀之間也存在著很強的相似性,在影像編解碼技術中使用幀間預測方式消除相鄰幀之間的時間冗餘,從而能夠提高編解碼效率。
影像編解碼器的基本流程如下:在編碼器中,將一幀圖像劃分成塊,對當前塊使用幀內預測或幀間預測產生當前塊的預測塊,當前塊的原始塊減去預測塊得到殘差塊,對殘差塊進行變換、量化得到量化係數矩陣,對量化係數矩陣進行熵編碼輸出到碼流中。在解碼器中,對當前塊使用幀內預測或幀間預測產生當前塊的預測塊,另一方面解碼碼流得到量化係數矩陣,對量化係數矩陣進行反量化、逆變換得到殘差塊,將預測塊和殘差塊相加得到重建塊。重建塊組成重建圖像,基於圖像或基於塊對重建圖像進行迴路濾波得到解碼圖像。編碼器同樣需要和解碼器類似的操作獲得解碼圖像。解碼圖像可以為後續的幀作為幀間預測的參考幀。編碼器確定的塊劃分訊息,預測、變換、量化、熵編碼、迴路濾波等模式訊息或者參數訊息如果有必要需要輸出到碼流中;然後解碼器透過解析及根據已有訊息進行分析確定與編碼器相同的塊劃分訊息,預測、變換、量化、熵編碼、迴路濾波等模式訊息或者參數訊息,從而保證編碼器獲得的解碼圖像和解碼器獲得的解碼圖像相同。編碼器獲得的解碼圖像通常也叫做重建圖像。在預測時可以將當前塊劃分成預測單元,在變換時可以將當前塊劃分成變換單元,預測單元和變換單元的劃分可以不同。上述是基於塊的混合編碼框架下的影像編碼器和解碼器的基本流程,隨著技術的發展,該框架或流程的一些模組或步驟可能會被優化,本申請實施例適用於該基於塊的混合編碼框架下的影像編解碼器的基本流程,但不限於該框架及流程。
當前塊(Current Block)可以是當前編碼單元(CU)、當前預測單元(PU)、或者當前變換塊(TU)等。
其中,塊劃分訊息,預測、變換、量化的各種模式及參數訊息,係數等透過熵編碼寫入碼流中。假定不同元素的概率是不同的,為出現概率較大的元素分配較短的碼字,為出現概率較小的元素分配較長的碼字,能獲得比定長編碼更高的編碼效率。但是如果不同元素的概率相近或基本相同,熵編碼的壓縮空間就有限。CABAC是一種常用熵編碼方法,HEVC和VVC等都使用CABAC進行熵編碼。CABAC可以使用上下文模型可以提升壓縮效率,但是上下文模式的使用及更新也使得操作更加複雜。
CABAC中有一種旁路(bypass)模式,在旁路模式下不需要使用和更新上下文模型,可以達到更高的輸送量(throughput)。在本申請實施例中,可以把CABAC中需要使用和更新上下文模型的模式叫做上下文模式。
一般情況下,需要先根據定義的方法確定上下文模型,在調用定義的二元符號的算數解碼過程時,上下文模型的參數可以作為輸入。上下文模型的選擇在相鄰係數之間還存在依賴關係。例如,圖2示出了相關技術提供的一種當前係數與相鄰係數的位置關係示意圖。在圖2中,黑色填充的塊表示當前係數,格線填充的塊表示相鄰係數;如2圖所示,當前係數的sig_coeff_flag的選擇哪個上下文模型需要根據其右邊和下邊和右下邊相鄰的5個係數的訊息來確定。根據圖2進一步可以看出,上下文模式的操作較旁路模式的操作複雜得多,而且還有相鄰係數之間的依賴性。
對於CABAC的算數編碼引擎,如果需要使用上下文模式,需要調用定義的二元符號的算數解碼過程,其中包括狀態轉移過程也就是上下文模型的更新。而在二元符號的算數解碼過程中會調用算數解碼引擎的重歸一化過程。而在使用旁路模式時需要調用旁路解碼過程。
下面以VVC中使用CABAC為例進行介紹:
對於CABAC的算數編碼引擎,算數解碼過程的輸入是ctxTable,ctxIdx,bypassFlag以及算數解碼引擎的狀態變數ivlCurrRange和ivlOffset,算數解碼過程的輸出是bin的值。
其中,ctxTable是選擇上下文模式時使用的表格,ctxIdx是上下文模型索引。
圖3示出了相關技術提供的一種bin的算數解碼過程的流程示意圖。如圖3所示,為了解碼bin的值,上下文索引表ctxTable,ctxIdx,bypassFlag作為輸入被傳輸到算數解碼過程DecodeBin(ctxTable,ctxIdx,bypassFlag),具體如下:
如果bypassFlag的值為1,則調用旁路解碼過程DecodeBypass();
否則,如果bypassFlag的值為0,ctxTable的值為0,且ctxIdx的值為0,則調用DecodeTerminate();
否則(bypassFlag的值為0且ctxTable的值不為0),調用定義的二元符號的算數解碼過程DecodeDecision(ctxTable,ctxIdx)。
進一步地,對於二元符號的算數解碼過程,該過程的輸入是變數ctxTable,ctxIdx,ivlCurrRange,和ivlOffset,該過程的輸出是解碼的值binVal,更新後的變數ivlCurrRange和ivlOffset。
圖4示出了相關技術提供的一種二元符號的算數解碼過程的流程示意圖。如圖4所示,其中,pStateIdx0和pStateIdx1是當前上下文模型的兩個狀態。
(1)變數ivlLpsRange的值按如下方法匯出:
給定ivlCurrRange的當前值,變數qRangeIdx按如下方法匯出:
qRangeIdx=ivlCurrRange >>5
給定qRangeIdx,ctxTable和ctxIdx對應的pStateIdx0和pStateIdx1,valMps和ivlLpsRange按如下方法匯出:
pState=pStateIdx1+16×pStateIdx0;
valMps=pState >>14;
ivlLpsRange=(qRangeIdx×((valMps ? 32767–pState:pState)>>9)>>1)+4。
(2)變數ivlCurrRange的值設為ivlCurrRange–ivlLpsRange,並執行如下操作:
如果ivlOffset大於或等於ivlCurrRange,那麼變數binVal的值為1–valMps,ivlOffset的值為ivlOffset減去ivlCurrRange,ivlCurrRange的值為ivlLpsRange;
否則(ivlOffset小於ivlCurrRange),變數binVal的值為valMps。
給定binVal的值,執行定義的狀態轉移(state transition)。基於ivlCurrRange的當前值,可以執行定義的重歸一化(renormalization)。
進一步地,對於狀態轉移過程,該過程的輸入是當前的pStateIdx0和pStateIdx1,以及解出的值binVal;輸出是更新的ctxTable和ctxIdx對應的上下文變數pStateIdx0和pStateIdx1。其中,變數shift0和shift1由shiftIdx匯出,這裡定義了shiftIdx與ctxTable和ctxIdx的對應關係,如下:
shift0=(shiftIdx >>2)+2;
shift1=(shiftIdx& 3)+3+shift0。
基於解出的值binVal,與ctxTable和ctxIdx對應的兩個變數pStateIdx0和pStateIdx1的更新如下:
pStateIdx0=pStateIdx0−(pStateIdx0 >>shift0)+(1023×binVal >>shift0);
pStateIdx1=pStateIdx1−(pStateIdx1>>shift1)+(16383×binVal >>shift1)。
進一步地,算數解碼引擎的重歸一化過程的輸入是片資料中的bits和變數ivlCurrRange和ivlOffset,輸出是更新的變數ivlCurrRange和ivlOffset。
圖5示出了相關技術提供的一種算數解碼引擎的重歸一化的流程示意圖,如圖5所示,ivlCurrRange的當前值首選與256比較,後續步驟如下:
如果ivlCurrRange大於或等於256,那麼不需要重歸一化,RenormD過程結束;
否則(ivlCurrRange小於256),進入重歸一化迴圈。在這個迴圈中,ivlCurrRange的值乘2,也就是左移一位。ivlOffset的值乘2,也就是左移一位。用read_bits(1)得到的一位移入到ivlOffset中。
整個過程中碼流中的資料不應該導致ivlOffset大於或等於ivlCurrRange。
進一步地,二元符號的旁路解碼過程的輸入是片資料的bits和變數ivlCurrRange和ivlOffset,輸出是更新的變數ivlOffset和解出的值binVal。
當bypassFlag為1時旁路解碼過程被調用,圖6示出了相關技術提供的一種旁路解碼過程的流程示意圖,如圖6所示,首先ivlOffset的值乘2,也就是左移一位。用read_bits(1)得到的一位移入到ivlOffset中。然後ivlOffset的值會和ivlCurrRange的值比較,後續步驟如下:
如果ivlOffset大於或等於ivlCurrRange,那麼binVal的值設為1,ivlOffset等於ivlOffsetivl減去CurrRange;
否則(ivlOffset小於ivlCurrRange),binVal的值設為0。
整個過程中碼流中的資料不應該導致ivlOffset大於或等於ivlCurrRange。
還應理解,在現在的影像編解碼標準中,對於殘差通常支援一種或多種變換(transform)以及變換跳過(transform skip)。變換有離散餘弦變換(Discrete Cosine Transform,DCT)等,使用變換的殘差塊在變換(及量化)以後通常體現出一定的特性,如某些變換(及量化)後由於能量大多集中在低頻區域而使得左上角的區域係數較大,右下角的區域係數較小甚至出現很多0係數。而變換跳過,顧名思義不做變換,變換跳過後的係數的分佈規律與變換後的係數是不同的,因而可以使用不同的係數編碼方法。比如在VVC中對變換跳過後的係數使用RRC,對變換跳過的係數使用TSRC。
一般的變換,如DCT變換,這時候變換後的塊,從左往右代表的頻率由低到高,從上到下代表的頻率由低到高。左上角代表低頻,右下角代表高頻。人眼對低頻的訊息更敏感,而對高頻的訊息不是特別敏感。利用這種特性,一些高頻的訊息被做更多的處理或去掉對視覺影響較小。有些技術,如強制置零(zero-out),可以強制將某些高頻訊息置0。比如對64x64的塊強制將橫坐標大於或等於32、或者縱坐標大於或等於32的位置的係數置0。上述只是一個簡單的示例,zero-out的範圍可能會有更多複雜的匯出方法,這裡不再贅述。如圖7所示,左上角部分可能存在非零係數(即為可能有非零係數區域),右下角部分將全部置零(即為強制為0區域)。這樣,對於後面的係數編碼來說,zero-out強制置0的區域的係數由於肯定是0而不需要編碼。
進一步地,由於對通常的影像的殘差進行變換(及量化)後係數分佈顯現出左上角係數較大而右下角很多0係數的特性,係數編碼時通常會使用一些方法使得左上角一定範圍內的係數需要進行編碼,而右下角一定範圍內的係數不需要編碼,也就是預設這些係數為0。一種方法是在編碼一個塊的係數時,先確定這個塊的按掃描順序的最後一個非零係數的位置。確定出這個位置以後,按掃描順序最後一個非零係數的位置後面的係數全部認為是0,即不需要編碼;只有最後一個非零係數位置及之前的係數需要編碼。例如在VVC中,使用last_sig_coeff_x_prefix、last_sig_coeff_y_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_suffix來確定最後一個非零係數的位置(LastSignificantCoeffX,LastSignificantCoeffY)。
(a)last_sig_coeff_x_prefix確定當前塊中按掃描順序最後一個非零係數的水平(或列)座標的首碼(prefix)。last_sig_coeff_x_prefix的值應該在 0到(log2ZoTbWidth<<1)−1,包含這兩個邊界值的範圍內。
如果last_sig_coeff_x_prefix不存在,那麼last_sig_coeff_x_prefix的值為0。
(b)last_sig_coeff_y_prefix確定當前塊中按掃描順序最後一個非零係數的豎直(或行)座標的首碼(prefix)。last_sig_coeff_y_prefix的值應該在0到 (log2ZoTbHeight<<1)−1,包含這兩個邊界值的範圍內。
如果last_sig_coeff_y_prefix不存在,那麼last_sig_coeff_y_prefix的值為0。
(c)last_sig_coeff_x_suffix確定當前塊中按掃描順序最後一個非零係數的水平(或列)座標的尾碼(suffix)。last_sig_coeff_x_suffix的值應該在0到 (1<< ( ( last_sig_coeff_x_prefix>>1)−1))–1,包含這兩個邊界值的範圍內。
當前變換塊中按掃描順序最後一個非零係數的水平(或列)座標的值LastSignificantCoeffX按如下方法匯出:
如果last_sig_coeff_x_suffix不存在,那麼
LastSignificantCoeffX = last_sig_coeff_x_prefix;
否則(last_sig_coeff_x_suffix存在),
LastSignificantCoeffX=(1<< ((last_sig_coeff_x_prefix>>1)−1))*(2+(last_ sig_coeff_x_prefix&1)) + last_sig_coeff_x_suffix。
(d)last_sig_coeff_y_suffix確定當前變換塊中按掃描順序最後一個非零係數的豎直(或行)座標的尾碼(suffix)。last_sig_coeff_x_suffix的值應該在 0到 (1<< ((last_sig_coeff_y_prefix>>1)−1))–1,包含這兩個邊界值的範圍內。
當前變換塊中按掃描順序最後一個非零係數的豎直(或行)座標的值LastSignificantCoeffY按如下方法匯出:
如果last_sig_coeff_y_suffix不存在,那麼
LastSignificantCoeffY = last_sig_coeff_y_prefix;
否則(last_sig_coeff_y_suffix 存在),
LastSignificantCoeffY = (1<< ((last_sig_coeff_y_prefix>>1)−1))*(2+(last_ sig_coeff_y_prefix&1)) + last_sig_coeff_y_suffix。
進一步地,最後一個非零係數及之前的係數全都要進行編碼,但是在普通影像中,即使是這些係數中仍然有一定比例的係數是0,VVC中使用當前子塊是否編碼的標誌sb_coded_flag來確定當前子塊中的係數是否需要編碼。如果不需要編碼則認為當前子塊中的係數全為0。這裡,子塊通常是n×n的子塊,如4×4的子塊。
sb_coded_flag[xS][yS]確定當前變換塊中位置在(xS,yS)的子塊的如下訊息,其中,子塊是變換系數值的陣列:
如果sb_coded_flag[xS][yS]的值為0,那麼當前變換塊中位置在(xS,yS)的子塊內的所有變換係數的值為0;
如果sb_coded_flag[xS][yS]不存在,那麼sb_coded_flag[xS][yS]的值為1。
進一步地,在處理係數編碼時,利用係數的特性可以提升壓縮效率。例如,對通常的影像,需要編碼的係數中,有一定比例的係數是0,因而可以用一個語法元素來表示當前係數是否是0,這個語法元素通常是一個二元符號。如果當前係數是0,那麼意味著對當前係數的編碼已經結束;否則,還需要繼續編碼當前係數。又如,對通常的影像,在非0係數中,有一定比例的係數的絕對值是1,因而可以用一個語法元素來表示當前係數的絕對值是否大於1,這個語法元素通常是一個二元符號。如果當前係數的絕對值不大於1,那麼意味著對當前係數的編碼已經結束;否則,還需要繼續編碼當前係數。例如,在VVC中涉及的語法元素如下,
sig_coeff_flag[xC][yC]用來確定當前變換塊在變換係數位置(xC,yC)的對應的變換係數是不是非零係數:
如果sig_coeff_flag[xC][yC]的值是0,那麼(xC,yC)位置的變換係數的值設為0;
否則(sig_coeff_flag[xC][yC]的值是1),(xC,yC)位置的變換係數是非零係數。
如果sig_coeff_flag[xC][yC]不存在,那麼做如下推斷:
如果transform_skip_flag[x0][y0][cIdx]的值為0或者sh_ts_residual_ coding_disabled_flag的值為1:
如果(xC,yC)是最後按掃描順序一個非零係數的位置 (LastSignificantCoeffX,LastSignificantCoeffY)或如下條件全為真,那麼sig_coeff_flag[xC][yC]的值推斷為1:
(xC&((1<<log2SbW)−1),yC& ((1<<log2SbH)−1))等於(0,0);
inferSbDcSigCoeffFlag的值等於1;
sb_coded_flag[xS][yS]的值1;
否則,sig_coeff_flag[xC][yC]的值推斷為0;
否則(transform_skip_flag[x0][y0][cIdx]的值為1且sh_ts_residual_coding _disabled_flag的值為0):
如果如下條件全為真,那麼sig_coeff_flag[xC][yC]的值推斷為1:
(xC&((1<<log2SbW)−1),yC&((1<<log2SbH)−1))等於((1<<
log2SbW) −1,(1<<log2SbH)−1);
inferSbSigCoeffFlag的值為1;
sb_coded_flag[xS][yS]的值為1;
否則,sig_coeff_flag[xC][yC]的值推斷為0。
abs_level_gtx_flag[n][j]用來確定(掃描順序第n個)變換係數的絕對值是否大於(j<<1)+1。如果abs_level_gtx_flag[n][j]不存在,那麼abs_level_gtx_flag[n][j]的值為0。
這樣,如果在處理完上述標誌(或稱為語法元素)後,當前係數還沒有編碼結束,那麼需要編碼係數絕對值的剩餘值。如VVC中的abs_remainder。
abs_remainder[n]用來確定掃描順序第n個變換係數的用Golomb-Rice編碼的剩餘絕對值。如果abs_remainder[n]不存在,那麼abs_remainder[n]的值為0。
進一步地,在VVC中,sig_coeff_flag和abs_level_gtx_flag等語法元素使用上下文模式編碼,而abs_remainder使用旁路模式編碼。上述提到了上下文模式編碼較旁路模式編碼更複雜,直觀理解就是處理起來更慢,如果需要編碼的係數很多,使用太多的上下文模式編碼會影響解碼速度。因而可以對使用上下文模式編碼的語法元素的個數進行限制,比如使用上下文模式編碼的二元符號的個數超過一個閾值後,後續的係數編碼強制使用旁路模式編碼。如VVC中的dec_abs_level。
dec_abs_level[n]是掃描位置n處的一個用Golomb-Rice編碼的中間值。解析dec_abs_level[n]時可以匯出ZeroPos[n],在位置(xC,yC)處的量化係數的絕對值AbsLevel[xC][yC]按如下方法匯出:
如果dec_abs_level[n]不存在或dec_abs_level[n]的值等於ZeroPos[n],那麼AbsLevel[xC][yC]的值為0;
否則,如果dec_abs_level[n]的值小於ZeroPos[n],那麼AbsLevel[xC][yC]的值為dec_abs_level[n]+1;
否則(dec_abs_level[n]的值大於ZeroPos[n]),AbsLevel[xC][yC]的值為 dec_abs_level[n]。
上述涉及的都是係數的絕對值,非零係數的正負號可以用係數正負號標誌coeff_sign_flag或一些正負號匯出的方法來確定。coeff_sign_flag[n]可以按如下方法確定掃描位置n的變換係數的正負號:
如果coeff_sign_flag[n]的值為0,那麼對應的變換係數為正值;
否則(coeff_sign_flag[n]的值為1),對應的變換係數為負值。
如果coeff_sign_flag[n]不存在,那麼coeff_sign_flag[n]的值為0;這時候根據CoeffSignLevel[xC][yC]確定座標(xC,yC)上的變換係數的正負號:
如果CoeffSignLevel[xC][yC]的值為0,那麼對應的變換係數為0;
否則,如果CoeffSignLevel[xC][yC]的值為1,那麼對應的變換係數為正值;否則(CoeffSignLevel[xC][yC]的值為−1),對應的變換係數為負值。
還需要說明的是,CoeffSignLevel[xC][yC]還可以使用其他一些方法匯出,這裡不再贅述。
另外,在VVC中還使用了一個係數的值的奇偶性標誌par_level_flag。根據這個標誌可以知道當前係數的值的奇偶性,在確定當前係數的值以及依賴量化(Dependent Quantization)中會使用到。
par_level_flag[n]確定按掃描順序位置n的變換係數的奇偶性。如果par_level_flag[n]不存在,那麼par_level_flag[n]的值為0。
par_level_flag除了確定變換係數的奇偶性還可以用來和abs_level_gtx_flag、abs_remainder等共同確定係數的大小。
在這裡,由於上下文模式編碼需要選擇、使用並更新上下文模式,而旁路模式編碼不需要選擇、使用並更新上下文模式,通常的做法是在一定範圍內把上下文模式編碼的語法元素放在一起,旁路模式編碼的語法元素放在一起,這樣對硬體設計更加友好。比如說先把一個塊中的所有的上下文模式編碼的語法元素處理完,再處理旁路模式編碼的語法元素。當前塊中的所有的上下文模式編碼的語法元素可能還會分幾個組,一個塊中的所有的旁路模式編碼的語法元素可能還會分幾個組。
在一種具體的示例中,RRC的具體語法如表1所示。
表1
residual_coding(x0,y0,log2TbWidth,log2TbHeight,cIdx){ Descriptor
if(sps_mts_enabled_flag  && cu_sbt_flag  && cIdx==0  &&            log2TbWidth == 5  &&  log2TbHeight<6)  
    log2ZoTbWidth=4  
else  
    log2ZoTbWidth=Min(log2TbWidth,5)  
if(sps_mts_enabled_flag  && cu_sbt_flag  && cIdx==0  &&             log2TbWidth<6  &&  log2TbHeight == 5)  
    log2ZoTbHeight=4  
else  
    log2ZoTbHeight=Min(log2TbHeight,5)  
if(log2TbWidth >0)  
    last_sig_coeff _x_prefix ae(v)
if(log2TbHeight >0)  
    last_sig_coeff_ y_prefix ae(v)
if(last_sig_coeff_x_prefix> 3)  
    last_sig_coeff _x_suffix ae(v)
if(last_sig_coeff_y_prefix> 3)  
    last_sig_coeff _y_suffix ae(v)
log2TbWidth=log2ZoTbWidth  
log2TbHeight=log2ZoTbHeight  
remBinsPass1=((1<<(log2TbWidth+log2TbHeight))×7)>>2  
log2SbW=(Min(log2TbWidth,log2TbHeight)< 2 ?1: 2)  
log2SbH=log2SbW  
if(log2TbWidth+log2TbHeight>3)  
    if(log2TbWidth<2){  
       log2SbW=log2TbWidth  
       log2SbH=4−log2SbW  
    } elseif(log2TbHeight<2){  
       log2SbH=log2TbHeight  
       log2SbW=4−log2SbH  
    }  
numSbCoeff=1<<(log2SbW+log2SbH)  
lastScanPos=numSbCoeff  
lastSubBlock=(1<<(log2TbWidth+log2TbHeight−(log2SbW+log2SbH)))−1  
do {  
    if(lastScanPos ==0){  
       lastScanPos=numSbCoeff  
       lastSubBlock−−  
    }  
    lastScanPos−−  
    xS=DiagScanOrder[log2TbWidth−log2SbW][log2TbHeight−log2SbH]                              [lastSubBlock][0]  
    yS=DiagScanOrder[log2TbWidth−log2SbW][log2TbHeight−log2SbH]                              [lastSubBlock][1]  
    xC=(xS<<log2SbW)+DiagScanOrder[log2SbW][log2SbH][lastScanPos][0]  
    yC=(yS<<log2SbH)+DiagScanOrder[log2SbW][log2SbH][lastScanPos][1]  
} while((xC  !=  LastSignificantCoeffX) | |  (yC  !=  LastSignificantCoeffY))  
if(lastSubBlock ==0  &&  log2TbWidth>=2  &&  log2TbHeight>=2  &&            !transform_skip_flag[x0][y0][cIdx]  &&  lastScanPos >0)  
    LfnstDcOnly=0  
if((lastSubBlock >0  &&  log2TbWidth>=2  &&  log2TbHeight>=2) | |            (lastScanPos>7  &&  (log2TbWidth ==  2  | |  log2TbWidth ==  3) &&            log2TbWidth ==  log2TbHeight))  
    LfnstZeroOutSigCoeffFlag=0  
if((lastSubBlock >0  | |  lastScanPos >0) && cIdx==0)  
    MtsDcOnly=0  
QState=0  
for(i=lastSubBlock; i >=0; i−−){  
    startQStateSb=QState  
    xS=DiagScanOrder[log2TbWidth−log2SbW][log2TbHeight−log2SbH]                              [i][0]  
    yS=DiagScanOrder[log2TbWidth−log2SbW][log2TbHeight−log2SbH]                              [i][1]  
    inferSbDcSigCoeffFlag=0  
    if(i<lastSubBlock  &&  I >0){  
       sb_coded_flag[xS][yS] ae(v)
       inferSbDcSigCoeffFlag=1  
    }  
    if(sb_coded_flag[xS][yS] &&  (xS>3  | |  yS>3) && cIdx==0)  
       MtsZeroOutSigCoeffFlag=0  
    firstSigScanPosSb=numSbCoeff  
    lastSigScanPosSb=−1  
    firstPosMode0=(i ==  lastSubBlock ? lastScanPos : numSbCoeff−1)  
    firstPosMode1=firstPosMode0  
    for(n=firstPosMode0;n>=0  &&  remBinsPass1>=4; n−−){  
       xC=(xS<<log2SbW)+DiagScanOrder[log2SbW][log2SbH][n][0]  
       yC=(yS<<log2SbH)+DiagScanOrder[log2SbW][log2SbH][n][1]  
       if(sb_coded_flag[xS][yS] &&  (n >0  | |  !inferSbDcSigCoeffFlag) &&               (xC  !=  LastSignificantCoeffX | |  yC  != LastSignificantCoeffY)){  
           sig_coeff_flag[xC][yC] ae(v)
           remBinsPass1−−  
           if(sig_coeff_flag[xC][yC])  
               inferSbDcSigCoeffFlag=0  
       }  
       if(sig_coeff_flag[xC][yC]){  
           abs_level_gtx_flag[n][0] ae(v)
           remBinsPass1−−  
           if(abs_level_gtx_flag[n][0]){  
               par_level_flag[n] ae(v)
               remBinsPass1−−  
               abs_level_gtx_flag[n][1] ae(v)
               remBinsPass1−−  
           }  
           if(lastSigScanPosSb == −1)  
               lastSigScanPosSb=n  
           firstSigScanPosSb=n  
       }  
       AbsLevelPass1[xC][yC]=sig_coeff_flag[xC][yC]+par_level_flag[n]+                   abs_level_gtx_flag[n][0]+2×abs_level_gtx_flag[n][1]  
       if(sh_dep_quant_used_flag)  
           QState=QStateTransTable[QState][AbsLevelPass1[xC][yC]&1]  
       firstPosMode1=n−1  
    }  
    for(n=firstPosMode0; n>firstPosMode1; n−−){  
       xC=(xS<<log2SbW)+DiagScanOrder[log2SbW][log2SbH][n][0]  
       yC=(yS<<log2SbH)+DiagScanOrder[log2SbW][log2SbH][n][1]  
       if(abs_level_gtx_flag[n][1])  
           abs_remainder[n] ae(v)
       AbsLevel[xC][yC]=AbsLevelPass1[xC][yC]+2×abs_remainder[n]  
    }  
    for(n=firstPosMode1;n>=0; n−−){  
       xC=(xS<<log2SbW)+DiagScanOrder[log2SbW][log2SbH][n][0]  
       yC=(yS<<log2SbH)+DiagScanOrder[log2SbW][log2SbH][n][1]  
       if(sb_coded_flag[xS][yS])  
           dec_abs_level[n] ae(v)
       if(AbsLevel[xC][yC]>0){  
           if(lastSigScanPosSb == −1)  
               lastSigScanPosSb=n  
           firstSigScanPosSb=n  
       }  
       if(sh_dep_quant_used_flag)  
           QState=QStateTransTable[QState][AbsLevel[xC][yC]&1]  
    }  
    signHiddenFlag=sh_sign_data_hiding_used_flag  &&               (lastSigScanPosSb−firstSigScanPosSb>3 ?1:0)  
    for(n=numSbCoeff−1;n>=0; n−−){  
       xC=(xS<<log2SbW)+DiagScanOrder[log2SbW][log2SbH][n][0]  
       yC=(yS<<log2SbH)+DiagScanOrder[log2SbW][log2SbH][n][1]  
       if((AbsLevel[xC][yC]>0) &&               (!signHiddenFlag  | |  (n  !=  firstSigScanPosSb)))  
           coeff_sign_flag[n] ae(v)
    }  
    if(sh_dep_quant_used_flag){  
       QState=startQStateSb  
       for(n=numSbCoeff−1;n>=0; n−−){  
           xC=(xS<<log2SbW)+DiagScanOrder[log2SbW][log2SbH][n][0]  
           yC=(yS<<log2SbH)+DiagScanOrder[log2SbW][log2SbH][n][1]  
           if(AbsLevel[xC][yC]>0)  
               TransCoeffLevel[x0][y0][cIdx][xC][yC]=                          (2×AbsLevel[xC][yC]−(QState>1?1:0))×                          (1−2×coeff_sign_flag[n])  
           QState=QStateTransTable[QState][AbsLevel[xC][yC]&1]  
       }  
    } else{  
       sumAbsLevel=0  
       for(n=numSbCoeff−1;n>=0; n−−){  
           xC=(xS<<log2SbW)+DiagScanOrder[log2SbW][log2SbH][n][0]  
           yC=(yS<<log2SbH)+DiagScanOrder[log2SbW][log2SbH][n][1]  
           if(AbsLevel[xC][yC]>0){  
               TransCoeffLevel[x0][y0][cIdx][xC][yC] =                          AbsLevel[xC][yC]×(1−2×coeff_sign_flag[n])  
               if(signHiddenFlag){  
                  sumAbsLevel  +=  AbsLevel[xC][yC]  
                  if(n ==  firstSigScanPosSb  && sumAbsLevel % 2 ==1)  
                      TransCoeffLevel[x0][y0][cIdx][xC][yC] =                                 −TransCoeffLevel[x0][y0][cIdx][xC][yC]  
               }  
           }  
       }  
    }  
}  
}  
其中,陣列AbsLevel[xC][yC]代表當前變換塊的變換係數的絕對值的陣列。陣列AbsLevelPass1[xC][yC]代表當前變換塊的變換係數的部分重建的絕對值的陣列。陣列的索引xC和yC表示當前變換塊中的(xC,yC)位置。
進入residual_coding(x0,y0,log2TbWidth,log2TbHeight,cIdx)函數後,需要確定一些塊尺寸的訊息,如確定zero-out後的塊尺寸的對數log2ZoTbWidth、log2ZoTbHeight,橫坐標在[0,(1<<log2ZoTbWidth)–1]、縱坐標在[0,(1<<log2ZoTbHeight)–1]範圍內的係數可能是非零係數。這裡,(1<<log2ZoTbWidth)表示zero-out後的變換塊的寬度,(1<< log2ZoTbHeight)表示zero-out後的變換塊的高度。然後根據last_sig_coeff_x_prefix、last_sig_coeff_y_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_suffix等確定最後一個非零係數的位置。按掃描順序最後一個非零係數之前的係數可能是非零係數。然後確定remBinsPass1的值,即使用等式remBinsPass1=((1<<(log2TbWidth+log2TbHeight))×7)>>2確定。remBinsPass1就確定了當前塊中使用上下文模式編碼的語法元素的個數,本申請實施例可以理解remBinsPass1為remaining binaries inpass1的意思,也就是第一輪中剩餘的二元符號的個數。按掃描順序最後一個非零係數之前的係數需要編碼。對這些係數所在的子塊,依次確定當前子塊是否需要編碼,如果需要編碼,該方法中把一個子塊中上下文模式編碼的語法元素放在了第一輪中,旁路模式編碼的語法元素放在了後面。每個係數最多可能需要處理4個上下文模式編碼的語法元素1個sig_coeff_flag,2個abs_level_gtx_flag,1個par_level_flag。在第一輪中,每次處理完一個上下文模式編碼的語法元素remBinsPass1就會減1。如果一個係數足夠大,在第一輪處理完上下文模式編碼的幾個語法元素後還需要處理剩餘值,即abs_remainder。而如果remBinsPass1已經足夠小了(不滿足remBinsPass1>=4),第一輪就會結束,剩下的係數就會直接用旁路模式處理,即dec_abs_level。
在另一種具體的示例中,TSRC的具體語法如表2所示。
表2
residual_ts_coding(x0,y0,log2TbWidth,log2TbHeight,cIdx){ Descriptor
log2SbW=(Min(log2TbWidth,log2TbHeight)<2 ?1: 2)  
log2SbH=log2SbW  
if(log2TbWidth+log2TbHeight>3)  
    if(log2TbWidth<2){  
       log2SbW=log2TbWidth  
       log2SbH=4−log2SbW  
    } elseif(log2TbHeight<2){  
       log2SbH=log2TbHeight  
       log2SbW=4−log2SbH  
    }  
numSbCoeff=1<<(log2SbW+log2SbH)  
lastSubBlock=(1<<(log2TbWidth+log2TbHeight−(log2SbW+log2SbH)))−1  
inferSbCbf=1  
RemCcbs=((1<<(log2TbWidth+log2TbHeight))×7)>>2  
for(i =0; i  <=  lastSubBlock; i++){  
    xS=DiagScanOrder[log2TbWidth−log2SbW][log2TbHeight−log2SbH][i][0]  
    yS=DiagScanOrder[log2TbWidth−log2SbW][log2TbHeight−log2SbH][i][1]  
    if(i  !=  lastSubBlock  | |  !inferSbCbf)  
       sb_coded_flag[xS][yS] ae(v)
    if(sb_coded_flag[xS][yS] &&  i<lastSubBlock)  
       inferSbCbf=0  
/×Firstscanpass ×/  
    inferSbSigCoeffFlag=1  
    lastScanPosPass1=−1  
    for(n=0;n <=  numSbCoeff−1 &&  RemCcbs>=4; n++){  
       xC=(xS<<log2SbW)+DiagScanOrder[log2SbW][log2SbH][n][0]  
       yC=(yS<<log2SbH)+DiagScanOrder[log2SbW][log2SbH][n][1]  
       lastScanPosPass1=n  
       if(sb_coded_flag[xS][yS] &&                   (n  !=  numSbCoeff−1 | |  !inferSbSigCoeffFlag)){  
           sig_coeff_flag[xC][yC] ae(v)
           RemCcbs−−  
           if(sig_coeff_flag[xC][yC])  
               inferSbSigCoeffFlag=0  
       }  
       CoeffSignLevel[xC][yC]=0  
       if(sig_coeff_flag[xC][yC]){  
           coeff_sign_flag[n] ae(v)
           RemCcbs−−  
           CoeffSignLevel[xC][yC]=(coeff_sign_flag[n]>0 ?−1:1)  
           abs_level_gtx_flag[n][0] ae(v)
           RemCcbs−−  
           if(abs_level_gtx_flag[n][0]){  
               par_level_flag[n] ae(v)
               RemCcbs−−  
           }  
       }  
       AbsLevelPass1[xC][yC]=                   sig_coeff_flag[xC][yC]+par_level_flag[n]+abs_level_gtx_flag[n][0]  
    }  
/×Greater than Xscanpass(numGtXFlags=5)×/  
    lastScanPosPass2=−1  
    for(n=0;n <=  numSbCoeff−1 &&  RemCcbs>=4; n++){  
       xC=(xS<<log2SbW)+DiagScanOrder[log2SbW][log2SbH][n][0]  
       yC=(yS<<log2SbH)+DiagScanOrder[log2SbW][log2SbH][n][1]  
       AbsLevelPass2[xC][yC]=AbsLevelPass1[xC][yC]  
       for(j=1; j<5; j++){  
           if(abs_level_gtx_flag[n][j−1]){  
               abs_level_gtx_flag[n][j] ae(v)
               RemCcbs−−  
           }  
           AbsLevelPass2[xC][yC]+=2×abs_level_gtx_flag[n][j]  
       }  
       lastScanPosPass2=n  
    }  
/×remainderscanpass ×/  
    for(n=0;n <=  numSbCoeff−1; n++){  
       xC=(xS<<log2SbW)+DiagScanOrder[log2SbW][log2SbH][n][0]  
       yC=(yS<<log2SbH)+DiagScanOrder[log2SbW][log2SbH][n][1]  
       if((n  <=  lastScanPosPass2  &&  AbsLevelPass2[xC][yC]>=10) | |                   (n>lastScanPosPass2  && n <=  lastScanPosPass1 &&                   AbsLevelPass1[xC][yC]>= 2) | |                   (n>lastScanPosPass1 && sb_coded_flag[xS][yS]))  
           abs_remainder[n] ae(v)
       if(n  <=  lastScanPosPass2)  
           AbsLevel[xC][yC]=AbsLevelPass2[xC][yC]+2×abs_remainder[n]  
       elseif(n  <=  lastScanPosPass1)  
           AbsLevel[xC][yC]=AbsLevelPass1[xC][yC]+2×abs_remainder[n]  
       else{ /×bypass ×/  
           AbsLevel[xC][yC]=abs_remainder[n]  
           if(abs_remainder[n])  
               coeff_sign_flag[n] ae(v)
       }  
       if(BdpcmFlag[x0][y0][cIdx] ==0  && n <=  lastScanPosPass1){  
           absLeftCoeff=xC >0 ? AbsLevel[xC−1][yC]:0  
           absAboveCoeff =yC >0 ? AbsLevel[xC][yC−1]:0  
           predCoeff=Max(absLeftCoeff,absAboveCoeff)  
           if(AbsLevel[xC][yC]==1 && predCoeff >0)  
               AbsLevel[xC][yC]=predCoeff  
           elseif(AbsLevel[xC][yC]>0  && AbsLevel[xC][yC] <= predCoeff)  
               AbsLevel[xC][yC]−−  
       }  
       TransCoeffLevel[x0][y0][cIdx][xC][yC]=(1−2×coeff_sign_flag[n])×                   AbsLevel[xC][yC]  
    }  
}  
}  
進入residual_ts_coding(x0,y0,log2TbWidth,log2TbHeight,cIdx)函數後,需要確定一些塊尺寸的訊息。然後確定RemCcbs的值,即使用等式RemCcbs=((1<<(log2TbWidth+log2TbHeight))×7)>>2確定。RemCcbs就確定了當前塊中使用上下文模式編碼的語法元素的個數,本申請實施例可以理解RemCcbs為remainingcontextcoded binaries的意思,也就是剩餘的上下文模式編碼的二元符號的個數。對每一個子塊,確定當前子塊是否需要編碼。如果需要編碼,與上述RRC不同,TSRC方法中把一個子塊中上下文模式編碼的語法元素放在了兩輪中,每個係數在第一輪和第二輪中分別最多處理4個上下文模式編碼的語法元素。旁路模式編碼的語法元素放在了後面。在第一輪和第二輪中,每次處理完一個上下文模式編碼的語法元素remBinsPass1就會減1。如果一個係數足夠大,在第一輪和第二輪處理完上下文模式編碼的幾個語法元素後還需要處理剩餘值,即abs_remainder。而如果remBinsPass1已經足夠小了(不滿足remBinsPass1>=4),前兩輪就會結束,剩下的係數就會直接用旁路模式處理,這裡仍然是abs_remainder。
簡言之,在相關技術中,已有的這種係數編碼方法對於目前常用的影像,如消費類的影像,有很好的壓縮效率。消費類影像通常每個像素的位寬為8位或者10位,消費類影像通常碼率不會太高,通常為幾兆每秒(MB/s)或更低。但是有一些應用的影像的像素需要更高位寬,如每個像素的位寬為12位、14位或16位或更多。更高的位寬通常會帶來更大的係數,更多的非零係數,從而帶來更高的碼率。有一些應用的影像需要更高的品質,更高的品質通常也會帶來更大的係數,更多的非零係數,從而帶來更高的碼率。更高的碼率對解碼器的處理能力如輸送量就要有更高的要求。
高位寬、高品質、高碼率的影像(三高影像)通常較低位寬、低品質、低碼率的影像(常規影像)需要編解碼的係數更多而且係數更大。比如三高影像中一個塊中需要編解碼的係數比常規影像中同樣大小的一個塊中需要編解碼的係數多得多。因為常規影像的塊中經過預測、變換、量化之後的係數很多都變成了0,而三高影像的塊中經過預測、變換、量化之後的係數很多仍然是非0係數。常規影像的塊中經過預測、變換、量化之後的係數中需要編碼的係數中有很大比例是0,因而用最後一個非零係數位置(LastSignificantCoeffX,LastSignificantCoeffY)來區分是否要編碼的係數區域是非常有效的。即使是在最後一個非零係數位置之前的係數仍讓有很大比例是0,因而用子塊是否編碼的標誌sb_coded_flag來進一步區分當前子塊是否需要編碼是非常有效的。但是在當前塊中的非零係數非常多,甚至絕大多數係數甚至所有係數都是非零係數時,上述最後一個非零係數位置以及子塊是否編碼的標誌就不會過濾掉太多非零係數,而且本身在碼流中編碼非零係數位置以及子塊是否編碼的標誌等會佔用一定的開銷,會產生浪費。
另一方面,所述最後一個非零係數位置以及子塊是否編碼的標誌等都是用上下文模式編碼的,上下文模式編碼較旁路模式更複雜,處理這些訊息還會影響軟體及硬體編解碼的速度、輸送量。
又一方面,目前的最後一個非零係數位置(LastSignificantCoeffX,LastSignificantCoeffY)的編碼方法是編碼最後一個非零係數位置的座標。在常規影像中,由於非零係數大多集中在左上角而右下角的大片區域是0,LastSignificantCoeffX和LastSignificantCoeffY的值通常較小。而在三高影像中,右下角也會出現大量非零係數,這就導致LastSignificantCoeffX和LastSignificantCoeffY的值通常較大,從而在碼流中編碼較大的值會帶來更大的開銷。此外,還有一種可能是在無失真壓縮時使用本方法,因為無失真壓縮時不能使用量化,這時候通常係數會比較多,比較大。這時候使用已有的相關方案可能會帶來更大的開銷,產生浪費,甚至影響編解碼的速度和輸送量。
本申請實施例提供了一種係數解碼方法,應用於解碼器。解析碼流,獲取影像標識訊息;當影像標識訊息指示影像滿足預設條件時,解析所述碼流,獲取最後一個非零係數位置翻轉標識訊息和最後一個非零係數的座標訊息;當最後一個非零係數位置翻轉標識訊息指示當前塊使用最後一個非零係數位置翻轉時,對最後一個非零係數的座標訊息進行計算,確定最後一個非零係數的位置;按照預設掃描順序對最後一個非零係數的位置之前的所有係數進行解碼,確定所述當前塊的係數。
本申請實施例還提供了一種係數編碼方法,應用於編碼器。確定影像標識訊息以及最後一個非零係數的位置;當影像標識訊息指示影像滿足預設條件時,確定最後一個非零係數位置翻轉標識訊息;根據最後一個非零係數的位置以及最後一個非零係數位置翻轉標識訊息,確定最後一個非零係數的座標訊息;按照預設掃描順序對最後一個非零係數的位置之前的所有係數進行編碼,並將編碼後得到的位元訊息、影像標識訊息以及最後一個非零係數的座標訊息寫入碼流。
這樣,在高位寬、高碼率、高品質或無損的影像編解碼場景中,由於係數分佈規律與常規影像場景不同,在係數編碼中透過減少甚至消除上下文模式編碼的語法元素個數,比如關於最後一個非零係數位置、子塊編碼標識等語法元素,甚至還可以在最後一個非零係數的座標訊息的值偏大時進行座標變換,從而可以減少碼流中編碼所帶來的開銷,進而提高係數編碼的輸送量和編解碼速度;另外,由於減少或消除的語法元素在高位寬、高碼率、高品質或無損的影像編解碼中的影響較小,還能夠提升壓縮效率。
下面將結合附圖對本申請各實施例進行詳細說明。
參見圖8A,其示出了本申請實施例提供的一種編碼器的系統組成方塊圖示例。如圖8A所示,編碼器100可以包括:分割單元101、預測單元102、第一加法器107、變換單元108、量化單元109、反量化單元110、逆變換單元111、第二加法器112、濾波單元113、解碼圖片快取(Decoded Picture Buffer,DPB)單元114和熵編碼單元115。這裡,編碼器100的輸入可以是由一系列圖片或者一張靜態圖片組成的影像,編碼器100的輸出可以是用於表示輸入影像的壓縮版本的位元流(也可以稱為“碼流”)。
其中,分割單元101將輸入影像中的圖片分割成一個或多個編碼樹單元(Coding Tree Units,CTUs)。分割單元101將圖片分成多個圖塊(或稱為瓦片,tiles),還可以進一步將一個tile分成一個或多個磚塊(bricks),這裡,一個tile或者一個brick中可以包括一個或多個完整的和/或部分的CTUs。另外,分割單元101可以形成一個或多個切片(slices),其中一個slice可以包括圖片中按照柵格順序排列的一個或多個tiles,或者覆蓋圖片中矩形區域的一個或多個tiles。分割單元101還可形成一個或多個子圖片,其中,一個子圖片可以包括一個或多個slices、tiles或bricks。
在編碼器100的編碼過程中,分割單元101將CTU傳送到預測單元102。通常,預測單元102可以由塊分割單元103、運動估計(Motion Estimation,ME)單元104、運動補償(Motion Compensation,MC)單元105和幀內預測單元106組成。具體地,塊分割單元103反覆運算地使用四元樹分割、二元樹分割和三元樹分割而進一步將輸入CTU劃分成更小的編碼單元(Coding Units,CUs)。預測單元102可使用ME單元104和MC單元105獲取CU的幀間預測塊。幀內預測單元106可使用包括MIP模式的各種幀內預測模式獲取CU的幀內預測塊。在示例中,位元率失真優化的運動估計方式可被ME單元104和MC單元105調用以獲取幀間預測塊,以及位元率失真優化的模式確定方式可被幀內預測單元106調用以獲取幀內預測塊。
預測單元102輸出CU的預測塊,第一加法器107計算分割單元101的輸出中的CU和CU的預測塊之間的差值,即殘差CU。變換單元108讀取殘差CU並對殘差CU執行一個或多個變換操作以獲取係數。量化單元109對係數進行量化並輸出量化係數(即levels)。反量化單元110對量化係數執行縮放操作以輸出重構係數。逆變換單元111執行對應於變換單元108中的變換的一個或多個逆變換並輸出重構殘差。第二加法器112透過使重構殘差和來自預測單元102的CU的預測塊相加而計算出重構CU。第二加法器112還將其輸出發送到預測單元102以用作幀內預測參考。在圖片或子圖片中的所有CU被重構之後,濾波單元113對重構圖片或子圖片執行迴路濾波。這裡,濾波單元113包含一個或多個濾波器,例如去方塊濾波器、取樣自適應偏移(Sample Adaptive Offset,SAO)濾波器、自適應迴路濾波器(Adaptive Loop Filter,ALF)、亮度映射和色度縮放(Luma Mapping with Chroma Scaling,LMCS)濾波器以及基於神經網路的濾波器等。或者,當濾波單元113確定CU不用作其它CU編碼時的參考時,濾波單元113對CU中的一個或多個目標像素執行迴路濾波。
濾波單元113的輸出是解碼圖片或子圖片,這些解碼圖片或子圖片快取至DPB單元114。DPB單元114根據時序和控制訊息輸出解碼圖片或子圖片。這裡,儲存在DPB單元114中的圖片還可用作預測單元102執行幀間預測或幀內預測的參考。最後熵編碼單元115將來自編碼器100中解碼圖片所必需的參數(比如控制參數和補充訊息等)轉換成二進位形式,並根據每個資料單元的語法結構將這樣的二進位形式寫入碼流中,即編碼器100最終輸出碼流。
進一步地,編碼器100可以是具有第一處理器和記錄電腦程式的第一記憶體。當第一處理器讀取並運行電腦程式時,編碼器100讀取輸入影像並生成對應的碼流。另外,編碼器100還可以是具有一個或多個晶片的計算設備。在晶片上實現為積體電路的這些單元具有與圖8A中相應單元類似的連接和資料交換功能。
參見圖8B,其示出了本申請實施例提供的一種解碼器的系統組成方塊圖示例。如圖8B所示,該解碼器200可以包括:解析單元201、預測單元202、反量化單元205、逆變換單元206、加法器207、濾波單元208和解碼圖片快取單元209。這裡,解碼器200的輸入是用於表示影像或者一張靜態圖片的壓縮版本的位元流,解碼器200的輸出可以是由一系列圖片組成的解碼影像或者一張解碼的靜態圖片。
其中,解碼器200的輸入碼流可以是編碼器100所生成的碼流。解析單元201對輸入碼流進行解析並從輸入碼流獲取語法元素的值。解析單元201將語法元素的二進位表示轉換成數位值並將數位值發送到解碼器200中的單元以獲取一個或多個解碼圖片。解析單元201還可從輸入碼流解析一個或多個語法元素以顯示解碼圖片。
在解碼器200的解碼過程中,解析單元201將語法元素的值以及根據語法元素的值設置或確定的、用於獲取一個或多個解碼圖片的一個或多個變數發送到解碼器200中的單元。
預測單元202確定當前解碼塊(例如CU)的預測塊。這裡,預測單元202可以包括運動補償單元203和幀內預測單元204。具體地,當指示幀間解碼模式用於對當前解碼塊進行解碼時,預測單元202將來自解析單元201的相關參數傳遞到運動補償單元203以獲取幀間預測塊;當指示幀內預測模式(包括基於MIP模式索引值指示的MIP模式)用於對當前解碼塊進行解碼時,預測單元202將來自解析單元201的相關參數傳送到幀內預測單元204以獲取幀內預測塊。
反量化單元205具有與編碼器100中的反量化單元110相同的功能。反量化單元205對來自解析單元201的量化係數(即levels)執行縮放操作以獲取重構係數。
逆變換單元206具有與編碼器100中的逆變換單元111相同的功能。逆變換單元206執行一個或多個變換操作(即透過編碼器100中的逆變換單元111執行的一個或多個變換操作的反操作)以獲取重構殘差。
加法器207對其輸入(來自預測單元202的預測塊和來自逆變換單元206的重構殘差)執行相加操作以獲取當前解碼塊的重構塊。重構塊還發送到預測單元202以用作在幀內預測模式下編碼的其它塊的參考。
在圖片或子圖片中的所有CU被重構之後,濾波單元208對重構圖片或子圖片執行迴路濾波。濾波單元208包含一個或多個濾波器,例如去方塊濾波器、取樣自適應補償濾波器、自適應迴路濾波器、亮度映射和色度縮放濾波器以及基於神經網路的濾波器等。或者,當濾波單元208確定重構塊不用作對其它塊解碼時的參考時,濾波單元208對重構塊中的一個或多個目標像素執行迴路濾波。這裡,濾波單元208的輸出是解碼圖片或子圖片,解碼圖片或子圖片快取至DPB單元209。DPB單元209根據時序和控制訊息輸出解碼圖片或子圖片。儲存在DPB單元209中的圖片還可用作透過預測單元202執行幀間預測或幀內預測的參考。
進一步地,解碼器200可以是具有第二處理器和記錄電腦程式的第二記憶體。當第一處理器讀取並運行電腦程式時,解碼器200讀取輸入碼流並生成對應的解碼影像。另外,解碼器200還可以是具有一個或多個晶片的計算設備。在晶片上實現為積體電路的這些單元具有與圖8B中相應單元類似的連接和資料交換功能。
還需要說明的是,當本申請實施例應用於編碼器100時,“當前塊”具體是指影像圖像中的當前待編碼的塊(也可以簡稱為“編碼塊”);當本申請實施例應用於解碼器200時,“當前塊”具體是指影像圖像中的當前待解碼的塊(也可以簡稱為“解碼塊”)。
本申請的一實施例中,參見圖9,其示出了本申請實施例提供的一種係數解碼方法的流程示意圖。如圖9所示,該方法可以包括:
S901:解析碼流,獲取影像標識訊息。
需要說明的是,本申請實施例的係數解碼方法應用於解碼器。具體來說,基於圖8B所示解碼器200的組成結構,本申請實施例的係數解碼方法主要應用於解碼器200中的“解析單元201”部分,針對該解析單元201,可以採用前文參考之適應性二元算術編碼模式或者旁路模式進行解碼,得到相關標識訊息(或語法元素)的取值,進而確定出當前塊的係數。
還需要說明的是,影像標準中通常所說的係數編碼可以包括編碼和解碼兩部分,因此,係數編碼包括編碼器側的係數編碼方法和解碼器側的係數解碼方法。本申請實施例則針對解碼器側的係數解碼方法進行描述。
通常情況下,比如對於常規影像而言,係數解碼方法與相關技術中的已有方法相同;但是針對某種情況,比如高位寬或高品質或高碼率或無失真壓縮的影像編解碼場景,本申請實施例可以修改最後一個非零係數的位置匯出方法。
在本申請實施例中,首先需要判斷當前的影像是否滿足預設條件,可以用影像標識訊息來表示。在一些實施例中,所述解析碼流,獲取影像標識訊息,可以包括:
若影像標識訊息的取值為第一值,則確定影像標識訊息指示影像滿足預設條件;或者,
若影像標識訊息的取值為第二值,則確定影像標識訊息指示影像不滿足預設條件。
在這裡,第一值為1,第二值為0。
需要說明的是,在另一具體的示例中,第一值還可以設置為true,第二值還可以設置為false。甚至在又一具體的示例中,第一值還可以設置為0,第二值還可以設置為1;或者,第一值還可以設置為false,第二值還可以設置為true。這裡不作任何限定。
還需要說明的是,預設條件至少包括下述之一:高位寬、高品質、高碼率、高幀率和無失真壓縮。
也就是說,相比較於常規影像,本申請實施例所述的影像具有高位寬、高品質、高碼率、高幀率和無失真壓縮等特性。
進一步地,影像標識訊息可以是序列(sequence)級的標誌,甚至也可以是更高級別的標誌,比如影像可用性訊息(Video Usability Information,VUI)、補充增強訊息(Supplemental Enhancement Information,SEI)等。判斷影像是否滿足預設條件,可以透過判斷該影像是否滿足高位寬、或者是否滿足高碼率、或者是否滿足高品質、或者是否滿足無失真壓縮等,下面以這四種情況為例分別進行描述。
在一些實施例中,當影像標識訊息為高位寬標識訊息時,該方法還可以包括:
若高位寬標識訊息指示所述影像滿足高位寬,則確定影像滿足預設條件。
在一些實施例中,當影像標識訊息為高碼率標識訊息時,該方法還可以包括:
若高碼率標識訊息指示所述影像滿足高碼率,則確定影像滿足預設條件。
在一些實施例中,當影像標識訊息為高品質標識訊息時,該方法還可以包括:
若高品質標識訊息指示所述影像滿足高品質,則確定影像滿足預設條件。
在一些實施例中,當影像標識訊息為無失真壓縮標識訊息時,該方法還可以包括:
若無失真壓縮標識訊息指示所述影像滿足無失真壓縮,則確定影像滿足預設條件。
示例性地,以序列級為例,影像標識訊息可以是高位寬標識訊息(用sps_high_bit_depth_flag表示),用於指示當前的影像序列是否為高位寬序列;或者也可以替換為高碼率標識訊息(用sps_high_bit_rate_flag表示),用於指示當前的影像序列是否為高碼率序列;或者也可以替換為其他指示高位寬、高碼率、高品質或者無失真壓縮的標識訊息,本申請實施例不作具體限定。
S902:當影像標識訊息指示影像滿足預設條件時,解析碼流,獲取最後一個非零係數位置翻轉標識訊息和最後一個非零係數的座標訊息。
需要說明的是,在影像標識訊息指示影像滿足預設條件時,這時候可以進一步解析碼流,以獲取最後一個非零係數位置翻轉標識訊息和最後一個非零係數的座標訊息。
對於最後一個非零係數的座標訊息而言,可以是由last_sig_coeff_x_ prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_prefix、last_sig_coeff_y_suffix確定的。因此,在一些實施例中,所述解析碼流,獲取最後一個非零係數的座標訊息,可以包括:
解析碼流,獲取最後一個非零係數的水平座標的首碼訊息、最後一個非零係數的豎直座標的首碼訊息、最後一個非零係數的水平座標的尾碼訊息和最後一個非零係數的豎直座標的尾碼訊息;
根據最後一個非零係數的水平座標的首碼訊息和最後一個非零係數的水平座標的尾碼訊息,確定最後一個非零係數的水平座標;
根據最後一個非零係數的豎直座標的首碼訊息和最後一個非零係數的豎直座標的尾碼訊息,確定最後一個非零係數的豎直座標;
根據最後一個非零係數的水平座標和最後一個非零係數的豎直座標,確定所述最後一個非零係數的座標訊息。
需要說明的是,最後一個非零係數的水平座標的首碼訊息用last_sig_coeff_x_prefix表示,即確定當前塊按照預設掃描順序最後一個非零係數的水平(或列)座標的首碼;最後一個非零係數的豎直座標的首碼訊息用last_sig_coeff_y_prefix表示,即確定當前塊按照預設掃描順序最後一個非零係數的豎直(或行)座標的首碼;最後一個非零係數的水平座標的尾碼訊息用last_sig_coeff_x_suffix表示,即確定當前塊按照預設掃描順序最後一個非零係數的水平(或列)座標的尾碼;最後一個非零係數的豎直座標的尾碼訊息用last_sig_coeff_y_suffix表示,即確定當前塊按照預設掃描順序最後一個非零係數的豎直(或行)座標的尾碼。
還需要說明的是,last_sig_coeff_x_prefix和last_sig_coeff_x_suffix確定的是最後一個非零係數的橫坐標(即水平座標),last_sig_coeff_y_prefix和last_sig_coeff_y_suffix確定的是最後一個非零係數的縱坐標(即豎直座標),也就得到了最後一個非零係數的座標訊息。
對於最後一個非零係數位置翻轉標識訊息而言,可以用reverse_last_ sig_coeff_flag表示。在本申請實施例中,最後一個非零係數位置翻轉標識訊息至少可以為下述其中一項的標識訊息:序列(sequence)級、圖像(picture)級、片(slice)級和塊(block)級;甚至也可以為更高級別(如VUI、SEI等)的標識訊息,這裡不作任何限定。
也就是說,reverse_last_sig_coeff_flag可能是一個序列級或者更高級別的標誌,或者也可能是圖像級的標誌或者片級的標誌或者塊級的標誌或者其他級別的標誌。另外,塊級的標誌可以包括最大編碼單元(LCU)級的標誌或編碼單元(CU)級的標誌或者其他塊級的標誌,本申請實施例均不作任何限定。
在一些實施例中,該方法還可以包括:
若最後一個非零係數位置翻轉標識訊息的取值為第一值,則確定最後一個非零係數位置翻轉標識訊息指示當前塊使用最後一個非零係數位置翻轉;或者,
若最後一個非零係數位置翻轉標識訊息的取值為第二值,則確定最後一個非零係數位置翻轉標識訊息指示當前塊不使用最後一個非零係數位置翻轉。
也就是說,以第一值為1,第二值為0為例,如果reverse_last_sig_coeff _flag的取值為1,那麼可以確定reverse_last_sig_coeff_flag指示當前塊使用最後一個非零係數位置翻轉;或者,如果reverse_last_sig_ coeff_flag的取值為0,那麼可以確定reverse_last_sig_coeff_flag指示當前塊不使用最後一個非零係數位置翻轉。
S903:當最後一個非零係數位置翻轉標識訊息指示當前塊使用最後一個非零係數位置翻轉時,對最後一個非零係數的座標訊息進行計算,確定最後一個非零係數的位置。
S904:按照預設掃描順序對最後一個非零係數的位置之前的所有係數進行解碼,確定當前塊的係數。
需要說明的是,在本申請實施例中,當最後一個非零係數位置翻轉標識訊息指示當前塊使用最後一個非零係數位置翻轉時,可以確定最後一個非零係數的座標訊息為最後一個非零係數的位置相對於所述當前塊的右下角位置之間的水平距離和豎直距離。
這時候,在一些實施例中,所述對最後一個非零係數的座標訊息進行計算,確定最後一個非零係數的位置,可以包括:
確定當前塊的寬度和高度;
根據當前塊的寬度與最後一個非零係數的位置相對於當前塊的右下角位置之間的水平距離進行減法計算,得到所述最後一個非零係數的水平座標;以及
根據當前塊的高度與最後一個非零係數的位置相對於當前塊的右下角位置之間的豎直距離進行減法計算,得到最後一個非零係數的豎直座標;
根據最後一個非零係數的水平座標和最後一個非零係數的豎直座標,確定最後一個非零係數的位置。
需要說明的是,最後一個非零係數的座標訊息通常為最後一個非零係數的位置相對於當前塊的左上角位置之間的水平距離和豎直距離。對於常規影像來說,由於非零係數大多數集中在左上角,而右下角的大片區域為0;但是對於高位寬、高品質、高碼率的影像編解碼來說,右下角也會出現大量的非零係數,使得最後一個非零係數的座標訊息的值通常較大,這時候為了節省開銷,係數編碼的時候需要進行座標變換(具體可以是座標翻轉計算,即座標翻轉後最後一個非零係數的座標訊息為最後一個非零係數的位置相對於當前塊的右下角位置之間的水平距離和豎直距離),那麼在係數解碼時也需要進行座標翻轉計算,再次翻轉後可以恢復出最後一個非零係數的座標訊息為最後一個非零係數的位置相對於當前塊的左上角位置之間的水平距離和豎直距離,從而確定出最後一個非零係數的位置,以便按照預設掃描順序對當前塊內的最後一個非零係數的位置之前的所有係數進行解碼。
還需要說明的是,這裡的當前塊可以是沒有zero-out變換的塊,也可以是zero-out變換後的塊。以zero-out變換後的塊為例,這時候當前塊的寬度為1<<log2ZoTbWidth,當前塊的高度是1<<log2ZoTbHeight;那麼在reverse_last_sig_coeff_flag指示當前塊使用最後一個非零係數位置翻轉(即reverse_last_sig_coeff_flag的取值為1)的情況下,
LastSignificantCoeffX= (1<<log2ZoTbWidth)-1-LastSignificantCoeffX;
LastSignificantCoeffY= (1<<log2ZoTbHeight)-1-LastSignificantCoeffY。
其中,等式右邊的(LastSignificantCoeffX,LastSignificantCoeffY)表示透過解碼獲得的最後一個非零係數的座標訊息,等式左邊的(LastSignificantCoeffX,LastSignificantCoeffY)表示最後一個非零係數的位置(也可以看作最後一個非零係數的目標座標訊息)。
在本申請實施例中,在reverse_last_sig_coeff_flag的取值為0的情況下,在一些實施例中,該方法還可以包括:
當最後一個非零係數位置翻轉標識訊息指示當前塊不使用最後一個非零係數位置翻轉時,確定最後一個非零係數的座標訊息為最後一個非零係數的位置相對於當前塊的左上角位置之間的水平距離和豎直距離;
根據最後一個非零係數的位置相對於當前塊的左上角位置之間的水平距離和豎直距離,確定最後一個非零係數的位置。
需要說明的是,如果reverse_last_sig_coeff_flag指示當前塊不使用最後一個非零係數位置翻轉,那麼透過解碼獲取的最後一個非零係數的座標訊息即可以看作最後一個非零係數的目標座標訊息。在本申請實施例中,最後一個非零係數的目標座標訊息為最後一個非零係數的位置相對於當前塊的左上角位置之間的水平距離和豎直距離。
進一步地,在一些實施例中,該方法還可以包括:
當最後一個非零係數位置翻轉標識訊息指示當前塊不使用最後一個非零係數位置翻轉時,根據最後一個非零係數的座標訊息直接確定最後一個非零係數的位置;
按照預設掃描順序對最後一個非零係數的位置之前的所有係數進行解碼,確定當前塊的係數。
需要說明的是,預設掃描順序可以是對角線、Zigzag、水平、垂直、4×4子塊掃描或者任何其它掃描順序,本申請實施例不作任何限定。
還需要說明的是,在獲取reverse_last_sig_coeff_flag之後,如果reverse_last_sig_coeff_flag的取值為1,即需要使用最後一個非零係數位置翻轉,那麼在解碼得到最後一個非零係數的座標訊息之後,需要對最後一個非零係數的座標訊息進行計算,確定出最後一個非零係數的位置;然後按照預設掃描順序對最後一個非零係數的位置之前的所有係數進行解碼。如果reverse_last_sig_coeff_flag的取值為0,即不需要使用最後一個非零係數位置翻轉,那麼在解碼得到最後一個非零係數的座標訊息之後,可以根據最後一個非零係數的座標訊息直接確定出最後一個非零係數的位置;然後按照預設掃描順序對最後一個非零係數的位置之前的所有係數進行解碼。
如此,針對某種情況,在係數編碼時,本申請實施例提供一種修改最後一個非零係數的位置匯出方法。也就是說通常情況下,係數編解碼方法還是與相關技術的已有方法一樣。某種情況,比如可以是指高位寬或高品質或高碼率的影像或無失真壓縮的影像編解碼。通常情況下,last_sig_coeff_x_prefix、last_sig_coeff_x_suffix編碼的是最後一個非零係數位置的橫坐標,也就是相對於當前塊左上角的水平距離;last_sig_coeff_y_prefix、last_sig_coeff_y_suffix編碼的是最後一個非零係數位置的縱坐標,也就是相對於當前塊左上角的豎直距離,如圖10A所示。而在高位寬或高品質或高碼率或無失真壓縮的影像編解碼的情況下,最後一個非零係數的位置普遍接近於當前塊所有可能是非0係數的區域的右下角。在這種情況下,last_sig_coeff_x_prefix、last_sig_coeff_x_suffix編碼的是最後一個非零係數位置相對於當前塊所有可能是非0係數的區域的右下角的水平距離;last_sig_coeff_y_prefix、last_sig_coeff_y_suffix編碼的是最後一個非零係數位置相對於當前塊所有可能是非0係數的區域的右下角的豎直距離,如圖10B所示。例如,如果當前塊所有可能是非0係數的區域為(0,0)到((1<<log2ZoTbWidth)-1,(1<<log2ZoTbHeight)-1)的矩形區域,那麼last_sig_coeff_x_prefix、last_sig_coeff_x_suffix編碼的是最後一個非零係數位置相對於當前塊((1<<log2ZoTbWidth)-1,(1<<log2ZoTbHeight)-1)的水平距離。last_sig_coeff_y_prefix、last_sig_coeff_y_suffix編碼的是最後一個非零係數位置相對於當前塊((1<<log2ZoTbWidth)-1,(1<<log2ZoTbHeight)-1)的豎直距離。
針對語義的修改如下:
當前塊中按預設掃描順序最後一個非零係數的水平(或列)座標的值LastSignificantCoeffX按如下方法匯出:
如果last_sig_coeff_x_suffix不存在,那麼,
LastSignificantCoeffX= last_sig_coeff_x_prefix;
否則(last_sig_coeff_x_suffix存在),
LastSignificantCoeffX= (1<<((last_sig_coeff_x_prefix>>1)-1)) * (2+(last_ sig_coeff_x_prefix&1)) + last_sig_coeff_x_suffix;
如果reverse_last_sig_coeff_flag的取值為1,那麼
LastSignificantCoeffX = (1<<log2ZoTbWidth)-1-LastSignificantCoeffX;
當前塊中按掃描順序最後一個非零係數的豎直(或行)座標的值LastSignificantCoeffY按如下方法匯出:
如果last_sig_coeff_y_suffix不存在,那麼,
LastSignificantCoeffY= last_sig_coeff_y_prefix;
否則(last_sig_coeff_y_suffix存在):
LastSignificantCoeffY= (1<<((last_sig_coeff_y_prefix>>1)-1)) * (2+(last_ sig_coeff_y_prefix&1)) + last_sig_coeff_y_suffix;
如果reverse_last_sig_coeff_flag的取值為1,那麼
LastSignificantCoeffY= (1<<log2ZoTbHeight)-1-LastSignificantCoeffY。
其中,reverse_last_sig_coeff_flag是最後一個非零係數位置翻轉標誌,表示最後一個非零係數的位置是否需要翻轉。如果reverse_last_sig_coeff_flag的取值為1,表示最後一個非零係數的位置需要翻轉;否則,表示最後一個非零係數的位置不需要翻轉。
還需要說明的是,reverse_last_sig_coeff_flag可能是一個序列(sequence)級或者更高級別的標誌,也可能是圖像(picture)級的標誌或片(slice)級的標誌或塊(block)級的標誌或其他級別的標誌,塊級的標誌包括最大編碼單元(LCU)級的標誌或編碼單元(CU)級的標誌或其他塊級的標誌。
另外,reverse_last_sig_coeff_flag可能依賴於一些其他的標誌,比如高位寬標識訊息或高碼率標識訊息等。即當高位寬標識訊息或高碼率標識訊息的取值為1時,這時候需要解碼reverse_last_sig_coeff_flag標誌;否則,不需要解碼reverse_last_sig_coeff_flag標誌。
在一種具體的示例中,以序列級為例,假定有一個序列級的標誌sps_high_bit_depth_flag指示當前的影像序列是否為高位寬序列。如果sps_high_bit_depth_flag的取值為1,那麼表示當前的影像序列是高位寬序列;否則,表示當前的影像序列不是高位寬序列。在序列級,如果sps_high_ bit_depth_flag的取值為1,那麼需要解碼sps_reverse_last_sig_coeff_flag。這裡,sps_reverse_last_sig_coeff_flag是當前序列的最後一個非零係數位置翻轉標誌。如果sps_reverse_last_sig_coeff_flag的取值為1,那麼表示當前序列內的塊使用最後一個非零係數位置翻轉;否則(即sps_reverse_ last_sig_coeff_flag的取值為0),表示當前序列內的塊不使用最後一個非零係數位置翻轉。上述語法表中的reverse_last_sig_coeff_flag變更為sps_reverse_last_sig_coeff_flag。
其語法元素如下(Sequence parameter set RBSP syntax),參見表3。
表3
 
sps_high_bit_depth_flag u(1)
      if( sps_high_bit_depth_flag )  
                   sps_default_last_coeff_enabled_flag u(1)
      …  
在另一種具體的示例中,以片(slice)級為例,假定有一個序列級的標誌sps_high_bit_depth_flag指示當前的影像序列是否是高位寬序列。如果sps_high_bit_depth_flag的取值為1,那麼表示當前的影像序列是高位寬序列;否則,表示當前的影像序列不是高位寬序列。在slice級,如果sps_high_ bit_depth_flag的取值為1,那麼需要解碼sh_reverse_last_ sig_coeff_flag。這裡,sh_reverse_last_sig_coeff_flag是當前片的最後一個非零係數位置翻轉標誌。如果sh_reverse_last_sig_coeff_flag的取值為1,那麼表示當前片內的塊使用最後一個非零係數位置翻轉;否則(即sh_reverse_last_sig_coeff_flag的取值為0),表示當前片內的塊不使用最後一個非零係數位置翻轉。上述語法表中的reverse_last_sig_coeff_flag變更為sh_reverse_last_sig_coeff_flag。
其語法元素如下(Slice header syntax),參見表4。
表4
 
      if( sps_high_bit_depth_flag )  
                   sh_reverse_last_sig_coeff_flag u(1)
      …  
還可以理解,在影像標識訊息指示影像滿足預設條件時,這時候還可預設需要編碼所有可能需要編碼的係數,也就是不再使用最後一個非零係數的位置,而是按預設掃描順序把當前塊所有可能不為0的係數都掃描到;因此,本申請實施例還可以引入最後一個係數使能標識訊息,用於確定當前塊是否使用最後一個係數位置。
在一些實施例中,當影像標識訊息指示影像滿足預設條件時,該方法還可以包括:
解析碼流,獲取最後一個係數使能標識訊息;
當最後一個係數使能標識訊息指示當前塊使用最後一個係數位置時,按照預設掃描順序對最後一個係數位置之前的所有係數進行解碼,確定當前塊的係數。
需要說明的是,對於最後一個係數使能標識訊息而言,可以用default_last_coeff_enabled_flag表示。在本申請實施例中,最後一個係數使能標識訊息至少可以為下述其中一項的標識訊息:序列級、圖像級、片級和塊級;甚至也可以為更高級別(如VUI、SEI等)的標識訊息,這裡不作任何限定。
也就是說,default_last_coeff_enabled_flag可能是一個序列級或者更高級別的標誌,也可能是圖像級的標誌或者片級的標誌或者塊級的標誌或者其他級別的標誌。另外,塊級的標誌可以包括最大編碼單元(LCU)級的標誌或編碼單元(CU)級的標誌或者其他塊級的標誌,本申請實施例不作任何限定。
在一些實施例中,該方法還可以包括:
若最後一個係數使能標識訊息的取值為第一值,則確定最後一個係數使能標識訊息指示當前塊使用最後一個係數位置;或者,
若最後一個係數使能標識訊息的取值為第二值,則確定最後一個係數使能標識訊息指示當前塊不使用最後一個係數位置。
在這裡,第一值為1,第二值為0。
需要說明的是,在另一具體的示例中,第一值還可以設置為true,第二值還可以設置為false。甚至在又一具體的示例中,第一值還可以設置為0,第二值還可以設置為1;或者,第一值還可以設置為false,第二值還可以設置為true。這裡不作任何限定。
這樣,以第一值為1,第二值為0為例,如果default_last_coeff_ enabled_flag的取值為1,那麼可以確定default_last_coeff_enabled_flag指示當前塊使用最後一個係數位置;或者,如果default_last_coeff_ enabled_flag的取值為0,那麼可以確定default_last_coeff_enabled_flag指示當前塊不使用最後一個係數位置。
在當前塊使用最後一個係數位置的情況下,這時候可以按照預設掃描順序對最後一個係數位置之前的所有係數進行解碼,進而確定出當前塊的係數。
進一步地,在當前塊不使用最後一個係數位置的情況下,即最後一個係數使能標識訊息的取值為0,在一些實施例中,該方法還可以包括:
解析碼流,獲取最後一個非零係數的水平座標的首碼訊息、最後一個非零係數的豎直座標的首碼訊息、最後一個非零係數的水平座標的尾碼訊息和最後一個非零係數的豎直座標的尾碼訊息;
根據最後一個非零係數的水平座標的首碼訊息、最後一個非零係數的豎直座標的首碼訊息、最後一個非零係數的水平座標的尾碼訊息和最後一個非零係數的豎直座標的尾碼訊息,確定最後一個非零係數的位置;
按照預設掃描順序對最後一個非零係數的位置之前的所有係數進行解碼,確定當前塊的係數。
需要說明的是,如果當前塊不使用最後一個係數位置,那麼這時候需要解碼獲取最後一個非零係數的位置。具體地,透過解析碼流,獲取last_sig_coeff_x_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_ prefix、last_sig_coeff_y_suffix;然後根據last_sig_coeff_x_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_ prefix、last_sig_coeff_y_suffix,進而確定出最後一個非零係數的位置。否則,如果當前塊使用最後一個係數位置,這時候不再需要確定最後一個非零係數的位置,也就不再需要解碼獲取last_sig_coeff_x_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_ prefix、last_sig_coeff_y_suffix。
還需要說明的是,如果當前塊使用最後一個係數位置,那麼可以按照預設掃描順序對最後一個係數位置之前的所有係數進行解碼;如果當前塊不使用最後一個係數位置,那麼可以按照預設掃描順序對最後一個非零係數的位置之前的所有係數進行解碼。這裡,預設掃描順序可以是對角線、Zigzag、水平、垂直、4×4子塊掃描或者任何其它掃描順序,本申請實施例不作任何限定。
進一步地,對於最後一個係數位置而言,在一些實施例中,最後一個係數位置是當前塊中所有可能不為零的係數所組成的矩陣的右下角位置;或者,最後一個係數位置是當前塊根據預設掃描循序執行掃描所有可能不為零的係數的最後位置。
需要注意的是,本申請實施例中的最後一個係數位置並不代表最後一個非零係數的位置。因為最後一個係數位置上的係數可能是0,而最後一個非零係數的位置上的係數一定不是0。
在一種特定示例中,該方法還可以包括:將最後一個非零係數的位置設置在最後一個係數位置。
也就是說,本申請實施例仍然可以使用最後一個非零係數的位置,這時候需要把最後一個非零係數的位置放在按預設掃描順序的當前塊所有可能不為0的係數的最後位置。
進一步地,最後一個係數位置可以用(LastCoeffX,LastCoeffY)表示,即當前塊按照預設掃描順序所有可能不為0的係數的最後位置。在一些實施例中,該方法還可以包括:
確定當前塊在預設操作後得到變換塊的寬度和高度;
根據變換塊的寬度和高度進行座標計算,得到變換塊的右下角座標訊息;
根據變換塊的右下角座標訊息,確定所述最後一個係數位置。
在這裡,預設操作至少包括:強制置零(zero-out)操作。
需要說明的是,(LastCoeffX,LastCoeffY)表示zero-out後的變換塊的右下角座標訊息;其中,(LastCoeffX,LastCoeffY)的匯出方法如下:
LastCoeffX= (1<<log2ZoTbWidth)-1; LastCoeffY= (1<<log2ZoTbHeight)-1。
這樣,如果default_last_coeff_enabled_flag的取值為1,那麼根據(LastCoeffX,LastCoeffY)即可確定出最後一個係數位置。
在一種特定示例中,仍然使用最後一個非零係數的位置,這時候可以把最後一個非零係數的位置放在按照預設掃描順序的當前塊所有可能為0的係數的最後位置。在一些實施例中,該方法還可以包括:
當將最後一個非零係數的位置設置在最後一個係數位置時,根據變換塊的右下角座標訊息,確定最後一個非零係數的位置。
也就是說,最後一個非零係數的位置可以用(LastSignificantCoeffX,LastSignificantCoeffY)表示,(LastSignificantCoeffX,LastSignificantCoeffY)的匯出方法如下:
LastSignificantCoeffX= (1 <<log2ZoTbWidth)-1; LastSignificantCoeffY= (1 <<log2ZoTbHeight)-1。
其中,(LastSignificantCoeffX,LastSignificantCoeffY)表示zero-out後的變換塊的右下角座標訊息。如果default_last_coeff_enabled_flag的取值為1,那麼根據(LastSignificantCoeffX,LastSignificantCoeffY)即可確定出最後一個非零係數的位置。
如此,針對某種情況,在係數編碼時,預設需要編碼所有可能需要編碼的係數。也就是說通常情況下,係數編解碼方法還是與相關技術中的已有方法一樣。某種情況,比如可以是指高位寬或高品質或高碼率的影像或無失真壓縮的影像編解碼。預設需要編碼所有可能需要編碼的係數,也就是說不再使用最後一個非零係數的位置,而是按預設掃描順序把當前塊所有可能不為0的係數都掃描到;或者說,把最後一個需要編碼的係數位置放在按預設掃描順序的當前塊所有可能不為0的係數的最後位置。這個位置通常是指當前塊所有可能不為0的係數所組成的矩陣的右下角位置。這裡使用最後一個需要編碼的係數位置而不是最後一個非零係數的位置。因為最後一個需要編碼的係數位置上的係數可能是0,而最後一個非零係數的位置上的係數一定不是0。
一種特例是仍然使用最後一個非零係數的位置,這時候把最後一個非零係數的位置放在按預設掃描順序的當前塊所有可能不為0的係數的最後位置。
另外,按預設掃描順序的當前塊所有可能不為0的係數,是因為除了最後一個非零係數之外還有一些其他技術使得一個塊中的某些係數預設為0。例如,可以是上述提到的zero-out。
針對語義的修改如表5所示。
表5
 
if(!default_last_coeff_enabled_flag){  
if( log2TbWidth > 0 )  
    last_sig_coeff _x_prefix ae(v)
if( log2TbHeight > 0 )  
    last_sig_coeff_ y_prefix ae(v)
if( last_sig_coeff_x_prefix > 3 )  
    last_sig_coeff _x_suffix ae(v)
if( last_sig_coeff_y_prefix > 3 )  
    last_sig_coeff _y_suffix ae(v)
}  
 
本申請實施例中,可以在解碼最後一個非零係數所需的訊息前加一個條件,即如果default_last_coeff_enabled_flag不成立(即default_last_coeff_ enabled_flag的取值等於0),那麼才需要解碼last_sig_coeff_x_prefix、last_sig_coeff_y_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_suffix等語法元素。如果default_last_coeff_enabled_flag成立(即default_last_coeff_ enabled_flag的取值等於1),那麼不需要解碼last_sig_coeff_x_prefix、last_sig_coeff_y_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_suffix等語法元素。
在這裡,default_last_coeff_enabled_flag是預設最後一個係數使能標誌,用於指示是否使用預設最後一個係數。如果default_last_coeff_enabled_flag的取值為1,表示使用預設最後一個係數位置,即把最後一個需要編碼的係數位置放在按預設掃描順序的當前塊所有可能不為0的係數的最後位置;否則,表示不使用預設最後一個係數位置。
如果default_last_coeff_enabled_flag的取值為1,那麼預設最後一個係數位置(LastCoeffX,LastCoeffY)為當前塊按預設掃描順序所有可能不為0的係數的最後位置。按預設掃描順序(LastCoeffX,LastCoeffY)之前的係數都需要掃描。在本申請實施例中,(LastCoeffX,LastCoeffY)匯出方法如下:
LastCoeffX= (1<<log2ZoTbWidth)-1; LastCoeffY= (1<<log2ZoTbHeight)-1。
其中,(LastCoeffX,LastCoeffY)是zero-out後的變換塊的右下角位置的座標訊息。
一種特例是仍然使用最後一個非零係數的位置,把最後一個非零係數的位置放在按預設掃描順序的當前塊所有可能不為0的係數的最後位置。在本申請實施例中,最後一個非零係數的位置(LastSignificantCoeffX,LastSignificantCoeffY)匯出方法如下:
LastSignificantCoeffX= (1<<log2ZoTbWidth)-1; LastSignificantCoeffY= (1<<log2ZoTbHeight)-1。
其中,(LastSignificantCoeffX,LastSignificantCoeffY)是zero-out後的變換塊的右下角位置的座標訊息。
還需要說明的是,default_last_coeff_enabled_flag可能是一個序列(sequence)級或者更高級別的標誌,也可能是圖像(picture)級的標誌或片(slice)級的標誌或塊(block)級的標誌或其他級別的標誌,塊級的標誌包括最大編碼單元(LCU)級的標誌或編碼單元(CU)級的標誌或其他塊級的標誌。
另外,default_last_coeff_enabled_flag可能依賴於一些其他的標誌,比如高位寬標識訊息或高碼率標識訊息等。即當高位寬標識訊息或高碼率標識訊息的取值為1時,需要解碼default_last_ coeff_enabled_flag標誌;否則,不需要解碼default_last_coeff_enabled_flag標誌。
在一種具體的示例中,以序列級為例,假定有一個序列級的標誌sps_high_bit_depth_flag指示當前的影像序列是否為高位寬序列。如果sps_high_bit_depth_flag的取值為1,那麼表示當前的影像序列是高位寬序列;否則,表示當前的影像序列不是高位寬序列。在序列級,如果sps_high_ bit_depth_flag的取值為1,那麼需要解碼sps_default_last_coeff_enabled_flag。這裡,sps_default_last_coeff_enabled_flag是當前序列的預設最後一個係數使能標誌。如果sps_default_last_coeff_enabled_flag的取值為1,那麼表示當前序列內的塊使用預設最後一個係數;否則(即sps_default_last_coeff_enabled_ flag的取值為0),表示當前序列內的塊不使用預設最後一個係數。上述語法表中的default_last_coeff_enabled_flag變更為sps_default_last_coeff_ enabled_flag。
其語法元素如下(Sequence parameter set RBSP syntax),參見表6。
表6
 
sps_high_bit_depth_flag u(1)
if( sps_high_bit_depth_flag )  
       sps_default_last_coeff_enabled_flag u(1)
 
在另一種具體的示例中,以片(slice)級為例,假定有一個序列級的標誌sps_high_bit_depth_flag指示當前的影像序列是否為高位寬序列。如果sps_high_bit_depth_flag的取值為1,那麼表示當前的影像序列是高位寬序列;否則,表示當前的影像序列不是高位寬序列。在slice級,如果sps_high_ bit_depth_flag的取值為1,那麼需要解碼sh_default_last_coeff_enabled_flag。這裡,sh_default_last_coeff_enabled_flag是當前片的預設最後一個係數使能標誌。如果sh_default_last_coeff_enabled_flag的取值為1,那麼表示當前片內的塊使用預設最後一個係數;否則(即sh_default_last_coeff_enabled_flag的取值為0),表示當前片內的塊不使用預設最後一個係數。上述語法表中的default_last_coeff_enabled_flag變更為sh_default_last_coeff_enabled_flag。
其語法元素如下(Slice header syntax),參見表7。
表7
 
if( sps_high_bit_depth_flag )  
       sh_default_last_coeff_enabled_flag u(1)
 
還可以理解,在影像標識訊息指示影像滿足預設條件時,還可以掃描到的子塊都預設需要編碼,這時候就不需要在碼流中傳輸sb_coded_flag,即編碼器/解碼器均不需要處理這個標誌,以加快編解碼速度。因此,本申請實施例還可以引入子塊預設編碼標識訊息,用於確定當前塊內的待解碼子塊是否為預設編碼。
在一些實施例中,當影像標識訊息指示影像滿足預設條件時,該方法還可以包括:
解析碼流,獲取子塊預設編碼標識訊息;
當子塊預設編碼標識訊息指示當前塊內的待解碼子塊預設編碼時,確定子塊編碼標識訊息的取值為第一值,對待解碼子塊內的所有係數進行解碼。
需要說明的是,對於子塊預設標識訊息而言,可以用default_sb_coded_ flag表示。在本申請實施例中,子塊預設編碼標識訊息至少為下述其中一項的標識訊息:序列級、圖像級、片級和塊級;甚至也可以為更高級別(如VUI、SEI等)的標識訊息,這裡不作任何限定。
也就是說,default_sb_coded_flag可能是一個序列級或者更高級別的標誌,也可能是圖像級的標誌或者片級的標誌或者塊級的標誌或者其他級別的標誌。另外,塊級的標誌可以包括最大編碼單元(LCU)級的標誌或編碼單元(CU)級的標誌或者其他塊級的標誌,本申請實施例均不作任何限定。
在一些實施例中,該方法還可以包括:
若子塊預設編碼標識訊息的取值為第一值,則確定子塊預設編碼標識訊息指示待解碼子塊預設編碼;或者,
若子塊預設編碼標識訊息的取值為第二值,則確定子塊預設編碼標識訊息指示待解碼子塊不預設編碼。
在這裡,第一值為1,第二值為0。
需要說明的是,在另一具體的示例中,第一值還可以設置為true,第二值還可以設置為false。甚至在又一具體的示例中,第一值還可以設置為0,第二值還可以設置為1;或者,第一值還可以設置為false,第二值還可以設置為true。這裡不作任何限定。
這樣,以第一值為1,第二值為0為例,如果default_sb_coded_flag的取值為1,那麼可以確定default_sb_coded_flag指示待解碼子塊預設需要編碼;或者,如果default_sb_coded_flag的取值為0,那麼可以確定default_sb_ coded_flag指示待解碼子塊不預設需要編碼。
在待解碼子塊預設需要編碼的情況下,這時候default_sb_coded_flag的取值為1,意味著sb_coded_flag的取值為1,即不再需要解碼sb_coded_flag,此時預設需要對待解碼子塊內的所有係數進行解碼。
進一步地,在待解碼子塊不預設需要編碼的情況下,即default_sb_coded_flag的取值為0,在一些實施例中,該方法還可以包括:
解析碼流,獲取子塊編碼標識訊息;
當子塊編碼標識訊息的取值為第一值時,對待解碼子塊內的所有係數進行解碼。
需要說明的是,如果待解碼子塊不預設需要編碼,那麼這時候還需要解碼獲取子塊編碼標識訊息;然後根據子塊編碼標識訊息來確定是否對待解碼子塊內的所有係數進行解碼。
進一步地,對於子塊編碼標識訊息而言,該方法還可以包括:
若子塊編碼標識訊息的取值為第一值,則確定對待解碼子塊內的所有係數進行解碼;或者,
若子塊編碼標識訊息的取值為第二值,則確定待解碼子塊內的所有係數均為零。
在本申請實施例中,子塊編碼標識訊息可以用sb_coded_flag表示。以第一值為1,第二值為0為例,如果sb_coded_flag的取值為1,那麼可以確定需要對待解碼子塊內的所有係數進行解碼;或者,如果sb_coded_flag的取值為0,那麼可以確定不需要對待解碼子塊內的所有係數進行解碼,這時候待解碼子塊內的所有係數均為零。
如此,針對某種情況,在係數編碼時,掃描到的子塊都預設需要編碼,或者說掃描到的子塊都預設包含非零係數。也就是說通常情況下,係數編碼的方法還是與相關技術中的已有方法一樣。某種情況,比如可以是指高位寬或高品質或高碼率的影像或無失真壓縮的影像編解碼。這種情況下非零係數很多,掃描到的子塊幾乎都是需要編碼;或者說,掃描到的子塊幾乎都包含非零係數。這樣就不需要在碼流中傳輸sb_coded_flag,編碼器/解碼器也就不需要處理這個標誌,從而能夠加快編解碼速度。由於去掉了一個幾乎沒有的標誌,此時還會帶來一點壓縮性能的提升。
針對語義的修改如表8所示。
表8
 
   if( i<lastSubBlock  &&  i>0 ) {  
      if(!default_sb_coded_flag) {  
         sb_coded_flag[xS][yS] ae(v)
      }  
      inferSbDcSigCoeffFlag = 1  
   }  
 
其中,default_sb_coded_flag是預設子塊需要編碼的標誌。如果default_sb_coded_flag的取值為1,那麼可以確定sb_coded_flag[xS][yS]的取值為1,這時候不需要再從碼流中進行解碼;否則(default_sb_coded_flag的取值為0),還需要從碼流中解碼sb_coded_flag[xS][yS]。
還需要說明的是,default_sb_coded_flag可能是一個序列(sequence)級或者更高級別的標誌,也可能是圖像(picture)級的標誌或片(slice)級的標誌或塊(block)級的標誌或其他級別的標誌,塊級的標誌包括最大編碼單元(LCU)級的標誌或編碼單元(CU)級的標誌或其他塊級的標誌。
另外,default_sb_coded_flag可能依賴於一些其他的標誌,比如高位寬標識訊息或高碼率標識訊息等。即當高位寬標識訊息或高碼率標識訊息的取值為1時,需要解碼default_sb_coded_flag標誌;否則,不需要解碼default_sb_coded_flag標誌。
在一種具體的示例中,以序列級為例,假定有一個序列級的標誌sps_high_bit_depth_flag指示當前的影像序列是否為高位寬序列。如果sps_high_bit_depth_flag的取值為1,那麼表示當前的影像序列是高位寬序列;否則,表示當前的影像序列不是高位寬序列。在序列級,如果sps_high_ bit_depth_flag的取值為1,那麼需要解碼sps_default_sb_coded_flag。這裡,sps_default_sb_coded_flag是當前序列的預設子塊需要編碼的標誌。如果sps_default_sb_coded_flag的取值為1,那麼表示當前序列內的塊預設子塊需要編碼;否則(即sps_default_sb_coded_flag的取值為0),表示當前序列內的塊不預設子塊需要編碼。上述語法表中的default_sb_coded_flag變更為sps_default_sb_coded_flag。
其語法元素如下(Sequence parameter set RBSP syntax),參見表9。
表9
 
sps_high_bit_depth_flag u(1)
if( sps_high_bit_depth_flag )  
      sps_default_sb_coded_flag u(1)
   …  
在另一種具體的示例中,以片(slice)級為例,假定有一個序列級的標誌sps_high_bit_depth_flag指示當前的影像序列是否為高位寬序列。如果sps_high_bit_depth_flag的取值為1,那麼表示當前的影像序列是高位寬序列;否則,表示當前的影像序列不是高位寬序列。在slice級,如果sps_high_ bit_depth_flag的取值為1,那麼需要解碼sh_default_sb_coded_flag。這裡,sh_default_sb_coded_flag是當前片的預設子塊需要編碼的標誌。如果sh_default_sb_coded_flag的取值為1,那麼表示當前片內的塊預設子塊需要編碼;否則(即sh_default_sb_coded_flag的取值為0),表示當前片內的塊不預設子塊需要編碼。上述語法表中的default_sb_coded_flag變更為sh_default_sb_coded_flag。
其語法元素如下(Slice header syntax),參見表10。
表10
 
if( sps_high_bit_depth_flag )  
      sh_reverse_last_sig_coeff_flag u(1)
   …  
可以理解地,本申請實施例涉及到三種優化方法,分別如下:
方法一,針對某種情況,在係數編碼時,預設需要編碼所有可能需要編碼的係數。也就是說通常情況下,係數編碼的方法還是與相關技術中的已有方法一樣。某種情況,比如可以是指高位寬或高品質或高碼率的影像或無失真壓縮的影像編解碼。預設需要編碼所有可能需要編碼的係數,也就是說不再使用最後一個非零係數的位置,而是按預設掃描順序把當前塊所有可能不為0的係數都掃描到;或者說,把最後一個需要編碼的係數位置放在按預設掃描順序的當前塊所有可能不為0的係數的最後位置。這裡使用最後一個需要編碼的係數位置而不是最後一個非零係數的位置。因為最後一個需要編碼的係數位置上的係數可能是0,而最後一個非零係數的位置上的係數一定不是0。
另外,一種特定示例是仍然使用最後一個非零係數的位置,把最後一個非零係數的位置放在按預設掃描順序的當前塊所有可能不為0的係數的最後位置。
方法二:針對某種情況,在係數編碼時,修改最後一個非零係數位置的匯出方法。也就是說通常情況下,係數編碼的方法還是與相關技術中的已有方法一樣。某種情況,比如可以是指高位寬或高品質或高碼率的影像或無失真壓縮的影像編解碼。通常情況下,last_sig_coeff_x_prefix、last_sig_coeff_ x_suffix編碼的是最後一個非零係數位置的橫坐標,也就是相對於當前塊左上角的水平距離;last_sig_coeff_y_prefix、last_sig_coeff_y_suffix編碼的是最後一個非零係數位置的縱坐標,也就是相對於當前塊左上角的豎直距離。而在高位寬或高品質或高碼率的影像或無失真壓縮的影像編解碼的情況下,最後一個非零係數的位置普遍接近於當前塊所有可能是非0係數的區域的右下角。在這種情況下,last_sig_coeff_x_prefix、last_sig_coeff_x_suffix編碼的是最後一個非零係數的位置相對於當前塊所有可能是非0係數的區域的右下角的水平距離;last_sig_coeff_y_prefix、last_sig_coeff_y_suffix編碼的是最後一個非零係數的位置相對於當前塊所有可能是非0係數的區域的右下角的豎直距離。例如,如果當前塊所有可能是非0係數的區域為(0,0)到((1<<log2ZoTbWidth)-1,(1<< log2ZoTbHeight)-1)的矩形區域,那麼last_sig_coeff_x_prefix、last_sig_coeff_x_suffix編碼的是最後一個非零係數的位置相對於當前塊((1<<log2ZoTbWidth)-1,(1<<log2ZoTbHeight)-1)的水平距離;last_sig_coeff_y_prefix、last_sig_coeff_y_suffix編碼的是最後一個非零係數的位置相對於當前塊((1<<log2ZoTbWidth)-1,(1<< log2ZoTbHeight)-1)的豎直距離。
方法三:針對某種情況,在係數編碼時,掃描到的子塊都預設需要編碼;或者說,掃描到的子塊都預設包含非零係數。也就是說通常情況下,係數編碼的方法還是與相關技術中的已有方法一樣。某種情況,比如可以是指高位寬或高品質或高碼率的影像或無失真壓縮的影像編解碼。這種情況下非零係數很多,掃描到的子塊幾乎都是需要編碼,或者說掃描到的子塊幾乎都包含非零係數。這時候就不需要在碼流中傳輸sb_coded_flag,編碼器/解碼器也就不需要處理這個標誌。
針對上述三種方法,在高位寬、高碼率、高品質或無損的影像編解碼場景中,由於係數分佈規律與普通影像場景不同,在係數編碼中透過減少甚至消除上下文模式編碼的語法元素的個數,比如關於最後一個非零係數位置、子塊編碼標識等語法元素,可以提高係數編碼的輸送量以及編解碼速度;同時由於上述這些標誌在高位寬、高碼率、高品質或無損的影像編解碼中的作用不大,不使用這些標誌不會降低壓縮效率反而還可以一定程度地提升壓縮效率。
除此之外,在本申請實施例中,以序列級為例,序列級標誌sps_high_bit_depth_flag指示當前的影像序列是否為高位寬序列的標誌,也可以替換為sps_high_bit_rate_flag指示當前的影像序列是否為高碼率序列的標誌;甚至也可以替換為其他指示高位寬、高碼率、高品質或無損編碼等的標誌。
還需要注意的是,本申請實施例的係數解碼方法均是以影像中所有分量統一使用該技術為例,所有分量是指如RGB格式影像的R、G、B,或者YUV格式的Y、U、V(Y,Cb,Cr)等。本申請實施例的係數解碼方法也可以僅用於某一個分量,如僅用於YUV格式的Y分量。本申請實施例的係數解碼方法也可以分別用於各個分量,即每一個分量都可單獨控制開關。
本實施例提供了一種係數解碼方法,應用於解碼器。透過解析碼流,獲取影像標識訊息;當影像標識訊息指示影像滿足預設條件時,解析所述碼流,獲取最後一個非零係數位置翻轉標識訊息和最後一個非零係數的座標訊息;當最後一個非零係數位置翻轉標識訊息指示當前塊使用最後一個非零係數位置翻轉時,對最後一個非零係數的座標訊息進行計算,確定最後一個非零係數的位置;按照預設掃描順序對最後一個非零係數的位置之前的所有係數進行解碼,確定所述當前塊的係數。這樣,在高位寬、高碼率、高品質或無損的影像編解碼場景中,由於係數分佈規律與常規影像場景不同,在係數編碼中透過減少甚至消除上下文模式編碼的語法元素個數,比如關於最後一個非零係數位置、子塊編碼標識等語法元素,甚至還可以在最後一個非零係數的座標訊息的值偏大時進行座標變換,從而可以減少碼流中編碼所帶來的開銷,進而提高係數編碼的輸送量和編解碼速度;另外,由於減少或消除的語法元素在高位寬、高碼率、高品質或無損的影像編解碼中的影響較小,還能夠提升壓縮效率。
本申請的另一實施例中,參見圖11,其示出了本申請實施例提供的一種係數編碼方法的流程示意圖。如圖11所示,該方法可以包括:
S1101:確定影像標識訊息以及最後一個非零係數的位置。
S1102:當影像標識訊息指示影像滿足預設條件時,確定最後一個非零係數位置翻轉標識訊息。
S1103:根據最後一個非零係數的位置以及最後一個非零係數位置翻轉標識訊息,確定最後一個非零係數的座標訊息。
S1104:按照預設掃描順序對所述最後一個非零係數的位置之前的所有係數進行編碼,並將編碼後得到的位元訊息、影像標識訊息以及最後一個非零係數的座標訊息寫入碼流。
需要說明的是,本申請實施例的係數編碼方法應用於編碼器。具體來說,基於圖8A所示編碼器100的組成結構,本申請實施例的係數編碼方法主要應用於編碼器100中的“熵編碼單元115”部分,針對該熵編碼單元115,可以採用前文參考之適應性二元算術編碼模式或者旁路模式對相關標識訊息(或語法元素)進行熵編碼,然後寫入碼流。
還需要說明的是,影像標準中通常所說的係數編碼可以包括編碼和解碼兩部分,因此,係數編碼包括編碼器側的係數編碼方法和解碼器側的係數解碼方法。本申請實施例則針對編碼器側的係數編碼方法進行描述。
通常情況下,比如對於常規影像而言,係數編碼方法與相關技術中的已有方法相同;但是針對某種情況,比如高位寬或高品質或高碼率或無失真壓縮的影像編解碼,本申請實施例可以修改最後一個非零係數的位置匯出方法,這時候本申請實施例需要引入影像標識訊息和最後一個非零係數位置翻轉標識訊息,以確定出最後一個非零係數的位置,然後按照預設掃描順序對當前塊內的最後一個非零係數的位置之前的所有係數進行編碼。
其中,本申請實施例首先需要判斷當前的影像是否滿足預設條件,可以用影像標識訊息來表示。在一些實施例中,所述確定影像標識訊息,可以包括:
若影像滿足預設條件,則確定影像標識訊息的取值為第一值;或者,
若影像不滿足預設條件,則確定影像標識訊息的取值為第二值。
在這裡,第一值為1,第二值為0。
需要說明的是,在另一具體的示例中,第一值還可以設置為true,第二值還可以設置為false。甚至在又一具體的示例中,第一值還可以設置為0,第二值還可以設置為1;或者,第一值還可以設置為false,第二值還可以設置為true。這裡不作任何限定。
還需要說明的是,預設條件至少包括下述之一:高位寬、高品質、高碼率、高幀率和無失真壓縮。
進一步地,影像標識訊息可以是序列(sequence)級的標誌,甚至也可以是更高級別的標誌(比如VUI、SEI等)。判斷影像是否滿足預設條件,還可以透過判斷該影像是否滿足高位寬、或者是否滿足高碼率、或者是否滿足高品質、或者是否滿足無失真壓縮等,下面以這四種情況為例分別進行描述。
在一些實施例中,當影像標識訊息為高位寬標識訊息時,該方法還可以包括:
若影像滿足高位寬,則確定高位寬標識訊息指示影像滿足預設條件。
在一些實施例中,當影像標識訊息為高碼率標識訊息時,該方法還可以包括:
若影像滿足高碼率,則確定高碼率標識訊息指示影像滿足預設條件。
在一些實施例中,當影像標識訊息為高品質標識訊息時,該方法還可以包括:
若影像滿足高品質,則確定高品質標識訊息指示影像滿足預設條件。
在一些實施例中,當影像標識訊息為無失真壓縮標識訊息時,該方法還可以包括:
若影像滿足無失真壓縮,則確定無失真壓縮標識訊息指示影像滿足預設條件。
示例性地,以序列級為例,影像標識訊息可以是高位寬標識訊息(用sps_high_bit_depth_flag表示),用於指示當前的影像序列是否為高位寬序列;或者也可以替換為高碼率標識訊息(用sps_high_bit_rate_flag表示),用於指示當前的影像序列是否為高碼率序列;或者也可以替換為其他指示高位寬、高碼率、高品質或者無失真壓縮的標識訊息,本申請實施例不作具體限定。
進一步地,對於最後一個非零係數位置翻轉標識訊息而言,所述確定最後一個非零係數位置翻轉標識訊息,可以包括:
若當前塊使用最後一個非零係數位置翻轉,則確定最後一個非零係數位置翻轉標識訊息的取值為第一值;或者,
若當前塊不使用最後一個非零係數位置翻轉,則確定最後一個非零係數位置翻轉標識訊息的取值為第二值。
在本申請實施例中,最後一個非零係數位置翻轉標識訊息可以用reverse_last_sig_coeff_flag表示。這裡,最後一個非零係數位置翻轉標識訊息至少可以為下述其中一項的標識訊息:序列(sequence)級、圖像(picture)級、片(slice)級和塊(block)級;甚至也可以為更高級別(如VUI、SEI等)的標識訊息,這裡不作任何限定。
也就是說,reverse_last_sig_coeff_flag可能是一個序列級或者更高級別的標誌,或者也可能是圖像級的標誌或者片級的標誌或者塊級的標誌或者其他級別的標誌。另外,塊級的標誌可以包括最大編碼單元(LCU)級的標誌或編碼單元(CU)級的標誌或者其他塊級的標誌,本申請實施例均不作任何限定。
這樣,以第一值為1,第二值為0為例,如果確定當前塊使用最後一個非零係數位置翻轉,那麼reverse_last_sig_coeff_flag的取值為1;或者,如果確定當前塊不使用最後一個非零係數位置翻轉,那麼reverse_last_sig_coeff_flag的取值為0。
進一步地,最後一個非零係數的位置可以包括所述最後一個非零係數的初始水平座標和初始豎直座標。當初始水平座標和初始豎直座標為最後一個非零係數的位置相對於當前塊的左上角位置之間的水平距離和豎直距離時,所述根據最後一個非零係數的位置以及最後一個非零係數位置翻轉標識訊息,確定最後一個非零係數的座標訊息,可以包括:
若最後一個非零係數位置翻轉標識訊息的取值為第一值,則根據最後一個非零係數的初始水平座標和初始豎直座標進行計算,確定最後一個非零係數的座標訊息;或者,
若最後一個非零係數位置翻轉標識訊息的取值為第二值,則根據最後一個非零係數的初始水平座標和初始豎直座標直接確定最後一個非零係數的座標訊息。
換言之,在一些實施例中,該方法還可以包括:
若最後一個非零係數位置翻轉標識訊息的取值為第一值,則確定最後一個非零係數的座標訊息為最後一個非零係數的位置相對於當前塊的右下角位置之間的水平距離和豎直距離;或者,
若最後一個非零係數位置翻轉標識訊息的取值為第二值,則最後一個非零係數的座標訊息為最後一個非零係數的位置相對於當前塊的左上角位置之間的水平距離和豎直距離。
也就是說,最後一個非零係數的座標訊息通常為最後一個非零係數的位置相對於當前塊的左上角位置之間的水平距離和豎直距離。對於常規影像來說,由於非零係數大多數集中在左上角,而右下角的大片區域為0;但是對於高位寬、高品質、高碼率的影像編解碼來說,右下角也會出現大量的非零係數,使得最後一個非零係數的座標訊息的值通常較大,這時候為了節省開銷,係數編碼的時候需要進行座標變換(具體可以是座標翻轉計算,即座標翻轉後最後一個非零係數的座標訊息為最後一個非零係數的位置相對於當前塊的右下角位置之間的水平距離和豎直距離),那麼後續在解碼器中,係數解碼時也需要進行座標翻轉計算,再次翻轉後可以恢復出最後一個非零係數的座標訊息為最後一個非零係數的位置相對於當前塊的左上角位置之間的水平距離和豎直距離,從而確定出最後一個非零係數的位置。
進一步地,在一些實施例中,所述根據最後一個非零係數的初始水平座標和初始豎直座標進行計算,確定最後一個非零係數的座標訊息,可以包括:
確定當前塊的寬度和高度;
根據當前塊的寬度與最後一個非零係數的初始水平座標進行減法計算,得到最後一個非零係數的水平座標;以及根據當前塊的高度與最後一個非零係數的初始豎直座標進行減法計算,得到最後一個非零係數的豎直座標;
根據最後一個非零係數的水平座標和最後一個非零係數的豎直座標,確定最後一個非零係數的座標訊息。
需要說明的是,這裡的當前塊可以是沒有zero-out變換的塊,也可以是zero-out變換後的塊。以zero-out變換後的塊為例,這時候當前塊的寬度為1<<log2ZoTbWidth,當前塊的高度是1<<log2ZoTbHeight;那麼在reverse_last_sig_coeff_flag指示使用最後一個非零係數位置翻轉(即reverse_last_sig_coeff_flag的取值為1)的情況下,
LastSignificantCoeffX= (1<<log2ZoTbWidth)-1-LastSignificantCoeffX;
LastSignificantCoeffY= (1<<log2ZoTbHeight)-1-LastSignificantCoeffY。
其中,等式右邊的(LastSignificantCoeffX,LastSignificantCoeffY)表示直接確定的最後一個非零係數的座標訊息(即最後一個非零係數的初始水平座標和初始豎直座標),等式左邊的(LastSignificantCoeffX,LastSignificantCoeffY)表示座標翻轉後得到的最後一個非零係數的座標訊息(也即在當前塊使用最後一個非零係數位置翻轉的情況下,被寫入碼流的最後一個非零係數的座標訊息)。
在一些實施例中,將最後一個非零係數的座標訊息寫入碼流,可以包括:
根據所述最後一個非零係數的座標訊息,確定最後一個非零係數的水平座標的首碼訊息、最後一個非零係數的豎直座標的首碼訊息、最後一個非零係數的水平座標的尾碼訊息和最後一個非零係數的豎直座標的尾碼訊息;
將所述最後一個非零係數的水平座標的首碼訊息、所述最後一個非零係數的豎直座標的首碼訊息、所述最後一個非零係數的水平座標的尾碼訊息和所述最後一個非零係數的豎直座標的尾碼訊息寫入碼流。
需要說明的是,最後一個非零係數的水平座標的首碼訊息用last_sig_coeff_x_prefix表示,最後一個非零係數的豎直座標的首碼訊息用last_sig_coeff_y_prefix表示,最後一個非零係數的水平座標的尾碼訊息用last_sig_coeff_x_suffix表示,最後一個非零係數的豎直座標的尾碼訊息用last_sig_coeff_y_suffix表示;然後將last_sig_coeff_x_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_ prefix、last_sig_coeff_y_suffix寫入碼流,以便解碼器能夠透過解析碼流確定出最後一個非零係數的座標訊息。
如此,本申請實施例提供一種修改最後一個非零係數的位置匯出方法。也就是說通常情況下,係數編解碼方法還是與相關技術的已有方法一樣。某種情況,比如可以是指高位寬或高品質或高碼率的影像或無失真壓縮的影像編解碼。由於通常情況下,last_sig_coeff_x_prefix、last_sig_coeff_x_suffix編碼的是最後一個非零係數位置的橫坐標,也就是相對於當前塊左上角的水平距離;last_sig_coeff_y_prefix、last_sig_coeff_y_suffix編碼的是最後一個非零係數位置的縱坐標,也就是相對於當前塊左上角的豎直距離,如圖10A所示。而在高位寬或高品質或高碼率的影像或無失真壓縮的影像編解碼的情況下,最後一個非零係數的位置普遍接近於當前塊所有可能是非0係數的區域的右下角。在這種情況下,last_sig_coeff_x_prefix、last_sig_coeff_x_suffix編碼的是最後一個非零係數位置相對於當前塊所有可能是非0係數的區域的右下角的水平距離;last_sig_coeff_y_prefix、last_sig_coeff_y_suffix編碼的是最後一個非零係數位置相對於當前塊所有可能是非0係數的區域的右下角的豎直距離,如圖10B所示;因此,本申請實施例可以透過引入reverse_last_sig_coeff_flag,從而可以解決在碼流中編碼較大的值會帶來更大的開銷問題。
進一步地,在影像標識訊息指示影像滿足預設條件時,這時候還可預設需要編碼所有可能需要編碼的係數,也就是不再使用最後一個非零係數的位置,而是按預設掃描順序把當前塊所有可能不為0的係數都掃描到;因此,本申請實施例還可以引入最後一個係數使能標識訊息,用於確定當前塊是否使用最後一個係數位置。
在一些實施例中,當影像標識訊息指示影像滿足預設條件時,該方法還可以包括:
確定最後一個係數使能標識訊息;
當最後一個係數使能標識訊息指示當前塊使用最後一個係數位置時,按照預設掃描順序對所述最後一個係數位置之前的所有係數進行編碼,並將編碼後得到的位元訊息、影像標識訊息以及最後一個係數使能標識訊息寫入碼流。
需要說明的是,對於最後一個係數使能標識訊息而言,可以用default_last_coeff_enabled_flag表示。在本申請實施例中,最後一個係數使能標識訊息至少可以為下述其中一項的標識訊息:序列級、圖像級、片級和塊級;甚至也可以為更高級別(如VUI、SEI等)的標識訊息,這裡不作任何限定。
還需要說明的是,對於最後一個係數使能標識訊息而言,在一些實施例中,所述確定最後一個係數使能標識訊息,可以包括:
若當前塊使用所述最後一個係數位置,則確定最後一個係數使能標識訊息的取值為第一值;或者,若當前塊不使用所述最後一個係數位置,則確定最後一個係數使能標識訊息的取值為第二值。
也就是說,以第一值為1,第二值為0為例,如果確定當前塊使用最後一個係數位置,那麼default_last_coeff_enabled_flag的取值為1;或者,如果確定當前塊不使用最後一個係數位置,那麼default_last_coeff_ enabled_flag的取值為0。
進一步地,對於最後一個係數位置而言,在一些實施例中,最後一個係數位置是當前塊中所有可能不為零的係數所組成的矩陣的右下角位置;或者,最後一個係數位置是當前塊根據預設掃描循序執行掃描所有可能不為零的係數的最後位置。
需要注意的是,本申請實施例中的最後一個係數位置並不代表最後一個非零係數的位置。因為最後一個係數位置上的係數可能是0,而最後一個非零係數的位置上的係數一定不是0。
在一種特定示例中,該方法還可以包括:將最後一個非零係數的位置設置在所述最後一個係數位置。
也就是說,本申請實施例仍然可以使用最後一個非零係數的位置,這時候需要把最後一個非零係數的位置放在按預設掃描順序的當前塊所有可能不為0的係數的最後位置。
進一步地,最後一個係數位置可以用(LastCoeffX,LastCoeffY)表示,即當前塊按照預設掃描順序所有可能不為0的係數的最後位置。在一些實施例中,該方法還可以包括:
確定所述當前塊在預設操作後得到變換塊的寬度和高度;
根據所述變換塊的寬度和高度進行座標計算,得到所述變換塊的右下角座標訊息;
根據所述變換塊的右下角座標訊息,確定所述最後一個係數位置。
在這裡,預設操作至少包括:強制置零(zero-out)操作。
需要說明的是,(LastCoeffX,LastCoeffY)表示zero-out後的變換塊的右下角座標訊息;其中,(LastCoeffX,LastCoeffY)的匯出方法如下:
LastCoeffX= (1<<log2ZoTbWidth)-1; LastCoeffY= (1<<log2ZoTbHeight)-1。
這樣,如果default_last_coeff_enabled_flag的取值為1,那麼根據(LastCoeffX,LastCoeffY)即可確定出最後一個係數位置。
在一種特定示例中,仍然使用最後一個非零係數的位置,這時候可以把最後一個非零係數的位置放在按照預設掃描順序的當前塊所有可能為0的係數的最後位置。在一些實施例中,該方法還可以包括:
當將最後一個非零係數的位置設置在所述最後一個係數位置時,根據所述變換塊的右下角座標訊息,確定所述最後一個非零係數的位置。
也就是說,最後一個非零係數的位置可以用(LastSignificantCoeffX,LastSignificantCoeffY)表示,(LastSignificantCoeffX,LastSignificantCoeffY)的匯出方法如下:
LastSignificantCoeffX= (1<<log2ZoTbWidth)-1; LastSignificantCoeffY= (1<<log2ZoTbHeight)-1。
其中,(LastSignificantCoeffX,LastSignificantCoeffY)表示zero-out後的變換塊的右下角座標訊息。如果default_last_coeff_enabled_flag的取值為1,那麼根據(LastSignificantCoeffX,LastSignificantCoeffY)即可確定出最後一個非零係數的位置。
進一步地,在當前塊不使用最後一個係數位置的情況下,即最後一個係數使能標識訊息的取值為0,在一些實施例中,該方法還可以包括:
確定最後一個非零係數的水平座標的首碼訊息、最後一個非零係數的豎直座標的首碼訊息、最後一個非零係數的水平座標的尾碼訊息和最後一個非零係數的豎直座標的尾碼訊息;
根據所述最後一個非零係數的水平座標的首碼訊息、所述最後一個非零係數的豎直座標的首碼訊息、所述最後一個非零係數的水平座標的尾碼訊息和所述最後一個非零係數的豎直座標的尾碼訊息,確定所述最後一個非零係數的位置;
按照預設掃描順序對所述最後一個非零係數的位置之前的所有係數進行編碼,並將所述最後一個非零係數的水平座標的首碼訊息、所述最後一個非零係數的豎直座標的首碼訊息、所述最後一個非零係數的水平座標的尾碼訊息和所述最後一個非零係數的豎直座標的尾碼訊息寫入碼流。
需要說明的是,如果當前塊不使用最後一個係數位置,那麼這時候需要確定最後一個非零係數的位置。具體地,需要確定last_sig_coeff_x_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_ prefix、last_sig_coeff_y_suffix;然後將last_sig_coeff_x_prefix、last_sig_coeff_x_ suffix、last_sig_coeff_y_ prefix、last_sig_coeff_y_suffix寫入碼流。
如此,在係數編碼時,預設需要編碼所有可能需要編碼的係數。也就是說通常情況下,係數編解碼方法還是與相關技術中的已有方法一樣。某種情況,比如可以是指高位寬或高品質或高碼率的影像或無失真壓縮的影像編解碼,預設需要編碼所有可能需要編碼的係數,也就是說不再使用最後一個非零係數的位置,而是按預設掃描順序把當前塊所有可能不為0的係數都掃描到;或者說,把最後一個需要編碼的係數位置放在按預設掃描順序的當前塊所有可能不為0的係數的最後位置。這個位置通常是指當前塊所有可能不為0的係數所組成的矩陣的右下角位置。因此,本申請實施例可以透過引入default_last_coeff_enabled_flag,這時候可以減少甚至消除關於最後一個非零係數位置的相關語法元素,能夠節省開銷,避免造成浪費。
進一步地,在影像標識訊息指示影像滿足預設條件時,還可以掃描到的子塊都預設需要編碼,這時候就不需要在碼流中傳輸sb_coded_flag,即編碼器/解碼器均不需要處理這個標誌,以加快編解碼速度。因此,本申請實施例還可以引入子塊預設編碼標識訊息,用於確定當前塊內的待解碼子塊是否為預設編碼。
在一些實施例中,當影像標識訊息指示影像滿足預設條件時,該方法還可以包括:
確定當前塊內的待編碼子塊的子塊預設編碼標識訊息;
當子塊預設編碼標識訊息指示所述待編碼子塊預設編碼時,對待編碼子塊內的所有係數進行編碼,並將編碼後得到的位元訊息以及所述子塊預設編碼標識訊息寫入碼流。
需要說明的是,對於子塊預設標識訊息而言,可以用default_sb_coded_ flag表示。在本申請實施例中,子塊預設編碼標識訊息至少為下述其中一項的標識訊息:序列級、圖像級、片級和塊級;甚至也可以為更高級別(如VUI、SEI等)的標識訊息,這裡不作任何限定。
還需要說明的是,對於子塊預設標識訊息而言,在一些實施例中,所述確定待編碼子塊的子塊預設編碼標識訊息,可以包括:
若待編碼子塊預設編碼,則確定子塊預設編碼標識訊息的取值為第一值;或者,
若待編碼子塊不預設編碼,則確定子塊預設編碼標識訊息的取值為第二值。
這樣,以第一值為1,第二值為0為例,如果確定待解碼子塊預設需要編碼,那麼default_sb_coded_flag的取值為1;或者,如果確定待解碼子塊不預設需要編碼,那麼default_sb_coded_flag的取值為0。
在待解碼子塊預設需要編碼的情況下,這時候default_sb_coded_flag的取值為1,意味著sb_coded_flag的取值為1,即不再需要編碼sb_coded_flag。但是在待解碼子塊不預設需要編碼的情況下,即當子塊預設編碼標識訊息指示待編碼子塊不預設編碼時,在一些實施例中,該方法還可以包括:確定待編碼子塊的子塊編碼標識訊息,並將子塊編碼標識訊息寫入碼流。
進一步地,在一些實施例中,所述確定所述待編碼子塊的子塊編碼標識訊息,可以包括:
若子塊內需進行編碼,則確定子塊編碼標識訊息的取值為第一值;或者,
若子塊內的所有係數均為零,則確定子塊編碼標識訊息的取值為第二值。
在本申請實施例中,子塊編碼標識訊息可以用sb_coded_flag表示。以第一值為1,第二值為0為例,如果確定需要對待編碼子塊進行編碼,意味著待編碼子塊內包含有待編碼的非零係數,那麼sb_coded_flag的取值為1;或者,如果確定不需要對待編碼子塊進行編碼,意味著待編碼子塊內的所有係數均為零,那麼sb_coded_flag的取值為0。
如此,在係數編碼時,掃描到的子塊都預設需要編碼,或者說掃描到的子塊都預設包含非零係數。也就是說通常情況下,係數編碼的方法還是與相關技術中的已有方法一樣。某種情況,比如可以是指高位寬或高品質或高碼率的影像或無失真壓縮的影像編解碼,這種情況下非零係數很多,掃描到的子塊幾乎都是需要編碼;或者說,掃描到的子塊幾乎都包含非零係數。這樣就不需要在碼流中傳輸sb_coded_flag,編碼器也就不需要處理這個標誌,從而能夠加快編解碼速度。由於去掉了一個幾乎沒有的標誌,此時還會帶來一點壓縮性能的提升。
本實施例還提供了一種係數編碼方法,應用於編碼器。透過確定影像標識訊息以及最後一個非零係數的位置;當影像標識訊息指示影像滿足預設條件時,確定最後一個非零係數位置翻轉標識訊息;根據最後一個非零係數的位置以及最後一個非零係數位置翻轉標識訊息,確定最後一個非零係數的座標訊息;按照預設掃描順序對最後一個非零係數的位置之前的所有係數進行編碼,並將編碼後得到的位元訊息、影像標識訊息以及最後一個非零係數的座標訊息寫入碼流。這樣,在高位寬、高碼率、高品質或無損的影像編解碼場景中,由於係數分佈規律與常規影像場景不同,在係數編碼中透過減少甚至消除上下文模式編碼的語法元素個數,比如關於最後一個非零係數位置、子塊編碼標識等語法元素,甚至還可以在最後一個非零係數的座標訊息的值偏大時進行座標變換,從而可以減少碼流中編碼所帶來的開銷,進而提高係數編碼的輸送量和編碼速度;另外,由於減少或消除的語法元素在高位寬、高碼率、高品質或無損的影像編碼中的影響較小,還能夠提升壓縮效率。
本申請的又一實施例中,基於前述實施例相同的發明構思,參見圖12,其示出了本申請實施例提供的一種編碼器120的組成結構示意圖。如圖12所示,該編碼器120可以包括:第一確定單元1201和編碼單元1202;其中,
第一確定單元1201,配置為確定影像標識訊息以及最後一個非零係數的位置;以及當影像標識訊息指示影像滿足預設條件時,確定最後一個非零係數位置翻轉標識訊息;
第一確定單元1201,還配置為根據最後一個非零係數的位置以及最後一個非零係數位置翻轉標識訊息,確定最後一個非零係數的座標訊息;
編碼單元1202,配置為按照預設掃描順序對最後一個非零係數的位置之前的所有係數進行編碼,並將編碼後得到的位元訊息、影像標識訊息以及最後一個非零係數的座標訊息寫入碼流。
在一些實施例中,第一確定單元1201,還配置為若影像滿足預設條件,則確定影像標識訊息的取值為第一值;或者,若影像不滿足預設條件,則確定影像標識訊息的取值為第二值。
在一些實施例中,預設條件至少包括下述之一:高位寬、高品質、高碼率、高幀率和無失真壓縮。
在一些實施例中,第一確定單元1201,還配置為若當前塊使用最後一個非零係數位置翻轉,則確定最後一個非零係數位置翻轉標識訊息的取值為第一值;或者,若當前塊不使用最後一個非零係數位置翻轉,則確定最後一個非零係數位置翻轉標識訊息的取值為第二值。
在一些實施例中,最後一個非零係數的位置包括最後一個非零係數的初始水平座標和初始豎直座標,初始水平座標和初始豎直座標為最後一個非零係數的位置相對於當前塊的左上角位置之間的水平距離和豎直距離;
相應地,第一確定單元1201,還配置為若最後一個非零係數位置翻轉標識訊息的取值為第一值,則根據最後一個非零係數的初始水平座標和初始豎直座標進行計算,確定最後一個非零係數的座標訊息;或者,若最後一個非零係數位置翻轉標識訊息的取值為第二值,則根據最後一個非零係數的初始水平座標和初始豎直座標直接確定最後一個非零係數的座標訊息。
在一些實施例中,第一確定單元1201,還配置為確定當前塊的寬度和高度;根據當前塊的寬度與最後一個非零係數的初始水平座標進行減法計算,得到最後一個非零係數的水平座標;以及根據當前塊的高度與最後一個非零係數的初始豎直座標進行減法計算,得到最後一個非零係數的豎直座標;以及根據最後一個非零係數的水平座標和最後一個非零係數的豎直座標,確定最後一個非零係數的座標訊息。
在一些實施例中,第一確定單元1201,還配置為若最後一個非零係數位置翻轉標識訊息的取值為第一值,則確定最後一個非零係數的座標訊息為最後一個非零係數的位置相對於當前塊的右下角位置之間的水平距離和豎直距離;或者,若最後一個非零係數位置翻轉標識訊息的取值為第二值,則最後一個非零係數的座標訊息為最後一個非零係數的位置相對於當前塊的左上角位置之間的水平距離和豎直距離。
在一些實施例中,編碼單元1202,還配置為根據最後一個非零係數的座標訊息,確定最後一個非零係數的水平座標的首碼訊息、最後一個非零係數的豎直座標的首碼訊息、最後一個非零係數的水平座標的尾碼訊息和最後一個非零係數的豎直座標的尾碼訊息;以及將最後一個非零係數的水平座標的首碼訊息、最後一個非零係數的豎直座標的首碼訊息、最後一個非零係數的水平座標的尾碼訊息和最後一個非零係數的豎直座標的尾碼訊息寫入碼流。
在一些實施例中,所述最後一個非零係數位置翻轉標識訊息至少為下述其中一項的標識訊息:序列級、圖像級、片級和塊級。
在一些實施例中,第一確定單元1201,還配置為當影像標識訊息指示影像滿足預設條件時,確定最後一個係數使能標識訊息;
編碼單元1202,還配置為當最後一個係數使能標識訊息指示當前塊使用最後一個係數位置時,按照預設掃描順序對最後一個係數位置之前的所有係數進行編碼,並將編碼後得到的位元訊息、影像標識訊息以及最後一個係數使能標識訊息寫入碼流。
在一些實施例中,第一確定單元1201,還配置為若當前塊使用最後一個係數位置,則確定最後一個係數使能標識訊息的取值為第一值;或者,若當前塊不使用最後一個係數位置,則確定最後一個係數使能標識訊息的取值為第二值。
在一些實施例中,最後一個係數位置是當前塊中所有可能不為零的係數所組成的矩陣的右下角位置;或者,最後一個係數位置是當前塊根據預設掃描循序執行掃描所有可能不為零的係數的最後位置。
在一些實施例中,第一確定單元1201,還配置為將最後一個非零係數的位置設置在所述最後一個係數位置。
在一些實施例中,第一確定單元1201,還配置為確定所述當前塊在預設操作後得到變換塊的寬度和高度;根據所述變換塊的寬度和高度進行座標計算,得到所述變換塊的右下角座標訊息;以及根據所述變換塊的右下角座標訊息,確定所述最後一個係數位置。
在一些實施例中,預設操作至少包括:強制置零(zero-out)操作。
在一些實施例中,第一確定單元1201,還配置為當將最後一個非零係數的位置設置在最後一個係數位置時,根據變換塊的右下角座標訊息,確定最後一個非零係數的位置。
在一些實施例中,第一確定單元1201,還配置為當所述當前塊不使用所述最後一個係數位置時,確定最後一個非零係數的水平座標的首碼訊息、最後一個非零係數的豎直座標的首碼訊息、最後一個非零係數的水平座標的尾碼訊息和最後一個非零係數的豎直座標的尾碼訊息;以及根據最後一個非零係數的水平座標的首碼訊息、最後一個非零係數的豎直座標的首碼訊息、最後一個非零係數的水平座標的尾碼訊息和最後一個非零係數的豎直座標的尾碼訊息,確定最後一個非零係數的位置;
編碼單元1202,還配置為按照預設掃描順序對最後一個非零係數的位置之前的所有係數進行編碼,並將最後一個非零係數的水平座標的首碼訊息、最後一個非零係數的豎直座標的首碼訊息、最後一個非零係數的水平座標的尾碼訊息和最後一個非零係數的豎直座標的尾碼訊息寫入碼流。
在一些實施例中,最後一個係數使能標識訊息至少為下述其中一項的標識訊息:序列級、圖像級、片級和塊級。
在一些實施例中,第一確定單元1201,還配置為當影像標識訊息指示影像滿足預設條件時,確定當前塊內的待編碼子塊的子塊預設編碼標識訊息;
編碼單元1202,還配置為當子塊預設編碼標識訊息指示所述待編碼子塊預設編碼時,對待編碼子塊內的所有係數進行編碼,並將編碼後得到的位元訊息以及子塊預設編碼標識訊息寫入碼流。
在一些實施例中,第一確定單元1201,還配置為當子塊預設編碼標識訊息指示待編碼子塊不預設編碼時,確定待編碼子塊的子塊編碼標識訊息,並將子塊編碼標識訊息寫入碼流。
在一些實施例中,第一確定單元1201,還配置為若待編碼子塊預設編碼,則確定子塊預設編碼標識訊息的取值為第一值;或者,若待編碼子塊不預設編碼,則確定子塊預設編碼標識訊息的取值為第二值。
在一些實施例中,第一確定單元1201,還配置為若子塊內需進行編碼,則確定子塊編碼標識訊息的取值為第一值;或者,若子塊內的所有係數均為零,則確定子塊編碼標識訊息的取值為第二值。
在一些實施例中,子塊預設編碼標識訊息至少為下述其中一項的標識訊息:序列級、圖像級、片級和塊級。
在一些實施例中,第一值為1,第二值為0。
在一些實施例中,第一確定單元1201,還配置為當影像標識訊息為高位寬標識訊息時,若影像滿足高位寬,則確定高位寬標識訊息指示影像滿足預設條件。
在一些實施例中,第一確定單元1201,還配置為當影像標識訊息為高碼率標識訊息時,若影像滿足高碼率,則確定所述高碼率標識訊息指示影像滿足預設條件。
在一些實施例中,第一確定單元1201,還配置為當影像標識訊息為高品質標識訊息時,若影像滿足高品質,則確定高品質標識訊息指示影像滿足預設條件。
在一些實施例中,第一確定單元1201,還配置為當影像標識訊息為無失真壓縮標識訊息時,若影像滿足無失真壓縮,則確定無失真壓縮標識訊息指示影像滿足預設條件。
可以理解地,在本申請實施例中,“單元”可以是部分電路、部分處理器、部分程式或軟體等等,當然也可以是模組,還可以是非模組化的。而且在本實施例中的各組成部分可以集成在一個處理單元中,也可以是各個單元單獨實體存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以採用硬體的形式實現,也可以採用軟體功能模組的形式實現。
所述集成的單元如果以軟體功能模組的形式實現並非作為獨立的產品進行銷售或使用時,可以儲存在一個電腦可讀取儲存媒介中,基於這樣的理解,本實施例的技術方案本質上或者說對現有技術做出貢獻的部分或者該技術方案的全部或部分可以以軟體產品的形式體現出來,該電腦軟體產品儲存在一個儲存媒介中,包括若干指令用以使得一台電腦設備(可以是個人電腦,伺服器,或者網路設備等)或processor(處理器)執行本實施例所述方法的全部或部分步驟。而前述的儲存媒介包括:隨身碟、行動硬碟、唯讀記憶體(Read Only Memory,ROM)、隨機存取記憶體(Random Access Memory,RAM)、磁碟或者光碟等各種可以儲存程式碼的媒介。
因此,本申請實施例提供了一種電腦儲存媒介,應用於編碼器120,該電腦儲存媒介儲存有電腦程式,所述電腦程式被第一處理器執行時實現前述實施例中任一項所述的方法。
基於上述編碼器120的組成以及電腦儲存媒介,參見圖13,其示出了本申請實施例提供的編碼器120的具體硬體結構示意圖。如圖13所示,可以包括:第一通訊介面1301、第一記憶體1302和第一處理器1303;各個元件透過第一匯流排系統1304耦合在一起。可理解,第一匯流排系統1304用於實現這些元件之間的連接通訊。第一匯流排系統1304除包括資料匯流排之外,還包括電源匯流排、控制匯流排和狀態訊號匯流排。但是為了清楚說明起見,在圖13中將各種匯流排都標為第一匯流排系統1304。其中,
第一通訊介面1301,用於在與其他外部網路元件之間進行收發訊息過程中,訊號的接收和發送;
第一記憶體1302,用於儲存能夠在第一處理器1303上運行的電腦程式;
第一處理器1303,用於在運行所述電腦程式時,執行:
確定影像標識訊息以及最後一個非零係數的位置;
當影像標識訊息指示影像滿足預設條件時,確定最後一個非零係數位置翻轉標識訊息;
根據最後一個非零係數的位置以及最後一個非零係數位置翻轉標識訊息,確定最後一個非零係數的座標訊息;
按照預設掃描順序對最後一個非零係數的位置之前的所有係數進行編碼,並將編碼後得到的位元訊息、影像標識訊息以及最後一個非零係數的座標訊息寫入碼流。
可以理解,本申請實施例中的第一記憶體1302可以是揮發性記憶體或非揮發性記憶體,或可包括揮發性和非揮發性記憶體兩者。其中,非揮發性記憶體可以是唯讀記憶體(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)、同步連接動態隨機存取記憶體(Synchlink DRAM,SLDRAM)和直接記憶體匯流排隨機存取記憶體(Direct Rambus RAM,DRRAM)。本申請描述的系統和方法的第一記憶體1302旨在包括但不限於這些和任意其它適合類型的記憶體。
而第一處理器1303可能是一種積體電路晶片,具有訊號的處理能力。在實現過程中,上述方法的各步驟可以透過第一處理器1303中的硬體的集成邏輯電路或者軟體形式的指令完成。上述的第一處理器1303可以是通用處理器、數位訊號處理器(Digital Signal Processor,DSP)、專用積體電路(Application Specific Integrated Circuit,ASIC)、場域可程式閘陣列(Field Programmable Gate Array,FPGA)或者其他可程式設邏輯器件、離散閘或者電晶體邏輯器件、離散硬體元件。可以實現或者執行本申請實施例中的公開的各方法、步驟及邏輯方塊圖。通用處理器可以是微處理器或者該處理器也可以是任何常規的處理器等。結合本申請實施例所公開的方法的步驟可以直接體現為硬體解碼處理器執行完成,或者用解碼處理器中的硬體及軟體模組組合執行完成。軟體模組可以位於隨機記憶體,快閃記憶體、唯讀記憶體,可程式設唯讀記憶體或者電可讀寫可程式設記憶體、寄存器等本領域成熟的儲存媒介中。該儲存媒介位於第一記憶體1302,第一處理器1303讀取第一記憶體1302中的訊息,結合其硬體完成上述方法的步驟。
可以理解的是,本申請描述的這些實施例可以用硬體、軟體、韌體、中介軟體、微碼或其組合來實現。對於硬體實現,處理單元可以實現在一個或多個專用積體電路(Application Specific Integrated Circuits,ASIC)、數位訊號處理器(Digital Signal Processing,DSP)、數位訊號處理設備(DSP Device,DSPD)、可程式設邏輯裝置(Programmable Logic Device,PLD)、場域可程式閘陣列(Field-Programmable Gate Array,FPGA)、通用處理器、控制器、微控制器、微處理器、用於執行本申請所述功能的其它電子單元或其組合中。對於軟體實現,可透過執行本申請所述功能的模組(例如過程、函數等)來實現本申請所述的技術。軟體代碼可儲存在記憶體中並透過處理器執行。記憶體可以在處理器中或在處理器外部實現。
可選地,作為另一個實施例,第一處理器1303還配置為在運行所述電腦程式時,執行前述實施例中任一項所述的方法。
本實施例提供了一種編碼器,該編碼器可以包括第一確定單元和編碼單元。這樣,在高位寬、高碼率、高品質或無損的影像編解碼場景中,由於係數分佈規律與常規影像場景不同,在係數編碼中透過減少甚至消除上下文模式編碼的語法元素個數,從而可以減少碼流中編碼所帶來的開銷,進而提高係數編碼的輸送量和編解碼速度;另外,由於減少或消除的語法元素在高位寬、高碼率、高品質或無損的影像編解碼中的影響較小,還能夠提升壓縮效率。
本申請的再一實施例中,基於前述實施例相同的發明構思,參見圖14,其示出了本申請實施例提供的一種解碼器140的組成結構示意圖。如圖14所示,該解碼器140可以包括:解析單元1401和第二確定單元1402;其中,
解析單元1401,配置為解析碼流,獲取影像標識訊息;以及當影像標識訊息指示影像滿足預設條件時,解析碼流,獲取最後一個非零係數位置翻轉標識訊息和最後一個非零係數的座標訊息;
第二確定單元1402,配置為當最後一個非零係數位置翻轉標識訊息指示當前塊使用最後一個非零係數位置翻轉時,對最後一個非零係數的座標訊息進行計算,確定最後一個非零係數的位置;
解析單元1401,還配置為按照預設掃描順序對最後一個非零係數的位置之前的所有係數進行解碼,確定當前塊的係數。
在一些實施例中,第二確定單元1402,還配置為當最後一個非零係數位置翻轉標識訊息指示當前塊不使用最後一個非零係數位置翻轉時,根據最後一個非零係數的座標訊息直接確定最後一個非零係數的位置;
解析單元1401,還配置為按照預設掃描順序對最後一個非零係數的位置之前的所有係數進行解碼,確定當前塊的係數。
在一些實施例中,第二確定單元1402,還配置為若影像標識訊息的取值為第一值,則確定影像標識訊息指示影像滿足預設條件;或者,若影像標識訊息的取值為第二值,則確定影像標識訊息指示影像不滿足預設條件。
在一些實施例中,預設條件至少包括下述之一:高位寬、高品質、高碼率、高幀率和無失真壓縮。
在一些實施例中,第二確定單元1402,還配置為若最後一個非零係數位置翻轉標識訊息的取值為第一值,則確定最後一個非零係數位置翻轉標識訊息指示當前塊使用最後一個非零係數位置翻轉;或者,若最後一個非零係數位置翻轉標識訊息的取值為第二值,則確定最後一個非零係數位置翻轉標識訊息指示當前塊不使用最後一個非零係數位置翻轉。
在一些實施例中,解析單元1401,還配置為解析碼流,獲取最後一個非零係數的水平座標的首碼訊息、最後一個非零係數的豎直座標的首碼訊息、最後一個非零係數的水平座標的尾碼訊息和最後一個非零係數的豎直座標的尾碼訊息;
第二確定單元1402,還配置為根據最後一個非零係數的水平座標的首碼訊息和最後一個非零係數的水平座標的尾碼訊息,確定最後一個非零係數的水平座標;以及根據最後一個非零係數的豎直座標的首碼訊息和最後一個非零係數的豎直座標的尾碼訊息,確定最後一個非零係數的豎直座標;以及根據最後一個非零係數的水平座標和最後一個非零係數的豎直座標,確定最後一個非零係數的座標訊息。
在一些實施例中,第二確定單元1402,還配置為當最後一個非零係數位置翻轉標識訊息指示當前塊使用最後一個非零係數位置翻轉時,確定最後一個非零係數的座標訊息為最後一個非零係數的位置相對於當前塊的右下角位置之間的水平距離和豎直距離;
進一步地,第二確定單元1402,還配置為確定當前塊的寬度和高度;根據當前塊的寬度與最後一個非零係數的位置相對於當前塊的右下角位置之間的水平距離進行減法計算,得到最後一個非零係數的水平座標;以及根據當前塊的高度與最後一個非零係數的位置相對於當前塊的右下角位置之間的豎直距離進行減法計算,得到最後一個非零係數的豎直座標;以及根據最後一個非零係數的水平座標和最後一個非零係數的豎直座標,確定最後一個非零係數的位置。
在一些實施例中,第二確定單元1402,還配置為當最後一個非零係數位置翻轉標識訊息指示當前塊不使用最後一個非零係數位置翻轉時,確定最後一個非零係數的座標訊息為最後一個非零係數的位置相對於當前塊的左上角位置之間的水平距離和豎直距離;以及根據最後一個非零係數的位置相對於當前塊的左上角位置之間的水平距離和豎直距離,確定最後一個非零係數的位置。
在一些實施例中,最後一個非零係數位置翻轉標識訊息至少為下述其中一項的標識訊息:序列(sequence)級、圖像(picture)級、片(slice)級和塊(block)級。
在一些實施例中,解析單元1401,還配置為解析碼流,獲取最後一個係數使能標識訊息;以及當最後一個係數使能標識訊息指示當前塊使用最後一個係數位置時,按照預設掃描順序對最後一個係數位置之前的所有係數進行解碼,確定當前塊的係數。
在一些實施例中,第二確定單元1402,還配置為若最後一個係數使能標識訊息的取值為第一值,則確定最後一個係數使能標識訊息指示當前塊使用最後一個係數位置;或者,若最後一個係數使能標識訊息的取值為第二值,則確定最後一個係數使能標識訊息指示當前塊不使用最後一個係數位置。
在一些實施例中,解析單元1401,還配置為當最後一個係數使能標識訊息的取值為第二值時,解析碼流,獲取最後一個非零係數的水平座標的首碼訊息、最後一個非零係數的豎直座標的首碼訊息、最後一個非零係數的水平座標的尾碼訊息和最後一個非零係數的豎直座標的尾碼訊息;
第二確定單元1402,還配置為根據最後一個非零係數的水平座標的首碼訊息、最後一個非零係數的豎直座標的首碼訊息、最後一個非零係數的水平座標的尾碼訊息和最後一個非零係數的豎直座標的尾碼訊息,確定最後一個非零係數的位置;以及按照預設掃描順序對最後一個非零係數的位置之前的所有係數進行解碼,確定當前塊的係數。
在一些實施例中,最後一個係數位置是當前塊中所有可能不為零的係數所組成的矩陣的右下角位置;或者,最後一個係數位置是當前塊根據預設掃描循序執行掃描所有可能不為零的係數的最後位置。
在一些實施例中,第二確定單元1402,還配置為將最後一個非零係數的位置設置在最後一個係數位置。
在一些實施例中,第二確定單元1402,還配置為確定當前塊在預設操作後得到變換塊的寬度和高度;以及根據變換塊的寬度和高度進行座標計算,得到變換塊的右下角座標訊息;以及根據變換塊的右下角座標訊息,確定最後一個係數位置。
在一些實施例中,預設操作至少包括:強制置零(zero-out)操作。
在一些實施例中,第二確定單元1402,還配置為當將最後一個非零係數的位置設置在最後一個係數位置時,根據變換塊的右下角座標訊息,確定最後一個非零係數的位置。
在一些實施例中,最後一個係數使能標識訊息至少為下述其中一項的標識訊息:序列級、圖像級、片級和塊級。
在一些實施例中,解析單元1401,還配置為當影像標識訊息指示影像滿足預設條件時,解析碼流,獲取子塊預設編碼標識訊息;以及當子塊預設編碼標識訊息指示當前塊內的待解碼子塊預設編碼時,確定子塊編碼標識訊息的取值為第一值,對待解碼子塊內的所有係數進行解碼。
在一些實施例中,解析單元1401,還配置為當子塊預設編碼標識訊息指示待解碼子塊不預設編碼時,解析碼流,獲取子塊編碼標識訊息;以及當子塊編碼標識訊息的取值為第一值時,對待解碼子塊內的所有係數進行解碼。
在一些實施例中,第二確定單元1402,還配置為若子塊預設編碼標識訊息的取值為第一值,則確定子塊預設編碼標識訊息指示待解碼子塊預設編碼;或者,若子塊預設編碼標識訊息的取值為第二值,則確定子塊預設編碼標識訊息指示待解碼子塊不預設編碼。
在一些實施例中,第二確定單元1402,還配置為若子塊編碼標識訊息的取值為第一值,則確定對待解碼子塊內的所有係數進行解碼;或者,若子塊編碼標識訊息的取值為第二值,則確定待解碼子塊內的所有係數均為零。
在一些實施例中,子塊預設編碼標識訊息至少為下述其中一項的標識訊息:序列級、圖像級、片級和塊級。
在一些實施例中,第一值為1,第二值為0。
在一些實施例中,第二確定單元1402,還配置為當影像標識訊息為高位寬標識訊息時,若高位寬標識訊息指示影像滿足高位寬,則確定影像滿足預設條件。
在一些實施例中,第二確定單元1402,還配置為當影像標識訊息為高碼率標識訊息時,若高碼率標識訊息指示影像滿足高碼率,則確定影像滿足預設條件。
在一些實施例中,第二確定單元1402,還配置為當影像標識訊息為高品質標識訊息時,若高品質標識訊息指示影像滿足高品質,則確定影像滿足預設條件。
在一些實施例中,第二確定單元1402,還配置為當影像標識訊息為無失真壓縮標識訊息時,若無失真壓縮標識訊息指示影像滿足無失真壓縮,則確定影像滿足預設條件。
可以理解地,在本申請實施例中,“單元”可以是部分電路、部分處理器、部分程式或軟體等等,當然也可以是模組,還可以是非模組化的。而且在本實施例中的各組成部分可以集成在一個處理單元中,也可以是各個單元單獨實體存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以採用硬體的形式實現,也可以採用軟體功能模組的形式實現。
所述集成的單元如果以軟體功能模組的形式實現並非作為獨立的產品進行銷售或使用時,可以儲存在一個電腦可讀取儲存媒介中,基於這樣的理解,本實施例的技術方案本質上或者說對現有技術做出貢獻的部分或者該技術方案的全部或部分可以以軟體產品的形式體現出來,該電腦軟體產品儲存在一個儲存媒介中,包括若干指令用以使得一台電腦設備(可以是個人電腦,伺服器,或者網路設備等)或processor(處理器)執行本實施例所述方法的全部或部分步驟。而前述的儲存媒介包括:隨身碟、行動硬碟、唯讀記憶體(Read Only Memory,ROM)、隨機存取記憶體(Random Access Memory,RAM)、磁碟或者光碟等各種可以儲存程式碼的媒介。
因此,本申請實施例提供了一種電腦儲存媒介,應用於解碼器140,該電腦儲存媒介儲存有電腦程式,所述電腦程式被第一處理器執行時實現前述實施例中任一項所述的方法。
基於上述解碼器140的組成以及電腦儲存媒介,參見圖15,其示出了本申請實施例提供的解碼器140的具體硬體結構示意圖。如圖15所示,可以包括:第二通訊介面1501、第二記憶體1502和第二處理器1503;各個元件透過第二匯流排系統1504耦合在一起。可理解,第二匯流排系統1504用於實現這些元件之間的連接通訊。第二匯流排系統1504除包括資料匯流排之外,還包括電源匯流排、控制匯流排和狀態訊號匯流排。但是為了清楚說明起見,在圖15中將各種匯流排都標為第二匯流排系統1504。其中,
第二通訊介面1501,用於在與其他外部網路元件之間進行收發訊息過程中,訊號的接收和發送;
第二記憶體1502,用於儲存能夠在第二處理器1503上運行的電腦程式;
第二處理器1503,用於在運行所述電腦程式時,執行:
解析碼流,獲取影像標識訊息;
當影像標識訊息指示影像滿足預設條件時,解析碼流,獲取最後一個非零係數位置翻轉標識訊息和最後一個非零係數的座標訊息;
當最後一個非零係數位置翻轉標識訊息指示當前塊使用最後一個非零係數位置翻轉時,對最後一個非零係數的座標訊息進行計算,確定最後一個非零係數的位置;
按照預設掃描順序對最後一個非零係數的位置之前的所有係數進行解碼,確定當前塊的係數。
可選地,作為另一個實施例,第二處理器1503還配置為在運行所述電腦程式時,執行前述實施例中任一項所述的方法。
可以理解,第二記憶體1502與第一記憶體1302的硬體功能類似,第二處理器1503與第一處理器1303的硬體功能類似;這裡不再詳述。
本實施例提供了一種解碼器,該解碼器可以包括解析單元和第二確定單元。這樣,在高位寬、高碼率、高品質或無損的影像場景中,由於係數分佈規律與常規影像編解碼場景不同,在係數編碼中透過減少甚至消除上下文模式編碼的語法元素個數,從而可以減少碼流中編碼所帶來的開銷,進而提高係數編碼的輸送量和編解碼速度;另外,由於減少或消除的語法元素在高位寬、高碼率、高品質或無損的影像編解碼中的影響較小,還能夠提升壓縮效率。
需要說明的是,在本申請中,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者裝置不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者裝置所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,並不排除在包括該要素的過程、方法、物品或者裝置中還存在另外的相同要素。
上述本申請實施例序號僅僅為了描述,不代表實施例的優劣。
本申請所提供的幾個方法實施例中所揭露的方法,在不衝突的情況下可以任意組合,得到新的方法實施例。
本申請所提供的幾個產品實施例中所揭露的特徵,在不衝突的情況下可以任意組合,得到新的產品實施例。
本申請所提供的幾個方法或設備實施例中所揭露的特徵,在不衝突的情況下可以任意組合,得到新的方法實施例或設備實施例。
以上所述,僅為本申請的具體實施方式,但本申請的保護範圍並不局限於此,任何熟悉本技術領域的技術人員在本申請揭露的技術範圍內,可輕易想到變化或替換,都應涵蓋在本申請的保護範圍之內。因此,本申請的保護範圍應以所述請求項的保護範圍為準。
本申請實施例中,無論是編碼器還是解碼器,在高位寬、高碼率、高品質或無損的影像編解碼場景中,由於係數分佈規律與常規影像場景不同,在係數編碼中透過減少甚至消除上下文模式編碼的語法元素個數,比如關於最後一個非零係數位置、子塊編碼標識等語法元素,甚至還可以在最後一個非零係數的座標訊息的值偏大時進行座標變換,從而可以減少碼流中編碼所帶來的開銷,進而提高係數編碼的輸送量和編解碼速度;另外,由於減少或消除的語法元素在高位寬、高碼率、高品質或無損的影像編解碼中的影響較小,還能夠提升壓縮效率。
100:編碼器 101:分割單元 102:預測單元 103:塊分割單元 104:運動估計單元 105:運動補償單元 106:幀內預測單元 107:第一加法器 108:變換單元 109:量化單元 110:反量化單元 111:逆變換單元 112:第二加法器 113:濾波單元 114:解碼圖片快取單元 115:熵編碼單元 120:編碼器 1201:第一確定單元 1202:編碼單元 1301:第一通訊介面 1302:第一記憶體 1303:第一處理器 1304:第一匯流排系統 140:解碼器 1401:解析單元 1402:第二確定單元 1501:第二通訊介面 1502:第二記憶體 1503:第二處理器 1504:第二匯流排系統 200:解碼器 201:解析單元 202:預測單元 203:運動補償單元 204:幀內預測單元 205:反量化單元 206:逆變換單元 207:加法器 208:濾波單元 209:解碼圖片快取單元 S901~S904:步驟 S1101~S1104:步驟
圖1為相關技術提供的一種編碼框架的應用示意圖;
圖2為相關技術提供的一種當前係數與相鄰係數的位置關係示意圖;
圖3為相關技術提供的一種bin的算數解碼過程的流程示意圖;
圖4為相關技術提供的一種二元符號的算數解碼過程的流程示意圖;
圖5為相關技術提供的一種算數解碼引擎的重歸一化的流程示意圖;
圖6為相關技術提供的一種旁路解碼過程的流程示意圖;
圖7為相關技術提供的一種可能有非零係數區域與強制為0區域的位置關係示意圖;
圖8A為本申請實施例提供的一種編碼器的系統組成示意圖;
圖8B為本申請實施例提供的一種解碼器的系統組成示意圖;
圖9為本申請實施例提供的一種係數解碼方法的流程示意圖;
圖10A為本申請實施例提供的一種最後一個非零係數的位置相對於當前塊左上角的位置示意圖;
圖10B為本申請實施例提供的一種最後一個非零係數的位置相對於當前塊右下角的位置示意圖;
圖11為本申請實施例提供的一種係數編碼方法的流程示意圖;
圖12為本申請實施例提供的一種編碼器的組成結構示意圖;
圖13為本申請實施例提供的一種編碼器的具體硬體結構示意圖;
圖14為本申請實施例提供的一種解碼器的組成結構示意圖;
圖15為本申請實施例提供的一種解碼器的具體硬體結構示意圖。
S901~S904:步驟

Claims (61)

  1. 一種係數解碼方法,應用於解碼器,所述方法包括: 解析碼流,獲取影像標識訊息; 當所述影像標識訊息指示影像滿足預設條件時,解析所述碼流,獲取最後一個非零係數位置翻轉標識訊息和最後一個非零係數的座標訊息; 當所述最後一個非零係數位置翻轉標識訊息指示當前塊使用最後一個非零係數位置翻轉時,對所述最後一個非零係數的座標訊息進行計算,確定所述最後一個非零係數的位置; 按照預設掃描順序對所述最後一個非零係數的位置之前的所有係數進行解碼,確定所述當前塊的係數。
  2. 根據請求項1所述的方法,其中,所述方法還包括: 當所述最後一個非零係數位置翻轉標識訊息指示所述當前塊不使用最後一個非零係數位置翻轉時,根據所述最後一個非零係數的座標訊息直接確定所述最後一個非零係數的位置; 按照預設掃描順序對所述最後一個非零係數的位置之前的所有係數進行解碼,確定所述當前塊的係數。
  3. 根據請求項1所述的方法,其中,所述方法還包括: 若所述影像標識訊息的取值為第一值,則確定所述影像標識訊息指示所述影像滿足預設條件;或者, 若所述影像標識訊息的取值為第二值,則確定所述影像標識訊息指示所述影像不滿足預設條件。
  4. 根據請求項3所述的方法,其中,所述預設條件至少包括下述之一:高位寬、高品質、高碼率、高幀率和無失真壓縮。
  5. 根據請求項1所述的方法,其中,所述方法還包括: 若所述最後一個非零係數位置翻轉標識訊息的取值為第一值,則確定所述最後一個非零係數位置翻轉標識訊息指示所述當前塊使用最後一個非零係數位置翻轉;或者, 若所述最後一個非零係數位置翻轉標識訊息的取值為第二值,則確定所述最後一個非零係數位置翻轉標識訊息指示所述當前塊不使用最後一個非零係數位置翻轉。
  6. 根據請求項1所述的方法,其中,所述解析碼流,獲取最後一個非零係數的座標訊息,包括: 解析所述碼流,獲取最後一個非零係數的水平座標的首碼訊息、最後一個非零係數的豎直座標的首碼訊息、最後一個非零係數的水平座標的尾碼訊息和最後一個非零係數的豎直座標的尾碼訊息; 根據所述最後一個非零係數的水平座標的首碼訊息和所述最後一個非零係數的水平座標的尾碼訊息,確定所述最後一個非零係數的水平座標; 根據所述最後一個非零係數的豎直座標的首碼訊息和所述最後一個非零係數的豎直座標的尾碼訊息,確定所述最後一個非零係數的豎直座標; 根據所述最後一個非零係數的水平座標和所述最後一個非零係數的豎直座標,確定所述最後一個非零係數的座標訊息。
  7. 根據請求項1所述的方法,其中,所述方法還包括: 當所述最後一個非零係數位置翻轉標識訊息指示所述當前塊使用最後一個非零係數位置翻轉時,確定所述最後一個非零係數的座標訊息為所述最後一個非零係數的位置相對於所述當前塊的右下角位置之間的水平距離和豎直距離; 相應地,所述對所述最後一個非零係數的座標訊息進行計算,確定所述最後一個非零係數的位置,包括: 確定所述當前塊的寬度和高度; 根據所述當前塊的寬度與所述最後一個非零係數的位置相對於所述當前塊的右下角位置之間的水平距離進行減法計算,得到所述最後一個非零係數的水平座標;以及 根據所述當前塊的高度與所述最後一個非零係數的位置相對於所述當前塊的右下角位置之間的豎直距離進行減法計算,得到所述最後一個非零係數的豎直座標; 根據所述最後一個非零係數的水平座標和所述最後一個非零係數的豎直座標,確定所述最後一個非零係數的位置。
  8. 根據請求項1所述的方法,其中,所述方法還包括: 當所述最後一個非零係數位置翻轉標識訊息指示所述當前塊不使用最後一個非零係數位置翻轉時,確定所述最後一個非零係數的座標訊息為所述最後一個非零係數的位置相對於所述當前塊的左上角位置之間的水平距離和豎直距離; 根據所述最後一個非零係數的位置相對於所述當前塊的左上角位置之間的水平距離和豎直距離,確定所述最後一個非零係數的位置。
  9. 根據請求項1所述的方法,其中,所述最後一個非零係數位置翻轉標識訊息至少為下述其中一項的標識訊息:序列(sequence)級、圖像(picture)級、片(slice)級和塊(block)級。
  10. 根據請求項1至9任一項所述的方法,其中,當所述影像標識訊息指示影像滿足預設條件時,所述方法還包括: 解析所述碼流,獲取最後一個係數使能標識訊息; 當所述最後一個係數使能標識訊息指示所述當前塊使用最後一個係數位置時,按照預設掃描順序對所述最後一個係數位置之前的所有係數進行解碼,確定所述當前塊的係數。
  11. 根據請求項10所述的方法,其中,所述方法還包括: 若所述最後一個係數使能標識訊息的取值為第一值,則確定所述最後一個係數使能標識訊息指示所述當前塊使用所述最後一個係數位置;或者, 若所述最後一個係數使能標識訊息的取值為第二值,則確定所述最後一個係數使能標識訊息指示所述當前塊不使用所述最後一個係數位置。
  12. 根據請求項11所述的方法,其中,當所述最後一個係數使能標識訊息的取值為第二值時,所述方法還包括: 解析所述碼流,獲取最後一個非零係數的水平座標的首碼訊息、最後一個非零係數的豎直座標的首碼訊息、最後一個非零係數的水平座標的尾碼訊息和最後一個非零係數的豎直座標的尾碼訊息; 根據所述最後一個非零係數的水平座標的首碼訊息、所述最後一個非零係數的豎直座標的首碼訊息、所述最後一個非零係數的水平座標的尾碼訊息和所述最後一個非零係數的豎直座標的尾碼訊息,確定所述最後一個非零係數的位置; 按照預設掃描順序對所述最後一個非零係數的位置之前的所有係數進行解碼,確定所述當前塊的係數。
  13. 根據請求項10所述的方法,其中,所述最後一個係數位置是所述當前塊中所有可能不為零的係數所組成的矩陣的右下角位置;或者, 所述最後一個係數位置是所述當前塊根據預設掃描循序執行掃描所有可能不為零的係數的最後位置。
  14. 根據請求項10所述的方法,其中,所述方法還包括: 將最後一個非零係數的位置設置在所述最後一個係數位置。
  15. 根據請求項10所述的方法,其中,所述方法還包括: 確定所述當前塊在預設操作後得到變換塊的寬度和高度; 根據所述變換塊的寬度和高度進行座標計算,得到所述變換塊的右下角座標訊息; 根據所述變換塊的右下角座標訊息,確定所述最後一個係數位置。
  16. 根據請求項15所述的方法,其中,所述預設操作至少包括:強制置零(zero-out)操作。
  17. 根據請求項15所述的方法,其中,所述方法還包括: 當將最後一個非零係數的位置設置在所述最後一個係數位置時,根據所述變換塊的右下角座標訊息,確定所述最後一個非零係數的位置。
  18. 根據請求項10所述的方法,其中,所述最後一個係數使能標識訊息至少為下述其中一項的標識訊息:序列級、圖像級、片級和塊級。
  19. 根據請求項1至18任一項所述的方法,其中,當所述影像標識訊息指示影像滿足預設條件時,所述方法還包括: 解析所述碼流,獲取子塊預設編碼標識訊息; 當所述子塊預設編碼標識訊息指示所述當前塊內的待解碼子塊預設編碼時,確定子塊編碼標識訊息的取值為第一值,對所述待解碼子塊內的所有係數進行解碼。
  20. 根據請求項19所述的方法,其中,當所述子塊預設編碼標識訊息指示待解碼子塊不預設編碼時,所述方法還包括: 解析所述碼流,獲取子塊編碼標識訊息; 當所述子塊編碼標識訊息的取值為第一值時,對所述待解碼子塊內的所有係數進行解碼。
  21. 根據請求項19所述的方法,其中,所述方法還包括: 若所述子塊預設編碼標識訊息的取值為第一值,則確定所述子塊預設編碼標識訊息指示所述待解碼子塊預設編碼;或者, 若所述子塊預設編碼標識訊息的取值為第二值,則確定所述子塊預設編碼標識訊息指示所述待解碼子塊不預設編碼。
  22. 根據請求項19所述的方法,其中,所述方法還包括: 若所述子塊編碼標識訊息的取值為第一值,則確定對所述待解碼子塊內的所有係數進行解碼;或者, 若所述子塊編碼標識訊息的取值為第二值,則確定所述待解碼子塊內的所有係數均為零。
  23. 根據請求項19所述的方法,其中,所述子塊預設編碼標識訊息至少為下述其中一項的標識訊息:序列級、圖像級、片級和塊級。
  24. 根據請求項3或5或11或21或22所述的方法,其中,所述第一值為1,所述第二值為0。
  25. 根據請求項1所述的方法,其中,當所述影像標識訊息為高位寬標識訊息時,所述方法還包括: 若所述高位寬標識訊息指示所述影像滿足高位寬,則確定所述影像滿足預設條件。
  26. 根據請求項1所述的方法,其中,當所述影像標識訊息為高碼率標識訊息時,所述方法還包括: 若所述高碼率標識訊息指示所述影像滿足高碼率,則確定所述影像滿足預設條件。
  27. 根據請求項1所述的方法,其中,當所述影像標識訊息為高品質標識訊息時,所述方法還包括: 若所述高品質標識訊息指示所述影像滿足高品質,則確定所述影像滿足預設條件。
  28. 根據請求項1所述的方法,其中,當所述影像標識訊息為無失真壓縮標識訊息時,所述方法還包括: 若所述無失真壓縮標識訊息指示所述影像滿足無失真壓縮,則確定所述影像滿足預設條件。
  29. 一種係數編碼方法,應用於編碼器,所述方法包括: 確定影像標識訊息以及最後一個非零係數的位置; 當所述影像標識訊息指示影像滿足預設條件時,確定最後一個非零係數位置翻轉標識訊息; 根據所述最後一個非零係數的位置以及所述最後一個非零係數位置翻轉標識訊息,確定最後一個非零係數的座標訊息; 按照預設掃描順序對所述最後一個非零係數的位置之前的所有係數進行編碼,並將編碼後得到的位元訊息、所述影像標識訊息以及所述最後一個非零係數的座標訊息寫入碼流。
  30. 根據請求項29所述的方法,其中,所述確定影像標識訊息,包括: 若所述影像滿足預設條件,則確定所述影像標識訊息的取值為第一值;或者, 若所述影像不滿足預設條件,則確定所述影像標識訊息的取值為第二值。
  31. 根據請求項30所述的方法,其中,所述預設條件至少包括下述之一:高位寬、高品質、高碼率、高幀率和無失真壓縮。
  32. 根據請求項29所述的方法,其中,所述確定最後一個非零係數位置翻轉標識訊息,包括: 若當前塊使用最後一個非零係數位置翻轉,則確定所述最後一個非零係數位置翻轉標識訊息的取值為第一值;或者, 若當前塊不使用最後一個非零係數位置翻轉,則確定所述最後一個非零係數位置翻轉標識訊息的取值為第二值。
  33. 根據請求項32所述的方法,其中,所述最後一個非零係數的位置包括所述最後一個非零係數的初始水平座標和初始豎直座標,所述初始水平座標和所述初始豎直座標為所述最後一個非零係數的位置相對於所述當前塊的左上角位置之間的水平距離和豎直距離; 相應地,所述根據所述最後一個非零係數的位置以及所述最後一個非零係數位置翻轉標識訊息,確定最後一個非零係數的座標訊息,包括: 若所述最後一個非零係數位置翻轉標識訊息的取值為第一值,則根據所述最後一個非零係數的初始水平座標和初始豎直座標進行計算,確定所述最後一個非零係數的座標訊息;或者, 若所述最後一個非零係數位置翻轉標識訊息的取值為第二值,則根據所述最後一個非零係數的初始水平座標和初始豎直座標直接確定所述最後一個非零係數的座標訊息。
  34. 根據請求項33所述的方法,其中,所述根據所述最後一個非零係數的初始水平座標和初始豎直座標進行計算,確定所述最後一個非零係數的座標訊息,包括: 確定所述當前塊的寬度和高度; 根據所述當前塊的寬度與所述最後一個非零係數的初始水平座標進行減法計算,得到所述最後一個非零係數的水平座標;以及 根據所述當前塊的高度與所述最後一個非零係數的初始豎直座標進行減法計算,得到所述最後一個非零係數的豎直座標; 根據所述最後一個非零係數的水平座標和所述最後一個非零係數的豎直座標,確定所述最後一個非零係數的座標訊息。
  35. 根據請求項33所述的方法,其中,所述方法還包括: 若所述最後一個非零係數位置翻轉標識訊息的取值為第一值,則確定所述最後一個非零係數的座標訊息為所述最後一個非零係數的位置相對於所述當前塊的右下角位置之間的水平距離和豎直距離;或者, 若所述最後一個非零係數位置翻轉標識訊息的取值為第二值,則所述最後一個非零係數的座標訊息為所述最後一個非零係數的位置相對於所述當前塊的左上角位置之間的水平距離和豎直距離。
  36. 根據請求項29所述的方法,其中,將所述最後一個非零係數的座標訊息寫入碼流,包括: 根據所述最後一個非零係數的座標訊息,確定最後一個非零係數的水平座標的首碼訊息、最後一個非零係數的豎直座標的首碼訊息、最後一個非零係數的水平座標的尾碼訊息和最後一個非零係數的豎直座標的尾碼訊息; 將所述最後一個非零係數的水平座標的首碼訊息、所述最後一個非零係數的豎直座標的首碼訊息、所述最後一個非零係數的水平座標的尾碼訊息和所述最後一個非零係數的豎直座標的尾碼訊息寫入碼流。
  37. 根據請求項29所述的方法,其中,所述最後一個非零係數位置翻轉標識訊息至少為下述其中一項的標識訊息:序列級、圖像級、片級和塊級。
  38. 根據請求項29至37任一項所述的方法,其中,當所述影像標識訊息指示影像滿足預設條件時,所述方法還包括: 確定最後一個係數使能標識訊息; 當所述最後一個係數使能標識訊息指示所述當前塊使用最後一個係數位置時,按照預設掃描順序對所述最後一個係數位置之前的所有係數進行編碼,並將編碼後得到的位元訊息、所述影像標識訊息以及所述最後一個係數使能標識訊息寫入碼流。
  39. 根據請求項38所述的方法,其中,所述確定最後一個係數使能標識訊息,包括: 若所述當前塊使用所述最後一個係數位置,則確定所述最後一個係數使能標識訊息的取值為第一值;或者, 若所述當前塊不使用所述最後一個係數位置,則確定所述最後一個係數使能標識訊息的取值為第二值。
  40. 根據請求項38所述的方法,其中,所述最後一個係數位置是所述當前塊中所有可能不為零的係數所組成的矩陣的右下角位置;或者, 所述最後一個係數位置是所述當前塊根據預設掃描循序執行掃描所有可能不為零的係數的最後位置。
  41. 根據請求項38所述的方法,其中,所述方法還包括: 將最後一個非零係數的位置設置在所述最後一個係數位置。
  42. 根據請求項38所述的方法,其中,所述方法還包括: 確定所述當前塊在預設操作後得到變換塊的寬度和高度; 根據所述變換塊的寬度和高度進行座標計算,得到所述變換塊的右下角座標訊息; 根據所述變換塊的右下角座標訊息,確定所述最後一個係數位置。
  43. 根據請求項42所述的方法,其中,所述預設操作至少包括:強制置零(zero-out)操作。
  44. 根據請求項42所述的方法,其中,所述方法還包括: 當將最後一個非零係數的位置設置在所述最後一個係數位置時,根據所述變換塊的右下角座標訊息,確定所述最後一個非零係數的位置。
  45. 根據請求項39所述的方法,其中,當所述當前塊不使用所述最後一個係數位置時,所述方法還包括: 確定最後一個非零係數的水平座標的首碼訊息、最後一個非零係數的豎直座標的首碼訊息、最後一個非零係數的水平座標的尾碼訊息和最後一個非零係數的豎直座標的尾碼訊息; 根據所述最後一個非零係數的水平座標的首碼訊息、所述最後一個非零係數的豎直座標的首碼訊息、所述最後一個非零係數的水平座標的尾碼訊息和所述最後一個非零係數的豎直座標的尾碼訊息,確定所述最後一個非零係數的位置; 按照預設掃描順序對所述最後一個非零係數的位置之前的所有係數進行編碼,並將所述最後一個非零係數的水平座標的首碼訊息、所述最後一個非零係數的豎直座標的首碼訊息、所述最後一個非零係數的水平座標的尾碼訊息和所述最後一個非零係數的豎直座標的尾碼訊息寫入碼流。
  46. 根據請求項38所述的方法,其中,所述最後一個係數使能標識訊息至少為下述其中一項的標識訊息:序列級、圖像級、片級和塊級。
  47. 根據請求項29至46任一項所述的方法,其中,當所述影像標識訊息指示影像滿足預設條件時,所述方法還包括: 確定所述當前塊內的待編碼子塊的子塊預設編碼標識訊息; 當所述子塊預設編碼標識訊息指示所述待編碼子塊預設編碼時,對所述待編碼子塊內的所有係數進行編碼,並將編碼後得到的位元訊息以及所述子塊預設編碼標識訊息寫入碼流。
  48. 根據請求項47所述的方法,其中,所述方法還包括: 當所述子塊預設編碼標識訊息指示所述待編碼子塊不預設編碼時,確定所述待編碼子塊的子塊編碼標識訊息,並將所述子塊編碼標識訊息寫入碼流。
  49. 根據請求項47所述的方法,其中,所述確定待編碼子塊的子塊預設編碼標識訊息,包括: 若所述待編碼子塊預設編碼,則確定所述子塊預設編碼標識訊息的取值為第一值;或者, 若所述待編碼子塊不預設編碼,則確定所述子塊預設編碼標識訊息的取值為第二值。
  50. 根據請求項48所述的方法,其中,所述確定所述待編碼子塊的子塊編碼標識訊息,包括: 若所述子塊內需進行編碼,則確定所述子塊編碼標識訊息的取值為第一值;或者, 若所述子塊內的所有係數均為零,則確定所述子塊編碼標識訊息的取值為第二值。
  51. 根據請求項47所述的方法,其中,所述子塊預設編碼標識訊息至少為下述其中一項的標識訊息:序列級、圖像級、片級和塊級。
  52. 根據請求項30或32或39或49或50所述的方法,其中,所述第一值為1,所述第二值為0。
  53. 根據請求項29所述的方法,其中,當所述影像標識訊息為高位寬序列標識訊息時,所述方法還包括: 若所述影像滿足高位寬,則確定所述高位寬序列標識訊息指示所述影像滿足預設條件。
  54. 根據請求項29所述的方法,其中,當所述影像標識訊息為高碼率標識訊息時,所述方法還包括: 若所述影像滿足高碼率,則確定所述高碼率標識訊息指示所述影像滿足預設條件。
  55. 根據請求項29所述的方法,其中,當所述影像標識訊息為高品質標識訊息時,所述方法還包括: 若所述影像滿足高品質,則確定所述高品質標識訊息指示所述影像滿足預設條件。
  56. 根據請求項29所述的方法,其中,當所述影像標識訊息為無失真壓縮標識訊息時,所述方法還包括: 若所述影像滿足無失真壓縮,則確定所述無失真壓縮標識訊息指示所述影像滿足預設條件。
  57. 一種編碼器,所述編碼器包括第一確定單元和編碼單元;其中, 所述第一確定單元,配置為確定影像標識訊息以及最後一個非零係數的位置;以及當所述影像標識訊息指示影像滿足預設條件時,確定最後一個非零係數位置翻轉標識訊息; 所述第一確定單元,還配置為根據所述最後一個非零係數的位置以及所述最後一個非零係數位置翻轉標識訊息,確定最後一個非零係數的座標訊息; 所述編碼單元,配置為按照預設掃描順序對所述最後一個非零係數的位置之前的所有係數進行編碼,並將編碼後得到的位元訊息、所述影像標識訊息以及所述最後一個非零係數的座標訊息寫入碼流。
  58. 一種編碼器,所述編碼器包括第一記憶體和第一處理器;其中, 所述第一記憶體,用於儲存能夠在所述第一處理器上運行的電腦程式; 所述第一處理器,用於在運行所述電腦程式時,執行如請求項29至56任一項所述的方法。
  59. 一種解碼器,所述解碼器包括解析單元和第二確定單元;其中, 所述解析單元,配置為解析碼流,獲取影像標識訊息;以及當所述影像標識訊息指示影像滿足預設條件時,解析所述碼流,獲取最後一個非零係數位置翻轉標識訊息和最後一個非零係數的座標訊息; 所述第二確定單元,配置為當所述最後一個非零係數位置翻轉標識訊息指示當前塊使用最後一個非零係數位置翻轉時,對所述最後一個非零係數的座標訊息進行計算,確定所述最後一個非零係數的位置; 所述解析單元,還配置為按照預設掃描順序對所述最後一個非零係數的位置之前的所有係數進行解碼,確定所述當前塊的係數。
  60. 一種解碼器,所述解碼器包括第二記憶體和第二處理器;其中, 所述第二記憶體,用於儲存能夠在所述第二處理器上運行的電腦程式; 所述第二處理器,用於在運行所述電腦程式時,執行如請求項1至28任一項所述的方法。
  61. 一種電腦儲存媒介,其中,所述電腦儲存媒介儲存有電腦程式,所述電腦程式被執行時實現如請求項1至28任一項所述的方法、或者實現如請求項29至56任一項所述的方法。
TW111108667A 2021-04-12 2022-03-09 係數編解碼方法、編碼器、解碼器以及電腦儲存媒介 TW202241132A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
WOPCT/CN2021/086710 2021-04-12
PCT/CN2021/086710 WO2022217442A1 (zh) 2021-04-12 2021-04-12 系数编解码方法、编码器、解码器以及计算机存储介质

Publications (1)

Publication Number Publication Date
TW202241132A true TW202241132A (zh) 2022-10-16

Family

ID=83639364

Family Applications (1)

Application Number Title Priority Date Filing Date
TW111108667A TW202241132A (zh) 2021-04-12 2022-03-09 係數編解碼方法、編碼器、解碼器以及電腦儲存媒介

Country Status (12)

Country Link
US (2) US11924455B2 (zh)
EP (1) EP4325864A1 (zh)
JP (1) JP2024516358A (zh)
KR (1) KR20230169994A (zh)
CN (2) CN117319687A (zh)
AU (1) AU2021440177A1 (zh)
BR (1) BR112023020915A2 (zh)
CA (1) CA3214574A1 (zh)
MX (1) MX2023012034A (zh)
TW (1) TW202241132A (zh)
WO (1) WO2022217442A1 (zh)
ZA (1) ZA202309724B (zh)

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104093020B (zh) * 2011-03-10 2017-11-17 华为技术有限公司 变换系数的编码方法、变换系数的解码方法,和装置
US20130083856A1 (en) 2011-06-29 2013-04-04 Qualcomm Incorporated Contexts for coefficient level coding in video compression
EP3328086A1 (en) * 2012-02-04 2018-05-30 Google Technology Holdings LLC Devices and methods for context reduction in last significant coefficient position coding
IN2015DN01842A (zh) * 2012-10-01 2015-05-29 Ericsson Telefon Ab L M
KR102391908B1 (ko) * 2017-04-13 2022-04-28 엘지전자 주식회사 비디오 신호를 인코딩, 디코딩하는 방법 및 장치
WO2019027200A1 (ko) * 2017-07-31 2019-02-07 에스케이텔레콤 주식회사 비-제로 계수들의 위치를 표현하는 방법 및 장치
US10523968B2 (en) * 2017-09-18 2019-12-31 Google Llc Coding of last significant coefficient flags
CN114223207B (zh) * 2019-04-16 2023-09-22 寰发股份有限公司 用次要变换编解码视讯数据的方法以及装置
US20230239504A1 (en) * 2020-06-02 2023-07-27 Sharp Kabushiki Kaisha Video decoding apparatus and video coding apparatus
EP4205400A4 (en) * 2020-09-23 2024-01-17 Beijing Dajia Internet Information Technology Co., Ltd. RESIDUAL AND COEFFICIENT CODING FOR VIDEO CODING
EP4248651A1 (en) * 2020-11-18 2023-09-27 Beijing Dajia Internet Information Technology Co., Ltd. Residual and coefficients coding for video coding

Also Published As

Publication number Publication date
ZA202309724B (en) 2024-06-26
BR112023020915A2 (pt) 2023-12-12
JP2024516358A (ja) 2024-04-15
US11924455B2 (en) 2024-03-05
KR20230169994A (ko) 2023-12-18
CN117319687A (zh) 2023-12-29
CA3214574A1 (en) 2022-10-20
MX2023012034A (es) 2023-10-23
US20240022751A1 (en) 2024-01-18
US20240187628A1 (en) 2024-06-06
CN116888965A (zh) 2023-10-13
WO2022217442A1 (zh) 2022-10-20
EP4325864A1 (en) 2024-02-21
AU2021440177A1 (en) 2023-10-26

Similar Documents

Publication Publication Date Title
CN113115047B (zh) 视频编解码方法和设备
JP6266605B2 (ja) 映像コーディングにおけるロスレスコーディングモード及びパルスコード変調(pcm)モードのシグナリングの統一
TW201742458A (zh) 二值化二次轉換指數
US20160234494A1 (en) Restriction on palette block size in video coding
CN113950828A (zh) 视频比特流中的简化二次变换的有条件信令
US20200413100A1 (en) Signaling Coding Of Transform-Skipped Blocks
TW202046724A (zh) 編解碼變換係數的方法及裝置
CN111327904A (zh) 图像重建方法和装置
TW202112135A (zh) 用於視訊寫碼之色度內預測單元
JP2023134742A (ja) 画像予測方法、機器、及びシステム、装置、及び記憶媒体
KR20230062630A (ko) 비디오 코딩을 위한 잔차 및 계수 코딩
US20240129512A1 (en) Encoding and decoding method, encoder, decoder, and storage medium
JP2024502109A (ja) ビデオコーディング用の残差および係数のコーディング
CN115714861A (zh) 视频译码器及相应方法
WO2022217442A1 (zh) 系数编解码方法、编码器、解码器以及计算机存储介质
WO2023272517A1 (zh) 编解码方法、码流、编码器、解码器及计算机存储介质
WO2022217417A1 (zh) 编解码方法、编码器、解码器以及存储介质
WO2022188239A1 (zh) 系数的编解码方法、编码器、解码器及计算机存储介质
WO2022193394A1 (zh) 系数的编解码方法、编码器、解码器及计算机存储介质
WO2024152352A1 (zh) 编解码方法、码流、编码器、解码器以及存储介质
WO2022174475A1 (zh) 视频编解码方法与***、及视频编码器与视频解码器
KR20240029026A (ko) 비디오 코딩 중의 시퀀스 레벨 및 슬라이스 레벨 문법 표시
JP2022548685A (ja) 画像データの符号化及び復号化
WO2022191947A1 (en) State based dependent quantization and residual coding in video coding