(57)【要約】【課題】  本発明は、ユーザの指先と操作面の距離が所定の閾値よりも近づいてから所定時間が経過したときに、ユーザの指先がある位置を情報処理装置に対する入力の開始位置に決定することを目的とする。【解決手段】  本発明は、撮像部により撮像された画像から所定の形状の物体を抽出する抽出手段と、操作面と前記抽出手段により抽出された物体との距離を取得する取得手段と、前記取得手段により取得された距離が第１の閾値より大きい状態から小さい状態に移行したかを判定する判定手段と、前記判定手段により、前記取得された距離が前記第１の閾値より大きい状態から小さい状態に移行したと判定されてから第１の時間後に前記撮像部により撮像された画像を取得し、該取得した前記画像から抽出された前記所定の形状の物体の位置を入力の開始位置に決定する決定手段と、を有することを特徴とする。【選択図】  図８
2018173907.tif 000002
【特許請求の範囲】
【請求項１】
撮像部により撮像された画像から所定の形状の物体を抽出する抽出手段と、
操作面と前記抽出手段により抽出された物体との距離を取得する取得手段と、
前記取得手段により取得された距離が第１の閾値より大きい状態から小さい状態に移行したかを判定する判定手段と、
前記判定手段により、前記取得された距離が前記第１の閾値より大きい状態から小さい状態に移行したと判定されてから第１の時間後に前記撮像部により撮像された画像を取得し、該取得した前記画像から抽出された前記所定の形状の物体の位置を入力の開始位置に決定する決定手段と、を有することを特徴とする情報処理装置。
【請求項２】
前記決定手段は、前記取得された距離が前記第１の閾値よりも大きい状態から小さい状態に移行したと前記判定手段により判定されたのち、最初に前記所定の形状の物体が静止した位置を前記入力の開始位置に決定することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記撮像部は所定時間毎に前記操作面を含む領域を撮像することを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記判定手段は、前記取得された距離が第２の閾値よりも小さい状態から大きい状態に移行したと判定し、
前記決定手段は、前記取得された距離が前記第２の閾値よりも小さい状態から大きい状態に移行したと前記判定手段により判定されたときより、第２の時間前に前記撮像部により撮像された画像を取得して、該取得した前記画像から抽出された前記所定の形状の物体の位置を前記入力の終了位置に決定することを特徴とする請求項１乃至３のいずれか一項に記載の情報処理装置。
【請求項５】
前記決定手段は、前記取得された距離が前記第１の閾値よりも大きい状態から小さい状態に移行したと前記判定手段により判定されてから、前記第２の閾値よりも小さい状態から大きい状態に移行したと前記判定手段により判定されるまでの間であって、最後に前記所定の形状の物体が静止している位置を、前記入力の終了位置に決定することを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記情報処理装置は、前記操作面に画面を投影する投影手段をさらに有し、
前記投影手段は、前記決定手段により決定される前記入力の開始位置および終了位置にから特定される操作に基づいて、前記操作面に投影される前記画面を更新することを特徴とする請求項４または５に記載の情報処理装置。
【請求項７】
前記決定手段により決定される前記入力の開始位置と終了位置が所定の距離よりも小さい操作をタップ操作とする請求項６に記載の情報処理装置。
【請求項８】
前記決定手段により決定される前記入力の開始位置と終了位置が前記所定の距離よりも大きい操作をムーブ操作とする請求項７に記載の情報処理装置。
【請求項９】
前記第２の閾値は前記第１の閾値よりも大きい値であることを特徴とする請求項４乃至８のいずれか一項に記載の情報処理装置。
【請求項１０】
前記第２の時間は前記第１の時間よりも長い時間であることを特徴とする請求項４乃至９のいずれか一項に記載の情報処理装置。
【請求項１１】
前記抽出手段により抽出される前記所定の形状の物体は、ユーザの指先またはスタイラスのペン先であることを特徴とする請求項１乃至１０のいずれか一項に記載の情報処理装置。
【請求項１２】
前記決定手段が、前記取得される距離が前記第１の閾値より大きい状態から小さい状態に移行したと前記判定手段により判定されてから所定の時間が経過した後に前記撮像部により撮像された画像を取得し、取得された前記画像から抽出される前記所定の形状の物体の位置を前記入力の開始位置に決定するか、前記取得される距離が前記第１の閾値よりも大きい状態から小さい状態に移行したと前記判定手段により判定されてから、最初に前記所定の形状の物体が静止した位置を前記入力の開始位置に決定するかが、アプリケーションごとに設定されていることを特徴とする請求項４乃至１０のいずれか一項に記載の情報処理装置。
【請求項１３】
前記決定手段が、前記取得される距離が前記第２の閾値より小さい状態から大きい状態に移行したと前記判定手段により判定されたときより所定の時間前に前記撮像部により撮像された画像を取得し、取得された前記画像から抽出される前記所定の形状の物体の位置を前記入力の終了位置にするか、
前記取得される距離が前記第１の閾値よりも大きい状態から小さい状態に移行したと前記判定手段により判定されてから、前記取得される距離が前記第２の閾値よりも小さい状態から大きい状態に移行したと前記判定手段により判定されるまでの間であって、最後に前記所定の形状の物体が静止した位置を前記入力の終了位置に決定するかが、アプリケーションごとに設定されていることを特徴とする、請求項５乃至１０のいずれか一項に記載の情報処理装置。
【請求項１４】
前記判定手段は、所定時間に前記所定の形状の物体が移動した距離が、所定の閾値よりも小さい場合に前記所定の形状の物体が静止していると判定することを特徴とする請求項２乃至１３のいずれか一項に記載の情報処理装置。
【請求項１５】
撮像部により撮像された画像から所定の形状の物体を抽出する抽出手段と、
操作面と前記抽出手段により抽出される前記所定の形状の物体の距離を取得する取得手段と、
前記取得手段により取得される距離が第２の閾値よりも小さい状態から大きい状態に移行したことを判定する判定手段と、
前記取得された距離が前記第２の閾値よりも小さい状態から大きい状態に移行したと前記判定手段により判定されたときより、第２の時間前に前記撮像部により撮像された画像を取得し、取得された前記画像から抽出された前記所定の形状の物体の位置を入力の終了位置に決定する決定手段と、を有することを特徴とする情報処理装置。
【請求項１６】
情報処理装置の制御方法であって、
撮像部により撮像された画像から所定の形状の物体を抽出する抽出ステップと、
操作面と前記抽出ステップにおいて抽出された前記所定の形状の物体との距離を取得する取得ステップと、
前記取得ステップにおいて取得された距離が第１の閾値よりも大きい状態から小さい状態に移行したかを判定する判定ステップと、
前記判定ステップにおいて、前記取得された距離が第１の閾値より大きい状態から小さい状態に移行したことが判定されてから第１の時間が経過した後に前記撮像部により撮像された画像を取得し、該取得した前記画像から抽出される前記所定の形状の物体の位置を入力の開始位置に決定する決定ステップと、を有することを特徴とする情報処理装置の制御方法。
【請求項１７】
撮像部により撮像された画像から所定の形状の物体を抽出する抽出ステップと、
操作面と前記抽出ステップにおいて抽出された前記所定の形状の物体の距離を取得する取得ステップと、
前記取得ステップにおいて取得された距離が第２の閾値よりも大きい状態から小さい状態に移行したことを判定する判定ステップと、
前記判定ステップにおいて、前記取得された距離が前記第２の閾値よりも大きい状態から小さい状態に移行したことが判定されたときより、第２の時間前に前記撮像部により撮像された画像を取得し、該取得した前記画像から抽出された前記所定の形状の物体の位置を入力の終了位置に決定する決定ステップと、を有することを特徴とする情報処理装置の制御方法。
【請求項１８】
請求項１６および請求項１７に記載の処理をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、および情報処理装置の制御方法、プログラムに関する。
【背景技術】
【０００２】
近年、プロジェクタとカメラ、距離センサを備えたカメラスキャナ等の情報処理装置が開示されている。例えば、プロジェクタがユーザインターフェイス（以下、ＵＩ）を壁や机などの任意の操作面に投影する。ユーザが指先やスタイラスの先等でＵＩの投影された操作面に触れて、情報処理装置を操作する。
【０００３】
上記のような情報処理装置では、カメラから操作面までの距離、および、カメラからユーザの指先までの距離を、距離センサがリアルタイムで計測する。そして、情報処理装置は、操作面とユーザの指先の距離が所定の閾値以下になったときに、ユーザの指先が操作面に触れたとして、ユーザの指先が操作面のどこに触れているかを決定する。
【０００４】
上記のような情報処理装置は、例えば、ユーザが指先やスタイラスを移動させて描画を行うペイントアプリケーションや写真や絵をトリミングする画像編集アプリケーションを実行することが考えられている。描画等を行うアプリケーションでは、入力の開始位置と、終了位置を正確に決定することが必要である。例えばユーザが画像のトリミングを行っているときに、入力の開始位置や終了位置がユーザの意図したものと違う位置であった場合、ユーザは画像を意図した通りに加工することができず、トリミング操作を再度行わなくてはならない。また、描画を行う場合、入力の開始位置や終了位置が正確に決定されないと、ユーザの意図していない領域に描画がなされてしまう。
【０００５】
ここで、図１３をもちいてユーザが直線を描画するときの操作と情報処理装置の動作を説明する。図１３は、ユーザが点１２０２から点１２０３に直線を描画するときの模式図である。図１３（ａ）は、操作面をｚ軸方向から見た図であり、図１３（ｂ）はｙ軸方向から操作面を見たときの図である。ユーザは、図１３（ｂ）のようにＡ１、Ａ２、Ａ３の順で指先を動かす。ユーザの指先が点１２０１に到達したとき、情報処理装置は点１２０１の座標を入力の開始位置に決定する。その後、点１２０２、点１２０３を通過し、ユーザの指先が点１２０４に到達したとき、情報処理装置は点１２０４の座標を入力の終了位置に決定する。そのため、操作面は図１３（ａ）に示すように点１２０２から点１２０３の直線に加えて、点１２０１から点１２０２、点１２０３から点１２０４の直線が描画されてしまう。このように、ユーザの指先の動かし方によっては、入力の開始位置と終了位置がユーザの意図したものと異なる位置になってしまう。
【０００６】
特許文献１には、ユーザの指先と操作面の距離が所定の距離よりも小さくなった後、最初に指先の位置が静止した位置を、ユーザが入力を開始した位置として決定する情報処理装置が記載されている。さらに、特許文献１には、ユーザの指先と操作面の距離が所定の距離よりも小さい状態から大きい状態に変わる前であって、ユーザの指先が静止した最後の位置を、入力の終了位置として決定する情報処理装置が記載されている。このようにすることで、ユーザが意図する入力の開始位置と終了位置と、情報処理装置の決定する入力の開始位置と終了位置の差を小さくすることができる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１５−１３１５４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、ユーザが情報処理装置を操作するときに、必ず指先を静止させるとは限らない。ユーザが指先を静止させなかった場合、情報処理装置は操作面とユーザの指先の距離が所定の閾値よりも小さくなった点を入力の開始位置として決定する。そして、情報処理装置は操作面とユーザの指先の距離が所定の閾値より小さい状態から、所定の閾値より大きくなった点を入力の終了位置として決定する。そのため、ユーザの指先が静止しない場合、情報処理装置が決定する入力の開始位置または、終了位置が、ユーザの意図する位置と大きく異なる位置になる場合がある。
【０００９】
ユーザの指先が静止しない場合でも、情報処理装置が決定する入力の開始位置、または終了位置と、ユーザの意図する入力の開始位置、または終了位置の差は小さい方が望ましい。図１３（ｂ）に示す経路で指先が移動する場合、点１２０１よりも、操作面と指先の距離が閾値よりも大きい状態から小さい状態に移行してから所定時間経過後の点１２０５のほうが、指先が操作面に触れる点１２０２に近い。また、点１２０４よりも、操作面と指先が所定の閾値よりも小さい状態から大きい状態に移行する所定時間前の点１２０６の方が、指先が操作面から離れる点１２０３に近い。
【００１０】
そこで、本願発明はユーザの指先と操作面の距離が所定の閾値よりも近づいてから所定時間が経過したときに、ユーザの指先がある位置を情報処理装置に対する入力の開始位置に決定することを目的とする。また、ユーザの指先と操作面の距離が所定の閾値よりも小さい状態から大きい状態に移行する所定時間前にユーザの指先がある位置を入力の終了位置とすることを目的とする。
【課題を解決するための手段】
【００１１】
本発明は、撮像部により撮像された画像から所定の形状の物体を抽出する抽出手段と、操作面と前記抽出手段により抽出された物体との距離を取得する取得手段と、前記取得手段により取得された距離が第１の閾値より大きい状態から小さい状態に移行したかを判定する判定手段と、前記判定手段により、前記取得された距離が前記第１の閾値より大きい状態から小さい状態に移行したと判定されてから第１の時間後に前記撮像部により撮像された画像を取得し、該取得した前記画像から抽出された前記所定の形状の物体の位置を入力の開始位置に決定する決定手段と、を有することを特徴とする。
【００１２】
また、本発明は、撮像部により撮像された画像から所定の形状の物体を抽出する抽出手段と、操作面と前記抽出手段により抽出される前記所定の形状の物体の距離を取得する取得手段と、前記取得手段により取得される距離が第２の閾値よりも小さい状態から大きい状態に移行したことを判定する判定手段と、前記取得された距離が前記第２の閾値よりも小さい状態から大きい状態に移行したと前記判定手段により判定されたときより、第２の時間前に前記撮像部により撮像された画像を取得し、取得された前記画像から抽出された前記所定の形状の物体の位置を入力の終了位置に決定する決定手段と、を有することを特徴とする。
【発明の効果】
【００１３】
本願発明は、ユーザの指先と操作面の距離が所定の閾値よりも近づいてから所定時間が経過したときに、ユーザの指先がある位置を情報処理装置に対する入力の開始位置に決定することを目的とする。また、ユーザの指先と操作面の距離が所定の閾値よりも小さい状態から大きい状態に移行する所定時間前にユーザの指先がある位置を入力の終了位置とすることができる。
【００１４】
また、本願発明は、ユーザの指先と操作面の距離が所定の閾値よりも小さい状態から大きい状態に移行する所定時間前に前記ユーザの指先がある位置を入力の終了位置として決定することができる。
【図面の簡単な説明】
【００１５】
【図１】本実施形態に係る、カメラスキャナ１０１のネットワーク構成を示す図である。
【図２】本実施形態に係る、カメラスキャナ１０１の外観を示す図である。
【図３】本実施形態に係る、コントローラ部２０１のハードウェア構成図の一例である。
【図４】本実施形態に係る、カメラスキャナ１０１の制御用プログラムの機能構成図の一例である。
【図５】本実施形態において、距離画像取得部４０８が実行する処理のフローチャートである。
【図６】本実施形態において、ジェスチャ認識部４０９が実行する処理のフローチャートである。
【図７】本実施形態において、ユーザがタップ操作を行ったときの模式図である。
【図８】本実施形態において、ジェスチャ認識部４０９が実行する処理の説明図である。
【図９】本実施形態において、入力の開始位置を決定する方法を示す図である。
【図１０】本実施形態において、入力の終了位置を決定する方法を示す図である。
【図１１】本実施形態において、入力を用いて操作を行うアプリケーションの一例を示す図である。
【図１２】第２の実施形態におけるタッチ平面ジェスチャ判定処理を示すフローチャートである。
【図１３】ユーザが入力で直線を描画したときの一例を示す模式図である。
【発明を実施するための形態】
【００１６】
以下、本発明を実施するための裁量の形態について図面を参照して説明する。なお、以下で説明する実施形態は、本発明を具体的に実施した場合の一例を示すものであり、これに限るものではない。
【００１７】
［第１の実施形態］
第１の実施形態に係る情報処理装置は、たとえば撮像部（カメラ）と投影部（プロジェクタ）、距離画像センサを含むカメラスキャナである。ユーザは指先を操作面に近づける、または、指先を操作面に接触させることでカメラスキャナの操作を行う。
【００１８】
以降、ユーザの指先と操作面の距離が所定の距離よりも近い状態を「タッチ状態」、ユーザの指先と操作面の距離が所定の距離よりも大きい状態を「非タッチ状態」と記載する。ユーザの指先が操作面から所定の距離以上離れた状態（非タッチ状態）から、ユーザの指先と操作面の距離が所定の距離よりも近づいた状態（タッチ状態）に移行したことを「入力が開始される」と記載する。非タッチ状態からタッチ状態に移行したことを「入力が終了される」という。
【００１９】
図１は、第１の実施形態に係る情報処理装置の一例であるカメラスキャナ１０１が含まれるネットワーク構成を示す図である。本実施形態において、カメラスキャナ１０１は、机等の平な操作面上に設置されている。
【００２０】
図１に示すように、カメラスキャナ１０１はローカルエリアネットワーク等のネットワーク１０４にてホストコンピュータ１０２およびプリンタ１０３に接続されている。図１のネットワーク構成において、ホストコンピュータ１０２からの指示により、カメラスキャナ１０１は机等の平面にかれた原稿を読み取り画像データを生成するスキャン機能を実行する。また、ホストコンピュータ１０２からの指示により、カメラスキャナ１０１がスキャン機能を実行して生成した画像データをプリンタ１０３が出力するプリント機能を実行する。また、ユーザがカメラスキャナ１０１を操作すると、カメラスキャナ１０１がスキャン機能を実行したり、カメラスキャナ１０１が生成した画像データをプリンタ１０３が出力するプリント機能を実行する。
【００２１】
＜カメラスキャナの構成＞
図２（ａ）は、本実施形態に係るカメラスキャナ１０１の構成例を示す図である。
【００２２】
図２（ａ）に示すように、カメラスキャナ１０１は、コントローラ部２０１、カメラ２０２、腕部２０３、プロジェクタ２０７、距離画像センサ２０８で構成される。カメラスキャナの本体であるコントローラ部２０１と、撮像を行うためのカメラ２０２、プロジェクタ２０７および距離画像センサ２０８は、腕部２０３により連結されている。腕部２０３は曲げ伸ばしが可能である。
【００２３】
操作面２０４はカメラスキャナ１０１が設置されている平面である。カメラ２０２および距離画像センサ２０８のレンズは操作面２０４方向に向けられており、破線で囲まれた読み取り領域２０５内の画像を読み取り可能である。距離画像センサ２０８は所定時間毎に操作面を撮像し、撮像画像からユーザ指先の動きを認識する。図２（ａ）で、カメラスキャナ１０１は読み取り領域２０５内に置かれている原稿２０６を読み取ることができる。
【００２４】
カメラ２０２は単一解像度で画像を撮像するものとしてもよいし、高解像度画像撮像と低解像度画像撮像を撮像するものとしてもよい。たとえば、カメラスキャナ１０１がスキャン機能を実行するときには、高解像度画像を撮像する。このようにすることで、カメラスキャナ１０１は読み取り領域２０５内の原稿を高解像度で取得することができる。一方で、カメラスキャナ１０１は読み取り領域２０５内でユーザによるタッチ操作を検出するときには低下像度画像を取得する。このようにすることで、カメラスキャナ１０１が読み取り領域２０５内の画像を取得するのにかかる時間を少なくして、ユーザによる操作の検出にかかる時間を少なくすることができる。
【００２５】
操作面２０４は、ターンテーブル２０９を備えていてもよい。ターンテーブル２０９はコントローラ部２０１からの指示によって回転する。操作面２０４に立体が置かれている場合、ターンテーブル２０９を回転させることで、カメラ２０２は立体をさまざまな角度で当該立体を撮像することができる。
【００２６】
また、操作面２０４内に、タッチパネル３３０が設けられていてもよい。タッチパネル３３０はユーザが手やペンで触れた位置情報を感知して情報信号として出力する。カメラスキャナ１０１は、不図示のスピーカ３４０を備えていてもよい。さらに、カメラスキャナ１０１が周囲に人がいるかを検知するための人感センサ、照度センサ、加速度センサなどの各種センサデバイスを備えていてもよい。
【００２７】
図２（ｂ）は、カメラスキャナ１０１における座標系を表す図である。カメラスキャナ１０１では各ハードウェアデバイスに対して、カメラ座標系、距離画像座標系、プロジェクタ座標系という座標系が定義される。カメラ座標系は、カメラ２０２が撮影する撮影面をＸＹ平面とし、撮影面に対して奥行方向がＺ方向と定義される。距離画像座標系は、距離画像センサ２０８が撮影する画像平面をＸＹ平面とし、奥行方向がＺ方向と定義される。プロジェクタ座標系は、プロジェクタ２０７が投影する画像平面をそれぞれＸＹ平面とし、画像平面に直交した方向をＺ方向として定義したものと定義される。さらに、これらの独立した座標系を統一的に扱うために、操作面２０４を含む平面をＸＹ平面とし、このＸＹ平面から上方に垂直な向きをＺ軸とする直交座標系が定義される。
【００２８】
図２（ｃ）は、直行座標系とカメラ座標系の関係を示した図である。直交座標系における３次元点Ｐ［Ｘ，Ｙ，Ｚ］は、（１）式によって、カメラ座標系における３次元点Ｐｃ［Ｘｃ，Ｙｃ，Ｚｃ］へ変換される。
［Ｘｃ，Ｙｃ，Ｚｃ］Ｔ＝［Ｒｃ│ｔｃ］［Ｘ，Ｙ，Ｚ，ｌ］Ｔ・・・（１）
【００２９】
ここで、Ｒｃおよびｔｃは、直交座標系に対するカメラの姿勢（回転）と位置（並進）によって求まる外部パラメータによって構成される行列である。Ｒｃは３×３の回転行列であり、ｔｃは並進ベクトルである。カメラ座標系で定義された３次元点は（２）式によって、直交座標系へ変換される。
［Ｘ，Ｙ，Ｚ］Ｔ＝［Ｒｃ−１│−Ｒｃ−１ｔｃ］［Ｘｃ，Ｙｃ，Ｚｃ，ｌ］Ｔ・・・（２）
【００３０】
さらに、カメラ２０２で撮影されるカメラ画像平面は、２次元の画像である。すなわち、カメラ座標系上での３次元点Ｐｃ［Ｘｃ，Ｙｃ，Ｚｃ］は、（３）式によって２次元座標ｐｃ［ｘｐ，ｙｐ］に変換される。
λ［ｘｐ，ｙｐ，ｌ］Ｔ＝Ａ［Ｘｃ，Ｙｃ，Ｚｃ］Ｔ・・・（３）
【００３１】
ここで、Ａは、カメラの内部パラメータと呼ばれ、焦点距離と画像中心などで表現される３×３の行列である。
【００３２】
以上のように、（１）式と（３）式を用いることで、直交座標系で表された３次元点群は、カメラ座標系での３次元点群座標やカメラ画像平面に変換される。なお、各ハードウェアデバイスの内部パラメータおよび直交座標系に対する位置姿勢（外部パラメータ）は、公知のキャリブレーション手法によりあらかじめキャリブレーションされているものとする。以後、特に断りがなく３次元点群と表記した場合は、直交座標系における３次元データを表しているものとする。
【００３３】
＜カメラスキャナのコントローラのハードウェア構成＞
図３は、カメラスキャナ１０１の本体であるコントローラ部２０１のハードウェア構成例を示す図である。
【００３４】
図３に示すように、コントローラ部２０１は、システムバス３０１に接続されたＣＰＵ３０２、ＲＡＭ３０３、ＲＯＭ３０４、ＨＤＤ３０５、ネットワークＩ／Ｆ３０６、画像処理プロセッサ３０７、カメラＩ／Ｆ３０８を含む。さらに、コントローラ部２０１はディスプレイコントローラ３０９、シリアルＩ／Ｆ３１０、オーディオコントローラ３１１およびＵＳＢコントローラ３１２を含む。
【００３５】
ＣＰＵ３０２はコントローラ部２０１全体の動作を制御する中央演算装置である。ＲＡＭ３０３は揮発性メモリである。ＲＯＭ３０４は不揮発性メモリであり、ＣＰＵ３０２の起動用プログラムが格納されている。ＨＤＤ３０５はＲＡＭ３０３と比較して大容量なハードディスクドライブ（ＨＤＤ）である。ＨＤＤ３０５にはコントローラ部２０１が実行する、カメラスキャナ１０１の制御用プログラムが格納されている。
【００３６】
ＣＰＵ３０２は電源ＯＮ等の起動時、ＲＯＭ３０４に格納されている起動用プログラムをＲＡＭ３０３に展開して、実行する。ＣＰＵ３０２は起動用プログラムを実行すると、続けてＲＡＭ３０３上に展開した制御用プログラムを実行し、コントローラ部２０１の制御を行う。また、ＣＰＵ３０２は制御用プログラムによる動作に用いるデータをＲＡＭ３０３に格納して読み書きする。さらに、ＨＤＤ３０５は制御用プログラムによる動作に必要な各種設定や、また、カメラ入力によって生成した画像データを格納する。これらのデータはＣＰＵ３０２によって読み書きされる。ＣＰＵ３０２はネットワークＩ／Ｆ３０６を介してネットワーク１０４上の他の機器との通信を行う。
【００３７】
画像処理プロセッサ３０７はＲＡＭ３０３に格納された画像データを読み出して処理し、回転、変倍、色変換等の画像処理を実行し、画像処理が実行された画像データをＲＡＭ３０３へ書き戻す。
【００３８】
カメラＩ／Ｆ３０８はカメラ２０２および距離画像センサ２０８と接続されている。ＣＰＵ３０２はカメラＩ／Ｆ３０８を介してカメラ２０２の撮像する画像データをＲＡＭ３０３に書き込む。また、ＣＰＵ３０２は距離画像センサ２０８から距離画像データを取得してＲＡＭ３０３へ書き込む。また、ＣＰＵ３０２からの制御コマンドはカメラＩ／Ｆ３０８を介してカメラ２０２および距離画像センサ２０８へ送信される。カメラ２０２および距離画像センサ２０８は、カメラＩ／Ｆ３０８を介して受信した制御コマンドに従い、設定を行う。
【００３９】
また、コントローラ部２０１は、ディスプレイコントローラ３０９、シリアルＩ／Ｆ３１０、オーディオコントローラ３１１およびＵＳＢコントローラ３１２をさらに含む。コントローラ部２０１は上記の構成のうち少なくとも１つの構成を含むとしてもよい。
【００４０】
ディスプレイコントローラ３０９はプロジェクタ２０７、タッチパネル３３０に接続されている。ディスプレイコントローラ３０９はＣＰＵ３０２の指示に応じてプロジェクタ２０７やタッチパネル３３０が表示する画像データの表示を制御する。
【００４１】
シリアルＩ／Ｆ３１０はコントローラ部２０１とタッチパネル３３０、ターンテーブル２０９の間のシリアル信号の入出力を行う。たとえば、シリアルＩ／Ｆ３１０はＣＰＵ３０２に制御されて、ターンテーブル２０９に回転開始・終了の指示および回転角度の指示をターンテーブル２０９へ送信する。また、ＣＰＵ３０２はタッチパネル３３０が押下されたときに、シリアルＩ／Ｆ３１０を介して押下された座標を取得する。ＣＰＵ３０２はシリアルＩ／Ｆ３１０を介して、タッチパネル３３０が接続されているかどうかを判断する。
【００４２】
オーディオコントローラ３１１はスピーカ３４０に接続され、ＣＰＵ３０２の指示に応じて音声データをアナログ音声信号に変換し、スピーカ３４０を通じて音声を出力する。
【００４３】
ＵＳＢコントローラ３１２はＣＰＵ３０２の指示に応じて外付けのＵＳＢデバイスの制御を行う。ここでは、ＵＳＢコントローラ３１２はＵＳＢメモリやＳＤカードなどの外部メモリ３５０に接続され、外部メモリ３５０へのデータの読み書きを行う。
【００４４】
＜カメラスキャナの制御用プログラムの機能構成＞
図４は、ＣＰＵ３０２が実行するカメラスキャナ１０１の制御用プログラムの機能構成４０１を示す図である。
【００４５】
カメラスキャナ１０１の制御用プログラムは前述のようにＨＤＤ３０５に格納されている。ＣＰＵ３０２が起動時に当該プログラムをＲＡＭ３０３上に展開して、実行する。
【００４６】
メイン制御部４０２は制御の中心であり、機能構成４０１内の他の各モジュールを制御する。
【００４７】
画像取得部４１６は画像入力処理を行うモジュールであり、カメラ画像取得部４０７と距離画像取得部４０８で構成される。カメラ画像取得部４０７はカメラＩ／Ｆ３０８を介してカメラ２０２が出力する画像データを取得し、ＲＡＭ３０３へ格納する。距離画像取得部４０８はカメラＩ／Ｆ３０８を介して距離画像センサ２０８が出力する距離画像データを取得し、ＲＡＭ３０３へ格納する。距離画像取得部４０８の処理の詳細は図５を用いて後述する。
【００４８】
画像処理部４１１は、各種画像処理モジュールで構成されており、カメラ２０２および距離画像センサ２０８から取得した画像を画像処理プロセッサ３０７で解析する。前述のジェスチャ認識部４０９は画像処理部４１１の各種画像処理モジュールを利用して実行される。
【００４９】
ユーザインターフェイス部４０３は、メイン制御部４０２からの要求を受け、メッセージやボタン等のＧＵＩ部品を生成する。そして、ユーザインターフェイス部４０３は、表示部４０６へ生成したＧＵＩ部品の表示を要求する。表示部４０６はプロジェクタ２０７を用いて、生成したＧＵＩ部品を表示する。また、ユーザインターフェイス部４０３は、ジェスチャ認識部４０９が認識したタッチ等のジェスチャ操作、およびそれらの座標を、メイン制御部４０２経由で受信する。ユーザインターフェイス部４０３は表示中の操作画面の内容と受信した操作座標を対応させて操作内容（押下されたボタン等）を判定する。ユーザインターフェイス部４０３は、判定した操作内容をメイン制御部４０２へ通知する。ユーザインターフェイス部４０３が操作内容をメイン制御部４０２へ通知することで、カメラスキャナ１０１はユーザの操作を判定する。
【００５０】
ネットワーク通信部４０４は、ネットワークＩ／Ｆ３０６を介して、ネットワーク１０４上の他の機器とＴＣＰ／ＩＰによる通信を行う。
【００５１】
データ管理部４０５は、制御用プログラムの実行において生成した作業データなど様々なデータをＨＤＤ３０５上の所定の領域へ保存し、管理する。
【００５２】
＜距離画像センサおよび距離画像取得部の説明＞
図５は距離画像センサ２０８が距離画像を取得するときの処理を示す図である。距離画像センサ２０８は赤外線パターン投射部３６１、赤外線カメラ３６２、ＲＧＢカメラ３６３で構成され、赤外線によるパターン投射方式の距離画像センサである。赤外線パターン投射部３６１は対象物に、人の目には不可視である赤外線によって３次元測定パターンを投射する。赤外線カメラ３６２は対象物に投射した３次元測定パターンを読み取るカメラである。ＲＧＢカメラ３６３は人の目に見える可視光をＲＧＢ信号で撮影するカメラである。
【００５３】
距離画像取得部４０８の実行する処理を図５（ａ）のフローチャートを用いて説明する。また、図５（ｂ）〜（ｄ）はパターン投射方式による距離画像の計測原理を説明するための図である。
【００５４】
図５（ａ）に示す処理は、カメラスキャナ１０１の電源がＯＮになることで開始される。図５（ａ）に示す処理を実行するためのプログラムは、ＨＤＤ３０５に記憶されており、ＣＰＵ３０２がＨＤＤ３０５に記憶されているプログラムを読み出して実行することで当該処理が実現される。
【００５５】
距離画像取得部４０８は赤外線パターン投射部３６１を制御して赤外線による３次元形状測定パターン５２２を対象物５２１に投射する（Ｓ５０１）。
【００５６】
距離画像取得部４０８は、ＲＧＢカメラ３６３を制御して、対象物を撮影したＲＧＢカメラ画像５２３を取得する。さらに、距離画像取得部４０８は赤外線カメラ３６２を制御してＳ５０１で赤外線投射部３１が投射した３次元形状測定パターン５２２を撮影した赤外線カメラ画像５２４を取得する（Ｓ５０２）。なお、赤外線カメラ３６２とＲＧＢカメラ３６３とは設置位置が異なるため、図５（ｃ）に示すようにＲＧＢカメラ画像５２３および赤外線カメラ画像５２４の撮影領域が異なる。
【００５７】
距離画像取得部４０８は、赤外線カメラ３６２の座標系からＲＧＢカメラ３６３の座標系への座標系変換を用いて赤外線カメラ画像５２４をＲＧＢカメラ画像５２３の座標系に変換する（Ｓ５０３）。なお、赤外線カメラ３６２とＲＧＢカメラ３６３の相対位置や、それぞれの内部パラメータは事前のキャリブレーション処理により既知であるとする。
【００５８】
距離画像取得部４０８は、図５（ｄ）に示すように、３次元形状測定パターン５２２とＳ５０３で座標変換を行った後の赤外線カメラ画像５２４を比較して、対応点を抽出する（Ｓ５０４）。例えば、距離画像取得部４０８は赤外線カメラ画像５２４上の１点を抽出する。距離画像取得部４０８は、抽出した点に対応する点を３次元形状測定パターン５２２上から探索して、同一の点が検出された場合に対応付けを行う。あるいは、距離画像取得部４０８は、赤外線カメラ画像５２４から任意の画素を抽出し、抽出した画素の周囲のパターンと同一のパターンを３次元形状測定パターン５２２上から探す。距離画像取得部４０８は最も周囲のパターンの類似度が高い画素と抽出した画素と対応づける。
【００５９】
距離画像取得部４０８は、赤外線パターン投射部３６１と赤外線カメラ３６２を結ぶ直線を基線５２５として三角測量の原理を用いて計算を行い、赤外線カメラ３６２から当該画素に写っている物体までの距離を算出する（Ｓ５０５）。距離画像取得部４０８は、Ｓ５０４で対応付けが出来た画素について、赤外線カメラ３６２からの距離を算出して画素値としてＲＡＭ３０３に保存する。距離画像取得部４０８は、Ｓ５０４で対応付けが出来なかった画素について、距離の計測が出来なかった部分として無効値をＲＡＭ３０３に保存する。距離画像取得部４０８は、上記の処理をＳ５０３で座標変換を行った赤外線カメラ画像５２４の全画素に対して行うことで、各画素に距離値が入った距離画像を生成する。
【００６０】
距離画像取得部４０８は、距離画像の各画素にＲＧＢカメラ画像５２３のＲＧＢ値を保存することにより、１画素につきＲ、Ｇ、Ｂ、距離の４つの値を持つ距離画像を生成する（Ｓ５０６）。距離画像取得部４０８が取得した距離画像は距離画像センサ２０８のＲＧＢカメラ３６３で定義された距離画像センサ座標系が基準となっている。
【００６１】
図２（ｂ）を用いて上述したように、距離画像取得部４０８は、距離画像センサ座標系として得られた距離データを直交座標系における３次元点群に変換する（Ｓ５０７）。（以後、特に指定がなく３次元点群と表記した場合は、直交座標系における３次元点群を示すものとする。）距離画像取得部４０８が距離データを直行座標系に変換したのち、図５（ａ）に記載の処理を終了する。
【００６２】
なお、本実施例では上述したように、距離画像センサ２０８として赤外線パターン投射方式が採用されている。カメラスキャナ１０１が他の方式の距離画像センサを用いて距離画像を取得してもよい。例えば、２つのＲＧＢカメラでステレオ立体視を行うステレオ方式や、レーザー光の飛行時間を検出することで距離を測定するＴＯＦ（Ｔｉｍｅ  ｏｆ  Ｆｌｉｇｈｔ）方式など、他の計測手段が用いられてもよい。
【００６３】
＜ジェスチャ認識部の説明＞
ジェスチャ認識部４０９の処理の詳細を、図６（ａ）のフローチャートを用いて説明する。図６（ａ）に示される処理は、カメラスキャナ１０１の電源がＯＮになったときに実行される。図６（ａ）に記載される処理は、ＣＰＵ３０２がＨＤＤ３０５に記憶されているプログラムを読み出して実行することで実現される。
【００６４】
ジェスチャ認識部４０９は初期化処理を行う（Ｓ６０１）。ジェスチャ認識部４０９は距離画像取得部４０８から距離画像を１フレーム分取得する。電源がＯＮになった直後は、操作面２０４上に距離を測定する対象物が置かれていない。ジェスチャ認識部４０９は、初期状態として操作面２０４の認識を行う。ジェスチャ認識部４０９は取得した距離画像から最も広い平面を抽出し、その位置と法線ベクトル（以降、操作面２０４の平面パラメータと呼ぶ）を算出し、ＲＡＭ３０３に保存する。
【００６５】
ジェスチャ認識部４０９は、Ｓ６２１〜６２２に後述する処理を実行し、操作面２０４上に存在する物体の３次元点群を取得する（Ｓ６０２）。Ｓ６０２に記載の処理は、距離画像センサ２０８が所定時間毎に操作面の撮像した画像に対して行われる。
【００６６】
ジェスチャ認識部４０９は、距離画像取得部４０８から距離画像と３次元点群を１フレーム取得する（Ｓ６２１）。ジェスチャ認識部４０９は、Ｓ６０１で特定された操作面２０４を用いて、取得した３次元点群から操作面２０４を含む平面にある点群を除去する（Ｓ６２２）。
【００６７】
ジェスチャ認識部４０９は、Ｓ６３１〜Ｓ６３４で後述する処理を実行し、取得した３次元点群から操作者の手の形状および指先を検出する（Ｓ６０３）。Ｓ６０３においてジェスチャ認識部４０９が実行する処理を、図６（ｂ）〜（ｄ）に示す、指先検出処理の方法を模式的に表した図を用いて説明する。ジェスチャ認識部４０９は、Ｓ６０２で取得した３次元点群と距離画像に含まれるＲＧＢ信号の情報を用いて、操作面２０４を含む平面から所定の高さ以上にある、肌色の３次元点群を抽出する（Ｓ６３１）。ジェスチャ認識部４０９がＳ６３１に記載の処理を実行することで、手の３次元点群が得られる。図６（ｂ）の６０１は抽出した手の３次元点群を表している。
【００６８】
ジェスチャ認識部４０９は、Ｓ６３１で抽出した手の３次元点群を、操作面２０４の平面に射影した２次元画像を生成して、その手の外形を検出する（Ｓ６３２）。図６（ｂ）の６０２は、３次元点群６０１を操作面２０４の平面に投影した３次元点群を表している。図６（ｃ）は、投影された３次元点群から、ｘｙ座標の値だけを取りだして、ｚ軸方向から見た２次元画像６０３を示している。ジェスチャ認識部４０９は、手の３次元点群６０１の各点が、操作面２０４の平面に投影した２次元画像６０３のどの点に対応するかを、記憶する。
【００６９】
ジェスチャ認識部４０９はＳ６３２で検出した手の外形上の各点について、その点での外形の曲率を算出し、算出した曲率が所定値より小さい点を指先として検出する（Ｓ６３３）。図６（ｄ）は、外形の曲率から指先を検出する方法を模式的に表したものである。６０４は、操作面２０４の平面に投影された２次元画像６０３の外形を表す点の一部である。ジェスチャ認識部４０９は、６０４のような、外形を表す点のうち、隣り合う５個の点を含むように円を描いたときの直径を算出する。円６０５、６０７は、２次元画像６０３において隣り合う５つの点が含まれるように描かれた円である。この円を、全ての外形の点に対して順に描き、その直径（例えば６０６、６０８）が所定の値より小さい（曲率が小さい）場合、ジェスチャ認識部４０９は当該点が指先を構成する点であると判定する。本実施形態では隣り合う５個の点としたが、その数は限定されるものではない。また、本実施形態では曲率を用いたが、ジェスチャ認識部４０９が外形に対して楕円フィッティングを行って、指先を検出してもよい。
【００７０】
ジェスチャ認識部４０９は、検出した指先の個数および各指先の座標を算出する（Ｓ６３４）。ジェスチャ認識部４０９は、Ｓ６３３において指先として検出した２次元画像６０３の点に対応する３次元点群６０１の座標を取得する。本実施形態では、３次元点群から２次元画像に投影した画像から指先を検出する方法を説明したが、指先検出の対象とする画像は、これに限定されるものではない。例えば、距離画像の背景差分や、ＲＧＢ画像の肌色領域から手の領域を抽出し、上に述べたのと同様の方法（外形の曲率計算等）で、ジェスチャ認識部４０９が手領域から指先を検出してもよい。この場合、検出した指先の座標はＲＧＢ画像や距離画像といった、２次元画像上の座標である。そこで、ジェスチャ認識部４０９は検出した２次元の座標における距離画像の距離情報を用いて、直交座標系の３次元座標に変換する。この時、指先点となる外形上の点ではなく、指先を検出するときに用いた、曲率円の中心を指先点としてもよい。
【００７１】
ジェスチャ認識部４０９は、Ｓ６４１〜Ｓ６４３に後述する、検出した手の形状および指先からのジェスチャ判定処理を行う（Ｓ６０４）。ジェスチャ認識部４０９は、Ｓ６０３で検出した指先が１つかどうか判定する（Ｓ６４１）。指先が１つでなければ、ジェスチャ認識部４０９はユーザインターフェイス部４０３に通知するイベントはないと判定する（Ｓ６４３）。このとき、ジェスチャ認識部４０９は操作者の指先が操作面２０４上に存在することを示すようなイベントを生成してもよい。Ｓ６４１においてジェスチャ認識部４０９が検出した指先が１つであれば、ジェスチャ認識部は後述する平面タッチジェスチャ判定処理を行う（Ｓ６４２）。
【００７２】
ユーザインターフェイス部４０３は、Ｓ６０４でジェスチャ認識部４０９から受信したイベントに従って、プロジェクタ２０７が操作面２０４に投影する画面を制御する（Ｓ６０５）。その後、ジェスチャ認識部４０９は処理をＳ６０２に戻してジェスチャ認識処理を繰り返す。図６（ａ）に記載の処理は、カメラスキャナ１０１の電源がＯＦＦになったときに終了される。
【００７３】
なお、本実施形態では、一本指でのジェスチャ認識について説明を行ったが、カメラスキャナ１０１が複数の指あるいは複数の手、あるいは腕や体全体でのジェスチャ操作を認識するとしてもよい。
【００７４】
平面タッチジェスチャ判定処理（Ｓ６４２）を詳細に記載する前に、本実施形態において、ユーザがタップ操作を行ったときのタッチ位置と、ユーザがムーブ操作を行ったときの入力の開始位置、終了位置の決定方法を図７、図８、図９を用いて説明する。
【００７５】
本実施形態において、カメラスキャナ１０１のジェスチャ認識部４０９はユーザインターフェイス部４０３にユーザの指先の動きを示すイベントを通知する。ユーザインターフェイス部４０３は通知されたイベントに従って、プロジェクタが操作面に投影する画面の制御を行う。ジェスチャ認識部４０９が通知するイベントとは、たとえば、「タッチ」イベントや、「タップ」イベント、「ムーブ」イベントや「ムーブスタート」イベント、「ムーブエンド」イベント、「リリース」イベントがある。
【００７６】
「タッチ」イベントとは、ユーザの指先が非タッチ状態からタッチ状態に変わったことを示すイベントである。「リリース」イベントとはユーザの指先が非タッチ状態からタッチ状態に変わったことを示すイベントである。
【００７７】
「タップ」イベントとは、「タッチ」イベントに含まれる座標と「リリース」イベントに含まれる座標が所定距離以下であるときに通知されるイベントである。すなわち、「タップ」イベントは、ユーザが指先を操作面に近づけてから操作面上で動かさずに指先を操作面から離したことを示すイベントである。「タップ」イベントは、ユーザが操作面に表示されたアイコンや画像を選択するときに用いられる。
【００７８】
「ムーブスタート」イベント、「ムーブ」イベント、「ムーブエンド」イベントはムーブ操作に関するイベントであり、ユーザが直線や図形を描画したり、操作面に表示されるアイコンを移動したりするときに用いられるイベントである。「ムーブスタート」イベントは、ユーザがムーブ操作を開始した座標を含むムーブ操作の開始を通知するイベントである。「ムーブ」イベントは、ムーブ操作中にユーザの指先の座標を含み、ムーブ操作中であることを示すイベントである。「ムーブエンド」イベントはムーブ操作が終了した座標を含む、ムーブ操作の終了を通知するイベントである。
【００７９】
図７は、ユーザがタップ操作を行ったときの模式図である。図７（ａ）は操作面２０４を真上（ｚ軸方向）から見た図であり、（ｂ）は操作面２０４をｙ軸方向から見た図である。点７０２はユーザの指先が操作面２０４に触れた点である。閾値９０２は、ユーザの指先が非タッチ状態からタッチ状態に移行したことを検出するための閾値である。７００ｃ、７００ｄはユーザの指先が移動した経路を示している。点１１２〜点１１５はカメラスキャナ１０１が検出するユーザの指先の位置である。ユーザの指先が点１１２に到達すると、カメラスキャナ１０１はユーザの指先が非タッチ状態からタッチ状態に移行したことを検出する。そして、所定時間経過後（図７では３フレーム経過後）の点１１３のｘｙ座標と「タッチ」イベントをジェスチャ認識部４０９がユーザインターフェイス部４０３に通知する。ユーザの指先が点１１４に到達すると、ジェスチャ認識部４０９はタッチ状態から非タッチ状態に移行したことを検出する。ジェスチャ認識部４０９はユーザインターフェイス部４０３に点１１４の所定時間前（図７では４フレーム前）の点１１５の座標を含む「リリース」イベントをユーザインターフェイス部４０３に通知する。このとき、ジェスチャ認識部４０９は、ユーザの指先が点１１３から所定の距離以上移動していなければ、タップ操作が行われたと判定し、ユーザインターフェイス部４０３に点１１３の座標を含む「タップ」イベントを通知する。上記のような流れで、カメラスキャナ１０１はユーザが行った操作がタップ操作であることを判定して、操作面２０４に表示するアイテムの選択等、タップ操作に対応する処理を実行する。
【００８０】
図８は、ユーザが操作面２０４に指を近づけて、操作面２０４に触れた後、操作面２０４上で指を動かしたムーブ操作の開始およびムーブ操作中を示す模式図である。図８（ａ）は、ユーザが操作面２０４上で指先を静止させずに動かした場合を示している。図８（ｂ）は、ユーザが操作面２０４上で指先を静止させた場合を示している。ｒ１、ｒ２は、ユーザの指先の軌跡である。点９０４、点９０５、点９０６で示す丸印は、カメラスキャナ１０１が各フレームのユーザの指先の位置である。点９１０は、ユーザが実際に操作面２０４に接触した点である。
【００８１】
図８（ａ）では、ユーザの指先が点９０４まで移動すると、カメラスキャナ１０１はユーザの指先と操作面２０４の距離が閾値７０３よりも小さくなったこと、すなわち非タッチ状態からタッチ状態に移行したことを検出する。ユーザの指先が操作面２０４に近づいてから所定時間が経過した後の点９０６で、ジェスチャ認識部４０９はユーザインターフェイス部４０３に点９０６の座標を含む「タッチ」イベントを通知する。
【００８２】
その後ユーザの指先のｘ軸方向の移動量９０７が所定の閾値以上となると、ジェスチャ認識部４０９はユーザインターフェイス部４０３に「タッチ」イベントで通知した座標と同じ座標を含む「ムーブスタート」イベントを通知する。ここで、ユーザインターフェイス部４０３に通知された「ムーブスタート」イベントに含まれる座標がムーブ操作の開始位置である。
【００８３】
図８（ｂ）では、ユーザの指差が点９０４を通過した３フレーム後に、ジェスチャ認識部４０９がユーザインターフェイス部４０３に点９０６の座標を含む「タッチ」イベントを通知する。その後、ユーザの指先のｘ軸方向の移動量９０７が所定の閾値以上になる前の点９０９で所定時間静止した場合、ジェスチャ認識部４０９は点９０９の座標を含む「ムーブスタート」イベントをユーザインターフェイス部４０３に通知する。ここで、ユーザインターフェイス部４０３に通知された「ムーブスタート」イベントに含まれる座標がムーブ操作の開始位置である。
【００８４】
ユーザの指先が所定の閾値よりも近づいた位置（点９０４）をムーブ操作の開始位置とすると、カメラスキャナ１０１がムーブ操作の開始位置として決定した位置と、ユーザが実際に操作面２０４に触れた位置（点９１０）の差が大きくなる。しかし、上記のようにすることで、カメラスキャナ１０１が決定するムーブ操作の開始位置（点９０６）と実際にユーザが操作面２０４に触れた位置（点９１０）の差を少なくすることができる。
【００８５】
さらに、本実施形態では、図９（ｂ）に示すように、ユーザの指先が点９０９で静止した場合、カメラスキャナ１０１はユーザの指先が静止した位置（点９０９）をムーブ操作の開始位置に決定する。このようにすると、ユーザが意図的に指先を静止させた場合、カメラスキャナ１０１はユーザの意図した位置をムーブ操作の開始位置として決定することができる。
【００８６】
次に、図９（ａ）（ｂ）を用いて、ユーザの指先が操作面２０４から離れるときに、カメラスキャナ１０１がムーブ操作の終了位置を決定する方法を説明する。図９（ａ）は、ユーザが指先を静止させることなく、指先をｒ２，ｒ３の経路をたどって動かした場合の模式図である。図９（ｂ）は、ユーザが指先を点１００８で静止させた後にｒ３の経路をたどって動かした場合の模式図である。点１００４、点１００５、点１００６は、カメラスキャナ１０１が撮像する各フレームのユーザの指先の位置を示す点である。点１０１１は、ユーザの指先が操作面２０４から離れた位置を示している。
【００８７】
図９（ａ）より、ユーザの指先が点１００５まで移動したときに、ジェスチャ認識部４０９はユーザインターフェイス部４０３に所定時間前（図９（ａ）では４フレーム前）の点１００６の座標を含む「ムーブエンド」イベントを通知する。ここで、ユーザインターフェイス部４０３に通知された「ムーブエンド」イベントに含まれる座標がムーブ操作の終了位置である。
【００８８】
さらに、本実施形態では、図９（ｂ）に示すように、ユーザの指先が点１００８で静止させたときに、ジェスチャ認識部４０９は「ムーブエンド」イベントを生成してＲＡＭ３０３に保持しておく。その後、ユーザの指先のｘ軸方向の移動量１００９が所定の距離より小さいまま、タッチ状態から非タッチ状態に移行した場合、ジェスチャ認識部４０９は点１００８で生成した「ムーブエンド」イベントをユーザインターフェイス部４０３に通知する。ここで、「ムーブエンド」イベントに含まれる点１００８の座標がムーブ操作の終了位置となる。
【００８９】
図９（ｃ）（ｄ）をもちいて、ユーザがムーブ操作中に指先を静止させた後、ムーブ操作を継続した場合の処理を説明する。図１０（ｃ）は操作面をｚ軸方向から操作面２０４をみたときの図である。図（ｄ）は、操作面をｙ軸方向から見た図である。ユーザがｒ２、ｒ２´、ｒ３の順で指先を移動させたとする。点１００８はユーザの指先が静止した位置である。ユーザの指先が点１００８で静止した後、ユーザの指先のｘ軸方向の移動量１００９が所定の閾値以上となると、ジェスチャ認識部４０９はユーザインターフェイス部４０３に現在のユーザの指先の座標を含む「ムーブ」イベントを通知する。ユーザの指先が点１００５に到達したとき、ジェスチャ認識部４０９はユーザインターフェイス部４０３に点１００６の座標を含む「ムーブエンド」イベントを通知する。ここで、「ムーブエンド」イベントに含まれる点１００６の座標がムーブ操作の終了位置である。
【００９０】
本実施形態では、入力の開始時には、非タッチ状態からタッチ状態に移行した３フレーム後の画像での、ユーザの指先の位置をカメラスキャナ１０１はムーブ操作の開始位置とする。一方で、カメラスキャナ１０１は、タッチ状態から非タッチ状態に移行する４フレーム前の画像でのユーザの指先の位置をムーブ操作の終了位置とする。入力の開始時のフレーム数と入力終了時のフレーム数は同じフレーム数であっても構わない。
【００９１】
＜平面タッチジェスチャ判定処理＞
次に、本実施形態における平面タッチジェスチャ判定処理の流れについてフローチャートを用いて説明する。図１０は図６のＳ６４２で行う平面タッチジェスチャ判定処理の流れの一例を示すフローチャートである。図１０に記載の処理を実行するためのプログラムはＨＤＤ３０５に記憶されており、ＣＰＵ３０２が当該プログラムを読み出して実施することで本処理が実行される。
【００９２】
本フローチャートにおける、閾値１はジェスチャ認識部４０９が非タッチ状態からタッチ状態への移行を検出する閾値であり、たとえば、図８の７０３である。閾値２は、ジェスチャ認識部４０９がタッチ状態から非タッチ状態への移行を検出する閾値であり、たとえば、図９の閾値７０３である。閾値３は、ユーザの指先がタッチ状態で操作平面上を所定の距離以上移動したか否かを判定するための閾値である。
【００９３】
まず、ジェスチャ認識部４０９が、ユーザの指先と操作面２０４の距離が閾値１以下であるかを判定する（Ｓ８０１）。すなわち、ユーザの指先が操作面にタッチしている状態であるか否かを判定する。
【００９４】
ユーザの指先と操作面の距離が閾値１以下の場合、ジェスチャ認識部４０９は、ＲＡＭ３０３に保持されるタッチ判定フラグが「１」であるかを判定する（Ｓ８０２）。タッチ判定フラグとは、タッチ状態が所定フレーム継続されたかどうかを示すフラグである。タッチ判定フラグの値は、初期状態で「０」である。タッチ判定フラグが「１」の場合（Ｓ８０２でＹＥＳ）、ジェスチャ認識部４０９はＳ８１９に記載の処理を実行する。タッチ判定フラグが「０」であった場合、ジェスチャ認識部４０９はＳ８０３以降に記載の処理を実行する。
【００９５】
ジェスチャ認識部４０９は、タッチ状態が継続されているフレームカウントが所定のフレームカウントになったかを判定する（Ｓ８０２）。ＲＡＭ３０３は、ユーザの指先と操作面２０４の距離が閾値１以下になってからのフレーム数をフレームカウントとして保持する。ジェスチャ認識部４０９は、ＲＡＭ３０３に保持されたフレームカウントを読み出して、タッチ状態が継続されているフレームカウントが所定のフレームカウントに達しているかを判定する。本実施形態では、所定のフレームカウントは、例えば、距離画像センサ２０８の分解能に合わせてあらかじめ設定される固定の値とする。しかし、たとえば、タッチ閾値付近でのユーザの指先の移動速度等によって、ジェスチャ認識部４０９が所定のフレームカウントを変更するとしてもよい。ユーザの指先と操作面２０４の距離が閾値１よりも近くなってから所定のフレームカウントが経過していなかった場合、ジェスチャ認識部４０９はＲＡＭ３０３に保持されるフレームカウントを１増やす（Ｓ８０４）。このとき、ジェスチャ認識部４０９は、ユーザインターフェイス部４０３にイベントを通知せず平面タッチジェスチャ判定を終了し、図６のＳ６０５に遷移する。本実施形態では、ユーザインターフェイス部４０３へのイベントの通知は行わないが、ジェスチャ認識部４０９が、ユーザインターフェイス部４０３にユーザの指先が操作面２０４上にあることを示すイベントなど、状態を示すイベントを通知してもよい。
【００９６】
一方、ユーザの指先と操作面２０４の距離が閾値１以下になってから所定のフレームカウントが経過していた場合、ジェスチャ認識部４０９がＲＡＭ３０３に保持されているタッチ判定フラグを「１」に更新する（Ｓ８０５）。そして、ジェスチャ認識部４０９は「タッチ」イベントを生成してユーザインターフェイス部４０３に通知する（Ｓ８０６）。「タッチ」イベントに含まれる位置情報は、ジェスチャ認識部４０９がタッチ判定フラグを「１」に更新したときに検出されるユーザの指先のｘｙ座標である。たとえば、図７（ｂ）ではユーザの指先と操作面２０４の距離が閾値１（７０３）よりも小さくなる点１１２から所定フレームカウント（３フレーム）後の点１１３のｘｙ座標が「タッチ」イベントの座標としてユーザインターフェイス部４０３に通知される。このように、ユーザの指先と操作面２０４の距離が閾値１よりも小さくなってから所定フレーム数後の、ユーザの指先の位置を入力の開始位置としてＲＡＭ３０３に格納する。これにより、ユーザがタッチしようとした位置の座標と、ジェスチャ認識部４０９がユーザインターフェイス部４０３に通知する「タッチ」イベントの座標の差を小さくすることができる。
【００９７】
また、Ｓ８０６において、ジェスチャ認識部４０９は、生成したイベントの種類および座標をＲＡＭ３０３に格納する。ＲＡＭ３０３に格納されたイベントの種類および座標は、少なくとも当該入力が終了するまではＲＡＭ３０３に保持されたままである。
【００９８】
ジェスチャ認識部４０９は「タッチ」イベントをユーザインターフェイス部４０３に通知した後、「タップ」イベントを生成し、当該イベントをＲＡＭ３０３に格納する（Ｓ８０７）。このとき、「タップ」イベントに含まれる座標はＳ８０６で生成される「タッチ」イベントに含まれる座標と同様のものである。
【００９９】
ジェスチャ認識部４０９は、Ｓ８０２においてタッチ判定フラグが「１」であった場合、後述するＳ８１９〜Ｓ８２７に記載の処理を実行する。
【０１００】
ジェスチャ認識部４０９は、ＲＡＭ３０３にタップイベントが保持されているかを判定する（Ｓ８１９）。ＲＡＭ３０３にタップイベントが保持されている場合、ジェスチャ認識部４０９は、Ｓ８２０〜Ｓ８２４に後述する処理を実行する。ＲＡＭ３０３にタップイベントが保持されていない場合、ジェスチャ認識部４０９は、Ｓ８２５〜Ｓ８２７に後述する処理を実行する。
【０１０１】
ジェスチャ認識部４０９はＳ８０６においてユーザインターフェイス部４０３に通知した「タッチ」イベントの座標と、平面タッチジェスチャ判定処理を実行している画像内のユーザの指先の座標の距離が、所定の閾値３以上であるかを判定する（Ｓ８２０）。閾値３は、ユーザの指先がタッチ状態で、操作面２０４上を移動したか否かを判定するための閾値である。Ｓ８２０において、「タッチ」イベントの座標、すなわち入力の開始位置と現在の指先の座標が閾値３以上離れていれば、ジェスチャ認識部４０９はユーザがタッチ状態で指先を動かしたと判定する。一方で、「タッチ」イベントの座標、すなわち入力の開始位置と、現在の指先の座標が閾値３未満であれば、ジェスチャ認識部４０９はユーザの指先が操作面２０４上で移動していないと判定する。
【０１０２】
ユーザの指先が入力の開始位置から閾値３以上移動した場合、ジェスチャ認識部４０９は、ＲＡＭ３０３に保持している「タップ」イベントを破棄して、「ムーブスタート」イベントを生成し、ユーザインターフェイス部４０３に通知する（Ｓ８２１）。Ｓ８２１は図８（ａ）に対応する。ジェスチャ認識部４０９は、Ｓ８０６でユーザインターフェイス部４０３に通知した座標、すなわち点９０６の座標を含む「ムーブスタート」イベントをユーザインターフェイス部４０３に通知する。
【０１０３】
Ｓ８２０において、ユーザの指先の位置を示す座標と「タッチ」イベントが生成されたときの座標の距離が閾値３未満の場合、ジェスチャ認識部４０９は、ユーザの指先が静止しているか否かを判定する（Ｓ８２２）。本実施形態では、画像取得部４１６によって取得された前のフレームの画像から取得されるユーザの指先のｘｙ座標と最新のフレームの画像から検出されたユーザの指先のｘｙ座標から指先の移動距離を算出する。そして、算出した距離が所定の閾値よりも小さい場合、ジェスチャ認識部４０９はタッチ位置が静止していると判定する。本実施形態では、ジェスチャ認識部４０９が一つ前のフレームと本フレームにおけるユーザのタッチ位置の違いを検出して、タッチ位置が静止しているかを判定するとした。Ｓ８２２において、ジェスチャ認識部４０９が直前の複数フレームの間にユーザの指先が移動した距離が所定の閾値以下であればユーザの指先が静止したとしてもよい。
【０１０４】
ユーザの指先が静止していると判定された場合、ジェスチャ認識部４０９はＳ８２３に記載する処理を実行する。ユーザの指先が静止していないと判定された場合、ジェスチャ認識部４０９はＳ８２４に記載する処理を実行する。
【０１０５】
ジェスチャ認識部４０９は、ＲＡＭ３０３に保持されている「タップ」イベントを廃棄し、「ムーブスタート」イベントを生成し、ユーザインターフェイス部４０３に通知する（Ｓ８２３）。Ｓ８２３は、図８（ｂ）に対応している。Ｓ８２３でユーザインターフェイス部４０３に通知される「ムーブスタート」イベントに含まれる座標は、Ｓ８２２においてユーザの指先の静止が検出された点９０９の座標である。「ムーブスタート」イベントを通知後、ジェスチャ認識部４０９は平面タッチジェスチャ判定処理を終了する。
【０１０６】
Ｓ８２２においてユーザの指先が静止していないと判定された場合、ジェスチャ認識部４０９はユーザインターフェイス部４０３に対してイベントの通知を行わずに、平面タッチジェスチャ判定処理を終了する（Ｓ８２４）。このときジェスチャ認識部４０９は、ユーザの指先が操作面２０４上にあることを示すイベントをユーザインターフェイス部４０３に通知してもよい。
【０１０７】
Ｓ８１９において、ＲＡＭ３０３に「タップ」イベントが保持されていなかった場合、ジェスチャ認識部４０９は、Ｓ８２２と同様にユーザの指先が静止したかを判定する（Ｓ８２５）。Ｓ８２５で行う処理は前述したＳ８２２の処理と同様である。
【０１０８】
ユーザの指先が静止したと判定された場合、ジェスチャ認識部４０９は、ムーブ操作の終点を示す「ムーブエンド」イベントをＲＡＭ３０３上に保持し、平面タッチジェスチャ判定処理を終了する（Ｓ８２６）。Ｓ８２６は、図９（ｂ）の点１００８で指が静止したときの処理である。ジェスチャ認識部４０９は、Ｓ８２５でユーザの指先の静止が検出された点１００８の座標を含む「ムーブエンド」イベントをＲＡＭ３０３に保持する。
【０１０９】
Ｓ８２６において、ＲＡＭ３０３にすでに「ムーブエンド」イベントが保持されている場合がある。たとえば、ユーザがムーブ操作の途中で一度、タッチ位置を静止させた後、もう一度、指先を動かしてムーブ操作をし、指先を静止させた場合である。このとき、ジェスチャ認識部４０９は、ＲＡＭ３０３に保持されている「ムーブエンド」イベントを破棄して、現在のユーザの指先の位置を示す座標と「ムーブエンド」イベントをＲＡＭ３０３に格納する。
【０１１０】
Ｓ８２５において、ユーザの指先の位置の静止が検出されなかった場合、ジェスチャ認識部４０９は、「ムーブ」イベントをユーザインターフェイス部４０３に通知し、平面タッチジェスチャ判定処理を終了する（Ｓ８２７）。「ムーブ」イベントに含まれる座標情報は、現在のユーザの指先の位置を示す座標である。
【０１１１】
Ｓ８１９〜Ｓ８２７に記載の処理は、ユーザの指先が閾値１よりも操作面２０４に近い位置にあり、さらにＲＡＭ３０３のタッチ判定フラグが「１」のときにジェスチャ認識部４０９が実行する処理である。
【０１１２】
一方、Ｓ８０１においてユーザの指先と操作面２０４の距離が閾値１よりも大きい場合、ジェスチャ認識部４０９は、Ｓ８０８〜Ｓ８１８に記載の処理を実行する。
【０１１３】
ジェスチャ認識部４０９はユーザの指先と操作面２０４の距離が閾値２以上であるかを判定する（Ｓ８０８）。閾値２は、タッチ状態から非タッチ状態への移行を検出するための閾値である。閾値１と閾値２は同じ値であってもよいが、本実施形態では、閾値２は閾値１よりも大きい値であるとする。閾値２を閾値１よりも大きくすることで、ユーザの指先が閾値１の付近でわずかに上下に動いたときに、短時間の間にタッチとリリースが繰り返し検出されてしまうことを防ぐことができる。
【０１１４】
Ｓ８０８において、ユーザの指先と操作面２０４の距離が閾値２よりも小さい場合、ユーザの指先は閾値１よりも高い位置にあり、閾値２よりも低い位置にある。このとき、ジェスチャ認識部４０９は、図８に記載の平面タッチジェスチャ処理を終了して、ジェスチャ認識部４０９は図６のＳ６０５に記載の処理を実行する。
【０１１５】
ユーザの指先と操作面２０４の距離が閾値２以上であると判定された場合、ジェスチャ認識部４０９はＲＡＭ３０３に保持されたタッチ判定フラグが「０」であるかを判定する（Ｓ８０９）。タッチ判定フラグが「０」であった場合、ジェスチャ認識部４０９は本フローチャートに記載の処理を終了して、図６のＳ６０５に記載の処理を実行する。
【０１１６】
タッチ判定フラグが「１」の場合、ジェスチャ認識部４０９はＲＡＭ３０３に保持されているタッチ判定フラグを「０」に更新する（Ｓ８１０）。
【０１１７】
ジェスチャ認識部４０９はユーザインターフェイス部４０３に「リリース」イベントを通知する（Ｓ８１１）。Ｓ８１１において、ジェスチャ認識部４０９は、所定フレーム前の画像について図８に示す平面タッチジェスチャ判定処理を実行したときに生成されたイベントに含まれる座標を読み出す。ジェスチャ認識部４０９は、所定フレーム前の画像について平面タッチジェスチャ判定処理を行ったときに生成したイベントに含まれる座標を含む「リリース」イベントをユーザインターフェイス部４０３に通知する。例えば、図９（ａ）でユーザの指先が点１００５に到達した場合、点１００６のｘｙ座標を含む「リリース」イベントをユーザインターフェイス部４０３に通知する。本実施形態では、上述の指定フレームは予め決められる固定のフレーム数であるとする。しかし、ユーザの指先の移動速度等に応じてフレーム数を動的に変化させてもよい。例えば、タッチ位置の移動速度が速い場合、リリース座標を決定するために遡るフレーム数を少なくし、タッチ位置の移動が遅い場合、リリース座標を決定するために遡るフレーム数を多くする。
【０１１８】
「リリース」イベントをユーザインターフェイス部４０３に通知した後、ジェスチャ認識部４０９は「タップ」イベントがＲＡＭ３０３上に保持されているかを判定する（Ｓ８１２）。Ｓ８０７で生成される「タップ」イベントはＳ８２１またはＳ８２３で「ムーブスタート」イベントが生成されるまで、ＲＡＭ３０３に保持される。このようにすることで、ジェスチャ認識部４０９が「リリース」イベントを生成するときに、タップ操作がおこなわれたのか、ムーブ操作が行われたのかを判別することができる。
【０１１９】
ＲＡＭ３０３に「タップ」イベントが保持されている場合、ジェスチャ認識部４０９は「タップ」イベントをユーザインターフェイス部４０３に通知する（Ｓ８１３）。ジェスチャ認識部４０９は、「タップ」イベントをユーザインターフェイス部４０３に通知した後、本フローチャートに記載の処理を終了する。Ｓ８１３は、図７に対応する。Ｓ８１３においてユーザインターフェイス部４０３に通知される「タップ」イベントの座標は、Ｓ８０７でジェスチャ認識部４０９が生成してＲＡＭ３０３に保持した「タップ」イベントの座標、すなわち点１１３の座標である。ただし、「タップ」イベントの座標の決め方はここに示す限りではない。例えば、ジェスチャ認識部４０９がＳ８０７で得られる「タッチ」イベントの座標とＳ８１１で得られる「リリース」イベントの座標の中点をＳ８１３でユーザインターフェイス部４０３に通知される「タップ」イベントの座標に決定してもよい。
【０１２０】
ジェスチャ認識部４０９が「リリース」イベントを通知したとき、「タップ」イベントがＲＡＭ３０３上に保持されていない場合、ジェスチャ認識部４０９は「ムーブエンド」イベントがＲＡＭ３０３上に保持されているかを判定する（Ｓ８１４）。
【０１２１】
「ムーブエンド」イベントがＲＡＭ３０３に保持されていない場合、ジェスチャ認識部４０９が「ムーブエンド」イベントを生成し、ユーザインターフェイス部４０３に「ムーブエンド」イベントを通知する（Ｓ８１８）。ジェスチャ認識部４０９は、ユーザインターフェイス部４０３に「ムーブエンド」イベントを通知した後、図８に記載の処理を終了する。Ｓ８１８は、図９（ａ）に対応する処理である。ジェスチャ認識部４０９は点１００６のｘｙ座標を含む「ムーブエンド」イベントをユーザインターフェイス部４０３に通知する。
【０１２２】
ＲＡＭ３０３に「ムーブエンド」イベントが保持されている場合、ジェスチャ認識部４０９は、「ムーブエンド」イベントのｘｙ座標と「リリース」イベントのｘｙ座標の距離があらかじめ設定された閾値４以上かどうかを判定する（Ｓ８１５）。この処理は、「ムーブエンド」イベントが発生した後に、ユーザが改めてムーブ操作を続けたかどうかを、ｘｙ方向の移動距離を基準として判別するためのものである。
【０１２３】
ｘｙ方向の距離が閾値４よりも大きいと判断された場合、ジェスチャ認識部４０９は、「リリース」イベントに含まれる座標を用いて「ムーブエンド」イベントを更新する（Ｓ８１６）。Ｓ８１６は図９（ｄ）の場合にジェスチャ認識部４０９が実行する処理である。点１００８と点１００７の距離が閾値４以上である場合、ジェスチャ認識部４０９はＲＡＭ３０３に保持されている「ムーブエンド」イベントを破棄して、点１００７の座標を含む「ムーブエンド」イベントをユーザインターフェイス部４０３に通知する。
【０１２４】
保持されている「ムーブエンド」イベントと「リリース」イベントのｘｙ平面上での距離が閾値４未満の場合、ジェスチャ認識部４０９が、ＲＡＭ３０３に保持されている「ムーブエンド」イベントをユーザインターフェイス部４０３に通知する（Ｓ８１７）。これは、図９（ｂ）に示すように、ユーザが操作面２０４で指先を静止させた後、操作面２０４から指先を離した場合の処理である。ジェスチャ認識部４０９は点１００８の座標を含む「ムーブエンド」イベントをユーザインターフェイス部４０３に通知する。
【０１２５】
以上、Ｓ８０８〜Ｓ８１８の処理は、ムーブ操作の終了位置を決定する「ムーブエンド」イベントの座標の決定の方法を示している。ユーザが操作面２０４上で指先を静止させることなく、操作面２０４から指先を離した場合、「ムーブエンド」イベントに含まれる座標は、「リリース」イベントに含まれる座標と同じ座標となる。すなわち、「ムーブエンド」イベントに含まれる座標は、ユーザの指先と操作面２０４の距離が閾値２よりも小さい状態から、大きい状態に移行するよりも所定フレーム数前の画像におけるユーザの指先の位置である。これにより、カメラスキャナ１０１が決定するムーブ操作の終了位置とユーザが意図するムーブ操作の終了位置の差を小さくすることができる。
【０１２６】
第１の実施形態では、ムーブ操作の開始時に、ユーザの指先と操作面２０４の距離が所定の閾値より大きい状態から、所定の閾値よりも小さい状態に移行した所定時間後のユーザの指先の位置をカメラスキャナ１０１がムーブ操作の開始位置に決定する。さらに、ユーザの指先と操作面２０４の距離が所定の閾値より小さいタッチ状態から、閾値よりも大きい非タッチ状態に移行する所定時間前のユーザの指先の位置をムーブ操作の終了位置とする。このようにすることで、ユーザが指先を操作面２０４に対して垂直に動かさなかった場合でも、カメラスキャナ１０１が決定するムーブ操作の開始位置および終了位置と、ユーザの意図するムーブ操作の開始位置と終了位置の差を少なくすることができる。
【０１２７】
また、ユーザがムーブ操作の開始時および終了時に指先を操作面上で静止させた場合、情報処理装置はユーザが指先を静止させた位置をムーブ操作の開始位置または終了位置として認識する。このようにすることで、ユーザが意識的にムーブ操作の開始位置または終了位置を指定した場合、カメラスキャナ１０１は当該位置をムーブ操作の開始位置または終了位置に決定することができる。
【０１２８】
［第２の実施形態］
第１の実施形態で情報処理装置は、常に、ユーザの動作に合わせてムーブ操作の開始位置および終了位置を決定していた。すなわち、ユーザが操作面をタッチしたときに、一度指先を静止させた場合には、情報処理装置が指先の静止した座標を入力座標として補正をしていた。一方で、ユーザが指先を静止させることなく操作を行った場合、情報処理装置はユーザの指先が所定の閾値よりも近づいた後、所定時間経過後に検出される指先の座標をムーブ操作の開始位置に決定した。
【０１２９】
第２の実施形態では、ユーザの指先が静止した位置をムーブ操作の開始位置とするか、ユーザの指先と操作面の距離が所定の距離よりも近くなった後、所定時間経過後の指先の座標をムーブ操作の開始位置とするかをアプリケーションによって区別する。写真等画像の編集を行うアプリケーションのように、ムーブ操作の開始位置および終了位置を正確に決定することが必要なアプリケーションでは、情報処理装置がユーザの指先が静止した位置をムーブ操作の開始位置および終了位置として決定する。一方で、フリーハンドで描画を行うアプリケーションでは描画位置の正確さよりもユーザが短時間に効率よく描画をすることが望まれる。上記のようなアプリケーションでは、情報処理装置が、非タッチ状態からタッチ状態へ移行した所定時間後の指先の位置をムーブ操作の開始位置に決定し、タッチ状態から非タッチ状態へ移行する所定時間前の指先の位置をムーブ操作の終了位置に決定する。第２の実施形態では、アプリケーションごとにムーブ操作の開始位置および終了位置を決定する方法を切りかえる。
【０１３０】
第２の実施形態では、アプリケーションごとに静止フラグが設定される。静止フラグとは、当該アプリケーションを利用するときに、ユーザが指先を静止させることでムーブ操作の開始、終了を指示するアプリケーションであるか否かを示すフラグである。静止フラグが「０」の場合、当該アプリケーションはユーザが指先を静止させることなくムーブ操作の開始、終了を指示することのできるアプリケーションである。静止フラグが「１」の場合、当該アプリケーションは、ユーザが指先を静止させることでムーブ操作の開始、終了を指示することのできるアプリケーションである。
【０１３１】
例えば、図１１（ａ）（ｂ）に示すような、スライダーバーを表示するアプリケーションでは、ユーザがスライダ１１０１をタッチして、指先を移動させることで、スライダ１１０１の位置を変化させることができる。この場合、スライダ１１０１を正確に移動させるためにはユーザによるムーブ操作の終了を正確に決定することが必要である。そこでスライダーバーを表示するアプリケーションで、静止フラグは「１」に設定される。また、図１１（ｃ）の画像をトリミングするアプリケーションでは、ユーザが元の画像か切り取る範囲を正確に選択することが必要である。ユーザが意図した範囲と異なる範囲を切り取ってしまうと、ユーザは操作をはじめからやり直さなくてはならない。また、図１１（ｄ）に示す矩形や円を描画するアプリケーションでは、各図形の描画の開始位置、終了位置を正確に決定することが必要である。このように、画像をトリミングするアプリケーションや図形の描画を行うアプリケーションでは、ユーザがムーブ操作を開始した位置、また終了した位置を正確に決定することが必要とされる。そこで、画像をトリミングするアプリケーションや円・矩形等予め決められた図形を描画するアプリケーションでも、静止フラグが「１」に設定される。
【０１３２】
一方で、図１１（ｅ）はユーザがフリーハンドで描画を行うアプリケーションである。ユーザがフリーハンドで描画を行うアプリケーションでは、ユーザが入力を行った後すぐにその入力が反映された画面を表示することが望まれる。そこで、フリーハンドで描画を行うアプリケーションでは、静止フラグが「０」に設定され、ユーザが指先を静止させなくても入力を行うことができるようにする。
【０１３３】
第２の実施形態に係る情報処理装置は、第１の実施形態と同様に、例えばカメラスキャナ１０１である。第２の実施形態に係るカメラスキャナ１０１のシステム構成、ハードウェア構成、プログラム機能構成図等は第１の実施形態と同様である。さらに、図５、図６に示す処理も第１の実施形態と同様である。ここでは、第１の実施形態と異なる点のみを説明する。
【０１３４】
アプリケーションを立ち上げたときに、ジェスチャ認識部４０９はＲＡＭ３０３に格納される静止フラグが「１」か「０」かを判定する。ＲＡＭ３０３に保持されている静止フラグが「０」の場合、図６のＳ６４２でジェスチャ認識部４０９は第１の実施形態の図８に示す処理と同様の処理を実行する。ＲＡＭ３０３に保持されるアプリケーションフラグが「１」の場合、ジェスチャ認識部４０９は図６のＳ６４２で図１２に示す平面ジェスチャ判定処理を実行する。
【０１３５】
第２の実施形態における、平面タッチジェスチャ判定処理について図１２を用いて説明する。本フローチャートに記載の処理を実行するためのプログラムは、ＨＤＤ３０５等の記憶装置に記憶されている。ＣＰＵ３０２がＨＤＤ３０５に記載のプログラムを読み出して、ＲＡＭ３０３に展開し、実行することで処理が実現される。ここでは、第１の実施形態と異なる点のみを説明する。
【０１３６】
Ｓ８２０においてユーザの指先が「タッチ」イベントの座標から閾値３以上移動している場合、ジェスチャ認識部４０９はユーザインターフェイス部４０３にエラーを通知する（Ｓ１３０１）。ユーザインターフェイス部４０３は通知されたエラーの通知に従って、操作面２０４にプロジェクタ２０７で、ユーザの指先の静止が検出されずムーブ操作が正しく開始されなかったことを通知する画面を投影する。
【０１３７】
Ｓ８１４において、「リリース」イベントが生成されたときにＲＡＭ３０３に「ムーブエンド」イベントが保持されていなかった場合、ジェスチャ認識部４０９はユーザインターフェイス部４０３にエラーを通知する（Ｓ１３０２）。ユーザインターフェイス部４０３は通知されたエラーの通知に従って、操作面２０４にプロジェクタ２０７でユーザの指先の静止が検出されずムーブ操作が正しく終了されなかったことを通知する画面を投影する。
【０１３８】
また、Ｓ８１５において、「リリース」イベントに含まれるｘｙ座標と「ムーブエンド」イベントに含まれるｘｙ座標の距離が閾値４以上である場合、ジェスチャ認識部４０９はユーザインターフェイス部４０３にエラーを通知する（Ｓ１３０３）。ユーザインターフェイス部４０３はエラーの通知に従って、操作面２０４にプロジェクタ２０７でユーザの指先の静止が検出されずムーブ操作が正しく終了されなかったことを通知する画面を表示する。
【０１３９】
第２の実施形態では、静止フラグが「０」のアプリケーションでは、第１の実施形態と同様に、ユーザが指先を静止させた場合は、ユーザの指先が静止した位置をムーブ操作の開始または終了位置に決定した。一方で、ユーザの指先が静止していない場合、非タッチ状態からタッチ状態に移行して所定時間後のユーザの指先の位置がムーブ操作の開始位置に決定される。そして、タッチ状態から非タッチ状態に移行する所定時間前のユーザの指先の位置がムーブ操作の終了位置に決定された。しかし、静止フラグが「０」のアプリケーションについては、ユーザの指先が静止したかしていないかにかかわらず、ジェスチャ認識部４０９がムーブ操作の開始位置および終了位置を決定するとしてもよい。たとえば、常に、非タッチ状態からタッチ状態に移行して、所定フレーム数経過後のユーザの指先の位置がムーブ操作の開始位置に決定される。そして、常に、タッチ状態から非タッチ状態に移行する所定フレーム数前のユーザの指先の位置がムーブ操作の終了位置に決定されるとしてもよい。
【０１４０】
第２の実施形態では、アプリケーションの種類ごとに静止フラグが設けられた。静止フラグはアプリケーションごとでなくてもよい。例えば、操作面２０４に投影される画面毎に静止フラグが設定されていてもよい。たとえば、ムーブ操作により描画を行うことのできる画面は静止フラグが「１」に設定されていて、ムーブ操作による描画を行わない画面では静止フラグが「０」に設定されてもよい。このようにすることで、画面毎にムーブ操作の開始位置と終了位置を決定する方法を切り替えることができる。また、操作面２０４に投影されるＧＵＩ部品毎に静止フラグが決められていてもよい。例えばスクロールバーを構成するＧＵＩ部品や、ムーブ操作による描画を行うためのＧＵＩ部品では静止フラグが「１」に設定される。一方で、ボタンを表示するＧＵＩ部品等では静止フラグが「０」に設定される。このようにすることで、アプリケーションごとや画面毎に静止フラグを設けるよりも細かくムーブ操作の開始と終了の決定方法を設定することができる。
【０１４１】
第２の実施形態に記載の情報処理装置は、ムーブ操作の開始と終了の座標を決定する方法をアプリケーションごとに切り替えることができる。このようにすることで、ムーブ操作の開始と終了の座標の検出を正確に行いたいアプリケーションでは、ユーザに指先を静止させて、ムーブ操作の開始位置、または、終了位置を決定することができる。一方で、ムーブ操作の開始と終了を正確に決定することが不要なアプリケーションでは、ユーザが指先を静止させなくても、ムーブ操作の開始と終了の座標を情報処理装置が決定することができる。また、このとき、情報処理装置が決定するムーブ操作の開始位置および終了位置と、ユーザが意図したムーブ操作の開始位置および終了位置の差を小さくすることができる。
【０１４２】
［その他の実施形態］
本実施形態では、ユーザが指先を動かして、情報処理装置の操作を行うとした。ユーザの指先でなくても、スタイラスやペン先等で情報処理装置の操作を行うことができるとしてもよい。
【０１４３】
本実施形態では、非タッチ状態からタッチ状態に移行が検出された所定時間後のユーザの指先の位置をムーブ操作の開始位置とし、タッチ状態から非タッチ状態に移行が検出される所定時間前のユーザの指先の位置をムーブ操作の終了位置とした。ムーブ操作の開始時のみ、または終了時のみ本実施形態に記載の処理を実行するとしてもよい。たとえば、情報処理装置が非タッチ状態からタッチ状態に移行を検出してから所定時間後のユーザの指先の位置をムーブ操作の開始位置とし、タッチ状態から非タッチ状態に移行したときのユーザの指先の位置をムーブ操作の終了位置としてもよい。また、非タッチ状態からタッチ状態に移行したときのユーザの指先の位置をムーブ操作の開始位置とし、非タッチ状態からタッチ状態に移行する所定時間前のユーザの指先の位置をムーブ操作の終了位置としてもよい。
【０１４４】
本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施例の機能を実現するソフトウェア（プログラム）をネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム又は装置のコンピュータ（又はＣＰＵやＭＰＵ等）がプログラムコードを読み出して実行する処理である。この場合、そのプログラム、及び該プログラムを記憶した記憶媒体は本発明を構成することになる。
【図１】
2018173907.tif 000003
【図２】
2018173907.tif 000004
【図３】
2018173907.tif 000005
【図４】
2018173907.tif 000006
【図５】
2018173907.tif 000007
【図６】
2018173907.tif 000008
【図７】
2018173907.tif 000009
【図８】
2018173907.tif 000010
【図９】
2018173907.tif 000011
【図１０】
2018173907.tif 000012
【図１１】
2018173907.tif 000013
【図１２】
2018173907.tif 000014
【図１３】
2018173907.tif 000015