以下、本発明の実施の形態について、図面を参照しながら説明する。なお、以下の実施形態における構成要素は、適宜、既存の構成要素等との置き換えが可能であり、また、他の既存の構成要素との組み合わせを含む様々なバリエーションが可能である。したがって、以下の実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。
<第1実施形態>
以下、図1~図48を参照して、本実施形態に係るメッシュ処理システムについて説明する。
図1は、本実施形態に係るメッシュ処理システム1の構成の一例を示す図である。図1に示すように、メッシュ処理システム1は、メッシュ符号化装置100及びメッシュ復号装置200を備えている。
図2は、本実施形態に係るメッシュ復号装置200の機能ブロックの一例を示す図である。
図2に示すように、メッシュ復号装置200は、多重分離部201と、基本メッシュ復号部202と、細分割部203と、メッシュ復号部204と、パッチ統合部205と、変位量復号部206と、映像復号部207とを有する。
ここで、基本メッシュ復号部202、細分割部203、メッシュ復号部204及び変位量復号部206は、メッシュを分割したパッチ単位で処理を行うように構成されており、その後、これの処理結果についてパッチ統合部205で統合されるように構成されていてもよい。
図3Aの例では、メッシュが、基本面1及び2で構成されるパッチ1と、基本面3及び4で構成されるパッチ2とに分割されている。
多重分離部201は、多重化されたビットストリームを、基本メッシュビットストリームと変位量ビットストリームとテクスチャビットストリームとに分離するように構成されている。
<基本メッシュ復号部202>
基本メッシュ復号部202は、基本メッシュビットストリームを復号し、基本メッシュを生成して出力するように構成されている。
ここで、基本メッシュは、3次元空間における複数の頂点と、かかる複数の頂点を接続する辺とで構成される。
なお、図3Aに示すように、基本メッシュは、3つの頂点で表現される基本面を組み合わせて構成される。
基本メッシュ復号部202は、例えば、非特許文献2に示すDracoを用いて、基本メッシュビットストリームを復号するように構成されていてもよい。
また、基本メッシュ復号部202は、細分割手法の種別を制御する制御情報として、後述の「subdivision_method_id」を生成するように構成されていてもよい。
以下、図4~図5を参照して、基本メッシュ復号部202で復号される制御情報について説明する。
図4は、基本メッシュビットストリームのシンタックス構成の一例を示す図である。
図4に示すように、第1に、基本メッシュビットストリームは、基本メッシュパッチに対応する制御情報の集合であるBPH(Base Patch header:ベースパッチヘッダ)を含んでいてもよい。第2に、基本メッシュビットストリームは、BPHの次に、基本メッシュパッチを符号化した基本メッシュパッチデータを含んでいてもよい。
以上のように、基本メッシュビットストリームは、各パッチデータに、1つずつBPHが対応する構成となる。なお、図4の構成は、あくまで一例であり、各パッチデータに、BPHが対応する構成となっていれば、基本メッシュビットストリームの構成要素として、上述以外の要素が追加されてもよい。
例えば、図4に示すように、基本メッシュビットストリームは、SPS(シーケンスパラメータセット:Sequence Parameter Set)を含んでいてもよいし、フレームに対応する制御情報の集合であるFH(Frame Header:フレームヘッダ)を含んでもよいし、メッシュに対応する制御情報であるMH(Mesh Header:メッシュヘッダ)を含んでもよい。
図5は、BPHのシンタックス構成の一例を示す図である。ここで、シンタックスの機能が同様であれば、図5に示すシンタックスメイト異なるシンタックス名が用いられても差し支えない。
図5に示すBPHのシンタックス構成において、Description欄は、各シンタックスが、どのように符号化されているかを意味している。また、ue(v)は、符号無し0次指数ゴロム符号であることを意味し、u(n)は、nビットのフラグであることを意味する。
BPHは、基本メッシュパッチに含まれる基本面の個数を指定する制御信号(mdu_face_count_minus1)を少なくとも含む。
また、BPHは、基本パッチごとに基本メッシュの細分割手法の種別を指定する制御信号(mdu_subdivision_method_id)を少なくとも含む。
また、BPHは、基本メッシュパッチごとに細分割数生成手法の種別を指定する制御信号(mdu_subdivision_num_method_id)を含んでもよい。
例えば、mdu_subdivision_num_method_id=0のとき、予測分割残差により基本面の細分割数を生成することと定義し、mdu_subdivision_num_method_id=1のとき、再帰的に基本面の細分割数を生成することと定義し、mdu_subdivision_num_method_id=2のとき、全ての基本面に対して同じ上限細分割回数だけ、再帰的に細分割を行うように定義してもよい。
BPHは、予測分割残差により基本面の細分割数を生成するとき、インデックスi(i=0,…,mdu_face_count_minus1)ごとに基本面の予測分割残差を指定する制御信号(mdu_subdivision_resuiduals)を含んでもよい。
BPHは、再帰的に基本面の細分割数を生成するとき、基本メッシュパッチごとに再帰的に行う細分割回数の上限を識別するための制御信号(mdu_max_depth)を含んでもよい。
BPHは、インデックスi(i=0,…,mdu_face_count_minus1)及びj(j=0,…,mdu_subdivision_depth_index)ごとに、基本面を再帰的に細分割するか否かを指定する制御信号(mdu_subdivision_flag)を含んでもよい。
BPHは、一度の細分割あたりの再分割数を指定する制御信号(mdu_subdivision_num)を含んでいてもよい。
図6に示すように、基本メッシュ復号部202は、分離部202Aと、イントラ復号部202Bと、メッシュバッファ部202Cと、接続情報復号部202Dと、インター復号部202Eとを備える。
分離部202Aは、基本メッシュビットストリームを、Iフレーム(参照フレーム)のビットストリームとPフレームのビットストリームとに分類するように構成されている。
(イントラ復号部202B)
イントラ復号部202Bは、例えば、非特許文献2に示すDracoを用いて、Iフレームのビットストリームから、Iフレームの頂点の座標及び接続情報を復号するように構成されている。
図7は、イントラ復号部202Bの機能ブロックの一例を示す図である。
図7に示すように、イントラ復号部202Bは、分離部202Aと、任意イントラ復号部202B1と、整列部202B2とを有する。
任意イントラ復号部202B1は、非特許文献2に示すDracoを含む任意の方式を用いて、Iフレームのビットストリームから、Iフレームの順序無し頂点の座標及び接続情報を復号するように構成されている。
整列部202B2は、順序無し頂点を所定の順序に並び替えることによって頂点を出力するように構成されている。
所定の順序として、例えば、モートンコード順を用いてもよく、ラスタスキャン順を用いてもよい。
また、座標が一致する複数の頂点、すなわち重複頂点をまとめて、単一頂点としてから、所定の順序に並び替えてもよい。
メッシュバッファ部202Cは、イントラ復号部202Bによって復号されたIフレームの頂点の座標及び接続情報を蓄積するように構成されている。
接続情報復号部202Dは、メッシュバッファ部202Cから取り出したIフレームの接続情報をPフレームの接続情報にするように構成されている。
インター復号部202Eは、メッシュバッファ部202Cから取り出したIフレームの頂点の座標とPフレームのビットストリームから復号した動きベクトルとを加算することによって、Pフレームの頂点の座標を復号するように構成されている。
本実施形態では、図8に示すように、Pフレームの基本メッシュの頂点とIフレーム(参照フレーム)の基本メッシュの頂点との間で対応関係が存在する。ここで、インター復号部202Eによって復号される動きベクトルは、Pフレームの基本メッシュの頂点の座標とIフレームの基本メッシュの頂点の座標との差分ベクトルである。
(インター復号部202E)
図9は、インター復号部202Eの機能ブロックの一例を示す図である。
図9に示すように、インター復号部202Eは、動きベクトル残差復号部202E1と、動きベクトルバッファ部202E2と、動きベクトル予測部202E3と、動きベクトル算出部202E4と、加算器202E5とを有する。
動きベクトル残差復号部202E1は、PフレームのビットストリームからMVR(Motion Vector Residual)を生成するように構成されている。
ここで、MVRは、MV(Motion Vector)とMVP(Motion Vector Prediction)との差分を示す動きベクトル残差である。MVは、対応するIフレームの頂点の座標とPフレームの頂点の座標との間の差分ベクトル(動きベクトル)である。MVPは、MVを用いて対象の頂点のMVの予測した値(動きベクトルの予測値)である。
動きベクトルバッファ部202E2は、動きベクトル算出部202E4によって出力されたMVを順次に保存するように構成されている。
動きベクトル予測部202E3は、復号対象の頂点と接続している頂点について、動きベクトルバッファ部202E2から復号済みのMVを取得し、図10に示すように、取得された復号済みのMVの全部又は一部を用いて、復号対象の頂点のMVPを出力するように構成されている。
動きベクトル算出部202E4は、動きベクトル残差復号部202E1で生成されたMVRと動きベクトル予測部202E3から出力されたMVPとを加算し、復号対象の頂点のMVを出力するように構成されている。
加算器202E5は、対応関係を持つIフレーム(参照フレーム)の復号済みの基本メッシュから得られた復号対象の頂点に対応する頂点の座標と、動きベクトル算出部202E3から出力された動きベクトルMVとを加算し、復号対象の頂点の座標を出力するように構成されている。
以下、インター復号部202Eの各部の詳細について説明する。
図11に、動きベクトル予測部202E3の動作の一例を示すフローチャートを示す。
図11に示すように、ステップS1001において、動きベクトル予測部202E3は、MVP及びNに0を設定する。
ステップS1002において、動きベクトル予測部202E3は、動きベクトルバッファ部202E2から、復号対象の頂点の周りの頂点のMVの集合を取得し、後続の処理が終わっていない頂点を特定し、Noに遷移し、全ての頂点について後続の処理が終わっている場合は、Yesに遷移する。
ステップS1003において、動きベクトル予測部202E3は、処理対象の頂点のMVが、復号済みでなければ、Noに遷移し、処理対象の頂点のMVが、復号済みであれば、Yesに遷移する。
ステップS1004において、動きベクトル予測部202E3は、MVPにMVを加算し、Nに1を加算する。
ステップS1005において、動きベクトル予測部202E3は、Nが0より大きければ、MVPをNで除した結果を出力し、Nが0であれば、0を出力し、処理を終了する。
すなわち、動きベクトル予測部202E3は、復号対象の頂点の周りにある頂点の復号済みの動きベクトルを平均することによって、復号対象のMVPを出力するように構成されている。
なお、動きベクトル予測部202E3は、かかる復号済みの動きベクトルの集合が空集合の場合、MVPを0とするように構成されていてもよい。
動きベクトル算出部202E4は、式(1)によって、動きベクトル予測部202E3によって出力されたMVP及び動きベクトル残差復号部202E1によって生成されたMVRから、復号対象の頂点のMVを算出するように構成されていてもよい。
MV(k)=MVP(k)+MVR(k) … (1)
ここで、kは、頂点のインデックスである。MV、MVR及びMVPは、x成分、y成分及びz成分を有するベクターである。
かかる構成によれば、MVPを用いて、MVの代わりにMVRのみを符号化するため、符号化効率を高める効果が期待できる。
加算器202E5は、動きベクトル算出部202E4によって算出された頂点のMVと、かかる頂点に対応する参照フレームの頂点の座標とを加算することによって、かかる頂点の座標を算出し、接続情報(Connectivity)を参照フレームのままにするように構成されている。
具体的には、加算器202E5は、式(2)を用いて、k番目の頂点の座標v’i(k)を算出するように構成されていてもよい。
v’i(k)=v’j(k)+MV(k) … (2)
ここで、v’i(k)は、復号対象のフレームで復号するk番目の頂点の座標であり、v’j(k)は、参照フレームの復号したk番目の頂点の座標であり、MV(k)は、復号対象のフレームのk番目のMVであり、k=1,2…,Kである。
また、復号対象のフレームの接続情報は、参照フレームの接続情報と同一にされる。
なお、動きベクトル予測部202E3は、復号済みのMVを用いてMVPを算出するため、復号の順番がMVPに影響を及ぼす。
かかる復号の順番は、参照フレームの基本メッシュの頂点の復号の順番にする。一般的に、一定の繰り返しパターンを用いて、起点となるエッジから基本面を1つずつ増やす復号手法であれば、復号した基本メッシュの頂点の順番が復号の過程で決められる。
例えば、動きベクトル予測部202E3は、参照フレームの基本メッシュにおいて、Edgebreakerを用いて、頂点の復号の順番を決めてもよい。
かかる構成によれば、頂点の座標の代わりに参照フレームからのMVを符号化するため、符号化効率を高める効果が期待できる。
(インター復号部202Eの変更例1)
図11に示すフローチャートで算出したMVPは、復号済みの周りのMVの単純平均によって算出されているがが、重み付け平均によって算出されてもよい。
すなわち、動きベクトル予測部202E3は、復号対象の頂点の周りにある頂点の復号済みの動きベクトルに対して、復号対象の頂点及び復号対象の頂点の周りにある頂点に対応する参照フレームの頂点間の距離に応じた重みで加重平均することで、復号対象の動きベクトルの予測値を出力するように構成されていてもよい。
なお、動きベクトル予測部202E3は、復号対象の頂点の周りにある頂点の復号済みの動きベクトルの一部に対して、復号対象の頂点及び復号対象の頂点の周りにある頂点に対応する参照フレームの頂点間の距離に応じた重みで加重平均することで、復号対象の動きベクトルの予測値を出力するように構成されていてもよい。
本変更例1では、インター復号部202Eの動きベクトル予測部202E3は、以下の手順で、MVPを算出するように構成されている。
第1に、動きベクトル予測部202E3は、重みを算出するように構成されている。
図12に、復号済みの周りの頂点との距離の和Total_Dを算出する動作の一例を示すフローチャートを示す。
図12に示すように、ステップS1101において、動きベクトル予測部202E3は、Total_Dに0を設定する。
ステップS1102は、ステップS1002と同じである。
ステップS1103は、ステップS1003と同じである。
ステップS1104において、動きベクトル予測部202E3は、Total_Dに対してe(k)を加算する。
すなわち、動きベクトル予測部202E3は、復号対象の頂点の周りにある頂点の集合を参照して、復号済みの頂点の距離を加算する。
本変更例1では、動きベクトル予測部202E3は、頂点間の対応関係が既知である参照フレームにおける距離を利用して重みを算出するように構成されている。
つまり、図12のステップS1104におけるe(k)は、参照フレームにおける対応する頂点間の距離である。
そして、動きベクトル予測部202E3は、式(3)及び(4)によって、重みw(k)を算出するように構成されていてもよい。
ここで、Θは、復号対象の頂点を含んでいるメッシュの面における復号済みの各頂点の集合であり、e(p/k)は、参照フレームで復号対象の頂点と頂点p/kと対応する頂点との間の距離であり、w(k)は、頂点kにおける重みである。
なお、動きベクトル予測部202E3は、距離に応じて事前に決めたルールで、重みを設定するように構成されていてもよい。
例えば、動きベクトル予測部202E3は、e(k)が閾値TH1よりも小さい場合、重みを1に設定し、e(k)が閾値TH2よりも小さい場合、重みを0.5に設定しし、それ以外の場合、重みを0に設定する(重みを利用しない)ように構成されていてもよい。
かかる構成によれば、復号対象の頂点との距離が近い場合に重みを大きくすることで、より高い精度でMVPを算出することができるという効果が期待できる。
第2に、動きベクトル予測部202E3は、MVPを参照するように構成されている。
図13に、重み付け平均を用いてMVPを算出する動作の一例を示すフローチャートを示す。
図13に示すように、ステップS1201において、動きベクトル予測部202E3は、MVP及びNに0を設定する。
ステップS1202は、ステップS1002と同じである。
ステップS1203は、ステップS1003と同じである。
ステップS1204において、動きベクトル予測部202E3は、MVPにw(k)×MV(k)を加算し、Nに1を加算する。
ステップS1205は、ステップS1005と同じである。
或いは、動きベクトル予測部202E3は、式(5)によって、MVPを算出するように構成されていてもよい。
ここで、Θは、復号対象の頂点を含んでいるメッシュの面における復号済みの各頂点の集合である。
かかる構成によれば、重み付け平均で、より高い精度のMVPを算出することができるため、MVRの値を小さくしてゼロ付近に集中させることにより、符号化効率を高めるという効果が期待できる。
(インター復号部202Eの変更例2)
本変更例2では、動きベクトル予測部202E3は、周りの複数のMVを用いてMVPを算出するのではなく、1つのMVを選択するように構成されている。
すなわち、動きベクトル予測部202E3は、復号対象の頂点と接続している頂点のMVとして、動きベクトルバッファ部202E2に蓄積されている復号済みのMVのうち最近傍の頂点のMVを選択するように構成されていてもよい。
ここで、動きベクトル予測部202E3は、動きベクトルバッファ部202E2に蓄積されている復号済みのMVの中から、復号対象の頂点と接続している頂点のMVから成る候補リストを構築し、Pフレーム(復号対象のフレーム)のビットストリームから復号したインデックスに基づいて、候補リストから動きベクトルを選択するように構成されていてもよい。
図14に、MVPとして候補MVの集合からMVを選択する動作の一例を示すフローチャートを示す。
図14に示すように、ステップS1301において、動きベクトル予測部202E3は、PフレームのビットストリームからリストIDを復号する。
ステップS1302において、動きベクトル予測部202E3は、候補MVの中から、リストIDを付けるMVをMVPとして選択する。
なお、図13における候補MVの集合では、復号済みの周りのMV及びその組み合わせで算出されたMVが一定の順番で並んでいる。
図15に、かかる候補MVの集合を作成する動作の一例を示すフローチャートを示す。
図15に示すように、ステップS1401において、動きベクトル予測部202E3は、復号対象の頂点の周りの頂点のMVの集合を参照して、復号対象の頂点の周りの全ての頂点に対する処理が完了しているか否かについて判定する。
かかる処理が完了している場合、本動作は、終了し、かかる処理が完了していない場合、本動作は、ステップS1402に進む。
ステップS1402において、動きベクトル予測部202E3は、対象の頂点のMVが復号されているか否かについて判定する。
かかるMVが復号されている場合、本動作は、ステップS1403に進み、かかるMVが復号されていない場合、本動作は、ステップS1401に戻る。
ステップS1403において、動きベクトル予測部202E3は、かかるMVが他の復号済みのMVと重複するか否かについて判定する。
重複する場合、本動作は、ステップS1401に戻り、重複していない場合、本動作は、ステップS1404に進む。
動きベクトル予測部202E3は、ステップS1404において、かかるMVに対して付与するリストIDを決定し、ステップS1405において、候補MVの集合に含める。
なお、図15において、動きベクトル予測部202E3は、リストIDを決定する際に、リストIDを順番に1つずつ増やしてもよいし、参照フレームで復号対象の頂点と頂点kに対応する頂点との間の距離(式(3)のe(k))の順でリストIDを決定してもよい。
かかる構成によれば、候補MVの1つをMVPとして選択することが、場合によって平均よりMVと近いことがあるため、その場合には、符号化効率を高めるという効果が期待できる。
更に、動きベクトル予測部202E3は、上述の候補MVの中から、連続するMV0及びMV1を平均したMVを、新たな候補MVとしてリストの中に追加するように構成されていてもよい。動きベクトル予測部202E3は、かかるMVの追加先としては、表1に示すように、MV0及びMV1の後にする。
かかる構成によれば、選択した候補MVが、復号対象の頂点のMVとより近い可能性を高めるという効果が期待できる。
更に、動きベクトル予測部202E3は、リストIDを符号化せず、候補MVの集合から最も近傍の頂点のMVを選択するように構成されていてもよい。かかる構成によれば、符号化効率を更に高めるという効果が期待できる。
(インター復号部202Eの変更例3)
上述の実施例及び変更例1~2では、周りの頂点は、復号対象の頂点と接続している頂点であった。
これに対して、本変更例3では、動きベクトル予測部202E3は、平行四辺形予測によって、すなわち、復号対象の頂点と直接に接続していない頂点も利用して、MVPを算出するように構成されている。
図16に示すように、平行四辺形予測では、復号対象の頂点Aと共有エッジBCを持つ復号済みの面の反対側の頂点Dも利用する。
また、復号対象の頂点Aの共有エッジは、AB以外に、CE及びBGがある。したがって、平行四辺形予測では、同様に、頂点F及びHも利用できる。
例えば、動きベクトル予測部202E3は、図16に示す面BCDを用いて、式(6)で、MVPを算出するように構成されていてもよい。
MVP=MV(B)+MV(C)-MV(D) … (6)
ここで、MV(X)は、頂点Xの動きベクトルであり、MVPは、復号対象の頂点Aの動きベクトル予測値である。
また、上述の共有エッジが複数ある時に、動きベクトル予測部202E3は、それぞれのMVPを平均してもよいし、面の重心が最も近い面を選択してもよい。
(インター復号部202Eの変更例4)
本変更例では、動きベクトル残差復号部202E1によって生成されたMVRは、そのままではなく、MVRを整数表現する際の量子化幅が制御されるように構成されている。
本変更例では、動きベクトル残差復号部202E1は、MVRの量子化幅を制御する制御情報として、adaptive_mesh_flag、adaptive_bit_flag及び精度制御パラメータを復号するように構成されている。
すなわち、動きベクトル残差復号部202E1は、基本メッシュ全体のadaptive_mesh_flag及び基本パッチ毎のadaptive_bit_flagを復号するように構成されている。
ここで、adaptive_mesh_flag及びadaptive_bit_flagは、上述のMVRの量子化幅の調整を行うか否かについて示すフラグであり、0又は1のいずれかの値を採る。
ここで、動きベクトル残差復号部202E1は、adaptive_mesh_flagが有効(すなわち、1)である場合のみ、adaptive_bit_flagを復号する。
また、動きベクトル残差復号部202E1は、adaptive_mesh_flagが無効(すなわち、0)である場合、adaptive_bit_flagは無効(すなわち、0)とみなす。
図17に、に基本メッシュビットストリームを復号して生成した制御情報であるadaptive_mesh_flag、adaptive_bit_flag及び精度制御パラメータから、復号されたMVRの量子化幅を制御する動作の一例を示すフローチャートを示す。
図17に示すように、ステップS1601において、動きベクトル予測部202E3は、adaptive_mesh_flagが0であるか否かについて判定する。
メッシュ全体のadaptive_mesh_flagが0であると判定された場合、本動作は、終了する。
一方、メッシュ全体のadaptive_mesh_flagが1であると判定された場合、本動作は、ステップS1602に進む。
ステップS1602において、動きベクトル予測部202E3は、フレーム内に未処理のパッチが存在するか否かについて判定する。
ステップS1603において、動きベクトル予測部202E3は、パッチごとに復号されるadaptive_mesh_flagが0であるか否かについて判定する。
adaptive_mesh_flagが0であると判定された場合、本動作は、ステップS1601に戻る。
一方、adaptive_mesh_flagが1であると判定された場合、本動作は、ステップS1604に進む。
ステップS1604において、動きベクトル予測部202E3は、後述の精度制御パラメータに基づいて、MVRの量子化幅を制御する。
なお、このように量子化幅を制御されたMVRの値を「MVRQ(Motion Vector Residual Quantization)」と呼ぶ。
ここで、動きベクトル予測部202E3は、例えば、表2のような表を参照して、基本メッシュビットストリーム復号して生成した量子化幅制御パラメータに対応するMVRの量子化幅を用いるように構成されていてもよい。
かかる構成によれば、MVR量子化幅の制御により、符号化効率を高めることができるという効果が期待できる。更に、メッシュレベルのadaptive_mesh_flag及びパッチレベルのadaptive_mesh_flagの階層的な仕組みにより、MVR量子化幅の制御をしない時に無駄なビットを最小化することができるという効果が期待できる。
(インター復号部202Eの変更例5)
動きベクトル残差復号部202E1によって生成されたMVRを符号化しない場合、誤差が生じる。本変更例5では、かかる誤差を補正するため、離散的な動きベクトル差分を符号化する。
具体的には、図18に示すように、MVRは、x軸、y軸及びz軸の6方向において、1、2、4及び8の大きさを採り得る。かかる符号化の一例について、表3及び表4に示す。
また、複数の方向の組み合わせで、MVRの符号化を行ってもよい。例えば、x軸の+方向の2、y軸の+方向の1の順番で補正してもよい。
かかる構成によれば、MVRの符号化よりも離散的な動きベクトル差分の符号化効率が高いという効果が期待できる。
以降で、インター復号部202Eの更なる変更例について説明する。
上述のインター復号部202Eの更なる変更例では、上述のインター復号部202Eを実施する前に、以下の機能ブロックを追加するように構成されている。
具体的には、図19に示すように、インター復号部202Eは、図9に示す構成に加えて、重複頂点探索部202E6と、重複頂点判別部202E7と、動きベクトル取得部202E8と、All skip modeシングル判別部202E9と、Skip modeシングル判別部202E10とを備えている。
All skip modeシングル判別部202E9は、All skip modeシングルがYes及びNoのいずれを示すかについて判別するように構成されており、Skip modeシングル判別部202E10は、skip modeシングルYes及びNoのいずれを示すかについて判別するように構成されている。
ここで、All skip modeシグナルが、Pフレームのビットストリームの最初にあり、少なくとも2値を持ち、1ビット又は1ビット以上である。
その1つ(All skip modeシグナルが、Yesを示す場合、例えば、1である場合)は、Pフレームの全ての重複頂点の動きベクトルをビットストリームから復号せず、重複された頂点の動きベクトルをコピーするシグナルである。
もう1つ(All skip modeシグナルが、Noを示す場合、例えば、0である場合)は、Pフレームの各頂点で異なる処理を行うシグナルである。更に、もう1つは、他の値を持ってもよい。例えば、もう1つは、全ての重複頂点の動きベクトルについて、動きベクトル取得部202E8における処理を実施せず、図9に示すインター復号部202Eと同様の処理を行うシングルである。
ここで、Skip modeシグナルは、All skip modeシグナルがNoを示す場合、重複頂点毎に2値を持ち、1ビットである。
Skip modeシグナルは、All skip modeシグナルがYesを示す場合(例えば、1である場合)、当該頂点の動きベクトルをビットストリームから復号せず、重複された頂点の動きベクトルをコピーするシグナルルである。
Skip modeシグナルは、All Skip modeシグナルがNoを示す場合(例えば、0である場合)、当該頂点の動きベクトルについて動きベクトル取得部202E8における処理を実施せず、図9に示すインター復号部202Eと同様の処理を行うシングルである。
なお、上述のSkip modeシグナルは、ビットストリームから直接に復号されてもよいし、ビットストリームから図9に示すインター復号部202Eと同様の処理を行う重複頂点を特定するデータ(例えば、当該重複頂点のインデックス)を復号し、かかるデータからSkip modeシグナルを算出してもよい。
更に、Skip modeシグナルを算出せず、上述の図9に示すインター復号部202Eと同様の処理を行う重複頂点を特定するデータ(例えば、重複頂点のインデックス)を用いて、上述の場合と同様に、当該頂点の動きベクトル復号方法を決めてもよい。
重複頂点探索部202E6は、復号した参照フレームの基本メッシュの幾何情報から、座標が一致する頂点(以下、重複頂点と呼ぶ)のインデックスを探索してバッファ(図示せず)に保存するように構成されている。
具体的には、重複頂点探索部202E6の入力は、復号した参照フレームの基本メッシュの各頂点のインデックス(復号順)及び位置座標である。
また、重複頂点探索部202E6の出力は、重複頂点が存在する頂点のインデックス(vindex0)及びかかる重複頂点のインデックス(vindex1)のペアのリストである。ここで、かかるペアのリストは、index0の順で、バッファrepVertに保存される。
また、vindex1の頂点が、vindex0の前に復号されたため、vindex0>vindex1の関係となる。
なお、参照フレームの基本メッシュで重複頂点が分かる方法として、重複頂点が存在する頂点に対して、特別なシグナルにより、位置座標ではなく、重複頂点のインデックスを復号する。かかる特別なシグナルにより、該当頂点のインデックス及び重複頂点のインデックスのペアを復号順で保存できる。
重複頂点判別部202E7は、該当頂点が復号した頂点の中に重複頂点があるかどうかを判別するように構成されている。
ここで、重複頂点判別部202E7は、該当頂点のインデックスが、重複頂点が存在する頂点のインデックスの中のものであれば、復号した頂点の中に重複頂点があると判別する。なお、復号順で該当頂点が来るので、上述の探索が不要である。
ここで、重複頂点判別部202E7が、該当頂点の重複頂点が存在しないと判断する場合は、図9に示すインター復号部202Eと同様の処理が行われる。
動きベクトル取得部202E8は、該当頂点の重複頂点が存在する場合に、All skip modeシグナルがYesを示す場合、或いは、All skip modeシグナルがNoを示す場合、該当頂点のSkip modeシグナルがYesを示す場合、復号した動きベクトルを保存する動きベクトルバッファ部202E2から重複頂点と同じインデックスを持つ頂点の動きベクトルを取得し、該当頂点の動きベクトルにするように構成されている。
ここで、All skip modeシグナルがNoを示し、該当頂点のSkip modeシグナルがNoを示す場合は、動きベクトル取得部202E8の代わりに、図9に示すインター復号部202Eと同様の処理が行われる。
かかる構成によれば、重複頂点が存在する頂点に対して動きベクトルの復号計算及び符号量の削減効果が期待できる。
上述のインター復号部202Eの更なる変更例では、インター復号部202Eは、参照フレームの復号済みの基本メッシュから、参照フレームの頂点と復号対象のフレームの頂点との間の対応関係を取得する。
そして、インター復号部202Eは、かかる対応関係に基づいて、復号対象のフレームの頂点の接続情報について符号化せずに参照フレームの復号済みの頂点の接続情報と同一とするように構成されている。
また、インター復号部202Eは、参照フレームの頂点の復号順で、復号対象のフレームの基本メッシュをシグナルに基づいて2種類の領域に分割する。第1領域では、インター処理を用いて復号し、第2領域では、イントラ処理を用いて復号する。
なお、上述の領域は、参考フレームの基本メッシュを復号する際に、復号順上に連続する複数の頂点によって形成される領域であると定義する。
また、シグナルを用いて、復号対象のフレームの基本メッシュの頂点の座標を復号する手段は、以下の2つの実装が想定される。
(手段1)
手段1では、シグナルは、vertex_idx1、vertex_idx2及びintra_flagになる。
ここで、vertex_idx1及びvertex_idx2は、頂点の復号順のインデックス(頂点インデックス)であり、intra_flagは、上述のインター復号手法であるかイントラ復号手法であるかについて示すフラグである。かかるシグナルは、複数あってもよい。
すなわち、vertex_idx1及びvertex_idx2は、上述の一部の領域(第1領域及び第2領域)の開始位置及び終了位置を規定する頂点インデックスである。
(手段2)
手段2では、Edgebreakerで参照フレームの基本メッシュの接続情報を復号し、頂点の座標の復号順をEdgebreakerで決めた順番にするという前提がある。
図20は、Edgebreakerを用いて、接続情報及び頂点の順番を決める動作の一例を示す図である。
図20において、矢印は、接続情報の復号順を示し、数字は、頂点の復号順を示し、同じ線種の矢印によって同じ領域を規定している。
手段2では、シグナルは、インター復号手法であるかイントラ復号手法であるかについて示すフラグであるintra_flagのみになる。
すなわち、手段2では、インター復号部202Eは、Edgebreakerを用いて、第1領域及び第2領域に分割するように構成されている。
<細分割部203>
細分割部203は、制御情報によって示された細分割手法により、基本メッシュ復号部202によって復号された基本メッシュから、追加された細分割頂点及びそれらの接続情報を生成して出力するように構成されている。
ここで、基本メッシュ、追加された細分割頂点、及び、それらの接続情報を、併せて「細分割メッシュ」と呼ぶ。
細分割部202は、基本メッシュビットストリームを復号して生成した制御情報であるsubdivision_method_idから、細分割手法の種別を特定するように構成されている。
以下、図3A及び図3Bを参照して、細分割部202について説明する。
図3A及び図3Bは、基本メッシュから細分割頂点を生成する動作の一例について説明するための図である。
図3Aは、5つの頂点で構成された基本メッシュの一例について示す図である。
ここで、細分割には、例えば、各基本面において各辺の中点同士を接続するMid-edge分割法を用いてもよい。これによって、ある基本面は、4つの面に分割されることになる。
図3Bは、5つの頂点で構成された基本メッシュを分割した細分割メッシュの一例を示す。図3Bに示す細分割メッシュでは、元の5つの頂点(黒丸)に加えて8つの細分割頂点(白丸)が生成されている。
このように生成した細分割頂点ごとに、変位量復号部206で変位量を復号することによって、符号化性能の向上が期待できる。
また、各パッチで異なる細分割方法を適用してもよい。これによって、変位量復号部206で復号される変位量をパッチごとに適応的に変化させ、符号化性能の向上が期待できる。分割したパッチの情報は、制御情報であるpatch_idとして受け取られる。
以下、図21を参照して、細分割部203について説明する。図22は、細分割部203の機能ブロックの一例について示す図である。
図22に示すように、細分割部203は、基本メッシュ細分割部203Aと細分割メッシュ調整部203Bとを有する。
(基本メッシュ細分割部203A)
基本メッシュ細分割部203Aは、入力された基本メッシュ及び基本メッシュの分割情報に基づき、基本面及び基本パッチごとの分割数(細分割数)を算出し、かかる分割数に基づいて基本メッシュを細分割し、細分割面を出力するように構成されている。
すなわち、基本メッシュ細分割部203Aは、基本面及び基本パッチ単位で、上述の分割数を変えることができるように構成されていてもよい。
ここで、基本面は、基本メッシュを構成する面であり、基本パッチは、いくつかの基本面の集合である。
また、基本メッシュ細分割部203Aは、基本面の細再分割数を予測し、予測した基本面の細分割数に対して予測分割数残差を加算することで、基本面の細分割数を算出するように構成されていてもよい。
また、基本メッシュ細分割部203Aは、基本面の隣接基本面の細分割数に基づいて、基本面の細分割数を算出するように構成されていてもよい。
また、基本メッシュ細分割部203Aは、直前に蓄積された基本面の細分割数に基づき、基本面の細分割数を算出するように構成されていてもよい。
また、基本メッシュ細分割部203Aは、基本面を構成する3辺を分割する頂点を生成し、生成した頂点を接続することで、基本面を細分割するように構成されていてもよい。
図22に示すように、基本メッシュ細分割部203Aの後段に、後述の細分割メッシュ調整部を備える203Bを備えている。
以下、図22~図24を用いて、基本メッシュ細分割部203Aの処理の一例について説明する。
図22は、基本メッシュ細分割部203Aの機能ブロックの一例を示す図であり、図24は、基本メッシュ細分割部203Aの動作の一例を示すフローチャートである。
図22に示すように、基本メッシュ細分割部203Aは、基本面分割数バッファ部203A1と、基本面分割数参照部203A2と、基本面分割数予測部203A3と、加算部203A4と、基本面分割部203A5とを有する。
基本面分割数バッファ部203A1は、基本面の分割数を含む基本面の分割情報を格納しており、基本面分割数参照部203A2に対して基本面の分割情報を出力するように構成されている。
ここで、基本面分割数バッファ部203A1のサイズは、1とし、基本面分割数参照部203A2に対して、直前に蓄積された基本面の分割数を出力するように構成されていてもよい。
すなわち、基本面分割数バッファ部203A1のサイズを1にすることで、最後に復号した細かい分割数(直前に復号した細分割数)のみを参照するように構成されていてもよい。
基本面分割数参照部203A2は、復号対象の基本面に対して隣接する基本面が存在していない場合、或いは、復号対象の基本面に対して隣接する基本面が存在しているが分割数が確定していない場合は、基本面分割数予測部203A3に対して、参照不可を出力するように構成されている。
一方、基本面分割数参照部203A2は、復号対象の基本面に対して隣接する基本面が存在し且つ分割数が確定している場合は、基本面分割数予測部203A3に対して、かかる分割数を出力するように構成されている。
基本面分割数予測部203A3は、入力された1つ以上の分割数に基づいて基本面の分割数(細分割数)を予測し、加算部203A4に対して、予測した分割数(予測分割数)を出力するように構成されている。
ここで、基本面分割数予測部203A3は、基本面分割数参照部203A2から参照不可のみが入力された場合は、加算部203A4に対して、0を出力するように構成されている。
なお、基本面分割数予測部203A3は、1つ以上の分割数が入力された場合、入力された分割数の平均値や最大値や最小値や最頻値等の統計値のいずれかを用いて、予測分割数を生成するように構成されていてもよい。
なお、基本面分割数予測部203A3は、1つ以上の分割数が入力された場合、最も隣接する面の分割数を予測分割数として生成するように構成されていてもよい。
加算部203A4は、予測残差ビットストリームから復号した予測分割数残差と基本面分割数予測部203A3から取得した予測分割数とを加算することによって得られた分割数を、基本面分割部203A5に対して出力するように構成されている。
基本面分割部203A5は、加算部203A4から入力された分割数に基づき、基本面を細分割するように構成されている。
図23は、基本面を9分割したケースの一例である。図23を参照して、基本面分割部203A5による基本面の分割方法について説明する。
基本面分割部203A5は、基本面を構成する辺ABに対してN等分(N=3)する点A_1,…,A_(N-1)を生成する。
同様に、基本面分割部203A5は、辺BCや辺CAについてもN等分し、それぞれ点B_1,…,B_(N-1)、C_1,…,C_(N-1)を生成する。
以降、辺AB、辺BC及び辺CA上の点を「辺分割点」と呼ぶ。
基本面分割部203A5は、全てのi(i=1,2,…,N-1)に対して、辺A_i B_(N-i),B_i C_(N-i),C_i A_(N-i)を生成し、N2個の細分割面を生成する。この分割方法を、以降、N2分割法と呼ぶ。N2分割法は、N=2のときMid-edge分割法と等価となる。
次に、図24を参照して、基本メッシュ細分割部203Aの処理手順について説明する。
ステップS2201において、最後の基本面に対して再分割処理が完了したか否かを判定する。処理が完了した場合終了し、そうでない場合はステップS2202に進む。
ステップS2202において、基本メッシュ細分割部203Aは、Depth<mdu_max_depthの判定を行う。
ここで、Depthは、現在の深度を表す変数で、初期値は0であり、mdu_max_depthは、基本面ごとに決められた最大深度を表す。
ステップS2202における条件を満たす場合は、本処理手順は、ステップS2203に進み、かかる条件を満たさない場合は、本処理手順は、ステップS2201に戻る。
ステップS2203において、基本メッシュ細分割部203Aは、現在の深度におけるmdu_subdivision_flagが1であるか否かについて判定する。
Yesの場合、本処理手順は、ステップS2201に戻り、Noの場合、本処理手順は、ステップS2204に進む。
ステップS2204において、基本メッシュ細分割部203Aは、基本面内の全ての細分割面をさらに細分割する。
ここで、基本メッシュ細分割部203Aは、基本面に対して一度も細分割処理が行われていない場合は、基本面を細分割する。
なお、細分割の方法については、ステップS2204で説明した方法と同様である。
具体的には、基本面が一度も細分割されていない場合は、基本面に対して図23のように細分割を行う。少なくとも1回は細分割されている場合は、細分割面をN2個に細分割する。図23を例にすると、頂点A_2と頂点Bと頂点B_1とからなる面を、基本面の分割のときと同様にN2分割法を用いて、N2個の面を生成する。
細分割処理が終了したとき、本処理手順は、ステップS2205に進む。
ステップS2205において、基本メッシュ細分割部203Aは、Depthに1を加算し、本処理手順は、ステップS2202に戻る。
また、基本メッシュ細分割部203Aは、全ての基本面に対して同じ上限細分割回数mdu_max_depthだけ細分割するように細分割処理を行ってもよい。このとき、一回あたりの細分割処理は、細分割数mdu_subdivision_numに基づき、N2分割法を用いて細分割を行うように構成されていてもよい。(細分割メッシュ調整部203B)
次に、細分割メッシュ調整部203Bによって行われる処理の具体例について説明する。以下、図24~28を用いて細分割メッシュ調整部203Bによって行われる処理の一例について説明する。
図25は、細分割メッシュ調整部203Bの機能ブロックの一例を示す図である。
図25に示すように、細分割メッシュ調整部203Bは、辺分割点移動部701と、細分割面分割部702とを有する。
(辺分割点移動部701)
辺分割点移動部701は、入力された初期細分割面に対して、基本面の辺分割点を隣接基本面の辺分割点のいずれかに移動し、細分割面を出力するように構成されている。
図26は、基本面ABC上の辺分割点を移動した例である。例えば、図26に示すように、辺分割点移動部701は、基本面ABCの辺分割点を最も近い隣接基本面の辺分割点に移動するように構成されていてもよい。
(細分割面分割部702)
細分割面分割部702は、入力された細分割面を再度細分割し、復号細分割面を出力するように構成されている。
図27は、基本面内の細分割面Xに対して再度細分割が行われたケースの一例を示す図である。
図27に示すように、細分割面分割部702は、細分割面を構成する頂点と隣接基本面の辺分割点とを接続することで、基本面内に新たな細分割面を生成するように構成されていてもよい。
図28は、全ての細分割面に対して、上述の細分割処理を行ったケースの一例を示す図である。
メッシュ復号部204は、細分割部203で生成された細分割メッシュ及び変位量復号部206で復号された変位量を用いて、復号メッシュを生成して出力するように構成されている。
具体的には、メッシュ復号部204は、各細分割頂点に対して、対応する変位量を加算することによって、復号メッシュを生成するように構成されている。ここで、各変位量がどの細分割頂点に対応するかについての情報は、制御情報によって示される。
パッチ統合部205は、メッシュ復号部206で生成された復号メッシュを、複数のパッチ分だけ統合して出力するように構成されている。
ここで、パッチの分割方法は、メッシュ符号化装置100によって定義される。例えば、パッチの分割方法は、各基本面に対して法線ベクトルを算出しておき、隣接する基本面の中で最も法線ベクトルが類似した基本面を選択し、両基本面を同じパッチとしてまとめ、かかる手順を、次の基本面に対して順次繰り返すように構成されていてもよい。
映像復号部207は、映像符号化によってテクスチャを復号して出力するように構成されている。例えば、映像復号部207は、非特許文献1のHEVCを用いてもよい。
<変位量復号部206>
変位量復号部206は、変位量ビットストリームを復号して変位量を生成して出力するように構成されている。
図3Bの例では、8個の細分割頂点が存在するため、変位量復号部206は、各細分割頂点に対してスカラー或いはベクトルで表現される変位量を8個定義するように構成されている。
以下、図29を参照して、変位量復号部206について説明する。図29は、変位量復号部206の機能ブロックの一例について示す図である。
図29に示すように、変位量復号部206は、制御情報復号部206Aと、算術復号部206Bと、コンテキスト値更新部206Cと、コンテキストバッファ…206Dと、コンテキスト選択部206Eと、多値化部206Fと、係数レベル値復号部F2と、インター予測部206Gと、フレームバッファ206Hと、加算器206Iと、逆量子化部206Jと、変位量予測加算部206Kとを備えている。
以下、図30を参照して、変位量ビットストリームの構成の一例について説明する。図30は、変位量ビットストリームの構成の一例について示す図である。
図30に示すように、第1に、変位量ビットストリームは、変位量の復号に関する制御情報の集合であるDPS(Displacement Parameter Set:ディスプレイスメントパラメータセット)を含んでいてもよい。
第2に、変位量ビットストリームは、パッチに対応する制御情報の集合であるDPH(Displacement Patch Header:ディスプレイスメントパッチヘッダ)を含んでいてもよい。
第3に、変位量ビットストリームは、DPHの次に、パッチを構成する符号化された変位量を含んでいてもよい。
以上のように、変位量ビットストリームは、各符号化された変位量に、1つずつDPH及びDPSが対応する構成となる。
なお、図30の構成は、あくまで一例である。各符号化された変位量に、DPH及びDPSが対応する構成となっていれば、変位量ビットストリームの構成要素として、上述以外の要素が追加されてもよい。
例えば、図30に示すように、変位量ビットストリームは、SPS(Sequence Parameter Set:シーケンスパラメータセット)を含んでいてもよい。
図31は、DPSのシンタックス構成の一例について示す図である。
図31において、Descriptor欄は、各シンタックスが、どのように符号化されているかを意味している。
また、図31において、ue(v)は、符号無し0次指数ゴロム符号であることを意味し、u(n)は、nビットのフラグであることを意味する。
DPSは、複数のDPSが存在する場合に、各DPSを識別するためのDPS id情報(dps_displacement_parameter_set_id)を少なくとも含む。
また、DPSは、インター予測を行うか否かを制御するフラグ(interprediction_enabled_flag)を含んでもよい。
例えば、interprediction_enabled_flagが0のときは、インター予測を行わないと定義し、interprediction_enabled_flagが1のときは、インター予測を行うと定義してもよい。interprediction_enabled_flagが含まれないときは、インター予測を行わないと定義してもよい。
また、DPSは、ウェーブレット変換を行うか否かを制御するフラグ(wavelet_transform_flag)を含んでもよい。
例えば、wavelet_transform_flagが0のときは、ウェーブレット変換を行わないと定義し、wavelet_transform_flagが1のときは、ウェーブレット変換を行うと定義してもよい。wavelet_transform_flagが含まれないときは、ウェーブレット変換を行うと定義してもよい。
また、DPSは、変位量予測加算を行うか否かを制御するフラグ(displacement_prediction_addition_flag)を含んでもよい。
例えば、displacement_prediction_addition_flagが0のときは、変位量予測加算を行わないと定義し、displacement_prediction_addition_flagが1のときは、変位量予測加算を行うと定義してもよい。displacement_prediction_addition_flagが含まれないときは、変位量予測加算を行わないと定義してもよい。
DPSは、逆DCTを行うか否かを制御するフラグ(dct_enabled_flag)を含んでもよい。
例えば、dct_enabled_flagが0のときは、逆DCTを行わないと定義し、dct_enabled_flagが1のときは、逆DCTを行うと定義してもよい。dct_enabled_flagが含まれないときは、逆DCTを行わないと定義してもよい。
以下、図34~図36を参照して、シンタックス構成について説明する。
まず、符号化時は、変位量の係数レベル値は、各フレームにおいて3×Nサイズの行列で表される。3は、空間領域における次元を示し、Nは、細分割頂点の総数を示す。かかる行列がブロックに分割され、ブロック単位で符号化される。
ブロックサイズは、3×nサイズ(n<N)であってもよいし、1×nサイズであってもよい。或いは、ブロックサイズとして、1×nサイズ及び2×nサイズを併用してもよい。ブロックサイズに満たない行列要素については、最大となるd×mサイズ(d=1,2,3, m<n)でブロックを構成する。
図32は、シンタックス構成の一例について示す図である。シンタックスは、行列単位で定義されるものとブロック単位で定義されるものがある。
第1に、行列単位で定義されるシンタックスについて説明する。
lastt_sig_coeff_prefixは、スキャン順で先頭の非零係数の座標位置のプリフィックスを表す。lastt_sig_coeff_suffixは、スキャン順で先頭の非零係数の座標位置のサフィックスを表す。
例えば、プリフィックスは、トランケーテッド・ライス二値化によって表現され、サフィックスは、固定長で表現される。図33は、最大値が32である場合のプリフィックス符号列及びサフィックス符号列を示す図である。
第2に、ブロック単位で定義されるシンタックスについて説明する。
coded_block_flagは、ブロック内に非零係数があることを示すフラグである。かかるフラグは、各ブロックに1個だけ定義される。
last_sig_coeff_block_prefixは、ブロック内においてスキャン順で先頭の非零係数の座標位置のプリフィックスを表す。last_sig_coeff_block_suffixは、ブロック内においてスキャン順で先頭の非零係数の座標位置のサフィックスを表す。sig_coeff_flagは、非零係数かであるかどうかを示すフラグである。
coeff_abs_level_greater1_flagは、係数(非零係数)の絶対値が2以上であるかどうかを示すフラグである。かかるフラグで表す係数の総数には、例えば、8個のような上限を設けてもよい。
coeff_abs_level_greater2_flagは、スキャン順で先頭の絶対値が2以上の係数(非零係数)の絶対値が3以上であるかどうかを示すフラグである。coeff_sign_flagは、係数の正負符号を示すフラグである。
coeff_abs_level_remainingは、係数の絶対値から上述のフラグで表現した値を引いた値を表す。coeff_abs_level_remainingは、例えば、k次指数ゴロム符号によって表現される。
図34は、k次指数ゴロム符号によるプリフィックス符号列及びサフィックス符号列を示す図である。
図35及び図36は、シンタックス構成の具体例について示す図である。図35に示すように、各シンタックスから係数レベル値が復号され、その後、図36に示すように、復号された係数レベル値が並び替えられる。
図37は、DPHのシンタックス構成の一例について示す図である。
図37に示すように、DPHは、各DPHに対応するDPSを指定するためのDPS id情報を少なくとも含む。
制御情報復号部206Aは、受信した変位量ビットストリームに対して可変長復号を行うことで、制御情報を出力するように構成されている。
(算術復号部206B)
算術復号部206Bは、受信した変位量ビットストリームに対して算術復号を行うことで、2値化係数レベル値を出力するように構成されている。詳細については後述する。
算術復号部206Bは、2値を対象とする。算術復号部206Bは、0から1までの数直線を定義し、その区間を分割して利用する。区間は、2値の発生確率(以降、コンテキスト値と呼ぶ)によって分割される。
算術復号部206Bには、2進数小数が入力され、算術復号部206Bは、かかる2進数少数が数直線上のどの区間に含まれるかによって元の値を復号する。
ここで、コンテキスト値は、常に固定とされてもよいし、入力信号1ビットごとに変更されてもよい。コンテキスト値が、1ビットごとに変更される場合は、算術復号部206Bは、コンテキスト選択部206Eからコンテキスト値を受け取る。
(コンテキスト値更新部206C)
コンテキスト値更新部206Cは、2値化係数レベル値を用いて、コンテキスト値を更新し、フレームバッファ206Dに出力するように構成されている。
コンテキスト値更新部206Cは、1ビットを復号する度にコンテキスト値を更新する。
ここで、コンテキスト値更新部206Cは、0及び1のうち、発生確率が高いシンボルをMPS(Most Probable Symbol)とし、発生確率が低いシンボルをLPS(Least Probable Symbol)とする。
コンテキスト値更新部206Cは、MPSが発生した場合は、少し確率値を更新し、LPSが発生した場合は、大きく確率値を更新するような確率更新テーブルを用いてもよい。
(コンテキスト選択部206E)
コンテキスト選択部206Eは、コンテキストバッファ206Dから読み出されたコンテキスト値、ビット位置及びシンタックスを用いて、コンテキスト値(出力用コンテキスト値)を生成して出力するように構成されている。詳細については後述する。
last_sig_coeff_prefix:コンテキスト選択部206Eは、図38に示すように、行列サイズやビット位置に応じたコンテキスト番号表を作成してもよい。
last_sig_coeff_block_prefix:コンテキスト選択部206Eは、図38に示すように、ブロックサイズやビット位置に応じたコンテキスト番号表を作成してもよい。
coded_block_flag:コンテキスト選択部206Eは、図39に示すような復号済みの右隣接ブロックで、coded_block_flag=0であればコンテキスト番号を0とし、coded_block_flag=1コンテキスト番号を1としてもよい。
sig_coeff_flag:コンテキスト選択部206Eは、ある基準値を、係数の位置や復号済みの右隣接ブロックのcoded_block_flagによって補正した値をコンテキスト番号とする。例えば、コンテキスト選択部206Eは、基準値について、例えば、最も左のブロックでは0とし、それ以外のブロックでは3とする。コンテキスト選択部206Eは、コンテキスト番号の補正には、復号済みの右隣接ブロックでcoded_block_flag=0の場合は、図40-1及び図40-3に示すような表を用い、coded_block_flag=1の場合には、図40-2に示すような表を用いてもよい。
coeff_abs_level_greater1_flag、coeff_abs_level_greater2_flag:コンテキスト選択部206Eは、復号済みの右隣接ブロックで、絶対値(レベル値)が2以上の係数がある場合は、コンテキスト番号を0とし、そうでない場合は、コンテキスト番号を1としてもよい。
コンテキストバッファ206Dは、図示しない制御情報に応じてこれらを出力するように構成されている。
多値化部206Fは、2値化係数レベル値を多値化することによって係数レベル値を生成して出力するように構成されている。生成(算出)された係数レベル値は、ビット位置及びシンタックスとしてコンテキストバッファ206Dにも出力される。
インター予測部Gは、フレームバッファ206Dから読み出された参照フレームを用いて、予測変位量を生成して出力するように構成されている。
フレームバッファHは、復号変位量を取得して蓄積するように構成されている。フレームバッファHは、図示しない制御情報に応じて、参照フレームにおいて対応する頂点における復号変位量を出力するように構成されている。
(係数レベル値復号部206F2の動作)
以下、図41を参照して、係数レベル値復号部206F2の動作の一例について説明する。
図41に示すように、ステップS101において、係数レベル値復号部206F2は、last_sig_coeff_prefixとlast_sig_coeff_suffixが示す位置以降の係数は全て0として復号する。この後の処理は、ブロック単位で行われる。
ステップS102において、係数レベル値復号部206F2は、coded_block_flagについての復号を行う。
ステップS103において、係数レベル値復号部206F2は、coded_block_flagが0であるか1であるかの判定を行う。
coded_block_flag=0の場合は、係数レベル値復号部206F2は、現在処理しているブロック内の係数については全て0として復号し、本動作は、ステップS116に進み、coded_block_flag=1の場合は、本動作は、ステップS104に進む。
ステップS104において、係数レベル値復号部206F2は、現在処理しているブロック内で、last_sig_coeff_block_prefixとlast_sig_coeff_block_suffixが示す位置以降の係数は全て0として復号する。
ステップS105において、係数レベル値復号部206F2は、sig_coeff_flagについての復号を行う。
ステップS106において、係数レベル値復号部206F2は、sig_coeff_flagが0であるか1であるかの判定を行う。
sig_coeff_flag=0の場合は、本動作は、ステップS116に進み、sig_coeff_flag=1の場合は、本動作は、ステップS107に進む。
ステップS107において、係数レベル値復号部206F2は、coeff_abs_level_greater1_flagについての復号を行う。
ステップS108において、係数レベル値復号部206F2は、coeff_abs_level_greater1_flagが0であるか1であるかの判定を行う。
coeff_abs_level_greater1_flag=0の場合は、本動作は、ステップS113に進み、coeff_abs_level_greater1_flag=1の場合は、本動作は、ステップS109に進む。
ステップS109において、係数レベル値復号部206F2は、coeff_abs_level_greater2_flagについての復号を行う。
ステップS110において、係数レベル値復号部206F2は、coeff_abs_level_greater2_flagが0であるか1であるかの判定を行う。
coeff_abs_level_greater2_flag=0の場合は、本動作は、ステップS113に進み、coeff_abs_level_greater1_flag=1の場合は、本動作は、ステップS112に進む。
ステップS112において、係数レベル値復号部206F2は、coeff_abs_level_remainingについての復号を行う。ここで、係数レベル値復号部206F2は、coeff_abs_level_remainingの復号については、指数ゴロム復号を行った後に3を加算したものを復号後の係数レベル値とする。
ステップS113において、係数レベル値復号部206F2は、coeff_sign_flagについての復号を行う。
ステップS114において、係数レベル値復号部206F2は、coeff_sign_flagが0であるか1であるかの判定を行う。
coeff_sign_flag=0の場合は、本動作は、ステップS116に進み、coeff_sign_flag=1の場合は、本動作は、ステップS115に進む。
ステップS115において、係数レベル値復号部206F2は、復号済みの係数を負値化する。
ステップS116において、係数レベル値復号部206F2は、現在処理しているブロックが最終ブロックであるか否かについて判定する。
Yesの場合、本動作は、終了し、Noの場合、本動作は、ステップS111に進む。
ステップS111において、係数レベル値復号部206F2は、次のブロックへの処理に進み、本動作は、ステップS102に戻る。
次に、図42を参照して、算術復号部206B、コンテキスト選択部206E、コンテキスト値更新部206C及び多値化部206Fの動作の一例について説明する。
次に、図42を参照して、算術復号部206B、コンテキスト選択部206E、コンテキスト値更新部206C及び多値化部206Fの動作の一例について説明する。
図42に示すように、算術復号部206Bは、ステップS201において、算術復号部206Bは、初期化され、ステップS202において、初期コンテキスト値を設定する。
算術復号部206Bは、ステップS203において、コンテキストを選択し、ステップS204において、算術復号を行う。
ステップS205において、コンテキスト値更新部206C及びコンテキスト選択部206Eは、コンテキスト値を更新し、ステップS206において、多値化部206Fは、多値化を行う。
多値化部206Fは、ステップS207において、全ての復号が完了したか否かについて判定する。Yesの場合、本動作は、ステップS208に進み、Noの場合、本動作は、ステップS203に戻る。
ステップS208において、多値化部206Fは、コンテキスト値を退避させる。
(インター予測部206G)
インター予測部206Gは、フレームバッファ206Hから読み出された参照フレームの復号変位量を用いてインター予測を行うことによって、インター予測残差及びインター予測変位量を生成して出力するように構成されている。
インター予測部206Gは、interprediction_enabled_flagが1の場合のみ、かかるインター予測を行うように構成されている。
インター予測部206Gは、空間領域でインター予測を行ってもよいし、周波数領域でインター予測を行ってもよい。インター予測は、時間的に過去の参照フレームと未来の参照フレームとを用いて、双方向予測を行ってもよい。
インター予測部206Gは、空間領域でインター予測を行う場合は、対象フレームにおける細分割頂点の予測変位量について、参照フレームにおける対応する細分割頂点の復号変位量をそのまま参照して決定してもよい。
或いは、対象フレームにおけるある細分割頂点の予測変位量は、複数の参照フレームにおける対応する細分割頂点の復号変位量を用いて、平均と分散を推定した正規分布に従って確率的に決定してもよい。その際は、分散はゼロとして一意的に平均のみで決定してもよい。
或いは、対象フレームにおけるある細分割頂点の予測変位量は、複数の参照フレームにおける対応する細分割頂点の復号変位量を用いて、時間を説明変数、変位量を目的変数として推定した回帰曲線に基づいて決定してもよい。
メッシュ符号化装置100において、フレームごとに符号化効率向上のために、かかる復号変位量の順番が並び替えられていてもよい。
かかる場合、インター予測部206Gは、並び替えられた復号変位量に対してインター予測を行うように構成されていてもよい。
参照フレームと復号対象フレームとの間の細分割頂点の対応関係は、制御情報によって示される。
図43は、空間領域でインター予測が行われる場合の参照フレームと復号対象フレームとの間の細分割頂点の対応関係の一例について説明するための図である。
加算器206Iは、インター予測部206Gから、インター予測残差及びインター予測変位量を取得するように構成されている。加算器206Iは、これらを加算して、量子化イントラ予測残差を生成して出力するように構成されている。生成(算出)された量子化イントラ予測残差は、フレームバッファ206Hにも出力される。
逆量子化部206Jは、加算部206Iから取得した量子化イントラ予測残差に対して逆量子化を行い、イントラ予測残差を出力するように構成されている。
(変位量予測加算部206K)
変位量予測加算部206Kは、基本メッシュ復号部202から出力された基本メッシュに基づき細分割頂点の変位量をイントラ予測してイントラ予測値を算出し、算出したイントラ予測値と逆量子化部206Jから出力されたイントラ予測残差とを加算することで、変位量を復号するように構成されている。
図44は、変位量予測加算部206Kの動作の一例を示すフローチャートである。
図44に示すように、ステップS1において、変位量予測加算部206K現在の細分割回数itを1に設定する。
ステップS2において、変位量予測加算部206Kは、現在の細分割回数itが上限細分割回数mdu_max_depth未満かどうかを判定する。
Yesの場合、本動作は、ステップS3に進み、Noの場合、本動作は、終了する。
ステップS3において、変位量予測加算部206Kは、全ての辺に対して分割が終了したかを判定する。
Yesの場合、本動作は、ステップS8に進み、Noの場合、本動作は、ステップS4に進む。
ステップS4において、変位量予測加算部206Kは、未分割辺を選択し、ステップS5に進む。
ステップS5において、変位量予測加算部206Kは、選択辺を細分割数mdu_subdivision_numに基づき分割し、細分割頂点を生成する。
ステップS6において、変位量予測加算部206Kは、両端の頂点の変位量から細分割頂点の変位量を予測し、ステップS7に進む。
以下に、細分割頂点の変位量を予測する方法について説明する。
図45及び図46は、それぞれ、Mid-edge分割法によって線分ABを分割して細分割頂点C生成する例、及び、細分割頂点Cの変位量を算出する例を模式的に示した図である。
図45及び図46を参照して、変位量を予測する方法について説明する。
第1に、端点A(t=0)と端点B(t=1)との間の頂点P(t=x)の法線ベクトルを計算する。ここで、端点A、Bの法線ベクトルをそれぞれ(ax,ay)、(bx,by)とし、頂点Pの法線ベクトルを線形補完によって計算する。その際、頂点Pの法線ベクトルは、((1-t)ax+tbx,(1-t)ay+tby)と計算できる。このとき、法線ベクトルについては、球面線型補間等の他の補完方法を用いて計算してもよい。
端点A及び端点Bが、基本メッシュ上の頂点のとき、端点A及び端点Bの法線ベクトルは、それぞれの頂点に隣接する基本面の法線の平均値で算出される。細分割を行わない場合、基本面の法線ベクトルについて、計算しなくてもよい。
第2に、計算した法線ベクトルと直交する傾きを計算し、細分割頂点Cの変位量を、端点Aから細分割頂点Cの区間で積分することで予測する。すなわち、細分割頂点Cの変位量を予測する場合の変位量は、以下の式で計算できる。
或いは、細分割頂点Cの変位量を周囲の基本メッシュの頂点や復号済みの細分割頂点を入力として、コサイン補完、キュービック補完、エルミート補完などの既知の補完方法を用いて変位量を予測してもよい。
図47は、キュービック補完を用いて細分割頂点Dの変位量を予測する例である。図47に示すように、細分割頂点D周辺の頂点4つから三次曲線を計算し、細分割頂点Dの変位量を、曲線上の点と細分割頂点Dを結ぶベクトルとして予測してもよい。
或いは、既に復号済みの基本面上の頂点や細分割頂点の変位量の平均値や最頻値、最大値、最小値等の統計値を用いて、細分割頂点の変位量を予測してもよい。
図48は、辺KB、辺BJ、辺JK、辺BF、辺FAをそれぞれMid-edge分割法で分割した後に、辺ABを分割し細分割頂点Cを生成する例である。
例えば、細分割頂点Cの変位量を予測するときに、最も距離が小さい点上の変位量を予測値としてもよいし、細分割頂点A、B、D、E、G、Iのように周囲の頂点の変位量の平均値を変位量の予測値としてもよいし、周囲の頂点の変位量の重み付け平均値を変位量の予測値としてもよい。
ステップS7において、変位量予測加算部206Kは、予測値と変位量誤差とを加算し、変位量を復号する。その後、ステップS3に進む。
ステップS8において、変位量予測加算部206Kは、現在の細分割数itを1加算して、ステップS2に進む。
<変形例1>
以下、図49を参照して、上述の第1実施形態の変形例1について、上述の第1実施形態との相違点に着目して説明する。
図49は、本変形例1に係る変位量復号部206の機能ブロックの一例を示す図である。
図49に示すように、本変形例1に係る変位量復号部206は、逆量子化部206Jの代わりに、逆量子化ウェーブレット変換部206Lを備える。
すなわち、本変形例1では、逆量子化ウェーブレット変換部206Lは、加算器206Iから出力された量子化イントラ予測残差に対して逆量子化ウェーブレット変換を行い、イントラ予測残差を生成するように構成されている。
上述のメッシュ符号化装置100及びメッシュ復号装置200は、コンピュータに各機能(各工程)を実行させるプログラムであって実現されていてもよい。