本発明は多様な変更を加えることができ、さまざまな実施形態を有することができるところ、特定の実施形態を図面に例示し、詳細に説明する。しかしながら、これは本発明を特定の実施形態に限定しようとするものではない。本明細書で使用する用語は単に特定の実施形態を説明するために使われたものであって、本発明の技術的思想を限定する意図として使われるものではない。単数の表現は、文脈上、明白に異なる意味として使用されない限り、複数の表現を含む。本明細書において、「含む」または「有する」などの用語は、明細書上に記載された特徴、数字、ステップ、動作、構成要素、部品、またはこれらを組み合わせたものが存在することを指定しようとするものであり、1つまたはその以上の他の特徴や数字、ステップ、動作、構成要素、部品、またはこれらを組み合わせたものの存在または付加可能性を予め排除しないことと理解されるべきである。
一方、本発明で説明される図面上の各構成は、ビデオエンコーディング装置/デコーディング装置で互いに異なる特徴的な機能に関する説明の便宜のために独立して図示されたものであって、各構成が互いに別のハードウェアや別のソフトウェアで具現されることを意味しない。例えば、各構成のうち、2つ以上の構成を組み合わせて1つの構成をなすこともでき、1つの構成が複数の構成に分けられることもできる。各構成が統合および/又は分離された実施形態も本発明の本質から逸脱しない限り、本発明の権利範囲に含まれる。
以下、添付した図面を参照して、本発明の好ましい実施形態をより詳細に説明する。以下、図面上の同一の構成要素に対しては同一の参照符号を使用し、同一の構成要素に対して重複する説明は省略する。
本明細書において、ピクチャ(picture)は、一般に特定時間帯の一つの映像を示す単位を意味し、スライス(slice)は、コーディングにおいてピクチャの一部を構成する単位である。一つのピクチャは、複数のスライスで構成されることができ、必要によって、ピクチャおよびスライスは、互いに混同されて使われることができる。
ピクセル(pixel)またはペル(pel)は、一つのピクチャ(または、映像)を構成する最小の単位を意味する。また、特定のピクセルの値を示す用語として「サンプル(sample)」が使われることができる。サンプルは、一般にピクセルの値を示すことができ、輝度(luma)成分のピクセル値のみを示すこともでき、彩度(chroma)成分のピクセル値のみを示すこともできる。
ユニット(unit)は、映像処理の基本単位を示す。ユニットは、ピクチャの特定領域および該当領域に関連した情報のうち少なくとも一つを含むことができる。ユニットは、場合によって、ブロック(block)または領域(area)などの用語と混同して使われることができる。一般的な場合、M×Nブロックは、M個の列およびN個の行からなるサンプルまたは変換係数(transform coefficient)のセットを示すことができる。
図1は、本発明が適用されることができる3Dビデオのエンコーディングおよびデコーディング処理(過程)(process)を概略的に説明する図である。
図1を参照すると、3Dビデオエンコーダは、ビデオピクチャ、デプスマップ(depth map)およびカメラパラメータ(camera parameter)をエンコーディング(エンコード)してビットストリームで出力できる。
デプスマップは、対応するビデオピクチャ(テクスチャピクチャ)のピクセルに対してカメラと被写体との間の距離情報(深さ情報)で構成されることができる。例えば、デプスマップは、深さ情報をビットデプス(bit depth)によって正規化した映像である。このとき、デプスマップは、色差表現なしで記録された深さ情報で構成されることができる。デプスマップは、デプスマップピクチャまたはデプスピクチャと呼ぶことができる。
一般に、被写体との距離と視差とは互いに反比例するため、カメラパラメータを利用してデプスマップの深さ情報からビュー間の相関度を示す視差情報を導出する(derive)ことができる。
一般的な、カラー映像、即ち、ビデオピクチャ(テクスチャピクチャ)と共にデプスマップおよびカメラパラメータを含むビットストリームは、ネットワーク(network)または記憶媒体を介してデコーダに送信されることができる。
デコーダ側では、ビットストリームを受信してビデオを復元することができる。デコーダ側で3Dビデオデコーダが利用される場合、3Dビデオデコーダは、ビットストリームからビデオピクチャ、デプスマップおよびカメラパラメータをデコーディング(デコード)することができる。デコーディングされたビデオピクチャ、デプスマップおよびカメラパラメータに基づいて、マルチビュー(multi view)ディスプレイに必要なビューを合成する(synthesize)することもできる。このとき、使われるディスプレイがステレオ(stereo)ディスプレイである場合、復元されたマルチビューのうち二つのビューに関するピクチャを利用して3D映像を表示することができる。
ステレオビデオデコーダが使われる場合、ステレオビデオデコーダは、ビットストリームから両眼(eyes)に各々入射される二つのピクチャを復元することができる。ステレオディスプレイでは、左眼に入射される左側映像と右眼に入射される右側映像との視点の差(視差)(view difference)または視差(ディスパリティ)(disparity)を利用して立体映像を表示することができる。ステレオビデオデコーダと共にマルチビューディスプレイが使われる場合には、復元された二つのピクチャに基づいて異なるビューを生成してマルチビューを表示することもできる。
2Dデコーダが使われる場合には、2次元映像を復元して2Dディスプレイで映像を出力することができる。2Dディスプレイを使用するが、デコーダは、3Dビデオデコーダを使用したり、ステレオビデオデコーダを使用したりする場合には、復元された映像のうち一つを2Dディスプレイで出力することもできる。
図1の構成において、ビュー合成は、デコーダ側で実行されることもでき、ディスプレイ側で実行されることもできる。また、デコーダとディスプレイとは、一つの装置であってもよく、別個の装置であってもよい。
図1では、説明の便宜のために、3Dビデオデコーダとステレオビデオデコーダ、そして2Dビデオデコーダが別個のデコーダであると説明したが、一つのデコーディング装置が3Dビデオデコーディング、ステレオビデオデコーディングおよび2Dビデオデコーディングを全て実行することもできる。また、3Dビデオデコーディング装置が3Dビデオデコーディングを実行し、ステレオビデオデコーディング装置がステレオビデオデコーディングを実行し、2Dビデオデコーディング装置が2Dビデオデコーディングを実行することもできる。さらに、マルチビューディスプレイが2Dビデオを出力したりステレオビデオを出力したりすることもできる。
図2は、本発明が適用されることができるビデオエンコーディング装置の構成を概略的に説明する図である。
図2を参照すると、ビデオエンコーディング装置200は、ピクチャ分割部205、予測部210、減算部215、変換部220、量子化部225、再整列部230、エントロピエンコーディング部235、逆量子化部240、逆変換部245、加算部250、フィルタ部255およびメモリ260を含む。
ピクチャ分割部205は、入力されたピクチャを少なくとも一つの処理ユニットブロック(processing unit block)に分割できる。このとき、処理ユニットブロックは、コーディングユニットブロック(coding unit block)、予測ユニットブロック(prediction unit block)または変換ユニットブロック(transform unit block)である。コーディングユニットブロックは、コーディングのユニットブロックであって、最大(largest)コーディングユニットブロックから4分木(クアッドツリー)構造(quad-tree structure)によって分割(split)されることができる。予測ユニットブロックは、コーディングユニットブロックからパーティショニング(partitioning)されるブロックであって、サンプル予測のユニットブロックである。このとき、予測ユニットブロックは、サブブロック(sub block)に分けられる。変換ユニットブロックは、コーディングユニットブロックから4分木構造によって分割されることができ、変換係数によって導出するユニットブロックまたは変換係数から残差(レジデュアル)信号(residual signal)を導出するユニットブロックである。
以下、コーディングユニットブロックは、コーディングブロック(Coding Block、CB)またはコーディングユニット(Coding Unit、CU)と呼び、予測ユニットブロックは、予測ブロック(Prediction Block、PB)または予測ユニット(Prediction Unit、PU)と呼び、変換ユニットブロックは、変換ブロック(Transform Block、TB)または変換ユニット(Transform Unit、TU)と呼ぶことができる。
予測ブロックまたは予測ユニットは、ピクチャ内でブロック形態の特定領域を意味し、予測サンプルのアレイ(配列)(array)を含むことができる。また、変換ブロックまたは変換ユニットは、ピクチャ内でブロック形態の特定領域を意味し、変換係数または残差サンプルのアレイを含むことができる。
予測部210は、処理対象ブロック(以下、現在ブロックという)に関する予測を実行し、上記現在ブロックに対する予測サンプルを含む予測ブロックを生成することができる。予測部210で実行される予測の単位は、コーディングブロック、または変換ブロック、または予測ブロックである。
予測部210は、現在ブロックにイントラ予測が適用されるか、またはインター予測が適用されるかを決定することができる。一例として、予測部210は、CU単位でイントラ予測またはインター予測のいずれが適用されるかを決定することができる(the predictor 210 may determine whether the intra prediction or the inter prediction is applied in unit of CU)。
イントラ予測の場合、予測部210は、現在ブロックが属するピクチャ(以下、現在ピクチャ)内の現在ブロックの外部の参照サンプルに基づいて現在ブロックに対する予測サンプルを導出することができる。このとき、予測部210は、(i)現在ブロックの隣接(neighboring)参照サンプルの平均(average)または補間(インターポレーション)(interpolation)に基づいて予測サンプルを導出することができ、(ii)現在ブロックの隣接参照サンプルのうち予測サンプルに対して特定(予測)方向に存在する参照サンプルに基づいて上記予測サンプルを導出することができる。(i)の場合は非方向性モードと呼び、(ii)の場合は方向性(directional)モードと呼ぶことができる。予測部210は、隣接ブロックに適用された予測モードを利用して現在ブロックに適用される予測モードを決定することもできる。
インター予測の場合、予測部210は、参照ピクチャ上で動きベクトルにより特定されるサンプルに基づいて、現在ブロックに対する予測サンプルを導出することができる。予測部210は、スキップ(skip)モード、マージ(merge)モード、およびMVP(Motion Vector Prediction)モードのうちいずれか一つを適用して現在ブロックに対する予測サンプルを導出することができる。スキップモードおよびマージモードの場合、予測部210は、隣接ブロックの動き情報を現在ブロックの動き情報として利用できる。スキップモードの場合、マージモードと違って、予測サンプルと原本サンプルとの間の差(残差)が送信されない。MVPモードの場合、隣接ブロックの動きベクトルを動きベクトル予測子(motion vector predictor)として利用し、これにより現在ブロックの動きベクトル予測子として利用して現在ブロックの動きベクトルを導出することができる。
インター予測の場合、隣接ブロックは、現在ピクチャ内に存在する空間隣接ブロック(spatial neighboring block)と、参照ピクチャ(reference picture)に存在する時間隣接ブロック(temporal neighboring block)と、を含む。上記時間隣接ブロックを含む参照ピクチャは、コロケート(同じ位置の)ピクチャ(collocated Picture、colPic)とも呼ばれる。動き情報(motion information)は、動きベクトルおよび参照ピクチャを含むことができる。スキップモードおよびマージモードで時間隣接ブロックの動き情報が利用される場合、参照ピクチャリスト(reference picture list)上の最上位ピクチャが参照ピクチャとして利用されることもできる。
マルチビューの場合、独立ビュー(independent view)と従属ビュー(dependent view)とに区分されることができ、従属ビューに関するエンコーディングの場合、予測部210は、インター予測だけでなく、インタービュー(inter-view)予測を実行することもできる。
予測部210は、他のビューのピクチャを含んで参照ピクチャリストを構成することができる。インタービュー予測のために、予測部210は、視差ベクトルを導出することができる。現在ビュー内の他のピクチャで現在ブロックに対応するブロックを特定する動きベクトルと違って、視差ベクトルは、現在ピクチャと同じAU(Access Unit)の他のビューで現在ブロックに対応するブロックを特定することができる。AUは、例えば、マルチビューで、同じ時点(same time instance)に対応する(correspond)ビデオピクチャおよびデプスマップを含むことができる。ここで、AUは、POC(Picture Order Count)が同じピクチャのセットを意味する。POCは、ピクチャの表示順序に対応し、コーディング順序と区別されることができる。
予測部210は、視差ベクトルに基づいて、デプスビュー(depth view)内のデプスブロック(depth block)を特定することができ、マージリストの構成、インタービュー動き予測(inter-view motion prediction)、残差予測、IC(Illumination Compensation)、ビュー合成(view synthesis)などを実行することができる。
現在ブロックに対する視差ベクトルは、カメラパラメータを利用してデプス値から導出されたり、現在または他のビュー内の隣接ブロックの動きベクトルまたは視差ベクトルから導出されることができる。
例えば、予測部210は、参照ビュー(reference view)の時間動き情報に対応するインタービューマージ候補(Inter-view Merging Candidate:IvMC)、視差ベクトルに対応するインタービュー視差ベクトル候補(Inter-view Disparity Vector Candidate:IvDC)、視差ベクトルのシフト(shift)により導出されるシフテッド(シフト)インタービューマージ候補(shifted IvMC)、現在ブロックがデプスマップ上のブロックである場合に対応するテクスチャピクチャから導出されるテクスチャマージ候補(Texture merging candidate:T)、テクスチャマージ候補から視差を利用して導出される視差導出マージ候補(Disparity derived merging candidate:D)、ビュー合成に基づいて導出されるビュー合成予測候補(View Synthesis Prediction candidate:VSP)などをマージ候補リストに追加できる。
このとき、従属ビューに適用されるマージ候補リストに含まれる候補の個数は、所定の値に制限されることができる。
また、予測部210は、インタービュー動きベクトル予測を適用して、視差ベクトルに基づいて現在ブロックの動きベクトルを予測することもできる。このとき、予測部210は、対応する深さブロック内の最大深さ値の変換(conversion)に基づいて視差ベクトルを導出することができる。参照ビュー内の現在ブロックのサンプル位置に視差ベクトルを加えて参照ビュー内の参照サンプルの位置が特定されると、参照サンプルを含むブロックを参照ブロックとして利用できる。予測部210は、参照ブロックの動きベクトルを現在ブロックの候補動きパラメータまたは動きベクトル予測子候補として利用でき、上記視差ベクトルを視差補償予測(Disparity Compensated Prediction:DCP)のための候補視差ベクトルとして利用できる。
減算部215は、原本サンプルと予測サンプルとの間の差である残差サンプルを生成する。スキップモードが適用される場合には、前述したように残差サンプルを生成しない。
変換部220は、変換ブロック単位で残差サンプルを変換して変換係数(transform coefficient)を生成する。量子化部225は、変換係数を量子化し、量子化された変換係数を生成することができる。
再整列部230は、量子化された変換係数を再整列する。再整列部230は、係数を、スキャン(スキャニング)(scanning)方法を介して、ブロック形態の量子化された変換係数を1次元ベクトル形態に再整列できる。
エントロピエンコーディング部235は、量子化された変換係数に対するエントロピエンコーディングを実行することができる。エントロピエンコーディングは、例えば、指数ゴロム(exponential Golomb)、CAVLC(Context-Adaptive Variable Length Coding)、CABAC(Context-Adaptive Binary Arithmetic Coding)などのエンコーディング方法を含むことができる。エントロピエンコーディング部235は、量子化された変換係数以外にビデオ復元に必要な情報(例えば、シンタックス要素(syntax element)の値等)を共にまたは別個にエンコーディングすることもできる。エントロピエンコーディングされた情報は、ビットストリーム形態でNAL(Network Abstraction Layer)ユニット単位で送信または記憶されることができる。
加算部250は、残差サンプルと予測サンプルとを加えてピクチャを復元する。残差サンプルおよび予測サンプルは、ブロック単位で加算されて復元ブロックが生成されることができる。ここで、加算部250を別個の構成で説明したが、加算部250は、予測部210の一部であってもよい。
復元されたピクチャ(reconstructed picture)に対して、フィルタ部255は、デブロッキングフィルタおよび/またはサンプル適応オフセット(画素適応オフセット)(sample adaptive offset)を適用することができる。デブロッキングフィルタリングおよび/またはサンプル適応オフセットを介して、復元ピクチャ内のブロック境界のアーチファクトや量子化処理での歪曲が補正されることができる。サンプル適応オフセットは、サンプル単位で適用されることができ、デブロッキングフィルタリングの処理が完了した後で適用されることができる。
メモリ260は、復元ピクチャまたはエンコーディング/デコーディングに必要な情報を記憶することができる。例えば、メモリ260は、インター予測/インタービュー予測に使われる(参照)ピクチャを記憶することができる。このとき、インター予測/インタービュー予測に使われるピクチャは、参照ピクチャセット(reference picture set)または参照ピクチャリスト(reference picture list)により指定されることができる。
ここでは、一つのエンコーディング装置が独立ビューおよび従属ビューをエンコーディングすると説明したが、これは説明の便宜のためのものに過ぎず、ビューごとに別個のエンコーディング装置が構成されたり、ビューごとに別個の内部モジュール(例えば、各ビュー別予測モジュール)が構成されたりすることもできる。
図3は、本発明が適用されることができるビデオデコーディング装置の構成を概略的に説明する図である。
図3を参照すると、ビデオデコーディング装置300は、エントロピデコーディング部310、再整列部320、逆量子化部330、逆変換部340、予測部350、加算部360、フィルタ部370、メモリ380を含む。
ビデオ情報を含むビットストリームが入力されると、ビデオデコーディング装置300は、ビデオエンコーディング装置でビデオ情報が処理されたプロセスに対応してビデオを復元することができる。
例えば、ビデオデコーディング装置300は、ビデオエンコーディング装置で適用された処理ユニットを利用してビデオデコーディングを実行することができる。したがって、ビデオデコーディングの処理ユニットブロックは、コーディングユニットブロック、予測ユニットブロックまたは変換ユニットブロックである。コーディングユニットブロックは、デコーディングのユニットブロックであって、最大コーディングユニットブロックから4分木構造によって分割されることができる。予測ユニットブロックは、コーディングユニットブロックからパーティショニングされるブロックであって、サンプル予測のユニットブロックである。このとき、予測ユニットブロックは、サブブロックに分けられる。変換ユニットブロックは、コーディングユニットブロックから4分木構造によって分割されることができ、変換係数を導出するユニットブロックまたは変換係数から残差信号を導出するユニットブロックである。
エントロピデコーディング部310は、ビットストリームをパージングしてビデオ復元またはピクチャ復元に必要な情報を出力することができる。例えば、エントロピデコーディング部310は、指数ゴロム符号化、CAVLCまたはCABACなどのコーディング方法に基づいてビットストリーム内の情報をデコーディングし、ビデオ復元に必要なシンタックスエレメントの値、残差に関する変換係数の量子化された値を出力することができる。
3Dビデオを再生するために、複数のビュー(view)を処理する場合、ビットストリームは、各ビューごとに入力されることができる。または、ビットストリーム内で各ビューに関する情報がマルチプレクシングされている。この場合、エントロピデコーディング部310は、ビットストリームを逆多重化(de-multiplexing)してビューごとにパージング(parsing)することもできる。
再整列部320は、量子化されている変換係数を2次元のブロック形態で再整列できる。再整列部320は、エンコーディング装置で実行された係数スキャンに対応して再整列を実行することができる。
逆量子化部330は、量子化されている変換係数を(逆)量子化パラメータに基づいて逆量子化して変換係数を出力することができる。このとき、量子化パラメータを導出するための情報は、エンコーディング装置からシグナリングされることができる。
逆変換部340は、変換係数を逆変換して残差サンプルを導出することができる。
予測部350は、現在ブロックに関する予測を実行し、上記現在ブロックに対する予測サンプルを含む予測ブロックを生成することができる。予測部350で実行される予測の単位は、コーディングブロック、または変換ブロック、または予測ブロックである。
予測部350は、イントラ予測を適用するか、またはインター予測を適用するかを決定することができる。このとき、イントラ予測またはインター予測のうちいずれを適用するかを決定する単位と予測サンプルを生成する単位とは異なる。また、インター予測とイントラ予測とにおいて、予測サンプルを生成する単位も異なる。例えば、インター予測またはイントラ予測のうちいずれを適用するかは、CU単位で決定できる。また、例えば、インター予測において、PU単位で予測モードを決定して予測サンプルを生成することができ、イントラ予測において、PU単位で予測モードを決定して、TU単位で予測サンプルを生成することもできる。
イントラ予測の場合に、予測部350は、現在ピクチャ内の隣接参照サンプルに基づいて現在ブロックに対する予測サンプルを導出することができる。予測部350は、現在ブロックの隣接参照サンプルに基づいて方向性モードまたは非方向性モードを適用して現在ブロックに対する予測サンプルを導出することができる。このとき、隣接ブロックのイントラ予測モードを利用して現在ブロックに適用する予測モードが決定されることもできる。
インター予測の場合に、予測部350は、参照ピクチャ上の動きベクトルにより参照ピクチャ上で特定されるサンプルに基づいて、現在ブロックに対する予測サンプルを導出することができる。予測部350は、スキップ(skip)モード、マージ(merge)モードおよびMVPモードのうちいずれか一つを適用して、現在ブロックに対する予測サンプルを導出することができる。
スキップモードおよびマージモードの場合に、隣接ブロックの動き情報が現在ブロックの動き情報として利用されることができる。このとき、隣接ブロックは、空間隣接ブロックおよび時間隣接ブロックを含むことができる。
予測部350は、使用可能な(available)隣接ブロックの動き情報でマージ候補リストを構成し、マージインデックスがマージ候補リスト上で指示する情報を現在ブロックの動きベクトルとして使用することができる。マージインデックスは、エンコーディング装置からシグナリングされることができる。動き情報は、動きベクトルおよび参照ピクチャを含むことができる。スキップモードおよびマージモードで時間隣接ブロックの動き情報が利用される場合に、参照ピクチャリスト上の最上位ピクチャが参照ピクチャとして利用されることができる。
スキップモードの場合、マージモードと違って、予測サンプルと原本サンプルとの間の差(残差)が送信されない。
MVPモードの場合、隣接ブロックの動きベクトルを動きベクトル予測子(motion vector predictor)として利用して現在ブロックの動きベクトルが導出されることができる。このとき、隣接ブロックは、空間隣接ブロックおよび時間隣接ブロックを含むことができる。
従属ビュー(dependent view)の場合、予測部350は、インタービュー予測を実行することができる。このとき、予測部350は、他のビューのピクチャを含んで参照ピクチャリストを構成することができる。
インタービュー予測のために、予測部350は、視差ベクトルを導出することができる。予測部350は、視差ベクトルに基づいて、デプスビュー(depth view)内のデプスブロックを特定することもでき、マージリストの構成、インタービュー動き予測(inter-view motion prediction)、残差予測、IC(Illumination Compensation)、ビュー合成などを実行することができる。
現在ブロックに関する視差ベクトルは、カメラパラメータを利用してデプス値から導出されたり、現在または他のビュー内の隣接ブロックの動きベクトルまたは視差ベクトルから導出されたりすることができる。カメラパラメータは、エンコーディング装置からシグナリングされることができる。
従属ビューの現在ブロックにマージモードを適用する場合に、予測部350は、参照ビュー(reference view)の時間動き情報に対応するIvMC、視差ベクトルに対応するIvDC、視差ベクトルのシフト(shift)により導出されるシフテッドIvMC、現在ブロックがデプスマップ上のブロックである場合に対応するテクスチャピクチャから導出されるテクスチャマージ候補(T)、テクスチャマージ候補から視差を利用して導出される視差導出マージ候補(D)、ビュー合成に基づいて導出されるビュー合成予測マージ候補(VSP)などをマージ候補リストに追加できる。
このとき、従属ビューに適用されるマージ候補リストに含まれる候補の個数は、所定の値に制限されることができる。
また、予測部350は、インタービュー動きベクトル予測を適用して、視差ベクトルに基づいて現在ブロックの動きベクトルを予測することもできる。このとき、予測部350は、視差ベクトルにより特定される参照ビュー内のブロックを参照ブロックとして利用できる。予測部350は、参照ブロックの動きベクトルを現在ブロックの候補動きパラメータまたは動きベクトル予測子候補として利用でき、上記視差ベクトルを視差補償予測(Disparity Compensated Prediction:DCP)のための候補視差ベクトルとして利用できる。
加算部360は、残差サンプルと予測サンプルとを加えて現在ブロックまたは現在ピクチャを復元することができる。加算部360は、残差サンプルと予測サンプルとをブロック単位で加えて現在ピクチャを復元することもできる。スキップモードが適用された場合には残差が送信されないため、予測サンプルが復元サンプルになることができる。ここでは、加算部360を別個の構成で説明したが、加算部360は、予測部350の一部であってもよい。
フィルタ部370は、復元されたピクチャにデブロッキングフィルタリングおよび/またはサンプル適応オフセットを適用することができる。このとき、サンプル適応オフセットは、サンプル単位で適用されることができ、デブロッキングフィルタリング以後に適用されることもできる。
メモリ380は、復元ピクチャまたはデコーディングに必要な情報を記憶することができる。例えば、メモリ380は、インター予測/インタービュー予測に使われるピクチャを記憶することができる。このとき、インター予測/インタービュー予測に使われるピクチャは、参照ピクチャセットまたは参照ピクチャリストにより指定されることもできる。復元されたピクチャは、他のピクチャに対する参照ピクチャとして利用されることができる。
また、メモリ380は、復元されたピクチャを出力順序によって出力することもできる。図示されていないが、3D映像を再生するために、出力部は、複数の互いに異なるビューを表示することができる。
図3の例では、一つのデコーディング装置で独立ビュー(independent view)および従属ビュー(dependent view)がデコーディングされると説明したが、これは説明の便宜のためのものに過ぎず、本発明はこれに限定されるものではない。例えば、ビューごとに各々のデコーディング装置が動作することもでき、一つのデコーディング装置内の各ビューに対応する内部モジュール(例えば、予測モジュール)が備えられることもできる。
マルチビュービデオコーディングは、現在ピクチャと同じAU(access unit)に属する他のビューのデコーディングデータを利用して現在ピクチャをコーディングすることによって、現在ビューに関するビデオコーディング効率を向上させことができる。
マルチビュービデオコーディングでは、AU単位でビューをコーディングすることができ、ビュー単位でピクチャをコーディングすることもできる。ビュー間では決められた順序によってコーディングが進行される。他のビューの参照無しでコーディングされることができるビューをベースビュー(base view)または独立ビューということができる。また、独立ビューがコーディングされた後、独立ビューまたは他のビューを参照してコーディングされることができるビューを従属ビューまたは拡張ビューということができる。また、現在ビューが従属ビューである場合、現在ビューのコーディングに参照されるビューを参照ビューということもできる。ここで、ビューをコーディングするとは、該当ビューに属するビデオピクチャ、デプスマップなどをコーディングすることを含む。
3Dビデオは、一般的なカラー映像情報を有するビデオピクチャ(または、テクスチャ(texture)ピクチャ)と、ビデオピクチャに対する深さ情報を有するデプスマップ(depth map)と、を含む。3Dビデオでは、同じPOCに互いに異なる時点を有する複数個のビデオピクチャが存在でき、上記複数個のビデオピクチャに各々対応するデプスマップが存在できる。また、上記複数個のビデオピクチャは、互いに異なる時点を有する複数のカメラから取得されることができる。
3Dビデオは、マルチビュービデオプラス(+)デプス(Multiview Video plus Depth)フォーマット(format)で示される。エンコーディング装置では、いくつかのキャプチャされたビューおよび関連付けられたデプスマップがコーディングされ、それによるビットストリームパケットが(resulting bitstream packets)3Dビデオビットストリームでマルチプレクシングされることができる。デコーディング装置では、ビデオピクチャおよびデプスマップに関するデータをデコーディングし、必要な場合、DIBR(Depth-Image-Based Rendering)技法を利用して追加の(付加的な)中間ビュー(additional intermediate view)を合成することができる。ビュー合成のためにカメラパラメータが上記ビットストリームに追加して(付加的に)含まれることができる。カメラパラメータは、ZFar、Znear、焦点距離(Focal Length)などを含むことができる。
図4aおよび図4bは、本発明で使うことができるカメラパラメータを説明するための図である。図4aおよび図4bは、3Dビデオで使われることができるカメラモデルの実施例を示す。
前述したように、カメラパラメータは、VSPのために使われる参照ピクチャを合成するために使われることができ、デコーディング装置で中間時点の映像(intermediary time instance image)を生成するために使われることもできる。したがって、デコーディング装置は、各々の時点ごとにカメラパラメータをエンコーディングして、ネットワークまたは記憶媒体を介してデコーディング装置に送信できる。
図4aを参照すると、Wで表示された座標系は、空間におけるカメラの位置を指定するために使われる「基準座標系」を意味する。また、Cで表示された座標系は、図4aに示すカメラパラメータに対応するカメラの焦点(focal point)410を原点として有する、「カメラ座標系」を意味する。また、図4aの420は、カメラにより取得された映像が表示されるイメージ平面(image plane)を示す。
図4aの実施例において、fは、カメラの焦点410からイメージ平面420までの距離(z軸上の距離)、即ち、焦点距離(focal length)を示す。また、(u0、v0)は、カメラの光軸(optical axis)が上記イメージ平面420と交わる(合う)(meets)地点の座標、即ち、主点の座標(coordinate of a principal point)を示すことができる。上記光軸は、カメラ座標系でイメージ平面420に対して垂直である座標軸を意味し、図4aではz軸で示される。したがって、カメラの焦点410から主点(a principal point)までの距離は、焦点距離に対応(該当)する(correspond to)ことができる。前述した三個のパラメータ(f、u0、v0)は、内部カメラパラメータ(intrinsic camera parameter)と呼ぶことができる。
一方、カメラパラメータには基準座標系(W)を基準としてカメラ座標系(C)を示すために使われる、3×3回転マトリックス(rotation matrix、R)および3×1並進(変形)ベクトル(Translation vector、T)もある。ここで、上記3×3回転マトリックス(R)は、基準座標系を基準にしてカメラ座標系が3次元空間で回転した程度を示す。即ち、上記3×3回転マトリックス(R)は、基準座標系を基準とするカメラ座標系の3次元回転を示す。また、上記3×1並進ベクトル(T)は、基準座標系を基準とするカメラ座標系の位置を示すベクトルである。上記3×3回転マトリックス(R)および上記3×1並進ベクトル(T)([R、T])は、基準座標系とカメラ座標系との幾何学的関係を示すことができる。したがって、上記二つのパラメータは、外部カメラパラメータ(extrinsic camera parameter)と呼ぶことができる。
図4bは、カメラの光軸(optical axis)に対して垂直に位置する三個の平面を示す。図4bの410は、カメラの焦点、即ち、カメラ座標系の原点を示し、420は、イメージ平面を示す。
一つのカメラが撮影した場面は、多様なデプス値を有することができる。このとき、最も小さいデプス値を有する地点は、カメラに最も近く位置する地点であり、最も大きいデプス有する地点は、カメラから最も遠く位置する地点である。図4bの430は、410の焦点を有するカメラが撮影した場面で最も小さいデプス値に対応する平面を示し、これは近クリップ面(近接クリッピング平面)(near clipping plane)と呼ぶことができる。また、4bの440は、410の焦点を有するカメラが撮影した場面で最も大きいデプス値に対応する平面を示し、これは遠クリップ面(遠距離クリッピング平面)(far clipping plane)と呼ぶことができる。
一つのカメラが撮影した任意の場面で、最も小さいデプス値は、Znear(Zn)で示され、これは近クリップ面430が有するデプス値に対応することができる。最も大きいデプス値は、Zfar(Zf)で示され、これは遠クリップ面440が有するデプス値に対応することができる。上記ZnearおよびZfarは、カメラパラメータに対応し、Z−クリッピングパラメータ(Z-clipping parameter)と呼ぶことができる。
エンコーディング装置で処理されてデコーディング装置に送信されるデプスデータは、ビット深度(Bit Depth)に基づく値を有することができる。一例として、ビット深度が8の場合、デプスマップ内のデプスサンプル値は、0〜255の値を有することができる。この場合、上記デプスサンプル値は、Z−クリッピングパラメータZnearとZfarとの間のデプス値が各々256レベルで量子化された値に対応することができる。したがって、量子化されたデプスサンプル値は、Z−クリッピングパラメータZnearおよびZfarに基づいて実際の深さ値に変換されることができる。これは、例えば、以下の数式のように示される。
ここで、Znearは、近接クリッピングパラメータを示し、Zfarは、遠方(遠距離)クリッピングパラメータを示す。また、zは、実際デプス値を示し、vは、デプスマップに含まれているデプスサンプル値の強度(intensity)を示す。
また、DIBRに基づいて合成されたビューのピクチャを参照ピクチャとして利用して現在ピクチャ(または、ブロック)に関する予測を実行するVSP、そして対応するデプスブロックに基づいて視差ベクトル候補に対して実行されるデプスリファインメント(精製)(depth refinement)などにおいてもデプス値を視差値に変換(conversion)するためにカメラパラメータが使われることができる。このような変換のためのカメラパラメータは、変換パラメータと呼ぶことができ、デプス−視差テーブル(Depth to disparity table)を構成するために使われることもできる。デプス値を視差値に変換するために必要なカメラパラメータは、ビットストリームに含まれることができ、上記カメラパラメータ(または、変換パラメータ)は、スケール因子(scale factor)およびオフセット(offset)に対するパラメータを含むことができる。視差ベクトルの垂直成分(vertical component)は0に設定されることができ、視差ベクトルの水平成分(horizontal component)は、以下の数式に基づいて導出される(derived)ことができる。
ここで、vはデプスサンプル値であり、sはスケール因子であり、oはオフセットであり、そしてnは上記視差ベクトルに要求される精度(正確性)(required accuracy)に基づいているシフトパラメータである。現在ビューとデプスサンプルがあるビューインデックスjであるビューとの間の視差ベクトルを導出するための逆方向(backward)変換では、上記スケール因子は、cp_scale[j]に基づいて導出されることができ、上記オフセットは、cp_off[j]に基づいて導出されることができる。また、ビューインデックスjであるビューとデプスサンプルがある現在ビューとの間の視差ベクトルを導出するための順方向(forward)変換では、上記スケール因子は、cp_inv_scale_plus_scale[j]に基づいて導出されることができ、上記オフセットは、cp_inv_off_plus_off[j]に基づいて導出されることができる。
本発明において、カメラパラメータは、複数のパラメータを含むことができ、カメラパラメータセットと呼ぶことができる。上記カメラパラメータは、時間の流れによってビューのピクチャ間で共有されたり変更されたりすることができる。一例として、3Dビデオが終わる時まで、カメラの位置が固定されたり、多視点(マルチビュー)カメラ間の相対位置(relative position)が変わらない場合、ビューの各ピクチャは、一つのカメラパラメータを共有することができる。この場合には、ビデオパラメータセット(Video Parameter Set;VPS)シンタックス(syntax)を介して該当ビューを代表するカメラパラメータ(a representative camera parameter of the view)が送信されることができる。この場合、上記VPSシンタックスは、例えば、以下のように示される。
ここで、cp_in_slice_segment_header_flagは、i−th(i番目の)ビューに対してスライスセグメントヘッダにカメラパラメータが存在するか否かを示すフラグ情報である。
cp_in_slice_segment_header_flag[i]の値が0の場合、カメラパラメータに対するシンタックス要素(syntax elements)vps_cp_scale[i][j]、vps_cp_off[i][j]、vps_cp_inv_scale_plus_scale[i][j]、およびvps_cp_inv_off_plus_off[i][j]が上記VPSに存在し、nuh_layer_idがlayerIdと同じ値を有し、VpsViewIdx[layerId]がiと同じ値を有するスライスセグメントヘッダにcp_scale[j]、cp_off[j]、cp_inv_scale_plus_scale[j]、およびcp_inv_off_plus_off[j]が存在しないことを示す。
ここで、vps_cp_scale[i][j]、vps_cp_off[i][j]、vps_cp_inv_scale_plus_scale[i][j]、およびvps_cp_inv_off_plus_off[i][j]は、デプス値を視差値に変換(converting)するためのパラメータを示す。vps_cp_scale[i][j]、vps_cp_off[i][j]、vps_cp_inv_scale_plus_scale[i][j]、およびvps_cp_inv_off_plus_off[i][j]は、VPSに明示されたi−thビューに関するcp_scale[j]、cp_off[j]、cp_inv_scale_plus_scale[j]、およびcp_inv_off_plus_off[j]の値を導出するために使われることができる。
他の例として、カメラの動きのため、時間の経過によってカメラパラメータの値が変わることもできる。このような場合には、一つのビューのピクチャ間でカメラパラメータが時間によって異なり、スライスセグメントヘッダを介してカメラパラメータが送信されることができる。この場合、上記スライスセグメントヘッダは、例えば、以下のように示される。
即ち、cp_in_slice_segment_header_flag[i]の値が1の場合、VpsViewIdx[layerId]がiと同じ値を有するスライスセグメントヘッダに、デプス値を視差値に変換(converting)するためのパラメータであるcp_scale[j]、cp_off[j]、cp_inv_scale_plus_scale[j]、およびcp_inv_off_plus_off[j]が存在することを示す。
即ち、上記によると、一つのビュー内でカメラパラメータが一度でも変わる場合には、スライスセグメントヘッダを介してカメラパラメータが送信されることができる。この場合、別個の制限がない場合、スライス毎にカメラパラメータが送信されることができる。
ただし、カメラパラメータがPOC毎に変わるものではなく、一定区間(period)では同じカメラパラメータが利用される場合にも、スライス毎にカメラパラメータが送信されると、同じ情報が不要に重複送信されることができ、コーディング効率を低下させることができる。
後述する本発明の実施例によると、重複したカメラパラメータの送信を防止し、ビュー内の一定区間のピクチャ(または、スライス)は、同じカメラパラメータを共有することができる。本発明によると、現在スライス(または、ピクチャ)が前の(previous)スライス(または、ピクチャ)と同じカメラパラメータを使用する場合、同じ値を新しく送信せずに、前スライス(または、ピクチャ)のカメラパラメータを利用することができる。
一実施例として、スライスセグメントヘッダで、前スライスで使用したカメラパラメータが使われるか否かを示すフラグ情報が送信されることができる。例えば、上記フラグ情報が1の場合、カメラパラメータ(例えば、cp_scale[j]、cp_off[j]、cp_inv_scale_plus_scale[j]、およびcp_inv_off_plus_off[j])が該当スライスセグメントヘッダに含まれて送信されない。上記フラグ情報が0の場合、新しいカメラパラメータが該当スライスセグメントヘッダに含まれて送信されることができ、デコーディング装置は、上記変換パラメータをパージングして使用することができる。または、それに対し、上記フラグ情報が0の場合、新しいパラメータが該当スライスセグメントヘッダに含まれて送信されず、上記フラグ情報が1の場合、カメラパラメータが該当スライスセグメントヘッダに含まれて送信されることもできる。このとき、現在デコーディングするピクチャがランダムアクセスポイントの場合には、無条件に上記カメラパラメータをパージングすることもできる。上記スライスセグメントヘッダは、例えば、以下のように示される。
ここで、prev_cp_in_slice_segment_header_flagは、前スライスで使用したカメラパラメータが現在スライスに使われるか否かを示すフラグ情報である。
prev_cp_in_slice_segment_header_flag[ViewIdx]の値が0の場合、シンタックス要素cp_scale[j]、cp_off[j]、cp_inv_scale_plus_scale[j]、およびcp_inv_off_plus_off[j]がスライスセグメントヘッダに存在することを示す。
prev_cp_in_slice_segment_header_flag[ViewIdx]の値が1の場合、cp_scale[j]、cp_off[j]、cp_inv_scale_plus_scale[j]、およびcp_inv_off_plus_off[j]がスライスセグメントヘッダに存在せず、ビューインデックスがViewIdxと同じビューインデックスを有する前スライスセグメントヘッダの対応するシンタックス要素からcp_scale[j]、cp_off[j]、cp_inv_scale_plus_scale[j]、およびcp_inv_off_plus_off[j]が導出されることを示す。
prev_cp_in_slice_segment_header_flag[ViewIdx]が存在しない場合、prev_cp_in_slice_segment_header_flag[ViewIdx]の値は1であると推定される(inferred)ことができる。アクセスユニット上、nuh_layer_idが0であるピクチャがIRAP(Intra Random Access Point)ピクチャである場合、スライスセグメントヘッダ内のprev_cp_in_slice_segment_header_flag[ViewIdx]の値は0と同じである。
cp_scale[j]、cp_off[j]、cp_inv_scale_plus_scale[j]、およびcp_inv_off_plus_off[j]は、デプス値を視差値に変換するためのパラメータを示す。該当パラメータが存在せずにprev_cp_in_slice_segment_header_flag[ViewIdx]の値が0の場合、cp_scale[j]、cp_off[j]、cp_inv_scale_plus_scale[j]、およびcp_inv_off_plus_off[j]の値は、各々、vps_cp_scale[ViewIdx][j]、vps_cp_off[ViewIdx][j]、vps_cp_inv_scale_plus_scale[ViewIdx][j]、およびvps_cp_inv_off_plus_off[ViewIdx][j]と同じであると推定される(inferred to be equal to)ことができる。ここで、ViewIdxAがViewIdxBと同じ場合、ViewIdxAと同じViewIdxを有するスライスセグメントヘッダ内のcp_scale[j]、cp_off[j]、cp_inv_scale_plus_scale[j]、およびcp_inv_off_plus_off[j]は、ViewIdxBと同じViewIdxを有するスライスセグメントヘッダ内のcp_scale[j]、cp_off[j]、cp_inv_scale_plus_scale[j]、およびcp_inv_off_plus_off[j]と同じである。
他の実施例として、時間によってカメラパラメータが変わる場合に、VPSを介してデフォルトカメラパラメータを送信し、スライスセグメントヘッダを介してカメラパラメータが更新(アップデート)される(updated)か否かを示すフラグ情報を送信することができる。それによって、デコーディング装置は、新しいカメラパラメータのパージングを行うか否かを決定することができる。上記フラグ情報が0を示す場合、スライスセグメントヘッダにはカメラパラメータが含まれず、デコーディング装置内に記憶された現在時点のカメラパラメータを使用する。即ち、カメラパラメータが一回も更新されない場合、上記デフォルトカメラパラメータがデコーディング装置に記憶される。カメラパラメータが更新され上記フラグ情報が1を示す場合、デコーディング装置は、スライスセグメントヘッダに含まれている新しいカメラパラメータ値をパージングし、現在時点に対して共有される上記カメラパラメータを更新する。このとき、現在デコーディングするピクチャがランダムアクセスポイントの場合には無条件に上記カメラパラメータをパージングすることもできる。
この場合、上記VPSおよび上記スライスセグメントヘッダは、例えば、各々、以下の表4および表5のように示される。
ここで、vps_cp_scale[i][j]、vps_cp_off[i][j]、vps_cp_inv_scale_plus_scale[i][j]、およびvps_cp_inv_off_plus_off[i][j]は、デプス値を視差値に変換するための(デフォルト)パラメータを示す。ViewIdxがiと同じであるテクスチャレイヤおよびデプスレイヤが両方とも存在する場合、上記パラメータは、上記テクスチャレイヤと関連付けられている(associated)。
この場合、現在カメラパラメータは、CpScale[i][j]、CpOff[i][j]、CpInvScalePlusScale[i][j]、およびCpInvOffPlusOff[i][j]で示される。
CpScale[i][j]、CpOff[i][j]、CpInvScalePlusScale[i][j]、およびCpInvOffPlusOff[i][j]は、以下のように適用されることができる。
−CpScale[i][j]=vps_cp_scale[i][j]
−CpOff[i][j]=vps_cp_off[i][j]
−CpInvScalePlusScale[i][j]=vps_cp_inv_scale_plus_scale[i][j]
−CpInvOffPlusOff[i][j]=CpInvOffPlusOff[i][j]
ここで、cu_update_flagは、カメラパラメータが更新されるか否かを示すフラグ情報である。
cu_update_flag[ViewIdx]の値が1の場合、シンタックス要素cp_scale[j]、cp_off[j]、cp_inv_scale_plus_scale[j]、およびcp_inv_off_plus_off[j]がスライスセグメントヘッダに存在することを示す。
cu_update_flag[ViewIdx]の値が0の場合、cp_scale[j]、cp_off[j]、cp_inv_scale_plus_scale[j]、およびcp_inv_off_plus_off[j]がスライスセグメントヘッダに存在せず、前スライスセグメントヘッダの対応するシンタックス要素からcp_scale[j]、cp_off[j]、cp_inv_scale_plus_scale[j]、およびcp_inv_off_plus_off[j]が導出されることを示す。
cu_update_flag[ViewIdx]が存在しない場合、cu_update_flag[ViewIdx]の値は0であると推定される(inferred)ことができる。アクセスユニット上、nuh_layer_idが0であるピクチャがIRAP(Intra Random Access Point)ピクチャである場合、スライスセグメントヘッダ内のcu_update_flag[ViewIdx]の値は0と同じである。
cp_scale[j]、cp_off[j]、cp_inv_scale_plus_scale[j]、およびcp_inv_off_plus_off[j]は、デプス値を視差値に変換するためのパラメータを示す。ここで、ViewIdxAがViewIdxBと同じである場合、ViewIdxAと同じViewIdxを有するスライスセグメントヘッダ内のcp_scale[j]、cp_off[j]、cp_inv_scale_plus_scale[j]、およびcp_inv_off_plus_off[j]は、ViewIdxBと同じViewIdxを有するスライスセグメントヘッダ内のcp_scale[j]、cp_off[j]、cp_inv_scale_plus_scale[j]、およびcp_inv_off_plus_off[j]と同じである。
cu_update_flag[ViewIdx]の値が1の場合、CpScale[i][j]、CpOff[i][j]、CpInvScalePlusScale[i][j]、およびCpInvOffPlusOff[i][j]は、以下のように更新されることができる。
−CpScale[ViewIdx][j]=cp_scale[j]
−CpOff[ViewIdx][j]=cp_off[j]
−CpInvScalePlusScale[ViewIdx][j]=cp_inv_scale_plus_scale[j]
−CpInvOffPlusOff[ViewIdx][j]=cp_inv_off_plus_off[j]
上記のように現在カメラパラメータがCpScale、CpOff、CpInvScalePlusScale、およびCpInvOffPlusOffで示される場合、前述した数式2において、上記逆方向変換で、上記スケール因子は上記CpScaleに基づいて導出されることができ、上記オフセットは上記CpOffに基づいて導出されることができる。また、上記順方向変換で、上記スケール因子は上記CpInvScalePlusScaleに基づいて導出されることができ、上記オフセットはCpInvOffPlusOffに基づいて導出されることができる。
他の実施例として、VPSを介してデフォルトカメラパラメータを送信し、スライスセグメントヘッダを介してカメラパラメータが更新されるか否かを示すフラグ情報を送信し、カメラパラメータが更新される場合、デフォルトカメラパラメータとの差分値を送信することができる。上記フラグ情報が0を示す場合、スライスセグメントヘッダではカメラパラメータが含まれず、デコーディング装置内に記憶された現在時点のカメラパラメータを使用する。即ち、カメラパラメータが一回も更新されない場合、上記デフォルトカメラパラメータがデコーディング装置に記憶される。カメラパラメータが更新されて上記フラグ情報が1を示す場合、デコーディング装置は、スライスセグメントヘッダに含まれているカメラパラメータの差分値をパージングしてデフォルトカメラパラメータに加えることによって、現在時点に対して共有される上記カメラパラメータを更新する。このとき、現在デコーディングするピクチャがランダムアクセスポイントの場合には無条件に上記カメラパラメータをパージングすることもできる。
この場合、上記VPSおよび上記スライスセグメントヘッダは、例えば、各々、以下の表6および表7のように示される。
ここで、vps_cp_scale[i][j]、vps_cp_off[i][j]、vps_cp_inv_scale_plus_scale[i][j]、およびvps_cp_inv_off_plus_off[i][j]は、デプス値を視差値に変換するための(デフォルト)パラメータを示す。ViewIdxがiと同じであるテクスチャレイヤおよびデプスレイヤが両方とも存在する場合、上記パラメータは、上記テクスチャレイヤと関連付けられている(associated)。
この場合、現在カメラパラメータは、CpScale[i][j]、CpOff[i][j]、CpInvScalePlusScale[i][j]、およびCpInvOffPlusOff[i][j]で示される。
CpScale[i][j]、CpOff[i][j]、CpInvScalePlusScale[i][j]、およびCpInvOffPlusOff[i][j]は、以下のように適用されることができる。
−CpScale[i][j]=vps_cp_scale[i][j]
−CpOff[i][j]=vps_cp_off[i][j]
−CpInvScalePlusScale[i][j]=vps_cp_inv_scale_plus_scale[i][j]
−CpInvOffPlusOff[i][j]=vps_cp_inv_off_plus_off[i][j]
ここで、cu_update_flagは、カメラパラメータが更新されるか否かを示すフラグ情報である。
cu_update_flag[ViewIdx]の値が1の場合、シンタックス要素delta_cp_scale[j]、delta_cp_off[j]、delta_cp_inv_scale_plus_scale[j]、およびdelta_cp_inv_off_plus_off[j]がスライスセグメントヘッダに存在することを示す。
cu_update_flag[ViewIdx]の値が0の場合、delta_cp_scale[j]、delta_cp_off[j]、delta_cp_inv_scale_plus_scale[j]、およびdelta_cp_inv_off_plus_off[j]がスライスセグメントヘッダに存在せず、前スライスセグメントヘッダの対応するシンタックス要素からdelta_cp_scale[j]、delta_cp_off[j]、delta_cp_inv_scale_plus_scale[j]、およびdelta_cp_inv_off_plus_off[j]が導出されることを示す。
cu_update_flag[ViewIdx]が存在しない場合、cu_update_flag[ViewIdx]の値は0であると推定される(inferred)ことができる。アクセスユニット上、nuh_layer_idが0であるピクチャがIRAP(Intra Random Access Point)ピクチャである場合、スライスセグメントヘッダ内のcu_update_flag[ViewIdx]の値は0と同じである。
delta_cp_scale[j]、delta_cp_off[j]、delta_cp_inv_scale_plus_scale[j]、およびdelta_cp_inv_off_plus_off[j]は、デプス値を視差値に変換するためのパラメータを示す。ここで、ViewIdxAがViewIdxBと同じである場合、ViewIdxAと同じViewIdxを有するスライスセグメントヘッダ内のdelta_cp_scale[j]、delta_cp_off[j]、delta_cp_inv_scale_plus_scale[j]、およびdelta_cp_inv_off_plus_off[j]は、ViewIdxBと同じViewIdxを有するスライスセグメントヘッダ内のdelta_cp_scale[j]、delta_cp_off[j]、delta_cp_inv_scale_plus_scale[j]、およびdelta_cp_inv_off_plus_off[j]と同じである。
cu_update_flag[ViewIdx]の値が1の場合、CpScale[i][j]、CpOff[i][j]、CpInvScalePlusScale[i][j]、およびCpInvOffPlusOff[i][j]は、以下のように更新されることができる。
−CpScale[ViewIdx][j]=vps_cp_scale[ViewIdx][j]+delta_cp_scale[j]
−CpOff[ViewIdx][j]=vps_cp_off[ViewIdx][j]+delta_cp_off[j]
−CpInvScalePlusScale[ViewIdx][j]=vps_cp_inv_scale_plus_scale[ViewIdx][j]+cp_inv_scale_plus_scale[j]
−CpInvOffPlusOff[ViewIdx][j]=CpInvOffPlusOff[i][j]+cp_inv_off_plus_off[j]
この場合、前述した数式2において、上記逆方向変換で、上記スケール因子は上記CpScaleに基づいて導出されることができ、上記オフセットは上記CpOffに基づいて導出されることができる。また、上記順方向変換で、上記スケール因子は上記CpInvScalePlusScaleに基づいて導出されることができ、上記オフセットはCpInvOffPlusOffに基づいて導出されることができる。
他の実施例として、最も最近に送信されたカメラパラメータを予測子(predictor)とし、現在スライスに対するカメラパラメータとの差分値のみを送信するものである。このとき、デルタ(delta)値が無限に大きくなることを防止するために、デルタの絶対値が決められた大きさに到達した場合、予測子となるカメラパラメータを更新することができる。この場合、基本(または、基準)となるカメラパラメータは、計算負荷(演算負担)(computation load)およびコーディング効率を考慮してSPS(Sequence Parameter Set)シンタックス、VPS(Video Parameter Set)シンタックスまたはピクチャパラメータセット(Picture Parameter Set;PPS)を介して送信されることができる。
この場合、基準となるカメラパラメータが送信されるシンタックスとカメラパラメータの差分値が送信されるスライスセグメントヘッダとは、例えば、各々、以下の表8および表9のように示される。
ここで、cp_scale[i][j]、cp_off[i][j]、cp_inv_scale_plus_scale[i][j]、およびcp_inv_off_plus_off[i][j]は、デプス値を視差値に変換するための(基本)パラメータを示す。ViewIdxがiと同じであるテクスチャレイヤおよびデプスレイヤが両方とも存在する場合、上記パラメータは、上記テクスチャレイヤと関連付けられている(associated)。
この場合、参照カメラパラメータは、RefCpScale[i][j]、RefCpOff[i][j]、RefCpInvScalePlusScale[i][j]、およびRefCpInvOffPlusOff[i][j]で示される。
RefCpScale[i][j]、RefCpOff[i][j]、RefCpInvScalePlusScale[i][j]、およびRefCpInvOffPlusOff[i][j]は、以下のように適用されることができる。
−RefCpScale[i][j]=cp_scale[i][j]
−RefCpOff[i][j]=cp_off[i][j]
−RefCpInvScalePlusScale[i][j]=cp_inv_scale_plus_scale[i][j]
−RefCpInvOffPlusOff[i][j]=cp_inv_off_plus_off[i][j]
ここで、delta_cp_flagは、カメラパラメータの差分値(または、デルタ値)が存在するか否かを示すフラグ情報である。
delta_cp_flagの値が1の場合、シンタックス要素delta_cp_scale[j]、delta_cp_off[j]、delta_cp_inv_scale_plus_scale[j]、およびdelta_cp_inv_off_plus_off[j]がスライスセグメントヘッダに存在することを示す。即ち、既存の(参照)カメラパラメータに、上記スライスセグメントヘッダに存在するカメラパラメータの差分値を加えて現在カメラパラメータが導出され、上記現在カメラパラメータが現在スライスに対して使われることを示す。
cu_update_flag[ViewIdx]の値が0の場合、delta_cp_scale[j]、delta_cp_off[j]、delta_cp_inv_scale_plus_scale[j]、およびdelta_cp_inv_off_plus_off[j]がスライスセグメントヘッダに存在しない。即ち、今回のビットストリームでカメラパラメータが更新されないことを示す。
この場合、現在スライスのための現在カメラパラメータ(変換パラメータ)は、CurrCpScale[i][j]、CurrCpOff[i][j]、CurrCpInvScalePlusScale[i][j]、およびCurrCpInvOffPlusOff[i][j]で示される。
CurrCpScale[i][j]、CurrCpOff[i][j]、CurrCpInvScalePlusScale[i][j]、およびCurrCpInvOffPlusOff[i][j]は、以下のように導出されることができる。
−CurrCpScale[i][j]=RefCpScale[i][j]+delta_cp_scale[j]
−CurrCpOff[i][j]=RefCpOff[i][j]+delta_cp_off[j]
−CurrCpInvScalePlusScale[i][j]=RefCpInvScalePlusScale[i][j]+cp_inv_scale_plus_scale[j]
−CurrCpInvOffPlusOff[i][j]=RefCpInvOffPlusOff[i][j]+cp_inv_off_plus_off[j]
上記のように現在カメラパラメータがCurrCpScale[i][j]、CurrCpOff[i][j]、CurrCpInvScalePlusScale[i][j]、およびCurrCpInvOffPlusOff[i][j]で示される場合、前述した数式2において、上記逆方向変換で、上記スケール因子は上記CurrCpScale[i][j]に基づいて導出されることができ、上記オフセットは上記CurrCpOff[i][j]に基づいて導出されることができる。また、上記順方向変換で、上記スケール因子は上記CurrCpInvScalePlusScale[i][j]に基づいて導出されることができ、上記オフセットはCurrCpInvOffPlusOff[i][j]に基づいて導出されることができる。
delta_cp_scale[j]、delta_cp_off[j]、delta_cp_inv_scale_plus_scale[j]、またはdelta_cp_inv_off_plus_off[j]が閾値に到達した場合、RefCpScale[i][j]、RefCpOff[i][j]、RefCpInvScalePlusScale[i][j]、またはRefCpInvOffPlusOff[i][j]は、以下のように更新されることができる。ここで、閾値は、明示的に(explicitly)シグナリングされることもでき、暗黙的に(implicitly)知られることができる。
−RefCpScale[i][j]=CurrCpScale[i][j]
−RefCpOff[i][j]=CurrCpOff[i][j]
−RefCpInvScalePlusScale[i][j]=CurrCpOff[i][j]
−RefCpInvOffPlusOff[i][j]=CurrCpInvOffPlusOff[i][j]
他の実施例として、デコーディング装置は、複数のカメラパラメータセットのうちいずれか一つのカメラパラメータセットを参照対象カメラパラメータセットと判断できる。例えば、一つのカメラパラメータセットでない複数個のカメラパラメータセットをエンコーダから送信を受けることができる。この場合、現在スライスまたはピクチャをデコーディングするにあたって、上記複数のカメラパラメータセットのうちいずれか一つのカメラパラメータセットを指示するインデックス(または、ID)情報を受信したり、他の情報に基づいて類推して上記参照対象となるカメラパラメータセットを判断することができる。上記複数のカメラパラメータセットは、複数のスライスをデコーディングする時に参照されることができる。
図5は、複数のカメラパラメータセットに対するスライス別参照対象カメラパラメータセットを例示的に示す。
図5を参照すると、スライス0乃至スライス2は、カメラパラメータセット0番を参照することができ、スライス3は、カメラパラメータセット1番を参照することができ、スライス4およびスライス5は、カメラパラメータセット2番を参照することができる。
デコーディング装置は、エンコーディング装置からカメラパラメータセットの送信を受け、以後送信されるインデックス情報に基づいて、スライスに対して複数のカメラパラメータセットリストのうちどのカメラパラメータセットが適用されるかを判断することができる。
カメラパラメータセットは、例えば、PPSを介して送信されることができる。一例として、PPSは、以下の表10のように示される。
エンコーディング装置からデコーディング装置に最大64個の異なるPPSが送信されることができ、デコーディング装置は、スライスセグメントヘッダに含まれているインデックス情報(または、PPSのID)に基づいて、該当スライスに参照すべきカメラパラメータセットがあるPPSを指定することができ、それによって、複数のカメラパラメータのうち適切なカメラパラメータを探してデコーディングに活用できる。
この場合、上記スライスセグメントヘッダは、例えば、以下の表11のように示される。
ここで、slice_pic_parameter_set_idは、現在スライスに対して複数のカメラパラメータセットリストのうちどのカメラパラメータセットが適用されるかを示すインデックス情報をPPSのIDの形態で表す。
即ち、slice_pic_parameter_set_idは、使われるPPSに対するpps_pic_parameter_setの値を示し、slice_pic_parameter_set_idの値の範囲は、0〜63(inclusive)である。
この場合、参照カメラパラメータセットは、RefCpScale[i][j]、RefCpOff[i][j]、RefCpInvScalePlusScale[i][j]、およびRefCpInvOffPlusOff[i][j]を含むことができる。
nuh_layer_idが0より大きく、スライスセグメントヘッダのslice_pic_parameter_set_idによりPPSが参照(または、指示)され、上記PPSに含まれているcp_present_flag[i]が1と同じ場合、RefCpScale[i][j]、RefCpOff[i][j]、RefCpInvScalePlusScale[i][j]、およびRefCpInvOffPlusOff[i][j]は、以下のように適用されることができる。
−RefCpScale[i][j]=cp_scale[i][j]
−RefCpOff[i][j]=cp_off[i][j]
−RefCpInvScalePlusScale[i][j]=cp_inv_scale_plus_scale[i][j]
−RefCpInvOffPlusOff[i][j]=cp_inv_off_plus_off[i][j]
他の実施例として、デコーディング装置は、複数のカメラパラメータセットの中からいずれか一つのカメラパラメータセットを基本カメラパラメータセットとして選択することができ、この場合、正確な変換のために上記選択された基本カメラパラメータセットに差分値を加えて現在スライスまたはピクチャで使用することができる。
例えば、デコーディング装置は、複数のカメラパラメータセットの中から一つの基本カメラパラメータセットを選択し、上記選択された基本カメラパラメータセットに含まれているパラメータにデルタ値を加えることによって現在スライスに対する参照カメラパラメータを得ることができる。
一例として、カメラパラメータセットは、PPSを介して送信されることができ、この場合、PPSおよびスライスセグメントヘッダは、以下の表12および表13のように示される。
ここで、delta_cp_flagは、カメラパラメータセットの差分値(または、デルタ値)が存在するか否かを示すフラグ情報である。
delta_cp_flagの値が1の場合、PPS(または、VPS、SPS)を介して送信されたカメラパラメータセット内のパラメータに差分値を加え、このスライスのために使われることを示す。
即ち、delta_cp_flagの値が1の場合、上記差分値を示すシンタックス要素delta_cp_scale[j]、delta_cp_off[j]、delta_cp_inv_scale_plus_scale[j]、およびdelta_cp_inv_off_plus_off[j]がスライスセグメントヘッダに存在する。
delta_cp_flagの値が0の場合、PPS(または、VPS、SPS)を介して送信されたカメラパラメータセット内のパラメータが更新されずに、このスライスのために使われることを示す。
delta_cp_scale[j]、delta_cp_off[j]、delta_cp_inv_scale_plus_scale[j]、およびdelta_cp_inv_off_plus_off[j]は、デプス値を視差値に変換するためのパラメータの現在スライスに対する差分値を示す。
この場合、現在スライスのための現在カメラパラメータ(変換パラメータ)は、CurrCpScale[i][j]、CurrCpOff[i][j]、CurrCpInvScalePlusScale[i][j]、およびCurrCpInvOffPlusOff[i][j]で示される。
CurrCpScale[i][j]、CurrCpOff[i][j]、CurrCpInvScalePlusScale[i][j]、およびCurrCpInvOffPlusOff[i][j]は、以下のように導出されることができる。
−CurrCpScale[i][j]=RefCpScale[i][j]+delta_cp_scale[j]
−CurrCpOff[i][j]=RefCpOff[i][j]+delta_cp_off[j]
−CurrCpInvScalePlusScale[i][j]=RefCpInvScalePlusScale[i][j]+cp_inv_scale_plus_scale[j]
−CurrCpInvOffPlusOff[i][j]=RefCpInvOffPlusOff[i][j]+cp_inv_off_plus_off[j]
delta_cp_scale[j]、delta_cp_off[j]、delta_cp_inv_scale_plus_scale[j]、またはdelta_cp_inv_off_plus_off[j]が閾値に到達した場合、RefCpScale[i][j]、RefCpOff[i][j]、RefCpInvScalePlusScale[i][j]、またはRefCpInvOffPlusOff[i][j]は、以下のように更新されることができる。ここで、閾値は、明示的に(explicitly)シグナリングされることもでき、暗黙的に(implicitly)知られることができる。
−RefCpScale[i][j]=CurrCpScale[i][j]
−RefCpOff[i][j]=CurrCpOff[i][j]
−RefCpInvScalePlusScale[i][j]=CurrCpOff[i][j]
−RefCpInvOffPlusOff[i][j]=CurrCpInvOffPlusOff[i][j]
他の実施例として、カメラパラメータセットを送信するために別個のシンタックスが使われることができる。この場合、上記シンタックスは、カメラパラメータセットシンタックスまたはカメラ変換パラメータセット(camera conversion parameter set)シンタックスと呼ぶことができる。このようにカメラパラメータセットのためのシンタックスを使用することによってカメラパラメータセットをVPS、SPSまたはPPSに含んで送信することで、数回送ることにより発生できる重複情報送信を防止することができる。また、この場合、各カメラパラメータセットにインデックスまたはIDを付与することによって、複数個のカメラパラメータセットが受信される場合にも所望するカメラセットが指示されることができる。
一例として、カメラ変換パラメータセットシンタックスは、以下の表14のように示される。
ここで、camera_conversion_parameter_set_idは、カメラ(変換)パラメータセットに割り当てられた所定のIDを示す。
この場合、前述した実施例で開示されているように、スライスセグメントヘッダを介して特定IDのカメラパラメータセットが指定されることができる。また、指定されたカメラパラメータセットにスライスセグメントヘッダを介して送信されたデルタ値(または、差分値)が加算されて現在スライスのための最終(または、参照または現在)カメラパラメータセットのパラメータ値が導出されることができる。
一方、デコーディング装置のメモリは、限定されており、デコーディング装置が複数のカメラパラメータセットを受信する場合、特定条件によってメモリ内の一部または全部のカメラパラメータセットを削除および整列することができる。
まず、メモリ内のカメラパラメータセットを削除する方法は、種々ある。一例として、入力順序に基づいてカメラパラメータセットが削除されることができる。即ち、メモリが足りない場合、メモリに最も先に入力されたカメラパラメータセットが先に除去されることができる。他の例として、一定回数または時間の間のカメラパラメータセットの参照回数をカウントした後、最も参照回数が小さいカメラパラメータセットがメモリから除去されることもできる。他の例として、エンコーディング装置が削除されるべきカメラパラメータセットに関する情報をデコーディング装置に送信し、デコーディング装置は、該当情報が示すカメラパラメータセットをメモリから除去することができる。他の例として、カメラパラメータセットがPPS、SPS、またはVPS等の上位パラメータセットに含まれて送信される場合、上記上位パラメータセットのバッファ管理(buffer management)技法を利用することもできる。
また、効率的なインデクシング(effective indexing)のためにカメラパラメータセットは、整列されて使われることができる。一例として、カメラパラメータセットの基準となるパラメータ変数(例えば、オフセット)の昇順または降順にカメラパラメータセットが整列されることができる。他の例として、参照された回数の降順または昇順にカメラパラメータセットが整列されることができる。他の例として、デコーディング装置がエンコーディング装置からカメラパラメータセットの順序に関する情報を受信し、該当情報に基づいてカメラパラメータセットを整列することができる。他の例として、カメラパラメータセットがPPS、SPS、またはVPS等の上位パラメータセットに含まれて送信される場合、上記カメラパラメータセットが含まれる該当上位パラメータセットのIDの昇順または降順の順序通りにカメラパラメータセットが整列されることができる。
図6は、本発明の実施例によるカメラパラメータエンコーディング方法を概略的に示す流れ図である。図6の方法は、前述した図2のビデオエンコーディング装置により実行されることができる。
図6を参照すると、エンコーディング装置は、デプス値を視差値に変換するためのカメラパラメータが一定区間のスライスまたはピクチャ間に共有されるか否かに基づいて上記カメラパラメータを生成する(S600)。一定区間のスライスまたはピクチャは、上記カメラパラメータを共有することができ、重複したカメラパラメータの送信を防止することができる。上記カメラパラメータは、前述したように変換パラメータと呼ぶことができる。
エンコーディング装置は、上記カメラパラメータをエンコーディングしてビットストリームを生成し、ネットワークまたは記憶媒体を介してデコーディング装置に送信できる(S610)。カメラパラメータは、シンタックス形態で表現されることができる。上記カメラパラメータは、例えば、前述した表1乃至表14で説明されたシンタックスのうち一つまたは複数に含まれて送信されることができる。
図7は、本発明の実施例によるカメラパラメータデコーディング方法を概略的に示す流れ図である。図7の方法は、前述した図3のビデオデコーディング装置により実行されることができる。
図7を参照すると、デプス値を視差値に変換するためのカメラパラメータを受信およびデコーディングする(S700)。デコーディング装置は、ビットストリームを受信してエントロピデコーディングし、上記ビデオパラメータに関する情報を取得することができる。上記カメラパラメータは、VPSシンタックス、PPSシンタックス、SPSシンタックス、スライスセグメントヘッダシンタックス、カメラ変換パラメータセットシンタックスのうち少なくとも一つに含まれて受信されることができる。
デコーディング装置は、前スライスまたはピクチャに適用される上記カメラパラメータが現在スライスまたはピクチャに適用されるか否かを判断する(S710)。上記カメラパラメータは、ビデオ全体で共有されることもでき、ビデオ全体で共有されない場合でも一定条件によって一定区間のスライスまたはピクチャのために共有されることができる。
一例として、上記カメラパラメータが前スライスまたはピクチャのために使われた場合、デコーディング装置は、上記カメラパラメータが現在ピクチャのために使われるか否かを示すフラグ情報をシンタックス(a syntax)を介して受信することができる。上記フラグ情報が1の場合、上記カメラパラメータは、上記現在スライスまたは現在ピクチャのために適用(または、共有)されることができる。上記フラグ情報が0の場合、上記カメラパラメータは、上記現在ピクチャのために適用されずに、上記シンタックスに含まれて受信された新しいカメラパラメータが上記現在スライスまたは現在ピクチャのために適用されることができる。この場合、上記カメラパラメータが含まれるシンタックス(第1のシンタックス)と、上記フラグ情報および上記現在スライスまたはピクチャのための上記新しいカメラパラメータが含まれるシンタックス(第2のシンタックス)とは、互いに同じであってもよく、互いに異なってもよい。一例として、上記第1のシンタックスはVPSシンタックスであり、上記第2のシンタックスはスライスセグメントヘッダシンタックスである。他の例として、上記第1のシンタックスは第1のPPSシンタックスであり、上記第2のシンタックスは第2のPPSシンタックスである。エンコーディング装置からデコーディング装置に約64個の異なるPPSが送信されることができ、この場合、上記第1のPPSシンタックスと上記第2のPPSシンタックスとは、互いに異なるIDを有することができる。
他の例として、現在スライスまたは現在ピクチャのために上記カメラパラメータが更新されるか否かを示すフラグ情報をシンタックスを介して受信することができる。上記フラグ情報が0の場合、上記カメラパラメータは更新されず、上記フラグ情報が1の場合、上記カメラパラメータは、上記第2のシンタックスに含まれて受信されるパラメータ値に基づいて更新されることができる。この場合、上記更新されたカメラパラメータが上記現在スライスまたはピクチャのために使われることができる。この場合、上記パラメータ値は、上記カメラパラメータに対する差分値である。
他の例として、現在スライスまたは現在ピクチャのために既存のカメラパラメータに対する差分値が存在するか否かを示すフラグ情報をシンタックスを介して受信することができる。上記フラグ情報が0の場合、上記カメラパラメータは、上記現在スライスまたは現在ピクチャのために適用され、上記フラグ情報が1の場合、上記カメラパラメータおよび上記シンタックスに含まれて受信される差分値に基づいて導出された新しいカメラパラメータが上記現在スライスまたは現在ピクチャのために適用されることができる。
上記のような方法を介してデコーディング装置は、重複したカメラパラメータの受信を防止し、ビュー内の一定区間のピクチャ(または、スライス)に対して同じカメラパラメータを共有することができる。
一方、上記カメラパラメータの値は、cp_scale、cp_off、cp_inv_scale_plus_scaleおよびcp_inv_off_plus_offシンタックス要素(syntax elements)のうち少なくとも一つに基づいて導出されることができる。
上記カメラパラメータが現在スライスまたはピクチャに適用される場合、上記カメラパラメータに基づいて現在ブロックの視差値を導出する(S710)。デコーディング装置は、前述した数式2に基づいて上記視差値を導出することができる。
デコーディング装置は、上記視差値に基づいて該当ブロック(例えば、現在ブロック)に対するインタービュー(inter-view)予測を実行して該当ブロックの予測サンプルを生成することができる。デコーディング装置は、上記予測に基づいて該当ブロックおよび(現在)ピクチャを復元することができる。
以上の説明は、本発明の技術思想を例示的に説明したものに過ぎず、本発明が属する技術分野において、通常の知識を有する者であれば、本発明の本質的な特性から外れない範囲で多様な修正および変形が可能である。したがって、本発明に開示された実施例は、本発明の技術思想を限定するためのものではなく、説明するためのものであり、このような実施例により本発明の技術思想の範囲が限定されるものではない。本発明の保護範囲は、特許請求の範囲により解釈されなければならない。
本発明において、実施例がソフトウェアで具現される時、前述した方法は、前述した機能を遂行するモジュール(処理、機能など)で具現されることができる。モジュールは、メモリに記憶され、プロセッサにより実行されることができる。メモリは、プロセッサの内部または外部にあり、よく知られた多様な手段でプロセッサと連結されることができる。