(57)【要約】【課題】ブロックマッチングを用いた視差推定において、視差の推定精度を向上させることができる。【解決手段】複数の画像のうち一の画像を基準画像とし、当該一の画像と異なる他の画像を参照画像として、基準画像の各画素位置について、対応する画素位置を参照画像からブロックマッチングにより探索し、ブロックマッチングにより検出された画素位置との視差値を導出する導出手段と、基準画像の各画素位置について導出された視差値に基づき、視差マップを生成する生成手段と、ブロックマッチングにおける探索方向に沿って、ブロックマッチングに用いるブロックを拡大するとともに、導出手段が導出した視差の信頼度が一定レベル以下である画素位置について、導出手段にブロックマッチングを再度実行させ、再度のブロックマッチングにより検出された画素位置との視差で、視差マップを更新する更新手段と、を備える。【選択図】図３
2018059767.tif 000002
【特許請求の範囲】
【請求項１】
互いに異なる視点から撮像された複数の画像の視差を示す視差マップを生成する画像処理装置であって、
前記複数の画像のうち一の画像を基準画像とし、当該一の画像と異なる他の画像を参照画像として、前記基準画像の各画素位置について、対応する画素位置を前記参照画像からブロックマッチングにより探索し、前記ブロックマッチングにより検出された画素位置との視差値を導出する導出手段と、
前記基準画像の各画素位置について前記導出された視差値に基づき、前記視差マップを生成する生成手段と、
前記ブロックマッチングにおける探索方向に沿って、前記ブロックマッチングに用いるブロックを拡大するとともに、前記導出手段が導出した視差の信頼度が一定レベル以下である画素位置について、前記導出手段に前記ブロックマッチングを再度実行させ、再度の前記ブロックマッチングにより検出された画素位置との視差で、前記視差マップを更新する更新手段と、を備える
ことを特徴とする画像処理装置。
【請求項２】
前記更新手段は、
更新した前記視差マップ内に前記信頼度が一定レベル以下である視差が含まれる場合には、処理を繰り返す
請求項１に記載の画像処理装置。
【請求項３】
前記更新手段は、
更新した前記視差マップ内に前記信頼度が一定レベル以下である視差が含まれる場合でも、前記ブロックマッチングが予め定められた回数以上実行されている場合には、処理を終了する
請求項２に記載の画像処理装置。
【請求項４】
前記更新手段は、
前記導出手段が導出した視差の分散度を算出する算出手段と、
前記算出手段が算出した前記分散度と予め定められた閾値とを比較して、前記分散度が前記閾値よりも大きい場合に、前記信頼度が一定レベル以下であると判定する
請求項１から請求項３のうちのいずれか１項に記載の画像処理装置。
【請求項５】
前記更新手段は、
前記導出手段が導出した視差の平滑度を算出する算出手段と、
前記算出手段が算出した前記平滑度と予め定められた閾値とを比較して、前記平滑度が前記閾値よりも小さい場合に、前記平滑度が一定レベル以下であると判定する
請求項１から請求項３のうちのいずれか１項に記載の画像処理装置。
【請求項６】
前記ブロックマッチングにおける探索方向が、前記基準画像の着目画素に対応する、前記参照画像上のエピポーラ線と平行な方向である
請求項１から請求項５のうちのいずれか１項に記載の画像処理装置。
【請求項７】
前記基準画像を撮像する基準カメラと前記参照画像を撮像する参照カメラとが、同一平面上に配置され、かつ互いの光軸が平行である場合には、
前記更新手段は、
前記基準カメラと前記参照カメラとの３次元空間中の座標点から導出される方向ベクトルによって示される方向を、前記エピポーラ線と平行な方向とみなして、前記ブロックを拡大する
請求項６に記載の画像処理装置。
【請求項８】
前記基準画像を撮像する基準カメラと前記参照画像を撮像する参照カメラとが、同一平面上に配置され、かつ互いの光軸が平行である場合には、
前記更新手段は、
前記基準画像の水平軸に対する角度によって示される方向を、前記エピポーラ線と平行な方向とみなして、前記ブロックを拡大する
請求項６に記載の画像処理装置。
【請求項９】
前記基準画像の水平軸に対する角度を示す情報を入力する入力手段をさらに備え、
前記更新手段は、前記入力手段が入力した情報から、前記基準画像の水平軸に対する角度を取得する
請求項８に記載の画像処理装置。
【請求項１０】
前記ブロックマッチングが行われる際に、マッチング元となるブロック内に前記エピポーラ線と平行なエッジが含まれると判断した場合には、当該ブロック内に当該エッジが含まれないように、当該ブロックのサイズと形状との少なくとも一方を修正する修正手段をさらに備える
請求項６から請求項９のうちのいずれか１項に記載の画像処理装置。
【請求項１１】
前記修正手段は、
前記ブロックマッチングが行われる際に、マッチング元となるブロック内に、前記エピポーラ線と平行でないエッジが含まれる場合には、当該ブロックが当該エッジを１画素または数画素跨ぐように、当該ブロックのサイズと形状との少なくとも一方を修正する
請求項１０に記載の画像処理装置。
【請求項１２】
互いに異なる視点から撮像された複数の画像の視差を示す視差マップを生成する画像処理方法であって、
前記複数の画像のうち一の画像を基準画像とし、当該一の画像と異なる他の画像を参照画像として、前記基準画像の各画素位置について、対応する画素位置を前記参照画像からブロックマッチングにより探索し、前記ブロックマッチングにより検出された画素位置との視差を導出する導出ステップと、
前記基準画像の各画素位置について前記導出された視差に基づき、前記視差マップを生成する生成ステップと、
前記ブロックマッチングにおける探索方向に沿って、前記ブロックマッチングに用いるブロックを拡大するとともに、前記導出された視差の信頼度が一定レベル以下である画素位置について、前記ブロックマッチングを再度実行させ、再度の前記ブロックマッチングにより検出された画素位置との視差で、前記視差マップを更新する更新ステップと、を含む
ことを特徴とする画像処理方法。
【請求項１３】
コンピュータを請求項１から請求項１１のうちのいずれか１項に記載の画像処理装置として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、互いに異なる複数の視点から撮像された複数の画像を示す画像データを用いて、各画像間の視差を推定する技術に関する。
【背景技術】
【０００２】
同一の被写体を互いに異なる複数の視点から撮像して得られた複数の画像を用いて、被写体までの距離を推定し、推定した距離情報を画像処理に応用する技術がある。異なる視点に対応する複数の画像から距離情報を推定する方法の代表例として、各画像間に生じた視差を利用する方法がある。ここで視差とは、各視点に対応する画像間で生じる、同じ被写体領域に対応する画像上の位置のずれである。視差の大きさは被写体までの距離の大きさに依存する。そのため、各画像間に生じた視差の大きさと、各視点間の距離等に基づいて、被写体までの距離を推定することが可能である。視差は、ブロックマッチングなどの方法を用いて、各視点に対応する画像間で、同じ被写体領域に対応する領域を検出することで求められる。
【０００３】
視差の推定精度を向上させる技術として、ブロックサイズを変えながら繰り返しブロックマッチングを行う、階層型のブロックマッチングを用いる方法が知られている。特許文献１には、推定した視差に誤差が含まれると判断した場合に、ブロックマッチングに用いるブロックのサイズを拡大して、再度ブロックマッチングを実行することにより、視差の推定精度を向上させる方法が記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−２９３９７１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ブロックマッチングでは、一つのブロック内に距離（カメラからの距離）が異なる複数の被写体が含まれると、画像間で、対応する画像領域を適切に検出できない場合がある。例えば、マッチングの対象となる被写体がテクスチャレスである場合には、隣接する被写体に対応する領域が誤って検出される場合がある。したがって、被写体の境界付近においては、視差が正しく推定されない可能性がある。
【０００６】
特許文献１に記載された方法では、ブロックが拡大されるとブロック内に複数の被写体が含まれやすくなるため、視差の推定精度が低下するおそれがある。そこで本発明は、ブロックマッチングを用いた視差推定において、視差の推定精度を向上させることを目的とする。
【課題を解決するための手段】
【０００７】
本発明による画像処理装置は、互いに異なる視点から撮像された複数の画像の視差を示す視差マップを生成する画像処理装置であって、複数の画像のうち一の画像を基準画像とし、当該一の画像と異なる他の画像を参照画像として、基準画像の各画素位置について、対応する画素位置を参照画像からブロックマッチングにより探索し、ブロックマッチングにより検出された画素位置との視差値を導出する導出手段と、基準画像の各画素位置について導出された視差値に基づき、視差マップを生成する生成手段と、ブロックマッチングにおける探索方向に沿って、ブロックマッチングに用いるブロックを拡大するとともに、導出手段が導出した視差の信頼度が一定レベル以下である画素位置について、導出手段にブロックマッチングを再度実行させ、再度のブロックマッチングにより検出された画素位置との視差で、視差マップを更新する更新手段と、を備えることを特徴とする。
【発明の効果】
【０００８】
本発明によれば、ブロックマッチングを用いた視差推定において、視差の推定精度を向上させることができる。
【図面の簡単な説明】
【０００９】
【図１】第１の実施例の画像処理装置の構成の一例を示すブロック図である。
【図２】エピポーラ線を説明するための図である。
【図３】第１の実施例における視差推定処理を説明するための図である。
【図４】第１の実施例における画像処理装置の機能構成の一例を示すブロック図である。
【図５】第１の実施例における視差推定処理の流れを示すフローチャートである。
【図６】エピポーラ線の算出方法を説明するための図である。
【図７】ブロックの拡大方向を説明するための図である。
【図８】第１の実施例の効果を説明するための概念図である。
【図９】第２の実施例における画像処理装置の機能構成の一例を示すブロック図である。
【図１０】第２の実施例における視差推定処理の流れを示すフローチャートである。
【図１１】第３の実施例におけるブロックの修正処理を説明するための図である。
【図１２】第３の実施例における画像処理装置の機能構成を示すブロック図である。
【図１３】第３の実施例における視差推定処理の流れを示すフローチャートである。
【図１４】領域修正部の処理を説明するための図である。
【発明を実施するための形態】
【００１０】
以下、本発明の実施形態について、図面を参照して説明する。なお、以下の実施形態は本発明を限定するものではなく、また、本実施形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。なお、同一の構成については、同じ符号を付して説明する。
【００１１】
＜実施例１＞
図１は、第１の実施例の画像処理装置の構成の一例を示すブロック図である。第１の実施例の画像処理装置１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＲＯＭ１０３、二次記憶装置１０４、入力インターフェース１０５、および出力インターフェース１０６を備える。そして、画像処理装置１００の各構成要素はシステムバス１０７によって相互に接続されている。また、画像処理装置１００は、入力インターフェース１０５を介して外部記憶装置１０８に接続されている。また、画像処理装置１００は、出力インターフェース１０６を介して外部記憶装置１０８および表示装置１０９に接続されている。
【００１２】
ＣＰＵ１０１は、ＲＡＭ１０２をワークメモリとして、ＲＯＭ１０３に格納されたプログラムを実行し、システムバス１０７を介して画像処理装置１００の各構成部を統括的に制御するプロセッサである。これにより、後述する様々な処理が実行される。
【００１３】
二次記憶装置１０４は、画像処理装置１００で取り扱われる種々のデータを記憶する記憶装置であり、例えばハードディスクドライブ（ＨＤＤ）である。ＣＰＵ１０１は、システムバス１０７を介して二次記憶装置１０４へのデータの書き込みおよび二次記憶装置１０４に記憶されたデータの読出しを行う。二次記憶装置１０４にはＨＤＤの他に、光ディスクドライブやフラッシュメモリなど、様々な記憶デバイスを用いることが可能である。
【００１４】
入力インターフェース１０５は、例えばＵＳＢやＩＥＥＥ１３９４等のシリアルバスインターフェースである。画像処理装置１００は、入力インターフェース１０５を介して、外部装置からデータや命令等を入力する。また画像処理装置１００は、入力インターフェース１０５を介して、外部記憶装置１０８（例えば、ハードディスク、メモリーカード、ＣＦカード、ＳＤカード、ＵＳＢメモリなどの記憶媒体）からデータを取得する。なお、入力インターフェース１０５には不図示のマウスやボタンなどの入力デバイスも接続可能である。
【００１５】
出力インターフェース１０６は、入力インターフェース１０５と同様に、ＵＳＢやＩＥＥＥ１３９４等のシリアルバスインターフェースである。なお、出力インターフェース１０６には、例えばＤＶＩやＨＤＭＩ（登録商標）等の映像出力端子を用いることも可能である。画像処理装置１００は、出力インターフェース１０６を介して、外部装置へデータ等を出力する。また、画像処理装置１００は、出力インターフェース１０６を介して、表示装置１０９（液晶ディスプレイなどの各種画像表示デバイス）に、処理された画像データなどを出力する。これにより、表示装置１０９に画像が表示される。なお、画像処理装置１００の構成要素は上記以外にも存在するが、本発明の主眼ではないため、説明を省略する。
【００１６】
ここで、本実施例で用いるブロックマッチングの原理について説明する。ブロックマッチングでは、比較対象とする画像領域（ブロック）を変更しながら、２枚の画像間で同じサイズのブロック同士が比較される。そして、領域間のマッチング度合いを表わす評価値が最小（最大）となるブロック同士が、対応するブロックとして検出される。そして、検出されたブロックの画像中の位置の差が、そのブロックに対応する視差として導出される。
【００１７】
ブロックマッチングの精度は、マッチングに用いられるブロックの大きさ（サイズ）や形状に左右される。したがって、画像の特徴によって、適切なブロックの大きさや形状は変化する。例えば、小さなサイズのブロックを用いてブロックマッチングを行った場合には、テクスチャレス領域において評価値にほとんど差がないブロックが多数検出されてしまう。そのため、間違ったブロックを対応ブロックとして検出する可能性が高くなってしまう。一方、テクスチャレス領域に対応するため、大きなサイズのブロックを用いた場合は、マッチングの対象となる被写体（着目被写体）に隣接する、被写体（隣接被写体）がブロック内に含まれる可能性が増大する。カメラからの距離が着目被写体と隣接被写体とで異なる場合、両被写体は互いに視差が異なる。このように、距離が異なる複数の被写体を含むブロックでは、視差が異なる領域が混在する。特に着目被写体がテクスチャレスである場合には、画像間において対応ブロックを適切に決定することができず、ブロックマッチングの精度が低下する。
【００１８】
そこで、本実施例では、サイズが異なる複数のブロックのそれぞれでマッチングを行う階層型のブロックマッチングを採用する。具体的には、最初のブロックマッチング（最下層のブロックマッチング）では、最も小さいサイズのブロックを用いてマッチングを行う。そして、ブロックのサイズを拡大して、次のブロックマッチング（次の階層のブロックマッチング）を行う。このように本実施例では、ブロックのサイズを拡大しながら、繰り返しブロックマッチングが行われる。その際、ある階層で視差の推定が上手くいかなかった領域については、さらに上の階層での視差推定の結果を用いて視差の値を補うようにする。以下、視差の値を視差値と称する。また、視差値を、単に視差と表現する場合がある。
【００１９】
本実施例では、ブロックを拡大する際、エピポーラ線と平行な方向にのみブロックを拡大することで、高精度な視差推定を実現する。以下、図２を用いてエピポーラ線について説明した後、図３に示す概念図を用いてブロックの拡大について具体的に説明する。
【００２０】
図２は、エピポーラ線を説明するための図である。点４０１は、被写体上のある１点を表す。点４０２は、被写体を左側（図２における左側）から撮像する、左視点のカメラの光学中心を表す。点４０５は、被写体を右側（図２における右側）から撮像する、右視点のカメラの光学中心を表す。以下、点４０２，４０５をそれぞれ、カメラ４０２，４０５と表現する場合がある。図２に示すように、３次元空間中のある点４０１がカメラ４０２の画像（画像面４０３）に投影されているとする。ここで、点４０１とカメラ４０２とを結ぶ直線と、画像面４０３とが交差する点４０４が、３次元空間中の点４０１の画像面４０３への投影像となる。同様に、別視点のカメラ４０５では、点４０１とカメラ４０５とを結ぶ直線と、画像面４０６とが交差する点４０７が、点４０１の画像面４０６への投影像となる。このとき、点４０１，４０２，４０５の３点は空間中に一つの平面４０８を定義する。上記点４０４，４０７は平面４０８上に存在する。このとき平面４０８と画像面４０３とが交差してできる直線４０９が、画像面４０３におけるエピポーラ線となる。同様に、平面４０８と画像面４０６とが交差してできる直線４１０は、画像面４０６におけるエピポーラ線となる。カメラ４０２により観測される画像点４０４に対応する空間中の点は、直線４１１上のどこかに存在する。この直線４１１を画像面４０６に投影したものが、エピポーラ線４１０となる。つまり、エピポーラ線４１０は、画像面４０３上の点４０４に対応する、画像面４０６上の点の集合である。同様に、画像面４０３上のエピポーラ線４０９は、カメラ４０５により観測される画像点４０７に対応する、画像面４０３上の点の集合である。このように、エピポーラ線は画像上の点同士の対応関係を表している。したがって、例えば、画像点４０４に対応する、画像面４０６上の点を探索する場合には、画像面４０６全体ではなくエピポーラ線４１０上を探索すればよい。また例えば、画像点４０７に対応する、画像面４０３上の点を探索する場合には、画像面４０３全体ではなくエピポーラ線４０９上を探索すればよい。
【００２１】
図３は、第１の実施例における視差推定処理を説明するための図である。図３（ａ）には、テクスチャレスの被写体（以下、テクスチャレス被写体という）３０５と、テクスチャを有する被写体（以下、テクスチャ被写体という）３０６とを、２台のカメラ（カメラ３０１，３０３）で撮像する様子が示されている。カメラ３０１とカメラ３０３は、所定の距離を隔てて同一平面上に含まれるように配置されている。また、カメラ３０１とカメラ３０３は、互いの光軸が平行になるように配置されている。テクスチャレス被写体３０５とテクスチャ被写体３０６とは、カメラ３０１，３０２を含む上記平面からそれぞれ異なる距離に配置されている。図３（ａ）において、画像３０２は、カメラ３０１により撮像された左視点の画像である。画像３０４は、カメラ３０３により撮像された右視点の画像である。画像３０２，３０４には、共にテクスチャレス被写体３０５とテクスチャ被写体３０６が写っている。ここで、画像３０２上の位置（ｕ１，ｖ１）の画素３０７に対応する画像３０４上の画素を求める。画素３０７は、テクスチャレス被写体３０５に対応する領域に属する。ここで、画素３０７を中心とするブロック３０８内に、テクスチャレス被写体３０５に対応する領域と、テクスチャ被写体３０６に対応する領域とが含まれる場合を考える。この状態でブロックマッチングを行った場合、正解の視差（すなわち、テクスチャレス被写体３０５の視差）に対応するブロック３０９ではなく、テクスチャ被写体３０６の視差に対応するブロック３１０が誤って検出される。間違いの要因は、ブロック３１０内に含まれるテクスチャ被写体３０６の特徴により、ブロック３０９よりもブロック３１０との類似性が高いと判断されるためである。この現象は、ブロック内に含まれる、テクスチャレス被写体とそれ以外の被写体との境界線が、画像３０４におけるブロックの走査方向と平行（すなわち、画素３０７に対応する画像３０４上のエピポーラ線と平行）な場合に発生する。その結果、テクスチャレス領域における推定視差の精度が低下する。そこで、本実施例では、この現象の発生を抑えるために、ブロック内にエピポーラ線と平行な境界線が含まれるのを抑制する。具体的には、図３（ｂ）に示すブロック３１１のように、初期ブロックを１画素とし、さらに、ブロックを拡大するときには、エピポーラ線に平行な方向にブロックを拡大させる。このようにして、本実施例では、ブロック内にエピポーラ線と平行な境界線が含まれるのを抑制し、推定視差の精度を向上させる。
【００２２】
上記処理により、テクスチャレス領域やその形状によらず、精度がよく、信頼性が高い視差マップ（各画素位置に対応する視差値を画素値として格納した画像データ）を得ることが可能になる。
【００２３】
次に、第１の実施例の画像処理装置１００で行われる処理について、図４および図５を用いて、具体的に説明する。図４は、画像処理装置１００の機能構成の一例を示すブロック図である。図５は、第１の実施例における視差推定処理の流れを示すフローチャートである。
【００２４】
図４に示す各機能は、ＲＯＭ１０３に格納されたプログラムをＣＰＵ１０１がＲＡＭ１０２にロードして実行することで動作する。本実施例では、各機能として、画像データ取得部２０１、撮像パラメータ取得部２０２、エピポーラ線算出部２０３、領域設定部２０４、視差推定部２０５、判定部２０６、及び、視差決定部２０７が含まれる。またそれにより、図５（ａ）（ｂ）に示す一連の処理が実行される。なお、以下に示す処理の全てがＣＰＵ１０１によって実行される必要はない。以下に示す処理の一部または全部が、ＣＰＵ１０１以外の一つ又は複数の処理回路によって行われるように画像処理装置１００が構成されてもよい。以下、図５（ａ）（ｂ）に示す処理の流れを説明する。
【００２５】
ステップＳ５０１では、画像データ取得部２０１が、入力インターフェース１０５を介して、または二次記憶装置１０４から、処理対象となる画像データを取得する。ここでは、画像データ取得部２０１は、多眼カメラなどの多視点撮像装置を用いて撮像された画像データを取得する。すなわち、画像データ取得部２０１は、同一の被写体を複数の異なる視点から同時に撮像することで得られる複数の画像を示す多視点画像データを取得する。画像データ取得部２０１は、視差推定に用いる基準画像および参照画像を決定する。ここで、基準画像とは視差推定の基準となる画像である。ブロックマッチングでは、基準画像における処理対象となる画素（以下、着目画素という）に対応する画素が、基準画像とは異なる視点で撮像された画像（以下、参照画像という）から探索される。その結果、視差推定の結果として得られる視差マップは、基準画像の視点に対応する視差マップとなる。なお、基準画像および参照画像は、入力インターフェース１０５を介して、ユーザによって指定されてもよい。以下では、基準画像を撮像したカメラを基準カメラ、参照画像を撮像したカメラを参照カメラと称する。画像データ取得部２０１は、取得した画像データを視差推定部２０５に出力する。
【００２６】
以下では、同一平面上に配置した２台のカメラにより取得される、２枚の撮像画像データが画像データ取得部２０１に入力される場合を例にする。ここで、２台のカメラが同一平面上に配置された状態とは、一のカメラの光軸に垂直でありかつ当該一のカメラの主点を通る平面上に、他のカメラの主点が存在する状態である。また、カメラの位置姿勢を表す軸がカメラ間で互いに平行（カメラの光軸が互いに平行）であるとする。なお、画像データ取得部２０１に入力される画像の枚数は３枚以上でもよい。また、互いのカメラの光軸が平行でない場合についても同様に、本実施例を適用することが可能である。具体的な処理方法については後述する。
【００２７】
ステップＳ５０２では、視差推定部２０５がフラグマップの全画素に１を設定して、フラグマップを初期化する。フラグマップとは、処理対象の場合は１、処理対象でない場合は０を画素毎に設定したデータのことである。このようにフラグマップを初期化することで、画像に含まれる全画素が視差推定の対象となる。フラグマップは、視差推定部２０５が保持してもよいし、二次記憶装置１０４に格納するようにしてもよい。
【００２８】
ステップＳ５０３では、撮像パラメータ取得部２０２が、画像データ取得部２０１が取得した画像データの各画像を撮影したカメラの、撮像パラメータを取得する。本実施例では、撮像パラメータ取得部２０２は、入力インターフェース１０５を介して、または二次記憶装置１０４から、撮像パラメータの値が記述されたファイルを読み込む。ファイルには、予めカメラを測定して得られる、位置及び姿勢を表す外部パラメータと、焦点距離、主点位置、及び歪曲を表す内部パラメータとが、撮像パラメータとして記述されている。なお、画像データを用いてＳＦＭ（Ｓｔｒｕｃｔｕｒｅ  Ｆｒｏｍ  Ｍｏｔｉｏｎ）などの公知の手法により、各撮像パラメータの値を推定してもよい。撮像パラメータ取得部２０２は、撮像パラメータをエピポーラ線算出部２０３に出力する。
【００２９】
ステップＳ５０４では、エピポーラ線算出部２０３が、基準画像上の着目画素に対応する、参照画像上のエピポーラ線を算出する。上述のとおり、基準カメラと参照カメラとは同一平面状に配置されていて、かつ互いの光軸が平行になるように配置されている。そのため、参照画像上のエピポーラ線は、基準カメラと参照カメラとの方向ベクトルに平行となる。この方向ベクトルを用いて、参照画像上のエピポーラ線を算出する。図６を用いて具体的に説明する。
【００３０】
図６は、エピポーラ線の算出方法を説明するための図である。点６０５は、被写体上のある１点を表す。点６０１は、被写体を左視点から撮像するカメラの光学中心を表す。点６０２は、被写体を右視点から撮像するカメラの光学中心を表す。以下、点６０１を基準カメラ６０１と表現する。また、点６０２を参照カメラ６０２と表現する。図６において、世界座標のＺ軸と基準カメラ６０１の光軸とは互いに平行である。基準カメラ６０１の３次元空間中の座標点（Ｘｂ，Ｙｂ，Ｚｂ）と、参照カメラ６０２の３次元空間中の座標点（Ｘｒ，Ｙｒ，Ｚｒ）とから、方向ベクトル６０３は（Ｘｂ−Ｘｒ，Ｙｂ−Ｙｒ，Ｚｂ−Ｚｒ）と求まる。ここで、各カメラの主点が同一平面上に存在するため、方向ベクトル６０３は、Ｚ軸を除く２次元のベクトル（Ｘｂ−Ｘｒ，Ｙｂ−Ｙｒ）で表される。このとき、エピポーラ線は参照画像上の座標系ｕ，ｖを用いて下記の式１で表すことができる。（ｕ0，ｖ0）は、参照画像上の座標系で表した、基準画像上の着目画素６０４の座標である。
【００３１】
【数１】
2018059767.tif 000003
【００３２】
また、２台のカメラの光軸が平行であるため、基準画像と参照画像とは同一の画像座標軸となり、上記式で求めたエピポーラ線は基準画像のエピポーラ線と等しい。なお、世界座標のＺ軸と基準カメラ６０１の光軸とが平行でない場合についても同様にしてエピポーラ線を算出することが可能である。エピポーラ線算出部２０３は、エピポーラ線の算出結果を領域設定部２０４と視差推定部２０５とに出力する。
【００３３】
ステップＳ５０５では、領域設定部２０４がエピポーラ線算出部２０３から取得したエピポーラ線の算出結果に基づいてブロックの拡大方向を設定する。また、領域設定部２０４は、階層型のブロックマッチングにおける初期ブロックを決定する。
【００３４】
ブロックの拡大方向は、事前に定めた方向の候補から選択する。図７は、ブロックの拡大方向を説明するための図である。本実施例では、図７に示す、画像軸の各軸に平行な方向と各軸間の中間方向との計４方向を候補とする。領域設定部２０４は、エピポーラ線算出部２０３が算出したエピポーラ線と、上記４方向とがなす角度をそれぞれ算出する。そして、領域設定部２０４は、最も角度が小さい方向をブロックの拡大方向として選択し、拡大方向を示す情報（以下、拡大方向情報という）を保持する。なお、ブロックの拡大方向の候補はこれに限らず、画像軸の各軸がなす角度を複数に分割して定めた方向を、候補として用いてもよい。
【００３５】
初期ブロックとして、本実施例では、上述したように着目画素である１画素が設定される。なお、初期ブロックは１画素でなくてもよい。例えば、着目画素を中心とした正方形や長方形のブロックなど任意のブロックを設定してもよい。ただし、初期ブロックを１画素に設定することで、ブロック内にエピポーラ線と平行な境界線が含まれることを確実に抑制することができる。領域設定部２０４は、決定した初期ブロックのサイズや形状を示す情報を、現在の階層で用いるブロックに関する情報（以下、ブロック情報という）として、視差推定部２０５に出力する。
【００３６】
ステップＳ５０６では、視差推定部２０５が基準画像において視差推定を行う着目画素を決定する。本実施例では、基準画像において最も左上の画素が着目画素として選択される。その後、着目画素に対応する視差が推定されるたびに、それまでに着目画素として選択されていない画素が新たな着目画素として選択される。具体的には、ラスタ順に最も右下の画素まで、各画素が着目画素として選択される。なお、着目画素の選択順はこれに限られず、どのような順番で着目画素を選択してもよい。
【００３７】
ステップＳ５０７では、視差推定部２０５が、画像データ取得部２０１から取得した画像データの着目画素における視差を推定する。視差は、エピポーラ線算出部２０３から取得したエピポーラ線と、領域設定部２０４から取得したブロック情報とに基づいて、ブロックマッチングにより推定する。以下に、具体的な処理内容を示す。
【００３８】
まず、視差推定部２０５は、参照画像において、着目画素と比較する画素（以下、参照画素という）を決定する。本実施例では、視差推定部２０５は、着目画素と対応する画素が存在しそうにない画像領域の画素はあらかじめ参照画素の候補から除外する。具体的には、視差推定部２０５は、最初の参照画素として、基準画像における着目画素の座標（ｕ０，ｖ０）と同一座標の画素を参照画像上から選択する。その後、参照画素の評価値が算出されるたびに、視差推定部２０５は、エピポーラ線上に存在する画素を新たな参照画素として選択する。探索方向は、参照画像を撮像したカメラから基準画像を撮像したカメラを見た際の向きに相当する。したがって、探索方向は、エピポーラ線算出部２０３で算出された、基準カメラと参照カメラとの方向ベクトル６０３と等しい。このように、エピポーラ線上の画素のみを参照画素として選択することにより、ブロックマッチングの処理に要する時間を短縮することができる。なお、参照画素の選択方法はこれに限られず、全画素を参照画素の対象としてもよいし、どのような順番で参照画素を選択してもよい。例えば、視差推定部２０５は、最初の参照画素として、参照画像の最も左上の画素を選択し、ラスタ順に最も右下の画素まで、各画素を参照画素として選択するようにしてもよい。
【００３９】
次に、視差推定部２０５は、着目画素と参照画素とを比較し、ブロックマッチングの評価値を計算する。本実施例では、比較対象のブロック間での画素値の二乗平均誤差を評価値として用いる。二乗平均誤差の計算に用いるブロックは、領域設定部２０４から取得したブロック情報によって示されるブロックとする。視差推定部２０５は、着目画素を中心とするブロックと、参照画素を中心とするブロックとで画素値の二乗平均誤差を計算する。着目画素と参照画素との画素位置の、水平方向の差をｌｕ、垂直方向の差をｌｖとする。すると、着目画素の画素位置（ｕ０，ｖ０）における評価値Ｖ（ｌｕ，ｌｖ，ｕ０，ｖ０）は以下の式で表わされる。そして、評価値Ｖが小さいほどマッチング度合いが高いと判断される。
【００４０】
【数２】
2018059767.tif 000004
【００４１】
ここで、Ｂはマッチングに用いるブロックに含まれる画素の集合を示す。｜Ｂ｜は領域Ｂに含まれる画素数を示す。Ｉb（ｕ，ｖ）は基準画像の画素位置（ｕ，ｖ）における画素値を示す。Ｉr（ｕ，ｖ）は参照画像の画素位置（ｕ，ｖ）における画素値を示す。なお、ここで算出される評価値は式（２）に示す画素値の二乗平均誤差に限られず、二つのブロックの類似度合いを示す値であれば公知の様々なものが利用可能である。視差推定部２０５は、上記方法に基づき、参照画素を変更しながら、参照画素の候補となる全ての画素についてそれぞれ評価値を算出する。そして、視差推定部２０５は、評価値Ｖが最小となる参照画素と、着目画素との画素位置の差を、着目画素に対応する視差と推定する。
【００４２】
ステップＳ５０８では、視差推定部２０５が、フラグマップが１である全画素について処理を終了したかを判断する。処理が終了している場合は（ステップＳ５０８のＹＥＳ）、視差推定部２０５は、視差推定の結果として生成した視差マップを判定部２０６に出力する。そして、処理はステップＳ５０９に移行する。処理が終了していない場合は（ステップＳ５０８のＮＯ）、処理はステップＳ５０６に戻る。
【００４３】
ステップＳ５０９では、判定部２０６が、視差推定部２０５から取得した視差マップの分散度を画素毎に算出する。一般的な視差マップでは、遠近競合領域（一つのブロック内に距離が異なる複数の被写体が含まれる領域）以外では視差値が緩やかに変化するという性質を有する。そこで、本実施例では、判定部２０６が、各階層のブロックマッチングにより得られた視差マップの分散度を画素毎に評価する。着目画素周辺の視差変動が小さい、つまり分散度が小さい場合は、判定部２０６は、信頼度が高いと判断する。逆に、視差変動が大きい、つまり分散度が大きい場合は、判定部２０６は、信頼度が低いと判断する。本実施例では、分散度として以下の式で算出される値を用いる。
【００４４】
【数３】
2018059767.tif 000005
【００４５】
ここで、ｄ（ｘ、ｙ）は視差マップである。Ｂ´は視差マップにおいて、分散の算出対象となる領域である。ここでは、例えば着目画素を中心とした５×５の正方領域を分散の算出対象とする。なお、分散の算出式は、式（３）以外であってもよい。また、視差マップの信頼度を評価できる評価値であれば、分散度以外の評価値（例えば平滑度）であってもよい。
【００４６】
ステップＳ５１０では、判定部２０６が、算出した分散度と、閾値とを画素毎に比較する処理（分散度判定処理）を実行する。なお、ステップＳ５１０で用いられる閾値は、予め判定部２０６によって決定される。例えば、判定部２０６は、処理対象となる画像データの視差の最大値に基づき閾値を決定する。
【００４７】
ここで、分散度判定処理を説明する。図５（ｂ）には、分散度判定処理のフローが示されている。
【００４８】
ステップＳ５２１では、判定部２０６が、判定対象とする画素を選択する。ステップＳ５２２は、判定部２０６が、選択した画素について算出された分散度と、閾値とを比較する。分散度が閾値より大きい場合は（ステップＳ５２２のＹＥＳ）、視差の信頼度が低い（一定レベル以下である）と判断され、処理はステップＳ５２４の処理に移行する。分散度が閾値以下である場合は（ステップＳ５２２のＮＯ）、信頼度が高い（一定レベルを超えている）と判断され、処理はステップＳ５２３の処理に移行する。このとき、判定部２０６は、視差決定部２０７に、信頼度が高いと判断された画素の画素位置を出力する。ステップＳ５２３では、視差決定部２０７が、判定部２０６から取得した画素位置における視差値を決定する。具体的には、視差決定部２０７は、視差推定部２０５から取得した視差マップ内の上記画素位置における視差値を、現在設定されている値で確定する。さらに視差決定部２０７は、フラグマップの、上記画素位置の画素値を０に更新する。このように、視差決定部２０７は、着目画素周辺の視差マップが滑らかな場合は、正しく視差推定が行われたと判断し、フラグマップを０にして当該着目画素をそれ以降の処理対象から外す。なお、視差決定部２０７は、フラグマップを更新する際、判定部２０６から取得した画素位置以外の画素値の更新は行わない。ステップＳ５２４では、判定部２０６が、未だ判定対象となっていない、未判定の画素があるかを判断する。未判定の画素がある場合には（ステップＳ５２４のＹＥＳ）、処理はステップＳ５２１に戻る。未判定の画素がない場合には（ステップＳ５２４のＮＯ）、判定部２０６は、分散度判定処理を終了する。なお、ここでは、信頼度として分散度が用いられる場合を例にしたが、信頼度として平滑度が用いられる場合には、判定部２０６は、平滑度が閾値より小さい場合に信頼度が低いと判定し、平滑度が閾値以上である場合に信頼度が高いと判定すればよい。
【００４９】
ステップＳ５１１では、判定部２０６が、ブロックの拡大回数が最大拡大回数以上であるかを判定する。なお、判定部２０６は予め、入力インターフェース１０５を介して、または二次記憶装置１０４から、最大拡大回数を取得し、保持する。最大拡大回数以上であると判断した場合は（ステップＳ５１１のＹＥＳ）、処理はステップＳ５１３に移行する。最大拡大回数よりも小さいと判断した場合は（ステップＳ５１１のＮＯ）、処理はステップＳ５１２に移行する。
【００５０】
ステップＳ５１２では、領域設定部２０４が、保持するブロックの拡大方向に基づき、現在の階層で使用しているブロックを拡大する。具体的には、領域設定部２０４は、拡大方向情報に基づいてブロック情報を更新する。これにより、次の階層で使用されるブロックのサイズや形状が決定される。ここでは、領域設定部２０４は、現在の階層のブロックマッチングで使用しているブロックを、ブロックの拡大方向にのみ、サイズ刻み幅分拡大する。それにより、次の階層のブロックマッチングで使用されるブロックが決定される。サイズ刻み幅は、入力インターフェース１０５を介してユーザによって指定可能である。なお、サイズ刻み幅を示す情報を二次記憶装置１０４に予め格納しておいて、領域設定部２０４が、二次記憶装置１０４から当該情報を読み出すようにしてもよい。また、サイズ刻み幅は、領域設定部２０４が決定してもよい。例えば、領域設定部２０４は、ブロックの最大拡大回数に応じてサイズ刻み幅を決定してもよい。領域設定部２０４は、更新したブロック情報を視差推定部２０５に出力する。それにより、ステップＳ５０６の処理が再実行される。すなわち、拡大されたブロックでブロックマッチングが再度実行される。
【００５１】
ステップＳ５１３では、視差決定部２０７が、フラグマップにおいて値が１のままである画素に対応する、視差マップの視差値を、０または事前に定めた値に設定する。その理由は、フラグマップにおいて値が１のままである画素ついては、精度が高い視差推定が不可能であると判断できるからである。そして、視差決定部２０７は、フラグマップにおいて値が１のままである画素の値を０に更新する。
【００５２】
ステップＳ５１４では、視差決定部２０７が、視差マップを二次記憶装置１０４や外部記憶装置１０８や表示装置１０９に出力する。そして、処理が終了する。
【００５３】
以上が、第１の実施例の画像処理装置１００で行われる処理である。なお、本実施例では着目画素を中心とする１方向に長い形状をもつブロックを用いたが、ブロックの形状はこれに限定されず、例えば、着目画素を中心とした十字形を用いてもよい。また、本実施例では、ブロックの拡大回数（すなわち、ブロックマッチングの回数）が予め定められた回数以上実行された場合に、視差マップを出力するようにしている。しかし、視差マップ内のすべての視差値の信頼度が一定レベルを超えた場合には、その時点で視差マップを出力するようにしてもよい。
【００５４】
図８は、第１の実施例の効果を説明するための概念図である。図８において、画像８０１は、ランダムパターンが有する板８０５と全面がテクスチャレス領域である板８０６とを、左視点のカメラ８０２により撮像した画像である。画像８０３は、同一被写体を右視点のカメラ８０４により撮像した画像である。例えば、ブロック８１０を用いて画像８０１と画像８０３とのブロックマッチングを行って視差マップを生成した場合、当該視差マップによって示される画像（視差画像）８０７のテクスチャレス領域において誤差８０８が発生する。これに対し、第１の実施例の画像処理装置１００では、エピポーラ線と平行な方向にブロックを拡大させながら、階層型のブロックマッチングを実行する。それにより、ブロック内にエピポーラ線と平行な境界線が含まれることを抑制できる。したがって、画像内にテクスチャレス領域が含まれる場合でも、誤ったブロックを検出することがない。さらに、画像処理装置１００は、上記階層型のブロックマッチングにおいて、視差マップの分散度を評価しながら画素毎に最適な視差値を導出する。したがって、より正確な視差を推定することができる。よって、第１の実施例の画像処理装置１００によれば、精度が高い視差画像８０９を生成することができる。
【００５５】
＜実施例２＞
第１の実施例では、撮像パラメータから算出したエピポーラ線に基づいてマッチングに用いるブロックの拡大方向を決定した。本実施例では、ユーザがブロックの拡大方向を決定する。撮像カメラが同一平面上に存在し、かつ互いのカメラの光軸が平行である場合、第１の実施例で説明したように、エピポーラ線は基準カメラと参照カメラとの方向ベクトルと等しい。そこで本実施例では、エピポーラ線のおおよその方向をユーザが予測し、予測した方向をブロックの拡大方向として決定する。このように、本実施例では、撮像カメラの位置関係から算出したエピポーラ線を用いてブロックの拡大方向を決定していた第１の実施例と異なり、おおよその方向に基づいてブロックの拡大方向を決定する。このように、本実施例ではエピポーラ線の算出を行わないので、エピポーラ線を算出していた第１の実施例に比べて、処理工数を低減することが可能となる。
【００５６】
以下、本実施例の画像処理装置１００で行われる処理について説明する。図９は、第２の実施例における画像処理装置１００の機能構成の一例を示すブロック図である。図１０は、第２の実施例における視差推定処理の流れを示すフローチャートである。ＲＯＭ１０３に格納されたプログラムをＣＰＵ１０１がＲＡＭ１０２にロードして実行することで、図９に示す各機能が動作する。またそれにより、図１０に示す一連の処理が実行される。なお、以下に示す処理の全てがＣＰＵ１０１によって実行される必要はなく、処理の一部または全部が、ＣＰＵ１０１以外の一つ又は複数の処理回路によって行われるように画像処理装置１００が構成されていてもよい。また、本実施例の機能構成は、第１の実施例の機能構成と同様である。ただし、本実施例では、撮像パラメータ取得部２０２およびエピポーラ線算出部２０３の代わりに、拡大方向取得部９０１が含まれる。また、図１０に示すステップＳ１００１，Ｓ１００２，Ｓ１００５〜Ｓ１０１３の処理は、第１の実施例におけるステップＳ５０１，Ｓ５０２，Ｓ５０６〜Ｓ５１４の処理と同様であるため、以下では説明を省略する。
【００５７】
ステップＳ１００３では、拡大方向取得部９０１が入力インターフェース１０５を介して、ユーザが指定するブロックの拡大方向を取得する。ユーザは、ブロックの拡大方向として、基準カメラで撮像された画像の、水平軸に対する角度を指定する。例えば、撮像カメラが水平に配置されている場合（すなわち、光軸に対する回転角度が０度である場合）は０度が指定される。また例えば、撮像カメラが斜め４５度に配置されている場合（すなわち、光軸に対する回転角度が４５度である場合）は４５度が指定される。拡大方向取得部９０１は、取得したブロックの拡大方向を示す情報を領域設定部２０４に出力する。
【００５８】
ステップＳ１００４では、領域設定部２０４が拡大方向取得部９０１から取得したブロックの拡大方向を示す情報に基づいて、ブロックの拡大方向を設定する。また、領域設定部２０４は、階層型のブロックマッチングにおける初期ブロックを決定する。ブロックの拡大方向は、事前に定めた方向の候補から選択する。具体的な方法は第１の実施例と同様であるため、説明を省略する。
【００５９】
以上が、第２の実施例の画像処理装置１００で行われる処理である。上述したように、第２の実施例では、ユーザがブロックの拡大方向を指定する。それにより、第１の実施例に比べて処理工数を低減することができる。
【００６０】
＜実施例３＞
第１の実施例では、エピポーラ線の情報のみに基づいて、ブロックマッチングに用いるブロックの拡大方向を決定する例について説明した。本実施例では、被写体のエッジ情報を用いて、ブロックの拡大の有無を決定する例について説明する。第１の実施例では、ブロック内に含まれる全ての画素を用いてブロックマッチングを行い、推定した視差値の信頼性が高いと判断されるまでブロックを拡大する。本実施例では、ブロックマッチングに用いる画素としてふさわしくない画素が除外されるようにブロックを修正する。そして、修正したブロックを用いてブロックマッチングを行う。また、被写体のエッジ情報に基づいて、ブロックの拡大を制限する。
【００６１】
ここで、図３に示す環境において着目画素３０７の視差値を推定する際に、図１１に示すブロック１１０２を用いる場合を考える。図１１は、第３の実施例におけるブロックの修正処理を説明するための図である。ブロック１１０２には、着目画素３０７が属する被写体領域（被写体３０５の領域）とは異なる被写体領域（被写体３０６の領域）が多く含まれる。そのため、被写体３０６の特徴により、ブロック１１０２内の、被写体３０６に対応するブロックにおいて類似性が高いと判断され、正しく視差を推定できない可能性がある。また、着目画素３０７の被写体３０５のみを含むブロック１１０３を用いた場合においては、ブロック内がテクスチャレス領域のみとなる。そのため、類似領域として複数の領域が検出される可能性があり、正しく視差を推定できない可能性がある。このように、エピポーラ線に平行なブロックを用いてブロックマッチングを行ったとしても、マッチング元となるブロック内がテクスチャレス領域のみである場合や、ブロック内に複数の被写体領域が含まれる場合は、視差の推定精度が低下する可能性がある。
【００６２】
そこで、本実施例では、ブロック内に含まれるエッジを抽出し、ブロック１１０１のように、エッジを微小に跨ぐようにブロックを修正する。エッジを微小に跨がせることにより、ブロック内がテクスチャレス領域のみになることがない。それにより、誤ったブロックが検出されるおそれを低減させることができる。また、エッジを微小に跨がせることにより、着目画素３０７が属さない被写体領域（被写体３０６の領域）をブロック内に必要以上に含ませることがない。したがって、被写体３０６の視差に対応するブロックが誤って検出されることを抑制できる。また本実施例では、ブロック内において抽出されたエッジがエピポーラ線と平行なエッジである場合には、上述した現象の発生を抑制するために、当該エッジを跨がないようにブロックを修正する。さらに本実施例では、第１の実施例と同様に階層型のブロックマッチングを行うが、いずれの階層においても、ブロックを修正した方向については、ブロックの拡大方向として選択しないようにする。このような処理により、本実施例では、第１の実施例に比べて、ロバストかつ精度が高い視差マップを得ることが可能になる。
【００６３】
以下、本実施例の画像処理装置１００で行われる処理について説明する。図１２は、第３の実施例における画像処理装置１００の機能構成を示すブロック図である。図１３は、第３の実施例における視差推定処理の流れを示すフローチャートである。ＲＯＭ１０３に格納されたプログラムをＣＰＵ１０１がＲＡＭ１０２にロードして実行することで、図１２に示す各機能が動作する。またそれにより、図１３に示す一連の処理が実行される。なお、以下に示す処理の全てがＣＰＵ１０１によって実行される必要はなく、処理の一部または全部が、ＣＰＵ１０１以外の一つ又は複数の処理回路によって行われるように画像処理装置１００が構成されていてもよい。また、本実施例の機能構成は、第１の実施例の機能構成と同様である。ただし、本実施例では、第１の実施例に示す各機能に加えて、エッジ抽出部１２０１及び領域修正部１２０２が含まれる。また、図１３に示すステップＳ１３０１，Ｓ１３０３〜Ｓ１３０７，Ｓ１３０９〜Ｓ１３１２，Ｓ１３１５，Ｓ１３１６の処理は、第１の実施例におけるステップＳ５０１，Ｓ５０２〜Ｓ５０６，Ｓ５０７〜Ｓ５１０，Ｓ５１３，Ｓ５１４の処理と同様であるため、以下では説明を省略する。
【００６４】
ステップＳ１３０２では、エッジ抽出部１２０１が、画像データ取得部２０１から画像データを取得する。そして、エッジ抽出部１２０１は、取得した画像データの基準画像からエッジを抽出する。エッジ抽出方法はソーベルフィルタ（ｓｏｂｅｌ  ｆｉｌｔｅｒ）など、公知の様々なものが利用可能である。本実施例ではエッジに対応する画素の値を１、エッジでない画素の値を０としたエッジ情報を領域修正部１２０２に出力する。
【００６５】
ステップＳ１３０８では、領域修正部１２０２が、エッジ抽出部１２０１から取得したエッジ情報に基づき領域設定部２０４から取得したブロックを修正する。領域修正部１２０２の処理を、図１４を用いて具体的に説明する。
【００６６】
図１４は、領域修正部１２０２の処理を説明するための図である。図１４において、ブロック１４０２は、領域修正部１２０２が領域設定部２０４から取得したブロック情報によって示されるブロックである。両矢印１４０１は、ブロックの拡大方向を示す。ブロック１４０２内の黒色の画素は着目画素である。また、斜線で示す画素はエッジ抽出部１２０１によってエッジと判断された画素である。まず、領域修正部１２０２は、着目画素から矢印１４０１の負の方向（図１４において左方向）に、エッジと判断された画素を探索する。領域修正部１２０２は、拡大方向１４０１の正の方向についても同様に、エッジと判断された画素を探索する。
【００６７】
例えば、エッジと判断された画素が拡大方向１４０１の負の方向に存在しない場合は、領域修正部１２０２は、負の方向に対してはブロックの修正を行わないと決定する。また例えば、画素１４０４に示されるように、エッジと判断された画素が単独で存在している場合には、領域修正部１２０２は、ブロック１４０３に示されるように、エッジを１画素跨ぐようにブロックを修正する。なお、エッジを跨ぐ画素数は１画素に限らず、エッジを数画素跨ぐようにブロックが修正されてもよい。また、エッジを跨ぐ画素数は、入力インターフェース１０５を介して、または二次記憶装置１０４から取得されるようにしても良い。また例えば、画素１４０５に示されるように、エッジと判断された画素が連続して存在する場合には、領域修正部１２０２は、エピポーラ線と平行なエッジが存在すると判断する。そして、領域修正部１２０２は、ブロック１４０３に示されるように、エッジを跨がないようにブロックを修正する。領域修正部１２０２は、ブロックの修正の有無を示す情報（以下、ブロック修正情報をという）を正と負の方向毎に保持する。また、領域修正部１２０２は、修正後のブロックに関する情報を、視差推定部２０５に出力する。
【００６８】
ステップＳ１３１３では、判定部２０６が、ブロックの拡大が不可であると判断した場合、または、ブロックの拡大回数がブロックの最大拡大回数以上であると判断した場合には（ステップＳ１３１３のＹＥＳ）、処理がステップＳ１３１５に移行する。そうでない場合は（ステップＳ１３１３のＮＯ）、処理がステップＳ１３１４に移行する。なお、判定部２０６は、ブロック修正情報において正と負の両方向において修正有りと記されている場合に、ブロックの拡大が不可であると判断する。
【００６９】
ステップＳ１３１４では、領域設定部２０４が、保持するブロックの拡大情報に基づき、現在の階層で使用しているブロックを拡大する。このとき、まず、領域設定部２０４は、領域修正部１２０２が保持するブロック修正情報から、ブロックの修正がされていない方向を特定する。そして、領域設定部２０４は、ブロックの修正がされていない方向にのみ、サイズ刻み幅分ブロックを拡大する。このようにして、次の階層で使用するブロックが決定される。領域設定部２０４は、次の階層のブロックを示すブロック情報を領域修正部１２０２に出力する。
【００７０】
以上が、第３の実施例の画像処理装置１００で行われる処理である。なお、本実施例では着目画素を中心とする１方向に長い形状のブロックを用いたが、ブロックの形状はこれに限定されず、例えば、着目画素を中心とした十字形を用いてもよい。
【００７１】
第１の実施例の画像処理装置１００では、ブロック内に含まれる、着目画素とは異なる被写体の、大きさや特徴によって、推定した視差結果に誤差が含まれる場合がある。そのため、設定する初期ブロックや階層型のブロックマッチングにおいて拡大するブロックの大きさによって、推定した視差の精度が変動する。一方、本実施例の画像処理装置１００では、ブロック内のエッジ情報を用いて、ブロック内に含まれる不要な画素を除去するようにブロックを修正する。そのため、ブロックに含まれる、異なる被写体の大きさや特徴によらず、高精度な視差推定が可能となる。つまり、本実施例の画像処理装置１００によれば、第１の実施例の画像処理装置１００に比べてブロックの設定にロバストな推定が可能となる。また、本実施例の画像処理装置１００によれば、着目画素とは異なる被写体がブロック内に含まれる可能性が高い被写体間の境界線付近においても、精度が高い視差推定することが可能となる。
【００７２】
＜その他の実施例＞
本発明の実施形態は、上記の実施例に限られるものではなく、様々な実施形態をとることが可能である。上記の実施例では、多視点画像データが示す複数の画像を撮像したカメラの光軸が、互いに平行であるとして視差値の推定を行ったが、光軸が平行でない画像を用いて視差値の推定を行ってもよい。この場合は、各画像を撮像したカメラの撮像パラメータを用いて、各画像がカメラの光軸を平行にして撮影したときと同じ画像になるように、多視点画像データを変換する画像処理を事前に行えばよい。また、カメラの光軸が平行でない場合にも対応可能な、公知の方法を用いて画素毎にエピポーラ線を算出した後に、エピポーラ線に基づいて視差値の数値を行ってもよい。
【００７３】
また、上記実施例では、多視点画像データが示す複数の画像のうち、選択した基準画像と参照画像のみを比較することで視差値の推定を行ったが、３枚以上の画像を用いて視差値の推定を行ってもよい。この場合は、視差値として各視点間の位置関係を示す単位ベクトルごとの被写体像の移動量（３次元空間上の移動量）が格納される。この場合の、マッチングに用いる評価値は分散を用いて以下の式で表わされる。
【００７４】
【数４】
2018059767.tif 000006
【００７５】
式（４）において、Ｂはマッチングに用いるブロックに含まれる画素の集合を示す。｜Ｂ｜は領域Ｂに含まれる画素数を示す。ｌは前述の、単位ベクトルごとの被写体像の移動量を示す視差値である。（ｒxk, ｒyk）は、基準の視点から見た各視点の相対位置ベクトルを示す。ｎはマッチングに用いる視点の総数を示す。なお、ここで算出される評価値は式（４）に示す式に限られず、二つの画像領域の類似度合いを示す値であれば公知の様々なものが利用可能である。
【００７６】
また、本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００７７】
２０４  領域設定部
２０５  視差推定部
２０６  判定部
２０７  視差決定部
【図１】
2018059767.tif 000007
【図２】
2018059767.tif 000008
【図３】
2018059767.tif 000009
【図４】
2018059767.tif 000010
【図５】
2018059767.tif 000011
【図６】
2018059767.tif 000012
【図７】
2018059767.tif 000013
【図８】
2018059767.tif 000014
【図９】
2018059767.tif 000015
【図１０】
2018059767.tif 000016
【図１１】
2018059767.tif 000017
【図１２】
2018059767.tif 000018
【図１３】
2018059767.tif 000019
【図１４】
2018059767.tif 000020