(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-29
(45)【発行日】2024-12-09
(54)【発明の名称】映像信号の符号化/復号方法およびそのための装置
(51)【国際特許分類】
H04N 19/70 20140101AFI20241202BHJP
【FI】
H04N19/70
【外国語出願】
(21)【出願番号】P 2024001458
(22)【出願日】2024-01-09
(62)【分割の表示】P 2022520686の分割
【原出願日】2020-10-08
【審査請求日】2024-02-08
(31)【優先権主張番号】10-2019-0124956
(32)【優先日】2019-10-09
(33)【優先権主張国・地域又は機関】KR
(31)【優先権主張番号】10-2019-0125745
(32)【優先日】2019-10-11
(33)【優先権主張国・地域又は機関】KR
(73)【特許権者】
【識別番号】503260918
【氏名又は名称】アップル インコーポレイテッド
【氏名又は名称原語表記】Apple Inc.
【住所又は居所原語表記】One Apple Park Way,Cupertino, California 95014, U.S.A.
(74)【代理人】
【識別番号】110003281
【氏名又は名称】弁理士法人大塚国際特許事務所
(72)【発明者】
【氏名】リー, ベ ケウン
【審査官】田中 崇大
(56)【参考文献】
【文献】特表2022-549798(JP,A)
【文献】特表2022-537767(JP,A)
【文献】Miska M. Hannuksela et.al,Versatile Video Coding (Draft 6),Joint Video Experts Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11 16th Meeting: Geneva, CH, 1-11 October 2019, specification text document of JVET-P1024(Version 1),ITU-T,2019年10月09日,pp.40-43
【文献】Jonatan Samuelsson et.al,AHG8/AHG17: On Access Unit Delimiter and Picture Detection [online],Joint Video Experts Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11 16th Meeting: Geneva, CH, 1-11 October 2019,JVET-P0218(Version 1),ITU-T,2019年09月25日,pp.1-5
【文献】Yong He et.al,AHG12: On associating slices with subpictures [online],Joint Video Experts Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11 16th Meeting: Geneva, CH, 1-11 October 2019,JVET-P0130(Version 2),ITU-T,2019年09月30日
(58)【調査した分野】(Int.Cl.,DB名)
H04N 19/00-19/98
(57)【特許請求の範囲】
【請求項1】
映像を復号する方法であって、前記方法は、
ビットストリームから、前記映像の現在ピクチャを取得することであって、前記現在ピクチャは複数のタイルに分割される、ことと、
前記現在ピクチャが四角形状のスライスタイプと関連付けられていると判定することと、
前記ビットストリームから、前記現在ピクチャ内のスライスの個数が1個であるかを示すフラグをパーシングすることであって、前記フラグの値は、
前記現在ピクチャ内のスライスの前記個数が1個であることを示す第1の値、又は
前記現在ピクチャ内のスライスの前記個数が1個より大きいことを示す第2の値、のうちの一方である、ことと、
前記フラグに基づいてスライス構成情報を前記ビットストリームからパーシングするかを判定することであって、スライス構成情報を前記ビットストリームからパーシングするかを判定することは、
前記現在ピクチャ内のスライスの前記個数が1個であると判定したことに応じて、前記ビットストリームから前記スライス構成情報をパーシングすることを差し控えること、又は、
前記現在ピクチャ内のスライスの前記個数が1個より大きいと判定したことに応じて、前記ビットストリームから前記スライス構成情報をパーシングすること、の少なくとも一方を含む、こととを含む方法。
【請求項2】
請求項1に記載の方法であって、
前記フラグに基づいて前記現在ピクチャ内のスライスの前記個数が1より大きいと判定することと、
前記現在ピクチャ内のスライスの前記個数が1個より大きいとの判定したことに応じて、前記ビットストリームから前記スライス構成情報をパーシングすることと、を更に含む方法。
【請求項3】
請求項2に記載の方法であって、前記スライス構成情報は、前記スライスの1つに含まれるタイルのインデックスを示すシンタックスを含む、方法。
【請求項4】
請求項2に記載の方法であって、前記スライス構成情報は、第1のタイルの第1のインデックスと第2のタイルの第2のインデックスとの間の差を示すシンタックスを含み、前記第1のタイルと前記第2のタイルとは、前記スライスの1つに含まれる、方法。
【請求項5】
システムであって
1つ以上のプロセッサと、
命令を格納するメモリとを含み、前記命令は、前記1つ以上のプロセッサによって実行されると前記1つ以上のプロセッサに、
ビットストリームから、映像の現在ピクチャを取得することであって、前記現在ピクチャは複数のタイルに分割される、ことと、
前記現在ピクチャが四角形状のスライスタイプと関連付けられていると判定することと、
前記ビットストリームから、前記現在ピクチャ内のスライスの個数が1個であるかを示すフラグをパーシングすることであって、前記フラグの値は、
前記現在ピクチャ内のスライスの前記個数が1個であることを示す第1の値、又は
前記現在ピクチャ内のスライスの前記個数が1個より大きいことを示す第2の値、のうちの一方である、ことと、
前記フラグに基づいてスライス構成情報を前記ビットストリームからパーシングするかを判定することであって、スライス構成情報を前記ビットストリームからパーシングするかを判定することは、
前記現在ピクチャ内のスライスの前記個数が1個であると判定したことに応じて、前記ビットストリームから前記スライス構成情報をパーシングすることを差し控えること、又は、
前記現在ピクチャ内のスライスの前記個数が1個より大きいと判定したことに応じて、前記ビットストリームから前記スライス構成情報をパーシングすること、の少なくとも一方を含む、こととを含む動作を実行させる、システム。
【請求項6】
請求項5に記載のシステムであって、前記動作は、
前記フラグに基づいて前記現在ピクチャ内のスライスの前記個数が1より大きいと判定することと、
前記現在ピクチャ内のスライスの前記個数が1個より大きいとの判定したことに応じて、前記ビットストリームから前記スライス構成情報をパーシングすることと、を更に含むシステム。
【請求項7】
請求項6に記載のシステムであって、前記スライス構成情報は、前記スライスの1つに含まれるタイルのインデックスを示すシンタックスを含む、システム。
【請求項8】
請求項6に記載のシステムであって、前記スライス構成情報は、第1のタイルの第1のインデックスと第2のタイルの第2のインデックスとの間の差を示すシンタックスを含み、前記第1のタイルと前記第2のタイルとは、前記スライスの1つに含まれる、システム。
【請求項9】
命令を含むコンピュータプログラムであって、前記命令は、1つ以上のプロセッサによって実行されると、前記1つ以上のプロセッサに、
ビットストリームから、映像の現在ピクチャを取得することであって、前記現在ピクチャは複数のタイルに分割される、ことと、
前記現在ピクチャが四角形状のスライスタイプと関連付けられていると判定することと、
前記ビットストリームから、前記現在ピクチャ内のスライスの個数が1個であるかを示すフラグをパーシングすることであって、前記フラグの値は、
前記現在ピクチャ内のスライスの前記個数が1個であることを示す第1の値、及び
前記現在ピクチャ内のスライスの前記個数が1個より大きいことを示す第2の値、のうちの一方である、ことと、
前記フラグに基づいてスライス構成情報を前記ビットストリームからパーシングするかを判定することであって、スライス構成情報を前記ビットストリームからパーシングするかを判定することは、
前記現在ピクチャ内のスライスの前記個数が1個であると判定したことに応じて、前記ビットストリームから前記スライス構成情報をパーシングすることを差し控えること、又は、
前記現在ピクチャ内のスライスの前記個数が1個より大きいと判定したことに応じて、前記ビットストリームから前記スライス構成情報をパーシングすること、の少なくとも一方を含む、こととを含む動作を実行させる、コンピュータプログラム。
【請求項10】
請求項9に記載のコンピュータプログラムであって、前記動作は、
前記フラグに基づいて前記現在ピクチャ内のスライスの前記個数が1より大きいと判定することと、
前記現在ピクチャ内のスライスの前記個数が1個より大きいとの判定したことに応じて、前記ビットストリームから前記スライス構成情報をパーシングすることと、を更に含むコンピュータプログラム。
【請求項11】
請求項10に記載のコンピュータプログラムであって、前記スライス構成情報は、前記スライスの1つに含まれるタイルのインデックスを示すシンタックスを含む、コンピュータプログラム。
【請求項12】
請求項10に記載のコンピュータプログラムであって、前記スライス構成情報は、第1のタイルの第1のインデックスと第2のタイルの第2のインデックスとの間の差を示すシンタックスを含み、前記第1のタイルと前記第2のタイルとは、前記スライスの1つに含まれる、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、映像信号の符号化/復号方法およびそのための装置に関する。
【背景技術】
【0002】
ディスプレイパネルが次第に大型化する傾向に伴い、次第により高い画質のビデオサービスが求められている。高画質ビデオサービスの最大の問題は、データ量が大きく増加することであり、このような問題を解決するために、ビデオ圧縮率を向上させるための研究が活発に行われている。代表的な例として、2009年に、MPEG(Motion Picture Experts Group)とITU-T(International Telecommunication Union-Telecommunication)傘下のVCEG(Video Coding Experts Group)では、JCT-VC(Joint Collaborative Team on Video Coding)を結成した。JCT-VCは、H.264/AVCに比べて約2倍の圧縮性能を有するビデオ圧縮標準であるHEVC(High Efficiency Video Coding)を提案し、2013年1月25日付で標準として承認された。高画質ビデオサービスの急激な発展に伴い、HEVCの性能も次第にその限界を示している。
【発明の概要】
【発明が解決しようとする課題】
【0003】
本発明は、ビデオ信号を符号化/復号するに際し、ピクチャを複数のタイルまたは複数のスライスに分割する方法および方法を行うための装置を提供することを目的とする。
【0004】
本発明は、ピクチャを複数のタイルに分割するに際し、タイルインデックスに基づいてスライスを区切る方法および方法を行うための装置を提供することを目的とする。
【0005】
本発明は、ピクチャを複数のスライスに分割するに際し、前のスライスとの差分情報に基づいてスライスを区切る方法および方法を行うための装置を提供することを目的とする。
【0006】
本発明が解決しようとする技術的課題は、以上で言及した技術的課題に制限されず、言及していない他の技術的課題は、以下の記載から、本発明が属する技術分野において通常の知識を有する者が明確に理解することができる。
【課題を解決するための手段】
【0007】
本発明によるビデオ信号の復号方法は、現在ピクチャを複数のタイルに分割することと、スライスタイプを示す分割情報であって、分割情報は、四角形状のスライスを適用するか否かを示す、分割情報を復号することと、分割情報が四角形状のスライスが適用されることを示す場合、スライスの第1幅情報および第1高さ情報を復号することと、を含む。ここで、第1幅情報が1個のタイル列を示し、第1高さ情報が1個のタイル行を示す場合、スライスが含まれたタイルの高さに基づいて、個数情報がパーシングされるか否かが判定される場合がある。
【0008】
本発明によるビデオ信号の符号化方法は、現在ピクチャを複数のタイルに分割することと、四角形状のスライスを適用するか否かを判定することと、四角形状のスライスが適用される場合、スライスの第1幅情報および第1高さ情報を符号化することと、を含むことができる。ここで、第1幅情報が1個のタイル列を示し、第1高さ情報が1個のタイル行を示す場合、スライスが含まれたタイルの高さに基づいて、個数情報が符号化されるか否かが判定される場合がある。
【0009】
本発明によるビデオ信号の復号方法において、タイルが一つのコーディングツリーユニット行で構成された場合、個数情報のパーシングが省略される場合がある。
【0010】
本発明によるビデオ信号の復号方法において、タイルが複数のコーディングツリーユニット行で構成された場合、個数情報がパーシングされ、個数情報は、スライス高さ情報が明示的にシグナリングされる必要があるスライスの個数を示すことができる。
【0011】
本発明によるビデオ信号の復号方法において、タイルに含まれた少なくとも一つのスライスのうち個数情報が示す個数よりインデックスが小さい第1スライスに対しては、第2高さ情報がパーシングされる場合がある。
【0012】
本発明によるビデオ信号の復号方法において、個数情報が示す個数がインデックス以上である第2スライスに対しては、第2高さ情報がパーシングされない場合がある。
【0013】
本発明によるビデオ信号の復号方法において、第2スライスの高さは、最後に第2高さ情報がパーシングされた第3スライスの高さまたはタイル内の残りの高さのうち小さい値に設定される場合がある。
【0014】
本発明について上記で簡単にまとめた特徴は、後述する本発明の詳細な説明の例示的な様相であって、本発明の範囲を制限するものではない。
【発明の効果】
【0015】
本発明によると、ピクチャを複数のタイルまたはスライスに分割することで、符号化/復号効率を向上させることができる。
【0016】
本発明によると、タイルインデックスに基づいてスライスを区切ることで、符号化/復号効率を向上させることができる。
【0017】
本発明によると、前のスライスとの差分情報に基づいてスライスを区切ることで、符号化/復号効率を向上させることができる。
【0018】
本発明で得られる効果は、以上で言及した効果に制限されず、言及していない他の効果は、以下の記載から、本発明が属する技術分野において通常の知識を有する者が明確に理解することができる。
【図面の簡単な説明】
【0019】
【
図1】本発明の一実施形態による映像符号化器(エンコーダ)のブロック図である。
【0020】
【
図2】本発明の一実施形態による映像復号器(デコーダ)のブロック図である。
【0021】
【
図3】本発明の一実施形態による基本コーディングツリーユニットを図示した図である。
【0022】
【
図4】コーディングブロックの様々な分割形状を示す図である。
【0023】
【
図5】コーディングツリーユニットの分割様相を例示した図である。
【0024】
【
図6】本発明の一実施形態によるインタ予測方法のフローチャートである。
【0025】
【
図7】オブジェクトの非線形動きを例示した図である。
【0026】
【
図8】本発明の一実施形態によるアフィンモーションに基づくインタ予測方法のフローチャートである。
【0027】
【
図9】アフィンモーションモデル別のアフィンシードベクトルを例示した図である。
【0028】
【
図10】4パラメータモーションモデル下で、サブブロックのアフィンベクトルを例示した図である。
【0029】
【
図11】マージモード下で、現在ブロックの動き情報を誘導する過程のフローチャートである。
【0030】
【
図12】マージ候補を誘導するために使用される候補ブロックを例示した図である。
【0031】
【
図13】モーション情報テーブルのアップデート様相を説明するための図である。
【0032】
【
図14】モーション情報テーブルのアップデート様相を示す図である。
【0033】
【
図15】予め格納されたモーション情報候補のインデックスが更新される例を示す図である。
【0034】
【
図16】マージ候補のうち一部に対してのみ重複性検査が行われる例を図示した図である。
【0035】
【
図17】特定のマージ候補との重複性検査が省略される例を示す図である。
【0036】
【
図18】現在ブロックと同一のマージ処理領域に含まれた候補ブロックがマージ候補として利用不可能なものに設定される例を示す図である。
【0037】
【
図19】現在ブロックがマージ処理領域に含まれている場合、現在ブロックに対するマージ候補を誘導する例を示す図である。
【0038】
【
図20】臨時モーション情報テーブルを示す図である。
【0039】
【
図21】モーション情報テーブルと臨時モーション情報テーブルを併合する例を示す図である。
【0040】
【
図22】本発明の一実施形態によるイントラ予測方法のフローチャートである。
【0041】
【0042】
【
図24】参照サンプルを一列に配列する一次元配列の例示を示す図である。
【
図25】参照サンプルを一列に配列する一次元配列の例示を示す図である。
【0043】
【
図26】方向性イントラ予測モードがx軸と平行な直線と形成する角度を例示した図である。
【0044】
【
図27】現在ブロックが非正方形状である場合、予測サンプルが得られる様相を示す図である。
【0045】
【
図28】ワイドアングルイントラ予測モードを示す図である。
【0046】
【
図29】サブブロック別に変換スキップ可否が判定される例を示す図である。
【0047】
【
図30】サブブロックが同一の変換タイプを使用する例を示す図である。
【0048】
【
図31】ブロック強度を判定する過程を示すフローチャートである。
【0049】
【0050】
【
図33】本発明の一実施形態によるピクチャ分割方法を示す図である。
【0051】
【
図34】ピクチャが複数のタイルに分割された例を示す。
【0052】
【
図35】ブリックの生成様相を説明するための図である。
【0053】
【
図36】ラスター順序に基づいてスライスを定義した例を示す図である。
【
図37】ラスター順序に基づいてスライスを定義した例を示す図である。
【0054】
【
図38】四角形状のスライスのみが許容される例を示す図である。
【発明を実施するための形態】
【0055】
以下、図面を参照して、本発明の実施形態について詳細に説明する。
【0056】
映像の符号化および復号は、ブロック単位で行われる。一例として、コーディングブロック、変換ブロック、または予測ブロックに対して、変換、量子化、予測、インループフィルタリング、または復元などの符号化/復号処理が行われる場合がある。
【0057】
以下、符号化/復号の対象であるブロックを「現在ブロック」と称する。一例として、現在ブロックは、現在の符号化/復号処理ステップに応じて、コーディングブロック、変換ブロック、または予測ブロックを示すことができる。
【0058】
なお、本明細書で使用される用語「ユニット」は、特定の符号化/復号プロセスを行うための基本単位を示し、「ブロック」は、所定のサイズのサンプルアレイを示すものと理解し得る。他に断らない限り、「ブロック」と「ユニット」は、同等な意味で使用される場合がある。一例として、後述する実施形態において、コーディングブロックとコーディングユニットは、互いに同等な意味を有するものと理解し得る。
【0059】
図1は、本発明の一実施形態による映像符号化器(エンコーダ)のブロック図である。
【0060】
図1を参照すると、映像符号化装置100は、ピクチャ分割部110と、予測部120、125と、変換部130と、量子化部135と、再整列部160と、エントロピー符号化部165と、逆量子化部140と、逆変換部145と、フィルタ部150と、メモリ155とを含む場合がある。
【0061】
図1に示れている各構成部は、映像符号化装置で互いに異なる特徴的な機能を示すために独立して図示したものであり、各構成部が分離されたハードウェアもしくは一つのソフトウェア構成単位からなることを意味しない。すなわち、各構成部は、説明の便宜上、それぞれの構成部として並べて含むものであって、各構成部のうち少なくとも二つの構成部がまとめられて一つの構成部になるか、一つの構成部が複数個の構成部に分けられて機能を果たすことができ、このような各構成部の統合された実施形態および分離された実施形態も本発明の本質から逸脱しない限り、本発明の権利範囲に含まれる。
【0062】
また、一部の構成要素は、本発明で本質的な機能を果たす必須な構成要素ではなく、単に性能を向上させるための選択的構成要素であり得る。本発明は、単に性能向上のために使用される構成要素以外の本発明の本質を実現するために必須な構成部のみを含んで実現される場合があり、単に性能向上のために使用される選択的構成要素以外の必須構成要素のみを含む構造も本発明の権利範囲に含まれる。
【0063】
ピクチャ分割部110は、入力されたピクチャを少なくとも一つの処理単位に分割することができる。ここで、処理単位は、予測単位(Prediction Unit:PU)であってもよく、変換単位(Transform Unit:TU)であってもよく、符号化単位(Coding Unit:CU)であってもよい。ピクチャ分割部110では、一つのピクチャに対して複数の符号化単位、予測単位および変換単位の組み合わせに分割し、所定の基準(例えば、費用関数)に基づいて、一つの符号化単位、予測単位および変換単位の組み合わせを選択し、ピクチャを符号化することができる。
【0064】
例えば、一つのピクチャは、複数個の符号化単位に分割される場合がある。ピクチャで符号化単位を分割するためには、クワッドツリー構造(Quad Tree Structure)のような再帰的なツリー構造を使用することができ、一つの映像または最大サイズの符号化単位(largest coding unit)をルートとして他の符号化単位に分割される符号化ユニットは、分割された符号化単位の個数だけの子ノードを有して分割される場合がある。所定の制限によってこれ以上分割されない符号化単位は、リーフノードになる。すなわち、一つのコーディングユニットに対して正方形分割のみが可能であると仮定する場合、一つの符号化単位は、最大4個の異なる符号化単位に分割される場合がある。
【0065】
以下、本発明の実施形態では、符号化単位は、符号化を行う単位の意味で使用することもでき、復号を行う単位の意味で使用することもできる。
【0066】
予測単位は、一つの符号化単位内で同じサイズの少なくとも一つの正方形または長方形などの形状を有して分割されたものであってもよく、一つの符号化単位内で分割された予測単位のいずれか一つの予測単位が、他の一つの予測単位と相違する形状および/またはサイズを有するように分割されたものであってもよい。
【0067】
符号化単位に基づいてイントラ予測を行う予測単位を生成する時に、最小符号化単位ではない場合、複数の予測単位N×Nに分割せず、イントラ予測を行うことができる。
【0068】
予測部120、125は、インタ予測を行うインタ予測部120と、イントラ予測を行うイントラ予測部125とを含む場合がある。予測単位に対してインタ予測を使用するかまたはイントラ予測を行うかを判定し、各予測方法による具体的な情報(例えば、イントラ予測モード、モーションベクトル、参照ピクチャなど)を判定することができる。ここで、予測が行われる処理単位と予測方法および具体的な内容が定められる処理単位とは、異なることがある。例えば、予測の方法と予測モードなどは予測単位で判定され、予測の遂行は、変換単位で行われることもできる。生成された予測ブロックと原本ブロックとの残差値(残差ブロック)は、変換部130に入力される場合がある。また、予測のために使用した予測モード情報、モーションベクトル情報などは、残差値とともにエントロピー符号化部165で符号化されて復号器に伝達される場合がある。特定の符号化モードを使用する場合、予測部120、125を介して予測ブロックを生成せず、原本ブロックをそのまま符号化して復号部に伝送することも可能である。
【0069】
インタ予測部120は、現在ピクチャの前のピクチャまたは後のピクチャのうち少なくとも一つのピクチャの情報に基づいて予測単位を予測することもでき、場合によっては、現在ピクチャ内の符号化が完了した一部領域の情報に基づいて予測単位を予測することもできる。インタ予測部120は、参照ピクチャ補間部と、モーション予測部と、動き補償部とを含む場合がある。
【0070】
参照ピクチャ補間部では、メモリ155から参照ピクチャ情報の提供を受け、参照ピクチャで整数画素以下の画素情報を生成することができる。輝度画素の場合、1/4画素単位で整数画素以下の画素情報を生成するために、異なるフィルタ係数を有するDCT基盤の8タップ補間フィルタ(DCT-based Interpolation Filter)が使用される場合がある。色差信号の場合、1/8画素単位で整数画素以下の画素情報を生成するために、異なるフィルタ係数を有するDCT基盤の4タップ補間フィルタ(DCT-based Interpolation Filter)が使用される場合がある。
【0071】
モーション予測部は、参照ピクチャ補間部によって補間された参照ピクチャに基づいてモーション予測を行うことができる。モーションベクトルを算出するための方法として、FBMA(Full search-based Block Matching Algorithm)、TSS(Three Step Search)、NTS(New Three-Step Search Algorithm)などの様々な方法が使用される場合がある。モーションベクトルは、補間された画素に基づいて、1/2または1/4画素単位のモーションベクトル値を有することができる。モーション予測部では、異なるモーション予測方法により現在予測単位を予測することができる。モーション予測方法として、スキップ(Skip)方法、マージ(Merge)方法、AMVP(Advanced Motion Vector Prediction)方法、イントラブロックコピー(Intra Block Copy)方法などの様々な方法が使用される場合がある。
【0072】
イントラ予測部125は、現在ピクチャ内の画素情報である現在ブロック周辺の参照ピクセル情報に基づいて予測単位を生成することができる。現在予測単位の周辺ブロックがインタ予測を行ったブロックであるため、参照ピクセルがインタ予測を行ったピクセルである場合、インタ予測を行ったブロックに含まれる参照ピクセルを周辺のイントラ予測を行ったブロックの参照ピクセル情報の代わりに使用することができる。すなわち、参照ピクセルが可用でない場合、可用でない参照ピクセル情報を可用な参照ピクセルのうち少なくとも一つの参照ピクセルの代わりに使用することができる。
【0073】
イントラ予測で予測モードは、参照ピクセル情報を予測方向に応じて使用する方向性予測モードと、予測を行う時に方向性情報を使用しない非方向性モードを有することができる。輝度情報を予測するためのモードと色差情報を予測するためのモードが相違することができ、色差情報を予測するために、輝度情報を予測するために使用されたイントラ予測モード情報または予測された輝度信号情報を活用することができる。
【0074】
イントラ予測を行う時に、予測単位のサイズと変換単位のサイズが同一である場合、予測単位の左側に存在するピクセル、左上端に存在するピクセル、上端に存在するピクセルに基づいて、予測単位に対するイントラ予測を行うことができる。しかし、イントラ予測を行う時に、予測単位のサイズと変換単位のサイズが相違する場合、変換単位に基づく参照ピクセルを用いてイントラ予測を行うことができる。また、最小符号化単位に対してのみN×N分割を使用するイントラ予測を使用することができる。
【0075】
イントラ予測方法は、予測モードに応じて、参照画素にAIS(Adaptive Intra Smoothing)フィルタを適用した後、予測ブロックを生成することができる。参照画素に適用されるAISフィルタの種類は、相違することができる。イントラ予測方法を行うために、現在予測単位のイントラ予測モードは、現在予測単位の周辺に存在する予測単位のイントラ予測モードから予測することができる。周辺予測単位から予測されたモード情報を用いて現在予測単位の予測モードを予測する場合、現在予測単位と周辺予測単位のイントラ予測モードが同一であると、所定のフラグ情報を用いて、現在予測単位と周辺予測単位の予測モードが同一であるという情報を伝送することができ、仮に、現在予測単位と周辺予測単位の予測モードが相違すると、エントロピー符号化を行って現在ブロックの予測モード情報を符号化することができる。
【0076】
また、予測部120、125で生成された予測単位に基づいて予測を行った予測単位と予測単位の原本ブロックとの差値である残差値(Residual)情報を含む残差ブロックが生成される場合がある。生成された残差ブロックは、変換部130に入力される場合がある。
【0077】
変換部130では、原本ブロックと予測部120、125を介して生成された予測単位の残差値(residual)情報を含む残差ブロックをDCT(Discrete Cosine Transform)またはDST(Discrete Sine Transform)のような変換方法を使用して変換させることができる。ここで、DCT変換コアは、DCT2またはDCT8のうち少なくとも一つを含み、DST変換コアは、DST7を含む。残差ブロックを変換するためにDCTを適用するかまたはDSTを適用するかは、残差ブロックを生成するために使用された予測単位のイントラ予測モード情報に基づいて判定することができる。残差ブロックに対する変換をスキップすることもできる。残差ブロックに対する変換をスキップするか否かを示すフラグを符号化することができる。変換スキップは、サイズが閾値以下である残差ブロック、ルーマ成分または4:4:4のフォーマット下でのクロマ成分に対して許容される場合がある。
【0078】
量子化部135は、変換部130で周波数領域に変換された値を量子化することができる。ブロックによってまたは映像の重要度によって量子化係数は変わることができる。量子化部135で算出された値は、逆量子化部140と再整列部160に提供される場合がある。
【0079】
再整列部160は、量子化した残差値に対して係数値の再整列を行うことができる。
【0080】
再整列部160は、係数スキャニング(Coefficient Scanning)方法により、二次元のブロック形状係数を一次元のベクトル形状に変更することができる。例えば、再整列部160では、ジグザグスキャン(Zig-Zag Scan)方法を用いて、DC係数から高周波数領域の係数までスキャンし、一次元のベクトル形状に変更させることができる。変換単位のサイズおよびイントラ予測モードに応じて、ジグザグスキャンの代わりに、二次元のブロック形状係数を列方向にスキャンする垂直スキャン、二次元のブロック形状係数を行方向にスキャンする水平スキャンが使用されることもできる。すなわち、変換単位のサイズおよびイントラ予測モードに応じて、ジグザグスキャン、垂直方向スキャンおよび水平方向スキャンのいずれかのスキャン方法が使用されるかを判定することができる。
【0081】
エントロピー符号化部165は、再整列部160によって算出された値に基づいてエントロピー符号化を行うことができる。エントロピー符号化は、例えば、指数ゴロム(Exponential Golomb)、CAVLC(Context-Adaptive Variable Length Coding)、CABAC(Context-Adaptive Binary Arithmetic Coding)のような様々な符号化方法を使用することができる。
【0082】
エントロピー符号化部165は、再整列部160および予測部120、125から符号化単位の残差値係数情報およびブロックタイプ情報、予測モード情報、分割単位情報、予測単位情報および伝送単位情報、モーションベクトル情報、参照フレーム情報、ブロックの補間情報、フィルタリング情報など様々な情報を符号化することができる。
【0083】
エントロピー符号化部165では、再整列部160から入力された符号化単位の係数値をエントロピー符号化することができる。
【0084】
逆量子化部140および逆変換部145では、量子化部135で量子化された値を逆量子化し、変換部130で変換された値を逆変換する。逆量子化部140および逆変換部145で生成された残差値(Residual)は、予測部120、125に含まれた動き推定部、動き補償部およびイントラ予測部により予測された予測単位とまとめられて復元ブロック(Reconstructed Block)を生成することができる。
【0085】
フィルタ部150は、デブロッキングフィルタ、オフセット補正部、ALF(Adaptive Loop Filter)のうち少なくとも一つを含む場合がある。
【0086】
デブロッキングフィルタは、復元されたピクチャでブロック間の境界によって生じたブロック歪みを除去することができる。デブロッキングを行うか否かを判定するために、ブロックに含まれたいくつかの列または行に含まれたピクセルに基づいて、現在ブロックにデブロッキングフィルタを適用するか否かを判定することができる。ブロックにデブロッキングフィルタを適用する場合、必要なデブロッキングフィルタリング強度に応じて、強いフィルタ(Strong Filter)または弱いフィルタ(Weak Filter)を適用することができる。また、デブロッキングフィルタを適用するに際し、垂直フィルタリングおよび水平フィルタリングを行う時に、水平方向フィルタリングおよび垂直方向フィルタリングが併行処理されるようにすることができる。
【0087】
オフセット補正部は、デブロッキングを行った映像に対して、ピクセル単位で原本映像とのオフセットを補正することができる。特定のピクチャに対するオフセット補正を行うために、映像に含まれたピクセルを所定の数の領域に区分した後、オフセットを行う領域を判定し、当該領域にオフセットを適用する方法または各ピクセルのエッジ情報を考慮してオフセットを適用する方法を使用することができる。
【0088】
ALF(Adaptive Loop Filtering)は、フィルタリングした復元映像と最初の映像とを比較した値に基づいて行われる場合がある。映像に含まれたピクセルを所定のグループに分けた後、当該グループに適用される一つのフィルタを判定し、グループごとに差別的にフィルタリングを行うことができる。ALFを適用するか否かに関する情報は、輝度信号は符号化単位(Coding Unit、CU)別に伝送される場合があり、それぞれのブロックによって適用されるALFフィルタの形状およびフィルタ係数は、異なることができる。また、適用対象ブロックの特性に関係なく、同一の形状(固定された形状)のALFフィルタが適用されることもできる。
【0089】
メモリ155は、フィルタ部150を介して算出された復元ブロックまたはピクチャを格納することができ、格納された復元ブロックまたはピクチャは、インタ予測を行う時に、予測部120、125に提供される場合がある。
【0090】
図2は、本発明の一実施形態による映像復号器(デコーダ)のブロック図である。
【0091】
図2を参照すると、映像復号器200には、エントロピー復号部210、再整列部215、逆量子化部220、逆変換部225、予測部230、235、フィルタ部240、メモリ245が含まれる場合がある。
【0092】
映像符号化器から映像ビットストリームが入力された場合、入力されたビットストリームは、映像符号化器とは逆の手続きで復号される場合がある。
【0093】
エントロピー復号部210は、映像符号化器のエントロピー符号化部でエントロピー符号化を行ったこととは逆の手続きでエントロピー復号を行うことができる。例えば、映像符号化器で行われた方法に対応して、指数ゴロム(Exponential Golomb)、CAVLC(Context-Adaptive Variable Length Coding)、CABAC(Context-Adaptive Binary Arithmetic Coding)のような様々な方法が適用される場合がある。
【0094】
エントロピー復号部210では、符号化器で行われたイントラ予測およびインタ予測に関する情報を復号することができる。
【0095】
再整列部215は、エントロピー復号部210でエントロピー復号されたビットストリームを符号化部で再整列した方法に基づいて再整列を行うことができる。一次元のベクトル形状で表現された係数をまた二次元のブロック形状の係数に復元して再整列することができる。再整列部215では、符号化部で行われた係数スキャニングに関する情報の提供を受け、当該符号化部で行われたスキャニング順序に基づいて、逆にスキャニングする方法により再整列を行うことができる。
【0096】
逆量子化部220は、符号化器から提供された量子化パラメータと再整列されたブロックの係数値に基づいて逆量子化を行うことができる。
【0097】
逆変換部225は、映像符号化器で行った量子化結果に対して変換部で行った変換、すなわち、DCTまたはDSTに対して逆変換、すなわち、逆DCTまたは逆DSTを行うことができる。ここで、DCT変換コアは、DCT2またはDCT8のうち少なくとも一つを含み、DST変換コアは、DST7を含む場合がある。または、映像符号化器で変換がスキップされた場合、逆変換部225でも逆変換を行わない場合がある。逆変換は、映像符号化器で判定された伝送単位に基づいて行われる場合がある。映像復号器の逆変換部225では、予測方法、現在ブロックのサイズおよび予測方向など複数の情報に応じて、変換技法(例えば、DCTまたはDST)が選択的に行われる場合がある。
【0098】
予測部230、235は、エントロピー復号部210から提供された予測ブロック生成関連情報と、メモリ245から提供された、前に復号されたブロックまたはピクチャ情報とに基づいて予測ブロックを生成することができる。
【0099】
上述のように、映像符号化器での動作と同様にイントラ予測を行う時に、予測単位のサイズと変換単位のサイズが同一である場合、予測単位の左側に存在するピクセル、左上端に存在するピクセル、上端に存在するピクセルに基づいて予測単位に対するイントラ予測を行うが、イントラ予測を行う時に、予測単位のサイズと変換単位のサイズが相違する場合、変換単位に基づく参照ピクセルを用いてイントラ予測を行うことができる。また、最小符号化単位に対してのみN×N分割を使用するイントラ予測を使用することもできる。
【0100】
予測部230、235は、予測単位判別部、インタ予測部およびイントラ予測部を含む場合がある。予測単位判別部は、エントロピー復号部210から入力される予測単位情報、イントラ予測方法の予測モード情報、インタ予測方法のモーション予測関連情報など、様々な情報の入力を受けて現在の符号化単位から予測単位を区分し、予測単位がインタ予測を行うか、それともイントラ予測を行うかを判別することができる。インタ予測部230は、映像符号化器から提供された現在予測単位のインタ予測に必要な情報を用いて、現在予測単位が含まれた現在ピクチャの前のピクチャまたは後のピクチャのうち少なくとも一つのピクチャに含まれた情報に基づいて、現在予測単位に対するインタ予測を行うことができる。または、現在予測単位が含まれた現在ピクチャ内で予め復元された一部領域の情報に基づいてインタ予測を行うこともできる。
【0101】
インタ予測を行うために、符号化単位を基準に当該符号化単位に含まれた予測単位のモーション予測方法が、スキップモード(Skip Mode)、マージモード(Merge Mode)、モーションベクトル予測モード(AMVP Mode)、イントラブロックコピーモードのいずれかの方法であるかを判定することができる。
【0102】
イントラ予測部235は、現在ピクチャ内の画素情報に基づいて予測ブロックを生成することができる。予測単位がイントラ予測を行った予測単位である場合、映像符号化器から提供された予測単位のイントラ予測モード情報に基づいてイントラ予測を行うことができる。イントラ予測部235は、AIS(Adaptive Intra Smoothing)フィルタ、参照画素補間部、DCフィルタを含む場合がある。AISフィルタは、現在ブロックの参照画素にフィルタリングを行う部分として、現在予測単位の予測モードによってフィルタを適用するか否かを判定し、適用することができる。映像符号化器から提供された予測単位の予測モードおよびAISフィルタ情報を用いて、現在ブロックの参照画素に対してAISフィルタリングを行うことができる。現在ブロックの予測モードがAISフィルタリングを行わないモードである場合、AISフィルタは適用されない場合がある。
【0103】
参照画素補間部は、予測単位の予測モードが参照画素を補間した画素値に基づいてイントラ予測を行う予測単位である場合、参照画素を補間して整数値以下の画素単位の参照画素を生成することができる。現在予測単位の予測モードが参照画素を補間せず予測ブロックを生成する予測モードである場合、参照画素は、補間されない場合がある。DCフィルタは、現在ブロックの予測モードがDCモードである場合、フィルタリングにより予測ブロックを生成することができる。
【0104】
復元されたブロックまたはピクチャは、フィルタ部240に提供される場合がある。フィルタ部240は、デブロッキングフィルタと、オフセット補正部と、ALFとを含む場合がある。
【0105】
映像符号化器から当該ブロックまたはピクチャにデブロッキングフィルタを適用しているか否かに関する情報およびデブロッキングフィルタを適用した場合、強いフィルタを適用しているかまたは弱いフィルタを適用しているかに関する情報の提供を受けることができる。映像復号器のデブロッキングフィルタでは、映像符号化器から提供されたデブロッキングフィルタ関連情報の提供を受け、映像復号器で当該ブロックに対するデブロッキングフィルタリングを行うことができる。
【0106】
オフセット補正部は、符号化時に映像に適用されたオフセット補正の種類およびオフセット値の情報などに基づいて復元された映像にオフセット補正を行うことができる。
【0107】
ALFは、符号化器から提供されたALF適用可否情報、ALF係数情報などに基づいて符号化単位に適用される場合がある。このようなALF情報は、特定のパラメータセットに含まれて提供される場合がある。
【0108】
メモリ245は、復元されたピクチャまたはブロックを格納して、参照ピクチャまたは参照ブロックとして使用可能にすることができ、また、復元されたピクチャを出力部に提供することができる。
【0109】
【0110】
図3は、本発明の一実施形態による基本コーディングツリーユニットを図示した図である。
【0111】
最大サイズのコーディングブロックをコーディングツリーブロックと定義することができる。一つのピクチャは、複数個のコーディングツリーユニット(Coding Tree Unit、CTU)に分割される。コーディングツリーユニットは、最大サイズのコーディングユニットであり、LCU(Largest Coding Unit)と称することもできる。
図3は、一つのピクチャが複数個のコーディングツリーユニットに分割された例を示す図である。
【0112】
コーディングツリーユニットのサイズは、ピクチャレベルまたはシーケンスレベルで定義される場合がある。このために、コーディングツリーユニットのサイズを示す情報が、ピクチャパラメータセットまたはシーケンスパラメータセットを介してシグナリングされる場合がある。
【0113】
一例として、シーケンス内の全体ピクチャに対するコーディングツリーユニットのサイズが128×128に設定される場合がある。または、ピクチャレベルで、128×128または256×256のいずれか一つをコーディングツリーユニットのサイズに判定することができる。一例として、第1ピクチャでは、コーディングツリーユニットのサイズが128×128に設定され、第2ピクチャでは、コーディングツリーユニットのサイズが256×256に設定される場合がある。
【0114】
コーディングツリーユニットを分割して、コーディングブロックを生成することができる。コーディングブロックは、符号化/復号処理のための基本単位を示す。一例として、コーディングブロック別に予測または変換が行われるか、コーディングブロック別に予測符号化モードが判定される場合がある。ここで、予測符号化モードは、予測映像を生成する方法を示す。一例として、予測符号化モードは、画面内予測(Intra Prediction、イントラ予測)、画面間予測(Inter Prediction、インタ予測)、現在ピクチャ参照(Current Picture Referencing、CPR、またはイントラブロックコピー(Intra Block Copy、IBC))または複合予測(Combined Prediction)を含む場合がある。コーディングブロックに対して、イントラ予測、インタ予測、現在ピクチャ参照または複合予測のうち少なくとも一つの予測符号化モードを用いて、コーディングブロックに対する予測ブロックを生成することができる。
【0115】
現在ブロックの予測符号化モードを示す情報がビットストリームを介してシグナリングされる場合がある。一例として、情報は、予測符号化モードがイントラモードであるかまたはインタモードであるかを示す1ビットフラグであることができる。現在ブロックの予測符号化モードがインタモードに判定された場合に限って、現在ピクチャ参照または複合予測が利用可能である。
【0116】
現在ピクチャ参照は、現在ピクチャを参照ピクチャに設定し、現在ピクチャ内の既に符号化/復号が完了した領域から現在ブロックの予測ブロックを得るためのものである。ここで、現在ピクチャは、現在ブロックを含むピクチャを意味する。現在ブロックに現在ピクチャ参照が適用されるか否かを示す情報がビットストリームを介してシグナリングされる場合がある。一例として、情報は、1ビットのフラグであることができる。フラグが真の場合、現在ブロックの予測符号化モードは現在ピクチャ参照として判定され、フラグが偽の場合、現在ブロックの予測モードはインタ予測として判定される場合がある。
【0117】
または、参照ピクチャインデックスに基づいて、現在ブロックの予測符号化モードが判定される場合がある。一例として、参照ピクチャインデックスが現在ピクチャを示す場合、現在ブロックの予測符号化モードは、現在ピクチャ参照として判定される場合がある。参照ピクチャインデックスが現在ピクチャではない他のピクチャを示す場合、現在ブロックの予測符号化モードは、インタ予測として判定される場合がある。すなわち、現在ピクチャ参照は、現在ピクチャ内の符号化/復号が完了した領域の情報を用いた予測方法であり、インタ予測は、符号化/復号が完了した他のピクチャの情報を用いた予測方法である。
【0118】
複合予測は、イントラ予測、インタ予測および現在ピクチャ参照のうち二つ以上を組み合わせた符号化モードを示す。一例として、複合予測が適用される場合、イントラ予測、インタ予測または現在ピクチャ参照のいずれか一つに基づいて第1予測ブロックが生成され、他の一つに基づいて第2予測ブロックが生成される場合がある。第1予測ブロックおよび第2予測ブロックが生成されると、第1予測ブロックおよび第2予測ブロックの平均演算または加重和演算により最終予測ブロックが生成される場合がある。複合予測が適用されるか否かを示す情報がビットストリームを介してシグナリングされる場合がある。情報は、1ビットのフラグであることができる。
【0119】
図4は、コーディングブロックの様々な分割形状を示す図である。
【0120】
コーディングブロックは、クワッドツリー分割、バイナリツリー分割またはトリプルツリー分割に基づいて複数のコーディングブロックに分割される場合がある。分割されたコーディングブロックもまたクワッドツリー分割、バイナリツリー分割またはトリプルツリー分割に基づいて、また複数のコーディングブロックに分割される場合がある。
【0121】
クワッドツリー分割は、現在ブロックを四つのブロックに分割する分割技法を示す。クワッドツリー分割の結果、現在ブロックは、4個の正方形状パーティションに分割される場合がある(
図4の(a)「SPLIT_QT」参照)。
【0122】
バイナリツリー分割は、現在ブロックを二つのブロックに分割する分割技法を示す。垂直方向に沿って(すなわち、現在ブロックを横切る垂直線を利用)現在ブロックを二つのブロックに分割することを垂直方向バイナリツリー分割と称することができ、水平方向に沿って(すなわち、現在ブロックを横切る水平線を利用)現在ブロックを二つのブロックに分割することを水平方向バイナリツリー分割と称することができる。バイナリツリー分割の結果、現在ブロックは、2個の非正方形状パーティションに分割される場合がある。
図4の(b)「SPLIT_BT_VER」は、垂直方向バイナリツリー分割の結果を示すものでり、
図4の(c)「SPLIT_BT_HOR」は、水平方向バイナリツリー分割の結果を示すものである。
【0123】
トリプルツリー分割は、現在ブロックを三つのブロックに分割する分割技法を示す。垂直方向に沿って(すなわち、現在ブロックを横切る二つの垂直線を利用)現在ブロックを三つのブロックに分割することを垂直方向トリプルツリー分割と称することができ、水平方向に沿って(すなわち、現在ブロックを横切る二つの水平線を利用)現在ブロックを三つのブロックに分割することを水平方向トリプルツリー分割と称することができる。トリプルツリー分割の結果、現在ブロックは、3個の非正方形状パーティションに分割される場合がある。ここで、現在ブロックの中央に位置するパーティションの幅/高さは、他のパーティションの幅/高さに対して2倍であることができる。
図4の(d)「SPLIT_TT_VER」は、垂直方向トリプルツリー分割の結果を示すものであり、
図4の(e)「SPLIT_TT_HOR」は、水平方向トリプルツリー分割の結果を示すものである。
【0124】
コーディングツリーユニットの分割回数を分割深さ(Partitioning Depth)と定義することができる。シーケンスまたはピクチャレベルでコーディングツリーユニットの最大分割深さが判定される場合がある。これにより、シーケンスまたはピクチャ別にコーディングツリーユニットの最大分割深さが相違することができる。
【0125】
または、分割技法それぞれに対する最大分割深さを個別に判定することができる。一例として、クワッドツリー分割が許容される最大分割深さは、バイナリツリー分割および/またはトリプルツリー分割が許容される最大分割深さと相違することができる。
【0126】
符号化器は、現在ブロックの分割形状または分割深さのうち少なくとも一つを示す情報をビットストリームを介してシグナリングすることができる。復号器は、ビットストリームからパーシングされる情報に基づいて、コーディングツリーユニットの分割形状および分割深さを判定することができる。
【0127】
図5は、コーディングツリーユニットの分割様相を例示した図である。
【0128】
クワッドツリー分割、バイナリツリー分割および/またはトリプルツリー分割などの分割技法を用いてコーディングブロックを分割することをマルチツリー分割(Multi Tree Partitioning)と称することができる。
【0129】
コーディングブロックにマルチツリー分割を適用して生成されるコーディングブロックを下位コーディングブロックと称することができる。コーディングブロックの分割深さがkである場合、下位コーディングブロックの分割深さは、k+1に設定される。
【0130】
逆に、分割深さがk+1であるコーディングブロックに対して、分割深さがkであるコーディングブロックを上位コーディングブロックと称することができる。
【0131】
現在コーディングブロックの分割タイプは、上位コーディングブロックの分割形状または近隣コーディングブロックの分割タイプのうち少なくとも一つに基づいて判定される場合がある。ここで、近隣コーディングブロックは、現在コーディングブロックに隣接するものであり、現在コーディングブロックの上端近隣ブロック、左側近隣ブロック、または左上端コーナに隣接する近隣ブロックのうち少なくとも一つを含む場合がある。ここで、分割タイプは、クワッドツリー分割可否、バイナリツリー分割可否、バイナリツリー分割方向、トリプルツリー分割可否、またはトリプルツリー分割方向のうち少なくとも一つを含む場合がある。
【0132】
コーディングブロックの分割形状を判定するために、コーディングブロックが分割されるか否かを示す情報がビットストリームを介してシグナリングされる場合がある。情報は、1ビットのフラグ「split_cu_flag」であり、フラグが真であることは、マージツリー分割技法によってコーディングブロックが分割されることを示す。
【0133】
split_cu_flagが真の場合、コーディングブロックがクワッドツリー分割されるか否かを示す情報がビットストリームを介してシグナリングされる場合がある。情報は、1ビットのフラグsplit_qt_flagであり、フラグが真の場合、コーディングブロックは、四つのブロックに分割される場合がある。
【0134】
一例として、
図5に図示されている例では、コーディングツリーユニットがクワッドツリー分割されることで、分割深さが1である4個のコーディングブロックが生成されるものと図示されている。また、クワッドツリー分割の結果として生成された4個のコーディングブロックのうち最初のコーディングブロックおよび四番目のコーディングブロックにまたクワッドツリー分割が適用されたものと図示されている。結果、分割深さが2である4個のコーディングブロックが生成される場合がある。
【0135】
また、分割深さが2であるコーディングブロックにまたクワッドツリー分割を適用することで、分割深さが3であるコーディングブロックを生成することができる。
【0136】
コーディングブロックにクワッドツリー分割が適用されない場合、コーディングブロックのサイズ、コーディングブロックがピクチャ境界に位置するか否か、最大分割深さまたは近隣ブロックの分割形状のうち少なくとも一つを考慮して、コーディングブロックにバイナリツリー分割またはトリプルツリー分割を行うか否かを判定することができる。コーディングブロックにバイナリツリー分割またはトリプルツリー分割が行われるものと判定された場合、分割方向を示す情報がビットストリームを介してシグナリングされる場合がある。情報は、1ビットのフラグmtt_split_cu_vertical_flagであることができる。フラグに基づいて、分割方向が垂直方向であるかまたは水平方向であるかが判定される場合がある。さらに、バイナリツリー分割またはトリプルツリー分割のいずれかがコーディングブロックに適用されるかを示す情報がビットストリームを介してシグナリングされる場合がある。情報は、1ビットのフラグmtt_split_cu_binary_flagであることができる。フラグに基づいて、コーディングブロックにバイナリツリー分割が適用されるかまたはトリプルツリー分割が適用されるかが判定される場合がある。
【0137】
一例として、
図5に図示されている例では、分割深さ1のコーディングブロックに垂直方向バイナリツリー分割が適用され、分割の結果として生成されたコーディングブロックのうち左側コーディングブロックには、垂直方向トリプルツリー分割が適用され、右側コーディングブロックには、垂直方向バイナリツリー分割が適用されたものと図示されている。
【0138】
【0139】
インタ予測は、前のピクチャの情報を用いて、現在ブロックを予測する予測符号化モードである。一例として、前のピクチャ内の現在ブロックと同一の位置のブロック(以下、コロケーテッドブロック、Collocated block)を現在ブロックの予測ブロックに設定することができる。以下、現在ブロックと同一の位置のブロックに基づいて生成された予測ブロックをコロケーテッド予測ブロック(Collocated Prediction Block)と称する。
【0140】
一方、前のピクチャに存在したオブジェクトが現在ピクチャでは他の位置に移動したとすると、オブジェクトの動きを用いて、効果的に現在ブロックを予測することができる。例えば、前のピクチャと現在ピクチャとを比較することでオブジェクトの移動方向およびサイズを知ることができれば、オブジェクトの動き情報を考慮して、現在ブロックの予測ブロック(または、予測映像)を生成することができる。以下、動き情報を用いて生成された予測ブロックを動き予測ブロックと称することができる。
【0141】
現在ブロックから予測ブロックを差分して、残差ブロック(residual block)を生成することができる。ここで、オブジェクトの動きが存在する場合であれば、コロケーテッド予測ブロックの代わりに動き予測ブロックを用いることで、残差ブロックのエネルギーを低減し、これにより、残差ブロックの圧縮性能を向上させることができる。
【0142】
上記のように、動き情報を用いて予測ブロックを生成することを動き補償予測と称することができる。ほとんどのインタ予測では、動き補償予測に基づいて予測ブロックを生成することができる。
【0143】
動き情報は、モーションベクトル、参照ピクチャインデックス、予測方向または双方向加重値インデックスのうち少なくとも一つを含む場合がある。モーションベクトルは、オブジェクトの移動方向およびサイズを示す。参照ピクチャインデックスは、参照ピクチャリストに含まれた参照ピクチャのうち、現在ブロックの参照ピクチャを特定する。予測方向は、単方向L0予測、単方向L1予測または双方向予測(L0予測およびL1予測)のいずれか一つを示す。現在ブロックの予測方向に応じて、L0方向の動き情報またはL1方向の動き情報のうち少なくとも一つが用いられる場合がある。双方向加重値インデックスは、L0予測ブロックに適用される加重値およびL1予測ブロックに適用される加重値を特定する。
【0144】
図6は、本発明の一実施形態によるインタ予測方法のフローチャートである。
【0145】
図6を参照すると、インタ予測方法は、現在ブロックのインタ予測モードを判定するステップ(S601)と、判定されたインタ予測モードによって現在ブロックの動き情報を得るステップ(S602)と、得られた動き情報に基づいて、現在ブロックに対する動き補償予測を行うステップ(S603)とを含む。
【0146】
ここで、インタ予測モードは、現在ブロックの動き情報を判定するための様々な技法を示すものであり、並進(Translation)動き情報を用いるインタ予測モードと、アフィン(Affine)動き情報を用いるインタ予測モードとを含む場合がある。一例として、並進動き情報を用いるインタ予測モードは、マージモードおよびモーションベクトル予測モードを含み、アフィン動き情報を用いるインタ予測モードは、アフィンマージモードおよびアフィンモーションベクトル予測モードを含む場合がある。現在ブロックの動き情報は、インタ予測モードによって、現在ブロックに隣り合う近隣ブロックまたはビットストリームからパーシングされる情報に基づいて判定される場合がある。
【0147】
以下、アフィン動き情報を用いるインタ予測方法について詳細に説明する。
【0148】
図7は、オブジェクトの非線形動きを例示した図である。
【0149】
映像内の物体の動きが線形的ではない動きが発生することができる。一例として、
図7に図示されている例のように、カメラズームイン(Zoom-in)、ズームアウト(Zoom-out)、回転(Rotation)またはアフィン変換など、オブジェクトの非線形動きが発生することができる。オブジェクトの非線形動きが発生した場合、並進動きベクトルでは、オブジェクトの動きを効果的に表現することができない。そのため、オブジェクトの非線形動きが発生する部分では、並進動きの代わりにアフィン動きを用いて符号化効率を向上させることができる。
【0150】
図8は、本発明の一実施形態によるアフィンモーションに基づくインタ予測方法のフローチャートである。
【0151】
現在ブロックにアフィンモーションに基づくインタ予測技法が適用されるか否かは、ビットストリームからパーシングされる情報に基づいて判定される場合がある。具体的には、現在ブロックにアフィンマージモードが適用されるか否かを示すフラグまたは現在ブロックにアフィンモーションベクトル予測モードが適用されるか否かを示すフラグのうち少なくとも一つに基づいて、現在ブロックにアフィンモーションに基づくインタ予測技法が適用されるか否かを判定することができる。
【0152】
現在ブロックにアフィンモーションに基づくインタ予測技法が適用される場合、現在ブロックのアフィンモーションモデルを判定することができる(S801)。アフィンモーションモデルは、6パラメータアフィンモーションモデルまたは4パラメータアフィンモーションモデルのうち少なくとも一つに判定される場合がある。6パラメータアフィンモーションモデルは、6個のパラメータを用いてアフィンモーションを表現したものであり、4パラメータアフィンモーションモデルは、4個のパラメータを用いてアフィンモーションを表現したものである。
【0153】
数式1は、6パラメータを用いてアフィンモーションを表現したものである。アフィンモーションは、アフィンシードベクトルによって判定される所定の領域に対する並進動きを示す。
【0154】
【0155】
6個のパラメータを用いてアフィンモーションを表現する場合、複雑な動きを表現することができるが、各パラメータを符号化するために必要なビット数が多くなって符号化効率が低下し得る。そのため、4個のパラメータを用いてアフィンモーションを表現することもできる。数式2は、4パラメータを用いてアフィンモーションを表現したものである。
【0156】
【0157】
現在ブロックのアフィンモーションモデルを判定するための情報が符号化され、ビットストリームを介してシグナリングされる場合がある。一例として、情報は、1ビットのフラグ「affine_type_flag」であることができる。フラグの値が0であることは、4パラメータアフィンモーションモデルが適用されることを示し、フラグの値が1であることは、6パラメータアフィンモーションモデルが適用されることを示すことができる。フラグは、スライス、タイルまたはブロック(例えば、コーディングブロックまたはコーディングツリーユニット)単位で符号化される場合がある。スライスレベルでフラグがシグナリングされる場合、スライスレベルで判定されたアフィンモーションモデルがスライスに属するブロックのすべてに適用される場合がある。
【0158】
または、現在ブロックのアフィンインタ予測モードに基づいて、現在ブロックのアフィンモーションモデルを判定することができる。一例として、アフィンマージモードが適用される場合、現在ブロックのアフィンモーションモデルを4パラメータモーションモデルに判定することができる。一方、アフィンモーションベクトル予測モードが適用される場合、現在ブロックのアフィンモーションモデルを判定するための情報を符号化し、ビットストリームを介してシグナリングすることができる。一例として、現在ブロックにアフィンモーションベクトル予測モードが適用される場合、1ビットのフラグ「affine_type_flag」に基づいて、現在ブロックのアフィンモーションモデルを判定することができる。
【0159】
次に、現在ブロックのアフィンシードベクトルを誘導することができる(S802)。4パラメータアフィンモーションモデルが選択された場合、現在ブロックの二つのコントロールポイントでのモーションベクトルを誘導することができる。一方、6パラメータアフィンモーションモデルが選択された場合、現在ブロックの三つのコントロールポイントでのモーションベクトルが誘導される場合がある。コントロールポイントでのモーションベクトルをアフィンシードベクトルと称することができる。コントロールポイントは、現在ブロックの左上端コーナ、右上端コーナまたは左下端コーナのうち少なくとも一つを含む場合がある。
【0160】
図9は、アフィンモーションモデル別のアフィンシードベクトルを例示した図である。
【0161】
4パラメータアフィンモーションモデルでは、左上端コーナ、右上端コーナまたは左下端コーナのうち二つに対するアフィンシードベクトルを誘導することができる。一例として、
図9の(a)に図示されている例のように、4パラメータアフィンモーションモデルが選択された場合、現在ブロックの左上端コーナ(例えば、左上端サンプル(x1、y1))に対するアフィンシードベクトルsv0と現在ブロックの右上端コーナ(例えば、右上端サンプル(x1、y1))に対するアフィンシードベクトルsv1を用いてアフィンベクトルを誘導することができる。左上端コーナに対するアフィンシードベクトルの代わりに左下端コーナに対するアフィンシードベクトルを使用するか、右上端コーナに対するアフィンシードベクトルの代わりに左下端コーナに対するアフィンシードベクトルを使用することも可能である。
【0162】
6パラメータアフィンモーションモデルでは、左上端コーナ、右上端コーナおよび左下端コーナに対するアフィンシードベクトルを誘導することができる。一例として、
図9の(b)に図示されている例のように、6パラメータアフィンモーションモデルが選択された場合、現在ブロックの左上端コーナ(例えば、左上端サンプル(x1、y1))に対するアフィンシードベクトルsv0、現在ブロックの右上端コーナ(例えば、右上端サンプル(x1、y1))に対するアフィンシードベクトルsv1および現在ブロックの左上端コーナ(例えば、左上端サンプル(x2、y2))に対するアフィンシードベクトルsv2を用いてアフィンベクトルを誘導することができる。
【0163】
後述する実施形態では、4パラメータアフィンモーションモデル下で、左上端コントロールポイントおよび右上端コントロールポイントのアフィンシードベクトルを、それぞれ、第1アフィンシードベクトルおよび第2アフィンシードベクトルと称する。後述する第1アフィンシードベクトルおよび第2アフィンシードベクトルを用いる実施形態において、第1アフィンシードベクトルおよび第2アフィンシードベクトルのうち少なくとも一つの代わりに、左下端コントロールポイントのアフィンシードベクトル(第3アフィンシードベクトル)または右下端コントロールポイントのアフィンシードベクトル(第4アフィンシードベクトル)を使用することができる。
【0164】
また、6パラメータアフィンモーションモデル下で、左上端コントロールポイント、右上端コントロールポイントおよび左下端コントロールポイントのアフィンシードベクトルを、それぞれ、第1アフィンシードベクトル、第2アフィンシードベクトルおよび第3アフィンシードベクトルと称する。後述する第1アフィンシードベクトル、第2アフィンシードベクトルおよび第3アフィンシードベクトルを用いる実施形態において、第1アフィンシードベクトル、第2アフィンシードベクトルおよび第3アフィンシードベクトルのうち少なくとも一つの代わりに、右下端コントロールポイントのアフィンシードベクトル(第4アフィンシードベクトル)を使用することができる。
【0165】
アフィンシードベクトルを用いてサブブロック別にアフィンベクトルを誘導することができる(S803)。ここで、アフィンベクトルは、アフィンシードベクトルに基づいて誘導される並進モーションベクトルを示す。サブブロックのアフィンベクトルをアフィンサブブロックモーションベクトルまたはサブブロックモーションベクトルと称することができる。
【0166】
図10は、4パラメータモーションモデル下で、サブブロックのアフィンベクトルを例示した図である。
【0167】
サブブロックのアフィンベクトルは、コントロールポイントの位置、サブブロックの位置およびアフィンシードベクトルに基づいて誘導される場合がある。一例として、数式3は、アフィンサブブロックモーションベクトルを誘導する例を示す。
【0168】
【0169】
数式3において、(x、y)は、サブブロックの位置を示す。ここで、サブブロックの位置は、サブブロックに含まれた基準サンプルの位置を示す。基準サンプルは、サブブロックの左上端コーナに位置するサンプル、またはx軸またはy軸座標のうち少なくとも一つが中央位置であるサンプルであることができる。(x0、y0)は、第1コントロールポイントの位置を示し、(sv0x、sv0y)は、第1アフィンシードベクトルを示す。また、(x1、y1)は、第2コントロールポイントの位置を示し、(sv1x、sv1y)は、第2アフィンシードベクトルを示す。
【0170】
第1コントロールポイントおよび第2コントロールポイントが、それぞれ、現在ブロックの左上端コーナおよび右上端コーナに対応する場合、x1-x0は、現在ブロックの幅と同一の値に設定される場合がある。
【0171】
次に、各サブブロックのアフィンベクトルを用いて、各サブブロックに対する動き補償予測を行うことができる(S804)。動き補償予測を行った結果、各サブブロックに対する予測ブロックが生成される場合がある。サブブロックの予測ブロックが、現在ブロックの予測ブロックに設定される場合がある。
【0172】
現在ブロックのアフィンシードベクトルは、現在ブロックに隣り合う近隣ブロックのアフィンシードベクトルに基づいて誘導される場合がある。現在ブロックのインタ予測モードがアフィンマージモードである場合、マージ候補リストに含まれたマージ候補のアフィンシードベクトルを現在ブロックのアフィンシードベクトルに判定することができる。また、現在ブロックのインタ予測モードがアフィンマージモードである場合、現在ブロックの参照ピクチャインデックス、特定方向予測フラグまたは双方向加重値のうち少なくとも一つを含む動き情報もマージ候補と同様に設定される場合がある。
【0173】
【0174】
次に、並進動き情報を用いるインタ予測方法について詳細に説明する。
【0175】
現在ブロックの動き情報は、現在ブロックと他のブロックの動き情報から誘導される場合がある。ここで、他のブロックは、現在ブロックよりも先にインタ予測で符号化/復号されたブロックであることができる。現在ブロックの動き情報を他のブロックの動き情報と同様に設定することをマージモードと定義することができる。また、他のブロックの動きベクトルを現在ブロックの動きベクトルの予測値に設定することをモーションベクトル予測モードと定義することができる。
【0176】
図11は、マージモード下で、現在ブロックの動き情報を誘導する過程のフローチャートである。
【0177】
現在ブロックのマージ候補を誘導することができる(S1101)。現在ブロックのマージ候補は、現在ブロックよりも先にインタ予測で符号化/復号されたブロックから誘導される場合がある。
【0178】
図12は、マージ候補を誘導するために使用される候補ブロックを例示した図である。
【0179】
候補ブロックは、現在ブロックに隣接するサンプルを含む近隣ブロックまたは現在ブロックに隣接しないサンプルを含む非近隣ブロックのうち少なくとも一つを含む場合がある。以下、候補ブロックを判定するサンプルを基準サンプルと定義する。また、現在ブロックに隣接する基準サンプルを近隣基準サンプルと称し、現在ブロックに隣接しない基準サンプルを非近隣基準サンプルと称する。
【0180】
近隣基準サンプルは、現在ブロックの最左側列の近隣列または現在ブロックの最上端行の近隣行に含まれる場合がある。一例として、現在ブロックの左上端サンプルの座標を(0、0)とした時に、(-1、H-1)位置の基準サンプルを含むブロック、(W-1、-1)位置の基準サンプルを含むブロック、(W、-1)位置の基準サンプルを含むブロック、(-1、H)位置の基準サンプルを含むブロックまたは(-1、-1)位置の基準サンプルを含むブロックのうち少なくとも一つが候補ブロックとして用いられる場合がある。図面を参照すると、インデックス0~インデックス4の近隣ブロックが候補ブロックとして用いられる場合がある。
【0181】
非近隣基準サンプルは、現在ブロックに隣接する基準サンプルとのx軸距離またはy軸距離のうち少なくとも一つが予め定義された値を有するサンプルを示す。一例として、左側基準サンプルとのx軸距離が予め定義された値である基準サンプルを含むブロック、上端基準サンプルとのy軸距離が予め定義された値である非近隣サンプルを含むブロックまたは左上端基準サンプルとのx軸距離およびy軸距離が予め定義された値である非近隣サンプルを含むブロックのうち少なくとも一つが候補ブロックとして用いられる場合がある。予め定義された値は、4、8、12、16などの自然数であることができる。図面を参照すると、インデックス5~26のブロックのうち少なくとも一つが候補ブロックとして用いられる場合がある。
【0182】
近隣基準サンプルと同一の垂直線、水平線または対角線上に位置しないサンプルを非近隣基準サンプルに設定することもできる。
【0183】
マージ候補の動き情報は、候補ブロックの動き情報と同様に設定される場合がある。一例として、候補ブロックのモーションベクトル、参照ピクチャインデックス、予測方向または双方向加重値インデックスのうち少なくとも一つをマージ候補の動き情報に設定することができる。
【0184】
マージ候補を含むマージ候補リストを生成することができる(S1102)。
【0185】
マージ候補リスト内のマージ候補のインデックスは、所定の順序にしたがって割り当てられる場合がある。一例として、左側近隣ブロックから誘導されたマージ候補、上端近隣ブロックから誘導されたマージ候補、右上端近隣ブロックから誘導されたマージ候補、左下端近隣ブロックから誘導されたマージ候補、左上端近隣ブロックから誘導されたマージ候補および時間的近隣ブロックから誘導されたマージ候補の順にインデックスを付与することができる。
【0186】
マージ候補に複数のマージ候補が含まれた場合、複数のマージ候補のうち少なくとも一つを選択することができる(S1103)。具体的には、複数のマージ候補のいずれか一つを特定するための情報がビットストリームを介してシグナリングされる場合がある。一例として、マージ候補リストに含まれたマージ候補のいずれか一つのインデックスを示す情報merge_idxがビットストリームを介してシグナリングされる場合がある。
【0187】
【0188】
マージ候補リストに含まれたマージ候補の個数が閾値より小さい場合、モーション情報テーブルに含まれたモーション情報候補をマージ候補としてマージ候補リストに追加することができる。ここで、閾値は、マージ候補リストが含む場合がある最大マージ候補の個数または最大マージ候補の個数からオフセットを減算した値であることができる。オフセットは、1または2などの自然数であることができる。
【0189】
モーション情報テーブルは、現在ピクチャ内のインタ予測に基づいて符号化/復号されたブロックから誘導されるモーション情報候補を含む。一例として、モーション情報テーブルに含まれたモーション情報候補の動き情報は、インタ予測に基づいて符号化/復号されたブロックの動き情報と同様に設定される場合がある。ここで、動き情報は、モーションベクトル、参照ピクチャインデックス、予測方向または双方向加重値インデックスのうち少なくとも一つを含む場合がある。
【0190】
モーション情報テーブルに含まれたモーション情報候補をインタ領域マージ候補または予測領域マージ候補と称することもできる。
【0191】
モーション情報テーブルが含む場合があるモーション情報候補の最大個数は、符号化器および復号器で予め定義されていてもよい。一例として、モーション情報テーブルが含む場合がある最大モーション情報候補の個数は、1、2、3、4、5、6、7、8またはそれ以上(例えば、16)であることができる。
【0192】
または、モーション情報テーブルが含む場合があるモーション情報候補の最大個数を示す情報がビットストリームを介してシグナリングされる場合がある。情報は、シーケンス、ピクチャ、またはスライスレベルでシグナリングされる場合がある。情報は、モーション情報テーブルが含む場合があるモーション情報候補の最大個数を示すことができる。または、情報は、モーション情報テーブルが含む場合があるモーション情報候補の最大個数とマージ候補リストが含む場合があるマージ候補の最大個数との差分を示すことができる。
【0193】
または、ピクチャのサイズ、スライスのサイズまたはコーディングツリーユニットのサイズに応じて、モーション情報テーブルが含む場合があるモーション情報候補の最大個数が判定される場合がある。
【0194】
モーション情報テーブルは、ピクチャ、スライス、タイル、ブリック、コーディングツリーユニット、またはコーディングツリーユニットライン(行または列)単位で初期化される場合がある。一例として、スライスが初期化される場合、モーション情報テーブルも初期化され、モーション情報テーブルは、如何なるモーション情報候補も含まない場合がある。
【0195】
または、モーション情報テーブルを初期化するか否かを示す情報がビットストリームを介してシグナリングされる場合がある。情報は、スライス、タイル、ブリックまたはブロックレベルでシグナリングされる場合がある。情報がモーション情報テーブルを初期化することを指示するまで、予め構成されたモーション情報テーブルが用いられる場合がある。
【0196】
または、ピクチャパラメータセットまたはスライスヘッダーを介して初期モーション情報候補に関する情報がシグナリングされる場合がある。スライスが初期化されても、モーション情報テーブルは、初期モーション情報候補を含む場合がある。これにより、スライス内の最初の符号化/復号対象であるブロックに対しても、初期モーション情報候補を用いることができる。
【0197】
または、前のコーディングツリーユニットのモーション情報テーブルに含まれたモーション情報候補を初期モーション情報候補に設定することができる。一例として、前のコーディングツリーユニットのモーション情報テーブルに含まれたモーション情報候補のうちインデックスが最も小さいモーション情報候補またはインデックスが最も大きいモーション情報候補が初期モーション情報候補に設定される場合がある。
【0198】
符号化/復号順序にしたがってブロックを符号化/復号し、ここで、インタ予測に基づいて符号化/復号されたブロックを符号化/復号順序にしたがって、順にモーション情報候補に設定することができる。
【0199】
図13は、モーション情報テーブルのアップデート様相を説明するための図である。
【0200】
現在ブロックに対して、インタ予測が行われた場合(S1301)、現在ブロックに基づいてモーション情報候補を誘導することができる(S1302)。モーション情報候補の動き情報は、現在ブロックの動き情報と同様に設定される場合がある。
【0201】
モーション情報テーブルが空の状態である場合(S1303)、現在ブロックに基づいて誘導されたモーション情報候補をモーション情報テーブルに追加することができる(S1304)。
【0202】
モーション情報テーブルが既にモーション情報候補を含んでいる場合(S1303)、現在ブロックの動き情報(または、これに基づいて誘導されたモーション情報候補)に対する重複性検査を実施することができる(S1305)。重複性検査は、モーション情報テーブルに予め格納されたモーション情報候補の動き情報と現在ブロックの動き情報とが同一であるか否かを判定するためのものである。重複性検査は、モーション情報テーブルに予め格納されたすべてのモーション情報候補を対象に行われる場合がある。または、モーション情報テーブルに予め格納されたモーション情報候補のうち、インデックスが閾値以上または閾値以下であるモーション情報候補を対象に重複性検査を行うことができる。または、予め定義された個数のモーション情報候補を対象に重複性検査が行われる場合がある。一例として、インデックスが小さい2個のモーション情報候補またはインデックスが大きい2個のモーション情報候補が重複性検査の対象に判定される場合がある。
【0203】
現在ブロックの動き情報と同一の動き情報を有するモーション情報候補が含まれていない場合、現在ブロックに基づいて誘導されたモーション情報候補をモーション情報テーブルに追加することができる(S1308)。モーション情報候補が同一であるか否かは、モーション情報候補の動き情報(例えば、モーションベクトルおよび/または参照ピクチャインデックスなど)が同一であるか否かに基づいて判定される場合がある。
【0204】
ここで、モーション情報テーブルに既に最大個数のモーション情報候補が格納されている場合(S1306)、最も古いモーション情報候補を削除し(S1307)、現在ブロックに基づいて誘導されたモーション情報候補をモーション情報テーブルに追加することができる(S1308)。ここで、最も古いモーション情報候補は、インデックスが最も大きいモーション情報候補またはインデックスが最も小さいモーション情報候補であることができる。
【0205】
モーション情報候補は、それぞれ、インデックスによって識別される場合がある。現在ブロックから誘導されたモーション情報候補がモーション情報テーブルに追加される場合、モーション情報候補に最も低いインデックス(例えば、0)を割り当て、予め格納されたモーション情報候補のインデックスを1ずつ増加させることができる。ここで、モーション情報テーブルに既に最大個数のモーション情報候補が格納されている場合、インデックスが最も大きいモーション情報候補が除去される。
【0206】
または、現在ブロックから誘導されたモーション情報候補がモーション情報テーブルに追加される場合、モーション情報候補に最も大きいインデックスを割り当てることができる。一例として、モーション情報テーブルに予め格納されたモーション情報候補の個数が最大値より小さい場合、モーション情報候補には、予め格納されたモーション情報候補の個数と同一の値のインデックスが割り当てられる場合がある。または、モーション情報テーブルに予め格納されたモーション情報候補の個数が最大値と同一である場合、モーション情報候補には、最大値から1を減算したインデックスが割り当てられる場合がある。また、インデックスが最も小さいモーション情報候補が除去され、残りの予め格納されたモーション情報候補のインデックスが1ずつ減少する。
【0207】
図14は、モーション情報テーブルのアップデート様相を示す図である。
【0208】
現在ブロックから誘導されたモーション情報候補がモーション情報テーブルに追加されて、モーション情報候補に最も大きいインデックスが割り当てられるものと仮定する。また、モーション情報テーブルには、既に最大個数のモーション情報候補が格納されているものと仮定する。
【0209】
現在ブロックから誘導されたモーション情報候補HmvpCand[n+1]をモーション情報テーブルHmvpCandListに追加する場合、予め格納されたモーション情報候補のうちインデックスが最も小さいモーション情報候補HmvpCand[0]を削除し、残りのモーション情報候補のインデックスを1ずつ減少させることができる。また、現在ブロックから誘導されたモーション情報候補HmvpCand[n+1]のインデックスを最大値(
図14に図示されている例ではn)に設定することができる。
【0210】
現在ブロックに基づいて誘導されたモーション情報候補と同一のモーション情報候補が予め格納されている場合(S1305)、現在ブロックに基づいて誘導されたモーション情報候補をモーション情報テーブルに追加しない場合がある。(S1309)。
【0211】
または、現在ブロックに基づいて誘導されたモーション情報候補をモーション情報テーブルに追加し、且つモーション情報候補と同一の予め格納されたモーション情報候補を除去することもできる。この場合、予め格納されたモーション情報候補のインデックスが新たに更新されることと同じ効果を奏する。
【0212】
図15は、予め格納されたモーション情報候補のインデックスが更新される例を示す図である。
【0213】
現在ブロックに基づいて誘導されたモーション情報候補mvCandと同一の予め格納されたモーション情報候補のインデックスがhIdxである場合、予め格納されたモーション情報候補を削除し、インデックスがhIdxより大きいモーション情報候補のインデックスを1だけ減少させることができる。一例として、
図15に図示されている例では、mvCandと同一のHmvpCand[2]がモーション情報テーブルHvmpCandListから削除され、HmvpCand[3]からHmvpCand[n]までのインデックスが1ずつ減少するものと図示されている。
【0214】
また、現在ブロックに基づいて誘導されたモーション情報候補mvCandをモーション情報テーブルの最後に追加することができる。
【0215】
または、現在ブロックに基づいて誘導されたモーション情報候補と同一の予め格納されたモーション情報候補に割り当てられたインデックスを更新することができる。例えば、予め格納されたモーション情報候補のインデックスを最小値または最大値に変更することができる。
【0216】
所定の領域に含まれたブロックの動き情報は、モーション情報テーブルに追加されないように設定される場合がある。一例として、マージ処理領域に含まれたブロックの動き情報に基づいて誘導されるモーション情報候補は、モーション情報テーブルに追加しない場合がある。マージ処理領域に含まれたブロックに対しては、符号化/復号順序が定義されていないため、これらのいずれか一つの動き情報を他のブロックのインタ予測時に用いることは不適切である。そのため、マージ処理領域に含まれたブロックに基づいて誘導されたモーション情報候補は、モーション情報テーブルに追加しない場合がある。
【0217】
または、予め設定されたサイズより小さいブロックの動き情報は、モーション情報テーブルに追加されないように設定される場合がある。一例として、幅または高さが4または8より小さいコーディングブロックの動き情報、または4×4サイズのコーディングブロックの動き情報に基づいて誘導されるモーション情報候補は、モーション情報テーブルに追加しない場合がある。
【0218】
現在ブロックのインタ予測モードに基づいて、現在ブロックをモーション情報候補として用いるか否かを判定することもできる。一例として、アフィンモーションモデルに基づいて符号化/復号されたブロックは、モーション情報候補として利用不可能なものに設定される場合がある。これにより、現在ブロックがインタ予測で符号化/復号されたとしても、現在ブロックのインタ予測モードがアフィン予測モードである場合には、現在ブロックに基づいてモーション情報テーブルをアップデートしない場合がある。
【0219】
モーション情報候補が動き情報以外に追加情報を含むように設定することができる。一例として、モーション情報候補に対して、ブロックのサイズ、形状またはブロックのパーティション情報のうち少なくとも一つをさらに格納することができる。現在ブロックのマージ候補リストの構成時に、モーション情報候補のうち、サイズ、形状またはパーティション情報が現在ブロックと同一または類似するモーション情報候補のみを使用するか、サイズ、形状またはパーティション情報が現在ブロックと同一または類似するモーション情報候補を先にマージ候補リストに追加することができる。
【0220】
現在ブロックのマージ候補リストに含まれたマージ候補の個数が閾値より小さい場合、モーション情報テーブルに含まれたモーション情報候補をマージ候補としてマージ候補リストに追加することができる。追加過程は、モーション情報候補のインデックスを昇順または降順に整列した時の順序にしたがって行われる。一例として、インデックスが最も大きいモーション情報候補から現在ブロックのマージ候補リストに追加することができる。
【0221】
モーション情報テーブルに含まれたモーション情報候補をマージ候補リストに追加しようとする場合、モーション情報候補とマージ候補リストに予め格納されたマージ候補との重複性検査が行われる場合がある。重複性検査を行った結果、予め格納されたマージ候補と同一の動き情報を有するモーション情報候補は、マージ候補リストに追加されない場合がある。
【0222】
重複性検査は、モーション情報テーブルに含まれたモーション情報候補のうち一部に対してのみ行われることもできる。一例として、インデックスが閾値以上または閾値以下であるモーション情報候補に対してのみ重複性検査が行われる場合がある。または、インデックスが最も大きいN個のモーション情報候補またはインデックスが最も小さいN個のモーション情報候補に対してのみ重複性検査が行われる場合がある。
【0223】
または、マージ候補リストに予め格納されたマージ候補のうち一部に対してのみ重複性検査を行うことができる。一例として、インデックスが閾値以上または閾値以下であるマージ候補または特定の位置のブロックから誘導されたマージ候補に対してのみ重複性検査が行われる場合がある。ここで、特定の位置は、現在ブロックの左側近隣ブロック、上端近隣ブロック、右上端近隣ブロックまたは左下端近隣ブロックのうち少なくとも一つを含む場合がある。
【0224】
図16は、マージ候補のうち一部に対してのみ重複性検査が行われる例を図示した図である。
【0225】
モーション情報候補HmvpCand[j]をマージ候補リストに追加しようとする場合、モーション情報候補に対してインデックスが最も大きい2個のマージ候補mergeCandList[NumMerge-2]およびmergeCandList[NumMerge-1]との重複性検査を行うことができる。ここで、NumMergeは、可用な空間的マージ候補および時間的マージ候補の個数を示すことができる。
【0226】
図示されている例とは異なり、モーション情報候補HmvpCand[j]をマージ候補リストに追加しようとする場合、モーション情報候補に対してインデックスが最も小さい最大2個のマージ候補との重複性検査を行うこともできる。例えば、mergeCandList[0]およびmergeCandList[1]に対して、HmvpCand[j]と同一であるか否かを確認することができる。
【0227】
または、特定の位置から誘導されたマージ候補に対してのみ重複性検査を行うことができる。一例として、現在ブロックの左側に位置する周辺ブロックから誘導されたマージ候補または現在ブロックの上端に位置する周辺ブロックから誘導されたマージ候補のうち少なくとも一つに対して重複性検査を行うことができる。マージ候補リストに特定の位置から誘導されたマージ候補が存在しない場合、重複性検査を行うことなく、モーション情報候補をマージ候補リストに追加することができる。
【0228】
モーション情報候補HmvpCand[j]をマージ候補リストに追加しようとする場合、モーション情報候補に対して、インデックスが最も大きい2個のマージ候補mergeCandList[NumMerge-2]およびmergeCandList[NumMerge-1]との重複性検査を行うことができる。ここで、NumMergeは、可用な空間的マージ候補および時間的マージ候補の個数を示すことができる。
【0229】
モーション情報候補のうち一部に対してのみマージ候補との重複性検査を行うこともできる。一例として、モーション情報テーブルに含まれたモーション情報候補のうちインデックスが大きいN個またはインデックスが小さいN個のモーション情報候補に対してのみ重複性検査が行われる場合がある。一例として、モーション情報テーブルに含まれたモーション情報候補の個数と差分が閾値以下であるインデックスを有するモーション情報候補に対してのみ重複性検査が行われる場合がある。閾値が2である場合、モーション情報テーブルに含まれたモーション情報候補のうちインデックス値が最も大きい3個のモーション情報候補に対してのみ重複性検査が行われる場合がある。3個のモーション情報候補以外のモーション情報候補に対しては、重複性検査が省略される場合がある。重複性検査が省略される場合、マージ候補と同一の動き情報を有するか否かに関係なく、モーション情報候補をマージ候補リストに追加することができる。
【0230】
これとは逆に、モーション情報テーブルに含まれたモーション情報候補の個数と差分が閾値以上であるインデックスを有するモーション情報候補に対してのみ重複性検査が行われるように設定することもできる。
【0231】
重複性検査が行われるモーション情報候補の個数は、符号化器および復号器で予め定義されていてもよい。例えば、閾値は、0、1または2のような整数であることができる。
【0232】
または、マージ候補リストに含まれたマージ候補の個数またはモーション情報テーブルに含まれたモーション情報候補の個数のうち少なくとも一つに基づいて閾値を判定することができる。
【0233】
第1モーション情報候補と同一のマージ候補が発見された場合、第2モーション情報候補に対する重複性検査の時に、第1モーション情報候補と同一のマージ候補との重複性検査を省略することができる。
【0234】
図17は、特定のマージ候補との重複性検査が省略される例を示す図である。
【0235】
インデックスがiであるモーション情報候補HmvpCand[i]をマージ候補リストに追加しようとする場合、モーション情報候補とマージ候補リストに予め格納されたマージ候補との重複性検査が行われる。ここで、モーション情報候補HmvpCand[i]と同一のマージ候補mergeCandList[j]が発見された場合、モーション情報候補HmvpCand[i]をマージ候補リストに追加せず、インデックスがi-1であるモーション情報候補HmvpCand[i-1]とマージ候補との重複性検査を行うことができる。ここで、モーション情報候補HmvpCand[i-1]とマージ候補mergeCandList[j]との重複性検査は省略することができる。
【0236】
一例として、
図17に図示されている例では、HmvpCand[i]とmergeCandList[2]が同一のものに判定された。これにより、HmvpCand[i]は、マージ候補リストに追加されず、HmvpCand[i-1]に対する重複性検査が行われる場合がある。ここで、HvmpCand[i-1]とmergeCandList[2]との重複性検査は省略される場合がある。
【0237】
現在ブロックのマージ候補リストに含まれたマージ候補の個数が閾値より小さい場合、モーション情報候補以外にも、ペアワイズマージ候補またはゼロマージ候補のうち少なくとも一つがさらに含まれることもできる。ペアワイズマージ候補は、二つ以上のマージ候補の動きベクトルを平均した値を動きベクトルとして有するマージ候補を意味し、ゼロマージ候補は、モーションベクトルが0であるマージ候補を意味する。
【0238】
現在ブロックのマージ候補リストは、以下の順序にしたがって、マージ候補が追加される場合がある。
【0239】
空間的マージ候補-時間的マージ候補-モーション情報候補-(アフィンモーション情報候補)-ペアワイズマージ候補-ゼロマージ候補
【0240】
空間的マージ候補は、近隣ブロックまたは非近隣ブロックのうち少なくとも一つから誘導されるマージ候補を意味し、時間的マージ候補は、前の参照ピクチャから誘導されるマージ候補を意味する。アフィンモーション情報候補は、アフィンモーションモデルで符号化/復号されたブロックから誘導されたモーション情報候補を示す。
【0241】
【0242】
モーションベクトル予測モードでもモーション情報テーブルが用いられる場合がある。一例として、現在ブロックの動きベクトル予測候補リストに含まれた動きベクトル予測候補の個数が閾値より小さい場合、モーション情報テーブルに含まれたモーション情報候補を現在ブロックに対する動きベクトル予測候補に設定することができる。具体的には、モーション情報候補の動きベクトルを動きベクトル予測候補に設定することができる。
【0243】
現在ブロックの動きベクトル予測候補リストに含まれた動きベクトル予測候補のいずれか一つが選択されると、選択された候補を現在ブロックの動きベクトル予測子に設定することができる。次に、現在ブロックの動きベクトル残差値を復号した後、動きベクトル予測子と動きベクトル残差値を合算して、現在ブロックの動きベクトルを得ることができる。
【0244】
現在ブロックの動きベクトル予測候補リストは、以下の順序にしたがって構成される場合がある。
【0245】
空間的モーションベクトル予測候補-時間的モーションベクトル予測候補-モーション情報候補-(アフィンモーション情報候補)-ゼロモーションベクトル予測候補
【0246】
空間的モーションベクトル予測候補は、近隣ブロックまたは非近隣ブロックのうち少なくとも一つから誘導されるモーションベクトル予測候補を意味し、時間的モーションベクトル予測候補は、前の参照ピクチャから誘導されるモーションベクトル予測候補を意味する。アフィンモーション情報候補は、アフィンモーションモデルで符号化/復号されたブロックから誘導されたモーション情報候補を示す。ゼロモーションベクトル予測候補は、動きベクトルの値が0である候補を示す。
【0247】
【0248】
コーディングブロックよりもさらに大きいサイズのマージ処理領域が定義される場合がある。マージ処理領域に含まれたコーディングブロックは、順に符号化/復号されず、並列処理される場合がある。ここで、順に符号化/復号されないということは、符号化/復号順序が定義されていないことを意味する。これにより、マージ処理領域に含まれたブロックの符号化/復号過程は、独立して処理される場合がある。または、マージ処理領域に含まれたブロックは、マージ候補を共有することができる。ここで、マージ候補は、マージ処理領域を基準に誘導される場合がある。
【0249】
上述の特徴によって、マージ処理領域を、並列処理領域、マージ共有領域(Shared Merge Region、SMR)またはMER(Merge Estimation Region)と称することもできる。
【0250】
現在ブロックのマージ候補は、コーディングブロックを基準に誘導される場合がある。ただし、現在ブロックが現在ブロックよりもさらに大きいサイズのマージ処理領域に含まれた場合、現在ブロックと同一のマージ処理領域に含まれた候補ブロックは、マージ候補として利用不可能なものに設定される場合がある。
【0251】
図18は、現在ブロックと同一のマージ処理領域に含まれた候補ブロックがマージ候補として利用不可能なものに設定される例を示す図である。
【0252】
図18の左側に図示されている例において、CU5の符号化/復号の時に、CU5に隣接した基準サンプルを含むブロックが候補ブロックに設定される場合がある。ここで、CU5と同一のマージ処理領域に含まれた候補ブロックX3およびX4は、CU5のマージ候補として利用不可能なものに設定される場合がある。一方、CU5と同一のマージ処理領域に含まれていない候補ブロックX0、X1およびX2は、マージ候補として利用可能なものに設定される場合がある。
【0253】
図18の右側に図示されている例において、CU8の符号化/復号の時に、CU8に隣接した基準サンプルを含むブロックが候補ブロックに設定される場合がある。ここで、CU8と同一のマージ処理領域に含まれた候補ブロックX6、X7およびX8は、マージ候補として非可用なものに設定される場合がある。一方、CU8と同一のマージ領域に含まれていない候補ブロックX5およびX9は、マージ候補として利用可能なものに設定される場合がある。
【0254】
または、現在ブロックがマージ処理領域に含まれた場合、現在ブロックに隣接する近隣ブロックおよびマージ処理領域に隣接する近隣ブロックが候補ブロックに設定される場合がある。
【0255】
図19は、現在ブロックがマージ処理領域に含まれている場合、現在ブロックに対するマージ候補を誘導する例を示す図である。
【0256】
図19の(a)に図示されている例のように、現在ブロックが隣接する近隣ブロックが現在ブロックのマージ候補を誘導するための候補ブロックに設定される場合がある。ここで、現在ブロックと同一のマージ処理領域に含まれた候補ブロックは、マージ候補として非可用なものに設定される場合がある。一例として、コーディングブロックCU3に対するマージ候補の誘導時に、コーディングブロックCU3と同一のマージ処理領域に含まれた上端近隣ブロックy3および右上端近隣ブロックy4は、コーディングブロックCU3のマージ候補として利用不可能なものに設定される場合がある。
【0257】
現在ブロックに隣接する近隣ブロックを予め定義された順序にしたがってスキャンし、マージ候補を誘導することができる。一例として、予め定義された順序は、y1、y3、y4、y0およびy2の順であることができる。
【0258】
現在ブロックに隣接する近隣ブロックから誘導することができるマージ候補の個数がマージ候補の最大個数または最大個数からオフセットを減算した値より小さい場合、
図19の(b)に図示されている例のように、マージ処理領域に隣接する近隣ブロックを用いて現在ブロックに対するマージ候補を誘導することができる。一例として、コーディングブロックCU3を含むマージ処理領域に隣接する近隣ブロックを、コーディングブロックCU3に対する候補ブロックに設定することができる。ここで、マージ処理領域に隣接する近隣ブロックは、左側近隣ブロックx1、上端近隣ブロックx3、左下端近隣ブロックx0、右上端近隣ブロックx4または左上端近隣ブロックx2のうち少なくとも一つを含む場合がある。
【0259】
マージ処理領域に隣接する近隣ブロックを予め定義された順序にしたがってスキャンし、マージ候補を誘導することができる。一例として、予め定義された順序は、x1、x3、x4、x0およびx2の順であることができる。
【0260】
まとめると、マージ処理領域に含まれたコーディングブロックCU3に対するマージ候補は、以下のスキャン順序にしたがって候補ブロックをスキャンして誘導される場合がある。
【0261】
(y1,y3,y4,y0,y2,x1,x3,x4,x0,x2)
【0262】
ただし、上記に例示されている候補ブロックのスキャン順序は、本発明の一例示を示すものに過ぎず、上記の例示と相違する順序にしたがって候補ブロックをスキャンすることも可能である。または、現在ブロックまたはマージ処理領域のサイズまたは形状のうち少なくとも一つに基づいて、スキャン順序を適応的に判定することもできる。
【0263】
マージ処理領域は、正方形または非正方形であることができる。マージ処理領域を判定するための情報がビットストリームを介してシグナリングされる場合がある。情報は、マージ処理領域の形状を示す情報またはマージ処理領域のサイズを示す情報のうち少なくとも一つを含む場合がある。マージ処理領域が非正方形状である場合、マージ処理領域のサイズを示す情報、マージ処理領域の幅および/または高さを示す情報またはマージ処理領域の幅と高さの比率を示す情報のうち少なくとも一つがビットストリームを介してシグナリングされる場合がある。
【0264】
マージ処理領域のサイズは、ビットストリームを介してシグナリングされる情報、ピクチャ解像度、スライスのサイズまたはタイルのサイズのうち少なくとも一つに基づいて判定される場合がある。
【0265】
マージ処理領域に含まれたブロックに対して動き補償予測が行われると、動き補償予測が行われたブロックの動き情報に基づいて誘導されたモーション情報候補をモーション情報テーブルに追加することができる。
【0266】
ただし、マージ処理領域に含まれたブロックから誘導されたモーション情報候補をモーション情報テーブルに追加する場合、ブロックよりも実際に符号化/復号が遅れたマージ処理領域内の他のブロックの符号化/復号の時に、ブロックから誘導されたモーション情報候補を使用することが発生し得る。すなわち、マージ処理領域に含まれたブロックの符号化/復号の時に、ブロック間の依存性を排除する必要があるにもかかわらず、マージ処理領域に含まれた他のブロックの動き情報を用いて動き予測補償が行われることが発生し得る。このような問題を解消するために、マージ処理領域に含まれたブロックの符号化/復号が完了しても、符号化/復号が完了したブロックの動き情報をモーション情報テーブルに追加しない場合がある。
【0267】
または、マージ処理領域内の予め定義された位置のブロックのみを用いて、モーション情報テーブルをアップデートすることができる。予め定義された位置は、マージ処理領域内の左上端に位置するブロック、右上端に位置するブロック、左下端に位置するブロック、右下端に位置するブロック、中央に位置するブロック、右側境界に隣接するブロックまたは下端境界に隣接するブロックのうち少なくとも一つを含む場合がある。一例として、マージ処理領域内の右下端コーナに隣接するブロックの動き情報のみをモーション情報テーブルにアップデートして、他のブロックの動き情報は、モーション情報テーブルにアップデートしない場合がある。
【0268】
または、マージ処理領域に含まれたすべてのブロックの復号が完了した後、ブロックから誘導されたモーション情報候補をモーション情報テーブルに追加することができる。すなわち、マージ処理領域に含まれたブロックが符号化/復号される間には、モーション情報テーブルがアップデートされない場合がある。
【0269】
一例として、マージ処理領域に含まれたブロックに対して動き補償予測が行われると、ブロックから誘導されたモーション情報候補を予め定義された順序でモーション情報テーブルに追加することができる。ここで、予め定義された順序は、マージ処理領域またはコーディングツリーユニット内のコーディングブロックのスキャン順序にしたがって判定される場合がある。スキャン順序は、ラスタースキャン、水平スキャン、垂直スキャンまたはジグザグスキャンのうち少なくとも一つであることができる。または、予め定義された順序は、各ブロックの動き情報または同一の動き情報を有するブロックの個数に基づいて判定される場合がある。
【0270】
または、単方向モーション情報を含むモーション情報候補を双方向モーション情報を含むモーション情報候補よりも先にモーション情報テーブルに追加することができる。これとは逆に、双方向モーション情報を含むモーション情報候補を単方向モーション情報を含むモーション情報候補よりも先にモーション情報テーブルに追加することもできる。
【0271】
または、マージ処理領域またはコーディングツリーユニット内の使用頻度が高い順序または使用頻度が低い順序にしたがって、モーション情報候補をモーション情報テーブルに追加することができる。
【0272】
現在ブロックがマージ処理領域に含まれており、現在ブロックのマージ候補リストに含まれたマージ候補の個数が最大個数より小さい場合、モーション情報テーブルに含まれたモーション情報候補をマージ候補リストに追加することができる。ここで、現在ブロックと同一のマージ処理領域に含まれたブロックから誘導されたモーション情報候補は、現在ブロックのマージ候補リストに追加されないように設定される場合がある。
【0273】
または、現在ブロックがマージ処理領域に含まれた場合、モーション情報テーブルに含まれたモーション情報候補を使用しないように設定することができる。すなわち、現在ブロックのマージ候補リストに含まれたマージ候補の個数が最大個数より小さい場合であっても、モーション情報テーブルに含まれたモーション情報候補をマージ候補リストに追加しない場合がある。
【0274】
他の例として、マージ処理領域またはコーディングツリーユニットに対するモーション情報テーブルを構成することができる。このモーション情報テーブルは、マージ処理領域に含まれたブロックのモーション情報を臨時に格納する役割を果たす。一般的なモーション情報テーブルとマージ処理領域またはコーディングツリーユニットのためのモーション情報テーブルとを区別するために、マージ処理領域またはコーディングツリーユニットのためのモーション情報テーブルを臨時モーション情報テーブルと称する。なお、臨時モーション情報テーブルに格納されているモーション情報候補を臨時モーション情報候補と称する。
【0275】
図20は、臨時モーション情報テーブルを示す図である。
【0276】
コーディングツリーユニットまたはマージ処理領域のための臨時モーション情報テーブルを構成することができる。コーディングツリーユニットまたはマージ処理領域に含まれた現在ブロックに対して動き補償予測が行われた場合、ブロックの動き情報は、モーション情報テーブルHmvpCandListに追加しない場合がある。その代わりに、ブロックから誘導された臨時モーション情報候補を臨時モーション情報テーブルHmvpMERCandListに追加することができる。すなわち、臨時モーション情報テーブルに追加された臨時モーション情報候補は、モーション情報テーブルに追加されない場合がある。これにより、モーション情報テーブルは、現在ブロックを含むコーディングツリーユニットまたはマージ処理領域に含まれたブロックのモーション情報に基づいて誘導されたモーション情報候補を含まない場合がある。
【0277】
または、マージ処理領域に含まれたブロックの一部ブロックの動き情報のみを臨時モーション情報テーブルに追加することができる。一例として、マージ処理領域内の予め定義された位置のブロックのみをモーション情報テーブルをアップデートするために用いることができる。予め定義された位置は、マージ処理領域内の左上端に位置するブロック、右上端に位置するブロック、左下端に位置するブロック、右下端に位置するブロック、中央に位置するブロック、右側境界に隣接するブロックまたは下端境界に隣接するブロックのうち少なくとも一つを含む場合がある。一例として、マージ処理領域内の右下端コーナに隣接するブロックの動き情報のみを臨時モーション情報テーブルに追加し、他のブロックの動き情報は、臨時モーション情報テーブルに追加しない場合がある。
【0278】
臨時モーション情報テーブルが含む場合がある臨時モーション情報候補の最大個数は、モーション情報テーブルが含む場合があるモーション情報候補の最大個数と同様に設定される場合がある。または、臨時モーション情報テーブルが含む場合がある臨時モーション情報候補の最大個数は、コーディングツリーユニットまたはマージ処理領域のサイズによって判定される場合がある。または、臨時モーション情報テーブルが含む場合がある臨時モーション情報候補の最大個数をモーション情報テーブルが含む場合があるモーション情報候補の最大個数より小さく設定することができる。
【0279】
コーディングツリーユニットまたはマージ処理領域に含まれた現在ブロックは、当該コーディングツリーユニットまたは当該マージ処理領域に対する臨時モーション情報テーブルを用いないように設定することができる。すなわち、現在ブロックのマージ候補リストに含まれたマージ候補の個数が閾値より小さい場合、モーション情報テーブルに含まれたモーション情報候補をマージ候補リストに追加し、臨時モーション情報テーブルに含まれた臨時モーション情報候補は、マージ候補リストに追加しない場合がある。これにより、現在ブロックと同一のコーディングツリーユニットまたは同一のマージ処理領域に含まれた他のブロックの動き情報を現在ブロックの動き補償予測に用いない場合がある。
【0280】
コーディングツリーユニットまたはマージ処理領域に含まれたすべてのブロックの符号化/復号が完了すると、モーション情報テーブルと臨時モーション情報テーブルを併合することができる。
【0281】
図21は、モーション情報テーブルと臨時モーション情報テーブルを併合する例を示す図である。
【0282】
コーディングツリーユニットまたはマージ処理領域に含まれたすべてのブロックの符号化/復号が完了すると、
図21に図示されている例のように、臨時モーション情報テーブルに含まれた臨時モーション情報候補をモーション情報テーブルにアップデートすることができる。
【0283】
ここで、臨時モーション情報テーブルに含まれた臨時モーション情報候補は、臨時モーション情報テーブルに挿入された順(すなわち、インデックス値の昇順または降順)にモーション情報テーブルに追加される場合がある。
【0284】
他の例として、予め定義された順序にしたがって、臨時モーション情報テーブルに含まれた臨時モーション情報候補をモーション情報テーブルに追加することができる。ここで、予め定義された順序は、マージ処理領域またはコーディングツリーユニット内のコーディングブロックのスキャン順序にしたがって判定される場合がある。スキャン順序は、ラスタースキャン、水平スキャン、垂直スキャンまたはジグザグスキャンのうち少なくとも一つであることができる。または、予め定義された順序は、各ブロックの動き情報または同一の動き情報を有するブロックの個数に基づいて判定される場合がある。
【0285】
または、単方向モーション情報を含む臨時モーション情報候補を双方向モーション情報を含む臨時モーション情報候補よりも先にモーション情報テーブルに追加することができる。これとは逆に、双方向モーション情報を含む臨時モーション情報候補を単方向モーション情報を含む臨時モーション情報候補よりも先にモーション情報テーブルに追加することもできる。
【0286】
または、マージ処理領域またはコーディングツリーユニット内の使用頻度が高い順序または使用頻度が低い順序にしたがって、臨時モーション情報候補をモーション情報テーブルに追加することができる。
【0287】
臨時モーション情報テーブルに含まれた臨時モーション情報候補をモーション情報テーブルに追加する場合において、臨時モーション情報候補に対する重複性検査を行うことができる。一例として、臨時モーション情報テーブルに含まれた臨時モーション情報候補と同一のモーション情報候補がモーション情報テーブルに予め格納されている場合、臨時モーション情報候補をモーション情報テーブルに追加しない場合がある。ここで、重複性検査は、モーション情報テーブルに含まれたモーション情報候補のうち一部を対象に行われる場合がある。一例として、インデックスが閾値以上または閾値以下であるモーション情報候補を対象に重複性検査が行われる場合がある。一例として、臨時モーション情報候補が予め定義された値以上のインデックスを有するモーション情報候補と同一である場合には、臨時モーション情報候補をモーション情報テーブルに追加しない場合がある。
【0288】
現在ブロックと同一のコーディングツリーユニットまたは同一のマージ処理領域に含まれたブロックから誘導されたモーション情報候補が現在ブロックのマージ候補として用いられることを制限することができる。このために、モーション情報候補に対してブロックのアドレス情報をさらに格納することができる。ブロックのアドレス情報は、ブロックの位置、ブロックのアドレス、ブロックのインデックス、ブロックが含まれたマージ処理領域の位置、ブロックが含まれたマージ処理領域のアドレス、ブロックが含まれたマージ処理領域のインデックス、ブロックが含まれたコーディングツリー領域の位置、ブロックが含まれたコーディングツリー領域のアドレスまたはブロックが含まれたコーディングツリー領域のインデックスのうち少なくとも一つを含む場合がある。
【0289】
【0290】
イントラ予測は、現在ブロックの周辺に符号化/復号が完了した復元サンプルを用いて、現在ブロックを予測するものである。ここで、現在ブロックのイントラ予測には、インループフィルタが適用される前の復元サンプルが用いられる場合がある。
【0291】
イントラ予測技法は、マトリックス(Matrix)に基づくイントラ予測および周辺復元サンプルとの方向性を考慮した一般イントラ予測を含む。現在ブロックのイントラ予測技法を指示する情報がビットストリームを介してシグナリングされる場合がある。情報は、1ビットのフラグであることができる。または、現在ブロックの位置、サイズ、形状または近隣ブロックのイントラ予測技法のうち少なくとも一つに基づいて、現在ブロックのイントラ予測技法を判定することができる。一例として、現在ブロックがピクチャバウンダリにわたって存在する場合、現在ブロックには、マトリックスに基づくイントラ予測が適用されないように設定される場合がある。
【0292】
マトリックスに基づくイントラ予測は、符号化器および復号器で予め格納されたマトリックスと、現在ブロック周辺の復元サンプルとの行列乗算に基づいて、現在ブロックの予測ブロックを得る方法である。予め格納された複数個のマトリックスのいずれか一つを特定するための情報がビットストリームを介してシグナリングされる場合がある。復号器は、情報および現在ブロックのサイズに基づいて、現在ブロックのイントラ予測のためのマトリックスを判定することができる。
【0293】
一般イントラ予測は、非方向性イントラ予測モードまたは方向性イントラ予測モードに基づいて、現在ブロックに対する予測ブロックを得る方法である。以下、図面を参照して、一般イントラ予測に基づくイントラ予測遂行過程についてより詳細に説明する。
【0294】
図22は、本発明の一実施形態によるイントラ予測方法のフローチャートである。
【0295】
現在ブロックの参照サンプルラインを判定することができる(S2201)。参照サンプルラインは、現在ブロックの上端および/または左側からk番目離れたラインに含まれた参照サンプルの集合を意味する。参照サンプルは、現在ブロック周辺符号化/復号が完了した復元サンプルから誘導される場合がある。
【0296】
複数の参照サンプルラインのうち現在ブロックの参照サンプルラインを識別するインデックス情報がビットストリームを介してシグナリングされる場合がある。一例として、現在ブロックの参照サンプルラインを特定するためのインデックス情報intra_luma_ref_idxがビットストリームを介してシグナリングされる場合がある。インデックス情報は、コーディングブロック単位でシグナリングすることができる。
【0297】
複数の参照サンプルラインは、現在ブロックに上端および/または左側1番目のライン、2番目のライン、3番目のラインのうち少なくとも一つを含む場合がある。複数個の参照サンプルラインのうち現在ブロックの上端に隣接する行および現在ブロックの左側に隣接する列で構成された参照サンプルラインを隣接参照サンプルラインと称し、それ以外の参照サンプルラインを非隣接参照サンプルラインと称することもできる。
【0298】
表1は、候補参照サンプルラインそれぞれに割り当てられるインデックスを示すものである。
【0299】
【0300】
現在ブロックの位置、サイズ、形状または近隣ブロックの予測符号化モードのうち少なくとも一つに基づいて、現在ブロックの参照サンプルラインを判定することもできる。一例として、現在ブロックが、ピクチャ、タイル、スライスまたはコーディングツリーユニットの境界に接する場合、隣接参照サンプルラインを現在ブロックの参照サンプルラインに判定することができる。
【0301】
参照サンプルラインは、現在ブロックの上端に位置する上端参照サンプルおよび現在ブロックの左側に位置する左側参照サンプルを含む場合がある。上端参照サンプルおよび左側参照サンプルは、現在ブロック周辺の復元サンプルから誘導される場合がある。復元サンプルは、インループフィルタが適用される前の状態であることができる。
【0302】
次に、現在ブロックのイントラ予測モードを判定することができる(S2202)。現在ブロックのイントラ予測モードは、非方向性イントラ予測モードまたは方向性イントラ予測モードのうち少なくとも一つが現在ブロックのイントラ予測モードに判定される場合がある。非方向性イントラ予測モードは、プランナーおよびDCを含み、方向性イントラ予測モードは、左下端対角方向から右上端対角方向まで33個または65個のモードを含む。
【0303】
【0304】
図23の(a)は、35個のイントラ予測モードを示すものであり、
図23の(b)は、67個のイントラ予測モードを示すものである。
【0305】
図23に図示されているよりもさらに多い数あるいはさらに少ない数のイントラ予測モードが定義されることもできる。
【0306】
現在ブロックに隣接する近隣ブロックのイントラ予測モードに基づいて、MPM(Most Probable Mode)を設定することができる。ここで、近隣ブロックは、現在ブロックの左側に隣接する左側近隣ブロックおよび現在ブロックの上端に隣り合う上端近隣ブロックを含む場合がある。
【0307】
MPMリストに含まれるMPMの個数は、符号化器および復号器で予め設定される場合がある。一例として、MPMの個数は、3個、4個、5個あるいは6個であることができる。または、MPMの個数を示す情報がビットストリームを介してシグナリングされる場合がある。または、近隣ブロックの予測符号化モード、現在ブロックのサイズ、形状または参照サンプルラインインデックスのうち少なくとも一つに基づいてMPMの個数が判定される場合がある。一例として、隣接参照サンプルラインが現在ブロックの参照サンプルラインに判定された場合には、N個のMPMが用いられる一方、非隣接参照サンプルラインが現在ブロックの参照サンプルラインに判定された場合には、M個のMPMが用いられる場合がある。Mは、Nより小さい自然数であり、一例として、Nは6であり、Mは5、4または3であることができる。これにより、現在ブロックの参照サンプルラインのインデックスが0であり、MPMフラグが真の場合、現在ブロックのイントラ予測モードは、6個の候補イントラ予測モードのいずれか一つに判定される一方、現在ブロックの参照サンプルラインのインデックスが0より大きく、MPMフラグが真の場合、現在ブロックのイントラ予測モードは、5個の候補イントラ予測モードのいずれか一つに判定される場合がある。
【0308】
または、現在ブロックの参照サンプルラインのインデックスとは無関係に固定された個数(例えば、6個または5個)のMPM候補を使用することもできる。
【0309】
複数のMPMを含むMPMリストを生成し、現在ブロックのイントラ予測モードと同一のMPMがMPMリストに含まれているか否かを示す情報をビットストリームを介してシグナリングすることができる。情報は、1ビットのフラグであり、MPMフラグと称することができる。MPMフラグが現在ブロックと同一のMPMがMPMリストに含まれていることを示す場合、MPMのうち一つを識別するインデックス情報がビットストリームを介してシグナリングされる場合がある。一例として、複数のMPMのいずれか一つを特定するインデックス情報mpm_idxがビットストリームを介してシグナリングされる場合がある。インデックス情報によって特定されたMPMが現在ブロックのイントラ予測モードに設定される場合がある。MPMフラグが現在ブロックと同一のMPMがMPMリストに含まれていないことを示す場合、MPM以外の残りのイントラ予測モードのいずれか一つを指示する残りのモード情報がビットストリームを介してシグナリングされる場合がある。残りのモード情報は、MPM以外の残りのイントラ予測モードにインデックスを再度割り当てた時に、現在ブロックのイントラ予測モードに対応するインデックス値を示す。復号器では、MPMを昇順に整列し、残りのモード情報をMPMと比較して現在ブロックのイントラ予測モードを判定することができる。一例として、残りのモード情報がMPMと同一であるか小さい場合、残りのモード情報に1を加算して、現在ブロックのイントラ予測モードを誘導することができる。
【0310】
現在ブロックのイントラ予測モードの誘導時に、MPMの一部と残りのモード情報との比較は省略される場合がある。一例として、MPMのうち非方向性イントラ予測モードであるMPMは、比較対象から除外される場合がある。非方向性イントラ予測モードがMPMに設定された場合、残りのモード情報は、方向性イントラ予測モードを示すことが明確であるため、非方向性イントラ予測モード以外の残りのMPMと残りのモード情報との比較により、現在ブロックのイントラ予測モードを誘導することができる。非方向性イントラ予測モードを比較対象から除外する代わりに、残りのモード情報に非方向性イントラ予測モードの個数を加算した後、その結果値を残りのMPMと比較することができる。
【0311】
デフォルトモードをMPMに設定する代わりに、現在ブロックのイントラ予測モードがデフォルトモードであるか否かを示す情報をビットストリームを介してシグナリングすることができる。情報は、1ビットのフラグであり、フラグをデフォルトモードフラグと称することができる。デフォルトモードフラグは、MPMフラグが現在ブロックと同一のMPMがMPMリストに含まれていることを示す場合に限ってシグナリングされる場合がある。上述のように、デフォルトモードは、プランナー、DC、垂直方向モードまたは水平方向モードのうち少なくとも一つを含む場合がある。一例として、プランナーがデフォルトモードに設定された場合、デフォルトモードフラグは、現在ブロックのイントラ予測モードがプランナーであるか否かを指示することができる。デフォルトモードフラグが現在ブロックのイントラ予測モードがデフォルトモードではないことを示す場合、インデックス情報によって指示されるMPMのうち一つを現在ブロックのイントラ予測モードに設定することができる。
【0312】
デフォルトモードフラグが用いられる場合、デフォルトモードと同一のイントラ予測モードは、MPMに設定されないように設定される場合がある。一例として、デフォルトモードフラグが現在ブロックのイントラ予測モードがプランナーであるか否かを指示する場合、プランナーに該当するMPM以外の5個のMPMを用いて、現在ブロックのイントラ予測モードを誘導することができる。
【0313】
複数個のイントラ予測モードがデフォルトモードに設定された場合、デフォルトモードのいずれか一つを指示するインデックス情報がさらにシグナリングされる場合がある。現在ブロックのイントラ予測モードは、インデックス情報が示すデフォルトモードに設定される場合がある。
【0314】
現在ブロックの参照サンプルラインのインデックスが0ではない場合には、デフォルトモードを用いることができないように設定することができる。一例として、非隣接参照サンプルラインが現在ブロックの参照サンプルラインに判定された場合、DCモードまたはプランナーモードのような非方向性イントラ予測モードを使用しないように設定することができる。これにより、参照サンプルラインのインデックスが0ではない場合には、デフォルトモードフラグをシグナリングせず、デフォルトモードフラグの値を予め定義された値(すなわち、偽)に設定することができる。
【0315】
現在ブロックのイントラ予測モードが判定されると、判定されたイントラ予測モードに基づいて、現在ブロックに対する予測サンプルを得ることができる(S2203)。
【0316】
DCモードが選択された場合、参照サンプルの平均値に基づいて、現在ブロックに対する予測サンプルが生成される。具体的には、予測ブロック内の全体サンプルの値は、参照サンプルの平均値に基づいて生成される場合がある。平均値は、現在ブロックの上端に位置する上端参照サンプルおよび現在ブロックの左側に位置する左側参照サンプルのうち少なくとも一つを用いて誘導される場合がある。
【0317】
現在ブロックの形状に応じて、平均値を誘導するために用いられる参照サンプルの個数または範囲が変わり得る。一例として、現在ブロックが、幅が高さより大きい非正方形ブロックである場合、上端参照サンプルのみを用いて平均値を計算することができる。一方、現在ブロックが、幅が高さより小さい非正方形ブロックである場合、左側参照サンプルのみを用いて平均値を計算することができる。すなわち、現在ブロックの幅および高さが相違する場合、長さがより長い方に隣接する参照サンプルのみを用いて平均値を計算することができる。または、現在ブロックの幅と高さの比率に基づいて、上端参照サンプルのみを用いて平均値を計算するか否かまたは左側参照サンプルのみを用いて平均値を計算するか否かを判定することができる。
【0318】
プランナーモードが選択された場合、水平方向予測サンプルと垂直方向予測サンプルを用いて、予測サンプルを得ることができる。ここで、水平方向予測サンプルは、予測サンプルと同一の水平線上に位置する左側参照サンプルおよび右側参照サンプルに基づいて得られ、垂直方向予測サンプルは、予測サンプルと同一の垂直線上に位置する上端参照サンプルおよび下端参照サンプルに基づいて得られる。ここで、右側参照サンプルは、現在ブロックの右上端コーナに隣接する参照サンプルをコピーして生成され、下端参照サンプルは、現在ブロックの左下端コーナに隣接する参照サンプルをコピーして生成される場合がある。水平方向予測サンプルは、左側参照サンプルおよび右側参照サンプルの加重和演算に基づいて得られ、垂直方向予測サンプルは、上端参照サンプルおよび下端参照サンプルの加重和演算に基づいて得られる場合がある。ここで、各参照サンプルに付与される加重値は、予測サンプルの位置によって判定される場合がある。予測サンプルは、水平方向予測サンプルおよび垂直方向予測サンプルの平均演算または加重和演算に基づいて得られる場合がある。加重和演算が行われる場合、予測サンプルの位置に基づいて、水平方向予測サンプルおよび垂直方向予測サンプルに付与される加重値を判定することができる。
【0319】
方向性予測モードが選択される場合、選択された方向性予測モードの予測方向(または予測角度)を示すパラメータを判定することができる。下記表2は、イントラ予測モード別のイントラ方向パラメータintraPredAngを示すものである。
【0320】
【0321】
表2は、35個のイントラ予測モードが定義されている時に、インデックスが2~34のいずれか一つであるイントラ予測モードそれぞれのイントラ方向パラメータを示す。33個よりもさらに多い方向性イントラ予測モードが定義されている場合、表2をより細分化し、方向性イントラ予測モードそれぞれのイントラ方向パラメータを設定することができる。
【0322】
現在ブロックの上端参照サンプルおよび左側参照サンプルを一列に配列した後、イントラ方向パラメータの値に基づいて、予測サンプルを得ることができる。ここで、イントラ方向パラメータの値が負数である場合、左側参照サンプルと上端参照サンプルを一列に配列することができる。
【0323】
図24および
図25は、参照サンプルを一列に配列する一次元配列の例示を示す図である。
【0324】
図24は、参照サンプルを垂直方向に配列する垂直方向一次元配列の例示を示すものであり、
図25は、参照サンプルを水平方向に配列する水平方向一次元配列の例示を示すものである。35個のイントラ予測モードが定義された場合を仮定して、
図24および
図25の実施形態を説明する。
【0325】
イントラ予測モードインデックスが11~18のいずれか一つである場合、上端参照サンプルを反時計回りに回転した水平方向一次元配列を適用し、イントラ予測モードインデックスが19~25のいずれか一つである場合、左側参照サンプルを時計回りに回転した垂直方向一次元配列を適用することができる。参照サンプルを一列に配列するに際し、イントラ予測モードの角度を考慮することができる。
【0326】
イントラ方向パラメータに基づいて、参照サンプル判定パラメータを判定することができる。参照サンプル判定パラメータは、参照サンプルを特定するための参照サンプルインデックスおよび参照サンプルに適用される加重値を判定するための加重値パラメータを含む場合がある。
【0327】
参照サンプルインデックスiIdxおよび加重値パラメータifactは、それぞれ、以下の数式4および数式5により得られる場合がある。
【0328】
【0329】
【0330】
数式4および数式5において、Pangは、イントラ方向パラメータを示す。参照サンプルインデックスiIdxによって特定される参照サンプルは、整数ペル(Integer pel)に該当する。
【0331】
予測サンプルを誘導するために、少なくとも一つ以上の参照サンプルを特定することができる。具体的には、予測モードの勾配を考慮して、予測サンプルを誘導するために用いられる参照サンプルの位置を特定することができる。一例として、参照サンプルインデックスiIdxを用いて、予測サンプルを誘導するために用いられる参照サンプルを特定することができる。
【0332】
ここで、イントラ予測モードの勾配が一つの参照サンプルでは表現されない場合、複数の参照サンプルを補間して予測サンプルを生成することができる。一例として、イントラ予測モードの勾配が予測サンプルと第1参照サンプルとの間の勾配と、予測サンプルと第2参照サンプルとの間の勾配との間の値である場合、第1参照サンプルおよび第2参照サンプルを補間して予測サンプルを得ることができる。すなわち、イントラ予測角度に沿うアンギュラライン(Angular Line)が整数ペルに位置した参照サンプルを通過しない場合、アンギュララインが通過する位置の左右または上下に隣接位置する参照サンプルを補間して予測サンプルを得ることができる。
【0333】
下記数式6は、参照サンプルに基づいて、予測サンプルを得る例を示すものである。
【0334】
【0335】
数式6において、Pは、予測サンプルを示し、Ref_1Dは、一次元配列された参照サンプルのいずれか一つを示す。ここで、参照サンプルの位置は、予測サンプルの位置(x、y)および参照サンプルインデックスiIdxによって判定される場合がある。
【0336】
イントラ予測モードの勾配が一つの参照サンプルで表現可能な場合、加重値パラメータifactは0に設定される。これにより、数式6は、以下の数式7のように簡素化される場合がある。
【0337】
【0338】
複数のイントラ予測モードに基づいて現在ブロックに対するイントラ予測を行うこともできる。一例として、予測サンプル別にイントラ予測モードを誘導し、それぞれの予測サンプルに割り当てられたイントラ予測モードに基づいて予測サンプルを誘導することができる。
【0339】
または、領域別にイントラ予測モードを誘導し、それぞれの領域に割り当てられたイントラ予測モードに基づいて、各領域に対するイントラ予測を行うことができる。ここで、領域は、少なくとも一つのサンプルを含む場合がある。領域のサイズまたは形状のうち少なくとも一つは、現在ブロックのサイズ、形状またはイントラ予測モードのうち少なくとも一つに基づいて適応的に判定される場合がある。または、符号化器および復号器で、現在ブロックのサイズまたは形状とは独立して、領域のサイズまたは形状のうち少なくとも一つが予め定義されていてもよい。
【0340】
図26は、方向性イントラ予測モードがx軸と平行な直線と形成する角度を例示した図である。
【0341】
図26に示れている例のように、方向性予測モードは、左下端対角方向から右上端対角方向の間に存在することができる。x軸と方向性予測モードが形成する角度から説明すると、方向性予測モードは、45度(左下端対角方向)から-135度(右上端対角方向)の間に存在することができる。
【0342】
現在ブロックが非正方形状である場合、現在ブロックのイントラ予測モードによって、イントラ予測角度に沿うアンギュラライン上に位置する参照サンプルのうち予測サンプルにより近い参照サンプルの代わりに、予測サンプルからより離れた参照サンプルを用いて予測サンプルを誘導することが発生し得る。
【0343】
図27は、現在ブロックが非正方形状である場合、予測サンプルが得られる様相を示す図である。
【0344】
一例として、
図27の(a)に図示されている例のように、現在ブロックが幅が高さより大きい非正方形であり、現在ブロックのイントラ予測モードが0度から45度の間の角度を有する方向性イントラ予測モードであるものと仮定する。上記の場合、現在ブロックの右側列付近の予測サンプルAを誘導する時に、角度に沿うアンギュラモード上に位置する参照サンプルのうち予測サンプルと近い上端参照サンプルTの代わりに予測サンプルから離れた左側参照サンプルLを用いることが発生し得る。
【0345】
他の例として、
図27の(b)に図示されている例のように、現在ブロックが高さが幅より大きい非正方形であり、現在ブロックのイントラ予測モードが-90度から-135度の間である方向性イントラ予測モードであるものと仮定する。上記の場合、現在ブロックの下端行付近の予測サンプルAを誘導する時に、角度に沿うアンギュラモード上に位置する参照サンプルのうち予測サンプルと近い左側参照サンプルLの代わりに予測サンプルから離れた上端参照サンプルTを用いることが発生し得る。
【0346】
上記のような問題を解消するために、現在ブロックが非正方形である場合、現在ブロックのイントラ予測モードを逆方向のイントラ予測モードに置換することができる。これにより、非正方形ブロックに対しては、
図23に図示されている方向性予測モードよりもさらに大きいあるいはさらに小さい角度を有する方向性予測モードを使用することができる。このような方向性イントラ予測モードをワイドアングルイントラ予測モードと定義することができる。ワイドアングルイントラ予測モードは、45度~-135度の範囲に属しない方向性イントラ予測モードを示す。
【0347】
図28は、ワイドアングルイントラ予測モードを示す図である。
【0348】
図28に図示されている例において、インデックスが-1から-14であるイントラ予測モードおよびインデックスが67から80の間であるイントラ予測モードがワイドアングルイントラ予測モードを示す。
【0349】
図28では、角度が45度より大きい14個のワイドアングルイントラ予測モード(-1から-14)および角度が-135度より小さい14個のワイドアングルイントラ予測モード(67から80)を例示しているが、これよりもさらに多い数またはさらに少ない数のワイドアングルイントラ予測モードが定義される場合がある。
【0350】
ワイドアングルイントラ予測モードが使用される場合、上端参照サンプルの長さは2W+1に設定され、左側参照サンプルの長さは2H+1に設定される場合がある。
【0351】
ワイドアングルイントラ予測モードを使用するに伴い、
図28の(a)に図示されているサンプルAは、参照サンプルTを用いて予測され、
図28の(b)に図示されているサンプルAは、参照サンプルLを用いて予測される場合がある。
【0352】
既存のイントラ予測モードとN個のワイドアングルイントラ予測モードを加算して、総67+N個のイントラ予測モードを使用することができる。一例として、表3は、20個のワイドアングルイントラ予測モードが定義された場合、イントラ予測モードのイントラ方向のパラメータを示すものである。
【0353】
【0354】
現在ブロックが非正方形であり、S2502ステップで得られた現在ブロックのイントラ予測モードが変換範囲に属する場合、現在ブロックのイントラ予測モードをワイドアングルイントラ予測モードに変換することができる。変換範囲は、現在ブロックのサイズ、形状または比率のうち少なくとも一つに基づいて判定される場合がある。ここで、の比率は、現在ブロックの幅と高さとの比率を示すことができる。
【0355】
現在ブロックが幅が高さより大きい非正方形である場合、変換範囲は、右上端対角方向のイントラ予測モードインデックス(例えば、66)から(右上端対角方向であるイントラ予測モードのインデックス-N)に設定される場合がある。ここで、Nは、現在ブロックの比率に基づいて判定される場合がある。現在ブロックのイントラ予測モードが変換範囲に属する場合、イントラ予測モードをワイドアングルイントラ予測モードに変換することができる。変換は、イントラ予測モードから予め定義された値を減算するものであることができ、予め定義された値は、ワイドアングルイントラ予測モード以外のイントラ予測モードの総個数(例えば、67)であることができる。
【0356】
実施形態によって、66番から53番の間のイントラ予測モードは、それぞれ、-1番から-14番の間のワイドアングルイントラ予測モードに変換される場合がある。
【0357】
現在ブロックが高さが幅より大きい非正方形である場合、変換範囲は、左下端対角方向のイントラ予測モードインデックス(例えば、2)から(左下端対角方向のイントラ予測モードのインデックス+M)に設定される場合がある。ここで、Mは、現在ブロックの比率に基づいて判定される場合がある。現在ブロックのイントラ予測モードが変換範囲に属する場合、イントラ予測モードをワイドアングルイントラ予測モードに変換することができる。変換は、イントラ予測モードに予め定義された値を加算するものであることができ、予め定義された値は、ワイドアングルイントラ予測モード以外の方向性イントラ予測モードの総個数(例えば、65)であることができる。
【0358】
実施形態によって、2番から15番の間のイントラ予測モードのそれぞれは、67番から80番の間のワイドアングルイントラ予測モードに変換される場合がある。
【0359】
以下、変換範囲に属するイントラ予測モードをワイドアングルイントラ代替予測モードと称する。
【0360】
変換範囲は、現在ブロックの比率に基づいて判定される場合がある。一例として、表4および表5は、それぞれ、ワイドアングルイントラ予測モード以外の35個のイントラ予測モードが定義された場合と、67個のイントラ予測モードが定義された場合の変換範囲を示す。
【0361】
【0362】
【0363】
表4および表5に示れている例のように、現在ブロックの比率に応じて、変換範囲に含まれるワイドアングルイントラ代替予測モードの個数が相違することができる。
【0364】
現在ブロックの比率をより細分化して、以下の表6のように変換範囲を設定することもできる。
【0365】
【0366】
非隣接参照サンプルラインが現在ブロックの参照サンプルラインに判定された場合、または、複数の参照サンプルラインのいずれか一つを選択するマルチラインイントラ予測符号化方法が使用された場合において、ワイドアングルイントラ予測モードが使用されないように設定される場合がある。すなわち、現在ブロックが非正方形であり、現在ブロックのイントラ予測モードが変換範囲に属する場合であっても、現在ブロックのイントラ予測モードをワイドアングルイントラ予測モードに変換しない場合がある。
【0367】
または、現在ブロックのイントラ予測モードがワイドアングルイントラ予測モードに判定された場合、非隣接参照サンプルラインを現在ブロックの参照サンプルラインとして利用可能ではないものに設定するか、複数の参照サンプルラインのいずれか一つを選択するマルチラインイントラ予測符号化方法が使用されないように設定することができる。マルチラインイントラ予測符号化方法が使用されない場合、隣接参照サンプルラインが現在ブロックの参照サンプルラインに判定される場合がある。
【0368】
ワイドアングルイントラ予測モードが使用されない場合、refWおよびrefHをnTbWとnTbHの和に設定することができる。これにより、左上端参照サンプル以外、現在ブロックとの距離がiである非隣接レファレンスサンプルは、(nTbW+nTbH+offsetX[i])個の上端参照サンプルと(nTbW+nTbH+offsetY[i])個の左側参照サンプルを含む場合がある。すなわち、現在ブロックとの距離がiである非隣接レファレンスサンプルは、(2nTbW+2nTbH+offsetX[i]+offsetY[i]+1)個の参照サンプルを含む場合がある。例えば、whRatioの値が1より大きい場合には、offsetXの値をoffsetYの値より大きく設定することができる。一例として、offsetXの値は1に設定され、offsetYの値は0に設定される場合がある。一方、whRatioの値が1より小さい場合には、offsetXの値よりoffsetYの値をより大きく設定することができる。一例として、offsetXの値は0に設定され、offsetYの値は1に設定される場合がある。
【0369】
既存のイントラ予測モードにさらにワイドアングルイントラ予測モードが使用されることによって、ワイドアングルイントラ予測モードを符号化するために必要なリソースが増加し、符号化効率が低下し得る。そのため、ワイドアングルイントラ予測モードをそのまま符号化する代わりに、ワイドアングルイントラ予測モードに対する代替イントラ予測モードを符号化し、符号化効率を向上させることができる。
【0370】
一例として、現在ブロックが67番のワイドアングルイントラ予測モードを用いて符号化された場合、67番のワイドアングル代替イントラ予測モードである2番を現在ブロックのイントラ予測モードで符号化することができる。また、現在ブロックが-1番のワイドアングルイントラ予測モードで符号化された場合、-1番のワイドアングル代替イントラ予測モードである66番を現在ブロックのイントラ予測モードで符号化することができる。
【0371】
復号器では、現在ブロックのイントラ予測モードを復号し、復号されたイントラ予測モードが変換範囲に含まれるか否かを判定することができる。復号されたイントラ予測モードがワイドアングル代替イントラ予測モードである場合、イントラ予測モードをワイドアングルイントラ予測モードに変換することができる。
【0372】
または、現在ブロックがワイドアングルイントラ予測モードで符号化された場合、ワイドアングルイントラ予測モードをそのまま符号化することもできる。
【0373】
イントラ予測モードの符号化は、上述のMPMリストに基づいて行われる場合がある。具体的には、近隣ブロックがワイドアングルイントラ予測モードで符号化された場合、ワイドアングルイントラ予測モードに対応するワイドアングル代替イントラ予測モードに基づいて、MPMを設定することができる。
【0374】
【0375】
原本映像から予測映像を差分して誘導された残差映像を誘導することができる。ここで、残差映像を周波数ドメインに変更した時に、周波数成分のうち高周波成分を除去しても、映像の主観的画質は大きく劣らない。これにより、高周波成分の値を小さく変換するか、高周波成分の値を0に設定すると、視覚的歪みがそれほど発生しないとともに、圧縮効率を増加させることができる効果がある。上記の特性を反映して、残差映像を二次元周波数成分に分解するために現在ブロックを変換することができる。変換は、DCT(Discrete Cosine Transform)またはDST(Discrete Sine Tranform)などの変換技法を用いて行われる場合がある。
【0376】
DCTは、コサイン変換を用いて、残差映像を二次元周波数成分に分解(または変換)するものであり、DSTは、サイン変換を用いて、残差映像を二次元周波数成分に分解(または変換)するものである。残差映像の変換結果、周波数成分は、基底映像で表現される場合がある。一例として、N×Nサイズのブロックに対してDCT変換を行う場合、N2個の基本パターン成分が得られる場合がある。変換によりN×Nサイズのブロックに含まれた基本パターン成分それぞれのサイズが得られる場合がある。用いられた変換技法によって、基本パターン成分のサイズをDCT係数またはDST係数と称することができる。
【0377】
変換技法DCTは、0ではない低周波成分が多く分布する映像を変換するために主に用いられる。変換技法DSTは、高周波成分が多く分布する映像に主に用いられる。
【0378】
DCTまたはDST以外の変換技法を使用して残差映像を変換することもできる。
【0379】
以下、残差映像を二次元周波数成分に変換することを二次元映像変換と称する。なお、変換の結果、得られた基本パターン成分のサイズを変換係数と称する。一例として、変換係数は、DCT係数またはDST係数を意味し得る。後述する第1変換および第2変換がいずれも適用された場合、変換係数は、第2変換の結果として生成された基本パターン成分のサイズを意味し得る。また、変換スキップが適用された残差サンプルも変換係数と称する。
【0380】
変換技法は、ブロック単位で判定される場合がある。変換技法は、現在ブロックの予測符号化モード、現在ブロックのサイズまたは現在ブロックの形状のうち少なくとも一つに基づいて判定される場合がある。一例として、現在ブロックがイントラ予測モードで符号化され、現在ブロックのサイズがN×Nより小さい場合には、変換技法DSTを使用して変換が行われる場合がある。一方、条件を満たしていない場合、変換技法DCTを使用して変換が行われる場合がある。
【0381】
残差映像の一部ブロックに対しては、二次元映像変換が行われない場合がある。二次元映像変換を行わないことを変換スキップ(Transform Skip)と称することができる。変換スキップは、現在ブロックに第1変換および第2変換が適用されないことを示す。変換スキップが適用された場合、変換が行われない残差値を対象に量子化が適用される場合がある。
【0382】
現在ブロックに変換スキップを許容するか否かは、現在ブロックのサイズまたは形状のうち少なくとも一つに基づいて判定される場合がある。一例として、現在ブロックのサイズが閾値より小さい場合に限って、変換スキップが適用される場合がある。閾値は、現在ブロックの幅、高さまたはサンプル個数のうち少なくとも一つに関するものであり、32×32などと定義される場合がある。または、正方形ブロックに対してのみ変換スキップを許容することができる。一例として、32×32、16×16、8×8または4×4サイズの正方形ブロックに対して変換スキップが許容される場合がある。または、サブパーティションイントラ符号化方法が使用されない場合にのみ、変換スキップを許容することができる。
【0383】
または、現在ブロックにサブパーティションイントラ符号化方法が適用された場合、サブパーティション別に変換スキップが適用されるか否かを判定することができる。
【0384】
図29は、サブブロック別に変換スキップ可否が判定される例を示す図である。
【0385】
複数のサブブロックのうち一部に対してのみ変換スキップを適用することができる。一例として、
図29に図示されている例のように、現在ブロックの上端に位置するサブブロックには変換スキップを適用し、下端に位置するサブブロックには変換スキップが許容されないように設定される場合がある。
【0386】
変換スキップが許容されないサブブロックの変換タイプは、ビットストリームからシグナリングされる情報に基づいて判定される場合がある。一例として、後述するtu_mts_idxに基づいて、変換タイプが判定される場合がある。
【0387】
または、サブブロックのサイズに基づいて、サブブロックの変換タイプを判定することができる。一例として、サブブロックの幅が閾値以上であるかおよび/または閾値以下であるかに基づいて、水平方向変換タイプを判定し、サブブロックの高さが閾値以上であるかおよび/または閾値以下であるかに基づいて、垂直方向変換タイプを判定することができる。
【0388】
DCTまたはDSTを用いて現在ブロックを変換した後、変換された現在ブロックをまた変換することができる。ここで、DCTまたはDSTに基づく変換を第1変換と定義し、第1変換が適用されたブロックをまた変換することを第2変換と定義することができる。
【0389】
第1変換は、複数個の変換コア候補のいずれか一つを用いて行われる場合がある。一例として、DCT2、DCT8またはDST7のいずれか一つを用いて第1変換が行われる場合がある。
【0390】
水平方向および垂直方向に対して相違する変換コアが使用されることもできる。水平方向の変換コアおよび垂直方向の変換コアの組み合わせを示す情報がビットストリームを介してシグナリングされることもできる。
【0391】
第1変換および第2変換の遂行単位が相違することができる。一例として、8×8ブロックに対して第1変換を行い、変換された8×8ブロックのうち4×4サイズのサブブロックに対して第2変換を行うことができる。または、4×4サイズのサブブロック3個に属する変換係数に対して第2変換を行うことができる。3個のサブブロックは、現在ブロックの左上端に位置するサブブロックと、サブブロックの右側に隣り合うサブブロックと、サブブロックの下端に隣り合うサブブロックとを含む場合がある。または、8×8サイズのブロックに対して第2変換を行うこともできる。
【0392】
第2変換が行われない残りの領域の変換係数は、0に設定されることもできる。
【0393】
または、4×4ブロックに対して第1変換を行い、変換された4×4ブロックを含む8×8サイズの領域に対して第2変換を行うこともできる。
【0394】
第2変換を行うか否かを示す情報がビットストリームを介してシグナリングされる場合がある。一例として、第2変換を行うか否かを示すフラグまたは第2変換を行うか否かおよび第2変換に用いられる変換カーネルを特定するインデックス情報がシグナリングされる場合がある。一例として、インデックス情報が0であることは、現在ブロックに第2変換が行われないことを示す。一方、インデックス情報が0より大きい場合、インデックス情報によって、第2変換を行うための変換カーネルが判定される場合がある。
【0395】
または、水平方向変換コアと垂直方向変換コアが同一であるか否かに基づいて、第2変換を行うか否かが判定される場合がある。一例として、水平方向変換コアと垂直方向変換コアが同一である場合にのみ、第2変換が行われる場合がある。または、水平方向変換コアと垂直方向変換コアが相違する場合にのみ、第2変換が行われる場合がある。
【0396】
または、水平方向の変換および垂直方向の変換が予め定義された変換コアを用いた場合に限って、第2変換が許容される場合がある。一例として、水平方向の変換および垂直方向の変換にDCT2変換コアが使用された場合に、第2変換が許容される場合がある。または、現在ブロックにサブパーティションイントラ符号化方法が適用された場合には、水平方向の変換および垂直方向の変換にDCT2変換コアが使用された場合に限って第2変換が許容される場合がある。
【0397】
または、現在ブロックのノンゼロ変換係数の個数に基づいて第2変換を行うか否かを判定することができる。一例として、現在ブロックのノンゼロ変換係数が閾値より小さいか同一である場合、第2変換を使用しないように設定し、現在ブロックのノンゼロ変換係数が閾値より大きい場合、第2変換を使用するように設定される場合がある。現在ブロックがイントラ予測で符号化された場合に限って、第2変換を使用するように設定されることもできる。
【0398】
または、現在ブロックの最後のノンゼロ変換係数の位置に基づいて第2変換を行うか否かを判定することができる。一例として、現在ブロックの最後のノンゼロ変換係数のx軸座標またはy軸座標のうち少なくとも一つが閾値より大きい場合、または現在ブロックの最後のノンゼロ変換係数が属するサブブロックのx軸座標またはy軸座標のうち少なくとも一つが閾値より大きい場合、第2変換を行わない場合がある。ここで、閾値は、符号化器および復号器で予め定義されていることができる。または、現在ブロックのサイズまたは形状に基づいて閾値が判定される場合がある。
【0399】
または、現在ブロックにDC成分の変換係数のみが存在する場合、第2変換を行わないように設定することができる。ここで、DC成分は、現在ブロック内の左上端位置の変換係数を示す。
【0400】
または、現在ブロックにマトリックス基盤のイントラ予測が適用された場合、第2変換が行われないように設定される場合がある。
【0401】
【0402】
現在ブロックの変換タイプを示す情報がビットストリームを介してシグナリングされる場合がある。情報は、水平方向に対する変換タイプおよび垂直方向に対する変換タイプの組み合わせのうち一つを示すインデックス情報tu_mts_idxであることができる。
【0403】
インデックス情報tu_mts_idxによって特定される変換タイプ候補に基づいて、垂直方向に対する変換コアおよび水平方向に対する変換コアが判定される場合がある。表7は、tu_mts_idxによる変換タイプ組み合わせを示すものである。
【0404】
【0405】
変換タイプは、DCT2、DST7またはDCT8のいずれか一つに判定される場合がある。または、変換スキップを変換タイプ候補に挿入することもできる。
【0406】
表7が用いられる場合、tu_mts_idxが0であると、水平方向と垂直方向にDCT2が適用される場合がある。tu_mts_idxが2であると、水平方向にDCT8を適用し、垂直方向にDCT7を適用することができる。
【0407】
サブパーティションイントラ符号化方法が適用された場合、サブブロックの変換コアが独立して判定される場合がある。一例として、サブブロック毎に変換タイプ組み合わせ候補を特定するための情報が符号化されてシグナリングすることができる。これにより、サブブロック間の変換コアが相違することができる。
【0408】
または、サブブロックが同一の変換タイプを使用することもできる。この場合、変換タイプ組み合わせ候補を特定するtu_mts_idxは、最初のサブブロックに対してのみシグナリングされる場合がある。または、コーディングブロックレベルでtu_mts_idxをシグナリングし、サブブロックの変換タイプは、コーディングブロックレベルでシグナリングされるtu_mts_idxを参照して判定される場合がある。または、サブブロックのうち一つのサイズ、形状またはイントラ予測モードのうち少なくとも一つに基づいて、変換タイプを判定し、判定された変換タイプがすべてのサブブロックのために使用されるように設定することもできる。
【0409】
図30は、サブブロックが同一の変換タイプを使用する例を示す図である。
【0410】
コーディングブロックが水平方向に分割された場合、コーディングブロックの上端に位置するサブブロック(Sub-CU0)および下端に位置するサブブロック(Sub-CU1)の変換タイプを同様に設定することができる。一例として、
図30の(a)に図示されている例のように、上端サブブロックに対してシグナリングされるtu_mts_idxに基づいて、水平方向タイプおよび垂直変換タイプが判定されると、判定された変換タイプを下端サブブロックにも適用することができる。
【0411】
コーディングブロックが垂直方向に分割された場合、コーディングブロックの左側に位置するサブブロック(Sub-CU0)および右側に位置するサブブロック(Sub-CU1)の変換タイプを同様に設定することができる。一例として、
図30の(b)に図示されている例のように、左側サブブロックに対してシグナリングされるtu_mts_idxに基づいて、水平方向タイプおよび垂直変換タイプが判定されると、判定された変換タイプを右側サブブロックにも適用することができる。
【0412】
【0413】
現在ブロックのサイズ、形状、ノンゼロ係数の個数、二次変換を行うか否かまたはサブパーティションイントラ符号化方法を適用するか否かのうち少なくとも一つに基づいてインデックス情報の符号化可否を判定することができる。一例として、現在ブロックにサブパーティションイントラ符号化方法が適用された場合、またはノンゼロ係数の数が閾値と同一であるか小さい場合、インデックス情報のシグナリングが省略される場合がある。インデックス情報のシグナリングが省略された場合、現在ブロックには、デフォルト変換タイプが適用される場合がある。
【0414】
デフォルト変換タイプは、DCT2またはDST7のうち少なくとも一つを含む場合がある。デフォルト変換タイプが複数である場合、現在ブロックのサイズ、形状、イントラ予測モード、二次変換を行うか否かまたはサブパーティションイントラ符号化方法を適用するか否かのうち少なくとも一つを考慮して、複数のデフォルト変換タイプのうち一つを選択することができる。一例として、現在ブロックの幅が予め設定された範囲に属するか否かに基づいて、複数の変換タイプのうち一つを水平方向変換タイプに判定し、現在ブロックの高さが予め設定された範囲に属するか否かに基づいて、複数の変換タイプのうち一つを垂直方向変換タイプに判定することができる。または、現在ブロックのサイズ、形状、イントラ予測モードまたは二次変換が行われているか否かに応じてデフォルトモードが相違するように判定される場合がある。
【0415】
または、現在ブロックにDC成分の変換係数のみが存在する場合、水平方向変換タイプおよび垂直方向変換タイプをデフォルト変換タイプに設定することができる。一例として、現在ブロックにDC成分の変換係数のみが存在する場合、水平方向変換タイプおよび垂直方向変換タイプは、DCT2に設定される場合がある。
【0416】
閾値は、現在ブロックのサイズまたは形状に基づいて判定される場合がある。一例として、現在ブロックのサイズが32×32より小さいか同一である場合には閾値を2に設定し、現在ブロックが32×32より大きい場合には(例えば、現在ブロックが、32×64または64×32サイズのコーディングブロックである場合)、閾値を4に設定することができる。
【0417】
複数個のルックアップテーブルが符号化器/復号器に予め格納される場合がある。複数個のルックアップテーブルは、変換タイプ組み合わせ候補に割り当てられるインデックス値、変換タイプ組み合わせ候補の種類または変換タイプ組み合わせ候補の個数のうち少なくとも一つが相違することができる。
【0418】
現在ブロックのサイズ、形状、予測符号化モード、イントラ予測モード、二次変換を適用するか否かまたは近隣ブロックに変換スキップが適用されているか否かのうち少なくとも一つに基づいて、現在ブロックに対するルックアップテーブルを選択することができる。
【0419】
一例として、現在ブロックのサイズが4×4以下である場合または現在ブロックがインタ予測で符号化された場合には、第1ルックアップテーブルを用い、現在ブロックのサイズが4×4より大きい場合または現在ブロックがイントラ予測で符号化された場合には、第2ルックアップテーブルを用いることができる。
【0420】
または、複数のルックアップテーブルのいずれか一つを示す情報がビットストリームを介してシグナリングされる場合がある。復号器は、情報に基づいて現在ブロックに対するルックアップテーブルを選択することができる。
【0421】
他の例として、現在ブロックのサイズ、形状、予測符号化モード、イントラ予測モード、二次変換を適用するか否かまたは近隣ブロックに変換スキップが適用されているか否かのうち少なくとも一つに基づいて、変換タイプ組み合わせ候補に割り当てられるインデックスが適応的に判定される場合がある。一例として、現在ブロックのサイズが4×4である場合、変換スキップに割り当てられるインデックスが現在ブロックのサイズが4×4より大きい場合、変換スキップに割り当てられるインデックスよりもさらに小さい値を有することができる。具体的には、現在ブロックのサイズが4×4である場合、変換スキップにインデックス0を割り当て、現在ブロックが4×4より大きく、16×16以下である場合、変換スキップに0より大きいインデックス(例えば、インデックス1)を割り当てることができる。現在ブロックが16×16より大きい場合、変換スキップのインデックスに最大値(例えば、5)を割り当てることができる。
【0422】
または、現在ブロックがインタ予測で符号化された場合、変換スキップにインデックス0を割り当てることができる。現在ブロックがイントラ予測で符号化された場合、変換スキップに0より大きいインデックス(例えば、インデックス1)を割り当てることができる。
【0423】
または、現在ブロックがインタ予測で符号化された4×4サイズのブロックである場合、変換スキップにインデックス0を割り当てることができる。一方、現在ブロックがインタ予測で符号化されていないか、現在ブロックが4×4より大きい場合、変換スキップに0より大きい値のインデックス(例えば、インデックス1)を割り当てることができる。
【0424】
表7に挙げられた変換タイプ組み合わせ候補と相違する変換タイプ組み合わせ候補が定義されて使用されることもできる。一例として、水平方向変換または垂直方向変換のいずれか一つに変換スキップを適用し、他の一つにはDCT2、DCT8またはDST7などの変換コアが適用される変換タイプ組み合わせ候補が用いられる場合がある。ここで、現在ブロックのサイズ(例えば、幅および/または高さ)、形状、予測符号化モードまたはイントラ予測モードのうち少なくとも一つに基づいて、水平方向または垂直方向に対する変換タイプ候補として変換スキップを使用するか否かが判定される場合がある。
【0425】
【0426】
現在ブロックの変換タイプを判定するためのインデックス情報が明示的にシグナリングされるか否かを示す情報がビットストリームを介してシグナリングされる場合がある。一例として、シーケンスレベルで、イントラ予測で符号化されたブロックに対して明示的な変換タイプ判定が許容されるか否かを示す情報sps_explicit_intra_mts_flagおよび/またはインタ予測で符号化されたブロックに対して明示的な変換タイプ判定が許容されるか否かを示す情報sps_explicit_inter_mts_flagがシグナリングされる場合がある。
【0427】
明示的な変換タイプ判定が許容される場合、ビットストリームからシグナリングされるインデックス情報tu_mts_idxに基づいて現在ブロックの変換タイプを判定することができる。一方、明示的な変換タイプ判定が許容されない場合、現在ブロックのサイズ、形状、サブブロック単位の変換が許容されるか否か、0ではない変換係数を含むサブブロックの位置、第2変換が行われるか否かまたはサブパーティションイントラ符号化方法を適用するか否かのうち少なくとも一つに基づいて変換タイプが判定される場合がある。一例として、現在ブロックの水平方向変換タイプは、現在ブロックの幅に基づいて判定され、現在ブロックの垂直方向変換タイプは、現在ブロックの高さに基づいて判定される場合がある。例えば、現在ブロックの幅が4より小さいか16より大きい場合、水平方向の変換タイプは、DCT2に判定される場合がある。そうではない場合、水平方向の変換タイプは、DST7に判定される場合がある。現在ブロックの高さが4より小さいか16より大きい場合、垂直方向の変換タイプは、DCT2に判定される場合がある。そうではない場合、垂直方向の変換タイプは、DST7に判定される場合がある。ここで、水平方向の変換タイプおよび垂直方向の変換タイプを判定するために、幅および高さと比較される閾値は、現在ブロックのサイズ、形状またはイントラ予測モードのうち少なくとも一つに基づいて判定される場合がある。
【0428】
または、現在ブロックが高さと幅が同一である正方形である場合、水平方向変換タイプおよび垂直方向変換タイプを同様に設定する一方、現在ブロックが高さと幅が相違する非正方形である場合、水平方向変換タイプおよび垂直方向変換タイプを相違するように設定することができる。一例として、現在ブロックの幅が高さより大きい場合には、水平方向の変換タイプをDST7に判定し、垂直方向の変換タイプをDCT2に判定することができる。現在ブロックの高さが幅より大きい場合には、垂直方向の変換タイプをDST7に判定し、水平方向の変換タイプをDCT2に判定することができる。
【0429】
変換タイプ候補の個数および/または種類または変換タイプ組み合わせ候補の個数および/または種類は、明示的な変換タイプ判定が許容されるか否かによって相違することができる。一例として、明示的な変換タイプ判定が許容される場合、DCT2、DST7およびDCT8が変換タイプ候補として用いられる場合がある。これにより、水平方向変換タイプおよび垂直方向変換タイプのそれぞれは、DCT2、DST8またはDCT8に設定される場合がある。明示的な変換タイプ判定が許容されない場合、DCT2およびDST7のみ変換タイプ候補として用いられる場合がある。これにより、水平方向変換タイプおよび垂直方向変換タイプのそれぞれは、DCT2またはDST7に判定される場合がある。
【0430】
【0431】
復号器では、第2変換の逆変換(第2逆変換)を行い、その遂行結果に対して第1変換の逆変換(第1逆変換)を行うことができる。第2逆変換および第1逆変換を行った結果、現在ブロックに対する残差信号が得られる場合がある。
【0432】
符号化器で変換および量子化を行うと、復号器は、逆量子化および逆変換により残差ブロックを得ることができる。復号器では、予測ブロックと残差ブロックを加算して、現在ブロックに対する復元ブロックを得ることができる。
【0433】
【0434】
現在ブロックの復元ブロックが得られると、インループフィルタリング(In-loop filtering)により量子化および符号化過程で発生する情報の損失を減少させることができる。インループフィルタは、デブロッキングフィルタ(Deblocking filter)、サンプル適応的オフセットフィルタ(Sample Adaptive Offset filter、SAO)または適応的ループフィルタ(Adaptive Loop Filter、ALF)のうち少なくとも一つを含む場合がある。以下、インループフィルタが適用される前の復元ブロックを第1復元ブロックと称し、インループフィルタが適用された後の復元ブロックを第2復元ブロックと称する。
【0435】
第1復元ブロックにデブロッキングフィルタ、SAOまたはALFのうち少なくとも一つを適用して、第2復元ブロックを得ることができる。ここで、SAOまたはALFは、デブロッキングフィルタが適用された後に適用される場合がある。
【0436】
デブロッキングフィルタは、ブロック単位で量子化を行うことによって発生するブロックの境界での画質劣化(Blocking Artifact)を緩和するためのものである。デブロッキングフィルタを適用するために、第1復元ブロックと近隣復元ブロックとの間のブロック強度(Blocking Strength、BS)を判定することができる。
【0437】
図31は、ブロック強度を判定する過程を示すフローチャートである。
【0438】
図31に図示されている例において、Pは、第1復元ブロックを示し、Qは、近隣復元ブロックを示す。ここで、近隣復元ブロックは、現在ブロックの左側または上端に隣り合うものであることができる。
【0439】
図31に図示されている例では、PおよびQの予測符号化モード、0ではない変換係数が含まれているか否か、同一の参照ピクチャを用いてインタ予測されているか否かまたは動きベクトルの差分値が閾値以上であるか否かを考慮してブロック強度が判定されるものと図示されている。
【0440】
ブロック強度に基づいて、デブロッキングフィルタを適用するか否かが判定される場合がある。一例として、ブロック強度が0である場合には、フィルタリングが行われない場合がある。
【0441】
SAOは、周波数領域で量子化を行うことによって発生するリンギング現象(Ringing Artifact)を緩和するためのものである。SAOは、第1復元映像のパターンを考慮して判定されるオフセットを加算または減算することで行われる場合がある。オフセットの判定方法は、エッジオフセット(Edge Offset、EO)またはバンドオフセット(Band Offset)を含む。EOは、周辺画素のパターンによって、現在サンプルのオフセットを判定する方法を示す。BOは、領域内の類似する明るさ値を有する画素の集合に対して共通のオフセットを適用する方法を示す。具体的には、画素の明るさを32個の均等な区間に分け、類似する明るさ値を有する画素を一つの集合に設定することができる。一例として、32個のバンドのうち隣接した4個のバンドを一つのグループに設定し、4個のバンドに属するサンプルには同一のオフセット値を適用することができる。
【0442】
ALFは、第1復元映像またはデブロッキングフィルタが適用された復元映像に予め定義されたサイズ/形状のフィルタを適用して第2復元映像を生成する方法である。下記数式8は、ALFの適用例を示す。
【0443】
【0444】
ピクチャ、コーディングツリーユニット、コーディングブロック、予測ブロックまたは変換ブロック単位で、予め定義されたフィルタ候補のいずれか一つを選択することができる。それぞれのフィルタ候補は、サイズまたは形状のいずれか一つが相違することができる。
【0445】
【0446】
図32に図示されている例のように、5×5、7×7または9×9サイズのダイヤモンド形状のうち少なくとも一つを選択することができる。
【0447】
クロマ成分に対しては、5×5サイズのダイヤモンド形状のみが使用される場合がある。
【0448】
【0449】
パノラミックビデオ、360度ビデオまたは4K/8K UHD(Ultra High Definition)映像などの高解像度映像のリアルタイムまたは低遅延符号化のために、一つのピクチャを複数個の領域に分け、複数個の領域を並列に符号化/復号する方案を考慮することができる。具体的には、処理目的に応じて、ピクチャをタイルまたはスライス(またはタイルグループ)に分割することができる。
【0450】
タイルは、並列符号化/復号の基本単位を示す。各タイルは、並列処理される場合がある。タイルは、長方形の形状を有することができる。または、非長方形状のタイルを許容することもできる。
【0451】
非長方形状のタイルを許容するか否かまたは非長方形状のタイルが存在するか否かを示す情報がビットストリームを介してシグナリングされる場合がある。
【0452】
タイルの符号化/復号の時に、他のタイルのデータは用いないように設定される場合がある。タイル間の符号化/復号従属性を除去し、タイルの並列処理を支援することができる。具体的には、タイル単位で、CABAC(Context adaptive Binary Arithmetic Coding)コンテキストの確率テーブルを初期化することができ、タイルの境界では、インループフィルタが適用されないように設定することができる。また、他のタイルにあるデータを動きベクトル誘導のための候補として使用しない場合がある。例えば、他のタイルにあるデータは、マージ候補、動きベクトル予測候補(AMVP候補)またはモーション情報候補として用いられないように設定される場合がある。また、他のタイルにあるデータをシンボルのコンテキスト計算に用いないように設定することができる。
【0453】
【0454】
スライスヘッダーを介して映像符号化/復号情報がシグナリングされる場合がある。スライスヘッダーを介してシグナリングされる情報は、スライスに含まれたコーディングツリーユニットまたはタイルに共通に適用される場合がある。スライスをタイルグループと称することもできる。
【0455】
図33は、本発明の一実施形態によるピクチャ分割方法を示す図である。
【0456】
先ず、現在ピクチャを複数の処理単位に分割するか否かを判定することができる(S3310)。ここで、処理単位は、タイルまたはスライスのうち少なくとも一つを含む場合がある。一例として、現在ピクチャが複数のタイルまたはスライスに分割されるか否かを示すシンタックスno_pic_partition_flagがビットストリームを介してシグナリングされる場合がある。シンタックスno_pic_partition_flagの値が0であることは、現在ピクチャが少なくとも一つのタイルまたは少なくとも一つのスライスに分割されることを示す。一方、シンタックスno_pic_partition_flagの値が1であることは、現在ピクチャが複数のタイルまたは複数のスライスに分割されないことを示す。
【0457】
現在ピクチャが複数の処理単位に分割されないものに判定される場合、現在ピクチャの分割過程を終了することができる。この場合、現在ピクチャは、一つのタイルおよび一つのスライス(またはタイルグループ)で構成されたものと理解し得る。
【0458】
または、ピクチャに複数のタイルが存在するか否かを示す情報がビットストリームを介してシグナリングされることもできる。情報は、ピクチャに複数のタイルが存在するか否かを示す1ビットのフラグまたはピクチャ内のタイルの個数を特定する情報のうち少なくとも一つを含む場合がある。
【0459】
現在ピクチャが複数の処理単位に分割されるものと判定される場合、ビットストリームを介してタイル分割情報をシグナリングすることができる。シグナリングされたタイル分割情報に基づいて、ピクチャを少なくとも一つのタイルに分割することができる(S3320)。
【0460】
現在ピクチャが複数のタイルに分割された場合、複数のタイルを併合するか、一つのタイルを分割して、スライスを判定することができる(S3330)。
【0461】
以下、本発明によるタイル分割方法およびスライス判定方法について詳細に説明する。
【0462】
図34は、ピクチャが複数のタイルに分割された例を示す。
【0463】
タイルは、少なくとも一つのコーディングツリーユニットを含む場合がある。タイルの境界は、コーディングツリーユニットの境界と一致するように設定される場合がある。すなわち、一つのコーディングツリーユニットが複数個に分割される分割形状は許容されない場合がある。
【0464】
ピクチャを複数個のタイルに分割する時に、隣接するタイルの高さまたは隣接するタイルの幅が同一の値を有するように設定することができる。
【0465】
一例として、
図34に図示されている例のように、同一のタイル行に属するタイルの高さおよび/または同一のタイル列に属するタイルの幅は、同様に設定される場合がある。同一のタイル行に属するタイルを水平方向タイルセットと称し、同一のタイル列に属するタイルを垂直方向タイルセットと称することもできる。
【0466】
または、符号化/復号しようとするタイルの幅および/または高さが、前のタイルの幅および/または高さと同様に設定されるか否かを示す情報がシグナリングされることもできる。
【0467】
ピクチャの分割形状を示す情報がビットストリームを介してシグナリングされる場合がある。情報は、ピクチャパラメータセット、シーケンスパラメータセットまたはスライスヘッダーを介して符号化されてシグナリングされる場合がある。
【0468】
タイルのサイズを判定するための情報が符号化されてシグナリングされる場合がある。一例として、i番目のタイル列の幅を示すシンタックス要素tile_width_minus1[i]およびi番目のタイル行の高さを示すシンタックス要素tile_height_minus1[i]がビットストリームに符号化される場合がある。
【0469】
連続するタイル列のサイズが同一である場合、連続するタイル列のうち一つに対してのみ幅情報をシグナリングし、残りのタイル列に対しては幅情報の符号化/復号を省略することができる。
【0470】
一例として、ピクチャ内のi番目のタイル列から最後のタイル列までの幅が同一である場合、i番目のタイル列に対してのみシンタックスtile_width_minus1[i]をシグナリングし、残りのタイル列は、i番目のタイル列の幅と同様に設定することができる。
【0471】
連続する複数のタイル列の幅が同一であるか否かを示す情報を符号化してシグナリングすることができる。一例として、シンタックスrem_tile_col_equal_flag[i]は、インデックスがiであるタイル列からインデックスがN-1であるタイル列までの幅が同一であるか否かを示す。ここで、Nは、タイル列の個数を示すことができる。すなわち、インデックスがN-1であるタイル列は、ピクチャ内の最後のタイル列を示すことができる。
【0472】
シンタックスrem_tile_col_equal_flag[i]が1である場合、インデックスがiであるタイル列に対しては、幅を示すシンタックスtile_width_minus1[i]がシグナリングされる一方、インデックスがiより大きいタイル列に対しては、タイル列の幅を示すシンタックスの符号化/復号を省略することができる。
【0473】
タイル列の幅を示すシンタックスの符号化/復号が省略される場合、i番目のタイル列の幅と残りの領域の幅のうち最小値を次のタイル列の幅に設定することができる。一例として、i番目のタイル列の幅を変数PrevTileColWidthに設定し、ピクチャ内の残りの領域の幅を変数RemainingColWidthに設定した場合、インデックスがiより大きいタイル列のサイズは、変数PrevTileColWidthおよび変数RemainingColWidthのうち小さい値に設定される場合がある。
【0474】
他の例として、シンタックスrem_tile_col_equal_flag[i]を、インデックスが0であるタイル列からインデックスがiであるタイル列までの幅が同一であるか否かを示すように設定することができる。
【0475】
連続するタイル行のサイズが同一である場合、連続するタイル行のうち一つに対してのみ高さ情報をシグナリングし、残りのタイル行に対しては、高さ情報の符号化/復号を省略することができる。
【0476】
一例として、ピクチャ内のi番目のタイル行から最後のタイル行までの高さが同一である場合、i番目のタイル行に対してのみシンタックスtile_height_minus1[i]をシグナリングし、残りのタイル行は、i番目のタイル行の高さと同様に設定することができる。
【0477】
連続する複数のタイル行の高さが同一であるか否かを示す情報を符号化してシグナリングすることができる。一例として、シンタックスrem_tile_row_equal_flag[i]は、インデックスがiであるタイル行からインデックスがN-1であるタイル行までの高さが同一であるか否かを示す。ここで、Nは、タイル行の個数を示すことができる。すなわち、インデックスがN-1であるタイル行は、ピクチャ内の最後のタイル行を示すことができる。
【0478】
シンタックスrem_tile_row_equal_flag[i]が1である場合、インデックスがiであるタイル行に対しては、高さを示すシンタックスtile_height_minus1[i]がシグナリングされる一方、インデックスがiより大きいタイル行に対しては、タイル行の高さを示すシンタックスの符号化/復号を省略することができる。
【0479】
タイル行の高さを示すシンタックスの符号化/復号が省略される場合、i番目のタイル行の高さと残りの領域の高さのうち最小値を次のタイル行の高さに設定することができる。一例として、i番目のタイル行の高さを変数PrevTileRowHeightに設定し、ピクチャ内の残りの領域の高さを変数RemainingRowHeightに設定した場合、インデックスがiより大きいタイル行のサイズは、変数PrevTileRowHeightおよび変数RemainingRowHeightのうち小さい値に設定される場合がある。
【0480】
他の例として、シンタックスrem_tile_row_equal_flag[i]を、インデックスが0であるタイル行からインデックスがiであるタイル行までの高さが同一であるか否かを示すように設定することもできる。
【0481】
表8は、シンタックスrem_tile_col_equal_flag[i]およびシンタックスrem_tile_row_equal_flag[i]を含むシンタックス構造を例示するものである。
【0482】
【0483】
現在ピクチャ内のタイル列の幅が明示的にシグナリングされるタイル列の個数を特定するための情報をビットストリームを介してシグナリングすることもできる。一例として、タイル列の幅がシグナリングされるタイル列の個数を判定するためのシンタックスnum_exp_tile_columns_minus1がビットストリームを介してシグナリングされる場合がある。シンタックスnum_exp_tile_columns_minus1は、タイル列の幅がシグナリングされるタイル列の個数から1を差分した値であることができる。
【0484】
シンタックスnum_exp_tile_columns_minus1に基づいて判定された個数だけ、タイル列の幅を特定するためのシンタックスが符号化されてシグナリングされる場合がある。一例として、i番目のタイル列の幅を示すシンタックスtile_width_minus1[i]がビットストリームを介してシグナリングされる場合がある。シンタックスtile_width_minus1[i]は、タイル列が含むコーディングツリーユニット列の個数から1を差分したものであることができる。
【0485】
タイル列のインデックスiが幅が明示的にシグナリングされるタイル列の個数より小さい場合、当該タイル列の幅は、ビットストリームを介してシグナリングされるシンタックスtile_width_minus1[i]に基づいて判定される場合がある。
【0486】
一方、タイル列のインデックスjが幅が明示的にシグナリングされるタイル列の個数以上である場合、当該タイル列の幅は、最後にシグナリングされたシンタックスtile_width_minus1[l]に基づいて判定される場合がある。ここで、lは、最後に幅がシグナリングされたタイル列のインデックスを示し、jより小さい整数であることができる。一例として、現在ピクチャの幅から前のタイル列の幅を差分した値が、シンタックスtile_width_minus1[l]に1を加算した値以上である場合、タイル列jの幅は、シンタックスtile_width_minus1[l]に1を加算した値に設定される場合がある。一方、現在ピクチャの幅から前のタイル列の幅を差分した値が、シンタックスtile_width_minus1[l]に1を加算した値より小さい場合、現在ピクチャの幅から前のタイル列の幅を差分した差分値をタイル列jの幅に設定することができる。
【0487】
表9は、タイル列の幅を判定する過程を示すものである。
【0488】
【0489】
表9において、変数PicWidthInCtbsYは、現在ピクチャが含むコーディングツリーユニット列の個数を示す。一例として、変数PicWidthInCtbsYは、以下の数式9のように誘導される場合がある。
【0490】
【0491】
変数reminingWidthInCtbsYは、変数PicWidthInCtbsYから累積したタイル列の幅を差分した値を示す。一例として、インデックスがiであるタイル列に対して、remainingWidthInCtbsYは、PicWidthInCtbsYから、0番からi-1番までタイル列の幅を合算した値を差分して誘導される場合がある。
【0492】
表9に示れている例のように、変数uniformTileColWidthは、最後に明示的にシグナリングされたタイル列の幅tile_column_width_minus1[num_exp_tile_columns_minus1]に1を加算して誘導される場合がある。ここで、現在ピクチャ内の残りのコーディングツリーユニット列の個数を示す変数remainingWidthInCtbYが変数uniformTileColWidth以上であると、残りの領域は、変数uniformTileColWidthのサイズに分割される場合がある。
【0493】
一方、現在ピクチャ内の残りのコーディングツリーユニット列の個数を示す変数remainingWidthInCtbYが変数uniformTileColWidthより小さいと、残りの領域がそのまま最後のタイル列に設定される場合がある。
【0494】
一方、タイル列のインデックスjが幅が明示的にシグナリングされるタイル列の個数以上である場合、当該タイル列の幅は、変数uniformTileColWidthおよびremainingWidthInCtbYのうち小さい値に設定される場合がある。
【0495】
すなわち、幅が明示的にシグナリングされるタイル列以外の残りのタイル列の幅は、幅が明示的にシグナリングされるタイル列のうち最後のタイル列の幅より小さいか同一の値を有することができる。
【0496】
または、現在ピクチャ内のタイル行の高さがシグナリングされるタイル行の個数を特定するための情報がビットストリームを介してシグナリングされる場合がある。一例として、タイル行の高さがシグナリングされるタイル行の個数を判定するためのシンタックスnum_exp_tile_rows_minus1がビットストリームを介してシグナリングされる場合がある。シンタックスnum_exp_tile_rows_minus1は、タイル行の高さがシグナリングされるタイル行の個数から1を差分した値であることができる。
【0497】
シンタックスnum_exp_tile_rows_minus1に基づいて判定された個数だけ、タイル行の高さを特定するためのシンタックスが符号化されてシグナリングされる場合がある。一例として、i番目のタイル行の高さを示すシンタックスtile_height_minus1[i]がビットストリームを介してシグナリングされる場合がある。シンタックスtile_height_minus1[i]は、タイル行が含むコーディングツリーユニット行の個数から1を差分したものであることができる。
【0498】
タイル行のインデックスiが高さが明示的にシグナリングされるタイル行の個数より小さい場合、当該タイル行の高さは、ビットストリームを介してシグナリングされるシンタックスtile_height_minus1[i]に基づいて判定される場合がある。
【0499】
一方、タイル行のインデックスjが高さが明示的にシグナリングされるタイル行の個数以上である場合、当該タイル行の高さは、最後にシグナリングされたシンタックスtile_height_minus1[l]に基づいて判定される場合がある。ここで、lは、最後に高さがシグナリングされたタイル行のインデックスを示し、jより小さい整数であることができる。
【0500】
一例として、現在ピクチャの高さから前のタイル行の高さを差分した値が、シンタックスtile_height_minus1[l]に1を加算した値以上である場合、タイル行jの高さは、シンタックスtile_height_minus1[l]に1を加算した値に設定される場合がある。一方、現在ピクチャの高さから前のタイル行の高さを差分した値が、シンタックスtile_height_minus1[l]に1を加算した値より小さい場合、現在ピクチャの高さから前のタイル行の高さを差分した差分値をタイル行jの高さに設定することができる。
【0501】
表10は、タイル行の高さを判定する過程を示すものである。
【0502】
【0503】
表10において、変数PicHeightInCtbsYは、現在ピクチャが含むコーディングツリーユニット行の個数を示す。一例として、変数PicWidthInCtbsYは、以下の数式10のように誘導される場合がある。
【0504】
【0505】
変数reminingHeightInCtbsYは、変数PicHeightInCtbsYから累積したタイル行の高さを差分した値を示す。一例として、インデックスがiであるタイル行に対して、remainingHeightInCtbsYは、PicHeightInCtbsYから、0番からi-1番までタイル行の高さを合算した値を差分して誘導される場合がある。
【0506】
表10に示れている例のように、変数uniformTileRowHeightは、最後に明示的にシグナリングされたタイル行の高さtile_row_height_minus1[num_exp_tile_rows_minus1]に1を加算して誘導される場合がある。ここで、現在ピクチャ内の残りのコーディングツリーユニット行の個数を示す変数remainingHeightInCtbYが変数uniformTileRowHeight以上であると、残りの領域は、変数uniformTileRowHeightのサイズに分割される場合がある。
【0507】
一方、現在ピクチャ内の残りのコーディングツリーユニット行の個数を示す変数remainingHeightInCtbYが変数uniformTileRowHeightより小さいと、残りの領域がそのまま最後のタイル行に設定される場合がある。
【0508】
一方、タイル行のインデックスjが高さが明示的にシグナリングされるタイル行の個数以上である場合、当該タイル行の高さは、変数uniformTileRowHeightおよびremainingHeightInCtbYのうち小さい値に設定される場合がある。
【0509】
すなわち、高さが明示的にシグナリングされるタイル行以外の残りのタイル行の高さは、高さが明示的にシグナリングされるタイル行のうち最後のタイル行の幅より小さいか同一の値を有することができる。
【0510】
表11は、幅が明示的にシグナリングされるタイル列の個数を示すシンタックスおよび高さが明示的にシグナリングされるタイル行の個数を示すシンタックスを含むシンタックステーブルを例示するものである。
【0511】
【0512】
一方、シンタックスloop_filter_across_tiles_enabled_flagは、ピクチャパラメータセットを参照するピクチャ内のタイルの境界でインループフィルタを適用することが許容されるか否かを示す。ここで、インループフィルタは、デブロッキングフィルタ、ALFまたはSAOのうち少なくとも一つを含む場合がある。フラグloop_filter_across_tiles_enabled_flagの値が1であることは、ピクチャパラメータセットを参照するピクチャ内のタイルの境界を横切るインループフィルタが適用可能であることを示す。一方、フラグloop_filter_across_tiles_enabled_flagの値が0であることは、ピクチャパラメータセットを参照するピクチャ内のタイルの境界でインループフィルタを適用することが許容されないことを示す。
【0513】
シンタックスloop_filter_across_slices_enabled_flagは、ピクチャパラメータセットを参照するピクチャ内のスライスの境界でインループフィルタを適用することが許容されるか否かを示す。ここで、インループフィルタは、デブロッキングフィルタ、ALFまたはSAOのうち少なくとも一つを含む場合がある。フラグloop_filter_across_slices_enabled_flagの値が1であることは、ピクチャパラメータセットを参照するピクチャ内のスライスの境界を横切るインループフィルタが適用可能であることを示す。一方、フラグloop_filter_across_slices_enabled_flagの値が0であることは、ピクチャパラメータセットを参照するピクチャ内のスライスの境界でインループフィルタを適用することが許容されないことを示す。
【0514】
【0515】
タイルを再帰的に分割することができる。一例として、一つのタイルを複数のタイルに分割することができる。
【0516】
タイルを分割して生成された複数のタイルそれぞれをサブタイルまたはブリックと称することもできる。ブリックは、並列処理の単位であることができる。一例として、ブリックは、互いに独立して符号化/復号される場合がある。ブリックに含まれたブロックの符号化/復号の時に、他のブロックのデータを用いないように設定することができる。一例として、他のブリックに含まれたサンプルは、イントラ予測のための参照サンプルとして利用不可能なものに設定される場合がある。または、他のブリックにあるデータは、マージ候補、動きベクトル予測候補(AMVP候補)またはモーション情報候補として用いられないように設定される場合がある。または、他のブリックにあるデータをシンボルのコンテキスト計算に用いない場合がある。
【0517】
図35は、ブリックの生成様相を説明するための図である。
【0518】
タイルを水平方向に分割して、ブリックを生成することができる。一例として、
図35に図示されている例では、現在ピクチャ内の最後のタイル列に属するタイルが2個のブリックに分割されるものと図示されている。
【0519】
タイルにラスタースキャンが適用されると仮定する場合、ブリックの間にも、ラスタースキャンが適用される場合がある。一例として、特定のタイルに含まれたブリックをすべてスキャンした後、次のタイルをスキャンすることができる。すなわち、ブリックは、タイルと同等な地位を有することができる。
【0520】
ブリックの境界は、コーディングツリーユニットの境界と一致することができる。すなわち、タイル内の少なくとも一つのコーディングツリーユニット行をブリックと定義することができる。
【0521】
タイルおよびブリックは、タイルインデックスにより識別される場合がある。ラスタースキャン順序にしたがって、タイルおよびブリックそれぞれにタイルインデックスが割り当てられる場合がある。一つのタイルが複数のブリックに分割された場合、複数のブリックそれぞれにタイルインデックスが割り当てられる場合がある。
【0522】
後述する実施形態において、「タイル」という用語は、タイルだけではなく、タイルを分割することで生成されたタイル(すなわち、サブタイルまたはブリック)を含む場合がある。
【0523】
【0524】
少なくとも一つ以上のタイルを一つの処理単位と定義することができる。一例として、複数個のタイルを一つのスライスと定義することができる。スライスをタイルグループと称することもできる。
【0525】
または、一つのタイルを複数個の処理単位に分割することもできる。一例として、一つのタイルを複数個のスライスに分割することもできる。ここで、一つのスライスは、少なくとも一つのコーディングツリーユニット列を含む場合がある。一つのタイルが複数のスライスに分割される場合、各スライスの高さを示す情報がビットストリームを介してシグナリングされる場合がある。
【0526】
スライスヘッダーを介して映像符号化/復号情報がシグナリングされる場合がある。スライスヘッダーを介してシグナリングされる情報は、スライスに属するタイルおよび/またはブロックに共通して適用される場合がある。
【0527】
スライスタイプを示す情報を、ビットストリームを介してシグナリングすることができる。情報は、現在ピクチャ内のスライスの定義方法を示す。一例として、ビットストリームを介してスライスタイプを示すシンタックスrect_slice_flagがシグナリングされる場合がある。
【0528】
シンタックスrec_slice_flagは、タイルのラスタースキャン順序に基づいてスライスが定義されるか否かまたは四角形状にスライスが定義されるか否かを示す。一例として、rec_slice_flagが0であることは、タイルのラスタースキャン順序に基づいてスライスが定義されることを示す。一方、rec_slice_flagが1であることは、四角形状にスライスが定義されることを示す。
【0529】
以下、スライスを判定するための上記の二つの方法について詳細に説明する。
【0530】
ラスタースキャンに基づく定義方法は、ラスタースキャン順序にしたがって、少なくとも一つ以上のタイルを特定した後、特定された少なくとも一つ以上のタイルをスライスと定義するためのものである。ラスタースキャンに基づく定義方法による場合、一つ以上の連続したタイルがスライスと定義される場合がある。ここで、連続したタイルは、ラスタースキャン順序にしたがって判定される場合がある。ラスタースキャンスライスが適用される場合、非四角形状のスライスが生成されることもできる。
【0531】
図36および
図37は、ラスター順序に基づいてスライスを定義した例を示す図である。
【0532】
一例として、
図36に図示されている例において、最初のスライスslice0が3個のタイルを含むと仮定した時に、最初のスライスslice0は、ラスタースキャン順序にしたがって、Tile0~Tile2を含むものと定義される場合がある。二番目のスライスslice1が6個のタイルを含むと仮定した時に、二番目のスライスslice1は、ラスタースキャン順序にしたがって、Tile3~Tile8を含むものと定義される場合がある。最後のスライスslice2は、ラスタースキャン順序にしたがって、残りのタイルTile9~Tile11を含む場合がある。
【0533】
ラスタースキャン順序に基づいて、スライスを定義する場合、各スライスが含むタイルの個数を示す情報がシグナリングされる場合がある。最後のスライスに対しては、スライスが含むタイルの個数を示す情報のシグナリングが省略される場合がある。
【0534】
スライスが複数のタイルを含む場合、スライスに含まれたタイルの幅または高さは相違することができる。一例として、二番目のスライスslice1が含むタイルのうち、Tile3の高さは、残りのタイルと相違するものと図示されている。
【0535】
四角形状のスライスの定義方法は、長方形状のスライスのみを許容する分割方法である。四角形状のスライスの定義方法が適用される場合、スライスの4つの角に位置するタイルが同じ行または同じ列に属する。
【0536】
図38は、四角形状のスライスのみが許容される例を示す図である。
【0537】
図38に図示されている例のように、四番目のスライスslice3は、Tile5、Tile6、Tile9およびTile10を含む。図示されている例のように、スライスが複数のタイルを含む場合、スライスを構成する左上端タイルおよび右下端タイルを二つの頂点とする長方形を一つのスライスと定義することができる。
【0538】
スライスの境界は、ピクチャの境界および/またはタイルの境界と一致することができる。一例として、スライスの左側境界または上端境界がピクチャの境界に設定されるか、スライスの左側境界または上端境界がタイルの境界に設定される場合がある。
【0539】
または、四角形状のスライスの定義方法が適用される場合、一つのタイルを複数個の四角形状のスライスに分割することもできる。
【0540】
四角形状のスライスの定義方法が適用される場合(例えば、rect_slice_flagが1である場合)、ピクチャが単一のスライスで構成されているか否かを示す情報がシグナリングされる場合がある。一例として、ピクチャ内のスライスの個数が1個であるか否かを示すシンタックスone_slice_in_pic_flagがビットストリームを介してシグナリングされる場合がある。フラグone_slice_in_pic_flagが1であることは、ピクチャが1個のスライスで構成されていることを示す。一方、フラグone_slice_in_pic_flagが0であることは、ピクチャが少なくとも2個以上のスライスで構成されていることを示す。フラグone_slice_in_pic_flagの値が0である場合、スライスの構成情報がさらにシグナリングされる場合がある。一例として、表12は、シンタックスone_slice_in_pic_flagを含むシンタックステーブルを例示するものである。
【0541】
【0542】
例示されているように、one_slice_in_pic_flagが1である場合、後述するスライスの構成に関する情報(例えば、スライスが含むタイルのインデックスを示すシンタックスtop_left_brick_idx[i]および/または第1スライスが含むタイルと第2スライスが含むタイルとのインデックス差分を示すシンタックスbottom_right_bric_idx_delta[i]など)の符号化が省略される場合がある。すなわち、one_slice_in_pic_flagは、スライスの構成に関する情報が符号化されているか否かを判定するために用いられる場合がある。
【0543】
ピクチャは、サブピクチャを示すこともできる。ピクチャは、少なくとも一つのサブピクチャに分割される場合がある。サブピクチャ分割関連情報は、シーケンスレベルでシグナリングされる場合がある。一例として、シーケンスパラメータセットを介してシグナリングされるサブピクチャ分割関連情報は、シーケンスパラメータセットを参照するすべてのピクチャに共通に適用される場合がある。
【0544】
サブピクチャ分割関連情報は、ピクチャが複数のサブピクチャに分割されるか否かを示す情報、サブピクチャの個数を示す情報、サブピクチャのサイズを示す情報またはサブピクチャが独立したピクチャとして機能するか否かを示す情報を含む場合がある。
【0545】
サブピクチャ別に、単一のスライスで構成されているか否かを示すシンタックスone_slice_in_pic_flagがシグナリングされる場合がある。
【0546】
または、シーケンスまたはピクチャレベルで、各サブピクチャが単一のスライスで構成されているか否かを示すシンタックスone_slice_in_pic_flagがシグナリングされる場合がある。一例として、フラグone_slice_in_pic_flagが1であることは、現在ピクチャ内のすべてのサブピクチャが単一のスライスで構成されていることを示す。この場合、スライス構成情報の符号化が省略され、サブピクチャの分割情報に基づいて、スライスが定義される場合がある。
【0547】
一方、フラグone_slice_in_pic_flagが0であることは、現在ピクチャ内の少なくとも一つのサブピクチャが複数のスライスで構成されていることを示す。この場合、サブピクチャ分割情報とは別にスライス構成情報が符号化される場合がある。
【0548】
ピクチャが複数のスライスで構成されているものと判定される場合、ピクチャ内のスライスの個数を示すシンタックスが符号化されてシグナリングされる場合がある。一例として、ビットストリームを介して、ピクチャ内のスライスの個数を示すシンタックスnum_slices_in_pic_minus2がシグナリングされる場合がある。シンタックスnum_slices_in_pic_minus2は、ピクチャ内のスライスの個数から2を差分した値を示すことができる。これにより、復号器は、シンタックスnum_slices_in_pic_minus2が示す値に2を加算して、スライスの総個数を判定することができる。
【0549】
シンタックスnum_slices_in_pic_minus2の代わりに、ピクチャ内のスライスイの個数から1を差分した値を示すシンタックスnum_slices_in_pic_minus1を符号化することもできる。
【0550】
四角形状のスライス定義方法が適用される場合、各スライスが含むタイルを判定するために、各スライスが含むタイルを識別するための情報がシグナリングされる場合がある。情報は、スライスの最初のタイルまたは最後のタイルのうち少なくとも一つを特定することに用いられる場合がある。タイル間の順番は、所定のスキャン順序にしたがって判定される場合がある。一例として、ラスタースキャン順序にしたがう場合、最初のタイルは、スライスの左上端に位置するタイルを示し、最後のタイルは、スライスの右下端に位置するタイルを示す。
【0551】
スライス内の左上端に位置するタイルのインデックスまたはスライスの右下端に位置するタイルのインデックスのうち少なくとも一つを識別するための情報がビットストリームを介してシグナリングされる場合がある。一例として、スライスの左上端に位置するタイルのインデックスを識別するためのシンタックスtop_left_tile_idxまたはスライスの右下端に位置するタイルのインデックスを識別するためのシンタックスbottom_right_tile_idxのうち少なくとも一つがビットストリームを介してシグナリングされる場合がある。最後のスライスに対しては、スライスの左上端に位置するタイルのインデックスを識別するためのシンタックスまたはスライスの右下端に位置するタイルのインデックスを識別するためのシンタックスのうち少なくとも一つの符号化が省略される場合がある。現在ピクチャ内の前のスライスが占める領域以外の残りの領域が、最後のスライスに設定される場合がある。
【0552】
一例として、
図38に図示されている例において、slice0、slice1およびslice2に対しては、各スライスの左上端に位置するタイルのインデックスtop_left_tile_idxおよび各スライスの右下端に位置するタイルのインデックスbottom_right_tile_idxがシグナリングされる場合がある。一方、ピクチャ内の最後のスライスであるslice3に対しては、top_left_tile_idxおよびbottom_right_tile_idxの符号化が省略される場合がある。ピクチャ内の最後のスライスであるslice3の左上端タイルのインデックスは、ピクチャでslice0、slice1およびslice2以外の残りの領域内の左上端に位置するタイルのインデックスに設定され、slice3の右下端タイルのインデックスは、残りの領域内の右下端に位置するタイル(または、ピクチャの右下端に位置するタイル)のインデックスに設定される場合がある。
【0553】
または、スライスに含まれたタイルのインデックスを特定するための差分情報を符号化してシグナリングすることができる。一例として、スライスの左上端に位置するタイルのインデックスと、スライスの右下端に位置するタイルのインデックスとの差分値を示す情報をビットストリームを介してシグナリングすることができる。一例として、i番目のスライスに対して、スライスの左上端に位置するタイルのインデックスを識別するためのシンタックスtop_left_tile_idx[i]およびスライスの左上端に位置するタイルのインデックスとスライスの右下端に位置するタイルのインデックスとの差分を示すシンタックスbottom_right_tile_idx_delta[i]がシグナリングされる場合がある。i番目のスライスの右下端タイルのインデックスは、top_left_tile_idx[i]およびbottom_right_tile_idx_delta[i]を合算して誘導される場合がある。最後のスライスに対しては、スライスの左上端に位置するタイルのインデックスを示すシンタックスまたはスライスの左上端に位置するタイルのインデックスとスライスの右下端に位置するタイルのインデックスとの差分を示すシンタックスのうち少なくとも一つの符号化が省略される場合がある。現在ピクチャ内の前のスライスが占める領域以外の残りの領域が最後のスライスに設定される場合がある。
【0554】
または、水平方向タイルインデックス差分情報または垂直方向タイルインデックス差分情報のうち少なくとも一つを符号化してシグナリングすることができる。水平方向タイルインデックス差分情報は、最初のタイルのインデックスと、最初のタイルと同一のタイル行に含まれた最右側タイルのインデックスとの差分を示すことができる。垂直方向タイルインデックス差分情報は、最初のタイルのインデックスと、最初のタイルと同一のタイル列に含まれた最下端タイルのインデックスとの差分を示すことができる。
【0555】
スライスの位置に応じて、符号化される差分情報タイプが判定される場合がある。一例として、ピクチャの右側境界または下端境界に隣接するスライスに対しては、水平方向タイルインデックス差分情報または垂直方向インデックス差分情報を符号化してシグナリングすることができる。左上端タイルと右上端タイルとのインデックス差分を示す情報の代わりに、水平方向タイルインデックス差分情報または垂直方向インデックス差分情報を符号化することで、ビット量を減少させることができる。
【0556】
または、ピクチャが少なくとも一つ以上のスライス行に分割される場合、ピクチャの左側境界に隣接するスライスに対しては、左上端タイルと右下端タイルとのインデックス差分を示す情報を符号化することができる。同一の行に属するスライスは、同一の高さを有するように設定される場合がある。
【0557】
第1スライスが含むタイルのインデックスと第2スライスが含むタイルのインデックスとの差分情報を符号化してシグナリングすることもできる。ここで、第1スライスおよび第2スライスは、スキャン順序に基づいて判定され、各スライスが占めるタイルは相違することができる。
【0558】
一例として、第1スライスを構成するタイルと第2スライスを構成するタイルが相違する場合、第2スライスのインデックスは、第1スライスのインデックスiに1を加算したものであることができる。
【0559】
または、第1タイルが複数のスライスを含むように分割された場合、第1タイルに含まれた第1スライスと、スキャン順序上、第1タイルの次のタイルである第2タイルを含む第2スライスまたは第2タイルに含まれた第2スライスとの差分情報が符号化される場合がある。ここで、第1タイルに含まれた複数のスライスのうち最初のスライスまたは最後のスライスに対してのみ差分情報が符号化される場合がある。
【0560】
第1スライスと第2スライスとの差分情報を誘導するために用いられるタイルは、スライスの左上端、右上端、右下端、左下端または中央に位置するものであることができる。
【0561】
表13は、差分情報を含むシンタックステーブルを例示するものである。
【0562】
【0563】
一例として、i番目のスライスの左上端タイルと前のスライス(すなわち、i-1番目のスライス)の左上端タイルとのインデックス差分を示すシンタックスtop_left_brick_idx_delta[i]がビットストリームを介してシグナリングされる場合がある。
【0564】
差分情報に基づいて、i番目のスライス内の左上端タイルの位置が判定される場合がある。具体的には、i番目のスライスの左上端タイルのインデックスは、i-1番目のスライスの左上端タイルのインデックスとシンタックスtop_left_brick_idx_delta[i]を合算して誘導することができる。数式11は、i番目のスライスの左上端タイルのインデックスを誘導する例を示すものである。
【0565】
【0566】
数式11において、TopLeftBrickIdx[i-1]は、i-1番目のスライスの左上端タイルのインデックスを示す。
【0567】
最初のスライス(すなわち、インデックスiが0であるスライス)に対しては、前のスライスとの差分情報を示すシンタックスtop_left_brick_idx_delta[i]の符号化を省略することができる。最初のスライスに対しては、スライスの左上端タイルと右上端タイルとのインデックス差分を示すシンタックスbottom_right_brick_idx_delta[i]を符号化してシグナリングすることができる。
【0568】
表14は、差分情報を用いて、各タイルが属するスライスを特定する過程を示す例である。
【0569】
【0570】
NumBricksInSlice[i]は、スライスiが含むタイルの個数を示す。TopLeftBrickIdx[i]は、スライスiの左上端タイルのインデックスを示す。botRightBkIdxは、右上端タイルのインデックスを示す。BrickColBd[j]は、タイルjが属するタイル列のインデックスを示す。BrickRowBd[j]は、タイルjが属するタイル行のインデックスを示す。BricksToSliceMap[j]=iは、タイルjをスライスiに追加することを示す。
【0571】
シンタックスtop_left_brick_idx_delta[i]の代わりに、i番目のスライスの右下端タイルと前のスライス(すなわち、i-1番目のスライス)の右下端タイルとのインデックス差分を示すシンタックスbottom_right_brick_idx_delta[i]をビットストリームを介してシグナリングすることもできる。この場合、i番目のスライスの右下端タイルのインデックスは、前のスライスの右下端タイルのインデックスにシンタックスbottom_right_brick_idx_delta[i]を加算して誘導される場合がある。
【0572】
最初のスライスに対するbottom_right_brick_idx_delta[0]は、最初のスライスの右下端タイルのインデックスと同様に設定される場合がある。すなわち、最初のスライスの右下端タイルのインデックスは、シンタックスbottom_right_brick_idx_delta[0]と同様に設定される場合がある。
【0573】
ビットストリームを介して、ピクチャ内のi番目のスライスに含まれたタイルのインデックスが、i-1番目のスライスに含まれたタイルのインデックスより大きい値を有するか否かを示す情報が符号化されてシグナリングされる場合がある。一例として、シンタックスbottom_right_increasing_order_flagがビットストリームを介してシグナリングされる場合がある。フラグbottom_right_increasing_order_flagが1であることは、ピクチャ内のi番目のスライスに含まれたタイルのインデックスは、i-1番目のスライスに含まれたタイルのインデックスより常に大きい値を有することを示す。一方、bottom_right_increasing_order_flagが0であることは、ピクチャ内の少なくとも一つのスライスに含まれたタイルのインデックスが、前のスライスに含まれたタイルのインデックスより小さい値を有し得ることを示す。
【0574】
スライス内の左上端タイルのインデックスと、スライスの幅または高さのうち少なくとも一つを特定する情報を用いてスライスを定義することができる。一例として、i番目のスライスを幅を示すシンタックスslice_width_in_tiles_minus1[i]またはi番目のスライスの高さを示すシンタックスslice_height_in_tiles_minus1[i]のうち少なくとも一つがビットストリームを介してシグナリングされる場合がある。
【0575】
シンタックスslice_width_in_tiles_minus1[i]は、i番目のスライスに含まれたタイル列の個数から1を差分した値を示す。シンタックスslice_height_in_tiles_minus[i]は、i番目のスライスに含まれたタイル行の個数から1を差分した値を示す。
【0576】
i番目のスライスは、シンタックスslice_width_in_tiles_minus1[i]に基づいて判定される個数だけのタイル列およびシンタックスslice_height_in_tiles_minus1[i]に基づいて判定される個数だけのタイル行で構成される場合がある。ここで、i番目のタイル列の左上端タイルは、top_left_brick_idx_delta[i]に基づいて判定されるインデックス値を有することができる。
【0577】
または、ピクチャの左側境界に隣接するスライスに対してのみ、スライスの高さを示すシンタックスslice_height_in_tiles_minus1[i]をシグナリングし、それ以外のスライスに対しては、シンタックスslice_height_in_tiles_minus1[i]の符号化を省略することができる。シンタックスslice_height_in_tiles_minus[i]の符号化が省略されるスライスの高さは、同一の行に含まれたスライスのうち現在ピクチャの左側境界に接するスライスの高さと同様に設定される場合がある。
【0578】
【0579】
最初のスライスの左上端タイルのインデックスTopLeftBrickIdx[0]は、0に設定される場合がある。これにより、二番目のスライス(すなわち、インデックスiが1であるスライス)では、シンタックスtop_left_brick_idx_delta[i]が、実質的に左上端タイルのインデックスと同一の値を有することになる。これにより、二番目のスライスに対しては、シンタックスtop_left_brick_idx_delta[i]の代わりに、シンタックスtop_left_brick_idx[i]をシグナリングすることができる。ここで、top_left_brick_idx[i]は、i番目のスライスの左上端タイルのインデックスを示す。
【0580】
他の例として、シンタックスtop_left_brick_idx_delta[i]をi番目のスライスの最初のタイルとi+1番目のスライスの最初のタイルとの差分に設定することもできる。すなわち、i+1番目のスライスの左上端タイルのインデックスは、i番目のスライスの左上端タイルのインデックスとi番目のスライスに対してシグナリングされるシンタックスtop_left_brick_idx_delta[i]を合算して誘導することができる。シンタックスtop_left_brick_idx_delta[i]がi番目のスライスとi+1番目のスライスとの差分情報を示す場合、最後のスライスに対しては、シンタックスtop_left_brick_idx_delta[i]の符号化が省略される場合がある。
【0581】
以下の表15のようなシンタックステーブルを用いて、スライスを判定することもできる。
【0582】
【0583】
スライスタイプを示すフラグrect_slice_flagを符号化し、フラグrect_slice_flagが1である場合、ピクチャ内のスライスの個数を示すシンタックスnum_slices_in_pic_minus1を符号化することができる。
【0584】
ピクチャが複数個のスライスを含むものと判定された場合、各スライスの幅を示すシンタックスslice_width_in_tiles_minus1[i]および各スライスの高さを示すシンタックスslice_height_in_tiles_minus1[i]を符号化してシグナリングすることができる。
【0585】
また、i番目のスライスに含まれたタイルのインデックスとi+1番目のスライスに含まれたタイルのインデックスとの差分を示すシンタックスtile_idx_delta[i]をシグナリングすることもできる。最後のタイルに対しては、シンタックスtile_idx_delta[i]の符号化が省略される場合がある。
【0586】
二つのスライス間のタイルインデックス差分からオフセットを減算して誘導されるシンタックスを符号化することもできる。オフセットは、1または2のような自然数であることができる。一例として、シンタックスtile_idx_delta_minus1[i]がビットストリームを介してシグナリングされる場合がある。i番目のスライスに含まれたタイルのインデックスとi+1番目のスライスに含まれたタイルのインデックスとの差分は、シンタックスtile_idx_delta_minus1[i]に1を加算して誘導される場合がある。
【0587】
タイルインデックスの差分情報は、現在ピクチャが含むスライスが複数個である場合に、符号化/復号される場合がある。すなわち、現在ピクチャが単一のスライスで構成された場合には、タイルインデックスの差分を示すシンタックスtile_idx_delta[i]のシグナリングが省略される場合がある。例えば、現在ピクチャが単一のスライスで構成されているか否かを示すフラグone_slice_in_pic_flagが1である場合、シンタックスtile_idx_delta[i]のシグナリングが省略される場合がある。
【0588】
または、符号化器は、タイルインデックスの差分を示すシンタックスtile_idx_delta[i]の符号化可否を判定し、判定にしたがって、シンタックスtile_idx_delta[i]が符号化されているか否かを示すフラグtile_idx_delta_present_flagを符号化することができる。フラグtile_idx_delta_present_flagの値が0であることは、シンタックスtile_idx_delta[i]が符号化/復号されていないことを示す。フラグtile_idx_delta_present_flagの値が1である場合、少なくとも一つのスライスに対して、シンタックスtile_idx_delta[i]が符号化/復号される場合がある。
【0589】
一つのタイルを複数個のスライスに分割することもできる。一例として、タイルを水平方向にタイルを分割して、複数個のスライスを生成することができる。
【0590】
スライスが複数個のタイルを含まないものと判定された場合、タイルを複数個のスライスに分割するか否かが判定される場合がある。一例として、シンタックスslice_width_in_tiles_minus1[i]およびシンタックスslice_height_in_tiles_minus1[i]がいずれも0であることは、スライスが一つのタイルだけで構成されているか、一つのタイルが複数のスライスに分割されることを示す。
【0591】
シンタックスslice_width_in_tiles_minus1[i]およびシンタックスslice_height_in_tiles_minus1[i]がいずれも0である場合、タイルが複数のスライスに分割されるか否かを示す情報がシグナリングされる場合がある。
【0592】
一例として、タイルが含むスライスの個数を示すシンタックスnum_slices_in_tile_minus1[i]がシグナリングされる場合がある。シンタックスnum_slices_in_tile_minus1[i]は、i番目のタイルが含むスライスの個数から1を差分した値を示す。
【0593】
i番目のスライスを含むタイルが複数個のスライスで構成された場合、タイル内のスライスそれぞれの高さを示すシンタックスが符号化される場合がある。一例として、i番目のスライスを含むタイル内のj番目のスライス(すなわち、i+j番目のスライス)の高さを示すシンタックスslice_height_in_ctu_minus1[i][j]がシグナリングされる場合がある。シンタックスslice_height_in_ctu_minus1[i][j]は、i番目のスライスを含むタイル内のj番目のスライスが含むコーディングツリーユニット行の個数を示すことができる。表16は、スライスの高さを示すシンタックスslice_height_in_ctu_minus1[i][j]を含むシンタックス構造を例示するものである。
【0594】
【0595】
ここで、タイルの高さに基づいて、タイル内のスライスの個数を示すシンタックスの符号化/復号可否が判定される場合がある。一例として、i番目のスライスを含むタイルが単一のコーディングツリーユニット行で構成された場合、タイル内のスライスの個数を示すシンタックスnum_slices_in_tile_minus1の符号化/復号を省略することができる。シンタックスnum_slices_in_tile_minus1の符号化/復号が省略される場合、その値は0と見なされる場合がある。すなわち、i番目のスライスおよびi番目のスライスを含むタイルが同一のサイズおよび形状を有するものに設定される場合がある。表16において、変数TileIdx[i]は、i番目のスライスを含むタイルのインデックスを示し、変数NumTileColumnは、タイル列の個数を示す。TileIdx[i]/NumTileColumnは、i番目のスライスを含むタイルが含まれる行を返還する。変数RowHeight[TileIdx[i]/NumTileColumn]は、i番目のスライスを含むタイルまたはタイル行の高さを示す。
【0596】
ここで、同一のタイル行に属するタイルは、同一の高さを有することから、タイル行の高さに基づいて、タイル内のスライスの個数を示すシンタックスの符号化/復号可否が判定されるものと理解することもできる。
【0597】
タイルまたはタイル行の高さに基づいて、スライスの高さを示すシンタックスの符号化/復号可否を判定することができる。一例として、i番目のスライスを含むタイルが単一のコーディングツリーユニット行で構成された場合、または、i番目のスライスを含むタイルが2個のコーディングツリーユニット行で構成された場合、スライスの高さを示すシンタックスslice_height_in_ctu_minus1[i][j]の符号化/復号を省略することができる。シンタックスslice_height_in_ctu_minus1[i][j]の高さは、タイル内のスライスの個数に応じて適応的に判定される場合がある。一例として、タイル内のスライスの個数が1個である場合、スライスの高さは、タイルの高さと同様に設定される場合がある。または、タイル内のスライスの個数が2個であり、タイルの高さが2である場合、各スライスの高さは1に設定される場合がある。表16において、変数TileIdx[i]は、i番目のスライスを含むタイルのインデックスを示し、変数NumTileColumnは、タイル列の個数を示す。TileIdx[i]/NumTileColumnは、i番目のスライスを含むタイルが含まれる行を返還する。変数RowHeight[TileIdx[i]/NumTileColumn]は、i番目のスライスを含むタイルまたはタイル行の高さを示す。
【0598】
上述のスライスの個数を示すシンタックスnum_slices_in_tile_minus1の代わりに、明示的にシグナリングされる必要があるスライス高さの個数を示す情報を示すシンタックスnum_exp_slices_in_tile[i]を符号化することもできる。シンタックスnum_exp_slices_in_tile[i]は、タイルが含むスライスの個数と同一または小さい値を有することができる。
【0599】
シンタックスnum_exp_slices_in_tile[i]が0であることは、タイルが複数個のスライスに分割されないことを示す。シンタックスnum_exp_slices_in_tile[i]が0より大きいことは、タイルが複数個のスライスに分割され得ることを示す。
【0600】
シンタックスnum_exp_slices_in_tile[i]の個数だけスライスの高さを示す情報がシグナリングされる場合がある。一例として、シンタックスnum_exp_slices_in_tileが1より大きい場合、タイル内のj番目のスライスの高さを示すシンタックスexp_slice_height_in_ctu_minus1[j]がシグナリングされる場合がある。
【0601】
上述の実施形態と同様、個数情報exp_slice_height_in_ctu_minus1[j]の符号化/復号可否は、タイルまたはタイル行の高さに基づいて判定される場合がある。一例として、i番目のスライスを含むタイルが単一のコーディングツリーユニット行で構成された場合、シンタックスexp_slice_height_in_ctu_minus1[j]の符号化/復号を省略することができる。シンタックスexp_slice_height_in_ctu_minus1[j]の符号化/復号が省略された場合、その値は0と見なされる場合がある。
【0602】
スライスのインデックスjが高さが明示的にシグナリングされるスライスの個数より小さい場合、スライスjの幅は、ビットストリームを介してシグナリングされるシンタックスexp_slice_height_in_ctu_minus1[j]に基づいて判定される場合がある。一方、スライスのインデックスkが高さが明示的にシグナリングされるスライスの個数以上である場合、スライスkの高さは、最後にシグナリングされたシンタックスexp_slice_height_in_ctu_minus1[l]に基づいて判定される場合がある。ここで、lは、最後に高さがシグナリングされたスライスのインデックスを示し、kより小さい整数であることができる。
【0603】
一例として、タイルの高さから前のスライスの高さを差分した値がシンタックスexp_slice_height_in_ctu_minus1[l]に1を加算した値以上である場合、スライスkの高さは、シンタックスexp_slice_height_in_ctu_minus1[l]に1を加算した値に設定される場合がある。一方、タイルの高さから前のスライスの高さを差分した値がシンタックスexp_slice_height_in_ctu_minus1[l]に1を加算した値より小さい場合、タイルの高さから前のスライスの高さを差分した差分値をスライスkの高さに設定することができる。
【0604】
すなわち、高さが明示的にシグナリングされるスライス以外の残りのスライスの高さは、高さが明示的にシグナリングされるスライスのうち最後のスライスの高さより小さいか同一の値を有することができる。
【0605】
上述の例では、四角形状のスライス定義方法が適用される場合に限って、ピクチャが単一のスライスで構成されているか否かを示すシンタックスone_slice_in_pic_flagの符号化可否が判定されるものと例示されている。例示されているものとは逆に、シンタックスone_slice_in_pic_flagを先ず符号化した後、フラグone_slice_in_pic_flagの値に応じてシンタックスrect_slice_flagの符号化可否を判定することもできる。一例として、one_slice_in_pic_flagの値が1である場合、rect_slice_flagの符号化を省略することができる。
【0606】
【0607】
現在ピクチャ内のタイル列の個数が1個である場合、シンタックスslice_width_in_tiles_minus1の符号化が省略される場合がある。また、現在ピクチャ内のタイル行の個数が1個である場合、シンタックスslice_height_in_tiles_minus1の符号化が省略される場合がある。
【0608】
または、スライスの幅を示す情報またはスライスの高さを示す情報のうち少なくとも一つの符号化を省略することができる。
【0609】
一例として、スライスの幅を示すシンタックスslice_width_in_tiles_minus1の符号化を省略し、隣接スライス内の所定位置のタイルとの距離をスライスの幅に設定することができる。具体的には、シンタックスtop_left_brick_idx_delta[i]によって、i番目のスライスの右側に隣接するi+1番目のスライスの左上端タイルが特定される場合がある。i番目のスライスの幅は、i番目のスライス内の左上端タイルのx座標(例えば、左上端サンプルのx座標)と、i+1番目のスライス内の左上端タイルのx座標(例えば、左上端サンプルのx座標)との差分として誘導される場合がある。
【0610】
または、スライスの高さを示すシンタックスslice_height_in_tiles_minus1の符号化を省略し、隣接スライス内の所定位置のタイルとの距離をスライスの幅に設定することができる。具体的には、シンタックスtop_left_brick_idx_delta[j-1]によって、i番目のスライスの下端に位置するj番目のスライスの左上端タイルが特定される場合がある。i番目のスライスの高さは、i番目のスライス内の左上端タイルのy座標(例えば、左上端サンプルのy座標)とj番目のスライス内の左上端タイルのy座標(例えば、左上端サンプルのy座標)との差分として誘導される場合がある。
【0611】
または、四角形状のスライスを定義するに際し、差分値の情報が用いられるか否かを示す情報が、ビットストリームを介してシグナリングされる場合がある。一例として、差分値の情報を用いるか否かを示すtile_idx_delta_present_flagがビットストリームを介してシグナリングされる場合がある。シンタックスtile_idx_delta_present_flagの値が1であることは、タイルインデックスの差分値を示すシンタックスが符号化されてシグナリングされることを示す。一例として、シンタックスtile_idx_delta_present_flagの値が1である場合、i番目のスライスは、スライスのサイズを示すシンタックスslice_width_in_tiles_minus1[i]およびシンタックスslice_height_in_tiles_minus1[i]とスライス内の左上端タイルの位置または右上端タイルの位置を判定するための差分値の情報(例えば、top_left_brick_idx_delta[i-1]またはbottom_right_brick_idx_delta[i])によって定義される場合がある。
【0612】
シンタックスtile_idx_delta_present_flagの値が0である場合、i番目のスライスは、スライスのサイズを示すシンタックスslice_width_in_tiles_minus1[i]およびシンタックスslice_height_in_tiles_minus1[i]によって定義される場合がある。シンタックスtile_idx_delta_prsent_flagの値が0である場合、現在ピクチャの左側境界に接するスライスの右側に位置するスライスは、左側境界に接するスライスと同一の高さを有するように設定される場合がある。これにより、現在ピクチャの左側境界に接するスライスに対してのみスライスの高さを示す情報をシグナリングし、現在ピクチャの左側境界に接していないスライスに対しては、スライスの高さを示す情報のシグナリングを省略することができる。
【0613】
タイルインデックスの差分を示す情報が符号化されているか否かを示すシンタックスtile_idx_delta_present_flagは、現在ピクチャに含まれたスライスの個数が閾値以上である場合に符号化/復号される場合がある。ここで、閾値は、0、1または2などの整数に設定される場合がある。一例として、現在ピクチャに含まれたスライスの個数が1個以上である場合または2個以上である場合に限って、シンタックスtile_idx_delta_present_flagを符号化/復号することができる。現在ピクチャに含まれたスライスの個数が閾値より小さい場合、tile_idx_delta_present_flagの符号化/復号を省略し、その値を0に設定することができる。タイルのインデックスの代わりにコーディングツリーユニットのインデックスに基づいてスライスを定義することも可能である。
【0614】
上述の例では、ラスタースキャン順序にしたがってタイルに順番を付与して、スライスが定義されるものと仮定した。他の例として、垂直スキャン、水平スキャンまたは対角スキャンにしたがってタイルに順番を付与して、スライスを定義することもできる。
【0615】
タイルが複数のスライスで構成されている場合、最初のスライスに対してのみ、スライスのサイズを示す情報および/またはタイルインデックス差分情報をシグナリングすることができる。ここで、スライスのサイズを示す情報は、スライスの幅を示すシンタックスslice_width_in_tiles_minus1[i]およびスライスの高さを示すシンタックスslice_height_in_tiles_minus1[i]のうち少なくとも一つを含む場合がある。
【0616】
表17は、これに関する例示を示す。
【0617】
【0618】
スライスがタイル内の最初のスライスであるか否かを示す変数isFirstSliceInTile[i]が設定される場合がある。変数isFirstSliceInTile[i]の値が1であることは、スライスがタイル内の最初のスライスであることを示す。一方、変数isFirstSliceInTile[i]の値が0であることは、スライスがタイル内の最初のスライスではないことを示す。
【0619】
変数isFirstSliceInTile[i]は、1に初期化される場合がある。これにより、i番目のスライスが、タイルの一部ではなく、少なくとも一つ以上のタイルで構成された場合、i番目のタイルに対する変数isFirstSliceInTile[i]の値が1に設定される場合がある。
【0620】
変数isFirstSliceInTile[i]の値が1である場合、スライスのサイズを示すシンタックスslice_width_in_tiles_minus1[i]およびシンタックスslice_height_in_tiles_minus1[i]が符号化/復号される場合がある。
【0621】
ここで、シンタックスslice_width_in_tiles_minus1[i]およびシンタックスslice_height_in_tiles_minus1[i]がいずれも0である場合、タイル内のスライスの個数を示す個数情報がシグナリングされる場合がある。タイルに複数個のスライスが含まれた場合、複数個のスライスのうち少なくとも一つに関する高さ情報を符号化/復号することができる。ここで、二番目のスライスの高さ情報を復号した後、変数isFirstTileInTile[i++]の値を0に変換することができる。
【0622】
これにより、二番目のスライスからは、スライスの幅を示すシンタックスslice_width_in_tiles_minus1[i]およびスライスの高さを示すシンタックスslice_height_in_tiles_minus1[i]の符号化が省略される場合がある。
【0623】
最初のタイルに対してのみ、タイルインデックス差分を示すシンタックスtile_idx_delta[i]を符号化/復号することができる。一例として、シンタックスtile_idx_delta[i]は、シンタックスslice_width_in_tiles_minus1[i]が0ではない場合、シンタックスslice_height_in_tiles_minus1[i]が0ではない場合、または変数isFirstSliceInTile[i]が1である場合のうち少なくとも一つにおいてシグナリングされる場合がある。
【0624】
一つのタイルが複数個のスライスに分割された場合(すなわち、シンタックスslice_width_in_tiles_minus1[i]およびシンタックスslice_height_in_tiles_minus1[i]がいずれも0である場合)、最初のスライスに対してのみ変数isFirstSliceInTileの値が1であり、二番目のスライスからは変数isFirstSliceInTileの値が0である。これにより、最初のスライスに対してのみ、シンタックスtile_idx_delta[i]が符号化される場合がある。ピクチャ内の最後のタイルが複数個のスライスで構成された場合、tile_idx_delta[i]をシグナリングしない場合がある。
【0625】
【0626】
復号過程または符号化過程を中心に説明されている実施形態を、符号化過程または復号過程に適用することは、本発明の範疇に含まれる。所定の順序で説明されている実施形態を、説明されているものと相違する順序に変更することも、本発明の範疇に含まれる。
【0627】
上述の実施形態は、一連のステップまたはフローチャートに基づいて説明されているが、これは、発明の時系列的順序を限定したものではなく、必要に応じて、同時に行われるか異なる順序で行われる場合がある。また、上述の実施形態において、ブロック図を構成する構成要素(例えば、ユニット、モジュールなど)のそれぞれは、ハードウェア装置またはソフトウェアで実現されることもでき、複数の構成要素が結合して一つのハードウェア装置またはソフトウェアで実現されることもできる。上述の実施形態は、様々なコンピュータ構成要素により実行される場合があるプログラム命令語の形態に実現され、コンピュータ読み取り可能な記録媒体に記録される場合がある。コンピュータ読み取り可能な記録媒体は、プログラム命令語、データファイル、データ構造などを単独でまたは組み合わせて含む場合がある。コンピュータ読み取り可能な記録媒体の例としては、ハードディスク、フロッピーディスクおよび磁気テープのような磁気媒体、CD-ROM、DVDのような光記録媒体、フロプティカルディスク(floptical disk)のような磁気-光媒体(magneto-optical media)、およびROM、RAM、フラッシュメモリなどのプログラム命令語を格納し実行するように特別に構成されたハードウェア装置が含まれる。ハードウェア装置は、本発明による処理を行うために、一つ以上のソフトウェアモジュールとして作動するように構成されている場合があり、その逆の場合も同様である。
【産業上の利用可能性】
【0628】
本発明は、映像を符号化/復号する電子装置に適用される場合がある。