(57)【要約】【課題】  ユーザによる手の指先による軌跡を入力として受け付ける指先の数が複数認識される場合でも、適正な指示を受け付ける指先とその座標値を特定する。【解決手段】    手入力装置において、操作面の空間に位置するユーザの手の外形を撮影して取得する距離画像データからユーザが指示している指先の数が複数である場合、ユーザが最初に指示した操作面のタッチ座標値に近接する第１の座標値に対応する指先を操作指示指として特定する。そして、特定した操作指示指に対応する第１の座標値を操作面上で特定する第２の座標値に変換することを特徴とする。【選択図】  図８
2018116360.tif 000002
【特許請求の範囲】
【請求項１】
手入力装置であって、
ユーザが指示する操作面の座標値を受け付ける受付手段と、
前記操作面の空間に位置するユーザの手の外形を撮影して取得する距離画像データに基づく第１の座標値を前記操作面に対応づけた第２の座標値に変換する変換手段と、
前記距離画像データから、前記ユーザが指示している指先の数が複数である場合、前記ユーザが最初に指示した前記操作面のタッチ座標値に近接する第１の座標値に対応する指先を操作指示指として特定する特定手段と、を備え、
前記変換手段は、前記特定手段が特定した操作指示指に対応する第１の座標値を前記第２の座標値に変換することを特徴とする手入力装置。
【請求項２】
前記変換手段が変換した第２の座標値を記憶する記憶手段を備え、
前記記憶手段は、初期値として前記ユーザが最初に指示した前記操作面のタッチ座標値を記憶することを特徴とする請求項１に記載の手入力装置。
【請求項３】
前記記憶手段に記憶される前記第２の座標値の軌跡を表示手段に描画する描画手段を備えることを特徴とする請求項１に記載の手入力装置。
【請求項４】
手入力装置であって、
ユーザが指示する操作面の座標値を受け付ける受付手段と、
前記操作面の空間に位置するユーザの手の外形を撮影して取得する距離画像データから特定する第１の座標値を前記操作面に対応づけた第２の座標値に変換する変換手段と、
前記距離画像データから、前記ユーザの手の距離画像データから特徴点を抽出する抽出手段と、
前記抽出手段が抽出した特徴点の座標値との差分値から算出する座標値を、ユーザが最初に指示した前記操作面のタッチ座標値に近接する第１の座標値と特定する特定手段と、を備え、
前記変換手段は、前記特定手段が特定した第１の座標値を第２の座標値に変換することを特徴とする手入力装置。
【請求項５】
前記受付手段は、前記ユーザの指先による指示を受け付けることを特徴とする請求項１または４に記載の手入力装置。
【請求項６】
前記受付手段は、前記ユーザが操作するペンによる指示を受け付けることを特徴とする請求項１または４に記載の手入力装置。
【請求項７】
手入力装置の制御方法であって、
ユーザが指示する操作面の座標値を受け付ける受付工程と、
前記操作面の空間に位置するユーザの手の外形を撮影して取得する距離画像データに基づく第１の座標値を前記操作面に対応づけた第２の座標値に変換する変換工程と、
前記距離画像データから、前記ユーザが指示している指先の数が複数である場合、前記ユーザが最初に指示した前記操作面のタッチ座標値に近接する第１の座標値に対応する指先を操作指示指として特定する特定工程と、を備え、
前記変換工程は、前記特定工程で特定した操作指示指に対応する第１の座標値を前記第２の座標値に変換することを特徴とする手入力装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、手入力装置、手入力装置の制御方法に関するものである。
【背景技術】
【０００２】
汎用的に使用されている筆記具や用紙を用いて、手書き入力を行うことができる手書入力機能を有する装置が提案されている。そのようなシステムでは、筆記具の筆記圧を検知するタッチパネル部と、タッチパネル部の検知結果に基づいて手書き座標を検知する座標検知部が必要となる。特許文献1では、筆記具を用いて手書き入力を行う際に用紙の下に敷く下敷きの上面側に設けられ、筆記具の筆記圧を検知するタッチパネル部と、このタッチパネル部の検知結果に基づいて手書き座標を検知する技術が開示されている。
【０００３】
また、特許文献２では、赤外線センサ等を用いて作業空間にあるユーザの手などの動きを検知し、ユーザが投影面に投影されている操作ボタン等にタッチしたかを検知するジェスチャーセンサに関する技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開2006−172230号公報
【特許文献２】特開2006−76175号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
プロジェクタや大型液晶ディスプレイなどの大画面を用いて操作表示を行い、それをタッチパネルで操作するシステムが提案されている。ここで、手書き入力を認識する精度を変えずに領域を特許文献１に記載されている手帳サイズから、机上のような広範囲に広げようとすると、タッチパネルや座標検知センサを用いた方法では座標を検出するためのセンサの数が増大しコストアップの要因となる。
【０００６】
一方、コストアップしないために手書き入力を認識する精度を下げて座標検出センサの数を手帳サイズの領域を検出する場合と同程度にすると、座標の検出精度が低くなり検出した座標と実際に筆記具により指示した位置の間に誤差が発生する。
【０００７】
また、ジェスチャーセンサにより手の動作を検知して操作する場合、例えばユーザが手を開いた状態で操作を行うとジェスチャーセンサは同時に５本の指を検知する。この時、ユーザがジェスチャーセンサで検知した複数の指の中のどの指で操作を行っているか判断するためには、ジェスチャーセンサが押下する指の動作を検出する必要がある。
【０００８】
ただし、ジェスチャーセンサが押下する指の動作を検出するためには、指の移動距離が少ないため動作を検出することは困難であった。また、ユーザが所望する指で押下する動作を行うと、ジェスチャーセンサで検出している他の指も動いてしまうため、ジェスチャーセンサの出力からユーザが操作に使用している指を判別することは困難であった。
【０００９】
一方、ユーザが手を閉じた状態で操作を行うと、すなわち、指先の位置を検出しようとしても、ジェスチャーセンサにより指の外形を検出できない場合が生ずる。この場合、ジェスチャーセンサは、ユーザの指の動きを検出できないため、ユーザの指の動きに基づく操作を受け付けることができない等の課題があった。
【００１０】
本発明は、上記の課題を解決するためになされたもので、本発明の目的は、ユーザによる手の指先による軌跡を入力として受け付ける指先の数が複数認識される場合でも、適正な指示を受け付ける指先とその座標値を特定できる仕組みを提供することである。
【課題を解決するための手段】
【００１１】
上記目的を達成する本発明の手入力装置は以下に示す構成を備える。
手入力装置であって、ユーザが指示する操作面の座標値を受け付ける受付手段と、前記操作面の空間に位置するユーザの手の外形を撮影して取得する距離画像データに基づく第１の座標値を前記操作面に対応づけた第２の座標値に変換する変換手段と、前記距離画像データから、前記ユーザが指示している指先の数が複数である場合、前記ユーザが最初に指示した前記操作面のタッチ座標値に近接する第１の座標値に対応する指先を操作指示指として特定する特定手段と、を備え、前記変換手段は、前記特定手段が特定した操作指示指に対応する第１の座標値を前記第２の座標値に変換することを特徴とする。
【発明の効果】
【００１２】
本発明によれば、ユーザによる手の指先による軌跡を入力として受け付ける指先の数が複数認識される場合でも、適正な指示を受け付ける指先とその座標値を特定できる。
【図面の簡単な説明】
【００１３】
【図１】手入力装置をスキャナシステムの構成を説明する図である。
【図２】カメラスキャナの外観の一例を示す図である。
【図３】コントローラ部のハードウェア構成を示す図である。
【図４】カメラスキャナの制御用プログラムの機能構成を示す図である。
【図５Ａ】手入力装置の制御方法を説明するフローチャートである。
【図５Ｂ】距離画像データの取得処理を説明する図である。
【図６Ａ】手入力装置の制御方法を説明するフローチャートである。
【図６Ｂ】手入力装置による指先認識処理を説明する模式図である。
【図７】手入力装置の制御方法を説明するフローチャートである。
【図８】手入力装置の制御方法を説明するフローチャートである。
【図９】手入力装置におけるジェスチャー認識処理例を示す模式図である。
【図１０】手入力装置におけるジェスチャー認識処理例を示す模式図である。
【図１１】手入力装置の制御方法を説明するフローチャートである。
【図１２】手入力装置におけるジェスチャー動作を説明する模式図である。
【発明を実施するための形態】
【００１４】
次に本発明を実施するための最良の形態について図面を参照して説明する。
＜システム構成の説明＞
〔第１実施形態〕
【００１５】
図１は、本実施形態を示す手入力装置を適用したスキャナシステムの構成を説明する図である。
【００１６】
図１に示すように、カメラスキャナ101は、イーサネット（登録商標）等のネットワーク104にてホストコンピュータ102及びプリンタ103に接続されている。なお、カメラスキャナ101は、画像処理装置の一例である。
【００１７】
図１のシステムでは、ホストコンピュータ102からの指示により、カメラスキャナ101から撮影する被写体の平面画像または立体画像を読み取るスキャン機能を実行する。また、本システムでは、カメラスキャナ101が出力するスキャンデータをプリンタ103により出力するプリント機能を実行する。また、ホストコンピュータ102を介さず、カメラスキャナ101への直接の指示により、スキャン機能、プリント機能の実行も可能である。
（カメラスキャナの構成）
図２は、図１に示したカメラスキャナ101の外観の一例を示す図である。
図２（ａ）に示すように、カメラスキャナ101は、コントローラ部201、カメラ部202、腕部203、短焦点プロジェクタ207、距離画像センサ部208を含む。カメラスキャナ101の本体であるコントローラ部201と、撮像を行うためのカメラ部202、短焦点プロジェクタ207および距離画像センサ部208は、腕部203により連結されている。腕部203は関節を用いて曲げ伸ばしが可能である。
図２（ａ）には、カメラスキャナ101が設置されている操作面204も示している。カメラ部202および距離画像センサ部208のレンズは操作面204方向に向けられており、破線で囲まれた読み取り領域205内の画像を読み取り可能である。図２の例では、文書206は読み取り領域205内に置かれているので、カメラスキャナ101に読み取り可能となっている。
カメラ部202は単一解像度で画像を撮像するものとしてもよいが、高解像度画像撮像と低解像度画像撮像が可能なものとすることが好ましい。
またカメラスキャナ101はタッチパネル330を有し、指又はペン等を用いて操作面204に接触したことを検知するとともに、タッチした座標を取得する。
タッチパネル330とコントローラ部201は、後述するシリアルＩ/Ｆ部を介して接続することによりの通信及びデータの授受を行う。
なお、図２に示されていないが、カメラスキャナ101はスピーカ340をさらに含むこともできる。
【００１８】
図２（ｂ）は、カメラスキャナ101における座標系を表している。
図２（ｂ）において、カメラスキャナ101では各ハードウェアデバイスに対して、カメラ座標系、距離画像座標系、プロジェクタ座標系という座標系が定義される。これらはカメラ部202及び距離画像センサ部208のＲＧＢカメラが撮像する画像平面、又はプロジェクタ207が投射（投影）する画像平面をＸＹ平面とし、画像平面に直交した方向をＺ方向として定義したものである。
【００１９】
更に、これらの独立した座標系の３次元データを統一的に扱えるようにするために、操作面204を含む平面をＸＹ平面とし、このＸＹ平面から上方に垂直な向きをＺ軸とする直交座標系を定義する。
【００２０】
座標系を変換する場合の例として、図２（ｃ）に直交座標系と、カメラ部202を中心としたカメラ座標系を用いて表現された空間と、カメラ部202が撮像する画像平面との関係を示す。直交座標系における３次元点Ｐ［Ｘ，Ｙ，Ｚ］は、数1によって、カメラ座標系における３次元点Ｐｃ［Ｘｃ，Ｙｃ，Ｚｃ］へ変換できる。
【数１】
2018116360.tif 000003
【００２１】
ここで、Ｒｃ及びｔｃは、直交座標系に対するカメラの姿勢（回転）と位置（並進）とによって求まる外部パラメータによって構成され、Ｒｃを３×３の回転行列、ｔｃを並進ベクトルと呼ぶ。逆に、カメラ座標系で定義された３次元点は数2によって、直交座標系へ変換することができる。
【数２】
2018116360.tif 000004
【００２２】
さらに、カメラ部202で撮影される２次元のカメラ画像平面は、カメラ部202によって３次元空間中の３次元情報が２次元情報に変換されたものである。即ち、カメラ座標系上での３次元点Ｐｃ［Ｘｃ，Ｙｃ，Ｚｃ］を、数３によってカメラ画像平面での２次元座標ｐｃ［ｘｐ，ｙｐ］に透視投影変換することによって変換することができる。
【数３】
2018116360.tif 000005
ここで、Ａは、カメラ部202の内部パラメータと呼ばれ、焦点距離と画像中心等とで表現される３×３の行列である。
【００２３】
以上のように、数１と数３とを用いることで、直交座標系で表された３次元点群を、カメラ座標系での３次元点群座標やカメラ画像平面に変換することができる。なお、各ハードウェアデバイスの内部パラメータ及び直交座標系に対する位置姿勢（外部パラメータ）は、公知のキャリブレーション手法により予めキャリブレーションされているものとする。
以後、特に断りがなく３次元点群と表記した場合は、直交座標系における３次元データ（立体データ）を表しているものとする。
【００２４】
（カメラスキャナのコントローラのハードウェア構成）
図３は、図１のカメラスキャナ101の本体であるコントローラ部201のハードウェア構成の一例を示す図である。
図３に示すように、コントローラ部201は、システムバス301に接続されたＣＰＵ302、ＲＡＭ303、ＲＯＭ304、ＨＤＤ305を備える。さらに、コントローラ部201は、システムバス301に接続されたネットワークＩ/Ｆ306、画像処理プロセッサ307、カメラＩ/Ｆ308、シリアルＩ/Ｆ310の各種Ｉ/Ｆを備える。さらに、コントローラ部201は、システムバス301に接続された、ディスプレイコントローラ309、オーディオコントローラ311及びＵＳＢコントローラ312を備える。
【００２５】
ＣＰＵ302は、コントローラ部201全体の動作を制御する中央演算装置である。ＲＡＭ303は、揮発性メモリである。ＲＯＭ304は、不揮発性メモリであり、ＣＰＵ302の起動用プログラムが格納されている。ＨＤＤ305は、ＲＡＭ303と比較して大容量なハードディスクドライブ（ＨＤＤ）である。ＨＤＤ305にはコントローラ部201の実行する、カメラスキャナ101の制御用プログラムが格納されている。ＣＰＵ302が、ＲＯＭ304やＨＤＤ305に格納されているプログラムを実行することにより、カメラスキャナ101の機能構成及び後述するフローチャートの処理（情報処理）が実現される。
【００２６】
ＣＰＵ302は、電源ＯＮ等の起動時、ＲＯＭ304に格納されている起動用プログラムを実行する。この起動用プログラムは、ＣＰＵ302がＨＤＤ305に格納されている制御用プログラムを読み出し、ＲＡＭ303上に展開するためのものである。ＣＰＵ302は、起動用プログラムを実行すると、続けてＲＡＭ303上に展開した制御用プログラムを実行し、制御を行う。また、ＣＰＵ302は、制御用プログラムによる動作に用いるデータもＲＡＭ303上に格納して読み書きを行う。ＨＤＤ305上には更に、制御用プログラムによる動作に必要な各種設定や、また、カメラ入力によって生成した画像データを格納することができ、ＣＰＵ302によって読み書きされる。ＣＰＵ302は、ネットワークＩ/Ｆ306を介してネットワーク104上の他の機器との通信を行う。
【００２７】
画像処理プロセッサ307は、ＲＡＭ303に格納された画像データを読み出して処理し、またＲＡＭ303へ書き戻す。なお、画像処理プロセッサ307が実行する画像処理は、回転、変倍、色変換等である。
【００２８】
カメラＩ/Ｆ308は、カメラ部202及び距離画像センサ部208と接続され、ＣＰＵ302からの指示に応じてカメラ部202から画像データを、距離画像センサ部208から距離画像データを取得してＲＡＭ303へ書き込む。また、カメラＩ/Ｆ308は、ＣＰＵ302からの制御コマンドをカメラ部202及び距離画像センサ部208へ送信し、カメラ部202及び距離画像センサ部208の設定を行う。
【００２９】
また、コントローラ部201は、ディスプレイコントローラ309、シリアルＩ/Ｆ310、オーディオコントローラ311及びＵＳＢコントローラ312のうち少なくとも１つを更に含むことができる。
【００３０】
ディスプレイコントローラ309は、ＣＰＵ302の指示に応じてディスプレイへの画像データの表示を制御する。ここでは、ディスプレイコントローラ309は、プロジェクタ207及びＬＣＤタッチパネル330に接続されている。
【００３１】
シリアル信号の入出力を行うシリアルＩ/Ｆ310は、ＬＣＤタッチパネル330に接続され、ＣＰＵ302はＬＣＤタッチパネル330が押下されたときに、シリアルＩ/Ｆ310を介して押下された座標を取得する。オーディオコントローラ311は、スピーカ340に接続され、ＣＰＵ302の指示に応じて音声データをアナログ音声信号に変換し、スピーカ340を通じて音声を出力する。
【００３２】
ＵＳＢコントローラ312は、ＣＰＵ302の指示に応じて外付けのＵＳＢデバイスの制御を行う。ここでは、ＵＳＢコントローラ312は、ＵＳＢメモリやＳＤカード等の外部メモリ350に接続され、外部メモリ350へのデータの読み書きを行う。
【００３３】
＜カメラスキャナの制御用プログラムの機能構成＞
（カメラスキャナの機能構成）
図４は、図３に示したＣＰＵ302が実行するカメラスキャナ101の制御用プログラムの機能構成401を示す図である。
図４において、カメラスキャナ101の制御用プログラムは前述のようにHDD305に格納され、ＣＰＵ302が起動時にＲＡＭ303上に展開して実行する。
メイン制御部402は制御の中心であり、機能構成401内の他の各モジュールを制御する。画像取得部416は画像入力処理を行うモジュールであり、カメラ画像取得部407、距離画像取得部408から構成される。カメラ画像取得部407はカメラI/F308を介してカメラ部202が出力する画像データを取得し、ＲＡＭ303へ格納する。距離画像取得部408はカメラI/F308を介して距離画像センサ部208が出力する距離画像データを取得し、ＲＡＭ303へ格納する。距離画像取得部408の処理の詳細は図５を用いて後述する。
【００３４】
認識処理部417はカメラ画像取得部407、距離画像取得部408が取得する画像データから操作平面204上の物体の動きを検知して認識するモジュールであり、ジェスチャー認識部409、物体検知部410から構成される。ジェスチャー認識部409は、画像取得部416から操作平面204上の画像を取得し続け、タッチなどのジェスチャーを検知するとメイン制御部402へ通知する。ジェスチャー認識部409の処理の詳細は図６を用いて後述する。
【００３５】
物体検知部410は、画像取得部416から操作平面204を撮像した画像を取得し、操作平面204上に物体が置かれるタイミング、物体が置かれて静止するタイミング、あるいは物体が取り除かれるタイミングなどを検知する処理を行う。
【００３６】
タッチパネルイベント検知部420はユーザが指等でタッチパネル330に接触した際、シリアルＩ/Ｆ310を介して指等が接触したタッチ座標を受信し、その座標情報をタッチパネルイベントとしてメイン制御部402に対して通知する。
【００３７】
画像処理部418は、カメラ部202および距離画像センサ部208から取得した画像を画像処理プロセッサ307で解析するために用いられ、各種画像処理モジュールで構成される。前述のジェスチャー認識部409や物体検知部410は画像処理部418の各種画像処理モジュールを利用して実行される。
【００３８】
ユーザインターフェイス部403は、メイン制御部402からの要求を受け、メッセージやボタン等のＧＵＩ部品を生成する。そして、表示部406へ生成したＧＵＩ部品の表示を要求する。表示部406はディスプレイコントローラ309を介して、プロジェクタ207へ要求されたＧＵＩ部品の表示を行う。プロジェクタ207は操作平面204に向けて設置されているため、操作平面204上にＧＵＩ部品を投射することが可能となっている。
【００３９】
また、ユーザインターフェイス部403は、ジェスチャー認識部409が認識したタッチ等のジェスチャー操作、あるいはタッチパネルイベント検知部420が検知したタッチ操作、そしてさらにそれらの座標を、メイン制御部402経由で受信する。
【００４０】
そして、ユーザインターフェイス部403は描画中の操作画面の内容と操作座標を対応させて操作内容（押下されたボタン等）を判定する。この操作内容をメイン制御部402へ通知することにより、操作者の操作を受け付ける。描画中の操作画面の内容と操作座標を対応させて操作内容（押下されたボタン等）を判定する。
【００４１】
また、ユーザインターフェイス部403はメイン制御部402からの要求を受け、表示部406上のメイン制御部402が指示した座標に線の描画を行う。メイン制御部402はジェスチャー認識部409が認識したタッチ等のジェスチャー操作、及びタッチパネルイベント検知部420が検知したタッチ操作、そしてさらにそれらの座標をユーザインターフェイス部403に送信する。ユーザインターフェイス部403は受信した座標位置にプロジェクタ207を用いて操作表面204上に線を表現することで、ユーザが操作表面204上に指で軌跡として描いた図形や文字を、操作表面204上に表現する。
【００４２】
ネットワーク通信部404は、ネットワークＩ/Ｆ306を介して、ネットワーク104上の他の機器とＴＣＰ/ＩＰによる通信を行う。データ管理部405は、制御用プログラム401の実行において生成した作業データなど様々なデータをＨＤＤ305上の所定の領域へ保存し、管理する。
【００４３】
＜距離画像センサおよび距離画像取得部の説明＞
図５は、本実施形態を示す手入力装置の制御方法を説明するフローチャートである。本例は、距離画像センサ208による距離画像データ生成処理例である。なお、各ステップは、ＣＰＵ302が記憶された制御プログラムを実行することで実現される。
【００４４】
また、本実施形態において、距離画像センサ208は赤外線によるパターン投射方式の距離画像センサである。赤外線パターン投射部361は対象物に、人の目には不可視である赤外線によって３次元測定パターンを投射する。赤外線カメラ362は対象物に投射した３次元測定パターンを読み取るカメラである。ＲＧＢカメラ363は人の目に見える可視光をＲＧＢ信号で撮影するカメラである。
距離画像取得部408の処理を図５Ａのフローチャートを用いて説明する。また、図５Ｂの（a）〜（c）はパターン投射方式による距離画像の計測原理を説明する図である。
【００４５】
距離画像取得部408が処理を開始すると、S501では、図５（a）に示すように赤外線パターン投射部361を用いて赤外線による３次元形状測定パターン522を対象物521に投射する。
【００４６】
S502では、距離画像取得部408は、ＲＧＢカメラ363を用いて対象物を撮影したＲＧＢ画像523および、赤外線カメラ362を用いてS501で投射した３次元測定パターン522を撮影した赤外線カメラ画像データ524を取得する。
【００４７】
なお、赤外線カメラ362とＲＧＢカメラ363とでは設置位置が異なるため、図５（ｂ）に示すようにそれぞれで撮影される２つのＲＧＢカメラ画像523および赤外線カメラ画像524の撮影領域が異なる。
【００４８】
そこでS503で、距離画像取得部408は、赤外線カメラ362の座標系からＲＧＢカメラ363の座標系への座標系変換を用いて赤外線カメラ画像データ524をＲＧＢカメラ画像523の座標系に合わせる処理を行う。
なお、赤外線カメラ362とＲＧＢカメラ363の相対位置や、それぞれの内部パラメータは事前のキャリブレーション処理により既知であるとする。
S504では、図５（ｃ）に示すように、３次元測定パターン522とS503で座標変換を行った赤外線カメラ画像データ524間での対応点を抽出する。
【００４９】
例えば、赤外線カメラ画像データ524上の１点を３次元形状測定パターン522上から探索して、同一の点が検出された場合に対応付けを行う。あるいは、赤外線カメラ画像データ524の画素の周辺のパターンを３次元形状測定パターン522上から探索し、一番類似度が高い部分と対応付けてもよい。
【００５０】
S505では、距離画像取得部408は、赤外線パターン投射部361と赤外線カメラ362を結ぶ直線を基線525として三角測量の原理を用いて計算を行うことにより、赤外線カメラ362からの距離を算出する。
【００５１】
なお、S504で対応付けが出来た画素については、赤外線カメラ362からの距離を算出して画素値として保存し、対応付けが出来なかった画素については、距離の計測が出来なかった部分として無効値を保存する。これをS503で座標変換を行った赤外線カメラ画像524の全画素に対して行うことで、各画素に距離値が入った距離画像を生成する。
【００５２】
S506では、距離画像取得部408は、距離画像の各画素にＲＧＢカメラ画像525のＲＧＢ値を保存することにより、１画素につきR、G、B、距離の４つの値を持つ距離画像データを生成する。ここで取得した距離画像データは距離画像センサ208のＲＧＢカメラ363で定義された距離画像センサ座標系が基準となっている。そこでS507では、距離画像取得部408は、図２（b）を用いて上述したように、距離画像センサ座標系として得られた距離データを直交座標系における３次元点群に変換する。以後、特に指定がなく３次元点群と表記した場合は、直交座標系における３次元点群を示すものとする。
【００５３】
なお、本実施形態では上述したように、距離画像センサ208として赤外線パターン投射方式を採用しているが、他の方式の距離画像センサを用いることも可能である。例えば、2つのＲＧＢカメラでステレオ立体視を行うステレオ方式や、レーザー光の飛行時間を検出することで距離を測定するＴＯＦ（Time of Flight）方式など、他の計測手段を用いても構わない。
＜ジェスチャー認識部の説明＞
【００５４】
図６Ａは、本実施形態を示す手入力装置の制御方法を説明するフローチャートである。本例は、ジェスチャー認識部409のデータ処理例である。以下、図６Ｂに示す模式図を参照して、ジェスチャー認識を詳述する。なお、各ステップは、ＣＰＵ302が記憶された制御プログラムを実行することで実現される。
【００５５】
図６Ａにおいて、S601でジェスチャー認識部409は、初期化処理を行う。初期化処理では、ジェスチャー認識部409は距離画像取得部408から距離画像データを１フレーム分取得する。ここで、ジェスチャー認識部409は、初期化開始時は操作平面204上に対象物が置かれていない状態であるため、初期状態として操作平面204の平面の認識を行う。
【００５６】
つまり、ジェスチャー認識部409は取得した距離画像データから最も広い平面を抽出し、その位置と法線ベクトル（以降、操作平面204の平面パラメータと呼ぶ）を算出し、ＲＡＭ303に保存する。
【００５７】
続いて、S602では、ジェスチャー認識部409はS621〜622に示す、操作平面204上に存在する物体の３次元点群を取得する。その際、S621で、ジェスチャー認識部409は距離画像取得部408から距離画像データと３次元点群を１フレーム分取得する。S622で、ジェスチャー認識部409は操作平面204の平面パラメータを用いて、取得した３次元点群から操作平面204を含む平面にある点群を除去する。
【００５８】
S603では、ジェスチャー認識部409はS631〜S634に示す、取得した３次元点群から操作者の手の形状および指先を検出する処理を行う。ここで、図６Ｂ（ａ）〜（ｃ）に示す、指先検出処理の方法を模式図を用いて説明する。
【００５９】
S631では、ジェスチャー認識部409はS602で取得した３次元点群から、操作平面204を含む平面から所定の高さ以上にある、肌色の３次元点群を抽出することで、手の３次元点群を得る。
【００６０】
図６Ｂ（ａ）の３次元点群661は抽出した手の３次元点群に対応する。S632では、ジェスチャー認識部409は抽出した手の３次元点群を、操作平面204の平面に射影した２次元画像を生成して、その手の外形を検出する。
【００６１】
図６Ｂ（ａ）の３次元点群662は、３次元点群661を操作平面204の平面に投影した３次元点に対応する。投影は、点群の各座標を、操作平面204の平面パラメータを用いて投影すればよい。
【００６２】
また、図６（ｂ）に示すように、投影した３次元点群から、ＸＹ座標の値だけを取り出せし、Ｚ軸方向から見た２次元画像データを、操作平面204上を占める手領域663として扱うことができる。
この時、手の３次元点群の各点が、操作平面204の平面に投影した手領域663の各座標のどれに対応するかを、ＲＡＭ303に記憶しておくものとする。
S633では、ジェスチャー認識部409は検出した手の外形上の各点について、その点での外形の曲率を算出し、算出した曲率が所定値より小さい点を指先として検出する。
【００６３】
図６Ｂ（ｃ）は、外形の曲率から指先を検出する方法を模式的に表したものである。点群664は、操作平面204の平面に投影された２次元画像603の外形を表す点の一部を表している。ここで、点群664のような、外形を表す点のうち、隣り合う５個の点を含むように円を描くことを考える。
【００６４】
図６Ｂ（ｃ）の円665、667が、その例である。これらの円665、667を、全ての外形の点に対して順に描き、その直径（例えば直径666、668）が所定の値より小さい（曲率が小さい）ことを以て、指先とする。
【００６５】
図６Ｂ（ｃ）に示す例では隣り合う５個の点としたが、その数は限定されるものではない。また、ここでは曲率を用いたが、外形に対して楕円フィッティングを行うことで、指先を検出してもよい。
【００６６】
S634では、ジェスチャー認識部409は検出した指先の個数および各指先の座標を算出する。この時、ジェスチャー認識部409は前述したように、操作平面204に投影した２次元画像の各点と、手の３次元点群の各点の対応関係をＲＡＭ303に記憶しているため、各指先の３次元座標を得ることができる。
今回は、３次元点群から２次元画像に投影した画像から指先を検出する方法を説明したが、指先検出の対象とする画像は、これに限定されるものではない。
例えば、距離画像の背景差分や、ＲＧＢ画像の肌色領域から手の領域を抽出し、上に述べたのと同様の方法（外形の曲率計算等）で、手領域のうちの指先を検出してもよい。
【００６７】
この場合、検出した指先の座標はＲＧＢ画像や距離画像といった、２次元画像上の座標であるため、その座標における距離画像の距離情報を用いて、直交座標系の３次元座標に変換する必要がある。この時、指先点となる外形上の点ではなく、指先を検出するときに用いた、曲率円の中心を指先点としてもよい。
S606では、ジェスチャー認識部409はS661〜S662に示す、腕検出処理を実行する。
【００６８】
図６Ｂ（ｄ）は腕検出処理について模式的に説明した図である。S661では、ジェスチャー認識部409はS631で抽出した手領域の３次元点群661と接続する３次元点群を抽出し、腕の３次元点群669を検出する。
【００６９】
S662では、ジェスチャー認識部409は腕の３次元点群669を操作平面204の平面に投影し、腕領域670を算出する。そして、操作面204の端部と腕領域670が交差する点の中心を、腕の操作面204への侵入点671とし、侵入点671の座標を算出する。
【００７０】
S607で、ジェスチャー認識部409はS634で算出した指先座標およびS662で算出した腕侵入点座標をメイン制御部402へ通知し、S602へ戻ってジェスチャー認識処理を繰り返す。
なお、ここでは一本指でのジェスチャー認識について説明を行ったが、複数の指あるいは複数の手、あるいは腕や体全体でのジェスチャー認識に応用することも可能である。
【００７１】
＜タッチパネルイベント検知部の説明＞
図７は、本実施形態を示す手入力装置の制御方法を説明するフローチャートである。本例は、図４に示したタッチパネルイベント検知部420のタッチパネルイベント検知処理例である。なお、各ステップは、ＣＰＵ302が記憶された制御プログラムを実行することで実現される。
タッチパネルイベント検知部420は、ユーザ指等でタッチパネル330に接触した際、シリアルＩ/Ｆ310から指等が接触したタッチ座標を受信する。
【００７２】
タッチパネルイベント検知部420が処理を開始すると、S701で、タッチパネルイベント検知部420は、タッチ座標を受信したかどうか判断する。ここで、タッチパネルイベント検知部420がタッチ座標を受信したと判断した場合、処理をS702へ進める。一方、タッチパネルイベント検知部420がタッチ座標を受信していないと判断した場合、処理をS701へ戻して、タッチ座標を受信したかどうかを判断する。
【００７３】
S702で、タッチパネルイベント検知部420は、受信した座標情報をタッチパネルイベントとしてメイン制御部402に対して通知する。S702が終了すると、タッチパネルイベント検知部420は、処理をS701に戻す。
タッチパネルイベント検知部420は、上記処理を繰り返して、タッチパネルイベント検知部420は、タッチパネルイベントをメイン制御部402に対して通知し続ける。
＜メイン制御部の説明＞
【００７４】
図８は、本実施形態を示す手入力装置の制御方法を説明するフローチャートである。本例は、ユーザが指を用いて操作面204上に描いた軌跡をプロジェクタ207により操作表面204上に線として表現する際に、メイン制御部402が実行するタッチイベントの制御処理例である。なお、各ステップは、ＣＰＵ302が記憶された制御プログラムを実行することで実現される。以下、距離画像データから、ユーザが指示している指先の数が複数である場合、ユーザが最初に指示した前記操作面のタッチ座標値に近接する第１の指示座標値に対応する指先を操作指示指として特定する処理を説明する
【００７５】
図８のS801で、メイン制御部402が処理を開始すると、ジェスチャー認識部409に対して処理開始指示を行う。この指示を受け、ジェスチャー認識部409は上述した図６Ａに示した処理を実行する。
【００７６】
S802では、メイン制御部402は、タッチパネルイベント検知部420に対して処理開始指示を行う。この指示を受け、タッチパネルイベント検知部420は上述した図７の処理を実行する。
【００７７】
S803で、メイン制御部402は、例えばＲＡＭ303上に確保する検出座標バッファを初期化する。詳細は後述するが、検出座標バッファとは直前のタッチイベントにおいて指先を検出した座標を格納するためのバッファである。
【００７８】
本実施形態では、図２（b）で説明したように操作面204上を水平方向の座標Xと、それに直行する垂直方向の座標Yで表現し、検出した座標を（X，Y）で表す。また図２（b）における操作面204の左下を原点と設定し、操作面204上の座標を水平方向の座標X、及び垂直方向の座標Yとも正の値で表現する。
【００７９】
検出座標バッファは、後述するタッチイベント通知があった際に検出した指の座標を格納するためのバッファであり、タッチイベント通知があった場合は最後に指先が検出された座標を格納する。そのため、メイン制御部402は、S803における検出座標バッファの初期化動作として、例えば初期値の座標として操作面204上では取らない値である（−1、−1）を設定する。
【００８０】
S804では、メイン制御部402は、タッチパネルイベント検知部420より、タッチイベントの通知があったか否かを判断する。メイン制御部402は、通知が無いと判断した場合、処理をS803戻し、タッチイベントの通知を受信するまで、処理を繰り返す。
S804で、メイン制御部402は、タッチパネルイベント検知部420からのタッチイベントの通知があったと判断した場合、処理をS805へ進める。
【００８１】
S805で、メイン制御部402は、タッチパネルイベント部420からタッチが行われた座標値（本例では（Xt，Yt）と表す）を取得する。これにより、メイン制御部402はユーザが指示した座標値を受付ける。S806で、メイン制御部402は、ジェスチャー認識部409が前述した処理で検知した指の本数を取得する。
【００８２】
S807で、メイン制御部402は、ジェスチャー認識部409により検出した指先の座標値を取得する。具体的には、メイン制御部402は、S806においてジェスチャー認識部409が検知した指の本数分の座標値を取得する。
【００８３】
S808では、メイン制御部402は、取得した指先の座標値の数から検知した指の本数が１本であるかどうかを判断する。メイン制御部402は、S806でジェスチャー検出部409が検知した指の本数が１本であると判断した場合、処理をS809へ進める。
【００８４】
S809で、メイン制御部402は、S807で検出した座標値をユーザが指定した座標値と判断する。そして、メイン制御部402は、指先の座標値（ここでは座標値を（X，Y）と記す）を取得する。
【００８５】
S810で、メイン制御部402は、検出座標バッファの座標値を参照し、座標値がS803で設定した初期値であるかどうかを判定する。具体的には、検出座標バッファに格納された座標値がS803で設定した初期値である（−1、−1）と判断した場合、S804において通知されたタッチイベントは、タッチされていない状態からタッチが行われた状態に変化したことを表す。何故ならば、S803における検出座標バッファの初期化は、S804においてタッチパネルイベント検知部420からタッチイベントの通知がない、すなわちタッチが行われていない状態の場合に行われる。
【００８６】
従って、S809において、検出座標バッファに格納されている値が初期値である場合、S804においてタッチイベントの通知がない状態からタッチイベントが通知された状態に移行した直後であることを表す。
【００８７】
そのため、メイン制御部402は、線の描画を開始するためユーザが操作面204上にタッチを行った起点であると判断する。ここで、メイン制御部402は、検出座標バッファに格納されている値が初期値であると判断した場合、処理をS812に進める。S812で、メイン制御部402は、S809で取得した指先の座標値（X，Y）を検出座標バッファに格納して、処理をS804に戻す。そして、メイン制御部402は、S804で、再びタッチパネルイベント検知部420よりタッチイベントの通知があったか否かを判断する。
【００８８】
一方、S810で、メイン制御部402は、検出座標バッファに格納されている座標が初期値でないと判断した場合、S811に処理を進める。メイン制御部402は、検出座標バッファに格納されている値が初期値でない場合、S804で連続してタッチイベントの通知が行われている、つまりユーザが操作面204上に線を描画している状態であると判断する。
【００８９】
S811で、メイン制御部402は検出座標バッファに格納されている座標値からS809において取得した座標値（X，Y）まで操作面204上に線を描写するようにユーザインターフェイス部403に通知する。
【００９０】
なお、S811において、検出座標バッファに格納されている座標値は、直前にタッチイベントが通知されたときの指先の位置を示している。そのため、検出座標バッファに格納されている座標とS809で取得した座標が異なる場合、S811では、前回のタッチイベントが通知された際の指先の位置からS809で取得した座標値まで操作面204上に線が描写される。
【００９１】
S811において線が描画された後、メイン制御部402は処理をS812へ進め、S809において取得した指先の座標を検出座標バッファに格納する。これにより検出座標バッファにはS811で描画した線の端部の座標が格納される。
そして、再びS811において操作面204上に線を描写する際には、検出座標バッファに格納されている座標値、すなわち前回描写した線の端部を起点として線が描写される。
【００９２】
以上動作をS804によりタッチイベントが通知されなくなるまで繰り返すことにより、S804によりタッチイベントが通知されている間に指先が操作面204上を移動した軌跡を線で描写することができる。
【００９３】
一方、S808において、メイン制御部402は検知した指の本数が複数であると判断した場合、検知した複数の指の中から操作面204上に線を描写している指を選択する必要があるので、処理をS813へ進める。
【００９４】
S813では、メイン制御部402はS810において行う動作と同様に検出座標バッファの座標値を参照し、初期値かどうかを判定する。S813で、メイン制御部402は、検出座標バッファの座標値が初期値であると判断した場合、処理をS814に進める。
【００９５】
S814で、メイン制御部402はS807において取得した複数の指先の座標値と、S805で取得したタッチ座標値（Xt，Yt）の比較を行う。そして、メイン制御部402はS807において取得した複数の指先の座標値の中から、タッチ座標値（Xt，Yt）に最も近い座標値の指を操作面204上に線を描写している指として選択し、その座標（X，Y）を取得する。
【００９６】
なお、S814で、通知されたタッチイベントは、S810の動作で説明したのと同様に、タッチされていない状態からタッチが行われた状態に変化したことを表す。つまり、検出座標バッファの座標値が初期値であると判定された場合、タッチされていない状態からタッチが行われた状態に変化したことを表している。
従って、メイン制御部402はS814で取得した座標値は線の描画を開始するためユーザが操作面204上にタッチを行った起点であると判断する。
【００９７】
この場合、メイン制御部402はS814で取得した指先の座標値（X，Y）を描写する線の起点とするため、線の描画は行わずに、処理をS812に進めて、S814で取得した指先の座標値（X，Y）を検出座標バッファに格納する。
そして、メイン制御部402は処理をS804に戻し、再びタッチパネルイベント検知部420よりタッチイベントの通知があったか否かを判断する。
【００９８】
一方、S813で、メイン制御部402は検出座標バッファに格納されている座標が初期値でないと判断した場合、連続してタッチイベントの通知が行われている、つまりユーザが操作面204上に線を描画している状態であると判断する。ここで、ユーザが操作面204上に指を移動させる速度に対してメイン制御部402の処理が十分早い場合、タッチイベントを検出する間の指の移動量（座標変化）は非常に少なくなる。
【００９９】
そのため、本実施形態では、S815において、メイン制御部402はS807において取得した複数の指先の座標値と直前のタッチイベントが発生した時の座標値である検出座標バッファに格納されている座標値を比較する。そして、メイン制御部402はS807において取得した複数の指先の座標値の中から、検出座標バッファに格納されている座標値に最も近い座標値の指を操作面204上に線を描写している指と判断し、その座標値（X，Y）を取得する。
【０１００】
図９、図１０は、本実施形態を示す手入力装置におけるジェスチャー認識処理例を示す模式図である。本例は、ユーザが操作面204上に接触した状態で指を移動させることにより、操作面204上に指の軌跡を描写する動作を示している。
図９は、図６で説明したジェスチャー認識部409が認識するユーザの手901の軌跡を座標値902〜906で示し、本例では、指が１つだけ検出される形状を示している。
図９において、ユーザが操作面204上に指先でタッチを開始する座標値のうち、座標値902がユーザが指先をタッチすることにより軌跡を描画する起点に対応する。
【０１０１】
図８に示した処理において、メイン制御部402がS803及びS804を繰り返してタッチイベントの通知を待っている状態で、ユーザが図９の操作面204上の座標値902を指でタッチする。すると、メイン制御部402は、図８に示したS804においてタッチイベントが通知される。
【０１０２】
メイン制御部402は、タッチイベントが通知されると、S805においてタッチパネルイベント検知部420からタッチパネル上のタッチ位置（Xt，Yt）を取得する。そして、S806で、メイン制御部402は、ジェスチャー認識部409から検知した指の本数（図９の場合は1本）、S807において検出した指先の座標値（図９では座標値902）を取得する。
【０１０３】
その後、メイン制御部402は、S810で検出座標バッファに格納されている座標値が初期値であるか判別する。メイン制御部402は、ユーザの指先が座標値902をタッチする前は、S803及びS804を繰り返しており、S803において検出座標バッファに初期値を設定している。
【０１０４】
従って、ユーザの指先が座標値902をタッチした直後は、検出座標バッファには初期値が格納されており、メイン制御部402は、S812で現在の座標値（S809において取得した座標値902）を検出座標バッファに格納する。
以上の動作により、座標値902が操作面204上に線を描写するための起点として設定される。
【０１０５】
図９において、座標値903、904、905はユーザの手901が操作面204上で指を接触させた状態で移動した際にジェスチャー認識部409により検出された座標値を表す。以下の説明では、メイン制御部402は、座標値903、904、905の順番で検出されたとして処理を説明する。
【０１０６】
メイン制御部402は、S804で、タッチイベントの通知があり、S807において904の座標を取得した場合、図９においては検知した指の数は１本であると判断して、処理をS808に進める。そして、メイン制御部402は、S808からS809に処理を進めて、座標値904を取得する。
【０１０７】
その後、メイン制御部402は、S810で検出座標バッファに格納されている座標が初期値であるか判別する。ここで、ユーザの指先が座標値904にある場合、検出座標バッファには直前に検出された指の位置である座標値903が格納されている。そのため、メイン制御部402は、S810で、検出座標バッファの座標は初期値ではないと判断して、処理をS811に進める。S811で、メイン制御部402は、検出座標バッファに格納されている座標値（ここでは903の座標）からS809で取得した座標値（ここでは座標値904）まで線を描画する。
その後、S812で、メイン制御部402は、検出座標バッファに現在位置している座標値904を格納して、処理をS804へ戻す。
次に、S804で、メイン制御部402は、タッチイベントの通知があると判断した場合、検出座標バッファには座標値904が格納され、指の位置の座標値として座標値905を検出すれる。
この時、メイン制御部402は、上記説明した場合と同等の処理を行い、S811において座標値904から座標値905まで線を描画する。
ユーザが操作面204上に指を接触させた状態では上記説明した動作を繰り返し、それによって操作面204上で指を接触させて移動した軌跡を描写する。
【０１０８】
上記説明した動作を繰り返し、ユーザが指先の位置を図９に示す座標値906まで移動した状態では、メイン制御部402は、S811において座標値906まで線を描写する。S812において、メイン制御部402は、検出座標バッファに座標値906を格納して、処理をS804に戻す。そして、S804で、タッチイベントの通知があるか否かを判断する。
【０１０９】
ここで、ユーザが操作面204上に指を接触させるのを止めると、S804においてタッチイベントの通知がなくなる。そのため、メイン制御部402は、S803における検出座標バッファの初期化及びS804におけるタッチイベントの通知があるか否かの判断繰り返し、タッチイベントの通知を受信するまで待つ。
以上説明した動作により、906は軌跡を描画する終点となり、図９の座標値902〜906まで、指が移動した軌跡が線907として描画される。
【０１１０】
図１０は、図６で説明したジェスチャー認識部409が認識するユーザの手901の軌跡を座標値1004、1005、1006、1007及び1008で示し、本例では、指が５本検出される形状を示している。
【０１１１】
図８の処理に従い、メイン制御部402がS803及びS804を繰り返してタッチイベントの通知を待っている状態で、ユーザが図１０の操作面204上の位置を指でタッチすると、S804においてタッチイベントが通知される。
【０１１２】
タッチイベントが通知されると、メイン制御部402は、S805においてタッチパネルイベント検知部420からタッチパネル上のタッチ位置を取得する。そして、S806で、メイン制御部402は、ジェスチャー認識部409から検知した指の本数（図１０では５本）、S807において検出したそれぞれの指先の座標を取得する。
図１０において、タッチ座標値1003はユーザが操作面204上を指でタッチした時に、S805においてタッチパネルイベント部420から取得した座標値を表す。
【０１１３】
その後、S808で、メイン制御部402は、検出したユーザの指の本数を判定する。図１０では指1004、1005、1006、1007及び1008の５本の指を検出するため、S813で、メイン制御部402は、検出座標バッファに格納されている座標が初期値であるか判別する。
【０１１４】
ユーザが操作面204上をタッチする前は、S803において検出座標バッファに初期値を設定しているため、ユーザの指先が座標値1002をタッチした直後は検出座標バッファには初期値が格納されている。そのため、ユーザが操作面204上をタッチした直後のタッチイベントでは、メイン制御部402は、S813で検出座標バッファに初期値が格納されている判断するため、処理をS814に進める。そして、S814で、メイン制御部402は、ユーザが操作面204上をタッチした座標値の検出を行う。
【０１１５】
S814で、メイン制御部402は、S805においてタッチパネルイベント部420から取得したタッチ座標値（Xt，Yt）と、S807においてジェスチャー認識部409から取得した複数の指先の座標値を比較する。そして、複数の指先の座標値の中で、タッチ座標（Xt，Yt）に最も近い座標値をユーザがタッチした位置と認識し、線を描画する起点とする。
【０１１６】
図１０では、タッチ座標値1003に最も近い指1005（人差し指）が選択され、指1005の座標値である座標値1002が新たな座標値として認識される。なお、図１０ではユーザがタッチした座標値1002とタッチパネルイベント検知部420から取得したタッチ座標値1003を明示的に離して表示するが、実際にはほぼ同じ位置座標となる。
【０１１７】
S814により、メイン制御部402は、複数の指からタッチした指及びその座標値を取得すると、S812で、メイン制御部402は、S814で取得した座標値を検出座標バッファに格納する。以上の動作により、座標値1002が操作面204上に線を描写するための起点として設定される。
【０１１８】
その後、図１０においてユーザが操作面204上に指を接触させた状態で移動すると、S815において、複数の指先の座標値の中から検出座標バッファに格納された座標に最も近い座標をユーザがタッチしている位置と認識する。
【０１１９】
そして、S811において、メイン制御部402は、検出座標バッファに格納された座標値からS815で取得した座標値まで線を描写する。メイン制御部402は、線を描写した後、S812において検出座標バッファにS815で取得した座標値を格納する。
上記説明した動作を、ユーザが操作面204から指先を離すまで繰り返すことにより、指が移動した軌跡を線として描画する。
【０１２０】
ユーザが操作面204上に指を接触させたまま図１０の座標値1009に示す位置まで指を移動させると、メイン制御部402、S811で、座標値1009まで線を描写する。そして、S812で、メイン制御部402は、検出座標バッファに座標値1009を格納して、S804においてタッチイベントの通知があるか否かを判断する。
【０１２１】
ここで、ユーザが操作面204上に指を接触させるのを止めると、S804においてタッチイベントの通知がなくなる。そのため、メイン制御部402は、S803における検出座標バッファの初期化及びS804におけるタッチイベントの通知があるか否かの確認繰り返し、タッチイベントの通知を受信するまで待つ。
以上説明した動作により、座標値1009は軌跡を描画する終点となり、図１０の座標値1002〜1009まで、指が移動した軌跡が線1010として描画される。
【０１２２】
〔第２実施形態〕
第１実施形態では、ジェスチャー認識部409によって、ユーザが操作する指先の動きを検知する場合について説明を行った。
しかし、ジェスチャー認識部409によって指先を検知できない状態でユーザが操作面204上で線を描写する場合も考えられる。この場合、図８に示したメイン制御部402は指先の軌跡を線で描写することができない。
【０１２３】
そこで、第２実施形態では、ジェスチャー認識部409において、S632により手の外形を検出した際に検出した手の外形から特徴点を検出する。そして、タッチパネルイベント部402において、タッチが検出された時の特徴点の座標とタッチパネルイベント部402から取得した座標値の差を求める。以後、線の描写中はジェスチャー認識部409において検出した特徴点の座標値から差分値に対応する座標値に移動した位置に対して線の描写を行う。これによりユーザの所望の位置に線の描写を行う。
【０１２４】
図１１は、本実施形態を示す手入力装置の制御方法を説明するフローチャートである。本例は、メイン制御部402が実行するタッチイベントの制御処理例である。なお、各ステップは、ＣＰＵ302が記憶された制御プログラムを実行することで実現される。なお、図１１に示すステップにおいて、図８に示すステップと同じ処理には、同じステップ番号を付して、異なるステップを中心に説明する。
【０１２５】
図１１において、S804で、タッチパネルイベント部402からタッチイベントの通知があると、メイン制御部402は、S805で、タッチされた座標値（Xt，Yt）を取得する。その後、メイン制御部402は、S1101で、ジェスチャー認識部409からユーザの手の外形から抽出した特徴点の座標（X，Y）を取得する。
【０１２６】
S810で、メイン制御部402は、検出座標バッファの座標値を参照して初期値であるかどうかを判定する。メイン制御部402は、検出座標バッファに格納された座標値が初期値であると判断した場合、処理をS1102へ進める。なお、メイン制御部402は、検出座標バッファに格納された座標値が初期値であると判断する場合とは、S804において通知されたタッチイベントが、タッチされていない状態からタッチが行われた状態に変化した場合である。
【０１２７】
このとき、S1102では、メイン制御部402はS805において取得したタッチ座標値（Xt，Yt）から、S1101で、ジェスチャー認識部409から取得した特徴点の座標（X，Y）を減した値（dX，dY）を以下の式に従い算出する。
（dX，dY）＝（Xt，Yt）−（X，Y）
【０１２８】
そし、S1103で、メイン制御部402はS1101で取得した特徴点の座標値（X，Y）に、S1102で算出した値（dX，dY）を加算した座標値を検出座標バッファに格納して、処理をS804へ戻す。なお、S810で、メイン制御部402は検出座標バッファの座標値が初期値であると判断した場合、S1103で検出座標バッファに格納される値は、S805で取得したタッチ座標（Xt，Yt）となる。
【０１２９】
そして、メイン制御部402は、処理をS804へ戻し、再びタッチパネルイベント検知部420よりタッチイベントの通知があったか否かを判断する。さらに、S810で、メイン制御部402は検出座標バッファに格納されている値が初期値でないと判断した場合は、S1104で、メイン制御部402は線の描画を行う。
一方、S810で、メイン制御部402は検出座標バッファの座標値が初期値でないと判断した場合、処理をS1104へ進める。
【０１３０】
S1104で、メイン制御部402はS810で検出座標バッファに格納されている座標値からS1101で取得した座標値（X，Y）にS1102で算出した差分値（dX，dY）を加算する。さらに、メイン制御部402は算出した座標値まで線を描写するようにユーザインターフェイス部403に通知する。
なお、S1104において、検出座標バッファに格納されている座標は、直前にタッチイベントが通知されたときの特徴点の座標から差分（dX，dY）を加算した座標を示している。
【０１３１】
そのため、メイン制御部402はS1104では前回のタッチイベントが通知された際の特徴点の位置からS1101で取得した特徴点の座標に対して、それぞれ（dX，dY）だけ加算した位置に対して操作面204上に線を描写する。
S1104で、線が描画された後、S1103でメイン制御部402は、S1101で取得した特徴点の座標値に差分（dX，dY）を加算した座標を検出座標バッファに格納する。
【０１３２】
これにより、検出座標バッファにはS1104で描画した線の端部の座標が格納される。そして、再びS1104において、メイン制御部402は操作面204上に線を描写する際、検出座標バッファに格納されている座標値、すなわち前回描写した線の端部を起点として線を描写するように制御する。
【０１３３】
図１２は、本実施形態を示す手入力装置におけるジェスチャー動作を説明する模式図である。本例は、ジェスチャー認識部409において指先が認識できない状態において、操作面204上に指の軌跡を描写する動作状態を示している。
【０１３４】
図１２において、ユーザの手1201は、操作面204では、ジェスチャー認識部409は指先が検出できない手の形状をしている。座標値1202はユーザが操作面204上に指先でタッチを開始する座標値を表しており、ユーザが指先をタッチすることにより軌跡を描画する起点となる。なお、メイン制御部402は、座標値1202をS805においてタッチパネルイベント部402から取得する。
【０１３５】
図１１に示す処理において、メイン制御部402がS803及びS804を繰り返してタッチイベントの通知を待っている状態で、ユーザが図１２の操作面204上の座標値1202を手でタッチすると、S804でタッチイベントが通知される。
【０１３６】
タッチイベントが通知されると、メイン制御部402は、S805においてタッチパネルイベント検知部420からタッチパネル上のタッチ位置（Xt，Yt）を取得する。そして、S1101で、メイン制御部402は、ジェスチャー認識部409から手の特徴点の座標値（図１２の例では、座標値1203）を取得する。
【０１３７】
なお、本実施形態では、ユーザの手1201の特徴点としてジェスチャー認識部409がユーザの手として認識する外形のうち、Y座標が最大となる位置の座標（図１２では座標値1203）として説明する。ただし、特徴点として検出される座標値は上記に示すY座標値が最大となる位置に限定されるものではない。
例えば、ジェスチャー認識部409において操作面204上に投影した手領域の外形の曲率が最小となる点を特徴点としてもよい。
【０１３８】
その後、S810で、メイン制御部402は、検出座標バッファに格納されている座標が初期値であるか判別する。ユーザが座標値1202をタッチする前は、メイン制御部402は、図１１に示すS803及びS804を繰り返しており、メイン制御部402は、S803で、検出座標バッファに初期値を設定している。
【０１３９】
従って、ユーザが座標値1202をタッチした直後は、検出座標バッファには初期値が格納されているため、S1102で、メイン制御部402は、S805で取得した座標値とS1101で取得した座標値の差分（dX，dY）を算出する。
【０１４０】
S805で取得する座標値は、図１２に示すタッチ座標値1202に対応し、S1101で取得する座標値は座標値1203に対応する。ここで、S1101で算出する座標値の差分（dX，dY）は、図１２中において、dXは差分1205、dYは差分1204で表している。
そして、メイン制御部402は、検出座標バッファには、（X+dX，Y+dY）を格納する。この座標値は、図１２中の座標値1202に対応する。
以上の動作により、座標値1202が操作面204上に線を描写するための起点として設定される。
【０１４１】
なお、図１２において、特徴点の座標値1206はユーザの手1201が操作面204上を接触させた状態で移動した際にジェスチャー認識部409により検出された特徴点の座標値を示している。
【０１４２】
メイン制御部402は、図１１に示すS804で、タッチイベントの通知があり、S1101で、手の特徴点として座標値1206を取得した場合、S810で検出座標バッファに格納されている座標値が初期値であるか判別する。ユーザの手の特徴点が座標値1206にある場合、メイン制御部402は、操作面204上に線を描写している最中であると判断する。この場合、メイン制御部402は、S810において検出座標バッファの座標値は初期値ではないと判断して、処理をS1104に進める。
【０１４３】
S1104で、メイン制御部402は、検出座標バッファに格納されている座標値からS1101で取得した座標値（図１２の例では、座標値1206）に対してS1102で算出した差分値（dX,dY）を加算した座標値1205まで実線1210を描画する。
【０１４４】
その後、S1103で、メイン制御部402は、検出座標バッファにS1101で取得した座標値（図１２の例では、座標値1207）に差分値（dX，dY）を加算した値（X+dX，Y+dY）を格納する。ここで、検出座標バッファに格納される座標値は、座標値1208に対応する。
【０１４５】
メイン制御部402は、ユーザが操作面204上に指を接触させた状態で上記処理を繰り返すことにより、操作面204上には手の特徴点から差分値（dX，dY）だけ移動した位置に、特徴点が移動した軌跡として実線1210を描写する。
【０１４６】
上記説明した動作を繰り返し、手の特徴点が図１２の特徴点1207に示す座標まで移動した状態では、メイン制御部402は、S1104で、特徴点1207に示す座標値まで実線1210を描写する。そして、メイン制御部402は、S1103で、検出座標バッファに1208の座標値（特徴点の座標に（dX，dY）を加算した値）を格納し、S804で、メイン制御部402は、タッチイベントの通知があるか否かを判断する。
【０１４７】
ここで、ユーザが操作面204上に指を接触させる操作を止めると、S804では、タッチイベントの通知がなくなる。そこで、メイン制御部402は、S803における検出座標バッファの初期化及びS804におけるタッチイベントの通知があるか否かの判断を繰り返し、タッチイベントの通知を受信するまで待つ。
【０１４８】
本実施形態によれば、ユーザの指先を特定できない手の形状であっても、ユーザの手の外形形状から特定される特徴点の座標値の移動状態を捉えて、ユーザのジェスチャーに基づく軌跡を実線1210として描画することができる。
【０１４９】
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステムまたは装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読み出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えばASIC）によっても実現可能である。
【符号の説明】
【０１５０】
101  カメラスキャナ
201  コントローラ部
202  カメラ部
204  操作平面
207  プロジェクタ
208  距離画像センサ部
330  タッチパネル
402  メイン制御部
409  ジェスチャー認識部
420  タッチパネルイベント検知部
【図１】
2018116360.tif 000006
【図２】
2018116360.tif 000007
【図３】
2018116360.tif 000008
【図４】
2018116360.tif 000009
【図５Ａ】
2018116360.tif 000010
【図５Ｂ】
2018116360.tif 000011
【図６Ａ】
2018116360.tif 000012
【図６Ｂ】
2018116360.tif 000013
【図７】
2018116360.tif 000014
【図８】
2018116360.tif 000015
【図９】
2018116360.tif 000016
【図１０】
2018116360.tif 000017
【図１１】
2018116360.tif 000018
【図１２】
2018116360.tif 000019