TW202415067A - 圖像編碼方法和圖像解碼方法、裝置及存儲介質 - Google Patents

圖像編碼方法和圖像解碼方法、裝置及存儲介質 Download PDF

Info

Publication number
TW202415067A
TW202415067A TW112135398A TW112135398A TW202415067A TW 202415067 A TW202415067 A TW 202415067A TW 112135398 A TW112135398 A TW 112135398A TW 112135398 A TW112135398 A TW 112135398A TW 202415067 A TW202415067 A TW 202415067A
Authority
TW
Taiwan
Prior art keywords
coding
encoding
mode
image
substream
Prior art date
Application number
TW112135398A
Other languages
English (en)
Inventor
王岩
潘冬萍
孫煜程
陳方棟
Original Assignee
大陸商杭州海康威視數位技術股份有限公司
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 大陸商杭州海康威視數位技術股份有限公司 filed Critical 大陸商杭州海康威視數位技術股份有限公司
Publication of TW202415067A publication Critical patent/TW202415067A/zh

Links

Abstract

本申請提供一種圖像編碼方法和圖像解碼方法、裝置及存儲介質,該編碼方法包括:獲取編碼單元;編碼單元為待處理圖像中的圖像塊;編碼單元包括多個通道的編碼塊;多個通道包括第一通道;第一通道為多個通道中的任意一個通道;按照第一編碼模式對第一通道的編碼塊進行編碼。該方法適用於圖像編解碼過程中,用於解決子流緩衝區設置過大的問題。

Description

圖像編碼方法和圖像解碼方法、裝置及存儲介質
本申請涉及視訊編解碼領域,尤其涉及一種圖像編碼方法和圖像解碼方法、裝置及存儲介質。
為了提升編碼器的性能,提出了一種名為子流並行的技術。
子流並行是指利用多個熵編碼器將不同通道的語法元素進行編碼得到多個子流,並將多個子流填充入各自對應的子流緩衝區,並按照預設的交織規則將子流緩衝區中的子流交織成位元流(或者也可以稱作碼流)。
但是,考慮到子流之間的依賴性,不同的子流緩衝區中填充子流的速度不同,同一時間填充速度較快的子流緩衝區比填充速度較慢的子流緩衝區中填充的子流位數多,為了保證填充資料的完整性,需要將所有的子流緩衝區設置得較大,導致增加了硬體成本。
基於上述技術問題,本申請提供一種圖像編碼方法和圖像解碼方法、裝置、設備及存儲介質,可以通過多種改進後的編解碼模式來進行編碼,合理配置子流緩衝區的空間,降低硬體成本。
第一方面,本申請提供一種圖像編碼方法,所述方法包括: 獲取編碼單元;所述編碼單元包括多個通道的編碼塊; 在滿足預設條件的目標子流中編碼預設碼字,直至所述目標子流不滿足所述預設條件;所述目標子流是多個子流中的子流;所述多個子流是對所述多個通道的編碼塊進行編碼得到的碼流。
第二方面,本申請提供一種圖像編碼方法,所述方法包括: 獲取編碼單元;所述編碼單元包括多個通道的編碼塊; 基於預設膨脹率對所述每個通道的編碼塊進行編碼,以使得當前膨脹率小於或等於所述預設膨脹率,其中,所述預設膨脹率包括第一預設膨脹率;所述當前膨脹率的值由最大子流的位元數與最小子流的位元數之商匯出;所述最大子流為對所述多個通道的編碼塊進行編碼得到的多個子流中,位元數最大的子流;所述最小子流為對所述多個通道的編碼塊進行編碼得到的多個子流中,位元數最小的子流。
第三方面,本申請提供一種圖像編碼方法,所述方法包括: 獲取編碼單元;所述編碼單元包括多個通道的編碼塊; 按照幀內塊複製IBC模式對所述多個通道中的至少一個通道的編碼塊進行編碼; 獲取參考預測塊的塊向量BV;所述參考預測塊的BV用於指示所述參考預測塊在已編碼的圖像塊中的位置;所述參考預測塊用於表徵按照所述IBC模式編碼的編碼塊的預測值; 在所述至少一種通道的編碼塊經所述IBC模式編碼得到的至少一個子流中編碼所述參考預測塊的BV。
第四方面,本申請提供一種圖像編碼方法,所述方法包括: 獲取編碼單元;所述編碼單元為待處理圖像中的圖像塊;所述編碼單元包括多個通道的編碼塊; 確定第一總碼長;所述第一總碼長為所述多個通道的編碼塊均按照各自對應的目標編碼模式編碼後得到的的第一碼流的總碼長;所述目標編碼模式包括第一編碼模式;所述第一編碼模式為按照第一定長碼對編碼塊中的樣本值進行編碼的模式;所述第一定長碼的碼長小於或等於所述待處理圖像的圖像位元寬;所述圖像位元寬用於表徵存儲所述待處理圖像中每個樣本所需的位元位數; 當所述第一總碼長大於或等於碼流緩衝區的剩餘大小時,將所述多個通道的編碼塊按照回退模式進行編碼;所述回退模式和所述第一編碼模式的模式標誌相同。
第五方面,本申請提供一種圖像解碼方法,所述方法包括: 解析對編碼單元編碼後的碼流;所述編碼單元包括多個通道的編碼塊; 確定碼字數量;所述碼字數量用於指示在滿足預設條件的目標子流中編碼的預設碼字的數量;所述預設碼字是當存在滿足預設條件的目標子流時,編碼入所述目標子流中的;基於所述碼字數量,對所述碼流進行解碼。
第六方面,本申請提供一種圖像解碼方法,所述方法包括: 解析對編碼單元編碼後的碼流;所述編碼單元包括多個通道的編碼塊; 確定所述當前膨脹率; 根據所述當前膨脹率和第一預設膨脹率確定碼字數量;所述碼字數量用於指示在滿足預設條件的目標子流中編碼的預設碼字的數量;所述預設碼字是當存在滿足預設條件的目標子流時,編碼入所述目標子流中的; 基於所述碼字數量,對所述碼流進行解碼。
第七方面,本申請提供一種圖像解碼方法,所述方法包括: 解析對編碼單元編碼後的碼流;所述編碼單元包括多個通道的編碼塊;所述碼流包括所述多個通道的編碼塊編碼後的、與所述多個通道一一對應的多個子流; 基於從所述多個子流中的至少一個子流中解析到的參考預測塊的塊向量BV,在所述多個子流中確定出所述參考預測塊的位置;所述參考預測塊用於表徵按照幀內塊複製IBC模式進行解碼的解碼塊的預測值;所述參考預測塊的BV用於指示所述參考預測塊在已重建的圖像塊中的位置; 基於所述參考預測塊的位置資訊,確定所述按照IBC模式進行解碼的解碼塊的預測值; 基於所述預測值,對所述按照IBC模式進行解碼的解碼塊進行重建。
第八方面,本申請提供一種圖像解碼方法,所述方法包括: 解析對編碼單元編碼後的碼流;所述編碼單元包括多個通道的編碼塊; 若從所述多個通道的編碼塊編碼得到的子流中解析出模式標誌,且第二總碼長大於碼流緩衝區的剩餘大小,則確定所述子流的目標解碼模式為回退模式;所述模式標誌用於指示所述多個通道的編碼塊是否採用回退模式進行編碼;所述第二總碼長為所述多個通道的編碼塊均按照第一編碼模式進行編碼後得到的碼流的總碼長;所述第一編碼模式為按照第一定長碼對編碼塊中的樣本值所述編碼單元進行編碼的模式;所述第一定長碼的碼長小於或等於所述待處理圖像的圖像位元寬;所述圖像位元寬用於表徵編碼存儲所述待處理圖像中每個樣本所需的位元位數; 解析所述子流中的預設標誌位,確定目標回退子模式;所述目標回退子模式為所述回退模式中的一種;所述預設標誌位用於指示所述多個通道的編碼塊編碼時所採用的回退模式的種類;所述回退模式包括第一回退模式和第二回退模式; 按照所述目標回退模式對所述子流進行解碼。
第九方面,本申請提供一種圖像解碼方法,所述方法包括: 獲取對編碼單元編碼後的碼流; 按照第一解碼模式對第一通道對應的子流進行解碼。
第十方面,本申請提供一種圖像解碼方法,所述方法包括: 獲取解碼單元;所述解碼單元為待處理圖像中的圖像塊,所述解碼單元包括多個通道的編碼塊; 確定第一總碼長;所述第一總碼長為所述多個通道的解碼塊均按照各自對應的目標解碼模式進行解碼後得到的第一碼流的總碼長; 當所述第一總碼長大於或等於碼流緩衝區的剩餘大小時,將所述多個通道的解碼塊按照回退模式進行編碼。
第十一方面,本申請提供一種圖像解碼方法,所述方法包括: 獲取解碼單元;所述解碼單元包括多個通道的編碼塊; 按照IBC模式對所述多個通道中的至少一個通道的解碼塊進行解碼; 獲取參考預測塊的BV; 在至少一種通道的解碼塊經IBC模式編碼得到的至少一個子流中解碼參考預測塊的BV。
第十二方面,本申請提供一種圖像編碼裝置,所述裝置包括: 獲取模組,用於獲取編碼單元;所述編碼單元包括多個通道的編碼塊; 處理模組,用於在滿足預設條件的目標子流中編碼預設碼字,直至所述目標子流不滿足所述預設條件;所述目標子流是多個子流中的子流;所述多個子流是對所述多個通道的編碼塊進行編碼得到的碼流。
第十三方面,本申請提供一種圖像編碼裝置,所述裝置包括: 獲取模組,用於獲取編碼單元;所述編碼單元包括多個通道的編碼塊; 處理模組,用於基於預設膨脹率對所述每個通道的編碼塊進行編碼,以使得當前膨脹率小於或等於所述預設膨脹率。
第十四方面,本申請提供一種圖像編碼裝置,所述裝置包括: 獲取模組,用於獲取編碼單元;所述編碼單元包括多個通道的編碼塊; 處理模組,用於按照幀內塊複製IBC模式對所述多個通道中的至少一個通道的編碼塊進行編碼;獲取參考預測塊的塊向量BV;所述參考預測塊的BV用於指示所述參考預測塊在已編碼的圖像塊中的位置;所述參考預測塊用於表徵按照所述IBC模式編碼的編碼塊的預測值;在所述至少一種通道的編碼塊經所述IBC模式編碼得到的至少一個子流中編碼所述參考預測塊的BV。
第十五方面,本申請提供一種圖像編碼裝置,所述裝置包括: 獲取模組,用於獲取編碼單元;所述編碼單元為待處理圖像中的圖像塊;所述編碼單元包括多個通道的編碼塊; 處理模組,用於確定第一總碼長;所述第一總碼長為所述多個通道的編碼塊均按照各自對應的目標編碼模式編碼後得到的的第一碼流的總碼長;所述目標編碼模式包括第一編碼模式;所述第一編碼模式為按照第一定長碼對編碼塊中的樣本值進行編碼的模式;所述第一定長碼的碼長小於或等於所述待處理圖像的圖像位元寬;所述圖像位元寬用於表徵存儲所述待處理圖像中每個樣本所需的位元位數;當所述第一總碼長大於或等於碼流緩衝區的剩餘大小時,將所述多個通道的編碼塊按照回退模式進行編碼;所述回退模式和所述第一編碼模式的模式標誌相同。
第十六方面,本申請提供一種圖像解碼裝置,所述裝置包括: 處理模組,用於解析對編碼單元編碼後的碼流;所述編碼單元包括多個通道的編碼塊;確定碼字數量;所述碼字數量用於指示在滿足預設條件的目標子流中編碼的預設碼字的數量;所述預設碼字是當存在滿足預設條件的目標子流時,編碼入所述目標子流中的;基於所述碼字數量,對所述碼流進行解碼。
第十七方面,本申請提供一種圖像解碼裝置,所述裝置包括: 處理模組,用於解析對編碼單元編碼後的碼流;所述編碼單元包括多個通道的編碼塊;確定所述當前膨脹率;根據所述當前膨脹率和第一預設膨脹率確定碼字數量;所述碼字數量用於指示在滿足預設條件的目標子流中編碼的預設碼字的數量;所述預設碼字是當存在滿足預設條件的目標子流時,編碼入所述目標子流中的;基於所述碼字數量,對所述碼流進行解碼。
第十八方面,本申請提供一種圖像解碼裝置,所述裝置包括: 處理模組,用於解析對編碼單元編碼後的碼流;所述編碼單元包括多個通道的編碼塊;所述碼流包括所述多個通道的編碼塊編碼後的、與所述多個通道一一對應的多個子流;基於從所述多個子流中的至少一個子流中解析到的參考預測塊的塊向量BV,在所述多個子流中確定出所述參考預測塊的位置;所述參考預測塊用於表徵按照幀內塊複製IBC模式進行解碼的解碼塊的預測值;所述參考預測塊的BV用於指示所述參考預測塊在已重建的圖像塊中的位置;基於所述參考預測塊的位置資訊,確定所述按照IBC模式進行解碼的解碼塊的預測值;基於所述預測值,對所述按照IBC模式進行解碼的解碼塊進行重建。
第十九方面,本申請提供一種圖像解碼裝置,所述裝置包括: 處理模組,用於解析對編碼單元編碼後的碼流;所述編碼單元包括多個通道的編碼塊;若從所述多個通道的編碼塊編碼得到的子流中解析出模式標誌,且第二總碼長大於碼流緩衝區的剩餘大小,則確定所述子流的目標解碼模式為回退模式;所述模式標誌用於指示所述多個通道的編碼塊是否採用回退模式進行編碼;所述第二總碼長為所述多個通道的編碼塊均按照第一編碼模式進行編碼後得到的碼流的總碼長;所述第一編碼模式為按照第一定長碼對編碼塊中的樣本值所述編碼單元進行編碼的模式;所述第一定長碼的碼長小於或等於所述待處理圖像的圖像位元寬;所述圖像位元寬用於表徵編碼存儲所述待處理圖像中每個樣本所需的位元位數;解析所述子流中的預設標誌位,確定目標回退子模式;所述目標回退子模式為所述回退模式中的一種;所述預設標誌位用於指示所述多個通道的編碼塊編碼時所採用的回退模式的種類;所述回退模式包括第一回退模式和第二回退模式;按照所述目標回退模式對所述子流進行解碼。
第二十方面,本申請提供一種視訊編碼器,該視訊編碼器包括處理器和記憶體;記憶體存儲有處理器可執行的指令;處理器被配置為執行指令時,使得視訊編碼器實現上述第一方面至第四方面中的圖像編碼方法。
第二十一方面,本申請提供一種視訊解碼器,該視訊解碼器包括處理器和記憶體;記憶體存儲有處理器可執行的指令;處理器被配置為執行指令時,使得視訊解碼器實現如上述第五方面至第十一方面中的圖像解碼方法。
第二十二方面,本申請提供一種電腦程式產品,當該電腦程式產品在圖像編碼裝置上運行時,使得圖像編碼裝置執行上述第一方面至第四方面中的圖像編碼方法。
第二十三方面,本申請提供一種可讀存儲介質,該可讀存儲介質包括:軟體指令;當軟體指令在圖像編碼裝置中運行時,使得圖像編碼裝置實現上述第一方面至第四方面中的圖像編碼方法,當軟體指令在圖像解碼裝置中運行時,使得圖像解碼裝置實現如上述第五方面至第十一方面中的圖像解碼方法。
第二十四方面,本申請提供一種晶片,該晶片包括處理器和介面,處理器通過介面與記憶體耦合,當處理器執行記憶體中的電腦程式或圖像編碼裝置執行指令時,使得上述第一方面至第四方面任意一個方面所述的方法被執行。
本申請要求於2022年9月20日申請的、申請號為202211146464.4的中國專利申請的優先權,其全部內容通過引用結合在本申請中。
下面將結合本申請實施例中的圖式,對本申請實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本申請一部分實施例,而不是全部的實施例。基於本申請中的實施例,本領域普通技術人員在沒有做出進步性勞動前提下所獲得的所有其他實施例,都屬於本申請保護的範圍。
在本申請的描述中,除非另有說明,「/」表示「或」的意思,例如,A/B可以表示A或B。本文中的「和/或」僅僅是一種描述關聯物件的關聯關係,表示可以存在三種關係,例如,A和/或B,可以表示:單獨存在A,同時存在A和B,單獨存在B這三種情況。此外,「至少一個」是指一個或多個,「多個」是指兩個或兩個以上。「第一」、「第二」等字樣並不對數量和執行次序進行限定,並且「第一」、「第二」等字樣也並不限定一定不同。
需要說明的是,本申請中,「示例性地」或者「例如」等詞用於表示作例子、例證或說明。本申請中被描述為「示例性地」或者「例如」的任何實施例或設計方案不應被解釋為比其他實施例或設計方案更優選或更具優勢。確切而言,使用「示例性地」或者「例如」等詞旨在以具體方式呈現相關概念。
為了提升編碼器的性能,提出了一種名為子流並行(或者也可以稱作子流交織)的技術。
對於編碼端來說,子流並行是指編碼端將編碼單元(coding unit,CU)的不同通道(例如亮度通道、第一色度通道、以及第二色度通道等)的編碼塊(coding block,CB)的語法元素使用多個熵編碼器編碼得到多個子流,並以固定大小的資料包將多個子流交織成位元流。相對應地,對於解碼端來說,子流並行是指解碼端使用不同的熵解碼器並行解碼不同的子流。
示例性地,圖1為子流並行技術的框架示意圖。如圖1所示,以編碼端為例,子流並行技術的具體應用時序在對語法元素(例如變換係數、以及量化係數等)進行編碼之後。圖1中的其他部分的編碼流程可以參照下述本申請實施例提供的視訊編解碼系統中所述,此次不再贅述。
示例性地,圖2為編碼端子流交織過程示意圖。如圖2所示,以待編碼的圖像塊包括三個通道為例,則編碼模組(例如預測模組、變換模組、以及量化模組等)可以輸出該三個通道的語法元素和量化後的變換係數,之後由熵編碼器1、熵編碼器2、以及熵編碼器3分別對該三個通道的語法元素和量化後的變換係數進行編碼,得到每個通道對應的子流,並將三個通道各自對應的子流對應壓入編碼子流緩衝區1、編碼子流緩衝區2、以及編碼子流緩衝區3。子流交織模組可以對編碼子流緩衝區1、編碼子流緩衝區2、以及編碼子流緩衝區3中的子流進行交織,最終輸出多個子流交織後的位元流(或者也可以稱作碼流)。
示例性地,圖3為子流交織單元的格式的示意圖。如圖3所示,子流可以由子流交織單元組成,子流交織單元又可以稱作子流片(substream segment)。子流片的長度為N位元,子流片包括M位元的資料頭和N-M位元的數據主體。
其中,資料頭用於指示當前子流片隸屬的子流。N可以取512,M可以取2。
示例性地,圖4為解碼端反向子流交織過程示意圖。如圖4所示,同樣以編碼端進行編碼的待編碼的圖像塊包括三個通道為例,則編碼端輸出的位元流輸入解碼端後,解碼端中的子流交織模組可以先對位元流進行反向子流交織過程,將位元流分解為三個通道各自對應的子流,並將三個通道各自對應的子流對應壓入解碼子流緩衝區1、解碼子流緩衝區2、以及解碼子流緩衝區3。例如,以上述圖3所示的子流片為例,解碼端可以從位元流中每次提取N位元長度的資料包。通過解析其中M位元的資料頭,得到當前子流片隸屬的目標子流,並將當前子流片中餘下的資料主體放入目標子流對應的解碼子流緩衝區。
熵解碼器1可以對解碼子流緩衝區1中的子流進行解碼,得到一個通道的語法元素和量化後的變換係數;熵解碼器2可以對解碼子流緩衝區2中的子流進行解碼,得到另一個通道的語法元素和量化後的變換係數;熵解碼器3可以對解碼子流緩衝區3中的子流進行解碼,得到又一個通道的語法元素和量化後的變換係數,最後將該三個通道各自的語法元素和量化後的變換係數輸入後續解碼模組進行解碼處理,得到經解碼的圖像。
以下以編碼端為例對子流交織的過程進行介紹。
在編碼子流緩衝區中的每個子流片均包括了至少1個圖像塊編碼產生的編碼位元。子流交織時,可以先對每個子流片的資料主體的最初位元所對應的圖像塊進行順序標記,在子流交織過程中,按照該順序標記對不同子流進行交織。
在一實施例中,該子流交織過程可以通過塊計數佇列對圖像塊進行標記。
例如,塊計數佇列通過先進先出佇列的方式實現。編碼端設置對當前已編碼的圖像塊的計數block count,並對每個子流設置一個塊計數佇列counter queue[ss_idx]。在每個條帶開始編碼是,初始化block count為0,初始化各個counter queue[ss_idx]為空,然後在各個counter queue[ss_idx]各自壓入一個0。
在每個圖像塊(或者說編碼單元(codeing unit,CU))完成編碼操作後,對塊計數佇列進行更新,更新過程如下:
步驟1、令當前已編碼的圖像塊的計數+1,也即block count += 1。
步驟2、選擇一個子流ss_idx。
步驟3、計算該子流ss_idx對應的編碼子流緩衝區中可構建的子流片的個數num_in_buffer[ss_idx]。設該子流ss_idx對應的編碼子流緩衝區為buffer[ss_idx],buffer[ss_idx]中包括的資料量為buffer[ss_idx].fullness,同樣以上述圖3所示的子流片的大小為N位元,子流片中包括M位元的資料頭為例,則num_in_buffer[ss_idx]可以根據下述公式(1)計算得到: num_in_buffer[ss_idx]=buffer[ss_idx].fullness/(N–M) 公式(1) 其中,「/」表示整除。
步驟4、比較當前塊計數度列長度num_in_queue[ss_idx]和編碼子流緩衝區中可構建的子流片的個數num_in_buffer[ss_idx],若兩者相等,則將當前已編碼的圖像塊的計數壓入該塊計數佇列,也即counter_queue[ss_idx].push(block_count)。
步驟5、返回步驟2,處理下一個子流,直至所有子流均處理完畢。
在對塊計數佇列更新完畢後,編碼端可以對各個編碼子流緩衝區中的子流進行交織,交織過程如下:
步驟1、選擇一個子流ss_idx。
步驟2、判斷該子流ss_idx對應的編碼子流緩衝區buffer[ss_idx]中包括的資料量buffer[ss_idx].fullness是否大於或等於N-M。若是,則執行步驟3;若否,則執行步驟6。
步驟3、判斷該子流ss_idx的塊計數佇列中的隊首元素值是否為所有子流的塊計數佇列中的最小值。若是,則執行步驟4;若否,則執行步驟6。
步驟4、以當前編碼子流緩衝區中的資料構建一個子流片。例如,從編碼子流緩衝區buffer[ss_idx]中取出長度為N-M位元的數據,並添加M位元的資料頭,資料頭中的資料為ss_idx,將M位元的資料頭和取出的N-M位元的數據拼接為N位元的子流片,將子流片送入編碼端最終輸出的位元流。
步驟5、彈出(或者說刪除)該子流ss_idx的塊計數佇列的隊首元素,也即counter_queue[ss_idx].pop()。
步驟6、返回步驟1,處理下一個子流,直至所有子流均處理完畢。
在一實施例中,若當前圖像塊為一個條帶(slice)的最後一個圖像塊,則編碼端在上述交織過程之後,還可以執行下述步驟,將編碼子流緩衝區中剩餘的資料進行打包:
步驟1、判斷目前所有的編碼子流緩衝區是否存在至少一個非空。若是,則執行步驟2;若否,則結束。
步驟2、選擇一個子流ss_idx。
步驟3、判斷該子流ss_idx的塊計數佇列的隊首元素值是否為所有子流的塊計數佇列的最小值。若是,則執行步驟4;若否,則執行步驟6。
步驟4、若該子流ss_idx對應的編碼子流緩衝區buffer[ss_idx]中的資料量不足N-M位元,則向該編碼子流緩衝區buffer[ss_idx]中填入0,直至該編碼子流緩衝區buffer[ss_idx]中的資料達到N-M位元。同時,彈出(或者說刪除)該子流的塊計數佇列的隊首元素值,也即counter_queue[ss_idx].pop(),並壓入一個表示資料範圍內最大值的MAX_INT,也即counter_queue[ss_idx].push(MAX_INT)。
步驟5、構建一個子流片。此處的步驟5可以參照上述子流交織過程中的步驟4,不再贅述。
步驟6、返回步驟2,處理下一個子流。若所有子流均處理完畢,則返回步驟1。
示例性地,圖5為編碼端子流交織過程的另一種示意圖。如圖5所示,同樣以待編碼的圖像塊包括三個通道為例,則編碼子流緩衝區可以分別包括編碼子流緩衝區1、編碼子流緩衝區2、以及編碼子流緩衝區3。
編碼子流緩衝區1中的子流片從前至後依次為1_1、1_2、1_3、以及1_4。編碼子流緩衝區1對應的子流1的塊計數佇列1中的標記依次為12、13、27、以及28。編碼子流緩衝區2中的子流片從前至後依次為2_1和2_2。編碼子流緩衝區2對應的子流2的塊計數佇列2中的標記依次為5和71。編碼子流緩衝區3中的子流片從前至後依次為3_1、3_2、以及3_3。編碼子流緩衝區3對應的子流3的塊計數佇列3中的標記依次為6、13、以及25。則子流交織模組可以根據塊計數佇列1、塊計數佇列2、以及塊計數佇列3中的標記順序對編碼子流緩衝區1、編碼子流緩衝區2、以及編碼子流緩衝區3中的子流片進行交織。
交織後的碼流中的子流片的順序依次為:最小標記5對應的子流片2_1、標記6對應的子流片3_1、標記12對應的子流片1_1、標記13對應的子流片1_2、標記13對應的子流片3_2、標記25對應的子流片3_3、標記27對應的子流片1_3、標記28對應的子流片1_4、以及標記71對應的子流片2_2。
但是,多個子流交織時存在依賴性,以編碼端為例,不同的子流緩衝區中子流的填充速度不同,同一時間填充速度較快的子流緩衝區比填充速度較慢的子流緩衝區中填充的子流位元數多,填充速度較快的子流緩衝區在等待填充速度較慢的子流緩衝區填充夠一個子流片的過程中同時還在繼續填充資料,為了保證填充資料的完整性,需要將所有的子流緩衝區設置得較大,增加了硬體成本。
在這種情況下,本申請實施例提供一種圖像編碼方法和圖像解碼方法、裝置及存儲介質,可以通過多種改進後的編碼模式進行編碼,從而控制最大編碼塊的位元數和最小編碼塊的位元數,以使得經過編碼後的待編碼塊的理論膨脹率降低,縮小不同子流緩衝區之間的填充速度差異,從而減小子流緩衝區的預設空間大小,降低硬體成本。
以下結合圖式進行介紹。
圖6為本申請實施例提供的視訊編解碼系統的組成示意圖。如圖6所示,視訊編解碼系統包括源裝置10和目的裝置11。
源裝置10產生經過編碼後的視訊資料,源裝置10也可以被稱為編碼端、視訊編碼端、視訊編碼裝置、或視訊編碼設備等,目的裝置11可以對源裝置10產生的經過編碼後的視訊資料進行解碼,目的裝置11也可以被稱為解碼端、視訊解碼端、視訊解碼裝置、或視訊解碼設備等。源裝置10和/或目的裝置11可包含至少一個處理器以及耦合到所述至少一個處理器的記憶體。該記憶體可包含但不限於唯讀記憶體(read-only memory,ROM)、隨機存取記憶體(random access memory,RAM)、帶電可擦可程式設計唯讀記憶體(electrically erasable programmable read-only memory,EEPROM)、快閃記憶體或可用於以可由電腦存取的指令或資料結構的形式存儲所要的程式碼的任何其它媒體,本申請實施例對此不作具體限定。
源裝置10和目的裝置11可以包括各種裝置,包含桌上型電腦、行動計算裝置、筆記本(例如,膝上型)電腦、平板電腦、機上盒、例如所謂的「智慧」電話等電話手持機、電視機、相機、顯示裝置、數位媒體播放機、視訊遊戲控制台、車載電腦或其類似者等電子設備。
目的裝置11可經由鏈路12從源裝置10接收經編碼視訊資料。鏈路12可包括能夠將經編碼視訊資料從源裝置10移動到目的裝置11的一個或多個媒體和/或裝置。在一個實例中,鏈路12可包括使得源裝置10能夠即時地將編碼後的視訊資料直接發射到目的裝置11的一個或多個通訊媒體。在此實例中,源裝置10可根據通訊標準(例如:無線通訊協定)來調變編碼後的視訊資料,並且可以將調變後的視訊資料發射到目的裝置11。上述一個或多個通訊媒體可包含無線和/或有線通訊媒體,例如:射頻(Radio Frequency,RF)頻譜、一個或多個物理傳輸線。上述一個或多個通訊媒體可形成基於分組的網路的一部分,基於分組的網路例如為區域網路、廣域網路或全球網路(例如,網際網路)等。上述一個或多個通訊媒體可以包含路由器、交換器、基地台,或者實現從源裝置10到目的裝置11的通訊的其它設備。
在另一實例中,源裝置10可將編碼後的視訊資料從輸出介面103輸出到存儲裝置13。類似地,目的裝置11可通過輸入介面113從存儲裝置13存取編碼後的視訊資料。存儲裝置13可包含多種本地存取式資料存儲媒體,例如藍光光碟、高密度數位視訊光碟(Digital Video Disc,DVD)、唯讀記憶光碟(Compact Disc Read-Only Memory,CD-ROM)、快閃記憶體,或用於存儲經編碼視訊資料的其它合適數位存儲媒體。
在另一實例中,存儲裝置13可對應於檔案伺服器或存儲由源裝置10產生的編碼後的視訊資料的另一中間存儲裝置。在此實例中,目的裝置11可經由資料流或下載從存儲裝置13獲取其存儲的視訊資料。檔案伺服器可為任何類型的能夠存儲經編碼的視訊資料並且將經編碼的視訊資料發射到目的裝置11的伺服器。例如,檔案伺服器可以包含全球廣域網路(World Wide Web,Web)伺服器(例如,用於網站)、檔傳送協定(File Transfer Protocol,FTP)伺服器、網路附加存儲(Network Attached Storage,NAS)裝置以及本地磁碟機。
目的裝置11可通過任何標準資料連接(例如,網際網路連接)存取編碼後的視訊資料。資料連接的實例類型包含適合於存取存儲於檔案伺服器上的編碼後的視訊資料的無線通道、有線連接(例如,纜線數據機等),或兩者的組合。編碼後的視訊資料從檔案伺服器發射的方式可為資料流、下載傳輸或兩者的組合。
需要說明的是,本申請實施例提供的圖像編碼方法和圖像解碼方法不限於無線應用場景。
示例性地,本申請實施例提供的圖像編碼方法和圖像解碼方法可以應用於支援以下多種多媒體應用的視訊編解碼:空中電視廣播、有線電視發射、衛星電視發射、資料流視訊發射(例如,經由網際網路)、存儲於資料存儲媒體上的視訊資料的編碼、存儲於資料存儲媒體上的視訊資料的解碼,或其它應用。在一些實例中,視訊編解碼系統可經配置,以支援單向或雙向視訊發射,以支援例如視訊資料流、視訊播放、視訊廣播及/或視訊電話等應用。
需要說明的是,圖6示出的視訊編解碼系統僅僅是視訊編解碼系統的示例,並不是對本申請中視訊編解碼系統的限定。本申請提供的圖像編碼方法和圖像解碼方法還可適用於編碼裝置與解碼裝置之間無資料通訊的場景。在其它實施例中,待編碼視訊資料或編碼後的視訊資料可以從本機存放區器檢索,也可以在網路上資料流等。視訊編碼裝置可對待編碼視訊資料進行編碼並且將編碼後的視訊資料存儲到記憶體,視訊解碼裝置也可從記憶體中獲取編碼後的視訊資料並且對該編碼後的視訊資料進行解碼。
在圖6的實施例中,源裝置10包含視訊源101、視訊轉碼器102和輸出介面103。在一些實施例中,輸出介面103可包含調變器/解調器(數據機)和/或發射器。視訊源101可包括視訊捕獲裝置(例如,攝像機)、含有先前捕獲的視訊資料的視訊存檔、用以從視訊內容提供者接收視訊資料的視訊輸入介面,和/或用於產生視訊資料的電腦圖形系統,或視訊資料的這些來源的組合。
視訊轉碼器102可對來自視訊源101的視訊資料進行編碼。在一些實施例中,源裝置10經由輸出介面103將編碼後的視訊資料直接發射到目的裝置11。在其它實施例中,編碼後的視訊資料還可存儲到存儲裝置13上,供目的裝置11稍後存取來用於解碼和/或播放。
在圖6的實施例中,目的裝置11包含顯示裝置111、視訊解碼器112以及輸入介面113。在一些實施例中,輸入介面113包含接收器和/或數據機。輸入介面113可經由鏈路12和/或從存儲裝置13接收編碼後的視訊資料。顯示裝置111可與目的裝置11集成或可在目的裝置11外部。一般來說,顯示裝置111顯示解碼後的視訊資料。顯示裝置111可包括多種顯示裝置,例如,液晶顯示器、電漿顯示器、有機發光二極體顯示器或其它類型的顯示裝置。
在一實施例中,視訊轉碼器102和視訊解碼器112可各自與音訊編碼器和解碼器集成,且可包含適當的多工器-多路分用器單元或其它硬體和軟體,以處理共同資料流程或單獨資料流程中的音訊和視訊兩者的編碼。
視訊轉碼器102和視訊解碼器112可以包括至少一個微處理器、數位訊號處理器(digital signal processor,DSP)、專用積體電路(application-specific integrated circuit,ASIC)、現場可程式設計閘陣列(field programmable gate array,FPGA)、離散邏輯、硬體或其任何組合。若本申請提供的編碼方法採用軟體實現,則可將用於軟體的指令存儲在合適的非揮發性電腦可讀存儲媒體中,且可使用至少一個處理器執行所述指令從而實施本申請。
本申請中的視訊轉碼器102和視訊解碼器112可以根據視訊壓縮標準(例如HEVC)操作,也可根據其它業界標準操作,本申請對此不作具體限定。
圖7為本申請實施例提供的視訊轉碼器102的組成示意圖。如圖7所示,視訊轉碼器102可以在預測模組21、變換模組22、量化模組23、熵編碼模組24、編碼子流緩衝區25、以及子流交織模組26分別進行預測、變換、量化、熵編碼、以及子流交織的過程。其中,預測模組21、變換模組22、量化模組23也即上述圖1中的編碼模組。視訊轉碼器102中還包括預處理模組20和求和器202,其中預處理模組20包括分割模組和碼率控制模組。對於視訊塊重構建,視訊轉碼器102也包括反量化模組27、反變換模組28、求和器201和參考圖像記憶體29。
如圖7所示,視訊轉碼器102接收視訊資料,預處理模組20視訊資料的輸入參數。其中,該輸入參數包括該視訊資料中圖像的解析度、圖像的取樣格式、像素深度(bits per pixel,BPP)、位元寬(或者也可以稱作圖像位元寬)等資訊。其中,BPP是指單位像素所佔用的位元數。位元寬是指單位像素中一個像素通道所佔用的位元數。例如,以YUV三個像素通道的值表示一個像素,若每個像素通道佔用8位元(bits),則該像素的位元寬為8,並且該像素的BPP為3×8=24 bits。
預處理模組20中的分割模組將圖像分割成原始塊(或者也可以稱作編碼單元(CU))。該原始塊(或者也可以稱作編碼單元(CU))可以包括多個通道的編碼塊。例如該多個通道可以是RGB通道或者YUV通道等。本申請實施例對此不作限制。在一實施例中,此分割也可包含分割成條帶(slice)、圖像塊或其它較大單元,以及根據最大編碼單元(Largest Coding Unit,LCU)及CU的四叉樹結構進行視訊塊分割。示例性的,視訊轉碼器102編碼在待編碼的視訊條帶內的視訊塊的組件。一般的,條帶可劃分成多個原始塊(且可能劃分成稱作圖像塊的原始塊的集合)。通常在分割模組中確定CU、PU以及TU的尺寸。此外,分割模組還用於確定碼率控制單元的尺寸。該碼率控制單元是指碼率控制模組中的基本處理單元,例如在碼率控制模組基於碼率控制單元,為原始塊計算複雜度資訊,再根據複雜度資訊計算原始塊的量化參數。其中,分割模組的分割策略可以是預設的,也可以是編碼過程中基於圖像不斷調整的。當分割策略是預設策略時,相應地,解碼端中也預設相同的分割策略,從而獲取相同的影像處理單元。該影像處理單元為上述任意一種圖像塊,且與編碼側一一對應。當分割策略在編碼過程中基於圖像不斷調整時,該分割策略可以直接或間接地編入碼流,相應地,解碼端從碼流中獲取相應參數,得到相同的分割策略,獲取相同的影像處理單元。
預處理模組20中的碼率控制模組用於生成量化參數以使得量化模組23和反量化模組27進行相關計算。其中,碼率控制模組在計算量化參數過程中,可以獲取原始塊的圖像資訊進行計算,例如上述輸入資訊;還可以獲取求和器201經重構得到的重建值進行計算,本申請對此不作限制。
預測模組21可將預測塊提供到求和器202以產生殘差塊,且將該預測塊提供到求和器201經重構得到重建塊,該重建塊用於後續進行預測的參考像素。其中,視訊轉碼器102通過原始塊的像素值減去預測塊的像素值來形成像素差值,該像素差值即為殘差塊,該殘差塊中的資料可包含亮度差及色度差。求和器201表示執行此減法運算的一個或多個組件。預測模組21還可將相關的語法元素發送至熵編碼模組24用於合併至碼流。
變換模組22可將殘差塊劃分為一個或多個TU進行變換。變換模組22可將殘差塊從像素域轉換到變換域(例如,頻域)。例如,使用離散余弦變換(discrete cosine transform,DCT)或離散正弦變換(discrete sine transform,DST)將殘差塊經變換得到變換係數。變換模組32可將所得變換係數發送到量化模組23。
量化模組23可基於量化單元進行量化。其中,量化單元可以與上述CU、TU、PU相同,也可以在分割模組中進一步地劃分。量化模組23對變換係數進行量化以進一步減小碼率得到量化係數。其中,量化過程可減少與係數中的一些或全部相關聯的位元深度。可通過調整量化參數來修改量化的程度。在一些可行的實施方式中,量化模組23可接著執行包含經量化變換係數的矩陣的掃描。替代的,熵編碼模組24可執行掃描。
在量化之後,熵編碼模組24可熵編碼量化係數。例如,熵編碼模組24可執行上下文自我調整性可變長度編碼(context-adaptive variable-length coding,CAVLC)、上下文自我調整性二進位算術編碼(context-based adaptive binary arithmetic coding,CABAC)、基於語法的上下文自我調整性二進位算術解碼(syntax-based binary arithmetic coding,SBAC)、概率區間分割熵(probability interval partitioning entropy,PIPE)解碼或另一熵編碼方法或技術。在通過熵編碼模組24進行熵編碼之後得到子流,通過多個熵編碼模組24進行熵編碼後可以得到多個子流,該多個子流經過編碼子流緩衝區25、以及子流交織模組26進行子流交織過後得到碼流,該碼流傳輸到視訊解碼器112或存檔以供稍後傳輸或由視訊解碼器112檢索。
其中,子流交織的過程可以參照上述圖1至圖5處所述,此處不再贅述。
反量化模組27及反變換模組28分別應用反量化與反變換,求和器201將反變換後的殘差塊得和預測的殘差塊相加以產生重建塊,該重建塊用作後續原始塊進行預測的參考像素。該重建塊存儲於參考圖像記憶體29中。
圖8為本申請實施例提供的視訊解碼器112的結構示意圖。如圖8所示,視訊解碼器112包括子流交織模組30、解碼子流緩衝區31、熵解碼模組32、預測模組33、反量化模組34、反變換模組35、求和器301和參考圖像記憶體36。
其中,熵解碼模組32包括解析模組和碼率控制模組。在一些可行的實施方式中,視訊解碼器112可執行與關於來自圖7的視訊轉碼器102描述的編碼流程的示例性地互逆的解碼流程。
在解碼過程期間,視訊解碼器112從視訊轉碼器102接收經編碼的視訊的碼流。並通過子流交織模組30對該碼流進行反向子流交織,得到多個子流,並該多個子流經過各自對應的解碼子流緩衝區,流入各自對應的熵解碼模組32中。以一個子流為例,視訊解碼器112的熵解碼模組32中的解析模組對該子流進行熵解碼,以產生量化係數和語法元素。熵解碼模組32將語法元素轉遞到預測模組33。視訊解碼器112可在視訊條帶層級和/或視訊塊層級處接收語法元素。
熵解碼模組32中的碼率控制模組根據解析模組得到的待解碼圖像的資訊,生成量化參數以使得反量化模組34進行相關計算。碼率控制模組還可以根據求和器301經重構得到的重建塊,以計算量化參數。
反量化模組34對子流中所提供且通過熵解碼模組32所解碼的量化係數以及所生成的量化參數進行反量化(例如,解量化)。反量化過程可包含使用通過視訊轉碼器102針對視訊條帶中的每一視訊塊所計算的量化參數確定量化的程度,且同樣地確定應用的反量化的程度。反變換模組35將反變換(例如,DCT、DST等變換方法)應用於反量化後的變換係數,將反量化後的變換係數按照反變換單元在像素域中產生反變換後的殘差塊。其中,反變換單元的尺寸與TU的尺寸相同,反變換方法與變換方法採用同樣的變換方法中相應的正變換與反變換,例如,DCT、DST的反變換為反DCT、反DST或概念上類似的反變換過程。
預測模組33生成預測塊後,視訊解碼器112通過將來自反變換模組35的反變換後的殘差塊與通過與預測塊求和來形成經解碼視訊塊。求和器301表示執行此求和運算的一個或多個組件。在需要時,也可應用解塊濾波器來對經解碼塊進行濾波以便去除塊效應偽影。給定幀或圖像中的經解碼的圖像塊存儲於參考圖像記憶體36中,作為後續進行預測的參考像素。
本申請實施例提供一種可能的視訊(圖像)編解碼的實現方式,參見圖9,圖9為本申請實施例提供的一種視訊編解碼的流程示意圖,該視訊編解碼實現方式包括過程①至過程⑤,過程①至過程⑤可以由上述的源裝置10、視訊轉碼器102、目的裝置11或視訊解碼器112中的任意一個或多個執行。
過程①:將一幀圖像分成一個或多個互相不重疊的並行編碼單元。該一個或多個並行編碼單元間無依賴關係,可完全並行/獨立編碼和解碼,比如並行編碼單元1和並行編碼單元2。
過程②:對於每個並行編碼單元,可再將其分成一個或多個互相不重疊的獨立編碼單元,各個獨立編碼單元間可相互不依賴,但可以共用一些並行編碼單元頭資訊。
獨立編碼單元既可以是包括亮度Y、第一色度Cb、第二色度Cr三個通道,或RGB三個通道,也可以僅包含其中的某一個通道。若獨立編碼單元包含三個通道,則這三個通道的尺寸可以完全一樣,也可以不一樣,具體與圖像的輸入格式相關。該獨立編碼單元也可以理解為每個並行編碼單元所包含N個通道形成的一個或多個處理單元。例如上述Y、Cb、Cr三個通道即為構成該並行編碼單元的三個通道,其分別可以為一個獨立編碼單元,或者Cb和Cr可以統稱為色度通道,則該並行編碼單元包括亮度通道構成的獨立編碼單元,以及色度通道構成的獨立編碼單元。
過程③:對於每個獨立編碼單元,可再將其分成一個或多個互相不重疊的編碼單元,獨立編碼單元內的各個編碼單元可相互依賴,如多個編碼單元可以進行相互參考預編解碼。
若編碼單元與獨立編碼單元尺寸相同(即獨立編碼單元僅分成一個編碼單元),則其尺寸可為過程②所述的所有尺寸。
編碼單元既可以是包括亮度Y、第一色度Cb、第二色度Cr三個通道(或RGB三通道),也可以僅包含其中的某一個通道。若包含三個通道,幾個通道的尺寸可以完全一樣,也可以不一樣,具體與圖像輸入格式相關。
值得注意的是,過程③是視訊編解碼方法中一個可選的步驟,視訊編/解碼器可以對過程②獲得的獨立編碼單元進行殘差係數(或殘差值)進行編/解碼。
過程④:對於編碼單元,可以將其可再將其分成一個或多個互相不重疊的預測組(prediction group,PG),PG也可簡稱為Group,各個PG按照選定預測模式進行編解碼,得到PG的預測值,組成整個編碼單元的預測值,基於預測值和編碼單元的原始值,獲得編碼單元的殘差值。
過程⑤:基於編碼單元的殘差值,對編碼單元進行分組,獲得一個或多個相不重疊的殘差小塊(residual block,RB),各個RB的殘差係數按照選定模式進行編解碼,形成殘差係數流。具體的,可分為對殘差係數進行變換和不進行變換兩類。
其中,過程⑤中殘差係數編解碼方法的選定模式可以包括,但不限於下述任一種:半定長編碼方式、指數哥倫布(Golomb)編碼方法、Golomb-Rice編碼方法、截斷一元碼編碼方法、游程編碼方法、直接編碼原始殘差值等。
例如,視訊轉碼器可直接對RB內的係數進行編碼。
又如,視訊轉碼器也可對殘差塊進行變換,如DCT、DST、Hadamard變換等,再對變換後的係數進行編碼。
作為一種可能的示例,當RB較小時,視訊轉碼器可直接對RB內的各個係數進行統一量化,再進行二值化編碼。若RB較大,可進一步劃分為多個係數組(coefficient group,CG),再對各個CG進行統一量化,再進行二值化編碼。在本申請的一些實施例中,係數組(CG)和量化組(QG)可以相同。
下面以半定長編碼方式對殘差係數編碼的部分進行示例性說明。首先,將一個RB塊內殘差絕對值的最大值定義為修整最大值(modified maximum,mm)。其次,確定該RB塊內殘差係數的編碼位元數(同一個RB塊內殘差係數的編碼位元數一致)。例如,若當前RB塊的關鍵限值(critical limit,CL)為2,當前殘差係數為1,則編碼殘差係數1需要2個位元,表示為01。若當前RB塊的CL為7,則表示編碼8-bit的殘差係數和1-bit的符號位元。CL的確定是去找滿足當前子塊所有殘差都在[-2^(M-1),2^(M-1)]範圍之內的最小M值。若同時存在-2^(M-1)和2^(M-1)兩個邊界值,則M應增加1,即需要M+1個位元編碼當前RB塊的所有殘差;若僅存在-2^(M-1)和2^(M-1)兩個邊界值中的一個,則需要編碼一個Trailing位元來確定該邊界值是-2^(M-1)還是2^(M-1);若所有殘差均不存在-2^(M-1)和2^(M-1)中的任何一個,則無需編碼該Trailing位元。
另外,對於某些特殊的情況,視訊轉碼器也可以直接編碼圖像的原始值,而不是殘差值。
上述視訊轉碼器102以及視訊解碼器112也可以通過另外一種實現形態來實現,例如,採用通用的數文書處理系統實現。參見圖10,圖10為本申請實施例提供的編解碼裝置的組成示意圖,該編解碼裝置可以是上述視訊轉碼器102中的部分裝置,也可以是上述視訊解碼器112中的部分裝置。該編解碼裝置可以應用於編碼側(或者說編碼端),也可以應用於解碼側(或者說解碼端)。如圖10所示,該編解碼裝置包括處理器41和記憶體42。處理器41與處理器42相連接(例如通過匯流排43互相連接)。在一實施例中,該編解碼裝置還可以包括通訊介面44,通訊介面44連接處理器41和記憶體42,用於接收/發送資料。
處理器41,用於執行記憶體42中存儲的指令,以實現本申請下述實施例提供的圖像編碼方法和圖像解碼方法。處理器41可以是中央處理器(central processing unit,CPU)、通用處理器網路處理器(network processor,NP)、數位訊號處理器(digital signal processing,DSP)、微處理器、微控制器、可程式設計邏輯器件(programmable logic device,PLD)或它們的任意組合。處理器41還可以是其它任意具有處理功能的裝置,例如電路、器件或軟體模組,本申請實施例對此不作限制。在一種示例中,處理器41可以包括一個或多個CPU,例如圖10中的CPU0和CPU1。作為一種可選的實現方式,電子設備可以包括多個處理器,例如,除處理器41之外,還可以包括處理器45(圖10中以虛線為例示出)。
記憶體42,用於存儲指令。例如,指令可以是電腦程式。在一實施例中,記憶體42可以是唯讀記憶體(read-only memory,ROM)或可存儲靜態資訊和/或指令的其他類型的靜態存放裝置,也可以是存取記憶體(random access memory,RAM)或者可存儲資訊和/或指令的其他類型的動態儲存裝置設備,還可以是電子抹除式可複寫唯讀記憶體(electrically erasable programmable read-only memory,EEPROM)、唯讀記憶光碟(compact disc read-only memory,CD-ROM)或其他光碟存儲、光碟存儲(包括壓縮光碟、雷射碟、光碟、數位通用光碟、藍光光碟等)、磁片存儲介質或者其他磁存放裝置等,本申請實施例對此不作限制。
需要說明的是,記憶體42可以獨立於處理器41存在,也可以和處理器41集成在一起。記憶體42可以位於編解碼裝置內,也可以位於編解碼裝置外,本申請實施例對此不作限制。
匯流排43,用於在編解碼裝置所包括的各個部件之間傳送資訊。匯流排43可以是工業標準架構(industry standard architecture,ISA)線路、外部設備互連(peripheral component interconnect,PCI)線路或擴展工業標準架構(extended industry standard architecture,EISA)線路等。匯流排43可以分為位址線路、資料線路、控制線路等。為便於表示,圖10中僅用一條實線表示,但並不表示僅有一根線路或一種類型的線路。
通訊介面44,用於與其他設備或其它通訊網路進行通訊。該其它通訊網路可以為乙太網,無線接入網(radio access network,RAN),無線區域網路(wireless local area networks,WLAN)等。通訊介面44可以是模組、電路、收發器或者任何能夠實現通訊的裝置。本申請實施例對此不作限制。
需要說明的是,圖10中示出的結構並不構成對編解碼裝置的限定,除圖10所示的部件之外,編解碼裝置可以包括比圖示更多或更少的部件,或者某些部件的組合,或者不同的部件佈置。
需要說明的是,本申請實施例提供的圖像編碼方法和圖像解碼方法的執行主體可以是上述編解碼裝置,或者,編解碼裝置中安裝的提供編解碼功能的應用程式(application,APP);或者,編解碼裝置中的CPU;又或者,編解碼裝置中用於執行圖像編碼方法和圖像解碼方法的功能模組。本申請實施例對此不作限制。為了描述簡單,以下統一以編碼端或解碼端進行描述。
下面結合圖式對本申請實施例提供的圖像編碼方法和圖像解碼方法進行介紹。
如背景技術、以及上述圖1至圖5處所述,不同的子流緩衝區填充子流的速度不同,同一時間填充速度較快的子流緩衝區比填充速度較慢的子流緩衝區中填充的子流位數多,為了保證填充資料的完整性,需要將所有的子流緩衝區設置得較大,增加了硬體成本。
為了對子流緩衝區進行合理配置,本申請實施例提出了一系列改進後的編碼方式(例如編碼模式/預測模式、複雜度資訊傳輸、係數分組、碼流排佈等)來減小編碼單元的膨脹率,從而縮小編碼單元各個通道的編碼塊進行編碼時的速度差異,可以合理配置子流緩衝區的空間,降低硬體成本。
其中,編碼單元的膨脹率可以包括理論膨脹率和當前(CU)膨脹率(實際膨脹率)。理論膨脹率在轉碼器確定後,通過理論推導即可得出,其值大於1。若編碼單元存在某一通道的編碼塊編碼後的子流的位元數為0,則計算當前膨脹率時需要除去該種情況。理論膨脹率= CU中理論位元數最大的CB的位元數/CU中理論位元數最小的CB的位元數。當前(CU)膨脹率=當前CU中實際位元數最大的CB的位元數/當前CU中實際位元數最小的CB的位元數。
在一實施例中,相關的膨脹率還可以包括當前子流膨脹率。當前子流膨脹率=當前多個子流緩衝區中資料的位元數最大的子流緩衝區中的資料的位元數/當前多個子流緩衝區中資料的位元數最小的子流緩衝區中的資料的位元數。
需要說明的是,針對各個通道的編碼塊或者整個編碼單元,編碼端在選擇編碼模式(或者說預測模式)時,可以基於以下幾種策略進行選擇。以下實施例中的各個改進後的編碼模式均可以按照下述幾種策略選擇確定。
策略1、計算位元消耗代價,並選擇位元消耗代價最小的編碼模式。
其中,位元消耗代價是指編/解碼CU所需的位元數。位元消耗代價主要包括模式標誌(或者說模式碼字)的碼長、編/解碼工具資訊碼字的碼長、殘差碼字的碼長。
策略2、計算編碼後的失真,並選擇失真最小的編碼模式。
其中,失真用於指示重建值和原始值之間的差異情況。計算失真可以採用平方誤差和(sum of squared difference,SSD)、均方誤差(mean squared error,MSE)、絕對誤差和(時域)(sum of absolute difference,SAD)、絕對誤差和(頻域)(sum of absolute transformed difference,SATD)、以及峰值訊號雜訊比(peak signal to noise ratio,PSNR)等中的任意一項或多項計算。本申請實施例對此不作限制。
策略3、計算率失真代價,並選擇率失真代價最小的編碼模式。
其中,率失真代價是指位元消耗代價和失真的加權和,進行加權計算時,位元消耗代價的權重係數和編碼後的失真的權重係數均可以預設在編碼端中。本申請實施例對權重係數的具體數值不作限制。
以下將通過一系列的實施例對本申請實施例提供的圖像編碼方法和圖像解碼方法中改進的編碼模式進行介紹。
一、防膨脹模式修改。
可選的實施方案:編碼端對編碼單元的多個通道的編碼塊中的每個像素值以圖像位元寬作為定長碼進行編碼。
修改方案:編碼端對編碼單元的多個通道的編碼塊中的每個像素值以小於或等於圖像位元寬的定長碼進行編碼。
實施例一:
示例性地,圖11為本申請實施例提供的一種圖像編碼方法的流程示意圖。如圖11所示,該圖像編碼方法包括S101至S102。
S101、編碼端獲取編碼單元。
其中,編碼端也即上述圖6中的源裝置10,或者源裝置10中的視訊轉碼器102,或者上述圖10中的編解碼裝置等。本申請實施例對此不作限制。編碼單元為待處理圖像中的圖像塊(也即上述原始塊)。編碼單元包括多個通道的編碼塊;多個通道包括第一通道;第一通道為多個通道中的任意一個通道。例如,編碼單元的尺寸可以為16×2×3,則該編碼單元的第一通道的編碼塊的尺寸即為16×2。
S102、編碼端按照第一編碼模式對第一通道的編碼塊進行編碼。
其中,第一編碼模式為按照第一定長碼對第一通道的編碼塊中的取樣值進行編碼的模式。第一定長碼的碼長小於或等於待處理圖像的圖像位元寬。圖像位元寬用於表徵存儲待處理圖像中每個樣本所需的位元位數。第一定長碼可以預設在編/解碼端中,或者,由編碼端確定後並寫入碼流頭資訊中傳輸至解碼端。
應理解,防膨脹模式是指對多個通道的編碼塊中的原始像素值直接進行編碼的模式,與其他編碼模式相比,直接編碼原始像素值所消耗的位元數通常較大,因此,理論膨脹率中的理論位元數最大的編碼塊通常來自於按照防膨脹模式進行編碼的編碼塊。本申請實施例通過降低防膨脹模式中定長碼的碼長,來降低理論膨脹率中理論位元數最大的編碼塊的理論位元數(也即分式中的分子),從而降低理論膨脹率。理論膨脹率較低,各個通道的編碼塊編碼子流的速度差異較小,因此設置子流緩衝區時,既不會將子流緩衝區較大,也不會導致子流緩衝區空間浪費,從而實現對子流緩衝區的合理配置。
在一實施例中,若待處理的圖像為RGB圖像,則編碼端可以將其轉化為YUV格式進行編碼,或者,若待處理的圖像為YUV圖像,編碼端也可以將其轉化成RGB格式進行編碼。本申請實施例對此不作限制。
相對應地,本申請實施例還提供一種圖像解碼方法。圖12為本申請實施例提供的一種圖像解碼方法的流程示意圖。如圖12所示,該圖像解碼方法包括S201至S202。
S201、解碼端獲取對編碼單元編碼後的碼流。
其中,對編碼單元編碼後的碼流可以包括多個通道的編碼塊編碼後的、與多個通道一一對應的多個子流。例如,該多個子流可以包括上述第一通道對應的子流(也即第一通道的編碼塊編碼後的子流)。
S202、解碼端按照第一解碼模式對第一通道對應的子流進行解碼。
其中,第一解碼模式為按照第一定長碼從第一通道對應的子流中解析樣本值的模式。
在一實施例中,S202還可以具體包括:當第一定長碼等於圖像位元寬時,解碼端直接按照第一解碼模式對第一通道對應的子流進行解碼;當第一定長碼小於圖像位元寬時,解碼端對解析出來的第一通道的編碼塊中的像素值進行反量化。
其中,量化步長為1<<(bitdepth-fixed_length)。bitdepth表示圖像位元寬。fixed_length表示第一定長碼的長度。1<<表示左移一位。
二、回退模式修改。
可選的實施方案1:若當前碼流緩衝區無法滿足編碼單元的所有通道均採用防膨脹模式進行編碼時,此時防膨脹模式關閉,編碼端選擇原始值以外的模式,此時即使採用其他編碼模式編碼會發生膨脹(某一通道的編碼塊編碼後的子流的位元數過大),也不能採用防膨脹模式。
改進方案1:保障防膨脹模式開啟。
實施例二:
圖13為本申請實施例提供的另一種圖像解碼方法的流程示意圖。如圖13所示,該圖像解碼方法包括S301至S303。
S301、編碼端獲取編碼單元。
其中,編碼單元為待處理圖像中的圖像塊,編碼單元包括多個通道的編碼塊。
S302、編碼端確定第一總碼長。
其中,第一總碼長為多個通道的編碼塊均按照各自對應的目標編碼模式進行編碼後得到的第一碼流的總碼長。目標編碼模式包括第一編碼模式,第一編碼模式為按照第一定長碼對編碼塊中的像素值進行編碼的模式,第一定長碼的碼長小於或等於待處理圖像的圖像位元寬,圖像位元寬用於表徵存儲待處理圖像中每個樣本所需的位元數。
例如,對多個通道中的每個通道,編碼端均可以按照上述策略3確定每個編碼模式的率失真代價,並確定率失真代價最低的模式作為通道的編碼塊對應的目標編碼模式。
S303、當第一總碼長大於或等於碼流緩衝區的剩餘大小時,編碼端將多個通道的編碼塊按照回退模式進行編碼。
其中,回退模式包括第一回退模式和第二回退模式。第一回退模式是指使用IBC模式獲得參考預測塊的塊向量,然後計算殘差並對殘差量化,量化的步長基於碼流快取區的剩餘大小和目標像素深度(bite per pixel,BPP)確定。第二回退模式是指直接對像素點進行量化,量化的步長基於碼流緩衝區的剩餘大小和目標BPP確定。回退模式和第一編碼模式的模式標誌相同。
應理解,當採用其他編碼模式編碼時可能會出現編碼後的殘差過大的情況,導致採用該其他編碼模式的編碼塊的位元數過大,而防膨脹模式是採用定長碼編碼,編碼後的總碼長固定,採用防膨脹模式可以避免上述殘差過大的情況。本申請實施例提供了一種在回退模式和第一編碼模式(防膨脹模式)的模式標誌相同的情況下,通過判斷碼流緩衝區的剩餘大小來向解碼端告知採用的編碼模式的方案,保障了防膨脹模式一直可以被選用,從而降低了理論膨脹率,理論膨脹率較低,各個通道的編碼塊編碼子流的速度差異較小,因此設置子流緩衝區時,既不會導致子流緩衝區較大,也不會導致子流緩衝區空間浪費,從而實現對子流緩衝區的合理配置。
在一實施例中,該圖像解碼方法還可以包括:編碼端在多個通道的編碼塊編碼得到的多個子流中編碼模式標誌。
其中,模式標誌用於指示多個通道的編碼塊各自採用的編碼模式,第一編碼模式的模式標誌和回退模式的模式標誌相同。
在一實施例中,多個通道的編碼塊編碼後的子流中可以編碼自身的模式標誌。以多個通道中包括第一通道,第一通道為多個通道中的任意一個通道為例,在這種情況下,編碼端在多個通道的編碼塊編碼得到的多個子流中編碼模式標誌,可以包括:在的第一通道的編碼塊編碼得到的子流中編碼子模式標誌。
其中,子模式標誌用於指示第一通道的編碼塊所採用的回退模式的種類,或者用於指示多個通道的編碼塊所採用的回退模式的種類。如上所述,回退模式可以包括第一回退模式和第二回退模式。此處不再贅述。
在一實施例中,同樣以上述第一分量為例,在這種情況下,編碼端在多個通道的編碼塊編碼得到的多個子流中編碼模式標誌,可以包括:在亮度通道的編碼塊編碼得到的子流中編碼第一標誌、第二標誌、以及第三標誌。
其中,第一標誌用於指示多個通道的編碼塊採用第一編碼模式或者回退模式編碼;第二標誌用於指示多個通道的編碼塊採用目標模式編碼,目標模式為第一編碼模式和回退模式中的任意一種;當第二標誌指示多個通道的編碼塊採用的目標模式為回退模式時,第三標誌用於指示多個通道的編碼塊採用的回退模式的種類。
相對應地,本申請實施例還提供兩種圖像解碼方法。圖14為本申請實施例提供的另一種圖像解碼方法的流程示意圖。如圖14所示,該圖像解碼方法包括S401至S404。
S401、解碼端解析對編碼單元編碼後的碼流。
其中,編碼單元包括多個通道的編碼塊。多個通道包括第一通道,第一通道為多個通道中的任意一個通道。
S402、若從多個通道的編碼塊編碼得到的子流中解析出模式標誌,且第二總碼長大於碼流緩衝區的剩餘大小,則解碼端確定該子流的目標解碼模式為回退模式。
其中,第二總碼長為多個通道的編碼塊均按照第一編碼模式或者回退模式進行編碼後得到的的第一碼流的總碼長。
S403、解碼端解析所述子流中的預設標誌位,確定目標回退模式。
其中,目標回退模式為回退模式中的一種。子模式標誌用於指示多個通道的編碼塊編碼時所採用的回退模式的種類。回退模式包括第一回退模式和第二回退模式。
S404、解碼端按照目標回退模式對該子流進行解碼。
圖15為本申請實施例提供的又一種圖像解碼方法的流程示意圖。如圖15所示,該圖像解碼方法包括S501至S505。
S501、解碼端解析對編碼單元編碼後的碼流。
S502、解碼端從第一通道的編碼塊編碼得到的子流中解析第一標誌。
其中,第一通道為多個通道中的任意一個通道。第一標誌可以參照上述編碼方法中所述,此處不再贅述。
S503、解碼端從第一通道的編碼塊編碼得到的子流中解析第二標誌。
其中,第二標誌可以參照上述編碼方法中所述,此處不再贅述。
S504、當第二標誌指示多個通道的編碼塊採用的目標模式為回退模式時,解碼端從第一通道的編碼塊編碼得到的子流中解析第三標誌。
其中,第三標誌可以參照上述編碼方法中所述,此處不再贅述。
S505、解碼端根據第三標誌指示的回退模式的種類確定多個通道的目標解碼模式,並按照目標解碼模式對多個通道的編碼塊編碼得到的子流進行解碼。
例如,解碼端可以將第三標誌指示的回退模式的種類作為多個通道的目標解碼模式。
在一實施例中,該方法還可以包括:解碼端基於碼流緩衝區的剩餘大小、以及目標像素深度BPP,確定編碼單元的目標解碼碼長,目標解碼碼長用於指示解碼編碼單元的碼流所需的碼長;解碼端基於解碼碼長確定多個通道的分配碼長,分配碼長用於指示解碼多個通道的編碼塊的碼流的殘差所需的碼長;解碼端根據分配碼長在多個通道的平均值,確定多個通道各自分配的解碼碼長。
基於上述實施例二的理解,以多個通道包括亮度(Y)通道、第一色度(U)通道、以及第二色度(V)通道為例,對回退模式的改進方案1中主要包括的兩個方案進行介紹:
方案1:
編碼端:編碼端控制在任何時候,防膨脹模式(原始值模式)下的編碼的位元消耗代價都是最大的,編碼端不能選擇位元消耗代價大於原始值的模式。因此所有分量下都需要編碼模式,即使在回退模式下,不僅Y通道對應的子流(第一子流)需要編碼模式,U/V通道對應的子流(第二子流和第三子流)也需要編碼模式。保持回退模式碼字與原始值模式碼字相同。回退模式的具體種類(第一回退模式和第二回退模式)可以基於某一個通道編碼。
解碼端:首先解析三個通道的編碼模式,當Y/U/V三個通道均為基於率失真代價選擇的目標編碼模式時,再判斷碼流緩衝區的剩餘大小判斷碼流緩衝區是否允許三個通道均按照各自的目標編碼模式解碼。若不允許,則當前的解碼模式為回退模式。若為回退模式,則可以基於某一個分量解析一個標誌位,表示當前回退模式屬於第一回退模式還是第二回退模式(三通道使用同一種回退模式)。因此當解碼端有一個通道沒有選擇防膨脹模式時,當前CU就不會選擇回退模式。
方案2:
編碼端:編碼端控制在任何時候,防膨脹模式(原始值模式)下的編碼的位元消耗代價都是最大的,編碼端不能選擇位元消耗代價大於原始值的模式。原始值模式與回退模式依然使用相同的模式標誌(也即上述第一標誌),但在編碼防膨脹模式和回退模式時,額外編碼一個標誌(也即上述第二標誌),表示當前編碼模式為防膨脹模式或回退模式中的一種,當該額外的標誌指示當前編碼模式為回退模式時,進一步編碼一個標誌位(也即上述第三標誌),表示當前的回退模式為第一回退模式或者第二回退模式中的一種。當多個通道均選擇回退模式時,多個通道的回退模式的種類保持一致。當有通道選擇防膨脹模式時,在該通道對應的子流中編碼模式標誌,但無需編碼是否為回退模式的標誌(也即上述第二標誌)。
解碼端:從碼流中解析出模式標誌,若模式標誌為防膨脹模式和回退模式共用的模式標誌,則繼續解析一個標誌(也即上述第二標誌),表示當前是否是回退模式。若是回退模式,則進一步解析一個標誌(也即上述第三標誌),表示當前的回退模式為第一回退模式以及第二回退模式中的一種。當解析出一個通道的回退模式的種類時,其他採用回退模式的通道與該通道採用相同的回退模式的種類。未採用回退模式的通道各自解析自身的模式。
如上所述,改進方案1通過上述實施例二可以降低膨脹率公式中的分子上限。在一實施例中,對於回退模式,還可以提高膨脹率公式中的分母下限。以下通過可選的實施方案2和改進方案2進行介紹。
可選的實施方案2:當確定使用回退模式進行編碼時,編碼端會給定一個目標BPP,在回退模式下三個通道的編碼塊對應的子流的位元數之和必須小於等於目標BPP。因此在進行碼率發分配時,將公共資訊(塊向量和模式標誌)放在亮度通道上編碼,分配的碼長減去公共資訊佔用的碼長之後,剩餘的碼長用於對多個通道的殘差進行編碼,因此需要對剩餘的碼長進行分配,分配的方法時將是剩餘的碼長對多個通道的像素數進行整除(也即每個通道分配到的碼長需要是編碼單元的像素數的整數倍),若無法整除,就將無法整除的部分碼長分配給亮度通道。當剩餘的碼長較小時,無法被多個通道的像素數整除,第一色度通道和第二色度通道對應的子流中就無法分配到碼長,導致對應的子流位元數較小,膨脹率較大。
改進方案2:將剩餘的碼長按照位元數平均分配到多個通道,提高分配精度。
實施例三:
圖16為本申請實施例提供的又一種圖像編碼方法的流程示意圖。如圖15所示,在上述S301至S303的基礎上,該圖像編碼方法還可以包括S601至S603。
S601、編碼端基於碼流緩衝區的剩餘大小以及目標BPP,確定編碼單元的目標編碼碼長。
其中,目標編碼碼長用於指示編碼編碼單元所需的碼長。目標BPP可以由編碼端獲取,例如接收使用者輸入的目標BPP。
S602、基於目標編碼碼長,確定多個通道的分配碼長。
其中,分配碼長用於指示編碼多個通道的編碼塊的殘差所需的碼長。
例如,如上所述,編碼端可以分配碼長減去公共資訊所佔用的碼長,得到多個通道的分配碼長。
S603、根據分配碼長在多個通道的平均值,確定多個通道各自分配的編碼碼長。
在一實施例中,編碼端還可以將上述塊向量和模式標誌在多個通道對應的子流中進行編碼。
其中,模式標誌可以參照上述,此處不再贅述。塊向量可以參照下述IBC模式所述,此處不再贅述。
在一實施例中,若編碼殘差時,存在一個通道分配到的位元無法整除該通道的像素個數,也即無法對每個像素的殘差使用定長碼編碼,則編碼端可以將該通道的像素進行分組,每組僅編碼一個殘差值。
應理解,當剩餘的碼長較小時,目前以編碼單元的像素個數為單位的碼長分配模式可能導致色度通道無法分配到碼長,從而導致色度通道的編碼塊編碼後的位元數較小,使膨脹率變大。本申請實施例提供的圖像編碼方法可以通過將分配的單位由像素個數轉化為分配碼長的位元數進行分配,每個通道均可以分配到碼長進行編碼,降低了理論膨脹率。
相對應地,本申請實施例還提供一種圖像解碼方法,在上述S401至S404或者S501至S505的基礎上,該方法還可以包括:解碼端基於碼流緩衝區的剩餘大小、以及目標像素深度BPP,確定編碼單元的目標解碼碼長;目標解碼碼長用於指示解碼編碼單元的碼流所需的碼長;解碼端基於解碼碼長;確定多個通道的分配碼長;分配碼長用於指示解碼多個通道的編碼塊的碼流的殘差所需的碼長;解碼端根據分配碼長在多個通道的平均值,確定多個通道各自分配的解碼碼長。
三、幀內塊複製(Intra block copy,IBC)模式修改。
可選的實施方案:模式標識CU級,BV(Block Vector)也是CU級,模式標識和BV均在亮度傳輸
改進方案:模式標識改為CB級別,BV依然是CU級別,各通道均傳輸模式標識,各通道均傳輸BV。
實施例四:
圖17為本申請實施例提供的又一種圖像編碼方法的流程示意圖。如圖17所示,該方法包括S701至S704。
S701、編碼端獲取編碼單元。
其中,編碼單元包括多個通道的編碼塊。
S702、編碼端按照IBC模式對多個通道中的至少一個通道的編碼塊進行編碼。
在一實施例中,S702可以具體包括:編碼端使用率失真優化決策確定出該至少一個通道的目標編碼模式。
其中,目標編碼模式包括IBC模式。率失真優化決策可以參照上述策略3所述,此處不再贅述。
S703、編碼端獲取參考預測塊的BV。
其中,參考預測塊的BV用於指示參考預測塊在已編碼的圖像塊中的位置。參考預測塊用於表徵按照IBC模式編碼的編碼塊的預測值。
S704、編碼端在至少一種通道的編碼塊經IBC模式編碼得到的至少一個子流中編碼參考預測塊的BV。
在一實施例中,對於每個通道的編碼塊的參考預測塊的BV,該BV可以全部在亮度通道對應的子流中編碼。
在一實施例中,對於每個通道的編碼塊的參考預測塊的BV,該BV也可以全部在色度的某一個通道(例如第一色度通道或者第二色度通道)對應的子流中編碼,或者,在兩個色度通道對應的子流中平分該BV的個數進行編碼,若無法平分,則編碼端可以在任意一個色度通道對應的子流中多編碼一個BV。
在一實施例中,對於每個通道的編碼塊的參考預測塊的BV,該BV也可以平分在不同通道的編碼塊對應的子流中編碼,若無法平分,則編碼端可以按照預設比例進行分配。例如,以BV的個數為8個為例,則預設比例可以是Y通道:U通道:V通道=2:3:3,或者Y通道:U通道:V通道=4:2:2等。本申請實施例對預設比例的具體數值不作限制。在這種情況下,上述S602可以具體包括:按照IBC模式對多個通道的編碼塊進行編碼;上述S704可以具體包括:在多個通道中的每一種通道的編碼塊經IBC模式編碼得到的子流中編碼參考預測塊的BV。
在一實施例中,參考預測塊的BV包括多個。上述在多個通道中的每一個通道的編碼塊經IBC模式編碼得到的子流中編碼參考預測塊的BV,可以包括:按照預設比例在多個通道中的每一個通道的編碼塊經IBC模式編碼得到的碼流中編碼參考預測塊的BV。
應理解,亮度通道對應的子流的位元數通常較大,色度通道對應的子流的位元數通常較小。本申請實施例通過在採用IBC模式進行編碼時,在至少一個通道的編碼塊對應的子流中進行傳輸參考預測塊的BV,可以在位元數較小的色度通道對應的子流中增加傳輸資料,從而提高上述計算理論膨脹率的公式中的分母,從而減小理論膨脹率。
在一實施例中,CU在編碼過程中會產生頭資訊,該CU的頭資訊也可以按照上述分配BV的方式分配編碼在子流中。
相對應地,本申請實施例還提供一種圖像解碼方法。圖18為本申請實施例提供的又一種圖像解碼方法的流程示意圖。如圖18所示,該方法包括S801至S804。
S801、解碼端解析對編碼單元編碼後的碼流。
其中,編碼單元包括多個通道的編碼塊;碼流包括多個通道的編碼塊編碼後的、與多個通道一一對應的多個子流。
S802、解碼端基於從多個子流中的至少一個子流中解析到的參考預測塊的塊向量BV,在多個子流中確定出參考預測塊的位置。
S803、解碼端基於參考預測塊的位置資訊,確定按照IBC模式進行解碼的解碼塊的預測值。
S804、解碼端基於預測值,對按照IBC模式進行解碼的解碼塊進行重建。
S803和S804可以參照上述視訊編解碼系統處所述,此處不再贅述。
在一實施例中,對於每個通道的編碼塊的參考預測塊的BV,編碼端可以全部在亮度通道對應的子流中解析。
在一實施例中,對於每個通道的編碼塊的參考預測塊的BV,該BV也可以全部在色度的某一個通道(例如第一色度通道或者第二色度通道)對應的子流中解析,或者,在兩個色度通道對應的子流中平分該BV的個數進行解析,若無法平分,則編碼端可以在任意一個色度通道對應的子流中多解析一個BV。
在一實施例中,對於每個通道的編碼塊的參考預測塊的BV,該BV也可以平分在不同通道的編碼塊對應的子流中解析,若無法平分,則解碼端可以按照預設比例進行分配。例如,以BV的個數為8個為例,則預設比例可以是Y通道:U通道:V通道=2:3:3,或者Y通道:U通道:V通道=4:2:2等。本申請實施例對預設比例的具體數值不作限制。
在一實施例中,按照IBC模式進行進行編碼的編碼塊包括至少兩個通道的編碼塊;至少兩個通道的編碼塊共用參考預測塊的BV。
在一實施例中,該方法還可以包括:當從多個子流中的任意一個子流中解析出IBC模式標識時,解碼端確定該多個子流對應的目標解碼模式為IBC模式。
在一實施例中,該方法還可以包括:解碼端從多個子流中逐個解析IBC模式標識,確定多個子流中解析出IBC模式標識的子流所對應的目標解碼模式為IBC模式。
基於上述實施例四的理解,以多個通道包括亮度(Y)通道、第一色度(U)通道、以及第二色度(V)通道為例,對IBC模式的改進方案中主要包括的兩個方案進行介紹:
方案1:
編碼端:
步驟1、基於多通道來獲取參考預測塊,即對於一個多通道的編碼單元而言,將搜索區域中某一個位置的多通道作為當前多通道的編碼單元下的參考預測塊,將這個位置記為BV,即多通道共用一個BV。若輸入圖像為YUV400則只有一個通道,否則有3個通道。得到預測塊後,計算每個通道下的殘差,對殘差進行(變換)量化,反量化(反變換)後完成重建。
步驟2、在亮度通道上編碼輔助資訊(包括編碼塊複雜度等級等資訊),模式資訊,以及編碼亮度通道量化後的係數。
步驟3、若存在色度通道,在色度通道上編碼輔助資訊(包括編碼塊複雜度等資訊),以及編碼色度通道量化後的係數。
3.1、對於每個編碼單元的參考預測塊的BV,可以全部在亮度通道上編碼。
3.2、對於每個編碼單元的參考預測塊的BV,也可以全部在色度某一個通道上編碼,或者在色度兩個通道上平分BV進行編碼,若無法平分,則某一個色度通道多編部分BV。
3.3、對於每個編碼單元的參考預測塊的BV,也可以平分BV分別在不同分量上編碼。若無法平分,則按照預設比例進行分配。
解碼端:
步驟1、解析亮度通道的編碼塊的輔助資訊以及模式資訊,解析亮度通道下量化後的係數。
步驟2、若存在色度通道,解析U通道的編碼塊的輔助資訊,若亮度通道預測模式為IBC模式,則當前色度通道的預測模式不需要解析直接預設為IBC模式,解析當前色度通道下量化後的係數。
步驟3、對於BV的解析,與編碼端一直,也即:
3.1、對於每個編碼單元的參考預測塊的BV,可以全部在亮度通道上解析。
3.2、對於每個解析單元的參考預測塊的BV,也可以全部在色度某一個通道上解析,或者在色度兩個通道上平分BV進行解析,若無法平分,則某一個色度通道多編部分BV。
3.3、對於每個解析單元的參考預測塊的BV,也可以平分BV分別在不同分量上解析。若無法平分,則按照預設比例進行分配。
步驟4、根據三通道共用的BV,得到每個通道下每個編碼塊的預測值,將每個通道下解析得到的係數進行反量化(反變換)得到殘差值,根據殘差值和預測值對每個編碼塊完成重建。
方案2:
編碼端:
步驟1、同一個編碼單元,即三通道下每種IBC模式只需要訓練得到一組BV,這組BV可以是基於三通道的搜索區域以及原始值得到,可以基於其中一個通道的搜索區域以及原始值得到,或基於其中任意兩個通道的搜索區域以及原始值計算得到。
步驟2、對於每個通道的編碼塊,使用率失真代價決策出目標編碼模式,其中IBC模式下三通道的BV使用步驟1中計算得到的BV。可以允許在某一個分量選擇IBC模式後,其他分量不選擇IBC模式。
步驟3、對於每個通道的編碼塊,都需要編碼自身的最優模式,若有一個或多個通道的目標模式選擇了IBC模式,那麼BV可以基於某一個選擇IBC模式的通道進行編碼,也可以基於某兩個選擇IBC的通道平分BV個數進行編碼,也可以基於所有選擇IBC模式的通道平分BV個數進行編碼,對於無法整除BV個數時,按照預設比例分配。
解碼端:
每個通道都解析一個目標模式,若解析到有一個或多個通道的目標模式選擇了IBC模式(只能選擇同一種IBC模式),那麼BV解析與編碼端BV編碼的分配方案一致。
四、係數分組。
可選的實施方案:如圖1中的流程圖所示,編碼過程中可能存在殘差跳過模式,若編碼端在編碼時選擇該跳過模式,編碼時就不需要編碼殘差了,只需要編碼1位元的資料來表示殘差跳過即可。
改進方案:對處理係數(殘差係數,和/或,變換係數)進行分組。
實施例五:
圖19為本申請實施例提供的又一種圖像編碼方法的流程示意圖。如圖19所示,該圖像編碼方法包括S901至S902。
S901、編碼端獲取編碼單元對應的處理係數。
其中,處理係數包括殘差係數和變換係數中的一項或多項。
S902、編碼端按照個數閾值將處理係數分為多組。
其中,個數閾值可以預設在編碼端中。個數閾值與編碼塊的尺寸相關。例如,對於16×2的編碼塊來說,個數閾值可以設置為16。多組處理係數中的每組處理係數的個數小於或等於個數閾值。
應理解,與可選的實施方案中的殘差跳過模式相比,本申請實施例提供的圖像編碼方法在編碼時可以將處理係數進行分組,分組後的每一組處理係數在傳輸時均需要添加該組處理係數的頭部資訊來描述該組處理係數的詳細情況,與目前的利用1位元的資料來表示殘差跳過相比,增加了理論膨脹率的計算公式中的分母,降低了理論膨脹率。
相對應地,本申請實施例還提供一種圖像解碼方法。圖20為本申請實施例提供的又一種圖像解碼方法的流程示意圖。如圖20所示,該圖像解碼方法包括S1001至S1002。
S1001、解碼端解析對編碼單元編碼後的碼流,確定編碼單元對應的處理係數。
其中,處理係數包括殘差係數和變換係數中的一項或多項;處理係數包括多組;每組處理係數的個數小於或等於個數閾值。
S1002、解碼端基於處理係數對碼流進行解碼。
S1002可以參照上述視訊編解碼系統處所述,此處不再贅述。
五、複雜度傳輸。
可選的實施方案:編碼單元包括亮度通道的編碼塊、第一色度通道的編碼塊、以及第二色度通道的編碼塊。亮度通道的編碼塊對應的子流為第一子流,第一色度通道的編碼塊對應子流為第二子流,第二色度通道的編碼塊對應的子流為第三子流。第一子流用1或3位元傳輸亮度通道的複雜度等級,第二子流中用1或3位元傳輸兩個色度通道的平均值,第三子流中不傳輸複雜度等級。
例如,CU級複雜度的計算方式為: if (image_format == ‘000’) {  /* YUV400 */ CuComplexityLevel = ComplexityLevel[0] } else if (image_format == ‘001’) {  /* YUV420 */ CuComplexityLevel = ComplexityDivide3Table[ComplexityLevel[1] + (ComplexityLevel[0] << 1)] } else if (image_format == ‘010’) {  /* YUV422 */ CuComplexityLevel = (ComplexityLevel[0] + ComplexityLevel[1]) >> 1 } else if (image_format == ‘011’ || image_format == ‘100’) {  /* YUV444 or RGB444 */ CuComplexityLevel = ComplexityDivide3Table[ComplexityLevel[0] + (ComplexityLevel[1] << 1)] }
根據亮度通道的複雜度等級ComplexityLevel[0]、色度通道的複雜度等級ComplexityLevel[1]查表得到BiasInit,然後計算亮度通道的量化參數Qp[0]、以及兩個色度通道的量化參數Qp[1],Qp[2]。
其中,查表的表格可以參照下述表1所示,此處不再贅述。
以第一子流為例,第一子流的具體實現如下: complexity_level_flag[0]      u(1) if (ComplexityLevelFlag[0] == 0) { delta_level[0]     u(2) if (delta_level[0] >= PrevComplexityLevel) { ComplexityLevel[0] = DeltaLevel[0] + 1 } else { ComplexityLevel[0] = DeltaLevel[0] } } else { ComplexityLevel[0] = PrevComplexityLevel } PrevComplexityLevel = ComplexityLevel[0]
其中,complexity_level_flag[0]為亮度通道複雜度的等級更新標誌,是一個二值變數。值為‘1’表示編碼單元的亮度通道需要更新複雜度等級;值為‘0’表示編碼單元的亮度通道不需要更新複雜度等級。ComplexityLevelFlag[0]的值等於complexity_level_flag[0]的值。delta_level[0]為亮度通道複雜度等級變化量,是2位不帶正負號的整數。確定亮度複雜度等級的變化量。DeltaLevel[0]的值等於delta_level[0]的值。如果碼流中不存在delta_level[0],DeltaLevel[0]的值等於0。PrevComplexityLevel表示前一個編碼單元的亮度通道的複雜度等級;ComplexityLevel[0]表示亮度通道的複雜度等級。
改進方案:在第三子流中增加傳輸複雜度資訊。
實施例六
圖21為本申請實施例提供的又一種圖像編碼方法的流程示意圖。如圖20所示,該圖像編碼方法包括S1101至S1103。
S1101、編碼端獲取編碼單元。
其中,編碼單元包括P個通道的編碼塊,P為大於或等於2的整數。
S1102、編碼端獲取P個通道中每個通道的編碼塊的複雜度資訊。
其中,複雜度資訊用於表徵每個通道的編碼塊的像素值的差異程度。例如,以P個通道包括亮度通道、第一色度通道、以及第二色度通道為例,則亮度通道的編碼塊的複雜度資訊用於表徵亮度通道的編碼塊的像素值的差異程度;第一色度通道的編碼塊的複雜度資訊用於表徵第一色度通道的編碼塊的像素值的差異程度;第二色度通道的編碼塊的複雜度資訊用於表徵第二色度通道的編碼塊的像素值的差異程度;
S1103、編碼端在P個通道的編碼塊編碼得到的子流中編碼每個通道的編碼塊的複雜度資訊。
在一實施例中,S1103可以具體包括:編碼端在P個通道的編碼塊編碼得到的子流中各自編碼每個通道的編碼塊的複雜度等級。
示例性地,以第一色度分量對應的第二子流為例,第二子流具體實現如下: complexity_level_flag[1] if (ComplexityLevelFlag[1] == 1) { delta_level[1] if (delta_level[1] >= ComplexityLevel[0]) { ComplexityLevel[1] = DeltaLevel[1] + 1 } else { ComplexityLevel[1] = DeltaLevel[1] } } else { ComplexityLevel[1] = ComplexityLevel[0] }
其中,complexity_level_flag[1]表示第一色度通道複雜度等級更新標誌,是二值變數,值為‘1’表示編碼單元的第一色度通道的編碼塊的複雜度等級與亮度通道的編碼塊的複雜度等級一致;值為‘0’表示編碼單元的第一色度通道的編碼塊的複雜度等級與亮度通道的編碼塊的複雜度等級不一致。ComplexityLevelFlag[1]的值等於complexity_level_flag[1]的值。delta_level[1]表示第一色度通道複雜度等級變化量,是2位不帶正負號的整數,確定第一色度通道的編碼塊的複雜度等級的變化量。DeltaLevel[1]的值等於delta_level[1]的值。如果碼流中不存在delta_level[1],DeltaLevel[1]的值等於0。ComplexityLevel[1]表示第一色度通道的編碼塊的複雜度等級。
示例性地,以第二色度分量對應的第三子流為例,第三子流具體實現如下: complexity_level_flag[2] if (ComplexityLevelFlag[2] == 1) { delta_level[2] if (delta_level[2] >= ComplexityLevel[1]) { ComplexityLevel[2] = DeltaLevel[2] + 1 } else { ComplexityLevel[2] = DeltaLevel[2] } } else { ComplexityLevel[2] = ComplexityLevel[1] }
其中,complexity_level_flag[2]表示第二色度通道複雜度等級更新標誌,是二值變數,值為‘1’表示編碼單元的第二色度通道的編碼塊的複雜度等級與第一色度通道的編碼塊的複雜度等級一致;值為‘0’表示編碼單元的第二色度通道的編碼塊的複雜度等級與第一色度通道的編碼塊的複雜度等級不一致。ComplexityLevelFlag[2]的值等於complexity_level_flag[2]的值。delta_level[2]表示第二色度通道複雜度等級變化量,是2位不帶正負號的整數,確定第二色度通道的編碼塊的複雜度等級的變化量。DeltaLevel[2]的值等於delta_level[2]的值。如果碼流中不存在delta_level[2],DeltaLevel[2]的值等於0。ComplexityLevel[2]表示第二色度通道的編碼塊的複雜度等級。
在一實施例中,複雜度資訊包括複雜度等級和第一參考係數,第一參考係數用於表徵不同通道的編碼塊的複雜度等級之間的比例關係。S1103可以具體包括:編碼端在P個通道中的Q個通道的編碼塊編碼得到的子流中各自編碼Q個通道的編碼塊的複雜度等級;Q為小於P的整數;編碼端在P個通道中的P-Q個通道的編碼塊編碼得到的子流中編碼第一參考係數。
例如,以P個通道包括亮度通道、第一色度通道、以及第二色度通道為例,則亮度通道的編碼塊的複雜度資訊為亮度通道的編碼塊的複雜度等級;第一色度通道的編碼塊的複雜度資訊為第一色度通道的編碼塊的複雜度等級;第二色度通道的編碼塊的複雜度資訊為參考係數;參考係數用於表徵第一色度通道的編碼塊的複雜度等級和第二色度通道的編碼塊的複雜度等級之間的比例關係。
例如,將上述變數complexity_level_flag[2]的賦值含義進行改變,值為‘1’表示編碼單元的第二色度通道的編碼塊的複雜度等級比第一色度通道的編碼塊的複雜度等級大;值為‘0’表示編碼單元的第二色度通道的編碼塊的複雜度等級比第一色度通道的編碼塊的複雜度等級小或者相等。ComplexityLevelFlag[2]的值等於complexity_level_flag[2]的值。
在一實施例中,複雜度資訊包括複雜度等級、參考複雜度等級、以及第二參考係數;參考複雜度等級包括以下任意一項:第一複雜度等級、第二複雜度等級、以及第三複雜度等級;第一複雜度等級為P個通道中的P-Q個通道的編碼塊的複雜度等級中的最大值;Q為小於P的整數;第二複雜度等級為P個通道中P-Q個通道的編碼塊的複雜度等級中的最小值;第三複雜度等級為P個通道中的P-Q個通道的編碼塊的複雜度等級中的平均值;第二參考係數用於表徵P個通道中的P-Q個通道的編碼塊的複雜度等級之間的大小關係,和/或,比例關係。在這種情況下,上述S1103可以具體包括:編碼端在P個通道中的Q個通道的編碼塊編碼得到的子流中各自編碼Q個通道的編碼塊的複雜度等級;編碼端在P個通道中的P-Q個通道的編碼塊編碼得到的子流中編碼參考複雜度等級和第二參考係數。
例如,以P個通道包括亮度通道、第一色度通道、以及第二色度通道為例,則亮度通道的編碼塊的複雜度資訊為亮度通道的編碼塊的複雜度等級;第一色度通道的編碼塊的複雜度資訊為參考複雜度等級;參考複雜度等級包括以下任意一項:第一複雜度等級、第二複雜度等級、以及第三複雜度等級;第一複雜度等級為第一色度通道的編碼塊的複雜度等級和第二色度通道的編碼塊的複雜度等級中的最大值;第二複雜度等級為第一色度通道的編碼塊的複雜度等級和第二色度通道的編碼塊的複雜度等級中的最小值;第三複雜度等級為第一色度通道的編碼塊的複雜度等級和第二色度通道的編碼塊的複雜度等級的平均值;第二色度通道的編碼塊的複雜度資訊為參考係數;參考係數用於表徵第一色度通道的編碼塊的複雜度等級和第二色度通道的編碼塊的複雜度等級之間的大小關係,和/或,比例關係。
應理解,可選的實施方案中第二色度通道的編碼塊對應的第三子流中並不傳輸複雜度資訊。本申請實施例提供的圖像編碼方法通過在第三子流中增加編碼複雜度資訊,增加了位元數較小的子流中的位元數,從而提高了上述理論膨脹率計算公式中的分母,降低了理論膨脹率。
相對應地,本申請實施例還提供了一種圖像解碼方法。圖2為本申請實施例提供的又一種圖像解碼方法。如圖2所示,該解碼方法包括S1201至S1204。
S1201、解碼端解析對編碼單元編碼後的碼流。
其中,編碼單元包括P個通道的編碼塊;P為大於或等於2的整數;碼流包括P個通道的編碼塊編碼後的、與P個通道一一對應的多個子流。
S1202、解碼端在P個通道的編碼塊編碼得到的子流中解析每個通道的編碼塊的複雜度資訊。
在一實施例中,S1202可以具體包括:解碼端在P個通道的編碼塊編碼得到的子流中各自解析每個通道的編碼塊的複雜度等級。
S1203、解碼端基於每個通道的編碼塊的複雜度資訊,確定每個通道的編碼塊的量化參數。
S1204、解碼端基於每個通道的編碼塊的量化參數,對碼流進行解碼。
在一實施例中,當每個通道對應的子流中均傳輸了各個通道的複雜度等級時,CU級別的複雜度等級(CuComplexityLevel)可以按照下述過程進行計算: if (image_format == ‘000’) {  /* YUV400 */ CuComplexityLevel = ComplexityLevel[0] } else if (image_format == ‘001’) {  /* YUV420 */ CuComplexityLevel = ComplexityDivide3Table[((ComplexityLevel[0] << 2) + ComplexityLevel[1] + ComplexityLevel[2]) >> 1] } else if (image_format == ‘010’) {  /* YUV422 */ CuComplexityLevel = ((ComplexityLevel[0] << 1) + ComplexityLevel[1] + ComplexityLevel[2]) >> 2 } else if (image_format == ‘011’ || image_format == ‘100’) {  /* YUV444 or RGB444 */ CuComplexityLevel = ComplexityDivide3Table[ComplexityLevel[0] + ComplexityLevel[1] + ComplexityLevel[2]] }
其中,ComplexityDivide3Table的定義為:ComplexityDivide3Table = { 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4 }; image_format表示編碼單元所在的待處理圖像的圖像格式。
在一實施例中,如上所述,複雜度資訊包括複雜度等級和第一參考係數;第一參考係數用於表徵不同通道的編碼塊的複雜度等級之間的比例關係。在這種情況下,S1202可以具體包括:解碼端在P個通道中的Q個通道的編碼塊編碼得到的子流中各自解析Q個通道的編碼塊的複雜度等級;Q為小於P的整數;解碼端在P個通道中的P-Q個通道的編碼塊編碼得到的子流中解析第一參考係數;解碼端基於第一參考係數、以及Q個通道的編碼塊的複雜度等級,確定P-Q個通道的編碼塊的複雜度等級。
在一實施例中,當存在子流中沒有傳輸複雜度等級時(也即上述第三子流中傳輸大小關係時),CU級別的複雜度等級(CuComplexityLevel)可以按照下述過程進行計算: if (image_format == ‘000’) {  /* YUV400 */ CuComplexityLevel = ComplexityLevel[0] } else if (image_format == ‘001’) {  /* YUV420 */ CuComplexityLevel = ComplexityDivide3Table[ChromaComplexityLevel + (ComplexityLevel[0] << 1)] } else if (image_format == ‘010’) {  /* YUV422 */ CuComplexityLevel = (ComplexityLevel[0] + ChromaComplexityLevel) >> 1 } else if (image_format == ‘011’ || image_format == ‘100’) {  /* YUV444 or RGB444 */ CuComplexityLevel = ComplexityDivide3Table[ComplexityLevel[0] + (ChromaComplexityLevel << 1)] }
其中ChromaComplexityLevel表示色度通道的複雜度等級。
對於ChromaComplexityLevel在編碼端需要單獨計算(解碼端直接從碼流中獲取)。
ChromaComplexityLevel = (ComplexityLevel[1] + ComplexityLevel[2]) >> 1或者ChromaComplexityLevel = max(ComplexityLevel[1], ComplexityLevel[2])或者ChromaComplexityLevel = min(ComplexityLevel[1], ComplexityLevel[2])或者ChromaComplexityLevel = ComplexityLevel[1]或者ChromaComplexityLevel = ComplexityLevel[2]。
在一實施例中,如上所述,複雜度資訊包括複雜度等級、參考複雜度等級、以及第二參考係數;參考複雜度等級包括以下任意一項:第一複雜度等級、第二複雜度等級、以及第三複雜度等級;第一複雜度等級為P個通道中的P-Q個通道的編碼塊的複雜度等級中的最大值;Q為小於P的整數;第二複雜度等級為P個通道中P-Q個通道的編碼塊的複雜度等級中的最小值;第三複雜度等級為P個通道中的P-Q個通道的編碼塊的複雜度等級中的平均值;第二參考係數用於表徵P個通道中的P-Q個通道的編碼塊的複雜度等級之間的大小關係,和/或,比例關係。在這種情況下,上述S1202可以具體包括:解碼端在P個通道中的Q個通道的編碼塊編碼得到的子流中各自解析Q個通道的編碼塊的複雜度等級;解碼端在P個通道中的P-Q個通道的編碼塊編碼得到的子流中解析參考複雜度等級和第二參考係數;解碼端基於Q個通道的編碼塊的複雜度等級。以及第二參考係數,確定P-Q個通道的編碼塊的複雜度等級。
在一實施例中,當每個通道對應的子流中均傳輸了各個通道的複雜度等級時,解碼端可以根據亮度通道的編碼塊的複雜度等級ComplexityLevel[0]與第一色度通道的編碼塊的複雜度等級ComplexityLevel[1]查下述表2得到BiasInit1,根據亮度通道的編碼塊的複雜度等級ComplexityLevel[0]與第二色度通道的編碼塊的複雜度等級ComplexityLevel[2]查下述表2得到BiasInit2,然後計算亮度通道的量化參數Qp[0]、第一色度分倆的量化參數Qp[1]、以及第二色度通道的量化參數Qp[2]。
例如,解碼端可以按照下述過程計算量化參數: Bias1 = (BiasInit1 × FormatBias) >> 1 Bias2 = (BiasInit2 × FormatBias) >> 1 tmp = (ChromaSampleRate >> 1) × (Bias1 + Bias2) tmp = ((tmp << 7) + 256) >> 9 Qp[0] = Clip3(0, MaxQp[0], (MasterQp – tmp) >> 7) Qp[1] = Clip3(0, MaxQp[1], (MasterQp + Bias1) >> 7) Qp[2] = Clip3(0, MaxQp[2], (MasterQp + Bias2) >> 7)
表1 ChromaSampleRate,FormatBias與ImageFormat的對應關係
ImageFormat YUV400 YUV420 YUV422 RGB444 YUV444
ChromaSampleRate 0 2 4 8 8
FormatBias 0 114 85 128 57
表2 BiasInit的定義
ComplexityLevel[0] 0
ComplexityLevel[1/2] 0 1 2 3 4
BiasInit 6 6 7 8 9
ComplexityLevel[0] 1
ComplexityLevel[1/2] 0 1 2 3 4
BiasInit 6 6 6 7 8
ComplexityLevel[0] 2
ComplexityLevel[1/2] 0 1 2 3 4
BiasInit 4 6 6 6 7
ComplexityLevel[0] 3
ComplexityLevel[1/2]
BiasInit 2 4 6 6 6
ComplexityLevel[0] 4
ComplexityLevel[1/2] 0 1 2 3 4
BiasInit 0 2 4 6 6
在一實施例中,解碼端還可以根據色度通道的編碼塊的複雜度等級ComplexityLevel[0]與色度通道的編碼塊的複雜度等級ChromaComplexityLevel查表2得到BiasInit,然後通過下述過程計算得到Qp[0]、Qp[1]、以及Qp[2]。 Bias = (BiasInit × FormatBias) >> 1 tmp = ChromaSampleRate × Bias tmp = ((tmp << 7) + 128) >> 8 Qp[0] = Clip3(0, MaxQp[0], (MasterQp – tmp) >> 7) Qp[1] = Clip3(0, MaxQp[1], (MasterQp + Bias) >> 7) Qp[2] = Qp[1] Qp[1] = Clip3(0, MaxQp[1], Qp[1] + ComplexityLevel[1] - ChromaComplexityLevel) Qp[2] = Clip3(0, MaxQp[2], Qp[2] + ComplexityLevel[2] - ChromaComplexityLevel)
在一實施例中,如上所述,第一色度通道的編碼塊對應的子流可以傳輸第一複雜度等級和第二複雜度等級,在這種情況下,解碼端可以根據亮度通道的編碼塊的複雜度等級ComplexityLevel[0]、以及色度通道的編碼塊的複雜度等級ChromaComplexityLevel(取第一複雜度等級/第一色度通道的編碼塊的複雜度等級)查表2得到BiasInit,然後通過下述過程計算得到Qp[0]、Qp[1]、以及Qp[2]。 Bias = (BiasInit × FormatBias) >> 1 tmp = ChromaSampleRate × Bias tmp = ((tmp << 7) + 128) >> 8 Qp[0] = Clip3(0, MaxQp[0], (MasterQp – tmp) >> 7) if (0 == complexity_level_flag[2]) { Qp[1] = Clip3(0, MaxQp[1], (MasterQp + Bias) >> 7) Qp[2] = Clip3(0, MaxQp[2], (MasterQp + Bias - 32) >> 7) } else if (1 == complexity_level_flag[2]) { Qp[1] = Clip3(0, MaxQp[1], (MasterQp + Bias - 32) >> 7) Qp[2] = Clip3(0, MaxQp[2], (MasterQp + Bias) >> 7) }
在一實施例中,如上所述,第一色度通道的編碼塊對應的子流可以通過傳輸第三複雜度等級,在這種情況下,上述ChromaComplexityLevel可以取第三複雜度等級,並通過下述過程計算得到Qp[0]、Qp[1]、以及Qp[2]。 Bias = (BiasInit × FormatBias) >> 1 tmp = ChromaSampleRate × Bias tmp = ((tmp << 7) + 128) >> 8 Qp[0] = Clip3(0, MaxQp[0], (MasterQp – tmp) >> 7) Qp[1] = Clip3(0, MaxQp[1], (MasterQp + Bias) >> 7) Qp[2] = Qp[1] if (0 == complexity_level_flag[2]) { Qp[1] = Clip3(0, MaxQp[1], Qp[1] + 2) } else if (1 == complexity_level_flag[2]) { Qp[2] = Clip3(0, MaxQp[2], Qp[2] + 1) }
六、色度通道共用子流。
可選的實施方案:對於YUV420/YUV422格式的待處理圖像,一共傳輸三個子流,第一子流、第二子流、以及第三子流。其中,第一子流中包括亮度通道的語法元素和變換係數/殘差係數,第二子流中包括第一色度通道的語法元素和變換係數/殘差係數,第三子流中包括第二色度通道的語法元素和變換係數/殘差係數。
改進方案:對於YUV420/YUV422格式的待處理圖像,將第一色度通道的語法元素和變換係數/殘差係數、以及第二色度通道的語法元素和變換係數/殘差係數放在第二子流中傳輸,取消第三子流。
實施例七:
圖22為本申請實施例提供的又一種圖像編碼方法的流程示意圖。如圖22所示,該圖像編碼方法包括S1201至S1203。
S1201、編碼端獲取編碼單元。
其中,編碼單元為待處理圖像中的圖像塊。編碼單元包括多個通道的編碼塊。
S1202、當待處理圖像的圖像格式為預設格式時,則編碼端將多個通道中的至少兩個預設通道的編碼塊編碼得到的子流合併為一個合併子流。
其中,預設格式可以預設在編/解碼端中,例如,預設格式可以為YUV420或者YUV422等,預設通道可以為第一色度通道和第二色度通道。示例性地,第一子流的編碼塊的定義可以如下述所示: coding_block_data_substream0(cuIdxX, cuIdxY) { complexity_level_flag[0] if (ComplexityLevelFlag[0] = 0) { delta_level[0] } pred_mode[0] if (PredMode[0] == ‘ORG_MODE’ && Allowfallback) { fallback_type } if (PredMode[0] == ‘IBC_MODE’) { for (blkIdx=0; blkIdx<8; blkIdx++) { abs_bvd_minus1[blkIdx] } } if (PredMode[0] != ‘POINT_MODE_0’ && PredMode[0] != ‘POINT_MODE_1’ && PredMode[0] != ‘ORG_MODE’ && !FallbackFlag) { resi_skip[0] } if (ResiSkip[0] != 1) { residual_data(0) } }
示例性地,第二子流的編碼塊的定義可以如下述所示: coding_block_data_substream1(cuIdxX, cuIdxY) { complexity_level_flag[1] if (ComplexityLevelFlag[1] == 1) { delta_level[1] } if (PredMode[0] != ‘IBC_MODE’) { pred_mode[1] } if (image_format == ‘001’) { YUV420 */ residual_data(1) } else if (image_format == ‘010’) { /* YUV422 */ residual_data(1) } else if (image_format == ‘011’ || image_format == ‘100’) { /* YUV444 or RGB444 */ if (PredMode[1] != ‘POINT_MODE_0’ && PredMode[1] != ‘POINT_MODE_1’ && PredMode[1] != ‘ORG_MODE’ && !Fallback) { resi_skip[1] } if (ResiSkip[1] != 1) { residual_data(1) } } if (PredMode[0] != ‘IBC_MODE’) { pred_mode[2] } if (image_format == ‘001’) { /* YUV420 */ residual_data(2) } else if (image_format == ‘010’) { /* YUV422 */ residual_data(2) } else if (image_format == ‘011’ || image_format == ‘100’) { /* YUV444 or RGB444 */ residual_data(2) } else if (image_format == ‘010’) { /* YUV422 */ if (PredMode[2] != ‘POINT_MODE_0’ && PredMode[2] != ‘POINT_MODE_1’ && PredMode[2] != ‘ORG_MODE’ && !Fallback) { resi_skip[2] } if (ResiSkip[2] != 1) { residual_data(2) } } }
應理解,兩個色度通道的語法元素和量化後的變換係數編碼後的位元數通常小於亮度通道,將兩個色度通道的語法元素融合在第二子流中傳輸,可以降低第一子流和第二子流之間的位元數差異,降低理論膨脹率。
相對應地,本申請實施例還提供一種圖像解碼方法,圖23為本申請實施例提供的又一種圖像解碼方法的流程示意圖,如圖23所示,該方法包括S1301至S1303。
S1301、解碼端解析對編碼單元編碼後的碼流。
S1302、解碼端確定合併子流。
其中,合併子流是當待處理圖像的圖像格式為預設格式時,將多個通道中的至少兩個預設通道的編碼塊編碼的到的子流合併得到的。
S1303、解碼端基於所述合併了至少兩個待合併子流,對碼流進行解碼。
七、子流填充。
改進方案:在位元數小於位元數閾值的子流中填充預設碼字。
實施例八:
圖24為本申請實施例提供的又一種圖像編碼方法的流程示意圖,如圖24所示,該方法包括S1401至S1402。
S1401、編碼端獲取編碼單元。
其中,編碼單元包括多個通道的編碼塊。
S1402、編碼端在滿足預設條件的目標子流中編碼預設碼字,直至目標子流不滿足預設條件。
其中,目標子流是多個子流中的子流。多個子流是對多個通道的編碼塊進行編碼得到的碼流。預設碼字可以是「0」或者其他碼字等。本申請實施例對此不作限制。
在一實施例中,預設條件包括:子流位元數小於預設的第一位元數閾值。
其中,第一位元數閾值可以預設在編/解碼端,或者,由編/解碼端在碼流中傳輸。本申請實施例對此不作限制。第一位元數閾值用於指示CU中允許的最小CB的位元數。
在一實施例中,預設條件包括:編碼單元的碼流中存在位元數小於預設的第二位元數閾值的經編碼的編碼塊。
其中,第二位元數閾值也可以預設在編/解碼端,或者,由編/解碼端在碼流中傳輸。本申請實施例對此不作限制。第二位元數閾值用於指示多個子流中允許的最小子流的位元數。
應理解,在位元數較小的子流中填充預設碼字,可以直接增加膨脹率的分母部分,從而降低編碼單元的實際膨脹率。
相對應地,本申請實施例還提供一種圖像解碼方法。圖25為本申請實施例提供的又一種圖像解碼方法的流程示意圖,如圖25所示,該圖像解碼方法包括S1501至S1503。
S1501、解碼端解析對編碼單元編碼後的碼流。
其中,編碼單元包括多個通道的編碼塊。
S1502、解碼端確定碼字數量。
其中,碼字數量用於指示在滿足預設條件的目標子流中編碼的預設碼字的數量。預設碼字是當存在滿足預設條件的目標子流時,編碼入目標子流中的。
S1503、解碼端基於碼字數量,對碼流進行解碼。
例如,解碼端可以基於碼字數量,將預設碼字刪除,對刪除了預設碼字之後的碼流進行解碼。
八、預設膨脹率。
改進方案:通過預設膨脹率作為閾值來控制當前的實際膨脹率。
實施例九:
圖26為本申請實施例提供的又一種圖像編碼方法的流程示意圖,如圖26所示,該圖像編碼方法包括S1601至S1603
S1601、編碼端獲取編碼單元。
其中,編碼單元包括多個通道的編碼塊。
S1602、編碼端基於預設膨脹率,確定多個通道的編碼塊中每個通道的編碼塊各自對應的目標編碼模式。
其中,預設膨脹率可以預設在編碼端和解碼端中。或者,預設膨脹率也可以由編碼端編碼入子流中傳輸至解碼端。本申請實施例對此不作限制。
S1603、編碼端按照目標編碼模式對每個通道的編碼塊進行編碼,以使得當前膨脹率小於或等於預設膨脹率。
在一實施例中,預設膨脹率包括第一預設膨脹率;當前膨脹率等於最大子流的位元數與最小子流的位元數之商;最大子流為對多個通道的編碼塊進行編碼得到的多個子流中,位元數最大的子流;最小子流為對多個通道的編碼塊進行編碼得到的多個子流中,位元數最小的子流。
在一實施例中,如上所述,編碼端可以預設一個第一預設膨脹率作為編碼單元內允許的最大閾值,在對編碼單元編碼前可以獲取當前所有子流狀態,獲取已發送的最多固定長度碼流的子流,加上當前子流中剩餘量的總量最大的子流狀態、以及已發送的最少固定長度碼流的子流,加上當前子流中剩餘總量的最小的子流狀態。若最大狀態與最小狀態的比值,或者差值大於預設的差值閾值,則編碼端可以不再使用率失真優化作為目標模式的選擇準則,僅為最大狀態的子流選擇碼流較低的編碼模式,最小狀態的子流選擇碼率較高的模式。
示例性地,以預設膨脹率為B_th,同時設置B_delta作為輔助閾值,Y/U/V三個通道的編碼塊編碼得到三個子流,在編碼一個編碼單元式,編碼端可以獲取該三個子流的狀態,若第一子流(Y通道對應的子流)對應的碼率最大設為bit_stream1,且第二子流(U通道對應的子流)對應的碼率最小設為bit_stream1,則當bit_stream1/ bit_stream2> B_th-B_delta時,編碼端可以為Y通道的編碼塊選擇碼率較大的模式,為U通道的編碼塊選擇碼率較小的模式。
在一實施例中,預設膨脹率包括第二預設膨脹率;當前膨脹率等於經編碼的多個通道的編碼塊中,位元數最大的編碼塊的位元數和位元數最小的編碼塊的位元數之商。
在一實施例中,如上所述,編碼端可以預設一個第二預設膨脹率作為編碼單元內允許的最大閾值,在對某個編碼塊進行編碼之前,得到每個模式下的碼率代價。若根據率失真代價得到的最優碼率代價所對應的編碼模式滿足編碼每個子流的實際膨脹率小於預設膨脹率,則將該最優碼率代價對應的編碼模式作為該編碼塊的目標編碼模式,並將目標編碼模式編入該編碼塊對應的子流中;若最優碼率代價對應的編碼模式無法滿足編碼每個子流的實際膨脹率小於預設膨脹率,則編碼端將碼率最大的模式改為一個碼率小於該碼率最大的模式的碼率的模式,或者將碼率最小的模式改為一個碼率大於該碼率最小的模式的碼率的模式,或者同時將碼率最大的模式改為一個碼率小於該碼率最大的模式的碼率的模式,將碼率最小的模式改為一個碼率大於該碼率最小的模式的碼率的模式。
示例性地,以預設膨脹率為A_th為例,Y/U/V三個通道的編碼塊編碼得到三個子流。假設Y/U/V三個通道最優碼率代價分別為rate_y、rate_u、以及rate_v,且rate_y的碼率最大,rate_u的碼率最小。若rate_y/ rate_u≥A_th,則編碼端可以修改Y通道的目標編碼模式使其滿足碼率代價小於rate_y,或者修改U通道的目標編碼模式使其滿足碼率代價大於rate_u,以使得rate_y/ rate_u<A_th,且rate_y/rate_v<A_th。
本申請實施例提供的圖像編碼方法還可以通過預設膨脹率來干預為每個通道的編碼塊選擇的目標編碼模式,從而使得編碼端按照目標編碼模式編碼每個通道時,編碼單元的實際膨脹率小於預設膨脹率,從而減小了實際膨脹率。
在一實施例中,該圖像編碼方法還可以包括:編碼端確定當前膨脹率;當當前膨脹率大於第一預設膨脹率時,在最小子流中編碼預設碼字,以使得當前膨脹率小於或等於第一預設膨脹率。例如,編碼端可以在最小子流的末尾填充預設碼字。
在一實施例中,該圖像編碼方法還可以包括:編碼端確定當前膨脹;當當前膨脹率大於第二預設膨脹時,編碼端在位元數最小的編碼塊中編碼預設碼字,以使得當前膨脹率小於或等於第二預設膨脹率。
相對應地,本申請實施例還提供一種圖像解碼方法。圖27為本申請實施例提供的又一種圖像解碼方法的流程示意圖。如圖27所示,該方法包括S1701至S1703。
S1701、解碼端解析對編碼單元編碼後的碼流。
S1702、解碼端基於碼流,確定預設碼字的數量。
S1703、解碼端基於預設碼字的數量,對碼流進行解碼。
S1701至S1703可以參照上述S1501至S1503所述,此處不再贅述。
需要說明的是,上述以單獨的一系列實施例對本申請實施例提供的圖像編碼方法和圖像解碼方法進行了介紹。實際使用過程中,上述一系列實施例之間、以及實施例中的可選的方案之間等可以互相組合使用。本申請實施例對具體的組合不作限制。
上述主要從方法的角度對本申請實施例提供的方案進行了介紹。為了實現上述功能,其包含了執行各個功能相應的硬體結構和/或軟體模組。本領域技術目標應該很容易意識到,結合本文中所公開的實施例描述的各示例的單元及演算法步驟,本申請能夠以硬體或硬體和電腦軟體的結合形式來實現。某個功能究竟以硬體還是電腦軟體驅動硬體的方式來執行,取決於技術方案的特定應用和設計約束條件。專業技術目標可以對每個特定的應用來使用不同方法來實現所描述的功能,但是這種實現不應認為超出本申請的範圍。
在示例性的實施例中,本申請實施例還提供一種圖像編碼裝置,上述任一種圖像編碼方法都可以由該圖像編碼裝置執行。本申請實施例提供的圖像編碼裝置可以是上述源裝置10或視訊轉碼器102。
圖28為本申請實施例提供的圖像編碼裝置的組成示意圖。如圖28所示,該圖像編碼裝置包括獲取模組2801和處理模組2802。
在一實施例中,獲取模組2801,用於獲取編碼單元;編碼單元為待處理圖像中的圖像塊;編碼單元包括多個通道的編碼塊;多個通道包括第一通道;第一通道為多個通道中的任意一個通道。處理模組2802,用於按照第一編碼模式對第一通道的編碼塊進行編碼;第一編碼模式為按照第一定長碼對第一通道的編碼塊中的樣本值進行編碼的模式;第一定長碼的碼長小於或等於待處理圖像的圖像位元寬;圖像位元寬用於表徵存儲待處理圖像中每個樣本所需的位元位數。
在一實施例中,獲取模組2801,還用於獲取對編碼單元編碼後的碼流;編碼單元為待處理圖像中的圖像塊;編碼單元包括多個通道的編碼塊;多個通道包括第一通道;第一通道為多個通道中的任意一個通道;碼流包括多個通道的編碼塊編碼後的、與多個通道一一對應的多個子流。處理模組2802,還用於按照第一解碼模式對第一通道對應的子流進行解碼;第一解碼模式為按照第一定長碼從第一通道對應的子流解析樣本值的模式;第一定長碼的碼長小於或等於待處理圖像的圖像位元寬;圖像位元寬用於表徵存儲待處理圖像中每個樣本所需的位元數。
在一實施例中,獲取模組2801,還用於獲取編碼單元;編碼單元為待處理圖像中的圖像塊;編碼單元包括多個通道的編碼塊。處理模組2802,還用於確定第一總碼長;第一總碼長為多個通道的編碼塊均按照各自對應的目標編碼模式編碼後得到的的第一碼流的總碼長;目標編碼模式包括第一編碼模式;第一編碼模式為按照第一定長碼對編碼塊中的樣本值進行編碼的模式;第一定長碼的碼長小於或等於待處理圖像的圖像位元寬;圖像位元寬用於表徵存儲待處理圖像中每個樣本所需的位元位數;當第一總碼長大於或等於碼流緩衝區的剩餘大小時,將多個通道的編碼塊按照回退模式進行編碼;回退模式和第一編碼模式的模式標誌相同。
在一實施例中,處理模組2802,還用於在多個通道的編碼塊編碼得到的多個子流中編碼模式標誌;模式標誌用於指示多個通道的編碼塊各自採用的編碼模式。
在一實施例中,多個通道包括第一通道;第一通道為多個通道中的任意一個通道;處理模組2802,具體用於在第一通道的編碼塊編碼得到的子流中編碼子模式標誌;子模式標誌用於指示多個通道的編碼塊所採用的回退模式的種類。
在一實施例中,多個通道包括第一通道;第一通道為多個通道中的任意一個通道;處理模組2802,具體用於在第一通道的編碼塊編碼得到的子流中編碼第一標誌、第二標誌、以及第三標誌;第一標誌用於指示多個通道的編碼塊採用第一編碼模式或者回退模式編碼;第二標誌用於指示多個通道的編碼塊採用目標模式編碼,目標模式為第一編碼模式和回退模式中的任意一種;當第二標誌指示多個通道的編碼塊採用的目標模式為回退模式時,第三標誌用於指示多個通道的編碼塊採用的回退模式的種類。
在一實施例中,處理模組2802,還用於基於碼流緩衝區的剩餘大小、以及目標像素深度BPP,確定編碼單元的目標編碼碼長;目標編碼碼長用於指示編碼編碼單元所需的碼長;基於編碼碼長,確定多個通道的分配碼長;分配碼長用於指示編碼多個通道的編碼塊的殘差所需的碼長;根據分配碼長在多個通道的平均值,確定多個通道各自分配的編碼碼長。
在一實施例中,處理模組2802,還用於解析對編碼單元編碼後的碼流;編碼單元包括多個通道的編碼塊;若從多個通道的編碼塊編碼得到的子流中解析出模式標誌,且第一總碼長大於碼流緩衝區的剩餘大小,則確定子流的目標解碼模式為回退模式;模式標誌用於指示多個通道的編碼塊採用第一編碼模式或者回退模式進行編碼;第一總碼長為多個分量通道的編碼塊均按照各自對應的目標編碼模式第一編碼模式進行編碼後得到的的第一碼流的總碼長;目標編碼模式包括第一編碼模式;第一編碼模式為按照第一定長碼對編碼塊中的樣本值編碼單元進行編碼的模式;第一定長碼的碼長小於或等於待處理圖像的圖像位元寬;圖像位元寬用於表徵編碼存儲待處理圖像中每個樣本所需的位元位數;解析子流中的預設標誌位,確定目標回退模式;目標回退模式為回退模式中的一種;預設標誌位用於指示子模式標誌的位置;子模式標誌用於指示多個通道的編碼塊編碼時所採用的回退模式的種類;回退模式包括第一回退模式和第二回退模式;按照目標回退模式對子流進行解碼。
在一實施例中,處理模組2802,還用於基於碼流緩衝區的剩餘大小、以及目標像素深度BPP,確定編碼單元的目標解碼碼長;目標解碼碼長用於指示解碼編碼單元的碼流所需的碼長;基於解碼碼長;確定多個通道的分配碼長;分配碼長用於指示解碼多個通道的編碼塊的碼流的殘差所需的碼長;根據分配碼長在多個通道的平均值,確定多個通道各自分配的解碼碼長。
在一實施例中,處理模組2802,還用於解析對編碼單元編碼後的碼流;編碼單元包括多個通道的編碼塊;多個通道包括第一通道;第一通道為多個通道中的任意一個通道;從第一通道的編碼塊編碼得到的子流中解析第一標誌;第一標誌用於指示多個通道的編碼塊採用第一編碼模式或回退模式編碼;第一編碼模式為按照第一定長碼對第一通道的編碼塊中的取樣值進行編碼的模式;第一定長碼的碼長小於或等於待處理圖像的圖像位元寬;圖像位元寬用於表徵編碼存儲待處理圖像中每個樣本所需的位元位數;從第一通道的編碼塊編碼得到的子流中解析第二標誌;第二標誌用於指示多個通道的編碼塊目標模式編碼;目標模式為第一編碼模式和回退模式中的任意一種;當第二標誌指示多個通道的編碼塊採用的目標模式為回退模式時,從第一通道的編碼塊編碼得到的子流中解析第三標誌;根據第三標誌指示的回退模式的種類確定多個通道的目標解碼模式,並按照目標解碼模式對多個通道的編碼塊編碼得到的子流進行解碼。
在一實施例中,處理模組2802,還用於基於碼流緩衝區的剩餘大小、以及目標像素深度BPP,確定編碼單元的目標解碼碼長;目標解碼碼長用於指示解碼編碼單元的碼流所需的碼長;基於解碼碼長;確定多個通道的分配碼長;分配碼長用於指示解碼多個通道的編碼塊的碼流的殘差所需的碼長;根據分配碼長在多個通道的平均值,確定多個通道各自分配的解碼碼長。
在一實施例中,獲取模組2801,還用於獲取編碼單元;編碼單元包括多個通道的編碼塊。處理模組2802,還用於按照幀內塊複製IBC模式對多個通道中的至少一個通道的編碼塊進行編碼;獲取參考預測塊的塊向量BV;參考預測塊的BV用於指示參考預測塊在已編碼的圖像塊中的位置;參考預測塊用於表徵按照IBC模式編碼的編碼塊的預測值;在至少一種通道的編碼塊經IBC模式編碼得到的至少一個子流中編碼參考預測塊的BV。
在一實施例中,處理模組2802,具體用於使用率失真優化決策確定出至少一個通道的目標編碼模式;目標編碼模式包括IBC模式;按照目標編碼模式對至少一個通道的編碼塊進行編碼。
在一實施例中,處理模組2802,具體用於按照IBC模式對多個通道的編碼塊進行編碼;在多個通道中的每一個通道的編碼塊經IBC模式編碼得到的子流中編碼參考預測塊的BV。
在一實施例中,處理模組2802,具體用於按照預設比例在多個通道中的每一個通道的編碼塊經IBC模式編碼得到的碼流中編碼參考預測塊的BV。
在一實施例中,處理模組2802,還用於解析對編碼單元編碼後的碼流;編碼單元包括多個通道的編碼塊;碼流包括多個通道的編碼塊編碼後的、與多個通道一一對應的多個子流;基於從多個子流中的至少一個子流中解析到的參考預測塊的塊向量BV,在多個子流中確定出參考預測塊的位置;參考預測塊用於表徵按照幀內塊複製IBC模式進行編碼的編碼塊的預測值;參考預測塊的BV用於指示參考預測塊在已編碼的圖像塊中的位置;基於參考預測塊的位置資訊,確定按照IBC模式進行解碼的解碼塊的預測值;基於預測值,對按照IBC模式進行解碼的解碼塊進行重建。
在一實施例中,參考預測塊的BV編碼於多個子流中;參考預測塊的BV是按照IBC模式對多個通道的編碼塊進行編碼時得到的。
在一實施例中,獲取模組2801,還用於獲取編碼單元對應的處理係數;處理係數包括殘差係數和變換係數中的一項或多項。處理模組2802,還用於按照個數閾值將處理係數分為多組,多組處理係數中的每組處理係數的個數小於或等於個數閾值。
在一實施例中,處理模組2802,還用於解析對編碼單元編碼後的碼流,確定編碼單元對應的處理係數;處理係數包括殘差係數和變換係數中的一項或多項;處理係數包括多組;每組處理係數的個數小於或等於個數閾值;基於處理係數對碼流進行解碼。
在一實施例中,獲取模組2801,還用於獲取編碼單元;編碼單元包括P個通道的編碼塊;P為大於或等於2的整數;獲取P個通道中每個通道的編碼塊的複雜度資訊;複雜度資訊用於表徵每個通道的編碼塊的像素值的差異程度。處理模組2802,還用於在P個通道的編碼塊編碼得到的子流中編碼每個通道的編碼塊的複雜度資訊。
在一實施例中,複雜度資訊包括複雜度等級;處理模組2802,具體用於在P個通道的編碼塊編碼得到的子流中各自編碼每個通道的編碼塊的複雜度等級。
在一實施例中,複雜度資訊包括複雜度等級和第一參考係數;第一參考係數用於表徵不同通道的編碼塊的複雜度等級之間的比例關係;處理模組2802,具體用於在P個通道中的Q個通道的編碼塊編碼得到的子流中各自編碼Q個通道的編碼塊的複雜度等級;Q為小於P的整數;在P個通道中的P-Q個通道的編碼塊編碼得到的子流中編碼第一參考係數。
在一實施例中,複雜度資訊包括複雜度等級、參考複雜度等級、以及第二參考係數;參考複雜度等級包括以下任意一項:第一複雜度等級、第二複雜度等級、以及第三複雜度等級;第一複雜度等級為P個通道中的P-Q個通道的編碼塊的複雜度等級中的最大值;Q為小於P的整數;第二複雜度等級為P個通道中P-Q個通道的編碼塊的複雜度等級中的最小值;第三複雜度等級為P個通道中的P-Q個通道的編碼塊的複雜度等級中的平均值;第二參考係數用於表徵P個通道中的P-Q個通道的編碼塊的複雜度等級之間的大小關係,和/或,比例關係;處理模組2802,具體用於在P個通道中的Q個通道的編碼塊編碼得到的子流中各自編碼Q個通道的編碼塊的複雜度等級;在P個通道中的P-Q個通道的編碼塊編碼得到的子流中編碼參考複雜度等級和第二參考係數。
在一實施例中,處理模組2802,還用於解析對編碼單元編碼後的碼流;編碼單元包括P個通道的編碼塊;P為大於或等於2的整數;碼流包括P個通道的編碼塊編碼後的、與P個通道一一對應的多個子流;在P個通道的編碼塊編碼得到的子流中解析每個通道的編碼塊的複雜度資訊;複雜度資訊用於表徵每個通道的編碼塊的像素值的差異程度;基於每個通道的編碼塊的複雜度資訊,確定每個通道的編碼塊的量化參數;基於每個通道的編碼塊的量化參數,對碼流進行解碼。
在一實施例中,複雜度資訊包括複雜度等級;處理模組2802,還用於在P個通道的編碼塊編碼得到的子流中各自解析每個通道的編碼塊的複雜度等級。
在一實施例中,複雜度資訊包括複雜度等級和第一參考係數;第一參考係數用於表徵不同通道的編碼塊的複雜度等級之間的比例關係;處理模組2802,具體用於在P個通道中的Q個通道的編碼塊編碼得到的子流中各自解析Q個通道的編碼塊的複雜度等級;Q為小於P的整數;在P個通道中的P-Q個通道的編碼塊編碼得到的子流中解析第一參考係數;基於第一參考係數、以及Q個通道的編碼塊的複雜度等級,確定P-Q個通道的編碼塊的複雜度等級。
在一實施例中,複雜度資訊包括複雜度等級、參考複雜度等級、以及第二參考係數;參考複雜度等級包括以下任意一項:第一複雜度等級、第二複雜度等級、以及第三複雜度等級;第一複雜度等級為P個通道中的P-Q個通道的編碼塊的複雜度等級中的最大值;Q為小於P的整數;第二複雜度等級為P個通道中P-Q個通道的編碼塊的複雜度等級中的最小值;第三複雜度等級為P個通道中的P-Q個通道的編碼塊的複雜度等級中的平均值;第二參考係數用於表徵P個通道中的P-Q個通道的編碼塊的複雜度等級之間的大小關係,和/或,比例關係;處理模組2802,具體用於在P個通道中的Q個通道的編碼塊編碼得到的子流中各自解析Q個通道的編碼塊的複雜度等級;在P個通道中的P-Q個通道的編碼塊編碼得到的子流中解析參考複雜度等級和第二參考係數;基於Q個通道的編碼塊的複雜度等級。以及第二參考係數,確定P-Q個通道的編碼塊的複雜度等級。
在一實施例中,獲取模組2801,還用於獲取編碼單元;編碼單元包括多個通道的編碼塊;編碼單元為待處理圖像中的圖像塊。處理模組2802,還用於當待處理圖像的圖像格式為預設格式時,則將多個通道中的至少兩個預設通道的編碼塊編碼得到的子流合併為一個合併子流。
在一實施例中,處理模組2802,還用於解析對編碼單元編碼後的碼流;編碼單元包括多個通道的編碼塊;編碼單元為待處理圖像中的圖像塊;確定合併子流;合併子流是當待處理圖像的圖像格式為預設格式時,將多個通道中的至少兩個預設通道的編碼塊編碼的到的子流合併得到的;基於合併了至少兩個待合併子流,對碼流進行解碼。
在一實施例中,獲取模組2801,還用於獲取編碼單元;編碼單元包括多個通道的編碼塊。處理模組2802,還用於在滿足預設條件的目標子流中編碼預設碼字,直至目標子流不滿足預設條件;目標子流是多個子流中的子流;多個子流是對多個通道的編碼塊進行編碼得到的碼流。
在一實施例中,預設條件包括:子流位元數小於預設的第一位元數閾值。
在一實施例中,預設條件包括:編碼單元的碼流中存在位元數小於預設的第二位元數閾值的經編碼的編碼塊。
在一實施例中,處理模組2802,還用於解析對編碼單元編碼後的碼流;編碼單元包括多個通道的編碼塊;確定碼字數量;碼字數量用於指示在滿足預設條件的目標子流中編碼的預設碼字的數量;預設碼字是當存在滿足預設條件的目標子流時,編碼入目標子流中的;基於碼字數量,對碼流進行解碼。
在一實施例中,獲取模組2801,還用於獲取編碼單元;編碼單元包括多個通道的編碼塊。處理模組2802,還用於基於預設膨脹率,確定多個通道的編碼塊中每個通道的編碼塊各自對應的目標編碼模式;按照目標編碼模式對每個通道的編碼塊進行編碼,以使得當前膨脹率小於或等於預設膨脹率。
在一實施例中,預設膨脹率包括第一預設膨脹率;當前膨脹率等於最大子流的位元數與最小子流的位元數之商;最大子流為對多個通道的編碼塊進行編碼得到的多個子流中,位元數最大的子流;最小子流為對多個通道的編碼塊進行編碼得到的多個子流中,位元數最小的子流。
在一實施例中,預設膨脹率包括第二預設膨脹率;當前膨脹率等於經編碼的多個通道的編碼塊中,位元數最大的編碼塊的位元數和位元數最小的編碼塊的位元數之商。
在一實施例中,處理模組2802,還用於確定當前膨脹率;當當前膨脹率大於第一預設膨脹率時,在最小子流中編碼預設碼字,以使得當前膨脹率小於或等於第一預設膨脹率。
在一實施例中,處理模組2802,還用於確定當前膨脹率;當當前膨脹率大於第二預設膨脹率時,在位元數最小的編碼塊中編碼預設碼字,以使得當前膨脹率小於或等於第二預設膨脹率。
在一實施例中,處理模組2802,還用於解析對編碼單元編碼後的碼流;編碼單元包括多個通道的編碼塊;基於碼流,確定預設碼字的數量;基於預設碼字的數量,對碼流進行解碼。
需要說明的是,圖28中對模組的劃分是示意性的,僅僅為一種邏輯功能劃分,實際實現時可以有另外的劃分方式。例如,還可以將兩個或兩個以上的功能集成在一個處理模組中。上述集成的模組既可以採用硬體的形式實現,也可以採用軟體功能模組的形式實現。
在示例性的實施例中,本申請實施例還提供了一種可讀存儲介質,包括執行指令,當其在圖像編解碼裝置上運行時,使得圖像編解碼裝置執行上述實施例提供的任意一種方法。
在示例性的實施例中,本申請實施例還提供了一種包含執行指令的電腦程式產品,當其在圖像編解碼裝置上運行時,使得圖像編解碼裝置執行上述實施例提供的任意一種方法。
在示例性的實施例中,本申請實施例還提供了一種晶片,包括:處理器和介面,處理器通過介面與記憶體耦合,當處理器執行記憶體中的電腦程式或圖像編解碼裝置執行指令時,使得上述實施例提供的任意一種方法被執行。
在上述實施例中,可以全部或部分地通過軟體、硬體、韌體或者其任意組合來實現。當使用軟體程式實現時,可以全部或部分地以電腦程式產品的形式來實現。該電腦程式產品包括一個或多個電腦執行指令。在電腦上載入和執行電腦執行指令時,全部或部分地產生按照本申請實施例的流程或功能。電腦可以是通用電腦、專用電腦、電腦網路、或者其他可程式設計裝置。電腦執行指令可以存儲在電腦可讀存儲介質中,或者從一個電腦可讀存儲介質向另一個電腦可讀存儲介質傳輸,例如,電腦執行指令可以從一個網站網站、電腦、伺服器或者資料中心通過有線(例如同軸電纜、光纖、數位用戶線路(digital subscriber line,DSL))或無線(例如紅外、無線、微波等)方式向另一個網站網站、電腦、伺服器或資料中心進行傳輸。電腦可讀存儲介質可以是電腦能夠存取的任何可用介質或者是包含一個或多個可以用介質集成的伺服器、資料中心等資料存放裝置。可用介質可以是磁性介質(例如,軟碟、硬碟、磁帶),光介質(例如,DVD)、或者半導體介質(例如固態硬碟(solid state disk,SSD))等。
儘管在此結合各實施例對本申請進行了描述,然而,在實施所要求保護的本申請過程中,本領域技術人員通過查看圖式、公開內容、以及所附申請專利範圍,可理解並實現公開實施例的其他變化。在請求項中,「包括」(Comprising)一詞不排除其他組成部分或步驟,「一」或「一個」不排除多個的情況。單個處理器或其他單元可以實現請求項中列舉的若干項功能。相互不同的附屬項中記載了某些措施,但這並不表示這些措施不能組合起來產生良好的效果。
儘管結合具體特徵及其實施例對本申請進行了描述,顯而易見的,在不脫離本申請的精神和範圍的情況下,可對其進行各種修改和組合。相應地,本說明書和圖式僅僅是所附請求項所界定的本申請的示例性說明,且視為已覆蓋本申請範圍內的任意和所有修改、變化、組合或等同物。顯然,本領域的技術人員可以對本申請進行各種改動和變型而不脫離本申請的精神和範圍。這樣,倘若本申請的這些修改和變型屬於本申請請求項及其等同技術的範圍之內,則本申請也意圖包含這些改動和變型在內。
以上所述,僅為本申請的具體實施方式,但本申請的保護範圍並不局限於此,任何在本申請揭露的技術範圍內的變化或替換,都應涵蓋在本申請的保護範圍之內。因此,本申請的保護範圍應該以請求項的保護範圍為准。
10:源裝置 101:視訊源 102:視訊轉碼器 103:輸出介面 11:目的裝置 111:顯示裝置 112:視訊解碼器 113:輸入介面 12:鏈路 13:存儲裝置 20:預處理模組 21:預測模組 22:變換模組 23:量化模組 24:熵編碼模組 25:編碼子流緩衝區 26:子流交織模組 27:反量化模組 28:反變換模組 29:參考圖像記憶體 201:求和器 202:求和器 30:子流交織模組 31:解碼子流緩衝區 32:熵解碼模組 33:預測模組 34:反量化模組 35:反變換模組 36:參考圖像記憶體 301:求和器 41:處理器 42:記憶體 43:匯流排 44:通訊介面 45:處理器 S101~S102、S201~S202、S301~S303、S401~S404、S501~S505、S601~S603、S701~S704、S801~S804、S901~S902、S1001~S1002、S1101~S1103、S1201~S1202、S1301~S1303、S1401~S1402、S1501~S1503、S1601~S1603、S1701~S1703:步驟 2801:獲取模組 2802:處理模組
為了更清楚地說明本申請實施例中的技術方案,下面將對實施例描述中所需要使用的圖式作簡單地介紹,顯而易見地,下面描述中的圖式僅僅是本申請的一些實施例,對於本領域普通技術人員來講,在不付出進步性勞動的前提下,還可以根據這些圖式獲得其他的圖式。 圖1為子流並行技術的框架示意圖; 圖2為編碼端子流交織過程示意圖; 圖3為子流交織單元的格式的示意圖; 圖4為解碼端反向子流交織過程示意圖; 圖5為編碼端子流交織過程的另一種示意圖; 圖6為本申請實施例提供的視訊編解碼系統的組成示意圖; 圖7為本申請實施例提供的視訊轉碼器的組成示意圖; 圖8為本申請實施例提供的視訊解碼器的結構示意圖; 圖9為本申請實施例提供的一種視訊編解碼的流程示意圖; 圖10為本申請實施例提供的圖像編碼裝置和圖像解碼裝置的組成示意圖; 圖11為本申請實施例提供的一種圖像編碼方法的流程示意圖; 圖12為本申請實施例提供的一種圖像解碼方法的流程示意圖; 圖13為本申請實施例提供的另一種圖像解碼方法的流程示意圖; 圖14為本申請實施例提供的另一種圖像解碼方法的流程示意圖; 圖15為本申請實施例提供的又一種圖像解碼方法的流程示意圖; 圖16為本申請實施例提供的又一種圖像編碼方法的流程示意圖; 圖17為本申請實施例提供的又一種圖像編碼方法的流程示意圖; 圖18為本申請實施例提供的又一種圖像解碼方法的流程示意圖; 圖19為本申請實施例提供的又一種圖像編碼方法的流程示意圖; 圖20為本申請實施例提供的又一種圖像解碼方法的流程示意圖; 圖21為本申請實施例提供的又一種圖像編碼方法的流程示意圖; 圖22為本申請實施例提供的又一種圖像編碼方法的流程示意圖; 圖23為本申請實施例提供的又一種圖像解碼方法的流程示意圖; 圖24為本申請實施例提供的又一種圖像編碼方法的流程示意圖; 圖25為本申請實施例提供的又一種圖像解碼方法的流程示意圖; 圖26為本申請實施例提供的又一種圖像編碼方法的流程示意圖; 圖27為本申請實施例提供的又一種圖像解碼方法的流程示意圖; 圖28為本申請實施例提供的圖像編碼裝置的組成示意圖。
S101~S102:步驟

Claims (40)

  1. 一種圖像編碼方法,包括: 獲取編碼單元;所述編碼單元包括多個通道的編碼塊; 基於預設膨脹率對所述每個通道的編碼塊進行編碼,以使得當前膨脹率小於或等於所述預設膨脹率, 其中,所述預設膨脹率包括第一預設膨脹率;所述當前膨脹率的值由最大子流的位元數與最小子流的位元數之商匯出;所述最大子流為對所述多個通道的編碼塊進行編碼得到的多個子流中,位元數最大的子流;所述最小子流為對所述多個通道的編碼塊進行編碼得到的多個子流中,位元數最小的子流。
  2. 如請求項1所述的圖像編碼方法,還包括: 獲取第一子流和第二子流,所述第一子流為已發送的最多固定長度碼流中剩餘量的總量最大的子流,所述第二子流為已發送的最少固定長度碼流中剩餘量的總量最小的子流; 當所述第一子流和所述第二子流的比值或差值大於預設的差值閾值時,確定所述第一子流對應的編碼塊的目標編碼模式為低碼率編碼模式,所述第二子流對應的編碼塊的目標編碼模式為高碼率編碼模式。
  3. 如請求項1所述的圖像編碼方法,還包括: 確定所述當前膨脹率; 當所述當前膨脹率大於所述第一預設膨脹率時,在所述最小子流中編碼預設碼字,以使得所述當前膨脹率小於或等於所述第一預設膨脹率。
  4. 如請求項3所述的圖像編碼方法,其中所述預設膨脹率還包括第二預設膨脹率,所述圖像編碼方法還包括: 確定所述當前膨脹率; 當所述當前膨脹率大於所述第二預設膨脹率時,在所述位元數最小的編碼塊中編碼所述預設碼字,以使得所述當前膨脹率小於或等於所述第二預設膨脹率。
  5. 如請求項3或4所述的圖像編碼方法,其中在所述最小子流中編碼預設碼字包括: 在所述最小子流的末尾填充所述預設碼字。
  6. 一種圖像編碼方法,包括: 獲取編碼單元;所述編碼單元包括多個通道的編碼塊; 按照幀內塊複製IBC模式對所述多個通道中的至少一個通道的編碼塊進行編碼; 獲取參考預測塊的塊向量BV;所述參考預測塊的BV用於指示所述參考預測塊在已編碼的圖像塊中的位置;所述參考預測塊用於表徵按照所述IBC模式編碼的編碼塊的預測值; 在所述多個通道中的每一個通道的編碼塊經所述IBC模式編碼得到的子流中編碼所述參考預測塊的BV。
  7. 如請求項6所述的圖像編碼方法,其中所述在所述多個通道中的每一個通道的編碼塊經所述IBC模式編碼得到的子流中編碼所述參考預測塊的BV,包括: 按照預設比例在所述多個通道中的每一個通道的編碼塊經所述IBC模式編碼得到的碼流中編碼所述參考預測塊的BV。
  8. 如請求項6所述的圖像編碼方法,還包括: 獲取編碼單元對應的殘差係數; 按照個數閾值將所述殘差係數分為多組,所述多組殘差係數中的每組殘差係數的個數小於或等於所述個數閾值。
  9. 一種圖像編碼方法,包括: 獲取編碼單元;所述編碼單元為待處理圖像中的圖像塊;所述編碼單元包括多個通道的編碼塊; 確定第一總碼長;所述第一總碼長為所述多個通道的編碼塊均按照各自對應的目標編碼模式編碼後得到的的第一碼流的總碼長;所述目標編碼模式包括第一編碼模式;所述第一編碼模式為按照第一定長碼對編碼塊中的樣本值進行編碼的模式;所述第一定長碼的碼長小於或等於所述待處理圖像的圖像位元寬;所述圖像位元寬用於表徵存儲所述待處理圖像中每個樣本所需的位元位數; 當所述第一總碼長大於或等於碼流緩衝區的剩餘大小時,將所述多個通道的編碼塊按照回退模式進行編碼;所述回退模式和所述第一編碼模式的模式標誌相同。
  10. 如請求項9所述的圖像編碼方法,還包括: 在所述多個通道的編碼塊編碼得到的多個子流中編碼模式標誌;所述模式標誌用於指示所述多個通道的編碼塊各自採用的編碼模式。
  11. 如請求項10所述的圖像編碼方法,其中所述多個通道包括第一通道;所述第一通道為所述多個通道中的任意一個通道;所述在所述多個通道的編碼塊編碼得到的子流中編碼模式標誌,包括: 在所述第一通道的編碼塊編碼得到的子流中編碼子模式標誌;所述子模式標誌用於指示所述多個通道的編碼塊所採用的回退模式的種類,所述回退模式包括第一回退模式和第二回退模式。
  12. 如請求項10所述的圖像編碼方法,其中所述多個通道包括第一通道;所述第一通道為所述多個通道中的任意一個通道;所述在所述多個通道的編碼塊編碼得到的子流中編碼模式標誌,包括: 在所述第一通道的編碼塊編碼得到的子流中編碼第一標誌和第二標誌;所述第一標誌用於指示所述多個通道的編碼塊採用所述第一編碼模式或者所述回退模式編碼。
  13. 如請求項10~12任一項所述的圖像編碼方法,還包括: 基於所述碼流緩衝區的剩餘大小、以及目標像素深度BPP,確定所述編碼單元的目標編碼碼長;所述目標編碼碼長用於指示編碼所述編碼單元所需的碼長; 基於所述目標編碼碼長,確定多個通道的分配碼長;所述分配碼長用於指示編碼所述多個通道的編碼塊的殘差所需的碼長; 根據所述分配碼長在所述多個通道的平均值,確定所述多個通道各自分配的編碼碼長。
  14. 如請求項13所述的圖像編碼方法,其中所述基於所述目標編碼碼長,確定多個通道的分配碼長,包括: 將所述目標編碼碼長減去公共資訊所佔用的碼長,得到多個通道的分配碼長。
  15. 一種圖像解碼方法,包括: 解析對編碼單元編碼後的碼流;所述編碼單元包括多個通道的編碼塊; 確定碼字數量;所述碼字數量用於指示在滿足預設條件的目標子流中編碼的預設碼字的數量;所述預設碼字是當存在滿足預設條件的目標子流時,編碼入所述目標子流中的; 基於所述碼字數量,對所述碼流進行解碼。
  16. 如請求項15所述的圖像解碼方法,其中所述基於所述碼字數量,對所述碼流進行解碼包括: 基於所述碼字數量將預設碼字刪除,對刪除了預設碼字後的碼流進行解碼。
  17. 一種圖像解碼方法,包括: 解析對編碼單元編碼後的碼流;所述編碼單元包括多個通道的編碼塊; 確定所述當前膨脹率; 根據所述當前膨脹率和第一預設膨脹率確定碼字數量;所述碼字數量用於指示在滿足預設條件的目標子流中編碼的預設碼字的數量;所述預設碼字是當存在滿足預設條件的目標子流時,編碼入所述目標子流中的; 基於所述碼字數量,對所述碼流進行解碼。
  18. 一種圖像解碼方法,包括: 解析對編碼單元編碼後的碼流;所述編碼單元包括多個通道的編碼塊;所述碼流包括所述多個通道的編碼塊編碼後的、與所述多個通道一一對應的多個子流; 基於從所述多個子流中的至少一個子流中解析到的參考預測塊的塊向量BV,在所述多個子流中確定出所述參考預測塊的位置;所述參考預測塊用於表徵按照幀內塊複製IBC模式進行解碼的解碼塊的預測值;所述參考預測塊的BV用於指示所述參考預測塊在已重建的圖像塊中的位置; 基於所述參考預測塊的位置資訊,確定所述按照IBC模式進行解碼的解碼塊的預測值; 基於所述預測值,對所述按照IBC模式進行解碼的解碼塊進行重建。
  19. 如請求項18所述的圖像解碼方法,其中所述按照IBC模式進行進行解碼的解碼塊包括至少兩個通道的解碼塊;所述至少兩個通道的解碼塊共用所述參考預測塊的BV。
  20. 如請求項18所述的圖像解碼方法,其中所述方法還包括: 當從所述多個子流中的任意一個子流中解析出IBC模式標識時,確定所述多個子流對應的目標解碼模式為所述IBC模式。
  21. 如請求項18所述的圖像解碼方法,其中所述方法還包括: 確定所述解碼單元對應的殘差係數;所述殘差係數包括多組;每組殘差係數的個數小於或等於個數閾值; 基於所述殘差係數對碼流進行解碼。
  22. 一種圖像解碼方法,包括: 解析對編碼單元編碼後的碼流;所述編碼單元包括多個通道的編碼塊; 若從所述多個子流中解析出模式標誌,且第二總碼長大於碼流緩衝區的剩餘大小,則確定所述子流的目標解碼模式為回退模式;所述模式標誌用於指示所述多個通道的解碼塊是否採用回退模式進行編碼或第一通道是否採用第一解碼模式;所述第二總碼長為所述多個通道的編碼塊均按照第一編碼模式進行編碼後得到的碼流的總碼長;所述第一編碼模式為按照第一定長碼對編碼塊中的樣本值所述編碼單元進行編碼的模式;所述第一定長碼的碼長小於或等於所述待處理圖像的圖像位元寬;所述圖像位元寬用於表徵編碼存儲所述待處理圖像中每個樣本所需的位元位數; 解析所述子流中的預設標誌位,確定目標回退子模式;所述目標回退子模式為所述回退模式中的一種;所述預設標誌位用於指示所述多個通道的編碼塊編碼時所採用的回退模式的種類;所述回退模式包括第一回退模式和第二回退模式; 按照所述目標回退模式對所述子流進行解碼。
  23. 如請求項22所述的圖像解碼方法,所述方法還包括: 基於所述碼流緩衝區的剩餘大小、以及目標像素深度BPP,確定所述編碼單元的目標解碼碼長;所述目標解碼碼長用於指示解碼所述編碼單元的碼流所需的碼長; 基於所述解碼碼長;確定多個通道的分配碼長;所述分配碼長用於指示解碼所述多個通道的編碼塊的碼流的殘差所需的碼長; 根據所述分配碼長在所述多個通道的平均值,確定所述多個通道各自分配的解碼碼長。
  24. 一種圖像解碼方法,包括: 獲取對編碼單元編碼後的碼流; 按照第一解碼模式對第一通道對應的子流進行解碼。
  25. 如請求項24所述的圖像解碼方法,其中所述按照第一解碼模式對第一通道對應的子流進行解碼包括: 當第一定長碼等於圖像位元寬時,直接按照所述第一解碼模式對所述第一通道對應的子流進行解碼;或者 當第一定長碼小於圖像位元寬時,對解析出來的所述第一通道的編碼塊中的像素值進行反量化。
  26. 一種圖像解碼方法,包括: 獲取解碼單元;所述解碼單元為待處理圖像中的圖像塊,所述解碼單元包括多個通道的解碼塊; 確定第一總碼長;所述第一總碼長為所述多個通道的解碼塊均按照各自對應的目標解碼模式進行解碼後得到的第一碼流的總碼長; 當所述第一總碼長大於或等於碼流緩衝區的剩餘大小時,將所述多個通道的解碼塊按照回退模式進行解碼。
  27. 如請求項26所述的圖像解碼方法,還包括: 在所述多個通道的解碼塊解碼得到的多個子流中解碼模式標誌。
  28. 一種圖像解碼方法,包括: 解析對編碼單元編碼後的碼流,確定所述編碼單元對應的處理係數; 基於所述處理係數對所述碼流進行解碼。
  29. 如請求項28所述的圖像解碼方法,其中所述處理係數包括殘差係數和變換係數中的一項或多項;所述處理係數包括多組;每組處理係數的個數小於或等於個數閾值。
  30. 一種圖像編碼裝置,包括: 獲取模組,用於獲取編碼單元;所述編碼單元包括多個通道的編碼塊; 處理模組,用於在滿足預設條件的目標子流中編碼預設碼字,直至所述目標子流不滿足所述預設條件;所述目標子流是多個子流中的子流;所述多個子流是對所述多個通道的編碼塊進行編碼得到的碼流。
  31. 一種圖像編碼裝置,包括: 獲取模組,用於獲取編碼單元;所述編碼單元包括多個通道的編碼塊; 處理模組,用於基於預設膨脹率對所述每個通道的編碼塊進行編碼,以使得當前膨脹率小於或等於所述預設膨脹率。
  32. 一種圖像編碼裝置,包括: 獲取模組,用於獲取編碼單元;所述編碼單元包括多個通道的編碼塊; 處理模組,用於按照幀內塊複製IBC模式對所述多個通道中的至少一個通道的編碼塊進行編碼;獲取參考預測塊的塊向量BV;所述參考預測塊的BV用於指示所述參考預測塊在已編碼的圖像塊中的位置;所述參考預測塊用於表徵按照所述IBC模式編碼的編碼塊的預測值;在所述至少一種通道的編碼塊經所述IBC模式編碼得到的至少一個子流中編碼所述參考預測塊的BV。
  33. 一種圖像編碼裝置,包括: 獲取模組,用於獲取編碼單元;所述編碼單元為待處理圖像中的圖像塊;所述編碼單元包括多個通道的編碼塊; 處理模組,用於確定第一總碼長;所述第一總碼長為所述多個通道的編碼塊均按照各自對應的目標編碼模式編碼後得到的的第一碼流的總碼長;所述目標編碼模式包括第一編碼模式;所述第一編碼模式為按照第一定長碼對編碼塊中的樣本值進行編碼的模式;所述第一定長碼的碼長小於或等於所述待處理圖像的圖像位元寬;所述圖像位元寬用於表徵存儲所述待處理圖像中每個樣本所需的位元位數;當所述第一總碼長大於或等於碼流緩衝區的剩餘大小時,將所述多個通道的編碼塊按照回退模式進行編碼;所述回退模式和所述第一編碼模式的模式標誌相同。
  34. 一種圖像解碼裝置,包括: 處理模組,用於解析對編碼單元編碼後的碼流;所述編碼單元包括多個通道的編碼塊;確定碼字數量;所述碼字數量用於指示在滿足預設條件的目標子流中編碼的預設碼字的數量;所述預設碼字是當存在滿足預設條件的目標子流時,編碼入所述目標子流中的;基於所述碼字數量,對所述碼流進行解碼。
  35. 一種圖像解碼裝置,包括: 處理模組,用於解析對編碼單元編碼後的碼流;所述編碼單元包括多個通道的編碼塊;確定所述當前膨脹率;根據所述當前膨脹率和第一預設膨脹率確定碼字數量;所述碼字數量用於指示在滿足預設條件的目標子流中編碼的預設碼字的數量;所述預設碼字是當存在滿足預設條件的目標子流時,編碼入所述目標子流中的;基於所述碼字數量,對所述碼流進行解碼。
  36. 一種圖像解碼裝置,包括: 處理模組,用於解析對編碼單元編碼後的碼流;所述編碼單元包括多個通道的編碼塊;所述碼流包括所述多個通道的編碼塊編碼後的、與所述多個通道一一對應的多個子流;基於從所述多個子流中的至少一個子流中解析到的參考預測塊的塊向量BV,在所述多個子流中確定出所述參考預測塊的位置;所述參考預測塊用於表徵按照幀內塊複製IBC模式進行解碼的解碼塊的預測值;所述參考預測塊的BV用於指示所述參考預測塊在已重建的圖像塊中的位置;基於所述參考預測塊的位置資訊,確定所述按照IBC模式進行解碼的解碼塊的預測值;基於所述預測值,對所述按照IBC模式進行解碼的解碼塊進行重建。
  37. 一種圖像解碼裝置,包括: 處理模組,用於解析對編碼單元編碼後的碼流;所述編碼單元包括多個通道的編碼塊;若從所述多個通道的編碼塊編碼得到的子流中解析出模式標誌,且第二總碼長大於碼流緩衝區的剩餘大小,則確定所述子流的目標解碼模式為回退模式;所述模式標誌用於指示所述多個通道的編碼塊是否採用回退模式進行編碼;所述第二總碼長為所述多個通道的編碼塊均按照第一編碼模式進行編碼後得到的碼流的總碼長;所述第一編碼模式為按照第一定長碼對編碼塊中的樣本值所述編碼單元進行編碼的模式;所述第一定長碼的碼長小於或等於所述待處理圖像的圖像位元寬;所述圖像位元寬用於表徵編碼存儲所述待處理圖像中每個樣本所需的位元位數;解析所述子流中的預設標誌位,確定目標回退子模式;所述目標回退子模式為所述回退模式中的一種;所述預設標誌位用於指示所述多個通道的編碼塊編碼時所採用的回退模式的種類;所述回退模式包括第一回退模式和第二回退模式;按照所述目標回退模式對所述子流進行解碼。
  38. 一種視訊編碼器,包括: 處理器和記憶體; 所述記憶體存儲有所述處理器可執行的指令; 所述處理器被配置為執行所述指令時,使得所述視訊編碼器實現如請求項1~14中任一項所述的圖像編碼方法。
  39. 一種視訊解碼器,包括: 處理器和記憶體; 所述記憶體存儲有所述處理器可執行的指令; 所述處理器被配置為執行所述指令時,使得所述視訊解碼器實現如請求項15~29中任一項所述的圖像解碼方法。
  40. 一種可讀存儲介質,包括: 軟體指令; 當所述軟體指令在圖像編碼裝置和圖像解碼裝置中運行時,使得所述圖像編碼裝置實現如請求項1~14中任一項所述的圖像編碼方法和所述圖像解碼裝置實現如請求項15~29中任一項所述的圖像解碼方法。
TW112135398A 2022-09-20 2023-09-15 圖像編碼方法和圖像解碼方法、裝置及存儲介質 TW202415067A (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2022111464644 2022-09-20

Publications (1)

Publication Number Publication Date
TW202415067A true TW202415067A (zh) 2024-04-01

Family

ID=

Similar Documents

Publication Publication Date Title
US10666948B2 (en) Method, apparatus and system for encoding and decoding video data
JP6518701B2 (ja) ディスプレイストリーム圧縮(dsc)のためのエントロピーコーディング技法
KR102342660B1 (ko) 디스플레이 스트림 압축을 위한 서브스트림 멀티플렉싱
CN110999299A (zh) 在视频译码中跨分量动态范围调整(cc-dra)的系统及方法
US10728559B2 (en) Precision of computation and signaling of dynamic range adjustment and color remapping information
WO2023231866A1 (zh) 一种视频译码方法、装置及存储介质
CN108702520B (zh) 用于显示流压缩的基于向量的熵译码的设备及方法
WO2024061055A1 (zh) 图像编码方法和图像解码方法、装置及存储介质
WO2024104382A1 (zh) 图像编解码方法、装置及存储介质
WO2024022039A1 (zh) 一种视频图像解码方法、编码方法、装置及存储介质
WO2024022367A1 (zh) 图像解码方法、编码方法及装置
WO2024022359A1 (zh) 一种图像编解码方法及装置
TW202415067A (zh) 圖像編碼方法和圖像解碼方法、裝置及存儲介質
WO2023138532A1 (zh) 一种视频解码方法、装置、视频解码器及存储介质
TWI838089B (zh) 一種視頻解碼方法、裝置、視頻解碼器及存儲介質
WO2023138562A1 (zh) 图像解码方法、图像编码方法及相应的装置