以下、添付図面を参照しながら、本発明に係る画像処理装置、方法、及びプログラム、並びに、画像表示装置の実施の形態を詳細に説明する。
(第1実施形態)
本実施形態の画像処理装置は、観察者が裸眼で立体画像を観察可能なTV(テレビ)、PC(Personal Computer)、スマートフォン、デジタルフォトフレーム等の画像表示装置に用いられ得る。立体画像とは、互いに視差を有する複数の視差画像を含む画像である。なお、実施形態で述べる画像とは、静止画像又は動画像のいずれであってもよい。
図1は、本実施形態の画像表示装置1の概略図である。図1に示すように、画像表示装置1は、表示部10と、撮影部20と、画像処理部30とを備える。
図2は、表示部10の構成例を示す図である。図2に示すように、表示部10は、表示素子11と光線制御素子12とを含む。観察者は、光線制御素子12を介して表示素子11を観察することで、表示部10に表示される立体画像を観察する。観察者の左眼および右眼に対し、視差の異なる画像をそれぞれ表示することで、観察者は立体画像を観察することができる。
表示素子11は立体画像を表示する。表示素子11には、異なる色の複数のサブ画素(例えば、R,G,B)が、X方向(行方向)とY方向(列方向)とに、マトリクス状に配列される。図2の例では、ひとつの画素はRGB各色のサブ画素から構成される。各サブ画素は、X方向にR(赤)、G(緑)、B(青)の順で繰り返し配列され、Y方向に同一の色成分が配列される。表示素子11には、直視型2次元ディスプレイ、例えば、有機EL(Organic Electro Luminescence)やLCD(Liquid Crystal Display)、PDP(Plasma Display Panel)、投射型ディスプレイなどを用いる。また、表示素子11は、バックライトを備えた構成でもよい。以下では、表示素子11をパネルと呼ぶ場合がある。
光線制御素子12は、表示素子11の各サブ画素から射出される光線の方向を制御する。光線制御素子12は、直線状に延伸する光学的開口13がX方向に複数配列されたものである。図1の例では、光線制御素子12は、シリンドリカルレンズ(光線を射出するための光学的開口13として機能)が複数配列されたレンチキュラーシートであるが、これに限らず、例えば光線制御素子12は、スリットが複数配列されたパララックスバリアであってもよい。表示素子11と光線制御素子12とは、一定の距離(ギャップ)を有する。また、光線制御素子12は、その光学的開口13の延伸方向が表示素子11のY方向(列方向)に対して、所定の傾きを有するように配置されるので、光学的開口13と表示画素との行方向の位置がずれることにより、高さごとに視域(観察者が立体画像を観察可能な領域)が異なる。
図1に戻って説明を続ける。撮影部20は、実空間上の所定の領域を撮影(撮像)する。以下の説明では、撮影部20により撮影された画像を撮影画像と呼び、撮影画像に映り込んだ、例えば人物の顔などの対象物をオブジェクトと呼ぶ場合がある。撮影部20は、公知の様々な撮影装置を用いることができる。本実施形態では、撮影部20はカメラで構成され、以下の説明では、カメラ20と表記する場合もある。撮影部20の設置位置は任意に設定可能である。以下の説明では、画像表示装置1が有する撮影部20の数が1つである場合を例に挙げて説明するが、これに限らず、例えば画像表示装置1が複数の撮影部20を有する形態であってもよい。
次に、画像処理部30について説明する。画像処理部30の具体的な内容を説明する前に、画像処理部30が有する機能の概要を説明する。画像処理部30は、撮影画像を分割する複数の部分領域ごとに予め設定された存在確率(オブジェクトが存在する確率)に応じて、オブジェクトが存在するか否かを検出する検出処理を行う部分領域の順序を示す検出順序を決定する。そして、画像処理部30は、決定した検出順序に従って、撮影画像のうち、部分領域に対応する領域にオブジェクトが存在するか否かを検出する検出処理を行う。画像処理部30は、請求項の「画像処理装置」に対応する。
以上の概要を、図3を用いて説明する。図3の左側には、撮影画像を3つの部分領域に分けたものを示している。図3に例示された3つの部分領域は、撮影画像を垂直方向に分割する領域であり、一番上の部分領域を部分領域1、一番下の部分領域を部分領域3、部分領域1と部分領域3とに挟まれた中央の部分領域を部分領域2と表記する。図3の例では、部分領域1の存在確率を0.3、部分領域2の存在確率を0.5、部分領域3の存在確率を0.2としている。この場合の各時刻における部分領域の検出順序を図3の右側に示した。横軸は時刻であり、縦軸は画像の垂直方向である。図3の例では、画像の水平方向には分割していないため、このように2次元で記載している。図3の右側において、時刻1から時刻10までのそれぞれの時刻にて検出処理が行われる部分領域は、網点で示している。部分領域1は、存在確率が0.3なので、時刻10までに3回の検出処理が行われている。その他の部分領域に対しても同様に、存在確率に応じて、検出処理を行う回数が変化する。時刻11以降は、再び時刻1から時刻10までの検出順序を周期的に適用するので、時刻1から時刻10までが1周期となる。以上のように存在確率に応じて各時刻での検出処理を行う部分領域を決定する方法の具体的な内容については後述する。
ここで、本明細書を通じて使用する時刻について述べる。撮影画像が動画である場合は、各時刻は撮影画像の取得開始時刻を時刻1、次の撮影画像が入力された時刻を時刻2と離散的に表現する。これにより、時刻tから時刻t+1までの間は、使用するカメラ(撮影部20)のフレームレートに従って変化する。たとえば、30fps(frame per second)のカメラであれば、1/30秒となる。この時間以内で検出処理が終了するように部分領域を決定する必要がある。撮影画像が静止画である場合は、撮影画像を同じサイズの部分領域にN(N≧2)分割したときには、時刻1から時刻Nまでが1周期となる。それぞれの部分領域に対して検出処理が終了するまでの時間は、時刻tから時刻t+1に至るまでの時間となる。
なお、画像処理部30は、検出処理により検出されたオブジェクトの位置およびサイズを含むオブジェクト位置情報に基づいて、実空間上のオブジェクトの3次元位置を推定する機能(請求項の「推定部」に対応)と、推定した3次元位置を含むように、観察者が立体画像を観察可能な視域を決定する機能(請求項の「第2決定部」に対応)と、決定した視域が形成されるように、表示部10を制御する機能(請求項の「表示制御部」に対応)とをさらに有している。ただし、説明の便宜上、第1実施形態では、これらの機能の説明を省略し、オブジェクトの検出に関する機能を中心に説明する。これらの機能については、後述の実施形態で改めて説明する。
以下、画像処理部30の具体的な内容を説明する。図4は、画像処理部30が有する機能のうち、オブジェクトの検出に関する機能の構成例を示す機能ブロック図である。図4に示すように、画像処理部30は、取得部101と、検出部102と、第1決定部103とを有する。取得部101は、カメラ20から撮影画像を取得する機能を有する。取得部101は、取得した撮影画像を検出部102に出力する。撮影画像は、静止画像であってもよいし、動画像であってもよい。動画像はカメラ20のフレームレートに合わせて取得する。この例では、カメラ20からの撮影画像が、請求項の「入力画像」に対応しているが、これに限られるものではない。
検出部102は、取得部101から撮影画像を、第1決定部103から、撮影画像の一部の領域を指定する部分領域情報を取得する。そして、検出部102は、取得部101から取得した撮影画像のうち、第1決定部103から取得した部分領域情報で指定された領域にオブジェクトが存在するか否かを検出する検出処理を行い、当該領域内にオブジェクトが検出された場合は、撮影画像内でのオブジェクトの位置およびサイズを示すオブジェクト位置情報を出力する。後述するように、第1決定部103は、撮影画像を分割する複数の部分領域ごとに予め設定された存在確率に基づいて検出順序を決定し、決定した検出順序に従って、何れかの部分領域を示す部分領域情報を、検出部102へ順次に出力する。そして、検出部102は、取得部101から取得した撮影画像のうち、第1決定部103から取得した部分領域情報が示す部分領域に対応する領域にオブジェクトが存在するか否かを検出する検出処理を行う。つまり、検出部102は、第1決定部103により決定された検出順序に従って、撮影画像のうち部分領域に対応する領域にオブジェクトが存在するか否かを検出する検出処理を行う機能を有していると捉えることもできる。
本実施形態では、検出部102は、取得部101から取得した撮影画像上に、所定の複数のサイズの探索窓を走査させていき、予め用意したオブジェクトの画像のパターンと探索窓内の画像のパターンとの類似度合いを評価することで、探索窓内の画像がオブジェクトであるかを判定する。例えば対象物が人物の顔である場合には、非特許文献1に開示された探索方法を用いることができる。この探索法は、探索窓内の画像に対していくつかの矩形特徴を求め、それぞれの特徴に対する弱識別器を直列につないだ強識別器によって、正面顔であるかどうかを判定する方法である。
画像処理部30で上記探索法を用いる場合には、探索法を行う各機能部(詳細後述)に、パターン識別器(図示省略)を備えた構成とすればよい。パターン識別器は、複数の弱識別器を直列に接続したカスケード構造の識別器であって、非特許文献1に開示されたカスケード型AdaBoostベース識別器である。
具体的には、パターン識別器は、入力された撮影画像に対して、カスケードの各段の弱識別器で顔、非顔の判定を行い、顔と判定された画像のみを次段の弱識別器へと進める。そして、最後の弱識別器を通過した画像を最終的に顔画像と判定する。
カスケードの各段を構成する強識別器は、複数の弱識別器を直列につないだ構成である。各弱識別器では、探索窓内の画像に対して求めた矩形特徴を用いて評価を行う。
ここで、xを探索の画像内における2次元座標位置ベクトルとしたときの、位置ベクトルxにおいての、ある弱識別器nの出力は、下記式(1)によって示される。
式(1)中、hn(x)は弱識別器nの出力を示し、fn(x)は弱識別器nの判定関数を示す。また、式(1)中、pnは不等号の等号の向きを定めるために、1または−1となる数を示し、θnは各弱識別器nに対して予め定められている閾値を示す。例えばθnは、識別器作成の際の学習において設定される。
また、N個の弱識別器を直列につないだ構成の強識別器の出力は、下記式(2)によって示される。
式(2)中、H(x)は、N個の弱識別器を直列につないだ構成の強識別器の出力を示す。また、式(2)中、αnは予め定められている弱識別器nの重みを示し、hnは式(1)で表した弱識別器nの出力を示す。例えばαnは、識別器作成の際の学習において設定される。
なお、パターン識別器を通過した画像について、顔らしさを表す尤度l(x)を算出するためには、下記式(3)を用いる。
式(3)中、aは、識別器作成の際の学習において生成される重みを表す定数である。また、式(3)中、H(x)は、強識別器の出力を示す。
なお、対象物は必ずしも一定の方向から撮影されるわけではない。例えば、横方向や斜め方向から撮影する場合も考えられる。このような場合には、画像処理部30を、横顔を検出するためのパターン識別器を備えた構成とする。なお、画像処理部30において探索法を用いる各機能部は、対象物の1つないし複数の姿勢の各々に対応するパターン識別器を備えた構成であるものとする。
第1決定部103は、撮影画像を分割する複数の部分領域ごとに予め設定された存在確率に基づいて、オブジェクトが存在するか否かを検出する検出処理を行う部分領域の順序を示す検出順序を決定する。そして、決定した検出順序に応じて、何れかの部分領域を示す部分領域情報を、検出部102へ順次に出力する。
また、本実施形態では、撮影画像と同じサイズの画像データに含まれる複数の領域(各領域は、オブジェクトの検出が行われる位置(オブジェクトの検出位置)に対応すると捉えることもできる)ごとに、予め設定された存在確率を示す確率マップデータが不図示のメモリに格納されており、第1決定部103は、確率マップデータを参照して、存在確率の高い領域から順番にグルーピングすることで、複数の部分領域を決定する。詳細な内容については後述する。なお、確率マップデータの保存先は任意であり、不図示のメモリであってもよいし、外部のサーバ装置であってもよい。複数の部分領域は、取得部101により取得される撮影画像に含まれる複数の領域と1対1に対応していると捉えることができる。
図5は、第1決定部103の詳細な機能構成例を示すブロック図である。図5に示すように、第1決定部103は、存在確率設定部1021と、検出順序作成部1022とを有する。存在確率設定部1021は、オブジェクトの検出位置ごとに予め設定された存在確率を検出順序作成部1022に出力する。本実施形態では、存在確率設定部1021は、不図示のメモリにアクセスして上述の確率マップデータを取得し、取得した確率マップデータを参照して、オブジェクトの検出位置ごとに予め設定された存在確率を示す情報を、検出順序作成部1022へ出力する。検出順序作成部1022は、オブジェクトの検出位置ごとに予め設定された存在確率に基づいて、複数の部分領域を決定し、決定した各部分領域の存在確率に基づいて、検出順序を決定する。
次に、図6を参照しながら、第1決定部103による処理を説明する。図6は、第1決定部103による処理の一例を示すフローチャートである。図6に示すように、存在確率設定部1021は、存在確率を設定する(ステップS1001)。より具体的には、存在確率設定部1021は、不図示のメモリにアクセスして上述の確率マップデータを取得し、取得した確率マップデータを参照して、オブジェクトの検出位置ごとに予め設定された存在確率を示す情報を、検出順序作成部1022へ出力する。
ここで、撮影画像の左上を原点とし、水平右方向にx軸、垂直下方向にy軸を設定し、探索窓のサイズをw軸とすれば、存在確率は、3次元確率p(x,y,w)によって表すことができる。これは、たとえば3次元正規分布によってモデル化する。または、たとえば、画像の上部は天井や空しか映らず、オブジェクトが存在する可能性が低い、かつ水平方向には分割しないと想定する場合には、1次元確率p(y)によって存在確率を設定してもよい。なお、yに限らずx、wの1次元確率としてもよいし、そのうちの2つによる2次元確率によって存在確率を設定してもよい。また、混合正規分布モデルを用いてもよい。
また、3次元座標(x、y、w)は、探索窓の1回の走査位置を示す情報であるとみなすこともできる。探索窓の走査は離散的であり、x軸ならば1≦x≦(入力画像の水平解像度IW)の範囲の整数、y軸なら1≦y≦(入力画像の垂直解像度IH)の範囲の整数、w軸ならば、所定の複数の探索窓サイズ(以降、それらサイズの集合をΩで表す)の組み合わせに対応する領域(オブジェクトの検出位置)の存在確率のみを定義した離散的な存在確率を用いてもよい。以降、これらの離散的な位置を表す場合には、説明の便宜上、ベクトルiで表すことにする。つまり、p(i)によって、1回の探索窓の走査位置の存在確率を表す。また、これら探索窓の走査位置全体の集合をIで表すことにする。この例では、上述の確率マップデータは、集合Iに含まれる複数の走査位置ごとに予め設定された存在確率を示すデータとなる。そして、検出順序作成部1022は、集合Iに含まれる複数の走査位置ごとに予め設定された存在確率を示す情報を、存在確率設定部1021から取得する。
上述のステップS1001の後、検出順序作成部1022は、各走査位置の存在確率に基づいて、検出処理を行う部分領域の順序を示す検出順序を決定する(ステップS1002)。
以下、図7を参照しながら、ステップS1002の処理の具体的な内容を説明する。図7は、図6に示すステップS1002の処理の具体的な内容の一例を示すフローチャートである。ここで、所定の時間内に検出部102が処理することができる探索窓の走査回数をCAPACITYとする。つまり、部分領域情報は、CAPACITY回の走査回数の画像領域および探索窓サイズを指定する情報になる。
図7に示すように、まず、検出順序作成部1022は、CAPACITY回の走査回数になるように、複数のベクトルiで表される複数の走査位置(1回の探索窓の走査位置)からなる部分領域(以降、この部分領域を処理グループと呼ぶ)を設定する(ステップS110)。処理グループは、1ないし複数作成されるため、それぞれに1から始まる自然数のインデックスkを与える。処理グループkは、ベクトルiで表される1回の探索窓の走査位置の集合G(k)と、集合G(k)に含まれる要素数(走査位置の数)Cost(k)、処理グループ内でのオブジェクトの存在確率(処理グループに含まれる複数の走査位置の各々に対応する存在確率の和)p(k)というデータを持つ。処理グループkは、新規に作成された場合、G(k)=φ(空集合)、Cost(k)=CAPACITY、p(k)=0に初期化される。集合G(k)に、ベクトルiを加えることを、G(k)←iによって表す。
本実施形態では、ステップS110において、検出順序作成部1022は、集合Iに属する要素の存在確率が高い順に処理グループを形成する。図8を参照しながら、ステップS110の処理の詳細な内容の一例を説明する。図8は、ステップS110の処理の詳細な内容の一例を示すフローチャートである。図8に示すように、まず、検出順序作成部1022は、処理グループを1つ作成する(ステップS1101)。ここでは、インデックスk=1で識別される処理グループを作成する場合を例に挙げて説明する。次に、検出順序作成部1022は、集合Iに含まれる走査位置のうち、最も存在確率が高い走査位置imaxを求める(ステップS1102)。
次に、検出順序作成部1022は、走査位置imaxに対応する存在確率p(imax)=0であるかどうかを判定する(ステップS1103)。p(imax)=0でないと判定した場合(ステップS1103:No)、検出順序作成部1022は、処理グループkのCost(k)=0であるかどうかを判定する(ステップS1104)。Cost(k)=0であると判定した場合(ステップS1104:Yes)、検出順序作成部1022は、新たに処理グループを追加して、インデックスkを新しい処理グループのインデックスに更新する(ステップS1105)。Cost(k)=0でないと判定した場合(ステップS1104:No)、ステップS1105の処理はスキップし、次のステップS1106の処理に移行する。
ステップS1106において、検出順序作成部1022は、走査位置imaxを処理グループkの集合G(k)に加える。また、処理グループkのCost(k)を、現在の値から1だけデクリメントした値に更新する。また、処理グループkの存在確率p(k)に、走査位置imaxの存在確率p(imax)を加える。次に、検出順序作成部1022は、走査位置imaxの存在確率p(imax)を0に設定し(ステップS1107)、再びステップS1102以降の処理を行う。これにより、ベクトルiで表される走査位置は、処理グループのいずれか1つにしか存在しないことになる。ここまでの処理で、すべての走査位置を、必ず何れかの処理グループに所属させることができる。ここまでが、図8に例示されたフローチャートの左側の処理になる。
上述のステップS1103において、p(imax)=0であると判定した場合(ステップS1103:Yes)、最後に作成された処理グループklastのCost(klast)が0になっていない場合、その処理グループklastの処理時間に余裕があることになる。そこで、検出順序作成部1022は、一旦、集合Iのそれぞれの要素(走査位置)の存在確率を、「0」に設定される前の初期状態(ステップS1101の時点における状態)に戻して(ステップS1108)、再び存在確率の高い走査位置から順に処理グループklastの走査位置の集合G(klast)に加えていく。より具体的には、上述のステップS1108の後、検出順序作成部1022は、最後に作成された処理グループklastのCost(klast)=0であるかどうかを判定し(ステップS1109)、Cost(klast)=0であると判定した場合(ステップS1109:Yes)、処理を終了する。一方、Cost(klast)=0でないと判定した場合(ステップS1109:No)、集合Iに含まれる走査位置のうち、最も存在確率が高い走査位置imaxを求める(ステップS1110)。次に、検出順序作成部1022は、走査位置imaxを処理グループklastの集合G(klast)に加え、処理グループklastのCost(klast)を、現在の値から1だけデクリメントした値に更新し、処理グループklastの存在確率p(klast)に、走査位置imaxの存在確率p(imax)を加える(ステップS1111)。次に、検出順序作成部1022は、走査位置imaxの存在確率p(imax)を0に設定し(ステップS1112)、再びステップS1109以降の処理を行う。
以上においては、存在確率が3次元で表される場合におけるステップS110(図7参照)の処理を説明したが、存在確率が、1次元または2次元で表される場合もあり得る。この場合は、探索窓の1回の走査位置ごとではなく、複数の走査位置からなるブロック単位に処理グループを形成する必要がある。つまり、処理グループは、1ないし複数のブロックから構成されるようにする。このブロックを処理ブロックと呼ぶ(図9参照)。ここでは、各処理ブロックに対して、1から始まる自然数のインデックスbを与える(以下、処理ブロックを総称して説明する場合は、単に処理ブロックbと称して説明する)。存在確率が1次元で表される場合の処理ブロックbに含まれる走査位置の集合G(b)は、たとえば、yをy(b)に固定すると、以下の式4で表すことができる。
なお、上記式4において、y(b)は、走査位置を示すのではなく、以下の式5を満たすある範囲の集合とする。
上記式5において、nは、ユーザが設定できる自然数である。nを定めればCost(b)が、以下の式6により求められる。このとき、CAPACITY/Cost(b)>1になるように、nを調節する必要がある。
関数Size(A)は、集合Aに含まれる要素数を返す関数である。この場合、P(b)は、以下の式7により求めることができる。
以上のように作成した処理ブロックbすべての集合を集合Kで表す。
次に、図10を参照しながら、検出順序作成部1022が、処理ブロック単位に処理グループ(部分領域)を形成する方法の一例を説明する。図10は、上述のステップS110(図7参照)の処理の詳細な内容の一例を示すフローチャートである。図10に示すように、まず、検出順序作成部1022は、処理グループを1つ作成する(ステップS1201)。ステップS1201の処理内容は、図8のステップS1101の処理内容と同様である。
次に、検出順序作成部1022は、集合Kに含まれる処理ブロックbのうち、最も存在確率が高い処理ブロックbmaxを求める(ステップS1202)。次に、検出順序作成部1022は、処理ブロックbmaxの存在確率p(bmax)=0であるかどうかを判定する(ステップS1203)。
p(bmax)=0でないと判定した場合(ステップS1203:No)、検出順序作成部1022は、処理グループの集合Kの中で、処理ブロックbmaxの処理を含めることができる処理グループksを探す(ステップS1204)。より具体的には、検出順序作成部1022は、集合Kの中で、Cost(k)−Cost(bmax)≧0を満たす処理グループksを探す。処理ブロックbmaxの処理を含めることができる処理グループksが存在しない場合(ステップS1204:No)、検出順序作成部1022は、新たな処理グループksを集合Kに追加する(ステップS1205)。処理ブロックbmaxの処理を含めることができる処理グループksが存在する場合(ステップS1204:Yes)、ステップS1205の処理はスキップし、次のステップS1206の処理に移行する。
ステップS1206において、検出順序作成部1022は、処理ブロックbmaxに含まれる走査位置の集合G(bmax)を、処理グループksの集合G(ks)に加える。また、処理グループksのCost(ks)を、現在の値からCost(bmax)だけデクリメントした値に更新する。また、処理グループksの存在確率p(ks)に、処理ブロックbmaxの存在確率p(bmax)を加える。次に、検出順序作成部1022は、処理ブロックbmaxの存在確率p(bmax)を0に設定し(ステップS1207)、再びステップS1202以降の処理を繰り返す。
一方、上述のステップS1203において、p(bmax)=0であると判定した場合は(ステップS1203:Yes)、集合Kに含まれる処理ブロックbすべてが、いずれかの処理グループの走査位置集合の要素として加えられたことを示す。このとき、集合Kに含まれる複数の処理グループのそれぞれの処理時間に余裕があるかどうかを調べていく。まず、集合Kのそれぞれの要素の存在確率をステップS1201の時点に戻す(ステップS1208)。次に、検出順序作成部1022は、上述のステップS1202と同様に、最も存在確率が高い処理ブロックbmaxを求める(ステップS1209)。次に、検出順序作成部1022は、上述のステップS1203と同様に、処理ブロックbmaxの存在確率p(bmax)=0であるかどうかを判定する(ステップS1210)。
p(bmax)=0であると判定した場合(ステップS1210:Yes)、検出順序作成部1022は、処理を終了する。p(bmax)=0ではないと判定した場合(ステップS1210:No)、検出順序作成部1022は、上述のステップS1204と同様に、処理ブロックbmaxの処理を含めることができる処理グループksを探す(ステップS1211)。
処理ブロックbmaxの処理を含めることができる処理グループksが存在する場合(ステップS1211:Yes)、検出順序作成部1022は、上述のステップS1206と同様に、処理ブロックbmaxに含まれる走査位置の集合G(bmax)を、処理グループksの集合G(ks)に加える。また、処理グループksのCost(ks)を、現在の値からCost(bmax)だけデクリメントした値に更新する。また、処理グループksの存在確率p(ks)に、処理ブロックbmaxの存在確率p(bmax)を加える(ステップS1212)。次に、検出順序作成部1022は、上述のステップS1207と同様に、処理ブロックbmaxの存在確率p(bmax)を0に設定し(ステップS1213)、再びステップS1209以降の処理を繰り返す。
一方、処理ブロックbmaxの処理を含めることができる処理グループksが存在しない場合(ステップS1211:No)、検出順序作成部1022は、上述のステップS1207と同様に、処理ブロックbmaxの存在確率p(bmax)を0に設定し(ステップS1213)、再びステップS1209以降の処理を繰り返す。
以上においては、存在確率が1次元で表される場合を例に挙げて説明したが、存在確率が2次元で表される場合の処理ブロックbに含まれる走査位置の集合G(b)は、たとえば、xをx(b)に、yをy(b)に固定すると、以下の式8で表すことができる。
このとき、Cost(b)は、以下の式9で表すことができる。
また、P(b)は、以下の式10により求めることができる。
x(b)、y(b)についても、存在確率が1次元で表される場合と同様に範囲を持たせてもよい。このように処理ブロックbを設定すれば、図10に示すフローチャートに従って処理グループを形成することが可能である。
なお、以上の例では、1つの処理グループの中に、同じ処理ブロックbが重複して存在しないようにして(複数の同じ処理ブロックbが存在しないようにして)処理グループを形成することが望ましい。以上が、図7に示すステップS110の処理の詳細な内容の説明である。
再び図7に戻って説明を続ける。以上のステップS110の後、検出順序作成部1022は、各処理グループの存在確率に基づいて、検出処理を行う処理グループの順序を示す検出順序を決定する(ステップS111)。本実施形態では、検出順序作成部1022は、各処理グループの存在確率分布と乱数に応じて、時刻tで検出処理を行う処理グループkを決定し、その処理グループkに含まれる走査位置の集合G(k)を示す情報(処理グループkを指定する情報)を部分領域情報として出力する。ここでは、検出順序作成部1022は、存在確率の高い処理グループの検出処理が優先的に行われるように検出順序を決定する。より具体的には、存在確率の高い処理グループは、存在確率の低い処理グループよりも先に検出処理が行われ、かつ、検出処理の実行頻度も高くなるように検出順序が決定される。この場合、図3に例示したような部分領域の検出位置が周期的である態様とはならず、各時刻において乱数をもってその時刻での検出領域を決定する。
また、検出順序作成部1022は、図11に示すフローチャートに従って、検出順序を決定する処理(図6のステップS1002)を行ってもよい。図11のステップS110の処理は、図7のステップS110の処理と同じなので、詳細な説明は省略する。次のステップS121において、検出順序作成部1022は、集合Kに含まれる複数の処理グループのそれぞれの存在確率p(k)に応じて、処理頻度ヒストグラムh(k)を算出する。処理頻度ヒストグラムh(k)は、以下の式11により求めることができる。
ここで、関数round(x)は、xを四捨五入した整数を返す関数である。上記式11において、分母の最小値を求める際には、0以外での最小値に限定する。上記式11によって求まる処理頻度h(k)は、存在確率が高い範囲グループほど高い整数値になる値であり、最小値は1になる。つまり、各処理グループは、少なくとも1回は処理されることを保証する。
次に、検出順序作成部1022は、算出した各処理グループの処理頻度h(k)に応じて、時刻0≦t≦Tallまでの処理グループを決定する(ステップS122)。つまり、t=0からt=Tallまでの各時刻で検出処理する処理グループを決定する(検出順序を決定する)。ここで、Tallとは、全処理時間(周期)を表し、以下の式12により求めることができる。
図12を用いて、上述のステップS122の処理の概要を説明する。図12の例では、5つの処理グループ1〜5を想定し、処理グループ1の処理頻度h(1)=1、処理グループ2の処理頻度h(2)=2、処理グループ3の処理頻度h(3)=5、処理グループ4の処理頻度h(4)=4、処理グループ5の処理頻度h(5)=1とする。つまり、Tallは13となる。これから、図12の下方の13個のそれぞれのマスに、対応する処理グループのインデックスk(処理グループ番号)を埋めていくことでスケジュール(検出順序)を作成する。このマスをスケジュールスロットと呼ぶ。
次に、図13を用いて、上述のステップS122の処理の詳細を説明する。図13は、上述のステップS122の処理の詳細な内容の一例を示すフローチャートである。図13に示すように、まず検出順序作成部1022は、集合Kの中で最も処理頻度が高い処理グループkmaxを求める(ステップS1301)。次に、検出順序作成部1022は、処理グループkmaxの処理頻度h(kmax)=0であるかどうかを判定する(ステップS1302)。h(kmax)=0であると判定した場合(ステップS1302:Yes)、検出順序作成部1022は処理を終了する。h(kmax)=0ではないと判定した場合(ステップS1302:No)、検出順序作成部1022は、処理グループkmaxを、スケジュールスロットに入れる間隔を表すstep(kmax)を求める(ステップS1303)。処理グループkに対応するstep(k)は、以下の式13により求めることができる。
次に、検出順序作成部1022は、スケジュールスロットの位置(時刻)を示すtを0に初期化する(ステップS1304)。次に、検出順序作成部1022は、時刻tのスケジュールスロットに処理グループ番号(処理グループのインデックスk)をセットする(ステップS1305)。
ここで、図14を用いて、上述のステップS1305の処理の詳細を説明する。図14は、上述のステップS1305の処理の詳細な内容の一例を示すフローチャートである。図14に示すように、検出順序作成部1022は、時刻tの近傍で、まだ処理グループ番号が設定されていない(空いている)スケジュールスロットの位置(時刻)teを求める(ステップS1401)。
図15は、上述のステップS1401の処理の詳細な内容の一例を示すフローチャートである。以下、図15を用いて、上述のステップS1401の処理の詳細な内容を説明する。まず、検出順序作成部1022は、時刻tのスケジュールスロットindices[t]=NULLであるかどうかを判断する(ステップS1501)。つまり、検出順序作成部1022は、時刻tのスケジュールスロットindices[t]に処理グループ番号が設定されているかどうかを判断する。
時刻tのスケジュールスロットindices[t]=NULLであると判断した場合(ステップS1501:Yes)、つまり、時刻tのスケジュールスロットindices[t]に処理グループ番号が未だ設定されていないと判断した場合、te=tとして処理を終了する(ステップS1502)。
一方、時刻tのスケジュールスロットindices[t]=NULLでないと判断した場合(ステップS1501:No)、つまり、時刻tのスケジュールスロットindices[t]に処理グループ番号が既に設定されていると判断した場合、検出順序作成部1022は、時刻tのオフセットuを1に設定する(S1503)。そして、検出順序作成部1022は、時刻tから正の方向にオフセット分移動した時刻t+uのスケジュールスロットindices[t+u]=NULLであるかどうかを判断する(ステップS1504)。時刻t+uのスケジュールスロットindices[t+u]=NULLであると判断した場合(ステップS1504:Yes)、te=t+uとして処理を終了する(ステップS1505)。
上述のステップS1504において、時刻t+uのスケジュールスロットindices[t+u]=NULLではないと判断した場合(ステップS1504:No)、検出順序作成部1022は、時刻tから負の方向にオフセット分移動した時刻t−uのスケジュールスロットindices[t−u]=NULLであるかどうかを判断する(ステップS1506)。時刻t−uのスケジュールスロットindices[t−u]=NULLであると判断した場合(ステップS1506:Yes)、te=t−uとして処理を終了する(ステップS1507)。時刻t−uのスケジュールスロットindices[t−u]=NULLではないと判断した場合(ステップS1506:No)、検出順序作成部1022は、オフセットuを1だけインクリメントし(ステップS1508)、上述のステップS1504以降の処理を繰り返す。以上が、図14のステップS1401の処理の詳細な内容の一例である。
再び図14に戻って説明を続ける。上述のステップS1401の後、検出順序作成部1022は、上述のステップS1401で取得した時刻teのスケジュールスロットindices[te]に、最も処理頻度が高い処理グループkmaxのインデックス番号kmax(処理グループ番号)をセットする(ステップS1402)。次に、検出順序作成部1022は、処理グループkmaxの処理頻度h(kmax)を1だけデクリメントする(ステップS1403)。次に、検出順序作成部1022は、時刻tを時刻teに置き換えて(ステップS1404)、ステップS1305の処理を終了する。以上が、図13のステップS1305の処理の詳細な内容の説明である。
再び図13に戻って説明を続ける。上述のステップS1305の後、検出順序作成部1022は、時刻t(ここでは時刻teに置き換えられている)に、step(kmax)を加算する(ステップS1306)。次に、検出順序作成部1022は、時刻tが全処理時間Tallよりも小さいか否かを判断し(ステップS1307)、時刻tが全処理時間Tallよりも小さいと判断した場合(ステップS1307:Yes)、上述のステップS1305以降の処理を繰り返す。一方、時刻tが全処理時間Tallよりも大きいと判断した場合(ステップS1307:No)、検出順序作成部1022は、上述のステップS1301以降の処理を繰り返す。以上のようにして、検出順序作成部1022は、検出順序(スケジュール)を作成する。
なお、上述の各フローチャートには含めていないが、次のようなチェック機構があることが望ましい。上記スケジュールの作成においては、四捨五入の演算誤差によって、すべてのスケジュールスロットが埋まっていないことや、すべてのスロットが埋まっていて、ある処理グループ番号を詰めることができない場合もある。前者の場合には空きスロットを除去、後者の場合には、全処理時間を修正して空きスロットを追加してそこに詰める等の処理を入れる。以上のようにして作成したスケジュールによって、時刻Tallまでの部分領域情報を決定することができる。Tallより先の時刻においては、このスケジュールを繰り返し設定する。このスケジュールを作成するまでの処理を、検出順序のセットアップと呼ぶ。
また、検出順序作成部1022は、図16に示すフローチャートに従って、検出順序を決定する処理(図6のステップS1002)を行ってもよい。図16に示すフローチャートと、図11に示すフローチャートとの差分はステップS130のみであるため、ここでは、ステップS130の処理内容について説明する。
ステップS130において、検出順序作成部1022は、全処理時間Tall内において、各処理グループの検出処理が少なくとも1回は行われるように処理頻度を調節する。本実施形態では、検出順序作成部1022は、全処理時間Tallが、ユーザが設定した時間Tmaxになるように調節する処理を行う。たとえば、処理グループの存在確率の偏りが大きく、2つの処理グループA、Bで、その存在確率の比がp(A):p(B)=999:1であって、撮影画像のうち処理グループBに対応する領域にオブジェクトが存在する場合、オブジェクトを検出するまで、最悪時刻1000まで待たなければならなくなる。
そこで、検出順序作成部1022は、全処理時間Tallが、ユーザが設定した時間Tmaxになるように調節するとともに、設定した時間Tmax内において、各処理グループの検出処理が少なくとも1回は行われるように処理頻度を調節する。これにより、例えば処理グループAの存在確率p(A)と処理グループBの存在確率p(B)との比がp(A):p(B)=999:1であっても、少なくとも1回は処理グループBの検出処理が行われるので、撮影画像のうち処理グループBに対応する領域にオブジェクトが存在する場合は、設定時間Tmax内に当該オブジェクトを確実に検出できる。要するに、検出順序作成部1022は、予め定められた期間内において、各処理グループの検出処理が少なくとも1回は行われるように検出順序を決定することもできる。
図17は、図16のステップS130の処理の詳細な内容の一例を示すフローチャートである。図17に示すように、検出順序作成部1022は、上記式12に従って全処理時間Tallを求める(ステップS1601)。次に、検出順序作成部1022は、全処理時間Tallが、ユーザが設定したTmaxよりも小さいかどうかを判定する(ステップS1602)。全処理時間TallがTmaxよりも小さいと判定した場合(ステップS1602:Yes)、処理を終了する。一方、全処理時間TallがTmaxよりも大きいと判定した場合(ステップS1602:No)、検出順序作成部1022は、集合Kに含まれる処理グループのうち最も処理頻度が高い処理グループkmaxを求め、その求めた処理グループkmaxの処理頻度h(kmax)をデクリメントし(ステップS1603)、上述のステップS1601以降の処理を繰り返す。
次に、図18を用いて、本実施形態に係る画像処理部30による処理を説明する。図18は、画像処理部30による処理の一例を示すフローチャートである。図18に示すように、まず第1決定部103は、検出順序のセットアップを行う(ステップS100)。次に、取得部101は撮影画像を取得する(ステップS101)。次に、第1決定部103は、決定した検出順序に従って、部分領域情報を順次に検出部102へ出力する(ステップS102)。次に、検出部102は、取得部101により取得された撮影画像のうち、部分領域情報が示す処理グループに対応する領域にオブジェクトが存在するかどうかを検出する検出処理を行う(ステップS103)。
以上に説明したように、本実施形態によれば、入力画像(この例では撮影画像)を分割する複数の処理グループのうち、予め設定された存在確率の高い処理グループの検出処理が優先的に行われるように検出順序が決定されるので、オブジェクトが検出されるまでの期待待機時間を短縮できる。
なお、上述の実施形態では、存在確率の高い領域(走査位置あるいは処理ブロックb)から順番にグルーピングすることで、複数の処理グループ(部分領域)を形成しているが、これに限らず、処理グループの形成方法は任意である。例えば存在確率を考慮せずに、画像データをマトリクス状に分割して得られる複数の分割領域の各々を、処理グループとして決定する形態であってもよい。
(第2実施形態)
次に、第2実施形態について説明する。第2実施形態では、入力画像のうち、検出処理によりオブジェクトが検出された領域に対応する処理グループ(部分領域)の存在確率を増加させる点で上述の第1実施形態と相違する。以下、具体的な内容を説明する。なお、上述の第1実施形態と共通する部分については適宜に説明を省略する。
図19は、第2実施形態の画像処理部300の機能構成例を示すブロック図である。第1実施形態の画像処理部30との差分は、第1決定部201のみであるため、ここでは、第1決定部201の機能について説明する。
図20は、決定部201の詳細な機能構成例を示すブロック図である。図20に示すように、第1決定部201は、存在確率設定部2011と、検出順序作成部1022とを有する。第1実施形態の第1決定部103との差分は、存在確率設定部2011であり、ここではその差分についてのみ説明する。
ここで、検出部102は、検出処理によってオブジェクトを検出した場合、撮影画像内のオブジェクトの位置およびサイズを示すオブジェクト位置情報を決定部201(存在確率設定部2011)へ出力する。存在確率設定部2011は、取得したオブジェクト位置情報に基づいて、上述の確率マップデータを更新する。
より具体的には、存在確率設定部2011は、撮影画像と同じサイズの画像データのうち、オブジェクト位置情報が示す領域の存在確率を増加させて、確率マップデータを更新する。また、本実施形態では、検出順序作成部1022は、所定のタイミングで、検出順序の作成処理(図6のステップS1002の処理)を繰り返す。したがって、上述の確率マップデータの更新に応じて、オブジェクトが検出された領域に対応する処理グループの存在確率も増加することになる。このとき、初期の存在確率は、第1実施形態で述べた正規分布のような確率モデルに従った確率に設定する。初期の存在確率は、一様分布に設定しておいてもよい。
存在確率の更新方法を具体的に説明する。更新の目的は、装置の使用時にオブジェクトが検出された位置の存在確率を高めることで、そのカメラ20の位置においての検出の効率を上げるためである。存在確率p(i)を整数化した、ip(i)を、以下の式14によって求める。
これにより、最小値1に整数化した存在確率ip(i)が求められる。例えば、入力されたオブジェクト位置情報が、ベクトルd(撮影画像の水平方向の位置xと、垂直方向の位置yと、探索窓のサイズwとの組み合わせに対応する領域を表現)であった場合、存在確率設定部2011は、以下の式15のようにして、存在確率ip(i)を更新する。
上記式15において、整数Uはたとえば1にする。または、検出位置には誤差が含まれることを想定して、d=(xd、yd、wd)の近傍D={Δ=(x、y、w)|xd−dx≦x≦xd+dx、yd−dy≦y≦yd+dy、wd−dw≦w≦wd+dw}を設定して、Dに含まれるベクトルΔの位置の存在確率を上記式15によって更新してもよい。または、存在確率の更新値は整数Uだけでなく、以下の式16のようにして更新してもよい。
上記式16において、||はベクトルのノルムを表す。そして、以下の式17によって存在確率に戻す。
このように、存在確率は、使用していくうちにそのカメラ20の位置に適したものになっていく。これは、TVのような据え置き型装置の場合には好ましいことではあるが、装置を移動させた場合や、装置がモバイル機器であった場合、つまり、カメラの位置が変化した場合には、更新していった存在確率が適したものではなくなることがある。そこで、装置への電源供給が断たれたときに初期化する。または、ユーザが直接的に存在確率を初期化するような機能を持たせてもよい。
なお、以上においては、存在確率が3次元で表される場合における存在確率p(i)の更新方法を説明したが、以上の更新方法は、存在確率が1次元または2次元で表される場合における存在確率p(b)の更新方法についても適用することが可能である。
次に、図21を用いて、第2実施形態に係る画像処理部300による処理を説明する。図21は、画像処理部300による処理の一例を示すフローチャートである。図21に示すステップS100〜ステップS103の処理の内容は、図18に示すステップS100〜ステップS103の処理の内容と同じなので、詳細な説明は省略する。ステップS103の後、検出処理によりオブジェクトを検出した場合(ステップS201:Yes)、検出部102は、その検出したオブジェクトのオブジェクト位置情報を存在確率設定部2011へ出力する。そして、存在確率設定部2011は、取得したオブジェクト位置情報に基づいて、上述の確率マップデータを更新する(ステップS202)。
以上に説明したように、本実施形態によれば、検出処理によりオブジェクトが検出されるたびに、存在確率を更新していくので、使用状況に適したスケジュールの作成が可能になる。なお、スケジュールの作成を行うタイミング(上述のステップS1002の処理を行うタイミング)は任意に設定可能であり、存在確率が更新されるたびにスケジュールを作成する形態であってもよいし、全処理時間Tallの経過後にスケジュールを作成する形態であってもよい。
(第3実施形態)
次に、第3実施形態について説明する。第3実施形態では、入力画像のうち、検出処理により検出されたオブジェクトの近傍の領域に対してのみ、オブジェクトを探索するための探索窓を走査させて、オブジェクトが存在するか否かを検出する追跡検出部をさらに備える点で上述の各実施形態と相違する。以下、具体的な内容を説明する。なお、上述の各実施形態と共通する部分については適宜に説明を省略する。
図22は、第3実施形態の画像処理部310の機能構成例を示すブロック図である。上述の各実施形態との差分は、追跡検出部104のみであるため、ここでは、追跡検出部104の機能について説明する。追跡検出部104は、検出部102からオブジェクト位置情報(x、y、w)を取得し、そのオブジェクト位置情報の近傍の領域(オブジェクト位置情報を含む)に対してのみ、探索窓を走査させて、オブジェクトが存在するか否かを検出する(いわゆるトラッキング処理を行う)。
次に、図23を用いて、第3実施形態に係る画像処理部310による処理を説明する。図23は、画像処理部310による処理の一例を示すフローチャートである。図23のステップS100〜ステップS202の処理の内容は、図21のステップS100〜ステップS202の処理の内容と同じであるので、詳細な説明は省略する。なお、図23のステップS202の処理が設けられない(存在確率の更新が行われない)形態であってもよい。ステップS202の後、追跡検出部104は、検出部102からオブジェクト位置情報を取得し、追跡対象リストに追加する(ステップS301)。このとき、取得したオブジェクト位置情報が、すでに追跡対象リストに存在するオブジェクト位置情報(x、y、w)に近い場合は、その取得したオブジェクト位置情報を追跡対象リストに追加することはしない。ここで、取得したオブジェクト位置情報が、すでに追跡対象リストに存在するオブジェクト位置情報に近いとは、取得したオブジェクト位置情報が示す位置を中心として、検出したオブジェクトの大きさの2倍を半径に持つ円の範囲内に、すでに追跡対象リストに存在するオブジェクト位置情報が示す位置が含まれる場合は、同一のオブジェクトとみなして、その取得したオブジェクト位置情報を破棄する。
次に、追跡検出部104は、入力画像のうち、追跡対象リスト内の各オブジェクト位置情報が示す位置の近傍の領域に対してのみ、探索窓を走査させて、オブジェクトが存在するか否かを検出するオブジェクト検出処理を行う(ステップS302)。これは、一旦オブジェクトを検出すれば、そのオブジェクト位置に時間的な大きな変化はないと仮定し、オブジェクト検出処理の処理量を低減するためのものである。ここで、近傍の設定には、たとえばパーティクルフィルタを用いる方法が一般的である。
以上に説明したように、本実施形態では、入力画像のうち、検出されたオブジェクトの近傍の領域をオブジェクト検出処理の対象領域として設定し、その設定した対象領域に対してのみ、オブジェクト検出処理を繰り返すので、オブジェクト検出処理の処理量を低減しつつ、一旦検出したオブジェクトを見失ってしまうことを防止できる。また、本実施形態においても、上述の各実施形態と同様に、入力画像を分割する複数の処理グループのうち、予め設定された存在確率が高い処理グループの検出処理が優先的に行われるように検出順序が決定されるので、オブジェクトが検出されるまでの期待待機時間を短縮できる。すなわち、本実施形態によれば、オブジェクトが検出されるまでの期待待機時間を短縮できることと、オブジェクト検出処理の処理量を低減しつつ、一旦検出したオブジェクトを見失ってしまうことを防止できることの両方を達成できる。
(第4実施形態)
次に、第4実施形態について説明する。第4実施形態では、入力画像のうち、検出処理により検出されたオブジェクトの位置およびサイズを示すオブジェクト位置情報に基づいて、オブジェクトの実空間上の3次元位置を推定する推定部をさらに備える点で上述の各実施形態と相違する。以下、具体的な内容を説明する。なお、上述の各実施形態と共通する部分については適宜に説明を省略する。
図24は、第4実施形態の画像処理部312の機能構成例を示すブロック図である。上述の第1実施形態または第2実施形態との差分は、推定部105のみであるため、ここでは、推定部105の機能について説明する。なお、上述の追跡検出部104をさらに備える形態であってもよい。
推定部105は、検出部102からオブジェクト位置情報(x、y、w)を取得し、そのオブジェクト位置情報に基づいて、実空間上のオブジェクトの3次元位置(3次元座標値)を推定する。この際、オブジェクトの実際の3次元空間上のサイズはわかっていることが望ましいが、平均サイズとしてもよい。たとえば、成人の顔の横幅は、平均14cmであるという統計データがある。オブジェクト位置情報(x、y、w)から3次元位置(X、Y、Z)への変換は、ピンホールカメラモデルに基づいて行う。
なお、この例では、実空間上における三次元座標系を、以下のように定義する。図25は、本実施の形態における三次元座標系を示す模式図である。図25に示すように、本実施形態では、パネルの表示面(ディスプレイ面)の中心を原点Oとし、ディスプレイ面の水平方向にX軸、ディスプレイ面の鉛直方向にY軸、ディスプレイ面の法線方向にZ軸を設定する。ただし、実空間上における座標の設定方法はこれに限定されるものではない。
図26は、XZ平面上で検出されたオブジェクトの探索窓と、実空間上でのオブジェクトのX軸上の幅を表す図である。撮影部20のX軸方向の画角をθxとし、撮影部20によって得られた撮影画像のZ軸方向の焦点位置をFとし、オブジェクトのZ軸方向の位置をZとする。すると、図26中、AA’、BB’、OF、及びOZについては、相似関係により、AA’:BB’=OF:OZの関係が成立する。なお、AA’は、撮影部20の撮影画像における探索窓のX軸方向の幅を示す。BB’は、オブジェクトのX軸方向の実際の幅を示す。OFは、撮影部20から焦点位置Fまでの距離を示す。OZは、撮影部20からオブジェクトの位置Zまでの距離を示す。
ここで、焦点位置Fから撮影画像の端部までの距離であるFF’を、単眼カメラ(撮影部20)の水平解像度の半分の値wc/2とする。すると、OF=FF’/tan(θX/2)となる。
そして、撮影部20の撮影画像における探索窓のX軸方向の幅であるAA’を、探索窓のx軸方向の画素数とする。BB’は、オブジェクトのX軸方向の実際の幅であるが、オブジェクトの平均的な大きさを仮定する。例えば、顔であれば、平均的な顔の横幅は、14cmと言われている。
よって、推定部105は、撮影部20からオブジェクトまでの距離であるOZを、以下の式18により求める。
すなわち、推定部105は、撮影部20の撮影画像における探索窓の画素数によって示される幅に基づいて、オブジェクトの三次元位置のZ座標を推定することができる。また、図26中、AF、BZ、OF、及びOZについては、相似関係により、AF:BZ=OF:OZの関係が成立する。AFは、撮影部20の撮影画像における探索窓のX軸方向端部Aから焦点位置Fまでの距離を示す。また、BZは、オブジェクトのX軸方向の端部BからオブジェクトのZ軸方向における位置Zまでの距離を示す。
このため、推定部105は、BZを求めることで、オブジェクトの三次元位置のX座標を推定する。そして、YZ平面についても同様にして、推定部105は、オブジェクトの三次元位置のY座標を推定する。
(第5実施形態)
次に、第5実施形態について説明する。第5実施形態では、表示部10に表示される立体画像を視聴者が観察可能な視域を、上述の推定部105により推定された3次元位置に決定し、その決定した視域が形成されるように表示部10を制御する点で上述の第4実施形態と相違する。以下、具体的な内容を説明する。なお、上述の各実施形態と共通する部分については適宜に説明を省略する。
ここで、第5実施形態の画像処理部314の説明に先立ち、視域の設定位置や設定範囲を制御する方法について説明する。視域の位置は、表示部10の表示パラメータの組み合わせによって定まる。表示パラメータとしては、表示画像のシフト、表示素子11と光線制御素子12との距離(ギャップ)、画素のピッチ、表示部10の回転、変形、移動等が挙げられる。
図27〜図29は、視域の設定位置や設定範囲の制御を説明するための図である。まず、図27を用いて、表示画像のシフトや、表示素子11と光線制御素子12との距離(ギャップ)を調整することによって、視域の設定される位置等を制御する場合を説明する。図27において、表示画像を例えば右方向(図27(b)中、矢印R方向参照)にシフトさせると、光線が左方向(図27(b)中、矢印L方向)に寄ることにより、視域は左方向に移動する(図27(b)中、視域B参照)。逆に、表示画像を、図27(a)に比べて左方向に移動させると、視域は右方向に移動する(不図示)。
また、図27(a)及び図27(c)に示すように、表示素子11と光線制御素子12との距離を短くするほど、表示部10に近い位置に視域を設定することができる。なお、視域が表示部10に近い位置に設定されるほど、光線密度は減る。また、表示素子11と光線制御素子12との距離を長くするほど、表示部10から離れた位置に視域を設定することができる。
図28を参照して、表示素子11に表示する画素の並び(ピッチ)を調整することによって、視域が設定される位置等を制御する場合を説明する。表示素子11の画面の右端、左端ほど、画素と光線制御素子12との位置が相対的に大きくずれることを利用して、視域を制御することができる。画素と光線制御素子12との位置を相対的にずらす量を大きくすると、視域は、図28に示す視域Aから視域Cに変化する。逆に、画素と光線制御素子12との位置を相対的にずらす量を小さくすると、視域は、図28に示す視域Aから視域Bに変化する。なお、視域の幅の最大長(視域の水平方向の最大長)を視域設定距離と呼ぶ。
図29を参照して、表示部10の回転、変形、移動によって、視域の設定される位置等を制御する場合を説明する。図29(a)に示すように、表示部10を回転させることにより、基本状態における視域Aを視域Bに変化させることができる。また、図29(b)に示すように、表示部10を移動することにより、基本状態における視域Aを視域Cに変化させることができる。さらに、図29(c)に示すように、表示部10を変形させることにより、基本状態における視域Aを視域Dに変化させることができる。以上のように、表示部10の表示パラメータの組み合わせによって、視域の位置が定まる。
図30は、第5実施形態の画像処理部314の機能構成例を示すブロック図である。上述の第4実施形態との差分は、第2決定部106および表示制御部107であるため、ここでは、差分についてのみ説明する。なお、上述の追跡検出部104をさらに備える形態であってもよい。
第2決定部106は、上述の推定部105により推定された3次元位置を含むように視域を決定する。より具体的には以下のとおりである。第2決定部106は、推定部105により推定された3次元位置において立体画像を観察可能な視域を示す視域情報を算出する。この視域情報の算出は、たとえば、予めメモリ(不図示)内に、各表示パラメータの組み合わせに対応する視域を示す視域情報を記憶しておく。そして、第2決定部106は、推定部105から取得した3次元位置を視域に含む視域情報を該メモリから検索することによって、視域情報を算出する。
なお、これに限らず、第2決定部106による決定方法は任意である。例えば第2決定部106は演算によって、推定部105により推定された3次元位置を含む視域の位置を決定することもできる。この場合、例えば3次元座標値と、当該3次元座標値を含む視域の位置を決める表示パラメータの組み合わせを求めるための演算式とを予め対応付けてメモリ(不図示)に記憶しておく。そして、第2決定部106は、推定部105により推定された3次元位置(3次元座標値)に対応する演算式をメモリから読み出し、その読み出した演算式を用いて表示パラメータの組み合わせを求めることで、当該3次元座標値を含む視域の位置を決定することもできる。
表示制御部107は、第2決定部106で決定された位置に視域が形成されるように表示部10を制御する表示制御を行う。より具体的には、表示制御部107は、表示部10の表示パラメータの組み合わせを制御する。これにより、表示部10には、推定部105により推定されたオブジェクトの3次元位置を含む領域を視域とした立体画像が表示される。
以上に説明したように、本実施形態によれば、視域内に位置するように視聴者が自ら場所を移動する必要がないので、観察者の利便性が向上する。また、本実施形態においても、上述の各実施形態と同様に、入力画像を分割する複数の処理グループのうち、予め設定された存在確率が高い処理グループの検出処理が優先するように検出順序が決定されるので、オブジェクトが検出されるまでの期待待機時間を短縮できる。すなわち、本実施形態によれば、オブジェクトが検出されるまでの期待待機時間を短縮できることと、観察者の利便性を向上させることの両方を達成できる。
以上、本発明の実施形態を説明したが、上述の各実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら新規な実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
例えば上述の各実施形態では、光線制御素子12は、その光学的開口13の延伸方向が表示素子11の第2方向(列方向)に対して、所定の傾きを有するように配置されているが、傾きの大きさは任意に変更可能である。また、例えば光線制御素子12は、その光学的開口13の延伸方向が、表示素子11の第2方向に一致するように配置される構成(いわゆる垂直レンズ)であってもよい。
また、上述の各実施形態の画像処理部(30、300、310、312、314)は、CPU(Central Processing Unit)、ROM、RAM、および、通信I/F装置などを含んだハードウェア構成となっている。上述した各部(取得部101、検出部102、第1決定部103、追跡検出部104、推定部105、第2決定部106、表示制御部107)の機能は、CPUがROMに格納されたプログラムをRAM上で展開して実行することにより実現される。また、これに限らず、上述した各部の機能のうちの少なくとも一部を専用のハードウェア回路で実現することもできる。
また、上述の各実施形態の画像処理部(30、300、310、312、314)で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するようにしてもよい。また、上述の各実施形態の画像処理部(30、300、310、312、314)で実行されるプログラムを、インターネット等のネットワーク経由で提供または配布するようにしてもよい。また、上述の各実施形態の画像処理部(30、300、310、312、314)で実行されるプログラムを、ROM等の不揮発性の記録媒体に予め組み込んで提供するようにしてもよい。
さらに、上述の各実施形態および変形は、任意に組み合わせることもできる。