(57)【要約】【課題】  半画素位置の画素値を求めるためのメモリアクセスや演算に伴う処理負荷を軽減する画像差分演算方法及び装置、動き検出装置及び画像データ圧縮装置を提供する。【解決手段】  所定の領域単位で現画像と該現画像より過去の参照画像との差分を求めるための画像差分演算方法であって、前記参照画像に設定される所定の領域の外側の整数画素位置から前記参照画像の水平方向に整数画素位置が並ぶ順序で該整数画素位置の画素値を順次読み出しながら前記参照画像の垂直方向に、前記画素値をメモリから読み出し、前記所定の領域内の整数画素位置の画素値を読み出す毎に、当該整数画素位置と、過去に読み出され前記当該整数画素位置と隣接する整数画素位置とによって特定される複数の半画素位置の画素値を求め、前記参照画像の前記複数の半画素位置のいずれかとこれに対応する前記現画像の整数画素位置の画素値との差分を求める。【選択図】      図１９
2005354276.tif 000002
【特許請求の範囲】
【請求項１】
所定の領域単位で現画像と該現画像より過去の参照画像との差分を求めるための画像差分演算方法であって、
前記参照画像に設定される所定の領域の外側の整数画素位置から前記参照画像の水平方向に整数画素位置が並ぶ順序で該整数画素位置の画素値を順次読み出しながら前記参照画像の垂直方向に、前記画素値をメモリから読み出し、
前記所定の領域内の整数画素位置の画素値を読み出す毎に、当該整数画素位置と、過去に読み出され前記当該整数画素位置と隣接する整数画素位置とによって特定される複数の半画素位置の画素値を、前記当該整数画素位置の画素値と前記過去に読み出された整数画素位置の画素値とに基づいて求め、
前記参照画像の前記複数の半画素位置の１つの半画素位置の画素値と該１つの半画素位置に対応する前記現画像の整数画素位置の画素値との差分を求めることを特徴とする画像差分演算方法。
【請求項２】
請求項１において、
前記所定の領域内の整数画素位置の画素値を読み出す毎に、前記当該整数画素位置と、前記当該整数画素位置と前記水平方向に隣接する第１の整数画素位置と、前記当該整数画素位置と前記垂直方向に隣接する第２の整数画素位置と、前記第１の整数画素位置と前記垂直方向に隣接し前記第２の整数画素位置と前記水平方向に隣接する第３の整数画素位置とによって特定される複数の半画素位置の画素値を、前記当該整数画素位置の画素値と、前記第１〜第３の整数画素位置の各画素値とに基づいて求めることを特徴とする画像差分演算方法。
【請求項３】
請求項１又は２において、
前記所定の領域内の整数画素位置の画素値を読み出す毎に、当該整数画素位置の周辺の複数の半画素位置について前記差分を求めることを特徴とする画像差分演算方法。
【請求項４】
請求項１乃至３のいずれかにおいて、
前記所定の領域が、
前記水平方向及び前記垂直方向にそれぞれ１６個の整数画素位置が並ぶマクロブロックを４分割して得られた前記水平方向及び前記垂直方向にそれぞれ８個の整数画素位置が並ぶブロックであり、
前記ブロック単位で前記現画像と前記参照画像との差分を求め、
前記ブロック単位で求められた差分を用いてマクロブロック単位の差分を求めることを特徴とする画像差分演算方法。
【請求項５】
請求項４において、
前記マクロブロックを４分割して得られた４つのブロックのうち前記水平方向に並ぶブロックを第１及び第２のブロックとした場合に、
前記第１及び第２のブロックが共有する半画素位置の画素値は、前記第１及び第２のブロックのいずれか一方のブロックにおいて求められることを特徴とする画像差分演算方法。
【請求項６】
請求項４又は５において、
前記マクロブロックを４分割して得られた４つのブロックのうち前記垂直方向に並ぶブロックを第１及び第３のブロックとした場合に、
前記第１及び第３のブロックが共有する半画素位置の画素値は、前記第１及び第３のブロックのいずれか一方のブロックにおいて求められることを特徴とする画像差分演算方法。
【請求項７】
所定の領域単位で現画像と該現画像より過去の参照画像との差分を求めるための画像差分演算装置であって、
メモリから読み出された参照画像の整数画素位置の画素値を用いて、該参照画像の半画素位置の画素値を求める半画素位置演算部と、
前記半画素位置演算部によって求められた前記半画素位置の画素値と該半画素位置に対応する前記現画像の整数画素位置の画素値との差分を求める差分演算部とを含み、
前記半画素位置演算部が、
前記参照画像に設定される所定の領域の外側の整数画素位置から前記参照画像の水平方向に整数画素位置が並ぶ順序で該整数画素位置の画素値を順次読み出しながら前記参照画像の垂直方向に、前記画素値を前記メモリから読み出し、
前記所定の領域内の整数画素位置の画素値を読み出す毎に、当該整数画素位置と、過去に読み出され前記当該整数画素位置と隣接する整数画素位置とによって特定される複数の半画素位置の画素値を、前記当該整数画素位置の画素値と前記過去に読み出された整数画素位置の画素値とに基づいて求めることを特徴とする画像差分演算装置。
【請求項８】
請求項７において、
前記半画素位置演算部が、
前記所定の領域内の整数画素位置の画素値を読み出す毎に、前記当該整数画素位置と、前記当該整数画素位置と前記水平方向に隣接する第１の整数画素位置と、前記当該整数画素位置と前記垂直方向に隣接する第２の整数画素位置と、前記第１の整数画素位置と前記垂直方向に隣接し前記第２の整数画素位置と前記水平方向に隣接する第３の整数画素位置とによって特定される複数の半画素位置の画素値を、前記当該整数画素位置の画素値と、前記第１〜第３の整数画素位置の各画素値とに基づいて求めることを特徴とする画像差分演算装置。
【請求項９】
請求項７又は８において、
前記半画素位置演算部が、
前記所定の領域内の整数画素位置の画素値を読み出す毎に、当該整数画素位置の周辺の半画素位置について前記差分を求めることを特徴とする画像差分演算装置。
【請求項１０】
請求項７乃至９のいずれか記載の画像差分演算装置と、
前記画像差分演算装置によって差分が求められた前記現画像及び前記参照画像の間の動きベクトルを生成する動きベクトル生成部とを含み、
前記動きベクトル生成部が、
前記差分又は該差分を用いて求められたマクロブロック単位の差分が最小となるときの動きベクトルを生成することを特徴とする動き検出装置。
【請求項１１】
請求項７乃至９のいずれか記載の画像差分演算装置と、
前記画像差分演算装置によって生成された差分を量子化する量子化部とを含むことを特徴とする画像データ圧縮装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像差分演算方法及びその装置、動き検出装置及び画像データ圧縮装置に関する。
【背景技術】
【０００２】
動画音声符号化方式の標準化を目的としてＭＰＥＧ（Moving Picture Experts Group）が規格化されている。ＭＰＥＧの種々の規格のうちＭＰＥＧ−４は、携帯機器向けに、高い圧縮率で、より低いビットレートで画質を維持しながら動画像の通信を実現させる規格である。
【０００３】
ＭＰＥＧ−４では、入力された現画像と該現画像より過去に入力された旧画像（参照画像）との間で高精度に動き検出を行って、画質を維持しながら高い圧縮率を実現する。この場合、動き検出は、半画素位置（half pel）精度でマクロブロック単位の現画像と参照画像との差分が最小となる位置を求めることで実現される。
【特許文献１】特開２００３−２３６２８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
動き検出では、種々の探索方法により、マクロブロックの位置を動かしながら上記差分が最小となる位置が求められる。しかしながら、動き検出で用いられる半画素位置の画素値は、画像を構成する整数画素位置（full pel、全画素位置）の画素値から求められる。差分が最小となる位置を探索するために、整数画素位置の画素値を読み出すメモリアクセスや、整数画素位置の画素値から半画素位置の画素値を求める演算が繰り返し行われ、半画素精度で差分を求めるには処理負荷が重く、処理時間がかかる。
【０００５】
本発明は、以上のような技術的課題に鑑みてなされたものであり、その目的とするところは、半画素位置の画素値を求めるためのメモリアクセスや演算に伴う処理負荷を軽減する画像差分演算方法及びその装置、動き検出装置及び画像データ圧縮装置を提供することにある。
【課題を解決するための手段】
【０００６】
上記課題を解決するために本発明は、所定の領域単位で現画像と該現画像より過去の参照画像との差分を求めるための画像差分演算方法であって、前記参照画像に設定される所定の領域の外側の整数画素位置から前記参照画像の水平方向に整数画素位置が並ぶ順序で該整数画素位置の画素値を順次読み出しながら前記参照画像の垂直方向に、前記画素値をメモリから読み出し、前記所定の領域内の整数画素位置の画素値を読み出す毎に、当該整数画素位置と、過去に読み出され前記当該整数画素位置と隣接する整数画素位置とによって特定される複数の半画素位置の画素値を、前記当該整数画素位置の画素値と前記過去に読み出された整数画素位置の画素値とに基づいて求め、前記参照画像の前記複数の半画素位置の１つの半画素位置の画素値と該１つの半画素位置に対応する前記現画像の整数画素位置の画素値との差分を求める画像差分演算方法に関係する。
【０００７】
また本発明に係る画像差分演算方法では、前記所定の領域内の整数画素位置の画素値を読み出す毎に、前記当該整数画素位置と、前記当該整数画素位置と前記水平方向に隣接する第１の整数画素位置と、前記当該整数画素位置と前記垂直方向に隣接する第２の整数画素位置と、前記第１の整数画素位置と前記垂直方向に隣接し前記第２の整数画素位置と前記水平方向に隣接する第３の整数画素位置とによって特定される複数の半画素位置の画素値を、前記当該整数画素位置の画素値と、前記第１〜第３の整数画素位置の各画素値とに基づいて求めることができる。
【０００８】
本発明においては、参照画像の整数画素位置の画素値を記憶するメモリから所定の順序で該画素値が読み出される。即ち、参照画像に設定される所定の領域の外側の整数画素位置から、該参照画像の水平方向に整数画素位置が並ぶ順序で順次読み出される。このように所定の領域の水平方向に１ライン分読み出されると、参照画像の垂直方向に隣接する次の水平方向の１ライン分の整数画素位置の画素値が、同様の順序で読み出される。こうしてメモリから読み出された画素値は、例えばバッファ等に一時的に記憶される。
【０００９】
そして、所定の領域内の整数画素位置の画素値を読み出す毎に、当該整数画素位置と、過去に読み出され前記当該整数画素位置と隣接する整数画素位置とによって特定される複数の半画素位置の画素値を求める。この画素値は、当該整数画素位置の画素値と、過去に読み出された整数画素位置の画素値とに基づいて求められる。このようにして求められた複数の半画素位置の１つの半画素位置の画素値と、該１つの半画素位置に対応する現画像の整数画素位置の画素値との差分が求められる。
【００１０】
本発明においては、各整数画素位置の周辺の例えば８つの半画素位置の各半画素位置が例えば２又は４の整数画素位置によって共有されることに着目している。従って、例えば水平方向のみならず、垂直方向に隣接する整数画素値の画素値を用いて半画素位置の画素値を求めることができる。そのため、重複して半画素位置の演算が行われることを防止し、不要なメモリアクセスも削減できる。これにより、半画素精度で画像の差分を求める処理負荷を軽減し、且つ処理時間を短縮できるようになる。
【００１１】
また本発明に係る画像差分演算方法では、前記所定の領域内の整数画素位置の画素値を読み出す毎に、当該整数画素位置の周辺の複数の半画素位置について前記差分を求めることができる。
【００１２】
本発明によれば、１つの半画素位置の画素値が求められる毎に、対応する整数画素位置との間で差分演算が可能な場合には該整数画素位置との間で差分演算を行うようにしたので、上記の効果に加えて、更に半画素精度での画像差分演算の処理を高速化できるようになる。
【００１３】
また本発明に係る画像差分演算方法では、前記所定の領域が、前記水平方向及び前記垂直方向にそれぞれ１６個の整数画素位置が並ぶマクロブロックを４分割して得られた前記水平方向及び前記垂直方向にそれぞれ８個の整数画素位置が並ぶブロックであり、前記ブロック単位で前記現画像と前記参照画像との差分を求め、前記ブロック単位で求められた差分を用いてマクロブロック単位の差分を求めることができる。
【００１４】
また本発明に係る画像差分演算方法では、前記マクロブロックを４分割して得られた４つのブロックのうち前記水平方向に並ぶブロックを第１及び第２のブロックとした場合に、前記第１及び第２のブロックが共有する半画素位置の画素値は、前記第１及び第２のブロックのいずれか一方のブロックにおいて求められてもよい。
【００１５】
また本発明に係る画像差分演算方法では、前記マクロブロックを４分割して得られた４つのブロックのうち前記垂直方向に並ぶブロックを第１及び第３のブロックとした場合に、前記第１及び第３のブロックが共有する半画素位置の画素値は、前記第１及び第３のブロックのいずれか一方のブロックにおいて求められてもよい。
【００１６】
本発明によれば、不要な半画素位置の画素値の演算を省略できるので、画像の差分演算の処理時間をより短縮化できる。
【００１７】
また本発明は、所定の領域単位で現画像と該現画像より過去の参照画像との差分を求めるための画像差分演算装置であって、メモリから読み出された参照画像の整数画素位置の画素値を用いて、該参照画像の半画素位置の画素値を求める半画素位置演算部と、前記半画素位置演算部によって求められた前記半画素位置の画素値と該半画素位置に対応する前記現画像の整数画素位置の画素値との差分を求める差分演算部とを含み、前記半画素位置演算部が、前記参照画像に設定される所定の領域の外側の整数画素位置から前記参照画像の水平方向に整数画素位置が並ぶ順序で該整数画素位置の画素値を順次読み出しながら前記参照画像の垂直方向に、前記画素値を前記メモリから読み出し、前記所定の領域内の整数画素位置の画素値を読み出す毎に、当該整数画素位置と、過去に読み出され前記当該整数画素位置と隣接する整数画素位置とによって特定される複数の半画素位置の画素値を、前記当該整数画素位置の画素値と前記過去に読み出された整数画素位置の画素値とに基づいて求める画像差分演算装置に関係する。
【００１８】
また本発明に係る画像差分演算装置では、前記半画素位置演算部が、前記所定の領域内の整数画素位置の画素値を読み出す毎に、前記当該整数画素位置と、前記当該整数画素位置と前記水平方向に隣接する第１の整数画素位置と、前記当該整数画素位置と前記垂直方向に隣接する第２の整数画素位置と、前記第１の整数画素位置と前記垂直方向に隣接し前記第２の整数画素位置と前記水平方向に隣接する第３の整数画素位置とによって特定される複数の半画素位置の画素値を、前記当該整数画素位置の画素値と、前記第１〜第３の整数画素位置の各画素値とに基づいて求めることができる。
【００１９】
また本発明に係る画像差分演算装置では、前記半画素位置演算部が、前記所定の領域内の整数画素位置の画素値を読み出す毎に、当該整数画素位置の周辺の半画素位置について前記差分を求めることができる。
【００２０】
本発明によれば、半画素精度で画像の差分を求める処理負荷を軽減し、且つ処理時間を短縮できる画像差分演算装置を提供できる。また本発明によれば、１つの半画素位置の画素値が求められる毎に、対応する整数画素位置との間で差分演算が可能な場合には該整数画素位置との間で差分演算を行うようにしたので、上記の効果に加えて、更に半画素精度での画像差分演算の処理を高速化できる画像差分演算装置を提供できる。
【００２１】
また本発明は、上記のいずれか記載の画像差分演算装置と、前記画像差分演算装置によって差分が求められた前記現画像及び前記参照画像の間の動きベクトルを生成する動きベクトル生成部とを含み、前記動きベクトル生成部が、前記差分又は該差分を用いて求められたマクロブロック単位の差分が最小となるときの動きベクトルを生成する動き検出装置に関係する。
【００２２】
本発明によれば、半画素精度で画像の差分を求めて動きベクトルを生成する処理負荷を軽減し、且つ処理時間を短縮してできる動き検出装置を提供できる。また本発明によれば、１つの半画素位置の画素値が求められる毎に、対応する整数画素位置との間で差分演算が可能な場合には該整数画素位置との間で差分演算を行うようにしたので、上記の効果に加えて、更に半画素精度での画像差分演算の処理を高速化して、エンコード処理のネックとなる動き検出処理の高速化を実現する動き検出装置を提供できる。
【００２３】
また本発明は、上記のいずれか記載の画像差分演算装置と、前記画像差分演算装置によって生成された差分を量子化する量子化部とを含む画像データ圧縮装置に関係する。
【００２４】
本発明によれば、半画素精度で画像差分演算の処理を高速化した画像データ圧縮装置を提供できる。
【発明を実施するための最良の形態】
【００２５】
以下、本発明の実施の形態について図面を用いて詳細に説明する。なお、以下に説明する実施の形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また以下で説明される構成のすべてが本発明の必須構成要件であるとは限らない。
【００２６】
１．  ＭＰＥＧ−４
まず本実施形態における動き検出装置が適用される画像データ圧縮システムについて説明する。
【００２７】
図１に、画像データ圧縮システムの構成の概要を示す。この画像データ圧縮システム１０は、画像データ圧縮装置２０と、ホスト４０とを含み、ＭＰＥＧ−４のエンコード処理を行う。画像データ圧縮装置２０の機能はハードウェアによって実現される。ホスト４０は、図示しないＣＰＵ（Central Processing Unit）及びメモリを有し、ＣＰＵがメモリに記憶されたプログラムを読み込んで、該プログラムに対応した処理を行うことによってホスト４０の機能が実現される。
【００２８】
画像データ圧縮装置２０は、メモリ２２を含む。メモリ２２には、例えばカメラモジュール（撮像部）から入力された１フレーム分の動画の画像データが新入力画像データとして格納される。またメモリ２２には、新入力画像データのフレームより過去の旧入力画像データもまた保持されている。更にメモリ２２には、ローカルデコード画像データもまた格納される。
【００２９】
画像データ圧縮装置２０は、動き検出部（広義には動き検出装置）２４、離散コサイン変換（Discrete Cosine Transform：ＤＣＴ）部２６、量子化部２８、逆量子化部３０、逆ＤＣＴ部２８、動き補償部３４を含む。
【００３０】
動き検出部２４は、時間的に異なる２枚（２フレーム）の画像間の動き検出（ＭＥ：Motion Estimation）を実施する。具体的には、マクロブロック単位で、２枚の画像間の同一画素同士の差分（整数画素精度の差分）、又は一方の画像の画素と該画素に対応する他方の画像の半画素との差分（半画素精度の差分）を求め、求めた差分が最小となるときの両画像間の動きベクトルを出力する。この際、整数画素精度で２枚の画像間の差分を求めて該差分が最小となる位置を求めた後に、更に半画素精度で該２枚の画像間の差分を求めて精度良く差分が最小となる位置を特定する。２枚の画像間で変化のない画像領域では差分が０になるので、情報量を少なくできる。この画像領域のゼロデータに加え、２枚の画像間で変化のある画像領域の差分（プラス・マイナス成分）が動き検出後の情報となる。なおマクロブロック（ＭＢ）は、１６画素×１６画素を１単位とする領域である。このマクロブロックは、水平方向及び垂直方向にそれぞれ１６個の画素が並ぶ領域ということができる。
【００３１】
本実施形態の動き検出部２４は、新入力画像データと、旧入力画像データ及びローカルデコード画像データのいずれか１つとの差分を求める。旧入力画像データ及びローカルデコード画像のいずれを出力するかは、動き検出の収束速度に応じて決められる。例えば動き検出の収束速度を速くするために、整数画素精度で差分を求めるときには旧入力画像データを出力し、半画素精度で差分を求めるときにはローカルデコード画像データを出力する。
【００３２】
ＤＣＴ部２６は、図２に示す８画素×８画素の１ブロック単位で演算され、１ブロック毎にＤＣＴ係数を求めるものである。１ブロックは、マクロブロックを４分割して得られる領域である。このブロックは、水平方向及び垂直方向にそれぞれ８個の整数画素が並ぶ領域ということができる。このＤＣＴの詳細については、例えば日本実業出版社の「JPEG&MPEG  図解でわかる画像圧縮技術」（越智宏、黒田英夫の共著）に説明されている。
【００３３】
ＤＣＴ後のＤＣＴ係数は、１ブロック内の画像の濃淡変化を、全体の明るさ（ＤＣ成分）と空間周波数（ＡＣ成分）とで表わしたものである。図３は、８画素×８画素の１ブロック内のＤＣＴ係数の一例を示している（上述の図書の第１１６頁の図５−６を引用）。その左上隅のＤＣＴ係数がＤＣ成分を示し、それ以外のＤＣＴ係数がＡＣ成分を示す。なお、ＡＣ成分のうち、高周波成分を省略しても画像認識への影響が少ない。
【００３４】
量子化部２８は、１ブロック内の各ＤＣＴ係数を、量子化テーブル中の対応する位置の量子化ステップ値で除算して、情報量を少なくするために実施される。例えば、図３のＤＣＴ係数を図４の量子化テーブルを用いて量子化した１ブロック内のＤＣＴ係数を図５に示す（上述の図書の第１１７頁の図５−９及び図５−１０を引用）。図５に示す通り、特に、高周波成分のＤＣＴ係数を量子化ステップ値で除算し、その小数点以下を四捨五入すると、ほとんどがゼロデータとなり、情報量が大幅に減少している。従って、量子化部２８は、上記の２つの画像の差分を量子化するということができる。
【００３５】
画像データ圧縮装置２０では、上述の動き検出（ＭＥ）を実施するために、帰還ルートが必要となる。この帰還ルートでは、図１に示すように、逆量子化（ｉＱ）、逆ＤＣＴ及び動き補償（ＭＣ：Motion Compensation）が実施され、動き検出、ＤＣＴ及び量子化を含むエンコード処理に対応したデコード処理を行ってローカルデコード画像データを生成し、該ローカルデコード画像データをメモリ２２に格納する。なお、動き補償の詳細な動作については省略するが、この処理は図２に示す１６画素×１６画素の１マクロブロック単位で実施される。
【００３６】
ホスト４０では、ＤＣ／ＡＣ（直流／交流成分）予測部４２、スキャン部４４、可変長符号化（Variable Length Code：ＶＬＣ）部４６、レートコントロール部４８の機能をＣＰＵに実現させる。
【００３７】
ＤＣ／ＡＣ予測部４２で実施されるＤＣ／ＡＣ予測処理及びスキャン部４４で実施されるスキャン処理は、共にＶＬＣ部４６の可変長符号の符号化の効率を高めるために必要な処理である。なぜなら、可変長符号への符号化は、ＤＣ成分については隣接ブロック間での差分を符号化し、ＡＣ成分についてはブロック内を周波数が低い側から高い側に向けてスキャン（ジグザグスキャンとも称する）して符号化の順序を決める必要があるからである。
【００３８】
可変長符号への符号化とは、エントロピー符号化とも称され、符号化原理として、出現頻度の多いものは少ない符号で表わすように符号化するものである。このエントロピー符号化には、ハフマン符号化が採用される。
【００３９】
そしてＶＬＣ部４６は、ＤＣ／ＡＣ予測部４２、スキャン部４４での結果を利用して、ＤＣ成分について隣接ブロック間での差分を符号化し、ＡＣ成分についてはスキャンされた順番で低周波側から高周波側から順にＤＣＴ係数値を符号化する。
【００４０】
ここで、画像データは、その画像の複雑さや動きの激しさによって情報の発生量が変動する。この変動を吸収し、一定の伝送レートで伝送するには符号発生量の制御が必要であり、これがレートコントロール部４８で行われるレートコントロールである。レートコントロールのために通常バッファメモリが設けられ、そのバッファメモリがオーバーフローしないように蓄積情報量を監視し、情報発生量を抑えるようにする。具体的には、量子化部２８での量子化特性を粗くして、ＤＣＴ係数値を表すビット数を減らしている。
【００４１】
図６に、図１の画像データ圧縮システム１０のエンコード処理によって圧縮された画像データのデコード処理の概要を示す。このデコード処理は、画像データ圧縮システム１０のエンコード処理を逆順で且つ逆処理することで達成される。なお、図６の「ポストフィルタ」とは、ブロックノイズを消去するためのフィルタである。また図６の「ＹＵＶ／ＲＧＢ変換」とは、ポストフィルタの出力を、ＹＵＶフォーマットからＲＧＢフォーマットに変換することを指す。
【００４２】
２．  動き検出
上述のように動き検出の結果を符号化していくため、動き検出の精度が画質にも大きく影響する。また、動き検出の処理量が多く、高速かつ高精度に動き検出を実現することが重要である。本実施形態における画像差分演算は、図１の動き検出部２４で行われる動き検出処理において行われる。
【００４３】
図７に、動き検出処理の概要を模式的に示す。
【００４４】
動き検出処理では、動きベクトルＭＶが求められる。ここで、図１の旧入力画像データの画像又はローカルデコード画像データの画像を参照画像ＲｅｆＰとし、新入力画像データの画像（現画像（現在画像：present image））をオリジナル画像ＯｒｇＰとする。動き検出処理では、参照画像ＲｅｆＰ内に設定されるマクロブロックである参照マクロブロックＲＭＢとオリジナル画像ＯｒｇＰ内に設定されるマクロブロックであるオリジナルマクロブロックＯＭＢとの間の差分が最小となる位置を求める。そして、両マクロブロックの差分が最小となるときの両マクロブロックの間の動きベクトルＭＶを出力する。
【００４５】
図８に、本実施形態における動き検出処理の一例のフロー図を示す。
【００４６】
まず、整数画素精度で、両マクロブロックの差分が最小となる位置の動きベクトルが求められる（ステップＳ１０）。差分は、両マクロブロックの比較対象となる画素の画素値の誤差の和として求められる。ここで、動きベクトルは、この誤差の和が最小となる誤差最小位置において、参照マクロブロックＲＭＢの所定位置（例えば左上の画素）と該所定位置に対応するオリジナルマクロブロックＯＭＢの所定位置とに基づいて求められる。
【００４７】
その後、ステップＳ１０で求められた誤差最小位置での整数画素位置の周辺の半画素位置単位で、更に細かく両マクロブロックの誤差が最小となる位置の動きベクトルが求められる（ステップＳ１１）。
【００４８】
そして、ステップＳ１１において求められた動きベクトルが、最終的な動きベクトルＭＶとして出力される（ステップＳ１２）。
【００４９】
図９に、整数画素位置と半画素位置との説明図を示す。
【００５０】
図９では、マクロブロックの一部を示している。整数画素位置は、画像を構成する画素の位置である。図９では、整数画素位置fp1〜fp9が示されている。各整数画素位置の画素値は、各画素の輝度データである。
【００５１】
半画素位置は、隣接する２又は４の整数画素位置により求められる。図９では、整数画素位置fp5の周辺の半画素位置hp0-5〜hp7-5の８点が示されている。半画素位置hp0-5の画素値は、整数画素位置fp1、fp2、fp4、fp5の４点の画素値の平均値として求められる。半画素位置hp1-5の画素値は、整数画素位置fp2、fp5の２点の画素値の平均値として求められる。半画素位置hp2-5の画素値は、整数画素位置fp4、fp5の２点の画素値の平均値として求められる。半画素位置hp3-5の画素値は、整数画素位置fp2、fp3、fp5、fp6の４点の画素値の平均値として求められる。半画素位置hp4-5の画素値は、整数画素位置fp5、fp6の２点の画素値の平均値として求められる。半画素位置hp5-5の画素値は、整数画素位置fp4、fp5、fp7、fp8の４点の画素値の平均値として求められる。半画素位置hp6-5の画素値は、整数画素位置fp5、fp8の２点の画素値の平均値として求められる。半画素位置hp7-5の画素値は、整数画素位置fp5、fp6、fp8、fp9の４点の画素値の平均値として求められる。
【００５２】
４点の整数画素位置の画素値の平均値として求められる半画素位置の平均値は、例えば次式により求められる。
【００５３】
Ｒ＝（Ａ＋Ｂ＋Ｃ＋Ｄ＋２−ｒ）／４      ・・・（１）
ここで、Ｒが半画素位置の画素値、Ａ〜Ｄが４点の整数画素位置の画素値、ｒが小数点を切り上げるか切り捨てるかを制御するための制御変数である。
【００５４】
また２点の整数画素位置の画素値の平均値として求められる半画素位置の平均値は、例えば次式により求められる。
【００５５】
Ｒ＝（Ａ＋Ｂ＋１−ｒ）／２      ・・・（２）
このように本実施形態では、整数画素単位で誤差最小位置を粗い精度で求めた後に、半画素単位で誤差最小位置をより細かい精度で求める。
【００５６】
３．  画像差分演算
３．１  整数画素精度
図１０に、本実施形態における整数画素精度で誤差最小位置を求める処理例のフロー図を示す。ここでは、logarithmicサーチと呼ばれる手法で誤差最小位置を求める場合の処理を示している。この処理は、図８のステップＳ１０で行われる。
【００５７】
図１１に、参照画像におけるlogarithmicサーチの範囲の説明図を示す。
【００５８】
初期状態ではlogarithmicサーチの中心位置ｉが、動きベクトルの水平成分ＭＶｘ、垂直成分ＭＶｙが０となる位置となる。この位置ｉが定まると、位置ｉから水平方向及び垂直方向にサーチ範囲を決める変数ＤＩＳだけ離れた位置ｂ、ｆ、ｄ、ｈが定められる。また、位置ｂ、ｈで決まる位置ａ、位置ｈ、ｆで決まる位置ｇ、位置ｂ、ｄで決まる位置ｃ、位置ｄ、ｆで決まる位置ｅが、それぞれ定められる。
【００５９】
そして、位置ａ〜ｈの８点のいずれかと中心位置ｉに対応するオリジナル画像の整数画素位置との差分を求めて、その差分が最小となる位置が求められる。
【００６０】
即ち、図１０において、まず変数centerに０、変数ＤＩＳに初期値が設定され（ステップＳ２０）、誤差最小位置として、動きベクトルが零ベクトルとなる位置が設定される（ステップＳ２１）。
【００６１】
次に、図１１に示す位置ａ〜ｈのうちの１点（例えば１回目が位置ａ、２回目が位置ｂ、・・・）が選択され、この位置とlogarithmicサーチの中心位置である位置ｉに対応したオリジナル画像の整数画素位置との間で誤差が求められる（ステップＳ２２）。この誤差は、例えば絶対差分和として求められる。
【００６２】
そして、ステップＳ２２で求めた誤差が、誤差最小位置での誤差である最小誤差より小さいか否かが判別される（ステップＳ２３）。ステップＳ２２で求めた誤差が最小誤差より小さいと判別されたとき（ステップＳ２３：Ｙ）、ステップＳ２２で誤差を求める際に選択された位置（位置ａ〜ｈのいずれか１つ）が誤差最小位置として更新される（ステップＳ２４）。
【００６３】
ステップＳ２３において、ステップＳ２２で求めた誤差が最小誤差以上であると判別されたとき（ステップＳ２３：Ｎ）、或いはステップＳ２４の後、位置ａ〜ｈのすべての位置で誤差最小位置か否かという評価が終了しないとき（ステップＳ２５：Ｎ）、ステップＳ２２に戻る。
【００６４】
ステップＳ２５において、位置ａ〜ｈのすべての位置で誤差最小位置か否かという評価が終了したとき（ステップＳ２５：Ｙ）、変数ＤＩＳの２分の１の値が変数ＤＩＳに設定され（ステップＳ２６）、ステップＳ２５の時点で求められた誤差最小位置が変数centerに設定される（ステップＳ２７）。
【００６５】
続いて、変数ＤＩＳが１以上のとき（ステップＳ２８：Ｎ）、ステップＳ２２に戻る。ステップＳ２８において、変数ＤＩＳが１より小さいとき（ステップＳ２８）、一連の処理を終了する（エンド）。即ち、整数画素単位での誤差最小位置が求められたので、その後は、後述する半画素単位での誤差最小位置を求める処理が行われることになる。
【００６６】
ここで、図１０のステップＳ２２で行われる整数画素精度での誤差演算の処理例について説明する。
【００６７】
図１２に、整数画素精度での誤差演算処理例のフローを示す。
【００６８】
以下では、予め新入力画像データ、旧入力画像データ及びローカルデコード画像データの各画像の水平方向に並ぶ整数画素位置の輝度データ（画素値）が該画像の垂直方向の順番でメモリ２２に格納されているものとする。そして、このメモリ２２から各画像の整数画素位置が水平方向に並ぶ順番に順次各輝度データが読み出されながら、画像の垂直方向に該輝度データが読み出されるものとする。
【００６９】
まず、メモリ２２から、メモリバス幅分のピクセル数のオリジナルマクロブロックＯＭＢの輝度データが読み出される（ステップＳ３０）。例えばメモリバス幅が３２ビットで各ピクセルの輝度データが８ビットである場合、４ピクセル分ずつ輝度データが読み出される。
【００７０】
同様に、メモリ２２から、メモリバス幅分のピクセル数の参照マクロブロックＲＭＢの輝度データが読み出され（ステップＳ３１）、入力バッファに格納される（ステップＳ３２）。これが、参照マクロブロックＲＭＢの輝度データの準備が完了するまで繰り返される（ステップＳ３３：Ｎ）。
【００７１】
参照マクロブロックＲＭＢの輝度データの準備が完了すると（ステップＳ３３：Ｙ）、ステップＳ３０で読み出されたオリジナルマクロブロックＯＭＢの輝度データと、ステップＳ３３の時点で読み出された参照マクロブロックＲＭＢの輝度データとの誤差が求められる（ステップＳ３４）。このとき、誤差を求めるオリジナルマクロブロックＯＭＢの整数画素位置と参照マクロブロックＲＭＢの整数画素位置とが対応付けられており、両マクロブロックの輝度データの誤差が例えば４ピクセル分ずつ同時に求められる。なおステップＳ３４における誤差計算は、ピクセル毎に求められた誤差の絶対値が、マクロブロック単位で累加されていく。
【００７２】
続いて、次の誤差を求めるためにマクロブロック内の位置が更新され（ステップＳ３５）、マクロブロック内の全ピクセルの評価が終了しないとき（ステップＳ３６：Ｎ）、ステップＳ３０に戻る。ステップＳ３６においてマクロブロック内の全ピクセルの評価が終了したとき（ステップＳ３６：Ｙ）、一連の処理を終了する（エンド）。
【００７３】
３．２  半画素精度
図１３に、本実施形態における半画素精度で誤差最小位置を求める処理例のフロー図を示す。この処理は、図８のステップＳ１１で行われる。
【００７４】
まず、変数ＤＩＳに１／２が設定される（ステップＳ４０）。このように設定された変数ＤＩＳに対応して、図１１と同様に位置ａ´〜ｈ´が定められる。
【００７５】
そこで、この位置ａ´〜ｈ´のうちの１点（例えば１回目が位置ａ´、２回目が位置ｂ´、・・・）が選択され、この位置とlogarithmicサーチの中心位置である位置ｉに対応したオリジナル画像の整数画素位置との間で誤差が求められる（ステップＳ４１）。この誤差は、例えば絶対差分和として求めることができる。
【００７６】
そして、ステップＳ４１で求めた誤差が、誤差最小位置での誤差である最小誤差より小さいか否かが判別される（ステップＳ４２）。ステップＳ４１で求めた誤差が最小誤差より小さいと判別されたとき（ステップＳ４２：Ｙ）、ステップＳ４１で誤差を求める際に選択された位置（位置ａ´〜ｈ´のいずれか１つ）が誤差最小位置として更新される（ステップＳ４３）。
【００７７】
ステップＳ４２において、ステップＳ４１で求めた誤差が最小誤差以上であると判別されたとき（ステップＳ４２：Ｎ）、或いはステップＳ４３の後、位置ａ´〜ｈ´のすべての位置で誤差最小位置か否かという評価が終了しないとき（ステップＳ４４：Ｎ）、ステップＳ４１に戻る。
【００７８】
ステップＳ４４において、位置ａ´〜ｈ´のすべての位置で誤差最小位置か否かという評価が終了したとき（ステップＳ４４：Ｙ）、一連の処理を終了する（エンド）。
【００７９】
次に、図１３のステップＳ４１で行われる半画素精度での誤差演算の処理例について説明する。まず本実施形態における半画素精度での誤差演算を説明する前に、本実施形態の比較例における半画素精度での誤差演算の処理例について説明する。
【００８０】
図１４及び図１５に、比較例における半画素精度での誤差演算の処理例のフローを示す。
【００８１】
図１３のステップＳ４１の時点で、変数ＤＩＳに対応して位置ａ´〜ｈ´が定まる。そこで、この位置ａ´〜ｈ´の中から１つが選択される（ステップＳ５０）。
【００８２】
続いて、メモリ２２から、メモリバス幅分のピクセル数のオリジナルマクロブロックＯＭＢの輝度データが読み出される（ステップＳ５１）。例えばメモリバス幅が３２ビットで各ピクセルの輝度データが８ビットである場合、４ピクセル分ずつ輝度データが読み出される。
【００８３】
次に、メモリ２２から、メモリバス幅分のピクセル数の参照マクロブロックＲＭＢの輝度データが読み出され（ステップＳ５２）、入力バッファに格納される（ステップＳ５３）。これが、参照マクロブロックＲＭＢの輝度データの準備が完了するまで繰り返される（ステップＳ５４：Ｎ）。
【００８４】
参照マクロブロックＲＭＢの輝度データの準備が完了すると（ステップＳ５４：Ｙ）、半画素位置の画素値が求められる（ステップＳ５５）。半画素位置の画素値は、メモリ２２に記憶されていないため、改めて整数画素位置の画素値を用いて求める必要がある。より具体的には、図９で説明したように、上述の（１）式又は（２）式に従って、２又は４の整数画素位置の輝度データを用いて求められる。
【００８５】
そしてステップＳ５５で求められた半画素位置の輝度データを用いて、輝度データの誤差計算が行われる（ステップＳ５６）。即ち、ステップＳ５１で読み出されたオリジナルマクロブロックＯＭＢの整数画素位置の輝度データと、ステップＳ５４の時点で読み出された参照マクロブロックＲＭＢの半画素位置の輝度データとの誤差が求められる。例えばステップＳ５０において半画素位置ａ´が選択されたものとすると、図９に示す場合において参照マクロブロックＲＭＢの半画素位置hp0-5とオリジナルマクロブロックＯＭＢの整数画素位置fp5との誤差が求められる。このようにして、両マクロブロックの輝度データの誤差を例えば４ピクセル分ずつ同時に求めることができる。なおステップＳ５６における誤差計算は、ピクセル毎に求められた誤差の絶対値をマクロブロック単位で累加していく。
【００８６】
続いて、次の誤差を求めるためにマクロブロック内の位置が更新され（ステップＳ５７）、マクロブロック内の全ピクセルの評価が終了しないとき（ステップＳ５８：Ｎ）、ステップＳ５１に戻る。ステップＳ５８においてマクロブロック内の全ピクセルの評価が終了したとき（ステップＳ５８：Ｙ）、ステップＳ５８の時点で求められた誤差が、誤差最小位置での誤差である最小誤差より小さいか否かが判別される（ステップＳ５９）。求めた誤差が最小誤差より小さいと判別されたとき（ステップＳ５９：Ｙ）、誤差を求める際に選択された位置（位置ａ´〜ｈ´のいずれか１つ）が誤差最小位置として更新される（ステップＳ６０）。
【００８７】
ステップＳ５９において、求めた誤差が最小誤差以上であると判別されたとき（ステップＳ５９：Ｎ）、或いはステップＳ６０の後、位置ａ´〜ｈ´のすべての位置で誤差最小位置か否かという評価が終了しないとき（ステップＳ６１：Ｎ）、ステップＳ５０に戻る。
【００８８】
ステップＳ６１において、位置ａ´〜ｈ´のすべての位置で誤差最小位置か否かという評価が終了したとき（ステップＳ６１：Ｙ）、一連の処理を終了する（エンド）。
【００８９】
以上のように比較例における半画素精度での誤差演算処理では、マクロブロック内でピクセル位置を更新するたびに、オリジナルマクロブロックＯＭＢの輝度データと参照マクロブロックＲＭＢの輝度データを読み出し、半画素位置での輝度データを求め、更に各半画素位置と対応する整数画素位置との誤差を求める必要がある。そして、これを８つの半画素位置について繰り返す必要がある。そのため、各半画素位置が２又は４の整数画素位置によって共有されるにも関わらず、重複して半画素位置の演算が行われる。また、輝度データを読み出すためのメモリアクセスが頻発し、半画素精度での誤差演算の処理時間がかかる。
【００９０】
そこで本実施形態では、各整数画素位置の周辺の８つの半画素位置の各半画素位置が２又は４の整数画素位置によって共有されることに着目し、メモリ２２から整数画素位置の画素値を読み出す毎に、当該整数画素位置と過去に読み出された整数画素位置とによって特定される複数の半画素位置の画素値を求めるようにしている。特に、垂直方向に隣接する整数画素値の画素値を用いて半画素位置の画素値を求めるため、ブロック内の最初の水平方向に並ぶ整数画素位置では、ブロックの外側の整数画素位置の画素値から順次読み出すようにする。これにより、重複して半画素位置の演算が行われることを防止し、不要なメモリアクセスも削減できる。ここで、過去に読み出された整数画素位置は、当該整数画素位置と垂直方向及び水平方向の少なくとも１つの方向において隣接する整数画素位置である。
【００９１】
更に本実施形態では、１つの半画素位置の画素値が求められる毎に、対応する整数画素位置との間で誤差計算が可能な場合には該整数画素位置との間で誤差計算を行う。この結果、半画素精度での画像差分演算の処理を高速化でき、一連のエンコード処理においてネックとなる動き検出を高精度かつ高速に行うことができるようになる。
【００９２】
以下、このような本実施形態について説明する。
【００９３】
動き検出ではマクロブロック単位に動きベクトルを生成する必要がある。本実施形態では、マクロブロックを４分割してブロック単位で誤差演算を行い、ブロック毎に求められた誤差に基づいてマクロブロックの誤差を求めることができる。
【００９４】
図１６に、本実施形態におけるマクロブロックとブロックとの関係を示す。
【００９５】
マクロブロックは、水平方向に並ぶ１６画素と垂直方向に並ぶ１６画素とにより定められる矩形領域である。これに対してブロックは、水平方向に並ぶ８画素と垂直方向に並ぶ８画素とにより定められる矩形領域である。従って、水平方向にブロックＢＬ０、ＢＬ１が（第１及び第２のブロック）並び、またブロックＢＬ２、ＢＬ３（第３及び第４のブロック）が並ぶ。更に垂直方向にブロックＢＬ０、ＢＬ２（第１及び第３のブロック）が並び、またブロックＢＬ１、ＢＬ３（第２及び第４のブロック）が並ぶ。
【００９６】
ここで、ブロックＢＬ０、ＢＬ１の境界では、垂直方向の８個の整数画素位置の周辺の一部の半画素位置が共有される（ＢＤ０）。同様に、ブロックＢＬ２、ＢＬ３の境界では、垂直方向の８個の整数画素位置の周辺の一部の半画素位置が共有される（ＢＤ１）。またブロックＢＬ０、ＢＬ２の境界では、水平方向の８個の整数画素位置の周辺の一部の半画素位置が共有される（ＢＤ２）。またブロックＢＬ１、ＢＬ３の境界では、水平方向の８個の整数画素位置の周辺の一部の半画素位置が共有される（ＢＤ３）。
【００９７】
そこで本実施形態では、マクロブロックを４分割したブロック単位に半画素精度で誤差演算を行う際に、隣接するブロック間で共有される半画素位置の演算についても、いずれか一方のブロック内で行うようにする。こうすることで、隣接するブロック間で共有される半画素位置の演算が重複して行われることを防止できる。
【００９８】
図１７に、図１６のブロックＢＬ０の整数画素位置及び半画素位置を模式的に示す。ここでは、ブロックＢＬ０について図示するが、ブロックＢＬ２も同様である。
【００９９】
ブロックＢＬ０では、水平方向に並ぶ８個の整数画素位置が並ぶ。そして、水平方向に並ぶ８個の整数画素位置群が垂直方向に８行並ぶ。従って、図９で説明したように１つの整数画素位置に対して周辺の８つの半画素位置を定める場合、隣接する２つの整数画素位置の間では３点の半画素位置が共有される。
【０１００】
例えば図９の半画素位置hp1-5、hp2-5、hp4-5、hp6-5に対応する半画素位置では、隣接する２つの整数画素位置との間で共有される。また例えば図９の半画素位置hp0-5、hp3-5、hp5-5、hp7-5に対応する半画素位置では、周囲の４つの整数画素位置との間で共有される。
【０１０１】
更にブロックＢＬ０を構成する整数画素位置により定められる半画素位置のうち、整数画素位置bl0_07、bl0_17、・・・、bl0_77の右側の半画素位置群ＳＨＲ１は、ブロックＢＬ１を構成する整数画素位置により定められる半画素位置群として共有できる。また、ブロックＢＬ０を構成する整数画素位置により定められる半画素位置のうち、整数画素位置bl0_70、bl0_71、・・・、bl0_77の下側の半画素位置群ＳＨＲ２は、ブロックＢＬ２を構成する整数画素位置により定められる半画素位置群として共有できる。
【０１０２】
図１７ではブロックＢＬ０を示しているが、ブロックＢＬ２についても同様である。即ち、ブロックＢＬ２を構成する整数画素位置により定められる半画素位置のうち、整数画素位置bl2_07、bl2_17、・・・、bl2_77の右側の半画素位置群は、ブロックＢＬ３を構成する整数画素位置により定められる半画素位置群として共有できる。また、ブロックＢＬ２を構成する整数画素位置により定められる半画素位置のうち、整数画素位置bl2_00、bl2_01、・・・、bl2_07の上側の半画素位置群は、ブロックＢＬ０を構成する整数画素位置により定められる半画素位置群ＳＨＲ２として共有できる。
【０１０３】
図１８に、図１６のブロックＢＬ１の整数画素位置及び半画素位置を模式的に示す。ここでは、ブロックＢＬ１について図示するが、ブロックＢＬ３も同様である。
【０１０４】
ブロックＢＬ１では、水平方向に並ぶ８個の整数画素位置が並ぶ。そして、水平方向に並ぶ８個の整数画素位置群が垂直方向に８行並ぶ。従って、図１７と同様に、図９で説明したように１つの整数画素位置に対して周辺の８つの半画素位置を定める場合、隣接する２つの整数画素位置の間では３点の半画素位置が共有される。
【０１０５】
図１８では、ブロックＢＬ１を構成する整数画素位置により定められる半画素位置のうち、最左列の整数画素位置bl1_00、bl1_10、・・・、bl1_70の左側の半画素位置群ＳＨＲ３は、ブロックＢＬ０を構成する整数画素位置により定められる半画素位置群ＳＨＲ１として共有できる。また、ブロックＢＬ１を構成する整数画素位置により定められる半画素位置のうち、最下行の整数画素位置bl1_70、bl1_71、・・・、bl1_77の下側の半画素位置群ＳＨＲ４は、ブロックＢＬ３を構成する整数画素位置により定められる半画素位置群として共有できる。
【０１０６】
図１８ではブロックＢＬ１を示しているが、ブロックＢＬ３についても同様である。即ち、ブロックＢＬ３を構成する整数画素位置により定められる半画素位置のうち、最左列の整数画素位置bl3_00、bl3_10、・・・、bl3_70の左側の半画素位置群は、ブロックＢＬ２を構成する整数画素位置により定められる半画素位置群として共有できる。また、ブロックＢＬ３を構成する整数画素位置により定められる半画素位置のうち、最上行の整数画素位置bl3_00、bl3_01、・・・、bl3_07の上側の半画素位置群は、ブロックＢＬ３を構成する整数画素位置により定められる半画素位置群ＳＨＲ４として共有できる。
【０１０７】
そして、このような半画素位置を求めるための整数画素位置の画素値は、メモリ内において、参照画像の水平方向に整数画素位置が並ぶ順序で該参照画像の垂直方向に順番に格納される。従って、このメモリからは、参照画像の水平方向に整数画素位置が並ぶ順序で該参照画像の垂直方向に順番に読み出される。
【０１０８】
本実施形態では、このような整数画素位置の読み出し順序と、上述の各ブロック内での半画素位置が共有される点とに着目して、メモリからブロック内の整数画素位置の画素値が読み出される毎に、複数の整数画素位置によって供給される半画素位置を求める。
【０１０９】
例えば図１７において、ブロック内の整数画素位置bl0_00〜bl0_07、bl0_10〜bl0_17、・・・、bl0_70〜bl0_77の周辺の半画素位置の画素値を求めるために、以下のようなブロックの外側に位置する整数画素位置の画素値が必要となる。即ち、整数画素位置bl0_00、bl0_01、・・・、bl0_07の上側の半画素位置を求めるには、整数画素位置bl0 _xyspl0、bl0_yspl00、bl0_yspl01、・・・、bl0_yspl07、bl0_xyspl1の各画素値が必要である。また整数画素位置bl0_00、bl0_10、・・・、bl0_70の左側の半画素位置を求めるには、整数画素位置bl0_xyspl0、bl0_xspl00、bl0_xspl01、・・・、bl0_xspl07、bl0xyspl2の各画素値が必要である。また整数画素位置bl0_70、bl0_71、・・・、bl0_77の下側の半画素位置を求めるには、整数画素位置bl0_xyspl2、bl0_yspl10、bl0_yspl11、・・・、bl0_yspl17、bl0_xyspl3の各画素値が必要である。更に整数画素位置bl0_07、bl0_17、・・・、bl0_77の右側の半画素位置を求めるには、整数画素位置bl0_xyspl1、bl0_xspl10、bl0_xspl11、・・・、bl0_xspl17、bl0_xyspl3の各画素値が必要である。そのため、ブロックの外側の整数画素位置の画素値から順に読み出すことで、整数画素位置の画素値を読み出す毎に、ブロック内の整数画素位置の周辺の半画素位置の画素値を順次求めていくことができるようになる。
【０１１０】
以上のようにすることで、不要なメモリアクセスの繰り返しを回避し、重複する半画素位置の演算を省略できる。
【０１１１】
図１９に、本実施形態における半画素位置の演算の説明図を示す。図１９では、図１７と同一部分には同一符号を付し、適宜説明を省略する。
【０１１２】
ここでは、メモリから参照画像の水平方向に整数画素位置が並ぶ順序で該参照画像の垂直方向に順番に読み出される途中の状態を示している。即ち、既に整数画素位置bl0_03、bl0_04、bl0_05、・・・、bl0_13の各画素値が読み出されているものとする。従って、この状態では、半画素位置hp0_03-1、hp0_04-0、hp0_04-1、hp0_04-2、hp0_05-0、hp0_05-1、hp0_05-2、hp0_06-0、hp0_06-2、・・・、hp0_13-1の画素値については既に求められている。
【０１１３】
この状態において、新たに参照画像の整数画素位置bl0_14の画素値が読み出される場合を考える。整数画素位置bl0_14の画素値が判明することで、整数画素位置bl0_13、bl0_14で決まる半画素位置hp0_14-2、整数画素位置bl0_03、bl0_04、bl0_13、bl0_14で決まる半画素位置hp0_14-0、整数画素位置bl0_04、bl0_14で決まる半画素位置hp0_14-1の３点の半画素位置の画素値を求めることができる。各半画素位置が共有されるため、この３点の半画素位置の画素値を求めることは、８点の半画素位置の画素値を求めたことに相当する。従って、その分だけ処理負荷を軽減できることを意味する。
【０１１４】
こうして本実施形態では、ブロック（所定の領域）内の整数画素位置の画素値を読み出す毎に、当該整数画素位置と、当該整数画素位置と、当該整数画素位置と水平方向に隣接する第１の整数画素位置と、当該整数画素位置と垂直方向に隣接する第２の整数画素位置と、第１の整数画素位置と垂直方向に隣接し第２の整数画素位置と水平方向に隣接する第３の整数画素位置とによって特定される複数の半画素位置の画素値を、当該整数画素位置の画素値と、第１〜第３の整数画素位置の各画素値とに基づいて求めることができる。
【０１１５】
図１９では、整数画素位置bl0_14の１点の画素値が読み出された場合について説明したが、例えば４つの整数画素位置の画素値をまとめて読み出すことができる場合、同様にして各整数画素位置の画素値に対して、３点ずつ半画素位置の画素値が求められることになり、一度に１２点ずつ半画素位置の画素値が求められることになる。
【０１１６】
また、図１７及び図１８で説明したように、水平方向に隣接するブロックＢＬ０、ＢＬ１とブロックＢＬ２、ＢＬ３は、半画素位置群（ＳＨＲ１、ＳＨＲ３）を共有する。同様に、垂直方向に隣接するブロックＢＬ０、ＢＬ２とブロックＢＬ１、ＢＬ３は、それぞれ半画素位置群（ＳＨＲ２、ＳＨＲ４）を共有する。従って、上述のように半画素位置の画素値を求める際、水平方向に隣接するブロック同士が共有する半画素位置の画素値はいずれかのブロックにおいて求められることが望ましく、垂直方向に隣接するブロック同士が共有する半画素位置の画素値はいずれかのブロックにおいて求められることが望ましい。こうすることで、更に半画素位置の画素値の演算を省略でき、より一層の処理負荷の軽減を実現できる。
【０１１７】
更に本実施形態では、上述のように求められた半画素位置について、これと対応する現画像の整数画素位置との差分を求める。即ち、メモリからブロック内の整数画素位置の画素値が読み出される毎に、複数の整数画素位置によって供給される半画素位置を求め、これと対応する現画像の整数画素位置との間で差分を求める。
【０１１８】
図２０に、本実施形態の誤差演算の説明図を示す。図２０では、図１９と同一部分には同一符号を付し、適宜説明を省略する。
【０１１９】
本実施形態では、求められた１つの参照画像の半画素位置の画素値が、この半画素位置に対応する現画像の整数画素位置の画素値と比較される。例えば、参照画像の半画素位置hp0_14-0の画素値が、現画像の整数画素位置bl0_03の画素値との比較に用いられると共に、該現画像の整数画素位置bl0_04、bl0_13、bl0_14の各画素値との比較にも用いられる。そして、各比較処理において絶対誤差が求められて、ブロック内で各絶対誤差和が求められる。
【０１２０】
マクロブロック単位で求められた絶対誤差和が最小となる誤差最小位置で動きベクトルが求められるため、上述のようにブロック単位で求められた絶対誤差和をマクロブロック単位の誤差として評価すればよい。
【０１２１】
以上のような本実施形態における半画素精度での誤差演算の処理例について説明する。
【０１２２】
図２１及び図２２に、本実施形態における半画素精度での誤差演算の処理例のフローを示す。
【０１２３】
本実施形態の場合、図１４に示すように半画素位置の１点ずつメモリ２２から輝度データ（広義には画素値）を読み出す必要がない。そのため、まずメモリ２２から、メモリバス幅分のピクセル数のオリジナルマクロブロックＯＭＢの輝度データが読み出される（ステップＳ７０）。例えばメモリバス幅が３２ビットで各ピクセルの輝度データが８ビットである場合、４ピクセル分ずつ輝度データが読み出される。
【０１２４】
次に、メモリ２２からメモリバス幅分のピクセル数の参照マクロブロックＲＭＢの輝度データが読み出される（ステップＳ７１）。本実施形態では、垂直方向に隣接する整数画素位置の輝度データが同時に入力バッファに格納されるようになっており、ステップＳ７１で読み出された参照マクロブロックＲＭＢの輝度データが、過去に読み出した輝度データと共に入力バッファに格納される（ステップＳ７２）。これが、参照マクロブロックＲＭＢの輝度データの準備が完了するまで繰り返される（ステップＳ７３：Ｎ）。
【０１２５】
参照マクロブロックＲＭＢの輝度データの準備が完了すると（ステップＳ７３：Ｙ）、半画素位置の画素値が求められる（ステップＳ７４）。半画素位置の画素値は、図９で説明したように、上述の（１）式又は（２）式に従って、２又は４の整数画素位置の輝度データを用いて求められる。このとき、図１９で説明したように、１つの整数画素位置当たり例えば３点の整数画素位置の輝度データが求められる。
【０１２６】
そしてステップＳ７４で求められた半画素位置の輝度データを用いて、輝度データの誤差計算が行われる（ステップＳ７５）。即ち、図２０で説明したように、ステップＳ７０で読み出されたオリジナルマクロブロックＯＭＢの整数画素位置の輝度データと、ステップＳ７４で求められた参照マクロブロックＲＭＢの半画素位置の輝度データとの誤差が求められる。
【０１２７】
なお本実施形態では、すべての整数画素位置の読み出しが終了しない限り、すべての半画素位置について誤差計算を終了することができないため、ステップＳ７５における誤差計算を保持し、各半画素位置について計算する毎に誤差の絶対値を累加していく。
【０１２８】
続いて、次の整数画素位置の入力に備えて、入力バッファ内でデータがシフトされ（ステップＳ７６）、続いて、次の誤差を求めるためにマクロブロック内の位置が更新される（ステップＳ７７）。
【０１２９】
マクロブロック内の全ピクセルの評価が終了しないとき（ステップＳ７８：Ｎ）、ステップＳ７０に戻る。ステップＳ７８においてマクロブロック内の全ピクセルの評価が終了したとき（ステップＳ７８：Ｙ）、変数ＤＩＳに対応して定まる半画素位置ａ´〜ｈ´の１点を選択する（ステップＳ７９）。この時点では、半画素位置ａ´〜ｈ´のそれぞれについてオリジナルマクロブロックＯＭＢの整数画素位置との間の絶対誤差和が求まる。
【０１３０】
そして、ステップＳ７９で選択された半画素位置についての誤差が、誤差最小位置での誤差である最小誤差より小さいか否かが判別される（ステップＳ８０）。求めた誤差が最小誤差より小さいと判別されたとき（ステップＳ８０：Ｙ）、誤差を求める際に選択された位置（位置ａ´〜ｈ´のいずれか１つ）が誤差最小位置として更新される（ステップＳ８１）。
【０１３１】
ステップＳ８０において、求めた誤差が最小誤差以上であると判別されたとき（ステップＳ８０：Ｎ）、或いはステップＳ８１の後、位置ａ´〜ｈ´のすべての位置で誤差最小位置か否かという評価が終了しないとき（ステップＳ８２：Ｎ）、ステップＳ７９に戻る。
【０１３２】
ステップＳ８２において、位置ａ´〜ｈ´のすべての位置で誤差最小位置か否かという評価が終了したとき（ステップＳ８２：Ｙ）、一連の処理を終了する（エンド）。
【０１３３】
以上のように、本実施形態では、整数画素位置の輝度データを読み出す毎に半画素位置の輝度データを求めると共に演算可能な整数画素位置との間の絶対差分を求め、すべての整数画素位置の輝度データを読み出すことですべての半画素位置についての絶対差分和が求まる。そして、最後に、各半画素位置について求められた絶対差分和の中から最小のものを選択する。
【０１３４】
４．  ハードウェア構成例
次に、上述のような画像差分演算を行う図１の動き検出部２４のハードウェア構成例について説明する。
【０１３５】
図２３に、図１の動き検出部２４のハードウェア構成例のブロック図を示す。
【０１３６】
動き検出部２４では、動き検出制御部１００からのメモリ２２へのメモリ読み出し要求信号memory_readによって読み出された参照画像の参照マクロブロックＲＭＢの輝度データが入力バッファ１１０に格納される。ここで参照画像は、整数画素精度で画像の差分を求める場合には旧入力画像、半画素精度で画像の差分を求める場合にはローカルデコード画像である。この入力バッファ１１０は、画像の垂直方向に隣接する整数画素位置の輝度データが保持できる容量を有する。図２３では、ブロック毎に４画素単位でメモリ２２から輝度データを読み出して４画素毎に差分演算を行うために、メモリアクセス回数をできるだけ削減するように４画素×５回分の容量を有する。４画素毎に差分演算を行う場合、動きベクトルＭＶによっては参照画像の整数画素位置の画素値は最大で４回読み出す必要が生じることがあり、更に該参照画像の垂直方向に隣接する整数画素位置の画素値も必要とするからである。
【０１３７】
なお、メモリ２２からのオリジナルマクロブロックＯＭＢの輝度データは、オリジナルマクロブロックバッファ１２０に格納される。
【０１３８】
これまで、ローカルデコード画像と新入力画像との差分が最小となるときの両画像間の動きベクトルを求めるものとして説明していたが、図２３に示す動き検出部２４は、まず、オリジナルマクロブロックＯＭＢを基準に、動きベクトル生成部１３０によって生成された動きベクトルＭＶで表される位置の参照マクロブロックＲＭＢを求める。そして、このときの両画像の輝度データを比較する。即ち、動きベクトル生成部１３０が生成した動きベクトルＭＶを変えながら、両画像の差分が最小となるときの動きベクトルＭＶを更新していき、最終的な動きベクトルＭＶ＿ｂｅｓｔを出力する。この際、ブロック単位に画像の絶対差分和を求めて保持しておき、マクロブロック単位で画像の差分が最小となる位置を求めることができるようになっている。このような動きベクトル生成部１３０は、動き検出制御部１００によって制御される。
【０１３９】
動き検出部２４は、半画素位置演算回路（広義には半画素位置演算部）１３８を含む。半画素位置演算回路１３８は、入力バッファ１１０に格納された整数画素位置の輝度データを用いて４つの半画素位置の画素値を同時に求めることができる。
【０１４０】
動き検出部２４は、整数画素絶対差分演算回路１４０、加算器１４２、整数画素絶対差分和ラッチ１４４、セレクタ１４６、比較器１４８、誤差最小値保持レジスタ１５０、半画素絶対差分演算回路（広義には差分演算部）１６０を含む。整数画素絶対差分演算回路１４０は、入力バッファ１１０に格納された整数画素位置の輝度データとオリジナルマクロブロックバッファ１２０に格納された整数画素位置の輝度データの誤差の絶対値を、同時に４画素分求める。加算器１４２は、整数画素絶対差分和ラッチ１４４に保持された差分和と、整数画素絶対差分演算回路１４０からの４画素分の差分和とを加算する。整数画素絶対差分和ラッチ１４４は、加算器１４２の出力をラッチする。
【０１４１】
半画素絶対差分演算回路１６０は、半画素位置演算回路１３８によって求めれた半画素位置の輝度データとオリジナルマクロブロックバッファ１２０に格納された整数画素位置の輝度データの誤差の絶対値を、同時に４画素分求める。セレクタ１４６は、半画素絶対差分演算回路１６０からの出力と整数画素絶対差分和ラッチ１４４の出力のいずれかを選択する。より具体的には、セレクタ１４６は、半画素精度で差分を求めるときには半画素絶対差分演算回路１６０の出力を選択し、整数画素精度で差分を求めるときには整数画素絶対差分和ラッチ１４４の出力を選択する。
【０１４２】
比較器１４８は、セレクタ１４６の出力と誤差最小値保持レジスタ１５０に保持された誤差最小値とを比較し、セレクタ１４６の出力の方が小さいときその出力をアクティブにする。半画素絶対差分演算回路１６０が選択されて比較器１４８の出力がアクティブになったとき、誤差最小値保持レジスタ１５０には、半画素絶対差分演算回路１６０の出力が保持される。また整数画素絶対差分和ラッチ１４４が選択されて比較器１４８の出力がアクティブになったとき、誤差最小値保持レジスタ１５０には、整数画素絶対差分和ラッチ１４４の出力が保持される。
【０１４３】
本実施形態における画像差分演算装置は、このような入力バッファ１１０、オリジナルマクロブロックバッファ１２０、半画素位置演算回路１３８、整数画素絶対差分演算回路１４０、加算器１４２、整数画素絶対差分和ラッチ１４４、セレクタ１４６、比較器１４８、誤差最小値保持レジスタ１５０、半画素絶対差分演算回路１６０を含むことができる。これら各部は、動き検出制御部１００の演算タイミング発生回路１０２からの制御信号に基づいて制御される。なお、画像差分演算装置は、これらの一部を省略する構成であっても良い。
【０１４４】
図２４に、図２３の半画素絶対差分演算回路１６０の構成例のブロック図を示す。
【０１４５】
半画素絶対差分演算回路１６０では、オリジナルマクロブロックバッファ１２０からの整数画素位置の輝度データと半画素位置演算回路１３８からの半画素位置の輝度データを用いて絶対差分演算回路１６２が、差分和を求める。絶対差分演算回路１６２が求めた差分和は、マスク回路１６４において、演算タイミング発生回路１０２からのマスク制御信号に基づいてマスク制御される。半画素絶対差分演算回路１６０は、入力バッファ１１０からの５画素分に対して一度に各整数画素位置の絶対差分和を求めることができ、マスク回路１６４によって必要な差分和のみが加算器１６６に供給される。
【０１４６】
半画素絶対差分演算回路１６０では、半画素位置毎に設けられた半画素絶対差分和ラッチ１６８−０〜１６８−７を有し、演算タイミング発生回路１０２から指定された半画素位置に対して求めた絶対差分和が、該当の半画素絶対差分和ラッチに保持される。同様に、演算タイミング発生回路１０２から指定された半画素位置の半画素絶対差分和ラッチに保持された絶対差分和がセレクタ１７０に選択される。
【０１４７】
図２５及び図２６に、演算タイミング発生回路１０２の動作例を説明するための説明図を示す。参照画像の整数画素位置の輝度データが入力される毎に、該参照画像の半画素位置が求められる。この半画素位置は、半画素位置指定信号h_posによって指定される。半画素位置指定信号h_posが指定する番号は、図１７〜図２０に示す半画素位置の番号に対応している。そして、これらの半画素位置については、比較対象である現画像の整数画素位置の画素値と差分を求めることができる。イネーブル信号ＥＮ０〜３は、この誤差計算ができる半画素位置を指定する信号である。
【０１４８】
例えば、参照画像の整数画素位置bl0_00の画素値が入力されると、整数画素位置bl0_00の周辺の半画素位置hp0_00-0（h_pos=0）、hp0_00-1（h_pos=1）、hp0_00-2（h_pos=2）が求められる。そして参照画像の整数画素位置bl0_00に対応する現画像のブロックＢＬ０の整数画素位置BL0_00の画素値と、求められた半画素位置の画素値とが求められる。
【０１４９】
なお、イネーブル信号ＥＮ−ｓｐｌは、例えばブロック外の整数画素位置が読み出されたときに、求めた半画素位置に基づいて差分和を求めるために用いられる。
【０１５０】
図２７に、図２４の動き検出部２４の動作例のタイミング図を示す。
【０１５１】
図２５及び図２６を参照しながら、図２７をタイミング図について説明する。動き検出部２４の各部は、動作クロックＣＬＫを基準に動作するものとする。
【０１５２】
図２５において、整数画素位置bl0_11の画素値が読み出される場合、まずメモリ読み出し要求信号memory_readをメモリ２２に出力する。そして、入力バッファ１１０に参照画像の準備が完了すると完了信号ref_data_rdyがアクティブとなる。
【０１５３】
この場合、図２５を参照すると、半画素位置hp0_11-0（h_pos=0）、hp0_11-1（h_pos=1）、hp0_11-2（h_pos=2）、hp0_10-3（h_pos=3）、hp0_10-4（h_pos=4）、hp0_01-5（h_pos=5）、hp0_01-6（h_pos=6）、hp0_00-7（h_pos=7）の画素値が求められる。従って、イネーブル信号ＥＮ０〜３は、半画素位置指定信号h_posが０〜７の間はずっとアクティブとなる。
【０１５４】
演算タイミング発生回路１０２は、半画素位置指定信号h_posが０〜２の間はオリジナルマクロブロックバッファ１２０から整数画素位置BL0_11の画素値を出力させ、半画素位置指定信号h_posが３、４の間はオリジナルマクロブロックバッファ１２０から整数画素位置BL0_10の画素値を出力させる。また演算タイミング発生回路１０２は、半画素位置指定信号h_posが５、６の間はオリジナルマクロブロックバッファ１２０から整数画素位置BL0_01の画素値を出力させ、半画素位置指定信号h_posが７の間はオリジナルマクロブロックバッファ１２０から整数画素位置BL0_00の画素値を出力させる。
【０１５５】
こうして、例えば整数画素位置BL0_00〜BL0_03の絶対差分和を４画素単位で求める場合、図２５及び図２６のＡ１、Ａ２に示す制御が終了したときに求められることになる。
【０１５６】
なお、本発明は上述した実施の形態に限定されるものではなく、本発明の要旨の範囲内で種々の変形実施が可能である。
【０１５７】
なお本実施形態では、整数画素位置及び半画素位置の画素値が輝度データとして説明したが、これに限定されるものではない。また本実施形態では半画素位置の画素値の差分を求めるものとして説明したが、同様にして複数の半画素位置の画素値に基づいて求められる４分の１画素位置の画素の差分を求める場合にも適用できる。更には、本実施形態における動き検出装置が、ＭＰＥＧ−４のエンコード処理に適用される場合について説明したが、これに限定されるものではなく、Ｈ．２６４やその他のエンコード処理にも適用できる。
【０１５８】
また、本発明のうち従属請求項に係る発明においては、従属先の請求項の構成要件の一部を省略する構成とすることもできる。また、本発明の１の独立請求項に係る発明の要部を、他の独立請求項に従属させることもできる。
【図面の簡単な説明】
【０１５９】
【図１】本実施形態における動き検出装置が適用される画像データ圧縮システムの構成の概要を示すブロック図。
【図２】マクロブロックとブロックの説明図。
【図３】ＤＣＴ係数の一例の説明図。
【図４】量子化テーブルの一例の説明図。
【図５】量子化されたＤＣＴ係数の一例の説明図。
【図６】図１の画像データ圧縮システムのエンコード処理によって圧縮された画像データのデコード処理の概要を示す図。
【図７】動き検出処理の概要を示す模式図。
【図８】本実施形態における動き検出処理の一例のフロー図。
【図９】整数画素位置と半画素位置の説明図。
【図１０】本実施形態における整数画素精度で誤差最小位置を求める処理例のフロー図。
【図１１】参照画像におけるlogarithmicサーチの範囲の説明図。
【図１２】整数画素精度での誤差演算処理例のフロー図。
【図１３】本実施形態における半画素精度で誤差最小位置を求める処理例のフロー図。
【図１４】本実施形態の比較例における半画素精度での誤差演算の処理例のフローの前半を示す図。
【図１５】本実施形態の比較例における半画素精度での誤差演算の処理例のフローの後半を示す図。
【図１６】本実施形態におけるマクロブロックとブロックとの関係を示す図。
【図１７】図１６のブロックＢＬ０の整数画素位置及び半画素位置を示す模式図。
【図１８】図１６のブロックＢＬ１の整数画素位置及び半画素位置を示す模式図。
【図１９】本実施形態における半画素位置の演算の説明図。
【図２０】本実施形態の誤差演算の説明図。
【図２１】本実施形態における半画素精度での誤差演算の処理例のフローの前半を示す図。
【図２２】本実施形態における半画素精度での誤差演算の処理例のフローの後半を示す図。
【図２３】図１の動き検出部のハードウェア構成例のブロック図。
【図２４】図２３の半画素絶対差分演算回路の構成例のブロック図。
【図２５】演算タイミング発生回路の動作例の説明図。
【図２６】演算タイミング発生回路の動作例の説明図。
【図２７】図２４の動き検出部の動作例のタイミング図。
【符号の説明】
【０１６０】
１０  画像データ圧縮システム、２０  画像データ圧縮装置、２２  メモリ、
２４  動き検出部、２６  ＤＣＴ部、２８  量子化部、３０  逆量子化部、
３２  逆ＤＣＴ部、３４  動き補償部、４０  ホスト、４２  ＤＣ／ＡＣ予測部、
４４  スキャン部、４６  ＶＬＣ部、４８  レートコントロール部、
１００  動き検出制御部、１０２  演算タイミング発生回路、１１０  入力バッファ、
１２０  オリジナルマクロブロックバッファ、１３０  動きベクトル生成部、
１３８  半画素位置演算回路、１４０  整数画素絶対差分演算回路、
１４２、１６６  加算器、１４４  整数画素絶対差分和ラッチ、
１４６、１７０  セレクタ、１４８  比較器、１５０  誤差最小値保持レジスタ、
１６０  半画素絶対差分演算回路、１６２  絶対差分演算回路、１６４  マスク回路、
１６８−０〜１６８−７  半画素絶対差分和ラッチ
【図１】
2005354276.tif 000003
【図２】
2005354276.tif 000004
【図３】
2005354276.tif 000005
【図４】
2005354276.tif 000006
【図５】
2005354276.tif 000007
【図６】
2005354276.tif 000008
【図７】
2005354276.tif 000009
【図８】
2005354276.tif 000010
【図９】
2005354276.tif 000011
【図１０】
2005354276.tif 000012
【図１１】
2005354276.tif 000013
【図１２】
2005354276.tif 000014
【図１３】
2005354276.tif 000015
【図１４】
2005354276.tif 000016
【図１５】
2005354276.tif 000017
【図１６】
2005354276.tif 000018
【図１７】
2005354276.tif 000019
【図１８】
2005354276.tif 000020
【図１９】
2005354276.tif 000021
【図２０】
2005354276.tif 000022
【図２１】
2005354276.tif 000023
【図２２】
2005354276.tif 000024
【図２３】
2005354276.tif 000025
【図２４】
2005354276.tif 000026
【図２５】
2005354276.tif 000027
【図２６】
2005354276.tif 000028
【図２７】
2005354276.tif 000029