[序論(Introduction)]
本開示の一態様における符号化装置は、回路と、回路に接続されたメモリと、を備え、回路は、動作において、少なくとも1つの出力レイヤをそれぞれが含む複数のレイヤ集合であって、ビットストリームに含められる複数のレイヤ集合のそれぞれに含まれるレイヤ数が1であるか否かに応じて、DPBに関するDPBパラメータを複数のレイヤ集合に含まれる複数のレイヤに共通のヘッダに保存するか否かを切り替える。
これにより、本開示の一態様における符号化装置は、ビットストリームに含められる複数のレイヤ集合のそれぞれに含まれるレイヤ数が1であるか否かに応じてDPBパラメータを保存するか否かを切り替え可能となり、ビットストリームに含められる複数のレイヤ集合のそれぞれに含まれるレイヤ数に応じて符号量を調整することができる。
また、例えば、本開示の一態様における符号化装置において、複数のレイヤ集合のそれぞれは、OLS(Output Layer Set)である。
これにより、本開示の一態様における符号化装置は、各OLSに含まれるレイヤ数が1であるか否かに応じてDPBパラメータを保存するか否かを切り替え可能となり、各OLSのレイヤ数に応じて符号量を調整することができる。
また、例えば、本開示の一態様における符号化装置において、複数のレイヤに共通のヘッダは、VPS(Video Parameter Set)である。
これにより、本開示の一態様における符号化装置は、VPSにおいて、ビットストリームに含められる複数のレイヤ集合のそれぞれに含まれるレイヤ数が1であるか否かに応じてDPBパラメータを保存するか否かを切り替え可能となり、ビットストリームに含められる複数のレイヤ集合のそれぞれに含まれるレイヤ数に応じて符号量を調整することができる。
また、例えば、本開示の一態様における符号化装置において、回路は、複数のレイヤ集合のそれぞれに含まれるレイヤ数が1である場合、DPBパラメータを複数のレイヤに共通のヘッダに保存しない。
これにより、本開示の一態様における符号化装置は、複数のレイヤ集合のそれぞれに含まれるレイヤ数が1である場合に、符号量を削減することができる。
また、例えば、本開示の一態様における符号化装置において、回路は、複数のレイヤ集合のそれぞれに含まれるレイヤ数が1である場合、SPSにDPBパラメータを保存する。
これにより、本開示の一態様における符号化装置は、複数のレイヤ集合のそれぞれに含まれるレイヤ数が1である場合、DPBパラメータをSPSに個別に保存することができる。
また、例えば、本開示の一態様における符号化装置において、回路は、複数のレイヤ集合の少なくとも1つに含まれるレイヤ数が1より大きい場合、DPBパラメータを複数のレイヤに共通のヘッダに保存する。
これにより、本開示の一態様における符号化装置は、複数のレイヤに共通のヘッダにDPBパラメータを必要に応じて保存することができる。例えば、符号化装置100は、少なくとも1つのレイヤ集合に含まれる一つのレイヤに適したDPBパラメータを共通のヘッダに保存することができる。
また、例えば、本開示の一態様における符号化装置において、回路は、複数のレイヤ集合の少なくとも1つに含まれるレイヤ数が1より大きい場合、それぞれがDPBパラメータである1つ以上のDPBパラメータの数から1を引くことにより得られる値を示す個数パラメータ、及び、1つ以上のDPBパラメータを複数のレイヤに共通のヘッダに保存する。
これにより、本開示の一態様における符号化装置は、個数パラメータの値が0であっても1つのDPBパラメータが共通のヘッダに保存されるため、0の値をとる個数パラメータに意味を持たせることができ、個数パラメータを効率的に利用することができる。
本開示の一態様における復号装置は、回路と、回路に接続されたメモリと、を備え、回路は、動作において、少なくとも1つの出力レイヤをそれぞれが含む複数のレイヤ集合であって、ビットストリームに含められた複数のレイヤ集合のそれぞれに含まれるレイヤ数が1であるか否かに応じて、DPBに関するDPBパラメータを複数のレイヤ集合に含まれる複数のレイヤに共通のヘッダから導出するか否かを切り替える。
これにより、本開示の一態様における復号装置は、ビットストリームに含められた複数のレイヤ集合のそれぞれに含まれるレイヤ数が1であるか否かに応じてDPBパラメータを導出するか否かを切り替え可能となり、ビットストリームに含められる複数のレイヤ集合のそれぞれに含まれるレイヤ数に応じて符号量を調整することができる。
また、例えば、本開示の一態様における復号装置において、複数のレイヤ集合のそれぞれは、OLSである。
これにより、本開示の一態様における復号装置は、各OLSに含まれるレイヤ数が1であるか否かに応じてDPBパラメータを導出するか否かを切り替え可能となり、OLSのレイヤ数に応じて符号量を調整することができる。
また、例えば、本開示の一態様における復号装置において、複数のレイヤに共通のヘッダは、VPSである。
これにより、本開示の一態様における復号装置は、VPSにおいて、ビットストリームに含められる複数のレイヤ集合のそれぞれに含まれるレイヤ数が1であるか否かに応じてDPBパラメータを導出するか否かを切り替え可能となり、ビットストリームに含められる複数のレイヤ集合のそれぞれに含まれるレイヤ数に応じて符号量を調整することができる。
また、例えば、本開示の一態様における復号装置において、回路は、複数のレイヤ集合のそれぞれに含まれるレイヤ数が1である場合、DPBパラメータを複数のレイヤに共通のヘッダから導出しない。
これにより、本開示の一態様における復号装置は、複数のレイヤ集合のそれぞれに含まれるレイヤ数が1である場合に、符号量を削減することができる。
また、例えば、本開示の一態様における復号装置において、回路は、複数のレイヤ集合のそれぞれに含まれるレイヤ数が1である場合、SPSからDPBパラメータを導出する。
これにより、本開示の一態様における復号装置は、複数のレイヤ集合のそれぞれに含まれるレイヤ数が1である場合、VPSからのDPBパラメータの導出を省略でき、かつ、DPBパラメータを利用できる。
また、例えば、本開示の一態様における復号装置において、回路は、複数のレイヤ集合の少なくとも1つに含まれるレイヤ数が1より大きい場合、DPBパラメータを複数のレイヤに共通のヘッダから導出する。
これにより、本開示の一態様における復号装置は、複数のレイヤに共通のヘッダからDPBパラメータを適切に導出することができる。
また、例えば、回路は、複数のレイヤ集合の少なくとも1つに含まれるレイヤ数が1より大きい場合、それぞれがDPBパラメータである1つ以上のDPBパラメータの数から1を引くことにより得られる値を示す個数パラメータ、及び、1つ以上のDPBパラメータを複数のレイヤに共通のヘッダから導出する。
これにより、本開示の一態様における復号装置は、個数パラメータの値が0であってもDPBパラメータの数が0にならないため、複数のレイヤ集合の少なくとも1つに含まれるレイヤ数が1よりも大きい場合にDPBパラメータが導出されないことを抑制できる。
本開示の一態様における符号化方法は、少なくとも1つの出力レイヤをそれぞれが含む複数のレイヤ集合であって、ビットストリームに含められる複数のレイヤ集合のそれぞれに含まれるレイヤ数が1であるか否かに応じて、DPBに関するDPBパラメータを複数のレイヤ集合に含まれる複数のレイヤに共通のヘッダに保存するか否かを切り替える。
これにより、本開示の一態様における符号化方法は、上記符号化装置と同様の効果を奏することができる。
本開示の一態様における復号方法は、少なくとも1つの出力レイヤをそれぞれが含む複数のレイヤ集合であって、ビットストリームに含められた複数のレイヤ集合のそれぞれに含まれるレイヤ数が1であるか否かに応じて、DPBに関するDPBパラメータを複数のレイヤ集合に含まれる複数のレイヤに共通のヘッダから導出するか否かを切り替える。
これにより、本開示の一態様における復号方法は、上記復号装置と同様の効果を奏することができる。
また、例えば、本開示の一態様に係る符号化装置は、分割部と、イントラ予測部と、インター予測部と、ループフィルタ部と、変換部と、量子化部と、エントロピー符号化部とを備えてもよい。
前記分割部は、ピクチャを複数のブロックに分割してもよい。前記イントラ予測部は、前記複数のブロックに含まれるブロックに対してイントラ予測を行ってもよい。前記インター予測部は、前記ブロックに対してインター予測を行ってもよい。前記変換部は、前記イントラ予測又は前記インター予測によって得られる予測画像と、原画像との予測誤差を変換して、変換係数を生成してもよい。前記量子化部は、前記変換係数を量子化して量子化係数を生成してもよい。前記エントロピー符号化部は、前記量子化係数を符号化して符号化ビットストリームを生成してもよい。前記ループフィルタ部は、前記ブロックの再構成画像にフィルタを適用してもよい。
また、例えば、前記符号化装置は、複数のピクチャを含む動画像を符号化する符号化装置であってもよい。
そして、エントロピー符号化部は、少なくとも1つの出力レイヤをそれぞれが含む複数のレイヤ集合であって、ビットストリームに含められる複数のレイヤ集合のそれぞれに含まれるレイヤ数が1であるか否かに応じて、DPBに関するDPBパラメータを複数のレイヤ集合に含まれる前記複数のレイヤに共通のヘッダに保存するか否かを切り替えてもよい。
また、例えば、本開示の一態様に係る復号装置は、エントロピー復号部と、逆量子化部と、逆変換部と、イントラ予測部と、インター予測部と、ループフィルタ部とを備えてもよい。
前記エントロピー復号部は、符号化ビットストリームからピクチャ内のブロックの量子化係数を復号してもよい。前記逆量子化部は、前記量子化係数を逆量子化して変換係数を取得してもよい。前記逆変換部は、前記変換係数を逆変換して予測誤差を取得してもよい。前記イントラ予測部は、前記ブロックに対してイントラ予測を行ってもよい。前記インター予測部は、前記ブロックに対してインター予測を行ってもよい。前記フィルタ部は、前記イントラ予測又は前記インター予測によって得られる予測画像と前記予測誤差とを用いて生成される再構成画像にフィルタを適用してもよい。
また、例えば、前記復号装置は、複数のピクチャを含む動画像を復号する復号装置であってもよい。
そして、エントロピー復号部は、少なくとも1つの出力レイヤをそれぞれが含む複数のレイヤ集合であって、ビットストリームに含められた複数のレイヤ集合のそれぞれに含まれるレイヤ数が1であるか否かに応じて、DPBに関するDPBパラメータを複数のレイヤ集合に含まれる前記複数のレイヤに共通のヘッダから導出するか否かを切り替えてもよい。
さらに、これらの包括的又は具体的な態様は、システム、装置、方法、集積回路、コンピュータプログラム、又は、コンピュータ読み取り可能なCD-ROMなどの非一時的な記録媒体で実現されてもよく、システム、装置、方法、集積回路、コンピュータプログラム、及び、記録媒体の任意な組み合わせで実現されてもよい。
[用語の定義]
各用語は一例として以下のような定義であってもよい。
(1)画像
画素の集合によって構成されたデータの単位であり、ピクチャやピクチャより小さいブロックからなり、動画の他、静止画も含む。
(2)ピクチャ
画素の集合によって構成される画像の処理単位であり、フレームやフィールドと呼ばれる場合もある。
(3)ブロック
特定数の画素を含む集合の処理単位であり、以下の例に挙げる通り、名称は問わない。また、形状も問わず、例えば、M×N画素からなる長方形、M×M画素からなる正方形はもちろん、三角形、円形、その他の形状も含む。
(ブロックの例)
・スライス/タイル/ブリック
・CTU/スーパーブロック/基本分割単位
・VPDU/ハードウェアの処理分割単位
・CU/処理ブロック単位/予測ブロック単位(PU)/直交変換ブロック単位(TU)/ユニット
・サブブロック
(4)画素/サンプル
画像を構成する最小単位の点であって、整数位置の画素のみならず整数位置の画素に基づいて生成された小数位置の画素も含む。
(5)画素値/サンプル値
画素が有する固有の値であって、輝度値、色差値、RGBの階調はもちろん、depth値、又は0、1の2値も含む。
(6)フラグ
1ビットの他、複数ビットの場合も含み、例えば、2ビット以上のパラメータやインデックスであってもよい。また、二進数を用いた2値のみならず、その他の進数を用いた多値であってもよい。
(7)信号
情報を伝達するために記号化、符号化したものであって、離散化されたデジタル信号の他、連続値を取るアナログ信号も含む。
(8)ストリーム/ビットストリーム
デジタルデータのデータ列又はデジタルデータの流れをいう。ストリーム/ビットストリームは、1本のストリームの他、複数の階層に分けられ複数のストリームにより構成されてもよい。また、単数の伝送路でシリアル通信により伝送される場合の他、複数の伝送路でパケット通信により伝送される場合も含む。
(9)差/差分
スカラー量の場合、単純差(x-y)の他、差の演算が含まれていれば足り、差の絶対値(|x-y|)、二乗差(x^2-y^2)、差の平方根(√(x-y))、重み付け差(ax-by:a、bは定数)、オフセット差(x-y+a:aはオフセット)を含む。
(10)和
スカラー量の場合、単純和(x+y)の他、和の演算が含まれていれば足り、和の絶対値(|x+y|)、二乗和(x^2+y^2)、和の平方根(√(x+y))、重み付け和(ax+by:a、bは定数)、オフセット和(x+y+a:aはオフセット)を含む。
(11)基づいて(based on)
基づく対象となる要素以外を加味する場合も含む。また、直接結果を求める場合の他、中間的な結果を経由して結果を求める場合も含む。
(12)用いて(used、using)
用いる対象となる要素以外を加味する場合も含む。また、直接結果を求める場合の他、中間的な結果を経由して結果を求める場合も含む。
(13)禁止する(prohibit、forbid)
許されないと言い換えることができる。また、禁止していないこと又は許可されることは、必ずしも義務を意味するものではない。
(14)制限する(limit、restriction/restrict/restricted)
許されないと言い換えることができる。また、禁止していないこと又は許可されることは、必ずしも義務を意味するものではない。さらに、量的又は質的に一部が禁止されていれば足り、全面的に禁止する場合も含まれる。
(15)色差(chroma)
サンプル配列または単一のサンプルが、原色に関連する2つの色差(colour difference)信号の1つを表すことを指定する、記号CbおよびCrで表される形容詞である。chromaという用語の代わりに、chrominanceという用語を使用することもできる。
(16)輝度(luma)
サンプル配列または単一のサンプルが原色に関連するモノクロ信号を表すことを指定する、記号または下付きのYまたはLで表される形容詞である。lumaという用語の代わりに、luminanceという用語を使用することもできる。
[記載に関する解説]
図面において、同一の参照番号は同一または類似の構成要素を示す。また、図面における構成要素のサイズおよび相対位置は、必ずしも一定の縮尺で描かれていない。
以下、実施の形態について図面を参照しながら具体的に説明する。なお、以下で説明する実施の形態は、いずれも包括的または具体的な例を示すものである。以下の実施の形態で示される数値、形状、材料、構成要素、構成要素の配置位置及び接続形態、ステップ、ステップの関係及び順序などは、一例であり、請求の範囲を限定する主旨ではない。
以下では、符号化装置および復号化装置の実施の形態を説明する。実施の形態は、本開示の各態様で説明する処理および/または構成を適用可能な符号化装置および復号化装置の例である。処理および/または構成は、実施の形態とは異なる符号化装置および復号化装置においても実施可能である。例えば、実施の形態に対して適用される処理および/または構成に関して、例えば以下のいずれかを実施してもよい。
(1)本開示の各態様で説明する実施の形態の符号化装置または復号装置の複数の構成要素のうちいずれかは、本開示の各態様のいずれかで説明する他の構成要素に置き換えまたは組み合わせられてもよい。
(2)実施の形態の符号化装置または復号装置において、当該符号化装置または復号装置の複数の構成要素のうち一部の構成要素によって行われる機能または処理に、機能または処理の追加、置き換え、削除などの任意の変更がなされてもよい。例えば、いずれかの機能または処理は、本開示の各態様のいずれかで説明する他の機能または処理に、置き換えまたは組み合わせられてもよい。
(3)実施の形態の符号化装置または復号装置が実施する方法において、当該方法に含まれる複数の処理のうちの一部の処理について、追加、置き換えおよび削除などの任意の変更がなされてもよい。例えば、方法におけるいずれかの処理は、本開示の各態様のいずれかで説明する他の処理に、置き換えまたは組み合わせられてもよい。
(4)実施の形態の符号化装置または復号装置を構成する複数の構成要素のうちの一部の構成要素は、本開示の各態様のいずれかで説明する構成要素と組み合わせられてもよいし、本開示の各態様のいずれかで説明する機能の一部を備える構成要素と組み合わせられてもよいし、本開示の各態様で説明する構成要素が実施する処理の一部を実施する構成要素と組み合わせられてもよい。
(5)実施の形態の符号化装置または復号装置の機能の一部を備える構成要素、または、実施の形態の符号化装置または復号装置の処理の一部を実施する構成要素は、本開示の各態様いずれかで説明する構成要素と、本開示の各態様でいずれかで説明する機能の一部を備える構成要素と、または、本開示の各態様のいずれかで説明する処理の一部を実施する構成要素と組み合わせまたは置き換えられてもよい。
(6)実施の形態の符号化装置または復号装置が実施する方法において、当該方法に含まれる複数の処理のいずれかは、本開示の各態様のいずれかで説明する処理に、または、同様のいずれかの処理に、置き換えまたは組み合わせられてもよい。
(7)実施の形態の符号化装置または復号装置が実施する方法に含まれる複数の処理のうちの一部の処理は、本開示の各態様のいずれかで説明する処理と組み合わせられてもよい。
(8)本開示の各態様で説明する処理および/または構成の実施の仕方は、実施の形態の符号化装置または復号装置に限定されるものではない。例えば、処理および/または構成は、実施の形態において開示する動画像符号化または動画像復号とは異なる目的で利用される装置において実施されてもよい。
[システム構成]
図1は、本実施の形態に係る伝送システムの構成の一例を示す概略図である。
伝送システムTrsは、画像を符号化することによって生成されるストリームを伝送し、伝送されたストリームを復号するシステムである。このような伝送システムTrsは、例えば図1に示すように、符号化装置100、ネットワークNw、および復号装置200を含む。
符号化装置100には画像が入力される。符号化装置100は、その入力された画像を符号化することによってストリームを生成し、そのストリームをネットワークNwに出力する。ストリームには、例えば、符号化された画像と、その符号化された画像を復号するための制御情報とが含まれている。この符号化によって画像は圧縮される。
なお、符号化装置100に入力される、符号化される前の元の画像は、原画像、原信号、または原サンプルとも呼ばれる。また、画像は、動画像または静止画像であってもよい。また、画像は、シーケンス、ピクチャおよびブロックなどの上位概念であって、別途規定されない限り、空間的および時間的な領域の制限を受けない。また、画像は、画素または画素値の配列からなり、その画像を表す信号、または画素値は、サンプルとも呼ばれる。また、ストリームは、ビットストリーム、符号化ビットストリーム、圧縮ビットストリーム、または符号化信号と呼ばれてもよい。さらに、符号化装置は、画像符号化装置または動画像符号化装置と呼ばれてもよく、符号化装置100による符号化の方法は、符号化方法、画像符号化方法、または動画像符号化方法と呼ばれてもよい。
ネットワークNwは、符号化装置100が生成したストリームを復号装置200に伝送する。ネットワークNwは、インターネット、広域ネットワーク(WAN:Wide Area Network)、小規模ネットワーク(LAN:Local Area Network)、またはこれらの組み合わせであってもよい。ネットワークNwは、必ずしも双方向の通信網に限らず、地上デジタル放送、または衛星放送等の放送波を伝送する一方向の通信網であってもよい。また、ネットワークNwは、DVD(Digital Versatile Disc)、BD(Blu-Ray Disc(登録商標))等のストリームを記録した記憶媒体によって代替されてもよい。
復号装置200は、ネットワークNwが伝送したストリームを復号することによって、例えば非圧縮の画像である復号画像を生成する。例えば、復号装置は、符号化装置100による符号化方法に対応する復号方法にしたがってストリームを復号する。
なお、復号装置は、画像復号装置または動画像復号装置と呼ばれてもよく、復号装置200による復号の方法は、復号方法、画像復号方法、または動画像復号方法と呼ばれてもよい。
[データ構造]
図2は、ストリームにおけるデータの階層構造の一例を示す図である。ストリームは、例えばビデオシーケンスを含む。このビデオシーケンスは、例えば図2の(a)に示すように、VPS(Video Parameter Set)と、SPS(Sequence Parameter Set)と、PPS(Picture Parameter Set)と、SEI(Supplemental Enhancement Information)と、複数のピクチャとを含む。
VPSは、複数のレイヤから構成されている動画像において、複数のレイヤに共通する符号化パラメータと、動画像に含まれる複数のレイヤ、または個々のレイヤに関連する符号化パラメータとを含む。
SPSは、シーケンスに対して用いられるパラメータ、すなわち、シーケンスを復号するために復号装置200が参照する符号化パラメータを含む。例えば、その符号化パラメータは、ピクチャの幅または高さを示してもよい。なお、SPSは複数存在してもよい。
PPSは、ピクチャに対して用いられるパラメータ、すなわち、シーケンス内の各ピクチャを復号するために復号装置200が参照する符号化パラメータを含む。例えば、その符号化パラメータは、ピクチャの復号に用いられる量子化幅の基準値と、重み付き予測の適用を示すフラグとを含んでもよい。なお、PPSは複数存在してもよい。また、SPSとPPSとは、単にパラメータセットと呼ばれる場合がある。
ピクチャは、図2の(b)に示すように、ピクチャヘッダと、1つ以上のスライスを含んでいてもよい。ピクチャヘッダは、その1つ以上のスライスを復号するために復号装置200が参照する符号化パラメータを含む。
スライスは、図2の(c)に示すように、スライスヘッダと、1つ以上のブリックとを含む。スライスヘッダは、その1つ以上のブリックを復号するために復号装置200が参照する符号化パラメータを含む。
ブリックは、図2の(d)に示すように、1つ以上のCTU(Coding Tree Unit)を含む。
なお、ピクチャは、スライスを含まず、そのスライスの代わりに、タイルグループを含んでいてもよい。この場合、タイルグループは、1つ以上のタイルを含む。また、ブリックにスライスが含まれていてもよい。
CTUは、スーパーブロックまたは基本分割単位とも呼ばれる。このようなCTUは、図2の(e)に示すように、CTUヘッダと、1つ以上のCU(Coding Unit)とを含む。CTUヘッダは、1つ以上のCUを復号するために復号装置200が参照する符号化パラメータを含む。
CUは、複数の小さいCUに分割されてもよい。また、CUは、図2の(f)に示すように、CUヘッダと、予測情報と、残差係数情報とを含む。予測情報は、そのCUを予測するための情報であって、残差係数情報は、後述の予測残差を示す情報である。なお、CUは、基本的にPU(Prediction Unit)およびTU(Transform Unit)と同一であるが、例えば後述のSBTでは、そのCUよりも小さい複数のTUを含んでいてもよい。また、CUは、そのCUを構成するVPDU(Virtual Pipeline Decoding Unit)ごとに処理されてもよい。VPDUは、例えば、ハードウェアにおいてパイプライン処理を行う際に、1ステージで処理できる固定的な単位である。
なお、ストリームは、図2に示す各階層のうちの何れか一部の階層を有していなくてもよい。また、これらの階層の順番は、入れ替えられてもよく、何れかの階層は他の階層に置き換えられてもよい。また、符号化装置100または復号装置200などの装置によって現時点で行われる処理の対象とされているピクチャを、カレントピクチャという。その処理が符号化であれば、カレントピクチャは、符号化対象ピクチャと同義であり、その処理が復号であれば、カレントピクチャは、復号対象ピクチャと同義である。また、符号化装置100または復号装置200などの装置によって現時点で行われる処理の対象とされている例えばCUまたはCUなどのブロックを、カレントブロックという。その処理が符号化であれば、カレントブロックは、符号化対象ブロックと同義であり、その処理が復号であれば、カレントブロックは、復号対象ブロックと同義である。
[ピクチャの構成 スライス/タイル]
ピクチャを並列にデコードするために、ピクチャはスライス単位またはタイル単位で構成される場合がある。
スライスは、ピクチャを構成する基本的な符号化の単位である。ピクチャは、例えば1つ以上のスライスから構成される。また、スライスは、1つ以上の連続するCTUからなる。
図3は、スライスの構成の一例を示す図である。例えば、ピクチャは、11×8個のCTUを含み、かつ、4つのスライス(スライス1-4)に分割される。スライス1は、例えば16個のCTUからなり、スライス2は、例えば21個のCTUからなり、スライス3は、例えば29個のCTUからなり、スライス4は、例えば22個のCTUからなる。ここで、ピクチャ内の各CTUは、いずれかのスライスに属する。スライスの形状は、ピクチャを水平方向に分割した形になる。スライスの境界は、画面端である必要はなく、画面内のCTUの境界のうちどこであってもよい。スライスの中のCTUの処理順(符号化順または復号順)は、例えばラスタ・スキャン順である。また、スライスは、スライスヘッダと符号化データを含む。スライスヘッダには、スライスの先頭のCTUアドレス、スライス・タイプなどそのスライスの特徴が記述されてもよい。
タイルは、ピクチャを構成する矩形領域の単位である。各タイルにはTileIdと呼ばれる番号がラスタ・スキャン順に割り振られてもよい。
図4は、タイルの構成の一例を示す図である。例えば、ピクチャは、11×8個のCTUを含み、かつ、4つの矩形領域のタイル(タイル1-4)に分割される。タイルが使用される場合、タイルが使用されない場合と比べてCTUの処理順が変更される。タイルが使用されない場合、ピクチャ内の複数のCTUは例えばラスタ・スキャン順に処理される。タイルが使用される場合には、複数のタイルのそれぞれにおいて、少なくとも1つのCTUが例えばラスタ・スキャン順に処理される。例えば、図4に示すように、タイル1に含まれる複数のCTUの処理順は、タイル1の1列目左端からタイル1の1列目右端まで向かい、次に、タイル1の2列目左端からタイル1の2列目右端まで向かう順である。
なお、1つのタイルは、1つ以上のスライスを含む場合があり、1つのスライスは、1つ以上のタイルを含む場合がある。
なお、ピクチャはタイルセット単位で構成されていてもよい。タイルセットは、1つ以上のタイルグループを含んでもよく、1つ以上のタイルを含んでもよい。ピクチャは、タイルセット、タイルグループ、およびタイルのうちのいずれか1つのみによって構成されていてもよい。例えば、タイルセットごとに複数のタイルをラスタ順に走査する順序を、タイルの基本符号化順序とする。各タイルセット内で基本符号化順序が連続する1つ以上のタイルの集まりをタイルグループとする。このようなピクチャは、後述の分割部102(図7参照)によって構成されてもよい。
[スケーラブル符号化]
図5および図6は、スケーラブルなストリームの構成の一例を示す図である。
符号化装置100は、図5に示すように、複数のピクチャのそれぞれを、複数のレイヤの何れかに分けて符号化することによって、時間的/空間的スケーラブルなストリームを生成してもよい。例えば、符号化装置100は、レイヤ毎にピクチャを符号化することによって、ベースレイヤの上位にエンハンスメントレイヤが存在するスケーラビリティを実現する。このような各ピクチャの符号化を、スケーラブル符号化という。これにより、復号装置200は、そのストリームを復号することによって表示される画像の画質を切り換えることができる。つまり、復号装置200は、自らの性能という内的要因と、通信帯域の状態などの外的要因とに応じて、どのレイヤまで復号するかを決定する。その結果、復号装置200は、同一のコンテンツを低解像度のコンテンツと高解像度のコンテンツとに自由に切り替えて復号できる。例えば、そのストリームの利用者は、移動中に、スマートフォンを用いて、そのストリームの動画像を途中まで視聴し、帰宅後に、インターネットTV等の機器を用いて、その動画像の続きを視聴する。なお、上述のスマートフォンおよび機器のそれぞれには、互いに性能が同一または異なる復号装置200が組み込まれている。この場合には、その機器がそのストリームのうちの上位レイヤまでを復号すれば、利用者は、帰宅後には高画質の動画像を視聴することができる。これにより、符号化装置100は、同一内容で画質の異なる複数のストリームを生成する必要がなく、処理負荷を低減することができる。
さらに、エンハンスメントレイヤは、画像の統計情報などに基づくメタ情報を含んでいてもよい。復号装置200は、メタ情報に基づきベースレイヤのピクチャを超解像することで高画質化された動画像を生成してもよい。超解像とは、同一解像度におけるSN比の向上、および、解像度の拡大のいずれであってもよい。メタ情報は、超解像処理に用いる線形もしくは非線形のフィルタ係数を特定するため情報、または、超解像処理に用いるフィルタ処理、機械学習もしくは最小2乗演算におけるパラメータ値を特定する情報などを含んでいてもよい。
または、ピクチャ内の各オブジェクトなどの意味合いに応じて、そのピクチャはタイル等に分割されていてもよい。この場合、復号装置200は、復号の対象とされるタイルを選択することで、ピクチャのうちの一部の領域だけを復号してもよい。また、オブジェクトの属性(人物、車、ボールなど)と、ピクチャ内の位置(同一ピクチャにおける座標位置など)とが、メタ情報として格納されていてもよい。この場合、復号装置200は、メタ情報に基づいて所望のオブジェクトの位置を特定し、そのオブジェクトを含むタイルを決定できる。例えば、図6に示すように、メタ情報は、HEVCにおけるSEIなどの、画像データとは異なるデータ格納構造を用いて格納される。このメタ情報は、例えば、メインオブジェクトの位置、サイズ、または色彩などを示す。
また、ストリーム、シーケンスまたはランダムアクセス単位など、複数のピクチャから構成される単位でメタ情報が格納されてもよい。これにより、復号装置200は、特定人物が動画像内に出現する時刻などを取得でき、その時刻とピクチャ単位の情報とを用いることで、オブジェクトが存在するピクチャと、そのピクチャ内でのオブジェクトの位置とを特定できる。
[符号化装置]
次に、実施の形態に係る符号化装置100を説明する。図7は、実施の形態に係る符号化装置100の機能構成の一例を示すブロック図である。符号化装置100は、画像をブロック単位で符号化する。
図7に示すように、符号化装置100は、画像をブロック単位で符号化する装置であって、分割部102と、減算部104と、変換部106と、量子化部108と、エントロピー符号化部110と、逆量子化部112と、逆変換部114と、加算部116と、ブロックメモリ118と、ループフィルタ部120と、フレームメモリ122と、イントラ予測部124と、インター予測部126と、予測制御部128と、予測パラメータ生成部130とを備える。なお、イントラ予測部124およびインター予測部126のそれぞれは、予測処理部の一部として構成されている。
[符号化装置の実装例]
図8は、符号化装置100の実装例を示すブロック図である。符号化装置100は、プロセッサa1およびメモリa2を備える。例えば、図7に示された符号化装置100の複数の構成要素は、図8に示されたプロセッサa1およびメモリa2によって実装される。
プロセッサa1は、情報処理を行う回路であり、メモリa2にアクセス可能な回路である。例えば、プロセッサa1は、画像を符号化する専用または汎用の電子回路である。プロセッサa1は、CPUのようなプロセッサであってもよい。また、プロセッサa1は、複数の電子回路の集合体であってもよい。また、例えば、プロセッサa1は、図7に示された符号化装置100の複数の構成要素のうち、情報を記憶するための構成要素を除く、複数の構成要素の役割を果たしてもよい。
メモリa2は、プロセッサa1が画像を符号化するための情報が記憶される専用または汎用のメモリである。メモリa2は、電子回路であってもよく、プロセッサa1に接続されていてもよい。また、メモリa2は、プロセッサa1に含まれていてもよい。また、メモリa2は、複数の電子回路の集合体であってもよい。また、メモリa2は、磁気ディスクまたは光ディスク等であってもよいし、ストレージまたは記録媒体等と表現されてもよい。また、メモリa2は、不揮発性メモリでもよいし、揮発性メモリでもよい。
例えば、メモリa2には、符号化される画像が記憶されてもよいし、符号化された画像に対応するストリームが記憶されてもよい。また、メモリa2には、プロセッサa1が画像を符号化するためのプログラムが記憶されていてもよい。
また、例えば、メモリa2は、図7に示された符号化装置100の複数の構成要素のうち、情報を記憶するための構成要素の役割を果たしてもよい。具体的には、メモリa2は、図7に示されたブロックメモリ118およびフレームメモリ122の役割を果たしてもよい。より具体的には、メモリa2には、再構成画像(具体的には、再構成済みブロックまたは再構成済みピクチャ等)が記憶されてもよい。
なお、符号化装置100において、図7に示された複数の構成要素の全てが実装されなくてもよいし、上述された複数の処理の全てが行われなくてもよい。図7に示された複数の構成要素の一部は、他の装置に含まれていてもよいし、上述された複数の処理の一部は、他の装置によって実行されてもよい。
以下、符号化装置100の全体的な処理の流れを説明した後に、符号化装置100に含まれる各構成要素について説明する。
[符号化処理の全体フロー]
図9は、符号化装置100による全体的な符号化処理の一例を示すフローチャートである。
まず、符号化装置100の分割部102は、原画像に含まれるピクチャを複数の固定サイズのブロック(128×128画素)に分割する(ステップSa_1)。そして、分割部102は、その固定サイズのブロックに対して分割パターンを選択する(ステップSa_2)。つまり、分割部102は、固定サイズのブロックを、その選択された分割パターンを構成する複数のブロックに、さらに分割する。そして、符号化装置100は、その複数のブロックのそれぞれに対してステップSa_3~Sa_9の処理を行う。
イントラ予測部124およびインター予測部126からなる予測処理部と、予測制御部128とは、カレントブロックの予測画像を生成する(ステップSa_3)。なお、予測画像は、予測信号、予測ブロックまたは予測サンプルとも呼ばれる。
次に、減算部104は、カレントブロックと予測画像との差分を予測残差として生成する(ステップSa_4)。なお、予測残差は、予測誤差とも呼ばれる。
次に、変換部106および量子化部108は、その予測画像に対して変換および量子化を行うことによって、複数の量子化係数を生成する(ステップSa_5)。
次に、エントロピー符号化部110は、その複数の量子化係数と、予測画像の生成に関する予測パラメータとに対して符号化(具体的にはエントロピー符号化)を行うことによって、ストリームを生成する(ステップSa_6)。
次に、逆量子化部112および逆変換部114は、複数の量子化係数に対して逆量子化および逆変換を行うことによって、予測残差を復元する(ステップSa_7)。
次に、加算部116は、その復元された予測残差に予測画像を加算することによってカレントブロックを再構成する(ステップSa_8)。これにより、再構成画像が生成される。なお、再構成画像は、再構成ブロックとも呼ばれ、特に符号化装置100によって生成される再構成画像は、ローカル復号ブロックまたはローカル復号画像とも呼ばれる。
この再構成画像が生成されると、ループフィルタ部120は、その再構成画像に対してフィルタリングを必要に応じて行う(ステップSa_9)。
そして、符号化装置100は、ピクチャ全体の符号化が完了したか否かを判定し(ステップSa_10)、完了していないと判定する場合(ステップSa_10のNo)、ステップSa_2からの処理を繰り返し実行する。
なお、上述の例では、符号化装置100は、固定サイズのブロックに対して1つの分割パターンを選択し、その分割パターンにしたがって各ブロックの符号化を行うが、複数の分割パターンのそれぞれにしたがって各ブロックの符号化を行ってもよい。この場合には、符号化装置100は、複数の分割パターンのそれぞれに対するコストを評価し、例えば最も小さいコストの分割パターンにしたがった符号化によって得られるストリームを、最終的に出力されるストリームとして選択してもよい。
また、これらのステップSa_1~Sa_10の処理は、符号化装置100によってシーケンシャルに行われてもよく、それらの処理のうちの一部の複数の処理が並列に行われてもよく、順番が入れ替えられてもよい。
このような符号化装置100による符号化処理は、予測符号化と変換符号化とを用いたハイブリッド符号化である。また、予測符号化は、減算部104、変換部106、量子化部108、逆量子化部112、逆変換部114、加算部116、ループフィルタ部120、ブロックメモリ118、フレームメモリ122、イントラ予測部124、インター予測部126、および予測制御部128からなる符号化ループによって行われる。つまり、イントラ予測部124およびインター予測部126からなる予測処理部は、符号化ループの一部を構成する。
[分割部]
分割部102は、原画像に含まれる各ピクチャを複数のブロックに分割し、各ブロックを減算部104に出力する。例えば、分割部102は、まず、ピクチャを固定サイズ(例えば128x128画素)のブロックに分割する。この固定サイズのブロックは、符号化ツリーユニット(CTU)と呼ばれることがある。そして、分割部102は、例えば再帰的な四分木(quadtree)および/または二分木(binary tree)ブロック分割に基づいて、固定サイズのブロックの各々を可変サイズ(例えば64x64画素以下)のブロックに分割する。すなわち、分割部102は、分割パターンを選択する。この可変サイズのブロックは、符号化ユニット(CU)、予測ユニット(PU)あるいは変換ユニット(TU)と呼ばれることがある。なお、種々の実装例では、CU、PUおよびTUは区別される必要はなく、ピクチャ内の一部またはすべてのブロックがCU、PU、またはTUの処理単位となってもよい。
図10は、実施の形態におけるブロック分割の一例を示す図である。図10において、実線は四分木ブロック分割によるブロック境界を表し、破線は二分木ブロック分割によるブロック境界を表す。
ここでは、ブロック10は、128x128画素の正方形ブロックである。このブロック10は、まず、4つの64x64画素の正方形ブロックに分割される(四分木ブロック分割)。
左上の64x64画素の正方形ブロックは、さらに、それぞれ32x64画素からなる2つの矩形ブロックに垂直に分割され、左の32x64画素の矩形ブロックは、さらに、それぞれ16x64画素からなる2つの矩形ブロックに垂直に分割される(二分木ブロック分割)。その結果、左上の64x64画素の正方形ブロックは、2つの16x64画素の矩形ブロック11および12と、32x64画素の矩形ブロック13とに分割される。
右上の64x64画素の正方形ブロックは、それぞれ64x32画素からなる2つの矩形ブロック14および15に水平に分割される(二分木ブロック分割)。
左下の64x64画素の正方形ブロックは、それぞれ32x32画素からなる4つの正方形ブロックに分割される(四分木ブロック分割)。それぞれ32x32画素からなる4つの正方形ブロックのうち左上のブロックおよび右下のブロックは、さらに分割される。左上の32x32画素の正方形ブロックは、それぞれ16x32画素からなる2つの矩形ブロックに垂直に分割され、右の16x32画素からなる矩形ブロックは、さらに、それぞれ16x16画素からなる2つの正方形ブロックに水平に分割される(二分木ブロック分割)。右下の32x32画素からなる正方形ブロックは、それぞれ32x16画素からなる2つの矩形ブロックに水平に分割される(二分木ブロック分割)。その結果、左下の64x64画素の正方形ブロックは、16x32画素の矩形ブロック16と、それぞれ16x16画素の2つの正方形ブロック17および18と、それぞれ32x32画素の2つの正方形ブロック19および20と、それぞれ32x16画素の2つの矩形ブロック21および22とに分割される。
右下の64x64画素からなるブロック23は分割されない。
以上のように、図10では、ブロック10は、再帰的な四分木および二分木ブロック分割に基づいて、13個の可変サイズのブロック11~23に分割される。このような分割は、QTBT(quad-tree plus binary tree)分割と呼ばれることがある。
なお、図10では、1つのブロックが4つまたは2つのブロックに分割されていたが(四分木または二分木ブロック分割)、分割はこれらに限定されない。例えば、1つのブロックが3つのブロックに分割されてもよい(三分木ブロック分割)。このような三分木ブロック分割を含む分割は、MBT(multi type tree)分割と呼ばれることがある。
図11は、分割部102の機能構成の一例を示す図である。図11に示すように、分割部102は、ブロック分割決定部102aを備えていてもよい。ブロック分割決定部102aは、一例として以下の処理を行ってもよい。
ブロック分割決定部102aは、例えば、ブロックメモリ118またはフレームメモリ122からブロック情報を収集し、そのブロック情報に基づいて上述の分割パターンを決定する。分割部102は、その分割パターンにしたがって原画像を分割し、その分割によって得られる1つ以上のブロックを減算部104に出力する。
また、ブロック分割決定部102aは、例えば、上述の分割パターンを示すパラメータを変換部106、逆変換部114、イントラ予測部124、インター予測部126およびエントロピー符号化部110に出力する。変換部106は、そのパラメータに基づいて予測残差を変換してもよく、イントラ予測部124およびインター予測部126は、そのパラメータに基づいて予測画像を生成してもよい。また、エントロピー符号化部110は、そのパラメータに対してエントロピー符号化を行ってもよい。
分割パターンに関するパラメータは、一例として以下のようにストリームに書き込まれてもよい。
図12は、分割パターンの例を示す図である。分割パターンには、例えばブロックを水平方向および垂直方向のそれぞれに2つに分割するような4分割(QT)と、ブロックを1対2対1の比率で同じ方向に分割するような3分割(HTまたはVT)と、ブロックを1対1の比率で同じ方向に分割するような2分割(HBまたはVB)と、分割しない(NS)と、がある。
なお、4分割および分割しない場合には、分割パターンは、ブロック分割方向を持たず、2分割および3分割の場合には、分割パターンは、分割方向情報を持っている。
図13Aおよび図13Bは、分割パターンのシンタックスツリーの一例を示す図である。図13Aの例では、まず、はじめに、分割を行うか否かを示す情報(S:Splitフラグ)が存在し、次に、4分割を行うか否かを示す情報(QT:QTフラグ)が存在する。次に3分割を行うか2分割を行うかを示す情報(TT:TTフラグまたはBT:BTフラグ)が存在し、最後に分割方向を示す情報(Ver:VerticalフラグまたはHor:Horizontalフラグ)が存在している。なお、このような分割パターンによる分割によって得られる1つ以上のブロックのそれぞれに対し、さらに同様の処理で分割を繰り返し適用してもよい。すなわち、一例として、分割を行うか否か、4分割を行うか否か、分割方法は水平方向か垂直方向か、および3分割を行うか2分割を行うか、の判定を再帰的に実施し、実施した判定結果を図13Aに示すシンタックスツリーに開示した符号化順序に従ってストリームに符号化してもよい。
また、図13Aに示すシンタックスツリーでは、S、QT、TT、Verの順でそれらの情報が配置されているが、S、QT、Ver、BTの順でそれらの情報が配置されていてもよい。つまり、図13Bの例では、まず、分割を行うか否かを示す情報(S:Splitフラグ)が存在し、次に、4分割を行うか否かを示す情報(QT:QTフラグ)が存在する。次に分割方向を示す情報(Ver:VerticalフラグまたはHor:Horizontalフラグ)が存在し、最後に2分割を行うか3分割を行うかを示す情報(BT:BTフラグまたはTT:TTフラグ)が存在している。
なお、ここで説明した分割パターンは一例であり、説明した分割パターン以外のものを用いてもよく、説明した分割パターンの一部のみを用いてもよい。
[減算部]
減算部104は、分割部102から入力され、分割部102によって分割されたブロック単位で、原画像から予測画像(予測制御部128から入力される予測画像)を減算する。つまり、減算部104は、カレントブロックの予測残差を算出する。そして、減算部104は、算出された予測残差を変換部106に出力する。
原画像は、符号化装置100の入力信号であり、例えば、動画像を構成する各ピクチャの画像を表す信号(例えば輝度(luma)信号および2つの色差(chroma)信号)である。
[変換部]
変換部106は、空間領域の予測残差を周波数領域の変換係数に変換し、変換係数を量子化部108に出力する。具体的には、変換部106は、例えば空間領域の予測残差に対して予め定められた離散コサイン変換(DCT)または離散サイン変換(DST)を行う。
なお、変換部106は、複数の変換タイプの中から適応的に変換タイプを選択し、選択された変換タイプに対応する変換基底関数(transform basis function)を用いて、予測残差を変換係数に変換してもよい。このような変換は、EMT(explicit multiple core transform)またはAMT(adaptive multiple transform)と呼ばれることがある。また、変換基底関数は、単に基底と呼ばれることがある。
複数の変換タイプは、例えば、DCT-II、DCT-V、DCT-VIII、DST-IおよびDST-VIIを含む。なお、これらの変換タイプは、DCT2、DCT5、DCT8、DST1およびDST7とそれぞれ表記されてもよい。図14は、各変換タイプに対応する変換基底関数を示す表である。図14においてNは入力画素の数を示す。これらの複数の変換タイプの中からの変換タイプの選択は、例えば、予測の種類(イントラ予測およびインター予測など)に依存してもよいし、イントラ予測モードに依存してもよい。
このようなEMTまたはAMTを適用するか否かを示す情報(例えばEMTフラグまたはAMTフラグと呼ばれる)と、選択された変換タイプを示す情報とは、通常、CUレベルで信号化される。なお、これらの情報の信号化は、CUレベルに限定される必要はなく、他のレベル(例えば、シーケンスレベル、ピクチャレベル、スライスレベル、ブリックレベルまたはCTUレベル)であってもよい。
また、変換部106は、変換係数(すなわち変換結果)を再変換してもよい。このような再変換は、AST(adaptive secondary transform)またはNSST(non-separable secondary transform)と呼ばれることがある。例えば、変換部106は、イントラ予測残差に対応する変換係数のブロックに含まれるサブブロック(例えば4x4画素のサブブロック)ごとに再変換を行う。NSSTを適用するか否かを示す情報と、NSSTに用いられる変換行列に関する情報とは、通常、CUレベルで信号化される。なお、これらの情報の信号化は、CUレベルに限定される必要はなく、他のレベル(例えば、シーケンスレベル、ピクチャレベル、スライスレベル、ブリックレベルまたはCTUレベル)であってもよい。
変換部106には、Separableな変換と、Non-Separableな変換とが適用されてもよい。Separableな変換とは、入力の次元の数だけ方向ごとに分離して複数回変換を行う方式であり、Non-Separableな変換とは、入力が多次元であった際に2つ以上の次元をまとめて1次元とみなして、まとめて変換を行う方式である。
例えば、Non-Separableな変換の一例として、入力が4×4画素のブロックであった場合にはそれを16個の要素を持ったひとつの配列とみなし、その配列に対して16×16の変換行列で変換処理を行うようなものが挙げられる。
また、Non-Separableな変換のさらなる例では、4×4画素の入力ブロックを16個の要素を持ったひとつの配列とみなした後に、その配列に対してGivens回転を複数回行うような変換(Hypercube Givens Transform)が行われてもよい。
変換部106での変換では、CU内の領域に応じて周波数領域に変換する変換基底関数の変換タイプを切替えることもできる。一例として、SVT(Spatially Varying Transform)がある。
図15は、SVTの一例を示す図である。
SVTでは、図15に示すように、水平方向あるいは垂直方向にCUを2等分し、いずれか一方の領域のみ周波数領域への変換を行う。変換タイプは、領域毎に設定されてもよく、例えば、DST7とDCT8が用いられる。例えば、CUが垂直方向に2等分されることによって得られる2つの領域のうち、位置0の領域に対してはDST7およびDCT8が用いられ得る。または、その2つの領域のうち、位置1の領域に対してはDST7が用いられる。同様に、CUが水平方向に2等分されることによって得られる2つの領域のうち、位置0の領域に対してはDST7およびDCT8が用いられる。または、その2つの領域のうち、位置1の領域に対してはDST7が用いられる。このような図15に示す例では、CU内の2つの領域のうち、どちらか一方のみ変換が行われ、もう一方には変換が行われないが、2つの領域のそれぞれに対して変換を行ってもよい。また、分割方法には、2等分だけでなく、4等分もあってもよい。また、分割方法を示す情報を符号化してCU分割と同様にシグナリングするなど、より柔軟にすることもできる。なお、SVTは、SBT(Sub-block Transform)と呼ぶこともある。
前述したAMTおよびEMTは、MTS(Multiple Transform Selection)と呼ばれてもよい。MTSを適用する場合は、DST7またはDCT8などの変換タイプを選択でき、選択された変換タイプを示す情報は、CU毎にインデックス情報として符号化されてもよい。一方で、CUの形状に基づいて、インデックス情報を符号化することなく直交変換に使用する変換タイプを選択する処理として、IMTS(Implicit MTS)と呼ばれる処理がある。IMTSを適用する場合は、例えばCUの形状が矩形であれば、矩形の短辺側はDST7、長辺側はDCT2を用いて、それぞれ直交変換する。また例えばCUの形状が正方形の場合は、シーケンス内でMTSが有効であればDCT2を用い、MTSが無効であればDST7を用いて直交変換を行う。DCT2およびDST7は一例であり、他の変換タイプを用いてもよいし、用いる変換タイプの組合せを異なる組合せとすることも可能である。IMTSは、イントラ予測のブロックでのみ使用可としてもよいし、イントラ予測のブロックおよびインター予測のブロック共に使用可としてもよい。
以上では、直交変換に用いる変換タイプを選択的に切り替える選択処理として、MTS、SBT、およびIMTSの3つの処理について説明したが、3つの選択処理は全て有効としてもよいし、選択的に一部の選択処理のみを有効としてもよい。個々の選択処理を有効とするかどうかは、SPSなどヘッダ内のフラグ情報などで識別できる。例えば、3つの選択処理が全て有効であれば、CU単位で、3つの選択処理から1つを選択して直交変換を行う。なお、変換タイプを選択的に切り替える選択処理は、以下の4つの機能[1]~[4]の少なくとも1つの機能が実現できれば、上記3つの選択処理とは異なる選択処理を用いてもよく、上記3つの選択処理のそれぞれを別の処理に置き換えてもよい。機能[1]は、CU内の全範囲を直交変換して、変換に用いた変換タイプを示す情報を符号化する機能である。機能[2]は、CUの全範囲を直交変換して、変換タイプを示す情報は符号化せずに所定のルールに基づいて変換タイプを決定する機能である。機能[3]は、CUの一部分の領域を直交変換して、変換に用いた変換タイプを示す情報を符号化する機能である。機能[4]は、CUの一部分の領域を直交変換して、変換に用いた変換タイプを示す情報は符号化せずに所定のルールに基づいて変換タイプを決定する機能などである。
なお、MTS、IMTS、およびSBTのそれぞれの適用の有無は処理単位ごとに決定されてもよい。例えば、シーケンス単位、ピクチャ単位、ブリック単位、スライス単位、CTU単位、またはCU単位で適用の有無を決定してもよい。
なお、本開示における変換タイプを選択的に切り替えるツールは、変換処理に用いる基底を適応的に選択する方法、選択処理、または基底を選択するプロセスと言い換えてもよい。また、変換タイプを選択的に切り替えるツールは、変換タイプを適応的に選択するモードと言い換えてもよい。
図16は、変換部106による処理の一例を示すフローチャートである。
例えば、変換部106は、直交変換を行うか否かを判定する(ステップSt_1)。ここで、変換部106は、直交変換を行うと判定すると(ステップSt_1のYes)、複数の変換タイプから、直交変換に用いる変換タイプを選択する(ステップSt_2)。次に、変換部106は、その選択した変換タイプをカレントブロックの予測残差に適用することによって直交変換を行う(ステップSt_3)。そして、変換部106は、その選択した変換タイプを示す情報をエントロピー符号化部110に出力することによって、その情報を符号化させる(ステップSt_4)。一方、変換部106は、直交変換を行わないと判定すると(ステップSt_1のNo)、直交変換を行わないことを示す情報をエントロピー符号化部110に出力することによって、その情報を符号化させる(ステップSt_5)。なお、ステップSt_1における直交変換を行うか否かの判定は、例えば、変換ブロックのサイズ、CUに適用された予測モードなどに基づいて判定されてもよい。また、直交変換に用いる変換タイプを示す情報は符号化されず、予め規定された変換タイプを用いて直交変換を行ってもよい。
図17は、変換部106による処理の他の例を示すフローチャートである。なお、図17に示す例は、図16に示す例と同様、直交変換に用いる変換タイプを選択的に切り替える方法を適用する場合の直交変換の例である。
一例として、第1の変換タイプ群は、DCT2、DST7およびDCT8を含んでもよい。また一例として、第2の変換タイプ群はDCT2を含んでいてもよい。また、第1の変換タイプ群と第2の変換タイプ群とに含まれる変換タイプは、一部が重複していてもよいし、全て異なる変換タイプであってもよい。
具体的には、変換部106は、変換サイズが所定値以下であるか否かを判定する(ステップSu_1)。ここで、所定値以下であると判定すると(ステップSu_1のYes)、変換部106は、第1の変換タイプ群に含まれる変換タイプを用いてカレントブロックの予測残差を直交変換する(ステップSu_2)。次に、変換部106は、第1の変換タイプ群に含まれる1つ以上の変換タイプのうち、いずれの変換タイプを用いるかを示す情報をエントロピー符号化部110に出力することによって、その情報を符号化させる(ステップSu_3)。一方、変換部106は、変換サイズが所定値以下ではないと判定すると(ステップSu_1のNo)、第2の変換タイプ群を用いてカレントブロックの予測残差を直交変換する(ステップSu_4)。
ステップSu_3において、直交変換に用いられる変換タイプを示す情報は、カレントブロックの垂直方向に適用する変換タイプおよび水平方向に適用する変換タイプの組合せを示す情報であってもよい。また、第1の変換タイプ群は1つの変換タイプのみを含んでいてもよく、直交変換に用いられる変換タイプを示す情報は符号化されなくともよい。第2の変換タイプ群が複数の変換タイプを含んでいてもよく、第2の変換タイプ群に含まれる1つ以上の変換タイプのうち、直交変換に用いられる変換タイプを示す情報が符号化されてもよい。
また、変換サイズのみに基づいて変換タイプが決定されてもよい。なお、変換サイズに基づいて、直交変換に用いる変換タイプを決定する処理であれば、変換サイズが所定値以下であるか否かの判定に限定されない。
[量子化部]
量子化部108は、変換部106から出力された変換係数を量子化する。具体的には、量子化部108は、カレントブロックの複数の変換係数を所定の走査順序で走査し、走査された変換係数に対応する量子化パラメータ(QP)に基づいて当該変換係数を量子化する。そして、量子化部108は、カレントブロックの量子化された複数の変換係数(以下、量子化係数という)をエントロピー符号化部110および逆量子化部112に出力する。
所定の走査順序は、変換係数の量子化/逆量子化のための順序である。例えば、所定の走査順序は、周波数の昇順(低周波から高周波の順)または降順(高周波から低周波の順)で定義される。
量子化パラメータ(QP)とは、量子化ステップ(量子化幅)を定義するパラメータである。例えば、量子化パラメータの値が増加すれば量子化ステップも増加する。つまり、量子化パラメータの値が増加すれば量子化係数の誤差(量子化誤差)が増大する。
また、量子化には、量子化マトリックスが使用される場合がある。例えば、4x4および8x8などの周波数変換サイズと、イントラ予測およびインター予測などの予測モードと、輝度および色差などの画素成分とに対応して数種類の量子化マトリックスが使われる場合がある。なお、量子化とは、予め定められた間隔でサンプリングした値を予め定められたレベルに対応づけてデジタル化することをいい、この技術分野では、丸め、ラウンディング、またはスケーリングといった表現が用いられる場合もある。
量子化マトリックスを使用する方法として、符号化装置100側で直接設定された量子化マトリックスを使用する方法と、デフォルトの量子化マトリックス(デフォルトマトリックス)を使用する方法とがある。符号化装置100側では、量子化マトリックスを直接設定することにより、画像の特徴に応じた量子化マトリックスを設定することができる。しかし、この場合、量子化マトリックスの符号化によって、符号量が増加するというデメリットがある。なお、デフォルトの量子化マトリックスまたは符号化された量子化マトリックスをそのまま用いるのではなく、デフォルトの量子化マトリックスまたは符号化された量子化マトリックスに基づいてカレントブロックの量子化に用いる量子化マトリックスを生成してもよい。
一方、量子化マトリックスを使用せず、高域成分の係数も低域成分の係数も同じように量子化する方法もある。なお、この方法は、係数が全て同じ値である量子化マトリックス(フラットなマトリックス)を用いる方法に等しい。
量子化マトリックスは、例えば、シーケンスレベル、ピクチャレベル、スライスレベル、ブリックレベルまたはCTUレベルで符号化されてもよい。
量子化部108は、量子化マトリックスを用いる場合には、例えば、変換係数毎に、量子化パラメータなどから求まる量子化幅などを、量子化マトリックスの値を用いてスケーリングする。量子化マトリックスを用いずに行う量子化処理とは、量子化パラメータなどから求まる量子化幅に基づいて変換係数を量子化する処理であってもよい。なお、量子化マトリックスを用いずに行う量子化処理において、量子化幅に対して、ブロック内の全変換係数に対して共通となる所定の値を乗算してもよい。
図18は、量子化部108の機能構成の一例を示すブロック図である。
量子化部108は、例えば、差分量子化パラメータ生成部108aと、予測量子化パラメータ生成部108bと、量子化パラメータ生成部108cと、量子化パラメータ記憶部108dと、量子化処理部108eとを備える。
図19は、量子化部108による量子化の一例を示すフローチャートである。
一例として、量子化部108は、図19に示すフローチャートに基づいてCUごとに量子化を実施してもよい。具体的には、量子化パラメータ生成部108cは、量子化を行うか否かを判定する(ステップSv_1)。ここで、量子化を行うと判定すると(ステップSv_1のYes)、量子化パラメータ生成部108cは、カレントブロックの量子化パラメータを生成し(ステップSv_2)、その量子化パラメータを量子化パラメータ記憶部108dに格納する(ステップSv_3)。
次に、量子化処理部108eは、ステップSv_2で生成された量子化パラメータを用いてカレントブロックの変換係数を量子化する(ステップSv_4)。そして、予測量子化パラメータ生成部108bは、カレントブロックとは異なる処理単位の量子化パラメータを量子化パラメータ記憶部108dから取得する(ステップSv_5)。予測量子化パラメータ生成部108bは、その取得した量子化パラメータに基づいて、カレントブロックの予測量子化パラメータを生成する(ステップSv_6)。差分量子化パラメータ生成部108aは、量子化パラメータ生成部108cによって生成された、カレントブロックの量子化パラメータと、予測量子化パラメータ生成部108bによって生成された、カレントブロックの予測量子化パラメータとの差分を算出する(ステップSv_7)。この差分の算出によって、差分量子化パラメータが生成される。差分量子化パラメータ生成部108aは、その差分量子化パラメータをエントロピー符号化部110に出力することによって、その差分量子化パラメータを符号化させる(ステップSv_8)。
なお、差分量子化パラメータは、シーケンスレベル、ピクチャレベル、スライスレベル、ブリックレベルまたはCTUレベルで符号化されてもよい。また、量子化パラメータの初期値を、シーケンスレベル、ピクチャレベル、スライスレベル、ブリックレベルまたはCTUレベルで符号化してもよい。このとき、量子化パラメータは量子化パラメータの初期値と差分量子化パラメータとを用いて生成されてもよい。
なお、量子化部108は、複数の量子化器を備えていてもよく、複数の量子化方法から選択した量子化方法を用いて変換係数を量子化するdependent quantizationを適用してもよい。
[エントロピー符号化部]
図20は、エントロピー符号化部110の機能構成の一例を示すブロック図である。
エントロピー符号化部110は、量子化部108から入力された量子化係数と、予測パラメータ生成部130から入力された予測パラメータとに対してエントロピー符号化を行うことによってストリームを生成する。そのエントロピー符号化には、例えば、CABAC(Context-based Adaptive Binary Arithmetic Coding)が用いられる。具体的には、エントロピー符号化部110は、例えば、二値化部110aと、コンテキスト制御部110bと、二値算術符号化部110cとを備える。二値化部110aは、量子化係数および予測パラメータなどの多値信号を二値信号に変換する二値化を行う。二値化の方式には、例えば、Truncated Rice Binarization、Exponential Golomb codes、Fixed Length Binarizationなどがある。コンテキスト制御部110bは、シンタックス要素の特徴または周囲の状況に応じたコンテキスト値、すなわち二値信号の発生確率を導出する。このコンテキスト値の導出方法には、例えば、バイパス、シンタックス要素参照、上・左隣接ブロック参照、階層情報参照、および、その他などがある。二値算術符号化部110cは、その導出されたコンテキスト値を用いて二値化信号に対して算術符号化を行う。
図21は、エントロピー符号化部110におけるCABACの流れを示す図である。
まず、エントロピー符号化部110におけるCABACでは、初期化が行われる。この初期化では、二値算術符号化部110cにおける初期化と、初期コンテキスト値の設定とが行われる。そして、二値化部110aおよび二値算術符号化部110cは、例えばCTUの複数の量子化係数のそれぞれに対して順に、二値化と算術符号化とを実行する。このとき、コンテキスト制御部110bは、算術符号化が行われるたびにコンテキスト値の更新を行う。そして、コンテキスト制御部110bは、後処理として、コンテキスト値を退避させる。この退避されたコンテキスト値は、例えば次のCTUに対するコンテキスト値の初期値のために用いられる。
[逆量子化部]
逆量子化部112は、量子化部108から入力された量子化係数を逆量子化する。具体的には、逆量子化部112は、カレントブロックの量子化係数を所定の走査順序で逆量子化する。そして、逆量子化部112は、カレントブロックの逆量子化された変換係数を逆変換部114に出力する。
[逆変換部]
逆変換部114は、逆量子化部112から入力された変換係数を逆変換することにより予測残差を復元する。具体的には、逆変換部114は、変換係数に対して、変換部106による変換に対応する逆変換を行うことにより、カレントブロックの予測残差を復元する。そして、逆変換部114は、復元された予測残差を加算部116に出力する。
なお、復元された予測残差は、通常、量子化により情報が失われているので、減算部104が算出した予測誤差と一致しない。すなわち、復元された予測残差には、通常、量子化誤差が含まれている。
[加算部]
加算部116は、逆変換部114から入力された予測残差と予測制御部128から入力された予測画像とを加算することによりカレントブロックを再構成する。その結果、再構成画像が生成される。そして、加算部116は、再構成画像をブロックメモリ118およびループフィルタ部120に出力する。
[ブロックメモリ]
ブロックメモリ118は、例えば、イントラ予測で参照されるブロックであってカレントピクチャ内のブロックを格納するための記憶部である。具体的には、ブロックメモリ118は、加算部116から出力された再構成画像を格納する。
[フレームメモリ]
フレームメモリ122は、例えば、インター予測に用いられる参照ピクチャを格納するための記憶部であり、フレームバッファと呼ばれることもある。具体的には、フレームメモリ122は、ループフィルタ部120によってフィルタされた再構成画像を格納する。
[ループフィルタ部]
ループフィルタ部120は、加算部116から出力される再構成画像にループフィルタ処理を施し、そのフィルタ処理された再構成画像をフレームメモリ122に出力する。ループフィルタとは、符号化ループ内で用いられるフィルタ(インループフィルタ)であり、例えば、アダプティブループフィルタ(ALF)、デブロッキング・フィルタ(DFまたはDBF)、およびサンプルアダプティブオフセット(SAO)などを含む。
図22は、ループフィルタ部120の機能構成の一例を示すブロック図である。
ループフィルタ部120は、例えば図22に示すように、デブロッキング・フィルタ処理部120aと、SAO処理部120bと、ALF処理部120cとを備える。デブロッキング・フィルタ処理部120aは、再構成画像に対して上述のデブロッキング・フィルタ処理を施す。SAO処理部120bは、デブロッキング・フィルタ処理後の再構成画像に対して上述のSAO処理を施す。また、ALF処理部120cは、SAO処理後の再構成画像に対して上述のALF処理を適用する。ALFおよびデブロッキング・フィルタの詳細については、後述する。SAO処理は、リンギング(エッジ周辺で画素値が波打つように歪む現象)の低減と、画素値のずれの補正とによって、画質を改善する処理である。このSAO処理には、例えば、エッジ・オフセット処理およびバンド・オフセット処理などがある。なお、ループフィルタ部120は、図22に開示した全ての処理部を備えていなくてもよく、一部の処理部のみを備えていてもよい。また、ループフィルタ部120は、図22に開示した処理順とは異なる順番で上述の各処理を行う構成であってもよい。
[ループフィルタ部 > アダプティブループフィルタ]
ALFでは、符号化歪みを除去するための最小二乗誤差フィルタが適用され、例えばカレントブロック内の2x2画素のサブブロックごとに、局所的な勾配(gradient)の方向および活性度(activity)に基づいて複数のフィルタの中から選択された1つのフィルタが適用される。
具体的には、まず、サブブロック(例えば2x2画素のサブブロック)が複数のクラス(例えば15または25クラス)に分類される。サブブロックの分類は、例えば、勾配の方向および活性度に基づいて行われる。具体的な例では、勾配の方向値D(例えば0~2または0~4)と勾配の活性値A(例えば0~4)とを用いて分類値C(例えばC=5D+A)が算出される。そして、分類値Cに基づいて、サブブロックが複数のクラスに分類される。
勾配の方向値Dは、例えば、複数の方向(例えば水平、垂直および2つの対角方向)の勾配を比較することにより導出される。また、勾配の活性値Aは、例えば、複数の方向の勾配を加算し、加算結果を量子化することにより導出される。
このような分類の結果に基づいて、複数のフィルタの中からサブブロックのためのフィルタが決定される。
ALFで用いられるフィルタの形状としては例えば円対称形状が利用される。図23A~図23Cは、ALFで用いられるフィルタの形状の複数の例を示す図である。図23Aは、5x5ダイヤモンド形状フィルタを示し、図23Bは、7x7ダイヤモンド形状フィルタを示し、図23Cは、9x9ダイヤモンド形状フィルタを示す。フィルタの形状を示す情報は、通常、ピクチャレベルで信号化される。なお、フィルタの形状を示す情報の信号化は、ピクチャレベルに限定される必要はなく、他のレベル(例えば、シーケンスレベル、スライスレベル、ブリックレベル、CTUレベルまたはCUレベル)であってもよい。
ALFのオン/オフは、例えば、ピクチャレベルまたはCUレベルで決定されてもよい。例えば、輝度についてはCUレベルでALFを適用するか否かが決定されてもよく、色差についてはピクチャレベルでALFを適用するか否かが決定されてもよい。ALFのオン/オフを示す情報は、通常、ピクチャレベルまたはCUレベルで信号化される。なお、ALFのオン/オフを示す情報の信号化は、ピクチャレベルまたはCUレベルに限定される必要はなく、他のレベル(例えば、シーケンスレベル、スライスレベル、ブリックレベルまたはCTUレベル)であってもよい。
また、上述のように、複数のフィルタの中から1つのフィルタが選択されてサブブロックにALF処理が施される。その複数のフィルタ(例えば15または25までのフィルタ)のそれぞれについて、そのフィルタに用いられる複数の係数からなる係数セットは、通常、ピクチャレベルで信号化される。なお、係数セットの信号化は、ピクチャレベルに限定される必要はなく、他のレベル(例えば、シーケンスレベル、スライスレベル、ブリックレベル、CTUレベル、CUレベルまたはサブブロックレベル)であってもよい。
[ループフィルタ > クロスコンポーネントアダプティブループフィルタ(Cross Component Adaptive Loop Filter)]
図23Dは、Yサンプル(第1成分)がCbのCCALFおよびCrのCCALF(第1成分とは異なる複数の成分)に使用される例を示す図である。図23Eは、ダイヤモンド形状フィルタを示す図である。
CC-ALFの1つの例は、線形のダイヤモンド形フィルタ(図23D、図23E)を各色差コンポーネントの輝度チャネルに適用することによって動作する。例えば、フィルタ係数はAPSで送信され、2^10のファクターでスケーリングされ、固定小数点表現のために丸められる。フィルタの適用は、可変ブロックサイズで制御され、サンプルのブロックごとに受信されるコンテキスト符号化済みのフラグで通知される。ブロックサイズとCC-ALF有効化フラグは、各色差コンポーネントのスライスレベルで受信される。CC-ALFのシンタックスとセマンティクスは、Appendixにおいて提供される。寄書では、(色差サンプルにおいて)16x16、32x32、64x64、128x128のブロックサイズがサポートされている。
[ループフィルタ > 結合色差クロスコンポーネントアダプティブループフィルタ(Joint Chroma Cross Component Adaptive Loop Filter)]
図23Fは、JC-CCALFの例を示す図である。図23Gは、JC-CCALFのweight_index候補の例を示す図である。
JC-CCALFの1つの例は、1つのCCALFフィルタのみを使用して、1つの色成分のみの色差調整信号として1つのCCALFフィルタ出力を生成し、同じ色差調整信号の適切に重み付けされたバージョンを他の色成分に適用する。このようにして、既存のCCALFの複雑さがおおよそ半分になる。
重み値は、符号(sign)フラグ及び重みインデックスへ符号化される。重みインデックス(weight_indexと示す)は、3ビットに符号化され、JC-CCALFウェイトJcCcWeightの大きさを指定する。0と同じにすることはできない。JcCcWeightの大きさは次のように決定される。
・weight_indexが4以下の場合、JcCcWeightはweight_index>>2と等しい。
・それ以外の場合、JcCcWeightは4/(weight_index-4)に等しい。
Cb及びCrのALFフィルタリングのブロックレベルのオン/オフ制御は別々である。これは、CCALFと同じであり、ブロックレベルのオン/オフ制御フラグの2つの個別のセットが符号化される。ここでは、CCALFとは異なり、Cb、Crのオン/オフ制御ブロックサイズは同じであるため、1つのブロックサイズ変数のみが符号化される。
[ループフィルタ部 > デブロッキング・フィルタ]
デブロッキング・フィルタ処理では、ループフィルタ部120は、再構成画像のブロック境界にフィルタ処理を行うことによって、そのブロック境界に生じる歪みを減少させる。
図24は、デブロッキング・フィルタ処理部120aの詳細な構成の一例を示すブロック図である。
デブロッキング・フィルタ処理部120aは、例えば、境界判定部1201と、フィルタ判定部1203と、フィルタ処理部1205と、処理判定部1208と、フィルタ特性決定部1207と、スイッチ1202、1204および1206とを備える。
境界判定部1201は、デブロッキング・フィルタ処理される画素(すなわち対象画素)がブロック境界付近に存在しているか否かを判定する。そして、境界判定部1201は、その判定結果をスイッチ1202および処理判定部1208に出力する。
スイッチ1202は、対象画素がブロック境界付近に存在していると境界判定部1201によって判定された場合には、フィルタ処理前の画像を、スイッチ1204に出力する。逆に、スイッチ1202は、境界判定部1201によって対象画素がブロック境界付近に存在していないと判定された場合には、フィルタ処理前の画像をスイッチ1206に出力する。なお、フィルタ処理前の画像は、対象画素と、その対象画素の周辺にある少なくとも1つの周辺画素からなる画像である。
フィルタ判定部1203は、対象画素の周辺にある少なくとも1つの周辺画素の画素値に基づいて、対象画素に対してデブロッキング・フィルタ処理を行うか否かを判定する。そして、フィルタ判定部1203は、その判定結果をスイッチ1204および処理判定部1208に出力する。
スイッチ1204は、対象画素にデブロッキング・フィルタ処理を行うとフィルタ判定部1203によって判定された場合には、スイッチ1202を介して取得したフィルタ処理前の画像を、フィルタ処理部1205に出力する。逆に、スイッチ1204は、対象画素にデブロッキング・フィルタ処理を行わないとフィルタ判定部1203によって判定された場合には、スイッチ1202を介して取得したフィルタ処理前の画像をスイッチ1206に出力する。
フィルタ処理部1205は、スイッチ1202および1204を介してフィルタ処理前の画像を取得した場合には、フィルタ特性決定部1207によって決定されたフィルタ特性を有するデブロッキング・フィルタ処理を、対象画素に対して実行する。そして、フィルタ処理部1205は、そのフィルタ処理後の画素をスイッチ1206に出力する。
スイッチ1206は、処理判定部1208による制御に応じて、デブロッキング・フィルタ処理されていない画素と、フィルタ処理部1205によってデブロッキング・フィルタ処理された画素とを選択的に出力する。
処理判定部1208は、境界判定部1201およびフィルタ判定部1203のそれぞれの判定結果に基づいて、スイッチ1206を制御する。つまり、処理判定部1208は、対象画素がブロック境界付近に存在していると境界判定部1201によって判定され、かつ、対象画素にデブロッキング・フィルタ処理を行うとフィルタ判定部1203によって判定された場合には、デブロッキング・フィルタ処理された画素をスイッチ1206から出力させる。また、上述の場合以外では、処理判定部1208は、デブロッキング・フィルタ処理されていない画素をスイッチ1206から出力させる。このような画素の出力が繰り返し行われることによって、フィルタ処理後の画像がスイッチ1206から出力される。なお、図24に示す構成は、デブロッキング・フィルタ処理部120aにおける構成の一例であって、デブロッキング・フィルタ処理部120aは、その他の構成を有していてもよい。
図25は、ブロック境界に対して対称なフィルタ特性を有するデブロッキング・フィルタの例を示す図である。
デブロッキング・フィルタ処理では、例えば、画素値と量子化パラメータを用いて、特性の異なる2つのデブロッキング・フィルタ、すなわちストロングフィルタおよびウィークフィルタのうちの何れか1つが選択される。ストロングフィルタでは、図25に示すように、ブロック境界を挟んで画素p0~p2と、画素q0~q2とが存在する場合、画素q0~q2のそれぞれの画素値は、以下の式に示す演算を行うことによって、画素値q’0~q’2に変更される。
q’0=(p1+2×p0+2×q0+2×q1+q2+4)/8
q’1=(p0+q0+q1+q2+2)/4
q’2=(p0+q0+q1+3×q2+2×q3+4)/8
なお、上述の式において、p0~p2およびq0~q2は、画素p0~p2および画素q0~q2のそれぞれの画素値である。また、q3は、画素q2にブロック境界と反対側に隣接する画素q3の画素値である。また、上述の各式の右辺において、デブロッキング・フィルタ処理に用いられる各画素の画素値に乗算される係数が、フィルタ係数である。
さらに、デブロッキング・フィルタ処理では、演算後の画素値が閾値を超えて変化しないように、クリップ処理が行われてもよい。このクリップ処理では、上述の式による演算後の画素値は、量子化パラメータから決定される閾値を用いて、「演算前の画素値±2×閾値」にクリップされる。これにより、過度な平滑化を防ぐことができる。
図26は、デブロッキング・フィルタ処理が行われるブロック境界の一例を説明するための図である。図27は、BS値の一例を示す図である。
デブロッキング・フィルタ処理が行われるブロック境界は、例えば、図26で示すような8×8画素のブロックのCU、PUまたはTUの境界である。デブロッキング・フィルタ処理は、例えば、4行または4列を単位に行われる。まず、図26に示すブロックPおよびブロックQに対して、図27のようにBs(Boundary Strength)値が決定される。
図27のBs値にしたがい、同一の画像に属するブロック境界であっても、異なる強さのデブロッキング・フィルタ処理を行うか否かが決定されてもよい。色差信号に対するデブロッキング・フィルタ処理は、Bs値が2の場合に行われる。輝度信号に対するデブロッキング・フィルタ処理は、Bs値が1以上であって、所定の条件が満たされた場合に行われる。なお、Bs値の判定条件は図27に示したものに限定されず、他のパラメータに基づいて決定されてもよい。
[予測部(イントラ予測部・インター予測部・予測制御部)]
図28は、符号化装置100の予測部で行われる処理の一例を示すフローチャートである。なお、一例として予測部は、イントラ予測部124、インター予測部126、および予測制御部128の全てまたは一部の構成要素からなる。予測処理部は、例えばイントラ予測部124およびインター予測部126を含む。
予測部は、カレントブロックの予測画像を生成する(ステップSb_1)。なお、予測画像には、例えばイントラ予測画像(イントラ予測信号)またはインター予測画像(インター予測信号)がある。具体的には、予測部は、他のブロックに対する予測画像の生成、予測残差の生成、量子化係数の生成、予測残差の復元、および予測画像の加算が行われることによって既に得られている再構成画像を用いて、カレントブロックの予測画像を生成する。
再構成画像は、例えば、参照ピクチャの画像であってもよいし、カレントブロックを含むピクチャであるカレントピクチャ内の符号化済みのブロック(すなわち、上述の他のブロック)の画像であってもよい。カレントピクチャ内の符号化済みのブロックは、例えばカレントブロックの隣接ブロックである。
図29は、符号化装置100の予測部で行われる処理の他の例を示すフローチャートである。
予測部は、第1の方式で予測画像を生成し(ステップSc_1a)、第2の方式で予測画像を生成し(ステップSc_1b)、第3の方式で予測画像を生成する(ステップSc_1c)。第1の方式、第2の方式、および第3の方式は、予測画像を生成するための互いに異なる方式であって、それぞれ例えば、インター予測方式、イントラ予測方式、および、それら以外の予測方式であってもよい。これらの予測方式では、上述の再構成画像を用いてもよい。
次に、予測部は、ステップSc_1a、Sc_1b、およびSc_1cのそれぞれで生成された予測画像を評価する(ステップSc_2)。例えば、予測部は、ステップSc_1a、Sc_1b、およびSc_1cのそれぞれで生成された予測画像に対してコストCを算出し、それらの予測画像のコストCを比較することによって、それらの予測画像を評価する。なお、コストCは、R-D最適化モデルの式、例えば、C=D+λ×Rによって算出される。この式において、Dは、予測画像の符号化歪であって、例えば、カレントブロックの画素値と予測画像の画素値との差分絶対値和などによって表される。また、Rは、ストリームのビットレートである。また、λは、例えばラグランジュの未定乗数である。
次に、予測部は、ステップSc_1a、Sc_1b、およびSc_1cのそれぞれで生成された予測画像のうちの何れか1つを選択する(ステップSc_3)。つまり、予測部は、最終的な予測画像を得るための方式またはモードを選択する。例えば、予測部は、それらの予測画像に対して算出されたコストCに基づき、最も小さいコストCの予測画像を選択する。または、ステップSc_2の評価およびステップSc_3における予測画像の選択は、符号化の処理に用いられるパラメータに基づいて行われてもよい。符号化装置100は、その選択された予測画像、方式またはモードを特定するための情報をストリームに信号化してもよい。その情報は、例えばフラグなどであってもよい。これにより、復号装置200は、その情報に基づいて、符号化装置100において選択された方式またはモードにしたがって予測画像を生成することができる。なお、図29に示す例では、予測部は、各方式で予測画像を生成した後に、何れかの予測画像を選択する。しかし、予測部は、それらの予測画像を生成する前に、上述の符号化の処理に用いられるパラメータに基づいて、方式またはモードを選択し、その方式またはモードにしたがって予測画像を生成してもよい。
例えば、第1の方式および第2の方式は、それぞれイントラ予測およびインター予測であって、予測部は、これらの予測方式にしたがって生成される予測画像から、カレントブロックに対する最終的な予測画像を選択してもよい。
図30は、符号化装置100の予測部で行われる処理の他の例を示すフローチャートである。
まず、予測部は、イントラ予測によって予測画像を生成し(ステップSd_1a)、インター予測によって予測画像を生成する(ステップSd_1b)。なお、イントラ予測によって生成された予測画像を、イントラ予測画像ともいい、インター予測によって生成された予測画像を、インター予測画像ともいう。
次に、予測部は、イントラ予測画像およびインター予測画像のそれぞれを評価する(ステップSd_2)。この評価には、上述のコストCが用いられてもよい。そして、予測部は、イントラ予測画像およびインター予測画像から、最も小さいコストCが算出された予測画像を、カレントブロックの最終的な予測画像として選択してもよい(ステップSd_3)。つまり、カレントブロックの予測画像を生成するための予測方式またはモードが選択される。
[イントラ予測部]
イントラ予測部124は、ブロックメモリ118に格納されたカレントピクチャ内のブロックを参照してカレントブロックのイントラ予測(画面内予測ともいう)を行うことで、カレントブロックの予測画像(すなわちイントラ予測画像)を生成する。具体的には、イントラ予測部124は、カレントブロックに隣接するブロックの画素値(例えば輝度値、色差値)を参照してイントラ予測を行うことでイントラ予測画像を生成し、イントラ予測画像を予測制御部128に出力する。
例えば、イントラ予測部124は、予め規定された複数のイントラ予測モードのうちの1つを用いてイントラ予測を行う。複数のイントラ予測モードは、通常、1つ以上の非方向性予測モードと、複数の方向性予測モードと、を含む。
1つ以上の非方向性予測モードは、例えばH.265/HEVC規格で規定されたPlanar予測モードおよびDC予測モードを含む。
複数の方向性予測モードは、例えばH.265/HEVC規格で規定された33方向の予測モードを含む。なお、複数の方向性予測モードは、33方向に加えてさらに32方向の予測モード(合計で65個の方向性予測モード)を含んでもよい。図31は、イントラ予測における全67個のイントラ予測モード(2個の非方向性予測モードおよび65個の方向性予測モード)を示す図である。実線矢印は、H.265/HEVC規格で規定された33方向を表し、破線矢印は、追加された32方向を表す(2個の非方向性予測モードは図31には図示されていない)。
種々の実装例では、色差ブロックのイントラ予測において、輝度ブロックが参照されてもよい。つまり、カレントブロックの輝度成分に基づいて、カレントブロックの色差成分が予測されてもよい。このようなイントラ予測は、CCLM(cross-component linear model)予測と呼ばれることがある。このような輝度ブロックを参照する色差ブロックのイントラ予測モード(例えばCCLMモードと呼ばれる)は、色差ブロックのイントラ予測モードの1つとして加えられてもよい。
イントラ予測部124は、水平/垂直方向の参照画素の勾配に基づいてイントラ予測後の画素値を補正してもよい。このような補正をともなうイントラ予測は、PDPC(position dependent intra prediction combination)と呼ばれることがある。PDPCの適用の有無を示す情報(例えばPDPCフラグと呼ばれる)は、通常、CUレベルで信号化される。なお、この情報の信号化は、CUレベルに限定される必要はなく、他のレベル(例えば、シーケンスレベル、ピクチャレベル、スライスレベル、ブリックレベルまたはCTUレベル)であってもよい。
図32は、イントラ予測部124による処理の一例を示すフローチャートである。
イントラ予測部124は、複数のイントラ予測モードから1つのイントラ予測モードを選択する(ステップSw_1)。そして、イントラ予測部124は、選択したイントラ予測モードにしたがって予測画像を生成する(ステップSw_2)。次に、イントラ予測部124は、MPM(Most Probable Modes)を決定する(ステップSw_3)。MPMは、例えば6つのイントラ予測モードからなる。その6つのイントラ予測モードのうちの2つのモードは、Planar予測モードおよびDC予測モードであってもよく、残りの4つのモードは、方向性予測モードであってもよい。そして、イントラ予測部124は、ステップSw_1で選択したイントラ予測モードがMPMに含まれるか否かを判定する(ステップSw_4)。
ここで、選択したイントラ予測モードがMPMに含まれると判定すると(ステップSw_4のYes)、イントラ予測部124は、MPMフラグを1に設定し(ステップSw_5)、MPMのうち、選択したイントラ予測モードを示す情報を生成する(ステップSw_6)。なお、1に設定されたMPMフラグと、そのイントラ予測モードを示す情報とはそれぞれ、予測パラメータとしてエントロピー符号化部110によって符号化される。
一方、選択したイントラ予測モードがMPMに含まれないと判定すると(ステップSw_4のNo)、イントラ予測部124は、MPMフラグを0に設定する(ステップSw_7)。または、イントラ予測部124は、MPMフラグを設定しない。そして、イントラ予測部124は、MPMに含まれない1つ以上のイントラ予測モードのうち、選択したイントラ予測モードを示す情報を生成する(ステップSw_8)。なお、0に設定されたMPMフラグと、そのイントラ予測モードを示す情報とはそれぞれ、予測パラメータとしてエントロピー符号化部110によって符号化される。そのイントラ予測モードを示す情報は、例えば0~60のうちの何れかの値を示す。
[インター予測部]
インター予測部126は、フレームメモリ122に格納された参照ピクチャであってカレントピクチャとは異なる参照ピクチャを参照してカレントブロックのインター予測(画面間予測ともいう)を行うことで、予測画像(インター予測画像)を生成する。インター予測は、カレントブロックまたはカレントブロック内のカレントサブブロックの単位で行われる。サブブロックはブロックに含まれていて、ブロックより小さい単位である。サブブロックのサイズは、4x4画素であっても、8x8画素であっても、それ以外のサイズであってもよい。サブブロックのサイズは、スライス、ブリック、またはピクチャなどの単位で切り替えられてもよい。
例えば、インター予測部126は、カレントブロックまたはカレントサブブロックについて参照ピクチャ内で動き探索(motion estimation)を行い、そのカレントブロックまたはカレントサブブロックに最も一致する参照ブロックまたはサブブロックを見つける。そして、インター予測部126は、参照ブロックまたはサブブロックからカレントブロックまたはサブブロックへの動きまたは変化を補償する動き情報(例えば動きベクトル)を取得する。インター予測部126は、その動き情報に基づいて、動き補償(または動き予測)を行い、カレントブロックまたはサブブロックのインター予測画像を生成する。インター予測部126は、生成されたインター予測画像を予測制御部128に出力する。
動き補償に用いられた動き情報は、多様な形態でインター予測画像として信号化されてもよい。例えば、動きベクトルが信号化されてもよい。他の例として、動きベクトルと予測動きベクトル(motion vector predictor)との差分が信号化されてもよい。
[参照ピクチャリスト]
図33は、各参照ピクチャの一例を示す図であり、図34は、参照ピクチャリストの一例を示す概念図である。参照ピクチャリストは、フレームメモリ122に記憶されている1つ以上の参照ピクチャを示すリストである。なお、図33において、矩形はピクチャを示し、矢印はピクチャの参照関係を示し、横軸は時間を示し、矩形中のI、PおよびBは各々、イントラ予測ピクチャ、単予測ピクチャおよび双予測ピクチャを示し、矩形中の数字は復号順を示す。図33に示すように、各ピクチャの復号順は、I0、P1、B2、B3、B4であり、各ピクチャの表示順は、I0、B3、B2、B4、P1である。図34に示すように、参照ピクチャリストは、参照ピクチャの候補を表すリストであり、例えば1つのピクチャ(またはスライス)が1つ以上の参照ピクチャリストを有してもよい。例えば、カレントピクチャが、単予測ピクチャであれば1つの参照ピクチャリストを用い、カレントピクチャが双予測ピクチャであれば2つの参照ピクチャリストを用いる。図33および図34の例では、カレントピクチャcurrPicであるピクチャB3は、L0リストおよびL1リストの2つの参照ピクチャリストを持つ。カレントピクチャcurrPicがピクチャB3の場合、そのカレントピクチャcurrPicの参照ピクチャの候補は、I0、P1およびB2であり、各参照ピクチャリスト(すなわちL0リストおよびL1リスト)はこれらのピクチャを示す。インター予測部126または予測制御部128は、各参照ピクチャリスト中のどのピクチャを実際に参照するか否かを参照ピクチャインデックスrefIdxLxによって指定する。図34では、参照ピクチャインデックスrefIdxL0およびrefIdxL1により参照ピクチャP1およびB2が指定されている。
このような参照ピクチャリストを、シーケンス単位、ピクチャ単位、スライス単位、ブリック単位、CTU単位、またはCU単位で生成してもよい。また、参照ピクチャリストに示される参照ピクチャのうち、インター予測において参照される参照ピクチャを示す参照ピクチャインデックスを、シーケンスレベル、ピクチャレベル、スライスレベル、ブリックレベル、CTUレベル、またはCUレベルで符号化してもよい。また、複数のインター予測モードにおいて、共通の参照ピクチャリストを用いてもよい。
[インター予測の基本フロー]
図35は、インター予測の基本的な流れを示すフローチャートである。
インター予測部126は、まず、予測画像を生成する(ステップSe_1~Se_3)。次に、減算部104は、カレントブロックと予測画像との差分を予測残差として生成する(ステップSe_4)。
ここで、インター予測部126は、予測画像の生成では、例えば、カレントブロックの動きベクトル(MV)の決定(ステップSe_1およびSe_2)と、動き補償(ステップSe_3)とを行うことによって、その予測画像を生成する。また、インター予測部126は、MVの決定では、例えば、候補動きベクトル(候補MV)の選択(ステップSe_1)と、MVの導出(ステップSe_2)とを行うことによって、そのMVを決定する。候補MVの選択は、例えば、インター予測部126が候補MVリストを生成し、候補MVリストから少なくとも1つの候補MVを選択することによって行われる。なお、候補MVリストには、過去に導出されたMVが候補MVとして追加されてもよい。また、MVの導出では、インター予測部126は、少なくとも1つの候補MVから、さらに少なくとも1つの候補MVを選択することによって、その選択された少なくとも1つの候補MVを、カレントブロックのMVとして決定してもよい。あるいは、インター予測部126は、その選択された少なくとも1つの候補MVのそれぞれについて、その候補MVで指示される参照ピクチャの領域を探索することによって、カレントブロックのMVを決定してもよい。なお、この参照ピクチャの領域を探索することを、動き探索(motion estimation)と称してもよい。
また、上述の例では、ステップSe_1~Se_3は、インター予測部126によって行われるが、例えばステップSe_1またはステップSe_2などの処理は、符号化装置100に含まれる他の構成要素によって行われてもよい。
なお、それぞれのインター予測モードにおける処理毎に候補MVリストを作成してもよいし、複数のインター予測モードにおいて共通の候補MVリストを用いてもよい。また、ステップSe_3およびSe_4の処理は、図9に示すステップSa_3およびSa_4の処理にそれぞれ相当する。また、ステップSe_3の処理は、図30のステップSd_1bの処理に相当する。
[MV導出のフロー]
図36は、MV導出の一例を示すフローチャートである。
インター予測部126は、動き情報(例えばMV)を符号化するモードで、カレントブロックのMVを導出してもよい。この場合、例えば動き情報が予測パラメータとして符号化されて、信号化されてもよい。つまり、符号化された動き情報がストリームに含まれる。
あるいは、インター予測部126は、動き情報を符号化しないモードでMVを導出してもよい。この場合には、動き情報はストリームに含まれない。
ここで、MV導出のモードには、後述のノーマルインターモード、ノーマルマージモード、FRUCモードおよびアフィンモードなどがある。これらのモードのうち、動き情報を符号化するモードには、ノーマルインターモード、ノーマルマージモード、およびアフィンモード(具体的には、アフィンインターモードおよびアフィンマージモード)などがある。なお、動き情報には、MVだけでなく、後述の予測MV選択情報が含まれてもよい。また、動き情報を符号化しないモードには、FRUCモードなどがある。インター予測部126は、これらの複数のモードから、カレントブロックのMVを導出するためのモードを選択し、その選択されたモードを用いてカレントブロックのMVを導出する。
図37は、MV導出の他の例を示すフローチャートである。
インター予測部126は、差分MVを符号化するモードで、カレントブロックのMVを導出してもよい。この場合、例えば差分MVが予測パラメータとして符号化されて、信号化される。つまり、符号化された差分MVがストリームに含まれる。この差分MVは、カレントブロックのMVと、その予測MVとの差である。なお、予測MVは、予測動きベクトルである。
あるいは、インター予測部126は、差分MVを符号化しないモードでMVを導出してもよい。この場合には、符号化された差分MVはストリームに含まれない。
ここで、上述のようにMVの導出のモードには、後述のノーマルインター、ノーマルマージモード、FRUCモードおよびアフィンモードなどがある。これらのモードのうち、差分MVを符号化するモードには、ノーマルインターモードおよびアフィンモード(具体的には、アフィンインターモード)などがある。また、差分MVを符号化しないモードには、FRUCモード、ノーマルマージモードおよびアフィンモード(具体的には、アフィンマージモード)などがある。インター予測部126は、これらの複数のモードから、カレントブロックのMVを導出するためのモードを選択し、その選択されたモードを用いてカレントブロックのMVを導出する。
[MV導出のモード]
図38Aおよび図38Bは、MV導出の各モードの分類の一例を示す図である。例えば図38Aに示すように、動き情報を符号化するか否か、および、差分MVを符号化するか否かに応じて、MV導出のモードは大きく3つのモードに分類される。3つのモードは、インターモード、マージモード、およびFRUC(frame rate up-conversion)モードである。インターモードは、動き探索を行うモードであって、動き情報および差分MVを符号化するモードである。例えば図38Bに示すように、インターモードは、アフィンインターモードおよびノーマルインターモードを含む。マージモードは、動き探索を行わないモードであって、周辺の符号化済みブロックからMVを選択し、そのMVを用いてカレントブロックのMVを導出するモードである。このマージモードは、基本的に、動き情報を符号化し、差分MVを符号化しないモードである。例えば図38Bに示すように、マージモードは、ノーマルマージモード(通常マージモードまたはレギュラーマージモードと呼ぶこともある)、MMVD(Merge with Motion Vector Difference)モード、CIIP(Combined inter merge/intra prediction)モード、トライアングルモード、ATMVPモード、およびアフィンマージモードを含む。ここで、マージモードに含まれる各モードのうちのMMVDモードでは、例外的に、差分MVが符号化される。なお、上述のアフィンマージモードおよびアフィンインターモードは、アフィンモードに含まれるモードである。アフィンモードは、アフィン変換を想定して、カレントブロックを構成する複数のサブブロックそれぞれのMVを、カレントブロックのMVとして導出するモードである。FRUCモードは、符号化済み領域間で探索を行うことによって、カレントブロックのMVを導出するモードであって、動き情報および差分MVの何れも符号化しないモードである。なお、これらの各モードの詳細については、後述する。
なお、図38Aおよび図38Bに示す各モードの分類は一例であって、この限りではない。例えば、CIIPモードで差分MVが符号化される場合には、そのCIIPモードはインターモードに分類される。
[MV導出 > ノーマルインターモード]
ノーマルインターモードは、候補MVによって示される参照ピクチャの領域から、カレントブロックの画像に類似するブロックを見つけ出すことによって、カレントブロックのMVを導出するインター予測モードである。また、このノーマルインターモードでは、差分MVが符号化される。
図39は、ノーマルインターモードによるインター予測の例を示すフローチャートである。
インター予測部126は、まず、時間的または空間的にカレントブロックの周囲にある複数の符号化済みブロックのMVなどの情報に基づいて、そのカレントブロックに対して複数の候補MVを取得する(ステップSg_1)。つまり、インター予測部126は、候補MVリストを作成する。
次に、インター予測部126は、ステップSg_1で取得された複数の候補MVの中から、N個(Nは2以上の整数)の候補MVのそれぞれを予測MV候補として、予め決められた優先順位に従って抽出する(ステップSg_2)。なお、その優先順位は、N個の候補MVのそれぞれに対して予め定められている。
次に、インター予測部126は、そのN個の予測MV候補の中から1つの予測MV候補を、カレントブロックの予測MVとして選択する(ステップSg_3)。このとき、インター予測部126は、選択された予測MVを識別するための予測MV選択情報をストリームに符号化する。つまり、インター予測部126は、予測パラメータ生成部130を介して、予測MV選択情報を予測パラメータとしてエントロピー符号化部110に出力する。
次に、インター予測部126は、符号化済み参照ピクチャを参照し、カレントブロックのMVを導出する(ステップSg_4)。このとき、インター予測部126は、さらに、その導出されたMVと予測MVとの差分値を差分MVとしてストリームに符号化する。つまり、インター予測部126は、予測パラメータ生成部130を介して、差分MVを予測パラメータとしてエントロピー符号化部110に出力する。なお、符号化済み参照ピクチャは、符号化後に再構成された複数のブロックからなるピクチャである。
最後に、インター予測部126は、その導出されたMVと符号化済み参照ピクチャとを用いてカレントブロックに対して動き補償を行ことにより、そのカレントブロックの予測画像を生成する(ステップSg_5)。ステップSg_1~Sg_5の処理は、各ブロックに対して実行される。例えば、スライスに含まれる全てのブロックのそれぞれに対してステップSg_1~Sg_5の処理が実行されると、そのスライスに対するノーマルインターモードを用いたインター予測が終了する。また、ピクチャに含まれる全てのブロックのそれぞれに対してステップSg_1~Sg_5の処理が実行されると、そのピクチャに対するノーマルインターモードを用いたインター予測が終了する。なお、ステップSg_1~Sg_5の処理は、スライスに含まれる全てのブロックに対して実行されず、一部のブロックに対して実行されると、そのスライスに対するノーマルインターモードを用いたインター予測が終了してもよい。ステップSg_1~Sg_5の処理は、同様に、ピクチャに含まれる一部のブロックに対して実行されると、そのピクチャに対するノーマルインターモードを用いたインター予測が終了してもよい。
なお、予測画像は、上述のインター予測信号である。また、符号化信号に含められる、予測画像の生成に用いられたインター予測モード(上述の例ではノーマルインターモード)を示す情報は、例えば予測パラメータとして符号化される。
なお、候補MVリストは、他のモードに用いられるリストと共通に用いられてもよい。また、候補MVリストに関する処理を、他のモードに用いられるリストに関する処理に適用してもよい。この候補MVリストに関する処理は、例えば、候補MVリストからの候補MVの抽出もしくは選択、候補MVの並び替え、または、候補MVの削除などである。
[MV導出 > ノーマルマージモード]
ノーマルマージモードは、候補MVリストから候補MVをカレントブロックのMVとして選択することによって、そのMVを導出するインター予測モードである。なお、ノーマルマージモードは、狭義のマージモードであって、単にマージモードと呼ばれることもある。本実施の形態では、ノーマルマージモードとマージモードとを区別し、マージモードを広義の意味で用いる。
図40は、ノーマルマージモードによるインター予測の例を示すフローチャートである。
インター予測部126は、まず、時間的または空間的にカレントブロックの周囲にある複数の符号化済みブロックのMVなどの情報に基づいて、そのカレントブロックに対して複数の候補MVを取得する(ステップSh_1)。つまり、インター予測部126は、候補MVリストを作成する。
次に、インター予測部126は、ステップSh_1で取得された複数の候補MVの中から1つの候補MVを選択することによって、カレントブロックのMVを導出する(ステップSh_2)。このとき、インター予測部126は、選択された候補MVを識別するためのMV選択情報をストリームに符号化する。つまり、インター予測部126は、予測パラメータ生成部130を介して、MV選択情報を予測パラメータとしてエントロピー符号化部110に出力する。
最後に、インター予測部126は、その導出されたMVと符号化済み参照ピクチャとを用いてカレントブロックに対して動き補償を行ことにより、そのカレントブロックの予測画像を生成する(ステップSh_3)。ステップSh_1~Sh_3の処理は例えば各ブロックに対して実行される。例えば、スライスに含まれる全てのブロックのそれぞれに対してステップSh_1~Sh_3の処理が実行されると、そのスライスに対するノーマルマージモードを用いたインター予測が終了する。また、ピクチャに含まれる全てのブロックのそれぞれに対してステップSh_1~Sh_3の処理が実行されると、そのピクチャに対するノーマルマージモードを用いたインター予測が終了する。なお、ステップSh_1~Sh_3の処理は、スライスに含まれる全てのブロックに対して実行されず、一部のブロックに対して実行されると、そのスライスに対するノーマルマージモードを用いたインター予測が終了してもよい。ステップSh_1~Sh_3の処理は、同様に、ピクチャに含まれる一部のブロックに対して実行されると、そのピクチャに対するノーマルマージモードを用いたインター予測が終了してもよい。
また、ストリームに含められる、予測画像の生成に用いられたインター予測モード(上述の例ではノーマルマージモード)を示す情報は、例えば予測パラメータとして符号化される。
図41は、ノーマルマージモードによるカレントピクチャのMV導出処理の一例を説明するための図である。
まず、インター予測部126は、候補MVを登録した候補MVリストを生成する。候補MVとしては、カレントブロックの空間的に周辺に位置する複数の符号化済みブロックが持つMVである空間隣接候補MV、符号化済み参照ピクチャにおけるカレントブロックの位置を投影した近辺のブロックが持つMVである時間隣接候補MV、空間隣接候補MVと時間隣接候補MVのMV値を組み合わせて生成したMVである結合候補MV、および値がゼロのMVであるゼロ候補MV等がある。
次に、インター予測部126は、候補MVリストに登録されている複数の候補MVの中から1つの候補MVを選択することで、その1つの候補MVをカレントブロックのMVとして決定する。
さらに、エントロピー符号化部110は、どの候補MVを選択したかを示す信号であるmerge_idxをストリームに記述して符号化する。
なお、図41で説明した候補MVリストに登録する候補MVは一例であり、図中の個数とは異なる個数であったり、図中の候補MVの一部の種類を含まない構成であったり、図中の候補MVの種類以外の候補MVを追加した構成であったりしてもよい。
ノーマルマージモードにより導出したカレントブロックのMVを用いて、後述するDMVR(dynamic motion vector refreshing)を行うことによって最終的なMVを決定してもよい。なお、ノーマルマージモードでは、差分MVは符号化されないが、MMVDモードでは、差分MVは符号化される。MMVDモードは、ノーマルマージモードと同様に候補MVリストから1つの候補MVを選択するが、差分MVを符号化する。このような、MMVDは、図38Bに示すように、ノーマルマージモードと共にマージモードに分類されてもよい。なお、MMVDモードでの差分MVは、インターモードで用いる差分MVと同じでなくてもよく、例えば、MMVDモードでの差分MVの導出は、インターモードでの差分MVの導出に比べて処理量が小さい処理であってもよい。
また、インター予測で生成した予測画像とイントラ予測で生成した予測画像とを重ね合わせて、カレントブロックの予測画像を生成するCIIP(Combined inter merge/intra prediction)モードを行ってもよい。
なお、候補MVリストを、候補リストと称してもよい。また、merge_idxは、MV選択情報である。
[MV導出 > HMVPモード]
図42は、HMVPモードによるカレントピクチャのMV導出処理の一例について説明するための図である。
ノーマルマージモードでは、符号化済みブロック(例えばCU)を参照して生成された候補MVリストの中から1つの候補MVを選択することによって、カレントブロックである例えばCUのMVを決定する。ここで、他の候補MVがその候補MVリストに登録されてもよい。このような他の候補MVが登録されるモードは、HMVPモードと呼ばれる。
HMVPモードでは、ノーマルマージモードの候補MVリストとは別に、HMVP用のFIFO(First-In First-Out)バッファを用いて候補MVを管理している。
FIFOバッファには、過去に処理したブロックのMVなどの動き情報が新しいものから順に格納されている。このFIFOバッファの管理では、1つのブロックの処理が行われる度に、最も新しいブロック(すなわち直前に処理されたCU)のMVがFIFOバッファに格納され、代わりにFIFOバッファ内の最も古いCU(すなわち最も先に処理されたCU)のMVがFIFOバッファから削除される。図42に示す例では、HMVP1が最も新しいブロックのMVであって、HMVP5が最も古いブロックのMVである。
そして、例えば、インター予測部126は、FIFOバッファに管理されている各MVについて、HMVP1から順に、そのMVが、ノーマルマージモードの候補MVリストに既に登録されている全ての候補MVと異なるMVであるかどうかをチェックする。そして、インター予測部126は、全ての候補MVと異なると判断した場合に、そのFIFOバッファに管理されているMVを、ノーマルマージモードの候補MVリストに候補MVとして追加してもよい。このときFIFOバッファから登録される候補MVは1つでもよいし、複数個であってもよい。
このようにHMVPモードを用いることによって、カレントブロックの空間的もしくは時間的に隣接するブロックのMVのみでなく、過去に処理されたブロックのMVも候補に加えることが可能となる。その結果、ノーマルマージモードの候補MVのバリエーションが広がることで符号化効率を向上させることができる可能性が高くなる。
なお、上述のMVは、動き情報であってもよい。つまり、候補MVリストおよびFIFOバッファに格納される情報は、MVの値だけでなく、参照するピクチャの情報、参照する方向および枚数などを示す情報を含んでいてもよい。また、上述のブロックは、例えばCUである。
なお、図42の候補MVリストおよびFIFOバッファは一例であり、候補MVリストおよびFIFOバッファは、図42とは異なるサイズのリストまたはバッファであったり、図42とは異なる順番で候補MVを登録する構成であったりしてもよい。また、ここで説明した処理は符号化装置100においても復号装置200においても共通である。
なお、HMVPモードは、ノーマルマージモード以外のモードに対しても、適用しうる。例えば、FIFOバッファに、過去にアフィンモードで処理したブロックのMVなどの動き情報を新しいものから順に格納し、候補MVとして用いてもよい。HMVPモードをアフィンモードに適用したモードを、ヒストリーアフィンモードと呼んでもよい。
[MV導出 > FRUCモード]
動き情報は、符号化装置100側から信号化されずに、復号装置200側で導出されてもよい。例えば、復号装置200側で動き探索を行うことにより動き情報が導出されてもよい。この場合、復号装置200側では、カレントブロックの画素値を用いずに動き探索が行われる。このような復号装置200側で動き探索を行うモードには、FRUC(frame rate up-conversion)モードまたはPMMVD(pattern matched motion vector derivation)モードなどがある。
FRUC処理の一例を図43に示す。まず、カレントブロックに空間的または時間的に隣接する各符号化済みブロックのMVを参照して、それらのMVを候補MVとして示すリスト(すなわち、候補MVリストであって、ノーマルマージモードの候補MVリストと共通であってもよい)が生成される(ステップSi_1)。次に、候補MVリストに登録されている複数の候補MVの中からベスト候補MVが選択される(ステップSi_2)。例えば、候補MVリストに含まれる各候補MVの評価値が算出され、その評価値に基づいて1つの候補MVがベスト候補MVとして選択される。そして、選択されたベスト候補MVに基づいて、カレントブロックのためのMVが導出される(ステップSi_4)。具体的には、例えば、選択されたベスト候補MVがそのままカレントブロックのためのMVとして導出される。また例えば、選択されたベスト候補MVに対応する参照ピクチャ内の位置の周辺領域において、パターンマッチングを行うことにより、カレントブロックのためのMVが導出されてもよい。すなわち、ベスト候補MVの周辺の領域に対して、参照ピクチャにおけるパターンマッチングおよび評価値を用いた探索を行い、さらに評価値が良い値となるMVがあった場合は、ベスト候補MVをそのMVに更新して、それをカレントブロックの最終的なMVとしてもよい。より良い評価値を有するMVへの更新を実施しなくてもよい。
最後に、インター予測部126は、その導出されたMVと符号化済み参照ピクチャとを用いてカレントブロックに対して動き補償を行ことにより、そのカレントブロックの予測画像を生成する(ステップSi_5)。ステップSi_1~Si_5の処理は例えば各ブロックに対して実行される。例えば、スライスに含まれる全てのブロックのそれぞれに対してステップSi_1~Si_5の処理が実行されると、そのスライスに対するFRUCモードを用いたインター予測が終了する。また、ピクチャに含まれる全てのブロックのそれぞれに対してステップSi_1~Si_5の処理が実行されると、そのピクチャに対するFRUCモードを用いたインター予測が終了する。なお、ステップSi_1~Si_5の処理は、スライスに含まれる全てのブロックに対して実行されず、一部のブロックに対して実行されると、そのスライスに対するFRUCモードを用いたインター予測が終了してもよい。ステップSi_1~Si_5の処理は、同様に、ピクチャに含まれる一部のブロックに対して実行されると、そのピクチャに対するFRUCモードを用いたインター予測が終了してもよい。
サブブロック単位でも上述のブロック単位と同様に処理されてもよい。
評価値は、種々の方法によって算出されてもよい。例えば、MVに対応する参照ピクチャ内の領域の再構成画像と、所定の領域(その領域は、例えば、以下に示すように、他の参照ピクチャの領域またはカレントピクチャの隣接ブロックの領域であってもよい)の再構成画像とを比較する。そして、2つの再構成画像の画素値の差分を算出して、MVの評価値に用いてもよい。なお、差分値に加えてそれ以外の情報を用いて評価値を算出してもよい。
次に、パターンマッチングについて詳細に説明する。まず、候補MVリスト(マージリストともいう)に含まれる1つの候補MVが、パターンマッチングによる探索のスタートポイントとして選択される。パターンマッチングとしては、第1パターンマッチングまたは第2パターンマッチングが用いられてもよい。第1パターンマッチングおよび第2パターンマッチングは、それぞれ、バイラテラルマッチング(bilateral matching)およびテンプレートマッチング(template matching)と呼ばれることがある。
[MV導出 > FRUC > バイラテラルマッチング]
第1パターンマッチングでは、異なる2つの参照ピクチャ内の2つのブロックであってカレントブロックの動き軌道(motion trajectory)に沿う2つのブロックの間でパターンマッチングが行われる。したがって、第1パターンマッチングでは、上述した候補MVの評価値の算出のための所定の領域として、カレントブロックの動き軌道に沿う他の参照ピクチャ内の領域が用いられる。
図44は、動き軌道に沿う2つの参照ピクチャにおける2つのブロック間での第1パターンマッチング(バイラテラルマッチング)の一例を説明するための図である。図44に示すように、第1パターンマッチングでは、カレントブロック(Cur block)の動き軌道に沿う2つのブロックであって異なる2つの参照ピクチャ(Ref0、Ref1)内の2つのブロックのペアの中で最もマッチするペアを探索することにより2つのMV(MV0、MV1)が導出される。具体的には、カレントブロックに対して、候補MVで指定された第1の符号化済み参照ピクチャ(Ref0)内の指定位置における再構成画像と、その候補MVを表示時間間隔でスケーリングした対称MVで指定された第2の符号化済み参照ピクチャ(Ref1)内の指定位置における再構成画像との差分が導出され、得られた差分値を用いて評価値が算出される。複数の候補MVの中で最も評価値が良い値となる候補MVがベスト候補MVとして選択されるとよい。
連続的な動き軌道の仮定の下では、2つの参照ブロックを指し示すMV(MV0、MV1)は、カレントピクチャ(Cur Pic)と2つの参照ピクチャ(Ref0、Ref1)との間の時間的な距離(TD0、TD1)に対して比例する。例えば、カレントピクチャが時間的に2つの参照ピクチャの間に位置し、カレントピクチャから2つの参照ピクチャへの時間的な距離が等しい場合、第1パターンマッチングでは、鏡映対称な双方向のMVが導出される。
[MV導出 > FRUC > テンプレートマッチング]
第2パターンマッチング(テンプレートマッチング)では、カレントピクチャ内のテンプレート(カレントピクチャ内でカレントブロックに隣接するブロック(例えば上および/または左隣接ブロック))と参照ピクチャ内のブロックとの間でパターンマッチングが行われる。したがって、第2パターンマッチングでは、上述した候補MVの評価値の算出のための所定の領域として、カレントピクチャ内のカレントブロックに隣接するブロックが用いられる。
図45は、カレントピクチャ内のテンプレートと参照ピクチャ内のブロックとの間でのパターンマッチング(テンプレートマッチング)の一例を説明するための図である。図45に示すように、第2パターンマッチングでは、カレントピクチャ(Cur Pic)内でカレントブロック(Cur block)に隣接するブロックと最もマッチするブロックを参照ピクチャ(Ref0)内で探索することによりカレントブロックのMVが導出される。具体的には、カレントブロックに対して、左隣接および上隣接の両方もしくはどちらか一方の符号化済み領域の再構成画像と、候補MVで指定された符号化済み参照ピクチャ(Ref0)内の同等位置における再構成画像との差分が導出され、得られた差分値を用いて評価値が算出される。複数の候補MVの中で最も評価値が良い値となる候補MVがベスト候補MVとして選択されるとよい。
このようなFRUCモードを適用するか否かを示す情報(例えばFRUCフラグと呼ばれる)は、CUレベルで信号化されてもよい。また、FRUCモードが適用される場合(例えばFRUCフラグが真の場合)、適用可能なパターンマッチングの方法(第1パターンマッチングまたは第2パターンマッチング)を示す情報がCUレベルで信号化されてもよい。なお、これらの情報の信号化は、CUレベルに限定される必要はなく、他のレベル(例えば、シーケンスレベル、ピクチャレベル、スライスレベル、ブリックレベル、CTUレベルまたはサブブロックレベル)であってもよい。
[MV導出 > アフィンモード]
アフィンモードは、affine変換を用いてMVを生成するモードであり、例えば、複数の隣接ブロックのMVに基づいてサブブロック単位でMVを導出してもよい。このモードは、アフィン動き補償予測(affine motion compensation prediction)モードと呼ばれることがある。
図46Aは、複数の隣接ブロックのMVに基づくサブブロック単位のMVの導出の一例を説明するための図である。図46Aにおいて、カレントブロックは、例えば、16個の4x4画素からなるサブブロックを含む。ここでは、隣接ブロックのMVに基づいてカレントブロックの左上角制御ポイントの動きベクトルv0が導出され、同様に、隣接サブブロックのMVに基づいてカレントブロックの右上角制御ポイントの動きベクトルv1が導出される。そして、以下の式(1A)により、2つの動きベクトルv0およびv1を投影して、カレントブロック内の各サブブロックの動きベクトル(vx,vy)が導出される。
ここで、xおよびyは、それぞれ、サブブロックの水平位置および垂直位置を示し、wは、予め定められた重み係数を示す。
このようなアフィンモードを示す情報(例えばアフィンフラグと呼ばれる)は、CUレベルで信号化されてもよい。なお、このアフィンモードを示す情報の信号化は、CUレベルに限定される必要はなく、他のレベル(例えば、シーケンスレベル、ピクチャレベル、スライスレベル、ブリックレベル、CTUレベルまたはサブブロックレベル)であってもよい。
また、このようなアフィンモードは、左上および右上角制御ポイントのMVの導出方法が異なるいくつかのモードを含んでもよい。例えば、アフィンモードには、アフィンインター(アフィンノーマルインターともいう)モードと、アフィンマージモードの2つのモードがある。
図46Bは、3つの制御ポイントを用いるアフィンモードにおけるサブブロック単位のMVの導出の一例を説明するための図である。図46Bにおいて、カレントブロックは、例えば、16個の4x4画素からなるサブブロックを含む。ここでは、隣接ブロックのMVに基づいてカレントブロックの左上角制御ポイントの動きベクトルv0が導出される。同様に、隣接ブロックのMVに基づいてカレントブロックの右上角制御ポイントの動きベクトルv1が導出され、隣接ブロックのMVに基づいてカレントブロックの左下角制御ポイントの動きベクトルv2が導出される。そして、以下の式(1B)により、3つの動きベクトルv0、v1およびv2を投影して、カレントブロック内の各サブブロックの動きベクトル(vx,vy)が導出される。
ここで、xおよびyは、それぞれ、サブブロック中心の水平位置および垂直位置を示し、wおよびhは、予め定められた重み係数を示す。wは、カレントブロックの幅、hは、カレントブロックの高さを示してもよい。
互いに異なる制御ポイント数(例えば、2つと3つ)を用いるアフィンモードは、CUレベルで切り替えて信号化されてもよい。なお、CUレベルで使用しているアフィンモードの制御ポイント数を示す情報を、他のレベル(例えば、シーケンスレベル、ピクチャレベル、スライスレベル、ブリックレベル、CTUレベルまたはサブブロックレベル)で信号化してもよい。
また、このような3つの制御ポイントを有するアフィンモードは、左上、右上および左下角制御ポイントのMVの導出方法が異なるいくつかのモードを含んでもよい。例えば、3つの制御ポイントを有するアフィンモードには、上述の2つの制御ポイントを有するアフィンモードと同様、アフィンインターモードと、アフィンマージモードの2つのモードがある。
なお、アフィンモードにおいて、カレントブロックに含まれる各サブブロックのサイズは、4x4画素に限定されず、他の大きさでもよい。例えば、各サブブロックのサイズは、8×8画素であってもよい。
[MV導出 > アフィンモード > 制御ポイント]
図47A,図47Bおよび図47Cは、アフィンモードにおける制御ポイントのMV導出の一例を説明するための概念図である。
アフィンモードでは、図47Aに示すように、例えば、カレントブロックに隣接する符号化済みブロックA(左)、ブロックB(上)、ブロックC(右上)、ブロックD(左下)およびブロックE(左上)のうち、アフィンモードで符号化されたブロックに対応する複数のMVに基づいて、カレントブロックの制御ポイントのそれぞれの予測MVが算出される。具体的には、符号化済みブロックA(左)、ブロックB(上)、ブロックC(右上)、ブロックD(左下)およびブロックE(左上)の順序でこれらのブロックが検査され、アフィンモードで符号化された最初の有効なブロックが特定される。この特定されたブロックに対応する複数のMVに基づいて、カレントブロックの制御ポイントのMVが算出される。
例えば、図47Bに示すように、カレントブロックの左に隣接するブロックAが2つの制御ポイントを有するアフィンモードで符号化されている場合は、ブロックAを含む符号化済みブロックの左上角および右上角の位置に投影した動きベクトルv3およびv4が導出される。そして、導出された動きベクトルv3およびv4から、カレントブロックの左上角制御ポイントの動きベクトルv0と、右上角制御ポイントの動きベクトルv1とが算出される。
例えば、図47Cに示すように、カレントブロックの左に隣接するブロックAが3つの制御ポイントを有するアフィンモードで符号化されている場合は、ブロックAを含む符号化済みブロックの左上角、右上角および左下角の位置に投影した動きベクトルv3、v4およびv5が導出される。そして、導出された動きベクトルv3、v4およびv5から、カレントブロックの左上角制御ポイントの動きベクトルv0と、右上角制御ポイントの動きベクトルv1と、左下角制御ポイントの動きベクトルv2とが算出される。
なお、図47A~図47Cに示すMVの導出方法は、後述の図50に示すステップSk_1におけるカレントブロックの各制御ポイントのMVの導出に用いられてもよいし、後述の図51に示すステップSj_1におけるカレントブロックの各制御ポイントの予測MVの導出に用いられてもよい。
図48Aおよび図48Bは、アフィンモードにおける制御ポイントMVの導出の他の一例を説明するための概念図である。
図48Aは、2つの制御ポイントを有するアフィンモードを説明するための図である。
このアフィンモードでは、図48Aに示すように、カレントブロックに隣接する符号化済みブロックA、ブロックBおよびブロックCのそれぞれのMVから選択されたMVが、カレントブロックの左上角制御ポイントの動きベクトルv0として用いられる。同様に、カレントブロックに隣接する符号化済みブロックDおよびブロックEのそれぞれのMVから選択されたMVが、カレントブロックの右上角制御ポイントの動きベクトルv1として用いられる。
図48Bは、3つの制御ポイントを有するアフィンモードを説明するための図である。
このアフィンモードでは、図48Bに示すように、カレントブロックに隣接する符号化済みブロックA、ブロックBおよびブロックCのそれぞれのMVから選択されたMVが、カレントブロックの左上角制御ポイントの動きベクトルv0として用いられる。同様に、カレントブロックに隣接する符号化済みブロックDおよびブロックEのそれぞれのMVから選択されたMVが、カレントブロックの右上角制御ポイントの動きベクトルv1として用いられる。さらに、カレントブロックに隣接する符号化済みブロックFおよびブロックGのそれぞれのMVから選択されたMVが、カレントブロックの左下角制御ポイントの動きベクトルv2として用いられる。
なお、図48Aおよび図48Bに示すMVの導出方法は、後述の図50に示すステップSk_1におけるカレントブロックの各制御ポイントのMVの導出に用いられてもよいし、後述の図51のステップSj_1におけるカレントブロックの各制御ポイントの予測MVの導出に用いられてもよい。
ここで、例えば、異なる制御ポイント数(例えば、2つと3つ)のアフィンモードをCUレベルで切り替えて信号化する場合などにおいて、符号化済みブロックとカレントブロックで制御ポイントの数が異なる場合がある。
図49Aおよび図49Bは、符号化済みブロックとカレントブロックで制御ポイントの数が異なる場合の、制御ポイントのMV導出方法の一例を説明するための概念図である。
例えば、図49Aに示すように、カレントブロックが左上角、右上角および左下角の3つの制御ポイントを有し、カレントブロックの左に隣接するブロックAが2つの制御ポイントを有するアフィンモードで符号化されている。この場合は、ブロックAを含む符号化済みブロックの左上角および右上角の位置に投影した動きベクトルv3およびv4が導出される。そして、導出された動きベクトルv3およびv4から、カレントブロックの左上角制御ポイントの動きベクトルv0と、右上角制御ポイントの動きベクトルv1が算出される。更に、導出された動きベクトルv0およびv1から、左下角制御ポイントの動きベクトルv2が算出される。
例えば、図49Bに示すように、カレントブロックが左上角および右上角の2つの制御ポイントを有し、カレントブロックの左に隣接するブロックAが3つの制御ポイントを有するアフィンモードで符号化されている。この場合は、ブロックAを含む符号化済みブロックの左上角、右上角および左下角の位置に投影した動きベクトルv3、v4およびv5が導出される。そして、導出された動きベクトルv3、v4およびv5から、カレントブロックの左上角制御ポイントの動きベクトルv0と、右上角制御ポイントの動きベクトルv1とが算出される。
なお、図49Aおよび図49Bに示すMVの導出方法は、後述の図50に示すステップSk_1におけるカレントブロックの各制御ポイントのMVの導出に用いられてもよいし、後述の図51のステップSj_1におけるカレントブロックの各制御ポイントの予測MVの導出に用いられてもよい。
[MV導出 > アフィンモード > アフィンマージモード]
図50は、アフィンマージモードの一例を示すフローチャートである。
アフィンマージモードでは、まず、インター予測部126は、カレントブロックの制御ポイントのそれぞれのMVを導出する(ステップSk_1)。制御ポイントは、図46Aに示すように、カレントブロックの左上角および右上角のポイント、或いは図46Bに示すように、カレントブロックの左上角、右上角および左下角のポイントである。このとき、インター予測部126は、導出された2つまたは3つのMVを識別するためのMV選択情報をストリームに符号化してもよい。
例えば、図47A~図47Cに示すMVの導出方法を用いる場合、インター予測部126は、図47Aに示すように、符号化済みブロックA(左)、ブロックB(上)、ブロックC(右上)、ブロックD(左下)およびブロックE(左上)の順序にこれらのブロックを検査し、アフィンモードで符号化された最初の有効なブロックを特定する。
インター予測部126は、特定されたアフィンモードで符号化された最初の有効なブロックを用いて、制御ポイントのMVを導出する。例えば、ブロックAが特定され、ブロックAが2つの制御ポイントを有する場合、図47Bに示すように、インター予測部126は、ブロックAを含む符号化済みブロックの左上角および右上角の動きベクトルv3およびv4から、カレントブロックの左上角制御ポイントの動きベクトルv0と、右上角制御ポイントの動きベクトルv1とを算出する。例えば、インター予測部126は、符号化済みブロックの左上角および右上角の動きベクトルv3およびv4を、カレントブロックに投影することによって、カレントブロックの左上角制御ポイントの動きベクトルv0と、右上角制御ポイントの動きベクトルv1とを算出する。
或いは、ブロックAが特定され、ブロックAが3つの制御ポイントを有する場合、図47Cに示すように、インター予測部126は、ブロックAを含む符号化済みブロックの左上角、右上角および左下角の動きベクトルv3、v4およびv5から、カレントブロックの左上角制御ポイントの動きベクトルv0と、右上角制御ポイントの動きベクトルv1と、左下角制御ポイントの動きベクトルv2とを算出する。例えば、インター予測部126は、符号化済みブロックの左上角、右上角および左下角の動きベクトルv3、v4およびv5を、カレントブロックに投影することによって、カレントブロックの左上角制御ポイントの動きベクトルv0と、右上角制御ポイントの動きベクトルv1と、左下角制御ポイントの動きベクトルv2とを算出する。
なお、上述の図49Aに示すように、ブロックAが特定され、ブロックAが2つの制御ポイントを有する場合に、3つの制御ポイントのMVを算出してもよく、上述の図49Bに示すように、ブロックAが特定され、ブロックAが3つの制御ポイントを有する場合に、2つの制御ポイントのMVを算出してもよい。
次に、インター予測部126は、カレントブロックに含まれる複数のサブブロックのそれぞれについて、動き補償を行う。すなわち、インター予測部126は、その複数のサブブロックのそれぞれについて、2つの動きベクトルv0およびv1と上述の式(1A)とを用いて、或いは3つの動きベクトルv0、v1およびv2と上述の式(1B)とを用いて、そのサブブロックのMVをアフィンMVとして算出する(ステップSk_2)。そして、インター予測部126は、それらのアフィンMVおよび符号化済み参照ピクチャを用いてそのサブブロックに対して動き補償を行う(ステップSk_3)。カレントブロックに含まれる全てのサブブロックのそれぞれに対してステップSk_2およびSk_3の処理が実行されると、そのカレントブロックに対するアフィンマージモードを用いた予測画像の生成の処理が終了する。つまり、カレントブロックに対して動き補償が行われ、そのカレントブロックの予測画像が生成される。
なお、ステップSk_1では、上述の候補MVリストが生成されてもよい。候補MVリストは、例えば、各制御ポイントに対して複数のMV導出方法を用いて導出した候補MVを含むリストであってもよい。複数のMV導出方法は、図47A~図47Cに示すMVの導出方法、図48Aおよび図48Bに示すMVの導出方法、図49Aおよび図49Bに示すMVの導出方法、および、その他のMVの導出方法の任意の組合せであってもよい。
なお、候補MVリストは、アフィンモード以外の、サブブロック単位で予測を行うモードの候補MVを含んでもよい。
なお、候補MVリストとして、例えば、2つの制御ポイントを有するアフィンマージモードの候補MVと、3つの制御ポイントを有するアフィンマージモードの候補MVとを含む候補MVリストを生成してもよい。または、2つの制御ポイントを有するアフィンマージモードの候補MVを含む候補MVリストと、3つの制御ポイントを有するアフィンマージモードの候補MVを含む候補MVリストとをそれぞれ生成してもよい。または、2つの制御ポイントを有するアフィンマージモードと、3つの制御ポイントを有するアフィンマージモードとのうちの一方のモードの候補MVを含む候補MVリストを生成してもよい。候補MVは、例えば、符号化済みブロックA(左)、ブロックB(上)、ブロックC(右上)、ブロックD(左下)およびブロックE(左上)のMVであってもよく、それらのブロックのうちの有効なブロックのMVであってもよい。
なお、MV選択情報として、候補MVリストのいずれの候補MVかを示すインデックスを送ってもよい。
[MV導出 > アフィンモード > アフィンインターモード]
図51は、アフィンインターモードの一例を示すフローチャートである。
アフィンインターモードでは、まず、インター予測部126は、カレントブロックの2つまたは3つの制御ポイントのそれぞれの予測MV(v0,v1)または(v0,v1,v2)を導出する(ステップSj_1)。制御ポイントは、図46Aまたは図46Bに示すように、カレントブロックの左上角、右上角或いは左下角のポイントである。
例えば、図48Aおよび図48Bに示すMVの導出方法を用いる場合、インター予測部126は、図48Aまたは図48Bに示すカレントブロックの各制御ポイント近傍の符号化済みブロックのうちの何れかのブロックのMVを選択することによって、カレントブロックの制御ポイントの予測MV(v0,v1)または(v0,v1,v2)を導出する。このとき、インター予測部126は、選択された2つまたは3つの予測MVを識別するための予測MV選択情報をストリームに符号化する。
例えば、インター予測部126は、カレントブロックに隣接する符号化済みブロックからどのブロックのMVを制御ポイントの予測MVとして選択するかを、コスト評価等を用いて決定し、どの予測MVを選択したかを示すフラグをビットストリームに記述してもよい。つまり、インター予測部126は、予測パラメータ生成部130を介して、フラグなどの予測MV選択情報を予測パラメータとしてエントロピー符号化部110に出力する。
次に、インター予測部126は、ステップSj_1で選択または導出された予測MVをそれぞれ更新しながら(ステップSj_2)、動き探索を行う(ステップSj_3およびSj_4)。つまり、インター予測部126は、更新される予測MVに対応する各サブブロックのMVをアフィンMVとして、上述の式(1A)または式(1B)を用いて算出する(ステップSj_3)。そして、インター予測部126は、それらのアフィンMVおよび符号化済み参照ピクチャを用いて各サブブロックに対して動き補償を行う(ステップSj_4)。ステップSj_3およびSj_4の処理は、ステップSj_2で予測MVが更新されるごとに、カレントブロック内の全てのブロックに対して実行される。その結果、インター予測部126は、動き探索ループにおいて、例えば最も小さいコストが得られる予測MVを、制御ポイントのMVとして決定する(ステップSj_5)。このとき、インター予測部126は、さらに、その決定されたMVと予測MVとの差分値を差分MVとしてストリームに符号化する。つまり、インター予測部126は、予測パラメータ生成部130を介して、差分MVを予測パラメータとしてエントロピー符号化部110に出力する。
最後に、インター予測部126は、その決定されたMVと符号化済み参照ピクチャとを用いてカレントブロックに対して動き補償を行ことにより、そのカレントブロックの予測画像を生成する(ステップSj_6)。
なお、ステップSj_1では、上述の候補MVリストが生成されてもよい。候補MVリストは、例えば、各制御ポイントに対して複数のMV導出方法を用いて導出した候補MVを含むリストであってもよい。複数のMV導出方法は、図47A~図47Cに示すMVの導出方法、図48Aおよび図48Bに示すMVの導出方法、図49Aおよび図49Bに示すMVの導出方法、および、その他のMVの導出方法の任意の組合せであってもよい。
なお、候補MVリストは、アフィンモード以外の、サブブロック単位で予測を行うモードの候補MVを含んでもよい。
なお、候補MVリストとして、2つの制御ポイントを有するアフィンインターモードの候補MVと、3つの制御ポイントを有するアフィンインターモードの候補MVとを含む候補MVリストを生成してもよい。または、2つの制御ポイントを有するアフィンインターモードの候補MVを含む候補MVリストと、3つの制御ポイントを有するアフィンインターモードの候補MVを含む候補MVリストとをそれぞれ生成してもよい。または、2つの制御ポイントを有するアフィンインターモードと、3つの制御ポイントを有するアフィンインターモードとのうちの一方のモードの候補MVを含む候補MVリストを生成してもよい。候補MVは、例えば、符号化済みブロックA(左)、ブロックB(上)、ブロックC(右上)、ブロックD(左下)およびブロックE(左上)のMVであってもよく、それらのブロックのうちの有効なブロックのMVであってもよい。
なお、予測MV選択情報として、候補MVリストのいずれの候補MVかを示すインデックスを送ってもよい。
[MV導出 > トライアングルモード]
インター予測部126は、上述の例では、矩形のカレントブロックに対して1つの矩形の予測画像を生成する。しかし、インター予測部126は、その矩形のカレントブロックに対して矩形と異なる形状の複数の予測画像を生成し、それらの複数の予測画像を結合することによって、最終的な矩形の予測画像を生成してもよい。矩形と異なる形状は、例えば三角形であってもよい。
図52Aは、2つの三角形の予測画像の生成を説明するための図である。
インター予測部126は、カレントブロック内の三角形の第1パーティションに対して、その第1パーティションの第1MVを用いて動き補償を行うことによって、三角形の予測画像を生成する。同様に、インター予測部126は、カレントブロック内の三角形の第2パーティションに対して、その第2パーティションの第2MVを用いて動き補償を行うことによって、三角形の予測画像を生成する。そして、インター予測部126は、これらの予測画像を結合することによって、カレントブロックと同じ矩形の予測画像を生成する。
なお、第1パーティションの予測画像として、第1MVを用いてカレントブロックに対応する矩形の第1予測画像を生成してもよい。また、第2パーティションの予測画像として、第2MVを用いてカレントブロックに対応する矩形の第2予測画像を生成してもよい。第1予測画像と第2予測画像とを重み付け加算することにより、カレントブロックの予測画像を生成してもよい。なお、重み付け加算する部位は、第1パーティションと第2パーティションの境界を挟む一部の領域のみであってもよい。
図52Bは、第2パーティションと重なる第1パーティションの第1部分、並びに、補正処理の一部として重み付けされ得る第1サンプルセット及び第2サンプルセットの例を示す概念図である。第1部分は、例えば、第1パーティションの幅又は高さの4分の1であってもよい。別の例において、第1部分は、第1パーティションの縁に隣接するN個のサンプルに対応する幅を有していてもよい。ここで、Nは、ゼロより大きい整数であり、例えば、Nは、整数2であってもよい。図52Bの左の例は、第1パーティションの幅の4分の1の幅の矩形部分を有する矩形パーティションを示す。ここで、第1サンプルセットは、第1部分の外側のサンプルと第1部分の内側のサンプルとを含み、第2サンプルセットは、第1部分内のサンプルを含む。図52Bの中央の例は、第1パーティションの高さの4分の1の高さの矩形部分を有する矩形パーティションを示す。ここで、第1サンプルセットは、第1部分の外側のサンプルと第1部分の内側のサンプルとを含み、第2サンプルセットは、第1部分内のサンプルを含む。図52Bの右の例は、2つのサンプルに対応する高さの多角形部分を有する三角形パーティションを示す。ここで、第1サンプルセットは、第1部分の外側のサンプルと第1部分の内側のサンプルとを含み、第2サンプルセットは、第1部分内のサンプルを含む。
第1部分は、隣接パーティションと重なる第1パーティションの部分であってもよい。図52Cは、隣接パーティションの一部と重なる第1パーティションの一部である第1パーティションの第1部分を示す概念図である。説明を簡単にするために、空間的に隣接する矩形パーティションと重なる部分を有する矩形パーティションが示されている。三角形パーティションなどの他の形状を有するパーティションが用いられてもよいし、重なる部分は、空間的に又は時間的に隣接するパーティションと重なっていてもよい。
また、インター予測を用いて2つのパーティションのそれぞれに対して予測画像を生成する例が示されているが、イントラ予測を用いて少なくとも1つのパーティションに対して予測画像が生成されてもよい。
図53は、トライアングルモードの一例を示すフローチャートである。
トライアングルモードでは、まず、インター予測部126は、カレントブロックを第1パーティションと第2パーティションとに分割する(ステップSx_1)。このとき、インター予測部126は、各パーティションへの分割に関する情報であるパーティション情報を予測パラメータとしてストリームに符号化してもよい。つまり、インター予測部126は、予測パラメータ生成部130を介して、パーティション情報を予測パラメータとしてエントロピー符号化部110に出力してもよい。
次に、インター予測部126は、まず、時間的または空間的にカレントブロックの周囲にある複数の符号化済みブロックのMVなどの情報に基づいて、そのカレントブロックに対して複数の候補MVを取得する(ステップSx_2)。つまり、インター予測部126は、候補MVリストを作成する。
そして、インター予測部126は、ステップSx_2で取得された複数の候補MVの中から、第1パーティションの候補MVおよび第2パーティションの候補MVを、第1MVおよび第2MVとしてそれぞれ選択する(ステップSx_3)。このとき、インター予測部126は、選択された候補MVを識別するためのMV選択情報を予測パラメータとしてストリームに符号化してもよい。つまり、インター予測部126は、予測パラメータ生成部130を介して、MV選択情報を予測パラメータとしてエントロピー符号化部110に出力してもよい。
次に、インター予測部126は、その選択された第1MVと符号化済み参照ピクチャとを用いて動き補償を行ことにより、第1予測画像を生成する(ステップSx_4)。同様に、インター予測部126は、選択された第2MVと符号化済み参照ピクチャとを用いて動き補償を行ことにより、第2予測画像を生成する(ステップSx_5)。
最後に、インター予測部126は、第1予測画像と第2予測画像とを重み付け加算することによって、カレントブロックの予測画像を生成する(ステップSx_6)。
なお、図52Aに示す例では、第1パーティションおよび第2パーティションはそれぞれ三角形であるが、台形であってもよく、それぞれ互いに異なる形状であってもよい。さらに、図52Aに示す例では、カレントブロックが2つのパーティションから構成されているが、3つ以上のパーティションから構成されていてもよい。
また、第1パーティションおよび第2パーティションは重複していてもよい。すなわち、第1パーティションおよび第2パーティションは同じ画素領域を含んでいてもよい。この場合、第1パーティションにおける予測画像と第2パーティションにおける予測画像とを用いてカレントブロックの予測画像を生成してもよい。
また、この例では2つのパーティションともにインター予測で予測画像が生成される例を示したが、少なくとも1つのパーティションについてイントラ予測によって予測画像を生成してもよい。
なお、第1MVを選択するための候補MVリストと第2MVを選択するための候補MVリストは異なっていてもよいし、同じ候補MVリストであってもよい。
なお、パーティション情報は、少なくともカレントブロックを複数のパーティションに分割する分割方向を示すインデックスを含んでいてもよい。MV選択情報は、選択された第1MVを示すインデックスおよび選択された第2MVを示すインデックスを含んでいてもよい。1つのインデックスが複数の情報を示してもよい。例えば、パーティション情報の一部または全体と、MV選択情報の一部または全体とをまとめて示す1つのインデックスが符号化されてもよい。
[MV導出 > ATMVPモード]
図54は、サブブロック単位にMVが導出されるATMVPモードの一例を示す図である。
ATMVPモードは、マージモードに分類されるモードである。例えば、ATMVPモードでは、ノーマルマージモードに用いられる候補MVリストに、サブブロック単位の候補MVが登録される。
具体的には、ATMVPモードでは、まず、図54に示すように、カレントブロックの左下に隣接するブロックのMV(MV0)によって指定される符号化済みの参照ピクチャにおいて、そのカレントブロックに対応付けられた時間MV参照ブロックが特定される。次に、カレントブロック内における各サブブロックについて、その時間MV参照ブロック内のそのサブブロックに対応する領域の符号化時に用いられたMVを特定する。このように特定されたMVが、カレントブロックのサブブロックの候補MVとして候補MVリストに含まれる。このような各サブブロックの候補MVが候補MVリストから選択される場合には、その候補MVをサブブロックのMVとして用いた動き補償がそのサブブロックに対して実行される。これにより、各サブブロックの予測画像が生成される。
なお、図54に示す例では、周辺MV参照ブロックとして、カレントブロックの左下に隣接するブロックを用いたが、それ以外のブロックを用いてもよい。また、サブブロックのサイズは、4x4画素であっても、8x8画素であっても、それ以外のサイズであってもよい。サブブロックのサイズは、スライス、ブリック、またはピクチャなどの単位で切り替えられてもよい。
[動き探索 > DMVR]
図55は、マージモードおよびDMVRの関係を示す図である。
インター予測部126は、マージモードでカレントブロックのMVを導出する(ステップSl_1)。次に、インター予測部126は、MVの探索、すなわち動き探索を行うか否かを判定する(ステップSl_2)。ここで、インター予測部126は、動き探索を行わないと判定すると(ステップSl_2のNo)、ステップSl_1で導出されたMVを、カレントブロックに対する最終のMVとして決定する(ステップSl_4)。すなわち、この場合には、マージモードでカレントブロックのMVが決定される。
一方、ステップSl_1で動き探索を行うと判定すると(ステップSl_2のYes)、インター予測部126は、ステップSl_1で導出されたMVによって示される参照ピクチャの周辺領域を探索することによって、カレントブロックに対して最終のMVを導出する(ステップSl_3)。すなわち、この場合には、DMVRでカレントブロックのMVが決定される。
図56は、MVを決定するためのDMVRの一例を説明するための概念図である。
まず、例えばマージモードにおいて、カレントブロックに対して候補MV(L0およびL1)を選択する。そして、候補MV(L0)に従って、L0リストの符号化済みピクチャである第1参照ピクチャ(L0)から参照画素を特定する。同様に、候補MV(L1)に従って、L1リストの符号化済みピクチャである第2参照ピクチャ(L1)から参照画素を特定する。これらの参照画素の平均をとることでテンプレートを生成する。
次に、そのテンプレートを用いて、第1参照ピクチャ(L0)および第2参照ピクチャ(L1)の候補MVの周辺領域をそれぞれ探索し、コストが最小となるMVを、カレントブロックの最終的なMVとして決定する。なお、コストは、例えば、テンプレートの各画素値と探索領域の各画素値との差分値および候補MV値等を用いて算出してもよい。
ここで説明した処理そのものでなくても、候補MVの周辺を探索して最終的なMVを導出することができる処理であれば、どのような処理を用いてもよい。
図57は、MVを決定するためのDMVRの他の一例を説明するための概念図である。図57に示す本例は、図56に示すDMVRの一例とは異なり、テンプレートを生成せずにコストが算出される。
まず、インター予測部126は、候補MVリストから取得した候補MVである初期MVに基づいて、L0リストとL1リストのそれぞれの参照ピクチャに含まれる参照ブロック周辺を探索する。例えば、図57に示すように、L0リストの参照ブロックに対応する初期MVは、InitMV_L0であり、L1リストの参照ブロックに対応する初期MVは、InitMV_L1である。インター予測部126は、動き探索では、まず、L0リストの参照ピクチャに対する探索位置を設定する。その設定される探索位置を示す差分ベクトル、具体的には、初期MV(すなわちInitMV_L0)によって示される位置からその探索位置への差分ベクトルは、MVd_L0である。そして、インター予測部126は、L1リストの参照ピクチャにおける探索位置を決定する。この探索位置は、初期MV(すなわちInitMV_L1)によって示される位置からその探索位置への差分ベクトルによって示される。具体的には、インター予測部126は、MVd_L0のミラーリングによってその差分ベクトルをMVd_L1として決定する。つまり、インター予測部126は、L0リストとL1リストのそれぞれの参照ピクチャにおいて、初期MVが示す位置から対称となる位置を探索位置とする。インター予測部126は、探索位置ごとに、その探索位置におけるブロック内の画素値の差分絶対値の総和(SAD)などをコストとして算出し、そのコストが最小となる探索位置を見つけ出す。
図58Aは、DMVRにおける動き探索の一例を示す図であり、図58Bは、その動き探索の一例を示すフローチャートである。
まず、インター予測部126は、Step1で、初期MVが示す探索位置(開始点ともいう)と、その周囲にある8つの探索位置とにおけるコストを算出する。そして、インター予測部126は、開始点以外の探索位置のコストが最小か否かを判定する。ここで、インター予測部126は、開始点以外の探索位置のコストが最小と判定すると、コストが最小となる探索位置に移動して、Step2の処理を行う。一方、インター予測部126は、開始点のコストが最小であれば、Step2の処理をスキップしてStep3の処理を行う。
Step2では、インター予測部126は、Step1の処理結果に応じて移動した探索位置を新たな開始点として、Step1の処理と同様の探索を行う。そして、インター予測部126は、その開始点以外の探索位置のコストが最小か否かを判定する。ここで、インター予測部126は、開始点以外の探索位置のコストが最小であれば、Step4の処理を行う。一方、インター予測部126は、開始点のコストが最小であれば、Step3の処理を行う。
Step4では、インター予測部126は、その開始点の探索位置を最終探索位置として扱い、初期MVが示す位置とその最終探索位置との差分を差分ベクトルとして決定する。
Step3では、インター予測部126は、Step1またはStep2の開始点の上下左右にある4点におけるコストに基づき、コストが最小となる小数精度の画素位置を決定し、その画素位置を最終探索位置とする。その小数精度の画素位置は、上下左右にある4点のベクトル((0,1),(0,-1),(-1,0),(1,0))を、その4点のそれぞれの探索位置におけるコストを重みとして重み付け加算することで決定される。そして、インター予測部126は、初期MVが示す位置とその最終探索位置との差分を差分ベクトルとして決定する。
[動き補償 > BIO/OBMC/LIC]
動き補償では、予測画像を生成し、その予測画像を補正するモードがある。そのモードは、例えば、後述のBIO、OBMC、およびLICである。
図59は、予測画像の生成の一例を示すフローチャートである。
インター予測部126は、予測画像を生成し(ステップSm_1)、上述の何れかのモードによってその予測画像を補正する(ステップSm_2)。
図60は、予測画像の生成の他の例を示すフローチャートである。
インター予測部126は、カレントブロックのMVを導出する(ステップSn_1)。次に、インター予測部126は、そのMVを用いて予測画像を生成し(ステップSn_2)、補正処理を行うか否かを判定する(ステップSn_3)。ここで、インター予測部126は、補正処理を行うと判定すると(ステップSn_3のYes)、その予測画像を補正することによって最終的な予測画像を生成する(ステップSn_4)。なお、後述のLICでは、ステップSn_4において、輝度および色差が補正されてもよい。一方、インター予測部126は、補正処理を行わないと判定すると(ステップSn_3のNo)、その予測画像を補正することなく最終的な予測画像として出力する(ステップSn_5)。
[動き補償 > OBMC]
動き探索により得られたカレントブロックの動き情報だけでなく、隣接ブロックの動き情報も用いて、インター予測画像が生成されてもよい。具体的には、(参照ピクチャ内の)動き探索により得られた動き情報に基づく予測画像と、(カレントピクチャ内の)隣接ブロックの動き情報に基づく予測画像と、を重み付け加算することにより、カレントブロック内のサブブロック単位でインター予測画像が生成されてもよい。このようなインター予測(動き補償)は、OBMC(ovulerlapped block motion compensation)またはOBMCモードと呼ばれることがある。
OBMCモードでは、OBMCのためのサブブロックのサイズを示す情報(例えばOBMCブロックサイズと呼ばれる)は、シーケンスレベルで信号化されてもよい。さらに、OBMCモードを適用するか否かを示す情報(例えばOBMCフラグと呼ばれる)は、CUレベルで信号化されてもよい。なお、これらの情報の信号化のレベルは、シーケンスレベルおよびCUレベルに限定される必要はなく、他のレベル(例えばピクチャレベル、スライスレベル、ブリックレベル、CTUレベルまたはサブブロックレベル)であってもよい。
OBMCモードについて、より具体的に説明する。図61および図62は、OBMCによる予測画像補正処理の概要を説明するためのフローチャートおよび概念図である。
まず、図62に示すように、カレントブロックに割り当てられたMVを用いて通常の動き補償による予測画像(Pred)を取得する。図62において、矢印“MV”は参照ピクチャを指し、予測画像を得るためにカレントピクチャのカレントブロックが何を参照しているかを示している。
次に、符号化済みの左隣接ブロックに対して既に導出されたMV(MV_L)をカレントブロックに適用(再利用)して予測画像(Pred_L)を取得する。MV(MV_L)は、カレントブロックから参照ピクチャを指す矢印“MV_L”によって示される。そして、2つの予測画像PredとPred_Lとを重ね合わせることで予測画像の1回目の補正を行う。これは、隣接ブロック間の境界を混ぜ合わせる効果を有する。
同様に、符号化済みの上隣接ブロックに対して既に導出されたMV(MV_U)をカレントブロックに適用(再利用)して予測画像(Pred_U)を取得する。MV(MV_U)は、カレントブロックから参照ピクチャを指す矢印“MV_U”によって示される。そして、予測画像Pred_Uを1回目の補正を行った予測画像(例えば、PredとPred_L)に重ね合わせることで予測画像の2回目の補正を行う。これは、隣接ブロック間の境界を混ぜ合わせる効果を有する。2回目の補正によって得られた予測画像は、隣接ブロックとの境界が混ぜ合わされた(スムージングされた)、カレントブロックの最終的な予測画像である。
なお、上述の例は、左隣接および上隣接のブロックを用いた2パスの補正方法であるが、その補正方法は、右隣接および/または下隣接のブロックも用いた3パスまたはそれ以上のパスの補正方法であってもよい。
なお、重ね合わせを行う領域はブロック全体の画素領域ではなく、ブロック境界近傍の一部の領域のみであってもよい。
なお、ここでは1枚の参照ピクチャから、追加的な予測画像Pred_LおよびPred_Uを重ね合わせることで1枚の予測画像Predを得るためのOBMCの予測画像補正処理について説明した。しかし、複数の参照画像に基づいて予測画像が補正される場合には、同様の処理が複数の参照ピクチャのそれぞれに適用されてもよい。このような場合、複数の参照ピクチャに基づくOBMCの画像補正を行うことによって、各々の参照ピクチャから、補正された予測画像を取得した後に、その取得された複数の補正予測画像をさらに重ね合わせることで最終的な予測画像を取得する。
なお、OBMCでは、カレントブロックの単位は、PU単位であっても、PUをさらに分割したサブブロック単位であってもよい。
OBMCを適用するかどうかの判定の方法として、例えば、OBMCを適用するかどうかを示す信号であるobmc_flagを用いる方法がある。具体的な一例としては、符号化装置100は、カレントブロックが動きの複雑な領域に属しているかどうかを判定してもよい。符号化装置100は、動きの複雑な領域に属している場合は、obmc_flagとして値1を設定してOBMCを適用して符号化を行い、動きの複雑な領域に属していない場合は、obmc_flagとして値0を設定してOBMCを適用せずにブロックの符号化を行う。一方、復号装置200では、ストリームに記述されたobmc_flagを復号することで、その値に応じてOBMCを適用するかどうかを切替えて復号を行う。
[動き補償 > BIO]
次に、MVを導出する方法について説明する。まず、等速直線運動を仮定したモデルに基づいてMVを導出するモードについて説明する。このモードは、BIO(bi-directional optical flow)モードと呼ばれることがある。また、このbi-directional optical flowは、BIOの代わりに、BDOFと表記されてもよい。
図63は、等速直線運動を仮定したモデルを説明するための図である。図63において、(vx,vy)は、速度ベクトルを示し、τ0、τ1は、それぞれ、カレントピクチャ(Cur Pic)と2つの参照ピクチャ(Ref0,Ref1)との間の時間的な距離を示す。(MVx0,MVy0)は、参照ピクチャRef0に対応するMVを示し、(MVx1、MVy1)は、参照ピクチャRef1に対応するMVを示す。
このとき速度ベクトル(vx,vy)の等速直線運動の仮定の下では、(MVx0,MVy0)および(MVx1,MVy1)は、それぞれ、(vxτ0,vyτ0)および(-vxτ1,-vyτ1)と表され、以下のオプティカルフロー等式(2)が成り立つ。
ここで、I(k)は、動き補償後の参照画像k(k=0,1)の輝度値を示す。このオプティカルフロー等式は、(i)輝度値の時間微分と、(ii)水平方向の速度および参照画像の空間勾配の水平成分の積と、(iii)垂直方向の速度および参照画像の空間勾配の垂直成分の積と、の和が、ゼロと等しいことを示す。このオプティカルフロー等式とエルミート補間(Hermite interpolation)との組み合わせに基づいて、候補MVリスト等から得られるブロック単位の動きベクトルが画素単位で補正されてもよい。
なお、等速直線運動を仮定したモデルに基づく動きベクトルの導出とは異なる方法で、復号装置200側でMVが導出されてもよい。例えば、複数の隣接ブロックのMVに基づいてサブブロック単位で動きベクトルが導出されてもよい。
図64は、BIOにしたがったインター予測の一例を示すフローチャートである。また、図65は、そのBIOにしたがったインター予測を行うインター予測部126の機能構成の一例を示す図である。
図65に示すように、インター予測部126は、例えば、メモリ126aと、補間画像導出部126bと、勾配画像導出部126cと、オプティカルフロー導出部126dと、補正値導出部126eと、予測画像補正部126fとを備える。なお、メモリ126aは、フレームメモリ122であってもよい。
インター予測部126は、カレントブロックを含むピクチャ(Cur Pic)と異なる2枚の参照ピクチャ(Ref0,Ref1)を用いて、2つの動きベクトル(M0,M1)を導出する。そして、インター予測部126は、その2つの動きベクトル(M0,M1)を用いてカレントブロックの予測画像を導出する(ステップSy_1)。なお、動きベクトルM0は、参照ピクチャRef0に対応する動きベクトル(MVx0,MVy0)であり、動きベクトルM1は、参照ピクチャRef1に対応する動きベクトル(MVx1,MVy1)である。
次に、補間画像導出部126bは、メモリ126aを参照し、動きベクトルM0および参照ピクチャL0を用いてカレントブロックの補間画像I0を導出する。また、補間画像導出部126bは、メモリ126aを参照し、動きベクトルM1および参照ピクチャL1を用いてカレントブロックの補間画像I1を導出する(ステップSy_2)。ここで、補間画像I0は、カレントブロックに対して導出される、参照ピクチャRef0に含まれる画像であって、補間画像I1は、カレントブロックに対して導出される、参照ピクチャRef1に含まれる画像である。補間画像I0および補間画像I1はそれぞれ、カレントブロックと同じサイズであってもよい。または、補間画像I0および補間画像I1はそれぞれ、後述の勾配画像を適切に導出するために、カレントブロックよりも大きな画像であってもよい。さらに、補間画像I0およびI1は、動きベクトル(M0,M1)および参照ピクチャ(L0,L1)と、動き補償フィルタとを適用して導出された予測画像を含んでいてもよい。
また、勾配画像導出部126cは、補間画像I0および補間画像I1から、カレントブロックの勾配画像(Ix0,Ix1,Iy0,Iy1)を導出する(ステップSy_3)。なお、水平方向の勾配画像は、(Ix0,Ix1)であり、垂直方向の勾配画像は、(Iy0,Iy1)である。勾配画像導出部126cは、例えば、補間画像に対して勾配フィルタを適用することによって、その勾配画像を導出してもよい。勾配画像は、水平方向または垂直方向に沿った画素値の空間的な変化量を示すものであればよい。
次に、オプティカルフロー導出部126dは、カレントブロックを構成する複数のサブブロック単位で、補間画像(I0,I1)および勾配画像(Ix0,Ix1,Iy0,Iy1)を用いて上述の速度ベクトルであるオプティカルフロー(vx,vy)を導出する(ステップSy_4)。オプティカルフローは、画素の空間的な移動量を補正する係数であり、局所動き推定値、補正動きベクトル、または補正重みベクトルと呼ばれてもよい。一例として、サブブロックは、4x4画素のサブCUであってもよい。なお、オプティカルフローの導出は、サブブロック単位でなく、画素単位などの他の単位で行われてもよい。
次に、インター予測部126は、オプティカルフロー(vx,vy)を用いてカレントブロックの予測画像を補正する。例えば、補正値導出部126eは、オプティカルフロー(vx,vy)を用いてカレントブロックに含まれる画素の値の補正値を導出する(ステップSy_5)。そして、予測画像補正部126fは、補正値を用いてカレントブロックの予測画像を補正してもよい(ステップSy_6)。なお、補正値は各画素単位で導出されてもよいし、複数の画素単位またはサブブロック単位で導出されてもよい。
なお、BIOの処理フローは、図64に開示した処理に限定されない。図64に開示した処理の一部の処理のみを実施してもよいし、異なる処理を追加または置換してもよいし、異なる処理順で実行してもよい。
[動き補償 > LIC]
次に、LIC(local illumination compensation)を用いて予測画像(予測)を生成するモードの一例について説明する。
図66Aは、LICによる輝度補正処理を用いた予測画像生成方法の一例を説明するための図である。また、図66Bは、そのLICを用いた予測画像生成方法の一例を示すフローチャートである。
まず、インター予測部126は、符号化済みの参照ピクチャからMVを導出して、カレントブロックに対応する参照画像を取得する(ステップSz_1)。
次に、インター予測部126は、カレントブロックに対して、参照ピクチャとカレントピクチャとで輝度値がどのように変化したかを示す情報を抽出する(ステップSz_2)。この抽出は、カレントピクチャにおける符号化済み左隣接参照領域(周辺参照領域)および符号化済み上隣参照領域(周辺参照領域)の輝度画素値と、導出されたMVで指定された参照ピクチャ内の同等位置における輝度画素値とに基づいて行われる。そして、インター予測部126は、輝度値がどのように変化したかを示す情報を用いて、輝度補正パラメータを算出する(ステップSz_3)。
インター予測部126は、MVで指定された参照ピクチャ内の参照画像に対してその輝度補正パラメータを適用する輝度補正処理を行うことで、カレントブロックに対する予測画像を生成する(ステップSz_4)。つまり、MVで指定された参照ピクチャ内の参照画像である予測画像に対して、輝度補正パラメータに基づく補正が行われる。この補正では、輝度が補正されてもよく、色差が補正されてもよい。即ち、色差がどのように変化したかを示す情報を用いて色差の補正パラメータが算出され、色差の補正処理が行われてもよい。
なお、図66Aにおける周辺参照領域の形状は一例であり、これ以外の形状を用いてもよい。
また、ここでは1枚の参照ピクチャから予測画像を生成する処理について説明したが、複数枚の参照ピクチャから予測画像を生成する場合も同様であり、各々の参照ピクチャから取得した参照画像に、上述と同様の方法で輝度補正処理を行ってから予測画像を生成してもよい。
LICを適用するかどうかの判定の方法として、例えば、LICを適用するかどうかを示す信号であるlic_flagを用いる方法がある。具体的な一例としては、符号化装置100において、カレントブロックが、輝度変化が発生している領域に属しているかどうかを判定し、輝度変化が発生している領域に属している場合はlic_flagとして値1を設定してLICを適用して符号化を行い、輝度変化が発生している領域に属していない場合はlic_flagとして値0を設定してLICを適用せずに符号化を行う。一方、復号装置200では、ストリームに記述されたlic_flagを復号することで、その値に応じてLICを適用するかどうかを切替えて復号を行ってもよい。
LICを適用するかどうかの判定の別の方法として、例えば、周辺ブロックでLICを適用したかどうかに従って判定する方法もある。具体的な一例としては、カレントブロックがマージモードで処理されている場合、インター予測部126は、マージモードにおけるMVの導出の際に選択した周辺の符号化済みブロックがLICを適用して符号化されたかどうかを判定する。インター予測部126は、その結果に応じてLICを適用するかどうかを切替えて符号化を行う。なお、この例の場合でも、同じ処理が復号装置200側の処理に適用される。
LIC(輝度補正処理)について図66Aおよび図66Bを用いて説明したが、以下、その詳細を説明する。
まず、インター予測部126は、符号化済みピクチャである参照ピクチャからカレントブロックに対応する参照画像を取得するためのMVを導出する。
次に、インター予測部126は、カレントブロックに対して、左隣接および上隣接の符号化済み周辺参照領域の輝度画素値と、MVで指定された参照ピクチャ内の同等位置における輝度画素値とを用いて、参照ピクチャとカレントピクチャとで輝度値がどのように変化したかを示す情報を抽出して輝度補正パラメータを算出する。例えば、カレントピクチャ内の周辺参照領域内のある画素の輝度画素値をp0とし、当該画素と同等位置の、参照ピクチャ内の周辺参照領域内の画素の輝度画素値をp1とする。インター予測部126は、周辺参照領域内の複数の画素に対して、A×p1+B=p0を最適化する係数AおよびBを輝度補正パラメータとして算出する。
次に、インター予測部126は、MVで指定された参照ピクチャ内の参照画像に対して輝度補正パラメータを用いて輝度補正処理を行うことで、カレントブロックに対する予測画像を生成する。例えば、参照画像内の輝度画素値をp2とし、輝度補正処理後の予測画像の輝度画素値をp3とする。インター予測部126は、参照画像内の各画素に対して、A×p2+B=p3を算出することで輝度補正処理後の予測画像を生成する。
なお、図66Aに示す周辺参照領域の一部が用いられてもよい。例えば、上隣接画素および左隣接画素のそれぞれから間引いた所定数の画素を含む領域を周辺参照領域として用いてもよい。また、周辺参照領域は、カレントブロックに隣接する領域に限らず、カレントブロックに隣接しない領域であってもよい。また、図66Aに示す例では、参照ピクチャ内の周辺参照領域は、カレントピクチャ内の周辺参照領域から、カレントピクチャのMVで指定される領域であるが、他のMVで指定される領域であってもよい。例えば、当該他のMVは、カレントピクチャ内の周辺参照領域のMVであってもよい。
なお、ここでは、符号化装置100における動作を説明したが、復号装置200における動作も同様である。
なお、LICは輝度のみではなく、色差に適用してもよい。このとき、Y、Cb、およびCrのそれぞれに対して個別に補正パラメータを導出してもよいし、いずれかに対して共通の補正パラメータを用いてもよい。
また、LIC処理はサブブロック単位で適用してもよい。例えば、カレントサブブロックの周辺参照領域と、カレントサブブロックのMVで指定された参照ピクチャ内の参照サブブロックの周辺参照領域を用いて補正パラメータを導出してもよい。
[予測制御部]
予測制御部128は、イントラ予測画像(イントラ予測部124から出力される画像または信号)およびインター予測画像(インター予測部126から出力される画像または信号)のいずれかを選択し、選択した予測画像を減算部104および加算部116に出力する。
[予測パラメータ生成部]
予測パラメータ生成部130は、イントラ予測、インター予測、および予測制御部128における予測画像の選択などに関する情報を予測パラメータとしてエントロピー符号化部110に出力してもよい。エントロピー符号化部110は、予測パラメータ生成部130から入力されるその予測パラメータ、量子化部108から入力される量子化係数に基づいて、ストリームを生成してもよい。予測パラメータは復号装置200に使用されてもよい。復号装置200は、ストリームを受信して復号し、イントラ予測部124、インター予測部126および予測制御部128において行われる予測処理と同じ処理を行ってもよい。予測パラメータは、選択予測信号(例えば、MV、予測タイプ、または、イントラ予測部124またはインター予測部126で用いられた予測モード)、または、イントラ予測部124、インター予測部126および予測制御部128において行われる予測処理に基づく、あるいはその予測処理を示す、任意のインデックス、フラグ、もしくは値を含んでいてもよい。
[復号装置]
次に、上記の符号化装置100から出力されたストリームを復号可能な復号装置200について説明する。図67は、実施の形態に係る復号装置200の機能構成の一例を示すブロック図である。復号装置200は、符号化された画像であるストリームをブロック単位で復号する装置である。
図67に示すように、復号装置200は、エントロピー復号部202と、逆量子化部204と、逆変換部206と、加算部208と、ブロックメモリ210と、ループフィルタ部212と、フレームメモリ214と、イントラ予測部216と、インター予測部218と、予測制御部220と、予測パラメータ生成部222と、分割決定部224とを備える。なお、イントラ予測部216およびインター予測部218のそれぞれは、予測処理部の一部として構成されている。
[復号装置の実装例]
図68は、復号装置200の実装例を示すブロック図である。復号装置200は、プロセッサb1およびメモリb2を備える。例えば、図67に示された復号装置200の複数の構成要素は、図68に示されたプロセッサb1およびメモリb2によって実装される。
プロセッサb1は、情報処理を行う回路であり、メモリb2にアクセス可能な回路である。例えば、プロセッサb1は、ストリームを復号する専用または汎用の電子回路である。プロセッサb1は、CPUのようなプロセッサであってもよい。また、プロセッサb1は、複数の電子回路の集合体であってもよい。また、例えば、プロセッサb1は、図67等に示された復号装置200の複数の構成要素のうち、情報を記憶するための構成要素を除く、複数の構成要素の役割を果たしてもよい。
メモリb2は、プロセッサb1がストリームを復号するための情報が記憶される専用または汎用のメモリである。メモリb2は、電子回路であってもよく、プロセッサb1に接続されていてもよい。また、メモリb2は、プロセッサb1に含まれていてもよい。また、メモリb2は、複数の電子回路の集合体であってもよい。また、メモリb2は、磁気ディスクまたは光ディスク等であってもよいし、ストレージまたは記録媒体等と表現されてもよい。また、メモリb2は、不揮発性メモリでもよいし、揮発性メモリでもよい。
例えば、メモリb2には、画像が記憶されてもよいし、ストリームが記憶されてもよい。また、メモリb2には、プロセッサb1がストリームを復号するためのプログラムが記憶されていてもよい。
また、例えば、メモリb2は、図67等に示された復号装置200の複数の構成要素のうち、情報を記憶するための構成要素の役割を果たしてもよい。具体的には、メモリb2は、図67に示されたブロックメモリ210およびフレームメモリ214の役割を果たしてもよい。より具体的には、メモリb2には、再構成画像(具体的には、再構成済みブロックまたは再構成済みピクチャ等)が記憶されてもよい。
なお、復号装置200において、図67等に示された複数の構成要素の全てが実装されなくてもよいし、上述された複数の処理の全てが行われなくてもよい。図67等に示された複数の構成要素の一部は、他の装置に含まれていてもよいし、上述された複数の処理の一部は、他の装置によって実行されてもよい。
以下、復号装置200の全体的な処理の流れを説明した後に、復号装置200に含まれる各構成要素について説明する。なお、復号装置200に含まれる各構成要素のうち、符号化装置100に含まれる構成要素と同様の処理を行うものについては、詳細な説明を省略する。例えば、復号装置200に含まれる、逆量子化部204、逆変換部206、加算部208、ブロックメモリ210、フレームメモリ214、イントラ予測部216、インター予測部218、予測制御部220、およびループフィルタ部212は、符号化装置100に含まれる、逆量子化部112、逆変換部114、加算部116、ブロックメモリ118、フレームメモリ122、イントラ予測部124、インター予測部126、予測制御部128、およびループフィルタ部120と、それぞれ同様の処理を行う。
[復号処理の全体フロー]
図69は、復号装置200による全体的な復号処理の一例を示すフローチャートである。
まず、復号装置200の分割決定部224は、エントロピー復号部202から入力されるパラメータに基づいて、ピクチャに含まれる複数の固定サイズのブロック(128×128画素)のそれぞれの分割パターンを決定する(ステップSp_1)。この分割パターンは、符号化装置100によって選択された分割パターンである。そして、復号装置200は、その分割パターンを構成する複数のブロックのそれぞれに対してステップSp_2~Sp_6の処理を行う。
エントロピー復号部202は、カレントブロックの符号化された量子化係数および予測パラメータを復号(具体的にはエントロピー復号)する(ステップSp_2)。
次に、逆量子化部204および逆変換部206は、複数の量子化係数に対して逆量子化および逆変換を行うことによって、そのカレントブロックの予測残差を復元する(ステップSp_3)。
次に、イントラ予測部216、インター予測部218および予測制御部220からなる予測処理部は、カレントブロックの予測画像を生成する(ステップSp_4)。
次に、加算部208は、予測残差に予測画像を加算することによってカレントブロックを再構成画像(復号画像ブロックともいう)に再構成する(ステップSp_5)。
そして、この再構成画像が生成されると、ループフィルタ部212は、その再構成画像に対してフィルタリングを行う(ステップSp_6)。
そして、復号装置200は、ピクチャ全体の復号が完了したか否かを判定し(ステップSp_7)、完了していないと判定する場合(ステップSp_7のNo)、ステップSp_1からの処理を繰り返し実行する。
なお、これらのステップSp_1~Sp_7の処理は、復号装置200によってシーケンシャルに行われてもよく、それらの処理のうちの一部の複数の処理が並列に行われてもよく、順番が入れ替えられてもよい。
[分割決定部]
図70は、分割決定部224と他の構成要素との関係を示す図である。分割決定部224は、一例として以下の処理を行ってもよい。
分割決定部224は、例えば、ブロックメモリ210またはフレームメモリ214からブロック情報を収集し、さらに、エントロピー復号部202からパラメータを取得する。そして、分割決定部224は、そのブロック情報およびパラメータに基づいて固定サイズのブロックの分割パターンを決定してもよい。そして、分割決定部224は、その決定された分割パターンを示す情報を逆変換部206、イントラ予測部216およびインター予測部218に出力してもよい。逆変換部206は、分割決定部224からの情報によって示される分割パターンに基づいて変換係数に対して逆変換を行ってもよい。イントラ予測部216およびインター予測部218は、分割決定部224からの情報によって示される分割パターンに基づいて予測画像を生成してもよい。
[エントロピー復号部]
図71は、エントロピー復号部202の機能構成の一例を示すブロック図である。
エントロピー復号部202は、ストリームをエントロピー復号することによって、量子化係数、予測パラメータ、および分割パターンに関するパラメータなどを生成する。そのエントロピー復号には、例えば、CABACが用いられる。具体的には、エントロピー復号部202は、例えば、二値算術復号部202aと、コンテキスト制御部202bと、多値化部202cとを備える。二値算術復号部202aは、コンテキスト制御部202bによって導出されたコンテキスト値を用いてストリームを二値信号に算術復号する。コンテキスト制御部202bは、符号化装置100のコンテキスト制御部110bと同様、シンタックス要素の特徴または周囲の状況に応じたコンテキスト値、すなわち二値信号の発生確率を導出する。多値化部202cは、二値算術復号部202aから出力される二値信号を、上述の量子化係数などを示す多値信号に変換する多値化(debinarize)を行う。この多値化は、上述の二値化の方式にしたがって行われる。
エントロピー復号部202は、ブロック単位で量子化係数を逆量子化部204に出力する。エントロピー復号部202は、イントラ予測部216、インター予測部218および予測制御部220に、ストリーム(図1参照)に含まれている予測パラメータを出力してもよい。イントラ予測部216、インター予測部218および予測制御部220は、符号化装置100側におけるイントラ予測部124、インター予測部126および予測制御部128で行われる処理と同じ予測処理を実行することができる。
[エントロピー復号部]
図72は、エントロピー復号部202におけるCABACの流れを示す図である。
まず、エントロピー復号部202におけるCABACでは、初期化が行われる。この初期化では、二値算術復号部202aにおける初期化と、初期コンテキスト値の設定とが行われる。そして、二値算術復号部202aおよび多値化部202cは、例えばCTUの符号化データに対して、算術復号と多値化とを実行する。このとき、コンテキスト制御部202bは、算術復号が行われるたびにコンテキスト値の更新を行う。そして、コンテキスト制御部202bは、後処理として、コンテキスト値を退避させる。この退避されたコンテキスト値は、例えば次のCTUに対するコンテキスト値の初期値のために用いられる。
[逆量子化部]
逆量子化部204は、エントロピー復号部202からの入力であるカレントブロックの量子化係数を逆量子化する。具体的には、逆量子化部204は、カレントブロックの量子化係数の各々について、当該量子化係数に対応する量子化パラメータに基づいて当該量子化係数を逆量子化する。そして、逆量子化部204は、カレントブロックの逆量子化された量子化係数(つまり変換係数)を逆変換部206に出力する。
図73は、逆量子化部204の機能構成の一例を示すブロック図である。
逆量子化部204は、例えば、量子化パラメータ生成部204aと、予測量子化パラメータ生成部204bと、量子化パラメータ記憶部204dと、逆量子化処理部204eとを備える。
図74は、逆量子化部204による逆量子化の一例を示すフローチャートである。
逆量子化部204は、一例として、図74に示すフローに基づいてCUごとに逆量子化処理を実施してもよい。具体的には、量子化パラメータ生成部204aは、逆量子化を行うか否かを判定する(ステップSv_11)。ここで、逆量子化を行うと判定すると(ステップSv_11のYes)、量子化パラメータ生成部204aは、カレントブロックの差分量子化パラメータをエントロピー復号部202から取得する(ステップSv_12)。
次に、予測量子化パラメータ生成部204bは、カレントブロックとは異なる処理単位の量子化パラメータを量子化パラメータ記憶部204dから取得する(ステップSv_13)。予測量子化パラメータ生成部204bは、その取得した量子化パラメータに基づいて、カレントブロックの予測量子化パラメータを生成する(ステップSv_14)。
そして、量子化パラメータ生成部204aは、エントロピー復号部202から取得された、カレントブロックの差分量子化パラメータと、予測量子化パラメータ生成部204bによって生成された、カレントブロックの予測量子化パラメータとを加算する(ステップSv_15)。この加算によって、カレントブロックの量子化パラメータが生成される。また、量子化パラメータ生成部204aは、そのカレントブロックの量子化パラメータを量子化パラメータ記憶部204dに格納する(ステップSv_16)。
次に、逆量子化処理部204eは、ステップSv_15で生成された量子化パラメータを用いてカレントブロックの量子化係数を変換係数に逆量子化する(ステップSv_17)。
なお、差分量子化パラメータは、ビットシーケンスレベル、ピクチャレベル、スライスレベル、ブリックレベルまたはCTUレベルで復号されてもよい。また、量子化パラメータの初期値を、シーケンスレベル、ピクチャレベル、スライスレベル、ブリックレベルまたはCTUレベルで復号してもよい。このとき、量子化パラメータは量子化パラメータの初期値と差分量子化パラメータとを用いて生成されてもよい。
なお、逆量子化部204は複数の逆量子化器を備えていてもよく、複数の逆量子化方法から選択した逆量子化方法を用いて量子化係数を逆量子化してもよい。
[逆変換部]
逆変換部206は、逆量子化部204からの入力である変換係数を逆変換することにより予測残差を復元する。
例えばストリームから読み解かれた情報がEMTまたはAMTを適用することを示す場合(例えばAMTフラグが真)、逆変換部206は、読み解かれた変換タイプを示す情報に基づいてカレントブロックの変換係数を逆変換する。
また例えば、ストリームから読み解かれた情報がNSSTを適用することを示す場合、逆変換部206は、変換係数に逆再変換を適用する。
図75は、逆変換部206による処理の一例を示すフローチャートである。
例えば、逆変換部206は、直交変換を行わないことを示す情報がストリームに存在するか否かを判定する(ステップSt_11)。ここで、その情報が存在しないと判定すると(ステップSt_11のNo)、逆変換部206は、エントロピー復号部202によって復号された、変換タイプを示す情報を取得する(ステップSt_12)。次に、逆変換部206は、その情報に基づいて、符号化装置100の直交変換に用いられた変換タイプを決定する(ステップSt_13)。そして、逆変換部206は、その決定した変換タイプを用いて逆直交変換を行う(ステップSt_14)。
図76は、逆変換部206による処理の他の例を示すフローチャートである。
例えば、逆変換部206は、変換サイズが所定値以下であるか否かを判定する(ステップSu_11)。ここで、所定値以下であると判定すると(ステップSu_11のYes)、逆変換部206は、第1の変換タイプ群に含まれる1つ以上の変換タイプのうち、いずれの変換タイプが符号化装置100によって用いられたかを示す情報をエントロピー復号部202から取得する(ステップSu_12)。なお、このような情報は、エントロピー復号部202によって復号されて逆変換部206に出力される。
逆変換部206は、その情報に基づいて、符号化装置100における直交変換に用いられた変換タイプを決定する(ステップSu_13)。そして、逆変換部206は、その決定した変換タイプを用いてカレントブロックの変換係数を逆直交変換する(ステップSu_14)。一方、逆変換部206は、ステップSu_11において、変換サイズが所定値以下でないと判定すると(ステップSu_11のNo)、第2の変換タイプ群を用いてカレントブロックの変換係数を逆直交変換する(ステップSu_15)。
なお、逆変換部206による逆直交変換は、一例としてTUごとに図75または図76に示すフローに従って実施されてもよい。また、直交変換に用いた変換タイプを示す情報を復号せず、予め規定された変換タイプを用いて逆直交変換を行ってもよい。また、変換タイプは、具体的にはDST7またはDCT8などであって、逆直交変換では、その変換タイプに対応する逆変換基底関数が用いられる。
[加算部]
加算部208は、逆変換部206からの入力である予測残差と予測制御部220からの入力である予測画像とを加算することによりカレントブロックを再構成する。つまり、カレントブロックの再構成画像が生成される。そして、加算部208は、カレントブロックの再構成画像をブロックメモリ210およびループフィルタ部212に出力する。
[ブロックメモリ]
ブロックメモリ210は、イントラ予測で参照されるブロックであって、カレントピクチャ内のブロックを格納するための記憶部である。具体的には、ブロックメモリ210は、加算部208から出力された再構成画像を格納する。
[ループフィルタ部]
ループフィルタ部212は、加算部208によって生成された再構成画像にループフィルタを施し、フィルタが施された再構成画像をフレームメモリ214および表示装置等に出力する。
ストリームから読み解かれたALFのオン/オフを示す情報がALFのオンを示す場合、局所的な勾配の方向および活性度に基づいて複数のフィルタの中から1つのフィルタが選択され、選択されたフィルタが再構成画像に適用される。
図77は、ループフィルタ部212の機能構成の一例を示すブロック図である。なお、ループフィルタ部212は、符号化装置100のループフィルタ部120と同様の構成を有する。
ループフィルタ部212は、例えば図77に示すように、デブロッキング・フィルタ処理部212aと、SAO処理部212bと、ALF処理部212cとを備える。デブロッキング・フィルタ処理部212aは、再構成画像に対して上述のデブロッキング・フィルタ処理を施す。SAO処理部212bは、デブロッキング・フィルタ処理後の再構成画像に対して上述のSAO処理を施す。また、ALF処理部212cは、SAO処理後の再構成画像に対して上述のALF処理を適用する。なお、ループフィルタ部212は、図77に開示した全ての処理部を備えていなくてもよく、一部の処理部のみを備えていてもよい。また、ループフィルタ部212は、図77に開示した処理順とは異なる順番で上述の各処理を行う構成であってもよい。
[フレームメモリ]
フレームメモリ214は、インター予測に用いられる参照ピクチャを格納するための記憶部であり、フレームバッファと呼ばれることもある。具体的には、フレームメモリ214は、ループフィルタ部212によってフィルタが施された再構成画像を格納する。
[予測部(イントラ予測部・インター予測部・予測制御部)]
図78は、復号装置200の予測部で行われる処理の一例を示すフローチャートである。なお、一例として予測部は、イントラ予測部216、インター予測部218、および予測制御部220の全てまたは一部の構成要素からなる。予測処理部は、例えばイントラ予測部216およびインター予測部218を含む。
予測部は、カレントブロックの予測画像を生成する(ステップSq_1)。この予測画像は、予測信号または予測ブロックともいう。なお、予測信号には、例えばイントラ予測信号またはインター予測信号がある。具体的には、予測部は、他のブロックに対する予測画像の生成、予測残差の復元、および予測画像の加算が行われることによって既に得られている再構成画像を用いて、カレントブロックの予測画像を生成する。復号装置200の予測部は、符号化装置100の予測部によって生成される予測画像と同一の予測画像を生成する。つまり、それらの予測部に用いられる予測画像の生成方法は、互いに共通または対応している。
再構成画像は、例えば、参照ピクチャの画像であってもよいし、カレントブロックを含むピクチャであるカレントピクチャ内の復号済みのブロック(すなわち、上述の他のブロック)の画像であってもよい。カレントピクチャ内の復号済みのブロックは、例えばカレントブロックの隣接ブロックである。
図79は、復号装置200の予測部で行われる処理の他の例を示すフローチャートである。
予測部は、予測画像を生成するための方式またはモードを判定する(ステップSr_1)。例えば、この方式またはモードは、例えば予測パラメータなどに基づいて判定されてもよい。
予測部は、予測画像を生成するためのモードとして第1の方式を判定した場合には、その第1の方式にしたがって予測画像を生成する(ステップSr_2a)。また、予測部は、予測画像を生成するためのモードとして第2の方式を判定した場合には、その第2の方式にしたがって予測画像を生成する(ステップSr_2b)。また、予測部は、予測画像を生成するためのモードとして第3の方式を判定した場合には、その第3の方式にしたがって予測画像を生成する(ステップSr_2c)。
第1の方式、第2の方式、および第3の方式は、予測画像を生成するための互いに異なる方式であって、それぞれ例えば、インター予測方式、イントラ予測方式、および、それら以外の予測方式であってもよい。これらの予測方式では、上述の再構成画像を用いてもよい。
図80A及び図80Bは、復号装置200の予測部で行われる処理の他の例を示すフローチャートである。
予測部は、一例として図80A及び図80Bに示すフローに従って予測処理を行ってもよい。なお、図80A及び図80Bに示すイントラブロックコピーは、インター予測に属する1つのモードであって、カレントピクチャに含まれるブロックが参照画像または参照ブロックとして参照されるモードである。つまり、イントラブロックコピーでは、カレントピクチャと異なるピクチャは参照されない。また、図80Aに示すPCMモードは、イントラ予測に属する1つのモードであって、変換および量子化が行われないモードである。
[イントラ予測部]
イントラ予測部216は、ストリームから読み解かれたイントラ予測モードに基づいて、ブロックメモリ210に格納されたカレントピクチャ内のブロックを参照してイントラ予測を行うことで、カレントブロックの予測画像(すなわちイントラ予測画像)を生成する。具体的には、イントラ予測部216は、カレントブロックに隣接するブロックの画素値(例えば輝度値、色差値)を参照してイントラ予測を行うことでイントラ予測画像を生成し、イントラ予測画像を予測制御部220に出力する。
なお、色差ブロックのイントラ予測において輝度ブロックを参照するイントラ予測モードが選択されている場合は、イントラ予測部216は、カレントブロックの輝度成分に基づいて、カレントブロックの色差成分を予測してもよい。
また、ストリームから読み解かれた情報がPDPCの適用を示す場合、イントラ予測部216は、水平/垂直方向の参照画素の勾配に基づいてイントラ予測後の画素値を補正する。
図81は、復号装置200のイントラ予測部216による処理の一例を示す図である。
イントラ予測部216は、まず、1を示すMPMフラグがストリームに存在するか否かを判定する(ステップSw_11)。ここで、1を示すMPMフラグが存在すると判定すると(ステップSw_11のYes)、イントラ予測部216は、MPMのうち、符号化装置100において選択されたイントラ予測モードを示す情報をエントロピー復号部202から取得する(ステップSw_12)。なお、その情報は、エントロピー復号部202によって復号されてイントラ予測部216に出力される。次に、イントラ予測部216は、MPMを決定する(ステップSw_13)。MPMは、例えば6つのイントラ予測モードからなる。そして、イントラ予測部216は、そのMPMに含まれる複数のイントラ予測モードの中から、ステップSw_12で取得された情報によって示されるイントラ予測モードを決定する(ステップSw_14)。
一方、イントラ予測部216は、ステップSw_11において、1を示すMPMフラグがストリームに存在しないと判定すると(ステップSw_11のNo)、符号化装置100において選択されたイントラ予測モードを示す情報を取得する(ステップSw_15)。つまり、イントラ予測部216は、MPMに含まれない1つ以上のイントラ予測モードのうち、符号化装置100において選択されたイントラ予測モードを示す情報をエントロピー復号部202から取得する。なお、その情報は、エントロピー復号部202によって復号されてイントラ予測部216に出力される。そして、イントラ予測部216は、そのMPMに含まれていない1つ以上のイントラ予測モードの中から、ステップSw_15で取得された情報によって示されるイントラ予測モードを決定する(ステップSw_17)。
イントラ予測部216は、ステップSw_14またはステップSw_17において決定されたイントラ予測モードにしたがって予測画像を生成する(ステップSw_18)。
[インター予測部]
インター予測部218は、フレームメモリ214に格納された参照ピクチャを参照して、カレントブロックを予測する。予測は、カレントブロックまたはカレントブロック内のサブブロックの単位で行われる。なお、サブブロックはブロックに含まれていて、ブロックより小さい単位である。サブブロックのサイズは、4x4画素であっても、8x8画素であっても、それ以外のサイズであってもよい。サブブロックのサイズは、スライス、ブリック、またはピクチャなどの単位で切り替えられてもよい。
例えば、インター予測部218は、ストリーム(例えば、エントロピー復号部202から出力される予測パラメータ)から読み解かれた動き情報(例えばMV)を用いて動き補償を行うことでカレントブロックまたはサブブロックのインター予測画像を生成し、インター予測画像を予測制御部220に出力する。
ストリームから読み解かれた情報がOBMCモードを適用することを示す場合、インター予測部218は、動き探索により得られたカレントブロックの動き情報だけでなく、隣接ブロックの動き情報も用いて、インター予測画像を生成する。
また、ストリームから読み解かれた情報がFRUCモードを適用することを示す場合、インター予測部218は、ストリームから読み解かれたパターンマッチングの方法(バイラテラルマッチングまたはテンプレートマッチング)に従って動き探索を行うことにより動き情報を導出する。そして、インター予測部218は、導出された動き情報を用いて動き補償(予測)を行う。
また、インター予測部218は、BIOモードが適用される場合に、等速直線運動を仮定したモデルに基づいてMVを導出する。また、ストリームから読み解かれた情報がアフィンモードを適用することを示す場合には、インター予測部218は、複数の隣接ブロックのMVに基づいてサブブロック単位でMVを導出する。
[MV導出のフロー]
図82は、復号装置200におけるMV導出の一例を示すフローチャートである。
インター予測部218は、例えば、動き情報(例えばMV)を復号するか否かを判定する。例えば、インター予測部218は、ストリームに含まれる予測モードに応じて判定してもよく、ストリームに含まれるその他の情報に基づいて判定してもよい。ここで、インター予測部218は、動き情報を復号すると判定すると、その動き情報を復号するモードで、カレントブロックのMVを導出する。一方、インター予測部218は、動き情報を復号しないと判定すると、動き情報を復号しないモードでMVを導出する。
ここで、MV導出のモードには、後述のノーマルインターモード、ノーマルマージモード、FRUCモードおよびアフィンモードなどがある。これらのモードのうち、動き情報を復号するモードには、ノーマルインターモード、ノーマルマージモード、およびアフィンモード(具体的には、アフィンインターモードおよびアフィンマージモード)などがある。なお、動き情報には、MVだけでなく、後述の予測MV選択情報が含まれてもよい。また、動き情報を復号しないモードには、FRUCモードなどがある。インター予測部218は、これらの複数のモードから、カレントブロックのMVを導出するためのモードを選択し、その選択されたモードを用いてカレントブロックのMVを導出する。
図83は、復号装置200におけるMV導出の他の例を示すフローチャートである。
インター予測部218は、例えば、差分MVを復号するか否かを判定する、例えば、インター予測部218は、ストリームに含まれる予測モードに応じて判定してもよく、ストリームに含まれるその他の情報に基づいて判定してもよい。ここで、インター予測部218は、差分MVを復号すると判定すると、差分MVを復号するモードで、カレントブロックのMVを導出してもよい。この場合、例えばストリームに含まれる差分MVが予測パラメータとして復号される。
一方、インター予測部218は、差分MVを復号しないと判定すると、差分MVを復号しないモードでMVを導出する。この場合には、符号化された差分MVはストリームに含まれない。
ここで、上述のようにMVの導出のモードには、後述のノーマルインター、ノーマルマージモード、FRUCモードおよびアフィンモードなどがある。これらのモードのうち、差分MVを符号化するモードには、ノーマルインターモードおよびアフィンモード(具体的には、アフィンインターモード)などがある。また、差分MVを符号化しないモードには、FRUCモード、ノーマルマージモードおよびアフィンモード(具体的には、アフィンマージモード)などがある。インター予測部218は、これらの複数のモードから、カレントブロックのMVを導出するためのモードを選択し、その選択されたモードを用いてカレントブロックのMVを導出する。
[MV導出 > ノーマルインターモード]
例えば、ストリームから読み解かれた情報がノーマルインターモードを適用することを示す場合、インター予測部218は、ストリームから読み解かれた情報に基づいて、ノーマルマージモードでMVを導出し、そのMVを用いて動き補償(予測)を行う。
図84は、復号装置200におけるノーマルインターモードによるインター予測の例を示すフローチャートである。
復号装置200のインター予測部218は、ブロックごとに、そのブロックに対して動き補償を行う。このときには、インター予測部218は、まず、時間的または空間的にカレントブロックの周囲にある複数の復号済みブロックのMVなどの情報に基づいて、そのカレントブロックに対して複数の候補MVを取得する(ステップSg_11)。つまり、インター予測部218は、候補MVリストを作成する。
次に、インター予測部218は、ステップSg_11で取得された複数の候補MVの中から、N個(Nは2以上の整数)の候補MVのそれぞれを予測動きベクトル候補(予測MV候補ともいう)として、予め決められた優先順位に従って抽出する(ステップSg_12)。なお、その優先順位は、N個の予測MV候補のそれぞれに対して予め定められている。
次に、インター予測部218は、入力されたストリームから予測MV選択情報を復号し、その復号された予測MV選択情報を用いて、そのN個の予測MV候補の中から1つの予測MV候補を、カレントブロックの予測MVとして選択する(ステップSg_13)。
次に、インター予測部218は、入力されたストリームから差分MVを復号し、その復号された差分MVである差分値と、選択された予測MVとを加算することによって、カレントブロックのMVを導出する(ステップSg_14)。
最後に、インター予測部218は、その導出されたMVと復号済み参照ピクチャとを用いてカレントブロックに対して動き補償を行ことにより、そのカレントブロックの予測画像を生成する(ステップSg_15)。ステップSg_11~Sg_15の処理は、各ブロックに対して実行される。例えば、スライスに含まれる全てのブロックのそれぞれに対してステップSg_11~Sg_15の処理が実行されると、そのスライスに対するノーマルインターモードを用いたインター予測が終了する。また、ピクチャに含まれる全てのブロックのそれぞれに対してステップSg_11~Sg_15の処理が実行されると、そのピクチャに対するノーマルインターモードを用いたインター予測が終了する。なお、ステップSg_11~Sg_15の処理は、スライスに含まれる全てのブロックに対して実行されず、一部のブロックに対して実行されると、そのスライスに対するノーマルインターモードを用いたインター予測が終了してもよい。ステップSg_11~Sg_15の処理は、同様に、ピクチャに含まれる一部のブロックに対して実行されると、そのピクチャに対するノーマルインターモードを用いたインター予測が終了してもよい。
[MV導出 > ノーマルマージモード]
例えば、ストリームから読み解かれた情報がノーマルマージモードの適用を示す場合、インター予測部218は、ノーマルマージモードでMVを導出し、そのMVを用いて動き補償(予測)を行う。
図85は、復号装置200におけるノーマルマージモードによるインター予測の例を示すフローチャートである。
インター予測部218は、まず、時間的または空間的にカレントブロックの周囲にある複数の復号済みブロックのMVなどの情報に基づいて、そのカレントブロックに対して複数の候補MVを取得する(ステップSh_11)。つまり、インター予測部218は、候補MVリストを作成する。
次に、インター予測部218は、ステップSh_11で取得された複数の候補MVの中から1つの候補MVを選択することによって、カレントブロックのMVを導出する(ステップSh_12)。具体的には、インター予測部218は、例えばストリームに予測パラメータとして含まれるMV選択情報を取得し、そのMV選択情報によって識別される候補MVを、カレントブロックのMVとして選択する。
最後に、インター予測部218は、その導出されたMVと復号済み参照ピクチャとを用いてカレントブロックに対して動き補償を行ことにより、そのカレントブロックの予測画像を生成する(ステップSh_13)。ステップSh_11~Sh_13の処理は例えば各ブロックに対して実行される。例えば、スライスに含まれる全てのブロックのそれぞれに対してステップSh_11~Sh_13の処理が実行されると、そのスライスに対するノーマルマージモードを用いたインター予測が終了する。また、ピクチャに含まれる全てのブロックのそれぞれに対してステップSh_11~Sh_13の処理が実行されると、そのピクチャに対するノーマルマージモードを用いたインター予測が終了する。なお、ステップSh_11~Sh_13の処理は、スライスに含まれる全てのブロックに対して実行されず、一部のブロックに対して実行されると、そのスライスに対するノーマルマージモードを用いたインター予測が終了してもよい。ステップSh_11~Sh_13の処理は、同様に、ピクチャに含まれる一部のブロックに対して実行されると、そのピクチャに対するノーマルマージモードを用いたインター予測が終了してもよい。
[MV導出 > FRUCモード]
例えば、ストリームから読み解かれた情報がFRUCモードの適用を示す場合、インター予測部218は、FRUCモードでMVを導出し、そのMVを用いて動き補償(予測)を行う。この場合、動き情報は、符号化装置100側から信号化されずに、復号装置200側で導出される。例えば、復号装置200は、動き探索を行うことにより動き情報を導出してもよい。この場合、復号装置200は、カレントブロックの画素値を用いずに動き探索を行う。
図86は、復号装置200におけるFRUCモードによるインター予測の例を示すフローチャートである。
まず、インター予測部218は、カレントブロックに空間的または時間的に隣接する各復号済みブロックのMVを参照して、それらのMVを候補MVとして示すリスト(すなわち、候補MVリストであって、ノーマルマージモードの候補MVリストと共通であってもよい)を生成する(ステップSi_11)。次に、インター予測部218は、候補MVリストに登録されている複数の候補MVの中からベスト候補MVを選択する(ステップSi_12)。例えば、インター予測部218は、候補MVリストに含まれる各候補MVの評価値を算出し、その評価値に基づいて1つの候補MVをベスト候補MVとして選択する。そして、インター予測部218は、選択されたベスト候補MVに基づいて、カレントブロックのためのMVを導出する(ステップSi_14)。具体的には、例えば、選択されたベスト候補MVがそのままカレントブロックのためのMVとして導出される。また例えば、選択されたベスト候補MVに対応する参照ピクチャ内の位置の周辺領域において、パターンマッチングを行うことにより、カレントブロックのためのMVが導出されてもよい。すなわち、ベスト候補MVの周辺の領域に対して、参照ピクチャにおけるパターンマッチングおよび評価値を用いた探索を行い、さらに評価値が良い値となるMVがあった場合は、ベスト候補MVをそのMVに更新して、それをカレントブロックの最終的なMVとしてもよい。より良い評価値を有するMVへの更新を実施しなくてもよい。
最後に、インター予測部218は、その導出されたMVと復号済み参照ピクチャとを用いてカレントブロックに対して動き補償を行ことにより、そのカレントブロックの予測画像を生成する(ステップSi_15)。ステップSi_11~Si_15の処理は例えば各ブロックに対して実行される。例えば、スライスに含まれる全てのブロックのそれぞれに対してステップSi_11~Si_15の処理が実行されると、そのスライスに対するFRUCモードを用いたインター予測が終了する。また、ピクチャに含まれる全てのブロックのそれぞれに対してステップSi_11~Si_15の処理が実行されると、そのピクチャに対するFRUCモードを用いたインター予測が終了する。サブブロック単位でも上述のブロック単位と同様に処理されてもよい。
[MV導出 > アフィンマージモード]
例えば、ストリームから読み解かれた情報がアフィンマージモードの適用を示す場合、インター予測部218は、アフィンマージモードでMVを導出し、そのMVを用いて動き補償(予測)を行う。
図87は、復号装置200におけるアフィンマージモードによるインター予測の例を示すフローチャートである。
アフィンマージモードでは、まず、インター予測部218は、カレントブロックの制御ポイントのそれぞれのMVを導出する(ステップSk_11)。制御ポイントは、図46Aに示すように、カレントブロックの左上角および右上角のポイント、或いは図46Bに示すように、カレントブロックの左上角、右上角および左下角のポイントである。
例えば、図47A~図47Cに示すMVの導出方法を用いる場合、インター予測部218は、図47Aに示すように、復号済みブロックA(左)、ブロックB(上)、ブロックC(右上)、ブロックD(左下)およびブロックE(左上)の順序にこれらのブロックを検査し、アフィンモードで復号された最初の有効なブロックを特定する。
インター予測部218は、特定されたアフィンモードで復号された最初の有効なブロックを用いて、制御ポイントのMVを導出する。例えば、ブロックAが特定され、ブロックAが2つの制御ポイントを有する場合、図47Bに示すように、インター予測部218は、ブロックAを含む復号済みブロックの左上角および右上角の動きベクトルv3およびv4をカレントブロックに投影することによって、カレントブロックの左上角制御ポイントの動きベクトルv0と、右上角制御ポイントの動きベクトルv1とを算出する。これにより、各制御ポイントのMVが導出される。
なお、図49Aに示すように、ブロックAが特定され、ブロックAが2つの制御ポイントを有する場合に、3つの制御ポイントのMVを算出してもよく、図49Bに示すように、ブロックAが特定され、ブロックAが3つの制御ポイントを有する場合に、2つの制御ポイントのMVを算出してもよい。
また、ストリームに予測パラメータとしてMV選択情報が含まれている場合には、インター予測部218は、そのMV選択情報を用いてカレントブロックの各制御ポイントのMVを導出してもよい。
次に、インター予測部218は、カレントブロックに含まれる複数のサブブロックのそれぞれについて、動き補償を行う。すなわち、インター予測部218は、その複数のサブブロックのそれぞれについて、2つの動きベクトルv0およびv1と上述の式(1A)とを用いて、或いは3つの動きベクトルv0、v1およびv2と上述の式(1B)とを用いて、そのサブブロックのMVをアフィンMVとして算出する(ステップSk_12)。そして、インター予測部218は、それらのアフィンMVおよび復号済み参照ピクチャを用いてそのサブブロックに対して動き補償を行う(ステップSk_13)。カレントブロックに含まれる全てのサブブロックのそれぞれに対してステップSk_12およびSk_13の処理が実行されると、そのカレントブロックに対するアフィンマージモードを用いたインター予測が終了する。つまり、カレントブロックに対して動き補償が行われ、そのカレントブロックの予測画像が生成される。
なお、ステップSk_11では、上述の候補MVリストが生成されてもよい。候補MVリストは、例えば、各制御ポイントに対して複数のMV導出方法を用いて導出した候補MVを含むリストであってもよい。複数のMV導出方法は、図47A~図47Cに示すMVの導出方法、図48Aおよび図48Bに示すMVの導出方法、図49Aおよび図49Bに示すMVの導出方法、および、その他のMVの導出方法の任意の組合せであってもよい。
なお、候補MVリストは、アフィンモード以外の、サブブロック単位で予測を行うモードの候補MVを含んでもよい。
なお、候補MVリストとして、例えば、2つの制御ポイントを有するアフィンマージモードの候補MVと、3つの制御ポイントを有するアフィンマージモードの候補MVとを含む候補MVリストを生成してもよい。または、2つの制御ポイントを有するアフィンマージモードの候補MVを含む候補MVリストと、3つの制御ポイントを有するアフィンマージモードの候補MVを含む候補MVリストとをそれぞれ生成してもよい。または、2つの制御ポイントを有するアフィンマージモードと、3つの制御ポイントを有するアフィンマージモードとのうちの一方のモードの候補MVを含む候補MVリストを生成してもよい。
[MV導出 > アフィンインターモード]
例えば、ストリームから読み解かれた情報がアフィンインターモードの適用を示す場合、インター予測部218は、アフィンインターモードでMVを導出し、そのMVを用いて動き補償(予測)を行う。
図88は、復号装置200におけるアフィンインターモードによるインター予測の例を示すフローチャートである。
アフィンインターモードでは、まず、インター予測部218は、カレントブロックの2つまたは3つの制御ポイントのそれぞれの予測MV(v0,v1)または(v0,v1,v2)を導出する(ステップSj_11)。制御ポイントは、例えば図46Aまたは図46Bに示すように、カレントブロックの左上角、右上角或いは左下角のポイントである。
インター予測部218は、ストリームに予測パラメータとして含まれる予測MV選択情報を取得し、その予測MV選択情報によって識別されるMVを用いて、カレントブロックの各制御ポイントの予測MVを導出する。例えば、図48Aおよび図48Bに示すMVの導出方法を用いる場合、インター予測部218は、図48Aまたは図48Bに示すカレントブロックの各制御ポイント近傍の復号済みブロックのうち、予測MV選択情報によって識別されるブロックのMVを選択することによって、カレントブロックの制御ポイントの予測MV(v0,v1)または(v0,v1,v2)を導出する。
次に、インター予測部218は、例えば、ストリームに予測パラメータとして含まれる各差分MVを取得し、カレントブロックの各制御ポイントの予測MVと、その予測MVに対応する差分MVとを加算する(ステップSj_12)。これにより、カレントブロックの各制御ポイントのMVが導出される。
次に、インター予測部218は、カレントブロックに含まれる複数のサブブロックのそれぞれについて、動き補償を行う。すなわち、インター予測部218は、その複数のサブブロックのそれぞれについて、2つの動きベクトルv0およびv1と上述の式(1A)とを用いて、或いは3つの動きベクトルv0、v1およびv2と上述の式(1B)とを用いて、そのサブブロックのMVをアフィンMVとして算出する(ステップSj_13)。そして、インター予測部218は、それらのアフィンMVおよび復号済み参照ピクチャを用いてそのサブブロックに対して動き補償を行う(ステップSj_14)。カレントブロックに含まれる全てのサブブロックのそれぞれに対してステップSj_13およびSj_14の処理が実行されると、そのカレントブロックに対するアフィンマージモードを用いたインター予測が終了する。つまり、カレントブロックに対して動き補償が行われ、そのカレントブロックの予測画像が生成される。
なお、ステップSj_11では、ステップSk_11と同様、上述の候補MVリストが生成されてもよい。
[MV導出 > トライアングルモード]
例えば、ストリームから読み解かれた情報がトライアングルモードの適用を示す場合、インター予測部218は、トライアングルモードでMVを導出し、そのMVを用いて動き補償(予測)を行う。
図89は、復号装置200におけるトライアングルモードによるインター予測の例を示すフローチャートである。
トライアングルモードでは、まず、インター予測部218は、カレントブロックを第1パーティションと第2パーティションとに分割する(ステップSx_11)。このとき、インター予測部218は、各パーティションへの分割に関する情報であるパーティション情報を予測パラメータとしてストリームから取得してもよい。そして、インター予測部218は、そのパーティション情報に応じて、カレントブロックを第1パーティションと第2パーティションとに分割してもよい。
次に、インター予測部218は、まず、時間的または空間的にカレントブロックの周囲にある複数の復号済みブロックのMVなどの情報に基づいて、そのカレントブロックに対して複数の候補MVを取得する(ステップSx_12)。つまり、インター予測部218は、候補MVリストを作成する。
そして、インター予測部218は、ステップSx_11で取得された複数の候補MVの中から、第1パーティションの候補MVおよび第2パーティションの候補MVを、第1MVおよび第2MVとしてそれぞれ選択する(ステップSx_13)。このとき、インター予測部218は、選択された候補MVを識別するためのMV選択情報を予測パラメータとしてストリームから取得してもよい。そして、インター予測部218は、そのMV選択情報に応じて第1MVおよび第2MVを選択してもよい。
次に、インター予測部218は、その選択された第1MVと復号済み参照ピクチャとを用いて動き補償を行ことにより、第1予測画像を生成する(ステップSx_14)。同様に、インター予測部218は、選択された第2MVと復号済み参照ピクチャとを用いて動き補償を行ことにより、第2予測画像を生成する(ステップSx_15)。
最後に、インター予測部218は、第1予測画像と第2予測画像とを重み付け加算することによって、カレントブロックの予測画像を生成する(ステップSx_16)。
[動き探索 > DMVR]
例えば、ストリームから読み解かれた情報がDMVRの適用を示す場合、インター予測部218は、DMVRで動き探索を行う。
図90は、復号装置200におけるDMVRによる動き探索の例を示すフローチャートである。
インター予測部218は、まず、マージモードでカレントブロックのMVを導出する(ステップSl_11)。次に、インター予測部218は、ステップSl_11で導出されたMVによって示される参照ピクチャの周辺領域を探索することによって、カレントブロックに対して最終のMVを導出する(ステップSl_12)。すなわち、DMVRによってカレントブロックのMVが決定される。
図91は、復号装置200におけるDMVRによる動き探索の詳細な一例を示すフローチャートである。
まず、インター予測部218は、図58Aに示すStep1で、初期MVが示す探索位置(開始点ともいう)と、その周囲にある8つの探索位置とにおけるコストを算出する。そして、インター予測部218は、開始点以外の探索位置のコストが最小か否かを判定する。ここで、インター予測部218は、開始点以外の探索位置のコストが最小と判定すると、コストが最小となる探索位置に移動して、図58Aに示すStep2の処理を行う。一方、インター予測部218は、開始点のコストが最小であれば、図58Aに示すStep2の処理をスキップしてStep3の処理を行う。
図58Aに示すStep2では、インター予測部218は、Step1の処理結果に応じて移動した探索位置を新たな開始点として、Step1の処理と同様の探索を行う。そして、インター予測部218は、その開始点以外の探索位置のコストが最小か否かを判定する。ここで、インター予測部218は、開始点以外の探索位置のコストが最小であれば、Step4の処理を行う。一方、インター予測部218は、開始点のコストが最小であれば、Step3の処理を行う。
Step4では、インター予測部218は、その開始点の探索位置を最終探索位置として扱い、初期MVが示す位置とその最終探索位置との差分を差分ベクトルとして決定する。
図58Aに示すStep3では、インター予測部218は、Step1またはStep2の開始点の上下左右にある4点におけるコストに基づき、コストが最小となる小数精度の画素位置を決定し、その画素位置を最終探索位置とする。その小数精度の画素位置は、上下左右にある4点のベクトル((0,1),(0,-1),(-1,0),(1,0))を、その4点のそれぞれの探索位置におけるコストを重みとして重み付け加算することで決定される。そして、インター予測部218は、初期MVが示す位置とその最終探索位置との差分を差分ベクトルとして決定する。
[動き補償 > BIO/OBMC/LIC]
例えば、ストリームから読み解かれた情報が予測画像の補正の適用を示す場合、インター予測部218は、予測画像を生成すると、その補正のモードにしたがって予測画像を補正する。そのモードは、例えば、上述のBIO、OBMC、およびLICなどである。
図92は、復号装置200における予測画像の生成の一例を示すフローチャートである。
インター予測部218は、予測画像を生成し(ステップSm_11)、上述の何れかのモードによってその予測画像を補正する(ステップSm_12)。
図93は、復号装置200における予測画像の生成の他の例を示すフローチャートである。
インター予測部218は、カレントブロックのMVを導出する(ステップSn_11)。次に、インター予測部218は、そのMVを用いて予測画像を生成し(ステップSn_12)、補正処理を行うか否かを判定する(ステップSn_13)。例えば、インター予測部218は、ストリームに含まれる予測パラメータを取得し、その予測パラメータに基づいて、補正処理を行うか否かを判定する。この予測パラメータは、例えば、上述の各モードを適用するか否かを示すフラグである。ここで、インター予測部218は、補正処理を行うと判定すると(ステップSn_13のYes)、その予測画像を補正することによって最終的な予測画像を生成する(ステップSn_14)。なお、LICでは、ステップSn_14において、予測画像の輝度および色差が補正されてもよい。一方、インター予測部218は、補正処理を行わないと判定すると(ステップSn_13のNo)、その予測画像を補正することなく最終的な予測画像として出力する(ステップSn_15)。
[動き補償 > OBMC]
例えば、ストリームから読み解かれた情報がOBMCの適用を示す場合、インター予測部218は、予測画像を生成すると、OBMCにしたがって予測画像を補正する。
図94は、復号装置200におけるOBMCによる予測画像の補正の例を示すフローチャートである。なお、図94のフローチャートは、図62に示すカレントピクチャおよび参照ピクチャを用いた予測画像の補正の流れを示す。
まず、インター予測部218は、図62に示すように、カレントブロックに割り当てられたMVを用いて通常の動き補償による予測画像(Pred)を取得する。
次に、インター予測部218は、復号済みの左隣接ブロックに対して既に導出されたMV(MV_L)をカレントブロックに適用(再利用)して予測画像(Pred_L)を取得する。そして、インター予測部218は、2つの予測画像PredとPred_Lとを重ね合わせることで予測画像の1回目の補正を行う。これは、隣接ブロック間の境界を混ぜ合わせる効果を有する。
同様に、インター予測部218は、復号済みの上隣接ブロックに対して既に導出されたMV(MV_U)をカレントブロックに適用(再利用)して予測画像(Pred_U)を取得する。そして、インター予測部218は、予測画像Pred_Uを1回目の補正を行った予測画像(例えば、PredとPred_L)に重ね合わせることで予測画像の2回目の補正を行う。これは、隣接ブロック間の境界を混ぜ合わせる効果を有する。2回目の補正によって得られた予測画像は、隣接ブロックとの境界が混ぜ合わされた(スムージングされた)、カレントブロックの最終的な予測画像である。
[動き補償 > BIO]
例えば、ストリームから読み解かれた情報がBIOの適用を示す場合、インター予測部218は、予測画像を生成すると、BIOにしたがって予測画像を補正する。
図95は、復号装置200におけるBIOによる予測画像の補正の例を示すフローチャートである。
インター予測部218は、図63に示すように、カレントブロックを含むピクチャ(Cur Pic)と異なる2枚の参照ピクチャ(Ref0,Ref1)を用いて、2つの動きベクトル(M0,M1)を導出する。そして、インター予測部218は、その2つの動きベクトル(M0,M1)を用いてカレントブロックの予測画像を導出する(ステップSy_11)。なお、動きベクトルM0は、参照ピクチャRef0に対応する動きベクトル(MVx0,MVy0)であり、動きベクトルM1は、参照ピクチャRef1に対応する動きベクトル(MVx1,MVy1)である。
次に、インター予測部218は、動きベクトルM0および参照ピクチャL0を用いてカレントブロックの補間画像I0を導出する。また、インター予測部218は、動きベクトルM1および参照ピクチャL1を用いてカレントブロックの補間画像I1を導出する(ステップSy_12)。ここで、補間画像I0は、カレントブロックに対して導出される、参照ピクチャRef0に含まれる画像であって、補間画像I1は、カレントブロックに対して導出される、参照ピクチャRef1に含まれる画像である。補間画像I0および補間画像I1はそれぞれ、カレントブロックと同じサイズであってもよい。または、補間画像I0および補間画像I1はそれぞれ、後述の勾配画像を適切に導出するために、カレントブロックよりも大きな画像であってもよい。さらに、補間画像I0およびI1は、動きベクトル(M0,M1)および参照ピクチャ(L0,L1)と、動き補償フィルタとを適用して導出された予測画像を含んでいてもよい。
また、インター予測部218は、補間画像I0および補間画像I1から、カレントブロックの勾配画像(Ix0,Ix1,Iy0,Iy1)を導出する(ステップSy_13)。なお、水平方向の勾配画像は、(Ix0,Ix1)であり、垂直方向の勾配画像は、(Iy0,Iy1)である。インター予測部218は、例えば、補間画像に対して勾配フィルタを適用することによって、その勾配画像を導出してもよい。勾配画像は、水平方向または垂直方向に沿った画素値の空間的な変化量を示すものであればよい。
次に、インター予測部218は、カレントブロックを構成する複数のサブブロック単位で、補間画像(I0,I1)および勾配画像(Ix0,Ix1,Iy0,Iy1)を用いて上述の速度ベクトルであるオプティカルフロー(vx,vy)を導出する(ステップSy_14)。一例として、サブブロックは、4x4画素のサブCUであってもよい。
次に、インター予測部218は、オプティカルフロー(vx,vy)を用いてカレントブロックの予測画像を補正する。例えば、インター予測部218は、オプティカルフロー(vx,vy)を用いてカレントブロックに含まれる画素の値の補正値を導出する(ステップSy_15)。そして、インター予測部218は、補正値を用いてカレントブロックの予測画像を補正してもよい(ステップSy_16)。なお、補正値は各画素単位で導出されてもよいし、複数の画素単位またはサブブロック単位で導出されてもよい。
なお、BIOの処理フローは、図95に開示した処理に限定されない。図95に開示した処理の一部の処理のみを実施してもよいし、異なる処理を追加または置換してもよいし、異なる処理順で実行してもよい。
[動き補償 > LIC]
例えば、ストリームから読み解かれた情報がLICの適用を示す場合、インター予測部218は、予測画像を生成すると、LICにしたがって予測画像を補正する。
図96は、復号装置200におけるLICによる予測画像の補正の例を示すフローチャートである。
まず、インター予測部218は、MVを用いて、復号済みの参照ピクチャからカレントブロックに対応する参照画像を取得する(ステップSz_11)。
次に、インター予測部218は、カレントブロックに対して、参照ピクチャとカレントピクチャとで輝度値がどのように変化したかを示す情報を抽出する(ステップSz_12)。この抽出は、図66Aに示すように、カレントピクチャにおける復号済み左隣接参照領域(周辺参照領域)および復号済み上隣参照領域(周辺参照領域)の輝度画素値と、導出されたMVで指定された参照ピクチャ内の同等位置における輝度画素値とに基づいて行われる。そして、インター予測部218は、輝度値がどのように変化したかを示す情報を用いて、輝度補正パラメータを算出する(ステップSz_13)。
インター予測部218は、MVで指定された参照ピクチャ内の参照画像に対してその輝度補正パラメータを適用する輝度補正処理を行うことで、カレントブロックに対する予測画像を生成する(ステップSz_14)。つまり、MVで指定された参照ピクチャ内の参照画像である予測画像に対して、輝度補正パラメータに基づく補正が行われる。この補正では、輝度が補正されてもよく、色差が補正されてもよい。
[予測制御部]
予測制御部220は、イントラ予測画像およびインター予測画像のいずれかを選択し、選択した予測画像を加算部208に出力する。全体的に、復号装置200側の予測制御部220、イントラ予測部216およびインター予測部218の構成、機能、および処理は、符号化装置100側の予測制御部128、イントラ予測部124およびインター予測部126の構成、機能、および処理と対応していてもよい。
[第1態様]
図97は、VPSにおいて、符号化装置100が、1つまたは複数のPTLパラメータと1つまたは複数のHRDパラメータとを通知するシンタックスの一例を示す図である。
PTLパラメータは、プロファイル情報と、レベル情報と、ティア情報とを含む情報を表すパラメータである。ここで、プロファイル情報とは、動画像符号化技術における特定のサブセットを示す情報を含む情報である。レベル情報とは、動画像符号化技術におけるパラメータおよびシンタックス要素の値等に関する制約群に関する情報を含む情報である。ティア情報とは、あるレベル制約群において入れ子構造をなしているレベル制約のカテゴリに関する情報を含む情報である。
HRDパラメータは、ビットレートおよびCPB(Coded Picture Buffer)サイズ等の情報を含む情報を表すパラメータである。
また、OLS(Output Layer Set)は、少なくとも1つの出力レイヤを含むレイヤの集合である。例えば、出力レイヤとは、当該レイヤの復号ピクチャが出力されることが指定されたものである。符号化装置100及び復号装置200は、OLSを、同時に復号し画像を表示することができるレイヤの組合せとして扱うことが可能である。
図97に示されるように、符号化装置100は、1つのVPSにおいて共通である、各パラメータの個数に関する情報(例えば、vps_num_ptls_hrdsという値)に応じて、1つまたは複数のPTLパラメータ(例えば、profile_tier_level())と、1つまたは複数のHRDパラメータ(例えば、ols_hrd_parameters())を通知するようにビットストリームを生成してもよい。
なお、符号化装置100は、所定のフラグ(例えば、vps_general_hrd_params_present_flag)を通知することにより、general_hrd_parameters()およびols_hrd_parameters()等を含むHRDパラメータ群の通知を一括して省略したビットストリームを生成してもよい。
また、符号化装置100は、1つのVPSに共通のテンポラルレイヤIDの最大値に関する情報(例えば、ptl_hrd_max_tenporal_id[i]の値)に応じて、i番目のPTLパラメータとi番目のHRDパラメータとが含むテンポラルサブレイヤに関する情報の個数を変更してもよい。
また、符号化装置100は、1つのVPSに共通のインデックス(例えば、ols_ptl_hrd_idx[i])を用いて、符号化装置100が、VPSで通知する1つまたは複数のPTLパラメータ、および、1つまたは複数のHRDパラメータのうち、i番目のOLSに対応するPTLパラメータおよびHRDパラメータに関する情報を通知するようなビットストリームを生成してもよい。
なお、PTLパラメータおよびHRDパラメータ群は、1つのVPSにおいて共通である、各パラメータの個数に関する情報(例えば、vps_num_ptls_hrds)と、1つのVPSに共通のテンポラルレイヤIDの最大値情報(例えば、ptl_hrd_max_temporal_id)とより、後に通知されれば、図97に示された例と異なる順序で通知されてもよい。
図98は、PTLパラメータのシンタックスの一例を示す図である。
符号化装置100が、図97に示されるシンタックスにおけるi番目のPTLパラメータを通知する際に、引数maxNumSubLayersMinus1に対してi番目のptl_hrd_max_tmporal_idの値をセットし、profile_tier_level()をコールする。符号化装置100は、引数maxNumSubLayersMinus1の値に応じて、ビットストリームにおいて通知するsublayer_level_present_flagまたはsublayer_level_idcの個数を変更する。
図99は、HRDパラメータのシンタックスの一例を示す図である。
符号化装置100は、図97に示されるシンタックスにおけるi番目のHRDパラメータを通知する際に、引数maxSubLayersにi番目のptl_hrd_max_temporal_idをセットし、ols_hrd_parameters()をコールする。符号化装置100は、引数maxSubLayersの値に応じて、ビットストリームにおいて通知するfixed_pic_rate_general_flagまたはsublayer_hrd_parameters()の個数を変更する。
図100は、復号装置200が、VPSにて通知されるPTLパラメータおよびHRDパラメータを解析する処理を示すフローチャートである。
まず、符号化装置100は、PTLパラメータとHRDパラメータとに共通の、両者の個数に関する情報Nを取得する(ステップS100)。両者の個数に関する情報Nは、例えば、図97のvps_num_ptls_hrdsである。
次に、符号化装置100は、1つのVPSにおいて、共通である各パラメータの個数に関する情報Nに応じてループ処理を実行する。符号化装置100は、ループ処理におけるi番目のPTLパラメータとHRDパラメータとに共通のテンポラルレイヤIDの最大値に関する情報を取得する(ステップS101)。i番目のPTLパラメータとHRDパラメータとに共通のテンポラルレイヤIDの最大値に関する情報とは、例えば、図97に示されるptl_hrd_max_tenporal_id[i]である。また、iは、0~N-1の間の整数である。
さらに、符号化装置100は、1つのVPSにおいて、共通である各パラメータの個数に関する情報Nに応じてループ処理を実行する。符号化装置100は、N個のPTLパラメータを取得する(ステップS102)。
次に、符号化装置100は、OLSの個数(図97に示されるTotalNumOlss)に応じてループ処理を実行する。符号化装置100は、TotalNumOlssの値以下の個数である、各OLSに対応するPTLパラメータまたはHRDパラメータに共通のインデックスを取得する(ステップS103)。各OLSに対応するPTLパラメータまたはHRDパラメータに共通のインデックスとは、例えば、図97のols_hrd_parameters()である。
続いて、符号化装置100は、N回のループを開始する。そして、符号化装置100は、対応するテンポラルIDの最大値に応じてHRDパラメータを取得する(ステップS104)。ここで、符号化装置100は、N回のループを終了する。
以上のように、第1態様の構成によれば、符号化装置100は、PTLパラメータとHRDパラメータとの間で共通のパラメータを用いることで、VPSパラメータのビット数を削減できる可能性がある。ここで、PTLパラメータとHRDパラメータとの間で共通のパラメータとは、vps_num_ptls_hrds、ptl_hrd_max_temporal_id[i]、または、ols_ptl_hrd_idx[i]である。
また、符号化装置100は、OLSとPTLパラメータまたはHRDパラメータとの対応関係を単純化することができ、復号装置200の構成を簡単化することができる可能性がある。
[他の態様との組み合わせ]
本態様は、本開示の実施の形態における他の態様の少なくとも一部と組み合わされてもよい。また、本態様のフローチャートに記載の一部の処理、装置の一部の構成、シンタックスの一部等は、他の態様と組み合わせて実施されてもよい。
なお、符号化装置100は、復号装置200における上記VPS解析処理と同様の手順で、パラメータを出力してもよい。また、符号化装置100は、本態様に記載したすべての構成要素がいつも必要とは限らず、第1態様の一部の構成要素のみを備えていてもよい。
[第2態様]
図101は、VPSにおいて、1つまたは複数のPTLパラメータが通知されるシンタックスの一例を示す図である。
図101に示される例のように、符号化装置100は、PTLパラメータ等の各パラメータの個数を示す情報(例えば、vps_num_ptlsが示す個数を示す値等)に応じて、1つまたは複数のPTLパラメータ等(例えば、profile_tier_level())を通知するようにビットストリームを生成してもよい。
また、符号化装置100は、VPSで通知される1つまたは複数のPTLパラメータのうち、i番目のOLSに対応するPTLがいずれであるかを示すために、個々のOLSについてインデックス(例えば、ols_ptl_idx[i])の値を通知するようにビットストリームを生成してもよい。
なお、符号化装置100は、OLSに含まれるレイヤの数が1のOLSについては、当該OLSのレイヤの復号時に参照されるSPSにおいて通知するPTLパラメータと同一のPTLパラメータを、当該OLSに対応するPTLパラメータとしてVPSで通知するようなビットストリームを生成してもよい。ここで、例えば、i番目のOLSに含まれるレイヤの数をNumLayersInOls[i]で表す。
なお、ここで述べられるレイヤとは、NALユニット層で通知されるnuh_layer_idで識別されるレイヤを指し、NALユニット層で通知されるnuh_temporal_id_plus1により識別されるテンポラルレイヤとは別のものである。図101に示される例は、ols_ptl_idx[i]のセマンティックスの一例である。
以下に、ols_ptl_idx[i]のセマンティックスの一例を示す。
ols_ptl_idx[i]は,i番目のolsに適用されるprofile_tier_level()シンタックス構造のリストに対して、インデックスを特定する。ols_hrd_idx[i]の値は、0からnum_ols_hrd_params_minus1の範囲である。
NumLayersInOls[i]が1に等しいとき、i番目のolsに適用されるprofile_tier_level()シンタックス構造が、i番目のOLSにおいてレイヤから参照されるVPSとSPSとの両方に存在する。そして、profile_tier_level()シンタックス構造がVPSとSPSとの両方に存在する場合、i番目のOLSのために、VPSとSPSとに符号化されるprofile_tier_level()シンタックス構造が同一であることが、ビットストリームの規格適合性を満たすための条件である。
なお、符号化装置100は、ols_ptl_idx[i]が存在しない場合にいずれのインデックスを用いるかを決定する方法を予め定めることで、ols_ptl_idx[i]の符号化を省略する場合があってもよい。
なお、符号化装置100は、OLSに含まれるレイヤの数が1のOLSについては、当該OLSに対応するPTLパラメータを、当該OLSのレイヤの復号時に参照されるSPSで通知することなく、VPSで通知するようにビットストリームを生成してもよい。
また、当該OLSが0番目のOLSである場合、符号化装置100は、対応するPTLパラメータを、VPSで通知することなく、当該OLSのレイヤの復号時に参照されるSPSで通知するようにビットストリームを生成してもよい。
図102は、符号化装置100が、VPSおよびSPSにてPTLパラメータを通知する処理を示すフローチャートである。
まず、符号化装置100は、各レイヤのループである第1ループを開始する。符号化装置100は、第1のループにおいて、レイヤ毎にPTLパラメータを決定する(ステップS200)。そして、符号化装置100は、各レイヤのループである第1ループを終了する。
次に、符号化装置100は、各OLSのためのループである第2ループを開始する。符号化装置100は、OLS毎にPTLパラメータを決定し、VPSにOLS毎にPTLパラメータを記述する。
続いて、符号化装置100は、OLS内のレイヤ数が1に等しいか否かを判定する(ステップS201)。符号化装置100が、OLS内のレイヤ数が1に等しいと判定した場合(ステップS201でYes)、符号化装置100は、第1のループで符号化装置100がレイヤ毎に決定したPTLパラメータから、OLSに含まれるレイヤに対応するPTLパラメータを取得する(ステップS203)。符号化装置100は、ステップS203で、OLSに含まれるレイヤに対応するPTLパラメータをコピーしてもよい。
続いて、符号化装置100は、VPSに、取得したPTLパラメータを書き込む(ステップS204)。
符号化装置100が、OLS内のレイヤ数が1に等しいと判断しなかった場合(ステップS201でNo)、符号化装置100は、当該OLSのPTLパラメータを決定する(ステップS202)。
そして、符号化装置100は、VPSに、決定したPTLパラメータを書き込む(ステップS204)。そして、符号化装置100は、各OLSのためのループである第2ループを終了する。
さらに、符号化装置100は、各レイヤのためのループである第3ループを開始する。符号化装置100は、第1のループでレイヤ毎に決定したPTLパラメータを、各レイヤに対応するSPSに書き込む(ステップS205)。
そして、符号化装置100は、各レイヤのためのループである第3ループを終了する。
以上のように、第2態様の構成によれば、符号化装置100は、全てのOLSに対応するPTLパラメータをVPSを解析することで取得可能なビットストリームを生成することが可能となり、複数のレイヤを含むビットストリームを処理するシステムまたは復号装置200におけるビットストリーム解析処理を簡単化できる可能性がある。
[他の態様との組み合わせ]
本態様は、本開示の実施の形態における他の態様の少なくとも一部と組み合わされてもよい。また、本態様のフローチャートに記載の一部の処理、装置の一部の構成、シンタックスの一部等は、他の態様と組み合わせて実施されてもよい。
なお、復号装置200における上記VPS解析処理と同様の手順で、符号化装置100は、パラメータを出力してもよい。また、本態様に記載したすべての構成要素がいつも必要とは限らず、第2態様の一部の構成要素のみを備えていてもよい。
[第3態様]
図103は、VPSにおいて、1つまたは複数のHRDパラメータが通知されるシンタックスの一例を示す図である。図103に示される例のように、符号化装置100は、HRDパラメータの個数に関する情報に応じて、1つまたは複数のHRDパラメータを通知するようにビットストリームを生成する。ここで、HRDパラメータの個数に関する情報とは、例えば、num_ols_hrd_params_minus1 + 1という式で表される値であってもよい。また、HRDパラメータとは、ols_hrd_parameters()で示される値であってもよい。
なお、符号化装置100は、フラグによって表される情報をビットストリームに書きこむことにより、HRDパラメータ群の通知を一括して省略したビットストリームを生成してもよい。ここで、フラグとは、例えば、vps_general_hrd_params_present_flagである。また、HRDパラメータ群に含まれるHRDパラメータは、例えば、general_hrd_parameters()、または、ols_hrd_parameters()である。
また、符号化装置100は、テンポラルレイヤIDの最大値に関する情報に応じて、i番目のHRDパラメータが含むテンポラルサブレイヤに関する情報の個数を変更してもよい。ここで、テンポラルレイヤIDの最大値に関する情報とは、例えば、hrd_max_tid[i]の値である。
また、符号化装置100は、全てのOLSについてインデックスを通知することによって、VPSで通知される1つまたは複数のHRDパラメータのうち、i番目のOLSに対応するHRDパラメータがいずれであるかを通知するようなビットストリームを生成してもよい。
なお、OLSに含まれるレイヤの数が1のOLSについては、符号化装置100は、当該OLSのレイヤの復号時に参照するSPSで通知するHRDパラメータと同じ内容を表すHRDパラメータを、当該OLSに対応するHRDパラメータとしてVPSで通知するようにビットストリームを生成してもよい。
なお、ここで述べられるレイヤとは、NALユニット層で通知されるnuh_layer_idで識別されるレイヤを指し、符号化装置100が、NALユニット層で通知するnuh_temporal_id_plus1により識別されるテンポラルレイヤとは異なるものである。
以下に、ols_hrd_idx[i]のセマンティックスの一例を示す。
ols_hrd_idx[i]は,i番目のolsに適用されるols_hrd_parameters()のインデックスを特定する。ols_hrd_idx[i]の値は、0からnum_ols_hrd_params_minus1の範囲である。
NumLayersInOls[i]が1に等しいとき、i番目のolsに適用される、general_hrd_parameters()とols_hrd_parameters()とが、i番目のOLSにおいてレイヤから参照されるVPSとSPSとの両方に存在する。そして、i番目のOLSのために、VPSとSPSとに符号化されるgeneral_hrd_parameters()とols_hrd_parameters()とが同一であることが、ビットストリームの規格適合性を満たすための条件である。
なお、符号化装置100は、ols_hrd_idx[i]]が存在しない場合にいずれのインデックスを用いるかを決定する方法を予め定めることで、ols_hrd_idx[i]符号化を省略する場合があってもよい。
なお、符号化装置100は、OLSに含まれるレイヤの数が1のOLSについて、対応するHRDパラメータを、当該OLSのレイヤの復号時に参照されるSPSにおいて通知せず、VPSにおいて通知するようにビットストリームを生成してもよい。また、符号化装置100は、OLSが0番目のOLSについて、対応するHRDパラメータを、VPSで通知せず、当該OLSのレイヤの復号時に参照されるSPSで通知するようにビットストリームを生成してもよい。
図104は、符号化装置100が、VPSおよびSPSにてHRDパラメータを通知する処理を示すフローチャートである。
まず、符号化装置100は、各レイヤのループである第1ループを開始する。符号化装置100は、レイヤのためのHRDパラメータを決定する(ステップS300)。そして、符号化装置100は、各レイヤのループである第1ループを終了する。
続いて、符号化装置100は、各OLSのためのループである第2ループを開始する。符号化装置100は、OLSの中のレイヤの数が1に等しいか否かを判定する(ステップS301)。
符号化装置100が、OLSの中のレイヤの数が1に等しいと判定した場合(ステップS301でYes)、符号化装置100は、第1ループにおいてレイヤ毎に決定したHRDパラメータの中から、OLSに含まれるレイヤに対応するHRDパラメータを取得する(ステップS303)。このとき、符号化装置100は、OLSに含まれるレイヤに対応するHRDパラメータをコピーしてもよい。
符号化装置100が、OLSの中のレイヤの数が1に等しいと判定しなかった場合(ステップS301でNo)、符号化装置100は、OLSのためのHRDパラメータを決定する(ステップS302)。
続いて、符号化装置100は、決定した、VPSに、OLSのためのHRDパラメータを書き込む(ステップS304)。そして、符号化装置100は、各OLSのためのループである第2ループを終了する。
続いて、符号化装置100は、各レイヤのためのループである第3ループを開始する。
符号化装置100は、第1ループでレイヤ毎に決定したHRDパラメータを、各レイヤに対応するSPSに書き込む(ステップS305)。なお、符号化装置100は、レイヤの数が1のOLSに含まれるレイヤについて、当該レイヤに対応するSPSにHRDパラメータを書き込み、レイヤの数が1のOLSに含まれるレイヤ以外のレイヤについて、対応するSPSにHRDパラメータを書き込むことを省略してもよい。そして、符号化装置100は、各レイヤのためのループである第3ループを終了する。
以上のように、本開示の実施の形態における第3態様の構成によれば、符号化装置100は、全てのOLSに対応するHRDパラメータを、VPSを解析することで取得可能であるようなビットストリームを生成することが可能となる。よって、符号化装置100は、複数のレイヤを含むビットストリームを処理するシステム、または、復号装置におけるビットストリーム解析処理を簡単化できる可能性がある。
[他の態様との組み合わせ]
本態様は、本開示の実施の形態における他の態様の少なくとも一部と組み合わされてもよい。また、本態様のフローチャートに記載の一部の処理、装置の一部の構成、シンタックスの一部等は、他の態様と組み合わせて実施されてもよい。
なお、復号装置200における上記VPS解析処理と同様の手順で、符号化装置100においてパラメータを出力してもよい。また、本態様に記載したすべての構成要素がいつも必要とは限らず、第3態様の一部の構成要素のみを備えていてもよい。
[第4態様]
図105は、VPSにおいて、1つまたは複数のDPBパラメータが通知されるシンタックスの一例を示す図である。
DPBパラメータは、DPBサイズおよびピクチャの復号順から出力順または表示順への並べ替えに関する情報等を含む。
図105に示される例のように、符号化装置100は、DPBパラメータの個数を表す情報に応じて、1つまたは複数のDPBパラメータを通知するようなビットストリームを生成してもよい。ここで、DPBパラメータの個数を表す情報とは、例えば、vps_num_dpb_paramsの値である。また、DPBパラメータとは、例えば、dpb_parameters()である。
また、符号化装置100は、テンポラルレイヤIDの最大値を示す情報に応じて、i番目のDPBパラメータが含むテンポラルサブレイヤに関する情報の個数を変更してもよい。
また、符号化装置100は、個々のレイヤについてインデックスを通知することで、VPSで通知される1つまたは複数のDPBパラメータのうち、i番目のレイヤに対応するDPBパラメータがいずれであるかを通知するようなビットストリームを生成してもよい。
なお、符号化装置100は、復号装置200がレイヤを他のレイヤを参照することなく復号できる場合は、当該レイヤの復号時に参照されるSPSで通知されるDPBパラメータと同一の内容のDPBパラメータを、当該レイヤに対応するDPBパラメータとしてVPSで通知するようにビットストリームを生成してもよい。例えば、i番目のレイヤが他のレイヤを参照することなく復号されうる場合、符号化装置100は、vps_independent_layer_flag[i]の値を1とする。
以下に、layer_output_dpb_params_idx[i]のセマンティックスの一例を示す。
layer_output_dpb_params_idx[i]は、VPSにおけるdpb_parameters()のリストに対して、出力レイヤがOLSに存在するとき、i番目のレイヤに適用されるdpb_parameters()のインデックスを特定する。layer_output_dpb_params_idx[i]が存在するとき、layer_output_dpb_params_idx[i]の値は、0からvps_num_dpb_params - 1という式で表される値の範囲である。
vps_num_dpb_paramsの値が1に等しいとき、layer_output_dpb_params_idx[i]の値は0に等しいと推測される。
vps_independent_layer_flag[i]が1に等しいときであって、i番目のレイヤに適用されるdpb_parameters()が、VPSおよびSPSの両方に存在するとき、i番目のレイヤのためにVPSおよびSPSに符号化されるdpb_parameters()が同一であることが、ビットストリームの規格適合性の要件である。
また、layer_output_dpb_params_idx[i]が、dpb_size_only_flag[layer_output_dpb_params_idx[i]]が1に等しいことと同様であることがビットストリームの規格適合性の要件である。
なお、符号化装置100は、layer_output_dpb_params_idx[i]が存在しない場合にいずれのインデックスを用いるかを決定する方法を予め定めることで、layer_output_dpb_params_idx[i]の符号化を省略する場合があってもよい。
なお、復号装置200が、他のレイヤを参照することなくあるレイヤを復号できる場合、符号化装置100は、当該レイヤに対応するDPBパラメータを、当該レイヤの復号時に復号装置200によって参照されるSPSで通知せず、VPSで通知するようにビットストリームを生成してもよい。また、符号化装置100は、当該レイヤが0番目のレイヤであった場合、当該レイヤに対応するDPBパラメータを、VPSで通知せず、当該レイヤの復号時に復号装置200によって参照されるSPSで通知するようにビットストリームを生成してもよい。
図106は、符号化装置100が、VPSおよびSPSにてDPBパラメータを通知する処理を示すフローチャートである。
まず、符号化装置100は、各レイヤのためのループである第1ループを開始する。符号化装置100は、レイヤのためのDPBパラメータを決定する(ステップS400)。なお、符号化装置100は、レイヤ毎に、レイヤのためのDPBパラメータを決定する。そして、符号化装置100は、各レイヤのためのループである第1ループを終了する。
次に、符号化装置100は、各レイヤのためのループである第2ループを開始する。符号化装置100は、レイヤが独立レイヤか否かを判定する(ステップS401)。
符号化装置100が、レイヤが独立レイヤであると判定した場合(ステップS401でYes)、符号化装置100は、レイヤに対応するDPBパラメータを取得する(ステップS403)。ここで、符号化装置100は、レイヤに対応するDPBパラメータをコピーしてもよい。なお、符号化装置100が、レイヤが独立レイヤであると判定した場合とは、レイヤがi番目のレイヤである場合に、vps_independent_layer_flag[i]の値が1に設定されているときである。
符号化装置100が、レイヤが独立レイヤであると判定しなかった場合(ステップS401でNo)、レイヤのためのDPBパラメータを決定する(ステップS402)。なお、符号化装置100が、レイヤが独立レイヤであると判定しなかった場合とは、レイヤがi番目のレイヤである場合に、vps_independent_layer_flag[i]の値が0に設定されているときである。
次に、符号化装置100は、レイヤのためのVPSにDPBパラメータを書き込む(ステップS404)。そして、符号化装置100は、各レイヤのためのループである第2ループを終了する。
続いて、符号化装置100は、各レイヤのためのループである第3ループを開始する。符号化装置100は、レイヤのためのSPSにDPBパラメータを書き込む(ステップS405)。なお、符号化装置100は、他のレイヤを参照することなく復号装置200が復号することができるレイヤについて、当該レイヤに対応するSPSにDPBパラメータを書き込んでもよい。そして、符号化装置100は、各レイヤのためのループである第3ループを終了する。
以上のように、第4態様の構成によれば、符号化装置100は、全てのレイヤに対応するDPBパラメータを、VPSを解析することで取得可能なビットストリームを生成することが可能となる。よって、符号化装置100は、複数のレイヤを含むビットストリームを処理するシステム、または、復号装置200におけるビットストリームの解析処理を簡単化できる可能性がある。
[他の態様との組み合わせ]
本態様は、本開示の実施の形態における他の態様の少なくとも一部と組み合わされてもよい。また、本態様のフローチャートに記載の一部の処理、装置の一部の構成、シンタックスの一部等は、他の態様と組み合わせて実施されてもよい。
なお、復号装置200における上記VPS解析処理と同様の手順で、符号化装置100においてパラメータを出力してもよい。また、本態様に記載したすべての構成要素がいつも必要とは限らず、第4態様の一部の構成要素のみを備えていてもよい。
[第5態様]
図107は、本開示の第2態様および第3態様において、全てのPTLパラメータとHRDパラメータとDPBパラメータとをVPSで通知するか否かを切り替え可能とするシンタックスの一例を示す図である。
図107に示される例のように、符号化装置100は、PTLパラメータ、HRDパラメータおよびDPBパラメータをVPSで通知するか否かを示す通知切替情報を通知し、通知切替情報に応じて、PTLパラメータ、HRDパラメータおよびDPBパラメータをVPSで通知するか否かを切り替えてもよい。ここで、通知切替情報とは、例えば、all_ptl_dpb_hrd_in_vps_flagである。
all_ptl_dpb_hrd_in_vps_flagがTRUEの場合、符号化装置100は、全てのOLSに対応するPTLパラメータ、ols_ptl_idx[i]、全てのOLSに対応するHRDパラメータ、ols_hrd_idx[i]、全てのレイヤに対応するDPBパラメータ、および、layer_output_dpb_params_idx[i]をVPSで通知するようにビットストリームを生成してもよい。
all_ptl_dpb_hrd_in_vps_flagがFALSEの場合、符号化装置100は、レイヤの数が1のOLSに対応するPTLパラメータ、ols_ptl_idx[i]、レイヤの数が1のOLSに対応するHRDパラメータ、ols_hrd_idx[i]、他のレイヤを参照せずに復号可能な独立レイヤに対応するDPBパラメータ、および、layer_output_dpb_params_idx[i]を、VPSで通知しないように、ビットストリームを生成してもよい。
以下に、all_ptl_dpb_hrd_in_vps_flagのセマンティックスの一例を示す。
1と等しいall_ptl_dpb_hrd_in_vps_flagは、全てのOLSのためのprofile_tier_level()と、全てのレイヤのためのdpb_parameters()と、全てのOLSのためのols_hrd_parameters()が、VPSの中に存在するか否かを特定する。0に等しいall_ptl_dpb_hrd_in_vps_flagは、いくつかのOLSのためのprofile_tier_level()、いくつかのレイヤのためのdpb_parameters()、および/または、いくつかのOLSのためのhrd_parameters()が、VPSの中に存在するか否かを特定する。上述の情報がVPSの中に存在しない場合、all_ptl_dpb_hrd_in_vps_flagの値は0に等しいと推定される。
以上のように、本開示の実施の形態における第5態様の構成によれば、符号化装置100は、全てのレイヤに対応するPTLパラメータ、HRDパラメータ、およびDPBパラメータをVPSに含めるか否かを切り替えることが可能となる。よって、符号化装置100は、複数のレイヤを含むビットストリームの符号化においてユースケースに応じて符号量を調整できる可能性がある。
[他の態様との組み合わせ]
本態様は、本開示の実施の形態における他の態様の少なくとも一部と組み合わされてもよい。また、本態様のフローチャートに記載の一部の処理、装置の一部の構成、シンタックスの一部等は、他の態様と組み合わせて実施されてもよい。
なお、復号装置200における上記VPS解析処理と同様の手順で、符号化装置100においてパラメータを出力してもよい。また、本態様に記載したすべての構成要素がいつも必要とは限らず、第5態様の一部の構成要素のみを備えていてもよい。
[第6態様]
図108は、VPSにおいてDPBパラメータを通知するシンタックスの一例を示す図である。図108に示される例のように、符号化装置100は、符号化装置100によってビットストリームに含められる複数のOLSそれぞれに含まれるレイヤ数が1であるか否かに応じて、DPBに関するパラメータであるDPBパラメータをVPSにおいて符号化するか否かを切り替える。ここで、符号化するとは、保存することでもよい。例えば、符号化装置100によってビットストリームに含められる複数のOLSそれぞれに含まれるレイヤ数が1であるか否かを示す情報(例えば、each_layer_is_an_ols_flag)に応じて、DPBパラメータ(例えば、dpb_parameters())、または、DPBパラメータに付随する全て、または、一部のパラメータをVPSにおいて通知するか否かを切り替えてもよい。ここで、DPBパラメータに付随するパラメータとは、DPBに関連する情報を通知するパラメータ(例えば、vps_num_dpb_params_minus1及びvps_sublayer_dpb_params_present_flag等)である。
また、DPBパラメータおよび/またはDPBパラメータに付随するパラメータ等は、SPSにも含まれる。SPSに含まれるDPBパラメータ等は、図108で示されるように、階層数の最大値と、DPBを用いるか否かを示すフラグとを引数とするという、VPSに含まれるDPBパラメータと同じ構造であってもよいし、異なる構造であってもよい。
例えば、符号化装置100によってビットストリームに含められる複数のOLSそれぞれに含まれるレイヤ数が1である場合、符号化装置100は、VPSにおいてDPBパラメータとDPBパラメータに付随する全て、または一部のパラメータを通知しない。ここで、符号化装置100によってビットストリームに含められる複数のOLSそれぞれに含まれるレイヤ数が1である場合とは、each_layer_is_an_ols_flagが真の場合である。このとき、符号化装置100は、各OLSに含まれるそれぞれのレイヤのために、SPSに含まれるDPBパラメータを参照するため、VPSにおいて、DPBパラメータの通知を省略することができる。
反対に、符号化装置100によってビットストリームに含められる少なくとも1つのOLSに含まれるレイヤ数が2以上である場合、符号化装置100は、DPBパラメータの個数を表す情報である個数パラメータ(例えば、vps_num_dpb_params_minus1)の値に1を加えた数に等しい数のDPBパラメータ、または、DPBパラメータに付随する全て、もしくは、一部のパラメータをVPSにおいて通知する。ここで、個数パラメータは、1つ以上のDPBパラメータの数から1を引くことにより得られる値を示してもよい。
従来は、DPBパラメータの個数を表す情報である個数パラメータとして、1つ以上のDPBパラメータの数そのものを表すvps_num_dpb_paramsを用いていた。符号化装置100は、vps_num_dpb_paramsの値として0を設定できるが、dpb parameters()が0個の場合、DPBパラメータを通知する必要はない。そこで、DPBパラメータの個数を表す情報である個数パラメータとして、1つ以上のDPBパラメータの数から1を引いた値であるvps_num_dpb_params_minus1を用いることで、vps_num_dpb_params_minus1の値が0の場合でも、1つのdpb parameters()が存在することを通知できるようになった。つまり、符号化装置100は、個数パラメータの値が0であっても1つのDPBパラメータが共通のヘッダに保存されるため、0の値をとる個数パラメータに意味を持たせることができ、個数パラメータを効率的に利用することができる。
本態様において、符号化装置100は、vps_num_dpb_params_minus1の値が0の場合でも、上記のようにDPBパラメータを通知する。このような処理を実現するため、図108に示されるループ処理では、iがvps_num_dpb_params_minus1に等しい場合を含むi<=vps_num_dpb_params_minus1が条件として用いられている。
また、符号化装置100は、each_layer_is_an_ols_flagが偽の場合、i番目のOLSのピクチャ格納バッファの幅(ols_dpb_pic_width[i])、i番目のOLSのピクチャ格納バッファの高さ(ols_dpb_pic_height[i])、および、VPSで通知される1つまたは複数のDPBパラメータのうち、i番目のOLSに対応するパラメータがいずれであるかを示す情報(例えば、ols_dpb_params_idx[i])を通知するループ処理において、NumLayersInOls[0]が常に1であることを利用し、i=0のループ処理を省略し、i=1からループ処理を開始してもよい。本ループ処理は、NumLayersInOls[i]が1より大きい場合しか処理が実施されないが、NumLayersInOls[0]は、常に1であると規格で決まっているため、i=0のときはいずれの処理も実施されないこととなる。よって、i=0のループを省略することで、冗長な処理を削減することができる。
以下に、vps_num_dpb_params_minus1およびols_dpb_params_idx[i]のセマンティクスの一例を示す。
vps_num_dpb_params_minus1に1を足した値は、VPSに含まれるDBPパラメータ(dpb_parameters())の数を示す。vps_num_dpb_params_minus1の値は、TotalNumOlssの値より小さくてもよい。つまり、各OLSに1つずつDPBパラメータを設定するためのDPBパラメータの個数はOLS数(TotalNumOlss)に等しいが、符号化装置100は、OLS数より小さい値をvps_num_dpb_params_minus1として用いてもよい。
各OLSに1つずつDPBパラメータをアサインするためのDPBパラメータ個数の最小値は、TotalNumOlssに等しくなるため、DPBパラメータ個数の最大値はTotalNumOlssであってもよい。従来はDPBパラメータ個数が16という固定値で定義されていたために、OLSの個数以上のDPBパラメータを通知したり、OLSの個数が16より多い場合に、各OLSに一つずつDPBパラメータを割り当てられないということが発生していた。しかし、上記のようなvps_num_dpb_params_minus1によってこれを避けることができる。
ols_dpb_params_idx[i]は、NumLayersInOls[i]が1より大きいときに、i番目のOLSに適用されるdpb_parameters()のシンタックス構造の、VPSに含まれるdps_parameters()のシンタックス構造のリストに対するインデックスを示す。ここで、インデックスは、対応関係と言い換えられてもよい。
ols_dpb_params_idx[i]が存在するとき、ols_dpb_params_idx[i]の値は、0とvps_num_dpb_params_minus1とを境界値として含む、0からvps_num_dpb_params_minus1までの範囲に含まれる。ols_dpb_params_idx[i]が存在しない場合、ols_dpb_params_idx[i]の値は、0に等しいと推定される。NumLayersInOls[i]の値が1に等しいとき、i番目のOLSに適用されるdpb_parameters()のシンタックス構造が、i番目のOLSによって参照されるSPSの中に存在する。
[他の態様との組み合わせ]
本態様は、本開示の実施の形態における他の態様の少なくとも一部と組み合わされてもよい。また、本態様のフローチャートに記載の一部の処理、装置の一部の構成、シンタックスの一部等は、他の態様と組み合わせて実施されてもよい。
なお、復号装置200は、符号化装置100が図108に従ってパラメータを保存する手順と同様の手順で、パラメータを導出してもよい。また、復号装置200は、符号化装置100が図108に従ってパラメータを保存する手順と異なる手順で、パラメータを導出してもよい。具体的には、例えば、復号装置200は、フラグを解析してDPBパラメータの保存場所を特定せずに、VPSからDPBパラメータを導出してもよい。ここで、導出するとは、復号することでもよい。また、符号化装置100または復号装置200において、本態様に記載したすべてのパラメータがいつも必要とは限らず、第6態様の一部のパラメータが用いられてもよい。
[第7態様]
図109は、VPSにおいて、DPBパラメータを通知するシンタックスの別の一例を示す図である。第7態様は、第6態様と、DPBパラメータの個数を表す情報である個数パラメータに、DPBパラメータの個数から1引いた値を用いず、DPBパラメータの個数を用いる点が異なる。図109に示される例のように、符号化装置100は、符号化装置100によってビットストリームに含められる複数の複数のOLSそれぞれに含まれるレイヤ数が1であるか否かに応じて、DPBに関するパラメータであるDPBパラメータをVPSにおいて符号化するか否かを切り替える。例えば、符号化装置100によってビットストリームに含められる複数のOLSそれぞれに含まれるレイヤ数が1であるか否かを示す情報(例えば、each_layer_is_an_ols_flag)に応じて、DPBパラメータ(例えば、dpb_parameters())、または、DPBパラメータに付随する全て、または、一部のパラメータをVPSにおいて通知するか否かを切り替えてもよい。
例えば、符号化装置100によってビットストリームに含められる複数のOLSそれぞれに含まれるレイヤ数が1である場合、符号化装置100は、vps_num_dpb_paramsの値を0とみなす。そして、符号化装置100は、VPSにおいてDPBパラメータとDPBパラメータに付随する全て、または一部のパラメータを通知しない。なお、符号化装置100は、each_layer_is_an_ols_flagが真の場合、iがいずれの値を取る場合でも、NumLayersInOls[i]の値は1である。
反対に、符号化装置100によってビットストリームに含められる複数のOLSそれぞれに含まれるレイヤ数が2以上である場合、符号化装置100は、DPBパラメータの個数を表す情報である個数パラメータ(例えば、vps_num_dpb_params)に応じて、VPSにおいて、1つ以上のDPBパラメータ、または、DPBパラメータに付随する全て、もしくは、一部のパラメータを通知する。
また、符号化装置100は、vps_num_dpb_paramsの値として、0を通知可能とし、複数のレイヤを含むOLSに対して、当該OLSのピクチャ格納バッファの幅(ols_dpb_pic_width[i])、当該OLSのピクチャ格納バッファの高さ(ols_dpb_pic_height[i])のみを通知してもよい。なお、この場合、符号化装置100は、所定の方法によって、当該OLSのdpb_parameters()を定めるようにしてもよい。例えば、0番目のOLSのレイヤが参照するSPSのdpb_parameters()を参照することで、dpb_parameters()の値を一意に定める。
以下に、vps_num_dpb_paramsおよび、ols_dpb_params_idx[i]のセマンティックスの一例を示す。
vps_num_dpb_paramsは、VPSに含まれるdpb_parameters()のシンタックス構造の数を示す。vps_num_dpb_paramsの値は、0とTotalNumOlssとを境界値として含む、0からTotalNumOlssまでの範囲に含まれる。vps_num_dpb_paramsが存在しない場合、vps_num_dpb_paramsの値は0に等しいと推定される。
ols_dpb_params_idx[i]は、NumLayersInOls[i]が1より大きいときに、i番目のOLSに適用されるdpb_parameters()のシンタックス構造の、VPSに含まれるdps_parameters()のシンタックス構造のリストに対するインデックスを示す。ols_dpb_params_idx[i]が存在するとき、ols_dpb_params_idx[i]の値は、0とvps_num_dpb_params-1とを境界値として含む、0からvps_num_dpb_params-1までの範囲に含まれる。ols_dpb_params_idx[i]が存在しない場合、ols_dpb_params_idx[i]の値は、0に等しいと推定される。NumLayersInOls[i]の値が1に等しいとき、i番目のOLSに適用されるdpb_parameters()のシンタックス構造が、i番目のOLSによって参照されるSPSの中に存在する。
以下の全ての状態が真のとき、i番目のOLSに適用されるdpb_parameters()のシンタックス構造が、0番目のOLSの中のレイヤによって参照されるSPSに存在する。以下の全ての状態とは、each_layer_is_an_ols_flagが0に等しいこと、vps_num_dpb_paramsが0に等しいこと、NumLayersInOls[i]が1より大きいことである。
以下に、復号対象のOLS(TargetOlsIdx)の標準仕様への適合性を判定するためのパラメータを決定する手順の一例を示す。
OLSインデックスであるTargetOlsIdxを有するOLSのために、変数PicWidthMaxSampleY、PicHeightMaxInSamplesY、PicSizeMaxInSamplesY、および、適用可能なdpb_parameters()のシンタックス構造が導出される。
NumLayersInOls[TargetOlsIdx]が1に等しいとき、PicWidthMaxInSamplesYがpic_width_max_in_luma_samplesに等しく設定され、PicHeightMaxInSamplesYがpic_height_max_in_luma_samplesに等しく設定され、また、PicSizeMaxInSamplesYがPicWidthMaxInSamplesY*PicHeightMaxInSamplesYに等しく設定される。ここで、pic_width_max_in_luma_samplesとpic_heigt_max_in_luma_samplesが、OLSのレイヤによって参照されるSPSに存在することが条件として用いられる。また、適用されるdpb_parameters()のシンタックス構造がそのSPSの中に存在することが条件として用いられる。
NumLayersInOls[TargetOlsIdx]が1より大きく、かつ、vps_num_dpb_paramsが0に等しくない場合、PicWidthMaxInSamplesYがols_dpb_pic_width[TargetOlsIdx]に等しく設定される。また、PicHeightMaxInSamplesYがols_dpb_pic_width[TargetOlsIdx]に等しく設定され、PicSizeMaxInSamplesYがPicWidthMaxInSamplesY*PicHeightMaxInSamplesYに等しく設定される。また、適用されるdpb_parameters()のシンタックス構造が、VPSの中に存在するols_dpb_params_idx[TargetOlsOdx]によって特定される。
NumLayersInOls[TargetOlsIdx]が1より大きく、かつ、vps_num_dpb_paramsが0に等しい場合、PicWidthMaxInSamplesYがols_dpb_pic_width[TargetOlsIdx]に等しく設定され、PicHeightMaxInSamplesYがols_dpb_pic_height[TargetOlsOdx]に等しく設定される。また、PicSizeMaxInSamplesYが、PicWidthMaxInSamplesY*PicHeightMaxInSamplesYに等しく設定される。また、適用されるdpb_parameters()のシンタックス構造が、0番目のOLSの中のレイヤによって参照されるSPSの中に存在する。
つまり、符号化装置100は、ピクチャの最大幅(PicWidthMaxInSamplesY)、ピクチャの最大高さ(PicHeightMaxInSamplesY)、ピクチャの最大サイズ(PicSizeMaxInSamplesY)、および適用するdpb_parameters()を決定する。
例えば、OLSのレイヤ数(NumLayersInOls[TargetOlsIdx])が1の場合は、符号化装置100は、当該レイヤが参照するSPSで通知される、ピクチャの最大幅(pic_width_max_in_luma_samples)、ピクチャの最大高(pic_height_max_in_luma_samples)、およびdpb_parameters()を参照して決定してもよい。
また、OLSのレイヤ数(NumLayersInOls[TargetOlsIdx])が1より大きく、vps_num_dpb_paramsが0でない場合は、符号化装置100は、VPSで通知される、ピクチャの最大幅(ols_dpb_pic_width[TargetOlsIdx])、ピクチャの最大高さ(ols_dpb_pic_height[TargetOlsIdx])、およびols_dpb_params_idx[TargetOlsIdx]により指定されるdpb_parameters()を参照して決定してもよい。
また、OLSのレイヤ数(NumLayersInOls[TargetOlsIdx])が1より大きく、vps_num_dpb_paramsが0の場合は、符号化装置100は、VPSで通知される、ピクチャの最大幅(ols_dpb_pic_width[TargetOlsIdx])、ピクチャの最大高(ols_dpb_pic_height[TargetOlsIdx])、および所定の方法により選択されたdpb_parameters()を参照して決定してもよい。なお、所定の方法は、0番目のOLSのレイヤが参照するSPSで通知されるdpb_parameters()を選択するなど、一意に決定できる方法であればよい。
以上のように第7態様の構成によれば、符号化装置100は、複数レイヤを有するOLSに対応するdpb_parameters()をVPSで通知することなく一意に決定可能となり、複数レイヤを含むビットストリームの符号化においてビットストリームに含められる複数のレイヤ集合のそれぞれに含まれるレイヤ数に応じて符号量を調整できる可能性がある。
[他の態様との組み合わせ]
本態様は、本開示の実施の形態における他の態様の少なくとも一部と組み合わされてもよい。また、本態様のフローチャートに記載の一部の処理、装置の一部の構成、シンタックスの一部等は、他の態様と組み合わせて実施されてもよい。
なお、復号装置200は、符号化装置100が図109に従ってパラメータを保存する手順で、パラメータを導出してもよい。また、復号装置200は、符号化装置100が図109に従ってパラメータを保存する手順と異なる手順で、パラメータを導出してもよい。具体的には、例えば、復号装置200は、フラグを解析してDPBパラメータの保存場所を特定せずに、VPSからDPBパラメータを導出してもよい。ここで、導出するとは、復号することでもよい。また、符号化装置100または復号装置200において、本態様に記載したすべてのパラメータがいつも必要とは限らず、第7態様の一部のパラメータのみが用いられてもよい。
[実装]
図110は、実施の形態における符号化装置100の動作例を示すフローチャートである。例えば、図7に示された符号化装置100は、図110に示された動作を行う。具体的には、プロセッサa1は、メモリa2を用いて、以下の動作を行う。
プロセッサa1は、少なくとも1つの出力レイヤをそれぞれが含む複数のレイヤ集合であって、ビットストリームに含められる複数のレイヤ集合のそれぞれに含まれるレイヤ数が1であるか否かに応じて、DPBに関するDPBパラメータを複数のレイヤ集合に含まれる複数のレイヤに共通のヘッダに保存するか否かを切り替える(ステップS600)。
また、例えば、複数のレイヤ集合のそれぞれは、OLSであってもよい。
また、例えば、複数のレイヤに共通のヘッダは、VPSであってもよい。なお、パラメータが保存される共通のヘッダは、各レイヤの画像の符号化又は復号化において、参照される保存場所であればVPSに限らない。
また、例えば、プロセッサa1は、複数のレイヤ集合のそれぞれに含まれるレイヤ数が1である場合、DPBパラメータを複数のレイヤに共通のヘッダに保存しなくてもよい。
また、例えば、プロセッサa1は、複数のレイヤ集合のそれぞれに含まれるレイヤ数が1である場合、SPSにDPBパラメータを保存してもよい。
また、例えば、プロセッサa1は、複数のレイヤ集合の少なくとも1つに含まれるレイヤ数が1よりも大きい場合、DPBパラメータを複数のレイヤに共通のヘッダに保存してもよい。
また、例えば、プロセッサa1は、複数のレイヤ集合の少なくとも1つに含まれるレイヤ数が1よりも大きい場合、それぞれがDPBパラメータである1つ以上のDPBパラメータの数から1を引くことにより得られる値を示す個数パラメータ、及び、1つ以上のDPBパラメータを複数のレイヤに共通のヘッダに保存してもよい。
なお、ここで、「保存する」という用語は、「符号化する」、「出力する」、「書きこむ」、「格納する」という用語と置き換えられてもよい。
ここで、プロセッサa1は、回路の具体例である。
図111は、実施の形態における復号装置200の動作例を示すフローチャートである。例えば、図67に示された復号装置200は図111に示された動作を行う。具体的には、プロセッサb1は、メモリb2を用いて、以下の動作を行う。
プロセッサb1は、少なくとも1つの出力レイヤをそれぞれが含む複数のレイヤ集合であって、ビットストリームに含められた複数のレイヤ集合のそれぞれに含まれるレイヤ数が1であるか否かに応じて、DPBに関するDPBパラメータを複数のレイヤ集合に含まれる複数のレイヤに共通のヘッダから導出するか否かを切り替える(ステップS700)。
また、例えば、複数のレイヤ集合のそれぞれは、OLSであってもよい。
また、例えば、複数のレイヤに共通のヘッダは、VPSであってもよい。
また、例えば、プロセッサb1は、複数のレイヤ集合のそれぞれに含まれるレイヤ数が1である場合、DPBパラメータを複数のレイヤに共通のヘッダから導出しなくてもよい。
また、例えば、プロセッサb1は、複数のレイヤ集合のそれぞれに含まれるレイヤ数が1である場合、SPSからDPBパラメータを導出してもよい。
また、例えば、プロセッサb1は、前記複数のレイヤ集合の少なくとも1つに含まれるレイヤ数が1よりも大きい場合、DPBパラメータを複数のレイヤに共通のヘッダから導出してもよい。
また、例えば、プロセッサb1は、前記複数のレイヤ集合の少なくとも1つに含まれるレイヤ数が1でない場合、それぞれがDPBパラメータである1つ以上のDPBパラメータの数から1を引くことにより得られる値を示す個数パラメータ、及び、1つ以上のDPBパラメータを複数のレイヤに共通のヘッダから導出してもよい。
なお、ここで、「導出する」という用語は、「復号する」、「解析する」、「読み解く」、「取得する」という用語と置き換えられてもよい。
ここで、プロセッサb1は、回路の具体例である。
ここで開示された1以上の態様を本開示における他の態様の少なくとも一部と組み合わせて実施してもよい。また、ここで開示された1以上の態様のフローチャートに記載の一部の処理、装置の一部の構成、シンタックスの一部などを他の態様と組み合わせて実施してもよい。
[実施及び応用]
以上の各実施の形態において、機能的又は作用的なブロックの各々は、通常、MPU(micro proccessing unit)及びメモリ等によって実現可能である。また、機能ブロックの各々による処理は、ROM等の記録媒体に記録されたソフトウェア(プログラム)を読み出して実行するプロセッサなどのプログラム実行部として実現されてもよい。当該ソフトウェアは、配布されてもよい。当該ソフトウェアは、半導体メモリなどの様々な記録媒体に記録されてもよい。なお、各機能ブロックをハードウェア(専用回路)によって実現することも可能である。
各実施の形態において説明した処理は、単一の装置(システム)を用いて集中処理することによって実現してもよく、又は、複数の装置を用いて分散処理することによって実現してもよい。また、上記プログラムを実行するプロセッサは、単数であってもよく、複数であってもよい。すなわち、集中処理を行ってもよく、又は分散処理を行ってもよい。
本開示の態様は、以上の実施例に限定されることなく、種々の変更が可能であり、それらも本開示の態様の範囲内に包含される。
さらにここで、上記各実施の形態で示した動画像符号化方法(画像符号化方法)又は動画像復号化方法(画像復号方法)の応用例、及び、その応用例を実施する種々のシステムを説明する。このようなシステムは、画像符号化方法を用いた画像符号化装置、画像復号方法を用いた画像復号装置、又は、両方を備える画像符号化復号装置を有することを特徴としてもよい。このようなシステムの他の構成について、場合に応じて適切に変更することができる。
[使用例]
図112は、コンテンツ配信サービスを実現する適切なコンテンツ供給システムex100の全体構成を示す図である。通信サービスの提供エリアを所望の大きさに分割し、各セル内にそれぞれ、図示された例における固定無線局である基地局ex106、ex107、ex108、ex109、ex110が設置されている。
このコンテンツ供給システムex100では、インターネットex101に、インターネットサービスプロバイダex102又は通信網ex104、及び基地局ex106~ex110を介して、コンピュータex111、ゲーム機ex112、カメラex113、家電ex114、及びスマートフォンex115などの各機器が接続される。当該コンテンツ供給システムex100は、上記のいずれかの装置を組合せて接続するようにしてもよい。種々の実施において、基地局ex106~ex110を介さずに、各機器が電話網又は近距離無線等を介して直接的又は間接的に相互に接続されていてもよい。さらに、ストリーミングサーバex103は、インターネットex101等を介して、コンピュータex111、ゲーム機ex112、カメラex113、家電ex114、及びスマートフォンex115などの各機器と接続されてもよい。また、ストリーミングサーバex103は、衛星ex116を介して、飛行機ex117内のホットスポット内の端末等と接続されてもよい。
なお、基地局ex106~ex110の代わりに、無線アクセスポイント又はホットスポット等が用いられてもよい。また、ストリーミングサーバex103は、インターネットex101又はインターネットサービスプロバイダex102を介さずに直接通信網ex104と接続されてもよいし、衛星ex116を介さず直接飛行機ex117と接続されてもよい。
カメラex113はデジタルカメラ等の静止画撮影、及び動画撮影が可能な機器である。また、スマートフォンex115は、2G、3G、3.9G、4G、そして今後は5Gと呼ばれる移動通信システムの方式に対応したスマートフォン機、携帯電話機、又はPHS(Personal Handyphone System)等である。
家電ex114は、冷蔵庫、又は家庭用燃料電池コージェネレーションシステムに含まれる機器等である。
コンテンツ供給システムex100では、撮影機能を有する端末が基地局ex106等を通じてストリーミングサーバex103に接続されることで、ライブ配信等が可能になる。ライブ配信では、端末(コンピュータex111、ゲーム機ex112、カメラex113、家電ex114、スマートフォンex115、及び飛行機ex117内の端末等)は、ユーザが当該端末を用いて撮影した静止画又は動画コンテンツに対して上記各実施の形態で説明した符号化処理を行ってもよく、符号化により得られた映像データと、映像に対応する音を符号化した音データと多重化してもよく、得られたデータをストリーミングサーバex103に送信してもよい。即ち、各端末は、本開示の一態様に係る画像符号化装置として機能する。
一方、ストリーミングサーバex103は要求のあったクライアントに対して送信されたコンテンツデータをストリーム配信する。クライアントは、上記符号化処理されたデータを復号化することが可能な、コンピュータex111、ゲーム機ex112、カメラex113、家電ex114、スマートフォンex115、又は飛行機ex117内の端末等である。配信されたデータを受信した各機器は、受信したデータを復号化処理して再生する。即ち、各機器は、本開示の一態様に係る画像復号装置として機能してもよい。
[分散処理]
また、ストリーミングサーバex103は複数のサーバ又は複数のコンピュータであって、データを分散して処理したり記録したり配信するものであってもよい。例えば、ストリーミングサーバex103は、CDN(Contents Delivery Network)により実現され、世界中に分散された多数のエッジサーバとエッジサーバ間をつなぐネットワークによりコンテンツ配信が実現されていてもよい。CDNでは、クライアントに応じて物理的に近いエッジサーバが動的に割り当てられる。そして、当該エッジサーバにコンテンツがキャッシュ及び配信されることで遅延を減らすことができる。また、いくつかのタイプのエラーが発生した場合又はトラフィックの増加などにより通信状態が変わる場合に複数のエッジサーバで処理を分散したり、他のエッジサーバに配信主体を切り替えたり、障害が生じたネットワークの部分を迂回して配信を続けることができるので、高速かつ安定した配信が実現できる。
また、配信自体の分散処理にとどまらず、撮影したデータの符号化処理を各端末で行ってもよいし、サーバ側で行ってもよいし、互いに分担して行ってもよい。一例として、一般に符号化処理では、処理ループが2度行われる。1度目のループでフレーム又はシーン単位での画像の複雑さ、又は、符号量が検出される。また、2度目のループでは画質を維持して符号化効率を向上させる処理が行われる。例えば、端末が1度目の符号化処理を行い、コンテンツを受け取ったサーバ側が2度目の符号化処理を行うことで、各端末での処理負荷を減らしつつもコンテンツの質と効率を向上させることができる。この場合、ほぼリアルタイムで受信して復号する要求があれば、端末が行った一度目の符号化済みデータを他の端末で受信して再生することもできるので、より柔軟なリアルタイム配信も可能になる。
他の例として、カメラex113等は、画像から特徴量抽出を行い、特徴量に関するデータをメタデータとして圧縮してサーバに送信する。サーバは、例えば特徴量からオブジェクトの重要性を判断して量子化精度を切り替えるなど、画像の意味(又は内容の重要性)に応じた圧縮を行う。特徴量データはサーバでの再度の圧縮時の動きベクトル予測の精度及び効率向上に特に有効である。また、端末でVLC(可変長符号化)などの簡易的な符号化を行い、サーバでCABAC(コンテキスト適応型二値算術符号化方式)など処理負荷の大きな符号化を行ってもよい。
さらに他の例として、スタジアム、ショッピングモール、又は工場などにおいては、複数の端末によりほぼ同一のシーンが撮影された複数の映像データが存在する場合がある。この場合には、撮影を行った複数の端末と、必要に応じて撮影をしていない他の端末及びサーバを用いて、例えばGOP(Group of Picture)単位、ピクチャ単位、又はピクチャを分割したタイル単位などで符号化処理をそれぞれ割り当てて分散処理を行う。これにより、遅延を減らし、よりリアルタイム性を実現できる。
複数の映像データはほぼ同一シーンであるため、各端末で撮影された映像データを互いに参照し合えるように、サーバで管理及び/又は指示をしてもよい。また、各端末からの符号化済みデータを、サーバが受信し複数のデータ間で参照関係を変更、又はピクチャ自体を補正或いは差し替えて符号化しなおしてもよい。これにより、一つ一つのデータの質と効率を高めたストリームを生成できる。
さらに、サーバは、映像データの符号化方式を変更するトランスコードを行ったうえで映像データを配信してもよい。例えば、サーバは、MPEG系の符号化方式をVP系(例えばVP9)に変換してもよいし、H.264をH.265に変換してもよい。
このように、符号化処理は、端末、又は1以上のサーバにより行うことが可能である。よって、以下では、処理を行う主体として「サーバ」又は「端末」等の記載を用いるが、サーバで行われる処理の一部又は全てが端末で行われてもよいし、端末で行われる処理の一部又は全てがサーバで行われてもよい。また、これらに関しては、復号処理についても同様である。
[3D、マルチアングル]
互いにほぼ同期した複数のカメラex113及び/又はスマートフォンex115などの端末により撮影された異なるシーン、又は、同一シーンを異なるアングルから撮影した画像或いは映像を統合して利用することが増えてきている。各端末で撮影した映像は、別途取得した端末間の相対的な位置関係、又は、映像に含まれる特徴点が一致する領域などに基づいて統合される。
サーバは、2次元の動画像を符号化するだけでなく、動画像のシーン解析などに基づいて自動的に、又は、ユーザが指定した時刻において、静止画を符号化し、受信端末に送信してもよい。サーバは、さらに、撮影端末間の相対的な位置関係を取得できる場合には、2次元の動画像だけでなく、同一シーンが異なるアングルから撮影された映像に基づき、当該シーンの3次元形状を生成できる。サーバは、ポイントクラウドなどにより生成した3次元のデータを別途符号化してもよいし、3次元データを用いて人物又はオブジェクトを認識或いは追跡した結果に基づいて、受信端末に送信する映像を、複数の端末で撮影した映像から、選択、又は、再構成して生成してもよい。
このようにして、ユーザは、各撮影端末に対応する各映像を任意に選択してシーンを楽しむこともできるし、複数画像又は映像を用いて再構成された3次元データから選択視点の映像を切り出したコンテンツを楽しむこともできる。さらに、映像と共に、音も複数の相異なるアングルから収音され、サーバは、特定のアングル又は空間からの音を対応する映像と多重化して、多重化された映像と音とを送信してもよい。
また、近年ではVirtual Reality(VR)及びAugmented Reality(AR)など、現実世界と仮想世界とを対応付けたコンテンツも普及してきている。VRの画像の場合、サーバは、右目用及び左目用の視点画像をそれぞれ作成し、Multi-View Coding(MVC)などにより各視点映像間で参照を許容する符号化を行ってもよいし、互いに参照せずに別ストリームとして符号化してもよい。別ストリームの復号時には、ユーザの視点に応じて仮想的な3次元空間が再現されるように互いに同期させて再生するとよい。
ARの画像の場合には、サーバは、現実空間のカメラ情報に、仮想空間上の仮想物体情報を、3次元的位置又はユーザの視点の動きに基づいて重畳する。復号装置は、仮想物体情報及び3次元データを取得又は保持し、ユーザの視点の動きに応じて2次元画像を生成し、スムーズにつなげることで重畳データを作成してもよい。または、復号装置は仮想物体情報の依頼に加えてユーザの視点の動きをサーバに送信してもよい。サーバは、サーバに保持される3次元データから受信した視点の動きに合わせて重畳データを作成し、重畳データを符号化して復号装置に配信してもよい。なお、重畳データは、RGB以外に透過度を示すα値を有し、サーバは、3次元データから作成されたオブジェクト以外の部分のα値が0などに設定し、当該部分が透過する状態で、符号化してもよい。もしくは、サーバは、クロマキーのように所定の値のRGB値を背景に設定し、オブジェクト以外の部分は背景色にしたデータを生成してもよい。
同様に配信されたデータの復号処理はクライアントである各端末で行っても、サーバ側で行ってもよいし、互いに分担して行ってもよい。一例として、ある端末が、一旦サーバに受信リクエストを送り、そのリクエストに応じたコンテンツを他の端末で受信し復号処理を行い、ディスプレイを有する装置に復号済みの信号が送信されてもよい。通信可能な端末自体の性能によらず処理を分散して適切なコンテンツを選択することで画質のよいデータを再生することができる。また、他の例として大きなサイズの画像データをTV等で受信しつつ、鑑賞者の個人端末にピクチャが分割されたタイルなど一部の領域が復号されて表示されてもよい。これにより、全体像を共有化しつつ、自身の担当分野又はより詳細に確認したい領域を手元で確認することができる。
屋内外の近距離、中距離、又は長距離の無線通信が複数使用可能な状況下で、MPEG-DASHなどの配信システム規格を利用して、シームレスにコンテンツを受信することが可能かもしれない。ユーザは、ユーザの端末、屋内外に配置されたディスプレイなどの復号装置又は表示装置を自由に選択しながらリアルタイムで切り替えてもよい。また、自身の位置情報などを用いて、復号する端末及び表示する端末を切り替えながら復号を行うことができる。これにより、ユーザが目的地へ移動している間に、表示可能なデバイスが埋め込まれた隣の建物の壁面又は地面の一部に情報をマップ及び表示することが可能になる。また、符号化データが受信端末から短時間でアクセスできるサーバにキャッシュされている、又は、コンテンツ・デリバリー・サービスにおけるエッジサーバにコピーされている、などの、ネットワーク上での符号化データへのアクセス容易性に基づいて、受信データのビットレートを切り替えることも可能である。
[Webページの最適化]
図113は、コンピュータex111等におけるwebページの表示画面例を示す図である。図114は、スマートフォンex115等におけるwebページの表示画面例を示す図である。図113及び図114に示すようにwebページが、画像コンテンツへのリンクであるリンク画像を複数含む場合があり、閲覧するデバイスによってその見え方は異なる。画面上に複数のリンク画像が見える場合には、ユーザが明示的にリンク画像を選択するまで、又は画面の中央付近にリンク画像が近付く或いはリンク画像の全体が画面内に入るまで、表示装置(復号装置)は、リンク画像として各コンテンツが有する静止画又はIピクチャを表示してもよいし、複数の静止画又はIピクチャ等でgifアニメのような映像を表示してもよいし、ベースレイヤのみを受信し、映像を復号及び表示してもよい。
ユーザによりリンク画像が選択された場合、表示装置は、ベースレイヤを最優先にしつつ復号を行う。なお、webページを構成するHTMLにスケーラブルなコンテンツであることを示す情報があれば、表示装置は、エンハンスメントレイヤまで復号してもよい。さらに、リアルタイム性を担保するために、選択される前又は通信帯域が非常に厳しい場合には、表示装置は、前方参照のピクチャ(Iピクチャ、Pピクチャ、前方参照のみのBピクチャ)のみを復号及び表示することで、先頭ピクチャの復号時刻と表示時刻との間の遅延(コンテンツの復号開始から表示開始までの遅延)を低減できる。またさらに、表示装置は、ピクチャの参照関係を敢えて無視して、全てのBピクチャ及びPピクチャを前方参照にして粗く復号し、時間が経ち受信したピクチャが増えるにつれて正常の復号を行ってもよい。
[自動走行]
また、車の自動走行又は走行支援のため2次元又は3次元の地図情報などのような静止画又は映像データを送受信する場合、受信端末は、1以上のレイヤに属する画像データに加えて、メタ情報として天候又は工事の情報なども受信し、これらを対応付けて復号してもよい。なお、メタ情報は、レイヤに属してもよいし、単に画像データと多重化されてもよい。
この場合、受信端末を含む車、ドローン又は飛行機などが移動するため、受信端末は、当該受信端末の位置情報を送信することで、基地局ex106~ex110を切り替えながらシームレスな受信及び復号の実行を実現できる。また、受信端末は、ユーザの選択、ユーザの状況及び/又は通信帯域の状態に応じて、メタ情報をどの程度受信するか、又は地図情報をどの程度更新していくかを動的に切り替えることが可能になる。
コンテンツ供給システムex100では、ユーザが送信した符号化された情報をリアルタイムでクライアントが受信して復号し、再生することができる。
[個人コンテンツの配信]
また、コンテンツ供給システムex100では、映像配信業者による高画質で長時間のコンテンツのみならず、個人による低画質で短時間のコンテンツのユニキャスト、又はマルチキャスト配信が可能である。このような個人のコンテンツは今後も増加していくと考えられる。個人コンテンツをより優れたコンテンツにするために、サーバは、編集処理を行ってから符号化処理を行ってもよい。これは、例えば、以下のような構成を用いて実現できる。
撮影時にリアルタイム又は蓄積して撮影後に、サーバは、原画データ又は符号化済みデータから撮影エラー、シーン探索、意味の解析、及びオブジェクト検出などの認識処理を行う。そして、サーバは、認識結果に基づいて手動又は自動で、ピントずれ又は手ブレなどを補正したり、明度が他のピクチャに比べて低い又は焦点が合っていないシーンなどの重要性の低いシーンを削除したり、オブジェクトのエッジを強調したり、色合いを変化させるなどの編集を行う。サーバは、編集結果に基づいて編集後のデータを符号化する。また撮影時刻が長すぎると視聴率が下がることも知られており、サーバは、撮影時間に応じて特定の時間範囲内のコンテンツになるように上記のように重要性が低いシーンのみならず動きが少ないシーンなどを、画像処理結果に基づき自動でクリップしてもよい。または、サーバは、シーンの意味解析の結果に基づいてダイジェストを生成して符号化してもよい。
個人コンテンツには、そのままでは著作権、著作者人格権、又は肖像権等の侵害となるものが写り込んでいるケースもあり、共有する範囲が意図した範囲を超えてしまうなど個人にとって不都合な場合もある。よって、例えば、サーバは、画面の周辺部の人の顔、又は家の中などを敢えて焦点が合わない画像に変更して符号化してもよい。さらに、サーバは、符号化対象画像内に、予め登録した人物とは異なる人物の顔が映っているかどうかを認識し、映っている場合には、顔の部分にモザイクをかけるなどの処理を行ってもよい。または、符号化の前処理又は後処理として、著作権などの観点からユーザが画像を加工したい人物又は背景領域を指定してもよい。サーバは、指定された領域を別の映像に置き換える、又は焦点をぼかすなどの処理を行ってもよい。人物であれば、動画像において人物をトラッキングして、人物の顔の部分の映像を置き換えることができる。
データ量の小さい個人コンテンツの視聴はリアルタイム性の要求が強いため、帯域幅にもよるが、復号装置は、まずベースレイヤを最優先で受信して復号及び再生を行う。復号装置は、この間にエンハンスメントレイヤを受信し、再生がループされる場合など2回以上再生される場合に、エンハンスメントレイヤも含めて高画質の映像を再生してもよい。このようにスケーラブルな符号化が行われているストリームであれば、未選択時又は見始めた段階では粗い動画だが、徐々にストリームがスマートになり画像がよくなるような体験を提供することができる。スケーラブル符号化以外にも、1回目に再生される粗いストリームと、1回目の動画を参照して符号化される2回目のストリームとが1つのストリームとして構成されていても同様の体験を提供できる。
[その他の実施応用例]
また、これらの符号化又は復号処理は、一般的に各端末が有するLSIex500において処理される。LSI(large scale integration circuitry)ex500(図112参照)は、ワンチップであっても複数チップからなる構成であってもよい。なお、動画像符号化又は復号用のソフトウェアをコンピュータex111等で読み取り可能な何らかの記録メディア(CD-ROM、フレキシブルディスク、又はハードディスクなど)に組み込み、そのソフトウェアを用いて符号化又は復号処理を行ってもよい。さらに、スマートフォンex115がカメラ付きである場合には、そのカメラで取得した動画データを送信してもよい。このときの動画データはスマートフォンex115が有するLSIex500で符号化処理されたデータである。
なお、LSIex500は、アプリケーションソフトをダウンロードしてアクティベートする構成であってもよい。この場合、端末は、まず、当該端末がコンテンツの符号化方式に対応しているか、又は、特定サービスの実行能力を有するかを判定する。端末がコンテンツの符号化方式に対応していない場合、又は、特定サービスの実行能力を有さない場合、端末は、コーデック又はアプリケーションソフトをダウンロードし、その後、コンテンツ取得及び再生する。
また、インターネットex101を介したコンテンツ供給システムex100に限らず、デジタル放送用システムにも上記各実施の形態の少なくとも動画像符号化装置(画像符号化装置)又は動画像復号化装置(画像復号装置)のいずれかを組み込むことができる。衛星などを利用して放送用の電波に映像と音が多重化された多重化データを載せて送受信するため、コンテンツ供給システムex100のユニキャストがし易い構成に対してマルチキャスト向きであるという違いがあるが符号化処理及び復号処理に関しては同様の応用が可能である。
[ハードウェア構成]
図115は、図112に示されたスマートフォンex115のさらに詳細を示す図である。また、図116は、スマートフォンex115の構成例を示す図である。スマートフォンex115は、基地局ex110との間で電波を送受信するためのアンテナex450と、映像及び静止画を撮ることが可能なカメラ部ex465と、カメラ部ex465で撮像した映像、及びアンテナex450で受信した映像等が復号されたデータを表示する表示部ex458とを備える。スマートフォンex115は、さらに、タッチパネル等である操作部ex466と、音声又は音響を出力するためのスピーカ等である音声出力部ex457と、音声を入力するためのマイク等である音声入力部ex456と、撮影した映像或いは静止画、録音した音声、受信した映像或いは静止画、メール等の符号化されたデータ、又は、復号化されたデータを保存可能なメモリ部ex467と、ユーザを特定し、ネットワークをはじめ各種データへのアクセスの認証をするためのSIMex468とのインタフェース部であるスロット部ex464とを備える。なお、メモリ部ex467の代わりに外付けメモリが用いられてもよい。
表示部ex458及び操作部ex466等を統括的に制御する主制御部ex460と、電源回路部ex461、操作入力制御部ex462、映像信号処理部ex455、カメラインタフェース部ex463、ディスプレイ制御部ex459、変調/復調部ex452、多重/分離部ex453、音声信号処理部ex454、スロット部ex464、及びメモリ部ex467とが同期バスex470を介して接続されている。
電源回路部ex461は、ユーザの操作により電源キーがオン状態にされると、スマートフォンex115を動作可能な状態に起動し、バッテリパックから各部に対して電力を供給する。
スマートフォンex115は、CPU、ROM及びRAM等を有する主制御部ex460の制御に基づいて、通話及データ通信等の処理を行う。通話時は、音声入力部ex456で収音した音声信号を音声信号処理部ex454でデジタル音声信号に変換し、変調/復調部ex452でスペクトラム拡散処理を施し、送信/受信部ex451でデジタルアナログ変換処理及び周波数変換処理を施し、その結果の信号を、アンテナex450を介して送信する。また受信データを増幅して周波数変換処理及びアナログデジタル変換処理を施し、変調/復調部ex452でスペクトラム逆拡散処理し、音声信号処理部ex454でアナログ音声信号に変換した後、これを音声出力部ex457から出力する。データ通信モード時は、本体部の操作部ex466等の操作に基づいてテキスト、静止画、又は映像データが操作入力制御部ex462を介して主制御部ex460に送出される。同様の送受信処理が行われる。データ通信モード時に映像、静止画、又は映像と音声を送信する場合、映像信号処理部ex455は、メモリ部ex467に保存されている映像信号又はカメラ部ex465から入力された映像信号を上記各実施の形態で示した動画像符号化方法によって圧縮符号化し、符号化された映像データを多重/分離部ex453に送出する。音声信号処理部ex454は、映像又は静止画をカメラ部ex465で撮像中に音声入力部ex456で収音した音声信号を符号化し、符号化された音声データを多重/分離部ex453に送出する。多重/分離部ex453は、符号化済み映像データと符号化済み音声データを所定の方式で多重化し、変調/復調部(変調/復調回路部)ex452、及び送信/受信部ex451で変調処理及び変換処理を施してアンテナex450を介して送信する。
電子メール又はチャットに添付された映像、又はウェブページにリンクされた映像を受信した場合等において、アンテナex450を介して受信された多重化データを復号するために、多重/分離部ex453は、多重化データを分離することにより、多重化データを映像データのビットストリームと音声データのビットストリームとに分け、同期バスex470を介して符号化された映像データを映像信号処理部ex455に供給するとともに、符号化された音声データを音声信号処理部ex454に供給する。映像信号処理部ex455は、上記各実施の形態で示した動画像符号化方法に対応した動画像復号化方法によって映像信号を復号し、ディスプレイ制御部ex459を介して表示部ex458から、リンクされた動画像ファイルに含まれる映像又は静止画が表示される。音声信号処理部ex454は、音声信号を復号し、音声出力部ex457から音声が出力される。リアルタイムストリーミングがますます普及しだしているため、ユーザの状況によっては音声の再生が社会的にふさわしくないこともあり得る。そのため、初期値としては、音声信号は再生せず映像データのみを再生する構成の方が望ましく、ユーザが映像データをクリックするなど操作を行った場合にのみ音声を同期して再生してもよい。
またここではスマートフォンex115を例に説明したが、端末としては符号化器及び復号化器を両方持つ送受信型端末の他に、符号化器のみを有する送信端末、及び、復号化器のみを有する受信端末という3通りの他の実装形式が考えられる。デジタル放送用システムにおいて、映像データに音声データが多重化された多重化データを受信又は送信するとして説明した。ただし、多重化データには、音声データ以外に映像に関連する文字データなどが多重化されてもよい。また、多重化データではなく映像データ自体が受信又は送信されてもよい。
なお、CPUを含む主制御部ex460が符号化又は復号処理を制御するとして説明したが、種々の端末はGPUを備えることも多い。よって、CPUとGPUで共通化されたメモリ、又は共通に使用できるようにアドレスが管理されているメモリにより、GPUの性能を活かして広い領域を一括して処理する構成でもよい。これにより符号化時間を短縮でき、リアルタイム性を確保し、低遅延を実現できる。特に動き探索、デブロックフィルタ、SAO(Sample Adaptive Offset)、及び変換・量子化の処理を、CPUではなく、GPUでピクチャなどの単位で一括して行うと効率的である。