JP2024521804A - 成分間サンプル適応オフセットにおけるコーディングの強化 - Google Patents
成分間サンプル適応オフセットにおけるコーディングの強化 Download PDFInfo
- Publication number
- JP2024521804A JP2024521804A JP2023573031A JP2023573031A JP2024521804A JP 2024521804 A JP2024521804 A JP 2024521804A JP 2023573031 A JP2023573031 A JP 2023573031A JP 2023573031 A JP2023573031 A JP 2023573031A JP 2024521804 A JP2024521804 A JP 2024521804A
- Authority
- JP
- Japan
- Prior art keywords
- ccsao
- video
- sample
- block
- offset
- Prior art date
- Legal status (The legal status 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 status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 claims abstract description 198
- 230000003044 adaptive effect Effects 0.000 claims abstract description 44
- 238000012545 processing Methods 0.000 claims description 111
- 238000003860 storage Methods 0.000 claims description 53
- 230000007246 mechanism Effects 0.000 claims description 32
- 230000004044 response Effects 0.000 claims description 6
- 241000023320 Luma <angiosperm> Species 0.000 description 410
- OSWPMRLSEDHDFF-UHFFFAOYSA-N methyl salicylate Chemical compound COC(=O)C1=CC=CC=C1O OSWPMRLSEDHDFF-UHFFFAOYSA-N 0.000 description 410
- 238000010586 diagram Methods 0.000 description 128
- 230000008569 process Effects 0.000 description 106
- 239000013598 vector Substances 0.000 description 66
- 239000000872 buffer Substances 0.000 description 50
- 238000013139 quantization Methods 0.000 description 38
- 208000037170 Delayed Emergence from Anesthesia Diseases 0.000 description 36
- 230000011664 signaling Effects 0.000 description 36
- 238000005192 partition Methods 0.000 description 34
- 238000004891 communication Methods 0.000 description 32
- 238000001914 filtration Methods 0.000 description 24
- 230000006835 compression Effects 0.000 description 22
- 238000007906 compression Methods 0.000 description 22
- 238000013461 design Methods 0.000 description 22
- 101100060194 Caenorhabditis elegans clip-1 gene Proteins 0.000 description 18
- 230000002146 bilateral effect Effects 0.000 description 18
- 230000006870 function Effects 0.000 description 18
- 238000000638 solvent extraction Methods 0.000 description 15
- 239000003607 modifier Substances 0.000 description 14
- 230000005540 biological transmission Effects 0.000 description 12
- 238000009795 derivation Methods 0.000 description 12
- 230000002123 temporal effect Effects 0.000 description 12
- 238000013500 data storage Methods 0.000 description 10
- 101100520660 Drosophila melanogaster Poc1 gene Proteins 0.000 description 8
- 101100520662 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) PBA1 gene Proteins 0.000 description 8
- 230000008901 benefit Effects 0.000 description 8
- 238000004590 computer program Methods 0.000 description 8
- 238000005259 measurement Methods 0.000 description 8
- 238000004458 analytical method Methods 0.000 description 6
- 238000003491 array Methods 0.000 description 6
- 235000009508 confectionery Nutrition 0.000 description 6
- 238000010276 construction Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 6
- 238000012986 modification Methods 0.000 description 6
- 230000004048 modification Effects 0.000 description 6
- 230000002441 reversible effect Effects 0.000 description 6
- 101150114515 CTBS gene Proteins 0.000 description 4
- 230000006978 adaptation Effects 0.000 description 4
- 108010063123 alfare Proteins 0.000 description 4
- 230000002457 bidirectional effect Effects 0.000 description 4
- 239000011449 brick Substances 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 4
- 238000012937 correction Methods 0.000 description 4
- 230000006837 decompression Effects 0.000 description 4
- 238000006073 displacement reaction Methods 0.000 description 4
- 238000013507 mapping Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 101150039623 Clip1 gene Proteins 0.000 description 2
- 101150055297 SET1 gene Proteins 0.000 description 2
- 101100520663 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) ADD66 gene Proteins 0.000 description 2
- 230000004913 activation Effects 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 229910003460 diamond Inorganic materials 0.000 description 2
- 239000010432 diamond Substances 0.000 description 2
- 230000010339 dilation Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000002708 enhancing effect Effects 0.000 description 2
- 230000007717 exclusion Effects 0.000 description 2
- 230000002349 favourable effect Effects 0.000 description 2
- 238000009499 grossing Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000012432 intermediate storage Methods 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 239000011159 matrix material Substances 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 238000013488 ordinary least square regression Methods 0.000 description 2
- 238000012856 packing Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000003672 processing method Methods 0.000 description 2
- 238000009877 rendering Methods 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 238000001228 spectrum Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 238000010200 validation analysis Methods 0.000 description 1
Images
Abstract
電子装置が、ビデオ・データを復号する方法を実行する。この方法は、ビデオ・データから、APS内に記憶された複数の以前に使用された成分間サンプル適応オフセット(CCSAO)フィルタ・オフセット・セットに関連付けられた適応パラメータ・セット(APS)識別子を受信することと、ビデオ・データから、現在のピクチャまたはスライスに使用されたAPS識別子を示すピクチャ・ヘッダ(PH)またはスライス・ヘッダ(SH)内の構文を受信することと、現在のコーディング・ツリー・ユニット(CTU)に対して、APS識別子に関連付けられたAPS内の複数のオフセット・セットから、特定の以前に使用されたCCSAOフィルタ・オフセット・セットを示すフィルタ・セット索引を復号することと、特定の以前に使用されたCCSAOフィルタ・オフセット・セットを、ビデオ・データの現在のCTUに適用することとを含む。
Description
関連出願
本出願は、全体として参照により組み込まれている、2021年5月26日に出願された「Cross-component Sample Adaptive Offset」という名称の米国仮特許出願第63/193,539号、および2021年6月21日に出願された「Cross-component Sample Adaptive Offset」という名称の米国仮特許出願第63/213,167号に対する優先権を主張するものである。
本出願は、全体として参照により組み込まれている、2021年5月26日に出願された「Cross-component Sample Adaptive Offset」という名称の米国仮特許出願第63/193,539号、および2021年6月21日に出願された「Cross-component Sample Adaptive Offset」という名称の米国仮特許出願第63/213,167号に対する優先権を主張するものである。
本出願は、一般に、ビデオのコーディングおよび圧縮に関し、より詳細には、ルマ(luma)およびクロマ(chroma)両方のコーディング効率を改善する方法および装置に関する。
デジタル・ビデオは、デジタル・テレビジョン、ラップトップまたはデスクトップ・コンピュータ、タブレット・コンピュータ、デジタル・カメラ、デジタル記録デバイス、デジタル・メディア・プレーヤ、ビデオ・ゲーミング・コンソール、スマートフォン、ビデオ遠隔会議デバイス、ビデオ・ストリーミング・デバイスなどの様々な電子デバイスによって対応される。電子デバイスは、ビデオ圧縮/解凍規格を実装することによって、デジタル・ビデオ・データの伝送、受信、符号化、復号、および/または記憶を行う。いくつかのよく知られているビデオ・コーディング規格には、Versatile Video Coding(VVC)、High Efficiency Video Coding(HEVC)(H.265またはMPEG-H Part 2としても知られている)、およびAdvanced Video Coding(AVC)(H.264またはMPEG-4 Part 10としても知られている)が含まれ、これらはISO/IEC MPEGおよびITU-T VCEGによって共同開発されたものである。AOMedia Video 1(AV1)は、先行規格VP9の後継として、Alliance for Open Media(AOM)によって開発された。Audio Video Coding(AVS)は、デジタル音声およびデジタル・ビデオ圧縮規格を指し、Audio and Video Coding Standard Workgroupによって開発された別のビデオ圧縮規格シリーズである。
ビデオ圧縮は、典型的に、ビデオ・データに固有の冗長性を低減または除去するために、空間(イントラ・フレーム)予測および/または時間(インター・フレーム)予測を実行することを含む。ブロック・ベースのビデオ・コーディングの場合、1つのビデオ・フレームが1つまたは複数のスライスに分割され、各スライスが複数のビデオ・ブロックを有しており、ビデオ・ブロックは、コーディング・ツリー・ユニット(CTU)と呼ばれることもある。各CTUは、1つのコーディング・ユニット(CU)を含むことができ、または事前定義された最小CUサイズに到達するまで、より小さいCUに再帰的に分割されてもよい。各CU(リーフCUとも呼ばれる)は1つまたは複数の変換ユニット(TU)を含み、各CUはまた、1つまたは複数の予測ユニット(PU)を含む。各CUは、イントラ、インター、またはIBCモードでコード化されうる。ビデオ・フレームのイントラ・コード化(I)スライス内のビデオ・ブロックは、同じビデオ・フレーム内の隣接ブロックにおける基準サンプルに対する空間予測を使用して符号化される。ビデオ・フレームのインター・コード化(PまたはB)スライス内のビデオ・ブロックは、同じビデオ・フレーム内の隣接ブロックにおける基準サンプルに対する空間予測、または他の以前および/もしくは将来の基準ビデオ・フレーム内の基準サンプルに対する時間予測を使用することができる。
前に符号化された基準ブロック、たとえば隣接ブロックに基づく空間または時間予測は、コード化されるべき現在のビデオ・ブロックに対する予測ブロックを生じさせる。基準ブロックを発見するプロセスは、ブロック・マッチング・アルゴリズムによって実現されうる。コード化されるべき現在のブロックと予測ブロックとの間の画素差を表す残留データが、残留ブロック(residual block)または予測誤差と呼ばれる。インター・コード化ブロックは、予測ブロックを形成する基準フレーム内の基準ブロックおよび残留ブロックを指す動きベクトルに従って符号化される。動きベクトルを判定するプロセスは、典型的に、動き推定と呼ばれる。イントラ・コード化ブロックは、イントラ予測モードおよび残留ブロックに従って符号化される。さらに圧縮する場合、残留ブロックが画素ドメインから変換ドメイン、たとえば周波数ドメインに変換されて、残留変換係数を生じさせ、残留変換係数は次いで量子化されてもよい。量子化された変換係数は、最初は2次元アレイで配列されており、走査されて変換係数の1次元ベクトルをもたらすことができ、次いでビデオ・ビットストリームにエントロピー符号化されて、さらなる圧縮を実現することができる。
符号化されたビデオ・ビットストリームは次いで、デジタル・ビデオ能力を有する別の電子デバイスによってアクセスされるようにコンピュータ可読記憶媒体(たとえば、フラッシュ・メモリ)内に保存され、または電子デバイスへ有線もしくは無線で直接伝送される。電子デバイスは次いで、たとえば符号化されたビデオ・ビットストリームを解析して、ビットストリームから構文要素(syntax elements)を取得し、ビットストリームから取得された構文要素に少なくとも部分的に基づいて、符号化されたビデオ・ビットストリームからデジタル・ビデオ・データをその元の形式に再構築することによって、ビデオの解凍(上述されたビデオ圧縮とは逆のプロセスである)を実行し、再構築されたデジタル・ビデオ・データを電子デバイスのディスプレイ上に描画する。
デジタル・ビデオの品質が高解像度から4K×2K、またはさらには8K×4Kになるとともに、符号化/復号されるべきビデ・データの量は指数関数的に増加する。復号されたビデオ・データの画像品質を維持しながら、ビデオ・データがより効率的に符号化/復号されうる方法が、常に課題となっている。
本出願は、ビデオ・データの符号化および復号、より詳細には、ルマ成分とクロマ成分との間の成分間(cross-component)の関係を探ることによってコーディング効率を改善することを含めて、ルマ成分およびクロマ成分両方のコーディング効率を改善する方法および装置に関係する実装例を記載する。
本出願の第1の態様によれば、ビデオ・データを復号する方法が、ビデオ・データから、APS内に記憶された複数の以前に使用された成分間サンプル適応オフセット(Cross-Component Sample Adaptive Offset)(CCSAO)フィルタ・オフセット・セット(filter offset set)に関連付けられた適応パラメータ・セット(APS)識別子を受信することと、ビデオ・データから、現在のピクチャまたはスライスに使用されたAPS識別子を示すピクチャ・ヘッダ(PH)またはスライス・ヘッダ(SH)内の構文を受信することと、現在のコーディング・ツリー・ユニット(CTU)に対して、APS識別子に関連付けられたAPS内の複数のオフセット・セットから、特定の以前に使用されたCCSAOフィルタ・オフセット・セットを示すフィルタ・セット索引を復号することと、特定の以前に使用されたCCSAOフィルタ・オフセット・セットを、ビデオ・データの現在のCTUに適用することとを含む。
いくつかの実施形態では、ビデオ・データは、第1の成分および第2の成分を含み、特定の以前に使用されたCCSAOフィルタ・オフセット・セットは、第2の成分のそれぞれのサンプルに関連付けられた第1の成分の1組の1つまたは複数のサンプルから、第2の成分に対するそれぞれの分類子を判定し、それぞれの分類子に従って、第2の成分のそれぞれのサンプルに対するそれぞれのサンプル・オフセット(sample offset)を判定して、判定されたそれぞれのサンプル・オフセットに基づいて、第2の成分のそれぞれのサンプルを修正し、それぞれの各分類子に対する1組の対応する判定されたそれぞれのサンプル・オフセットを、特定の以前に使用されたCCSAOフィルタ・オフセット・セットとして記憶することによって取得される。
本出願の第2の態様によれば、電子装置が、1つまたは複数の処理ユニットと、メモリと、メモリ内に記憶された複数のプログラムとを含む。プログラムは、1つまたは複数の処理ユニットによって実行されたとき、電子装置に、上述されたビデオ・データをコード化する方法を実行させる。
本出願の第3の態様によれば、非一時的コンピュータ可読記憶媒体が、1つまたは複数の処理ユニットを有する電子装置による実行のために、複数のプログラムを記憶する。プログラムは、1つまたは複数の処理ユニットによって実行されたとき、電子装置に、上述されたビデオ・データをコード化する方法を実行させる。
本出願の第4の態様によれば、コンピュータ可読記憶媒体が、上述されたビデオ・コーディング方法によって生成されたビデオ情報を含むビットストリームを記憶する。
上記の概略的な説明および以下の詳細な説明はどちらも単なる例であり、本開示を制限するものではないことを理解されたい。
添付の図面は、実装例のさらなる理解を提供するために含まれ、本明細書に組み込まれて、本明細書の一部を構成するものであり、記載される実装例を示し、本説明とともに根本的な原理を説明する働きをする。同じ参照番号は、対応する部分を指す。
次に、添付の図面にその例が示されている特有の実装例を詳細に参照する。以下の詳細な説明において、本明細書に提示されている主題の理解を支援するために、多数の非限定的な特有の詳細について述べる。しかし、特許請求の範囲から逸脱することなく様々な代替手段が使用されてよく、この主題はこれらの特有の詳細がなくても実施されうることが、当業者には明らかであろう。たとえば、本明細書に提示されている主題は、デジタル・ビデオ能力を有する多くのタイプの電子デバイスで実装されうることが、当業者には明らかであろう。
第1世代のAVS規格は、中華民国国家標準「Information Technology, Advanced Audio Video Coding, Part 2: Video」(AVS1として知られている)、および「Information Technology, Advanced Audio Video Coding Part 16: Radio Television Video」(AVS+として知られている)を含む。これは、MPEG-2規格と比較すると、同じ知覚品質で約50%のビット速度の節減を提供することができる。第2世代のAVS規格は、一連の中華民国国家標準「Information Technology, Efficient Multimedia Coding」(AVS2として知られている)を含み、これは主に追加のHD TVプログラムの伝送を標的とする。AVS2のコーディング効率は、AVS+のコーディング効率の2倍である。一方、AVS2規格のビデオ部は、Institute of Electrical and Electronics Engineers(IEEE)によって、応用のための1つの国際規格として提出された。AVS3規格は、最新の国際規格HEVCのコーディング効率をしのぐことを目的とするUHDビデオ向けの1つの新世代のビデオ・コーディング規格であり、HEVC規格に比べて約30%のビット速度の節減を提供する。2019年3月、第68回AVS会議において、AVS3-P2ベースラインが完成され、これはHEVC規格に比べて約30%のビット速度の節減を提供する。現在、高性能モデル(HPM)と呼ばれる1つの基準ソフトウェアは、AVS3規格の基準実装を実証するために、AVSグループによって維持されている。HEVCと同様に、AVS3規格は、ブロック・ベースのハイブリッド・ビデオ・コーディング・フレームワークの上に構築されている。
図1は、本開示のいくつかの実装例によるビデオ・ブロックを並行して符号化および復号するための例示的なシステム10を示すブロック図である。図1に示されているように、システム10はソース・デバイス12を含み、ソース・デバイス12は、ビデオ・データを生成し、後に宛先デバイス14によって復号されるように符号化する。ソース・デバイス12および宛先デバイス14は、デスクトップまたはラップトップ・コンピュータ、タブレット・コンピュータ、スマートフォン、セットトップ・ボックス、デジタル・テレビジョン、カメラ、表示デバイス、デジタル・メディア・プレーヤ、ビデオ・ゲーミング・コンソール、ビデオ・ストリーミング・デバイスなどを含む多種多様な電子デバイスのいずれかを構成することができる。いくつかの実装例では、ソース・デバイス12および宛先デバイス14には無線通信能力が装備される。
いくつかの実装例では、宛先デバイス14は、リンク16を介して、復号されるべき符号化されたビデオ・データを受信することができる。リンク16は、符号化されたビデオ・データをソース・デバイス12から宛先デバイス14へ移動させることが可能な任意のタイプの通信媒体またはデバイスを備えることができる。一例では、リンク16は、ソース・デバイス12が符号化されたビデオ・データを直接宛先デバイス14へ実時間で伝送することを有効化するための通信媒体を備えることができる。符号化されたビデオ・データは、無線通信プロトコルなどの通信規格に従って変調され、宛先デバイス14へ伝送されうる。通信媒体は、無線周波(RF)スペクトルまたは1つもしくは複数の物理的伝送線など、任意の無線または有線通信媒体を含むことができる。通信媒体は、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、またはグローバル・ネットワーク、たとえばインターネットなど、パケット・ベースのネットワークの一部を形成することができる。通信媒体は、ソース・デバイス12から宛先デバイス14への通信を容易にするのに有用になりうるルータ、スイッチ、基地局、または任意の他の機器を含むことができる。
いくつかの他の実装例では、符号化されたビデオ・データは、出力インターフェース22から記憶デバイス32へ伝送されうる。その後、記憶デバイス32内の符号化されたビデオ・データは、宛先デバイス14によって入力インターフェース28を介してアクセスされうる。記憶デバイス32は、符号化されたビデオ・データを記憶するためのハード・ドライブ、Blu-rayディスク、DVD、CD-ROM、フラッシュ・メモリ、揮発性もしくは不揮発性メモリ、または任意の他の好適なデジタル記憶媒体など、様々な分散型(distributed)または局所(locally)アクセス型のデータ記憶媒体のいずれかを含むことができる。さらなる例では、記憶デバイス32は、ソース・デバイス12によって生成される符号化されたビデオ・データを保持することができるファイル・サーバまたは別の中間記憶デバイスに対応することができる。宛先デバイス14は、記憶デバイス32からストリーミングまたはダウンロードを介して、記憶されたビデオ・データにアクセスすることができる。ファイル・サーバは、符号化されたビデオ・データを記憶し、符号化されたビデオ・データを宛先デバイス14へ伝送することが可能な任意のタイプのコンピュータとすることができる。例示的なファイル・サーバは、ウェブ・サーバ(たとえば、ウェブサイト向け)、FTPサーバ、ネットワーク・アタッチ・ストレージ(NAS)デバイス、またはローカル・ディスク・ドライブを含む。宛先デバイス14は、ファイル・サーバ上に記憶されている符号化されたビデオ・データにアクセスするのに好適な無線チャネル(たとえば、Wi-Fi接続)、有線接続(たとえば、DSL、ケーブル・モデムなど)、または両方の組合せを含む任意の規格データ接続を介して、符号化されたビデオ・データにアクセスすることができる。記憶デバイス32からの符号化されたビデオ・データの伝送は、ストリーミング伝送、ダウンロード伝送、または両方の組合せとすることができる。
図1に示されているように、ソース・デバイス12は、ビデオ・ソース18、ビデオ・エンコーダ20、および出力インターフェース22を含む。ビデオ・ソース18は、ビデオ取り込みデバイス、たとえばビデオ・カメラ、以前に取り込まれたビデオを含むビデオ・アーカイブ、ビデオ・コンテンツ・プロバイダからビデオを受信するためのビデオ・フィード・インターフェース、および/もしくはコンピュータ・グラフィックス・データをソース・ビデオとして生成するためのコンピュータ・グラフィックス・システムなどのソース、またはそのようなソースの組合せを含むことができる。一例として、ビデオ・ソース18がセキュリティ監視システムのビデオ・カメラである場合、ソース・デバイス12および宛先デバイス14は、カメラ付き電話またはテレビ電話を形成することができる。しかし、本出願に記載されている実装例は、一般のビデオ・コーディングに該当することができ、無線および/または有線の応用例に適用されうる。
取り込まれた、事前に取り込まれた、またはコンピュータで生成されたビデオは、ビデオ・エンコーダ20によって符号化されうる。符号化されたビデオ・データは、ソース・デバイス12の出力インターフェース22を介して宛先デバイス14へ直接伝送されうる。符号化されたビデオ・データはまた(または別法として)、復号および/または再生のために、宛先デバイス14または他のデバイスによって後にアクセスされるように、記憶デバイス32上へ記憶されうる。出力インターフェース22は、モデムおよび/またはトランスミッタをさらに含むことができる。
宛先デバイス14は、入力インターフェース28、ビデオ・デコーダ30、および表示デバイス34を含む。入力インターフェース28は、レシーバおよび/またはモデムを含むことができ、リンク16を介して符号化されたビデオ・データを受信することができる。リンク16を介して通信される、または記憶デバイス32上に提供される、符号化されたビデオ・データは、ビデオ・データを復号する際にビデオ・デコーダ30によって使用されるように、ビデオ・エンコーダ20によって生成された様々な構文要素を含むことができる。そのような構文要素は、通信媒体上で伝送される、記憶媒体上に記憶される、またはファイル・サーバに記憶される、符号化されたビデオ・データ内に含まれうる。
いくつかの実装例では、宛先デバイス14は、表示デバイス34を含むことができ、表示デバイス34は、一体化された表示デバイスであっても、宛先デバイス14と通信するように構成された外部表示デバイスであってもよい。表示デバイス34は、復号されたビデオ・データを使用者に表示し、液晶ディスプレイ(LCD)、プラズマ・ディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプの表示デバイスなど、様々な表示デバイスのいずれかを構成することができる。
ビデオ・エンコーダ20およびビデオ・デコーダ30は、VVC、HEVC、MPEG-4、Part 10、Advanced Video Coding(AVC)、AVSなどの専有のもしくは業界の規格、またはそのような規格の拡張に従って動作することができる。本出願は、特有のビデオ・コーディング/復号規格に限定されるものではなく、他のビデオ・コーディング/復号規格に該当しうることを理解されたい。概して、ソース・デバイス12のビデオ・エンコーダ20は、これらの現在または将来の規格のいずれかに従って、ビデオ・データを符号化するように構成されうることが企図される。同様に、概して、宛先デバイス14のビデオ・デコーダ30は、これらの現在または将来の規格のいずれかに従って、ビデオ・データを復号するように構成されうることも企図される。
ビデオ・エンコーダ20およびビデオ・デコーダ30は各々、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールド・プログラマブル・ゲート・アレイ(FPGA)、離散論理、ソフトウェア、ハードウェア、ファームウェア、またはこれらの任意の組合せなど、様々な好適なエンコーダ回路のいずれかとして実装されうる。部分的にソフトウェアで実装されるとき、電子デバイスは、ソフトウェアに対する命令を好適な非一時的コンピュータ可読媒体に記憶し、1つまたは複数のプロセッサを使用してこれらの命令をハードウェアで実行して、本開示に開示されているビデオ・コーディング/復号動作を実行することができる。ビデオ・エンコーダ20およびビデオ・デコーダ30の各々は、1つまたは複数のエンコーダまたはデコーダに含まれてよく、これらはいずれも、それぞれのデバイスにおいて複合エンコーダ/デコーダ(CODEC)の一部として一体化されうる。
図2は、本出願に記載されているいくつかの実装例による例示的なビデオ・エンコーダ20を示すブロック図である。ビデオ・エンコーダ20は、ビデオ・フレーム内でビデオ・ブロックのイントラおよびインター予測コーディングを実行することができる。イントラ予測コーディングは、所与のビデオ・フレームまたはピクチャ内のビデオ・データの空間冗長性を低減または除去するために、空間予測に依拠する。インター予測コーディングは、ビデオ・シーケンスの隣接するビデオ・フレームまたはピクチャ内のビデオ・データの時間冗長性を低減または除去するために、時間予測に依拠する。
図2に示されているように、ビデオ・エンコーダ20は、ビデオ・データ・メモリ40、予測処理ユニット41、復号ピクチャ・バッファ(DPB)64、加算器50、変換処理ユニット52、量子化ユニット54、およびエントロピー符号化ユニット56を含む。予測処理ユニット41は、動き推定ユニット42、動き補償ユニット44、区画ユニット45、イントラ予測処理ユニット46、およびイントラ・ブロック・コピー(BC)ユニット48をさらに含む。いくつかの実装例では、ビデオ・エンコーダ20はまた、ビデオ・ブロックの再構築のための逆量子化ユニット58、逆変換処理ユニット60、および加算器62を含む。ブロック境界をフィルタリングして再構築されたビデオからブロック・アーティファクトを除去するために、デブロッキング・フィルタなどのループ内フィルタ63が、加算器62とDPB64との間に置かれうる。デブロッキング・フィルタに加えて、加算器62の出力をフィルタリングするために、別のループ内フィルタ63も使用されうる。基準ピクチャ・ストアに入れられ、将来のビデオ・ブロックをコード化するための基準として使用される前に、サンプル適応オフセット(SAO)および適応ループ内フィルタ(ALF)などのさらなるループ内フィルタ63が、再構築されたCU上で適用されうる。ビデオ・エンコーダ20は、固定されたもしくはプログラム可能なハードウェア・ユニットの形態をとることができ、または示されている固定されたもしくはプログラム可能なハードウェア・ユニットのうちの1つもしくは複数の間で分割されうる。
ビデオ・データ・メモリ40は、ビデオ・エンコーダ20の構成要素によって符号化されるべきビデオ・データを記憶することができる。ビデオ・データ・メモリ40内のビデオ・データは、たとえばビデオ・ソース18から取得されうる。DPB64は、ビデオ・エンコーダ20(たとえば、イントラまたはインター予測コーディング・モード)がビデオ・データを符号化する際に使用するための基準ビデオ・データを記憶するバッファである。ビデオ・データ・メモリ40およびDPB64は、様々なメモリ・デバイスのいずれかによって形成されうる。様々な例では、ビデオ・データ・メモリ40は、ビデオ・エンコーダ20の他の構成要素とオンチップであっても、それらの構成要素に対してオフチップであってもよい。
図2に示されているように、ビデオ・データを受信した後、予測処理ユニット41内の区画ユニット45が、ビデオ・データをビデオ・ブロックに分割する。この分割はまた、ビデオ・データに関連付けられた4分木構造などの事前定義された分割構造に従って、ビデオ・フレームをスライス、タイル、または他のより大きいコーディング・ユニット(CU)に分割することを含むこともできる。ビデオ・フレームは、複数のビデオ・ブロック(またはタイルと呼ばれる数組のビデオ・ブロック)に分割されうる。予測処理ユニット41は、誤差結果(たとえば、コード化速度および歪みレベル)に基づいて、現在のビデオ・ブロックに対して、複数のイントラ予測コーディング・モード(intra predictive coding modes)のうちの1つ、または複数のインター予測コーディング・モード(inter predictive coding modes)のうちの1つなど、複数の可能な予測コーディング・モードのうちの1つを選択することができる。予測処理ユニット41は、結果のイントラまたはインター予測コード化ブロックを、残留ブロックを生成するために加算器50に提供することができ、後に基準フレームの一部として使用するための符号化されたブロックを再構築するために加算器62に提供することができる。予測処理ユニット41はまた、動きベクトル、イントラモード・インジケータ、区画情報などの構文要素、および他のそのような構文情報を、エントロピー符号化ユニット56に提供する。
現在のビデオ・ブロックに対して適当なイントラ予測コーディング・モードを選択するために、予測処理ユニット41内のイントラ予測処理ユニット46は、空間予測を提供するために、コード化されるべき現在のブロックと同じフレーム内の1つまたは複数の隣接ブロックに対して、現在のビデオ・ブロックのイントラ予測コーディングを実行することができる。予測処理ユニット41内の動き推定ユニット42および動き補償ユニット44は、時間予測を提供するために、1つまたは複数の基準フレーム内の1つまたは複数の予測ブロックに対して、現在のビデオ・ブロックのインター予測コーディングを実行する。ビデオ・エンコーダ20は、たとえばビデオ・データの各ブロックに対して適当なコーディング・モードを選択するために、複数のコーディング・パスを実行することができる。
いくつかの実装例では、動き推定ユニット42が、ビデオ・フレームのシーケンス内の所定のパターンに従って、基準ビデオ・フレーム内の予測ブロックに対する現在のビデオ・フレーム内のビデオ・ブロックの予測ユニット(PU)の変位を示す動きベクトルを生成することによって、現在のビデオ・フレームに対するインター予測モードを判定する。動き推定ユニット42によって実行される動き推定は、動きベクトルを生成するプロセスであり、ビデオ・ブロックに対する動きを推定する。動きベクトルは、たとえば、現在のフレーム内でコード化されている現在のブロック(または他のコード化ユニット)に対する基準フレーム内の予測ブロック(または他のコード化ユニット)に対する現在のビデオ・フレームまたはピクチャ内のビデオ・ブロックのPUの変位を示すことができる。所定のパターンは、PフレームまたはBフレームとしてシーケンス内のビデオ・フレームを指定することができる。イントラBCユニット48は、インター予測のための動き推定ユニット42による動きベクトルの判定と同様に、イントラBCコーディングのために、ベクトル、たとえばブロック・ベクトルを判定することができ、またはブロック・ベクトルを判定するために、動き推定ユニット42を利用することができる。
予測ブロックは、基準フレームのうち、画素差に関してコード化されるべきビデオ・ブロックのPUに密接に整合すると見なされたブロックであり、これは、絶対差和(SAD)、2乗差和(SSD)、または他の差分計量によって判定されうる。いくつかの実装例では、ビデオ・エンコーダ20は、DPB64に記憶されている基準フレームの整数未満の画素位置に対する値を計算することができる。たとえば、ビデオ・エンコーダ20は、基準フレームの4分の1画素位置、8分の1画素位置、または他の分数の画素位置の値を補間(interpolate)することができる。したがって、動き推定ユニット42は、完全な画素位置および分数の画素位置に対する動き探索を実行し、分数の画素精度で動きベクトルを出力することができる。
動き推定ユニット42は、PUの位置と、第1の基準フレーム・リスト(List0)または第2の基準フレーム・リスト(List1)から選択された基準フレームの予測ブロックの位置とを比較することによって、インター予測コード化フレーム内のビデオ・ブロックのPUに対する動きベクトルを計算し、これらのリストの各々は、DPB64に記憶されている1つまたは複数の基準フレームを識別する。動き推定ユニット42は、計算された動きベクトルを動き補償ユニット44へ送信し、次いでエントロピー符号化ユニット56へ送信する。
動き補償ユニット44によって実行される動き補償は、動き推定ユニット42によって判定された動きベクトルに基づいて、予測ブロックをフェッチまたは生成することを伴うことができる。現在のビデオ・ブロックのPUに対する動きベクトルを受信したとき、動き補償ユニット44は、基準フレーム・リストのうちの1つにおいて動きベクトルが指す予測ブロックの位置を特定し、この予測ブロックをDPB64から取り出し、この予測ブロックを加算器50へ転送することができる。加算器50は次いで、コード化されている現在のビデオ・ブロックの画素値から、動き補償ユニット44によって提供された予測ブロックの画素値を引くことによって、画素差値の残留ビデオ・ブロックを形成する。残留ビデオ・ブロックを形成する画素差値は、ルマもしくはクロマ差成分または両方を含むことができる。動き補償ユニット44はまた、ビデオ・フレームのビデオ・ブロックを復号する際にビデオ・デコーダ30によって使用されるように、ビデオ・フレームのビデオ・ブロックに関連付けられた構文要素を生成することができる。構文要素は、たとえば、予測ブロックを識別するために使用される動きベクトルを画定する構文要素、予測モードを示す任意のフラグ、または本明細書に記載されている任意の他の構文情報を含むことができる。動き推定ユニット42および動き補償ユニット44は高度に一体化されうるが、概念上の目的で別個に示されていることに留意されたい。
いくつかの実装例では、イントラBCユニット48は、動き推定ユニット42および動き補償ユニット44に関連して上述されたものと同様に、ベクトルを生成して予測ブロックをフェッチすることができるが、予測ブロックは、コード化されている現在のブロックと同じフレーム内にあり、ベクトルは、動きベクトルではなくブロック・ベクトルと呼ばれている。特に、イントラBCユニット48は、現在のブロックを符号化するために使用するイントラ予測モードを判定することができる。いくつかの例では、イントラBCユニット48は、たとえば別個の符号化パス中に、様々なイントラ予測モードを使用して現在のブロックを符号化することができ、速度歪み分析によってその性能を試験することができる。次に、イントラBCユニット48は、様々な試験されたイントラ予測モードの中から適当なイントラ予測モードを選択し、それに応じてイントラモード・インジケータを使用および生成することができる。たとえば、イントラBCユニット48は、様々な試験されたイントラ予測モードに対して速度歪み分析を使用して速度歪み値を計算することができ、試験されたモードの中から最善の速度歪み特性を有するイントラ予測モードを適当なイントラ予測モードとして選択し、使用することができる。速度歪み分析は、概して、符号化されたブロックと、符号化されたブロックをもたらすために符号化された元の符号化されていないブロックとの間で、歪み(または誤差)の量を判定し、ならびに符号化されたブロックをもたらすために使用されるビット速度(すなわち、ビットの数)を判定する。イントラBCユニット48は、様々な符号化されたブロックに対する歪みおよび速度からの比を計算して、どのイントラ予測モードがそのブロックに対して最善の速度歪み値を呈するかを判定することができる。
他の例では、イントラBCユニット48は、本明細書に記載されている実装例によって、動き推定ユニット42および動き補償ユニット44を全体的または部分的に使用して、イントラBC予測のためのそのような機能を実行することができる。いずれの場合も、イントラ・ブロック・コピーのために、予測ブロックは、画素差に関してコード化されるべきブロックに密接に整合すると見なされたブロックとすることができ、これは、絶対差和(SAD)、2乗差和(SSD)、または他の差分計量によって判定されてよく、予測ブロックの識別は、整数未満の画素位置に対する値の計算を含むことができる。
予測ブロックが、イントラ予測に従って同じフレームからのものであるか、それともインター予測に従って異なるフレームからのものであるかにかかわらず、ビデオ・エンコーダ20は、コード化されている現在のビデオ・ブロックの画素値から予測ブロックの画素値を引いて画素差値を形成することによって、残留ビデオ・ブロックを形成することができる。残留ビデオ・ブロックを形成する画素差値は、ルマおよびクロマ両方の成分差を含むことができる。
イントラ予測処理ユニット46は、上述されているように、動き推定ユニット42および動き補償ユニット44によって実行されるインター予測、またはイントラBCユニット48によって実行されるイントラ・ブロック・コピー予測に対する代替手段として、現在のビデオ・ブロックをイントラ予測することができる。特に、イントラ予測処理ユニット46は、現在のブロックを符号化するために使用するイントラ予測モードを判定することができる。その際、イントラ予測処理ユニット46は、たとえば別個の符号化パス中に、様々なイントラ予測モードを使用して現在のブロックを符号化することができ、イントラ予測処理ユニット46(または、いくつかの例ではモード選択ユニット)は、試験されたイントラ予測モードから適当なイントラ予測モードを選択して使用することができる。イントラ予測処理ユニット46は、そのブロックに対する選択されたイントラ予測モードを示す情報を、エントロピー符号化ユニット56に提供することができる。エントロピー符号化ユニット56は、ビットストリーム内の選択されたイントラ予測モードを示す情報を符号化することができる。
予測処理ユニット41が、インター予測またはイントラ予測を介して、現在のビデオ・ブロックに対する予測ブロックを判定した後、加算器50は、現在のビデオ・ブロックから予測ブロックを引くことによって、残留ビデオ・ブロックを形成する。残留ブロック内の残留ビデオ・データは、1つまたは複数の変換ユニット(TU)に含まれてよく、変換処理ユニット52に提供される。変換処理ユニット52は、離散コサイン変換(DCT)または概念上類似の変換などの変換を使用して、残留ビデオ・データを残留変換係数に変換する。
変換処理ユニット52は、結果の変換係数を量子化ユニット54へ送信することができる。量子化ユニット54は、変換係数を量子化して、ビット速度をさらに低減させる。量子化プロセスはまた、係数のいくつかまたはすべてに関連付けられたビット深さを低減させることができる。量子化度は、量子化パラメータを調整することによって修正されうる。いくつかの例では、量子化ユニット54は次いで、量子化された変換係数を含む行列の走査を実行することができる。別法として、エントロピー符号化ユニット56が走査を実行することができる。
量子化に続いて、エントロピー符号化ユニット56は、たとえばコンテキスト適応型可変長コーディング(CAVLC)、コンテキスト適応型バイナリ算術コーディング(CABAC)、構文ベースのコンテキスト適応型バイナリ算術コーディング(SBAC)、確率区間分割エントロピー(PIPE)コーディング、または別のエントロピー符号化方法もしくは技法を使用して、量子化された変換係数をビデオ・ビットストリームにエントロピー符号化する。符号化されたビットストリームは次いで、ビデオ・デコーダ30に伝送されてよく、または後のビデオ・デコーダ30への伝送もしくはビデオ・デコーダ30による取出しのために、記憶デバイス32内に保管されてよい。エントロピー符号化ユニット56はまた、コード化されている現在のビデオ・フレームに対する動きベクトルおよび他の構文要素をエントロピー符号化することができる。
逆量子化ユニット58および逆変換処理ユニット60は、それぞれ逆量子化および逆変換を適用して、画素ドメイン内の残留ビデオ・ブロックを再構築し、他のビデオ・ブロックの予測のための基準ブロックを生成する。上述されているように、動き補償ユニット44は、DPB64に記憶されているフレームの1つまたは複数の基準ブロックから、動き補償予測ブロックを生成することができる。動き補償ユニット44はまた、1つまたは複数の補間フィルタを予測ブロックに適用して、動き推定で使用するための整数未満の画素値を計算することができる。
加算器62は、動き補償ユニット44によってもたらされる動き補償予測ブロックに、再構築された残留ブロックを加えて、DPB64に記憶するための基準ブロックをもたらす。基準ブロックは次いで、イントラBCユニット48、動き推定ユニット42、および動き補償ユニット44によって、後のビデオ・フレーム内の別のビデオ・ブロックをインター予測するための予測ブロックとして使用されうる。
図3は、本出願のいくつかの実装例による例示的なビデオ・デコーダ30を示すブロック図である。ビデオ・デコーダ30は、ビデオ・データ・メモリ79、エントロピー復号ユニット80、予測処理ユニット81、逆量子化ユニット86、逆変換処理ユニット88、加算器90、およびDPB92を含む。予測処理ユニット81は、動き補償ユニット82、イントラ予測処理ユニット84、およびイントラBCユニット85をさらに含む。ビデオ・デコーダ30は、復号プロセスを実行することができ、復号プロセスは概して、図2に関連してビデオ・エンコーダ20に関して上述された符号化プロセスとは逆方向である。たとえば、動き補償ユニット82は、エントロピー復号ユニット80から受信された動きベクトルに基づいて、予測データを生成することができ、イントラ予測ユニット84は、エントロピー復号ユニット80から受信されたイントラ予測モード・インジケータに基づいて、予測データを生成することができる。
いくつかの例では、ビデオ・デコーダ30のユニットは、本出願の実装例を実行するタスクが与えられうる。また、いくつかの例では、本開示の実装例は、ビデオ・デコーダ30のユニットの1つまたは複数の間で分割されうる。たとえば、イントラBCユニット85は、単独で、または動き補償ユニット82、イントラ予測処理ユニット84、およびエントロピー復号ユニット80などのビデオ・デコーダ30の他のユニットと組み合わせて、本出願の実装例を実行することができる。いくつかの例では、ビデオ・デコーダ30は、イントラBCユニット85を含まなくてもよく、イントラBCユニット85の機能は、動き補償ユニット82などの予測処理ユニット81の他の構成要素によって実行されうる。
ビデオ・データ・メモリ79は、ビデオ・デコーダ30の他の構成要素によって復号されるように、符号化されたビデオ・ビットストリームなどのビデオ・データを記憶することができる。ビデオ・データ・メモリ79に記憶されているビデオ・データは、たとえば記憶デバイス32から、カメラなどのローカル・ビデオ・ソースから、ビデオ・データの有線もしくは無線ネットワーク通信を介して、または物理的データ記憶媒体(たとえば、フラッシュ・ドライブまたはハード・ディスク)にアクセスすることによって、取得されうる。ビデオ・データ・メモリ79は、符号化されたビデオ・ビットストリームからの符号化されたビデオ・データを記憶するコード化ピクチャ・バッファ(CPB)を含むことができる。ビデオ・デコーダ30の復号ピクチャ・バッファ(DPB)92は、ビデオ・デコーダ30(たとえば、イントラまたはインター予測コーディング・モード)がビデオ・データを復号する際に使用するための基準ビデオ・データを記憶する。ビデオ・データ・メモリ79およびDPB92は、同期DRAM(SDRAM)を含むダイナミック・ランダム・アクセス・メモリ(DRAM)、磁気抵抗RAM(MRAM)、抵抗RAM(RRAM)などの様々なメモリ・デバイス、または他のタイプのメモリ・デバイスのいずれかによって形成されうる。例示の目的で、ビデオ・データ・メモリ79およびDPB92は、図3ではビデオ・デコーダ30の2つの別個の構成要素として描かれている。しかし、ビデオ・データ・メモリ79およびDPB92は、同じメモリ・デバイスによって提供されても、別個のメモリ・デバイスによって提供されてもよいことが、当業者には明らかであろう。いくつかの例では、ビデオ・データ・メモリ79は、ビデオ・デコーダ30の他の構成要素とオンチップであっても、それらの構成要素に対してオフチップであってもよい。
復号プロセス中、ビデオ・デコーダ30は、符号化されたビデオ・フレームのビデオ・ブロックおよび関連付けられた構文要素を表す符号化されたビデオ・ビットストリームを受信する。ビデオ・デコーダ30は、ビデオ・フレーム・レベルおよび/またはビデオ・ブロック・レベルで構文要素を受信することができる。ビデオ・デコーダ30のエントロピー復号ユニット80は、ビットストリームをエントロピー復号して、量子化された係数、動きベクトル、またはイントラ予測モード・インジケータ、および他の構文要素を生成する。エントロピー復号ユニット80は次いで、動きベクトルおよび他の構文要素を予測処理ユニット81へ転送する。
ビデオ・フレームが、イントラ予測コード化(I)フレームとしてコード化されるとき、または他のタイプのフレーム内のイントラ・コード化予測ブロックに対してコード化されるとき、予測処理ユニット81のイントラ予測処理ユニット84が、信号化されたイントラ予測モード、および現在のフレームの以前に復号されたブロックからの基準データに基づいて、現在のビデオ・フレームのビデオ・ブロックに対する予測データを生成することができる。
ビデオ・フレームが、インター予測コード化(すなわち、BまたはP)フレームとしてコード化されるとき、予測処理ユニット81の動き補償ユニット82が、エントロピー復号ユニット80から受信された動きベクトルおよび他の構文要素に基づいて、現在のビデオ・フレームのビデオ・ブロックに対する1つまたは複数の予測ブロックをもたらす。予測ブロックの各々は、基準フレーム・リストのうちの1つの基準フレームからもたらされうる。ビデオ・デコーダ30は、DPB92に記憶されている基準フレームに基づくデフォルト構築技法を使用して、基準フレーム・リストList0およびList1を構築しうる。
いくつかの例では、ビデオ・ブロックが、本明細書に記載されているイントラBCモード(intra BC mode)に従ってコード化されるとき、予測処理ユニット81のイントラBCユニット85が、エントロピー復号ユニット80から受信されたブロック・ベクトルおよび他の構文要素に基づいて、現在のビデオ・ブロックに対する予測ブロックをもたらす。予測ブロックは、ビデオ・エンコーダ20によって画定される現在のビデオ・ブロックと同じピクチャの再構築された領域内に位置することができる。
動き補償ユニット82および/またはイントラBCユニット85は、動きベクトルおよび他の構文要素を解析することによって、現在のビデオ・フレームのビデオ・ブロックに対する予測情報を判定し、次いで予測情報を使用して、復号されている現在のビデオ・ブロックに対する予測ブロックをもたらす。たとえば、動き補償ユニット82は、受信された構文要素のうちのいくつかを使用して、ビデオ・フレームのビデオ・ブロックをコード化するために使用される予測モード(たとえば、イントラまたはインター予測)、インター予測フレーム・タイプ(たとえば、BまたはP)、フレームの基準フレーム・リストの1つまたは複数に対する構築情報、フレームの各インター予測符号化ビデオ・ブロックに対する動きベクトル、フレームの各インター予測コード化ビデオ・ブロックに対するインター予測状態、および現在のビデオ・フレーム内のビデオ・ブロックを復号するための他の情報を判定する。
同様に、イントラBCユニット85は、受信された構文要素のうちのいくつか、たとえばフラグを使用して、現在のビデオ・ブロックがイントラBCモードを使用して予測されたこと、再構築された領域内に位置し、DPB92に記憶されるべきフレームのビデオ・ブロックの構築情報、フレームのイントラBC予測された各ビデオ・ブロックに対するブロック・ベクトル、フレームのイントラBC予測された各ビデオ・ブロックに対するイントラBC予測状態、および現在のビデオ・フレーム内のビデオ・ブロックを復号するための他の情報を判定することができる。
動き補償ユニット82はまた、基準ブロックの整数未満の画素に対する補間値を計算するためにビデオ・ブロックの符号化中にビデオ・エンコーダ20によって使用される補間フィルタを使用して、補間を実行することができる。この場合、動き補償ユニット82は、受信された構文要素から、ビデオ・エンコーダ20によって使用される補間フィルタを判定することができ、それらの補間フィルタを使用して、予測ブロックをもたらすことができる。
逆量子化ユニット86は、量子化度を判定するためにビデオ・フレーム内の各ビデオ・ブロックに対してビデオ・エンコーダ20によって計算された同じ量子化パラメータを使用して、ビットストリーム内に提供されているエントロピー復号ユニット80によってエントロピー復号された量子化された変換係数を逆量子化する。逆変換処理ユニット88は、逆変換、たとえば逆DCT、逆整数変換、または概念上類似の逆変換プロセスを変換係数に適用して、画素ドメインにおける残留ブロックを再構築する。
動き補償ユニット82またはイントラBCユニット85が、ベクトルおよび他の構文要素に基づいて、現在のビデオ・ブロックに対する予測ブロックを生成した後、加算器90は、逆変換処理ユニット88からの残留ブロックと、動き補償ユニット82およびイントラBCユニット85によって生成された対応する予測ブロックとを加算することによって、現在のビデオ・ブロックに対する復号されたビデオ・ブロックを再構築する。復号されたビデオ・ブロックをさらに処理するために、ループ内フィルタ91が、加算器90とDPB92との間に置かれうる。基準ピクチャ・ストアに入れられる前に、デブロッキング・フィルタ、サンプル適応オフセット(SAO)、および適応ループ内フィルタ(ALF)などのループ内フィルタ91が、再構築されたCU上で適用されうる。所与のフレーム内の復号されたビデオ・ブロックは次いで、DPB92に記憶され、DPB92は、次のビデオ・ブロックの後の動き補償のために使用される基準フレームを記憶する。DPB92、またはDPB92とは別個のメモリ・デバイスが、図1の表示デバイス34などの表示デバイス上に後に提示するために、復号されたビデオを記憶することもできる。
典型的なビデオ・コーディング・プロセスでは、ビデオ・シーケンスは典型的に、順序付けられた1組のフレームまたはピクチャを含む。各フレームは、SL、SCb、およびSCrで示される3つのサンプル・アレイを含むことができる。SLは、ルマ・サンプルの2次元アレイである。SCbは、Cbクロマ・サンプルの2次元アレイである。SCrは、Crクロマ・サンプルの2次元アレイである。他の事例では、フレームは単色であってよく、したがってルマ・サンプルの1つの2次元アレイのみを含む。
HEVCと同様に、AVS3規格は、ブロック・ベースのハイブリッド・ビデオ・コーディング・フレームワークの上に構築されている。入力されたビデオ信号は、ブロック(コーディング・ユニット(CU)と呼ばれる)ごとに処理される。4分木のみに基づいてブロックを分割するHEVCとは異なり、AVS3では、1つのコーディング・ツリー・ユニット(CTU)が、4分木/2分木/拡張4分木に基づいて、変動する局所特性に適応するようにCUに分割される。加えて、HEVCにおける複数の区画ユニット・タイプの概念は除去され、すなわちAVS3には、CU、予測ユニット(PU)、および変換ユニット(TU)の分離が存在しない。代わりに、各CUは常に、さらなる区画なしで、予測および変換の両方のための基本ユニットとして使用される。AVS3の木区画構造では、まず1つのCTUが、4分木構造に基づいて分割される。次いで、各4分木リーフ・ノードが、2分木および拡張4分木構造に基づいてさらに分割されうる。
図4Aに示されているように、ビデオ・エンコーダ20(またはより具体的に、区画ユニット45)が、まずフレームを1組のコーディング・ツリー・ユニット(CTU)に分割することによって、フレームの符号化表現を生成する。ビデオ・フレームは、ラスタ・スキャン順序で左から右および上から下へ連続的に順序付けられた整数のCTUを含むことができる。各CTUは、最も大きい論理コーディング・ユニットであり、CTUの幅および高さは、ビデオ・エンコーダ20によってシーケンス・パラメータ・セットで信号化され、ビデオ・シーケンス内のすべてのCTUが、128×128、64×64、32×32、および16×16のうちの1つの同じサイズを有する。しかし、本出願は、必ずしも特定のサイズに限定されないことに留意されたい。図4Bに示されているように、各CTUは、ルマ・サンプルの1つのコーディング・ツリー・ブロック(CTB)と、クロマ・サンプルの2つの対応するコーディング・ツリー・ブロックと、これらのコーディング・ツリー・ブロックのサンプルをコード化するために使用される構文要素とを備えることができる。構文要素は、画素のコード化ブロックの異なるタイプのユニットの特性、およびビデオ・デコーダ30でビデオ・シーケンスが再構築されうる方法を記述し、これはインターまたはイントラ予測、イントラ予測モード、動きベクトル、および他のパラメータを含む。単色のピクチャ、または3つの別個の色平面を有するピクチャでは、CTUは、単一のコーディング・ツリー・ブロックと、このコーディング・ツリー・ブロックのサンプルをコード化するために使用される構文要素とを備えることができる。コーディング・ツリー・ブロックは、サンプルのN×Nブロックとすることができる。
より良好な性能を実現するために、ビデオ・エンコーダ20は、CTUのコーディング・ツリー・ブロック上で2分木分割、3分木分割、4分木分割、またはこれらの組合せなどのツリー分割を再帰的に実行し、CTUをより小さいコーディング・ユニット(CU)に分割することができる。図4Cに描かれているように、64×64のCTU400がまず、各々32×32のブロック・サイズを有する4つのより小さいCUに分割される。4つのより小さいCUの中で、CU410およびCU420は各々、ブロック・サイズで16×16の4つのCUに分割される。2つの16×16のCU430および440は各々、ブロック・サイズで8×8の4つのCUにさらに分割される。図4Dは、図4Cに描かれているCTU400の区画プロセスの終了結果を示す4分木データ構造を描いており、4分木の各リーフ・ノードは、32×32~8×8の範囲のそれぞれのサイズの1つのCUに対応する。図4Bに描かれているCTUと同様に、各CUは、ルマ・サンプルのコード化ブロック(CB)と、同じサイズのフレームのクロマ・サンプルの2つの対応するコード化ブロックと、これらのコード化ブロックのサンプルをコード化するために使用される構文要素とを備えることができる。単色のピクチャ、または3つの別個の色平面を有するピクチャでは、CUは、単一のコード化ブロックと、このコード化ブロックのサンプルをコード化するために使用される構文構造とを備えることができる。図4Cおよび図4Dに描かれている4分木分割は、例示のみを目的としており、1つのCTUが、4分木/3分木/2分木区画に基づいて変動する局所特性に適応するように、複数のCUに分割されうることに留意されたい。複数タイプのツリー構造では、1つのCTUが4分木構造によって分割され、各4分木リーフCUが、2分木および3分木構造によってさらに分割されうる。図4Eに示されているように、AVS3には5つの分割/区画タイプ、すなわち4分割、水平2分割、垂直2分割、水平拡張4分木分割、および垂直拡張4分木分割がある。
いくつかの実装例では、ビデオ・エンコーダ20は、CUのコード化ブロックを1つまたは複数のM×Nの予測ブロック(PB)にさらに分割することができる。予測ブロックは、同じインターまたはイントラ予測が適用されるサンプルの矩形(正方形または非正方形)ブロックである。CUの予測ユニット(PU)は、ルマ・サンプルの予測ブロックと、クロマ・サンプルの2つの対応する予測ブロックと、これらの予測ブロックを予測するために使用される構文要素とを備えることができる。単色のピクチャ、または3つの別個の色平面を有するピクチャでは、PUは、単一の予測ブロックと、この予測ブロックを予測するために使用される構文構造とを備えることができる。ビデオ・エンコーダ20は、CUの各PUのルマ、Cb、およびCr予測ブロックに対して、予測ルマ、Cb、およびCrブロックを生成することができる。
ビデオ・エンコーダ20は、イントラ予測またはインター予測を使用して、PUに対する予測ブロックを生成することができる。ビデオ・エンコーダ20がPUの予測ブロックを生成するためにイントラ予測を使用する場合、ビデオ・エンコーダ20は、このPUに関連付けられたフレームの復号されたサンプルに基づいて、PUの予測ブロックを生成することができる。ビデオ・エンコーダ20がPUの予測ブロックを生成するためにインター予測を使用する場合、ビデオ・エンコーダ20は、このPUに関連付けられたフレーム以外の1つまたは複数のフレームの復号されたサンプルに基づいて、PUの予測ブロックを生成することができる。
ビデオ・エンコーダ20がCUの1つまたは複数のPUに対する予測ルマ、Cb、およびCrブロックを生成した後、ビデオ・エンコーダ20は、CUの予測ルマ・ブロックをその元のルマ・コード化ブロックから引くことによって、このCUに対するルマ残留ブロックを生成することができ、CUのルマ残留ブロック内の各サンプルは、CUの予測ルマ・ブロックのうちの1つにおけるルマ・サンプルと、CUの元のルマ・コード化ブロックにおける対応するサンプルとの間の差を示す。同様に、ビデオ・エンコーダ20は、それぞれCUに対するCb残留ブロックおよびCr残留ブロックを生成することができ、CUのCb残留ブロック内の各サンプルは、CUの予測Cbブロックのうちの1つにおけるCbサンプルと、CUの元のCbコード化ブロックにおける対応するサンプルとの間の差を示し、CUのCr残留ブロック内の各サンプルは、CUの予測Crブロックのうちの1つにおけるCrサンプルと、CUの元のCrコード化ブロックにおける対応するサンプルとの間の差を示すことができる。
さらに、図4Cに示されているように、ビデオ・エンコーダ20は、4分木分割を使用して、CUのルマ、Cb、およびCr残留ブロックを1つまたは複数のルマ、Cb、およびCr変換ブロックに分解することができる。変換ブロックは、同じ変換が適用されるサンプルの矩形(正方形または非正方形)ブロックである。CUの変換ユニット(TU)は、ルマ・サンプルの変換ブロックと、クロマ・サンプルの2つの対応する変換ブロックと、変換ブロック・サンプルを変換するために使用される構文要素とを備えることができる。したがって、CUの各TUは、ルマ変換ブロック、Cb変換ブロック、およびCr変換ブロックに関連付けられうる。いくつかの例では、TUに関連付けられたルマ変換ブロックは、CUのルマ残留ブロックのサブブロックとなりうる。Cb変換ブロックは、CUのCb残留ブロックのサブブロックとなりうる。Cr変換ブロックは、CUのCr残留ブロックのサブブロックとなりうる。単色のピクチャ、または3つの別個の色平面を有するピクチャでは、TUは、単一の変換ブロックと、変換ブロックのサンプルを変換するために使用される構文構造とを備えることができる。
ビデオ・エンコーダ20は、TUのルマ変換ブロックに1つまたは複数の変換を適用して、このTUに対するルマ係数ブロックを生成することができる。係数ブロックは、変換係数の2次元アレイとなりうる。変換係数は、スカラ量となりうる。ビデオ・エンコーダ20は、TUのCb変換ブロックに1つまたは複数の変換を適用して、このTUに対するCb係数ブロックを生成することができる。ビデオ・エンコーダ20は、TUのCr変換ブロックに1つまたは複数の変換を適用して、このTUに対するCr係数ブロックを生成することができる。
係数ブロック(たとえば、ルマ係数ブロック、Cb係数ブロック、またはCr係数ブロック)を生成した後、ビデオ・エンコーダ20は、この係数ブロックを量子化することができる。量子化は、概して、場合により変換係数を表すために使用されるデータの量を低減させてさらなる圧縮を提供するために、変換係数が量子化されるプロセスを指す。ビデオ・エンコーダ20が係数ブロックを量子化した後、ビデオ・エンコーダ20は、量子化された変換係数を示す構文要素をエントロピー符号化することができる。たとえば、ビデオ・エンコーダ20は、量子化された変換係数を示す構文要素上で、コンテキスト適応型バイナリ算術コーディング(CABAC)を実行することができる。最後に、ビデオ・エンコーダ20は、コード化フレームの表現を形成するビットのシーケンスおよび関連付けられたデータを含むビットストリームを出力することができ、このビットストリームは、記憶デバイス32内に保存され、または宛先デバイス14へ伝送される。
ビデオ・エンコーダ20によって生成されたビットストリームを受信した後、ビデオ・デコーダ30は、ビットストリームを解析して、このビットストリームから構文要素を取得することができる。ビデオ・デコーダ30は、ビットストリームから取得された構文要素に少なくとも部分的に基づいて、ビデオ・データのフレームを再構築することができる。ビデオ・データを再構築するプロセスは概して、ビデオ・エンコーダ20によって実行される符号化プロセスとは逆方向である。たとえば、ビデオ・デコーダ30は、現在のCUのTUに関連付けられた係数ブロック上で逆変換を実行して、現在のCUのTUに関連付けられた残留ブロックを再構築することができる。ビデオ・デコーダ30はまた、現在のCUのPUに対する予測ブロックのサンプルを、現在のCUのTUの変換ブロックの対応するサンプルに加えることによって、現在のCUのコード化ブロックを再構築する。フレームの各CUに対するコード化ブロックを再構築した後、ビデオ・デコーダ30は、このフレームを再構築することができる。
SAOは、デブロッキング・フィルタの適用後、エンコーダによって伝送されるルックアップ・テーブルの値に基づいて、オフセット値を各サンプルに条件付きで加えることによって、復号されたサンプルを修正するプロセスである。SAOフィルタリングは、構文要素sao-type-idxによってCTBごとに選択されるフィルタリング・タイプに基づいて、領域ごとに実行される。sao-type-idxに対する0の値は、SAOフィルタがCTBに適用されないことを示し、値1および2は、それぞれバンド・オフセットおよびエッジ・オフセットのフィルタリング・タイプの使用を信号化する。1に等しいsao-type-idxによって指定されるバンド・オフセット・モードで、選択されるオフセット値は、サンプル振幅に直接依存する。このモードで、完全なサンプル振幅範囲が、32個のバンドと呼ばれるセグメントに均一に分割され、これらのバンドのうちの4つ(32個のバンド内で連続している)に属するサンプル値が、バンド・オフセットとして示される伝送された値を加えることによって修正され、この値は正または負とすることができる。4つの連続するバンドを使用する主な理由は、バンディング・アーティファクト(banding artifacts)が現れうる平滑な区域内では、CTBのサンプル振幅がこれらのバンドのいくつかのみに集中される傾向があるからである。加えて、4つのオフセットを使用するという設計上の選択は、同じく4つのオフセット値を使用するエッジ・オフセット動作モードに統一される。2に等しいsao-type-idxによって指定されるエッジ・オフセット・モードで、0~3の値を有する構文要素sao-eo-classは、CTBにおけるエッジ・オフセット分類に水平、垂直、または2つの斜勾配方向のうちの1つが使用されるかどうかを信号化する。
図5Aは、本開示のいくつかの実装例によるSAOで使用される4つの勾配パターンを描くブロック図である。4つの勾配パターン502、504、506、および508は、エッジ・オフセット・モードにおけるそれぞれのsao-eo-classに対するものである。「p」と表示されるサンプルは、考慮されるべき中心サンプルを示す。「n0」および「n1」と表示される2つのサンプルは、(a)水平(sao-eo-class=0)、(b)垂直(sao-eo-class=1)、(c)斜め135°(sao-eo-class=2)、および(d)45°(sao-eo-class=3)の勾配パターンに沿って、2つの隣接するサンプルを指定する。CTBにおける各サンプルは、図5Aに示されているように、ある位置に配置されたサンプル値pを、隣接する位置に配置された2つのサンプルの値n0およびn1と比較することによって、5つのEdgeIdxカテゴリのうちの1つに分類される。この分類は、復号されたサンプル値に基づいて、各サンプルに対して行われ、したがってEdgeIdx分類に対する追加の信号化は必要とされない。1~4のEdgeIdxカテゴリに対して、サンプル位置におけるEdgeIdxカテゴリに応じて、伝送されたルックアップ・テーブルからのオフセット値がサンプル値に加えられる。オフセット値は常に、カテゴリ1および2に対して正であり、カテゴリ3および4に対して負である。したがって、フィルタは概して、エッジ・オフセット・モードで平滑作用を有する。以下の表1-1は、SAOエッジ・クラスにおけるサンプルEdgeIdxカテゴリを示す。
SAOタイプ1および2の場合、合計4つの振幅オフセット値が各CTBに対してデコーダへ伝送される。タイプ1の場合、符号も符号化される。オフセット値ならびにsao-type-idxおよびsao-eo-classなどの関係付けられた構文要素は、エンコーダによって、典型的には速度歪み性能を最適化する基準を使用して判定される。SAOパラメータは、信号化を効率的にするために、マージ・フラグを使用して左または上のCTBから継承されるように示されうる。要約すると、SAOは、再構築された信号の追加の改良を可能にする非線形フィルタリング動作であり、平滑な区域およびエッジ周辺の両方において、信号表現を強化することができる。
いくつかの実施形態では、サンプル適応オフセット前(SAO前)が実装される。複雑さの低いSAO前コーディング性能は、将来のビデオ・コーディング規格の開発において有望である。いくつかの例では、SAO前は、分類のためにルマ・サンプルを使用してルマ成分サンプルにのみ適用される。SAO前は、SAOVおよびSAOHと呼ばれる2つのSAO状フィルタリング動作を適用することによって動作し、既存の(レガシー)SAOを適用する前に、デブロッキング・フィルタ(DBF)と共同で適用される。第1のSAO状フィルタSAOVは、垂直エッジに対するデブロッキング・フィルタ(DBFV)が適用された後、入力ピクチャY2にSAOを適用するように動作する。
Y3(i)=Clip1(Y2(i)+d1・(f(i)>T?1:0)-d2・(f(i)<-T?1:0))
Y3(i)=Clip1(Y2(i)+d1・(f(i)>T?1:0)-d2・(f(i)<-T?1:0))
ここでTは、所定の正の定数であり、d1およびd2は、
f(i)=Y1(i)-Y2(i)
によって与えられるY1(i)とY2(i)との間のサンプルごとの差に基づいて、2つのクラスに関連付けられたオフセット係数である。
f(i)=Y1(i)-Y2(i)
によって与えられるY1(i)とY2(i)との間のサンプルごとの差に基づいて、2つのクラスに関連付けられたオフセット係数である。
d1に対する第1のクラスは、f(i)>Tになるようにすべてのサンプル場所iを得るように与えられ、d2に対する第2のクラスは、f(i)<-Tによって与えられる。オフセット係数d1およびd2は、既存のSAOプロセスと同様に、SAOVの出力ピクチャY3と元のピクチャXとの間の平均2乗誤差が最小になるように、エンコーダで計算される。SAOVが適用された後、第2のSAO状フィルタSAOHは、Y3(i)とY4(i)との間のサンプルごとの差に基づく分類によって、SAOVが適用された後にY4にSAOを適用するように動作し、これが水平エッジに対するデブロッキング・フィルタ(DBFH)の出力ピクチャである。SAOVと同じ手順がSAOHにも適用され、Y1(i)-Y2(i)の代わりにY3(i)-Y4(i)がその分類のために用いられる。SAOHおよびSAOVの各々に対する2つのオフセット係数、所定の閾値T、および有効化フラグが、スライス・レベルで信号化される。SAOHおよびSAOVは、ルマおよび2つのクロマ成分に独立して適用される。
いくつかの事例では、SAOVおよびSAOHはどちらも、それぞれのデブロッキング(DBFVまたはDBFH)による影響を受けたピクチャ・サンプルでのみ動作する。したがって、既存のSAOプロセスとは異なり、所与の空間領域(ピクチャ、またはレガシーSAOの場合はCTU)内のすべてのサンプルの一部のみが、SAO前によって処理されており、その結果生じるピクチャ・サンプルごとのデコーダ側の平均動作の増大を低く抑える(予備の推定による最悪のシナリオの場合、1サンプルにつき2つまたは3つの比較および2つの追加)。SAO前は、デブロッキング・フィルタによって使用されるサンプルのみを必要とし、デコーダで追加のサンプルを記憶しない。
いくつかの実施形態では、VVCを超えた圧縮効率探査のために、2方向フィルタ(BIF)が実装される。BIFは、サンプル適応オフセット(SAO)ループ・フィルタ段階で実施される。2方向フィルタ(BIF)およびSAOはどちらも、デブロッキングからのサンプルを入力として使用している。各フィルタは、サンプルごとのオフセットを作成し、これらが入力サンプルに追加され、次いでクリッピングされた後、ALFに進む。
詳細には、出力サンプルIOUTは、
IOUT=clip3(IC+ΔIBIF+ΔISAO)
として取得され、ここでICはデブロッキングからの入力サンプルであり、ΔIBIFは2方向フィルタからのオフセットであり、ΔISAOはSAOからのオフセットである。
IOUT=clip3(IC+ΔIBIF+ΔISAO)
として取得され、ここでICはデブロッキングからの入力サンプルであり、ΔIBIFは2方向フィルタからのオフセットであり、ΔISAOはSAOからのオフセットである。
いくつかの実施形態では、実装例は、エンコーダがCTUおよびスライス・レベルにおけるフィルタリングを有効化または無効化する可能性を提供する。エンコーダは、速度歪み最適化(RDO)コストを評価することによって決定を下す。
以下の構文要素が、PPSで導入される。
0に等しいpps_bilateral_filter_enabled_flagは、PPSを参照するスライスに対して2方向ループ・フィルタが無効化されることを指定する。1に等しいpps_bilateral_filter_flagは、PPSを参照するスライスに対して2方向ループ・フィルタが有効化されることを指定する。
bilateral_filter_strengthは、2方向変換ブロック・フィルタ・プロセスで使用される2方向ループ・フィルタ強度値を指定する。bilateral_filter_strengthの値は、包括的に0~2の範囲内であるものとする。
bilateral_filter_qp_offsetは、PPSを参照するスライスに対する2方向フィルタ・ルックアップ・テーブルLUT(x)の導出で使用されるオフセットを指定する。bilateral_filter_qp_offsetは、包括的に-12~+12の範囲内であるものとする。
以下の構文要素が導入される:
意味は次のとおりである。1に等しいslice_bilateral_filter_all_ctb_enabled_flagは、2方向フィルタが有効化されており、現在のスライス内のすべてのCTBに適用されることを指定する。slice_bilateral_filter_all_ctb_enabled_flagが存在しない場合、0に等しいと推論される。
1に等しいslice_bilateral_filter_enabled_flagは、2方向フィルタが有効化されており、現在のスライスのCTBに適用されてよいことを指定する。slice_bilateral_filter_enabled_flagが存在しない場合、slice_bilateral_filter_all_ctb_enabled_flagに等しいと推論される。
1に等しいbilateral_filter_ctb_flag[xCtb>>CtbLog2SizeY][yCtb>>CtbLog2SizeY]は、2方向フィルタがルマの場所(xCtb,yCtb)でコーディング・ツリー・ユニットのルマ・コーディング・ツリー・ブロックに適用されることを指定する。0に等しいbilateral_filter_ctb_flag[cIdx][xCtb>>CtbLog2SizeY][yCtb>>CtbLog2SizeY]は、2方向フィルタがルマの場所(xCtb,yCtb)でコーディング・ツリー・ユニットのルマ・コーディング・ツリー・ブロックに適用されないことを指定する。bilateral_filter_ctb_flagが存在しない場合、等しいと推論される(slice_bilateral_filter_all_ctb_enabled_flag&slice_bilateral_filter_enabled_flag)。
いくつかの例では、フィルタリングされたCTUの場合、フィルタリング・プロセスは次のように進む。サンプルが利用可能でないピクチャ境界で、2方向フィルタは、利用可能でないサンプルを埋めるために拡張(サンプルの反復)を使用する。仮想境界の場合、挙動はSAOに対するものと同じであり、すなわちフィルタリングは行われない。水平CTU境界と交差するとき、2方向フィルタは、SAOがアクセスしているものと同じサンプルにアクセスすることができる。図5Bは、本開示のいくつかの実装例による中心サンプルを取り囲むサンプルに対する命名規則を描くブロック図である。一例として、中心サンプルICがCTUの1番上の線に位置する場合、INW、IA、およびINEは、SAOと同様に上のCTUから読み取られるが、IAAはパディングされ、したがって余分の線バッファは必要とされない。中心サンプルICを取り囲むサンプルは、図5Bに示されており、ここでA、B、L、およびRは上、下、左、および右を表し、NW、NE、SW、SEは北西などを表す。同様に、AAは上-上、BBは下-下などを表す。このダイヤモンド形状は、IAA、IBB、ILL、またはIRRを使用しない2乗フィルタ支持を使用する別の方法とは異なる。
各周辺サンプルIA、IRなどは、対応する修飾子(modifier)値
、
などによって寄与する。これらは以下の方法で計算される。サンプルから右IRへの寄与によって始まり、その差が、
ΔIR=(|IR-IC|+4)>>3
として計算され、ここで|・|は絶対値を示す。10ビットではないデータの場合、代わりにΔIR=(|IR-IC|+2n-6)>>(n-7)が使用され、ここで8ビット・データの場合n=8などである。次に、結果として得られる値が、16より小さくなるようにクリッピングされる。
sIR=min(15,ΔIR)
、
などによって寄与する。これらは以下の方法で計算される。サンプルから右IRへの寄与によって始まり、その差が、
ΔIR=(|IR-IC|+4)>>3
として計算され、ここで|・|は絶対値を示す。10ビットではないデータの場合、代わりにΔIR=(|IR-IC|+2n-6)>>(n-7)が使用され、ここで8ビット・データの場合n=8などである。次に、結果として得られる値が、16より小さくなるようにクリッピングされる。
sIR=min(15,ΔIR)
次に、修飾子値が、
として計算され、ここでLUTROW[ ]は、qpb=clip(0,25,QP+bilateral_filter_qp_offset-17)の値によって判定される16個の値のアレイである。
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, if qpb = 0
{ 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, if qpb = 1
{ 0, 2, 2, 2, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, }, if qpb = 2
{ 0, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, -1, }, if qpb = 3
{ 0, 3, 3, 3, 2, 2, 1, 2, 1, 1, 1, 1, 0, 1, 1, -1, }, if qpb = 4
{ 0, 4, 4, 4, 3, 2, 1, 2, 1, 1, 1, 1, 0, 1, 1, -1, }, if qpb = 5
{ 0, 5, 5, 5, 4, 3, 2, 2, 2, 2, 2, 1, 0, 1, 1, -1, }, if qpb = 6
{ 0, 6, 7, 7, 5, 3, 3, 3, 3, 2, 2, 1, 1, 1, 1, -1, }, if qpb = 7
{ 0, 6, 8, 8, 5, 4, 3, 3, 3, 3, 3, 2, 1, 2, 2, -2, }, if qpb = 8
{ 0, 7, 10, 10, 6, 4, 4, 4, 4, 3, 3, 2, 2, 2, 2, -2, }, if qpb = 9
{ 0, 8, 11, 11, 7, 5, 5, 4, 5, 4, 4, 2, 2, 2, 2, -2, }, if qpb = 10
{ 0, 8, 12, 13, 10, 8, 8, 6, 6, 6, 5, 3, 3, 3, 3, -2, }, if qpb = 11
{ 0, 8, 13, 14, 13, 12, 11, 8, 8, 7, 7, 5, 5, 4, 4, -2, }, if qpb = 12
{ 0, 9, 14, 16, 16, 15, 14, 11, 9, 9, 8, 6, 6, 5, 6, -3, }, if qpb = 13
{ 0, 9, 15, 17, 19, 19, 17, 13, 11, 10, 10, 8, 8, 6, 7, -3, }, if qpb = 14
{ 0, 9, 16, 19, 22, 22, 20, 15, 12, 12, 11, 9, 9, 7, 8, -3, }, if qpb = 15
{ 0, 10, 17, 21, 24, 25, 24, 20, 18, 17, 15, 12, 11, 9, 9, -3, }, if qpb = 16
{ 0, 10, 18, 23, 26, 28, 28, 25, 23, 22, 18, 14, 13, 11, 11, -3, }, if qpb = 17
{ 0, 11, 19, 24, 29, 30, 32, 30, 29, 26, 22, 17, 15, 13, 12, -3, }, if qpb = 18
{ 0, 11, 20, 26, 31, 33, 36, 35, 34, 31, 25, 19, 17, 15, 14, -3, }, if qpb = 19
{ 0, 12, 21, 28, 33, 36, 40, 40, 40, 36, 29, 22, 19, 17, 15, -3, }, if qpb = 20
{ 0, 13, 21, 29, 34, 37, 41, 41, 41, 38, 32, 23, 20, 17, 15, -3, }, if qpb = 21
{ 0, 14, 22, 30, 35, 38, 42, 42, 42, 39, 34, 24, 20, 17, 15, -3, }, if qpb = 22
{ 0, 15, 22, 31, 35, 39, 42, 42, 43, 41, 37, 25, 21, 17, 15, -3, }, if qpb = 23
{ 0, 16, 23, 32, 36, 40, 43, 43, 44, 42, 39, 26, 21, 17, 15, -3, }, if qpb = 24
{ 0, 17, 23, 33, 37, 41, 44, 44, 45, 44, 42, 27, 22, 17, 15, -3, }, if qpb = 25
として計算され、ここでLUTROW[ ]は、qpb=clip(0,25,QP+bilateral_filter_qp_offset-17)の値によって判定される16個の値のアレイである。
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, if qpb = 0
{ 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, if qpb = 1
{ 0, 2, 2, 2, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, }, if qpb = 2
{ 0, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, -1, }, if qpb = 3
{ 0, 3, 3, 3, 2, 2, 1, 2, 1, 1, 1, 1, 0, 1, 1, -1, }, if qpb = 4
{ 0, 4, 4, 4, 3, 2, 1, 2, 1, 1, 1, 1, 0, 1, 1, -1, }, if qpb = 5
{ 0, 5, 5, 5, 4, 3, 2, 2, 2, 2, 2, 1, 0, 1, 1, -1, }, if qpb = 6
{ 0, 6, 7, 7, 5, 3, 3, 3, 3, 2, 2, 1, 1, 1, 1, -1, }, if qpb = 7
{ 0, 6, 8, 8, 5, 4, 3, 3, 3, 3, 3, 2, 1, 2, 2, -2, }, if qpb = 8
{ 0, 7, 10, 10, 6, 4, 4, 4, 4, 3, 3, 2, 2, 2, 2, -2, }, if qpb = 9
{ 0, 8, 11, 11, 7, 5, 5, 4, 5, 4, 4, 2, 2, 2, 2, -2, }, if qpb = 10
{ 0, 8, 12, 13, 10, 8, 8, 6, 6, 6, 5, 3, 3, 3, 3, -2, }, if qpb = 11
{ 0, 8, 13, 14, 13, 12, 11, 8, 8, 7, 7, 5, 5, 4, 4, -2, }, if qpb = 12
{ 0, 9, 14, 16, 16, 15, 14, 11, 9, 9, 8, 6, 6, 5, 6, -3, }, if qpb = 13
{ 0, 9, 15, 17, 19, 19, 17, 13, 11, 10, 10, 8, 8, 6, 7, -3, }, if qpb = 14
{ 0, 9, 16, 19, 22, 22, 20, 15, 12, 12, 11, 9, 9, 7, 8, -3, }, if qpb = 15
{ 0, 10, 17, 21, 24, 25, 24, 20, 18, 17, 15, 12, 11, 9, 9, -3, }, if qpb = 16
{ 0, 10, 18, 23, 26, 28, 28, 25, 23, 22, 18, 14, 13, 11, 11, -3, }, if qpb = 17
{ 0, 11, 19, 24, 29, 30, 32, 30, 29, 26, 22, 17, 15, 13, 12, -3, }, if qpb = 18
{ 0, 11, 20, 26, 31, 33, 36, 35, 34, 31, 25, 19, 17, 15, 14, -3, }, if qpb = 19
{ 0, 12, 21, 28, 33, 36, 40, 40, 40, 36, 29, 22, 19, 17, 15, -3, }, if qpb = 20
{ 0, 13, 21, 29, 34, 37, 41, 41, 41, 38, 32, 23, 20, 17, 15, -3, }, if qpb = 21
{ 0, 14, 22, 30, 35, 38, 42, 42, 42, 39, 34, 24, 20, 17, 15, -3, }, if qpb = 22
{ 0, 15, 22, 31, 35, 39, 42, 42, 43, 41, 37, 25, 21, 17, 15, -3, }, if qpb = 23
{ 0, 16, 23, 32, 36, 40, 43, 43, 44, 42, 39, 26, 21, 17, 15, -3, }, if qpb = 24
{ 0, 17, 23, 33, 37, 41, 44, 44, 45, 44, 42, 27, 22, 17, 15, -3, }, if qpb = 25
これらの値は、エントリごとに6つのビットを使用して記憶されることが可能であり、その結果、すべて0である第1の行を除外した場合、26*16*6/8=312バイトまたは300バイトになる。
、
、および
に対する修飾子値は、IL、IA、およびIBから同様に計算される。斜めのサンプルINW、INE、ISE、ISW、ならびに2ステップ離れたサンプルIAA、IBB、IRR、およびILLの場合、この計算もまた方程式2および3に従うが、1シフトした値を使用する。斜めのサンプルISEを一例として使用すると、
になり、他の斜めのサンプルおよび2ステップ離れたサンプルも同様に計算される。
、
、および
に対する修飾子値は、IL、IA、およびIBから同様に計算される。斜めのサンプルINW、INE、ISE、ISW、ならびに2ステップ離れたサンプルIAA、IBB、IRR、およびILLの場合、この計算もまた方程式2および3に従うが、1シフトした値を使用する。斜めのサンプルISEを一例として使用すると、
になり、他の斜めのサンプルおよび2ステップ離れたサンプルも同様に計算される。
修飾子値はともに合計される。
いくつかの例では、
は、以前のサンプルに対する
に等しい。同様に、
も、上記のサンプルに対する
に等しく、斜めの修飾子値および2ステップ離れた修飾子値に対しても類似の対称性が見出されうる。これは、ハードウェア実装例において、6つの値
、
、
、
、
、および
を計算すると十分であり、残りの6つの値は、以前に計算された値から取得されうることを意味する。次に、msum値が、c=1、2、または3によって乗算され、これは、単一の加算器および論理ANDゲートを使用して、
cv=k1&(msum<<1)+k2&msum
によって行われることが可能であり、ここで&は論理ANDを示し、k1は乗数cの最上位ビットであり、k2は最下位ビットである。乗算する値は、表1-5に示されているように、最小ブロック寸法D=min(幅,高さ)を使用して取得される。
は、以前のサンプルに対する
に等しい。同様に、
も、上記のサンプルに対する
に等しく、斜めの修飾子値および2ステップ離れた修飾子値に対しても類似の対称性が見出されうる。これは、ハードウェア実装例において、6つの値
、
、
、
、
、および
を計算すると十分であり、残りの6つの値は、以前に計算された値から取得されうることを意味する。次に、msum値が、c=1、2、または3によって乗算され、これは、単一の加算器および論理ANDゲートを使用して、
cv=k1&(msum<<1)+k2&msum
によって行われることが可能であり、ここで&は論理ANDを示し、k1は乗数cの最上位ビットであり、k2は最下位ビットである。乗算する値は、表1-5に示されているように、最小ブロック寸法D=min(幅,高さ)を使用して取得される。
最後に、2方向フィルタ・オフセットΔIBIFが計算される。完全な強度のフィルタリングの場合、以下が使用される。
ΔIBIF=(cv+16)>>5
半分の強度のフィルタリングの場合、以下が使用される。
ΔIBIF=(cv+32)>>6
ΔIBIF=(cv+16)>>5
半分の強度のフィルタリングの場合、以下が使用される。
ΔIBIF=(cv+32)>>6
nビットのデータに対する一般式は、
radd=214-n-bilateral_filter_strength
rshift=15-n-bilateal_filter_strength
ΔIBIF=(cv+radd)>>rshift)
を使用するものであり、ここでbilateral_filter_strengthは、0または1とすることができ、ppsで信号化される。
radd=214-n-bilateral_filter_strength
rshift=15-n-bilateal_filter_strength
ΔIBIF=(cv+radd)>>rshift)
を使用するものであり、ここでbilateral_filter_strengthは、0または1とすることができ、ppsで信号化される。
いくつかの実施形態では、成分間情報を導入することによって、コーディング効率を改善し、またはサンプル適応オフセット(SAO)の複雑さを低減させるための方法およびシステムが、本明細書に開示される。SAOは、HEVC、VVC、AVS2、およびAVS3規格で使用される。以下の説明では、HEVC、VVC、AVS2、およびAVS3規格における既存のSAO設計が、ビデオ・コーディングの当業者に基本的なSAO方法として使用されるが、本開示に記載されている成分間方法は、類似の設計精神を有する他のループ・フィルタ設計または他のコードディング・ツールにも適用されうる。たとえば、AVS3規格では、SAOは、強化されたサンプル適応オフセット(ESAO)と呼ばれるコーディング・ツールに交換される。しかし、本明細書に開示されるCCSAOが、ESAOに並行して適用されてもよい。別の例では、CCSAOは、AV1規格でConstrained Directional Enhancement Filter(CDEF)に並行して適用されてもよい。
HEVC、VVC、AVS2、およびAVS3規格における既存のSAO設計の場合、ルマY、クロマCb、およびクロマCrサンプル・オフセット値が独立して決定される。すなわち、たとえば現在のクロマ・サンプル・オフセットは、現在のクロマ・サンプル値および隣接するクロマ・サンプル値のみによって決定され、配列または隣接ルマ・サンプルを考慮しない。しかし、ルマ・サンプルは、クロマ・サンプルより多くの元のピクチャ詳細情報を維持し、現在のクロマ・サンプル・オフセットの決定から利益を得ることができる。さらに、クロマ・サンプルは通常、RGBからYCbCrへの色変換後、または量子化およびデブロッキング・フィルタ後に、高周波の詳細を失うため、クロマ・オフセット決定のために維持された高周波の詳細を有するルマ・サンプルを導入することで、クロマ・サンプルの再構築から利益を得ることができる。したがって、成分間相関を探ることによって、たとえば成分間サンプル適応オフセット(CCSAO)の方法およびシステムを使用することによって、さらなるゲイン(gain)が予期されうる。いくつかの実施形態では、ここでの相関は、成分間サンプル値を含むだけでなく、成分間からの予測/残留コーディング・モード、変換タイプ、および量子化/デブロッキング/SAO/ALFパラメータなどのピクチャ/コーディング情報も含む。
別の例は、SAOの場合に、ルマ・サンプル・オフセットがルマ・サンプルのみによって決定されることである。しかしたとえば、同じバンド・オフセット(BO)分類を有するルマ・サンプルは、その配列および隣接クロマ・サンプルによってさらに分類されてよく、それによってより効果的な分類を得ることができる。SAO分類は、元のピクチャと再構築されたピクチャとの間のサンプル差を補償するためのショートカットとして得られうる。したがって、効果的な分類が所望される。
図6Aは、本開示のいくつかの実装例によってクロマ・サンプル上で適用され、DBF Yを入力として使用するCCSAOシステムおよびプロセスを示すブロック図である。ルマ・デブロッキング・フィルタ(DBF Y)後のルマ・サンプルは、SAO CbおよびSAO Cr後のクロマCbおよびCrに対する追加のオフセットを判定するために使用される。たとえば、現在のクロマ・サンプル602はまず、配列ルマ・サンプル604および隣接(白色)ルマ・サンプル606を使用して分類され、対応するクラスの対応するCCSAOオフセット値が、現在のクロマ・サンプル値に加えられる。図6Bは、本開示のいくつかの実装例によってルマ・サンプルおよびクロマ・サンプル上で適用され、DBF Y/Cb/Crを入力として使用するCCSAOシステムおよびプロセスを示すブロック図である。図6Dは、本開示のいくつかの実装例によって、同じコーデック段階において同じまたは異なるオフセットで再帰的に適用(2またはN回)されうる、または異なる段階で繰り返されうる、CCSAOのシステムおよびプロセスを示すブロック図である。要約すると、いくつかの実施形態では、現在のルマ・サンプルを分類するために、現在のルマ・サンプルおよび隣接するルマ・サンプルの情報、配列および隣接クロマ・サンプル(CbおよびCr)の情報が使用されうる。いくつかの実施形態では、現在のクロマ・サンプル(CbまたはCr)を分類するために、配列および隣接ルマ・サンプル、配列および隣接クロス・クロマ・サンプル、ならびに現在のクロマ・サンプルおよび隣接するクロマ・サンプルが使用されうる。いくつかの実施形態では、CCSAOは、(1)DBF Y/Cb/Cr後、(2)DBF前の再構築された画像Y/Cb/Cr後、または(3)SAO Y/Cb/Cr後、または(4)ALF Y/Cb/Cr後に、カスケード接続されうる。
いくつかの実施形態では、CCSAOはまた、他のコーディング・ツール、たとえばAVS規格におけるESAO、またはAV1規格におけるCDEF、またはニューラル・ネットワーク・ループ・フィルタ(NNLF)に並行して適用されうる。図6Eは、本開示のいくつかの実装例によってAVS規格におけるESAOに並行して適用されるCCSAOシステムおよびプロセスを示すブロック図である。
図6Fは、本開示のいくつかの実装例によってSAO後に適用されるCCSAOシステムおよびプロセスを示すブロック図である。いくつかの実施形態では、図6Fは、CCSAOの場所がSAO後、すなわちVVC規格における成分間適応ループ・フィルタ(CCALF)の場所に位置しうることを示す。図6Gは、本開示のいくつかの実装例によってCCSAOシステムおよびプロセスがCCALFなしで独立して機能しうることを示すブロック図である。いくつかの実施形態では、SAO Y/Cb/Crは、たとえばAVS3規格において、ESAOに交換されうる。
図6Hは、本開示のいくつかの実装例によってCCALFに並行して適用されるCCSAOシステムおよびプロセスを示すブロック図である。いくつかの実施形態では、図6Hは、CCSAOがCCALFに並行して適用されうることを示す。いくつかの実施形態では、図6Hで、CCALFおよびCCSAOの場所が切り替えられうる。いくつかの実施形態では、図6A~図6Hで、または本開示全体にわたって、SAO Y/Cb/Crブロックは、ESAO Y/Cb/Cr(AVS3)またはCDEF(AV1)に交換されうる。Y/Cb/Crは、ビデオ・コーディング領域においてY/U/Vとしても示されうることに留意されたい。いくつかの実施形態では、ビデオがRGB形式である場合、CCSAOはまた、本開示においてそれぞれYUV表記をGBRに簡単にマッピングすることによって適用されうる。
図6Iは、本開示のいくつかの実装例によってSAOおよびBIFに並行して適用されたCCSAOのシステムおよびプロセスを示すブロック図である。
図6Jは、本開示のいくつかの実装例によってSAOを交換することによってBIFに並行して適用されたCCSAOのシステムおよびプロセスを示すブロック図である。
いくつかの実施形態では、現在のクロマ・サンプル分類は、配列ルマ・サンプルのSAOタイプ(エッジ・オフセット(EO)またはBO)、クラス、およびカテゴリを再利用している。対応するCCSAOオフセットは、デコーダ自体から信号化または導出されうる。たとえば、h_Yを配列ルマSAOオフセットとし、h_Cbおよびh_CrをそれぞれCCSAO CbおよびCrオフセットとする。h_Cb(またはh_Cr)=w*h_Yであり、ここでwは、制限された表(a limited table)で選択されうる。たとえば、±1/4、±1/2、0、±1、±2、±4...などであり、ここで|w|は2のべき乗の値のみを含む。
いくつかの実施形態では、配列ルマ・サンプル(Y0)および隣接する8つのルマ・サンプルの比較スコア[-8,8]が使用され、合計17のクラスをもたらす。
初期クラス=0
隣接する8つのルマ・サンプルを介したループ(Yi,i=1~8)
if Y0>Yi Class+=1
else if Y0<Yi Class-=1
初期クラス=0
隣接する8つのルマ・サンプルを介したループ(Yi,i=1~8)
if Y0>Yi Class+=1
else if Y0<Yi Class-=1
いくつかの実施形態では、上述された分類方法が組み合わされうる。たとえば、ダイバーシティを増大させるために、SAO BO(32バンドの分類)と組み合わされた比較スコアが使用され、合計17*32のクラスをもたらす。いくつかの実施形態では、CbおよびCrは、複雑さを低減させるため、またはビットを節約するために、同じクラスを使用することができる。
図7は、本開示のいくつかの実装例によるCCSAOを使用するサンプル・プロセスを示すブロック図である。具体的には、図7は、クラス判定を簡略化するため、または柔軟性を増大させるために、CCSAOの入力が垂直および水平DBFの入力を導入することができることを示す。たとえば、Y0_DBF_V、Y0_DBF_H、およびY0を、それぞれDBF_V、DBF_H、およびSAOの入力における配列ルマ・サンプルとする。Yi_DBF_V、Yi_DBF_H、およびYiは、それぞれDBF_V、DBF_H、およびSAOの入力における隣接する8つのルマ・サンプルであり、ここでi=1~8である。
Max Y0=max(Y0_DBF_V,Y0_DBF_H,Y0_DBF)
Max Yi=max(Yi_DBF_V,Yi_DBF_H,Yi_DBF)
max Y0およびmax YiをCCSAO分類に与える。
Max Y0=max(Y0_DBF_V,Y0_DBF_H,Y0_DBF)
Max Yi=max(Yi_DBF_V,Yi_DBF_H,Yi_DBF)
max Y0およびmax YiをCCSAO分類に与える。
図8は、本開示のいくつかの実装例によって、CCSAOプロセスが垂直および水平DBFにインターリーブされることを示すブロック図である。いくつかの実施形態では、図6、図7、および図8のCCSAOブロックは選択的であってよい。たとえば、図6と同じサンプル処理を適用する第1のCCSAO_Vに対するY0_DBF_VおよびYi_DBF_Vを使用しながら、DBF_Vルマ・サンプルの入力をCCSAO入力として使用する。
いくつかの実施形態では、実装されるCCSAO構文が、以下の表2に示されている。
いくつかの実施形態では、CCSAO CbおよびCrオフセット値を信号化するために、一方の追加のクロマ・オフセットが信号化される場合、他方のクロマ成分オフセットは、正もしくは負の符号によって、またはビット・オーバーヘッドを節減するために加重によって導出されうる。たとえば、h_Cbおよびh_Crを、それぞれCCSAO CbおよびCrのオフセットとする。wを明示的に信号化することによって、w=±|w|であり、|w|候補が制限されるとき、h_Cr自体を明示的に信号化することなく、h_Crはh_Cbから導出されうる。
h_Cr=w*h_Cb
h_Cr=w*h_Cb
図9は、本開示のいくつかの実装例による成分間相関を使用してビデオ信号を復号する例示的なプロセス900を示す流れ図である。
ビデオ・デコーダ30は、第1の成分および第2の成分を含むビデオ信号を受信する(910)。いくつかの実施形態では、第1の成分はビデオ信号のルマ成分であり、第2の成分はクロマ成分である。
ビデオ・デコーダ30はまた、第2の成分に関連付けられた複数のオフセットを受信する(920)。
ビデオ・デコーダ30は次いで、第1の成分の特性測定を利用して、第2の成分に関連付けられた分類カテゴリを取得する(930)。たとえば、図6で、現在のクロマ・サンプル602はまず、配列ルマ・サンプル604および隣接(白色)ルマ・サンプル606を使用して分類され、対応するCCSAOオフセット値が、現在のクロマ・サンプルに加えられる。
ビデオ・デコーダ30は、分類カテゴリに従って、第2の成分に対する複数のオフセットから第1のオフセットをさらに選択する(940)。
ビデオ・デコーダ30は加えて、選択された第1のオフセットに基づいて、第2の成分を修正する(950)。
いくつかの実施形態では、第1の成分の特性測定を利用して第2の成分に関連付けられた分類カテゴリを取得すること(930)は、第1の成分のそれぞれのサンプルを利用して、第2の成分のそれぞれの各サンプルのそれぞれの分類カテゴリを取得することを含み、第1の成分のそれぞれのサンプルは、第2の成分のそれぞれの各サンプルに対する第1の成分のそれぞれの配列サンプルである。たとえば、現在のクロマ・サンプル分類は、配列ルマ・サンプルのSAOタイプ(EOまたはBO)、クラス、およびカテゴリを再利用している。
いくつかの実施形態では、第1の成分の特性測定を利用して第2の成分に関連付けられた分類カテゴリを取得すること(930)は、第1の成分のそれぞれのサンプルを利用して、第2の成分のそれぞれの各サンプルのそれぞれの分類カテゴリを取得することを含み、第1の成分のそれぞれのサンプルは、デブロックされる前に再構築され、またはデブロックされた後に再構築される。いくつかの実施形態では、第1の成分は、デブロッキング・フィルタ(DBF)でデブロックされている。いくつかの実施形態では、第1の成分は、ルマ・デブロッキング・フィルタ(DBF Y)でデブロックされている。たとえば、図6または図7に対する代替手段として、CCSAO入力はDBF Yの前であってもよい。
いくつかの実施形態では、特性測定は、第1の成分のサンプル値の範囲をいくつかのバンドに分割し、第1の成分内のサンプルの強度値に基づいてバンドを選択することによって導出される。いくつかの実施形態では、特性測定は、バンド・オフセット(BO)から導出される。
いくつかの実施形態では、特性測定は、第1の成分内のサンプルのエッジ情報の方向および強度に基づいて導出される。いくつかの実施形態では、特性測定は、エッジ・オフセット(EO)から導出される。
いくつかの実施形態では、第2の成分を修正すること(950)は、選択された第1のオフセットを第2の成分に直接加えることを含む。たとえば、対応するCCSAOオフセット値が、現在のクロマ成分サンプルに加えられる。
いくつかの実施形態では、第2の成分を修正すること(950)は、選択された第1のオフセットを第2のオフセットにマッピングし、マッピングされた第2のオフセットを第2の成分に加えることを含む。たとえば、CCSAO CbおよびCrオフセット値を信号化するために、一方の追加のクロマ・オフセットが信号化される場合、他方のクロマ成分オフセットは、正もしくは負の符号を使用することによって、またはビット・オーバーヘッドを節減するために加重によって導出されうる。
いくつかの実施形態では、ビデオ信号を受信すること(910)は、CCSAOを使用してビデオ信号を復号する方法がシーケンス・パラメータ・セット(SPS)内のビデオ信号に対して有効化されるかどうかを示す構文要素を受信することを含む。いくつかの実施形態では、cc_sao_enabled_flagが、シーケンス・レベルでCCSAOが有効化されるかどうかを示す。
いくつかの実施形態では、ビデオ信号を受信すること(910)は、CCSAOを使用してビデオ信号を復号する方法がスライス・レベルで第2の成分に対して有効化されるかどうかを示す構文要素を受信することを含む。いくつかの実施形態では、slice_cc_sao_cb_flagまたはslice_cc_sao_cr_flagが、CbまたはCrに対するそれぞれのスライス内でCCSAOが有効化されるかどうかを示す。
いくつかの実施形態では、第2の成分に関連付けられた複数のオフセットを受信すること(920)は、異なるコーディング・ツリー・ユニット(CTU)に対して異なるオフセットを受信することを含む。いくつかの実施形態では、CTUに対して、cc_sao_offset_sign_flagが、オフセットに対する符号を示し、cc_sao_offset_absが、現在のCTUのCCSAO CbおよびCrオフセット値を示す。
いくつかの実施形態では、第2の成分に関連付けられた複数のオフセットを受信すること(920)は、CTUの受信されたオフセットが、CTUの隣接するCTUのうちの1つと同じであるかどうかを示す構文要素を受信することを含み、隣接するCTUは、左または上の隣接するCTUである。たとえば、cc_sao_merge_up_flagが、CCSAOオフセットが左または上のCTUからマージされるかどうかを示す。
いくつかの実施形態では、ビデオ信号は、第3の成分をさらに含み、CCSAOを使用してビデオ信号を復号する方法は、第3の成分に関連付けられた第2の複数のオフセットを受信することと、第1の成分の特性測定を利用して第3の成分に関連付けられた第2の分類カテゴリを取得することと、第2の分類カテゴリに従って第3の成分に対する第2の複数のオフセットから第3のオフセットを選択することと、選択された第3のオフセットに基づいて第3の成分を修正することとをさらに含む。
図11は、本開示のいくつかの実装例によってすべての配列および隣接(白色)ルマ/クロマ・サンプルがCCSAO分類へ供給されうることを示すサンプル・プロセスのブロック図である。図6A、図6B、および図11は、CCSAO分類の入力を示す。図11で、現在のクロマ・サンプルは1104であり、成分間配列クロマ・サンプルは1102であり、配列ルマ・サンプルは1106である。
いくつかの実施形態では、例示的な分類子(C0)が、以下の図12の配列ルマまたはクロマ・サンプル値(Y0)(図6Bおよび図6CのY4/U4/V4)を分類に使用する。band_numを、ルマまたはクロマ・ダイナミック・レンジの等しく分割されたバンドの数とし、bit_depthを、シーケンス・ビット深さとすると、現在のクロマ・サンプルに対するクラス索引の一例は、次のとおりである。
クラス(C0)=(Y0*band_num)>>bit_depth
クラス(C0)=(Y0*band_num)>>bit_depth
いくつかの実施形態では、この分類は丸めを考慮し、たとえば次のとおりである。
クラス(C0)=((Y0*band_num)+(1<<bit_depth))>>bit_depth
クラス(C0)=((Y0*band_num)+(1<<bit_depth))>>bit_depth
いくつかのband_numおよびbit_depthの例が、以下の表3に挙げられている。表3は、分類例の各々に対してバンドの数が異なるときの3つの分類例を示す。
いくつかの実施形態では、分類子は、C0分類に対して異なるルマ・サンプル位置を使用する。図10Aは、本開示のいくつかの実装例によるC0分類に対して異なるルマ(またはクロマ)サンプル位置を使用する、たとえばC0分類にY0ではなく隣接するY7を使用する、分類子を示すブロック図である。
いくつかの実施形態では、シーケンス・パラメータ・セット(SPS)/適応パラメータ・セット(APS)/ピクチャ・パラメータ・セット(PPS)/ピクチャ・ヘッダ(PH)/スライス・ヘッダ(SH)/Region/コーディング・ツリー・ユニット(CTU)/コーディング・ユニット(CU)/Subblock/Sampleレベルにおいて、異なる分類子が切り換えられうる。たとえば、図10では、以下の表4に示されているように、POC0にY0を使用するがPOC1にY7を使用する。
いくつかの実施形態では、図10Bは、本開示のいくつかの実装例によるルマ候補に対する異なる形状のいくつかの例を示す。たとえば、形状に制約が適用されうる。いくつかの事例では、図10B(b)(c)(d)に示されているように、ルマ候補の総数は2のべき乗でなければならない。いくつかの事例では、図10B(a)(c)(d)(e)に示されているように、ルマ候補の数は、クロマ・サンプル(中心)に対して水平および垂直対称でなければならない。いくつかの実施形態では、2のべき乗の制約および対称の制約は、クロマ候補にも適用されうる。図6Bおよび図6CのU/V部分は、対称の制約に対する一例を示す。いくつかの実施形態では、異なる色形式が、異なる分類子「制約」を有することができる。たとえば、420色形式は、図6Bおよび図6Cに示されているルマ/クロマ候補選択を使用する(1つの候補が3×3の形状から選択される)が、444色形式は、図10B(f)をルマおよびクロマ候補選択に使用し、422色形式は、図10B(g)をルマに使用し(2つのクロマ・サンプルが4つのルマ候補を共有する)、図10B(f)をクロマ候補に使用する。
いくつかの実施形態では、C0位置およびC0のband_numが組み合わされてよく、SPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルにおいて切り換えられうる。以下の表5に示されているように、異なる組合せが異なる分類子であってよい。
いくつかの実施形態では、配列ルマ・サンプル値(Y0)は、配列および隣接ルマ・サンプルに加重することによって取得された値(Yp)に交換される。図12は、本開示のいくつかの実装例によって、配列ルマ・サンプル値を、配列および隣接ルマ・サンプルに加重することによって取得された値に交換することによって、例示的な分類子を示す。配列ルマ・サンプル値(Y0)は、隣接ルマ・サンプルを加重することによって取得された位相補正値(Yp)に交換されうる。異なるYpが異なる分類子であってよい。
いくつかの実施形態では、異なるYpが異なるクロマ形式で適用される。たとえば、図12で、(a)のYpは、420クロマ形式に使用され、(b)のYpは、422クロマ形式に使用され、Y0は、444クロマ形式に使用される。
いくつかの実施形態では、別の分類子(C1)は、配列ルマ・サンプル(Y0)および隣接する8つのルマ・サンプルの比較スコア[-8,8]であり、以下に示されているように、合計17のクラスをもたらす。
初期クラス(C1)=0、隣接する8つのルマ・サンプルを介したループ(Yi,i=1~8)
if Y0>Yi Class+=1
else if Y0<Yi Class-=1
初期クラス(C1)=0、隣接する8つのルマ・サンプルを介したループ(Yi,i=1~8)
if Y0>Yi Class+=1
else if Y0<Yi Class-=1
いくつかの実施形態では、C1の例は以下の関数に等しく、閾値thは0である。
ClassIdx=Index2ClassTable(f(C,P1)+f(C,P2)+...+f(C,P8))
x-y>thの場合、f(x,y)=1であり、x-y=thの場合、f(x,y)=0であり、x-y<thの場合、f(x,y)=-1であり、
Index2ClassTableはルックアップ・テーブル(LUT)であり、Cは現在のまたは配列されたサンプルであり、P1~P8は隣接するサンプルである。
ClassIdx=Index2ClassTable(f(C,P1)+f(C,P2)+...+f(C,P8))
x-y>thの場合、f(x,y)=1であり、x-y=thの場合、f(x,y)=0であり、x-y<thの場合、f(x,y)=-1であり、
Index2ClassTableはルックアップ・テーブル(LUT)であり、Cは現在のまたは配列されたサンプルであり、P1~P8は隣接するサンプルである。
いくつかの実施形態では、差の分類(量子化)を助けるために、C4分類子と同様に、1つまたは複数の閾値が、SPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで事前定義され(たとえば、LUTに維持される)、または信号化されうる。
いくつかの実施形態では、変動(C1’)が比較スコア[0,8]のみを計数し、これは8つのクラスをもたらす。(C1,C1’)は分類子グループであり、C1およびC1’を切り換えるために、PH/SHレベル・フラグが信号化されうる。
初期クラス(C1’)=0、隣接する8つのルマ・サンプルを介したループ(Yi,i=1~8)
if Y0>Yi Class+=1
if Y0>Yi Class+=1
いくつかの実施形態では、変動(C1)が、比較スコアを計数するために、Mの隣接サンプルから隣接するNを選択的に使用する。比較スコアを計数するためにどの隣接サンプルが選択されたかを示すために、MビットのビットマスクがSPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで信号化されてよい。ルマ分類子に対する一例として図6Bを使用して、8つの隣接ルマ・サンプルが候補であり、8ビットのビットマスク(01111110)がPHで信号化され、これはY1~Y6の6つのサンプルが選択されたことを示し、したがって比較スコアは[-6,6]であり、13のオフセットをもたらす。選択的な分類子C1は、オーバーヘッドを信号化するオフセットと分類粒度との間のトレードオフのために、より多くの選択肢をエンコーダに与える。
C1と同様に、変動(C1’)は比較スコア[0,+N]のみを計数し、前のビットマスク01111110の例が、[0,6]の比較スコアを与え、7のオフセットをもたらす。
いくつかの実施形態では、異なる分類子が組み合わされて、汎用分類子をもたらす。たとえば、以下の表6-1に示されているように、異なるピクチャ(異なるPOC値)に対して異なる分類子が適用される。
いくつかの実施形態では、表6-2に示されているように、別の例示的な分類子(C3)が、分類のためにビットマスクを使用している。この分類子を示すために、10ビットのビットマスクがSPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで信号化される。たとえば、ビットマスク11 1100 0000は、所与の10ビットのルマ・サンプル値に対して、最上位ビット(MSB):4ビットのみが分類に使用され、合計16のクラスをもたらすことを意味する。別の例示的なビットマスク10 0100 0001は、3ビットのみが分類に使用され、合計8つのクラスをもたらすことを意味する。
いくつかの実施形態では、ビットマスク長(N)は固定されてよく、またはSPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで切り換えられうる。たとえば、10ビットのシーケンスの場合、4ビットのビットマスク1110がピクチャ内にPHで信号化され、MSB3ビットb9、b8、b7が分類に使用される。別の例は、LSB上の4ビットのビットマスク0011であり、b0、b1が分類に使用される。ビットマスク分類子は、ルマまたはクロマ分類に該当することができる。MSBまたはLSBをビットマスクNに使用するかどうかは固定されてよく、またはSPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで切り換えられうる。
いくつかの実施形態では、ルマ位置およびC3ビットマスクが組み合わされてよく、SPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで切り換えられうる。異なる組合せは異なる分類子であってよい。
いくつかの実施形態では、ビットマスク制限の「1の最大数」は、対応するオフセットの数を制限するために適用されうる。たとえば、SPSでビットマスクの「1の最大数」を4に制限することで、シーケンスの最大オフセットを16にする。異なるPOCのビットマスクは異なってもよいが、「1の最大数」は4を超過しないものとする(全クラスで16を超過しないものとする)。「1の最大数」値が信号化されてよく、SPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで切り換えられうる。
いくつかの実施形態では、図11に示されているように、他の成分間クロマ・サンプル、たとえばクロマ・サンプル1102およびその隣接サンプルがまた、たとえば現在のクロマ・サンプル1104のために、CCSAO分類へ供給されうる。たとえば、Crクロマ・サンプルは、CCSAO Cb分類へ供給されうる。Cbクロマ・サンプルは、CCSAO Cr分類へ供給されうる。成分間クロマ・サンプルの分類子は、ルマ成分間分類子と同じであってよく、または本開示に記載されているように、独自の分類子を有してもよい。2つの分類子が組み合わされて、現在のクロマ・サンプルを分類するための共同分類子を形成することができる。たとえば、成分間ルマ・サンプルおよびクロマ・サンプルを組み合わせた共同分類子は、以下の表6-3に示されているように、合計16のクラスをもたらす。
すべての上述された分類子(C0、C1、C1’、C2、C3)が組み合わされうる。たとえば、以下の表6-4を参照されたい。
いくつかの実施形態では、例示的な分類子(C2)が、配列および隣接ルマ・サンプルの差分(Yn)を使用する。図12(c)は、Ynの一例を示し、Ynは、ビット深さが10であるとき、[-1024,1023]のダイナミック・レンジを有する。C2のband_numを、Ynダイナミック・レンジの等しく分割されたバンドの数とする。
クラス(C2)=(Yn+(1<<bit_depth)*band_num)>>(bit_depth+1)。
クラス(C2)=(Yn+(1<<bit_depth)*band_num)>>(bit_depth+1)。
いくつかの実施形態では、C0およびC2が組み合わされて、汎用分類子をもたらす。たとえば、以下の表7に示されているように、異なるピクチャ(異なるPOC)に対して異なる分類子が適用される。
いくつかの実施形態では、すべての上述された分類子(C0、C1、C1’、C2)が組み合わされる。たとえば、以下の表8-1に示されているように、異なるピクチャ(異なるPOC)に対して異なる分類子が適用される。
いくつかの実施形態では、分類子例(C4)は、下の表8-2に示されているように、CCSAO入力値と補償されるべきサンプル値との差を分類に使用する。たとえば、CCSAOがALF段階で適用される場合、現在の成分のALF前およびALF後のサンプル値の差が分類に使用される。差の分類(量子化)を助けるために、1つまたは複数の閾値が、SPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで事前定義され(たとえば、ルックアップ・テーブル(LUT)に維持される)、または信号化されうる。C4分類子は、共同分類子を形成するために、C0 Y/U/V bandNumと組み合わせられうる(たとえば、表8-2に示されているPOC1の例)。
いくつかの実施形態では、分類子例(C5)は、異なるコーディング・モードが再構築画像内に異なる歪み統計を導入しうるため、サブブロック分類を助けるために、「コーディング情報」を使用する。たとえば下の表8-3に示されているように、CCSAOサンプルは、以前のサンプル・コーディング情報によって分類され、コーディング情報の組合せが分類子を形成することができる。下の図30は、C5に対するコーディング情報の異なる段階の別の例を示す。
いくつかの実施形態では、分類子例(C6)は、YUV色変換値を分類に使用する。たとえば、現在のY成分を分類するために、1/1/1の配列または隣接Y/U/Vサンプルが、RGBに色変換されるように選択され、C3 bandNumを使用して、現在のY成分分類子になるようにR値を量子化する。
いくつかの実施形態では、現在の成分分類に現在の成分情報のみを使用する他の分類子例が、成分間分類として使用されうる。たとえば、図5Aおよび表1に示されているように、ルマ・サンプル情報およびeo-classが使用されて、EdgeIdxを導出し、現在のクロマ・サンプルを分類する。成分間分類子として使用されることも可能な他の「非成分間」分類子は、エッジ方向、画素強度、画素変動、画素分散、画素のラプラシアンの和、ソーベル演算子、コンパス演算子、ハイパス・フィルタ値、ローパス・フィルタ値などを含む。
いくつかの実施形態では、複数分類子が同じPOCで使用される。現在のフレームはいくつかの領域によって分割され、各領域が同じ分類子を使用する。たとえば、3つの異なる分類子がPOC0で使用され、以下の表9に示されているように、どの分類子(0、1、または2)が使用されるかが、CTUレベルで信号化される。
いくつかの実施形態では、複数分類子(複数分類子を代替オフセット・セットと呼ぶこともできる)の最大数は固定されてよく、またはSPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで信号化されうる。一例では、複数分類子の固定(事前に画定)された最大数は4である。その場合、4つの異なる分類子がPOC0で使用され、どの分類子(0、1、または2)が使用されるかが、CTUレベルで信号化される。各ルマまたはクロマCTBに使用される分類子を示すために、短縮単項(TU)コードが使用されうる。たとえば、以下の表10に示されているように、TUコードが0であるとき、CCSAOは適用されず、TUコードが10であるとき、set 0が適用され、TUコードが110であるとき、set 1が適用され、TUコードが1110であるとき、set 2が適用され、TUコードが1111であるとき、set 3が適用される。CTBに対する分類子を示すために(オフセット・セット索引)、固定長コード、ゴロム・ライスコード、および指数ゴロム・コードが使用されてもよい。3つの異なる分類子がPOC1で使用される。
CbおよびCrのCTBオフセット・セット索引の一例が、1280×720のシーケンスPOC0で与えられる(CTUサイズが128×128である場合、フレーム内のCTUの数は10×6である)。POC0のCbは4つのオフセット・セットを使用し、Crは1つのオフセット・セットを使用する。以下の表11-1に示されているように、オフセット・セット索引が0であるとき、CCSAOは適用されず、オフセット・セット索引が1であるとき、set 0が適用され、オフセット・セット索引が2であるとき、set 1が適用され、オフセット・セット索引が3であるとき、set 2が適用され、オフセット・セット索引が4であるとき、set 3が適用される。タイプは、選択された配列ルマ・サンプル(Yi)の位置を意味する。異なるオフセット・セットは、異なるタイプ、band_num、および対応するオフセットを有することができる。
いくつかの実施形態では、配列/現在および隣接Y/U/Vサンプルを分類に共同で使用する一例が、以下の表11-2に挙げられる(各Y/U/V成分に対する3成分共同bandNum分類)。POC0で、{2,4,1}オフセット・セットが、それぞれ{Y,U,V}に使用される。各オフセット・セットは、SPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで適応して切り換えられうる。異なるオフセット・セットが、異なる分類子を有することができる。たとえば、図6Bおよび図6Cに示す候補位置(candPos)として、現在のY4ルマ・サンプルを分類するために、Y set0が、{現在のY4,配列U4,配列V4}を候補として選択し、それぞれ異なるbandNum{Y,U,V}={16,1,2}である。{candY,candU,candV}を選択された{Y,U,V}候補のサンプル値として使用するとき、全クラスの数は32であり、クラス索引導出は次のように示されうる。
bandY=(candY*bandNumY)>>BitDepth;
bandU=(candU*bandNumU)>>BitDepth;
bandV=(candV*bandNumV)>>BitDepth;
classIdx=bandY*bandNumU*bandNumV
+bandU*bandNumV
+bandV;
bandY=(candY*bandNumY)>>BitDepth;
bandU=(candU*bandNumU)>>BitDepth;
bandV=(candV*bandNumV)>>BitDepth;
classIdx=bandY*bandNumU*bandNumV
+bandU*bandNumV
+bandV;
いくつかの実施形態では、導出プロセスを簡略化するために、共同分類子のclassIdx導出が、「or-shift」形式として表されうる。たとえば、max bandNum={16,4,4}
classIdx=(bandY<<4)|(bandU<<2)|bandVである。
classIdx=(bandY<<4)|(bandU<<2)|bandVである。
別の例は、POC1において、成分V set1分類である。その例では、bandNum={4,1,2}でcandPos={隣接Y8,隣接U3,隣接V0}が使用され、8つのクラスをもたらす。
いくつかの実施形態では、たとえば以下の表11-3に示されているように、配列および隣接Y/U/Vサンプルを現在のY/U/Vサンプル分類に共同で使用する一例が挙げられる(各Y/U/V成分に対する3成分共同edgeNum(C1)およびbandNum分類)。エッジCandPosは、C1分類子に使用される中心位置であり、エッジbitMaskは、C1隣接サンプル活動化インジケータであり、edgeNumは、対応するC1クラスの数である。この例では、C1はY分類子にのみ適用され(したがって、edgeNumはedgeNumYに等しい)、エッジcandPosは常にY4である(現在/配列サンプル位置)。しかし、C1は、隣接サンプル位置としてエッジcandPosを有するY/U/V分類子に適用されてよい。
diffがYのC1比較スコアを示す場合、classIdx導出は次のとおりとなりうる。
bandY=(candY*bandNumY)>>BitDepth;
bandU=(candU*bandNumU)>>BitDepth;
bandV=(candV*bandNumV)>>BitDepth;
edgeIdx=diff+(edgeNum>>1);
bandIdx=bandY*bandNumU*bandNumV
+bandU*bandNumV
+bandV;
classIdx=bandIdx*edgeNum+edgeIdx;
bandY=(candY*bandNumY)>>BitDepth;
bandU=(candU*bandNumU)>>BitDepth;
bandV=(candV*bandNumV)>>BitDepth;
edgeIdx=diff+(edgeNum>>1);
bandIdx=bandY*bandNumU*bandNumV
+bandU*bandNumV
+bandV;
classIdx=bandIdx*edgeNum+edgeIdx;
いくつかの実施形態では、最大band_num(bandNumY、bandNumU、またはbandNumV)が、固定されてよく、またはSPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで信号化されうる。たとえば、デコーダで各フレームに対してmax band_num=16を固定すると、フレーム内のC0のband_numを示すために、4ビットが信号化される。いくつかの他の最大band_numの例が、以下の表12に挙げられる。
いくつかの実施形態では、各セット(または加えられたすべてのセット)に対するクラスまたはオフセット(複数の分類子を共同で使用する組合せ、たとえばC1 edgeNum*C1 bandNumY*bandNumU*bandNumV)の最大数が固定されてよく、またはSPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで信号化されうる。たとえば、maxは、加えられたすべてのセットに対してclass_num=256*4で固定され、制約を確認するために、エンコーダ適合性チェックまたはデコーダ規範チェックが使用されうる。
いくつかの実施形態では、制限がC0分類に適用されてよく、たとえばband_num(bandNumY、bandNumU、またはbandNumV)を2のべき乗の値のみに制限する。band_numを明示的に信号化する代わりに、構文band_num_shiftが信号化される。デコーダは、乗算を回避するために、シフト演算を使用することができる。異なるband_num_shiftが異なる成分に使用されうる。
クラス(C0)=(Y0>>band_num_shift)>>bit_depth
クラス(C0)=(Y0>>band_num_shift)>>bit_depth
別の演算例は、誤差を低減させるために丸めを考慮する。
クラス(C0)=((Y0+(1<<(band_num_shift-1)))>>band_num_shift)>>bit_depth
クラス(C0)=((Y0+(1<<(band_num_shift-1)))>>band_num_shift)>>bit_depth
たとえば、band_num_max(Y、U、またはV)が16である場合、表13に示されているように、可能なband_num_shift候補は、band_num=1、2、4、8、16に対応する0、1、2、3、4である。
いくつかの実施形態では、CbおよびCrに適用される分類子は異なる。すべてのクラスに対するCbおよびCrオフセットが別個に信号化されうる。たとえば、以下の表14に示されているように、信号化された異なるオフセットが、異なるクロマ成分に適用される。
いくつかの実施形態では、最大オフセット値は固定され、またはシーケンス・パラメータ・セット(SPS)/適応パラメータ・セット(APS)/ピクチャ・パラメータ・セット(PPS)/ピクチャ・ヘッダ(PH)/スライス・ヘッダ(SH)/Region/CTU/CU/Subblock/Sampleレベルで信号化される。たとえば、最大オフセットは[-15,15]である。異なる成分は異なる最大オフセット値を有することができる。
いくつかの実施形態では、オフセットの信号化は、差分パルスコード変調(DPCM)を使用することができる。たとえば、オフセット{3,3,2,1,-1}が、{3,0,-1,-1,-2}として信号化されうる。
いくつかの実施形態では、オフセットは、次のピクチャ/スライスの再利用のために、APSまたはメモリ・バッファに記憶されうる。どの記憶された以前のフレーム・オフセットが現在のピクチャに使用されるかを示すために索引が信号化されうる。
いくつかの実施形態では、CbおよびCrの分類子は同じである。たとえば以下の表15に示されているように、すべてのクラスに対するCbおよびCrオフセットが共同で信号化されうる。
いくつかの実施形態では、CbおよびCrの分類子は同じであってよい。たとえば以下の表16に示されているように、すべてのクラスに対するCbおよびCrオフセットが、符号フラグ差によって共同で信号化されうる。表16によれば、Cbオフセットが(3,3,2,-1)であるとき、導出されるCrオフセットは(-3,-3,-2,1)である。
いくつかの実施形態では、たとえば以下の表17に示されているように、符号フラグは各クラスに対して信号化されうる。表17によれば、Cbオフセットが(3,3,2,-1)であるとき、導出されるCrオフセットは、それぞれの符号フラグに従って、(-3,3,2,1)である。
いくつかの実施形態では、CbおよびCrの分類子は同じであってよい。たとえば以下の表18に示されているように、すべてのクラスに対するCbおよびCrオフセットが、重み差によって共同で信号化されうる。重み(w)は、制限された表で、たとえば±1/4、±1/2、0、±1、±2、±4...などで選択されてよく、ここで|w|は2のべき乗の値のみを含む。表18によれば、Cbオフセットが(3,3,2,-1)であるとき、それぞれの符号フラグによって、導出されるCrオフセットは(-6,-6,-4,2)である。
いくつかの実施形態では、たとえば以下の表19に示されているように、重みは各クラスに対して信号化されうる。表19によれば、Cbオフセットが(3,3,2,-1)であるとき、導出されるCrオフセットは、それぞれの符号フラグに従って、(-6,12,0,-1)である。
いくつかの実施形態では、複数分類子が同じPOCで使用される場合、異なるオフセット・セットが別個にまたは共同で信号化される。
いくつかの実施形態では、前に復号されたオフセットは、将来のフレームの使用のために記憶されうる。オフセットの信号化のオーバーヘッドを低減させるように、どの前に復号されたオフセット・セットが現在のフレームに使用されるかを示すために、索引が信号化されうる。たとえば、以下の表20に示されているように、POC0オフセットは、オフセットset idx=0を信号化することで、POC2によって再利用されうる。
いくつかの実施形態では、たとえば以下の表21に示されているように、CbおよびCrに対する再利用オフセットset idxは異なってよい。
いくつかの実施形態では、オフセットの信号化は、信号化のオーバーヘッドを低減させるために、startおよびlengthを含む追加の構文を使用することができる。たとえば、band_num=256であるとき、band_idx=37~44のオフセットのみが信号化される。以下の表22-1の例では、startおよびlengthの構文はどちらも8ビットの固定長コードであり、band_numビットに整合するべきである。
いくつかの実施形態では、CCSAOがすべてのYUV3成分に適用される場合、配列および隣接YUVサンプルが分類に共同で使用されてよく、Cb/Crに対するすべての上述されたオフセットの信号化方法がY/Cb/Crに拡張されうる。いくつかの実施形態では、異なる成分オフセット・セットが別個に記憶されて使用されてよく(各成分が独自の記憶されたセットを有する)、または共同で記憶されて使用されてよい(各成分が同じ記憶されたを共有/再利用する)。別個のセットの例が以下の表22-2に示されている。
いくつかの実施形態では、シーケンス・ビット深さが10(または特定のビット深さ)より大きい場合、オフセットは信号化前に量子化されうる。デコーダ側では、以下の表23-1に示されているように、復号されたオフセットが適用前に逆量子化される。たとえば、12ビットのシーケンスの場合、復号されたオフセットは2だけ左シフト(逆量子化)される。
いくつかの実施形態では、オフセットは、CcSaoOffsetVal=(1-2*ccsao_offset_sign_flag)*(ccsao_offset_abs<<(BitDepth-Min(10,BitDepth)))として計算されうる。
いくつかの実施形態では、フィルタ強度の概念が本明細書にさらに導入される。たとえば、分類子オフセットは、サンプルに適用される前にさらに重み付けされうる。重み(w)は、2のべき乗の値の表で選択されうる。たとえば、±1/4、±1/2、0、±1、±2、±4...などであり、ここで|w|は2のべき乗の値のみを含む。重み索引は、SPS/APS/PPS/PH/SH/Region(Set)/CTU/CU/Subblock/Sampleレベルで信号化されうる。量子化されたオフセットの信号化は、この重み適用の一部として得られうる。図6Dに示されているように、再帰的CCSAOが適用される場合、類似の重み索引機構が第1の段階と第2の段階との間で適用されうる。
いくつかの例では、異なる分類子に対して加重することで、複数の分類子のオフセットが、重みの組合せを有する同じサンプルに適用されうる。上述されたように、類似の重み索引機構が信号化されうる。たとえば、
offset_final=w*offset_1+(1-w)*offset_2、または
offset_final=w1*offset_1+w2*offset_2+...である。
offset_final=w*offset_1+(1-w)*offset_2、または
offset_final=w1*offset_1+w2*offset_2+...である。
いくつかの実施形態では、PH/SH内のCCSAOパラメータを直接信号化する代わりに、以前に使用されたパラメータ/オフセットが、次のピクチャ/スライスの再利用のために、適応パラメータ・セット(APS)またはメモリ・バッファ内に記憶されうる。索引は、どの記憶された以前のフレーム・オフセットが現在のピクチャ/スライスに使用されるかを示すように、PH/SH内で信号化されうる。CCSAO履歴オフセット(history offsets)を維持するために、新しいAPS IDが作成されうる。以下の表は、図6I、candPos、およびbandNum{Y,U,V}={16,4,4}を使用する一例を示す。いくつかの例では、candPos、bandNum、オフセット信号化方法は、固定長コード(FLC)とすることができ、または短縮単項(TU)コード、次数kを有する指数ゴロム・コード(EGk)、符号付きEG0(SVLC)、または符号なしEG0(UVLC)などの他の方法とすることができる。この場合、sao_cc_y_class_num(またはcb、cr)は、sao_cc_y_band_num_y*sao_cc_y_band_num_u*sao_cc_y_band_num_v(またはcb、cr)に等しい。ph_sao_cc_y_aps_idは、このピクチャ/スライス内で使用されるパラメータ索引である。cbおよびcr成分は、同じ信号化論理に従うことができることに留意されたい。
aps_adaptation_parameter_set_idは、他の構文要素による参考のためのAPSに対する識別子を提供する。aps_params_typeがCCSAO_APSに等しいとき、aps_adaptation_parameter_set_idの値は、(たとえば)包括的に0~7の範囲内であるものとする。
ph_sao_cc_y_aps_idは、現在のピクチャ内のスライスのY色成分が参照するCCSAO APSのaps_adaptation_parameter_set_idを指定する。ph_sao_cc_y_aps_idが存在するとき、以下が適用される。CCSAO_APSに等しいaps_params_typeおよびph_sao_cc_y_aps_idに等しいaps_adaptation_parameter_set_idを有するAPS NALユニットのsao_cc_y_set_signal_flagの値は、1に等しいものとし、CCSAO_APSに等しいaps_params_typeおよびph_sao_cc_y_aps_idに等しいaps_adaptation_parameter_set_idを有するAPSネットワーク抽象層(NAL)ユニットのTemporalIdは、現在のピクチャのTemporalIdより小さいまたはそれに等しいものとする。
いくつかの実施形態では、APS更新機構が本明細書に記載される。APSオフセット・セットの最大数が、SPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで事前定義または信号化されうる。異なる成分は、異なる最大数制限を有することができる。APSオフセット・セットが一杯である場合、新しく追加されたオフセット・セットは、先入れ先出し(FIFO)、後入れ先出し(LIFO)、もしくは最長時間未使用(LRU)機構で、1つの既存の記憶されたオフセットに取って代わることができ、またはどのAPSオフセット・セットが交換されるべきかを示す索引値が受信される。いくつかの例では、選択された分類子がcandPos/edge info/coding info...などからなる場合、すべての分類子情報は、APSオフセット・セットの一部として得られることが可能であり、そのオフセット値を有するAPSオフセット・セット内に記憶されることも可能である。
いくつかの実施形態では、制約が適用されうる。たとえば、新しく受信された分類子情報およびオフセットは、記憶されたAPSオフセット・セット(同じ成分または異なる成分)のいずれとも同じになる可能性はない。
いくつかの例では、C0 candPos/bandNum分類子が使用される場合、APSオフセット・セットの最大数は、Y/U/Vにつき4であり、Y/VにFIFO更新が使用され、Uに更新を示すidxが使用される。
いくつかの実施形態では、FIFO更新は、上記の例と同様に、(1)以前に残されたset idxを円形に更新することができ(すべて更新されている場合、セット0から再び開始する)、(2)毎回セット0から更新することができる。いくつかの例では、更新は、新しいオフセット・セットを受信したとき、PH(例と同様)、またはSPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで行うことができる。
LRU更新の場合、デコーダは、「total offset set used count」をカウントするカウント・テーブルを維持し、これは、SPS/APS/グループ・オブ・ピクチャ(GOP)ごとの構造/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルでリフレッシュされうる。新しく受信されたオフセット・セットは、APS内の最長時間未使用オフセット・セットに取って代わる。2つの記憶されたオフセット・セットが同じカウントを有する場合、FIFO/LIFOが使用されうる。たとえば、下の表23-4の成分Yを参照されたい。
いくつかの実施形態では、異なる成分が異なる更新機構を有することができる。
いくつかの実施形態では、異なる成分(たとえば、U/V)が同じ分類子を共有することができる(同じcandPos/edge info/coding info/offsetが、修飾子とともに重みをさらに有することができる)。
いくつかの実施形態では、サンプル処理が以下に記載される。R(x,y)をCCSAO前の入力ルマまたはクロマ・サンプル値とし、R’(x,y)をCCSAO後の出力ルマまたはクロマ・サンプル値とする。
offset=ccsao_offset[R(x,y)のclass_index]
R’(x,y)=Clip3(0,(1<<bit_depth)-1,R(x,y)+offset)
offset=ccsao_offset[R(x,y)のclass_index]
R’(x,y)=Clip3(0,(1<<bit_depth)-1,R(x,y)+offset)
上記の方程式によれば、各ルマまたはクロマ・サンプル値R(x,y)は、現在のピクチャおよび/または現在のオフセットset idxの示されている分類子を使用して分類される。導出されたクラス索引の対応するオフセットが、各ルマまたはクロマ・サンプル値R(x,y)に加えられる。クリップ関数Clip3が(R(x,y)+オフセット)に適用されて、ビット深さダイナミック・レンジ、たとえば0から(1<<bit_depth)-1の範囲内の出力ルマまたはクロマ・サンプル値R’(x,y)を作成する。
図13は、本開示のいくつかの実装例によって、CCSAOが適用され、他のループ内フィルタが異なるクリッピングの組合せを有することを示すブロック図である。
いくつかの実施形態では、CCSAOが他のループ・フィルタによって動作されるとき、クリップ動作は以下を含むことができる。
(1)加算後のクリッピング
以下の方程式は、(a)CCSAOがSAOおよびBIFによって動作される例、または(b)CCSAOがSAOに取って代わるが、依然としてBIFによって動作される例を示す。
(a)IOUT=clip1(IC+ΔISAO+ΔIBIF++ΔICCSAO)
(b)IOUT=clip1(IC+ΔICCSAO+ΔIBIF)
(2)BIFによって動作される加算前のクリッピング
いくつかの実施形態では、クリップ順序が切り換えられうる。
(a)IOUT=clip1(IC+ΔISAO)
I’OUT=clip1(IOUT+ΔIBIF)
I”OUT=clip1(I”OUT+ΔICCSAO)
(b)IOUT=clip1(IC+ΔIBIF)
I’OUT=clip1(I’OUT+ΔICCSAO)
(3)部分的加算後のクリッピング
(a)IOUT=clip1(IC+ΔISAO+ΔIBIF)
I’OUT=clip1(IOUT+ΔICCSAO)
(1)加算後のクリッピング
以下の方程式は、(a)CCSAOがSAOおよびBIFによって動作される例、または(b)CCSAOがSAOに取って代わるが、依然としてBIFによって動作される例を示す。
(a)IOUT=clip1(IC+ΔISAO+ΔIBIF++ΔICCSAO)
(b)IOUT=clip1(IC+ΔICCSAO+ΔIBIF)
(2)BIFによって動作される加算前のクリッピング
いくつかの実施形態では、クリップ順序が切り換えられうる。
(a)IOUT=clip1(IC+ΔISAO)
I’OUT=clip1(IOUT+ΔIBIF)
I”OUT=clip1(I”OUT+ΔICCSAO)
(b)IOUT=clip1(IC+ΔIBIF)
I’OUT=clip1(I’OUT+ΔICCSAO)
(3)部分的加算後のクリッピング
(a)IOUT=clip1(IC+ΔISAO+ΔIBIF)
I’OUT=clip1(IOUT+ΔICCSAO)
いくつかの実施形態では、異なるクリッピング(clipping)の組合せは、補正精度とハードウェア一時バッファ・サイズ(レジスタまたはSRAMビット幅)との間に異なるトレードオフを与える。
図13(a)は、SAO/BIFオフセット・クリッピングを示す。図13(b)は、CCSAOのための1つの追加のビット深さクリッピングを示す。図13(c)は、SAO/BIF/CCSAOオフセットを入力サンプルに加算した後の共同クリッピングを示す。より具体的には、たとえば図13(a)は、SAOと相互作用するときの現在のBIF設計を示す。SAOおよびBIFからのオフセットが入力サンプルに加算され、それに続いて1つのビット深さクリッピングを実行する。しかし、図13(b)および図13(c)に示されているように、CCSAOがまたSAO段階で加えられるとき、(1)CCSAOに対する1つの追加のビット深さクリッピングを追加すること、および(2)SAO/BIF/CCSAOオフセットを入力サンプルに追加した後に共同クリッピングを実行する1つの調和した設計、という2つの可能なクリッピング設計が選択されうる。いくつかの実施形態では、上述されたクリッピング設計は、BIFがそれらにのみ適用されるため、ルマ・サンプルのみが異なる。
いくつかの実施形態では、境界処理が以下に記載されている。分類に使用される配列および隣接ルマ(クロマ)サンプルのいずれかが現在のピクチャの外側に位置する場合、CCSAOが現在のクロマ(ルマ)サンプルに適用されない。図14Aは、本開示のいくつかの実装例によって、分類に使用される配列および隣接ルマ(クロマ)サンプルのいずれかが現在のピクチャの外側に位置する場合、CCSAOが現在のクロマ(ルマ)サンプルに適用されないことを示すブロック図である。たとえば、図14A(a)において、分類子が使用される場合、CCSAOは現在のピクチャの左1列のクロマ成分に適用されない。たとえば、C1’が使用される場合、図14A(b)に示されているように、CCSAOは現在のピクチャの左1列および上1行のクロマ成分に適用されない。
図14Bは、本開示のいくつかの実装例によって、分類に使用される配列および隣接ルマまたはクロマ・サンプルのいずれかが現在のピクチャの外側に位置する場合、CCSAOが現在のルマまたはクロマ・サンプルに適用されることを示すブロック図である。いくつかの実施形態では、変動は、図14B(b)に示されているように、分類に使用される配列および隣接ルマまたはクロマ・サンプルのいずれかが現在のピクチャの外側に位置する場合、図14B(a)に示されているように、失われたサンプルが反復的に使用され、または失われたサンプルがミラー・パディングされて、分類のためのサンプルを作成し、CCSAOは現在のルマまたはクロマ・サンプルに適用されうる。いくつかの実施形態では、分類に使用される配列および隣接ルマ(クロマ)サンプルのいずれかが、現在のサブピクチャ/スライス/タイル/パッチ/CTU/360仮想境界の外側に位置する場合、本明細書に開示される無効化/反復/ミラー・ピクチャ境界処理方法がまた、サブピクチャ/スライス/タイル/CTU/360仮想境界で適用されうる。
たとえば、ピクチャは、1つまたは複数のタイル行および1つまたは複数のタイル列に分割される。タイルは、ピクチャの方形領域を含む一連のCTUである。
スライスは、整数の完全なタイル、またはピクチャのタイル内の整数の連続する完全なCTU行からなる。
サブピクチャは、集合的にピクチャの方形領域を含む1つまたは複数のスライスを含む。
いくつかの実施形態では、360度ビデオが球上で取り込まれ、本質的に「境界」を有しておらず、投影されるドメイン内の基準ピクチャの境界の外にある基準サンプルが常に、球形ドメイン内の隣接サンプルから取得されうる。複数の面から構成される投影形式の場合、どのような小型のフレームパッキング配置が使用されるかにかかわらず、フレームパッキングピクチャ内の2つ以上の隣接面間に不連続性が現れる。VVCでは、垂直および/または水平仮想境界が導入され、これを超えるとループ内フィルタリング動作が無効化され、それらの境界の位置は、SPSまたはピクチャ・ヘッダ内に信号化される。各組の連続面に1つずつ、2つのタイルを使用することと比べて、360仮想境界の使用は、面サイズがCTUサイズの倍数であることを必要としないため、より柔軟である。いくつかの実施形態では、垂直360仮想境界の最大数は3であり、水平360仮想境界の最大数も3である。いくつかの実施形態では、2つの仮想境界間の距離は、CTUサイズより大きくまたはそれに等しく、仮想境界の粒度は、8ルマ・サンプル、たとえば8×8サンプルの格子である。
図14Cは、本開示のいくつかの実装例によって、分類に使用される対応する選択された配列または隣接ルマ・サンプルが、仮想境界によって画定される仮想空間の外側である場合、CCSAOが現在のクロマ・サンプルに適用されないことを示すブロック図である。いくつかの実施形態では、仮想境界(VB)は、ピクチャ・フレーム内の空間を分離する仮想線である。いくつかの実施形態では、仮想境界(VB)が現在のフレーム内で適用される場合、CCSAOは、仮想境界によって画定される仮想空間の外側にある対応するルマ位置を選択したクロマ・サンプルに適用されない。図14Cは、9のルマ位置候補を有するC0分類子に対する仮想境界の一例を示す。各CTUに対して、CCSAOは、対応する選択されたルマ位置が仮想境界によって取り囲まれた仮想空間の外側にあるクロマ・サンプルに適用されない。たとえば、図14C(a)で、選択されたY7ルマ・サンプル位置が、フレームの底辺から4画素の線に位置する水平仮想境界1406の反対側にあるとき、CCSAOはクロマ・サンプル1402に適用されない。たとえば、図14C(b)で、選択されたY5ルマ・サンプル位置が、フレームの右辺からy画素の線に位置する垂直仮想境界1408の反対側に位置するとき、CCSAOはクロマ・サンプル1404に適用されない。
図15は、本開示のいくつかの実装例によって、反復またはミラー・パディングが、仮想境界の外側にあるルマ・サンプルに適用されうることを示す。図15(a)は、反復パディングの一例を示す。元のY7が、VB1502の底辺に位置する分類子になるように選択された場合、元のY7ルマ・サンプル値ではなく、Y4ルマ・サンプル値が分類に使用される(Y7位置にコピーされる)。図15(b)は、ミラー・パディングの一例を示す。Y7が、VB1504の底辺に位置する分類子になるように選択された場合、元のY7ルマ・サンプル値ではなく、Y0ルマ・サンプルに対してY7値に対称のY1ルマ・サンプル値が分類に使用される。パディング方法は、より多くのクロマ・サンプルにCCSAOを適用する可能性を与え、したがってより多くのコーディングゲイン(coding gain)が実現されうる。
いくつかの実施形態では、CCSAOによって必要とされる線バッファを低減させ、境界処理条件チェックを簡略化するために、制限が適用されうる。図16は、本開示のいくつかの実装例によって、9つすべての配列および隣接ルマ・サンプルが分類に使用される場合、追加の1ルマ線バッファ、すなわち現在のVB1602の上の線-5の全線ルマ・サンプルが必要とされうることを示す。図10B(a)は、6つのルマ候補のみを分類に使用する一例を示し、これは線バッファを低減させ、図14Aおよび図14Bにおけるいかなる追加の境界チェックも必要としない。
いくつかの実施形態では、CCSAO分類にルマ・サンプルを使用すると、ルマ線バッファを増大させ、したがってデコーダ・ハードウェア実装コストを増大させうる。図17は、本開示のいくつかの実装例によって、AVSにおいて、VB1702を交差する9つのルマ候補CCSAOが、2つの追加のルマ線バッファを増大させうる図を示す。仮想境界(VB)1702より上のルマ・サンプルおよびクロマ・サンプルの場合、DBF/SAO/ALFが現在のCTU行で処理される。VB1702より下のルマ・サンプルおよびクロマ・サンプルの場合、DBF/SAO/ALFが次のCTU行で処理される。AVSデコーダ・ハードウェア設計では、ルマ線-4から-1のDBF前サンプル、線-5のSAO前サンプル、およびクロマ線-3から-1のDBF前サンプル、線-4のSAO前サンプルが、次のCTU行のDBF/SAO/ALF処理のための線バッファとして記憶される。次のCTU行を処理するとき、線バッファ内にないルマ・サンプルおよびクロマ・サンプルは利用できない。しかし、たとえばクロマ線-3(b)位置において、クロマ・サンプルは次のCTU行で処理されるが、CCSAOは、SAO前ルマ・サンプル線-7、-6、および-5を分類に必要とする。SAO前ルマ・サンプル線-7、-6は線バッファ内になく、したがって利用できない。SAO前ルマ・サンプル線-7および-6を線バッファに加えると、デコーダ・ハードウェア実装コストを増大させる。いくつかの例では、ルマVB(線-4)およびクロマVB(線-3)は異なってよい(位置合わせされない)。
図17と同様に、図18Aは、VVCにおいて、本開示のいくつかの実装例によって、VB1802を交差する9つのルマ候補CCSAOが、1つの追加のルマ線バッファを増大させうる図を示す。VBは、異なる規格で異なってもよい。VVCにおいて、ルマVBは線-4であり、クロマVBは線-2であり、したがって9つの候補CCSAOが、1つのルマ線バッファを増大させうる。
いくつかの実施形態では、第1の解決策において、クロマ・サンプルのルマ候補のいずれかがVBを横切っている(現在のクロマ・サンプルVBの外側にある)場合、CCSAOがクロマ・サンプルに対して無効化される。図19A~図19Cは、本開示のいくつかの実装例によって、クロマ・サンプルのルマ候補のいずれかがVB1902を横切っている(現在のクロマ・サンプルVBの外側にある)場合、AVSおよびVVCにおいて、CCSAOがクロマ・サンプルに対して無効化されることを示す。図14Cもまた、この実装例のいくつかの例を示す。
いくつかの実施形態では、第2の解決策において、「交差VB」ルマ候補に対して、VBに近くVBの反対側にあるルマ線、たとえばルマ線-4から、反復パディングがCCSAOに使用される。いくつかの実施形態では、VBの下の隣接ルマに最も近いルマからの反復パディングが、「交差VB」クロマ候補に対して実装される。図20A~図20Cは、本開示のいくつかの実装例によって、AVSおよびVVCにおいて、クロマ・サンプルのルマ候補のいずれかがVB2002を横切っている(現在のクロマ・サンプルVBの外側にある)場合、クロマ・サンプルに対する反復パディングを使用してCCSAOが有効化されることを示す。図14C(a)もまた、この実装例のいくつかの例を示す。
いくつかの実施形態では、第3の解決策において、「交差VB」ルマ候補に対して、ルマVBの下から、ミラー・パディングがCCSAOに使用される。図21A~図21Cは、本開示のいくつかの実装例によって、AVSおよびVVCにおいて、クロマ・サンプルのルマ候補のいずれかがVB2102を横切っている(現在のクロマ・サンプルVBの外側にある)場合、クロマ・サンプルに対するミラー・パディングを使用して、CCSAOが有効化されることを示す。図14C(b)および図14B(b)もまた、この実装例のいくつかの例を示す。いくつかの実施形態では、第4の解決策において、CCSAOを適用するために「両面対称パディング」が使用される。図22A~図22Bは、本開示のいくつかの実装例によって、異なるCCSAO形状(たとえば、9つのルマ候補(図22A)および8つのルマ候補(図22B))のいくつかの例に対して、両面対称パディングを使用して、CCSAOが有効化されることを示す。クロマ・サンプルの配列された中心ルマ・サンプルを有するルマ・サンプル・セットに対して、ルマ・サンプル・セットの一方の側がVB2202の外側にある場合、ルマ・サンプル・セットの両側に対して両面対称パディングが適用される。たとえば、図22Aで、ルマ・サンプルY0、Y1、およびY2はVB2202の外側にあり、したがってY0、Y1、Y2およびY6、Y7、Y8はどちらも、Y3、Y4、Y5を使用してパディングされる。たとえば、図22Bで、ルマ・サンプルY0はVB2202の外側にあり、したがってY0はY2を使用してパディングされ、Y7はY5を使用してパディングされる。
図18Bは、本開示のいくつかの実装例によって、現在のルマ・サンプルを分類するために配列または隣接クロマ・サンプルが使用され、選択されたクロマ候補がVBを横切って、追加のクロマ線バッファを必要としうる図を示す。上述されたものに類似の解1~4が、この問題に対処するために適用されうる。
解決策1は、そのクロマ候補のいずれかがVBを横切りうるとき、ルマ・サンプルに対するCCSAOを無効化することである。
解決策2は、「交差VB」クロマ候補に対して、VBの下の隣接クロマに最も近いクロマからの反復パディングを使用することである。
解決策3は、「交差VB」クロマ候補に対して、クロマVBの下からのミラー・パディングを使用することである。
解決策4は、「両面対称パディング」を使用することである。CCSAO配列クロマ・サンプルの中心に位置する候補セットに対して、候補セットの一方の側がVBの外側にある場合、両面対称パディングが両側に適用される。
パディング方法は、より多くのルマまたはクロマ・サンプルにCCSAOを適用する可能性を与え、したがってより多くのコーディングゲインが実現されうる。
いくつかの実施形態では、底部ピクチャ(またはスライス、タイル、ブリック)境界CTU行において、VBより下のサンプルは現在のCTU行で処理され、したがって上記の特別な取扱い(解1、2、3、4)が、この底部ピクチャ(またはスライス、タイル、ブリック)境界CTU行に適用されない。たとえば、1920×1080のフレームが、128×128のCTUで分割される。フレームは、15×9のCTU(端数切り上げ)を含む。底部CTU行は、第15のCTU行である。復号プロセスは、CTU行ごとに行われ、各CTU行に対してCTUごとに行われる。現在のCTU行と次のCTU行との間の水平CTU境界に沿って、デブロッキングが適用される必要がある。1つのCTUの内側では、底部4/2ルマ/クロマ線において、DBFサンプル(VVCの場合)が次のCTU行で処理され、現在のCTU行のCCSAOに利用できないため、CTBのVBが各CTU行に適用される。しかし、ピクチャ・フレームの底部CTU行では、次のCTU行が残っていないため、底部4/2ルマ/クロマ線DBFサンプルが、現在のCTU行で利用可能であり、現在のCTU行でDBF処理される。
いくつかの実施形態では、図13~図22に表示されるVBは、サブピクチャ/スライス/タイル/パッチ/CTU/360仮想境界の境界によって交換されうる。いくつかの実施形態では、図13~図22のクロマおよびルマ・サンプルの位置は切り換えられうる。いくつかの実施形態では、図13~図22のクロマおよびルマ・サンプルの位置は、第1のクロマ・サンプルおよび第2のクロマ・サンプルの位置によって交換されうる。いくつかの実施形態では、CTU内のALF VBは、共通して水平であってよい。いくつかの実施形態では、サブピクチャ/スライス/タイル/パッチ/CTU/360仮想境界の境界は、水平または垂直であってよい。
いくつかの実施形態では、図16に説明されるように、CCSAOによって必要とされる線バッファを低減させ、境界処理条件チェックを簡略化するために、制限が適用されうる。図23は、本開示のいくつかの実装例によって、制限された数のルマ候補を分類に使用する制限を示す。図23(a)は、6つのルマ候補のみを分類に使用する制限を示す。図23(b)は、4つのルマ候補のみを分類に使用する制限を示す。
いくつかの実施形態では、適用領域が実装される。CCSAO適用領域ユニットは、CTBに基づくことができる。すなわち、オン/オフ制御、CCSAOパラメータ(分類オフセット・セット索引に使用されるオフセット、ルマ候補位置、band_num、ビットマスク...など)は、1つのCTB内で同じである。
いくつかの実施形態では、適用領域は、CTB境界に位置合わせされえない。たとえば、適用領域は、クロマCTB境界に位置合わせされず、シフトされる。構文(オン/オフ制御、CCSAOパラメータ)が、依然として各CTBに対して示されているが、本当の適用領域はCTB境界に位置合わせされない。図24は、本開示のいくつかの実装例によって、CCSAO適用領域がCTB/CTU境界2406に位置合わせされないことを示す。たとえば、適用領域は、クロマCTB/CTU境界2406に位置合わせされないが、VB2408に対して左上シフト(4,4)されたサンプルである。この位置合わせされていないCTB境界設計は、各8×8のデブロッキング・プロセス領域に対して同じデブロッキング・パラメータが使用されるため、デブロッキング・プロセスに利益をもたらす。
いくつかの実施形態では、表24に示されているように、CCSAO適用領域ユニット(マスク・サイズ)は可変であってよい(CTBサイズより大きいまたは小さい)。マスク・サイズは、異なる成分に対して異なってよい。マスク・サイズは、SPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで切り換えられうる。たとえば、PHにおいて、各CCSAO領域情報を示すために、一連のマスク・オン/オフ・フラグおよびオフセット・セット索引が示される。
いくつかの実施形態では、CCSAO適用領域フレーム区画は固定されうる。たとえば、フレームをNの領域に分割する。図25は、本開示のいくつかの実装例によって、CCSAO適用領域フレーム区画がCCSAOパラメータによって固定されうることを示す。
いくつかの実施形態では、各領域は、その独自の領域オン/オフ制御フラグおよびCCSAOパラメータを有することができる。また、領域サイズがCTBサイズより大きい場合、CTBオン/オフ制御フラグおよび領域オン/オフ制御フラグの両方を有することができる。図25(a)および(b)は、フレームをNの領域に分割するいくつかの例を示す。図25(a)は、4つの領域からなる垂直分割を示す。図25(b)は、4つの領域からなる正方形分割を示す。いくつかの実施形態では、オール・オン制御フラグ(ph_cc_sao_cb_ctb_control_flag/ph_cc_sao_cr_ctb_control_flag)上のピクチャ・レベルCTBと同様に、領域オン/オフ制御フラグがオフである場合、CTBオン/オフ・フラグがさらに信号化されうる。そうでない場合、CTBフラグをさらに信号化することなく、この領域内のすべてのCTBにCCSAOが適用される。
いくつかの実施形態では、異なるCCSAO適用領域が、同じ領域オン/オフ制御およびCCSAOパラメータを共有することができる。たとえば、図25(c)で、領域0~2は同じパラメータを共有し、領域3~15は同じパラメータを共有する。図25(c)はまた、領域オン/オフ制御フラグおよびCCSAOパラメータが、ヒルベルト・スキャン順序で信号化されうることを示す。
いくつかの実施形態では、CCSAO適用領域ユニットは、ピクチャ/スライス/CTBレベルから分割された4分木/2分木/3分木になりうる。CTB分割と同様に、CCSAO適用領域区画を示すために、一連の分割されたフラグが信号化される。図26は、本開示のいくつかの実装例によって、CCSAO適用領域が、フレーム/スライス/CTBレベルから分割された2分木(BT)/4分木(QT)/3分木(TT)になりうることを示す。
図27は、本開示のいくつかの実装例によって、ピクチャ・フレーム内において異なるレベルで使用されて切り換えられる複数の分類子を示すブロック図である。いくつかの実施形態では、複数分類子が1つのフレームで使用される場合、分類子セット索引を適用する方法は、SPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで切り換えられうる。たとえば、以下の表25に示されているように、4つの分類子セットがフレーム内で使用され、PHで切り換えられる。図27(a)および図27(c)は、デフォルト固定領域分類子を示す。図27(b)は、分類子セット索引がマスク/CTBレベルで信号化されることを示し、ここで0はこのCTBに対してCCSAOオフを意味し、1~4はセット索引を意味する。
いくつかの実施形態では、デフォルト領域の場合、この領域内のCTBがデフォルト・セット索引を使用しない(たとえば、領域レベル・フラグが0である)が、このフレーム内で他の分類子セットを使用する場合、領域レベル・フラグが信号化されうる。たとえば、デフォルト・セット索引が使用される場合、領域レベル・フラグは1になる。たとえば、正方形区画の4つの領域において、以下の表26-1に示されているように、以下の分類子セットが使用される。
図28は、本開示のいくつかの実装例によって、CCSAO適用領域区画が動的であってよく、ピクチャ・レベルで切り換えられうることを示すブロック図である。たとえば、図28(a)は、3つのCCSAOオフセット・セットがこのPOCで使用され(set_num=3)、したがってピクチャ・フレームが垂直に3つの領域に分割されることを示す。図28(b)は、4つのCCSAOオフセット・セットがこのPOCで使用され(set_num=4)、したがってピクチャ・フレームが水平に4つの領域に分割されることを示す。図28(c)は、3つのCCSAOオフセット・セットがこのPOCで使用され(set_num=3)、したがってピクチャ・フレームが3つの領域にラスタ分割されることを示す。各領域は、CTBオン/オフ制御ビットを節減するために、その独自の領域のオール・オン・フラグを有することができる。領域の数は、信号化されるピクチャset_numに依存する。CCSAO適用領域は、ブロック内のコーディング情報(サンプル位置、サンプル・コーディング・モード、ループ・フィルタ・パラメータなど)による特有の区域とすることができる。たとえば、1)CCSAO適用領域は、サンプルがスキップ・モード・コーディングされたときにのみ適用される可能性があり、または2)CCSAO適用領域は、CTU境界に沿ってN個のサンプルのみを含み、または3)CCSAO適用領域は、フレーム内の8×8格子上のサンプルのみを含み、または4)CCSAO適用領域は、DBFフィルタ・サンプルのみを含み、または5)CCSAO適用領域は、CU内で上Mおよび左N行のみを含み、または(6)CCSAO適用領域は、イントラ・コーディング・サンプルのみを含み、または(7)CCSAO適用領域は、cbf=0ブロック内のサンプルのみを含み、または(8)CCSAO適用領域は、[N,M]のブロックQPを有するブロック上のみに位置し、ここで(N,M)は、SPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで事前定義または信号化されうる。成分間コーディング情報が考慮されてもよく、(9)CCSAO適用領域は、配列ルマ・サンプルがcbf=0ブロック内にあるクロマ・サンプル上である。
いくつかの実施形態では、コーディング情報適用領域制限を導入するかどうかは、指定されたコーディング情報がCCSAO適用で包含/除外されるかどうかを示すように、SPS/APS/PPS/PH/SH/Region(代替セットごと)/CTU/CU/Subblock/Sampleレベルで1つの制御フラグにおいて事前定義または信号化されうる。デコーダは、事前定義された条件または制御フラグに従って、それらの区域に対するCCSAO処理を省く。たとえば、YUVは、領域(セット)レベルで切り換わる異なる事前定義/フラグ制御条件を使用する。CCSAO適用の判断は、CU/TU/PUまたはサンプル・レベルで行うことができる。
別の例は、2方向有効化制約(事前定義)のすべてまたは一部を再利用する。
bool isInter=(currCU.predMode==MODE_INTER)?true:false;
if(ccSaoParams.ctuOn[ctuRsAddr]
&&((TU::getCbf(currTU,COMPONENT_Y)||isInter==false)&&(currTU.cu->qp>17))
&&(128>std::max(currTU.lumaSize().width,currTU.lumaSize().height))
&&((isInter==false)||(32>std::min(currTU.lumaSize().width,currTU.lumaSize().height))))
bool isInter=(currCU.predMode==MODE_INTER)?true:false;
if(ccSaoParams.ctuOn[ctuRsAddr]
&&((TU::getCbf(currTU,COMPONENT_Y)||isInter==false)&&(currTU.cu->qp>17))
&&(128>std::max(currTU.lumaSize().width,currTU.lumaSize().height))
&&((isInter==false)||(32>std::min(currTU.lumaSize().width,currTU.lumaSize().height))))
いくつかの実施形態では、特有の区域を除外することで、CCSAO統計収集に有利となってよい。オフセット導出は、それらの本当に補正される必要のある区域にとってより精密または好適であってよい。たとえば、cbf=0を有するブロックは通常、さらに補正される必要のないブロックが完全に予測されることを意味する。それらのブロックを除外することで、他の区域のオフセット導出に有利となってよい。
異なる適用領域は、異なる分類子を使用することができる。たとえば、CTUでは、スキップ・モードがC1を使用し、8×8格子がC2を使用し、スキップ・モードおよび8×8格子がC3を使用する。たとえば、CTUでは、スキップ・モード・コーディング・サンプルがC1を使用し、CU中心のサンプルがC2を使用し、CU中心でスキップ・モード・コーディングされたサンプルがC3を使用する。図29は、本開示のいくつかの実装例によって、CCSAO分類子が現在または成分間のコーディング情報を考慮することができることを示す図である。たとえば、異なるコーディング・モード/パラメータ/サンプル位置が、異なる分類子を形成することができる。異なるコーディング情報が組み合わされて、共同分類子を形成することができる。異なる区域は、異なる分類子を使用することができる。図29はまた、適用領域の別の例も示す。
いくつかの実施形態では、事前定義またはフラグ制御「コーディング情報除外区域」機構が、DBF/SAO前/SAO/BIF/CCSAO/ALF/CCALF/NNループ・フィルタ(NNLF)、または他のループ・フィルタで使用されうる。
いくつかの実施形態では、実装されるCCSAO構文が、下の表27に示されている。いくつかの例では、各構文要素の2値化が変更されうる。AVS3では、パッチという用語はスライスに類似しており、パッチ・ヘッダはスライス・ヘッダに類似している。FLCは固定長コードを表す。TUは短縮単項コードを表す。EGkは次数kを有する指数ゴロム・コードを表し、ここでkは固定されうる。SVLCは符号付きEG0を表す。UVLCは符号なしEG0を表す。
高次フラグがオフである場合、低次フラグはフラグのオフ状態から推論されてよく、信号化される必要はない。たとえば、このピクチャ内でph_cc_sao_cb_flagが偽である場合、ph_cc_sao_cb_band_num_minus1、ph_cc_sao_cb_luma_type、cc_sao_cb_offset_sign_flag、cc_sao_cb_offset_abs、ctb_cc_sao_cb_flag、cc_sao_cb_merge_left_flag、およびcc_sao_cb_merge_up_flagは存在せず、偽であると推論される。
いくつかの実施形態では、以下の表28に示されているように、SPSのccsao_enabled_flagがSPSのSAO有効化フラグで調整される。
いくつかの実施形態では、ph_cc_sao_cb_ctb_control_flag、ph_cc_sao_cr_ctb_control_flagが、Cb/CrのCTBオン/オフ制御の粒度を有効化するかどうかを示す。ph_cc_sao_cb_ctb_control_flagおよびph_cc_sao_cr_ctb_control_flagが有効化された場合、ctb_cc_sao_cb_flagおよびctb_cc_sao_cr_flagがさらに信号化されうる。そうでない場合、CCSAOが現在のピクチャに適用されるかどうかは、ph_cc_sao_cb_flag、ph_cc_sao_cr_flagに依存し、ctb_cc_sao_cb_flagおよびctb_cc_sao_cr_flagをCTBレベルでさらに信号化しない。
いくつかの実施形態では、ph_cc_sao_cb_typeおよびph_cc_sao_cr_typeに対して、ビットのオーバーヘッドを低減させるために、中心配列ルマ位置(図10のY0位置)がクロマ・サンプルに対する分類に使用されるかどうかを区別するように、フラグがさらに信号化されうる。同様に、cc_sao_cb_typeおよびcc_sao_cr_typeがCTBレベルで信号化された場合、同じ機構によってフラグがさらに信号化されうる。たとえば、C0ルマ位置候補の数が9である場合、以下で表29に示されているように、中心配列ルマ位置が使用されるかどうかを区別するために、cc_sao_cb_type0_flagがさらに信号化される。中心配列ルマ位置が使用されない場合、残り8つの隣接ルマ位置のうちのどれが使用されるかを示すために、cc_sao_cb_type_idcが使用される。
以下の表30は、AVSにおいて、単一(set_num=1)または複数(set_num>1)の分類子がフレーム内で使用される一例を示す。構文表記は、上記で使用されている表記にマッピングされうる。
各領域が独自のセットを有する図25または図27と組み合わされた場合、構文の例は、以下で表31に示されているように、領域オン/オフ制御フラグ(picture_ccsao_lcu_control_flag[compIdx][setIdx])を含むことができる。
いくつかの実施形態では、高レベル構文の場合、pps_ccsao_info_in_ph_flagおよびgci_no_sao_constraint_flagが追加されうる。
いくつかの実施形態では、1に等しいpps_ccsao_info_in_ph_flagは、CCSAOフィルタ情報がPH構文構造内に存在する可能性があり、PH構文構造を含まないPPSを参照するスライス・ヘッダ内には存在しないことを指定する。0に等しいpps_ccsao_info_in_ph_flagは、CCSAOフィルタ情報がPH構文構造内に存在せず、PPSを参照するスライス・ヘッダ内に存在する可能性があることを指定する。存在しないとき、pps_ccsao_info_in_ph_flagの値は、0に等しいと推論される。
いくつかの実施形態では、1に等しいgci_no_ccsao_constraint_flagは、OlsInScope内のすべてのピクチャに対するsps_ccsao_enabled_flagが0に等しいことを指定する。0に等しいgci_no_ccsao_constraint_flagは、そのような制約を課さない。いくつかの実施形態では、ビデオのビットストリームは、規則に従って1つまたは複数の出力層セット(OLS)を含む。本明細書の例では、OlsInScopeは、範囲内にある1つまたは複数のOLSを参照する。いくつかの例では、profile_tier_level( )構文構造は、レベル情報、ならびに任意選択で、OlsInScopeが順守するプロファイル、層、サブプロファイル、および一般制約情報を提供する。profile_tier_level( )構文構造がVPS内に含まれるとき、OlsInScopeは、VPSによって指定された1つまたは複数のOLSである。profile_tier_level( )構文構造がSPS内に含まれるとき、OlsInScopeは、SPSを参照する層のなかで最下層である層のみを含むOLSであり、この最下層は独立した層である。
いくつかの実施形態では、イントラおよびインター予測後SAOフィルタへの拡張が、以下でさらに示されている。いくつかの実施形態では、本開示に開示されているSAO分類方法(成分間サンプル/コーディング情報分類を含む)は、予測後フィルタとして働くことができ、予測は、イントラ、インター、または他の予測ツール、たとえばイントラ・ブロック・コピーとすることができる。図30は、本開示に開示されているSAO分類方法が本開示のいくつかの実装例による予測後フィルタとして働くことを示すブロック図である。
いくつかの実施形態では、各Y、U、およびV成分に対して、対応する分類子が選択される。各成分予測サンプルに対して、対応する分類子がまず分類され、対応するオフセットが加えられる。たとえば、各成分は、現在のサンプルおよび隣接するサンプルを分類に使用することができる。以下で表32に示されているように、Yは現在のYサンプルおよび隣接するYサンプルを使用し、U/Vは現在のU/Vサンプルを分類に使用する。図31は、本開示のいくつかの実装例によって、予測後SAOフィルタに対して、各成分が現在のサンプルおよび隣接するサンプルを分類に使用することができることを示すブロック図である。
いくつかの実施形態では、改良された予測サンプル(Ypred’、Upred’、Vpred’)が、対応するクラス・オフセットを加えることによって更新され、その後、イントラ、インター、または他の予測に使用される。
Ypred’=clip3(0,(1<<bit_depth)-1,Ypred+h_Y[i])
Upred’=clip3(0,(1<<bit_depth)-1,Upred+h_U[i])
Vpred’=clip3(0,(1<<bit_depth)-1,Vpred+h_V[i])
いくつかの実施形態では、現在のクロマ成分に加えて、クロマのUおよびV成分に対して、成分間(Y)がさらなるオフセット分類に使用されうる。たとえば以下で表33に示されているように、追加の成分間オフセット(h’_U,h’_V)が、現在の成分オフセット(h_U,h_V)で加えられうる。
いくつかの実施形態では、改良された予測サンプル(Upred”,Vpred”)が、対応するクラス・オフセットを加えることによって更新され、その後、イントラ、インター、または他の予測に使用される。
Upred”=clip3(0,(1<<bit_depth)-1,Upred’+h’_U[i])
Vpred”=clip3(0,(1<<bit_depth)-1,Vpred’+h’_V[i])
いくつかの実施形態では、イントラおよびインター予測は、異なるSAOフィルタ・オフセットを使用することができる。
図32は、本開示に開示されるSAO分類方法が本開示のいくつかの実装例による再構築後フィルタとして働くことを示すブロック図である。
いくつかの実施形態では、本明細書に開示されるSAO/CCSAO分類方法(成分間サンプル/コーディング情報分類を含む)は、ツリー・ユニット(TU)の再構築されたサンプルに適用されるフィルタとして働くことができる。図32に示されているように、CCSAOは、再構築後フィルタとして働くことができ、すなわち、再構築されたサンプル(予測/残留サンプルの追加後、デブロッキング前)を分類のための入力として使用し、ルマ/クロマ・サンプルを補償してから、隣接イントラ/インター予測に入ることができる。CCSAO再構築後フィルタは、現在のTUサンプルの歪みを低減させることができ、隣接イントラ/インター・ブロックに対してより良好な予測を与えることができる。より精密な予測によって、より良好な圧縮効率が予期されうる。
図33は、本開示のいくつかの実装例による成分間相関を使用してビデオ信号を復号する例示的なプロセス3300を示す流れ図である。
ビデオ・デコーダ30(図3に示されている)は、ビデオ・データから、APS内に記憶された複数の以前に使用された成分間サンプル適応オフセット(CCSAO)フィルタ・オフセット・セットに関連付けられた適応パラメータ・セット(APS)識別子を受信する(3310)。
ビデオ・デコーダ30は、ビデオ・データから、現在のピクチャまたはスライスに使用されたAPS識別子を示すピクチャ・ヘッダ(PH)またはスライス・ヘッダ(SH)内の構文を受信する(3320)。
ビデオ・デコーダ30は、現在のコーディング・ツリー・ユニット(CTU)に対して、APS識別子に関連付けられたAPS内の複数のオフセット・セットから、特定の以前に使用されたCCSAOフィルタ・オフセット・セットを示すフィルタ・セット索引を復号する(3330)。
ビデオ・デコーダ30は、特定の以前に使用されたCCSAOフィルタ・オフセット・セットを、ビデオ・データの現在のCTUに適用する(3340)。
いくつかの実施形態では、ビデオ・データは、第1の成分および第2の成分を含み、特定の以前に使用されたCCSAOフィルタ・オフセット・セットは、第2の成分のそれぞれのサンプルに関連付けられた第1の成分の1組の1つまたは複数のサンプルから、第2の成分に対するそれぞれの分類子を判定し、それぞれの分類子に従って、第2の成分のそれぞれのサンプルに対するそれぞれのサンプル・オフセットを判定して、判定されたそれぞれのサンプル・オフセットに基づいて、第2の成分のそれぞれのサンプルを修正し、それぞれの各分類子に対する1組の対応する判定されたそれぞれのサンプル・オフセットを、特定の以前に使用されたCCSAOフィルタ・オフセット・セットとして記憶することによって取得される。
いくつかの実施形態では、APS識別子は、以前に使用されたCCSAOフィルタ・オフセット・セットの最大数に関連付けられ、以前に使用されたCCSAOフィルタ・オフセット・セットの数が最大数に到達したという判定に応答して、新しく追加されたCCSAOフィルタ・オフセット・セットが、先入れ先出し(FIFO)機構で、以前に使用されたCCSAOフィルタ・オフセット・セットのうちの1つに取って代わる。
いくつかの実施形態では、APS識別子は、以前に使用されたCCSAOフィルタ・オフセット・セットの最大数に関連付けられ、以前に使用されたCCSAOフィルタ・オフセット・セットの数が最大数に到達したという判定に応答して、新しく追加されたCCSAOフィルタ・オフセット・セットが、最長時間未使用(LRU)機構で、以前に使用されたCCSAOフィルタ・オフセット・セットのうちの1つに取って代わる。
いくつかの実施形態では、FIFO機構で、新しく追加されたCCSAOフィルタ・オフセット・セットは、シーケンス・パラメータ・セット(SPS)、APS、ピクチャ・パラメータ・セット(PPS)、PH、SH、Region、コーディング・ツリー・ユニット(CTU)、コーディング・ユニット(CU)、Subblock、および/またはSampleレベルのうちの1つまたは複数で円形に、以前に使用されたCCSAOフィルタ・オフセット・セットのうちの1つに取って代わる。
いくつかの実施形態では、LRU機構で、新しく追加されたCCSAOフィルタ・オフセット・セットは、SPS、APS、グループ・オブ・ピクチャ(GOP)ごとの構造、PPS、PH、SH、Region、CTU、CU、Subblock、および/またはSampleレベルのうちの1つまたは複数で、以前に使用されたCCSAOフィルタ・オフセット・セットのカウント・テーブルによって識別される最長時間未使用オフセット・セットに取って代わる。
いくつかの実施形態では、最大数は、SPS、APS、PPS、PH、SH、Region、CTU、CU、Subblock、および/またはSampleレベルの1つまたは複数で、事前定義または信号化される。
いくつかの実施形態では、複数の以前に使用されたCCSAOフィルタ・オフセット・セットは、それぞれの分類子に関連付けられた候補位置、バンド情報、エッジ情報、およびコーディング情報のうちの1つまたは複数を含む。
いくつかの実施形態では、APS識別子に関連付けられた以前に使用されたCCSAOフィルタ・オフセット・セットのいずれも、新しく追加されたCCSAOフィルタ・オフセット・セットと同じでない場合、新しく追加されたCCSAOフィルタ・オフセット・セットは、以前に使用されたCCSAOフィルタ・オフセット・セットのうちの1つに取って代わる。
いくつかの実施形態では、APS識別子は、現在のピクチャまたはスライス内の第1の成分および第2の成分に使用され、第1の成分は、第1のCCSAOフィルタ・オフセット・セット交換機構を使用し、第2の成分は、第2のCCSAOフィルタ・オフセット・セット交換機構を使用する。
いくつかの実施形態では、PHまたはSH内の第1の構文は、現在のピクチャまたはスライス内の第1の成分に使用される第1のAPS識別子を示し、PHまたはSH内の第2の構文は、現在のピクチャまたはスライス内の第2の成分に使用される第2のAPS識別子を示す。
図34は、ユーザ・インターフェース3450に結合されたコンピューティング環境3410を示す。コンピューティング環境3410は、データ処理サーバの一部とすることができる。コンピューティング環境3410は、プロセッサ3420、メモリ3430、および入出力(I/O)インターフェース3440を含む。
プロセッサ3420は、典型的に、表示、データ取得、データ通信、および画像処理に関連付けられた動作など、コンピューティング環境3410の全体的な動作を制御する。プロセッサ3420は、前述の方法におけるステップのうちのすべてまたはいくつかを実行するための命令を実行するために、1つまたは複数のプロセッサを含むことができる。さらに、プロセッサ3420は、プロセッサ3420と他の構成要素との間の相互作用を容易にする1つまたは複数のモジュールを含むことができる。プロセッサは、中央処理装置(CPU)、マイクロプロセッサ、単一チップ機械、グラフィカル処理ユニット(GPU)などとすることができる。
メモリ3430は、コンピューティング環境3410の動作に対応するために、様々なタイプのデータを記憶するように構成される。メモリ3430は、所定のソフトウェア3432を含むことができる。そのようなデータの例は、コンピューティング環境3410、ビデオ・データセット、画像データなどで動作させられる任意のアプリケーションまたはメソッドのための命令を含む。メモリ3430は、任意のタイプの揮発性もしくは不揮発性メモリ・デバイス、またはこれらの組合せ、たとえばスタティック・ランダム・アクセス・メモリ(SRAM)、電気的に消去可能なプログラマブル読取り専用メモリ(EEPROM)、消去可能なプログラマブル読取り専用メモリ(EPROM)、プログラマブル読取り専用メモリ(PROM)、読取り専用メモリ(ROM)、磁気メモリ、フラッシュ・メモリ、磁気または光ディスクを使用することによって実装されうる。
I/Oインターフェース3440は、プロセッサ3420と、キーボード、クリック・ホイール、ボタンなどの周辺インターフェース・モジュールとの間のインターフェースを提供する。ボタンは、それだけに限定されるものではないが、ホーム・ボタン、走査開始ボタン、および走査停止ボタンを含むことができる。I/Oインターフェース3440は、エンコーダおよびデコーダに結合されうる。
一実施形態では、前述の方法を実行するためにコンピューティング環境3410内でプロセッサ3420によって実行可能な複数のプログラムをたとえばメモリ3430内に備える非一時的コンピュータ可読記憶媒体も提供される。別法として、非一時的コンピュータ可読記憶媒体には、符号化されたビデオ情報(たとえば、1つまたは複数の構文要素を含むビデオ情報)を含むビットストリームまたはデータストリームが記憶されてよく、このビットストリームまたはデータストリームは、たとえばビデオ・データを復号する際にデコーダ(たとえば、図3のビデオ・デコーダ30)によって使用される上述された符号化方法を使用して、エンコーダ(たとえば、図2のビデオ・エンコーダ20)によって生成される。非一時的コンピュータ可読記憶媒体は、たとえば、ROM、ランダム・アクセス・メモリ(RAM)、CD-ROM、磁気テープ、フロッピー・ディスク、光データ記憶デバイスなどとすることができる。
一実施形態では1つまたは複数のプロセッサ(たとえば、プロセッサ3420)と、1つまたは複数のプロセッサによって実行可能な複数のプログラムが記憶された非一時的コンピュータ可読記憶媒体またはメモリ3430とを備えるコンピューティング・デバイスも提供され、1つまたは複数のプロセッサは、複数のプログラムの実行時に、前述の方法を実行するように構成される。
一実施形態では、前述の方法を実行するためにコンピューティング環境3410内でプロセッサ3420によって実行可能な複数のプログラムをたとえばメモリ3430内に備えるコンピュータ・プログラム製品も提供される。たとえば、コンピュータ・プログラム製品は、非一時的コンピュータ可読記憶媒体を含むことができる。
一実施形態では、コンピューティング環境3410は、上記の方法を実行するために、1つまたは複数のASIC、DSP、デジタル信号処理デバイス(DSPD)、プログラマブル論理デバイス(PLD)、FPGA、GPU、コントローラ、マイクロコントローラ、マイクロプロセッサ、または他の電子構成要素によって実装されうる。
さらなる実施形態はまた、様々な他の実施形態で組み合わされまたは他の方法で再配置された上記の実施形態の様々な部分集合を含む。
1つまたは複数の例では、記載されている機能は、ハードウェア、ソフトウェア、ファームウェア、またはこれらの任意の組合せで実装されうる。ソフトウェアで実装される場合、機能は、1つまたは複数の命令またはコードとして、コンピュータ可読媒体上に記憶されてよく、またはコンピュータ可読媒体を介して伝送されてよく、ハードウェア・ベースの処理ユニットによって実行されてよい。コンピュータ可読媒体は、データ記憶媒体などの有形の媒体に対応するコンピュータ可読記憶媒体、またはたとえば通信プロトコルに従ったある場所から別の場所へのコンピュータ・プログラムの伝達を容易にする任意の媒体を含む通信媒体を含むことができる。このようにして、コンピュータ可読媒体は、概して、(1)非一時的である有形のコンピュータ可読記憶媒体、または(2)信号もしくはキャリア波などの通信媒体に対応することができる。データ記憶媒体は、本出願に記載されている実装例の実装のための命令、コード、および/またはデータ構造を取り出すために、1つもしくは複数のコンピュータまたは1つもしくは複数のプロセッサによってアクセスされうる任意の利用可能な媒体とすることができる。コンピュータ・プログラム製品は、コンピュータ可読媒体を含むことができる。
本明細書の実装例の説明で使用される術語は、特定の実装例について説明することのみを目的とし、特許請求の範囲を限定することを意図したものではない。実装例の説明および添付の特許請求の範囲で使用されるとき、単数形の「a」、「an」、および「the」は、別途文脈が明白に示さない限り、複数形も同様に含むことが意図される。本明細書では、「および/または」という用語は、挙げられている関連項目のうちの1つまたは複数のあらゆる可能な組合せを指し、包含することも理解されよう。「備える、含む(comprises)」および/または「備える、含む(comprising)」という用語は、本明細書で使用されるとき、記載の特徴、要素、および/または構成要素の存在を指定するが、1つまたは複数の他の特徴、要素、構成要素、および/またはこれらの群の存在または追加を除外しないことがさらに理解されよう。
本明細書では、様々な要素について説明するために、第1、第2などの用語が使用されうるが、これらの要素は、これらの用語によって限定されるべきではないことも理解されよう。これらの用語は、1つの要素を別の要素から区別するためにのみ使用される。たとえば、実装例の範囲から逸脱することなく、第1の電極が第2の電極と呼ばれてもよく、同様に第2の電極が第1の電極と呼ばれてもよい。第1の電極および第2の電極はどちらも電極であるが、同じ電極ではない。
本明細書全体にわたって、単数または複数の「一例」、「例」、「例示」などの参照は、ある例に関連して記載されている1つまたは複数の特定の特徴、構造、または特性が、本開示の少なくとも1つの例に含まれることを意味する。したがって、本明細書全体にわたって様々な場所での単数または複数の「一例では」または「例では」、「例示では」などの語句は、必ずしもすべて同じ例を指すとは限らない。さらに、1つまたは複数の例における特定の特徴、構造、または特性は、任意の好適な方法で組み合わされることを含むことができる。
本出願の説明は、例示および説明の目的で提示されており、網羅的であること、または開示される形態で本発明に限定されることが意図されるものではない。多くの修正例、変形例、および代替実装例が、上記の説明および関連する図面に提示される教示に利益を有する当業者には明らかであろう。実施形態は、本発明の原理、実際の応用について最善に説明するために、また当業者であれば様々な実装例に関して本発明を理解し、企図される特定の用途に適した様々な修正例とともに根本的な原理および様々な実装例を最善に利用することを可能にするために、選択および記載されたものである。したがって、特許請求の範囲は、開示される実装例の特有の例に限定されるものではなく、修正例および他の実装例も添付の特許請求の範囲内に含まれることが意図されることを理解されたい。
関連出願
本出願は、全体として参照により組み込まれている、2021年5月26日に出願された「Cross-component Sample Adaptive Offset」という名称の米国仮特許出願第63/193,539号、および2021年6月21日に出願された「Cross-component Sample Adaptive Offset」という名称の米国仮特許出願第63/213,167号に対する優先権を主張するものである。
本出願は、全体として参照により組み込まれている、2021年5月26日に出願された「Cross-component Sample Adaptive Offset」という名称の米国仮特許出願第63/193,539号、および2021年6月21日に出願された「Cross-component Sample Adaptive Offset」という名称の米国仮特許出願第63/213,167号に対する優先権を主張するものである。
本出願は、一般に、ビデオのコーディングおよび圧縮に関し、より詳細には、ルマ(luma)およびクロマ(chroma)両方のコーディング効率を改善する方法および装置に関する。
デジタル・ビデオは、デジタル・テレビジョン、ラップトップまたはデスクトップ・コンピュータ、タブレット・コンピュータ、デジタル・カメラ、デジタル記録デバイス、デジタル・メディア・プレーヤ、ビデオ・ゲーミング・コンソール、スマートフォン、ビデオ遠隔会議デバイス、ビデオ・ストリーミング・デバイスなどの様々な電子デバイスによって対応される。電子デバイスは、ビデオ圧縮/解凍規格を実装することによって、デジタル・ビデオ・データの伝送、受信、符号化、復号、および/または記憶を行う。いくつかのよく知られているビデオ・コーディング規格には、Versatile Video Coding(VVC)、High Efficiency Video Coding(HEVC)(H.265またはMPEG-H Part 2としても知られている)、およびAdvanced Video Coding(AVC)(H.264またはMPEG-4 Part 10としても知られている)が含まれ、これらはISO/IEC MPEGおよびITU-T VCEGによって共同開発されたものである。AOMedia Video 1(AV1)は、先行規格VP9の後継として、Alliance for Open Media(AOM)によって開発された。Audio Video Coding(AVS)は、デジタル音声およびデジタル・ビデオ圧縮規格を指し、Audio and Video Coding Standard Workgroupによって開発された別のビデオ圧縮規格シリーズである。
ビデオ圧縮は、典型的に、ビデオ・データに固有の冗長性を低減または除去するために、空間(イントラ・フレーム)予測および/または時間(インター・フレーム)予測を実行することを含む。ブロック・ベースのビデオ・コーディングの場合、1つのビデオ・フレームが1つまたは複数のスライスに分割され、各スライスが複数のビデオ・ブロックを有しており、ビデオ・ブロックは、コーディング・ツリー・ユニット(CTU)と呼ばれることもある。各CTUは、1つのコーディング・ユニット(CU)を含むことができ、または事前定義された最小CUサイズに到達するまで、より小さいCUに再帰的に分割されてもよい。各CU(リーフCUとも呼ばれる)は1つまたは複数の変換ユニット(TU)を含み、各CUはまた、1つまたは複数の予測ユニット(PU)を含む。各CUは、イントラ、インター、またはIBCモードでコード化されうる。ビデオ・フレームのイントラ・コード化(I)スライス内のビデオ・ブロックは、同じビデオ・フレーム内の隣接ブロックにおける基準サンプルに対する空間予測を使用して符号化される。ビデオ・フレームのインター・コード化(PまたはB)スライス内のビデオ・ブロックは、同じビデオ・フレーム内の隣接ブロックにおける基準サンプルに対する空間予測、または他の以前および/もしくは将来の基準ビデオ・フレーム内の基準サンプルに対する時間予測を使用することができる。
前に符号化された基準ブロック、たとえば隣接ブロックに基づく空間または時間予測は、コード化されるべき現在のビデオ・ブロックに対する予測ブロックを生じさせる。基準ブロックを発見するプロセスは、ブロック・マッチング・アルゴリズムによって実現されうる。コード化されるべき現在のブロックと予測ブロックとの間の画素差を表す残留データが、残留ブロック(residual block)または予測誤差と呼ばれる。インター・コード化ブロックは、予測ブロックを形成する基準フレーム内の基準ブロックおよび残留ブロックを指す動きベクトルに従って符号化される。動きベクトルを判定するプロセスは、典型的に、動き推定と呼ばれる。イントラ・コード化ブロックは、イントラ予測モードおよび残留ブロックに従って符号化される。さらに圧縮する場合、残留ブロックが画素ドメインから変換ドメイン、たとえば周波数ドメインに変換されて、残留変換係数を生じさせ、残留変換係数は次いで量子化されてもよい。量子化された変換係数は、最初は2次元アレイで配列されており、走査されて変換係数の1次元ベクトルをもたらすことができ、次いでビデオ・ビットストリームにエントロピー符号化されて、さらなる圧縮を実現することができる。
符号化されたビデオ・ビットストリームは次いで、デジタル・ビデオ能力を有する別の電子デバイスによってアクセスされるようにコンピュータ可読記憶媒体(たとえば、フラッシュ・メモリ)内に保存され、または電子デバイスへ有線もしくは無線で直接伝送される。電子デバイスは次いで、たとえば符号化されたビデオ・ビットストリームを解析して、ビットストリームから構文要素(syntax elements)を取得し、ビットストリームから取得された構文要素に少なくとも部分的に基づいて、符号化されたビデオ・ビットストリームからデジタル・ビデオ・データをその元の形式に再構築することによって、ビデオの解凍(上述されたビデオ圧縮とは逆のプロセスである)を実行し、再構築されたデジタル・ビデオ・データを電子デバイスのディスプレイ上に描画する。
デジタル・ビデオの品質が高解像度から4K×2K、またはさらには8K×4Kになるとともに、符号化/復号されるべきビデオ・データの量は指数関数的に増加する。復号されたビデオ・データの画像品質を維持しながら、ビデオ・データがより効率的に符号化/復号されうる方法が、常に課題となっている。
本出願は、ビデオ・データの符号化および復号、より詳細には、ルマ成分とクロマ成分との間の成分間(cross-component)の関係を探ることによってコーディング効率を改善することを含めて、ルマ成分およびクロマ成分両方のコーディング効率を改善する方法および装置に関係する実装例を記載する。
本出願の第1の態様によれば、ビデオ・データを復号する方法が、ビデオ・データから、APS内に記憶された複数の以前に使用された成分間サンプル適応オフセット(Cross-Component Sample Adaptive Offset)(CCSAO)フィルタ・オフセット・セット(filter offset set)に関連付けられた適応パラメータ・セット(APS)識別子を受信することと、ビデオ・データから、現在のピクチャまたはスライスに使用されたAPS識別子を示すピクチャ・ヘッダ(PH)またはスライス・ヘッダ(SH)内の構文を受信することと、現在のコーディング・ツリー・ユニット(CTU)に対して、APS識別子に関連付けられたAPS内の複数のオフセット・セットから、特定の以前に使用されたCCSAOフィルタ・オフセット・セットを示すフィルタ・セット索引を復号することと、特定の以前に使用されたCCSAOフィルタ・オフセット・セットを、ビデオ・データの現在のCTUに適用することとを含む。
いくつかの実施形態では、ビデオ・データは、第1の成分および第2の成分を含み、特定の以前に使用されたCCSAOフィルタ・オフセット・セットは、第2の成分のそれぞれのサンプルに関連付けられた第1の成分の1組の1つまたは複数のサンプルから、第2の成分に対するそれぞれの分類子を判定し、それぞれの分類子に従って、第2の成分のそれぞれのサンプルに対するそれぞれのサンプル・オフセット(sample offset)を判定して、判定されたそれぞれのサンプル・オフセットに基づいて、第2の成分のそれぞれのサンプルを修正し、それぞれの各分類子に対する1組の対応する判定されたそれぞれのサンプル・オフセットを、特定の以前に使用されたCCSAOフィルタ・オフセット・セットとして記憶することによって取得される。
本出願の第2の態様によれば、電子装置が、1つまたは複数の処理ユニットと、メモリと、メモリ内に記憶された複数のプログラムとを含む。プログラムは、1つまたは複数の処理ユニットによって実行されたとき、電子装置に、上述されたビデオ・データをコード化する方法を実行させる。
本出願の第3の態様によれば、非一時的コンピュータ可読記憶媒体が、1つまたは複数の処理ユニットを有する電子装置による実行のために、複数のプログラムを記憶する。プログラムは、1つまたは複数の処理ユニットによって実行されたとき、電子装置に、上述されたビデオ・データをコード化する方法を実行させる。
本出願の第4の態様によれば、コンピュータ可読記憶媒体が、上述されたビデオ・コーディング方法によって生成されたビデオ情報を含むビットストリームを記憶する。
上記の概略的な説明および以下の詳細な説明はどちらも単なる例であり、本開示を制限するものではないことを理解されたい。
添付の図面は、実装例のさらなる理解を提供するために含まれ、本明細書に組み込まれて、本明細書の一部を構成するものであり、記載される実装例を示し、本説明とともに根本的な原理を説明する働きをする。同じ参照番号は、対応する部分を指す。
次に、添付の図面にその例が示されている特有の実装例を詳細に参照する。以下の詳細な説明において、本明細書に提示されている主題の理解を支援するために、多数の非限定的な特有の詳細について述べる。しかし、特許請求の範囲から逸脱することなく様々な代替手段が使用されてよく、この主題はこれらの特有の詳細がなくても実施されうることが、当業者には明らかであろう。たとえば、本明細書に提示されている主題は、デジタル・ビデオ能力を有する多くのタイプの電子デバイスで実装されうることが、当業者には明らかであろう。
第1世代のAVS規格は、中華民国国家標準「Information Technology, Advanced Audio Video Coding, Part 2: Video」(AVS1として知られている)、および「Information Technology, Advanced Audio Video Coding Part 16: Radio Television Video」(AVS+として知られている)を含む。これは、MPEG-2規格と比較すると、同じ知覚品質で約50%のビット速度の節減を提供することができる。第2世代のAVS規格は、一連の中華民国国家標準「Information Technology, Efficient Multimedia Coding」(AVS2として知られている)を含み、これは主に追加のHD TVプログラムの伝送を標的とする。AVS2のコーディング効率は、AVS+のコーディング効率の2倍である。一方、AVS2規格のビデオ部は、Institute of Electrical and Electronics Engineers(IEEE)によって、応用のための1つの国際規格として提出された。AVS3規格は、最新の国際規格HEVCのコーディング効率をしのぐことを目的とするUHDビデオ向けの1つの新世代のビデオ・コーディング規格であり、HEVC規格に比べて約30%のビット速度の節減を提供する。2019年3月、第68回AVS会議において、AVS3-P2ベースラインが完成され、これはHEVC規格に比べて約30%のビット速度の節減を提供する。現在、高性能モデル(HPM)と呼ばれる1つの基準ソフトウェアは、AVS3規格の基準実装を実証するために、AVSグループによって維持されている。HEVCと同様に、AVS3規格は、ブロック・ベースのハイブリッド・ビデオ・コーディング・フレームワークの上に構築されている。
図1は、本開示のいくつかの実装例によるビデオ・ブロックを並行して符号化および復号するための例示的なシステム10を示すブロック図である。図1に示されているように、システム10はソース・デバイス12を含み、ソース・デバイス12は、ビデオ・データを生成し、後に宛先デバイス14によって復号されるように符号化する。ソース・デバイス12および宛先デバイス14は、デスクトップまたはラップトップ・コンピュータ、タブレット・コンピュータ、スマートフォン、セットトップ・ボックス、デジタル・テレビジョン、カメラ、表示デバイス、デジタル・メディア・プレーヤ、ビデオ・ゲーミング・コンソール、ビデオ・ストリーミング・デバイスなどを含む多種多様な電子デバイスのいずれかを構成することができる。いくつかの実装例では、ソース・デバイス12および宛先デバイス14には無線通信能力が装備される。
いくつかの実装例では、宛先デバイス14は、リンク16を介して、復号されるべき符号化されたビデオ・データを受信することができる。リンク16は、符号化されたビデオ・データをソース・デバイス12から宛先デバイス14へ移動させることが可能な任意のタイプの通信媒体またはデバイスを備えることができる。一例では、リンク16は、ソース・デバイス12が符号化されたビデオ・データを直接宛先デバイス14へ実時間で伝送することを有効化するための通信媒体を備えることができる。符号化されたビデオ・データは、無線通信プロトコルなどの通信規格に従って変調され、宛先デバイス14へ伝送されうる。通信媒体は、無線周波(RF)スペクトルまたは1つもしくは複数の物理的伝送線など、任意の無線または有線通信媒体を含むことができる。通信媒体は、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、またはグローバル・ネットワーク、たとえばインターネットなど、パケット・ベースのネットワークの一部を形成することができる。通信媒体は、ソース・デバイス12から宛先デバイス14への通信を容易にするのに有用になりうるルータ、スイッチ、基地局、または任意の他の機器を含むことができる。
いくつかの他の実装例では、符号化されたビデオ・データは、出力インターフェース22から記憶デバイス32へ伝送されうる。その後、記憶デバイス32内の符号化されたビデオ・データは、宛先デバイス14によって入力インターフェース28を介してアクセスされうる。記憶デバイス32は、符号化されたビデオ・データを記憶するためのハード・ドライブ、Blu-rayディスク、DVD、CD-ROM、フラッシュ・メモリ、揮発性もしくは不揮発性メモリ、または任意の他の好適なデジタル記憶媒体など、様々な分散型(distributed)または局所(locally)アクセス型のデータ記憶媒体のいずれかを含むことができる。さらなる例では、記憶デバイス32は、ソース・デバイス12によって生成される符号化されたビデオ・データを保持することができるファイル・サーバまたは別の中間記憶デバイスに対応することができる。宛先デバイス14は、記憶デバイス32からストリーミングまたはダウンロードを介して、記憶されたビデオ・データにアクセスすることができる。ファイル・サーバは、符号化されたビデオ・データを記憶し、符号化されたビデオ・データを宛先デバイス14へ伝送することが可能な任意のタイプのコンピュータとすることができる。例示的なファイル・サーバは、ウェブ・サーバ(たとえば、ウェブサイト向け)、FTPサーバ、ネットワーク・アタッチ・ストレージ(NAS)デバイス、またはローカル・ディスク・ドライブを含む。宛先デバイス14は、ファイル・サーバ上に記憶されている符号化されたビデオ・データにアクセスするのに好適な無線チャネル(たとえば、Wi-Fi接続)、有線接続(たとえば、DSL、ケーブル・モデムなど)、または両方の組合せを含む任意の規格データ接続を介して、符号化されたビデオ・データにアクセスすることができる。記憶デバイス32からの符号化されたビデオ・データの伝送は、ストリーミング伝送、ダウンロード伝送、または両方の組合せとすることができる。
図1に示されているように、ソース・デバイス12は、ビデオ・ソース18、ビデオ・エンコーダ20、および出力インターフェース22を含む。ビデオ・ソース18は、ビデオ取り込みデバイス、たとえばビデオ・カメラ、以前に取り込まれたビデオを含むビデオ・アーカイブ、ビデオ・コンテンツ・プロバイダからビデオを受信するためのビデオ・フィード・インターフェース、および/もしくはコンピュータ・グラフィックス・データをソース・ビデオとして生成するためのコンピュータ・グラフィックス・システムなどのソース、またはそのようなソースの組合せを含むことができる。一例として、ビデオ・ソース18がセキュリティ監視システムのビデオ・カメラである場合、ソース・デバイス12および宛先デバイス14は、カメラ付き電話またはテレビ電話を形成することができる。しかし、本出願に記載されている実装例は、一般のビデオ・コーディングに該当することができ、無線および/または有線の応用例に適用されうる。
取り込まれた、事前に取り込まれた、またはコンピュータで生成されたビデオは、ビデオ・エンコーダ20によって符号化されうる。符号化されたビデオ・データは、ソース・デバイス12の出力インターフェース22を介して宛先デバイス14へ直接伝送されうる。符号化されたビデオ・データはまた(または別法として)、復号および/または再生のために、宛先デバイス14または他のデバイスによって後にアクセスされるように、記憶デバイス32上へ記憶されうる。出力インターフェース22は、モデムおよび/またはトランスミッタをさらに含むことができる。
宛先デバイス14は、入力インターフェース28、ビデオ・デコーダ30、および表示デバイス34を含む。入力インターフェース28は、レシーバおよび/またはモデムを含むことができ、リンク16を介して符号化されたビデオ・データを受信することができる。リンク16を介して通信される、または記憶デバイス32上に提供される、符号化されたビデオ・データは、ビデオ・データを復号する際にビデオ・デコーダ30によって使用されるように、ビデオ・エンコーダ20によって生成された様々な構文要素を含むことができる。そのような構文要素は、通信媒体上で伝送される、記憶媒体上に記憶される、またはファイル・サーバ上に記憶される、符号化されたビデオ・データ内に含まれうる。
いくつかの実装例では、宛先デバイス14は、表示デバイス34を含むことができ、表示デバイス34は、一体化された表示デバイスであっても、宛先デバイス14と通信するように構成された外部表示デバイスであってもよい。表示デバイス34は、復号されたビデオ・データを使用者に表示し、液晶ディスプレイ(LCD)、プラズマ・ディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプの表示デバイスなど、様々な表示デバイスのいずれかを構成することができる。
ビデオ・エンコーダ20およびビデオ・デコーダ30は、VVC、HEVC、MPEG-4、Part 10、Advanced Video Coding(AVC)、AVSなどの専有のもしくは業界の規格、またはそのような規格の拡張に従って動作することができる。本出願は、特有のビデオ・コーディング/復号規格に限定されるものではなく、他のビデオ・コーディング/復号規格に該当しうることを理解されたい。概して、ソース・デバイス12のビデオ・エンコーダ20は、これらの現在または将来の規格のいずれかに従って、ビデオ・データを符号化するように構成されうることが企図される。同様に、概して、宛先デバイス14のビデオ・デコーダ30は、これらの現在または将来の規格のいずれかに従って、ビデオ・データを復号するように構成されうることも企図される。
ビデオ・エンコーダ20およびビデオ・デコーダ30は各々、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールド・プログラマブル・ゲート・アレイ(FPGA)、離散論理、ソフトウェア、ハードウェア、ファームウェア、またはこれらの任意の組合せなど、様々な好適なエンコーダ回路のいずれかとして実装されうる。部分的にソフトウェアで実装されるとき、電子デバイスは、ソフトウェアに対する命令を好適な非一時的コンピュータ可読媒体に記憶し、1つまたは複数のプロセッサを使用してこれらの命令をハードウェアで実行して、本開示に開示されているビデオ・コーディング/復号動作を実行することができる。ビデオ・エンコーダ20およびビデオ・デコーダ30の各々は、1つまたは複数のエンコーダまたはデコーダに含まれてよく、これらはいずれも、それぞれのデバイスにおいて複合エンコーダ/デコーダ(CODEC)の一部として一体化されうる。
図2は、本出願に記載されているいくつかの実装例による例示的なビデオ・エンコーダ20を示すブロック図である。ビデオ・エンコーダ20は、ビデオ・フレーム内でビデオ・ブロックのイントラおよびインター予測コーディングを実行することができる。イントラ予測コーディングは、所与のビデオ・フレームまたはピクチャ内のビデオ・データの空間冗長性を低減または除去するために、空間予測に依拠する。インター予測コーディングは、ビデオ・シーケンスの隣接するビデオ・フレームまたはピクチャ内のビデオ・データの時間冗長性を低減または除去するために、時間予測に依拠する。
図2に示されているように、ビデオ・エンコーダ20は、ビデオ・データ・メモリ40、予測処理ユニット41、復号ピクチャ・バッファ(DPB)64、加算器50、変換処理ユニット52、量子化ユニット54、およびエントロピー符号化ユニット56を含む。予測処理ユニット41は、動き推定ユニット42、動き補償ユニット44、区画ユニット45、イントラ予測処理ユニット46、およびイントラ・ブロック・コピー(BC)ユニット48をさらに含む。いくつかの実装例では、ビデオ・エンコーダ20はまた、ビデオ・ブロックの再構築のための逆量子化ユニット58、逆変換処理ユニット60、および加算器62を含む。ブロック境界をフィルタリングして再構築されたビデオからブロック・アーティファクトを除去するために、デブロッキング・フィルタなどのループ内フィルタ63が、加算器62とDPB64との間に置かれうる。デブロッキング・フィルタに加えて、加算器62の出力をフィルタリングするために、別のループ内フィルタ63も使用されうる。基準ピクチャ・ストアに入れられ、将来のビデオ・ブロックをコード化するための基準として使用される前に、サンプル適応オフセット(SAO)および適応ループ内フィルタ(ALF)などのさらなるループ内フィルタ63が、再構築されたCU上で適用されうる。ビデオ・エンコーダ20は、固定されたもしくはプログラム可能なハードウェア・ユニットの形態をとることができ、または示されている固定されたもしくはプログラム可能なハードウェア・ユニットのうちの1つもしくは複数の間で分割されうる。
ビデオ・データ・メモリ40は、ビデオ・エンコーダ20の構成要素によって符号化されるべきビデオ・データを記憶することができる。ビデオ・データ・メモリ40内のビデオ・データは、たとえばビデオ・ソース18から取得されうる。DPB64は、ビデオ・エンコーダ20(たとえば、イントラまたはインター予測コーディング・モード)がビデオ・データを符号化する際に使用するための基準ビデオ・データを記憶するバッファである。ビデオ・データ・メモリ40およびDPB64は、様々なメモリ・デバイスのいずれかによって形成されうる。様々な例では、ビデオ・データ・メモリ40は、ビデオ・エンコーダ20の他の構成要素とオンチップであっても、それらの構成要素に対してオフチップであってもよい。
図2に示されているように、ビデオ・データを受信した後、予測処理ユニット41内の区画ユニット45が、ビデオ・データをビデオ・ブロックに分割する。この分割はまた、ビデオ・データに関連付けられた4分木構造などの事前定義された分割構造に従って、ビデオ・フレームをスライス、タイル、または他のより大きいコーディング・ユニット(CU)に分割することを含むこともできる。ビデオ・フレームは、複数のビデオ・ブロック(またはタイルと呼ばれる数組のビデオ・ブロック)に分割されうる。予測処理ユニット41は、誤差結果(たとえば、コード化速度および歪みレベル)に基づいて、現在のビデオ・ブロックに対して、複数のイントラ予測コーディング・モード(intra predictive coding modes)のうちの1つ、または複数のインター予測コーディング・モード(inter predictive coding modes)のうちの1つなど、複数の可能な予測コーディング・モードのうちの1つを選択することができる。予測処理ユニット41は、結果のイントラまたはインター予測コード化ブロックを、残留ブロックを生成するために加算器50に提供することができ、後に基準フレームの一部として使用するための符号化されたブロックを再構築するために加算器62に提供することができる。予測処理ユニット41はまた、動きベクトル、イントラモード・インジケータ、区画情報などの構文要素、および他のそのような構文情報を、エントロピー符号化ユニット56に提供する。
現在のビデオ・ブロックに対して適当なイントラ予測コーディング・モードを選択するために、予測処理ユニット41内のイントラ予測処理ユニット46は、空間予測を提供するために、コード化されるべき現在のブロックと同じフレーム内の1つまたは複数の隣接ブロックに対して、現在のビデオ・ブロックのイントラ予測コーディングを実行することができる。予測処理ユニット41内の動き推定ユニット42および動き補償ユニット44は、時間予測を提供するために、1つまたは複数の基準フレーム内の1つまたは複数の予測ブロックに対して、現在のビデオ・ブロックのインター予測コーディングを実行する。ビデオ・エンコーダ20は、たとえばビデオ・データの各ブロックに対して適当なコーディング・モードを選択するために、複数のコーディング・パスを実行することができる。
いくつかの実装例では、動き推定ユニット42が、ビデオ・フレームのシーケンス内の所定のパターンに従って、基準ビデオ・フレーム内の予測ブロックに対する現在のビデオ・フレーム内のビデオ・ブロックの予測ユニット(PU)の変位を示す動きベクトルを生成することによって、現在のビデオ・フレームに対するインター予測モードを判定する。動き推定ユニット42によって実行される動き推定は、動きベクトルを生成するプロセスであり、ビデオ・ブロックに対する動きを推定する。動きベクトルは、たとえば、現在のフレーム内でコード化されている現在のブロック(または他のコード化ユニット)に対する基準フレーム内の予測ブロック(または他のコード化ユニット)に対する現在のビデオ・フレームまたはピクチャ内のビデオ・ブロックのPUの変位を示すことができる。所定のパターンは、PフレームまたはBフレームとしてシーケンス内のビデオ・フレームを指定することができる。イントラBCユニット48は、インター予測のための動き推定ユニット42による動きベクトルの判定と同様に、イントラBCコーディングのために、ベクトル、たとえばブロック・ベクトルを判定することができ、またはブロック・ベクトルを判定するために、動き推定ユニット42を利用することができる。
予測ブロックは、基準フレームのうち、画素差に関してコード化されるべきビデオ・ブロックのPUに密接に整合すると見なされたブロックであり、これは、絶対差和(SAD)、2乗差和(SSD)、または他の差分計量によって判定されうる。いくつかの実装例では、ビデオ・エンコーダ20は、DPB64に記憶されている基準フレームの整数未満の画素位置に対する値を計算することができる。たとえば、ビデオ・エンコーダ20は、基準フレームの4分の1画素位置、8分の1画素位置、または他の分数の画素位置の値を補間(interpolate)することができる。したがって、動き推定ユニット42は、完全な画素位置および分数の画素位置に対する動き探索を実行し、分数の画素精度で動きベクトルを出力することができる。
動き推定ユニット42は、PUの位置と、第1の基準フレーム・リスト(List0)または第2の基準フレーム・リスト(List1)から選択された基準フレームの予測ブロックの位置とを比較することによって、インター予測コード化フレーム内のビデオ・ブロックのPUに対する動きベクトルを計算し、これらのリストの各々は、DPB64に記憶されている1つまたは複数の基準フレームを識別する。動き推定ユニット42は、計算された動きベクトルを動き補償ユニット44へ送信し、次いでエントロピー符号化ユニット56へ送信する。
動き補償ユニット44によって実行される動き補償は、動き推定ユニット42によって判定された動きベクトルに基づいて、予測ブロックをフェッチまたは生成することを伴うことができる。現在のビデオ・ブロックのPUに対する動きベクトルを受信したとき、動き補償ユニット44は、基準フレーム・リストのうちの1つにおいて動きベクトルが指す予測ブロックの位置を特定し、この予測ブロックをDPB64から取り出し、この予測ブロックを加算器50へ転送することができる。加算器50は次いで、コード化されている現在のビデオ・ブロックの画素値から、動き補償ユニット44によって提供された予測ブロックの画素値を引くことによって、画素差値の残留ビデオ・ブロックを形成する。残留ビデオ・ブロックを形成する画素差値は、ルマもしくはクロマ差成分または両方を含むことができる。動き補償ユニット44はまた、ビデオ・フレームのビデオ・ブロックを復号する際にビデオ・デコーダ30によって使用されるように、ビデオ・フレームのビデオ・ブロックに関連付けられた構文要素を生成することができる。構文要素は、たとえば、予測ブロックを識別するために使用される動きベクトルを画定する構文要素、予測モードを示す任意のフラグ、または本明細書に記載されている任意の他の構文情報を含むことができる。動き推定ユニット42および動き補償ユニット44は高度に一体化されうるが、概念上の目的で別個に示されていることに留意されたい。
いくつかの実装例では、イントラBCユニット48は、動き推定ユニット42および動き補償ユニット44に関連して上述されたものと同様に、ベクトルを生成して予測ブロックをフェッチすることができるが、予測ブロックは、コード化されている現在のブロックと同じフレーム内にあり、ベクトルは、動きベクトルではなくブロック・ベクトルと呼ばれている。特に、イントラBCユニット48は、現在のブロックを符号化するために使用するイントラ予測モードを判定することができる。いくつかの例では、イントラBCユニット48は、たとえば別個の符号化パス中に、様々なイントラ予測モードを使用して現在のブロックを符号化することができ、速度歪み分析によってその性能を試験することができる。次に、イントラBCユニット48は、様々な試験されたイントラ予測モードの中から適当なイントラ予測モードを選択し、それに応じてイントラモード・インジケータを使用および生成することができる。たとえば、イントラBCユニット48は、様々な試験されたイントラ予測モードに対して速度歪み分析を使用して速度歪み値を計算することができ、試験されたモードの中から最善の速度歪み特性を有するイントラ予測モードを適当なイントラ予測モードとして選択し、使用することができる。速度歪み分析は、概して、符号化されたブロックと、符号化されたブロックをもたらすために符号化された元の符号化されていないブロックとの間で、歪み(または誤差)の量を判定し、ならびに符号化されたブロックをもたらすために使用されるビット速度(すなわち、ビットの数)を判定する。イントラBCユニット48は、様々な符号化されたブロックに対する歪みおよび速度からの比を計算して、どのイントラ予測モードがそのブロックに対して最善の速度歪み値を呈するかを判定することができる。
他の例では、イントラBCユニット48は、本明細書に記載されている実装例によって、動き推定ユニット42および動き補償ユニット44を全体的または部分的に使用して、イントラBC予測のためのそのような機能を実行することができる。いずれの場合も、イントラ・ブロック・コピーのために、予測ブロックは、画素差に関してコード化されるべきブロックに密接に整合すると見なされたブロックとすることができ、これは、絶対差和(SAD)、2乗差和(SSD)、または他の差分計量によって判定されてよく、予測ブロックの識別は、整数未満の画素位置に対する値の計算を含むことができる。
予測ブロックが、イントラ予測に従って同じフレームからのものであるか、それともインター予測に従って異なるフレームからのものであるかにかかわらず、ビデオ・エンコーダ20は、コード化されている現在のビデオ・ブロックの画素値から予測ブロックの画素値を引いて画素差値を形成することによって、残留ビデオ・ブロックを形成することができる。残留ビデオ・ブロックを形成する画素差値は、ルマおよびクロマ両方の成分差を含むことができる。
イントラ予測処理ユニット46は、上述されているように、動き推定ユニット42および動き補償ユニット44によって実行されるインター予測、またはイントラBCユニット48によって実行されるイントラ・ブロック・コピー予測に対する代替手段として、現在のビデオ・ブロックをイントラ予測することができる。特に、イントラ予測処理ユニット46は、現在のブロックを符号化するために使用するイントラ予測モードを判定することができる。その際、イントラ予測処理ユニット46は、たとえば別個の符号化パス中に、様々なイントラ予測モードを使用して現在のブロックを符号化することができ、イントラ予測処理ユニット46(または、いくつかの例ではモード選択ユニット)は、試験されたイントラ予測モードから適当なイントラ予測モードを選択して使用することができる。イントラ予測処理ユニット46は、そのブロックに対する選択されたイントラ予測モードを示す情報を、エントロピー符号化ユニット56に提供することができる。エントロピー符号化ユニット56は、ビットストリーム内の選択されたイントラ予測モードを示す情報を符号化することができる。
予測処理ユニット41が、インター予測またはイントラ予測を介して、現在のビデオ・ブロックに対する予測ブロックを判定した後、加算器50は、現在のビデオ・ブロックから予測ブロックを引くことによって、残留ビデオ・ブロックを形成する。残留ブロック内の残留ビデオ・データは、1つまたは複数の変換ユニット(TU)に含まれてよく、変換処理ユニット52に提供される。変換処理ユニット52は、離散コサイン変換(DCT)または概念上類似の変換などの変換を使用して、残留ビデオ・データを残留変換係数に変換する。
変換処理ユニット52は、結果の変換係数を量子化ユニット54へ送信することができる。量子化ユニット54は、変換係数を量子化して、ビット速度をさらに低減させる。量子化プロセスはまた、係数のいくつかまたはすべてに関連付けられたビット深さを低減させることができる。量子化度は、量子化パラメータを調整することによって修正されうる。いくつかの例では、量子化ユニット54は次いで、量子化された変換係数を含む行列の走査を実行することができる。別法として、エントロピー符号化ユニット56が走査を実行することができる。
量子化に続いて、エントロピー符号化ユニット56は、たとえばコンテキスト適応型可変長コーディング(CAVLC)、コンテキスト適応型バイナリ算術コーディング(CABAC)、構文ベースのコンテキスト適応型バイナリ算術コーディング(SBAC)、確率区間分割エントロピー(PIPE)コーディング、または別のエントロピー符号化方法もしくは技法を使用して、量子化された変換係数をビデオ・ビットストリームにエントロピー符号化する。符号化されたビットストリームは次いで、ビデオ・デコーダ30に伝送されてよく、または後のビデオ・デコーダ30への伝送もしくはビデオ・デコーダ30による取出しのために、記憶デバイス32内に保管されてよい。エントロピー符号化ユニット56はまた、コード化されている現在のビデオ・フレームに対する動きベクトルおよび他の構文要素をエントロピー符号化することができる。
逆量子化ユニット58および逆変換処理ユニット60は、それぞれ逆量子化および逆変換を適用して、画素ドメイン内の残留ビデオ・ブロックを再構築し、他のビデオ・ブロックの予測のための基準ブロックを生成する。上述されているように、動き補償ユニット44は、DPB64に記憶されているフレームの1つまたは複数の基準ブロックから、動き補償予測ブロックを生成することができる。動き補償ユニット44はまた、1つまたは複数の補間フィルタを予測ブロックに適用して、動き推定で使用するための整数未満の画素値を計算することができる。
加算器62は、動き補償ユニット44によってもたらされる動き補償予測ブロックに、再構築された残留ブロックを加えて、DPB64に記憶するための基準ブロックをもたらす。基準ブロックは次いで、イントラBCユニット48、動き推定ユニット42、および動き補償ユニット44によって、後のビデオ・フレーム内の別のビデオ・ブロックをインター予測するための予測ブロックとして使用されうる。
図3は、本出願のいくつかの実装例による例示的なビデオ・デコーダ30を示すブロック図である。ビデオ・デコーダ30は、ビデオ・データ・メモリ79、エントロピー復号ユニット80、予測処理ユニット81、逆量子化ユニット86、逆変換処理ユニット88、加算器90、およびDPB92を含む。予測処理ユニット81は、動き補償ユニット82、イントラ予測処理ユニット84、およびイントラBCユニット85をさらに含む。ビデオ・デコーダ30は、復号プロセスを実行することができ、復号プロセスは概して、図2に関連してビデオ・エンコーダ20に関して上述された符号化プロセスとは逆方向である。たとえば、動き補償ユニット82は、エントロピー復号ユニット80から受信された動きベクトルに基づいて、予測データを生成することができ、イントラ予測ユニット84は、エントロピー復号ユニット80から受信されたイントラ予測モード・インジケータに基づいて、予測データを生成することができる。
いくつかの例では、ビデオ・デコーダ30のユニットは、本出願の実装例を実行するタスクが与えられうる。また、いくつかの例では、本開示の実装例は、ビデオ・デコーダ30のユニットの1つまたは複数の間で分割されうる。たとえば、イントラBCユニット85は、単独で、または動き補償ユニット82、イントラ予測処理ユニット84、およびエントロピー復号ユニット80などのビデオ・デコーダ30の他のユニットと組み合わせて、本出願の実装例を実行することができる。いくつかの例では、ビデオ・デコーダ30は、イントラBCユニット85を含まなくてもよく、イントラBCユニット85の機能は、動き補償ユニット82などの予測処理ユニット81の他の構成要素によって実行されうる。
ビデオ・データ・メモリ79は、ビデオ・デコーダ30の他の構成要素によって復号されるように、符号化されたビデオ・ビットストリームなどのビデオ・データを記憶することができる。ビデオ・データ・メモリ79に記憶されているビデオ・データは、たとえば記憶デバイス32から、カメラなどのローカル・ビデオ・ソースから、ビデオ・データの有線もしくは無線ネットワーク通信を介して、または物理的データ記憶媒体(たとえば、フラッシュ・ドライブまたはハード・ディスク)にアクセスすることによって、取得されうる。ビデオ・データ・メモリ79は、符号化されたビデオ・ビットストリームからの符号化されたビデオ・データを記憶するコード化ピクチャ・バッファ(CPB)を含むことができる。ビデオ・デコーダ30の復号ピクチャ・バッファ(DPB)92は、ビデオ・デコーダ30(たとえば、イントラまたはインター予測コーディング・モード)がビデオ・データを復号する際に使用するための基準ビデオ・データを記憶する。ビデオ・データ・メモリ79およびDPB92は、同期DRAM(SDRAM)を含むダイナミック・ランダム・アクセス・メモリ(DRAM)、磁気抵抗RAM(MRAM)、抵抗RAM(RRAM)などの様々なメモリ・デバイス、または他のタイプのメモリ・デバイスのいずれかによって形成されうる。例示の目的で、ビデオ・データ・メモリ79およびDPB92は、図3ではビデオ・デコーダ30の2つの別個の構成要素として描かれている。しかし、ビデオ・データ・メモリ79およびDPB92は、同じメモリ・デバイスによって提供されても、別個のメモリ・デバイスによって提供されてもよいことが、当業者には明らかであろう。いくつかの例では、ビデオ・データ・メモリ79は、ビデオ・デコーダ30の他の構成要素とオンチップであっても、それらの構成要素に対してオフチップであってもよい。
復号プロセス中、ビデオ・デコーダ30は、符号化されたビデオ・フレームのビデオ・ブロックおよび関連付けられた構文要素を表す符号化されたビデオ・ビットストリームを受信する。ビデオ・デコーダ30は、ビデオ・フレーム・レベルおよび/またはビデオ・ブロック・レベルで構文要素を受信することができる。ビデオ・デコーダ30のエントロピー復号ユニット80は、ビットストリームをエントロピー復号して、量子化された係数、動きベクトル、またはイントラ予測モード・インジケータ、および他の構文要素を生成する。エントロピー復号ユニット80は次いで、動きベクトルおよび他の構文要素を予測処理ユニット81へ転送する。
ビデオ・フレームが、イントラ予測コード化(I)フレームとしてコード化されるとき、または他のタイプのフレーム内のイントラ・コード化予測ブロックに対してコード化されるとき、予測処理ユニット81のイントラ予測処理ユニット84が、信号化されたイントラ予測モード、および現在のフレームの以前に復号されたブロックからの基準データに基づいて、現在のビデオ・フレームのビデオ・ブロックに対する予測データを生成することができる。
ビデオ・フレームが、インター予測コード化(すなわち、BまたはP)フレームとしてコード化されるとき、予測処理ユニット81の動き補償ユニット82が、エントロピー復号ユニット80から受信された動きベクトルおよび他の構文要素に基づいて、現在のビデオ・フレームのビデオ・ブロックに対する1つまたは複数の予測ブロックをもたらす。予測ブロックの各々は、基準フレーム・リストのうちの1つの基準フレームからもたらされうる。ビデオ・デコーダ30は、DPB92に記憶されている基準フレームに基づくデフォルト構築技法を使用して、基準フレーム・リストList0およびList1を構築しうる。
いくつかの例では、ビデオ・ブロックが、本明細書に記載されているイントラBCモード(intra BC mode)に従ってコード化されるとき、予測処理ユニット81のイントラBCユニット85が、エントロピー復号ユニット80から受信されたブロック・ベクトルおよび他の構文要素に基づいて、現在のビデオ・ブロックに対する予測ブロックをもたらす。予測ブロックは、ビデオ・エンコーダ20によって画定される現在のビデオ・ブロックと同じピクチャの再構築された領域内に位置することができる。
動き補償ユニット82および/またはイントラBCユニット85は、動きベクトルおよび他の構文要素を解析することによって、現在のビデオ・フレームのビデオ・ブロックに対する予測情報を判定し、次いで予測情報を使用して、復号されている現在のビデオ・ブロックに対する予測ブロックをもたらす。たとえば、動き補償ユニット82は、受信された構文要素のうちのいくつかを使用して、ビデオ・フレームのビデオ・ブロックをコード化するために使用される予測モード(たとえば、イントラまたはインター予測)、インター予測フレーム・タイプ(たとえば、BまたはP)、フレームの基準フレーム・リストの1つまたは複数に対する構築情報、フレームの各インター予測符号化ビデオ・ブロックに対する動きベクトル、フレームの各インター予測コード化ビデオ・ブロックに対するインター予測状態、および現在のビデオ・フレーム内のビデオ・ブロックを復号するための他の情報を判定する。
同様に、イントラBCユニット85は、受信された構文要素のうちのいくつか、たとえばフラグを使用して、現在のビデオ・ブロックがイントラBCモードを使用して予測されたこと、再構築された領域内に位置し、DPB92に記憶されるべきフレームのビデオ・ブロックの構築情報、フレームのイントラBC予測された各ビデオ・ブロックに対するブロック・ベクトル、フレームのイントラBC予測された各ビデオ・ブロックに対するイントラBC予測状態、および現在のビデオ・フレーム内のビデオ・ブロックを復号するための他の情報を判定することができる。
動き補償ユニット82はまた、基準ブロックの整数未満の画素に対する補間値を計算するためにビデオ・ブロックの符号化中にビデオ・エンコーダ20によって使用される補間フィルタを使用して、補間を実行することができる。この場合、動き補償ユニット82は、受信された構文要素から、ビデオ・エンコーダ20によって使用される補間フィルタを判定することができ、それらの補間フィルタを使用して、予測ブロックをもたらすことができる。
逆量子化ユニット86は、量子化度を判定するためにビデオ・フレーム内の各ビデオ・ブロックに対してビデオ・エンコーダ20によって計算された同じ量子化パラメータを使用して、ビットストリーム内に提供されているエントロピー復号ユニット80によってエントロピー復号された量子化された変換係数を逆量子化する。逆変換処理ユニット88は、逆変換、たとえば逆DCT、逆整数変換、または概念上類似の逆変換プロセスを変換係数に適用して、画素ドメインにおける残留ブロックを再構築する。
動き補償ユニット82またはイントラBCユニット85が、ベクトルおよび他の構文要素に基づいて、現在のビデオ・ブロックに対する予測ブロックを生成した後、加算器90は、逆変換処理ユニット88からの残留ブロックと、動き補償ユニット82およびイントラBCユニット85によって生成された対応する予測ブロックとを加算することによって、現在のビデオ・ブロックに対する復号されたビデオ・ブロックを再構築する。復号されたビデオ・ブロックをさらに処理するために、ループ内フィルタ91が、加算器90とDPB92との間に置かれうる。基準ピクチャ・ストアに入れられる前に、デブロッキング・フィルタ、サンプル適応オフセット(SAO)、および適応ループ内フィルタ(ALF)などのループ内フィルタ91が、再構築されたCU上で適用されうる。所与のフレーム内の復号されたビデオ・ブロックは次いで、DPB92に記憶され、DPB92は、次のビデオ・ブロックの後の動き補償のために使用される基準フレームを記憶する。DPB92、またはDPB92とは別個のメモリ・デバイスが、図1の表示デバイス34などの表示デバイス上に後に提示するために、復号されたビデオを記憶することもできる。
典型的なビデオ・コーディング・プロセスでは、ビデオ・シーケンスは典型的に、順序付けられた1組のフレームまたはピクチャを含む。各フレームは、SL、SCb、およびSCrで示される3つのサンプル・アレイを含むことができる。SLは、ルマ・サンプルの2次元アレイである。SCbは、Cbクロマ・サンプルの2次元アレイである。SCrは、Crクロマ・サンプルの2次元アレイである。他の事例では、フレームは単色であってよく、したがってルマ・サンプルの1つの2次元アレイのみを含む。
HEVCと同様に、AVS3規格は、ブロック・ベースのハイブリッド・ビデオ・コーディング・フレームワークの上に構築されている。入力されたビデオ信号は、ブロック(コーディング・ユニット(CU)と呼ばれる)ごとに処理される。4分木のみに基づいてブロックを分割するHEVCとは異なり、AVS3では、1つのコーディング・ツリー・ユニット(CTU)が、4分木/2分木/拡張4分木に基づいて、変動する局所特性に適応するようにCUに分割される。加えて、HEVCにおける複数の区画ユニット・タイプの概念は除去され、すなわちAVS3には、CU、予測ユニット(PU)、および変換ユニット(TU)の分離が存在しない。代わりに、各CUは常に、さらなる区画なしで、予測および変換の両方のための基本ユニットとして使用される。AVS3の木区画構造では、まず1つのCTUが、4分木構造に基づいて分割される。次いで、各4分木リーフ・ノードが、2分木および拡張4分木構造に基づいてさらに分割されうる。
図4Aに示されているように、ビデオ・エンコーダ20(またはより具体的に、区画ユニット45)が、まずフレームを1組のコーディング・ツリー・ユニット(CTU)に分割することによって、フレームの符号化表現を生成する。ビデオ・フレームは、ラスタ・スキャン順序で左から右および上から下へ連続的に順序付けられた整数のCTUを含むことができる。各CTUは、最も大きい論理コーディング・ユニットであり、CTUの幅および高さは、ビデオ・エンコーダ20によってシーケンス・パラメータ・セットで信号化され、ビデオ・シーケンス内のすべてのCTUが、128×128、64×64、32×32、および16×16のうちの1つの同じサイズを有する。しかし、本出願は、必ずしも特定のサイズに限定されないことに留意されたい。図4Bに示されているように、各CTUは、ルマ・サンプルの1つのコーディング・ツリー・ブロック(CTB)と、クロマ・サンプルの2つの対応するコーディング・ツリー・ブロックと、これらのコーディング・ツリー・ブロックのサンプルをコード化するために使用される構文要素とを備えることができる。構文要素は、画素のコード化ブロックの異なるタイプのユニットの特性、およびビデオ・デコーダ30でビデオ・シーケンスが再構築されうる方法を記述し、これはインターまたはイントラ予測、イントラ予測モード、動きベクトル、および他のパラメータを含む。単色のピクチャ、または3つの別個の色平面を有するピクチャでは、CTUは、単一のコーディング・ツリー・ブロックと、このコーディング・ツリー・ブロックのサンプルをコード化するために使用される構文要素とを備えることができる。コーディング・ツリー・ブロックは、サンプルのN×Nブロックとすることができる。
より良好な性能を実現するために、ビデオ・エンコーダ20は、CTUのコーディング・ツリー・ブロック上で2分木分割、3分木分割、4分木分割、またはこれらの組合せなどのツリー分割を再帰的に実行し、CTUをより小さいコーディング・ユニット(CU)に分割することができる。図4Cに描かれているように、64×64のCTU400がまず、各々32×32のブロック・サイズを有する4つのより小さいCUに分割される。4つのより小さいCUの中で、CU410およびCU420は各々、ブロック・サイズで16×16の4つのCUに分割される。2つの16×16のCU430および440は各々、ブロック・サイズで8×8の4つのCUにさらに分割される。図4Dは、図4Cに描かれているCTU400の区画プロセスの終了結果を示す4分木データ構造を描いており、4分木の各リーフ・ノードは、32×32~8×8の範囲のそれぞれのサイズの1つのCUに対応する。図4Bに描かれているCTUと同様に、各CUは、ルマ・サンプルのコード化ブロック(CB)と、同じサイズのフレームのクロマ・サンプルの2つの対応するコード化ブロックと、これらのコード化ブロックのサンプルをコード化するために使用される構文要素とを備えることができる。単色のピクチャ、または3つの別個の色平面を有するピクチャでは、CUは、単一のコード化ブロックと、このコード化ブロックのサンプルをコード化するために使用される構文構造とを備えることができる。図4Cおよび図4Dに描かれている4分木分割は、例示のみを目的としており、1つのCTUが、4分木/3分木/2分木区画に基づいて変動する局所特性に適応するように、複数のCUに分割されうることに留意されたい。複数タイプのツリー構造では、1つのCTUが4分木構造によって分割され、各4分木リーフCUが、2分木および3分木構造によってさらに分割されうる。図4Eに示されているように、AVS3には5つの分割/区画タイプ、すなわち4分割、水平2分割、垂直2分割、水平拡張4分木分割、および垂直拡張4分木分割がある。
いくつかの実装例では、ビデオ・エンコーダ20は、CUのコード化ブロックを1つまたは複数のM×Nの予測ブロック(PB)にさらに分割することができる。予測ブロックは、同じインターまたはイントラ予測が適用されるサンプルの矩形(正方形または非正方形)ブロックである。CUの予測ユニット(PU)は、ルマ・サンプルの予測ブロックと、クロマ・サンプルの2つの対応する予測ブロックと、これらの予測ブロックを予測するために使用される構文要素とを備えることができる。単色のピクチャ、または3つの別個の色平面を有するピクチャでは、PUは、単一の予測ブロックと、この予測ブロックを予測するために使用される構文構造とを備えることができる。ビデオ・エンコーダ20は、CUの各PUのルマ、Cb、およびCr予測ブロックに対して、予測ルマ、Cb、およびCrブロックを生成することができる。
ビデオ・エンコーダ20は、イントラ予測またはインター予測を使用して、PUに対する予測ブロックを生成することができる。ビデオ・エンコーダ20がPUの予測ブロックを生成するためにイントラ予測を使用する場合、ビデオ・エンコーダ20は、このPUに関連付けられたフレームの復号されたサンプルに基づいて、PUの予測ブロックを生成することができる。ビデオ・エンコーダ20がPUの予測ブロックを生成するためにインター予測を使用する場合、ビデオ・エンコーダ20は、このPUに関連付けられたフレーム以外の1つまたは複数のフレームの復号されたサンプルに基づいて、PUの予測ブロックを生成することができる。
ビデオ・エンコーダ20がCUの1つまたは複数のPUに対する予測ルマ、Cb、およびCrブロックを生成した後、ビデオ・エンコーダ20は、CUの予測ルマ・ブロックをその元のルマ・コード化ブロックから引くことによって、このCUに対するルマ残留ブロックを生成することができ、CUのルマ残留ブロック内の各サンプルは、CUの予測ルマ・ブロックのうちの1つにおけるルマ・サンプルと、CUの元のルマ・コード化ブロックにおける対応するサンプルとの間の差を示す。同様に、ビデオ・エンコーダ20は、それぞれCUに対するCb残留ブロックおよびCr残留ブロックを生成することができ、CUのCb残留ブロック内の各サンプルは、CUの予測Cbブロックのうちの1つにおけるCbサンプルと、CUの元のCbコード化ブロックにおける対応するサンプルとの間の差を示し、CUのCr残留ブロック内の各サンプルは、CUの予測Crブロックのうちの1つにおけるCrサンプルと、CUの元のCrコード化ブロックにおける対応するサンプルとの間の差を示すことができる。
さらに、図4Cに示されているように、ビデオ・エンコーダ20は、4分木分割を使用して、CUのルマ、Cb、およびCr残留ブロックを1つまたは複数のルマ、Cb、およびCr変換ブロックに分解することができる。変換ブロックは、同じ変換が適用されるサンプルの矩形(正方形または非正方形)ブロックである。CUの変換ユニット(TU)は、ルマ・サンプルの変換ブロックと、クロマ・サンプルの2つの対応する変換ブロックと、変換ブロック・サンプルを変換するために使用される構文要素とを備えることができる。したがって、CUの各TUは、ルマ変換ブロック、Cb変換ブロック、およびCr変換ブロックに関連付けられうる。いくつかの例では、TUに関連付けられたルマ変換ブロックは、CUのルマ残留ブロックのサブブロックとなりうる。Cb変換ブロックは、CUのCb残留ブロックのサブブロックとなりうる。Cr変換ブロックは、CUのCr残留ブロックのサブブロックとなりうる。単色のピクチャ、または3つの別個の色平面を有するピクチャでは、TUは、単一の変換ブロックと、変換ブロックのサンプルを変換するために使用される構文構造とを備えることができる。
ビデオ・エンコーダ20は、TUのルマ変換ブロックに1つまたは複数の変換を適用して、このTUに対するルマ係数ブロックを生成することができる。係数ブロックは、変換係数の2次元アレイとなりうる。変換係数は、スカラ量となりうる。ビデオ・エンコーダ20は、TUのCb変換ブロックに1つまたは複数の変換を適用して、このTUに対するCb係数ブロックを生成することができる。ビデオ・エンコーダ20は、TUのCr変換ブロックに1つまたは複数の変換を適用して、このTUに対するCr係数ブロックを生成することができる。
係数ブロック(たとえば、ルマ係数ブロック、Cb係数ブロック、またはCr係数ブロック)を生成した後、ビデオ・エンコーダ20は、この係数ブロックを量子化することができる。量子化は、概して、場合により変換係数を表すために使用されるデータの量を低減させてさらなる圧縮を提供するために、変換係数が量子化されるプロセスを指す。ビデオ・エンコーダ20が係数ブロックを量子化した後、ビデオ・エンコーダ20は、量子化された変換係数を示す構文要素をエントロピー符号化することができる。たとえば、ビデオ・エンコーダ20は、量子化された変換係数を示す構文要素上で、コンテキスト適応型バイナリ算術コーディング(CABAC)を実行することができる。最後に、ビデオ・エンコーダ20は、コード化フレームの表現を形成するビットのシーケンスおよび関連付けられたデータを含むビットストリームを出力することができ、このビットストリームは、記憶デバイス32内に保存され、または宛先デバイス14へ伝送される。
ビデオ・エンコーダ20によって生成されたビットストリームを受信した後、ビデオ・デコーダ30は、ビットストリームを解析して、このビットストリームから構文要素を取得することができる。ビデオ・デコーダ30は、ビットストリームから取得された構文要素に少なくとも部分的に基づいて、ビデオ・データのフレームを再構築することができる。ビデオ・データを再構築するプロセスは概して、ビデオ・エンコーダ20によって実行される符号化プロセスとは逆方向である。たとえば、ビデオ・デコーダ30は、現在のCUのTUに関連付けられた係数ブロック上で逆変換を実行して、現在のCUのTUに関連付けられた残留ブロックを再構築することができる。ビデオ・デコーダ30はまた、現在のCUのPUに対する予測ブロックのサンプルを、現在のCUのTUの変換ブロックの対応するサンプルに加えることによって、現在のCUのコード化ブロックを再構築する。フレームの各CUに対するコード化ブロックを再構築した後、ビデオ・デコーダ30は、このフレームを再構築することができる。
SAOは、デブロッキング・フィルタの適用後、エンコーダによって伝送されるルックアップ・テーブルの値に基づいて、オフセット値を各サンプルに条件付きで加えることによって、復号されたサンプルを修正するプロセスである。SAOフィルタリングは、構文要素sao-type-idxによってCTBごとに選択されるフィルタリング・タイプに基づいて、領域ごとに実行される。sao-type-idxに対する0の値は、SAOフィルタがCTBに適用されないことを示し、値1および2は、それぞれバンド・オフセットおよびエッジ・オフセットのフィルタリング・タイプの使用を信号化する。1に等しいsao-type-idxによって指定されるバンド・オフセット・モードで、選択されるオフセット値は、サンプル振幅に直接依存する。このモードで、完全なサンプル振幅範囲が、32個のバンドと呼ばれるセグメントに均一に分割され、これらのバンドのうちの4つ(32個のバンド内で連続している)に属するサンプル値が、バンド・オフセットとして示される伝送された値を加えることによって修正され、この値は正または負とすることができる。4つの連続するバンドを使用する主な理由は、バンディング・アーティファクト(banding artifacts)が現れうる平滑な区域内では、CTBのサンプル振幅がこれらのバンドのいくつかのみに集中される傾向があるからである。加えて、4つのオフセットを使用するという設計上の選択は、同じく4つのオフセット値を使用するエッジ・オフセット動作モードに統一される。2に等しいsao-type-idxによって指定されるエッジ・オフセット・モードで、0~3の値を有する構文要素sao-eo-classは、CTBにおけるエッジ・オフセット分類に水平、垂直、または2つの斜勾配方向のうちの1つが使用されるかどうかを信号化する。
図5Aは、本開示のいくつかの実装例によるSAOで使用される4つの勾配パターンを描くブロック図である。4つの勾配パターン502、504、506、および508は、エッジ・オフセット・モードにおけるそれぞれのsao-eo-classに対するものである。「p」と表示されるサンプルは、考慮されるべき中心サンプルを示す。「n0」および「n1」と表示される2つのサンプルは、(a)水平(sao-eo-class=0)、(b)垂直(sao-eo-class=1)、(c)斜め135°(sao-eo-class=2)、および(d)45°(sao-eo-class=3)の勾配パターンに沿って、2つの隣接するサンプルを指定する。CTBにおける各サンプルは、図5Aに示されているように、ある位置に配置されたサンプル値pを、隣接する位置に配置された2つのサンプルの値n0およびn1と比較することによって、5つのEdgeIdxカテゴリのうちの1つに分類される。この分類は、復号されたサンプル値に基づいて、各サンプルに対して行われ、したがってEdgeIdx分類に対する追加の信号化は必要とされない。1~4のEdgeIdxカテゴリに対して、サンプル位置におけるEdgeIdxカテゴリに応じて、伝送されたルックアップ・テーブルからのオフセット値がサンプル値に加えられる。オフセット値は常に、カテゴリ1および2に対して正であり、カテゴリ3および4に対して負である。したがって、フィルタは概して、エッジ・オフセット・モードで平滑作用を有する。以下の表1-1は、SAOエッジ・クラスにおけるサンプルEdgeIdxカテゴリを示す。
SAOタイプ1および2の場合、合計4つの振幅オフセット値が各CTBに対してデコーダへ伝送される。タイプ1の場合、符号も符号化される。オフセット値ならびにsao-type-idxおよびsao-eo-classなどの関係付けられた構文要素は、エンコーダによって、典型的には速度歪み性能を最適化する基準を使用して判定される。SAOパラメータは、信号化を効率的にするために、マージ・フラグを使用して左または上のCTBから継承されるように示されうる。要約すると、SAOは、再構築された信号の追加の改良を可能にする非線形フィルタリング動作であり、平滑な区域およびエッジ周辺の両方において、信号表現を強化することができる。
いくつかの実施形態では、サンプル適応オフセット前(SAO前)が実装される。複雑さの低いSAO前コーディング性能は、将来のビデオ・コーディング規格の開発において有望である。いくつかの例では、SAO前は、分類のためにルマ・サンプルを使用してルマ成分サンプルにのみ適用される。SAO前は、SAOVおよびSAOHと呼ばれる2つのSAO状フィルタリング動作を適用することによって動作し、既存の(レガシー)SAOを適用する前に、デブロッキング・フィルタ(DBF)と共同で適用される。第1のSAO状フィルタSAOVは、垂直エッジに対するデブロッキング・フィルタ(DBFV)が適用された後、入力ピクチャY2にSAOを適用するように動作する。
Y3(i)=Clip1(Y2(i)+d1・(f(i)>T?1:0)-d2・(f(i)<-T?1:0))
Y3(i)=Clip1(Y2(i)+d1・(f(i)>T?1:0)-d2・(f(i)<-T?1:0))
ここでTは、所定の正の定数であり、d1およびd2は、
f(i)=Y1(i)-Y2(i)
によって与えられるY1(i)とY2(i)との間のサンプルごとの差に基づいて、2つのクラスに関連付けられたオフセット係数である。
f(i)=Y1(i)-Y2(i)
によって与えられるY1(i)とY2(i)との間のサンプルごとの差に基づいて、2つのクラスに関連付けられたオフセット係数である。
d1に対する第1のクラスは、f(i)>Tになるようにすべてのサンプル場所iを得るように与えられ、d2に対する第2のクラスは、f(i)<-Tによって与えられる。オフセット係数d1およびd2は、既存のSAOプロセスと同様に、SAOVの出力ピクチャY3と元のピクチャXとの間の平均2乗誤差が最小になるように、エンコーダで計算される。SAOVが適用された後、第2のSAO状フィルタSAOHは、Y3(i)とY4(i)との間のサンプルごとの差に基づく分類によって、SAOVが適用された後にY4にSAOを適用するように動作し、これが水平エッジに対するデブロッキング・フィルタ(DBFH)の出力ピクチャである。SAOVと同じ手順がSAOHにも適用され、Y1(i)-Y2(i)の代わりにY3(i)-Y4(i)がその分類のために用いられる。SAOHおよびSAOVの各々に対する2つのオフセット係数、所定の閾値T、および有効化フラグが、スライス・レベルで信号化される。SAOHおよびSAOVは、ルマおよび2つのクロマ成分に独立して適用される。
いくつかの事例では、SAOVおよびSAOHはどちらも、それぞれのデブロッキング(DBFVまたはDBFH)による影響を受けたピクチャ・サンプルでのみ動作する。したがって、既存のSAOプロセスとは異なり、所与の空間領域(ピクチャ、またはレガシーSAOの場合はCTU)内のすべてのサンプルの一部のみが、SAO前によって処理されており、その結果生じるピクチャ・サンプルごとのデコーダ側の平均動作の増大を低く抑える(予備の推定による最悪のシナリオの場合、1サンプルにつき2つまたは3つの比較および2つの追加)。SAO前は、デブロッキング・フィルタによって使用されるサンプルのみを必要とし、デコーダで追加のサンプルを記憶しない。
いくつかの実施形態では、VVCを超えた圧縮効率探査のために、2方向フィルタ(BIF)が実装される。BIFは、サンプル適応オフセット(SAO)ループ・フィルタ段階で実施される。2方向フィルタ(BIF)およびSAOはどちらも、デブロッキングからのサンプルを入力として使用している。各フィルタは、サンプルごとのオフセットを作成し、これらが入力サンプルに追加され、次いでクリッピングされた後、ALFに進む。
詳細には、出力サンプルIOUTは、
IOUT=clip3(IC+ΔIBIF+ΔISAO)
として取得され、ここでICはデブロッキングからの入力サンプルであり、ΔIBIFは2方向フィルタからのオフセットであり、ΔISAOはSAOからのオフセットである。
IOUT=clip3(IC+ΔIBIF+ΔISAO)
として取得され、ここでICはデブロッキングからの入力サンプルであり、ΔIBIFは2方向フィルタからのオフセットであり、ΔISAOはSAOからのオフセットである。
いくつかの実施形態では、実装例は、エンコーダがCTUおよびスライス・レベルにおけるフィルタリングを有効化または無効化する可能性を提供する。エンコーダは、速度歪み最適化(RDO)コストを評価することによって決定を下す。
以下の構文要素が、PPSで導入される。
0に等しいpps_bilateral_filter_enabled_flagは、PPSを参照するスライスに対して2方向ループ・フィルタが無効化されることを指定する。1に等しいpps_bilateral_filter_flagは、PPSを参照するスライスに対して2方向ループ・フィルタが有効化されることを指定する。
bilateral_filter_strengthは、2方向変換ブロック・フィルタ・プロセスで使用される2方向ループ・フィルタ強度値を指定する。bilateral_filter_strengthの値は、包括的に0~2の範囲内であるものとする。
bilateral_filter_qp_offsetは、PPSを参照するスライスに対する2方向フィルタ・ルックアップ・テーブルLUT(x)の導出で使用されるオフセットを指定する。bilateral_filter_qp_offsetは、包括的に-12~+12の範囲内であるものとする。
以下の構文要素が導入される:
意味は次のとおりである。1に等しいslice_bilateral_filter_all_ctb_enabled_flagは、2方向フィルタが有効化されており、現在のスライス内のすべてのCTBに適用されることを指定する。slice_bilateral_filter_all_ctb_enabled_flagが存在しない場合、0に等しいと推論される。
1に等しいslice_bilateral_filter_enabled_flagは、2方向フィルタが有効化されており、現在のスライスのCTBに適用されてよいことを指定する。slice_bilateral_filter_enabled_flagが存在しない場合、slice_bilateral_filter_all_ctb_enabled_flagに等しいと推論される。
1に等しいbilateral_filter_ctb_flag[xCtb>>CtbLog2SizeY][yCtb>>CtbLog2SizeY]は、2方向フィルタがルマの場所(xCtb,yCtb)でコーディング・ツリー・ユニットのルマ・コーディング・ツリー・ブロックに適用されることを指定する。0に等しいbilateral_filter_ctb_flag[cIdx][xCtb>>CtbLog2SizeY][yCtb>>CtbLog2SizeY]は、2方向フィルタがルマの場所(xCtb,yCtb)でコーディング・ツリー・ユニットのルマ・コーディング・ツリー・ブロックに適用されないことを指定する。bilateral_filter_ctb_flagが存在しない場合、等しいと推論される(slice_bilateral_filter_all_ctb_enabled_flag&slice_bilateral_filter_enabled_flag)。
いくつかの例では、フィルタリングされたCTUの場合、フィルタリング・プロセスは次のように進む。サンプルが利用可能でないピクチャ境界で、2方向フィルタは、利用可能でないサンプルを埋めるために拡張(サンプルの反復)を使用する。仮想境界の場合、挙動はSAOに対するものと同じであり、すなわちフィルタリングは行われない。水平CTU境界と交差するとき、2方向フィルタは、SAOがアクセスしているものと同じサンプルにアクセスすることができる。図5Bは、本開示のいくつかの実装例による中心サンプルを取り囲むサンプルに対する命名規則を描くブロック図である。一例として、中心サンプルICがCTUの1番上の線に位置する場合、INW、IA、およびINEは、SAOと同様に上のCTUから読み取られるが、IAAはパディングされ、したがって余分の線バッファは必要とされない。中心サンプルICを取り囲むサンプルは、図5Bに示されており、ここでA、B、L、およびRは上、下、左、および右を表し、NW、NE、SW、SEは北西などを表す。同様に、AAは上-上、BBは下-下などを表す。このダイヤモンド形状は、IAA、IBB、ILL、またはIRRを使用しない2乗フィルタ支持を使用する別の方法とは異なる。
各周辺サンプルIA、IRなどは、対応する修飾子(modifier)値
、
などによって寄与する。これらは以下の方法で計算される。サンプルから右IRへの寄与によって始まり、その差が、
ΔIR=(|IR-IC|+4)>>3
として計算され、ここで|・|は絶対値を示す。10ビットではないデータの場合、代わりにΔIR=(|IR-IC|+2n-6)>>(n-7)が使用され、ここで8ビット・データの場合n=8などである。次に、結果として得られる値が、16より小さくなるようにクリッピングされる。
sIR=min(15,ΔIR)
、
などによって寄与する。これらは以下の方法で計算される。サンプルから右IRへの寄与によって始まり、その差が、
ΔIR=(|IR-IC|+4)>>3
として計算され、ここで|・|は絶対値を示す。10ビットではないデータの場合、代わりにΔIR=(|IR-IC|+2n-6)>>(n-7)が使用され、ここで8ビット・データの場合n=8などである。次に、結果として得られる値が、16より小さくなるようにクリッピングされる。
sIR=min(15,ΔIR)
次に、修飾子値が、
として計算され、ここでLUTROW[ ]は、qpb=clip(0,25,QP+bilateral_filter_qp_offset-17)の値によって判定される16個の値のアレイである。
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, if qpb = 0
{ 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, if qpb = 1
{ 0, 2, 2, 2, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, }, if qpb = 2
{ 0, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, -1, }, if qpb = 3
{ 0, 3, 3, 3, 2, 2, 1, 2, 1, 1, 1, 1, 0, 1, 1, -1, }, if qpb = 4
{ 0, 4, 4, 4, 3, 2, 1, 2, 1, 1, 1, 1, 0, 1, 1, -1, }, if qpb = 5
{ 0, 5, 5, 5, 4, 3, 2, 2, 2, 2, 2, 1, 0, 1, 1, -1, }, if qpb = 6
{ 0, 6, 7, 7, 5, 3, 3, 3, 3, 2, 2, 1, 1, 1, 1, -1, }, if qpb = 7
{ 0, 6, 8, 8, 5, 4, 3, 3, 3, 3, 3, 2, 1, 2, 2, -2, }, if qpb = 8
{ 0, 7, 10, 10, 6, 4, 4, 4, 4, 3, 3, 2, 2, 2, 2, -2, }, if qpb = 9
{ 0, 8, 11, 11, 7, 5, 5, 4, 5, 4, 4, 2, 2, 2, 2, -2, }, if qpb = 10
{ 0, 8, 12, 13, 10, 8, 8, 6, 6, 6, 5, 3, 3, 3, 3, -2, }, if qpb = 11
{ 0, 8, 13, 14, 13, 12, 11, 8, 8, 7, 7, 5, 5, 4, 4, -2, }, if qpb = 12
{ 0, 9, 14, 16, 16, 15, 14, 11, 9, 9, 8, 6, 6, 5, 6, -3, }, if qpb = 13
{ 0, 9, 15, 17, 19, 19, 17, 13, 11, 10, 10, 8, 8, 6, 7, -3, }, if qpb = 14
{ 0, 9, 16, 19, 22, 22, 20, 15, 12, 12, 11, 9, 9, 7, 8, -3, }, if qpb = 15
{ 0, 10, 17, 21, 24, 25, 24, 20, 18, 17, 15, 12, 11, 9, 9, -3, }, if qpb = 16
{ 0, 10, 18, 23, 26, 28, 28, 25, 23, 22, 18, 14, 13, 11, 11, -3, }, if qpb = 17
{ 0, 11, 19, 24, 29, 30, 32, 30, 29, 26, 22, 17, 15, 13, 12, -3, }, if qpb = 18
{ 0, 11, 20, 26, 31, 33, 36, 35, 34, 31, 25, 19, 17, 15, 14, -3, }, if qpb = 19
{ 0, 12, 21, 28, 33, 36, 40, 40, 40, 36, 29, 22, 19, 17, 15, -3, }, if qpb = 20
{ 0, 13, 21, 29, 34, 37, 41, 41, 41, 38, 32, 23, 20, 17, 15, -3, }, if qpb = 21
{ 0, 14, 22, 30, 35, 38, 42, 42, 42, 39, 34, 24, 20, 17, 15, -3, }, if qpb = 22
{ 0, 15, 22, 31, 35, 39, 42, 42, 43, 41, 37, 25, 21, 17, 15, -3, }, if qpb = 23
{ 0, 16, 23, 32, 36, 40, 43, 43, 44, 42, 39, 26, 21, 17, 15, -3, }, if qpb = 24
{ 0, 17, 23, 33, 37, 41, 44, 44, 45, 44, 42, 27, 22, 17, 15, -3, }, if qpb = 25
として計算され、ここでLUTROW[ ]は、qpb=clip(0,25,QP+bilateral_filter_qp_offset-17)の値によって判定される16個の値のアレイである。
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, if qpb = 0
{ 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, if qpb = 1
{ 0, 2, 2, 2, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, }, if qpb = 2
{ 0, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, -1, }, if qpb = 3
{ 0, 3, 3, 3, 2, 2, 1, 2, 1, 1, 1, 1, 0, 1, 1, -1, }, if qpb = 4
{ 0, 4, 4, 4, 3, 2, 1, 2, 1, 1, 1, 1, 0, 1, 1, -1, }, if qpb = 5
{ 0, 5, 5, 5, 4, 3, 2, 2, 2, 2, 2, 1, 0, 1, 1, -1, }, if qpb = 6
{ 0, 6, 7, 7, 5, 3, 3, 3, 3, 2, 2, 1, 1, 1, 1, -1, }, if qpb = 7
{ 0, 6, 8, 8, 5, 4, 3, 3, 3, 3, 3, 2, 1, 2, 2, -2, }, if qpb = 8
{ 0, 7, 10, 10, 6, 4, 4, 4, 4, 3, 3, 2, 2, 2, 2, -2, }, if qpb = 9
{ 0, 8, 11, 11, 7, 5, 5, 4, 5, 4, 4, 2, 2, 2, 2, -2, }, if qpb = 10
{ 0, 8, 12, 13, 10, 8, 8, 6, 6, 6, 5, 3, 3, 3, 3, -2, }, if qpb = 11
{ 0, 8, 13, 14, 13, 12, 11, 8, 8, 7, 7, 5, 5, 4, 4, -2, }, if qpb = 12
{ 0, 9, 14, 16, 16, 15, 14, 11, 9, 9, 8, 6, 6, 5, 6, -3, }, if qpb = 13
{ 0, 9, 15, 17, 19, 19, 17, 13, 11, 10, 10, 8, 8, 6, 7, -3, }, if qpb = 14
{ 0, 9, 16, 19, 22, 22, 20, 15, 12, 12, 11, 9, 9, 7, 8, -3, }, if qpb = 15
{ 0, 10, 17, 21, 24, 25, 24, 20, 18, 17, 15, 12, 11, 9, 9, -3, }, if qpb = 16
{ 0, 10, 18, 23, 26, 28, 28, 25, 23, 22, 18, 14, 13, 11, 11, -3, }, if qpb = 17
{ 0, 11, 19, 24, 29, 30, 32, 30, 29, 26, 22, 17, 15, 13, 12, -3, }, if qpb = 18
{ 0, 11, 20, 26, 31, 33, 36, 35, 34, 31, 25, 19, 17, 15, 14, -3, }, if qpb = 19
{ 0, 12, 21, 28, 33, 36, 40, 40, 40, 36, 29, 22, 19, 17, 15, -3, }, if qpb = 20
{ 0, 13, 21, 29, 34, 37, 41, 41, 41, 38, 32, 23, 20, 17, 15, -3, }, if qpb = 21
{ 0, 14, 22, 30, 35, 38, 42, 42, 42, 39, 34, 24, 20, 17, 15, -3, }, if qpb = 22
{ 0, 15, 22, 31, 35, 39, 42, 42, 43, 41, 37, 25, 21, 17, 15, -3, }, if qpb = 23
{ 0, 16, 23, 32, 36, 40, 43, 43, 44, 42, 39, 26, 21, 17, 15, -3, }, if qpb = 24
{ 0, 17, 23, 33, 37, 41, 44, 44, 45, 44, 42, 27, 22, 17, 15, -3, }, if qpb = 25
これらの値は、エントリごとに6つのビットを使用して記憶されることが可能であり、その結果、すべて0である第1の行を除外した場合、26*16*6/8=312バイトまたは300バイトになる。
、
、および
に対する修飾子値は、IL、IA、およびIBから同様に計算される。斜めのサンプルINW、INE、ISE、ISW、ならびに2ステップ離れたサンプルIAA、IBB、IRR、およびILLの場合、この計算もまた方程式2および3に従うが、1シフトした値を使用する。斜めのサンプルISEを一例として使用すると、
になり、他の斜めのサンプルおよび2ステップ離れたサンプルも同様に計算される。
、
、および
に対する修飾子値は、IL、IA、およびIBから同様に計算される。斜めのサンプルINW、INE、ISE、ISW、ならびに2ステップ離れたサンプルIAA、IBB、IRR、およびILLの場合、この計算もまた方程式2および3に従うが、1シフトした値を使用する。斜めのサンプルISEを一例として使用すると、
になり、他の斜めのサンプルおよび2ステップ離れたサンプルも同様に計算される。
修飾子値はともに合計される。
いくつかの例では、
は、以前のサンプルに対する
に等しい。同様に、
も、上記のサンプルに対する
に等しく、斜めの修飾子値および2ステップ離れた修飾子値に対しても類似の対称性が見出されうる。これは、ハードウェア実装例において、6つの値
、
、
、
、
、および
を計算すると十分であり、残りの6つの値は、以前に計算された値から取得されうることを意味する。次に、msum値が、c=1、2、または3によって乗算され、これは、単一の加算器および論理ANDゲートを使用して、
cv=k1&(msum<<1)+k2&msum
によって行われることが可能であり、ここで&は論理ANDを示し、k1は乗数cの最上位ビットであり、k2は最下位ビットである。乗算する値は、表1-5に示されているように、最小ブロック寸法D=min(幅,高さ)を使用して取得される。
は、以前のサンプルに対する
に等しい。同様に、
も、上記のサンプルに対する
に等しく、斜めの修飾子値および2ステップ離れた修飾子値に対しても類似の対称性が見出されうる。これは、ハードウェア実装例において、6つの値
、
、
、
、
、および
を計算すると十分であり、残りの6つの値は、以前に計算された値から取得されうることを意味する。次に、msum値が、c=1、2、または3によって乗算され、これは、単一の加算器および論理ANDゲートを使用して、
cv=k1&(msum<<1)+k2&msum
によって行われることが可能であり、ここで&は論理ANDを示し、k1は乗数cの最上位ビットであり、k2は最下位ビットである。乗算する値は、表1-5に示されているように、最小ブロック寸法D=min(幅,高さ)を使用して取得される。
最後に、2方向フィルタ・オフセットΔIBIFが計算される。完全な強度のフィルタリングの場合、以下が使用される。
ΔIBIF=(cv+16)>>5
半分の強度のフィルタリングの場合、以下が使用される。
ΔIBIF=(cv+32)>>6
ΔIBIF=(cv+16)>>5
半分の強度のフィルタリングの場合、以下が使用される。
ΔIBIF=(cv+32)>>6
nビットのデータに対する一般式は、
radd=214-n-bilateral_filter_strength
rshift=15-n-bilateal_filter_strength
ΔIBIF=(cv+radd)>>rshift)
を使用するものであり、ここでbilateral_filter_strengthは、0または1とすることができ、ppsで信号化される。
radd=214-n-bilateral_filter_strength
rshift=15-n-bilateal_filter_strength
ΔIBIF=(cv+radd)>>rshift)
を使用するものであり、ここでbilateral_filter_strengthは、0または1とすることができ、ppsで信号化される。
いくつかの実施形態では、成分間情報を導入することによって、コーディング効率を改善し、またはサンプル適応オフセット(SAO)の複雑さを低減させるための方法およびシステムが、本明細書に開示される。SAOは、HEVC、VVC、AVS2、およびAVS3規格で使用される。以下の説明では、HEVC、VVC、AVS2、およびAVS3規格における既存のSAO設計が、ビデオ・コーディングの当業者に基本的なSAO方法として使用されるが、本開示に記載されている成分間方法は、類似の設計精神を有する他のループ・フィルタ設計または他のコードディング・ツールにも適用されうる。たとえば、AVS3規格では、SAOは、強化されたサンプル適応オフセット(ESAO)と呼ばれるコーディング・ツールに交換される。しかし、本明細書に開示されるCCSAOが、ESAOに並行して適用されてもよい。別の例では、CCSAOは、AV1規格でConstrained Directional Enhancement Filter(CDEF)に並行して適用されてもよい。
HEVC、VVC、AVS2、およびAVS3規格における既存のSAO設計の場合、ルマY、クロマCb、およびクロマCrサンプル・オフセット値が独立して決定される。すなわち、たとえば現在のクロマ・サンプル・オフセットは、現在のクロマ・サンプル値および隣接するクロマ・サンプル値のみによって決定され、配列または隣接ルマ・サンプルを考慮しない。しかし、ルマ・サンプルは、クロマ・サンプルより多くの元のピクチャ詳細情報を維持し、現在のクロマ・サンプル・オフセットの決定から利益を得ることができる。さらに、クロマ・サンプルは通常、RGBからYCbCrへの色変換後、または量子化およびデブロッキング・フィルタ後に、高周波の詳細を失うため、クロマ・オフセット決定のために維持された高周波の詳細を有するルマ・サンプルを導入することで、クロマ・サンプルの再構築から利益を得ることができる。したがって、成分間相関を探ることによって、たとえば成分間サンプル適応オフセット(CCSAO)の方法およびシステムを使用することによって、さらなるゲイン(gain)が予期されうる。いくつかの実施形態では、ここでの相関は、成分間サンプル値を含むだけでなく、成分間からの予測/残留コーディング・モード、変換タイプ、および量子化/デブロッキング/SAO/ALFパラメータなどのピクチャ/コーディング情報も含む。
別の例は、SAOの場合に、ルマ・サンプル・オフセットがルマ・サンプルのみによって決定されることである。しかしたとえば、同じバンド・オフセット(BO)分類を有するルマ・サンプルは、その配列および隣接クロマ・サンプルによってさらに分類されてよく、それによってより効果的な分類を得ることができる。SAO分類は、元のピクチャと再構築されたピクチャとの間のサンプル差を補償するためのショートカットとして得られうる。したがって、効果的な分類が所望される。
図6Aは、本開示のいくつかの実装例によってクロマ・サンプル上で適用され、DBF Yを入力として使用するCCSAOシステムおよびプロセスを示すブロック図である。ルマ・デブロッキング・フィルタ(DBF Y)後のルマ・サンプルは、SAO CbおよびSAO Cr後のクロマCbおよびCrに対する追加のオフセットを判定するために使用される。たとえば、現在のクロマ・サンプル602はまず、配列ルマ・サンプル604および隣接(白色)ルマ・サンプル606を使用して分類され、対応するクラスの対応するCCSAOオフセット値が、現在のクロマ・サンプル値に加えられる。図6Bは、本開示のいくつかの実装例によってルマ・サンプルおよびクロマ・サンプル上で適用され、DBF Y/Cb/Crを入力として使用するCCSAOシステムおよびプロセスを示すブロック図である。図6Dは、本開示のいくつかの実装例によって、同じコーデック段階において同じまたは異なるオフセットで再帰的に適用(2またはN回)されうる、または異なる段階で繰り返されうる、CCSAOのシステムおよびプロセスを示すブロック図である。要約すると、いくつかの実施形態では、現在のルマ・サンプルを分類するために、現在のルマ・サンプルおよび隣接するルマ・サンプルの情報、配列および隣接クロマ・サンプル(CbおよびCr)の情報が使用されうる。いくつかの実施形態では、現在のクロマ・サンプル(CbまたはCr)を分類するために、配列および隣接ルマ・サンプル、配列および隣接クロス・クロマ・サンプル、ならびに現在のクロマ・サンプルおよび隣接するクロマ・サンプルが使用されうる。いくつかの実施形態では、CCSAOは、(1)DBF Y/Cb/Cr後、(2)DBF前の再構築された画像Y/Cb/Cr後、または(3)SAO Y/Cb/Cr後、または(4)ALF Y/Cb/Cr後に、カスケード接続されうる。
いくつかの実施形態では、CCSAOはまた、他のコーディング・ツール、たとえばAVS規格におけるESAO、またはAV1規格におけるCDEF、またはニューラル・ネットワーク・ループ・フィルタ(NNLF)に並行して適用されうる。図6Eは、本開示のいくつかの実装例によってAVS規格におけるESAOに並行して適用されるCCSAOシステムおよびプロセスを示すブロック図である。
図6Fは、本開示のいくつかの実装例によってSAO後に適用されるCCSAOシステムおよびプロセスを示すブロック図である。いくつかの実施形態では、図6Fは、CCSAOの場所がSAO後、すなわちVVC規格における成分間適応ループ・フィルタ(CCALF)の場所に位置しうることを示す。図6Gは、本開示のいくつかの実装例によってCCSAOシステムおよびプロセスがCCALFなしで独立して機能しうることを示すブロック図である。いくつかの実施形態では、SAO Y/Cb/Crは、たとえばAVS3規格において、ESAOに交換されうる。
図6Hは、本開示のいくつかの実装例によってCCALFに並行して適用されるCCSAOシステムおよびプロセスを示すブロック図である。いくつかの実施形態では、図6Hは、CCSAOがCCALFに並行して適用されうることを示す。いくつかの実施形態では、図6Hで、CCALFおよびCCSAOの場所が切り替えられうる。いくつかの実施形態では、図6A~図6Hで、または本開示全体にわたって、SAO Y/Cb/Crブロックは、ESAO Y/Cb/Cr(AVS3)またはCDEF(AV1)に交換されうる。Y/Cb/Crは、ビデオ・コーディング領域においてY/U/Vとしても示されうることに留意されたい。いくつかの実施形態では、ビデオがRGB形式である場合、CCSAOはまた、本開示においてそれぞれYUV表記をGBRに簡単にマッピングすることによって適用されうる。
図6Iは、本開示のいくつかの実装例によってSAOおよびBIFに並行して適用されたCCSAOのシステムおよびプロセスを示すブロック図である。
図6Jは、本開示のいくつかの実装例によってSAOを交換することによってBIFに並行して適用されたCCSAOのシステムおよびプロセスを示すブロック図である。
いくつかの実施形態では、現在のクロマ・サンプル分類は、配列ルマ・サンプルのSAOタイプ(エッジ・オフセット(EO)またはBO)、クラス、およびカテゴリを再利用している。対応するCCSAOオフセットは、デコーダ自体から信号化または導出されうる。たとえば、h_Yを配列ルマSAOオフセットとし、h_Cbおよびh_CrをそれぞれCCSAO CbおよびCrオフセットとする。h_Cb(またはh_Cr)=w*h_Yであり、ここでwは、制限された表(a limited table)で選択されうる。たとえば、±1/4、±1/2、0、±1、±2、±4...などであり、ここで|w|は2のべき乗の値のみを含む。
いくつかの実施形態では、配列ルマ・サンプル(Y0)および隣接する8つのルマ・サンプルの比較スコア[-8,8]が使用され、合計17のクラスをもたらす。
初期クラス=0
隣接する8つのルマ・サンプルを介したループ(Yi,i=1~8)
if Y0>Yi Class+=1
else if Y0<Yi Class-=1
初期クラス=0
隣接する8つのルマ・サンプルを介したループ(Yi,i=1~8)
if Y0>Yi Class+=1
else if Y0<Yi Class-=1
いくつかの実施形態では、上述された分類方法が組み合わされうる。たとえば、ダイバーシティを増大させるために、SAO BO(32バンドの分類)と組み合わされた比較スコアが使用され、合計17*32のクラスをもたらす。いくつかの実施形態では、CbおよびCrは、複雑さを低減させるため、またはビットを節約するために、同じクラスを使用することができる。
図7は、本開示のいくつかの実装例によるCCSAOを使用するサンプル・プロセスを示すブロック図である。具体的には、図7は、クラス判定を簡略化するため、または柔軟性を増大させるために、CCSAOの入力が垂直および水平DBFの入力を導入することができることを示す。たとえば、Y0_DBF_V、Y0_DBF_H、およびY0を、それぞれDBF_V、DBF_H、およびSAOの入力における配列ルマ・サンプルとする。Yi_DBF_V、Yi_DBF_H、およびYiは、それぞれDBF_V、DBF_H、およびSAOの入力における隣接する8つのルマ・サンプルであり、ここでi=1~8である。
Max Y0=max(Y0_DBF_V,Y0_DBF_H,Y0_DBF)
Max Yi=max(Yi_DBF_V,Yi_DBF_H,Yi_DBF)
max Y0およびmax YiをCCSAO分類に与える。
Max Y0=max(Y0_DBF_V,Y0_DBF_H,Y0_DBF)
Max Yi=max(Yi_DBF_V,Yi_DBF_H,Yi_DBF)
max Y0およびmax YiをCCSAO分類に与える。
図8は、本開示のいくつかの実装例によって、CCSAOプロセスが垂直および水平DBFにインターリーブされることを示すブロック図である。いくつかの実施形態では、図6、図7、および図8のCCSAOブロックは選択的であってよい。たとえば、図6と同じサンプル処理を適用する第1のCCSAO_Vに対するY0_DBF_VおよびYi_DBF_Vを使用しながら、DBF_Vルマ・サンプルの入力をCCSAO入力として使用する。
いくつかの実施形態では、実装されるCCSAO構文が、以下の表2に示されている。
いくつかの実施形態では、CCSAO CbおよびCrオフセット値を信号化するために、一方の追加のクロマ・オフセットが信号化される場合、他方のクロマ成分オフセットは、正もしくは負の符号によって、またはビット・オーバーヘッドを節減するために加重によって導出されうる。たとえば、h_Cbおよびh_Crを、それぞれCCSAO CbおよびCrのオフセットとする。wを明示的に信号化することによって、w=±|w|であり、|w|候補が制限されるとき、h_Cr自体を明示的に信号化することなく、h_Crはh_Cbから導出されうる。
h_Cr=w*h_Cb
h_Cr=w*h_Cb
図9は、本開示のいくつかの実装例による成分間相関を使用してビデオ信号を復号する例示的なプロセス900を示す流れ図である。
ビデオ・デコーダ30は、第1の成分および第2の成分を含むビデオ信号を受信する(910)。いくつかの実施形態では、第1の成分はビデオ信号のルマ成分であり、第2の成分はクロマ成分である。
ビデオ・デコーダ30はまた、第2の成分に関連付けられた複数のオフセットを受信する(920)。
ビデオ・デコーダ30は次いで、第1の成分の特性測定を利用して、第2の成分に関連付けられた分類カテゴリを取得する(930)。たとえば、図6で、現在のクロマ・サンプル602はまず、配列ルマ・サンプル604および隣接(白色)ルマ・サンプル606を使用して分類され、対応するCCSAOオフセット値が、現在のクロマ・サンプルに加えられる。
ビデオ・デコーダ30は、分類カテゴリに従って、第2の成分に対する複数のオフセットから第1のオフセットをさらに選択する(940)。
ビデオ・デコーダ30は加えて、選択された第1のオフセットに基づいて、第2の成分を修正する(950)。
いくつかの実施形態では、第1の成分の特性測定を利用して第2の成分に関連付けられた分類カテゴリを取得すること(930)は、第1の成分のそれぞれのサンプルを利用して、第2の成分のそれぞれの各サンプルのそれぞれの分類カテゴリを取得することを含み、第1の成分のそれぞれのサンプルは、第2の成分のそれぞれの各サンプルに対する第1の成分のそれぞれの配列サンプルである。たとえば、現在のクロマ・サンプル分類は、配列ルマ・サンプルのSAOタイプ(EOまたはBO)、クラス、およびカテゴリを再利用している。
いくつかの実施形態では、第1の成分の特性測定を利用して第2の成分に関連付けられた分類カテゴリを取得すること(930)は、第1の成分のそれぞれのサンプルを利用して、第2の成分のそれぞれの各サンプルのそれぞれの分類カテゴリを取得することを含み、第1の成分のそれぞれのサンプルは、デブロックされる前に再構築され、またはデブロックされた後に再構築される。いくつかの実施形態では、第1の成分は、デブロッキング・フィルタ(DBF)でデブロックされている。いくつかの実施形態では、第1の成分は、ルマ・デブロッキング・フィルタ(DBF Y)でデブロックされている。たとえば、図6または図7に対する代替手段として、CCSAO入力はDBF Yの前であってもよい。
いくつかの実施形態では、特性測定は、第1の成分のサンプル値の範囲をいくつかのバンドに分割し、第1の成分内のサンプルの強度値に基づいてバンドを選択することによって導出される。いくつかの実施形態では、特性測定は、バンド・オフセット(BO)から導出される。
いくつかの実施形態では、特性測定は、第1の成分内のサンプルのエッジ情報の方向および強度に基づいて導出される。いくつかの実施形態では、特性測定は、エッジ・オフセット(EO)から導出される。
いくつかの実施形態では、第2の成分を修正すること(950)は、選択された第1のオフセットを第2の成分に直接加えることを含む。たとえば、対応するCCSAOオフセット値が、現在のクロマ成分サンプルに加えられる。
いくつかの実施形態では、第2の成分を修正すること(950)は、選択された第1のオフセットを第2のオフセットにマッピングし、マッピングされた第2のオフセットを第2の成分に加えることを含む。たとえば、CCSAO CbおよびCrオフセット値を信号化するために、一方の追加のクロマ・オフセットが信号化される場合、他方のクロマ成分オフセットは、正もしくは負の符号を使用することによって、またはビット・オーバーヘッドを節減するために加重によって導出されうる。
いくつかの実施形態では、ビデオ信号を受信すること(910)は、CCSAOを使用してビデオ信号を復号する方法がシーケンス・パラメータ・セット(SPS)内のビデオ信号に対して有効化されるかどうかを示す構文要素を受信することを含む。いくつかの実施形態では、cc_sao_enabled_flagが、シーケンス・レベルでCCSAOが有効化されるかどうかを示す。
いくつかの実施形態では、ビデオ信号を受信すること(910)は、CCSAOを使用してビデオ信号を復号する方法がスライス・レベルで第2の成分に対して有効化されるかどうかを示す構文要素を受信することを含む。いくつかの実施形態では、slice_cc_sao_cb_flagまたはslice_cc_sao_cr_flagが、CbまたはCrに対するそれぞれのスライス内でCCSAOが有効化されるかどうかを示す。
いくつかの実施形態では、第2の成分に関連付けられた複数のオフセットを受信すること(920)は、異なるコーディング・ツリー・ユニット(CTU)に対して異なるオフセットを受信することを含む。いくつかの実施形態では、CTUに対して、cc_sao_offset_sign_flagが、オフセットに対する符号を示し、cc_sao_offset_absが、現在のCTUのCCSAO CbおよびCrオフセット値を示す。
いくつかの実施形態では、第2の成分に関連付けられた複数のオフセットを受信すること(920)は、CTUの受信されたオフセットが、CTUの隣接するCTUのうちの1つと同じであるかどうかを示す構文要素を受信することを含み、隣接するCTUは、左または上の隣接するCTUである。たとえば、cc_sao_merge_up_flagが、CCSAOオフセットが左または上のCTUからマージされるかどうかを示す。
いくつかの実施形態では、ビデオ信号は、第3の成分をさらに含み、CCSAOを使用してビデオ信号を復号する方法は、第3の成分に関連付けられた第2の複数のオフセットを受信することと、第1の成分の特性測定を利用して第3の成分に関連付けられた第2の分類カテゴリを取得することと、第2の分類カテゴリに従って第3の成分に対する第2の複数のオフセットから第3のオフセットを選択することと、選択された第3のオフセットに基づいて第3の成分を修正することとをさらに含む。
図11は、本開示のいくつかの実装例によってすべての配列および隣接(白色)ルマ/クロマ・サンプルがCCSAO分類へ供給されうることを示すサンプル・プロセスのブロック図である。図6A、図6B、および図11は、CCSAO分類の入力を示す。図11で、現在のクロマ・サンプルは1104であり、成分間配列クロマ・サンプルは1102であり、配列ルマ・サンプルは1106である。
いくつかの実施形態では、例示的な分類子(C0)が、以下の図12の配列ルマまたはクロマ・サンプル値(Y0)(図6Bおよび図6CのY4/U4/V4)を分類に使用する。band_numを、ルマまたはクロマ・ダイナミック・レンジの等しく分割されたバンドの数とし、bit_depthを、シーケンス・ビット深さとすると、現在のクロマ・サンプルに対するクラス索引の一例は、次のとおりである。
クラス(C0)=(Y0*band_num)>>bit_depth
クラス(C0)=(Y0*band_num)>>bit_depth
いくつかの実施形態では、この分類は丸めを考慮し、たとえば次のとおりである。
クラス(C0)=((Y0*band_num)+(1<<bit_depth))>>bit_depth
クラス(C0)=((Y0*band_num)+(1<<bit_depth))>>bit_depth
いくつかのband_numおよびbit_depthの例が、以下の表3に挙げられている。表3は、分類例の各々に対してバンドの数が異なるときの3つの分類例を示す。
いくつかの実施形態では、分類子は、C0分類に対して異なるルマ・サンプル位置を使用する。図10Aは、本開示のいくつかの実装例によるC0分類に対して異なるルマ(またはクロマ)サンプル位置を使用する、たとえばC0分類にY0ではなく隣接するY7を使用する、分類子を示すブロック図である。
いくつかの実施形態では、シーケンス・パラメータ・セット(SPS)/適応パラメータ・セット(APS)/ピクチャ・パラメータ・セット(PPS)/ピクチャ・ヘッダ(PH)/スライス・ヘッダ(SH)/Region/コーディング・ツリー・ユニット(CTU)/コーディング・ユニット(CU)/Subblock/Sampleレベルにおいて、異なる分類子が切り換えられうる。たとえば、図10では、以下の表4に示されているように、POC0にY0を使用するがPOC1にY7を使用する。
いくつかの実施形態では、図10Bは、本開示のいくつかの実装例によるルマ候補に対する異なる形状のいくつかの例を示す。たとえば、形状に制約が適用されうる。いくつかの事例では、図10B(b)(c)(d)に示されているように、ルマ候補の総数は2のべき乗でなければならない。いくつかの事例では、図10B(a)(c)(d)(e)に示されているように、ルマ候補の数は、クロマ・サンプル(中心)に対して水平および垂直対称でなければならない。いくつかの実施形態では、2のべき乗の制約および対称の制約は、クロマ候補にも適用されうる。図6Bおよび図6CのU/V部分は、対称の制約に対する一例を示す。いくつかの実施形態では、異なる色形式が、異なる分類子「制約」を有することができる。たとえば、420色形式は、図6Bおよび図6Cに示されているルマ/クロマ候補選択を使用する(1つの候補が3×3の形状から選択される)が、444色形式は、図10B(f)をルマおよびクロマ候補選択に使用し、422色形式は、図10B(g)をルマに使用し(2つのクロマ・サンプルが4つのルマ候補を共有する)、図10B(f)をクロマ候補に使用する。
いくつかの実施形態では、C0位置およびC0のband_numが組み合わされてよく、SPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルにおいて切り換えられうる。以下の表5に示されているように、異なる組合せが異なる分類子であってよい。
いくつかの実施形態では、配列ルマ・サンプル値(Y0)は、配列および隣接ルマ・サンプルに加重することによって取得された値(Yp)に交換される。図12は、本開示のいくつかの実装例によって、配列ルマ・サンプル値を、配列および隣接ルマ・サンプルに加重することによって取得された値に交換することによって、例示的な分類子を示す。配列ルマ・サンプル値(Y0)は、隣接ルマ・サンプルを加重することによって取得された位相補正値(Yp)に交換されうる。異なるYpが異なる分類子であってよい。
いくつかの実施形態では、異なるYpが異なるクロマ形式で適用される。たとえば、図12で、(a)のYpは、420クロマ形式に使用され、(b)のYpは、422クロマ形式に使用され、Y0は、444クロマ形式に使用される。
いくつかの実施形態では、別の分類子(C1)は、配列ルマ・サンプル(Y0)および隣接する8つのルマ・サンプルの比較スコア[-8,8]であり、以下に示されているように、合計17のクラスをもたらす。
初期クラス(C1)=0、隣接する8つのルマ・サンプルを介したループ(Yi,i=1~8)
if Y0>Yi Class+=1
else if Y0<Yi Class-=1
初期クラス(C1)=0、隣接する8つのルマ・サンプルを介したループ(Yi,i=1~8)
if Y0>Yi Class+=1
else if Y0<Yi Class-=1
いくつかの実施形態では、C1の例は以下の関数に等しく、閾値thは0である。
ClassIdx=Index2ClassTable(f(C,P1)+f(C,P2)+...+f(C,P8))
x-y>thの場合、f(x,y)=1であり、x-y=thの場合、f(x,y)=0であり、x-y<thの場合、f(x,y)=-1であり、
Index2ClassTableはルックアップ・テーブル(LUT)であり、Cは現在のまたは配列されたサンプルであり、P1~P8は隣接するサンプルである。
ClassIdx=Index2ClassTable(f(C,P1)+f(C,P2)+...+f(C,P8))
x-y>thの場合、f(x,y)=1であり、x-y=thの場合、f(x,y)=0であり、x-y<thの場合、f(x,y)=-1であり、
Index2ClassTableはルックアップ・テーブル(LUT)であり、Cは現在のまたは配列されたサンプルであり、P1~P8は隣接するサンプルである。
いくつかの実施形態では、差の分類(量子化)を助けるために、C4分類子と同様に、1つまたは複数の閾値が、SPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで事前定義され(たとえば、LUTに維持される)、または信号化されうる。
いくつかの実施形態では、変動(C1’)が比較スコア[0,8]のみを計数し、これは8つのクラスをもたらす。(C1,C1’)は分類子グループであり、C1およびC1’を切り換えるために、PH/SHレベル・フラグが信号化されうる。
初期クラス(C1’)=0、隣接する8つのルマ・サンプルを介したループ(Yi,i=1~8)
if Y0>Yi Class+=1
if Y0>Yi Class+=1
いくつかの実施形態では、変動(C1)が、比較スコアを計数するために、Mの隣接サンプルから隣接するNを選択的に使用する。比較スコアを計数するためにどの隣接サンプルが選択されたかを示すために、MビットのビットマスクがSPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで信号化されてよい。ルマ分類子に対する一例として図6Bを使用して、8つの隣接ルマ・サンプルが候補であり、8ビットのビットマスク(01111110)がPHで信号化され、これはY1~Y6の6つのサンプルが選択されたことを示し、したがって比較スコアは[-6,6]であり、13のオフセットをもたらす。選択的な分類子C1は、オーバーヘッドを信号化するオフセットと分類粒度との間のトレードオフのために、より多くの選択肢をエンコーダに与える。
C1と同様に、変動(C1’)は比較スコア[0,+N]のみを計数し、前のビットマスク01111110の例が、[0,6]の比較スコアを与え、7のオフセットをもたらす。
いくつかの実施形態では、異なる分類子が組み合わされて、汎用分類子をもたらす。たとえば、以下の表6-1に示されているように、異なるピクチャ(異なるPOC値)に対して異なる分類子が適用される。
いくつかの実施形態では、表6-2に示されているように、別の例示的な分類子(C3)が、分類のためにビットマスクを使用している。この分類子を示すために、10ビットのビットマスクがSPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで信号化される。たとえば、ビットマスク11 1100 0000は、所与の10ビットのルマ・サンプル値に対して、最上位ビット(MSB):4ビットのみが分類に使用され、合計16のクラスをもたらすことを意味する。別の例示的なビットマスク10 0100 0001は、3ビットのみが分類に使用され、合計8つのクラスをもたらすことを意味する。
いくつかの実施形態では、ビットマスク長(N)は固定されてよく、またはSPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで切り換えられうる。たとえば、10ビットのシーケンスの場合、4ビットのビットマスク1110がピクチャ内にPHで信号化され、MSB3ビットb9、b8、b7が分類に使用される。別の例は、LSB上の4ビットのビットマスク0011であり、b0、b1が分類に使用される。ビットマスク分類子は、ルマまたはクロマ分類に該当することができる。MSBまたはLSBをビットマスクNに使用するかどうかは固定されてよく、またはSPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで切り換えられうる。
いくつかの実施形態では、ルマ位置およびC3ビットマスクが組み合わされてよく、SPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで切り換えられうる。異なる組合せは異なる分類子であってよい。
いくつかの実施形態では、ビットマスク制限の「1の最大数」は、対応するオフセットの数を制限するために適用されうる。たとえば、SPSでビットマスクの「1の最大数」を4に制限することで、シーケンスの最大オフセットを16にする。異なるPOCのビットマスクは異なってもよいが、「1の最大数」は4を超過しないものとする(全クラスで16を超過しないものとする)。「1の最大数」値が信号化されてよく、SPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで切り換えられうる。
いくつかの実施形態では、図11に示されているように、他の成分間クロマ・サンプル、たとえばクロマ・サンプル1102およびその隣接サンプルがまた、たとえば現在のクロマ・サンプル1104のために、CCSAO分類へ供給されうる。たとえば、Crクロマ・サンプルは、CCSAO Cb分類へ供給されうる。Cbクロマ・サンプルは、CCSAO Cr分類へ供給されうる。成分間クロマ・サンプルの分類子は、ルマ成分間分類子と同じであってよく、または本開示に記載されているように、独自の分類子を有してもよい。2つの分類子が組み合わされて、現在のクロマ・サンプルを分類するための共同分類子を形成することができる。たとえば、成分間ルマ・サンプルおよびクロマ・サンプルを組み合わせた共同分類子は、以下の表6-3に示されているように、合計16のクラスをもたらす。
すべての上述された分類子(C0、C1、C1’、C2、C3)が組み合わされうる。たとえば、以下の表6-4を参照されたい。
いくつかの実施形態では、例示的な分類子(C2)が、配列および隣接ルマ・サンプルの差分(Yn)を使用する。図12(c)は、Ynの一例を示し、Ynは、ビット深さが10であるとき、[-1024,1023]のダイナミック・レンジを有する。C2のband_numを、Ynダイナミック・レンジの等しく分割されたバンドの数とする。
クラス(C2)=(Yn+(1<<bit_depth)*band_num)>>(bit_depth+1)。
クラス(C2)=(Yn+(1<<bit_depth)*band_num)>>(bit_depth+1)。
いくつかの実施形態では、C0およびC2が組み合わされて、汎用分類子をもたらす。たとえば、以下の表7に示されているように、異なるピクチャ(異なるPOC)に対して異なる分類子が適用される。
いくつかの実施形態では、すべての上述された分類子(C0、C1、C1’、C2)が組み合わされる。たとえば、以下の表8-1に示されているように、異なるピクチャ(異なるPOC)に対して異なる分類子が適用される。
いくつかの実施形態では、分類子例(C4)は、下の表8-2に示されているように、CCSAO入力値と補償されるべきサンプル値との差を分類に使用する。たとえば、CCSAOがALF段階で適用される場合、現在の成分のALF前およびALF後のサンプル値の差が分類に使用される。差の分類(量子化)を助けるために、1つまたは複数の閾値が、SPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで事前定義され(たとえば、ルックアップ・テーブル(LUT)に維持される)、または信号化されうる。C4分類子は、共同分類子を形成するために、C0 Y/U/V bandNumと組み合わせられうる(たとえば、表8-2に示されているPOC1の例)。
いくつかの実施形態では、分類子例(C5)は、異なるコーディング・モードが再構築画像内に異なる歪み統計を導入しうるため、サブブロック分類を助けるために、「コーディング情報」を使用する。たとえば下の表8-3に示されているように、CCSAOサンプルは、以前のサンプル・コーディング情報によって分類され、コーディング情報の組合せが分類子を形成することができる。下の図30は、C5に対するコーディング情報の異なる段階の別の例を示す。
いくつかの実施形態では、分類子例(C6)は、YUV色変換値を分類に使用する。たとえば、現在のY成分を分類するために、1/1/1の配列または隣接Y/U/Vサンプルが、RGBに色変換されるように選択され、C3 bandNumを使用して、現在のY成分分類子になるようにR値を量子化する。
いくつかの実施形態では、現在の成分分類に現在の成分情報のみを使用する他の分類子例が、成分間分類として使用されうる。たとえば、図5Aおよび表1に示されているように、ルマ・サンプル情報およびeo-classが使用されて、EdgeIdxを導出し、現在のクロマ・サンプルを分類する。成分間分類子として使用されることも可能な他の「非成分間」分類子は、エッジ方向、画素強度、画素変動、画素分散、画素のラプラシアンの和、ソーベル演算子、コンパス演算子、ハイパス・フィルタ値、ローパス・フィルタ値などを含む。
いくつかの実施形態では、複数分類子が同じPOCで使用される。現在のフレームはいくつかの領域によって分割され、各領域が同じ分類子を使用する。たとえば、3つの異なる分類子がPOC0で使用され、以下の表9に示されているように、どの分類子(0、1、または2)が使用されるかが、CTUレベルで信号化される。
いくつかの実施形態では、複数分類子(複数分類子を代替オフセット・セットと呼ぶこともできる)の最大数は固定されてよく、またはSPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで信号化されうる。一例では、複数分類子の固定(事前に画定)された最大数は4である。その場合、4つの異なる分類子がPOC0で使用され、どの分類子(0、1、または2)が使用されるかが、CTUレベルで信号化される。各ルマまたはクロマCTBに使用される分類子を示すために、短縮単項(TU)コードが使用されうる。たとえば、以下の表10に示されているように、TUコードが0であるとき、CCSAOは適用されず、TUコードが10であるとき、set 0が適用され、TUコードが110であるとき、set 1が適用され、TUコードが1110であるとき、set 2が適用され、TUコードが1111であるとき、set 3が適用される。CTBに対する分類子を示すために(オフセット・セット索引)、固定長コード、ゴロム・ライスコード、および指数ゴロム・コードが使用されてもよい。3つの異なる分類子がPOC1で使用される。
CbおよびCrのCTBオフセット・セット索引の一例が、1280×720のシーケンスPOC0で与えられる(CTUサイズが128×128である場合、フレーム内のCTUの数は10×6である)。POC0のCbは4つのオフセット・セットを使用し、Crは1つのオフセット・セットを使用する。以下の表11-1に示されているように、オフセット・セット索引が0であるとき、CCSAOは適用されず、オフセット・セット索引が1であるとき、set 0が適用され、オフセット・セット索引が2であるとき、set 1が適用され、オフセット・セット索引が3であるとき、set 2が適用され、オフセット・セット索引が4であるとき、set 3が適用される。タイプは、選択された配列ルマ・サンプル(Yi)の位置を意味する。異なるオフセット・セットは、異なるタイプ、band_num、および対応するオフセットを有することができる。
いくつかの実施形態では、配列/現在および隣接Y/U/Vサンプルを分類に共同で使用する一例が、以下の表11-2に挙げられる(各Y/U/V成分に対する3成分共同bandNum分類)。POC0で、{2,4,1}オフセット・セットが、それぞれ{Y,U,V}に使用される。各オフセット・セットは、SPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで適応して切り換えられうる。異なるオフセット・セットが、異なる分類子を有することができる。たとえば、図6Bおよび図6Cに示す候補位置(candPos)として、現在のY4ルマ・サンプルを分類するために、Y set0が、{現在のY4,配列U4,配列V4}を候補として選択し、それぞれ異なるbandNum{Y,U,V}={16,1,2}である。{candY,candU,candV}を選択された{Y,U,V}候補のサンプル値として使用するとき、全クラスの数は32であり、クラス索引導出は次のように示されうる。
bandY=(candY*bandNumY)>>BitDepth;
bandU=(candU*bandNumU)>>BitDepth;
bandV=(candV*bandNumV)>>BitDepth;
classIdx=bandY*bandNumU*bandNumV
+bandU*bandNumV
+bandV;
bandY=(candY*bandNumY)>>BitDepth;
bandU=(candU*bandNumU)>>BitDepth;
bandV=(candV*bandNumV)>>BitDepth;
classIdx=bandY*bandNumU*bandNumV
+bandU*bandNumV
+bandV;
いくつかの実施形態では、導出プロセスを簡略化するために、共同分類子のclassIdx導出が、「or-shift」形式として表されうる。たとえば、max bandNum={16,4,4}
classIdx=(bandY<<4)|(bandU<<2)|bandVである。
classIdx=(bandY<<4)|(bandU<<2)|bandVである。
別の例は、POC1において、成分V set1分類である。その例では、bandNum={4,1,2}でcandPos={隣接Y8,隣接U3,隣接V0}が使用され、8つのクラスをもたらす。
いくつかの実施形態では、たとえば以下の表11-3に示されているように、配列および隣接Y/U/Vサンプルを現在のY/U/Vサンプル分類に共同で使用する一例が挙げられる(各Y/U/V成分に対する3成分共同edgeNum(C1)およびbandNum分類)。エッジCandPosは、C1分類子に使用される中心位置であり、エッジbitMaskは、C1隣接サンプル活動化インジケータであり、edgeNumは、対応するC1クラスの数である。この例では、C1はY分類子にのみ適用され(したがって、edgeNumはedgeNumYに等しい)、エッジcandPosは常にY4である(現在/配列サンプル位置)。しかし、C1は、隣接サンプル位置としてエッジcandPosを有するY/U/V分類子に適用されてよい。
diffがYのC1比較スコアを示す場合、classIdx導出は次のとおりとなりうる。
bandY=(candY*bandNumY)>>BitDepth;
bandU=(candU*bandNumU)>>BitDepth;
bandV=(candV*bandNumV)>>BitDepth;
edgeIdx=diff+(edgeNum>>1);
bandIdx=bandY*bandNumU*bandNumV
+bandU*bandNumV
+bandV;
classIdx=bandIdx*edgeNum+edgeIdx;
bandY=(candY*bandNumY)>>BitDepth;
bandU=(candU*bandNumU)>>BitDepth;
bandV=(candV*bandNumV)>>BitDepth;
edgeIdx=diff+(edgeNum>>1);
bandIdx=bandY*bandNumU*bandNumV
+bandU*bandNumV
+bandV;
classIdx=bandIdx*edgeNum+edgeIdx;
いくつかの実施形態では、最大band_num(bandNumY、bandNumU、またはbandNumV)が、固定されてよく、またはSPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで信号化されうる。たとえば、デコーダで各フレームに対してmax band_num=16を固定すると、フレーム内のC0のband_numを示すために、4ビットが信号化される。いくつかの他の最大band_numの例が、以下の表12に挙げられる。
いくつかの実施形態では、各セット(または加えられたすべてのセット)に対するクラスまたはオフセット(複数の分類子を共同で使用する組合せ、たとえばC1 edgeNum*C1 bandNumY*bandNumU*bandNumV)の最大数が固定されてよく、またはSPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで信号化されうる。たとえば、maxは、加えられたすべてのセットに対してclass_num=256*4で固定され、制約を確認するために、エンコーダ適合性チェックまたはデコーダ規範チェックが使用されうる。
いくつかの実施形態では、制限がC0分類に適用されてよく、たとえばband_num(bandNumY、bandNumU、またはbandNumV)を2のべき乗の値のみに制限する。band_numを明示的に信号化する代わりに、構文band_num_shiftが信号化される。デコーダは、乗算を回避するために、シフト演算を使用することができる。異なるband_num_shiftが異なる成分に使用されうる。
クラス(C0)=(Y0>>band_num_shift)>>bit_depth
クラス(C0)=(Y0>>band_num_shift)>>bit_depth
別の演算例は、誤差を低減させるために丸めを考慮する。
クラス(C0)=((Y0+(1<<(band_num_shift-1)))>>band_num_shift)>>bit_depth
クラス(C0)=((Y0+(1<<(band_num_shift-1)))>>band_num_shift)>>bit_depth
たとえば、band_num_max(Y、U、またはV)が16である場合、表13に示されているように、可能なband_num_shift候補は、band_num=1、2、4、8、16に対応する0、1、2、3、4である。
いくつかの実施形態では、CbおよびCrに適用される分類子は異なる。すべてのクラスに対するCbおよびCrオフセットが別個に信号化されうる。たとえば、以下の表14に示されているように、信号化された異なるオフセットが、異なるクロマ成分に適用される。
いくつかの実施形態では、最大オフセット値は固定され、またはシーケンス・パラメータ・セット(SPS)/適応パラメータ・セット(APS)/ピクチャ・パラメータ・セット(PPS)/ピクチャ・ヘッダ(PH)/スライス・ヘッダ(SH)/Region/CTU/CU/Subblock/Sampleレベルで信号化される。たとえば、最大オフセットは[-15,15]である。異なる成分は異なる最大オフセット値を有することができる。
いくつかの実施形態では、オフセットの信号化は、差分パルスコード変調(DPCM)を使用することができる。たとえば、オフセット{3,3,2,1,-1}が、{3,0,-1,-1,-2}として信号化されうる。
いくつかの実施形態では、オフセットは、次のピクチャ/スライスの再利用のために、APSまたはメモリ・バッファに記憶されうる。どの記憶された以前のフレーム・オフセットが現在のピクチャに使用されるかを示すために索引が信号化されうる。
いくつかの実施形態では、CbおよびCrの分類子は同じである。たとえば以下の表15に示されているように、すべてのクラスに対するCbおよびCrオフセットが共同で信号化されうる。
いくつかの実施形態では、CbおよびCrの分類子は同じであってよい。たとえば以下の表16に示されているように、すべてのクラスに対するCbおよびCrオフセットが、符号フラグ差によって共同で信号化されうる。表16によれば、Cbオフセットが(3,3,2,-1)であるとき、導出されるCrオフセットは(-3,-3,-2,1)である。
いくつかの実施形態では、たとえば以下の表17に示されているように、符号フラグは各クラスに対して信号化されうる。表17によれば、Cbオフセットが(3,3,2,-1)であるとき、導出されるCrオフセットは、それぞれの符号フラグに従って、(-3,3,2,1)である。
いくつかの実施形態では、CbおよびCrの分類子は同じであってよい。たとえば以下の表18に示されているように、すべてのクラスに対するCbおよびCrオフセットが、重み差によって共同で信号化されうる。重み(w)は、制限された表で、たとえば±1/4、±1/2、0、±1、±2、±4...などで選択されてよく、ここで|w|は2のべき乗の値のみを含む。表18によれば、Cbオフセットが(3,3,2,-1)であるとき、それぞれの符号フラグによって、導出されるCrオフセットは(-6,-6,-4,2)である。
いくつかの実施形態では、たとえば以下の表19に示されているように、重みは各クラスに対して信号化されうる。表19によれば、Cbオフセットが(3,3,2,-1)であるとき、導出されるCrオフセットは、それぞれの符号フラグに従って、(-6,12,0,-1)である。
いくつかの実施形態では、複数分類子が同じPOCで使用される場合、異なるオフセット・セットが別個にまたは共同で信号化される。
いくつかの実施形態では、前に復号されたオフセットは、将来のフレームの使用のために記憶されうる。オフセットの信号化のオーバーヘッドを低減させるように、どの前に復号されたオフセット・セットが現在のフレームに使用されるかを示すために、索引が信号化されうる。たとえば、以下の表20に示されているように、POC0オフセットは、オフセットset idx=0を信号化することで、POC2によって再利用されうる。
いくつかの実施形態では、たとえば以下の表21に示されているように、CbおよびCrに対する再利用オフセットset idxは異なってよい。
いくつかの実施形態では、オフセットの信号化は、信号化のオーバーヘッドを低減させるために、startおよびlengthを含む追加の構文を使用することができる。たとえば、band_num=256であるとき、band_idx=37~44のオフセットのみが信号化される。以下の表22-1の例では、startおよびlengthの構文はどちらも8ビットの固定長コードであり、band_numビットに整合するべきである。
いくつかの実施形態では、CCSAOがすべてのYUV3成分に適用される場合、配列および隣接YUVサンプルが分類に共同で使用されてよく、Cb/Crに対するすべての上述されたオフセットの信号化方法がY/Cb/Crに拡張されうる。いくつかの実施形態では、異なる成分オフセット・セットが別個に記憶されて使用されてよく(各成分が独自の記憶されたセットを有する)、または共同で記憶されて使用されてよい(各成分が同じ記憶されたセットを共有/再利用する)。別個のセットの例が以下の表22-2に示されている。
いくつかの実施形態では、シーケンス・ビット深さが10(または特定のビット深さ)より大きい場合、オフセットは信号化前に量子化されうる。デコーダ側では、以下の表23-1に示されているように、復号されたオフセットが適用前に逆量子化される。たとえば、12ビットのシーケンスの場合、復号されたオフセットは2だけ左シフト(逆量子化)される。
いくつかの実施形態では、オフセットは、CcSaoOffsetVal=(1-2*ccsao_offset_sign_flag)*(ccsao_offset_abs<<(BitDepth-Min(10,BitDepth)))として計算されうる。
いくつかの実施形態では、フィルタ強度の概念が本明細書にさらに導入される。たとえば、分類子オフセットは、サンプルに適用される前にさらに重み付けされうる。重み(w)は、2のべき乗の値の表で選択されうる。たとえば、±1/4、±1/2、0、±1、±2、±4...などであり、ここで|w|は2のべき乗の値のみを含む。重み索引は、SPS/APS/PPS/PH/SH/Region(Set)/CTU/CU/Subblock/Sampleレベルで信号化されうる。量子化されたオフセットの信号化は、この重み適用の一部として得られうる。図6Dに示されているように、再帰的CCSAOが適用される場合、類似の重み索引機構が第1の段階と第2の段階との間で適用されうる。
いくつかの例では、異なる分類子に対して加重することで、複数の分類子のオフセットが、重みの組合せを有する同じサンプルに適用されうる。上述されたように、類似の重み索引機構が信号化されうる。たとえば、
offset_final=w*offset_1+(1-w)*offset_2、または
offset_final=w1*offset_1+w2*offset_2+...である。
offset_final=w*offset_1+(1-w)*offset_2、または
offset_final=w1*offset_1+w2*offset_2+...である。
いくつかの実施形態では、PH/SH内のCCSAOパラメータを直接信号化する代わりに、以前に使用されたパラメータ/オフセットが、次のピクチャ/スライスの再利用のために、適応パラメータ・セット(APS)またはメモリ・バッファ内に記憶されうる。索引は、どの記憶された以前のフレーム・オフセットが現在のピクチャ/スライスに使用されるかを示すように、PH/SH内で信号化されうる。CCSAO履歴オフセット(history offsets)を維持するために、新しいAPS IDが作成されうる。以下の表は、図6I、candPos、およびbandNum{Y,U,V}={16,4,4}を使用する一例を示す。いくつかの例では、candPos、bandNum、オフセット信号化方法は、固定長コード(FLC)とすることができ、または短縮単項(TU)コード、次数kを有する指数ゴロム・コード(EGk)、符号付きEG0(SVLC)、または符号なしEG0(UVLC)などの他の方法とすることができる。この場合、sao_cc_y_class_num(またはcb、cr)は、sao_cc_y_band_num_y*sao_cc_y_band_num_u*sao_cc_y_band_num_v(またはcb、cr)に等しい。ph_sao_cc_y_aps_idは、このピクチャ/スライス内で使用されるパラメータ索引である。cbおよびcr成分は、同じ信号化論理に従うことができることに留意されたい。
aps_adaptation_parameter_set_idは、他の構文要素による参考のためのAPSに対する識別子を提供する。aps_params_typeがCCSAO_APSに等しいとき、aps_adaptation_parameter_set_idの値は、(たとえば)包括的に0~7の範囲内であるものとする。
ph_sao_cc_y_aps_idは、現在のピクチャ内のスライスのY色成分が参照するCCSAO APSのaps_adaptation_parameter_set_idを指定する。ph_sao_cc_y_aps_idが存在するとき、以下が適用される。CCSAO_APSに等しいaps_params_typeおよびph_sao_cc_y_aps_idに等しいaps_adaptation_parameter_set_idを有するAPS NALユニットのsao_cc_y_set_signal_flagの値は、1に等しいものとし、CCSAO_APSに等しいaps_params_typeおよびph_sao_cc_y_aps_idに等しいaps_adaptation_parameter_set_idを有するAPSネットワーク抽象層(NAL)ユニットのTemporalIdは、現在のピクチャのTemporalIdより小さいまたはそれに等しいものとする。
いくつかの実施形態では、APS更新機構が本明細書に記載される。APSオフセット・セットの最大数が、SPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで事前定義または信号化されうる。異なる成分は、異なる最大数制限を有することができる。APSオフセット・セットが一杯である場合、新しく追加されたオフセット・セットは、先入れ先出し(FIFO)、後入れ先出し(LIFO)、もしくは最長時間未使用(LRU)機構で、1つの既存の記憶されたオフセットに取って代わることができ、またはどのAPSオフセット・セットが交換されるべきかを示す索引値が受信される。いくつかの例では、選択された分類子がcandPos/edge info/coding info...などからなる場合、すべての分類子情報は、APSオフセット・セットの一部として得られることが可能であり、そのオフセット値を有するAPSオフセット・セット内に記憶されることも可能である。
いくつかの実施形態では、制約が適用されうる。たとえば、新しく受信された分類子情報およびオフセットは、記憶されたAPSオフセット・セット(同じ成分または異なる成分)のいずれとも同じになる可能性はない。
いくつかの例では、C0 candPos/bandNum分類子が使用される場合、APSオフセット・セットの最大数は、Y/U/Vにつき4であり、Y/VにFIFO更新が使用され、Uに更新を示すidxが使用される。
いくつかの実施形態では、FIFO更新は、上記の例と同様に、(1)以前に残されたset idxを円形に更新することができ(すべて更新されている場合、セット0から再び開始する)、(2)毎回セット0から更新することができる。いくつかの例では、更新は、新しいオフセット・セットを受信したとき、PH(例と同様)、またはSPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで行うことができる。
LRU更新の場合、デコーダは、「total offset set used count」をカウントするカウント・テーブルを維持し、これは、SPS/APS/グループ・オブ・ピクチャ(GOP)ごとの構造/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルでリフレッシュされうる。新しく受信されたオフセット・セットは、APS内の最長時間未使用オフセット・セットに取って代わる。2つの記憶されたオフセット・セットが同じカウントを有する場合、FIFO/LIFOが使用されうる。たとえば、下の表23-4の成分Yを参照されたい。
いくつかの実施形態では、異なる成分が異なる更新機構を有することができる。
いくつかの実施形態では、異なる成分(たとえば、U/V)が同じ分類子を共有することができる(同じcandPos/edge info/coding info/offsetが、修飾子とともに重みをさらに有することができる)。
いくつかの実施形態では、サンプル処理が以下に記載される。R(x,y)をCCSAO前の入力ルマまたはクロマ・サンプル値とし、R’(x,y)をCCSAO後の出力ルマまたはクロマ・サンプル値とする。
offset=ccsao_offset[R(x,y)のclass_index]
R’(x,y)=Clip3(0,(1<<bit_depth)-1,R(x,y)+offset)
offset=ccsao_offset[R(x,y)のclass_index]
R’(x,y)=Clip3(0,(1<<bit_depth)-1,R(x,y)+offset)
上記の方程式によれば、各ルマまたはクロマ・サンプル値R(x,y)は、現在のピクチャおよび/または現在のオフセットset idxの示されている分類子を使用して分類される。導出されたクラス索引の対応するオフセットが、各ルマまたはクロマ・サンプル値R(x,y)に加えられる。クリップ関数Clip3が(R(x,y)+オフセット)に適用されて、ビット深さダイナミック・レンジ、たとえば0から(1<<bit_depth)-1の範囲内の出力ルマまたはクロマ・サンプル値R’(x,y)を作成する。
図13は、本開示のいくつかの実装例によって、CCSAOが適用され、他のループ内フィルタが異なるクリッピングの組合せを有することを示すブロック図である。
いくつかの実施形態では、CCSAOが他のループ・フィルタによって動作されるとき、クリップ動作は以下を含むことができる。
(1)加算後のクリッピング
以下の方程式は、(a)CCSAOがSAOおよびBIFによって動作される例、または(b)CCSAOがSAOに取って代わるが、依然としてBIFによって動作される例を示す。
(a)IOUT=clip1(IC+ΔISAO+ΔIBIF++ΔICCSAO)
(b)IOUT=clip1(IC+ΔICCSAO+ΔIBIF)
(2)BIFによって動作される加算前のクリッピング
いくつかの実施形態では、クリップ順序が切り換えられうる。
(a)IOUT=clip1(IC+ΔISAO)
I’OUT=clip1(IOUT+ΔIBIF)
I”OUT=clip1(I”OUT+ΔICCSAO)
(b)IOUT=clip1(IC+ΔIBIF)
I’OUT=clip1(I’OUT+ΔICCSAO)
(3)部分的加算後のクリッピング
(a)IOUT=clip1(IC+ΔISAO+ΔIBIF)
I’OUT=clip1(IOUT+ΔICCSAO)
(1)加算後のクリッピング
以下の方程式は、(a)CCSAOがSAOおよびBIFによって動作される例、または(b)CCSAOがSAOに取って代わるが、依然としてBIFによって動作される例を示す。
(a)IOUT=clip1(IC+ΔISAO+ΔIBIF++ΔICCSAO)
(b)IOUT=clip1(IC+ΔICCSAO+ΔIBIF)
(2)BIFによって動作される加算前のクリッピング
いくつかの実施形態では、クリップ順序が切り換えられうる。
(a)IOUT=clip1(IC+ΔISAO)
I’OUT=clip1(IOUT+ΔIBIF)
I”OUT=clip1(I”OUT+ΔICCSAO)
(b)IOUT=clip1(IC+ΔIBIF)
I’OUT=clip1(I’OUT+ΔICCSAO)
(3)部分的加算後のクリッピング
(a)IOUT=clip1(IC+ΔISAO+ΔIBIF)
I’OUT=clip1(IOUT+ΔICCSAO)
いくつかの実施形態では、異なるクリッピング(clipping)の組合せは、補正精度とハードウェア一時バッファ・サイズ(レジスタまたはSRAMビット幅)との間に異なるトレードオフを与える。
図13(a)は、SAO/BIFオフセット・クリッピングを示す。図13(b)は、CCSAOのための1つの追加のビット深さクリッピングを示す。図13(c)は、SAO/BIF/CCSAOオフセットを入力サンプルに加算した後の共同クリッピングを示す。より具体的には、たとえば図13(a)は、SAOと相互作用するときの現在のBIF設計を示す。SAOおよびBIFからのオフセットが入力サンプルに加算され、それに続いて1つのビット深さクリッピングを実行する。しかし、図13(b)および図13(c)に示されているように、CCSAOがまたSAO段階で加えられるとき、(1)CCSAOに対する1つの追加のビット深さクリッピングを追加すること、および(2)SAO/BIF/CCSAOオフセットを入力サンプルに追加した後に共同クリッピングを実行する1つの調和した設計、という2つの可能なクリッピング設計が選択されうる。いくつかの実施形態では、上述されたクリッピング設計は、BIFがそれらにのみ適用されるため、ルマ・サンプルのみが異なる。
いくつかの実施形態では、境界処理が以下に記載されている。分類に使用される配列および隣接ルマ(クロマ)サンプルのいずれかが現在のピクチャの外側に位置する場合、CCSAOが現在のクロマ(ルマ)サンプルに適用されない。図14Aは、本開示のいくつかの実装例によって、分類に使用される配列および隣接ルマ(クロマ)サンプルのいずれかが現在のピクチャの外側に位置する場合、CCSAOが現在のクロマ(ルマ)サンプルに適用されないことを示すブロック図である。たとえば、図14A(a)において、分類子が使用される場合、CCSAOは現在のピクチャの左1列のクロマ成分に適用されない。たとえば、C1’が使用される場合、図14A(b)に示されているように、CCSAOは現在のピクチャの左1列および上1行のクロマ成分に適用されない。
図14Bは、本開示のいくつかの実装例によって、分類に使用される配列および隣接ルマまたはクロマ・サンプルのいずれかが現在のピクチャの外側に位置する場合、CCSAOが現在のルマまたはクロマ・サンプルに適用されることを示すブロック図である。いくつかの実施形態では、変動は、図14B(b)に示されているように、分類に使用される配列および隣接ルマまたはクロマ・サンプルのいずれかが現在のピクチャの外側に位置する場合、図14B(a)に示されているように、失われたサンプルが反復的に使用され、または失われたサンプルがミラー・パディングされて、分類のためのサンプルを作成し、CCSAOは現在のルマまたはクロマ・サンプルに適用されうる。いくつかの実施形態では、分類に使用される配列および隣接ルマ(クロマ)サンプルのいずれかが、現在のサブピクチャ/スライス/タイル/パッチ/CTU/360仮想境界の外側に位置する場合、本明細書に開示される無効化/反復/ミラー・ピクチャ境界処理方法がまた、サブピクチャ/スライス/タイル/CTU/360仮想境界で適用されうる。
たとえば、ピクチャは、1つまたは複数のタイル行および1つまたは複数のタイル列に分割される。タイルは、ピクチャの方形領域を含む一連のCTUである。
スライスは、整数の完全なタイル、またはピクチャのタイル内の整数の連続する完全なCTU行からなる。
サブピクチャは、集合的にピクチャの方形領域を含む1つまたは複数のスライスを含む。
いくつかの実施形態では、360度ビデオが球上で取り込まれ、本質的に「境界」を有しておらず、投影されるドメイン内の基準ピクチャの境界の外にある基準サンプルが常に、球形ドメイン内の隣接サンプルから取得されうる。複数の面から構成される投影形式の場合、どのような小型のフレームパッキング配置が使用されるかにかかわらず、フレームパッキングピクチャ内の2つ以上の隣接面間に不連続性が現れる。VVCでは、垂直および/または水平仮想境界が導入され、これを超えるとループ内フィルタリング動作が無効化され、それらの境界の位置は、SPSまたはピクチャ・ヘッダ内に信号化される。各組の連続面に1つずつ、2つのタイルを使用することと比べて、360仮想境界の使用は、面サイズがCTUサイズの倍数であることを必要としないため、より柔軟である。いくつかの実施形態では、垂直360仮想境界の最大数は3であり、水平360仮想境界の最大数も3である。いくつかの実施形態では、2つの仮想境界間の距離は、CTUサイズより大きくまたはそれに等しく、仮想境界の粒度は、8ルマ・サンプル、たとえば8×8サンプルの格子である。
図14Cは、本開示のいくつかの実装例によって、分類に使用される対応する選択された配列または隣接ルマ・サンプルが、仮想境界によって画定される仮想空間の外側である場合、CCSAOが現在のクロマ・サンプルに適用されないことを示すブロック図である。いくつかの実施形態では、仮想境界(VB)は、ピクチャ・フレーム内の空間を分離する仮想線である。いくつかの実施形態では、仮想境界(VB)が現在のフレーム内で適用される場合、CCSAOは、仮想境界によって画定される仮想空間の外側にある対応するルマ位置を選択したクロマ・サンプルに適用されない。図14Cは、9のルマ位置候補を有するC0分類子に対する仮想境界の一例を示す。各CTUに対して、CCSAOは、対応する選択されたルマ位置が仮想境界によって取り囲まれた仮想空間の外側にあるクロマ・サンプルに適用されない。たとえば、図14C(a)で、選択されたY7ルマ・サンプル位置が、フレームの底辺から4画素の線に位置する水平仮想境界1406の反対側にあるとき、CCSAOはクロマ・サンプル1402に適用されない。たとえば、図14C(b)で、選択されたY5ルマ・サンプル位置が、フレームの右辺からy画素の線に位置する垂直仮想境界1408の反対側に位置するとき、CCSAOはクロマ・サンプル1404に適用されない。
図15は、本開示のいくつかの実装例によって、反復またはミラー・パディングが、仮想境界の外側にあるルマ・サンプルに適用されうることを示す。図15(a)は、反復パディングの一例を示す。元のY7が、VB1502の底辺に位置する分類子になるように選択された場合、元のY7ルマ・サンプル値ではなく、Y4ルマ・サンプル値が分類に使用される(Y7位置にコピーされる)。図15(b)は、ミラー・パディングの一例を示す。Y7が、VB1504の底辺に位置する分類子になるように選択された場合、元のY7ルマ・サンプル値ではなく、Y0ルマ・サンプルに対してY7値に対称のY1ルマ・サンプル値が分類に使用される。パディング方法は、より多くのクロマ・サンプルにCCSAOを適用する可能性を与え、したがってより多くのコーディングゲイン(coding gain)が実現されうる。
いくつかの実施形態では、CCSAOによって必要とされる線バッファを低減させ、境界処理条件チェックを簡略化するために、制限が適用されうる。図16は、本開示のいくつかの実装例によって、9つすべての配列および隣接ルマ・サンプルが分類に使用される場合、追加の1ルマ線バッファ、すなわち現在のVB1602の上の線-5の全線ルマ・サンプルが必要とされうることを示す。図10B(a)は、6つのルマ候補のみを分類に使用する一例を示し、これは線バッファを低減させ、図14Aおよび図14Bにおけるいかなる追加の境界チェックも必要としない。
いくつかの実施形態では、CCSAO分類にルマ・サンプルを使用すると、ルマ線バッファを増大させ、したがってデコーダ・ハードウェア実装コストを増大させうる。図17は、本開示のいくつかの実装例によって、AVSにおいて、VB1702を交差する9つのルマ候補CCSAOが、2つの追加のルマ線バッファを増大させうる図を示す。仮想境界(VB)1702より上のルマ・サンプルおよびクロマ・サンプルの場合、DBF/SAO/ALFが現在のCTU行で処理される。VB1702より下のルマ・サンプルおよびクロマ・サンプルの場合、DBF/SAO/ALFが次のCTU行で処理される。AVSデコーダ・ハードウェア設計では、ルマ線-4から-1のDBF前サンプル、線-5のSAO前サンプル、およびクロマ線-3から-1のDBF前サンプル、線-4のSAO前サンプルが、次のCTU行のDBF/SAO/ALF処理のための線バッファとして記憶される。次のCTU行を処理するとき、線バッファ内にないルマ・サンプルおよびクロマ・サンプルは利用できない。しかし、たとえばクロマ線-3(b)位置において、クロマ・サンプルは次のCTU行で処理されるが、CCSAOは、SAO前ルマ・サンプル線-7、-6、および-5を分類に必要とする。SAO前ルマ・サンプル線-7、-6は線バッファ内になく、したがって利用できない。SAO前ルマ・サンプル線-7および-6を線バッファに加えると、デコーダ・ハードウェア実装コストを増大させる。いくつかの例では、ルマVB(線-4)およびクロマVB(線-3)は異なってよい(位置合わせされない)。
図17と同様に、図18Aは、VVCにおいて、本開示のいくつかの実装例によって、VB1802を交差する9つのルマ候補CCSAOが、1つの追加のルマ線バッファを増大させうる図を示す。VBは、異なる規格で異なってもよい。VVCにおいて、ルマVBは線-4であり、クロマVBは線-2であり、したがって9つの候補CCSAOが、1つのルマ線バッファを増大させうる。
いくつかの実施形態では、第1の解決策において、クロマ・サンプルのルマ候補のいずれかがVBを横切っている(現在のクロマ・サンプルVBの外側にある)場合、CCSAOがクロマ・サンプルに対して無効化される。図19A~図19Cは、本開示のいくつかの実装例によって、クロマ・サンプルのルマ候補のいずれかがVB1902を横切っている(現在のクロマ・サンプルVBの外側にある)場合、AVSおよびVVCにおいて、CCSAOがクロマ・サンプルに対して無効化されることを示す。図14Cもまた、この実装例のいくつかの例を示す。
いくつかの実施形態では、第2の解決策において、「交差VB」ルマ候補に対して、VBに近くVBの反対側にあるルマ線、たとえばルマ線-4から、反復パディングがCCSAOに使用される。いくつかの実施形態では、VBの下の隣接ルマに最も近いルマからの反復パディングが、「交差VB」クロマ候補に対して実装される。図20A~図20Cは、本開示のいくつかの実装例によって、AVSおよびVVCにおいて、クロマ・サンプルのルマ候補のいずれかがVB2002を横切っている(現在のクロマ・サンプルVBの外側にある)場合、クロマ・サンプルに対する反復パディングを使用してCCSAOが有効化されることを示す。図14C(a)もまた、この実装例のいくつかの例を示す。
いくつかの実施形態では、第3の解決策において、「交差VB」ルマ候補に対して、ルマVBの下から、ミラー・パディングがCCSAOに使用される。図21A~図21Cは、本開示のいくつかの実装例によって、AVSおよびVVCにおいて、クロマ・サンプルのルマ候補のいずれかがVB2102を横切っている(現在のクロマ・サンプルVBの外側にある)場合、クロマ・サンプルに対するミラー・パディングを使用して、CCSAOが有効化されることを示す。図14C(b)および図14B(b)もまた、この実装例のいくつかの例を示す。いくつかの実施形態では、第4の解決策において、CCSAOを適用するために「両面対称パディング」が使用される。図22A~図22Bは、本開示のいくつかの実装例によって、異なるCCSAO形状(たとえば、9つのルマ候補(図22A)および8つのルマ候補(図22B))のいくつかの例に対して、両面対称パディングを使用して、CCSAOが有効化されることを示す。クロマ・サンプルの配列された中心ルマ・サンプルを有するルマ・サンプル・セットに対して、ルマ・サンプル・セットの一方の側がVB2202の外側にある場合、ルマ・サンプル・セットの両側に対して両面対称パディングが適用される。たとえば、図22Aで、ルマ・サンプルY0、Y1、およびY2はVB2202の外側にあり、したがってY0、Y1、Y2およびY6、Y7、Y8はどちらも、Y3、Y4、Y5を使用してパディングされる。たとえば、図22Bで、ルマ・サンプルY0はVB2202の外側にあり、したがってY0はY2を使用してパディングされ、Y7はY5を使用してパディングされる。
図18Bは、本開示のいくつかの実装例によって、現在のルマ・サンプルを分類するために配列または隣接クロマ・サンプルが使用され、選択されたクロマ候補がVBを横切って、追加のクロマ線バッファを必要としうる図を示す。上述されたものに類似の解1~4が、この問題に対処するために適用されうる。
解決策1は、そのクロマ候補のいずれかがVBを横切りうるとき、ルマ・サンプルに対するCCSAOを無効化することである。
解決策2は、「交差VB」クロマ候補に対して、VBの下の隣接クロマに最も近いクロマからの反復パディングを使用することである。
解決策3は、「交差VB」クロマ候補に対して、クロマVBの下からのミラー・パディングを使用することである。
解決策4は、「両面対称パディング」を使用することである。CCSAO配列クロマ・サンプルの中心に位置する候補セットに対して、候補セットの一方の側がVBの外側にある場合、両面対称パディングが両側に適用される。
パディング方法は、より多くのルマまたはクロマ・サンプルにCCSAOを適用する可能性を与え、したがってより多くのコーディングゲインが実現されうる。
いくつかの実施形態では、底部ピクチャ(またはスライス、タイル、ブリック)境界CTU行において、VBより下のサンプルは現在のCTU行で処理され、したがって上記の特別な取扱い(解1、2、3、4)が、この底部ピクチャ(またはスライス、タイル、ブリック)境界CTU行に適用されない。たとえば、1920×1080のフレームが、128×128のCTUで分割される。フレームは、15×9のCTU(端数切り上げ)を含む。底部CTU行は、第15のCTU行である。復号プロセスは、CTU行ごとに行われ、各CTU行に対してCTUごとに行われる。現在のCTU行と次のCTU行との間の水平CTU境界に沿って、デブロッキングが適用される必要がある。1つのCTUの内側では、底部4/2ルマ/クロマ線において、DBFサンプル(VVCの場合)が次のCTU行で処理され、現在のCTU行のCCSAOに利用できないため、CTBのVBが各CTU行に適用される。しかし、ピクチャ・フレームの底部CTU行では、次のCTU行が残っていないため、底部4/2ルマ/クロマ線DBFサンプルが、現在のCTU行で利用可能であり、現在のCTU行でDBF処理される。
いくつかの実施形態では、図13~図22に表示されるVBは、サブピクチャ/スライス/タイル/パッチ/CTU/360仮想境界の境界によって交換されうる。いくつかの実施形態では、図13~図22のクロマおよびルマ・サンプルの位置は切り換えられうる。いくつかの実施形態では、図13~図22のクロマおよびルマ・サンプルの位置は、第1のクロマ・サンプルおよび第2のクロマ・サンプルの位置によって交換されうる。いくつかの実施形態では、CTU内のALF VBは、共通して水平であってよい。いくつかの実施形態では、サブピクチャ/スライス/タイル/パッチ/CTU/360仮想境界の境界は、水平または垂直であってよい。
いくつかの実施形態では、図16に説明されるように、CCSAOによって必要とされる線バッファを低減させ、境界処理条件チェックを簡略化するために、制限が適用されうる。図23は、本開示のいくつかの実装例によって、制限された数のルマ候補を分類に使用する制限を示す。図23(a)は、6つのルマ候補のみを分類に使用する制限を示す。図23(b)は、4つのルマ候補のみを分類に使用する制限を示す。
いくつかの実施形態では、適用領域が実装される。CCSAO適用領域ユニットは、CTBに基づくことができる。すなわち、オン/オフ制御、CCSAOパラメータ(分類オフセット・セット索引に使用されるオフセット、ルマ候補位置、band_num、ビットマスク...など)は、1つのCTB内で同じである。
いくつかの実施形態では、適用領域は、CTB境界に位置合わせされえない。たとえば、適用領域は、クロマCTB境界に位置合わせされず、シフトされる。構文(オン/オフ制御、CCSAOパラメータ)が、依然として各CTBに対して示されているが、本当の適用領域はCTB境界に位置合わせされない。図24は、本開示のいくつかの実装例によって、CCSAO適用領域がCTB/CTU境界2406に位置合わせされないことを示す。たとえば、適用領域は、クロマCTB/CTU境界2406に位置合わせされないが、VB2408に対して左上シフト(4,4)されたサンプルである。この位置合わせされていないCTB境界設計は、各8×8のデブロッキング・プロセス領域に対して同じデブロッキング・パラメータが使用されるため、デブロッキング・プロセスに利益をもたらす。
いくつかの実施形態では、表24に示されているように、CCSAO適用領域ユニット(マスク・サイズ)は可変であってよい(CTBサイズより大きいまたは小さい)。マスク・サイズは、異なる成分に対して異なってよい。マスク・サイズは、SPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで切り換えられうる。たとえば、PHにおいて、各CCSAO領域情報を示すために、一連のマスク・オン/オフ・フラグおよびオフセット・セット索引が示される。
いくつかの実施形態では、CCSAO適用領域フレーム区画は固定されうる。たとえば、フレームをNの領域に分割する。図25は、本開示のいくつかの実装例によって、CCSAO適用領域フレーム区画がCCSAOパラメータによって固定されうることを示す。
いくつかの実施形態では、各領域は、その独自の領域オン/オフ制御フラグおよびCCSAOパラメータを有することができる。また、領域サイズがCTBサイズより大きい場合、CTBオン/オフ制御フラグおよび領域オン/オフ制御フラグの両方を有することができる。図25(a)および(b)は、フレームをNの領域に分割するいくつかの例を示す。図25(a)は、4つの領域からなる垂直分割を示す。図25(b)は、4つの領域からなる正方形分割を示す。いくつかの実施形態では、オール・オン制御フラグ(ph_cc_sao_cb_ctb_control_flag/ph_cc_sao_cr_ctb_control_flag)上のピクチャ・レベルCTBと同様に、領域オン/オフ制御フラグがオフである場合、CTBオン/オフ・フラグがさらに信号化されうる。そうでない場合、CTBフラグをさらに信号化することなく、この領域内のすべてのCTBにCCSAOが適用される。
いくつかの実施形態では、異なるCCSAO適用領域が、同じ領域オン/オフ制御およびCCSAOパラメータを共有することができる。たとえば、図25(c)で、領域0~2は同じパラメータを共有し、領域3~15は同じパラメータを共有する。図25(c)はまた、領域オン/オフ制御フラグおよびCCSAOパラメータが、ヒルベルト・スキャン順序で信号化されうることを示す。
いくつかの実施形態では、CCSAO適用領域ユニットは、ピクチャ/スライス/CTBレベルから分割された4分木/2分木/3分木になりうる。CTB分割と同様に、CCSAO適用領域区画を示すために、一連の分割されたフラグが信号化される。図26は、本開示のいくつかの実装例によって、CCSAO適用領域が、フレーム/スライス/CTBレベルから分割された2分木(BT)/4分木(QT)/3分木(TT)になりうることを示す。
図27は、本開示のいくつかの実装例によって、ピクチャ・フレーム内において異なるレベルで使用されて切り換えられる複数の分類子を示すブロック図である。いくつかの実施形態では、複数分類子が1つのフレームで使用される場合、分類子セット索引を適用する方法は、SPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで切り換えられうる。たとえば、以下の表25に示されているように、4つの分類子セットがフレーム内で使用され、PHで切り換えられる。図27(a)および図27(c)は、デフォルト固定領域分類子を示す。図27(b)は、分類子セット索引がマスク/CTBレベルで信号化されることを示し、ここで0はこのCTBに対してCCSAOオフを意味し、1~4はセット索引を意味する。
いくつかの実施形態では、デフォルト領域の場合、この領域内のCTBがデフォルト・セット索引を使用しない(たとえば、領域レベル・フラグが0である)が、このフレーム内で他の分類子セットを使用する場合、領域レベル・フラグが信号化されうる。たとえば、デフォルト・セット索引が使用される場合、領域レベル・フラグは1になる。たとえば、正方形区画の4つの領域において、以下の表26-1に示されているように、以下の分類子セットが使用される。
図28は、本開示のいくつかの実装例によって、CCSAO適用領域区画が動的であってよく、ピクチャ・レベルで切り換えられうることを示すブロック図である。たとえば、図28(a)は、3つのCCSAOオフセット・セットがこのPOCで使用され(set_num=3)、したがってピクチャ・フレームが垂直に3つの領域に分割されることを示す。図28(b)は、4つのCCSAOオフセット・セットがこのPOCで使用され(set_num=4)、したがってピクチャ・フレームが水平に4つの領域に分割されることを示す。図28(c)は、3つのCCSAOオフセット・セットがこのPOCで使用され(set_num=3)、したがってピクチャ・フレームが3つの領域にラスタ分割されることを示す。各領域は、CTBオン/オフ制御ビットを節減するために、その独自の領域のオール・オン・フラグを有することができる。領域の数は、信号化されるピクチャset_numに依存する。CCSAO適用領域は、ブロック内のコーディング情報(サンプル位置、サンプル・コーディング・モード、ループ・フィルタ・パラメータなど)による特有の区域とすることができる。たとえば、1)CCSAO適用領域は、サンプルがスキップ・モード・コーディングされたときにのみ適用される可能性があり、または2)CCSAO適用領域は、CTU境界に沿ってN個のサンプルのみを含み、または3)CCSAO適用領域は、フレーム内の8×8格子上のサンプルのみを含み、または4)CCSAO適用領域は、DBFフィルタ・サンプルのみを含み、または5)CCSAO適用領域は、CU内で上Mおよび左N行のみを含み、または(6)CCSAO適用領域は、イントラ・コーディング・サンプルのみを含み、または(7)CCSAO適用領域は、cbf=0ブロック内のサンプルのみを含み、または(8)CCSAO適用領域は、[N,M]のブロックQPを有するブロック上のみに位置し、ここで(N,M)は、SPS/APS/PPS/PH/SH/Region/CTU/CU/Subblock/Sampleレベルで事前定義または信号化されうる。成分間コーディング情報が考慮されてもよく、(9)CCSAO適用領域は、配列ルマ・サンプルがcbf=0ブロック内にあるクロマ・サンプル上である。
いくつかの実施形態では、コーディング情報適用領域制限を導入するかどうかは、指定されたコーディング情報がCCSAO適用で包含/除外されるかどうかを示すように、SPS/APS/PPS/PH/SH/Region(代替セットごと)/CTU/CU/Subblock/Sampleレベルで1つの制御フラグにおいて事前定義され、または通知しうる。デコーダは、事前定義された条件または制御フラグに従って、それらの区域に対するCCSAO処理を省く。たとえば、YUVは、領域(セット)レベルで切り換わる異なる事前定義/フラグ制御条件を使用する。CCSAO適用の判断は、CU/TU/PUまたはサンプル・レベルで行うことができる。
別の例は、2方向有効化制約(事前定義)のすべてまたは一部を再利用する。
bool isInter=(currCU.predMode==MODE_INTER)?true:false;
if(ccSaoParams.ctuOn[ctuRsAddr]
&&((TU::getCbf(currTU,COMPONENT_Y)||isInter==false)&&(currTU.cu->qp>17))
&&(128>std::max(currTU.lumaSize().width,currTU.lumaSize().height))
&&((isInter==false)||(32>std::min(currTU.lumaSize().width,currTU.lumaSize().height))))
bool isInter=(currCU.predMode==MODE_INTER)?true:false;
if(ccSaoParams.ctuOn[ctuRsAddr]
&&((TU::getCbf(currTU,COMPONENT_Y)||isInter==false)&&(currTU.cu->qp>17))
&&(128>std::max(currTU.lumaSize().width,currTU.lumaSize().height))
&&((isInter==false)||(32>std::min(currTU.lumaSize().width,currTU.lumaSize().height))))
いくつかの実施形態では、特有の区域を除外することで、CCSAO統計収集に有利となってよい。オフセット導出は、それらの本当に補正される必要のある区域にとってより精密または好適であってよい。たとえば、cbf=0を有するブロックは通常、さらに補正される必要のないブロックが完全に予測されることを意味する。それらのブロックを除外することで、他の区域のオフセット導出に有利となってよい。
異なる適用領域は、異なる分類子を使用することができる。たとえば、CTUでは、スキップ・モードがC1を使用し、8×8格子がC2を使用し、スキップ・モードおよび8×8格子がC3を使用する。たとえば、CTUでは、スキップ・モード・コーディング・サンプルがC1を使用し、CU中心のサンプルがC2を使用し、CU中心でスキップ・モード・コーディングされたサンプルがC3を使用する。図29は、本開示のいくつかの実装例によって、CCSAO分類子が現在または成分間のコーディング情報を考慮することができることを示す図である。たとえば、異なるコーディング・モード/パラメータ/サンプル位置が、異なる分類子を形成することができる。異なるコーディング情報が組み合わされて、共同分類子を形成することができる。異なる区域は、異なる分類子を使用することができる。図29はまた、適用領域の別の例も示す。
いくつかの実施形態では、事前定義またはフラグ制御「コーディング情報除外区域」機構が、DBF/SAO前/SAO/BIF/CCSAO/ALF/CCALF/NNループ・フィルタ(NNLF)、または他のループ・フィルタで使用されうる。
いくつかの実施形態では、実装されるCCSAO構文が、下の表27に示されている。いくつかの例では、各構文要素の2値化が変更されうる。AVS3では、パッチという用語はスライスに類似しており、パッチ・ヘッダはスライス・ヘッダに類似している。FLCは固定長コードを表す。TUは短縮単項コードを表す。EGkは次数kを有する指数ゴロム・コードを表し、ここでkは固定されうる。SVLCは符号付きEG0を表す。UVLCは符号なしEG0を表す。
高次フラグがオフである場合、低次フラグはフラグのオフ状態から推論されてよく、信号化される必要はない。たとえば、このピクチャ内でph_cc_sao_cb_flagが偽である場合、ph_cc_sao_cb_band_num_minus1、ph_cc_sao_cb_luma_type、cc_sao_cb_offset_sign_flag、cc_sao_cb_offset_abs、ctb_cc_sao_cb_flag、cc_sao_cb_merge_left_flag、およびcc_sao_cb_merge_up_flagは存在せず、偽であると推論される。
いくつかの実施形態では、以下の表28に示されているように、SPSのccsao_enabled_flagがSPSのSAO有効化フラグで調整される。
いくつかの実施形態では、ph_cc_sao_cb_ctb_control_flag、ph_cc_sao_cr_ctb_control_flagが、Cb/CrのCTBオン/オフ制御の粒度を有効化するかどうかを示す。ph_cc_sao_cb_ctb_control_flagおよびph_cc_sao_cr_ctb_control_flagが有効化された場合、ctb_cc_sao_cb_flagおよびctb_cc_sao_cr_flagがさらに信号化されうる。そうでない場合、CCSAOが現在のピクチャに適用されるかどうかは、ph_cc_sao_cb_flag、ph_cc_sao_cr_flagに依存し、ctb_cc_sao_cb_flagおよびctb_cc_sao_cr_flagをCTBレベルでさらに信号化しない。
いくつかの実施形態では、ph_cc_sao_cb_typeおよびph_cc_sao_cr_typeに対して、ビットのオーバーヘッドを低減させるために、中心配列ルマ位置(図10のY0位置)がクロマ・サンプルに対する分類に使用されるかどうかを区別するように、フラグがさらに信号化されうる。同様に、cc_sao_cb_typeおよびcc_sao_cr_typeがCTBレベルで信号化された場合、同じ機構によってフラグがさらに信号化されうる。たとえば、C0ルマ位置候補の数が9である場合、以下で表29に示されているように、中心配列ルマ位置が使用されるかどうかを区別するために、cc_sao_cb_type0_flagがさらに信号化される。中心配列ルマ位置が使用されない場合、残り8つの隣接ルマ位置のうちのどれが使用されるかを示すために、cc_sao_cb_type_idcが使用される。
以下の表30は、AVSにおいて、単一(set_num=1)または複数(set_num>1)の分類子がフレーム内で使用される一例を示す。構文表記は、上記で使用されている表記にマッピングされうる。
各領域が独自のセットを有する図25または図27と組み合わされた場合、構文の例は、以下で表31に示されているように、領域オン/オフ制御フラグ(picture_ccsao_lcu_control_flag[compIdx][setIdx])を含むことができる。
いくつかの実施形態では、高レベル構文の場合、pps_ccsao_info_in_ph_flagおよびgci_no_sao_constraint_flagが追加されうる。
いくつかの実施形態では、1に等しいpps_ccsao_info_in_ph_flagは、CCSAOフィルタ情報がPH構文構造内に存在する可能性があり、PH構文構造を含まないPPSを参照するスライス・ヘッダ内には存在しないことを指定する。0に等しいpps_ccsao_info_in_ph_flagは、CCSAOフィルタ情報がPH構文構造内に存在せず、PPSを参照するスライス・ヘッダ内に存在する可能性があることを指定する。存在しないとき、pps_ccsao_info_in_ph_flagの値は、0に等しいと推論される。
いくつかの実施形態では、1に等しいgci_no_ccsao_constraint_flagは、OlsInScope内のすべてのピクチャに対するsps_ccsao_enabled_flagが0に等しいことを指定する。0に等しいgci_no_ccsao_constraint_flagは、そのような制約を課さない。いくつかの実施形態では、ビデオのビットストリームは、規則に従って1つまたは複数の出力層セット(OLS)を含む。本明細書の例では、OlsInScopeは、範囲内にある1つまたは複数のOLSを参照する。いくつかの例では、profile_tier_level( )構文構造は、レベル情報、ならびに任意選択で、OlsInScopeが順守するプロファイル、層、サブプロファイル、および一般制約情報を提供する。profile_tier_level( )構文構造がVPS内に含まれるとき、OlsInScopeは、VPSによって指定された1つまたは複数のOLSである。profile_tier_level( )構文構造がSPS内に含まれるとき、OlsInScopeは、SPSを参照する層のなかで最下層である層のみを含むOLSであり、この最下層は独立した層である。
いくつかの実施形態では、イントラおよびインター予測後SAOフィルタへの拡張が、以下でさらに示されている。いくつかの実施形態では、本開示に開示されているSAO分類方法(成分間サンプル/コーディング情報分類を含む)は、予測後フィルタとして働くことができ、予測は、イントラ、インター、または他の予測ツール、たとえばイントラ・ブロック・コピーとすることができる。図30は、本開示に開示されているSAO分類方法が本開示のいくつかの実装例による予測後フィルタとして働くことを示すブロック図である。
いくつかの実施形態では、各Y、U、およびV成分に対して、対応する分類子が選択される。各成分予測サンプルに対して、対応する分類子がまず分類され、対応するオフセットが加えられる。たとえば、各成分は、現在のサンプルおよび隣接するサンプルを分類に使用することができる。以下で表32に示されているように、Yは現在のYサンプルおよび隣接するYサンプルを使用し、U/Vは現在のU/Vサンプルを分類に使用する。図31は、本開示のいくつかの実装例によって、予測後SAOフィルタに対して、各成分が現在のサンプルおよび隣接するサンプルを分類に使用することができることを示すブロック図である。
いくつかの実施形態では、改良された予測サンプル(Ypred’、Upred’、Vpred’)が、対応するクラス・オフセットを加えることによって更新され、その後、イントラ、インター、または他の予測に使用される。
Ypred’=clip3(0,(1<<bit_depth)-1,Ypred+h_Y[i])
Upred’=clip3(0,(1<<bit_depth)-1,Upred+h_U[i])
Vpred’=clip3(0,(1<<bit_depth)-1,Vpred+h_V[i])
いくつかの実施形態では、現在のクロマ成分に加えて、クロマのUおよびV成分に対して、成分間(Y)がさらなるオフセット分類に使用されうる。たとえば以下で表33に示されているように、追加の成分間オフセット(h’_U,h’_V)が、現在の成分オフセット(h_U,h_V)で加えられうる。
いくつかの実施形態では、改良された予測サンプル(Upred”,Vpred”)が、対応するクラス・オフセットを加えることによって更新され、その後、イントラ、インター、または他の予測に使用される。
Upred”=clip3(0,(1<<bit_depth)-1,Upred’+h’_U[i])
Vpred”=clip3(0,(1<<bit_depth)-1,Vpred’+h’_V[i])
いくつかの実施形態では、イントラおよびインター予測は、異なるSAOフィルタ・オフセットを使用することができる。
図32は、本開示に開示されるSAO分類方法が本開示のいくつかの実装例による再構築後フィルタとして働くことを示すブロック図である。
いくつかの実施形態では、本明細書に開示されるSAO/CCSAO分類方法(成分間サンプル/コーディング情報分類を含む)は、ツリー・ユニット(TU)の再構築されたサンプルに適用されるフィルタとして働くことができる。図32に示されているように、CCSAOは、再構築後フィルタとして働くことができ、すなわち、再構築されたサンプル(予測/残留サンプルの追加後、デブロッキング前)を分類のための入力として使用し、ルマ/クロマ・サンプルを補償してから、隣接イントラ/インター予測に入ることができる。CCSAO再構築後フィルタは、現在のTUサンプルの歪みを低減させることができ、隣接イントラ/インター・ブロックに対してより良好な予測を与えることができる。より精密な予測によって、より良好な圧縮効率が予期されうる。
図33は、本開示のいくつかの実装例による成分間相関を使用してビデオ信号を復号する例示的なプロセス3300を示す流れ図である。
ビデオ・デコーダ30(図3に示されている)は、ビデオ・データから、APS内に記憶された複数の以前に使用された成分間サンプル適応オフセット(CCSAO)フィルタ・オフセット・セットに関連付けられた適応パラメータ・セット(APS)識別子を受信する(3310)。
ビデオ・デコーダ30は、ビデオ・データから、現在のピクチャまたはスライスに使用されたAPS識別子を示すピクチャ・ヘッダ(PH)またはスライス・ヘッダ(SH)内の構文を受信する(3320)。
ビデオ・デコーダ30は、現在のコーディング・ツリー・ユニット(CTU)に対して、APS識別子に関連付けられたAPS内の複数のオフセット・セットから、特定の以前に使用されたCCSAOフィルタ・オフセット・セットを示すフィルタ・セット索引を復号する(3330)。
ビデオ・デコーダ30は、特定の以前に使用されたCCSAOフィルタ・オフセット・セットを、ビデオ・データの現在のCTUに適用する(3340)。
いくつかの実施形態では、ビデオ・データは、第1の成分および第2の成分を含み、特定の以前に使用されたCCSAOフィルタ・オフセット・セットは、第2の成分のそれぞれのサンプルに関連付けられた第1の成分の1組の1つまたは複数のサンプルから、第2の成分に対するそれぞれの分類子を判定し、それぞれの分類子に従って、第2の成分のそれぞれのサンプルに対するそれぞれのサンプル・オフセットを判定して、判定されたそれぞれのサンプル・オフセットに基づいて、第2の成分のそれぞれのサンプルを修正し、それぞれの各分類子に対する1組の対応する判定されたそれぞれのサンプル・オフセットを、特定の以前に使用されたCCSAOフィルタ・オフセット・セットとして記憶することによって取得される。
いくつかの実施形態では、APS識別子は、以前に使用されたCCSAOフィルタ・オフセット・セットの最大数に関連付けられ、以前に使用されたCCSAOフィルタ・オフセット・セットの数が最大数に到達したという判定に応答して、新しく追加されたCCSAOフィルタ・オフセット・セットが、先入れ先出し(FIFO)機構で、以前に使用されたCCSAOフィルタ・オフセット・セットのうちの1つに取って代わる。
いくつかの実施形態では、APS識別子は、以前に使用されたCCSAOフィルタ・オフセット・セットの最大数に関連付けられ、以前に使用されたCCSAOフィルタ・オフセット・セットの数が最大数に到達したという判定に応答して、新しく追加されたCCSAOフィルタ・オフセット・セットが、最長時間未使用(LRU)機構で、以前に使用されたCCSAOフィルタ・オフセット・セットのうちの1つに取って代わる。
いくつかの実施形態では、FIFO機構で、新しく追加されたCCSAOフィルタ・オフセット・セットは、シーケンス・パラメータ・セット(SPS)、APS、ピクチャ・パラメータ・セット(PPS)、PH、SH、Region、コーディング・ツリー・ユニット(CTU)、コーディング・ユニット(CU)、Subblock、および/またはSampleレベルのうちの1つまたは複数で円形に、以前に使用されたCCSAOフィルタ・オフセット・セットのうちの1つに取って代わる。
いくつかの実施形態では、LRU機構で、新しく追加されたCCSAOフィルタ・オフセット・セットは、SPS、APS、グループ・オブ・ピクチャ(GOP)ごとの構造、PPS、PH、SH、Region、CTU、CU、Subblock、および/またはSampleレベルのうちの1つまたは複数で、以前に使用されたCCSAOフィルタ・オフセット・セットのカウント・テーブルによって識別される最長時間未使用オフセット・セットに取って代わる。
いくつかの実施形態では、最大数は、SPS、APS、PPS、PH、SH、Region、CTU、CU、Subblock、および/またはSampleレベルの1つまたは複数で、事前定義または信号化される。
いくつかの実施形態では、複数の以前に使用されたCCSAOフィルタ・オフセット・セットは、それぞれの分類子に関連付けられた候補位置、バンド情報、エッジ情報、およびコーディング情報のうちの1つまたは複数を含む。
いくつかの実施形態では、APS識別子に関連付けられた以前に使用されたCCSAOフィルタ・オフセット・セットのいずれも、新しく追加されたCCSAOフィルタ・オフセット・セットと同じでない場合、新しく追加されたCCSAOフィルタ・オフセット・セットは、以前に使用されたCCSAOフィルタ・オフセット・セットのうちの1つに取って代わる。
いくつかの実施形態では、APS識別子は、現在のピクチャまたはスライス内の第1の成分および第2の成分に使用され、第1の成分は、第1のCCSAOフィルタ・オフセット・セット交換機構を使用し、第2の成分は、第2のCCSAOフィルタ・オフセット・セット交換機構を使用する。
いくつかの実施形態では、PHまたはSH内の第1の構文は、現在のピクチャまたはスライス内の第1の成分に使用される第1のAPS識別子を示し、PHまたはSH内の第2の構文は、現在のピクチャまたはスライス内の第2の成分に使用される第2のAPS識別子を示す。
図34は、ユーザ・インターフェース3450に結合されたコンピューティング環境3410を示す。コンピューティング環境3410は、データ処理サーバの一部とすることができる。コンピューティング環境3410は、プロセッサ3420、メモリ3430、および入出力(I/O)インターフェース3440を含む。
プロセッサ3420は、典型的に、表示、データ取得、データ通信、および画像処理に関連付けられた動作など、コンピューティング環境3410の全体的な動作を制御する。プロセッサ3420は、前述の方法におけるステップのうちのすべてまたはいくつかを実行するための命令を実行するために、1つまたは複数のプロセッサを含むことができる。さらに、プロセッサ3420は、プロセッサ3420と他の構成要素との間の相互作用を容易にする1つまたは複数のモジュールを含むことができる。プロセッサは、中央処理装置(CPU)、マイクロプロセッサ、単一チップ機械、グラフィカル処理ユニット(GPU)などとすることができる。
メモリ3430は、コンピューティング環境3410の動作に対応するために、様々なタイプのデータを記憶するように構成される。メモリ3430は、所定のソフトウェア3432を含むことができる。そのようなデータの例は、コンピューティング環境3410、ビデオ・データセット、画像データなどで動作させられる任意のアプリケーションまたはメソッドのための命令を含む。メモリ3430は、任意のタイプの揮発性もしくは不揮発性メモリ・デバイス、またはこれらの組合せ、たとえばスタティック・ランダム・アクセス・メモリ(SRAM)、電気的に消去可能なプログラマブル読取り専用メモリ(EEPROM)、消去可能なプログラマブル読取り専用メモリ(EPROM)、プログラマブル読取り専用メモリ(PROM)、読取り専用メモリ(ROM)、磁気メモリ、フラッシュ・メモリ、磁気または光ディスクを使用することによって実装されうる。
I/Oインターフェース3440は、プロセッサ3420と、キーボード、クリック・ホイール、ボタンなどの周辺インターフェース・モジュールとの間のインターフェースを提供する。ボタンは、それだけに限定されるものではないが、ホーム・ボタン、走査開始ボタン、および走査停止ボタンを含むことができる。I/Oインターフェース3440は、エンコーダおよびデコーダに結合されうる。
一実施形態では、前述の方法を実行するためにコンピューティング環境3410内でプロセッサ3420によって実行可能な複数のプログラムをたとえばメモリ3430内に備える非一時的コンピュータ可読記憶媒体も提供される。別法として、非一時的コンピュータ可読記憶媒体には、符号化されたビデオ情報(たとえば、1つまたは複数の構文要素を含むビデオ情報)を含むビットストリームまたはデータストリームが記憶されてよく、このビットストリームまたはデータストリームは、たとえばビデオ・データを復号する際にデコーダ(たとえば、図3のビデオ・デコーダ30)によって使用される上述された符号化方法を使用して、エンコーダ(たとえば、図2のビデオ・エンコーダ20)によって生成される。非一時的コンピュータ可読記憶媒体は、たとえば、ROM、ランダム・アクセス・メモリ(RAM)、CD-ROM、磁気テープ、フロッピー・ディスク、光データ記憶デバイスなどとすることができる。
一実施形態では1つまたは複数のプロセッサ(たとえば、プロセッサ3420)と、1つまたは複数のプロセッサによって実行可能な複数のプログラムが記憶された非一時的コンピュータ可読記憶媒体またはメモリ3430とを備えるコンピューティング・デバイスも提供され、1つまたは複数のプロセッサは、複数のプログラムの実行時に、前述の方法を実行するように構成される。
一実施形態では、前述の方法を実行するためにコンピューティング環境3410内でプロセッサ3420によって実行可能な複数のプログラムをたとえばメモリ3430内に備えるコンピュータ・プログラム製品も提供される。たとえば、コンピュータ・プログラム製品は、非一時的コンピュータ可読記憶媒体を含むことができる。
一実施形態では、コンピューティング環境3410は、上記の方法を実行するために、1つまたは複数のASIC、DSP、デジタル信号処理デバイス(DSPD)、プログラマブル論理デバイス(PLD)、FPGA、GPU、コントローラ、マイクロコントローラ、マイクロプロセッサ、または他の電子構成要素によって実装されうる。
さらなる実施形態はまた、様々な他の実施形態で組み合わされまたは他の方法で再配置された上記の実施形態の様々な部分集合を含む。
1つまたは複数の例では、記載されている機能は、ハードウェア、ソフトウェア、ファームウェア、またはこれらの任意の組合せで実装されうる。ソフトウェアで実装される場合、機能は、1つまたは複数の命令またはコードとして、コンピュータ可読媒体上に記憶されてよく、またはコンピュータ可読媒体を介して伝送されてよく、ハードウェア・ベースの処理ユニットによって実行されてよい。コンピュータ可読媒体は、データ記憶媒体などの有形の媒体に対応するコンピュータ可読記憶媒体、またはたとえば通信プロトコルに従ったある場所から別の場所へのコンピュータ・プログラムの伝達を容易にする任意の媒体を含む通信媒体を含むことができる。このようにして、コンピュータ可読媒体は、概して、(1)非一時的である有形のコンピュータ可読記憶媒体、または(2)信号もしくはキャリア波などの通信媒体に対応することができる。データ記憶媒体は、本出願に記載されている実装例の実装のための命令、コード、および/またはデータ構造を取り出すために、1つもしくは複数のコンピュータまたは1つもしくは複数のプロセッサによってアクセスされうる任意の利用可能な媒体とすることができる。コンピュータ・プログラム製品は、コンピュータ可読媒体を含むことができる。
本明細書の実装例の説明で使用される術語は、特定の実装例について説明することのみを目的とし、特許請求の範囲を限定することを意図したものではない。実装例の説明および添付の特許請求の範囲で使用されるとき、単数形の「a」、「an」、および「the」は、別途文脈が明白に示さない限り、複数形も同様に含むことが意図される。本明細書では、「および/または」という用語は、挙げられている関連項目のうちの1つまたは複数のあらゆる可能な組合せを指し、包含することも理解されよう。「備える、含む(comprises)」および/または「備える、含む(comprising)」という用語は、本明細書で使用されるとき、記載の特徴、要素、および/または構成要素の存在を指定するが、1つまたは複数の他の特徴、要素、構成要素、および/またはこれらの群の存在または追加を除外しないことがさらに理解されよう。
本明細書では、様々な要素について説明するために、第1、第2などの用語が使用されうるが、これらの要素は、これらの用語によって限定されるべきではないことも理解されよう。これらの用語は、1つの要素を別の要素から区別するためにのみ使用される。たとえば、実装例の範囲から逸脱することなく、第1の電極が第2の電極と呼ばれてもよく、同様に第2の電極が第1の電極と呼ばれてもよい。第1の電極および第2の電極はどちらも電極であるが、同じ電極ではない。
本明細書全体にわたって、単数または複数の「一例」、「例」、「例示」などの参照は、ある例に関連して記載されている1つまたは複数の特定の特徴、構造、または特性が、本開示の少なくとも1つの例に含まれることを意味する。したがって、本明細書全体にわたって様々な場所での単数または複数の「一例では」または「例では」、「例示では」などの語句は、必ずしもすべて同じ例を指すとは限らない。さらに、1つまたは複数の例における特定の特徴、構造、または特性は、任意の好適な方法で組み合わされることを含むことができる。
本出願の説明は、例示および説明の目的で提示されており、網羅的であること、または開示される形態で本発明に限定されることが意図されるものではない。多くの修正例、変形例、および代替実装例が、上記の説明および関連する図面に提示される教示に利益を有する当業者には明らかであろう。実施形態は、本発明の原理、実際の応用について最善に説明するために、また当業者であれば様々な実装例に関して本発明を理解し、企図される特定の用途に適した様々な修正例とともに根本的な原理および様々な実装例を最善に利用することを可能にするために、選択および記載されたものである。したがって、特許請求の範囲は、開示される実装例の特有の例に限定されるものではなく、修正例および他の実装例も添付の特許請求の範囲内に含まれることが意図されることを理解されたい。
Claims (14)
- ビデオ・データを復号する方法であって、
前記ビデオ・データから、APS内に記憶された複数の以前に使用された成分間サンプル適応オフセット(Cross-Component Sample Adaptive Offset)(CCSAO)フィルタ・オフセット・セット(filter offset set)に関連付けられた適応パラメータ・セット(APS)識別子を受信することと、
前記ビデオ・データから、現在のピクチャまたはスライスに使用された前記APS識別子を示すピクチャ・ヘッダ(PH)またはスライス・ヘッダ(SH)内の構文を受信することと、
現在のコーディング・ツリー・ユニット(CTU)に対して、前記APS識別子に関連付けられた前記APS内の前記複数のオフセット・セットから、特定の以前に使用されたCCSAOフィルタ・オフセット・セットを示すフィルタ・セット索引を復号することと、
前記特定の以前に使用されたCCSAOフィルタ・オフセット・セットを、前記ビデオ・データの前記現在のCTUに適用することとを含む方法。 - 前記ビデオ・データが、第1の成分および第2の成分を含み、前記特定の以前に使用されたCCSAOフィルタ・オフセット・セットが、
前記第2の成分のそれぞれのサンプルに関連付けられた前記第1の成分の1組の1つまたは複数のサンプルから、前記第2の成分に対するそれぞれの分類子を判定し、
前記それぞれの分類子に従って、前記第2の成分の前記それぞれのサンプルに対するそれぞれのサンプル・オフセット(sample offset)を判定して、前記判定されたそれぞれのサンプル・オフセットに基づいて、前記第2の成分の前記それぞれのサンプルを修正し、
それぞれの各分類子に対する1組の対応する判定されたそれぞれのサンプル・オフセットを、前記特定の以前に使用されたCCSAOフィルタ・オフセット・セットとして記憶することによって取得される、請求項1に記載の方法。 - 前記APS識別子が、前記以前に使用されたCCSAOフィルタ・オフセット・セットの最大数に関連付けられ、前記以前に使用されたCCSAOフィルタ・オフセット・セットの数が前記最大数に到達したという判定に応答して、新しく追加されたCCSAOフィルタ・オフセット・セットが、先入れ先出し(FIFO)機構で、前記以前に使用されたCCSAOフィルタ・オフセット・セットのうちの1つに取って代わる、請求項1に記載の方法。
- 前記APS識別子が、前記以前に使用されたCCSAOフィルタ・オフセット・セットの最大数に関連付けられ、前記以前に使用されたCCSAOフィルタ・オフセット・セットの数が前記最大数に到達したという判定に応答して、新しく追加されたCCSAOフィルタ・オフセット・セットが、最長時間未使用(LRU)機構で、前記以前に使用されたCCSAOフィルタ・オフセット・セットのうちの1つに取って代わる、請求項1に記載の方法。
- 前記FIFO機構で、前記新しく追加されたCCSAOフィルタ・オフセット・セットが、シーケンス・パラメータ・セット(SPS)、APS、ピクチャ・パラメータ・セット(PPS)、PH、SH、Region、コーディング・ツリー・ユニット(CTU)、コーディング・ユニット(CU)、Subblock、および/またはSampleレベルのうちの1つまたは複数で円形に、前記以前に使用されたCCSAOフィルタ・オフセット・セットのうちの1つに取って代わる、請求項3に記載の方法。
- 前記LRU機構で、前記新しく追加されたCCSAOフィルタ・オフセット・セットが、SPS、APS、グループ・オブ・ピクチャ(GOP)ごとの構造、PPS、PH、SH、Region、CTU、CU、Subblock、および/またはSampleレベルのうちの1つまたは複数で、前記以前に使用されたCCSAOフィルタ・オフセット・セットのカウント・テーブルによって識別される最長時間未使用オフセット・セットに取って代わる、請求項4に記載の方法。
- 前記最大数が、SPS、APS、PPS、PH、SH、Region、CTU、CU、Subblock、および/またはSampleレベルのうちの1つまたは複数で、事前定義または信号化される、請求項3に記載の方法。
- 前記複数の以前に使用されたCCSAOフィルタ・オフセット・セットが、前記それぞれの分類子に関連付けられた候補位置、バンド情報、エッジ情報、およびコーディング情報のうちの1つまたは複数を含む、請求項2に記載の方法。
- 前記APS識別子に関連付けられた前記以前に使用されたCCSAOフィルタ・オフセット・セットがいずれも、前記新しく追加されたCCSAOフィルタ・オフセット・セットと同じでない場合、前記新しく追加されたCCSAOフィルタ・オフセット・セットが、前記以前に使用されたCCSAOフィルタ・オフセット・セットのうちの1つに取って代わる、請求項3に記載の方法。
- 前記APS識別子が、前記現在のピクチャまたはスライス内の前記第1の成分および前記第2の成分に使用され、前記第1の成分が、第1のCCSAOフィルタ・オフセット・セット交換機構を使用し、前記第2の成分が、第2のCCSAOフィルタ・オフセット・セット交換機構を使用する、請求項2に記載の方法。
- PHまたはSH内の第1の構文が、前記現在のピクチャまたはスライス内の前記第1の成分に使用される第1のAPS識別子を示し、PHまたはSH内の第2の構文が、前記現在のピクチャまたはスライス内の前記第2の成分に使用される第2のAPS識別子を示す、請求項2に記載の方法。
- 1つまたは複数の処理ユニットと、
前記1つまたは複数の処理ユニットに結合されたメモリと、
前記メモリ内に記憶された複数のプログラムとを備える電子装置であって、前記複数のプログラムが、前記1つまたは複数の処理ユニットによって実行されたとき、前記電子装置に、請求項1から11のいずれか一項に記載の方法を実行させる、
電子装置。 - ビットストリームが記憶されたコンピュータ可読記憶媒体であって、請求項1から11のいずれか一項に記載のビデオ・データを復号する方法によって生成されたビデオ情報を含むコンピュータ可読記憶媒体。
- 1つまたは複数の処理ユニットを有する電子装置による実行のために、複数のプログラムを記憶する非一時的コンピュータ可読記憶媒体であって、前記複数のプログラムが、前記1つまたは複数の処理ユニットによって実行されたとき、前記電子装置に、請求項1から11のいずれか一項に記載の方法を実行させる、非一時的コンピュータ可読記憶媒体。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US63/193,539 | 2021-05-26 | ||
US63/213,167 | 2021-06-21 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2024521804A true JP2024521804A (ja) | 2024-06-04 |
Family
ID=
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN116418993A (zh) | 视频编码的方法、装置和介质 | |
JP2024507857A (ja) | 成分間サンプル適応オフセットにおけるコーディングの強化 | |
CN115989675A (zh) | 交叉分量样本自适应偏移中的色度编码增强 | |
US20230336785A1 (en) | Coding enhancement in cross-component sample adaptive offset | |
US20230319315A1 (en) | Coding enhancement in cross-component sample adaptive offset | |
JP2024509801A (ja) | 成分間サンプル適応オフセットにおけるコーディングの強化 | |
JP2024508232A (ja) | クロスコンポーネントサンプリング適応オフセットにおける彩度符号化復号化の強化 | |
JP2024521804A (ja) | 成分間サンプル適応オフセットにおけるコーディングの強化 | |
US20240137546A1 (en) | Coding enhancement in cross-component sample adaptive offset | |
CN117795957A (zh) | 跨分量样点自适应偏移中的编解码增强 | |
CN117203962A (zh) | 跨分量样本自适应偏移中的编解码增强 | |
CN117413516A (zh) | 跨分量样本自适应偏移中的编解码增强 | |
KR20240042646A (ko) | 교차-컴포넌트 샘플 적응적 오프셋에서의 코딩 강화 | |
KR20240039168A (ko) | 크로스-컴포넌트 샘플 적응적 오프셋에서의 코딩 강화 | |
CN117917074A (zh) | 跨分量样点自适应偏移中的编解码增强 | |
CN116965017A (zh) | 在跨分量样点自适应偏移中的色度编解码增强 | |
CN116569551A (zh) | 交叉分量样本自适应偏移中的色度编码增强 |