以下、本発明の実施形態について図面を参照して詳細に説明する。なお、以下で説明する実施形態は、本発明を具体的に実施した場合の一例を示すものであり、これに限るものではない。
<第1の実施形態>
第1の実施形態として、平面上に物体が載置された状態で、平面上および物体上の両方に対するタッチ操作が認識される例を説明する。特に、本実施形態に係る情報処理装置では、平面上および物体上の両者を経由するドラッグ操作を認識可能とする。なお、本実施形態では、情報処理装置に対する操作を行う指示部として認識すべき認識対象の一例として、ユーザの手及びその指先を挙げて説明する。ただし、本実施形態は認識対象をスタイラスペンや差し棒などの操作器具に置き換えても適応可能である。
図1(A)は、本実施形態で説明する情報処理装置100を設置したシステムの外観の一例を示している。図1(A)に示すように情報処理装置100には投影装置105が搭載されており、自由に投影対象とする面を設定できる。テーブル101上には物体102が置かれている。の例の場合は、情報処理装置100を、テーブル101の上面および物体102の上面に対して投影ができるように設置していることを示している。ここで、図1(A)の103a〜dは、投影装置105によってテーブル上面および物体上面に投影された電子データやボタンなどUIを構成する部品(以下、まとめて表示オブジェクトと記載する)を示している。本実施形態では、テーブル101に載置された物がない初期状態では、テーブル101表面がタッチ対象面となり、テーブル101に物が載置されている場合は、テーブル101および載置された物の上側の面がタッチ対象面である。初期状態におけるタッチ対象面を、基準面といい、情報処理装置100は、認識対象と基準面との距離に基づいて、タッチ対象面が認識対象によってタッチされているかを判断する。本実施形態では、ユーザが手指104を使ってタップ操作やドラッグ操作を行い、前記表示オブジェクトに対して入力操作を行う場合について説明する。なお、本実施形態において、ドラッグ操作とは、単に指示位置が移動される操作と、移動が開始されたときの指示位置に表示されているオブジェクトを移動させる操作とを総称するものである。一般に、これらを区別する場合には、単に指示位置が移動される操作はムーブ操作と表現される。また本実施形態ではテーブル101および物体102に投影対象とする例を述べるが、投影対象はテーブルおよびそこに置かれた物体以外でもよい。例えば壁およびそこに張り付けられた物体に投影して利用しても構わない。また、投影対象面自体が凹凸を有ししている場合にも利用可能である。本実施形態の情報処理装置100には、投影装置105の他に、赤外光発光部106と赤外カメラ107が搭載されている。赤外光発光部106から照射された赤外光はテーブル101と物体102およびユーザの手指104に反射し、赤外反射光として赤外カメラにおいて撮像される。情報処理装置100は、この赤外画像を各種画像処理することによってタッチ対象面となるテーブル上面と物体上面の表面形状(凹凸状態)および認識対象となる手指の三次元位置を計測し、その結果からタッチ判定を行う。可視光カメラ108は、テーブル上に載置された物体や紙媒体等の読み取り対象を読み取った読み取り画像を撮像する。
本実施形態では、赤外光発光部106と赤外カメラ107を利用して、テーブル上面と物体上面からなるタッチ対象面の三次元位置および手指の三次元位置を計測する方法について記載する。しかし、タッチ対象面の三次元位置および手指の三次元位置を計測する方法はこの限りではなく、代わりにステレオカメラや距離画像センサを利用することで、三次元位置を計測する方法を適応することも可能である。
図1(B)は、本実施形態における情報処理装置100のハードウェア構成図である。同図において、CPU110は、バス113を介して接続する各デバイスを統括的に制御する。CPU110は、読み出し専用メモリ(ROM)112に記憶された処理ステップやプログラムを読み出して実行する。オペレーティングシステム(OS)をはじめ、本実施形態に係る各処理プログラム、デバイスドライバ等はROM112に記憶されており、ランダムアクセスメモリ(RAM)111に一時記憶され、CPU110によって適宜実行される。RAM111は、高速にアクセス可能なCPU110の主メモリ、ワークエリア等の一時記憶領域として用いられる。ここでOSおよび各処理プログラム等は図示されていない外部ストレージに記憶されていてもよく、その場合は電源投入時にRAM111に適宜読み込まれ、CPU110によって起動される。また、ディスプレイI/F114は、情報処理装置100内部で生成される表示オブジェクト(表示画面)を投影装置105が処理可能な信号に変換する。入力I/F115は、赤外カメラ107が生成する赤外画像を入力信号として受信し、情報処理装置100が処理可能な情報に変換する。出力I/F116は、情報処理装置100内部で生成される赤外発光命令を赤外光発光部106が処理可能な信号に変換する。さらに、可視光カメラ108は、本実施形態ではタッチ対象面を上から撮像するように設置され、主に操作エリアに載置されたドキュメントに対する書画カメラの役割を果たす。具体的には、所定の面に載置された紙媒体や物体等、認識対象以外のオブジェクトの、カメラ108に向けられた面を可視光撮影し、その撮像画像を取得する。これを本実施形態では、読み取り対象を「読み取る」という。読み取りによって得られた撮像画像は、読み取り対象物以外の部分を除いた画像や、操作によって指示された部分だけが抽出された部分画像として加工され、読み取り画像として記憶される。本実施形態では、情報処理装置100で投影するデジタルデータは図示されていない外部ストレージに格納されている。さらに、読み取りによって得られた読み取り画像は、外部ストレージに記憶される。外部ストレージとしては、ディスクデバイスやフラッシュメモリ、ネットワークやUSBなどの各種I/Fを介して接続される記憶装置が考えられる。また、赤外カメラ107で生成された赤外画像データはRAM111で一時保存され、CPU110によって適宜処理され、破棄される。ただし、適宜必要なデータは図示されていない外部ストレージに蓄積しても構わない。
図2(A)は、本実施形態における情報処理装置100の機能ブロック図である。情報処理装置100は、画像取得部200、面情報取得部201、位置検出部202、設定部203、最大値取得部204、タッチ判定部205、特定部206、表示制御部207、読み取り制御部208から構成される。これらの各機能部は、CPU110が、ROM112に格納されたプログラムをRAM111に展開し、後述する各フローチャートに従った処理を実行することで実現されている。また例えば、CPU110を用いたソフトウェア処理の代替としてハードウェアを構成する場合には、ここで説明する各機能部の処理に対応させた演算部や回路を構成すればよい。
画像取得部200は、赤外カメラ107で撮像されたタッチ対象面の赤外強度画像を、入力画像として取得する。本実施形態では、情報処理装置100は、起動されている(電源がONである)間は、赤外光発光部106から投影装置105の投影方向と同じ方向に赤外光を常時照射する。投影装置105の投影範囲にあるテーブル上に物体が置かれると、赤外光はテーブル101の表面および物体表面からなるタッチ対象面で反射される。またさらに、タッチ対象面と赤外カメラ107の間の空間にユーザの手などの認識対象が挿入された場合には、認識対象の表面によって反射される。赤外カメラ107は、このように反射された赤外光を撮像し、赤外強度画像を得る。以後、この赤外強度画像を入力画像として記載する。
面情報取得部201は、画像取得部200にて取得した入力画像を基に、タッチ対象面で反射された赤外光の強度を解析することによって、タッチ対象面の表面形状を示す情報を取得する。タッチ対象面の表面形状情報とは、タッチ対象面の表面上の各点の三次元座標情報であり、少なくともタッチ対象面上の各点と基準面に交わる方向の高さ情報を含む。赤外カメラ107に撮像される強度画像の各画素は、赤外光の輝度値に相当する。赤外反射強度は、輝度値が大きいほど反射光が強い、すなわち赤外光発光部106に近い位置で反射されたと言え、輝度が小さいほど反射光が弱い、すなわち赤外光発光部106に遠い位置で反射されたと言える。従って本実施形態では、このように赤外光の輝度値を、赤外光発光部106との距離の情報として利用する。つまり、入力画像は距離画像として扱われる。面情報取得部201は、入力画像の画素の位置と輝度値を基に、タッチ対象面の各点の、基準面に平行な二次元面における座標と高さ情報(高さ方向の座標軸における座標)を取得する。
位置検出部202は、認識対象によって指示される指示位置を示す三次元位置情報を検出する。本実施形態では、画像取得部200が取得した入力画像から、背景差分法あるいはフレーム間差分法などにより動体が写る領域を抽出する。本実施形態では、認識対象として人の手指を認識するので、動体領域が、予め記憶された人の手の形状モデルと類似する場合に認識対象として認識し、指先とみなされる位置の座標、指示位置として検出する。タッチ対象面に平行な二次元面における座標は、入力画像の画素の位置から、高さ方向の情報は、指先とみなされる位置周辺で反射された赤外光の輝度値の値から導出される。以下では、指示位置の3次元座標を検出することを、単に「指示位置を検出する」と記載する。なお、動体の検出方法、及び人の手の認識方法、指先の検出方法は、ここで例示したものに限らない。
設定部203は、認識対象によってタッチ対象面がタッチされていると決定する(タッチ状態と非タッチ状態を区別する)ための条件となる、基準面からの高さの閾値を設定する。本実施形態では、閾値は、面情報取得部201で取得したタッチ対象面の表面形状を示す情報と、位置検出部202で検出した指示位置、および、特定部206によって特定される現在継続中の操作種別とに基づいて設定される。本実施形態の設定部203は、タッチ対象面の表面の高さに一定値を加算した高さを、基準の閾値として設定する。さらに、ユーザがドラッグ操作中の場合には、各時点までのドラッグ操作の経路(認識対象が移動してきた経路)上で最大の高さを有する点に設定された基準の閾値を、その後のタッチ判定に用いる閾値として設定する。ドラッグ操作中以外の場合には、基準の閾値を使ってタッチ判定が行われる。そこで本実施形態の設定部203は、最大値取得部204を備える。最大値取得部204は、ユーザがドラッグ操作中の場合に、当該ドラッグ操作のそれまでの経路上で設定された基準閾値のうちの最大値を取得する機能をもつ。
タッチ判定部205は、位置検出部202で検出したと、設定部203で設定した基準面からの高さとを利用して、認識対象によってタッチ対象面がタッチされているか否かの判断、すなわちタッチ判定を行う。具体的には、指示位置の高さが、その位置に設定された基準面からの高さの閾値よりも小さい場合には、認識対象はタッチ対象面をタッチしているタッチ状態、閾値よりも大きければタッチしていない非タッチ状態であると判定する。つまり、本実施形態では、認識対象が実際にタッチ対象面に接触しているかに関わらず、認識対象が所定の条件を満たすだけタッチ対象面に近接した状態にあることが認識できたことをもって、認識対象がタッチ対象面にタッチしているとみなす。そして、その状態において行われる操作をタッチ操作と表現する。ただし、実際にはタッチ対象面をタッチせず、近接した状態で行われる操作(ホバー操作と呼ばれる)を認識する場合にも、条件の程度を変化させることで、本発明を適応し、高さが一様ではない面に対する操作の誤認識を低減することができる。本実施形態では、指示位置の高さが、その位置に設定された基準面からの高さの閾値と一致する場合は、タッチ状態であると判定するが、これに限らない。高さの閾値に対して、指示位置の高さが閾値未満の場合にタッチ状態と判定されるか、閾値以下の場合にタッチ状態と判定されるかは適宜選択されればよい。
特定部206は、タッチ判定部205で、タッチ状態と判定されている間の指示位置の動き、及びタッチ状態と非タッチ状態とが反転するタイミングに基づいて、ユーザが情報処理装置100に入力するタッチ操作の種別を特定する。本実施形態では、少なくともタップ操作とドラッグ操作とを区別して特定する。そして、特定された種別を示すイベントと、種別を特定する根拠となった指示位置の情報とを、表示制御部207や読み取り制御部208等に通知する。従って例えば、タップ操作が入力された位置に、装置に対して読み取りの実行を指示するコマンドが発生するような操作に関わるUI部品が投影されていれば、当該コマンドが発生され、読み取り制御部208に伝えられる。また、UI部品が移動するドラッグ操作が入力されれば、UI部品を移動して投影させるべき位置が表示制御部207に伝えられる。
表示制御部207は、特定部206が特定したタッチ操作に対する情報処理装置100の応答をユーザに提示するため、投影装置105に投影させる表示画像を生成し、投影装置105に出力する。
読み取り制御部208は、ユーザ操作に応じて可視光カメラ108を制御し、読み取りのための撮像を行わせるタイミングや、読み取り対象へのフォーカスやズームレベルを調整する。
以下、本実施形態における情報処理装置100が実行する処理の流れを図3、図4のフローチャートを用いて詳細に説明する。図3は、情報処理装置100が実行するタッチ操作の認識処理の一例を示すフローチャートである。本実施形態では、上述したように、情報処理装置100の電源が起動されている状態では、常に入力画像の撮像が行われており、連続して撮像された画像同士の比較からテーブル上に何かしらの変化が生じたことを認識可能な状態にある。本実施形態では、ユーザによってテーブル101上に物体102が置かれたことで初期状態(テーブル上に何も置かれていない状態)に対して変化が生じたことに応じ、図3のフローチャートが開始される。また、別途置かれたものが何かを認識する処理を実行し、認識結果に応じた投影UIを表示させるなどした状態で、フローチャートを開始してもいい。
まず、ステップS100において、画像取得部200が、赤外カメラ107によって撮像された入力画像を取得する。なお、ここで取得する入力画像は、赤外光発光部106によって情報処理装置100からテーブル101方向に照射された赤外光が、テーブル101および物体102の表面で反射された赤外反射光を、赤外カメラ107によって撮像した画像である。本実施形態では、情報処理装置100が起動している間は常に入力画像の撮像が行われているため、ステップS100の処理は、撮像されている映像のうち、その時点での最新のフレームに相当する静止画像を取得することを示す。
ステップS101において、面情報取得部201が、ステップS100にて取得したタッチ対象面の赤外強度画像からタッチ対象面の表面形状を示す情報を取得する。表面形状を示す情報には、少なくともタッチ対象面の表面の高さ情報が含まれる。本実施形態では、テーブル上面の一点を基準点(原点)とした場合の、タッチ対象面の各点の三次元座標を、表面形状を示す情報とする。三次元座標情報は、タッチ対象面の全xy座標について、赤外強度画像の対応する画素の輝度から変換式を利用するなどしてz方向の垂直距離を算出することによって取得する。本実施形態では、図1(A)に示されるように三次元の座標軸が設定されているものとする。
本実施形態では、以下に示すステップS102からステップS108を繰り返して操作種別の特定を行う。以下、ステップS102からステップS108までの一連の処理を、特定シーケンスとして記載する。
まず、ステップS102において、画像取得部200が、入力画像を取得する。ステップS102で入力画像を取得する目的は、認識対象であるユーザの手を検出することである。本実施形態では、ステップ100と同様ステップS102の処理は、赤外カメラ107で常時撮像されている映像のうち、その時点での最新のフレームに相当する静止画像を取得することを示す。
次に、ステップS103において、位置検出部202が、ステップS102にて取得した入力画像から指示位置を検出する処理を行う。そして、指示位置が検出されたか(検出に成功したか)を判定する。本実施形態では、背景差分法を用い、例えばステップS100で取得した入力画像(ユーザの手が写っていないものとする)と、ステップS102で取得した入力画像の差分となる領域を抽出する。さらに、抽出された領域の形状と人の手のモデルとのマッチングを取る。マッチング処理の結果、抽出された差分領域が、1本だけ指を伸ばした人の手であるとみなされる場合、そのうち延ばされた指先の位置を、指示位置として検出する。なお、例えば抽出された領域のうち、赤外カメラ107の撮影範囲の外郭から最も遠い点を、指示位置として検出するなどの方法を用いても良い。検出処理の結果、指示位置が検出された場合(ステップS103でYES)はステップS104に進む。指示位置が検出された場合(ステップS103でNO)はステップS105に進む。
ステップS104において、設定部203が、タッチ判定処理に用いる指示位置の高さの閾値(タッチ判定閾値HT)を設定する。本実施形態では、ステップS103にて検出した指示位置のxy座標と、ステップS101にて取得したタッチ対象面の表面形状を示す情報、および、前回までのタッチ操作の認識結果から現在ドラッグ操作中であるか否かを示す情報を利用して閾値を設定する。本実施形態の設定部203はまず、タッチ対象面の各点におけるタッチ判定で使用される高さ閾値は、当該点におけるタッチ対象面の表面の高さに一定値を加算した値を基準の閾値と設定する。さらに、設定部203は、ドラッグ操作中の状態では、ドラッグ操作の経路の各点において設定された基準の閾値のうち、最大の閾値を、実際のタッチ判定で使用する閾値として設定する。タッチ判定の閾値設定処理の詳細は後述する。
ステップS105では、タッチ判定部205が、ステップS103で検出した指示位置と、ステップS104で設定したタッチ判定閾値HTを用いてタッチ判定処理を行う。具体的には、指先が検出されており、かつ指示位置のz座標がH以下であるならば「タッチ状態」と判定し、それ以外であれば「非タッチ状態」と判定する。本実施形態のタッチ判定部205は、タッチ判定を行うたびに、タッチ判定の結果と、判定の根拠となった指示位置の位置情報をRAM111に保持する。そして少なくとも、最新の2回分のタッチ判定の結果と、判定結果の根拠となった指示位置の位置情報を蓄積する。本実施形態では、最新の2回分のタッチ判定結果のうち、最後の判定結果が「タッチ状態」で、その直前の判定結果が「非タッチ状態」であった場合は、その時点でタッチ操作が開始されたとみなす。その場合、RAM111において、最後の判定結果の根拠となった指示位置の情報を「タッチ開始位置」であることを示す情報とともに保持する。タッチ開始位置の位置情報は、最新の2回分のタッチ判定に関する情報とは別に、開始されたタッチ操作が終了されるまで保持され続ける。
ステップS106では、特定部206が、ドラッグ操作がなされている途中か否かを判定する。具体的には、まず、最後のタッチ判定の結果が「タッチ状態」であり、かつ、xy平面における、タッチ開始位置と最後に検出された指示位置の間の距離が、閾値D以下であれば、その時点は「ドラッグ操作がなされている途中である」と判定する。以下では、ドラッグ操作がなされている途中の状態を「ドラッグ中」、そうではない状態を「非ドラッグ中」と表記する。なお、閾値Dは、ユーザが、タッチ対象面にタッチした状態のまま、操作のために指を平行移動させたか否かを区別するための距離の閾値である。例えば、ユーザは、タッチ対象面上の同じ位置をタッチしている間でも、体が極小さく動いてしまうことがある。また、赤外発光部106と指の位置関係や赤外強度画像の解像度(分解能)によっては、認識対象の位置が固定されていても、検出される指示位置の位置に誤差が生じることがある。従って、そのような小さな体の動きや、検出の誤差による指示位置の変化と、ユーザが意思をもって指を動かしたことによる指示位置の平行移動とを区別するために、閾値Dによる判定を行う。つまり本実施形態では、タッチ対象面上をタッチした指を、タッチ状態のまま閾値D以上の距離平行移動させない限り、ドラッグ操作は認識されない。本実施形態の特定部206は、タッチ判定の結果が「非タッチ状態」から「タッチ状態」に移行してから初めて「ドラッグ操作がなされている途中である」と判定された場合、ドラッグ操作の開始直後であることを示す情報をRAM111に保持する。例えばフラグ等の情報として、前回の判定結果が「非ドラッグ中」であり、かつ今回の判定結果が「ドラッグ中」である場合、例えばドラッグ開始フラグを「1」と設定して保持し、それ以外の場合はフラグを「0」に設定する。なおこの情報は、後述する閾値設定処理において使用される。
次に、ステップS107において、特定部206が、ユーザによって入力された操作を特定する。本実施形態では、これまでのステップS105及び、ステップS106の処理においてRAM111に蓄積された情報に基づいて操作種別を判定する。例えば、最新の2回分のタッチ判定の結果が「非タッチ状態」であれば「操作なし」、すなわち情報処理装置100に対してタッチ操作は入力されていないと特定する。また、最後のタッチ判定結果が「非タッチ状態」であって、その直前のタッチ判定結果が「タッチ状態」で「非ドラッグ中」と判定されていた場合、特定部206は、情報処理装置100に対してタップ操作が入力されたと特定する。また例えば、最後のタッチ判定結果が「タッチ状態」で、「ドラッグ中」であると判定されていれば、情報処理装置100には「ドラッグ操作」が入力されていると特定する。最後のタッチ判定結果が「非タッチ状態」で、その直前のタッチ判定結果が「タッチ状態」でかつ「ドラッグ中」であると判定されていれば、情報処理装置100入力された「ドラッグ操作終了」したと特定する。最後のタッチ判定結果が「タッチ状態」であって、その直前のタッチ判定結果が「タッチ状態」で「非ドラッグ中」と判定されていた場合、特定部206は、「タップ操作中」とみなす。ただし、この後で指示位置が平行移動される可能性があるため、「タップ操作中」という状態は、タップあるいはドラッグ操作が開始された直後を示す。従って、特定部206によって「タップ操作中」であると特定された後で、「ドラッグ中」と判定されることがあれば「ドラッグ操作」が、「ドラッグ中」と判定されることなく「非タッチ状態」に移行すれば「タップ操作」が最終的に特定される。本実施形態では、特定部206が、特定した操作種別、および操作状態に応じたイベントと、最後に検出された指示位置の位置情報とを、表示制御部207や読み取り制御部208の、情報処理装置100の出力を制御する機能部に通知する。
ステップS108では、情報処理装置100の出力を制御する機能部が、入力された操作に対して応答する。例えば、ステップS107において「ドラッグ操作中」と特定された場合、表示制御部207が、ドラッグ操作に応じて表示オブジェクトが移動されるように表示するための表示画像を生成し、プロジェクタ104に出力する。また例えば、「タップ操作」が特定され、その位置が情報処理装置100に読み取りを実行させるコマンドに相当するGUIのUI部品の位置であった場合、読み取り制御部208が、可視光カメラ108を制御して読み取り画像を取得する。
ステップS109において、情報処理装置100が、この時点でのタッチ対象面に対するタッチ操作認識処理を継続するか否かを判定する。具体的には、ユーザのタップ操作によって、「操作終了指示」のコマンドが入力されたかを検出する。処理を継続すると判定される場合(ステップS109でNO)はステップS102へ戻る。処理を継続しないと判定された場合と判定される場合(ステップS109でYES)、上記処理を終了する。また例えば、ユーザのタップ操作によって「リセット」のコマンドが入力された場合には、ステップS100に戻って図3のフローチャートを繰り返してもよい。この場合、ユーザがタッチ対象面に変更を加えても(物体を取り除く、あるいは変える等)新たに表面形状の情報を取得して、適切なタッチ判定の閾値を設定することができる。また、電源がOFFされた場合には、タッチ操作認識処理のどの段階にあっても、全ての処理を中断する。
次に、図4のフローチャートを用いて、ステップS104において実行される閾値設定処理を詳細に説明する。
まず、ステップS104のタッチ判定の閾値設定処理が開始されると、ステップS200において、設定部203が、ステップS103において検出された指示位置に相当するタッチ対象面の高さHOFを取得する。具体的には、ステップS101にて取得された、タッチ対象面の表面形状を示す情報から、ステップS103にて検出した指示位置のxy座標対応する座標のz座標の値を取得し、これを指示位置におけるタッチ対象面高さHOFをとする。
次に、ステップS201において、設定部203が、ステップS103において検出された指示位置におけるタッチ判定の基準の閾値HTFを取得する。本実施形態では、ステップS200にて取得した指示位置におけるタッチ対象面高さHOFに一定の値を加算することにより、指示位置におけるタッチ判定閾値HTFをする。ただし、HOFを変数とする他の変換式を用いたり、ルックアップテーブルを参照したりすることにより、基準となる閾値を取得してもかまわない。
ここで、本実施形態において設定される基準の閾値HTFの例を、図5を用いて説明する。図5の(A)および(B)は、それぞれ、図1(a)に示すテーブル101と物体102の表面をタッチ対象面とする場合に設定される閾値の分布を、z軸、x軸、y軸それぞれの方向から見た様子を示す。
図5(A)の例では、指示位置におけるタッチ対象面高さHOFに一定値を加算した値を指示位置におけるタッチ判定の基準閾値HTFとしている。つまり、テーブル101上では、テーブル上面から一定の高さ上方を、タッチ判定閾値500a、物体102上では物体上面から一定の高さ上方を、タッチ判定閾値500bと設定する。このように基準となる閾値HTFを設定した場合、物体上でのタップ操作は、テーブル上でのタップ操作よりも物体の高さの分大きな閾値に基づいて判定されるので、物体を置いたことでタップ操作が認識されなくなるといった問題を生じさせない。
図5(B)の例では、ステップS103で検出された指示位置の周囲の複数の点について、タッチ対象面の高さHOFを取得し、それらの平均値に一定値を加算することで、基準閾値HTFを設定している。この場合、物体の境界付近においても、閾値HOFの大きさが連続となったタッチ判定閾値510を設定できる。従って物体の境界付近の指示位置が、検出誤差や指の微小な動きなどにより物体の境界をまたぐようにぶれたとしても、安定したタッチ判定の結果を得ることができるという効果がある。
タッチ判定の基準となる閾値の設定方法として2つの例を示したが、方法はこの限りではなく、タッチ対象面情報から各種変換式等を用いて様々なタッチ判定閾値を導出することができる。
ここまで、指示位置xy座標から一意に導出できる閾値HTFを基準閾値と取得することを説明した。取得した基準閾値を、実際にタッチ判定に用いる閾値として設定することで、高さが一様ではないタッチ対象面に対するタッチを判定することができる。なお、さらにその他の条件に応じで、実際にタッチ判定に用いる閾値を選択的に設定することもできる。本実施形態では、続くステップS202〜ステップS208において、前回の操作特定シーケンスにおけるタッチ判定結果やドラッグ判定結果に応じて、実際にタッチ判定に用いる閾値HTFを切り替える。
本実施形態では、前回の操作シーケンスのステップS106において、「非ドラッグ中」と判定された場合には、基準閾値として設定された閾値に基づいてタッチ判定を行う。そして「ドラッグ中」と判定されていた場合には、ドラッグ操作のそれまでの経路において設定されていた基準閾値のうち、最大の値を、実際にタッチ判定に用いる閾値として設定する。つまり、認識対象(ここでは指先)が移動してきた経路上で、タッチ対象面の高さが最大となった位置での基準閾値を、実際にタッチ判定に用いる閾値として設定する。これにより、テーブル上と物体上の両方を経由するドラッグ操作中において、意図に反して指先がタッチ対象面から大きく離れてしまうことで、ドラッグ操作が中断されてしまうという問題を回避できる。
本実施形態では、ステップS201において指示位置のタッチ判定の基準となる閾値HTFを取得すると、次にステップS202において、設定部203が、ドラッグ操作中か否かを判定する。すなわち、認識対象がタッチ対象面をタッチしたまま移動しているか否かを判定する。この判定は、前回の操作特定シーケンスのステップS106にて判定したドラッグ判定結果の参照によって行う。ドラッグ判定結果が「ドラッグ中」の場合はステップS203へ進み、「非ドラッグ中」の場合はステップS208へ進む。
ステップS203では、最大値取得部204が、ドラッグ開始直後か否かの判定を行う。この判定は、前回の特定シーケンスのステップS106にて設定、保持した、ドラッグ開始直後か否かを示すフラグなどの情報の参照によって行う。ドラッグ開始直後であればステップS204へ進み、ドラッグ開始直後でなければステップS205へ進む。
ステップS204では、最大値取得部204が、RAM111に保持されている最大閾値HTMAXの値を初期化する。ここでは、以降のステップで必ず更新されるよう、例えば0などの値で初期化する。
ステップS205では、最大値取得部204が、ステップS202で取得された基準の閾値HTFと、RAM111に保持されている最大閾値HTMAXの大きさを比較し、基準閾値の方が大きいかを判定する。ステップS103で検出された指示位置での基準閾値HTFが最大閾値HTMAXより大きいと判定された場合(ステップS205でYES)はステップS206へ進む。指示位置での基準閾値HTFが最大閾値HTMAXより大きくないと判定された場合(ステップS205でNO)は、ステップS206を省略してステップS207に進む。
ステップS206では、最大値取得部204が、最大閾値HTMAXの値を指示位置での基準閾値HTFに更新する。
ステップS207では、設定部203が、実際にタッチ判定に使用する閾値HTとして、最大閾値HTMAXを設定する。これにより、本実施形態では、ドラッグ操作のそれまでの経路において、タッチ対象面が最大の高さとなる点での基準閾値を、タッチ判定をするための閾値として使用することになる。これにより、例えばユーザの指先が、物体上を経てテーブル上までドラッグ操作を行う際に、物体の境界を越えたことで突然タッチ対象面から指先が離れてしまったとしても、ドラッグ操作の認識が中断されることがない。
一方、ステップS208では、設定部203が、実際にタッチ判定に使用する閾値HTとして、ステップS201で取得した基準の閾値HTFを設定する。
ステップS207かステップS208のいずれかの閾値設定処理が完了したら、処理は図3のフローチャートにリターンする。
ここで、図6及び図7を参照して、本実施形態のようにドラッグ中か否かに応じて、選択的にタッチ判定の閾値を設定する処理の具体例と効果を詳しく説明する。
図6(A)〜(C)は、テーブル101の上面とテーブル上に置かれた物体102の上面とを含む、一様な平面でないタッチ対象面上でのドラッグ操作の様子を示す図(z軸に垂直な方向からみた断面図)である。ステップS201の処理で取得される基準閾値HTFは、基準面であるテーブル101上では閾値600a、物体102上では閾値600bとなる。なおここでは図5(A)のパターンで取得された基準閾値を例示するが、もちろん図5(B)やその他の方法によって設定された基準閾値であっても構わない。
図6(A)において、手指601a、601b、601c、601d、601e、601f、601gは、この順に動かされたユーザの手指104の位置を示す。指示位置602a、602b、602c、602d、602e、602f、602gはそれぞれ、手指601a、601b、601c、601d、601e、601f、601gのときに検出される指示位置である。図6(A)の場合、601c〜601eにかけて、テーブル101上から開始されて物体102上を経由するドラッグ操作が入力されている。ここで図7は、ドラッグ操作を行った際に取得できるデータと判定結果の一例を示す表である。図7(A)は図6(A)に示された操作例に対応する。
まず、手指601a及び手指601bの状態では、検出される指示位置602aの高さは閾値600aより大きいため、ステップS105のタッチ判定において「非タッチ状態」と判定される。タッチ判定結果が「非タッチ状態」であるため、ステップS106のドラッグ中か否かの判定において「非ドラッグ中」と判定され、結果としてステップS107の操作判定において「操作なし」と判定される。次に、手指601cの状態では、検出される指示位置602cの高さは閾値600aより小さいため、「タッチ状態」と判定される。また、この時点の指先位置が、タッチ開始位置として保持される。続くステップS106のドラッグ操作中かの判定においては、タッチ開始位置からの移動距離が0であるため「非ドラッグ状態」と判定され、結果としてステップS107の操作判定において「タップ中」と判定される。手指601dの状態でも、タッチ判定の結果は「タッチ状態」と判定される。このとき、タッチ開始位置から平行移動した距離は閾値Dより大きいとする。従って「ドラッグ中」と判定され、結果としてステップS107の操作判定において「ドラッグ中」と判定される。なお、手指601dの状態の直後、つまりドラッグ開始直後の操作特定シーケンスにおいて、最大タッチ判定閾値HTMAXは600aに設定されている。次に、手指601eの状態では、検出される指示位置602eの高さは閾値600bより小さいため、「タッチ状態」と判定される。さらに、ドラッグ操作は継続中であるため、当然、タッチ開始位置から平行移動した距離は閾値Dより大きく、「ドラッグ中」と判定される。さらに、この時点ではドラッグ開始直後ではないため、ステップS204はスキップされる。また、閾値600b>閾値600a=HTMAXであることから、ステップS206において最大タッチ判定閾値HTMAXが600bに更新される。従って、このドラッグ操作の過程において実際にタッチ判定に用いられる閾値は、図6(A)において実線で示される閾値600cとなる。続くステップS207にて、このあとドラッグ操作が継続されている間は、実際にタッチ判定に仕様する閾値HTとして最大タッチ判定閾値HTMAX=600bが設定される。続く手指601fの状態では、指示位置602fが閾値600bより小さいため、タッチ判定結果は「タッチ状態」、さらに「ドラッグ中」と判定される。最後に、手指601gの状態では、指示位置602fが閾値600bより大きいため、「非タッチ状態」と判定される。タッチ判定結果が「非タッチ」であるため、ステップS106のドラッグ判定にて「非ドラッグ中」と判定される。「非タッチ状態」で、前回が「ドラッグ中」であるので、結果としてステップS107の操作判定において「ドラッグ操作終了」と判定される。つまり、手指601fの状態から手指601gの状態の過程のタッチ判定結果が「タッチ状態」から「非タッチ状態」に変化した時点で、ステップS107の操作判定においてドラッグ操作の入力が特定される。従って1回分のドラッグ操作は終了したので、次にドラッグ操作が入力されるときにはHTMAXは初期化される。
このように、ユーザが物体上を経由したドラッグ操作を行う途中で、物体上からテーブル上にかけ移動した直後は、指先が直下のタッチ対象面から離れてしまう場面が生じ得る。本実施形態では、ドラッグ操作中は、当該ドラッグ操作の経路上でのタッチ対象面の最大の高さに基づき、タッチ判定の閾値を設定することで、このような場合でもドラッグ操作の認識が中断されてしまうことを防止することができる。従って、ユーザはドラッグ操作において、「タッチ対象面に指を沿わせる」ことを意識しなくてよいので、より操作性を向上することができる。
次に、図8、図9、図10を参照して、本実施形態を効果的に利用した情報処理装置100の具体的な操作例を説明する。図8、図9、図10は、情報処理装置100に対して行われる一連の操作のうち、特徴的な8つの段階でのテーブル101を、俯瞰して見た状態を示している。
まず、図8の状態800は、テーブル101の上に物体の一例として読み取り対象(一例として、新聞紙810)が載置された状態を表す。これ以降、この新聞紙810に対して、記事単位の読み取り画像を取得し、当該読み取り画像をA4の原稿にレイアウトしなおしたデータを生成するという機能を例に説明する。この機能により、実際に記事のスクラップをするよりも容易に、自分に必要な情報をみやすくまとめたデータを生成するという作業ができるようになる。ここで、新聞紙810は、ユーザにより、テーブル101上にユーザが読み取りたい記事と日付欄が見えるように配置される。
状態801は、テーブル101に置かれた物体102が、新聞紙810であることが認識されたのに応じて、テーブル101上で投影UIが構成された様子を示す。認識処理は、可視光カメラ108の撮像画像に基づいて、CPU110が行う。ここでは、読み取りを行う最大範囲を示す認識枠811、タップ操作により指示コマンドを入力するためのボタン812a、812b、812c、読み取りが完了した記事のサムネイル画像が配置されるトレイ813といった表示オブジェクトが投影される。ここで例えば、ボタン812aが、「ブロック分割の上読み取りを実行」コマンドに対応するUI部品であったとする。ボタン812aは、テーブル上に投影されている表示オブジェクトであるため、タッチ対象面は基準面となるテーブル上面になる。従って、図6の基準閾値600aのように、テーブル上面から一定の高さの閾値が設定され(ステップS208)、タッチ判定が行われる(ステップS105)。そして、タッチ状態にある間にユーザの指先がxy平面において閾値D以上の移動がなければ、タップ操作が認識される(ステップS107)。タップされた位置が、ボタン812aの表示範囲であれば、CPU110が可視光カメラ108に撮像された新聞紙810の画像を解析して、記事ごとにブロック化した上で、読み取りを行う。読み取り画像は、ブロック毎にトリミングされた状態で、メモリに保持される。
状態802は、ブロック化された記事毎の領域を囲むようにブロック枠814が投影表示された様子を示す。この状態において、ユーザにより、読み取りたい記事を囲む領域が、タップ操作されると、タップされたブロックの読み取り画像が、当該新聞紙810の同じブロックに重畳するように投影される。ここで、タップ操作が行われるのは物体102である新聞紙810の上であるので、タッチ判定の閾値は、テーブル上に対するタップ操作の場合とは異なる閾値が設定される。本実施形態の場合は、新聞紙810とテーブルとからなるタッチ対象面の表面形状が取得される(ステップS101)。この情報には、新聞紙810によって生じたタッチ対象面の凹凸を示す高さ情報が含まれる。それに基づき、図6の基準閾値600bのように、テーブル上よりも新聞紙810の厚みの分大きい閾値が設定され(ステップS208)、タッチ判定(ステップS105)とタップ操作の特定(ステップS107)がなされる。
図9の状態803は、さらにユーザにより、重畳された読み取り画像をトレイ813に向けて移動させるドラッグ操作が入力されている様子を示す。このドラッグ操作は、新聞紙810上から、テーブル上にかけて行われる。本実施形態では、まず新聞紙810上では、記事のブロックを指示したときと同じ基準閾値(例えば閾値600b)に基づいてタッチ判定(ステップS105)が行われる。そして、xy方向に平行移動した距離がDを越えた時点で、ドラッグ操作が開始されたと特定される(ステップS107)。そして、最大閾値HTMAXが、新聞紙810上での閾値に設定されるので、例えユーザの指先が、新聞紙を離れテーブル101の情報に至った時点でも、新聞紙810上と同じ閾値に基づいてタッチ判定が行われる。ここで、読み取り画像815は、表示制御部207によるドラッグ操作に対する応答として、ドラッグ操作によって移動される距離が大きくなるのに従い、そのサイズを縮小させるように表示される。
状態804は、記事の読み取り画像815が、トレイ813の中までドラッグされた結果として、そのサムネイル画像がトレイ813内に表示された様子を示す。そして状態805は、ユーザは上記のように、記事ブロックへのタップ操作と、読み取り画像のトレイ813へのドラッグ操作を繰り返して、所望の記事を選択し終えた状態に相当する。
そして、図10の状態806は、ユーザにより、テーブル101上から新聞紙810が取り除かれた様子を示す。CPU110は、所望とする記事が選択された状態で、読み取り対象が取り除かれたこと認識すると、表示制御部207により、操作コマンドに対応するボタンUIの内容を変更する。ここで新たに投影されるボタン816aは、例えば「トレイにドラッグした記事をA4用紙サイズの原稿にレイアウトさせる指示」のコマンドに対応するものとする。テーブルに対するタップ操作を認識する処理により、ボタン816aに対するタップ操作を特定すると、CPU110は、メモリに保持されている読み取り画像に基づき、その記事の形状や文字の大きさ等に基づき、適切なレイアウトを導出する。
状態807は、自動レイアウトされたA4の原稿を示す画像817が、テーブル101の中央に投影されていることを示す。ユーザは、ボタン816bやボタン816cをタップすることで、ドキュメントデータとして生成し、記憶することを指示したり、あるいは印刷装置に送って印刷出力させることを指示したりすることができる。
このように、本実施形態によれば、高さが一様ではないタッチ対象面に対しても、タップ操作やドラッグ操作などさまざまなタッチ操作を利用した使い方ができる。
以上述べたように、本実施形態では、高さが一様ではないタッチ対象面におけるタッチ操作では、検出される指示位置と同じxy座標におけるタッチ対象面の高さを基に、タッチ判定に用いる閾値を設定する。さらに、ドラッグ操作中の場合は、その経路においては、当該ドラッグ操作のそれまで経路におけるタッチ対象面の最大の高さに基づく閾値を用いてタッチ判定を行う。それにより、タッチ対象面の高さが変化する境界付近において、認識対象とタッチ対象面との間が急激に離れたとしても、ドラッグ操作の認識が中断される誤認識を低減することができる。
なお、本実施形態では、タッチ対象面の表面形状を三次元座標情報として取得してタッチ判定の基準閾値を導出したが、閾値の導出方法はこれに限るものではない。例えば、可視光カメラ等で取得した画像から取得した物体位置の二次元座標情報と、あらかじめ数値で指定するなどして与えた物体の高さhの情報を用いて、タッチ対象面の表面形状を示す情報を取得しても良い。この場合の、物体が存在する領域ではタッチ対象面の高さを所定の値(例えばh)とし、それ以外の領域では0とすればよい。
また、本実施形態では、赤外光発光部206と赤外カメラ207を利用して、ユーザの手指の三次元位置を取得したが、ステレオカメラや距離画像センサを利用することもできる。認識対象と操作面との近接状態に基づいてタッチ判定を行う方法は、三次元位置に基づく距離の判定に限らず、例えば感熱センサや静電容量センサ等を利用し、操作面に対してユーザの手指がどの程度近接したかを検出した結果に基づく判定に置き換えてもよい。また、本実施形態では、プロジェクタによる投影対象面をタッチ操作の操作面とする例について説明したが、ヘッドマウントディスプレイを利用し、ARやMR空間上の仮想面(仮想的に表示された物体の表面など)を操作面とする場合にも適応可能である。
また、本実施形態では、常にタッチ対象面の高さに応じたタッチ判定閾値の設定を行った。しかし、タッチ対象面の表面形状を示す情報を取得した時点で、タッチ対象面が一様の高さであるとみなせるほど、物体の高さが小さい場合は、全xy座標において、あらかじめ指定するなどして与えた一定のタッチ判定閾値を用いたタッチ判定を行っても良い。
さらに、本実施形態では、1つの認識対象(1本の指)によるタッチ操作、特にドラッグ操作におけるタッチ判定閾値の設定方法について記載したが、認識対象の数はこれに限るものではない。本実施形態にて記載した方法は、複数の認識対象(2本以上の指)によって複数の指示位置が指示される場合でもそれぞれの位置において適用できる。例えば、2つの認識対象がそれぞれ、タッチしたまま位置を動かすことによって行う操作の例として、ピンチ操作(複数の指示位置の間隔を拡縮する)、ローテート操作(複数の位置の相対関係を維持したまま回転させる)がある。2つの認識対象のそれぞれについて、本実施形態にて記載した方法(ステップ102からステップS108)を用いて設定したタッチ判定閾値によるタッチ判定を行い、かつ、その結果を用いて、上述したようにドラッグ操作途中かの判定を行う。それぞれの認識対象に対するタッチ判定結果とドラッグ操作中かの判定結果を統合することで、ピンチ操作、ローテート操作などの操作種別を判定することができる。例えば、2つの認識対象のドラッグ判定結果が共に「ドラッグ中」であり、かつ認識対象間の距離が前回の操作判定特定シーケンスにおける認識対象間の距離よりも小さい場合、「ピンチイン操作中」と判定する。このように、本実施形態にて記載した方法を2つの認識対象に適用することで、高さが一様でないタッチ対象面にたいするマルチタッチ操作において、ユーザの意図しない操作の中断を低減することができる。
<第2の実施形態>
第1の実施形態は、高さが一様ではないタッチ対象面上におけるタッチ判定に用いる閾値を設定する際、ドラッグ操作中は、当該ドラッグ操作のそれまでの経路にあたるタッチ対象面の最大の高さに対応する閾値を、当該ドラッグ操作が終了するまで適応した。それに対し、第2の実施形態では、ドラッグ操作の経路において、タッチ対象面の高さが低下してからもドラッグ操作が継続される場合、再度タッチ判定に用いる閾値の大きさを再設定する例を説明する。
以下、本実施形態について図面を用いて詳細に説明する。他図を用いて説明したものには同一の符号を付し、その説明を省略する。
図2(B)は、本実施形態における情報処理装置100の機能ブロック図である。情報処理装置100は、図2(A)にて説明した各ブロックと、再設定部209から構成される。これら各機能ブロックは、上述した各処理プログラムをCPU110で実行することによって実現できる機能に相当する。再設定部209は、面情報取得部201で取得したタッチ対象面の表面形状を示す情報と、位置検出部202で検出した指示位置とを利用して、それ以降のドラッグ操作の経路において実際にタッチ判定に使用される閾値を、各位置における基準閾値に再設定する。
次に、第2の実施形態に係る情報処理装置100が実行する、閾値設定処理のフローチャートを図11に示す。第1の実施形態の図4のフローチャートと同じ符号を付した処理ステップでは、第1の実施形態と同内容の処理が実行される。図4のフローチャートとの差異は、ステップS300からステップS307である。
ステップS204までの処理は、第1の実施形態と同様であるため、説明を省略する。本実施形態では、ドラッグ開始直後の閾値設定処理において、ステップS300が実行される。ステップS300にて、再設定部209が、タッチ対象面の最大の高さを示す値HOMAXを初期化する。ここでは、以降のステップで必ず更新されるよう、例えば0などの値で初期化する。最大高さHOMAXはタッチ対象面の高さが低下したことを検出するのに使用する。続くステップS205、ステップS206の処理は、第1の実施形態と同様である。ステップS301およびステップS303において、再設定部209が、最後に検出された指示位置におけるタッチ対象面高さHOFと最大高さHOMAXを比較する。指示位置でのタッチ対象面の高さHOFが最大高さHOMAXより大きいと判定される場合(ステップS301でYES)は、ステップS302に進む。指示位置でのタッチ対象面の高さHOFが最大高さHOMAXより小さいと判定される場合(ステップS303でYES)は、ステップS304に進む。それ以外の場合、つまりの指示位置でのタッチ対象面の高さHOFが最大高さHOMAXに等しい場合は、ステップS207に進む。ステップS302では、再設定部209が、最大タッチ対象面高さHOMAXを、最後に検出された指示位置でのタッチ対象面の高さHOFに更新する。これは、タッチ対象面の上昇に応じて、最大高さHOMAXを上昇したタッチ対象面の高さに更新することに相当する。ステップS304からステップS307の処理が、タッチ対象面高さが、低下した場合に実行される理に相当する。まず、ステップS304では、再設定部209が、タッチ対象面の高さが低下した直後かどうかを判定する。この判定は、ステップS301およびステップS302の判定結果を、前回の操作判定特定シーケンスにおける当該判定結果と比較して行う。具体的には、前回の判定結果が「指示位置でのタッチ対象面の高さHOFが最大高さHOMAX以上」であり、かつ今回の判定結果が「高さHOFが最大高さHOMAXより小さい」場合、タッチ対象面高さが低下した直後だと判定する。タッチ対象面の高さが低下した直後であると判定された場合(ステップS304でYES)は、ステップS305に進み、タッチ対象面の高さが低下した直後ではないと判定された場合(ステップS304でNO)は、ステップS306に進む。ステップS305では、再設定部209が、タッチ対象面の高さが低下した時刻を、その時点の時刻で更新する。ステップS306では、再設定部209が、ステップS305にて更新したタッチ対象面の高さが低下した時刻から、その時点までの経過時間を算出し、タッチ対象面の高さが低下してから一定時間が経過したかを判定する。一定時間が経過していると判定された場合(ステップS306でYES)は、ステップS307に進み、一定時間が経過していないと判定された場合(ステップS306でNO)はステップS207に進む。ステップS307では、再設定部209が、実際にタッチ判定に使用する閾値HTを、最後に検出された指示位置での基準閾値HTFに再設定する。以降、ドラッグ操作が継続されている間は、ステップS207においては、タッチ判定には基準閾値が使用される。
次に、本実施形態の情報処理装置100における処理の流れを、図6(B)と(C)、および図3、図11のフローチャートを用いて説明する。
図6(B)は、図6(A)と同様に、ユーザが物体上で開始したドラッグ操作をテーブル上まで継続してからリリースする様子を示す図である。手指610a、610b、610c、610d、610eは、この順にドラッグ操作を行う様子を示している。手指610cは、手指がテーブル上に近づいている(の高さが小さくなっている)様子を示している。一般に、ユーザには、空中で手指の高さを一定に保つったまま操作を行うことは難しく、例えば長い距離をドラッグ操作する過程等では、タッチ対象面上に物理的に接触している方が、負担が軽い場合がある。また、表示オブジェクトを移動させる目的でドラッグ操作を行っていた場合などは、ドラッグ操作を終了させるにあたり、表示オブジェクトの最終的な位置をタッチ対象面に触れた状態で調整してから終了させたいという場合もある。移動させていた手指610cは、そのような場合に、ユーザが指先をタッチ対象面に近づけた状態を示している。そして、手指610dは、ユーザがドラッグをリリースするために手指をタッチ対象面から離し始めた状態を示している。指示位置611a、611b、611c、611d、611eはそれぞれ、手指610a、610b、610c、610d、610eの状態で検出される指示位置である。
ここで物体上を経由した後のドラッグ操作の間、常に物体の最大の高さに基づく閾値600cをタッチ判定に用いるとすると、手指610dの状態において、ユーザはドラッグをリリースしようとしているにも関わらず「タッチ状態」と判定されてしまう。つまり、指示位置611dの高さが、依然としてタッチ判定閾値600cより小さいため、この時点では、ドラッグ操作が終了されたとは認識されない。次に、手指610eは、ユーザがドラッグをリリースするために手指をさらにタッチ対象面から離した状態を示している。この時、指示位置611eの高さが閾値600cより大きくなるので、この時点で、ドラッグ操作の終了が認識される。一方で本実施形態では、ドラッグ操作中にタッチ対象面の高さが低下した後、一定時間経過後にタッチ判定に使用する閾値を基準閾値に再設定するため、ドラッグ操作が終了したことを速やかに認識できるという効果がある。
図6(C)は図6(B)と同様、ユーザが物体上で開始したドラッグ操作をテーブル上まで継続してからリリースする様子を示す図である。ここで図7(B)は図6(C)に示された操作例に対応する、ドラッグ操作を行った際に取得できるデータと判定結果の一例を示す。手指610aから610dおよび指示位置611aから611dは、図6(B)と同じものを示す。つまり、手指610aの位置でドラッグを開始する(この時点以降のシーケンスでドラッグ中と判定されるものとする)。そして、手指610bの位置で、指先が物体102上からテーブル101上へと移動することに伴い、タッチ対象面の高さが物体102上からテーブル101上へと低下している。さらに手指610dの位置の直前までドラッグを継続し、手指610dの位置でユーザがドラッグをリリースするために手指をタッチ対象面から離している。図6(C)では、手指610dの直前で、タッチ対象面の高さが低下してから、つまり手指610bの時刻から一定時間が経過するとする。
手指610aの状態では、図6(A)の手指601aから601eにて示したのと同様の処理を経て、タッチ判定結果が「タッチ状態」であり、「ドラッグ中」であり、ドラッグ操作が入力されていると特定される。また、最大閾値HTMAX、タッチ判定に用いる閾値HTはともに600b、タッチ対象面の最大高さHOMAXは物体102の上面の高さとなっている。手指610bの状態では、指示位置611bでのタッチ対象面の高さHOFとしてテーブル上面の高さが、指示位置611bでの基準閾値HTFとして閾値600aが取得される。この時点では、「ドラッグ中」と判断され、かつドラッグ開始直後ではない(ステップS203でNO)。また、指示位置611bでの基準閾値HTF=600aは、最大閾値HTMAXより小さい(ステップS205でNO)。そして、指示位置611bでのタッチ対象面の高さHOFが最大高さHOMAXより小さい(ステップS301でNO、ステップS303でYES)ため、この時点がタッチ対象面の高さが低下した時刻として保持される(ステップS305)。まだタッチ対象面の高さが低下してからの経過時間は一定時間に満たないため、ステップS207以降において、図6(A)における手指601fの状態と同様の処理が行われる。手指610cの状態でも、手指610bの状態と同様のタッチ操作認識処理が行われる。最後に、手指610dの状態では、タッチ対象面の高さが低下してからの経過時間が、一定時間以上となる(ステップS306でYES)。このため、タッチ判定に用いられる閾値HTが、指示位置611dでの基準閾値HTF=600aと再設定される(ステップS307)。その結果、指示位置611dの高さが閾値600aより大きいため「非タッチ状態」(ステップS105)、「非ドラッグ中」(ステップS106)と判定されることでドラッグ操作が終了したことが認識される。
以上、本実施形態で述べたように、高さが一様ではないタッチ対象面に対して行われるドラッグ操作において、タッチ対象面の高さが低下してから一定時間後に、タッチ判定閾値をその時点の指示位置に対応するタッチ対象面の高さに基づき再設定する。これによって、ユーザが一定時間ドラッグ操作を継続する間に指先の位置を低下させていた場合でも、ドラッグ操作が終了されたことを速やかに認識でき、操作性を向上することができる。
なお、本実施形態では、タッチ対象面の高さが低下した時刻からの経過時間を条件として、閾値の再設定を行った。これにより認識対象が動かなくなっても、タッチ開始位置から所定の距離以上離れた位置で、タッチ状態が継続されている間は、ドラッグ操作が継続されているとみなすことができる。例えば、表示オブジェクトを移動させるドラッグ操作において、最終的に表示オブジェクトを配置する位置を定めるために認識対象がタッチ状態にまま一時的に停止する場合には、一定時間の経過に応じて閾値が再設定される。なお、ドラッグ操作が継続されるかを判断する条件はこれに限るものではない。例えば、タッチ対象面の高さが低下した位置からのxy平面距離(直線距離)や、ドラッグ操作中の指先の移動距離の累積(ドラッグの軌跡の長さ)などを条件としても良い。さらには、経過時間とこれらの距離を組み合わせたものを条件としても良い。このような距離の要件を用いれば、ユーザが何らかの理由で指先の平行移動を一時的に停止している間に、経過時間が一定値に達し、結果として閾値の再設定が行われるのを防ぐことができる。
<他の実施形態>
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。