IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ドルビー ラボラトリーズ ライセンシング コーポレイションの特許一覧

特表2024-513218フィルムグレイン符号化のためのメタデータ信号伝達および変換
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-03-22
(54)【発明の名称】フィルムグレイン符号化のためのメタデータ信号伝達および変換
(51)【国際特許分類】
   H04N 19/70 20140101AFI20240314BHJP
   H04N 19/80 20140101ALI20240314BHJP
   H04N 19/85 20140101ALI20240314BHJP
【FI】
H04N19/70
H04N19/80
H04N19/85
【審査請求】未請求
【予備審査請求】有
(21)【出願番号】P 2023560943
(86)(22)【出願日】2022-03-31
(85)【翻訳文提出日】2023-12-01
(86)【国際出願番号】 US2022022958
(87)【国際公開番号】W WO2022212792
(87)【国際公開日】2022-10-06
(31)【優先権主張番号】202141015755
(32)【優先日】2021-04-02
(33)【優先権主張国・地域又は機関】IN
(31)【優先権主張番号】63/210,789
(32)【優先日】2021-06-15
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】202141029381
(32)【優先日】2021-06-30
(33)【優先権主張国・地域又は機関】IN
(31)【優先権主張番号】63/249,401
(32)【優先日】2021-09-28
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】507236292
【氏名又は名称】ドルビー ラボラトリーズ ライセンシング コーポレイション
(74)【代理人】
【識別番号】100101683
【弁理士】
【氏名又は名称】奥田 誠司
(74)【代理人】
【識別番号】100155000
【弁理士】
【氏名又は名称】喜多 修市
(74)【代理人】
【識別番号】100188813
【弁理士】
【氏名又は名称】川喜田 徹
(74)【代理人】
【識別番号】100202197
【弁理士】
【氏名又は名称】村瀬 成康
(72)【発明者】
【氏名】マッカーシー,ショーン トマス
(72)【発明者】
【氏名】イン,ペン
(72)【発明者】
【氏名】ラーマクリシュナ,ヴィジャヤクマール ガヤトゥリ
(72)【発明者】
【氏名】チェマティ,キショア
(72)【発明者】
【氏名】パタンカー,カウストゥブ シュリパッド
【テーマコード(参考)】
5C159
【Fターム(参考)】
5C159KK02
5C159PP16
5C159RB09
5C159RC11
5C159RC19
5C159UA02
5C159UA05
5C159UA11
(57)【要約】
フィルムグレイン符号化および合成のためのメタデータ信号伝達および変換のための方法、システム、およびビットストリームシンタックスが説明される。MPEGフィルムグレインSEIメッセージングを有するビットストリームが与えられると、各ピクチャについて、プロセッサは、フィルムグレインモデルがAV1自己回帰加法混合ノイズモデルを用いるフィルムグレイン合成に適しているかを検出し、MPEGフィルムグレインSEIパラメータを対応するAV1フィルムグレインパラメータにトランスコードし、フィルムグレインを合成してAV1仕様に従って復号されたビデオピクチャに付加する。AV1パラメータをMPEGフィルムグレインSEIメッセージングに変換するプロセス例も提供される。
【特許請求の範囲】
【請求項1】
フィルムグレインメタデータを処理する方法であって、
第1の符号化フォーマットによる入力ビデオビットストリームおよび関連する入力フィルムグレイン情報を受信することと、
前記入力フィルムグレイン情報を解析して、前記第1の符号化フォーマットにおけるフィルムグレイン合成のための入力フィルムグレインパラメータを生成することと、
第2の符号化フォーマットにおけるノイズ合成のための出力フィルムグレインパラメータを前記入力フィルムグレインパラメータに基づいて生成することであって、前記第2の符号化フォーマットは前記第1の符号化フォーマットと異なる、出力フィルムグレインパラメータを生成することと、
前記出力フィルムグレインパラメータに従って出力フィルムノイズを生成することと、
前記第1の符号化フォーマットに従って前記入力ビデオビットストリームを復号して復号ビデオピクチャを生成することと、
前記出力フィルムノイズを前記復号ビデオピクチャに付加して出力ビデオピクチャを生成することと、
を含む方法。
【請求項2】
前記第1の符号化フォーマットはMPEGビデオフォーマットを含み、前記第2の符号化フォーマットはAV1ビデオフォーマットを含む、請求項1に記載の方法。
【請求項3】
前記第1の符号化フォーマットはAV1符号化フォーマットを含み、前記第2の符号化フォーマットはMPEGビデオ符号化フォーマットを含む、請求項1に記載の方法。
【請求項4】
前記入力フィルムグレイン情報は、フィルムグレインサプリメンタルエンハンスメント情報(SEI)を含み、前記出力フィルムグレインパラメータは、前記入力フィルムグレインパラメータが、加算ブレンディングモードを伴う自己回帰モデルを用いてノイズ合成が生成されることを示す場合にのみ生成される、請求項2に記載の方法。
【請求項5】
前記入力フィルムグレインパラメータは、前記入力ビデオビットストリームがモノクロまたは4:2:0 YUVフォーマットのプログレッシブビデオであることを示す、請求項4に記載の方法。
【請求項6】
第1のフィルムグレインパラメータが、
fg_intensity_interval_upper_bound[0][i] =
fg_intensity_interval_lower_bound[0][i+1] - 1、および
fg_intensity_interval_lower_bound[0][i+1] =
fg_intensity_interval_upper_bound[0][i] + 1
であることを示す場合、
film_grain_params_present = 1、apply_grain = 1、およびupdate_grain = 0とし、
fg_intensity_interval_upper_boundおよび
fg_intensity_interval_lower_bound は、第1のフィルムグレインパラメータを表し、
film_grain_params_present、apply_grain、およびupdate_grainは、出力フィルムグレインパラメータを表す、
請求項4に記載の方法。
【請求項7】
前記入力ビデオビットストリームにおける現在のピクチャについて、入力フィルムグレイン情報が無い場合において、
fg_characteristics_persistence_flagが以前に1に設定された場合、
film_grain_params_presentは1に設定され、apply_grainは1に設定され、update_grainは0に設定され、
そうでない場合、film_grain_params_presentは0に設定され、
fg_characteristics_persistence_flagは、入力フィルムグレインパラメータを表し、
film_grain_params_present、apply_grain、およびupdate_grainは、出力フィルムグレインパラメータを表す、
請求項4に記載の方法。
【請求項8】
前記入力ビットストリームにおける現在のピクチャについて、入力フィルムグレイン情報がある場合において、
fg_characteristics_cancel_flagが0である場合、apply_grainは1に設定され、update_grainは1に設定され、
そうでない場合、film_grain_params_presentは0に設定され、apply_grainは0に設定される、
請求項7に記載の方法。
【請求項9】
前記入力フィルムグレイン情報は、AV1フィルムグレインパラメータを含み、
前記出力フィルムグレインパラメータは、apply_grain = 1かつupdate_grain = 1 の場合にのみ生成され、apply_grainおよびupdate_grainは、入力フィルムグレインパラメータを表す、
請求項3に記載の方法。
【請求項10】
apply_grain = 1 かつ update_grain = 1 の場合、
fg_characteristics_cancel_flag = 0、fg_model_id = 1、
fg_sepearate_colour_description_present_flag = 0、および
fg_blending_mode_id = 0であり、
fg_characteristics_cancel_flag、fg_model_id、
fg_sepearate_colour_description_present_flag、および
fg_blending_mode_idは、出力フィルムグレインパラメータを表す、
請求項9に記載の方法。
【請求項11】
SMPTE RDD-5仕様に従ってフィルムグレインを合成する方法であって、前記仕様は、AVC(H.264)ビデオコーディング規格を超えたビデオコーディングをサポートするように拡張され、前記方法は、
・フィルムグレインをルマピクセル値にのみ適用し、
・8×8ブロック、16×16ブロック、および32×32ブロックでの処理が可能であり、
・デブロッキングフィルタリングを無効にし、
・フィルムグレイン値のスケールファクターを強制的に2の整数乗にする、
特徴のうちの1つ以上へのサポートを追加することを含む、
方法。
【請求項12】
N>8であるN×Nブロックの処理が、
a.デコードされたフレームにおける現在のブロックのN×Nブロックの平均値を計算すること、
b.N×Nブロックの平均値を用いて、現在のブロックのためのフィルムグレインパラメータを選択すること、
c.現在のブロックの左上隅のオフセットを用いて、データベースからN×Nのグレインブロックを選択すること
をさらに含む、請求項11に記載の方法。
【請求項13】
フィルムグレイン値のスケールファクタを強制的に2の整数乗にすることは、
g = scale_factor * database[h][v][k + k_offset][l + l_offset];
fg_block[k][l] = g >> (log2_scale_factor + 6);
の計算を
fg_block[k][l] =
database[h][v][k + k_offset][l + l_offset] >>
(log2_scale_factor + 6 - x );
に置き換えることをさらに含み、
xは、スケールファクタが (scale_factor) = 2xになるように決定される、
請求項11に記載の方法。
【請求項14】
請求項1から10のいずれかに記載の方法を1つ以上のプロセッサで実行するためのコンピュータ実行可能命令が格納された非一時的なコンピュータ読み取り可能な記録媒体。
【請求項15】
プロセッサを備え、請求項1から10に記載された方法のいずれかを実行するように構成された装置。
【発明の詳細な説明】
【技術分野】
【0001】
[関連出願への相互参照]
本願は、2021年9月28日に出願された米国仮出願第63/249,401号、2021年6月15日に出願された米国仮出願第63/210,789号、2021年4月2日に出願されたインド出願第202141015755号、および2021年6月30日に出願されたインド出願第202141029381号の優先権を主張するものであり、これらの出願の全体が、参照により本明細書に援用される。
【0002】
本明細書は、概略的には画像に関する。より具体的には、本発明の実施形態は、画像およびビデオシーケンスにおけるフィルムグレインの符号化および合成のためのメタデータ信号伝達(signaling)および変換に関する。
【背景技術】
【0003】
フィルムグレインは、典型的には、十分な光子を受けたハロゲン化銀から生じた金属銀または染料雲の微粒子の存在に起因する、処理された写真フィルムにおけるランダムな光学的テクスチャと定義される。エンターテインメント業界、特に映画では、フィルムグレインは制作プロセスおよび意図の一部と考えられている。そのため、デジタルカメラではフィルムグレインは発生しないが、デジタルビデオカメラで撮影された素材に、シミュレートされたフィルムグレインを加え、「フィルム的な見た目」(film look)を模倣することが珍しくない。
【0004】
そのランダムな性質のため、フィルムグレインは、画像および映像圧縮アルゴリズムに課題を提起する。なぜなら、a)ランダムノイズのように、映画の符号化および配信に用いられる符号化アルゴリズムの圧縮効率を低下させる可能性があり、b)符号化アルゴリズムの非可逆圧縮特性により、元のフィルムグレインが除去および/または改変される可能性があり、その結果、ディレクターの制作意図が改変される可能性があるからである。したがって、映画を符号化するとき、映画のフィルムルックについてのディレクターの意図を維持しながら、圧縮時の符号化効率を維持することが重要である。
【0005】
フィルムグレインをより効率的に扱うために、AVC、HEVC、VVC、AV1などの符号化規格(参考文献[1-4]参照)は、フィルムグレイン技術(FGT)を採用している。メディアのワークフローにおけるFGTは、フィルムグレインモデリングとフィルムグレイン合成という2つの主な要素から構成される。エンコーダでは、フィルムグレインはコンテンツから除去され、フィルムグレインモデルに従ってモデル化され、フィルムグレインモデルパラメータがメタデータとしてビットストリーム内で送信される。この部分により、より効率的な符号化が可能になる。デコーダでは、フィルムグレインはモデルパラメータに従ってシミュレートされ、表示の前に、デコードされた画像に再び挿入される。これにより、制作意図が維持される。
【0006】
本明細書において「メタデータ」という用語は、符号化されたビットストリームの一部として伝送され、復号された画像をレンダリングするためにデコーダを補助する任意の付加的情報に関する。そのようなメタデータには、本明細書で説明されるような、色空間または色域情報、リファレンスディスプレイパラメータ、およびフィルムグレインモデリングパラメータが含まれ得るが、これらに限定されない。
【0007】
フィルムグレイン技術は、真のフィルムグレインを含むコンテンツに限定されない。人工的なフィルムグレインを付加することにより、FGTは、デコーダにおける圧縮アーティファクトを隠すためにも用いることができる。これは、特にモバイルメディア用の非常に低いビットレートのアプリケーションに非常に有用である。本発明者らによって理解されるように、フィルムグレイン符号化および合成のためのメタデータシグナリングのための改良された技術が本明細書で説明される。
【0008】
このセクションに記載されているアプローチは、追求され得るアプローチであるが、必ずしも以前に考え出され、追求されたアプローチではない。したがって、特に断りのない限り、このセクションに記載されているアプローチのいずれかが、単にこのセクションに含まれているという理由だけで先行技術として適格であると仮定すべきではない。同様に、1つまたは複数のアプローチに関して特定された問題は、特に断りのない限り、このセクションに基づいて、先行技術において認識されていたものと仮定すべきではない。
【図面の簡単な説明】
【0009】
本発明の実施形態は、添付図面の図に例示的に示されており、限定する意図で示されているのではない。添付図面において、同様の参照符号は類似する要素を表す。
【0010】
図1A図1Aは、フィルムグレインが元の入力映像の一部であり得る場合におけるフィルムグレイン技術のエンドツーエンドの例示的なフローを示している。
【0011】
図1B図1Bは、フィルムグレインが元の入力映像の一部ではなく、デコーダで付加される場合のフィルムグレイン技術のエンドツーエンドの例示的なフローを示している。
【0012】
図2図2は、MPEGフィルムグレインSEIメッセージに含まれるシンタックス値がAV1フィルムグレイン合成処理に適用可能かを判断する処理フローの一例を示している。
【0013】
図3図3は、MPEGフィルムグレインSEIメッセージを無視すべきか、AV1フィルムグレイン合成処理で用いるために変換すべきかを決定する処理フローの一例を示している。
【0014】
図4図4は、AV1フィルムグレイン処理で用いるためにMPEG SEIメッセージを変換する処理フローの一例を示している。
【0015】
図5A図5Aは、MPEG SEIメッセージングとAV1フィルムグレイン合成を用いたフィルムグレイン合成の例示的な処理を示している。
図5B図5Bは、MPEG SEIメッセージングとAV1フィルムグレイン合成を用いたフィルムグレイン合成の処理例を示している。
【0016】
図6A図6Aは、ARラグが1に等しい場合に、MPEG SEIメッセージモデル値をAV1 AR係数に変換する例を示している。
【0017】
図6B図6Bは、ARラグが2に等しい場合に、MPEG SEIメッセージモデル値をAV1 AR係数に変換する例を示す。
【0018】
図7A図7Aは、ARラグが1に等しい場合にAV1 AR係数をMPEG SEIメッセージモデル値に変換する例を示している。
図7B図7Bは、ARラグが1に等しい場合にAV1 AR係数をMPEG SEIメッセージモデル値に変換する例を示している。
【発明を実施するための形態】
【0019】
フィルムグレイン符号化のためのメタデータ信号伝達および変換に関連する例示的な実施形態が、本明細書において説明される。以下の説明では、説明の目的で、本発明の様々な実施形態の十分な理解を提供するために多くの具体的な詳細事項を記載する。しかしながら、本発明の様々な実施形態は、これらの具体的な詳細事項がなくても実施できることは明らかであろう。他の例では、本発明の実施形態を不必要に認識しにくくしたり、不明瞭にしたり、分かりにくくしたりすることを避けるために、周知の構造や装置は網羅的なほど詳細には記載されていない。
【0020】
[概要]
本明細書で説明する例示的な実施形態は、フィルムグレイン技術のためのメタデータ信号伝達および変換に関する。ある実施形態では、プロセッサは、第1の符号化フォーマットによる入力ビデオビットストリームおよび関連する入力フィルムグレイン情報を受信する。プロセッサは、入力フィルムグレイン情報を解析して、第1の符号化フォーマットにおけるフィルムグレイン合成のための入力フィルムグレインパラメータを生成する。次に、プロセッサは、入力フィルムグレインパラメータに基づいて、第2の符号化フォーマットにおけるノイズ合成のための出力フィルムグレインパラメータを生成する。ここで、第2の符号化フォーマットは、第1の符号化フォーマットとは異なる。プロセッサは、出力フィルムグレインパラメータに従って出力フィルムノイズを生成し、第1の符号化フォーマットによる入力ビデオビットストリームを復号し、復号されたビデオピクチャを生成する。最後に、プロセッサは、出力フィルムノイズを復号されたビデオピクチャに付加し、出力ビデオピクチャを生成する。
【0021】
[フィルムグレインデータフロー処理]
既存の符号化規格を参照すると、AVC、HEVC、およびVVC(参考文献[1-3]および参考文献[6])(総称してMPEGまたはMPEGビデオ規格と呼ぶ)では、フィルムグレインモデルパラメータは、フィルムグレイン固有のサプリメンタルエンハンスメント情報(SEI)メッセージで伝送される。SEIメッセージングは、フィルムグレインSEIメッセージングを含め、標準(normative)ではない。SMPTE-RDD-5-2006(参考文献[5])では、フィルムグレイン技術デコーダ仕様(Film Grain Technology Decoder Specification)が、ビット精度(bit-accurate)のフィルムグレインシミュレーションを規定している。AV1(参考文献[4])では、フィルムグレインモデルパラメータは、ビットストリームの"Film grain params syntax"セクションの一部として伝送される。MPEG規格とは異なり、AV1におけるフィルムグレイン合成は標準である。
【0022】
図1Aは、フィルムグレインが元の入力映像の一部であり得る場合におけるフィルムグレイン技術のエンドツーエンドのフロー例(100A)を示している。図1Aに示されるように、符号化処理(80)の間、入力ビデオシーケンス(102)が与えられると、フィルムグレイン除去ステップ(105)が映像を解析し、ノイズ除去または当該技術分野で知られている他のフィルタリング技術を適用して、フィルムグレインを低減または除去し、フィルムグレインのない映像(107)を生成する。その後、フィルムグレインの無い映像は、エンコーダ110によって(例えば、AVC、HEVC、AV1等を用いて)エンコードされる。並行して、フィルムグレインノイズ(109)の推定値(例えば、入力映像102から抽出される)がフィルムグレインモデリング処理120によって処理され、パラメータ(複数)が生成される。パラメータは、フィルムグレインモデルに従って復号処理(90)によって元のフィルムグレインの近似値を再現するために用いられ得る。これらのパラメータは、符号化されたビットストリーム(112)にメタデータ(122)として埋め込まれる。メタデータは、ビットストリームの構文(syntax)の一部または補足情報(SEIメッセージングなど)の一部とすることができる。
【0023】
復号処理(90)の間、ビデオデコーダ(130)(例えば、AVC、HEVC、AV1などのデコーダ)は、符号化されたビットストリーム(112)および対応するフィルムグレインメタデータ(122)を受信し、復号されたビデオビットストリーム(132)およびFGパラメータ(134)(典型的には、符号化処理のステップ120で生成されたパラメータと同じ)を生成する。フィルムグレイン合成処理140は、それらのFGパラメータを適用して合成フィルムグレイン(142)を生成する。この合成フィルムグレインが復号されたフィルムグレインの無い映像(132)に付加されると、入力映像(102)によく似た出力映像(152)が生成される。
【0024】
図1Bは、フィルムグレインが元の入力映像の一部ではなく、復号処理中に付加され得る場合におけるフィルムグレイン技術のエンドツーエンドのフロー例(100B)を示す。図1Bに示されているように、符号化(95)の間、フィルムグレインを含まない可能性のある入力ビデオシーケンス(102)が与えられると、コンテンツ解析ステップ(160)は、入力特性とエンコーダ(110)の符号化特性とを考慮して、復号された映像に付加された場合に、どのような種類の合成フィルムグレインノイズが映像品質を向上させるか、または「フィルムルック」を模倣するかを決定することができる。この解析の出力は、メタデータ(122)として符号化ビットストリーム(112)に埋め込まれ得るフィルムグレインモデルパラメータのセットである。これらのメタデータは、ビットストリームのシンタックスの一部または補足情報(SEIメッセージングなど)の一部とすることができる。
【0025】
処理100Bにおける復号処理(90)は、処理100Aにおける処理と同じである。符号化されたビットストリーム(112)を復号した後、フィルムグレイン合成処理(140)が、抽出されたFGパラメータを適用して合成フィルムグレイン(142)を生成する。この合成フィルムグレインが復号されたフィルムグレインの無い映像(132)に付加されると、入力映像(102)によく似た出力映像152が生成される。
【0026】
[MPEGフィルムグレインメタデータ]
AVC、HEVC、およびVVC(参考文献[1-3]および参考文献[6])(議論を容易にするために、MPEGまたはMPEGビデオと総称する)において、フィルムグレインモデルパラメータは、フィルムグレイン特性(FGC)またはフィルムグレイン(FG)SEIメッセージングに関するシンタックスの一部である。フィルムグレイン合成(FGS)は、主に以下のパラメータセットによって特徴付けられる:
-フィルムグレインモデル:周波数フィルタリングモデルまたは自己回帰(auto-regression: AR)モデルを含む。
-ブレンディングモード:加算モードまたは乗算モードを含む。
-強度区間(Intensity intervals):各区間の下限値および上限値を含む。
-コンポーネントモデル値:特定のグレインモデルで用いられるメソッドの特性を定義するシンタックスパラメータ。
一例として、表1に、AVC用のFGC SEIでサポートされる主なパラメータの一部を示す。VVC SEI(参考文献[6])では、これらのパラメータは、わずかに異なる名称で表されることがある。例えば、fg_model_id、fg_separate_colour_description_present_flag、fg_blending_mode_idなどの名称で表されることがある。
【表1】

ここで、
【数1】
である。
注:HEVCおよびVVCでは、film_grain_characteristics_repetition_periodは、u(1)エンコーディング(1ビットの符号なし整数)を用いるfg_characteristics_persistence_flagに置き換えられる。
【0027】
MPEGビデオSEIメッセージングは、周波数フィルタリングモデルと自己回帰(AR)モデルの2つのモデルをサポートしている。AVC、HEVC、およびVVCの仕様書には、ビット精度のFG合成処理は規定されていない。周波数フィルタリングモデルについては、SMPTE-RDD-5-2006ドキュメント(RDD-5とも呼ばれる)"Film Grain Technology -Specifications for H.264 | MPEG-4 AVC Bit streams"(参考文献[5])が、フィルムグレインシミュレーションのためのビット精度のプロセスを規定している。表2に、文献[5]で用いられているFGCパラメータと、そのサポート範囲を示す。
【0028】
【表2】
【0029】
参考文献[5]で用いられるFGCパラメータは、さらに以下のように制約される。
・intensity_interval_lower_bound[c][i]およびintensity_interval_upper_bound[c][i].
すべてのcと任意の強度値vに対して、intensity_interval_lower_bound[c][i] <= vかつintensity_interval_upper_bound[c][i] >= vを満たす強度区間iは、多くとも1つでなければならない。
・SEIメッセージ内のすべての色成分cと強度区間iとを組み合わせて、異なるペア(comp_model_value[c][i][1]、comp_model_value[c][i][2])の数は10以下でなければならない。
・フィルムグレインシミュレーション法は、プログレッシブコンテンツにのみ用いられる。
【0030】
これらの制約は次のように解釈される。
・フィルム合成法はプログレッシブ・コンテンツにのみ適用される。
・フィルムグレインモデルは、加算ブレンディングモードによる周波数フィルタリングを用いる。
・この処理では、num_model_values_minus1[c]の値が最大2までに制限されるため、バンドパスフィルタリングとクロスカラー相関ができない。
・多世代フィルムグレインはサポートされていない。強度区間は重ならないため、各サンプルに対して1つの強度区間しか許されない(区間は8×8ブロックレベルの平均から決定される)。
・SEIメッセージ内のすべての色成分cと強度区間iについて、異なるペア(comp_model_value[c][i][1], comp_model_value[c][i][2])の数は10以下であるべきである。
・連続するIDRフレームは同じidr_pic_idを持たないものとし、(デコード順で)32フレーム以下だけ離れている任意の2つのIDRフレームは同じidr_pic_idを持たないものとする。
・フィルムグレインシミュレーションは、切り出し(cropping)を適用する前に、デコードされたフレームに対して実行されなければならない。
・シミュレーション処理は、4:2:0クロマフォーマット、8ビット深度で定義される。
注:AVC、HEVC、VVC仕様の最近のアップデートにより、FGCは8ビット以上のビット深度をサポートするように拡張された。原理的には、同じ手順をRDD-5にも適用できる。
【0031】
RDD-5のフィルムグレイン合成は、2つの主なステップを含む。
〇 フィルムグレインパターンデータベースの作成
〇 フィルムグレインシミュレーション
・ルックアップテーブルと擬似乱数値を用いて、水平カット周波数hと垂直カット周波数vを0~12の範囲で組み合わせたデータベース(合計169パターン)が作成される。
・各色成分におけるすべての8×8ブロックについて、ブロック平均値が計算され、強度区間と比較して、その8×8ブロックに用いられるフィルムグレイン成分値が選択される。平均値がどの境界にも入らない場合は、シミュレーションは実行されない。
・3タップのデブロッキングフィルターが8×8ブロックの垂直境界に適用され、視認できるブロックの度合いを減らす。
【0032】
[AV1フィルムグレイン技術]
AV1におけるフィルムグレイン合成は標準のプロセスであり、ノイズのシミュレーションには自己回帰(AR)モデルを用い、復号されたソースサンプルにノイズを加えるために加算ブレンドモードを用いる。合成処理は、主にグレインパターンとグレイン強度によって制御される。
【0033】
AV1は、a)乱数生成処理、b)グレイン生成処理、c)スケーリングルックアップ初期化処理、d)付加ノイズ合成処理、というステップでFG処理を決定する。
【0034】
2つのフィルムグレイン合成モデルを比較すると、MPEG video SEIは、film_grain_model_idを1に設定することでARフィルムモデルをサポートし、blending_mode_idを0に設定することで加算ブレンドモードをサポートする。MPEG video SEIのARモデルとAV1のARモデルとの主なFGSの違いは以下の通りである。
・MPEGビデオSEI ARモデルはフレームレベルで動作し、以前に合成されたグレインに依存する。AV1 ARモデルは、82×73のサイズのLumaグレインから形成される32×Wのサイズのストライプを用いる。
・MPEGビデオSEI ARモデルは、AV1と比較してより多くの数の隣接(neighbors)を用いることができる。
・クロマ・グレインのLumaへの依存性について、
a.MPEGビデオSEI ARモデルの場合、クロマグレイン合成は、コンポーネントモデル値によって制御されるルマとクロマに依存し得る。
b.AV1 FGSモデルの場合、グレイン合成は独立している。彩度(chroma)へのノイズの混合(blending)はデコードされた輝度(luminance)の強度に依存し得る。
【0035】
[フィルムグレインメタデータの変換(Transcoding)]
デコーディングデバイスがAV1またはMPEGビデオコンテンツ(例えば、AVC、HEVC、およびVVC)のいずれかに対してフィルムグレイン合成を可能にするハードウェアアクセラレータを既に有している可能性があること、およびフィルムグレインメタデータがビデオ符号化技術に関わらず生成される可能性があることを考慮すると、本発明者らによって理解されるように、MPEGとAV1との間でフィルムグレインメタデータをトランスコードすることにより、ユーザは、既存のコンテンツを用いて、より豊かなユーザ体験を得ることができる可能性がある。さらに、提案される実施形態では、既存のMPEGフィルムグレイン(FG)SEIメッセージング構文(syntax)をそのまま用いて、デコーダがMPEGデコードされた映像にAV1フィルムグレイン合成を適用することを可能にする。
【0036】
[フィルムグレインパラメータのMPEGからAV1への変換]
図2は、MPEG SEIメッセージに含まれるシンタックス値が、AV1フィルムグレイン合成処理において適用され得るかを判定するための処理フロー(200)の一例を示している。ある実施形態では、以下の制約がすべて適用される場合、変数FGC2AV1enableFlagが1に設定され、MPEG SEIメッセージングを用いてAV1仕様に従ってフィルムグレインノイズを生成できることを示し、そうでない場合、FGC2AV1enableFlagは0に設定される。
- fg_model_idは1(自己回帰)とする。
- fg_blending_mode_idは0(加算)とする。
- fg_separate_colour_description_present_flagは0とする。
- ChromaFormatIdcは2未満とする(モノクロまたはYUV4:2:0のみ)。
- fg_intensity_interval_upper_bound[0][i]の値は
fg_intensity_interval_lower_bound[0][i+1]-1に等しく、
fg_intensity_interval_lower_bound[0][i+1]の値は
fg_intensity_interval_upper_bound[0][i]+1に等しいものとする。これは区分的連続モデルを用いた強度区間の表現と整合する。(この制約は、多世代フィルムグレイン合成も許可しないことに注意)。
- fg_characteristics_cancel_flag = 0である。以前のFGメッセージングからの持続性が無いとすると、このフラグは新しいFGパラメータが存在することを示す。
-MPEG SEIが適用されるコンテンツはプログレッシブである。
FGC2AV1enableFlagが1であるとき、MPEG SEIメッセージに含まれるシンタックス値がAV1 フィルムグレイン合成処理で用いられ得る。FGC2AV1enableFlagが0であるとき、MPEG SEIメッセージに含まれるシンタックス値はAV1フィルムグレイン合成処理において用いられないことになる。
【0037】
図3は、フィルムグレインに関するMPEG SEIメッセージが無視されるべきか、AV1フィルムグレイン処理で用いられるためにトランスコードされるべきかを決定するための処理フローの一例を示している。図2に示されているように、FGC2AV1enableFlag=0であると判定された場合(ステップ305)、デコーダはAV1フィルム合成を適用せず、MPEGビデオ仕様に従ってフィルムグレインを適用し得る。ある実施形態において、FGC2AV1enableFlagが1であり、MPEG SEIメッセージがAV1フィルムグレイン合成処理で用いられることが意図されている場合、AV1フィルムグレインparamsシンタックス要素の値に対して以下の制約が適用され得る。
1)現在のピクチャのMPEG SEIが存在しない場合(パス310)、
・(ステップ320)前のMPEG SEIのfg_characteristics_persistence_flagが1である場合、(ステップ325):film_grain_params_presentは1に、apply_grainは1に、update_grainは0に、grain_seedは前のMPEG FG SEIにおける同じ値に設定される。
・そうでない場合(330)(前のMPEG SEIのfg_characteristics_persistence_flagが0である場合)、film_grain_params_presentは0に設定される。
2)そうでない場合(現在のピクチャのMPEG FG SEIが存在する場合)、ステップ400において、MPEF FG SEIパラメータが、以下のようにAV1 FGパラメータにトランスコードされ得る(図4も参照)。
-fg_characteristics_cancel_flag が1のとき、(405):
film_grain_params_presentフラグは0に、apply_grainは0に設定される。
そうでない場合(402)(fg_characteristics_cancel_flagが0の場合)、
-(407)apply_grain は1に、update_grainは1に設定される。
-(407)num_y_pointsは、fg_num_intensity_intervals_minus1[0]+1と一致する値に設定される(すなわち、区分的連続モデルの点の数は、fg_intensity_interval_lower_bound[0][i]とfg_intensity_interval_upper_bound[0][i]をサポートするのに十分であるものとする)。
-(407)chroma_scaling_from_lumaは0に設定され、
ar_coeff_lag = ceil(fg_num_model_values_minus1[0] ÷ 4 )
-(410)grain_seedは、符号なし16ビット値に設定される。ある実施形態では、grain_seed値は、ルマ成分について、SMPTE RDD-5の「1.5.2.1 Seed initialization」節のように設定され得る。
-(415)grain_scaling_minus_8は、fg_log2_scale_factorと整合する値に等しいものとする。例えば、ある実施形態では、fg_log2_scale_factor=grain_scaling_minus_8+8である。
【0038】
このように、2つのMPEG SEIフラグ:fg_characteristics_cancel_flagおよびfg_characteristics_persistence_flagが与えられるとして、擬似コードによる以下のデータフローが、ある実施形態による提案される動作を要約する。
【数2】
【0039】
さらに、overlap_flagを0または1に設定することで、フィルムグレインブロック間の空間的なオーバーラップを不許可または許可することができる。この値はAV1のビットストリームでシグナリングされるため、MPEG FG SEIメッセージングを通してシグナリングされない限り、ビデオ品質を向上させるために、デフォルト値の1が推奨される。ARモデルパラメータは、様々な方法でマッピングすることができる。ある実施形態では、マッピングは以下のように示され得る:
a)ar_coeff_lag = ceil(fg_num_model_values_minus1[0] ÷ 4 )を用いて、ar_coeff_lag パラメータの値は、表3に示す値であり得る。
【表3】

b)(430)ar_coeff_y_plus_128[pos]の値は、ar_coeff_lagが1の場合は表4、ar_coeff_lagが2の場合は表5に示す値にするものとする。
【表4】

【表5】

c)(425)ar_coeff_shift_minus_6は、fg_comp_model_value[0][i][j]およびfg_log2_scale_factorで示される自己回帰係数の範囲に整合する値とする。
d)(420)grain_scale_shiftは、fg_comp_model_value[0][i][0]に整合する値とする。
e)overlap_flagを0か1に設定する。
f)(435)フィルムグレインがナローレンジコンテンツに適用される場合、clip_to_restricted_rangeを1にし、そうでない場合、0に設定するものとする。
【0040】
図5Aは、MPEG SEIメッセージングおよびAV1フィルムグレイン合成を用いるフィルムグレイン合成の代替的な処理の例(500A)を示す。ピクチャのシーケンスが与えられると(502)、ステップ504において、デコーダは、現在のピクチャが関連するフィルムグレイン(FG)SEIメッセージングを有するかを確認し得る。そのようなメッセージングが無い場合(パス505)、どの持続フラグ(persistence flags)のステータスも無視して、付加されるべきフィルムグレインは無く、デコーダは次のピクチャに移る。そうでない場合、デコーダは、MPEG SEIメッセージングを解析するためにステップ510に移行する。
【0041】
ステップ515において、デコーダは、与えられたSEIメッセージングが、AV1フィルム合成を用いて、特に、AR、加算、モデルを用いて、FG合成を実行するために用いられ得るかを決定する必要がある。例えば、処理200(図2)を用いて、FGC2AV1enableFlagの値が1であるかを検出することができる。用いられるモデルが異なる場合、MPEG FG SEIパラメータの解析およびトランスコーディングは、本開示の範囲外である「他の処理」(520)を介して行われる。例えば、ある実施形態では、処理520は、単に「何もしない」または「MPEGフィルムグレイン合成を適用する」処理であってもよい。
【0042】
次にステップ525では、シフトの値やAR係数など、AV1 ARモデルのパラメータを設定する必要がある。シフト演算のために、AV1には、grain_scaling_minus_8、ar_coeff_shift_minus_6、grain_scale_shiftの3つの関連するパラメータがある。MPEG FGでは、1つのパラメータfg_log2_scale_factor(AVCではlog2_scale_factorとも呼ばれる)のみが存在する。ある実施形態では、fg_log2_scale_factorはgrain_scaling_minus_8+8に等しく設定され、grain_scale_shiftは0に設定され、ar_coeff_shift_minus_6は(0,1,2,3)のうちの一定値に設定される。例えば、ar_coeff_shift_minus_6を2に設定することができる。
【0043】
MPEG ARモデルパラメータについて、fg_comp_model_value[c][i][0]は、フィルムグレインノイズの分散または標準偏差をモデル化する。ある実施形態では、それを、ステップ540で記述される、point_y/cb/cr値に対するScalingLUTテーブルまたはマップを生成するために使用することができる。ScalingLUTは、線形補間の代わりに、強度区間内に定数値を有することによって生成される。ScalingLUTは次のように生成される:
cIdx=0..2のときの変数NumPoints[cIdx]は、以下のように設定される:
- fg_comp_model_present_flag[cIdx]が0に等しい場合、NumPoints[cIdx]は0に設定される。
- そうでない場合(fg_comp_model_present_flag[cIdx]が0でない場合)、
NumPoints[cIdx]は、fg_num_intensity_intervals_minus1[cIdx]+1 に設定される。
AV1シンタックスnum_y_pointsはNumPoints[0]に、AV1シンタックスnum_cb_pointsはNumPoints[1]に、AV1シンタックスnum_cr_pointsはNumPoints[2]に設定される。
【数3】
【0044】
スケーリング関数の値を得るために、色平面インデックスcIdxと入力値pointValを入力として、以下の手続きが呼び出される。出力は、スケーリング関数pointScalの値である。
【数4】
【0045】
ar_coeff_lagが2に設定されている場合、fg_comp_model_value[c][i][j](j=1, 2, 3, 4, 5)は、以下のように設定される:
- fg_comp_model_value[c][i][2]は、c = 0...2 かつ i = 0...fg_num_intensity_intervals_minus1[c]の場合、0に等しいものとする。
- fg_comp_model_value[c][i][1]は、c = 0...2 かつ i = 0...fg_num_intensity_intervals_minus1[c]の場合、ar_value1[c]と表記されるar(AR)値に等しいものとする。
- fg_comp_model_value[c][i][3]は、c = 0...2 かつ i = 0...fg_num_intensity_intervals_minus1[c]の場合、ar_value3[c]と表記されるar値に等しいものとする。
- fg_comp_model_value[c][i][4]は、c = 0...2 かつ i = 0...fg_num_intensity_intervals_minus1[c]の場合、ar_value4[c]と表記されるar値に等しいものとする。
- fg_comp_model_value[c][i][5]は、c = 0...2 かつ i = 0...fg_num_intensity_intervals_minus1[c]の場合、ar_value5[c]と表記されるar値に等しいものとする。
変数numPos[cIdx]は以下のように設定される:
- cIdx = 0の場合、numPos[cIdx] = 2 * ar_coeff_lag * (ar_coeff_lag+1)
- それ以外の場合(cIdx != 0)、numPos[cIdx] = numPos[0]+1
【0046】
配列aRCoeffs[cIdx][pos]( pos = 0...numPos[cIdx] - 1)は、以下の場合を除いて0に等しく設定される。
aRCoeffs[cIdx][2]は、((ar_value5[cIdx] * ar_value4[cIdx] * ar_value4[cIdx])<< aRCoeffShift)+(1<<(ScalingShift+1)) >> (3*ScalingShift) に等しく設定される。
aRCoeffs[cIdx][6]は、(((ar_value3[cIdx] * ar_value4[cIdx])<< aRCoeffShift)+(1 << ScalingShift)) >> (2*ScalingShift) に等しく設定される。
aRCoeffs[cIdx][7]は、(((ar_value1[cIdx] * ar_value4[cIdx])<< aRCoeffShift)+(1 << ScalingShift)) >> (2*ScalingShift) に等しく設定される。
aRCoeffs[cIdx][8]は、((ar_value3[cIdx]<< aRCoeffShift)+(1 << (ScalingShift-1)) >> ScalingShift に等しく設定される。
aRCoeffs[cIdx][10]は、((ar_value5[cIdx]<< aRCoeffShift)+(1 << (ScalingShift-1)) >> ScalingShift に等しく設定される。
aRCoeffs[cIdx][11]は、((ar_value1[cIdx]<< aRCoeffShift)+(1 << (ScalingShift-1)) >> ScalingShift に等しく設定される。
aRCoeffsは、ステップ535でグレインテンプレートを生成するために用いられる。
【0047】
AV1では、変数grain_seed(GrainSeedとも呼ばれる)は、フィルムグレイン合成で用いられる擬似乱数生成器の開始値を指定する。特に、GrainSeedは16ビット変数RandomRegisterを初期化するために用いられる値を含む。限定するものではないが、GrainSeed生成ステップ(530)は、ルマ成分についてはSMPTE RDD-5の「1.5.2.1 Seed initialization」の項に従えばよい。また、付録1の「8.5.3.2節」に実装例が示されている。
【0048】
SMPTE RDD-5では、IDRフレーム(他のフレームを参照せずにデコードできるフレーム)のPicOrderCntとidr_pic_idという変数に基づいてシードが生成される。AVCでは、idr_pic_idはスライスヘッダから読み取ることができ、連続するIDRフレームは同じidr_pic_idを持つべきではない。さらに、(デコード順で)32フレーム以下離れている2つのIDRフレームは、同じidr_pic_idを持つべきではない。これは、時間的に隣接するフレームにおけるフィルムグレインの繰り返しを避けるためである。しかし、このシンタックスは、HEVCまたはVVCには存在しない。ある実施形態では、新しい「idr_pic_id」のような変数(ここでは便宜上idr_pic_idと命名し、限定はしない)を定義することができ、この変数は、idr_pic_id=0と初期設定し、IRAPピクチャごとにidr_pic_idを1ずつ増加させることによって更新することができる。このアプローチの潜在的な欠点は、トリックモード(例えば、早送りなど)の場合、そのようなidr_pic_id変数が適切な同期を失い、無効な値を有する可能性があることである。別の実施形態では、idr_pic_idの情報を用いないことが提案される。例えば、PicOrderCnt値に制約を付けることが提案される。例えば、PicOrderCnt値は、以下の制約を有することができる:1)連続するIRAPフレームは同じPicOrderCnt値を持ってはならない、2)(デコード順で)32フレーム以下離れている2つのIRAPフレームは同じPicOrderCnt値を持ってはならない。このアプローチは、HEVCとVVCをサポートするためのSMPTE-RDD-5の将来の改訂に適用される可能性がある。
【0049】
フィルムグレイン合成処理は次のように説明できる。AR係数とガウシアンシーケンスが与えられると、まずフィルムグレインテンプレートが生成される(530)。擬似ランダム生成器を用いて、デコーダは、フィルムグレイン・テンプレート内の32×32ブロック(オーバーラップが用いられる場合は、+2行/列)のオフセットを生成する。擬似ランダム生成器は、並列行処理を可能にするために、32×32ブロックの各行の先頭で初期化される。ジェネレータは、GrainSeed要素に基づいて初期化される。フィルムグレインの32×32ブロックがスケーリングされ、再構成されたサンプルに付加され、クリッピングが適用される(545)。4:2:0の場合、クロマ成分のブロックサイズは、水平および垂直方向にルマブロックサイズの半分である。更なる詳細については、付録1の「8.5.3.3節」で提案されている処理の例を参照されたい。
【0050】
ステップ535に続いて、AV1と同様に、ステップ540でスケーリングルックアップテーブル(LUT)を初期化し、現在のデコード画像にノイズを加える(ステップ545)。
【0051】
まとめると、MPEG SEI ARモデルを用いたAV1 FGS処理を適用する処理は、以下のとおりである。
・エンコーダで、フィルムグレイン合成のためにMPEGビデオSEIメッセージングを用いて送信するためのモデルおよび適切なシンタックスを生成する。
・デコーダで、MPEG FG SEIパラメータを対応するAV1 FGパラメータにマッピングし、提案されているフィルムグレイン合成処理(500)に従う。
【0052】
図5Bは、MPEG SEIメッセージングおよびAV1フィルムグレイン合成を用いるフィルムグレイン合成の代替的な処理の例(500B)を示している。処理500Aと比較すると、両方とも、前述した同一のフィルムノイズ合成およびフィルムノイズ付加ステップ525、530、535、540、545を有する。加算ブレンディングを伴うARモデリングが有効化されているとして、処理500Bは、計算されたARパラメータが必要に応じてどのように更新され得るかについて、いくつかの追加の処理の詳細を提供する。例えば、ステップ504の後、FG SEIメッセージングが無い場合に、処理500Bは、2つの追加のステップ560および565を含む。ステップ560において、デコーダは、フィルムグレイン処理が以前に利用可能であったかを(例えばFGパーシステンスフラグを確認することによって)確認し得る。そのような処理が利用可能でなかった場合、処理は前と同様にパス505に従う。「yes」の場合、ステップ565において、デコーダは以前に生成されたAV1フィルムグレインパラメータを再取得し、ステップ525に移行する。
【0053】
処理500Bは、追加のステップ570および575も含む。ステップ570において、デコーダは、fg_characteristics_cancel_flagの値を確認する。それがゼロに設定されている場合、残りのFG SEIメッセージが解析され、新しいフィルム合成パラメータが生成されてステップ525に進む。そうでなければ、ステップ575において、記憶されたARパラメータがクリアされ、フィルムグレイン合成および付加処理がスキップされる。
【0054】
図6Aは、ARラグが1に等しい場合に、MPEG SEIメッセージモデル値をAV1 AR係数にトランスコードする例を示している。
【0055】
図6Bは、ARラグが2に等しい場合に、MPEG SEIメッセージモデル値をAV1 AR係数にトランスコードする例を示している。
【0056】
[フィルムグレインパラメータのAV1からMPEGへの変換]
相互運用性を高めるために、いくつかの実施形態では、AV1フィルムグレインパラメータをMPEG FG SEIパラメータに変換することが望ましい場合がある。たとえば、コンテンツ制作者が既存のフィルムグレイン合成ハードウェアを利用したい場合や、MPEG圧縮コンテンツとAV1圧縮コンテンツのどちらを視聴してもユーザが同様のフィルムルックを体験できるようにしたい場合がある。前述のように、フラグ(例えば、AV12FGCenableFlagと表される)を定めることができ、以下の全ての制約が適用されるとき、AV12FGCenableFlagは1に設定され、そうでないとき、AV12FGCenableFlagは0に設定される。AV12FGCenableFlagが1に等しいとき、AV1フィルムグレインモデルパラメータ値はMPEG FG SEIメッセージで信号化され得る。AV12FGCenableFlagが0に等しいとき、AV1フィルムグレインモデルパラメータ値はPEG SEIメッセージで信号化されないものとする。
- chroma_scaling_from_lumaは0とする。
- ar_coeff_lagは3未満とする。
- fg_separate_colour_description_present_flagは0とする。
- ChromaFormatIdcは2未満とする(モノクロまたはYUV 4:2:0のみ)。
- MPEG SEIが適用されるコンテンツはプログレッシブである。
【0057】
AV12FGCenableFlagが1であり、AV1フィルムグレインモデルパラメータがMPEG SEIメッセージでシグナリングされる場合、MPEG SEIシンタックス要素の値には以下の制約が適用される:
- apply_grainが1に等しく、update_grainが1の場合、
fg_characteristics_cancel_flagは0とする。
- fg_model_idは1とする。
- fg_sepearate_colour_description_present_flagは0とする。
- fg_blending_mode_idは0とする。
- fg_log2_scale_factorは、grain_scaling_minus_8に整合する値とする。
- fg_num_intensity_intervals_minus1は、num_y_points[0] - 1とする。
- ar_coeff_lagが0である場合、fg_num_model_values_minus1[0]は0とする。
それ以外の場合、ar_coeff_lagが2に等しいとき、fg_num_model_values_minus1[0]は5とする。それ以外の場合、ar_coeff_lagが1に等しいとき、fg_num_model_values_minus1[0]は0よりも大きく5よりも小さいものとする。
【0058】
例として、fg_comp_model_value[0][i][j]の値は、ar_coeff_y_plus_128[pos]が存在する場合、以下に示すように、ar_coeff_y_plus_128[pos]から決定され得る。表6はar_coeff_lagが1に等しい場合を示し、表7はar_coeff_lagが2に等しい場合を示している。
【表6】
【表7】
【0059】
図7Aおよび図7Bはそれぞれ、ARラグが1に等しい場合にAV1 AR係数をMPEG SEIメッセージモデル値にトランスコードする例を示している。
【0060】
[RDD-5のHEVCおよびVVCへの拡張]
前述したように、RDD-5(参考文献[5])は、AVC(H.264)用のフィルムグレイン技術のビット精度の高い技術実装を提供する。このセクションでは、HEVCとVVCに適用され得るRDD-5の更新版に対するいくつかの推奨事項を提供する。推奨事項のいくつかは既に議論したため、その詳細は本セクションでは省略される場合がある。本明細書の付録2は、HEVCおよびVVCのMPEGフィルムグレイン合成におけるRDD-5周波数モデルの修正案の例を提供する。
【0061】
本発明者らによって理解されるように、RDD-5の将来のバージョンは、少なくとも以下を考慮すべきである:
a)周波数フィルタリングモデルをサポートするだけでなく、前述のように自己回帰フィルムグレインモデルをサポートする。
b)フィルムグレインをルマピクセルのみに適用する。これにより、複雑さが軽減され、視覚的品質が向上する。
c)入力解像度に応じて、グレインシミュレーションおよびデブロッキングを16×16ブロック以上に拡張する。これにより、高解像度コンテンツの複雑さが軽減される。例えば、16×16ブロックをサポートするように処理を修正することは、以下のことを含み得る:
a.デコードされたフレーム内の現在の16×16ブロックのピクセルの平均値を計算する。
b.当該平均値を用いて、現在のブロックのグレインモデルのパラメータを選択する。
c.デコードされたフレーム内の現在の16×16ブロックの左上隅のオフセットを用いて、データベースから16×16グレインブロックを選択する。
d)[0,255]のうちの任意の整数値として定義されたスケールファクターを強制的に2のべき乗にし、その最大値を128に制限する。

RDD-5の式(1.6)は次のようになる。
【数5】

ある実施形態において、2の累乗のスケールファクター、例えば、scale_factor = 2x は、以下に示すように、comp_model_value[c][s][0]の値を丸めることによって決定することができる。
【数6】

2xがcomp_model_value[c][s][0]に最も近い場合、上記の一連の式は以下のように縮小される。
【数7】

e)デブロッキングを無効にする。デブロッキング処理は従属関係(dependencies)を引き起こす可能性があるため、マルチプロセッシングアーキテクチャ(SIMDなど)では好ましくない。実験結果では、デブロッキングを無効にしても、知覚される視覚的品質への影響は最小限であることが実証されている。ある実施形態では、デブロッキングは、非常に低いまたは非常に高いカットオフ周波数に対してのみ有効にされ得る。
【0062】
本発明者らによって理解されるように、SMPTE RDD-5が8×8よりも大きいblockAvgSizeをサポートするために一般化される必要がある箇所の中には、以下のルーチンが含まれる:
1)グレインパターンデータベースの改良
2)強度区間の選択
3)グレインブロックオフセットの決定
4)グレインブロックからのグレインパターンの決定
5)グレインブロックの垂直境界でのグレインパターンのデブロッキング
限定するものではないが、それらの修正のコードの例を付録3に記載する。付録3では、13×13×64×64のフィルムグレインデータベースを用いた実装例について説明するが、当業者は、メモリの制限に応じて、より小さいまたはより大きいデータベースを用いることができることを理解されたい。

[参考文献]
本明細書に記載された各文献は、参照によりその全体が本明細書に援用される。
[1] "Advanced Video Coding", Rec. ITU-T H.264, May 2019, ITU.
[2] "High Efficiency Video Coding", Rec. ITU-T H.265, November 2019, ITU.
[3] "Versatile Video Coding", Rec. ITU-T H.266, August 2020, ITU.
[4] "AV1 Bitstream and Decoding Process Specification", by P. de Rivaz et al., Version 1.0.0 with Errata, 2019-01-08.
[5] "RDD 5-2006 - SMPTE Registered Disclosure Doc - Film Grain Technology - Specifications for H.264 | MPEG-4 AVC Bitstreams", Mar. 2006, SMPTE.
[6] "Versatile supplemental enhancement information messages for coded video bitstreams", Rec. ITU-T H.274, Aug. 2020, ITU.
【0063】
[コンピュータ・システムの実装例]
本発明の実施形態は、コンピュータシステム、電子回路およびコンポーネントで構成されたシステム、マイクロコントローラ、フィールドプログラマブルゲートアレイ(FPGA)、または別の構成可能またはプログラマブルロジックデバイス(PLD)などの集積回路(IC)デバイス、離散時間またはデジタル信号プロセッサ(DSP)、特定用途向けIC(ASIC)、および/またはそのようなシステム、デバイス、またはコンポーネントの1つ以上を含む装置で実施することができる。コンピュータおよび/またはICは、本明細書で説明されるような、画像および映像の符号化におけるフィルムグレインメタデータのシグナリングおよび変換に関する命令を遂行、制御、または実行することができる。コンピュータおよび/またはICは、本明細書で説明される画像および映像の符号化におけるフィルムグレインメタデータのシグナリングおよび変換に関連する様々なパラメータまたは値のいずれを計算してもよい。画像および映像の実施形態は、ハードウェア、ソフトウェア、ファームウェア、およびそれらの様々な組み合わせで実装されてもよい。
【0064】
本発明の特定の実施態様は、プロセッサに本発明の方法を実行させるソフトウェア命令を実行するコンピュータプロセッサを備える。例えば、ディスプレイ、エンコーダ、セットトップボックス、トランスコーダなどの1つまたは複数のプロセッサは、プロセッサにアクセス可能なプログラムメモリ内のソフトウェア命令を実行することによって、上述のような画像および映像の符号化におけるフィルムグレインメタデータのシグナリングおよび変換に関する方法を実施することができる。本発明の実施形態は、プログラム製品の形態で提供することもできる。プログラム製品は、データプロセッサによって実行されると、データプロセッサに本発明の方法を実行させる命令を含むコンピュータ可読信号のセットを担持する任意の非一時的かつ有形の媒体で構成することができる。本発明によるプログラム製品は、多種多様な非一時的かつ有形の形態のいずれであってもよい。プログラム製品は、例えば、フロッピーディスクを含む磁気データ記憶媒体、ハードディスクドライブ、CD ROMを含む光学データ記憶媒体、DVD、ROMを含む電子データ記憶媒体、フラッシュRAMなどの物理的媒体で構成することができる。プログラム製品上のコンピュータ読み取り可能な信号は、任意に圧縮または暗号化されていてもよい。構成要素(例えば、ソフトウェアモジュール、プロセッサ、アセンブリ、デバイス、回路など)が先の記載で言及されている場合、特に指示がない限り、その構成要素への言及(「手段」への言及を含む)は、説明された構成要素の機能を実行する(例えば、機能的に等価である)任意の構成要素をその構成要素の均等物として含むと解釈されるべきであり、それには、図示された本発明の例示的な実施形態における機能を実行するが開示された構造と構造的には等価でない構成要素も含まれる。
【0065】
[均等、拡張、代替、その他]
このように、画像および映像の符号化におけるフィルムグレインメタデータのシグナリングおよび変換に関する例示的な実施形態を説明した。上の明細書において、本発明の実施形態が、実装ごとに異なり得る多くの具体的な詳細事項を参照して説明されてきた。したがって、何が本発明であり、何が本発明であると出願人が意図しているかの唯一かつ排他的な指標は、本出願から発行される特許請求の範囲であり、発行された具体的な形式(その後のあらゆる訂正を含む)における特許請求の範囲である。かかる特許請求の範囲に含まれる用語について本明細書に明示的に記載された定義は、特許請求の範囲において用いられるかかる用語の意味を決定するものとする。したがって、特許請求の範囲に明示的に記載されていない限定、要素、特性、特徴、利点、または属性は、当該特許請求の範囲をいかなる意味においても制限すべきではない。このように、本明細書および図面は、制限的な意味ではなく例示的な意味で考慮されるものである。
________________________________________________
【0066】
[付録1]
AV1仕様に従ったMPEGデコーディング中のフィルムグレイン合成をサポートするためのVVC SEIメッセージング(参考文献[6])の8.5節 "Film grain characteristics SEI message"への追記例
【0067】
[8.5.3 加法ブレンディングモードを持つARモデルのフィルムグレイン合成処理]
この処理では、以下の変数を定義する必要がある:
- ルマサンプル単位で表したピクチャ幅およびピクチャ高さ。ここではそれぞれ、PicWidthInLumaSamplesおよびPicHeightInLumaSamplesと表す。
- クロマフォーマットインジケータ。ここでは7.3.に記載のとおりChromaFormatIdcと表す。
- ルマ成分のサンプルのビット深度(ここではBitDepthYと表す)およびChromaFormatIdcが0でない場合、2つの関連するクロマ成分のサンプルのビット深度(ここではBitDepthCと表す)。BitDepthYはBitDepthCと等しく設定され、BitDepthと表される。
この処理では、さらに以下の変数の制約を要求する:
- fg_model_idは1(自己回帰)とする。
- fg_blending_mode_idは0(加算)とする。
- fg_separate_colour_description_present_flagは0とする。
- ChromaFormatIdcは2未満とする(ChromaFormatIdcが0の場合はモノクロ、ChromaFormatIdcが1の場合はYUV 4:2:0)。
- fg_intensity_interval_upper_bound[0][i]の値は
fg_intensity_interval_lower_bound[0][i+1]-1に等しく、
fg_intensity_interval_lower_bound[0][i+1]の値は
fg_intensity_interval_upper_bound[0][i]+1に等しいものとする。これは区分的連続モデルを用いた強度区間の表現と整合する。(この制約は、多世代フィルムグレイン合成も許可しないことに注意)。
- fg_comp_model_value[c][i][2]は0とする。
- fg_comp_model_value[c][i][1]は、c = 0...2、i = 0...fg_num_intensity_intervals_minus1[c]の場合、ar_value1[c]と表記されるar値に等しいものとする。
- fg_comp_model_value[c][i][3]は、c = 0...2、i = 0...fg_num_intensity_intervals_minus1[c]の場合、ar_value3[c]と表記されるarに等しいものとする。
- fg_comp_model_value[c][i][4]は、c = 0...2 かつ i = 0...fg_num_intensity_intervals_minus1[c]の場合、ar_value4[c]と表記されるar値に等しいものとする。
- fg_comp_model_value[c][i][5]は、c = 0...2、i = 0...fg_num_intensity_intervals_minus1[c]の場合、ar_value5[c]と表記されるar値に等しいものとする。
この処理の入力は、デコードされたピクチャサンプル配列IdecodedYと、ChromaFormatIdcが1に等しい場合、配列IdecodedUおよびIdecodedVである。
この処理の出力は、変更された画像サンプル配列IgrainYと、ChromaFormatIdcが1の場合は配列IgrainUおよびIgrainVである。
変数GrainCenterは128 << (BitDepth - 8)に設定される。
変数GrainMin は = - GrainCenter に等しく設定される。
変数GrainMaxは、(256 << (BitDepth - 8)) - 1 - GrainCenterに等しく設定される。
変数ScalinShiftはfg_log2_scale_factorに等しく設定される。
フィルムグレイン合成処理は次のように説明できる。AR係数とガウスシーケンスが与えられると、まずフィルムグレインテンプレート(64×64、実装上は82×73を使用)が生成される。擬似ランダム生成器を用いて、デコーダは、フィルムグレインテンプレート内の32×32ブロック(オーバーラップを用いる場合は追加で+2行/列)のオフセットを生成する。擬似ランダムジェネレーターは、並列行処理を可能にするために、32×32ブロックの各行の最初に初期化される。ジェネレータは、GrainSeed要素に基づいて初期化される。フィルムグレインの32×32ブロックはスケーリングされ、再構成されたサンプルに追加され、クリッピングが適用される。4:2:0の場合、クロマ成分のブロックサイズは2倍小さくなる。
グレインシード(GrainSeed)生成処理は、8.5.3.1節に規定されるように呼び出される。
疑似乱数生成処理は、8.5.3.2節に規定されるように呼び出される。
グレインテンプレート生成処理は、8.5.3.3 節に規定されるように呼び出される。
スケーリングルックアップ初期化処理は、8.5.3.4節に規定されるように呼び出される。
ノイズ追加処理は、8.5.3.5節に規定されるように呼び出される。
【0068】
[8.5.3.1 グレインシード生成処理]
変数GrainSeed(またはgrain_seed)は、フィルムグレイン合成で用いられる擬似乱数生成器の開始値を指定する。特に、GrainSeedは16ビット変数RandRegister(またはRandomRegister)を初期化するために用いられる値を含む。
GrainSeedの生成は、ルマ成分について、SMPTE RDD-5の節1.5.2.1 Seed initialization に従う。
【0069】
[8.5.3.2 乱数生成処理]
この処理の入力は変数nBitsである。処理の出力は変数randResultである。
乱数生成処理は、関数randResult = getRandNum(nBits)で指定する。
【数8】
【0070】
[8.5.3.3 グレイン・テンプレート生成処理]
この処理の出力はフィルムグレインテンプレートGrainTemplate[cIdx][y][x]である。変数cIdxは色成分インデックス、y = 0...nCurrSh、 x = 0...nCurrSwである。cIdxが0(ルマ成分)のとき、nCurrSw = 82、nCurrSh = 73である。ChromaFormatIdc = 1のとき、cIdxが1または2(クロマ成分)の場合、nCurrSw = 44、nCurrSh = 38である。
配列gaussianSequenceは、平均がゼロで標準偏差が約512のガウス分布からからのランダムなサンプルを、[-2048, 2047]の範囲に切り取り、最も近い4の倍数に丸めたものである。
【表8】

変数scaleShift は 12 - BitDepth に設定される。
フィルムグレインテンプレートは以下のように生成される。
- cIdxが1の場合、RandRegisterはGrainSeed^0xb524に設定される。
- cIdxが2の場合、RandRegisterはGrainSeed^0x49d8に設定される。
【数9】
変数ar_coeff_lagは2に設定される。
変数aRCoeffShiftは8に設定される。
変数numPos[cIdx]は以下のように設定される:
- cIdx = 0の場合、numPos[cIdx] = 2 * ar_coeff_lag * (ar_coeff_lag+1)
- それ以外の場合、(cIdx != 0), numPos[cIdx] = numPos[0]+1
配列aRCoeffs[cIdx][pos], for pos = 0...numPos[cIdx] - 1は、以下を除いて0に等しく設定される。
aRCoeffs[cIdx][2] は、((ar_value5[cIdx] * ar_value4[cIdx] * ar_value4[cIdx])<< aRCoeffShift)+(1<<(ScalingShift+1)) >> (3*ScalingShift) に等しく設定される。
aRCoeffs[cIdx][6] は、(((ar_value3[cIdx] * ar_value4[cIdx])<< aRCoeffShift)+(1 << ScalingShift)) >> (2*ScalingShift) に等しく設定される。
aRCoeffs[cIdx][7] は、(((ar_value1[cIdx] * ar_value4[cIdx])<< aRCoeffShift)+(1 << ScalingShift)) >> (2*ScalingShift) に等しく設定される。
aRCoeffs[cIdx][8] は、((ar_value3[cIdx]<< aRCoeffShift)+(1 << (ScalingShift-1)) >> ScalingShift に等しく設定される。
aRCoeffs[cIdx][10] は、((ar_value5[cIdx]<< aRCoeffShift)+(1 << (ScalingShift-1)) >> ScalingShift に等しく設定される。
aRCoeffs aRCoeffs[cIdx][11] は、((ar_value1[cIdx]<< aRCoeffShift)+(1 << (ScalingShift-1)) >> ScalingShift に等しく設定される。
各cIdxのグレインテンプレートは以下のように生成される:
【数10】
【0071】
[8.5.3.4 scalingLutの初期化]
色平面cIdxに対して、以下の初期化処理が実行され、ScalingLut[cIdx][256]が初期化される。
cIdx=0..2のときの変数NumPoints[cIdx]は、以下のように設定される:
- fg_comp_model_present_flag[cIdx]が0の場合、NumPoints[cIdx]は0に設定される。
- そうでない場合(fg_comp_model_present_flag [cIdx] が 0 でない場合)、NumPoints[cIdx] は、fg_num_intensity_intervals_minus1[cIdx]+1に設定される。
【数11】
スケーリング関数の値を得るには、色平面インデックスcIdxと入力値pointValを入力として、以下の手続きを呼び出す。出力は、スケーリング関数 pointScal の値である。
【数12】
【0072】
[8.5.3.5 ノイズ処理の追加]
この処理への入力は、フィルムグレインを付加する前の再構成画像、すなわち配列recPictureLと、ChromaFomatIdcが0でない場合は配列recPictureCbおよびrecPictureCrである。
この処理の出力は、フィルムグレインを付加した後の修正された再構成画像、すなわち配列recPictureLであり、ChromaFomatIdcが0でない場合は配列recPictureCbおよびrecPictureCrである。
擬似ランダム生成器は、並列行処理を可能にするために、32×32ブロックの各行の最初に初期化される(変数rowNumと表記)。ジェネレータは、GrainSeed要素に基づいて初期化される。32×32ブロックごとに,擬似ランダムジェネレータgetRandNum(8)を用いて,GrainTemplate[cIdx]から34×34の配列grSCur[cIdx]が生成される。grSCur[cIdx]は,ピクチャ配列grPlanes[cIdx]に代入される.変数cIdxは色成分のインデックスを指定する。
【数13】

NumPoints[0]が0より大きいとき、フィルムグレインはルマ成分recPictureLに追加される。
【数14】

ChromaFormatIdcが0よりも大きく、かつNumPoints[cIdx]が0よりも大きい場合(cIdxは1または2)、フィルムグレインはクロマ成分recPictureCのクロマサンプルに追加される。recPictureCは、cIdxが1の場合はrecPictureCbを表し、cIdxが2の場合はrecPictureCrを表す。
【数15】

変数minVal[cIdx]およびmaxVal[cIdx]は以下のように指定される:
fg_full_range_flagが1の場合、minVal[cIdx]は0であり、maxVal[cIdx]は、cIdxが0、1または2の場合、2BitDepth-1である。
それ以外、すなわちfg_full_range_flagisが0の場合、minVal[1]およびminVal[2]は16*2BitDepth-8であり、maxVal[0]は235*2BitDepth-8である。
- fg_matrix_coeffsが0の場合、maxVal[1]およびmaxVal[2]は235*2BitDepth-8に等しい。
- それ以外の場合、maxVal[1] およびmaxVal[2]は240*2BitDepth-8に等しい。
【0073】
[付録2]
異なるピクチャサイズおよび周波数フィルタリングモデルのためのMPEGデコーディング中のフィルムグレイン合成をサポートするためのVVC SEIメッセージング(参考文献[6])の8.5節 "Film grain characteristics SEI message"への追記例を示す。修正案はイタリック体で示されている。
以下のテキストにおける注3の位置およびテキストを修正する:

"注3- SMPTE RDD 5は、フィルムグレイン特性SEIメッセージで提供される情報に基づいて、フィルムグレインシミュレータを規定する。
このSEIメッセージを用いるためには、以下の変数を定義する必要がある:
- ルマサンプル単位で表したピクチャ幅およびピクチャ高さ。ここではそれぞれ、PicWidthInLumaSamplesおよびPicHeightInLumaSamplesと表す。
- フィルムグレイン特性SEIメッセージのシンタックスエレメントfg_separate_colour_description_present_flagが0のとき、以下の追加変数:
- クロマフォーマットインジケータ。ここでは7.3節に記載のとおりChromaFormatIdcと表す。
- ルマ成分のサンプルのビット深度(ここではBitDepthYと表す)およびChromaFormatIdcが0でない場合、2つの関連するクロマ成分のサンプルのビット深度(ここではBitDepthCと表す)。"

以下の通りである:

"このSEIメッセージを用いるためには、以下の変数を定義する必要がある:
- ルマサンプル単位で表したピクチャ幅およびピクチャ高さ。ここではそれぞれ、PicWidthInLumaSamplesおよびPicHeightInLumaSamplesと表す。
- フィルムグレイン特性SEIメッセージのシンタックスエレメントfg_separate_colour_description_present_flagが0のとき、以下の追加変数:
- クロマフォーマットインジケータ。ここでは7.3節に記載のとおりChromaFormatIdcと表す。
- ルマ成分のサンプルのビット深度(ここではBitDepthYと表す)およびChromaFormatIdcが0でない場合、2つの関連するクロマ成分のサンプルのビット深度(ここではBitDepthCと表す)。
注3- SMPTE RDD 5は、PicWidthInLumaSamplesが1920以下かつPicHeightInLumaSamplesが1080以下のときにフィルムグレイン特性SEIメッセージで提供される情報に基づいて、フィルムグレインシミュレータを規定する。"

以下を修正する:

"fg_model_idの値に応じて、サンプル値Idecoded[c][x][y]に対する1つ以上の強度区間の選択は以下のように指定される:
- 変数numApplicableIntensityIntervals[c][x][y]は、初期値として0に設定される。
- fg_model_idが0の場合、以下が適用される:
- サンプル値Idecoded[c][x][y]を有する現在の8×8ブロックbの左上のサンプル位置(xB, yB)が、(xB, yB)=(x/8, y/8)として導出される。
- 現在の8×8ブロックbの平均値bavgが、次のように導出される:
【数16】

以下の通りである:

"fg_model_idの値に応じて、サンプル値Idecoded[c][x][y]に対する1つ以上の強度区間の選択は以下のように指定される:
- 変数numApplicableIntensityIntervals[c][x][y]は、初期値として0に設定される。
- 変数 blockAvgSize は、以下のように導出される。
blockAvgSize = (1 << (3+Log2 ( Max ( Ceil( PicHeightInLumaSamples / 1080 ), Ceil(PicHeightInLumaSamples / 1920 ))))))
- fg_model_idが0の場合、以下が適用される:
- サンプル値Idecoded[c][x][y]を有する現在のblockAvgSize×blockAvgSizeブロックbの左上のサンプル位置(xB, yB)が、
(xB, yB)=(x/blockAvgSize, y/blockAvgSize)として導出される。
- 現在のblockAvgSize×blockAvgSizeブロックbの平均値bavgが、次のように導出される:
【数17】

- intensityIntervalIdx[c][x][y][j]の値は以下のように導出される:
【数18】
【0074】
[付録3]
[1.1.3 グレインブレンディングのビット精度処理のための例示の実施形態]
本仕様書の本バージョンに準拠するすべてのデコーダが、数値的に同一の、切り出されデコードされた出力ピクチャを生成するように、ビット精度のグレインブレンディング処理および制約が規定される。
ビット精度グレイン生成処理従うビットストリームは、以下の制約に従うものとする:
- ChromaFormatIdcは1とする。
- FGC SEIメッセージは、fg_model_idが0でなければならない。
- FGC SEIメッセージは、fg_separate_colour_description_present_flagが0でなければならない。
- FGC SEIメッセージは、fg_blending_mode_idが0でなければならない。
- FGC SEIメッセージは、fg_log2_scale_factorが2から7の範囲になければならない。
- FGC SEIメッセージは、fg_intensity_interval_upper_bound[c][i]が fg_intensity_interval_lower_bound[c][i+1]よりも小さくなければならない。
- FGC SEIメッセージは、fg_num_model_values_minus1[c]が0から2の範囲でなければならない。
- FGC SEIメッセージは、fg_comp_model_value[c][i][0]が0から255の範囲になければならない。
- FGC SEIメッセージは、fg_comp_model_value[c][i][1]が2から14の範囲になければならない。
- FGC SEIメッセージは、fg_comp_model_value[c][i][2]が2から14の範囲になければならない。
処理への入力は、グレインブレンド前のデコードされたピクチャサンプル配列であるdecPictureL、decPictureCb、decPictureCrである。
この処理の出力は、グレインブレンディング後の修正された復号ピクチャサンプル配列blendPictureL、blendPictureCb、blendPictureCrである。
変数BlockSizeは以下のように導出される:
BlockSize = Min(1 << (3+Ceil( Log2 (Max( Ceil( PicHeightInLumaSamples ÷ 1080 ),
Ceil( PicWidthInLumaSamples ÷ 1920)))), 32)
グレインブレンディング処理は、以下のステップで導出される:
- グレインパターンデータベースの生成が、1.1.3.1節において呼び出される。出力は13×13×64×64の配列GrainDbである。
- 1.1.3.2節で規定されるグレインブレンディング処理は、decPictureL、decPictureCb、および decPictureCrを入力として起動され、blendPictureL、blendPictureCb、およびblendPictureCrを出力とする。
【0075】
[1.1.3.1 グレインパターンデータベース生成]
この処理の出力は、13×13×64×64のグレインパターンデータベース配列GrainDbである。
関数Prng(x)は、x = 0...2^(32)-1で、次のように定義される:
Prng(x) = (x << 1)+(1+((x & (1<<2)) > 0)+((x & (1<<30)) > 0)) % 2
擬似乱数生成器配列SeedLUT[i]は、i=0...255として、以下のように指定される:

【表9】

ガウシアン擬似乱数配列gaussianLUT[m]は、m=0...2047として、以下のように指定される:
【表10】

変数fgCutFreqH[h] = ((h+3)<< 2) - 1, h = 0..12 である。
変数fgCutFreqV[v] = ((v+3)<< 2) - 1, v = 0..12 である。
変数fgCoeffs[h][v][i][j]は、h = 0...12, v = 0..12, i = 0..63, j = 0..63で、初期値が0に設定され、以下のように導かれる:
【数19】

h = 0..12、v = 0..12の与えられたh、vに対して、配列GrainDb[h][v][i][j]は、i = 0..63、j = 0..63として、fgCoeffs[h][v][i][j]から導出される。ITU-T H.266 | ISO/IEC 23090-3, clause 8.7.4.4で規定されている変換プロセスを呼び出すことで、trTypeが0に等しいと推定される。
グレインパターンデータベースGrainDbはさらに次のように改良される:
【数20】
【0076】
[1.1.3.2 グレインブレンディング処理]
この処理への入力は、グレインブレンディング前の復号ピクチャ、すなわち、配列decPictureL、decPictureCb、decPictureCrである。
この処理の出力は、グレインブレンディング後の修正された復号ピクチャ、すなわち配列blendPictureL、blendPictureCb、blendPictureCrである。
色成分cIdxの値に応じて、以下の割り当てが行われる:
- cIdxが0の場合、decSamplesはデコードされたピクチャサンプル配列decPictureLに対応し、blendSamplesはブレンドされたサンプル配列blendPictureLに対応する。
- cIdxが1の場合、decSamplesはデコードされたピクチャサンプル配列decPictureCbに対応し、blendSamplesはブレンドされたサンプル配列blendPictureCbに対応する。
- それ以外の場合(cIdxが2の場合)、decSamplesはデコードされたピクチャサンプル配列decPictureCrに対応し、blendSamplesはブレンドされたサンプル配列blendPictureCrに対応する。
与えられたcIdxに対して、
- fg_comp_model_present_flag[cIdx]が0の場合、blendSamples[i][j] = decSamples[i][j],
i=0...(cIdx==0):PicWidthInLumaSamples:PicWidthInLumaSamples/2,
j=0...(cIdx==0):PicWidthInLumaSamples:PicHeightInLumaSamples/2
である。
そうでない場合(fg_comp_model_present_flag[cIdx]が0でない場合)、以下が適用される:
- 変数PicWidthInBlockYおよびPicHeightInBlockYが以下のように導かれる:
PicWidthInBlockY = Ceil( PicWidthInLumaSamples ÷ BlockSize )
PicHeightInBlockY = Ceil( PicHeightInLumaSamples ÷ BlockSize )
- 変数PicWidthInBlockCおよびPicHeightInBlockCが以下のように導かれる:
PicWidthInBlockC = Ceil( PicWidthInLumaSamples ÷ 2 ÷ BlockSize )
PicHeightInBlockC = Ceil( PicHeightInLumaSamples ÷ 2 ÷ BlockSize )
- 色成分インデックスcIdxに対して、cIdx = 0..2で、変数PicWidthInBlockおよびPicHeightInBlockは、次のように導出される:
PicWidthInBlock = ( cIdx == 0) ? PicWidthInBlockY : PicWidthInBlockC
PicHeightInBlock = ( cIdx == 0) ? PicHeightInBlockY : PicHeightInBlockC
- 現在のピクチャについてのシード初期化は、1.1.3.2.1節でcIdxを入力として呼び出され、出力は配列prngArrayである。
- グレインブレンディング処理はブロック単位で実行される。ブロック位置(rx, ry)(rx = 0..PicWidthInBlock - 1、ry = 0..PicHeightInBlock - 1)の各ブロックについて、1.1.3.2.2節で規定されるグレインブロックブレンディング処理が呼び出される。ここで、位置(xCurr, yCurr)は(rx*BlockSize, ry*BlockSize)に等しく設定され、cIdxはcIdxに割り当てられ、(xIdx, yIdx)は(rx, ry)に等しく設定される。入力は配列prngArrayおよびdecSamplesであり、出力はblendSamplesである。
【0077】
[1.1.3.2.1 現在のピクチャのシード初期化]
この処理への入力は、色成分を指定する変数cIdxである。
この処理の出力はピクチャシード配列prngArrayである。
関数MSB16(x)は、x = 0..2^(32)-1で、次のように定義される:
MSB16(x) = ((x&0xFFFF0000)>>16)
関数LSB16(x)は、x = 0..2^(32)-1で、次のように定義される:
LSB16(x) = (x&0x0000FFFF)
関数BIT0(x)は、x = 0..2^(32)-1で、以下のように定義される:
BIT0(x) = (x&0x1)
変数 picOffset = PicOrderCnt (例えば、PicOrderCnt = PicOrderCntVal)
変数 cOffset = (cIdx==0)? 0: (cIdx==1)? 85:170)
変数 prngInit = SeedLUT[picOffset+cOffset) % 256] 。
配列prngArray[i][j]は、i=0..PicHeightInBlock -1, j=0..PicWidthInBlock -1で、以下のように導かれる:
【数21】
【0078】
[1.1.3.2.2 グレインブロックブレンディング処理]
このプロセスへの入力は以下の通りである:
- 現在のピクチャコンポーネントの左上サンプルに対する、現在のブロックの左上サンプルを指定する位置(xCurr, yCurr)
- 現在のブロックの色成分を指定する変数cIdx
- 現在のブロックのブロックインデックスを指定するブロックインデックス(xIdx, yIdx)
- ピクチャシード配列prngArray
- デコードされたサンプル配列decSamples
この処理の出力は、ブレンドされたサンプル配列blendSamplesである。
変数picWidth = (cIdx==0)? PicWidthInLumaSamples : PicWidthInLumaSamples/2
変数picHeight = (cIdx==0)? PicHeightInLumaSamples : PicHeightInLumaSamples/2
現在のブロックについての変数intensityIntevalIdxは初期値が-1であり、以下のように導出される:
【数22】

現在のブロックについてのdecSamplesの導出は以下の通りである:
- intensityIntervalIdx == -1の場合、blendSamples[xCurr+ i][yCurr+ j] = decSamples[xCurr+ i][yCurr+ j]とする。ここで、i=0..Min(picWidth-xCurr-1, BlockSize-1), j=0..Min(picHeight - yCurr - 1, BlockSize -1)である。
- そうでない場合(intensityIntervalIdx != -1)、以下が適用される:
- 変数 scaleFactor = fg_comp_model_value[cIdx][intensityIntervalIdx][0]*
(1 - 2 * BIT0(prngArray[yIdx][xIdx]))

- 変数hFreqは、以下のように導かれる:
【数23】

- 変数vFreqは、以下のように導かれる:
【数24】

- 変数horzDenom = (BlockSize==32)? 36:52

- 変数vertDenom = (BlockSize==32)? 40:56

- 変数horzOffsetは、以下のように導かれる:
【数25】

- 変数vertOffsetは、以下のように導かれる:
【数26】

- 配列grainSamplesは、以下のように導かれる:
【数27】

grainSamplesは、さらに次のようにリファインされる:
- xCurr > 0の場合、以下が適用される:
【数28】

- 配列blendSamplesは、以下のように導出される:
【数29】
図1A
図1B
図2
図3
図4
図5A
図5B
図6A
図6B
図7A
図7B
【国際調査報告】