以下、本発明に係る実施例の情報処理を、図面を参照して詳細に説明する。なお、実施例に記載する構成は例示であり、本発明の範囲をそれらの構成に限定する趣旨のものではない。
<第1の実施形態>
まず、第1の実施形態として、テーブルトップインタフェースシステムのテーブル面に投影されたアイテムに対し操作者が行うタッチ操作を認識する処理の例を説明する。
図1(a)は、本実施形態に係る情報処理装置100を設置したテーブルトップインタフェースシステムの外観の一例である。操作面101は、テーブルトップインタフェースのテーブル部分であり、操作者は、操作面101をタッチすることでタッチ操作を入力することが可能である。ただし、本実施形態では、操作面101にタッチセンサは搭載されない。そのため、情報処理装置100は、操作面101とユーザが操作する指やペンなどの操作体が実際に接触したかではなく、接触したとみなせる程度に近接した状態をタッチ入力中の状態(以下、タッチ状態)検出することで、タッチ操作の認識を可能とする。
本実施形態では、操作面101の上方に、操作面を見下ろすようにして距離画像センサ102が設置される。距離画像とは、各画素の値に、当該距離画像を撮像する撮像手段の基準位置(例えばレンズ中心など)から、当該画素に撮像された被写体表面までの距離に対応する情報が反映された画像である。本実施形態において、距離画像センサ102が撮像する距離画像の画素値には、距離画像センサ102から、操作面101あるいはその上方に存在する物体表面までの距離が反映される。撮像された距離画像は、情報処理装置100に距離画像として入力される。情報処理装置100は、距離画像を解析することで操作者の手106の三次元位置を取得し、入力される操作を認識する。従って操作者は、操作面上の空間(操作面101と距離画像センサ102の間の空間)のうち、距離画像センサ102によって撮像可能な範囲において、手などの所定の物体を動かすことにより空間ジェスチャ操作を入力することが可能である。本実施形態では、赤外光の反射パターン(または反射時間)によって距離情報を取得する方式のセンサを利用する。ただし、例えばステレオカメラシステムや、赤外光発光素子と赤外受光素子を設置することで距離画像を得ることも可能である。また、操作面101を含む空間において、操作体の高さ方向を含む三次元の位置情報が得られる手段であれば、距離画像を撮像する形態に限らず、例えば静電センサや温度センサにより三次元の位置情報を得る方法でも、本実施形態を実施可能である。
また本実施形態では、可視光カメラ103が上方から操作面101を見下ろすようにして設置される。情報処理装置100は、可視光カメラ103を制御して、操作面101に載置された物体を撮像してその読み取り画像を得る書画カメラとして機能することができる。情報処理装置100は、可視光カメラ103によって得られる可視光画像や、距離画像センサ102によって得られる距離画像に基づいて、操作面101上の空間に存在する物体を検出し、さらに識別する。物体には、例えば、操作者の手、紙媒体や本などのドキュメントやその他の立体物を含む。ただし、図1(a)に例示するシステムの場合は、距離画像センサ102と可視光カメラ103の画角には、テーブル周囲に存在する操作者の頭部は含まれない。そのため得られた距離画像では、画像端部がユーザの腕(肩から先の部分)の何処か一部と交差する。
プロジェクタ104は、操作面101の上面に画像の投影を行う。本システムでは、操作者は投影された画像に含まれるアイテム105に対して、タッチや空間ジェスチャによる操作を行う。上述したように、本実施形態では、手106の検出および操作の認識には、距離画像センサ102で取得した距離画像を用いる。距離画像を用いることで、プロジェクタ104の投影光の影響で操作者の手の色が変化しても影響を受けにくいという利点がある。本システムの表示装置は、プロジェクタ104に替えて、操作面101を液晶ディスプレイとするなどで構成することもできる。その場合、可視光画像からの肌色領域を検出するなどして画像から人の手を検出する方式を用いても、投影光の影響は受けずに手の検出が可能である。
なお、操作面101を上方から見た画像が得られる構成であれば、必ずしも距離画像センサ102及び可視光カメラ103自体が上方に設置されている必要はなく、例えばミラーを用いて反射光を撮像するように構成しても構わない。プロジェクタ104も同様に、図1(a)の例では、斜め上方から見下ろすように操作面101上への投影を行うが、異なる方向に向けて投影された投影光を、ミラーなどを利用して操作面101に反射させてもよい。操作面101が鉛直方向に沿って設置されたような場合も同様である。
本実施形態では、操作面101上の三次元空間に図1に示すx、y、z軸を定義し、位置情報を扱う。図1(a)の例では、点107を座標軸の原点とする。ここでは一例として、テーブルの上面に平行な二次元がxy平面、テーブル上面に直交し上方に伸びる方向をz軸の正方向としている。本実施形態では、z軸方向は、世界座標系での高さ方向に相当する。しかしながら本実施形態は、ホワイトボードや壁面など、水平ではない面を操作面101とするシステムや、操作面が凹凸を有する場合や、MRを利用して生成された仮想面である場合にも適用可能である。
図1(b)は、距離画像センサ102によって撮像される距離画像とシステムの関係を表す図である。本実施形態において、距離画像センサ102は、画角に含む所定の空間の三次元の位置情報が反映された距離画像と、距離画像とは異なる二次元赤外画像とをそれぞれ取得する機能を持つ。本実施形態では、距離画像センサ102は、距離画像センサ102から操作面101方向に赤外光を照射し、被写体の表面で反射された反射光を、センサの受光素子で受光する。
本実施形態で利用する距離画像は、受光された反射光の位相遅れを計測することで、画素毎に反射するまでにかかった時間に対応する被写体表面までの距離を、画素値に反映させたものである。本実施形態では、距離画像センサ102は操作面101を見下ろすように距離画像を撮像するため、距離画像の画素値が表す距離情報は、距離画像センサ102から操作面101を見下ろす方向の奥行き方向の距離である。言い換えれば、距離画像の各画素値は、操作面101からの高さ方向の位置情報(z座標)を得るための情報を含む。ただし、本実施形態では、距離画像センサ102は、z軸に対して斜めに角度をもつように設置されている。従って、本実施形態では距離画像の画素値をそのままz座標として利用するのではなく、後述するようにセンサや設置環境に応じたパラメータを使った座標変換を施すことで、画像内に定義された位置情報を世界座標のxyz座標に変換して利用する。なお、距離画像センサ102が用いる距離の算出方法は、赤外パターン投影方式や視差方式でもよい。
また、本実施形態で利用する二次元赤外画像は、センサの受光素子で受光された反射光の強度を、画素値として有するものである。なお、赤外光を距離画像センサ102から照射せずに、環境光に含まれる赤外光が、被写体表面で反射された反射光を受光することでも、同様の赤外画像は得られる。また二次元赤外画像は赤外画像以外でもよく、可視光カメラ103で撮像するカラー画像やグレースケール画像等を取得してもよい。
本実施形態では、距離画像センサ102から得られる二次元赤外画像と距離画像は、サイズが一致(例えば、640[dot]×480[dot])一致しており、全ての画素が互いに対応する。平面上の座標が一致する画素には、同一被写体の同一の位置から反射された赤外光の反射時間(距離情報)あるいは強度が反映されている。なお、上記のような関係にある距離画像と二次元赤外画像が得られれば、両者の撮像手段は本実施形態の距離画像センサ102のように一体となったものである必要はない。すなわち、距離を含む三次元位置情報を得るセンサと、二次元の画像を撮像する画像センサを別に設置してもよい。
図1(b)において、画像108は、距離画像センサ102によって撮像される距離画像の内容の一例を表す。ただし、ここでは、画素値に反映された距離情報は省略し、被写体のエッジのみを明示する。操作面101及び原点107は図1(a)に対応している。範囲111は、距離画像センサ102の画角に相当する。以下では、画像端111と称する。
距離画像には、図1(b)に示すようにu軸及びv軸による二次元座標系が設定される。なお図1(b)の例では、距離画像の解像度は640[dot]×480[dot]とする。操作位置110の距離画像内の位置座標が(u,v)であり、距離画像センサ102から操作位置までの距離に相当する画素値がdであるとする。本実施形態では、このように距離画像内で定義される位置情報に対して、距離画像センサ102のレンズ特性および操作面101との相対位置関係等に基づく座標変換を施す。これにより、各画素の座標をテーブルに定義された実世界上の座標系にマッピングし、操作位置110について、実空間の三次元位置(x,y,z)を取得することができる。座標変換に利用する変換行列は、距離画像センサ102が設置された時に、予め調整作業を行い取得する。なお、三次元座標の算出に用いる距離dは、単一の画素値だけでなく、手領域内で操作位置110の近傍の数ピクセル分の画素を対象に、ノイズ除去処理や平均化処理を実施した上で特定してもよい。
斜線で示す領域109は、距離画像108に写っている操作者の手106の像である(以下では単に手領域109という)。本実施形態では、z座標に閾値処理を行うことで、テーブル表面である操作面101より高い位置に存在する被写体が写る領域を、手領域として抽出する。本実施形態では、検出される手のそれぞれに対して1箇所の操作位置を検出する。操作位置とは、操作者が手指を使って指し示していると推定される位置の座標である。本実施形態では、前提として、操作者がタッチ操作のために点を指定する場合には、1本だけ指を伸ばした「指さしポーズ」を取ることが規定される。1本指を延ばすポーズが、多くの人にとっては1点を指し示すのに自然な体勢だからである。従って、操作位置としては、手領域109のうち端部だと推定される位置を特定する。指差しポーズであれば、端部は指先に当たる。具体的には、距離画像から、手領域109を抽出し、手領域109のうち画像端111から最も遠い位置に存在する画素を示す座標を、指先にあたる1点とみなす。図1(b)に示される手領域109の場合、画像端111から最も遠い点が操作位置110として特定される。なお、操作位置の特定方法はこれに限らず、例えば、手領域から手の五指を検出して、所定の指の端部を特定してもよい。
また本実施形態では、フレームレートに従い繰り返し撮像される距離画像の各フレームで、手領域109が画像端111と交差する部分の中央を、手の侵入位置として定義する。図1(b)の手領域109の場合、侵入位置112が特定される。侵入位置112もまた、距離画像内に定義された位置情報を変換することで、実空間内での三次元位置情報として取得される。本実施形態では、距離画像から複数の手領域が検出された場合、そのそれぞれについて、操作位置及び侵入位置が特定される。そして、複数の手領域のそれぞれについてタッチ操作を認識する。ただし、指先が操作面101に近い高さに存在する場合、テーブルと指先の画素値の違いは極小さい。従って、分解能の大きさや検出誤差によっては、上記の閾値処理によって正確に指とテーブルを区別することは難しくなる。例えば、閾値が実際のテーブル面よりも高く設定され、指の先端部分が閾値を下回る部分であるとみなされると、特定される指先の位置は、実際には指の先ではなく、中間部あるいは根元となってしまうことが有り得る。この検出結果をそのまま、操作位置として利用した場合、ユーザが意図して指示している操作位置と、検出される操作位置がずれることになる。従って、ユーザが選びたいアイテムとは異なるアイテムが選択状態になってしまうなど、操作性を低下させる原因になり得る。
そこで本実施形態では、距離画像から得る三次元の位置情報だけでなく、別に取得する二次元の画像を利用して、操作位置の操作面方向の位置情報を検出する。より具体的には、操作位置の三次元の位置情報のうち、操作面に平行な方向の位置情報を特定するために、距離画像と二次元の赤外画像の両方から、操作体の端部とみなされる点とその位置情報を検出する。そして、いずれの位置を操作で指示された位置と認識するかを、状況に応じて選択する。
以下、本明細書では操作者がタッチ操作の入力に用いる操作体及びその端部の一例として、操作者の手106及びその指が利用されること想定する。ただし、本実施形態では操作体として、手指だけでなくスタイラスやロボットアームなどの器具を利用する場合にも適用可能である。なお操作体の端部とは、タッチ操作のために操作位置を指し示すのに用いられる部位を示すが、操作体の一部に属し、タッチ操作の入力が可能な部位であれば、突起形状の端部に限定せずともよい。
図2(a)は、本実施形態に係る情報処理装置100を含むテーブルトップインタフェースのハードウェア構成図である。中央処理ユニット(CPU)200は、RAM202をワークメモリとして、ROM201や記憶装置203に格納されたOSやプログラムを実行して、各種処理の演算や論理判断などを行い、システムバス204に接続された各構成を制御する。記憶装置203は、ハードディスクドライブや各種インタフェースによって接続された外部記憶装置などであり、実施形態の操作認識処理にかかるプログラムや各種データを記憶する。距離画像センサ102は、CPU200の制御に従い、アイテムが表示されるテーブルとアイテムを操作する操作者の手を含む、操作面101上の空間の距離画像を撮像し、撮影した距離画像をシステムバス204に出力する。本実施形態では、距離画像の取得方法として、環境光やテーブル面の表示の影響が小さい反射時間方式(Time-of-Flight方式)を基に説明するが、用途に応じて視差方式や赤外パターン方式などを利用することも可能である。プロジェクタ104は、CPU200の制御に従い、テーブルに操作対象となる画像アイテムを投影表示する。
なお上述したシステムでは、可視光カメラ103、距離画像センサ102、プロジェクタ104はそれぞれ情報処理装置100に入出力用のインタフェースを介して接続された外部装置であり、情報処理装置100と協同して情報処理システムを構成する。ただし、これらのデバイスは、情報処理装置100に一体化されていても構わない
図2(b)は、情報処理装置100のソフトウェアの構成を示すブロック図の一例である。これらの各機能部は、CPU200が、ROM201に格納されたプログラムをRAM202に展開し、後述する各フローチャートに従った処理を実行することで実現されている。そして、各処理の実行結果をRAM202に保持する。また例えば、CPU200を用いたソフトウェア処理の代替としてハードウェアを構成する場合には、ここで説明する各機能部の処理に対応させた演算部や回路を構成すればよい。
三次元情報取得部210は、距離画像センサ102によって撮像された距離画像をフレームレートに従う一定時間毎に取得し、RAM202に随時保持する。なお三次元情報取得部210が取得し、各機能部とやりとりする対象は、実際には画像データに対応する信号であるが、本明細書では単に「距離画像を取得する」として説明する。
操作体取得部211は、三次元情報取得部210によって取得された距離画像の各画素について、閾値判定やノイズ低減処理を施し、距離画像中の手領域を抽出する。手領域とは、入力された距離画像のうち、操作者が操作体として利用する手が被写体として写っている画素群である。第1検出部212は、操作体取得部211によって抽出された手領域の輪郭情報に基づき、操作体の端部に当たる1点を、第1の点として特定し、座標値を取得してRAM202に保持する。第1の点については、距離画像に基づいて三次元の座標情報が得られる。本実施形態では手領域の輪郭のうち画像端111から最も遠くに存在する画素点を示す座標を、第1の点として検出する。この際、本実施形態の第1検出部212は、手領域と画像端111が交差する部分の中心が、手領域の侵入位置として利用される。
二次元画像取得部213は、距離画像センサによって撮像された二次元赤外画像をフレームレートに従う一定時間毎に取得し、入力画像としてRAM202に随時保持する。なお実際には画像データに対応する信号に対する処理を行われるが、本明細書では単に「二次元赤外画像を取得する」として説明する。本実施形態では、入力画像として利用される二次元赤外画像は、距離画像と同一の撮像手段によって撮像されるが、両者は異なる画像である。領域設定部214は、入力画像の中に、第1検出部212によって検出された第1の点に相当する画素を含む注目領域を設定する。本実施形態では、指先の方向に対応するベクトルを生成し、ベクトルの伸びる先を含むような注目領域を設定する。第2検出部215は、入力画像のうち、領域設定部214によって設定された注目領域に含まれる領域に写る被写体の形状に基づいて、操作体の端部に当たる1点を、第2の点として特定し、座標値を取得してRAM202に保持する。ただし、二次元赤外画像から得られる座標は、二次元である。本実施形態では、第1の点の高さ(z座標)によってタッチ操作の入力中の状態を検出したときに、第2の点の二次元座標(x、y座標)を使って指示されている位置情報を認識するといった処理を行う。従って、第2の点について高さ情報は必ずしも必要ない。ただし、三次元方向の位置情報を利用する必要がある場合は、図1(b)で説明したように距離画像のうち第2の点の相当する画素の画素値を補正するなどして、高さ方向の座標(z座標)を算出するなどしてもよい。
認識部216は、操作体の端部によって入力される操作を認識する。本実施形態では、操作体の端部の位置を操作位置と言う。操作位置は、第1の点あるいは第2の点の位置情報に基づいて決定される。本実施形態では、第1の点を優先的に操作位置として決定する。そして、距離画像から検出された操作位置の、操作面101に対する近接の度合いに応じて、情報処理装置100が操作体によるタッチ入力中の状態かを判定する。例えば、第1の点と操作面101の間の距離(高さに相当するz座標)が所定の閾値より小さい場合は、タッチ入力中と判定する。そしてタッチ入力中の状態で、操作体によって指示された操作面101上の位置を追跡することで、タッチ、リリース、ムーブ、フリック、ピンチ、ローテート等のタッチイベントを生成し、表示制御部217に通知する。ただし、操作体によって指示された操作面101上の位置としては、第1の点あるいは第2の点の、操作面に平行な二次元の位置情報(xy座標)のいずれかを選択して利用する。またさらに、認識部216は、操作体領域の形状を判定する。例えば、指の数や指の方向や手の方向等を判定する。表示制御部217は、認識部216により通知されるユーザ操作に応じて実行される各処理の結果を反映した描画データを生成し、プロジェクタ104に出力することで、操作面に表示する内容を制御する。ユーザ操作とは、操作位置や操作位置の動きや操作体領域の形状(ポーズ)等によって定義され、情報処理装置100に対して何らかの指示を入力することができるものである。
図3は、本実施形態における情報処理装置のメイン処理の流れを表すフローチャートである。本実施形態では、情報処理装置100の電源がONになると、まず、図3のステップS301において、表示制御部217が、記憶装置203から取得したデータに基づいてUI部品を配置した画面を生成し、プロジェクタ104へ出力する。そして、プロジェクタ104が操作面101の上面に画面を投影する。
次に、ステップS302において、三次元情報取得部210が、距離画像センサ102から距離画像を取得する。また、二次元赤外画像取得部213により取得された二次元赤外画像と距離画像を取得する。ちなみに、距離画像センサ102は、情報処理装置の電源がONになっている間、操作面101の上面の操作領域の二次元赤外画像と距離画像を、所定の時間間隔で撮像する。
ステップS303において、操作体取得部211が所定の操作体(ユーザの手や腕)を検出する。操作体が検出された場合(S303、YES)は、ステップS304に進む。一方、操作体が検出されなかった場合(S303、NO)は、ステップS302に処理が戻り、操作体が検出されるまでステップS302とS303の処理を繰り返す。
ステップS304において、操作位置の決定処理が実行される。ステップS304の内容は、図4のフローチャートを参照して後述する。
ステップS305において、認識部216が、ステップS304で決定された操作位置に基づいて、情報処理装置100に入力された操作を認識する。例えば、操作位置の操作面に対する近接の程度を表す高さ(z座標)が、所定の閾値を下回る場合には、タッチ操作を認識する。そして、認識結果を表す情報を表示制御部217に通知する。このとき、操作体がタッチによって指示する操作面上の位置(xy座標)は、ステップS304によって決定された操作位置のxy座標である。そしてステップS306において、表示制御部217が、認識された操作に応じて、プロジェクタ104によって投影されている画面中のオブジェクト(画像、データ、UI等)の表示を更新する。ステップS307において、情報処理装置の電源がOFFにされたか否かを判定する。電源がOFFされた場合(S306、YES)は、情報処理装置100は全ての処理を終了する。一方、電源がOFFにされていない場合(S306、NO)は、ステップS302の処理へ戻る。
図4は、本実施形態における操作位置の決定処理(S304)を表すフローチャートである。まず、ステップS401において、第1検出部212が、操作体取得部211が取得した手領域に基づいて、第1の点を、操作位置として検出する。本実施形態では、手領域と画像端111の交差部分の中心を侵入位置とし、手領域に含まれる画素のうちもっとも侵入位置から遠い画素を、距離画像における指先位置とみなす第1の点として検出する。ここで、検出される第1の点の位置情報は距離画像に基づいて得られる三次元の位置情報(x,y,z座標)である。従って、ステップS401において、操作位置の位置情報として三次元の位置情報(x,y,z座標)が得られる。
ステップS402では、認識部216が、ステップS401で取得された操作位置の高さ(z座標)と、所定の高さを表す閾値T1を比較し、閾値T1以下かを判定する。ここで、閾値T1は、第1の点が、指先の位置を正確に検出したものである妥当性を判断するための閾値である。上述した通り、指先が操作面101に近づいている、すなわち指先の操作面101からの高さが低い場合、センサの分解能の大きさや検出誤差によって、手領域の輪郭が正確ではない可能性が比較的高まる。従って、ステップS402では、距離画像とは異なる手段を使って指先の位置の精度を向上させる処理を行う必要の有無を判定している。本実施形態では、操作位置の高さが閾値T1以下である場合を、距離画像とは異なる手段を使って指先の位置の精度を向上させる処理を行う必要がある場合とみなす。操作位置の高さが閾値T1以下である場合(S402、YES)は、ステップS403以降の処理で、二次元赤外画像を使ってさらに操作位置の位置情報を精度よく決定する。操作位置の高さが閾値T1より大きい場合(S402、NO)は、図4の処理を終了し、S305へ進む。
次に、ステップS403において、第2検出部215が、距離画像に基づいて指先の方向を表す情報を取得する。指先方向とは、手の中心位置を始点とし、操作位置を終点とする方向とする。なお、手の中心位置とは、手領域の最も広い場所の中心点とする。本実施形態は、指先方向をベクトルとして求める。ステップS404において、領域設定部214が、二次元赤外画像内で操作位置を始点とし、指先方向ベクトルを含む領域を、注目領域として決定する。ステップS405において第2検出部215が、二次元赤外画像の注目領域内で、第2の点を検出する。具体的には、注目領域内でエッジ抽出を行い、エッジと注目領域の境界により囲まれた領域で、かつ操作位置を含む領域を、指先領域として検出する。検出された指先領域の端部を、指先に相当するとみなすことができる第2の点とする。ここで検出される位置情報は、操作面101に平行な二次元の位置情報(xy座標)である。なお、エッジが途切れる場合があるので、途切れたエッジ間をつなぐ補完処理を行うことが好ましい。ただし、指先領域を検出する方法は、色情報を用いた背景差分や移動領域検出でもよい。
ステップS406において、認識部216が、第2の点が所定の条件を満たすかを判定する。ここで所定の条件とは、ステップS401で第1の点に基づいて定義された操作位置の三次元位置情報のうち、操作面101に平行な二次元の座標情報が、妥当であるか、あるいは、第2の点の位置情報で補正すべきかを判定するための条件である。例えば、距離画像から第1の点を検出するときに、手領域の操作面101に近い部分の輪郭形状が正確に得られていなかった場合、第1の点のxy座標として得られた値は、実際の指先とはずれている可能性がある。一方で、第2の点のxy座標は、距離画像とは別の二次元赤外画像から得られた値であり、上記のような問題が発生している可能性は低い。ステップS406では、操作面によって操作面上で指示された位置として、第1の点と第2の点のいずれの位置を採用すべきかを判定している。本実施形態では、所定の条件として、第2の点の指先方向ベクトルからの距離が、基準値より小さい場合は、所定の条件を満たすとする。この判定結果は、第2の点が指先の位置方法で補正するのが妥当であることを意味する。一方、所定の条件を満たさない場合は、第2の点と第1の点のかい離が大きいため、第2の点の方が妥当であるとは言い切れない場合を意味する。第2の点の指先方向ベクトルからの距離が近く、所定の条件が満たされる場合は(S406、YES)は、S407へ進む。一方、第2の点の指先方向ベクトルからの距離が遠く、所定の条件が満たされない場合は(S406、NO)は、図4のフローチャートの処理を終了する。
ステップS407において、第1検出部212が、S404で検出した第2の点の位置で、操作位置の三次元位置情報のうちxy座標を、第2の点のxy座標で補正する。そして、図4のフローチャートの処理を終了する。このように、本実施形態では、ステップS407の処理が実行された場合、ステップS305の操作認識処理が実行される際には、第2の点のxy座標が、指先によって指示される操作面101上の位置として認識される。一方で、ステップS407の処理が実行されなかった場合、ステップS305の操作認識処理が実行される際には、第1の点のxy座標が、指先によって指示される操作面101上の位置として認識される。
ここで、上述した閾値T1が、指先が操作面101にタッチしているとみなされるかを判定するための閾値T2より小さい値として設定されている場合、操作位置のz座標は、ステップS407の処理後も第1の点に関して検出されたz座標が維持して構わない。なぜなら、ステップS407は、第1の点のz座標が、閾値T1以下である場合にのみ実行されているため、z座標が閾値T2を下回ることは自明であるからである。しかしながら、タッチ閾値T2と比較する目的に限らず、第2の点についてもz座標を得る必要がある場合は、距離画像において第2の点のxy座標に対応する画素を参照し画素値を使ってz座標を算出すればよい。この場合、第1の点の三次元位置情報か、第2の点の三次元位置情報のいずれかが選択的に、操作位置として認識されることになる。
次に、図5から図8を参照して、ユーザの手の状態の具体例に対応付けて、本実施形態の情報処理装置100による動作を説明する。図5〜図8は、ユーザが操作面101の上空に手を差し伸べてから、指先を操作面101に接触させてタッチ操作を入力する様子を段階的に説明する。各段階において特徴的な処理が行われるステップの番号を括弧書きで示す。
まず、ユーザの指が操作面101から離れた位置にある状態を、図5(a)(b)を用いて説明する。図5(a)は時刻t1の距離画像の一部を示し、図5(b)は時刻t1の操作面101上の空間を側面(y方向)から見た図である。まず、距離画像センサ102から、時刻t1の距離画像と二次元赤外画像が取得される(S302)。取得した距離画像から検出された手領域は、図5(a)にグレーの領域として示される。ここで時刻t1における操作体を、操作体Aとする。操作体Aは、ユーザの手と腕である。なお手とは、腕のうち手首より先(指側)の全ての部分であり、5指、掌、甲といった部位が含まれる部位である。
まず、本実施形態では、距離画像から検出された手領域から、第1の点が操作位置として検出される(S401)。図5(a)に示すように、まず侵入位置p1を検出し、手領域の中で侵入位置p1から最も遠い画素が、第1の点p2として検出される。さらに、距離画像内の位置情報と画素値に基づいて、第1の点p2の実空間における三次元位置(x2,y2,z2)が取得される。そして、第1の点p2の操作面からの高さ(z2)が閾値T1以下かを判定(S402)され、図5(a)の場合は閾値T1以下でないため、引き続き第1の点から得られた三次元位置(x2,y2,z2)を操作位置として、操作の認識が行われる。本実施形態では、タッチ操作を認識するため、指先と操作面101との近接の程度を表す、操作位置の高さ(z座標)を、閾値T2と比較する。z座標が閾値T2を下回る場合を、指先と操作面101との近接の程度が、タッチ状態であるとみなせる程度に近いと判定する。図5(a)の状態では、操作体Aは操作面101よりも十分高い位置で維持されており、操作体の高さz2は、閾値T2より大きいため、タッチ状態とはみなされない。
次に、図6(a)(b)を参照して、ユーザの指先が、操作面101に接触した状態での情報処理装置100の動作例を説明する。ただし、ここでは、指先が操作面101と極近いことによって、距離画像から得られた手領域の輪郭のうち、指先の周辺の精度が低くなってしまう場合を特に説明する。図6(a)は時刻t2において取得される距離画像の一部を示す。図6(b)は、時刻t2において操作面101上の空間をy方向から見た図である。時刻t2は時刻t1より後の時刻である。
距離画像センサ102から、時刻t2の距離画像と二次元赤外画像が取得される(S302)。取得した距離画像から取得された手領域を、図6(a)にグレーの領域として示す。時刻t2での操作体を操作体Bとする。このときの手領域では、操作体Bのうち、指先の一部に相当する部分が欠けている。これは、距離画像センサ102の分解能あるいは検出精度が十分でないため、重なった状態の操作面101とユーザの指の境界を、距離情報によって抽出することが困難となったためである。この場合も、本実施形態では、手領域に基づいて侵入位置p3を検出し、手領域に含まれるうち侵入位置p3から最も遠い画素を、第1の点p4として検出する(S304)。さらに、検出された第1の点p4の実空間における三次元位置(x4,y4,z4)を、操作位置の三次元位置情報として取得する。
ここで、検出された第1の点p4の座標(x4,y4,z4)のうち、操作面101からの高さに相当するz座標が、閾値T1よりも小さいとする。このとき本実施形態では、操作位置の操作面からの高さが閾値T1以下と判定されることで(S402でYES)、操作位置の操作面に平行な二次元での位置情報を、二次元赤外画像からも検出することになる。具体的にはまず、距離画像において、操作体Bの指先方向ベクトルAを作成する(S403)。図7(a)は、距離画像における指先方向の決定方法、図7(b)は二次元赤外画像における注目領域の決定方法の概要を表す図である。図7(a)で示すように、本実施形態では、操作体Bの最も幅が広い場所の中心位置を、手の中心位置p5として取得する。そして、取得した手の中心位置p5を始点とし、第1の点p4を終点とする指先方向ベクトルAを作成する。次に、図7(b)で示すように、二次元赤外画像の一部に注目領域として設定する(S404)。本実施形態では、距離画像で算出された指先方向ベクトルAの始点を、距離画像で検出された第1の点p4に変更し、指先方向ベクトルBを作成する。単に指先方向ベクトルAを延長するのではなく、始点を移動させることで、現実的な指の長さの範囲を考慮して、指先の探索範囲を絞り込むことができる。ただし、指の曲がり具合などによって、第1の点と手の中心位置との距離は変わるため、場合によっては始点の移動はせず所定の長さに指先方向ベクトルAを延長させることで、指先方向ベクトルBを設定してもよい。
そして本実施形態では、二次元赤外画像上で、指先方向ベクトルBを包含する部分領域を、注目領域として決定される。本実施形態の場合、距離画像と二次元赤外画像は、画素が1対1で対応するので、距離画像内で定義した指先方向ベクトルBをそのまま二次元赤外画像に複写して考えることができる。図8(a)は、二次元赤外画像において決定された注目領域を拡大したものである。本実施形態では、注目領域内に写る被写体の輪郭の形状に基づいて、第2の点を検出する(S405)。具体的には、注目領域内でエッジ抽出を行い、エッジと注目領域の境界線で囲まれた領域であり、かつ距離画像で検出された第1の点p4を含む領域を指先領域とする。検出された指先領域の端部となる画素を特定し、第2の点p6とする。そしてp6の、操作面101に平行な二次元での位置情報(x6,y6)を取得する。また必要な場合は、距離画像内でのp6を参照し、z座標を含むp6の三次元位置情報(x6,y6,z6)を取得する。
検出された第2の点p6の座標によって、この時点では第1の点の座標情報によって定義されている操作位置の座標情報を補正すべきかを判定する(S406)。本実施形態では、xy平面における、第2の点p6と指先方向ベクトルBの距離d1が閾値T3以下であることを所定の条件として判定を行い、この条件が満たされる場合は補正を実行する。図8(a)の場合は、距離d1が閾値T3以下であるため、第2の点p6の(x6,y6)が、操作位置のxy座標として妥当であるとみなされる(ステップS406でYES)。そして、第1の点p4を第2の点p6で操作位置の補正が実行される(ステップS407)。なお必要に応じて、距離画像から第2の点のz座標z6を求めてもよい。
図8(b)に、補正された操作位置とその三次元座標を示す。ただし、図8(b)では、第2の点のxy座標で示される距離画像の画素値を使って、補正された操作位置のz座標z6を求めた場合を示す。このように、第1の点p4の高さz4が閾値T1を下回る場合には、z4の第2の点の高さz6のいずれもタッチ閾値T2を下回る。従って、z6を求めたか否かに寄らず、ステップS305では、第2の点のxy座標が、ユーザの指先によって指示された操作面101上の位置として認識される。例えば、操作面101に投影されたUIボタンのうち、指示された位置(x6、y6)を包含するボタンが選択状態になり、それに応じて投影内容が更新される(ステップS306)。
以上のように、本実施形態では、三次元位置情報に基づいて検出した操作体の端部の位置情報を、状況に応じて二次元画像から検出した操作体の端部の位置情報で補う。このとき、二次元画像のうち、操作体の端部の位置を探索する範囲を、三次元位置情報に基づいて検出した操作体の端部の位置情報によって定まる注目領域の内部に限定する。これにより、全体の計算量を削減し、かつ第1の点検出精度も向上することができる。
<変形例1>
ここで第1の実施形態の変形例1として、別の方法で注目領域を設定する例を、図9及び図10を参照して説明する。なお、図9、図10では、図7〜図8と重複する要素には同じ番号を付与している。
まず、図9(a)で示すように、距離画像から検出した第1の点p4を中心とする所定の大きさの領域を、注目領域として設定する。ここで注目領域とは、検出された第1の点が、実際には指の端部から根元に至るまでのどこであっても、指先が包含される程度の大きさの領域が設定される。注目領域の大きさは、第1の点p4の高さ(z4)に応じて所定の値が選ばれるとする。例えば、注目領域の大きさには、距離画像センサ102と手(第1の点または手の中心位置)の距離や、手領域の大きさを考慮してもよい。ただし、腕はフレームによって写り込みの度合いの変動が大きい。従って、手領域の大きさを考慮する場合は、腕のうちフレーム間で大きさの違いが生じにくい手(手首から先)の部分の大きさを表す領域を定義して、その大きさを扱う。例えば、手の中心位置付近での手領域の幅を手領域の大きさとする。その上で、手領域がある程度大きい場合(センサと手が近い場合に相当)は、注目領域を大きく設定し、手領域が小さい場合(センサと手が遠い場合に相当)は、注目領域を小さく設定するなど、注目領域の大きさを選択する。
次に、図9(b)は注目領域を拡大したものである。注目領域内の操作体Bの重心位置p7(x7,y7,z7)を算出する。算出された重心位置p7を始点とし、第1の点p4を終点とする指先方向ベクトルCを作成する。次に、図10(a)で示すように、作成された指先方向ベクトルCの始点を第1の点p4に変更し、指先方向ベクトルDを作成する。そして、二次元赤外画像の中で、指先方向ベクトルDを包含する部分領域を、注目領域として設定する。
図10(b)は、変形例1によって設定した、二次元赤外画像内の注目領域を拡大したものである。第1の実施形態と変形例では、第2の点が実際の指先位置を正確に抽出できていたとしても、指先方向ベクトルからの距離が離れている場合は、第2の点が操作位置としては利用されない。従って、指先方向ベクトルはより正確に指の方向を表していることが望ましい。しかしながら、指先方向ベクトルBは手の中心位置を基点としているため、操作している指や操作時の手の形状等の条件により、実際との指の方向との差分が大きい場合があった。例えば、図8(a)と図10(b)を比較すると、第1の実施形態の指先方向ベクトルBよりも、変形例1の指先方向ベクトルDの方が、より実際の指先の方向に近いことがわかる。一方、ベクトルを生成する処理に必要な計算量は、指先方向ベクトルDより指先方向ベクトルBの方法の方が少ない。注目領域の設定方法は、情報処理装置100あるいはアプリケーションが、処理スピードを優先すべきものかなどに応じて、選択的に用いられても良い。
<変形例2>
さらに変形例2として、指先方向ベクトルを使わずに、注目領域を決定する方法を記載する。図11は、変形例2における、操作位置の決定処理(S304)を表すフローチャートである。図4のフローチャートと共通する処理ステップは、同じ番号を付与し、詳細な説明は省略する。
変形例2では、ステップS401で距離画像から検出された第1の点が検出され、その高さが閾値T1より大きい場合はステップS1100に進む。ステップS1100では、領域設定部214が、二次元赤外画像において、第1の点のxy座標から特定される、この時点での操作位置を基準して、所定の大きさの注目領域を決定する。図12(a)は、距離画像で検出された第1の点p4の位置を中心として、二次元赤外画像内に、所定の大きさの注目領域Cが決定された様子を表す。ここで、注目領域の大きさは、変形例1で注目領域を設定した考え方と同様、手領域がある程度大きい場合(センサと手が近い場合に相当)は、注目領域を大きく設定し、手領域が小さい場合(センサと手が遠い場合に相当)は、注目領域を小さく設定する。
ステップS1101において、第2検出部215が、二次元赤外画像の、注目領域C内の部分から、操作体が被写体として写る画素群である手領域Bを検出する。具体的には、注目領域C内でエッジ検出を行い、検出されたエッジと注目領域Cの境界線により囲まれ、かつ第1の点p4を含む領域を手領域Bとして取得する。
ステップS1102において、第2検出部215が、距離画像でも同様に、第1の点を中心とした所定の大きさの注目領域Cを設定し、距離画像から検出されている手領域と、注目領域Cに含まれる領域を手領域A(図12(a))とする。手領域Aと、ステップS1101で取得された手領域Bの形状の差異の大きさが、小さいとみなせる程度かを判定する。具体的には、手領域Aと手領域Bの、重複しない部分の面積を面積Dとして算出し、面積Dと所定の閾値D1の大きさを比較することで判定を行う。例えば、面積Dが閾値D1以下の場合は、手領域Aと手領域Bの形状の差異の大きさが小さいとみなし(S1102、YES)はステップS1103へ進む。面積Dが閾値D1より大きい場合は、手領域Aと手領域Bの形状の差異の大きさが大きいとみなし(S1102、NO)、操作位置の補正を行わずに図3のフローチャートに戻る。
ステップS1103において、第2検出部215が、二次元赤外画像の、注目領域C内の手領域Bの輪郭の形状に基づいて、操作体の端部とみなされる位置を第2の点p6として検出する。ステップS1104において、認識部216が、操作位置のxy座標を、第2の点p6のxy座標で補正する。そして、図3のフローチャートに戻る。変形例2によれば、指先方向ベクトルを検出しなくても、手領域の形状により第1の点を補正することができる。
<第2の実施形態>
第1の実施形態の情報処理装置は、操作位置を特定し、操作面上で指定された位置に基づく操作を認識した。第2の実施形態では操作体(手領域)の形状に基づいて、操作体であるユーザの手の姿勢に対応する操作を認識する。例えば、上述した指差しポーズ、その他にも片手の指を3本伸ばして2本を曲げた姿勢、全ての指を伸ばした姿勢、などを識別することで、予めそれぞれの姿勢に対応付けられた指示として認識する。また例えば、それぞれの姿勢が維持された状態での、操作体の移動軌跡の形状に基づいて、各種指示を認識する。
第2の実施形態は、第2の実施形態と同じ構成の情報処理装置100によって実行可能である。ただし、メイン処理は、図3のフローチャートに代わって図13のフローチャートに従って行われる。ここでは図3との差異のみ説明する。
図13のフローチャートでは、ステップS1301において、ステップS303で検出された手領域を補正する処理を行う。図14は、第2の実施形態における手領域の決定処理(S1301)を表すフローチャートである。まず、ステップS1401において、第2の距離取得部206が、手領域Cの最低点p8(第1の点)の高さz8を取得し、高さz8が閾値T1以下と判定された場合(S1401、YES)は、S1402に進む。
ステップS1402において、領域設定部214が、手領域Cの最低点p8を基準して注目領域Dを決定する。図15(a)に示すように、距離画像で検出された最低点p8を中心として、任意の大きさの注目領域Dを決定する。なお、注目領域の大きさは、距離画像センサとの距離を考慮し、距離が近い程大きく、距離が遠い程小さいことが好ましい。
ステップS1403において、第2の操作体検出部310が、決定された注目領域D内の二次元赤外画像で、手領域Dを検出する。具体的には、注目領域D内でエッジ検出を行い、検出されたエッジと注目領域Dの境界線により囲まれ、かつ最低点p8を含む領域を手領域Dとして検出する。ステップS1404において、第2の操作体検出部310が、二次元赤外画像の注目領域D内の手領域Dを手領域とする。
図13のフローチャートに戻り、ステップS1302において、認識部216が手領域Dの形状から、操作体の姿勢が、辞書に登録されたいずれの姿勢であるかを判定する。そして、判定された姿勢に対応づけられた指示が認識される。例えば、図15(b)のように、手領域Dの形状が3本指を伸ばした姿勢であると判定された場合には、操作メニューの一覧を表示させる指示として認識する。その場合、ステップS306では、表示制御部217により、操作メニューを操作面101に投影させる表示更新が実行される。本実施形態によれば、操作位置として点の座標を指示する操作だけでなく、操作体の姿勢によって入力される操作も精度よく認識することができる。
<その他の実施形態>
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。