以下、本発明を具体化した実施形態について、図面を参照して説明する。図1を参照し、ヘッドマウントディスプレイ(以下、HMDという。)1の概要を説明する。HMD1は、投影装置(以下、ヘッドディスプレイ又はHDという。)10及び制御装置(以下、コントロールボックス又はCBという。)50を備える。以下の説明において、図1の上方、下方、右斜め下方、左斜め上方、右斜め上方及び左斜め下方が夫々、HMD1の上方、下方、前方、後方、右方及び左方である。実施形態において、種々の構成における位置関係及び方向関係の理解を助けるため、関連する図面において、HMD1の上方、下方、前方、後方、右方及び左方は、3次元デカルト座標系の軸を参照して説明される。
HD10の概要を説明する。HD10は、専用の装着具である眼鏡5に取り付けられる。ユーザは、HD10が取り付けられた眼鏡5をかけることによって、HD10を頭部に装着して使用する。HD10は、画像光を後方に向けて照射できる。画像光は、HD10を装着したユーザの左眼に入射する。HD10は、ハーネス7を介してCB50と着脱可能に接続する。HD10は、筐体2、ハーフミラー3、画像表示部14(図2参照)、接眼光学系(図示略)、カメラ20等を主な構成要素とする。
筐体2は、眼鏡5の右端部に設けられる。筐体2の左端側に、ハーフミラー3が設けられる。ハーフミラー3は、ユーザがHD10を頭部に装着した状態で、ユーザの左眼の前方に配置される。画像表示部14及び接眼光学系は、筐体2の内部に設けられる。画像表示部14及び接眼光学系の詳細は後述する。カメラ20は、筐体2の前面に設けられる。カメラ20は、筐体2の前方の外界の風景のうち、所定の大きさの領域(以下、所定領域という。)を撮像可能である。
画像表示部14は、液晶素子及び光源を備える。画像表示部14は、コンテンツ画像を表示することが可能である。コンテンツ画像は、静止画像又は動画像である。又、画像表示部14は、コンテンツ画像に撮影画像を重ねて表示することが可能である。撮影画像は、カメラ20によって撮影された画像である。画像表示部14は、CB50からハーネス7を介して送信される映像信号に基づいて、画像を表示する。接眼光学系は、画像表示部14に表示された画像を示す画像光を集光し、ハーフミラー3に射出する。接眼光学系から射出された画像光は、ハーフミラー3によって反射される。ハーフミラー3によって反射された画像光は、筐体2の後方(カメラ20の撮影方向と反対方向)に射出される。HMD1がユーザに装着されている状態で、画像光は、ユーザの左眼の眼球に入射する。又、ハーフミラー3は、外界の実像からの光を、ユーザの左眼に向けて透過する。HMD1は、ユーザの視野範囲内の実像(例えば、外界の風景等)に、画像表示部14に表示された画像を重ねた状態の光景を、ユーザに視認させることができる。
眼鏡5は、HD10をユーザの頭部に保持する。眼鏡5は、フレーム6及び支持部4を備える。フレーム6の形状は、通常の眼鏡と略同一であるので、詳細な説明は省略する。フレーム6のうち、左眼用レンズを支えるリム部の上面右端に、支持部4が設けられる。支持部4は、HD10の筐体2を保持する。支持部4は、筐体2の保持位置を上下方向及び左右方向に移動できる。ユーザは、筐体2を上下方向及び左右方向に移動させることによって、左眼の眼球の位置とハーフミラー3の位置とが前後方向に並ぶように位置を調整できる。
なお、HD10は、ユーザが日常的に使用する眼鏡、ヘルメット、ヘッドホンなど、他の装着具に取り付けられてもよい。画像表示部14は、他の空間変調素子であってもよい。例えば画像表示部14は、画像信号に応じた強度のレーザ光を2次元走査して画像表示を行う網膜走査型表示部、及び有機EL(Organic Electro-luminescence)ディスプレイであってもよい。また、図1では支持部4及びHD10がフレーム6の右側に設けられるが、支持部4及びHD10は、フレーム6の右側に設けられてもよい。この場合、HMD1がユーザに装着されている状態で、画像光は、ユーザの右眼の眼球に入射する。
又、本実施形態において、HD10は、画像表示部14に表示された画像を外界の実像に重ねた状態の光景をユーザに視認させる機能を有する、所謂光学シースルー型のヘッドディスプレイである。しかしながら本発明は、別の機能を有するヘッドディスプレイであってもよい。例えばHD10は、外界の実像からの光をユーザの眼に入射させず、画像表示部14に表示された画像と、カメラによって撮像された外界の画像とをユーザに視認させる機能を有する、所謂ビデオシースルー型のヘッドディスプレイであってもよい。
又、本実施形態において、カメラ20は筐体2の前面に設けられているが、カメラ20は筐体2から着脱可能であってもよい。例えばカメラ20は、HD10の前面方向を撮影可能な状態で、眼鏡5のフレーム6に直接取り付けられてもよい。
CB50の概要を説明する。CB50は、例えばユーザの腰ベルトや腕等に取り付けられる。CB50はHD10を制御する。CB50は、ハーネス7を介してHD10と着脱可能に接続する。CB50は、筐体60、操作スイッチ61、電源スイッチ62等を主な構成要素とする。筐体60の形状は、縁部の丸い略直方体である。操作スイッチ61は、HD10における各種設定や、使用時における各種操作等を行う為のスイッチである。電源スイッチ62は、HMD1の電源をオン又はオフにする為のスイッチである。電源スイッチ62には、電源ランプ63が内蔵される。
図2を参照し、HMD1の電気的構成を説明する。はじめに、HD10の電気的構成を説明する。HD10は、HD10全体の制御を行うCPU11を備える。CPU11は、RAM12、プログラムROM13、画像表示部14、インターフェイス15、及び接続コントローラ19に電気的に接続される。CPU11は、インターフェイス15を介してカメラ20に電気的に接続される。RAM12は、各種データを一時的に記憶する。プログラムROM13は、CPU11が実行するプログラムを記憶する。プログラムROM13はOSを記憶する。プログラムはOS上で実行される。プログラム及びOSは、HMD1の出荷時にプログラムROM13に記憶される。画像表示部14は、コンテンツ画像及び撮影画像の少なくとも一方を表示できる。インターフェイス15はカメラ20に接続し、信号の入出力を制御する。接続コントローラ19は、ハーネス7を介してCB50の接続コントローラ58に接続し、有線通信を行う。
なお、HD10は、フラッシュROMを更に備えてもよい。フラッシュROMには、CPU11が実行するプログラムが記憶されてもよい。CPU11は、フラッシュROMに記憶されたプログラムを実行してもよい。プログラムROM13及びフラッシュROMには、CB50のCPU51が実行するプログラムが記憶されてもよい。CPU11は、CB50のCPU51が実行する処理と同じ処理を、CPU51の代わりに実行してもよい。
CB50の電気的構成を説明する。CB50は、CB50全体の制御を行うCPU51を備える。CPU51は、RAM52、プログラムROM53、フラッシュROM54、インターフェイス55、ビデオRAM56、画像処理部57、接続コントローラ58、及び無線通信部59に電気的に接続される。RAM52は、各種データを一時的に記憶する。RAM52は、テーブル521(図8参照)を記憶する。プログラムROM53は、CPU51が実行するプログラムを記憶する。プログラムROM53はOSを記憶する。プログラムはOS上で実行される。プログラム及びOSは、HMD1の出荷時にプログラムROM53に記憶される。フラッシュROM54は、テーブル541(図7参照)を記憶する。
インターフェイス55は、操作スイッチ61及び電源スイッチ62に接続し、信号の入出力を制御する。画像処理部57は、HD10の画像表示部14に表示する画像を形成し、ビデオRAM56に記憶する。ビデオRAM56は、画像処理部57によって形成された画像を一時的に記憶する。接続コントローラ58は、ハーネス7を介してHD10の接続コントローラ19に接続し、有線通信を行う。無線通信部59は、インターネット、LAN等に接続されたアクセスポイント(図示略)を介して、インターネット、LAN等に接続された周辺機器と通信を行う。周辺機器の例として、パーソナルコンピュータ、スマートフォン、タブレット型携帯端末、サーバ等が挙げられる。
なお、CB50のフラッシュROM54に、CPU51が実行するプログラムが記憶されてもよい。CPU51は、フラッシュROM54に記憶されたプログラムを実行してもよい。プログラムROM53及びフラッシュROM54には、HD10のCPU11が実行するプログラムが記憶されてもよい。CPU51は、HD10のCPU11が実行する処理と同じ処理を、CPU11の代わりに実行してもよい。
なお、HMD1は、プログラム及びOSを、無線通信部59を介してプログラムダウンロード用のサーバからダウンロードし、インストールしてもよい。例えば、プログラム及びOSは、コンピュータで読み取り可能な一時的な記憶媒体(例えば、伝送信号)として、サーバからHMD1に送信されてもよい。プログラムは、HMD1が備えるコンピュータで読み取り可能な記憶装置、例えば、フラッシュROMに保存されてもよい。CPU11は、フラッシュROMに記憶されたプログラムに基づいてプログラムを実行してもよい。CPU51は、フラッシュROM54に記憶されたプログラムに基づいてプログラムを実行してもよい。但し、記憶装置は、例えばROM、フラッシュROM、HDD、RAMなどの、一時的な記憶媒体を除く記憶媒体であってもよい。また、記憶装置は、非一時的な記憶媒体であってもよい。非一時的な記憶媒体は、データを記憶する時間の長さに関わらず、データを留めておくことが可能なものであってもよい。
HMD1の構成は上記実施形態に限定されず、例えば、HD10とCB50とが一体となった構成であってもよい。HD10のCPU11とCB50のCPU51とは、ハーネス7の代わりに無線によって通信を行ってもよい。
HMD1は、カメラ20によって撮影される所定領域内でユーザの指先が移動した時の指先の位置の経時的な変化の傾向が、所定の条件を満たすと判断した場合、対応する処理を実行する。対応する処理の具体例として、各種設定処理、画像表示部14に表示されたコンテンツ画像の切り替え、コンテンツ画像のスクロール、電源制御等が挙げられる。ユーザは、所望する処理をHMD1に実行させる為に、所定の条件を満たすように指先を移動させる必要がある。HMD1は、ユーザが指先の位置の経時的な変化を認識し易いように、指先の位置を示す軌跡画像を、指先の位置を特定したタイミングで繰り返し画像表示部14に表示する。なお、本実施形態では、画像表示部14に表示される画像は軌跡画像のみであり、カメラ20によって撮影された撮影画像は画像表示部14に表示されないことを前提とする。
図3を参照して具体的に説明する。なお以下では、説明を容易とする為、HD10のCPU11によって実行される処理と、CB51のCPU51によって実行される処理とを区別せず、HMD1によって実行される処理として説明する。実際には、以下の処理はCPU11、51の夫々に割り当てられ、夫々によって実行される。詳細は、図4、図5のフローチャートを参照し、後述にて説明する。
図3は、HD10を装着したユーザによって視認される光景25を示す。光景25には実像22(22A、22F〜22J)が含まれる。実像22にはユーザの手23が含まれる。実像22は、ユーザの視野範囲内の実像からの光が、ハーフミラー3を透過してユーザの左眼に到達することによって、ユーザが視認する像である。又、画像表示部14に画像が表示された場合、実像22に画像が重ねられる。これによってユーザは、視野範囲内の実像22と画像との両方を視認できる。又、矩形状の点線で囲まれた領域は、カメラ20によって撮影される所定領域21(21A〜21J)を示す。
HMD1が、指先の位置が時間の経過とともに上から下に垂直に移動すると判断した時に、対応する処理(例えば、HMD1の設定処理等)を実行する場合を例に挙げる。HMD1は、カメラ20によって撮影された撮影画像を取得し、撮影画像に指先が含まれているか判断する。指先が含まれているかの判断方法の詳細は後述する。HMD1は、撮影画像に指先が含まれていると判断した場合、撮影画像に基づいて指先の位置を特定する。特定される指先の位置は、具体的には、カメラ20によって撮影される所定領域内の特定の位置を座標系の基準とした場合の座標情報である。
HMD1は、特定した指先の位置に基づいて、画像表示部14に軌跡画像26(26A〜26J)を表示させる。軌跡画像26は円形である。HMD1は、実像22に含まれる指先の位置に軌跡画像26が重なるように、画像表示部14に表示させる軌跡画像26の位置を調整する。指先が移動を開始する前の状態では、光景25Aで示されるように、ユーザは、実像22A内の手23の指先の位置に重ねられた軌跡画像26Aを視認できる。
HMD1は、カメラ20によって撮影された撮影画像を繰り返し取得し、撮影画像に含まれている指先の位置を繰り返し特定する。HMD1は、画像表示部14に軌跡画像26を繰り返し表示する。ユーザが指先を上から下に向けて垂直方向に移動させた場合、HMD1は、異なる指先の位置を複数特定する。HMD1は、特定した複数の位置に基づいて、画像表示部14に軌跡画像26B〜26Eを順番に表示させる。なおこの場合、HMD1は、画像表示部14に一旦表示させた軌跡画像26を消去しない。このためユーザは、光景25A〜25Eの夫々で示されるように、指先を上から下に向けて垂直方向に移動させたことに伴って徐々に増加する軌跡画像26A〜26Eを視認する。従ってユーザは、軌跡画像26A〜26Eを視認することによって、指先が上から下に向けて垂直に移動していることを容易に把握できる。
なお、HMD1は、画像表示部14に軌跡画像26B、26C、26D、26Eの夫々を表示させるタイミングで、軌跡画像26A−26B間、軌跡画像26B−26C間、軌跡画像26C−26D間、及び軌跡画像26D−26E間に延びる点線を、画像表示部14に表示してもよい。これによってユーザは、指先の経時的な動きを更に容易に把握できる。
又、HMD1は、繰り返し特定した複数の指先の位置に基づいて、指先の位置が時間の経過とともに上から下に垂直に移動していると判断する。この場合、HMD1は、対応する処理を特定し、処理を実行する。このためユーザは、カメラ20によって撮影される所定領域内で指先を上から下に垂直に移動させることによって、HMD1に処理を実行させることができる。
なお、カメラ20は、HD10の筐体2の前面に設けられており、HD10の前面方向の外界を撮影する。従ってユーザは、カメラ20によって指先が撮影されるように、目の前で指先を移動させる。ここで、HD10を装着したユーザが頭部の向きを変えた場合、カメラ20によって撮影される所定領域21も変化する。HD10を装着したユーザが頭部の向きを横方向に変化させた場合を例に挙げる。カメラ20によって撮影される所定領域は、所定領域21F〜21Jのように徐々に変化する。この時に、光景25A〜25Eの場合と同様にユーザが指先を上から下に向けて垂直方向に移動させた場合を例に挙げる。この場合、光景25F〜25Jで示されるように、実像22F〜22Jと指先との位置関係は、カメラ20の撮影方向が変化しても変化せず、光景25A〜25Eの場合と一致する。一方、所定領域21F〜21Jと実像22F〜22Jとの位置関係は、カメラ20の撮影方向が横方向に変化することに応じて横方向に変化する。従って、所定領域21F〜21Jに対する指先の相対位置は、カメラ20の撮影方向が横方向に変化したことに伴い、上下方向だけでなく横方向にも変化する。
HMD1は、カメラ20によって撮影される所定領域内の特定の位置を座標系の基準とした場合の座標情報を、指先の位置として特定する。HD10を装着したユーザが頭部の向きを横方向に変化させた場合には、カメラ20の撮影方向も変化するので、座標情報に対応する座標系の基準の位置は横方向に変化する。このためHMD1は、ユーザが指先を上から下に向けて垂直に移動させている場合でも、指先の位置が時間の経過とともに上から下に垂直に移動していると判断できない。このためHMD1は、対応する処理を特定できなくなる。
更に、光景25F〜25Jで示されるように、実像22F〜22Jに重ねられる軌跡画像26F〜22Jは、カメラ20の撮影方向が横方向に変化した場合、ユーザが指先を上から下に向けて垂直に移動させているにも関わらず、斜め方向に直線状に並んだ状態になる。従ってユーザは、指先が上から下に向けて垂直に移動させていることを把握し難くなる。
このためHMD1は、以下の処理を行うことによって、カメラ20の撮影方向が変化した場合でも、指先の適切な位置を特定し、対応する処理を実行できるようにする。又、HMD1は、以下の処理を行うことによって、ユーザが指先の移動を適切に把握できるように、実像22に重ねる軌跡画像26の位置を調整する。以下では、はじめに、HD10のCPU11によって実行される処理の概要について説明する。次に、CPU51によって実行される処理について、図4、図5のフローチャートを参照して詳細に説明する。
HD1のCPU11によって実行される処理の概要について説明する。CB50の電源スイッチ62を介してHMD1の電源をオンする操作がされた場合、CPU11は次の処理を開始する。CPU11は、カメラ20による撮影を開始する。カメラ20は、撮影を開始した場合、所定領域内を撮影しながら画像データを継続的に出力する。以下、カメラ20から出力される画像データを、撮影画像データという。撮影画像データの画像形式は、Motion JPEG形式、Audio Video Interleave形式、QuickTime形式等である。CPU11は、カメラ20から出力される撮影画像データを、インターフェイス15を介して受信する。CPU11は、撮影画像データをCB50に送信する。
又、CPU11は、軌跡画像26(図3参照)の映像信号をCB50から受信する。CPU11は、受信した映像信号に基づいて画像表示部14を制御することによって、画像表示部14に軌跡画像26を表示させる。HD1を装着したユーザは、画像表示部14に表示された画像からの光がハーフミラー3を反射して左眼に入射することによって、軌跡画像26を視認する。なお、HD1を装着したユーザの左眼には、視野範囲内の実像22からの光がハーフミラー3を透過して入射するので、ユーザは、画像表示部14に表示された軌跡画像26が外界の実像22に重ねられた光景を視認する。
なお、上述において、カメラ20は、CB50に対して撮影画像データを直接送信してもよい。又、画像表示部14は、CB50から映像信号を直接受信してもよい。
図4、図5を参照し、CB50のCPU51によって実行される処理の詳細について説明する。メイン処理は、電源スイッチ62を介してHMD1の電源をオンする操作がされた場合に、プログラムROM53に記憶されたプログラムをCPU51が実行することによって開始される。CPU51は、RAM52に記憶した変数nに0を代入して初期化する(S10)。nは、後述するテーブル541(図7参照)に情報を記憶する場合に、記憶された順序を示すインデックスとして対応付けられる。CPU51は、HD10から送信された撮影画像データを、接続コントローラ58を介して受信する(S11)。CPU51は、受信した撮影画像データをRAM52に記憶する。
CPU51は、RAM52に記憶した撮影画像データに基づいて解析を行い(S13)、撮影画像から指先を特定する。具体的には次の通りである。CPU51は、撮影画像データに対応する撮影画像から、肌色の領域を検出する。肌色領域の検出は、例えば、肌色に対応する所定の画素値(例えば、R=241,G=187,B=147)を有する画素が連続している領域と検出することで可能である。なお、所定の画素値は他の値であってもよく、所定の幅を有してもよい。CPU51は、検出した肌色の領域全体を囲う多角形を特定する。CPU51は、特定した多角形の形状と、プログラムROM53に予め記憶された指先特定用の画像テンプレートとに基づいて、周知のパターンマッチング処理を行う。CPU51は、パターンマッチング処理によって算出された相互相関係数が所定の範囲内の値である場合、特定した多角形の形状と画像テンプレートとのパターンマッチングに成功したと判断する。この場合、CPU51は、多角形の形状の頂点を指先と特定する。なお、撮影画像に指先が含まれているかの判断方法は、上記方法に限定されない。
CPU51は、上記の方法で指先を特定できたか判断する(S15)。CPU51は、指先を特定できた場合、撮影画像に指先が含まれていると判断する(S15:YES)。CPU51は、nに1を加算する(S16)。CPU51は、撮影画像に指先が含まれていると判断してからの経過時間を計測する為のタイマ変数の更新を開始する(S17)。タイマ変数は、OSによって一定周期(例えば1ms)周期で1ずつ加算される。CPU51は、タイマ変数の値に基づいて、撮影画像に指先が含まれていると判断してからの経過時間を特定できる。
CPU51は、特定された指先の位置を示す座標情報を特定する(S18)。座標情報の基準点は、カメラ20によって撮影される所定領域21(図3参照)内の左下の隅とされる。所定領域21の左右方向がX軸方向とされ、上下方向がY軸方向とされる。右方向及び上方向が正方向とされ、左方向及び下方向が負方向とされる。CPU51は、特定した座標情報をRAM52に記憶する。
CPU51は、S18で特定した座標情報に基づき、画像表示部14に軌跡画像26(図3参照)を表示させる為に、次の処理を行う。CPU51は、座標情報によって示される所定領域21内の位置に対応する実像22(図3参照)上の位置(指先の位置)を特定する。CPU51は、画像処理部57を駆動し、特定した実像22上の位置に表示する軌跡画像26を形成させ、ビデオRAM56に記憶させる。CPU51は、ビデオRAM56に記憶された軌跡画像26に基づいて映像信号を生成する。映像信号の形式は、Transition Minimized Differential Signaling(TMDS)、Low voltage differential signaling(LVDS)等である。CPU51は、接続コントローラ58を介してHD10に映像信号を送信する(S19)。なお、映像信号は、CPU51によって生成される場合に限らない。例えば映像信号は、ビデオRAM56に記憶されたコンテンツ画像に基づいて接続コントローラ19が生成してもよい。
なお上記のように、HD10のCPU11は、CB50から送信された軌跡画像26の映像信号を、接続コントローラ19を介して受信する。CPU11は、受信した映像信号に基づいて画像表示部14を制御することによって、画像表示部14に軌跡画像26を表示させる。従って、CPU51は、HD10に対して映像信号を送信することによって、画像表示部14に軌跡画像を表示させていることになる。以下では、CPU51が画像処理部57を駆動して軌跡画像26を形成させ、形成された軌跡画像26をビデオRAM56に記憶させ、ビデオRAM56に記憶された軌跡画像26に基づいて映像信号を生成し、HD10に対して映像信号を送信することによって、画像表示部14に軌跡画像26を表示させることを、CPU51が画像表示部14に軌跡画像26を表示させるという。
又、後述するように、CPU51は、S35で指先の位置の経時的な変化の傾向が所定の条件を満たすと判断する迄の間、又は、S41、S43、S45で、指先を特定してからの経過時間が所定値よりも大きいと判断する迄の間、S19を繰り返し実行し、軌跡画像26を画像表示部14に表示させる。又、後述するように、CPU51は、S27の修正処理によって、修正した軌跡画像26を画像表示部14に表示させる。ここでCPU51は、S19でn回目に軌跡画像26を画像表示部14に表示させる場合、S19及びS27で画像表示部14に表示させた1〜n−1回目に対応する軌跡画像26も、同時に表示させる。このため、S19でn回目に軌跡画像26が画像表示部14に表示された場合、画像表示部14にはn個の軌跡画像26が表示された状態になる。
CPU51は、S11で取得された撮影画像データに基づき、撮影画像のうち所定領域21の四隅の近傍に配置された特徴的な点を、カメラ20の撮影方向に対応する点として特定する(S21)。以下、特定される特徴的な点を、参照点という。図6の撮影画像31を参照して具体的に説明する。撮影画像31は、HD10から受信した撮影画像データに対応する撮影画像を示す。撮影画像31を囲む枠線は、カメラ20によって撮影される所定領域21を示す。所定領域21の形状は長方形である。CPU51は、所定領域21の四隅の頂点32A(左上)、32B(右上)、32C(左下)、32D(右下)の夫々を中心とする円弧33A、33B、33C、33Dを定義する。以下、円弧33A〜33Dを総称して、円弧33という。円弧33の半径は、所定領域21の短辺の半分の長さよりも短い。CPU51は、撮影画像31のうち円弧33Aを含む扇形の内部の部分34A(左上)、円弧33Bを含む扇形の内部の部分34B(右上)、円弧33Cを含む扇形の内部の部分34C(左下)、及び、円弧33Dを含む扇形の内部の部分34D(右下)の夫々の部分を抽出する。部分34A〜34Dは、夫々、撮影画像31のうち所定領域21の四隅の近傍の部分に対応する。CPU51は、抽出した部分34A〜34Dの夫々について、Sobe1オペレータを用いた手法やキャニー法などの一次微分の勾配を利用したアルゴリズムや、勾配の局所的極大を検出するために二次微分のゼロ交差点を利用したアルゴリズムなど、周知のエッジ検出法によって境界点を検出する。CPU51は、検出された複数の境界点のうち濃度差が最も大きい点を、夫々の部分の中の特徴的な点として特定する。これによってCPU51は、部分34A〜34Dの夫々から参照点35A〜35Dを特定する。以下、参照点35A〜35Dを総称して参照点35という。
なおCPU51は、S21(図4参照)が繰り返し実行された場合でも、撮影画像31のうち共通する特徴的な点を、夫々の部分から参照点35として特定できる。その理由は、参照点35を特定する場合のエッジ検出法の各種パラメータ(勾配の値や濃度差)、及び、エッジ検出によって検出された複数の境界点から参照点を選択する場合のアルゴリズムが、S21が繰り返し実行される場合の夫々で共通とされるためである。具体的には次の通りである。撮影画像31に含まれる一軒家の屋根(参照点35A)、長屋の屋根(参照点35B)、一軒家の玄関(参照点35C)、及び、長屋の側壁の特定の位置(参照点35D)の夫々が、参照点35として特定された場合を例に挙げる。CPU51は、参照点35A〜35Dの夫々の位置を示す座標情報と、エッジ検出法によって参照点35A〜35Dの夫々を特定した時のパラメータとを関連付けてRAM52に記憶する。CPU51は、S21を繰り返し実行する場合、RAM52に記憶されたパラメータを参照する。具体的には、CPU51は、エッジ検出法によって複数の境界点を検出した時の複数のパラメータのうち、RAM52に記憶されたパラメータに最も近いパラメータに対応する境界点を、参照点35として特定する。これによってCPU51は、ユーザの頭部の向きが変更されることによってカメラ20の撮影方向が変化し、撮影画像31に含まれる風景が変化した場合でも、撮影画像31に含まれる一軒家の屋根、長屋の屋根、一軒家の玄関、及び、長屋の側壁の特定の位置の夫々を、参照点35A〜35Dとして繰り返し特定できる。
なお、参照点35を4つ特定する理由は、HD10を装着したユーザによる頭部の向きが変化することによって、カメラ20によって撮影される所定領域21の内側から参照点35が外れる場合がある為である。又、カメラ20によって撮影された所定領域21内の参照点35が、ユーザの手によって隠れる場合がある為である。CPU51は、所定領域21の四隅の近傍の部分34A〜34Dから合計4つの参照点35を特定することによって、ユーザの頭部の向きが変化した場合や、ユーザの手の位置が変化した場合でも、常に何れかの参照点35を特定できる。
図4に示すように、CPU51は、S18で特定した指先の位置を示す座標情報のX成分から、S21で特定した4つの参照点35の位置を示す座標情報の夫々のX成分を減算し、4つのX成分の算出結果を特定する。CPU51は、S18で特定した指先の位置を示す座標情報のY成分から、S21で特定した4つの参照点35の位置を示す座標情報の夫々のY成分を減算し、4つのY成分の算出結果を特定する。CPU51は、特定された4つのX成分の算出結果及び4つのY成分の算出結果の夫々を対応付け、4つの差分情報を特定する(S23)。4つの差分情報の夫々は、4つの参照点35の夫々の位置を基準とした場合の指先の位置の相対位置を示す。
なお、CPU51は、S21で4つの参照点35のうち何れかを特定できなかった場合、例えば、HD10を装着したユーザが頭部の向きを変化させたことによって何れかの参照点35が所定領域21の内側から外れた場合、何れかの参照点35に基づいて差分情報を算出しない。しかしながら上記のように、参照点35は、所定領域21の四隅の近傍の夫々から特定されるので、CPU51は、ユーザの頭部の向きが変化した場合でも、常に何れかの参照点35から差分情報を算出できる。
CPU51は、S21で特定した参照点35の位置を示す4つの座標情報、S18で特定した指先の位置を示す座標情報、及び、S23で特定された4つの差分情報を関連付けて、図7に示すテーブル541に記憶する(S25)。CPU51は、nの値をインデックスとして更に関連付けてテーブル541に記憶する。以下、参照点の位置を示す座標情報を第1情報という。指先の位置を示す座標情報を第2情報という。差分情報を第3情報という。
図7を参照し、テーブル541を説明する。テーブル541には、インデックス、4つの第1情報、第2情報、及び、4つの第3情報が関連付けられて記憶される。インデックスは、4つの第1情報、第2情報、及び、4つの第3情報がテーブル541に記憶された順序、言い換えれば、S18で指先の位置が特定され、S21で参照点35の位置が特定され、S23で第3情報が算出された順序を示す。
なお、図7は、図3の光景25F〜25Jで示された場合のように、カメラ20の撮影方向が横方向に変化し、且つ、指先の位置を上から下に向けて垂直方向に移動した場合に作成されるテーブル541を具体的に示している。図3の光景25F〜25Jでは、カメラ20の撮影方向が横方向に変化することに伴い、指先の位置は、所定領域21内を右上から左下に向けて斜め方向に変化している。この位置の変化の傾向は、第2情報のX成分及びY成分の夫々がインデックスの増加に伴って1ずつ減少していることによって示されている。一方、4つの第3情報の夫々は、インデックスが増加するに従ってY成分のみ減少し、X成分は変化しない。その理由は、4つの第3情報の夫々は、参照点35の位置を基準とした場合の指先の位置の相対位置を示している為である。参照点35の位置は、カメラ20の撮影方向に応じて変化するので、参照点35の位置を基準とした場合の指先の位置の相対位置は、ユーザの頭部の動きの影響を受けない。このように、4つの第3情報の夫々は、指先の実際の動きに対応する位置の変化の傾向を示す。
図4に示すように、CPU51は、テーブル541を参照し、n−1のインデックスに対応する第1情報をS21で取得してから、nのインデックスに対応する第1情報をS21で取得する迄の間に、参照点35の位置に対する指先の相対位置が変化したか判断する(S26)。具体的には次の通りである。CPU51は、テーブル541のうちn−1のインデックスに対応付けられた4つの第3情報と、nのインデックスに対応付けられた4つの第3情報とを取得する。以下、n−1のインデックスに対応付けられた4つの第3情報を、4つの第3情報(n−1)という。nのインデックスに対応付けられた4つの第3情報を、4つの第3情報(n)という。CPU51は、取得した4つの第3情報(n−1)、及び、4つの第3情報(n)について、同一の参照点35に対応する第3情報どうしを比較する。4つの第3情報の何れかが相違する場合、参照点35を基準とした場合の指先の相対位置は変化していることになる。CPU51は、参照点35を基準とした場合の指先の相対位置が変化していると判断した場合(S26:YES)、画像表示部14に表示された軌跡画像26を修正する処理(修正処理、図5参照)を実行する(S27)。
図5を参照し、修正処理を説明する。CPU51は、nが1よりも大きいか判断する(S50)。CPU51は、nが1よりも大きくないと判断した場合(S50:NO)、修正処理を終了させ、処理をメイン処理(図4参照)に戻す。CPU51は、nが1よりも大きいと判断した場合(S50:YES)、RAM52に記憶された変数iに1を記憶する(S53)。CPU51は、テーブル541のうちiのインデックスに対応する4つの第1情報及び第2情報を取得する(S55)。CPU51は、テーブル541のうちnのインデックスに対応する4つの第1情報を取得する(S57)。
CPU51は、S55で取得した4つの第1情報(インデックス:i)と、S57で取得した4つの第1情報(インデックス:n)とに基づき、同一の参照点35に対応する第3情報どうしのX成分及びY成分の夫々の減算を行うことによって、4つの参照点35の夫々に対応するX成分及びY成分の差分を算出する。以下、X成分の差分をX差分といい、Y成分の差分をY差分という。CPU51は、同一の参照点35毎に算出したX差分及びY差分のうち、何れかの参照点35に対応するX差分及びY差分を選択する。例えばCPU51は、撮影画像31(図6参照)のうち左上の部分34A(図6参照)、右上の部分34B(図6参照)、右下の部分34C(図6参照)、及び右下の部分34D(図6参照)の順を優先度として定めてもよい。CPU51は、優先度の高い部分から特定された参照点35に対応するX差分及びY差分を優先的に選択してもよい。CPU51は、選択したX差分及びY差分を加算する。なお、X差分及びY差分を加算した値は、テーブル541のうちiのインデックスに対応する第1情報をS11で取得してから、nのインデックスに対応する第1情報をS11で取得する迄の間の、参照点35の位置の移動量に対応する。つまり、CPU51は、X差分及びY差分を加算することによって、参照点35の位置の移動量に対応する値を算出する(S59)。なお以下では、X差分及びY差分を加算することによって算出された値を、変化量と呼称する。なお、CPU51は、X差分及びY差分の夫々を2乗し、2乗された夫々の値を加算し、加算された値の平方根を算出することによって、変化量を算出してもよい。
CPU51は、S59で算出した参照点35の位置の変化量が所定値(例えば1)よりも小さいか判断する(S61)。CPU51は、参照点35の位置の変化量が所定値よりも小さいと判断した場合(S61:YES)、処理をS67に進める。CPU51は、参照点35の位置の変化量が所定値よりも小さくない場合(S61:NO)、次の処理を行うことによって、テーブル541のうちiのインデックスに対応する第2情報を補正する(S63)。CPU51は、テーブル541のうちiのインデックスに対応する第2情報のX成分から、S59で算出されたX差分を減算する。CPU51は、テーブル541のうちiのインデックスに対応する第2情報のY成分から、S59で算出されたY差分を減算する。以下、X成分及びY成分の算出結果を、補正情報といい、補正情報によって示される位置を補正位置という。CPU51は、i、nと補正情報とを関連付けて、図8に示すテーブル521に記憶する(S65)。
図8を参照し、テーブル521を説明する。テーブル521は、i,nと補正情報とを関連付けて記憶する。なお図8では、理解を容易とする為に、補正前の第2情報と矢印とが、夫々の補正情報の前に追加して示されている。又、後述するように、i=nの場合には補正情報は算出されない(S69、図5参照)が、理解を容易とする為、S19(図4参照)でn番目に表示された軌跡画像26の位置を示す座標情報が、i=nに対応付けて示されている。テーブル521の詳細は後述する。
図5に示すように、CPU51は、S65で補正情報をテーブル521に記憶した後、iに1を加算する(S67)。CPU51は、S67で1を加算したiとnとを比較する(S69)。CPU51は、iとnとが一致しないと判断した場合(S69:NO)、iがnよりも小さいと判断する。この場合、CPU51は処理をS55に戻す。CPU51は、S67で1が加算されたiに基づいてS55〜S67の処理を繰り返す。これによってCPU51は、テーブル541に記憶された第2情報をインデックスの順番に補正し、i、nと補正情報とを関連付けてテーブル521に記憶する。
iとnとが一致した場合、テーブル541のうち1からn−1のインデックスの夫々に対応する第2情報は、全て補正されたことになる。CPU51は、iとnとが一致したと判断した場合(S69:YES)、画像表示部14に表示された状態の軌跡画像26のうち、1〜n−1番目に対応する軌跡画像26を消去する(S71)。1〜n−1番目に対応する軌跡画像26とは、S19で1〜n番目に表示された軌跡画像26の夫々の位置がS63で補正され、後述するS73で補正位置に表示された軌跡画像26を示す。
具体的には次の通りである。CPU51は、テーブル541のうちnのインデックスに対応する第2情報によって示される所定領域21内の位置を特定する。次にCPU51は、特定した位置に対応する実像22上の位置に重ねる軌跡画像26を、画像表示部14に表示させる。これによって、S19でn番目に表示された軌跡画像26のみ表示され、1〜n−1番目に対応する軌跡画像26が表示されない状態になる。次に、CPU51は、テーブル521に記憶した補正情報によって示される所定領域21内の補正位置を特定する。CPU51は、特定した補正位置に対応する実像22上の位置に重ねる軌跡画像26を、画像表示部14に表示させる(S73)。これによって、S71で消去された1〜n−1番目に対応する軌跡画像26の夫々の代わりに、位置が修正されたn−1個の軌跡画像26が、n番目に表示された軌跡画像26に追加して表示される。CPU51は修正処理を終了させ、処理をメイン処理(図4参照)に戻す。
以下、n番目に表示された軌跡画像26を、n番目の軌跡画像26という。又、1〜n−1番目の軌跡画像26が、修正処理によって位置が補正位置に補正され、画像表示部14に表示された場合の軌跡画像26を、1〜n−1番目の軌跡画像という。
図4に示すように、修正処理(S27)の終了後、CPU51は、テーブル541に記憶された複数の第3情報に基づいて、指先の位置の経時的な変化が所定の条件を満たすか判断する(S29、S35)。
判断の具体的な方法は次の通りである。CPU51は、テーブル541のうち、複数のインデックスの夫々に関連付けて記憶された4つの第3情報のうち、何れかの参照点35に対応する第3情報を選択する。例えばCPU51は、撮影画像31(図6参照)のうち左上の部分34A(図6参照)、右上の部分34B(図6参照)、右下の部分34C(図6参照)、及び右下の部分34D(図6参照)の順を優先度として定めてもよい。CPU51は、優先度の高い部分から特定された参照点35に対応する第3情報を選択してもよい。次にCPU41は、インデックス毎に選択された複数の第3情報の夫々によって示される位置を、インデックスの順に線で結び、指先の移動の軌跡を示す線分として特定する。これによってCPU51は、指先の位置の経時的な変化、即ち、指先の動きを特定する(S29)。
CPU51は、特定した線分と、プログラムROM53に予め記憶された軌跡特定用の複数の画像テンプレートとに基づいて、周知のパターンマッチング処理を行う。軌跡特定用の複数の画像テンプレートは、特定の形状を示す画像のテンプレートである。特定の形状とは、例えば、上下方向に延びる直線、左右方向に延びる直線、三角形、円形等である。CPU51は、パターンマッチング処理によって複数の画像テンプレートの夫々に対応する複数の相互相関係数を算出し、最も1に近い相互相関係数が所定の範囲内の値であるか判断する。CPU51は、最も1に近い相互相関係数が所定の範囲内の値である場合、パターンマッチングに成功したと判断する。この場合CPU51は、指先の位置の変化の傾向が、最も1に近い相互相関係数に対応する画像テンプレートによって示される特定の形状と一致すると判断する(S35:YES)。なお、複数の第3情報は、参照点35に対する相対位置を示しているので、実際の指先の位置を示す。このためCPU51は、カメラ20による撮影方向が変化した場合でも、指先の位置の変化の傾向が所定の条件を満たしているかを、上記の処理によって適切に判断できる。CPU51は処理をS37に進める。
なお、指先の位置の経時的な変化が所定の条件を満たすかの判断方法は、上記の方法に限定されない。例えばCPU51は、インデックス毎に選択された複数の第3情報の変化の傾向が、複数の所定の条件式のうち何れかを満たす場合、指先の動きが、何れかの所定の条件式に対応する条件を満たすと判断してもよい。
CPU51は、画像表示部14に表示させた軌跡画像26を全て消去する(S37)。理由は、指先の位置の経時的な変化が所定の条件を満たすと既に判断されているので、ユーザはこれ以上指先を移動させる必要がなく、軌跡画像26はユーザにとって不要となる為である。従ってCPU51は、上記処理によって、ユーザにとって不要な軌跡画像26を消去できる。又、CPU51は、軌跡画像26を消去することによって、指先の位置の変化の傾向が所定の条件を満たすと判断したことをユーザに通知できる。
CPU51は、プログラムROM53に記憶された処理内容DBを参照する。処理内容DBには、複数の画像テンプレートの種別を示す情報と、HMD1の処理内容を示す情報とが関連付けて記憶されている。CPU51は、S35で指先の動きを判断する時に算出された1に最も近い相互相関係数に対応する画像テンプレートに対応する処理内容を、処理内容DBを参照することによって特定する。CPU51は、特定した処理内容に基づいて処理を実行する(S39)。処理内容DBを参照することによって、CPU51は、指先の位置の変化の傾向に対応する処理を容易に特定できる。CPU51は、S17で開始したタイマ変数の更新を停止する(S40)。CPU51は処理をS11に戻す。
CPU51は、上記の処理が繰り返される中で、S11で受信された撮影画像データに対応する撮影画像から指先を特定できないと判断した場合(S15:NO)、S17で更新を開始したタイマ変数の値に基づいて、撮影画像に指先が含まれていない状態の経過時間を特定する。CPU51は、特定した経過時間が所定値(以下、第1時間という。)よりも大きく、且つ、画像表示部14に軌跡画像26を表示させているか判断する(S41)。CPU51は、特定した経過時間が第1時間よりも大きくないか、又は、画像表示部14に軌跡画像26を表示させていないと判断した場合(S41:NO)、処理をS11に戻す。CPU51は、特定した経過時間が第1時間よりも大きく、且つ、画像表示部14に軌跡画像26を表示させていると判断した場合(S41:YES)、画像表示部14に表示させた軌跡画像26を全て消去する(S42)。CPU51は処理をS40に進める。
カメラ20によって撮影される所定領域21内に指先が含まれていると最初に判断された後(S15)、第1時間以上継続して指先が所定領域21内に含まれない状態となった場合(S41:YES)、ユーザは、HMD1に特定の処理を実行させるための指先の移動動作を行っていない場合がある。又、このような場合、S35で、指先の位置の経時的な変化が所定の条件を満たすか否かを判断できなくなる。このような場合、軌跡画像26はユーザにとって不要となる。従ってCPU51は、上記処理によって、ユーザにとって不要な軌跡画像26を消去できる。
CPU51は、上記の処理が繰り返される中で、S26の処理で、4つの第3情報(n−1)と4つの第3情報(n)とについて同一の参照点35に対応する第3情報どうしを比較し、何れも相違しないと判断した場合、参照点35を基準とした場合の指先の相対位置が変化していないと判断する(S26:NO)。CPU51は、S17で更新を開始したタイマ変数の値に基づいて、参照点35を基準とした場合の指先の相対位置が変化しない状態の経過時間を特定する。CPU51は、特定した経過時間が所定値(以下、第2時間という。)よりも大きく、且つ、画像表示部14に軌跡画像26を表示させているか判断する(S43)。CPU51は、特定した経過時間が第2時間よりも大きくないか、又は、画像表示部14に軌跡画像を表示させていないと判断した場合(S43:NO)、処理をS11に戻す。CPU51は、特定した経過時間が第2時間よりも大きく、且つ、画像表示部14に軌跡画像を表示させていると判断した場合(S43:YES)、画像表示部14に表示させた軌跡画像26を全て消去する(S44)。CPU51は処理をS40に進める。
カメラ20によって撮影される所定領域21内に指先が含まれていると最初に判断された後(S15)、参照点35を基準とした場合の指先の相対位置が変化しない状態が第2時間以上継続した場合(S43:YES)、ユーザは、HMD1に特定の処理を実行させるための指先の移動動作を行っていない場合可能性が高い。このような場合、軌跡画像26はユーザにとって不要となる。従ってCPU51は、上記処理によって、ユーザにとって不要な軌跡画像26を消去できる。
CPU51は、上記の処理が繰り返される中で、S35の処理で、最も1に近い相互相関係数が所定の範囲外の値である場合、指先の動きが、複数の画像テンプレートによって示される条件を満たしていないと判断する(S35:NO)。CPU51は、S17で更新を開始したタイマ変数の値に基づいて、指先の動作が所定の条件を満たしていない状態の経過時間を特定する。CPU51は、特定した経過時間が所定値(以下、第3時間という。)よりも大きいか判断する(S45)。CPU51は、特定した経過時間が第3時間よりも大きくないと判断した場合(S45:NO)、処理をS11に戻す。CPU51は、特定した経過時間が第3時間よりも大きいと判断した場合(S45:YES)、画像表示部14に表示させた軌跡画像26を全て消去する(S46)。CPU51は処理をS40に進める。
カメラ20によって撮影される所定領域21内に指先が含まれていると最初に判断され(S15)、軌跡画像26が表示された(S19)後、指先の動作が所定の条件を満たさない状態が第3時間以上継続した場合(S45:YES)、ユーザは、HMD1に特定の処理を実行させるための指先の移動動作を行っていない可能性が高い。このような場合、軌跡画像26はユーザにとって不要となる。従ってCPU51は、上記処理によって、ユーザにとって不要な軌跡画像26を消去できる。
図4、図5、図7〜図9を参照し、軌跡画像26が画像表示部14に表示される場合について、具体的に説明する。CPU51は、nが「1」の状態でメイン処理(図4参照)のS17以降を実行する場合、テーブル541(図7参照)のうち「1」のインデックスに対応する第2情報(13,8)に基づき、画像表示部14の対応する位置に軌跡画像26F(光景25F、図9参照)を1番目の軌跡画像として表示させる(S19、図4参照)。CPU51は、修正処理(S27、図4参照)を実行した場合、nが1より大きくないので(S50:NO、図5参照)、第2情報の補正(S63、図5参照)を行わず、テーブル521(図8参照)に補正情報を記憶しない(但し、テーブル521では、上記で説明したように、理解を容易とする為に、軌跡画像26Fに対応する位置を示す第2情報(13,8)が、i=n=1に対応付けて示されている。)。
次に、CPU51は、nが「2」の状態でメイン処理のS17以降を実行する場合、テーブル541のうち「2」のインデックスに対応する第2情報(12,7)に基づき、画像表示部14の対応する位置に軌跡画像26G(光景25G、図9参照)を2番目の軌跡画像として表示させる(S19、図4参照)。又、CPU51は、1番目の軌跡画像26Fも画像表示部14に表示させる(S19)。テーブル521では、軌跡画像26Gに対応する位置を示す第2情報(12,7)が、i=n=2に対応付けて示されている。CPU51は、修正処理(S27、図4参照)を実行した場合、nが「1」より大きいので(S50:YES、図5参照)、次のようにして第2情報の補正を行う。
CPU51は、「1」(=i)のインデックスに対応する第1情報(5,9)(15,9)(5,1)(15,1)及び第2情報(13,8)を、テーブル541(図7参照)から取得する(S55、図5参照)。CPU51は、「2」(=n)のインデックスに対応する第1情報(4,9)(14,9)(4,1)(14,1)を、テーブル541(図7参照)から取得する(S57、図5参照)。CPU51は、S55及びS57の夫々で取得した第1情報に基づいて、X差分及びY差分を算出する。算出されるX差分は何れも「1」であり、Y差分は何れも「0」である。CPU51は、X差分とY差分とを加算し、参照点35の位置の変化量「1」を算出する(S59、図5参照)。算出される参照点35の位置の変化量「1」は所定値「1」よりも小さくないので(S61:NO、図5参照)、CPU51は、テーブル541のうち「1」(=i)のインデックスに対応する第2情報のX成分「13」から、S59で算出されたX差分「1」を減算し、補正後のX成分「12」を得る。CPU51は、テーブル541のうち「1」(=i)のインデックスに対応する第2情報のY成分「8」から、S59で算出されたY差分「0」を減算し、補正後のY成分「8」を得る。CPU51は、補正情報(12,8)を特定し、i=1、n=2に対応付けてテーブル521(図8参照)に記憶する(S65、図5参照)。これによって、第2情報は(13,8)から(12,8)に修正されたことになる。
CPU51は、i(=1)に「1」を加算した結果「2」がn(=2)と同一であるため(S69:YES、図5参照)、テーブル541のうち「1」(=n−1)のインデックスに対応する第2情報に基づいて画像表示部14に表示させた1番目の軌跡画像26Fを消去する(S71、図5参照)(光景25G、図9参照)。CPU51は、画像表示部14のうちテーブル521に記憶された補正情報(12,8)によって示される補正位置に、軌跡画像261(光景25G、図9参照)を、新たな1番目の軌跡画像として表示させる(S73、図5参照)。図9に示すように、軌跡画像261(補正情報:(12,8))は、消去した軌跡画像26F(座標情報:(13,8))に対して左方に配置する。また軌跡画像261は、S19(図4参照)で表示させた軌跡画像26G(座標情報:(12,7))に対して垂直上側に配置する。
CPU51は、nが「3」の状態でメイン処理のS17以降を実行する場合、テーブル541のうち「3」のインデックスに対応する第2情報(11,6)に基づき、画像表示部14の対応する位置に軌跡画像26H(光景25H、図9参照)を3番目の軌跡画像として表示させる(S19、図4参照)。又、CPU51は、1番目の軌跡画像261、及び、2番目の軌跡画像26Gも画像表示部14に表示させる(S19)。CPU51は、修正処理(S27、図4参照)を実行した場合、nが「1」より大きいので(S50:YES、図5参照)、次のようにして第2情報の補正を行う。
CPU51は、「1」(=i)のインデックスに対応する第1情報及び第2情報を、テーブル541(図7参照)から取得する(S55、図5参照)。CPU51は、「3」(=n)のインデックスに対応する第1情報(3,9)(13,9)(3,1)(13,1)を、テーブル541(図7参照)から取得する(S57、図5参照)。CPU51は、S55及びS57の夫々で取得した第1情報に基づいて、X差分及びY差分を算出する。算出されるX差分は何れも「2」であり、Y差分は何れも「0」である。CPU51は、X差分とY差分とを加算し、参照点35の位置の変化量「2」を算出する(S59、図5参照)。算出される参照点35の位置の変化量「2」は所定値「1」よりも小さくないので(S61:NO、図5参照)、CPU51は、テーブル541のうち「1」(=i)のインデックスに対応する第2情報のX成分「13」から、S59で算出されたX差分「2」を減算し、補正後のX成分「11」を得る。CPU51は、テーブル541のうち「1」(=i)のインデックスに対応する第2情報のY成分「8」から、S59で算出されたY差分「0」を減算し、補正後のY成分「8」を得る。CPU51は、補正情報(11,8)を特定し、i=1、n=3に対応付けてテーブル521(図8参照)に記憶する(S65、図5参照)。これによって、第2情報は(13,8)から(11,8)に修正されたことになる。CPU51は、i(=1)に「1」を加算した結果「2」がn(=3)より小さいので(S69:NO、図5参照)、1が加算されたi(=2)に基づいて処理を繰り返す。
CPU51は、「2」(=i)のインデックスに対応する第1情報(4,9)(14,9)(4,1)(14,1)及び第2情報(12,7)を、テーブル541(図7参照)から取得する(S55、図5参照)。CPU51は、「3」(=n)のインデックスに対応する第1情報を、テーブル541(図7参照)から取得する(S57)。CPU51は、S55及びS57の夫々で取得した第1情報に基づいて、X差分及びY差分を算出する。算出されるX差分は何れも「1」であり、Y差分は何れも「0」である。CPU51は、X差分とY差分とを加算し、参照点35の位置の変化量「1」を算出する(S59、図5参照)。算出される参照点35の位置の変化量「1」は所定値「1」よりも小さくないので(S61:NO、図5参照)、CPU51は、テーブル541のうち「2」(=i)のインデックスに対応する第2情報のX成分「12」から、S59で算出されたX差分「1」を減算し、補正後のX成分「11」を得る。CPU51は、テーブル541のうち「2」(=i)のインデックスに対応する第2情報のY成分「7」から、S59で算出されたY差分「0」を減算し、補正後のY成分「7」を得る。CPU51は、補正情報(11,7)を特定し、i=2、n=3に対応付けてRAM52に記憶する(S65、図5参照)。これによって、第2情報は(12,7)から(11,7)に修正されたことになる。
CPU51は、i(=2)に「1」を加算した結果「3」がn(=3)と同一であるため(S69:YES、図5参照)、テーブル541のうち「1」「2」(=n−1)のインデックスに対応する第2情報に基づいて表示させた1番目の軌跡画像261、及び、2番目の軌跡画像26Gを消去する(S71、図5参照)(光景25H、図9参照)。CPU51は、画像表示部14のうちテーブル521に記憶された補正情報(11,8)によって示される補正位置に、軌跡画像262(光景25H、図9参照)を、新たな1番目の軌跡画像として表示させる。又、補正情報(11,7)によって示される補正位置に、軌跡画像263(光景25H、図9参照)を、新たな2番目の軌跡画像として表示させる(S73、図5参照)。図9に示すように、軌跡画像262(補正情報:(11,8))は、消去された軌跡画像261(補正情報:(12,8))に対して左方に配置する。又、軌跡画像263(補正情報:(11,7))は、消去された軌跡画像26G(座標情報:(12,7))に対して左方に配置する。又、軌跡画像262、263は、S19(図4参照)で表示させた軌跡画像26H(座標情報:(11,6))に対して垂直上側に配置する。
以上の処理は、メイン処理のS35で指先の位置の経時的な変化が所定の条件を満たすと判断されるまで繰り返される。これによって、図9の光景25I、25Jで示されるように、n−1番目の軌跡画像26は、修正処理(S27参照)が繰り返される毎に補正される。従って、光景25Iの軌跡画像264〜266、26I、及び、光景25Jの軌跡画像267〜270、26Jで示されるように、軌跡画像26は、上から下に向けて垂直に並んだ状態になる。なお、この配置は、実際の指先の位置の経時的な変化の傾向を示す。
以上説明したように、CPU51は、第1情報(参照点35の位置を示す情報)と、第2情報(指先の位置を示す情報)とに基づいて第3情報を決定し、テーブル541に記憶する。第3情報は、参照点35に対する指先の相対位置を特定可能な情報である。参照点35の位置は、カメラ20の撮影方向が変化することに応じて変化する。このため、参照点35に対する指先の相対位置の経時的な変化は、カメラ20の撮影方向が変化した場合でも、実際の指先の動きを示す。CPU51は、指先の相対位置の経時的な変化の傾向が所定の条件を満たす場合、対応する処理を実行する。これによってCPU51は、カメラ20による撮影方向が変化した場合でも、実際の指先の動きを正確に特定し、対応する処理を実行できる。
又、CPU51は、HD10を装着したユーザの頭部の向きが変化し、カメラ20の撮影方向が変化した場合でも、所定領域21の変化分を排除した軌跡画像26を、実際の指先の移動の様子を示す軌跡画像26として表示できる。従ってユーザは、所定の条件に合致するように指先を適切に移動させることができる。又、ユーザは、指先が所定の条件に合致するように移動しているかを容易に確認できる。又、画像表示部14に表示された直後の軌跡画像26、即ち、n番目に画像表示部14に表示された軌跡画像26は、実像22に含まれる手23の指先の位置と一致する。このためユーザは、軌跡画像26が指先の位置を示していることを違和感なく認識できる。
本発明は上記実施形態に限定されず、種々の変更が可能である。図7、図10、図11を参照し、変形例における修正処理を説明する。図10の修正処理は、図4のメイン処理のS27で、図5の修正処理の代わりに実行される。メイン処理は上記実施形態と同一である為、処理を省略する。
図10を参照し、変形例における修正処理を説明する。CPU51は、RAM52に記憶されたnが1よりも大きいか判断する(S70)。CPU51は、nが1よりも大きくないと判断した場合(S70:NO)、修正処理を終了させ、処理をメイン処理(図4参照)に戻す。CPU51は、nが1よりも大きいと判断した場合(S70:YES)、iの値としてnを設定する(S71)。CPU51は、テーブル541(図7参照)のうち「1」のインデックスに対応する4つの第1情報を取得する(S75)。CPU51は、テーブル541のうちi(=n)のインデックスに対応する4つの第1情報及び第2情報を取得する(S77)。
CPU51は、S75で取得した4つの第1情報(インデックス:1)と、S77で取得した4つの第1情報(インデックス:i)とに基づき、同一の参照点35に対応する第3情報どうしのX成分及びY成分の夫々の減算を行うことによって、4つの参照点35の夫々に対応するX成分及びY成分の差分(X差分及びY差分))を算出する。CPU51は、同一の参照点35毎に算出したX差分及びY差分のうち、何れかの参照点35に対応するX差分及びY差分を選択する。CPU51は、選択したX差分及びY差分を加算し、参照点35の位置の変化量を算出する(S79)。
CPU51は、S79で算出した参照点35の位置の変化量が所定値(例えば「1」)よりも小さいか判断する(S81)。CPU51は、参照点35の位置の変化量が所定値よりも小さいと判断した場合(S81:YES)、修正処理を終了させ、処理をメイン処理(図4参照)に戻す。CPU51は、参照点35の位置の変化量が所定値よりも小さくないと判断した場合(S81:NO)、次の処理を行うことによって、テーブル541のうちi(=n)のインデックスに対応する第2情報を補正する(S83)。具体的には次の通りである。CPU51は、テーブル541のうちiのインデックスに対応する第2情報のX成分に、S79で算出されたX差分を加算する。CPU51は、テーブル541のうちiのインデックスに対応する第2情報のY成分に、S79で算出されたY差分を加算する。CPU51は、算出されたX成分及びY成分を含む補正情報を、i(=n)、nと補正情報とを関連付けて、テーブル521(図11参照)に記憶する(S85)。
図11に示すように、テーブル521では、上記のように補正情報が記憶されることによって、i=nに補正情報が関連付けて記憶される。なお図11では、理解を容易とする為に、補正前の第2情報と矢印とが、夫々の補正情報の前に追加して示されている。又、i=n以外に対応する情報は記憶されないが、理解を容易とする為、補正情報に基づいて継続して画像表示部14に表示される軌跡画像26の位置を示す座標情報が示されている。
図10に示すように、CPU51は、画像表示部14に表示された状態の軌跡画像26のうち、S19(図4参照)で表示されたn番目の軌跡画像26を消去する(S87)。これによって、1〜n−1番目に対応する軌跡画像26が画像表示部14に表示された状態になる。1〜n−1番目に対応する軌跡画像26とは、S19で1〜n−1番目に表示された軌跡画像26の夫々の位置が、i=1〜n−1の時に実行された補正処理のS83で補正され、更に、i=1〜n−1の時に実行された補正処理のS89(後述)で、補正位置に表示された軌跡画像26を示す。
次にCPU51は、テーブル521に記憶した補正情報によって示される所定領域21内の補正位置を特定する。CPU51は、特定した位置に対応する実像22上の位置に重ねる軌跡画像26を、画像表示部14に表示させる(S89)。これによって、S87で消去されたn番目に対応する軌跡画像26の代わりに、位置が修正されたn番目に対応する軌跡画像26が、1〜n−1番目に対応する軌跡画像26に追加して表示される。CPU51は修正処理を終了させ、処理をメイン処理(図4参照)に戻す。
図4、図10〜図12を参照し、軌跡画像26が画像表示部14に表示される場合について、具体的に説明する。CPU51は、nが「1」の状態でメイン処理(図4参照)のS17以降を実行する場合、テーブル541(図7参照)のうち「1」のインデックスに対応する第2情報(13,8)に基づき、画像表示部14の対応する位置に軌跡画像26F(光景25F、図12参照)を表示させる(S19、図4参照)。CPU51は、修正処理(S27、図4参照)を実行した場合、nが1より大きくないので(S70:NO、図10参照)、第2情報の補正(S83、図10参照)を行わず、テーブル521(図11参照)に補正情報を記憶しない(但し、テーブル521では、上記で説明したように、理解を容易とする為に、軌跡画像26Fに対応する位置を示す第2情報(13,8)が、i=n=1に対応付けて示されている。)。
次に、CPU51は、nが「2」の状態でメイン処理のS17以降を実行する場合、テーブル541のうち「2」のインデックスに対応する第2情報(12,7)に基づき、画像表示部14の対応する位置に軌跡画像26G(光景25G、図12参照)を表示させる(S19、図4参照)。CPU51は、修正処理(S27、図4参照)を実行した場合、nが「1」より大きいので(S70:YES、図10参照)、次のようにして第2情報の補正を行う。
CPU51は、「1」のインデックスに対応する第1情報(5,9)(15,9)(5,1)(15,1)を、テーブル541(図7参照)から取得する(S75、図10参照)。CPU51は、「2」(=i=n)のインデックスに対応する第1情報(4,9)(14,9)(4,1)(14,1)及び第2情報(12,7)を、テーブル541(図7参照)から取得する(S77、図10参照)。CPU51は、S75及びS77の夫々で取得した第1情報に基づいて、X差分及びY差分を算出する。算出されるX差分は何れも「1」であり、Y差分は何れも「0」である。CPU51は、X差分とY差分とを加算し、参照点35の位置の変化量「1」を算出する(S79、図10参照)。算出される参照点35の位置の変化量「1」は所定値「1」よりも小さくないので(S81:NO、図10参照)、CPU51は、テーブル541のうち「2」(=i=n)のインデックスに対応する第2情報のX成分「12」に、S79で算出されたX差分「1」を加算し、補正後のX成分「13」を得る。CPU51は、テーブル541のうち「2」のインデックスに対応する第2情報のY成分「7」に、S59で算出されたY差分「0」を加算し、補正後のY成分「7」を得る。CPU51は、補正情報(13,7)を特定し、i=2、n=2に対応付けてテーブル521(図11参照)に記憶する(S85、図10参照)。これによって、第2情報は(12,7)から(13,7)に修正されたことになる。
CPU51は、テーブル541のうち「2」(=i=n)のインデックスに対応する第2情報に基づいて画像表示部14に表示させた軌跡画像26Gを消去する(S87)(光景25G、図12参照)。CPU51は、画像表示部14のうちテーブル521に記憶された補正情報(13,7)によって示される補正位置に、軌跡画像281(光景25G、図12参照)を表示させる(S89、図10参照)。図12の光景25Gに示すように、軌跡画像281(補正情報:(13,7))は、消去した軌跡画像26F(座標情報:(12,7))に対して右方に配置する。また軌跡画像281は、軌跡画像26F(座標情報:(13,8))に対して垂直下側に配置する。
CPU51は、nが「3」の状態でメイン処理のS17以降を実行する場合、テーブル541のうち「3」のインデックスに対応する第2情報(11,6)に基づき、画像表示部14の対応する位置に軌跡画像26H(光景25H、図9参照)を表示させる(S19、図4参照)。CPU51は、修正処理(S27、図4参照)を実行した場合、nが「1」より大きいので(S70:YES、図10参照)、次のようにして第2情報の補正を行う。
CPU51は、「1」のインデックスに対応する第1情報を、テーブル541(図7参照)から取得する(S75、図10参照)。CPU51は、「3」(=i=n)のインデックスに対応する第1情報(3,9)(13,9)(3,1)(13,1)及び第2情報(11,6)を、テーブル541(図7参照)から取得する(S77、図10参照)。CPU51は、S75及びS77の夫々で取得した第1情報に基づいて、X差分及びY差分を算出する。算出されるX差分は何れも「2」であり、Y差分は何れも「0」である。CPU51は、X差分とY差分とを加算し、参照点35の位置の変化量「2」を算出する(S79、図10参照)。算出される参照点35の位置の変化量「2」は所定値「1」よりも小さくないので(S81:NO、図10参照)、CPU51は、テーブル541のうち「3」(=i=n)のインデックスに対応する第2情報のX成分「11」に、S79で算出されたX差分「2」を加算し、補正後のX成分「13」を得る。CPU51は、テーブル541のうち「3」のインデックスに対応する第2情報のY成分「6」に、S59で算出されたY差分「0」を加算し、補正後のY成分「6」を得る。CPU51は、補正情報(13,6)を特定し、i=3、n=3に対応付けてテーブル521(図11参照)に記憶する(S85、図10参照)。これによって、第2情報は(11,6)から(13,6)に修正されたことになる。
CPU51は、テーブル541のうち「3」(=i=n)のインデックスに対応する第2情報に基づいて画像表示部14に表示させた軌跡画像26Hを消去する(S87)(光景25H、図12参照)。CPU51は、画像表示部14のうちテーブル521に記憶された補正情報(12,6)によって示される補正位置に、軌跡画像282(光景25H、図12参照)を表示させる(S89、図10参照)。図12の光景25Hに示すように、軌跡画像282(補正情報:(13,6))は、消去した軌跡画像26H(座標情報:(11,6))に対して右方に配置する。また軌跡画像282は、軌跡画像26F(座標情報:(13,8))、281(座標情報:(13,7))に対して垂直下側に配置する。
以上の処理は、メイン処理のS35で指先の位置の経時的な変化が所定の条件を満たすと判断されるまで繰り返される。これによって、図12の光景25I、25Jで示されるように、n番目に画像表示部14に表示された軌跡画像26は、修正処理(S27参照)によって補正される。従って、光景25Iの軌跡画像26F、281〜283、及び、光景25Jの軌跡画像26F、281〜284で示されるように、軌跡画像26は、上から下に向けて垂直に並んだ状態になる。なお、この配置は、実際の指先の位置の経時的な変化の傾向を示す。
このようにCPU51は、HD10を装着したユーザの頭部の向きが変化し、カメラ20の撮影方向が変化した場合でも、所定領域21の変化分を排除した軌跡画像26を、実際の指先の移動の様子を示す軌跡画像26として表示できる。従ってユーザは、所定の条件に合致するように指先を適切に移動させることができる。又、ユーザは、指先が所定の条件に合致するように移動しているかを容易に確認できる。又、上記実施形態の場合と異なり、画像表示部14に一旦表示された軌跡画像26は移動しない。このためユーザは、軌跡画像26を違和感なく視認できる。
上記実施形態において、CPU51は、S15で指先を特定したが、特定される対象物は指先に限定されない。例えばCPU51は、所定色(例えば赤色)のペン先を対象物として特定してもよい。この場合、CPU51は、所定色に対応する所定の画素値を有する画素が連続している領域を検出することで、対象物が含まれる領域を検出することができる。そして、検出した領域全体を囲う多角形の形状と、プログラムROM53に予め記憶された、対象物に対応する形状の画像テンプレートとに基づいて、周知のパターンマッチング処理が行われる。CPU51は、パターンマッチング処理によって算出された相互相関係数が所定の範囲内の値である場合、特定した多角形の形状と画像テンプレートとのパターンマッチングに成功したと判断する。この場合、CPU51は、多角形の領域をペン先と特定する。カメラ20は、CB50に対して撮影画像データを直接送信してもよい。
CPU51は、S21で、カメラ20の撮影方向を示す情報として参照点35を特定した。CPU451は、別の方法で、カメラ20の撮影方向を示す情報を特定してもよい。例えば、HD10には加速度センサ又は方位センサが更に設けられてもよい。加速度センサは、ユーザの頭部の向く方向の変化を、加速度の情報として検出してもよい。方位センサは、ユーザの頭部の向く方向の変化を、方位の情報として検出してもよい。CPU51は、加速度センサ又は方位センサによって検出される情報に基づき、HMD1の起動時におけるユーザの頭部の向く方向に対する相対的な方向を、カメラ20の撮影方向を示す情報として特定してもよい。CPU51は、カメラ20の撮影方向を示す情報から、カメラ20によって撮影される撮影領域の変化分を特定し、特定した変化分に基づいて参照点35を特定してもよい。又、例えばCPU51は、S21で特定した参照点35の位置を示す情報(第1情報)を、加速度センサから取得した加速度の情報に基づいて修正し、S23で第3情報を特定してもよい。これによってCPU51は、カメラ20の撮影方向が変化した場合でも、共通する参照点35を継続して特定し、第3情報を特定できる。
CPU51が特定する参照点35の数、及び、参照点35を抽出する撮影画像31の場所は変更できる。例えばCPU41は、1〜3、又は4よりも大きい数分、参照点35を特定してもよい。例えばCPU51は、参照点35を特定する位置を、所定領域21の略中央としてもよい。
CPU51は、S25で、インデックス、4つの第1情報、第2情報、及び4つの第3情報を関連付けてテーブル541に記憶した。これに対し、インデックスの代わりに、S25が実行されたときの時刻情報が、4つの第1情報、第2情報、及び4つの第3情報に関連付けてテーブル541に記憶されてもよい。或いは、CPU51は、4つの第1情報、第2情報、及び4つの第3情報を関連付けてテーブル541に記憶し、インデックスは記憶されなくてもよい。例えばCPU51は、4つの第1情報、第2情報、及び4つの第3情報をテーブル541に記憶した順番を、テーブル541が記憶されるフラッシュROM54のアドレス情報に基づいて特定してもよい。
上記実施形態において、CPU51は、修正処理(S27)を実行することによって軌跡画像26の位置を修正した。CPU51は修正処理を行わなくてもよい。CPU51は、S19で表示した軌跡画像26の位置をそのまま維持しつつ、指の位置の経時的な変化が所定の条件を満たすかを第3情報に基づいて判断してもよい。CPU51は、S41、S43、S45の夫々で、経過時間が所定値よりも大きく且つ軌跡画像26が画像表示部14に表示されている場合に、S42、S44、S46の夫々で軌跡画像26を消去した。これに対してCPU51は、S41、S43、S45の夫々で、画像表示部14に表示された軌跡画像26の数が所定値よりも大きいか否かを判断してもよい。CPU51は、軌跡画像26の数が所定値よりも小さい場合に、軌跡画像26を消去してもよい。
画像表示部14、接眼光学系、及びハーフミラー3が本発明の「表示部」の一例である。カメラ20が本発明の「撮影部」の一例である。指先が本発明の「対象物」の一例である。S15の処理を行うCPU51が本発明の「第1判断手段」の一例である。カメラ20が本発明の「検出部」の一例である。撮影画像データが本発明の「検出部の出力」の一例である。参照点35の位置が本発明の「第1位置」の一例である。S21の処理を行うCPU51が本発明の「第1取得手段」の一例である。S18の処理を行うCPU51が本発明の「第2取得手段」の一例である。所定領域21に対する指先の位置が本発明の「第2位置」の一例である。S23の処理を行うCPU51が本発明の「決定手段」の一例である。S25の処理を行うCPU51が本発明の「記憶手段」の一例である。テーブル541を記憶するフラッシュROM54が本発明の「第1記憶部」の一例である。画像テンプレートを記憶するプログラムROM53が本発明の「第2記憶部」の一例である。S26の処理を行うCPU51が本発明の「第2判断手段」の一例である。S27の処理を行うCPU51が本発明の「第1表示手段」の一例である。S19の処理を行うCPU51が本発明の「第2表示手段」の一例である。S35の処理を行うCPU51が本発明の「第3判断手段」の一例である。S39の処理を行うCPU51が本発明の「実行手段」の一例である。S71の処理を行うCPU51が本発明の「第1消去手段」の一例である。S73の処理を行うCPU51が本発明の「修正手段」の一例である。S42の処理を行うCPU51が本発明の「第2消去手段」の一例である。S44の処理を行うCPU51が本発明の「第3消去手段」の一例である。S46の処理を行うCPU51が本発明の「第4消去手段」の一例である。
S15の処理が本発明の「第1判断ステップ」の一例である。S21の処理が本発明の「第1取得ステップ」の一例である。S18の処理が本発明の「第2取得ステップ」の一例である。S23の処理が本発明の「決定ステップ」の一例である。S25の処理が本発明の「記憶ステップ」の一例である。S26の処理が本発明の「第2判断ステップ」の一例である。S27の処理が本発明の「第1表示ステップ」の一例である。S35の処理が本発明の「第3判断ステップ」の一例である。S39の処理が本発明の「実行ステップ」の一例である。