以下、図面を参照して実施形態を説明する。
(第1の実施形態)
図1は、本実施形態に係わる画像処理装置1を含む、画像処理システムの構成の一例を示す概略ブロック図である。画像処理システムは、画像マッチング処理装置(以下、画像処理装置と示す)1と、キャリブレーション装置2と、画像入力装置3と、これらを接続するバス4とから構成されている。図1は、2台のカメラによる左右視差画像を用いてステレオマッチング処理を行う画像処理システムについて例示している。
画像入力装置3には、図示しないカメラで撮像された複数の画像(例えば、左目に対応するカメラで撮像されたL画像5lと、右目に対応するカメラで撮像されたR画像5rの2枚の画像)が入力される。L画像5lとR画像5rとは、バス4を介してキャリブレーション装置2に入力される。
キャリブレーション装置2は、設定条件やレンズの個体差などに起因するカメラ内外の静的なズレを補正する。具体的には、格子状のパターンなど、大きさが既知の特定図形パターンを撮像した画像を用い、内部パラメータと外部パラメータとを事前に算出しておく。そして、画像入力装置3から入力されたL画像5lとR画像5rとのそれぞれを、内部パラメータと外部パラメータとを用いて変換することで、静的なズレを補正し、補正済L画像6lと補正済R画像6rとを生成する。なお、内部パラメータとは、焦点距離や画像主点位置、レンズ歪みなど、カメラの内部特性を示すものである。また、外部パラメータとは、カメラの三次元空間における回転・平行移動のパラメータであり、ステレオ画像においては、一方の画像を基準とした場合の他方の画像の回転・平行移動の度合を表すものである。補正済L画像6lと補正済R画像6rとは、バス4を介して画像処理装置1に入力される。
画像処理装置1は、補正後の画像(補正済L画像6l、補正済R画像6r)を用いてステレオマッチングを行い、距離画像(カメラから被写体までの距離を示す画像)7を生成する。図1の画像処理装置1は、プロセッサ1aと、L画像用ラインバッファ(以下、Lラインバッファと示す)12と、R画像用ラインバッファ(以下、Rラインバッファと示す)13とを有している。
Lラインバッファ12は、補正済L画像6lにおいて、視差計算対象画素位置のラインを含む、複数ライン分の画素データを格納するバッファである。Rラインバッファ13は、補正済R画像6rにおいて、視差計算対象画素位置のラインを含む、複数のライン分の画素データを格納するバッファである。
プロセッサ1aは、距離情報演算回路11を含む。距離情報演算回路11は、グラフカット法などのグローバルマッチングや、SGM法(Semi-Global Matching法)などを用い、基準画像の画素ごとに視差を算出して視差画像として出力する。また、基準画像を左右入れ替えて、クロスチェックも行う。すなわち、距離情報演算回路11における各処理は、プロセッサ1aによって実行される。
なお、本実施形態において用いる「プロセッサ」との文言は、例えば、CPU(Central Processing Unit)、GPU(Graphical Processing Unit)、特定用途向け集積回路(Application Specific Integrated Circuit:ASIC)、プログラマブル論理デバイス(例えば、単純プログラマブル論理デバイス(Simple Programmable Logic Device:SPLD)、複合プログラマブル論理デバイス(Complex Programmable Logic Device:CPLD)、および、フィールドプログラマブルゲートアレイ(Field Programmable Gate Array:FPGA))の回路を意味する。
図2は、距離情報演算回路11の構成の一例を示すブロック図である。距離情報演算回路11は、入力画像取得回路14と、入力画像補間回路21と、視差毎コスト値算出回路15と、コスト最適化演算回路16と、コスト最小視差抽出回路17と、クロスチェックバッファ18と、視差出力回路19と、集中視差範囲決定回路23と、コスト値補間回路22と、視差刻み情報メモリ24と、制御回路20とを有する。
入力画像取得回路14は、制御回路20からの指示に従って、Lラインバッファ12、及び、Rラインバッファ13から、基準画像の各画素、及び、参照画像の各画素を取得する。各画素の取得に際し、L画像/R画像のどちらが基準画像か、また、各画像における画素の取得順序(ラスタスキャンの方向)が、制御回路20から指示される。
入力画像補間回路21は、集中視差範囲決定回路23から入力される指示に従って、入力画像取得回路14から入力される入力画像のうち、参照画像を補間して補間画像を生成する。具体的には、まず、入力画像の指定された領域を水平方向にのみ拡張し、整数精度のまま解像度をあげる。画像の拡張には、例えば、バイリニア法やバイキュービック法などの超解像手法が用いられる。入力画像全体を2倍に拡張した場合、水平方向の画素数は約2倍になる。例えば、水平方向の画素数が1280画素の入力画像について、全ての画素を水平方向に2倍に拡張する場合、補間画像の水平方向の画素数は2559画素となる。
次に、集中視差範囲決定回路23から入力される指示に従って、コスト値算出画素を抽出する。なお、コスト値算出画素の数は、入力画像において拡張対象となる領域の画素数と同数に設定される。例えば、拡張対象となる領域の画素数が128画素の場合、コスト値算出画素数も128画素に設定される。最後に、指定された領域を拡張して生成した画素領域から、コスト値算出対象画素以外の画素を削除し、補間画像を生成する。なお、集中視差範囲決定回路23の指示がない場合は、入力画像をそのまま補間画像として出力する。
視差毎コスト値算出回路15は、補間画像において、視差計算対象画素におけるコスト値算出画素領域を設定し、当該領域におけるコスト値を算出する。コスト値算出画素領域は、水平方向の最大視差の大きさを有する。以下の説明において、補間画像における水平方向の画素位置を表す座標をX座標、垂直方向の画素位置を表す座標をY座標とする。例えば、基準画像がL画像、視差計算対象画素の位置が(X, Y)=(150, 25)、水平方向の最大視差が128画素である場合、コスト値算出画素領域は、補間画像における(X, Y)= (150, 25)~(23, 25)の範囲の画素となる。
図3は、視差毎コスト値算出回路15の詳細な構成の一例を示すブロック図である。視差毎コスト値算出回路15は、特徴量演算回路141と、コスト演算回路142と、コストバッファ143とを有する。
特徴量演算回路141は、基準画像が格納されているラインバッファから取得する視差計算対象画素の画素データ、及び、入力画像補間回路21から取得する補間画像のコスト値算出画素領域内の画素データの特徴量を、それぞれ算出する。例えば、LBP(Local Binary Pattern)など、既存の定量化した特徴量を算出する。特徴量としてLBPを算出する場合、特徴量算出対象画素(中心画素)と、周辺画素との輝度値を比較する。当該周辺画素の中心画素の輝度値より周辺画素の輝度値のほうが大きければ“1”、中心画素の輝度値より周辺画素の輝度値のほうが小さければ“0”ビットを付与する。そして、周辺画素のビットを所定の順序で結合し、特徴量算出対象画素の特徴量(LBP符号)とする。なお、周辺画素に付与するビットは、中心画素の輝度値より周辺画素の輝度値のほうが大きければ“0”、中心画素の輝度値より周辺画素の輝度値のほうが小さければ“1”としてもよい。
コスト演算回路142は、基準画像における視差計算対象画素に関する特徴量と、補間画像におけるコスト値算出画素に関する特徴量とを比較し、視差ごとのコスト値を算出する。例えば、特徴量としてLBP符号を算出した場合、基準画像と参照画像のLBP符号間のハミング距離を算出し、コスト値とする。
コストバッファ143は、コスト演算回路142で算出されたコスト値を、補間画像における画素位置と対応付けて格納する。
図4は、視差毎コスト値算出回路15におけるコスト値算出手順の一例を説明するフローチャートである。なお、コスト値算出に先立ち、基準画像において視差計算対象画素がセットされており、コスト値算出に必要な特徴量が算出されているものとする。距離画像7を作成するためには、基準画像の全画素について視差を算出する必要がある。通常は、基準画像の左上に位置する画素から右下に位置する画素まで、ラスタスキャンの順に視差計算対象画素位置を順次セットし、各画素位置での視差を算出していく。
まず、コスト値算出対象領域を特定し、水平方向の最大視差数Dnumを設定する(S1)。例えば、上述の一例の場合、Dnum=128と設定する。また、最初のコスト値算出対象画素位置(探索画素位置)を設定する。最初のコスト値算出対象画素位置は、コスト値算出対象領域の左端部に位置する画素である。例えば、上述の一例の場合、最初のコスト値算出対象画素位置は(X, Y)=(23, 25)と設定される。
次に、コスト算出対象の水平方向の画素位置を、初期状態(D=0)にセットする(S2)。続いて、コスト演算回路142において、探索画素位置におけるコスト値を算出し、コストバッファ143に格納する(S3)。続いて、探索画素位置の水平方向の画素位置(D)を1増加させ、探索画素位置を隣の画素に移動させる(S4)。
探索画素位置がコスト値算出対象領域に含まれる場合(S5、No)、S3に戻って当該画素位置におけるコスト値を算出する。一方、移動後の探索対象画素位置がコスト値算出対象領域に含まれない場合(S5、Yes)、コスト値算出対象領域内の全ての画素についてコスト値の算出が終了したと判定され、視差毎コスト値算出回路15における一連のコスト値算出手順を終了する。
なお、視差毎コスト値算出回路15におけるコスト値の算出方法は、上述した図4のフローチャートの手順に限定されず、コスト値算出対象領域内のすべての画素のコスト値を漏れなく算出できる手順であればよい。例えば、コスト値算出対象領域を複数のブロックに分割し、各ブロックにおけるコスト値の算出を並列処理してもよい。
なお、視差毎コスト値算出回路15におけるコスト値の算出方法は、上述したLBP符号のハミング距離に限定されず、SAD関数など、既存の定量化したコスト関数を用いてもよい。SAD関数など画素データから特徴量を算出せずに直接コストを算出することが可能な方法を用いる場合、基準画像が格納されているラインバッファから取得する視差計算対象画素の画素データ、及び、補間画像から取得するコスト値算出画素領域内の画素データをコスト演算回路142に直接入力してコスト値を算出することができるため、特徴量演算回路141は省略することができる。
コスト最適化演算回路16は、グラフカット法などのグローバルマッチングやSGM法(Semi-Global Matching法)などによって合成非類似度である合成コスト値Sを算出することで、基準画像の画素ごとに最適化された視差を導出する。
ここで、SGM法による合成コスト値Sの算出方法について説明する。合成コスト値Sは、補間画像の端部から視差計算対象画素に向かって集約する方向に沿った、複数の経路を定義し、それぞれの経路におけるコストの総和として算出される。コストを算出する経路は、通常、視差計算対象画素に向かい、水平右方向、水平左方向、垂直上方向、垂直下方向から集約する4方向に沿った4つの経路が設定される。そして通常は、これらの4方向に加え、視差計算対象画素に向かい、右上45度方向、右下45度方向、左下45度方向、左上45度方向から集約する4方向に沿った4つの経路を加えた8つの経路が設定される。なお、8方向を更に分割して16方向、3つに分割して24方向とするなど、経路の数は特定の数に限定されない。
それぞれの経路rにおけるコストLr(p, d)は、以下の(1)式を用いて算出される。
Lr(p, d) = C(p, d) + min{Lr(p-r, d), Lr(p-r, d-1) + P1, Lr(p-r, d+1)+P1, Lrmin(p-r) + P2}
…(1)式
(1)式において、C(p, d)は、視差計算対象画素位置から視差dの位置にある画素のコスト値、min{ }は最小値を求める関数、Lrmin(p-r)は、視差計算対象画素位置からr方向に1画素シフトした座標において、シフト量dを変化させた際の、Lr(p-r, d)の最小値を示す。また、P1、P2は予め設定されたペナルティ定数である。このように、コストLr(p, d)は、コスト値C(p, d)に、r方向の所定経路上における1画素前のコストの値が選択されて加算される漸化式となっているので、最適化が行われる。
(1)式に示すコスト計算を、複数の方向(例えば、8方向)から行うことで、近似的に全体最適化を行う。すなわち、各方向のコストLr(p, d)の総和として、合成コスト値Sを算出する。
図5は、SGM法におけるコストを算出する経路とスキャン方向との関係を説明する図である。図5において、網掛けで示す画素は、現在のコスト値算出対象画素を示している。また、図5において、矢印付き太線は、コストを算出する経路と方向とを示している。更に、図5において、矢印付き点線は、補間画像における画素のスキャン方向を示している。
水平左方向、垂直上方向、右上45度方向、左上45度方向から集約する4方向に沿った4つの経路のコストは、左、及び、上方向に位置する画素の結果を参照しながら算出する必要がある。従って、図5(a)に示すように、補間画像の左上に位置する画素から右下に位置する画素までラスタスキャンしながら算出する。
また、水平右方向、垂直下方向、右下45度方向、左下45度方向から集約する4方向のベクトルに沿った4つの経路のコストは、右、及び、下方向に位置する画素の結果を参照しながら算出する必要がある。従って、図5(b)に示すように、補間画像の右下に位置する画素から左上に位置する画素までラスタスキャンしながら算出する。
すなわち、コスト計算を8方向から行う場合、方向を変えて2回ラスタスキャンする必要がある。ラスタスキャンを2回行うため、まず、1回目のラスタスキャンの間に算出した4方向のコストを記憶装置などに一時的に格納しておく。そして、2回目のラスタスキャン終了後に、記憶装置などから格納されている4方向のコストを読み出して、2回目のラスタスキャンによって算出した4方向のコストと合わせ、合成コスト値Sを得る。
図6は、コスト最適化演算回路16の詳細な構成の一例を示すブロック図である。コスト最適化演算回路16は、コスト更新値演算部161と、コストバッファ162とを有する。コスト更新値演算部161は、視差毎コスト値算出回路15から入力されたコスト値、図示しない記憶部などから入力される所定のペナルティ定数P1、P2、及び、コストバッファ162に格納されている隣接画素のコストを用い、上述した(1)式の演算を行ってコストを算出する。演算結果は、コストバッファ162に格納され、コスト更新値演算部161でのコスト算出に再帰的に使用される。
なお、コスト最適化演算回路16は、一般的に、特定の一つの経路におけるコスト算出に用いられる。従って、距離情報演算回路11には、合成コスト値Sを算出するために設定された経路の数と同数のコスト最適化演算回路16が設置される。
また、コスト最適化演算回路16における合成コスト値Sの算出方法は、上述したグラフカット法などのグローバルマッチングやSGM法に限定されず、既存の他の手法を用いてもよい。
コスト最小視差抽出回路17は、コスト最適化演算回路16で算出された合成コスト値Sが最小となる視差(補間画像における画素位置)を抽出する。基準画像の全画素について、視差の抽出が行われる。
クロスチェックバッファ18は、基準画像を左右入れ替えてクロスチェックを行う場合に、先に基準画像と設定された画像における各画素について、コスト最小視差抽出回路17で抽出された視差を格納する。
視差出力回路19は、先に基準画像と設定された画像における各画素について抽出された視差を、視差目安として集中視差範囲決定回路23に出力する。また、クロスチェックバッファ18に格納されている各画素の視差と、後に基準画像と設定された画像における各画素の視差との差分をチェックし、正しく視差が求められているか否かを画素毎にその妥当性をチェックする。
なお、視差出力回路19に入力される視差は、補間画像における画素位置に基づく視差である。従って、基準画像における視差に換算する必要がある。参照画像における画素位置と補間画像における画素位置との対応関係は、後述する視差刻み情報メモリ24に格納されている。また、参照画像と基準画像の解像度は等しい。従って、後に基準画像と設定された画像における各画素の視差を、視差刻み情報メモリ24に格納されている情報を用いて、参照画像における視差に変換することにより、視差出力回路19に入力される視差を、基準画像における視差に変換する。
なお、視差刻み情報メモリ24に参照画像おける画素位置と補間画像における画素位置との対応関係が登録されていない場合には、入力される各画素の視差を、基準画像における視差とする。以下に説明する視差のクロスチェックは、変換後の視差を用いて行う。
図7は、視差出力回路19における、視差のクロスチェックの方法を説明する図である。具体的には、L画像の各画素について、算出された視差(換算後視差)を、自身のX座標から差し引き、対応するR画像の画素位置を求める。例えば、L画像の画素(X, Y)=(100, 25)の換算後視差が15と算出された場合、100から15を引き、対応するR画像の画素(X, Y)=( 85, 25)を得る。次に、算出されたR画像の画素位置における視差をクロスチェックバッファ18から読み出し、先のL画像の画素における視差との差分を算出する。例えば、R画像の画素(X, Y)=( 85, 25)の換算後視差が16である場合、差分は15‐16=-1となる。算出した差分の絶対値と、予め設定した閾値とを比較し、閾値より小さい場合、正しく視差が求められていると判定する。
なお、視差出力回路19におけるクロスチェックの方法は、L画像を基準画像とした場合の視差と、R画像を基準画像とした場合の視差の比較を行い、視差が正しく求められているか否かを判定すればよく、上述した方法に限定されない。例えば、各座標から視差を引く方法(式)や、閾値との比較による正否判定は、他の方法を用いてもよい。
視差出力回路19は、視差、及び、チェック結果を出力する。なお、視差とチェック結果とは個別に出力してもよいし、正しく視差が求められていない画素については、算出された視差を特定の値(例えば、-1)で置き換えるなどして、視差にチェック結果を含めて出力してもよい。なお、クロスチェックを行わない場合には、コスト最小視差抽出回路17で抽出された視差を基準画像における視差に換算し、出力する。
更に、視差出力回路19は、画像の左上の画素から右下の画素に向かってラスタスキャン順に視差が出力されるよう、出力順序の制御やアドレスの計算も行う。
集中視差範囲決定回路23は、視差出力回路19から入力される視差目安、すなわち、先に基準画像と設定された画像における各画素について抽出された視差に基づき、左右入れ替え後の基準画像について、参照画像において視差を集中的に探索する範囲を決定する。
視差を集中的に探索する範囲は、1画素単位で決定してもよいし、基準画像を所定の小領域に分割し、当該小領域ごとに決定してもよい。1画素単位で決定する場合は、当該画素について抽出された視差目安に近い画素ほど集中的に探索するよう、視差探索範囲を決定する。例えば、先の基準画像をR画像とし、画素(X, Y)=( 85, 25)の視差目安が1である場合、左右入れ替え後の基準画像であるL画像について、画素(X, Y)=( 86, 25)の視差を探索する際には、参照画像(R画像)の画素(X, Y)=( 85, 25)を視差集中探索画素位置とし、この近傍の画素を集中的に探索するよう、視差探索範囲を決定する。
小領域ごとに視差を集中的に探索する範囲を決定する場合は、まず、小領域ごとに視差目安の分布統計を取得する。そして、視差計算対象画素から視差目安の平均値だけ離れた画素位置を、左右入れ替え後の基準画像の対応する小領域における視差集中探索画素位置とする。例えば、先の基準画像をR画像とし、画像を水平方向に4分割、垂直方向に4分割して16ブロックの小領域に分割し、右上端の小領域に含まれる画素の視差目安の平均値が40であるとする。この場合、まず、左右入れ替え後の基準画像であるL画像も、水平方向に4分割、垂直方向に4分割して16ブロックの小領域に分割する。視差計算対象画素が右上端の小領域に含まれる場合、参照画像であるR画像における視差計算対象画素位置から40画素右側に位置する画素を視差集中探索画素位置とし、この近傍を集中的に探索するよう視差探索範囲を決定する。
なお、視差集中探索画素位置は、分布統計の平均値に限定されず、ピーク値や、最尤推定値、中央値(median)を用いてもよい。また、小領域内に含まれる画素の視差目安のばらつきが大きい場合、例えば、分散が所定の値を超える場合には、当該小領域については視差を集中的に探索する範囲を設けず、通常の視差探索同様に均一に探索を行うようにしてもよい。
また、小領域の分割方法は、画像を垂直方向、及び、水平方向に等分割する方法に限定されず、例えば、基準画像のオブジェクト認識を行い、認識結果を用いて分割するなど他の手法を用いてもよい。また、シーンに応じて分割方法や分割数を切り替えてもよい。
図8は、集中視差範囲決定回路23における、コスト値算出対象画素の決定方法を説明する図である。図8では、具体的な一例として、後の基準画像(L画像)における視差計算対象画素の位置が(X, Y)=( 150, 25)、水平方向の最大視差が128画素である場合のコスト値算出対象画素の決定方法を示している。なお、先の基準画像(R画像)において、画素(X, Y)=( 150, 25)が含まれる小領域の視差目安平均は1であるとする。
図8に示す画素列は、Y= 25行目の画素の一部を抽出したものである。(a)に示す画素列は、参照画像におけるコスト値算出画素領域に含まれる画素列を示している。すなわち(a)は、参照画像における(X, Y)=( 150, 25)~( 23, 25)の範囲の画素を示している。(b)と(c)に示す画素列は、(a)に含まれる画素の解像度2倍に拡張した画素列である。また、(d)に示す画素列は、補間画像におけるコスト値算出画素領域に含まれる画素列を示している。
また、各画素の上部に記載した数字は、該画素の水平方向の座標位置である。かっこ付きの数字は、参照画像におけるX方向の座標位置を示している。例えば、(23)は、参照画像におけるX方向の座標位置が23であることを示している。また、数字のみのものは、解像度を2倍に拡張した画像におけるX方向の座標位置を示している。例えば、27は、2倍に拡張画像における座標位置が27であることを示している。更に、下線付きの数字は、補間画像におけるX方向の座標位置を示している。例えば、24は、補間画像におけるX方向の座標位置が24であることを示している。
以下、コスト値算出対象画素の決定方法を説明する。まず、集中視差範囲決定回路23は、視差計算対象画素を設定し、コスト値算出画素領域を抽出する。図8に示す一例の場合、コスト値算出画素領域は、(X, Y)=( 150, 25)~( 23, 25)の範囲の画素となる(画素列(a)参照)。そして、当該画素の視差集中探索画素位置を算出する。図8では、視差計算対象画素を(X, Y)=( 150, 25)とし、当該画素の含まれる小領域の視差目安平均が1であるので、X方向の視差集中探索画素位置はX= 150-1= 149となる。
次に、コスト値算出画素領域に含まれる画素を水平方向に2倍に拡張し、解像度を上げる。すなわち、(X, Y)=( 150, 25)~( 23, 25)の範囲の128個の画素を拡張して、255個の画素を生成する(画素列(b)参照)。
続いて、解像度を上げた255個の画素から、コスト値算出対象画素を抽出する。コスト値算出対象画素は、水平方向の最大視差の数だけ抽出する。(この場合、128画素を抽出する。)このとき、視差集中探索画素位置の近傍の画素は細かい刻みで抽出し、視差集中探索画素位置から遠い画素は荒い刻みで抽出する。なお、「刻み」とは、解像度を上げた画素からコスト値算出対象画素として抽出される画素の間隔を表現している。「細かい刻みで抽出する」とは、画素の抽出間隔を狭くとり、連続的にコスト値算出対象画素を抽出することを示している。「荒い刻みで抽出する」とは、画素の抽出間隔を広くとり、離散的にコスト値算出対象画素を抽出することを示している。
図8に示す画素列(c)は、このようにして抽出したコスト値算出対象画素の一例を示している。図8において、コスト値算出対象画素には網掛けを施している。すなわち、視差探索集中画素位置である(149)が付与された画素(2倍に拡張した画像において、X= 275の画素)の近傍は、細かい刻みで抽出する。すなわち、網掛けの画素が連続しており、全てコスト値算出対象画素として選択されている。また、視差探索集中画素位置から少し離れた位置では、少し刻みを荒くして抽出する。すなわち、1画素おきに網掛け画素が配置されている。一方、視差探索集中画素位置から遠くでは、更に荒い刻みで抽出する。すなわち、網掛けの画素は4画素に1画素となっており、離散的に配置されている。
このように、視差目安近傍の画素を細かく抽出することで視差の算出精度を向上させることができるとともに、視差目安から遠くの画素を離散的に抽出することで、視差計算量の増加を抑制することができる。
集中視差範囲決定回路23は、入力画像補間回路21に対し、上述のようにして抽出したコスト値算出対象画素位置を入力する。また、視差刻み情報メモリ24にも、抽出したコスト値算出対象画素位置を格納する。入力画像補間回路21は、2倍に拡張した画素において、入力されたコスト値算出対象画素の位置以外に配置されている画素を削除し、残りの画素を右から詰めて配置する。これにより、図8の画素列(d)に示すように、補間画像の(X, Y)=( 150, 25)~( 23, 25)の位置に、コスト値算出対象画素を配置することができる。例えば、補間画像の画素(X, Y)= ( 23, 25)には、参照画像の画素(X, Y)= ( 23, 25)が配置される。補間画像の画素(X, Y)= ( 24, 25)には、参照画像の画素(X, Y)= ( 25, 25)が配置される。更に、補間画像の画素(X, Y)= ( 145, 25)には、参照画像を補間して生成した、参照画像の画素(X, Y)= ( 147.5, 25)に相当する画素が配置される。
なお、集中視差範囲決定回路23から入力画像補間回路21に対して入力したり、視差刻み情報メモリ24に格納したりするデータは、コスト値算出対象画素位置に限定されず、視差計算対象画素に対する相対位置(インデックス)や、コスト値算出対象画素の抽出ルールなど、入力画像補間回路21がコスト値算出対象画素位置を算出できるデータを入力してもよい。
コスト値補間回路22は、コスト最適化演算回路16において画素間での探索結果(コスト値)を参照しながら合成コスト値Sを算出する際に、参照すべき画素の探索結果が算出されていない場合、周辺の画素の探索結果を用いて当該画素のコスト値を補間する回路である。例えば、視差が小さい領域では刻みを細かく、視差が大きい領域では刻みを荒くしてコスト値算出対象画素を抽出する第一の小領域と、コスト値算出対象画素領域内で均等にコスト値算出対象画素を抽出する第二の小領域とが隣接して配置されている場合、コスト値補間回路22によるコスト値の補間が必要となる。
以下、具体的な一例を用いて説明する。図9は、コスト値補間回路22においてコスト値補間が必要な画素の一例を説明する図である。図9(a)は、視差計算対象画素(X, Y)=( 150, 25)におけるコスト値算出対象画素の一例を示しており、図9(b)は、視差計算対象画素(X, Y)=( 151, 25)におけるコスト値算出対象画素の一例を示している。なお、図9は、水平方向に2倍に拡張した参照画像であり、コスト値算出対象画素として抽出された画素には網掛けを施している。
また、図中にかっこ付き数字で示す座標は、拡張前の参照画像における座標を示している。更に、図9では、基準画像(L画像)における水平方向の最大視差が128画素であり、X座標が0~150の領域を第一の小領域、X座標が151~の領域を第二の小領域とする。すなわち、画素(X, Y)= ( 150, 25)は第一の小領域に含まれ、 隣の画素(X, Y)= ( 151, 25)は第二の小領域に含まれているとする。また、図9(a)(b)に示すd座標軸は、視差計算対象画素を基準とする視差方向を示している。
図9(a)に示すように、視差計算対象画素が(X, Y)= ( 150, 25)の場合、視差が小さい領域では細かい刻みで画素を抽出する。例えば、視差が小さい領域で抽出される画素は、(X, Y)= …( 149, 25)、( 149.5, 25)、( 150, 25)となる。一方、視差が大きい領域では荒い刻みで画素を抽出する。例えば(X, Y)=( 23, 25)、( 25, 25)、( 27, 25)…となる。続いて、図9(b)に示すように、視差計算対象画素を水平方向に1シフトし、(X, Y)=( 151, 25)に設定してコスト値を算出する場合、全ての領域において均等の刻みで画素を抽出する。すなわち、抽出される画素は、 (X, Y)= ( 24, 25)、( 25, 25)、( 26, 25)…( 150, 25)、( 151, 25)となる。
すなわち、視差計算対象画素(X, Y)=( 151, 25)の合成コスト値Sを算出する際に必要となる画素(X, Y)=( 24, 25)、( 26, 25)のコスト値は、視差計算対象画素(X, Y)=( 150, 25)の合成コスト値S算出の際には不要であるので、算出されていない。従って、視差計算対象画素(X, Y)=( 151, 25)の合成コスト値Sを算出する際に、画素(X, Y)= ( 24, 25)、( 26, 25)のコスト値を周囲の画素のコスト値などを用いて補間生成する。なお、コスト値の補間には、例えば、バイリニア法やバイキュービック法などの補間手法が用いられる。
制御回路20は、入力画像取得回路14、入力画像補間回路21、視差毎コスト値算出回路15、コスト最適化演算回路16、コスト最小視差抽出回路17、の各部に対し、基準画像の設定と、各画像おける画素のスキャン方向の指示を行う。
次に、本実施形態の画像処理装置における、視差算出手順について説明する。図10は、本実施形態に係わる画像処理手順の一例を説明するフローチャートである。図10は、L画像を基準画像とする視差を出力する場合において、R画像を基準画像として算出した視差を用いてクロスチェックを1回行う際の手順を示している。
まず、制御回路20は、入力画像取得回路14、入力画像補間回路21、視差毎コスト値算出回路15、コスト最適化演算回路16、コスト最小視差抽出回路17の各部に対し、基準画像としてR画像をセットする(S11)。通常は、まず、視差を出力する画像とは逆の画像を基準画像として視差を算出する。従って、上述の場合、まずはR画像を基準画像として視差を算出する。なお、R画像を基準画像とする視差を出力したい場合、S11においてはL画像を基準画像としてセットする。
次に、入力画像取得回路14、視差毎コスト値算出回路15、コスト最適化演算回路16、コスト最小視差抽出回路17は、R画像を基準画像とし、参照画像であるL画像の補間画像をスキャンしながら各画素の視差を算出し、所定の小領域ごとに視差の分布統計を取得する(S12)。S12は、具体的には以下のように実行される。
まず、入力画像取得回路14、視差毎コスト値算出回路15、コスト最適化演算回路16、コスト最小視差抽出回路17は、R画像を基準画像とし、参照画像であるL画像の補間画像をスキャンしながら、各画素の視差を算出する。この時、入力画像補間回路21は、画像の拡張処理を行わず、入力画像である参照画像をそのまま補間画像として出力する。すなわち、補間画像=L画像となる。そして、基準画像の全画素について、合成コスト値Sが最小となる視差が抽出され、クロスチェックバッファ18に格納されるとともに、視差出力回路19に出力される。視差出力回路19は、基準画像の全画素についての視差を、視差目安として集中視差範囲決定回路23に出力する。集中視差範囲決定回路23は、基準画像を所定のロジックに基づき小領域に分割する。そして、小領域ごとに、当該領域に含まれる画素の視差目安の分布統計を取得する。
続いて、集中視差範囲決定回路23は、S12で取得した視差目安の分布統計に基づき、小領域ごとに、集中的に探索を行う視差集中探索画素位置(中央視差値)を決定する(S13)。
そして、制御回路20は、基準画像の入れ替えを行い、入力画像取得回路14、入力画像補間回路21、視差毎コスト値算出回路15、コスト最適化演算回路16、コスト最小視差抽出回路17の各部に対し、基準画像としてL画像をセットする(S14)。
入力画像取得回路14、入力画像補間回路21、視差毎コスト値算出回路15、コスト最適化演算回路16、コスト最小視差抽出回路17は、L画像を基準画像とし、参照画像であるR画像の補間画像をスキャンしながら、各画素の視差を算出する(S15)。S15は、具体的には以下のように実行される。
まず、入力画像補間回路21は、入力画像取得回路14から入力される参照画像(R画像)に対し、集中視差範囲決定回路23からの指示に従い補間画像を生成する。視差集中探索画素位置は視差計算対象画素によって異なるため、視差計算対象画素が次の画素にセットされる都度、当該視差計算対象画素に応じた指示を集中視差範囲決定回路23から受けて、補間画像を生成する。
次に、視差毎コスト値算出回路15は、補間画像において、視差計算対象画素におけるコスト値算出画素領域を設定し、当該領域におけるコスト値を算出する。続いて、コスト最適化演算回路16において合成コスト値Sを算出し、コスト最小視差抽出回路17において、合成コスト値Sが最小となる視差が抽出される。
続いて、視差出力回路19は、クロスチェックバッファ18に格納されているR画像を基準画像とした各画素の視差と、L画像を基準画像とした各画素の視差との差分をチェックし、正しく視差が求められているか否かを画素毎にチェックする(S16)。
最後に、視差出力回路19は、L画像を基準画像とした各画素の視差にチェック結果を反映させ、正しく視差が求められていないと判定された画素については、算出された視差を特定の値(例えば、-1)で置き換える(S17)。正しく視差が求められていると判定された画素については、算出された視差をそのまま用いる。なお、チェック結果に応じた視差の置き換えは行わず、視差とチェック結果とを個別に出力してもよい。
最後に、算出された視差を、S15において視差刻み情報メモリ24に格納されているデータ(補正画像における画素位置と、参照画像における画素位置との対応関係のデータ)を用いて補正し、基準画像における視差に変換して出力し(S18)、視差算出処理を終了する。
このように、本実施形態によれば、基準画像を左右入れ替えて視差を算出し、クロスチェックを行う場合において、後の基準画像において視差を算出する際に、先の基準画像を用いて算出した視差(視差目安)に基づき、視差を集中的に探索する範囲を決定する。従って、処理回路や演算を追加することなく視差目安を取得することができる。後の基準画像において視差を算出する際に、視差目安近傍の画素を細かく抽出し、視差目安から遠くの画素を離散的に抽出してコスト演算を行うことで、計算量の増加を抑制しつつ、視差の算出精度を向上させることができる。
本実施の形態の画像処理装置1は、移動体100などにおける運転支援システムとして用いることができる。次に、本実施形態の画像処理装置1を搭載した移動体100について説明する。
図11は、本実施形態の移動体100の一例を示す図である。
移動体100は、画像処理装置1と、出力部100Aと、センサ100Bと、入力装置100Cと、動力制御部100Gと、動力部100Hと、を備える。
移動体100は、移動可能な物体である。移動体100は、例えば、車両(自動二輪車、自動四輪車、自転車)、台車、ロボット、船舶、飛翔体(飛行機、無人航空機(UAV:Unmanned Aerial Vehicle)など)である。移動体100は、例えば、人による運転操作を介して走行する移動体や、人による運転操作を介さずに自動的に走行(自律走行)可能な移動体である。自動走行可能な移動体は、例えば、自動運転車両である。本実施形態の移動体100は、自律走行可能な車両である場合を一例として説明する。
なお、運転支援システムとしての画像処理装置1は、移動体100に搭載された形態に限定されない。画像処理装置1は、静止物に搭載されていてもよい。静止物は、移動不可能な物や、地面に対して静止した状態の物である。静止物は、例えば、ガードレール、ポール、駐車車両、道路標識、などである。また、画像処理装置1は、クラウド上で処理を実行するクラウドサーバに搭載されていてもよい。
出力部100Aは、各種情報を出力する。例えば出力部100Aは、各種処理による出力情報を出力する。
出力部100Aは、例えば、出力情報を送信する通信機能、出力情報を表示する表示機能、出力情報を示す音を出力する音出力機能、などを備える。例えば、出力部100Aは、通信部100Dと、ディスプレイ100Eと、スピーカ100Fと、を含む。
通信部100Dは、外部装置と通信する。通信部100Dは、VICS(登録商標)通信回路やダイナミックマップ通信回路である。通信部100Dは、出力情報を外部装置へ送信する。また、通信部100Dは、道路情報などを外部装置から受信する。道路情報は、信号、標識、周囲の建物、各車線の道幅、レーン中心線などである。道路情報は、画像処理装置内に設けたRAM、ROMといったメモリ1b内に記憶されても、移動体内に別に設けたメモリ内に記憶してもよい。
ディスプレイ100Eは、出力情報を表示する。ディスプレイ100Eは、例えば、公知のLCD(Liquid Crystal Display)や投影装置やライトなどである。スピーカ100Fは、出力情報を示す音を出力する。
センサ100Bは、移動体100の走行環境を取得するセンサである。走行環境は、例えば、移動体100の観測情報や、移動体100の周辺情報である。センサ100Bは、例えば、外界センサや内界センサである。
内界センサは、観測情報を観測するセンサである。観測情報は、例えば、移動体100の加速度、移動体100の速度、移動体100の角速度を含む。
内界センサは、例えば、慣性計測装置(IMU:Inertial Measurement Unit)、加速度センサ、速度センサ、ロータリエンコーダ、などである。IMUは、移動体100の三軸加速度および三軸角速度を含む観測情報を観測する。
外界センサは、移動体100の周辺情報を観測する。外界センサは、移動体100に搭載されていてもよいし、該移動体100の外部(例えば、他の移動体や外部装置など)に搭載されていてもよい。
周辺情報は、移動体100の周辺の状況を示す情報である。移動体100の周辺とは、該移動体100から予め定めた範囲内の領域である。この範囲は、外界センサの観測可能な範囲である。この範囲は、予め設定すればよい。
周辺情報は、例えば、移動体100の周辺の撮影画像および距離情報などである。なお、周辺情報は、移動体100の位置情報を含んでいてもよい。撮影画像は、撮影によって得られる撮影画像データである(以下、単に、撮影画像と称する場合がある)。距離情報は、移動体100から対象までの距離を示す情報である。対象は、外界における、外界センサによって観測可能な箇所である。位置情報は、相対位置であってもよいし、絶対位置であってもよい。
外界センサは、例えば、撮影によって撮影画像を得る撮影装置、距離センサ(ミリ波レーダ、レーザセンサ、距離画像センサ)、位置センサ(GNSS(Global Navigation Satellite System)、GPS(Global Positioning System)、無線通信装置)などである。
撮影画像は、画素ごとに画素値を規定したデジタル画像データや、画素毎にセンサ100Bからの距離を規定したデプスマップなどである。レーザセンサは、例えば、水平面に対して平行に設置された二次元LIDAR(Laser Imaging Detection and Ranging)センサや、三次元LIDARセンサである。
入力装置100Cは、ユーザからの各種指示や情報入力を受け付ける。入力装置100Cは、例えば、マウスやトラックボール等のポインティングデバイス、または、キーボード等の入力デバイスである。また、入力装置100Cは、ディスプレイ100Eと一体的に設けられたタッチパネルにおける入力機能であってもよい。
動力制御部100Gは、動力部100Hを制御する。動力部100Hは、移動体100に搭載された、駆動するデバイスである。動力部100Hは、例えば、エンジン、モータ、車輪、などである。
動力部100Hは、動力制御部100Gの制御によって駆動する。例えば、動力制御部100Gは、画像処理装置1で生成された出力情報や、センサ100Bから得られた情報などに基づいて、周辺の状況を判断し、アクセル量、ブレーキ量、操舵角などの制御を行う。
次に、移動体100の電気的構成について詳細に説明する。図12は、移動体100の構成の一例を示すブロック図である。
移動体100は、画像処理装置1と、出力部100Aと、センサ100Bと、入力装置100Cと、動力制御部100Gと、動力部100Hと、を備える。出力部100Aは、上述したように、通信部100Dと、ディスプレイ100Eと、スピーカ100Fと、を含む。
画像処理装置1、出力部100A、センサ100B、入力装置100C、および動力制御部100Gは、バス100Iを介して接続されている。動力部100Hは、動力制御部100Gに接続されている。
図13は、移動体100に搭載された画像処理装置1の一例を示すブロック図である。画像処理装置1は、I/F1c、メモリ1b、プロセッサ1aを含む。すなわち、出力部100A、センサ100B、入力装置100C、動力制御部100G、画像処理装置1は、バス100Iを介して接続されている。
なお、出力部100A(通信部100D、ディスプレイ100E、スピーカ100F)、センサ100B、入力装置100C、および動力制御部100G、の少なくとも1つは、有線または無線で画像処理装置1に接続すればよい。また、出力部100A(通信部100D、ディスプレイ100E、スピーカ100F)、センサ100B、入力装置100C、および動力制御部100Gの少なくとも1つと、画像処理装置1と、をネットワークを介して接続してもよい。
I/F1cは、他のシステムとのネットワーク(N/W)等に接続されている。また、I/F1cは、通信部100Dとの間の情報の送受信を司る。I/F1cを介して、人などの認識された対象の情報、認識された対象までの距離の情報が出力される。
メモリ1bは、各種データを記憶する。メモリ1bは、例えば、RAM(Random Access Memory)、フラッシュメモリ等の半導体メモリ素子、ハードディスク、光ディスク等である。なお、メモリ1bは、画像処理装置1の外部に設けてもよい。ROMは、プロセッサ1aによって実行されるプログラムや必要なデータを保持する。RAMは、プロセッサ1aの作業領域として機能する。また、メモリ1bは、移動体100の外部に設けてもよい。例えば、メモリ1bを、クラウド上に設置されたサーバ装置に配置してもよい。
また、メモリ1bは、記憶媒体であってもよい。具体的には、記憶媒体は、プログラムや各種情報を、LAN(Local Area Network)やインターネットなどを介してダウンロードして記憶または一時記憶したものであってもよい。また、メモリ1bを、複数の記憶媒体から構成してもよい。
プロセッサ1aにおける各処理機能は、コンピュータによって実行可能なプログラムの形態でメモリ1bへ記憶されている。プロセッサ1aは、プログラムをメモリ1bから読出、実行することで、各プログラムに対応する機能部を実現するプロセッサである。
なお、各機能の各々を実現するための独立した複数のプロセッサを組み合わせて処理回路1eを構成してもよい。この場合、各プロセッサがプログラムを実行することにより各機能を実現する。また、各処理機能がプログラムとして構成され、1つの処理回路1eが各プログラムを実行する場合であってもよいし、専用回路として画像処理アクセラレータ1dを設け、特定の機能が独立したプログラム実行回路に実装される場合であってもよい。
プロセッサ1aは、メモリ1bに保存されたプログラムを読み出し実行することで機能を実現する。なお、メモリ1bにプログラムを保存する代わりに、プロセッサの回路内にプログラムを直接組み込むよう構成しても構わない。この場合、プロセッサは回路内に組み込まれたプログラムを読み出し実行することで機能を実現する。
このように構成された移動体100において、センサ100Bで観測された周辺情報である撮影画像を用いて視差を算出する場合においても、上述した画像処理方法を用いることで、計算量の増加を抑制しつつ、視差の算出精度を向上させることができる。
(第2の実施形態)
上述の第1の実施形態では、視差のクロスチェックを行う場合において、先の基準画像を用いて算出した視差(視差目安)に基づき、後の基準画像において視差を集中的に探索する範囲を決定していた。これに対し、本実施形態においては、SGM法など画像を複数回スキャンして合成コストSを求めて視差を算出する場合において、先のスキャンによって算出した視差(視差目安)に基づき、後のスキャンにおいて視差を集中的に探索する範囲を決定する点が異なっている。なお、本実施形態における画像処理装置の構成は、図2に示す第1の実施形態の画像処理装置と同様であるので、説明を省略する。
図14は、第2の実施形態に係わる画像処理手順の一例を説明するフローチャートである。図14は、SGM法により画像を2回スキャンしながら視差を出力する際の手順を示している。
まず、制御回路20は、入力画像取得回路14、入力画像補間回路21、視差毎コスト値算出回路15、コスト最適化演算回路16、コスト最小視差抽出回路17の各部に対し、基準画像としてL画像をセットする(S21)。なお、R画像を基準画像とする視差を出力したい場合、S21においてはR画像を基準画像としてセットする。
次に、制御回路20は、入力画像取得回路14、入力画像補間回路21、視差毎コスト値算出回路15、コスト最適化演算回路16、コスト最小視差抽出回路17の各部に対し、右下から左上方向に向かって画素をスキャンするよう、スキャン方向をセットする(S22)。
続いて、入力画像取得回路14、入力画像補間回路21、視差毎コスト値算出回路15、コスト最適化演算回路16、コスト最小視差抽出回路17は、L画像を基準画像とし、参照画像であるR画像の補間画像を右下から左上方向に向かってスキャンしながら視差を算出し、所定の小領域ごとに視差の分布統計を取得する(S23)。なお、入力画像補間回路21は、画像の拡張処理を行わず、入力画像である参照画像をそのまま補間画像として出力するので、コスト算出対象となる補間画像はR画像そのものとなる。
この時、コスト最適化演算回路16は、右下から左上方向に向かって画素をスキャンしながら算出可能な経路についてのみ、コストを算出する。すなわち、水平右方向、垂直下方向、右下45度方向、左下45度方向から集約する4方向のベクトルに沿った4つの経路のコストを算出し、これら4つの経路のコストを用いて合成コスト値Sを算出する。
そして、基準画像の全画素について、合成コスト値Sが最小となる視差が抽出され、クロスチェックバッファ18に格納されるとともに、視差出力回路19に出力される。視差出力回路19は、基準画像の全画素についての視差を、視差目安として集中視差範囲決定回路23に出力する。集中視差範囲決定回路23は、基準画像を所定のロジックに基づき小領域に分割する。そして、小領域ごとに、当該領域に含まれる画素の視差目安の分布統計を取得する。
続いて、集中視差範囲決定回路23は、S23で取得した視差目安の分布統計に基づき、小領域ごとに、集中的に探索を行う視差集中探索画素位置(中央視差値)を決定する(S24)。そして、制御回路20は、入力画像取得回路14、入力画像補間回路21、視差毎コスト値算出回路15、コスト最適化演算回路16、コスト最小視差抽出回路17の各部に対し、左上から右下方向に向かって画素をスキャンするよう、スキャン方向をセットする(S25)。
入力画像取得回路14、入力画像補間回路21、視差毎コスト値算出回路15、コスト最適化演算回路16、コスト最小視差抽出回路17は、補間画像を左上から右下方向に向かってスキャンしながら、各画素の視差を算出する(S26)。S26は、具体的には以下のように実行される。
まず、入力画像補間回路21は、入力画像取得回路14から入力される参照画像(R画像)に対し、集中視差範囲決定回路23からの指示に従い補間画像を生成する。視差集中探索画素位置は視差計算対象画素によって異なるため、視差計算対象画素が次の画素にセットされる都度、当該視差計算対象画素に応じた指示を集中視差範囲決定回路23から受けて、補間画像を生成する。
次に、視差毎コスト値算出回路15は、補間画像において、視差計算対象画素におけるコスト値算出画素領域を設定し、当該領域におけるコスト値を算出する。続いて、コスト最適化演算回路16において合成コスト値Sを算出する。この時、コスト最適化演算回路16は、左上から右下方向に向かって画素をスキャンしながら算出可能な経路についてのみ、コストを算出する。すなわち、水平左方向、垂直上方向、右上45度方向、左上45度方向から集約する4方向のベクトルに沿った4つの経路のコストを算出し、これら4つの経路のコストを用いて合成コスト値Sを算出する。そして、コスト最小視差抽出回路17において、合成コスト値Sが最小となる視差が抽出される。
最後に、S26において算出された視差を、S24において視差刻み情報メモリ24に格納されているデータ(補正画像における画素位置と、参照画像における画素位置との対応関係のデータ)を用いて補正し、基準画像における視差に変換して出力し(S27)、視差算出処理を終了する。
このように、本実施形態によれば、SGM法など画像を複数回スキャンして合成コストSを求めて視差を算出する場合において、先のスキャンにより算出した視差(視差目安)に基づき、後のスキャンにおいて視差を算出する際に、視差を集中的に探索する範囲を決定する。従って、処理回路や演算を追加することなく視差目安を取得することができる。後のスキャンにおいて視差を算出する際に、視差目安近傍の画素を細かく抽出し、視差目安から遠くの画素を離散的に抽出してコスト演算を行うことで、計算量の増加を抑制しつつ、視差の算出精度を向上させることができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、一例として示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると共に、特許請求の範囲に記載された発明とその均等の範囲に含まれる。