(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-05
(45)【発行日】2024-11-13
(54)【発明の名称】アフィンモード適応型動きベクトル解像度をコーディングするためのコンテキスト
(51)【国際特許分類】
H04N 19/13 20140101AFI20241106BHJP
H04N 19/139 20140101ALI20241106BHJP
H04N 19/176 20140101ALI20241106BHJP
H04N 19/70 20140101ALI20241106BHJP
【FI】
H04N19/13
H04N19/139
H04N19/176
H04N19/70
【外国語出願】
(21)【出願番号】P 2023027696
(22)【出願日】2023-02-24
(62)【分割の表示】P 2021543115の分割
【原出願日】2020-01-31
【審査請求日】2023-03-15
(31)【優先権主張番号】PCT/CN2019/074216
(32)【優先日】2019-01-31
(33)【優先権主張国・地域又は機関】CN
(31)【優先権主張番号】PCT/CN2019/074433
(32)【優先日】2019-02-01
(33)【優先権主張国・地域又は機関】CN
(31)【優先権主張番号】PCT/CN2019/079962
(32)【優先日】2019-03-27
(33)【優先権主張国・地域又は機関】CN
【前置審査】
(73)【特許権者】
【識別番号】520476341
【氏名又は名称】北京字節跳動網絡技術有限公司
【氏名又は名称原語表記】Beijing Bytedance Network Technology Co., Ltd.
【住所又は居所原語表記】Room B-0035, 2/F, No.3 Building, No.30, Shixing Road, Shijingshan District Beijing 100041 China
(73)【特許権者】
【識別番号】520477474
【氏名又は名称】バイトダンス インコーポレイテッド
【氏名又は名称原語表記】BYTEDANCE INC.
【住所又は居所原語表記】12655 West Jefferson Boulevard, Sixth Floor, Suite No. 137 Los Angeles, California 90066 United States of America
(74)【代理人】
【識別番号】110002000
【氏名又は名称】弁理士法人栄光事務所
(72)【発明者】
【氏名】リウ ホンビン
(72)【発明者】
【氏名】ジャン リー
(72)【発明者】
【氏名】ジャン カイ
(72)【発明者】
【氏名】ワン ユエ
【審査官】岩井 健二
(56)【参考文献】
【文献】Yuwen He, Xiaoyu Xiu, and Yan Ye,CE4-related: Adaptive precision for affine MVD coding,Joint Video Experts Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11,JVET-L0259,12th Meeting: Macao, CN,2018年09月,pp.1-4
【文献】Hongbin Liu, et al.,CE4-related: Adaptive Motion Vector Resolution for Affine Inter Mode,Joint Video Experts Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11,JVET-L0332-v1,12th Meeting: Macao, CN,2018年09月,pp.1-3
【文献】Benjamin Bross, Jianle Chen, and Shan Liu,Versatile Video Coding (Draft 3),Joint Video Experts Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11,JVET-L1001 (version 13),12th Meeting: Macao, CN,2019年01月08日,pp.37-39,67-70
【文献】Hongbin Liu, et al.,CE2: Adaptive Motion Vector Resolution for Affine Inter Mode (Test 2.1.2),Joint Video Experts Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11,JVET-M0246_r1,13th Meeting: Marrakech, MA,2019年01月09日,pp.1-10
【文献】Frank Bossen,CE5 on arithmetic coding: experiments 5.1.1, 5.1.2, 5.1.3, 5.1.4, 5.1.5, 5.1.6, 5.1.7, 5.1.8, 5.1.10, 5.1.11, 5.1.12, 5.1.13, 5.2, and more,Joint Video Experts Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11,JVET-M0453-v2,13th Meeting: Marrakech, MA,2019年01月07日,pp.1-26
【文献】F.Bossen,CE5 on arithmetic coding: experiments 5.1.1, 5.1.2, 5.1.3, 5.1.4, 5.1.5, 5.1.6, 5.1.7, 5.1.8, 5.1.10, 5.1.11, 5.1.12, 5.1.13, 5.2, and more,JVET-M0453-text.docx,JVET-M0453 (version 3),2019年01月17日,pp.1-12,https://jvet-experts.org/doc_end_user/documents/13_Marrakech/wg11/JVET-M0453-v3.zip
(58)【調査した分野】(Int.Cl.,DB名)
H04N 19/00 - 19/98
(57)【特許請求の範囲】
【請求項1】
映像処理方法であって、
映像の現在の映像ブロックと前記映像のビットストリームとの変換のために、少なくとも1つのビンが前記現在の映像ブロックに対してコンテキストコーディングされている少なくとも1つの構文要素を決定することと、
前記少なくとも1つのビンの
うちの第1のビンのコンテキストインクリメント値を決定することと、
前記コンテキストインクリメント値に
基づいてコンテキスト変数を決定することと、
少なくとも前記
コンテキスト変数に基づいて前記変換を行うことと、
を含み、
前記
コンテキスト変数は、
前記コンテキスト
変数に関連付けられた2つの確率更新速度を制御
し、
前記ビットストリームの前記少なくとも1つの構文要素は、動き精度セットにおける動き精度を示すために使用され、
前記コンテキスト変数は、前記現在の映像ブロックのコーディングモードに基づいて、前記少なくとも1つの構文要素の複数のコンテキスト変数から選択され、
前記2つの確率更新速度は、(shiftIdx>>2)+2によって定義される第1の更新速度を含み、shiftIdxは前記コンテキスト変数を示し、
前記第1の更新速度は、5以下である、
方法。
【請求項2】
複数の構文要素は、前記動き精度セットの前記動き精度を示すために前記ビットストリームに選択的に表現され、
前記複数の構文要素は、第1の構文要素及び第2の構文要素を含み、
前記第1の構文要素が特定の値で前記ビットストリームに存在する場合に、前記第2の構文要素が前記ビットストリームに存在し、
前記少なくとも1つの構文要素は、前記第1の構文要素及び/又は前記第2の構文要素を含む、
請求項
1に記載の方法。
【請求項3】
前記コンテキストインクリメント値は、前記現在の映像ブロックの前記コーディングモードが第1のモードであるかどうかに基づいて、複数のコンテキストインクリメント値から選択され、
前記第1のモードにおいて、制御点動きベクトルが、前記現在の映像ブロックからサブ領域分割の動きベクトルを導出するために、導出され、更に使用される、
請求項
1に記載の方法。
【請求項4】
前記コンテキストインクリメント値は、前記現在の映像ブロックの隣接映像ブロックのコーディング情報を使用せずに選択され、
前記隣接映像ブロックの前記コーディング情報は、前記隣接映像ブロックのコーディングモードを含む、
請求項1から
3のいずれか1項に記載の方法。
【請求項5】
前記2つの確率更新速度は、(shiftIdx&3)+3+shift0によって定義される第2の更新速度を含み、shift0は第1の更新速度を示し、shiftIdxは前記
コンテキスト変数を示す、
請求項1から
4のいずれか1項に記載の方法。
【請求項6】
前記第1の更新速度は、2以上である、
請求項
5に記載の方法。
【請求項7】
前記第2の構文要素は、通常のインターモードのための1-pel、1/2-pel、または4-pel精度からの選択を示し、
前記第2の構文要素は、第1のモードのための1/16-pel又は1-pel精度からの選択を示し、
前記第1のモードにおいて、制御点動きベクトルが、前記現在の映像ブロックからサブ領域分割の動きベクトルを導出するために、導出され、更に使用される、
請求項
2に記載の方法。
【請求項8】
前記第2の構文要素は、0に等しく、前記動き精度は、第1のモードに対して1/16-pel精度であり、
前記第2の構文要素は、1に等しく、前記動き精度は、第1のモードに対して1-pel精度であり、
前記第1のモードにおいて、制御点動きベクトルが、前記現在の映像ブロックからのサブ領域分割の動きベクトルを導出するために、導出され、更に使用される、
請求項
2に記載の方法。
【請求項9】
前記変換を行うことは、前記現在の映像ブロックに基づいて前記ビットストリームを生成することを含む、
請求項1から
8のいずれか1項に記載の方法。
【請求項10】
前記変換を行うことは、前記ビットストリームから前記現在の映像ブロックを生成することを含む、
請求項1から
8のいずれか1項に記載の方法。
【請求項11】
処理装置と、命令が記憶された非一時的メモリと、を備える映像データを処理する装置であって、
前記命令は、前記処理装置による実行時に、前記処理装置に、
映像の現在の映像ブロックと前記映像のビットストリームとの変換のために、少なくとも1つのビンが前記現在の映像ブロックに対してコンテキストコーディングされている少なくとも1つの構文要素を決定することと、
前記少なくとも1つのビンの
うちの第1のビンのコンテキストインクリメント値を決定することと、
前記コンテキストインクリメント値に
基づいてコンテキスト変数を決定することと、
少なくとも前記
コンテキスト変数に基づいて前記変換を行うことと、
を実行させ、
前記
コンテキスト変数は、
前記コンテキスト
変数に関連付けられた2つの確率更新速度を制御
し、
前記ビットストリームの前記少なくとも1つの構文要素は、動き精度セットにおける動き精度を示すために使用され、
前記コンテキスト変数は、前記現在の映像ブロックのコーディングモードに基づいて、前記少なくとも1つの構文要素の複数のコンテキスト変数から選択され、
前記2つの確率更新速度は、(shiftIdx>>2)+2によって定義される第1の更新速度を含み、shiftIdxは前記コンテキスト変数を示し、
前記第1の更新速度は、5以下である、
装置。
【請求項12】
命令を記憶する非一時的なコンピュータ可読記憶媒体であって、
前記命令は、処理装置に、
映像の現在の映像ブロックと前記映像のビットストリームとの変換のために、少なくとも1つのビンが前記現在の映像ブロックに対してコンテキストコーディングされている少なくとも1つの構文要素を決定することと、
前記少なくとも1つのビンの
うちの第1のビンのコンテキストインクリメント値を決定することと、
前記コンテキストインクリメント値に
基づいてコンテキスト変数を決定することと、
少なくとも前記
コンテキスト変数に基づいて前記変換を行うことと、
を実行させ、
前記
コンテキスト変数は、
前記コンテキスト
変数に関連付けられた2つの確率更新速度を制御
し、
前記ビットストリームの前記少なくとも1つの構文要素は、動き精度セットにおける動き精度を示すために使用され、
前記コンテキスト変数は、前記現在の映像ブロックのコーディングモードに基づいて、前記少なくとも1つの構文要素の複数のコンテキスト変数から選択され、
前記2つの確率更新速度は、(shiftIdx>>2)+2によって定義される第1の更新速度を含み、shiftIdxは前記コンテキスト変数を示し、
前記第1の更新速度は、5以下である、
非一時的なコンピュータ可読記憶媒体。
【請求項13】
映像のビットストリームを記憶する
方法であって
、
前記映像の現在の映像ブロックのために、少なくとも1つのビンが前記現在の映像ブロックに対してコンテキストコーディングされている少なくとも1つの構文要素を決定することと、
前記少なくとも1つのビンの
うちの第1のビンのコンテキストインクリメント値を決定することと、
前記コンテキストインクリメント値に
基づいてコンテキスト変数を決定することと、
少なくとも前記
コンテキスト変数に基づいて前記ビットストリームを生成することと、
前記ビットストリームを非一時的なコンピュータ可読記録媒体に記憶することと、
を含み、
前記
コンテキスト変数は、
前記コンテキスト
変数に関連付けられた2つの確率更新速度を制御し、
前記ビットストリームの前記少なくとも1つの構文要素は、動き精度セットにおける動き精度を示すために使用され、
前記コンテキスト変数は、前記現在の映像ブロックのコーディングモードに基づいて、前記少なくとも1つの構文要素の複数のコンテキスト変数から選択され、
前記2つの確率更新速度は、(shiftIdx>>2)+2によって定義される第1の更新速度を含み、shiftIdxは前記コンテキスト変数を示し、
前記第1の更新速度は、5以下である、
方法。
【発明の詳細な説明】
【技術分野】
【0001】
(関連出願の相互参照)
パリ条約に基づく適用可能な特許法及び/又は規則に基づいて、本願は、2019年1月31日出願の国際特許出願PCT/CN2019/074216号、2019年2月1日出願の国際特許出願PCT/CN2019/074433号、2019年3月27日出願の国際特許出願PCT/CN2019/079962号の優先権及び利益を適時に主張することを目的とする。米国法に基づくすべての目的のために、上記出願の開示全体は、本明細書の開示の一部として参照により援用される。
【0002】
本特許明細書は、映像処理技術、デバイスおよびシステムに関する。
【背景技術】
【0003】
映像圧縮の進歩にもかかわらず、デジタル映像は、依然として、インターネット及び他のデジタル通信ネットワークにおいて最大の帯域幅の使用量を占めている。映像の受信及び表示が可能な接続されたユーザ機器の数が増加するにつれ、02デジタル映像の使用に対する帯域幅需要は増大し続けることが予測される。
【発明の概要】
【0004】
デジタル映像コーディングに関し、具体的には、適応型動きベクトル解像度(AMVR)を有するアフィンモードのための動きベクトル予測子の導出および信号通知に関するデバイス、システム、および方法を説明する。記載された方法は、既存の映像コーディング規格(例えば、高効率映像コーディング(HEVC))および将来の映像コーディング規格又は映像コーデックの両方に適用され得る。
【0005】
1つの代表的な態様において、開示される技術は、映像処理の方法を提供するために使用してもよい。この方法は、映像の現在の映像ブロックと現在の映像ブロックのコーディング表現との間での変換が、非アフィンインターAMVRモードに基づくことを判定することと、この判定に基づいてこの変換を行うこととを含み、この現在の映像ブロックのコーディング表現は、コンテキストに基づくコーディングに基づいており、現在の映像ブロックのコーディングに使用されるコンテキストは、この変換中に近傍のブロックのアフィンAMVRモード情報を使用せずにモデル化される。
【0006】
別の代表的な態様では、開示される技術は、映像処理の方法を提供するために使用してもよい。この方法は、映像の現在の映像ブロックと現在の映像ブロックのコーディング表現との間での変換が、アフィン適応型動きベクトル解像度(アフィンAMVR)モードに基づくことを判定することと、この判定に基づいて、この変換を行うことと、を含み、現在の映像ブロックのコーディング表現が、コンテキストに基づくコーディングに基づいており、変数が、コンテキストのための2つの確率更新速度を制御する。
【0007】
別の代表的な態様では、開示される技術は、映像処理の方法を提供するために使用してもよい。この方法は、映像の現在の映像ブロックと現在の映像ブロックのコーディング表現との間での変換は、アフィンAMVRモードに基づくことを判定し、この判定に基づいて、この変換を行うことと、を含み、現在の映像ブロックのコーディング表現が、コンテキストに基づくコーディングに基づいており、現在の映像ブロックのコーディングに使用されるコンテキストは、この変換中にアフィンインターモード及び通常インターモードの両方のAMVRモードが使用される近傍のブロックのコーディング情報を使用してモデル化される。
【0008】
別の代表的な態様では、開示される技術は、映像処理の方法を提供するために使用してもよい。この方法は、映像の現在の映像ブロックと現在の映像ブロックのコーディング表現との間での変換のために、この変換のための複数のコンテキストの使用を判定することと、この判定に基づいてこの変換を行うこととを含み、この複数のコンテキストは、粗い動きの精度を示す構文要素をコーディングするために使用される。
【0009】
別の代表的な態様では、開示される技術は、映像処理の方法を提供するために使用してもよい。この方法は、映像の現在の映像ブロックと現在の映像ブロックのコーディング表現との間での変換のために、現在選択されている変換のための最良のモードに基づいて対称動きベクトル差(SMVD)モードを使用するかどうかを判定し、この判定に基づいてこの変換を行うことを含む。
【0010】
別の代表的な態様では、開示される技術は、映像処理の方法を提供するために使用してもよい。この方法は、映像の現在の映像ブロックと現在の映像ブロックのコーディング表現との間での変換のために、現在選択されている変換のための最良のモードに基づいてアフィンSMVDモードを使用するかどうかを判定し、この判定に基づいてこの変換を行うことを含む。
【0011】
別の代表的な態様において、上記方法は、処理装置が実行可能なコードの形式で実施され、コンピュータ可読プログラム媒体に記憶される。
【0012】
さらに別の代表的な態様において、上述した方法を行うように構成された、または動作可能なデバイスが開示される。この装置は、この方法を実装するようにプログラムされた処理装置を含んでもよい。
【0013】
さらに別の代表的な態様では、映像デコーダ装置は、本明細書で説明されるような方法を実装し得る。
【0014】
開示される技術の上記および他の態様および特徴は、図面、説明および特許請求の範囲でより詳細に説明される。
【図面の簡単な説明】
【0015】
【
図3】空間的マージ候補の冗長性チェックの対象となる候補対の例を示す図
【
図4A】現在のブロックのサイズおよび形状に基づく第2の予測ユニット(PU)の位置の例を示す図
【
図4B】現在のブロックのサイズおよび形状に基づく第2の予測ユニット(PU)の位置の例を示す図
【
図5】時間的マージ候補のための動きベクトルのスケーリングの例を示す図
【
図7】結合双方向予測マージ候補を生成する例を示す図
【
図9】空間的動きベクトル候補のための動きベクトルのスケーリングの例を示す図
【
図10】コーディングユニット(CU)のために代替の時間的動きベクトル予測(ATMVP)アルゴリズムを使用する動き予測の例を示す図
【
図11】空間的-時間的動きベクトル予測(STMVP)アルゴリズムで使用されるサブブロックおよび近傍のブロックを有するコーディングユニット(CU)の例を示す図
【
図12A】重複ブロック動き補償(OBMC)アルゴリズムを使用する場合のサブブロックの例示的なスナップショットを示す図
【
図12B】重複ブロック動き補償(OBMC)アルゴリズムを使用する場合のサブブロックの例示的なスナップショットを示す図
【
図13】局所照明補償(LIC)アルゴリズムのパラメータを導出するために使用される近傍のサンプルの例を示す図
【
図14】簡略化したアフィン動きモデルの一例を示す図
【
図15】サブブロックごとのアフィン動きベクトルフィールド(MVF)の例を示す図
【
図16】AF_INTERアフィン動きモードにおける動きベクトル予測(MVP)の例を示す図
【
図17A】それぞれ4パラメータおよび6パラメータアフィンモードの例を示す図
【
図17B】それぞれ4パラメータおよび6パラメータアフィンモードの例を示す図
【
図18A】AF_MERGEアフィン動きモードの候補の例を示す図
【
図18B】AF_MERGEアフィン動きモードの候補の例を示す図
【
図19】フレームレートアップ変換(FRUC)アルゴリズムに基づく特殊なマージモードである、パターンマッチング動きベクトル導出(PMMVD)モードにおけるバイラテラルマッチングの例を示す図
【
図20】FRUCアルゴリズムにおけるテンプレートマッチングの一例を示す図
【
図21】FRUCアルゴリズムにおける片側動き推定の例を示す図
【
図22】双方向オプティカルフロー(BIO)アルゴリズムで使用されるオプティカルフローの軌跡の例を示す図
【
図23A】ブロック拡張なしの双方向オプティカルフロー(BIO)アルゴリズムを使用した例示的なスナップショットを示す図
【
図23B】ブロック拡張なしの双方向オプティカルフロー(BIO)アルゴリズムを使用した例示的なスナップショットを示す図
【
図24】バイラテラルテンプレートマッチングに基づくデコーダ側動きベクトル改良(DMVR)アルゴリズムの一例を示す図
【
図25A】開示される技術のいくつかの実装形態に基づく、映像処理のための例示的な方法のフローチャートを示す図
【
図25B】開示される技術のいくつかの実装形態に基づく、映像処理のための例示的な方法のフローチャートを示す図
【
図25C】開示される技術のいくつかの実装形態に基づく、映像処理のための例示的な方法のフローチャートを示す図
【
図25D】開示される技術のいくつかの実装形態に基づく、映像処理のための例示的な方法のフローチャートを示す図
【
図25E】開示される技術のいくつかの実装形態に基づく、映像処理のための例示的な方法のフローチャートを示す図
【
図25F】開示される技術のいくつかの実装形態に基づく、映像処理のための例示的な方法のフローチャートを示す図
【
図26】本特許明細書に記載されるビジュアルメディアの復号化又はビジュアルメディアのコーディング技術を実現するためのハードウェアプラットフォームの一例を示すブロック図である図
【
図28】本明細書に記載される映像処理システムを実装するためのハードウェアプラットフォームの一例を示す別のブロック図
【発明を実施するための形態】
【0016】
より高い解像度の映像の需要が増大しているため、近代技術において、映像コーディング法および技術は、遍在している。映像コーデックは、一般的に、デジタル映像を圧縮又は展開する電子回路又はソフトウェアを含み、より高いコーディング効率を提供するように絶えず改良されている。映像コーデックは、非圧縮映像を圧縮フォーマットに変換する、又はその逆である。映像の品質、映像を表現するために使用されるデータの数(ビットレートで決まる)、エンコーディングおよびデコーディングアルゴリズムの複雑性、データの損失およびエラーに対する敏感さ、編集のしやすさ、ランダムアクセス、およびエンドツーエンドの遅延(待ち時間)の間には複雑な関係がある。この圧縮フォーマットは、通常、標準的な映像圧縮規格、例えば、高効率映像コーディング(High Efficiency Video Coding、HEVC)規格(H.265またはMPEG-H Part 2としても知られている)[1]、完成させるべき汎用映像コーディング規格、または他の現在および/または将来の映像コーディング規格に準拠している。
【0017】
開示される技術の実施形態は、圧縮性能を向上させるために、既存の映像コーディング規格(例えば、HEVC、H.265)および将来の規格に適用されてもよい。本明細書では、説明の可読性を向上させるために章の見出しを使用しており、説明又は実施形態(及び/又は実装形態)をそれぞれの章のみに限定するものではない。
【0018】
1. HEVC/H.265におけるインター予測の例
【0019】
映像コーディング規格は、長年にわたって大幅に改善され、現在、部分的には、高いコーディング効率を実現し、より高い解像度をサポートする。HEVCおよびH.265などの最近の規格は、時間予測プラス変換コーディングが利用されるハイブリッド映像コーディング構造に基づく。
【0020】
1.1 予測モードの例
【0021】
各インター予測されたPU(予測ユニット)は、1つまたは2つの参照ピクチャリストのための動きパラメータを有する。いくつかの実施形態において、動きパラメータは、動きベクトルおよび参照ピクチャインデックスを含む。他の実施形態において、2つの参照ピクチャリストのうちの1つの参照ピクチャリストの使用は、inter_pred_idcを用いて信号通知されてもよい。さらに他の実施形態において、動きベクトルは、予測子に対するデルタ(delta)として明確にコーディングされてもよい。
【0022】
1つのCUがスキップモードでコーディングされる場合、1つのPUがこのCUに関連付けられ、有意な残差係数がなく、コーディング動きベクトルデルタも参照ピクチャインデックスもない。マージモードを指定し、これにより、現在のPUのための動きパラメータを、空間的および時間的候補を含む近傍のPUから取得する。マージモードは、スキップモードのためだけでなく、任意のインター予測されたPUに適用することができる。マージモードの代替としては、動きパラメータの明確な送信があり、PUごとに、各参照ピクチャリストおよび参照ピクチャリストの使用に対応する参照ピクチャインデックスである、動きベクトルを明確に信号通知する。
【0023】
2つの参照ピクチャリストのうちの1つを使用することを信号通知が示す場合、1つのサンプルのブロックからPUを生成する。これを「単一予測」と呼ぶ。単一予測は、Pスライス及びBスライスの両方に利用可能である[2]。
【0024】
両方の参照ピクチャリストを使用することを信号通知が示す場合、2つのサンプルのブロックからPUを生成する。これを「双方向予測」と呼ぶ。Bスライスのみに双方向予測が利用可能である。
【0025】
1.1.1 マージモードの候補を構築する実施形態
【0026】
マージモードを使用してPUを予測する場合、ビットストリームからマージ候補リストにおけるエントリを指すインデックスを構文解析し、これを使用して動き情報を検索する。このリストの構成は、以下のステップのシーケンスに基づいてまとめることができる。
【0027】
ステップ1:初期候補導出
ステップ1.1:空間的候補導出
ステップ1.2:空間的候補の冗長性チェック
ステップ1.3:時間的候補導出
ステップ2:追加の候補挿入
ステップ2.1:双方向予測候補の作成
ステップ2.2:動きゼロ候補の挿入
【0028】
図1は、上記ステップのシーケンスに基づいてマージ候補リストを構築する例を示す。空間的マージ候補導出のために、5つの異なる位置にある候補の中から最大4つのマージ候補を選択する。時間的マージ候補導出のために、2つの候補の中から最大1つのマージ候補を選択する。デコーダ側ではPUごとに一定数の候補を想定しているので、候補数がスライスヘッダで信号通知されるマージ候補(MaxNumMergeCand)の最大数に達しない場合、追加の候補を生成する。候補の数は一定であるので、短縮された単項2値化(TU)を使用して最良マージ候補のインデックスを符号化する。CUのサイズが8に等しい場合、現在のCUのすべてのPUは、2N×2N予測ユニットのマージ候補リストと同じ1つのマージ候補リストを共有する。
【0029】
1.1.2 空間的マージ候補の構築
【0030】
空間的マージ候補の導出において、
図2に示す位置にある候補の中から、最大4つのマージ候補を選択する。導出の順序はA
1、B
1、B
0、A
0、B
2である。位置A
1、B
1、B
0、A
0のいずれかのPUが利用可能でない場合(例えば、別のスライス又はタイルに属しているため)、又はイントラコーディングされた場合にのみ、位置B
2が考慮される。位置A
1の候補を加えた後、残りの候補を加えると、冗長性チェックを受け、それにより、同じ動き情報を有する候補を確実にリストから排除でき、コーディング効率を向上させることができる。
【0031】
計算の複雑性を低減するために、前述の冗長性チェックにおいて、考えられる候補対のすべてを考慮することはしない。代わりに、
図3において矢印でリンクされた対のみを考慮し、冗長性チェックに使用される対応する候補が同じ動き情報を有していない場合にのみ、その候補をリストに加える。重複した動き情報の別のソースは、2N×2Nとは異なる分割に関連付けられた「第2のPU」である。
図4Aおよび
図4Bは、それぞれ、N×2Nおよび2N×Nの場合の第2のPUを描いている。現在のPUをN×2Nに分割する場合、リスト構築に位置A
1の候補は考慮されない。いくつかの実施形態において、この候補を加えることにより、2つの予測ユニットが同じ動き情報を有するようになり、1つのコーディングユニットに1つのPUのみを有することは冗長である。同様に、現在のPUを2N×Nに分割する場合、位置B
1は考慮されない。
【0032】
1.1.3 時間的マージ候補の構築
【0033】
このステップにおいて、1つの候補のみがリストに追加される。具体的には、この時間的マージ候補の導出において、所与の参照ピクチャリストにおける現在のピクチャとの間に最小のPOC差を有するピクチャに属する同一位置PUに基づいて、スケーリングされた動きベクトルを導出する。スライスヘッダにおいて、同一位置PUの導出に用いられる参照ピクチャリストが明確に信号通知される。
【0034】
図5は、POC距離tb、tdを用いて、コロケーションPUの動きベクトルからスケーリングされた、現在のピクチャの参照ピクチャと現在のピクチャとの間のPOC差をtbとし、コロケーションピクチャの参照ピクチャとコロケーションピクチャとの間のPOC差をtdとする、時間的マージ候補のためのスケーリングされた動きベクトル(点線)の導出の例を示す。時間的マージ候補の参照ピクチャインデックスをゼロに等しく設定する。Bスライスの場合、2つの動きベクトル、即ち、1つは参照ピクチャリスト0のためのもの、もう1つは参照ピクチャリスト1のためのもの、を取得し、これらを組み合わせることによって、双方向予測マージ候補を形成する。
【0035】
参照フレームに属するコロケーションPU(Y)において、
図6に示すように、候補C
0と候補C
1との間で時間的候補の位置を選択する。位置C0のPUが利用可能でない場合、イントラコーディングされている場合、又は現在のCTUの外側にある場合、位置C
1が使用される。そうでない場合、位置C
0が時間的マージ候補の導出に使用される。
【0036】
1.1.4 追加タイプのマージ候補の構築
【0037】
時空間的マージ候補の他に、2つの追加のタイプのマージ候補、すなわち、結合双方向予測マージ候補およびゼロマージ候補がある。時空間的マージ候補を利用して、結合双方向予測マージ候補を生成する。結合双方向予測マージ候補は、Bスライスのみに使用される。最初の候補の第1の参照ピクチャリスト動きパラメータと別の候補の第2の参照ピクチャリスト動きパラメータとを組み合わせることで、結合双方向予測候補を生成する。これら2つのタプルが異なる動き仮説を提供する場合、これらのタプルは、新しい双方向予測候補を形成する。
【0038】
図7は、この処理の例を示しており、mvL0、refIdxL0、又はmvL1、refIdxL1を有するオリジナルリスト(710、左側)における、2つの候補を使用して、最終リスト(720、右側)に加えられる結合双方向予測マージ候補を生成する。
【0039】
動きゼロ候補を挿入し、マージ候補リストにおける残りのエントリを埋めることにより、MaxNumMergeCand容量にヒットする。これらの候補は、空間的変位がゼロであり、ゼロから始まり、新しいゼロ動き候補をリストに加える度に増加する参照ピクチャインデックスを有する。これらの候補が使用する参照フレームの数は、それぞれ、一方向予測の場合は1つ、双方向予測の場合は2つである。いくつかの実施形態において、これらの候補に対して冗長性チェックは行われない。
【0040】
1.1.5 並列処理のための動き推定領域の例
【0041】
符号化処理を高速化するために、動き推定を並列に行うことができ、それによって、所与の領域内のすべての予測ユニットの動きベクトルを同時に導出する。1つの予測ユニットは、その関連する動き推定が完了するまで、隣接するPUから動きパラメータを導出することができないので、空間的近傍からのマージ候補の導出は、並列処理に干渉する可能性がある。コーディング効率と処理待ち時間との間のトレードオフを緩和するために、動き推定領域(MER)を規定することができる。「log2_parallel_merge_level_minus2」構文要素を使用して、ピクチャパラメータセット(PPS)においてMERのサイズを信号通知してもよい。1つのMERを規定するとき、同じ領域にあるマージ候補は利用不可能であるとしてマークされ、それゆえにリスト構築においては考慮されない。
【0042】
1.2 高度動きベクトル予測(AMVP)の実施形態
【0043】
AMVPは、動きパラメータの明確な伝送に使用される、動きベクトルの近傍のPUとの空間的-時間的相関を利用する。まず、左側、上側の時間的に近傍のPU位置の可用性をチェックし、冗長な候補を取り除き、ゼロベクトルを加えることで、候補リストの長さを一定にすることで、動きベクトル候補リストを構築する。次いで、エンコーダは、候補リストから最良の予測子を選択し、選択された候補を示す対応するインデックスを送信することができる。マージインデックスの信号通知と同様に、最良の動きベクトル候補のインデックスは、短縮された単項を使用してエンコードされる。この場合に符号化対象の最大値は2である(
図8参照)。以下の章では、動きベクトル予測候補の導出処理の詳細を説明する。
【0044】
1.2.1 動きベクトル予測候補の構築例
【0045】
図8は、動きベクトル予測候補の導出処理をまとめたものであり、refidxを入力として、各参照ピクチャリストに対して実装されてもよい。
【0046】
動きベクトル予測において、空間的動きベクトル候補と時間的動きベクトル候補という2つのタイプの動きベクトル候補が考えられる。空間的動きベクトル候補を導出するために、先に
図2に示したように、5つの異なる位置にある各PUの動きベクトルに基づいて、最終的には2つの動きベクトル候補を導出する。
【0047】
時間的動きベクトル候補を導出するために、2つの異なる同一位置に配置された位置に基づいて導出された2つの候補から1つの動きベクトル候補を選択する。第1の時空間的候補リストを作成した後、リストにおける重複した動きベクトル候補を除去する。候補の数が2よりも多い場合、関連づけられた参照ピクチャリストにおける参照ピクチャインデックスが1よりも大きい動きベクトル候補をリストから削除する。時空間的動きベクトル候補の数が2未満である場合は、追加のゼロ動きベクトル候補をリストに加える。
【0048】
1.2.2 空間的動きベクトル候補の構築
【0049】
空間的動きベクトル候補の導出において、先に
図2に示したような位置にあるPUから導出された5つの潜在的な候補のうち、動きマージと同じ位置にあるものを最大2つの候補を考慮する。現在のPUの左側のための導出の順序は、A
0、A
1、スケーリングされたA
0、スケーリングされたA
1として規定される。現在のPUの上側のための導出の順序は、B
0、B
1、B
2、スケーリングされたB
0、スケーリングされたB
1、スケーリングされたB
2として規定される。そのため、辺ごとに、動きベクトル候補として使用できる場合は4つ、すなわち空間的スケーリングを使用する必要がない2つの場合と、空間的スケーリングを使用する2つの場合とがある。4つの異なる場合をまとめると、以下のようになる。
【0050】
―空間的スケーリングなし
(1)同じ参照ピクチャリスト、及び同じ参照ピクチャインデックス(同じPOC)
(2)異なる参照ピクチャリストであるが、同じ参照ピクチャ(同じPOC)
―空間的スケーリング
(3)同じ参照ピクチャリストであるが、異なる参照ピクチャ(異なるPOC)
(4)異なる参照ピクチャリスト、及び異なる参照ピクチャ(異なるPOC)
【0051】
まず、非空間的スケーリングの場合をチェックし、次に、空間的スケーリングを可能にする場合をチェックする。参照ピクチャリストにかかわらず、POCが近傍のPUの参照ピクチャと現在のPUの参照ピクチャとで異なる場合、空間的スケーリングを考慮する。左側候補のすべてのPUが利用可能でないか、又はイントラコーディングされている場合、上側の動きベクトルのスケーリングは、左側及び上側MV候補の並列導出に役立つ。そうでない場合、上側の動きベクトルに対して空間的スケーリングは許可されない。
【0052】
図9の例に示すように、空間的スケーリングの場合、時間的スケーリングと同様にして、近傍のPUの動きベクトルをスケーリングする。1つの違いは、現在のPUの参照ピクチャリストおよびインデックスを入力として与え、実際のスケーリング処理は時間的スケーリングと同じであることである。
【0053】
1.2.3 時間的動きベクトル候補の構築
【0054】
参照ピクチャインデックスを導出すること以外は、時間的マージ候補を導出するためのすべての処理は、空間的動きベクトル候補を導出するための処理と同じである(
図6の例に示す)。いくつかの実施形態において、参照ピクチャインデックスはデコーダに信号通知される。
【0055】
2. 共同探索モデル(Joint Exploration Model:JEM)におけるインター予測方法の例
【0056】
いくつかの実施形態において、将来の映像コーディング技術は、共同探索モデル(Joint Exploration Model:JEM)[3][4]として知られる参照ソフトウェアを用いて検討される。JEMでは、サブブロックベースの予測は、アフィン予測、代替時間的動きベクトル予測(ATMVP)、空間的-時間的動きベクトル予測(STMVP)、双方向オプティカルフロー(BIO)、フレームレートアップ変換(FRUC)、ローカル適応動きベクトル解像度(LAMVR)、オーバーラップブロック動き補償(OBMC)、ローカル照明補償(LIC)、デコーダ側動きベクトル改良(DMVR)などの、いくつかのコーディングツールで適用されている。
【0057】
2.1 サブCUに基づく動きベクトル予測の例
【0058】
4分木に2分木を加えたJEM(QTBT)において、各CUは、各予測方向に対して最大1つの動きパラメータのセットを有することができる。いくつかの実施形態において、エンコーダにおいて、ラージCUをサブCUに分割し、ラージCUのすべてのサブCUの動き情報を導出することにより、2つのサブCUレベルの動きベクトル予測方法を考慮する。代替的な時間的動きベクトル予測(ATMVP)方法により、各CUが、配列された参照ピクチャにおける現在のCUよりも小さい複数のブロックから複数の動き情報のセットを取り出すことが可能となる。時空間的動きベクトル予測(STMVP)法において、時間的動きベクトル予測子及び空間的近傍動きベクトルを使用して、サブCUの動きベクトルを再帰的に導出する。いくつかの実施形態において、サブCU動き予測のためにより正確な動きフィールドを維持するために、参照フレームの動き圧縮は無効にされてもよい。
【0059】
2.1.1 代替の時間的動きベクトル予測(ATMVP)の例
【0060】
ATMVP法において、時間的動きベクトル予測(TMVP)法は、現在のCUより小さいブロックから複数セットの動き情報(動きベクトルおよび参照インデックスを含む)を取り出すことで修正される。
【0061】
図10は、CU1000におけるATMVP動き予測処理の一例を示す。ATMVP法は、CU1000におけるサブCU1001の動きベクトルを2つのステップで予測する。第1のステップでは、参照ピクチャ1050における対応するブロック1051を時間的ベクトルで特定する。参照ピクチャ1050は、モーションソースピクチャとも呼ばれる。第2のステップでは、現在のCU1000をサブCU1001に分割し、各サブCUに対応するブロックから、各サブCUの動きベクトルおよび参照インデックスを得る。
【0062】
第1のステップにおいて、現在のCU1000の空間的に近傍のブロックの動き情報によって、参照ピクチャ1050および対応するブロックを判定する。近傍のブロックの繰り返し走査処理を回避するために、現在のCU1000のマージ候補リストにおける第1のマージ候補を用いる。第1の利用可能な動きベクトル及びその関連する参照インデックスを、時間的ベクトル及びモーションソースピクチャのインデックスに設定する。このように、TMVPに比べて、対応するブロックをより正確に特定することができ、対応するブロック(配列されたブロックと呼ばれることがある)は、常に現在のCUに対して右下または中心位置にある。
【0063】
第2のステップにおいて、現在のCUの座標に時間的ベクトルを加えることで、モーションソースピクチャ1050における時間的ベクトルによって、サブCU1051の対応するブロックを特定する。サブCUごとに、その対応するブロックの動き情報(例えば、中心サンプルを覆う最小の動きグリッド)を使用して、サブCUの動き情報を導出する。対応するN×Nブロックの動き情報を特定した後、HEVCのTMVPと同様に、現在のサブCUの動きベクトル及び参照インデックスに変換され、動きスケーリングや他の手順が適用される。例えば、デコーダは、低遅延条件(例えば、現在のピクチャのすべての参照ピクチャのPOCが現在のピクチャのPOCよりも小さい)が満たされているかどうかをチェックし、場合によっては、動きベクトルMVx(例えば、参照ピクチャリストXに対応する動きベクトル)を使用して、各サブCUの動きベクトルMVy(例えば、Xが0又は1に等しく、Yが1-Xに等しい)を予測する。
【0064】
2.1.2 空間的-時間的動きベクトル予測(STMVP)の例
【0065】
STMVP法において、サブCUの動きベクトルは、ラスタスキャンの順に沿って再帰的に導出される。
図11は、4つのサブブロックおよび近傍のブロックを有する1つのCUの例を示す。4つの4×4個のサブCU、A(1101)、B(1102)、C(1103)、およびD(1104)を含む8×8個のCU1100を考える。現在のフレームにおける近傍の4×4ブロックを、a(1111)、b(1112)、c(1113)、およびd(1114)とラベルする。
【0066】
サブCUのAの動きの導出は、その2つの空間的近傍を特定することで始まる。第1の近傍は、サブCU、A1101の上のN×Nブロックである(ブロックc1113)。このブロックc(1113)が利用可能でない、又はイントラコーディングされている場合、サブCU A(1101)の上の他のN×N個のブロックをチェックする(ブロックc1113から始まって左から右へ)。第2の近傍は、サブCU A1101の左側のブロックである(ブロックb1112)。ブロックb(1112)が利用可能でない、又はイントラコーディングされている場合、サブCU A1101の左側の他のブロックをチェックする(ブロックb1112から始まり、上から下へ)。各リストの近傍のブロックから得られた動き情報を、所与のリストの第1の参照フレームにスケーリングする。次に、HEVCに規定されているTMVP導出と同じ手順に従って、サブブロックA1101の時間的動きベクトル予測子(TMVP)を導出する。ブロックD1104における配列されたブロックの動き情報がフェッチされ、それに応じてスケーリングされる。最後に、動き情報を検索し、スケーリングした後、参照リストごとにすべての利用可能な動きベクトルを別々に平均する。この平均化された動きベクトルを現在のサブCUの動きベクトルとする。
【0067】
2.1.3 サブCUの動き予測モード信号通知の例
【0068】
いくつかの実施形態において、サブCUモードは追加のマージ候補として有効とされ、モードを信号通知するために追加の構文要素は必要とされない。ATMVPモード及びSTMVPモードを表すように、各CUのマージ候補リストに2つの追加のマージ候補を加える。他の実施形態において、シーケンスパラメータセットがATMVPおよびSTMVPが有効であることを示す場合、7個までのマージ候補を使用してもよい。追加のマージ候補のエンコーディングロジックは、HMにおけるマージ候補の場合と同じであり、つまり、P又はBスライスにおける各CUについて、2つの追加のマージ候補に対して2回以上のRDチェックが必要となるかもしれない。いくつかの実施形態において、例えばJEMのように、マージインデックスのすべての2値(bin)はコンテキストベースの適応型バイナリ算術コーディング(CABAC)によりコンテキストコーディングされる。他の実施形態、例えばHEVCにおいては、第1の2値のみがコンテキストコーディングされ、残りの2値はコンテキストバイパスコーディングされる。
【0069】
2.2 適応動きベクトル差解像度の例
【0070】
本発明の実施例中において、use_integer_mv_flagがスライスヘッダにおいて0であるとき、4分の1輝度サンプルの単位で動きベクトルの差(MVD)(動きベクトルとPUの予測動きベクトルとの間)を信号通知される。JEMにおいて、ローカル適応型動きベクトル解像度(LAMVR)が導入される。JEMにおいて、MVDは、1/4輝度サンプル、整数輝度サンプル又は4つの輝度サンプルの単位でコーディングできる。MVD分解能はコーディングユニット(CU)レベルで制御され、MVD解像度フラグは、少なくとも1つのノンゼロMVDモジュールを有する各CUに対して条件付きで信号通知される。
【0071】
少なくとも1つのノンゼロMVDモジュールを有するCUの場合、1/4輝度サンプルMV精度がCUにおいて使用されるか否かを示すために、第1のフラグが信号通知される。第1のフラグ(1に等しい)が、1/4輝度サンプルMV精度が使用されていないことを示す場合、整数輝度サンプルMV精度が使用されるか又は4輝度サンプルMV精度が使用されるかを示すために、別のフラグが信号通知される。
【0072】
CUの第1のMVD解像度フラグがゼロであるか、又はCUに対してコーディングされていない(つまり、CUにおけるすべてのMVDがゼロである)場合、CUに対して1/4輝度サンプルMV解像度が使用される。CUが整数輝度サンプルMV精度又は4輝度サンプルMV精度を使用する場合、CUのAMVP候補リストにおけるMVPを対応する精度に丸める。
【0073】
エンコーダにおいて、CUレベルのRDチェックは、どのMVD解像度をCUに用いるかを判定するために使用される。すなわち、1つのMVD解像度ごとに3回、CUレベルのRDチェックを行う。エンコーダの速度を速めるために、JEMにおいては、以下の符号化方式が適用される。
【0074】
--通常の1/4輝度サンプルMVD解像度を有するCUのRDチェック中、現在のCUの動き情報(整数輝度サンプル精度)が記憶される。整数輝度サンプル及び4輝度サンプルのMVD解像度を有する同じCUのRDチェック中に、記憶された動き情報(丸められた後)は、更なる小範囲動きベクトル微調整の開始点として使用されるので、時間がかかる動き推定処理が3回重複しない。
【0075】
--4輝度サンプルMVD解像度を有するCUのRDチェックを条件付きで呼び出す。
CUの場合、整数輝度サンプルMVD解像度のRDコストが1/4輝度サンプルMVD解像度のそれよりもはるかに大きい場合、CUのための4輝度サンプルMVD解像度のRDチェックはスキップされる。
【0076】
2.3 動きベクトルの記憶精度を向上させる例
【0077】
HEVCにおいて、動きベクトルの精度は、1/4画素(4:2:0映像の場合、1/4輝度サンプルおよび1/8クロマサンプル)である。JEMにおいて、内部の動きベクトルの記憶およびマージ候補の精度は、1/16画素にまで向上する。スキップ/マージモードでコーディングされたCUの動き補償インター予測には、より高い動きベクトル精度(1/16画素)が用いられる。通常のAMVPモードでコーディングされたCUの場合、整数画素または1/4画素の動きのいずれかが使用される。
【0078】
HEVC動き補償補間フィルタと同じフィルタ長と正規化係数を有するSHVCアップサンプリング補間フィルタを、追加の分数画素位置の動き補償補間フィルタとして使用する。JEMにおいて、クロマ成分の動きベクトルの精度は1/32サンプルであり、近傍の2つの1/16画素の端数位置のフィルタの平均を用いて、1/32画素の端数位置の追加の補間フィルタを導出する。
【0079】
2.4 重複ブロック動き補償(OBMC)の例
【0080】
JEMにおいて、OBMCは、CUレベルの構文を使用してオン/オフを切り替えることができる。JEMにおいてOBMCを使用する場合、OBMCは、CUの右下の境界を除くすべての動き補償(MC)ブロック境界に対して行われる。また、輝度及びクロマ成分の両方に適用される。JEMにおいて、MCブロックはコーディングブロックに対応する。CUがサブCUモードでコーディングされた(サブCUマージ、アフィン、及びFRUCモードを含む)場合、CUの各サブブロックは1つのMCブロックである。均一にCU境界を処理するために、OBMCは、すべてのMCブロック境界に対してサブブロックレベルで実行され、ここで、サブブロックサイズは、
図12A、12Bに示すように、4×4に等しく設定される。
【0081】
図12Aは、CU/PU境界におけるサブブロックを示し、斜線を付けたサブブロックは、OBMCが適用される場所である。同様に、
図12Bは、ATMVPモードのサブPUを示す。
【0082】
OBMCが現在のサブブロックに適用される場合、現在の動きベクトルの他に、4つの接続された近傍のサブブロックの動きベクトルも、利用可能であり、現在の動きベクトルと同じでない場合には、現在のサブブロックのための予測ブロックを導出するために使用される。複数の動きベクトルに基づくこれらの複数の予測ブロックを組み合わせ、現在のサブブロックの最終予測信号を生成する。
【0083】
近傍のサブブロックの動きベクトルに基づく予測ブロックをPN(Nは、近傍の上、下、左、右のサブブロックのインデックス)とし、現在のサブブロックの動きベクトルに基づく予測ブロックをPCとする。PNが現在のサブブロックと同じ動き情報を含む近傍のサブブロックの動き情報に基づく場合、OBMCはPNから行われない。そうでない場合、PNのすべてのサンプルをPC内の同じサンプルに加える。すなわち、PNの4つの行/列をPCに加える。PNには重み係数{1/4,1/8,1/16,1/32}を用い、PCには重み係数{3/4,7/8,15/16,31/32}を用いる。例外は、小さなMCブロック(すなわち、コーディングブロックの高さ又は幅が4に等しいか、又は1つのCUがサブCUモードでコーディングされた場合)であり、その場合、2つの行/列のPNのみがPCに追加される。この場合、PNに対して重み係数{1/4,1/8}が使用され、PCに対して重み係数{3/4,7/8}が使用される。垂直(水平)方向に近傍のサブブロックの動きベクトルに基づいて生成されたPNに対して、PNの同じ行(列)におけるサンプルを、同じ重み係数でPCに加算する。
【0084】
JEMにおいて、サイズが256輝度サンプル以下のCUの場合、現在のCUに対してOBMCが適用されているかどうかを示すように、CUレベルフラグが信号通知される。サイズが256輝度サンプルよりも大きい、又はAMVPモードでコーディングされていないCUの場合、OBMCがデフォルトで適用される。エンコーダにおいて、OBMCがCUに適用される場合、その影響は動き推定ステージ中に考慮される。上側近傍のブロックおよび左側近傍のブロックの動き情報を用いてOBMCにより形成された予測信号は、現在のCUの元の信号の上側および左側の境界を補償するために用いられ、その後、通常の動き推定処理が適用される。
【0085】
2.5 局所照明補償(LIC)の例
【0086】
LICは、倍率aおよびオフセットbを用いて、照明変化の線形モデルに基づく。そして、各インターモードコーディングユニット(CU)に対して適応的に有効又は無効とされる。
【0087】
LICがCUに適用される場合、現在のCUの近傍のサンプルおよびそれらに対応する参照サンプルを使用することによって、パラメータaおよびbを導出するために、最小二乗誤差法が使用される。
図13は、ICアルゴリズムのパラメータを導出するために使用される近傍のサンプルの例を示す。具体的には、
図13に示すように、CUのサブサンプリング(2:1サブサンプリング)された近傍のサンプルと、参照ピクチャにおける対応するサンプル(現在のCU又はサブCUの動き情報によって特定される)とを使用する。ICパラメータは、各予測方向に対して別個に導出され、適用される。
【0088】
1つのCUがマージモードでコーディングされる場合、マージモードにおける動き情報のコピーと同様に、近傍のブロックからLICフラグをコピーし、そうでない場合、CUにLICフラグを信号通知してLICが適用されるかどうかを示す。
【0089】
1つのピクチャに対してLICが有効化されるとき、1つのCUに対してLICが適用されるかどうかを判定するために、追加のCUレベルRDチェックが必要である。CUのためにLICが有効化される場合、整数画素動き探索および小数画素動き探索のために、SADおよびSATDの代わりに、それぞれ、絶対差の平均除去和(MR-SAD)および絶対アダマール変換差の平均除去和(MR-SATD)が使用される。
【0090】
符号化の複雑性を低減するために、JEMにおいては、以下の符号化方式が適用される。
【0091】
--現在の画像とその参照ピクチャとの間に明瞭な照度変化がない場合、LICはピクチャ全体に対して無効にされる。この状況を識別するために、エンコーダにおいて、現在のピクチャ及び現在のピクチャのすべての参照ピクチャのヒストグラムを計算する。現在のピクチャと現在のピクチャのすべての参照ピクチャとの間のヒストグラム差が所与の閾値よりも小さい場合、現在のピクチャに対してLICを無効化し、そうでない場合、現在のピクチャに対してLICを有効化する。
【0092】
2.6 アフィン動き補償予測の例
【0093】
HEVCにおいて、動き補償予測(MCP)のために並進運動モデルのみが適用される。しかしながら、カメラおよび対象物は、様々な種類の動き、例えば、ズームイン/ズームアウト、回転、透視運動、及び/又は他の不規則な動きを有してもよい。一方、JEMは、簡易アフィン変換動き補償予測を適用する。
図14は、2つの制御点動きベクトルV
0およびV
1によって記述されるブロック1400のアフィン動きフィールドの例を示す。ブロック1400の動きベクトルフィールド(MVF)は、以下の式で表すことができる。
【0094】
【0095】
図14に示すように、(v
0x,v
0y)は左上隅の制御点の動きベクトルであり、(v
1x,v
1y)は右上隅の制御点の動きベクトルである。動き補償予測を簡単にするために、サブブロックに基づくアフィン変換予測を適用することができる。サブブロックのサイズM×Nは、以下のように導出される。
【0096】
【0097】
ここで、MvPreは、動きベクトルの分数精度(例えば、JEMでは1/16)である。(v2x,v2y)は、式(1)に従って算出された左下制御点の動きベクトルである。必要であれば、MおよびNを下方に調整して、それぞれwおよびhの除数にすることができる。
【0098】
図15は、ブロック1500のためのサブブロックごとのアフィンMVFの例を示す。各M×Nサブブロックの動きベクトルを導出するためには、各サブブロックの中心サンプルの動きベクトルを式(1)に従って算出し、動きベクトルの小数部の正確度(例えば、JEMでは1/16)に丸められる。次に、動き補償補間フィルタを適用して、導出された動きベクトルを用いて各サブブロックの予測を生成することができる。MCPの後、各サブブロックの高精度動きベクトルを丸め、通常の動きベクトルと同じ精度で保存する。
【0099】
2.6.1 AF_INTERモードの実施形態
【0100】
JEMにおいて、2つのアフィン動きモード:AF_INTERモード及びAF_MERGEモードがある。幅と高さの両方が8より大きいCUの場合、AF_INTERモードを適用することができる。AF_INTERモードが使用されるかどうかを示すために、ビットストリームにおいてCUレベルのアフィンフラグが信号通知される。AF_INTERモードにおいて、近傍のブロックを用いて動きベクトル対{(v0,v1)|v0={vA,vB,vC},v1={vD,vE}}を有する候補リストを構築する。
【0101】
図16は、AF_INTERモードにおけるブロック1600のための動きベクトル予測(MVP)の例を示す。
図16に示すように、v
0は、サブブロックA、B、又はCの動きベクトルから選択される。近傍のブロックからの動きベクトルは、参照リストに従ってスケーリングすることができる。また、動きベクトルは、近傍のブロックの参照のピクチャオーダカウント(PIC)と、現在のCUの参照のPOCと、現在のCUのPOCとの間の関係に基づいてスケーリングされてもよい。近傍のサブブロックDおよびEからv
1を選択する方法は類似している。候補リストの数が2未満である場合、AMVP候補の各々を複製した動きベクトル対でリストを埋める。候補リストが2よりも大きい場合、まず、近傍の動きベクトルに基づいて(例えば、対候補における2つの動きベクトルの類似性に基づいて)候補をソートする。いくつかの実装形態において、最初の2つの候補を保持する。いくつかの実施形態において、ひずみ率(RD)コストチェックを用いて、どの動きベクトル対候補を現在のCUの制御点動きベクトル予測(CPMVP)として選択するかを判定する。ビットストリームにおいて、候補リストにおけるCPMVPの位置を示すインデックスを信号通知することができる。現在のアフィンCUのCPMVPを判定した後、アフィン動き推定を適用し、制御点動きベクトル(CPMV)を求める。次に、CPMVとCPMVPとの差をビットストリームにおいて信号通知する。
【0102】
AF_INTERモードにおいて、4/6パラメータアフィンモードが使用される場合、2/3個の制御点が必要であり、従って、
図17に示すように、これらの制御点のために2/3個のMVDをコーディングすることが必要である。既存の実装形態[5]において、MVは、例えば、mvd
0からmvd
1およびmvd
2を予測することで、以下のように導出されてもよい。
【0103】
mv0=m ̄v ̄0+mvd0
mv1=m ̄v ̄1+mvd1+mvd0
mv2=m ̄v ̄2+mvd2+mvd0
【0104】
ここで、m ̄v ̄
i、mvd
i、mv
1は、それぞれ、
図18Bに示すように、左上の画素(i=0)、右上の画素(i=1)、左下の画素(i=2)の予測動きベクトル、動きベクトルの差分、動きベクトルである。いくつかの実施形態において、2つの動きベクトル(例えば、mvA(xA,yA)およびmvB(xB,yB))の加算は、2つの成分を別々に合計することに等しい。例えば、newMV=mvA+mvBは、newMVの2つの成分を、それぞれ(xA+xB)および(yA+yB)に設定することを意味する。
【0105】
2.6.2 AF_INTERモードにおける高速アフィンMEアルゴリズムの例
【0106】
アフィンモードのいくつかの実施形態において、2つ又は3つの制御点のMVは、一緒に判定される必要がある。複数のMVをまとめて直接検索することは、計算が複雑である。一例において、高速アフィンMEアルゴリズム[6]が提案され、VTM/BMSに採用される。
【0107】
例えば、4パラメータアフィンモデルに対して高速アフィンMEアルゴリズムを説明し、この考えを6パラメータアフィンモデルに拡張することができる。
【0108】
【0109】
【0110】
(a-1)をa’に置き換えることにより、動きベクトルを以下のように書き換えることができる。
【0111】
【0112】
2つの制御点(0,0)および(0,w)の動きベクトルが既知であると仮定すると、
式(5)から、アフィンパラメータは、以下のように導出されてもよい。
【0113】
【0114】
動きベクトルは、ベクトルの形で以下のように書き換えることができる。
【0115】
【0116】
いくつかの実施形態において、エンコーダにおいて、AF_INTERのMVDは反復して導出されることができる。MVi(P)を位置Pのi番目の反復で導出されたMVとし、dMVC
iをi番目の反復でMVCに対して更新されたデルタとして示す。次に、(i+1)番目の繰り返しにおいて、
MVi+1(P)=A(P)*((MVc
i)T+(dMVc
i)T)
=A(P)*(MVc
i)T+A(P)*(dMVc
i)T
=MVi(P)+A(P)*(dMVc
i)T. 式(10)
【0117】
Picrefを参照ピクチャとし、Piccurを現在のピクチャとし、Q=P+MVi(P)を表す。MSEをマッチング基準として用いる場合、最小化する必要がある関数は、以下のように表されてもよい。
【0118】
minΣP(Piccur(P)-Picref(P+MVi+1(P)))2
=minΣP(Piccur(P)-Picref(Q+A(P)*(dMVC
i)T))2 式(11)
【0119】
(dMVC
i)Tが十分に小さいと仮定すると、Picref(Q+A(P)*(dMVC
i)T)は、1次のテイラー展開に基づく近似として、以下のように書き換えられてもよい。
【0120】
Picref(Q+A(P)*(dMVc
i)T)≒Picref(Q)+Picref’(Q)*A(P)*(dMVc
i)T 式(12)
【0121】
ここで、Picref’(Q)=[dPicref(Q)/dx dPicref(Q)/dy]である。Ei+1(P)=Piccur(P)-Picref(Q)の表記を採用する場合、以下のようになる。
【0122】
minΣP(Piccur(P)-Picref(Q)-Picref’(Q)*A(P)*(dMVC
i)T)2
=minΣP(Ei+1(P)-Picref’(Q)*A(P)*(dMVC
i)T)2 式(13)
【0123】
誤差関数の導関数をゼロに設定し、次に、A(P)*(dMVC
i)T,に基づいて、制御(0,0)および(0,w)のデルタMVを以下のように算出することで、項dMVC
iを導出することができる。
【0124】
dMV(0,0)
h=dMVC
i[0] 式(14)
【0125】
dMV(0,w)
h=dMVC
i[1]*w+dMVC
i[2] 式(15)
【0126】
dMV(0,0)
v=dMVC
i[2] 式(16)
【0127】
dMV(0,w)
v=-dMVC
i[3]*w+dMVC
i[2] 式(17)
【0128】
いくつかの実施形態において、このMVD導出処理をn回繰り返し、次のようにして最終MVDを算出することができる。
【0129】
fdMV(0,0)
h=Σn-1
i=0dMVC
i[0] 式(18)
【0130】
fdMV(0,w)
h=Σn-1
i=0dMVC
i[1]*w+Σn-1
i=0dMVC
i[0] 式(19)
【0131】
fdMV(0,0)
v=Σn-1
i=0dMVC
i[2] 式(20)
【0132】
fdMV(0,w)
v=Σn-1
i=0-dMVC
i[3]*w+Σn-1
i=0dMVC
i[2] 式(21)
【0133】
上記実装形態[5]において、mvd0で表される制御点(0,0)のデルタMVから、mvd1で表される制御点(0,w)のデルタMVを予測することは、mvd1に対してのみ(Σn-1
i=0dMVC
i[1]*w,-Σn-1
i=0-dMVC
i[3]*w)符号化されることになる。
【0134】
2.6.3 AF_MERGEモードの実施形態
【0135】
AF_MERGEモードにおいてCUを適用する場合、CUは、有効な近傍の再構築ブロックから、アフィンモードでコーディングされた第1のブロックを得る。
図18Aは、現在のCU1800のための候補ブロックの選択順序の例を示す。
図18Aに示すように、選択順序は、現在のCU1800の左(1801)、上(1802)、右(1803)、左下(1804)、左上(1805)の順とすることができる。
図18Bは、AF_MERGEモードにおける現在のCU1800の候補ブロックの別の例を示す。
図18Bに示すように、左下隣のブロック1801をアフィンモードでコーディングすると、サブブロック1801を含むCUの左上隅、右上隅、左下隅の動きベクトルv
2、v
3、v
4が導出される。v2、v3、v4に基づいて、現在のCU1800における左上隅の動きベクトルv
0を算出する。従って、現在のCUの右上の動きベクトルv1を算出することができる。
【0136】
式(1)のアフィン動きモデルに従って現在のCU v0,v1のCPMVを計算した後、現在のCUのMVFを生成することができる。現在のCUがAF_MERGEモードでコーディングされているかどうかを識別するために、アフィンモードでコーディングされている近傍のブロックが少なくとも1つある場合、ビットストリーム内にアフィンフラグを信号通知することができる。
【0137】
2.7 パターンマッチング動きベクトル導出(PMMVD)の例
【0138】
PMMVDモードは、フレームレートアップ変換(FRUC)法に基づく特殊マージモードである。このモードでは、ブロックの動き情報は信号通知されず、デコーダ側で導出される。
【0139】
FRUCフラグは、そのマージフラグが真である場合、CUに信号通知され得る。FRUCフラグが偽である場合、マージインデックスを信号通知することができ、通常のマージモードが使用される。FRUCフラグが真である場合、追加のFRUCモードフラグを信号通知して、どの方法(例えば、バイラテラルマッチングまたはテンプレートマッチング)を使用してブロックの動き情報を導出するかを示すことができる。
【0140】
エンコーダ側では、CUのためにFRUCマージモードを使用するかどうかの決定は、通常のマージ候補に対して行われるのと同じように、RDコストの選択に基づく。例えば、RDコスト選択を使用して、1つのCUに対して複数のマッチングモード(例えば、バイラテラルマッチングおよびテンプレートマッチング)をチェックする。最小コストに導くものが、他のCUモードと比較される。FRUCマッチングモードが最も効率的なものである場合、CUに対してFRUCフラグを真に設定し、関連するマッチングモードを使用する。
【0141】
一般的に、FRUCマージモードにおける動き導出処理では、まずCUレベルの動き探索が行われ、次にサブCUレベルの動き改良を行うという2つのステップを有する。CUレベルでは、バイラテラルマッチング又はテンプレートマッチングに基づいて、CU全体のための初期の動きベクトルを導出する。まず、MV候補のリストを生成し、最小マッチングコストに導く候補を、さらなるCUレベル改良の開始点として選択する。そして、開始点付近でのバイラテラルマッチング又はテンプレートマッチングに基づく局所検索を行う。最小マッチングコストにおけるMVの結果を、CU全体のMVとする。続いて、導出されたCU動きベクトルを開始点として、サブCUレベルでの動き情報をさらに改良する。
【0142】
例えば、W×H CU動き情報導出のために、以下の導出処理を行う。第1のステージにおいて、W×H CU全体のためのMVが導出される。第2のステージにおいて、CUは、M×M個のサブCUにさらに分割される。Mの値は、式(3)のように計算されるが、Dは、予め規定義された分割深さであり、JEMにおいてデフォルトで3に設定される。そして、各サブCUのMVを導出する。
【0143】
【0144】
図19は、フレームレートアップ変換(FRUC)法で使用されるバイラテラルマッチングの例を示す。このバイラテラルマッチングは、2つの異なる参照ピクチャ(1910、1911)における現在のCU(1900)の動き軌跡に沿った2つのブロック間の最も近いマッチングを見出すことで、現在のCUの動き情報を導出するために用いられる。連続した動き軌跡を仮定すると、2つの参照ブロックを指す動きベクトルMV0(1901)、MV1(1902)は、現在のピクチャと2つの参照ピクチャとの間の時間的距離に比例し、例えば、TD0(1903)、TD1(1904)である。いくつかの実施形態において、現在のピクチャ1900が2つの参照ピクチャ(1910、1911)の間にあり、現在のピクチャから2つの参照ピクチャまでの時間的距離が同じである場合、バイラテラルマッチングはミラーに基づく双方向MVとなる。
【0145】
図20は、フレームレートアップ変換(FRUC)法で使用されるテンプレートマッチングの例を示す。テンプレートマッチングを使用して、現在のピクチャにおけるテンプレート(例えば、現在のCUの上側及び/又は左側の近傍のブロック)と参照ピクチャ2010におけるブロック(例えば、テンプレートと同じサイズ)との間の最も近いマッチングを見出すことで、現在のCU2000の動き情報を導出することができる。前述のFRUCマージモード以外に、テンプレートマッチングは、AMVPモードにも適用できる。JEMおよびHEVCの両方において、AMVPは2つの候補を有する。テンプレートマッチング法を用いることで、新しい候補を導出することができる。テンプレートマッチングによって新規に導出された候補が、第1の既存のAMVP候補と異なる場合、AMVP候補リストの最初に挿入し、次に、(例えば、第2の既存のAMVP候補を取り除くことによって)リストサイズを2に設定する。AMVPモードに適用される場合、CUレベル検索のみが適用される。
【0146】
CUレベルのMV候補セットは、以下を含むことができる。(1)現在のCUがAMVPモードにある場合、元のAMVP候補、(2)すべてのマージ候補、(3)補間されたMVフィールド内の複数のMV(後述)、および左上の近傍の動きベクトル。
【0147】
バイラテラルマッチングを使用する場合、マージ候補の各有効なMVを入力として使用して、バイラテラルマッチングを仮定してMV対を生成することができる。例えば、マージ候補の1つの有効なMVは、参照リストAにおいて(MVa,refa)であり、そして、その対をなすバイラテラルMVの参照ピクチャrefbが他の参照リストBにおいて見出され、refaおよびrefbは、時間的に現在のピクチャの異なる側にある。参照リストBにおいてこのようなrefbが利用可能でない場合、refbをrefaとは異なる参照として決定し、現在のピクチャとの時間的距離はリストBにおける最小値である。refbを決定した後、現在のピクチャとrefa,refbとの時間距離に基づいてMVaをスケーリングすることでMVbを導出する。
【0148】
いくつかの実装形態において、補間されたMVフィールドからの4つのMVをCUレベル候補リストに追加してもよい。具体的には、現在のCUの(0,0)、(W/2,0)、(0,H/2)、(W/2,H/2)の位置の補間されたMVを加算する。AMVPモードでFRUCを適用する場合、元のAMVP候補をCUレベルMV候補セットにも加える。いくつかの実装形態において、CUレベルにおいて、AMVP CUのための15個のMVおよびマージCUに対し、13個のMVを候補リストに加えることができる。
【0149】
サブCUレベルのMV候補セットは、CUレベルの検索によって決定されたMVと、(2)上、左、左上、右上の近傍のMVと、(3)参照ピクチャからの配列されたMVのスケーリングされたバージョンと、(4)1つ以上(例えば、4つまで)のATMVP候補と、(5)1つ以上(例えば、4つまで)のSTMVP候補とを含む。参照ピクチャからのスケーリングされたMVは、以下のように導出される。両方のリストにおける参照ピクチャをトラバースする。参照ピクチャにおけるサブCUの配列位置にあるMVは、開始CUレベルMVの参照に対してスケーリングされる。ATMVPおよびSTMVPの候補は、最初の4つの候補であってもよい。サブCUレベルにおいて、1つ以上(例えば、最大17個)のMVが候補リストに追加される。
【0150】
補間されたMVフィールドの生成
【0151】
あるフレームをコーディングする前に、片側MEに基づいてピクチャ全体に対して補間動きフィールドを生成する。そして、この動きフィールドを後にCUレベルまたはサブCUレベルのMV候補として使用してもよい。
【0152】
いくつかの実施形態において、両方の参照リストにおける各参照ピクチャの動きフィールドは、4×4ブロックレベルでトラバースされる。
図21は、FRUC方法におけるユニラテラル動き推定(ME)2100の例を示す。各4×4ブロックにおいて、現在のピクチャの4×4ブロックを通過するブロックに関連する動きで、補間動きがまだ割り当てられていない場合、時間距離TD0およびTD1に基づいて(HEVCにおけるTMVPのMVスケーリングと同様に)、参照ブロックの動きを現在のピクチャにスケーリングし、スケーリングされた動きを現在のフレームのブロックに割り当てる。4×4ブロックにスケーリングされたMVが割り当てられていない場合、ブロックの動きは、補間された動きフィールドにおいて利用不可能であるとマークされる。
【0153】
補間およびマッチングコスト
【0154】
1つの動きベクトルが1つの小数のサンプル位置を指す場合、動き補償補間が必要である。複雑性を低減するために、通常の8タップHEVC補間の代わりに、バイラテラルマッチングおよびテンプレートマッチングの両方に双線形補間を使用できる。
【0155】
マッチングコストの計算は、異なるステップでは少し異なる。CUレベルの候補セットから候補を選択する場合、マッチングコストは、バイラテラルマッチング又はテンプレートマッチングの絶対和差(SAD)であってもよい。開始MVを決定した後、サブCUレベル検索におけるバイラテラルマッチングのマッチングコストCを以下のように算出する。
【0156】
C=SAD+w・(|MVx-MVx
s|+|MVy-MVy
s|) 式(4)
【0157】
ここで、wは重み係数である。いくつかの実施形態において、wは経験的に4に設定されてもよい。MVおよびMVSは、それぞれ、現在のMVおよび開始MVを示す。SADは、依然として、サブCUレベル検索におけるテンプレートマッチングのマッチングコストとして使用されてもよい。
【0158】
FRUCモードにおいて、MVは、輝度サンプルのみを使用することによって導出される。導出された動きは、MCインター予測のために、輝度およびクロマの両方に使用される。MVを決定した後、輝度用の8タップ補間フィルタおよびクロマ用の4タップ補間フィルタを使用して、最終的なMCを行う。
【0159】
MV改良は、バイラテラルマッチングコストまたはテンプレートマッチングコストの基準を有するパターンに基づくMV検索である。JEMでは、2つの検索パターン、即ち、無制限中心バイアス菱形検索(UCBDS)およびCUレベルおよびサブCUレベルでのMV改良のための適応クロス検索をそれぞれサポートする。CUおよびサブCUレベルのMV改善の両方のために、MVは、1/4輝度サンプルMVの精度で直接検索され、これに続いて1/8輝度サンプルMVの改良が行われる。CUおよびサブCUステップのためのMV改良の検索範囲は、8つの輝度サンプルに等しく設定される。
【0160】
バイラテラルマッチングマージモードにおいては、双方向予測が適用される。なぜなら、2つの異なる参照ピクチャにおける現在のCUの動き軌跡に沿った2つのブロック間の最も近いマッチングに基づいて、CUの動き情報を導出するからである。テンプレートマッチングマージモードにおいて、エンコーダは、list0からの単一予測、list1からの単一予測、又はCUのための双方向予測のうちから選択することができる。選択は、テンプレートマッチングコストに基づいて、以下のように行うことができる。
【0161】
costBi<=factor*min(cost0,cost1)の場合
双方向予測を用いる。
そうでない場合、cost0<=cost1であれば
list0からの単一予測を用いる。
そうでない場合、
list1からの単一予測を用いる。
【0162】
ここで、cost0はlist0テンプレートマッチングのSADであり、cost1はlist1テンプレートマッチングのSADであり、costBiは双方向予測テンプレートマッチングのSADである。例えば、factorの値が1.25である場合、選択処理が双方向予測に偏っていることを意味する。このインター予測方向選択は、CUレベルのテンプレートマッチング処理に適用することができる。
【0163】
2.8 双方向オプティカルフロー(BIO)の例
【0164】
双方向オプティカルフロー(BIO)方法は、双方向予測のためにブロック単位の動き補償の上で実行されるサンプル単位の動きの改良である。いくつかの実施例において、サンプルレベルの動きの改良は、シグナリングを用いない。
【0165】
ブロックモーションコンペンセーションの後、基準k(k=0,1)からの輝度をI(k)、及び∂I(k)/∂xと∂I(k)/∂yを、それぞれ、I(k)勾配の横方向及び縦方向成分とする。オプティカルフローが有効であると仮定すると、動きベクトルフィールド(vx,vy)は、以下で与えられる。
【0166】
【0167】
このオプティカルフロー方程式と各試料の動き軌跡のエルミート補間を組み合わせると、関数値I(k)と導関数∂I(k)/∂x,∂I(k)/∂yの両端に一致する唯一の3次多項式が得られる。t=0におけるこの多項式の値がBIO予測である。
【0168】
【0169】
図22は、双方向オプティカルフロー(BIO)法におけるオプティカルフローの軌跡の一例を示す。ここで、τ
0及びτ
1は、基準フレームまでの距離を示す。距離は、τ
0及びτ
1は、Ref
0及びRef
1のPOCに基づいて以下のように計算される。τ
0=POC(現在)-POC(Ref
0),τ
1=POC(Ref
1)-POC(現在)。両方の予測が同じ時間方向から来たものである場合(両方とも過去から来たものであるか、
又は両方とも将来から来たものである)、符号が異なっている(例えばτ
0・τ
1<0)。この場合、予測が同じ時間モーメントからでない場合(例えば、τ
0≠τ
1)には、BIOが適用される。両方の参照領域は、非ゼロ動き(例えば、MVx
0,MVy
0,MVx
1,MVy
1≠0)を有し、ブロック動きベクトルは、時間距離に比例する(例えば、MVx
0/MVx
1=MVy
0/MVy
1=-τ
0/τ
1)。
【0170】
点Aと点Bとの間の値である差Δを最小にすることで、動きベクトル場(v
x,v
y)を決定する。
図9A及び
図9Bは、動き軌道と基準フレーム平面との交差の例を示す。モデルは、Δに対してローカルテイラー展開の第1の線形項のみを使用する。
【0171】
【0172】
上記式におけるすべての値は、(i’,j’)として表されるサンプル位置に依存する。動きがローカル周辺エリアにおいて一貫していると仮定すると、Δは、現在の予測点(i,j)を中心とする(2M+1)×(2M+1)の正方形窓Ωの内側で最小化することができ、ここで、Mは2に等しい。
【0173】
【0174】
この最適化問題に対して、JEMは、まず垂直方向に最小化し、次に水平方向に最小化する簡単なアプローチを使用する。その結果、以下のようになる。
【0175】
【0176】
ゼロ又は非常に小さな値での除算を回避するために、正則化パラメータr及びmを式(9)および式(10)に導入することができる。
【0177】
r=500・4d-8 式(12)
【0178】
r=700・4d-8 式(13)
【0179】
ここで、dは映像サンプルのビット深さである。
【0180】
BIOのメモリアクセスを通常の二重予測動き補償と同じにするために、すべての予測値と勾配値であるI
(k),∂I
(k)/∂x,∂I
(k)/∂yは、現在のブロック内の位置について計算される。
図23Aは、ブロック2300の外側のアクセス位置の例を示す。
図23Aに示すとおり、式(9)において、予測ブロックの境界上の現在の予測点を中心とする(2M+1)×(2M+1)個の正方形窓は、ブロックの外側の位置にアクセスする必要がある。JEMにおいて、ブロックの外側のI
(k),∂I
(k)/∂x,∂I
(k)/∂yの値は、ブロックの内側の最も近い利用可能な値に等しくなるように設定される。例えば、これは、
図23Bに示すように、パディング領域2301として実装することができる。
【0181】
BIOを用いることで、サンプルごとに動きフィールドを改良することができる。計算の複雑性を低減するために、JEMではブロックに基づくBIOの設計が用いられている。動きの改良は、4×4ブロックに基づいて計算することができる。ブロックに基づくBIOにおいて、4×4ブロックにおけるすべてのサンプルの式(9)におけるsnの値を統合し、次いで、sn inの統合した値を使用して、4×4ブロックのためのBIO動きベクトルオフセットを導出する。具体的には、ブロックに基づくBIO導出には、以下の式を用いることができる。
【0182】
【0183】
ここで、bkは、予測ブロックのk番目の4×4のブロックに属するサンプルのセットを示す。式(9)および式(10)におけるsnを((sn,bk)>>4)に置き換え、関連する動きベクトルオフセットを導出する。
【0184】
シナリオによってはBIOのMVレジメンがノイズや不規則な動きで信頼できない場合がある。従って、BIOにおいて、MVレジメンの大きさは閾値にクリップされる。閾値は、現在のピクチャの参照ピクチャがすべて一方向からのものであるか否かに基づいて判定される。現在の画像の参照ピクチャがすべて一方向からのものである場合、閾値の値は12×214-dに設定され、そうでない場合、12×213-dに設定される。
【0185】
BIOの勾配は、HEVC動き補償プロセス(例えば、2D分離可能有限インパルス応答(FIR))に準拠した演算を使用して、動き補償補間と同時に計算されてもよい。いくつかの実施形態において、2Dの分離可能なFIRのための入力は、ブロック動きベクトルの端数部分に基づいて、動き補償処理および端数位置(fracX,fracY)のためのものと同じ参照フレームサンプルである。水平勾配∂I/∂x,の場合、信号は、まず、スケーリングシフトd-8で端数位置fracYに対応するBIOfilterSを使用して垂直方向に補間される。次に、勾配フィルタBIOfilterGを、端数位置fracXに対応する水平方向に適用し、スケーリング解除を18-dだけシフトする。垂直方向の勾配∂I/∂y,については、スケーリングシフトd-8で端数位置fracYに対応するBIOfilterGを用いて垂直方向に勾配フィルタをかける。次に、
BIOFilterSを使用して、端数位置fracXに対応する水平方向への信号の変位を行い、スケーリングを18-dだけシフトする。妥当な複雑性を維持するために、勾配計算BIOFilterGおよび信号変位BIOFilterFのための補間フィルタの長さを短く(例えば、6タップ)してもよい。表1は、BIOにおけるブロック動きベクトルの異なる端数位置の勾配計算に使用できる例示的なフィルタを示す。表2は、BIOにおける予測信号の生成に使用できる例示的な補間フィルタを示す。
【0186】
【0187】
【0188】
本JEMにおいて、2つの予測が異なる参照ピクチャからのものである場合、BIOをすべての双方向予測ブロックに適用することができる。CUのローカル照明補償(LIC)を有効にすると、BIOを無効にすることができる。
【0189】
いくつかの実施形態において、OBMCは、通常のMC処理の後、1つのブロックに適用される。計算の複雑性を低減するために、OBMC処理中にBIOを適用しなくてもよい。つまり、BIOは、それ自身のMVを使用する場合、1つのブロックのMC処理において適用され、OBMC処理において近傍のブロックのMVを使用する場合、MC処理においては適用されない。
【0190】
2.9 デコーダ側動きベクトル改良(DMVR)の例
【0191】
双方向予測演算において、1つのブロック領域を予測するために、list0の動きベクトル(MV)及びlist1のMVをそれぞれ使用して構成される双方向予測されたブロックを組み合わせ、1つの予測信号を形成する。デコーダ側動きベクトル微調整(DMVR)方法において、バイラテラルテンプレートマッチング処理によって、双方向予測の2つの動きベクトルをさらに微調整する。追加の動き情報を送信することなく微調整されたMVを得るために、デコーダにおいてバイラテラルテンプレートマッチングを適用し、バイラテラルテンプレートと参照ピクチャにおける再構成サンプルとの間でひずみに基づく検索を行う。
【0192】
DMVRにおいて、
図24に示すように、list0の最初のMV0とlist1のMV1とから、それぞれ2つの予測ブロックの重み付け結合(すなわち、平均)としてバイラテラルテンプレートを生成する。テンプレートマッチング操作は、生成されたテンプレートと参照ピクチャにおけるサンプル領域(最初の予測ブロックの付近)との間のコスト尺度を計算することからなる。2つの参照ピクチャの各々について、テンプレートコストが最小となるMVを、そのリストの更新されたMVと見なし、元のMVに置き換える。JEMにおいて、各リストに対して9つのMV候補を検索する。9つのMV候補は、元のMVと、水平又は垂直方向のいずれか又は両方向に元のMVに対してオフセットしている1つの輝度サンプルを有する8つの周囲のMVを含む。最後に、2つの新しいMV、即ち、
図24に示すようなMV0’及びMV1’を使用して、最終的な双方向予測結果を生成する。絶対差の合計(SAD)をコスト尺度として使用する。
【0193】
DMVRは、追加の構文要素を送信することなく、過去の参照ピクチャからの1つのMVと、将来の参照ピクチャからの1つのMVとの間の双方向予測のマージモードに適用される。JEMにおいて、CUに対してLIC、アフィンの動き、FRUC又はサブCUマージ候補が有効である場合、DMVRは適用されない。
【0194】
2.2.9対称動きベクトル差の例
【0195】
[8]において、より効率的にMVDを符号化するために、対称動きベクトル差(SMVD)を提案する。
【0196】
まず、スライスレベルにおいて、変数BiDirPredFlag、RefIdxSymL0、RefIdxSymL1を以下のように導出する。
【0197】
現在のピクチャに最も近い参照ピクチャリスト0における前方参照ピクチャを検索する。見つかった場合、RefIdxSymL0を前方ピクチャの参照インデックスに等しく設定する。
【0198】
現在のピクチャに最も近い参照ピクチャリスト1における後方参照ピクチャを検索する。見つかった場合、RefIdxSymL1を後方ピクチャの参照インデックスに等しく設定する。
【0199】
前方及び後方ピクチャの両方が見出された場合、BiDirPredFlagは1に等しく設定される。
【0200】
そうでない場合、以下が適用される。:
【0201】
現在の参照ピクチャに最も近い参照ピクチャリスト0における後方参照ピクチャを検索する。見つかった場合、RefIdxSymL0を後方ピクチャの参照インデックスに等しく設定する。
【0202】
現在の参照ピクチャに最も近い参照ピクチャリスト1における前方参照ピクチャを検索する。見つかった場合、RefIdxSymL1を前方ピクチャの参照インデックスに等しく設定する。
【0203】
後方および前方ピクチャの両方が見つかった場合、BiDirPredFlagは1に等しく設定される。そうでない場合、BiDirPredFlagは0に等しく設定される。
【0204】
第2に、CUレベルにおいて、CUの予測方向が双方向予測であり、BiDirPredFlagが1に等しい場合、対称モードを使用するかどうかを示す対称モードフラグを明確に信号通知する。
【0205】
このフラグが真である場合、、mvp_l0_flag、mvp_l1_flag、およびMVD0のみが明確に信号通知される。参照インデックスは、リスト0およびリスト1に対して、それぞれRefIdxSymL0、RefIdxSymL1に等しく設定される。MVD1は単に-MVD0に設定される。最終的な動きベクトルを以下の式に示す。
【0206】
【0207】
【0208】
表3に、コーディングユニットのシンタックスの変更を示す。
【0209】
【0210】
2.2.11 アフィン双方向予測コーディングのための対称MVD
【0211】
アフィンモードに対するSMVDは[9]で提案されている。
【0212】
2.3 コンテキスト適応2進算術コーディング(CABAC)
【0213】
2.3.1 HEVCにおけるCABAC設計
【0214】
2.3.1.1 HEVCにおける文脈表現および初期化処理
【0215】
HEVCにおいて、各コンテキスト変数に対して、2つの変数pStateIdxおよびvalMpsを初期化する。
【0216】
8ビットテーブルエントリinitValueから、2つの4ビット変数slopeIdx,offsetIdxを以下のように導出する。
【0217】
slopeIdx=initValue>>4
offsetIdx=initValue&15
(34)
【0218】
文脈変数の初期化に使用される変数m及びnは、slopeIdx及びoffsetIdxから以下のように導出される。
m=slopeIdx*5-45
n=(offsetIdx<<3)-16
(35)
【0219】
初期化のためにpStateIdxおよびvalMpsに割り当てられる2つの値は、SliceQpYで表されるスライスの輝度の量子化パラメータから導出される。変数m及びnを特定すると、初期化は以下のように特定される。
【0220】
preCtxState=Clip3(1,126,((m*Clip3(0,51,SliceQpY))>>4)+n)
valMps=(preCtxState<=63)?0:1 (36)
pStateIdx=valMps?(preCtxState-64):(63-preCtxState)
【0221】
2.3.1.2 HEVCにおける状態遷移プロセス
【0222】
このプロセスへの入力は、現在のpStateIdx、ctxTable及びctxIdxに関連付けられたコンテキスト変数の復号値binVal及びvalMpsである。
【0223】
このプロセスの出力は、ctxIdxに関連付けられたコンテキスト変数の更新されたpStateIdx及びvalMpsである。
【0224】
復号値binValに基づいて、ctxIdxに関連付けられた2つの変数pStateIdxおよびvalMpsの更新は、以下の(37)のように導出される。
【0225】
if(binVal==valMps)
pStateIdx=transIdxMps(pStateIdx)
else{ (37)
if(pStateIdx==0)valMps=1□valMps
pStateIdx=transIdxLps(pStateIdx)
}
【0226】
2.3.2 VVCにおけるCABAC設計
【0227】
VVCにおける文脈適応型2値算術コーダ(BAC)は、VVCにおいて文脈更新処理および算術コーダの点でHEVCと異なる改良がなされている。
【0228】
最近採用された提案(JVET-M0473,CE test 5.1.13)の概要を以下に示す。
【0229】
【0230】
2.3.2.1 VVCにおけるコンテキスト初期化処理
【0231】
VVCにおいて、初期化のためにpStateIdx0およびpStateIdx1に割り当てられる2つの値は、SliceQpYから導出される。変数m及びnを特定すると、初期化は以下のように特定される。
【0232】
preCtxState=Clip3(0,127,((m*Clip3(0,51,SliceQpY))>>4)+n)
pStateIdx0=initStateIdxToState[preCtxState]>>4
pStateIdx1=initStateIdxToState[preCtxState] (38)
【0233】
2.3.2.2 VVCにおける状態遷移処理
【0234】
この処理への入力は、現在のpStateIdx0およびpStateIdx1、並びに復号値binValである。
【0235】
このプロセスの出力は、ctxIdxに関連付けられたコンテキスト変数の更新されたpStateIdx0及びpStateIdx1である。
【0236】
変数shift0(VVCTable 4におけるCABAC修正の概要における変数aに対応する)およびshift1(VVCTable 4におけるCABAC修正の概要における変数bに対応する)は、ctxTableおよびctxIncに関連付けられたshiftIdx値から導出される。
【0237】
shift0=(shiftIdx>>2)+2
shift1=(shiftIdx&3)+3+shift0 (39)
【0238】
復号値binValに依存して、ctxIdxに関連付けられた2つの変数pStateIdx0およびpStateIdx1の更新は、以下のように導出される。
【0239】
pStateIdx0=pStateIdx0□(pStateIdx0>>shift0)+(1023*binVal>>shift0)
pStateIdx1=pStateIdx1□(pStateIdx1>>shift1)+(16383*binVal>>shift1) (40)
【0240】
3. 既存の実装形態の欠点
【0241】
いくつかの既存の実装形態において、MV/MV差(MVD)をアフィンコーディングブロックのための1組の複数のMV/MVD精度のセットから選択することができる場合、より正確な動きベクトルをどのようにして取得することができるかは、依然として不確定である。
【0242】
他の既存の実装形態において、MV/MVD精度情報は、アフィンモードに適用されるAMVRの全体的なコーディング利得の判定においても重要な役割を果たすが、この目標を達成するかどうかは依然として不確定である。
【0243】
4. AMVRを用いるアフィンモード用のMV予測子のための例示的な方法
【0244】
本開示の技術の実施形態は、既存の実装の欠点を克服し、それにより、より高いコーディング効率を有する映像コーディングを提供する。開示された技術に基づいて、適応型動きベクトル解像度(AMVR)を有するアフィンモード用の動きベクトル予測子を導出し、信号通知することにより、既存のおよび将来の映像コーディング規格の両方を向上させることができ、様々な実装形態に対して説明する以下の例で明らかにする。以下に提供される開示される技術の例は、一般的な概念を説明するものであり、限定するものと解釈されるべきではない。一例において、明確に示されていない限り、逆に示されていない限り、これらの例に記載されている様々な特徴を組み合わせることができる。
【0245】
いくつかの実施形態において、AMVRが適用されるとき、アフィンモード又はノーマルモードに次のような例を適用することができる。これらの例は、AF_INTERモードでMVDを符号化するため、又は通常のインターモードでMVDを符号化するために、精度Prec(即ち、MVは1/(2^Prec)の精度を有する)を使用すると仮定する。動きベクトル予測子(例えば、近傍のブロックMVから継承される)およびその精度を、それぞれMVPred(MVPredX,MVPredY)およびPredPrecと表す。
【0246】
以下の説明において、SatShift(x,n)は、以下のように定義される。
【0247】
【0248】
Shift(x,n)は、Shift(x,n)=(x+offset0)>>nとして定義される。一例において、offset0および/またはoffset1は、(1<<n)>>1または(1<<(n-1))と設定される。別の例において、offset0および/またはoffset1は、0に設定される。別の例において、offset0=offset1=((1<<n)>>1)-1または((1<<(n-1)))-1である。
【0249】
以下の説明において、2つの動きベクトル間の演算は、この演算を動きベクトルの2つの成分の両方に適用することを意味する。例えば、MV3=MV1+MV2は、MV3x=MV1x+MV2xおよびMV3y=MV1y+MV2yに等しい。代替的に、この演算は、2つの動きベクトルの水平または垂直成分にのみ適用されてもよい。
【0250】
例1
最終的なMV精度は変化させず、即ち記憶されるべき動きベクトルの精度と同じに維持されることが提案される。
(a)一例において、最終MV精度は、1/16画素または1/8画素に設定されてもよい。
(b)一例において、信号通知されたMVDは、まずスケーリングされ、次にMVPに加えられ、1つのブロックのための最終MVを形成する。
【0251】
例2
まず、近傍のブロック(例えば、空間的または時間的)またはデフォルトMVPから直接導出されたMVPを修正し、次に、信号通知されたMVDに加えて、(現在の)ブロックのための最終MVを形成することができる。
(a)代替的に、MVPの修正を適用するかどうか、およびどのように適用するかは、Precの異なる値ごとに異なってもよい。
(b)一例において、Precが1よりも大きい(すなわち、MVDが分数精度である)場合、近傍のMVの精度は変更されず、スケーリングは実行されない。
(c)一例において、Precが1に等しい(すなわち、MVDが1画素の精度を有する)場合、MV予測子(すなわち、近傍のブロックのMV)をスケーリングする必要があり、例として、PCT出願PCT/CN2018/104723の実施例4(b)が挙げられる。
(d)一例において、Precが1よりも小さい(すなわち、MVDが4画素精度である)場合、MV予測子(すなわち、近傍のブロックのMV)をスケーリングする必要があり、例として、PCT出願PCT/CN2018/104723の実施例4(b)が挙げられる。
【0252】
例3
一例において、MVD信号の精度が記憶されたMVの精度と同じである場合、アフィンMVを再構築した後、スケーリングは必要とされず、そうでない場合、MVは、信号通知されたMVDの精度で再構成され、その後、記憶されたMVの精度にスケーリングされる。
【0253】
例4
一例において、通常インターモードおよびAF_INTERモードは、上述された異なる例に基づいて実装形態を選択してもよい。
【0254】
例5
一例において、アフィンモードのためのMV/MVD精度を示すための構文要素が、以下の意味論で信号通知されてもよい。
(a)一例において、0、1、および2に等しい構文要素は、それぞれ、1/4画素、1/16画素、および1画素のMV精度を示す。
(b)あるいは、アフィンモードにおいて、0、1、および2に等しい構文要素は、それぞれ1/4画素、1画素、および1/16画素のMV精度を示す。
(c)あるいは、アフィンモードにおいて、0、1、および2に等しい構文要素は、それぞれ1/16画素、1/4画素、および1画素のMV精度を示す。
【0255】
例6
一例において、アフィンモードのためにAMVRを有効化するかまたは無効化するかは、SPS、PPS、VPS、シーケンス/ピクチャ/スライスヘッダ/タイル等において信号通知されてもよい。
【0256】
例7
一例において、許可されたMV/MVD精度の指示は、SPS、PPS、VPS、シーケンス/ピクチャ/スライスヘッダ/タイル等において信号通知されてもよい。
(a)選択されたMVD精度の指示は、各コーディングツリーユニット(CTU)および/または領域ごとに信号通知されてもよい。
(b)許容されるMV/MVD精度のセットは、現在のブロックのコーディングモード(例えば、アフィンまたは非アフィン)に依存し得る。
(c)許容されるMV/MVD精度のセットは、スライスタイプ/時間層インデックス/低遅延チェックフラグに依存し得る。
(d)許容されるMV/MVD精度のセットは、現在のブロックまたは近傍のブロックのブロックサイズおよび/またはブロック形状に依存し得る。
(e)許容されるMV/MVD精度のセットは、復号化ピクチャバッファに記憶されるべきMVの精度に依存し得る。
(i)一例において、記憶されたMVがX画素(X-pel)である場合、許容されるMV/MVD精度セットは、少なくともX画素(X-pel)を有してもよい。
【0257】
AMVRをサポートしたアフィンモードの改善
【0258】
例8
許容されるMVD精度のセットは、ピクチャごとに、スライスごとに、又はブロックごとに異なっていてもよい。
a. 一例において、許容されるMVD精度のセットは、ブロックサイズ、ブロック形状他のようなコーディングされた情報に依存してもよい。
b. 許容されるMV精度のセットは、{1/16,1/4,1}など、予め規定されてもよい。
c. 許可されるMV精度の指示は、CTUのSPS/PPS/VPS/シーケンスヘッダ/ピクチャヘッダ/スライスヘッダ/グループ等において信号通知されてもよい。
d. 許容されるMV精度のセットから選択されたMV精度を信号通知することは、1つのブロックに対して許容されるMV精度の数にさらに依存する。
【0259】
例9 アフィンインターモードで使用されるMVDの精度を示すために、1つのシンタックスエレメントがデコーダにシグナリングされる。
a. 一例において、1つの単一の構文要素のみが、アフィンモードおよびAMVRモードに適用されるMVD精度を示すために使用される。
i. 一例において、同じ意味論が使用され、即ち、同じ値の構文要素が、AMVRおよびアフィンモードのために同じMVD精度にマッピングされる。
ii. 代替的に、単一の構文要素の意味論は、AMVRモードおよびアフィンモードによって異なる。すなわち、AMVRおよびアフィンモードに対して、同じ構文要素の値を異なるMVD精度にマッピングしてもよい。
b. 一例において、アフィンモードがAMVRと同じMVD精度のセットを使用する(例えば、MVD精度セットが{1,1/4,4}-画素)の場合、AMVRにおけるMVD精度構文要素は、アフィンモードで再使用され、即ち、単一の構文要素のみが使用される。
i. 代替的に、さらに、CABACエンコーダ/デコーダにおいて、この構文要素を符号化/復号化する時に、AMVRおよびアフィンモードに対して同じ又は異なるコンテキストモデルを使用してもよい。
ii. 代替的に、この構文要素は、AMVRおよびアフィンモードにおいて異なる意味論を有してもよい。例えば、AMVRにおいて、0、1、および2に等しい構文要素は、それぞれ1/4画素、1画素、および4画素のMV精度を示し、一方、アフィンモードにおいて、0、1、および2に等しい構文要素は、それぞれ1/4画素、1/16画素、および1画素のMV精度を示す。
c. 一例において、アフィンモードがAMVRと同数のMVD精度を使用するが、異なるMVD精度のセット(例えば、AMVRに設定されたMVD精度は{1,1/4,4}-画素であり、アフィンの場合、それは{1/16,1/4,1}-画素}-画素である)を使用する場合、AMVRにおけるMVD精度構文要素は、アフィンモードで再使用される、即ち、1つの構文要素のみが使用される。
i. 代替的に、さらに、CABACエンコーダ/デコーダにおいて、この構文要素を符号化/復号化する時に、AMVRおよびアフィンモードに対して同じ又は異なるコンテキストモデルを使用してもよい。
ii. 代替的に、この構文要素は、AMVRおよびアフィンモードにおいて異なる意味論を有してもよい。
d. 一例において、アフィンモードは、AMVRよりも小さいMVD精度を使用し、AMVRにおけるMVD精度構文要素は、アフィンモードで再使用される。しかしながら、構文要素値のサブセットのみがアフィンモードに有効である。
i. 代替的に、さらに、CABACエンコーダ/デコーダにおいて、この構文要素を符号化/復号化する時に、AMVRおよびアフィンモードに対して同じ又は異なるコンテキストモデルを使用してもよい。
ii. 代替的に、この構文要素は、AMVRおよびアフィンモードにおいて異なる意味論を有してもよい。
e. 一例において、アフィンモードは、AMVRよりも高いMVD精度を使用し、AMVRにおけるMVD精度構文要素は、アフィンモードで再使用される。しかしながら、このような構文要素は、アフィンモードにおいてより多くの値を許容するように拡張される。
i. 代替的に、さらに、CABACエンコーダ/デコーダにおいて、この構文要素を符号化/復号化する時に、AMVRおよびアフィンモードに対して同じ又は異なるコンテキストモデルを使用してもよい。
ii. 代替的に、この構文要素は、AMVRおよびアフィンモードにおいて異なる意味論を有してもよい。
f. 一例において、アフィンモードのMVD精度をコーディングするために新しい構文要素が使用され、すなわち、AMVRのMVD精度をコーディングするためとアフィンモードのために2つの異なる構文要素が使用される。
g. アフィンモードのMVD精度の指示のための構文は、以下の条件のうちの1つ又はすべてが真である下で信号通知されてもよい。
i. すべての制御点のMVDがゼロでない。
ii. 少なくとも1つの制御点のためのMVDがゼロでない。
iii. 1つの制御点(例えば、第1のCPMV)のMVDがゼロでない。
この場合、上記条件の1つ又はそれらすべてが満たされなかったときは、MVD精度を信号通知する必要がない。
h. アフィンモード又はAMVRモードのいずれかに対するMVD精度を示すための構文要素は、コンテキストでコーディングされてもよく、コンテキストは、コーディングされた情報に依存する。
i. 一例において、1つの構文要素しかない場合、コンテキストは、現在のブロックがアフィンモードでコーディングされているかどうかに依存してもよい。
i. 一例において、コンテキストは、近傍のブロック/時間層インデックス/予測方向のブロックサイズ/ブロック形状/MVD精度等に依存してもよい。
j. アフィンモードにおいて複数のMVD精度の使用を有効にするか無効にするかは、SPS/PPS/VPS/シーケンスヘッダ/ピクチャヘッダ/スライスヘッダ/CTU群等において信号通知されてもよい。
i. 一例において、アフィンモードのために複数のMVD精度の使用を許可するか又は禁止するかの情報を信号通知するかは、他の構文要素に依存してもよい。例えば、複数のMV及び/又はMVP及び/又はMVD精度のアフィンモードでの使用を有効にする又は無効にする情報は、アフィンモードが有効にされている場合には信号通知され、アフィンモードが無効にされている場合には信号通知されず、0であると推測される。
k. 代替的に、複数の構文要素は、アフィンインターモードにおいて、使用されるMV及び/又はMVP及び/又はMVD精度(以下の説明において、全て「MVD精度」と呼ばれる)を示すように信号通知されてもよい。
i. 一例において、アフィンインターモードおよび通常インターモードにおいて使用されるMVD精度を示すための構文要素は、異なってもよい。
1. アフィンインターモードおよび通常インターモードにおいて使用されるMVD精度を示すための構文要素の数は、異なってもよい。
2. アフィンインターモード及び通常インターモードにおいて使用されるMVDの精度を示すためのシンタックス要素の意味は、異なってもよい。
3. 1つのシンタックス要素をコーディングし、アフィンインターモード及び通常インターモードで使用されるMVDの精度を示すための算術コーディングにおけるコンテキストモデルは、異なってもよい。
4. アフィンインターモードおよび通常インターモードで使用されるMVD精度を示すように、1つの構文要素をコーディングするために、算術コーディングにおいてコンテキストモデルを導出する方法は、異なってもよい。
ii. 一例において、第1の構文要素(例えば、amvr_flag)は、アフィンコーディングブロックにおいてAMVRを適用するかどうかを示すように信号通知されてもよい。
1. 第1の構文要素は、条件付きで信号通知される。
a. 一例において、現在のブロックが特定のモード(例えば、CPR/IBCモード)でコーディングされる場合、第1の構文要素(amvr_flag)の信号通知はスキップされる。
b. 一例において、すべてのCPMVのMVD(水平成分および垂直成分の両方を含む)がすべてゼロである場合、第1の構文要素(amvr_flag)の信号通知はスキップされる。
c. 一例において、選択されたCPMVのMVD(水平成分および垂直成分の両方を含む)がすべてゼロである場合、第1の構文要素(amvr_flag)の信号通知はスキップされる。
i. 一例において、選択されたCPMVのMVDは、符号化/復号化される第1のCPMVのMVDである。
d. 一例において、アフィンコーディングブロックのために複数のMVD精度を有効にすることの使用が偽である場合、第1の構文要素(amvr_flag)の信号通知はスキップされる。
e. 一例において、第1の構文要素は、以下の条件下で信号通知されてもよい。
i. アフィンコーディングブロックのために複数のMVD精度を可能にすることの使用は真であり、現在のブロックはアフィンモードでコーディングされる。
ii. 代替的に、アフィンコーディングブロックのために複数のMVD精度を有効にすることの使用は真であり、現在のブロックは、アフィンモードでコーディングされ、CPMVのMVDの少なくとも1つのコンポーネントは、0に等しくない。
iii. 代替的に、アフィンコーディングブロックのために複数のMVD精度を有効にすることの使用は真であり、現在のブロックは、アフィンモードでコーディングされ、選択されたCPMVのMVDの少なくとも1つのコンポーネントは、0に等しくない。
1. 一例において、選択されたCPMVのMVDは、符号化/復号化される第1のCPMVのMVDである。
2. アフィンコーディングブロックにAMVRを適用しない場合、又は第1の構文要素が存在しない場合、デフォルトのMV及び/又はMVD精度が利用される。
f. 一例において、デフォルト精度は、1/4画素である。
g. あるいは、デフォルトの精度は、アフィンコーディングブロックの動き補償に用いられる精度に設定される。
3. 例えば、amvr_flagが0である場合、アフィンモードのMVD精度は1/4画素であり、そうでない場合、アフィンモードのMVD精度は他の値であってもよい。
h. あるいは、追加のMVD精度は、第2のシンタックス要素を介してさらにシグナリングされてもよい。
iii. 一例において、第2の構文要素(例えば、amvr_coarse_precision_flag)は、アフィンモードのMVD精度を示すように信号通知されてもよい。
1. 一例において、第2の構文要素が信号通知されるかどうかは、第1の構文要素に依存してもよい。例えば、第2の構文要素は、第1の構文要素が1であるときにのみ信号通知される。
2. 一例において、第2の構文要素が0である場合、アフィンモードのMVD精度は1画素であり、そうでない場合、アフィンモードのMVD精度は1/16画素である。
3. 一例において、第2の構文要素が0である場合、アフィンモードのMVD精度は1/16画素であり、そうでない場合、アフィンモードのMVD精度は全画素である。
iv. 一例において、アフィンインターモードにおいて使用されるMVD精度を示すために使用される構文要素は、同じ名前を有するが通常のインターモードにおいて使用されるMVD精度を示すために使用される構文要素と同じコンテキストモデルを共有する。
4. 代替的に、アフィンインターモードで使用されるMVD精度を示すのに使用される構文要素は、同じ名前を有するが通常のインターモードで使用されるMVD精度を示すのに使用される構文要素として、異なるコンテキストモデルを使用する。
【0260】
例10
アフィンコーディングブロックに対してAMVRを適用するかどうか、又はどのように適用するかは、現在のブロックの参照ピクチャに依存してもよい。
a. 一例において、参照ピクチャが現在のピクチャである場合、即ち、現在のブロックにおいてイントラブロックコピーが適用される場合、AMVRは適用されない。
【0261】
エンコーダのためのアフィンモードにおけるAVMRの高速アルゴリズム
【0262】
アフィンモードとAMVPモードのRDコスト(実質RDコスト、又はSATD/SSE/SADコストにラフビットコストを加えたもの)を、IMV=iのときのaffineCosti、amvpCostiと表す。ここで、i=0,1,2である。ここで、IMV=0は1/4画素のMVを意味し、IMV=1はAMVPモードでは整数MV、アフィンモードでは1/16画素のMVを意味し、IMV=2はAMVPモードでは4画素のMV、アフィンモードでは整数MVを意味する。マージモードのRDコストをmergeCostとする。
【0263】
例11
現在のCUのアフィンモードにおいて、その親CUのベストモードがAF_INTERモードでもAF_MERGEモードでもない場合、AMVRを無効にすることが提案される。
代替的に、AMVRは、その親CUの最良のモードがAF_INTERモード例12でない場合、現在のCUのアフィンモードのためにディスエーブルされる。affineCost0>th1*amvpCost0(ここで、th1は正の閾値である)の場合、AMVRはアフィンモードに対して無効にされることが提案される。
a. 代替的に、min(affineCost0,amvpCost0)>th2*mergeCost(ここで、th2は正の閾値である)である場合、AMVRはアフィンモードに対して無効にされる。
b. 代替的に、affineCost0>th3*affineCost1(ここで、th3は正の閾値であるである)場合、整数MVはアフィンモードに対して無効にされる。
【0264】
例12
amvpCost0>th4*affineCost0(ここで、th4は正の閾値である)の場合、AMVPモードではAMVRを無効にすることが提案される。
a. 代替的に、AMVPモードでは、min(affineCost0,amvpCost0)>th5*mergeCost(ここで、th5は正の閾値である)の場合、AMVRは無効にされる。
【0265】
例13
1つのMV精度で得られた4/6パラメータアフィンモデルを、他のMV精度のための候補開始探索点として使用してもよいことが提案される。
b. 一例において、1/16MVで得られたえ4/6パラメータアフィンモデルを、他のMV精度のための候補開始探索点として使用してもよい。
c. 一例において、1/4MVで得られた4/6パラメータアフィンモデルを、他のMV精度のための候補開始探索点として使用してもよい。
【0266】
例14
エンコーダにおいて、現在のブロックの親ブロックがアフィンモードを選択していない場合、アフィンモードのAMVRはチェックされない。
【0267】
例15
前述のコーディングされたフレーム/スライス/タイル/CTU行におけるアフィンコーディングブロックのための異なるMV精度の使用の統計を利用して、現在のスライス/タイル/CTU行におけるアフィンコーディングブロックのためのMV精度のひずみ率計算を早期に終了させることができる。
d. 一例において、特定のMV精度を有するアフィンコーディングブロックのパーセンテージが記録される。百分率が小さ過ぎる場合、対応するMV精度のチェックはスキップされる。
e. 一例において、あるMV精度をスキップするかどうかを決定するために、同じ時間層を有する前にコーディングされたフレームが利用される。
【0268】
アフィンAMVRのコーディングコンテキスト
【0269】
例16
アフィンAMVR符号のコーディングに使用される各コンテキストに対して、このコンテキストに関連付けられた2つの確率更新速度を制御するように、変数(shiftIdxと表される)を設定することが提案される。
a. 一例において、より速い更新速度は、(shiftIdx>2)+2で定義される。
b. 一例において、より遅い更新速度は、(shiftIdx&3)+3+shift0によって定義される。
c. 一例において、適合ビットストリームは、導出されたより速い更新速度が[2,5]内に含まれるべきであるという規則に従う。
d. 一例において、適合ビットストリームは、導出されたより速い更新速度が[3,6]内に含まれるべきであるという規則に従う。
【0270】
例17
1つのブロックのAMVRモードをコーディングするとき、近傍のブロックのアフィンAMVRモード情報は、コンテキストモデリングのために許可されないことが提案される。
a. 一例において、近傍のブロックのAMVRモードインデックスを使用してもよく、近傍のブロックのアフィンAMVRモード情報を排除する。表5(表5-1及び表5-2)に、(xNbL,yNbL)、(xNbA,yNbA)の一例を、左上の近傍のブロックとして示す。一例において、コンテキストインデックスオフセットctxInc=(condL && availableL)+(condA && availableA)+ctxSetIdx*3である。
【0271】
【0272】
【0273】
b. 代替的に、近傍のブロックのアフィンAMVRモード情報は、直接使用される代わりに関数を使用してさらに使用してもよい。一例において、表6-1に記載される関数funcは、アフィンコーディングされた近傍のブロックのamvr_mode[xNbL][yNbL]が一定のMV精度(例えば、1/4画素のMV精度)を示す場合、trueを返してもよい。一例において、表3-2に記載される関数funcは、アフィンコーディングされた近傍のブロックのamvr_flag[xNbL][yNbL]が一定のMV精度(例えば、1/4画素のMV精度)を示す場合、trueを返してもよい。
【0274】
【0275】
【0276】
c. 代替的に、近傍のブロックのアフィンAMVRモード情報をさらに使用して、AMVRモード(通常のインターモードに適用される)の第1の構文要素(例えば、amvr_flag)をコーディングしてもよい。表6-3及び表6-4にその例を示す。
【0277】
【0278】
【0279】
d. AMVRモード情報が複数の構文要素(例えば、amvr_flag、amvr_coarse_precision_flagで表される第1および第2の構文要素)で表される場合、上記の構文amvr_modeは、複数の構文要素のいずれかに置き換えられてもよく、上記の方法を引き続き適用してもよい。
【0280】
例18
アフィンAMVRモードをコーディングする場合、近傍のブロックのAMVRモード情報をコンテキストコーディングに使用してもよい。
a. 一例において、近傍のブロックのAMVRモード情報は直接使用される。一例を表7に示す。代替的に、さらに、コンテキストインデックスオフセットctxInc=(condL&availableL)+(condA&availableA)+ctxSetIdx*3。
【0281】
【0282】
b. 代替的に、近傍のブロックのAMVRモード情報は、コンテキストモデリングのために許可されない。一例を表8に示す。
【0283】
【0284】
c. 代替的に、近傍のブロックのアフィンAMVRモード情報は、直接使用される代わりに関数を使用してさらに使用してもよい。一例において、表9に記載される関数funcは、非アフィンコーディングされた近傍のブロックのamvr_mode[xNbL][yNbL]が特定のMV精度(例えば、1/4画素のMV精度)を示す場合、trueを返してもよい。
【0285】
【0286】
d. アフィンAMVRモード情報が複数の構文要素(例えば、amvr_flag、amvr_coarse_precision_flagで表される第1および第2の構文要素)で表される場合、上記の構文amvr_modeは、複数の構文要素のいずれかに置き換えられてもよく、上記の方法を引き続き適用してもよい。
【0287】
SMVDとアフィンSMVDの高速アルゴリズム
【0288】
SMVDモードをチェックするとき、現在選択されている最良のモードがCurBestModeであり、AMVRにおけるAMVR MVD精度がMvdPrecであるか、またはアフィンAMVRのMVD精度がMvdPrecAffであるとする。
【0289】
例19
SMVDモードは、現在選択されている最良のモード(即ち、CurBestMode)、即ち、AMVRにおけるMVD精度に基づいてスキップされてもよい。
a. 一例において、CurBestModeがマージモードおよび/またはUMVEモードである場合、SMVDモードはチェックされなくてもよい。
b. 一例において、CurBestModeがSMVDモードでコーディングされていない場合、SMVDモードはチェックされなくてもよい。
c. 一例において、CurBestModeがアフィンモードである場合、SMVDモードはチェックされなくてもよい。
d. 一例において、CurBestModeがサブブロックマージモードである場合、SMVDモードはチェックされなくてもよい。
e. 一例において、CurBestModeがアフィンSMVDモードである場合、SMVDモードはチェックされなくてもよい。
f. 一例において、CurBestModeがアフィンマージモードである場合、SMVDモードはチェックされなくてもよい。
g. 一例において、上記の高速な方法、即ち、黒丸13.a~13.fは、あるMVD精度に対してのみ適用されてもよい。
i. 一例において、上記の高速な方法は、MVD精度が精度(例えば、整数画素精度)以上である場合にのみ適用されてもよい。
ii. 一例において、上記の高速な方法は、MVD精度が精度(例えば、整数画素の精度)よりも大きい場合にのみ適用されてもよい。
iii. 一例において、上記の高速な方法は、MVD精度が精度(例えば、整数画素精度)以下である場合にのみ適用されてもよい。
iv. 一例において、上記の高速な方法は、MVD精度が精度(例えば、整数画素の精度)より小さい場合にのみ適用されてもよい。
【0290】
例20
アフィンSMVDモードは、現在選択されている最良のモード(即ち、CurBestMode)、アフィンAMVRにおけるMVD精度に基づいてスキップされてもよい。
a. 一例において、CurBestModeがマージモードおよび/またはUMVEモードである場合、アフィンSMVDモードはチェックされなくてもよい。
b. 一例において、CurBestModeがアフィンSMVDモードでコーディングされていない場合、アフィンSMVDモードはチェックされなくてもよい。
c. 一例において、CurBestModeがサブブロックマージモードである場合、アフィンSMVDモードはチェックされなくてもよい。
d. 一例において、CurBestModeがSMVDモードである場合、アフィンSMVDモードはチェックされなくてもよい。
e. 一例において、CurBestModeがアフィンマージモードである場合、アフィンSMVDモードはチェックされなくてもよい。
f. 一例において、上記の高速な方法、即ち、黒丸20.a~20.eは、あるMVD精度に対してのみ適用されてもよい。
i. 一例において、上記高速な方法は、アフィンMVD精度が精度(例えば、整数画素精度)以上である場合にのみ適用されてもよい。
ii. 一例において、上記の高速な方法は、アフィンMVD精度が精度(例えば、整数画素精度)よりも大きい場合にのみ適用されてもよい。
iii. 一例において、上記高速な方法は、アフィンMVD精度が精度(例えば、整数画素精度)以下である場合にのみ適用されてもよい。
iv. 一例において、上記高速な方法は、アフィンMVD精度が精度(例えば、整数画素精度)より小さい場合にのみ適用されてもよい。
【0291】
例21
上記提案の方法は、ブロックサイズ、スライス/ピクチャ/タイルタイプ、又は動き情報等の特定の条件下で適用されてもよい。
a. 一例において、ブロックサイズがM*Hサンプルより小さい、例えば、16個又は32個又は64個の輝度サンプルを含む場合、提案した方法は許可されない。
b. 代替的に、ブロックの幅及び/又は高さの最小サイズがXよりも小さい又はX以下の場合、提案した方法は許可されない。一例において、Xは8に設定される。
c. 代替的に、ブロックの幅及び/又は高さの最小サイズがXよりも小さくない場合、提案される方法は許可されない。一例において、Xは8に設定される。
d. 代替的に、ブロックの幅>th1又は>=th1及び/又はブロックの高さ>th2又は>=th2の時、提案した方法は許可されない。一例において、th1及び/又はth2は、8に設定される。
e. 代替的に、ブロックの幅<th1又は<=th1及び/又はブロックの高さ<th2又は<a=th2の時、提案した方法は許可されない。一例において、th1及び/又はth2は、8に設定される。
f. 代替的に、上記方法を有効又は無効にするか、及び/又はどの方法を適用するかは、ブロックの寸法、映像処理データユニット(VPDU)、ピクチャタイプ、低遅延チェックフラグ、現在のブロックのコーディングされた情報(例えば、参照ピクチャ、単又は双方向予測)又は以前コーディングされたブロックに依存することができる。
【0292】
例22
アフィンモードのためのAMVR方法は、イントラブロックコピー(IBC、別名、現在のピクチャリファレンス(CPR))を適用するかどうかで、異なる方法で実施することができる。
a. 一例において、1つのブロックがIBCによってコーディングされる場合、アフィンモードのためのAMVRを使用できない。
b. 一例において、アフィンモードのためのAMVRを使用してもよいが、1つのブロックがIBCによってコーディングされる場合、候補MV/MVD/MVP精度は、非IBCコーディングアフィンコーディングブロックのために使用されるものと異なってもよい。
【0293】
例23
文書における「スライス」という用語はすべて、「タイルグループ」又は「タイル」に置き換えてもよい。
【0294】
例24
VPS/SPS/PPS/スライスヘッダ/タイルグループヘッダにおいて、1に等しい構文要素(例:no_amvr_constraint_flag)は、AMVRが有効かどうかを示す構文要素(例:sps_amvr_enabled_flag)と、アフィンAMVRが有効かどうかを示す構文要素(例:sps_affine_avmr_enabled_flag)の両方が0に等しいことがビットストリーム適合性の要件であることを指定している。0に等しい構文要素(例えば、no_amvr_constraint_flag)は、制約を課さない。
【0295】
例25
VPS/SPS/PPS/slice header/tile group header又は他の映像データユニットにおいて、構文要素(例えば、no_affine_amvr_constraint_flag)をシグナリングすることができる。
a. 一例において、no_affine_amvr_constraint_flagが1に等しいことは、アフィンAMVRが有効化されるかどうかを示すための構文要素(例えば、sps_affine_avmr_enabled_flag)が0に等しいことがビットストリーム適合性の要件であることを指定する。構文要素(例えば、no_affine_amvr_constraint_flag)が0に等しい場合、制約は課されない。
【0296】
例26
粗い動きの精度を示す第2の構文要素をコーディングするために、複数のコンテキストを使用してもよい(例えば、amvr_coarse_precision_flag)。
a. 一例において、2つのコンテキストが使用されてもよい。
b. 一例において、コンテキストの選択は、現在のブロックがアフィンコーディングされているか否かに依存してもよい。
c. 一例において、第1の構文は、1つのコンテキストのみでコーディングされてもよく、第2の構文は、1つのコンテキストのみでコーディングされてもよい。
d. 一例において、第1の構文は、1つのコンテキストのみでコーディングされてもよく、第2の構文は、バイパスコーディングされてもよい。
e. 一例において、第1の構文に対して、それはバイパスコーディングされてもよく、また、第2の構文に対して、それはバイパスコーディングされてもよい。
f. 一例において、動きベクトル精度に関連するすべての構文要素について、それらはバイパスコーディングされてもよい。
【0297】
例27
例えば、構文要素amvr_modeの第1のビンのみが算術コーディングコンテキストでコーディングされる。amvr_modeの以下のビンはすべて、バイパスコーディングされる。
a. 上で開示された方法は、他の構文要素に適用してもよい。
b. 例えば、構文要素SEの第1のビンのみが算術コーディングコンテキストでコーディングされる。SEの以下のビンはすべて、バイパスコーディングとしてコーディングされる。SEは、下記でもよい。
1) alf_ctb_flag
2) sao_merge_left_flag
3) sao_merge_up_flag
4) sao_type_idx_luma
5) sao_type_idx_chroma
6) split_cu_flag
7) split_qt_flag
8) mtt_split_cu_vertical_flag
9) mtt_split_cu_binary_flag
10) cu_skip_flag
11) pred_mode_ibc_flag
12) pred_mode_flag
13) intra_luma_ref_idx
14) intra_subpartitions_mode_flag
15) intra_subpartition_split_flag
16) intra_luma_mpm_flag
17) intra_chroma_pred_mode
18) merge_flag
19) inter_pred_idc
20) inter_affine_flag
21) cu_affine_type_flag
22) ref_idx_l0
23) mvp_l0_flag
24) ref_idx_l1
25) mvp_l1_flag
26) avmr_flag
27) amvr_precision_flag
28) gbi_idx
29) cu_cbf
30) cu_sbt_flag
31) cu_sbt_quad_flag
32) cu_sbt_horizontal_flag
33) cu_sbt_pos_flag
34) mmvd_flag
35) mmvd_merge_flag
36) mmvd_distance_idx
37) ciip_flag
38) ciip_luma_mpm_flag
39) merge_subblock_flag
40) merge_subblock_idx
41) merge_triangle_flag
42) merge_triangle_idx0
43) merge_triangle_idx1
44) merge_idx
45) abs_mvd_greater0_flag
46) abs_mvd_greater1_flag
47) tu_cbf_luma
48) tu_cbf_cb
49) tu_cbf_cr
50) cu_qp_delta_abs
51) transform_skip_flag
52) tu_mts_idx
53) last_sig_coeff_x_prefix
54) last_sig_coeff_y_prefix
55) coded_sub_block_flag
56) sig_coeff_flag
57) par_level_flag
58) abs_level_gt1_flag
59) abs_level_gt3_flag
c. さらに、代替的に、構文要素SEが2進数値である(すなわち、0または1に等しいのみであることができる)場合、それはコンテキストコーディングされてもよい。
i. さらに、代替的に、構文要素SEが2進数値である(すなわち、0または1に等しいのみであることができる)場合、それはバイパスコーディングされてもよい。
d. さらに、代替的に、第1のビンをコーディングするために、1つのコンテキストのみを使用してもよい。
【0298】
例28 信号通知され得る動き精度に基づいて、動きベクトル予測(MVP)または動きベクトル差(MVD)の精度、または再構築された動きベクトル(MV)を変更してもよい。
a. 1つの例において、MVPの元の予測が目標精度よりも低い(または高くない)場合、MVP=MVP<sである。sは整数であり、この整数は、元の精度と目標精度との間の差に依存してもよい。
iii. 代替的に、MVDの本来の精度が目標精度よりも低い(または高くない)場合、MVD=MVD<sである。sは整数であり、本来の精度と目標精度との差に依存してもよい。
iv. 代替的に、MVの本来の精度が目標精度よりも低い(または高くない)場合、MV=MV<sである。sは整数であり、本来の精度と目標精度との差に依存してもよい。
b. 一例において、MVPの元の予測が目標精度よりも高い(または低くない)場合、MVP=Shift(MVP,s)である。sは整数であり、この整数は、本来の精度と目標精度との差に依存してもよい。
v. 代替的に、MVDの本来の精度が目標精度よりも高い(または低くない)場合、MVD=Shift(MVD,s)であり、この整数は、本来の精度と目標精度との差に依存してもよい。
vi. 代替的に、MVの本来の精度が目標精度よりも高い(または低くない)場合、MV=Shift(MV,s)である。sは整数であり、本来の精度と目標精度との差に依存してもよい。
c. 一例において、MVPの元の予測が目標精度よりも高い(または低くない)場合、MVP=SatShift(MVP,s)である。sは整数であり、この整数は、本来の精度と目標精度との差に依存してもよい。
vii. 代替的に、MVDの本来の精度が目標精度よりも高い(または低くない)場合、MVD=SatShift(MVD,s)である。sは整数であり、本来の精度と目標精度との差に依存してもよい。
viii. 代替的に、MVの本来の精度が目標精度よりも高い(または低くない)場合、MV=SatShift(MV,s)である。sは整数であり、本来の精度と目標精度との差に依存してもよい。
d. 上述した方法は、現在のブロックがアフィンモードでコーディングされていない場合に適用されてもよい。
e. 現在のブロックをアフィンモードでコーディングする場合、上記開示の方法を適用されてもよい。
【0299】
1. 実施形態
ハイライトされた部分は修正された仕様を示す。
【0300】
【0301】
【0302】
代替的に、SPS構文テーブルは、以下のように与えられる;
【0303】
【0304】
意味論:
sps_affine_amvr_enabled_flagが1に等しいことは、アフィンインターモードの動きベクトルコーディングに適応動きベクトル差解像度を用いることを指定する。amvr_enabled_flagが0に等しいことは、アフィンインターモードの動きベクトルコーディングに適応動きベクトル差分解像度を用いないことを指定する。
【0305】
【0306】
【0307】
【0308】
【0309】
【0310】
・一例において、conditionsAは、以下のように定義される。
(sps_affine_amvr_enabled_flag && inter_affine_flag==1&&
(MvdCpL0[x0][y0][0][0]!=0||MvdCpL0[x0][y0][0][1]!=0||
MvdCpL1[x0][y0][0][0]!=0||MvdCpL1[x0][y0][0][1]!=0||
MvdCpL0[x0][y0][1][0]!=0||MvdCpL0[x0][y0][1][1]!=0||
MvdCpL1[x0][y0][1][0]!=0||MvdCpL1[x0][y0][1][1]!=0||
MvdCpL0[x0][y0][2][0]!=0||MvdCpL0[x0][y0][2][1]!=0||
MvdCpL1[x0][y0][2][0]!=0||MvdCpL1[x0][y0][2][1]!=0))
【0311】
代替的に、conditionsAは、以下のように定義される。
(sps_affine_amvr_enabled_flag && inter_affine_flag==1&&
(MvdCpL0[x0][y0][0][0]!=0||MvdCpL0[x0][y0][0][1]!=0||
MvdCpL1[x0][y0][0][0]!=0||MvdCpL1[x0][y0][0][1]!=0||)
【0312】
代替的に、conditionsAは、以下のように定義される。
(sps_affine_amvr_enabled_flag && inter_affine_flag==1&&
(MvdCpLX[x0][y0][0][0]!=0||MvdCpLX[x0][y0][0][1]!=0)ここで、Xは、0又は1である。
【0313】
代替的に、conditionsAは、以下のように定義される。
(sps_affine_amvr_enabled_flag && inter_affine_flag==1)
【0314】
・一例において、conditionsBは、以下のように定義される。
!sps_cpr_enabled_flag||!(inter_pred_idc[x0][y0]==PRED_L0 &&
ref_idx_l0[x0][y0]==num_ref_idx_l0_active_minus1)
【0315】
代替的に、conditionsBは、以下のように定義される。
!sps_cpr_enabled_flag||!(pred_mode[x0][y0]==CPR).
【0316】
代替的に、conditionsBは、以下のように定義される。
!sps_ibc_enabled_flag||!(pred_mode[x0][y0]==IBC).
【0317】
AMVR又はAffine AMVRをコーディングするために異なるシンタックス要素を使用する場合、Affine AMVRに適用される実施例5.5に使用されるコンテキストモデリング及び/又はコンテキストをしかるべく適用することができる。
【0318】
1.2.5. 意味論
【0319】
amvr_flag[x0][y0]は、動きベクトルの差の解像度を指定する。配列のインデックスx0,y0は、ピクチャの左上輝度サンプルに対するコーディングブロックの左上輝度サンプルの位置(x0,y0)を指定する。amvr_flag[x0][y0]が0に等しい場合は、動きベクトル差の解像度が輝度サンプルの1/4であることを指定し、amvr_flag[x0][y0]が1に等しい場合は、動きベクトル差の解像度がamvr_coarse_precisoin_flag[x0][y0]でさらに指定されることを指定する。
【0320】
amvr_flag[x0][y0]が存在しない場合、次のように推論される。
-sps_cpr_enabled_flagが1に等しい場合、amvr_flag[x0][y0]は1に等しいと推測される。
-そうでない場合(sps_cpr_enabled_flagが0に等しい)、amvr_flag[x0][y0]は0に等しいと推論される。
【0321】
amvr_coarse_precisoin_flag[x0][y0]が1に等しい場合、動きベクトル差分の解像度はinter_affine_flagが0の場合は4輝度サンプル、inter_affine_flagが1の場合は1輝度サンプルであることを指定する。配列インデックスx0,y0は、ピクチャの左上輝度サンプルに対する、考慮されるコーディングブロックの左上輝度サンプルの位置(x0,y0)を指定する。
amvr_coarse_precisoin_flag[x0][y0]が存在しない場合、0に等しいと推測される。
【0322】
inter_affine_flag[x0][y0]が0の場合、変数MvShiftは(amvr_flag[x0][y0]+amvr_coarse_precisoin_flag[x0][y0])<<1に等しく設定され、変数MvdL0[x0][y0][0]、MvdL0[x0][y0][1]、MvdL1[x0][y0][0]、MvdL1[x0][y0][1]は、以下のように修正される。
【0323】
MvdL0[x0][y0][0]=MvdL0[x0][y0][0]<<(MvShift+2) (7-70)
MvdL0[x0][y0][1]=MvdL0[x0][y0][1]<<(MvShift+2) (7-71)
MvdL1[x0][y0][0]=MvdL1[x0][y0][0]<<(MvShift+2) (7-72)
MvdL1[x0][y0][1]=MvdL1[x0][y0][1]<<(MvShift+2) (7-73)
【0324】
inter_affine_flag[x0][y0]が1と等しい場合、変数MvShiftは、(amvr_coarse_precisoin_flag?(amvr_coarse_precisoin_flag<<1):(-(amvr_flag<<1)))に等しくなるように設定され、変数MvdCpL0[x0][y0][0][0]、MvdCpL0[x0][y0][0][1]、MvdCpL0[x0][y0][1][0]、MvdCpL0[x0][y0][1][1]、MvdCpL0[x0][y0][2][0]、MvdCpL0[x0][y0][2][1]は、以下のように修正される。
【0325】
MvdCpL0[x0][y0][0][0]=MvdCpL0[x0][y0][0][0]<<(MvShift+2) (7-73)
MvdCpL1[x0][y0][0][1]=MvdCpL1[x0][y0][0][1]<<(MvShift+2) (7-67)
MvdCpL0[x0][y0][1][0]=MvdCpL0[x0][y0][1][0]<<(MvShift+2)(7-66)
MvdCpL1[x0][y0][1][1]=MvdCpL1[x0][y0][1][1]<<(MvShift+2) (7-67)
MvdCpL0[x0][y0][2][0]=MvdCpL0[x0][y0][2][0]<<(MvShift+2) (7-66)
MvdCpL1[x0][y0][2][1]=MvdCpL1[x0][y0][2][1]<<(MvShift+2) (7-67)
【0326】
代替的に、inter_affine_flag[x0][y0]が1に等しい場合、変数MvShiftは、(affine_amvr_coarse_precisoin_flag?(affine_amvr_coarse_precisoin_flag<<1):(-(affine_amvr_flag<<1)))に等しく設定される。
【0327】
【0328】
丸め処理は、所与のrightShift値が0(1/16画素の精度で発生する)である場合、丸めオフセットを(1<<(rightShift-1))ではなく、0に設定するように修正される。
例えば、MVのための丸め処理の従属節は、以下のように修正される。
【0329】
この処理への入力は以下の通りである。
- 動きベクトルmvX
- 四捨五入するときの右シフトパラメータの右シフト、
- 解像度を上げるための、左シフトパラメータleftShift
【0330】
この処理の出力が丸められた動きベクトルmvXである。
【0331】
mvXを丸める場合、以下が適用される。
offset=(rightShift==0)?0:(1<<(rightShift-1)) (8-371)
mvX[0]=(mvX[0]>=0?(mvX[0]+offset)>>rightShift:
-((-mvX[0]+offset)>>rightShift))<<leftShift (8-372)
mvX[1]=(mvX[1]>=0?(mvX[1]+offset)>>rightShift:-((-mvX[1]+offset)>>rightShift))<<leftShift (8-373)
【0332】
【0333】
アフィン動きベクトル導出処理において呼び出される丸め処理は、2に固定される代わりに、(MvShift+2)の入力を用いて行われる。
【0334】
輝度アフィン制御点動きベクトル予測子の導出処理
【0335】
この処理への入力は以下の通りである。
- 現在のピクチャの左上の輝度サンプルに対する現在の輝度コーディングブロックの左上のサンプルの輝度位置(xCb、yCb)
- 現在の輝度コーディングブロックの幅および高さを指定する2つの変数cbWidthおよびcbHeigh
- 現在のコーディングユニットrefIdxLXの参照インデックスであり、Xは0又は1である。
- 制御点動きベクトルnumCpMvの数
【0336】
この処理の出力は、Xが0又は1として、cpIdx=0..numCpMv-1の輝度アフィン制御点動きベクトル予測子mvpCpLX[cpIdx]である。
【0337】
Xが0又は1として、cpMvpListLXである制御点動きベクトル予測子候補リストを導出するために、以下の順序付けられたステップが適用される。
リストnumCpMvpCandLXにおける制御点動きベクトル予測子の候補の数は、0に等しく設定される。
【0338】
変数availableFlagAおよびavailableFlagBは、いずれもFALSEに等しく設定される。
...
【0339】
8.4.2.14項で規定された動きベクトルの丸め処理は、cpMvpLX[cpIdxに等しく設定したmvX、(MvShift+2)に等しく設定したrightShift、(MvShift+2)に等しく設定したleftShiftを入力とし、cpIdx=0..numCpMv-1で丸められたcpMvpLX[cpIdx]を出力として用いて呼び出される。
...
【0340】
変数availableFlagAはTRUEに等しく設定される。
【0341】
8.4.4.5項で規定された近傍のブロックからの輝度アフィン制御点動きベクトルの導出処理は、輝度コーディングブロック位置(xCb,yCb)、輝度コーディングブロック幅と高さ(cbWidth,cbHeight)、近傍の輝度コーディングブロックの位置(xNb,yNb)、近傍の輝度コーディングブロック幅と高さ(nbW,nbH)、制御点動きベクトル数numCpMvを入力とし、制御点動きベクトル予測子候補cpMvpLY[cpIdx](cpIdx=0..numCpMv-1)を出力として用いて呼び出される。
【0342】
8.4.2.14項で規定された動きベクトルの丸め処理は、cpMvpLY[cpIdx]に等しく設定したmvX、(MvShift+2)に等しく設定したrightShift、(MvShift+2)に等しく設定したleftShiftを入力とし、cpIdx=0..numCpMv-1で丸められたcpMvpLY[cpIdx]を出力として用いて呼び出される。
...
【0343】
8.4.4.5項で規定された近傍のブロックからの輝度アフィン制御点動きベクトルの導出処理は、輝度コーディングブロック位置(xCb,yCb)、輝度コーディングブロック幅および高さ(cbWidth,cbHeight)、近傍の輝度コーディングブロック位置(xNb,yNb)、近傍の輝度コーディングブロック幅および高さ(nbW,nbH)、および制御点動きベクトル数numCpMvを入力とし、制御点動きベクトル予測子候補cpMvpLX[cpIdx](cpIdx=0..numCpMv-1)を出力として用いて呼び出される。
【0344】
8.4.2.14項で規定された動きベクトルの丸め処理は、cpMvpLX[cpIdxに等しく設定したmvX、(MvShift+2)に等しく設定したrightShift、(MvShift+2)に等しく設定したleftShiftを入力とし、cpIdx=0..numCpMv-1で丸められたcpMvpLX[cpIdx]を出力として用いて呼び出される。
【0345】
以下の割り当てを行う。
cpMvpListLX[numCpMvpCandLX][0]=cpMvpLX[0] (8-618)
cpMvpListLX[numCpMvpCandLX][1]=cpMvpLX[1] (8-619)
cpMvpListLX[numCpMvpCandLX][2]=cpMvpLX[2] (8-620)
numCpMvpCandLX=numCpMvpCandLX+1 (8-621)
【0346】
あるいは、PredFlagLY[xNbBk][yNbBk](with Y=!X)が1に等しく、DiffPicORDerCnt(RefPicListY[RefIdxLY[xNbBk][yNbBk]],RefPicListX[refIdxLX])が0に等しい場合、以下が適用される。
【0347】
変数availableFlagBはTRUEに設定される。
【0348】
8.4.4.5項で規定された近傍のブロックからの輝度アフィン制御点動きベクトルの導出処理は、輝度コーディングブロック位置(xCb,yCb)、輝度コーディングブロック幅と高さ(cbWidth,cbHeight)、近傍の輝度コーディングブロックの位置(xNb,yNb)、近傍の輝度コーディングブロック幅と高さ(nbW,nbH)、および制御点動きベクトル数numCpMvを入力とし、制御点動きベクトル予測子候補cpMvpLY[cpIdx](cpIdx=0..numCpMv-1)を出力として用いて呼び出される。
【0349】
8.4.2.14項で規定された動きベクトルの丸め処理は、cpMvpLY[cpIdx]と等しく設定したmvX、(MvShift+2)に等しく設定したrightShift、(MvShift+2)に等しく設定したleftShiftを入力とし、cpIdx=0..numCpMv-1で丸められたcpMvpLY[cpIdx]を出力として用いて呼び出される。
【0350】
以下の割り当てを行う。
cpMvpListLX[numCpMvpCandLX][0]=cpMvpLY[0] (8-622)
cpMvpListLX[numCpMvpCandLX][1]=cpMvpLY[1] (8-623)
cpMvpListLX[numCpMvpCandLX][2]=cpMvpLY[2] (8-624)
numCpMvpCandLX=numCpMvpCandLX+1 (8-625)
【0351】
numCpMvpCandLXが2未満である場合、以下が適用される。
【0352】
8.4.4.8項で規定するアフィン制御点動きベクトル予測候補の導出処理は、輝度コーディングブロック位置(xCb,yCb)、輝度コーディングブロック幅cbWidth、輝度コーディングブロック高さcbHeight、および現在のコーディングユニットrefIdxLXの参照インデックスを入力とし、可用性フラグavailableConsFlagLX、可用性フラグavailableFlagLX[cpIdx]およびcpMvpLX[cpIdx](cpIdx=0..numCpMv-1)を出力として用いて呼び出される。
【0353】
availableConsFlagLXが1に等しく、numCpMvpCandLXが0に等しい場合、以下の割り当てが行われる。
【0354】
cpMvpListLX[numCpMvpCandLX][0]=cpMvpLX[0] (8-626)
cpMvpListLX[numCpMvpCandLX][1]=cpMvpLX[1] (8-627)
cpMvpListLX[numCpMvpCandLX][2]=cpMvpLX[2] (8-628)
numCpMvpCandLX=numCpMvpCandLX+1 (8-629)
【0355】
以下は、cpIdx=0..numCpMv-1に適用される。
numCpMvpCandLXが2未満であり、かつavailableFlagLX[cpIdx]が1に等しい場合、以下の割り当てが行われる。
【0356】
cpMvpListLX[numCpMvpCandLX][0]=cpMvpLX[cpIdx] (8-630)
cpMvpListLX[numCpMvpCandLX][1]=cpMvpLX[cpIdx] (8-631)
cpMvpListLX[numCpMvpCandLX][2]=cpMvpLX[cpIdx] (8-632)
numCpMvpCandLX=numCpMvpCandLX+1 (8-633)
【0357】
numCpMvpCandLXが2未満である場合、以下が適用される。
【0358】
8.4.2.11項に記載の時間的輝度動きベクトル予測の導出処理は、輝度コーディングブロックの位置(xCb,yCb)、輝度コーディングブロックの幅cbWidth、輝度コーディングブロックの高さcbHeight、refIdxLXを入力とし、可用性フラグavailableFlagLXCol、および時間的動きベクトル予測子mvLXColを出力として使用して呼び出される。
【0359】
availableFlagLXColが1に等しい場合、以下が適用される。
8.4.2.14項に記載の動きベクトルの丸め処理は、mvLXColと等しく設定されたmvX、(MvShift+2)と等しいrightShift set、(MvShift+2)と等しく設定されたleftShiftを入力とし、丸めたmvLXColを出力として使用して呼び出される。
【0360】
以下の割り当てを行う。
cpMvpListLX[numCpMvpCandLX][0]=mvLXCol (8-634)
cpMvpListLX[numCpMvpCandLX][1]=mvLXCol (8-635)
cpMvpListLX[numCpMvpCandLX][2]=mvLXCol (8-636)
numCpMvpCandLX=numCpMvpCandLX+1 (8-637)
【0361】
numCpMvpCandLXが2未満である場合、mvZero[0]及びmvZero[1]の双方が0になるとともに、numCpMvpCandLXが2になるまで以下が繰り返される。
【0362】
cpMvpListLX[numCpMvpCandLX][0]=mvZero (8-638)
cpMvpListLX[numCpMvpCandLX][1]=mvZero (8-639)
cpMvpListLX[numCpMvpCandLX][2]=mvZero (8-640)
numCpMvpCandLX=numCpMvpCandLX+1 (8-641)
【0363】
Xが0又は1であるアフィン制御点動きベクトル予測モジュールcpMvpLXは、以下のように導出される。
cpMvpLX=cpMvpListLX[mvp_lX_flag[xCb][yCb]]
(8-642)
【0364】
構築されたアフィン制御点動きベクトル予測候補の導出処理
【0365】
この処理への入力は以下の通りである。
- 現在のピクチャの左上の輝度サンプルに対する現在の輝度コーディングブロックの左上のサンプルを指定する輝度位置(xCb,yCb)
- 現在の輝度コーディングブロックの幅および高さを指定する2つの変数cbWidthおよびcbHeigh
- 現在の予測ユニットの分割refIdxLX(Xが0又は1)の参照インデックス
【0366】
この処理の出力は以下の通りである。
- 構築されたアフィン制御点動きベクトル予測候補の可用性フラグは、availableConsFlagLXを表し、Xが0又は1である。
- 可用性フラグavailableLX[cpIdx](cpIdx=0..2で、Xは0又は1)
-構築されたアフィン制御点動きベクトル予測候補cpMvLX[cpIdx](cpIdx=0..numCpMv-1、Xは0又は1)
【0367】
第1の(左上)制御点動きベクトルcpMvLX[0]及び可用性フラグavailableFlagLX[0]は、以下の順序ステップで導出される。
【0368】
サンプル位置(xNbB2,yNbB2),(xNbB3,yNbB3)および(xNbA2,yNbA2)は、それぞれ、(xCb-1,yCb-1),(xCb,yCb-1)および(xCb-1,yCb)に等しく設定される。
【0369】
可用性フラグavailableFlagLX[0]は0に設定され、cpMvLX[0]の両方のコンポーネントは0に設定される。
【0370】
以下は、(xNbTL,yNbTL)をB2、B3およびA2に置き換えた場合に適用される。
【0371】
項に記載のコーディングブロックの可用性導出処理は、輝度コーディングブロックの位置(xCb,yCb)、輝度コーディングブロックの幅cbWidth、輝度コーディングブロックの高さcbHeight、(xNbTL,yNbTL)に等しく設定された輝度位置(xNbY,yNbY)を入力として呼び出され、出力はコーディングブロック可用性フラグavailableTLに割り当てられる。
【0372】
availableTLがTRUEに等しく、availableFlagLX[0]が0に等しい場合、以下が適用される。
【0373】
PredFlagLX[xNbTL][yNbTL]が1に等しく、DiffPicORDerCnt(RefPicListX[RefIdxLX[xNbTL][yNbTL]],RefPicListX[refIdxLX])が0に等しく、RefIdxLX[xNbTL][yNbTL]に対応する参照ピクチャが現在のピクチャでない場合、availableFlagLX[0]は、1に等しく設定され、下記のような割り当てを行う。
cpMvLX[0]=MvLX[xNbTL][yNbTL] (8-643)
【0374】
そうでない場合、PredFlagLY[xNbTL][yNbTL](Y=!X)が1に等しく、DiffPicORDerCnt(RefPicListY[RefIdxLY[xNbTL][yNbTL]],RefPicListX[refIdxLX])が0に等しく、RefIdxLY[xNbTL][yNbTL]に対応する参照ピクチャが現在の画像でない場合、availableFlagLX[0]を1に等しく設定して下記のような割り当てを行う。
cpMvLX[0]=MvLY[xNbTL][yNbTL]
(8-644)
【0375】
availableFlagLX[1]=1の場合、8.4.2.14項に規定されるような動きベクトルの丸め処理は、cpMvLX[1]に等しく設定されたmvX集合、(MvShift+2)に等しく設定されたrightShift集合、(MvShift+2)に等しく設定されたleftShift集合、を入力とし、丸められたcpMvLXを出力として呼び出される。
【0376】
第2の(右上)制御点動きベクトルcpMvLX[1]および可用性フラグavailableFlagLX[1]は、以下の順序ステップで導出される。
【0377】
サンプル位置(xNbB1,yNbB1)と(xNbB0,yNbB0)は、それぞれ、(xCb+cbWidth-1,yCb-1)および(xCb+cbWidth,yCb-1)と等しく設定される。
【0378】
可用性フラグavailableFlagLX[0]は0に設定され、cpMvLX[0]の両方のコンポーネントは0に設定される。
【0379】
以下は、(xNbTR,yNbTR)をB1およびB0に置き換えた場合に適用される。
【0380】
6.4.X項に指定されたように、コーディングブロックの可用性導出処理は、輝度コーディングブロックの位置(xCb,yCb)、輝度コーディングブロックの幅cbWidth、輝度コーディングブロックの高さcbHeight、(xNbTR,yNbTR)と等しく設定された輝度位置(xNbY,yNbY)を入力として呼び出され、出力はコーディングブロック可用性フラグavailableTRに割り当てられる。
【0381】
availableTRがTRUEに等しく、かつavailableFlagLX[1]が0に等しい場合、以下が適用される。
【0382】
PredFlagLX[xNbTR][yNbTR]が1に等しく、DiffPicOrderCnt(RefPicListX[RefIdxLX[xNbTR][yNbTR]],RefPicListX[refIdxLX])が0に等しく、RefIdxLX[xNbTR][yNbTR]に対応する参照ピクチャが現在のピクチャでない場合、availableFlagLX[1]は、1に等しく設定して下記のような割り当てを行う。
cpMvLX[1]=MvLX[xNbTR][yNbTR] (8-645)
【0383】
そうでない場合、PredFlagLY[xNbTR][yNbTR](Y=!X)が1に等しく、DiffPicORDerCnt(RefPicListY[RefIdxLY[xNbTR][yNbTR]],RefPicListX[refIdxLX])が0に等しく、RefIdxLY[xNbTR][yNbTR]に対応する参照ピクチャが現在の画像でない場合、availableFlagLX[1]を1に等しく設定して下記のような割り当てを行う。
cpMvLX[1]=MvLY[xNbTR][yNbTR] (8-646)
【0384】
availableFlagLX[1]=1の場合、8.4.2.14項に規定されるような動きベクトルの丸め処理が、cpMvLX[1]に等しく設定されたmvX集合、(MvShift+2)に等しく設定されたrightShift集合、(MvShift+2)に等しく設定されたleftShift集合、を入力とし、丸められたcpMvLXを出力として呼び出される。
【0385】
第3の(左下)制御点動きベクトルcpMvLX[2]及び可用性フラグavailableFlagLX[2]は、以下の順序ステップで導出される。
【0386】
サンプル位置(xNbA1,yNbA1)および(xNbA0,yNbA0)は、それぞれ、(xCb-1,yCb+cbHeight-1)および(xCb-1,yCb+cbHeight)に等しく設定される。
【0387】
可用性フラグavailableFlagLX[2]は0に設定され、cpMvLX[2]の両方のコンポーネントは0に設定される。
【0388】
以下は、(xNbBL,yNbBL)に適用され、BLがA1およびA0に置き換えられる。
【0389】
6.4.X項に記載のコーディングブロックの可用性導出処理は、輝度コーディングブロックの位置(xCb,yCb)、輝度コーディングブロックの幅cbWidth、輝度コーディングブロックの高さcbHeight、輝度位置(xNbY,yNbY)=(xNbBL,yNbBL)を入力として呼び出され、その出力は、コーディングブロック可用性フラグavailableBLに割り当てられる。
【0390】
availableBLがTRUEに等しく、かつavailableFlagLX[2]が0に等しい場合、以下が適用される。
【0391】
PredFlagLX[xNbBL][yNbBL]が1に等しく、DiffPicORDerCnt(RefPicListX[RefIdxLX[xNbBL][yNbBL]],RefPicListX[refIdxLX])が0に等しく、RefIdxLY[xNbBL][yNbBL]に対応する参照ピクチャが現在のピクチャでない場合、availableFlagLX[2]を1に設定し、以下のような割り当てを行う。
cpMvLX[2]=MvLX[xNbBL][yNbBL] (8-647)
【0392】
そうでない場合、PredFlagLY[xNbBL][yNbBL](Y=!X)が1に等しく、DiffPicORDerCnt(RefPicListY[RefIdxLY[xNbBL][yNbBL]],RefPicListX[refIdxLX])が0に等しく、RefIdxLY[xNbBL][yNbBL]に対応する参照ピクチャが現在の画像でない場合、availableFlagLX[2]を1に等しく設定して下記のような割り当てを行う。
cpMvLX[2]=MvLY[xNbBL][yNbBL] (8-648)
【0393】
availableFlagLX[2]が1に等しい場合、8.4.2.14項に規定されるような動きベクトルの丸め処理が、入力としてmvX集合がcpMvLX[2]に等しく設定され、rightShift集合が(MvShift+2)に等しく設定され、leftShift集合が(MvShift+2)に等しく設定され、出力として丸められたcpMvLX[2]が呼び出される。
【0394】
【0395】
【0396】
左および上の構文要素を使用したctxIncの仕様:
一例として、コンテキストインクリメントオフセットctxInc=(condL && availableL)+(condA && availableA)+ctxSetIdx*3が挙げられる。
代替的に、以下である。
ctxInc=((condL && availableL)||(condA && availableA))+ctxSetIdx*3.+ctxSetIdx*3.
ctxInc=(condL && availableL)+M*(condA&&availableA)+ctxSetIdx*3.(例:M=2)ctxInc=M*(condL && availableL)+(condA&&availableA)+ctxSetIdx*3.(例:M=2)
【0397】
【0398】
amvr_flagのctxIdxのinitValueの値:
現在のブロックがアフィン又は非アフィンである場合、異なるコンテキストが使用される。
【0399】
【0400】
【0401】
あるいは、現在のブロックがアフィン又は非アフィンである場合、同じコンテキストが使用される。
【0402】
【0403】
代替的に、amvr_flagはバイパスコーディングされる。
amvr_coarse_precisoin_flagのctxIdxのinitValueの値:
現在のブロックがアフィン又は非アフィンである場合、異なるコンテキストが使用される。
【0404】
【0405】
あるいは、以下である。
【0406】
【0407】
あるいは、現在のブロックがアフィン又は非アフィンである場合、同じコンテキストが使用される。
【0408】
【0409】
代替的に、amvr_coarse_precisoin_flagは、バイパスコーディングされる。
【0410】
上述された例は、以下に説明される方法、例えば、方法2510から2540に関連して組み込まれてもよく、これらは、映像デコーダ又は映像エンコーダにおいて実装されてもよい。
【0411】
図25Aおよび25Dは、映像処理方法の一例を示すフローチャートである。方法2510は、
図25Aに示すように、工程2512において、ある映像の現在の映像ブロックとこの現在の映像ブロックのコーディング表現との間での変換が、非アフィンインターAMVRモードに基づくものであることを判定(決定)することを含む。方法2510は、ステップ2514において、判定に基づいて変換を行うことを含む。いくつかの実装形態において、現在の映像ブロックのコーディング表現はコンテキストに基づくコーディングであり、現在の映像ブロックをコーディングするために使用されるコンテキストは、変換時に近傍のブロックのアフィンAMVRモード情報を使用せずにモデル化される。
【0412】
方法2520は、
図25Bに示すように、ステップ2522において、ある映像の現在の映像ブロックとこの現在の映像ブロックのコーディング表現との間での変換が、アフィン適応型動きベクトル解像度(アフィンAMVR)モードに基づくものであることを判定することを含む。方法2520は、ステップ2524において、判定に基づいて変換を行うことを含む。いくつかの実装形態において、現在の映像ブロックのコーディング表現は、コンテキストに基づくコーディングに基づいており、変数は、コンテキストのための2つの確率更新速度を制御する。
【0413】
方法2530は、
図25Cに示されるように、工程2532において、ある映像の現在の映像ブロックとこの現在の映像ブロックのコーディング表現との間での変換が、アフィンAMVRモードに基づくものであることを判定することを含む。方法2530は、ステップ2534において、判定に基づいて変換を行うことを含む。いくつかの実装形態において、現在の映像ブロックのコーディング表現は、コンテキストに基づくコーディングに基づいており、現在の映像ブロックのコーディングに使用されるコンテキストは、アフィンインターモードおよび通常インターモードの両方のAMVRモードが変換中に使用される近傍のブロックのコーディング情報を使用してモデル化される。
【0414】
方法2540は、
図25Dに示されるように、工程2542において、映像の現在の映像ブロックと現在の映像ブロックのコーディング表現との間での変換のために、その変換のための複数のコンテキストの使用を判定することを含む。方法2540は、ステップ2544において、判定に基づいて変換を行うことを含む。いくつかの実装形態において、複数のコンテキストは、粗い動きの精度を示す構文要素をコーディングするために使用される。
【0415】
方法2550は、
図25Eに示されるように、工程2552において、現在の映像ブロックと現在の映像ブロックのコーディング表現との間での変換のために、現在選択されている最良のモードに基づいて対称動きベクトル差分(SMVD)モードを用いるか否かを判定することを含む。方法2554は、判定に基づいて変換を行うことを含む。
【0416】
方法2560は、
図25Fに示されるように、工程2562において、現在の映像ブロックと現在の映像ブロックのコーディング表現との間での変換のために、現在選択されている変換のための最良のモードに基づいて、アフィンSMVDモードを用いるか否かを判定することを含む。方法2564は、判定に基づいて変換を行うことを含む。
【0417】
5. 開示される技術の例示的な実装形態
【0418】
図26は、映像処理装置2600のブロック図である。本明細書に記載の方法の1つ以上を実装するために、装置2600を使用してもよい。装置2600は、スマートフォン、タブレット、コンピュータ、モノのインターネット(IoT)受信機等に実施されてもよい。装置2600は、1つ以上の処理装置2602と、1つ又は複数のメモリ2604と、映像処理ハードウェア2606と、を含んでもよい。1つまたは複数の処理装置2602は、本明細書に記載される1つ以上の方法(方法2500を含むが、これに限定されない)を実装するように構成されてもよい。メモリ(複数可)2604は、本明細書で説明される方法及び技術を実装するために使用されるデータ及びコードを記憶するために使用してもよい。映像処理ハードウェア2606は、本明細書に記載される技術をハードウェア回路にて実装するために使用してもよい。
【0419】
図28は、開示される技術が実施され得る映像処理システムのブロック図の別の例である。
図28は、本明細書で開示される様々な技術が実装され得る例示的な映像処理システム2800を示すブロック図である。様々な実装形態は、システム2800のモジュールの一部又は全部を含んでもよい。システム2800は、映像コンテンツを受信するための入力ユニット2802を含んでもよい。映像コンテンツは、未加工又は非圧縮フォーマット、例えば、8又は10ビットのマルチモジュール画素値で受信されてもよく、又は圧縮又は符号化フォーマットで受信されてもよい。入力ユニット2802は、ネットワークインターフェース、周辺バスインターフェース、又は記憶インターフェースを表してもよい。ネットワークインターフェースの例としては、イーサネット(登録商標)、パッシブ光ネットワーク(PON)等の有線インターフェース、及びWi-Fi(登録商標)又はセルラーインターフェース等の無線インターフェースが挙げられる。
【0420】
システム2800は、本明細書に記載される様々なコーディング又は符号化方法を実装することができるコーディングモジュール2804を含んでもよい。コーディングモジュール2804は、入力ユニット2802からの映像の平均ビットレートをコーディングモジュール2804の出力に低減し、映像のコーディング表現を生成してもよい。従って、このコーディング技術は、映像圧縮または映像コード変換技術と呼ばれることがある。コーディングモジュール2804の出力は、モジュール2806によって表されるように、記憶されてもよいし、接続された通信を介して送信されてもよい。入力ユニット2902において受信された、記憶された又は通信された映像のビットストリーム(又はコーディング)表現は、モジュール2808によって使用されて、表示インターフェースユニット2810に送信される画素値又は表示可能な映像を生成してもよい。ビットストリーム表現からユーザが見ることができる映像を生成する処理は、映像伸張(映像展開)と呼ばれることがある。さらに、特定の映像処理動作を「コーディング」動作又はツールと呼ぶが、コーディングツール又は動作は、エンコーダによって行われ、対応する復号化ツールまたは動作であって復号化の結果を逆にするものは、デコーダによって行われることが理解されよう。
【0421】
周辺バスインターフェースユニットまたは表示インターフェースユニットの例は、ユニバーサルシリアルバス(USB)または高精細マルチメディアインターフェース(HDMI)(登録商標)またはディスプレイポート等を含んでもよい。ストレージインターフェースの例は、シリアルアドバンスドテクノロジーアタッチメント(SATA)、PCI、IDEインターフェース等を含む。本明細書に記載される技術は、携帯電話、ノートパソコン、スマートフォン、又はデジタルデータ処理及び/又は映像表示を実施可能な他のデバイス等の様々な電子デバイスに実施されてもよい。
【0422】
いくつかの実施形態において、映像コーディング方法は、
図26もしくは
図28を参照して説明したように、ハードウェアプラットフォームに実装される装置を使用して実施されてもよい。
【0423】
様々な技術および実施形態を、以下の項に基づくフォーマットを使用して説明することができる。これらの項は、いくつかの実施形態の好適な特徴として実装されてもよい。
【0424】
複数の項のうちの第1の組では、例えば、前章の第16項~第18項、第23項および第26項に含まれる、前章に記載された技術のうちの一部を使用する。
【0425】
1. 映像処理方法であって、映像の現在の映像ブロックと現在の映像ブロックのコーディング表現との間での変換が、非アフィンインターAMVRモードに基づくことを判定することと、この判定に基づいて、この変換を行うことと、を含み、この現在の映像ブロックのコーディング表現は、コンテキストに基づくコーディングに基づいており、現在の映像ブロックのコーディングに使用されるコンテキストは、この変換中に近傍のブロックのアフィンAMVRモード情報を使用せずにモデル化される、方法。
【0426】
2. コーディングされた近傍のブロックの非アフィンインターAMVRモードインデックスを使用する、第1項に記載の方法。
【0427】
3. 現在の映像ブロックの非アフィンインターAMVRモードをコーディングするために使用されるコンテキストインデックスは、AMVRモードインデックス、アフィンモードフラグ、または左上の近傍のブロックの可用性のうちの少なくとも1つに依存し、この非アフィンAMVR間モードインデックスは、特定のMVD精度を示す、第2項に記載の方法。
【0428】
4. 左近傍のブロックおよび上記近傍のブロックそれぞれについてオフセット値を導出し、左側近傍のブロックおよび上記近傍のブロックのオフセット値の和としてコンテキストインデックスを導出する、第3項に記載の方法。
【0429】
5. 対応する近傍のブロックが利用可能であり、アフィンモードでコーディングされておらず、且つ近傍のブロックのAMVRモードインデックスが0に等しくない場合、オフセット値のうちの少なくとも1つを1として導出し、そうでない場合、オフセット値のうちの少なくとも1つを0として導出する、第4項に記載の方法。
【0430】
6. 前記近傍のブロックのアフィンAMVRモード情報を直接使用せず、前記アフィンAMVRモード情報の関数とともに間接的に使用する、第1項に記載の方法。
【0431】
7. 関数は、(xNbL,yNbL)を含む近傍のブロックのamvr_mode[xNbL][yNbL]またはamvr_flag[xNbL][yNbL]が一定のMVD精度を示す場合に、trueを返す、第6項に記載の方法。
【0432】
8. 近傍のブロックのアフィンAMVRモード情報は、前記現在の映像ブロックの非アフィンインターAMVRモードの第1の構文要素をコーディングするために使用される、第1項に記載の方法。
【0433】
9. 現在の映像ブロックのAMVRモードが複数の構文要素で表される場合、非アフィンインターモードおよびアフィンインターモードの両方でコーディングされた近傍のブロックのAMVRモード情報を使用して、複数の構文要素のうちのいずれか1つをコーディングする、第1項に記載の方法。
【0434】
10. 現在の映像ブロックのAMVRモードが複数の構文要素で表される場合、アフィンインターモードでコーディングされた近傍のブロックのAMVRモード情報は、複数の構文要素のいずれか1つのコーディングに使用されない、第1項に記載の方法。
【0435】
11. 現在の映像ブロックのAMVRモードが複数の構文要素で表される場合、アフィンインターモードでコーディングされた近傍のブロックのAMVRモード情報は、複数の構文要素のうちのいずれか1つの構文要素のコーディングに直接的に使用されるのではなく、間接的に使用する、第1項に記載の方法。
【0436】
12. 現在の映像ブロックのAMVRモードは、アフィンインターAMVRモードおよび非アフィンインターAMVRモードを含む、第9項~第11項のいずれかに記載の方法。
【0437】
13. 映像の現在の映像ブロックと現在の映像ブロックのコーディング表現との間での変換が、アフィン適応型動きベクトル解像度(アフィンAMVR)モードに基づくことを判定することと、この判定に基づいて、この変換を行うことと、を含み、現在の映像ブロックのコーディング表現が、コンテキストに基づくコーディングに基づいており、変数が、コンテキストのための2つの確率更新速度を制御する、映像処理方法。
【0438】
14. 前記2つの確率更新速度は、(shiftIdx>>2)+2で定義されるより速い更新速度を含み、shiftIdxは変数を示す、第13項に記載の方法。
【0439】
15. 2つの確率更新速度は、(shiftIdx&3)+3+shift0で定義されるより遅い更新速度と、(shiftIdx>>2)+2で定義されるshift0と、変数を示すshiftIdxとを含む、第13項記載の方法。
【0440】
16. より速い更新速度は、2と5との間である、第14項に記載の方法。
【0441】
17. 映像処理方法であって、映像の現在の映像ブロックと現在の映像ブロックのコーディング表現との間での変換は、アフィンAMVRモードに基づくことを判定し、この判定に基づいて、この変換を行うことと、を含み、現在の映像ブロックのコーディング表現が、コンテキストに基づくコーディングに基づいており、現在の映像ブロックのコーディングに使用されるコンテキストは、この変換中にアフィンインターモード及び通常インターモードの両方のAMVRモードが使用される近傍のブロックのコーディング情報を使用してモデル化される、方法。
【0442】
18. 近傍のブロックのAMVRモード情報は、コンテキストに基づくコーディングに直接使用される、第17項に記載の方法。
【0443】
19. 通常のインターモードでコーディングされた近傍のブロックのAMVRモード情報は、コンテキストに基づくコーディングのために許可されない、第17項に記載の方法。
【0444】
20. 通常インターモードでコーディングされた近傍のブロックのAMVRモード情報は、直接使用せず、AMVRモード情報の関数とともに間接的に使用する、第17項に記載の方法。
【0445】
21. 近傍のブロックのAMVRモード情報は、前記現在の映像ブロックのアフィンAMVRモードの第1の構文要素をコーディングするために使用される、第17項に記載の方法。
【0446】
22. アフィンAMVRモードが複数の構文要素で表される場合、複数の構文要素のうちのいずれか1つをコーディングするために、アフィンインターモードおよび通常のインターモードの両方でコーディングされた近傍のブロックのAMVRモード情報を使用する、第17項に記載の方法。
【0447】
23. アフィンAMVRモードが複数の構文要素で表される場合、複数の構文要素のうちのいずれか1つをコーディングするために、通常のインターモードでコーディングされた近傍のブロックのAMVRモード情報を使用しない、第17項に記載の方法。
【0448】
24. アフィンAMVRモードが複数の構文要素で表される場合、複数の構文要素のうちのいずれか1つをコーディングするために、通常のインターモードでコーディングされた近傍のブロックのAMVRモード情報を直接的に使用されるのではなく、間接的に使用される、第17項に記載の方法。
【0449】
25. この方法は、映像の現在の映像ブロックと現在の映像ブロックのコーディング表現との間での変換のために、この変換のための複数のコンテキストの使用を判定することと、この判定に基づいてこの変換を行うことと、を含み、この複数のコンテキストは、粗い動きの精度を示す構文要素をコーディングするために使用される、映像処理方法。
【0450】
26. 複数のコンテキストは、正確に2つのコンテキストに対応する、第25項に記載の方法。
【0451】
27. 現在の映像ブロックがアフィンコーディングされているかどうかに基づいて、複数のコンテキストが選択される、第26項に記載の方法。
【0452】
28. 別の構文要素は、この変換がアフィンAMVRモードに基づくものであることを示すために使用される、第25項に記載の方法。
【0453】
29. 前記別の構文要素は第1のコンテキストのみでコーディングされ、前記構文要素は第2のコンテキストのみでコーディングされる、第28項に記載の方法。
【0454】
30. 前記別の構文要素は、第1のコンテキストのみでコーディングされ、前記構文要素はバイパスコーディングされる、第28項に記載の方法。
【0455】
31. 前記別の構文要素はバイパスコーディングされ、前記構文要素はバイパスコーディングされる、第28項に記載の方法。
【0456】
32. 動きベクトル精度に関連するすべての構文要素がバイパスコーディングされる、第25項に記載の方法。
【0457】
33. 前記構文要素は、通常のインターモードのための1画素または4画素の精度を含む集合からの選択を示す、第25項または第26項に記載の方法。
【0458】
34. 前記構文要素は、前記アフィンモードにおいて、少なくとも1/16画素または1画素の精度から選択されることを示す、第25項または第26項に記載の方法。
【0459】
35. 前記構文要素は、前記アフィンモードにおいて、0、1/6画素の精度に等しい、第34項に記載の方法。
【0460】
36. 前記構文要素は、前記アフィンモードにおいて、1、1画素の精度に等しい、第34項に記載の方法。
【0461】
37. 前記変換を実行することは、現在の映像ブロックから前記コーディング表現を生成することを含む、第1項~第36項のいずれかに記載の方法。
【0462】
38. 前記変換を実行することは、前記コーディング表現から前記現在の映像ブロックを生成することを含む、第1項~第36項のいずれかに記載の方法。
【0463】
39. 処理装置と、その処理装置に命令が記憶された非一時的メモリとを備える装置であって、命令が処理装置によって実装されることにより、処理装置に、第1項~第36項のいずれか1項に記載の方法を実施させる映像システムの装置。
【0464】
40. 第1項~第38項のいずれか1項に記載の方法を実行するためのプログラムコードを含む、非一時的なコンピュータ可読媒体に記憶されたコンピュータプログラム製品。
【0465】
第2の組の項は、例えば、前章の第19項~第21項および第23項に含まれる、前章に記載されたいくつかの技術を使用する。
【0466】
1. 映像処理方法であって、映像の現在の映像ブロックと前記現在の映像ブロックのコーディング表現との間での変換のために、現在選択されている前記変換のための最良のモードに基づいて対称動きベクトル差(SMVD)モードを使用するかどうかを判定し、前記判定することに基づいて前記変換を行うことを含む、方法。
【0467】
2. 前記SMVDモードは、少なくとも1つの参照インデックスの参照リストを明確に信号通知することなく使用される、第1項に記載の方法。
【0468】
3. 前記参照インデックスは、再帰的ピクチャオーダカウント(POC)計算に基づいて導出される、第2項に記載の方法。
【0469】
4. 前記判定することは、前記現在選択されている最良のモードがマージモードまたはUMVEモードである場合、前記SMVDモードの使用を無効にする、第1項に記載の方法。
【0470】
5. 前記UMVEモードは、動きベクトルオフセットを適用して、マージ候補リストから導出された動き候補を改良する、第4項に記載の方法。
【0471】
6. 前記現在選択されている最良のモードが前記SMVDモードでコーディングされていない場合、前記判定することは、前記SMVDモードの前記使用を無効にする、第1項に記載の方法。
【0472】
7. 前記現在選択されている最良のモードがアフィンモードである場合、前記判定することは、前記SMVDモードの前記使用を無効にする、第1項に記載の方法。
【0473】
8. 前記現在選択されている最良のモードがサブブロックマージモードである場合、前記判定することは、前記SMVDモードの前記使用を無効にする、第1項に記載の方法。
【0474】
9. 前記現在選択されている最良のモードがアフィンSMVDモードである場合、前記判定することは、前記SMVDモードの前記使用を無効にする、第1項に記載の方法。
【0475】
10. 前記現在選択されている最良のモードがアフィンマージモードである場合、前記判定は、前記SMVDモードの前記使用を無効にする、第1項に記載の方法。
【0476】
11. 前記判定することは、MVD(動きベクトルの差)精度が精度以上である場合にのみ適用される、第2項~第10項のいずれか1項に記載の方法。
【0477】
12. 前記判定することは、MVD精度が精度よりも大きい場合にのみ適用される、第2項~第10項のいずれか1項に記載の方法。
【0478】
13. 前記判定することは、MVD精度が精度以下である場合にのみ適用される、第2項~第10項のいずれか1項に記載の方法。
【0479】
14. 前記判定することは、MVD精度が精度より小さい場合にのみ適用される、第2項~第10項のいずれか1項に記載の方法。
【0480】
15. 映像処理方法であって、映像の前記現在の映像ブロックと現在の映像ブロックのコーディング表現との間での変換のために、現在選択されている前記変換のための最良のモードに基づいてアフィンSMVDモードを使用するかどうかを判定し、この前記判定することに基づいて前記変換を行うこと、を含む、方法。
【0481】
16. 前記判定することは、現在選択されている最良のモードがマージモードまたはUMVEモードである場合、前記アフィンSMVDモードの前記使用を無効にする、第15項に記載の方法。
【0482】
17. 前記現在選択されている最良のモードが前記アフィンSMVDモードでコーディングされていない場合、前記判定することは、前記アフィンSMVDモードの前記使用を無効にする、第15項に記載の方法。
【0483】
18. 前記現在選択されている最良のモードがサブブロックマージモードである場合、前記判定することは、前記前記アフィンSMVDモードの前記使用を無効にする、第15項に記載の方法。
【0484】
19. 前記現在選択されている最良のモードがSMVDモードである場合、前記判定することは、前記アフィンSMVDモードの前記使用を無効にする、第15項に記載の方法。
【0485】
20. 前記現在選択されている最良のモードがアフィンマージモードである場合、前記判定することは、前記アフィンSMVDモードの前記使用を無効にする、第15項に記載の方法。
【0486】
21. 前記判定することは、アフィンMVD精度が精度以上である場合にのみ適用される、第16項~第20項のいずれか1項に記載の方法。
【0487】
22. 前記判定することは、アフィンMVD精度が精度よりも大きい場合にのみ適用される、第16項~第20項のいずれか1項に記載の方法。
【0488】
23. 前記判定することは、アフィンMVD精度が精度以下である場合にのみ適用される、第16項~第20項のいずれか1項に記載の方法。
【0489】
24. 前記判定することは、アフィンMVD精度が精度より小さい場合にのみ適用される、第16項~第20項のいずれか1項に記載の方法。
【0490】
25. 前記現在の映像ブロックの特徴を判定する方法であって、さらに前記現在の映像ブロックの特徴を判定することを含み、前記特徴は、前記映像ブロックのブロックサイズ、前記映像ブロックのスライスまたはピクチャまたはタイルタイプ、または前記映像ブロックに関連する動き情報のうちの1つ以上を含み、且つ前記判定することはまた前記特徴に基づいていることを更に含む、第1項または第15項に記載の方法。
【0491】
26. 前記変換を行うことは、現在のブロックから前記コーディング表現を生成するステップを含む、第1項~第25項のいずれかに記載の方法。
【0492】
27. 前記変換を行うことは、前記コーディング表現から前記現在のブロックを生成することを含む、第1項~第25項のいずれかに記載の方法。
【0493】
28. 処理装置と、その処理装置に命令が記憶された非一時的メモリとを備える装置であって、命令が処理装置によって実装されることにより、処理装置に、第1項~第27項のいずれか1項に記載の方法を実施させる映像システムの装置。
【0494】
29. 非一時的なコンピュータ可読媒体に記憶されたコンピュータプログラム製品であって、第1項~第27項のいずれか1項に記載の方法を実行するためのプログラムコードを含む、コンピュータプログラム製品。
【0495】
以上、説明の目的で本開示の技術の特定の実施形態を説明したが、本発明の範囲から逸脱することなく様々な修正が可能であることは、理解されるであろう。従って、本開示の技術は、添付の特許請求の範囲による場合を除き、限定されない。
【0496】
本特許明細書に記載された主題および機能操作の実装形態は、本明細書に開示された構造およびその構造的等価物を含め、様々なシステム、デジタル電子回路、またはコンピュータソフトウェア、ファームウェア、若しくはハードウェアで実施されてもよく、またはそれらの1つ以上の組み合わせで実施してもよい。本明細書に記載された主題の実装形態は、1つ以上のコンピュータプログラム製品、すなわち、データ処理装置によって実行されるため、又はデータ処理装置の操作を制御するために、有形で非可搬性のコンピュータ可読媒体上に符号化されたコンピュータプログラム命令の1つ以上のモジュールとして実装することができる。このコンピュータ可読媒体は、機械可読記憶装置、機械可読記憶基板、メモリデバイス、機械可読伝播信号をもたらす物質の組成物、又はこれらの1つ以上の組み合わせであってもよい。「データ処理ユニット」又は「データ処理装置」という用語は、例えば、プログラマブル処理装置、コンピュータ、又は複数の処理装置若しくはコンピュータを含め、データを処理するためのすべての装置、デバイス、および機械を含む。この装置は、ハードウェアの他に、当該コンピュータプログラムの実行環境を作るコード、例えば、処理装置ファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、又はこれらの1つ以上の組み合わせを構成するコードを含むことができる。
【0497】
コンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、スクリプト、又はコードとも呼ばれる)は、コンパイルされた言語又は解釈された言語を含む任意の形式のプログラミング言語で記述することができ、また、それは、スタンドアロンプログラムとして、又はコンピューティング環境で使用するのに適したモジュール、コンポーネント、サブルーチン、又は他のユニットとして含む任意の形式で展開することができる。コンピュータプログラムは、必ずしもファイルシステムにおけるファイルに対応するとは限らない。プログラムは、他のプログラム又はデータを保持するファイルの一部(例えば、マークアップ言語文書に格納された1つ以上のスクリプト)に記録されていてもよいし、当該プログラム専用の単一のファイルに記憶されていてもよいし、複数の調整ファイル(例えば、1つ以上のモジュール、サブプログラム、又はコードの一部を格納するファイル)に記憶されていてもよい。1つのコンピュータプログラムを、1つのサイトに位置する1つのコンピュータ、又は複数のサイトに分散され通信ネットワークによって相互接続される複数のコンピュータで実行させるように展開することも可能である。
【0498】
本明細書に記載された処理およびロジックフローは、入力データ上で動作し、出力を生成することによって機能を実行するための1つ以上のコンピュータプログラムを実行する1つ以上のプログラマブル処理装置によって行うことができる。処理及びロジックフローはまた、特定用途のロジック回路、例えば、FPGA(フィールドプログラマブルゲートアレイ)又はASIC(特定用途向け集積回路)によって行うことができ、装置はまた、特別目的のロジック回路として実装することができる。
【0499】
コンピュータプログラムの実行に適した処理装置は、例えば、汎用及び専用マイクロ処理装置の両方、並びに任意の種類のデジタルコンピュータの任意の1つ以上の処理装置を含む。一般的に、処理装置は、読み出し専用メモリ又はランダムアクセスメモリ又はその両方から命令及びデータを受信する。コンピュータの本質的な要素は、命令を行うための処理装置と、命令及びデータを記憶するための1つ以上のメモリデバイスである。一般的に、コンピュータは、データを記憶するための1つ以上の大容量記憶デバイス、例えば、磁気、光磁気ディスク、又は光ディスクを含んでもよく、又はこれらの大容量記憶デバイスからデータを受信するか、又はこれらにデータを転送するように動作可能に結合されてもよい。しかしながら、コンピュータは、このようなデバイスを有する必要はない。コンピュータプログラム命令およびデータを記憶するのに適したコンピュータ可読媒体は、あらゆる形式の不揮発性メモリ、媒体、およびメモリデバイスを含み、例えば、EPROM、EEPROM、フラッシュメモリデバイス等の半導体メモリデバイスを含む。処理装置及びメモリは、特定用途のロジック回路によって補完されてもよく、又は特定用途のロジック回路に組み込まれてもよい。
【0500】
本明細書は、図面とともに、例示のみを目的とするものであり、例示的とは例を意味することが意図される。本明細書において、「または」の使用は、文脈からそうでないことが明確に示されていない限り、「および/または」を含むことが意図される。
【0501】
本特許明細書は多くの詳細を含むが、これらは、任意の発明の範囲又は特許請求の範囲を限定するものと解釈されるべきではなく、むしろ、特定の発明の特定の実施形態に特有であり得る特徴の説明と解釈されるべきである。本特許文献において別個の実施形態の文脈で説明されている特定の特徴は、1つの例において組み合わせて実装してもよい。逆に、1つの例の文脈で説明された様々な特徴は、複数の実施形態において別個に又は任意の適切なサブコンビネーションで実装してもよい。さらに、特徴は、特定の組み合わせで作用するものとして上記に記載され、最初にそのように主張されていてもよいが、主張された組み合わせからの1つ以上の特徴は、場合によっては、組み合わせから抜粋されることができ、主張された組み合わせは、サブコンビネーション又はサブコンビネーションのバリエーションに向けられてもよい。
【0502】
同様に、動作は図面において特定の順番で示されているが、これは、所望の結果を達成するために、このような動作が示された特定の順番で又は連続した順番で実行されること、又は示された全ての操作が実行されることを必要とするものと理解されるべきではない。また、本特許文献に記載されている例における様々なシステムモジュールの分離は、全ての実施形態においてこのような分離を必要とするものと理解されるべきではない。
【0503】
いくつかの実装形態及び例のみが記載されており、この特許文献に記載され図示されている内容に基づいて、他の実施形態、拡張及び変形が可能である。