(58)【調査した分野】(Int.Cl.,DB名)
前記縮小部は、前記設定方向と垂直な第1の直線及び第2の直線を前記設定方向に沿って交互に設定し、前記第1の直線に沿って前記画素を1画素おきに間引き、前記第2の直線の前記画素を間引いて前記縮小画像を生成すること、を特徴とする請求項1に記載の符号化回路。
前記統計処理部は、前記処理対象のフレーム画像において検出した動きベクトルと、前記処理対象のフレーム画像に対する後方の参照フレームにおいて検出した動きベクトルとを統計処理すること、を特徴とする請求項3に記載の符号化回路。
前記統計処理部は、処理対象のフレーム画像において、処理対象のマクロブロックに隣接するマクロブロックの動きベクトルと、前記参照フレームにおいて前記処理対象のマクロブロックと空間的に同一位置のマクロブロックを含む参照領域内のマクロブロックの動きベクトルとを統計処理すること、を特徴とする請求項1または2に記載の符号化回路。
前記第1の動き探索部は、前記統計処理部の処理結果として得られる統計動きベクトルにおける、第1の配列方向の成分と、前記第1の配列方向と直交する第2の配列方向の成分の比に応じて、前記複数パターンの縮小画像のうちの1つの縮小画像を選択すること、を特徴とする請求項1〜5のいずれか一項に記載の符号化回路。
【発明を実施するための形態】
【0008】
以下、一実施形態を説明する。
先ず、符号化装置の概略を説明する。
図1に示す符号化装置10は、たとえばMPEG2の規格にしたがって、入力画像11を符号化した符号化信号12を生成する符号化回路である。
【0009】
マクロブロック分割部(MB分割部)21は、入力画像11を処理単位で分割した画像(マクロブロック(MB))を、減算器22と動きベクトル検出部32に出力する。
減算器22は、マクロブックと、予測モード選択部34から出力される予測画像との差分値を算出し、その差分値を出力する。直交変換量子化部23は、上記差分値を直交変換した後に、量子化を行い、量子化したデータを出力する。直交変換は、たとえば離散コサイン変換(DCT:Discrete Cosine Transform)である。エントロピー符号化部24は、直交変換量子化部23により量子化されたデータを可変長符号化変換し、符号化信号12を出力する。
【0010】
逆量子化逆直交変換部25は、直交変換量子化部23により量子化されたデータを逆量子化した後、逆直交変換を行い、処理後のデータを出力する。逆直交変換は、たとえば逆離散コサイン変換(IDCT:Inverse DCT)である。加算器26は、逆量子化逆直交変換部25の出力データに、予測モード選択部34から出力される予測画像を加算して参照画像を生成する。この参照画像は、現フレームバッファ27に保持される。
【0011】
フレーム内予測部28は、現フレームバッファ27に保持された参照画像を入力し、隣接ブロックからの画素レベルに基づいて、参照画像のフレーム内予測を行う。デブロッキングフィルタ29は、現フレームバッファ27に保持された参照画像を入力し、隣接する2つのマクロブロックの境界を平滑化して出力する。これにより、デブロッキングフィルタ29は、画像を符号化した際に生じるブロック歪を減少させる。フレームバッファ管理部30は、デブロッキングフィルタ29の出力データをフレームバッファ31に出力し、フレームバッファ31はその出力データを記憶する。
【0012】
動きベクトル検出部32は、MB分割部21から入力されたマクロブロック(MB)と、過去のフレームバッファ31に格納された参照画像とを用いて、対象マクロブロックの動きベクトル(MV:Motion Vector)を検出する。動きベクトル(MV)は、通常、周辺領域との相関が高い。フレーム間予測部33は、周辺領域の動きベクトル(MV)に基づいて動きベクトル予測値(MVP:Motion Vector Predictor)を算出する。さらに、フレーム間予測部33は、動きベクトル(MV)と動きベクトル予測値(MVP)との間の予測差分値(MVD:Motion Vector Difference )を算出する。上記のエントロピー符号化部24は、この予測差分値(MVD)を含む符号化信号12を出力する。復号化装置(図示略)において、予測差分値(MVD)により動きベクトル(MV)を算出し、復号化した出力画像を生成する。
【0013】
予測モード選択部34は、フレーム間予測部33とフレーム内予測部28の予測誤差を比較し、当該マクロブロックを最も効率よく符号化することができる符号化モードを選択し、符号化モード情報を生成する。この符号化モード情報は、符号化対象情報として、エントロピー符号化部24へ受け渡される。符号化モード情報には、マクロブロックを分割した分割マクロブロックのサイズと、分割マクロブロックをさらに分割したサブマクロブロックのサイズが含まれる。
【0014】
図2に示すように、動きベクトル検出部32は、縮小部41、統計処理部42、動き探索部43,44を有している。
縮小部41は、マクロブロック(MB)を所定の縮小率で縮小した縮小マクロブロック(SMB)を生成する。縮小部41は、たとえば、マクロブロック(MB)の画素を間引くことにより縮小マクロブロックSMBを生成する。縮小率は、たとえば水平方向と垂直方向にそれぞれ2分の1(1/2)である。そして、縮小部41は、パターンが異なる複数の縮小マクロブロックSMBを生成する。
【0015】
複数のパターンは、マクロブロックMBの動きベクトルMVに基づいて設定される。たとえば、パターンは、動きベクトルMVに応じて設定されたラインに沿って画素を間引くように設定される。縮小部41は、複数のパターンに応じて画素を間引いて複数の縮小マクロブロックSMBを生成する。縮小マクロブロックSMBのパターン(間引く画素の位置)については後述する。このように生成された縮小マクロブロックSMBは、動きベクトルの方向に応じた画素を含む。縮小部41は、生成した複数の縮小マクロブロックSMBをメモリ50の縮小フレームバッファ51に格納する。
【0016】
縮小部41は、フレーム画像を処理単位に分割したマクロブロック(MB)を順次縮小処理し、縮小マクロブロックSMBを縮小フレームバッファ51に格納する。したがって、縮小フレームバッファ51には、各フレーム画像の縮小画像が格納される。つまり、原処理画像において、対象マクロブロックCuの縮小マクロブロックと、対象マクロブロックCuよりも過去に処理されたマクロブロック(MB)の縮小マクロブロックとが格納される。また、縮小フレームバッファ51には、原処理画像と異なる時間に撮影され、原処理画像よりも前(過去)に処理された参照フレームの縮小画像が格納される。参照フレームは、原処理画像よりも前(過去)に撮影された前方参照フレームと、原処理画像よりも後(未来)に撮影された後方参照フレームを含む。
【0017】
メモリ50には記憶領域として、上記の縮小フレームバッファ51と、対象マクロブロックバッファ52と、動きベクトルバッファ53が設定される。また、メモリ50には、
図1に示す現フレームバッファ27、過去のフレームバッファ31等の記憶領域が設定される。メモリ50は、たとえばSDRAM(Synchronous Dynamic Random Access Memory)等のメモリモジュールとすることができる。このようなメモリモジュールは、たとえば、符号化装置10の各機能部を含む半導体装置(LSI)に接続される。
【0018】
統計処理部42は、縮小部41にて作成された複数パターンの縮小画像のうちの1つの縮小画像を選択するためのパターン選択情報を生成する。たとえば、統計処理部42は、処理対象のマクロブロック(MB)の位置情報に基づいて、過去の動きベクトルをメモリ50の動きベクトルバッファ53から読み出し、該動きベクトルに基づいてパターン選択情報を生成する。パターン選択情報は、たとえば動きベクトルを統計処理した統計動きベクトルMVSである。
【0019】
たとえば、統計処理部42は、現処理画像において、処理対象のマクロブロック(MB)に隣接するマクロブロックの動きベクトルを動きベクトルバッファ53から読み出す。そして、統計処理部42は、読み出した動きベクトルを統計処理し、パターン選択情報を生成する。統計処理は、たとえば平均値を算出する処理である。たとえば、統計処理部42は、現処理画像で既に生成した動きベクトルの平均値を算出し、この平均値をパターン選択情報(統計動きベクトルMVS)とする。
【0020】
また、統計処理部42は、現処理画像に対して後方の参照画像がある場合、その参照画像の動きベクトルを動きベクトルバッファ53から読み出す。たとえば、統計処理部42は、参照画像において、上記処理対象のマクロブロック(MB)と同じ位置にあるマクロブロック(以下、参照マクロブロック)の動きベクトルと、その参照マクロブロックの周辺領域のマクロブロックの動きベクトルを、動きベクトルバッファ53から読み出す。そして、統計処理部42は、現処理画像の動きベクトルと、参照画像の動きベクトルとを統計処理し、パターン選択情報を生成する。統計処理は、たとえば平均値を算出する処理である。たとえば、統計処理部42は、現処理画像で既に生成した動きベクトルと過去に生成した参照画像の動きベクトルの平均値を算出し、この平均値をパターン選択情報(統計動きベクトルMVS)とする。
【0021】
動き探索部43は、パターン選択情報(統計動きベクトルMVS)に基づいて、対象マクロブロックに対応し、縮小フレームバッファ51に格納された複数の縮小マクロブロックのうちの1つを選択する。また、動き探索部43は、パターン選択情報(統計動きベクトルMVB)に対応する縮小参照画像を選択する。つまり、動き探索部43は、パターン選択情報に応じた1つのパターンの縮小画像を選択する。そして、動き探索部43は、選択した縮小マクロブロック及び縮小参照画像を読み出す。そして、動き探索部43は、縮小マクロブロックを用いて縮小参照画像を探索し、縮小マクロブロックの動きベクトルSMVを検出する。そして、動き探索部43は、動きベクトルSMVを動き探索部44に出力する。
【0022】
たとえば、動き探索部43は、設定された探索範囲において、縮小マクロブロックSMBと同じ範囲に含まれる画素を候補ブロックとする。動き探索部43は、縮小マクロブロックSMBに含まれる各画素の値と候補ブロックに含まれる各画素の値を比較し、評価値を算出する。評価値は、たとえば差分絶対値和(SAD:Sum of Absolute Difference)である。なお、評価値として、差分二乗和(SSD:Sum of Squared Difference)、SATD(Sum of Absolute Transformed Difference)等を用いてもよい。
【0023】
そして、動き探索部43は、評価値が最小の候補ブロックを検出する。そして、動き探索部43は、参照画像において、対象マクロブロックと空間的に同一位置にあるマクロブロック(仮想マクロブロック)から、検出した候補ブロックまでの移動量を算出する。動き探索部43は、検出した候補ブロックの位置と、仮想マクロブロックの位置とに基づいて、移動量を算出する。この移動量は、縮小画像における対象マクロブロックの動きベクトルSMVである。動きベクトルSMVは、対象マクロブロックCuに対する候補ブロックの相対的な位置関係(ずれ量およびずれ方向)を示すデータ(情報)である。
【0024】
このように、動き探索部43では、動き探索に縮小画像を用いるため、演算量が大幅に削減され、動き探索が効率化する。
また、動き探索部43では、統計処理部42における処理結果(統計動きベクトルMVS)に基づいて、複数のパターンのうちの1つを選択し、その選択したパターンの縮小画像(縮小マクロブロック、縮小参照画像)を用いて動きベクトルSMVを検出する。選択したパターンの縮小画像は、パターン選択情報(統計動きベクトルMVS)に応じた画素を含む。したがって、画素の配列方向(縦方向,横方向)に沿って一律に間引いた縮小画像を用いる場合と比べ、対象マクロブロックにより近い候補ブロックを検出することができる。つまり、高い精度にて動きベクトルSMVを検出することができる。
【0025】
動き探索部44は、動き探索の処理単位となるマクロブロック毎に、動き探索部43から入力された動きベクトルSMVに応じた探索範囲で、動き探索を行う。ただし、動きベクトルSMVは、縮小画像により探索された動きベクトルであるため、縮小率に応じて拡大した値(大きさ)で用いる。たとえば、上記の縮小部41は、水平方向及び垂直方向の画素数をそれぞれ1/2にした縮小画像を生成し、動き探索部43はその縮小画像を用いて動き探索処理を行う。したがって、動き探索部44は、動きベクトルSMVが示す水平方向及び垂直方向の値を2倍して用いる。
【0026】
動き探索部44は、参照画像として、過去のフレームバッファ31に格納された復号画像を部分的に用いる。
動き探索部44は、参照画像において、対象マクロブロックと等しい位置の参照マクロブロックの基準点(たとえば、マクロブロックの中心位置)から、動きベクトルSMVに応じてずれた位置を探索中心とする。たとえば、動きベクトルSMVの水平方向及び垂直方向の各値を、Vx,Vyとする。この場合、基準点の座標(Px,Py)に対して、探索中心の座標(Sx,Sy)を、
Sx=Px+2Vx
Sy=Py+2Vy
とする。そして、この探索中心として探索範囲を設定する。探索範囲の大きさは、たとえば、マクロブロック(MB)の大きさに応じた画素数を含むように設定される。たとえば、マクロブロック(MB)に対して水平方向に±XA画素、垂直方向に±YA画素を含むように探索範囲の大きさを設定する。
【0027】
動き探索部44は、このように位置が設定された探索範囲において、上記の動き探索部43と同様に、動き探索を行う。つまり、動き探索部44は、設定された探索範囲において、マクロブロックMBと同じ範囲に含まれる画素を候補ブロックとする。動き探索部44は、マクロブロックMBに含まれる各画素の値と候補ブロックに含まれる各画素の値を比較し、評価値を算出する。評価値は、たとえば差分絶対値和(SAD)である。なお、評価値として、差分二乗和(SSD)やSATDを用いてもよい。そして、動き探索部44は、評価値が最小の候補ブロックを検出する。そして、動き探索部44は、参照画像において、対象マクロブロックと空間的に同一位置にあるマクロブロック(仮想マクロブロック)から、検出した候補ブロックまでの移動量(動きベクトル)を算出する。
【0028】
この動き探索部44において、参照画像に対して、動き探索部43にて検出された動きベクトルSMVに応じて探索範囲が設定(オフセット)される。動き探索部43による動きベクトルSMVは、対象マクロブロックCuの周辺のマクロブロック、または後方参照画像における仮想マクロブロックとその周辺のマクロブロックの動きベクトルMVにより算出されたパターン選択情報(統計動きベクトルMVS)に応じたパターンの縮小画像を用いて検出される。対象マクロブロックCuの動きは、周辺のマクロブロックの動きと関連性が高いことが多い。したがって、周辺のマクロブロックにおける動きベクトルを統計処理したパターン選択情報(統計動きベクトルMVS)を用い、対象マクロブロックの動きベクトルに応じたパターンの縮小画像を用いることで、高い精度にて動きベクトルSMVを検出することができる。そして、その動きベクトルSMVを用いることで、対象マクロブロックCuの動きベクトルに応じた探索範囲を参照画像に対して設定することができ、したがって、対象マクロブロックCuの動きベクトルMVを効率よく検出することができる。また、動きベクトルMVを精度よく検出することができる。
【0029】
ピクチャの種類と参照関係を説明する。
図3に示すように、4つの画像(ピクチャ)61,62,63,64は、この順番で撮影される。ピクチャ61はたとえばIピクチャであり、イントラ予測処理により符号化する。
【0030】
ピクチャ64はPピクチャである。このピクチャ64に含まれるマクロブロック64aは、ピクチャ61に含まれるマクロブロック61aと同一または類似している。ピクチャ64の符号化処理において、ピクチャ61を参照画像(前方参照)とした動きベクトル探索処理を行い、マクロブロック64aにおける参照情報を符号化する。
【0031】
ピクチャ62はBピクチャである。このピクチャ62に含まれるマクロブロック62aは、前方ピクチャ61に含まれるマクロブロック61bと同一または類似している。また、このマクロブロック62aは、後方のピクチャ64に含まれるマクロブロック64bと同一または類似している。ピクチャ62の符号化処理において、ピクチャ61とピクチャ64を参照画像(前方参照、後方参照、双方向参照)とした動きベクトル探索処理を行い、マクロブロック62aにおける参照情報を符号化する。
【0032】
ピクチャ63はBピクチャである。このピクチャ63に含まれるマクロブロック63aは、前方ピクチャ61に含まれるマクロブロック61cと同一または類似している。また、このマクロブロック63aは、後方のピクチャ64に含まれるマクロブロック64cと同一または類似している。ピクチャ63の符号化処理において、ピクチャ61とピクチャ64を参照画像(前方参照、後方参照、双方向参照)とした動きベクトル探索処理を行い、マクロブロック63aにおける参照情報を符号化する。
【0033】
次に、Pピクチャにおける参照画像とマクロブロック(MB)を説明する。
図4に示すように、3つの画像(ピクチャ)71,72,73は、この順番で撮影される。現処理画像73は、4つのマクロブロック73a,73b,73c,73dを含む。現処理画像73はPピクチャである。マクロブロック73aは、前方(現処理画像73より時間的に過去)の参照画像71のマクロブロック71aと同一または類似している。参照画像71はIピクチャまたはPピクチャであり、現処理画像73よりも前に符号化されている。したがって、現処理画像73において、参照画像71に含まれるマクロブロック71aを示す情報と差分を符号化する。
【0034】
現処理画像73のマクロブロック73bは、前方の参照画像72のマクロブロック72aと同一または類似している。参照画像72はIピクチャまたはPピクチャであり、現処理画像73よりも前に符号化されている。したがって、現処理画像73において、参照画像72に含まれるマクロブロック72aを示す情報と差分を符号化する。
【0035】
同様に、現処理画像73のマクロブロック73c,73dは、前方の参照画像72のマクロブロック72b,72cと同一または類似している。現処理画像73において、参照画像72に含まれるマクロブロック72b,72cを示す情報と差分を符号化する。
【0036】
次に、Bピクチャにおける参照画像とマクロブロック(MB)を説明する。
図5に示すように、5つの画像(ピクチャ)81,82,83,84,85は、この順番で撮影される。現処理画像83は4つのマクロブロック83a,83b,83c,83dを含む。現処理画像83はBピクチャである。マクロブロック83aは、前方(現処理画像83より時間的に過去)の参照画像81のマクロブロック81aと同一または類似している。参照画像81はIピクチャまたはPピクチャであり、現処理画像83よりも前に符号化されている。したがって、現処理画像83において、参照画像81に含まれるマクロブロック81aを示す情報と差分を符号化する。
【0037】
現処理画像83のマクロブロック83bは、前方の参照画像82のマクロブロック82aと同一または類似している。また、マクロブロック83bは、後方(現処理画像83より時間的に未来)の参照画像84のマクロブロック84aと統一または類似している。参照画像84はIピクチャまたはPピクチャであり、現処理画像83よりも前に符号化されている。したがって、現処理画像83において、参照画像82,84に含まれるマクロブロック82a,84aを示す情報と差分を符号化する。
【0038】
現処理画像83のマクロブロック83cは、後方の参照画像85のマクロブロック85aと同一または類似している。参照画像85はIピクチャまたはPピクチャであり、現処理画像83よりも前に符号化されている。したがって、現処理画像83において、参照画像85に含まれるマクロブロック85aを示す情報と差分を符号化する。
【0039】
現処理画像83のマクロブロック83dは、前方の参照画像82のマクロブロック82bと同一または類似している。また、マクロブロック83dは、後方の参照画像84のマクロブロック84bと統一または類似している。したがって、現処理画像83において、参照画像82,84に含まれるマクロブロック82b,84bを示す情報と差分を符号化する。
【0040】
次に、ピクチャ内における処理順序と、動きベクトル予測値(MVP),予測差分値(MVD)の算出処理を説明する。
図6に示すように、1つのピクチャ(フレーム)91は、マトリックス状に配列された複数個(8×6個)のマクロブロック(MB)を含む。各マクロブロック(MB)は、たとえば水平方向16画素,垂直方向16画素の画素マトリクスである。
【0041】
符号化処理は、破線の矢印で示したように、ラスタスキャン方向に配置された複数のマクロブロックMB毎に実施される。つまり、最上端のマクロブロックラインの左端のマクロブロックMBから右端のマクロブロックMBの順に実施される。次に、2段目のマクロブロックラインの左端のマクロブロックMBから右端のマクロブロックMBの順に符号化処理が実施される。以降、左端のマクロブロックMBから右端のマクロブロックMBの順に実施される符号化処理が、最下端のマクロブロックラインまで繰り返される。
【0042】
処理対象のマクロブロックを「Cu」として示す。この対象マクロブロックCuの周辺のマクロブロック「A」「B」「C」の動きベクトル(MVA)(MVB)(MVC)に基づいて、動きベクトル予測値(MVP)を算出する。動きベクトル予測値(MVP)は、周辺のマクロブロック「A」「B」「C」の動きベクトル(MVA)(MVB)(MVC)の中間値である。つまり、動きベクトル予測値(MVP)は、
MVP=Median(MVA,MVB,MVC)
により算出される。なお、「Median」は、中間値を得る算術子である。そして、予測差分値(MVD)は、対象マクロブロックCuの動きベクトル(MV)と動きベクトル予測値(MVP)に基づいて、
MVD=MV−MVP
により算出される。
【0043】
次に、動きベクトルの探索の概略を説明する。
図7(a)に示すように、現処理画像120に含まれる対象マクロブロックCuの動きベクトルを検出する。この検出において、現処理画像120と時間的に異なる画像であって、現処理画像120よりも前に符号化された参照画像110を用いる。この参照画像110において、対象マクロブロックCuと空間的に同一位置の仮想マクロブロックを含む探索範囲111を設定する。なお、対象マクロブロックCuに対応する仮想マクロブロックを明示するために同じ符号「Cu」を用いて示す場合がある。動き探索処理は、この探索範囲111内にあって、対象マクロブロックCuに対して評価値が最小の候補ブロックを探索する。
【0044】
図7(b)に示すように、探索範囲111の大きさは、仮想マクロブロックCuと、その仮想マクロブロックCuの周辺の8個のマクロブロックを含むように設定される。対象マクロブロックCuは、たとえば16×16画素の画素マトリックスである。これに基づき、たとえば、マクロブロック(MB)に対して水平方向と垂直方向にそれぞれ±16画素を含むように探索範囲の大きさを設定する。このような設定の場合、探索範囲の大きさは、48×48画素(3×3マクロブロックを含む大きさ)となる。
【0045】
ここで、探索範囲に対する全探索法を説明する。
先ず、
図11(a)に示すように、探索範囲111の左上に候補ブロック112を設定する。そして、この候補ブロック112に含まれる画素の画素値と、対象マクロブロックCuに含まれる画素の画素値とに基づいて、評価値を算出する。評価値は、上記したように、たとえば差分絶対値和(SAD)である。このように算出した評価値を、候補ブロック112の位置情報に関連付けて記憶する。たとえば、この探索処理を
図2に示す動き探索部44にて実行する場合、記憶する領域は、たとえば動き探索部44に含まれるバッファである。なお、以下の説明において算出する評価値についても同様に記憶する。
【0046】
次に、
図11(b)に示すように、探索範囲111において、候補ブロック112を、右側に1画素分ずらして設定する。そして、この候補ブロック112の評価値を算出する。このように、右側に向かって1画素ずつずらして設定した候補ブロックの評価値を算出する。そして、
図11(c)に示すように、探索範囲111において、右端に設定した候補ブロック112の評価値を算出すると、上記と同様の処理を、1画素分下側にずらして設定した候補ブロックについて行う。
【0047】
即ち、
図11(d)に示すように、探索範囲111の左端において、上端から1画素分下がった位置に候補ブロック112を設定する。そして、この候補ブロック112の評価値を算出する。そして、
図11(e)に示すように、探索範囲111において、候補ブロック112を、右側に1画素分ずらして設定する。そして、この候補ブロック112の評価値を算出する。このように、1画素ずつ候補ブロック112の設定位置をずらし、各位置に設定した候補ブロック112の評価値を算出する。そして、
図11(f)に示すように、探索範囲111の右下に候補ブロック112を設定し、この候補ブロック112における評価値を算出する。
【0048】
このように、探索範囲111に設定した全ての候補ブロック112の評価値を算出する。記憶した全ての評価値のうち、もっとも小さな評価値に関連付けた候補ブロック112の位置情報を得る。
【0049】
たとえば、
図12に示すように、上記の動き探索により、評価値が最小の候補ブロック112を検出する。そして、参照画像110において、仮想マクロブロックCuから、検出した候補ブロック112までの移動量を算出する。この移動量は、対象マクロブロックCuの動きベクトルMVである。
【0050】
次に、縮小画像による動き探索を説明する。
上記の
図7(a)に示す現処理画像120と参照画像110とをそれぞれ縮小した縮小画像を生成する。
【0051】
図8(a)に示すように、縮小処理画像140は、
図7(a)に示す現処理画像120を、たとえば1/2に縮小したものである。同様に、縮小参照画像130は、
図7(a)に示す参照画像110を、たとえば1/2に縮小したものである。縮小処理画像140に含まれる縮小マクロブロック141は、
図7(a)に示す対象マクロブロックCuを1/2に縮小したものである。この縮小マクロブロック141に対して、空間的に同一位置の仮想マクロブロック131を中心とする探索範囲132を縮小参照画像130に設定する。
【0052】
図8(b)に示すように、探索範囲132の大きさは、仮想マクロブロック131と、その仮想マクロブロック131の大きさに応じて設定される。1つの縮小マクロブロック(SMB)は、たとえば8×8画素の画素マトリックスである。これに基づき、たとえば、縮小マクロブロック(SMB)に対して水平方向と垂直方向にそれぞれ±8画素を含むように探索範囲の大きさを設定する。このような設定の場合、探索範囲の大きさは、24×24画素となる。この探索範囲132において、対象マクロブロックSMBを用いて探索する。
【0053】
図9(a)に示すように、探索範囲132において、縮小マクロブロックSMBに対する評価値が最も小さな候補ブロック133を検出する。そして、
図9(b)に示すように、仮想マクロブロック131に対する候補ブロック133の移動量(動きベクトルSMV)を算出する。このように検出した動きベクトルに基づいて、原画サイズの画像について、動きベクトルMVを検出する。
【0054】
すなわち、
図10(a)に示すように、参照画像110において、上記のように検出した動きベクトルSMVに基づいて、探索範囲を設定する。ただし、動きベクトルSMVは、現処理画像120と参照画像110をそれぞれ1/2に縮小した縮小画像140,130(
図8(a)参照)により探索された動きベクトルである。このため、動きベクトルSMVの水平方向の成分と垂直方向の成分をそれぞれ2倍した成分の仮想動きベクトルPMVを算出する。この仮想動きベクトルPMVは、対象マクロブロックCuに対して、評価値が最も小さい候補ブロックが存在しうる確立の高い場所を示す。
【0055】
このため、
図10(b)に示すように、仮想動きベクトルPMVに応じて参照画像110における探索範囲を設定する。たとえば、仮想マクロブロックCuを中心とする探索範囲111を、仮想動きベクトルPMVに応じてオフセットした探索範囲111aを設定する。このように設定した探索範囲111aは、中心部分において、対象マクロブロックCuに対応して、最も小さな評価値の候補ブロック112が存在する確立が高い。つまり、対象マクロブロックCuの画素との差が小さい画素が含まれる。一方、探索範囲111aの外側であって、探索範囲111との間の領域には、対象マクロブロックCuの画素との差が大きい画素が含まれる。したがって、このようにオフセットした探索範囲111aを設定することで、効率のよい探索を行うことができる。
【0056】
図13は、動きベクトル検出部32において、1つのマクロブロック(MB)に対する処理を機能的に示すフローチャートである。動きベクトル検出処理を、このフローチャートにしたがって実施することもできる。
【0057】
先ず、ステップ201において、現処理画像と参照画像を取得する。そして、ステップ202において、現処理画像と参照画像について、複数パターンの縮小画像を生成する。次に、ステップ203において、過去の動きベクトルMVを取得する。そして、ステップ204において、動きベクトルMVを統計処理する。ステップ205において、統計処理の結果に基づいて、縮小画像を選択する。
【0058】
次いで、ステップ206において、縮小画像(縮小処理画像、縮小参照画像)を用い、全探索法にしたがって探索を行い、対象マクロブロックの動きベクトルSMVを検出する。ステップ207において、全画素探索完了したか否かを判定する。探索範囲に含まれる全画素について探索を完了した場合(判定:YES)、処理を終了する。全画素について探索を完了していない場合(判定:NO)、ステップ208に移行する。ステップ208において、検出した動きベクトルSMVに基づいて参照画像における探索範囲を設定する。そして、参照画像の探索範囲内を全探索法にしたがって探索を実施する。
【0059】
次に、比較例の処理を説明する。
図14に示すように、ステップ251において、現処理画像と参照画像を取得する。ステップ252において、現処理画像と参照画像について、それぞれ1つの縮小画像(縮小処理画像、縮小参照画像)を生成する。ステップ253において、縮小画像(縮小処理画像、縮小参照画像)を用い、全探索法にしたがって探索を行い、対象マクロブロックの動きベクトルSMVを検出する。ステップ254において、全画素探索完了したか否かを判定する。探索範囲に含まれる全画素について探索を完了した場合(判定:YES)、処理を終了する。全画素について探索を完了していない場合(判定:NO)、ステップ255に移行する。ステップ255において、検出した動きベクトルSMVに基づいて参照画像における探索範囲を設定し、その探索範囲内を全探索法にしたがって探索を実施する。
【0060】
次に、統計処理に用いる動きベクトルについて説明する。
図15に示すように、4つの画像(ピクチャ)151,152,153,154は、この順番で撮影される。たとえば、ピクチャ151はIピクチャまたはPピクチャであり、ピクチャ154はPピクチャであり、ピクチャ152,153はBピクチャである。
【0061】
たとえば、ピクチャ152を現処理画像とする。そして、この現処理画像152に含まれる対象マクロブロックCuの動きベクトルを検出する。このとき、現処理画像152において、左上のマクロブロック(MB)から、ラスタ方向(破線矢印にて示す)に沿って符号化処理され、これらのマクロブロック(MB)について動きベクトルが生成されている。これらのマクロブロックのうち、対象マクロブロックCuを中心とする参照領域152aに含まれ、既に符号化処理されたマクロブロック(対象マクロブロックCuより濃いハッチングにて示されたマクロブロック)において、現処理画像152から前方の参照画像151を参照した動きベクトルを用いる。参照領域152aは、たとえば、
図7(b)に示す探索範囲111と同じ大きさに設定される。これらのマクロブロックの動きベクトルを統計処理(平均化)して統計動きベクトルMVSを生成する。この統計動きベクトルMVSにより、複数パターの縮小画像のうちの1つの縮小画像を選択する。
【0062】
また、現処理画像152について後方参照がある場合、参照するピクチャ(後方参照画像)154はPピクチャであり、この後方参照画像154は、前方のピクチャ(前方参照画像)151を参照する。そして、この後方参照画像154に含まれる全てのマクロブロックは、現処理画像152よりも前に符号化され、それぞれの動きベクトルが生成されている。この後方参照画像154において、現処理画像152の対象マクロブロックCuと空間的に同一位置の仮想マクロブロック(「C1」と表記)を中心とする参照領域154aに含まれるマクロブロックにおいて、後方参照画像154から前方参照画像151を参照した動きベクトルを用いる。そして、現処理画像152の動きベクトルと、後方参照画像154の動きベクトルとを統計処理(平均化)して統計動きベクトルMVSを生成する。この統計動きベクトルMVSにより、複数パターの縮小画像のうちの1つの縮小画像を選択する。
【0063】
次に、縮小画像のパターンについて説明する。
上記したように、
図2に示す動きベクトル検出部32は、対象マクロブロックCuに対して、その対象マクロブロックCuの周辺のマクロブロック(
図15に示す現処理画像152、後方参照画像154に含まれるマクロブロック)の動きベクトルを統計処理した統計動きベクトルMVSに基づいて、縮小画像を選択する。このため、縮小画像のパターンは、統計動きベクトルMVSの方向に応じて設定される。動きが強い方向に応じたパターンにて画素を間引いた縮小画像を用いるように、各パターンが設定される。
【0064】
図16(a)に示すように、マクロブロック(MB)は、たとえば16×16個の画素Gを含む画素マトリックスである。このマクロブロック(MB)において、左上の画素を基準画素Grとする。図において、マクロブロック(MB)の左の数字は、基準画素Grから縦方向(垂直方向)の画素位置を示す。また、マクロブロック(MB)の上の数字は、基準画素Grから横方向(水平方向)の画素位置を示す。
【0065】
図16(a)において、矢印LVは、統計動きベクトルMVSの方向を示す。統計動きベクトルMVSに対して垂直方向に間引きがあるパターンとし、そのパターンによって縮小画像を生成する。詳しくは、統計動きベクトルMVSに対して垂直な第1ラインL1と第2ラインL2を、統計動きベクトルMVS(LV)に沿って交互に設定する。なお、
図16(a)では、それぞれ1本の第1ラインL1及び第2ラインL2を示している。この第1ラインL1を、画素を残すラインとし、第2ラインL2を、画素を間引くラインとする。さらに、第1ラインL1に沿って1画素おきに画素を間引く。
図16(a)において、基準画素Grを除き、梨地のハッチングを付した画素G2が縮小部41(
図2参照)において間引く画素であり、基準画素Grとハッチングを付していない画素G1が縮小画像に含まれる画素である。
【0066】
上記のように、第1ラインL1と第2ラインL2に応じて画素を間引く処理により、
図16(d)に示す縮小マクロブロック(SMB)を生成する。この縮小マクロブロック(SMB)は、8画素×8画素の画素マトリックスである。この縮小マクロブロック(SMB)において、各画素内に記載した文字は、
図16(a)に示すマクロブロック(MB)における画素の位置(縦方向の位置と横方向の位置)を示す。
【0067】
なお、
図16(a)において太線にて示した矩形は、マクロブロック(MB)における繰り返しパターンRPを示す。この繰り返しパターンRPは、残す画素G1と間引く画素G2を含む領域であり、この繰り返しパターンRPが画素の配列方向に沿って繰り返され、縮小マクロブロック(SMB)が形成される。
【0068】
上記のように生成した縮小マクロブロック(SMB)を、統計動きベクトルMVSに応じて選択する。ベクトルは、方向と大きさを示す。上記したように、縮小マクロブロックSMBは、動きが強い方向に応じたパターンにて画素を間引いたパターンとなるように生成される。したがって、統計動きベクトルMVSの方向に応じて選択するとよい。このため、統計動きベクトルMVSの縦方向の成分と横方向の成分の比を用い、その比に応じてパターンを生成することで、ベクトルの方向に応じた選択を可能とする。
【0069】
図16(b)に示すように、統計動きベクトルMVSにおいて、縦方向の成分MVyについて、下向きをプラス「+」、上向きをマイナス「−」とする。また、横方向の成分MVxについて、右方向をプラス「+」、左向きをマイナス「−」とする。
【0070】
図16(c)は、統計動きベクトルMVSについて、縦方向の成分MVyと横方向の成分MVxの比を示す。たとえば、マクロブロックMBの画素の配列方向(縦方向)と平行な統計動きベクトルMVSの場合、縦方向の成分MVyと横方向の成分MVxの比は、「縦:横=1:0」または「縦:横=−1:0」となる。なお、
図16(c)において、黒丸は成分が「0」であることを示す。
【0071】
図17〜
図20は、統計動きベクトルMVSの比に対するマクロブロックMBの画素の間引きのパターンを[ケースn]として示す。なお、
図17〜
図20において、画素等の符号を省略する。
【0072】
図17に示す[ケース1]では、統計動きベクトルMVSに応じて、縦方向の成分と横方向の成分の比が、「縦:横=1:0」または「縦:横=−1:0」の場合のパターンの縮小画像を生成する。なお、この例は、
図16(a)〜(d)にて示したパターンである。なお、
図17では、縦方向の成分と横成分の比について、代表的な例を示している。また、[ケース2]では、統計動きベクトルMVSに応じて、縦方向の成分と横方向の成分の比が、「縦:横=8:−1」または「縦:横=−8:1」の場合のパターンの縮小画像を生成する。また、[ケース3]では、統計動きベクトルMVSに応じて、縦方向の成分と横方向の成分の比が、「縦:横=4:−1」または「縦:横=−4:1」の場合のパターンの縮小画像を生成する。また、[ケース4]では、統計動きベクトルMVSに応じて、縦方向の成分と横方向の成分の比が、「縦:横=2:−1」または「縦:横=−2:1」の場合のパターンの縮小画像を生成する。
【0073】
図18に示す[ケース5]では、統計動きベクトルMVSに応じて、縦方向の成分と横方向の成分の比が、「縦:横=−1:1」または「縦:横=1:−1」の場合のパターンの縮小画像を生成する。また、[ケース6]では、統計動きベクトルMVSに応じて、縦方向の成分と横方向の成分の比が、「縦:横=−1:2」または「縦:横=1:−2」の場合のパターンの縮小画像を生成する。また、[ケース7]では、統計動きベクトルMVSに応じて、縦方向の成分と横方向の成分の比が、「縦:横=−1:4」または「縦:横=1:−4」の場合のパターンの縮小画像を生成する。また、[ケース8]では、統計動きベクトルMVSに応じて、縦方向の成分と横方向の成分の比が、「縦:横=−1:8」または「縦:横=1:−8」の場合のパターンの縮小画像を生成する。
【0074】
図19に示す[ケース9]では、統計動きベクトルMVSに応じて、縦方向の成分と横方向の成分の比が、「縦:横=0:1」または「縦:横=0:−1」の場合のパターンの縮小画像を生成する。また、[ケース10]では、統計動きベクトルMVSに応じて、縦方向の成分と横方向の成分の比が、「縦:横=1:8」または「縦:横=−1:−8」の場合のパターンの縮小画像を生成する。また、[ケース11]では、統計動きベクトルMVSに応じて、縦方向の成分と横方向の成分の比が、「縦:横=1:4」または「縦:横=−1:−4」の場合のパターンの縮小画像を生成する。また、[ケース12]では、統計動きベクトルMVSに応じて、縦方向の成分と横方向の成分の比が、「縦:横=1:2」または「縦:横=−1:−2」の場合のパターンの縮小画像を生成する。
【0075】
図20に示す[ケース13]では、統計動きベクトルMVSに応じて、縦方向の成分と横方向の成分の比が、「縦:横=1:1」または「縦:横=−1:−1」の場合のパターンの縮小画像を生成する。また、[ケース14]では、統計動きベクトルMVSに応じて、縦方向の成分と横方向の成分の比が、「縦:横=2:1」または「縦:横=−2:−1」の場合のパターンの縮小画像を生成する。また、[ケース15]では、統計動きベクトルMVSに応じて、縦方向の成分と横方向の成分の比が、「縦:横=4:1」または「縦:横=−4:−1」の場合のパターンの縮小画像を生成する。また、[ケース16]では、統計動きベクトルMVSに応じて、縦方向の成分と横方向の成分の比が、「縦:横=8:1」または「縦:横=−8:−1」の場合のパターンの縮小画像を生成する。
【0076】
なお、
図18に示す[ケース5]は、間引きのパターンが
図17に示す[ケース1]と同じである。つまり、[ケース5]による縮小画像は、[ケース1]による縮小画像と同じ画素を含む。同様に、
図19に示す[ケース9]、
図20に示す[ケース13]は、間引きのパターンが
図17に示す[ケース1]と同じであり、それらの縮小画像は、[ケース1]による縮小画像と同じ画素を含む。
【0077】
次に、縮小画像を選択する処理を説明する。
図21〜
図23は、統計処理の結果に基づく縮小画像のパターン選択を示す。なお、
図21〜
図23に示す判断子には、
図17〜
図20に対応し、縦方向の成分と横成分の比について、代表的な例を示している。
【0078】
統計動きベクトルMVSの垂直成分(縦)と水平成分(横)の比に応じて、縮小画像(パターン)を選択する。
先ず、
図21に示すように、ステップ221において、統計動きベクトルMVSの垂直成分(縦)と水平成分(横)の比が、「縦:横=8:−1」か否かを判定する。また、統計動きベクトルMVSの垂直成分(縦)と水平成分(横)の比が、「縦:横=−8:1」か否かを判定する。比が「縦:横=8:−1」または「縦:横=−8:1」の場合(判定:YES)、ステップ222において[ケース2]によって作成されたパターンの縮小画像を選択する。比が「縦:横=8:−1」と「縦:横=−8:1」のいずれでもない場合(判定:NO)、ステップ223へ移行する。
【0079】
次に、ステップ223の判定において、統計動きベクトルMVSの垂直成分(縦)と水平成分(横)の比が、「縦:横=−1:8」または「縦:横=1:−8」の場合(判定:YES)、ステップ224において[ケース8]によって作成されたパターンの縮小画像を選択する。ステップ225の判定において、統計動きベクトルMVSの垂直成分(縦)と水平成分(横)の比が、「縦:横=1:8」または「縦:横=1:−8」の場合(判定:YES)、ステップ226において[ケース10]によって作成されたパターンの縮小画像を選択する。ステップ227の判定において、統計動きベクトルMVSの垂直成分(縦)と水平成分(横)の比が、「縦:横=8:1」または「縦:横=1:−8」の場合(判定:YES)、ステップ228において[ケース16]によって作成されたパターンの縮小画像を選択する。
【0080】
次に、
図22に示すように、ステップ229の判定において、統計動きベクトルMVSの垂直成分(縦)と水平成分(横)の比が、「縦:横=4:−1」または「縦:横=−4:1」の場合(判定:YES)、ステップ230において[ケース3]によって作成されたパターンの縮小画像を選択する。ステップ231の判定において、統計動きベクトルMVSの垂直成分(縦)と水平成分(横)の比が、「縦:横=−1:4」または「縦:横=1:−4」の場合(判定:YES)、ステップ232において[ケース7]によって作成されたパターンの縮小画像を選択する。
【0081】
次いで、ステップ233の判定において、統計動きベクトルMVSの垂直成分(縦)と水平成分(横)の比が、「縦:横=1:4」または「縦:横=−1:−4」の場合(判定:YES)、ステップ234において[ケース11]によって作成されたパターンの縮小画像を選択する。ステップ235の判定において、統計動きベクトルMVSの垂直成分(縦)と水平成分(横)の比が、「縦:横=4:1」または「縦:横=−4:−1」の場合(判定:YES)、ステップ236において[ケース15]によって作成されたパターンの縮小画像を選択する。
【0082】
次に、
図23に示すように、ステップ237の判定において、統計動きベクトルMVSの垂直成分(縦)と水平成分(横)の比が、「縦:横=2:−1」または「縦:横=−2:1」の場合(判定:YES)、ステップ238において[ケース4]によって作成されたパターンの縮小画像を選択する。ステップ239の判定において、統計動きベクトルMVSの垂直成分(縦)と水平成分(横)の比が、「縦:横=−1:2」または「縦:横=1:−2」の場合(判定:YES)、ステップ240において[ケース6]によって作成されたパターンの縮小画像を選択する。
【0083】
次いで、ステップ241の判定において、統計動きベクトルMVSの垂直成分(縦)と水平成分(横)の比が、「縦:横=1:2」または「縦:横=−1:−2」の場合(判定:YES)、ステップ242において[ケース12]によって作成されたパターンの縮小画像を選択する。ステップ243の判定において、統計動きベクトルMVSの垂直成分(縦)と水平成分(横)の比が、「縦:横=2:1」または「縦:横=−2:−1」の場合(判定:YES)、ステップ244において[ケース14]によって作成されたパターンの縮小画像を選択する。
【0084】
そして、ステップ243において、判定が「NO」、すなわち統計動きベクトルMVSの垂直成分(縦)と水平成分(横)の比が上記のいずれでもない場合、ステップ245において[ケース1]によって作成されたパターンの縮小画像を選択する。
【0085】
以上記述したように、本実施形態によれば、以下の効果を奏する。
(1)動きベクトル検出部32は、MB分割部21から入力されたマクロブロック(MB)と、過去のフレームバッファ31に格納された参照画像とを用いて、対象マクロブロックの動きベクトル(MV:Motion Vector)を検出する。動きベクトル検出部32の縮小部41は、マクロブロック(MB)を所定の縮小率で縮小した縮小マクロブロック(SMB)を生成する。統計処理部42は、縮小部41にて作成された複数パターンの縮小画像のうちの1つの縮小画像を選択するためのパターン選択情報(統計動きベクトルMVS)を生成する。動き探索部43は、パターン選択情報(統計動きベクトルMVS)に基づいて、複数の縮小画像のうちの1つを選択し、その縮小参照画像を探索し、縮小マクロブロックの動きベクトルSMVを検出する。動き探索部44は、動き探索の処理単位となるマクロブロック毎に、動き探索部43から入力された動きベクトルSMVに応じた探索範囲で、動き探索を行い、対象マクロブロックCuの動きベクトルMVを検出する。
【0086】
この動き探索部44において、参照画像に対して、動き探索部43にて検出された動きベクトルSMVに応じて探索範囲が設定(オフセット)される。動き探索部43による動きベクトルSMVは、対象マクロブロックCuの周辺のマクロブロック、または後方参照画像における仮想マクロブロックとその周辺のマクロブロックの動きベクトルMVにより算出されたパターン選択情報(統計動きベクトルMVS)に応じたパターンの縮小画像を用いて検出される。
【0087】
対象マクロブロックCuの動きは、周辺のマクロブロックの動きと関連性が高いことが多い。したがって、周辺のマクロブロックにおける動きベクトルを統計処理したパターン選択情報(統計動きベクトルMVS)を用い、対象マクロブロックの動きベクトルに応じたパターンの縮小画像を用いることで、高い精度にて動きベクトルSMVを検出することができる。そして、その動きベクトルSMVを用いることで、対象マクロブロックCuの動きベクトルに応じた探索範囲を参照画像に対して設定することができ、対象マクロブロックCuの動きベクトルMVを効率よく検出することができる。また、動きベクトルMVを精度よく検出することができる。そして、動きベクトルMVの精度は、符号化におけるデータ量(符号化圧縮率)に影響する。したがって、本実施形態では、予測精度(符号化圧縮率)を高めることができる。
【0088】
たとえば、単純に水平方向と垂直方向のみに沿って間引くことで縮小画像を生成した場合、その縮小画像において、対象マクロブロックの動きに応じた特徴的な画素が含まれないことがある。すると、縮小画像を用いた動き探索処理において、適切な評価値が得られないことがある。このような場合、対象マクロブロックCuに対応する候補ブロックの評価値が、他の候補ブロックよりも小さくなってしまい、誤検出を発生することがある。このような場合には、対象マクロブロックと検出した参照ブロックとの間の誤差が大きくなり、符号化信号におけるデータ量の増加を招く。誤検出を防ぐために探索範囲を大きくすると、探索時間の増大を招く。また、探索範囲を大きくすることは、縮小画像による動き探索が無駄にして、効率の低下を招く。
【0089】
(2)縮小部41は、統計動きベクトルMVSに対して垂直な第1ラインL1と第2ラインL2を、統計動きベクトルMVS(LV)に沿って交互に設定する。この第1ラインL1を、画素を残すラインとし、第2ラインL2を、画素を間引くラインとする。さらに、第1ラインL1に沿って1画素おきに画素を間引く。このように、第1ラインL1と第2ラインL2に応じて画素を間引く処理により、動きの強い方向に応じたパターンで画素を間引いた縮小マクロブロック(SMB)(縮小画像)を生成することができる。
【0090】
尚、上記各実施形態は、以下の態様で実施してもよい。
・上記実施形態において、マクロブロック(MB)や縮小マクロブロック(SMB)のサイズを適宜変更してもよい。また、縦方向の画素の数と横方向の画素の数とが互いに異なるマクロブロック(縮小マクロブロック)としてもよい。
【0091】
・上記実施形態に対し、統計処理部42の結果に応じたパターンにて参照画像を縮小した縮小参照画像と縮小マクロブロックSMBを生成し、動き探索を行うようにしてもよい。