(57)【特許請求の範囲】
【請求項１】
画像を取得する実物体検出部と、
前記画像に重畳する仮想物体の表示位置を決定する位置決定部と、
ユーザの視点位置を検出する視点検出部と、
決定された表示位置で前記仮想物体を前記画像に重畳表示する重畳処理部と、
検出された前記視点位置と重畳表示された前記仮想物体の位置とに基づき、前記仮想物体の押下判定に用いる位置を変更する押下判定部と、
を備え、
前記実物体検出部は、
取得した画像に含まれる実物体を検出し、
前記押下判定部は、
前記実物体と重畳表示された前記仮想物体との距離を算出し、前記距離が所定値以下である場合に、前記押下判定に用いる位置の変更処理を行う入力装置。
【請求項２】
前記押下判定部は、
前記仮想物体の押下判定に用いる領域を示す前記仮想物体の押下判定領域の位置を、前記仮想物体から前記視点位置方向に所定量変更する請求項１記載の入力装置。
【請求項３】
前記押下判定部は、
前記仮想物体に対して押下の判定をする際に前記実物体の座標の位置を、前記仮想物体から前記視点位置とは逆方向に所定量変更する請求項１記載の入力装置。
【請求項４】
前記重畳処理部は、
前記押下判定領域の位置が変更された場合、前記押下判定領域に対応する仮想物体の表示位置を前記押下判定領域の位置に合わせて変更する請求項２記載の入力装置。
【請求項５】
前記仮想物体は仮想キーボードであり、
正しい入力である場合の仮想キーの座標、及び該仮想キーの押下時における前記実物体の座標を含む第１データと、誤った入力である場合の仮想キーの座標、及び該仮想キーの押下時における前記実物体の座標とを含む第２データとを関連付けた第３データを記憶する記憶部をさらに備え、
前記押下判定部は、
前記実物体との距離が前記所定値以内にある仮想キーが、前記記憶部に記憶されている仮想キーである場合に、前記押下判定に用いる位置の変更処理を行う請求項１乃至４いずれか一項に記載の入力装置。
【請求項６】
前記仮想キーボードの仮想キーに対する誤入力を検出し、誤入力されたときの仮想キーの座標、及び該仮想キーの押下時における前記実物体の座標と、入力され直したときの仮想キーの座標、及び該仮想キーの押下時における前記実物体の座標とを用いて前記第３データを更新する学習部をさらに備える請求項５記載の入力装置。
【請求項７】
画像を取得し、
取得した画像に含まれる実物体を検出し、
前記画像に重畳する仮想物体の表示位置を決定し、
ユーザの視点位置を検出し、
決定された表示位置で前記仮想物体を前記画像に重畳表示し、
前記実物体と重畳表示された前記仮想物体との距離を算出し、前記距離が所定値以下である場合に、検出された前記視点位置と重畳表示された前記仮想物体の位置とに基づき、前記仮想物体の押下判定に用いる位置を変更する処理をコンピュータが実行する入力制御方法。
【請求項８】
画像を取得し、
取得した画像に含まれる実物体を検出し、
前記画像に重畳する仮想物体の表示位置を決定し、
ユーザの視点位置を検出し、
決定された表示位置で前記仮想物体を前記画像に重畳表示し、
前記実物体と重畳表示された前記仮想物体との距離を算出し、前記距離が所定値以下である場合に、検出された前記視点位置と重畳表示された前記仮想物体の位置とに基づき、前記仮想物体の押下判定に用いる位置を変更する処理をコンピュータに実行させる入力制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像に重畳表示された仮想物体を用いて入力を行う入力装置、入力制御方法及び入力制御プログラムに関する。
【背景技術】
【０００２】
コンピュータにおける文字入力装置としては、主にキーボードが利用される。ほとんどのコンピュータでは、キーボードは入力装置として標準装備されている。キーボードは、多くのユーザにとって使い慣れた装置である。
【０００３】
そのため、従来から、タブレット端末などを代表とするキーボードが装備されていないコンピュータを使用する場合などでも、仮想キーボードを用いてキーボードを模倣する入力方法が提案されている。例えば、次の以下のような技術が提案されている。
【０００４】
仮想キーボードシステムは、ディスプレイ画面にキーボード画像を表示し、指先センサにより取得された指の位置をキーボード画像と重ねることによって、現在入力可能なキーの位置を示す。キー入力検出手段は、実際の入力が行われたのかを判断する。
【０００５】
また、他の仮想キーボードシステムは、ディスプレイ上にキーボード画像を表示し、指先・動き検出部の結果を利用して、手の形を画面上のキーボードの上に表示することで、現在入力可能なキーの位置を示す。
【０００６】
また、キー入力処理装置は、光学シースルー型のＨＭＤ（Head Mounted Display）を利用した環境での仮想キーボードである。キー入力処理装置は、ＨＭＤに投影されたキーボード画像のキーと、ＨＭＤ越しに見える自分の手の指先の位置とが重なっているかを判断して、現在入力可能なキーの位置を示す。
【０００７】
また、ヘッドマウントディスプレイ装置は、ＨＭＤを利用する仮想キーボードであり、キーボード画像をＨＭＤから机などの面に投影する。キーボード像と自分の指先はＨＭＤの「覗き部」から直接自分の目で見ることができる。ＨＭＤにはカメラが付いており、これにより取得された画像を解析することによって、どのキーの上に自分の指先が位置しているかを判断する。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０００−２４２３９４号公報
【特許文献２】特許第４０９９１１７号公報
【特許文献３】特許第３２１４１５８号公報
【特許文献４】特開２００９−１０４４２９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
従来の仮想キーボードでは、例えば、視点がキーボードの真上にあると仮定したときの指先の位置を示して入力可能なキーを示す。他の従来の仮想キーボードでは、視点と指先の位置を結ぶ視線上にあるキーボード面との交点にあるキーを入力可能なキーと判断する。視点は、例えばカメラによる撮影点である。
【００１０】
一方で、ＨＭＤには、直接あるいはハーフミラー越しに実際の風景を確認できる「光学シースルー型」と、視線に近い位置から撮影したカメラからの映像を表示したディスプレイを見る「ビデオシースルー型」と呼ばれるタイプがある。拡張現実環境を提供するために、実空間の物体上の適切な位置に仮想物体を重畳表示する。拡張現実環境とは、現実環境にコンピュータを用いて情報を付加提示する技術、および情報を付加提示された環境そのものを示す。
【００１１】
「光学シースルー型」のＨＭＤの場合、適切な重畳表示のために仮想物体の表示位置を合わせるのは、特許文献１に記載の視線解析などが必要となるため、技術的に困難な課題が多い。そのため、開示の技術では、「ビデオシースルー型」のＨＭＤの利用を想定する。
【００１２】
「ビデオシースルー型」のＨＭＤにも、いくつかの問題点がある。この問題点は、「バーチャルリアリティ学」（ISBN:978-4769351382）などに記載されている。例えば、ユーザは、カメラ越しの画像を見ることになるために、裸眼のときと比較して、視野角、解像度、遮蔽矛盾、システム遅延、焦点深度などの問題があり、違和感を覚えることが多い。
【００１３】
例えば、ビデオシースルー型の視野角の問題に対し、ＨＭＤ装置の表示領域から主表示装置の表示領域を取り除く技術がある（特開2006-267604号公報）。
【００１４】
ここで、拡張現実環境において、仮想物体として選択オブジェクト（例えば、仮想キーボード、選択ボタンなど）をカメラ越しの画像に重畳表示し、この仮想物体をユーザの指などで押下する場合を考える。この場合、視野角に関する見え方の違和感と焦点深度に関する奥行きの知覚の問題により、仮想物体をうまく押下することができない。
【００１５】
そこで、開示の技術は、上記問題に鑑みてなされたものであり、画像に重畳表示された仮想物体に対し、ユーザの意図する仮想物体を適切に押下させることができる入力装置、入力制御方法及び入力制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１６】
開示の一態様における入力装置は、画像を取得する実物体検出部と、前記画像に重畳する仮想物体の表示位置を決定する位置決定部と、ユーザの視点位置を検出する視点検出部と、決定された表示位置で前記仮想物体を前記画像に重畳表示する重畳処理部と、検出された前記視点位置と重畳表示された前記仮想物体の位置とに基づき、前記仮想物体の押下判定に用いる位置を変更する押下判定部と、を備え、前記実物体検出部は、取得した画像に含まれる実物体を検出し、前記押下判定部は、前記実物体と重畳表示された前記仮想物体との距離を算出し、前記距離が所定値以下である場合に、前記押下判定に用いる位置の変更処理を行う。
【発明の効果】
【００１７】
開示の技術によれば、画像に重畳表示された仮想物体に対し、ユーザの意図する仮想物体を適切に押下させることができる。
【図面の簡単な説明】
【００１８】
【図１】仮想テンキーを真上方向から入力する場合を示す図。
【図２】仮想キーボードを真上方向から入力する場合を示す図。
【図３】仮想テンキーを斜め方向から入力する場合を示す図。
【図４】仮想キーボードを斜め方向から入力する場合（その１）を示す図。
【図５】仮想キーボードを斜め方向から入力する場合（その２）を示す図。
【図６】仮想キーボードを斜め方向から入力する場合（その２）を示す図。
【図７】正解位置に対する誤入力時の位置分布を示す図。
【図８】仮想キーボードに対する誤入力を説明するための図。
【図９】実施例１におけるシステムの一例を示す図。
【図１０】実施例１におけるシステムの構成の一例を示すブロック図。
【図１１】入力装置の機能の一例を示すブロック図。
【図１２】仮想物体位置決定部の機能の一例を示すブロック図。
【図１３】押下判定領域の変更の一例を示す図。
【図１４】実施例１における入力制御処理の一例を示すフローチャート。
【図１５】実施例２における入力装置の機能の一例を示すブロック図。
【図１６】仮想キーの表示位置及び押下判定領域を変更する例（その１）を示す図。
【図１７】仮想キーの表示位置及び押下判定領域を変更する例（その２）を示す図。
【図１８】仮想キーの押下判定領域を変更する例（その１）を示す図。
【図１９】仮想キーの押下判定領域を変更する例（その２）を示す図。
【図２０】実施例２における入力制御処理の一例を示すフローチャート。
【図２１】基準面と閾値との関係を示す図。
【図２２】押下判定部による押下判定処理の一例を示すフローチャート。
【図２３】実施例３における入力装置の機能の一例を示すブロック図。
【図２４】実施例３における入力制御処理（その１）の一例を示すフローチャート。
【図２５】実施例３における入力制御処理（その２）の一例を示すフローチャート。
【図２６】誤入力及び正しい入力を検出する処理の一例を示すフローチャート。
【図２７】誤入力及び正しい入力を検出する具体例を説明するための図。
【発明を実施するための形態】
【００１９】
以下に説明する実施例では、仮想物体としての仮想キーボードを３次元空間中に表示して、ユーザ自身の指先で操作することを想定する。仮想キーボードは立体的な形状を持っているので、キーの上部側から正しく押すことで入力として認識される。
【００２０】
ユーザの視点は移動するので、ビデオシースルー型のＨＭＤ越しにキーを見た時に、キーまでの距離感が正しく認識されないことが問題となる。カメラの撮像範囲と目の視野との違いや焦点深度の問題、また、画面に表示されるまでの時間的な遅れなどが生じることなどから、実際の物体（実物体ともいう）との距離感を把握することが困難な場合がある。
【００２１】
このため、視覚から得られる情報と自身の感覚とのズレから、うまく仮想キーボードを操作できない。具体的には、入力したいキーを操作できない、あるいは目的のキーの周辺にある別のキーを操作してしまう、という問題が発生する。
【００２２】
この問題に対し、発明者らは次の実験を行った。この実験は、１２名の被験者に対して、仮想キーボードを使用し、指示したキーの入力を行ってもらう実験である。また、この実験では、視点やキーの向きを変えて入力を行い、誤入力の発生率と、誤入力されたキーと、指示したキーとのズレ方向について調査する。この実験は、被験者の指先にマーカを付けてもらい、カメラ越しの画像（映像）をディスプレイ画面で見ながら、被験者はキーを押す。
【００２３】
実験は、キーの真上からの視点で入力を行う場合と、キーの斜めからの視点で入力を行う場合とで行われた。
【００２４】
（真上からの視点）
図１は、仮想テンキーを真上方向から入力する場合を示す図である。図１に示す例では、「５」のテンキー１１を、マーカ１２を付した指で押下する場合を示す。
【００２５】
図２は、仮想キーボードを真上方向から入力する場合を示す図である。図２に示す例では、「Ｇ」のキー２１を、マーカ１２を付した指で押下する場合を示す。仮想キーボードは、例えばＱＷＥＲＴＹキーボードである。
【００２６】
（斜めからの視点）
図３は、仮想テンキーを斜め方向から入力する場合を示す図である。図３に示す例では、「６」のテンキー１３を、マーカ１２を付した指で押下する場合を示す。
【００２７】
図４は、仮想キーボードを斜め方向から入力する場合（その１）を示す図である。図４に示す例では、「Ｃ」のキー２２を、マーカ１２を付した指で押下する場合を示す。
【００２８】
図５は、仮想キーボードを斜め方向から入力する場合（その２）を示す図である。図５に示す例は、図４に示す例とは仮想キーボードの角度が異なる。図５に示す例では、「Ｘ」のキー２３を、マーカ１２を付した指で押下する場合を示す。
【００２９】
図６は、仮想キーボードを斜め方向から入力する場合（その２）を示す図である。図６に示す例は、図４及び図５に示す例とは仮想キーボードの角度が異なる。図６に示す例では、「Ｆ」のキー２４を、マーカ１２を付した指で押下する場合を示す。図１〜６は、ユーザが仮想キーを押すとき、仮想キーが手に重畳して表示される例である。また、図４〜６に示すように、斜め方向からの入力については、被験者に複数の角度からの入力を行ってもらった。
【００３０】
（実験結果）
真上からの視点での入力に対する実験結果は次の通りである。
入力正解率：９０．６％  誤入力率：９．４％
斜めからの視点での入力に対する実験結果は次の通りである。
入力正解率：６３．５％  誤入力率：３６．５％
以上の実験結果から、真上からの視点では、キーを平面的に見ることができるため、指先位置と、描画されたキーとの位置関係を適切に把握できていることが分かる。
【００３１】
一方、斜めからの視点では、３次元での指先位置と、描画されたキーとの位置関係を適切に把握できないため誤入力が多い。また、視点の違いやキーの表示方向にかかわらず、正解キーの視点側手前を間違えて押下することが多いことが分かった。
【００３２】
図７は、正解位置に対する誤入力時の位置分布を示す図である。図７に示すように、誤入力時には、正解位置に対して、視線方向の手前を押下してしまう傾向がある。
【００３３】
図８は、仮想キーボードに対する誤入力を説明するための図である。図８に示すように、斜め方向からの視点で、目的のキー７１を押下する場合、視線方向の手前を誤入力する場合が多い。これを平面的に表現すると、目的のキー７１を押下するはずが、キー７２を押下してしまうことになる。
【００３４】
実際には、ユーザは仮想キーに対して斜め方向から見ることがほとんどである。これを考慮すると、カメラ越しの画像に仮想キーを重畳する場合には、斜め方向からの仮想キーを重畳することで、ユーザの操作感を向上させる。しかしながら、上述した実験のように、斜め方向からの仮想キーを画像に重畳すると、誤入力が発生する。
【００３５】
以下、上記実験などに基づき、誤入力を防ぐ各実施例について、添付図面を参照しながら説明する。
【００３６】
［実施例１］
＜システム＞
図９は、実施例１におけるシステムの一例を示す図である。図９に示す例では、ユーザはカメラ付きのＨＭＤ（Head Mounted Display）を装着し、ＨＭＤに重畳表示された仮想キーボードを用いて文字入力を行う。ユーザは、仮想キーを押下すると、その仮想キーに対する文字が入力され、ＨＭＤはコンピュータと無線通信することで、コンピュータのアプリケーションに文字を送信する。
【００３７】
アプリケーションは、受信した文字を入力し、アプリケーションの表示画面情報をＨＭＤに送信する。ＨＭＤは、受信したアプリケーションの表示画面情報を例えばＨＭＤに表示する。
【００３８】
図９に示すシステムにおいて、仮想キーボードが重畳された画像をＨＭＤに表示するのではなく、ディスプレイやプロジェクタなどに表示してもよい。また、文字入力の判定処理などは、ＨＭＤで行うのではなく、コンピュータやスマートフォンなどの他機で行われてもよい。また、ＨＭＤ近辺のカメラで撮影した画像を、ユーザからの視点にするため視点変換を行って、視点変換後の画像に仮想キーボードを重畳してＨＭＤに表示してもよい。
【００３９】
開示のシステムは、拡張現実環境において、選択オブジェクト、例えば仮想的なキーボードを３次元空間中に表示し、あたかもそこに本物のキーボードが実在するかのようにユーザ自身の指で直感的に操作する。
【００４０】
＜構成＞
図１０は、実施例１におけるシステムの構成の一例を示すブロック図である。図１０に示す例では、システムは、入力装置１０１、画像入力装置１１０、視点・視線検出装置１１１、表示装置１１２、アプリケーション１１３を有する。各装置は、複数の装置が組み合わされて１つの装置を構成してもよい。
【００４１】
画像入力装置１１０は、例えばカメラであり、ユーザの視点に近い位置に設置され、視線と同じ方向の画像を撮影し、取得する。取得された画像は、入力装置１０１に出力される。なお、画像入力装置１１０は、必ずしもユーザの視点に近い位置に設置される必要はなく、ユーザの視点とは別の位置にある場合は、画像に対して視点変換を行えばよい。
【００４２】
視点・視線検出装置１１１は、撮像部などを含み、ユーザの視点の位置と、見ている方向（視線方向）を検出する。視点・視線検出装置１１１は、視線を検出する方法として、角膜及び強膜の境界を検出する方法（強膜トラッカー法）、角膜表面での反射光を検出する方法（角膜反射法）、眼球の電位差を測定する方法（ＥＯＧ法）、サーチコイルを内蔵したコンタクトレンズを装着する方法（サーチコイル法）などがある。詳しくは、「"視線インタフェースから視線コミュニケーションへ"，大野健彦，情報処理学会研究報告、ＨＩ，ヒューマンインタフェース研究会報告，P.171-178，2001」や"マンマシンシステム工学  視覚系指標の計測と分析（１）〜眼球運動〜"（http://hydro.energy.kyoto-u.ac.jp/Lab/staff/shimoda/lecture2005/mms/ocular1.pdf）を参照されたい。
【００４３】
また、瞳孔中心法と、瞳孔―角膜反射法を組み合わせて視線を検出する技術がある（特開２００１−６１７８５号公報を参照されたい）。また、近年は、Ｗｅｂカメラ映像を用いて視線を検出する技術があり、可視光、近赤外光などを利用し、眼球におけるその反射像を利用して視線を特定する。具体的には、瞳孔と虹彩の位置から視線方向を推定する。
【００４４】
また、離れた位置から視線を検出できる技術（株式会社ライフテックサポートの視線入力意思伝達装置）や、移動中でも視線を検出できる技術（竹井機器工業株式会社のＴａｌｋＥｙｅII）がある。
【００４５】
視点・視線検出装置１１１は、画像入力装置１１０をユーザの視点に近い位置に設置した場合、視点の位置について、画像入力装置１１０（例えばカメラ）の位置に等しいとみなす。また、視点・視線検出装置１１１は、頭部の位置が分かるようなセンサを利用する場合、頭の位置から眼球の位置を推定することができる。例えば、株式会社美貴本の「Ｔｒａｃｋ  ＩＲ」などのヘッドトラッキングシステムなどがある。
【００４６】
視点・視線検出装置１１１は、公知のいずれかの方法を用いて、ユーザの視点、視線を検出し、入力装置１０１に出力する。
【００４７】
表示装置１１２は、画像入力装置１１０が撮影した画像、又はその画像に対して入力装置１０１により仮想物体が重畳された画像を表示する。以下、表示装置１１２は、ＨＭＤを例にして説明するが、通常のディスプレイやプロジェクタであってもよい。通常のディスプレイとは、コンピュータのモニタやテレビなどのディスプレイをいう。
【００４８】
アプリケーション１１３は、コンピュータにより実行されるアプリケーションであり、例えばＷｉｎｄｏｗｓ（登録商標）のＷｏｒｄやＥｘｃｅｌなどのアプリケーションである。アプリケーション１１３は、入力装置１０１から入力コマンド（例えば文字や数字）などを受け取る。また、アプリケーション１１３は、取得した文字や数字を表示した画面の画面情報を入力装置１０１に出力してもよい。
【００４９】
入力装置１０１は、例えば拡張現実環境を提供する装置である。入力装置１０１は、制御部１０２、主記憶部１０３、補助記憶部１０４、通信部１０５を有する。各部は、バスを介して相互にデータ送受信可能に接続されている。
【００５０】
制御部１０２は、コンピュータの中で、各装置の制御やデータの演算、加工を行うＣＰＵ（Central Processing Unit）である。また、制御部１０２は、主記憶部１０３や補助記憶部１０４に記憶されたプログラムを実行する演算装置であり、入力部や記憶部からデータを受け取り、演算、加工した上で、出力部や記憶部に出力する。
【００５１】
主記憶部１０３は、ＲＯＭ（Read Only Memory）やＲＡＭ（Random Access Memory）などであり、制御部１０２が実行する基本ソフトウェアであるＯＳやアプリケーションソフトウェアなどのプログラムやデータを記憶又は一時保存する記憶装置である。
【００５２】
補助記憶部１０４は、ＨＤＤ（Hard Disk Drive）などであり、アプリケーションソフトウェアなどに関連するデータを記憶する記憶装置である。
【００５３】
通信部１０５は、アプリケーション１１３に対し、有線又は無線で通信を行う。例えば、入力コマンドや画面情報などが通信される。
【００５４】
＜機能＞
図１１は、入力装置１０１の機能の一例を示すブロック図である。図１１に示す例では、入力装置１０１は、実物体検出部２０１、仮想物体位置決定部２０２、視点検出部２０３、重畳処理部２０４、押下判定部２０５、入力コマンド生成部２０６を有する。なお、入力装置１０１の各部は、例えば制御部１０２及びワークメモリとして主記憶部１０３により実現されうる。また、入力コマンド生成部２０６は、入力コマンドを送信するときは、例えば通信部１０５により実現されうる。
【００５５】
実物体検出部２０１は、画像入力装置１１０から取得した画像を解析し、物体の位置や距離を把握する。物体は、例えば手や指や机などである。この物体を仮想物体と比較して実物体と呼ぶ。また、実物体検出部２０１は、仮想物体が重畳されている場合は、その仮想物体の領域付近の実物体の面、距離などを検出する。
【００５６】
実物体検出部２０１は、例えば手や指などの実物体を検出する際には、肌色検出やエッジ抽出などを行い、指を検出することができる。また、指にマーカなどを付して検出することもできる。
【００５７】
実物体検出部２０１は、例えば、仮想キーボードを表示したい面と、指に付されたマーカとを用いて、画像（カメラ画像）からマーカと画像入力装置１１０との相対位置を算出する。
【００５８】
マーカを利用した位置のカメラ位置の推定については「拡張現実感システム構築ツールＡＲＴｏｏｌｋｉｔの開発」（加藤博一著，電子情報通信学会技術研究報告，PRMU，パターン認識、メディア理解  101(652)，79-86，2002-02）や、"３Dキャラクターが現実世界に誕生！ARToolkit拡張現実空間プログラミング入門"（ISBN  978-4048673617）を参照されたい。
【００５９】
簡潔に説明すると、実物体検出部２０１は、マーカのサイズが既知であるとし、画像入力装置１１０の撮像パラメータと、撮像中のマーカの形状から、マーカの存在する面やマーカの位置・姿勢を推定する。
【００６０】
マーカ座標系のｎ個の特徴点の座標値を（Ｘｉ，Ｙｉ，Ｚｉ）（ｉ＝０，１，・・・，ｎ−１）とし、マーカ座標系からカメラ座標系への変換行列をＴｃｍ、カメラの透視変換行列をＣとする。このとき、画像上の座標（ｘｉ，ｙｉ）（ｉ＝０，１，・・・，ｎ−１）は、式（１）により求められる。
【００６１】
【数１】
0005765133.tif 000002
ｈ：カメラ座標系から画像上の点を変換するためのパラメータ
Ｒ：回転要素
Ｔ：平行移動要素
実物体検出部２０１は、Ｃを既知とすると、ｎ個の特徴点を用いることでＴｃｍを求めることができる。実物体検出部２０１は、カメラ座標系の原点は視点位置であるため、マーカと視点の位置関係を把握することができる。
【００６２】
また、画像内に２つのマーカが含まれている場合を考える。実物体検出部２０１は、カメラ座標系の点をＣ、マーカ１の座標系の点をＭ１として、Ｍ１からＣへの変換行列をＴ１とする。同様に、実物体検出部２０１は、マーカ２の座標系の点をＭ２としてＭ２からＣへの変換行列をＴ２とする。
【００６３】
このとき、カメラ座標系Ｃからマーカ１への座標系Ｍ１への変換行列は、Ｔ１の逆行列Ｔ１−１となる。カメラ座標系を介することでマーカ１の座標系とマーカ２の座標系の相互変換を行うことができる。実物体検出部２０１は、マーカ１の座標系Ｍ１へのマーカ２の座標系Ｍ２上の点の変換を、式（２）を用いて行う。
【００６４】
【数２】
0005765133.tif 000003
実物体検出部２０１は、マーカ１の座標系における、マーカ２の位置が分かることになる。これにより、実物体検出部２０１は、マーカを利用して指の位置を推定する。
【００６５】
なお、実物体検出部２０１は、上記例以外にも、仮想物体を表示したい面や指先にセンサを付けて、仮想物体と指との距離を求めたり、画像の奥行きを示す距離画像を用いて、指の位置を推定したりして指の位置を求めたりしてもよい。実物体検出部２０１は、検出した実物体の情報を、仮想物体位置決定部２０２、重畳処理部２０４、押下判定部２０５に出力する。
【００６６】
仮想物体位置決定部２０２は、画像入力装置１１０から取得した画像に対し、重畳表示する仮想物体の表示位置を決定する。仮想物体位置決定部２０２の詳細は、図１２を用いて説明する。
【００６７】
図１２は、仮想物体位置決定部２０２の機能の一例を示すブロック図である。図１２に示す仮想物体位置決定部２０２は、形状決定部３０１、位置、姿勢決定部３０２を有する。
【００６８】
形状決定部３０１は、重畳表示する仮想物体に関する情報を扱う。形状決定部３０１は、表示する仮想物体の立体形状データの作成や、既存の立体形状データの読込みなども行う。立体形状データは、例えば、仮想キーボードの形状を示すデータである。
【００６９】
立体形状データには、押下判定領域（当たり判定領域）の定義を含む。押下判定領域は、仮想キーの押下判定に用いる領域であり、例えば、表示される仮想キーから所定値だけ上であり、仮想キーのサイズ分の領域を示す。押下判定領域を所定値上にする理由は、押下と判定されやすくするためである。立体形状データの各データは、個々の別ファイルとなっていてもよい。
【００７０】
位置、姿勢決定部３０２は、実物体検出部２０１の検出結果に基づき、形状決定部３０１により決定された仮想物体を表示する位置や向きを決定する。位置、姿勢決定部３０２は、例えば、仮想物体の表示位置の認識、画像入力装置１１０の位置の推定、仮想物体の幾何学変換などが行われる。
【００７１】
位置、姿勢決定部３０２は、仮想物体の既知の形状の座標を、画像入力装置１１０から取得した画像の見え方に合わせて変換する。例えば、位置、姿勢決定部３０２は、例えば仮想物体を斜め方向から見た形状になるよう座標変換を行う。
【００７２】
具体的には、位置、姿勢決定部３０２は、仮想物を三次元空間中の所定の位置に移動させるため、回転、平行移動、拡大・縮小処理などの座標変換を行う。この座標変換は、いわゆるワールド座標系での座標の変換である。
【００７３】
ワールド座標系とは、主に３次元グラフィックスの分野で用いられる、空間全体を表す座標系である。ワールド座標系は、空間の中での物体の位置を示すための座標系で、物体の表示や移動を扱うために用いられる。また、ワールド座標系は、グローバル座標系とも呼ばれる。
【００７４】
位置、姿勢決定部３０２は、座標変換を行って決定された仮想物体の座標を重畳処理部２０４に出力する。
【００７５】
図１１に戻り、視点検出部２０３は、視点・視線検出装置１１１から取得したユーザの視点、視線データと、画像入力装置１１０から取得した画像に基づき、ワールド座標系におけるユーザの視点の位置と、画像中の注目位置（視線方向に対応する画像の位置）を検出する。視点検出部２０３は、検出した視点の位置と、視線方向とを重畳処理部２０４に出力する。
【００７６】
重畳処理部２０４は、仮想物体位置決定部２０２により決定された表示位置で仮想物体を画像に重畳表示する。重畳処理部２０４は、仮想物体位置決定部２０２から取得した仮想物体の座標に対し、視点検出部２０３により検出されたユーザの視点位置や、画像入力装置１１０から取得した画像に合わせて透視変換（射影変換）を行う。前述した座標変換と、射影変換は、アフィン変換と呼ばれる。
【００７７】
重畳処理部２０４は、透視変換を行った仮想物体の座標位置に、仮想物体を重畳表示する。このとき、重畳処理部２０４は、画像内の実物体との前後関係に矛盾が生じないように描画を行う。
【００７８】
例えば、重畳処理部２０４は、実物体（机）の面から所定値だけ上に仮想物体を描画する。これは、実物体から沈んだ位置や、浮き過ぎた位置に仮想物体が表示されることを防ぐためである。
【００７９】
押下判定部２０５は、実物体検出部２０１により検出された実物体（例えば指）と、重畳処理部２０４により重畳表示されている仮想物体とが空間中で交差しているか、または所定距離以内にあるかなどを判定する。
【００８０】
このとき、押下判定部２０５は、視点検出部２０３から取得した視点位置と重畳表示される仮想物体の位置とに基づき、仮想物体の押下判定に用いる位置を変更する。押下判定に用いる位置とは、押下判定領域の位置や、仮想物体の押下の判定をする際の実物体の座標位置を含む。
【００８１】
押下判定部２０５は、仮想物体に対応する押下判定領域の位置を、仮想物体の位置と視点位置とに基づいて変更しておいてもよい。例えば、押下判定部２０５は、仮想物体に対応する押下判定領域を視点方向に所定量ずらす。視点方向とは、仮想物体の位置からユーザの目の位置を示す視点位置に向かう方向をいう。
【００８２】
この所定量は、仮想物体の位置と視点位置との距離に基づき決定されてもよい。例えば、所定量は、仮想物体の位置と視点位置との距離の数％と決めておけばよい。これにより、仮想キーの位置に応じて適切な値を用いて、押下判定領域の位置をずらすことができる。
【００８３】
押下判定部２０５は、実物体の位置と、基準面との距離を算出し、この距離に基づいて仮想物体が押下されたか否かを判定する。基準面とは、実物体である机の面や、重畳表示された仮想物体の面などである。ここでは、基準面は机の面とする。なお、机の面は、実物体検出部２０１により、机の所定位置にある一点と法線ベクトルとで表される。押下判定部２０５は、算出した距離が閾値未満のとき、押下と判定する。押下判定部２０５は、例えば指と仮想キー、仮想キーと壁などの接触を判定できる。
【００８４】
また、押下判定部２０５は、押下と判定したときの実物体の位置を含む押下判定領域を特定し、その押下判定領域に対応する仮想物体が押下された物体であると判定する。押下判定部２０５は、視点方向にずれた押下判定領域で押下判定を行うことができるため、ユーザの押し間違いを少なくすることができる。これは、視線方向の手前のキーを押す傾向を利用している。視線方向とは、目から対象物を見る方向をいう。
【００８５】
また、押下判定部２０５は、押下判定領域を仮想物体に対して変更しない場合は、押下判定する際の実物体の座標位置を、視点方向とは逆方向に所定量変更する。これにより、視線方向の手前のキーを押す傾向を利用して、実物体の押下判定時の座標を視点方向の先に変更することで、ユーザの押し間違いを少なくすることができる。この所定量は、押下判定領域と同じように、仮想物体の位置と視点位置との距離に基づき決定されてもよい。
【００８６】
図１３は、押下判定領域の変更の一例を示す図である。図１３に示す白色キーは、仮想キーの表示位置４０１を示し、灰色キーは、仮想キーに対応する押下判定領域の位置４０２を示す。仮想キーの表示位置４０１に対して、押下判定領域の位置４０２は、視点方向にずれている。これは、押下判定部２０５が、仮想キーの押し間違いを考慮して視点方向に押下判定領域を変更した結果である。
【００８７】
なお、図１３に示す例では、押下判定領域が仮想キーの下にあるように表されているが、押下判定領域は、例えば仮想キーから所定値だけ上に位置する。また、押下判定部２０５は、視点方向への変更について視点方向そのものの方向ではなく、視点方向を仮想キーの平面に射影した方向（第１方向と呼ぶ）を求め、第１方向に所定量をずらすようにしてもよい。
【００８８】
これにより、ユーザが、仮想物体が重畳表示された画像を見ながら仮想物体を押下するとき、仮想物体の押し間違いを少なくし、ユーザが意図する仮想物体を押下させることができる。
【００８９】
押下判定部４０２は、押下と判定された仮想物体の座標を入力コマンド生成部２０６に出力する。
【００９０】
図１１に戻り、入力コマンド生成部２０６は、押下判定部２０５から取得した仮想物体の座標に基づき、入力コマンドを生成する。仮想物体が仮想キーボードである場合、入力コマンド生成部２０６は、仮想物体の座標に基づき、どのキーコードであるかを特定し、そのキーコードを生成する。
【００９１】
入力コマンド生成部２０６は、生成した入力コマンドをアプリケーション１１３などに送信する。
【００９２】
＜動作＞
次に、実施例１における入力装置１０１の動作について説明する。図１４は、実施例１における入力制御処理の一例を示すフローチャートである。
【００９３】
図１４に示すステップＳ１０１で、入力装置１０１は、画像入力装置１１０から画像を取得する。
【００９４】
ステップＳ１０２で、実物体検出部２０１は、取得した画像から実物体を検出する。実物体とは、例えば机の面や指などである。
【００９５】
ステップＳ１０３で、仮想物体位置決定部２０２は、実物体検出部２０１により検出された机の面などに、仮想物体を表示するための表示位置を決定する。このとき、仮想物体位置決定部２０２は、上述した座標変換を行う。
【００９６】
ステップＳ１０４で、重畳処理部２０４は、画像入力装置１１０から取得した画像に、仮想物体に対して上述した透視変換を行って重畳表示する。
【００９７】
ステップＳ１０５で、押下判定部２０５は、仮想物体に対応する押下判定領域を、視点方向に変更する。
【００９８】
ステップＳ１０６で、押下判定部２０５は、重畳表示された仮想物体を、検出された実物体が押下したかどうかを判定する。これにより、ユーザの押し間違いを少なくすることができる。
【００９９】
押下されたと判定された場合（ステップＳ１０６−ＹＥＳ）ステップＳ１０７に進み、押下されていないと判定された場合（ステップＳ１０６−ＮＯ）ステップＳ１０１に戻る。
【０１００】
ステップＳ１０７で、入力コマンド生成部２０６は、押下と判定された仮想物体の座標に基づいて、入力コマンドを生成する。生成された入力コマンドは、例えば、アプリケーション１１３に送信される。
【０１０１】
なお、押下判定部２０５は、ステップＳ１０５を省略し、ステップＳ１０６において、押下時の実物体の座標を視点方向から逆方向にずらしてもよい。
【０１０２】
以上、実施例１によれば、画像に重畳表示された仮想物体に対し、ユーザが意図する仮想物体を適切に押下させることができる。
【０１０３】
［実施例２］
次に、実施例２における入力装置について説明する。実施例２では、入力装置は、ユーザが仮想キーを押し間違えた場合の正しいキーと誤ったキーとのデータを示す誤り傾向データを参照し、誤り傾向データに保持される誤ったキーが押下されようとする場合に押下判定に用いる位置を変更する。以下に示す実施例では、仮想物体に対して仮想キーボートを例にし、実物体に対して指を例にして説明する。
【０１０４】
＜システムと構成＞
実施例２におけるシステム及び入力装置の構成については、実施例１と同様であるため、その説明を省略する。
【０１０５】
＜構成＞
図１５は、実施例２における入力装置５００の機能の一例を示すブロック図である。図１５に示す構成で、図１１に示す構成と同様のものは同じ符号を付し、その説明を省略する。
【０１０６】
図１５に示す記憶部５０１は、誤り傾向データを記憶する。記憶部５０１は、例えば補助記憶部１０４により実現されうる。誤り傾向データは、以下のデータを保持する。
（１）正しい入力（押下）時の
キーコード、視点位置、キーの座標、指の座標
（２）正しい入力キーに対応する、誤った入力（押下）時の
キーコード、視点位置、キーの座標、指の座標
押下判定部５０２は、指と、押下判定位置との距離に対し、３つの閾値を設ける。閾値１は、指が仮想キーに近づいたと判断するための閾値である。閾値２は、仮想キーが押下されたと判断するための閾値である。閾値３は、仮想キーが押下された後に指が離れたと判断するための閾値である。
【０１０７】
押下判定部５０２は、指と基準面との距離が閾値１未満になったか否かを判定する。基準面とは、例えば机の面や、仮想キーボードが表示される面などである。この距離が閾値１未満になったとき、押下判定部５０２は、押下されようとしている仮想キー（以下、目的キーと呼ぶ）が、記憶部５０１に記憶される誤り傾向データで、誤ったキーとして記憶されているか否かを判定する。
【０１０８】
押下判定部５０２は、目的キーが誤ったキーとして記憶されていれば、そのキーは間違えやすいキーであるため、その目的キーに対応する押下判定領域を変更する。この変更処理は、実施例１と同様である。このとき、押下判定部５０２は、重畳処理部５０３に対し、目的キーの座標を通知するとともに、目的キーの表示位置を変更するよう要求してもよい。
【０１０９】
押下判定部５０２は、目的キーが誤ったキーとして記憶されていなければ、目的キーの押下判定領域の位置を変更しない。そもそも間違えにくいキーだからである。
【０１１０】
押下判定部５０２は、この距離が閾値２未満になったとき、入力コマンド生成部２０６に押下された仮想キーの座標を通知する。押下判定部５０２は、この距離が閾値２未満になった後に、閾値３より大きくなれば仮想キーの押下が終了したことを入力コマンド生成部２０６に通知する。閾値２及び閾値３の判定は、実施例１でも行われる。
【０１１１】
重畳処理部５０３は、押下判定部５０２から変更要求を受けた場合、重畳表示している目的キーの表示位置を変更する。重畳処理部５０３は、目的キーを、押下判定部５０２により通知される座標で特定できる。
【０１１２】
重畳処理部５０３は、押下判定領域が変更された場合、目的キーの表示位置を、押下判定領域に合わせて変更するようにしてもよい。
【０１１３】
これにより、ユーザが仮想キーを押下しようとしたときに、その仮想キーが間違えやすいキーであれば、視点方向に押下判定領域の位置を変更することができる。
【０１１４】
＜変更例＞
次に、実施例２における位置変更例について説明する。図１６は、仮想キーの表示位置及び押下判定領域を変更する例（その１）を示す図である。図１６に示す例では、ユーザが表示装置１１１越しに斜め方向から仮想キーボードを見て、仮想キー３１を押下しようとする例である。実際は、仮想キーの視線方向手前を押すことが多い。また、この仮想キー３１は、誤入力キーとして誤り傾向データに記憶されているとする。
【０１１５】
このとき、押下判定部５０２は、仮想キー３１の押下判定領域を視点方向に所定値ずらす。この所定値は、予め決められた値でもよいし、この仮想キー３１と視点位置との距離に基づいて決められてもよい。また、押下判定部５０２は、仮想キー３１から視点方向にある仮想キー３２、３３に対応する押下判定領域も、視点方向に変更しておく。仮想キー３１の移動により、重複しないようにするためである。
【０１１６】
重畳処理部５０３は、例えば、仮想キー３１を、本来の表示位置４１から表示位置４２に変更する。変更するのは、押下判定部５０２から変更要求が通知された後である。また、重畳処理部５０３は、仮想キー３１だけを変更するのではなく、仮想キー３１の変更に伴い仮想キー３２，３３も合わせて表示位置を変更する。これは、仮想キー３１の表示位置を変更することで、仮想キー３１から見て視点方向の仮想キーも、仮想キー３１と重複しないように変更した方がいいからである。
【０１１７】
図１７は、仮想キーの表示位置及び押下判定領域を変更する例（その２）を示す図である。図１７に示す例では、ユーザが表示装置１１１越しに斜め方向から斜めに表示された仮想キーボードを見て、仮想キー３１を押下しようとする例である。また、この仮想キー３１は、誤入力キーとして誤り傾向データに記憶されているとする。
【０１１８】
このとき、押下判定部５０２は、仮想キー３１の押下判定領域を視点方向に所定値ずらす。この所定値は、予め決められた値でもよいし、この仮想キー３１と視点位置との距離に基づいて決められてもよい。また、押下判定部５０２は、仮想キー３１から視点方向にある仮想キー３４、３５に対応する押下判定領域も、視点方向に変更しておく。
【０１１９】
重畳処理部５０３は、例えば、仮想キー３１を、本来の表示位置４１から表示位置４３に変更する。変更するのは、押下判定部５０２から変更要求が通知された後である。また、重畳処理部５０３は、仮想キー３１だけを変更するのではなく、仮想キー３１の変更に伴い仮想キー３３，３４も合わせて表示位置を変更する。これは、仮想キー３１の表示位置を変更することで、仮想キー３１から見て視点方向の仮想キーも、仮想キー３１と重複しないように変更した方がいいからである。
【０１２０】
図１８は、仮想キーの押下判定領域を変更する例（その１）を示す図である。図１８に示す例は、図１６に示す例の押下判定領域のみを変更した例である。図１８に示す例では、仮想キー３１に対応する押下判定領域が視点方向の位置５１に変更されている。仮想キー３１の表示位置は、位置４１である。押下判定領域の位置５１の変更に伴い、仮想キー３２，３３に対応する押下判定領域の位置がそれぞれ視点方向の位置５２、５３に変更されている。
【０１２１】
図１９は、仮想キーの押下判定領域を変更する例（その２）を示す図である。図１９に示す例は、図１７に示す例の押下判定領域のみを変更した例である。図１９に示す例では、仮想キー３１に対応する対応する押下判定領域の位置が視点方向の位置５４に変更されている。仮想キー３１の表示位置は、位置４１である。押下判定領域の位置５１の変更に伴い、仮想キー３２，３３に対応する押下判定領域の位置がそれぞれ視点方向の位置５５，５６に変更されている。
【０１２２】
よって、押下判定部５０２は、目的キーに対応する押下判定領域の位置の変更に伴い、目的キーから視点方向にある他の仮想キーに対応する押下判定領域の位置を変更する。これにより、目的キーに対応する押下判定領域の位置を変更することで、他の仮想キーに対応する押下判定領域と重複することを防ぐことができる。
【０１２３】
＜動作＞
次に、実施例２における入力装置５００の動作について説明する。図２０は、実施例２における入力制御処理の一例を示すフローチャートである。図２０に示すステップＳ２０１で、仮想物体位置決定部２０２は、立体形状データを読み込み、押下判定部５０２は、誤り傾向データを読み込む。
【０１２４】
ステップＳ２０２で、入力装置５００は、画像入力装置１１０から画像を取得する。
【０１２５】
ステップＳ２０３で、実物体検出部２０１は、取得した画像を解析する。
【０１２６】
ステップＳ２０４で、実物体検出部２０１は、仮想キーボードの表示位置が画像内にあるかないかを判定する。例えば、実物体検出部２０１は、所定サイズの面が画像内にあれば表示位置ありと判定する。なお、仮想キーボードは、画像内の所定領域に表示すると予め決定されていてもよい。
【０１２７】
仮想キーボードの表示位置があれば（ステップＳ２０４−ＹＥＳ）ステップＳ２０５に進み、仮想キーボードの表示位置がなければ（ステップＳ２０４−ＮＯ）ステップＳ２１２に進む。実物体検出部２０１は、表示位置ありと判定すると、ｋ＿ｆｌａｇを１にし、表示位置なしと判定すると、ｋ＿ｆｌａｇを０にする。
【０１２８】
ステップＳ２０５で、実物体検出部２０１は、取得した画像を解析し、手や指を検出する。手や指の検出は、肌色検出を行ったり、マーカを付した指を検出したり、指に付したセンサで検出したりしてもよい。
【０１２９】
ステップＳ２０６で、実物体検出部２０１は、手や指が画像中に含まれるか否かを判定する。手や指が画像中に含まれれば（ステップＳ２０６−ＹＥＳ）ステップＳ２０７に進み、手や指が画像中に含まれなければ（ステップＳ２０６−ＮＯ）ステップＳ２１２に進む。実物体検出部２０１は、手や指が画像中に含まれると判定すると、ｈ＿ｆｌａｇを１にし、手や指が画像中に含まれないと判定すると、ｈ＿ｆｌａｇを０にする。
【０１３０】
ステップＳ２０７で、視点検出部２０３は、視点・視線検出装置１１１から取得した視点、視線データに基づき、空間中の視点位置と、視線方向を検出する。
【０１３１】
ステップＳ２０８で、重畳処理部５０３は、ｋ＿ｆｌａｇが１であり、かつ、ｈ＿ｆｌａｇが１であるか否かを判定する。この条件を満たす場合は、仮想キーボードを重畳表示すると判定され、ステップＳ２０９に進み、この条件を満たさない場合は、仮想キーボードを重畳表示しないと判定され、ステップＳ２１２に進む。
【０１３２】
ステップＳ２０９で、押下判定部５０２は、仮想キーボード（仮想物体）と手や指との距離を算出する。
【０１３３】
ステップＳ２１０で、押下判定部５０２は、算出した距離に基づき、仮想キーの表示を変更させる必要があるか否かを判定する。変更の必要がある場合（ステップＳ２１０−ＹＥＳ）は、ステップＳ２１１に進み、変更の必要がない場合（ステップＳ２１０−ＮＯ）は、ステップＳ２１２に進む。
【０１３４】
変更の必要があるとは、算出した距離が閾値１未満であること、かつ、閾値１未満である仮想キー（目的キー）が誤り傾向データの誤ったキーとして保持されていることをいう。この条件は、指や手が仮想キー（目的キー）に近づき、かつ、この目的キーの押し間違いが多いことを示す。
【０１３５】
ステップＳ２１１で、押下判定部５０２は、目的キーの押下判定領域の位置を、視点方向にずらす。また、押下判定部５０２による表示変更命令で、重畳処理部５０３は、重畳表示対象の目的キーの表示位置を、押下判定領域に合わせて変更する。（図１６、１７参照）
ステップＳ２１２で、重畳処理部５０３は、画像入力装置１１０から取得した画像を表示する。
【０１３６】
ステップＳ２１３で、重畳処理部５０３は、ｋ＿ｆｌａｇが１であるかを判定する。ｋ＿ｆｌａｇが１であれば（ステップＳ２１３−ＹＥＳ）ステップＳ２１４に進み、ｋ＿ｆｌａｇが０であれば（ステップＳ２１３−ＮＯ）ステップＳ２０２に戻る。
【０１３７】
ステップＳ２１４で、重畳処理部５０３は、座標変換、透視変換を行った仮想キーボードを画像に重畳表示する。このとき、手や指が仮想キーに閾値１よりも近づいていれば、この仮想キーの表示位置の位置が変更された状態で重畳表示される。
【０１３８】
ステップＳ２１５で、押下判定部５０２は、算出した距離が閾値２未満になったか否かを判定する。距離が閾値２未満であれば（ステップＳ２１５−ＹＥＳ）仮想キーが押下されたと判定され、ステップＳ２１６に進み、距離が閾値２以上であれば（ステップＳ２１５−ＮＯ）仮想キーは押下されていないと判定され、ステップＳ２０２に戻る。
【０１３９】
ステップＳ２１６で、入力コマンド生成部２０６は、押下されたと判定された仮想キーに対応するキーコードを生成する。
【０１４０】
なお、ステップＳ２１１で、仮想キーの表示位置を変更するようにしたが、この変更は必ずしも必要な処理ではない。入力装置５００は、仮想キーの押下判定領域の位置だけを変更するようにしてもよい（図１８、１９参照）。
【０１４１】
図２１は、基準面と閾値との関係を示す図である。図２１に示す例では、閾値１（ＴＨ１）は、指が仮想キーに近づいたと判断される距離を示す。閾値２（ＴＨ２）は、仮想キーが押されたと判断できる距離を示す。閾値３は仮想キーが押された後に、離れたと判断するための距離を示す。ここでは、基準面と指との距離をｄとする。基準面は、例えば実物体の面や仮想キーボードの面とする。
【０１４２】
図２２は、押下判定部５０２による押下判定処理の一例を示すフローチャートである。図２２に示すステップＳ３０１で、押下判定部５０２は、距離ｄがＴＨ１未満であるか否かを判定する。押下判定部５０２は、距離ｄがＴＨ１未満であれば、ｋ＿ｎｅａｒを１にし、距離ｄがＴＨ１以上であれば、ｋ＿ｎｅａｒを０にする。
【０１４３】
ステップＳ３０２で、押下判定部５０２は、距離ｄがＴＨ２未満であるか否かを判定する。押下判定部５０２は、距離ｄがＴＨ２未満であれば、ｋ＿ｄｏｗｎを１にし、距離ｄがＴＨ２以上であれば何もしない。
【０１４４】
ステップＳ３０３で、押下判定部５０２は、距離ｄがＴＨ３より大きく、かつ、ｋ＿ｄｏｗｎが１であるかを判定する。押下判定部５０２は、この条件を満たせば、ｋ＿ｄｏｗｎを０にし、この条件を満たさなければ何もしない。押下判定部５０２は、ステップＳ３０３の処理が終わると、次の画像の処理を行う。
【０１４５】
これにより、押下判定部５０２は、ｋ＿ｎｅａｒが１のときに、押下判定領域の位置を変更し、また、重畳処理部５０３に表示位置の変更を要求する。押下判定部５０２は、ｋ＿ｄｏｗｎが１のときに、押下がなされたと判定し、入力コマンド生成部２０６に押下された仮想キーの情報を通知する。
【０１４６】
なお、押下判定部５０２は、所定時間内にｋ＿ｄｏｗｎが０にならなければ連続入力と判定し、所定時間内にｋ＿ｄｏｗｎが０になれば、次の押下判定を行う。
【０１４７】
以上、実施例２によれば、実物体（例えば指）が仮想キーに近づいた場合に、位置を変更する押下判定領域を必要最小限に抑えることができる。また、実施例２によれば、押下判定領域の位置の変更に合わせて、仮想キーの表示位置を変更させることもできる。また、実施例２によれば、誤り傾向データを参照するため、誤入力が発生しない仮想キーに対しては、押下判定領域の位置又は仮想キーの表示位置を変更させないこともできる。
【０１４８】
［実施例３］
次に、実施例３における入力装置について説明する。実施例３では、入力装置は、実施例２で用いた、ユーザが仮想キーを押し間違えた場合の正しいキーと誤ったキーとのデータを示す誤り傾向データを更新する。以下に示す実施例では、仮想物体に対して仮想キーボートを例にし、実物体に対して指を例にして説明する。
【０１４９】
＜システムと構成＞
実施例３におけるシステム及び入力装置の構成については、実施例１と同様であるため、その説明を省略する。
【０１５０】
＜構成＞
図２３は、実施例３における入力装置６００の機能の一例を示すブロック図である。図２３に示す構成で、図１１、１５に示す構成と同様のものは同じ符号を付し、その説明を省略する。入力コマンド生成部６０１は、生成したキーコードを学習部６０２に出力する。
【０１５１】
学習部６０２は、仮想キー入力時の指及び仮想キーの座標と、文字を消した情報とを利用して、誤入力の検出を行う。学習部６０２は、誤入力されたキー、入力し直したキー、及びそれらのキーが押下された時の座標及び視点位置を用いて、仮想キー毎の誤り傾向データの学習を行う。
【０１５２】
例えば、学習部６０２は、ＢａｃｋＳｐａｃｅキーのキーコードを取得した場合、誤入力が発生したと検出できる。学習部６０２は、次に入力されたキーコードが正しい入力であると判断できる。
【０１５３】
なお、学習部６０２は、入力し直した後の入力も間違えたり、連続して削除したり、いろいろな場合を想定するとよい。実施例３では、削除後の入力も間違えていた場合も検出できる場合について後述する。
【０１５４】
学習部６０２は、誤入力の場合のキーコード、視点位置、仮想キーの座標、指の座標を誤りデータとしてバッファに保存する。
【０１５５】
また、学習部６０２は、正しい入力の場合のキーコード、視点位置、仮想キーの座標、指の座標を正しいデータとしてバッファに保存する。学習部６０２は、誤りデータと正しいデータとを関連付けて、記憶部６０３に記憶される誤り傾向データを更新する。キーコードは、例えば入力コマンド生成部６０１から取得され、視点位置、仮想キーの座標、指の座標は、例えば押下判定部５０２から取得される。
【０１５６】
記憶部６０３は、予め初期の誤り傾向データを記憶しておく。初期の誤り傾向データは、事前の実験などにより設定されていればよい。また、誤り傾向データは、ユーザ毎に変更されるとよいため、一定時間更新がなければ誤り傾向データを初期化するようにしてもよい。
【０１５７】
これにより、誤り傾向データをユーザに合わせて学習することができ、そのユーザに対して、押下判定領域の位置や仮想キーの表示位置の変更を適切に行うことができる。
【０１５８】
＜動作＞
次に、実施例３における入力装置６００の動作について説明する。まず、図２４、２５を用いて実施例３における入力制御方法を説明する。図２４は、実施例３における入力制御処理（その１）の一例を示すフローチャートである。
【０１５９】
図２４に示すステップＳ４０１で、仮想物体位置決定部２０２は、立体形状データを読み込み、押下判定部５０２は、初期の誤り傾向データを読み込む。
【０１６０】
ステップＳ４０２〜Ｓ４１６は、図２０に示すステップＳ２０２〜Ｓ２１６と同様であるため、説明を省略する。
【０１６１】
ステップＳ４１７で、学習部６０２は、現在のキーコードと、入力時の指の座標、仮想キーの座標、視点位置をバッファに保存する。以下、キーコード、入力時の指の座標、仮想キーの座標、視点位置のデータをまとめて入力データと呼ぶ。
【０１６２】
ステップＳ４１８で、学習部６０２は、現在の入力が誤入力であるかを判定する。誤入力であれば（ステップＳ４１８−ＹＥＳ）Ｓ４１９に進み、誤入力でなければ（ステップＳ４１８−ＮＯ）ステップＳ４２０に進む。誤入力であるか否かは、例えば、ＢａｃｋＳｐａｃｅキーのキーコードであるかどうかで判断できる。
【０１６３】
ステップＳ４１９で、学習部６０２は、保存しておいた前の入力データを誤りデータとして保持する。ステップＳ４１９の処理後は、ステップＳ４０２に戻る。
【０１６４】
ステップＳ４２０で、学習部６０２は、誤入力後の正しい入力が行われたか否かを判定する。正しい入力が行われれば（ステップＳ４２０−ＹＥＳ）ステップＳ４２１に進み、通常の入力が行われれば（ステップＳ４２０−ＮＯ）ステップＳ４０２に戻る。
【０１６５】
ステップＳ４２１で、学習部６０２は、誤りデータと、正しい入力データとを関連付けて誤り傾向データに追加する。
【０１６６】
ステップＳ４２２で、学習部６０２は、追加されたデータに基づき、誤り傾向データを更新する。
【０１６７】
これにより、誤り傾向データがユーザの誤入力の癖に合わせて更新されるので、ユーザの誤入力の癖に合わせて、押下判定領域の位置、又は仮想キーの表示位置の変更処理を行うことができる。
【０１６８】
図２６は、誤入力及び正しい入力を検出する処理の一例を示すフローチャートである。図２６に示す例では、誤入力後の入力も間違えていた場合も間違いとして判断できる処理を示す。
【０１６９】
ステップＳ５０１で、学習部６０２は、パラメータｄ＿ｆｌａｇ、ｎ＿ｆｌａｇを０に初期化する。ｄ＿ｆｌａｇは、正しい入力に対応する誤りの入力を見つけるためのパラメータである。ｎ＿ｆｌａｇは、削除されるまでのキーの連続数を表すパラメータである。
【０１７０】
ステップＳ５０２で、学習部６０２は、入力コマンド生成部６０１からキーを入力する。ステップＳ５０３で、学習部６０２は、入力データをバッファに保存する。
【０１７１】
ステップＳ５０４で、学習部６０２は、キーコードが削除キー（例えばＢａｃｋＳｐａｃｅキー）を表すか否かを判定する。削除キーであれば（ステップＳ５０４−ＹＥＳ）ステップＳ５０５に進み、削除キーでなければ（ステップＳ５０４−ＮＯ）ステップＳ５０９に進む。
【０１７２】
ステップＳ５０５で、学習部６０２は、前の入力が誤りであることを検出する。
【０１７３】
ステップＳ５０６で、学習部６０２は、ｄ＿ｆｌａｇが０であるか否かを判定する。ｄ＿ｆｌａｇが０であれば（ステップＳ５０６−ＹＥＳ）ステップＳ５０７に進み、ｄ＿ｆｌａｇが０でなければ（ステップＳ５０６−ＮＯ）ステップＳ５０８に進む。
【０１７４】
ステップＳ５０７で、学習部６０２は、ｄ＿ｆｌａｇを１にし、ｎ＿ｆｌａｇを０にする。ステップＳ５０７の処理後は、ステップＳ５０２に戻る。
【０１７５】
ステップＳ５０８で、学習部６０２は、ｄ＿ｆｌａｇに１を加算し、ｎ＿ｆｌａｇを０にする。ステップＳ５０８の処理後は、ステップＳ５０２に戻る。
【０１７６】
ステップＳ５０９で、学習部６０２は、ｄ＿ｆｌａｇが０ではなく、かつ、ｎ＿ｆｌａｇが１より大きいかを判定する。この条件を満たす場合（ステップＳ５０９−ＹＥＳ）ステップＳ５１１に進み、この条件を満たさない場合（ステップＳ５０９−ＮＯ）ステップＳ５１０に進む。
【０１７７】
ステップＳ５０９では、削除キーの後に、削除キー以外のキーが２回続いたかを判定している。これにより、削除キーの後に、文字キーを入力後、さらに削除キーが押下された場合、削除キーの間の文字キーを誤入力と判断することができる。
【０１７８】
ステップＳ５１０で、学習部６０２は、ｎ＿ｆｌａｇに１を加算する。ステップＳ５１０の処理後は、ステップＳ５０２に進む。
【０１７９】
ステップＳ５１１で、学習部６０２は、一つ前の入力を正解（正しい入力）と判断する。
【０１８０】
ステップＳ５１２で、学習部６０２は、ｄ＿ｆｌａｇが０より大きいか否かを判定する。ｄ＿ｆｌａｇが０より大きければ（ステップＳ５１２−ＹＥＳ）ステップＳ５１３に進み、ｄ＿ｆｌａｇが０であれば（ステップＳ５１２−ＮＯ）ステップＳ５０１に戻る。
【０１８１】
ステップＳ５１３で、学習部６０２は、２×ｄ＿ｆｌａｇ＋１の入力を、今回の正解に対応する誤入力と判断する。
【０１８２】
ステップＳ５１４で、学習部６０２は、正解時と誤り時の入力データで、誤り傾向データを更新する。ステップＳ５１５で、学習部６０２は、ｄ＿ｆｌａｇを１減算する。ステップＳ５１５の処理後は、ステップＳ５１２に戻る。
【０１８３】
＜誤入力及び正しい入力を検出する具体例＞
図２６の処理に基づく具体例について説明する。図２７は、誤入力及び正しい入力を検出する具体例を説明するための図である。図２７に示す例では、ａ、ｂ、ｄの順に文字が入力され、次に、削除が入力されたとする。
【０１８４】
学習部６０２は、削除が入力された時点で、ｄが誤りであったと判定する。次に、ｅが入力され、削除が入力される。学習部６０２は、削除が入力された時点で、ｅが誤りであったと判定する。
【０１８５】
次に、ｃ、ｄの順で文字が２回連続で入力されたとする。学習部６０２は、ｄの一つ前のｃが正解（正しい入力）だったと判定する。学習部６０２は、このｃに対応する誤りを、ｅとｄとであると判定する。よって、学習部６０２は、このｃに対応する入力データの誤りデータとして、ｅとｄとの入力データを関連付け、誤り傾向データを更新する。
【０１８６】
図２６に示すアルゴリズムは、あくまでも一例であって、連続で削除が入力される場合なども考慮してアルゴリズムを適宜変更すればよい。
【０１８７】
以上、実施例３によれば、誤り傾向データがユーザの誤入力の癖に合わせて更新されるので、ユーザの誤入力の癖に合わせて、押下判定領域の位置、又は仮想キーの表示位置の変更処理を行うことができる。
【０１８８】
［変形例］
次に、各実施例の変形例について説明する。上記実施例では、仮想物体として仮想キーボードを例にして説明したが、仮想物体は、選択オブジェクトであればよい。例えば、選択ボタンや、吹き出しなどでもよい。この吹き出しは、例えばテキストの単語や物などの実物体から出される吹き出しである。
【０１８９】
この吹き出しが選択された場合に、アプリケーション１１３は、吹き出し元の単語や物の詳細情報を調べる。重畳処理部は、この詳細情報を画像に重畳表示することも可能である。
【０１９０】
また、実物体は、指や手に限られるものではない。例えば、３次元位置を特定可能な指示棒などでもよい。
【０１９１】
なお、前述した各実施例で説明した入力制御処理を実現するためのプログラムを記録媒体に記録することで、各実施例での入力制御処理をコンピュータに実施させることができる。例えば、このプログラムを記録媒体に記録し、このプログラムが記録された記録媒体をコンピュータや携帯装置に読み取らせて、前述した入力制御処理を実現させることも可能である。
【０１９２】
なお、記録媒体は、ＣＤ−ＲＯＭ、フレキシブルディスク、光磁気ディスク等の様に情報を光学的，電気的或いは磁気的に記録する記録媒体、ＲＯＭ、フラッシュメモリ等の様に情報を電気的に記録する半導体メモリ等、様々なタイプの記録媒体を用いることができる。
【０１９３】
以上、実施例について詳述したが、特定の実施例に限定されるものではなく、特許請求の範囲に記載された範囲内において、種々の変形及び変更が可能である。また、前述した各実施例の構成要素を全部又は複数を組み合わせることも可能である。
【０１９４】
なお、以上の各実施例に関し、さらに以下の付記を開示する。
（付記１）
画像を取得する実物体検出部と、
前記画像に重畳する仮想物体の表示位置を決定する位置決定部と、
ユーザの視点位置を検出する視点検出部と、
決定された表示位置で前記仮想物体を前記画像に重畳表示する重畳処理部と、
検出された前記視点位置と重畳表示された前記仮想物体の位置とに基づき、前記仮想物体の押下判定に用いる位置を変更する押下判定部と、
を備える入力装置。
（付記２）
前記実物体検出部は、
前記画像に含まれる実物体を検出し、
前記押下判定部は、
前記実物体と重畳表示された前記仮想物体との距離を算出し、前記距離が所定値以下である場合に、前記押下判定に用いる位置の変更処理を行う付記１記載の入力装置。
（付記３）
前記押下判定部は、
前記仮想物体の押下判定に用いる領域を示す前記仮想物体の押下判定領域の位置を、前記仮想物体から前記視点位置方向に所定量変更する付記１又は２記載の入力装置。
（付記４）
前記押下判定部は、
前記仮想物体に対して押下の判定をする際に前記実物体の座標の位置を、前記仮想物体から前記視点位置とは逆方向に所定量変更する付記１又は２記載の入力装置。
（付記５）
前記所定量は、前記視点位置と前記仮想物体との距離に基づいて決定される付記３又は４記載の入力装置。
（付記６）
前記重畳処理部は、
前記押下判定領域の位置が変更された場合、前記押下判定領域に対応する仮想物体の表示位置を前記押下判定領域の位置に合わせて変更する付記３記載の入力装置。
（付記７）
前記仮想物体は仮想キーボードであり、
正しい入力である場合の仮想キーの座標、及び該仮想キーの押下時における前記実物体の座標を含む第１データと、誤った入力である場合の仮想キーの座標、及び該仮想キーの押下時における前記実物体の座標とを含む第２データとを関連付けた第３データを記憶する記憶部をさらに備え、
前記押下判定部は、
前記実物体との距離が前記所定値以内にある仮想キーが、前記記憶部に記憶されている仮想キーである場合に、前記押下判定に用いる位置の変更処理を行う付記２乃至６いずれか一項に記載の入力装置。
（付記８）
前記仮想キーボードの仮想キーに対する誤入力を検出し、誤入力されたときの仮想キーの座標、及び該仮想キーの押下時における前記実物体の座標と、入力され直したときの仮想キーの座標、及び該仮想キーの押下時における前記実物体の座標とを用いて前記第３データを更新する学習部をさらに備える付記７記載の入力装置。
（付記９）
画像を取得し、
前記画像に重畳する仮想物体の表示位置を決定し、
ユーザの視点位置を検出し、
決定された表示位置で前記仮想物体を前記画像に重畳表示し、
検出された前記視点位置と重畳表示された前記仮想物体の位置とに基づき、前記仮想物体の押下判定に用いる位置を変更する処理をコンピュータが実行する入力制御方法。
（付記１０）
画像を取得し、
前記画像に重畳する仮想物体の表示位置を決定し、
ユーザの視点位置を検出し、
決定された表示位置で前記仮想物体を前記画像に重畳表示し、
検出された前記視点位置と重畳表示された前記仮想物体の位置とに基づき、前記仮想物体の押下判定に用いる位置を変更する処理をコンピュータに実行させる入力制御プログラム。
【符号の説明】
【０１９５】
１０１、５００、６００  入力装置
１０２  制御部
１０３  主記憶部
１０４  補助記憶部
１０５  通信部
１１０  画像入力装置
１１１  視点・視線検出装置
１１２  表示装置
１１２  アプリケーション
２０１  実物体検出部
２０２  仮想物体位置決定部
２０３  視点検出部
２０４、５０３  重畳処理部
２０５、５０２  押下判定部
２０６、６０１  入力コマンド生成部
３０１  形状決定部
３０２  位置、姿勢決定部
５０１、６０３  記憶部
６０２  学習部
【図１】
0005765133.tif 000004
【図２】
0005765133.tif 000005
【図３】
0005765133.tif 000006
【図４】
0005765133.tif 000007
【図５】
0005765133.tif 000008
【図６】
0005765133.tif 000009
【図７】
0005765133.tif 000010
【図８】
0005765133.tif 000011
【図９】
0005765133.tif 000012
【図１０】
0005765133.tif 000013
【図１１】
0005765133.tif 000014
【図１２】
0005765133.tif 000015
【図１４】
0005765133.tif 000016
【図１５】
0005765133.tif 000017
【図１６】
0005765133.tif 000018
【図１７】
0005765133.tif 000019
【図１８】
0005765133.tif 000020
【図１９】
0005765133.tif 000021
【図２０】
0005765133.tif 000022
【図２１】
0005765133.tif 000023
【図２２】
0005765133.tif 000024
【図２３】
0005765133.tif 000025
【図２４】
0005765133.tif 000026
【図２５】
0005765133.tif 000027
【図２６】
0005765133.tif 000028
【図２７】
0005765133.tif 000029
【図１３】
0005765133.tif 000030