詳細な説明
[034] ここで、その例が添付図面に示される例示的実施形態を詳細に参照する。以下の説明は、添付図面を参照し、添付図面では、他に指示がない限り、異なる図中の同じ数字が同じ又は同様の要素を表す。例示的実施形態についての以下の説明に記載される実装形態は、本発明と合致する全ての実装形態を表すわけではない。むしろ、それらは、添付の特許請求の範囲で列挙する本発明に関係する態様と合致する機器及び方法の例に過ぎない。別段の定めがない限り、「又は」という語は、実行不可能な場合を除いて、あり得る全ての組み合わせを包含する。例えば、ある構成要素がA又はBを含み得ると述べた場合、別段の定めがない限り又は実行不可能でない限り、その構成要素は、A若しくはB又はA及びBを含むことができる。第2の例として、ある構成要素がA、B又はCを含み得ると述べた場合、別段の定めがない限り又は実行不可能でない限り、その構成要素は、A、若しくはB、若しくはC、又はA及びB、又はA及びC、又はB及びC、又はA、及びB、及びCを含むことができる。
[035] 映像とは、視覚的情報を記憶するために時系列順に配置される静止ピクチャ(又は「フレーム」)の組である。それらのピクチャを時系列順に捕捉し、記憶するために、映像捕捉装置(例えば、カメラ)を使用することができ、かかるピクチャを時系列順に表示するために、映像再生装置(例えば、テレビ、コンピュータ、スマートフォン、タブレットコンピュータ、ビデオプレーヤ又は表示機能を有する任意のエンドユーザ端末)を使用することができる。更に、一部の応用では、監視、会議又は生放送等のために、映像捕捉装置が捕捉映像を映像再生装置(例えば、モニタを有するコンピュータ)にリアルタイムで伝送することができる。
[036] かかる応用が必要とする記憶空間及び伝送帯域幅を減らすために、映像を記憶及び伝送前に圧縮し、表示前に解凍することができる。この圧縮及び解凍は、プロセッサ(例えば、汎用コンピュータのプロセッサ)又は専用ハードウェアによって実行されるソフトウェアによって実装され得る。圧縮のためのモジュールを一般に「符号器」と呼び、解凍のためのモジュールを一般に「復号器」と呼ぶ。符号器及び復号器は、まとめて「コーデック」と呼ぶことができる。符号器及び復号器は、様々な適切なハードウェア、ソフトウェア、又はその組み合わせとして実装することができる。例えば、符号器及び復号器のハードウェア実装は、1つ又は複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、書換可能ゲートアレイ(FPGA)、ディスクリートロジック、又はその任意の組み合わせ等の回路を含み得る。符号器及び復号器のソフトウェア実装は、プログラムコード、コンピュータ実行可能命令、ファームウェア、又はコンピュータ可読媒体内に固定される任意の適切なコンピュータによって実装されるアルゴリズム若しくはプロセスを含み得る。映像の圧縮及び解凍は、MPEG-1、MPEG-2、MPEG-4、H.26xシリーズ等の様々なアルゴリズム、又は規格によって実装され得る。一部の応用では、コーデックが第1のコード化規格から映像を解凍し、第2のコード化規格を使用して、解凍された映像を再圧縮することができ、その場合、コーデックを「トランスコーダ」と呼ぶことができる。
[037] 映像符号化プロセスは、ピクチャを再構築するために使用可能な有用な情報を識別し、保つことができ、再構築に重要でない情報を無視することができる。無視された重要でない情報を完全に再構築できない場合、かかる符号化プロセスは、「非可逆」と呼ぶことができる。さもなければ、かかる符号化プロセスは、「可逆」と呼ぶことができる。殆どの符号化プロセスは、非可逆であり、これは、必要な記憶空間及び伝送帯域幅を減らすためのトレードオフである。
[038] 符号化されているピクチャ(「現ピクチャ」と呼ぶ)の有用な情報は、参照ピクチャ(例えば、過去に符号化され、再構築されたピクチャ)に対する変化を含む。かかる変化は、ピクセルの位置変化、光度変化、又は色変化を含むことができ、そのうちの位置変化が最も関係している。オブジェクトを表すピクセル群の位置変化は、参照ピクチャと現ピクチャとの間のオブジェクトの動きを反映し得る。
[039] 別のピクチャを参照することなくコード化されるピクチャ(即ちピクチャが自らの参照ピクチャである)を「Iピクチャ」と呼ぶ。参照ピクチャとして過去のピクチャを使用してコード化されるピクチャを「Pピクチャ」と呼ぶ。参照ピクチャとして過去のピクチャ及び将来のピクチャの両方を使用してコード化される(即ち参照が「双方向」である)ピクチャを「Bピクチャ」と呼ぶ。
[040] 先に述べたように、新たな映像コード化技法を開発する目標の1つは、コード化効率を改善すること、即ち同じピクチャ品質を表すためにより少ないコード化データを使用することである。本開示は、クロマスケーリングによるルママッピングを行うための方法及びシステムを提供する。ルママッピングは、ループフィルタで使用するためのルマサンプルをマッピングするためのプロセスであり、クロマスケーリングは、クロマ残差値をスケーリングするためのルマ依存プロセスである。半分の帯域幅を使用するHEVC/H.265と同じ主観的品質、LMCSは、1)コード化ループで使用するための新たなコード値の組に入力ルマコード値をマッピングするためのプロセス、及び2)クロマ残差値をスケーリングするためのルマ依存プロセス、という2つの主なコンポーネントを有する。ルママッピングプロセスは、指定のビット深度において許可されるルマコード値の範囲をより良好に活用することにより、標準的な及び高ダイナミックレンジの映像信号のコード化効率を改善する。
[041] 図1は、本開示の一部の実施形態による、映像コード化を使用する映像シーケンス100の一例の構造を示す。映像シーケンス100は、生中継映像、又は捕捉されアーカイブされている映像であり得る。映像100は、現実の映像、コンピュータによって生成される映像(例えば、コンピュータゲーム映像)、又はその組み合わせ(例えば、拡張現実効果を有する現実の映像)であり得る。映像シーケンス100は、映像捕捉装置(例えば、カメラ)、過去に捕捉された映像を含む映像アーカイブ(例えば、記憶装置内に記憶される映像ファイル)、又は映像コンテンツプロバイダから映像を受信するための映像フィードインタフェース(例えば、映像ブロードキャストトランシーバ)から入力され得る。
[042] 図1に示すように、映像シーケンス100は、ピクチャ102、104、106及び108を含む、タイムラインに沿って時間的に配置される一連のピクチャを含み得る。ピクチャ102~106は、連続的であり、ピクチャ106とピクチャ108との間に更に多くのピクチャがある。図1では、ピクチャ102は、Iピクチャであり、その参照ピクチャは、ピクチャ102自体である。ピクチャ104は、Pピクチャであり、矢印によって示すように、その参照ピクチャは、ピクチャ102である。ピクチャ106は、Bピクチャであり、矢印によって示すように、その参照ピクチャは、ピクチャ104及び108である。一部の実施形態では、ピクチャ(例えば、ピクチャ104)の参照ピクチャは、そのピクチャの直前又は直後になくてもよい。例えば、ピクチャ104の参照ピクチャは、ピクチャ102に先行するピクチャであり得る。ピクチャ102~106の参照ピクチャは、例に過ぎず、本開示は、参照ピクチャの実施形態を、図1に示す例として限定しないことに留意すべきである。
[043] 典型的には、映像コーデックは、ピクチャ全体を一度に符号化又は復号せず、それは、かかるタスクが計算的に複雑であるためである。むしろ、映像コーデックは、ピクチャを基本セグメントに分割し、ピクチャをセグメントごとに符号化又は復号することができる。本開示では、そのような基本セグメントを基本処理単位(「BPU」)と呼ぶ。例えば、図1の構造110は、映像シーケンス100のピクチャ(例えば、ピクチャ102~108の何れか)の構造の一例を示す。構造110では、ピクチャが4x4の基本処理単位に分けられており、その境界が破線で示されている。一部の実施形態では、基本処理単位は、一部の映像コード化規格(例えば、MPEGファミリ、H.261、H.263又はH.264/AVC)の「マクロブロック」と呼ぶことができ、他の一部の映像コード化規格(例えば、H.265/HEVC又はH.266/VVC)の「コード化ツリー単位」(「CTU」)と呼ぶことができる。128x128、64x64、32x32、16x16、4x8、16x32、又はピクセルのあらゆる任意の形状及びサイズ等、基本処理単位は、ピクチャ内で可変サイズを有することができる。基本処理単位のサイズ及び形状は、コード化の効率及び基本処理単位内で保とうとする詳細度のバランスに基づいてピクチャについて選択することができる。
[044] 基本処理単位は、コンピュータメモリ(例えば、映像フレームバッファ)に記憶される様々な種類の映像データ群を含み得る論理単位であり得る。例えば、カラーピクチャの基本処理単位は、無彩色の輝度情報を表すルマ成分(Y)、色情報を表す1つ又は複数のクロマ成分(例えば、Cb及びCr)、並びにルマ成分及びクロマ成分が同じサイズを有し得る基本処理単位の関連構文要素を含むことができる。一部の映像コード化規格(例えば、H.265/HEVC又はH.266/VVC)では、ルマ成分及びクロマ成分が「コード化ツリーブロック」(「CTB」)と呼ばれ得る。基本処理単位に対して行われるいかなる操作も、そのルマ成分及びクロマ成分のそれぞれに対して繰り返し行うことができる。
[045] 映像のコード化は、複数の操作段階を有し、その例を図2A~図2B及び図3A~図3Bで詳述する。それぞれの段階について、基本処理単位のサイズは、依然として処理するのに大き過ぎる場合があり、従って本開示で「基本処理副単位」と呼ぶセグメントに更に分けることができる。一部の実施形態では、基本処理副単位は、一部の映像コード化規格(例えば、MPEGファミリ、H.261、H.263又はH.264/AVC)の「ブロック」と呼ぶことができるか、又は他の一部の映像コード化規格(例えば、H.265/HEVC又はH.266/VVC)の「コード化単位」(「CU」)と呼ぶことができる。基本処理副単位は、基本処理単位と同じ又はそれよりも小さいサイズを有し得る。基本処理単位と同様に、基本処理副単位もコンピュータメモリ(例えば、映像フレームバッファ)に記憶される様々な種類の映像データ群(例えば、Y、Cb、Cr及び関連構文要素)を含み得る論理単位である。基本処理副単位に対して行われるいかなる操作も、そのルマ成分及びクロマ成分のそれぞれに対して繰り返し行うことができる。処理の必要性に応じて、かかる分割は、更なるレベルに対して行われ得ることに留意すべきである。様々な段階が様々な方式を使用して基本処理単位を分割できることにも留意すべきである。
[046] 例えば、(その一例を図2Bで詳述する)モード決定段階において、基本処理単位に対して何れの予測モード(例えば、イントラピクチャ予測又はインターピクチャ予測)を使用するかを符号器が決定することができ、基本処理単位は、かかる決定を下すには大き過ぎる場合がある。符号器は、基本処理単位を複数の基本処理副単位(例えば、H.265/HEVC又はH.266/VVCにあるCU)に分け、個々の基本処理副単位ごとに予測の種類を決定することができる。
[047] 別の例では、(その一例を図2Aに詳述する)予測段階において、符号器は、基本処理副単位(例えば、CU)のレベルで予測操作を行うことができる。しかし、一部の事例では、処理するのに基本処理副単位が依然として大き過ぎる場合がある。符号器は、基本処理副単位をより小さいセグメント(例えば、H.265/HEVC又はH.266/VVCで「予測ブロック」又は「PB」と呼ばれる)に更に分けることができ、そのレベルで予測操作を行うことができる。
[048] 別の例では、(その一例を図2Aに詳述する)変換段階において、符号器は、残差基本処理副単位(例えば、CU)に対する変換操作を行うことができる。しかし、一部の事例では、処理するのに基本処理副単位が依然として大き過ぎる場合がある。符号器は、基本処理副単位をより小さいセグメント(例えば、H.265/HEVC又はH.266/VVCで「変換ブロック」又は「TB」と呼ばれる)に更に分けることができ、そのレベルで変換操作を行うことができる。同じ基本処理副単位の分割方式は、予測段階と変換段階とで異なり得ることに留意すべきである。例えば、H.265/HEVC又はH.266/VVCでは、同じCUの予測ブロック及び変換ブロックは、異なるサイズ及び数を有し得る。
[049] 図1の構造110では、基本処理単位112が3x3の基本処理副単位に更に分けられており、その境界が点線で示されている。同じピクチャの異なる基本処理単位を異なる方式で基本処理副単位に分けることができる。
[050] 一部の実装形態では、映像の符号化及び復号に並列処理及び誤り耐性の機能を与えるために、ピクチャを処理のための領域に分けることができ、それにより、ピクチャの領域について、符号化又は復号プロセスがピクチャの他の任意の領域の情報に依存しないようにすることができる。換言すれば、ピクチャの各領域を独立に処理することができる。そうすることで、コーデックは、ピクチャの異なる領域を並列に処理し、従ってコード化の効率を高めることができる。更に、領域のデータが処理内で破損するか又はネットワーク伝送内で失われる場合、コーデックは、破損するか又は失われたデータに依存することなく、同じピクチャの他の領域を正しく符号化又は復号することができ、従って誤り耐性の機能を提供する。一部の映像コード化規格では、ピクチャを異なる種類の領域に分割することができる。例えば、H.265/HEVC及びH.266/VVCは、「スライス」及び「タイル」という2種類の領域を提供する。映像シーケンス100の様々なピクチャは、ピクチャを領域に分けるための様々な分割方式を有し得ることにも留意すべきである。
[051] 例えば、図1では、構造110が3つの領域114、116、及び118に分けられており、その境界が構造110内の実線として示されている。領域114は、4個の基本処理単位を含む。領域116及び118のそれぞれは、6個の基本処理単位を含む。図1の構造110の基本処理単位、基本処理副単位、及び領域は、例に過ぎず、本開示は、その実施形態を限定しないことに留意すべきである。
[052] 図2Aは、本開示の一部の実施形態による符号化プロセス200Aの一例の概略図を示す。符号器は、プロセス200Aに従って、映像シーケンス202を映像ビットストリーム228に符号化することができる。図1の映像シーケンス100と同様に、映像シーケンス202は、時系列順に配置されるピクチャ(「元のピクチャ」と呼ぶ)の組を含み得る。図1の構造110と同様に、映像シーケンス202のそれぞれの元のピクチャは、符号器によって基本処理単位、基本処理副単位、又は処理のための領域に分けられ得る。一部の実施形態では、符号器は、映像シーケンス202のそれぞれの元のピクチャに関する基本処理単位のレベルで、プロセス200Aを実行することができる。例えば、符号器は、プロセス200Aを反復的な方法で実行することができ、符号器は、プロセス200Aの1回の反復において基本処理単位を符号化することができる。一部の実施形態では、符号器は、映像シーケンス202のそれぞれの元のピクチャの領域(例えば、領域114~118)について、プロセス200Aを並列に実行することができる。
[053] 図2Aでは、符号器は、映像シーケンス202の元のピクチャの基本処理単位(「元のBPU」と呼ぶ)を予測段階204にフィードして、予測データ206及び予測されたBPU208を生成することができる。符号器は、元のBPUから、予測されたBPU208を減算して、残差BPU210を生成することができる。符号器は、残差BPU210を変換段階212及び量子化段階214にフィードして、量子化された変換係数216を生成することができる。符号器は、予測データ206及び量子化された変換係数216をバイナリコード化段階226にフィードして、映像ビットストリーム228を生成することができる。構成要素202、204、206、208、210、212、214、216、226及び228は、「順方向経路」と呼ぶことができる。プロセス200A中、符号器は、量子化段階214後、量子化された変換係数216を逆量子化段階218及び逆変換段階220にフィードして、再構築された残差BPU222を生成することができる。符号器は、再構築された残差BPU222を、予測されたBPU208に加えて、プロセス200Aの次の反復の予測段階204に使用される予測基準224を生成することができる。プロセス200Aの構成要素218、220、222及び224は、「再構築経路」と呼ぶことができる。再構築経路は、符号器及び復号器の両方が予測に同じ参照データを使用することを確実にするために使用され得る。
[054] 符号器は、プロセス200Aを反復的に実行して、(順方向経路内で)元のピクチャのそれぞれの元のBPUを符号化し、(再構築経路内で)元のピクチャの次の元のBPUを符号化するための予測された基準224を生成することができる。元のピクチャの全ての元のBPUを符号化した後、符号器は、映像シーケンス202内の次のピクチャの符号化に進むことができる。
[055] プロセス200Aを参照すると、符号器は、映像捕捉装置(例えば、カメラ)によって生成される映像シーケンス202を受信することができる。本明細書で使用する「受信(する)」という用語は、データを入力するために受信すること、入力すること、取得すること、取り出すこと、得ること、読み出すこと、アクセスすること、又は任意の方法の任意のアクションを指すことができる。
[056] 予測段階204では、現在の反復において、符号器が、元のBPU及び予測基準224を受信し、予測操作を行って予測データ206及び予測されたBPU208を生成することができる。予測基準224は、プロセス200A前の反復の再構築経路から生成され得る。予測段階204の目的は、予測データ206及び予測基準224から予測されたBPU208として元のBPUを再構築するために使用され得る予測データ206を抽出することにより、情報の冗長性を減らすことである。
[057] 理想的には、予測されたBPU208は、元のBPUと同一であり得る。しかし、理想的でない予測及び再構築操作により、予測されたBPU208は、概して、元のBPUと僅かに異なる。そのような差を記録するために、符号器は、予測されたBPU208を生成した後、それを元のBPUから減算して、残差BPU210を生成することができる。例えば、符号器は、予測されたBPU208のピクセルの値(例えば、グレースケール値又はRGB値)を元のBPUの対応するピクセルの値から減算することができる。元のBPUの対応するピクセルと、予測されたBPU208との間のかかる減算の結果、残差BPU210の各ピクセルは、残差値を有し得る。元のBPUと比較して、予測データ206及び残差BPU210は、より少ないビットを有し得るが、品質を著しく損なうことなく元のBPUを再構築するためにそれらを使用することができる。
[058] 残差BPU210を更に圧縮するために、変換段階212において、符号器は、残差BPU210を2次元「基底パターン」の組に分解することにより、残差BPU210の空間的冗長性を低減することができ、各基底パターンは、「変換係数」に関連する。基底パターンは、同じサイズ(例えば、残差BPU210のサイズ)を有することができる。それぞれの基底パターンは、残差BPU210の変動周波数(例えば、輝度変動周波数)成分を表すことができる。基底パターンの何れも、他の任意の基底パターンの任意の組み合わせ(例えば、線形結合)から再現することができない。換言すれば、分解は、残差BPU210の変動を周波数領域に分解することができる。かかる分解は、関数の離散フーリエ変換に類似し、基底パターンは、離散フーリエ変換の基底関数(例えば、三角関数)に類似し、変換係数は、基底関数に関連する係数に類似する。
[059] 様々な変換アルゴリズムが様々な基底パターンを使用することができる。例えば、離散コサイン変換、離散サイン変換等、変換段階212では、様々な変換アルゴリズムを使用することができる。変換段階212における変換は、可逆的である。即ち、符号器は、変換の逆操作(「逆変換」と呼ぶ)によって残差BPU210を復元することができる。例えば、残差BPU210のピクセルを復元するために、逆変換は、基底パターンの対応するピクセルの値を、関連するそれぞれの係数で乗算し、積を加算して加重和をもたらすことであり得る。映像コード化規格では、符号器及び復号器の両方が同じ変換アルゴリズム(従って同じ基底パターン)を使用することができる。従って、符号器は、変換係数のみを記録することができ、復号器は、符号器から基底パターンを受信することなく、変換係数から残差BPU210を再構築することができる。残差BPU210と比較して、変換係数の方が少ないビットを有し得るが、それらの変換係数は、品質を著しく損なうことなく残差BPU210を再構築するために使用され得る。従って、残差BPU210が更に圧縮される。
[060] 符号器は、量子化段階214において変換係数を更に圧縮することができる。変換プロセスでは、様々な基底パターンが様々な変動周波数(例えば、輝度変動周波数)を表すことができる。人間の目は、概して、低周波変動を認識することが得意であるため、符号器は、復号の際の著しい品質劣化を引き起こすことなく高周波変動の情報を無視することができる。例えば、量子化段階214において、符号器は、各変換係数を整数値(「量子化パラメータ」と呼ぶ)で除算し、商をその最近隣数に丸めることにより、量子化された変換係数216を生成することができる。かかる操作後、高周波基底パターンの一部の変換係数をゼロに変換することができ、低周波基底パターンの変換係数をより小さい整数に変換することができる。符号器は、ゼロ値の量子化された変換係数216を無視することができ、それにより変換係数が更に圧縮される。量子化プロセスも可逆的であり、量子化された変換係数216は、量子化の逆操作(「逆量子化」と呼ぶ)で変換係数に再構築することができる。
[061] 符号器は、丸め操作でかかる除算の剰余を無視するため、量子化段階214は、非可逆であり得る。典型的には、量子化段階214は、プロセス200Aで最大の情報損失に寄与し得る。情報損失が大きいほど、量子化された変換係数216が必要とし得るビットが少なくなる。情報損失の様々なレベルを得るために、符号器は、量子化パラメータの様々な値又は量子化プロセスの他の任意のパラメータを使用することができる。
[062] バイナリコード化段階226において、符号器は、例えば、エントロピーコード化、可変長コード化、算術コード化、ハフマンコード化、コンテキスト適応バイナリ算術コード化、又は他の任意の可逆若しくは非可逆圧縮アルゴリズム等のバイナリコード化技法を使用し、予測データ206及び量子化された変換係数216を符号化することができる。一部の実施形態では、予測データ206及び量子化された変換係数216に加えて、符号器は、例えば、予測段階204で使用される予測モード、予測操作のパラメータ、変換段階212の変換の種類、量子化プロセスのパラメータ(例えば、量子化パラメータ)、符号器制御パラメータ(例えば、ビットレート制御パラメータ)等の他の情報を、バイナリコード化段階226において符号化することができる。符号器は、バイナリコード化段階226の出力データを使用して映像ビットストリーム228を生成することができる。一部の実施形態では、映像ビットストリーム228をネットワーク伝送のために更にパケット化することができる。
[063] プロセス200Aの再構築経路を参照すると、逆量子化段階218では、符号器は、量子化された変換係数216に対して逆量子化を行って、再構築された変換係数を生成することができる。逆変換段階220では、符号器は、再構築された変換係数に基づいて、再構築された残差BPU222を生成することができる。符号器は、再構築された残差BPU222を、予測されたBPU208に加えて、プロセス200Aの次の反復で使用される予測基準224を生成することができる。
[064] 映像シーケンス202を符号化するために、プロセス200Aの他のバリエーションを使用できることに留意すべきである。一部の実施形態では、符号器がプロセス200Aの段階を異なる順序で実行することができる。一部の実施形態では、プロセス200Aの1つ又は複数の段階を単一の段階に組み合わせることができる。一部の実施形態では、プロセス200Aの単一の段階を複数の段階に分けることができる。例えば、変換段階212と量子化段階214とを単一の段階に組み合わせることができる。一部の実施形態では、プロセス200Aは、追加の段階を含み得る。一部の実施形態では、プロセス200Aは、図2Aの1つ又は複数の段階を省くことができる。
[065] 図2Bは、本開示の一部の実施形態による符号化プロセスの別の例200Bの概略図を示す。プロセス200Bは、プロセス200Aから修正され得る。例えば、プロセス200Bは、ハイブリッド映像コード化規格(例えば、H.26xシリーズ)に準拠する符号器によって使用され得る。プロセス200Aと比較して、プロセス200Bの順方向経路は、モード決定段階230を更に含み、予測段階204を空間的予測段階2042及び時間的予測段階2044に分ける。プロセス200Bの再構築経路は、ループフィルタ段階232及びバッファ234を追加で含む。
[066] 概して、予測技法は、空間的予測及び時間的予測の2つの種類に分類することができる。空間的予測(例えば、イントラピクチャ予測又は「イントラ予測」)は、現BPUを予測するために、同じピクチャ内の既にコード化された1つ又は複数の隣接BPUのピクセルを使用することができる。即ち、空間的予測における予測基準224は、隣接BPUを含み得る。空間的予測は、ピクチャの固有の空間的冗長性を減らすことができる。時間的予測(例えば、インターピクチャ予測又は「インター予測」)は、現BPUを予測するために、既にコード化された1つ又は複数のピクチャの領域を使用することができる。即ち、時間的予測における予測基準224は、コード化されたピクチャを含み得る。時間的予測は、ピクチャの固有の時間的冗長性を減らすことができる。
[067] プロセス200Bを参照すると、順方向経路において、符号器は、空間的予測段階2042及び時間的予測段階2044で予測操作を行う。例えば、空間的予測段階2042では、符号器は、イントラ予測を行うことができる。符号化されているピクチャの元のBPUに関して、予測基準224は、同じピクチャ内の(順方向経路内で)符号化され、(再構築経路内で)再構築されている1つ又は複数の隣接BPUを含み得る。符号器は、隣接BPUを外挿することにより、予測されたBPU208を生成することができる。外挿技法は、例えば、線形外挿又は線形補間、多項式外挿又は多項式補間等を含み得る。一部の実施形態では、予測されたBPU208のピクセルごとに対応するピクセルの値を外挿することによって等、符号器がピクセルレベルで外挿を行うことができる。外挿に使用される隣接BPUは、垂直方向(例えば、元のBPUの上)、水平方向(例えば、元のBPUの左)、対角線方向(例えば、元のBPUの左下、右下、左上又は右上)、又は使用される映像コード化規格内で規定される任意の方向等、様々な方向から元のBPUに対して位置し得る。イントラ予測では、予測データ206は、例えば、使用される隣接BPUの位置(例えば、座標)、使用される隣接BPUのサイズ、外挿のパラメータ、元のBPUに対する使用される隣接BPUの方向等を含み得る。
[068] 別の例では、時間的予測段階2044では、符号器は、インター予測を行うことができる。現ピクチャの元のBPUに関して、予測基準224は、(順方向経路内で)符号化され、(再構築経路内で)再構築されている1つ又は複数のピクチャ(「参照ピクチャ」と呼ぶ)を含み得る。一部の実施形態では、参照ピクチャがBPUごとに符号化され再構築され得る。例えば、符号器は、再構築された残差BPU222を、予測されたBPU208に加えて、再構築されたBPUを生成することができる。同じピクチャの全ての再構築されたBPUが生成されると、符号器は、参照ピクチャとして再構築されたピクチャを生成することができる。符号器は、参照ピクチャのある範囲(「探索窓」と呼ぶ)について一致領域を探すために「動き推定」の操作を行うことができる。参照ピクチャ内の探索窓の位置は、現ピクチャ内の元のBPUの位置に基づいて決定することができる。例えば、探索窓は、現ピクチャ内の元のBPUと参照ピクチャ内で同じ座標を有する位置に中心を置くことができ、所定の距離にわたって広げることができる。符号器が探索窓内で元のBPUと同様の領域を(例えば、pel再帰アルゴリズム、ブロックマッチングアルゴリズム等を使用することによって)識別すると、符号器は、その領域を一致領域として決定することができる。一致領域は、元のBPUと異なる(例えば、それよりも小さい、等しい、大きい又は異なる形状の)寸法を有し得る。参照ピクチャ及び現ピクチャは、(例えば、図1に示すように)タイムライン内で時間的に隔てられているため、時間が経つにつれて一致領域が元のBPUの位置に「移動する」と見なすことができる。符号器は、かかる動きの方向及び距離を「動きベクトル」として記録することができる。(例えば、図1のピクチャ106のような)複数の参照ピクチャが使用される場合、符号器は、参照ピクチャごとに一致領域を探し、その関連する動きベクトルを求めることができる。一部の実施形態では、符号器は、個々の一致する参照ピクチャの一致領域のピクセル値に重みを割り当てることができる。
[069] 動き推定は、例えば、平行移動、回転、拡大縮小等の様々な種類の動きを識別するために使用することができる。インター予測では、予測データ206は、例えば、一致領域の位置(例えば、座標)、一致領域に関連する動きベクトル、参照ピクチャの数、参照ピクチャに関連する重み等を含み得る。
[070] 予測されたBPU208を生成するために、符号器は、「動き補償」の操作を行うことができる。動き補償は、予測データ206(例えば、動きベクトル)及び予測基準224に基づいて、予測されたBPU208を再構築するために使用することができる。例えば、符号器は、動きベクトルに従って参照ピクチャの一致領域を動かすことができ、そのようにして、符号器は、現ピクチャの元のBPUを予測することができる。(例えば、図1のピクチャ106のような)複数の参照ピクチャが使用される場合、符号器は、個々の動きベクトルに従って参照ピクチャの一致領域を動かし、一致領域のピクセル値を平均することができる。一部の実施形態では、符号器が、個々の一致する参照ピクチャの一致領域のピクセル値に重みを割り当てた場合、符号器は、動かした一致領域のピクセル値の加重和を加えることができる。
[071] 一部の実施形態では、インター予測は、単方向又は双方向であり得る。単方向のインター予測は、現ピクチャに対して同じ時間的方向にある1つ又は複数の参照ピクチャを使用することができる。例えば、図1のピクチャ104は、参照ピクチャ(即ちピクチャ102)がピクチャ104に先行する単方向のインター予測ピクチャである。双方向のインター予測は、現ピクチャに対して両方の時間的方向にある1つ又は複数の参照ピクチャを使用することができる。例えば、図1のピクチャ106は、参照ピクチャ(即ちピクチャ104及び108)がピクチャ104に対して両方の時間的方向にある双方向のインター予測ピクチャである。
[072] プロセス200Bの順方向経路を引き続き参照すると、空間的予測段階2042及び時間的予測段階2044の後、モード決定段階230において、符号器は、プロセス200Bの現在の反復のための予測モード(例えば、イントラ予測又はインター予測の1つ)を選択することができる。例えば、符号器は、レート歪み最適化技法を実行することができ、かかる技法では、符号器は、候補予測モードのビットレート及び候補予測モード下の再構築された参照ピクチャの歪みに応じて、コスト関数の値を最小化するための予測モードを選択することができる。選択される予測モードに応じて、符号器は、対応する予測されたBPU208及び予測されたデータ206を生成することができる。
[073] プロセス200Bの再構築経路において、順方向経路内でイントラ予測モードが選択されている場合、予測基準224(例えば、現ピクチャ内で符号化され再構築されている現BPU)を生成した後、符号器は、後に使用するために(例えば、現ピクチャの次のBPUを外挿するために)空間的予測段階2042に予測基準224を直接フィードすることができる。順方向経路内でインター予測モードが選択されている場合、予測基準224(例えば、全てのBPUが符号化され再構築されている現ピクチャ)を生成した後、符号器は、ループフィルタ段階232に予測基準224をフィードすることができ、ループフィルタ段階232では、符号器は、予測基準224にループフィルタを適用して、インター予測によって引き起こされる歪み(例えば、ブロッキングアーティファクト)を減らすか又はなくすことができる。例えば、デブロッキング、サンプル適応オフセット、適応ループフィルタ等、符号器は、ループフィルタ段階232で様々なループフィルタ技法を適用することができる。ループフィルタされた参照ピクチャは、後に使用するために(例えば、映像シーケンス202の将来のピクチャのためのインター予測参照ピクチャとして使用するために)バッファ234(又は「復号されたピクチャバッファ」)内に記憶することができる。符号器は、時間的予測段階2044で使用するために1つ又は複数の参照ピクチャをバッファ234内に記憶することができる。一部の実施形態では、符号器は、量子化された変換係数216、予測データ206、及び他の情報と共に、ループフィルタのパラメータ(例えば、ループフィルタの強度)をバイナリコード化段階226で符号化することができる。
[074] 図3Aは、本開示の一部の実施形態による復号プロセス300Aの一例の概略図を示す。プロセス300Aは、図2Aの圧縮プロセス200Aに対応する解凍プロセスであり得る。一部の実施形態では、プロセス300Aは、プロセス200Aの再構築経路と同様であり得る。復号器は、プロセス300Aに従って映像ビットストリーム228を映像ストリーム304に復号することができる。映像ストリーム304は、映像シーケンス202と非常に類似し得る。しかし、圧縮及び解凍プロセス(例えば、図2A~図2Bの量子化段階214)における情報損失により、概して、映像ストリーム304は、映像シーケンス202と同一ではない。図2A~図2Bのプロセス200A及び200Bと同様に、復号器は、映像ビットストリーム228内に符号化される各ピクチャについて、基本処理単位(BPU)のレベルにおいてプロセス300Aを実行することができる。例えば、復号器は、プロセス300Aを反復的な方法で実行することができ、復号器は、プロセス300Aの1回の反復において基本処理単位を復号することができる。一部の実施形態では、復号器は、映像ビットストリーム228内に符号化される各ピクチャの領域(例えば、領域114~118)についてプロセス300Aを並列に実行することができる。
[075] 図3Aでは、復号器は、符号化されたピクチャの基本処理単位(「符号化されたBPU」と呼ぶ)に関連する映像ビットストリーム228の一部を、バイナリ復号段階302にフィードすることができる。バイナリ復号段階302では、復号器は、その部分を予測データ206及び量子化された変換係数216に復号することができる。復号器は、量子化された変換係数216を逆量子化段階218及び逆変換段階220にフィードして、再構築された残差BPU222を生成することができる。復号器は、予測データ206を予測段階204にフィードして、予測されたBPU208を生成することができる。復号器は、再構築された残差BPU222を、予測されたBPU208に加えて、予測された基準224を生成することができる。一部の実施形態では、予測された基準224がバッファ(例えば、コンピュータメモリ内の復号されたピクチャバッファ)内に記憶され得る。復号器は、プロセス300Aの次の反復内で予測操作を行うための予測された基準224を予測段階204にフィードすることができる。
[076] 復号器は、プロセス300Aを反復的に実行して、符号化されたピクチャの各符号化されたBPUを復号し、符号化されたピクチャの次の符号化されたBPUを符号化するための、予測された基準224を生成することができる。符号化されたピクチャの全ての符号化されたBPUを復号した後、復号器は、表示するためにピクチャを映像ストリーム304に出力し、映像ビットストリーム228内の次の符号化されたピクチャの復号に進むことができる。
[077] バイナリ復号段階302では、復号器は、符号器が使用したバイナリコード化技法(例えば、エントロピーコード化、可変長コード化、算術コード化、ハフマンコード化、コンテキスト適応バイナリ算術コード化又は他の任意の可逆圧縮アルゴリズム)の逆操作を行うことができる。一部の実施形態では、予測データ206及び量子化された変換係数216に加えて、復号器は、例えば、予測モード、予測操作のパラメータ、変換の種類、量子化プロセスのパラメータ(例えば、量子化パラメータ)、符号器制御パラメータ(例えば、ビットレート制御パラメータ)等の他の情報を、バイナリ復号段階302において復号することができる。一部の実施形態では、映像ビットストリーム228がネットワーク上においてパケット単位で伝送される場合、復号器は、映像ビットストリーム228をパケット化解除してから、それをバイナリ復号段階302にフィードすることができる。
[078] 図3Bは、本開示の一部の実施形態による復号プロセスの別の例300Bの概略図を示す。プロセス300Bは、プロセス300Aから修正され得る。例えば、プロセス300Bは、ハイブリッド映像コード化規格(例えば、H.26xシリーズ)に準拠する復号器によって使用され得る。プロセス300Aと比較して、プロセス300Bは、予測段階204を空間的予測段階2042及び時間的予測段階2044に更に分け、ループフィルタ段階232及びバッファ234を追加で含む。
[079] プロセス300Bでは、復号対象の符号化されたピクチャ(「現ピクチャ」と呼ぶ)の符号化された基本処理単位(「現BPU」と呼ぶ)に関して、復号器によってバイナリ復号段階302から復号される予測データ206は、現BPUを符号化するために何れの予測モードが符号器によって使用されたかに応じて、様々な種類のデータを含み得る。例えば、現BPUを符号化するためにイントラ予測が符号器によって使用された場合、予測データ206は、イントラ予測、イントラ予測操作のパラメータ等を示す予測モードインジケータ(例えば、フラグ値)を含み得る。イントラ予測操作のパラメータは、例えば、基準として使用される1つ又は複数の隣接BPUの位置(例えば、座標)、隣接BPUのサイズ、外挿のパラメータ、元のBPUに対する隣接BPUの方向等を含み得る。別の例では、現BPUを符号化するためにインター予測が符号器によって使用された場合、予測データ206は、インター予測、インター予測操作のパラメータ等を示す予測モードインジケータ(例えば、フラグ値)を含み得る。インター予測操作のパラメータは、例えば、現BPUに関連する参照ピクチャの数、参照ピクチャにそれぞれ関連する重み、それぞれの参照ピクチャ内の1つ又は複数の一致領域の位置(例えば、座標)、一致領域にそれぞれ関連する1つ又は複数の動きベクトル等を含み得る。
[080] 予測モードインジケータに基づき、復号器は、空間的予測段階2042で空間的予測(例えば、イントラ予測)を行うか、又は時間的予測段階2044で時間的予測(例えば、インター予測)を行うかを決めることができる。かかる空間的予測又は時間的予測の実行の詳細は、図2Bに示されており、以下で繰り返さない。かかる空間的予測又は時間的予測を行った後、復号器は、予測されたBPU208を生成することができる。図3Aに記載したように、復号器は、予測されたBPU208と、再構築された残差BPU222とを加えて、予測基準224を生成することができる。
[081] プロセス300Bでは、復号器は、プロセス300Bの次の反復内で予測操作を行うための、予測された基準224を、空間的予測段階2042又は時間的予測段階2044にフィードすることができる。例えば、現BPUが空間的予測段階2042においてイントラ予測を使用して復号される場合、予測基準224(例えば、復号された現BPU)を生成した後、復号器は、後に使用するために(例えば、現ピクチャの次のBPUを外挿するために)空間的予測段階2042に予測基準224を直接フィードすることができる。現BPUが時間的予測段階2044においてインター予測を使用して復号される場合、予測基準224(例えば、全てのBPUが復号されている参照ピクチャ)を生成した後、符号器は、ループフィルタ段階232に予測基準224をフィードして歪み(例えば、ブロッキングアーティファクト)を減らすか又はなくすことができる。復号器は、図2Bに記載した方法で予測基準224にループフィルタを適用することができる。ループフィルタされた参照ピクチャは、後に使用するために(例えば、映像ビットストリーム228の将来の符号化ピクチャのためのインター予測参照ピクチャとして使用するために)バッファ234(例えば、コンピュータメモリ内の復号されたピクチャバッファ)内に記憶することができる。復号器は、時間的予測段階2044で使用するために1つ又は複数の参照ピクチャをバッファ234内に記憶することができる。一部の実施形態では、現BPUを符号化するためにインター予測が使用されたことを予測データ206の予測モードインジケータが示す場合、予測データは、ループフィルタのパラメータ(例えば、ループフィルタの強度)を更に含むことができる。
[082] 図4は、本開示の一部の実施形態による、映像を符号化又は復号するための機器400の一例のブロック図である。図4に示すように、機器400は、プロセッサ402を含み得る。プロセッサ402が本明細書に記載の命令を実行するとき、機器400は、映像を符号化又は復号するための専用マシンになり得る。プロセッサ402は、情報を操作又は処理することができる任意の種類の回路であり得る。例えば、プロセッサ402は、任意の数の中央処理装置(「CPU」)、グラフィックス処理装置(「GPU」)、ニューラル処理ユニット(「NPU」)、マイクロコントローラユニット(「MCU」)、光プロセッサ、プログラム可能論理コントローラ、マイクロコントローラ、マイクロプロセッサ、デジタル信号プロセッサ、アイピー(IP)コア、プログラム可能論理アレイ(PLA)、プログラム可能アレイ論理(PAL)、汎用アレイ論理(GAL)、複合プログラム可能論理装置(CPLD)、書換可能ゲートアレイ(FPGA)、システムオンチップ(SoC)、特定用途向け集積回路(ASIC)等の任意の組み合わせを含み得る。一部の実施形態では、プロセッサ402は、単一の論理構成要素としてグループ化されるプロセッサの組であり得る。例えば、図4に示すように、プロセッサ402は、プロセッサ402a、プロセッサ402b及びプロセッサ402nを含む複数のプロセッサを含み得る。
[083] 機器400は、データ(例えば、命令、コンピュータコード、中間データ等の組)を記憶するように構成されるメモリ404も含み得る。例えば、図4に示すように、記憶データは、プログラム命令(例えば、プロセス200A、200B、300A又は300B内の段階を実装するためのプログラム命令)及び処理用データ(例えば、映像シーケンス202、映像ビットストリーム228、又は映像ストリーム304)を含み得る。プロセッサ402は、プログラム命令及び処理用データに(例えば、バス410を介して)アクセスし、プログラム命令を実行して処理用データに対する操作又は処理を行うことができる。メモリ404は、高速ランダムアクセス記憶装置又は不揮発性記憶装置を含み得る。一部の実施形態では、メモリ404は、任意の数のランダムアクセスメモリ(RAM)、読取専用メモリ(ROM)、光学ディスク、磁気ディスク、ハードドライブ、ソリッドステートドライブ、フラッシュドライブ、セキュリティデジタル(SD)カード、メモリスティック、コンパクトフラッシュ(登録商標)(CF)カード等の任意の組み合わせを含み得る。メモリ404は、単一の論理構成要素としてグループ化される(図4には不図示の)メモリ群でもあり得る。
[084] 内蔵バス(例えば、CPUメモリバス)、外部バス(例えば、ユニバーサルシリアルバスポート、周辺機器コンポーネント相互接続エクスプレスポート)等のバス410は、機器400内の構成要素間でデータを転送する通信装置であり得る。
[085] 曖昧さを招くことなく説明を簡単にするために、本開示では、プロセッサ402及び他のデータ処理回路をまとめて「データ処理回路」と呼ぶ。データ処理回路は、完全にハードウェアとして又はソフトウェア、ハードウェア、若しくはファームウェアの組み合わせとして実装することができる。加えて、データ処理回路は、単一の独立したモジュールであり得るか、又は機器400の他の任意の構成要素内に完全に若しくは部分的に組み合わされ得る。
[086] 機器400は、ネットワーク(例えば、インターネット、イントラネット、ローカルエリアネットワーク、モバイル通信ネットワーク等)との有線通信又は無線通信を提供するためのネットワークインタフェース406を更に含み得る。一部の実施形態では、ネットワークインタフェース406は、任意の数のネットワークインタフェースコントローラ(NIC)、無線周波数(RF)モジュール、トランスポンダ、トランシーバ、モデム、ルータ、ゲートウェイ、有線ネットワークアダプタ、無線ネットワークアダプタ、Bluetoothアダプタ、赤外線アダプタ、近距離無線通信(「NFC」)アダプタ、セルラネットワークチップ等の任意の組み合わせを含み得る。
[087] 一部の実施形態では、1つ又は複数の周辺装置への接続を提供するための周辺装置インタフェース408を任意選択的に機器400が更に含み得る。図4に示すように、周辺装置は、これのみに限定されないが、カーソル制御装置(例えば、マウス、タッチパッド又はタッチスクリーン)、キーボード、ディスプレイ(例えば、ブラウン管ディスプレイ、液晶ディスプレイ又は発光ダイオードディスプレイ)、映像入力装置(例えば、映像アーカイブに結合されるカメラ又は入力インタフェース)等を含み得る。
[088] 映像コーデック(例えば、プロセス200A、200B、300A、又は300Bを実行するコーデック)は、機器400内の任意のソフトウェア又はハードウェアモジュールの任意の組み合わせとして実装できることに留意すべきである。例えば、プロセス200A、200B、300A、又は300Bの一部の又は全ての段階は、メモリ404内にロード可能なプログラム命令等の、機器400の1つ又は複数のソフトウェアモジュールとして実装され得る。別の例では、プロセス200A、200B、300A、又は300Bの一部の又は全ての段階は、専用データ処理回路(例えば、FPGA、ASIC、NPU等)等の、機器400の1つ又は複数のハードウェアモジュールとして実装され得る。
[089] 図5は、本開示の一部の実施形態による、例示的なクロマスケーリングによるルママッピング(LMCS)プロセス500の概略図を示す。例えば、プロセス500は、ハイブリッド映像コード化規格(例えば、H.26xシリーズ)に準拠する復号器によって使用され得る。LMCSは、図2Bのループフィルタ232の前に適用される新たな処理ブロックである。LMCSは、リシェーパと呼ぶこともできる。
[090] LMCSプロセス500は、適応区分線形モデルに基づくルマ成分値のインループマッピング及びクロマ成分のルマ依存クロマ残差スケーリングを含み得る。
[091] 図5に示すように、適応区分線形モデルに基づくルマ成分値のインループマッピングは、順方向マッピング段階518及び逆マッピング段階508を含み得る。クロマ成分のルマ依存クロマ残差スケーリングは、クロマスケーリング520を含み得る。
[092] マッピング前又は逆マッピング後のサンプル値は、元の領域内のサンプルと呼ぶことができ、マッピング後及び逆マッピング前のサンプル値は、マップ領域内のサンプルと呼ぶことができる。LMCSが有効化される場合、プロセス500内の一部の段階は、元の領域ではなくマップ領域内で行うことができる。順方向マッピング段階518及び逆マッピング段階508は、SPSフラグを使用してシーケンスレベルで有効化/無効化できることが理解されるであろう。
[093] 図5に示すように、Q-1&T-1段階504、再構築506、及びイントラ予測514は、マップ領域内で実行される。例えば、Q-1&T-1段階504は、逆量子化及び逆変換を含むことができ、再構築506は、ルマ予測とルマ残差との加算を含むことができ、イントラ予測508は、ルマイントラ予測を含み得る。
[094] ループフィルタ510、動き補償段階516及び530、イントラ予測段階528、再構築段階522、並びに復号されたピクチャバッファ(DPB)512及び526は、元の(即ち非マップ)領域内で実行される。一部の実施形態では、ループフィルタ510は、デブロッキング、適応ループフィルタ(ALF)、及びサンプル適応オフセット(SAO)を含むことができ、再構築段階522は、クロマ予測とクロマ残差との加算を含むことができ、DPB512及び526は、復号されたピクチャを参照ピクチャとして記憶することができる。
[095] 一部の実施形態では、区分線形モデルによるルママッピングを使用して映像コンテンツを処理するための方法を適用することができる。
[096] ルマ成分のインループマッピングは、ダイナミックレンジにわたるコード語の再配分により、入力映像の信号統計を調節して圧縮効率を改善することができる。ルママッピングは、順方向マッピング関数「FwdMap」及び対応する逆マッピング関数「InvMap」を利用する。「FwdMap」関数は、16個の等しい区分と共に区分線形モデルを使用して信号化される。「InvMap」関数は、信号化される必要がなく、代わりに「FwdMap」関数から導出される。
[097] 区分線形モデルの信号化を図6の表1及び図7の表2に示し、後のVVCのドラフト5では、区分線形モデルの信号化が図8の表3及び図9の表4にあるように変更される。表1及び表3は、タイルグループヘッダ及びスライスヘッダの構文構造を示す。標的タイルグループ又は標的スライス内にルママッピングモデルがあるかどうかを示すために、リシェーパモデルパラメータ存在フラグが最初に信号化され得る。現タイルグループ/スライス内にルママッピングモデルがある場合、図7の表2及び図9の表4に示す構文要素を使用し、標的タイルグループ又は標的スライスに対応する区分線形モデルパラメータをtile_group_reshaper_model()/lmcs_data()内で信号化することができる。区分線形モデルは、入力信号のダイナミックレンジを16個の等しい区分に分割する。各区分について、区分に割り当てられるコード語の数を使用して区分の線形マッピングパラメータを表すことができる。10ビット入力の一例では、入力の16個の区分のそれぞれは、その区分に割り当てられる64のコード語をデフォルトで有し得る。スケール因子を計算し、その区分についてマッピング関数を適宜調節するために、信号化されるコード語の数を使用することができる。図7の表2及び図9の表4は、表2に見られる「reshaper_model_min_bin_idx」及び「reshaper_model_delta_max_bin_idx」、表4に見られる「lmcs_min_bin_idx」及び「lmcs_delta_max_bin_idx」等の信号化されるコード語の数にわたる最小インデックス及び最大インデックスも包含的に定める。区分インデックスが「reshaper_model_min_bin_idx」若しくは「lmcs_min_bin_idx」よりも小さい場合又は「15-reshaper_model_max_bin_idx」若しくは「15-lmcs_delta_max_bin_idx」よりも大きい場合、その区分のためのコード語の数は、信号化されず、ゼロであると推論される。換言すれば、その区分にコード語が割り当てられず、マッピング/スケーリングが適用されない。
[098] 図5に示すLMCSプロセスが標的タイルグループ又は標的スライスに適用されるかどうかを示すために、タイルグループヘッダレベル又はスライスヘッダレベルにおいて別のリシェーパイネーブルフラグ(例えば、「tile_group_reshaper_enable_flag」又は「slice_lmcs_enabled_flag」)が信号化され得る。リシェーパが標的タイルグループ又は標的スライスについて有効化され、標的タイルグループ又は標的スライスがデュアルツリー分割を使用しない場合、クロマスケーリングが標的タイルグループ又は標的スライスについて有効化されるかどうかを示すために更なるクロマスケーリングイネーブルフラグが信号化され得る。デュアルツリー分割は、クロマセパレートツリーとも呼び得ることが理解されるであろう。以下では、本開示は、デュアルツリー分割をより詳細に説明する。
[099] 区分線形モデルは、表2又は表4内の信号化される構文要素に基づいて以下のように構築することができる。「FwdMap」区分線形モデルのi番目の区分(i=0...15)は、2つの入力ピボットポイントInputPivot[]及び2つのマップされたピボットポイントMappedPivot[]によって定めることができる。マップされたピボットポイントMappedPivot[]は、「FwdMap」区分線形モデルの出力であり得る。例示的な入力映像のビット深度を10ビットであると仮定すると、InputPivot[]及びMappedPivot[]は、信号化される構文に基づいて以下のように計算することができる。ビット深度は、10ビットと異なり得ることが理解されるであろう。
a)表2の構文要素を使用:
1)OrgCW=64
2)i=0:16ではInputPivot[i]=i*OrgCW
3)i=reshaper_model_min_bin_idx: reshaper_model_max_bin_idxではSignaledCW[i]=OrgCW+(1¬2*reshape_model_bin_delta_sign_CW[i])*reshape_model_bin_delta_abs_CW[i];
4)i=0:16ではMappedPivot[i]を以下のように計算する:
MappedPivot[0]=0;
(i=0; i<16; i++)では
MappedPivot[i+1]=MappedPivot[i]+SignaledCW[i]
b)表4の構文要素を使用:
1)OrgCW=64
2)i=0:16ではInputPivot[i]=i*OrgCW
3)i=lmcs_min_bin_idx: lmcsl_max_bin_idxではSignaledCW[i]=OrgCW+(1¬2*lmcs_bin_delta_sign_CW[i])*lmcsl_bin_delta_abs_CW[i];
4)i=0:16ではMappedPivot[i]を以下のように計算する:
MappedPivot[0]=0;
(i=0; i<16; i++)では
MappedPivot[i+1]=MappedPivot[i]+SignaledCW[i]
[100] 逆マッピング関数「InvMap」は、InputPivot[]及びMappedPivot[]によって定められる。「FwdMap」と異なり、「InvMap」区分線形モデルでは、各区分の2つの入力ピボットポイントがMappedPivot[]によって定められ、2つの出力ピボットポイントがInputPivot[]によって定められる。このようにして、「FwdMap」の入力は、等しい区分に分割されるが、「InvMap」の入力が等しい区分に分割されることは、保証されない。
[101] 図5に示すように、インターコード化ブロックでは、動き補償予測をマップ領域内で実行することができる。換言すれば、動き補償予測516後、DPB内内の参照信号に基づいてYpredを計算し、元の領域内のルマ予測ブロックをマップ領域にマップするために「FwdMap」関数518を適用することができる(Y’pred=FwdMap(Ypred))。イントラコード化されたブロックでは、イントラ予測内で使用された参照サンプルがマップ領域内に既にあるため、「FwdMap」関数が適用されない。再構築されたブロック506後、Yrを計算することができる。マップ領域内の再構築されたルマ値を元の領域内の再構築されたルマ値に変換して戻すために、「InvMap」関数508を適用することができる(
)。「InvMap」関数508は、イントラコード化されたルマブロック及びインターコード化されたルマブロックの両方に適用することができる。
[102] ルママッピングプロセス(順方向又は逆マッピング)は、参照表(LUT)を使用して又はその場での計算を使用して実施することができる。LUTが使用される場合、タイルグループレベル又はスライスレベルでの使用のために、「FwdMapLUT[]」及び「InvMapLUT[]」の表を予め計算し、予め記憶しておくことができ、順方向マッピング及び逆マッピングを単純にFwdMap(Ypred)=FwdMapLUT[Ypred]及びInvMap(Yr)=InvMapLUT[Yr]としてそれぞれ実施することができる。
[103] 代わりに、その場での計算を使用することができる。順方向マッピング関数「FwdMap」を例に取る。ルマサンプルが属する区分を特定するために、サンプル値を(10ビットの映像を仮定して16個の等しい区分に対応する)6ビット右シフトして区分インデックスを得ることができる。次いで、その区分の線形モデルパラメータを取得し、その場で適用してマップされたルマ値を計算する。「FwdMap」関数は、以下のように評価される。
Y’pred=FwdMap(Ypred)=((b2-b1)/(a2-a1))*(Ypred-a1)+b1
ここで、「i」は、区分インデックスであり、a1は、InputPivot[i]であり、a2は、InputPivot[i+1]であり、b1は、MappedPivot[i]であり、b2は、MappedPivot[i+1]である。
[104] 「InvMap」関数は、マップ領域内の区分が等しいサイズであることが保証されないため、サンプル値が属する区分を見出すときに単純な右ビットシフトの代わりに条件付きチェックを適用しなければならないことを除き、同様の方法でその場で計算することができる。
[105] 一部の実施形態では、ルマ依存クロマ残差スケーリングを使用して映像コンテンツを処理するための方法が提供され得る。
[106] クロマ残差スケーリングは、ルマ信号と、ルマ信号に対応するクロマ信号との間の相互作用を補償するために使用することができる。クロマ残差スケーリングが有効化されるかどうかも、タイルグループレベル又はスライスレベルで信号化され得る。図6の表1及び図8の表3に示すように、ルママッピングが有効化される場合及びデュアルツリー分割が現タイルグループに適用されない場合、ルマ依存クロマ残差スケーリングが有効化されるかどうかを示すために追加のフラグ(例えば、「tile_group_reshaper_chroma_residual_scale_flag」又は「slice_chroma_residual_scale_flag」)が信号化され得る。ルママッピングが使用されない場合又はデュアルツリー分割が標的タイルグループ(又は標的スライス)内で使用される場合、ルマ依存クロマ残差スケーリングがそれに応じて無効化され得る。更に、ルマ依存クロマ残差スケーリングは、その領域が4以下のクロマブロックについて無効化され得る。
[107] クロマ残差スケーリングは、クロマ信号に対応する(イントラコード化されたブロック及びインターコード化されたブロックの両方に関する)ルマ予測ブロックの平均値に依存する。ルマ予測ブロックの平均「avgY’」は、以下の式を使用して求めることができる。
[108] 以下のステップを使用して、クロマ残差スケーリングのためのクロマスケール因子の値「CScaleInv」を求めることができる。
1)avgY’が属する区分線形モデルのインデックスYIdxを、InvMap関数に基づいて見つける。
2)CScaleInv=cScaleInv[YIdx]が成立し、ここで、cScaleInv[]は、例えば、16個の区分を有する予め計算されたLUTである。
[109] 一部の実施形態において、LMCSの方法では、予め計算されたLUTであり、iが0~15の範囲内である「cScaleInv[i]」は、64エントリ静的LUT「ChromaResidualScaleLut」及び信号化されるコード語「SignaledCW[i]」の値に基づいて以下のように導出することができる。
ChromaResidualScaleLut[64]={ 16384, 16384, 16384, 16384, 16384, 16384, 16384, 8192, 8192, 8192, 8192, 5461, 5461, 5461, 5461, 4096, 4096, 4096, 4096, 3277, 3277, 3277, 3277, 2731, 2731, 2731, 2731, 2341, 2341, 2341, 2048, 2048, 2048, 1820, 1820, 1820, 1638, 1638, 1638, 1638, 1489, 1489, 1489, 1489, 1365, 1365, 1365, 1365, 1260, 1260, 1260, 1260, 1170, 1170, 1170, 1170, 1092, 1092, 1092, 1092, 1024, 1024, 1024, 1024};
shiftC=11
- (SignaledCW[i]==0)が成立する場合、
cScaleInv[i]=(1<<shiftC)
- さもなければ、
cScaleInv[i]=ChromaResidualScaleLut[(SignaledCW[i]>>1)-1]
[110] 一例として、入力が10ビットであり、静的LUT「ChromaResidualScaleLut[]」が64個のエントリを含み、信号化されるコード語「SignaledCW[]」が[0,128]の範囲内にあると仮定する。従って、クロマスケール因子LUTの「cScaleInv[]」を構築するために、2による除算(又は1による右シフト)を使用する。LUTの「cScaleInv[]」は、タイルグループ(又はスライスレベル)で構築され得る。
[111] 現ブロックがイントラ、CIIP、又はイントラブロックコピー(IBC)モードを使用してコード化できる場合、avgY’は、イントラ、CIIP、又はIBC予測ルマ値の平均として求めることができる。さもなければ、avgY’は、順方向マップされるインター予測ルマ値(即ち図3のY’pred)の平均として計算される。IBCは、現ピクチャ参照(CPR)モードと呼ぶこともできる。サンプルに基づいて実行されるルママッピングと異なり、「CScaleInv」は、全クロマブロックの定数値である。「CScaleInv」を用いてクロマ残差スケーリングを以下のように復号器側で適用することができる。
[112] ここで、
は、現ブロックの再構築されたクロマ残差である。符号器側では、順方向クロマ残差スケーリング(変換され量子化される前)を以下のように行う:Encoder side: CResScale=CRes*CScale=CRes/CScaleInv。
[113] 一部の実施形態では、クロスコンポーネント線形モデル予測を使用して映像コンテンツを処理するための方法が提供され得る。
[114] クロスコンポーネントの冗長性を減らすために、クロスコンポーネント線形モデル(CCLM)予測モードを使用することができる。CCLMでは、以下のように線形モデルを使用することにより、同じコード化単位(CU)の再構築されたルマサンプルに基づいてクロマサンプルが予測される。
predC(i,j)=α・recL’(i,j)+β
[115] ここで、predC(i,j)は、CU内の予測クロマサンプルを表し、recL(i,j)は、同じCUのダウンサンプルされた再構築されたルマサンプルを表す。
[116] 線形モデルパラメータα及びβは、2つのサンプル位置からのルマ値とクロマ値との間の関係に基づいて導出される。2つのサンプル位置は、ダウンサンプルされた隣接ルマサンプルの組のうち、最大ルマサンプル値を有する第1のルマサンプル位置及び最小ルマサンプル値を有する第2のルマサンプル位置、並びにそれらの対応するクロマサンプルを含むことができる。線形モデルパラメータα及びβは、以下の式に従って得られる。
β=Yb-α・Xb
[117] ここで、Ya及びXaは、第1のルマサンプル位置のルマ値及びクロマ値をそれぞれ表す。Xb及びYbは、第2のルマサンプル位置のルマ値及びクロマ値をそれぞれ表す。
[118] 図10は、本開示の一部の実施形態によるCCLMモードに関与するサンプル位置の一例を示す。
[119] パラメータαの計算は、参照表を用いて実装することができる。表を記憶するのに必要なメモリを減らすために、diff値(最大値と最小値との差)及びパラメータαを指数表現によって表す。例えば、diffは、4ビットの有効部分及び指数によって近似される。その結果、1/diffのための表は、以下のように有効数字部の16個の値についての16個の要素に減らされる。
DivTable [] = {0, 7, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 1, 1, 0}
[120] 「DivTable []」の表は、計算の複雑さを減らし、必要な表を記憶するのに必要なメモリサイズを減らすこともできる。
[121] 線形モデル係数を計算するために上部の位置及び左側の位置を一緒に使用できることに加えて、それらの位置は、LM_Aモード及びLM_Lモードと呼ばれる他の2つのLMモード内で代わりに使用することもできる。
[122] LM_Aモードでは、線形モデル係数を計算するために、上部の位置にあるサンプルのみを使用する。より多くのサンプルを取得するために、上部の位置は、(W+H)サンプルを範囲に含まれように拡張することができる。LM_Lモードでは、線形モデル係数を計算するために、左側の位置にあるサンプルのみを使用する。より多くのサンプルを得るために、左側の位置は、(H+W)サンプルを範囲に含まれるように拡張することができる。
[123] 非正方形ブロックでは、上のテンプレートをW+Wに拡張し、左側のテンプレートをH+Hに拡張する。
[124] 4:2:0の映像シーケンスに関してクロマサンプル位置をマッチするために、2種類のダウンサンプリングフィルタをルマサンプルに適用して、2対1のダウンサンプリング比を水平方向及び垂直方向の両方に実現することができる。ダウンサンプリングフィルタの選択は、SPSレベルフラグによって指定され得る。「タイプ0」及び「タイプ2」コンテンツにそれぞれ対応する2つのダウンサンプリングフィルタは、以下の通りである。
[125] 上部の参照ラインがCTUの境界にある場合、ダウンサンプルされたルマサンプルを計算するために、ルマライン(イントラ予測における一般的なラインバッファ)を1つのみ使用することが理解されるであろう。
[126] このパラメータの計算は、単に符号器の探索操作としてではなく、復号プロセスの一環として行うことができる。その結果、α及びβの値を復号器に伝えるために構文が使用されない。α及びβのパラメータは、クロマ成分のそれぞれについて別々に計算される。
[127] クロマイントラモードコード化では、合計8個のイントラモードが許可され得る。それらのモードは、5個の従来のイントラモードと、3個のクロスコンポーネント線形モデルモード(例えば、CCLM、LM_A及びLM_L)とを含む。CCLMが有効化される場合にクロマモードを信号化し、導出するためのプロセスを、図9の表5に示す。クロマブロックのクロマモードコード化は、クロマブロックに対応するルマブロックのイントラ予測モードに依存し得る。Iスライス内でルマ成分及びクロマ成分のための別個のブロック分割構造が有効化されるため(以下で説明する)、1つのクロマブロックが複数のルマブロックに対応し得る。従って、クロマ導出モード(DM)では、現クロマブロックの中心位置を覆う、対応するルマブロックのイントラ予測モードが継承される。
[128] 一部の実施形態では、デュアルツリー分割を使用して映像コンテンツを処理するための方法が提供され得る。
[129] VVCのドラフトでは、コード化ツリー方式は、ルマ及びクロマが別個のブロックツリー分割を有する能力をサポートする。これは、デュアルツリー分割とも呼ばれる。VVCのドラフトでは、デュアルツリー分割の信号化は図12の表6)及び図13の表7に示される。後のVVCのドラフト5では、デュアルツリー分割は、図14の表8及び図15の表9)にあるように信号化される。SPS内で信号化されるシーケンスレベル制御フラグ(例えば、「qtbtt_dual_tree_intra_flag」)がオンにされ、標的タイルグループ(又は標的スライス)がイントラコード化される場合、ブロック分割情報をまずルマについて、次いでクロマについて、別々に信号化することができる。インターコード化されるタイルグループ/スライス(例えば、P及びBタイルグループ/スライス)では、デュアルツリー分割が許可されない。別個のブロックツリーモードが適用される場合、図13の表7に示すように、ルマコード化ツリーブロック(CTB)が第1のコード化ツリー構造によってCUに分割され、クロマCTBが第2のコード化ツリー構造によってクロマCUに分割される。
[130] ルマ及びクロマブロックが異なる分割を有することが許可される場合、様々な色成分間の依存性を有するコード化ツールに関して問題が生じ得る。例えば、LMCSが適用される場合、標的クロマブロックに適用されるスケール因子を決定するために、標的クロマブロックに対応するルマブロックの平均値を使用することができる。デュアルツリー分割が使用される場合、ルマブロックの平均値を決定することが全CTUのレイテンシを招き得る。例えば、CTUのルマブロックが垂直に1回分割され、CTUのクロマブロックが水平に1回分割される場合、CTUの第1のクロマブロックが復号可能である前にCTUのルマブロックの両方が平均値を計算するために復号される。VVCでは、CTUがルマサンプルの単位で128x128もの大きさである可能性があり、クロマブロックを復号するレイテンシが大幅に増加することを引き起こす。従って、VVCのドラフト4及びドラフト5は、デュアルツリー分割と、ルマ依存クロマスケーリングとの組み合わせを禁止することができる。標的タイルグループ(又は標的スライス)についてデュアルツリー分割が有効化される場合、クロマスケーリングを強制的にオフにすることができる。LMCSのルママッピング部分は、ルマ成分に対してのみ影響し、色成分を横断する依存性の問題を有さないため、デュアルツリー分割でも引き続き許可されることに留意されたい。
[131] より優れたコード化効率を実現するために色成分間の依存性に依拠するコード化ツールの別の例は、上記で論じたクロスコンポーネント線形モデル(CCLM)と呼ばれる。CCLMでは、隣接するルマ及びクロマ再構築されたサンプルを使用してクロスコンポーネントパラメータを導出することができる。そのクロスコンポーネントパラメータを標的クロマブロックの対応する再構築されたルマサンプルに適用して、クロマ成分のための予測子を導出することができる。デュアルツリー分割が使用される場合、ルマ及びクロマ分割が位置合わせされることは、保証されない。従って、CCLMに使用されるサンプルを含む対応するルマブロックの全てが再構築されるまで、CCLMをクロマブロックに対して開始することができない。
[132] 図16A~図16Bは、本開示の一部の実施形態による例示的なクロマツリー分割及び例示的なルマツリー分割を示す。図16Aは、クロマブロック1600の例示的な分割構造を示す。図16Bは、図16のクロマブロック1600に対応するルマブロック1610の例示的な分割構造を示す。図16Aでは、クロマブロック1600が4つのサブブロックに4分割されており、左下のサブブロックが4つのサブブロックに更に4分割されており、グリッドパターンを有するブロックは、予測しようとする現ブロックである。図16Bでは、ルマブロック1610が2つのサブブロックに水平に2分割されており、グリッドパターンを有する領域は、予測しようとする標的クロマブロックに対応する領域である。CCLMパラメータを導出するために、無地の円で表す隣接する再構築されたサンプルの値が必要である。従って、下部のルマブロックの再構築が終了するまで標的クロマブロックの予測を開始することができず、これは、大きいレイテンシを生じさせる。
[133] 一部の実施形態では、仮想パイプラインデータ単位を使用して映像コンテンツを処理するための方法が提供され得る。
[134] VVCの規格化では、よりフレンドリーなハードウェア実装のために仮想パイプラインデータ単位(VPDU)の概念が導入されている。VPDUは、ピクチャ内の重複しないMxMルマ(L)/NxNクロマ(C)単位として定められる。ハードウェア復号器では、連続したVPDUが複数のパイプライン段によって同時に処理される。異なる段が異なるVPDUを同時に処理する。VPDUのサイズは、殆どのパイプライン段においてバッファサイズにおよそ比例し、従ってVPDUのサイズを小さく保つことが重要である。VVCでは、VPDUのサイズが64x64サンプルに設定される。従って、VVCで採用される全てのコード化ツールは、VPDUの制約に違反することができない。例えば、全変換ブロックを同じパイプライン段において操作する必要があるため、最大変換サイズは、64x64とすることのみができる。VPDUの制約により、イントラ予測ブロックも64x64以内とすべきである。従って、イントラコード化されるタイルグループ/スライス(例えば、Iタイルグループ/スライス)において、CTUは、(CTUが64x64よりも大きい場合)4つの64x64ブロックに分割されることを強制され、それぞれの64x64ブロックは、デュアルツリー構造によって更に分割され得る。従って、デュアルツリーが有効化される場合、ルマ分割ツリーとクロマ分割ツリーとの共通の根は、64x64ブロックサイズにある。
[135] LMCS及びCCLMの現在の設計において幾つかの問題がある。
[136] 第一に、タイルグループレベルのクロマスケール因子LUTの「cScaleInv[]」の導出は、容易に拡張することができない。導出プロセスは、現在、64個のエントリを有する一定のクロマLUT「ChromaResidualScaleLut」に依存する。16個の区分を有する10ビットの映像では、2による除算の追加のステップを適用しなければならない。区分の数が変わる場合(例えば、16個の区分の代わりに8個の区分が使用される場合)、2ではなく、4による除算を適用するように導出プロセスを変更しなければならない。この追加のステップは、精度の損失を引き起こし得る。
[137] 第二に、例えばクロマスケール因子を得るために使用されるYIdxを計算するために、全ルマブロックの平均値を使用する。128x128の最大CTUサイズを考慮して、平均ルマ値は、16384(128x128)ルマサンプルに基づいて計算され得、かかる計算は、複雑である。更に、128x128のルマブロック分割が符号器によって選択される場合、そのブロックは、均質のコンテンツを含む可能性が高い。従って、ルマ平均を計算するのにブロック内のルマサンプルのサブセットで十分であり得る。
[138] 第三に、デュアルツリー分割中、ハードウェア復号器の潜在的なパイプラインの問題を回避するためにクロマスケーリングがオフに設定される。しかし、(適用されるクロマスケール因子を導出するために対応するルマサンプルを使用する代わりに)適用されるクロマスケール因子を示すための明確な信号化を使用する場合、この依存性を回避することができる。イントラコード化されるタイルグループ/スライス内のクロマスケーリングを有効化することは、コード化効率を更に改善し得る。
[139] 第四に、従来、16個の区分のそれぞれについてデルタコード語値が信号化される。多くの場合、この16区分について、限られた数の異なるコード語のみが使用されることが認められている。従って、信号化のオーバヘッドを更に減らすことができる。
[140] 第5にCCLMのパラメータは、標的クロマブロックの因果的近傍であるブロックからのルマ及びクロマ再構築されたサンプルを用いて導出される。デュアルツリー分割では、ルマブロック分割及びクロマブロック分割が必ずしも位置合わせされない。従って、複数のルマブロック又は標的クロマブロックよりも大きい領域を有するルマブロックが標的クロマブロックに対応し得る。標的クロマブロックのCCLMパラメータを導出するために、図16A~図16Bに示すように、対応するルマブロックの全てが再構築されなければならない。かかる再構築は、パイプライン実装におけるレイテンシを引き起こし、ハードウェア復号器のスループットを低下させる。
[141] 上記の問題に対処するために、本開示の実施形態を下記の通り示す。
[142] 本開示の実施形態は、クロマスケーリングLUTを除去することによって映像コンテンツを処理するための方法を提供する。
[143] 上記で述べたように、64エントリのクロマLUTは、容易に拡張可能ではなく、他の区分線形モデル(例えば、8区分、4区分、64区分等)が使用される場合に問題を引き起こすことがある。同じコード化効率を実現するために、クロマスケール因子をその対応する区分のルマスケール因子と同じに設定することができるため、かかるLUTは、不要でもある。本開示の一部の実施形態では、現クロマブロックの区分インデックスをYIdxで表し、以下のステップを使用してクロマスケール因子を決定する:
・YIdx>reshaper_model_max_bin_idx若しくはYIdx<reshaper_model_min_bin_idxが成立する場合又はSignaledCW[YIdx]=0が成立する場合、chroma_scalingをデフォルトに設定し、chroma_scaling=1.0となり、即ちスケーリングが適用されない。
・さもなければ、chroma_scalingをSignaledCW[YIdx]/OrgCWに設定する。
[144] 上記で導出したクロマスケール因子は、小数精度を有する。ハードウェア/ソフトウェアプラットフォーム上の依存性を回避するために固定小数点近似を適用することができる。更に、復号器側で逆クロマスケーリングを行う必要がある。かかる除算は、乗算と、その後に続く右シフトを使用する固定小数点演算とによって実装することができる。固定小数点近似内のビットの数をCSCALE_FP_PRECで表す。固定小数点精度での逆クロマスケール因子を決定するために以下を使用することができる:
inverse_chroma_scaling[YIdx]=((1<<(luma_bit_depth-log2(TOTAL_NUMBER_PIECES)+CSCALE_FP_PREC))+(SignaledCW[YIdx]>>1))/SignaledCW[YIdx];
ここで、luma_bit_depthは、ルマビット深度であり、TOTAL_NUMBER_PIECESは、VVCのドラフト4で16に設定される区分線形モデル内の総区分数である。inverse_chroma_scalingの値は、タイルグループ/スライスごとに1回計算するのみでよい場合があり、上記の除算は、整数除算演算であることに留意されたい。
[145] クロマスケール因子及び逆スケール因子を導出するために更なる量子化を適用することができる。例えば、SignaledCWの全ての偶数(2×m)値について逆クロマスケール因子を計算することができ、SignaledCWの奇数(2×m+1)値は、隣接する偶数値のスケール因子のクロマスケール因子を再利用する。換言すれば、下記を使用することができる。
for(i=reshaper_model_min_bin_idx; i<=reshaper_model_max_bin_idx; i++)
{
tempCW=SignaledCW[i]>>1)<<1;
inverse_chroma_scaling[i]=((1<<(luma_bit_depth-log2(TOTAL_NUMBER_PIECES)+CSCALE_FP_PREC))+(tempCW>>1))/tempCW;
}
[146] クロマスケール因子を量子化する上記の実施形態は、更に汎用化することができ、例えば他の全ての隣接値が同じクロマスケール因子を共有しながら、SignaledCWのn番目の値ごとに逆クロマスケール因子を計算することができる。例えば、「n」は、4に設定することができ、それは、隣接する4個のコード語値ごとに同じ逆クロマスケール因子値が共有されることを意味する。「n」の値は、2のべき乗とすることが望ましく、かかる設定は、除算を計算するためにシフトを使用することを可能にする。log2(n)の値をLOG2_nとして表し、上記の式は、以下のように修正することができる:tempCW=SignaledCW[i]>>LOG2_n)<<LOG2_n。
[147] 最後に、LOG2_nの値は、区分線形モデル内で使用される区分数の関数であり得る。より少ない区分が使用される場合、より大きいLOG2_nを使用することが有益である。例えば、TOTAL_NUMBER_PIECESが16以下の場合、LOG2_nは、1+(4-log2(TOTAL_NUMBER_PIECES))に設定することができる。TOTAL_NUMBER_PIECESが16を上回る場合、LOG2_nは、0に設定することができる。
[148] 本開示の実施形態は、ルマ予測ブロックの平均化を単純化することによって映像コンテンツを処理するための方法を提供する。
[149] 上記で論じたように、現クロマブロックの区分インデックス「YIdx」を決定するために、対応するルマブロックの平均値を使用することができる。しかし、大きいブロックのサイズでは、平均化プロセスが多数のルマサンプルを含み得る。最悪の場合、128x128のルマサンプルが平均化プロセスに関与し得る。
[150] 本開示の実施形態は、最悪の場合を僅かNxNのルマサンプル(Nは2のべき乗である)を使用することに低減するための単純化した平均化プロセスを提供する。
[151] 一部の実施形態では、2次元ルマブロックの両方の寸法が事前設定閾値N以下である(換言すれば、2つの寸法の少なくとも一方がNを上回る)場合、その寸法内のNの位置のみを使用するように「ダウンサンプリング」を適用することができる。一般性を失うことなく、横寸法を例に取る。幅がNを上回る場合、位置x(x=i×(width>>log2(N)), i=0,…N-1)にあるサンプルのみを平均化に使用する。
[152] 図17は、本開示の一部の実施形態による平均化演算の例示的な単純化を示す。この例では、Nが4に設定され、ブロック内の16個のルマサンプル(陰影付きのサンプル)のみが平均化に使用される。Nの値は、4に限定されないことが理解されるであろう。例えば、Nは、2のべき乗である任意の値に設定することができる。換言すれば、Nは、1、2、4、8等であり得る。
[153] 一部の実施形態では、横寸法及び縦寸法に異なるNの値が適用され得る。換言すれば、平均化演算の最悪の事例は、NxMのサンプルを使用し得る。一部の実施形態では、寸法を考慮することなく、平均化プロセス内でサンプル数を限定することができる。例えば、最大で16個のサンプルを使用することができる。それらの16個のサンプルは、1x16、16x1、2x8、8x2、4x4形式、又は標的ブロックの形状に適合する形式で、横寸法又は縦寸法内に分布し得る。例えば、ブロックが縦長である場合、2x8を使用し、ブロックが横長である場合、8x2を使用し、ブロックが正方形である場合、4x4を使用する。
[154] かかる単純化は、平均値が全ルマブロックの真の平均と異なることを引き起こし得るが、そのようないかなる差異も小さいと考えられる。その理由は、大きいブロックのサイズが選択される場合、ブロック内のコンテンツがより均質になる傾向があるからである。
[155] 更に、復号器側動きベクトル洗練(DMVR)モードは、とりわけ復号器にとってVVC規格内の複雑なプロセスである。その理由は、DMVRが、動き補償が適用可能である前に復号器が動き検出を行って動きベクトルを導出することを要求するからである。双方向オプティカルフロー(BDOF)は、ルマ予測ブロックを得るためにDMVR後に適用しなければならない追加の逐次プロセスであるため、VVC規格内のBDOFモードは、この状況を更に複雑にし得る。クロマスケーリングは、対応するルマ予測ブロックの平均値を必要とするため、平均値が計算可能である前にDMVR及びBDOFが適用される可能性があり、レイテンシの問題を引き起こす。
[156] このレイテンシの問題を解決するために、本開示の一部の実施形態では、DMVR及びBDOF前にルマ予測ブロックを使用して平均ルマ値を計算し、平均ルマ値を使用してクロマスケール因子を得る。これは、DMVR及びBDOFプロセスと並列にクロマスケーリングを適用できるようにし、従ってレイテンシを著しく減らすことができる。
[157] 本開示と合致して、レイテンシ低減の改変形態を考えることができる。一部の実施形態では、このレイテンシ低減は、平均ルマ値を計算するためにルマ予測ブロックの一部のみを使用する上記の単純化した平均化プロセスと組み合わせることもできる。一部の実施形態では、ルマ予測ブロックをDMVRプロセス後及びBDOFプロセス前に使用して、平均ルマ値を計算することができる。次いで、平均ルマ値を使用してクロマスケール因子を得る。この設計は、クロマスケール因子を決定する精度を保ちながら、BDOFプロセスと並列にクロマスケーリングを適用できるようにする。DMVRプロセスは、動きベクトルを洗練させ得、従って、DMVRプロセス前の動きベクトルと共に予測サンプルを使用することよりも、DMVRプロセス後の洗練された動きベクトルと共に予測サンプルを使用する方が正確であり得る。
[158] 更に、VVC規格では、CU構文構造(例えば、coding_unit())は、標的CU内に何らかの非ゼロ残差係数があるかどうかを示すための構文要素「cu_cbf」を含み得る。TUレベルでは、TU構文構造transform_unit()は、標的TU内に何らかの非ゼロクロマ(Cb又はCr)残差係数があるかどうかを示すための構文要素tu_cbf_cb及びtu_cbf_crを含む。VVCのドラフト4では、タイルグループレベル又はスライスレベルでクロマスケーリングが有効化される場合、対応するルマブロックの平均化を呼び出すことができる。本開示は、ルマ平均化プロセスをバイパスするための方法も提供する。開示する実施形態と合致して、クロマスケーリングプロセスは、残差クロマ係数に適用されるため、非ゼロクロマ係数がない場合、ルマ平均化プロセスをバイパスすることができる。これは、以下の条件に基づいて決定することができる。
条件1:cu_cbfが0に等しい
条件2:tu_cbf_cr及びtu_cbf_cbが何れも0に等しい
[159] 条件1又は条件2が満たされる場合、ルマ平均化プロセスをバイパスすることができる。
[160] 上記の実施形態では、予測ブロックのNxNサンプルのみを使用して平均値を導出し、これは、平均化プロセスを単純化する。例えば、Nが1に等しい場合、予測ブロックの左上サンプルのみが使用され得る。しかし、この単純化した事例でも、予測ブロックが最初に生成されることを必要とし、それによりレイテンシを引き起こす。従って、一部の実施形態では、クロマスケール因子を導出するために参照ルマサンプルを直接使用できることを考える。これは、復号器がルマ予測プロセスと並列にクロマスケール因子を導出できるようにし、それによりレイテンシを低減する。換言すれば、イントラ予測とインター予測とが別々に処理される。
[161] イントラ予測の場合、予測ブロックを生成するための参照サンプルとして、同じピクチャ内の既に復号された隣接サンプルを使用することができる。これらの参照サンプルは、標的ブロックの上部のサンプル、標的ブロックの左側のサンプル、及び標的ブロックの左上のサンプルを含む。これらの全ての参照サンプルの平均を使用してクロマスケール因子を導出することができる。代わりに、これらの参照サンプルの一部のみの平均を使用することができる。例えば、標的ブロックの左上の位置に最も近いM個の参照サンプル(例えば、M=3)のみを平均化することができる。
[162] 別の例として、クロマスケール因子を導出するために平均化されるM個の参照サンプルは、左上の位置に最も近くなく、図18にあるように標的ブロックの上部の境界及び左側の境界に沿って分布する。図18は、クロマスケール因子を導出するための平均計算に使用される例示的なサンプルを示す。図18にあるように、例示的なサンプルを点線の四角形で表す。図18に示す例示的な四角形1801~1807のそれぞれにおいて1個、2個、3個、4個、5個、6個及び8個のサンプルが平均化される。本開示の平均計算は、異なるサンプルが平均計算における異なる重みを有し得る加重平均で置換することができる。例えば、平均計算における除算演算を回避するために、重みの和は、2のべき乗であり得る。
[163] インター予測の場合、予測ブロックを生成するために時間的参照ピクチャからの参照サンプルを使用することができる。これらの参照サンプルは、参照ピクチャインデックス及び動きベクトルによって識別される。動きベクトルが小数精度を有する場合、補間を適用することができる。参照サンプルの平均を計算するために、補間後の参照サンプルが使用され得るか、又は補間前の参照サンプル(即ち整数精度にクリッピングされる動きベクトル)が使用され得る。開示する実施形態と合致して、参照サンプルの全てを使用して平均を計算することができる。代わりに、参照サンプルの一部のみ(例えば、標的ブロックの左上の位置に対応する参照サンプル)を使用して平均を計算することができる。
[164] 図5に示すように、元の領域内でインター予測を行いながら、リシェープド領域内でイントラ予測を行う。従って、インター予測では、予測ブロックに対して順方向マッピングを適用し、順方向マッピング後のルマ予測ブロックを使用してルマブロックの平均値を計算する。レイテンシを減らすために、平均値は、順方向マッピング前のルマ予測ブロックを使用して計算することができる。例えば、順方向マッピング前の全ルマブロック、又は順方向マッピング前のルマブロックのNxN部分、又は順方向マッピング前のルマブロックの左上サンプルを使用することができる。
[165] 本開示の実施形態は、デュアルツリー分割のためのクロマスケーリングを伴う映像コンテンツを処理するための方法を更に提供する。
[166] ルマブロックに対する依存性は、ハードウェア設計の複雑化を引き起こし得るため、デュアルツリー分割を可能にするイントラコード化されるタイルグループ/スライスについてクロマスケーリングをオフにすることができる。しかし、この制限は、コード化効率の損失を引き起こし得る。
[167] CTUは、ルマコード化ツリー及びクロマコード化ツリーの両方の共通のルートであるため、クロマスケール因子をCTUレベルで導出することは、デュアルツリー分割におけるクロマとルマとの間の依存性を除去することができる。例えば、クロマスケール因子を導出するために、CTUに隣接する再構築されたルマサンプル又はクロマサンプルが使用される。このクロマスケール因子は、CTU内の全てのクロマサンプルに対して使用することができる。この例では、上記の参照サンプルを平均化する方法を適用して、CTUに隣接する再構築されたサンプルを平均化することができる。これらの全ての参照サンプルの平均を使用してクロマスケール因子を導出することができる。又は、これらの参照サンプルの一部のみの平均値を使用することができる。例えば、標的ブロックの左上の位置に最も近いM個の参照サンプル(例えば、M=4、8、16、32又は64)のみを平均化することができる。
[168] しかし、図19の灰色のCTUのように、ピクチャの下部又は右側の境界上のCTUでは、CTUの全てのサンプルがピクチャ境界内にない場合がある。この場合、クロマスケール因子を導出するために、ピクチャ境界内のCTUの境界上の隣接する再構築されたサンプル(図19の灰色のサンプル)のみを使用することができる。しかし、平均計算における可変数のサンプルは、ハードウェア実装において不所望な除算演算を必要とする。従って、本開示の実施形態は、平均計算における除算演算を回避することができるように、2のべき乗である定数にピクチャ境界サンプルをパディングする方法を提供する。例えば、図19に示すように、ピクチャの下部の境界の外にあるパデッドサンプルは、ピクチャの下部の境界上の全てのサンプルのうち、パデッドサンプルに最も近いサンプルであるサンプル1905から生成される。CTUレベルのクロマスケール因子の導出に加えて、クロマスケール因子は、固定グリッド上で導出することができる。パイプライン段によって処理されるデータ単位として定められる仮想パイプラインデータ単位(VPDU)を考慮し、クロマスケール因子は、VPDUレベルにおいて導出することができる。VVCのドラフト5では、VPDUがルマサンプルグリッド上の64x64ブロックとして定められる。従って、本開示の実施形態では、64x64グロックの粒度でのクロマスケール因子の導出を行う。VVCのドラフト6では、VPDUがルマサンプルグリッド上のMxMブロックとして定められ、Mは、CTUサイズ及び64の小さい方である。先に説明したCTUレベルの導出方法は、VPDUレベルでも使用することができる。
[169] 一部の実施形態では、グリッドサイズが、CTUよりも小さい固定グリッド上でクロマスケール因子を導出することに加えて、因子は、CTUごとに1回のみ導出され、CTU内の全てのグリッド単位(例えば、VPDU)に使用される。例えば、CTUの第1のVPDU上でクロマスケール因子を導出し、その因子をCTU内の全てのVPDUに使用する。VPDUレベル上の方法は、導出時に限られた数の隣接サンプルを使用する(例えば、CTU内の第1のVPDUに対応する隣接サンプルのみを使用する)CTUレベルの導出と同等であることが理解されるであろう。
[170] 対応するルマブロックのサンプル値を平均化して、CTUレベルにおいてVPDUレベル又は他の任意の固定サイズブロック単位レベルでavgY’を計算し、区分インデックスYIdxを決定し、クロマスケール因子inverse_chroma_scaling[YIdx]を得る代わりに、デュアルツリー分割の場合にルマに対する依存性を回避するためにクロマスケール因子をビットストリーム内で明示的に信号化することもできる。
[171] クロマスケールインデックスは、複数のレベルで信号化することができる。例えば、図20の表10及び図21の表11に示すように、クロマスケールインデックスは、クロマ予測モードと共にコード化単位(CU)レベルで信号化することができる。標的クロマブロックのクロマスケール因子を決定するために、構文要素lmcs_scaling_factor_idx(図20の要素2002及び図21の要素2102)を使用する。lmcs_scaling_factor_idxがない場合、標的クロマブロックのクロマスケール因子は、浮動小数点数精度で1.0又は均等に固定小数点精度で(1<<CSCALE_FP_PREC)に等しいと推論される。lmcs_chroma_scaling_idxの許容値の範囲は、タイルグループレベル又はスライスレベルで決定することができ、後に解説する。
[172] lmcs_chroma_scaling_idxの可能な値にもよるが、とりわけ小さいブロックにとってその信号化のコストが高くなり過ぎる場合がある。従って、本開示の一部の実施形態では、図20の表10の信号化条件がブロックサイズの条件を追加で含み得る。例えば、この「lmcs_chroma_scaling_idx」の構文要素(図20の要素2002)は、標的ブロックがN個のクロマサンプル以下を含む場合、又は標的ブロックが所与の幅Wよりも大きい幅及び/又は所与の高さHよりも大きい高さを有する場合にのみ信号化される。より小さいブロックでは、lmcs_chroma_scaling_idxが信号化されない場合、復号器側でそのクロマスケール因子を決定することができる。一例として、クロマスケール因子は、浮動小数点数精度で1.0に設定することができる。一部の実施形態では、タイルグループヘッダレベル又はスライスヘッダレベルでデフォルトのlmcs_chroma_scaling_idx値を追加することができる(図10の表1)。信号化されるlmcs_chroma_scaling_idxを有さないブロック(例えば、小さいブロック)は、ブロックに対応するクロマスケール因子を導出するために、このタイルグループ/スライスレベルのデフォルトインデックスを使用することができる。一部の実施形態では、小さいブロックのクロマスケール因子は、スケール因子を明示的に信号化したその近傍(例えば、上部又は左側の近傍)から継承することができる。
[173] この「lmcs_chroma_scaling_idx」の構文要素をCUレベルで信号化することに加えて、この構文要素は、CTUレベルでも信号化することができる。しかし、VVCにおいて最大CTUサイズが128x128である場合、CTUレベルで信号化される「lmcs_chroma_scaling_idx」の構文要素によるクロマスケーリングが粗過ぎる場合がある。従って、本開示の一部の実施形態では、固定された粒度を使用して、この「lmcs_chroma_scaling_idx」の構文要素を信号化することができる。例えば、16x16サンプルの領域(又はVPDUでは64x64サンプルの領域)ごとに1つのlmcs_chroma_scaling_idxが信号化され、16x16サンプルの領域(又は64x64サンプルの領域)内のサンプルに適用され得る。
[174] 標的タイルグループ/スライスのlmcs_chroma_scaling_idxの範囲は、標的タイルグループ/スライス内で許可されるクロマスケール因子の値の数に依存する。lmcs_chroma_scaling_idxの範囲は、上記で論じたように、64エントリクロマLUTに依拠するVVC内の既存の方法によって決定され得る。代わりに、lmcs_chroma_scaling_idxの範囲は、上記で論じたクロマスケール因子の計算を使用して決定することもできる。
[175] 一例として、上記の「量子化」方法では、LOG2_nの値を2に設定し(即ち「n」を4に設定し)、標的タイルグループ/スライスの区分線形モデル内の各区分のコード語割り当てを以下のように設定する:{0, 65, 66, 64, 67, 62, 62, 64, 64, 64, 67, 64, 64, 62, 61, 0}。従って、64~67の任意のコード語の値は、同じスケール因子の値(例えば、小数精度で1.0)を有することができ、60~63の任意のコード語の値は、同じスケール因子の値(例えば、小数精度で60/64=0.9375)を有することができるため、全タイルグループについて可能なスケール因子の値は、2つのみある。コード語が割り当てられていない2つの末端区分では、クロマスケール因子をデフォルトで1.0に設定することができる。従って、この例では、標的スライス内のブロックに関してlmcs_chroma_scaling_idxを信号化するのに1ビットで十分である。ブロックは、クロマスケール因子の信号化レベルに応じてCU、CTU又は固定領域を含むことができる。
[176] 区分線形モデルを使用して可能なクロマスケール因子の値を導出する以外、一部の実施形態では、符号器がタイルグループ/スライスヘッダにおいてクロマスケール因子の値の組を信号化することができる。次いで、ブロックレベルにおいて、この組及びそのブロックのlmcs_chroma_scaling_idxの値を使用してクロマスケール因子の値を決定することができる。
[177] 代わりに、信号化のコストを低減するために、クロマスケール因子を隣接ブロックから予測することができる。例えば、標的ブロックのクロマスケール因子が標的ブロックの隣接ブロックのクロマスケール因子と等しいことを示すためにフラグを使用することができる。隣接ブロックは、上部又は左側の隣接ブロックであり得る。従って、標的ブロックに関して2ビットまで信号化することができる。例えば、その2ビットの第1のビットは、標的ブロックのクロマスケール因子が標的ブロックの左側の近傍のクロマスケール因子に等しいかどうかを示すことができ、第2のビットは、標的ブロックのクロマスケール因子が標的ブロックの上部の近傍に等しいかどうかを示すことができる。標的ブロックのクロマスケール因子が上部の近傍又は左側の近傍に等しいことを何れのビットの値も示さない場合、lmcs_chroma_scaling_idx構文を信号化することができる。
[178] 「lmcs_chroma_scaling_idx」の様々な値の可能性に応じて、平均コード長を減らすために、「code lmcs_chroma_scaling_idx」に可変長のコード語を使用することができる。
[179] 「lmcs_chroma_scaling_idx」をコード化するためにコンテキストベース適応二値算術コード化(CABAC)を適用することができる。標的ブロックに関連するCABACコンテキストは、標的ブロックの隣接ブロックの「lmcs_chroma_scaling_idx」に依存し得る。例えば、CABACコンテキストを形成するために、左側の隣接ブロック又は上部の隣接ブロックを使用することができる。「lmcs_chroma_scaling_idx」の二値化に関して、「lmcs_chroma_scaling_idx」を二値化するためにトランケーティドライス二値化を使用することができる。
[180] 「lmcs_chroma_scaling_idx」を信号化することにより、符号器は、レート歪みコストに関して適応性のあるlmcs_chroma_scaling_idxを選択することができる。従って、レート歪み最適化を使用してlmcs_chroma_scaling_idxを選択してコード化効率を改善することができ、これは、信号化コストの増加を相殺することを促進し得る。
[181] 本開示の実施形態は、LMCS区分線形モデルを信号化することを伴う映像コンテンツを処理するための方法を更に提供する。
[182] VVCのドラフト4におけるLMCSの方法は、16個の区分を有する区分線形モデルを使用するが、タイルグループ/スライス内のSignaledCW[i]の固有値の数は、16よりもはるかに少ない傾向がある。例えば、16個の区分の一部は、コード語のデフォルトの数「OrgCW」を使用することができ、16個の区分の一部は、互いと同じコード語の数を有することができる。従って、LMCS区分線形モデルを信号化する際、固有のコード語の数を「listUniqueCW[]」の形式で信号化し、LMCS区分線形モデルの各区分について標的区分のコード語を選択するためにlistUniqueCW[]のインデックスを送信することができる。
[183] 図22の表12において、修正された構文表を示し、表12では、イタリック体で示す構文要素2202及び2204が本実施形態に従って改定されている。
[184] 開示する信号化方法の意味規則は、以下の通りであり、変更箇所に下線を引いてある:
reshaper_model_min_bin_idxは、リシェーパ構築プロセス内で使用される最小ビン(又は区分)インデックスを規定する。reshape_model_min_bin_idxの値は、0~MaxBinIdxまでの範囲内にあるものとする。MaxBinIdxの値は、15に等しいものとする。
reshaper_model_delta_max_bin_idxは、最大許容ビン(又は区分)インデックスMaxBinIdx引く、リシェーパ構築プロセス内で使用される最大ビンインデックスを規定する。reshape_model_max_bin_idxの値は、MaxBinIdx-reshape_model_delta_max_bin_idxに等しく設定される。
reshaper_model_bin_delta_abs_cw_prec_minus1 plus 1は、構文reshape_model_bin_delta_abs_CW[i]の表現に使用されるビット数を規定する。
reshaper_model_bin_num_unique_cw_minus1 plus 1は、コード語アレイlistUniqueCWのサイズを規定する。
reshaper_model_bin_delta_abs_CW[i]は、i番目のビンの絶対デルタコード語値を規定する。
reshaper_model_bin_delta_sign_CW_flag[i]は、reshape_model_bin_delta_abs_CW[i]の符号を以下のように規定する:
- reshape_model_bin_delta_sign_CW_flag[i]が0に等しい場合、対応する変数RspDeltaCW[i]は、正値である。
- さもなければ、(reshape_model_bin_delta_sign_CW_flag[i]が0に等しくない)対応する変数RspDeltaCW[i]は、負値である。
reshape_model_bin_delta_sign_CW_flag[i]がない場合、対応する変数RspDeltaCW[i]は、0に等しいと推論する。
変数RspDeltaCW[i]は、RspDeltaCW[i]=(1-2*reshape_model_bin_delta_sign_CW[i])*reshape_model_bin_delta_abs_CW[i]として導出される。
変数listUniqueCW[0]は、OrgCWに等しく設定される。i=1... reshaper_model_bin_num_unique_cw_minus1までの変数listUniqueCW[i]は、以下のように導出される:
- 変数OrgCWを(1<<BitDepthY)/(MaxBinIdx+1)に等しく設定する。
- listUniqueCW[i]=OrgCW+RspDeltaCW[i-1]
reshaper_model_bin_cw_idx[i]は、RspCW[i]を導出するために使用されるアレイlistUniqueCW[]のインデックスを規定する。reshaper_model_bin_cw_idx[i]の値は、0~(reshaper_model_bin_num_unique_cw_minus1+1)までの範囲内にあるものとする。
RspCW[i]は、以下のように導出される:
- reshaper_model_min_bin_idx < = i <= reshaper_model_max_bin_idxが成立する場合、
RspCW[i]=listUniqueCW[reshaper_model_bin_cw_idx[i]]。
- さもなければ、RspCW[i]=0。
[185] BitDepthYの値が10に等しい場合、RspCW[i]の値は、32~2*OrgCW-1の範囲内にあり得る。
[186] 本開示の実施形態は、ブロックレベルにおける条件付きクロマスケーリングを伴う映像コンテンツを処理するための方法を提供する。
[187] 図6)の表1に示すように、クロマスケーリングが適用されるかどうかは、タイルグループ/スライスレベルで信号化されるtile_group_reshaper_chroma_residual_scale_flagによって判定することができる。しかし、ブロックレベルでクロマスケーリングを適用するかどうかを判定することが有益であり得る。例えば、一部の実施形態では、標的ブロックにクロマスケーリングが適用されるかどうかを示すためにCUレベルフラグを信号化することができる。CUレベルフラグの存在は、タイルグループレベルフラグ「tile_group_reshaper_chroma_residual_scale_flag」に基づいて条件付けることができる。換言すれば、CUレベルフラグは、タイルグループ/スライスレベルでクロマスケーリングが許可される場合にのみ信号化され得る。CUレベルフラグは、標的ブロックにとってクロマスケーリングが有益であるかどうかに基づいて、クロマスケーリングを使用するかどうかを符号器が決めることを可能にし得るが、信号化オーバヘッドも招き得る。
[188] 開示する実施形態と合致して、上記の信号化オーバヘッドを回避するために、ブロックにクロマスケーリングが適用されるかどうかは、標的ブロックの予測モードに基づいて条件付けることができる。例えば、標的ブロックがインター予測される場合、とりわけその参照ピクチャが時間的距離の点で近い場合、予測信号がよい傾向にある。この場合、残差が非常に小さいと予期されるため、クロマスケーリングをバイパスすることができる。例えば、より高い時間的レベル内のピクチャは、時間的距離の点で近い参照ピクチャを有する傾向がある。ブロックに関して、近くの参照ピクチャを使用するこれらのピクチャ内でクロマスケーリングを無効化することができる。この条件が満たされるかどうかを判定するために、標的ピクチャと標的ブロックの参照ピクチャとの間のピクチャ順序カウント(POC)の差を使用することができる。
[189] 一部の実施形態では、全てのインターコード化されるブロックについてクロマスケーリングを無効化することができる。一部の実施形態では、全てのイントラコード化されるブロックについてクロマスケーリングを無効化することができる。一部の実施形態では、VVC規格内で定められる複合イントラ/インター予測(CIIP)モードについてクロマスケーリングを無効化することができる。
[190] VVC規格では、CU構文構造「coding_unit()」は、標的CU内に何らかの非ゼロ残差係数があるかどうかを示すための構文要素「cu_cbf」を含み得る。TUレベルでは、TU構文構造「transform_unit()」は、標的TU内に何らかの非ゼロクロマ(Cb又はCr)残差係数があるかどうかを示すための構文要素「tu_cbf_cb」及び「tu_cbf_cr」を含み得る。これらのフラグに基づいて、クロマスケーリングプロセスを条件付けることができる。上記で説明したように、非ゼロ残差係数がない場合、対応するルマクロマスケーリングプロセスの平均化を呼び出すことができ、その後、クロマスケーリングプロセスをバイパスすることができ、本開示は、ルマ平均化プロセスをバイパスするための方法を提供する。
[191] 本開示の実施形態は、CCLMパラメータの導出を伴う映像コンテンツを処理するための方法を提供する。
[192] 先に述べたように、VVC5では、標的クロマブロックを予測するためのCCLMのパラメータは、隣接ブロックからのルマ及びクロマ再構築されたサンプルを用いて導出される。デュアルツリーの場合、ルマブロック分割及びクロマブロック分割が位置合わせされない場合がある。換言すれば、1つのNxMクロマブロックのためのCCLMパラメータを導出するために、複数の隣接するルマブロック又は2Nx2M(カラー形式4:2:0の場合)よりも大きいサイズを有するルマブロックが再構築され、従ってレイテンシを招き得る。
[193] レイテンシを低減するために、一例としてCCLMパラメータがCTU/VPDUレベルで導出される。CCLMパラメータを導出するために、隣接するCTU/VPDUからの再構築されたルマ及びクロマサンプルを使用することができる。導出されるパラメータは、CTU/VPDU内の全てのブロックに適用することができる。例えば、クロスコンポーネント線形モデル予測において記載した公式を使用してパラメータを導出することができ、Xa及びYaは、それぞれCTU/VPDU隣接ルマサンプルの最大ルマサンプル値を有するルマサンプル位置のルマ値及びクロマ値である。Xb及びYbは、それぞれCTU/VPDU隣接ルマサンプルの最小ルマサンプルを有するルマサンプル位置のルマ値及びクロマ値を表す。当業者にとって、本明細書で提案するCTU/VPDUレベルのパラメータの導出の概念と組み合わせて他の任意の導出プロセスが使用され得る。
[194] CTU/VPDUレベルのCCLMパラメータの導出に加えて、かかる導出プロセスは、固定ルマグリッド上で実行され得る。VVCのドラフト5では、デュアルツリー分割が使用される場合、別個のルマ及びクロマ分割は、64x64のルマグリッドから開始し得る。換言すれば、128x128CTUから64x64CUへの分割は、ルマ及びクロマについて、別々ではなく、一緒に行われ得る。従って、別の例として、CCLMパラメータは、64x64ルマグリッド上で導出することができる。64x64グリッド単位内の全てのクロマブロックのためのCCLMパラメータを導出するために、64x64グリッド単位の隣接する再構築されたルマ及びクロマサンプルを使用することができる。ルマサンプルにおいて、128x128に達し得るCTUレベルの導出と比較して、64x64単位レベルの導出は、より正確である可能性があり、それでもなお現在のVVCのドラフト5にあるようなパイプラインのレイテンシの問題を有さない。この例に加えて、CCLMパラメータの導出は、一部のグリッドに関する導出を飛ばすことによって更に単純化することができる。例えば、CCLMパラメータがCTU内の最初の64x64ブロック上でのみ導出され、同じCTU内の後続の64x64ブロックの導出が飛ばされる。最初の64x64ブロックに基づいて導出されるパラメータは、CTU内の全てのブロックに使用することができる。
[195] 図23は、本開示の一部の実施形態による、映像コンテンツを処理するための例示的方法2300のフローチャートを示す。一部の実施形態では、方法2300は、コーデック(例えば、図2A~図2Bの符号器又は図3A~図3Bの復号器)によって実行され得る。例えば、コーデックは、映像シーケンスを符号化するか又は別のコードに変換するための機器(例えば、機器400)の1つ又は複数のソフトウェア又はハードウェア構成要素として実装することができる。一部の実施形態では、映像シーケンスは、非圧縮映像シーケンス(例えば、映像シーケンス202)又は復号される圧縮映像シーケンス(例えば、映像ストリーム304)であり得る。一部の実施形態では、映像シーケンスは、機器のプロセッサ(例えば、プロセッサ402)に関連する監視装置(例えば、図4の映像入力装置)によって捕捉され得る監視映像シーケンスであり得る。映像シーケンスは、複数のピクチャを含み得る。機器は、ピクチャのレベルで方法2300を実行することができる。例えば、機器は、方法2300内でピクチャを1つずつ処理することができる。別の例では、機器は、方法2300内で1度に複数のピクチャを処理することができる。方法2300は、以下のステップを含み得る。
[196] ステップ2302では、ピクチャ内の第1のブロック及び第2のブロックを表すデータを受信することができる。複数のブロックは、第1のブロック及び第2のブロックを含み得る。一部の実施形態では、第1のブロックは、標的クロマブロック(例えば、図16Aのクロマブロック1600)であり得、第2のブロックは、コード化ツリーブロック(CTB)、変換単位(TU)又は仮想パイプラインデータ単位(VPDU)であり得る。仮想パイプラインデータ単位は、ピクチャのコード化ツリー単位のサイズ以下のサイズを有するピクチャ内の非重複単位である。例えば、CTUのサイズが128x128ピクセルである場合、VPDUは、CTUのサイズよりも小さいサイズを有することができ、VPDUのサイズ(例えば、64x64ピクセル)は、ハードウェア(例えば、ハードウェア復号器)の殆どのパイプライン段においてバッファサイズに比例し得る。
[197] 一部の実施形態では、コード化ツリーブロックは、標的クロマブロックに対応するルマブロック(例えば、図16Bのルマブロック1610)であり得る。従って、データは、第1のブロックに関連する複数のクロマサンプル及び第2のブロックに関連する複数のルマサンプルを含み得る。第1のブロックに関連する複数のクロマサンプルは、第1のブロック内の複数のクロマ残差サンプルを含む。
[198] ステップ2304では、第2のブロックに関連する複数のルマサンプルの平均値を決定することができる。複数のルマサンプルは、図18~図19に関して説明したサンプルを含み得る。一例として、図19に示すように、複数のルマサンプルは、第2のブロック(例えば、1902)の左側の境界1901上又は第2のブロックの上部の境界上の複数の再構築されたルマサンプル(例えば、陰影付きのサンプル1905及びパデッドサンプル1903)を含み得る。複数の再構築されたルマサンプルは、隣接する再構築されたルマブロック(例えば、1904)に属し得ることが理解されるであろう。
[199] 方法2300は、第2のブロックに関連する複数のルマサンプルのうち、第1のルマサンプルがピクチャの境界の外にあるかどうかを判定すること、及び第1のルマサンプルがピクチャの境界の外にあるという判定に応答して、第1のルマサンプルの値を、ピクチャの境界内にある複数のルマサンプルの第2のルマサンプルの値に設定することを更に含み得る。ピクチャの境界は、ピクチャの右側の境界及びピクチャの下側の境界の1つを含み得る。例えば、パデッドサンプル1903がピクチャの下側の境界の外にあると判定することができ、従って、パデッドサンプル1903の値は、ピクチャの下側の境界上の全てのサンプルのうち、パデッドサンプル1903に最も近いサンプルである陰影付きのサンプル1905の値になるように設定される。
[200] 第2のブロック(例えば、1902)がピクチャの境界を横断する場合、複数のルマサンプルの数が除算演算を回避するために通常2のべき乗である定数であり得るように、パデッドサンプル(例えば、パデッドサンプル1903)を作成できることが理解されるであろう。
[201] ステップ2306では、第1のブロックのためのクロマスケール因子を平均値に基づいて決定することができる。図18に関して上記で論じたように、イントラ予測では、同じピクチャの隣接ブロック内の復号されたサンプルを参照サンプルとして使用して予測ブロックを生成することができる。例えば、標的ブロック(例えば、この例では第1のブロック)のクロマスケール因子を決定するためのルマ平均値として、隣接ブロック内のサンプルの平均値を使用することができ、第1のブロックのためのクロマスケール因子は、第2のブロックのルマ平均値を使用して決定することができる。
[202] ステップ2308では、クロマスケール因子を使用して、第1のブロックに関連する複数のクロマサンプルを処理することができる。図5に関して上記で論じたように、複数のクロマスケール因子がタイルグループレベルにおけるクロマスケール因子LUTを構築し、標的ブロックの再構築されたクロマ残差に対して復号器側で適用され得る。同様に、クロマスケール因子は、符号器側でも適用することができる。
[203] 一部の実施形態では、命令を含む非一時的コンピュータ可読記憶媒体も提供され、命令は、上記の方法を実行するための装置(開示した符号器及び復号器等)によって実行され得る。一般的な非一時的媒体は、例えば、フロッピ(登録商標)ディスク、フレキシブルディスク、ハードディスク、ソリッドステートドライブ、磁気テープ若しくは他の任意の磁気データ記憶媒体、CD-ROM、他の任意の光学データ記憶媒体、孔のパターンを有する任意の物理媒体、RAM、PROM及びEPROM、フラッシュEPROM若しくは他の任意のフラッシュメモリ、NVRAM、キャッシュ、レジスタ、他の任意のメモリチップ若しくはカートリッジ及びそれらのもののネットワーク化されたバージョンを含む。装置は、1つ又は複数のプロセッサ(CPU)、入力/出力インタフェース、ネットワークインタフェース及び/又はメモリを含み得る。
[204] 実施形態は、以下の条項を使用して更に記載することができる:
1.映像コンテンツを処理するためのコンピュータによって実施れる方法であって、
ピクチャ内の第1のブロック及び第2のブロックを表すデータを受信することであって、データは、第1のブロックに関連する複数のクロマサンプル及び第2のブロックに関連する複数のルマサンプルを含む、受信すること、
第2のブロックに関連する複数のルマサンプルの平均値を決定すること、
平均値に基づいて、第1のブロックのためのクロマスケール因子を決定すること、及び
クロマスケール因子を使用して、第1のブロックに関連する複数のクロマサンプルを処理すること
を含む、コンピュータによって実装される方法。
2.第2のブロックに関連する複数のルマサンプルは、第2のブロックの左側の境界上又は第2のブロックの上部の境界上の複数の再構築されたルマサンプルを含む、条項1に記載の方法。
3.第2のブロックに関連する複数のルマサンプルのうち、第1のルマサンプルがピクチャの境界の外にあるかどうかを判定すること、及び
第1のルマサンプルがピクチャの境界の外にあるという判定に応答して、第1のルマサンプルの値を、ピクチャの境界内にある複数のルマサンプルのうちの第2のルマサンプルの値に設定すること
を更に含む、条項2に記載の方法。
4.第2のブロックに関連する複数のルマサンプルのうち、第1のルマサンプルがピクチャの境界の外にあるかどうかを判定すること、及び
第1のルマサンプルがピクチャの境界の外にあるという判定に応答して、第1のルマサンプルの値を、ピクチャの境界上にある複数のルマサンプルのうちの第2のルマサンプルの値に設定すること
を更に含む、条項3に記載の方法。
5.ピクチャの境界は、ピクチャの右側の境界及びピクチャの下部の境界の1つである、条項4に記載の方法。
6.第2のブロックは、コード化ツリーブロック、変換単位、又は仮想パイプラインデータ単位であり、仮想パイプラインデータ単位のサイズは、ピクチャのコード化ツリー単位のサイズ以下である、条項1~5の何れか一項に記載の方法。
7.仮想パイプラインデータ単位は、ピクチャ内の非重複単位である、条項6に記載の方法。
8.第1のブロックに関連する複数のクロマサンプルは、第1のブロック内の複数のクロマ残差サンプルを含む、条項1~7の何れか一項に記載の方法。
9.第1のブロックは、標的クロマブロックであり、第2のブロックは、標的クロマブロックに対応するルマブロックである、条項1~8の何れか一項に記載の方法。
10.映像コンテンツを処理するためのシステムであって、
一組の命令を記憶するためのメモリと、
少なくとも1つのプロセッサとを含み、少なくとも1つのプロセッサは、システムに、
ピクチャ内の第1のブロック及び第2のブロックを表すデータを受信することであって、データは、第1のブロックに関連する複数のクロマサンプル及び第2のブロックに関連する複数のルマサンプルを含む、受信すること、
第2のブロックに関連する複数のルマサンプルの平均値を決定すること、
平均値に基づいて、第1のブロックのためのクロマスケール因子を決定すること、及び
クロマスケール因子を使用して、第1のブロックに関連する複数のクロマサンプルを処理すること
を行わせるように、一組の命令を実行するように構成される、
システム。
11.第2のブロックに関連する複数のルマサンプルは、第2のブロックの左側の境界上又は第2のブロックの上部の境界上の複数の再構築されたルマサンプルを含む、条項10に記載のシステム。
12.少なくとも1つのプロセッサは、システムに、
第2のブロックに関連する複数のルマサンプルのうち、第1のルマサンプルがピクチャの境界の外にあるかどうかを判定すること、及び
第1のルマサンプルがピクチャの境界の外にあるという判定に応答して、第1のルマサンプルの値を、ピクチャの境界内にある複数のルマサンプルのうちの第2のルマサンプルの値に設定すること
を更に行わせるように、一組の命令を実行するように構成される、条項11に記載のシステム。
13.第2のルマサンプルは、ピクチャの境界上にある、条項12に記載のシステム。
14.ピクチャの境界は、ピクチャの右側の境界及びピクチャの下部の境界の1つである、条項13に記載のシステム。
15.第2のブロックは、コード化ツリーブロック、変換単位、又は仮想パイプラインデータ単位であり、仮想パイプラインデータ単位のサイズは、ピクチャのコード化ツリー単位のサイズ以下である、条項10~14の何れか一項に記載のシステム。
16.仮想パイプラインデータ単位は、ピクチャ内の非重複単位である、条項15に記載のシステム。
17.第1のブロックに関連する複数のクロマサンプルは、第1のブロック内の複数のクロマ残差サンプルを含む、条項10~16の何れか一項に記載のシステム。
18.第1のブロックは、標的クロマブロックであり、第2のブロックは、標的クロマブロックに対応するルマブロックである、条項10~17の何れか一項に記載のシステム。
19.一組の命令を記憶する非一時的コンピュータ可読媒体であって、一組の命令は、映像コンテンツを処理するための方法をコンピュータシステムに行わせるために、コンピュータシステムの少なくとも1つのプロセッサによって実行可能であり、前記方法は、
ピクチャ内の第1のブロック及び第2のブロックを表すデータを受信することであって、データは、第1のブロックに関連する複数のクロマサンプル及び第2のブロックに関連する複数のルマサンプルを含む、受信すること、
第2のブロックに関連する複数のルマサンプルの平均値を決定すること、
平均値に基づいて、第1のブロックのためのクロマスケール因子を決定すること、及び
クロマスケール因子を使用して、第1のブロックに関連する複数のクロマサンプルを処理すること
を含む、非一時的コンピュータ可読媒体。
20.第2のブロックに関連する複数のルマサンプルは、第2のブロックの左側の境界上又は第2のブロックの上部の境界上の複数の再構築されたルマサンプルを含む、条項19に記載の非一時的コンピュータ可読媒体。
[205] 本明細書の「第1の」及び「第2の」等の関係語は、あるエンティティ又は操作を別のエンティティ又は操作と区別するために使用されるに過ぎず、それらのエンティティ又は操作間のいかなる実際の関係又は順序も必要としないか又は含意しないことに留意すべきである。更に、「含む」、「有する」、「含有する」及び「包含する」並びに他の同様の形式の用語は、意味の点で均等であることを意図し、これらの用語の何れか1つの後に続くアイテムがかかるアイテムの網羅的列挙であることを意図していないか、又は列挙するアイテムのみに限定されることを意図していない点で非限定的であることを意図する。
[206] 本明細書で使用するとき、別段の定めがない限り、「又は」という語は、実行不可能な場合を除いて、あり得る全ての組み合わせを包含する。例えば、あるデータベースがA又はBを含み得ると述べた場合、別段の定めがない限り又は実行不可能でない限り、そのデータベースは、A若しくはB又はA及びBを含むことができる。第2の例として、あるデータベースがA、B又はCを含み得ると述べた場合、別段の定めがない限り又は実行不可能でない限り、そのデータベースは、A、若しくはB、若しくはC、又はA及びB、又はA及びC、又はB及びC、又はA、及びB、及びCを含むことができる。
[207] 上記で説明した実施形態は、ハードウェア若しくはソフトウェア(プログラムコード)又はハードウェアとソフトウェアとの組み合わせによって実装できることが理解されるであろう。ソフトウェアによって実装される場合、ソフトウェアは、上記のコンピュータ可読媒体に記憶することができる。ソフトウェアは、プロセッサによって実行されるとき、開示した方法を実行することができる。本開示で説明した計算ユニット及び他の機能ユニットは、ハードウェア若しくはソフトウェア又はハードウェアとソフトウェアとの組み合わせによって実装することができる。上記のモジュール/ユニットの複数を1つのモジュール/ユニットとして組み合わせることができ、上記のモジュール/ユニットのそれぞれを複数のサブモジュール/サブユニットに更に分割できることも当業者であれば理解するであろう。
[208] 上記の本明細書では、実装形態ごとに変わり得る多数の具体的な詳細に関して実施形態を説明してきた。記載した実施形態に対する一定の適応形態及び修正形態がなされ得る。本明細書を検討し、本明細書で開示した本発明を実践することで他の実施形態が当業者に明らかになり得る。本明細書及び例は、専ら例示として検討され、本開示の真の範囲及び趣旨は、添付の特許請求の範囲によって示されることを意図する。図中に示すステップの順序は、例示目的に過ぎず、特定のステップの順序に限定されることを意図しない。そのため、それらのステップは、同じ方法を実装しながら異なる順序で実行できることを当業者であれば理解することができる。
[209] 図面及び本明細書で例示的実施形態を開示してきた。しかし、それらの実施形態に対する多くの改変形態及び修正形態がなされ得る。従って、特定の用語を使用したが、それらの用語は、限定目的ではなく、全般的及び説明的な意味で使用されたものに過ぎない。