(57)【要約】【課題】視差の算出に必要な計算負荷を軽減させつつ、視差の算出精度を向上させる。【解決手段】画像処理装置１０２は、互いに異なる複数の視点からの撮像により生成された撮像画像データから取得可能な視差画像データに含まれる第１の視差を算出する。該装置は、撮像画像データに対して縮小処理を行うことにより縮小画像データを生成し、縮小画像データに含まれる第２の視差を算出する。該装置は、第２の視差と縮小処理における撮像画像データに対する縮小画素データの縮小率とを用いて撮像画像データから視差画像データを取得する。そして、互いに異なる視差に対応する複数の参照パターンデータを用いて視差画像データを表すために該複数の参照パターンデータのそれぞれに重みを付ける複数の第１の係数を算出し、複数の参照パターンデータのそれぞれに対応する視差と複数の第１の係数とを用いて視差画像データに含まれる第１の視差を算出する。【選択図】図２
2018133064.tif 000002
【特許請求の範囲】
【請求項１】
互いに異なる複数の視点からの撮像により生成された撮像画像データから取得可能な視差画像データに含まれる第１の視差を算出する画像処理装置であって、
前記撮像画像データに対して縮小処理を行うことにより縮小画像データを生成する縮小手段と、
前記縮小画像データに含まれる第２の視差を算出し、該第２の視差と前記縮小処理における前記撮像画像データに対する前記縮小画像データの縮小率とを用いて前記撮像画像データから前記視差画像データを取得する取得手段と、
互いに異なる視差に対応する複数の参照パターンデータを用いて前記視差画像データを表すために該複数の参照パターンデータのそれぞれに重みを付ける複数の第１の係数を算出し、前記複数の参照パターンデータのそれぞれに対応する視差と前記複数の第１の係数とを用いて前記視差画像データに含まれる前記第１の視差を算出する算出手段とを有することを特徴とする画像処理装置。
【請求項２】
前記取得手段は、前記第２の視差と前記縮小率とを用いて、前記撮像画像データのうち前記視差画像データを取得する領域を設定することを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記縮小手段は、前記撮像画像データに対する前記縮小率が互い異なる複数の前記視差画像データを生成し、
前記取得手段は、前記複数の視差画像データのうち前記縮小率がより大きい視差画像データにおいて取得した前記視差画像データを用いて前記縮小率がより小さい視差画像データの視差を順次算出し、前記縮小率が最も小さい前記視差画像データから取得した前記第２の視差と該最も小さい縮小率とを用いて前記撮像画像データから前記視差画像データを取得することを特徴とする請求項１または２に記載の画像処理装置。
【請求項４】
前記縮小手段は、前記縮小率を、前記第１の視差の想定範囲に基づいて設定することを特徴とする請求項１から３のいずれか一項に記載の画像処理装置。
【請求項５】
前記想定範囲における前記第１の視差の最大想定値と最小想定値をそれぞれｄｅ，ｍａｘとｄｅ，ｍｉｎとし、前記複数の参照パターンデータのそれぞれに対応する視差の最大値と最小値をそれぞれｄｍａｘとｄｍｉｎとするとき、前記縮小率Ｍが、
【数１】
2018133064.tif 000013
なる条件を満足することを特徴とする請求項４に記載の画像処理装置。
【請求項６】
前記縮小手段は、前記想定範囲または前記最大および最小想定値は、前記撮像を行った撮像装置の構成に応じて設定することを特徴とする請求項５に記載の画像処理装置。
【請求項７】
前記撮像装置の構成は、前記複数の視点の数、撮像素子の画素ピッチ、撮像光学系の焦点距離、前記複数の視点の配置、Ｆ値およびフォーカス位置のうち少なくとも１つを含むことを特徴とすることを特徴とする請求項６に記載の画像処理装置。
【請求項８】
前記縮小手段は、前記参照パターンデータを用いて前記縮小画像データを表すために該複数の参照パターンデータのそれぞれに重みを付ける複数の第２の係数を算出し、前記複数の参照パターンデータのそれぞれに対応する視差と前記複数の第２の係数とを用いて前記第２の視差を算出することを特徴とする請求項１から７のいずれか一項に記載の画像処理装置。
【請求項９】
互いに異なる複数の視点からの撮像を行う撮像部と、
請求項１から８のいずれか一項に記載の画像処理装置とを有することを特徴とする撮像装置。
【請求項１０】
互いに異なる複数の視点からの撮像により生成された撮像画像データから取得可能な視差画像データに含まれる視差を算出する画像処理方法であって、
前記撮像画像データに対して縮小処理を行うことにより縮小画像データを生成するステップと、
前記縮小画像データに含まれる第２の視差を算出し、該第２の視差と前記縮小処理における前記撮像画像データに対する前記縮小画像データの縮小率とを用いて前記撮像画像データから前記視差画像データを取得するステップと、
互いに異なる視差に対応する複数の参照パターンデータを用いて前記視差画像データを表すために該複数の参照パターンデータのそれぞれに重みを付ける複数の第１の係数を算出し、前記複数の参照パターンデータのそれぞれに対応する視差と前記複数の第１の係数とを用いて前記視差画像データに含まれる前記第１の視差を算出するステップとを有することを特徴とする画像処理方法。
【請求項１１】
コンピュータに、互いに異なる複数の視点からの撮像により生成された撮像画像データから取得可能な視差画像データに含まれる視差を算出する画像処理を実行させるコンピュータプログラムであって、
前記コンピュータに、
前記撮像画像データに対して縮小処理を行わせて縮小画像データを生成させ、
前記縮小画像データに含まれる第２の視差を算出させ、
該第２の視差と前記縮小処理における前記撮像画像データに対する前記縮小画像データの縮小率とを用いて前記撮像画像データから前記視差画像データを取得させ、
互いに異なる視差に対応する複数の参照パターンデータを用いて前記視差画像データを表すために該複数の参照パターンデータのそれぞれに重みを付ける複数の第１の係数を算出させ、
前記複数の参照パターンデータのそれぞれに対応する視差と前記複数の第１の係数とを用いて前記視差画像データに含まれる前記第１の視差を算出させることを特徴とする画像処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、被写体空間を異なる視点から撮像することで得られた画像データから視差の情報を取得する画像処理技術に関する。
【背景技術】
【０００２】
被写体空間を複数の視点から撮像することで得られた複数の視点画像から視差の情報を取得する方法が種々提案されている。例えば、複数の視点画像間においてブロックマッチング等の画像探索処理によって互いに対応する対応点を検出し、それぞれの視点画像における対応点の位置（座標）の相違量から視差量を求める方法がある。求められた視差量は、被写体までの距離の算出等に利用される。
【０００３】
また、特許文献１には、互いに異なる２視点からの撮像により得られた２つの視点画像間で同サイズの領域同士の相対的な位置を変えながら該領域間でブロックマッチングを行い、最も類似性が高い領域同士を対応領域として検出する方法が開示されている。そして、対応領域内での位置差をそれらの対応領域間の視差として得る。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許２９６６２４８号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、ブロックマッチング等の画像探索処理は計算負荷が大きい。この点、特許文献１にて開示された方法では、撮像視差画像を低解像度の画像に縮小して低解像画像に対して視差を求めることで、探索する領域のサイズを制限し、計算負荷を低減させているが、画像探索処理が必要であるために負荷軽減には限界がある。
【０００６】
本発明は、画像探索処理を行うことなく視差の算出に必要な計算負荷を軽減することができるようにした画像処理装置等を提供する。
【課題を解決するための手段】
【０００７】
本発明の一側面としての画像処理装置は、互いに異なる複数の視点からの撮像により生成された撮像画像データから取得可能な視差画像データに含まれる第１の視差を算出する。該画像処理装置は、撮像画像データに対して縮小処理を行うことにより縮小画像データを生成する縮小手段と、縮小画像データに含まれる第２の視差を算出し、該第２の視差と縮小処理における撮像画像データに対する縮小画像データの縮小率とを用いて、撮像画像データから視差画像データを取得する取得手段と、互いに異なる視差に対応する複数の参照パターンデータを用いて視差画像データを表すために該複数の参照パターンデータのそれぞれに重みを付ける複数の第１の係数を算出し、複数の参照パターンデータのそれぞれに対応する視差と数の第１の係数とを用いて視差画像データに含まれる第１の視差を算出する算出手段とを有することを特徴とする。
【０００８】
なお、上記画像処理装置を含む撮像装置も、本発明の他の一側面を構成する。
【０００９】
また、本発明の他の一側面としての画像処理方法は、互いに異なる複数の視点からの撮像により生成された撮像画像データから取得可能な視差画像データに含まれる視差を算出する。該画像処理方法は、撮像画像データに対して縮小処理を行うことにより縮小画像データを生成するステップと、縮小画像データに含まれる第２の視差を算出し、該第２の視差と縮小処理における撮像画像データに対する縮小画像データの縮小率とを用いて、撮像画像データから視差画像データを取得するステップと、互いに異なる視差に対応する複数の参照パターンデータを用いて視差画像データを表すために該複数の参照パターンデータのそれぞれに重みを付ける複数の第１の係数を算出し、複数の参照パターンデータのそれぞれに対応する視差と複数の第１の係数とを用いて視差画像データに含まれる第１の視差を算出するステップとを有することを特徴とする。
【００１０】
なお、コンピュータを上記画像処理装置として動作させるコンピュータプログラムとしての画像処理プログラムも、本発明の他の一側面を構成する。
【発明の効果】
【００１１】
本発明によれば、計算負荷を軽減しつつ視差画像データに含まれる視差を高精度に算出することができる。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施例１，２における視差算出の概略を示す図。
【図２】実施例１における撮像装置の構成を示すブロック図。
【図３】実施例１における撮像部の構成を示す図。
【図４】実施例１における視差算出処理を示すフローチャート。
【図５】実施例１，２における参照パターンの機械学習処理を示すフローチャート。
【図６】実施例１，２における参照視差群の算出処理を示すフローチャート。
【図７】実施例２における画像処理システムの構成を示すブロック図。
【図８】実施例２における視差算出処理を示すフローチャート。
【発明を実施するための形態】
【００１３】
以下、本発明の実施例について図面を参照しながら説明する。まず、実施例の具体的な説明の前に、典型的な実施例の概要について図１を用いて説明する。
【００１４】
典型的な実施例では、被写体空間を複数の視点から撮像することで生成された撮像画像データから一組の入力画像ｉ（ｉ１，ｉ２，…）を取得する。ここで、一組の入力画像とは、撮像画像データにおいて同一被写体に対する視差の算出を行う一組の部分領域であり、視差の情報を含む視差画像データである。撮像画像データは、被写体空間を複数の視点から撮像することで取得可能な１まとまり又は複数組の画像データであるが、以下の説明では一組の画像データとしての一組の撮像画像という。一組の入力画像は、一組の撮像画像のうち互いに同一位置の部分領域の画像データとして取得される。
【００１５】
ただし、上記のように取得された一組の入力画像データから同一被写体の視差を算出する場合に、入力画像のサイズに対して視差が大きくてそれぞれの入力画像に同一被写体が含まれないと、視差を算出することができない。これに対して、それぞれの入力画像に同一被写体が含まれるように入力画像のサイズを大きくすることもできるが、視差を算出するために処理するデータ量が増えて計算負荷が増大する。
【００１６】
そこで、実施例では、最終的に一組の入力画像から算出したい視差（第１の視差）の想定範囲（以下、想定視差範囲という）に基づいて、一組の撮像画像を縮小して一組の縮小画像データ（以下、単に一組の縮小画像という）を生成する。言い換えれば、一組の撮像画像の解像度を低下させて一組の低解像度画像を生成する。この際の撮像画像に対する縮小画像の縮小率は、上記想定視差範囲に基づいて、一組の縮小画像のうち互いに同一位置の部分領域である仮の一組の入力画像に同一被写体が含まれるように設定する。
【００１７】
そして、仮の一組の入力画像における視差（第２の視差）を概算し、この概算視差を用いて一組の撮像画像のうち本来の一組の入力画像を取得する位置を設定する。これにより、一組の入力画像内に同一被写体が含まれるようになり、入力画像のサイズより大きい視差（第１の視差）を高精度に求めることができる。なお、想定視差範囲は、例えば撮像を行って撮像画像を生成した撮像装置の構成に基づいて設定される。
【００１８】
また、実施例では、事前に互いに異なる複数の既知の視差に対応する複数の参照パターンデータを用意する。参照パターンデータは、ある視差を有する画像間に表れる相違を表す一組の基本的なパターンである一組の参照パターンを示すデータである。以下の説明において、参照パターンデータに対応する視差を参照視差ともいい、複数の参照パターンデータのそれぞれに対応する複数の視差をまとめて参照視差群ともいう。
【００１９】
一組の入力画像は、複数の参照パターンデータを用いて表すことができる。実施例では、一組の入力画像を複数の参照パターンデータの組合せにより表すために、それぞれの参照パターンデータに重みを付けるための複数の係数α１，α２，…（以下、まとめて係数群αともいう）を算出する。一組の入力画像は、複数の参照パターンデータに係数群α（α１，α２，…）を乗じて加算する（重み付け平均する）ことで表すことができる。実施例では、このことを利用して、算出した係数群αと複数の参照パターンデータに対応する参照視差群ｄ（ｄ１，ｄ２，…）とを用いて一組の入力画像の視差を算出する。この際、一組の入力画像を入力とする関数を用いるが、この関数の例については具体的な実施例にて説明する。
【００２０】
このような実施例においては、後述する行列演算によって係数群を算出すればよい。このため、ブロックマッチング等の画像探索処理が必要なくなり、視差算出における計算負荷が低減される。
【００２１】
さらに、複数の参照パターンデータに対応する参照視差群は、一組の入力画像における視差を算出する前に既知の情報として取得しておく。これにより、参照パターンデータに対応する参照視差群と係数群とを用いた単純な演算によって一組の入力画像の視差を算出することができる。すなわち、視差算出のための計算負荷を低減することができる。
【実施例１】
【００２２】
本発明の具体的な実施例１である撮像装置１００の構成について図２を用いて説明する。撮像部１０１は、被写体空間を互いに異なる複数の視点から撮像することにより撮像画像データとしての一組（例えば一対）の撮像画像を生成する。撮像部１０１の詳しい構成については後述する。
【００２３】
画像処理装置としての画像処理部１０２は、一組の撮像画像から取得する一組の入力画像の視差を算出する。画像処理部１０２は、学習部１０２ａと視差画像取得部１０２ｂと視差算出部１０２ｃとを有する。学習部１０２ａは、複数の参照パターンデータを機械学習によって生成（算出）し、生成した複数の参照パターンデータをこれらのそれぞれに対応する参照視差と関連付けて記憶部（記憶手段）１０３に記憶させる。学習部１０２ａは生成手段として機能する。
【００２４】
視差画像取得部１０２ｂは、一組の撮像画像に対して縮小処理を行って一組の縮小画像を生成し、該一組の縮小画像間の視差（第２の視差）を求め、該視差に基づいて、一組の撮像画像から一組の視差画像を一組の入力画像として取得する。視差画像の取得処理についての詳細は後述する。視差画像取得部１０２ｂは、縮小手段および取得手段として機能する。
【００２５】
視差算出部１０２ｃは、記憶部１０３から読み出された参照パターンデータを用いて一組の入力画像の視差を算出する。視差算出部１０２ｃは、算出手段として機能する。画像処理部１０２が行う機械学習や視差算出処理についての詳細は後述する。
【００２６】
なお、視差算出部１０２ｃは、記憶媒体１０５に保存された撮像画像について、ユーザにより指定されたタイミングで視差を算出してもよい。また、撮像画像は静止画に限らず動画でもよい。この場合、一組の動画のそれぞれを構成する同タイミングのフレーム画像間の視差が算出される。
【００２７】
システムコントローラ１０６は、撮像部１０１および画像処理部１０２の動作を制御する。また、システムコントローラ１０６は、撮像画像を液晶ディスプレイ等の表示部１０４に表示したり記録媒体１０５に保存したりする。
【００２８】
次に、撮像部１０１の構成について図３（ａ），（ｂ）を用いて説明する。図３（ａ），（ｂ）では代表的な撮像部１０１の構成を示しているが、撮像部としては被写体空間を互いに異なる複数の視点から撮像することで互いに異なる視差を含む撮像画像データ（１まとまり又は複数の撮像画像）を得ることができる構成を有すればよい。
【００２９】
図３（ａ）には、撮像レンズ（撮像光学系）２０１と撮像素子２０２とにより構成される第１のカメラユニットと、撮像レンズ２０３と撮像素子２０４とにより構成される第２のカメラユニットの２つのカメラユニットを有する撮像部１０１を示している。なお、撮像部１０１に設けられるカメラユニットは２つである必要はなく、３つ以上の複数のカメラユニットを含んでいてもよい。また、各撮像レンズは１つのレンズ素子により構成されてもよいし、複数のレンズ素子により構成されてもよい。このような構成の撮像部１０１を有する撮像装置は、多眼カメラ、カメラアレイまたはステレオカメラ等と称される。
【００３０】
複数のカメラユニットが同時に被写体空間における被写体面２００を撮像することで撮像画像データが生成される。複数のカメラユニットは互いに異なる視点に配置されているため、被写体面２００を互いに異なる複数の視点に対応する撮像画像データを取得することができる。また、複数のカメラユニットの配置方向と平行な直線被写体に対しては視差が付かないので、３つ以上のカメラユニットについては同一直線上に並ばないように配置する方が、後述する視差算出（推定）に対するロバスト性の観点から有利である。
【００３１】
また、図３（ｂ）には、撮像レンズ２１１と撮像素子２１３との間にマイクロレンズアレイ２１２が配置された撮像部１０１を示している。このような撮像部１０１を有する撮像装置は、プレノプティックカメラと称される。マイクロレンズアレイ２１２は、複数の微小な凸レンズを２次元アレイ状に配置することで構成される。撮像レンズ２１１は１つのレンズ素子により構成されてもよいし、複数のレンズ素子により構成されてもよい。
【００３２】
被写体面２００の同一点から発せられて撮像レンズ２１１に入射した光束２１４，２１５は、マイクロレンズアレイ２１２のうち同一の凸レンズを通過して撮像素子２１３における互いに異なる画素（受光素子）２１６，２１７に到達する。このようなプレノプティックカメラは、マイクロレンズアレイ２１２の作用によって撮像レンズ２１１の射出瞳のうち互いに異なる瞳領域を通過した光束を弁別することができる。
【００３３】
具体的には、撮像レンズ２１１の射出瞳のうち上半分（平面視における右半分）の瞳領域を通過した光束２１４は撮像素子２１３の画素２１７等のＲ画素に入射する。また、射出瞳の下半分（平面視における左半分）の領域を通過した光束２１５は撮像素子２１３の画素２１６等のＬ画素に入射する。このように、撮像レンズ２１１の射出瞳のうち互いに異なる瞳領域を通過した光束が撮像素子２１３における互いに異なる画素に入射するため、これら光束を弁別することができる。
【００３４】
そして、撮像素子２１３における複数のＲ画素の信号を抜き出して再配置することで、撮像レンズ２１１の右瞳領域を視点とするＲ撮像画像を生成することができる。また、複数のＬ画素の信号を抜き出して再配置することで、撮像レンズ２１１の左瞳領域を視点とするＬ撮像画像を生成することができる。
【００３５】
なお、図３（ｂ）ではマイクロレンズアレイ２１２の１つの凸レンズに対して２つの画素が配置される撮像素子２１３を示しているが、３つ以上の画素が配置されてもよく、１つの凸レンズに対する画素数に応じた視点数の画像を生成することができる。
【００３６】
次に、画像処理部１０２が行う視差算出処理について、図４のフローチャートを用いて説明する。画像処理コンピュータにより構成される画像処理部１０２のうち視差算出部１０２ｃがコンピュータプログラムである画像処理プログラムに従って本処理を実行する。
【００３７】
ステップＳ１０１では、視差算出部１０２ｃは、事前に用意されて記憶部１０３に記憶された複数の参照パターンデータとこれらに対応する参照視差群とを取得する。参照パターンデータの生成方法（学習方法）および参照視差群の算出方法については後に詳しく説明する。
【００３８】
ステップＳ１０２では、視差算出部１０２ｃは、視差画像取得部１０２ｂが取得した一組の視差画像を入力画像として取得する。入力画像の取得処理については後に図６を用いて詳しく説明する。
【００３９】
視差画像がＲＧＢ（Red, Green, Blue）等の複数の色成分で表されている場合には、これら複数の色成分を１つの色成分に変換することにより入力画像を取得（生成）する。例えば、全ての色成分を平均化することでグレースケールの色成分の入力画像を生成したり任意の変換式を用いて１つの色成分に変換することで入力画像を生成したりする。また、複数の色成分のうち代表的な１つの色成分を入力画像として取得してもよい。また、複数の色成分を全て入力画像として取得してもよい。この場合、色成分ごとに視差を算出してその平均値を入力画像の視差としてもよい。
【００４０】
さらに、１つの色成分は、それをそのまま入力画像として取得してもよいし、微分フィルタを用いて輝度変化を表す入力画像に変換してもよい。複数の色成分を、それらの平均値を差し引いた上でコントラストを揃えて入力画像として取得してもよい。これらの入力画像取得処理を行うことにより、撮像画像の明暗や撮像部１０１でのヴィネッティングの影響を低減し、より正確に視差の算出を行うことが可能な入力画像を取得することができる。なお、微分フィルタを用いる場合は、後述する学習画像に対しても同様の処理を行うことが望ましい。
【００４１】
ステップＳ１０３では、視差算出部１０２ｃは、一組の入力画像と複数の参照パターンデータとを用いて係数群を算出する。具体的には、視差算出部１０２ｃは、複数の参照パターンデータに乗じることで一組の入力画像を表すことができる係数群を算出可能な任意の関数に該入力画像を代入することで係数群を算出する。関数の計算量によって入力画像の視差算出における計算負荷が大きく左右されるため、できるだけ計算量を少なくすることができる関数を用いることが望ましい。なお、入力画像は、計算負荷を軽減する観点から、複数の参照パターンデータの組合せで表されることが望ましい。入力画像を表す参照パターンデータの数が１つであると、入力画像を正確に表すためにはその参照パターンデータに非常に多くの参照パターンのデータを含める必要があり、計算負荷が増大するためである。
【００４２】
本実施例では、上記関数として、参照パターンデータに基づいた行列演算を用いる。一組の入力画像を列ベクトルｉとし、参照パターンデータを列ベクトルとしたときに複数の参照パターンデータのそれぞれを列成分として持つ（つまりは配列した）行列を変換行列Ｄとし、係数群を列ベクトルαで表す。この場合、以下の式（１）のように変換行列Ｄの一般化逆行列Ｄ−１に列ベクトルｉを乗じることで列ベクトルαが求められる。
【００４３】
【数１】
2018133064.tif 000003
【００４４】
変換行列Ｄが正則行列である場合は、一般化逆行列Ｄ−１は行列Ｄの逆行列を指す。なお、図１に示すように、各参照パターンは入力画像間の視差を表すだけでなく明暗や構造も表すため、参照パターンには視点間で同一のパターン等、視差を表さないものも含まれる。視差算出において視差を表さない参照パターンは必要ないため、変換行列Ｄの一般化逆行列Ｄ−１から視差を表さない参照パターンを除いて以後の処理に用いてもよいし、そのまま用いてもよい。
【００４５】
ステップＳ１０４では、視差算出部１０２ｃは、ステップＳ１０３で求めた係数群と複数の参照パターンデータに対応する参照視差群とを用いて一組の入力画像の視差（第１の視差）を算出（推定）する。参照視差群を行ベクトルｄとし、任意の１つの視点を基準とした一組の入力画像間の視差をスカラー量ｐとすると、ｐは以下の式（２）に示すようにｄの各要素（ｄｉ）とαの各要素（αｉ）と符号調整項ｊとの積の総和で求められる。
【００４６】
【数２】
2018133064.tif 000004
【００４７】
参照パターンの濃淡反転等を表現するために、係数群αは正と負の両方の値を取り得る。しかし、係数の符号の違いは視差が発生する方向には関係なく、一組の入力画像の視差の算出においては該係数の大きさのみが用いられる。したがって、係数が負の場合は、係数あるいは対応する参照視差のどちらか一方の符号を反転させることによって、係数と参照視差との積の符号を、常に参照視差の符号と一致させる必要がある。本実施例では、符号を反転させる方法として符号調整項ｊを用いて係数と同じ符号の値を乗じる手法を用いているが、αの絶対値をとる手法を用いてもよい。これにより、入力画像の色や明暗の違いによる影響を低減し、視差の算出精度を向上させることができる。
【００４８】
次に、参照パターンデータの生成方法（生成処理）について図５のフローチャートを用いて説明する。本実施例では、参照パターンデータを機械学習によって生成（算出）する。機械学習は、視差算出の前であれば、撮像装置１００の学習部１０２ａで行ってもよいし、撮像装置１００とは別の演算装置で行ってもよい。本実施例では、学習部１０２ａで機械学習を行う場合について説明する。
【００４９】
ステップＳ２０１では、学習部１０２ａは、複数の視点から被写体を撮像することにより生成された一組の撮像画像の少なくとも一部から、該複数の視点のうち一組の視点から撮像された同一被写体位置の画像の組を複数の被写体位置について抽出する。そして、このように抽出した視点ごとの複数の被写体位置の画像の集合を１つの学習画像とし、一組の視点に対応する学習画像の組を学習画像データとしての一組の学習画像とする。なお、学習画像の元となる上記撮像画像は、被写体の撮像をコンピュータでシミュレーションして生成された画像であってもよい。
【００５０】
１つの学習画像を構成する前記撮像画像から抽出された画像のサイズは、入力画像と同じサイズの画像であってもよいし、入力画像とは異なるサイズの学習画像を入力画像のサイズに合わせて拡大または縮小して用いてもよい。一般に、撮像装置の構成に応じて撮像画像にて発生する視差が異なるため、参照パターンデータは撮像装置の構成に基づいて設定された視差を有する学習画像から生成することが望ましい。ここにいう撮像装置１００の構成とは、視点数、撮像素子の画素ピッチ、撮像光学系の焦点距離、複数の視点（カメラユニット）の基線長、基線方向および輻輳角、プレノプティックカメラのＦ値やフォーカス位置等である。すなわち、撮像装置１００の構成は、撮像装置により生成された一組の撮像画像間に発生する視差に影響する様々な要素を含む。言い換えれば、撮像装置１００の構成とは、一組の撮像画像間に発生する視差に関する撮像条件である。これにより、学習画像から生成される参照パターンデータと一組の入力画像に含まれる視差とを同等にすることができ、発生しない視差ずれ量を参照パターンデータから排除することができるので、入力画像の視差算出における精度や計算速度が向上する。学習部１０２ａは、視点の組が互いに異なる複数組の学習画像を生成する。
【００５１】
ステップＳ２０２では、学習部１０２ａは、ステップＳ２０１で生成した複数組の学習画像（複数の学習画像データ）を用いた機械学習により複数の参照パターンデータを生成する。参照パターンデータを求めるために、以下の式（３）に示すように、学習画像を変換行列Ｄと係数行列Ａとの積で表したときの誤差を最小にする変換行列Ｄを最適化によって求める。
【００５２】
【数３】
2018133064.tif 000005
【００５３】
係数行列Ａは、一組の学習画像に対応する係数群を列ベクトルとしたときに複数組の学習画像のそれぞれの係数群を複数の列成分として持つ行列を表す。また、Ｌは一組の学習画像を列ベクトルとしたときに複数組の学習画像のそれぞれを複数の列成分として持つ行列を表す。
2018133064.tif 000006
【００５４】
はフロベニウスノルムを、
2018133064.tif 000007
【００５５】
はＬ０ノルムを、ｋは任意の定数を表す。変換行列Ｄや行列Ａの初期値は任意の値でよく、例えば乱数から決定するとよい。行列ＡのＬ０ノルムでの最適化に制約を課すことで、少ない参照パターンデータの組合せで行列Ｌを表すことができる。これについて、例えば以下の参考文献１に詳しい。
［参考文献１］K. Marwah, et al., “Compressive Light Field Photography using Overcomplete Dictionaries and Optimized Projections.” Proc. of SIGGRAPH 2013 (ACM Transactions on Graphics 32, 4), 2013.
変換行列Ｄの各列成分としての列ベクトルは一組の参照パターンを表しているので、変換行列Ｄから該一組の参照パターンを示すデータである参照パターンデータを求めることができる。
【００５６】
ステップＳ２０３では、学習部１０２ａは参照パターンデータに対応する視差を求める。視差を求める方法としては、任意の方法を用いることができる。例えば、ブロックマッチングを用いて視差を求める方法でもよいし、視差の分布（視差マップ）が既知である視差画像を用いて参照視差群を算出する方法でもよい。
【００５７】
ここでは、視差マップが既知である視差画像を用いて参照視差群を算出する方法について説明する。学習部１０２ａは、変換行列Ｄを用いて、視差算出部１０２ｃに代わって図４のステップＳ１０１からステップＳ１０３までの処理を行うことで係数群を求める。ここではステップＳ１０２において視差マップが既知である複数の視差画像を入力画像として用いる。これによって、複数の係数群が得られ、１つの係数群を列ベクトルとしたときに、各列に係数群のベクトルを持つ行列を行列Ｂとして生成する。
【００５８】
次に、学習部１０２ａは、式（４）に示すように、求めたい参照視差群を表す参照視差ベクトルｄと行列Ｂとの積が視差マップを行ベクトルで表したときの正解視差ベクトルＲを正確に表すように最適化を行う。
【００５９】
【数４】
2018133064.tif 000008
【００６０】
2018133064.tif 000009
【００６１】
はＬ２ノルムを表す。以上の処理では、用いる画像内で比較して視差を算出するため、画像サイズよりも大きい視差を求めることは難しい。このため、参照視差ベクトルｄの各要素に対して画像サイズを上限値とする制限を加えて最適化を行った方が、参照視差ベクトルｄの算出精度の面で有利である。
【００６２】
次に、上述したステップS102において実行される入力画像の取得処理について図６のフローチャートを用いて説明する。本実施例では、撮像部１０１が生成した一組の撮像画像から視差画像を取得する。画像処理コンピュータにより構成される画像処理部１０２のうち視差画像取得部１０２ｂが上記画像処理プログラムに従って本処理を実行する。
【００６３】
ステップＳ３０１では、視差画像取得部１０２ｂは、一組の撮像画像のそれぞれに対して同じ縮小率Ｍで縮小処理を行うことにより一組の縮小画像を生成する。縮小率Ｍは、想定視差範囲が入力画像のサイズ内に収まるように設定されることが望ましい。視差画像取得部１０２ｂは、想定視差範囲を撮像装置１００の構成や想定される被写体までの距離に基づいて設定する。
【００６４】
ステップＳ３０２では、視差画像取得部１０２ｂは、一組の縮小画像間の視差（第２の視差）を算出する。本ステップにおいて視差を求める方法としては、任意の方法を用いることができる。例えば、前述したブロックマッチング法を用いてもよいし、グラフカット法、セミグローバルマッチング法、動的計画法、などの従来の各種手法を用いてもよい。
【００６５】
ステップＳ３０３では、視差画像取得部１０２ｂは、一組の撮像画像のそれぞれから入力画像を取得する、つまりは視差を算出する部分領域である視差算出領域を設定する。具体的には、図１に示すように、一組の撮像画像において互いに同一位置にある部分領域を基準領域Ａとする。一組の撮像画像のうち一方の撮像画像の基準領域Ａには被写体ＯＢＪが含まれ、他方の撮像画像における基準領域Ａには上記一方の撮像画像に含まれる同一被写体としての被写体ＯＢＪが含まれていない。この場合に、視差画像取得部１０２ｂは、他方の撮像画像において被写体ＯＢＪを含む部分領域Ｂと基準領域Ａとの位置差をシフト量として求める。視差画像取得部１０２ｂは、このときのシフト量を、縮小処理における撮像画像に対する縮小画像の縮小率Ｍと一組の縮小画像間で算出された視差との積により算出する。
【００６６】
ステップＳ３０４では、視差画像取得部１０２ｂは、一方の撮像画像における基準領域Ａを視差算出領域に設定し、他方の撮像画像において基準領域ＡからステップＳ３０３で算出したシフト量だけ位置が異なる部分領域Ｂを視差算出領域に設定する。そして、これら一方および他方の撮像画像のそれぞれの視差算出領域から一組の入力画像を取得する。なお、他方の撮像画像の視差算出領域を設定する際に、該撮像画像に対して基準領域Ａを部分領域Ｂの位置にシフトさせる処理を行ってもよいし、部分領域Ｂが基準領域Ａの位置にシフトするように撮像画像を基準領域Ａに対してシフトさせてもよい。
【００６７】
本実施例では、計算負荷が大きくなり易い複数の参照パターンデータに対応する視差の算出を入力画像の視差算出の前に行い、該入力画像に対しては複数の参照パターンに対応する参照視差群と係数群とを用いた単純な演算により視差を算出する。また、入力画像の取得前に撮像画像を縮小して得られた縮小画像を用いて視差を概算し、その概算視差を用いて撮像画像から入力画像を取得する。これにより、入力画像の視差算出における計算負荷を軽減しながら、大きな視差を高精度に算出することができる。
【００６８】
算出された入力画像の視差は、撮像装置の構成（基線長等）に基づいて距離に変換することができる。そして、求めた距離の情報は、深度が深い撮像画像に対して距離に応じたぼけを付加する処理や撮像時のオートフォーカス等に利用することができる。また、撮像装置１００を車載カメラとして構成し、距離情報や撮像画像から周囲の障害物を認識して自走する自動運転や衝突を回避するための運転補助（ブレーキ制御等）に利用することもできる。
【００６９】
また、本実施例では撮像装置１００に学習部１０２ａを設ける場合について説明したが、予め学習した結果を記憶部１０３に記憶させておくことで、撮像装置１００に学習部１０２ａを設けなくてもよい。
【実施例２】
【００７０】
次に、本発明の実施例２である画像処理システムについて図７を用いて説明する。本実施例では、入力画像の視差算出を行う画像処理装置３０１と、撮像画像データを生成する撮像装置３００と、機械学習を行うサーバー３０５とが個別に存在している。画像処理装置３０１には、多眼カメラやプレノプティックカメラ等の様々な撮像装置３００を接続することができ、接続された撮像装置３００の構成に応じて使用する変換行列を切り替える。本実施例にいう撮像装置３００の構成も、実施例１と同様に、視点数、撮像素子の画素ピッチ、撮像光学系の焦点距離、複数の視点（カメラユニット）の基線長、基線方向および輻輳角、プレノプティックカメラのＦ値やフォーカス位置等である。言い換えれば、一組の撮像画像間に発生する視差に関する撮像条件である。
【００７１】
また、本実施例では、一組の撮像画像に対して階層的に複数回、縮小処理を行って縮小率Ｍが互いに異なる複数組の縮小画像を生成する。これら複数組の縮小画像のうち最も縮小率Ｍが大きい、つまりは最も解像度が低い一組の縮小画像から解像度が高い一組の縮小画像まで順次視差を求める。これにより、最終的に最も解像度が高い一組の撮像画像から取得される一組の入力画像の視差を求める。本実施例によれば、撮像画像の視差が大きい場合でも、縮小処理による解像度の劣化の影響を最小限に抑えつつ、高精度な視差算出を可能とする。
【００７２】
撮像装置３００の構成は、例えば実施例１の撮像装置１００から画像処理部１０２を除いたものと同じである。撮像装置３００により生成された撮像画像データは画像処理装置３０１に送られ、画像処理装置３０１内の生成記憶部３０２に記憶される。画像処理装置３０１は、有線または無線通信により直接またはネットワークを介してサーバー３０５と接続されている。
【００７３】
サーバー３０５は、複数の参照パターンデータを生成し、さらに変換行列と参照視差群を機械学習により生成（算出）する学習部３０７と、これら変換行列および参照視差群を記憶する記憶部３０６とを有する。なお、変換行列の生成方法は実施例１で図５のフローチャートを用いて説明した方法と同じである。また、変換行列は必ずしも学習によって生成する必要はなく、４次元離散コサイン変換等の画像圧縮で使われる変換基底画像から生成してもよい。
【００７４】
画像処理装置３０１は、記憶部３０２と階層画像生成部３０３と視差算出部３０４とを有する。縮小手段および取得手段としての階層画像生成部３０３は、ｎ種類（ｎは２以上の整数）の解像度を有するｎ組の階層画像を取得または生成する。具体的には、階層画像生成部３０３は、撮像画像をｎ層または最下位層の階層画像として取得する。また、階層画像生成部３０３は、撮像画像に対して縮小処理を行うことにより第ｎ層以外の第（ｎ−１）層の階層画像を生成する。第（ｎ−１）層の階層画像のうち最も縮小率が大きく解像度が低い階層画像の組を第１層または最上位層の階層画像とし、縮小率が小さくなるほど、すなわち解像度が高くなるほど下位層の階層画像とする。
【００７５】
算出手段としての視差算出部３０４は、サーバー３０５の記憶部３０６から取得した変換行列と参照視差群とを用いて、第１層から第ｎ層の階層画像のそれぞれの視差を順次算出する。算出された第ｍ層（ｍは正の整数）の視差は第（ｍ＋１）層のシフト量の算出に用いられる。最終的に求められた第ｎ層の撮像画像の視差は、撮像画像に対するぼけ付加処理等の画像処理に利用され、該画像処理後の画像は、表示装置３０８、記録媒体３０９および出力装置３１０のうち少なくとも１つに出力される。
【００７６】
表示装置３０８は、液晶ディスプレイやプロジェクタ等である。記録媒体３０９は、半導体メモリ、ハードディスクまたはネットワーク上のサーバー等である。出力装置３１０は、プリンタ等である。画像処理装置３０１は、必要に応じて現像処理やその他の画像処理を行う機能を有していてもよい。
【００７７】
なお、階層画像生成部３０３では、撮像画像に含まれる視差を正確に算出するために、撮像画像に対する最上位層の階層画像の縮小率Ｍは、撮像装置の構成等に応じて設定された想定視差範囲に基づいて設定されることが望ましい。
【００７８】
具体的には、想定視差範囲における視差の最大想定値である最大想定視差と最小想定値である最小想定視差をそれぞれｄｅ，ｍａｘとｄｅ，ｍｉｎとし、複数の参照パターンデータのそれぞれに対応する視差の最大値と最小値をそれぞれｄｍａｘとｄｍｉｎとする。このとき、撮像画像に対する第１層（最上位層）の階層画像の縮小率Ｍが式（５）を満足することが望ましい。これにより、最上位層の階層画像において、参照パターンデータに含まれる視差の範囲内に想定視差範囲が収まるようになり、想定視差範囲の視差を正確に算出することができる。
【００７９】
【数５】
2018133064.tif 000010
【００８０】
次に、画像処理コンピュータにより構成される画像処理装置３０１（階層画像生成部３０３および視差算出部３０４で行う視差算出処理を、図８のフローチャートを用いて説明する。パーソナルコンピュータにより構成される画像処理装置３０１は、コンピュータプログラムである画像処理プログラムに従って本処理を実行する。
【００８１】
ステップＳ４０１では、視差算出部３０４は、階層画像生成部３０３で生成された階層画像データのうち、未だ視差を算出していない階層画像のうち最も上位層である第ｍ層（ｍは正の整数）の階層画像を取得（生成）する。また、視差算出部３０４は、サーバー３０５の記憶部３０６から変換行列を取得する。
【００８２】
ステップＳ４０２では、視差算出部３０４は、第ｍ層の一組の階層画像のうち実施例1で説明した基準領域に対して後述するシフト量だけシフトした部分領域を視差算出領域に設定する。そして、これら一組の階層画像の視差算出領域から一組の入力画像を取得する。この際、視差算出領域のサイズは、全ての階層画像に対して同じであってもよいし、階層画像のサイズに合わせて変更してもよい。
【００８３】
本実施例では、視差算出部３０４は、一組の階層画像から複数組の入力画像を取得してもよい。すなわち、１つの階層画像から複数の入力画像を取得してもよい。この際、１つの階層画像において複数の入力画像を部分的に重複するように取得してもよいし、重複しないように取得してもよい。ただし、一組の入力画像から１つの視差を算出するため、重複しないように複数組の入力画像を取得した場合は、算出された視差の分布、すなわち視差マップの解像度が入力画像に比べて低下する。これに対して、部分的に重複するように複数組の入力画像を取得することで視差マップの解像度を高めることができる。
【００８４】
また、シフト量は、記憶部３０２から取得した第（ｍ−１）層の階層画像の視差と、第（ｍ−１）層の第ｍ層に対する縮小率Ｍとの積で求めることができる。なお、ｍ＝１（最上位層）の場合は、シフト量は０に設定する。
【００８５】
また、本ステップにおいて一組の階層画像から複数組の入力画像を取得する場合においては、一組の入力画像を列ベクトルとするときに複数組の入力画像を複数の列成分に持つ行列Ｉを生成する。入力画像を行列の形でまとめておくことで、以降の処理を階層画像全体で一括して行うことができ、視差算出の計算負荷を軽減することができる。
【００８６】
ステップＳ４０３では、視差算出部３０４は、以下の式（６）に示すように行列Ｉと変換行列Ｄの一般化逆行列との積を計算することで係数行列Ａを求める。
【００８７】
【数６】
2018133064.tif 000011
【００８８】
ステップＳ４０４では、視差算出部３０４は、係数行列Ａの各要素をＮ乗（Ｎは正の偶数）して各係数の符号を正にすることで、入力画像の明暗や色の変化の影響を低減させる。Ｎの大きさによって各係数の重みのバランスを調整することができる。また、係数行列Ａの各列のベクトルの大きさは、入力画像の明暗の大きさによって影響を受ける。それは、参照パターンは視差だけでなく明暗も表しており、入力画像の明暗が変われば、それに合わせて係数の大きさも変える必要があるからである。このため、係数行列Ａの各列を正規化して列ベクトルの大きさを一定の値に揃えた行列Ｂを求めることによって、入力画像の明暗の影響を低減させ、視差の推定精度を向上させることができる。
【００８９】
ステップＳ４０５では、視差算出部３０４は、以下の式（７）に示すように参照視差群を表す行ベクトルｄに行列Ｂ（つまりは係数群）を乗じることにより、各組の入力画像の視差を表す行ベクトルＰを求める。
【００９０】
【数７】
2018133064.tif 000012
【００９１】
ここで求めた視差Ｐを入力画像の位置に応じて並べ替えることで、第ｍ層の階層画像のうち視差算出領域全体の視差マップを求めることができる。
【００９２】
ステップＳ４０６では、視差算出部３０４は、今回のルーチンでステップＳ４０１からステップＳ４０５までの処理を行った第ｍ層の階層画像が第ｎ層の階層画像か否か（つまりはｍ＝ｎか否か）を判定する。ｍ＝ｎの場合は、撮像画像の視差マップとして第ｎ層の階層画像の視差マップを出力する。
【００９３】
一方、ｍ＜ｎの場合は、視差算出部３０４は、記憶部３０２に第ｍ層の階層画像と縮小率Ｍとを記憶し、ステップＳ４０７においてｍ＝ｍ＋１としてステップＳ４０１からＳ４０５を繰り返す。このようにして全ての階層の階層画像の視差（マップ）を変換行列を用いた行列演算で求めることで、視差を算出する際の計算負荷を軽減させることができる。
【００９４】
本実施例によれば、一組の入力画像の視差を算出する際の計算負荷を軽減させながら、大きい視差を正確に算出することが可能な画像処理システムを実現することができる。
（その他の実施例）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【００９５】
以上説明した各実施例は代表的な例にすぎず、本発明の実施に際しては、各実施例に対して種々の変形や変更が可能である。
【符号の説明】
【００９６】
１００，３００  撮像装置
１０２  画像処置部
１０２ｂ  視差画像取得部
１０２ｃ，３０４  視差算出部
３０１  画像処理装置
３０３  階層画像生成部
【図１】
2018133064.tif 000014
【図２】
2018133064.tif 000015
【図３】
2018133064.tif 000016
【図４】
2018133064.tif 000017
【図５】
2018133064.tif 000018
【図６】
2018133064.tif 000019
【図７】
2018133064.tif 000020
【図８】
2018133064.tif 000021