(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-11
(45)【発行日】2024-11-19
(54)【発明の名称】レート歪み最適化を用いたビデオ符号化における画像整形
(51)【国際特許分類】
H04N 19/70 20140101AFI20241112BHJP
H04N 19/85 20140101ALI20241112BHJP
【FI】
H04N19/70
H04N19/85
【外国語出願】
(21)【出願番号】P 2023151429
(22)【出願日】2023-09-19
(62)【分割の表示】P 2022018653の分割
【原出願日】2019-02-13
【審査請求日】2023-09-19
(32)【優先日】2018-02-14
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2018-06-28
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2018-09-04
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2018-10-01
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2018-11-28
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2018-12-20
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2019-01-14
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】507236292
【氏名又は名称】ドルビー ラボラトリーズ ライセンシング コーポレイション
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】イン,プオン
(72)【発明者】
【氏名】プウ,ファーンジュイン
(72)【発明者】
【氏名】ルウ,タオラン
(72)【発明者】
【氏名】チェン,タオ
(72)【発明者】
【氏名】フサーク,ウォルター ジェイ.
(72)【発明者】
【氏名】マッカーシー,ショーン トーマス
【審査官】岩井 健二
(56)【参考文献】
【文献】国際公開第2017/165494(WO,A2)
【文献】国際公開第2017/024042(WO,A2)
【文献】国際公開第2017/019818(WO,A1)
【文献】国際公開第2017/011636(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
H04N 19/00 - 19/99
(57)【特許請求の範囲】
【請求項1】
符号化されたビデオ・データを再構成する装置であって、当該装置は:
プロセッサと;
整形された符号語表現における一つまたは複数の符号化された整形画像を含む符号化ビットストリームと、前記符号化ビットストリーム内の前記一つまたは複数の符号化された整形画像についての整形パラメータとを受領する入力とを有しており、前記整形パラメータは、前記整形パラメータに基づいて前方整形関数を生成するためのパラメータを含み、
前記前方整形関数は、前記整形パラメータによって導出される線形セグメントをもつ区分ごとの線形関数として再構成され、前記整形パラメータは:
整形のために使用されるアクティブな最大ビン・インデックスを前記プロセッサを用いて決定するデルタ・インデックス・パラメータであって、前記アクティブな最大ビン・インデックスはあらかじめ定義された最大ビン・インデックスより小さ
く、整形のために使用される前記アクティブな最大ビン・インデックスを決定することが、前記あらかじめ定義された最大ビン・インデックスと前記デルタ・インデックス・パラメータとの差を計算することを含む、デルタ・インデックス・パラメータと;
前記整形において使用される最小ビン・インデックスを示す最小ビン・パラメータと;
前記整形された符号語表現におけるそれぞれのアクティブなビンについての絶対デルタ符号語値と;
前記整形された符号語表現におけるそれぞれのアクティブなビンについての前記絶対デルタ符号語値の符号とを含む、
装置。
【請求項2】
エンコードされたビットストリームのための整形パラメータを生成する装置であって、当該装置は:
プロセッサと;
入力符号語表現でのビデオ・ピクチャーのシーケンスを受領する入力とを有しており、
ビデオ・ピクチャーの前記シーケンスにおける一つまたは複数のピクチャーについて、前記プロセッサは:
前方整形関数を適用して、整形された符号語表現での整形されたピクチャーを生成
することであって、前記前方整形関数は、整形パラメータによって導出される線形セグメントをもつ区分ごとの線形関数として再構成される、ことを実行し;
前記整形された符号語表現のための整形パラメータを生成し;
少なくとも前記整形されたピクチャーに基づいて、符号化されたビットストリームを生成し、
前記整形パラメータは:
整形のために使用されるアクティブな最大ビン・インデックスを決定するデルタ・インデックス・パラメータであって、前記アクティブな最大ビン・インデックスはあらかじめ定義された最大ビン・インデックス以下であ
り、整形のために使用される前記アクティブな最大ビン・インデックスを決定することが、前記あらかじめ定義された最大ビン・インデックスと前記デルタ・インデックス・パラメータとの差を計算することを含む、デルタ・インデックス・パラメータと;
前記整形において使用される最小ビン・インデックスを示す最小ビン・パラメータと;
前記整形された符号語表現におけるそれぞれのアクティブなビンについての絶対デルタ符号語値と;
前記整形された符号語表現におけるそれぞれのアクティブなビンについての前記絶対デルタ符号語値の符号とを含む、
装置。
【請求項3】
ビデオ・エンコード方法によって生成されたビットストリームを伝送する方法であって、前記ビデオ・エンコード方法は:
入力符号語表現でのビデオ・ピクチャーのシーケンスを受領する段階と;
ビデオ・ピクチャーの前記シーケンスにおける一つまたは複数のピクチャーについて、前方整形関数を適用して、整形された符号語表現での整形されたピクチャーを生成する段階と;
前記整形された符号語表現のための整形パラメータを生成する段階と;
少なくとも前記整形されたピクチャーに基づいて、符号化されたビットストリームを生成する段階とを含み、前記整形パラメータは:
整形のために使用されるアクティブな最大ビン・インデックスを決定するデルタ・インデックス・パラメータであって、前記アクティブな最大ビン・インデックスはあらかじめ定義された最大ビン・インデックスより小さい、デルタ・インデックス・パラメータと;
前記整形において使用される最小ビン・インデックスを示す最小ビン・パラメータと;
前記整形された符号語表現におけるそれぞれのアクティブなビンについての絶対デルタ符号語値と;
前記整形された符号語表現におけるそれぞれのアクティブなビンについての前記絶対デルタ符号語値の符号とを含む、
方法。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願への相互参照
本願は、2019年1月14日に出願された米国仮特許出願第62/792,122号、2018年12月20日に出願された米国仮特許出願第62/782,659号、2018年11月28日に出願された米国仮特許出願第62/772,228号、2018年10月1日に出願された米国仮特許出願第62/739,402号、2018年9月4日に出願された米国仮特許出願第62/726,608号、2018年6月28日に出願された米国仮特許出願第62/691,366号、および2018年2月14日に出願された米国仮特許出願第62/630,385号に対する優先権の利益を主張するものであり、それぞれその全体が参照により本明細書に組み込まれる。
【0002】
技術
本発明は、概括的には、画像およびビデオ符号化に関する。より詳細には、本発明のある実施形態は、ビデオ符号化における画像整形に関する。
【背景技術】
【0003】
2013年、国際標準化機構(ISO)のMPEGグループは、国際電気通信連合(ITU)と共同で、HEVC(H.265としても知られる)ビデオ符号化規格(非特許文献4)の最初の草案を発表した。さらに最近、同グループは、既存のビデオ符号化技術よりも改善された符号化性能を提供する次世代符号化標準の開発を支援するためのエビデンス公募を発表した。
【0004】
本明細書で使用されるところでは、用語「ビット深さ」は、画像の色成分の1つを表すために使用されるピクセルの数を表わす。伝統的に、画像は、ピクセル当たり、色成分当たり、8ビットで符号化されていた(たとえば、ピクセルあたり24ビット)が、現在のアーキテクチャは、今や10ビット、12ビット以上など、より高いビット深さをサポートすることがある。
【0005】
伝統的な画像パイプラインでは、捕捉された画像は非線形な光電子関数(opto-electronic function、OETF)を用いて量子化され、これが線形シーン光を非線形ビデオ信号(たとえば、ガンマ符号化されたRGBまたはYCbCr)に変換する。次いで、受信機上で、ディスプレイ上に表示される前に、信号は、ビデオ信号値を出力画面色値に変換する電気光伝達関数(electro-optical transfer function、EOTF)によって処理される。そのような非線形関数は、ITU-R Rec. BT.709およびBT.2020に記載されている伝統的な「ガンマ」曲線、SMPTE ST2084に記載されている「PQ」(perceptual quantization[知覚的量子化])曲線、およびRec. ITU-R BT.2100に記載されている「HybridLog-gamma[ハイブリッドログガンマ]」または「HLG」曲線を含む。
【発明の概要】
【0006】
本明細書で使用されるところでは、用語「前方整形(forward reshaping)」は、デジタル画像のもとのビット深さおよびもとの符号語の分布または表現(たとえば、ガンマまたはPQまたはHLGなど)から、同じまたは異なるビット深さおよび異なる符号語の分布または表現の画像への、デジタル画像のサンプルからサンプルへの、または符号語から符号語へのマッピングのプロセスを表わす。整形により、固定ビットレートでの改善された圧縮性または改善された画像品質が可能になる。たとえば、限定されるものではないが、10ビットのビデオ符号化アーキテクチャにおける符号化効率を改善するために、10ビットまたは12ビットのPQ符号化HDRビデオに整形が適用されてもよい。受信機では、整形された信号を圧縮解除した後、受信機は、「逆整形関数」を適用して、信号をもとの符号語分布に復元することができる。本発明者らによりここで認識されるように、ビデオ符号化標準の次世代のための開発が開始されるにつれて、画像の統合された整形および符号化のための改良された技術が望まれる。本発明の方法は、標準ダイナミックレンジ(SDR)および/または高ダイナミックレンジ(HDR)のコンテンツを含むがそれに限られない多様なビデオ・コンテンツに適用可能でありうる。
【0007】
本節で述べた手法は、追求されることができた手法であるが、必ずしも以前に着想または追求された手法ではない。したがって、別段の指示がない限り、本節に記載されているどの手法も、単に本節に含まれているという理由で先行技術として適格であると想定されるべきではない。同様に、一つまたは複数の手法に関して特定された問題は、特に断らない限り、本節に基づいて何らかの先行技術において認識されていたと想定されるべきではない。
【図面の簡単な説明】
【0008】
本発明の実施形態は、限定ではなく例として、添付の図面の図面に示されており、図面において、同様の参照番号が同様の要素を指す。
【0009】
【
図1A】ビデオ配信パイプラインのための例示的なプロセスを示す;
【0010】
【
図1B】従来技術による信号整形を使用するデータ圧縮のための例示的プロセスを示す;
【0011】
【
図2A】本発明のある実施形態によるハイブリッド・ループ内整形を使用するエンコーダのための例示的なアーキテクチャを示す。
【0012】
【
図2B】本発明のある実施形態によるハイブリッド・ループ内整形を使用するデコーダのための例示的なアーキテクチャを示す。
【0013】
【
図2C】ある実施形態による整形を使用するイントラCUデコードのための例示的アーキテクチャを示す。
【0014】
【
図2D】ある実施形態による整形を使用するインターCUデコードのための例示的アーキテクチャを示す。
【0015】
【
図2E】ルーマまたはクロマ処理のためのある実施形態による、インター符号化されたスライス内のイントラCUデコードのための例示的アーキテクチャを示す。
【0016】
【
図2F】クロマ処理のためのある実施形態による、インター符号化されたスライス内のイントラCUデコードのための例示的アーキテクチャを示す。
【0017】
【
図3A】本発明のある実施形態による、整形アーキテクチャを使ってビデオを符号化するための例示的なプロセスを示す。
【0018】
【
図3B】本発明のある実施形態による、整形アーキテクチャを使ってビデオをデコードするための例示的なプロセスを示す。
【0019】
【
図4】本発明のある実施形態による、整形ドメイン内の符号語を再割り当てするための例示的なプロセスを示す。
【0020】
【
図5】本発明のある実施形態による整形閾値を導出するための例示的なプロセスを示す。
【0021】
【
図6A】
図5に示されたプロセスおよび本発明のある実施形態に従って整形閾値を導出するための例示的なデータ・プロットを示す。
【
図6B】
図5に示されたプロセスおよび本発明のある実施形態に従って整形閾値を導出するための例示的なデータ・プロットを示す。
【
図6C】
図5に示されたプロセスおよび本発明のある実施形態に従って整形閾値を導出するための例示的なデータ・プロットを示す。
【
図6D】
図5に示されたプロセスおよび本発明のある実施形態に従って整形閾値を導出するための例示的なデータ・プロットを示す。
【0022】
【
図6E】本発明のある実施形態による、ビン分散に従った符号語割り当ての例を示す。
【発明を実施するための形態】
【0023】
レート‐歪み最適化(rate-distortion optimization、RDO)を用いて画像を圧縮するための信号整形および符号化技法が本稿に記載される。以下の記述では、説明の目的で、本発明の十全な理解を提供するために、数多くの個別的詳細が記載される。しかしながら、本発明が、これらの個別的詳細なしで実施されうることは明白であろう。他方、本発明を不必要に隠蔽し、埋没させ、あるいは不明瞭にすることを避けるために、周知の構造および装置は、網羅的な詳細さでは記述されない。
【0024】
概要
本明細書に記載される例示的実施形態は、ビデオのための信号整形および符号化に関する。エンコーダにおいて、プロセッサは、第2の符号語表現に整形されるべき第1の符号語表現の入力画像を受領し、前記第2の符号語表現は、前記第1の符号語表現よりも効率的な圧縮を許容するものであり、プロセッサはさらに、前記入力画像のピクセルを第2の符号語表現にマッピングする前方整形関数を生成する。前記前方整形関数を生成するために、前記エンコーダは:前記入力画像を複数のピクセル領域に分割し、前記ピクセル領域のそれぞれを、各ピクセル領域の第1のルミナンス特性に従って複数の符号語ビンのうちの1つに割り当て、各符号語ビンに割り当てられた前記ピクセル領域のそれぞれの第2のルミナンス特性に従って前記複数の符号語ビンのうちのそれぞれの符号語ビンのビン・メトリックを計算し、前記第2の符号語表現におけるいくつかの符号語を、各符号語ビンのビン・メトリックおよびレート‐歪み最適化基準に従って各符号語ビンに割り当て、前記複数の符号語ビンのそれぞれへの前記第2の符号語表現における符号語の割り当てに応答して、前記前方整形関数を生成する。
【0025】
別の実施形態では、デコーダにおいて、プロセッサは、整形モデルを特徴付ける符号化ビットストリーム・シンタックス要素を受領し、このシンタックス要素は、整形構築プロセスにおいて使用されるべき最小符号語ビン・インデックス値を示すフラグ、整形構築プロセスにおいて使用されるべき最大符号語ビン・インデックス値を示すフラグ、整形モデル・プロファイル・タイプを示すフラグであって、前記モデル・プロファイル・タイプは、ビン重要度値を含む、デフォルトのビン関係パラメータに関連付けられている、フラグ、または整形モデル・プロファイルにおいて定義されるデフォルトのビン重要度値を調整するために使用されるべき一つまたは複数のデルタ・ビン重要度値を示すフラグのうちの一つまたは複数を含む。プロセッサは、整形モデル・プロファイルに基づいて、各ビンについてのデフォルトのビン重要度値と、ビンの重要度値に従って各ビンに割り当てられる符号語のデフォルト数(default numbers)の割り当てリストとを決定する。次いで、各符号語ビンについて、プロセッサは:
そのデフォルトのビン重要度値をそのデルタ・ビン重要度値に加えることによってそのビン重要度値を決定し;
ビンのビン重要度値および割り当てリストに基づいて、符号語ビンに割り当てられるべき符号語の数を決定し;
各符号語ビンに割り当てられた符号語の数に基づいて前方整形関数を生成する。
【0026】
別の実施形態では、デコーダにおいて、プロセッサは、第1の符号語表現での一つまたは複数の符号化された整形画像と、該符号化された整形画像についての整形情報に関係するメタデータとを含む符号化されたビットストリームを受領する。
プロセッサは、整形情報に関係するメタデータに基づいて、逆整形関数および前方整形関数を生成する。ここで、逆整形関数は、第1の符号語表現から第2の符号語表現に整形画像のピクセルをマッピングし、前方整形関数は、第2の符号語表現から第1の符号語表現へ画像のピクセルをマッピングする。プロセッサは、符号化されたビットストリームから、一つまたは複数の符号化された単位を含む符号化された整形画像を抽出する。ここで、符号化された整形画像における一つまたは複数の符号化された単位について:
符号化された整形画像における整形されたイントラ符号化された符号化単位(coding unit、CU)については、プロセッサは:
CUにおける整形された残差および整形された予測サンプルに基づいてCUの第1の整形された再構成サンプルを生成し;
第1の整形された再構成サンプルおよびループ・フィルタ・パラメータに基づいて、整形されたループ・フィルタ出力を生成し;
逆整形関数を整形されたループ・フィルタ出力に適用して、第2の符号語表現での符号化単位のデコードされたサンプルを生成し;
第2の符号語表現での符号化単位のデコードされたサンプルを参照バッファに格納し;
符号化された整形画像における整形されたインター符号化された符号化単位については、プロセッサは:
第2の符号語表現での、参照バッファに格納された予測サンプルに前方整形関数を適用し、第2の整形された予測サンプルを生成し;
符号化されたCUにおける整形された残差および第2の整形された予測サンプルに基づいて符号化単位の第2の整形された再構成サンプルを生成し;
第2の整形された再構成サンプルおよびループ・フィルタ・パラメータに基づいて、整形されたループ・フィルタ出力を生成し;
整形されたループ・フィルタ出力に逆整形関数を適用して、第2の符号語表現での符号化単位のサンプルを生成し;
第2の符号語表現での符号化単位のサンプルを参照バッファに格納する。最後に、プロセッサは、参照バッファ内の格納されたサンプルに基づいて、デコードされた画像を生成する。
【0027】
別の実施形態では、デコーダにおいて、プロセッサは、符号化されたビットストリームであって、入力符号語表現における一つまたは複数の符号化された整形画像と、符号化ビットストリーム内の一つまたは複数の符号化された整形画像についての整形メタデータ(207)とを含む符号化されたビットストリームを受領する。プロセッサは、整形メタデータに基づいて前方整形関数(282)を生成し、この前方整形関数は、第1の符号語表現から入力符号語表現へ画像のピクセルをマッピングする。プロセッサは、整形メタデータまたは前方整形関数に基づく逆整形関数(265-3)を生成する。ここで、逆整形関数は入力符号語表現から第1の符号語表現へ整形画像のピクセルをマッピングする。プロセッサは、符号化されたビットストリームから、一つまたは複数の符号化された単位を含む符号化された整形画像を抽出する。ここで:
符号化された整形画像におけるイントラ符号化された符号化単位(イントラCU)については、プロセッサは:
イントラCUにおける整形された残差およびイントラ予測された整形された予測サンプルに基づいて、イントラCUの整形された再構成サンプル(285)を生成し;
逆整形関数(265-3)をイントラCUの整形された再構成サンプルに適用して、第1の符号語表現でのイントラCUのデコードされたサンプルを生成し;
イントラCUのデコードされたサンプルにループ・フィルタ(270)を適用して、イントラCUの出力サンプルを生成し;
イントラCUの出力サンプルを参照バッファに格納し;
符号化された整形画像におけるインター符号化されたCU(インターCU)については、プロセッサは:
前方整形関数(282)を、第1の符号語表現での参照バッファに格納されたインター予測サンプルに適用して、入力符号語表現でのインターCUについての整形された予測サンプルを生成し;
インターCUの整形された残差およびインターCUについての整形された予測サンプルに基づいてインターCUの整形された再構成サンプルを生成し;
逆整形関数(265-3)をインターCUの整形された再構成サンプルに適用して、第1の符号語表現でのインターCUのデコードされたサンプルを生成し;
ループ・フィルタ(270)をインターCUのデコードされたサンプルに適用して、インターCUの出力サンプルを生成し;
インターCUの出力サンプルを参照バッファに格納し;
参照バッファ内の出力サンプルに基づいて、第1の符号語表現でのデコードされた画像を生成する。
【0028】
ビデオ配信処理パイプラインの例
図1Aは、ビデオ捕捉からビデオ・コンテンツ表示までのさまざまな段階を示す、従来のビデオ配信パイプライン(100)の例示的なプロセスを示す。ビデオ・フレーム(102)のシーケンスが、画像生成ブロック(105)を用いて捕捉または生成される。ビデオ・フレーム(102)は、デジタル的に(たとえば、デジタルカメラによって)捕捉されるか、またはコンピュータによって(たとえば、コンピュータ・アニメーションを使用して)生成されて、ビデオ・データ(107)を提供しうる。あるいはまた、ビデオ・フレーム(102)は、フィルム・カメラによってフィルム上に捕捉されてもよい。フィルムは、デジタル・フォーマットに変換されて、ビデオ・データ(107)を提供する。制作フェーズ(110)では、ビデオ・データ(107)が編集されて、ビデオ制作ストリーム(112)を提供する。
【0029】
次いで、制作ストリーム(112)のビデオ・データが、制作後編集のためにブロック(115)でプロセッサに提供される。ブロック(115)の制作後編集は、画像品質を向上させる、またはビデオ・クリエーターの創造的意図に従って画像の特定の見え方を達成するために、画像の個別的な領域における色または輝度を調整または修正することを含んでいてもよい。これは時に、「カラータイミング」または「カラーグレーディング」と呼ばれる。他の編集(たとえば、シーン選択およびシーケンシング、画像クロッピング、コンピュータ生成の視覚的特殊効果の追加など)がブロック(115)で実行されて、配布のための制作の最終版(117)を与えてもよい。制作後編集(115)の間、ビデオ画像は参照ディスプレイ(125)に表示される。
【0030】
ポストプロダクション(115)に続いて、最終プロダクション(117)のビデオ・データは、下流のテレビジョン・セット、セットトップボックス、映画館などのデコードおよび再生装置への送達のために、エンコード・ブロック(120)に送達されてもよい。いくつかの実施形態では、符号化ブロック(120)は、符号化ビットストリーム(122)を生成するために、ATSC、DVB、DVD、Blu-Ray、および他の配信フォーマットによって定義されるものなどのオーディオおよびビデオ・エンコーダを含んでいてもよい。受信機では、符号化されたビットストリーム(122)は、デコード・ユニット(130)によってデコードされ、信号(117)の同一または近い近似を表わすデコードされた信号(132)を生成する。受信機は、参照ディスプレイ(125)と完全に異なる特性を有することがある目標ディスプレイ(140)に取り付けられてもよい。その場合、ディスプレイ・マッピングされた(display-mapped)信号(137)を生成することによって、デコードされた信号(132)のダイナミックレンジを目標ディスプレイ(140)の特性にマッピングするために、ディスプレイ管理ブロック(135)が使用されてもよい。
【0031】
信号整形(Signal Reshaping)
図1Bは、特許文献2による信号整形のための例示的なプロセスを示す。入力フレーム(117)が与えられると、前方整形ブロック(150)は、入力および符号化制約条件を解析し、入力フレーム(117)を再量子化された出力フレーム(152)にマッピングする符号語マッピング関数を生成する。たとえば、入力(117)は、ある種の電気光学伝達関数(electro-optical transfer function、EOTF)(たとえば、ガンマ)に従ってエンコードされていてもよい。いくつかの実施形態では、メタデータを使用して、整形プロセスに関する情報が下流の装置(たとえば、デコーダ)に伝えられてもよい。本明細書で使用されるところでは、用語「メタデータ」は、符号化されたビットストリームの一部として送信され、デコードされた画像をレンダリングするためにデコーダを支援する任意の補助情報に関する。そのようなメタデータは、本明細書に記載されるような、色空間または色域情報、参照ディスプレイ・パラメータ、および補助信号パラメータを含みいるが、これらに限定されない。
【0032】
符号化(120)およびデコード(130)に続いて、デコードされたフレーム(132)は、後方(または逆)整形関数(160)によって処理されてもよく、これは、再量子化されたフレーム(132)を、前述のディスプレイ管理プロセス(135)のようなさらなる下流の処理のために、もとのEOTFドメイン(たとえば、ガンマ)に戻す変換をする。いくつかの実施形態では、後方整形関数(160)は、たとえば、AVCまたはHEVCビデオ・デコーダにおける脱量子化器の一部として、デコーダ(130)内の脱量子化器と一体化されてもよい。
【0033】
本明細書で使用されるところでは、用語「整形器(reshaper)」は、デジタル画像を符号化および/またはデコードするときに使用される前方整形関数または逆整形関数を表わしうる。整形関数の例は、特許文献2で論じられている。特許文献2では、高ダイナミックレンジ・ビデオ符号化のためのループ内ブロック・ベースの画像整形法が提案された。その設計は、符号化ループ内のブロック・ベースの整形を許容するが、複雑さを増大させる代償を伴う。具体的には、この設計は、2セットのデコード画像バッファを維持することを必要とする。一つは、整形なしの予測とディスプレイへの出力の両方のために使用できる逆整形された(または整形されていない)デコードされたピクチャーのためのセットであり、もう一つは、整形を伴う予測のためのみに使用される前方整形されたデコードされたピクチャーのためのセットである。順整形されたデコードされたピクチャーは、オンザフライで計算できるが、複雑さのコストは、特に、インター予測(サブピクセル補間を用いた動き補償)については非常に高い。一般に、ディスプレイ・ピクチャー・バッファ(display-picture-buffer、DPB)管理は複雑であり、非常に入念な注意を必要とするため、本発明者らが理解するように、ビデオを符号化するための単純化された方法が望まれる。
【0034】
特許文献6では、外部のループ外の整形器、ループ内のイントラのみの整形器をもつアーキテクチャ、予測残差のためのループ内整形器をもつアーキテクチャ、およびイントラのループ内の整形、およびインターの残差整形の両方を組み合わせるハイブリッド・アーキテクチャを含む、さらなる整形ベースのコーデック・アーキテクチャが提示された。それらの提案された整形アーキテクチャの主な目標は、主観的な視覚的品質を改善することである。よって、これらのアプローチの多くは、より悪い客観的なメトリック、特によく知られているピーク信号対雑音比(Peak Signal to Noise Ratio、PSNR)メトリックをもたらす。
【0035】
本発明では、レート‐歪み最適化(Rate-Distortion Optimization、RDO)に基づいた新しい整形器が提案される。特に、目標とされる歪みメトリックがMSE(Mean Square Error[平均二乗誤差])であるとき、提案された整形器は、主観的視覚的品質と、PSNR、Bjontegaard PSNR(BD-PSNR)、またはBjontegaardレート(BD-Rate)に基づくよく使用される客観的メトリックの両方を改善する。一般性を損なうことなく、提案された再構成アーキテクチャのいずれも、ルミナンス成分、クロマ成分のうち一つまたは複数、またはルーマおよびクロマ成分の組み合わせに適用されうることを注意しておく。
【0036】
レート‐歪み最適化(Rate-Distortion Optimization)に基づく整形
ある色成分中のBビットのビット深さによって表わされる整形されたビデオ信号(たとえば、Y、Cbおよび/またはCrについてB=10)を考えると、合計2B個の利用可能な符号語がある。望まれる符号語範囲[0 2B]をN個のセグメントまたはビンに分割することを考える。Mkは、目標ビットレートRが与えられたときに源ピクチャーとデコードまたは再構成されたピクチャーとの間の歪みDが最小になるような整形マッピング後の、k番目のセグメントまたはビンの中の符号語の数を表わすとする。一般性を失うことなく、Dは、源入力の対応するピクセル値(Source(i,j))と再構成されたピクチャー(Recon(i,j))との間の平方誤差和(SSE)の尺度として表現されてもよい。
D=SSE=Σi,jDiff(i,j)2 (1)
ここで、
Diff(i,j)=Source(i,j)-Recon(i,j)
である。
【0037】
最適化整形問題は、次のように書き直すことができる:ビットレートRが与えられたときにDが最小になるようなM
k(k=0,1,…,N-1)を求める。ここで、
【数1】
である。
【0038】
解を見出すにはさまざまな最適化法が使用できるが、最適解は、リアルタイム・エンコードのためには非常に複雑なことがある。本発明では、最適ではないがより実用的な解析解が提案される。
【0039】
一般性を失うことなく、Bビットのビット深さ(たとえば、B=10)によって表わされる入力信号を考える。ここで、符号語は、N個のビン(たとえば、N=32)に一様に分割される。デフォルトでは、各ビンはMa=2B/N個の符号語(たとえば、N=32およびB=10については、Ma=32)に割り当てられる。次に、RDOに基づく、より効率的な符号語割り当てが、例を通して実証される。
【0040】
本明細書で使用されるところでは、用語「狭い範囲」[CW1,CW2]は、符号語CW1とCW2との間の符号語の連続した範囲を示し、これは、全ダイナミックレンジ[0 2B-1]の部分集合である。たとえば、ある実施形態において、狭い範囲は、[16*2(B-8),235*2(B-8)]として定義されうる(たとえば、B=10について、狭い範囲は、値[64 940]を含む)。出力信号のビット深さがBoである仮定すると、入力信号のダイナミックレンジが狭い範囲内であれば、「デフォルト」整形と記されるものにおいては、信号を全範囲[0 2Bo-1]に延ばすことができる。すると、各ビンは、Mf=CEIL((2Bo/(CW2-CW1))*Ma)個の符号語、または、我々の例については、Bo=B=10の場合、Mf=CEIL((1024/(940-64))*32)=38個の符号語をもつ。ここで、CEIL(x)は、xをx以上の最小の整数にマッピングする天井関数を表わす。一般性を失うことなく、下記の例では、簡単のため、Bo=Bと仮定する。
【0041】
同じ量子化パラメータ(quantization parameter、QP)について、ビン内の符号語の数を増加させる効果は、ビン内の信号を符号化するためにより多くのビットを割り当てることと等価であり、よって、それはSSEを低下させる、またはPSNRを改善することと等価である。しかしながら、各ビンにおける符号語割り当ての一様な増加は、整形なしの符号化よりも良い結果を与えない可能性がある。なぜなら、PSNR利得はビットレートの増加を上回らない可能性があるからである。すなわち、これは、RDOに関して良いトレードオフではない。理想的には、RDOに関して最良のトレードオフを与えるビンのみにより多くの符号語を割り当てたい、すなわち、わずかなビットレート増加量を代償に、顕著なSSE減少(PSNR増加)を生じるようにしたい。
【0042】
ある実施形態では、RDOパフォーマンスは、適応的な区分的な整形マッピングを通じて改善される。この方法は、標準ダイナミックレンジ(SDR)および高ダイナミックレンジ(HDR)信号を含む任意のタイプの信号に適用できる。例として前述の単純なケースを用いると、本発明の目標は、各符号語セグメントまたは符号語ビンのためにMa個またはMf個いずれかの符号語を割り当てることである。
【0043】
エンコーダにおいて、入力信号についてのN個の符号語ビンが与えられたとき、各ビンの平均のルミナンス分散は次のように近似できる:
・各ビンについてブロック分散の和(varbin(k))とカウンタ(cbin(k))を0に初期化する。たとえば、k=0,1,…,N-1についてvarbin(k)=0、cbin(k)=0とする。
・ピクチャーをL*Lの重複しないブロックに分割する(たとえばL=16)。
・各ピクチャー・ブロックについて、ブロックのルーマ平均およびブロックiのルーマ分散(たとえば、Luma_mean(i)およびLuma_var(i))を計算する。
・ブロックの平均ルーマに基づいて、そのブロックをN個のビンのうちの1つに割り当てる。ある実施形態では、Luma_mean(i)が入力ダイナミックレンジ内のk番目のセグメント内にある場合、k番目のビンについての全ビン・ルミナンス分散が、新たに割り当てられたブロックのルーマ分散によってインクリメントされ、そのビンについてのカウンタは1だけ増加される。すなわち、i番目のピクセル領域がk番目のビンに属する場合:
varbin(k)=varbin(k)+Luma_var(i); (2)
cbin(k)=cbin(k)+1
・各ビンについて、カウンタが0に等しくないと想定して、そのビン内のブロック分散の和をカウンタで除算することによって、そのビンについての平均のルミナンス分散を計算する。あるいは、cbin(k)が0でない場合、
varbin(k)=varbin(k)/cbin(k) (3)
とする。
【0044】
当業者は、サブブロックを特徴付けるために、ルミナンス分散以外の代替的なメトリックを適用してもよいことを理解するであろう。たとえば、ルミナンス値の標準偏差、重み付けされたルミナンス分散またはルミナンス値、ピーク・ルミナンスなどを使用しうる。
【0045】
ある実施形態では、次の疑似コードが、各ビンについての計算されたメトリックを使用して、エンコーダがどのようにしてビン割り当てを調整しうるかの例を示す。
k番目のビンについて、
if ビン内にピクセルがない
Mk=0;
else if varbin(k)<THU (4)
Mk=Mf;
else
Mk=Ma; //(注:これは、各ビンが少なくともMa個の符号語をもつことを確実にするため。
//代替的に、Ma+1個の符号語を割り当ててもよい。)
end
ここで、THUは所定の上限閾値を表わす。
【0046】
別の実施形態では、割り当ては、次のように実行されてもよい:
k番目のビンについて、
if ビン内にピクセルがない
Mk=0;
else if TH0<varbin(k)<TH1 (5)
Mk=Mf;
else
Mk=Ma;
end
ここで、TH0およびTH1は、所定の下限および上限閾値を表わす。
【0047】
別の実施形態では
k番目のビンについて、
if ビン内にピクセルがない
Mk=0;
else if varbin(k)>THL (6)
Mk=Mf;
else
Mk=Ma;
end
ここで、THLは、所定の下限閾値を表わす。
【0048】
上記の例は、2つの事前選択された数MfおよびMaから各ビンのための符号語の数をどのように選択するかを示している。閾値(たとえば、THUまたはTHL)は、たとえば網羅的な探索を通じて、レート歪みを最適化することに基づいて決定できる。閾値は、量子化パラメータ値(QP)に基づいて調整されてもよい。ある実施形態では、B=10では、閾値は1,000~10,000の範囲でありうる。
【0049】
ある実施形態では、処理を迅速化するために、閾値は、ラグランジュ最適化法(Lagrangian optimization method)を用いて、値の固定した集合、たとえば{2,000、3,000、4,000、5,000、6,000、7,000}から決定されてもよい。たとえば、集合内の各TH(i)値について、あらかじめ定義されたトレーニング・クリップを使用して、固定QPで圧縮試験を実行することができ、目的関数Jの値を計算することができる。Jは
J(i)=D+λR (7)
として定義される。次いで、最適閾値は、J(i)が最小になる前記集合におけるTH(i)値として定義されうる。
【0050】
より一般的な例では、ルックアップテーブル(LUT)を事前に定義できる。たとえば、表1において、第1行は、可能なビン・メトリック(たとえば、varbin(k)値)の全範囲をセグメントに分割する閾値の集合を定義し、第2行は、各セグメントにおいて割り当てられる符号語(CW)の対応する数を定義する。ある実施形態では、そのようなLUTを構築するための一つの規則は次のとおり:もしビン分散が大きすぎるなら、SSEを低下させるために多くのビットを費やす必要があるかもしれない、よって、Maよりも小さい符号語(CW)値を割り当てることができる。ビン分散が非常に小さい場合、Maよりも大きなCW値を割り当てることができる。
【0051】
表1:ビン分散閾値に基づく符号語割り当ての例示的なLUT
【表1】
【0052】
表1を使用すると、閾値の符号語へのマッピングは、次のように生成されうる。
k番目のビンについて、
if ビン内にピクセルがない
Mk=0;
else if varbin(k)<TH0
Mk=CW0;
else if TH0<varbin(k)<TH1 (8)
Mk=CW1;
…
else if THp-1<varbin(k)<THp
Mk=CWp;
…
else if varbin(k)>THq-1
Mk=CWq;
end
【0053】
たとえば、2つの閾値および3つの符号語割り当てが与えられるとき、B=10について、ある実施形態では、TH0=3,000、CW0=38、TH1=10,000、CW1=32、およびCW2=28である。
【0054】
別の実施形態では、2つの閾値TH0およびTH1は、次のように選択されうる:a)TH1を非常に大きな数(無限大でもよい)と考え、たとえば式(7)のRDO最適化を使って、あらかじめ決定された値の集合からTH0を選択する。TH0が与えられて、今、TH1についての可能な値の第2の集合、たとえば集合{10,000、15,000、20,000、25,000、30,000}を定義し、式(7)を適用して最適値を特定する。このアプローチは、限られた数の閾値を用いて、あるいは収束するまで、逐次反復的に実行できる。
【0055】
先に定義された方式のいずれかに従って符号語をビンに割り当てた後、Mk個の値の和が利用可能な符号語の最大(2B)を超えることがある、または未使用の符号語があるかのいずれかであることが注意されうる。未使用の符号語がある場合、単に何もしないことに決めてもよく、あるいは未使用の符号語を特定のビンに割り当ててもよい。他方、もしアルゴリズムが利用可能であるより多くの符号語を割り当てる場合には、たとえばCW値を再正規化することによって、Mk値を再調整したくなるかもしれない。あるいはまた、既存のMk値を用いて前方整形関数を生成し、ただし次に、(ΣkMk)/2Bによるスケーリングによって整形関数の出力値を再調整してもよい。符号語再割り当て技法の例は、特許文献7にも記載されている。
【0056】
図4は、先に述べたRDO技法に従った、整形ドメインに符号語を割り当てるための例示的なプロセスを示す。ステップ405では、所望される整形されたダイナミックレンジがN個のビンに分割される。入力画像が重複しないブロックに分割された(ステップ410)後、各ブロックについて:
・ステップ415が、そのルミナンス特性(たとえば、平均および分散)を計算する。
・ステップ420が、各画像ブロックをN個のビンのうちの1つに割り当てる。
・ステップ425が、各ビンにおける平均のルミナンス分散を計算する
ステップ425において計算された値が与えられると、ステップ430において、各ビンは、たとえば、式(4)から(8)に示された符号語割り当てアルゴリズムのいずれかを使用して、一つまたは複数の閾値に従って、いくつかの符号語が割り当てられる。最後に、ステップ(435)において、最終的な符号語割り当てが、前方整形関数および/または逆整形関数を生成するために使用されうる。
【0057】
ある実施形態では、限定なしに、例として、前方LUT(forward LUT、FLUT)は、次のCコードを使って構築できる。
tot_cw=2B;
hist_lens=tot_cw/N;
for (i=0;i<N;i++)
{
double temp=(double) M[i]/(double)hist_lens; //M[i]がMkに対応
for (j=0;j<hist_lens;j++)
{
CW_bins_LUT_all[i*hist_lens
+ j]=temp;
}
Y_LUT_all[0]=CW_bins_LUT_all[0];
for (i=1;i<tot_cw;i++)
{
Y_LUT_all[i]=Y_LUT_all[i-1]+CW_bins_LUT_all[i];
}
for (i=0;i<tot_cw;i++)
{
FLUT[i]=Clip3(0,tot_cw-1,(Int)(Y_LUT_all[i]+0.5));
}
【0058】
ある実施形態では、逆LUTは次のように構築できる。
low=FLUT[0];
high=FLUT[tot_cw-1];
first=0;
last=tot_cw-1;
for (i=1;i<tot_cw;i++)
if(FLUT[0]<FLUT[i])
{
first=i-1;
break;
}
for (i=tot_cw-2;i>=0;i--)
if(FLUT[tot_cw-1]>FLUT[i])
{
last=i+1;
break;
}
for (i=0;i<tot_cw;i++)
if(i<=low)
{
ILUT[i]=first;
}
else if(i>=high)
{
ILUT[i]=last;
}
else
{
for(j=0;j<tot_cw-1;j++)
if(FLUT[j]>=i)
{
ILUT[i]=j;
break;
}
}
}
【0059】
シンタックス的には、特許文献5および6における区分多項式モードまたはパラメトリック・モデルのような、以前の出願で提案されたシンタックスを再利用することができる。表2は式(4)についてのN=32のそのような例を示す。
表2:第1のパラメトリック・モデルを用いた整形の構文
【表2】
ここで、
reshaper_model_profile_typeは、整形器構築プロセスで使用されるプロファイル・タイプを指定する。所与のプロファイルは、ビンの数、デフォルトのビンの重要度または優先度の値、およびデフォルトの符号語割り当て(たとえば、M
aおよび/またはM
f値)など、使用されるデフォルト値に関する情報を提供しうる。
reshaper_model_scale_idxは、整形器構築プロセスで使用されるスケール因子(ScaleFactorと記される)のインデックス値を指定する。ScaleFactorの値は、全体的な符号化効率を改善するための整形関数の制御を改善することを可能にする。
reshaper_model_min_bin_idxは、整形器構築プロセスにおいて使用される最小ビン・インデックスを指定する。reshaper_model_min_bin_idxの値は、両端を含め0~31の範囲とする。
reshaper_model_max_bin_idxは、整形器構築プロセスにおいて使用される最大ビン・インデックスを指定する。reshaper_model_max_bin_idxの値は、両端を含め0~31の範囲とする。
reshaper_model_bin_profile_delta[i]は、整形器構築プロセスにおいてi番目のビンのプロファイルを調整するために使用されるデルタ値を指定する。reshaper_model_bin_profile_delta[i]の値は、両端を含め0~1の範囲とする。
【0060】
表3は、代替的な、より効率的なシンタックス表現による別の実施形態を示す。
表3:第2のパラメトリック・モデルを用いた再構成のシンタックス
【表3】
ここで、
resharper_model_delta_max_bin_idxは、最大の許容されるビン・インデックス(たとえば31)から、整形器構築プロセスにおいて使用される最大ビン・インデックスを引いたものに等しくなるように設定される。
reshaper_model_num_cw_minus1に1を加えたものは、信号伝達されるべき符号語の数を指定する。
reshaper_model_delta_abs_CW[i]は、i番目の絶対デルタ符号語値を指定する。
reshaper_model_delta_sign_CW[i]は、i番目のデルタ符号語(codeword)についての符号(sign)を指定する。そして:
reshaper_model_delta_CW[i]=(1-2*reshaper_model_delta_sign_CW[i])*
reshaper_model_delta_abs_CW [i];
reshaper_model_CW[i]=32+reshaper_model_delta_CW[i]である。
reshaper_model_bin_profile_delta[i]は、整形器構築プロセスにおいてi番目のビンのプロファイルを調整するために使用されるデルタ値を指定する。reshaper_model_bin_profile_delta[i]の値は、reshaper_model_num_cw_minus1が0に等しいときは、0ないし1の範囲にある。reshaper_model_bin_profile_delta[i]の値は、reshaper_model_num_cw_minus1が1に等しいときは、0ないし2の範囲にある。reshaper_model_bin_profile_delta[i]が0に等しくなるよう設定されるときはCW=32であり、reshaper_model_bin_profile_delta[i]が1に等しくなるよう設定されるときはCW=reshaper_model_CW[0]であり、reshaper_model_bin_profile_delta[i]が2に等しくなるよう設定されるときはCW=reshaper_model_CW[1]である。ある実施形態では、
reshaper_model_num_cw_minus1は1より大きいことが許容され、それにより、
reshaper_model_num_cw_minus1および
reshaper_model_bin_profile_delta[i]がより効率的な符号化のためにue(v)で信号伝達されることを許容する。
【0061】
別の実施形態では、表4に記載されるように、ビン当たりの符号語の数が明示的に定義されてもよい。
表4:第3のモデルを用いた整形のシンタックス
【表4】
reshaper_model_number_bins_minus1に1を加えたものは、ルーマ成分のために使用されるビンの数を指定する。いくつかの実施形態において、ビンの数が2の冪乗であることがより効率的でありうる。すると、ビンの総数はそのlog2表現によって、たとえば
log2_reshaper_model_number_bins_minus_minus1のような代替パラメータを用いて、表わせる。たとえば、32ビンの場合、
log2_reshaper_model_number_bins_minus1=4である。
reshaper_model_bin_delta_abs_cw_prec_minus1に1を加えたものは、シンタックスreshaper_model_bin_delta_abs_CW[i]の表現のために使用されるビット数を指定する。
reshaper_model_bin_delta_abs_CW[i]は、i番目のビンについての絶対デルタ符号語値を指定する。
reshaper_model_bin_delta_sign_CW_flag[i]は、reshaper_model_bin_delta_abs_CW[i]の符号を次のように指定する:
・reshaper_model_bin_delta_sign_CW_flag[i]が0に等しい場合、対応する変数RspDeltaCW[i]は正の値をもつ。
・それ以外の場合(reshaper_model_bin_delta_sign_CW_flag[i]が0に等しくない)、対応する変数RspDeltaCW[i]は負の値をもつ。
reshaper_model_bin_delta_sign_CW_flag[i]が存在しないときは、それは0に等しいと推定される。
変数RspDeltaCW[i]=(1-2*reshaper_model_bin_delta_sign_CW [i])*reshaper_model_bin_delta_abs_CW
[i];
変数OrgCWは、(1<<BitDepthY)/(resharper_model_number_bins_minus_1+1)に設定される;
変数RspCW[i]は次のように導出される:
if reshaper_model_min_bin_idx<=i<=reshaper_model_max_bin_idx
then RspCW[i]=OrgCW+RspDeltaCW[i]
else, RspCW[i]=0
【0062】
ある実施形態では、前述の例のうちの1つ、たとえば式(4)による符号語割り当てを仮定すると、表2においてパラメータをどのように定義するかの例は、下記を含む:
まず、次のように「ビン重要度(bin importance)」を割り当てる:
k番目のビンについて、
if Mk=0;
bin_importance=0;
else if Mk==Mf
bin_importance=2; (9)
else
bin_importance=1;
end
【0063】
本明細書で使用されるところでは、用語「ビン重要度」は、N個の符号語ビンのそれぞれに割り当てられた値であり、整形プロセスにおけるそのビン内のすべての符号語の、他のビンに対する重要性を示す。
【0064】
ある実施形態では、reshaper_model_min_bin_idxからreshaper_model_max_bin_idxのdefault_bin_importance〔デフォルト・ビン重要度〕を1に設定してもよい。reshaper_model_min_bin_idxの値は、0に等しくないMkをもつ最小のビン・インデックスに設定される。reshaper_model_max_bin_idxの値は、0に等しくないMkをもつ最大のビン・インデックスに設定される。[reshaper_model_min_bin_idx reshaper_model_max_bin_idx]内の各ビンについてのreshaper_model_bin_profile_deltaは、bin_importanceとdefault_bin_importanceの間の差である。
【0065】
前方整形LUT(Forward Reshaping LUT、FLUT)および逆整形LUT(Inverse Reshaping LUT、ILUT)を構築するために、提案されるパラメトリック・モデルをどのように使用するかの例を以下に示す。
1)ルミナンス範囲をN個のビンに分割する(たとえばN=32)
2)シンタックスから各ビンについてのbin-importanceインデックスを導出する。たとえば、
k番目のビンについて、
if reshaper_model_min_bin_idx<=k<=reshaper_model_max_bin_idx
bin_importance[k]=default_bin_importance[k]+reshaper_model_bin_profile_delta[k];
else
bin_importance[k]=0;
3)ビン重要度に基づいて符号語を自動的に事前割り当てする:
k番目のビンについて、
if bin_importance[k]==0
Mk=0;
else if bin_importance[k]==2
Mk=Mf;
else
Mk=Ma;
end
4)各ビンについて割り当てられた符号語を累積することによって、各ビンについての符号語割り当てに基づいて前方整形LUTを構築する。合計は、全符号語予算(たとえば、10ビット・フルレンジの場合は1024)以下であるべきである。(たとえば、最初のCコードを参照。)
5)逆整形LUTを構築する(たとえば、最初のCコードを参照)。
【0066】
シンタックスの観点からは、代替的な方法も適用可能である。鍵は、明示的にまたは暗黙的に、各ビンの中の符号語の数(たとえば、k=0,1,2,…,N-1についてのMk)を指定することである。ある実施形態では、各ビンにおける符号語の数を明示的に指定することができる。別の実施形態では、符号語を異なる仕方で指定することができる。たとえば、ビン内の符号語の数は、現在のビンと前のビン内の符号語の数の差(たとえば、M_Delta(k)=M(k)-M(k-1))を用いて決定できる。別の実施形態では、最も一般的に使用される符号語の数(たとえば、MM)を指定することができ、各ビンにおける符号語の数を、この数からの各ビンにおける符号語数の差(たとえば、M_Delta(k)=M(k)-MM)として表現することができる。
【0067】
ある実施形態では、2つの整形方法がサポートされる。一つは「デフォルト整形器」と表わされ、Mfはすべてのビンに割り当てられる。もう一つは「適応的整形器」と表わされ、前述した適応的整形器を適用する。これら2つの方法は、特許文献6のように、特別なフラグ、たとえばsps_reshaper_adaptive_flagを使ってデコーダに信号伝達されることができる(たとえば、デフォルトの整形器にはsps_reshaper_adaptive_flag=0を使用し、適応的整形器にはsps_reshaper_adaptive_flag=1を使用)。
【0068】
本発明は、外部整形器、ループ内イントラのみ整形器、ループ内残差整形器、またはループ内ハイブリッド整形器のような、特許文献6で提案されている任意の整形器に適用可能である。一例として、
図2Aおよび
図2Bは、本発明の実施形態による、ハイブリッド・ループ内整形のための例示的なアーキテクチャを示す。
図2Aでは、アーキテクチャは、ループ内イントラのみ整形アーキテクチャ(図の上部)とループ内残差アーキテクチャ(図の下部)の両方からの要素を組み合わせている。このアーキテクチャの下では、イントラ・スライスについてはピクチャー・ピクセルに整形が適用され、一方、インター・スライスについては、整形は予測残差に適用される。エンコーダ(200_E)では、2つの新しいブロックが従来のブロック・ベースのエンコーダ(たとえば、HEVC)に追加される:前方整形関数を(たとえば、
図4に従って)推定するブロック(205)、前方ピクチャー整形ブロック(210-1)、および前方残差整形ブロック(210-2)である。これは、入力ビデオ(117)または予測残差の色成分の一つまたは複数に前方整形を適用する。いくつかの実施形態では、これらの2つの動作は、単一の画像整形ブロックの一部として実行されてもよい。デコーダ内の逆整形関数の決定に関連するパラメータ(207)は、符号化ビットストリーム(122)に埋め込まれることができるよう、ビデオ・エンコーダの無損失エンコーダ・ブロック(たとえば、CABAC 220)に渡されてもよい。イントラ・モードでは、イントラ予測(225-1)、変換と量子化(T&Q)、逆変換と逆量子化(Q
-1&T
-1)はすべて、整形されたピクチャーを使用する。両方のモードにおいて、DPB(215)に格納されたピクチャーは常に逆整形モードであり、これは、ループ・フィルタ(270-1、270-2)の前に、逆ピクチャー整形ブロック(たとえば265-1)または逆残差整形ブロック(たとえば265-2)を必要とする。
図2Aに示されるように、イントラ/インター・スライス・スイッチが、エンコードされるスライスのタイプに依存して、2つのアーキテクチャ間の切り換えを許容する。別の実施形態では、イントラ・スライスのためのループ内フィルタリングが、逆整形の前に実行されてもよい。
【0069】
デコーダ(200_D)では、従来のブロック・ベースのデコーダに以下の新しい規範的ブロックが追加される:エンコードされた整形関数パラメータ(207)に基づく前方整形関数および後方整形関数を再構成するブロック(250)(整形器デコード);逆整形関数をデコードされたデータに適用するブロック(265-1);前方整形関数および逆整形関数の両方を適用して、デコードされたビデオ信号(162)を生成するするブロック(265-2)。
たとえば、(265-2)では、再構成された値はRec=ILUT(FLUT(Pred)+Res)によって与えられる。ここで、FLUTは前方整形LUTを表わし、ILUTは逆整形LUTを表わす。
【0070】
いくつかの実施形態では、ブロック250および265に関連する動作は、単一の処理ブロックに組み合わされてもよい。
図2Bに示されるように、イントラ/インター・スライス・スイッチが、エンコードされたビデオ・ピクチャーにおけるスライスのタイプに依存して、2つのモードの間で切り換えを許容する。
【0071】
図3Aは、本発明のある実施形態による、整形アーキテクチャ(たとえば、200_E)を使ってビデオをエンコードするための例示的なプロセス(300_E)を示す。有効にされている整形がない場合(経路305)、エンコード(335)は、従来技術のエンコーダー(たとえば、HEVC)で知られているように進行する。整形が有効にされている場合(経路310)、エンコーダは、所定の(デフォルトの)整形関数(315)を適用するか、または(たとえば、
図4に記載のように)ピクチャー分析(320)に基づいて新たな整形関数を適応的に決定する(325)かのオプションを有していてもよい。整形アーキテクチャを使って画像をエンコードした(330)後、エンコードの残りの部分は、従来の符号化パイプライン(335)と同じ諸ステップに従う。適応整形が使用される場合(312)は、整形関数に関係するメタデータが、「整形器をエンコード」ステップ(327)の一部として生成される。
【0072】
図3Bは、本発明のある実施形態による、整形アーキテクチャ(たとえば、200_D)を使ってビデオをデコードするための例示的なプロセス(300_D)を示す。有効にされている整形がない場合(経路340)、従来のデコード・パイプラインのようにして、ピクチャーをデコードした(350)後、出力フレームが生成される(390)。整形が有効にされている場合(経路360)、デコーダは、所定の(デフォルトの)整形関数を適用する(375)か、または受領されたパラメータ(たとえば、207)に基づいて整形関数を適応的に決定する(380)かを決定する。整形アーキテクチャを用いたデコード(385)に続いて、デコードの残りの部分は、従来のデコード・パイプラインに従う。
【0073】
特許文献6および本明細書の上記に記載されているように、前方整形LUT FwdLUTは、統合によって構築されてもよく、一方、逆整形LUTは、前方整形LUT(FwdLUT)を使って後方マッピングに基づいて構築されてもよい。ある実施形態では、前方LUTは区分線形補間を使用して構築されてもよい。デコーダでは、逆整形は、後方LUTを使って直接、またはやはり線形補間によって、行なうことができる。区分線形LUTは、入力ピボット点と出力ピボット点に基づいて構築される。
【0074】
(X1,Y1)、(X2,Y2)を2つの入力ピボット点および各ビンについての対応する出力値とする。X1とX2の間の入力値Xは、次式によって補間できる:
Y=((Y2-Y1)/(X2-X1))*(X-X1)+Y1
固定小数点実装では、上記の式は次のように書き換えられる:
Y=((m*X+2FP_PREC-1)>>FP_PREC)+c
ここで、mおよびcは線形補間のためのスカラーおよびオフセットを表わし、FP_PRECは固定小数点精度に関連する定数である。
【0075】
例として、FwdLUTは次のように構築されうる:変数:
lutSize=(1<<BitDepthY)
とする。変数:
binNum=reshaper_model_number_bins_minus1+1
および
binLen=lutSize/binNum
とする。
i番目のビンについて、その2つの両端のピボット(たとえば、X1およびX2)は、X1=i*binLenおよびX2=(i+1)*binLenとして導出されうる。そして:
binsLUT[0]=0;
for(i=0; i<reshaper_model_number_bins_minus1+1; i++){
binsLUT[(i+1)*binLen]=binsLUT[i*binLen]+RspCW[i];
Y1=binsLUT[i*binLen];
Y2=binsLUT[(i+1)*binLen];
scale=((Y2-Y1)*(1<<FP_PREC)+(1<<(log2(binLen)-1)))>>(log2(binLen));
for(j=1;j<binLen;j++){
binsLUT[i*binLen+j]=Y1+((scale*j+(1<<(FP_PREC-1)))>>FP_PREC);
}
}
【0076】
FP_PRECは、変数の小数部の固定小数点精度を定義する(例:FP_PREC=14)。ある実施形態では、binsLUT[]は、FwdLUTの精度よりも高い精度で計算されてもよい。たとえば、binsLUT[]値は32ビット整数として計算されてもよいが、FwdLUTは16ビットでクリップされたbinsLUT値であってもよい。
【0077】
適応的な閾値導出
前述したように、整形の間に、符号語割り当ては、一つまたは複数の閾値(たとえば、TH、TH
U、TH
Lなど)を使用して調整されることがある。ある実施形態では、そのような閾値は、コンテンツ特性に基づいて適応的に生成されうる。
図5は、ある実施形態による、そのような閾値を導出するための例示的なプロセスを示す。
1)ステップ505では、入力画像のルミナンス範囲がN個のビン(たとえば、N=32)に分割される。たとえば、NをPIC_ANALYZE_CW_BINSとも記されることにする。
2)ステップ510において、各ビンについてルミナンス特性を計算するために画像分析を実行する。たとえば、各ビン内のピクセルの百分率(BinHist[b]、b=1,2,…,Nと記される)を計算してもよい。ここで、
BinHist[b]=100*(ビンb内の総ピクセル数)/(ピクチャー内の総ピクセル数) (10)
先に論じたように、画像特性のもう一つの良好なメトリックは、BinVar[b]と表わされる、各ビンにおけるピクセルの平均分散(または標準偏差)である。BinVar[b]は、式(2)および(3)に至る節に記載される諸ステップのように、「ブロック・モード」で計算されてもよい。あるいはまた、ブロック・ベースの計算は、ピクセル・ベースの計算で洗練することができる。たとえば、i番目のピクセルを中心とするm×mの近傍窓(たとえば、m=5)内のi番目のピクセルを囲むピクセルのグループに関連付けられた分散を、vf(i)と表わす。たとえば、
【数2】
が値x(i)をもつi番目のピクセルを取り囲むW
N=m*m窓(たとえば、m=5)内のピクセルの平均値を示すとすると、
【数3】
となる。生の分散値のダイナミックレンジを抑制するために、vf(i)=log10(vf(i)+1)のような任意的な非線形マッピングを使用することができる。次いで、上記分散因子が、各ビンにおける平均分散を次のように計算するために使用されうる。
【数4】
ここで、K
bはビンbのピクセル数を示す。
【0078】
3)ステップ515では、平均ビン分散(およびそれらの対応するインデックス)が、たとえば限定するものではないが降順に、ソートされる。たとえば、ソートされたBinVar値はBinVarSortDsd[b]に格納されてもよく、ソートされたビン・インデックスはBinIdxSortDsd[b]に格納されてもよい。一例として、Cコードを使用して、このプロセスは次のように記述されてもよい:
for(int b=0; b<PIC_ANALYZE_CW_BINS; b++
//初期化(未ソート)
{
BinVarSortDsd[b]=BinVar[b];
BinIdxSortDsd[b]=b;
}
//ソート(付録1のコード例を参照)
bubbleSortDsd(BinVarSortDsd,BinIdxSortDsd,PIC_ANALYZE_CW_BINS);
ソートされた平均ビン分散因子の例示的なプロットを
図6Aに示す。
【0079】
4)ステップ510で計算されたビン・ヒストグラム値が与えられると、ステップ520で、ソートされた平均ビン分散の順序に従って累積密度関数(cumulative density function、CDF)を計算し、格納する。
たとえば、CDFが配列BinVarSortDsdCDF[b]に格納される場合、ある実施形態では:
BinVarSortDsdCDF[0]=BinHist[BinIdxSortDsd[0]];
for(int b=1; b<PIC_ANALYZE_CW_BINS; b++)
{
BinVarSortDsdCDF[b]=BinVarSortDsdCDF[b-1]+BinHist[BinIdxSortDsd[b]];
}
図6Aのデータに基づく計算されたCDFの例示的なプロット(605)が
図6Bに示されている。CDF値対ソートされた平均ビン分散の対{x=BinVarSortDsd[b],y=BinVarSortDsdCDF[b]}は、「ピクチャー内にx以上の分散をもつy%のピクセルが存在する」または「ピクチャー内にx未満の分散をもつ(100-y)%のピクセルが存在する」と解釈できる。
5)最後に、ステップ525において、ソートされた平均ビン分散値の関数としてCDF、BinVarSortDsdCDF[BinVarSortDsd[b]]が与えられて、ビン分散および累積割合に基づいて閾値を定義することができる。
【0080】
単一の閾値または2つの閾値を決定するための例が、それぞれ
図6Cおよび
図6Dに示されている。一つの閾値(たとえばT
H)のみが使用されるとき、一例として、T
Hは、「ピクセルのk%がT
Hを有するような平均分散」として定義されてもよい。すると、T
Hは、k%(たとえば610)におけるCDFプロット(605)の交点(たとえば、BinVarSortDsdCDF=k%となるBinVarSortDsd[b]値)を見出すことによって計算できる。たとえば、
図6Cに示されるように、k=50についてはT
H=2.5である。次いで、BinVar[b]<THをもつビンのためにM
f個の符号語を割り当て、BinVar[b]≧THをもつビンのためにM
a個の符号語を割り当てることができる。大まかな規則として、より小さな分散をもつビンに対して、より多数の符号語を割り当てることが好ましい(たとえば、32個のビンで10ビットのビデオ信号について、M
f>32>M
a)。
【0081】
2つの閾値を使用するとき、TH
LおよびTH
Uを選択する例を
図6Dに示す。たとえば、一般性を失うことなく、TH
Lは80%のピクセルがvf≧TH
Lを有する分散として定義されてもよく(この例ではTH
L=2.3)、TH
Uは全ピクセルの10%がvf≧TH
Uを有する分散として定義されてもよい(この例ではTH
U=3.5)。これらの閾値が与えられると、BinVar[b]<TH
LをもつビンのためにM
f個の符号語を、BinVar[b]≧TH
UをもつビンのためにM
a個の符号語を割り当てることができる。TH
LとTH
Uの間のBinVarをもつビンについては、ビン当たりのもとの符号語数(たとえば、B=10について32)を使用してもよい。
【0082】
上記の技法は、2つ以上の閾値を有する場合に容易に拡張できる。この関係は、符号語の数(Mf、Maなど)を調整するためにも使用できる。大まかな規則として、低分散のビンでは、PSNRを押し上げる(そしてMSEを下げる)ためにより多くの符号語を割り当てるべきであり;高分散のビンについては、ビットを節約するためにより少数の符号語を割り当てるべきである。
【0083】
ある実施形態では、特定のコンテンツについてパラメータのセット(たとえば、THL、THU、Ma、Mf等)が、たとえば網羅的な手作業でのパラメータ・チューニングを通じて、手動で取得された場合、この自動方法は、最適な手動パラメータを自動的に設定するために、各コンテンツを範疇分けするための決定木を設計するために適用されうる。たとえば、コンテンツ・カテゴリーは:映画、テレビ、SDR、HDR、漫画、自然、アクション等を含む。
【0084】
複雑さを低減するために、ループ内整形は、多様な方式を使って制約されうる。ループ内整形がビデオ符号化標準で採用される場合、これらの制約は、デコーダの単純化を保証するために規範的であるべきである。たとえば、ある実施形態では、ルーマ整形は、ある種のブロック符号化サイズについては無効にされてもよい。たとえば、nTbW*nTbH<THであるとき、インター・スライスにおけるイントラおよびインター整形器モードを無効にすることができる。ここで、変数nTbWは変換ブロック幅を指定し、変数nTbHは変換ブロック高さを指定する。たとえば、TH=64については、サイズ4×4、4×8、および8×4のブロックは、インター符号化されたスライス(またはタイル)におけるイントラ・モードおよびインター・モードの両方の整形について、無効にされる。
【0085】
同様に、別の実施形態では、インター符号化されたスライス(またはタイル)におけるイントラ・モードにおいてルーマに基づくクロマ残差スケーリングを無効にしてもよい。または、別々のルーマおよびクロマ分割ツリーを有することが有効にされるときも無効にしてもよい。
【0086】
他の符号化ツールとの相互作用
ループ・フィルタリング
特許文献6では、ループ・フィルタが、もとのピクセル・ドメインまたは整形ピクセル・ドメインのいずれかで動作できることが記載されている。ある実施形態では、ループ・フィルタリングは、(ピクチャー整形後に)もとのピクセル・ドメインで実行されることが提案される。たとえば、ハイブリッドのループ内整形アーキテクチャ(200_Eおよび200_D)では、イントラ・ピクチャーについては、ループ・フィルタ(270-1)の前に逆整形(265-1)を適用する必要がある。
【0087】
図2Cおよび
図2Dは、ループ・フィルタリング(270)後、デコードされたデータをデコード・ピクチャー・バッファ(decoded picture buffer、DPB)(260)に格納する直前に、逆整形(265)が実行される代替的なデコーダ・アーキテクチャ(200B_Dおよび200C_D)を示す。提案された実施形態では、200_Dのアーキテクチャと比較して、インター・スライスについての逆残差整形公式が修正され、ループ・フィルタリング(270)後に逆整形が(たとえば、InvLUT()関数またはルックアップテーブルを介して)実行される。このようにして、イントラ・スライスおよびインター・スライスの両方について逆整形はループ・フィルタリング後に実行され、イントラ符号化されたCUおよびインター符号化されたCUの両方について、ループ・フィルタリング前の再構成されたピクセルは整形ドメインにある。逆整形(265)後は、参照DPBに格納された出力サンプルはすべてもとのドメインにある。そのようなアーキテクチャは、ループ内整形のためのスライス・ベースの適応およびCTUベースの適応の両方を許容する。
【0088】
図2Cおよび
図2Dに示されるように、ある実施形態では、ループ・フィルタリング(270)は、イントラ符号化されたCUおよびインター符号されたCUの両方について、整形ドメインにおいて実行され、逆ピクチャー整形(265)は、1回のみ生起し、よって、イントラ符号化されたCUおよびインター符号化されたCUの両方について、統一された、より単純なアーキテクチャを呈する。
【0089】
イントラ符号化されたCUをデコードする(200B_D)ために、整形された近隣ピクセルに対してイントラ予測(225)が実行される。残差Res、および予測されたサンプルPredSampleを与えられて、再構成されたサンプル(227)は次のように導出される:
RecSample=Res+PredSample (14)
再構成されたサンプル(227)を与えられて、ループ・フィルタリング(270)および逆ピクチャー整形(265)が適用されて、DPB(260)に格納されるRecSampleInDPBサンプルが導出される。ここで、
RecSampleInDPB=InvLUT(LPF(RecSample)))=
=InvLUT(LPF(Res+PredSample))) (15)
ここで、InvLUT()は、逆整形関数または逆整形ルックアップテーブルを示し、LPF()は、ループ・フィルタリング動作を示す。
【0090】
従来の符号化では、インター/イントラ・モードの決定は、もとのサンプルと予測サンプルとの間の歪み(distortion)関数(dfunc())を計算することに基づく。そのような関数の例は、平方誤差和(SSE)、差分絶対値和(SAD)、およびその他を含む。整形を使用するとき、エンコーダ側(図示せず)では、CU予測およびモード決定は、整形ドメインで実行される。すなわち、モード決定のために、
distortion=dfunc(FwdLUT(SrcSample)-RecSample) (16)
ここで、FwdLUT()は前方整形関数(またはLUT)を表わし、SrcSampleはもとの画像サンプルを表わす。
【0091】
インター符号化されたCUについて、デコーダ側(たとえば、200C_D)で、インター予測は、DPB内の非整形ドメインの参照ピクチャーを使用して実行される。次いで、再構成ブロック275では、再構成されたピクセル(267)は次のように導出される:
RecSample=(Res+FwdLUT(PredSample)) (17)
再構成されたサンプル(267)が与えられて、ループ・フィルタリング(270)および逆ピクチャー整形(265)が適用されて、DPBに格納されるRecSampleInDPBサンプルが導出される。ここで、
RecSampleInDPB=InvLUT(LPF(RecSample)))=InvLUT(LPF(Res+FwdLUT(PredSample)))) (18)
【0092】
エンコーダ側(図示せず)では、イントラ予測は、整形ドメインで次のように実行される。
Res=FwdLUT(SrcSample)-PredSample (19a)
ここで、予測のために使用されるすべての近傍サンプル(PredSample)はすでに整形ドメインにあると想定されている。インター予測(たとえば、動き補償を使用する)は、非整形ドメイン(すなわち、DPBからの参照ピクチャーを直接使用する)において実行される。すなわち、
PredSample=MC(RecSampleinDPB) (19b)
ここで、MC()は動き補償関数を表わす。動き推定および残差が生成されない高速モード決定のためには、歪みを次式を使って計算できる:
distortion=dfunc(SrcSample-PredSample)
しかしながら、残差が生成されるフル・モード決定のためには、モード決定は整形ドメインで実行される。すなわち、フル・モード決定については、
distortion=dfunc(FwdLUT(SrcSample)-RecSample) (20)
【0093】
ブロック・レベルの適応
先に説明したように、提案されたループ内整形器は、CUレベルで整形を適応させることを許容し、たとえば、必要に応じて変数CU_reshaperをオンまたはオフに設定する。同じアーキテクチャの下では、インター符号化されるCUについては、CU_reshaper=offのとき、このインター符号化されたCUについてCU_reshaperフラグがオフに設定されていても、再構成されたピクセルは整形ドメインにある必要がある。
RecSample=FwdLUT(Res+PredSample) (21)
よって、イントラ予測は、常に整形ドメインの近隣ピクセルを有する。DPBピクセルは、次のように導出できる:
RecSampleInDPB=InvLUT(LPF(RecSample)))=
=InvLUT(LPF(FwdLUT(Res+PredSample))) (22)
【0094】
イントラ符号化されたCUについては、エンコード・プロセスに依存して、2つの代替的な方法が提案される:
1)すべてのイントラ符号化されたCUは、CU_reshaper=onで符号化される。この場合、すべてのピクセルがすでに整形ドメインにあるので、追加の処理は必要ない。
2)いくつかのイントラ符号化されたCUは、CU_reshaper=offを使用して符号化できる。この場合、CU_reshaper=offについては、イントラ予測を適用するとき、イントラ予測がもとのドメインで実行され、最終的な再構成されたピクセルは整形ドメインにある必要があるように、近隣ピクセルに対して逆整形を適用する必要がある。すなわち、
RecSample=FwdLUT(Res+InvLUT(PredSample)) (23)
そして、
RecSampleInDPB=InvLUT(LPF(RecSample)))=
=InvLUT(LPF(FwdLUT(Res+InvLUT(PredSample))))) (24)
【0095】
一般に、提案された諸アーキテクチャは、ループ内イントラのみ整形、予測残差のみのためのループ内整形、または、イントラのループ内整形およびインターの残差整形の両方を組み合わせたハイブリッド・アーキテクチャのような、多様な組み合わせで使用されうる。たとえば、ハードウェア・デコード・パイプラインにおけるレイテンシーを短縮するために、インター・スライス・デコードについては、逆整形の前にイントラ予測を実行する(すなわち、インター・スライス内でイントラCUをデコードする)ことができる。そのような実施形態の例示的なアーキテクチャ(200D_D)が
図2Eに示されている。再構成モジュール(285)では、式(17)からのインターCUについては(たとえば、Muxが280および282からの出力を有効にする)、
RecSample=(Res+FwdLUT(PredSample))
ここで、FwdLUT(PredSample)は、インター予測器(280)およびそれに続く前方整形(282)の出力を示す。そうではなく、イントラCUについては(たとえば、Muxが284からの出力を有効にする)、再構成モジュール(285)の出力は
RecSample=(Res+IPredSample)
となる。ここで、IPredSampleはイントラ予測ブロック(284)の出力を示す。逆整形ブロック(265-3)は
Y
CU=InvLUT[RecSample]
を実行する。
【0096】
インター・スライスについて整形ドメインでイントラ予測を適用することは、
図2C(逆整形がループ・フィルタリング後に行われる)および
図2Dに示されるものを含む他の実施形態にも適用可能である。組み合わされたインター/イントラ予測モード(すなわち、再構成の間に、いくつかのサンプルは、インター符号化されたブロックからであり、いくつかは、イントラ符号化されたブロックからである場合)においては特別な注意が払われる必要がある。そのようなすべての実施形態では、インター予測はもとのドメインだが、イントラ予測は整形ドメインにあるからである。インター予測およびイントラ予測された符号化単位の両方からのデータを組み合わせるときは、予測は2つのドメインのいずれかで実行されうる。たとえば、組み合わされたインター/イントラ予測モードが整形されたドメインで実行されるときは、
PredSampleCombined=PredSampeIntra+FwdLUT(PredSampleInter)
RecSample=Res+PredSampleCombined
すなわち、もとのドメイン内のインター符号化されたサンプルは、加算前に整形される。そうではなく、組み合わされたインター/イントラ予測モードがもとのドメインで行なわれるときは:
PredSampleCombined=InvLUT(PredSampeIntra)+PredSampleInter
RecSample=Res+FwdLUT(PredSampleCombined)
すなわち、イントラ予測されたサンプルはもとのドメインになるように逆整形される。
【0097】
同様の配慮は、対応するエンコード実施形態にも適用可能である。というのも、エンコーダ(たとえば、200_E)が対応するデコーダにマッチするデコーダ・ループを含むからである。先に論じたように、式(20)は、モード決定が整形ドメインにおいて実行される実施形態を記述する。別の実施形態では、モード決定は、もとのドメインで実行されてもよい、すなわち:
distortion=dfunc(SrcSample-InvLUT(RecSample))
【0098】
ルーマに基づくクロマQPオフセットまたはクロマ残差スケーリングについては、平均CUルーマ値
【数5】
は常に最小レイテンシーについての予測値(再構成値の代わりに)を使って計算できる。
【0099】
クロマQP導出
特許文献6と同様に、整形曲線によって生じるルーマとクロマの関係をバランスさせるために、同じ提案されたchromaDQP導出プロセスを適用してもよい。ある実施形態では、各ビンについての符号語割り当てに基づいて、区分的なクロマDQP値を導出することができる。たとえば:
k番目のビンについて
scalek=(Mk/Ma); (25)
chromaDQP=6*log2(scalek);
end
【0100】
エンコーダ最適化
特許文献6に記載されているように、lumaDQPが有効にされているときは、ピクセル・ベースの重み付けされた歪みを使用することが推奨される。整形が使用されるとき、一例では、必要な重みは、整形関数(f(x))に基づいて調整される。たとえば:
Wrsp=f'(x)2 (26)
ここで、f'(x)は整形関数f(x)の勾配を表わす。
【0101】
別の実施形態では、各ビンについての符号語割り当てに基づいて直接、区分的な重みを導出することができる。たとえば;
k番目のビンについて、
Wrsp(k)=(Mk/Ma)2 (27)
【0102】
クロマ成分について、重みは1または何らかのスケーリング因子sfに設定されることができる。クロマ歪みを軽減するために、sfを1より大きく設定することができる。クロマ歪みを増加させるために、sfを1より大きく設定することができる。ある実施形態では、sfは、式(25)を補償するために使用できる。chromaDQPは整数にしか設定できないので、sfを使ってchromaDQPの小数部分を収容することができる。よって:
sf=2((chromaDQP-INT(chromaDQP))/3)
【0103】
別の実施形態では、クロマ歪みを制御するために、ピクチャーパラメータセット(Picture Parameter Set、PPS)またはスライス・ヘッダにおいて、chromaQPOffset値を明示的に設定することができる。
【0104】
整形器曲線またはマッピング関数は、ビデオ・シーケンス全体について固定される必要はない。たとえば、量子化パラメータ(QP)または目標ビットレートに基づいて適応されることができる。ある実施形態では、ビットレートが低いときは、より積極的な整形器曲線を使用し、ビットレートが比較的高いときは、それほど積極的でない整形を使用することができる。たとえば、10ビット・シーケンスで32個のビンが与えられるとき、各ビンは初期には32の符号語をもつ。ビットレートが比較的低いときは、各ビンについての符号語を選択するために、[28 40]の間の符号語を使用することができる。ビットレートが高いときは、各ビンについて[31 33]の間で符号語を選択することができ、あるいは単に恒等整形器曲線を使用することができる。
【0105】
スライス(またはタイル)を与えられて、スライス(タイル)レベルでの整形は、符号化効率を複雑さとトレードオフしうる多様な仕方で実行できる。それには:1)イントラ・スライスのみでの整形を無効にすること;2)特定の時間的レベル(単数または複数)でのインター・スライスのような特定のインター・スライスにおいて、または参照ピクチャーのために使用されないインター・スライスにおいて、または重要性が低い参照ピクチャーであると考えられるインター・スライスにおいて、整形を無効にすること、が含まれる。そのようなスライス適応は、QP/レート依存性でもありうるので、異なるQPまたはビットレートについては異なる適応規則が適用されうる。
【0106】
エンコーダでは、提案されるアルゴリズムの下で、各ビンについて分散が計算される(たとえば、式(13)のBinVar(b))。その情報に基づいて、各ビン分散に基づいて符号語を割り当てることができる。ある実施形態では、BinVar(b)は、各ビンb内の符号語の数に逆線形にマッピングされてもよい。別の実施形態では、ビンb内の符号語の数を逆マッピングするために、(BinVar(b))
2、sqrt(BinVar(b))などの非線形マッピングが使用されてもよい。本質的には、このアプローチは、エンコーダが、先に使用されたより単純なマッピングを超えて、各ビンに任意の符号語を適用することを許容する。ここで、エンコーダは、2つのアッパーレンジ値(upper-range values)M
fおよびM
a(たとえば、
図6Cを参照)または3つのアッパーレンジ値M
f、32またはM
a(たとえば、
図6Dを参照)を使用して、各ビンにおいて符号語を割り当てている。
【0107】
一例として、
図6Eは、BinVar(b)値に基づく2つの符号語割り当て方式を示しており、プロット610は、2つの閾値を使用する符号語割り当てを示し、一方、プロット620は、逆線形マッピングを使用する符号語割り当てを示す。ここで、あるビンについての符号語割り当ては、そのBinVar(b)値に反比例する。たとえば、ある実施形態では、特定のビン内の符号語の数(bin_cw)を導出するために次のコードが適用されてもよい:
alpha=(minCW-maxCW)/(maxVar-minVar);
beta=(maxCW*maxVar-minCW*minVar)/(maxVar-minVar);
bin_cw=round(alpha*bin_var+beta);,
ここで、minVarはすべてのビンにわたる最小の分散を表わし、maxVarはすべてのビンにわたる最大の分散を表わし、minCW、maxCWは整形モデルによって決定されるビン当たりの符号語の最小数と最大数を表わす。
【0108】
ルーマに基づくクロマQPオフセットの洗練
特許文献6では、ルーマとクロマの間の相互作用を補償するために、追加的なクロマQPオフセット(chromaDQPまたはcQPOと記される)とルーマに基づくクロマ残差スケーラー(cScale)が定義された。たとえば:
chromaQP=QP_luma+chromaQPOffset+cQPO (28)
ここで、chromaQPOffsetはクロマQPオフセットを表わし、QP_lumaは符号化単位についてのルーマQPを表わす。特許文献6に示されているように、ある実施形態では、
【数6】
ここで、FwdLUT'はFwdLUT()の傾き(一階微分)を表わす。インター・スライスについては、 ̄Y
CU〔 ̄付きのY
CUを便宜上こう記す〕はCUの平均予測ルーマ値を表わす。イントラ・スライスについては、 ̄Y
CUはCUの平均予測ルーマ値の逆整形値を表わす。二連ツリー符号化(dual tree coding)がCUのために使用される場合(すなわち、ルーマおよびクロマ成分が2つの別々の符号化ツリーをもち、よって、クロマ符号化が始まる前にルーマ再構成が利用可能)、CUの平均再構成ルーマ値がcQPO値を導出するために使用できる。cScaleスケーリング因子は次のように定義された。
【数7】
ここで、y=pow(2,x)はy=2
x関数を表わす。
【0109】
ルーマ由来のQP値(qPiと記される)と最終クロマQP値(QpCと記される)との間の非線形関係を与えられれば(たとえば、非特許文献4におけるテーブル8-10「1に等しいChromaArrayTypeについてのqPiの関数としてのQpCの指定」参照)、ある実施形態において、cScaleは、さらに次のように調整されてもよい。
【0110】
たとえば非特許文献4のテーブル8-10のように、調整されたルーマとクロマQP値の間のマッピングをf_QPi2QPc()と記す。すると、
chromaQP_actual=f_QPi2QPc[chromaQP]=
=f_QPi2QPc[QP_luma+chromaQPOffset+cQPO] (31)
クロマ残差をスケーリングするためには、cQPOを適用する前と、cQPOを適用した後の両方の実際のクロマ符号化QPの間の現実の差に基づいて、スケールを計算する必要がある:
QPcBase=f_QPi2QPc[QP_luma+chromaQPOffset];
QPcFinal=f_QPi2QPc[QP_luma+chromaQPOffset+cQPO]; (32)
cQPO_refine=QPcFinal-QpcBase;
cScale=pow(2,-cQPO_refine/6)
【0111】
別の実施形態では、chromaQPOffsetもcScaleに吸収することができる。たとえば、
QPcBase=f_QPi2QPc[QP_luma];
QPcFinal=f_QPi2QPc[QP_luma+chromaQPOffset+cQPO]; (33)
cTotalQPO_refine=QPcFinal-QpcBase;
cScale=pow(2,-cTotalQPO_refine/6)
【0112】
一例として、特許文献6に記載されているように、ある実施形態では:
CSCALE_FP_PREC=16が精度パラメータを表わすとする。
・順スケーリング:クロマ残差が生成された後、変換および量子化の前に:
C_Res=C_orig-C_pred
C_Res_scaled=C_Res*cScale+(1<<(CSCALE_FP_PREC-1)))>>CSCALE_FP_PREC
・逆スケーリング:クロマ逆量子化および逆変換後、ただし再構成の前に:
C_Res_inv=(C_Res_scaled<<CSCALE_FP_PREC)/cScale
C_Reco=C_Pred+C_Res_inv;
【0113】
代替的な実施形態では、ループ内クロマ整形のための動作は、次のように表されてもよい。エンコーダ側では、各CUまたはTUのクロマ成分Cx(たとえばCbまたはCr)の残差(CxRes=CxOrg-CxPred)について、
【数8】
ここで、CxResScaledは、変換および量子化されるCUのCbまたはCr残差信号をスケーリングしたものである。デコーダ側では、CxResScaledは、逆量子化および変換後のクロマ残差信号をスケーリングしたものであり、
【数9】
である。クロマ成分の最終的な再構成は
CxRec=CxPred+CxRes (36)
となる。このアプローチは、デコーダが、シンタックス構文解析の直後にクロマ・デコードのための逆量子化および変換演算を開始することを許容する。CUのために使用されるcScale値は、CbおよびCr成分によって共有されてもよく、式(29)および(30)から、次のように導出されてもよい:
【数10】
ここで、 ̄Y
CUは、インター・スライスにおいては(二連ツリー符号化が使用されていないため、再構成されたルーマが利用可能でない)現在のCUの平均予測ルーマ値であり、 ̄Y
CUは、イントラ・スライスにおいては(二連ツリー符号化が使用される)現在のCUの平均再構成ルーマ値である。ある実施形態では、スケールは、16ビットの固定点整数で計算され、記憶され、エンコーダ側およびデコーダ側両方のスケーリング演算は、固定点整数算術で実装される。
【数11】
は前方整形関数の一回微分を表わす。曲線の区分線形表現を仮定すると、Yがk番目のビンに属するとき、FwdLUT'(Y)=(CW[k]/32)となる。ハードウェア・レイテンシーを短縮するために、別の実施形態(
図2E参照)では、 ̄Y
CUは、スライスのタイプおよび二連ツリーが使用されるか否かにかかわらず、イントラ・モードおよびインター・モードの両方について、現在のCUの平均予測ルーマ値を使用することができる。別の実施形態では、 ̄Y
CUは、イントラおよび/またはインター・モードについて、再構成されたCU(現在のCUの上の行および/または左の列におけるものなど)を使用して導出できる。別の実施形態では、領域ベースの平均、中央値など、ルーマ値またはcScale値は、高レベルのシンタックスを使用して、ビットストリームにおいて明示的に送られることができる。
【0114】
cScaleの使用は、ループ内整形のためのクロマ残差スケーリングに限定されない。同じ方法は、ループ外の整形にも適用できる。ループ外の整形では、cScaleはクロマ・サンプルのスケーリングのために使用してもよい。演算は、ループ内アプローチと同じである。
【0115】
エンコーダ側では、クロマRDOQを計算するとき、(QPオフセットを使用するときまたはクロマ残差スケーリングを使用するときのいずれか)クロマ調整のためのラムダ修正子(lambda modifier)も、洗練されたオフセットに基づいて計算される必要がある:
Modifier=pow(2,-cQPO_refine/3);
New_lambda=Old_lambda/Modifier (38)
【0116】
式(35)に記されているように、cScaleを使用することは、デコーダにおける除算を必要とすることがある。デコーダ実装を単純化するために、同じ機能を、エンコーダにおける除算を使用して実装し、デコーダではより単純な乗算を適用することにしてもよい。たとえば、
cScaleInv=(1/cScale)
とすると、例として、エンコーダで
cResScale=CxRes*cScale=CxRes/(1/cScale)=CxRes/cScaleInv
とし、デコーダで
CxRes=cResScale/cScale=CxRes*(1/cScale)=CxRes*cScaleInv
とする。
【0117】
ある実施形態では、各ルーマ依存のクロマ・スケーリング因子は、各ルーマ符号語値についてではなく、区分線形(piece-wise linear、PWL)表現における対応するルーマ範囲について計算されてもよい。よって、クロマ・スケーリング因子は、1024エントリーLUT(10ビットのルーマ符号語の場合)(たとえば、cScale[Y])の代わりに、より小さいLUT(たとえば、16または32個のエントリー)、たとえばcScaleInv[binIdx]に格納されてもよい。エンコーダ側とデコーダ側のスケーリング演算は、固定小数点整数算術で次のように実装されてもよい。
c'=sign(c)*((abs(c)*s+2CSCALE_FP_PREC-1)>>CSCALE_FP_PREC)
ここで、cはクロマ残差、sはcScaleInv[binIdx]からのクロマ残差スケーリング因子、binIdxは対応する平均ルーマ値によって決定され、CSCALE_FP_PRECは精度に関する定数値である。
【0118】
ある実施形態では、前方整形関数は、N個の等しいセグメント(たとえば、N=8、16、32など)を使用して表現されてもよいが、逆表現は、非線形セグメントを含むことになる。実装の観点からは、等しいセグメントを用いた逆整形関数の表現を有することが望ましいが、そのような表現を強制することは、符号化効率の損失を引き起こす可能性がある。妥協として、ある実施形態では、等しいセグメントと等しくないセグメントの両方を組み合わせる「混合」PWL表現を用いて逆整形関数を構築することができてもよい。たとえば、8つのセグメントを使用するとき、まず、全範囲を2つの等しいセグメントに分割し、次いで、これらのそれぞれを4つの等しくないセグメントに細分してもよい。あるいはまた、全範囲を4つの等しいセグメントに分割し、次いで、それぞれの1つを2つの等しくないセグメントに分割してもよい。あるいはまた、まず、全範囲をいくつかの不均等なセグメントに分割し、次いで、各不均等なセグメントを複数の等しいセグメントに分割してもよい。あるいはまた、まず、全範囲を2つの等しいセグメントに分割し、次に、等しい各セグメントを等しいサブセグメントに分割し、サブセグメントの各グループにおけるセグメント長は同じではないのでもよい。
【0119】
たとえば、限定されるものではないが、1024個の符号語を用いて:a)それぞれが150個の符号語をもつ4つのセグメントおよびそれぞれが212個の符号語をもつ2つのセグメント、またはb)それぞれが64個の符号語をもつ8つのセグメントおよびそれぞれが128個の符号語をもつ4つのセグメントを有することができる。セグメントのそのような組み合わせの一般的な目的は、符号値が与えられたときにPWL区分インデックスを識別するのに必要な比較の数を減らし、それによりハードウェアおよびソフトウェア実装を単純化することである。
【0120】
ある実施形態では、クロマ残差スケーリングに関連するより効率的な実装のために、以下の変形が可能にされてもよい:
・別々のルーマ/クロマ・ツリーが使用されるときはクロマ残差スケーリングを無効にする。
・2×2のクロマについてはクロマ残差スケーリングを無効にする。
・イントラおよびインター符号化された単位について、再構成信号ではなく予測信号を使用する。
【0121】
一例として、ルーマ成分を処理するための
図2Eに示されたデコーダ(200D_D)が与えられて、
図2Fは、対応するクロマ・サンプルを処理するための例示的なアーキテクチャ(200D_DC)を示す。
【0122】
図2Fに示されるように、
図2Eと比較して、クロマを処理するときに以下の変更がされる:
・前方および逆方向の整形ブロック(282および265-3)は使用されない。
・新しいクロマ残差スケーリング・ブロック(288)があり、実質的にルーマについての逆整形ブロック(265-3)を置き換える。
・再構成ブロック(285-C)は、式(36): CxRec=CxPred+CxResに記載されているように、もとのドメインの色残差を扱うように修正される。
【0123】
式(34)から、デコーダ側では、CxResScaledは逆量子化および変換後(ブロック288の前)の抽出されたスケーリングされたクロマ残差信号を表わし、
CxRes=CxResScaled*CScaleInv
は、CxRec=CxPred+CxResを計算するために再構成ユニット(285-C)によって使用されるクロマ残差スケーリング・ブロック(288)によって生成された、再スケーリングされたクロマ残差を表わすとする。ここで、CxPredはイントラ(284)またはインター(280)予測ブロックによって生成される。
【0124】
変換ユニット(TU)のために使用される値は、CbおよびCr成分によって共有されてもよく、次のように計算されることができる:
・イントラ・モードであれば、イントラ予測されたルーマ値の平均を計算する;
・インター・モードであれば、前方整形されたインター予測されたルーマ値の平均を計算する。すなわち、平均ルーマ値は、整形ドメインで計算される。
・組み合わされたマージおよびイントラ予測であれば、組み合わされた予測ルーマ値の平均を計算する。たとえば、組み合わされた予測ルーマ値は、付録2の8.4.6.6節に従って計算されてもよい。
・ある実施形態では、avgY'TUに基づいてCScaleInvを計算するためにLUTを適用することができる。あるいはまた、整形関数の区分線形(PWL)表現が与えられて、値avgY'TUが逆マッピングPWLに属するインデックスidxを見つけることができる。
・次いで、CScaleInv=cScaleInv[idx]
ITUおよびISOによって現在開発中の多用途ビデオ符号化(Versatile Video Coding)コーデック(非特許文献8)に適用できる例示的実装は、付録2(たとえば、8.5.5.1.2節参照)に見出すことができる。
【0125】
二連ツリーを用いたイントラ・スライスについてのルーマ・ベースのクロマ残差スケーリングを無効にすると、符号化効率における若干の損失が生じる可能性がある。クロマ整形の効果を改善するために、以下の方法が使用されてもよい:
1.クロマ・スケーリング因子は、ルーマ・サンプル値の平均または中央値に依存して、フレーム全体について同じに保たれてもよい。これにより、クロマ残差スケーリングについてのルーマに対するTUレベルの依存性が除去される。
2.クロマ・スケーリング因子は、近隣のCTUからの再構成されたルーマ値を用いて導出できる。
3.エンコーダは、ソース・ルーマ・ピクセルに基づいてクロマ・スケーリング因子を導出し、それをCU/CTUレベルでビットストリームにおいて送信することができる(たとえば、整形関数の区分表現へのインデックスとして)。次いで、デコーダは、ルーマ・データに依存することなく、整形関数からクロマ・スケーリング因子を抽出しうる。
・CTUについてのスケール因子は、イントラ・スライスについてのみ導出され、送信されることができるが、インター・スライスについても使用されることができる。追加的な信号伝達コストは、イントラ・スライスについてのみ発生し、よって、ランダムアクセスにおける符号化効率には影響を及ぼさない。
4.クロマは、ルーマとしてフレーム・レベルで整形されることができ、ルーマ整形曲線は、ルーマとクロマの間の相関分析に基づいて、ルーマ整形曲線から導出される。これにより、クロマ残差スケーリングが完全になくされる。
【0126】
delta_qp適用
AVCおよびHEVCでは、パラメータdelta_qpが符号化ブロックについてのQP値を修正することが許容されている。ある実施形態では、整形器内のルーマ曲線を使用して、delta_qp値を導出することができる。各ビンについての符号語割り当てに基づいて、区分的なルーマDQP値を導出することができる。たとえば:
k番目のビンについて、
scalek=(Mk/Ma); (39)
lumaDQPk=INT(6*log2(scalek))
ここで、INT()にはCEIL()、ROUND()またはFLOOR()でありうる。エンコーダは、ルーマ(luma)の関数、たとえばaverage(luma)、min(luma)、max(luma)などを使用して、そのブロックについてのルーマ値を見出し、次いで、対応するlumaDQP値をそのブロックのために使用することができる。式(27)から、レート‐歪みの利益を得るためには、モード決定において重み付けされた歪みを使用して、
Wrsp(k)=scalek
2
と設定することができる。
【0127】
整形およびビン数についての考慮事項
典型的な10ビット・ビデオ符号化では、整形マッピングのために少なくとも32個のビンを使用することが好ましいが、デコーダ実装を単純化するために、ある実施形態では、より少数のビン、たとえば16個またはさらには8個のビンを使用してもよい。シーケンスを解析し、分布符号語を導出するためにエンコーダがすでに32個のビンを使用している可能性があることを考えると、もとの32ビンの符号語分布を再利用し、それぞれの32個のビン内で、対応する16個のビン2つを加算することによって、16ビンの符号語を導出することができる。すなわち、
For i=0 to 15
CWIn16Bin[i]=CWIn32Bin[2i]+CWIn32Bin[2i+1]
【0128】
クロマ残差スケーリング因子については、単に符号語を2で割って、32ビンのchromaScalingFactorLUTをポイントすることができる。たとえば、
In32Bin[32]={0 0 33 38 38 38 38 38 38 38 38 38 38 38 38 38 38 33 33 33 33 33 33 33 33 33 33 33 33 33 0 0}
を与えられると、対応する16ビンCW割り当ては、
CWIn16Bin[16]={ 0 71 76 76 76 76 76 76 71 66 66 66 66 66 66 0}
となる。このアプローチは、たとえば8個など、一層少数のビンを扱うように拡張できる。
For i=0 to 7
CWIn8Bin[i]=CWIn16Bin[2i]+CWIn16Bin[2i+1]
【0129】
有効な符号語の狭い範囲(たとえば、10ビット信号についての[64,940]、8ビット信号についての[64,235])を使用するとき、最初と最後のビンがリザーブされている符号語へのマッピングを考慮しないよう注意すべきである。たとえば、10ビット信号について、8個のビンでは、各ビンは1024/8=128個の符号語をもち、最初のビンは[0,127]であるが、標準的な符号語範囲は[64,940]であるため、最初のビンは符号語[64,127]のみを考慮すべきである。入力ビデオがフルレンジ[0,2bitdepth-1]より狭い範囲をもち、最初と最後のビンを処理するときに不正な符号語を生成しないように特別な注意を払うべきであることをデコーダに通知するために、特別なフラグ(たとえば、video_full_range_flag=0)が使用されてもよい。これはルーマおよびクロマの整形の両方に適用できる。
【0130】
一例として、限定するものではないが、付録2は、
図2C、
図2E、および
図2Fに示されたアーキテクチャを使用する一実施形態によるISO/ITUビデオ多用途コーデック(Video Versatile Codec、VVC)(非特許文献8)における整形をサポートするための例示的なシンタックス構造および関連するシンタックス要素を提供する。ここで、前方整形関数は16個のセグメントを含む。
参考文献
本明細書に挙げられている参考文献のそれぞれは、ここに参照によりその全体において組み込まれる。
【文献】"Exploratory Test Model for HDR extension of HEVC", K. Minoo et al., MPEG output document, JCTVC-W0092 (m37732), 2016, San Diego, USA
【文献】PCT出願PCT/US2016/025082, In-Loop Block-Based Image Reshaping in High Dynamic Range Video Coding、G-M. Su、出願日March 30, 2016, WO2016/164235としても公開
【文献】米国特許出願15/410,563, Content-Adaptive Reshaping for High Codeword representation Images、T. Lu et al.、出願日Jan. 19, 2017
【文献】ITU-T H.265, "High efficiency video coding," ITU, Dec. 2016
【文献】PCT出願PCT/US2016/042229, Signal Reshaping and Coding for HDR and Wide Color Gamut Signals、P. Yin et al.、出願日July 14, 2016, WO2017/011636としても公開
【文献】PCT特許出願PCT/US2018/040287, Integrated Image Reshaping and Video Coding、T. Lu et al.、出願日June 29, 2018
【文献】J. Froehlich et al., "Content-Adaptive Perceptual Quantizer for High Dynamic Range Images," 米国特許出願公開第2018/0041759号、Feb. 08, 2018
【文献】B. Bross, J. Chen, and S. Liu, "Versatile Video Coding (Draft 3)," JVET output document, JVET-L1001, v9, uploaded, Jan. 8, 2019
【0131】
例示的なコンピュータ・システム実装
本発明の実施形態は、コンピュータ・システム、電子回路およびコンポーネントにおいて構成されるシステム、マイクロコントローラなどの集積回路(IC)、フィールド・プログラマブル・ゲート・アレイ(FPGA)、または他の構成可能またはプログラマブルなロジック・デバイス(PLC)、離散時間またはデジタル信号プロセッサ(DSP)、特定用途向けIC(ASIC)、および/またはかかるシステム、デバイスまたはコンポーネントの一つまたは複数を含む装置を用いて実装されうる。コンピュータおよび/またはICは、ここに記載されるような画像の信号整形および符号化に関する命令を実行、制御、または執行してもよい。コンピュータおよび/またはICは、本明細書に記載される信号整形および符号化プロセスに関連する多様なパラメータまたは値の任意のものを計算しうる。画像およびビデオの実施形態は、ハードウェア、ソフトウェア、ファームウェア、およびそれらのさまざまな組み合わせで実装されうる。
【0132】
本発明のある種の実装は、プロセッサに本発明の方法を実行させるソフトウェア命令を実行するコンピュータプロセッサを含む。たとえば、ディスプレイ、エンコーダ、セットトップボックス、トランスコーダ等における一つまたは複数のプロセッサは、プロセッサにとってアクセス可能なプログラムメモリにおいてソフトウェア命令を実行することによって、上述したような画像の信号整形および符号化に関連する方法を実施することができる。本発明は、プログラム製品の形態で提供されてもよい。プログラム製品は、データ・プロセッサによって実行されるときに、データ・プロセッサに本発明の方法を実行させる命令を含む一組のコンピュータ読取可能な信号を担持する任意の非一時的かつ有体の媒体を含んでいてもよい。本発明によるプログラム製品は、幅広い多様な非一時的かつ有体な形のいずれであってもよい。プログラム製品は、たとえば、フロッピーディスケットを含む磁気データ記憶媒体、ハードディスクドライブ、CD-ROM、DVDを含む光データ記憶媒体、ROM、フラッシュRAMを含む電子データ記憶媒体の物理媒体などを含むことができる。プログラム製品上のコンピュータ読取可能な信号は、任意的に圧縮または暗号化されてもよい。
【0133】
コンポーネント(たとえば、ソフトウェアモジュール、プロセッサ、アセンブリ、デバイス、回路等)が上記で言及されている場合、別段の指示がない限り、そのコンポーネントへの言及(「手段」への言及を含む)は、本発明の示されている例示的実施形態において機能を実行する開示された構造と構造的に等価でないコンポーネントも含め、記載されるコンポーネントの機能を実行する(たとえば、機能的に等価な)任意のコンポーネントを、そのコンポーネントの等価物として含むと解釈されるべきである。
【0134】
等価物、拡張、代替およびその他
このように、画像の効率的な信号整形および符号化に関連する例示的な実施形態が記載される。前述の明細書において、本発明の実施形態は、実装毎に変化しうる多数の個別的詳細を参照して記述されてきた。よって、何が発明であり、出願人によって発明であることが意図されているかの唯一かつ排他的な指標は、本願に対して発行される請求項のセットの、その後の訂正があればそれも含めてかかる請求項が許可される具体的な形である。かかる請求項に含まれる用語について本稿に明示的に記載される定義は、それらの請求項において使用されるかかる用語の意味を支配する。よって、請求項に明示的に記載されていない限定、要素、特性、特徴、利点または属性は、かかる請求項の範囲をいかなる仕方でも限定すべきではない。よって、本明細書および図面は、制約する意味ではなく例示的な意味に考えられるべきである。
【0135】
箇条書き例示的実施形態
本発明は、本発明のいくつかの部分の構造、特徴、および機能を記述する以下の箇条書き例示的実施形態(Enumerated Example Embodiment、EEE)を含むが、これらに限定されない、本明細書に記載された形の任意のもので具現されうる。
〔EEE1〕
プロセッサを用いてビデオ・シーケンスを適応的に整形する方法であって、当該方法は:
プロセッサにより、第1の符号語表現での入力画像にアクセスする段階と;
前記入力画像のピクセルを第2の符号語表現にマッピングする前方整形関数を生成する段階とを含み、前記第2の符号語表現は、前記第1の符号語表現よりも効率的な圧縮を許容し、前記前方整形関数を生成することは:
前記入力画像を複数のピクセル領域に分割し;
各ピクセル領域の第1のルミナンス特性に従って各ピクセル領域を複数の符号語ビンのうちの一つに割り当て;
各符号語ビンに割り当てられたピクセル領域のそれぞれの第2のルミナンス特性に従って前記複数の符号語ビンのそれぞれについてのビン・メトリックを計算し;
各符号語ビンのビン・メトリックおよびレート‐歪み最適化基準に従って、各符号語ビンに第2の符号語表現での符号語の数を割り当て;
前記複数の符号語ビンのそれぞれに対する第2の符号語表現での符号語の配分に応答して、前記前方整形関数を生成することを含む、
方法。
〔EEE2〕
ピクセル領域の第1のルミナンス特性が、そのピクセル領域内の平均ルミナンス・ピクセル値を含む、EEE1記載の方法。
〔EEE3〕
ピクセル領域の第2のルミナンス特性が、そのピクセル領域のルミナンス・ピクセル値の分散を含む、EEE1記載の方法。
〔EEE4〕
符号語ビンについてのビン・メトリックを計算することは、その符号語ビンに割り当てられたすべてのピクセル領域についてのルミナンス・ピクセル値の分散の平均を計算することを含む、EEE3記載の方法。
〔EEE5〕
符号語ビンに、そのビン・メトリックに従って前記第2の符号語表現での符号語の数を割り当てることは:
その符号語ビンにピクセル領域が割り当てられていない場合は、その符号語ビンに符号語を割り当てず;
その符号語ビンのビン・メトリックが上限閾値より低い場合、第1の数の符号語を割り当て;
そうでない場合、その符号語ビンに第2の数の符号語を割り当てることを含む、
EEE1記載の方法。
〔EEE6〕
Bビットの深さをもつ第1の符号語表現と、Boビットの深さをもつ第2の符号語表現と、N個の符号語ビンについて、符号語の前記第1の数は、Mf=CEIL((2Bo/(CW2-CW1))*Ma)を含み、符号語の前記第2の数は、Ma=2B/Nを含み、ここで、CW1<CW2は、[0 2B-1]における2つの符号語を表わす、EEE5記載の方法。
〔EEE7〕
CW1=16×2(B-8)およびCW2=235×2(B-8)であるEEE6記載の方法。
〔EEE8〕
前記上限閾値を決定することが:
潜在的閾値の集合を定義し;
閾値の前記集合内の各閾値について:
その閾値に基づく前方整形関数を生成し;
前記整形関数およびビットレートRに従って入力試験フレームの集合をエンコードおよびデコードして、デコードされた試験フレームの出力集合を生成し;
前記入力試験フレームおよびデコードされた試験フレームに基づいて全体的なレート‐歪み最適化(RDO)メトリックを計算し;
潜在的な閾値の前記集合における、前記RDOメトリックが最小である閾値を、前記上限閾値として選択することを含む、
EEE5記載の方法。
〔EEE9〕
前記RDOメトリックを計算することは:
J=D+λRを計算することを含み、ここで、Dは前記入力試験フレームのピクセル値とデコードされた試験フレームにおける対応するピクセル値との間の歪みの指標を表わし、λはラグランジュ乗数を表わす、
EEE8記載の方法。
〔EEE10〕
Dは、入力試験フレームとデコードされた試験フレームの対応するピクセル値の間の差分平方和の指標である、EEE9記載の方法。
〔EEE11〕
符号語ビンに、そのビン・メトリックに従って前記第2の符号語表現での符号語の数を割り当てることは、符号語割り当てルックアップテーブルに基づき、前記符号語割り当てルックアップテーブルは、ビン・メトリック値の範囲をセグメントに分割する2つ以上の閾値を定義し、各セグメント内のビン・メトリックを有するビンに割り当てられる符号語の数を与える、EEE1記載の方法。
〔EEE12〕
ビンへのデフォルトの符号語割り当てが与えられて、大きなビン・メトリックをもつビンは、デフォルトの符号語割り当てよりも少数の符号語を割り当てられ、小さなビン・メトリックをもつビンは、デフォルトの符号語割り当てよりも多くの符号語が割り当てられる、EEE11記載の方法。
〔EEE13〕
Bビットを用いた第1の符号語表現およびN個のビンについて、ビン当たりのデフォルトの符号語割り当てはMa=2B/Nによって与えられる、EEE12記載の方法。
〔EEE14〕
前記前方整形関数に応答して整形情報を生成する段階をさらに含み、前記整形情報は:
整形再構成プロセスで使用される最小符号語ビン・インデックス値を示すフラグ;
前記整形構成プロセスで使用される最大符号語ビン・インデックス値を示すフラグ;
整形モデル・プロファイル・タイプを示すフラグであって、各モデル・プロファイル・タイプがデフォルトのビン関連パラメータに関連付けられている、フラグ、または
デフォルトのビン関連パラメータを調整するために使用される一つまたは複数のデルタ値
のうちの一つまたは複数を含む、
EEE1記載の方法。
〔EEE15〕
各符号語ビンにビン重要度値を割り当てる段階をさらに含み、前記ビン重要度値は:
その符号語ビンに符号語が割り当てられていない場合は0;
その符号語に符号語の第1の値が割り当てられている場合は2;
それ以外の場合には1である、
EEE5記載の方法。
〔EEE16〕
前記上限閾値を決定することが:
入力画像におけるピクセル値のルミナンス範囲をビンに分割する段階と;
各ビンについて、ビン・ヒストグラム値および平均ビン分散値を決定する段階であって、ビンについて、前記ビン・ヒストグラム値は、画像中の総数のピクセルにおけるそのビン内のピクセルの数を含み、平均ビン分散値は、そのビン内のピクセルの平均ピクセル分散のメトリックを与える、段階と;
平均ビン分散値をソートして、平均ビン分散値のソートされたリストおよび平均ビン分散-値インデックスのソートされたリストを生成する段階と;
前記ビン・ヒストグラム値に基づくソートされた平均ビン分散値と、平均ビン分散-値インデックスの前記ソートされたリストとに基づいて、ソートされた平均ビン分散値の関数として累積密度関数を計算する段階と;
前記累積密度関数の値によって満たされる基準に基づいて上限閾値を決定する段階とを含む、
EEE5記載の方法。
〔EEE17〕
前記累積密度関数を計算することが:
BinVarSortDsdCDF[0]=BinHist[BinIdxSortDsd[0]];
for(int b=1; b<PIC_ANALYZE_CW_BINS; b++)
{ BinVarSortDsdCDF[b]=BinVarSortDsdCDF[b-1]+BinHist[BinIdxSortDsd[b]];}
を計算することを含み、ここで、bはビン番号、PIC_ANALYZE_CW_BINSはビンの総数、BinVarSortDsdCDF[b]はビンbについてのCDF関数の出力、BinHist[i]はビンiについてのビン・ヒストグラム値、BinIdxSortDsd[]は平均ビン分散値インデックスのソートされたリストを表わす、
EEE16記載の方法。
〔EEE18〕
入力画像内のピクセルのk%について平均ビン分散が前記上限閾値以上であるという基準の下で、前記上限閾値が、CDF出力がk%である平均ビン分散値として決定される、EEE16記載の方法。
〔EEE19〕
k=50である、EEE18記載の方法。
〔EEE20〕
デコーダにおいて、整形関数を再構成する方法であって、当該方法は:
整形モデルを特徴付ける符号化されたビットストリーム・シンタックス要素を受領する段階であって、前記シンタックス要素は:
整形構成プロセスにおいて使用される最小符号語ビン・インデックス値を示すフラグ、
整形構成プロセスにおいて使用される最大符号語ビン・インデックス値を示すフラグ、
整形モデル・プロファイル・タイプを示すフラグであって、前記モデル・プロファイル・タイプはビン重要度値を含むデフォルトのビン関連パラメータに関連付けられている、フラグ、または
前記整形モデル・プロファイルにおいて定義されているデフォルトのビン重要度値を調整するために使用される一つまたは複数のデルタ・ビン重要度値を示すフラグ
のうちの一つまたは複数を含む、段階と;
前記整形モデル・プロファイルに基づいて、各ビンについてのデフォルトのビン重要度値と、ビンの重要度値に応じて各ビンに割り当てられる符号語のデフォルト数の割り当てリストとを決定する段階と;
各符号語ビンについて:
そのデフォルト・ビン重要度値をそのデルタ・ビン重要度値に加えることによってそのビン重要度値を決定し;
そのビンのビン重要度値および前記割り当てリストに基づいて、その符号語ビンに割り当てられる符号語の数を決定し;
各符号語ビンに割り当てられた符号語の数に基づいて、順方向の整形関数を生成する段階とを含む、
方法。
〔EEE21〕
割り当てリストを使用して、k番目の符号語ビンに割り当てられた符号語の数Mkを決定することが、さらに:
k番目のビンについて:
bin_importance[k]==0であれば、
Mk=0とし;
そうでない場合、bin_importance[k]==2であれば
Mk=Mfとし、
そうでない場合、
Mk=Maとすることを含み、
ここで、MaおよびMfは前記割り当てリストの要素であり、bin_importance[k]は、k番目のビンのビン重要度値を表わす、
EEE20記載の方法。
〔EEE522〕
一つまたは複数のプロセッサを有するデコーダにおいて、符号化されたデータを再構成する方法であって、当該方法は:
第1の符号語表現における一つまたは複数の符号化された整形画像と該符号化された整形画像についての整形情報に関係するメタデータ(207)とを含む符号化ビットストリーム(122)を受領する段階と;
前記整形情報に関係するメタデータに基づいて逆整形関数を生成する段階(250)であって、前記逆整形関数は、前記第1の符号語表現から第2の符号語表現へと前記整形画像のピクセルをマッピングする、段階と;
(250)前記整形情報に関係するメタデータに基づいて前方整形関数を生成する段階(250)であって、前記前方整形関数は、前記第2の符号語表現から前記第1の符号語表現へと画像のピクセルをマッピングする、段階と;
前記符号化ビットストリームから、一つまたは複数の符号化された単位を含む符号化された整形画像を抽出する段階であって、前記符号化された整形画像中の一つまたは複数の符号化された単位について:
前記符号化された整形画像内のイントラ符号化された符号化単位(CU)について:
そのCUにおける整形された残差および第1の整形された予測サンプルに基づいて、そのCUの第1の整形された再構成されたサンプル(227)を生成し;
前記第1の整形された再構成されたサンプルおよびループ・フィルタ・パラメータに基づいて、整形されたループ・フィルタ出力を生成し(270);
前記整形されたループ・フィルタ出力に前記逆整形関数を適用して、前記第2の符号語表現でのその符号化単位のデコードされたサンプルを生成し(265);
前記第2の符号語表現でのその符号化単位のデコードされたサンプルを、参照バッファに記憶する段階と;
前記符号化された整形された画像内のインター符号化された符号化単位について:
前記第2の符号語表現での前記参照バッファに記憶されている予測サンプルに前記前方整形関数を適用して、第2の整形された予測サンプルを生成し;
その符号化されたCUにおける整形された残差および前記第2の整形された予測サンプルに基づいて、その符号化単位の第2の整形された再構成されたサンプルを生成し;
前記第2の整形された再構成されたサンプルおよびループ・フィルタ・パラメータに基づいて、整形されたループ・フィルタ出力を生成し;
前記整形されたループ・フィルタ出力に前記逆整形関数を適用して、第2の符号語表現でのその符号化単位のサンプルを生成し;
前記第2の符号語表現でのその符号化単位のサンプルを参照バッファに記憶する段階と;
前記参照バッファにおける記憶されているサンプルに基づいて、デコードされた画像を生成する段階とを含む、
方法。
〔EEE23〕
プロセッサを備え、EEE1ないし22のいずれかに記載の方法を実行するように構成された装置。
〔EEE24〕
EEE1ないし22のいずれかに従って一つまたは複数のプロセッサで方法を実行するためのコンピュータ実行可能命令をその上に記憶している非一時的なコンピュータ読取可能記憶媒体。
【0136】
付録1
バブルソートの例示的実装
void bubbleSortDsd(double* array, int*idx, int n)
{
int i,j;
bool swapped;
for(i=0; i < n-1; i++)
{
swapped=false;
for(j=0; j <n-i-1; j++)
{
if(array[j]<array[j+1])
{
swap(&array[j],&array[j+1]);
swap(&idx[j],&idx[j+1]);
swapped=true;
}
}
if(swapped==false)
break;
}
}
【0137】
付録2
例として、この付録は、現在ISOおよびITUによる共同開発中の汎用ビデオコーデック(Versatile Video Codec、VVC)(非特許文献8)における、整形をサポートする実施形態による例示的なシンタックス構造および関連するシンタックス要素を提供する。既存のドラフト・バージョンにおける新しいシンタックス要素は、ハイライトされるか、明示的に注記される。(8-xxx)のような式番号は、最終仕様において必要に応じて更新されるプレースホルダーを示す。
【0138】
7.3.2.1 シーケンスパラメータセットRBSPシンタックス において
【表5-1】
【表5-2】
【表5-3】
【0139】
7.3.3.1 一般タイル・グループ・ヘッダ・シンタックス において
【表6-1】
【表6-2】
【表6-3】
【0140】
新たなシンタックス・テーブル、タイル整形器モデルを追加。
【表7】
【0141】
一般シーケンスパラメータセットRBSPセマンティクスにおいて、次のセマンティクスを追加。
sps_reshaper_enabled_flagが1に等しいことは、符号化されたビデオ・シーケンス(CVS)においてその整形器(reshaper)が使用されることを指定する。sps_reshaper_enabled_flagが0に等しいことは、CVSにおいてその整形器が使用されないことを指定する。
【0142】
タイル・グループ・ヘッダ・シンタックスにおいて、次のセマンティクスを追加。
tile_group_reshaper_model_present_flagが1に等しいことは、tile_group_reshaper_model()タイル・グループ・ヘッダに存在することを指定することを示す。tile_group_reshaper_model_present_flagが0に等しいことは、tile_group_reshaper_model()がタイル・グループ・ヘッダに存在しないことを指定する。tile_group_reshaper_model_present_flagが存在しない場合は、0に等しいと推定される。
tile_group_reshaper_enabled_flagが1に等しいことは、現在のタイル・グループにおいてその整形器が有効にされていることを指定する。tile_group_reshaper_enabled_flagが0に等しいことは、現在のタイル・グループについてその整形器が有効にされていないことを指定する。tile_group_resharper_enable_flagが存在しない場合は、0に等しいと推定される。
tile_group_reshaper_chroma_residual_scale_flagが1に等しいことは、現在のタイル・グループについてクロマ残差スケーリングが有効にされていることを指定する。tile_group_reshaper_chroma_residual_scale_flagが0に等しいことは、現在のタイル・グループについてクロマ残差スケーリングが有効にされないことを指定する。tile_group_reshaper_chroma_residual_scale_flagが存在しない場合は、0に等しいと推定される。
【0143】
tile_group_reshaper_model()シンタックスを追加
reshaper_model_min_bin_idxは、整形器構成プロセスにおいて使用される最小ビン(またはピース)インデックスを指定する。reshaper_model_min_bin_idxの値は、両端を含め0~MaxBinIdxの範囲とする。MaxBinIdxの値は15に等しい。
reshaper_model_delta_max_bin_idxは、最大許容ビン(またはピース)インデックスMaxBinIdxから、整形器構成プロセスで使用される最大ビン・インデックスを引いた値を指定する。reshaper_model_max_bin_idxの値はMaxBinIdx-reshaper_model_delta_max_bin_idxに等しく設定される。
reshaper_model_bin_delta_abs_cw_prec_minus1に1を加えたものは、シンタックスreshaper_model_bin_delta_abs_CW[i]の表現のために使用されるビット数を指定する。
reshaper_model_bin_delta_abs_CW[i]は、i番目のビンのための絶対デルタ符号語値を指定する。
reshaper_model_bin_delta_sign_CW_flag[i]は、reshaper_model_bin_delta_abs_CW[ i ]の符号を次のように指定する。
・reshaper_model_bin_delta_sign_CW_flag[i]が0に等しい場合、対応する変数RspDeltaCW[i]は正の値である。
・それ以外の場合(reshaper_model_bin_delta_sign_CW_flag[i]が0に等しくない)、対応する変数RspDeltaCW[i]は負の値である。
reshaper_model_bin_delta_sign_CW_flag[i]が存在しない場合は、0に等しいと推定される。
変数RspDeltaCW[i]=(1-2*reshaper_model_bin_delta_sign_CW[i])*reshaper_model_bin_delta_abs_CW[i];
変数RspCW[i]は、以下のステップで導出される:
変数OrgCWが、(1<<BitDepthY)/(MaxBinIdx+1)に等しく設定される。
・reshaper_model_min_bin_idx<=i<=reshaper_model_max_bin_idxの場合は
RspCW[i]=OrgCW+RspDeltaCW[i]
・それ以外の場合は、RspCW[i]=0
RspCW[i]の値は、BitDepthYisの値が10に等しい場合、32から2*OrgCW-1の範囲である。
両端を含め0からMaxBinIdx+1までの範囲のiについて変数InputPivot[i]は、次のように導出される。
InputPivot[i]=i*OrgCW
両端を含め0からMaxBinIdx+1までの範囲のiについて変数ReshapePivot[i]と、両端を含め0からMaxBinIdxまでの範囲のiについての変数ScaleCoef[i]およびInvScaleCoeff[i]は、次のように導出される:
shiftY=14
ReshapePivot[0]=0;
for(i=0; i<=MaxBinIdx; i++){
ReshapePivot[i+1]=ReshapePivot[i]+RspCW[i]
ScaleCoef[i]=(RspCW[i]*(1<<shiftY)+(1<<(Log2(OrgCW)-1)))>>(Log2(OrgCW))
if(RspCW[i]==0)
InvScaleCoeff[i]=0
else
InvScaleCoeff[i]=OrgCW*(1<<shiftY)/RspCW[i]
}
両端を含め0からMaxBinIdxまでの範囲のiについて変数ChromaScaleCoef[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
・(RspCW[i]==0)である場合は
ChromaScaleCoef[i]=(1<<shiftC)
・それ以外の場合は(RspCW[i]!=0)
ChromaScaleCoef[i]=ChromaResidualScaleLut[Clip3(1,64,RspCW[i]>>1)-1]
注:代替的な実装では、ルーマとクロマのスケーリングを統一し、ChromaResidualScaleLut[]を不要にしてもよい。その場合、クロマ・スケーリングは以下のように実装されうる:
shiftC=11
・(RspCW[i]==0)である場合は
ChromaScaleCoef[i]=(1<<shiftC)
・それ以外の場合(RspCW[i]!=0)は、下記が適用される:
BinCW=BitDepthY>10?(RspCW[i]>>(BitDepthY-10)):BitDepthY<10?(RspCW[i]<<(10 BitDepthY)):RspCW[i];
ChromaScaleCoef[i]=OrgCW*(1<<shiftC)/BinCW[i]
【0144】
組み合わされたマージおよびイントラ予測のための重み付けされたサンプル予測プロセスにおいて、以下を追加。追加はハイライトされる。
8.4.6.6 組み合わされたマージおよびイントラ予測のための重み付けされたサンプル予測プロセス
このプロセスへの入力は以下の通り:
・現在の符号化ブロックの幅cbWidth
・現在の符号化ブロック高さcbHeight
・2つの(cbWidth)×(cbHeight)の配列、preSamplesInterおよびpreSamplesIntra
・イントラ予測モードpredModeIntra
・色成分インデックスを指定する変数cIdx
このプロセスの出力は、予測サンプル値の(cbWidth)×(cbHeight)の配列predSamplesCombである。
変数bitDepthは次のように導出される。
・cIdxが0に等しい場合、bitDepthはBitDepth
Yに等しく設定される。
・それ以外の場合、bitDepthはBitDepth
Cに等しく設定される。
x=0..cbWidth-1およびy=0..cbHeight-1についての予測サンプルpredSamplesComb[x][y]は、以下のように導出される:
・重みwは次のように導出される:
・predModeIntraがINTRA_ANGULAR50の場合、wは、テーブル8-10において、nPosがyに等しく、nSizeがcbHeightに等しいとして、指定される。
・それ以外の場合、predModeIntraがINTRA_ANGULAR18の場合、wは、テーブル8-10において、nPosがxに等しく、nSizeがcbWidthに等しいとして、指定される。
・それ以外の場合、wは4に設定される。
【表8】
・予測サンプルpredSamplesComb[x][y]は以下のように導出される:
predSamplesComb[x][y]=(w*predSamplesIntra[x][y]+
(8-w)*predSamplesInter[x][y])>>3) (8-740)
テーブル8-10 位置nPとサイズnSの関数としてのwの指定
【表9】
【0145】
ピクチャー再構成プロセスに下記を追加。
8.5.5 ピクチャー構成プロセス
このプロセスへの入力は次の通り:
・現在のブロックの左上サンプルを、現在のピクチャー成分の左上サンプルに対して指定する位置(xCurr,yCurr)
・現在のブロックの幅と高さをそれぞれ指定する変数nCurrSwとnCurrSh
・現在のブロックの色成分を指定する変数cIdx
・現在のブロックの予測されたサンプルを指定する(nCurrSw)×(nCurrSh)配列predSamples
・現在のブロックの残差サンプルを指定する(nCurrSw)×(nCurrSh)配列resSamples
色成分cIdxの値に依存して、以下の割り当てが行なわれる:
・cIdxが0に等しい場合、recSamplesは再構成されたピクチャー・サンプル配列S
Lに対応し、関数clipCidx1はClip1
Yに対応する。
・それ以外の場合、cIdxが1に等しい場合は、recSamplesは再構成されたクロマ・サンプル配列S
Cbに対応し、関数clipCidx1はClip1
Cに対応する。
・それ以外の場合(cIdxは2に等しい)、recSamplesは再構成されたクロマ・サンプル配列S
Crに対応し、関数clipCidx1はClip1
Cに対応する。
【表10】
それ以外の場合は、位置(xCurr,yCurr)における再構成されたサンプル配列recSamplesの(nCurrSw)×(nCurrrSh)ブロックは、次のように導出される
i=0..nCurrSw-1、j=0..nCurrSh-1について、
recSamples[xCurr+i][yCurr+j]=clipCidx1(predSamples[i][j]+resSamples[i][j])
[外1]
【0146】
[外2]
この節は、マッピング・プロセスを用いたピクチャー再構成を規定する。ルーマ・サンプル値についてのマッピング・プロセスを用いたピクチャー再構成は、8.5.5.1.1で規定される。クロマ・サンプル値についてのマッピング・プロセスを用いたピクチャー再構成は、8.5.5.1.2で規定される。
8.5.5.1 ルーマ・サンプル値についてのマッピング・プロセスを用いたピクチャー再構成
このプロセスへの入力は以下の通り:
・現在のブロックのルーマ予測サンプルを指定する(nCurrSw)×(nCurrSh)配列predSamples
・現在のブロックのルーマ残差サンプルを指定する(nCurrSw)×(nCurrSh)配列resSamples
・このプロセスについての出力は以下の通り:
・(nCurrSw)×(nCurrSh)のマッピングされたルーマ予測サンプル配列predMapSamples
・(nCurrSw)×(nCurrSh)の再構成されたルーマ・サンプル配列recSamples
predMapSamplesは、次のように導出される:
If(CuPredMode[xCurr][yCurr]==MODE_INTRA)||(CuPredMode[xCurr][yCurr]==MODE_INTER && mh_intra_flag[xCurr][yCurr])
predMapSamples[xCurr+i][yCurr+j]=predSamples[i][j]
ここで、i=0..nCurrSw-1、j=0..nCurrSh-1
[外3]
それ以外の場合((CuPredMode[xCurr][yCurr]==MODE_INTER && !mh_intra_flag[xCurr][yCurr]))、次が適用される:
shiftY=14
idxY=predSamples[i][j]>>Log2(OrgCW)
predMapSamples[xCurr+i][yCurr+j]=ReshapePivot[idxY]
+(ScaleCoeff[idxY]*(predSamples[i][j]-InputPivot[idxY])
+(1<<(shiftY-1)))>>shiftY
ここで、i=0..nCurrSw-1、j=0..nCurrSh-1
[外4]
recSamplesは次のように導出される:
recSamples[xCurr+i][yCurr+j]=Clip1
Y(predMapSamples[xCurr+i][yCurr+j]+resSamples[i][j]])
ここで、i=0..nCurrSw-1、j=0..nCurrSh-1
[外5]
8.5.5.1.2 クロマ・サンプル値についてのマッピング・プロセスを用いたピクチャー再構成
このプロセスへの入力は以下の通り:
・現在のブロックのマッピングされたルーマ予測サンプルを指定する(nCurrSwx2)×(nCurrShx2)のマッピングされた配列predMapSamples
・現在のブロックのクロマ予測サンプルを指定する(nCurrSw)×(nCurrSh)の配列PredSamples
・現在のブロックのクロマ残差サンプルを指定する(nCurrSw)×(nCurrSh)の配列resSamples
このプロセスの出力は、再構成されたクロマ・サンプル配列recSamplesである。
recSamplesは以下のように導出される:
・If(!tile_group_reshaper_chroma_residual_scale_flag||((nCurrSw)x(nCurrSh)<=4))
recSamples[xCurr+i][yCurr+j]=Clip1
C(predSamples[i][j]+resSamples[i][j])
ここで、i=0..nCurrSw-1、j=0..nCurrSh-1
[外6]
・それ以外の場合(tile_group_reshaper_chroma_residual_scale_flag &&((nCurrSw)x(nCurrSh)>4))、次が適用される:
変数varScaleは次のように導出される:
1.invAvgLuma=Clip1
Y((Σ
iΣ
jpredMapSamples[(xCurr<<1)+i][(yCurr<<1)+j]
+nCurrSw*nCurrSh*2)/(nCurrSw*nCurrSh*4))
2.変数idxYInvは、サンプル値invAvgLumaの入力を用いて、
[外7]
節で規定されているように、区分ごとの関数インデックスの識別を呼び出すことによって導出される。
3.varScale=ChromaScaleCoef[idxYInv]
varScale=ChromaScaleCoef[idxYInv]
recSamplesは以下のように導出される:
・tu_cbf_cIdx[xCurr][yCurr]が1に等しい場合は、次が適用される:
shiftC=11
recSamples[xCurr+i][yCurr+j]=ClipCidx1(predSamples[i][j]+Sign(resSamples[i][j])
*((Abs(resSamples[i][j])*varScale+(1<<(shiftC-1)))>>shiftC))
ここで、i=0..nCurrSw-1、j=0..nCurrSh-1
[外8]
・それ以外の場合(tu_cbf_cIdx[xCurr][yCurr]が0に等しい)場合は、
recSamples[xCurr+i][yCurr+j]=ClipCidx1(predSamples[i][j])
[外9]
【0147】
8.5.6 ピクチャー逆マッピング・プロセス
本節は、tile_group_reshaper_enabled_flagの値が1に等しいときに援用される。入力は再構成されたピクチャー・ルーマ・サンプル配列S
Lであり、出力は、逆マッピング・プロセス後の修正された再構成されたピクチャー・ルーマ・サンプル配列S'
Lである。ルーマ・サンプル値についての逆マッピング・プロセスが、8.4.6.1で規定される。
8.5.6.1 ルーマ・サンプル値についてのピクチャー逆マッピング・プロセス
このプロセスへの入力は、現在のピクチャーの左上のルーマ・サンプルに対するルーマ・サンプル位置を指定するルーマ位置(xP,yP)である。
このプロセスの出力は、逆マッピングされたルーマ・サンプル値invLumaSampleである。invLumaSampleの値は、以下の順序付けられたステップを適用して導出される:
1.変数idxYInvは、ルーマ・サンプル値S
L[xP][yP]の入力を用いて、節8.5.6.2に指定されているような区分ごとの関数インデックスの識別を呼び出すことによって導出される。
2.reshapeLumaSampleの値は以下のように導出される:
shiftY=14
invLumaSample=InputPivot[idxYInv]+(InvScaleCoeff[idxYInv]*(S
L[xP][yP]-ReshapePivot[idxYInv])
+(1<<(shiftY-1)))>>shiftY
[外10]
3.clipRange=((reshaper_model_min_bin_idx>0) && (reshaper_model_max_bin_idx<MaxBinIdx));
clipRangeが1に等しい場合は、下記が適用される:
minVal=16<<(BitDepth
Y-8)
maxVal=235<<(BitDepth
Y-8)
invLumaSample=Clip3(minVal,maxVal,invLumaSample)
それ以外の場合(clipRangeが0に等しい)は、次が適用される:
invLumaSample=ClipCidx1(invLumaSample)
8.5.6.2 ルーマ成分についての区分ごとの関数インデックスの特定
このプロセスへの入力はルーマ・サンプル値Sである。
このプロセスの出力は、サンプルSが属するピース〔区分〕を識別するインデックスidxSである。
変数idxSは次のように導出される:
for(idxS=0, idxFound=0; idxS<=MaxBinIdx; idxS++){
if((S<ReshapePivot[idxS+1]){
idxFound=1
break
}
}
注、識別idxSを見つけるための代替的な実装は、以下のとおり:
if(S<ReshapePivot[reshaper_model_min_bin_idx])
idxS=0
else if(S>=ReshapePivot[reshaper_model_max_bin_idx])
idxS=MaxBinIdx
else
idxS=findIdx(S,0,MaxBinIdx+1,ReshapePivot[])
function idx=findIdx(val,low,high,pivot[]){
if(high-low<=1)
idx=low
else {
mid=(low+high)>>1
if(val<pivot[mid])
high=mid
else
low=mid
idx=findIdx(val,low,high,pivot[])
}
}
【0148】
いくつかの態様を記載しておく。
〔態様1〕
符号化されたビデオ・データを一つまたは複数のプロセッサで再構成する方法であって、当該方法は:
入力符号語表現における一つまたは複数の符号化された整形画像を含む符号化ビットストリーム(122)を受領する段階と;
前記符号化ビットストリーム内の前記一つまたは複数の符号化された整形画像についての整形メタデータ(207)を受領する段階と;
前記整形メタデータに基づいて前方整形関数(282)を生成する段階であって、前記前方整形関数は、第1の符号語表現から前記入力符号語表現へと画像のピクセルをマッピングする、段階と;
前記整形メタデータまたは前記前方整形関数に基づいて逆整形関数(265-3)を生成する段階であって、前記逆整形関数は、前記入力符号語表現から前記第1の符号語表現へと整形画像のピクセルをマッピングする、段階と;
前記符号化されたビットストリームから、一つまたは複数の符号化された単位を含む符号化された整形画像を抽出する段階と;
前記符号化された整形画像におけるイントラ符号化された符号化単位(イントラCU)について:
前記イントラCU内の整形された残差およびイントラ予測された整形された予測サンプルに基づいて前記イントラCUの整形された再構成されたサンプルを生成し(285);
前記イントラCUの前記整形された再構成されたサンプルに前記逆整形関数(265-3)を適用して、前記第1の符号語表現でのイントラCUのデコードされたサンプルを生成し;
前記イントラCUのデコードされたサンプルにループ・フィルタ(270)を適用して、前記イントラCUの出力サンプルを生成し;
前記イントラCUの前記出力サンプルを参照バッファに記憶する段階と;
前記符号化された整形画像におけるインター符号化されたCU(インターCU)について:
前記第1の符号語表現での前記参照バッファに記憶されているインター予測サンプルに前記前方整形関数(282)を適用して、前記入力符号語表現での前記インターCUについての整形予測サンプルを生成し;
前記インターCUにおける整形された残差および前記インターCUについての前記整形された予測サンプルに基づいて、前記インターCUの整形された再構成されたサンプルを生成し;
前記インターCUの前記整形された再構成されたサンプルに前記逆整形関数(265-3)を適用し、前記第1の符号語表現における前記インターCUのデコードされたサンプルを生成し;
前記インターCUのデコードされたサンプルにループ・フィルタ(270)を適用して、前記インターCUの出力サンプルを生成し;
前記インターCUの前記出力サンプルを前記参照バッファに記憶する段階と;
前記参照バッファ内の出力サンプルに基づいて、前記第1の符号語表現でのデコードされた画像を生成する段階とを含む、
方法。
〔態様2〕
前記イントラCUの整形された再構成されたサンプル(RecSample)を生成することが:
RecSample=(Res+IpredSample)
を計算することを含み、
ここで、Resは、前記入力符号語表現での前記イントラCUにおける整形された残差サンプルを表わし、IpredSampleは、前記入力符号語表現でのイントラ予測された整形された予測サンプルを表わす、
態様1記載の方法。
〔態様3〕
前記インターCUの整形された再構成されたサンプル(RecSample)を生成することが:
RecSample=(Res+Fwd(PredSample))
を計算することを含み、
ここで、Resは前記入力符号語表現での前記インターCUにおける整形された残差を表わし、Fwd()は前記前方整形関数を表わし、PredSampleは前記第1の符号語表現におけるインター予測サンプルを表わす、
態様1記載の方法。
〔態様4〕
前記参照バッファに記憶される出力サンプル(RecSampleInDPB)を生成することが:
RecSampleInDPB=LPF(Inv(RecSample))
を計算することを含み、
ここで、Inv()は前記逆整形関数を表わし、LPF()は前記ループ・フィルタを表わす、
態様2または3記載の方法。
〔態様5〕
前記入力符号語表現における前記インター符号化されたCU(インターCU)におけるクロマ残差サンプルについて、さらに:
前記入力符号語表現でのルーマ・ピクセル値および前記整形メタデータに基づくクロマ・スケーリング因子を決定する段階と;
前記インターCUにおける前記クロマ残差サンプルに前記クロマ・スケーリング因子を乗算して、前記第1の符号語表現での前記インターCUにおけるスケーリングされたクロマ残差サンプルを生成する段階と;
前記インターCUにおけるスケーリングされたクロマ残差と、前記参照バッファに記憶されているクロマ・インター予測サンプルとに基づいて、前記インターCUの再構成されたクロマ・サンプルを生成して、前記インターCUのデコードされたクロマ・サンプルを生成する段階と;
前記インターCUの前記デコードされたクロマ・サンプルに前記ループ・フィルタ(270)を適用して、前記インターCUの出力クロマ・サンプルを生成する段階と;
前記インターCUの前記出力クロマ・サンプルを前記参照バッファに記憶する段階とを含む、
態様1記載の方法。
〔態様6〕
イントラ・モードにおいて、前記クロマ・スケーリング因子は、イントラ予測されたルーマ値の平均に基づいている、態様5記載の方法。
〔態様7〕
インター・モードにおいて、前記クロマ・スケーリング因子は、前記入力符号語表現でのインター予測されたルーマ値の平均に基づいている、態様5記載の方法。
〔態様8〕
前記整形メタデータが:
前記第1の符号語表現を表現するために使用されるビンの数を示す第1のパラメータ;
整形において使用される最小ビン・インデックスを示す第2のパラメータ;
前記入力符号語表現における各ビンについての絶対デルタ符号語値を示すパラメータの第1の集合;
前記入力符号語表現における各ビンについてのデルタ符号語値の符号を示すパラメータの第2の集合を含む、
態様1記載の方法。
〔態様9〕
前記前方整形関数は、前記整形メタデータによって導出される線形セグメントをもつ区分ごとの線形関数として再構成される、態様1記載の方法。
〔態様10〕
プロセッサによってビデオ・シーケンスを適応的に整形する方法であって、当該方法は:
プロセッサによって、第1の符号語表現での入力画像にアクセスする段階と;
前記入力画像のピクセルを第2の符号語表現にマッピングする前方整形関数を生成する段階とを含み、前記第2の符号語表現は、前記第1の符号語表現よりも効率的な圧縮を許容し、前記前方整形関数を生成することは:
前記入力画像を複数のピクセル領域に分割し;
各ピクセル領域の第1のルミナンス特性に従って各ピクセル領域を複数の符号語ビンのうちの一つに割り当て;
前記複数の符号語ビンのそれぞれに割り当てられた前記ピクセル領域のそれぞれの第2のルミナンス特性に従って前記複数の符号語ビンのうちのそれぞれについてのビン・メトリックを計算し;
前記複数の符号語ビンのそれぞれのビン・メトリックおよびレート‐歪み最適化基準に従って、前記複数の符号語ビンのそれぞれに前記第2の符号語表現での符号語の数を割り当て;
前記複数の符号語ビンのそれぞれに対する前記第2の符号語表現での符号語の配分に応答して、前記前方整形関数を生成することを含む、
方法。
〔態様11〕
ピクセル領域の前記第1のルミナンス特性が、そのピクセル領域内の平均ルミナンス・ピクセル値を含む、態様10記載の方法。
〔態様12〕
ピクセル領域の前記第2のルミナンス特性が、そのピクセル領域のルミナンス・ピクセル値の分散を含む、態様10記載の方法。
〔態様13〕
符号語ビンについてのビン・メトリックを計算することは、その符号語ビンに割り当てられたすべてのピクセル領域についてのルミナンス・ピクセル値の分散の平均を計算することを含む、態様12記載の方法。
〔態様14〕
符号語ビンに、そのビン・メトリックに従って前記第2の符号語表現での符号語の数を割り当てることは:
その符号語ビンにピクセル領域が割り当てられていない場合は、その符号語ビンに符号語を割り当てず;
その符号語ビンのビン・メトリックが上限閾値より低い場合、第1の数の符号語を割り当て;
そうでない場合、その符号語ビンに第2の数の符号語を割り当てることを含む、
態様10記載の方法。
〔態様15〕
プロセッサを有しており、態様1ないし14のうちいずれか一項記載の方法を実行するように構成されている装置。
〔態様16〕
態様1ないし14のうちいずれか一項記載の、一つまたは複数のプロセッサによる方法を実行するためのコンピュータ実行可能命令を記憶している非一時的なコンピュータ読取可能記憶媒体。