(57)【特許請求の範囲】
【請求項１】
入力画像中の対象画像と、この対象画像に時間的に近接する参照画像との間で、上記対象画像をブロック分割して得られる対象ブロックと上記参照画像内の参照ブロックとを比較することにより動きベクトルを探索する動きベクトル探索方法において、
上記対象画像のデータが記憶された対象メモリ及び上記参照画像のデータが記憶された参照メモリから、それぞれ処理単位となる対象処理ブロック及び参照処理ブロックを読み出す工程と、
これらの読み出された上記処理単位となる対象処理ブロック及び参照処理ブロックに対して、複数の動きベクトルについての上記処理単位毎の部分評価値を並列的に計算する工程と、
上記対象ブロックに対応する複数の対象処理ブロックについて計算された上記部分評価値を各動きベクトル毎に合成することにより各動きベクトル毎の評価値を得る工程と、
得られた動きベクトル毎の評価値を比較することにより当該対象ブロックについての最適の動きベクトルを求める工程とを有し、
上記参照処理ブロックを得るための分割法として上記対象処理ブロックに対して上記参照処理ブロックを水平、垂直方向に処理ブロックの１／２だけずらした位置関係で分割し、対象処理ブロックに対する処理ブロック単位の位置を中心とする周囲の４個の参照処理ブロックにおける複数個の動きベクトルの部分評価値を各動きベクトル毎に合成して、それぞれの動きベクトルの評価値を計算する
動きベクトル探索方法。
【請求項２】
上記参照処理ブロックを上記対象処理ブロックに対して処理ブロックの１／２だけずらした位置関係の第１の分割法と、上記参照処理ブロックを上記対象処理ブロックに対してずらさない位置関係の第２の分割法とを用い、これらの第１の分割法と第２の分割法とを選択的に切り替えて動きベクトルの探索を行う請求項１記載の動きベクトル探索方法。
【請求項３】
上記部分評価値を各動きベクトル毎に合成する際に、一部の部分評価値を積算した結果に基づいて動きベクトルの評価値を得る請求項１又は２記載の動きベクトル探索方法。
【請求項４】
上記対象処理ブロック及び参照処理ブロックは、上記対象ブロック及び参照ブロックを分割した対象サブブロック及び参照サブブロックであり、上記対象メモリ及び参照メモリからはそれぞれ対象サブブロック及び参照サブブロックのデータが読み出される請求項１記載の動きベクトル探索方法。
【請求項５】
上記動きベクトルの探索は、先に一部の動きベクトルについて評価値計算を行って最適ベクトルを求める粗粒度検索を行い、粗粒度検索により得られた最適ベクトルの近傍で画素単位以下の粒度の最適動きベクトルを求める細粒度検索を行う請求項１記載の動きベクトル探索方法。
【請求項６】
入力画像中の対象画像と、この対象画像に時間的に近接する参照画像との間で、上記対象画像をブロック分割して得られる対象ブロックと上記参照画像内の参照ブロックとを比較することにより動きベクトルを探索する動きベクトル探索装置において、
上記対象画像のデータが記憶された対象メモリと、
上記参照画像のデータが記憶された参照メモリと、
上記対象メモリ及び上記参照メモリから、それぞれ処理単位となる対象処理ブロック及び参照処理ブロックを読み出し、これらの読み出された上記処理単位となる対象処理ブロック及び参照処理ブロックに対して、複数の動きベクトルについての上記処理単位毎の部分評価値を並列的に計算し、上記対象ブロックに対応する複数の対象処理ブロックについて計算された上記部分評価値を各動きベクトル毎に合成することにより各動きベクトル毎の評価値を得、得られた動きベクトル毎の評価値を比較することにより当該対象ブロックについての最適の動きベクトルを求める動きベクトル検出計算部とを有し、
上記参照処理ブロックを得るための分割法として上記対象処理ブロックに対して上記参照処理ブロックを水平、垂直方向に処理ブロックの１／２だけずらした位置関係で分割し、対象処理ブロックに対する処理ブロック単位の位置を中心とする周囲の４個の参照処理ブロックにおける複数個の動きベクトルの部分評価値を各動きベクトル毎に合成して、それぞれの動きベクトルの評価値を計算する
動きベクトル探索装置。
【請求項７】
上記部分評価値を各動きベクトル毎に合成する際に、一部の部分評価値を積算した結果に基づいて動きベクトルの評価値を得る請求項６記載の動きベクトル探索装置。
【請求項８】
上記動きベクトルの探索は、先に一部の動きベクトルについて評価値計算を行って最適ベクトルを求める粗粒度検索を行い、粗粒度検索により得られた最適ベクトルの近傍で画素単位以下の粒度の最適動きベクトルを求める細粒度検索を行う請求項６記載の動きベクトル探索装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、入力画像中の対象画像とこの対象画像に時間的に近接する参照画像との間で、上記対象画像をブロック分割して得られる対象ブロックと上記参照画像内の参照ブロックとを比較することにより動きベクトルを探索する動きベクトル探索方法及び装置に関するものである。
【背景技術】
【０００２】
動画圧縮処理において、時間的に近接するフレーム間での画像の動き（動きベクトル）を検出し、その動きベクトルを用いて動き補償予測符号化を行うことが知られている。動画の動きベクトル検出は、ディジタルカメラの手振れ補正等にも用いられる。この動きベクトル検出には、種々の方法が存在するが、動きを検出する画像（対象画像）と対象画像に時間的に近接する画像（参照画像）との間での適当な大きさのブロック毎の比較処理を基本とする方法（いわゆるブロックマッチング法）が広く知られている。これは、入力画像をブロックに分割し、対象画像内の対象ブロックと参照画像内の探索範囲内の複数の参照ブロックとの間で比較処理を行って、対象ブロックに最も類似している参照ブロックを求める。このとき、対象ブロックを、探索範囲内の複数の参照ブロックとそれぞれ比較処理して類似度の評価値を求める。
【０００３】
このような動きベクトルの検出（動き検索、動き推定、動き予測等とも称される。）は、非常に計算量の多い処理として知られている。その一方で、より高画質で高フレームレートの動画の処理が求められている。そのため、動き検索の高速化は重要な技術テーマである。この高速化は、処理量の低減や処理の並列化によって実現される。
【０００４】
また、処理を行うデバイスの消費電力量の低減も大きなテーマであるが、低消費電力化の最も効果的な方法はデバイスの動作周波数を低減することだということが広く知られている。そのためには、同様に処理量の低減と処理の並列化が不可欠である。
【０００５】
さて、動きベクトル探索の高速化のために、様々な方法が提案されてきた。その中でも、非特許文献１に開示されているようなダイヤモンドサーチに代表される探索型の方法を用いることにより、高画質を保ちながら高速化を行うことができる。これらの探索型の方法では、まず動きベクトル平面上のあるベクトルを決め、その周辺を最初の探索エリアとする。そして、探索エリア内のベクトルを比較し、その中でより評価値が低いベクトルがある方角に次の探索エリアを設定する。これを、最終的に探索エリアの中心で評価値が最小になるか、全探索範囲（または画像）の外に出てしまうまで繰り返す。この方法によって、フルサーチ（全検索）に対して、探索するベクトル数を大幅に減らすことができる。しかしながら、この方法ではそれ以上に高速化する方法は述べていない。
【０００６】
さらなる高速化のためには、計算の並列化が必須である。計算の並列化のためには、効率的にメモリ上からデータをロードする技術が重要となるが、そのためのアーキテクチャが、例えば特許文献１のビデオ符号化及び復号化技術等で提案されている。この方法で、ベクトル毎に行われる評価値計算を並列化することができる。
【０００７】
【非特許文献１】S. Zhu and K. Ma, “A New Diamond Search Algorithm for Fast Block Matching Motion Estimation”, International Conference on Information, Communications and Signal Processing ICICS ’97 Singapore, 9-12 September 1997
【特許文献１】特表２００５−５３０４２０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
ところで、上記特許文献１には、さらにそれ以上に高速化する方法は述べられておらず、それ以上の高速化を実現するには、ベクトル毎の計算の並列化とともに、複数のベクトルに対する計算をも並列化することが必要となる。
【０００９】
本発明は、上述したような実情に鑑みて成されたものであって、動きベクトル探索のための全体の計算量を削減すると共に、低消費電力化を実現できるような動きベクトル探索方法及び装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述の課題を解決するために、本発明は、入力画像中の対象画像と、この対象画像に時間的に近接する参照画像との間で、上記対象画像をブロックに分割して得られる対象ブロックと上記参照画像内の参照ブロックとを比較することにより動きベクトルを探索する際に、上記対象画像のデータが記憶された対象メモリ及び上記参照画像のデータが記憶された参照メモリから、それぞれ処理単位となる対象処理ブロック及び参照処理ブロックを読み出し、これらの読み出された上記処理単位となる対象処理ブロック及び参照処理ブロックに対して、複数の動きベクトルについての上記処理単位毎の部分評価値を並列的に計算し、上記対象ブロックに対応する複数の対象処理ブロックについて計算された上記部分評価値を各動きベクトル毎に合成することにより各動きベクトル毎の評価値を得、得られた動きベクトル毎の評価値を比較することにより当該対象ブロックについての最適の動きベクトルを求めるようにし、上記参照処理ブロックを得るための分割法として上記対象処理ブロックに対して上記参照処理ブロックを水平、垂直方向に処理ブロックの１／２だけずらした位置関係で分割し、対象処理ブロックに対する処理ブロック単位の位置を中心とする周囲の４個の参照処理ブロックにおける複数個の動きベクトルの部分評価値を各動きベクトル毎に合成して、それぞれの動きベクトルの評価値を計算する。
【００１１】
ここで、上記対象処理ブロック及び参照処理ブロックは、上記対象ブロック及び参照ブロックを分割した対象サブブロック及び参照サブブロックであり、上記対象メモリ及び参照メモリからはそれぞれ対象サブブロック及び参照サブブロックのデータが読み出されることが挙げられる。
【００１２】
上記動きベクトルの探索は、先に一部の動きベクトルについて評価値計算を行って最適ベクトルを求める粗粒度検索を行い、粗粒度検索により得られた最適ベクトルの近傍で画素単位以下の粒度の最適動きベクトルを求める細粒度検索を行うことが好ましい。
【発明の効果】
【００１３】
本発明によれば、動きベクトル探索のための全体の計算量を削減し、また計算の並列化により探索の単位サイクル当たりの計算量を増大させて動作周波数を相対的に低下させ、低消費電力化を実現できる。
【発明を実施するための最良の形態】
【００１４】
以下、本発明の実施の形態について図面を参照しながら詳細に説明する。
【００１５】
図１は、本発明の実施の形態が適用される動画圧縮装置の構成例を示すブロック図である。
【００１６】
図１において、入力端子１１を介して入力された対象画像データは、動き検出部１２において、フレームメモリ１０に保存された参照画像データと高速で比較され、動きベクトルを生成し、動き補償部１３に動きベクトルを送信する。動き補償部１３では、対象画像データから、動きベクトルで指し示された参照画像データを引き算し、そのデータをＤＣＴ（離散コサイン変換）／量子化部１４へ送る。ＤＣＴ／量子化部１４では、データを離散コサイン変換・量子化し、そのデータをＲＬ（ランレングス符号化）／ＶＬＣ（可変長符号化）部１５へ送る。また、同データを逆量子化・逆コサイン変換し、動き補償部１３へ返送する。動き補償部１３では、ＤＣＴ／量子化部１４から送られたデータに、先ほど引き算した参照画像データを足し戻して、そのデータを参照画像用メモリに保存する。ＲＬ／ＶＬＣ部１５では、ＤＣＴ／量子化部１４から送られたデータに、ランレングス符号、可変長符号を順次かけて、その結果を圧縮データとして出力端子１６より出力する。
【００１７】
また、本発明の実施の形態の動きベクトル検出は、図２に示されるような手ぶれ補正装置に適用することもできる。この図２において、入力端子１１を介して入力された対象画像データは動き検出部１２に送られ、この動き検出部１２において、上記と同様に動きベクトルが生成される。手ぶれ補正部１７では、受け取った動きベクトルを用いて、画面全体の手ぶれベクトルを推定し、その情報をもとに手ブレ補正処理を実行し、出力端子１８より取り出される。
【００１８】
上述したような動画圧縮装置や手ぶれ補正装置に用いられる動き検出部１２における動き検出あるいは動き探索は、動きを検出する画像（対象画像）と対象画像に時間的に近接する画像（参照画像）を比較することにより行われる。
【００１９】
すなわち、先ず対象画像を適当な大きさのブロック、例えばピクセル単位で１６×１６サイズのマクロブロックに分割する。そして、図３に示すように、対象画像Ｐ内の各対象マクロブロックＰ−ＭＢと、参照画像Ｑ内の全てあるいはいくつかのマクロブロックＱ−ＭＢａ、Ｑ−ＭＢｂ、Ｑ−ＭＢｃ、・・・との間で比較処理を行い、どの参照ブロック（参照画像Ｑ内のマクロブロック）が対象ブロック（対象画像Ｐ内のマクロブロック）に似ているかを求める。この似ている度合を示す値として、一般的にＳＡＤ（Sum of Absolute Difference：絶対誤差和）や、ＳＳＤ（Sum of Squared Difference：誤差の２乗和）などの評価値を求め、より小さな値を持つブロックが選ばれる。そして、選ばれたブロックに対応するベクトルを、その対象ブロックにおける動きベクトルとする。これら動きベクトルは、図４に示すように、ベクトル平面上の点Ｖａ、Ｖｂ、Ｖｃ、・・・として表すことができる。対象マクロブロックと同位置の参照マクロブロックに対応するベクトルが原点（０，０）になる。
【００２０】
ここで、本実施の形態においては、動きを検出する画像（対象画像）と、対象画像に時間的に近接する画像（参照画像）とを、それぞれ上述したような１６×１６サイズ（１６×１６画素）のマクロブロックに分割する場合について説明する。また、参照画像における対象画像と同じ位置のマクロブロックと、その周辺の例えば８個のマクロブロックを動きベクトルの探索範囲とする。すなわち、図５に示すように、（Ａ）の対象画像のマクロブロックＰ−ＭＢに対して、（Ｂ）の参照画像における同じ位置（動きベクトル０）のマクロブロックＱ−ＭＢ０と周辺の８個のマクロブロックとから成る９個のマクロブロックを動きベクトルの探索範囲としており、この探索範囲はピクセル単位で４８×４８サイズとなる。これは、ベクトル平面上では水平・垂直方向ともに、ピクセル単位で−１６〜１６の範囲の動きベクトルの探索を行うことに相当する。
【００２１】
ここで、本実施の形態においては、対象画像のマクロブロックを１６個の４×４サイズのサブブロックに分割している。参照画像の探索範囲（４８×４８）も４×４サイズのサブブロックに分割されるが、参照画像における分割はマクロブロックを１６分割するのではなく、縦横に２ピクセルずつオフセットしたところで、サブブロックに分割されているため、探索範囲の端にあたるサブブロックに関しては、２×２、２×４、４×２などのサイズになる。
【００２２】
なお、上記実施の形態の各数値は一例を挙げているに過ぎず、例えば動き検出の単位となるブロック、探索範囲、サブブロックのサイズ等は、１６×１６サイズのマクロブロック、４８×４８サイズ、４×４サイズに限定されず、任意のサイズとすることができ、また、参照画像におけるサブブロック分割を縦横に２ピクセルずつオフセットさせることも任意に設定可能である。
【００２３】
対象画像データ及び参照画像データは、サブブロック単位でそれぞれのメモリに保存される。すなわち、メモリからは一度に４×４＝１６個のデータが読み出されることになる。図６に画像メモリ読み出し及び動きベクトル検出部分の回路ブロック図を示す。この図６において、上記動き検出部１２内の実際の計算処理を行う部分である動きベクトル検出計算部１２ｃは対象画像用メモリ１０ａ及び参照画像用メモリ１０ｂからそれぞれ読み出した画像データをもとに動きを検出し、その結果の動きベクトルを出力する。
【００２４】
本実施の形態において、参照画像上での探索範囲をピクセル単位で４８×４８サイズとするとき、１６×１６サイズのマクロブロックの動きベクトルは、水平・垂直方向ともに、上述したようにピクセル単位で−１６〜１６の範囲の動きベクトルの探索を行うことになる。すなわち、図７の（Ａ）は、動きベクトル平面上の探索範囲を示しており、基準となる原点（０，０）を中心として、水平・垂直方向にそれぞれ−１６〜１６の範囲で動きベクトル探索が行われる。
【００２５】
ここで、上記図６の動きベクトル検出計算部１２ｃは、画像用メモリ１０ａ及び参照画像用メモリ１０ｂから、それぞれ処理単位となる対象処理ブロック（対象サブブロック）及び参照処理ブロック（参照サブブロック）のデータを読み出し、これらの読み出された対象サブブロック及び参照サブブロックに対して、複数の動きベクトルについての部分評価値を並列的に計算し、上記対象ブロックに対応する複数の対象サブブロックについて計算された上記部分評価値を各動きベクトル毎に合成することにより各動きベクトル毎の評価値を得、得られた動きベクトル毎の評価値を比較することにより当該対象ブロックについての最適の動きベクトルを求めている。
【００２６】
本実施の形態における動きベクトルの探索は、おおまかに粗粒度探索、細粒度探索、半画素探索の３つのステップで行っている。これらの内の細粒度探索が画素単位の動きベクトル探索に相当し、粗粒度探索ではそれよりも粗い粒度で動きベクトル探索を行い、半画素探索では（１／２）画素あるいはより細かい粒度、例えば（１／４）画素単位で動きベクトル探索を行っている。
【００２７】
上記粗粒度探索について説明すると、先ず、図７の（Ａ）に示す動きベクトル平面の全探索範囲（−１６〜１６）を、より小さな探索範囲としてのサブ探索範囲に分割する。例えば図７の（Ｂ）には、５×５の範囲（サブ探索範囲）に分割する例を示している。
【００２８】
ここでは、全探索範囲を一度に全て探索し最適なベクトルを求めるのではなく、サブ探索範囲毎にそのサブ探索範囲内のベクトルの評価値を計算することにより、最適な動きベクトルが含まれるサブ探索範囲を決定する。この最適なサブ探索範囲が決定された後、上記細粒度探索、半画素探索が行われるが、これらの探索については後述する。
【００２９】
上記動きベクトル平面上でのサブ探索範囲の分割の例として、本実施の形態では、図８の（Ａ）、（Ｂ）に示す各分割法を用いている。図８の（Ａ）は、上記図７の（Ｂ）に示すサブ探索範囲に相当する。これらのサブ探索範囲毎にその範囲内のいくつかのベクトルで評価値計算が行われる。以下の説明においては、上記図８の（Ａ）に示す分割法を第１の分割法、上記図８の（Ｂ）に示す分割法を第２の分割法という。
【００３０】
すなわち、まず、あるサブ探索範囲を最初の探索範囲（初期サブ探索範囲）と決め、そのサブ探索範囲内のいくつかのベクトルの評価値を計算する。評価値の計算は上記ＳＡＤやＳＳＤなどの方法が用いられる。得られた結果として、当該サブ探索範囲内のベクトル毎の評価値の分布が明らかになり、この分布に基づいて次に探索を行うサブ探索範囲を決定する。例えば、図９の（Ａ）に示す動きベクトル平面上のあるサブ探索範囲ＶＳＡａにおいて、図中右側のベクトル群ＶＧの評価値が低い（評価値が低い方がより最適）場合には、このサブ探索範囲ＶＳＡａの右側のサブ探索範囲により低い評価値を持つベクトルが存在する可能性が高いことになる。そこで、図９の（Ｂ）に示すように、あるサブ探索範囲ＶＳＡａの右側で隣接するサブ探索範囲ＶＳＡｂに探索範囲を移し、このサブ探索範囲ＶＳＡｂ内で同様の探索を行う。なお、次に探索するサブ探索範囲としては、現在のサブ探索範囲と隣接するものに限定されず、重なりあうサブ探索範囲のうちの一つなどから選択するようにしてもよい。これを、最終的に最適な評価値を持つベクトルを発見するまで繰り返し、最終的に発見されたベクトルを最終的な結果とする。
【００３１】
ここで、上記図８の（Ａ）、（Ｂ）に示すそれぞれの分割法、すなわち上記第１、第２の分割法のサブ探索範囲で、互いに異なった評価値の計算方法を採用することにより、より高速に処理を行うことができる。以下に、それぞれにおける方法を述べる。
【００３２】
上記第１の分割法（上記図８の（Ａ）に示す分割法）を用いたときに得られるサブ探索範囲のベクトル平面とその平面内で評価値の計算が行われるベクトル群の例を、図１０に示す。サブ探索範囲は−２〜２の範囲なので、対象マクロブロック（１６×１６）に対して、２０×２０の参照データ範囲が必要である。この分割法を用いた場合の対象マクロブロックと参照データ範囲の位置的な関係は図１１のようになる。この図１１において、実線が対象画像のブロックを、破線が参照画像のブロックをそれぞれ示し、図１１に示されるように、対象サブブロックＰ−ＳＢと参照サブブロックＱ−ＳＢとは、縦横方向（水平、垂直方向）にそれぞれ２ピクセル（サブブロックの１／２）ずれて、メモリに格納されている。これは、例えば原点（０，０）が中心のサブ探索範囲を考えると、上記図５においてマクロブロックに重なる５×５＝２５個のサブブロックということになる。
【００３３】
次に、サブ探索範囲内の複数のベクトルにおける評価値を並列に求める方法の一例を説明する。以下、図１２〜図１６においては、対象画像のサブブロック等を実線で示し、参照画像のサブブロック等を破線で示している。まず、図１２に示すように、対象画像マクロブロックの左上の対象サブブロックＰ−ＳＢａと、その左上に位置する参照サブブロックＱ−ＳＢａをメモリから同時に読み出す。そして、図１２の（Ｂ）に示すように、読み出した対象サブブロックＰ−ＳＢａ及び参照サブブロックＱ−ＳＢａのそれぞれ１６個ずつのデータのうち、いくつかのデータ同士について評価値の一部（部分評価値）を計算する。
【００３４】
具体的には、図１３に示されるいくつかのパターンにおいて、斜線で示されるピクセル同士で部分評価値を計算する。すなわち、図１３において、対象サブブロックＰ−ＳＢａの中の斜線で示されるピクセルと参照サブブロックＱ−ＳＢａの斜線で示されるピクセルとが比較されて部分評価値が計算されることを意味する。これらのパターンが図１０に示すベクトル群のそれぞれに対応することになる。なお、図１３中のｖｅｃ（ｉ，ｊ）は、水平方向（ｘ方向）にｉ、垂直方向（ｙ方向）にｊの成分を有する動きベクトルについての部分評価値の計算を行うことを意味し、これは図１４以降も同様である。これらの計算は並列で行うことができるので、複数ベクトルの複数ピクセルの処理を並列で行っていることになる。以上の処理を図１２の対象画像マクロブロックの上記左上のサブブロックＰ−ＳＢａから例えばラスタースキャン順に右下のサブブロックＰ−ＳＢｎまで行う。この処理は、１６個の対象サブブロックがあるので、１６サイクルで終了することになる。
【００３５】
次に、図１２において、対象画像マクロブロックの左上のサブブロックＰ−ＳＢａと、今度はその右上に位置する参照サブブロックＱ−ＳＢｂとをメモリから同時に読み出す。そして、同様に読み出した１６個ずつのデータのうち、いくつかのデータ同士についての評価値の一部（部分評価値）を計算する。ただし、今度は図１４に示されるデータパターンを使用する。この処理を同様に全ての対象サブブロックＰ−ＳＢａ〜Ｐ−ＳＢｎに対して行う。
【００３６】
さらに、図１２の上記対象サブブロックＰ−ＳＢａとその右下の参照サブブロックＱ−ＳＢｃに対して、同様な処理を図１５のパターンに従って行い、また左下の参照サブブロックＱ−ＳＢｄに対する同様な処理を図１６のパターンに従って行う。
【００３７】
上記のプロセスにより、サブ探索範囲内において求めるべき全ての動きベクトルについての評価値が計算されたことになる。１６サイクルの処理を４回繰り返すので、全部で６４サイクルで全ての処理が終了することになる。
【００３８】
上述した図１３〜図１６は、サブブロックに対して異なったピクセルの組み合せのパターンを示しているが、これらは以下の点で関連している。すなわち、図１４、図１５、図１６のそれぞれのパターンを反時計回りに９０度回転させると、図１３、図１４、図１５のそれぞれのパターンと一致する。すなわち、図１４のパターンを９０度、図１５のパターンを１８０度、図１６のパターンを２７０度それぞれ反時計回りに回転させると、全てについて図１３のパターンが得られることがわかる。
【００３９】
このことから、例えば図１７に示すように、図１３のパターンを計算する手段であるパターン計算部２０と、サブブロックデータを９０度の倍数分回転させる手段である回転処理部２３、２４を用意しておけば、４種類全てのパターンの計算が行えることを示している。すなわち、図１７において、端子２１から供給された対象サブブロックＰ−ＳＢは回転処理部２３を介し、端子２２から供給された参照サブブロックＱ−ＳＢは回転処理部２４を介して、図１３のパターンを計算するパターン計算部２０にそれぞれ送られ、パターン計算部２０で計算されて得られた評価値が端子２５を介して出力される。
【００４０】
ここで得られた１３個のベクトルにおける評価値の値を用いて、次に探索を行うサブ探索範囲が選択される。例えば、最小の評価値を持つベクトルの方向にあるサブ探索範囲などが選ばれる。
【００４１】
次に、上記第２の分割法、すなわち上記図８の（Ｂ）に示す分割法を用いたときに得られるサブ探索範囲について説明する。ここで図１８は、上記第２の分割法の場合のサブ探索範囲のベクトル平面とその平面内で評価値の計算が行われるベクトル群の例を示すものである。この図１８におけるサブ探索範囲は−２〜２の範囲なので、対象マクロブロック（１６×１６）に対して、２０×２０の参照データ範囲が必要である。
【００４２】
この分割法を用いた場合の対象マクロブロックと参照データ範囲の位置的な関係は、図１９のようになる。図１９に示す対象サブブロックＰ−ＳＢ及び参照サブブロックＱ−ＳＢにおいて、サブ探索範囲のサーチに必要な範囲Ｈ内の参照サブブロックＱ−ＳＢは、対象マクロブロックの対象サブブロックＰ−ＳＢに一致している。
【００４３】
上記図１８で示されるベクトルにおいては、部分的な評価値のみが計算される。一般に評価値の計算は対象画像のマクロブロックの全てのピクセルと、それに対応する参照画像のマクロブロックのピクセルに対して計算されそれらの和が求められるが、ここでは、それらのピクセル群の一部のみに対してその計算が行われる。その理由の一つは、全ての値を計算しないことにより計算量を削減させ、高速化を可能とすることである。また、もう一つの理由としては、上記第２の分割法での計算の役割を、上記第１の分割法（上記図８の（Ａ）に示す分割法）で行われる計算の合間でだいたいの方向性を得るために用いることにすれば、高い精度の計算が必要とされないことが挙げられる。なお、上記第２の分割法で完全な評価値を計算するには、上記第１の分割法の時よりも多くの処理時間がかかってしまう。すなわち、１サブブロックの処理に対して上記第１の分割法では４サイクルだけしかかからなかったところを、上記第２の分割法では１サブブロックに対して一致する参照サブブロックと周囲の８サブブロックが必要になるため、９サイクルかかることになり、マクロブロックあたりのサイクル数にすると、９×１６＝１４４サイクルもかかってしまうことになる。この点からも、上記第２の分割法では、部分的な評価値のみを計算することが好ましい。
【００４４】
ここで、上記第２の分割法（上記図８の（Ｂ）の分割法）を、上記第１の分割法（上記図８の（Ａ）の分割法）による評価の補助手段として用いる点について説明する。本来的には、上記第１の分割法のみで図５に示す全探索範囲をカバーしており、全探索範囲をくまなく探索するためには上記第２の分割法は必要ない。しかし、より処理量を減らして高速化を可能とするために、本実施の形態では、全探索範囲について探索するのではなく全探索範囲の中である地点から始めて、その近傍でより評価値が低そうな地点を探し、それを最適と思われる地点を見つけるまで繰り返すという方法をとっている。この方法をとった場合に、サブ探索範囲が上記第１の分割法のみだと、斜め方向に評価値が低いベクトルがある場合に効率的に（より少ない処理量で）探索をすることができない。
【００４５】
例えば、図２０の（Ａ）に示すように、上記第１の分割法の動きベクトル平面上のサブ探索範囲ＶＳＡａ内の図中右上のベクトルＶｐにおいて最小の評価値が見つかったとき、次の動きベクトル探索はこのベクトルＶｐを中心として行うことが望ましい。ここで上記第１の分割法のみを用いる場合には、図２０の（Ｂ）に示す３箇所のサブ探索範囲ＶＳＡｂ、ＶＳＡｃ、ＶＳＡｄを新たに探索する必要がある。この方法をとると、確かにそのベクトル近傍においてかなり精度の高い探索を行えるが、その分処理量が大幅に増えてしまうことになる。
【００４６】
そこで、周囲の３箇所のサブ探索範囲を探索する代わりに、まず最初に見つかった動きベクトルＶｐを中心として、図２０の（Ｃ）に示すように、上記第２の分割法によるサブ探索範囲ＶＳＢａにおいて簡易的な探索を行う。このサブ探索範囲ＶＳＢａ内で８個の動きベクトルの評価値の計算結果に応じて、次に探索を行う上記第１の分割法のサブ探索範囲を決定する。例えば、図２０の（Ｃ）の例では図中右上側のベクトルＶｑ，Ｖｒ，Ｖｓの評価値が低い場合には、図２０の（Ｄ）に示すように、上記サブ探索範囲ＶＳＡｃを次の探索範囲とする。この方法により、それほど精度を落とすことなく処理量を減らすことができる。上記第１の分割法の範囲の探索に６４サイクル、上記第２の分割法の範囲の探索に１６サイクルがかかるとすれば、上記第１の分割法のみを用いる方法では１９２サイクルかかるのに対して、上記第２の分割法を併用する方法では８０サイクルで完了することができる。
【００４７】
次に、上記第２の分割法での評価値の計算法を説明する。まず、マクロブロックの左上の対象画像サブブロックとそれと一致する参照サブブロックをそれぞれメモリから読み出す。上記第１の分割法の場合と同様に、それら１６個ずつのデータを用いて、図２１に示されるようなパターンのピクセル同士で、評価値の一部（部分評価値）を計算する。この図２１において、対象サブブロックＰ−ＳＢの中の斜線で示されるピクセルと参照サブブロックＱ−ＳＢの斜線で示されるピクセルとが比較されて部分評価値が計算され、図中のｖｅｃ（ｉ，ｊ）は、水平方向（ｘ方向）にｉ、垂直方向（ｙ方向）にｊの成分を有する動きベクトルについての部分評価値の計算を行うことを意味している。
【００４８】
このような図２１に示すパターンに従った８個の動きベクトルについての部分評価値の計算を、マクロブロック内の全サブブロックに対して行う。本実施の形態において、この処理の後に得られる評価値は、完全な評価値にはならない。すなわち、対象画像マクロブロックと同じ範囲の参照データしか使用していないので、各ベクトルにおいてマクロブロック内の全てのピクセルに対して計算を行うことができていない。図２２及び図２３の斜線部のピクセルが、各ベクトルにおける計算がされるピクセルであり、白色部分は計算がされないピクセルである。ここで、図２２の（Ａ）が動きベクトル（−１，−１）の評価値計算の際に用いられるピクセルを示している。以下同様に、図２２の（Ｂ）、（Ｃ）、（Ｄ）が、それぞれ動きベクトル（１，−１）、（−１，１）、（１，１）の評価値計算の際に用いられるピクセルを、また、図２３の（Ａ）、（Ｂ）、（Ｃ）、（Ｄ）が、それぞれ動きベクトル（−２，０）、（０，−２）、（０，２）、（２，０）の評価値計算の際に用いられるピクセルを示している。
【００４９】
図２４に全２５６ピクセル中で、実際に計算されるピクセル数を示す。この図２４に示すように、ここで得られる評価値の値は部分的であるが、各ベクトルにおける計算されるピクセルの数は点対称であるため、評価値がより小さくなる方向を求めるという目的のためにはある程度の役割を果たす。ここで重要なことは次のサブ探索範囲を決定することであれば、そのためには評価値の相対的な情報が重要なのであり、評価値の絶対値は重要ではない。
【００５０】
なお、上記第２の分割法において、さらに精度の高い評価値を得る必要がある場合は、図２５に示すように、メモリからそれぞれのサブブロックを読み出した後に、いくつかのデータ（例えばサブブロックを縦に２分割した右側の２列）をキャッシュレジスタに保存しておき、次のサブブロックでの計算時に前のサブブロックのデータを使うという方法も考えられる。すなわち、この図２５において、対象サブブロックＰ−ＳＢａの右側２列分（８ピクセル分）の領域Ｐ−ＳＢａｒのデータと、参照サブブロックＱ−ＳＢａの右側２列分（８ピクセル分）の領域Ｑ−ＳＢａｒのデータとを、それぞれキャッシュレジスタに保存しておき、次のサブブロックＰ−ＳＢｂ、Ｑ−ＳＢｂでの計算時に、これらの領域Ｐ−ＳＢａｒ、Ｑ−ＳＢａｒを合わせたそれぞれ２４ピクセル分のデータを使うような方法である。
【００５１】
この場合、図２６及び図２７の斜線部のピクセルが、各動きベクトルについて計算がされるピクセルであり、白色部分は計算がされないピクセルである。また、図２６の（Ａ）、（Ｂ）、（Ｃ）、（Ｄ）が、それぞれ動きベクトル（−１，−１）、（１，−１）、（−１，１）、（１，１）の評価値計算の際に用いられるピクセルを示し、図２７の（Ａ）、（Ｂ）、（Ｃ）、（Ｄ）が、それぞれ動きベクトル（−２，０）、（０，−２）、（０，２）、（２，０）の評価値計算の際に用いられるピクセルを示している。
【００５２】
この方法を使うことにより、それぞれの動きベクトルについて、１マクロブロック当たりの全２５６ピクセル中で計算されるピクセル数は、図２８に示されるようになり、先ほどのキャッシュを使わない場合のピクセル数（図２４）に比べて大幅に精度が向上することがわかる。
【００５３】
上述した上記第２の分割法の場合には、対象サブブロックと一致する参照サブブロックを比較するのみなので、サブ探索範囲内の全ベクトルの評価値（の予測値）を求めるのに、対象サブブロックの数、つまり１６サイクルしかかからないことになる。すなわち、上記第２の分割法では、精度をある程度犠牲にしながらも、大幅な高速化がはかられたことになる。ここで得られたいくつかベクトルにおける評価値の値を用いて、上記図２０と共に説明したように、次に探索を行うサブ探索範囲が選択され、例えば、最小の評価値を持つベクトルの方向にあるサブ探索範囲などが選ばれる。
【００５４】
次に、上述したような第１、第２の分割法、すなわち上記図８の（Ａ）、（Ｂ）にそれぞれ示す分割法を用いた、動きベクトル探索（粗粒度探索）を行うためのハードウェアの構成例を図２９に示す。
【００５５】
図２９は、上記図６の動きベクトル検出計算部１２ｃの要部となる動きベクトル評価値計算処理部３０を示している。この図２９に示すハードウェア構成を有する動きベクトル評価値計算処理部３０は、８ベクトル分の評価値を並列で計算するものであり、この８ベクトルは、上記第１、第２の分割法で一度に評価値を並列計算する動きベクトル数に相当する。
【００５６】
図２９において、端子３１から供給された対象サブブロックＰ−ＳＢは回転処理部３３を介し、端子３２から供給された参照サブブロックＱ−ＳＢは回転処理部３４を介して、例えば上記図１３のパターンを計算するパターン計算部の評価値計算部３５ａ〜３５ｈにそれぞれ送られる。
【００５７】
回転処理部３３、３４は、図３０に示すように、（Ａ）〜（Ｄ）の４セットの回転回路を有し、図示のように４×４ピクセル（サブブロック）の範囲内で各ピクセル位置を０／９０／１８０／２７０度回転させる。なお、上記第２の分割法の場合は、回転処理を行わない。
【００５８】
評価値計算部３５ａ〜３５ｈは、上記第１の分割法の評価値計算の際には、上記図１３の８ベクトル分の各パターンに従った対象サブブロックＰ−ＳＢと参照サブブロックＱ−ＳＢとの各それぞれ対応するピクセルについての評価値が計算される。例えば、上記図１３の比較を行う場合、動きベクトルｖｅｃ（−２，−２）を計算するための評価値計算部３５ａには、対象サブブロックＰ−ＳＢ及び参照サブブロックＱ−ＳＢのそれぞれ１６ピクセル分を送り、ｖｅｃ（０，−２）を計算するための評価値計算部３５ｂには、対象サブブロックＰ−ＳＢ及び参照サブブロックＱ−ＳＢのそれぞれ８ピクセル分を送り、ｖｅｃ（−１，−１）を計算するための評価値計算部３５ｃには、対象サブブロックＰ−ＳＢ及び参照サブブロックＱ−ＳＢのそれぞれ９ピクセル分を送り、以下同様に、ｖｅｃ（１，−１）、ｖｅｃ（−２，０）、ｖｅｃ（０，０）及びｖｅｃ（−１，１）、ｖｅｃ（１，１）をそれぞれ計算するための評価値計算部３５ｄ、３５ｅ、３５ｆ、３５ｇ及び３５ｈには、対象サブブロックＰ−ＳＢ及び参照サブブロックＱ−ＳＢの各３、８、４、３及び１ピクセル分をそれぞれ送り、これらの８個の動きベクトルにおけるピクセル毎の評価値を並列に計算する。
【００５９】
これらの評価値計算部３５ａ〜３５ｈからの各ピクセル評価値は、それぞれ加算ツリー部３６ａ〜３６ｈに送られて、各動きベクトル毎に加算され、アキュームレータ部３７に送られる。
【００６０】
アキュームレータ部３７は、上記図１０に示す１３個の動きベクトルにそれぞれ対応する１３個の積算器ＡＣ１〜ＡＣ１３を有し、上記図１３〜図１６の各パターン毎にそれぞれ得られた８個の動きベクトルの評価値について、それぞれの動きベクトル毎に評価値を積算し、１３個の評価値を得る。これらの１３個の全ての評価値の積算が終了すると、それぞれの積算器ＡＣ１〜ＡＣ１３に蓄積された各動きベクトル毎の評価値の中から、最小値ブロック３８において最小値が決定され、それに対応するベクトルがそのサブ範囲における最適ベクトルとなり、動きベクトル評価値計算処理部３０の出力端子４１から最小評価値が、出力端子４２から最小評価値インデックスがそれぞれ取り出される。
【００６１】
上記第２の分割法の場合には、上記図２１に示したようなパターンに基づく各動きベクトルの評価値が計算され、同様に出力端子４１、４２から最小評価値、最小評価値インデックスがそれぞれ取り出される。
【００６２】
この第２の分割法の場合には、計算されるピクセル数の異なる部分評価値のみしか求めないので、それぞれの値を正規化してから最小値を求めるか、部分評価値の合計をそれぞれ求めてその値から最小値を求める等が必要となる。すなわち、各部分評価値の値を正規化する場合には、例えば、図２１のｖｅｃ（０，−２），ｖｅｃ（２，０），ｖｅｃ（０，２），ｖｅｃ（−２，０）の部分評価値については１６／８倍し、ｖｅｃ（１，−１），ｖｅｃ（１，１），ｖｅｃ（−１，１），ｖｅｃ（−１，−１）の部分評価値については１６／９倍して正規化を行った後、最小値を求める。また、部分評価値の合計を求める場合には、ｖｅｃ（０，−２），ｖｅｃ（１，−１），ｖｅｃ（２，０）の部分評価値の合計、ｖｅｃ（２，０），ｖｅｃ（１，１），ｖｅｃ（０，２）の部分評価値の合計、ｖｅｃ（０，２），ｖｅｃ（−１，１），ｖｅｃ（−２，０）の部分評価値の合計、ｖｅｃ（−２，０），ｖｅｃ（−１，−１），ｖｅｃ（０，−２）の部分評価値の合計をそれぞれ求め、その４個の値から最小値を求める。
【００６３】
なお、上記評価値は、例えば上記ＳＡＤ（絶対誤差和）やＳＳＤ（誤差の２乗和）等により計算される。
【００６４】
ここで、この図２９に示す構成中の入力端子３１、３２が上記図１７の入力端子２１、２２に相当し、回転処理部３３、３４が図１７の回転処理部２３、２４に相当し、評価値計算部３５ａ〜３５ｈ以降の構成が図１７のパターン計算部２０にほぼ相当する。
【００６５】
以上説明したような、上記第１、第２の分割法（上記図８の（Ａ）、（Ｂ）にそれぞれ示す分割法）を用いた粗粒度探索を行った後に、上記細粒度探索を行う。この細粒度探索は、上記粗粒度探索で決定した動きベクトル平面上の最適なサブ探索範囲内において、画素単位で探索を行うものである。本実施の形態の場合、サブ探索範囲内には２５個のベクトルが含まれていることから、２５個の中から最適なひとつのベクトルを決定することになる。例えば、図３１の（Ａ）に示すように、最適なサブ探索範囲ＶＳＡop内の１３個のベクトルの中で粗粒度探索段階での最適なベクトルＶorを決定する。次に、細粒度探索として、図３１の（Ｂ）に示すように、上記ベクトルＶorに加えてその上下左右の４ベクトルの中で最適なベクトルＶofを決定する。このベクトルＶofが、上記サブ探索範囲ＶＳＡopの中で細粒度探索を行って得られた最適なベクトルとなる。
【００６６】
次に、上記細粒度探索よりも細かい単位での探索、例えば半画素探索を行う。これは、例えば図３２に示すように、上記細粒度探索で最終的に得られた最適ベクトルＶofを含む上下左右、右上、右下、左上、左下における半画素単位の９個のベクトルにおいてそれぞれ評価値を計算し、半画素探索での最適ベクトルＶohを求める。この探索は、半画素単位に限定されず、例えば１／４画素単位での探索を行ってもよい。
【００６７】
ここで、上述したような整数画素単位での予測（動きベクトル探索）の技術は、半画素単位の予測（動きベクトル探索）の場合でも同様に適用できる。例えば、上記第１の分割法におけるサブ探索範囲において、図３３に示される水平方向の半画素精度のベクトルを求める場合、整数画素の場合と同様に、最初に左上の対象画像サブブロックと参照サブブロックをメモリから読み出してくるわけだが、その後で参照サブブロックについてはピクセル間の水平補間をしてやることにより、図３４に示される補間後の参照サブブロックが得られる。この図３４において、△印が補間された画素（ピクセル）を示している。また、図３４の実線で囲ったブロックが対象サブブロックを示し、参照サブブロックを破線で示すが、細い破線は水平補間前、太い破線は水平補間後にそれぞれ対応している。図３４において、先ず、左上隅の補間前の参照サブブロックについて水平方向のピクセル間補間により３×４の１２画素（ピクセル）の補間された参照サブブロックが得られ、この１２画素と対象サブブロックとの間で、図３５のような組み合せによる評価値が計算される。この図３５においても、参照サブブロックを破線で示している。図３５から分かるように、参照サブブロックの左端の列は計算に使われないので、１２画素しかないことは問題にならない。この時、参照サブブロックの右端の１列のデータを内部キャッシュレジスタなどに保存しておき、次のサブブロック（すなわち右側にあるサブブロック）を読んだときに、今度はキャッシュレジスタの４個のピクセルを合わせて、５×４の２０画素のデータから水平補間をすることにより、４×４の１６画素のデータが得られることになる。これらを整数画素の場合と同様に、左上・右上・右下・左下のそれぞれの比較を繰り返していくことにより、半画素の場合の評価値が計算される。
【００６８】
ところで、水平補間された参照データの総画素数は２０×２０の４００画素ではなく、１９×２０の３８０画素になってしまうが、これは実際上は問題無い。その理由は、−２〜２の範囲のサブ探索範囲内の水平方向の半画素ベクトルは、ｘ方向で−１．５〜１．５、ｙ方向で−２〜２の範囲ということになり、この範囲のベクトルをカバーするには横方向（ｘ方向）１９ピクセルで十分であるからである。
【００６９】
以上説明した本発明の実施の形態によれば、動きベクトル探索のための全体の計算量が削減され、またサイクルあたりの計算量が大幅に増大する。これにより、例えば同じ処理をするにしても従来よりも大幅に動作周波数を下げることができるため、低消費電力化することができる。今回の発明を用いて設計したＭＰＥＧ−４エンコーダコアを用いると、コアが１４ＭHzで動作する状態で、ＶＧＡサイズ（６４０×４８０ピクセル）で３０fps（frame per second）の動画をエンコードすることができる。従来の技術であれば、ソフトウェアソリューションであれば少なくとも数百ＭHz、ハードウェアソリューションでも概ね５０〜２００ＭHzぐらいの動作周波数が必要とされており、１４ＭHzで行うということは従来に比べて大幅な低消費電力化がされるということである。これにより、例えばこれまでは携帯電話などの超小型携帯機器において高画質の動画を長時間にわたって録画することは不可能だった。しかし、この技術を使うことによりそれが可能となる。
【００７０】
また、従来と同様の動作周波数を用いた場合は、より大きな画角で高いフレームレートの動画を処理することが可能となる。これは、いわゆるハイビジョン等の高画質動画の圧縮に貢献できる。
【００７１】
本発明は、上述した実施の形態に限定されるものではなく、マクロブロックのサイズ・探索範囲のサイズ、ベクトル平面の分割法などさまざまなパラメータを変更して適用することができる。また、上記の実施の形態では、分割法をある分割方法とそれを水平・垂直両方向に２ずつずらした２種類を組み合わせたが、例えば、水平のみまたは垂直のみずらした分割方法を取り入れ、３種類以上の分割方法を組み合わせたり、もしくは１種類のみ使用するといった方法も考えられる。また、サブ探索範囲中で探索するベクトルのパターンも、上記実施の形態に示したものに限定されず、全てのベクトルを求めたり、その他のパターンを使用することも可能である。また、整数画素単位といくつかの半画素単位の処理を並列に行うことも可能である。さらに、上記の例では、ダイヤモンドサーチのようにローカルなベクトル探索範囲をたどっていく方法をとったが、今回の技術の並列計算の部分のみを用いて、全ベクトルについて探索を行う（全探索）をすることも可能である。また、上記第２の分割法では、評価値の部分的な計算をする代わりに、完全な評価値を計算する方法をとってもよい。このような変形例のいくつかについて、以下説明する。
【００７２】
変形例１として、全サーチ範囲をくまなく探す方法を使う場合について説明する。
【００７３】
上記実施の形態では、あるサブ探索範囲からはじめてより評価値が低い方向に探索を進めるという方法をとっているが、それでは結果の評価値が局所的に最小になっていても全体としては最小になっていないということが起こり得る。そこで、変形例１として、全サーチ範囲をくまなく探す方法をとる。例えば、まず上記第１の分割法、すなわち上記図８の（Ａ）に示す分割法の全てのサブ探索範囲について、その範囲内のベクトルにおける評価値を計算し、その中で最小の評価値を持つベクトルの周辺で、より詳細な探索を行うことにより最終的な結果を得る。この方法では、全サーチ範囲について探索をすることで、局所的最小値に行き当たるリスクを回避しており精度の向上が見込まれるが、その分処理量が大幅に増加することになる。
【００７４】
次に変形例２として、サブブロックサイズが異なる場合について説明する。
【００７５】
上記実施の形態では、縦４ピクセル×横４ピクセルのサブブロックを使用したが、ここでは、サブブロックサイズが縦２ピクセル×横４ピクセルのサブブロックを使用する。この場合、図３６の（Ａ）に示すように対象マクロブロックＰ−ＭＢは３２個のサブブロックに分割し、参照画像も図３６の（Ｂ）に示すように２×４のサイズのサブブロックに分割する。参照マクロブロックＱ−ＭＢ０は、参照画像上で動きベクトル（０，０）の（対象マクロブロックと同じ位置の）マクロブロックを示している。
【００７６】
上記実施の形態のシステムでは、２種類のベクトル平面分割方法を使用したが、この変形例２でもそれらと同じ分割方法を使用することにする。また、それぞれの方法におけるサブ探索範囲内で探索するベクトルも同じものを使うことにし、すなわち、上記第１の分割法では１３個のベクトルを用い、上記第２の分割法では８個のベクトルを使用する。
【００７７】
上記第１の分割法での、対象マクロブロック（及びサブブロック）と参照サブブロックの位置関係は、図３７に示す通りとなる。
【００７８】
それぞれの対象サブブロックに対して、対象サブブロックの左上の参照サブブロック、右上の参照サブブロック、右側に重なった参照サブブロック、右下の参照サブブロック、左下の参照サブブロック。左側に重なった参照サブブロックの、計６個のサブブロックを比較する。これを全３２サブブロックに対して行うので、１回の比較を１サイクルで行うとすれば、全部で３２×６＝１９２サイクルで終えることができる。図３８は、対象サブブロックと、対象サブブロックに対して左上の参照サブブロックとを比較するときの様子を示している。
【００７９】
サブブロック同士の比較は、図３９〜図４４に示されるように、各ピクセル同士を比較する。これらの図３９〜図４４において、実線が対象サブブロックを、破線が参照サブブロックをそれぞれ示し、斜線部が評価値計算に使用されるピクセルを示している。また、ｖｅｃ（ｉ，ｊ）は、水平方向（ｘ方向）にｉ、垂直方向（ｙ方向）にｊの成分を有する動きベクトルについての部分評価値の計算を行うことを意味している。
【００８０】
次に、図４５は、上記第２の分割法での、対象マクロブロックの各対象サブブロックＰ−ＳＢと参照サブブロックＱ−ＳＢの位置関係、及びサブ探索範囲のサーチに必要な範囲Ｈを示している。
【００８１】
それぞれの対象サブブロックに対して、対象サブブロックの上の参照サブブロック、丁度重なる参照サブブロック、下の参照サブブロックの、計３個のサブブロックを比較する。これを全３２サブブロックに対して行うので、１回の比較を１サイクルで行うとすれば、全部で３２×３＝９６サイクルで終えることができることになる。
【００８２】
サブブロック同士の比較は、図４６〜図４８に示されるように、各ピクセル同士を比較する。これらの図４６〜図４８においても、上記図３９〜図４４と同様に、実線が対象サブブロックを、破線が参照サブブロックをそれぞれ示し、斜線部が評価値計算に使用されるピクセルを示し、また、ｖｅｃ（ｉ，ｊ）は、水平方向（ｘ方向）にｉ、垂直方向（ｙ方向）にｊの成分を有する動きベクトルについての部分評価値の計算を行うことを意味している。
【００８３】
この第２の分割法では、全てのピクセルにおいてピクセル評価値を計算するわけではなく、一部のピクセルについてのみ評価値が計算される。図４９〜図５２には、実際に評価値が計算されるピクセルをそれぞれの斜線部に示している。
【００８４】
この変形例２の方法では、上記実施の形態の方法に比べてサイクル数が多くかかってしまうが、計算の並列度が減るので、その分回路の量を減らすことができる。
【００８５】
変形例３として、上記第１、第２の分割法（上記図８の（Ａ）、（Ｂ）の分割法）以外の分割法を用いる場合について説明する。
【００８６】
上記実施の形態で説明したベクトル平面の上記第１、第２の分割法（上記図８の（Ａ）、（Ｂ）にそれぞれ示す分割法）に加えて、図５３の（Ａ）、（Ｂ）に示す第３、第４の分割法を使用した場合の例である。
【００８７】
まず最初に、例えば上記第１の分割法で分割されたサブ探索範囲内で図５４に示される１３個のベクトルＶ０〜Ｖ１２の探索を行う。以下、この第１の分割法のサブ探索範囲内でのベクトル探索を「サーチＳａ」といい、同様に、上記第２、第３、第４の各分割法のサブ探索範囲内でのベクトル探索を、それぞれ「サーチＳｂ」、「サーチＳｃ」、「サーチＳｄ」という。
【００８８】
上記サーチＳａの結果、評価値が最小だったベクトルの位置によって、以下に示す条件で次に探索するサブ探索範囲を決定する。
(1) ベクトルＶ０の場合：ベクトルＶ０の周辺を詳細に（半画素単位で）サーチし、結果を求める。
(2) ベクトルＶ１〜Ｖ４の場合：ベクトルがある方向に隣接するサーチＳａを行う。
(3) ベクトルＶ５〜Ｖ８の場合：ベクトルがある方向に隣接するサーチＳｃ又はサーチＳｄを行う。サーチＳｃとサーチＳｄとの判別は、隣接する縦横方向のベクトル（ベクトルＶ１〜Ｖ４）を比べて、より小さなベクトルに近いほうのサーチを選択する。例えば、ベクトルＶ６が最小の時は、ベクトルＶ１とＶ２を比べてベクトルＶ１の方が小さい場合は上記サーチＳｄを行い、ベクトルＶ２の方が小さい場合は上記サーチＳｃを行う。
(4) ベクトルＶ９〜Ｖ１２の場合：ベクトルがある方向にあるサーチＳｂを行う。このとき、サーチにおいて部分的な評価値のみを計算する。これを「簡易探索」という。なお、この簡易探索（この場合サーチＳｂ）を行った後は、必ずもとのサーチタイプ（この場合サーチＳａ）に戻ることとする。
【００８９】
このような上記サーチＳａの後に行うサーチの例を図５５に示す。この図５５において、（Ａ）が上記(2) の場合の次もサーチＳａを行う例を、（Ｂ）が上記(3) の場合の次にサーチＳｃを行う例を、（Ｃ）が上記(3) の場合の次にサーチＳｄを行う例を、（Ｄ）が上記(4) の場合の次にサーチＳｂ（簡易探索）を行う例をそれぞれ示している。
【００９０】
これを他の分割法（他のサーチＳｂ、Ｓｃ、Ｓｄ）についても同様に行い、それぞれのサーチＳｂ〜Ｓｄから、図５６〜図５８のそれぞれの（Ａ）〜（Ｄ）に示されるように、１６方向に進むことができる。また、簡易探索後のサーチについては、図５９の（Ａ）〜（Ｄ）に示されるように４方向に限られる。
【００９１】
次に変形例４として、サーチ毎のパターンが異なる場合について説明する。
【００９２】
上記実施の形態の上記第１の分割法において、上記図１０に示される１３個のベクトルについての評価値を計算する代わりに、図６０に示されるサブサーチ範囲内の全２５個のベクトルについて評価値を計算することもできる。これにより、１３個のベクトル間にある最小評価値を見逃さなくなるため、より高い精度の結果を求めることができる。
【００９３】
また、上記第２の分割法において、上記図１８に示される８個のベクトルにおいて部分的なピクセル評価値を計算する代わりに、上記図１０に示される１３個のベクトルについての部分的な評価値を計算することができる。これにより、多少精度の改善が見られる可能性がある。
【００９４】
なお、本発明は上述した実施の形態のみに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【図面の簡単な説明】
【００９５】
【図１】本発明の実施の形態が適用される動画圧縮装置の構成例を示すブロック図である。
【図２】本発明の実施の形態が適用される手ぶれ補正装置の構成例を示すブロック図である。
【図３】対象画像Ｐ内のマクロブロックと参照画像Ｑ内のマクロブロックとの間での比較処理を説明するための図である。
【図４】ベクトル平面上の動きベクトルを示す図である。
【図５】対象画像のマクロブロックと参照画像の探索範囲とを示す図である。
【図６】画像メモリ読み出し及び動きベクトル検出部分の構成例を示すブロック図である。
【図７】動きベクトル平面上の探索範囲を示す図である。
【図８】動きベクトル平面上におけるサブ探索範囲の第１、第２の分割法を示す図である。
【図９】動きベクトル平面上でのサブ探索範囲の移動を説明するための図である。
【図１０】第１の分割法における動きベクトル平面上のサブ探索範囲内の評価値計算対象となる動きベクトルの例を示す図である。
【図１１】第１の分割法における対象マクロブロックと参照データ範囲の位置的な関係を示す図である。
【図１２】対象マクロブロックの対象サブブロックと参照サブブロックとの間のデータの計算を説明するための図である。
【図１３】対象サブブロックと参照サブブロックとの間の評価値計算に用いられるピクセルのパターンの例を示す図である。
【図１４】対象サブブロックと参照サブブロックとの間の評価値計算に用いられるピクセルのパターンの例を示す図である。
【図１５】対象サブブロックと参照サブブロックとの間の評価値計算に用いられるピクセルのパターンの例を示す図である。
【図１６】対象サブブロックと参照サブブロックとの間の評価値計算に用いられるピクセルのパターンの例を示す図である。
【図１７】対象サブブロックと参照サブブロックとの間の評価値計算のための構成例を示すブロック図である。
【図１８】第２の分割法における動きベクトル平面上のサブ探索範囲内の評価値計算対象となる動きベクトルの例を示す図である。
【図１９】第２の分割法における対象マクロブロックと参照データ範囲の位置的な関係を示す図である。
【図２０】動きベクトル平面上のサブ探索範囲内で探索された動きベクトルに応じた次のサブ探索範囲への移動を説明するための図である。
【図２１】第２の分割法における対象サブブロックと参照サブブロックとの間の評価値計算に用いられるピクセルのパターンの例を示す図である。
【図２２】第２の分割法における各動きベクトル毎の評価値計算に用いられるピクセルを示す図である。
【図２３】第２の分割法における各動きベクトル毎の評価値計算に用いられるピクセルを示す図である。
【図２４】第２の分割法において各動きベクトル毎の評価値計算に用いられるマクロブロック当たりのピクセル数を示す図である。
【図２５】第２の分割法においてさらに精度の高い評価値を得るための計算に用いられるピクセルの例を示す図である。
【図２６】図２５の例における各動きベクトル毎の評価値計算に用いられるピクセルを示す図である。
【図２７】図２５の例における各動きベクトル毎の評価値計算に用いられるピクセルを示す図である。
【図２８】図２５の例において各動きベクトル毎の評価値計算に用いられるマクロブロック当たりのピクセル数を示す図である。
【図２９】動きベクトル探索を行うためのハードウェアの構成例を示すブロック回路図である。
【図３０】図２９内の回転処理部の回転処理を説明するための図である。
【図３１】粗粒度探索と細粒度探索との関係を示す図である。
【図３２】半画素探索を説明するための図である。
【図３３】動きベクトル平面上で半画素探索を行う場合の動きベクトルを示す図である。
【図３４】半画素探索を行う場合の対象サブブロック及び参照サブブロックを示す図である。
【図３５】半画素探索を行う場合の対象サブブロックと参照サブブロックとの間の評価値計算に用いられるピクセルのパターンの例を示す図である。
【図３６】変形例２として２×４のサイズのサブブロックを用いる場合の対象画像のマクロブロックと参照画像の探索範囲とを示す図である。
【図３７】変形例２の場合の第１の分割法における対象マクロブロックと参照データ範囲の位置的な関係を示す図である。
【図３８】変形例２の場合の対象マクロブロックの対象サブブロックと参照サブブロックとの間のデータの計算を説明するための図である。
【図３９】変形例２の場合の対象サブブロックと参照サブブロックとの間の評価値計算に用いられるピクセルのパターンの例を示す図である。
【図４０】変形例２の場合の対象サブブロックと参照サブブロックとの間の評価値計算に用いられるピクセルのパターンの例を示す図である。
【図４１】変形例２の場合の対象サブブロックと参照サブブロックとの間の評価値計算に用いられるピクセルのパターンの例を示す図である。
【図４２】変形例２の場合の対象サブブロックと参照サブブロックとの間の評価値計算に用いられるピクセルのパターンの例を示す図である。
【図４３】変形例２の場合の対象サブブロックと参照サブブロックとの間の評価値計算に用いられるピクセルのパターンの例を示す図である。
【図４４】変形例２の場合の対象サブブロックと参照サブブロックとの間の評価値計算に用いられるピクセルのパターンの例を示す図である。
【図４５】変形例２の場合の第２の分割法における対象マクロブロックと参照データ範囲の位置的な関係を示す図である。
【図４６】変形例２の場合の第２の分割法における対象サブブロックと参照サブブロックとの間の評価値計算に用いられるピクセルのパターンの例を示す図である。
【図４７】変形例２の場合の第２の分割法における対象サブブロックと参照サブブロックとの間の評価値計算に用いられるピクセルのパターンの例を示す図である。
【図４８】変形例２の場合の第２の分割法における対象サブブロックと参照サブブロックとの間の評価値計算に用いられるピクセルのパターンの例を示す図である。
【図４９】変形例２の場合の第２の分割法における各動きベクトル毎の評価値計算に用いられるピクセルを示す図である。
【図５０】変形例２の場合の第２の分割法における各動きベクトル毎の評価値計算に用いられるピクセルを示す図である。
【図５１】変形例２の場合の第２の分割法における各動きベクトル毎の評価値計算に用いられるピクセルを示す図である。
【図５２】変形例２の場合の第２の分割法における各動きベクトル毎の評価値計算に用いられるピクセルを示す図である。
【図５３】変形例３として、上記第１、第２の分割法以外の分割法となる第３、第４の分割法を示す図である。
【図５４】第１の分割法におけるサブ探索範囲内で探索を行う１３個の動きベクトルを示す図である。
【図５５】第１の分割法のサブ探索範囲内でのベクトル探索（サーチＳａ）を行った後に行うサーチの例を示す図である。
【図５６】第２の分割法のサブ探索範囲内でのベクトル探索（サーチＳｂ）を行った後に行うサーチの例を示す図である。
【図５７】第３の分割法のサブ探索範囲内でのベクトル探索（サーチＳｃ）を行った後に行うサーチの例を示す図である。
【図５８】第４の分割法のサブ探索範囲内でのベクトル探索（サーチＳｄ）を行った後に行うサーチの例を示す図である。
【図５９】簡易検索を行った後に行うサーチの例を示す図である。
【図６０】変形例４として、第１の分割法におけるサブ探索範囲内で探索を行う２５個の動きベクトルを示す図である。
【符号の説明】
【００９６】
１０  フレームメモリ、  １１  入力端子、  １２  動きベクトル検出部、  １３  動き補償部、  １７  手振れ補正部、  １０ａ  対象画像用メモリ、  １０ｂ  参照画像用メモリ、  １２ｃ  動きベクトル検出計算部、  ２０  パターン計算部、  ２３，２４，３３，３４  回転処理部、  ３０  動きベクトル評価値計算処理部
【図１】
0004793070.tif 000002
【図２】
0004793070.tif 000003
【図３】
0004793070.tif 000004
【図４】
0004793070.tif 000005
【図５】
0004793070.tif 000006
【図６】
0004793070.tif 000007
【図７】
0004793070.tif 000008
【図８】
0004793070.tif 000009
【図９】
0004793070.tif 000010
【図１０】
0004793070.tif 000011
【図１１】
0004793070.tif 000012
【図１２】
0004793070.tif 000013
【図１３】
0004793070.tif 000014
【図１４】
0004793070.tif 000015
【図１５】
0004793070.tif 000016
【図１６】
0004793070.tif 000017
【図１７】
0004793070.tif 000018
【図１８】
0004793070.tif 000019
【図１９】
0004793070.tif 000020
【図２０】
0004793070.tif 000021
【図２１】
0004793070.tif 000022
【図２２】
0004793070.tif 000023
【図２３】
0004793070.tif 000024
【図２４】
0004793070.tif 000025
【図２５】
0004793070.tif 000026
【図２６】
0004793070.tif 000027
【図２７】
0004793070.tif 000028
【図２８】
0004793070.tif 000029
【図２９】
0004793070.tif 000030
【図３０】
0004793070.tif 000031
【図３１】
0004793070.tif 000032
【図３２】
0004793070.tif 000033
【図３３】
0004793070.tif 000034
【図３４】
0004793070.tif 000035
【図３５】
0004793070.tif 000036
【図３６】
0004793070.tif 000037
【図３７】
0004793070.tif 000038
【図３８】
0004793070.tif 000039
【図３９】
0004793070.tif 000040
【図４０】
0004793070.tif 000041
【図４１】
0004793070.tif 000042
【図４２】
0004793070.tif 000043
【図４３】
0004793070.tif 000044
【図４４】
0004793070.tif 000045
【図４５】
0004793070.tif 000046
【図４６】
0004793070.tif 000047
【図４７】
0004793070.tif 000048
【図４８】
0004793070.tif 000049
【図４９】
0004793070.tif 000050
【図５０】
0004793070.tif 000051
【図５１】
0004793070.tif 000052
【図５２】
0004793070.tif 000053
【図５３】
0004793070.tif 000054
【図５４】
0004793070.tif 000055
【図５５】
0004793070.tif 000056
【図５６】
0004793070.tif 000057
【図５７】
0004793070.tif 000058
【図５８】
0004793070.tif 000059
【図５９】
0004793070.tif 000060
【図６０】
0004793070.tif 000061