(57)【要約】【課題】入力画像がブランク領域を含む場合であっても視差画像を生成できる視差画像生成装置を提供する。【解決手段】実施形態によれば、第１画像内に設定される第１マクロブロックの第２画像に対する動きベクトルを出力する視差画像生成装置であって、前記第１画像は、第１ブランク領域および第１有効領域から構成され、前記第２画像は、第２有効領域から構成され、前記第１有効領域内に設定される前記第１マクロブロックの動きベクトルを算出するとともに、前記第１ブランク領域内に設定される前記第１マクロブロックの動きベクトルを前記算出された動きベクトルで補完する探索部と、前記第１有効領域内に設定される前記第１マクロブロックについては前記算出された動きベクトルを出力し、前記第１ブランク領域内に設定される前記第１マクロブロックについては前記補完された動きベクトルを出力する出力制御部と、を備える、視差画像生成装置が提供される。【選択図】図１
2015177270.tif 000002
【特許請求の範囲】
【請求項１】
第１画像内に設定される第１マクロブロックの第２画像に対する動きベクトルを出力する視差画像生成装置であって、
前記第１画像は、第１ブランク領域および第１有効領域から構成され、
前記第２画像は、第２有効領域から構成され、
前記第１有効領域内に設定される前記第１マクロブロックの動きベクトルを算出するとともに、前記第１ブランク領域内に設定される前記第１マクロブロックの動きベクトルを前記算出された動きベクトルで補完する探索部と、
前記第１有効領域内に設定される前記第１マクロブロックについては前記算出された動きベクトルを出力し、前記第１ブランク領域内に設定される前記第１マクロブロックについては前記補完された動きベクトルを出力する出力制御部と、を備える、視差画像生成装置。
【請求項２】
前記第１ブランク領域は、
前記第１画像の上端にある上ブランク領域と、
前記第１画像の下端にある下ブランク領域と、
前記第１画像の左端にある左ブランク領域と、
前記第１画像の右端にある右ブランク領域と、を含み、
前記探索部は、
ラスタスキャン順で前記第１マクロブロックの動きベクトルを算出または補完し、
前記上ブランク領域に設定される前記第１マクロブロックの動きベクトルを、予め定めた固定値の動きベクトルを用いて補完し、
前記下ブランク領域に設定される前記第１マクロブロックの動きベクトルを、前記第１有効領域の下端に設定された前記第１マクロブロックの動きベクトルを用いて補完し、
前記左ブランク領域に設定される前記第１マクロブロックの動きベクトルを、前記第１有効領域の左端に設定された前記第１マクロブロックの動きベクトルを用いて補完し、
前記右ブランク領域に設定される前記第１マクロブロックの動きベクトルを、前記第１有効領域の右端に設定された前記第１マクロブロックの動きベクトルを用いて補完する、請求項１に記載の視差画像生成装置。
【請求項３】
前記第１画像および前記第２画像を縮小して、第１ピラミッド画像および第２ピラミッド画像をそれぞれ生成するピラミッド画像生成部を備え、
前記探索部は、
前記第１ピラミッド画像内に設定される第２マクロブロックの、前記第２ピラミッド画像に対する動きベクトルを算出する第１動きベクトル探索部と、
処理対象の前記第１マクロブロックの位置と対応する位置にある前記第２マクロブロックの動きベクトルを参照して前記第１マクロブロックの前記動きベクトルを算出する第２動きベクトル探索部と、を有する、請求項１に記載の視差画像生成装置。
【請求項４】
前記第１動きベクトル探索部は、前記第２マクロブロックの動きベクトルを算出して、第１動きベクトルメモリに書き込み、
前記第２動きベクトル探索部は、前記第１マクロブロックの動きベクトルを算出して、第２動きベクトルメモリに書き込み、
前記第２動きベクトル探索部は、前記第１動きベクトルメモリおよび前記第２動きベクトルメモリに書き込まれた動きベクトルを参照して前記動きベクトルを算出する、請求項３に記載の視差画像生成装置。
【請求項５】
前記出力制御部は、
前記算出または補完された動きベクトルの少なくとも一部を格納可能なバッファと、
出力するマクロブロックの位置を特定する出力カウンタと、を有し、
前記出力制御部は、前記出力カウンタのカウント値と、前記第１ブランク領域の画素数と、に基づいて、前記第１ブランク領域内に設定される前記第１マクロブロックについても、前記第１有効領域内に設定される前記第１ブロックについて算出された動きベクトルを出力する、請求項１に記載の視差画像生成装置。
【請求項６】
前記第２画像は、前記第２有効領域および第２ブランク領域から構成され、
前記探索部は、前記第２有効領域内に設定されるマクロブロックの動きベクトルを算出するとともに、前記第２ブランク領域内に設定されるマクロブロックの動きベクトルを前記算出された動きベクトルで補完し、
前記出力制御部は、前記第２有効領域内に設定されるマクロブロックについては前記算出された動きベクトルを出力し、前記第２ブランク領域内に設定されるマクロブロックについては前記補完された動きベクトルを出力する、請求項１に記載の視差画像生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、視差画像生成装置に関する。
【背景技術】
【０００２】
コンピュテーショナルカメラの一方式として、複数のカメラからの入力画像に基づいて視差画像を生成する多眼カメラ方式がある。複数のカメラからの入力画像は、カメラにおけるレンズ間の位置ずれ（実装時の軸ずれ等）などに起因して、理想状態における視差の他に、入力画像間で画素ずれ、角度ずれ、歪みなどが発生し得る。この実装時のずれに起因する入力画像間の画素ずれなどを解消するため、入力画像の回転やシフトなどの画像処理（例えばアフィン処理）が行われる。入力画像の回転やシフトを伴う画像処理後に入力画像を比較する場合、画面端に画素値が存在しないブランク領域が発生し得る。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１１−１５０５７５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
入力画像がブランク領域を含む場合であっても視差画像を生成できる視差画像生成装置を提供する。
【課題を解決するための手段】
【０００５】
実施形態によれば、第１画像内に設定される第１マクロブロックの第２画像に対する動きベクトルを出力する視差画像生成装置であって、前記第１画像は、第１ブランク領域および第１有効領域から構成され、前記第２画像は、第２有効領域から構成され、前記第１有効領域内に設定される前記第１マクロブロックの動きベクトルを算出するとともに、前記第１ブランク領域内に設定される前記第１マクロブロックの動きベクトルを前記算出された動きベクトルで補完する探索部と、前記第１有効領域内に設定される前記第１マクロブロックについては前記算出された動きベクトルを出力し、前記第１ブランク領域内に設定される前記第１マクロブロックについては前記補完された動きベクトルを出力する出力制御部と、を備える、視差画像生成装置が提供される。
【図面の簡単な説明】
【０００６】
【図１】第１の実施形態に係る視差画像生成装置の概略構成を示すブロック図。
【図２】入力インターフェース１に入力される情報を説明する図。
【図３】フィルタ回路２１１の処理動作を詳しく説明する図。
【図４】マクロブロックが上および左ブランク領域に接しない場合の、動きベクトル探索回路５１０の処理動作を詳しく説明する図。
【図５】マクロブロックが上および左ブランク領域に接しない場合の、動きベクトル探索回路５１０の処理動作を詳しく説明する図。
【図６】マクロブロックが上および左ブランク領域に接しない場合の、動きベクトル探索回路５１０の処理動作を詳しく説明する図。
【図７】対象マクロブロックが上および／または左ブランク領域に接する場合の、動きベクトル探索回路５１０の処理動作を詳しく説明する図。
【図８】動きベクトルメモリ５２０への書き込みを詳しく説明する図。
【図９】バッファ６１の構成例を示す図。
【図１０】第２の実施形態に係る視差画像生成装置の概略構成を示すブロック図。
【図１１】図１０の視差画像生成装置による処理タイミングを説明する図。
【図１２】ブランク領域が斜めである場合のサブ画像の模式図。
【発明を実施するための形態】
【０００７】
以下、実施形態について、図面を参照しながら具体的に説明する。
【０００８】
（第１の実施形態）
図１は、第１の実施形態に係る視差画像生成装置のブロック図である。視差画像生成装置には、画素数が互いに等しい少なくとも２つの入力画像（以下、メイン画像（第２画像）およびサブ画像（第１画像）という）が入力される。本実施形態では、メイン画像は有効領域のみから構成され、サブ画像は有効領域およびブランク領域から構成される。ブランク領域とは、事前に行われたアフィン処理などに起因する、画像情報を含まない無効な領域である。また、サブ画像のうちのどこがブランク領域であるかは既知であるとする。
【０００９】
本実施形態において、視差画像生成装置は、３回のフィルタ処理および縮小処理を行うことにより、画素数が互いに異なる３階層のピラミッド画像を生成する。そして、視差画像生成装置はピラミッド画像を用いて視差画像を生成する。視差画像とは、入力画像内に設定される各マクロブロックの動きベクトルをいう。ここでの動きベクトルとは、メイン（サブ）画像内の各マクロブロックと、当該マクロブロックと対応するサブ（メイン）画像内のマクロブロックとの相対位置関係をベクトル形式で表したものである。
【００１０】
視差画像生成装置は、サブ画像を基準として、メイン画像への動きベクトルのみを出力してもよい。また視差画像生成装置は、メイン画像を基準として、サブ画像への動きベクトルのみを出力してもよい。あるいは、視差画像生成装置は両方の動きベクトルを出力してもよい。
【００１１】
また、まず画素数が少ない上位階層のピラミッド画像を用いておおよその対応マクロブロックを広い範囲で探索し、次いで画素数が多い下位階層のピラミッド画像を用いて細かく対応マクロブロックを探索することで、高精度に動きベクトルを算出できる。
【００１２】
図１の視差画像生成装置は、入力インターフェース１と、ピラミッド画像生成部２１〜２３と、画像書き込み回路３０〜３３と、メモリ４と、探索回路５と、出力制御回路６とを備えている。メモリ４は、画像書込み回路３０〜３３に対応する画像メモリ４０〜４３を含む。
【００１３】
入力インターフェース１には、サブ画像におけるブランク領域の範囲を定義する情報と、上ブランク領域を補完する一定の動きベクトルとが入力される。
【００１４】
ピラミッド画像生成部２１〜２３は入力画像または下位階層のピラミッド画像を縮小して、上位階層のピラミッド画像を生成する。より具体的には、ピラミッド画像生成部２１は入力画像におけるメイン画像を縮小する。これにより、メイン画像より画素数が少ない、メイン画像の第１階層ピラミッド画像が生成される。同様に、ピラミッド画像生成部２１は入力画像におけるサブ画像を縮小する。これにより、サブ画像より画素数が少ない、サブ画像の第１階層ピラミッド画像が生成される。両第１階層ピラミッド画像の画素数は互いに等しい。
【００１５】
また、ピラミッド画像生成部２２は、メイン画像およびサブ画像の、第１階層ピラミッド画像をそれぞれ縮小して、メイン画像およびサブ画像の、第２階層ピラミッド画像を生成する。ピラミッド画像生成部２３は、メイン画像およびサブ画像の、第２階層ピラミッド画像をそれぞれ縮小して、メイン画像およびサブ画像の、第３階層ピラミッド画像を生成する。
【００１６】
画像書き込み回路３０は、メイン画像およびサブ画像を、画像メモリ４０内の領域４０１，４０２にそれぞれ書き込む。同様に、画像書き込み回路３１は、メイン画像およびサブ画像の第１階層ピラミッド画像を、画像メモリ４１内の領域４１１，４１２にそれぞれ書き込む。画像書き込み回路３２は、メイン画像およびサブ画像の第２階層ピラミッド画像を、画像メモリ４２内の領域４２１，４２２にそれぞれ書き込む。画像書き込み回路３３は、メイン画像およびサブ画像の第３階層ピラミッド画像を、画像メモリ４３内の領域４３１，４３２にそれぞれ書き込む。
【００１７】
探索回路５は、メモリ４０〜４３に書き込まれた画像に対して探索処理を行い、入力画像内に設定される各マクロブロックの動きベクトルを生成する。すなわち、入力画像の有効領域内にあるマクロブロックについて、探索回路５は動きベクトルを算出する。また、入力画像のブランク領域内にあるマクロブロックについて、探索回路５は算出された動きベクトルを用いて補完する。
【００１８】
出力制御回路６は入力画像の視差画像を出力する。入力画像の有効領域内にあるマクロブロックについて、出力制御回路６は算出された動きベクトルを出力する。また、入力画像のブランク領域内にあるマクロブロックについて、出力制御回路６は補完された動きベクトルを出力する。
【００１９】
図２は、入力インターフェース１に入力される情報を説明する図である。本実施形態では、サブ画像の上端、下端、左端および右端に、矩形の、上ブランク領域、下ブランク領域、左ブランク領域および右ブランク領域がそれぞれ存在する例を説明する。また、入力画像の縦および横の画素数をそれぞれＩｍｇＨｇｔ０，ＩｍｇＷｉｄ０とする。
【００２０】
上ブランク領域および下ブランク領域の高さの画素数ＴｏｐＢｌｋＨｇｔ０，ＢｔｍＢｌｋＨｇｔ０、および、左ブランク領域および右ブランク領域の幅の画素数ＬｆｔＢｌｋＷｉｄ０，ＲｇｔＢｌｋＷｉｄ０は、入力インターフェース１に入力される。また、上ブランク領域を補完する固定値の動きベクトル（ｃｏｎｓｔＭＶｘ，ｃｏｎｓｔＭＶｙ）が、入力インターフェース１に入力される。
【００２１】
次に、ピラミッド画像生成部２１〜２３について説明する。ピラミッド画像生成部２１は、フィルタ回路２１１と、縮小回路２１２とを有する。  
図３は、フィルタ回路２１１の処理を説明する図である。フィルタ回路２１１は入力画像に対してフィルタ処理を行って平滑化する。フィルタ回路２１１は、（２ｎ＋１）×（２ｎ＋１）画素の範囲に対して、平均化フィルタあるいはガウシアンフィルタなどのフィルタ処理を行う。ここで、ｎは任意の整数である。そして、フィルタ回路２１１は上記フィルタ範囲の画素に対してフィルタ処理した値を、（２ｎ＋１）×（２ｎ＋１）の中心画素（斜線を付した画素）の値として出力する。
【００２２】
一例として、フィルタ回路２１１は以下のようにしてフィルタ範囲を設定する。フィルタ回路２１１は、図示しないカウンタを内部に保持する。Ｘ座標用のカウンタについては、フレーム画像の左端画素におけるカウンタ値Ｘｐｏｓを０とする。Ｙ座標用のカウンタについては、フレーム画像の上端にある画素のカウンタ値Ｙｐｏｓを０とする。フィルタ回路２１１は、このカウンタ値Ｘｐｏｓ，Ｙｐｏｓに基づいて、フィルタ範囲を画定する４隅の画素の座標を算出できる。
【００２３】
例えば、図３のスポットを付した画素の座標を（Ｘｐｏｓ，Ｙｐｏｓ）とすると、フィルタ範囲は、（Ｘｐｏｓ−２ｎ，Ｙｐｏｓ−ｎ）、（Ｘｐｏｓ，Ｙｐｏｓ−ｎ）、（Ｘｐｏｓ−２ｎ，Ｙｐｏｓ＋ｎ）、（Ｘｐｏｓ，Ｙｐｏｓ＋ｎ）を４隅とする矩形領域である。
【００２４】
ここで、フィルタ回路２１１は、フィルタ範囲がブランク領域を含まない場合に限って、フィルタ処理を行う。言い換えると、フィルタ回路２１１は、フィルタ範囲がブランク領域を含む場合には、フィルタ処理を行わない。ブランク領域における無効な画素値がフィルタ結果に反映されないようにするためである。すなわち、フィルタ回路２１１は下記（１）〜（４）式の少なくとも１つを満たす場合にはフィルタ処理を行わない。  
（Ｙｐｏｓ−ｎ）＜ＴｏｐＢｌｋＨｇｔ０  ・・・（１）
（Ｙｐｏｓ＋ｎ＋１）＋ＢｔｍＢｌｋＨｇｔ０＞ＩｍｇＨｇｔ０  ・・・（２）
（Ｘｐｏｓ−２ｎ）＜ＬｆｔＢｌｋＷｉｄ０  ・・・（３）
（Ｘｐｏｓ＋１）＋ＲｇｔＢｌｋＷｉｄ０＞ＩｍｇＷｉｄ０  ・・・（４）
（１）〜（４）式は、各ブランク領域がフィルタ範囲に含まれるか否かをそれぞれ判定する式である。なお、（２），（４）式の左辺においては、カウンタ値Ｘｐｏｓ，Ｙｐｏｓが０から始まることに起因する「＋１」を行っている。
【００２５】
このようなフィルタ処理をされたメイン画像およびサブ画像を、縮小回路２１２は縮小する。縮小手法は任意であるが、例えば２ｘ２画素を平均値化して、縦および横の画素数をそれぞれ１／２に縮小する。これにより、メイン画像の第１階層ピラミッド画像およびサブ画像の第１階層ピラミッド画像が生成される。
【００２６】
第１階層ピラミッド画像の上ブランク領域ＴｏｐＢｌｋＨｇｔ１、下ブランク領域ＢｔｍＢｌｋＨｇｔ１、左ブランク領域ＬｆｔＢｌｋＷｉｄ１および右ブランク領域ＲｇｔＢｌｋＷｉｄ１は下記（５）〜（８）式でそれぞれ表される。  
ＴｏｐＢｌｋＨｇｔ１
＝（ＴｏｐＢｌｋＨｇｔ０＞＞１）＋（ＴｏｐＢｌｋＨｇｔ＆０ｘ１）  ・・・（５）
ＢｔｍＢｌｋＨｇｔ１
＝（ＢｔｍＢｌｋＨｇｔ０＞＞１）＋（ＢｔｍＢｌｋＨｇｔ＆０ｘ１）  ・・・（６）
ＬｆｔＢｌｋＷｉｄ１
＝（ＬｆｔＢｌｋＷｉｄ０＞＞１）＋（ＬｆｔＢｌｋＷｉｄ＆０ｘ１）  ・・・（７）
ＲｇｔＢｌｋＷｉｄ１
＝（ＲｇｔＢｌｋＷｉｄ０＞＞１）＋（ＲｇｔＢｌｋＷｉｄ＆０ｘ１）  ・・・（８）
なお、各式の右辺における第２項は、ブランク領域の幅あるいは高さの切り捨てを防ぐための加算である。
【００２７】
ピラミッド画像生成部２２、２３は、ピラミッド画像生成部２１と同様の処理を行い、入力された下位階層のピラミッド画像から上位階層のピラミッド画像を生成する。生成された第１〜第３階層ピラミッド画像は、画像書き込み回路３１〜３３により、画像メモリ４１〜４３にそれぞれ書き込まれる。
【００２８】
上記の縮小率の場合、入力画像、第１階層ピラミッド画像、第２階層ピラミッド画像および第３階層ピラミッド画像の縦（あるいは横）の画素数の比は、８：４：２：１となる。
【００２９】
続いて、探索回路５について説明する。探索回路５は、ラスタスキャン順にマクロブロックの動きベクトルを生成する。ここで、探索回路５は、サブ画像の有効領域内のマクロブロックについては、動きベクトルを算出する。一方、探索回路５は、サブ画像の上ブランク領域内のマクロブロックについては、入力インターフェース１に入力される固定値の動きベクトル（ｃｏｎｓｔＭＶｘ，ｃｏｎｓｔＭＶｙ）で補完する。また、探索回路５は、サブ画像の下、左および右ブランク領域内のマクロブロックについては、有効領域の下端、左端および右端にそれぞれ設定されたマクロブロックの動きベクトルを用いて補完する。
【００３０】
図１の探索回路５は、ＳＡＤ演算回路５０と、動きベクトル探索回路５１０〜５１３と、動きベクトルメモリ５２０〜５２３とを有する。動きベクトル探索５１０〜５１３は、対応する画像メモリ４０〜４３に同時にアクセス可能である。動きベクトル探索回路５１０〜５１３は、入力画像および第１〜第３ピラミッド画像における各マクロブロックについて、動きベクトルをそれぞれ生成する。動きベクトルメモリ５２０〜５２３はそれぞれ、入力画像および第１〜第３ピラミッド画像における各マクロブロックに対応したアドレスを有する。そして、各アドレスに、対応するマクロブロックの動きベクトルが書き込まれる。
【００３１】
ここでは、探索回路５は、まず、第３階層ピラミッド画像全体の動きベクトル生成が完了した後に、第２階層ピラミッド画像の動きベクトル生成を開始する。以下、第１階層ピラミッド画像および入力画像についても同様である。すなわち、下位階層のピラミッド画像の動きベクトルを生成する際には、既に上位階層のピラミッド画像の動きベクトルが生成されているものとする。より効率的な処理手法の例については第２の実施形態で説明する。
【００３２】
動きベクトル探索回路５１３は第３階層ピラミッド画像のマクロブロックの動きベクトルを生成し、動きベクトルメモリ５２３に書き込む。  
動きベクトル探索回路５１２は、動きベクトルメモリ５２３に書き込まれた動きベクトルを参照して、第２階層ピラミッド画像のマクロブロックの動きベクトルを生成する。そして、動きベクトル探索回路５１２は生成した動きベクトルを動きベクトルメモリ５２２に書き込む。  
動きベクトル探索回路５１１は、動きベクトルメモリ５２２に書き込まれた動きベクトルを参照して、第１階層ピラミッド画像のマクロブロックの動きベクトルを生成する。そして、動きベクトル探索回路５１１は生成した動きベクトルを動きベクトルメモリ５２１に書き込む。  
動きベクトル探索回路５１０は、動きベクトルメモリ５２１に書き込まれた動きベクトルを参照して、入力画像のマクロブロックの動きベクトルを生成する。そして、動きベクトル探索回路５１０は生成した動きベクトルを動きベクトルメモリ５２０に書き込むとともに、出力制御回路６に出力する。  
なお、入力画像および各ピラミッド画像に設定されるマクロブロックのサイズは共通しており、いずれもｍ×ｍ画素（ｍは整数）から構成されるものとする。
【００３３】
動きベクトルを生成することは、有効領域内のマクロブロックについて動きベクトルを算出すること、および、ブランク領域内のマクロブロックについて動きベクトルを補完することを含む。まずは、有効領域内のマクロブロックについて説明する。なお、動きベクトル探索回路５１０〜５１３による動きベクトル生成処理は殆ど同じである。ここでは、動きベクトル探索回路５１０について説明する。
【００３４】
動きベクトル探索対象のマクロブロック（以下、単に対象マクロブロックという）がブランク領域に接しているか否かに応じて、動きベクトル探索回路５１０は異なる処理を行う。動きベクトル探索回路５１０は、マクロブロックの位置（ＭＢｘ，ＭＢｙ）を示すマクロブロックカウンタを内部に保持する。Ｘ座標用のマクロブロックカウンタについては、左端にあるマクロブロックのカウンタ値ＭＢｘを０とする。Ｙ座標用のマクロブロックカウンタについては、上端にあるマクロブロックのカウンタ値ＭＢｙを０とする。
【００３５】
動きベクトル探索回路５１０は、カウンタ値ＭＢｘ，ＭＢｙおよび入力画像におけるブランク領域の画素数に基づき、下記（９）または（１０）式を満たす場合、マクロブロックがブランク領域に接していると判断する。  
（（（ＭＢｙ−１）＜＜ｑ）＜ＴｏｐＢｌｋＨｇｔ０）  かつ
（（ＭＢｙ＜＜ｑ）≧ＴｏｐＢｌｋＨｇｔ０）  ・・・（９）
（（（ＭＢｘ−１）＜＜ｑ）＜ＬｆｔＢｌｋＷｉｄ０）  かつ
（（ＭＢｘ＜＜ｑ）≧ＬｆｔＢｌｋＷｉｄ０）・・・（１０）
（９），（１０）式は、マクロブロックが上および左ブランク領域にそれぞれ接するか否かを判定する式である。ここで、ｑはマクロブロックの縦および横の画素数ｍに依存するシフト係数である。例えば、ｍ＝２であればｑ＝１であり、ｍ＝４であればｑ＝２であり、ｍ＝８であればｑ＝３である。より一般的には、ｍ＝２ｐであればｑ＝ｐである。
【００３６】
なお、動きベクトル探索回路５１０は、動きベクトル生成の際、動きベクトル探索対象のマクロブロックの上および左に位置するマクロブロックの動きベクトルを参照する。そして、動きベクトル探索回路５１０はラスタスキャン順に動きベクトルを生成する。よって、動きベクトル探索回路５１０は、動きベクトル探索対象のマクロブロックが右および下ブランク領域に隣接するか否かを判定する必要はない。
【００３７】
図４〜図６は、マクロブロックが上および左ブランク領域に接しない場合の、動きベクトル探索回路５１０の処理動作を詳しく説明する図である。これらの図は、動きベクトル探索回路５１０が、サブ画像（１６×２４マクロブロックとする）におけるスポットが付された対象マクロブロックＭＢＴの動きベクトルを算出する様子を示している。
【００３８】
図４は動きベクトル探索時に参照される動きベクトルを示している。図示のように、動きベクトル探索回路５１０は、対象マクロブロックＭＢＴの上および左に位置する２つのマクロブロックの動きベクトル（ＭＶｘＵ，ＭＶｙＵ）および（ＭＶｘＬ，ＭＶｙＬ）を参照する。参照するマクロブロックの動きベクトルは、動きベクトルメモリ５２０に書き込まれている。
【００３９】
また、動きベクトル探索回路５１０は、上位階層であるサブ画像（８×１２マクロブロック）の第１階層ピラミッド画像において、対象マクロブロックＭＢＴの位置に対応するマクロブロックの動きベクトル（ＵＭＶｘ，ＵＭＶｙ）を参照する。この動きベクトル（ＵＭＶｘ，ＵＭＶｙ）は動きベクトルメモリ５２１に書き込まれている。縮小回路２１１が入力画像を１／２に縮小することを考慮すると、例えば、対象マクロブロックＭＢＴのマクロブロック座標が（４，４）である場合、第１階層ピラミッド画像においてこの対象マクロブロックＭＢＴの位置に対応するマクロブロック座標は（２，２）である。
【００４０】
図５は参照する３つの動きベクトルから最良の動きベクトル候補を選択する様子を示している。画素座標Ｓ１を左上画素とするサブ画像内の対象マクロブロックを、ＳＡＤブロックＳＭＢ１とする。動きベクトル探索回路５１０は、サブ画像の画素座標Ｓ１を起点とし、参照する動きベクトル（ＭＶｘＵ，ＭＶｙＵ），（ＭＶｘＬ，ＭＶｙＬ）および（ＵＭＶｘ，ＵＭＶｙ）に基づいて、メイン画像における３つの画素座標Ｍ１〜Ｍ３を特定する。ここで、各画素座標Ｍ１〜Ｍ３を左上画素とするメイン画像内のマクロブロックを、ＳＡＤブロックＭＭＢ１〜ＭＭＢ３とする。
【００４１】
そして、動きベクトル探索回路５１０は、ＳＡＤブロックＭＭＢ１〜ＭＭＢ３の画素値をメモリ４０２から読み出す。また、動きベクトル探索回路５１０は、ＳＡＤブロックＳＭＢ１の画素値をメモリ４０１から読み出す。読み出された画素値はＳＡＤ演算回路５０に供給される。ＳＡＤブロックは、画素数がｋ×ｋ（ｋは任意の整数）のブロックとする。なお、ＳＡＤブロックのサイズはマクロブロックのサイズと同じでもよいし、異なっていてもよい。
【００４２】
ＳＡＤ演算回路５０は供給された画素値を用いて、ＳＡＤブロックＭＭＢ１〜ＭＭＢ３と、ＳＡＤブロックＳＭＢ１との間の各ＳＡＤ（Sum of Absolute Difference、差分絶対値の総和）値を算出する。そして、動きベクトル探索回路５１０は、ＳＡＤブロックＭＭＢ１〜ＭＭＢ３のうち、ＳＡＤ値を最小とするＳＡＤブロックを特定する。そして、動きベクトル探索回路５１０は、対象マクロブロックと、特定されたＳＡＤブロックとの相対位置関係のベクトルを最良の動きベクトル候補とする。
【００４３】
なお、処理を簡略化するために、動きベクトル探索回路５１０は、画素座標Ｍ１〜Ｍ３の画素値のうち、対象マクロブロックにおける画素座標Ｓ１の画素値との差が最小となる画素座標から、最良の動きベクトル候補を選択してもよい。
【００４４】
図６は最良の動きベクトルを特定する様子を示している。なお、同図では、図５のマクロブロックＭＭＢ３の位置が最良の動きベクトル候補であるとしている。  
図示のように、動きベクトル探索回路５１０は、最良の動きベクトル候補により示される画素座標Ｍ３から上下左右にｐ画素だけ移動した各画素座標Ｍ１１〜Ｍ１４を左上画素とするＳＡＤブロックＭＭＢＴ，ＭＭＢＢ，ＭＭＢＬ，ＭＭＢＲをメイン画像内に設定する。
【００４５】
そして、ＳＡＤ演算回路５０は、対象マクロブロックの左上画素を左上画素とするＳＡＤブロック（図５に示すＳＡＤブロックＳＭＢ１）と、ＳＡＤブロックＭＭＢ３，ＭＭＢＴ，ＭＭＢＢ，ＭＭＢＬ，ＭＭＢＲとの各ＳＡＤ値を算出する。そして、動きベクトル探索回路５１０は、ＳＡＤブロックＭＭＢ３，ＭＭＢＴ，ＭＭＢＢ，ＭＭＢＬ，ＭＭＢＲのうち、ＳＡＤ値を最小とするＳＡＤブロックを特定する。そして、動きベクトル探索回路５１０は、対象マクロブロックと特定されたＳＡＤブロックとの相対位置関係のベクトルを、対象マクロブロックの最良の動きベクトルとして、動きベクトルメモリ５２０に書き込む。
【００４６】
なお、処理を簡略化するために、動きベクトル探索回路５１０は、最良の動きベクトル候補に基づいて定まる画素座標Ｍ３、Ｍ１１〜Ｍ１４に位置する画素値のうち、画素座標Ｓ１に位置する画素値との差が最小となる画素座標から、最良の動きベクトルを特定してもよい。
【００４７】
以上のように、動きベクトル探索回路５１０は、既に算出されたサブ画像における動きベクトルと、サブ画像の第１階層ピラミッド画像における対応位置での動きベクトルとを参照して、サブ画像の各マクロブロックにおける動きベクトルを算出する。  
なお、動きベクトル探索回路５１０がＳＡＤ値に基づいて動きベクトルを算出する例を示したが、他の演算により動きベクトルを算出してもよい。
【００４８】
図７は、対象マクロブロックが上および／または左ブランク領域に接する場合の、動きベクトル探索回路５１０の処理を説明する図である。以下、図４との相違点を中心に説明する。
【００４９】
図７では、対象マクロブロックＭＢＴが上ブランク領域に接している。よって、動きベクトル探索回路５１０は対象マクロブロックＭＢＴの上に位置する上ブランク領域内のマクロブロックの動きベクトルを参照しない。代わりに、動きベクトル探索回路５１０は、第１階層ピラミッド画像において、対象マクロブロックＭＢＴが属するマクロブロック（斜線を付したマクロブロック）の動きベクトル（ＵＭＶｘ，ＵＭＶｙ）を代替動きベクトルとして参照する。そして、以下、２つの動きベクトル（ＭＶｘＬ，ＭＶｙＬ）、（ＵＭＶｘ，ＵＭＶｙ）に基づいて、動きベクトル探索回路５１０は対象マクロブロックの動きベクトルを算出する。
【００５０】
動きベクトル探索回路５１１，５１２は、動きベクトル探索回路５１０と同様にして、第１階層ピラミッド画像および第２階層ピラミッド画像の各マクロブロックにおける動きベクトルをそれぞれ生成する。また、動きベクトル探索回路５１３は、さらに上位階層のピラミッド画像が存在しないため、第３階層ピラミッド画像における既に算出された動きベクトルのみを参照して、各マクロブロックにおける動きベクトルを算出する。
【００５１】
続いて、ブランク領域の動きベクトル補完について説明する。動きベクトルの補完は、動きベクトル探索回路５１０〜５１３が動きベクトルメモリ５２０〜５２３にそれぞれ動きベクトル書き込む際に行われる。以下、動きベクトル探索回路５１０による動きベクトルの補完処理について説明する。
【００５２】
動きベクトル探索回路５１０は、有効領域内にあるマクロブロックについて算出した動きベクトルを、動きベクトルメモリ５２０における当該マクロブロックの座標と対応するアドレスに書き込む。一方、動きベクトル探索回路５１０は、ブランク領域内にあるマクロブロックについては、以下のように動きベクトルを補完して動きベクトルメモリ５２０に書き込む。
【００５３】
図８は、動きベクトルメモリ５２０への書き込みを説明する図である。動きベクトル探索回路５１０は、マクロブロックカウンタに基づいて、動きベクトルを書き込む対象マクロブロックがブランク領域にあるか否かを判定する。
【００５４】
下記（１１）式を満たす場合、動きベクトル探索回路５１０は対象マクロブロックが上ブランク領域にあると判定する。  
（（ＭＢｙ＜＜ｑ）＜ＴｏｐＢｌｋＨｇｔ０）  ・・・（１１）
なお、パラメータｑは上述した式（９）（１０）と同様である。この場合、図８（ａ）に示すように、動きベクトル探索回路５１０は、固定値の動きベクトル（ｃｏｎｓｔＭＶｘ，ｃｏｎｓｔＭＶｙ）を、動きベクトルメモリ５２０に書き込む。
【００５５】
また、下記（１２）式を満たす場合、動きベクトル探索回路５１０は対象マクロブロックが左ブランク領域にあると判定する。  
（（ＭＢｘ＜＜ｑ）＜ＬｆｔＢｌｋＷｉｄ０）  ・・・（１２）
この場合、図８（ａ）に示すように、動きベクトル探索回路５１０は、有効領域の左端に位置するマクロブロックの動きベクトルが算出された時点で、この動きベクトルをコピーして動きベクトルメモリ５２０に書き込む。
【００５６】
以降に、より具体的に説明する。動きベクトル探索回路５１０内に、左ブランク領域内マクロブロックカウンタＬｆｔＢｌｋＭＢＣｎｔを設ける。このカウンタＬｆｔＢｌｋＭＢＣｎｔは、マクロブロックカウンタがマクロブロックラインの先頭を示すときに、ＬｆｔＢｌｋＭＢ０に設定される。このＬｆｔＢｌｋＭＢ０は左ブランク領域にあるマクロブロック数である。
【００５７】
その後、有効領域にあるマクロブロックの動きベクトルが算出され、左ブランク領域にあるマクロブロックの座標に対応する動きベクトルメモリ５２０のアドレスＬｆｔＢｌｋＡｄｒに算出された動きベクトルが書き込まれる度に、動きベクトル探索回路５１０はカウンタＬｆｔＢｌｋＭＢＣｎｔを１ずつデクリメントする。カウンタＬｆｔＢｌｋＭＢＣｎｔがデクリメントされて０になった後は、動きベクトル探索回路５１０は動きベクトルメモリ５２０のアドレスＬｆｔＢｌｋＡｄｒへの書き込みを停止する。
【００５８】
なお、マクロブロック数ＬｆｔＢｌｋＭＢ０は下記（１３）式で表される。  
Ｔｍｐ２
＝０ｘ１  （ＬｆｔＢｌｋＷｉｄ０［（ｑ−１）：０］＞０ｘ０のとき）
＝０ｘ０  （それ以外のとき）
ＬｆｔＢｌｋＭＢ０＝（（ＬｆｔＢｌｋＷｉｄ０＞＞ｑ）＋Ｔｍｐ２）  ・・・（１３）
さらに、アドレスＬｆｔＢｌｋＡｄｒは下記（１４）式で表される。  
ＬｆｔＢｌｋＡｄｒ
＝ＭＢライン先頭のアドレス＋（ＬｆｔＢｌｋＭＢＣｎｔ−０ｘ１）  ・・・（１４）
また、下記（１５）式を満たす場合、動きベクトル探索回路５１０は対象マクロブロックが右ブランク領域にあると判定する。  
Ｔｍｐ１
＝ＩｍｇＷｉｄ０  （（（（ＭＢｘ＋１）＜＜ｑ）＞ＩｍｇＷｉｄ０）のとき）
＝（（ＭＢｘ＋１）＜＜ｑ）  （それ以外のとき）
（Ｔｍｐ１＋ＲｇｔＢｌｋＷｉｄ０）＞ＩｍｇＷｉｄ０  ・・・（１５）
この場合、図８（ａ）に示すように、動きベクトル探索回路５１０は、対象マクロブロックの左に位置するマクロブロックの動きベクトルをコピーして動きベクトルメモリ５２０に書き込む。なお、ラスタスキャン順で処理するため、対象マクロブロックが右ブランク領域内部にある場合でも、その左に位置するマクロブロックの動きベクトルは既に確定している。
【００５９】
また、下記（１６）式を満たす場合、動きベクトル探索回路５１０は対象マクロブロックが下ブランク領域にあると判定する。  
Ｔｍｐ０
＝ＩｍｇＨｇｔ０  （（（ＭＢｙ＋１）＜＜ｑ）＞ＩｍｇＨｇｔ０）のとき）
＝（（ＭＢｙ＋１）＜＜ｑ）  （それ以外のとき）
Ｔｍｐ０＋ＢｔｍＢｌｋＨｇｔ０）＞ＩｍｇＨｇｔ０）  ・・・（１６）
この場合、図８（ｂ）に示すように、動きベクトル探索回路５１０は、対象マクロブロックの上に位置するマクロブロックの動きベクトルをコピーして動きベクトルメモリ５２０に書き込む。なお、ラスタスキャン順で処理するため、対象マクロブロックが下ブランク領域の内部にある場合でも、その上に位置するマクロブロックの動きベクトルは既に確定している。
【００６０】
以上のようにして、全マクロブロックについての動きベクトルが動きベクトルメモリ５２０に書き込まれる。他の動きベクトル探索回路５１１〜５１３も同様にして、生成された動きベクトルを動きベクトルメモリ５２１〜５２３にそれぞれ書き込む。
【００６１】
続いて、出力制御回路６の動作について説明する。出力制御回路６は、入力ＩＦから入力された情報に基づいて出力制御を行う。出力制御回路６はバッファ（Ｂｕｆ）６１を有する。バッファ６１には探索回路５により算出された動きベクトルを格納可能である。バッファ６１は、少なくとも「左ブランク領域の最大マクロブロック数＋１」の動きベクトルを格納できる容量があればよい。
【００６２】
図９は、左ブランク領域にあるマクロブロックの動きベクトルが格納されたバッファ６１の動作を示す図である。同図は、左ブランク領域の幅ＬｆｔＢｌｋＷｉｄ０が３２画素であり、マクロブロックが８ｘ８画素から構成される例を示している。出力制御回路６は、ＬｆｔＢｌｋＷｉｄ０に基づき左ブランク領域の幅を識別し、それに対応した出力制御を行う。  
バッファ６１は５つのエントリＤｌｙ０〜Ｄｌｙ４から構成されるシフトレジスタである。すなわち、探索回路５から動きベクトルが出力されると、エントリＤｌｙ０〜Ｄｌｙ３に格納されている動きベクトルがエントリＤｌｙ１〜Ｄｌｙ４にそれぞれシフトされるとともに、出力された動きベクトルがエントリＤｌｙ０に格納される。
【００６３】
また、出力制御回路６は図示しない出力カウンタを有する。出力制御回路６は、マクロブロックラインの先頭において出力カウンタを０にセットし、動きベクトルを１つ出力する度に１だけインクリメントする。
【００６４】
さらに、出力制御回路６は、どのエントリに格納された動きベクトルを出力すべきかを示すパラメータＯｕｔＳｅｌ０〜ＯＵＴＳｅｌ４を有する。例えば、パラメータＯｕｔＳｅｌ０が「真」である場合、出力制御回路６はエントリＤｌｙ０に格納された動きベクトルを出力する。パラメータＯｕｔＳｅｌ１が「真」である場合、出力制御回路６はエントリＤｌｙ１に格納された動きベクトルを出力する。他の場合も同様である。なお、パラメータＯｕｔＳｅｌ０〜ＯＵＴＳｅｌ４のうちの２つ以上が「真」にはならない。
【００６５】
図９（ａ）は、出力カウンタが０の場合を示している。このとき、エントリＤｌｙ４には左から０番目のマクロブロック（ＭＢｘ＝＝０と表現する、以下同様）の動きベクトルが格納されている。エントリＤｌｙ３にはＭＢｘ＝＝１の動きベクトルが格納されている。エントリＤｌｙ２にはＭＢｘ＝＝２の動きベクトルが格納されている。エントリＤｌｙ１にはＭＢｘ＝＝３の動きベクトルが格納されている。エントリＤｌｙ０にはＭＢｘ＝＝４の動きベクトルが格納されている。すなわち、エントリＤｌｙ１〜Ｄｌｙ４には、左ブランク領域にあるマクロブロックの動きベクトルが格納されている。
【００６６】
出力カウンタが０である場合、出力制御回路６は、左ブランク領域の幅ＬｆｔＢｌｋＷｉｄ０を参照し、パラメータＯｕｔＳｅｌ０〜ＯＵＴＳｅｌ４を以下の（１７）式のように設定する。  
ＯｕｔＳｅｌ０＝
（ＬｆｔＢｌｋＷｉｄ０＝＞２５）＆＆（ＬｆｔＢｌｋＷｉｄ０＜＝３２）；  
ＯｕｔＳｅｌ１＝
（ＬｆｔＢｌｋＷｉｄ０＝＞１７）＆＆（ＬｆｔＢｌｋＷｉｄ０＜＝２４）；
ＯｕｔＳｅｌ２＝      
（ＬｆｔＢｌｋＷｉｄ０＝＞９）＆＆（ＬｆｔＢｌｋＷｉｄ０＜＝１６）；
ＯｕｔＳｅｌ３＝
（ＬｆｔＢｌｋＷｉｄ０＝＞１）＆＆（ＬｆｔＢｌｋＷｉｄ０＜＝８）；
ＯｕｔＳｅｌ４＝（ＬｆｔＢｌｋＷｉｄ０＝＝０）；
・・・（１７）
第１式は、左ブランク領域の幅ＬｆｔＢｌｋＷｉｄ０が２５以上であり、かつ、３２以下である場合、パラメータＯｕｔＳｅｌ０が「真」に設定されることを意味する。左ブランク領域の幅ＬｆｔＢｌｋＷｉｄ０が３２画素である場合、パラメータＯｕｔＳｅｌ０が「真」に設定される。よって、出力制御回路６は、エントリＤｌｙ０に格納されたＭＢｘ＝＝４の動きベクトルを、ＭＢｘ＝＝０の動きベクトルとして出力する。そして、出力制御回路６は出力カウンタを１だけインクリメントする。このようにして、左ブランク領域の動きベクトルを、有効領域の動きベクトルに置き換えて出力できる。
【００６７】
図９（ｂ）は、出力カウンタが１の場合を示している。このとき、エントリＤｌｙ４にはＭＢｘ＝＝１の動きベクトルが格納されている。エントリＤｌｙ３にはＭＢｘ＝＝２の動きベクトルが格納されている。エントリＤｌｙ２にはＭＢｘ＝＝３の動きベクトルが格納されている。エントリＤｌｙ１にはＭＢｘ＝＝４の動きベクトルが格納されている。エントリＤｌｙ０にはＭＢｘ＝＝５の動きベクトルが格納されている。
【００６８】
出力カウンタが１である場合、出力制御回路６は、左ブランク領域の幅ＬｆｔＢｌｋＷｉｄ０を参照し、パラメータＯｕｔＳｅｌ０〜ＯＵＴＳｅｌ４を以下の（１８）式のように設定する。  
ＯｕｔＳｅｌ０＝０；  
ＯｕｔＳｅｌ１＝
（ＬｆｔＢｌｋＷｉｄ０＝＞２５）＆＆（ＬｆｔＢｌｋＷｉｄ０＜＝３２）；
ＯｕｔＳｅｌ２＝      
（ＬｆｔＢｌｋＷｉｄ０＝＞１７）＆＆（ＬｆｔＢｌｋＷｉｄ０＜＝２４）；
ＯｕｔＳｅｌ３＝
（ＬｆｔＢｌｋＷｉｄ０＝＞９）＆＆（ＬｆｔＢｌｋＷｉｄ０＜＝１６）；
ＯｕｔＳｅｌ４＝
（ＬｆｔＢｌｋＷｉｄ０＝＞０）＆＆（ＬｆｔＢｌｋＷｉｄ０＜＝８）；
・・・（１８）
図９（ｃ）は、出力カウンタが２の場合を示している。この場合、出力制御回路６は、左ブランク領域の幅ＬｆｔＢｌｋＷｉｄ０を参照し、パラメータＯｕｔＳｅｌ０〜ＯＵＴＳｅｌ４を以下の（１９）式のように設定する。  
ＯｕｔＳｅｌ０＝０；  
ＯｕｔＳｅｌ１＝０；
ＯｕｔＳｅｌ２＝      
（ＬｆｔＢｌｋＷｉｄ０＝＞２５）＆＆（ＬｆｔＢｌｋＷｉｄ０＜＝３２）；
ＯｕｔＳｅｌ３＝
（ＬｆｔＢｌｋＷｉｄ０＝＞１７）＆＆（ＬｆｔＢｌｋＷｉｄ０＜＝２４）；
ＯｕｔＳｅｌ４＝
（ＬｆｔＢｌｋＷｉｄ０＝＞０）＆＆（ＬｆｔＢｌｋＷｉｄ０＜＝１６）；
・・・（１９）
図９（ｄ）は、出力カウンタが３の場合を示している。この場合、出力制御回路６は、左ブランク領域の幅ＬｆｔＢｌｋＷｉｄ０を参照し、パラメータＯｕｔＳｅｌ０〜ＯＵＴＳｅｌ４を以下の（２０）式のように設定する。  
ＯｕｔＳｅｌ０＝０；  
ＯｕｔＳｅｌ１＝０；
ＯｕｔＳｅｌ２＝０；
ＯｕｔＳｅｌ３＝
（ＬｆｔＢｌｋＷｉｄ０＝＞２５）＆＆（ＬｆｔＢｌｋＷｉｄ０＜＝３２）；
ＯｕｔＳｅｌ４＝
（ＬｆｔＢｌｋＷｉｄ０＝＞０）＆＆（ＬｆｔＢｌｋＷｉｄ０＜＝２４）；
・・・（２０）
図９（ｅ）は、出力カウンタが４以上の場合を示している。この場合、出力制御回路６は、左ブランク領域の幅ＬｆｔＢｌｋＷｉｄ０を参照し、パラメータＯｕｔＳｅｌ０〜ＯＵＴＳｅｌ４を以下の（２１）式のように設定する。  
ＯｕｔＳｅｌ０＝０；  
ＯｕｔＳｅｌ１＝０；
ＯｕｔＳｅｌ２＝０；
ＯｕｔＳｅｌ３＝０；
ＯｕｔＳｅｌ４＝
（ＬｆｔＢｌｋＷｉｄ０＝＞０）＆＆（ＬｆｔＢｌｋＷｉｄ０＜＝３２）；
・・・（２１）
左ブランク領域の幅ＬｆｔＢｌｋＷｉｄ０が最大３２画素であるため、出力カウンタ値が４以降はエントリＤｌｙ４に格納された動きベクトルが出力制御回路６から出力される。  
以上の処理により、左ブランク領域にあるマクロブロックについては、有効領域の動きベクトルを選択的に出力する。
【００６９】
このように、第１の実施形態では、有効領域内のマクロブロックについての動きベクトルを用いて、ブランク領域内のマクロブロックについての動きベクトルを補完する。そのため、入力画像にブランク領域が含まれる場合であっても、全マクロブロックについての動きベクトルを出力できる。
【００７０】
（第２の実施形態）
第２の実施形態では、複数階層のピラミッド画像を並行して処理するものである。  
図１０は、第２の実施形態に係る視差画像生成装置のブロック図である。図１０では、図１と共通する構成部分には同一の符号を付しており、以下では相違点を中心に説明する。図１０では、動きベクトル探索回路５１１〜５１３間での処理タイミングを調整する信号を破線で示している。
【００７１】
動きベクトル探索回路５１３から動きベクトル探索回路５１２へ信号Ｓｙｎｃ２が供給される。信号Ｓｙｎｃ２は動きベクトル探索回路５１３が１マクロブロックラインの動きベクトル生成処理を完了し、動きベクトル探索回路５１２へ動きベクトル生成処理の開始を指示していることを示す。
【００７２】
動きベクトル探索回路５１２から動きベクトル探索回路５１１へ信号Ｓｙｎｃ１が供給される。信号Ｓｙｎｃ１は、動きベクトル探索回路５１２が１マクロブロックラインの動きベクトル生成処理を完了し、動きベクトル探索回路５１１へ動きベクトル生成処理の開始を指示していることを示す。
【００７３】
動きベクトル探索回路５１１から動きベクトル探索回路５１２へ信号Ｅｎｄ１が供給される。
【００７４】
信号Ｅｎｄ１は、動きベクトル探索回路５１１が２マクロブロックラインの動きベクトル生成処理を完了したことを示す。
【００７５】
動きベクトル探索回路５１１，５１２から動きベクトル探索回路５１３へ信号Ｂｕｓｙ１，Ｂｕｓｙ２がそれぞれ供給される。信号Ｂｕｓｙ１、Ｂｕｓｙ２は、動きベクトル探索回路５１１，５１２がそれぞれ動きベクトル生成処理中であることを示す。
【００７６】
図１１は、図１０の視差画像生成装置による処理タイミングを説明する図である。まず、動きベクトル探索回路５１３は第３階層ピラミッド画像における１マクロブロックラインの動きベクトルを生成し、動きベクトルメモリ５２３に書き込む。動きベクトル生成処理が完了すると、その旨が信号Ｓｙｎｃ２により動きベクトル探索回路５１２に通知される。
【００７７】
これに同期して、動きベクトル探索回路５１２は、第２階層ピラミッド画像における１マクロブロックラインの動きベクトル生成処理を開始し、生成された動きベクトルを動きベクトルメモリ５２２に書き込む。また、信号Ｂｕｓｙ２のアサートにより、動きベクトル探索回路５１２が処理中であることを動きベクトル探索回路５１３に通知し続ける。
【００７８】
第２階層ピラミッド画像において処理対象となる１マクロブロックラインは、先に第３階層ピラミッド画像において動きベクトルが生成された１マクロブロックラインの位置に対応する。よって、動きベクトル探索回路５１２は、動きベクトルメモリ５２３に書き込まれた第３階層ピラミッド画像の動きベクトルを参照できる。動きベクトル探索回路５１２が１マクロブロックラインの動きベクトル生成処理を完了すると、その旨が信号Ｓｙｎｃ１により動きベクトル探索回路５１１に通知される。
【００７９】
これに同期して、動きベクトル探索回路５１１は、第１階層ピラミッド画像における１マクロブロックラインの動きベクトル生成処理を開始し、生成された動きベクトルを動きベクトルメモリ５２１に書き込む。また、信号Ｂｕｓｙ１のアサートにより、動きベクトル探索回路５１１が処理中であることを動きベクトル探索回路５１３に通知し続ける。
【００８０】
第１階層ピラミッド画像において処理対象となる１マクロブロックラインは、先に第２階層ピラミッド画像において動きベクトルが生成された１マクロブロックラインの位置に対応する。よって、動きベクトル探索回路５１１は、動きベクトルメモリ５２２に書き込まれた第２階層ピラミッド画像の動きベクトルを参照できる。
【００８１】
動きベクトル探索回路５１１は、１マクロブロックラインの動きベクトル生成処理を完了すると、自己トリガ（ＳｅｌｆＴｒｉｇｇｅｒ）により、次のマクロブロックラインの動きベクトル生成処理を開始する。動きベクトル探索回路５１１がこのマクロブロックラインの動きベクトル生成処理を完了すると、その旨が信号Ｅｎｄ１により動きベクトル探索回路５１２に通知される。
【００８２】
これに同期して、動きベクトル探索回路５１２は次の１マクロブロックラインの動きベクトル生成処理を開始する。動きベクトル探索回路５１２がこのマクロブロックラインの動きベクトル生成処理を完了すると、その旨が信号Ｓｙｎｃ１により動きベクトル探索回路５１１に通知される。これに同期して、動きベクトル探索回路５１１は次のマクロブロックラインの動きベクトル生成処理を開始する。
【００８３】
第１階層ピラミッド画像の４マイクロブロックラインの処理が完了すると、信号Ｂｕｓｙ１，Ｂｕｓｙ２がデアサートされる。これにより、動きベクトル探索回路５１３は動きベクトル探索回路５１１，５１２における一連の処理が完了したことを把握する。これに同期して、動きベクトル探索回路５１３は次のマクロブロックラインの動きベクトル生成処理を開始する。
【００８４】
このような処理により、第１〜第３階層ピラミッド画像全体の動きベクトルが生成された後に、動きベクトル探索回路５１０は入力画像の動きベクトルを生成する。
【００８５】
このように、第２の実施形態では、動きベクトル探索回路５１１〜５１３が連携し、動きベクトル生成処理を並行して行う。そのため、より効率よく視差画像を生成できる。
【００８６】
なお、第１および第２の実施形態では、ブランク領域が矩形である例を示した。しかしながら、図１２に示すように、サブ画像におけるブランク領域が斜めであることもあり得る。そのような場合、入力インターフェース１に、ブランク領域の傾きおよび切片の情報を設定すればよい。
【００８７】
また、第１および第２の実施形態では、メイン画像は有効領域のみから構成され、サブ画像は有効領域およびブランク領域から構成される例を示した。しかしながら、メイン画像およびサブ画像の両方が、有効領域およびブランク領域から構成されてもよい。この場合でも、視差画像生成装置は、サブ画像を基準とするメイン画像への動きベクトルと、メイン画像を基準とするサブ画像への動きベクトルとを生成できる。
【００８８】
すなわち、探索回路５は、メイン領域の有効領域に設定される各マクロブロックの動きベクトルを算出するとともに、メイン領域のブランク領域に設定される各マクロブロックの動きベクトルを補完すればよい。そして、出力制御回路６は、メイン画像の有効領域に設定される各マクロブロックについては算出された動きベクトルを出力し、メイン画像のブランク領域に設定される各マクロブロックについては補完された動きベクトルを出力すればよい。
【００８９】
また、第１および第２の実施形態では、ピラミッド画像の階層を３層とする例を示した。しかしながら、階層数はいくつに設定してもよい。この場合、ピラミッド画像生成部や画像書き込み回路等、各階層の処理に必要な回路を構成すればよい。
【００９０】
上述した実施形態で説明した視差画像生成装置の少なくとも一部は、ハードウェアで構成してもよいし、ソフトウェアで構成してもよい。ソフトウェアで構成する場合には、視差画像生成装置の少なくとも一部の機能を実現するプログラムをフレキシブルディスクやＣＤ−ＲＯＭ等の記録媒体に収納し、コンピュータに読み込ませて実行させてもよい。記録媒体は、磁気ディスクや光ディスク等の着脱可能なものに限定されず、ハードディスク装置やメモリなどの固定型の記録媒体でもよい。
【００９１】
また、視差画像生成装置の少なくとも一部の機能を実現するプログラムを、インターネット等の通信回線（無線通信も含む）を介して頒布してもよい。さらに、同プログラムを暗号化したり、変調をかけたり、圧縮した状態で、インターネット等の有線回線や無線回線を介して、あるいは記録媒体に収納して頒布してもよい。
【００９２】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【００９３】
１  入力インターフェース
２１〜２３  ピラミッド画像生成部
２１１，２２１，２３１  フィルタ
２１２，２２２，２３２  縮小回路
３０〜３３  画像書き込み回路
４０〜４３  画像メモリ
５  探索回路
５０  ＳＡＤ演算回路
５１０〜５１３  動きベクトル探索回路
５２０〜５２３  動きベクトルメモリ
６  出力制御回路
６１  バッファ
【図１】
2015177270.tif 000003
【図３】
2015177270.tif 000004
【図４】
2015177270.tif 000005
【図５】
2015177270.tif 000006
【図６】
2015177270.tif 000007
【図７】
2015177270.tif 000008
【図８】
2015177270.tif 000009
【図９】
2015177270.tif 000010
【図１０】
2015177270.tif 000011
【図１１】
2015177270.tif 000012
【図１２】
2015177270.tif 000013
【図２】
2015177270.tif 000014