(57)【特許請求の範囲】
【請求項１】
ブロックライン毎に並列に動きベクトル検出を行って動画像の符号化を行う動画像符号化装置であって、
それぞれの動きベクトル検出で用いられる参照画像の探索範囲を含む領域を記憶する記憶部と、
処理対象ブロックに対する左隣接ブロックの動きベクトルに基づいて、前記記憶部に記憶された領域内の探索範囲を可変にして、該処理対象ブロックの動きベクトル検出を行う複数の動きベクトル検出部と、
を備え、
前記記憶部は、
各動きベクトル検出部で用いられ、処理対象ブロックから水平方向及び垂直方向それぞれに所定画素数を設定した基準の所定領域を示す基準探索範囲を含む領域を記憶し、
前記複数の動きベクトル検出部は、
前記左隣接ブロックの動きベクトルが、前記基準探索範囲以内の領域を指す場合には、前記記憶部に記憶された領域の垂直成分を最大にした探索範囲に対して動きベクトル検出を行い、前記左隣接ブロックの動きベクトルが、前記基準探索範囲の垂直成分を超える領域を指す場合には、前記処理対象ブロックに対して前記基準探索範囲を用いて動きベクトル検出を行う動画像符号化装置。
【請求項２】
前記複数の動きベクトル検出部は、
前記処理対象ブロックが、Ｈ．２６４のＰ＿Ｓｋｉｐで用いられる隣接ブロックとならないブロックであれば、前記記憶部に記憶された領域の垂直成分を最大にした探索範囲に対して動きベクトル検出を行う請求項１記載の動画像符号化装置。
【請求項３】
複数の動きベクトル検出部でブロックライン毎に並列に動きベクトル検出を行って、動画像の符号化を行う動画像符号化装置が実行する動画像符号化方法であって、
それぞれの動きベクトル検出で用いられる参照画像の探索範囲を含む領域を記憶部に記憶し、
各動きベクトル検出部で、処理対象ブロックに対する左隣接ブロックの動きベクトルに基づいて、前記記憶部に記憶された領域内の探索範囲を可変にして、該処理対象ブロックの動きベクトル検出を行う処理を有し、
前記記憶部は、
各動きベクトル検出部で用いられ、処理対象ブロックから水平方向及び垂直方向それぞれに所定画素数を設定した基準の所定領域を示す基準探索範囲を含む領域を記憶し、
前記複数の動きベクトル検出部は、
前記左隣接ブロックの動きベクトルが、前記基準探索範囲以内の領域を指す場合には、前記記憶部に記憶された領域の垂直成分を最大にした探索範囲に対して動きベクトル検出を行い、前記左隣接ブロックの動きベクトルが、前記基準探索範囲の垂直成分を超える領域を指す場合には、前記処理対象ブロックに対して前記基準探索範囲を用いて動きベクトル検出を行う動画像符号化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動きベクトル検出を並列に行う動画像符号化装置、及び動画像符号化方法に関する。
【背景技術】
【０００２】
Ｈ．２６４／ＡＶＣ（Advanced Video Coding）（以下、Ｈ．２６４とも呼ぶ）などの動画像符号化は、動き補償と直交変換・量子化処理を用いたハイブリッド動画像符号化方式である。符号化対象の入力画像は、動きベクトル検出により、参照画像（以下、参照ピクチャとも呼ぶ）の中から類似している画像ブロック（以下、参照ブロックとも呼ぶ）が算出される。
【０００３】
Ｈ．２６４の符号化では、入力画像と参照ブロックの差分画像について直交変換・量子化処理を行い、得られた係数データをエントロピー符号化して出力する。参照ブロックを特定するためのどの参照ピクチャを使用したかの情報と、どのブロックサイズで動きベクトルを算出したかの情報と、動きベクトルの情報とは、別途エントロピー符号化して出力される。
【０００４】
Ｈ．２６４の符号化技術には、入力画像を符号化するモードしてＰ＿Ｓｋｉｐがある。このＰ＿Ｓｋｉｐモードでは、どの参照ピクチャを使用したかの情報、動きベクトルを算出したブロックサイズの情報、及び動きベクトルの情報を符号化する代わりに、マクロブロックをＰ＿Ｓｋｉｐで符号化したことを示す情報を符号化する。
【０００５】
Ｐ＿Ｓｋｉｐであることを示す符号は、どの参照ピクチャを選択したかの情報や動きベクトルの情報を符号化した場合と比較して少ない符号量となる。そのため、動画像の圧縮率が高まるため、このタイプのマクロブロックが多く出ることが望ましい。
【０００６】
マクロブロックのタイプがＰ＿Ｓｋｉｐであることを受信した復号装置は、このマクロブロックにおいて隣接する周りのマクロブロックの参照ピクチャや動きベクトルからこれらのマクロブロックの参照ピクチャ、動きベクトルを復元する。よって、問題なく画像を復元することができる。この復元方法は、Ｈ．２６４の中で規定されている。
【０００７】
動きベクトル検出は、動きベクトル検出対象の参照ピクチャからの処理対象マクロブロックを中心とした矩形領域の画像データに対して行なわれる。参照ピクチャは、例えばＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）などの外部メモリに保存される。
【０００８】
動きベクトル検出部は、ＳＤＲＡＭから画像データを読み込んで動きベクトル検出を行う。このときに読み込む画像データ量を減らすために、プリフェッチメモリを用いる技術がある。また、解像度の大きな画像を実時間で符号化するために、この動きベクトル検出部を複数備えた技術がある。
【０００９】
動き探索部が探索した動きベクトルが有効であるか否かを判定し、有効と判定された動きベクトルの分布に基づいて動きベクトル探索範囲を判定する技術がある。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００８−１４１２８８号公報
【特許文献２】特開２００８−５５４５号公報
【特許文献３】特開２００９−２９６４４３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
まず、Ｐ＿Ｓｋｉｐについて説明する。図１は、処理対象ブロックと隣接ブロックとの関係を示す図である。図１に示す隣接ブロックＡは、処理対象ブロックの左隣のブロック、隣接ブロックＢは、処理対象ブロックの上隣のブロック、隣接ブロックＣは右上隣のブロック、隣接ブロックＤは、処理対象ブロックの左上隣のブロックである。
【００１２】
ピクチャ上端のＭＢ（マクロブロック）の場合、隣接ブロックＢ、Ｃ、Ｄは存在しない。ピクチャ左端のＭＢの場合、隣接ブロックＡは存在しない。ピクチャ右端のＭＢの場合、隣接ブロックＣは存在しない。
【００１３】
図２は、Ｐ＿Ｓｋｉｐマクロブロックの動きベクトルの算出処理を示すフローチャートである。図２に示す算出方法では、以下のようにＰ＿Ｓｋｉｐベクトルが決定される。
（１）（２）隣接Ａまたは隣接Ｂが存在しないＭＢの場合、Ｐ＿Ｓｋｉｐベクトルは０ベクトルとなる（Ｓ１１〜１３、Ｓ１８）。
（３）隣接Ａの参照ピクチャインデックスｒｅｆ＿ｉｄｘＬ０Ａが０かつ隣接Ａの動きベクトルが０ベクトルの場合、Ｐ＿Ｓｋｉｐベクトルは０となる（Ｓ１４、Ｓ１８）。
（４）隣接Ｂの参照ピクチャインデックスｒｅｆ＿ｉｄｘＬ０Ｂが０かつ隣接Ｂの動きベクトルが０ベクトルの場合、Ｐ＿Ｓｋｉｐベクトルは０となる（Ｓ１５、Ｓ１８）。
（１）〜（４）のいずれにも当てはまらない場合、図３のフローチャートでＰ＿Ｓｋｉｐベクトルが決定される（Ｓ１６、Ｓ１７）。
【００１４】
図３は、通常のＰ＿Ｓｋｉｐベクトル算出処理を示すフローチャートである。図３に示すように、隣接ブロックＡ、Ｂ、Ｃの各動きベクトルの各成分に対し、ｍｅｄｉａｎ値がＰ＿Ｓｋｉｐの動きベクトルとなる（Ｓ２１〜Ｓ２６）。なお、ｍｅｄｉａｎ（Ｘ、Ｙ、Ｚ）は３つの値Ｘ、Ｙ、Ｚの内、中間の値を返す関数である。
【００１５】
ここで、プリフェッチメモリを用いて複数の動きベクトル検出部が並列に動きベクトル検出を行う従来技術について説明する。図４は、従来技術の動作を説明するための図である。図４に示す例では、２つの動きベクトル検出部が並列に動きベクトルを検出する例を示す。以降では、２つの動きベクトル検出部をコア部１とコア部２とも呼ぶ。
【００１６】
図４に示すコア１は、コア部１の処理対象マクロブロックを示し、コア２は、コア部２の処理対象マクロブロックを示す。
【００１７】
Ｈ．２６４ではＰ＿Ｓｋｉｐベクトルの計算など、隣接ブロックＡ、Ｂ、Ｃ、Ｄをどのように符号化したかの情報が必要となる。そのため、２つのマクロブロックを並列に処理する場合、図４に示すようにコア１とコア２とは、垂直位置が１ＭＢだけずれており、水平方向には２ＭＢ以上ずれている。
【００１８】
図４に示すマクロブロックの関係であれば、各動きベクトル検出部で処理するマクロブロックの隣接ブロックＡ、Ｂ、Ｃ、Ｄについて、すでに符号化を完了していることが保証できる。
【００１９】
参照ピクチャの内、動きベクトル検出部（コア部１）は、破線の範囲ｒｇ１１を探索範囲として、この探索範囲ｒｇ１１内の領域の画像を動きベクトル検出で使用する。動きベクトル検出部（コア部２）は、一点鎖線の範囲ｒｇ１２を探索範囲として、この探索範囲ｒｇ１２内の領域の画像を動きベクトル検出で使用する。
【００２０】
コア部１及びコア部２が、次の右隣のマクロブロックを対象に動きベクトル検出する際、探索範囲ｒｇ１１の領域、探索範囲ｒｇ１２の領域は、ともに右に１ＭＢ分シフトした領域となる。現在動きベクトル検出中のＭＢと次に動きベクトル検出を行うＭＢの参照ピクチャのうち、重複する領域はプリフェッチメモリ内に保存が維持され、新たに必要な領域ａｒ１２がＳＤＲＡＭからプリフェッチメモリ内に読み込まれる。
【００２１】
読み込まれた領域ａｒ１２は、プリフェッチメモリの中で不要になる領域ａｒ１３を保存している領域に上書き保存される。図４に示す領域ａｒ１１は、プリフェッチメモリに保存されている画像領域を表す。
【００２２】
動きベクトル検出では、より広い参照ピクチャ領域の中から最適な動きベクトルを検出した方が、処理対象マクロブロックにより似た参照ブロックを見つけ出せる可能性があるため望ましい。
【００２３】
しかし、従来技術では、プリフェッチメモリが蓄積保存している領域ａｒ１１に比べて、動きベクトルの検出対象としている範囲（探索範囲ｒｇ１１や探索範囲ｒｇ１２）は小さい。よって、従来技術では、プリフェッチメモリ内の領域を効率よく用いて動きベクトルを検出していない。
【００２４】
ここで、動きベクトル検出の探索範囲として、プリフェッチメモリ内の領域のうち垂直方向で最大の領域を利用する場合、次のような問題点がある。図５は、探索範囲を広げた場合の問題点を説明するための図である。
【００２５】
図５に示すように、例えば、コア部１では、探索範囲ｒｇ２１で動きベクトル検出を行ったとし、マクロブロックＢ、マクロブロックＣでの動きベクトルがｍｖ＿Ｂ，ｍｖ＿Ｃになったとする。
【００２６】
このとき、コア部２で処理するＭＢ（コア２）の上隣接ブロックＢと右上隣接ブロックＣの動きベクトルはｍｖ＿Ｂ、ｍｖ＿Ｃとなることになる。ここで、コア２の左隣ブロックＡの動きベクトルｍｖ＿Ａが０ベクトルであれば、図２に示すフローチャートによりＰ＿Ｓｋｉｐベクトルｍｖ＿ｓｋｉｐは０ベクトルとなる。
【００２７】
しかし、隣接ブロックＡの動きベクトルｍｖ＿Ａが０ベクトルでないときは、ｍｖ＿Ａ，ｍｖ＿Ｂ，ｍｖ＿Ｃのｍｅｄｉａｎによりｍｖ＿ｓｋｉｐが計算される。このとき、図５に示すように、ｍｖ＿Ｂ，ｍｖ＿Ｃがともに下方向に大きなベクトルの場合、ｍｖ＿ｓｋｉｐはｍｅｄｉａｎ値をとるため、ｍｖ_ｓｋｉｐも下方向に大きなベクトルとなる。
【００２８】
この場合、コア２に対するｍｖ＿ｓｋｉｐの位置の参照ブロックは、プリフェッチメモリの保持範囲外になる。よって、コア部２で処理するマクロブロックは、Ｐ＿Ｓｋｉｐの位置の参照ブロックが処理対象マクロブロックとの間で類似度（差分絶対値和）を計算することができない。つまり、ＭＢをＰ＿Ｓｋｉｐで符号化してよいかどうかの判定ができなくなり、符号化効率の良いＰ＿Ｓｋｉｐが選択されなくなってしまう。
【００２９】
そこで、開示の技術は、適切に探索範囲を広げることで符号化効率を向上させることができる動画像符号化装置及び動画像符号化方法を提供することを目的とする。
【課題を解決するための手段】
【００３０】
開示の一態様における動画像符号化装置は、ブロックライン毎に並列に動きベクトル検出を行って動画像の符号化を行う動画像符号化装置であって、それぞれの動きベクトル検出で用いられる参照画像の探索範囲を含む領域を記憶する記憶部と、処理対象ブロックに対する左隣接ブロックの動きベクトルに基づいて、前記記憶部に記憶された領域内の探索範囲を可変にして、該処理対象ブロックの動きベクトル検出を行う複数の動きベクトル検出部と、を備え、前記記憶部は、各動きベクトル検出部で用いられ、処理対象ブロックから水平方向及び垂直方向それぞれに所定画素数を設定した基準の所定領域を示す基準探索範囲を含む領域を記憶し、前記複数の動きベクトル検出部は、前記左隣接ブロックの動きベクトルが、前記基準探索範囲以内の領域を指す場合には、前記記憶部に記憶された領域の垂直成分を最大にした探索範囲に対して動きベクトル検出を行い、前記左隣接ブロックの動きベクトルが、前記基準探索範囲の垂直成分を超える領域を指す場合には、前記処理対象ブロックに対して前記基準探索範囲を用いて動きベクトル検出を行う。
【発明の効果】
【００３１】
開示の技術によれば、適切に探索範囲を広げることで符号化効率を向上させることができる。
【図面の簡単な説明】
【００３２】
【図１】処理対象ブロックと隣接ブロックとの関係を示す図。
【図２】Ｐ＿Ｓｋｉｐマクロブロックの動きベクトルの算出処理を示すフローチャート。
【図３】通常のＰ＿Ｓｋｉｐベクトル算出処理を示すフローチャート。
【図４】従来技術の動作を説明するための図。
【図５】探索範囲を広げた場合の問題点を説明するための図。
【図６】実施例における動画像符号化装置の構成の一例を示すブロック図。
【図７】各動きベクトル検出部で算出される符号化コストの一例を示す図。
【図８】保持される参照ピクチャの領域の遷移例を示す図。
【図９】左隣接ブロックの動きベクトルについて説明するための図。
【図１０】Ｐ＿Ｓｋｉｐで候補ベクトルとなる動きベクトルを有する左隣接ブロックの一例を示す図。
【図１１】探索範囲テーブル（その１）の一例を示す図。
【図１２】探索範囲テーブル（その２）の一例を示す図。
【図１３Ａ】処理対象ブロックが１６×１６の場合の初期探索範囲の一例を示す図。
【図１３Ｂ】処理対象ブロックが１６×１６の場合の制限された探索範囲の一例を示す図。
【図１４Ａ】処理対象ブロックが上１６×８の場合の初期探索範囲の一例を示す図。
【図１４Ｂ】処理対象ブロックが下１６×８の場合の初期探索範囲の一例を示す図。
【図１４Ｃ】処理対象ブロックが下１６×８の場合の初期探索範囲の一例を示す図。
【図１５Ａ】処理対象ブロックが左８×１６の場合の初期探索範囲の一例を示す図。
【図１５Ｂ】処理対象ブロックが左８×１６の場合の制限された探索範囲の一例を示す図。
【図１５Ｃ】処理対象ブロックが右８×１６の場合の初期探索範囲の一例を示す図。
【図１６Ａ】処理対象ブロックが左上８×８の場合の初期探索範囲の一例を示す図。
【図１６Ｂ】処理対象ブロックが右上８×８の場合の初期探索範囲の一例を示す図
【図１６Ｃ】処理対象ブロックが左下８×８の場合の初期探索範囲の一例を示す図
【図１６Ｄ】処理対象ブロックが左下８×８の場合の制限された探索範囲の一例を示す図。
【図１６Ｅ】処理対象ブロックが右下８×８の場合の初期探索範囲の一例を示す図。
【図１７Ａ】処理対象ブロックが１６×１６の場合の初期探索範囲の一例を示す図。
【図１７Ｂ】処理対象ブロックが１６×１６の場合の制限された探索範囲の一例を示す図。
【図１８Ａ】処理対象ブロックが上１６×８の場合の初期探索範囲の一例を示す図。
【図１８Ｂ】処理対象ブロックが下１６×８の場合の初期探索範囲の一例を示す図。
【図１８Ｃ】処理対象ブロックが下１６×８の場合の初期探索範囲の一例を示す図。
【図１９Ａ】処理対象ブロックが左８×１６の場合の初期探索範囲の一例を示す図。
【図１９Ｂ】処理対象ブロックが左８×１６の場合の制限された探索範囲の一例を示す図。
【図１９Ｃ】処理対象ブロックが右８×１６の場合の初期探索範囲の一例を示す図。
【図２０Ａ】処理対象ブロックが左上８×８の場合の初期探索範囲の一例を示す図。
【図２０Ｂ】処理対象ブロックが右上８×８の場合の初期探索範囲の一例を示す図
【図２０Ｃ】処理対象ブロックが左下８×８の場合の初期探索範囲の一例を示す図
【図２０Ｄ】処理対象ブロックが左下８×８の場合の制限された探索範囲の一例を示す図。
【図２０Ｅ】処理対象ブロックが右下８×８の場合の初期探索範囲の一例を示す図。
【図２１】全体制御部における動画像符号化の制御処理の一例を示すフローチャート。
【図２２】動きベクトル検出処理の一例を示すフローチャート。
【図２３】探索範囲の決定処理（その１）の一例を示すフローチャート。
【図２４】探索範囲の決定処理（その２）の一例を示すフローチャート。
【図２５】動画像符号化装置のハードウェアの一例を示すブロック図。
【発明を実施するための形態】
【００３３】
以下、添付図面を参照しながら実施例について詳細に説明する。
【００３４】
［実施例］
＜構成＞
図６は、実施例における動画像符号化装置１の構成の一例を示すブロック図である。実施例における動画像符号化装置１は、動画像符号化部１０と、第１記憶部２０とを有する。
【００３５】
動画像符号化装置１は、例えば、ハードワイヤードロジックにより構成された専用の回路やマッピング情報により回路構成が変更されるＦＰＧＡ（Field Programmable Gate Array）などにより実現される。また、動画像符号化装置１は、例えば、プロセッサやＤＳＰおよびメモリなどで構成されるコンピュータを、インストールしたプログラムで動作させることにより実現される。
【００３６】
動画像符号化部１０は、例えばＬＳＩ（Large Scale Integration）により実現され、第１記憶部２０は、外部メモリとしてのＳＤＲＡＭとして実現されうる。
【００３７】
図６に示す動画像符号化部１０は、符号化規格に準拠した符号化を行う。動画像符号化部１０は、例えば、Ｈ．２６４エンコーダである。実施例に適用できる符号化規格は、Ｈ．２６４以外にも、Ｐ＿Ｓｋｉｐのモードと同様の処理を含む符号化規格であればよい。
【００３８】
第１記憶部２０は、例えばカメラで撮像された符号化処理対象の画像、動きベクトル検出で使用する参照ピクチャ、符号化処理が完了して得られた符号化データなどを蓄積保存する。
【００３９】
次に、動画像符号化部１０について詳細に説明する。動画像符号化部１０は、全体制御部１００と、第２記憶部２００と、第１動きベクトル検出部３００と、第２動きベクトル検出部４００と、第１符号化部５００と、第２符号化部６００とを有する。
【００４０】
全体制御部１００は、第２記憶部２００と、第１動きベクトル検出部３００と、第２動きベクトル検出部４００とを制御する。例えば、全体制御部１００は、第１動きベクトル検出部３００と、第２動きベクトル検出部４００とを同時に２つのマクロブロック（ＭＢ）の動きベクトルを並列に検出するよう制御する。
【００４１】
第２記憶部２００は、第１動きベクトル検出部３００と、第２動きベクトル検出部４００とで用いられる参照ピクチャの探索範囲を含む領域を記憶する。例えば、第２記憶部２００は、図４や図５に示す保持領域ａｒ１１を記憶し、ＭＢの処理が進む度に、保持する領域の破棄と更新を繰り返す。
【００４２】
第２記憶部２００は、例えばプリフェッチＲＡＭなどである。第２記憶部２００に記憶された参照ピクチャの領域は、第１動きベクトル検出部３００や第２動きベクトル検出部４００により読み出される。
【００４３】
第１動きベクトル検出部３００及び第２動きベクトル検出部４００は、処理対象ブロックに対する左隣接ブロックの動きベクトルに基づいて、第２記憶部２００に記憶された領域内の探索範囲を可変にして、処理対象ブロックの動きベクトル検出を行う。処理対象ブロックは、例えば処理対象のマクロブロックやサブマクロブロックである。
【００４４】
以下では、第１動きベクトル検出部３００の構成について説明するが、第２動きベクトル検出部４００は、第１動きベクトル検出部３００と同様の構成を有する。
【００４５】
第１動きベクトル検出部３００は、制御部３０１と、隣接ブロックベクトル保存メモリ３０２と、差分絶対値和計算部３０３と、原画メモリ３０４と、比較部３０５と、結果保存メモリ３０６と、判定部３０７とを有する。
【００４６】
制御部３０１は、全体制御部１００から信号を受け取り、第１動きベクトル検出部３００全体の制御を行う。また、制御部３０１は、評価対象の動きベクトルのベクトルコストを計算し、比較部３０５に通知する。
【００４７】
制御部３０１は、処理対象ブロックに対する左隣接ブロックの動きベクトルに基づいて、処理対象ブロックの探索範囲を決定し、差分絶対値和計算部３０３に通知する。また、制御部３０１は、さらに処理対象ブロックのブロックサイズや位置に基づいて、探索範囲を決定してもよい。探索範囲の決定方法については後述する。
【００４８】
隣接ブロックベクトル保存メモリ３０２は、後述する判定部３０７が出力するｍｂ＿ｔｙｐｅ及び動きベクトルに基づき、後に動きベクトル検出を行うＭＢの隣接ブロックとしての動きベクトルと参照フレーム番号とを保存する。
【００４９】
差分絶対値和計算部３０３は、原画メモリ３０４と、第２記憶部２００とからそれぞれ処理対象ＭＢのデータと、参照ブロックのデータとを取得し、差分絶対値和の計算を行う。差分絶対値和計算部３０３は、制御部３０１から通知された探索範囲の参照ブロックを第２記憶部２００から取得する。
【００５０】
比較部３０５は、差分絶対値和計算部３０３から取得した差分絶対値和と、制御部３０１から取得したベクトルコストとを加算した値と、結果保存メモリ３０６に保存されている最小コストとを比較する。
【００５１】
比較部３０５は、加算された「差分絶対値和＋ベクトルコスト（総コスト）」の方が小さいと判定した場合は、結果保存メモリ３０６に記憶された内容を、加算された「差分絶対値和＋ベクトルコスト」で上書きする。これにより、１つの処理対象ブロックに対して、最小となる「差分絶対値和＋ベクトルコスト」が結果保存メモリ３０６に記憶される。
【００５２】
結果保存メモリ３０６は、比較部３０５から出力される「差分絶対値和＋ベクトルコスト」を処理対象ブロック毎に記憶する。
【００５３】
判定部３０７は、結果保存メモリ３０６に記憶された内容を読み出し、合計コストが小さいモードをｍｂ＿ｔｙｐｅとして選択し、ｍｂ＿ｔｙｐｅとｍｂ＿ｔｙｐｅに対応する動きベクトルとを第１符号化部５００に出力する。
【００５４】
第１動きベクトル検出部３００と第２動きベクトル検出部４００とは、お互いに他方の動きベクトル検出部のｍｂ＿ｔｙｐｅと動きベクトルを取得し、自身の隣接ブロックベクトル保存メモリに格納する。
【００５５】
第２動きベクトル検出部４００は、上記と同様の処理を行い、ｍｂ＿ｔｙｐｅとｍｂ＿ｔｙｐｅに対応する動きベクトルとを第２符号化部６００に出力する。
【００５６】
第１符号化部５００又は第２符号化部６００は、対応する動きベクトル検出部から取得したｍｂ＿ｔｙｐｅと動きベクトルとに基づいて、処理対象ＭＢを符号化し、符号化データであるビットストリームを生成する。
【００５７】
また、第１符号化部５００又は第２符号化部６００は、生成したビットストリームを第１記憶部２０に書き込む。このとき、第１符号化部５００又は第２符号化部６００は、動きベクトルで指定される参照ブロックを第２記憶部２００から読み出して用いる。また、第１符号化部５００又は第２符号化部６００は、次以降に処理するピクチャの参照ピクチャとして使用するため、再構成画像を第１記憶部２０に書き出す。再構成画像は、ローカルデコード画像などとも呼ばれる。
【００５８】
（符号化コスト）
図７は、各動きベクトル検出部で算出される符号化コストの一例を示す図である。図７に示す例では、処理対象ブロックは、１６×１６、１６×８、８×１６、８×８のマクロブロック、又はＰ＿Ｓｋｉｐがある。なお、処理対象ブロックは、４×４まで分割されたサブブロックを用いるようにしてもよい。以下では、８×８を最小のブロックサイズとして説明する。
【００５９】
差分絶対値和計算部３０３で、各ブロックサイズでの差分絶対値和が計算され、制御部３０１で、各ブロックサイズでの動きベクトルコストが計算される。判定部３０７では、各ブロックサイズで符号化コスト（総コスト）が最小となるブロックサイズを示すｍｂ＿ｔｙｐｅやその動きベクトルが出力される。
【００６０】
（第２記憶部に保持される領域の遷移）
次に、第２記憶部２００に記憶される参照ピクチャの領域が、１ＭＢ処理する毎にどのように遷移するかについて説明する。図８は、保持される参照ピクチャの領域の遷移例を示す図である。図８に示す例では、例えば動きベクトル検出を、水平方向±３２、垂直方向±１６画素の領域に対して行うとする。
【００６１】
この水平方向±３２、垂直方向±１６を、ここでは基準探索範囲と呼ぶ。また、基準探索範囲は、第２記憶部に記憶される領域内で、処理対象ブロックから水平方向、及び垂直方向に対称に範囲を広げていった場合の限界範囲をいう。
【００６２】
図８の（１）に示す領域ａｒ１０１は、初期読込み領域を示す。領域ａｒ１０１は、水平方向４８（１６＋３２）画素、垂直方向３２（１６＋１６）画素の矩形領域である。ブロックｂ１０１は、例えば第２動きベクトル検出部４００（コア部２）により処理される１６×１６のマクロブロックを示す。ブロックｂ１０１の動きベクトル検出が終了すると、第２記憶部２００に記憶される参照ピクチャの領域が更新される。
【００６３】
図８の（２）に示す領域ａｒ１０２は、ブロックｂ１０１の処理が終わり、参照ピクチャの領域が更新されるときに、第１記憶部２０から読み込まれる領域を示す。第２動きベクトル検出部４００は、ブロックを１つ右に移動させ、ブロックｂ１０２に対し、動きベクトル検出を行う。
【００６４】
図８の（３）に示す領域ａｒ１０３は、ブロックｂ１０２の処理が終わり、参照ピクチャの領域が更新されるときに、第１記憶部２０から読み込まれる領域を示す。第２動きベクトル検出部４００は、ブロックを１つ右に移動させ、ブロックｂ１０３に対し、動きベクトル検出を行う。
【００６５】
また、図８の（３）に示すブロックｂ１５１は、例えば第１動きベクトル検出部３００（コア部１）により処理される１６×１６のマクロブロックを示す。
【００６６】
図８の（４）に示す領域ａｒ１０４は、ブロックｂ１０３の処理が終わり、参照ピクチャの領域が更新されるときに、第１記憶部２０から読み込まれる領域を示す。第２動きベクトル検出部４００は、ブロックを１つ右に移動させ、ブロックｂ１０４に対し、動きベクトル検出を行う。第１動きベクトル検出部３００は、ブロックを１つ右に移動させ、ブロックｂ１５２に対し、動きベクトル検出を行う。
【００６７】
図８の（５）に示す領域ａｒ１０５は、ブロックｂ１０４の処理が終わり、参照ピクチャの領域が更新されるときに、第１記憶部２０から読み込まれる領域を示す。第２動きベクトル検出部４００は、ブロックを１つ右に移動させ、ブロックｂ１０５に対し、動きベクトル検出を行う。第１動きベクトル検出部３００は、ブロックを１つ右に移動させ、ブロックｂ１５３に対し、動きベクトル検出を行う。
【００６８】
図８の（６）に示す領域ａｒ１０６は、ブロックｂ１０５の処理が終わり、参照ピクチャの領域が更新されるときに、第１記憶部２０から読み込まれる領域を示す。図８の（６）に示す領域ａｒ１５１は、第２記憶部２００に記憶された領域から領域ａｒ１０６を更新する時に不要な領域として削除（破棄）される領域を示す。
【００６９】
第２動きベクトル検出部４００は、ブロックを１つ右に移動させ、ブロックｂ１０６に対し、動きベクトル検出を行う。第１動きベクトル検出部３００は、ブロックを１つ右に移動させ、ブロックｂ１５４に対し、動きベクトル検出を行う。
【００７０】
図８の（７）に示す領域ａｒ１０７は、ブロックｂ１０７の１つ左のブロックの処理が終わり、参照ピクチャの領域が更新されるときに、第１記憶部２０から読み込まれる領域を示す。図８の（７）に示す領域ａｒ１５２は、第２記憶部２００に記憶された領域から領域ａｒ１０７を更新する時に不要な領域として削除（破棄）される領域を示す。
【００７１】
第２動きベクトル検出部４００は、ブロックを１つ右に移動させ、ブロックｂ１０７に対し、動きベクトル検出を行う。第１動きベクトル検出部３００は、ブロックを１つ右に移動させ、ブロックｂ１５５に対し、動きベクトル検出を行う。
【００７２】
図８の（８）に示す領域ａｒ１０８は、ブロックｂ１０７の処理が終わり、参照ピクチャの領域が更新されるときに、第１記憶部２０から読み込まれる領域を示す。図８の（８）に示す領域ａｒ１５３は、第２記憶部２００に記憶された領域から領域ａｒ１０８を更新する時に不要な領域として削除（破棄）される領域を示す。
【００７３】
第２動きベクトル検出部４００は、ブロックを１つ右に移動させ、ブロックｂ１０８に対し、動きベクトル検出を行う。第１動きベクトル検出部３００は、ブロックを１つ右に移動させ、ブロックｂ１５６に対し、動きベクトル検出を行う。
【００７４】
図８の（９）に示す領域ａｒ１０９は、ブロックｂ１０８の処理が終わり、参照ピクチャの領域が更新されるときに、第１記憶部２０から読み込まれる領域を示す。図８の（９）に示す領域ａｒ１５４は、第２記憶部２００に記憶された領域から領域ａｒ１０９を更新する時に不要な領域として削除（破棄）される領域を示す。
【００７５】
第２動きベクトル検出部４００は、処理ブロックを、ブロックライン２つ下の左端に移動させ、ブロックｂ１０９に対し、動きベクトル検出を行う。第１動きベクトル検出部３００は、ブロックを１つ右に移動させ、ブロックｂ１５７に対し、動きベクトル検出を行う。
【００７６】
以上の処理を繰り返すことで、第２記憶部２００に記憶される参照ピクチャの領域が遷移する。実施例における各動きベクトル検出部は、第２記憶部２００に記憶される参照ピクチャの領域からできるだけ広い探索範囲を決定し、動きベクトルの検出を行う。このとき、各動きベクトル検出部は、Ｐ＿Ｓｋｉｐの発生確率を下げることなく、探索範囲を決定する。
【００７７】
＜探索範囲の決定＞
次に、探索範囲の決定処理について説明する。まず、処理対象ブロックの探索範囲を決定するのに用いられる、左隣接ブロックの動きベクトルについて説明する。
【００７８】
図９は、左隣接ブロックの動きベクトルについて説明するための図である。図９に示すブロックｂ２０１は、最大サイズの処理対象ブロックであり、ブロックｂ２０２は、符号化済みの左隣接ブロックである。最大サイズの処理対象ブロックは、例えば１６×１６のマクロブロックである。
【００７９】
図９に示すように、処理対象ブロックに対する左隣接ブロックは、最大サイズの処理対象ブロックの左に隣接する最大サイズのブロックのうち、左下画素を含むブロックである。図９に示す例では、左隣接ブロックｂ２０２の左下画素を含むブロックの動きベクトルが、１つ下のブロックラインの処理時に、Ｈ．２６４のＰ＿Ｓｋｉｐで用いられる隣接ブロックの候補ベクトルとなる。候補ベクトルとは、Ｐ＿Ｓｋｉｐのｍｅｄｉａｎ処理の対象となる動きベクトルをいう。
【００８０】
図１０は、Ｐ＿Ｓｋｉｐで候補ベクトルとなる動きベクトルを有する左隣接ブロックの一例を示す図である。図１０（Ａ）に示す例では、左隣接ブロックのｍｂ＿ｔｙｐｅが１６×１６の場合、１６×１６のブロックｂ３０１の動きベクトルが、１つ下のブロックラインの処理時のＰ＿Ｓｋｉｐで候補ベクトルとして用いられる。
【００８１】
図１０（Ｂ）に示す例では、左隣接ブロックのｍｂ＿ｔｙｐｅが１６×８の場合、下１６×８のブロックｂ３０２の動きベクトルが、１つ下のブロックラインの処理時のＰ＿Ｓｋｉｐで候補ベクトルとして用いられる。
【００８２】
図１０（Ｃ）に示す例では、左隣接ブロックのｍｂ＿ｔｙｐｅが８×１６の場合、左８×１６のブロックｂ３０３の動きベクトルが、１つ下のブロックラインの処理時のＰ＿Ｓｋｉｐで候補ベクトルとして用いられる。
【００８３】
図１０（Ｄ）に示す例では、左隣接ブロックのｍｂ＿ｔｙｐｅが８×８の場合、左下８×８のブロックｂ３０４の動きベクトルが、１つ下のブロックラインの処理時のＰ＿Ｓｋｉｐで候補ベクトルとして用いられる。図１０に示すブロックサイズ、位置にあるブロックｂ３０１〜ｂ３０４のブロックを、以降では候補ブロックとも呼ぶ。
【００８４】
図１０に示すように、１つ下のブロックラインの処理時に、上の隣接ブロックとしてＰ＿Ｓｋｉｐの候補ブロックにならない上１６×８、右８×１６、左上８×８、右上８×８、右下８×８のブロックについては、探索範囲を基準探索範囲よりも広げてもよい。これらのブロックを、以降では、非候補ブロックとも呼ぶ。
【００８５】
つまり、処理対象ブロックが、非候補ブロックである場合は、各動きベクトル検出部は、基準探索範囲よりも広い範囲で動きベクトル検出を行う。基準探索範囲よりも広い範囲とは、例えば、第２記憶部２００に記憶された領域の垂直成分を最大にした探索範囲である。
【００８６】
また、処理対象ブロックが、候補ブロックである場合であっても、左隣の処理済候補ブロックの動きベクトルが、基準探索範囲以内の領域を指す動きベクトルであれば、各動きベクトル検出部は、基準探索範囲よりも広い範囲で動きベクトル検出を行う。
【００８７】
また、処理対象ブロックが、候補ブロックである場合、左隣の処理済候補ブロックの動きベクトルが、基準探索範囲よりも広い範囲内の領域を指す動きベクトルであれば、各動きベクトル検出部は、基準探索範囲内で動きベクトル検出を行う。
【００８８】
なぜなら、図５に示すように、水平方向に隣接するブロック同士で基準探索範囲よりも広い範囲内の領域を指す動きベクトルとなった場合、１つ下のブロックラインの処理時に、Ｐ＿Ｓｋｉｐの動きベクトルが第２記憶部２００に記憶された領域外を指すことになるからである。
【００８９】
そこで、水平方向で連続して大きい動きベクトルが求められないように、大きい動きベクトルが求められた場合には、次のブロックの探索範囲を基準探索範囲に制限する。これにより、Ｐ＿Ｓｋｉｐの動きベクトルが指す位置の参照ブロックが、第２記憶部２００に記憶された領域内であることを保証することができる。なお、大きい動きベクトルとは、基準探索範囲よりも広い範囲内の参照ブロックを指す動きベクトルをいう。
【００９０】
また、各動きベクトル検出部は、処理対象ブロックのブロックサイズや位置によらず、水平方向のブロックで連続して大きい動きベクトルが求められないように処理してもよい。この処理だけでも、Ｐ＿Ｓｋｉｐの発生確率を低下させずに探索範囲を広げることで符号化効率を向上させることができる。
【００９１】
（探索範囲テーブル）
次に、各動きベクトル検出部で決定される初期の探索範囲について説明する。図１１は、探索範囲テーブル（その１）の一例を示す図である。図１１に示す探索範囲テーブルは、例えば偶数行のマクロブロックを処理する第１動きベクトル検出部３００が用いる探索範囲テーブルである。
【００９２】
この探索範囲テーブルは、例えば制御部３０１により保持される。制御部３０１は、全体制御部１００から処理対象ブロックのブロックサイズと位置とを通知されたときに、探索範囲テーブルを用いて初期の探索範囲を決定し、差分絶対値和計算部３０３に通知する。
【００９３】
初期の探索範囲と呼ぶ理由は、左隣接ブロックの動きベクトルが大きい動きベクトルであった場合、探索範囲が制限され、探索範囲が変わるからである。
【００９４】
図１２は、探索範囲テーブル（その２）の一例を示す図である。図１２に示す探索範囲テーブルは、例えば奇数行のマクロブロックを処理する第２動きベクトル検出部４００が用いる探索範囲テーブルである。この探索範囲テーブルは、例えば第２動きベクトル検出部４００の制御部により保持される。初期の探索範囲の決定については、第１動きベクトル検出部３００の処理と同様である。
【００９５】
なお、図１１、１２に示す例は、基準探索範囲を、水平±３２、垂直±１６とした場合の例である。
【００９６】
（探索範囲の具体例）
次に、各動きベクトル検出部で決定される探索範囲の具体例について説明する。まず、第１動きベクトル検出部３００により決定される探索範囲について説明する。なお、以降の図面において、水平、垂直ともピクチャ外にある矢印の矢印方向を＋とする。
【００９７】
図１３Ａは、処理対象ブロックが１６×１６の場合の初期探索範囲の一例を示す図である。図１３Ａに示すように、図１１に示す探索範囲テーブルを用いて、制御部３０１は、水平±３２、垂直＋３２、−１６を初期の探索範囲と決定する。
【００９８】
図１３Ｂは、処理対象ブロックが１６×１６の場合の制限された探索範囲の一例を示す図である。図１３Ｂに示すように、制御部３０１は、左隣の候補ブロック（図１０参照）の動きベクトルが大きい動きベクトルである場合、探索範囲を基準探索範囲（水平±３２、垂直±１６）に制限する。これは、１つ下のブロックラインの処理時（コア部２による処理時）にＰ＿Ｓｋｉｐの動きベクトルが、第２記憶部２００に記憶された領域内の位置を参照することを保証するためである。
【００９９】
図１４Ａは、処理対象ブロックが上１６×８の場合の初期探索範囲の一例を示す図である。図１４Ａに示すように、図１１に示す探索範囲テーブルを用いて、制御部３０１は、水平±３２、垂直＋４０、−１６を初期の探索範囲と決定する。なお、上１６×８のブロックは、非候補ブロックであるので、この初期の探索範囲が動きベクトル検出で用いられる。
【０１００】
図１４Ｂは、処理対象ブロックが下１６×８の場合の初期探索範囲の一例を示す図である。図１４Ｂに示すように、図１１に示す探索範囲テーブルを用いて、制御部３０１は、水平±３２、垂直＋３２、−２４を初期の探索範囲と決定する。
【０１０１】
図１４Ｃは、処理対象ブロックが下１６×８の場合の制限された探索範囲の一例を示す図である。図１４Ｃに示すように、制御部３０１は、左隣の候補ブロックの動きベクトルが大きい動きベクトルである場合、探索範囲を基準探索範囲（水平±３２、垂直±１６）に制限する。
【０１０２】
図１５Ａは、処理対象ブロックが左８×１６の場合の初期探索範囲の一例を示す図である。図１５Ａに示すように、図１１に示す探索範囲テーブルを用いて、制御部３０１は、水平＋４０、−３２、垂直＋３２、−１６を初期の探索範囲と決定する。
【０１０３】
図１５Ｂは、処理対象ブロックが左８×１６の場合の制限された探索範囲の一例を示す図である。図１５Ｂに示すように、制御部３０１は、左隣の候補ブロックの動きベクトルが大きい動きベクトルである場合、探索範囲を基準探索範囲（水平±３２、垂直±１６）に制限する。
【０１０４】
図１５Ｃは、処理対象ブロックが右８×１６の場合の初期探索範囲の一例を示す図である。図１５Ｃに示すように、図１１に示す探索範囲テーブルを用いて、制御部３０１は、水平＋３２、−４０、垂直＋３２、−１６を初期の探索範囲と決定する。なお、右８×１６のブロックは、非候補ブロックであるので、この初期の探索範囲が動きベクトル検出で用いられる。
【０１０５】
図１６Ａは、処理対象ブロックが左上８×８の場合の初期探索範囲の一例を示す図である。図１６Ａに示すように、図１１に示す探索範囲テーブルを用いて、制御部３０１は、水平＋４０、−３２、垂直＋４０、−１６を初期の探索範囲と決定する。なお、左上８×８のブロックは、非候補ブロックであるので、この初期の探索範囲が動きベクトル検出で用いられる。
【０１０６】
図１６Ｂは、処理対象ブロックが右上８×８の場合の初期探索範囲の一例を示す図である。図１６Ｂに示すように、図１１に示す探索範囲テーブルを用いて、制御部３０１は、水平＋３２、−４０、垂直＋４０、−１６を初期の探索範囲と決定する。なお、右上８×８のブロックは、非候補ブロックであるので、この初期の探索範囲が動きベクトル検出で用いられる。
【０１０７】
図１６Ｃは、処理対象ブロックが左下８×８の場合の初期探索範囲の一例を示す図である。図１６Ｃに示すように、図１１に示す探索範囲テーブルを用いて、制御部３０１は、水平＋４０、−３２、垂直＋３２、−２４を初期の探索範囲と決定する。
【０１０８】
図１６Ｄは、処理対象ブロックが左下８×８の場合の制限された探索範囲の一例を示す図である。図１６Ｄに示すように、制御部３０１は、左隣の候補ブロックの動きベクトルが大きい動きベクトルである場合、探索範囲を基準探索範囲（水平±３２、垂直±１６）に制限する。
【０１０９】
図１６Ｅは、処理対象ブロックが右下８×８の場合の初期探索範囲の一例を示す図である。図１６Ｅに示すように、図１１に示す探索範囲テーブルを用いて、制御部３０１は、水平＋３２、−４０、垂直＋３２、−２４を初期の探索範囲と決定する。なお、右下８×８のブロックは、非候補ブロックであるので、この初期の探索範囲が動きベクトル検出で用いられる。
【０１１０】
次に、第２動きベクトル検出部４００により決定される探索範囲について説明する。図１７Ａは、処理対象ブロックが１６×１６の場合の初期探索範囲の一例を示す図である。図１７Ａに示すように、図１２に示す探索範囲テーブルを用いて、第２動きベクトル検出部４００の制御部は、水平±３２、垂直＋１６、−３２を初期の探索範囲と決定する。
【０１１１】
図１７Ｂは、処理対象ブロックが１６×１６の場合の制限された探索範囲の一例を示す図である。図１７Ｂに示すように、第２動きベクトル検出部４００の制御部は、左隣の候補ブロック（図１０参照）の動きベクトルが大きい動きベクトルである場合、探索範囲を基準探索範囲（水平±３２、垂直±１６）に制限する。これは、１つ下のブロックラインの処理時（コア部１による処理時）にＰ＿Ｓｋｉｐの動きベクトルが、第２記憶部２００に記憶された領域内の位置を参照することを保証するためである。
【０１１２】
図１８Ａは、処理対象ブロックが上１６×８の場合の初期探索範囲の一例を示す図である。図１８Ａに示すように、図１２に示す探索範囲テーブルを用いて、第２動きベクトル検出部４００の制御部は、水平±３２、垂直＋２４、−３２を初期の探索範囲と決定する。なお、上１６×８のブロックは、非候補ブロックであるので、この初期の探索範囲が動きベクトル検出で用いられる。
【０１１３】
図１８Ｂは、処理対象ブロックが下１６×８の場合の初期探索範囲の一例を示す図である。図１８Ｂに示すように、図１２に示す探索範囲テーブルを用いて、第２動きベクトル検出部４００の制御部は、水平±３２、垂直＋１６、−４０を初期の探索範囲と決定する。
【０１１４】
図１８Ｃは、処理対象ブロックが下１６×８の場合の制限された探索範囲の一例を示す図である。図１８Ｃに示すように、第２動きベクトル検出部４００の制御部は、左隣の候補ブロックの動きベクトルが大きい動きベクトルである場合、探索範囲を基準探索範囲（水平±３２、垂直±１６）に制限する。
【０１１５】
図１９Ａは、処理対象ブロックが左８×１６の場合の初期探索範囲の一例を示す図である。図１９Ａに示すように、図１２に示す探索範囲テーブルを用いて、第２動きベクトル検出部４００の制御部は、水平＋４０、−３２、垂直＋１６、−３２を初期の探索範囲と決定する。
【０１１６】
図１９Ｂは、処理対象ブロックが左８×１６の場合の制限された探索範囲の一例を示す図である。図１９Ｂに示すように、第２動きベクトル検出部４００の制御部は、左隣の候補ブロックの動きベクトルが大きい動きベクトルである場合、探索範囲を基準探索範囲（水平±３２、垂直±１６）に制限する。
【０１１７】
図１９Ｃは、処理対象ブロックが右８×１６の場合の初期探索範囲の一例を示す図である。図１９Ｃに示すように、図１２に示す探索範囲テーブルを用いて、第２動きベクトル検出部４００の制御部は、水平＋３２、−４０、垂直＋１６、−３２を初期の探索範囲と決定する。なお、右８×１６のブロックは、非候補ブロックであるので、この初期の探索範囲が動きベクトル検出で用いられる。
【０１１８】
図２０Ａは、処理対象ブロックが左上８×８の場合の初期探索範囲の一例を示す図である。図２０Ａに示すように、図１２に示す探索範囲テーブルを用いて、第２動きベクトル検出部４００の制御部は、水平＋４０、−３２、垂直＋２４、−３２を初期の探索範囲と決定する。なお、左上８×８のブロックは、非候補ブロックであるので、この初期の探索範囲が動きベクトル検出で用いられる。
【０１１９】
図２０Ｂは、処理対象ブロックが右上８×８の場合の初期探索範囲の一例を示す図である。図２０Ｂに示すように、図１２に示す探索範囲テーブルを用いて、第２動きベクトル検出部４００の制御部は、水平＋３２、−４０、垂直＋２４、−３２を初期の探索範囲と決定する。なお、右上８×８のブロックは、非候補ブロックであるので、この初期の探索範囲が動きベクトル検出で用いられる。
【０１２０】
図２０Ｃは、処理対象ブロックが左下８×８の場合の初期探索範囲の一例を示す図である。図２０Ｃに示すように、図１２に示す探索範囲テーブルを用いて、第２動きベクトル検出部４００の制御部は、水平＋４０、−３２、垂直＋１６、−４０を初期の探索範囲と決定する。
【０１２１】
図２０Ｄは、処理対象ブロックが左下８×８の場合の制限された探索範囲の一例を示す図である。図２０Ｄに示すように、第２動きベクトル検出部４００の制御部は、左隣の候補ブロックの動きベクトルが大きい動きベクトルである場合、探索範囲を基準探索範囲（水平±３２、垂直±１６）に制限する。
【０１２２】
図２０Ｅは、処理対象ブロックが右下８×８の場合の初期探索範囲の一例を示す図である。図２０Ｅに示すように、図１２に示す探索範囲テーブルを用いて、第２動きベクトル検出部４００の制御部は、水平＋３２、−４０、垂直＋１６、−４０を初期の探索範囲と決定する。なお、右下８×８のブロックは、非候補ブロックであるので、この初期の探索範囲が動きベクトル検出で用いられる。
【０１２３】
以上より、各動きベクトル検出部は、処理対象ブロックのブロックサイズと位置、及び左隣接ブロックの動きベクトルに基づいて、探索範囲を可変にして動きベクトル検出を行う。なお、各動きベクトル検出部は、処理対象ブロックの左隣接ブロックの動きベクトルのみに基づいて、探索範囲を可変にしてもよい。
【０１２４】
＜動作＞
次に、動画像符号化装置１の動作について説明する。図２１は、全体制御部１００における動画像符号化の制御処理の一例を示すフローチャートである。図２１に示す処理は、１ピクチャに対する処理である。
【０１２５】
図２１に示すステップＳ１０１で、全体制御部１００は、第２記憶部２００に対して、初期領域の読み込み指示を行う。処理領域は、例えば図８の（１）に示す領域ａｒ１０１である。
【０１２６】
ステップＳ１０２で、全体制御部１００は、各動きベクトル検出部に対して、１ＭＢの動きベクトル検出処理の開始を指示する。動きベクトル検出処理については図２２を用いて後述する。
【０１２７】
ステップＳ１０３で、全体制御部１００は、各動きベクトル検出部から動きベクトルの検出完了の通知を受けると、未処理のＭＢが残っていないかを判定する。全てのＭＢで処理が完了していれば（ステップＳ１０３−ＹＥＳ）この処理は終了し、未処理のＭＢがあれば（ステップＳ１０３−ＮＯ）ステップＳ１０４に進む。
【０１２８】
ステップＳ１０４で、全体制御部１００は、第２記憶部２００に対し、次のＭＢの動きベクトル検出を行うために、保持されている参照ピクチャの領域の更新を指示する。この更新の例については、図８を参照されたい。ステップＳ１０４の処理が終わると、次のＭＢで動きベクトル検出処理を行うため、ステップＳ０２に進む。
【０１２９】
次に、処理対象ブロックに対する動きベクトル検出処理について説明する。図２２は、動きベクトル検出処理の一例を示すフローチャートである。図２２に示す例では、第１動きベクトル検出部３００が１ＭＢに対して行う処理を説明するが、第２動きベクトル検出部でも同様の処理を行う。
【０１３０】
ステップＳ２０１で、制御部３０１は、処理対象ＭＢにおける処理対象ブロックのブロックサイズ及び位置が異なる処理対象ブロックの選択を行う。例えば、制御部３０１は、１６×１６、上１６×８、下１６×８、左８×１６、右８×１６、左上８×８、右上８×８、左下８×８、右下８×８の順で選択する。
【０１３１】
ステップＳ２０２で、制御部３０１は、処理対象ブロックに対する左隣接ブロックの動きベクトルに基づいて、又は左隣接ブロックの動きベクトル、処理対象ブロックのブロックサイズ及び位置に基づいて、探索範囲を決定する。この決定処理は、図２３を用いて後述する。
【０１３２】
ステップＳ２０３で、差分絶対値和計算部３０３は、決定された探索範囲の中で差分絶対値和が最小となる動きベクトルを検出する。比較部３０５は、より差分絶対値和が小さい動きベクトルが見つかると、結果保存メモリ３０６に保存し、暫定的な動きベクトルと最小差分絶対値和を上書きしていく。
【０１３３】
ステップＳ２０４で、制御部３０１は、全ての処理対象ブロックで処理が完了したか否かを判定する。全ての処理対象ブロックで処理が終了すれば（ステップＳ２０４−ＹＥＳ）ステップＳ２０５に進み、全ての処理対象ブロックで処理が終了していなければ（ステップＳ２０４−ＮＯ）ステップＳ２０１に戻る。
【０１３４】
ステップＳ２０５で、差分絶対値和計算部３０３は、１６×１６のブロックサイズでＰ＿Ｓｋｉｐベクトルの位置での差分絶対値和を計算する。比較部３０５は、Ｐ＿Ｓｋｉｐベクトルと差分絶対値和とを結果保存メモリ３０６に書き込む。ステップＳ２０５の終了時点で、図７に示すような内容が、結果保存メモリ３０６に保持される。
【０１３５】
ステップＳ２０６で、判定部３０７は、結果保存メモリ３０６の内容を読み出し、ブロックサイズ１６×１６，１６×８，８×１６，８×８，Ｐ＿Ｓｋｉｐに対して総コストを計算し、総コストが最小となるブロックサイズｍｂ＿ｔｙｐｅを決定する。
【０１３６】
ステップＳ２０７で、判定部３０７は、決定したｍｂ＿ｔｙｐｅとｍｂ＿ｔｙｐｅに対応する動きベクトルとを、隣接ブロックベクトル保存メモリ３０２に書き込む。
【０１３７】
ステップＳ２０８で、判定部３０７は、決定したｍｂ＿ｔｙｐｅとｍｂ＿ｔｙｐｅに対応する動きベクトルとを、第１符号化部５００と、第２動きベクトル検出部４００とに出力する。
【０１３８】
次に、探索範囲の決定処理について説明する。図２３は、探索範囲の決定処理（その１）の一例を示すフローチャートである。図２３に示す処理は、第１動きベクトル検出部３００において、処理対象ブロック毎に行われる探索範囲の決定処理である。
【０１３９】
ステップＳ３０１で、制御部３０１は、処理対象ブロックのブロックサイズや位置に基づいて図１１を参照し、初期の探索範囲を決定する。
【０１４０】
ステップＳ３０２で、制御部３０１は、処理対象ブロックが候補ブロックであり、左隣接ＭＢのＭＶの垂直成分が、基準探索範囲の垂直成分を超えているかを判定する。具体的には、候補ブロックは、例えば１６×１６、下１６×８、左８×１６、左下８×８であり、基準探索範囲の垂直成分は、例えば＋１６である。
【０１４１】
ステップＳ３０２の条件を満たせば（ステップＳ３０２−ＹＥＳ）ステップＳ３０３に進み、この条件を満たさなければ（ステップＳ３０２−ＮＯ）決定処理が終了する。
【０１４２】
ステップＳ３０３で、制御部３０１は、決定された初期の探索範囲を、基準探索範囲に変更する。基準探索範囲は、例えば水平±３２、垂直±１６である。
【０１４３】
図２４は、探索範囲の決定処理（その２）の一例を示すフローチャートである。図２４に示す処理は、第２動きベクトル検出部４００において、処理対象ブロック毎に行われる探索範囲の決定処理である。
【０１４４】
ステップＳ４０１で、第２動きベクトル検出部４００の制御部は、処理対象ブロックのブロックサイズや位置に基づいて図１２を参照し、初期の探索範囲を決定する。
【０１４５】
ステップＳ４０２で、第２動きベクトル検出部４００の制御部は、処理対象ブロックが候補ブロックであり、左隣接ＭＢのＭＶの垂直成分が、基準探索範囲の垂直成分を超えているかを判定する。具体的には、候補ブロックは、例えば１６×１６、下１６×８、左８×１６、左下８×８であり、基準探索範囲の垂直成分は、例えば＋１６である。
【０１４６】
ステップＳ４０２の条件を満たせば（ステップＳ４０２−ＹＥＳ）ステップＳ４０３に進み、この条件を満たさなければ（ステップＳ４０２−ＮＯ）決定処理が終了する。
【０１４７】
ステップＳ４０３で、第２動きベクトル検出部４００の制御部は、決定された初期の探索範囲を、基準探索範囲に変更する。基準探索範囲は、例えば水平±３２、垂直±１６である。
【０１４８】
上記のように、探索範囲を決定することで、全てのＭＢでＰ＿Ｓｋｉｐベクトルが第２記憶部２００内の領域を指すことを保証できる。
【０１４９】
以上、実施例によれば、適切に探索範囲を広げることで符号化効率を向上させることができる。また、実施例によれば、Ｐ＿Ｓｋｉｐの発生確率を低下させずに探索範囲を広げることができ、Ｐ＿ＳｋｉｐのＭＶが指す領域は、第２記憶部２００内にあることを保証することができる。
【０１５０】
［変形例］
上記実施例では、説明を簡単にするため、２つの動きベクトル検出部を用いて説明したが、３つ以上の動きベクトル検出部であっても、実施例で説明した処理を拡張すれば、実施例同様に探索範囲を可変にすることができる。
【０１５１】
また、動画像符号化装置は、動画像符号化部１０を表し、第１記憶部２０は、動画像符号化部１０から外部に存在するということで、外部メモリと表してもよい。つまり、動画像符号化装置とは、動画像符号化部１０のＬＳＩ部分を表してもよいし、動画像符号化部１０と第１記憶部２０とを含む装置を表してもよい。
【０１５２】
図２５は、動画像符号化装置２のハードウェアの一例を示すブロック図である。図２５に示す例では、上記実施例の処理を動画像符号化プログラムとし、動画像符号化装置２の制御部５０１で動画像符号化プログラムを読み取らせ、上記実施例の処理を実行させる。
【０１５３】
図２５に示す動画像符号化装置２は、制御部７０１と、主記憶部７０２と、補助記憶部７０３と、ドライブ装置７０４と、ネットワークＩ／Ｆ部７０６と、入力部７０７と、表示部７０８を有する。これら各構成は、バスを介して相互にデータ送受信可能に接続されている。
【０１５４】
制御部７０１は、コンピュータの中で、各装置の制御やデータの演算、加工を行うＣＰＵである。また、制御部７０１は、主記憶部７０２や補助記憶部７０３に記憶された動画像符号化プログラムを実行する演算装置であり、入力部７０７や記憶装置からデータを受け取り、演算、加工した上で、表示部７０８や記憶装置などに出力する。
【０１５５】
主記憶部７０２は、ＲＯＭ（Read Only Memory）やＲＡＭ（Random Access Memory）などであり、制御部７０１が実行する基本ソフトウェアであるＯＳやアプリケーションソフトウェアなどのプログラムやデータを記憶又は一時保存する記憶装置である。
【０１５６】
実施例における第２記憶部２００は、例えばプリフェッチＲＡＭであり、動きベクトル検出部の各メモリは、例えばＲＡＭであり、第１記憶部２０は、例えばＳＤＲＡＭである。
【０１５７】
補助記憶部７０３は、ＨＤＤ（Hard Disk Drive）などであり、アプリケーションソフトウェアなどに関連するデータを記憶する記憶装置である。
【０１５８】
ドライブ装置７０４は、記録媒体７０５、例えばフレキシブルディスクからプログラムを読み出し、記憶装置にインストールする。
【０１５９】
また、記録媒体７０５に、所定のプログラムを格納し、この記録媒体７０５に格納されたプログラムはドライブ装置７０４を介して動画像符号化装置３０にインストールされる。インストールされた所定のプログラムは、動画像符号化装置３０により実行可能となる。
【０１６０】
ネットワークＩ／Ｆ部７０６は、有線及び／又は無線回線などのデータ伝送路により構築されたＬＡＮ（Local Area Network）、ＷＡＮ（Wide Area Network）などのネットワークを介して接続された通信機能を有する周辺機器と動画像符号化装置２とのインターフェースである。
【０１６１】
入力部７０７は、カーソルキー、数字入力及び各種機能キー等を備えたキーボード、表示部７０８の表示画面上でキーの選択等を行うためのマウスやスライスパット等を有する。また、入力部７０７は、ユーザが制御部７０１に操作指示を与えたり、データを入力したりするためのユーザインターフェースである。
【０１６２】
表示部７０８は、ＣＲＴ（Cathode Ray Tube）やＬＣＤ（Liquid Crystal Display）等を含み、制御部７０１から入力される表示データに応じた表示が行われる。
【０１６３】
例えば、全体制御部１００や、各動きベクトル検出部、各符号化部は、制御部７０１やワークメモリとしての主記憶部７０２などにより実現されうる。
【０１６４】
このように、上記実施例で説明した動画像符号化処理は、コンピュータに実行させるためのプログラムとして実現されてもよい。このプログラムをサーバ等からインストールしてコンピュータに実行させることで、前述した動画像符号化処理を実現することができる。例えば、前述した動きベクトル検出処理は、プログラムとして実現されてもよい。
【０１６５】
また、この動画像符号化プログラムを記録媒体７０５に記録し、このプログラムが記録された記録媒体７０５をコンピュータや携帯端末に読み取らせて、前述した動画像符号化処理を実現させることも可能である。
【０１６６】
なお、記録媒体７０５は、ＣＤ−ＲＯＭ、フレキシブルディスク、光磁気ディスク等の様に情報を光学的，電気的或いは磁気的に記録する記録媒体、ＲＯＭ、フラッシュメモリ等の様に情報を電気的に記録する半導体メモリ等、様々なタイプの記録媒体を用いることができる。また、前述した実施例で説明した各処理部は、１つ又は複数の処理部を１つ又は複数の集積回路に実装されてもよい。
【０１６７】
以上、実施例について詳述したが、この実施例に限定されるものではなく、特許請求の範囲に記載された範囲内において、上記実施例や変形例以外にも種々の変形及び変更が可能である。
【０１６８】
なお、以上の実施例に関し、さらに以下の付記を開示する。
（付記１）
ブロックライン毎に並列に動きベクトル検出を行って動画像の符号化を行う動画像符号化装置であって、
それぞれの動きベクトル検出で用いられる参照画像の探索範囲を含む領域を記憶する記憶部と、
処理対象ブロックに対する左隣接ブロックの動きベクトルに基づいて、前記記憶部に記憶された領域内の探索範囲を可変にして、該処理対象ブロックの動きベクトル検出を行う複数の動きベクトル検出部と、
を備える動画像符号化装置。
（付記２）
前記記憶部は、
各動きベクトル検出部で用いられる基準の所定領域を示す基準探索範囲を含む領域を記憶し、
前記複数の動きベクトル検出部は、
前記記憶部に記憶される領域の垂直成分を最大にした探索範囲に対して動きベクトル検出を行い、前記左隣接ブロックの動きベクトルが、前記基準探索範囲の垂直成分を超える領域を指す場合には、前記処理対象ブロックに対して前記基準探索範囲を用いて動きベクトル検出を行う付記１記載の動画像符号化装置。
（付記３）
前記複数の動きベクトル検出部は、
前記処理対象ブロックのサイズ及び位置にさらに基づいて、前記探索範囲を可変にする付記１又は２記載の動画像符号化装置。
（付記４）
前記複数の動きベクトル検出部は、
前記処理対象ブロックが、Ｈ．２６４のＰ＿Ｓｋｉｐで用いられる隣接ブロックとなるブロックであれば、前記基準探索範囲に対して動きベクトル検出を行う付記３記載の動画像符号化装置。
（付記５）
各ブロックサイズの処理対象ブロックの符号化処理が完了すると、前記参照画像を記憶する画像記憶部から次の処理対象ブロックで探索範囲となる領域の一部を読出し、前記記憶部に記憶される領域の更新を制御する全体制御部をさらに備える付記１乃至４いずれか一項に記載の動画像符号化装置。
（付記６）
複数の動きベクトル検出部でブロックライン毎に並列に動きベクトル検出を行って、動画像の符号化を行う動画像符号化装置が実行する動画像符号化方法であって、
それぞれの動きベクトル検出で用いられる参照画像の探索範囲を含む領域を記憶部に記憶し、
各動きベクトル検出部で、処理対象ブロックに対する左隣接ブロックの動きベクトルに基づいて、前記記憶部に記憶された領域内の探索範囲を可変にして、該処理対象ブロックの動きベクトル検出を行う処理を有する動画像符号化方法。
【符号の説明】
【０１６９】
１、２  動画像符号化装置
１０  動画像符号化部
２０  第１記憶部
１００  全体制御部
２００  第２記憶部
３００  第１動きベクトル検出部
３０１  制御部
３０２  隣接ブロックベクトル保存メモリ
３０３  差分絶対値和計算部
３０４  原画メモリ
３０５  比較部
３０６  結果保存メモリ
３０７  判定部
４００  第２動きベクトル検出部
５００  第１符号化部
６００  第２符号化部
７０１  制御部
７０２  主記憶部
【図１】
0005938935.tif 000002
【図２】
0005938935.tif 000003
【図３】
0005938935.tif 000004
【図４】
0005938935.tif 000005
【図５】
0005938935.tif 000006
【図６】
0005938935.tif 000007
【図７】
0005938935.tif 000008
【図８】
0005938935.tif 000009
【図９】
0005938935.tif 000010
【図１０】
0005938935.tif 000011
【図１１】
0005938935.tif 000012
【図１２】
0005938935.tif 000013
【図１３Ａ】
0005938935.tif 000014
【図１３Ｂ】
0005938935.tif 000015
【図１４Ａ】
0005938935.tif 000016
【図１４Ｂ】
0005938935.tif 000017
【図１４Ｃ】
0005938935.tif 000018
【図１５Ａ】
0005938935.tif 000019
【図１５Ｂ】
0005938935.tif 000020
【図１５Ｃ】
0005938935.tif 000021
【図１６Ａ】
0005938935.tif 000022
【図１６Ｂ】
0005938935.tif 000023
【図１６Ｃ】
0005938935.tif 000024
【図１６Ｄ】
0005938935.tif 000025
【図１６Ｅ】
0005938935.tif 000026
【図１７Ａ】
0005938935.tif 000027
【図１７Ｂ】
0005938935.tif 000028
【図１８Ａ】
0005938935.tif 000029
【図１８Ｂ】
0005938935.tif 000030
【図１８Ｃ】
0005938935.tif 000031
【図１９Ａ】
0005938935.tif 000032
【図１９Ｂ】
0005938935.tif 000033
【図１９Ｃ】
0005938935.tif 000034
【図２０Ａ】
0005938935.tif 000035
【図２０Ｂ】
0005938935.tif 000036
【図２０Ｃ】
0005938935.tif 000037
【図２０Ｄ】
0005938935.tif 000038
【図２０Ｅ】
0005938935.tif 000039
【図２１】
0005938935.tif 000040
【図２２】
0005938935.tif 000041
【図２３】
0005938935.tif 000042
【図２４】
0005938935.tif 000043
【図２５】
0005938935.tif 000044