以下、フレームヘッダからマクロブロックデータに至る処理の流れを順に説明する。
図1にフレームヘッダ情報の例を示す。また、以下にC言語によるピクチャヘッダデータのデコード処理例を示す。
picture_layer()
{
picture_structure
frame_number
reference_picture_selection_layer()
if(coding_type() == B-picture){
direct_mv_scale_bwd_dir[index]
if(direct_mv_scale_bwd_dir[index]){ // 未来方向
direct_mv_scale_bwd[index]
for(index=0; index<number of forward reference; index++){
direct_mv_scale_fwd_dir[index]
if(direct_mv_scale_fwd_dir[index]) // 過去方向
direct_mv_scale_fwd[index]
}
}
}
}
picture_structure20では、各pictureのスキャン構造(フレーム/フィールド)が示される。frame_number21には、そのフレームの識別番号が示される。このframe_numberの付け方には大きく2種類ある。1つは、時刻情報を含む場合である。この場合には、I,P−pictureでは直前のIまたはP−pictureとのフレーム間隔、B−pictureでは時間的に過去の直前IまたはP−pictureとのフレーム間隔がframe_numberとなる(一般にはTemporal reference;TRと呼ばれている)。2つめは、単純に復号する順番を示す場合である。
reference_picture_selection_layer()では、現フレームの動き補償処理に使用可能な複数参照フレームのframe_number(reference picture set)とその識別番号が示される。例えば、参照フレームが5枚の場合には、frame number10の現pictureの対して以下のようにindex0〜index4へのframe_numberが割り当てられる。
Index0:9
Index1:8
Index2:7
Index3:6
Index4:5
なお、ピクチャタイプがP−pictureの場合には、前方向の参照フレーム(forward reference picture set)、B−pictureの場合には、前方向と後方向の参照フレーム(forward reference picture setとbackward reference picture set)のframe_numberが復号される。この際、前方向と後方向の参照フレーム数は個別に設定できるため、異なる場合もある。ピクチャタイプがI−pictureまたはP−pictureの場合には、これらのreference picture set情報に続くバイトアライン情報(データの区切りをバイト単位に併せるための情報)にてピクチャレイヤは終了となる。以降のピクチャヘッダデータは、ピクチャタイプがB−pictureの場合に発生する。なお、本実施例では、上位のネットワーク・通信関連情報が含まれるレイヤに記載されているものと考える。
direct_mv_scale_bwd_dir28は、directモード用に指定される後方参照フレームが現フレームに対して未来に位置しているか過去に位置しているかを示す情報である。directモード用に指定される後方参照フレームは、通常、index0に割り当てられたbackward reference pictureである。データ28が後方参照フレーム(ここでは、index0に割り当てられたbackward reference picture)が現フレームに対して過去に位置していることを示している場合にはdirect modeが使用できず、データ28が後方参照フレームに対して現フレームが未来に位置していることを示している場合にはdirect modeが使用できる。したがって、このデータ28にて、index0のbackward reference pictureがdirectモードに使用できるか否かが明確に判断できる。また、directモードが実施できない場合には、後述する代用モードを適用する必要があり、そのためのメモリ配置等の準備面で、復号作業の効率化が促進できる。さらに、frame_numberが時刻情報を持たない場合において、reference pictureとcurrent picture間の関係を示す情報を効率良く送ることが可能となる。directモードに関するピクチャ位置情報には、direct mode以外にも使用されるものと、使用されないものがある。後者に関しては、direct_mv_scale_bwd_dirにより符号化を避けることが可能となる。
具体的には、図1に示すように、direct_mv_scale_bwd_dirがdirectモード使用可能、すなわち現フレームに対して未来方向に位置することを示すときには、データ26,27,29が符号化されるが、directモード使用不可であることを示すときにはこれらのデータは符号化されない。
direct_mv_scale_bwd29は、current pictureとindex0のbackward reference picture間のフレーム間隔を示す情報である(図9参照)。direct_mv_scale_fwd_dir26は、前方参照フレームが現フレームに対して未来に位置しているか過去に位置しているかを示す情報であり、direct_mv_scale_fwd27は、current pictureとforward reference picture間のピクチャ間隔を示す情報である(図9参照)。direct_mv_scale_fwdについては、reference_picture_selection_layer(22)にて指定されるforward reference pictureの数だけ符号化されている必要がある。但し、directモードを使用するには、前方向の参照フレームは現フレームに対して過去に位置している必要があるため、direct_mv_scale_fwd_dir26が未来方向を示すindexについては、direct_mv_scale_fwd27は省略される。direct_mv_scale_dividerは、index0のbackward reference pictureとforward reference picture間のピクチャ間隔を示す情報である(図9参照)。従って、この情報もforward reference pictureの数だけ符号化されている必要があるが、direct_mv_scale_fwdとdirect_reference_bwdから算出できるため、省略することも可能である。この情報もdirect_mv_scale_fwd_dir26が未来方向を示すindexについては、direct_mv_scale_fwd27は省略される。
B−pictureの場合においても、バイトアライン情報(データの区切りをバイト単位に併せるための情報)にてピクチャレイヤは終了となる。
direct_mv_scale_fwdやdirect_mv_scale_bwdは、図10に示されるpicture_distanceとしても使用できるため、図1を図10の動きベクトル符号化にも拡張したデータシンタックスを図2に示す。
picture_layer()
{
picture_structure
frame_number
reference_picture_selection_layer()
if(coding_type() == B-picture){
for(index=0; index<number of forward reference; index++){
direct_mv_scale_fwd_dir[index]
direct_mv_scale_fwd[index]
}
for(index=0; index<number of backward reference; index++){
direct_mv_scale_bwd_dir[index]
direct_mv_scale_bwd[index]
}
}
}
B−pictureの場合について説明する。この場合には、現フレームで使用可能な全ての参照フレームについて、データ26〜29が符号化/復号化されるが、これらのデータは図10に示した動きベクトルの符号化処理に利用するpicture_distanceの情報としても利用される。この図2でも図1と同じように、direct_mv_scale_bwd_dir[0]がdirectモードの使用可否を示す役割を果たすが、図2では、さらにデータ26と28の組み合わせにより、図10の処理が使用可能であるか否かを示す。
図10の動きベクトル符号化は、2本の動きベクトルに対応する2つの参照フレームが現フレームに対して同じ方向である場合に有効となる。そのため、ブロックで選択された2つのreference pictureのindex番号に対応するデータ26と28の値が、現フレームに対して異なる方向に位置する2つの参照フレームの組み合わせである場合には、図10の動きベクトル符号化方法ではなく、各動きベクトルを図8の方法で個別に符号化/復号化する。一方、ブロックで選択された2つのreference pictureのindex番号に対応するデータ26と28の値が、現フレームに対して同じ方向に位置する2つの参照フレームの組み合わせである場合には、現フレームから離れた動きベクトルについては、図10の方法が適用される。
ここまでは、directモードに使用するBackward reference pictureをindex0として説明してきた。しかしながら、backward reference picture setからindex0以外の番号をdirectモードのbackward reference pictureとして選択することも考えられる。例えば、図1と2のdirect_reference_idx_bwd24のように、directモードに使用するbackward reference pictureのindex番号をピクチャレイヤで示すことにより、フレーム単位でbackward reference pictureを変更することが可能となる。さらに、direct_reference_idx_bwd24をindex番号そのものではなく、index番号に1を足した値とすることにより、値“0”にdirectモードに使用できる後方参照フレームがbackward reference picture setにないという意味を持たせることが可能となる。
次に図18のマクロブロックレイヤシンタックス、図20、21のマクロブロックタイプコード表を用いて、マクロブロックデータの構造について説明する。符号化に使用する方法としては、1種類の可変長符号表のみを用いるUniversal VLC(UVLC)、固定長符号化と可変長符号化(各符号化要素に異なる符号表を用意)を組み合わせた符号化方法ならびに、算術符号化(Witten et al.,”Arithmetic Coding for Data Compression”,Comm.of the ACM,30(6),1987,pp.520−541)などが考えられるが、本実施例では、UVLCと算術符号化を例として説明する。図11の表81がUVLCの構成を示しており、Xnの値は‘0’または‘1’となる。表82に、実際の可変長符号表の例を示す。算術符号化の具体的な方法としては、各符号の意味を数ビットのバイナリーデータに置き換え、各ビットを各々の0と1の発生確率を示す生起確率モデルに応じて符号化する方法を考える。この方法は、CABAC(Context−based Adaptive Binary Arithmetic Coding)と呼ばれている。
図18は、B−pictureにおけるマクロブロックデータのシンタックス構造を示している。この図を用いて、B−pictureならびにP−pictureのマクロブロックデータ構造について説明する。なお、I−pictureについては、本願の特徴に含まれないため説明を省略する。
mb_skip_run11では、連続するSKIPモード数をランレングス符号化(連続する0の数を符号化、1つ前のマクロブロックのタイプがSKIPモードでない場合には、連続するSKIPモードの数をゼロとする)したデータで、エントロピー符号化の方法としてUVLCを用いる場合にのみ発生する。SKIPモードとは、予測誤差信号を符号化せず、予測ブロック画像をそのまま再生ブロック画像とするマクロブロックタイプである。
予測ブロック画像は、P−pictureではindex0のforward reference pictureから予測ベクトル位置に相当するマクロブロック画像を切り出す方法、B−pictureではdirectモードにて合成される。このSKIPモードは、低レート符号化にて多く選択されるモードであり、特にB−pictureでは選択される確率が高い。従って、directモードの予測性能は、低レートの符号化性能に直接影響する。
CABACを用いた符号化方法では、mb_skip_run11は使用せず、SKIPモードもmb_type12にて扱う(表91,93のcode number0の欄参照)。mb_type12では、表91(P−picture)または表93(B−picture)に示されるマクロブロックモードからマクロブロック毎に1つのモードが選択され、符号化される。
表91では、code number6,7に示されているIntraM×NのM,Nは空間予測を行う際の小ブロックサイズを示しており、M×Nは動き補償を行う際の小ブロックサイズ(図7のモード1〜モード4)を示している。但し、code number5に示されるモードはCABACの場合には使用しない。
表93では、code number23,24に示されているIntraM×NのM,Nは空間予測を行う際の小ブロックサイズ、M×Nは動き補償を行う際の小ブロックサイズ(図7のモード1〜モード4に対応)を示しており、directはdirectモード(Direct(CBP==0)は、CABAC適用時のSKIPモード)を示している。表93のBlock1ならびにBlock2は、図7のモード2またはモード3における2個の小ブロックを識別しており、各小ブロックの予測方向がForward(前方予測)、Backward(後方予測)、Bi−predictive(2方向参照フレーム予測)のいずれであるかを示している。
ここで、directモードについて説明を加える。mb_skip_run11とmb_type12の選択候補にdirectモードが含まれているが、複数参照フレーム機能や2参照フレームの機能を適用する方式では、directモードが適用できないケースが考えられる。そこで、本発明では図12に示すように、条件に応じて予測方法を切り換える手順を用いる。
最初に、ピクチャヘッダ内のdirect_mv_scale_bwd_dir(図1)またはdirect_mv_scale_bwd_dir[0](図2)にて、current pictureにdirectモードが使用可能か否かをチェックする(301)。処理301にて使用不可と判定された場合には、collocated blockのforward MVを必要としない代用モード(詳細は後述)にて予測マクロブロックを作成する(304)。処理301にて使用可能と判定された場合には、8x8ブロック毎に予測方法の選定を行う。ここで8x8ブロックとしたのは、図7のブロック分割方法では、参照フレームと予測方向選択の最小単位が8x8ブロックとされているためである。具体的には、8x8ブロックに対応するcollocated blockにforward MVを持つ予測モードが適用されているか否かをチェックする(302)。そして、適用されていると判定された場合には、directモードにて予測ブロックを作成し(303)、適用されていないと判定された場合には、代用モードにて予測ブロックを作成する(304)。
処理302では、collocated 8x8 blockについて、予測モードがintraモードの場合、予測方向がbackward predictionの場合、forward reference pictureに対するdirect_mv_scale_fwd_dir[index]の値がcurrent pictureに対して後方向(未来方向)に位置することを示している場合、あるいはforward reference pictureがcurrent pictureのforward reference picture setに含まれていない場合に、directモード使用不可と判定する。
なお、図12の処理302では、8x8ブロック単位でdirectモードの使用可否判定を実施しているが、これをマクロブロック単位で実施することも可能である。但し、この場合には、マクロブロック内のすべての予測ブロック、図7のブロック分割方法の場合には4個の8x8ブロックのすべてが、directモード使用可能の状態である場合にのみ、directモード使用可能と判定される。
図13は、ピクチャヘッダの構造にデータ24が追加された場合について、予測方法を切り換える手順を示している。図12と異なる点は、処理301が処理305に変更されている点であり、具体的には、チェックするdirect_mv_scale_bwd_dirのindex番号が図13のデータ24にて設定した値とされている点である。
図18の説明に戻る。mb_type12にて8x8(split)が選択された場合には、図7のモード4に示される4個の8×8小ブロック54−0〜54−3について、それぞれ、8x8 Partition13が発生する。具体的には、8x8 Partition18では、表92(P−picture)または表94(B−picture)に示される8x8 partitionモードから各8x8ブロックについて1つのモードが選択され、符号化される。
表92では、code number4に示されているIntraは空間予測を示しており、M×Nは動き補償を行う際の小ブロックサイズ(図7の8x8 partition1〜8x8 partition4)を示している。
表94では、code number13に示されているIntraは空間予測の適用、M×Nは動き補償を行う際の小ブロックサイズ(図7の8x8 partition1〜8x8 partition4)を示しており、directはdirectモードを示している。表94のPredictionは、図7のモード4に属する各小ブロックの予測方向がForward(前方予測)、Backward(後方予測)、Bi−predictive(2参照フレーム予測)のいずれであるかを示している。
8x8 Partition 18にてdirectモードが選択された場合においても、図12または図13と同様の予測方法切り換え手順が適応できる。しかしながら、8x8 Partition内のdirectモードの予測性能はdirectモードMBほど重要ではない。そこでより簡単な方法を適用することも可能である。例えば、処理302にてcollocated blockがForward MVを持っていないと判定される場合に、処理304の替わりに、Forward MVを0ベクトル、forward reference pictureならびにbackward reference pictureのindexを0に設定した上でdirectモードにて予測ブロックを生成する方法が考えられる。この際、backward reference pictureが存在しない場合には、forward predictionのみで予測ブロックを生成すればよい。より簡単には、処理302にてcollocated blockがForward MVを持っていないと判定されるケースでは、符号化側にてdirectモードの選択しない方法が考えられる。
mb_type12と8x8 Partition13の符号化方法については、UVLCを利用する場合には、表91〜94のcode numberに対応するコードを表82から選択して符号化する。CABACを利用する場合には、表91〜表94のBinarizationの欄に示されているビット列を各ビットの確率モデルを用いて算術符号化する。
ref_index_fwd14は、動き補償に使用する前方向の参照フレームのindex番号を示しており、当該マクロブロック内の各分割ブロック(図7の51〜54)について必要とされる。Index番号はforward reference picture setから選択される。但し、forward reference picture setに含まれる参照フレームが1枚のみの場合、ブロックタイプあるいはマクロブロックタイプがSkip,directまたはintraのブロックの場合、ならびにblock predictionがbackwardの場合については、このコードは発生しない。
また、P−pictureにてmb_typeとして表91のcode number5が選択された場合には、index0のforward reference pictureが参照フレームとして自動的に選択されるため、このコードは発生しない。
forward reference picture setがindex0〜index4の値を持つ場合を例として、符号化方法を考える。この例では、index0〜index4がそれぞれ、code number0〜4に割り当てられる。UVLCを利用する場合には、code number0−4に対応するコードを表82から選択して符号化/復号化される。CABACを利用する場合には、code number0−4に対して、それぞれ1’,01’,001’,0001’,00001’のバイナリーデータを割り当て、ビット列と各ビットの確率モデルを用いて算術符号化する。
ref_index_bwd15は、動き補償に使用する後ろ方向の参照フレームのindex番号を示しており、当該マクロブロック内の各分割ブロック(図7の51〜54)について必要とされる。
Index番号はbackward reference picture setから選択される。但し、ピクチャの種類がP−pictureの場合、backward reference picture setに含まれる参照フレームが1枚のみの場合、ブロックタイプあるいはマクロブロックタイプがskip,directまたはintraのブロックの場合、ならびにblock predictionがforwardの場合については、このコードは発生しない。符号化方法については、ref_index_fwdと同じであるため、説明は割愛する。
mvd_fwd16は、mb_type12と8x8 Partition13がforward(bi−predictiveも含む)に伴う動きベクトルを伴うマクロブロックであることを示す場合に発生し、マクロブロック内のforward MVの数だけ繰り返される。また、したがって、mb_type12がIntraM×N、SKIP(P−picture)またはdirect(B−picture)の場合や、8x8 Partition13がintraまたはdirect(B−picture)の場合にはこのデータは発生しない。また、block predictionがbackwardの分割ブロックの場合(B−picture)にもこのデータは発生しない。同様にmvd_bwd17は、mb_type12と8x8 Partition13がbackward(bi−predictiveも含む)に伴う動きベクトルを伴うマクロブロックであることを示す場合に発生し、マクロブロック内のbackward MVの数だけ繰り返される。また、したがって、ピクチャタイプがP−pictureの場合、mb_type12がIntraM×N、directの場合や、8x8 Partition13がintraまたはdirectの場合にはこのデータは発生しない。また、block predictionがforwardの分割ブロックの場合にもこのデータは発生しない。CBP18は、図6に示される24個のDCTブロックについて、‘0’以外の量子化DCT係数(有意係数)が16個係数に含まれているか否かを示す符号化データである。
Residual()19は、有意量子化DCT係数の符号化データを示している。CBPにて有意係数が無いことが示されているブロックについては、符号化処理が省略される。したがって、CBPが0の場合には、Residual()は発生しない。さらに、CBP18とResidual()19は、mb_type12がdirect(CBP==0)のときには発生しない。
ここで、図7の分割タイプを例として、上記に示した予測動きベクトルmvd_fwd16ならびにmvd_bwd17の生成方法を図8に説明する。図7のモード1(51)のブロック51−0,モード4(54)の小ブロック54a−0、54b−0、54b−1、54c−0、54c−1ならびに54d−0〜54d−3については、同じ予測方法を用いる。動きベクトルを符号化する対象の小ブロックを50と仮定する。これらの小ブロックでは、動きベクトルの水平・垂直成分それぞれについて、隣接位置A,B,Cに位置する3ブロックの動きベクトルを候補としてその中間値を計算し、中間値の動きベクトルを予測動きベクトルとする。但し、符号化順序やマクロブロック位置の関係で位置Cのブロックが符号化前の場合や画像の外に位置する場合が考えられる。この場合には、位置Cのかわりに位置Dに位置するブロックの動きベクトルを候補動きベクトルの1つとして用いる。
なお、位置AとDのブロックが画像の外に位置する場合には、その動きベクトルを‘0’ベクトルとして予測処理を行い、位置、DとBとCが画像の外に位置する場合には、位置Aのブロックの動きベクトルとして予測処理を行う。この際、3個の候補ブロックのうち2個が動きベクトルを持たない場合には、残りの1つの候補動きベクトルを予測動きベクトルとする。モード2(52)の2個の小ブロック(52−0,52−1)、モード3(53)の2個の小ブロック(53−0,53−1)については、図8に示す矢印の根元に位置するブロックの動きベクトルを予測値とする。なお、この方法における動きベクトル符号化では、同じ参照フレームの動きベクトルのみが予測に用いられる。したがって、隣接ブロックの動きベクトルが符号化ブロックにて選択された参照フレームと異なる場合には、画像の外に位置するものとして扱う。色差成分用の動きベクトルについては符号化せず、輝度成分の動きベクトルを2で割って使用する。
図14〜17を用いてcollocated blockのForward MVを必要としない代用モード(4x4 bi−predictive)について説明する。DirectモードならびにDirectモードを使用するB−pictureにおけるSkipモードは、選択率が高く符号化性能を高めるために重要な予測方式である。
しかしながら、MPEG−4 Part10のように、参照フレームの選択や各フレームの符号化手順に自由度を持たせた方式では、図1、2ならびに図12、13の説明で示したように、従来のDirectモードが有効に機能しないフレームやブロックが発生する。
この代用モードは、従来のDirectモードが有効に機能しない場合に切り替えて使用することにより、予測性能の低下を抑制したり、予測効率を高める効果がある。また、従来のDirectモードが参照フレームの動きベクトルを使用するのに対して、この代用モードは現フレームの動きベクトルを利用するため、以降のフレームの符号化/復号処理のために動きベクトルをメモリに蓄積する処理が不必要となり、メモリサイズを削減する効果がある。さらに、代用モードでは、図9に示す動きベクトルのスケーリング処理が必要ないため、復号処理が簡易となる。
この代用モードの予測手順は、図14に示す4パートから構成される。まず、8x8ブロック単位で予測方向をbi−predictive,forward,backwardから選択する(610)。選択には、対象8x8ブロックC81の直上ブロックB83と直左ブロックA82を用いて実施する。次に処理610にて選択した予測モードの実施に必要となる参照フレームの選択を実施する(620)。選択には、対象8x8ブロックC81の直上ブロックB83と直左ブロックA82を用いて実施する。次に4x4ブロック単位で、選択した予測モードと参照フレームに対応する動きベクトルの算出処理を実施する(630)。最後に処理610と620にて選択した予測モードと参照フレームと処理630にて算出した動きベクトルにて4x4予測ブロックを合成する。そして算出した動きベクトルと参照フレームのindexを予測動きベクトル予測用に保存する(640)。
このように、同一フレーム内の周囲ブロックの情報から予測処理に必要とされる各要素データを予測することにより、局所的な特徴に応じた動き予測が可能となり、予測効率が向上する。また、フレーム内の隣接ブロックのデータのみを用いるため、この代用モード実施のために保存するデータ量が削減される。以降に処理の詳細を示す。
図15に処理610の予測方向選択処理手順を示す。まず、対象8x8ブロックの直上ならびに直左の8x8ブロックの何れかがForward MVを持っているか否かをチェックする(611)。次に同様に、対象8x8ブロックの直上ならびに直左の8x8ブロックの何れかがBackward MVを持っているか否かをチェックする(612)。そして、直上または直左の8x8ブロックの何れかがforward MVとbackward MVを持っている場合と、直上と直左の8x8ブロックのいずれもforward MVもbackward MVを持っていない場合には、bi−predictiveを選択する(615)。直上ならびに直左の8x8ブロックがforward MVのみを持っている場合にはforward MV(616)、backward MVのみを持っている場合にはbackward MV(617)を選択する。
この手順によれば、予測効率が最も高いbi−predictive予測が優先的に選択される。また、bi−predictiveを効率良く実施するために必要な情報が周囲ブロックから得られない場合には、周囲から得られる情報に基づいて最適と推測される予測方向が選択できる。さらに、周囲から情報が十分な得られない場合には、他の予測モードに対してDirectモードを選択する効果が高い状態となるように制御することで、予測効率の向上に貢献する。具体的には、以降に説明する図16と図17の処理と組み合わせることにより、index0(現フレームに最も似通ったフレーム)のforward reference,backward referenceを参照フレームとしたゼロ動きベクトルのbi−predictive予測を選択するような手順となっている。
図16に処理620の参照フレーム選択処理手順を示す。この処理は、forwardとbackwardについて個別に実施される。図16は、forward reference picture選択の場合を示しているが、backward reference pictureについても手順は同じである。
まず、対象8x8ブロックの直上ならびに直左の8x8ブロックが何れもforward reference pictureを利用しているか否かをチェックする(621)。何れの8x8ブロックともforward reference pictureを利用していると判定された場合には、2個の8x8ブロックで使用されたforward reference pictureのうちindex番号の小さい方を選択する(623)。処理621にて少なくとも何れかの8x8ブロックがforward reference pictureを利用していないと判定された場合には、次に、対象8x8ブロックの直上または直左の8x8ブロックが何れかがforward reference pictureを利用しているか否かをチェックする(622)。処理622にて、何れかの8x8ブロックがforward reference pictureを利用していると判断された場合には、利用したforward reference pictureを選択する(625)。処理622にて、何れの8x8ブロックもforward reference pictureを利用していない場合には、index0を選択する(624)。
このように、隣接ブロックの符号化に適用されたIndex番号のうち、小さい値を選択するように制御する。これは、参照フレーム候補の設定において、現フレームとの相関が高いフレームに小さいindex番号を与えためである。Index番号の設定方法には、自動的に設定される方法と、符号化時に設定する方法がある。前者では、現フレームに近いフレームから順に小さいindex番号が与えられる。後者は、例えばシーンチェンジ時などに適用され、以前に符号化した過去の同じカメラアングルのフレームに小さいindex番号を割り当てる。このように、小さいindex番号を選択することにより、処理対象のフレームに近い画像を選択する可能性が高くなる。
図17に処理630の動きベクトル算出処理手順を説明する。この処理は、4x4ブロック単位で、forward,backwardについて個別に実施する。
まず、直上または直左の4x4ブロックの何れかが画像の外に位置しているか否かをチェックする(631)。処理631にて、何れかの4x4ブロックが画像の外に位置していると判定される場合には、4x4ブロックの動きベクトルをゼロベクトルとする(625)。処理631にて何れの4x4ブロックも画像内に位置していると判定される場合には、次に、直上または直左の4x4ブロックの何れかが処理620にて選択した参照フレームへの利用可能な動きベクトルを持っているか否かをチェックする(632)。処理632にて何れの4x4ブロックも選択した参照フレームへの利用可能な動きベクトルを持っていないと判定される場合には、4x4ブロックの動きベクトルをゼロベクトルとする(625)。処理632にて何れかの4x4ブロックが選択した参照フレームへの利用可能な動きベクトルを持っていると判定される場合には、直上または直左の4x4ブロックが有する何れかの動きベクトルが、処理620にて選択した参照フレームへのゼロベクトルであるか否かをチェックする(633)。処理633にて何れかの4x4ブロックの動きベクトルが参照フレームへのゼロベクトルと判定された場合には、4x4ブロックの動きベクトルをゼロベクトルとする(625)。処理633にて何れの4x4ブロックの動きベクトルも参照フレームへのゼロベクトルではないと判定された場合には、4x4ブロックに対する中間値予測により動きベクトルを算出する。このように、ゼロベクトルを優先的に選択するのは、Directモードが背景部分で特に効果が高いことに対応するためである。
本発明には次のような変形も含まれる。
(1)本実施例では、代用モードの使用を図12のようにcollocated blockの状況によって決定しているが、directモードを代用モードに完全に切り換えることも考えられる。この方法では、処理301にてフレーム単位あるいはスライス単位(詳細は変形例(4)に記載)でdirectモードと代用モードの切り替えを制御する。これにより、選択候補が増え、特殊効果を施したシーンへの適用性が向上するため、予測効率も向上する。但し、参照フレームと現フレーム図9の動きベクトルの算出を外挿処理にて行う可能性が生じるため、演算処理量に強い制約がある条件では図12、13に示すように2方式の切り替え制御を実施する方法が有効である。
(2)図14〜17については、予測方向、参照フレーム、動きベクトルを周囲のブロックから生成するという全体処理が一致していれば細かい条件については限定されない。例えば、処理631にて「直上または直左の4x4ブロックの何れか」という記述を「直上ならびに直左の4x4ブロックの両者が」に変更した方法も本願に含まれる。また、モード選択時に利用するブロックを2個から3個(予測ベクトルの作成に使用する)に変えた方法も本願に含まれる。このモード選択時に利用するブロックを2個から3個に変える方法は、動きベクトル推定との整合性が良く、予測効率の向上にもつながるため、演算処理量に強い制約がない条件では有効である。
(3)図1、2ならびに図12、13ではcollocated blockが現フレームに対して前方向のforward MVを持っていれば、そのforward MVに対するforward reference pictureのindex番号に関わらずdirectモードを適用する方法について示してきた。しかしながら、directモードは、forward MVに対するforward reference pictureが現フレームから離れると効果が低くなる傾向がある。そこで、forward MVに対するforward reference pictureのindex番号が0の場合のみdirectモードを適応する方法も有効と考えられる。図24と図25にてその方法を説明する。図24にピクチャレイヤのデータシンタックスを示す。
picture_layer()
{
picture_structure
frame_number
reference_picture_selection_layer()
if(coding_type() == B-picture){
direct_reference_usable
if(direct_reference_usable){
direct_mv_scale_bwd
direct_mv_scale_fwd
}
for(index=0; index<number of forward reference; index++){
picture_distance_fwd_dir[index]
picture_distance_fwd[index]
}
for(index=0; index<number of backward reference; index++){
picture_distance_bwd_dir[index]
picture_distance_bwd[index]
}
}
}
ピクチャタイプがB−pictureの場合について説明する。direct_reference_usable23は、directモード用に指定される後方参照フレームが現フレームよりも未来に位置しているおり、かつdirectモード用に指定される前方参照フレームが現フレームよりも過去に位置しているかを示す情報である。directモード用に指定される後方参照フレームは、通常、index0に割り当てられたbackward reference pictureであるが、この情報にて、index0のbackward reference pictureがdirectモードに使用できるか否かが明確に判断できる。
また、directモード用に指定される前方参照フレームは、通常、index0に割り当てられたforward reference pictureであるが、この情報にて、index0のforward reference pictureがdirectモードに使用できるか否かが明確に判断できる。このデータ23が0、すなわちindex0のbackward reference pictureがcurrent pictureに対して前方向(過去方向)に位置しているが、あるいはindex0のforward reference pictureがcurrent pictureに対して後方向(未来方向)に位置しているピクチャについては、directモードが実施できないため、directモードの適用のために必要とされるピクチャ間隔情報は符号化/復号化する必要はない。従って、この場合には、current pictureとindex0のforward reference pictureの時間間隔を示すdirect_mv_scale_fwd2427とcurrent pictureとindex0のbackward reference pictureの時間間隔を示すdirect_mv_scale_bwd2429の符号化/復号化は省略される。データ26〜29は図10に示すbi−predictiveの動きベクトル符号化に用いるデータである。利用方法については、図2のところで説明したため、ここでは割愛する。
なお、direct_reference_usable23は、directモード用に指定される後方参照フレームが現フレームよりも未来に位置しているか否かだけを示す情報とし、direct_mv_scale_fwdの位置を示す情報(direct_mv_scale_fwd_dir)をデータ2427の前に符号化/復号化する方法も考えられる。図9でforward reference pictureが、current pictureよりも後方にある状態のときには、2つの動きベクトル122と121は、外挿計算にてより算出される。
図25の場合について、directモードの扱いについて説明する。図12、13の説明で示したように、図18のmb_skip_run11とmb_type12の選択候補にdirectモードが選択された場合でも、複数参照フレーム機能や2参照フレームの機能を適用する方式では、directモードが適用できないケースが考えられる。そこで、本発明では条件に応じて予測方法を切り換える手順を用いる。その手順を図25に示す。
最初に、ピクチャヘッダ内のdirect_reference_usable23にて、current pictureにdirectモードが使用可能か否かをチェックする(306)。処理306にて使用不可、すなわちindex0のforward referenceがcurrent pictureに対して時間的に未来に位置しているかあるいはindex0のbackward referenceがcurrent pictureに対して時間的に過去に位置していると判定された場合には、collocated blockのforward MVを必要としない代用モードにて予測マクロブロックを作成する(304)。処理306にて使用可能と判定された場合には、8x8ブロック毎に予測方法の判定を行う。
ここで8x8ブロックとしたのは、図7のブロック分割方法では、参照フレームと予測方向選択の最小単位が8x8ブロックとされているためである。具体的には、8x8ブロックに対応するcollocated blockにForward MVを持つ予測モードが適用されているか否かをチェックする(307)。そして、適用されていると判定された場合には、directモードにて予測ブロックを作成し(303)、適用されていないと判定された場合には、代用モードにて予測ブロックを作成する(304)。処理307では、collocated 8x8 blockについて、予測モードがintraモードの場合、予測方向がbackward predictionの場合、あるいはforward reference pictureがcurrent pictureのforward reference picture setに含まれるindex0のreference pictureでない場合に、directモード使用不可と判定する。
なお、図12の場合と同様に、処理307のdirectモードの使用可否判定をマクロブロック単位で実施することも可能である。但し、この場合には、マクロブロック内のすべての予測ブロック、図7のブロック分割方法の場合には4個の8x8ブロックのすべてが、directモード使用可能の状態である場合にのみ、directモード使用可能と判定される。
なお、図24の説明で示したように、direct_reference_usable23がindex0のforward referenceがcurrent pictureに対して時間的に未来に位置しているか否かという条件のみを示している場合も考えられる。この場合には、図9のdirectモード予測にて図24の説明で示した外挿計算による動きベクトルの算出が実施される可能性がある。
さらに、上記変形例(1)で示したように、direct_reference_usable23にて、directモードの使用判定条件のみを示している場合も考えられる。この場合も、directモードの使用が指定されており、かつforward referenceが時間的に未来に位置しているか、あるいはbackward referenceが時間的に未来に位置している場合には、図9のdirectモード予測に用いる動きベクトルは外挿計算にて算出する。
(4)図1、2ならびに図24では、ピクチャヘッダのデータ構造に限定して説明しているが、複数のマクロブロックをまとめたグループであるスライスレイヤのヘッダ部にこれらの情報が記載される場合にも本発明のデータ構造は適用できる。
圧縮データをスライス単位でデータパケット化して伝送する方式では、スライスレイヤのヘッダ部の情報でデータの復号手順を決める。そのため、復号化手順に関連する本発明の情報はスライスヘッダ部に必要となる。1つのスライスにどのマクロブロックが属するかを示す情報は、上位の通信・ネットワーク関連情報を司る通信パケットヘッダやファイルフォーマットのヘッダ部にて示される場合や、データ全体の構成を決めるシーケンスヘッダに示される場合などがある。このスライス単位でDirectモードと代用モードを切り替える方法は、フレーム単位で切り替える方法に比較して、選択の自由度が向上し、予測効率が向上する。但し、予測効率向上のためには、スライス単位での選択制御が必要となるため、演算量が増大する。したがって、リアルタイム処理を必要とするアプリケーションでは、フレーム構造によるフレーム単位での切り替え制御が有効と言える。
ここまで説明した本発明の方式は、専用回路・専用チップを用いる画像符号化装置・画像復号化装置や、汎用プロセッサを用いるソフトウェア画像符号化装置・ソフトウェア画像復号化装置に適用できる。
図28に組み込み型のソフトウェア符号器・復号器の例として、アプリケーションプロセッサを用いた携帯端末の例を示す。主に無線通信処理を行うホスト部2820、カメラからの入力信号を処理するカメラ入力処理部2830、映像符号化/復号化などのアプリケーション処理を実施するアプリケーションプロセッサ部2800、表示データを処理する出力デバイス2840にて構成されている。符号化時には、カメラにて撮影された画像は、まず、カメラ入力処理部2830にて図3に示すようなYUV信号に変換され、アプリケーションプロセッサ部2800に入力される。
アプリケーションプロセッサ部2800は、入力画像を図1(または図2または図24)と図18に示すようなストリームデータに符号化する。組み込み型の場合には、汎用プロセッサ2810内の処理部2811にて符号化処理(図14〜17のフローチャートに示す動作を含む)を実施するためのソフトウェア(アセンブラコード)は、内部RAM2812または外部RAM2830に予め格納されている。また、図14〜17のフローチャートに示されるような予測処理に利用されるデータ(複数の参照ピクチャや各マクロブロックの参照ピクチャ番号、予測方向、動きベクトル)も、予め格納する領域が内部RAM2812または外部RAM2830に確保されている。アセンブラコードや各データの格納領域配置は、プロセッサ能力、バス速度、アセンブラコードや各データへの推定アクセス頻度とそれらの容量のバランスで設計される。通常、内部RAMは外部RAMよりもアクセス速度が速く、外部RAMは内部RAMよりも搭載容量が多い。従って、アクセス頻度が高く、容量が少ないデータ格納領域やアセンブラコードを内部RAMに配置する。この際、アセンブラコードは内部RAMと外部RAMに分割されて配置される場合もある。
符号化されたビットストリームデータは、外部RAM2830あるいはホスト部2820内のメモリに保存される。何れに保存されるかは、符号化ビットストリームデータの用途など、携帯端末向けのサービスにより異なる。復号時には、ホスト部2820あるいは外部RAM2830からアプリケーションプロセッサ部2800に符号化ビットストリームデータが供給される。アプリケーションプロセッサ部2800は、入力された符号化ビットストリームデータを復号し、YUV再生画像をRGB画像に変換したのち出力デバイス2840に出力する。この際、YUV再生画像は一旦外部RAMあるいは内部RAM内のフレームメモリに蓄積される場合もある。
符号化処理の場合と同様に、復号処理においても、汎用プロセッサ2810内の処理部2811にて復号処理(図14〜17のフローチャートに示す動作を含む)を実施するためのソフトウェア(アセンブラコード)は、内部RAM2812または外部RAM2830に予め格納されている。また、図14〜17のフローチャートに示されるような予測処理に利用されるデータ(複数の参照ピクチャや各マクロブロックの参照ピクチャ番号、予測方向、動きベクトル)も、予め格納する領域が内部RAM2812または外部RAM2830に確保されている。
図29には、より汎用的な用途で用いられるソフトウェア符号器・復号器の例を示す。 符号化時には、入力画像はフレームメモリ2950に蓄えられ、汎用プロセッサ2900はここから情報を読み込んで符号化処理を行う。この汎用プロセッサを駆動するためのプログラム(図14〜17のフローチャートに示す動作を含む)はハードディスクやフロッピー(登録商標)ディスクなどによる蓄積デバイス2930から読み出されてプログラム用メモリ2920に蓄えられている。汎用プロセッサが出力する符号化情報は一旦入出力バッファ2940に蓄えられた後、符号化ビットストリームとして出力される。
処理メモリ2910には、図14〜17のフローチャートに示されるような予測処理に利用されるデータ(複数の参照ピクチャや各マクロブロックの参照ピクチャ番号、予測方向、動きベクトル)が蓄積されており、プログラムの処理に従って汎用プロセッサにて読み込まれる。また、汎用プロセッサは、プログラムの処理に従ってデータを処理メモリに蓄積する。
復号時には、入力された符号化ビットストリームは一旦入出力バッファ2940に蓄えられ、汎用プロセッサ2900はここから読み込んで復号する。この汎用プロセッサを駆動するためのプログラム(図14〜17のフローチャートに示す動作を含む)は、ハードディスクやフロッピー(登録商標)ディスクなどによる蓄積デバイス2930から読み出されてプログラム用メモリ2920に蓄えられている。復号された再生画像は一旦フレームメモリ2950に蓄えられた後、出力処理を実施するデバイスに出力される。処理メモリ2910には、図14〜17のフローチャートに示されるような予測処理に利用されるデータ(複数の参照ピクチャや各マクロブロックの参照ピクチャ番号、予測方向、動きベクトル)が蓄積されており、プログラムの処理に従って汎用プロセッサにて読み込まれる。また、汎用プロセッサは、プログラムの処理に従って生成されたデータを処理メモリに蓄積する。
専用回路・専用チップを用いる画像符号化装置の構成を図22に示す。1個のマクロブロック処理の符号化処理について、処理の流れを説明する。まず、入力マクロブロック画像201とフレームメモリ210に蓄積されている符号化済みフレームの復号画像(参照フレーム)間の動き補償処理が全てのマクロブロックタイプ(8x8 Partitionタイプ)と候補参照フレームの組み合わせについて、動き補償器211にて行われ、最適なマクロブロックタイプと8x8 Partitionタイプが選択される。この際、Directモードの動き補償を行う場合には、MV予測器215から予測方向、参照フレーム番号、動きベクトル情報を取得する必要がある。
図26にMV予測器の内部構造を示す。Directモードを示すマクロブロックタイプ(8x8 Partitionタイプ)、マクロブロック位置情報(ブロック位置情報)ならびにdirectモードのタイプ(direct/alternative、動き補償器にて制御、alternative予測は図14〜図17に示す代用モード)が入力されるとスイッチャ2620を通してスイッチャ2630が起動される。スイッチャ2630は、directモードのタイプにしたがってスイッチを切り替える。
directモードのタイプがdirect予測の場合には、動きベクトル計算部2660が起動される。動きベクトル計算部2660は内部メモリ2610に保存されている情報を用いて、図9に示す予測パラメータを算出する。算出されたパラメータは、内部メモリに保存されるとともに動き補償器に通知される。
directモードのタイプがalternative予測の場合には、alternative予測部2640が起動される。alternative予測部は、図14に示す処理を実施する。具体的には、予測モード選択部2641,参照フレーム選択部2642,動きベクトル選択部2643が、内部メモリ2610に保存されている情報を用いて、ぞれぞれ、図15、図16、図17のフローチャートに示す処理を実施し、予測方向、参照フレーム番号ならびに動きベクトルを算出する。これらの予測パラメータは内部メモリに保存されるとともに動き補償器に通知される。
動き補償器の説明に戻る。最適なマクロブロックタイプ選択後、検出された動きベクトルは、マクロブロックタイプ、予測方向情報(forward/backward/bi−predictive)、参照フレーム番号と共にMV予測器215に通知され、内部メモリ2610の内容が更新される(directモードが選択された場合には、マクロブロックタイプあるいは8x8 Partitionタイプのみ)。
マクロブロックタイプならびに8x8 Partitionタイプがdirectでないブロックについては、動きベクトル予測部2650(スイッチャ2620にて起動)にて図8に示す予測処理を実施し、差分動きベクトルを算出する。算出された差分動きベクトルは、マクロブロックタイプ、8x8 Partitionタイプならびに参照フレーム番号と共に多重化器206に出力される(directモードが選択された場合には、差分動きベクトルと参照フレーム番号は多重化されない)。
なお、ここでは、差分動きベクトルの算出を最適なマクロブロックタイプ(8x8 Partitionタイプ)についてのみについて行うものとしているが、差分動きベクトルの値やその符号量を最適マクロブロックタイプ(8x8 Partitionタイプ)選択時の評価値として利用する場合も考えられる。この場合には、それぞれのマクロブロックタイプ(8x8 Partitionタイプ)や参照フレームの組み合わせについて、MV予測器にて差分動きベクトルを算出する。
動き補償により生成された参照フレームから抜き出された予測マクロブロック画像213は、Intra/Inter判定処理部214に入力される。Intra/Inter判定部では、イントラモードとインターモードのいずれを最終的なマクロブロックタイプとするかを決定し、判定情報218を多重化器206ならびにMV予測器215に通知する。MV予測器215は、判定情報218がイントラモードの場合、内部メモリ内の保存データを更新する。
多重化器は、イントラ/インターモード判定結果と、MV予測器から得られたインターモードのマクロブロックタイプ、8x8 Partitionタイプ、参照フレーム番号ならびに差分動きベクトル(directモードが選択された場合には、差分動きベクトルと参照フレーム番号はなし)から図18に示す符号を生成し、符号化ビットストリームに多重化する。
Intra/Inter判定部にて選択されたマクロブロックタイプがインターモードの場合には、予測マクロブロック画像は、現フレームの入力マクロブロック画像201との間で差分器202にて差分処理され、差分マクロブロック画像が生成される。この際、同時に、予測マクロブロック画像は加算器209に出力される。Intra/Inter判定部にて選択されたマクロブロックタイプがイントラモードの場合には、差分器202ならびに加算器209には予測マクロブロックは出力されない。
差分器202から出力される差分マクロブロック画像あるいは入力マクロブロック画像は、まず、DCT変換される。DCTのブロックサイズは従来の符号化方式では8×8画素が一般的であるが、最近では、MPEG−4 Part10(Advanced Video Coding)などで4x4画素サイズによるDCT変換も検討されているため、ここでは、4×4DCTを例に説明する。差分マクロブロック画像は、図6に示すように、24個の4x4画素ブロックに分割され、DCT変換器203にてそれぞれ16個のDCT係数に変換される。各DCT係数は、量子化器204にて量子化され、多重化器206にて符号化される。
多重化器206では、図1、図2あるいは図24に示すようなヘッダ情報と共に図18に示すようなマクロブロックデータ情報を多重化し、符号化ビットストリームを生成する。量子化DCT係数は、局部復号器220の逆量子化器207と逆DCT器208にて、差分マクロブロック画像あるいはマクロブロック画像に復号される。そのマクロブロックの予測モードがインターモードの場合には、差分マクロブロック画像が加算器209にて予測マクロブロック画像と加算した後、フレームメモリ201に合成される。そのマクロブロックがイントラモードの場合には、復元されたマクロブロック画像がフレームメモリ201に合成される。
図22のイントラモードではイントラ予測を実施していないが、イントラ予測を実施する符号化方式でも、本発明は適用できる。この場合、Intra/Inter判定部にてイントラ予測を実施してもよいが、この処理を動き補償部に組み込む場合も考えられる。特にMPEG−4 Part10(Advanced Video Coding)のように複数のイントラ予測タイプを準備している符号化方式では、インター予測タイプと同列にイントラ予測タイプを扱えるため、装置構成が簡易となる。この場合には、動き補償部211から常に差分予測マクロブロック画像213が差分器202と加算器209に供給される。また、マクロブロックタイプ情報に判定情報218が含まれているため、判定情報218は削除でき、判定情報218の入力に伴うMV予測部215での内部メモリ更新処理も省略される。また、DCT係数レベルでイントラ予測を行う場合も考えられる。この場合は、DCT変換部203ならびにIDCT変換部208に予測処理を組み込むことで対応できる。
専用回路・専用チップを用いる画像復号装置の構成を図23に示す。1個のマクロブロック処理の復号処理について、処理の流れを説明する。まず、符号化解読器501にて、入力された符号化データを解析し、動きベクトル関連情報とマクロブロックタイプ情報をMV予測器508に、量子化DCT係数情報を逆量子化器502に振り分ける。
マクロブロックの予測モードがインターモードの場合には、MV予測器508に、ブロック位置情報、マクロブロックタイプ、8x8 Partitionタイプ、予測方向情報、参照フレーム番号ならびに差分動きベクトルが入力される(マクロブロックタイプがdirectモードの場合には、マクロブロックタイプとマクロブロック位置情報のみが入力される。また、8x8 Partitionタイプがdirectのときは、その8x8ブロックについては、参照フレーム番号ならびに差分動きベクトルは入力されない)。
図27にMV予測器の内部構造を示す。マクロブロックタイプあるいは8x8 Partitionタイプがdirectのときには、マクロブロック位置情報あるいはブロック位置情報と共に符号化解読器501で復号されたスライスヘッダ情報内のdirectモードのタイプ(direct/alternative、動き補償器にて制御)が入力される。マクロブロック位置情報(ブロック位置情報)ならびにdirectモードのタイプ(direct/alternative、動き補償器にて制御)が入力されるとスイッチャ2620を通してスイッチャ2630が起動される。スイッチャ2630は、directモードのタイプにしたがってスイッチを切り替える。
directモードのタイプがdirect予測の場合には、動きベクトル計算部2660が起動される。動きベクトル計算部2660は内部メモリ2710に保存されている情報を用いて、図9に示す予測パラメータを算出する。算出されたパラメータは、内部メモリに保存されるとともに動き補償器504に通知される。
directモードのタイプがalternative予測の場合には、alternative予測部2640が起動される。alternative予測部は、図14に示す処理を実施する。具体的には、予測モード選択部2641,参照フレーム選択部2642,動きベクトル選択部2643が、内部メモリ2710に保存されている情報を用いて、ぞれぞれ、図15、図16、図17のフローチャートに示す処理を実施し、予測方向、参照フレーム番号ならびに動きベクトルを算出する。これらの予測パラメータは内部メモリ2710に保存されるとともに動き補償器504に出力される。
マクロブロックタイプ(8x8 Partitionタイプ)がdirectでない時には、マクロブロックタイプ(8x8 Partitionタイプ)と共に、マクロブロック位置情報(ブロック位置情報)、参照フレーム番号ならびに差分動きベクトルが入力され、スイッチャ2620により動きベクトル予測器2750が起動される。
動きベクトル予測部2750では、内部メモリ2710の内容と入力データを用いて図8に示す予測処理を実施し、動きベクトルを復元する。復元された動きベクトルは、予測方向情報、参照フレーム番号と共に内部メモリ2710と動き補償器504に出力される。動き補償器504では、入力されたデータとフレームメモリ507内の参照ピクチャを用いて予測マクロブロック画像を生成する。
次に、予測誤差信号に関する符号化データを、逆量子化器502と逆DCT器503において、4×4画素ブロック毎に、逆量子化・逆DCT処理し、差分マクロブロック画像を再生する。そして、予測マクロブロック画像と差分マクロブロック画像を加算器505にて加算処理し、マクロブロック画像を再生する。再生されたマクロブロック画像は、合成器506にて復号フレーム画像に合成される。また、復号フレーム画像は、次フレームの予測用にフレームメモリ507に蓄積される。
マクロブロックタイプがイントラモードであった場合には、復号した量子化DCT係数情報を、逆量子化器502と逆DCT器503において、4×4画素ブロック毎に逆量子化・逆DCT処理し、マクロブロック画像を再生する。この際、図27の内部メモリ2710の内容は、イントラモードとして更新される。この図では、イントラ予測は実施されないが、MPEG−4 Part10(Advanced Video Coding)のように複数のイントラ予測タイプを準備している符号化方式でも、本発明は適用できる。この場合には、動き補償部504がイントラ予測の機能を含まれ、動き補償部からは常に予測マクロブロック画像が出力される。
図28や図29に示すソフトウェア符号化器(図14〜図17)ならびに図22と図26の符号化装置により生成される符号化ビットストリームを記録した蓄積メディア(記録媒体)の例を図30に示す。
デジタル情報を記録することができる記録ディスク(磁気ディスクや光ディスク)3000には、同心円上にデジタル情報が記録されている。このディスクに記録されているデジタル情報の一部3001を取り出すと、directモードと代用モードの選択情報(direct_reference_usable)3011を含むスライスヘッダ情報3010、SKIPモード情報(mb_skip_run)3021、3031、3041、3051、マクロブロックタイプ情報(mb_type,8x8 partition)3022、3032、3052、参照フレームの番号と動きベクトルの情報(ref_index_few,ref_index_bwd,mvd_fwd,mvd_bwd)3023、3053、DCT係数ならびに符号化ブロックパターン情報(CBP,residual())3024、3054が記録されている。以下、スライスヘッダにて、フレームタイプがB−picture、directモードが代用モードとされた場合について、データの構成を説明する。3021〜3024ならびに3051〜3054は、マクロブロックタイプがDirectではないマクロブロックの符号化データを示している。なお、8x8 Partitionにdirectが含まれる場合もこのデータ構成となる。但し、この場合、8x8 Partition typeがdirectとなる8x8ブロックに関する参照フレームの番号と動きベクトルの情報は符号化されないため、これらの情報は3023や3053には含まれず、復号時には、ソフトウェア復号器では図14〜図17、専用復号装置では図27の処理2640にて、予測方向、参照フレーム番号ならびに動きベクトルが算出される。
3031、3032、3035の組み合わせはマクロブロックタイプがdirectとなるマクロブロックの符号化データを示している。この場合には、参照フレームの番号と動きベクトルの情報は符号化されない。
復号時には、ソフトウェア復号器では図14〜図17、専用復号装置では図27の処理2640にて、予測方向、参照フレーム番号ならびに動きベクトルが算出される。3041は、スキップマクロブロックの例であり、マクロブロックタイプがdirectであり、DCT係数情報は存在しない。
復号時には、ソフトウェア復号器では図14〜図17、専用復号装置では図27の処理2640にて、予測方向、参照フレーム番号ならびに動きベクトルが算出され、これらのデータにて合成された予測マクロブロック画像がそのまま再生マクロブロック画像となる。このように、蓄積メディアにマクロブロックタイプとしてdirectモードを示す符号を効率良く埋め込むことにより、少ない情報で再生マクロブロック画像を合成することが可能となる。
図31に、本発明の符号化方法・復号方法を実現する装置の具体例を示す。記録媒体である光ディクス3101(DVD−ROM、DVD−R、BD−ROM:Blu−ray Disc ROM、CD−ROM/CD−Rなど)に記録した符号化ビットストリームを読み取り、復号化する再生装置3102にも本発明の復号化方法を実装することが可能である。この場合、再生された映像信号はテレビモニタ3103に表示される。
アンテナ3111から受信した地上デジタル放送あるいは衛星デジタル放送を符号化し、光ディスク3113(DVD−RAM、DVD−RW、BD−RAM、CD−RWなど)に符号化ビットストリームを記録する記録/再生装置3112にも本発明の符号化方法を実装することが可能である。また、光ディスク3113に記録した符号化ビットストリームを復号化する記録/再生装置3112にて、本発明の復号化方法も実装することが可能である。この場合、再生された映像信号はテレビモニタ3114に表示される。
パソコン3121に本発明の画像符号化方法・復号化方法用のソフトウェアを組み込むことにより、画像符号化・復号化装置として活用することが可能である。このソフトウェアはコンピュータ読み取り可能な記録媒体である何らかの蓄積メディア(光ディスク、フロッピー(登録商標)ディスク、ハードディスクなど)3122に記録されており、これをパソコンが読み込んで使用する。また、さらに何らかの通信回線にこのパソコンを接続することにより、映像通信端末として活用することも可能となる。
ケーブルテレビ用のケーブル3131または衛星デジタル放送あるいは地上デジタル放送のアンテナに接続されたセットトップボックス3132内の復号装置にも本発明の復号方法を実装することが可能であり、デジタル放送をテレビモニタ3133で再生する構成も考えられる。セットトップボックスではなく、テレビモニタ内に本発明の復号方法を含む復号装置を組み込んでも良い。
デジタル携帯端末3141にも本発明の符号化方法・復号方法を含む装置あるいはソフトウェア符号化器・復号器が実装可能である。実装形式としては、符号方法・復号方法を両方持つ送受信型の端末の他に、符号化のみの送信端末、復号化のみの受信端末の3通りの実装形式が考えられる。
動画像撮影用のカメラ3151の中に本発明の符号化装置・復号装置を組み込むことも可能である。この場合撮影用カメラは符号化装置と該符号化装置からの出力を記録媒体に記録する記録装置とを持ち、符号化装置から出力された符号化ビットストリームを記録媒体に記録する。記録媒体は光ディクスの場合もある。尚、上記携帯端末にカメラがついている場合は撮像したものを符号化してアンテナを介して送出するようにすることもできる。
カメラ入力を持つTV会議システム3161の中に本発明の符号化装置・復号装置を組み込むことも可能である。カメラから入力された映像は符号化装置にて符号化ビットストリームに符号化され、ネットワーク3162に配信される。ネットワークから受信した符号化ビットストリームは復号装置にて復号され、モニタに表示される。この場合、本発明の符号化方法ならびに復号方法を実現する手段は、符号化装置・復号装置ではなく、ソフトウェア符号化器・復号器の場合もある。
これらの装置に本発明の符号化方法ならびに復号方法を組み込むことにより、directモードとその代用モードを有効的に利用することが可能となり、予測性能が向上する。
本発明のヘッダ情報によりdirectモードに使用できるか否かが明確に判断できるようになる。さらに、フレーム番号が時刻情報を持たない場合において、参照フレームと現フレーム間の関係を示す情報を効率良く送ることが可能となる。また、本発明の代用モードとその切り換え手順により、directモードが適用できない場合の予測性能を向上させることが可能となる。