(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024042028
(43)【公開日】2024-03-27
(54)【発明の名称】ビデオ信号の符号化方法および復号化方法並びにその装置
(51)【国際特許分類】
H04N 19/11 20140101AFI20240319BHJP
H04N 19/157 20140101ALI20240319BHJP
H04N 19/176 20140101ALI20240319BHJP
H04N 19/70 20140101ALI20240319BHJP
【FI】
H04N19/11
H04N19/157
H04N19/176
H04N19/70
【審査請求】有
【請求項の数】11
【出願形態】OL
(21)【出願番号】P 2024009480
(22)【出願日】2024-01-25
(62)【分割の表示】P 2021519620の分割
【原出願日】2019-10-11
(31)【優先権主張番号】10-2018-0121713
(32)【優先日】2018-10-12
(33)【優先権主張国・地域又は機関】KR
(31)【優先権主張番号】10-2018-0121757
(32)【優先日】2018-10-12
(33)【優先権主張国・地域又は機関】KR
(31)【優先権主張番号】10-2019-0006611
(32)【優先日】2019-01-18
(33)【優先権主張国・地域又は機関】KR
(71)【出願人】
【識別番号】516227559
【氏名又は名称】オッポ広東移動通信有限公司
【氏名又は名称原語表記】GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP., LTD.
【住所又は居所原語表記】No. 18 Haibin Road,Wusha, Chang’an,Dongguan, Guangdong 523860 China
(74)【代理人】
【識別番号】100120031
【弁理士】
【氏名又は名称】宮嶋 学
(74)【代理人】
【識別番号】100107582
【弁理士】
【氏名又は名称】関根 毅
(74)【代理人】
【識別番号】100152205
【弁理士】
【氏名又は名称】吉田 昌司
(74)【代理人】
【識別番号】100137523
【弁理士】
【氏名又は名称】出口 智也
(74)【代理人】
【識別番号】100096921
【弁理士】
【氏名又は名称】吉元 弘
(72)【発明者】
【氏名】リー、ベグン
(57)【要約】 (修正有)
【課題】ビデオ信号の符号化または復号化において、現在のブロックに隣接する隣接ブロックのイントラ予測モードに基づいて、候補イントラ予測モードを導出する方法及び装置を提供する。
【解決手段】方法は、現在のブロックの参照サンプルラインを決定することと、現在のブロックのイントラ予測モードと同じ候補イントラ予測モードが存在するか否かを決定することと、決定した結果に基づいて、現在のブロックのイントラ予測モードを導出することと、参照サンプルラインおよびイントラ予測モードに従って、現在のブロックに対してイントラ予測を実行することと、を含む。ここで、候補イントラ予測モードのうちの少なくとも1つは、現在のブロックの上端隣接ブロックのイントラ予測モード及び現在のブロックの左側隣接ブロックのイントラ予測モードのうちの最大値にオフセットを加算又は減算して導出される。
【選択図】
図8
【特許請求の範囲】
【請求項1】
ビデオ復号化方法であって、
現在のブロックの参照サンプルラインを決定することと、
前記現在のブロックのイントラ予測モードと同じ候補イントラ予測モードが存在するか否かを決定することと、
決定された結果に基づいて、前記現在のブロックのイントラ予測モードを導出することと、
前記参照サンプルラインおよび前記イントラ予測モードに従って、前記現在のブロックに対してイントラ予測を実行することであって、
前記候補イントラ予測モードのうちの少なくとも1つは、前記現在のブロックの上端隣接ブロックのイントラ予測モードおよび前記現在のブロックの左側隣接ブロックのイントラ予測モードのうちの最大値にオフセットを加算または減算して導出されることであることと、
前記現在のブロックを複数のサブブロックに分割するか否かを決定することと、を含み、
前記現在のブロックを複数のサブブロックに分割する場合、前記サブブロックの幅に従って、前記サブブロックの水平方向変換タイプを決定し、前記サブブロックの高さに従って、前記サブブロックの垂直方向変換タイプを決定することを特徴とする、前記ビデオ復号化方法。
【請求項2】
前記複数のサブブロックは1つのイントラ予測モードを共有することを特徴とする、
請求項1に記載のビデオ復号化方法。
【請求項3】
前記複数のサブブロックのうちの一部に対して、逆変換がスキップされることを特徴とする、
請求項2に記載のビデオ復号化方法。
【請求項4】
ビデオ符号化方法であって、
現在のブロックの参照サンプルラインを決定することと、
前記現在のブロックのイントラ予測モードと同じ候補イントラ予測モードが存在するか否かを決定することと、
決定された結果に基づいて、前記現在のブロックのイントラ予測モードを導出することと、
前記参照サンプルラインおよび前記イントラ予測モードに従って、前記現在のブロックに対してイントラ予測を実行することであって、
前記候補イントラ予測モードのうちの少なくとも1つは、前記現在のブロックの上端隣接ブロックのイントラ予測モードおよび前記現在のブロックの左側隣接ブロックのイントラ予測モードのうちの最大値にオフセットを加算または減算して導出されることであることと、
前記現在のブロックを複数のサブブロックに分割するか否かを決定することと、を含み、
前記現在のブロックを複数のサブブロックに分割する場合、前記サブブロックの幅に従って、前記サブブロックの水平方向変換タイプを決定し、前記サブブロックの高さに従って、前記サブブロックの垂直方向変換タイプを決定することを特徴とする、前記ビデオ符号化方法。
【請求項5】
前記複数のサブブロックは1つのイントラ予測モードを共有することを特徴とする、
請求項4に記載のビデオ符号化方法。
【請求項6】
前記複数のサブブロックのうちの一部に対して、変換がスキップされることを特徴とする、
請求項5に記載のビデオ符号化方法。
【請求項7】
復号化器であって、
プロセッサによって実行可能な命令を格納するためのメモリと、
請求項1ないし3のいずれか一項に記載のビデオ復号化方法を実行するための命令を実行するためのプロセッサと、を備える、前記復号化器。
【請求項8】
符号化器であって、
プロセッサによって実行可能な命令を格納するためのメモリと、
請求項4ないし6のいずれか一項に記載のビデオ符号化方法を実行するための命令を実行するためのプロセッサと、を備える、前記符号化器。
【請求項9】
復号化器であって、
現在のブロックの参照サンプルラインを決定するための手段と、
前記現在のブロックのイントラ予測モードと同じ候補イントラ予測モードが存在するか否かを決定するための手段と、
決定された結果に基づいて、前記現在のブロックのイントラ予測モードを導出するための手段と、
前記参照サンプルラインおよび前記イントラ予測モードに従って、前記現在のブロックに対してイントラ予測を実行するための手段であって、
前記候補イントラ予測モードのうちの少なくとも1つは、前記現在のブロックの上端隣接ブロックのイントラ予測モードおよび前記現在のブロックの左側隣接ブロックのイントラ予測モードのうちの最大値にオフセットを加算または減算して導出されることである手段と、
前記現在のブロックを複数のサブブロックに分割するか否かを決定する手段と、を備え、
前記現在のブロックを複数のサブブロックに分割する場合、前記サブブロックの幅に従って、前記サブブロックの水平方向変換タイプを決定し、前記サブブロックの高さに従って、前記サブブロックの垂直方向変換タイプを決定することを特徴とする、前記復号化器。
【請求項10】
符号化器であって、
現在のブロックの参照サンプルラインを決定するための手段と、
前記現在のブロックのイントラ予測モードと同じ候補イントラ予測モードが存在するか否かを決定するための手段と、
決定された結果に基づいて、前記現在のブロックのイントラ予測モードを導出するための手段と、
前記参照サンプルラインおよび前記イントラ予測モードに従って、前記現在のブロックに対してイントラ予測を実行するための手段であって、
前記候補イントラ予測モードのうちの少なくとも1つは、前記現在のブロックの上端隣接ブロックのイントラ予測モードおよび前記現在のブロックの左側隣接ブロックのイントラ予測モードのうちの最大値にオフセットを加算または減算して導出されることである手段と、
前記現在のブロックを複数のサブブロックに分割するか否かを決定する手段と、を備え、
前記現在のブロックを複数のサブブロックに分割する場合、前記サブブロックの幅に従って、前記サブブロックの水平方向変換タイプを決定し、前記サブブロックの高さに従って、前記サブブロックの垂直方向変換タイプを決定することを特徴とする、前記符号化器。
【請求項11】
プロセッサによって実行されると、プロセッサに請求項1ないし3のいずれか一項に記載のビデオ復号化方法、または請求項4ないし6のいずれか一項に記載のビデオ符号化方法を実行させる命令を格納する、非一時的なコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本願は、ビデオ信号の符号化方法および復号化方法並びにその装置に関する。
【背景技術】
【0002】
ディスプレイパネルの大型化の傾向に伴い、より高品質なビデオサービスが徐々に追求されている。高画質なビデオサービスの最大の問題は、データ量の大幅な増加であり、これらの問題を解決するために、ビデオ圧縮率の向上を目的とする研究が活発に行われている。代表的な例として、2009年で動画エキスパートグループ(MPEG:Motion Picture Experts Group)および国際電気通信連合(ITU-T:International Telecommunication Union-Telecommunication)のビデオコーディングエキスパートグループ(VCEG:Video Coding Experts Group)はビデオコーディング共同チーム(JCT-VC:Joint Collaborative Team on Video Coding)を結成した。JCT-VCは、H.264/AVCと比べて約2倍の圧縮性能を有するビデオ圧縮規格である高効率ビデオコーディング(HEVC:High Efficiency Video Coding)を提案し、当該規格は2013年1月25日に承認された。しかしながら、高画質なビデオサービスの急速な発展に伴い、HEVCの性能も徐々にその限界を示している。
【発明の概要】
【発明が解決しようとする課題】
【0003】
本願の目的は、ビデオ信号の符号化または復号化において、現在のブロックに隣接する隣接ブロックのイントラ予測モードに基づいて、候補イントラ予測モードを導出する方法および前記方法を実行するための装置を提供することである。
【0004】
本願の目的は、ビデオ信号の符号化または復号化において、コーディングブロックまたは変換ブロックを複数のサブブロックに分割し、各サブブロックに対してイントラ予測を実行する方法および前記方法を実行するための装置を提供することである。
【0005】
本願の目的は、ビデオ信号の符号化または復号化において、コーディングブロックまたは変換ブロックを複数のサブブロックに分割し、サブブロックのうちの一部のみに対して変換を実行する方法および前記方法を実行するための装置を提供することである。
【0006】
本願が実現しようとする技術的課題は、以上で言及された技術的課題に限定されず、言及されていない他の技術的課題は、以下の記載から当業者に明確に理解されることができる。
【課題を解決するための手段】
【0007】
本願のビデオ信号復号化または符号化方法は、現在のブロックの参照サンプルラインを決定することと、前記現在のブロックのイントラ予測モードと同じ候補イントラ予測モードが存在するか否かを決定することと、決定された結果に基づいて、前記現在のブロックのイントラ予測モードを導出することと、前記参照サンプルラインおよび前記イントラ予測モードに従って、前記現在のブロックに対してイントラ予測を実行することと、を含む。この場合、前記候補イントラ予測モードのうちの少なくとも1つは、前記現在のブロックの上端隣接ブロックのイントラ予測モードおよび前記現在のブロックの左側隣接ブロックのイントラ予測モードのうちの最大値にオフセットを加算または減算して導出されることであり得る。
【0008】
本願のビデオ信号復号化または符号化方法において、前記上端隣接ブロックのイントラ予測モードおよび前記左側隣接ブロックのイントラ予測モードの差が64である場合、前記候補イントラ予測モードのうちの少なくとも1つは、前記最大値に2を加算または減算して導出されることであり得る。
【0009】
本願のビデオ信号復号化または符号化方法において、前記参照サンプルラインのインデックスに従って、前記候補イントラ予測モードの数は異なってもよい。
【0010】
本願のビデオ信号復号化または符号化方法において、前記現在のブロックを複数のサブブロックに分割するか否かを決定することをさらに含み、前記現在のブロックを複数のサブブロックに分割する場合、前記複数のサブブロックは1つのイントラ予測モードを共有できる。
【0011】
本願のビデオ信号復号化または符号化方法において、前記複数のサブブロックのうちの一部に対して、逆変換をスキップできる。
【0012】
本願のビデオ信号復号化または符号化方法において、前記サブブロックの幅に従って、サブブロックの水平方向変換タイプを決定し、前記サブブロックの高さに従って、前記サブブロックの垂直方向変換タイプを決定できる。
【0013】
本願のビデオ信号復号化または符号化方法において、前記サブブロックの形状に従って、サブブロックの水平方向変換タイプおよび垂直方向変換タイプを決定できる。
【0014】
以上の本願に対して要約されている特徴は、後述される本願の具体的な説明における例示的な実施形態に過ぎず、本願の範囲を限定するものではない。
【発明の効果】
【0015】
本願の発明は以下の技術的効果を有する。
【0016】
本願によれば、現在のブロックに隣接する隣接ブロックのイントラ予測モードと類似した候補イントラ予測モードを導出することにより、イントラ予測効率を向上させることができる。
【0017】
本願によれば、コーディングブロックまたは変換ブロックを複数のサブブロックに分割し、各サブブロックに対してイントラ予測を実行することにより、イントラ予測効率を向上させることができる。
【0018】
本願によれば、コーディングブロックまたは変換ブロックを複数のサブブロックに分割し、サブブロックのうちの一部のみに対して変換を実行することにより、符号化または復号化効率を向上させることができる。
【0019】
本願で取得できる効果は、以上で言及された効果に限定されず、言及されていない他の効果は、以下の記載から当業者に明確に理解されることができる。
【図面の簡単な説明】
【0020】
【
図1】本願の実施例のビデオ符号化器(エンコーダ)のブロック図である。
【
図2】本願の実施例のビデオ復号化器(デコーダ)のブロック図である。
【
図3】本願の実施例の基本的なコーディングツリーユニットを示す図面である。
【
図4】コーディングブロックの複数の分割形状を示す図面である。
【
図5】コーディングツリーユニットの分割形状の概略図である。
【
図6】本願の実施例のインター予測方法のフローチャートである。
【
図8】本願の一実施例のイントラ予測方法のフローチャートである。
【
図9】各参照サンプルラインに含まれる参照サンプルを示す図面である。
【
図11】参照サンプルを一列に配列した一次元配列の例の概略図である。
【
図12】参照サンプルを一列に配列した一次元配列の例の概略図である。
【
図13】方向性イントラ予測モードがX軸に平行な直線と形成された角度の概略図である。
【
図14】現在のブロックが非正方形形状である場合、予測サンプルが取得される形態の概略図である。
【
図15】広角イントラ予測モードを示す図面である。
【
図16】垂直方向パーティショニングおよび水平方向パーティショニングの例を示す図面である。
【
図17】コーディングブロックの分割形状を決定する例を示す図面である。
【
図18】コーディングブロックの分割形状を決定する例を示す図面である。
【
図19】コーディングブロックのイントラ予測モードに基づいて、コーディングブロックの分割形状を決定する例を示す図面である。
【
図20】コーディングブロックの分割形状を説明するための図面である。
【
図21】予測符号化モードがサブブロックごとに異なるように設定された例を示す図面である。
【
図22】PDPCを適用する形態を示す図面である。
【
図23】第2の変換を実行するサブブロックを示す図面である。
【
図24】第2の変換を実行するサブブロックを示す図面である。
【
図25】現在のブロックの変換タイプが決定される例を説明する図面である。
【
図26】サブブロックの変換タイプを決定する例を示す図面である。
【
図27】サブブロックの残差係数が0に設定される例を説明する図面である。
【
図28】ビットストリームによってシグナルリングされる情報に基づいて変換および/または量子化を実行するサブブロックの位置を特定する例を示す。
【
図29】ブロック強度を決定するプロセスを示すフローチャートである。
【発明を実施するための形態】
【0021】
以下は図面を参照して、本願の実施例を詳しく説明する。
【0022】
ビデオの符号化および復号化は、ブロック単位で実行される。一例として、コーディングブロック、変換ブロックまたは予測ブロックに対して、変換、量子化、予測、インループフィルタリングまたは復元などの符号化または復号化処理が実行されることができる。
【0023】
以下は、符号化または復号化対象となるブロックを「現在のブロック」と称する。一例として、現在のブロックは、現在の符号化または復号化処理ステップに従って、コーディングブロック、変換ブロックまたは予測ブロックに表すことができる。
【0024】
さらに、本明細書で使用される用語「ユニット」は、特定の符号化または復号化プロセスを実行するための基本単位を示し、「ブロック」は所定のサイズのサンプルアレイを示すものとして理解できる。特に明記しない限り、「ブロック」と「ユニット」は、同じ意味で使用され得る。一例として、後述される実施例において、コーディングブロックと符号化単位は、互いに同等の意味を有することとして理解できる。
【0025】
図1は、本願の実施例のビデオ符号化器のブロック図である。
【0026】
図1に示されたように、ビデオ符号化装置100は、画像分割部110、予測部120、125、変換部130、量子化部135、再ソート部160、エントロピー符号化部165、逆量子化部140、逆変換部145、フィルタ部150およびメモリ155を備えることができる。
【0027】
図1に示される各構成部は、ビデオ符号化装置では、互いに異なる特徴的な機能を示すために、独立して図示されたものであるが、各構成部が分離されたハードウェアや1つのソフトウェア構成単位で構成されることを意味しない。即ち、各構成部は説明の便宜上、各構成部にリストされ、各構成部のうちの少なくとも2個の構成部は合わせて1つの構成部に構成され、または1つの構成部が複数の構成部に分けて機能を実行でき、これらの各構成部の統合された実施例および分離された実施例も、本願の本質から逸脱しない限り、本願の保護範囲に含まれる。
【0028】
さらに、一部の構成要素は、本願で本質的な機能を実行するために不可欠な構成要素ではなく、単に性能を向上させるための選択的な構成要素であり得る。本願は、本願の本質を具現するのに必要不可欠な構成部のみを含むことができ(即ち、本願は、単に性能を向上させるためにのみ使用される構成要素を含まなくてもよい)、単に性能向上のために使用される選択的な構成要素を除いた、必要な構成要素のみを含む構造も本願の保護範囲に含まれる。
【0029】
画像分割部110は、入力された画像を少なくとも1つの処理単位に分割できる。この場合、処理単位は予測単位(PU:Prediction Unit)でもよく、変換単位(TU:Transform Unit)でもよく、符号化単位(CU:Coding Unit)でもよい。画像分割部110では、1つの画像を、複数の符号化単位、予測単位および変換単位の組合せに分割し、所定の基準(例えば、コスト関数)に従って、符号化単位、予測単位および変換単位の組み合わせを選択して、画像を符号化することができる。
【0030】
例えば、1つの画像は複数の符号化単位に分割できる。画像から符号化単位を分割するために、クアッドツリー構造(Quad Tree Structure)などの再帰ツリ構造を使用することができるが、1つのビデオまたは最大の符号化単位(largest coding unit)をルートとして異なる符号化単位に分割される符号化ユニットは、分割された符号化単位の数だけの子ノードを使用して分割されることができる。所定の制限に従ってこれ以上分割されない符号化単位はリーフノードとなる。即ち、1つの符号化単位に対して正方形分割のみが可能であると仮定すると、1つの符号化単位は最大4個の異なる符号化単位に分割できる。
【0031】
以下、本願の実施例において、符号化単位が符号化を実行する単位の意味で使用してもよく、復号化を実行する単位の意味で使用してもよい。
【0032】
予測単位は、1つの符号化単位内で少なくとも1つの同じサイズの正方形または長方形などの形を持って分割されたものであってもよく、1つの符号化単位内で分割された予測単位のいずれか予測単位が、別の予測単位と異なる形状および/またはサイズと有するように分割されたものであってもよい。
【0033】
符号化単位を基にイントラ予測を実行する予測単位を生成するとき、最小さい符号化単位ではない場合、複数の予測単位N×Nを分割せずにイントラ予測を実行できる。
【0034】
予測部120、125は、インター予測を実行するインター予測部120とイントラ予測を実行するイントラ予測部125を備えることができる。予測単位に対してインター予測を使用するか、イントラ予測を実行するかを決定し、各予測方法に基づく具体的な情報(例えば、イントラ予測モード、動きベクトル、参照画像など)を決定できる。この場合、予測を実行する処理単位は、予測方法および具体的なコンテンツが決められる処理単位と異なることができる。例えば、予測方法および予測モードなどは、予測単位に決定され、予測の実行も変換単位で実行されることができる。生成された予測ブロックと元のブロックとの残差値(残差ブロック)は変換部130に入力されることができる。さらに、予測のために使用される予測モード情報、動きベクトル情報などは、残差値と共にエントロピー符号化部165で符号化されて復号化器にシグナリングされることができる。特定の符号化モードを使用するとき、予測部120、125を介して、予測ブロックを生成せずに、元のブロックをそのまま符号化して復号化部に伝送することができる。
【0035】
インター予測部120は、現在の画像の前の画像または後の画像のうちの少なくとも1つの画像の情報に基づいて予測単位を予測でき、場合によっては、現在の画像内の符号化された部分的な領域の情報に従って予測単位を予測することもできる。インター予測部120は、参照画像補間部、動き予測部、運動補正部を備えることができる。
【0036】
参照画像補間部は、メモリ155から提供された参照画像情報を取得し、参照画像で整数ピクセル以下のピクセル情報を生成できる。輝度ピクセルである場合、1/4ピクセル単位で整数ピクセル以下のピクセル情報を生成するために、フィルタ係数を異にするDCTベースの8タップ補間フィルタ(DCT-based Interpolation Filter)を使用することができる。色差信号である場合、1/8ピクセル単位で整数ピクセル以下のピクセル情報を生成するために、フィルタ係数を異にするDCTベースの4タップ補間フィルタ(DCT-based Interpolation Filter)を使用することができる。
【0037】
動き予測部は参照画像補間部によって補間された参照画像に基づいて、動き予測を実行することができる。動きベクトルを計算するために使用される方法として、完全検索ブロックマッチングアルゴリズム(FBMA:Full search-based Block Matching Algorithm)、3段探索(TSS:Three Step Search)、新しい3段探索アルゴリズム(NTS:New Three-Step Search Algorithm)などの複数の方法を使用できる。動きベクトルは、補間されたピクセルに基づいて、1/2または1/4ピクセル単位の動きベクトル値を有し得る。動き予測部は、動き予測方法を異にして現在の予測単位を予測できる。動き予測方法として、スキップ(Skip)モード、マージ(Merge)モード、高度な動きベクトル予測(AMVP:Advanced Motion Vector Prediction)モード、イントラブロックコピー(Intra Block Copy)モードなどの複数のモードを使用できる。
【0038】
イントラ予測部125は、現在の画像内のピクセル情報である現在のブロックの周りの参照ピクセル情報に基づいて予測単位を生成できる。現在の予測単位の隣接ブロックはインター予測を実行するブロックであるため、参照ピクセルがインター予測を実行するピクセルである場合、インター予測を実行するブロックに含まれる参照ピクセルを、周辺のイントラ予測を実行するブロックの参照ピクセル情報に置き換えて使用することができる。即ち、参照ピクセルが使用できない場合、使用できる参照ピクセルのうちの少なくとも1つの参照ピクセルで使用できない参照ピクセル情報を代わることができる。
【0039】
イントラ予測では、予測モードは、予測方向に従って参照ピクセル情報を使用する方向性予測モードと、予測実行時に方向性情報を使用しない非方向性モードを有し得る。輝度情報を予測するためのモードは、色差情報を予測するためのモードと異なることができ、色差情報を予測するために、輝度情報を予測するために使用されるイントラ予測モード情報または予測された輝度信号情報を使用できる。
【0040】
イントラ予測を実行するとき、予測単位のサイズが変換単位のサイズと同じである場合、予測単位の左側のピクセル、左上のピクセル、上端のピクセルに従って、予測単位に対するイントラ予測を実行できる。しかしながら、イントラ予測を実行するとき、予測単位のサイズが変換単位のサイズと異なる場合、変換単位に基づく参照ピクセルを使用して、イントラ予測を実行できる。さらに、最小符号化単位にのみ、N×N分割を使用するイントラ予測を使用できる。
【0041】
イントラ予測方法は、予測モードに従って、参照ピクセルにイントラ平滑化(AIS:Adaptive Intra Smoothing)フィルタを適用した後、予測ブロックを生成することができる。参照ピクセルに適用されるAISフィルタの種類は異なってもよい。イントラ予測方法を実行するために、現在の予測単位のイントラ予測モードは、現在の予測単位の周辺に存在する予測単位のイントラ予測モードから予測できる。周辺予測単位から予測されたモード情報を使用して現在の予測単位の予測モードを予測するとき、現在の予測単位が周辺予測単位のイントラ予測モードと同じである場合、所定の識別子情報を使用して、現在の予測単位が周辺予測単位の予測モードと同じであることを示す情報を伝送でき、現在の予測単位が周辺予測単位の予測モードと異なる場合、エントロピー符号化を実行し、現在のブロックの予測モード情報を符号化できる。
【0042】
さらに、予測部120、125によって生成された予測単位に基づいて予測を実行する予測単位と予測単位の元のブロックとの差である残差値(Residual)情報を含む残差ブロックを生成できる。生成された残差ブロックは変換部130に入力できる。
【0043】
変換部130では、離散コサイン変換(DCT:Discrete Cosine Transform)、離散サイン変換(DST:Discrete Sine Transform)、KLTなどの変換方法を使用して、元のブロックと予測部120、125によって生成された予測単位の残差値(residual)情報とを含む残差ブロックを変換させる。残差ブロックを変換するために、DCTを適用するか、またはDSTを適用するか、またはKLTを適用するかは、残差ブロックを生成するために使用される予測単位のイントラ予測モード情報に基づいて決定されることができる。
【0044】
量子化部135は、変換部130で周波数領域に変換された値を量子化することができる。量子化係数は、ブロックまたはビデオの重要性に従って変化される。量子化部135によって計算された値は逆量子化部140および再ソート部160に提供されることができる。
【0045】
再ソート部160は、量子化された残差値に対して係数値の再ソートを実行できる。
【0046】
再ソート部160は、係数スキャン(Coefficient Scanning)方法を介して、二次元のブロック形状係数を一次元のベクトル形状に変換できる。例えば、再ソート部160は、ジグザグスキャン(Zig-Zag Scan)方法を使用して、DC係数から高周波数領域係数までスキャンして、一次元のベクトル形状に変換できる。変換単位のサイズおよびイントラ予測モードに従ってジグザグスキャンをすることの代わりに、二次元ブロック形状係数を列方向にスキャンする垂直スキャン、二次元ブロック形状係数を行方向にスキャンする水平スキャンを使用することもできる。即ち、変換単位のサイズおよびイントラ予測モードに従って、ジグザグスキャン、垂直方向スキャンおよび水平方向スキャンのうち、どのようなスキャン方法を使用するかを決定することができる。
【0047】
エントロピー符号化部165は、再ソート部160によって計算された値に基づいて、エントロピー符号化を実行できる。エントロピー符号化は、例えば、指数ゴロム(Exponential Golomb)、コンテキスト適応型可変長コーディング(CAVLC:Context-Adaptive Variable Length Coding)、コンテキスト適応型バイナリ算術コーディング(CABAC:Context-Adaptive Binary Arithmetic Coding)などの複数の符号化方法を使用できる。
【0048】
エントロピー符号化部165は、再ソート部160および予測部120、125から符号化単位の残差値係数情報、ブロックタイプ情報、予測モード情報、分割単位情報、予測単位情報および伝送単位情報、動きベクトル情報、参照フレーム情報、ブロックの補間情報、フィルタリング情報などの複数の情報を符号化することができる。
【0049】
エントロピー符号化部165は、再ソート部160から入力された符号化単位の係数値に対してエントロピー符号化を実行できる。
【0050】
逆量子化部140および逆変換部145は、量子化部135で量子化された値を逆量子化し、変換部130で変換された値を逆変換する。逆量子化部140および逆変換部145によって生成された残差値(Residual)は、予測部120、125に含まれる動き予測部、運動補正部およびイントラ予測部を介して予測された予測単位と併せて、復元ブロック(Reconstructed Block)を生成することができる。
【0051】
フィルタ部150は、ディブロッキングフィルタ、オフセット補正部、適応ループフィルタ(ALF:Adaptive Loop Filter)のうちの少なくとも1つを備えることができる。
【0052】
ディブロッキングフィルタは、復元された画像からブロック間の境界によって引き起きされるブロック歪みを除去できる。ディブロッキングを実行するか否かを判断するために、ブロックに含まれるいくつかの列または行に含まれるピクセルに基づいて、現在のブロックに対してディブロッキングフィルタを適用するか否かを判断することができる。ブロックに対してディブロッキングフィルタを適用する場合、必要なディブロッキングフィルタリング強度に従って、強力なフィルタ(Strong Filter)または弱いフィルタ(Weak Filter)を適用できる。さらに、ディブロッキングフィルタを適用する態様において、垂直フィルタリングおよび水平フィルタリングを実行するとき、水平方向フィルタリングおよび垂直方向フィルタリングに並列処理されるようにすることができる。
【0053】
オフセット補正部は、ディブロッキングを実行するビデオに対して、ピクセル単位で元のビデオとのオフセットを補正できる。特定の画像に対するオフセット補正を実行するために、ビデオに含まれるピクセルを所定の数の領域に区別した後、オフセットを実行する領域を決定し、対応する領域にオフセットを適用する方法、または各ピクセルのエッジ情報を考慮してオフセットを適用する方法を使用することができる。
【0054】
適応ループフィルタリング(ALF:Adaptive Loop Filtering)は、フィルタリングされた復元ビデオと元のビデオを比較した値に基づいて実行されることができる。画像に含まれるピクセルを所定のグループに分けた後、対応するグループに適用される1つのフィルタを決定して、グループごとに差別的にフィルタリングすることができる。ALFを適用するか否かに関する情報である輝度信号は、符号化単位(CU:Coding Unit)ごとに伝送されることができ、適用されるALFフィルタの形状およびフィルタ係数は、各ブロックごとに異なることができる。さらに、適用対象ブロックの特性に関係なく、同じ形状(固定の形状)のALFフィルタを使用することもできる。
【0055】
メモリ155は、フィルタ部150によって計算された復元ブロックまたは復元画像を記憶することができ、記憶された復元ブロックまたは画像は、インター予測を実行するとき、予測部120、125に提供されることができる。
【0056】
図2は、本願の実施例のビデオ復号化器(デコーダ)のブロック図である。
【0057】
図2に示されたように、ビデオ復号化器200は、エントロピー復号化部210、再ソート部215、逆量子化部220、逆変換部225、予測部230、235、フィルタ部240、メモリ245を備えることができる。
【0058】
ビデオ符号化器でビデオビットストリームを入力するとき、入力されたビットストリームはビデオ符号化器と反対する手順で復号化することができる。
【0059】
エントロピー復号化部210は、ビデオ符号化器のエントロピー符号化部でエントロピー符号化を実行したことと反対する手順でエントロピー復号化を実行することができる。例えば、ビデオ符号化器で実行される方法と対応して、指数ゴロム(Exponential Golomb)、CAVLC(Context-Adaptive Variable Length Coding)、CABAC(Context-Adaptive Binary Arithmetic Coding)などの複数の方法を使用できる。
【0060】
エントロピー復号化部210は、符号化器で実行されるイントラ予測およびインター予測に関連する情報を復号化することができる。
【0061】
再ソート部215は、エントロピー復号化部210でエントロピー復号化されたビットストリームを符号化部で再ソートする方法に基づいて、再ソートを実行することができる。一次元ベクトルの形状で表す係数を二次元のブロック形状の係数に再度復元して、再ソートを実行することができる。再ソート部215は、符号化部で実行された係数スキャンに関連する情報を受け入れ、対応する符号化部で実行されるスキャン順序に基づいて、逆にスキャンする方法で再ソートを実行することができる。
【0062】
逆量子化部220は、符号化器によって提供される量子化パラメータおよび再ソートされたブロックの係数値に基づいて逆量子化を実行することができる。
【0063】
逆変換部225は、ビデオ符号化器で実行する量子化結果に対して変換部で実行する変換、即ち、DCT、DSTおよびKLTに対して、逆DCT、逆DSTおよび逆KLTのような逆変換を実行することができる。逆変換は、ビデオ符号化器で決定された伝送単位に基づいて実行することができる。ビデオ復号化器の逆変換部225では、予測方法、現在のブロックのサイズおよび予測方向などの複数の情報に従って、変換方法(例えば、DCT、DST、KLT)を選択的に実行できる。
【0064】
予測部230、235は、エントロピー復号化部210で提供される予測ブロックの生成関連情報およびメモリ245で提供される、前に復号化されたブロックまたは画像情報に基づいて予測ブロックを生成できる。
【0065】
前述したように、ビデオ符号化器の動作と同じくイントラ予測を実行するとき、予測単位のサイズが変換単位のサイズと同じである場合、予測単位の左側のピクセル、左上のピクセル、上端のピクセルに基づいて、予測単位対するイントラ予測を実行するが、イントラ予測を実行するとき、予測単位のサイズが変換単位のサイズと異なると、変換単位に基づく参照ピクセルを使用してイントラ予測を実行できる。さらに、最小符号化単位にのみN×N分割を使用するイントラ予測を実行することもできる。
【0066】
予測部230、235は、予測単位判別部、インター予測部およびイントラ予測部を備えることができる。予測単位判別部は、エントロピー復号化部210で入力された予測単位情報、イントラ予測方法の予測モード情報、インター予測方法の動き予測関連情報などの様々な情報を受け入れ、現在の符号化単位で予測単位を区別し、予測単位がインター予測を実行するか、それともイントラ予測を実行するかを判別することができる。インター予測部230は、ビデオ符号化器で提供される現在の予測単位のインター予測に必要な情報を使用して、現在の予測単位に含まれる現在の画像の前の画像または後の画像のうちの少なくとも1つの画像に含まれる情報に基づいて、現在の予測単位に対するインター予測を実行できる。または、現在の予測単位を含む現在の画像で、復元された部分的な領域の情報に基づいて、インター予測を実行することもできる。
【0067】
インター予測を実行するために、符号化単位を基準として、対応する符号化単位に含まれる予測単位の動き予測方法がスキップモード(Skip Mode)、マージモード(Merge モード)、動きベクトル予測モード(AMVP Mode)、イントラブロックコピーモードのうちのどのような方法であるかを判断できる。
【0068】
イントラ予測部235は、現在の画像内のピクセル情報に基づいて、予測ブロックを生成できる。予測単位がイントラ予測を実行する予測単位である場合、ビデオ符号化器で提供される予測単位のイントラ予測モード情報に基づいてイントラ予測を実行できる。イントラ予測部235は、AIS(Adaptive Intra Smoothing)フィルタ、参照ピクセル補間部、DCフィルタを備えることができる。AISフィルタは、現在のブロックの参照ピクセルに対してフィルタリングを実行する部分として、現在の予測単位の予測モードに従ってフィルタを適用するか否かを決定して適用することができる。ビデオ符号化器で提供される予測単位の予測モードおよびAISフィルタ情報をしようして、現在のブロックの参照ピクセルに対してAISフィルタリングを実行することができる。現在のブロックの予測モードがAISフィルタリングを実行していないモードである場合、AISフィルタは適用されないことがある。
【0069】
参照ピクセル補間部は、予測単位の予測モードが参照ピクセル値を補間したピクセル値に基づいてイントラ予測を実行する予測モードである場合、参照ピクセル値を補間して、整数値以下のピクセルユニットの参照ピクセルを生成できる。現在の予測単位の予測モードが参照ピクセル値を補間せずに予測ブロックを生成する予測モードである場合、参照ピクセルは補間されなくてもよい。DCフィルタは、現在のブロックの予測モードがDCモードである場合、フィルタリングを介して予測ブロックを生成することができる。
【0070】
復元されたブロックまたは画像はフィルタ部240に提供されることができる。フィルタ部240は、ディブロッキングフィルタ、オフセット補正部、ALFを備えることができる。
【0071】
ビデオ符号化器から対応するブロックまたは画像にディブロッキングフィルタを適用したか否かに関する情報、ディブロッキングフィルタを適用した場合、強いフィルタを適用したかまたは弱いフィルタを適用したかに関する情報を取得することができる。ビデオ復号化器のディブロッキングフィルタは、ビデオ符号化器によって提供されるディブロッキングフィルタの関連情報を受け入れることができ、ビデオ復号化器は対応するブロックのディブロッキングフィルタリングを実行することができる。
【0072】
オフセット補正部は、符号化するときに、ビデオに適用されるオフセット補正の種類およびオフセット値情報などに基づいて、復元されたビデオに対してオフセット補正を実行することができる。
【0073】
ALFは、符号化器から提供されたALF適用するか否かの情報、ALF係数情報などに基づいて、符号化単位に適用されることができる。このようなALF情報は、特定のパラメータセットに含まれて提供されることができる。
【0074】
メモリ245は、復元された画像またはブロックを記憶して、参照画像または参照ブロックとして使用できるようにし、さらに、復元された画像を出力部に提供することができる。
【0075】
図3は、本願の実施例の基本的なコーディングツリーユニットを示す図面である。
【0076】
最大サイズのコーディングブロックをコーディングツリーブロックと定義することができる。1つの画像は、複数のコーディングツリーユニット(CTU:Coding Tree Unit)に分割される。コーディングツリーユニットは、最大サイズの符号化単位であって、LCU(Largest Coding Unit)と称することもできる。
図3は、1つの画像が複数のコーディングツリーユニットに分割された例を示す。
【0077】
コーディングツリーユニットのサイズは、画像レベルまたはシーケンスレベルで定義されることができる。そのため、コーディングツリーユニットのサイズを示す情報は、画像パラメータセットまたはシーケンスパラメータセットを介して、シグナルリングされることができる。
【0078】
一例として、シーケンス内の画像全体に対するコーディングツリーユニットのサイズは、128x128に設定されることができる。または、画像レベルで、128x128または256x256のいずれかをコーディングツリーユニットのサイズに決定することができる。一例として、第1画像では、コーディングツリーユニットのサイズが、128x128に設定され、第2画像では、コーディングツリーユニットのサイズが、256x256に設定されることができる。
【0079】
コーディングツリーユニットを分割して、コーディングブロックを生成することができる。コーディングブロックは、符号化または復号化処理のための基本ユニットを示す。一例として、コーディングブロックごとに予測または変換するか、またはコーディングブロックごとに予測符号化モードを決定することができる。ここで、予測符号化モードは予測ビデオを生成する方法を示す。一例として、予測符号化モードは、画面内予測(イントラ予測:Intra Prediction)、画面間予測(インター予測:Inter Prediction)、現在の画像参照(CPR:Current Picture Referencingまたはイントラブロックコピー(IBC:Intra Block Copy))または複合予測(Combined Prediction)を含み得る。コーディングブロックに対して、イントラ予測、インター予測、現在の画像参照または複合予測のうちの少なくとも1つの予測符号化モードを使用して、コーディングブロックに対する予測ブロックを生成することができる。
【0080】
現在のブロックの予測符号化モードを示す情報はビットストリームを介してシグナルリングされることができる。一例として、前記情報は、予測符号化モードがイントラモードであるかインタモードであるかを示す1ビット識別子であり得る。現在のブロックの予測符号化モードがインタモードとして決定された場合に限り、現在の画像参照または複合予測を使用できる。
【0081】
現在の画像参照は、現在の画像を参照画像に設定し、現在の画像内の符号化または復号化された領域から現在のブロックの予測ブロックを取得するためのものである。ここで、現在の画像は、現在のブロックを含む画像を指す。現在のブロックに現在の画像参照が適用されるか否かを示す情報は、ビットストリームを介してシグナルリングされることができる。一例として、前記情報は1ビットの識別子であり得る。前記識別子が真である場合、現在のブロックの予測符号化モードは、現在の画像参照に決定され、前記識別子が偽である場合、現在のブロックの予測モードは、インター予測に決定されることができる。
【0082】
または、参照画像インデックスに基づいて、現在のブロックの予測符号化モードを決定することができる。一例として、参照画像インデックスが現在の画像を指す場合、現在のブロックの予測符号化モードが現在の画像参照であると決定することができる。参照画像インデックスが現在の画像ではなく他の画像を指す場合、現在のブロックの予測符号化モードがインター予測であると決定することができる。即ち、現在の画像参照は、現在の画像内の符号化または復号化された領域の情報を使用する予測方法であり、インター予測は符号化または復号化された別の画像の情報を使用する予測方法である。
【0083】
複合予測は、イントラ予測、インター予測および現在の画像参照のうちの2個以上を組み合わせる符号化モードを示す。一例として、複合予測を適用する場合、イントラ予測、インター予測または現在の画像参照のいずれかに基づいて第1予測ブロックを生成し、別の1つに基づいて第2予測ブロックを生成できる。第1予測ブロックおよび第2予測ブロックが生成されると、第1予測ブロックおよび第2予測ブロックの平均演算または加重和演算を介して最終的な予測ブロックを生成することができる。複合予測を適用するか否かを示す情報は、ビットストリームを介してシグナルリングすることができる。前記情報は1ビットの識別子であり得る。
【0084】
図4は、コーディングブロックの複数の分割形状を示す図面である。
【0085】
コーディングブロックは、クアッドツリー分割、バイナリツリー分割またはトリプルツリー分割に基づいて複数のコーディングブロックに分割されることができる。分割されたコーディングブロックも、クアッドツリー分割、バイナリツリー分割またはトリプルツリー分割に基づいて複数のコーディングブロックに再び分割できる。
【0086】
クアッドツリー分割は、現在のブロックを4個のブロックに分割する分割方法を示す。クアッドツリー分割の結果、現在のブロックは4個の正方形のパーティションに分割されることができる(
図4の(a)「SPLIT_QT」を参照)。
【0087】
バイナリツリー分割は、現在のブロックを2個のブロックに分割する分割方法を示す。垂直方向に沿って(即ち、現在のブロックを横切る垂直線を使用する)現在のブロックを2個のブロックに分割することを垂直方向バイナリツリー分割と称し、水平方向に沿って(即ち、現在のブロックを横切る水平線を使用する)現在のブロックを2個のブロックに分割することを水平方向バイナリツリー分割と称することができる。バイナリツリー分割の結果、現在のブロックは2個の非正方形のパーティションに分割されることができる。
図4の(b)「SPLIT_BT_VER」は、垂直方向バイナリツリー分割結果を示し、
図4の(c)「SPLIT_BT_HOR」は、水平方向バイナリツリー分割結果を示す。
【0088】
トリプルツリー分割は、現在のブロックを3つのブロックに分割する分割方法を示す。垂直方向に沿って(即ち、現在のブロックを横切る2個の垂直線を使用する)現在のブロックを3つのブロックに分割することを垂直方向トリプルツリー分割と称し、水平方向に沿って(即ち、現在のブロックを横切る2個の水平線を使用する)現在のブロックを3つのブロックに分割することを水平方向トリプルツリー分割と称することができる。トリプルツリー分割の結果、現在のブロックは3つの非正方形のパーティションに分割されることができる。この場合、現在のブロックの中央に位置するパーティションの幅または高さは、他のパーティションの幅または高さの2倍であり得る。
図4の(d)「SPLIT_TT_VER」は、垂直方向トリプルツリー分割結果を示し、
図4の(e)「SPLIT_TT_HOR」は、水平方向トリプルツリー分割結果を示す。
【0089】
コーディングツリーユニットの分割回数を分割深さ(Partitioning Depth)と定義することができる。シーケンスレベルまたは画像レベルでは、コーディングツリーユニットの最大の分割深さを決定できる。これにより、コーディングツリーユニットの最大の分割深さはシーケンスまたは画像ごとに異なることができる。
【0090】
または、各分割方法の最大分割の深さを個別に決定することができる。一例として、クアッドツリー分割を許可する最大分割の深さは、バイナリツリー分割および/またはトリプルツリー分割を許可する最大分割の深さと異なることができる。
【0091】
符号化器は、現在のブロックの分割形状または分割深さのうちの少なくとも1つを示す情報をビットストリームによってシグナリングされることができる。復号化器は、ビットストリームから解析された前記情報に基づいて、コーディングツリーユニットの分割形状および分割深さを決定できる。
【0092】
図5は、コーディングツリーユニットの分割形状を示す図面である。
【0093】
クアッドツリー分割、バイナリツリー分割および/またはトリプルツリー分割などの分割方法を使用してコーディングブロックを分割することをマルチツリー分割(Multi Tree Partitioning)と称することができる。
【0094】
コーディングブロックにマルチツリー分割を適用して生成されたコーディングブロックを下部コーディングブロックと称することができる。コーディングブロックの分割深さがkである場合、下部コーディングブロックの分割深さをk+1に設定する。
【0095】
逆に、分割深さがk+1であるコーディングブロックに対して、分割深さがkであるコーディングブロックを上部コーディングブロックと称することができる。
【0096】
現在のコーディングブロックの分割タイプは、上部コーディングブロックの分割形状または隣接コーディングブロックの分割タイプのうちの少なくとも1つに基づいて決定されることができる。ここで、隣接コーディングブロックは、現在のコーディングブロックに隣接し、現在のコーディングブロックの上端隣接ブロック、左側隣接ブロックまたは左上隅に隣接する隣接ブロックのうちの少なくとも1つを含み得る。ここで、分割タイプは、クアッドツリー分割であるか否か、バイナリツリー分割であるか否か、バイナリツリー分割方向であるか否か、トリプルツリー分割であるか否か、またはトリプルツリー分割方向であるか否かのうちの少なくとも1つを含み得る。
【0097】
コーディングブロックの分割形状を決定するために、コーディングブロックが分割されるか否かを示す情報は、ビットストリームを介してシグナリングされることができる。前記情報は、1ビットの識別子「split_cu_flag」であり、前記識別子は真であることは、コーディングブロックがクアッドツリー分割方法に従って分割されることを示す。
【0098】
split_cu_flagが真である場合、コーディングブロックがクアッドツリー分割されるか否かの情報が、ビットストリームを介してシグナリングされることができる。前記情報は1ビットの識別子split_qt_flagであり、前記識別子が真である場合、コーディングブロックは4個のブロックに分割できる。
【0099】
一例として、
図5に示された例において、コーディングツリーユニットがクアッドツリー分割に伴い、分割深さが1である4個のコーディングブロックを生成することに図面された。さらに、クアッドツリー分割結果として生成された4個のコーディングブロックのうちの第1コーディングブロックおよび第4コーディングブロックにクアッドツリー分割に再び適用されることを図示された。その結果、分割深さが2である4個のコーディングブロックを生成できる。
【0100】
さらに、分割深さが2であるコーディングブロックにクアッドツリー分割を再び適用することにより、分割深さが3であるコーディングブロックを生成できる。
【0101】
コーディングブロックにクアッドツリー分割が適用されなかった場合、コーディングブロックのサイズ、コーディングブロックが画像境界に位置するか否か、最大分割の深さまたは隣接ブロックの分割形状のうちの少なくとも1つを考慮して、前記コーディングブロックに対してバイナリツリー分割またはトリプルツリー分割を実行するか否かを決定することができる。前記コーディングブロックに対してバイナリツリー分割またはトリプルツリー分割を実行すると決定した場合、分割方向を示す情報はビットストリームを介してシグナリングされることができる。前記情報は1ビットの識別子mtt_split_cu_vertical_flagであり得る。前記識別子に基づいて、分割方向が垂直方向であるかまたは水平方向であるかを決定することができる。加えて、バイナリツリー分割またはトリプルツリー分割のいずれが前記コーディングブロックに適用されるかを示す情報は、ビットストリームを介してシグナリングされることができる。前記情報は、1ビットの識別子mtt_split_cu_binary_flagであり得る。前記識別子に基づいて、前記コーディングブロックにバイナリツリー分割を適用されるかトリプルツリー分割が適用されるかを決定することができる。
【0102】
一例として、
図5に示された例において、分割深さが1であるコーディングブロックに垂直方向バイナリツリー分割を適用し、前記分割結果として生成されたコーディングブロックのうちの左側コーディングブロックに垂直方向トリプルツリー分割が適用され、右側コーディングブロックに垂直方向バイナリツリー分割が適用されることとして図示された。
【0103】
インター予測は、前の画像の情報を使用して現在のブロックを予測する予測符号化モードである。一例として、前の画像内の現在のブロックと同じ位置にあるブロック(以下は、コロケイテッドブロック(collocated block)と称する)を現在のブロックの予測ブロックと設定することができる。以下は、現在のブロックと同じ位置にあるブロックに基づいて生成された予測ブロックをコロケイテッド予測ブロック(Collocated Prediction Block)と称する。
【0104】
逆に、前の画像にある物体が現在の画像で別の位置に動くと、物体の動きを使用して現在のブロックを効果的に予測できる。例えば、前の画像を現在の画像と比較することにより、物体の動き方向およびサイズを知られると、物体の動き情報に従って、現在のブロックの予測ブロック(または、予測ビデオ)を生成することができる。以下は動き情報によって生成された予測ブロックを動き予測ブロックと称することができる。
【0105】
現在のブロックから予測ブロックを差分して、残差ブロック(residual block)を生成することができる。この場合、物体が移動すると、コロケイテッド予測ブロックの代わりに移動予測ブロックを使用し、それにより、残差ブロックのエネルギを減らし、これにより、残差ブロックの圧縮性能を向上させることができる。
【0106】
上記のように、動き情報を使用して予測ブロックを生成することを動き補償予測と称することができる。ほとんどのインター予測では、動き補償予測に基づいて予測ブロックを生成できる。
【0107】
動き情報は、動きベクトル、参照画像インデックス、予測方向または双方向加重値インデックスのうちの少なくとも1つを含み得る。動きベクトルは物体の移動方向およびサイズを示す。参照画像インデックスは、参照画像リストに含まれる参照画像のうちの現在のブロックの参照画像を指示する。予測方向は、一方向L0予測、一方向L1予測または双方向予測(L0予測およびL1予測)のうちのいずれかを指す。現在のブロックの予測方向に従って、L0方向の動き情報またはL1方向の動き情報のうちの少なくとも1つを使用できる。双方向加重値インデックスは、L0予測ブロックに適用される加重値およびL1予測ブロックで適用される加重値を特定できる。
【0108】
図6は、本願の実施例のインター予測方法のフローチャートである。
【0109】
図6に示されたように、インター予測方法は、現在のブロックのインター予測モードを決定することと(S601)、決定されたインター予測モードに従って現在のブロックの動き情報を取得することと(S602)、取得された動き情報に基づいて現在のブロックに対する動き補償予測を実行することと(S603)、を含む。
【0110】
ここで、インター予測モードは、現在のブロックの動き情報を決定するための複数の方法を示し、平行移動(Translation)動き情報を使用するインター予測モードと、アフィン(Affine)動き情報を使用するインター予測モードを含み得る。一例として、平行移動動き情報を使用するインター予測モードは、マージモードと動きベクトル予測モードとを含み得、アフィン動き情報を使用するインター予測モードは、アフィンマージモードとアフィン動きベクトル予測モードとを含み得る。インター予測モードに従って、現在のブロックに隣接する隣接ブロックまたはビットストリームから解析された情報に基づいて現在のブロックの動き情報を決定できる。
【0111】
一例として、現在のブロックと同じ画像に含まれる空間隣接ブロックまたは現在のブロックと異なる画像に含まれるコロケイテッドブロックの動き情報に従って、現在のブロックの動き情報を取得することができる。空間隣接ブロックは、現在のブロックの上端に隣接する隣接ブロック、左側に隣接する隣接ブロック、左上隅に隣接する隣接ブロック、右上隅に隣接する隣接ブロックまたは左下隅に隣接する隣接ブロックのうちの少なくとも1つを含む。コロケイテッドブロックは、参照画像内の現在のブロックと同じ位置およびサイズを有し得る。一例として、
図7はコロケイテッドブロックを示す図面である。参照画像はインデックス情報が指示する参照画像に従って決定されることができる。
【0112】
現在のブロックの動きベクトルの精度は、複数の動きベクトル精度候補からいずれか1つを決定できる。一例として、動きベクトル精度候補は、8分の1ピクセル(octo pel)、4分の1ピクセル(quarter pel)、2分の1ピクセル(half pel)、整数ピクセル(integer pel)、2の整数倍ピクセル(2-integer pel)または4の整数倍ピクセル(4-integer pel)のうちの少なくとも1つを含み得る。動きベクトル精度候補の数または種類は、シーケンス、スライスまたはブロックユニットに従って決定されることができる。一例として、動きベクトル精度候補の数または種類を決定するための情報は、ビットストリームを介してシグナリングされることができる。または、現在のブロックのインター予測モードまたはアフィン動きモデルを使用するか否かに基づいてモデル動きベクトル精度候補の数または種類を決定できる。複数の動きベクトル精度候補のいずれか1つを特定するための情報も、ビットストリームを介してシグナリングされることができる。
【0113】
イントラ予測は、現在のブロックの周辺に符号化または復号化された復元サンプルを使用して現在のブロックを予測することを指す。この場合、現在のブロックのイントラ予測では、ループフィルタリングを適用する前の復元サンプルを使用できる。
【0114】
イントラ予測方法は、行列(Matrix)に基づくイントラ予測および周辺復元サンプルとの方向性を考慮した通常のイントラ予測を含む。現在のブロックのイントラ予測方法を指示する情報は、ビットストリームを介してシグナリングされることができる。前記情報は1ビットの識別子であり得る。または、現在のブロックの位置、サイズ、形状または隣接ブロックのイントラ予測方法のうちの少なくとも1つに基づいて、現在のブロックのイントラ予測方法を決定することができる。一例として、現在のブロックが画像境界をまたがって存在する場合、現在のブロックには、行列に基づくイントラ予測が適用されないように設定されることができる。
【0115】
行列に基づくイントラ予測は、符号化器および復号化器で事前に記憶された行列と、現在のブロックの周辺の復元サンプルとの間の行列積に基づいて、現在のブロックの予測ブロックを取得する方法である。事前に記憶された複数の行列のいずれかを特定する情報は、ビットストリームを介してシグナリングされることができる。復号化器は、前記情報および現在のブロックのサイズに基づいて、現在のブロックのイントラ予測のための行列を決定することができる。
【0116】
通常のイントラ予測は、非方向性イントラ予測モードまたは方向性イントラ予測モードに基づいて、現在のブロックに対する予測ブロックを取得する方法である。以下は、図面を参照して、通常のイントラ予測に基づくイントラ予測の実行プロセスをより詳しく説明する。
【0117】
図8は、本願の実施例のイントラ予測方法のフローチャートである。
【0118】
現在のブロックの参照サンプルラインを決定することができる(S801)。参照サンプルラインは、現在のブロックの上端および/または左側からk番目離れたラインに含まれる参照サンプルのセットを意味する。参照サンプルは、現在のブロックの周辺の符号化または復号化された復元サンプルから取得されることができる。
【0119】
複数の参照サンプルラインのうち、現在のブロックの参照サンプルラインを識別するインデックス情報は、ビットストリームを介してシグナリングされることができる。一例として、現在のブロックの参照サンプルラインを特定するためのインデックス情報intra_luma_ref_idxは、ビットストリームを介してシグナリングされることができる。前記インデックス情報は、コーディングブロックユニットでシグナリングされることができる。
【0120】
複数の参照サンプルラインは、現在のブロックの上端および/または左側の1ライン目、2ライン目、3ライン目または4ライン目のうちの少なくとも1つを含み得る。複数の参照サンプルラインの現在のブロックの上端に隣接する行および現在のブロックの左側に隣接する列によって構成された参照サンプルラインを隣接参照サンプルラインと称し、他の参照サンプルラインを非隣接参照サンプルラインと称することができる。
【0121】
【0122】
図9では、現在のブロックに隣接する行または列によって構成された1つの隣接参照サンプルラインと現在のブロックに隣接しない行または列によって構成された3つの非隣接参照サンプルラインを図示する。
【0123】
複数の参照サンプルラインのうちの一部のみを現在のブロックの参照サンプルラインに選択されることができる。一例として、
図9に示された参照サンプルラインのうち、第2非隣接参照サンプルライン以外の残りの参照サンプルラインを候補参照サンプルラインに設定することができる。表1は、各候補参照サンプルラインに割り当てられるインデックスを示す。
【0124】
【0125】
説明された数より多くまたはより少ない候補参照サンプルラインを設定することもできる。さらに、候補参照サンプルラインに設定された非隣接参照サンプルラインの数または位置は、説明された例に限定されない。一例として、第1非隣接参照サンプルライン及び第3非隣接参照サンプルラインを候補参照サンプルラインに設定し、または第2非隣接参照サンプルラインおよび第3非隣接参照サンプルラインを候補参照サンプルラインに設定することもできる。または、第1非隣接参照サンプルライン、第2非隣接参照サンプルラインおよび第3非隣接参照サンプルラインをすべて候補参照サンプルラインに設定することもできる。
【0126】
候補参照サンプルラインの数または種類は、現在のブロックのサイズ、形状、位置、サブブロックに分割するか否か、またはイントラ予測モードのうちの少なくとも1つに基づいて決定されることができる。
【0127】
現在のブロックの位置、サイズ、形状または隣接ブロックの予測符号化モードのうちの少なくとも1つに基づいて現在のブロックの参照サンプルラインを決定することもできる。一例として、現在のブロックが画像、タイル、スライスまたはコーディングツリーユニットの境界に接する場合、隣接参照サンプルラインを現在のブロックの参照サンプルラインに決定することができる。
【0128】
または、現在のブロックが非正方形である場合、隣接参照サンプルラインを現在のブロックの参照サンプルラインに決定することができる。または、現在のブロックの幅および高さの比が閾値以上または閾値以下である場合、隣接参照サンプルラインを現在のブロックの参照サンプルラインに決定することができる。
【0129】
参照サンプルラインは、現在のブロックの上端に位置する上端参照サンプルと現在のブロックの左側に位置する左側参照サンプルとを含み得る。上端参照サンプルおよび左側参照サンプルは、現在のブロックの周辺の復元サンプルから取得されることができる。前記復元サンプルは、ループフィルタを適用する前の状態であり得る。
【0130】
参照サンプルラインに含まれる参照サンプルの数は、参照サンプルラインと参照サンプルラインとの間の距離に基づいて決定されることができる。一例として、現在のブロックとの距離がiである参照サンプルラインに含まれる参照サンプル数は、現在のブロックとの距離がi-1である参照サンプルラインに含まれる参照サンプル数より多いことができる。そのため、非隣接参照サンプルラインに含まれる参照サンプル数は隣接参照サンプルラインに含まれる参照サンプル数より多い。
【0131】
現在のブロックとの距離がiである非隣接参照サンプルラインに含まれる参照サンプル数と、隣接参照サンプルラインに含まれる参照サンプルの数との差分を、参照サンプル数量オフセットと定義することができる。この場合、現在のブロックの上端に位置する上端参照サンプルの数の差分をoffsetX[i]と定義し、現在のブロックの左側に位置する左側参照サンプルの数の差分をoffsetY[i]と定義することができる。offsetXおよびoffsetYは、現在のブロックと非隣接参照サンプルラインの距離に基づいて決定されることができる。一例として、offsetXおよびoffsetYはiの整数倍に設定されることができる。一例として、offsetX[i]およびoffset[i]は2iであり得る。
【0132】
または、現在のブロックの幅と高さの比に基づいて、参照サンプル数オフセットを決定することもできる。式1は、現在のブロックの幅と高さの比を数値化する一例を示したものである。
【数1】
【0133】
式1に示されたものと異なる方法を使用して、現在のブロックの幅と高さの比を数値化することもできる。
【0134】
現在のブロックの幅と高さの比に基づいて、offsetXおよびoffsetYの値を決定することができる。例えば、whRatioの値が1より大きい場合、offsetXの値をoffsetYより大きく設定することができる。一例として、offsetXの値は1に設定でき、offsetYの値は0に設定できる。逆に、whRatioの値が1より小さい場合、offsetXよりもoffsetYの値を大きく設定することができる。一例として、offsetXの値を0に設定でき、offsetYの値は1に設定できる。
【0135】
x軸とy軸の座標が同じである左上参照サンプル以外に、現在のブロックとの距離がiである非隣接参照サンプルラインは、(refW+offsetX[i])個の上端参照サンプルと(refH+offsetY[i])個の左側参照サンプルによって構成できる。ここで、refWおよびrefHは隣接参照サンプルラインの長さを示し、それぞれ以下の式2および3に示されたように設定できる。
【数2】
【0136】
式2および式3では、nTbWは、イントラ予測を実行するコーディングブロックまたは変換ブロックの幅を示し、nTbHは、イントラ予測を実行するコーディングブロックまたは変換ブロックの高さを示す。
【0137】
結果、現在のブロックとの距離がiである参照サンプルラインは(refW+refH+offsetX[i]+offsetY[i]+1)個の参照サンプルによって構成できる。
【0138】
現在のブロックのイントラ予測モードに従い、参照サンプルラインに属する参照サンプルのうちの少なくとも1つを使用して予測サンプルを取得する。
【0139】
次に、現在のブロックのイントラ予測モードを決定できる(S802)。現在のブロックのイントラ予測モードについては、非方向性イントラ予測モードまたは方向性イントラ予測モードのうちの少なくとも1つが、現在のブロックのイントラ予測モードに決定されることができる。非方向性イントラ予測モードは、plannerとDCとを含み、方向性イントラ予測モードは、左下端対角線方向から右上端対角線方向まで、33個または65個のモードを含む。
【0140】
【0141】
図10の(a)は、35個のイントラ予測モードを示し、
図10の(b)は67個のイントラ予測モードを示す。
【0142】
図10に示された数より多くまたはより少ないイントラ予測モードを定義することもできる。
【0143】
現在のブロックに隣接する隣接ブロックのイントラ予測モードに基づいて最確モード(MPM:Most Probable Mode)を設定できる。ここで、隣接ブロックは、現在のブロックの左側に隣接する左側隣接ブロックと、現在のブロックの上端に隣接する上端隣接ブロックとを含み得る。現在のブロックの左上サンプルの座標を(0,0)と称する場合、左側隣接ブロックは、(-1,0)、(-1,H-1)または(-1,(H-1)/2)位置のサンプルを含み得る。ここで、Hは、現在のブロックの高さを示す。上端隣接ブロックは、(0,-1)、(W-1,-1)または((W-1)/2,-1)位置のサンプルを含み得る。ここで、Wは現在のブロックの幅を示す。
【0144】
隣接ブロックが通常のイントラ予測で符号化されるとき、隣接ブロックのイントラ予測モードに基づいてMPMを取得できる。具体的には、左側隣接ブロックのイントラ予測モードを変数candIntraPredModeAに設定でき、上端隣接ブロックのイントラ予測モードを変数candIntraPredModeBに設定できる。
【0145】
この場合、隣接ブロックを使用できない場合(例えば、隣接ブロックが符号化または復号化されていない場合、または隣接ブロックの位置が画像境界を超えた場合)、隣接ブロックが行列に基づくイントラ予測で符号化される場合、隣接ブロックがインター予測で符号化される場合または隣接ブロックが現在のブロックと異なるコーディングツリーユニットに含まれる場合、隣接ブロックのイントラ予測モードに基づいて導出される変数candIntraPredModeX(ここで、XはAまたはBである)をデフォルトモードに設定できる。ここで、デフォルトモードは、planner、DC、垂直方向モードまたは水平方向モードのうちの少なくとも1つを含み得る。
【0146】
または、隣接ブロックが行列のイントラ予測で符号化されるとき、行列のいずれかに対して特定するためのインデックス値に対応するイントラ予測モードをcandIntraPredModeXに設定できる。そのため、行列を特定するためのインデックス値とイントラ予測モードのマッピング関係を示すルックアップテーブルは、符号化器および復号化器に事前に記憶されることができる。
【0147】
変数candIntraPredModeAおよび変数candIntraPredModeBに基づいて、MPMを取得できる。一例として、candIntraPredModeAおよびcandIntraPredModeBをMPMに設定し、またはcandIntraPredModeAまたはcandIntraPredModeBのうち、大きい値または小さい値と類似するイントラ予測モードをMPMに設定できる。ここで、candIntraPredModeX(XはAまたはBである)に類似したイントラ予測モードは、candIntraPredModeXとインデックス差分値が±1または±2であるイントラ予測モードであり得る。
【0148】
MPMリストに含まれるMPMの数は、符号化器および復号化器で事前に設定できる。一例として、MPMの数は3、4、5または6であり得る。または、MPMの数を示す情報は、ビットストリームを介してシグナリングされることができる。または、隣接ブロックの予測符号化モード、現在のブロックのサイズ、形状または参照サンプルラインインデックスのうちの少なくとも1つに基づいて、MPMの数を決定できる。一例として、隣接参照サンプルラインが現在のブロックの参照サンプルラインと決定された場合、N個のMPMが使用され、逆に、非隣接参照サンプルラインが現在のブロックの参照サンプルラインと決定された場合、M個のMPMを使用できる。MがNより小さい自然数であり、一例として、Nは6であり、Mは5、4または3であり得る。そのため、現在のブロックの参照サンプルラインのインデックスが0であり、MPM識別子が真であると、現在のブロックのイントラ予測モードは6個の候補イントラ予測モードのいずれかと決定でき、逆に、現在のブロックの参照サンプルラインのインデックスが0より大きく、MPM識別子が真であると、現在のブロックのイントラ予測モードは、5個の候補イントラ予測モードのいずれかと決定できる。
【0149】
または、現在のブロックの参照サンプルラインのインデックスと関係なく固定された数(例えば、6個または5個)のMPM候補を使用できる。
【0150】
後述の実施例では、MPMの数が6個であると仮定し、6個のMPMをMPM[0]、MPM[1]、MPM[2]、MPM[3]、MPM[4]およびMPM[5]と称することにする。MPMの数が6個より少ない実施例において、後述の実施例で説明される6個のMPMのうちの一部のみを使用して実現できる。または、MPMの数が6個より多い実施例において、後続の実施例で説明される6個のMPMを含んで実現できる。
【0151】
MPMの初期値はcandIntraPredModeAおよびcandIntraPredModeAと異なる非方向性イントラ予測モードまたは方向性イントラ予測モードに設定できる。ここで、MPMに設定できる方向性イントラ予測モードは、垂直方向のイントラ予測モード、水平方向のイントラ予測モード、左下端対角線方向のイントラ予測モード、左上端対角線方向のイントラ予測モードまたは右上端対角線方向のイントラ予測モードのうちの少なくとも1つを含み得る。一例として、MPMの初期値は以下のように設定できる。
【0152】
MPM[0]=candIntraPredModeA
MPM[1]=(candIntraPredModeA==INTRA_PLANAR)?INTRA_DC:INTRA_PLANAR
MPM[2]=INTRA_ANGULAR50
MPM[3]=INTRA_ANGULAR18
MPM[4]=INTRA_ANGULAR2
MPM[5]=INTRA_ANGULAR34
上述した例において、((A)?B:C)は、Aに記載の条件が真である場合、B値を返し、Aに記載の条件が偽である場合、C値を返す関数を示す。
【0153】
candIntraPredModeAがcandIntraPredModeBと同じであり、且つcandIntraPredModeAが方向性イントラ予測モードである場合、MPM[0]をcandIntraPredModeAに設定し、candIntraPredModeAに類似したイントラ予測モードをMPMに設定できる。candIntraPredModeAに類似したイントラ予測モードは、candIntraPredModeAとのインデックス差分値が±1または±2であるイントラ予測モードであり得る。candIntraPredModeAに類似したイントラ予測モードを導出するために、モジュラス演算(%)およびオフセットを使用できる。さらに、非方向性イントラ予測モードまたはcandIntraPredModeAとの角度差分が事前に定義された値であるイントラ予測モードのうちの少なくとも1つをMPMに設定できる。ここで、candIntraPredModeAとの角度差分が事前に定義された値であるイントラ予測モードは、candIntraPredModeAと垂直なイントラ予測モードまたはcandIntraPredModeAと反対方向のイントラ予測モードであり得る。一例として、MPMは以下のように取得できる。
【0154】
MPM[0]=candIntraPredModeA
MPM[1]=INTRA_PLANAR
MPM[2]=INTRA_DC
MPM[3]=2+((candIntraPredModeA+62)%65)
MPM[4]=2+((candIntraPredModeA-1)%65)
MPM[5]=2+((candIntraPredModeA+94)%65)
MPM[3]は、(candIntraPredModeA-1)に対応し、MPM[4]は、(candIntraPredModeA+1)に対応する。MPM[5]は、candIntraPredModeAと垂直なイントラ予測モードを示す。
【0155】
candIntraPredModeAがcandIntraPredModeBと異なる場合、candIntraPredModeAおよびcandIntraPredModeBをそれぞれMPM[0]およびMPM[1]に設定できる。または、candIntraPredAをcandIntraPredModeBと比較して、最大値をMPM[0]に設定し、最小値をMPM[1]に設定できる。逆に、最小値をMPM[0]に設定し、最大値をMPM[1]に設定することもできる。
【0156】
この場合、candIntraPredModeAおよびcandIntraPredModeBが両方とも方向性イントラ予測モードである場合、非方向性イントラ予測モードMPMに設定できる。一例として、plannerおよびDCはそれぞれMPM[2]およびMPM[3]に設定できる。
【0157】
加えて、candIntraPredModeAおよびcandIntraPredModeBのうち、値が大きいものまたは小さいものに類似したイントラ予測モードをMPMに設定できる。candIntraPredModeXに類似したイントラ予測モードは、candIntraPredModeXにオフセットを加算または減算して取得できる。この場合、オフセットの最大サイズは、candIntraPredModeAおよびcandIntraPredModeBのうちの最大値と最小値との差分に基づいて決定されることができる。一例として、オフセットは、1または2などの自然数であり得る。
【0158】
一例として、MAX(candIntraPredModeA,candIntraPredModeB)からMIN(candIntraPredModeA,candIntraPredModeB)を差分した値が64または1ではない場合、MPM[4]およびMPM[5]は以下の式で取得できる。
【0159】
MPM[4]=2+((MAX(MPM[0],MPM[1])+62)%65
MPM[5]=2+((MAX(MPM[0],MPM[1])-1)%65
ここで、MAX(A,B)関数はAおよびBのうち、大きい値を返す関数であり、MIN(A,B)関数はAおよびBのうち、小さい値を返す関数である。MPM[4]は、(MAX(MPM[0],MPM[1])-1)に対応し、MPM[5]は、(MAX(MPM[0],MPM[1])+1)に対応する。逆に、MAX(candIntraPredModeA,candIntraPredModeB)からMIN(candIntraPredModeA,candIntraPredModeB)を差分した値が64または1である場合、MPM[4]およびMPM[5]は以下のように取得できる。
【0160】
MPM[4]=2+((MAX(MPM[0],MPM[1])+61)%65
MPM[5]=2+(MAX(MPM[0],MPM[1])%65
MPM[4]は、(MAX(MPM[0],MPM[1])-2)に対応し、MPM[5]は、(MAX(MPM[0],MPM[1])+2)に対応する。
【0161】
candIntraPredModeAおよびcandIntraPredModeBのいずれかが方向性イントラ予測モードであり、別の1つが非方向性イントラ予測モードである場合、MIN(candIntraPredModeA,candIntrapredModeB)と異なる非方向性イントラ予測モード、MAX(candIntraPredModeA,candIntraPredModeB)に類似した方向性イントラ予測モード、またはMAX(candIntraPredModeA,candIntrapredModeB)との角度差分が事前に定義された値であるイントラ予測モードのうちの少なくとも1つをMPMに設定できる。一例として、MPM[2]ないしMPM[5]は以下のように取得できる。
【0162】
MPM[2]=!MIN(MPM[0],MPM[1])
MPM[3]=2+((MAX(MPM[0],MPM[1])+62)%65
MPM[4]=2+((MAX(MPM[0],MPM[1])-1)%65
MPM[5]=2+((MAX(MPM[0],MPM[1])+94)%65
MPM[2]は、MPM[0]またはMPM[1]と異なる非方向性イントラ予測モードを示す。例えば、MIN(MPM[0],MPM[1])がDCである場合、MPM[2]をplannerに設定し、MIN(MPM[0],MPM[1])がplannerである場合、MPM[2]をDCに設定する。MPM[3]は、((MAX(MPM[0],MPM[1])-1)に対応し、MPM[4]は、(MAX(MPM[0],MPM[1])+1)に対応する。MPM[5]は、(MAX(MPM[0],MPM[1])と垂直なイントラ予測モードを示す。上記した例と異なり、(MAX(MPM[0],MPM[1])に2を加算または2を減算して得たMPMをMPMリストに追加することもできる。
【0163】
candIntraPredAおよびcandIntraPredBのいずれかが非方向性イントラモードであり、別の1つが方向性イントラ予測モードである場合、即ち、candIntraPredAおよびPredIntraPredBのいずれかが2より小さく、別の1つが2より大きいか等しい場合、candIntraPredAおよびcandIntraPredBのうちの最大値をMPMに設定できる。さらに、前記最大値に類似したイントラ予測モードまたは前記最大値に垂直なイントラ予測モードをMPMに設定できる。一例として、MPM[0]ないしMPM[5]は以下のように取得できる。
【0164】
MPM[0]=MAX(candIntraPredA,candIntraPredB)
MPM[1]=INTRA_PLANAR
MPM[2]=INTRA_DC
MPM[3]=2+((MAX(candIntraPredA,candIntraPredB)+62)%65
MPM[4]=2+((MAX(candIntraPredA,candIntraPredB])-1)%65
MPM[5]=2+((MAX(candIntraPredA,candIntraPredB)+94)%65
MPM[3]は、((MAX(candIntraPredA,candIntraPredB)-1)に対応し、MPM[4]は、(MAX(candIntraPredA,candIntraPredB)+1)に対応する。MPM[5]は、(MAX(candIntraPredA,candIntraPredB)と垂直なイントラ予測モードを示す。上記した例示と異なり、(MAX(candIntraPredA,candIntraPredB)に2を加算または2を減算して得たMPMをMPMリストに追加することもできる。
【0165】
現在のブロックの参照サンプルラインのインデックスを考慮して、MPMを取得できる。特に、非隣接参照サンプルラインが現在のブロックの参照サンプルラインと決定された場合、plannerまたはDCなどの非方向性予測モードをMPMに設定しなくてもよい。一例として、MPMの初期値は、隣接参照サンプルラインが現在のブロックの参照サンプルラインと決定されたか否かに従って以下のように設定できる。
【0166】
MPM[0]=(IntraLumaRefLineIdx==0)?candIntraPredModeA:INTRA_ANGULAR2
MPM[1]=(IntraLumaRefLineIdx==0)?(candIntraPredModeA:==INTRA_PLANAR?INTRA_DC:INTRA_PLANAR):INTRA_ANGULAR18
MPM[2]=INTRA_ANGULAR50
MPM[3]=(IntraLumaRefLineIdx==0)?INTRA_ANGULAR18:INTRA_ANGULAR34
MPM[4]=(IntraLumaRefLineIdx==0)?INTRA_ANGULAR2:INTRA_ANGULAR66
MPM[5]=(IntraLumaRefLineIdx==0)?INTRA_ANGULAR34:INTRA_ANGULAR42
現在のブロックの参照サンプルラインが非隣接参照サンプルラインであり、candIntraPredModeAおよびcandIntraPredModeBが両方とも方向性イントラ予測モードである場合、以下のようにMPMを取得できる。
【0167】
MPM[0]=candIntraPredModeA
MPM[1]=candIntraPredModeB
MPM[2]=INTRA_ANGULAR2
MPM[3]=INTRA_ANGULAR18
MPM[4]=INTRA_ANGULAR50
MPM[5]=INTRA_ANGULAR34
現在のブロックの参照サンプルラインが非隣接参照サンプルラインであり、candIntraPredModeAおよびcandIntraPredModeBのいずれかが非方向性イントラ予測モードで、別の1つが方向性イントラ予測モードである場合、以下のようにMPMを取得できる。
【0168】
MPM[0]=MAX(candIntraPredModeA,candIntrapredModeB)
MPM[1]=INTRA_ANGULAR2
MPM[2]=INTRA_ANGULAR18
MPM[3]=INTRA_ANGULAR50
MPM[4]=INTRA_ANGULAR34
MPM[5]=INTRA_ANGULAR66
複数のMPMを含むMPMリストを生成した後、現在のブロックのイントラ予測モードと同じMPMがMPMリストに含まれるか否かを示す情報はビットストリームを介してシグナリングされる。前記情報が1ビットである識別子は、MPM識別子と称し得る。前記MPM識別子は、現在のブロックと同じMPMがMPMリストに含まれると示す場合、MPMの1つのMPMを識別するインデックス情報はビットストリームを介して信号をシグナリングされることができる。一例として、複数のMPMのうちのいずれかを特定するインデックス情報mpm_idxはビットストリームを介してシグナリングされることができる。前記インデックス情報により特定されたMPMは、現在のブロックのイントラ予測モードに設定できる。前記MPM識別子が、現在のブロックと同じMPMが、MPMリストに含まれていないと示す場合、MPM以外の残余イントラ予測モードのうちのいずれかを指示する残余モード情報は、ビットストリームを介してシグナリングされることができる。残余モード情報が、MPM以外の残余イントラ予測モードにインデックスを再割り当てるとき、現在のブロックのイントラ予測モードに対応するインデックス値を指す。復号化器は、MPMを昇順で配列し、残余モード情報をMPMと比較して、現在のブロックのイントラ予測モードを決定できる。一例として、残余モード情報がMPMに等しいか小さい場合、残余モード情報に1を加算して現在のブロックのイントラ予測モードを取得できる。
【0169】
現在のブロックのイントラ予測モードを取得するとき、MPMの一部と残余モード情報との比較をスキップできる。一例として、MPMの非方向性イントラ予測モードとして使用されるMPMは比較対象から排除できる。非方向性イントラ予測モードがMPMに設定された場合、残余モード情報は、方向性イントラ予測モードを指すことが明らかであるため、非方向性イントラ予測モード以外の残余MPMを残余モード情報と比較して、現在のブロックのイントラ予測モードを取得できる。非方向性イントラ予測モードを比較対象として除外する代わりに、残余モード情報に非方向性イントラ予測モードの数を加算した後、その結果値を残余MPMと比較することができる。
【0170】
デフォルトモードをMPMに設定する代わりに、現在のブロックのイントラ予測モードがデフォルトモードであるか否かを示す情報を、ビットストリームを介してシグナリングすることができる。前記情報が1ビットの識別子であり、前記識別子をデフォルトモード識別子と称し得る。前記デフォルトモード識別子は、MPM識別子が現在のブロックと同じMPMがMPMリストに含まれていることを示す場合にのみ、シグナリングされることができる。上記のように、デフォルトモードは、planner、DC、垂直方向モードまたは水平方向モードのうちの少なくとも1つを含み得る。一例として、plannerがデフォルトモードに設定された場合、デフォルトモード識別子は、現在のブロックのイントラ予測モードがplannerであるか否かを指示できる。デフォルトモード識別子が、現在のブロックのイントラ予測モードがデフォルトモードではないことを指す場合、インデックス情報によって指示された複数のMPMのうちの1つを現在のブロックのイントラ予測モードに設定することができる。
【0171】
デフォルトモード識別子を使用するとき、デフォルトモードと同じイントラ予測モードは、MPMに設定されないように、設定されることができる。一例として、デフォルトモード識別子が、現在のブロックのイントラ予測モードがplannerであるか否かを指示する場合、上記の6個のMPMのplannerに対応するMPMを、別のモードに置換し、またはplannerに対応するMPM以外の5個のMPMを使用して、現在のブロックのイントラ予測モードを取得できる。
【0172】
複数のイントラ予測モードがデフォルトモードに設定された場合、デフォルトモードのいずれかを指示するインデックス情報がよりシグナリングされることもできる。現在のブロックのイントラ予測モードは前記インデックス情報が指すデフォルトモードに設定できる。
【0173】
現在のブロックの参照サンプルラインのインデックスが0ではない場合、デフォルトモードを使用しないように設定できる。一例として、非隣接参照サンプルラインが現在のブロックの参照サンプルラインであると決定された場合、DCモードまたはplannerモードなどの非方向性イントラ予測モードを使用しないように設定できる。そのため、参照サンプルラインのインデックスが0ではない場合、デフォルトモード識別子をシグナリングせず、前記デフォルトモード識別子の値を事前に定義された値(即ち、偽)に設定できる。
【0174】
現在のブロックのイントラ予測モードが決定された後、決定されたイントラ予測モードに基づいて、現在のブロックに関する予測サンプルを取得できる(S803)。
【0175】
DCモードが選択された場合、参照サンプルの平均値に基づいて、現在のブロックに対する予測サンプルを生成できる。具体的には、予測ブロック内のすべてのサンプルの値は参照サンプルの平均値に基づいて生成できる。平均値は、現在のブロックの上端に位置する上端参照サンプルおよび現在のブロックの左側に位置する左側参照サンプルのうちの少なくとも1つに基づいて取得できる。
【0176】
現在のブロックの形状に従って、平均値を取得するために使用される参照サンプル数または範囲は異なる。一例として、現在のブロックが、幅が高さより大きい非正方形ブロックである場合、上端参照サンプルのみを使用して平均値を計算できる。逆に、現在のブロックが、幅が高さより小さい非正方形ブロックである場合、左側参照サンプルのみを使用して平均値を計算できる。即ち、現在のブロックの幅が高さと異なる場合、長さがもっと長い側に隣接する参照サンプルのみを使用して平均値を計算できる。または、現在のブロックの幅と高さの比率に基づいて、上端参照サンプルのみを使用して平均値を計算するか左側参照サンプルのみを使用して平均値を計算するかを決定できる。
【0177】
plannerモードが選択された場合、水平方向予測サンプルおよび垂直方向予測サンプルを使用して予測サンプルを取得できる。ここで、水平方向予測サンプルは、予測サンプルと同じ水平線に位置する左側参照サンプルおよび右側参照サンプルに基づいて取得され、垂直方向予測サンプルは、予測サンプルと同じ垂直線に位置する上端参照サンプルおよび下端参照サンプルに基づいて取得される。ここで、右側参照サンプルは、現在のブロックの右上隅に隣接する参照サンプルを複製して生成でき、下端参照サンプルは、現在のブロックの左下隅に隣接する参照サンプルを複製して生成できる。水平方向予測サンプルは、左側参照サンプルと右側参照サンプルとの加重和演算に基づいて取得でき、垂直方向予測サンプルは、上端参照サンプルと下端参照サンプルとの加重和演算に基づいて取得できる。この場合、各参照サンプルに対応する加重値は予測サンプルの位置に従って決定できる。予測サンプルは、水平方向予測サンプルと垂直方向予測サンプルとの平均演算または加重和演算に基づいて取得できる。加重和演算を実行するとき、予測サンプルの位置に基づいて、水平方向予測サンプルおよび垂直方向予測サンプルに与える加重値を決定できる。
【0178】
方向性予測モードが選択されたとき、選択された方向性予測モードの予測方向(または予測角度)を示すためのパラメータを決定できる。以下の表2は、各イントラ予測モードのイントラ方向パラメータintraPredAngを示す。
【0179】
【0180】
表2は、35個のイントラ予測モードが定義されたとき、インデックスが2ないし34のいずれかである各イントラ予測モードのイントラ方向パラメータを示す。33個より多い方向性イントラ予測モードが定義されているとき、表2をさらに細分化し、各方向性イントラ予測モードのイントラ方向パラメータを設定できる。
【0181】
現在のブロックの上端参照サンプルおよび左側参照サンプルを一列に並べた後、イントラ方向パラメータの値に基づいて予測サンプルを取得できる。この場合、イントラ方向パラメータの値が負の場合、左側参照サンプルおよび上端参照サンプルを一列に並べる。
【0182】
図11および
図12は、参照サンプルを一列に並べた一次元配列の例を示す図面である。
【0183】
図11は、参照サンプルを垂直方向に沿って配列した垂直方向一次元配列の例を示し、
図12は、参照サンプルを水平方向に沿って配列した水平方向一次元配列の例を示す。35個のイントラ予測モードを定義すると仮定して、
図11および
図12の実施例を説明する。
【0184】
イントラ予測モードインデックスが11ないし18のうちのいずれかである場合、上端参照サンプルを反時計回りの方向に回転する水平方向一次元配列を適用でき、イントラ予測モードインデックスが19ないし25のうちのいずれかである場合、左側参照サンプルを時計回りの方向に回転する垂直方向一次元配列を適用できる。イントラ予測モードの角度に従って参照サンプルを一列に並べることができる。
【0185】
イントラ方向パラメータに基づいて、参照サンプル決定パラメータを決定できる。参照サンプル決定パラメータは、参照サンプルを特定するための参照サンプルインデックスおよび参照サンプルで適用される加重値を決定するための加重値パラメータを含み得る。
【0186】
参照サンプルインデックスiIdxおよび加重値パラメータifactは、それぞれ以下の式4および5で取得できる。
【数3】
【0187】
式4および5では、Pangは、イントラ方向パラメータを示す。参照サンプルインデックスiIdxに従って特定された参照サンプルは整数ピクセル(Integer pel)に対応する。
【0188】
予測サンプルを取得するために、少なくとも1つ参照サンプルを特定できる。具体的には、予測モードの傾きを考慮して、予測サンプルを取得するために使用された参照サンプルの位置を特定できる。一例として、参照サンプルインデックスiIdxを使用して、予測サンプルを取得するために使用された参照サンプルを特定できる。
【0189】
この場合、イントラ予測モードの傾きが1つの参照サンプルで表されていない場合、複数の参照サンプルを補間して予測サンプルを生成できる。一例として、イントラ予測モードの傾きが、予測サンプルと第1参照サンプルとの間の傾きと、予測サンプルと第2参照サンプルとの間の傾きとの間の値である場合、第1参照サンプルおよび第2参照サンプルを補間して予測サンプルを取得できる。即ち、イントラ予測角度に基づく角線(Angular Line)が整数ピクセルに位置する参照サンプルを通過しない場合、前記角線が通過する位置の左右または上下に隣接する位置に位置する参照サンプルを補間して予測サンプルを取得できる。
【0190】
以下の式6は、参照サンプルに基づいて予測サンプルを取得する例を示す。
【数4】
【0191】
式6では、Pは予測サンプルを示し、Ref_1Dは一次元配列の参照サンプルのうちのいずれかを示す。この場合、参照サンプルの位置は、予測サンプルの位置(x,y)および参照サンプルインデックスiIdxに従って決定できる。
【0192】
イントラ予測モードの傾きが1つの参照サンプルによって表される場合、加重値パラメータi
factは0に設定される。そのため、式6は以下の式7に示されたように簡略化できる。
【数5】
【0193】
複数のイントラ予測モードに基づいて現在のブロックに対するイントラ予測を実行することもできる。一例として、予測サンプルに従ってイントラ予測モードを取得でき、各予測サンプルに割り当てられるイントラ予測モードに基づいて、予測サンプルを取得できる。
【0194】
または、領域に従ってイントラ予測モードを取得でき、各領域に割り当てられたイントラ予測モードに基づいて、各領域に対するイントラ予測を実行できる。ここで、前記領域は少なくとも1つのサンプルを含み得る。前記領域のサイズまたは形状のうちの少なくとも1つは、現在のブロックのサイズ、形状またはイントラ予測モードのうちの少なくとも1つに基づいて適応的に決定できる。または、符号化器および復号化器で、現在のブロックのサイズまたは形状から独立して、領域のサイズまたは形状のうちの少なくとも1つが事前に定義されていてもよい。
【0195】
または、それぞれ複数のイントラ予測に基づいてイントラ予測を実行し、複数回のイントラ予測を介して取得された複数の予測サンプルの平均演算または加重和演算に基づいて最終的な予測サンプルを取得できる。一例として、第1イントラ予測モードに基づいてイントラ予測を実行して、第1予測サンプルを取得し、第2イントラ予測モードに基づいてイントラ予測を実行して、第2予測サンプルを取得できる。その後、第1予測サンプルと第2予測サンプルとの平均演算または加重和演算に基づいて最終的な予測サンプルを取得できる。この場合、第1予測サンプルおよび第2予測サンプルのそれぞれに割り当てられた加重値は、第1イントラ予測モードが非方向性または方向性予測モードであるか否か、第2イントラ予測モードが非方向性または方向性予測モードであるか否か、または隣接ブロックのイントラ予測モードのうちの少なくとも1つに従って決定できる。
【0196】
複数のイントラ予測モードは、非方向性イントラ予測モードと方向性予測モードとの組み合わせ、方向性予測モードとの組み合わせまたは非方向性予測モードとの組み合わせであり得る。
【0197】
図13は、方向性イントラ予測モードがX軸と平行な直線と形成された角度を例示する図面である。
【0198】
図13に示された例のように、方向性予測モードは左下の対角線方向ないし右上の対角線方向の間に存在できる。x軸と方向性予測モードが形成された角度で説明すると、方向性予測モードは45度(左下の対角線方向)ないし-135度(右上の対角線方向)の間に存在することができる。
【0199】
現在のブロックが非正方形である場合、現在のブロックのイントラ予測モードに従って、イントラ予測角度に従う角線に位置する参照サンプルの予測サンプルにより近い参照サンプルの代わりに、予測サンプルにより遠い参照サンプルを使用して予測サンプルを取得する状況が発生する可能性がある。
【0200】
図14は、現在のブロックが非正方形である場合、予測サンプルが取得される形態の概略図である。
【0201】
一例として、
図14の(a)に示されたように、現在のブロックが幅が高さより大きい非正方形であり、現在のブロックのイントラ予測モードが0度ないし45度の間の角度を有する方向性イントラ予測モードであると仮定する。上記の場合では、現在のブロックの右側の列の近くの予測サンプルAを取得するとき、前記角度に従う角度モードに位置する参照サンプルのうち、前記予測サンプルに近い上端参照サンプルTの代わりに、前記予測サンプルと遠い左側参照サンプルLを使用する状況が発生する可能性がある。
【0202】
別の例として、
図14の(b)に示されたように、現在のブロックが高さが幅より大きい非正方形であり、現在のブロックのイントラ予測モードが-90度ないし-135度の間の方向性イントラ予測モードであると仮定する。上記の場合では、現在のブロックの下端の行の近くの予測サンプルAを取得するとき、前記角度に従う角度モードに位置する参照サンプルのうち、前記予測サンプルに近い左側参照サンプルLの代わりに、前記予測サンプルと遠い上端参照サンプルTを使用する状況が発生する可能性がある。
【0203】
上述した問題を解消するために、現在のブロックが非正方形である場合、現在のブロックのイントラ予測モードを反対の方向のイントラ予測モードに置換できる。そのため、非正方形ブロックに対して、
図10に示された方向性予測モードより大きいまたはより小さい角度を有する方向性予測モードを使用できる。このような方向性イントラ予測モードを広角イントラ予測モード(wide angle intra prediction mode)と定義できる。広角イントラ予測モードは、45度ないし-135度の範囲に含まれない方向性イントラ予測モードを示す。
【0204】
図15は、広角イントラ予測モードを示す図面である。
【0205】
図15に示された例では、インデックスが-1ないし-14であるイントラ予測モードおよびインデックスが67ないし80の間であるイントラ予測モードは、広角イントラ予測モードを示す。
【0206】
図15では、角度が45度より大きい14個の広角イントラ予測モード(-1ないし-14)および角度が-135度より小さい14個の広角イントラ予測モード(67ないし80)を例示したが、これより多い数またはより小さい数の広角イントラ予測モードが定義されることができる。
【0207】
広角イントラ予測モードを使用するとき、上端参照サンプルの長さは2W+1に設定でき、左側参照サンプルの長さは2H+1に設定できる。
【0208】
広角イントラ予測モードを使用することと伴い、
図14(a)に示されたサンプルAは、参照サンプルTを使用して予測でき、
図14の(b)に示されたサンプルAは参照サンプルLを使用して予測できる。
【0209】
元のイントラ予測モードおよびN個の広角イントラ予測モードを加えて、合計67+N個のイントラ予測モードを使用できる。一例として、表3は、20個の広角イントラ予測モードを定義するとき、イントラ予測モードのイントラ方向パラメータを示す。
【0210】
【0211】
現在のブロックが非正方形であり、S802で取得された現在のブロックのイントラ予測モードが変換範囲に属する場合、現在のブロックのイントラ予測モードを広角イントラ予測モードに変換できる。前記変換範囲は、現在のブロックのサイズ、形状または比率のうちの少なくとも1つに基づいて決定できる。ここで、前記比率は、現在のブロックの幅と高さとの比率を表示する。
【0212】
現在のブロックが幅が高さより大きい非正方形である場合、変換範囲は、右上の対角線方向のイントラ予測モードインデックス(例えば、66)ないし(右上対角線方向のイントラ予測モードのインデックス、-N)に設定できる。ここで、Nは、現在のブロックの比率に基づいて決定できる。現在のブロックのイントラ予測モードが変換範囲に属する場合、前記イントラ予測モードを広角イントラ予測モードに変換できる。前記変換は、前記イントラ予測モードから事前に定義された値を減算することであり得、事前に定義された値は、広角イントラ予測モード以外のイントラ予測モードの合計(例えば、67)であり得る。
【0213】
前記実施例によれば、66番ないし53番間のイントラ予測モードは、それぞれ-1番ないし-14番間の広角イントラ予測モードに変換できる。
【0214】
現在のブロックの高さが幅より大きい非正方形である場合、変換範囲は左下の対角線方向のイントラ予測モードインデックス(例えば、2)ないし(左下の対角線方向のイントラ予測モードのインデックス、+M)に設定できる。ここで、Mは、現在のブロックの比率に基づいて決定できる。現在のブロックのイントラ予測モードが変換範囲に属する場合、前記イントラ予測モードを広角イントラ予測モードに変換できる。前記変換は前記イントラ予測モードに事前に定義された値を加算することであり得、事前に定義された値は、広角イントラ予測モード以外の方向性イントラ予測モードの合計(例えば、65)であり得る。
【0215】
前記実施例によれば、2番ないし15番間のイントラ予測モードのそれぞれは、67番ないし80番間の広角イントラ予測モードに変換できる。
【0216】
以下は、変換範囲に属するイントラ予測モードを広角イントラ代替予測モードと称する。
【0217】
変換範囲は、現在のブロックの比率に基づいて決定できる。一例として、表4および表5は、それぞれ広角イントラ予測モード以外の35個のイントラ予測モードが定義される場合および67個のイントラ予測モードが定義される場合、変換範囲を示す。
【0218】
【0219】
【0220】
表4および表5に示されたように、変換範囲に含まれる広角イントラ代替予測モードの数は現在のブロックの比率によって異なってもよい。
【0221】
現在のブロックの比率をさらに細分化し、以下の表6に示されたように変換範囲を設定することもできる。
【0222】
【0223】
非隣接参照サンプルラインが現在のブロックの参照サンプルラインに決定された場合、または、複数の参照サンプルラインからある1つのマルチラインイントラ予測符号化方法を選択する場合では、広角イントラ予測モードを使用しないように設定できる。即ち、現在のブロックが非正方形であり、現在のブロックのイントラ予測モードが変換範囲に属する場合としても、現在のブロックのイントラ予測モードを広角イントラ予測モードに変換しなくてもよい。
【0224】
または、現在のブロックのイントラ予測モードが広角イントラ予測モードであると決定された場合、非隣接参照サンプルラインを現在のブロックの参照サンプルラインとして使用できないと設定し、または複数の参照サンプルラインのうちのいずれかを選択するマルチラインイントラ予測符号化方法が使用されない場合、隣接参照サンプルラインが現在のブロックの参照サンプルラインに決定されることができる。
【0225】
広角イントラ予測モードを使用しない場合、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より小さい場合、offsetYの値をoffsetXの値より大きく設定できる。一例として、offsetXの値を0に設定でき、offsetYの値は1に設定できる。
【0226】
元のイントラ予測モードに広角イントラ予測モードを追加し使用して、広角イントラ予測モードを符号化するために必要なリソースが増加され、符号化効率は低下する。そのため、広角イントラ予測モードをそのまま符号化する代わりに、広角イントラ予測モードに対する代替イントラ予測モードを符号化することにより、符号化効率を向上させることができる。
【0227】
一例として、現在のブロックが67番の広角イントラ予測モードを使用して符号化されたとき、67番の広角代替イントラ予測モードである2番を現在のブロックのイントラ予測モードで符号化することができる。さらに、現在のブロックが-1番の広角イントラ予測モードで符号化されるとき、-1番の広角代替イントラ予測モードである66番を現在のブロックのイントラ予測モードで符号化することができる。
【0228】
復号化器は、現在のブロックのイントラ予測モードを復号化し、復号化されたイントラ予測モードが変換範囲に含まれているか否かを判断できる。復号化されたイントラ予測モードが、広角代替イントラ予測モードである場合、イントラ予測モードを広角イントラ予測モードに変換できる。
【0229】
または、現在のブロックが広角イントラ予測モードで符号化される場合、広角イントラ予測モードをそのまま符号化することもできる。
【0230】
イントラ予測モードの符号化は、上記のMPMリストに基づいて実現できる。具体的には、隣接ブロックが広角イントラ予測モードで符号化される場合、前記広角イントラ予測モードに対応する広角代替イントラ予測モードに基づいてMPMを設定できる。一例として、隣接ブロックが広角イントラ予測モードで符号化される場合、変数candIntraPredModeX(XはAまたはBである)を広角イントラ予測モード代替イントラ予測モードに設定できる。
【0231】
または、隣接ブロックの広角イントラ予測モードに基づいてMPMを設定することもできる。一例として、隣接ブロックが広角イントラ予測モードで符号化される場合、変数candIntraPredModeXを広角イントラ予測モードに設定できる。
【0232】
現在のブロックの参照サンプルラインが非隣接参照サンプルラインであるか否か、または複数の参照サンプルラインのうちの1つを選択したマルチラインイントラ予測符号化方法が適用されるか否かに基づいて、MPMを取得できる。一例として、現在のブロックの参照サンプルラインが非隣接参照サンプルラインであり、現在のブロックに隣接する隣接ブロックのイントラ予測モードが広角イントラ予測モードである場合、デフォルトモードを現在のブロックのMPMに設定できる。
【0233】
一例として、左側隣接ブロックのイントラ予測モードに基づいて得たcandIntraPredModeAが、上端隣接ブロックのイントラ予測モードに基づいて得たcandIntraPredModeBと同じであり、candIntraPredModeAが、plannerまたはDCである場合、現在のブロックの参照サンプルラインのインデックスが0であるか否かを考慮して、以下のようにMPMを取得できる。
【0234】
MPM[0]=(IntraLumaRefLineIdx==0)?Intra_Planar:INTRA_ANGULAR50
MPM[1]=(IntraLumaRefLineIdx==0)?Intra_DC:INTRA_ANGULAR18
MPM[2]=INTRA_ANGULAR2
即ち、現在のブロックの参照サンプルラインのインデックスが0である場合、plannerモードおよびDCモードをMPMに設定し、逆に、現在のブロックの参照サンプルラインインデックスが0ではない場合、垂直方向イントラ予測モード(INTRA_ANGULAR50)および水平方向イントラ予測モード(INTRA_ANGULAR18)をMPMに設定できる。
【0235】
現在のブロックの参照サンプルラインのインデックスが0ではなく、candIntraPredModeAがcandIntraPredModeBと同じであるが、candIntraPredModeAが広角イントラ予測モードである場合、以下のようにMPMを取得できる。
【0236】
MPM[0]=INTRA_ANGULAR2
MPM[1]=INTRA_ANGULAR18
MPM[2]=INTRA_ANGULAR50
または、以下のようにMPMを取得することもできる。
【0237】
MPM[0]=INTRA_ANGULAR50
MPM[1]=INTRA_ANGULAR18
MPM[2]=INTRA_ANGULAR2
即ち、現在のブロックの参照サンプルラインインデックスが0ではない場合、広角イントラ予測モードをMPMに設定しなくてもよい。
【0238】
candIntraPredModeAがcandIntraPredModeBと同じであり、candIntraPredModeAが方向性イントラ予測モードである場合、以下のようにMPMを取得できる。
【0239】
MPM[0]=candIntraPredModeA
MPM[1]=2+((candIntraPredModeA+61)%64)
MPM[2]=2+((candIntraPredModeA-1)%64)
現在のブロックの参照サンプルラインのインデックスが0であり、candIntraPredModeAがcandIntraPredModeBと異なる場合、MPM[0]およびMPM[1]はそれぞれcandIntraPredModeAおよびcandIntraPredModeBに設定できる。MPM[2]は、planner、DCおよび垂直方向モードのMPM[0]およびMPM[1]と異なることとして設定できる。
【0240】
現在のブロックの参照サンプルラインのインデックスが0ではなく、candIntraPredModeAおよびcandIntraPredModeBのうちのいずれかがplannerであり、別の1つがDCである場合、以下のようにMPMを取得できる。
【0241】
MPM[0]=INTRA_ANGULAR2
MPM[1]=INTRA_ANGULAR18
MPM[2]=INTRA_ANGULAR50
現在のブロックの参照サンプルラインのインデックスが0ではなく、candIntraPredModeAおよびcandIntraPredModeBが両方とも広角イントラ予測モードである場合、以下のようにMPMを取得できる。
【0242】
MPM[0]=INTRA_ANGULAR2
MPM[1]=INTRA_ANGULAR18
MPM[2]=INTRA_ANGULAR50
現在のブロックの参照サンプルラインのインデックスが0ではなく、candIntraPredModeAおよびcandIntraPredModeBのうちのいずれかが広角イントラ予測モードである場合、candIntrapredModeAおよびcandIntraPredModeBのうち、非広角イントラ予測モードであることをMPM[0]に設定し、MPM[0]に類似したイントラ予測モードをMPM[1]およびMPM[2]に設定できる。一例として、candIntraPredModeAが非広角イントラ予測モードであり、candIntraPredModeBが広角イントラ予測モードである場合、以下のようにMPMを取得できる。
【0243】
MPM[0]=candIntraPredModeA
MPM[1]=2+((candIntraPredModeA+61)%64)
MPM[2]=2+((candIntraPredModeA-1)%64)
逆に、candIntraPredModeAが広角イントラ予測モードであり、candIntraPredModeBが非広角イントラ予測モードである場合、以下のようにMPMを取得できる。
【0244】
MPM[0]=candIntraPredModeB
MPM[1]=2+((candIntraPredModeB+61)%64)
MPM[2]=2+((candIntraPredModeB-1)%64)
現在のブロックの参照サンプルラインのインデックスが0ではなく、candIntraPredModeAおよびcandIntraPredModeBのうちのいずれかがplannerまたはDCであり、別の1つが非広角イントラ予測モードである場合、candIntrapredModeAおよびcandIntraPredModeBのうち、非広角イントラ予測モードであることを、MPM[0]に設定し、MPM[0]に類似したイントラ予測モードをMPM[1]およびMPM[2]に設定できる。一例として、candIntraPredModeAが非広角イントラ予測モードであり、candIntraPredModeBがplannerまたはDCである場合、以下のようにMPMを取得できる。
【0245】
MPM[0]=candIntraPredModeA
MPM[1]=2+((candIntraPredModeA+61)%64)
MPM[2]=2+((candIntraPredModeA-1)%64)
逆に、candIntraPredModeAがplannerまたはDCであり、candIntraPredModeBが非広角イントラ予測モードである場合、以下のようにMPMを取得できる。
【0246】
MPM[0]=candIntraPredModeB
MPM[1]=2+((candIntraPredModeB+61)%64)
MPM[2]=2+((candIntraPredModeB-1)%64)
現在のブロックの参照サンプルラインのインデックスが0ではなく、candIntraPredModeAおよびcandIntraPredModeBが両方とも非広角イントラ予測モードである場合、candIntraPredModeAおよびcandIntraPredModeBをそれぞれMPM[0]およびMPM[1]に設定できる。垂直方向イントラ予測モード(INTRA_ANGULAR50)、水平方向イントラ予測モード(INTRA_ANGULAR18)または左下の対角線方向イントラ予測モード(INTRA_ANGULAR2)のうちのMPM[0]およびMPM[1]と重複しないいずれの1つをMPM[2]に設定できる。
【0247】
コーディングブロックまたは変換ブロックを複数のサブブロック(またはサブパーティション)に分割できる。コーディングブロックまたは変換ブロックが複数のサブブロックに分割された場合、各サブブロックに対して予測、変換および量子化を実行することができる。コーディングブロックまたは変換ブロックを複数のサブブロックに分割することをサブパーティションイントラ符号化方法と定義できる。
【0248】
サブパーティションイントラ符号化方法が適用されるか否かを示す情報は、ビットストリームを介してシグナリングされることができる。前記情報は1ビットの識別子であり得る。一例として、コーディングブロックまたは変換ブロックが複数のサブブロックに分割されるか否かを示す構文要素「intra_subpartitions_mode_flag」は、ビットストリームを介してシグナリングされることができる。
【0249】
または、コーディングブロックまたは変換ブロックのサイズ、形状またはイントラ予測モードのうちの少なくとも1つに基づいて、サブパーティションイントラ符号化方法が適用されるか否かを決定できる。一例として、コーディングブロックのイントラ予測モードが非方向性イントラ予測モード(例えば、plannerまたはDC)または事前に定義された方向性イントラ予測モード(例えば、水平方向のイントラ予測モード、垂直方向のイントラ予測モードまたは対角線方向のイントラ予測モード)である場合、サブパーティションイントラ符号化方法を適用しなくてもよい。または、コーディングブロックのサイズが閾値より小さい場合、サブパーティションイントラ符号化方法が使用されないように設定できる。
【0250】
または、コーディングブロックのイントラ予測モードに基づいて、サブブロックに対するイントラ予測を実行する場合、サブブロックのイントラ予測のとき、隣接サブブロックに含まれる復元サンプルを参照サンプルとして使用する必要があるか否かに基づいて、サブパーティションイントラ符号化方法が適用されるか否かを決定できる。一例として、コーディングブロックが、イントラ予測モードが対角線方向イントラ予測モードまたは広角イントラ予測モードであり、前記イントラ予測モードに基づいてサブブロックに対するイントラ予測を実行するとき、隣接サブブロックを参照サンプルとして使用できない場合、サブパーティションイントラ符号化方法が使用されないように設定できる。
【0251】
または、コーディングブロックの高さと幅との比率が閾値以上または閾値以下である場合、サブパーティションイントラ符号化方法が使用されないように設定できる。または、コーディングブロックの高さまたは幅のうちの少なくとも1つが閾値以下である場合、サブパーティションイントラ符号化方法を使用しなくてもよい。一例として、コーディングブロックの高さおよび幅が両方とも閾値以下である場合、サブパーティションイントラ符号化方法を使用しなくてもよい。閾値は符号化器および復号化器の事前に定義された値を有し得る。または、閾値を決定するための情報はビットストリームを介してシグナリングされることができる。
【0252】
または、コーディングブロックまたは変換ブロックのサイズ、形状またはイントラ予測モードのうちの少なくとも1つに従って、サブパーティションイントラ符号化方法を適用するか否かを示すための識別子をシグナリングするか否かを決定できる。一例として、コーディングブロックの高さおよび幅が両方とも閾値以下である場合、および/またはコーディングブロックのサイズが閾値以上である場合にのみ、サブパーティションイントラ符号化方法を適用するか否かを示すための識別子を符号化してシグナリングされることができる。サブパーティションイントラ符号化方法を適用するか否かを示す識別子が符号化されていない場合、サブパーティションイントラ符号化方法を適用しなくてもよい。
【0253】
サブパーティションイントラ符号化方法を適用する場合、コーディングブロックまたは変換ブロックの分割形状を決定できる。ここで、分割形状はコーディングブロックまたは変換ブロックの分割方向を示す。一例として、垂直方向パーティショニングは、少なくとも1つの垂直線を使用してコーディングブロックまたは変換ブロックを分割することを指し、水平方向パーティショニングは、少なくとも1つの水平線を使用してコーディングブロックまたは変換ブロックを分割することを指す。
【0254】
図16は、垂直方向パーティショニングおよび水平方向パーティショニングの例を示す図面である。
【0255】
図16の(a)は、コーディングブロックが2個のサブブロックに分割された例を示し、
図16の(b)は、コーディングブロックが4個のサブブロックに分割された例を示す。
【0256】
コーディングブロックおよび変換ブロックの分割形状を決定するための情報は、ビットストリームを介してシグナリングされることができる。一例として、コーディングブロックまたは変換ブロックが垂直方向パーティショニングを適用したか、水平方向パーティショニングを適用したかを示す情報は、ビットストリームを介してシグナリングされることができる。前記情報は1ビットの識別子intra_subpart_type_flagであり得る。前記識別子の値が1であることは、コーディングブロックまたは変換ブロックが水平方向に沿ってパーティショニングされることを示し、前記識別子の値が0である場合、コーディングブロックまたは変換ブロックが垂直方向に沿ってパーティショニングされることを示す。
【0257】
または、コーディングブロックまたは変換ブロックのサイズ、形状またはイントラ予測モードに基づいて、コーディングブロックまたは変換ブロックの分割形状を決定できる。一例として、コーディングブロックの幅と高さとの比率に基づいて、コーディングブロックの分割形状を決定できる。例えば、コーディングブロックの幅と高さとの比率を示すwhRatio値が第1閾値以上である場合、コーディングブロックに対して垂直方向パーティショニングを適用できる。そうでない場合、コーディングブロックに対して水平方向パーティショニングを適用できる。
【0258】
図17は、コーディングブロックの分割形状を決定する例を示す図面である。
【0259】
説明の便宜上、第1閾値を2と仮定する。
図17の(a)に示された例において、コーディングブロックのwhRatioが1であり、これは第1閾値より小さい。そのため、コーディングブロック分割形状を示す情報に対する符号化をスキップし、コーディングブロックに対して水平方向パーティショニングを適用できる。
【0260】
図17の(b)に示された例において、コーディングブロックのwhRatioが2であり、これは第1閾値と同じである。そのため、コーディングブロック分割形状を表す情報に対する符号化をスキップし、コーディングブロックに対して垂直方向パーティショニングを適用できる。
【0261】
第1閾値のシンボルと反対する第2閾値を使用してコーディングブロックの分割形状を決定することもできる。一例として、whRatio値が第2閾値以下である場合、コーディングブロックに水平方向パーティショニングを適用でき、そうでない場合、コーディングブロックに垂直方向パーティショニングを適用できる。第1閾値および第2閾値の絶対値が同じであり得、これらのシンボルは異なってもよい。一例として、第1閾値がN(ここで、Nは1、2、4などの整数である)である場合、第2閾値は-Nであり得る。
【0262】
図18は、コーディングブロックの分割形状を決定する例を示す図面である。
【0263】
説明の便宜上、第2閾値は-2と仮定する。
図18の(a)に示された例において、コーディングブロックのwhRatioが-1であり、これは第2閾値より大きい。そのため、コーディングブロック分割形状を示す情報に対する符号化をスキップし、コーディングブロックに対して垂直方向パーティショニングを適用できる。
【0264】
図18の(b)に示された例において、コーディングブロックのwhRatioが-2、であり、これは第2閾値と同じである。そのため、コーディングブロック分割形状を示す情報に対する符号化をスキップし、コーディングブロックに対して水平方向パーティショニングを適用できる。
【0265】
または、第1閾値および第2閾値を基準としてコーディングブロックの分割形状を決定できる。一例として、whRatioの値が第1閾値以上である場合、コーディングブロックに対して水平方向パーティショニングを採用し、whRatioの値が第2閾値以下である場合、コーディングブロック采用垂直方向パーティショニングを採用できる。whRatioの値が第1閾値と第2閾値との間にある場合、ビットストリームから情報を解析し、現在のブロックの分割形状を決定できる。
【0266】
第1閾値および第2閾値は、符号化器および復号化器で事前に定義できる。または、シーケンス、画像またはスライスに従って第1閾値および第2閾値を定義できる。
【0267】
または、コーディングブロックまたは変換ブロックのサイズに基づいて分割形状を決定できる。一例として、コーディングブロックのサイズがN×nである場合、垂直方向パーティショニングを適用でき、コーディングブロックのサイズがn×Nである場合、水平方向パーティショニングを適用できる。ここで、nはNより小さい自然数であり得る。Nおよび/またはnは、符号化器および復号化器で事前に定義された値であり得る。または、Nおよび/またはnを決定するための情報はビットストリームを介してシグナリングすることができる。一例として、Nは32、64、128または256などであり得る。そのため、コーディングブロックのサイズが128×n(ここで、nは16、32または64などの自然数である)である場合、垂直方向パーティショニングを適用でき、コーディングブロックのサイズがn×128である場合、水平方向パーティショニングを適用できる。
【0268】
または、コーディングブロックまたは変換ブロックのイントラ予測モードに基づいて、コーディングブロックまたは変換ブロックの分割形状を決定できる。一例として、コーディングブロックのイントラ予測モードが水平方向または水平方向に類似した方向である場合、コーディングブロックに対して垂直方向パーティショニングを適用できる。ここで、水平方向に類似した方向のイントラ予測モードは、水平方向のイントラ予測モード(例えば、
図10の(b)に示されたINTRA_ANGULAR18)とのインデックス差が閾値以下であるイントラ予測モード(例えば、INTRA_ANGULAR18±N)を示す。逆に、コーディングブロックのイントラ予測モードが垂直方向または垂直方向に類似した方向である場合、コーディングブロックに対して水平方向パーティショニングを適用できる。ここで、垂直方向に類似した方向のイントラ予測モードは、垂直方向のイントラ予測モード(例えば、
図10の(b)に示されたINTRA_ANGULAR50)とのインデックス差が閾値以下であるイントラ予測モード(例えば、INTRA_ANGULAR50±N)を示す。ここで、閾値Nは符号化器および復号化器で事前に定義された値であり得る。または、閾値Nを決定するための情報はシーケンスレベル、画像レベルまたはスライスレベルからシグナリングできる。
【0269】
図19は、コーディングブロックのイントラ予測モードに基づいてコーディングブロックの分割形状を決定する例の概略図である。
【0270】
図19の(a)に示されたように、コーディングブロックのイントラ予測モードが垂直方向に類似した方向である場合、コーディングブロックに対して水平方向パーティショニングを適用できる。
【0271】
逆に、
図19の(b)に示されたように、コーディングブロックのイントラ予測モードが水平方向に類似した方向である場合、コーディングブロックに対して垂直方向パーティショニングを適用できる。
【0272】
示された例と異なり、コーディングブロックのイントラ予測モードが水平方向または水平方向に類似した方向である場合、水平方向パーティショニングを適用でき、コーディングブロックのイントラ予測モードが垂直方向または垂直方向に類似した方向である場合、垂直方向パーティショニングを適用することもできる。
【0273】
垂直方向パーティショニングまたは水平方向パーティショニングを適用するとき、コーディングブロックまたは変換ブロックを分割することにより生成されたサブブロックの幅または高さのうちの少なくとも1つが閾値より小さいか否かに基づいて、コーディングブロックまたは変換ブロックの分割形状を決定できる。ここで、閾値は2、4または8などの整数であり得る。
【0274】
図20は、コーディングブロックの分割形状を説明するための概略図である。
【0275】
図20の(a)に示された4×8サイズのコーディングブロックに対して水平方向パーティショニングを適用する場合、前記コーディングブロックは2×8サイズのサブブロックに分割される。この場合、サブブロックの幅は閾値より小さくなるため、前記コーディングブロックに対して、水平方向パーティショニングを使用できなくなる。逆に、4×8サイズのコーディングブロックに対して垂直方向パーティショニングを適用する場合、前記コーディングブロックは4×4サイズのサブブロックに分割される。サブブロックの幅および高さは両方とも閾値以上であるため、前記コーディングブロックに対して、垂直方向パーティショニングを使用できる。前記コーディングブロックに対して、垂直方向パーティショニングのみを使用でき、そのため、前記コーディングブロックの分割形状を示す情報に対する符号化をスキップし、前記コーディングブロックに対して垂直方向パーティショニングを適用できる。
【0276】
図20の(b)に示された8×4サイズのコーディングブロックに対して垂直方向パーティショニングを適用する場合、前記コーディングブロックは8×2サイズのサブブロックに分割される。この場合、サブブロックの高さが閾値より小さくなるため、前記コーディングブロックに対して、垂直方向パーティショニングを使用できなくなる。逆に、8×4サイズのコーディングブロックに対して水平方向パーティショニングを適用する場合、前記コーディングブロックは4×4サイズのサブブロックに分割される。サブブロックの幅および高さは両方とも閾値以上であるため、前記コーディングブロックに対して、水平方向パーティショニングを使用できる。前記コーディングブロックに対して、水平方向パーティショニングのみを使用でき、そのため、前記コーディングブロックの分割形状を示す情報に対する符号化をスキップし、前記コーディングブロックに対して垂直方向パーティショニングを適用できる。
【0277】
垂直方向パーティショニングおよび水平方向パーティショニングが両方とも使用できる場合、コーディングブロックの分割形状を示す情報を解析して、コーディングブロックの分割形状を決定できる。
【0278】
サブブロックの数は、コーディングブロックまたは変換ブロックのサイズまたは形状のうちの少なくとも1つに基づいて決定されることができる。一例として、コーディングブロックの幅または高さのうちのいずれかが8で、別の1つが4である場合、コーディングブロックは2個のサブブロックに分割できる。逆に、コーディングブロックの幅および高さが両方とも8以上であるかまたはコーディングブロックの幅または高さのうちのいずれかが8より大きい場合、コーディングブロックは4個のサブブロックに分割できる。要するに、コーディングブロックが4×4サイズである場合、コーディングブロックはサブブロックに分割しなくてもよい。コーディングブロックが4×8または8×4サイズである場合、コーディングブロックを2個のサブブロックに分割できる。他の場合、コーディングブロックを4個のサブブロックに分割できる。
【0279】
または、サブブロックのサイズ、形状またはサブブロック数を示す情報は、ビットストリームを介してシグナリングすることができる。サブブロック数を示す情報に従って、サブブロックのサイズまたは形状を決定できる。または、サブブロックサイズまたは形状を示す情報に従って、サブブロックの数を決定できる。
【0280】
サブパーティションイントラ符号化方法を適用する場合、コーディングブロックまたは変換ブロックを分割することを介して生成されたサブブロックは、同じイントラ予測モードを使用できる。一例として、コーディングブロックに隣接する隣接ブロックのイントラ予測モードに基づいて、コーディングブロックに対するMPMを取得し、取得したMPMに従って、コーディングブロックに対するイントラ予測モードを決定できる。コーディングブロックのイントラ予測モードを決定した場合、各サブブロックは決定されたイントラ予測モードを使用してイントラ予測を実行できる。
【0281】
サブパーティションイントラ符号化方法を適用する場合、MPMのうちのいずれかをコーディングブロックのイントラ予測モードに決定できる。即ち、サブパーティションイントラ符号化方法を適用する場合、MPM識別子をシグナリングしなくても、MPM識別子は真であると見なすことができる。
【0282】
または、サブパーティションイントラ符号化方法を適用する場合、事前に定義された候補イントラ予測モードのうちのいずれかをコーディングブロックのイントラ予測モードに決定できる。一例として、水平方向のイントラ予測モード、垂直方向のイントラ予測モード、対角線方向のイントラ予測モード(例えば、左上のイントラ予測モード、右上のイントラ予測モードまたは左下のイントラ予測モードのうちの少なくとも1つ)または非方向性イントラ予測モード(例えば、plannerまたはDCのうちの少なくとも1つ)のうちのいずれかをコーディングブロックのイントラ予測モードに決定できる。事前に定義された候補イントラ予測モードのいずれかを特定するインデックス情報は、ビットストリームを介して信号をシグナリングされることができる。
【0283】
本願の一実施例によれば、サブブロックのうちの少なくとも1つのイントラ予測モードを他のサブブロックと異なるように設定できる。一例として、N番目のサブブロックのイントラ予測モードは、N-1番目のサブブロックのイントラ予測モードをオフセットと加算または減算して取得できる。オフセットは符号化器および復号化器で事前に定義できる。または、コーディングブロックのサイズ、形状、イントラ予測モード、サブブロックのサイズ、形状、サブブロックの数またはコーディングブロックの分割方向のうちの少なくとも1つに基づいてオフセットを取得できる。または、オフセットを取得するための情報をビットストリームを介して信号をシグナリングできる。
【0284】
または、N-1番目のサブブロックのイントラ予測モードが非方向性モードである場合、N番目のサブブロックのイントラ予測モードもN-1番目のサブブロックのイントラ予測モードと同じく設定され、N-1番目のサブブロックのイントラ予測モードが角度モードである場合、N-1番目のサブブロックのイントラ予測モードをオフセットと加算または減算して、取得されたイントラ予測モードを、N番目のサブブロックのイントラ予測モードと同じく設定できる。
【0285】
または、複数のサブブロックのうちの一部に対して方向性イントラ予測モードを適用し、残りのサブブロックに対して非方向性イントラ予測モードを適用できる。サブブロックのサイズ、形状、位置またはサブブロックの数のうちの少なくとも1つに従って、非方向性イントラ予測モードを適用するサブブロックを決定できる。または、複数のサブブロックのいずれかを適用された方向性イントラ予測モードが事前に定義された値である場合にのみ、別の1つに対して非方向性イントラ予測モードを適用することができる。
【0286】
または、MPMから各サブブロックのイントラ予測モードを取得できる。そのため、各サブブロックに対して、MPMのいずれかを特定するインデックス情報をシグナリングできる。
【0287】
または、事前に定義された候補イントラ予測モードから各サブブロックのイントラ予測モードを取得できる。そのため、各サブブロックに対して、事前に定義された候補イントラ予測モードのいずれかを特定するインデックス情報をシグナリングできる。
【0288】
または、サブブロックのイントラ予測モードが同じく設定されたか否かを示す情報は、ビットストリームを介して信号をシグナリングされることができる。
【0289】
サブブロックの量子化パラメータを別々に決定できる。そのため、各サブブロックの量子化パラメータの値は異なるように設定できる。各サブブロックの量子化パラメータを決定するために、前のサブブロックの量子化パラメータとの差分値を示す情報を符号化することができる。一例として、N番目のサブブロックに対して、N番目のサブブロックの量子化パラメータとN-1番目のサブブロックの量子化パラメータとの差分値を符号化することができる。
【0290】
サブブロックのイントラ予測は参照サンプルを使用して実行できる。この場合、参照サンプルは、サブブロックに隣接する隣接ブロックの復元サンプルから取得できる。サブブロックに隣接する隣接ブロックが前記サブブロックと同じコーディングブロックに含まれる他のサブブロックである場合、前記他のサブブロックの復元サンプルに基づいて、前記サブブロックの参照サンプルを取得できる。一例として、第1サブブロックが第2サブブロックの左側または上端に位置する場合、第1サブブロックの復元サンプルから第2サブブロックの参照サンプルを取得できる。そのため、サブブロック間では、並列イントラ予測を適用しなくてもよい。即ち、コーディングブロックに含まれるサブブロックに対して、符号化または復号化することを順次に実行できる。そのため、第1サブブロックの符号化または復号化するが完成した後、第2サブブロックに対するイントラ予測を実行できる。
【0291】
サブパーティションイントラ符号化方法を適用する場合、複数の参照サンプルライン候補のいずれかを選択するマルチラインイントラ予測符号化方法を使用しないように設定できる。マルチラインイントラ予測符号化方法を使用しない場合、各サブブロックに隣接する隣接参照サンプルラインを各サブブロックの参照サンプルラインに決定できる。
【0292】
または、サブパーティションイントラ符号化方法を適用する場合でも、マルチラインイントラ予測符号化方法を使用できる。そのため、各サブブロックに対して、参照サンプルラインを特定するためのインデックス情報をシグナリングできる。または、複数のサブブロックのうちのいずれかにのみ、参照サンプルラインを特定するためのインデックス情報をシグナリングし、残りのサブブロックにも、前記インデックス情報をそのまま適用できる。または、コーディングブロックに対して参照サンプルラインを特定するためのインデックス情報をシグナリングし、前記コーディングブロックに含まれる複数のサブブロックが前記インデックス情報を共有するように設定できる。
【0293】
または、サブブロックのうち、事前に定義された位置、または事前に定義されたパーティションインデックスを含むサブブロックのみ、マルチラインイントラ予測符号化方法を使用するように設定できる。一例として、複数のサブブロックのうち、パーティションインデックスが0であるサブブロックまたはコーディングブロックの上端境界または左側境界に接続するサブブロックにのみ、参照サンプルライン候補のいずれかを特定するインデックス情報をシグナリングすることができる。残余サブブロックに対して、マルチラインイントラ予測符号化方法を適用しなくてもよい。そのため、残余サブブロックは隣接参照サンプルラインを使用してイントラ予測を実行できる。
【0294】
サブブロックごとに予測符号化モードを異なるように設定できる。一例として、一部のサブブロックに対して、イントラ予測を適用でき、他のサブブロックに対して、インター予測、現在の画像参照または複合予測を適用できる。
【0295】
図21は、サブブロックごとに予測符号化モードを異なるように設定する例を示す図面である。
【0296】
サブブロックごとにイントラ予測モードを異なるように設定し、または予測符号化モードを異なるように設定できる。一例として、
図21に示された例において、サブブロック0およびサブブロック1に画面内予測を適用し、サブブロック1およびサブブロック2に現在の画像参照を適用する場合を図面に示す。
【0297】
現在の画像参照を使用する場合、現在の画像またはスライス(またはタイルグループ)の復号化された領域からサブブロックの予測ブロックを取得できる。現在の画像参照を適用する場合、サブブロックの予測ブロックを特定するために、動きベクトルを取得できる。現在の画像参照における動きベクトルを「ブロックベクトル」とも称し得る。
【0298】
動きベクトルは、コーディングブロックまたはサブブロックに隣接する隣接ブロックの動きベクトルに基づいて取得できる。または、ビットストリームを介して動きベクトルを決定するための情報がシグナリングされることもできる。
【0299】
この場合、サブブロックの動きベクトルの最大値は、サブブロックまたはサブブロックが属するコーディングブロックまたは変換ブロックのサイズに従って決定できる。一例として、サブブロックの動きベクトルは、サブブロックが属するコーディングブロックまたは変換ブロックの境界を超えないように設定できる。即ち、サブブロックの予測ブロックは、サブブロックが属するコーディングブロック内の前記サブブロックの前に符号化または復号化された領域から取得できる。
【0300】
動きベクトルの代わりに、コーディングブロック内の復号化されたサブブロックのいずれかを示すインデックス情報を符号化してシグナリングすることができる。サブブロックの予測ブロックは、インデックス情報に従って特定された事前に復号化されたサブブロックに決定できる。
【0301】
別の一例として、サブブロックの動きベクトルが、サブブロックが属するコーディングブロックまたは変換ブロックの境界を超えることを許可することもできる。
【0302】
イントラ予測を実行した結果で予測ブロックが生成された場合、予測ブロックに含まれる予測サンプルのそれぞれの位置に基づいて、予測サンプルを更新できる。このような更新方法を、サンプルポジションベースのイントラ加重予測方法(または、PDPC:Position Dependent Prediction Combination)と称することができる。
【0303】
PDPCを使用するかは、現在のブロックのサイズ、形状、イントラ予測モード、現在のブロックの参照サンプルライン、現在のブロックのサイズ、または色度成分に従って決定できる。一例として、現在のブロックのイントラ予測モードがplanner、DC、垂直方向、水平方向、インデックス値が垂直方向より小さいモードまたはインデックス値が水平方向より大きいモードのうちの少なくとも1つである場合、PDPCを使用できる。または、現在のブロックの幅または高さのうちの少なくとも1つが4より大きい場合にのみPDPCを使用できる。または、現在のブロックの参照画像線ラインのインデックスが0である場合にのみPDPCを使用できる。または、現在のブロックの参照画像ラインのインデックスがプリセットの値以上である場合にのみPDPCを使用できる。または、輝度成分にのみPDPCを使用できる。または、前記例示された条件のうちの2つ以上を満たすか否かに従って、PDPCを使用するか否かを決定できる。
【0304】
または、サブパーティションイントラ符号化方法を使用したか否かに従って、PDPCを使用するか否かを決定できる。一例として、コーディングブロックまたは変換ブロックにサブパーティションイントラ符号化方法を適用する場合、PDPCを使用しないように設定できる。または、コーディングブロックまたは変換ブロックに対してサブパーティションイントラ符号化方法を適用する場合、複数のサブブロックのうちの少なくとも1つにPDPCを適用することができる。この場合、PDPC適用対象であるサブブロックは、コーディングブロックまたはサブブロックのサイズ、形状、位置、イントラ予測モードまたは参照サンプルラインインデックスのうちの少なくとも1つに基づいて決定できる。一例として、コーディングブロックの上端および/または左側境界に隣接するサブブロックまたはコーディングブロックの下端および/または右側境界に隣接するサブブロックにPDPCを適用できる。または、サブブロックのサイズまたは形状に基づいて、コーディングブロックに含まれるすべてのサブブロックにPDPCを適用するように設定するか、またはコーディングブロックに含まれるすべてのサブブロックにPDPCを適用しないように設定できる。さらに一例として、コーディングブロック内のすべてのサブブロックにPDPCを適用することもできる。
【0305】
または、コーディングブロックまたは変換ブロックを分割して生成されたサブブロックのサイズ、形状、イントラ予測モードまたは参照画像インデックスのうちの少なくとも1つが、事前に設定された条件を満たすか否かに従って、サブブロックごとにPDPCを適用するか否かを決定できる。一例として、サブブロックの幅または高さのうちの少なくとも1つが4より大きい場合、サブブロックにPDPCを適用できる。
【0306】
別の一例として、ビットストリームを介してPDPCを適用するか否かを示す情報がシグナリングされることができる。
【0307】
または、現在のブロックのサイズ、形状、イントラ予測モードまたは予測サンプルの位置のうちの少なくとも1つに基づいてPDPCが適用される領域を決定できる。一例として、現在のブロックのイントラ予測モードが垂直方向より大きいインデックスを有する場合、x軸座標またはy軸座標のうちの少なくとも1つが閾値より大きい予測サンプルを補正せず、x軸座標とy軸座標が閾値以下である予測サンプルにのみ補正操作を実行することができる。一例として、現在のブロックのイントラ予測モードが水平方向より小さいインデックスを有する場合、x軸座標またはy軸座標のうちの少なくとも1つが閾値より大きい予測サンプルを補正せず、x軸座標またはy軸座標が閾値以下である予測サンプルにのみ補正操作を実行することができる。この場合、閾値は現在のブロックのサイズ、形状またはイントラ予測モードのうちの少なくとも1つに基づいて決定できる。
【0308】
イントラ予測サンプルを介して予測サンプルを取得すると、取得された予測サンプルの位置に基づいて、前記予測サンプルを補正するために使用される参照サンプルを決定できる。説明の便宜上、後述の実施例では、予測サンプルを補正するために使用される参照サンプルをPDPC参照サンプルと称する。さらに、イントラ予測を介して取得された予測サンプルを第1予測サンプルと称し、第1予測サンプルを補正して取得された予測サンプルを第2予測サンプルと称する。
【0309】
【0310】
少なくとも1つのPDPC参照サンプルを使用して第1予測サンプルを補正できる。PDPC参照サンプルは、現在のブロックの左上隅に隣接する参照サンプル、現在のブロックの上端に位置する上端参照サンプルまたは現在のブロックの左側に位置する左側参照サンプルのうちの少なくとも1つを含み得る。
【0311】
現在のブロック参照サンプルラインに属する参照サンプルのうちの少なくとも1つをPDPC参照サンプルに設定できる。または、現在のブロックの参照サンプルラインと関係なく、インデックスが0である参照サンプルラインに属する参照サンプルのうちの少なくとも1つをPDPC参照サンプルに設定できる。一例として第1予測サンプルがインデックスが1であるかまたはインデックスが2である参照サンプルラインに含まれる参照サンプルを使用して取得されることであっても、第2予測サンプルはインデックスが0である参照サンプルラインに含まれる参照サンプルを使用して取得できる。
【0312】
第1予測サンプルを補正するために使用されるPDPC参照サンプルの数または位置は、現在のブロックのイントラ予測モード、現在のブロックのサイズ、現在のブロックの形状または第1予測サンプルの位置のうちの少なくとも1つに従って決定できる。
【0313】
一例として、現在のブロックのイントラ予測モードがplannerまたはDCモードである場合、上端参照サンプルおよび左側参照サンプルを使用して第2予測サンプルを取得できる。この場合、上端参照サンプルは第1予測サンプルと垂直する参照サンプル(例えば、x座標が同じである参照サンプル)であり得、左側参照サンプルは第1予測サンプルと水平する参照サンプル(例えば、y座標が同じである参照サンプル)であり得る。
【0314】
現在のブロックのイントラ予測モードが水平方向イントラ予測モードである場合、上端参照サンプルを使用して第2予測サンプルを取得できる。この場合、上端参照サンプルは、第1予測サンプルと垂直する参照サンプルであり得る。
【0315】
現在のブロックのイントラ予測モードが垂直方向イントラ予測モードである場合、左側参照サンプルを使用して第2予測サンプルを取得できる。この場合、左側参照サンプルは第1予測サンプルと水平する参照サンプルであり得る。
【0316】
現在のブロックのイントラ予測モードが左下の対角線方向または右上の対角線方向イントラ予測モードである場合、左上参照サンプル、上端参照サンプルおよび左側参照サンプルに基づいて第2予測サンプルを取得できる。左上参照サンプルは現在のブロックの左上隅に隣接する参照サンプル(例えば、(-1,-1)位置である参照サンプル)であり得る。上端参照サンプルは第1予測サンプルの右上の対角線方向に位置する参照サンプルであり得、左側参照サンプルは第1予測サンプルの左下の対角線方向に位置する参照サンプルであり得る。
【0317】
要するに、第1予測サンプルの位置が(x,y)である場合、R(-1,-1)は左上参照サンプルに設定でき、R(x+y+1,-1)またはR(x,-1)は上端参照サンプルに設定できる。さらに、R(-1,x+y+1)またはR(-1,y)は左側参照サンプルに設定できる。
【0318】
別の一例として、現在のブロックの形状または広角イントラモードを適用したか否かの2個のうちの少なくとも1つに従って、左側参照サンプルまたは上端参照サンプルの位置を決定できる。
【0319】
具体的には、現在のブロックのイントラ予測モードが広角イントラ予測モードである場合、第1予測サンプルの対角線方向に位置する参照サンプルからオフセット距離だけ離れた参照サンプルはPDPC参照サンプルに設定できる。一例として、上端参照サンプルR(x+y+k+1,-1)および左側参照サンプルR(-1,x+y-k+1)はPDPC参照サンプルに設定できる。
【0320】
この場合、オフセットkは広角イントラ予測モードに基づいて決定できる。式8および式9は、広角イントラ予測モードに基づいてオフセットを取得する例を示す。
【数6】
【0321】
第2予測サンプルは第1予測サンプルとPDPC参照サンプルとの加重和演算に基づいて決定されることができる。一例として、第2予測サンプルは以下の10に基づいて取得されることができる。
【数7】
【0322】
上記の式10では、RTは左側参照サンプルを示し、RTLは上端参照サンプルを示し、RTLは左上参照サンプルを示す。pred(x,y)は(x,y)位置の予測サンプルを示す。wLは左側参照サンプルの加重値を示し、wTは上端参照サンプルの加重値を示し、wTLは左上参照サンプルの加重値を示す。第1予測サンプルの加重値は最大値から参照サンプルの加重値を減算して取得できる。説明の便宜上、PDPC参照サンプルに割り当てられた加重値をPDPC加重値と称する。
【0323】
各参照サンプルに割り当てられた加重値は、現在のブロックのイントラ予測モードまたは第1予測サンプルの位置のうちの少なくとも1つに基づいて決定されることができる。
【0324】
一例として、wL、wTまたはwTLのうちの少なくとも1つは、予測サンプルのx軸座標値またはy軸座標値のうちの少なくとも1つと比例または反比例関係にあり得る。または、wL、wTまたはwTLのうちの少なくとも1つは、現在のブロックの幅または高さのうちの少なくとも1つと比例または反比例関係にあり得る。
【0325】
現在のブロックのイントラ予測モードがDCであると、PDPC加重値は以下の式11に示されたように決定されることができる。
【数8】
【0326】
上記の式11では、xおよびyは第1予測サンプルの位置を示す。
【0327】
上記の式11では、変位演算で使用されるパラメータshiftは、現在のブロックの幅または高さに基づいて取得することができる。一例として、パラメータshiftは以下の式12または式13に基づいて取得できる。
【数9】
【0328】
または、現在のブロックのイントラ方向パラメータに従ってパラメータshiftを取得することもできる。
【0329】
パラメータshiftを取得するために使用されるパラメータの数または種類は、現在のブロックのイントラ予測モードにより異なることができる。一例として、現在のブロックのイントラ予測モードがplanner、DC、垂直方向または水平方向である場合、式12または式13に示されたように、現在のブロックの幅および高さを使用してパラメータshiftを取得することができる。現在のブロックのイントラ予測モードが垂直方向イントラ予測モードより大きいインデックスを有するイントラ予測モードである場合、現在のブロックの高さおよびイントラ方向パラメータを使用してパラメータshiftを取得することができる。現在のブロックのイントラ予測モードが水平方向イントラ予測モードより小さいインデックスを有するイントラ予測モードである場合、現在のブロックの幅およびイントラ方向パラメータを使用してパラメータshiftを取得することができる。
【0330】
現在のブロックのイントラ予測モードがplannerである場合、wTLの値を0に設定できる。wLおよびwTは以下の式14に基づいて取得できる。
【数10】
【0331】
現在のブロックのイントラ予測モードが水平方向イントラ予測モードである場合、wTを0に設定し、同じ方法でwTLおよびwLを設定することができる。逆に、現在のブロックのイントラ予測モードが垂直方向イントラ予測モードである場合、wLを0に設定し、同じ方法でwTLおよびwTを設定することができる。
【0332】
現在のブロックのイントラ予測モードが垂直方向イントラ予測モードより大きいインデックスを有し、且つ、右上方向に向くイントラ予測モードである場合、以下の式15に示されたようにPDPC加重値を取得できる。
【数11】
【0333】
現在のブロックのイントラ予測モードが水平方向イントラ予測モードより小さいインデックスを有し、且つ、左下方向に向くイントラ予測モードである場合、以下の式16に示されたようにPDPC加重値を取得できる。
【数12】
【0334】
上述した実施例に示されたように、予測サンプルの位置xおよびyに基づいてPDPC加重値を決定することができる。
【0335】
別の一例として、サブブロックユニットに従って、PDPC参照サンプルにそれぞれ割り当てられた加重値を決定することもできる。サブブロックに含まれる予測サンプルは同じPDPC加重値を共有できる。
【0336】
加重値の基本ユニットを決定するために使用されるサブブロックサイズは、符号化器および復号化器で事前に定義できる。一例として、それぞれ2×2サイズまたは4×4サイズのサブブロックに対して加重値を決定することができる。
【0337】
または、現在のブロックのサイズまたは形状に従って、サブブロックのサイズ、形状または数を決定することができる。一例として、コーディングブロックのサイズと関係なく、コーディングブロックを4個のサブブロックに分割することができる。または、コーディングブロックのサイズに従って、コーディングブロックを4個のまたは16のサブブロックに分割することができる。
【0338】
または、現在のブロックのイントラ予測モードに基づいて、サブブロックのサイズ、形状または数を決定することもできる。一例として、現在のブロックのイントラ予測モードが水平方向である場合、N個の列(またはN個の行)を1つのサブブロックに設定でき、逆に、現在のブロックのイントラ予測モードが垂直方向である場合、N個の行(またはN個の列)を1つのサブブロックに設定することができる。
【0339】
式17ないし19は、2×2サイズのサブブロックのPDPC加重値を決定する例を示す。式17は、現在のブロックのイントラ予測モードがDCモードである場合の例を与える。
【数13】
【0340】
上記の式17では、Kの値はサブブロックのサイズに基づいて決定されることができる。
【0341】
式18は、現在のブロックのイントラ予測モードが垂直方向イントラ予測モードより大きいインデックスを有し、且つ、右上方向に向くイントラ予測モードである場合の例を与える。
【数14】
【0342】
式19は、現在のブロックのイントラ予測モードが水平方向イントラ予測モードより小さいインデックスを有し、且つ、左下方向に向くイントラ予測モードである場合の例を与える。
【数15】
【0343】
式17ないし19では、xおよびyはサブブロック内の基準サンプルの位置を示す。基準サンプルは、サブブロックの左上に位置するサンプル、サブブロックの中央に位置するサンプルまたはサブブロックの右下に位置するサンプルのうちのいずれかであり得る。
【0344】
式20ないし22は、4×4サイズのサブブロックのPDPC加重値を決定する例を示す。式20は、現在のブロックのイントラ予測モードがDCモードである場合の例を与える。
【数16】
【0345】
式21は、現在のブロックのイントラ予測モードが垂直方向イントラ予測モードより大きいインデックスを有し、且つ、右上方向に向くイントラ予測モードである場合を例示する。
【数17】
【0346】
式22は、現在のブロックのイントラ予測モードが水平方向イントラ予測モードより小さいインデックスを有し、且つ、左下方向に向くイントラ予測モードである場合を例示する。
【数18】
【0347】
上述した実施例において、第1予測サンプルまたはサブブロックに含まれる予測サンプルの位置に従ってPDPC加重値を決定する場合を説明している。現在のブロックの形状に従って、PDPC加重値を決定することもできる。
【0348】
一例として、DCモードである場合、現在のブロックが幅が高さより大きい非正方形または高さが幅より大きい非正方形であるか否かにより、PDPC加重値の取得方法も異なる。
【0349】
式23は、現在のブロックが幅が高さより大きい非正方形である場合にPDPC加重値を取得する例であり、式24は現在のブロックが高さが幅より大きい非正方形である場合にPDPC加重値を取得する例である。
【数19】
【数20】
【0350】
現在のブロックが非正方形である場合、広角イントラ予測モードを使用して現在のブロックを予測することができる。広角イントラ予測モードを適用する場合、PDPCを適用して第1予測サンプルを更新することもできる。
【0351】
現在のブロックに広角イントラ予測を適用する場合、コーディングブロックの形状に従ってPDPC加重値を決定することができる。
【0352】
一例として、現在のブロックが幅が高さより大きい非正方形である場合、第1予測サンプルの位置に従って、第1予測サンプル左下に位置する左側参照サンプルと比べて、第1予測サンプル右上に位置する上端参照サンプルが第1予測サンプルとより近接する場合が発生する可能性がある。そのため、第1予測サンプル補正態様において、上端参照サンプルに適用される加重値を左側参照サンプルに適用される加重値より大きく設定することができる。
【0353】
逆に、現在のブロックが高さが幅より大きい非正方形である場合、第1予測サンプルの位置に従って、第1予測サンプル右上に位置する上端参照サンプルと比べて、第1予測サンプル左下に位置する左側参照サンプルが第1予測サンプルとより近接する場合が発生する可能性がある。そのため、第1予測サンプル補正態様において、左側参照サンプルに適用される加重値を上端参照サンプルに適用される加重値より大きく設定することができる。
【0354】
式25は、現在のブロックのイントラ予測モードがインデックスが66より大きい広角イントラ予測モードである場合にPDPC加重値を取得する例を示す。
【数21】
【0355】
式26は、現在のブロックのイントラ予測モードがインデックスが0より小さい広角イントラ予測モードである場合にPDPC加重値を取得する例を示す。
【数22】
【0356】
現在のブロックの比率に基づいてPDPC加重値を決定することもできる。現在のブロックの比率は、現在のブロックの幅と高さとの比率を示し、以下の式27に示されたように定義されることができる。
【数23】
【0357】
現在のブロックのイントラ予測モードに従って、PDPC加重値を取得する方法を可変的に決定できる。
【0358】
一例として、式28および式29は、現在のブロックのイントラ予測モードがDCである場合にPDPC加重値を取得する例を示す。具体的には、式28は、現在のブロックが幅が高さより大きい非正方形である場合の例であり、式29は、現在のブロックが高さが幅より大きい非正方形である場合の例である。
【数24】
【0359】
式30は、現在のブロックのイントラ予測モードがインデックスが66より大きい広角イントラ予測モードである場合にPDPC加重値を取得する例を示す。
【数25】
【0360】
式31は、現在のブロックのイントラ予測モードがインデックスが0より小さい広角イントラ予測モードである場合にPDPC加重値を取得する例を示す。
【数26】
【0361】
元の画像が予測画像を差分することにより残差画像を取得することができる。この場合、残差ビデオを周波数領域に変換するとき、周波数成分の高周波成分を除去しても、ビデオの主観的な品質が大幅に低下することはない。そのため、高周波成分の値を小さくさせるかまたは高周波成分の値を0に設定すると、視覚的な歪みを大幅に発生しない同時に圧縮効率を向上させることができる効果を有する。残差画像を二次元周波数成分に分解し、且つ上述した特性を反映するために、現在のブロックを変換することができる。前記変換は、DCT(Discrete Cosine Transform)またはDST(Discrete Sine Tranform)などの変換方法を使用して実行できる。
【0362】
DCTはコサイン変換を使用して、残差ビデオを二次元周波数成分に分解(または変換)することであり、DSTはコサイン変換を使用して、残差ビデオを二次元周波数成分に分解(または変換)することである。残差ビデオの変換結果、周波数成分は画像特徴として表すことができる。一例として、N×Nサイズのブロックに対してDCT変換を実行するとき、N2個の画像特徴に対応する重みを取得できる。変換により、N×Nサイズのブロックに含まれる各画像特徴に対応する重みを取得できる。使用された変換方法に従って、画像特徴に対応する重みをDCT係数またはDST係数と称し得る。
【0363】
変換方法DCTは、主に、0でではない低周波成分が大量に分布されたビデオに使用される。変換方法DSTは、主に、高周波成分が大量に分布されたビデオに使用される。
【0364】
DCTまたはDST以外の変換方法を使用して残差ビデオを変換することもできる。
【0365】
以下は、残差ビデオを二次元周波数成分に変換する場合を二次元画像変換と称する。さらに、変換結果の取得された画像特徴に対応する重みを変換係数と称する。一例として、変換係数はDCT係数またはDST係数を示すことができる。後述する主変換および第2の変換が両方とも適用される場合、変換係数は第2の変換結果として生成された画像特徴に対応する重みを示すことができる。
【0366】
変換方法はブロックをユニットとして決定されることができる。変換方法は現在のブロックの予測符号化モード、現在のブロックのサイズまたは現在のブロックのサイズのうちの少なくとも1つに基づいて決定されることができる。一例として、現在のブロックがイントラ予測モードで符号化され、現在のブロックのサイズがN×Nより小さい場合、変換方法DSTを使用して変換できる。逆に、前記条件を満たさない場合、変換方法DCTを使用して変換できる。
【0367】
残差ビデオのうちの一部のブロックに対して、二次元ビデオ変換を実行しなくてもよい。二次元ビデオ変換を実行しない場合を変換スキップ(Transform Skip)と称し得る。変換スキップを適用する場合、変換を実行しない残差を対象として量子化を適用することができる。
【0368】
DCTまたはDSTを使用して現在のブロックを変換した後、変換された現在のブロックをさらに変換できる。この場合、DCTまたはDSTに基づく変換を主変換に定義し、主変換を適用したブロックに対してさらに変換する場合を第2の変換と定義することができる。
【0369】
主変換は複数の変換コア候補のいずれかを使用して実行できる。一例として、DCT2、DCT8またはDCT7のうちのいずれかを使用して主変換できる。
【0370】
水平方向および垂直方向に対して異なる変換コアを使用することもできる。水平方向変換コアおよび垂直方向変換コアの組み合わせを示す情報は、ビットストリームを介してシグナリングすることができる。
【0371】
主変換および第2の変換の実行ユニットは異なってもよい。一例として、8×8ブロックに対して主変換を実行し、変換された8×8ブロックの4×4サイズのサブブロックに対して第2の変換を実行することができる。この場合、第2の変換を実行しない他の領域の変換係数が0に設定されることができる。
【0372】
または、4×4ブロックに対して主変換を実行し、変換された4×4ブロックを含む8×8サイズ領域に対して第2の変換を実行することもできる。
【0373】
第2の変換を実行するか否かを示す情報は、ビットストリームを介してシグナリングすることができる。
【0374】
または、水平方向変換コアが垂直方向変換コアが同じであるか否か人従って、第2の変換を実行するか否かを決定することができる。一例として、水平方向変換コアが垂直方向変換コアと同じである場合にのみ第2の変換を実行できる。または、水平方向変換コアが垂直方向変換コアと異なる場合にのみ第2の変換を実行できる。
【0375】
または、水平方向の変換および垂直方向の変換に事前に定義された変換コアを使用した場合にのみ第2の変換を許可することができる。一例として、水平方向の変換および垂直方向の変換にDCT2変換コアが使用された場合、第2の変換を許可できる。
【0376】
または、現在のブロックの0以外の変換係数の数に従って第2の変換を実行するか否かを決定できる。一例として、現在のブロックの0以外の変換係数が閾値より小さいまたは等しい場合、第2の変換を使用しないように設定でき、現在のブロックの0以外の変換係数が閾値より大きい場合、第2の変換を使用するように設定できる。現在のブロックがイントラ予測で符号化される場合にのみ、第2の変換を使用するように設定することもできる。
【0377】
現在のブロックの形状に従って、第2の変換を実行しようとするサブブロックのサイズまたは形状を決定することができる。
【0378】
図23及び
図24は、第2の変換を実行するサブブロックの概略図を示す。
【0379】
現在のブロックが正方形であると、主変換を実行した後、現在のブロックの左上のN×Nサイズのサブブロックを対象として第2の変換を実行することができる。一例として、現在のブロックが8×8サイズのコーディングブロックである場合、現在のブロックに対して主変換した後、現在のブロックの左上4×4サイズのサブブロックを対象として第2の変換を実行することができる(
図23を参照)。
【0380】
現在のブロックが幅が高さより4倍以上大きい非正方形である場合、主変換を実行した後、現在のブロック左上の(kN)×(4kN)サイズのサブブロックを対象として第2の変換を実行することができる。一例として、現在のブロックが16×4サイズの非正方形である場合、現在のブロックを主変換した後、現在のブロックの左上2×8サイズのサブブロックを対象として第2の変換を実行することができる(
図24の(a)を参照)。
【0381】
現在のブロックが高さが幅より4倍以上大きい非正方形である場合、主変換を実行した後、現在のブロック左上の(4kN)×(kN)サイズのサブブロックを対象として第2の変換を実行することができる。一例として、現在のブロックが16×4サイズの非正方形である場合、現在のブロックを主変換した後、現在のブロックの左上2×8サイズのサブブロックを対象として第2の変換を実行することができる(
図24の(b)を参照)。
【0382】
復号化器で第2の変換の逆変換(第2逆変換)を実行し、その実行結果に従って、主変換の逆変換(第1逆変換)を実行することができる。前記第2逆変換および第1逆変換の実行結果に従って、現在のブロックに対する残差信号を取得する。
【0383】
現在のブロックの変換タイプを示す情報はビットストリームを介してシグナリングすることができる。前記情報は、水平方向の変換タイプと垂直方向の変換タイプとの組み合わせのうちの1つのインデックス情報tu_mts_idxであり得る。
【0384】
インデックス情報tu_mts_idxによって特定された変換タイプ候補に従って、垂直方向の変換コアおよび水平方向の変換コアを決定することができる。表7および表8は、tu_mts_idxによる変換タイプ組み合わせを示す。
【0385】
【0386】
【0387】
変換タイプはDCT2、DST7、DCT8または変換スキップのうちのいずれかに決定できる。または、変換スキップ以外に、変換コアのみを使用して変換タイプ組み合わせ候補を構成することもできる。
【0388】
表7を使用する場合、tu_mts_idxが0であると、水平方向および垂直方向に変換スキップを適用することができる。tu_mts_idxが1であると、水平方向および垂直方向にDCT2を適用することができる。tu_mts_idxが3であると、水平方向にDCT8を適用し、垂直方向にDCT7を適用することができる。
【0389】
表8を使用する場合、tu_mts_idxが0であると、水平方向および垂直方向にDCT2を適用することができる。tu_mts_idxが1であると、水平方向および垂直方向に変換スキップを適用することができる。tu_mts_idxが3であると、水平方向にDCT8を適用し、垂直方向にDCT7を適用することができる。
【0390】
現在のブロックのサイズ、形状または非0係数の数のうちの少なくとも1つに従って、インデックス情報が符号化するか否かを決定することができる。一例として、非0係数の数が閾値より等しいまたは少ない場合、インデックス情報をシグナリングせず、現在のブロックに対してデフォルト変換タイプを適用することができる。ここで、デフォルト変換タイプはDST7であり得る。または、デフォルトモードは現在のブロックのサイズ、形状またはイントラ予測モードにより異なってもよい。
【0391】
閾値は現在のブロックのサイズまたは形状に基づいて決定されることができる。一例として、現在のブロックのサイズが32×32より小さいまたは等しい場合、閾値を2に設定でき、現在のブロックが32×32より大きい場合(例えば、現在のブロックが32×64または64×32サイズのコーディングブロックである場合)、閾値を4に設定できる。
【0392】
複数のルックアップテーブルは符号化器または復号化器に事前に記憶されることができる。複数のルックアップテーブルの変換タイプ組み合わせ候補に割り当てられたインデックス値、変換タイプ組み合わせ候補の種類または変換タイプ組み合わせ候補の数のうちの少なくとも1つは異なってもよい。
【0393】
現在のブロックのサイズ、形状、予測符号化モード、イントラ予測モード、第2の変換を適用するか否かまたは隣接ブロックに対して変換スキップを適用するか否かのうちの少なくとも1つに基づいて、現在のブロックのルックアップテーブルを選択できる。
【0394】
一例として、現在のブロックのサイズが4×4以下である場合または現在のブロックがインター予測で符号化される場合、表7のルックアップテーブルを使用でき、現在のブロックのサイズが4×4より大きい場合または現在のブロックがイントラ予測で符号化される場合、表8のルックアップテーブルを使用できる。
【0395】
または、複数のルックアップテーブルのいずれかを指示する情報は、ビットストリームを介してシグナリングすることができる。復号化器は前記情報に基づいて、現在のブロックに対するルックアップテーブルを選択することができる。
【0396】
別の一例として、現在のブロックのサイズ、形状、予測符号化モード、イントラ予測モード、第2の変換を適用するか否かまたは隣接ブロックに対して変換スキップを適用するか否かのうちの少なくとも1つに基づいて、変換タイプ組み合わせ候補に割り当てられたインデックスを適応的に決定できる。一例として、現在のブロックのサイズが4×4である場合に変換スキップに割り当てられたインデックスは、現在のブロックサイズが4×4より大きい場合に変換スキップに割り当てられたインデックスより小さい値を有し得る。具体的には、現在のブロックのサイズが4×4である場合、変換スキップにインデックス0を割り当てることができ、現在のブロックが4×4より大きく且つ16×16以下である場合、変換スキップに0より大きいインデックス(例えば、インデックス1)を割り当てることができる。現在のブロックが16x16より大きい場合、変換スキップされたインデックスに最大値(例えば、5)を割り当てることができる。
【0397】
または、現在のブロックがインター予測で符号化される場合、変換スキップにインデックス0を割り当てることができる。現在のブロックがイントラ予測で符号化される場合、変換スキップに0より大きいインデックス(例えば、インデックス1)を割り当てることができる。
【0398】
または、現在のブロックがインター予測で符号化される4×4サイズのブロックである場合、変換スキップにインデックス0を割り当てることができる。逆に、現在のブロックがインター予測で符号化されないかまたは現在のブロックが4×4より大きい場合、変換スキップに値が0より大きいインデックス(例えば、インデックス1)を割り当てることができる。
【0399】
表7および表8で例示された変換タイプ組み合わせ候補と異なる変換タイプ組み合わせ候補を定義し使用できる。一例として、水平方向変換または垂直方向変換のいずれかに変換スキップを適用でき、別の1つに対して、DCT7、DCT8またはDST2などの変換コアを適用した変換タイプ組み合わせ候補を使用できる。この場合、現在のブロックのサイズ(例えば、幅および/または高さ)、形状、予測符号化モードまたはイントラ予測モードのうちの少なくとも1つに基づいて、変換スキップを水平方向または垂直方向として使用される変換タイプ候補として使用するか否かを決定することができる。
【0400】
または、ビットストリームを介して特定の変換タイプ候補が使用できるか否かを示す情報をシグナリングすることができる。一例として、水平方向および垂直方向に対して変換スキップを変換タイプ候補として使用できるか否かを示す識別子をシグナリングできる。前記識別子に従って、複数の変換タイプ組み合わせ候補のうちの特定の変換タイプ組み合わせ候補を含むか否かを決定することができる。
【0401】
または、ビットストリームを介して特定の変換タイプ候補が現在のブロックに適用されるか否かの情報をシグナリングすることができる。一例として、水平方向および垂直方向にDCT2を適用するか否かを示す識別子cu_mts_flagをシグナリングできる。cu_mts_flagの値が1である場合、DCT2を垂直方向および水平方向に対する変換コアに設定することができる。当cu_mts_flagの値が1である場合、DCT8またはDST7を垂直方向および水平方向に対する変換コアに設定することができる。または、cu_mts_flagの値が1である場合、複数の変換タイプ組み合わせ候補のいずれかを特定する情報tu_mts_idxをシグナリングできる。
【0402】
現在のブロックが幅が高さより大きい非正方形または高さが幅より大きい非正方形である場合、cu_mts_flagの符号化をスキップでき、cu_mts_flagの値は0であるとみなす。
【0403】
現在のブロックのサイズ、形状またはイントラ予測モーに従ってド、使用できる変換タイプ組み合わせ候補の数を異なるように設定することができる。一例として、現在のブロックが正方形である場合、3つ以上の変換タイプ組み合わせ候補を使用でき、現在のブロックが非正方形である場合、2個の変換タイプ組み合わせ候補を使用できる。または、現在のブロックが正方形である場合、変換タイプ組み合わせ候補のうちの水平方向のみに対する変換タイプおよび垂直方向に対する変換タイプと異なる変換タイプ組み合わせ候補のみを使用できる。
【0404】
現在のブロックが使用できる変換タイプ組み合わせ候補が3つ以上である場合、変換タイプ組み合わせ候補の1つを指示するインデックス情報tu_mts_idxをシグナリングできる。現在のブロックが使用できる変換タイプ組み合わせ候補が2個である場合、変換タイプ組み合わせ候補の1つを指示する識別子mts_flagをシグナリングできる。表9は、現在のブロックの形状に従って変換タイプ組み合わせ候補に必要な情報を特定するコーディング形状を示す。
【0405】
【0406】
現在のブロックの形状に従って、変換タイプ組み合わせ候補のインデックスを再ソート(またはReordering)することができる。一例として、現在のブロックが正方形である場合、変換タイプ組み合わせ候補に割り当てられたインデックスは、現在のブロックが非正方形である場合に変換タイプ組み合わせ候補割り当てられたインデックスと異なってもよい。一例として、現在のブロックが正方形である場合、以下の表10に基づいて、変換タイプ組み合わせを選択でき、現在のブロックが非正方形である場合、以下の表11に基づいて、変換タイプ組み合わせを選択できる。
【0407】
【0408】
【0409】
現在のブロックの水平方向非0係数の数または垂直方向非0係数の数に基づいて変換タイプを決定することができる。ここで、水平方向非0係数の数は1xN(ここで、Nは現在のブロックの幅である)に含まれる非0係数の数を示し、垂直方向非0係数の数はNx1(ここで、Nは現在のブロックの高さである)に含まれる非0係数の数を示す。水平方向非0係数の最大値が閾値より小さいまたは等しい場合、水平方向に主変換タイプを適用でき、水平方向非0係数の最大値が閾値より大きい場合、水平方向に第2の変換タイプを適用できる。垂直方向非0係数の最大値が閾値より小さいまたは等しい場合、垂直方向に主変換タイプを適用でき、垂直方向非0係数の最大値が閾値より大きい場合、垂直方向に第2の変換タイプを適用できる。
【0410】
図25は、現在のブロックの変換タイプを決定することを説明する例の図である。
【0411】
一例として、現在のブロックがイントラ予測で符号化され、現在のブロックの水平方向非0係数の最大値が2以下である場合(
図25の(a)を参照)、水平方向の変換タイプをDST7に決定できる。
【0412】
現在のブロックがイントラ予測で符号化され、現在のブロックの垂直方向非0係数の最大値が2より大きい場合(
図25の(b)を参照)、DCT2またはDCT8を垂直方向の変換タイプに決定できる。
【0413】
ビットストリームからシグナリングする情報に基づいて現在のブロック変換タイプを明示的に決定するか否かを示す情報は、ビットストリームを介してシグナリングすることができる。一例として、シーケンスレベルでは、イントラ予測で符号化されるブロックに対して変換タイプを明示的に決定することを許可するか否かを示す情報sps_explicit_intra_mts_flagおよび/またはインター予測で符号化されるブロックに対して許可変換タイプ決定を明示的に決定することを許可するか否かを示す情報sps_explicit_inter_mts_flagをシグナリングできる。
【0414】
変換タイプを決定することを許可する場合、ビットストリームからシグナリングされたインデックス情報tu_mts_idxに基づいて、現在のブロックの変換タイプを決定することができる。逆に、変換タイプを決定することを許可しない場合、現在のブロックのサイズ、形状、サブブロックユニットが変換を許可するか非かまたは0ではない変換係数を含むサブブロックの位置のうちの少なくとも1つに基づいて変換タイプを決定することができる。一例として、現在のブロックの水平方向変換タイプは、現在のブロックの幅に基づいて決定でき、現在のブロックの垂直方向変換タイプは現在のブロックの高さに基づいて決定できる。例えば、現在のブロックの幅が4より小さいかまたは16より大きい場合、水平方向の変換タイプはDCT2に決定できる。そうでない場合、水平方向の変換タイプはDST7に決定できる。例えば、現在のブロックの高さが4より小さいかまたは16より大きい場合、垂直方向の変換タイプはDCT2に決定できる。そうでない場合、垂直方向の変換タイプはDST7に決定できる。ここで、水平方向の変換タイプおよび垂直方向の変換タイプを決定するために、幅および高さと比較する閾値は、現在のブロックのサイズ、形状またはイントラ予測モードのうちの少なくとも1つに基づいて決定できる。
【0415】
または、現在のブロックが高さが幅と同じである正方形である場合、水平方向変換タイプおよび垂直方向変換タイプを同じく設定でき、一方、現在のブロックが高さが幅と異なる非正方形である場合、水平方向変換タイプおよび垂直方向変換タイプを異なるように設定できる。一例として、現在のブロックの幅が高さより大きい場合、水平方向の変換タイプをDST7に決定し、垂直方向の変換タイプをDCT2に決定することができる。一例として、現在のブロックの高さが幅より大きい場合、垂直方向の変換タイプをDST7に決定し、水平方向の変換タイプをDCT2に決定することができる。
【0416】
変換タイプ候補の数および/または種類または変換タイプ組み合わせ候補の数および/または種類は、変換タイプを明示的に決定することを許可するか否かにより異なる。一例として、変換タイプを明示的に決定することを許可する場合、DCT2、DST7およびDCT8は変換タイプ候補として使用できる。そのため、水平方向変換タイプおよび垂直方向変換タイプは、それぞれDCT2、DST8またはDCT8に設定できる。変換タイプを明示的に決定することを許可しない場合、DCT2およびDST7のみ変換タイプ候補として使用できる。そのため、水平方向変換タイプおよび垂直方向変換タイプは、それぞれDCT2またはDST7に決定できる。
【0417】
コーディングブロックまたは変換ブロックを複数のサブブロックに分割し、複数のサブブロックに対してそれぞれ変換することができる。一例として、コーディングブロックに上記のサブパーティションイントラ予測符号化方法を適用する場合、コーディングブロックを複数のサブブロックに分割し、複数のサブブロックに対してそれぞれ変換できる。
【0418】
サブブロックそれぞれの変換タイプは互いに異なることができる。一例として、複数のサブブロックの第1サブブロックに対する変換タイプが決定された場合、残りのサブブロックに対して、前記第1サブブロックの変換タイプを残りのサブブロックに適用することもできる。または、コーディングブロックのために使用される変換タイプを決定でき、コーディングブロックの変換タイプをサブブロックの変換タイプに決定できる。
【0419】
別の一例として、複数のサブブロックの変換タイプを別々に決定できる。各サブブロックの変換タイプは、各サブブロックに対してシグナリングする情報に基づいて決定できる。一例として、各サブブロックに対してインデックス情報tu_mts_idxをシグナリングできる。インデックス情報tu_mts_idxは、複数の水平方向の変換タイプと垂直方向の変換タイプとの組み合わせのいずれかを特定できる。tu_mts_idxの値に従って、水平方向の変換タイプおよび垂直方向の変換タイプはDCT2、DST7またはDCT8に決定できる。インデックス情報tu_mts_idxに基づいて、水平方向の変換タイプおよび垂直方向の変換タイプが同じであるか否かを決定できる。
【0420】
現在のサブブロックの変換タイプが前のサブブロックと同じ変換タイプを使用するか否かを示す情報をシグナリングできる。前記情報が前のサブブロックと同じ変換タイプを使用すると示す場合、現在のサブブロックのインデックス情報tu_mts_idxに対する符号化をスキップし、前のサブブロックの変換タイプを現在のサブブロックに適用することができる。逆に、前記情報が前のサブブロックと異なる変換タイプを使用すると示す場合、現在のサブブロックのインデックス情報tu_mts_idxを符号化することができる。この場合、現在のサブブロックのインデックス情報は、前のサブブロックのインデックス情報が指示する変換タイプ組み合わせ以外の他の変換タイプ組み合わせのうちのいずれかを指示できる。
【0421】
または、コーディングブロックが複数のサブブロックに分割された場合、変換タイプを明示的に決定することを許可しないように設定できる。明示的な変換タイプを許可する場合、インデックス情報tu_mts_idxに基づいて変換タイプを決定できる。逆に、変換タイプを明示的に決定することを許可しない場合、含まれるサブブロックサイズ、形状または非0係数を含むサブブロック位置のうちの少なくとも1つに従って変換タイプを決定できる。
【0422】
図26は、サブブロックの変換タイプを決定する例の概略図である。
【0423】
図26は、サブブロックの高さと幅との比率が1:2または2:1である例を示す。
【0424】
水平方向変換タイプおよび垂直方向変換タイプは各サブブロックの幅および高さに基づいて決定できる。一例として、
図26の(a)および(b)に示されたように、サブブロックの幅が閾値より小さい場合、主変換タイプ(例えば、DCT2)を水平方向変換タイプとして使用できる。逆に、サブブロックの幅が閾値以上である場合、第2の変換タイプ(例えば、DST7)を水平方向変換タイプとして使用できる。
【0425】
さらに、サブブロックの高さが閾値より小さい場合、主変換タイプ(例えば、DCT2)を垂直方向変換タイプとして使用できる。逆に、サブブロックの幅が閾値以上である場合、第2の変換タイプ(例えば、DST7)を垂直方向変換タイプとして使用できる。
【0426】
ここで、閾値は2、4または8などの自然数であり得る。閾値はコーディングブロックのサイズ、形状、イントラ予測モードまたは予測符号化モードのうちの少なくとも1つに基づいて可変的に決定できる。または、閾値を決定するための情報はビットストリームを介してシグナリングすることができる。
【0427】
上述した例において、サブブロックの幅および高さを1つの閾値と比較する例を例示したが、サブブロックの幅および高さを2個の閾値を比較して変換タイプを決定することもできる。一例として、サブブロックの幅が第1閾値より小さいかまたは第2閾値より大きい場合、水平方向の変換タイプをDCT2に決定することができる。そうでない場合、水平方向の変換タイプをDST7に決定できる。さらに、サブブロックの高さが第1閾値より小さいかまたは第2閾値より大きい場合、垂直方向の変換タイプをDCT2に決定することができる。そうでない場合、垂直方向の変換タイプをDST7に決定できる。第2閾値は第1閾値より大きい自然数であり、第1閾値は2、4または8などの自然数であり得、第2閾値は8、16または32などの自然数であり得る。
【0428】
別の一例として、サブブロックが高さが幅と同じである正方形である場合、水平方向変換タイプおよび垂直方向変換タイプを同じく設定でき、一方、サブブロックが高さが幅と異なる非正方形である場合、水平方向変換タイプおよび垂直方向変換タイプを異なるように設定できる。一例として、サブブロックの幅が高さより大きい場合、水平方向の変換タイプをDST7に決定し、垂直方向の変換タイプをDCT2に決定することができる。サブブロックの高さが幅より大きい場合、垂直方向の変換タイプをDST7に決定し、水平方向の変換タイプをDCT2に決定することができる。
【0429】
複数のサブブロックのうちの少なくとも1つに含まれる残差係数の値を0に設定することができる。ここで、残差係数は変換されて生成された変換係数、変換スキップされて生成された変換スキップ係数または前記変換係数または変換スキップ係数を量子化して生成された量子化された係数を意味する。一例として、コーディングブロックの境界から所定の距離以上離れているサブブロックに含まれる残差係数の値を0に設定することができる。
【0430】
図27は、サブブロックの残差係数が0に設定されることを説明する例の図である。
【0431】
図27に示された例において、CBF(Coded Block Flag)はサブブロックに0ではない残差係数があるか否かを示す。CBFの値が0であることは、サブブロックに0ではない残差係数がいないことを示し、CBFの値が1であることは、サブブロックに0ではない残差係数があることを示す。
【0432】
コーディングブロックの境界からサブブロックへの距離が閾値以上である場合、サブブロックに含まれる残差係数は0に設定できる。この場合、コーディングブロックの境界からサブブロックへの距離は、コーディングブロック境界に位置する第1サンプル、サブブロックに含まれる第2サンプルに基づいて取得できる。一例として、第1サンプは、コーディングブロックの左上隅に位置するサンプル、左下隅に位置するサンプル、左中に位置するサンプル、右上隅に位置するサンプル、右下隅に位置するサンプル、右中に位置するサンプル、上中に位置するサンプルまたは下中に位置するサンプルであり得る。第2サンプは、サブブロックの左上隅に位置するサンプル、左下隅に位置するサンプル、左中に位置するサンプル、右上隅に位置するサンプル、右下隅に位置するサンプル、右中に位置するサンプル、上中に位置するサンプルまたは下中に位置するサンプルであり得る。
【0433】
閾値はコーディングブロックのサイズ、形状、コーディングブロックに含まれるサブブロックの数またはサブブロックのサイズのうちの少なくとも1つに基づいて決定できる。または、閾値を決定するための情報はビットストリームを介してシグナリングすることができる。
【0434】
一例として、現在のブロックに垂直方向パーティショニングを適用する場合、コーディングブロック左側境界との距離が閾値以上であるサブブロックの残差係数は0に設定できる。コーディングブロックサイズが64であり、閾値が32である場合、
図27の(a)に示されたように、コーディングブロックの左側境界との距離が32以上であるサブブロック(Sub-CU2およびSub-CU3)の残差係数は0に設定できる。
【0435】
または、現在のブロックに水平方向パーティショニングを適用する場合、コーディングブロック上端境界との距離が閾値以上であるサブブロックの残差係数は0に設定できる。コーディングブロックのサイズが64であり、閾値が32である場合、
図27の(b)に示されたように、コーディングブロックの上端境界との距離が32以上であるサブブロック(Sub-CU2およびSub-CU3)の残差係数は0に設定できる。
【0436】
示された例と異なり、コーディングブロック境界との距離が閾値より小さいサブブロックに含まれる残差係数を0に設定できる。
【0437】
または、複数のサブブロックのうち、位置が事前に設定されたサブブロック以外の他のサブブロックの残差係数が0に設定されることもできる。一例として、コーディングブロックに垂直方向パーティショニングを適用する場合、複数のサブブロックの左端または右端に位置するサブブロック以外の他のサブブロックの残差係数が0に設定されることもできる。または、コーディングブロックに水平方向パーティショニングを適用する場合、複数のサブブロックの上端または下端に位置するサブブロック以外の他のサブブロックの残差係数が0に設定されることもがきる。
【0438】
サブブロックに対して、CBFのコーディングなどの非0係数があるか否かを示す情報をスキップできる。CBFの符号化をスキップする場合、コーディングブロック境界とサブブロックとの距離またはサブブロックの位置に従って、各サブブロックが0ではない残差係数を含むか否かを決定することができる。一例として、
図27に示された例において、サブブロック0およびサブブロック1(sub-CU0、sub-CU1)のCBF値が1であり、サブブロック2およびサブブロック3(sub-CU2、sub-CU3)のCBF値が0であると取得することができる。
【0439】
非0係数を含むサブブロックに対して、変換および/または量子化を実行でき、一方、非0係数を含まないサブブロックに対して、変換および量子化をスキップできる。
【0440】
別の一例として、コーディングブロックまたは変換ブロックの一部の領域のみ変換することを示す情報は、コーディングしてシグナリングされることができる。前記情報は1ビットの識別子cu_sbt_flagであり得る。前記識別子が1であることは、コーディングブロックまたは変換ブロックを分割して生成された複数のサブブロックのうちの一部のみ変換することを示し、前記識別子が0であることは、コーディングブロックまたは変換ブロックをサブブロックを分割して変換する必要ないことを示す。
【0441】
コーディングブロックの一部の領域のみ変換する方法は、コーディングブロックに対してサブパーティションイントラ符号化方法を適用する場合にのみ許可される。そのため、コーディングブロックに対してサブパーティションイントラ符号化方法を適用する場合にのみ、cu_sbt_flaggはコーディングしてシグナリングされることができる。cu_sbt_flagの値が1である場合、コーディングブロックまたは変換ブロックを分割して生成された複数のサブブロックのうちの一部に対して変換し、残りのサブブロックの残差係数は0に設定できる。cu_sbt_flagの値が1である場合、すべてのサブブロックに対して変換することができる。
【0442】
または、コーディングブロックに対してサブパーティションイントラ符号化方法を適用する場合、cu_sbt_flagの符号化をスキップし、cu_sbt_flagの値を1に設定することができる。
【0443】
別の一例として、コーディングブロックの予測符号化モードがインター予測または現在の画像参照である場合にのみ、コーディングブロックの一部の領域に対して変換する方法を許可できる。コーディングブロックがインター予測または現在の画像参照で符号化される場合、コーディングブロックの一部の領域にのみ変換するか非かを示す情報は、コーディングしてシグナリングされることができる。コーディングブロックの一部の領域にのみ変換する場合、コーディングブロックの分割形状を示す情報に対してコーディングしてシグナリングされることができる。コーディングブロックの分割形状を示す情報は、コーディングブロックが4個のサブブロックに分割されたか否かを示す情報、コーディングブロックの分割方向を示す情報またはサブブロック数を示す情報のうちの少なくとも1つを含み得る。一例として、cu_sbt_flagが1つである場合、コーディングブロックが4個のサブブロックに分割されたか否かを示す識別子cu_sbt_quadtree_flagをシグナリングできる。cu_sbt_quadtree_flagが1である場合、コーディングブロックが4個のサブブロックに分割されたことを示す。一例として、3つの垂直線または3つの水平線を使用して、コーディングブロックを4個のサブブロックに分割するか、または1つの垂直線および1つの水平線を使用して、コーディングブロックを4個のサブブロックに分割することができる。cu_sbt_quadtree_flagが0である場合、コーディングブロックが2個のサブブロックに分割されたことを示す。一例として、1つの垂直線または1つの水平線を使用して、コーディングブロックを2個のサブブロックに分割することができる。
【0444】
さらに、コーディングブロックの分割方向を示す識別子は、ビットストリームを介してシグナリングすることができる。一例として、コーディングブロックに水平方向パーティショニングを適用するか非かを示す識別子cu_sbt_horizontal_flagはコーディングしてシグナリングされることができる。cu_sbt_horizontal_flagの値が1であることは、コーディングブロックに対して水平方向パーティショニングを適用することを示し、cu_sbt_horizontal_flagの値が0であることは、コーディングブロックに対して垂直方向パーティショニングを適用することを示す。
【0445】
非0係数がいないサブブロックまたは変換を実行しないサブブロックの位置を示す情報は、ビットストリームを介してシグナリングすることができる。前記情報に基づいて、変換および/または量子化されたサブブロックおよび変換および/または量子化をスキップするサブブロックを決定することができる。
【0446】
図28は、ビットストリームによってシグナリングされる情報を介して変換および/または量子化を実行するサブブロックの位置を指示する例である。
【0447】
特定の位置または第1サブブロックに非0係数があるか否かを示す識別子sbt_upleft_flagはシグナリングできる。sbt_upleft_flagの値が1であることは、コーディングブロックの上端または左側に位置するサブブロックが変換および/または量子化されたことを示し、コーディングブロックの右側または下端に位置するサブブロックを変換および/または量子化していないことを示す。sbt_upleft_flagの値が0であることは、コーディングブロックの上端または左側に位置するサブブロックが変換および/または量子化されたことを示し、コーディングブロックの右側または下端に位置するサブブロックを変換および/または量子化していないことを示す。
【0448】
コーディングブロックを4個のサブブロックに分割する場合、sbt_upleft_flagはN個のサブブロックに対して変換および/または量子化を実行したことを示す。一例として、sbt_upleft_flagの値が1であることは上端または左側の2個のサブブロックに対して変換および/または量子化を実行することを示し、sbt_upleft_flagの値が0であることは、右側または下端の2個のサブブロックンに対して変換および/または量子化を実行したことを示す。
【0449】
図面に示された例と異なり、Nの値を1または3に設定することもできる。
【0450】
変換および/または量子化されていないサブブロックの残差係数は0に設定できる。
【0451】
コーディングブロックの分割方向およびサブブロックの位置に従って、サブブロックの変換タイプを決定することができる。一例として、コーディングブロックが垂直方向に沿って分割されサブブロックの左側に位置するサブブロックを変換する場合、水平方向変換タイプおよび垂直方向変換タイプを異なるように設定できる。一例として、水平方向変換タイプはDCT8に設定でき、垂直方向変換タイプはDST7に設定できる。逆に、コーディングブロックが垂直方向に沿って分割されサブブロックの右側に位置するサブブロックを変換する場合、サブブロックの水平方向変換タイプおよび垂直方向変換タイプは同じく設定できる。一例として、水平方向変換タイプおよび垂直方向変換タイプはDST7に設定できる。
【0452】
または、コーディングブロックが水平方向に沿って分割されサブブロックの上端に位置するサブブロックを変換する場合、水平方向変換タイプおよび垂直方向変換タイプを異なるように設定できる。一例として、水平方向変換タイプはDST7に設定でき、垂直方向変換タイプはDCT8に設定できる。逆に、コーディングブロックが水平方向に沿って分割されサブブロックの下端に位置するサブブロックを変換する場合、サブブロックの水平方向変換タイプおよび垂直方向変換タイプは同じく設定できる。一例として、水平方向変換タイプおよび垂直方向変換タイプはDST7に設定できる。
【0453】
サブブロックに対して、CBFのコーディングなどの非0係数があるか否かを示す情報をスキップできる。CBFの符号化をスキップする場合、変換されるブロックの位置に従って、各サブブロックに0ではない残差係数が含まれるか否かを決定することができる。一例として、sbt_upleft_flagの値が0である場合、左側または上端に位置するサブブロックのCBF値が0であると取得でき、右側または下端に位置するサブブロックのCBF値が1であると取得できる。または、sbt_upleft_flagの値が1である場合、左側または上端に位置するサブブロックのCBF値が1であると取得でき、右側または下端に位置するサブブロックのCBF値が0であると取得できる。
【0454】
変換されるサブブロックの復元サンプルは予測サンプルと残差サンプルとの合計で取得できる。逆に、変換がスキップされるサブブロックでは、予測サンプルは復元サンプルに設定できる。量子化は、ブロックのエネルギを減らすためであり、量子化プロセスは、変換係数を特定の定数値で除算するプロセスを含む。前記定数値は、量子化パラメータに従って取得でき、量子化パラメータは1ないし63の間の値に定義できる。
【0455】
符号化器で変換および量子化実行すると、復号化器は逆量子化および逆変換を介して残差ブロックを取得できる。復号化器は、測ブロックを残差ブロックと加算して現在のブロックに対する復元ブロックを取得できる。
【0456】
現在のブロックの復元ブロックを取得すると、ループフィルタリング(In-loop filtering)を介して量子化およびコーディングプロセスで発生される情報損失を低減することができる。ループフィルタリングは、ディブロッキングフィルタ(Deblocking filter)、サンプル適応オフセットフィルタ(SAO:Sample Adaptive Offset filter)または適応ループフィルタ(Adaptive Loop Filter:ALF)のうちの少なくとも1つを含み得る。以下、ループフィルタリングを適用する前の復元ブロックを第1復元ブロックと称し、ループフィルタリングを適用した後の復元ブロックを第2復元ブロックと称する。
【0457】
第1復元ブロックに対してディブロッキングフィルタ、SAOまたはALFのうちの少なくとも1つを適用して第2復元ブロックを取得することができる。この場合、SAOまたはALFはディブロッキングフィルタを適用した後適用することができる。
【0458】
ディブロッキングフィルタは、ブロックをユニットとして量子化して発生されたブロック境界のブロッキングアーティファクト(Blocking Artifact)を軽減するために使用される。ディブロッキングフィルタを適用するために、第1復元ブロックと隣接復元ブロックとの間のブロック強度(BS:Blocking Strength)を決定できる。
【0459】
図29は、ブロック強度を決定するプロセスのフローチャートである。
【0460】
図29に示された例では、Pは第1復元ブロックを示し、Qは隣接復元ブロックを示す。ここで、隣接復元ブロックは現在のブロックの右側または上端に隣接することができる。
【0461】
図29に示された例では、PおよびQの予測符号化モード、0ではない変換係数を含むか否か、同じ参照画像を使用してインター予測するか非かまたは動きベクトルの差が閾値以上であるか否かに従ってブロック強度を決定する場合を図面に示す。
【0462】
ブロック強度に基づいて、ディブロッキングフィルタを適用するか否か決定することができる。一例として、ブロック強度が0である場合、フィルタリングしなくてもよい。
【0463】
SAOは、周波数領域で量子化することと伴って発生されたリンギングアーティファクト(Ringing Artifact)軽減するために使用される。SAOは、第1復元ビデオのパターンに基づいて決定されたオフセットを加算または減算することを介して実行されることができる。オフセットの決定方法は、境界補正(EO:Edge Offset)またはサイドバンド補正(BO:Band Offset)を含む。EOは、隣接ピクセルのパターンに従って現在のサンプルの補正値を決定する方法を示す。BOは領域内の類似の輝度値を有するピクセルのセットに対して共通補正値を適用する方法を示す。具体的には、ピクセル輝度を32の等間隔に分けて、類似の輝度値を有するピクセルを1つのセットに設定することができる。一例として、32のサイドバンドのうち隣接する4個のバンドを一グループに設定し、4個のバンドに属するサンプルに対して同じ補正値を適用することができる。
【0464】
ALFは、第1復元ビデオまたはディブロッキングフィルタを適用した復元ビデオに対して、事前に定義されたサイズまたは形状のフィルタを適用して第2復元ビデオを生成する方法である。以下の式32はALFの適用例を示す。
【数27】
【0465】
画像、コーディングツリーユニット、コーディングブロック、予測ブロックまたは変換ブロックをユニットとして、事前に定義されたフィルタ候補のうちのいずれかを選択することができる。各フィルタ候補のサイズまたは形状のうちのいずれかは異なってもよい。
【0466】
【0467】
図30に示されたように、5×5、7×7または9×9サイズのひし形ウィンドウのうちの少なくとも1つを選択できる。
【0468】
色度成分に対して、5×5サイズのひし形ウィンドウのみ使用できる。
【0469】
復号化するプロセスまたはコーディングプロセスを中心として説明する実施例をコーディングプロセスまたは復号化するプロセスに適用し、これも本願のカテゴリに含まれる。所定の順序で説明する実施例を説明コンテンツが異なる順序に変更し、これも本願のカテゴリに含まれる。
【0470】
上述した実施例は一連のステップまたは順序図に基づいて説明されているが、これは発明の順序を制限するものではなく、必要に従って同時に実行または異なる順序に従って実行できる。さらに、上述した実施例では、ブロック図を構成する構成要素(例えば、ユニット、モジュールなど)は、それぞれハードウェア装置またはソフトウェアで実現されてもよく、複数の構成要素によって結合されて1つのハードウェア装置またはソフトウェアで実現されてもよい。上述した実施例は、様々なコンピュータ構成要素を介して実行できるプログラム命令の形態で実現され、コンピュータ可読記録媒体に記録されることができる。前記コンピュータ可読記録媒体は、プログラム命令、データファイル、データ構造などの独立または組み合わせることができる。コンピュータ可読記録媒体の例では、ハードディスク、ソフトディスクおよび磁気テープなどの磁気媒体、CD-ROM、DVDなどの光記録媒体、フロッピーディスク(floptical disk)などの磁気-光媒体(magneto-optical media)、およびROM、RAM、フラッシュメモリなどの特別に構成されたプログラム命令を記憶、実行するハードウェア装置を含む。前記ハードウェア装置は、本願の処理を実行するために、1つ以上のソフトウェアモジュールで回転するように構成され得、その逆も同様である。
【産業上の利用可能性】
【0471】
本願は画像を符号化または復号化する電子機器に適用されることができる。