(57)【特許請求の範囲】
【請求項１】
人が手を動かして操作を行う空間内の位置情報が反映された入力画像を取得する画像取得手段と、
前記画像取得手段によって取得された入力画像のうち前記人の手が写る部分に反映された前記位置情報に基づいて、前記人の手のうちの複数の指先のそれぞれの位置情報を検出する位置検出手段と、
前記位置検出手段によって検出された前記複数の指先の関係を使って、前記複数の指先のうち所定の対象面にタッチしたかを判定する処理の対象とする指先を特定する特定手段と、
前記特定手段によって特定された指先について前記位置検出手段によって検出された位置情報と、前記所定の対象面の位置情報とによって示される、前記特定された指先と前記所定の対象面との近接の程度に基づいて、前記指先によって前記所定の対象面上に入力されるタッチ操作を認識する認識手段と、
前記認識手段の前記近接の程度を判定するための条件として、閾値を決定する決定手段とを備え、
前記認識手段は、前記位置検出手段によって検出された前記複数の指先のそれぞれの位置情報が、前記決定手段によって決定された閾値よりも前記所定の対象面に近接していることを表す場合、前記指先によって前記所定の対象面がタッチされたと判定することを特徴とする情報処理装置。
【請求項２】
前記特定手段は、前記位置検出手段によって検出された前記複数の指先の位置情報によって、最も前記所定の対象面に近いことが示される指先を特定し、前記複数の指先のうち他の指先の前記特定された指先に対する相対的な位置関係に基づいて、前記複数の指先のうちさらに前記判定する処理の対象とする指先を特定する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記特定手段は、繰り返し取得される前記入力画像から前記位置検出手段によって検出された前記複数の指先の位置情報によって、最も前記所定の対象面に近づくスピードが速いことが示される指先を特定し、前記特定された指先のスピードと他の指先が前記所定の対象面に近づくスピードの相対的な関係に基づいて、前記複数の指先のうちさらに前記判定する処理の対象とする指先を特定する
ことを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
前記認識手段は、前記所定の対象面にタッチした指先が複数存在する場合、該複数の指先によって入力されるマルチタッチ操作を認識することを特徴とする請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項５】
前記入力画像は、前記空間を上方から見下ろす画角で撮像された距離画像であって、前記距離画像の各画素値には、前記所定の対象面からの高さに相当する方向の位置情報が反映されることを特徴とする
請求項１乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
前記決定手段は、前記入力画像から抽出される１つの人の手に含まれる複数の指先に対して、各指先の位置情報の相対的な関係に基づいて前記条件を決定する
ことを特徴とする請求項１乃至５のいずれか１項に記載の情報処理装置。
【請求項７】
前記位置検出手段によって検出された複数の指先の種類を識別する識別手段を更に備え、
前記認識手段は、前記識別手段によって識別された特定の種類の指に対して、前記閾値を決定することを特徴とする請求項１乃至６のいずれか１項に記載の情報処理装置。
【請求項８】
画像取得手段により、人が手を動かして操作を行う空間内の位置情報が反映された入力画像を取得する画像取得工程と、
位置検出手段により、前記取得された入力画像のうち前記人の手が写る部分に反映された前記位置情報に基づいて、前記人の手のうちの複数の指先のそれぞれの位置情報を検出する位置検出工程と、
特定手段により、前記検出された前記複数の指先の関係を使って、前記複数の指先のうち所定の対象面にタッチしたかを判定する処理の対象とする指先を特定する特定工程と、
認識手段により、前記特定された指先について前記位置検出工程で検出された位置情報と、前記所定の対象面の位置情報とによって示される、前記特定された指先と前記所定の対象面との近接の程度に基づいて、前記指先によって前記所定の対象面上に入力されるタッチ操作を認識する認識工程と、
決定手段により、前記近接の程度を判定するための条件として、閾値を決定する決定工程とを有し、
前記認識工程では、前記検出された前記複数の指先のそれぞれの位置情報が、前記決定された閾値よりも前記所定の対象面に近接していることを表す場合、前記指先によって前記所定の対象面がタッチされたと判定することを特徴とする情報処理装置の制御方法。
【請求項９】
コンピュータを、に、請求項１に記載された情報処理装置として機能させるプログラム。
【請求項１０】
請求項９に記載されたプログラムを格納したことを特徴とするコンピュータが読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像に基づいてタッチ操作を認識する技術に関する。
【背景技術】
【０００２】
近年、プロジェクタによる重畳表示を行う新しいユーザーインターフェース（以下、ＵＩ）システムが開発されている。上述のシステムでは、テーブルや壁、あるいは文書や物体にボタン等のタッチ操作可能なユーザーインターフェース部品（以下、ＵＩ部品）を投影し、ＵＩ部品をユーザがタッチ操作する。上述のシステムは、大型のディスプレイを備える装置に比べると小さく構成することが可能であるため持ち運びが比較的容易であり、かつ物理媒体と電子媒体を組み合わせたリッチなインタラクションが可能になるといった利点がある。上述のシステムにおいては、タッチパネルを利用せず、様々な物体に対象面を設け、対象面に対するタッチ操作を認識するために、センサやカメラ等で撮像した画像を使って、ユーザの指などの操作体が対象面に接触したことを検出することが多い。具体的には、対象面からの距離に閾値を設定し、閾値よりも対象面に近い範囲に指先が存在する状態を、タッチ中の状態とみなす。
【０００３】
特許文献１には、距離センサを用いて指先と対象物の３次元位置を取得し、指の速さや指と対象物との距離によってタッチ認識を行う方法が開示されている。また、特許文献２では、操作体のうち最も対象面に近い位置を指先位置として決定するため、手の複数の指先のうち、最も対象面に近い指先の位置を特定してその位置を指先位置とすることが開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１４−１５７５１５号公報
【特許文献２】特開２０１４−１４２６９５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ユーザが複数の指のうちの一部で対象面をタッチする際には、タッチに用いられる指の動きに付随して、タッチに用いられない他の指が対象面に近づく現象がある。タッチパネルのように直接物体が接触したことを検出するデバイスを利用する場合であれば、そのようなタッチに利用されない指の動きがタッチ検出の精度に影響することはない。しかしながら、撮像画像を用い、操作体の対象面からの距離と閾値の比較に基づいてタッチを検出する場合には、タッチに利用することが意図されない指までが、閾値よりも対象面に近い範囲に侵入してしまうことでタッチが検出されることがありうる。一方で、マルチタッチ操作と呼ばれる複数の指を利用するタッチ操作が入力される場合には、ユーザが意図を持って複数の指を同時に対象面に近づけることもある。
【０００６】
従来技術では、複数の指がタッチ対象面に近接する場合、操作に用いられない指が含まれる可能性と、マルチタッチ操作のために複数の指がタッチに用いられる可能性の両方が存在しえること、それらを区別することは考慮されていない。
【０００７】
本発明は上記課題に鑑みてなされたものであり、所定の対象面に対する指のタッチを両者の近接の程度に基づいて検出する場合において、操作に利用される指に連動して動いてしまう他の指の影響により生じるタッチ操作の誤認識を低減することを目的とする。
【課題を解決するための手段】
【０００８】
本発明は、上記課題を解決するため、人が手を動かして操作を行う空間内の位置情報が反映された入力画像を取得する画像取得手段と、前記画像取得手段によって取得された入力画像のうち前記人の手が写る部分に反映された前記位置情報に基づいて、前記人の手のうちの複数の指先のそれぞれの位置情報を検出する位置検出手段と、前記位置検出手段によって検出された前記複数の指先の関係を使って、前記複数の指先のうち所定の対象面にタッチしたかを判定する処理の対象とする指先を特定する特定手段と、前記特定手段によって特定された指先について前記位置検出手段によって検出された位置情報と、前記所定の対象面の位置情報とによって示される、前記特定された指先と前記所定の対象面との近接の程度に基づいて、前記指先によって前記所定の対象面上に入力されるタッチ操作を認識する認識手段と、前記認識手段の前記近接の程度を判定するための条件として、閾値を決定する決定手段とを備え、前記認識手段は、前記位置検出手段によって検出された前記複数の指先のそれぞれの位置情報が、前記決定手段によって決定された閾値よりも前記所定の対象面に近接していることを表す場合、前記指先によって前記所定の対象面がタッチされたと判定する。
【発明の効果】
【０００９】
本発明によれば、所定の対象面に対する指のタッチを両者の近接の程度に基づいて検出する場合において、操作に利用される指に連動して動いてしまう他の指の影響により生じるタッチ操作の誤認識を低減することができる。
【図面の簡単な説明】
【００１０】
【図１】情報処理装置を利用したテーブルトップシステムの外観の一例を表す図
【図２】情報処理装置を利用したテーブルトップシステムの構成の一例を示す図
【図３】タッチの認識の原理を表す図
【図４】シングルタッチを入力する手の状態と認識結果の一例を表す図
【図５】マルチタッチを入力する手の状態と認識結果の一例を表す図
【図６】マルチタッチを入力する手の状態と認識結果の一例を表す図
【図７】マルチタッチ認識処理の認識結果を利用するアプリケーションの一例を示す図
【図８】タッチ操作認識処理の流れの一例を示すフローチャート
【図９】シングルタッチ操作認識処理の流れの一例を示すフローチャート
【図１０】各指先が操作に関わる指とみなされるかの判定処理の流れの一例を示すフローチャート
【図１１】マルチタッチ認識処理の流れの一例を示すフローチャート
【図１２】指同士の関係に基づく閾値の決定処理の流れの一例を示すフローチャート
【図１３】平面以外の物体に対するタッチ認識の原理を示す図
【図１４】タッチ判定の条件を指ごとに設定する場合の一例を示す図
【発明を実施するための形態】
【００１１】
以下に、図面を参照して本発明の実施形態を詳細に説明する。なお、以下で説明する実施形態は、本発明を具体的に実施した場合の一例を示すものであり、これに限るものではない。
【００１２】
［第１の実施形態］
＜システムの外観と構成＞
図１は、本実施形態で説明する情報処理装置１００を設置したテーブルトップシステムの外観の一例を示している。情報処理装置１００は、プロジェクタの投影光照射部１０５から投影光を照射することにより、テーブル上や壁面など、任意の平面を対象面として設定できる。図１に示すテーブルトップシステムの場合は、情報処理装置１００をテーブル面１０１上に設置し、テーブル面上に表示画像を投影する。ここで画像１０２は、プロジェクタによってテーブル面上に投影されたＵＩ部品の１つである。以下では、プロジェクタによってテーブル面上に投影されるＵＩ部品や写真などの各種画像など全てを総称して表示アイテムという。
【００１３】
また、受光部１０６は、赤外パターン投影方式（あるいはTime-of-Flight方式でもよい）の距離画像センサ１１５が得る距離画像の視点を示す。一例として図１のシステムの場合は、発光部１０７から照射された赤外光が、被写体表面で反射した反射光を受光部１０６で受光し、撮像する。本実施形態では、受光部１０６は、対象面に対して上方から見下ろす画角で撮像する位置に設置される。従って、距離画像センサ１１５によって得られた距離画像の各画素には、受光部１０６から被写体表面までの距離が反映される。なお、距離画像の取得方法は、一例として環境光やテーブル面の表示の影響が小さい赤外パターン投影方式を基に説明するが、用途に応じて視差方式や赤外光反射時間方式などを利用することも可能である。操作領域１０４は、本実施形態において、ユーザの操作を認識可能な範囲を表す。また操作領域１０４は、プロジェクタによる投影が可能な範囲、及び距離画像センサ１１５の視野範囲と一致する。
【００１４】
なお、対象面１０１を上方から見た画像が得られる構成であれば、必ずしも発光部１０７及び受光部１０６は上方に設置されている必要はない。例えばミラーを用いて反射光を撮像するように構成しても構わない。同様に投影光照射部１０５も、図１の例では、斜め上方から見下ろすように対象面１０１上への投影を行うが、図示されたものとは異なる方向に向けて投影された投影光を、ミラーなどを利用して対象面１０１に導いてもよい。本実施形態を、対象面１０１が鉛直方向に沿って設置されたシステムで利用される距離画像センサやプロジェクタに適用する場合でも、同様にミラーを含む光学系を利用可能である。
【００１５】
本実施形態では、ユーザが手１０３ａや手１０３ｂなどに示すように、複数の方向から手を、操作領域１０４上の操作空間（対象面１０１に設定された操作領域１０４表面と距離画像センサ１１５の受光部１０６の間の空間）に挿入可能である。ユーザが手を使って、テーブルトップシステムに対して、表示アイテムを操作対象とするジェスチャ操作を入力する場合の情報処理装置１００の動作について述べる。ただし、本実施形態は、表示アイテムがテーブル面１０１に投影される場合だけでなく、例えばホワイトボードや任意の壁面に投影光が照射される場合や、投影面が平面でない場合であっても適用可能である。
【００１６】
本実施形態では、図１に示されるように操作領域１０４に対して平行な二次元平面にｘ軸とｙ軸、操作領域１０４に直交する高さ方向にｚ軸を設定し三次元位置情報を座標値として扱う。ただし、対象面が平面でない場合やユーザと対象面との位置関係によっては、必ずしも対象面に平行あるいは直交の関係の座標軸ではなくてもよい。その場合も、ｚ軸は認識対象と対象面との近接の程度（両者の間の距離の大きさの程度）を検出するため対象面と交差する方向に設定され、ｘ軸とｙ軸はｚ軸と交わる方向に設定される。本実施形態では、入力された距離画像の各画素値に対して、受光部１０６のレンズ特性および対象面１０１との相対位置関係に基づく座標変換を施す。本実施形態において取得される距離画像の各画素には、受光部１０６から被写体表面までの距離の大きさに対応する値が、画素値として保持されている。従って、座標変換により、距離画像内での各画素の座標がテーブルに定義された実世界上の座標系にマッピングされ、ｘ、ｙ、ｚ座標の値を得ることができる。
【００１７】
なお、本実施形態では、ユーザの指先がタッチ対象面に触れたか否かを判定するために検出する、指先とタッチ対象面の近接の程度は、距離画像の画素値に基づいて得られる距離情報を例に説明する。ただし、指先とタッチ対象面の近接の程度として利用可能な情報はこれに限らない。例えば、操作体がタッチ対象面に近接することによって生じる静電容量の変化量や、温度や圧力、接触面積の変化量の情報であってもよい。
【００１８】
図２（Ａ）は、本実施形態における情報処理装置１００のハードウェア構成の一例を示すブロック図である。同図において、ＣＰＵ１１０は、バス１１３を介して接続する各デバイスを統括的に制御する。オペレーティングシステム（ＯＳ）をはじめ、後述するフローチャートに示されるような本発明に係る各処理プログラム、デバイスドライバ等はＲＯＭ１１２に記憶されており、ＲＡＭ１１１に一時記憶され、ＣＰＵ１１０によって適宜実行される。ＲＡＭ１１１は、高速にアクセス可能なＣＰＵ１１０の主メモリ、ワークエリア等の一時記憶領域として用いられる。ここでＯＳおよび各処理プログラム等は外部の記憶装置１１６に記憶されていてもよく、その場合は電源投入時に必要な情報がＲＡＭ１１１に適宜読み込まれる。また、ディスプレイＩ／Ｆ１１７は、情報処理装置１００内部で生成される表示アイテム（表示画像）をプロジェクタ１１８が処理可能な信号に変換する。入出力Ｉ／Ｆ１１４は、距離画像センサ１１５から距離情報を取得し、情報処理装置１００が処理可能な情報に変換するとともに、記憶装置１１６と情報処理装置１００間で相互にデータの変換を行う。
【００１９】
本実施形態では、情報処理装置１００で投影するデジタルデータは記憶装置１１６に格納されているものとする。記憶装置１１６としては、ディスクデバイスやフラッシュメモリ、ネットワークやＵＳＢなどの各種の入出力Ｉ／Ｆ１１４を介して接続される記憶装置１１６を使用する。本実施形態において、距離画像センサ１１５は、操作領域１０４上の情報を取得するために用いられる撮像部である。距離画像センサ１１５によって取得された画像は入力画像としてＲＡＭ１１１で一時保存され、ＣＰＵ１１０によって適宜処理され、破棄されるが、適宜必要なデータは記憶装置１１６に蓄積しても構わない。
【００２０】
なお図２（Ａ）の例では、距離画像センサ１１５、プロジェクタ１１８はそれぞれ情報処理装置１００に一体化したデバイスである。しかしながら、入出力用のインタフェースを介して接続された外部装置であり、情報処理装置１００と協働して情報処理システムを構成するようにしてもよい。また、さらに操作領域１０４内に載置されたドキュメントや立体物の可視光画像を撮像する可視光カメラ等を加えて、書画カメラとしての機能を有するシステムとして構成することもできる。
【００２１】
図２（Ｂ）は、本実施形態における情報処理装置１００の機能構成の一例を示すブロック図である。情報処理装置１００は、少なくとも画像取得部１２０、領域検出部１２１、位置検出部１２２、特定部１２３、条件決定部１２４、識別部１２５、認識部１２６から構成される。これらの各機能部は、ＣＰＵ１１０が、ＲＯＭ１１２に格納されたプログラムをＲＡＭ１１１に展開し、後述する各フローチャートに従った処理を実行することで実現されている。また例えば、ＣＰＵ１１０を用いたソフトウェア処理の代替としてハードウェアを構成する場合には、ここで説明する各機能部の処理に対応させた演算部や回路を構成すればよい。また保持部１２６は、ＲＯＭ１１２あるいは、記憶装置１１６のいずれかに対応する機能部であり、後述する連動指先補正に用いるルックアップテーブルや、プロジェクタ１１８に出力される画像の基となる画像データ等を保持する。
【００２２】
画像取得部１２０は、距離画像センサ１１５によって撮像された距離画像を、入力画像として一定時間毎に取得し、ＲＡＭ１１１に随時保持する。なお画像取得部１２０が取得し、各機能部とやりとりする対象は、実際には画像データに対応する信号であるが、本明細書では単に「距離画像を取得する」あるいは「入力画像を取得する」として説明する。
【００２３】
領域検出部１２１は、画像取得部１２０によって取得された入力画像の各画素について、閾値判定やノイズ低減処理を施し、距離画像から１以上の手領域を抽出する。手領域とは、入力された距離画像のうち、操作体としてユーザが利用する手が写っている領域である。本実施形態の場合は距離画像の画素値によって、対象面１０１よりも高い位置に存在することが示される被写体が写る領域で、かつ、画像端に接している領域を手領域として抽出する。
【００２４】
位置検出部１２２は、領域検出部１２１によって抽出された手領域の輪郭の情報に基づき、ユーザの手の１以上の指を検出し、その先端とみなした１点の３次元位置を表す座標値を、指先の位置情報として取得する。本実施形態で入力画像として扱う距離画像の場合、指先に相当する画素の画素値は、ユーザの指先の上面で反射された赤外光の輝度値に相当する。この輝度値は、発光部１０７から照射された赤外光の反射光強度を表すため、強度が強いほど距離画像センサ１１５からユーザの指の上面までの距離が近く、強度が弱いほど距離画像センサ１１５から指までの距離が離れているとみなせる。このように本実施形態の場合は、距離画像の中で特定された指先位置の画素値が、距離画像センサ１１５と指先の距離を反映した距離情報として扱われる。そのため情報処理装置１００は、操作空間内での指先位置の位置情報（画像内の画素を示す位置情報）及び画素値に対し、所定のキャリブレーションパラメータを反映させて、図１に示されている（ｘ、ｙ、ｚ）座標に変換し、指先の３次元位置として取得する。指先のｚ方向の座標値は「指先高さ」ともいう。本実施形態では指先高さの尺度として三次元空間上のユークリッド距離（ｍｍ）を用いるが、別の距離尺度を用いてもよい。
【００２５】
特定部１２３は、位置検出部１２２が検出した指先が複数であった場合、複数の指先のそれぞれの位置情報の相対的な関係に基づいて、タッチ操作の入力に用いられるとみなされる指を特定する。本実施形態では、最もタッチ操作の入力に用いられる可能性が高いとみなされる指先を１つ特定した上で、特定された指先に対する相対的な関係に基づいて、他の指先を、タッチ操作の入力に用いられる指とみなすか判定する条件を決定する。そして決定された条件を使って、他の指を絞り込むことにより、全体からタッチ操作の入力に用いられるとみなされる指を特定する。特定された指先は、後述する認識部１２６によって行われる、タッチ対象面にタッチしたかを判定する処理の対象となる。
【００２６】
条件決定部１２４は、位置検出部１２２が検出した指先それぞれの指先に対して対象面であるテーブル１０１にタッチしたかを判定するための条件を決定する。また本実施形態では、条件決定部１２４はさらに、テーブル１０１から指先が意図的に離された、つまりはタッチ入力が終了されたことを判定するための条件を決定する。本実施形態では、タッチ対象面と指先の間の距離がと閾値の比較によって、タッチを検出する。従って条件決定部１２４は、上記の条件として閾値の大きさを決定する。
【００２７】
識別部１２５は、検出された指先の幾何学的な位置関係に基づいて、腕の左右を識別する。例えば、指先が５つ検出され、侵入位置から見て、最も左側にある指先の座標が、他のどの指先よりも侵入位置の座標に近い場合には、最も短い指（親指）が左側に位置することになるので、その腕領域は右手に相当すると認識される。ただし、腕の左右の認識方法はこれに限られず、腕形状のパターンを学習したＳＶＭ（Support Vector Machine）を用いる等してもよい。さらに識別部１２５は、腕の左右の識別結果と指先の幾何学的な位置関係に基づいて、検出された複数の指先の種類を識別する。例えば、右手の指先が５つ検出された場合には、侵入位置から見て、時計回りに、小指、薬指、中指、人差し指、親指であると識別する。
【００２８】
認識部１２６は、位置検出部１２２が検出したユーザの各指先の位置情報と、条件決定部１２４が決定した条件を使って、指先が前記所定の対象面にタッチしたことを認識する。本実施形態では、認識部１２６が認識可能なタッチ操作にはシングルタッチ操作とマルチタッチ操作が含まれる。認識部１２６がタッチを認識する処理の具体的な内容は図３を参照して後述する。
【００２９】
出力制御部１２７は、ＲＯＭ１１２や記憶装置１１６に記憶された情報を用いて、本実施形態の表示部であるプロジェクタ１１８によって、テーブル１０１上に投影させる画像を生成する。例えば、マルチタッチ操作の認識結果に基づいて、表示中の画像の少なくとも一部に対して、拡大／縮小、回転などの変形を施し、表示部に出力させる。出力された画像は、プロジェクタ１１８によって、対象面であるテーブル１０１上に投影される。投影される画像は、複数の表示アイテムを含み、アイテム毎に移動や拡大／縮小、回転が可能であってもよく、画像全体が移動や拡大／縮小、回転の対象であってもよい。
【００３０】
この他、手ぶり等の空間ジェスチャ動作を認識するジェスチャ認識部、プロジェクタ１１８に出力される画像を制御する表示制御部等、情報処理装置１００の使用目的やアプリケーションに応じた機能部を構成することができる。なお上述した各機能部は、ＲＡＭ１１１を、本実施形態に係る処理で利用される情報を一時的に保持する保持部として利用する。ただし、保持部はＲＯＭ１１２、記憶装置１１６等の一部であっても構わない。
【００３１】
以下、ユーザが操作の入力に用いる操作体及びその先端の一例として、ユーザの手１０３ａ、ｂ及びその指を挙げて第１の実施形態を説明していく。ただし、本実施形態では操作体として、生身の手指に限らず、義手やロボットアームなどを利用し、指に相当する部位を識別する必要がある場合にも適用可能である。
【００３２】
＜タッチの認識処理＞
ここで、認識部１２６が実行するタッチ認識処理の概要を説明する。認識部１２６は、検出された各指先について、次の二つの状態を検出する。一つはタッチ状態である。タッチ状態は、指先が指先の指先高さがタッチ閾値を下回っている場合であって、指先と対象面がタッチしているとみなされる程度に十分近接している状態である。十分近接しているか否かを判定するための条件は、条件決定部１２４によって指毎に決定される。もう一つの状態は非タッチ状態である。非タッチ状態は、ユーザが意図的に指先を対象面から離している状態であり、指先高さがリリース閾値を上回っている場合に認識される。本実施形態では、リリース閾値もまた、条件決定部１２４によって指毎に決定される。
【００３３】
本実施形態では、タッチ閾値とリリース閾値としては、それぞれ異なる値が用いられ、特に、タッチ閾値よりリリース閾値が大きい値である。これは、指先を近接させる時と離す時とで指先の動き方が異なることや、センサに検出誤差が発生することを踏まえた上で、タッチ状態の間は対象面から指先が十分に離れるまでリリースが検出されないようにするための工夫である。これにより、検出誤差や指先のぶれにより、タッチ操作の継続中に誤ってリリースが検出されてしまうという誤認識が低減される。ただし、タッチ閾値とリリース閾値の差分は、センサの検出精度や装置の設置環境に応じて調節されればよく、両者は一致しても構わない。また、多くの場合、タッチ閾値とリリース閾値の大きさは、指の厚みに対して十分に大きく設定される。これは、距離画像センサから得られる距離情報にノイズがある場合でもロバストなタッチ認識を可能にするためである。ただしこの点も、センサの検出精度や装置の設置環境に応じて調節されればよい。
【００３４】
以降、本実施形態において「タッチの認識」とは、指先がタッチ閾値より小さいか、あるいは指先がリリース閾値より大きくなったかを判定することにより、指先の状態を判定することをいう。それに対し、「タッチ操作の認識」とは、タッチ状態での指先の位置や移動軌跡が辞書に記憶された各種コマンドに対応するものであった場合に、情報処理装置１００に入力された指示として解釈することをいう。本実施形態においてタッチ操作という語は、指先高さの変動によって、タッチ状態および非タッチ状態の相互の遷移が発生する、指先による操作一般を指す。特に、シングルタッチ操作という語は、１つの指先によるタッチ操作一般を指す。本実施形態ではシングルタッチ操作の一例としてタップ操作を挙げて説明する。タップ操作とは、一般的に、対象面上のある位置をタッチした後、スライド移動させることなく所定時間内にリリースする操作を指し、主に対象面上のアイテムを選択する場合に利用される。シングルタッチ操作に対し、マルチタッチ操作という語は、複数の指先によって１つの指示が入力されるタッチ操作一般を指す。本実施形態では、マルチタッチ操作の例として、２箇所のタッチ位置の間隔を広げたり狭めたりすることによって表示画像の拡大縮小を指示するピンチ操作と、２箇所のタッチ位置を相対的に回転させることによって表示画像の回転を指示する回転操作を挙げる。
【００３５】
本実施形態では、認識部１２６は、指先が非タッチ状態からタッチ状態に遷移した場合、ＴＯＵＣＨイベントをアプリケーションに通知する。また、タッチ状態から非タッチ状態に遷移した場合は、ＲＥＬＥＡＳＥイベントを発行する。以後、認識部１２６が、後に続く処理のトリガーとなるイベントを出力制御部１２７やアプリケーションに通知することを、「イベントを発行する」と表現する。イベント情報は、どの指先が、どの位置で状態遷移を行ったかという情報とともに通知される。通知を受けたアプリケーションは出力制御部１２７に対し、イベント情報と指先の情報及びＵＩ部品の情報に基づいて、投影される画像を更新させる。
【００３６】
ここで図３（Ａ）〜（Ｃ）を用いて、タッチに伴う指先高さの変動、上述した指先の状態遷移、イベントの発行について具体的に説明する。図３（Ａ）に指２０２の指先２０３のタッチを行う前の様子を示す。指先高さ２０４はリリース閾値２０１を上回っているため、指先２０３は非タッチ状態であると認識される。状態遷移が発生していないため、イベントは発行されない。図３（Ｂ）は、指先が対象面（Ｚ＝０の面）をタッチした瞬間の様子である。指先高さ２０５はタッチ閾値２００を下回っているため、指先２０３はタッチ状態であると認識される。非タッチ状態からタッチ状態へと指先２０３の状態が遷移したため、ＴＯＵＣＨイベントが発行される。図３（Ｃ）はタッチしてすぐに（タップ操作に定義された閾値時間の間に）、指先が対象面から離された様子を表す。指先高さ２０６はリリース閾値２０１を上回っているので、指先２０３は非タッチ状態であると認識される。タッチ状態から非タッチ状態への指先２０３の状態が遷移したことで、ＲＥＬＥＡＳＥイベントが発行される。このとき、タッチ状態から非タッチ状態へと遷移するまでの時間がタップ時間閾値以内、かつタッチ状態になった瞬間のｘｙ座標と非タッチ状態になった瞬間のｘｙ座標のずれがタップずれ閾値以内であったとする。タップ操作が認識される条件が満たされたことで、タップ操作が入力されたことを示すＴＡＰイベントが発行される。
【００３７】
認識部１２６におけるタッチ認識処理は、大きく分けてシングルタッチ認識処理とマルチタッチ認識処理に分かれている。シングルタッチ認識処理はある１つの指先のタッチ状態であるか非タッチ状態であるかの認識を行い、ＴＯＵＣＨイベント、ＲＥＬＥＡＳＥイベント、ＴＡＰイベントを発行する。マルチタッチ認識処理では、前段階として実行されるシングルタッチ認識処理の結果と、各指先の位置関係に基づいてタッチ状態にある複数の指先のペアリングが行われる。そして、ペアリングされた指先の位置の変化によってピンチ操作およびローテート操作が認識され、それらが入力されたことを表すＰＩＮＣＨイベントおよびＲＯＴＡＴＥイベントが発行される。
【００３８】
本実施形態は、上述したようなタッチ認識において、ユーザが操作に用いる意図を持って対象面に近づけた指に連動して、操作に用いられない指が動いた結果タッチ閾値よりも低い高さで指先がされてしまい、タッチが誤検出されることを課題として認識する。そこで、本実施形態では、複数の指先を検出した場合、操作に用いられる可能性が高いとみなされる指を絞り込み、絞り込まれた指を対象にタッチの認識を行う。言い換えると、操作に用いられない指であるにも関わらず他の指に連動して対象面に近づいてしまった指を、タッチ認識処理の対象としないことで、タッチの誤認識を低減する。
【００３９】
＜タッチ操作認識処理の流れ＞
図８のフローチャートを参照して、本実施形態のメイン処理となるタッチ操作の認識処理の流れを説明する。本実施形態では、図８のフローチャートの処理は、距離画像センサ１１５から距離画像が入力される毎に周期的に繰り返される。従って処理が繰り返される周期は、距離画像センサ１１５の撮像映像のフレームレートに一致する。
【００４０】
ステップＳ１００において、画像取得部１２０は距離画像センサ１１５によって撮像された距離画像を、入力画像として一定時間毎に取得し、ＲＡＭ１１１に随時保持する。距離画像センサ１１５によって撮像された距離画像の画素値は距離画像センサ１１５までの距離を反映している。ステップＳ１０１において、領域検出部１２１は、画像取得部１２０によって取得された距離画像から人の腕が写る領域（腕領域）を抽出し、その輪郭を示す位置情報を取得し、ＲＡＭ１１１にその情報を保持する。
【００４１】
ここで人の「腕」とは、人の肩から指先にかけての部位の全てを指し、撮像画像のうち、人の腕に該当する部分が一部写る領域が、腕領域である。操作体また本実施形態において「手」とは、腕のうち、手首から先の全てを差す。「手」には、５指、掌、甲が含まれる。領域検出部１２１の実際の処理としては、取得した距離画像の各画素が示すｚ方向の座標値に対して閾値処理を行うことで、テーブルよりも高さが高い座標値を持つ画素群からなる領域であって、かつ画像端と接触する領域を、腕領域として抽出する。図１において、腕領域は、手１０３ａおよび手１０３ｂのうち、操作領域１０４に侵入している部分（破線で表された操作領域１０４の境界より内側の部分）が、撮像画像に写った部分に相当する。ただし、腕領域の抽出方法はこれに限られず、例えば別途撮像された操作領域１０４のＲＧＢ画像における肌色領域に対応する部分を抽出する等してもよい。また、本実施形態の領域検出部１２１は、腕領域が抽出された入力画像に微分フィルタを適用することに基づいて、輪郭線の座標を取得する。さらに、領域検出部１２１は腕領域と画像端が接触するピクセルの平均位置（以下では、操作領域に対する腕領域の侵入位置と称する）を算出し、これをＲＡＭ１１１に保持する。
【００４２】
ステップＳ１０２において、位置検出部１２２は、取得された腕領域から、１以上の指先位置を検出する。本実施形態では、位置検出部１２２はまず、手領域の輪郭線が領域の内側になす角度に基づいて指の先端とみなす１画素を特定する。ただし、指の先端の特定方法は輪郭が成す内角を基準とする方法に限られず、例えば輪郭の極値を算出する等してもよい。さらに位置検出部１２２は検出した指先の画素の位置および画素値の情報から、指先の位置情報として高さを含む３次元位置を取得し、ＲＡＭ１１１にその情報を保持する。ステップＳ１０３において、識別部１２５は、検出された指先の幾何学的な位置関係に基づいて、腕の左右と指先の種類を識別する。腕と指先の識別結果はＲＡＭ１１１に保持される。また、種類認識部１２４は腕と指先のトラッキングを行う。そして現フレームの腕や指先の種類を認識することが困難な場合には、前フレームまでの認識結果を用いて、現フレームの腕と指先の認識情報を補完する。ステップＳ１０４において、条件決定部１２４は、前フレームと現フレームの指先高さの変動から指先の上下移動のスピードを算出する。
【００４３】
ステップＳ１０５において、条件決定部１２４は、検出されている各指のタッチ認識条件を決定する。タッチ認識条件とは、指先がタッチ対象面をタッチしたかを判定するための条件である。第１の実施形態の場合、予め設定されているタッチ閾値及びリリース閾値の値をＲＯＭ１１２や記憶装置１１６から読み出すことで、条件として決定する。
【００４４】
ステップＳ１０６において、認識部１２６は、シングルタッチ認識処理を行う。本実施形態では、シングルタッチ認識処理の中で、ユーザがタッチ操作に用いる可能性が高い指を絞り込んだ上で、タッチ認識を行う。シングルタッチ操作認識処理の詳細は後述する。ステップＳ１０７において、認識部１２６は、マルチタッチ操作処理を行う。本実施形態では、ステップＳ１０６の処理でタッチ状態にあると認識された指が、１つの手につき複数存在した場合は、それらをペアリングし、ステップＳ１０７において、マルチタッチ操作の認識を行う。ただし、ペアリングされた指先が、マルチタッチ操作としての意味を持つ動作を成していなかった場合は、ステップＳ１０７では認識結果を出力せず、それぞれをシングルタッチ操作として認識する場合がある。マルチタッチ操作認識処理の詳細は後述する。ステップＳ１０８では、出力制御部１２７が、ステップＳ１０６あるいはステップＳ１０７で認識されたタッチ操作に対する応答を出力する。例えば、プロジェクタ１１８によってテーブル１０１に投影する画像を生成し、出力する。以上が、本実施形態におけるメインの処理の流れである。
【００４５】
＜指先が操作に関わる指とみなされるかの判定＞
ここで、本実施形態で実行される指先が操作に関わる指とみなされるかの判定方法について説明する。本実施形態では、ステップＳ１０６において実行されるシングルタッチ認識処理の中で、ユーザがタッチ操作に用いる可能性が高い指を絞り込む処理を行う。まずは、図４（Ａ）〜（Ｃ）を参照して、本実施形態で実行されるこの絞り込みについて説明する。
【００４６】
図４（Ａ）は、ユーザが右手を、指を曲げたり伸ばしたりする意思を持たずに、自然な姿勢で維持している状態でテーブル面１０１上に静止させた状態を、ｙ軸方向から見た図である。以下では、このようなユーザの手の自然な状態をニュートラルポジションという。図中の５つの円は指先の位置情報が検出された５つの指先を示している。タッチを認識するためにタッチ閾値と比較される指先の高さは、円の上面かつｘ軸と平行な接線のｚ座標である。図４（Ａ）では、中指３０２が最も指先高さが高く、次いで薬指３０１や人差し指３０３の高さが高く、小指３００と親指３０４は最も指先高さが低い。
【００４７】
次に、ユーザの右手の状態が、ニュートラルポジションから変移し、人差し指３０３でタッチ対象面（Ｚ＝０の面）に対して、タッチを行う場合を考える。まず図４（Ｂ）は、全ての指に対して、図３で説明した一定のタッチ閾値２００とリリース閾値２０１を適用してタッチ認識を行う場合を表す。全ての指に一定のタッチ閾値２００を適用した場合に、タッチ状態であると認識される指先が、黒塗りされた円で表される。図４（Ｂ）の場合、ユーザは人差し指３０３でタッチをしたつもりであるにも関わらず、小指３００と親指３０４もタッチ閾値を下回る。この場合、人差し指３０３に加えて、小指３００と親指３０４もタッチ状態であると認識され、各指先ついてＴＯＵＣＨイベントが発行される。こうした意図しない指先のタッチの誤認識は、意図しない場所のＵＩ部品が反応してしまったり、シングルタッチ操作の入力が意図されているにも関わらず、マルチタッチ操作が認識されたりする原因にもなりえる。
【００４８】
ここで図４（Ｃ）は、本実施形態によって、指先の相対的な位置関係に基づいて、タッチ閾値２００と比較する指先を絞り込み、タッチ対象面にタッチしているかを判定する場合を表す。図４（Ｃ）に示す手及び各指先の姿勢は、図４（Ｂ）と同一である。本実施形態では、検出されている複数の指先のうち、最も高さが小さい指を特定し、特定された指との相対的な高さを使って、他の指先の中でタッチ閾値２００によるタッチ判定処理の対象とする指を絞り込む。本実施形態では、最も高さが小さい指はタッチ操作に用いられる可能性が最も高い指であるとみなすため、その高さを基準とすることで効率の良い絞り込みを行うことができる。図４（Ｃ）の場合、検出されている複数の指先の中で、最も高さが小さい指先は、人差し指３０３であると特定される。例えば、特定された人差指３０３の高さを、Hminとする。そして、検出されている複数の指先の中で、指先の高さが、絞り込み閾値３０５を表すHmin+εH（εHは正の定数）を下回るか否かを判定し、絞り込み閾値よりも高さが小さい指先を絞り込む。絞り込み閾値３０５は、最も高さが小さい指先を基準とする相対的な高さの閾値である。本実施形態では、このように絞り込まれた指先が、ユーザがタッチ操作の入力に用いる意図を持っている指である可能性が高いとみなす。一方で、絞り込み結果に含まれていない指先は、操作の入力に用いることが意図されていない指先であるとみなす。そして本実施形態では、絞り込まれた指先の高さが、タッチ閾値２００を下回るか否かに基づいて、実際にタッチ入力が行われているかを判定する。
【００４９】
図４（Ｃ）の例では、人差し指３０３の指先高さはHminであり、Hmin+εHを下回っているのでタッチ閾値２００との比較によるタッチ認識処理の対象となる。そして人差し指３０３の指先高さHminはタッチ閾値２００を下回っているので、人差し指３０３はタッチ状態であると認識される。人差し指以外の指は指先高さがHmin+εHを上回っているので、タッチ閾値２００によるタッチ判定の対象から外れ、タッチ状態であると認識されることはない。このようにして、図４（Ｂ）のように誤認識抑制を行わない場合にタッチ状態になってしまう小指３００と親指３０４の誤認識を防ぐことができる。
【００５０】
なお、上述したようにタッチ認識処理の対象とする指先を絞り込むことは、タッチ閾値２００を予め小さい値に設定することと等価ではない。タッチ閾値２００は、センサの精度や環境によって生じてしまう位置情報の検出誤差やぶれを許容できるように、ある程度大きく設定される必要があるからである。タッチ閾値を小さくすると、検出誤差やぶれにより、ユーザがタッチしたつもりなのに情報処理装置１００がそれを認識できないといった問題を発生させる可能性がある。従って本実施形態では、十分な大きさを持ったタッチ閾値２００を設定し、タッチ閾値２００と比較する指先を絞り込むことによって、ユーザがタッチしようとしている場合の認識漏れを防いでいる。
【００５１】
次に、指先の移動スピードの比較によって絞り込みを行う方法について、図５（Ａ）〜（Ｃ）を参照して説明する。図５（Ａ）では前フレームの指先位置を破線の円で、現フレームの指先位置を実線の円で示している。さらに、前フレームと現フレームの指先高さ位置を繋いだ矢印は、Ｚ軸方向のスピードの大きさを示している。全ての指先の中で最も指先スピードが大きい指先は人差し指３０３であり、その指先スピードをVmaxとする。指先スピードが絞り込み閾値を表すVmax-εV（εVは正の定数）を上回った相対的な指先スピードが大きい指先のが、タッチ操作に用いられる指先である可能性が高いとみなされ、タッチ閾値２００によるタッチ認識処理の対象となる。図５（Ａ）では、人差し指３０３の指先スピードはVmaxであり、Vmax-εVを上回っているのでタッチ閾値２００によるタッチ判定が行われる。そして、人差し指３０３の指先高さはタッチ閾値２００を下回っているので、人差し指３０３はタッチ状態であると認識される。人差し指以外の指は指先スピードがVmax-εVを下回っているので、タッチ閾値２００によるタッチ判定の対象から外れ、タッチ状態であると認識されることはない。
【００５２】
本実施形態では、上述した、指先の高さを基準とした絞り込みと、指先のスピードを基準とした絞り込みの両方を段階的に行うことで精度のよい絞り込み結果を得ることができる。ただし、これらはそれぞれ効果を有するものであるため、システムの構成や状況によっては片方を省略してもよい。また、両方の処理を、結果のＯＲをとる形で併用してもよい。
【００５３】
＜シングルタッチ操作の認識処理＞
次に、本実施形態のステップＳ１０６の処理で実行されるシングルタッチ操作の認識処理を、図９のフローチャートを参照して説明する。なお、図９のフローチャートの処理が開始されると、ステップＳ１０２で位置情報が検出された全ての指先のそれぞれに対し、後述するステップＳ２０１〜Ｓ２１４の処理を繰り返す。全ての指先に対する処理が終了した段階で、シングルタッチ認識処理は終了となり、図８のフローチャートに戻る。
【００５４】
ステップＳ２０１において、特定部１２３は、その時点で処理対象としている指先が、タッチ操作に用いられる指とみなされるかを判定する。ステップＳ２０１の処理が、図４を使って説明した絞り込みに相当する。なおステップＳ２０１での判定は、ユーザが、処理対象としている指先をタッチ操作の入力に用いる意図を持っている可能性が高いことを、センサを使って検出している情報に基づいて推定するものである。従って判定結果は、実際のユーザの思考や意図には依存しない。
【００５５】
ここで、図１０のフローチャートは、ステップＳ２０１で実行される処理の流れを表すものである。ステップＳ３００において、特定部１２３は、指先高さとHmin+εHとを比較する。もし指先高さのほうが小さければステップＳ３０１に進み、そうでなければステップＳ３０３に進む。ステップＳ３０１において、特定部１２３は指先スピードとVmax-εVを比較する。もし指先スピードの方が大きければステップＳ３０２に進み、そうでなければステップＳ３０３に進む。ステップＳ３０２ではタッチ操作に用いられる指であるとの判定が行われ、ステップＳ２０１の判定結果は「ＹＥＳ」となる。その結果、この時処理対象とされている指先は、高さをタッチ閾値と比較することによりタッチ状態か否かを判定する処理の対象となる。ステップＳ３０３では、タッチ操作に用いられる指でないとの判定が行われ、ステップＳ２０１の判定結果は「ＮＯ」となる。ステップＳ３０２でタッチ操作に用いられる指であると判定された場合（ステップＳ２０１でＹＥＳ）、ステップＳ２０２に進む。ステップＳ３０３でタッチ操作に用いられる指でないと判定された場合（ステップＳ２０１でＮＯ）、処理はステップＳ２０８に進む。
【００５６】
ステップＳ２０２では、認識部１２６は、ステップＳ１０２で検出された指先の位置情報のうちｚ座標（高さ）が、ステップＳ１０５で決定されたタッチ閾値より小さいかを判定する。指先の高さがタッチ閾値より小さいと判定された場合（ステップＳ２０２でＹＥＳ）、ステップＳ２０３に進む。指先の高さがタッチ閾値より小さいと判定されない場合（ステップＳ２０２でＮＯ）、ステップＳ２０９に進む。
【００５７】
ステップＳ２０３において認識部１２６は、処理対象の指先が、この時点で既にタッチ状態であるかの判定を行う。タッチ状態であれば（ステップＳ２０３でＹＥＳ）、ステップＳ２０７に進む。タッチ状態ではない、すなわち非タッチ状態であれば（ステップＳ２０３でＮＯ）、ステップＳ２０４に進む。ステップＳ２０４において、認識部１２６は、処理対象の指先のタッチ状態への状態遷移があったことを確定する。本実施形態では、ＲＡＭ１１１に保持するタッチフラグの値を「ＴＲＵＥ」とし、ステップＳ２０５に進む。
【００５８】
ステップＳ２０５で、認識部１２６は、ＴＯＵＣＨイベントを発行する。ステップＳ２０６において、認識部１２６は、ステップＳ２０４でタッチ状態への遷移が確定した時刻の情報を、タッチ時刻としてＲＡＭ１１１に保持する。ステップＳ２０７において、認識部１２６は、処理対象の指先位置の位置情報を、この時点でのタッチ位置としてＲＡＭ１１１に保持する。そして検出されている全ての指先が処理されるまで、処理を繰り返す。
【００５９】
ステップＳ２０８において、認識部１２６は、処理対象の指先が、この時点でタッチ状態であるかの判定を行う。タッチ状態であれば（ステップＳ２０８でＹＥＳ）、ステップＳ２０９に進む。タッチ状態ではない、すなわち非タッチ状態であれば（ステップＳ２０８でＮＯ）、図９のフローチャートの処理を終了する。あるいは、処理対象の指を変えて処理を繰り返す。
【００６０】
ステップＳ２０９において、認識部１２６は、指先高さがリリース閾値より大きいかの判定を行う。指先高さがリリース閾値より大きいと判定される場合（ステップＳ２０９でＹＥＳ）、ステップＳ２１０に進む。指先高さがリリース閾値より大きいと判定されない場合（ステップＳ２０９でＮＯ）、ステップＳ２０７に進む。ステップＳ２１０において、認識部１２６は、対象の指先のタッチ状態から非タッチ状態への遷移を確定させ、ＲＡＭ１１１に保持するタッチフラグの値を「ＦＡＬＳＥ」とする。ステップＳ２１１において、認識部１２６は、ＲＥＬＥＡＳＥイベントを発行する。ステップＳ２１２において、認識部１２６は、ステップＳ２１０で非タッチ状態への遷移が確定した時刻の情報を、リリース時刻としてＲＡＭ１１１に保持する。ステップＳ２１３において、認識部１２６は、処理対象である指先について、タッチイベントが発行されてからリリースイベントが発行されるまでに得られた情報によって、タップ操作の認識条件が満たされたかを判定する。具体的には、以下の式１の条件が満たされるかの判定を行う。
（リリース時刻−タッチ時刻）＜εＴかつ
（リリース位置とタッチ位置の距離）＜εＤ（εＴ、εＤは正の定数）…（式１）
タップ操作の条件が満たされると判定された場合（ステップＳ２１３でＹＥＳ）、ステップＳ２１４に進む。タップ操作の条件が満たされると判定されない場合（ステップＳ２１３でＮＯ）、図９のフローチャートの処理を終了する。あるいは、処理対象の指を変えて処理を繰り返す。全ての指について処理を行われた段階で、シングルタッチ認識処理は終了する。
【００６１】
＜マルチタッチ操作の認識処理＞
次に、本実施形態のステップＳ１０７の処理で実行されるマルチタッチ操作の認識処理を、図１１のフローチャートを参照して説明する。なお本実施形態では、マルチタッチ操作の認識処理の前にシングルタッチ認識処理が行われ、各指先の状態が得られている。
【００６２】
ステップＳ４００において、認識部１２６は、タッチ状態にある複数の指先をペアリングする。本実施形態では、タッチ時刻が最も早い指先から、タッチ時刻に沿って順次２つの指先をペアリングする。ただしこれは一例である、他のペアリング方法を用いてもよい。なお、ステップＳ４００において複数の組み合わせがペアリングされた場合、以下のステップＳ４０１〜ステップＳ４０６の処理は全ての組み合わせのそれぞれを対象に、複数回繰り返される。
【００６３】
ステップＳ４０１において、認識部１２６は、ペアリングされている２つの指先の間の距離を取得する。本実施形態では、ｘｙ平面上の二次元のユークリッド距離を用いるが、別の距離尺度を用いてもよい。ステップＳ４０２において、認識部１２６は、取得した指先間の距離と、前フレームで取得された距離に差が生じているかを判定する。ここでは、フレーム間での距離の差分が、所定の値より大きいか否かで判定を行う。距離に差があると判定される場合（ステップＳ４０２でＹＥＳ）、ステップＳ４０３に進む。距離に差があると判定されない場合（ステップＳ４０２でＮＯ）、ステップＳ４０４に進む。
【００６４】
ステップＳ４０３において、認識部１２６は、ＰＩＮＣＨイベントを発行する。ＰＩＮＣＨイベントは、２つの指先間の距離が変化したことで拡大・縮小操作を認識した場合に通知されるイベントである。ＰＩＮＣＨイベントは、２つの指先間の距離の変化から計算された、拡大・縮小の割合や差分距離といった情報を伴って出力制御部１２７に通知される。例えば、拡大・縮小の割合（％）は、式２で計算できる。
（現在の指先間の距離）／（ペアリングされた時点での指先間の距離）×１００…（式２）
また、例えば、差分距離は（現在の指先間の距離−ペアリングされた時点での指先間の距離）で計算できる。出力制御部１２７は、例えば、ＰＩＮＣＨイベントの通知を受け、表示アイテムの大きさを拡大したり縮小したりできる。
【００６５】
ステップＳ４０４において、認識部１２６は、ペアリングされている指先間を結ぶ線分の角度を取得する。角度の取得方法の例は後述する。ステップＳ４０５において、認識部１２６は、算出した角度が前フレームと比較して変化しているかどうかを判定する。角度が変化していると判定される場合（ステップＳ４０５でＹＥＳ）には、ステップＳ４０６へ進む。角度が変化していると判定されない場合（ステップＳ４０５でＮＯ）には、処理を終了する。あるいはステップＳ４０１に戻って繰り返す。
【００６６】
ステップＳ４０６において、認識部１２６は、ＲＯＴＡＴＥイベントを発行する。ＲＯＴＡＴＥイベントは、ペアリングされた２つの指先の絶対的な角度が変化したことで回転操作を認識した場合に通知されるイベントである。絶対的な角度の計算方法は、例えば、２つの指先を繋いでできる線分とｘ軸のなす角度を用い、時計回りの角度をプラスとし、反時計回りの角度をマイナスとすることができる。ＲＯＴＡＴＥイベントは２つの指先の絶対的な角度の変化から計算された、回転の割合等の情報を伴って出力制御部１２７に通知される。例えば、回転の割合は、式３で計算できる。
（現在の２つの指先の絶対的な角度−ペアリング時点の２つの指先の絶対的な角度）…（式３）
出力制御部１２７は例えば、ＲＯＴＡＴＥイベントの情報を用いて、表示アイテムを回転させることができる。
【００６７】
＜マルチタッチ操作の具体例＞
マルチタッチ操作を、距離画像センサ１１５を用いたタッチ認識で実現する場合には、操作に用いられる複数の指先がそれぞれタッチ状態であることが認識されている必要がある。マルチタッチ操作の認識においても、操作入力に用いられない指の指先がタッチ状態であると誤認識されると、誤動作の原因となる可能性がある。
【００６８】
まず、本実施形態の絞り込みを行わずに全ての指先の高さを、一定のタッチ閾値２００と比較する場合、マルチタッチ操作が入力される場合に起こり得た問題を、図７（Ａ）と図６（Ａ）を参照して説明する。図７（Ａ）はＵＩ部品１０２に対してマルチタッチ操作をするために、手１０３ａの人差し指３０３と親指３０４でタッチした瞬間の様子である。拡大・縮小操作や回転操作を行う場合には人差し指と親指が用いられることが多いが、ユーザにとって、人差し指と親指だけを伸ばし、他の指が誤検出されないように曲げたり向きを変えたりする姿勢を取ることは負担を伴うことがある。従って、ユーザには、図７（Ａ）のように、手及び指を自然と開いた姿勢でマルチタッチ操作を行える環境が期待される。
【００６９】
図６（Ａ）は図７（Ａ）における指先高さを、ｚｘ平面にマッピングしたものである。図４及び図５で示したのと同じ要素については、同じ番号を付与し、説明を省略する。この場合、ユーザが操作入力に用いることを意図したのは人差し指３０３と親指３０４であるが、他の指も広げられた状態にあるため、人差し指３０３と親指３０４の動きに連動して動く。図６（Ａ）の場合、人差し指３０３と親指３０４とは離れた小指３００が連動して下がったことで、小指３００の指先高さがタッチ閾値２００を下回っている。従って、例えば、誤って小指３００が親指３０４あるいは人差指３０３とペアリングされてしまい、ユーザの意図と異なるマルチタッチ操作が認識されることが有り得る。
【００７０】
本実施形態では、上述したように、タッチ閾値と指先高さの比較によるタッチ認識処理を行う前に、タッチ認識処理の対象とする指先を絞り込む。図６（Ｂ）に、図６（Ａ）と同様の状況で、本実施形態の絞り込みを適用した結果を示す。図６（Ｂ）に示す手の状態では、複数の指先の中でも人差し指３０３の指先高さが最も小さい。その指先高さがHminとなる。操作入力に用いられる人差し指３０３と親指３０４は、絞り込み閾値３０５となる高さHmin+εHを下回っているため、タッチ認識の対象となる。そしてタッチ閾値２００を下回っているので、タッチ状態であると認識される。一方で、操作入力に用いられる指ではない小指３００の指先高さは、タッチ閾値２００を下回っているものの、絞り込み閾値３０５である高さHmin+εHを上回っているため、タッチ閾値２００との比較が行われない。従って、タッチ状態であるとは認識されない。
【００７１】
次に指先の移動スピードに基づく指先の絞り込みの例を図６（Ｃ）を参照して説明する。図６（Ｃ）では図５（Ａ）と同様に前フレームの指先位置を破線の円で、現フレームの指先位置を実線の円で示し、前フレームと現フレームの指先高さ位置を繋いだ矢印はＺ軸方向のスピードの大きさを示している。全ての指先の中で最も指先スピードが大きい指先は人差し指３０３である。その指先スピードをVmaxとする。指先スピードがVmax-εVを上回っているのは人差し指３０３と親指３０４である。従って、本実施形によれば、人差し指３０３と親指３０４がタッチ認識処理の対象となり、それらはタッチ閾値３００より高さが小さいため、タッチ状態であると認識される。一方、小指３００の指先高さは、タッチ閾値２００を下回っているものの、指先のスピードがVmax-εVを下回っているため、タッチ認識の対象とされない。従って、小指３００はタッチ状態であると認識されない。
【００７２】
図７（Ｂ）は、本実施形態によって指先のペアリングが正しく行われたことにより、縮小操作が認識され、ＵＩ部品１０２が縮小された様子を表す。人差し指３０３と親指３０４の距離を小さくすることでＰＩＮＣＨイベントが発行され、アプリケーションはＰＩＮＣＨイベントの拡大・縮小割合を参照し、ＵＩ部品１０２の大きさを変化させている。図７（Ｃ）は、ＵＩ部品１０２に回転操作を行われた様子を表す。人差し指３０３と親指３０４を時計回りに回転させることでＲＯＴＡＴＥイベントが発行され、アプリケーションはＲＯＴＡＴＥイベントの回転の割合を参照し、ＵＩ部品１０２を時計回りに回転させている。このように、本実施形態では、一部の指だけを使ったマルチタッチ操作を行った場合でも、適切な指の情報を使ってマルチタッチ操作が認識されるので、ユーザが自然と手を広げた楽な姿勢で操作を行うことができる。
【００７３】
なお、本実施形態では、ユーザが一人で片手でのマルチタッチ操作を行うことを前提として説明して来た。従って、高さやスピードの比較は、同一の手に属する複数の指先間で行われた。ただし、マルチタッチ操作は、両手で行われる場合もあり得る。また、右手での操作中に、別途左手の誤タッチが検出されてしまうといった場合があり得る。そのような場合に対応するために、抽出された複数の手領域の中で同一ユーザの両手を組み合わせを特定し、１ユーザの両手に属する指先の中で高さやスピードを比較してもよい。こうすることで、指だけでなく手に関しても、ユーザが操作に用いる意図を持っているか否かを推定することで、操作の誤認識を低減することができる。また、複数ユーザの指先の高さやスピードを全て比較して絞り込みを行うことで、あるユーザが主体的に操作している場合に、他のユーザの指先による誤タッチが認識されてしまうことを防ぐことができる。また、上述した例ではマルチタッチ操作に用いられる指先は２つずつペアリングしたが、３本以上の指先が協働してマルチタッチ操作を行う場合にも、本実施形態は有効である。
このように、意図した人差し指３０３と親指３０４のみがタッチ状態になると、この２つの指がペアリングされる。そして、人差し指３０３と親指３０４をタッチ状態のまま動かすことによって、マルチタッチ操作を行うことができる。
【００７４】
＜平面以外へのタッチ操作＞
ここまで、平面を対象としたタッチ操作を例に挙げて説明してきたが、本実施形態は、任意形状の物体が対象であっても同様の方法で誤認識を抑制したタッチ操作を行うことが可能である。一例として、平面上におかれた球５００を対象にタッチ操作を行う場合の例を図１３（Ａ）に示す。球４００を覆うように、一定のタッチ閾値４０１、リリース閾値４０２を設定する。そして、指先４０３の球４００の表面までの距離４０４が、最小となる指先の位置情報を基準として絞り込みを行う。また、指先の移動スピードを取得する際には、指先４０３が球４００の表面へ向かう方向のスピード４０５を比較すればよい。
【００７５】
また、仮想オブジェクトが対象であっても、同様の方法で誤認識を抑制したタッチ操作を行うことが可能である。図１３（Ｂ）を用いて、３Ｄプロジェクタで空中に投影された３Ｄオブジェクトである球４０６に対するタッチ操作の例を示す。この場合も、球４０６を覆うようにタッチ閾値４０７とリリース閾値４０８を設定する。そして、指先４０９の球４０６の表面までの距離４１０が最小距離となる乳美先指先高さ４１０が最小となる指先の位置情報を基準として絞り込みを行う。また、指先の移動スピードを取得する際には、指先４０９が球４０６の表面へ向かう方向のスピード４１１を比較すればよい。
【００７６】
［変形例］
上述した第１の実施形態では、絞り込まれた指先がタッチ状態であるかを判定する条件は、予め設定された一定のタッチ閾値及びリリース閾値であった。それに対し変形例として、ユーザ毎に、あるいは指毎に、より適切な閾値を決定する例を説明する。なお、以下の変形例で説明するタッチ閾値の決定処理は、図８のフローチャートのステップＳ１０５の処理において行われる。変形例では、ステップＳ１０５以外の処理は、第１の実施形態に準じるため、詳細な説明は省略する。
【００７７】
＜変形例１：指同士の関係に基づく閾値の補正処理＞
第１の実施形態、及びその変形例は、操作に利用される指に連動して動いてしまう他の指の影響により生じるタッチ操作の誤認識を低減することを目的としている。ここで、操作に利用される指の種類によっては、それに連動して動いてしまう傾向が強い指を予め想定することが可能である。例えば、ユーザやアプリケーションの都合で、小指でタッチ操作が行われる場合、小指と隣り合う薬指は、小指の動きに連動して動いてしまい易い。またその際、入力操作に用いられる小指と、高さやスピードが近いものになることが統計的に解っている。ここで変形例１では、このような指同士の関係に基づいて閾値を決定する。
【００７８】
図５（Ｂ）は小指３００でタッチした場合の様子である。このとき薬指３０１は、指先高さおよび指先スピードが小指３００とほぼ等しいため、第１の実施形態の絞り込みによって除外することが難しい場合がある。そこで変形例１では、小指３００と連動して動く傾向が強い薬指３０１、及び中指３０２に関しては、小指３００がタッチ操作に用いられる可能性が最も高い指だとみなされた場合に用いるタッチ閾値及びリリース閾値を先に補正しておく。なお、第１の実施形態の場合、タッチ操作に用いられる可能性が最も高い指だとみなされるのは、最もタッチ対象面からの距離が近く、また移動スピードが速い指である。
【００７９】
図５（Ｃ）は、小指３００が最もタッチ対象面からの距離が近く、また移動スピードが速い指であったことに応じて、薬指３０１、及び中指３０２のタッチが認識される条件が厳しくなった様子を表す。小指３００と連動して動く薬指３０１のタッチ閾値３０６は、通常のタッチ閾値２００よりも小さい値に決定されている。同様に中指３０２のタッチ閾値が、閾値２００から閾値３０７に補正される。最終的に、指先高さおよび指先スピードを比較することによって、小指３００と薬指３０１に対してタッチ判定が行われるが、薬指３０１の指先高さは補正されたタッチ閾値３０６を下回っていないためタッチ状態であると認識されない。意図したタッチである小指３００だけがタッチ状態であると認識される。
【００８０】
図１２（Ａ）は上述した、指同士の関係に基づく閾値の決定処理の流れを表すフローチャートである。この処理はステップＳ１０５の中で実行される。ステップＳ５００において、タッチ認識部１２６は、指先高さが最小の指先を特定し、その指先と連動して動く指先の閾値を決定する。ステップＳ３０１において、タッチ認識部１２６は、指先速度が最大の指先を特定し、その指先と連動して動く指先の閾値を決定する。ステップＳ５００及びステップＳ５０１では例えば、予め設定されているタッチ閾値に、所定の補正量を加えるあるいは減じることで、補正された閾値を算出し、対象としている指の閾値として決定する。ただしステップＳ３００で決定済みの指先は決定しない。一例として、ステップＳ３００およびステップＳ３０１で、連動して動く指先および補正量を取得するために、図１２（Ｂ）に示すルックアップテーブルを用いる。
【００８１】
なお変形例１では、連動して動く指先および補正量を取得するために図１２（Ｂ）に示すルックアップテーブルを用いるが、連動して動く指先および補正量を決めるために他の方法を用いることも可能である。例えば、統計情報に基づいて確率的に決めることができる。なお、変形例１では指の種類の情報を使って、連動して動きやすい関係にある指先を特定しタッチ閾値を決定しているが、そのような情報がない場合でも、連動して動く指先を特定することは可能である。例えば、指先高さが低いあるいは指先速度が大きい指先に隣接する指先を、連動して動く指先であると判定し、その指先の閾値を決定することができる。
【００８２】
＜変形例２：ユーザのニュートラルポジションに合わせた指毎の閾値補正＞
第１の実施形態では、どのようなユーザについても一定のタッチ閾値、及びリリース閾値を使った。しかしながら、ユーザによって、ニュートラルポジション（自然な手の状態）での各指の高さは異なる。そこで、ユーザの手の状態がニュートラルポジションにあるときの各指の高さに基づいて閾値を補正する場合を説明する。
【００８３】
図１４（Ｂ）はニュートラルポジションの指先高さによって閾値を変動させた様子を示している。変形例２では、条件決定部１２４は、手がニュートラルポジションにあることが確認できた状態で得られた、各指先の高さ情報を使って閾値を補正する。例えば、手のシルエットを投影し、ユーザにそのシルエット上に手を静止させてもらうガイダンス表示を使って、ユーザの手をニュートラルポジションに誘導してから図８のフローチャートの処理を開始する。この場合、シルエット上に指先が５つ検出され、一定時間経過した場合にニュートラルポジションになったことを認識することができる。
【００８４】
そして、条件決定部１２４は、ニュートラルポジションにある手の各指先の高さを予め設定した高さ閾値αと比較する。ここで用いる高さ閾値αは、タッチ閾値及びリリース閾値とは異なるものであり、これ以上高い位置にある指は、タッチ操作に関わる可能性が低いとみなされ、タッチ閾値の補正が必要ではないと判定するための基準の高さである。図１４（Ｂ）において、薬指３０１、中指３０２、人差し指３０３は指先高さが一定の高さαより高いため、タッチ閾値２００とリリース閾値２０１はデフォルトのまま変化させない。しかし小指３００はニュートラルポジションにおける指先高さが低いため、その高さに合わせてタッチ閾値を５１０、リリース閾値が５１１と再設定する。同様に、親指３０４もタッチ閾値を５１２、リリース閾値を５１３と再設定する。変形例２では、このように、ユーザに合わせて閾値を設定することで誤認識が少ない自然なタッチ操作が可能になる。
【００８５】
ただし、所定の高さαによる区別を行わず、全ての指について、ニュートラルポジションでの指の高さ応じて閾値を変えてもよい。図１４（Ａ）は指の種類に応じて閾値を設定した例を示している。小指３００のタッチ閾値は５００、リリース閾値は５０１である。同様に、薬指３０１のタッチ閾値は５０２、リリース閾値は５０３である。中指３０２のタッチ閾値は５０４、リリース閾値は５０５である。人差し指３０３のタッチ閾値は５０６、リリース閾値は５０７である。親指３０４のタッチ閾値は５０８、リリース閾値は５０９となる。このように詳細に閾値を合わせこむことで、どの指先でも直観的に同程度の認識率と操作感を実現することができる。
【００８６】
＜変形例３：アプリケーションに応じた指毎の閾値補正＞
また別の変形例３として、ニュートラルポジションでの高さにはよらず、ステップＳ１０３で特定した種類に応じて、所定の指のタッチ閾値を調整してもよい。例えば、アプリケーションによっては、所定の種類の指先を認識しやすくすることで、自然な操作感を実現できる場合がある。人差し指と親指によるマルチタッチ操作を頻繁に行うアプリケーションにおいて、人差し指と親指を認識しやすくし、それ以外の指を認識しにくくする場合を説明する。図１４（Ｃ）は、小指３００、薬指３０１、中指３０２に関して、タッチを検出する条件が厳しくなるように、閾値を設定した様子を表す。まず、小指３００、薬指３０１、中指３０２のタッチ閾値５１４およびリリース閾値５１５を低く設定する。また、人差し指３０３および親指３０４のタッチ閾値５１６、リリース閾値５１７を高めに設定することでタッチを認識しやすくしている。
【００８７】
また、マルチタッチ操作を行う場合には、操作する以外の指が折り曲げられていると、５つ全ての指先が検出できず、指先の種類の認識結果が得られない場合がある。このような場合、指が検出できていなくても、ステップＳ１０３での指の特定結果を利用して、各指に最適な閾値を設定することができる。例えば、右手であれば、侵入位置から見て左（図１４（Ｄ）においては右）から１番目の指先と２番目の指先がそれぞれ親指と人差し指であると思われるので、それらの指先を認識しやすくできる。図１４（Ｄ）は右手の４つの指先５１８、５１９、５２０、５２１が検出されているが、種類は分からない状態を示している。ここで指先５２０と５２１は人差し指と親指であると思われるので、高めのタッチ閾値５１６、リリース閾値５１７が設定されており、指先５１８と５１９には低めのタッチ閾値５１４およびリリース閾値５１５が設定されている。同様に、左手であれば、侵入位置から見て右から１番目の指先と２番目の指先がそれぞれ親指と人差し指であると思われるので、それらの指先を認識しやすくできる。
【００８８】
以上説明した変形例１〜３によって、タッチ閾値を決定する場合、決定されたタッチ閾値に合わせてリリース閾値を決定することで、タッチ操作認識処理の全体の精度をより向上させることができる。変形例においても、第１の実施形態で説明したように、決定されたタッチ閾値及びリリース閾値を使ってタッチ状態か否かを判定する指先を絞り込むことで、操作に利用される指に連動して動いてしまうにより生じるタッチ操作の誤認識を低減することができる。
【００８９】
（その他の実施形態）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００９０】
１２０  画像取得部
１２１  領域検出部
１２２  位置検出部  １２３  特定部
１２４  条件決定部
１２５  識別部
１２６  認識部
１２７  出力制御部
【図１】
0006570376.tif 000002
【図２】
0006570376.tif 000003
【図３】
0006570376.tif 000004
【図４】
0006570376.tif 000005
【図５】
0006570376.tif 000006
【図６】
0006570376.tif 000007
【図７】
0006570376.tif 000008
【図８】
0006570376.tif 000009
【図９】
0006570376.tif 000010
【図１０】
0006570376.tif 000011
【図１１】
0006570376.tif 000012
【図１２】
0006570376.tif 000013
【図１３】
0006570376.tif 000014
【図１４】
0006570376.tif 000015