(57)【要約】【課題】  認識対象とタッチ対象面の近接状態に基づいて認識されるタッチ操作での、タッチ開始位置の検出精度を向上させることを目的とする。【解決手段】  上記課題を解決するため、本発明の情報処理装置は、操作面と認識対象との近接状態に基づいて、前記操作面が前記認識対象によってタッチされているかを判定する状態判定部３０６と、前記認識対象によって示される指示位置を検出する位置検出部３０２と、前記操作面が前記認識対象によってタッチされていると判定されている間に、前記位置検出手段によって検出された指示位置が初めに静止したとみなされる位置を、前記認識対象によるタッチ入力が開始された位置であると推定する推定部３０８と、を備えることを特徴とする。【選択図】  図１
2015043154.tif 000002
【特許請求の範囲】
【請求項１】
操作面と認識対象との近接状態に基づいて、前記操作面が前記認識対象によってタッチされているかを判定する状態判定手段と、
前記認識対象によって示される指示位置を検出する位置検出手段と、
前記状態判定手段により、前記操作面が前記認識対象によってタッチされていると判定されている間に、前記位置検出手段によって検出された指示位置が初めに静止したとみなされる位置を、前記認識対象によるタッチ入力が開始された位置であると推定する推定手段と、
を備えることを特徴とする情報処理装置。
【請求項２】
前記推定手段は、さらに、前記状態判定手段により、前記操作面が前記認識対象によってタッチされていると判定されている間において、前記位置検出手段によって検出された指示位置が最後に静止したとみなされる位置を、前記認識対象によるタッチ入力が終了された位置であると推定すること
を特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記状態判定手段は、前記操作面と前記認識対象との間の距離が、第１の閾値より小さくなってから、第２の閾値より大きくなるまでの間は、前記操作面が前記認識対象によってタッチされていると判定することを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記第２の閾値は、前記第１の閾値よりも大きいことを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記推定手段は、さらに、前記操作面と前記認識対象との間の距離が、第１の閾値より小さくなった位置を、前記認識対象によるホバー操作の開始位置であると推定し、前記操作面と前記認識対象との間の距離が、第２の閾値より大きくなった位置を、前記認識対象によるホバー操作の終了位置であると推定することを特徴とする請求項３又は４に記載の情報処理装置。
【請求項６】
前記推定手段によって、前記認識対象によるタッチ入力が開始された位置であると推定された位置と、前記認識対象によるタッチ入力が終了された位置であると推定された位置が一致する場合に、タップ操作が入力されたと認識する認識手段を更に備えることを特徴とする請求項２乃至５のいずれか１項に記載の情報処理装置。
【請求項７】
前記認識手段は、前記推定手段によって、前記認識対象によるタッチ入力が開始された位置であると推定された位置と、前記位置検出手段によって最後に検出された指示位置との間の距離が、所定の閾値より大きい場合に、ムーブ操作が開始されたと認識することを特徴とする請求項６に記載の情報処理装置。
【請求項８】
前記認識手段は、ムーブ操作が開始されたと認識してから、前記位置検出手段によって検出された指示位置が最後に静止したとみなされる位置を、前記ムーブ操作の終了位置と認識することを特徴とする請求項７に記載の情報処理装置。
【請求項９】
前記認識手段は、前記推定手段によって、前記認識対象によるタッチ入力が開始された位置であると推定された位置と、前記認識対象によるタッチ入力が終了された位置であると推定された位置が、一致しない場合に、ムーブ操作が入力されたと認識することを特徴とする請求項６に記載の情報処理装置。
【請求項１０】
前記操作面に表示される画像を制御する表示制御手段を更に備え、
前記表示制御手段は、前記認識手段により、タップ操作が入力されたと認識された場合、前記推定手段によって推定された前記タッチ入力が開始された位置に表示されたオブジェクトに対応する画像を前記操作面に表示させることを特徴とする請求項６乃至９のいずれか１項に記載の情報処理装置。
【請求項１１】
前記表示制御手段は、前記認識手段により、ムーブ操作が開始されたと認識された場合、前記推定手段によって推定された前記タッチ入力が開始された位置に表示されたオブジェクトを、前記位置検出手段によって最後に検出された指示位置に移動させることを特徴とする請求項６乃至１０のいずれか１項に記載の情報処理装置。
【請求項１２】
撮像部が撮像した入力画像から、前記認識対象が写る移動領域を検出する領域検出手段を更に備え、
前記位置検出手段は、前記領域検出手段によって検出された移動領域の形状に基づいて、前記認識対象による指示位置を検出することを特徴とする請求項１乃至１１のいずれか１項に記載の情報処理装置。
【請求項１３】
前記撮像部は、赤外光を撮像する赤外カメラであって、前記入力画像は、前記赤外カメラによって検出された赤外光の輝度値によって構成される情報であることを特徴とする請求項１２に記載の情報処理装置。
【請求項１４】
状態判定手段により、操作面と認識対象との近接状態に基づいて、前記操作面が前記認識対象によってタッチされているかを判定する状態判定工程と、
位置検出手段により、前記認識対象によって示される指示位置を検出する位置検出工程と、
推定手段により、前記状態判定工程において前記操作面が前記認識対象によってタッチされていると判定されている間に、前記位置検出工程において検出された指示位置が初めに静止したとみなされる位置を、前記認識対象によるタッチ入力が開始された位置であると推定する推定工程と、
を有することを特徴とする情報処理装置の制御方法。
【請求項１５】
コンピュータに読み込ませ実行させることで、前記コンピュータを請求項１に記載の情報処理装置の各手段として機能させるプログラム。
【請求項１６】
請求項１５に記載のプログラムを記憶したコンピュータが読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、認識対象とタッチ対象面の近接状態に基づいて、当該認識対象によって行われるタッチ操作を認識する技術に関する。
【背景技術】
【０００２】
近年では、ＡＲ（Ａｕｇｍｅｎｔｅｄ  Ｒｅａｌｉｔｙ）やＭＲ（Ｍｉｘｅｄ  Ｒｅａｌｉｔｙ）といった環境において、物理的には存在しない操作面（仮想面）に対するタッチ操作が行われる場面がある。また、プロジェクションによってユーザインタフェース（以下、ＵＩ）を壁や机など任意の操作面に投影し、投影したＵＩに対してタッチ操作が行われる場面がある。このような場面においては、ステレオカメラや距離画像センサ等を用い、操作面と、操作を行う指示部として認識すべき認識対象（例えばユーザの指先）との間の距離に基づく判断により、両者が接触しているか否かを判断することが多い。具体的には、操作面と、ユーザの指先との間の距離に所定の閾値を設ける。そして、当該距離が閾値より小さければ、操作面がタッチされている状態を示す「タッチ状態」、閾値より大きければ操作面がタッチされていない状態を示す「非タッチ状態（リリース状態）」であるという判定を行う。そして、タッチ状態から非タッチ状態に移行した時点での指先の位置を、タッチ位置と推定する。そして、非タッチ状態からタッチ状態に移行した時点での指先の位置を、タッチが終了する位置リリース位置と推定する。
【０００３】
しかし、検出できる距離の分解能が低い（粗い）場合には、状態を判定するタイミング及び推定される位置に誤差が生じることがある。また、距離の分解能が高い場合でも、タッチ状態と非タッチ状態を区別するための閾値を大きく設定（例えば指先の太さより大きく設定）してしまうと、同様の課題が生ずることがある。
【０００４】
光学式タッチパネルでは、操作面と平行な検出面に照射された光が遮られたことを検知した場合に、操作面と指示部の間の距離が所定の闘値より小さくなったと判断する。特許文献１では、操作面をタッチする指の傾きによって検出面の高さと実際の操作面の高さとに生じる指示部の位置のずれを補正するため、２段階の検出面で指示部の位置を検出して指に傾き方を認識する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平５−２４１７３３
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、特許文献１の先行技術は、操作面と２段階の検出面の位置関係は、設計時から固定されている。従って、操作面が仮想面に設定されたり、もしくは操作面を任意の平面に設定されたりする場合に適応することは考慮されていない。
【０００７】
本発明は上記課題を考慮したものであり、認識対象とタッチ対象面の近接状態に基づいて認識されるタッチ操作での、タッチ開始位置の検出精度を向上させることを目的とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するため、本発明に係る情報処理装置は、操作面と認識対象との近接状態に基づいて、前記操作面が前記認識対象によってタッチされているかを判定する状態判定手段と、前記認識対象によって示される指示位置を検出する位置検出手段と、前記状態判定手段により、前記操作面が前記認識対象によってタッチされていると判定されている間に、前記位置検出手段によって検出された指示位置が初めに静止したとみなされる位置を、前記認識対象によるタッチ入力が開始された位置であると推定する推定手段と、備えることを特徴とする。
【発明の効果】
【０００９】
本発明によれば、認識対象とタッチ対象面の近接状態に基づいて認識されるタッチ操作での、タッチ開始位置の検出精度を向上する。
【図面の簡単な説明】
【００１０】
【図１】情報処理装置の外観と使用環境の一例
【図２】情報処理装置のハードウェア構成、及び機能構成を示すブロック図
【図３】指先と操作面の接触位置に誤差が生じてしまう理由を示す図
【図４】本発明における情報処理装置が実行するメイン処理のフローチャート
【図５】第１の実施形態におけるタッチ判定処理のフローチャート
【図６】情報処理装置を使ってタップ操作を行った際に取得できるデータの一例
【図７】情報処理装置を使ってムーブ操作を行った際に取得できるデータの一例
【図８】第１の実施形態の変形例におけるタッチ判定処理のフローチャート
【発明を実施するための形態】
【００１１】
以下、本発明の実施形態について図面を参照して詳細に説明する。なお、以下で説明する実施形態は、本発明を具体的に実施した場合の一例を示すものであり、これに限るものではない。
【００１２】
＜第１の実施形態＞
まず第１の実施形態として、認識対象と操作面との距離に基づいてタッチ状態と非タッチ状態を区別した上で、タッチ状態においてユーザの指先の動きが静止したとみなされる位置をタッチ位置として特定する実施形態を説明する。タッチ位置とは、タッチ入力によって指示される操作面に平行な二次元（ｘｙ平面）における位置座標を示し、少なくとも、タッチ入力が開始されるタッチ開始位置と、タッチ入力が終了されるタッチ終了位置を含む。なお、本実施形態では、情報処理装置に対する操作を行う指示部として認識すべき認識対象の一例として、ユーザの手及びその指先を挙げて説明する。ただし、本実施形態は認識対象をスタイラスペンや差し棒などの操作器具に置き換えても適応可能である。
【００１３】
図１は、本実施形態で説明する情報処理装置１００を設置したシステムの外観の一例を示している。
【００１４】
図２（Ａ）は、本実施形態における情報処理装置１００のハードウェア構成の一例を示すブロック図である。同図において、ＣＰＵ２００は、バス２０３を介して接続する各デバイスを統括的に制御する。オペレーティングシステム（ＯＳ）をはじめ、後述するフローチャートに示されるような本発明に係る各処理プログラム、デバイスドライバ等はＲＯＭ２０２に記憶されており、ＲＡＭ２０１に一時記憶され、ＣＰＵ２００によって適宜実行される。ＲＡＭ２０１は、高速にアクセス可能なＣＰＵ２００の主メモリ、ワークエリア等の一時記憶領域として用いられる。ここでＯＳおよび各処理プログラム等は外部の記憶装置２１１に記憶されていてもよく、その場合は電源投入時に必要な情報がＲＡＭ２０１に適宜読み込まれる。また、ディスプレイＩ／Ｆ２０４は、情報処理装置１００内部で生成される表示オブジェクト（表示画像）をプロジェクタ２０９が処理可能な信号に変換する。入力Ｉ／Ｆ２０５は、赤外カメラ２０８が生成する赤外画像を入力信号として受信し、情報処理装置１００が処理可能な情報に変換する。出力Ｉ／Ｆ２０６は、情報処理装置１００内部で生成される赤外発光命令を赤外発光部２０７が処理可能な信号に変換する。
【００１５】
本実施形態では、情報処理装置１００で投影するデジタルデータは記憶装置２１１に格納されているものとする。記憶装置２１１としては、ディスクデバイスやフラッシュメモリ、ネットワークやＵＳＢなどの各種Ｉ／Ｆ２１０を介して接続される記憶装置２１１を使用する。
【００１６】
赤外カメラ２０８は、本実施形態において、認識対象の動きを画像情報から検出するために用いられる撮像部である。赤外カメラ２０８で生成された赤外強度画像は入力画像としてＲＡＭ２０１で一時保存され、ＣＰＵ２００によって適宜処理され、破棄されるが、適宜必要なデータは記憶装置２１１に蓄積しても構わない。
【００１７】
以下、他図を用いて同じものを説明する場合には同一の符号を付し、その説明を省略する。
【００１８】
図１に示すように情報処理装置１００は、プロジェクタ２０９の投影光照射部１０５から投影光を照射することにより、任意の平面を操作面として設定できる。図１の場合は、情報処理装置１００をテーブル１０１上に設置し、テーブル面上に投影していることを示している。ここで、図１の１０２ａ〜ｄは、プロジェクタ２０９によってテーブル面上に投影された電子データやボタンなどのＵＩ部品（以下、まとめてオブジェクトと記載する）を示している。本実施形態では、ユーザが手指１０３を使って、前記オブジェクトに対してタッチ操作を行う場合について説明する。また本実施形態ではテーブル１０１に画像を投影する例を述べる。ただし、操作面１０１はテーブル以外でもよく、例えば壁面に投影光を照射して操作面として利用してもよく、また、表面は必ずしも平面でなくとも操作面とすることができる。また、赤外光発光部２０７によって発光される赤外光は、発光素子１０４から投影面に向けて照射され、ユーザの手指１０３等に反射し、赤外反射光として赤外カメラ２０８において撮像される。図１において、レンズ１０６は赤外カメラ２０８の撮像用レンズである。情報処理装置１００は、赤外カメラ２０８によって得られた赤外強度画像に対して各種画像処理することによって手指の三次元位置を計測した結果から手指とテーブル面の近接状態を判断し、テーブル面へのタッチ判定を行う。なお、本実施形態では、図１に示されるように操作面１０１に対して平行な二次元平面にｘ軸とｙ軸、操作面１０１に直交する高さ方向にｚ軸を設定し三次元位置情報を座標値として扱う。ただし、操作面が平面でない場合やユーザと操作面との位置関係によっては、必ずしも操作面に平行あるいは直交の関係の座標軸ではなくてもよい。その場合も、ｚ軸は認識対象と操作面との近接関係（両者の間の距離の大きさの程度）を検出する方向、ｚ軸と交わる方向にｘ軸とｙ軸とが設定される。
【００１９】
図２（Ｂ）は、本実施形態における情報処理装置１００の機能構成の一例を示すブロック図である。情報処理装置１００は、画像取得部３００、領域検出部３０１、位置検出部３０２、輝度取得部３０４から構成される。さらに、情報処理装置１００は、変換部３０５、状態判定部３０６、推定部３０７、認識部３０８、表示制御部３０９から構成される。これらの各機能部は、ＣＰＵ２００が、ＲＯＭ２０２に格納されたプログラムをＲＡＭ２０１に展開し、後述する各フローチャートに従った処理を実行することで実現されている。また例えば、上記ＣＰＵ２００を用いたソフトウェア処理の代替としてハードウェアを構成する場合には、ここで説明する各機能部の処理に対応させた演算部や回路を構成すればよい。
【００２０】
本実施形態では、情報処理装置１００は、起動されたのに応じて赤外発光部２０７からプロジェクタ２０９の投影方向と同じ方向に赤外光を常時照射する。プロジェクタ２０９の投影範囲にユーザの手指が入ると、赤外光は手指の表面で反射し、赤外カメラ２０８に赤外反射強度として撮像される。
【００２１】
画像取得部３００は、赤外カメラ２０８で撮像された赤外強度画像を所定時間毎に取得し、ＲＡＭ２０１に随時保持する。赤外強度画像は、赤外反射強度を示す輝度値によって構成される。保持された赤外強度画像は、情報処理装置１００の各機能ブロックにおいて順次処理される。なお、本実施形において、画像取得部３００が赤外強度画像を取得する周期は、赤外カメラ２０８が撮像する映像のフレームレートに一致するものとする。ただし、フレームレートに限らない所定時間を画像取得の周期として設定することもできる。
【００２２】
領域検出部３０１は、ＲＡＭ２０１に保持されている赤外強度画像を解析することによって、認識対象であるユーザの手が写る領域を検出する。以下では、ユーザの手が写る領域を単に手領域という。さらに、領域検出部３０１は、検出した手領域をラベリングし、その結果をＲＡＭ２０１に保持する。
【００２３】
位置検出部３０２は、領域検出部３０１によってラベリングされた手領域から、指示位置を推定し、その結果をＲＡＭ２０１に保持する。本実施形態では、指示位置は、ユーザの手の指先の位置である。なお、差し棒やスタイラスペンのような操作器具を認識対象とする場合は、その先端の位置を指示位置とすればよい。
【００２４】
距離取得部３０３は、領域検出部３０１によって検出されている移動領域の赤外強度情報と、位置検出部３０２によって検出された指示位置に基づいて、ユーザの指先と操作面との間の距離を取得する。本実施形態の距離取得部３０３は、輝度取得部３０４と変換部３０５を有する。輝度取得部３０４は、画像取得部３００で取得した赤外強度画像と位置検出部３０２で検出した指示位置を利用して指示位置の赤外反射強度の輝度値を取得し、ＲＡＭ２０１に保持する。そして、変換部３０５は、輝度取得部３０４で取得した輝度値を、予め保持されている対応情報に基づいて距離に変換し、その結果を、距離取得部３０３が取得した距離情報としてＲＡＭ２０１に保持する。
【００２５】
状態判定部３０６は、距離取得部３０３で取得した、ユーザの指先と操作面との距離に基づいて、ユーザの手指１０３が操作面１０１をタッチしている状態か否かを判定し、判定した状態を示す情報を認識部３０８に通知する。本実施形態の状態判定部３０６は、ユーザの指先と操作面との距離が所定の閾値以下である場合に、操作面１０１がタッチされている状態（タッチ状態）であると判定する。一方、ユーザの指先と操作面との距離が所定の閾値より大きい場合に、操作面１０１がタッチされていない状態（非タッチ状態）であると判定する。以下では、操作面１０１がタッチされている状態であるか否かを判定する処理を、「タッチ判定」という。
【００２６】
推定部３０７は、推定部位置検出部３０２が検出している指示位置の動きを追跡し、タッチ状態の間の１以上の通過点から、所定の条件に基づいて、タッチの開始位置と終了位置とを推定する。本実施形態では、タッチ状態の間に指示位置が静止したとみなされる時の位置を、タッチの開始位置あるいは終了位置と推定する。両者は一致する場合もある。本実施形態の推定部３０７は、まず画像取得部３００によって取得された前のフレームの赤外強度画像から検出された指示位置と、最新のフレームの赤外強度画像から検出された指示位置との差分を、指示位置の移動距離として取得する。そして、取得した移動距離が所定の距離の閾値よりも小さい場合に、指示位置が静止したとみなし、最新のフレームの赤外強度画像から検出された指示位置を、タッチ位置であると推定する。このような推定方法を用いることで、指示位置が静止したとみなせるか否かを判定するために保持しておくべき情報が、少なくてすむ。ただし、連続するフレームについて指示位置が静止し続けているとみなされる場合には、再び動き始めるまでをまとめて指示位置が静止した回数は１回であると捉えてもよい。
【００２７】
ただし、指示位置が静止したとみなされる位置の推定方法は、これに限らない。例えば、操作面１０１がタッチされている状態にある間は、連続する２フレームから検出される指示位置の差分、すなわちフレーム間隔毎の移動距離を、赤外強度画像が取得される毎に記録する。そして、記録された一連の情報のうち当該差分が極小となった位置を、指示位置が静止したとみなすこともできる。この方法の場合は、記憶する必要がある情報が上述の方法より多いという一方で、ユーザの指先の動きが速く、連続する２フレーム間の移動距離が所定の距離の閾値を下回ることがないような場合でも、タッチ位置を推定できる利点がある。
【００２８】
認識部３０８は、状態判定部３０６の判定結果や推定部３０７が推定したタッチ位置に基づいて、ユーザによる入力の状況を認識し、タッチイベントとして表示制御部３０９など入力に応答するアプリケーションに関連する機能部に通知する。アプリケーションでは、タッチ入力によって構成されるタッチ操作に対して応答を変える。本実施形態の認識部３０８は、状態判定部３０６によって判定されている状態が、非タッチ状態からタッチ状態へ移行した時は、タッチが開始されたことを示すタッチイベントとして「タッチ」を通知する。また、逆にタッチ状態から非タッチ状態へ移行した時は、タッチされていた指先が操作面から離れたことを示すタッチイベントとして「リリース」を通知する。そして、「タッチ」が通知されてから、「リリース」が通知されるまでに、指先による指示位置の座標が変化しなかったとみなされる場合には、１点の位置座標が指示されたことを示すイベントとして「タップ」を通知する。それに対し「タッチ」が通知されてから、「リリース」が通知されることなく、指先による指示位置の座標が変化した場合には、タッチ状態のままタッチ位置が移動を開始したことを示す「ムーブスタート」イベントを通知する。さらに移動が続いた場合には「ムーブ」イベントを通知する。
【００２９】
本実施形態では、「タップ」イベントが通知されるのは、タッチの開始位置と終了位置が一致する場合に相当する。タッチの開始位置と終了位置が一致するか否かは、両者の座標の差異が所定の範囲に収まるか否かに応じて判断される。タップ操作によって示された位置をタップ位置という。タップ位置に、装置に対して何かしらのコマンドが発生するような操作に関わるＵＩ部品が表示されていれば、認識部３０８は、当該コマンドを発生させ、アプリケーションの応答に関わる表示制御部３０９などの機能部に通知する。表示制御部３０９は、通知を受け、タップされたＵＩ部品に対応する表示画像を生成し、プロジェクタ２０９によって操作面１０１に表示させる。それに対し、タッチの開始位置と最新の指示位置に違いが生じた時点で「ムーブスタート」イベントが通知され、以降はタッチ状態が続く限り「ムーブ」イベントが通知される。ムーブは、例えばタッチの開始位置に表示されていたオブジェクトを、終了位置まで移動させる操作として認識される。なお、例示した各イベントは、上述したようにタッチ状態の移行や行われた操作の種別を示す情報と、それらのイベントに関連するｘｙ平面上の位置を示す情報とを関連付けた情報として、表示制御部３０９を始めとする各機能部に伝えられる。ｘ座標とｙ座標は、操作面に平行な二次元方向の座標軸として定義される。
【００３０】
認識部３０８が通知するタッチイベントとして例示したうち、「タッチ」イベントと「リリース」イベントは、タッチ状態と非タッチ状態との間の遷移を示すイベントである。それに対し、「ムーブスタート」イベント（又は「ムーブ」イベント）と「タップ」イベントは、それぞれ排他的な２つの入力種別を示すイベントである。従って「ムーブスタート」イベント（又は「ムーブ」イベント）と「タップ」イベントが重複して通知されることはない。一方で、タッチの開始位置と終了位置が一致するか否かは、タッチが終了した後でなければ判定できないため、「タップ」イベントは、必ず「リリース」イベントが通知された後で通知される。「ムーブスタート」イベント（又は「ムーブ」イベント）は、タッチ状態が継続されているときに、指示位置が移動したか否かに基づいて通知されるため、必ず「リリース」イベントの通知前に通知される。「ムーブスタート」及び「ムーブ」イベントの次に「リリース」イベントが通知された場合には、表示制御部３０９は、タッチ入力の終了位置を、ムーブ操作の終了位置であるとして表示制御を行う。
【００３１】
表示制御部３０９は、認識部３０８から通知されたイベントに応じて記憶装置２１１と入出力Ｉ／Ｆ２１０の機能部である記憶部３１０から取得した各種オブジェクトを用いて、投影面に投影させる表示画像を生成し、プロジェクタ２０９に出力する。本実施形態では、表示画像には電子データやＵＩ部品（ボタンなど）がオブジェクトとして配置されている。また表示制御部３０９は、認識部３０８から通知されたコマンドに応じて表示画像の内容を制御し、入力されたタッチ操作に対するフィードバックを示す。
【００３２】
本実施形態の情報処理装置１００の処理を詳細に記載する前に、従来の方法によるタッチ位置の推定方法では誤差が生じやすい理由を、図３を用いて簡単に説明する。
【００３３】
上述したように、一般的に操作面とユーザの指先との間の距離に閾値を設けてタッチ判定する場合、当該距離が閾値以下ならばタッチ状態、閾値より大きいなら非タッチ状態と判定される。そして、非タッチ状態からタッチ状態に移行した時点での指先の位置がタッチ位置であると推定される。また、非タッチ状態からタッチ状態に移行した時点での指先の位置が、リリース位置であると推定される。また、タップ操作に係るタップ位置は、タッチ位置によって定義されることが多い。このとき使用される閾値は、距離を検出する手段の分解能に適した値が設定される。例えば、分解能に一致する値とすれば、操作面が触れられているか否かをより厳密に区別することになる。また例えば、ユーザの使い勝手に合わせて、分解能より大きい値（数ｃｍ）とすることで、必ずしも操作面に触れなくとも、操作面に指先をある程度近づけた段階でタッチ状態と判定することができるようになる。
【００３４】
図３は、上記の方法において、タッチ位置およびリリース位置が推定される様子の具体例を示す図である。図３では、図中に示される座標軸のように、（Ａ１）（Ｂ１）はｘｙ平面に相当する操作面を上方から見た状態を示し、（Ａ２）（Ｂ２）は横から見た状態を示す。タッチ判定に用いる操作面とユーザの指先との間の距離の閾値は、ｚ軸の値、すなわち操作面からの高さ方向の距離の閾値として設定される。
【００３５】
図３の（Ａ１）（Ａ２）は、ユーザが指先を操作面に対して垂直に動かすようにして、Ｐｏｓ０の位置をタップする様子を示している。
【００３６】
ここでは、図３（Ａ２）で示すように、ユーザの指先は４００ａ⇒４００ｂの経路を通過してＰｏｓ０をタップしたとする。タッチ判定に用いる閾値を、図３の高さ４０１して、状態が移行したと判定される時点での指先の位置をタッチ位置、リリース位置であると推定すると、両者はともにＰｏｓ１（ｘ１，ｚ１）となる。この時、本来のタップ位置Ｐｏｓ０（ｘ０，ｚ０）とはｚの値が異なるが、タップ操作など操作面に対して入力されるタッチ操作は、ｘｙ平面上でのタッチ位置を基に認識されるため、ユーザの意図通りの位置がタップ位置として認識される。
【００３７】
一方、図３の（Ｂ１）（Ｂ２）は、ユーザが指先を操作面に対して平行方向に移動させている途中でＰｏｓ０の位置をタップする様子を示している。多くの場合、ユーザはタッチ判定の閾値を意識して操作を行ったり、操作面に対して垂直な動きを心がけたりしている訳ではないので、このように平行方向にも多少の移動しながらタッチ操作を行うことが多い。
【００３８】
ここでは、図３（Ｂ２）で示すように、ユーザの指先が４００ｃ⇒４００ｄの経路を通過してＰｏｓ０をタップしたとする。（Ａ１）（Ａ２）と同様、タッチ判定に用いる閾値を高さ４０１とすると、タッチ位置はＰｏｓ２（ｘ２，ｚ２）、リリース位置はＰｏｓ３（ｘ３，ｚ３）と推定される。この場合、本来ユーザがタップしたい位置Ｐｏｓ０（ｘ０，ｚ０）とはｘ、ｙ、ｚともに異なるため、ユーザの意図しているタップ位置は認識されない。図３（Ｂ１）では、位置４０２が本来のユーザが意図してタップした位置を示しており、タッチ位置及びリリース位置と誤差が生じていることがわかる。タッチ位置とリリース位置が一致しているかを判定するための閾値によっては、両者の位置が不一致であると判定され、ムーブ操作が認識されてしまうことがあり得る。また、一致していると判定されたとしても、タップ位置の定義の仕方によっては誤動作の原因となる。例えば、タッチ位置をタップ位置と定義する場合、ユーザが意図したタップ位置Ｐｏｓ０（ｘ０，ｚ０）と従来法で推定されたタッチの開始位置Ｐｏｓ２（ｘ２，ｚ２）に、異なるコマンドに対応するＵＩ部品が表示されていれば、ユーザにとって誤動作の原因となる。タッチの終了位置がタップ位置と定義される場合でも同様である。
【００３９】
本実施形態は、このように生じるタッチ位置の誤差を低減し、ユーザの意図に沿ったタッチ位置あるいはリリース位置を推定するためのものである。
【００４０】
次に、図４、図５のフローチャートを用いて本実施形態における情報処理装置１００の処理過程を詳細に説明する。
【００４１】
図４は、本実施形態の情報処理装置１００が実行する、タッチ操作を認識するメイン処理の流れの一例を示すフローチャートである。本実施形態では、情報処理装置１００の電源がＯＮになることで図４のフローチャートが開始される。
【００４２】
まず図４のステップＳ１００において、表示制御部３０９は、記憶部３１０からデータを取得する。そして表示制御部３０９は、取得したデータとＵＩ部品を配置した表示画像を生成し、プロジェクタ２０９へ出力する。その結果、操作面１０１にはプロジェクタ２０９から投影された表示画像が表示される。
【００４３】
ステップＳ１０１において、情報処理装置１００は、プロジェクタ２０９の投影方向と同じ方向に赤外光を照射する。赤外光は情報処理装置１００に搭載されている赤外発光部２０７から照射される。赤外光はステップＳ１０１が実行されて以降、情報処理装置１００の電源がＯＮの状態の時は常に照射されている。プロジェクタ２０９の投影範囲内に認識対象であるユーザの手指や、その他の物体が入り込むと、赤外光はその表面で反射される。ここで、投影範囲内の全ての領域において適切に赤外光が反射されるように、赤外照射範囲はキャリブレーションされる。また、赤外反射光は、情報処理装置１００に搭載されている赤外カメラ２０８によって、赤外強度画像として撮像される。
【００４４】
ステップＳ１０２において、画像取得部３００は、赤外カメラ２０８によって撮像された赤外度画像を規定のフレーム間隔で取得し、フレーム毎にＲＡＭ２０１に保持する。
【００４５】
ステップＳ１０３において、領域検出部３０１は、ＲＡＭ２０１に保持されている赤外強度画像を解析し、投影範囲内で物体が検出されたかを判定する。本実施形態では、赤外光の反射強度が物体によって異なる性質を利用して、何らかの物体が写り込んだ際の赤外強度画像と、操作面１０１のみが写っている赤外強度画像との差分（背景差分）を抽出する処理を行うことによって、物体が写る領域の検出を行う。但し、検出方法はこの限りではない。例えば、赤外カメラ２０８の代わりに、ステレオカメラや距離画像センサを、認識対象を検出するための撮像部として利用する場合は、肌色情報や手のモデル情報などを利用して物体が写る移動領域を検出できる。物体が検出されたと判定された場合（ステップＳ１０３でＹＥＳ）、ステップＳ１０４に進む。物体が検出されていないと判定された場合（ステップＳ１０３でＮＯ）は、ステップＳ１０２に処理が戻り、物体が検出されるまでステップＳ１０２とＳ１０３の処理を繰り返す。
【００４６】
ステップＳ１０４では、操作面１０１が認識対象によってタッチされている状態かを判定し、タッチ入力を認識するタッチ判定処理が行われる。ステップＳ１０４のタッチ判定処理では、判定結果に基づいてタッチ操作が認識されると、認識部３０８から、「タッチ」、「リリース」、「タップ」、「ムーブスタート」、「ムーブ」のうちいずれかのタッチイベントが、アプリケーションに対して通知される。本実施形態のタッチ判定処理の詳細は、図５のフローチャートを参照して後述する。
【００４７】
ステップＳ１０５では、ステップＳ１０４において認識されたタッチ入力がタッチ操作として解釈された結果が、アプリケーションにより出力される。本実施形態では特に、表示制御部３０９が、プロジェクタ２０９によって投影される表示画像の内容を制御する。例えば、「タッチ」が通知されたことに応じて、タッチ開始位置に表示されているオブジェクトが明示されるように表示形態を変える、あるいはタッチ開始位置に表示されたＧＵＩオブジェクトに対応する処理の結果を表示画像に反映する。あるいは「ムーブスタート」と「ムーブ」のいずれかが通知されたことに応じて指示位置に表示されているオブジェクトを移動させる。あるいは「リリース」が通知されたことに応じて、移動されてきたオブジェクトの位置を確定させる。あるいは「タップ」イベントが通知されたことに応じてタッチ開始位置に表示されたＧＵＩオブジェクトに対応する処理の結果を表示画像に反映する。
【００４８】
ステップＳ１０５の処理が終了すると、ステップＳ１０６において、情報処理装置１００は、電源をＯＦＦするかを判定する。本実施形態では、物理ボタンやＧＵＩに対する入力により、電源をＯＦＦする指示が入力された場合、もしくは認識対象が検出されないまま所定時間が経過した場合に電源をＯＦＦすると判断する。電源をＯＦＦしないと判定された場合（ステップＳ１０６でＮＯ）は、ステップＳ１０２へ処理が移行し、認識対象が検出される度に、前述した処理を繰り返しながら、タッチ操作の認識を繰り返す。一方、電源をＯＦＦすると判定された場合（ステップＳ１０６でＹＥＳ）は、情報処理装置１００は全ての処理を終了する。
【００４９】
ここで、図５のフローチャートを参照して、本実施形態のステップＳ１０４において実行されるタッチ判定処理の詳細を説明する。
【００５０】
ステップＳ１０３の処理完了に応じてステップＳ１０４の処理が開始されると、まずステップＳ２００において、領域検出部３０１は、領域検出部３０１が検出した領域が、手領域であるかを判定する。すなわち、当該領域に写る本実施形態では、検出された物体領域の大きさと縦横比を用い、簡単な手形状の認識を行うことによって手領域かの判定を行う。検出した領域が手領域であると判定された場合（ステップＳ２００でＹＥＳ）、ステップＳ２０１へ処理が移行する。この時、領域検出部３０１は、赤外強度画像のうち手領域に該当するピクセルに対してラベリングを行い、ラベリング後の赤外強度画像をＲＡＭ２０１に保持する。一方、検出した領域が手領域ではないと判定された場合（ステップＳ２００でＮＯ）は、ステップＳ１０４の処理が終了する。
【００５１】
なお、検出された領域が手領域か否かの判定方法は、縦横比を用いる方法に限らず、例えば検出された領域の形状と、予め登録された人間の手の形状モデルとをとマッチングし、所定以上の尤度が算出された場合に、手領域であると判定することもできる。また、本実施形態では予め操作を行う認識対象としてユーザの手指が設定されているため、手領域か否かの判定とするが、ステップＳ１０３の処理は、すなわち領域検出部３０１が検出した領域に写る物体が、認識対象か否かを判定する処理に他ならない。従って、認識対象がユーザの手ではなかった場合にも、適応可能である。
【００５２】
次に、ステップＳ２０１において、位置検出部３０２は、ラベリング情報に基づいて赤外強度画像中の手領域を特定し、さらにその手領域内において指示位置を推定する。本実施形態では、「手領域と撮影範囲の境界線とが交わる位置の平均位置」を手指の侵入位置と定義し、侵入位置から最も遠い手領域の点を、指示位置として推定する。本実施形態において、指示位置は、ユーザの指先の位置である。検出された指示位置を示す情報は、ＲＡＭ２０１に保持される。本実施形態では、指示位置は、図３で示した座標軸に基づく座標情報で示される。
【００５３】
次に、ステップＳ２０２、およびステップＳ２０３において、距離取得部３０３が、ユーザの指先と操作面との間の距離を取得する処理を実行する。本実施形態では、まずステップＳ２０２において、輝度取得部３０４が、ＲＡＭ２０１に保持されている赤外強度画像と、指示位置の情報から、ユーザの指先によって反射された赤外光の輝度を取得する。具体的には、指先の位置に対応するピクセルの赤外強度を示す輝度値を取得する。その際、指示位置の１ピクセルの輝度だけだと輝度がバラついてしまうため、本実施形態では、指示位置を含む規定のピクセル領域の輝度平均を指示位置の輝度として算出し、ＲＡＭ２０１に保存する。
【００５４】
次に、ステップＳ２０３において、変換部３０５は、算出した指先輝度を指先と赤外カメラ２０８間の垂直距離ｈＬに変換する。本実施例では、空間上での座標が既知である複数の点群の輝度を予め測定しておくことによって、任意の座標に位置する指先の輝度から垂直距離ｈＬを取得する。つまり、変換式を作成して垂直距離ｈＬを算出する。また、赤外カメラ２０８からテーブル１０１までの垂直距離Ｌｔも予め分かっているので、指先とテーブル間の垂直距離ｈＬ（高さ）は、以下の式１で求められる。
【００５５】
ｈＬ＝Ｌｔ−Ｌｆ（＞０）                  ・・・（式１）
ここで、本実施形態の情報処理装置１００に搭載されている赤外発光部２０７と赤外カメラ２０８を使って算出できる指先とテーブル面との垂直距離の分解能（精度）は２０ｍｍであるとする。つまり、指先が操作面１０１から垂直距離２０ｍｍ以下の位置にある場合、垂直距離ｈＬが０ｍｍなのか２０ｍｍなのか、それとも０〜２０ｍｍ範囲内の異なる値なのかを正確に求めることはできないことを想定する。
【００５６】
本実施形態では、認識対象を検出するために赤外強度画像を利用する。従った上記のような方法では、同じ赤外強度画像に基づいて、指先と操作面との間の距離を取得することができる点で効率が良い。ただし、距離取得部３０３がユーザの指先と操作面との間の距離を取得する方法はこれに限らない。例えば、ステレオカメラを使用するなどして得た多視点撮像画像に基づいて指先と操作面との距離情報を取得するおとも可能である。また、操作面側に近接位置センサを設置することで、操作面に近接する指先の高さを直接検出することも可能である。
【００５７】
次に、状態判定部３０６によるタッチ判定処理を説明する。以降の説明を簡単にするため、ステップＳ１０２、ステップＳ１０３、ステップＳ２００、ステップＳ２０１、ステップＳ２０２、ステップＳ２０３という一連の処理ステップの流れを「前処理」と名付ける。
【００５８】
前処理が完了すると、ステップＳ２０４において、状態判定部３０６は、取得された垂直距離ｈＬと、予め設定されたタッチ判定のための閾値１との比較し、垂直距離ｈＬが閾値１以下であるかを判定する。閾値１は、情報処理装置１００が非タッチ状態からタッチ状態に移行したかを判定するための闘値である。垂直距離ｈＬが閾値１以下であると判定された場合（ステップＳ２０４でＹＥＳ）は、ステップＳ２０５に進む。この場合は、操作面１０１はタッチされている状態、つまりタッチ状態であると判定されたことになる。一方、垂直距離ｈＬが閾値１より大きいと判定された場合（ステップＳ２０４でＮＯ）は、ステップＳ２０８に進む。この場合は、操作面１０１はタッチされていない状態、つまり非タッチ状態であると判定されたことになる。
【００５９】
ステップＳ２０５では、状態判定部３０６が、既に操作面１０１がタッチ状態であったかを判定する。つまり、前回ステップＳ２０４の判定がなされたときの判定結果が、タッチ状態であったかを判定する。本実施形態では、ステップＳ２０４の判定結果を示す情報がＲＡＭ２０１に保持される。一例として、ここではタッチ判定フラグを保持する。タッチ判定フラグが「０」であれば非タッチ状態、「１」であればタッチ状態であることが示される。タッチ判定フラグの値は、初期状態では「０」であり、ステップＳ２０６あるいはステップＳ２１０において、必要に応じて更新される。つまり、ステップＳ２０５において状態判定部３０６は、その時点でＲＡＭ２０１に保持されているタッチ判定フラグが「１」である場合に、既にタッチ状態であったと判定する。既にタッチ状態であったと判定された場合（ステップＳ２０５でＹＥＳ）には、ステップＳ２１４に進む。それに対し、それまではタッチ状態ではなかった、すなわち非タッチ状態であったと判定された場合（ステップＳ２０５でＮＯ）には、ステップＳ２０６に進む。
【００６０】
ステップＳ２０６では、状態判定部３０６が、ＲＡＭ２０１に保持されているタッチ判定フラグを「１」に更新する。
【００６１】
ステップＳ２０７では、認識部３０８が、「タッチ」イベントを通知する。「タッチ」イベントに含まれる位置情報は、情報処理装置１００が非タッチ状態からタッチ状態に移行した時点で検出された指示位置のｘｙ座標である。これは、情報処理装置１００によって、認識対象が操作面１０１に近接したことが検出され始めた近接開始位置を示す。なお、本実施形態の近接開始位置は、図３で説明した従来法ではタッチ位置に当たる。
【００６２】
以上説明したように、前処理の後のステップＳ２０５〜Ｓ２０７の処理は、操作面１０１がユーザの手指１０３によってタッチされ始めたことを示す「タッチ」イベントを通知する処理の流れである。
【００６３】
一方、ステップＳ２０４からステップＳ２０８に進んだ場合、状態判定部３０６は、取得された垂直距離ｈＬと、予め設定されたタッチ判定のための闘値２との比較し、垂直距離ｈＬが闘値２以上であるかを判定する。閾値２は、操作面１０１がタッチ状態から非タッチ状態に移行したかを判定するための閾値である。閾値１と閾値２は、同じ値であってもよいが、閾値１より闘値２を大きく設定しておくことで、高さ情報のぶれの影響を抑え、ユーザの指先が十分に操作面１０１から離れて初めて非タッチ状態への移行を確定させることができる。従って、本実施形態では閾値１より闘値２を大きく設定し、非タッチ状態への移行が誤検出されることを防ぐ。垂直距離ｈＬが闘値２以上であると判定された場合（ステップＳ２０８でＹＥＳ）は、ステップＳ２０９に進む。この場合は、操作面１０１は非タッチ状態であると判定されたことになる。一方、垂直距離ｈＬが閾値２より小さいと判定された場合（ステップＳ２０８でＮＯ）は、処理を終了しメイン処理にリターンする。この場合は、タッチ状態が継続されているか、終了されようとしているかが確定できない状態であるため、改めて前処理により移動領域に基づいて垂直距離ｈＬを取得する。
【００６４】
ステップＳ２０９では、状態判定部３０６が、既に情報処理装置１００が非タッチ状態であったかを判定する。つまり、前回ステップＳ２０８の判定がなされたときの判定結果が非タッチ状態であったかを判定する。本実形態では、ＲＡＭ２０１に保持されているタッチ判定フラグが「０」である場合に、既に非タッチ状態であったと判定する。既に非タッチ状態であったと判定された場合（ステップＳ２０９でＹＥＳ）には、タッチ入力は行われていないとみなし、処理を終了しメイン処理にリターンする。それに対し、それまでは非タッチ状態ではなかった、すなわちタッチ状態であったと判定された場合（ステップＳ２０９でＮＯ）には、ステップＳ２１０に進む。
【００６５】
ステップＳ２１０では、状態判定部３０６が、ＲＡＭ２０１に保持されているタッチ判定フラグを「０」に更新する。
【００６６】
ステップＳ２１１では、認識部３０８が、「リリース」イベントを通知する。「リリース」イベントに含まれる位置情報は、近接終了位置及びタッチ終了位置の少なくともいずれかを示す位置情報である。近接終了位置とは、操作面１０１がタッチ状態から非タッチ状態に移行した時点で検出されていた指示位置ｘｙ座標である。なお、本実施形態の近接終了位置は、情報処理装置１００がタッチを検出しなくなった位置であり、図３で説明した従来法ではリリース位置に当たる。タッチ終了位置は、ユーザが操作面１０１を触るのを意図してやめたときの指示位置を示す座標情報である。本実施形態においてタッチ終了位置は、タッチ状態の間に検出される指示位置が最後に静止したとみなされる位置である。タッチ終了位置を特定する方法は、ステップＳ２１４の説明において後述する。
【００６７】
ステップＳ２１２では、認識部３０８が、その時点までに「タップ」イベントがＲＡＭ２０１上に保持されているかを判定する。上述したように、タップ操作が行われたか否かは、タッチがリリースされてからでなければ確定できない。従って本実施形態では、「タッチ」イベントを通知した後、タッチ状態に間に指示位置の移動が検出されない間は、認識部３０８が「タップ」イベントを生成し、ＲＡＭ２０１に保持して待機する。ステップＳ２１１において「リリース」イベントが通知された時点で、「タップ」イベントがＲＡＭ２０１上に保持されていれば、タップ操作が行われたことが確定可能となる。そして、「タップ」イベントがＲＡＭ２０１上に保持されていない場合は、タッチ状態の間に指示位置が移動した、すなわちムーブ操作が行われたことが確定する。「タップ」イベントがＲＡＭ２０１上に保持されていると判定された場合には（ステップＳ２１２でＹＥＳ）、ステップＳ２１３に進む。「タップ」イベントがＲＡＭ２０１上に保持されていないと判定された場合には（ステップＳ２１２でＮＯ）、処理を終了しメイン処理にリターンする。この処理フローとなる場合は、ステップＳ２１１で「リリース」イベントが通知される前に、既に「ムーブスタート」もしくは「ムーブ」イベントが通知されている。。従って、「リリース」イベントが通知されたことをもって、ムーブ操作が終了したことが確定する。そして、「リリース」イベントに含まれたタッチ終了位置の情報が、ムーブ操作の終了位置として、ムーブ操作への応答を返す各機能部に伝えられる。
【００６８】
ステップＳ２１３では、認識部３０８が、「タップ」イベントを通知し、メイン処理にリターンする。「タップ」イベントに含まれる位置情報は、タップ操作によって示される１点の座標を示す。本実施形態では、後述するステップＳ２１４で、推定部３０７によって推定され、ＲＡＭ２０１に保持されているタッチ開始位置の座標情報がタップ位置となる。
【００６９】
以上説明したように、前処理の後のステップＳ２０８〜Ｓ２１３の処理は、ユーザの手指１０３による操作面１０１へのタッチが終了したことを示す「リリース」イベントを通知する処理の流れである。「タッチ」イベントが通知されてから、「リリース」イベントが通知されるまでに指示位置が移動していなければ、「リリース」イベントに続いて「タップ」イベントが通知され、ユーザが行った操作がタップ操作であったことが確定される。
【００７０】
次に、ステップＳ２０５において、状態判定部３０６が、既に操作面１０１がタッチ状態であったと判定し、ステップＳ２１４に進んだ場合を説明する。
【００７１】
ステップＳ２１４では、推定部３０７が、タッチ状態が開始されてから継続している間に、指示位置が静止したとみなされる位置を検出し、タッチ位置であると推定する。本実施形態では、上述したように、連続する２フレーム分の赤外強度画像から検出された指示位置の、ｘｙ座標の差分が所定の闘値よりも小さい場合に、指示位置が静止したとみなす。そして、最新のフレームの赤外強度画像から検出された指示位置の座標情報をＲＡＭ２０１に保持する。本実施形態において、推定部３０７は、タッチが開始されてから指示位置が初めて静止したとみなされる位置を、ユーザが意識してタッチを開始した位置を示すタッチ開始位置であると推定する。これは、ユーザの手指が操作面１０１に接触した瞬間に生じる摩擦などによって、その動きが一時的に静止することを利用した推定方法である。これにより、認識対象が高さの閾値を越えたときの位置と、ユーザが意図してタッチした位置が異なる場合であっても、ユーザが実際に触った位置を、タッチの開始位置として推定することができる。また、推定部３０７は、タッチ状態が継続されている間に、複数回指示位置が静止したとみなされる位置が検出される場合には、その度にその位置をＲＡＭ２０１に保持する。そして、ステップＳ２１１において、「リリース」イベントが通知される時に、ＲＡＭ２０１に保持されている指示位置が静止したとみなされる位置の中で、最後に検出された位置を、タッチ終了位置と推定する。タップ操作が行われた場合には、タッチ開始位置とタッチ終了位置は一致することもある。ＲＡＭ２０１にはｘｙ座標とともに、タッチ開始位置の座標であることを示す情報を保持する。ＲＡＭ２０１には、ｘｙ座標とともに、タッチ終了位置の座標であることを示す情報が保持される。なお、ステップＳ２１４において指示位置が静止したとみなされる位置が検出不可能な場合、すなわちユーザの手指が静止せずに動き続けている間は、タッチ位置の情報を保持せずにステップＳ２１５に進む。
【００７２】
ステップＳ２１５では、認識部３０８が、タッチ開始位置から、最新のフレームから検出された指示位置までの、指示位置の移動距離を取得し、ＲＡＭ２０１に保持する。認識部３０８は、ＲＡＭ２０１に保持されているタッチ開始位置のｘｙ座標と、ステップＳ２０１で推定した最新の指示位置を示すｘｙ座標を用い、２点の間の最短距離を求める。ただし、タッチ開始位置がＲＡＭ２０１に保持されていない場合には、例外処理として、ステップＳ２０８で通知された「タッチ」イベントに含まれた近接開始位置のｘｙ座標と、最新の指示位置のｘｙ座標を利用して、２点間の距離を求める。この例外処理は、ユーザが手指１０３を静止させることなく操作を行った場合に処理不能となることを防ぐために行う。従って、タッチ開始位置がＲＡＭ２０１に保持された後は、例外処理によって取得されていた近接開始位置に基づく移動距離の情報は削除される。
【００７３】
ステップＳ２１６では、認識部３０８が、ステップＳ２１５で取得したタッチ開始位置からの移動距離が、所定の闘値３以上であるかを判定する。闘値３は、ユーザの手指１０３が、操作面１０１へのタッチを継続したままｘｙ方向に十分移動したかを判定するため闘値である。すなわちステップＳ２１６の判定は、タップ操作とムーブ操作を区別するための処理である。なお、閾値３の値は、一般的なタッチ操作における、近接開始位置とタッチ開始位置の間の距離より十分大きく設定される。これは、上述した例外処理によって取得された移動距離が、指示位置が静止するよりも前に闘値３の大きさを超えてしまうことを防ぐためである。もしくは、例外処理によって取得された移動距離と比較する閾値は異なる閾値とすることによって、指示位置が静止するよりも前に闘値の大きさを超えないようにすることもできる。タッチ開始位置からの移動距離が、所定の闘値３以上であると判定された場合（ステップＳ２１６でＹＥＳ）には、ステップＳ２１８に進む。一方、タッチ開始位置からの移動距離が、所定の闘値３より小さいと判定された場合（ステップＳ２１６でＮＯ）には、ステップＳ２１７に進む。ＲＡＭ２０１に保持された移動距離の情報は、ステップＳ２１６の判定結果が確定した時点で毎回削除される。
【００７４】
ステップＳ２１７では、認識部３０８が、「タップ」イベントを生成しＲＡＭ２０１に保持する。ここで生成される「タップ」イベントは、タップ操作が行われたことを各機能部に通知するための情報と、タッチ開始位置の座標情報が含まれる。
【００７５】
一方、ステップＳ２１８では、認識部３０８が、ＲＡＭ２０１上に既にステップＳ２１７で生成された「タップ」イベントが保持されているかを判定する。このとき、タッチ状態での指示位置の移動距離は闘値３以上であるため、ユーザが行った操作はタップ操作ではないことが確定している。従って、後に続く処理では、ムーブ操作が開始あるいは継続していることを示す情報を通知する必要がある。「タップ」イベントが保持されていると判定された場合（ステップＳ２１８でＹＥＳ）には、ステップＳ２１９に進む。「タップ」イベントが保持されていないと判定された場合（ステップＳ２１８でＮＯ）には、ステップＳ２２０に進む。
【００７６】
ステップＳ２１９では、認識部３０８が、保持されている「タップ」イベントを「ムーブスタート」イベントに変更して、通知する。「ムーブスタート」イベントに含まれる位置情報は、タッチ開始位置の座標情報である。
【００７７】
また、ステップＳ２２０では、認識部３０８が、「ムーブ」イベントを通知し、メイン処理にリターンする。「ムーブ」イベントに含まれる位置情報もまた、最新の指示位置を示すｘｙ座標の情報である。
【００７８】
以上説明したように、前処理の後のステップＳ２１４〜Ｓ２２０の処理は、タッチ状態が維持されたまま、ユーザの手指１０３が移動したことを示す「ムーブスタート」イベント及び「ムーブ」イベントを通知する処理の流れである。「ムーブ」イベントと「ムーブスタート」イベントがいずれかが通知されていれば、後に「リリース」イベントが通知された時点でムーブ操作の終了が確定する。この場合、「リリース」イベントに含まれる位置情報は、最後に指示位置が静止したとみなされたタッチ終了位置のｘｙ座標の情報となる。ただし、指示位置が静止したとみなせる位置が検出されなかった場合には、例外処理として、近接終了位置のｘｙ座標の情報を通知する。これは、ステップＳ２１５における例外処理と同様、ユーザが手指１０３を静止させることなく操作を行った場合に処理不能となることを防ぐための処理である。「ムーブスタート」イベントあるいは「ムーブ」イベントの通知を受けた表示制御部３０９は、ステップＳ１０５において、例えばタッチ開始位置に表示されたオブジェクトを、最新の指示位置まで移動させる処理を実行する。
【００７９】
本実施形態では、ステップＳ２１７で生成された「タップ」イベントは、ステップＳ２１９において「ムーブスタート」イベントに変更されない限り、ＲＡＭ２０１に保持され続ける。そして、ステップＳ２１２においてＲＡＭ２０１に「タップ」イベントが保持されているか否かを判定することによって、タッチ状態の間には区別が困難なタップ操作とムーブ操作を、「リリース」イベントの通知後に確実に区別することが可能となる。
【００８０】
次に、本実施形態にかかる情報処理装置１００に対して、タップ操作とムーブ操作が行われたときの具体的な処理の流れを、図６及び図７を参照して説明する。
【００８１】
まず、図６は、ユーザによってタップ操作が行われた場合に本実施形態の情報処理装置１００が行う処理の流れと、推定されるタップ位置を説明する図である。図６（Ａ）は、操作面１０１（ｘｙ平面）を上方から見た状態を示す。ここでユーザの手指１０３はタップ操作によりｐｏｓ０（ｘ０，ｙ０）を指示しようとしている。図６（Ｂ）は、このタップ操作の様子を、横（ｙ軸マイナス側）から見たところを示す。図６（Ａ）（Ｂ）は、図３（Ｂ１）（Ｂ２）に示されたのと同様、タップ操作を行う際にユーザがｘｙ方向に指を移動させている場合を示している。図６（Ｃ）は、一連のタップ操作中に取得されるユーザの指先と操作面との垂直距離ｈＬ（Ｈｅｉｇｈｔ）と、フレーム毎の前のフレームとのｘｙ座標の差分が示すフレーム間移動距離ｍＬ（ｍｏｖｅＬｅｎ）とを、横軸をフレーム数として示したグラフとなる。Ｈｅｉｇｈｔは、ステップＳ２０１〜Ｓ２０３の処理において、ｍｏｖｅＬｅｎはステップＳ２１４の処理においてそれぞれ取得される値である。
【００８２】
また、図６（Ｂ）（Ｃ）では、ステップＳ２０４の判定に用いる閾値１を点線７００、ステップＳ２０８の判定に用いる闘値２を点線７０１で表す。一例として、閾値１は２０ｍｍ、閾値２は５０ｍｍに設定されるものとする。本実施形態では、このように闘値１と闘値２を異なる値とすることで、位置検出部３０２によって検出される指示位置にぶれがあったとしてもそれを吸収することができる。つまり、ユーザの指先が十分に操作面１０１に近づいた段階で、タッチ状態への移行を判定でき、ユーザの指先が十分に操作面１０１から離れた段階で、非タッチ状態への移行を判定できる。また図６（Ｂ）は、ユーザがｐｏｓ０をタップ操作する際に、指先が図６（Ｂ）のｒ０⇒ｒ１の経路を通過することを示す。
【００８３】
まず、ユーザの指先が、点線７００で示される闘値１を通過する。このとき取得される垂直距離ｈＬは、図６（Ｃ）の点７０２に対応する。垂直距離ｈＬが闘値１より小さく（ステップＳ２０４でＹＥＳ）、これまでは非タッチ状態であったことから（ステップＳ２０５でＮＯ）、  タッチ判定フラグが「１」に更新され（ステップＳ２０６）、「タッチ」イベントが通知される（ステップＳ２０８）。
【００８４】
さらにユーザは操作面１０１に触れ、Ｐｏｓ０に対してタップを行う。ユーザの指先が操作面１０１に触れたことにより、極短時間の間指先は静止する。このとき、垂直距離ｈＬは０であり、図６（Ｃ）の点７０３に対応する。既にタッチ状態にある（ステップＳ２０５でＹＥＳ）ため、フレーム間移動距離ｍＬが取得される（ステップＳ２１４）。指先は静止しており、図６（Ｃ）に示されるように、点７０３と同時に検出されるフレーム間移動距離ｍＬは０である。従ってＰｏｓ０（ｘ０，ｙ０）が、タッチ開始位置と推定され（ステップＳ２１５）、指示位置は移動していない（ステップＳ２１６でＮＯ）ため、「タップ」イベントが生成され、保持される（ステップＳ２１７）。「タップ」イベントにはタップ位置として、タッチ状態においてユーザの指先が初めに静止したとみなされた位置Ｐｏｓ０（ｘ０，ｙ０）であるタップ位置の座標が含まれる。
【００８５】
そして、ユーザは操作面１０１から指先を離し、点線７０１で示される闘値２を通過する。このとき取得される垂直距離ｈＬは、図６（Ｃ）の点７０４に対応する。垂直距離ｈＬが閾値２より大きく（ステップＳ２０８でＹＥＳ）、これまではタッチ状態であったことから（ステップＳ２０９でＮＯ）、タッチ判定フラグが「０」に更新され（ステップＳ２１０）、「リリース」イベントが通知される（ステップＳ２１１）。ステップＳ２１７で生成された「タップ」イベントがＲＡＭ２０１上に保持されているため（ステップＳ２１２でＹＥＳ）、タップ位置情報を含む「タップ」イベントが通知される（ステップＳ２１３）。これに応じ、表示制御部３０９は、投影される画像の表示を更新する。このように、本実施形態では、ユーザがタップ操作の前後において操作面に平行な方向（ｘｙ平面上）で指先を動かした場合でも、タップ位置としてユーザが実際に触れた操作面１０１上の位置を特定できる。なお、本実施形態では、タップ位置を、タッチ状態においてユーザの指先が初めに静止したとみなされる位置（タッチ開始位置）によって定義した。しかし、ユーザの指先が最後に静止した位置タッチ終了位置をタップ位置としてもよい。タップ操作の場合、タッチ開始位置とタッチ終了位置はほぼ一致するため、タッチ終了位置をタップ位置としても同様の効果を得ることができる。
【００８６】
次に、図７は、ユーザによってムーブ操作が行われた場合に本実施形態の情報処理装置１００が行う処理の流れと、推定されるムーブ操作の開始位置、終了位置を説明する図である。図６と同名称、及び同番号で示されるものの定義は図６に準ずる。図７（Ｂ）は、ユーザがｐｏｓ１からｐｏｓ２までのムーブ操作する際に、指先がｒ２⇒ｒ３⇒ｒ４の経路を通過することを示す。ムーブ操作の場合も、まずユーザの指先が、点線７００で示される闘値１を通過する。このとき取得される垂直距離ｈＬは、図７（Ｃ）の点７０６に対応する。図６のタップ操作の場合と同様の処理により、この段階で「タッチ」イベントが通知される（ステップＳ２０８）。
【００８７】
さらにユーザは操作面１０１に触れ、ｐｏｓ１（ｘ１，ｙ１）をタッチする。ユーザの指先が操作面１０１に触れたことにより、極短時間の間、指先は静止する。このとき、垂直距離ｈＬは０であり、図７（Ｃ）の点７０７に対応する。図６のタップ操作の場合と同様に、ｐｏｓ１（ｘ１，ｙ１）が、タッチ開始位置と推定され（ステップＳ２１５）、指示位置はまだ移動していない（ステップＳ２１６でＮＯ）ため、「タップ」イベントが生成され、保持される（ステップＳ２１７）。
【００８８】
この後、ユーザが操作面１０１に触れたまま指先をｐｏｓ２まで移動させる。移動中も、フレーム毎に指示位置が検出され、タッチ開始位置から最新の指示位置までの距離が閾値３を越えるまでの間は、「タップ」イベントを生成して待機するまでの処理が繰り返される。タッチ開始位置からの移動距離が闘値３よりも大きくなると（ステップＳ２１６でＹＥＳ）、保持されていた「タップ」イベントが「ムーブスタート」イベントに変更され、通知される（ステップＳ２１９）。以降、指先がリリースされるまでは指示位置が検出される度に「ムーブ」イベントが通知される（ステップＳ２２０）。表示制御部３０９は、最新の指示位置をムーブ位置として、表示オブジェクトを移動させるなどの表示制御を行う。なお、本実施形態では、赤外力メラ２０８から取得されるフレーム毎にイベントを通知しているため、最大の分解能でムーブ操作に応答することができる。ただし、表示制御にかかる処理負荷の条件などによっては、操作に対する追従性が低くなる場合がある。そこで、適切な間隔にフレームを間引いて、所定時間毎に処理を行うようにすれば、情報処理装置１００にかかる処理負荷を低減しつつ、ユーザのムーブ操作に対する追従性を良くすることができる。例えば、図７（Ｃ）では、５フレーム毎にムーブイベントの通知を行う場合のタイミングを示している。イベントを通知する処理の間隔は、情報処理装置１００が扱うグラフィカルユーザインタフェースの内容や、処理能力に応じて設定されればよい。
【００８９】
本実施形態では、ユーザの指先が最後に静止した位置を、タッチ入力の終了位置として推定する。これは、ユーザの指先がムーブ操作の終了する位置を決める際に、極短時間、指先を止める傾向を利用する方法である。従って、指先がｐｏｓ２でムーブ操作を終えたときに検出される指示位置のｘｙ座標ｐｏｓ２（ｘ２，ｙ２）は、垂直距離ｈＬ、フレーム間の移動距離ｍＬがいずれもほぼ０となる図７（Ｃ）の点７０８に対応する。本実施形態では、最後にユーザの指先が静止したｐｏｓ２（ｘ２，ｙ２）が、ムーブ操作の終了位置として、「リリース」イベントとともに通知されることとなる。
【００９０】
最後に、ユーザが操作面１０１から指先を離すことで、指先が点線７０１で示される閾値２を通過する。このとき取得される垂直距離ｈＬは、図７（Ｃ）の点７０６に対応する。垂直距離ｈＬが閾値２より大きく（ステップＳ２０８でＹＥＳ）、これまではタッチ状態であったことから（ステップＳ２０９でＮＯ）、タッチ判定フラグが「０」に更新され（ステップＳ２１の、「リリース」イベントが通知される（ステップＳ２１１）。「タップ」イベントは既に保持されていないため（ステップＳ２１２でＮＯ）、ムーブ操作の終了が確定する。表示制御部３０９は、ムーブ操作に対する応答を終了する。
【００９１】
以上説明したように、本実施形態では、ユーザの指先が、タッチの開始時および終了時に動きを静止する性質を利用して、タッチ入力の開始位置と終了位置を推定する。従ってタッチの対象が、任意の平面であって、当該平面とユーザの指先の間の距離に闘値を設けてタッチ判定を行う場合でも、タッチ位置（タッチ入力の開始位置と終了位置）の検出精度を向上させることができる。なお、タッチの開始時および終了時にユーザが指先を静止させる傾向は、ユーザが無意識のうちに生じているため、必ずしも起こりえるものではなく、静止する時間も検出の分解能に適した時間であるとは限らない。従って本実施形態では、ユーザの指先が静止したとみなされる位置が検出できなかった場合は、近接開始位置（点７０５に相当）から近接終了位置（点７０８に相当）までがムーブ操作がなされた区間として補完される。従って、ユーザの指先が静止した位置を検出できなかったとしても、ムーブ操作が検出不能となることはない。従って、ユーザが無意識に指を静止させなったからと言って、突然ムーブ操作ができなくなるといった不便を生じさせることはない。
【００９２】
また、装置１００が非タッチ状態からタッチ状態に移行してから、最初に指先が静止するまでの間、及び、最後に指先が静止してから、タッチ状態から非タッチ状態に移行するまでの間は、「操作面１０１に対して近接している状態の指先」が検出されている。一般的に、操作面１０１に対して近接した認識対象によって行われる操作はホバー操作（フローティング操作）と言われる。本実施形態では、「操作面１０１に対して近接している状態の指先」の動きを利用することで、ホバー操作を認識し、情報処理装置１００の操作性をさらに向上させることが可能である。具体的には、「タッチ」イベントが通知されたことに応じて、ホバー操作が開始されたと判断することができる。従って、例えば「タッチ」イベントに含まれる近接開始位置の位置情報を基に、特定の表示オブジェクトの大きさを変更したり、フォーカスを合わせたりして、その後に行われるタッチ操作を誘導することなどが可能となる。
【００９３】
なお、上述した本実施形態では、指示位置が最初に静止したとみなされる位置の情報は、「タップ」イベントを通知するか「ムーブスタート」イベントを通知するかを確定してから通知した。しかし、イベントの確定を待たずにタップ位置の情報を先に通知しておいても構わない。例えば、ホバー操作とタッチ操作が連動した操作を認識する場合には、指示位置が最初に静止したとみなされる位置が特定された時点で位置情報を関連する各機能部に通知することで、より追従性の良い操作環境を提供することが可能となる。
【００９４】
また、本実施形態では、赤外光発光部２０７と赤外カメラ２０８を利用して、ユーザの手指の三次元位置を取得したが、ステレオカメラや距離画像センサを利用することもできる。認識対象と操作面との近接状態に基づいてタッチ判定を行う方法は、三次元位置に基づく距離の判定に限らず、例えば感熱センサや静電容量センサ等を利用し、操作面に対してユーザの手指がどの程度近接したかを検出した結果に基づく判定に置き換えてもよい。また、本実施形態では、プロジェクタによる投影対象面をタッチ操作の操作面とする例について説明したが、ヘッドマウントディスプレイを利用し、ＡＲやＭＲ空間上の仮想面（仮想的に表示された物体の表面など）を操作面とする場合にも適応可能である。
【００９５】
＜第１の実施形態の変形例＞
上述した第１の実施形態では、「タッチ」、「リリース」、「タップ」、「ムーブスタート」、「ムーブ」という５種類のタッチイベントを利用することで、イベント情報を受けた機能部に対して実行すべき動作を一意に特定させていた。それに対し、扱うイベント数を減らすことで、処理を単純化する変形例を説明する。以下、変形例について図面を参照して詳細に説明する。なお、第１の実施形態において説明したのと共通する内容については同番号を付し、適宜説明を省略する。
【００９６】
変形例にかかる情報処理装置１００のハードウェア構成、及び機能構成は第１の実施形態に準じる。ただし、変形例では、認識部３０８が通知するタッチイベントは、「タッチ」、「リリース」、「ムーブ」の３種類となる。変形例では「タッチ」イベントに含まれる位置情報は、タップイベントを示す座標情報となる。つまり、表示制御部３０９などアプリケーションによる応答に関わる機能部は、「タッチ」イベントと「リリース」イベントが連続して通知された場合にタップ操作が入力されたと解釈して応答する。また、「タッチ」イベントの直後に「ムーブ」イベントが通知された場合には、「リリース」イベントが通知されるまでムーブ操作が入力され続けると解釈して応答する。
【００９７】
変形例において情報処理装置１００が実行する、タッチ操作の認識処理は、第１の実施形態と同様、図４のフローチャートに従って実行される。ただし、変形例では、ステップＳ１０４のタッチ判定処理は、図８のフローチャートに従う。
【００９８】
図８のフローチャートは、図５のフローチャートと、前処理の段階では共通している。一方で、ステップＳ２１２、ステップＳ２１３、ステップＳ２１７、ステップＳ２１８、ステップＳ２１９の処理が省略され、かつステップＳ９００及びステップＳ９０１の処理が追加されている点が異なる。以下、図５と異なる点を中心に詳細を説明する。
【００９９】
変形例においても、前処理が完了すると、ステップＳ２０４において、状態判定部３０６が、垂直距離ｈＬが闘値１以下であるかを判定する。垂直距離ｈＬが閾値１以下であると判定された場合（ステップＳ２０４でＹＥＳ）はステップＳ２０５に進み、既に操作面１０１がタッチ状態であったかが判定される。そして、それまではタッチ状態ではなかった、すなわち非タッチ状態であったと判定された場合（ステップＳ２０５でＮＯ）には、ステップＳ２０６で状態判定部３０６によりタッチ判定フラグが「１」に更新され、ステップＳ９００に進む。
【０１００】
ステップＳ９００では、認識部３０８が、最新のフレームから検出された指示位置の情報をＲＡＭ２０１に保持し、メイン処理にリターンする。第１の実施形態とは異なり、この段階では「タッチ」イベントは通知されない。
【０１０１】
一方、垂直距離ｈＬが閾値１より大きいと判定された場合（ステップＳ２０４でＮＯ）はステップＳ２０８に進み、状態判定部３０６が、垂直距離ｈＬが閾値２以上であるかを判定する。垂直距離ｈＬが闘値２以上であると判定された場合（ステップＳ２０８でＹＥＳ）は、ステップＳ２０９に進み、既に情報処理装置１００が非タッチ状態であったかが判定される。そして、それまでは非タッチ状態ではなかった、すなわちタッチ状態であったと判定された場合（ステップＳ２０９でＮＯ）には、ステップＳ２１０でタッチ判定フラグが「０」に更新され、ステップＳ２１１で認識部３０８が「リリース」イベントを通知する。変形例において、「リリース」イベントに含まれる位置情報は、タッチ終了位置を示す位置情報である。「リリース」イベントの通知を受けた表示制御部３０９は、直前に受けたイベントが「タッチ」イベントであれば、タップ操作が入力されたことを解釈し、「タッチ」イベントに含まれたタップ位置情報に基づく表示制御を行う。それに対し、直前に受けたイベントが「ムーブ」イベントであれば、「リリース」イベントに含まれるタッチ終了位置をムーブ操作の終了位置として、位置情報に基づく表示制御を行う。
【０１０２】
一方、ステップＳ２０５において、情報処理装置１００が既にタッチ状態であったと判定された場合（ステップＳ２０５でＹＥＳ）には、ステップＳ２１４で、推定部３０７が、タッチ状態の間に指示位置が静止したとみなされる位置を推定する。ステップＳ２１５では、認識部３０８が、タッチ開始位置から最新のフレームから検出された指示位置までの、指示位置の移動距離が取得し、ステップＳ２１６において、移動距離が、所定の閾値３以上であるかを判定する。変形例では、タッチ開始位置からの移動距離が、所定の閾値３より小さいと判定された場合（ステップＳ２１６でＮＯ）には、ステップＳ９０１に進む。
【０１０３】
ステップＳ９０１では、認識部３０８が、「タッチ」イベントを通知する。このように、変形例では、「タッチ」イベントを通知するタイミングが第１の実施形態と異なっている。このとき「タッチ」イベントに含まれる位置情報は、タッチ状態の間に指示位置が最初に静止したとみなされる位置である、タッチ開始位置のｘｙ座標情報である。ステップＳ９０１では、このタッチ開始位置の情報が、タップ位置を示す情報としてとして通知される。このようにして、変形例では、「タッチ」イベントにタップ位置の情報を含ませることで、「タップ」イベントを省略している。
【０１０４】
一方、タッチ開始位置からの移動距離が、所定の閾値３以上であると判定された場合（ステップＳ２１６でＹＥＳ）には、ステップＳ２２０で認識部３０８により「ムーブ」イベントが通知される。「ムーブ」イベントに含まれる位置情報は、最新の指示位置を示すｘｙ座標の情報である。変形例では、「タッチ」イベントに含まれるタップ位置（タッチ開始位置）の情報が、すなわちムーブ操作の開始位置を示す。従って「タッチ」イベントの直後に「ムーブ」イベントが通知された場合には、通知を受けた表示制御部３０９が、「タッチ」イベントに含まれるタップ位置の情報を、ムーブ開始位置として解釈するので、「ムーブスタート」イベントが省略可能となる。
【０１０５】
以上説明したように、変形例では、「タッチ」、「リリース」、「ムーブ」の３種類のイベントが通知される順番に応じてタップ操作とムーブ操作を区別するため、イベント処理を単純化している。さらに、第１の実施形態と同様、ユーザの指先が、タッチの開始時および終了時に動きを静止する性質を利用して、タッチ入力の開始位置と終了位置を推定する。従ってタッチの対象が、任意の平面であり、当該平面とユーザの指先の間の距離に闘値を設けてタッチ判定を行う場合でも、タッチ操作の開始位置と終了位置の検出精度を向上させることができる。
【０１０６】
＜その他の実施形態＞
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【符号の説明】
【０１０７】
３００  画像取得部
３０１  領域検出部
３０２  位置検出部
３０３  距離取得部
３０６  状態判定部
３０７  推定部
３０８  認識部
３０９  表示制御部
【図１】
2015043154.tif 000003
【図２】
2015043154.tif 000004
【図３】
2015043154.tif 000005
【図４】
2015043154.tif 000006
【図５】
2015043154.tif 000007
【図６】
2015043154.tif 000008
【図７】
2015043154.tif 000009
【図８】
2015043154.tif 000010