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