(第1の実施形態)
以下、本発明を実施するための最良の形態について図面を参照して説明する。
図1は、本実施形態に係るカメラスキャナ101が含まれるネットワーク構成を示す図である。
図1に示すように、カメラスキャナ101はイーサネット(登録商標)等のネットワーク104にてホストコンピュータ102およびプリンタ103に接続されている。図1のネットワーク構成において、ホストコンピュータ102からの指示により、カメラスキャナ101から画像を読み取るスキャン機能や、スキャンデータをプリンタ103により出力するプリント機能の実行が可能である。また、ホストコンピュータ102を介さず、カメラスキャナ101への直接の指示により、スキャン機能、プリント機能の実行も可能である。
図2(a)は、本実施形態に係るカメラスキャナ101の構成例を示す図である。
図2(a)に示すように、カメラスキャナ101は、コントローラ部201、カメラ部202、腕部203、プロジェクタ207、距離画像センサ部208を含む。カメラスキャナの本体であるコントローラ部201と、撮像を行うためのカメラ部202、プロジェクタ207および距離画像センサ部208は、腕部203により連結されている。腕部203は関節を用いて曲げ伸ばしが可能である。
操作平面204は、カメラスキャナ101が設置されている操作平面204である。カメラ部202および距離画像センサ部208のレンズは操作平面204方向に向けられている。図2(a)では、破線で囲まれた読み取り領域205内に置かれた原稿206をカメラスキャナ101により読み取ることが可能である。
カメラ部202は単一解像度のカメラで画像を撮像するものとしてもよいが、高解像度画像撮像と低解像度画像撮像が可能なものとすることとしてもよい。このとき、高解像度画像の撮像と低解像度画像の撮像を異なる二つのカメラで行ってもよいし、一つのカメラを用いて高解像度画像と低解像度画像の撮像をすることとしてもよい。高解像度のカメラを用いて撮像をおこなうことで、読み取り領域205内に置かれた原稿に書かれた文字や図を精度よく読み取ることが可能となる。低解像度画像を撮像可能なカメラを用いることで、操作平面204内の物体の移動やユーザの手の動きなどをリアルタイムで解析することが可能となる。
操作平面204内にはタッチパネルを設けてもよい。タッチパネルはユーザが手で触れたり、タッチペンが触れる等により、手やタッチペンの触れた位置の情報を検知して情報信号として出力する事ができる。カメラスキャナ101は、不図示のスピーカを備えることとしてもよい。さらに、周囲の環境情報を収集するための人感センサ、照度センサ、加速度センサなどの各種センサデバイスを備えることとしてもよい。
図2(b)は、カメラスキャナ101における座標系について表している。カメラスキャナ101ではカメラ部202、プロジェクタ207、距離画像センサ208のそれぞれに対して、カメラ座標系[Xc,Yc,Zc]、距離画像座標系[Xs,Ys,Zs]、プロジェクタ座標系[Xp,Yp,Zp]という座標系が定義される。これらはカメラ部202および距離画像センサ部208が撮像する画像平面、あるいはプロジェクタ207が投影する画像平面をそれぞれXY平面とし、各画像平面に直交した方向をZ方向として定義したものである。さらに、これらの独立した座標系の3次元データを統一的に扱えるようにするために、操作平面204を含む平面をXY平面とし、このXY平面から上方に垂直な向きをZ軸とする直交座標系を定義する。
座標系を変換する場合の例として、図2(c)に直交座標系と、カメラ部202を中心としたカメラ座標系を用いて表現された空間と、カメラ部202が撮像する画像平面との関係を示す。直交座標系における点P[X,Y,Z]は、(1)式によって、カメラ座標系における点Pc[Xc,Yc,Zc]へ変換できる。
[Xc,Yc,Zc]T=[Rc│tc][X,Y,Z,1]T・・・(1)
ここで、Rcおよびtcは、直交座標系に対するカメラの姿勢(回転)と位置(並進)によって求まる外部パラメータによって構成される。Rcを3×3の回転行列、tcを並進ベクトルと呼ぶ。Rcおよびtcは工場出荷時に決定されている行列であり、工場出荷後は、サービスマンによるメンテナンス等において修正される値である。
カメラ座標系で定義された3次元点は(2)式によって、直交座標系へ変換することができる。
[X,Y,Z]T=[Rc−1│−Rc−1tc][Xc,Yc,Zc,1]T・・・(2)
さらに、カメラ部202で撮像される2次元のカメラ画像平面は、カメラ部202によって3次元空間中の3次元情報が2次元情報に変換されたものである。カメラ座標系上での3次元の点Pc[Xc,Yc,Zc]を、下記の(3)式によってカメラ画像平面での2次元の点pc[xp,yp]に透視投影変換することによって変換する。
λ[xp,yp,1]T=A[Xc,Yc,Zc]T・・・(3)
ここで、Aは、カメラの内部パラメータと呼ばれ、焦点距離と画像中心などで表現される所定の3×3の行列である。また、λは任意の係数である。
以上のように、(1)式と(3)式を用いることで、直交座標系で表された3次元点群を、カメラ座標系での3次元点群座標やカメラ画像平面に変換することが出来る。なお、各ハードウェアデバイスの内部パラメータおよび直交座標系に対する位置姿勢(外部パラメータ)は、公知のキャリブレーション手法によりあらかじめキャリブレーションされているものとする。以後、特に断りがなく3次元点群と表記した場合は、直交座標系における3次元データを表しているものとする。
図3は、カメラスキャナ101の本体であるコントローラ部201のハードウェア構成例を示す図である。
図3に示すように、コントローラ部201は、システムバス301に接続されたCPU302、RAM303、ROM304、HDD305、ネットワークI/F306、画像処理プロセッサ307を備える。さらに、カメラI/F308、ディスプレイコントローラ309、シリアルI/F310、オーディオコントローラ311およびUSBコントローラ312がシステムバス301に接続されている。
CPU302はコントローラ部201全体の動作を制御する中央演算装置である。RAM303は揮発性メモリである。ROM304は不揮発性メモリであり、CPU302の起動用プログラムが格納されている。HDD305はRAM303と比較して大容量なハードディスクドライブ(HDD)である。HDD305にはコントローラ部201の実行する、カメラスキャナ101の制御用プログラムが格納されている。
CPU302は電源ON等の起動時、ROM304に格納されている起動用プログラムを実行する。この起動用プログラムは、HDD305に格納されている制御用プログラムを読み出し、RAM303上に展開するためのものである。CPU302は起動用プログラムを実行すると、続けてRAM303上に展開した制御用プログラムを実行し、カメラスキャナ101の制御を行う。CPU302は制御用プログラムによる動作に用いるデータもRAM303上に格納して読み書きを行う。HDD305上にはさらに、制御用プログラムによる動作に必要な各種設定や、また、カメラ入力によって生成した画像データを格納することができ、CPU302によって読み書きされる。CPU302はネットワークI/F306を介してネットワーク104上の他の機器との通信を行う。
画像処理プロセッサ307はRAM303に格納された画像データを読み出して処理し、またRAM303へ書き戻す。なお、画像処理プロセッサ307が実行する画像処理は、回転、変倍、色変換等である。
カメラI/F308はカメラ部202および距離画像センサ部208と接続され、CPU302からの指示に応じてカメラ部202から画像データを、距離画像センサ部208から距離画像データを取得してRAM303へ書き込む。また、CPU302からの制御コマンドをカメラ部202および距離画像センサ208へ送信し、カメラ部202および距離画像センサ部208の設定を行う。距離画像センサ部208は距離画像を生成するために、赤外線パターン投射部361、赤外線カメラ362、RGBカメラ363を備えている。距離画像センサ部208による、距離画像を取得する処理に関しては、図5を用いて後述する。
ディスプレイコントローラ309はCPU302の指示に応じてディスプレイへの画像データの表示を制御する。ここでは、ディスプレイコントローラ309は短焦点プロジェクタ207およびタッチパネル330に接続されている。
シリアルI/F310はシリアル信号の入出力を行う。シリアルI/F310には、例えばターンテーブル209が接続され、CPU302の回転開始・終了および回転角度の指示をターンテーブル209へ送信する。また、シリアルI/F310はタッチパネル330と接続され、CPU302はタッチパネルが押下されたときに、シリアルI/F310を介して押下された座標を取得する。またCPU302はシリアルI/F310を介して、タッチパネル330が接続されているかどうかの判断を行う。
オーディオコントローラ311はスピーカ340に接続され、CPU302の指示に応じて音声データをアナログ音声信号に変換し、スピーカ340を通じて音声を出力する。
USBコントローラ312はCPU302の指示に応じて外付けのUSBデバイスの制御を行う。ここでは、USBコントローラ312はUSBメモリやSDカードなどの外部メモリ350に接続され、外部メモリ350へのデータの読み書きを行う。
本実施形態では、コントローラ部201は、ディスプレイコントローラ309、シリアルI/F310、オーディオコントローラ311およびUSBコントローラ312の全てを備えることとして説明する。ただし、上記のうち少なくとも一つを備えることとすればよい。
図4は、CPU302が実行するカメラスキャナ101の制御用プログラムの機能構成401を示す図の一例である。
カメラスキャナ101の制御用プログラムは前述のようにHDD305に格納され、CPU302が起動時にRAM303上に展開して実行する。
メイン制御部402は制御の中心であり、機能構成401内の他の各モジュールを制御する。
画像取得部416は画像入力処理を行うモジュールであり、カメラ画像取得部407、距離画像取得部408から構成される。カメラ画像取得部407はカメラI/F308を介してカメラ部202が出力する画像データを取得し、RAM303へ格納する。距離画像取得部408はカメラI/F308を介して距離画像センサ部208が出力する距離画像データを取得し、RAM303へ格納する。距離画像取得部408の処理の詳細は図5を用いて後述する。
画像処理部411は、カメラ部202および距離画像センサ部208から取得した画像を画像処理プロセッサ307で解析するために用いられ、各種画像処理モジュールで構成される。
ユーザインターフェイス部403は、メイン制御部402からの要求を受け、メッセージやボタン等のGUI部品を生成する。そして、表示部406へ生成したGUI部品の表示を要求する。表示部406はディスプレイコントローラ309を介して、プロジェクタ207へ要求されたGUI部品の表示を行う。プロジェクタ207は操作平面204に向けて設置されており、操作平面204上にGUI部品を投射する。また、ユーザインターフェイス部403は、ジェスチャ認識部409が認識したタッチ等のジェスチャ操作、そしてさらにそれらの座標を、メイン制御部402経由で受信する。そして、ユーザインターフェイス部403は描画中の操作画面の内容と操作座標を対応させて操作内容を判定する。操作内容とは、例えば、タッチパネル330上に表示されたどのボタンがユーザによってタッチされたか等である。この操作内容をメイン制御部402へ通知することにより、操作者の操作を受け付ける。
ネットワーク通信部404は、ネットワークI/F306を介して、ネットワーク104上の他の機器とTCP(Transmission Control Protocol)/IPによる通信を行う。
データ管理部405は、制御用プログラム401の実行において生成した作業データなど様々なデータをHDD305上の所定の領域へ保存し、管理する。
図5は距離画像センサ208による撮像データから距離画像および前述の直交座標系における3次元点群を求めるための処理の説明図である。距離画像センサ208は赤外線によるパターン投射方式の距離画像センサである。赤外線パターン投射部361は対象物に、人の目には不可視である赤外線によって3次元形状測定パターンを投射する。赤外線カメラ362は対象物に投射した3次元形状測定パターンを読み取るカメラである。RGBカメラ363は人の目に見える可視光をRGB信号で撮像するカメラである。
図5(a)のフローチャートを用いて距離画像センサ部208が距離画像を生成するための処理を説明する。図5(b)〜(d)はパターン投射方式による距離画像の計測原理を説明するための図面である。
図5(b)に示す赤外線パターン投射部361、赤外線カメラ362、RGBカメラ363は距離画像センサ部208に備えられている。
本実施形態では、操作平面上に赤外線パターン投射部361を用いて、3次元形状測定パターン522を投射し、投射後の操作平面を赤外線カメラ362で撮像する。3次元形状測定パターン522と赤外線カメラ362で撮像した画像を比較することで操作平面上の物体の位置や大きさを表す3次元点群を生成し、距離画像を生成する。
図5(a)に示す処理を実行するためのプログラムはHDD305に記憶されており、CPU302がHDD305に記憶されたプログラムを実行することにより以下の処理を実現する。
図5(a)に示す処理は、カメラスキャナ101の電源がONになることに従って開始される。
距離画像取得部408は図5(b)に示すように赤外線パターン投射部361を用いて赤外線による3次元形状測定パターン522を対象物521に投射する(S501)。3次元形状測定パターン522は予め決められたパターン画像であり、HDD305に記憶されている画像である。
距離画像取得部408は、RGBカメラ363を用いて対象物を撮像したRGBカメラ画像523および、赤外線カメラ362を用いてステップS501で投射した3次元形状測定パターン522を撮像した赤外線カメラ画像524を取得する(S502)。
赤外線カメラ362とRGBカメラ363とでは設置位置が異なるため、図5(c)に示すようにそれぞれで撮像される2つのRGBカメラ画像523および赤外線カメラ画像524の撮像領域が異なる。そこで、距離画像取得部408は座標系変換を行い、赤外線カメラ画像524をRGBカメラ画像523の座標系へ変換する(S503)。なお、赤外線カメラ362とRGBカメラ363の相対位置や、それぞれの内部パラメータは事前のキャリブレーション処理により既知であるとし、それらの値を用いて座標変換を行うとする。
距離画像取得部408は、3次元形状測定パターン522とS503で座標変換を行った赤外線カメラ画像524間での対応点を抽出する(S504)。例えば、図5(d)に示すように、赤外線カメラ画像524上の1点を3次元形状測定パターン522上から探索して、同一の点が検出された場合に対応付けを行う。あるいは、赤外線カメラ画像524の画素の周辺のパターンを3次元形状測定パターン522上から探索し、一番類似度が高い部分と対応付けてもよい。
距離画像取得部408は赤外線パターン投射部361と赤外線カメラ362を結ぶ直線を基線525として三角測量の原理を用いて計算を行うことにより、赤外線カメラ362から対象物までの距離を算出する(S505)。S504で対応付けが出来た画素については、赤外線カメラ362からの距離を算出して画素値として保存し、対応付けが出来なかった画素については、距離の計測が出来なかった部分として無効値を保存する。これを距離画像取得部408が、S503で座標変換を行った赤外線カメラ画像524の全画素に対して行うことで、各画素に距離値が入った距離画像を生成する。
距離画像取得部408は、距離画像の各画素にRGBカメラ画像523のRGB値を保存することにより、1画素につきR、G、B、距離の4つの値を持つ距離画像を生成する(S506)。ここで取得した距離画像は距離画像センサ208のRGBカメラ363で定義された距離画像センサ座標系が基準となっている。
距離画像取得部408は、図2(b)を用いて上述したように、距離画像センサ座標系として得られた距離データを直交座標系における3次元点群に変換する(S507)。
なお、本実施例では上述したように、距離画像センサ208として赤外線パターン投射方式を採用しているが、他の方式の距離画像センサを用いることも可能である。例えば、2つのRGBカメラでステレオ立体視を行うステレオ方式や、レーザー光の飛行時間を検出することで距離を測定するTOF(Time of Flight)方式など、他の計測手段を用いても構わない。
ジェスチャ認識部409の処理の詳細を、図6(a)のフローチャートを用いて説明する。図6(a)のフローチャートでは、ユーザが操作平面204を指で操作しようとした場合に行われる処理を例に説明を行う。
図6(a)では、距離画像センサ208が撮像した画像から人の手を抽出し、抽出した手の画像を操作平面204に投影した2次元の画像を生成する。生成した2次元の画像から人の手の外形を検出し、指先の動きや動作を検出する。本実施形態では、距離画像センサ部208が生成した画像中に指先が1つ検出されたときにジェスチャ操作が行われたと判定し、行われたジェスチャ操作の種類を判定する。
図6(a)に示すフローチャートを実行するためのプログラムはカメラスキャナ101のHDD305に記憶されており、CPU302がそのプログラムを実行することにより、フローチャートに示す処理が実現される。
カメラスキャナ101の電源がONになり、ジェスチャ認識部409が処理を開始すると、ジェスチャ認識部409は初期化処理を行う(S601)。初期化処理において、ジェスチャ認識部409は距離画像取得部408から距離画像を1フレーム取得する。カメラスキャナ101の電源がONになったとき、操作平面204上には物体が置かれていないこととし、取得した距離画像に基づいて操作平面204の平面の認識を行う。平面の認識とは、ジェスチャ認識部409が取得した距離画像から最も広い平面を抽出し、その位置と法線ベクトル(以降、操作平面204の平面パラメータと呼ぶ)を算出し、RAM303に記憶することである。
続いて、ジェスチャ認識部409は操作平面204内に物体やユーザの手が入ったことを検出したことに従って、3次元点群取得処理を実行する(S602)。ジェスチャ認識部409の実行する3次元点群取得処理の詳細をS621、S622に示す。ジェスチャ認識部409は距離画像取得部408の取得した画像から操作平面204上に存在する物体の3次元点群を1フレーム分取得する(S621)。操作平面204の平面パラメータを用いて、ジェスチャ認識部409は取得した3次元点群から操作平面204を含む平面にある点群を除去する(S622)。
ジェスチャ認識部409は取得した3次元点群から操作者の手の形状および指先を検出する処理を行う(S603)。S603における処理の詳細をS631〜S634および、図6(b)〜(d)に示す、指先検出処理の方法を模式的に表した図を用いて説明する。
ジェスチャ認識部409は、S602において取得した3次元点群から、操作平面204を含む平面から所定の高さ以上にある、肌色の3次元点群を抽出する(S631)。S631に示す処理を実行することで、距離画像取得部408の取得した画像から、操作者の手だけを抽出する。図6(b)の661は抽出した手の3次元点群を表している。
ジェスチャ認識部409は抽出した手の3次元点群を、操作平面204の平面に射影した2次元画像を生成して、その手の外形を検出する(S632)。図6(b)の662は、661を操作平面204の平面に投影した3次元点群を表している。投影は、点群の各座標を、操作平面204の平面パラメータを用いて行う。また、図6(c)に示すように、投影した3次元点群から、XY座標の値だけを取り出せば、Z軸方向から見た2次元画像663として扱うことができる。この時、手の3次元点群の各点が、操作平面204の平面に投影した2次元画像の各座標のどれに対応するかを、記憶しておくものとする。
ジェスチャ認識部409は検出した手の外形上の各点について、その点での外形の曲率を算出し、算出した曲率が所定値より小さい点を指先として検出する(S633)。図6(d)は、外形の曲率から指先を検出する方法を模式的に表したものである。664は、操作平面204の平面に投影された2次元画像663の外形を表す点の一部を表している。ここで、664のような、外形を表す点のうち、隣り合う5個の点を含むように円を描く。円665、667は、隣り合う5個の点を含むように書かれた円の例である。この円を、全ての外形の点に対して順に描き、その直径(例えば666、668)が所定の値より小さいことを以て、円に含まれた5つの点が指先を構成しているとする。例えば、図6(d)においてCPU302は円665の直径666は所定の値より小さいため円665に含まれる5つの点は指先を構成している点であると判定する。一方で、円667の直径668は所定の値より大きいため、円667に含まれる5つの点は指先を構成していないとジェスチャ認識部409は判定する。図6で示す処理においては隣り合う5個の点を含む円を書くこととして説明したが、円に含まれる点の数は限定されるものではない。また、ここでは描いた円の曲率を用いたが、円ではなく楕円フィッティングを行い指先を検出してもよい。
ジェスチャ認識部409は、検出した指先の個数および各指先の座標を算出する(S634)。予め記憶した操作平面204に投影した2次元画像の各点と、手の3次元点群の各点の対応関係に基づいて、ジェスチャ認識部409は各指先の3次元座標を得る。指先の座標とは、S632において描いた円に含まれる点のいずれかの点の3次元座標である。本実施形態では、指先の座標を前述したように定めることとするが、S632で描いた円の中心の座標を指先の座標とすることとしてもよい。
本実施形態では、3次元点群から2次元画像に投影した画像から指先を検出する方法を説明したが、指先検出の対象とする画像は、これに限定されるものではない。例えば、距離画像の背景差分や、RGBカメラ画像の肌色領域から手の領域を抽出し、上に述べたのと同様の方法(外形の曲率計算等)で、手領域のうちの指先を検出してもよい。この場合、検出した指先の座標はRGBカメラ画像や距離画像といった、2次元画像上の座標であるため、その座標における距離画像の距離情報を用いて、直交座標系の3次元座標に変換する必要がある。
ジェスチャ認識部409は検出した手の形状および指先からのジェスチャ判定処理を行う(S604)。S604における処理をS641からS646に示す。本実施形態において、ジェスチャ操作とはユーザの指先が操作面に触れるタッチ操作、操作面から所定のタッチ閾値以上離れた操作面上空で操作を行うホバー操作がジェスチャ操作に含まれる。
ジェスチャ認識部409は、S603で検出した指先が1つかどうか判定する(S641)。指先が1つでなければジェスチャ認識部409はジェスチャなしと判定する(S646)。
S641において検出した指先が1つのとき、ジェスチャ認識部409は検出した指先と操作平面204を含む平面との距離を算出する(S642)。
ジェスチャ認識部409はS642で算出した距離が所定値(タッチ閾値)以下であるかどうかを判定する(S643)。タッチ閾値は予め決められている値であり、HDD305に記憶されている値である。
ジェスチャ認識部409はS624にて算出された距離が所定値以下であるとき、指先が操作平面204へタッチした、タッチ操作を検出する(S644)。
ジェスチャ認識部409はS642にて算出した距離が所定値以下で無ければ、ホバー操作を検出する(S645)。
ジェスチャ認識部409は判定したジェスチャをメイン制御部402へ通知し、S602へ戻ってジェスチャ認識処理を繰り返す(S605)。
カメラスキャナ101の電源がOFFになることに従って、ジェスチャ認識部409は図6(a)に示す処理を終了する。
なお、ここでは一本指でのジェスチャ認識について説明を行ったが、複数の指あるいは複数の手、あるいは腕や体全体でのジェスチャ認識に応用することとしてもよい。
本実施形態では、カメラスキャナ101の電源がONになったことに従って図6(a)に示す処理を開始することとして説明した。上記のような場合だけでなく、ユーザがカメラスキャナ101を利用するための所定のアプリケーションを選択し、アプリケーションが立ち上がることに従って図6(a)に示す処理を開始することとしてもよい。
図8の模式図を用いて、操作平面204と指先の距離が変化した場合に、ホバー操作のジェスチャ反応領域がどのように変化するかを説明する。
本実施形態では、ジェスチャ認識部409が検出した指先の高さに基づいて、ホバー操作の反応するジェスチャ操作領域のサイズを変更する。
ここでホバー操作とは、操作平面204から指先がタッチ閾値以上浮いている状態でカメラスキャナ101のプロジェクタ207により操作平面204に投影される画面の操作を行うことである。
図8(c)は、操作平面204上でホバー操作をしている手806を横から見た図である。操作平面204に対して807は垂直方向に伸びる線であり、点808と手806の指先との距離がタッチ閾値以上であればホバー操作を行っているとカメラスキャナ101が判定する。
本実施形態では、直交座標系であらわされた指先のホバー座標(X,Y,Z)がジェスチャ操作領域の上空にある場合に、オブジェクトの色を変えるなどして表示を変更する。点808はホバー座標(X,Y,Z)のZ座標の値を0とし、ZY平面に投射した点である。
図8(a)、(b)は、ユーザが操作平面204をタッチ操作するときにプロジェクタ207が投影するユーザインターフェイスおよび、タッチ操作時のオブジェクト管理表である。ユーザの指先と操作平面204の距離がタッチ閾値Th以下である場合にカメラスキャナ101はユーザがタッチ操作をしていると判定する。
図8(a)では、ユーザの手806の指先と操作平面204の距離がタッチ閾値以下であり、ユーザの指先がオブジェクト802にタッチ操作をしている。カメラスキャナ101はオブジェクト802へのユーザからのタッチ操作を受付け、色をオブジェクト801やオブジェクト803とは異なる色に変化させる。
ここでオブジェクト801〜803は、操作平面204上にプロジェクタ207が投影するユーザインターフェイスの部品の一つである。カメラスキャナ101はオブジェクト801〜803へのタッチ操作やホバー操作を受付け、物理的なボタンスイッチと同様、ボタンの色が変化させたり、画面を遷移させたり、選択されたオブジェクトに関する注釈を表示したりする。
各画面において表示するオブジェクトは、図8(b)に示すオブジェクトの管理表によって管理される。各画面において表示するオブジェクトの種類、表示座標、表示サイズは予めHDD305に記憶されており、HDD305に記憶されている情報をCPU302がRAM303に読み出すことでオブジェクト管理表が生成される。
本実施形態において、オブジェクト管理表には、オブジェクトの「ID」「表示文字列」、「表示座標」、「表示サイズ」、「ジェスチャ反応領域座標」、「ジェスチャ反応領域サイズ」が記憶されている。本実施形態ではオブジェクト管理表の「表示サイズ」「ジェスチャ反応領域サイズ」の単位をmmとして説明する。
オブジェクトの「ID」は、プロジェクタ207の投影するオブジェクトの番号である。
「表示文字列」とは、各IDのオブジェクトの中に表示される文字列である。
「表示座標」とは、各IDのオブジェクトが操作平面204内のどこに表示されるかを示したものである。表示座標は例えば、長方形のオブジェクトであれば、オブジェクトの左上の点が表示される位置を示しており、円形のオブジェクトでは円の中心の座標を示している。オブジェクト801〜803のようなボタンオブジェクトの場合、オブジェクトに外接する長方形の左上の座標を記憶しており、オブジェクト801〜803は長方形のオブジェクトとして扱われる。
「表示サイズ」とは、各IDのオブジェクトの大きさを示している。例えば、長方形のオブジェクトであれば、そのオブジェクトX方向の大きさWとY方向の大きさHが示されている。
「ジェスチャ反応領域座標」とは、各IDのオブジェクトがホバー操作やタッチ操作等のジェスチャ操作を受けつける反応領域の座標を示している。例えば、長方形のオブジェクトに対しては、長方形のジェスチャ反応領域が設けられており、ジェスチャ反応領域の左上の点の座標が示されている。円形のオブジェクトに対しては、円形のジェスチャ反応領域が設けられており、円の中心の座標が示されている。
「ジェスチャ反応領域サイズ」とは、各IDのオブジェクトがホバー操作やタッチ操作等のジェスチャ操作を受付けるジェスチャ反応領域の大きさを示している。例えば、ジェスチャ反応領域が長方形の場合、長方形のX方向の大きさWとY方向の大きさHが示されている。円形のジェスチャ反応領域に対しては、半径Rが示されている。
本実施形態ではオブジェクトの位置や大きさおよび各オブジェクトのジェスチャ反応領域の位置や大きさについて上述したオブジェクト管理表を用いて管理する。オブジェクトやオブジェクト反応領域を管理するための方法は上述した方法に限らず、各オブジェクトやジェスチャ反応領域がどの位置にどのような大きさで存在するのかを一意に定められるものであればどのような方法でも構わない。
本実施形態では、長方形と円形のオブジェクトを例に説明したが、オブジェクトおよびジェスチャ反応領域の形状や大きさは任意の形状、大きさで構わない。
図8(b)では、ユーザによるタッチ操作時のオブジェクト管理表を表しており、オブジェクト管理表の「表示位置」と「ジェスチャ反応領域座標」、「表示サイズ」と「ジェスチャ反応領域サイズ」には同じ値が記載されている。これにより、ユーザがオブジェクトの表示されている領域でタッチ操作を行うときに、カメラスキャナ101がオブジェクトに対するタッチ操作を受付けることがわかる。
図8(d)(e)はユーザの指が操作平面204からタッチ閾値Th以上の所定の距離だけ離れており、ユーザがホバー操作をしている場合に投影されるユーザインターフェイスおよび、オブジェクト管理表である。
点線で示される領域809〜813はオブジェクト801〜805の周囲に設けられたジェスチャ反応領域を示している。図8(d)の点線で示すジェスチャ操作領域はユーザには通知されない。ユーザの指先が点線で示されたジェスチャ反応領域内で検出されたことに従って、カメラスキャナ101はユーザによるオブジェクトに対するホバー操作を受付ける。
ユーザがホバー操作をしているとき、ジェスチャ反応領域サイズをオブジェクト表示サイズと異なる領域に設定するためのオフセットが、指先と操作平面の距離に応じて決定される。オフセットとは、オブジェクト表示領域に対して、ジェスチャ反応領域がどれだけ大きいかを示したものである。図8(e)は、指先と操作平面204から求められるオフセット量が20mmであるときのオブジェクト管理表を示す。「表示座標」と「ジェスチャ反応領域座標」、「表示サイズ」と「ジェスチャ反応領域サイズ」に差が生じており、オブジェクト表示領域に対して上下左右に20mmのオフセット領域を含むジェスチャ反応領域が設けられている。
図7に本実施形態におけるジェスチャ反応領域の座標およびサイズを決める処理を記したフローチャートを示す。図7に示すフローチャートを実行するためのプログラムはHDD305に記憶されており、CPU302が上記プログラムを実行することで処理が実現される。
図7に示す処理は、カメラスキャナ101の電源がONになることで開始される。本実施形態では電源がONになった後に、プロジェクタ207による投影を開始する。CPU302は、操作平面204に表示する画面について、表示するオブジェクトの種類、表示座標、表示サイズに関する情報をHDD305から読み出し、RAM303に記憶し、オブジェクト管理表を生成する。カメラスキャナ101の電源がONになった後に、プロジェクタ207の表示するユーザインターフェイスが切り替わる度にCPU302は表示するオブジェクトに関する情報をHDD305から読み出してRAM303に記憶し、オブジェクト管理表を生成する。
メイン制御部402は、ジェスチャ認識部409に処理開始のメッセージを送る(S701)。ジェスチャ認識部409は、メッセージを受け取ると、図6のフローチャートに示すジェスチャ認識処理を開始する。
メイン制御部402は、表示中のユーザインターフェイスにオブジェクトが存在するかどうかを確認する(S702)。オブジェクトが存在しない場合とは、例えば、プロジェクタ207により画面が投影されていない場合等である。メイン制御部402は生成したオブジェクト管理表に従い、現在表示している画面にオブジェクトが存在しているか否かを判定する。本実施形態ではS702において、メイン制御部402がユーザインターフェイスにオブジェクトが存在しているか否かの判定を行っている。S702においてメイン制御部がタッチ操作やホバー操作等のジェスチャ操作による入力を受付けるオブジェクトを表示しているか否かを判定してもよい。ジェスチャ操作による入力を受付けるオブジェクトとはボタンのようなオブジェクトである。一方で、ジェスチャ操作による入力を受付けないオブジェクトとは、ユーザへのメッセージのようなテキストで構成されるオブジェクトである。各画面においてジェスチャ操作による入力を受付けるオブジェクトがあるか否かは予めHDD305に記憶されていることとする。
表示中のユーザインターフェイスにオブジェクトが存在しない場合、メイン制御部402は所定の終了信号が入力されたか否かを判定する(S711)。所定の終了信号とは、たとえば、不図示の終了ボタンをユーザが押下したことにより生じる信号である。終了処理信号を受け取っていない場合は再びステップS702へ移行し、表示中のユーザインターフェイスにオブジェクトが存在するかどうかを確認する。
ユーザインターフェイス上にオブジェクトが表示されているとき、メイン制御部402はホバーイベントを受信したかどうかを確認する(S703)。ホバーイベントとは、ユーザの指先が操作平面204からタッチ閾値Th以上離れているときに発生するイベントである。ホバーイベントには、指先の座標情報が3次元(X,Y,Z)の情報として格納されている。指先の座標(X,Y,Z)をホバー座標と呼ぶ。指先のホバー座標は直交座標系での座標である。このうちのZの情報がホバーイベントの指先の高さ情報であり、X,Yはそれぞれ操作平面204上のどの座標の上空で指先がホバー操作を行っているかを示している。
メイン制御部402は、受信したホバーイベントの指先の高さ情報を取得する(S704)。メイン制御部402はホバー座標からZの情報を抽出する。
メイン制御部402は、S704で取得した指先の高さに応じたオフセット量を算出する(S705)。メイン制御部402は、オフセット量δhを下記の方法で算出する。
メイン制御部402はオフセット量δhを、S704で取得した指先の高さZと、以下のような式を用いて計算する。Thは前述したタッチ閾値である。
ユーザの指先と操作平面204の距離がタッチ閾値以下(0≦Z≦Th)の場合、ジェスチャ反応領域サイズとオブジェクト反応領域サイズは同じである。したがってZ=Thの場合、δh=aTh+bかつ、δh=0である。
ユーザの指先と操作平面204の距離がタッチ閾値よりも大きい場合(Z>Th)、ジェスチャ反応領域およびオフセット量δhは指先と操作平面の距離Zが大きくなるにつれて大きくなる。したがって、a>0である。
タッチ閾値Thは所定の正の値であるため、b<0である。
このようにa、bを決定することで、上記の式を用いてオフセット量を算出することができる。
メイン制御部402は、S705で求めたオフセット量δhおよびオブジェクト管理表の「表示座標」と「表示サイズ」を用いてジェスチャ反応領域を算出する(S706)。メイン制御部402はRAM303から図8(b)に示すオブジェクト管理表を呼び出し、表示座標と表示サイズを取得する。メイン制御部402は、ジェスチャ反応領域が表示サイズよりオフセット量δh分大きくなるよう、ジェスチャ反応領域座標、ジェスチャ反応領域サイズを決定し、オブジェクト管理表に登録する。S706における処理をメイン制御部402が実行することにより、図8(e)に示すようなオブジェクト管理表が生成される。
メイン制御部402は、S706において算出されたジェスチャ反応領域を各オブジェクトに反映する(S707)。S707ではS706において生成されたオブジェクト管理表に基づいて、ジェスチャ反応領域をユーザインターフェイスに反映する。S707に示す処理を実行することで、図8(d)において点線で示す領域がジェスチャ反応領域として設定される。
メイン制御部402は、RAM303に記憶されているオブジェクト管理表に設定されているジェスチャ反応領域座標及びジェスチャ反応領域サイズを参照する(S708)。メイン制御部402は参照したジェスチャ反応領域座標とジェスチャ反応領域サイズに基づいて、オブジェクトのジェスチャ反応領域を算出する。例えば、図8(e)において、ID「2」のオブジェクトのジェスチャ反応領域は(180,330)、(180,390)、(320,330)、(320,390)の4点で囲まれる長方形の領域である。
メイン制御部402は、S703において受信したホバーイベントに格納されている、指先のホバー座標のうち、(X,Y)値が、S708で取得したジェスチャ反応領域内にあるかどうかを判定する(S709)。
ホバー座標の(X、Y)値がS708においてメイン制御部402が取得したジェスチャ反応領域内であった場合、メイン制御部402は、ユーザインターフェイス部403に対し、該当オブジェクトの表示を変更するようメッセージを送る(S710)。ユーザインターフェイス部403はメッセージを受信し、表示切替処理を行う。これにより、ジェスチャ反応領域上に指先がある場合は対応するオブジェクトの色を変更することができる。このようにホバー操作を受付けたオブジェクトの色を変更することにより、ユーザの指先が操作面上のどのオブジェクトを指し示しているかをユーザが知ることができる。図8(d)では、手806の指先がオブジェクト802上にはなく、ジェスチャ反応領域812上にある状態で、ボタンの色が変更されている様子を表している。図8ではタッチ操作を受付けている(a)においても、ホバー操作を受付けている(d)においても、入力を受付けたオブジェクトの色が変化する場合について表している。しかし、ジェスチャ操作の種類に応じて、入力を受付けた後のユーザインターフェイスを変化させることとしてもよい。例えば、タッチ操作を受付けたときには画面をタッチされたオブジェクトに合わせて遷移させ、ホバー操作の場合は入力を受付けたオブジェクトの色を変化させる等である。本実施形態では、ホバー操作を受付けたオブジェクトについてオブジェクトの色を変化させる場合について説明した。しかし、ホバー操作を受付けた場合の表示は上記のものに限らない。例えば、ホバー操作を受付けたオブジェクトの輝度を明るくしたり、ホバー操作を受付けたオブジェクトについて注釈等を吹き出しで表示することとしてもよい。
CPU302は、不図示の終了ボタン押下などによる終了処理信号を受信したかどうかを確認し、受信した場合は処理を終了する(S711)。CPU302が終了処理信号を受信していない場合はステップS702へ戻ってUIにオブジェクトがあるかどうかを確認する。
以上の処理を繰り返すことで、指先の高さに応じてオブジェクトのジェスチャ反応領域の大きさを変更することが可能となる。ユーザの指先と操作面の距離が大きく離れていても、ジェスチャ反応領域が大きくなり、ユーザがホバー操作をした指の位置がオブジェクトの表示領域からずれてしまってもオブジェクトを反応させることができる。
指先がオブジェクトに近づくにつれてジェスチャ反応領域が小さくなるため、ユーザの指先が操作面に近い場合には、オブジェクトの表示領域に近い領域においてオブジェクトに対するジェスチャ操作を受付けることができる。ユーザが操作面から離れた所から指先をオブジェクトに近づけたときにオブジェクトに対するホバー操作を受付ける領域を徐々にオブジェクトの表示されている領域に近づけていく。ユーザがホバー操作でオブジェクトを選択し続けながら指先を近づけることで、指先をオブジェクトの表示されている領域へ誘導することができる。
図7のS705では、距離画像センサ部208の画角内にユーザの指先が写っている限り、指の高さZがどれだけ大きくなっても、大きくなった分だけジェスチャ反応領域を大きくする場合について説明した。
オフセット量を算出するための方法は上記の方法に限ったものでなく、所定の高さH以上ではジェスチャ反応領域の大きさをそれ以上大きくしないようにしてもよい。このとき、S705でCPU302がオフセット量δhを計算する際、以下の式を用いることとする。
Hは所定の高さを表す定数(H>Th)である。
上記の式では、指先の高さZが所定の高さHよりも高いときはオフセット量δhが常にaH+bとなり一定の値になる。指先と操作平面が所定の高さ以上に離れている場合には、オフセット量δhを一定とすることができる。
本実施形態で示した方法を用いると、オブジェクトとオブジェクトの間隔が狭い場合、各オブジェクトのジェスチャ反応領域が重なってしまう場合がある。オブジェクトとオブジェクトの間隔Dを考慮して、オフセット量δhの最大値がD/2となるようにしてもよい。
図8(f)、(g)はユーザの指先と操作平面204からの距離に応じてオフセット量δhが40mmになった場合のユーザインターフェイスおよびジェスチャ反応領域の模式図およびオブジェクト管理表を示している。
図8(f)、(g)において、オブジェクト801とオブジェクト802の間の距離Dは50mmである。オフセット量δhが40mmであると、オブジェクト1のジェスチャ領域とオブジェクト2のジェスチャ反応領域が重複してしまう。そこで、図8(g)に示すオブジェクト管理表ではオブジェクト801とオブジェクト802の間のオフセット量δhがD/2である25mmとなっている。このとき、ボタンオブジェクト801、ボタンオブジェクト802の上下、すなわちY方向ではδhを40mmとしても他のオブジェクトとジェスチャ反応領域が重複することはない。したがって、ボタンオブジェクト801とボタンオブジェクト802の上下方向にはδh=40mm幅のオフセット量が設けられている。オブジェクト801、オブジェクト802以外のオブジェクトについても同様にオフセット量δhの最大値がD/2になるようにしたものが図8(f)、(g)である。
ID4番のオブジェクト804、ID5番のオブジェクト805のように、表示形状が異なる場合は、図8(f)のようにどちらかのオブジェクトについて算出されたオフセットを優先して反映する。そして、もう一方のオブジェクトに対しては、他方のオブジェクトのジェスチャ反応領域に重複しないようにオフセット領域を設定する。図8(f)では、ID4番オブジェクト804について算出されたオフセット量を優先して反映したジェスチャ領域が設定されており、オブジェクト805はオブジェクト804のジェスチャ反応領域と重複しない領域をジェスチャ反応領域として設定している。いずれのオブジェクトについて優先してジェスチャ反応領域を反映するかについては予め、オブジェクトの形状や種別ごとに決められていることとする。例えば、ボタン型のオブジェクト801〜803は優先度1、長方形のオブジェクト804は優先度2、円形のオブジェクト805は優先度3と決められており、決められた優先順位に従ってジェスチャ反応領域を決定する。オブジェクトの種別、優先順位はオブジェクト管理表生成時にCPU302がHDD305から読み出し、オブジェクト管理表の不図示の欄に記憶することとする。異なる形状のオブジェクトのジェスチャ反応領域が重複する場合のジェスチャ反応領域の求め方は上述した方法に限らない。
本実施形態において、S705におけるオフセット量δhを、一次式で求める場合について説明した。オフセット量δhを求めるための関数は、指先の高さZが高くなるにつれてδhが大きくなる、単調増加の関数であればどのような式でもよい。
また、オフセット量δhを求めるための関数は操作平面204に表示されているすべてのオブジェクトで同じでもよいし、オブジェクトごとに異なっていてもよい。オブジェクトごとに異ならせておくことで、ホバーによる反応の感度をオブジェクトごとにカスタマイズすることが可能となる。
本実施形態では、操作平面204を操作するユーザが一人であり、指先が一つ検出された場合のカメラスキャナ101の動作について説明した。操作平面204の複数の指先によって操作が可能であることとしてもよい。このとき、操作平面204を撮像した画像から検出される複数の指先のうち、指先の操作平面からの高さZの値が小さい指先を優先してオフセット量δhを決定することとする。
第1の実施形態では、ユーザの指先と操作面の距離がタッチ閾値より大きく、ユーザの指先が撮像領域内にある限りホバー操作を受付けることとして説明した。操作面と指先の距離がタッチ閾値とは異なる所定の距離よりも大きくなったときにホバー操作を検出しないようにしてもよい。
第1の実施形態に示す方法を実施することで、指先と操作平面の距離が離れるにつれてジェスチャ反応領域を大きくすることができる。これにより、ユーザが操作をする指先と操作平面の距離が変化しても、ユーザが操作したいオブジェクトを反応させることが可能
となる。
(第2の実施形態)
第1の実施形態では、ユーザがジェスチャ操作を実行した指先と操作平面の距離に応じて、ジェスチャ反応領域の大きさを変更する場合について説明した。ユーザが操作平面を斜め上空から見てジェスチャ操作を行う場合、図10(e)に示すように、ユーザがジェスチャ操作を行う位置が、操作したいオブジェクトの表示位置と比べてユーザの体側に近くなる傾向がある。
そこで、第2の実施形態では、ユーザがジェスチャ操作を行う指先と操作平面の距離とユーザの位置を検出し、ジェスチャ反応領域の位置を変更する方法を説明する。
図10に示す、操作平面204のユーザインターフェイスの模式図および、オブジェクト管理表の模式図を用いて第2の実施形態について説明する。図10では、ユーザの手の侵入位置を検出し、検出した手の侵入位置を基に、ジェスチャ検出領域を移動する方向を決定している。
図10(a)、(f)はユーザが操作平面204に表示されているオブジェクト802に指先をかざしてホバー操作をしているときの操作平面204の模式図および、オブジェクト管理表の模式図である。図10(a)、(f)ではジェスチャ反応領域の移動量Sが20mmの場合を示している。したがって、オブジェクト801〜805に対応するジェスチャ反応領域1001〜1005はすべて図で見た下側すなわちユーザの手の侵入側に20mm移動している。
図10(a)の1023は手の侵入位置を示している。手の侵入位置の求め方については後述する。
手806が操作平面204上に侵入したことに従って、カメラスキャナ101は指先と操作平面204の距離を検出し、検出した距離に基づいて、ジェスチャ反応領域を移動させる。
図10(f)に示すオブジェクト管理表では、ジェスチャ反応領域はオブジェクト表示領域よりも20mm、ユーザの手の侵入位置が検出された側に移動している。ジェスチャ反応領域をオブジェクト表示領域からどの程度移動させるかは、ユーザの指先と操作平面204との距離によって決定される。
図9に第2の実施形態において行われる処理を示すフローチャートを示す。図9のフローチャートに示される処理を実行するためのプログラムはHDD305に記憶されており、CPU302がプログラムを実行することで処理が実現する。
図9のS701からS704、S706からS711に示す処理は第1の実施形態と同様であるため、説明を省略する。
第2の実施形態ではS704において指先の高さを取得したのち、メイン制御部402は手の侵入位置1023を取得する(S901)。手の侵入位置は、図10(a)では点1023、図10(e)では点1024であり、直交座標系で表すことができる。本実施形態では、操作平面204の外形および手の侵入位置のXY座標を用いて手がどちらの方向から操作平面204に侵入したかを判定する。
S901では、ジェスチャ認識部409が図6(a)のS601からS632までの処理を実行することにより、手の3次元点群を生成し、操作平面204に正射影して手の外形を検出する。検出した手の外形と、操作平面204の外形の二つの交点からできる線分の中点を手の侵入位置とする。
S704で取得した指先の高さに基づいて、メイン制御部402はジェスチャ反応領域の移動量を算出する(S902)。ここでは、S704で検出された指先の高さが高いほどジェスチャ反応領域のオブジェクト表示領域からの移動量が大きいとする。
移動量は、指先の高さに対して単調増加であれば第1の実施形態のように一次関数で表すこととしてもよいし、他の関数によって求められるものであってもよい。
メイン制御部402はS902で求められたジェスチャ反応領域の移動量を基に、ジェスチャ反応領域を算出して、RAM303に格納されているオブジェクト管理表に登録する(S706)。例えば図10(e)に示すオブジェクト管理表では、移動量Sが20mmであるため、オブジェクトの表示サイズとジェスチャ反応領域サイズは同一であり、ジェスチャ反応領域座標が表示座標と比較して20mm移動している。これ以降の処理は図7と同様であるため説明を省略する。
図9および図10では、ユーザの指先と操作平面204の距離に応じて決定される移動量分だけ、ジェスチャ反応領域をユーザの手の侵入側に移動させる場合について説明した。ジェスチャ反応領域を移動させる方向はユーザの手の侵入側に限らない。たとえば、画角の十分広い距離画像センサやカメラや不図示のカメラを用いて、撮像画像からユーザの目の位置や人体の位置を検知することとする。検知したユーザの目の位置や人体の位置に基づいてジェスチャ反応領域を移動する方向を決定することとしてもよい。
第2の実施形態では、指先と操作平面の距離が大きくなる分だけジェスチャ反応領域の移動量を大きくすることとして説明した。しかし、指先と操作平面の距離が所定の距離よりも大きくなったときに、ジェスチャ検出領域の移動量をそれ以上大きくしないこととしてもよい。
また、ジェスチャ検出領域を移動するにあたり、他のオブジェクトの表示領域とジェスチャ領域が重複しないように制御することとしてもよい。たとえば、図10(a)においてオブジェクト804のジェスチャ反応領域1004が移動し、オブジェクト801の表示領域に重ならないよう制御することとしてもよい。
第2の実施形態では、ユーザの指先と操作平面の距離に応じて、ジェスチャ反応領域の位置を移動させる場合について説明した。第1、第2の実施形態を組み合わせることで、指先と操作平面の距離に応じてジェスチャ反応領域の位置と大きさを変化させることとしてもよい。
第2の実施形態では、操作平面を撮像した撮像画像から指先がひとつ検出された場合について説明した。図10(b)のように手806とは別の手1006が、操作平面204の別の辺(図では右側の辺)から挿入された場合について説明する。
図10(b)に示す状態において、カメラスキャナ101は手の侵入位置が点1023と点1025の2点であると判定する。したがって、カメラスキャナ101は図10(b)における操作平面下側と操作平面右側の両方にユーザがいると判定し、ジェスチャ領域を図10(b)の下側および、右側に移動させる。
カメラスキャナ101はジェスチャ反応領域を操作平面下側に移動させた1001から1005に加えて、操作平面右側に移動させた1007から1011をジェスチャ反応領域として設定する。
オブジェクト管理表には操作平面下側にジェスチャ反応領域を移動させたときのジェスチャ反応座標およびジェスチャ反応領域サイズにくわえ、操作平面右側に移動させたときのジェスチャ反応領域座標およびジェスチャ反応領域サイズを設定する。例えば図10(f)に示すオブジェクト管理表において、ID「1」のジェスチャ反応領域座標を(50、330)、(80、350)、ジェスチャ反応領域サイズ(W、H)=(100、20)、(100、20)のように設定する。図10(d)は図10(b)と対応しており、点1023と点1025から手が侵入した場合のジェスチャ反応領域を点線で示している。
メイン制御部402がホバー座標のX、Y成分が二つのジェスチャ反応領域のいずれかの領域内に含まれているかを否か判定し、ジェスチャ操作を受付けるか否かを判定する。
第2の実施形態では、指先と操作平面の距離に応じて決定される移動量に応じてオブジェクト表示領域を移動させたものをジェスチャ反応領域として設定する場合について説明した。図10(c)のように、上記の方法で決定される移動後のジェスチャ反応領域とオブジェクトの表示領域をあわせてホバー操作のジェスチャ反応領域と設定してもよい。図10(c)では、点線で書かれた1012から1016がジェスチャ反応領域としてオブジェクト管理表に記憶される。
第2の実施形態に示した処理を実行することで、ホバー操作時にユーザの指先が選択したいオブジェクトよりもユーザ側に近寄ってしまった場合にも、ユーザの操作したいオブジェクトを反応させることができる。
(第3の実施形態)
第1の実施形態では、ユーザの指先がタッチ閾値Thよりも高い位置にあるとき、すなわちホバー操作が行われているときに指先と操作平面の距離に応じて、ジェスチャ反応領域を変化させる場合について説明した。そして、第1の実施形態では、ユーザの指先はタッチ閾値よりも低い位置にある場合のオフセット量δhを0mm、すなわちオブジェクト表示領域とジェスチャ反応領域を同じにすることとして説明した。第3の実施形態では、ユーザの指先と操作平面の距離がタッチ閾値以下になった場合にも、オブジェクト表示領域よりも広い領域をジェスチャ反応領域とする場合について説明する。
図12では、ユーザがオブジェクト1209にたいしてタッチ操作を行うときの様子を横から見た図を示している。
カメラスキャナ101は指先の高さがタッチ閾値1203よりも低い位置にあることが検出されたときにタッチ操作を受付ける。
図12では、ユーザの指先が1205に示す軌道でオブジェクト1209に近づいている。タッチ操作が行われたと検出される点は1208であり、1208を操作平面に正射影した点は1206となる。これでは、ユーザがオブジェクト1209をタッチしようと指を動かしているにもかかわらず、指先の高さがタッチ閾値よりも低い位置にきても目的のオブジェクト1209をタッチ操作することができない。
そこで第3の実施形態では、タッチ操作についてもオフセット量を設定し、タッチ操作に反応するジェスチャ反応領域をオブジェクト反応領域よりも大きいものにする。
第3の実施形態にて行う処理について図11のフローチャートを用いて説明する。
図11のフローチャートに示す処理を実行するためのプログラムはHDD305に記憶されており、CPU302がそのプログラムを実行することで処理を実現する。
図11に示す処理のうち、S701、S702およびS704からS711は図7に示す処理と同様であるため説明を省略する。
S702において、メイン制御部402が操作平面204のユーザインターフェイスにオブジェクトが表示されていると判定した場合、メイン制御部402はジェスチャ認識部409においてタッチイベントが受信されたかを判定する(S1101)。
タッチイベントとは、図6に示す処理においてユーザの指先と操作平面204の距離が所定のタッチ閾値以下になったときに生じるイベントである。タッチイベントにはタッチ操作が検出された座標が直交座標系で記憶されている。
S1101においてタッチイベントが検出されなかった場合、メイン制御部402はS711に処理を進め終了処理が実行されたかを判定する。
S1101においてタッチイベントが検出された場合、メイン制御部402はタッチイベントから指先の高さ、すなわちZ方向の情報を取得する(S704)。
メイン制御部402はS704において取得した高さに応じて、ジェスチャ反応領域のオフセット量δtを算出する(S705)。第3の実施形態ではジェスチャ反応領域δtを算出するための式として以下の式を用いる。
δt1は式の切片であり、ユーザの指先が操作平面204に接触しているときのオフセット量である。オフセット量δt1が正の値あることで、タッチ反応領域は常にオブジェクト表示領域よりも大きく設定することができる。
指先と操作平面204の距離が大きくなるにつれてオフセット量δtが大きくなるようにするため、cは正の定数である。
メイン制御部402がジェスチャ反応領域を算出した後の処理については図7に示す第1の実施形態と同様であるため、説明を省略する。
図11では、指先がタッチ閾値よりも低い高さになったときに、タッチ操作の行われている指先と操作平面の距離に応じてジェスチャ反応領域を変化させる場合の処理を説明した。
タッチ操作時のジェスチャ反応領域の決定の仕方は上記の方法に限らない。例えば、予め、タッチ閾値に応じたオフセット量を決定しておき、タッチイベントを検出したことに従って、予め決められたジェスチャ反応領域を反映することとしてもよい。
また、図11に示す処理のS705において、タッチイベントから検出される指の高さではなく、タッチ閾値の値を用いてオフセット量δtを算出して、算出されたオフセット量をオブジェクト管理表に反映することとしてもよい。この場合、オフセット量δtは毎回所定の値となる。タッチ閾値の値を用いてオフセット量を設定する場合は、予めタッチ閾値を用いて算出されるオフセット量δtを情報処理装置内に記憶しておいてもよいし、タッチイベント受信時にオフセット量δtを算出することとしてもよい。
本実施形態ではユーザの指先の高さがタッチ閾値以下の場合についてのみ説明したが、ユーザの指先の高さがタッチ閾値より高いとき第1の実施形態で説明した処理を行うこととしてもよい。このようにすることで、タッチ操作時とホバー操作時の両方でジェスチャ反応領域を変更することができる。
本実施形態では、タッチ操作の反応するジェスチャ反応領域の大きさを大きくする方法を説明したが、実施形態2と同様にしてタッチ反応領域をずらしてもよい。
第3の実施形態を実施することで、図12の1205に示すような軌道でユーザが指先を動かしてオブジェクトをタッチ操作しようとした場合に、ユーザの意図するオブジェクトを反応させることができる。
(第4の実施形態)
第3の実施形態では、ユーザの指先の高さがタッチ閾値以下になったときにタッチ操作を検出し、そのタッチ操作時の指先の高さからタッチ操作に反応するジェスチャ反応領域の大きさを決定する場合について説明した。
オブジェクトに指先を近づけてオブジェクトを触るタッチ操作に対して、接触したオブジェクトから指先を離すリリース操作がある。タッチ操作を検出するタッチ閾値とリリース操作を検出するリリース閾値を同じにしてしまうと、ユーザの指先がタッチ閾値に近い高さにあるときにタッチ操作とリリース操作が交互に連続して検出されてしまうことがある。ユーザがタッチ閾値付近で指を動かしているにも関わらず、タッチやリリースの操作が繰り返し交互に行われてしまうと、プロジェクタ207によって表示される表示が連続してい切り替わってしまい、表示が見えにくくなってしまう。上記のような現象をチャタリングと呼び、チャタリングを解消するためにタッチ閾値とリリース閾値を異なる高さに設けることが提案されている。
第3の実施形態では、タッチ閾値に加え、リリース閾値があるときのカメラスキャナ101の処理について説明する。
図14(a)に操作平面上の指先の動きとタッチ閾値、リリース閾値の関係についての模式図を示す。
図14(a)において、1203がタッチ閾値、1403がリリース閾値である。ユーザの指が軌道1205に沿って操作平面204に近づき、軌道1205に沿って操作平面204から指先が離れたときの動作を例に説明する。
ユーザが指先を操作平面204に指先を近づけると、指先が1208の位置に到達したときにタッチ操作が検出される。一方で、ユーザが指先を軌道1205に沿って操作平面204から遠ざけるとき、指先が1405の位置に到達したときに、リリース操作が検出される。図14(a)ではリリース閾値の方がタッチ閾値よりも操作平面から離れた位置にあるため、リリース操作検出時のジェスチャ反応領域がタッチ操作検出時のジェスチャ反応領域よりも大きくなるように設定する。このようにすることで、指先を操作面に接触させた後に、指先が操作面上で少し移動してしまった場合にも、タッチしたオブジェクトに対するリリース操作であると情報処理装置が判定することができる。
第4の実施形態では、タッチ操作、ホバー操作、リリース操作の3種類のジェスチャ操作がジェスチャ認識部409において認識される。ジェスチャ認識部409は図6に示すフローチャートに係る処理を実行する。ここで、第1の実施形態と異なる部分のみ説明する。
S601〜S603、S605は第1の実施形態と同様の処理であるため説明を省略する。
S604において、ジェスチャ認識部409はタッチ操作、ホバー操作、リリース操作、またはジェスチャ操作なしのいずれが行われているかを判定する。
S641、S642、S646において、ジェスチャ認識部409の行う処理は第1の実施形態と同様である。
S643において、ジェスチャ認識部409は算出した距離が次のいずれであるかを判定する。検出した距離がタッチ閾値以下の場合、ジェスチャ認識部409は処理をS644に進め、タッチ操作を検出する。検出した距離がリリース閾値よりも大きい場合、ジェスチャ認識部409は処理をS645に進めジェスチャ認識部409はホバー操作を検出する。検出した距離が、タッチ閾値よりも大きくリリース閾値以下の場合、ジェスチャ認識部409は、リリース操作を検出する(不図示)。ジェスチャ操作検出後の処理は第1の実施形態と同様であるため、説明を省略する。
図13にタッチ閾値とリリース閾値を有する場合のカメラスキャナ101の実行する処理を表すフローチャートを示す。図13に示す処理を実行するためのプログラムはHDD305に記憶されており、CPU302が上記のプログラムを実行することにより処理を実現する。
S701、S702、S704からS711は図7に示す処理と同様であり、SS1101に示す処理は図11に示す処理と同様であるため、説明を省略する。
S1101において、メイン制御部402がタッチイベントを受信しなかった場合、メイン制御部402はリリースイベントを受信したか否かを判定する(S1301)。リリースイベントとはユーザの指先の高さがリリース閾値1403よりも低い位置にある状態からリリース閾値1403よりも高い位置に変化することにより発生するイベントである。リリースイベントにはリリース操作が検出された位置の座標が直交座標系であらわされている。
メイン制御部402は、リリースイベントを受信した場合、S704に進みリリースイベントから指先の高さを取得する。リリース操作が行われたときのリリース操作位置はリリースイベントを表す直交座標系のZ座標の値である。
メイン制御部402は、指先の高さに応じてオフセット量を算出する(S705)。ジェスチャ反応領域の算出に用いる式は第1の実施形態や第3の実施形態に表されるような単調増加の一次関数の式である。比例定数は第1の実施形態の式(4)のaや第3の実施形態の式(6)のcと異なる値であってもよい。
S705において求められたオフセット量を基にジェスチャ反応領域を設定する(S706)。以下の処理は図7と同じであるため説明を省略する。
S1301において、リリースイベントを受信していなかった場合、メイン制御部402はホバーイベントを受信したか否かを判定する(S703)。ホバーイベントを受信していた場合、メイン制御部402は受信したホバーイベントに従ってS704以下の処理を実行する。
タッチ閾値とリリース閾値を別にし、それぞれの操作が行われたときにジェスチャ反応領域を設定することで、タッチ、リリースがどのオブジェクトに対して行われたものであるかを判定することができる。
図13では、リリース操作の行われたときの指先の高さに応じて、ジェスチャ反応領域を変化させることとして説明した。リリース操作がおこなわれたときに、リリース閾値の値によって決められるジェスチャ反応領域を反映して、どのオブジェクトに対してリリース操作が行われたかを判定してもよい。
図13では、ジェスチャ認識部409によって認識されたジェスチャがタッチ操作またはリリース操作であったときの場合について説明した。ユーザの指先の高さがリリース閾値よりも高かった場合に、ジェスチャ認識処理部がホバーイベントを受信し、第1の実施形態に従ってその指先の高さに応じてジェスチャ反応領域を変化させることとしてもよい。
図13では、指先の高さに応じてジェスチャ反応領域の大きさを変化させる場合について説明した。しかし、第2の実施形態のように、指先の高さに応じてジェスチャ反応領域を移動させることとしてもよい。
本実施形態では、タッチ閾値より高くリリース閾値以下の高さに指先があるときに、リリース操作が行われていることとして説明した。ジェスチャ認識部がリリース閾値以下の高さに指先がある状態からリリース閾値以上の高さに指先が移動したことを検知した場合にリリース操作が行われたと判断することとしてもよい。
以上の処理により、リリース閾値がタッチ閾値より高く、ユーザの意図した位置から、タッチ位置よりリリース位置の方が大きくずれてしまう場合でも、ユーザの意図通りにタッチ、リリース両方のイベントをオブジェクトに対して通知することが可能となる。
(その他の実施形態)
第1から第4の実施形態では、ユーザが指で操作をする場合について説明した。ユーザが指で操作を行わなくても、タッチペン等を用いて操作することとしてもよい。
第1から第4の実施形態では、タッチ閾値以下の領域に指先があるときにタッチ操作が行われるとして説明した。タッチ閾値以上の高さに指先がある状態からタッチ閾値以下の高さに指先がある状態へ移行したときにタッチ操作が行われたとしてジェスチャ認識部409がタッチイベントを通知することとしてもよい。
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。この場合、そのコンピュータプログラム、及び該コンピュータプログラムを記憶した記憶媒体は本発明を構成することになる。