インタフェース方法および装置
【課題】
グラフィックオブジェクトの重心の包含関係の分類を利用した、仮想空間でのインタラクションよって命令を生成するインタフェース方法を提供する。
【解決手段】
ビデオカメラで撮影した映像からユーザのみを切り出したものとオブジェクトとの、映像上での重なりの重心が、ユーザとオブジェクトとのどの領域に属すかという帰属情報と、生成と消滅というイベントと、を得る。それらにより、1つのオブジェクトに対する複数の命令を区別するインタフェース方法と装置。
グラフィックオブジェクトの重心の包含関係の分類を利用した、仮想空間でのインタラクションよって命令を生成するインタフェース方法を提供する。
【解決手段】
ビデオカメラで撮影した映像からユーザのみを切り出したものとオブジェクトとの、映像上での重なりの重心が、ユーザとオブジェクトとのどの領域に属すかという帰属情報と、生成と消滅というイベントと、を得る。それらにより、1つのオブジェクトに対する複数の命令を区別するインタフェース方法と装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、グラフィックオブジェクトの重心を用いた、仮想空間でのインタラクションよって命令を生成するインタフェース方法に関する。
【背景技術】
【0002】
日常的な身体動作で遠隔機器を操作できるようにするための技術として、操作者をビデオ撮影して映像化し、その映像と操作対象を表すグラフィックオブジェクトとのインタラクションを通じて、実際の機器に命令を入力する方法が知られている。従来、このような技術では、ビデオカメラで撮影されたユーザ映像の重心位置を、機器を制御するためのパラメータとして利用していた。
【0003】
たとえば、特開2006―268209では、ユーザの手の映像の重心が操作対象を表すグラフィックオブジェクトの領域に含まれたときに、ユーザがダイアルを“選択(接触)”したと解釈し、対応する命令を発行する。
【0004】
また、特開平7−281666では、ユーザ映像の領域が、操作対象のオブジェクトの領域に重なったときに、「選択(接触)」したと解釈されるだけでなく、同時に、重なった領域の重心とユーザ映像の重心の離間距離にもとづいて「入力データ」(入力パラメータ)を生成する。これによってあたかも音量レバーを押下する操作感覚を実現できる。
【0005】
映像重心を用いて実現できるインタラクションは1種類だけではない。たとえば、実世界で物体を手で押して動かすには、物体の後ろから重心に向かって押せばよい。このインタラクションを前述の特開平7−281666の映像重心を用いて仮想空間に実現するには、ユーザ映像とグラフィックオブジェクトとの重なり重心(複数の映像が重なっている領域の重心)の移動の、オブジェクト重心に向かう成分だけオブジェクトを移動させればよい。別のインタラクションとして、オブジェクトをダイアルのように回転させるには、重なり重心の、あらかじめ定めた点を回転中心とする回転角度だけオブジェクトを回せばよい。
【0006】
このように、映像の重心位置をパラメータとして用いることで、仮想空間内の身体を用いたインタラクションを、実世界でのある種の物理的なインタラクションのように、多様でなめらかかつ直観的なものにすることが可能である。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特開2006―268209
【特許文献2】特開平7−281666
【発明の開示】
【発明が解決しようとする課題】
【0008】
実世界にはダイアル付きリモコンのように、回転して状態を変えると同時に移動させることが可能なものもある。このように現実のオブジェクトは複数のインタラクションに応答することが一般的である。仮想世界のインタラクションの現実感と機能を高めるためにこのような複数のインタラクションを1つの仮想オブジェクトに実現することがのぞましい。
【0009】
しかしながら重心の位置にもとづく従来手法では、複数のインタラクションを1つのオブジェクトに実現することは困難である。たとえば、前述のダイアルを上記方法(重なり重心の平行移動)で押して動かせるようにすることを考える。単純に、押す機能と回す機能を同居させただけでは、押す向きがぴったり中心に向かうか、中心からぴったり等距離になるように動かない限り、移動の成分と回転の成分の両方が現れてしまい、二つの操作を使い分けることが困難になる。
このように、一般に1つのオブジェクトに複数の種類のインタラクションをわりあてることを映像内の重心位置を用いた技術だけで実現することは困難である。
【0010】
本発明は、従来技術が抱える上記問題点を解決するためになされた。すなわち、できるだけ多くのインタラクションを1つのオブジェクト上に実現し、仮想世界のインタラクションの現実感と機能を向上させることを目的とする。
【課題を解決するための手段】
【0011】
ユーザを撮影しライブ映像を取得する撮影手段と、該ライブ映像から背景差分法よりユーザ領域を抽出するユーザ領域抽出手段と、1つまたは複数のオブジェクト画像と該オブジェクト画像の領域を表すオブジェクト領域を提供するオブジェクト提供手段と、該ユーザ領域と該オブジェクト領域と、が同じピクセル座標のピクセルを持つか否かを表す重なり判定データを作り出す重なり判定手段と、該ユーザ領域と該オブジェクト領域と、の重なり領域の重心である重なり重心を算出する重心計算手段と、該重なり重心から、該オブジェクト画像および該オブジェクト領域の、移動の向きと大きさ、または回転の中心と角度と、を表す特徴量を算出する特徴量計算手段と、該特徴量によって該オブジェクト画像および該オブジェクト領域を移動または回転させるオブジェクト加工手段と、該ライブ映像のうち該ユーザ領域に含まれるピクセルにより上書きされた、該オブジェクト画像のうち該オブジェクト領域に含まれるピクセルである合成映像を作り出す映像重ね合わせ手段と、該合成映像を表示する表示手段と、を備え、ユーザによってオブジェクトを操作するインタフェース方法において、該重なり重心の位置と該ユーザ領域と該オブジェクト領域から、該重なり重心が該ユーザ領域と該オブジェクト領域の両方にあるか、該ユーザ領域だけにあるか、該オブジェクト領域だけにあるか、どちらにもないか、のいずれの場合かを分類した重心帰属データを作り出す重心帰属分類手段と、過去の該重なり判断データである重なり履歴情報を格納する重なり履歴格納手段と、該重なり履歴情報と該重なり判定データから、該重なり履歴情報と該重なり判定データの両方が重なっているという判定か、該重なり履歴情報だけが重なっているという判定か、該可な重なり判定データだけが重なっているという判定か、どちらも重なっていないという判定か、のいずれの場合かを分類したイベントを作り出すイベント分類手段と、該イベントと該帰属判断データから移動および回転するという命令種類である操作命令信号作り、該操作命令信号に該特徴量を割り当てる操作命令生成手段と、を備えたことを特徴とするインタフェース方法。
【発明の効果】
【0012】
以上説明したように、本発明によれば、できるだけ多くのインタラクションを1つのオブジェクト上に実現し、仮想世界のインタラクションの現実感と機能を向上させることを目的とする。
【発明を実施するための形態】
【0013】
[実施形態1]
本発明の実施形態1について図面を参照して説明する。なお、同一部位は同一符号で示し、重複した説明を省略する。
【0014】
まず、本発明に係わる情報の流れについて図1を参照しながら以下で説明する。図でボックスはフレームごとに行う処理の機能モジュールを表し、矢印は機能モジュール間の情報の流れを表す。行き先のボックスよりも下に描かれたボックスから出る矢印で表された情報は、次のフレームで用いるものであり、上から下への矢印のみを出すボックスの処理が終わった後に出力される。なお説明で言及されるハードウエアについてはハードウエア構成(後述、図2)を参照し、各機能モジュールの詳細については後述を参照のこと。
【0015】
ビデオカメラ(撮影手段)21によって、ユーザの全身または身体部位を撮影し、そのライブ映像を接続されたPC24内のライブ映像取得器に送る。
【0016】
ライブ映像取得器(ライブ映像取得手段) 1は、ビデオカメラ21からのライブ映像をフレームごとにピクセルごとのデータとしてとりこみ、ユーザ領域抽出器2(ユーザ領域抽出手段)および映像重ね合わせ器14(映像重ね合わせ手段)に送る。
【0017】
ファイルシステム22には背景画像(ビデオカメラ21でユーザがいない状態で撮った静止物体のみの画像)、オブジェクト画像、オブジェクト可触領域情報、オブジェクト可視領域情報、オブジェクトの変換特徴量(変換で用いるパラメータ)の初期値がそれぞれ、背景画像ファイル、オブジェクト画像ファイル、オブジェクト可触領域定義ファイル、オブジェクト可視領域定義ファイル、変換特徴量定義ファイルとして格納されている。これらはそれぞれ、ユーザ領域抽出器2、オブジェクト画像格納器3、オブジェクト可触領域格納器4、オブジェクト可視領域格納器5、変換特徴量格納器101に送られる。
【0018】
ユーザ領域抽出器2は、後述の背景差分法によって、ファイルシステム22から取得した背景情報を用いてライブ映像取得器で得られるライブ映像のフレームからユーザの領域情報(各ピクセルがユーザの領域に含まれるか否かの情報)を抽出し、得たユーザ領域情報を重なり判定器9(重なり判定手段)、重心帰属分類器102、重心計算器10、映像重ね合わせ器14に送る。
【0019】
オブジェクト画像格納器5(オブジェクト画像提供手段)は、ファイルシステム22から一度だけ、オブジェクト画像ファイルの内容をメモリ27内の初期オブジェクト画像格納エリアM4(詳細後述)にロードする。このメモリ領域はオブジェクト画像加工器8から参照される。
【0020】
オブジェクト可触領域格納器3(オブジェクト可触領域提供手段)は、ファイルシステム22から一度だけ、オブジェクト可触領域定義ファイルの内容をメモリ27内の初期オブジェクト可触領域格納エリアM2にロードする。このメモリ領域の内容は初期オブジェクト可触領域情報としてオブジェクト可触領域加工器6(オブジェクト可触領域加工手段)から参照される。
【0021】
オブジェクト可視領域ローダ4(オブジェクト可視領域提供手段)は、ファイルシステム22から一度だけ、オブジェクト可視領域定義ファイルの内容をメモリ27内の初期オブジェクト可視領域格納エリアM3にロードする。このメモリ領域の内容は初期オブジェクト可視領域情報としてオブジェクト可視領域加工器7(オブジェクト可視領域加工手段)から参照される。
【0022】
変換特徴量格納器101は、ファイルシステム22から一度だけ、変換特徴量定義ファイルを読み込み、回転中心の初期位置と現フレームの変換特徴量を保持する。これらの値はオブジェクト画像加工器8、オブジェクト可触領域加工器6、オブジェクト可視領域加工器7、グラフィック変換特徴量計算器12、変換特徴量更新器13で参照される。これらのうち変換特徴量はフレームごとの処理(図1)の最後に次フレームの変換特徴量に置き換えられる。これらの値の格納にはレジスタ26内の専用レジスタを用いている。
【0023】
オブジェクト画像加工器8は、現フレームの変換特徴量に従い初期オブジェクト画像に対して移動・回転等の変換を施し、得たオブジェクト画像を映像重ね合わせ器14に送る。
【0024】
オブジェクト可触領域加工器6は、現フレームの変換特徴量に従って初期オブジェクト可触領域に対して移動・回転等の変換を施し、得たオブジェクト可触領域を重なり判定器9、重心計算器10、重心帰属分類器102に送る。
【0025】
オブジェクト可視領域加工器7は、現フレームの変換特徴量に従って初期オブジェクト可視領域に対して移動・回転等の変換を施し、得たオブジェクト可視領域を映像重ね合わせ器14に送る。
【0026】
重なり判定器9は、ユーザ領域とオブジェクト可触領域との重なり(重なっているか否か)を判定する。すなわちユーザ領域およびオブジェクト可触領域の両方が同じピクセル座標のピクセルを持つか否かを判断する。ここで得た重なり判定結果を重なり履歴更新器105(重なり履歴更新手段)、イベント分類器104、重心計算器10、重心帰属分類器102に送る。
【0027】
重なり履歴格納器103は、当該フレームの処理開始時には前フレームの重なり判定結果が格納されている。この値の格納にはレジスタ26内の専用レジスタを用いている。ここに格納された判定結果はイベント分類器104で用いられる。この値はその後、後述するように、重なり履歴更新器105によって現フレームの重なり判定結果に置き換えられる。
【0028】
重心計算器10は、重なり判定器で得られた重なり判定がYesの場合のみ、ユーザ領域抽出器2とオブジェクト可触領域加工器6の出力を用いて重なり領域の重心の位置を算出し、得た重心位置を重心帰属分類器102、グラフィック変換特徴量計算器12に送る。
【0029】
重心帰属分類器102は、重なり判定がYesの場合のみ重なり重心がオブジェクト領域に含まれるか否か、およびユーザ領域に含まれるか否かを判定し、結果をグラフィック操作命令生成器106に送る。以下で、重なり重心が含まれる領域については、重なり重心がオブジェクト領域やユーザ領域に帰属していると表記する場合もある。
【0030】
イベント分類器104は、重なり判定結果と重なり判定結果履歴をもとに1フレーム前の重なり(Yes/No)と現フレームの重なり(Yes/No)の組み合わせが4つのうちいずれであるかをイベントとしてグラフィック操作命令生成器106に送る。
【0031】
重なり履歴更新器105は、前述したように、重なり判定器103の結果を重なり履歴格納器104に格納する。
【0032】
グラフィック操作命令生成器106は、イベントと帰属種に応じてあらかじめ定められた命令(グラフィック操作命令)を生成しグラフィック変換特徴量計算器12、変換特徴量更新器13、外部機器用操作命令意味変換器31に送る。
【0033】
グラフィック変換特徴量計算器12は、グラフィック操作命令に応じて、変換特徴量と重なり重心位置から既定の演算により算出されるパラメータからなる、オブジェクトのグラフィックを変換・加工するためのグラフィック変換特徴量を生成し、変換特徴量更新器13と外部機器用操作命令意味変換器31に送る。
【0034】
変換特徴量更新器13は、変換特徴量格納器101から取得した現フレームのグラフィックの変換特徴量のうち、グラフィック操作命令生成器106が生成した命令ごとにあらかじめ定めたものの値、にグラフィック変換特徴量計算器12で得られた値を加算して得た結果で変換特徴量格納器101が保持する変換特徴量を更新する。
【0035】
外部機器用操作命令意味変換器31は、グラフィック変換特徴量とグラフィック操作命令を、外部機器32に固有の、あらかじめ定めた外部機器操作命令に変換し、得た外部機器用操作命令を外部機器32に送る。
【0036】
外部機器32は、操作対象の機器であって、外部機器32に固有の操作命令で動作するものである。
【0037】
映像重ね合わせ器14は、オブジェクト画像のうちオブジェクト可視領域で定義されている部分の情報と、ライブ映像のうちユーザ領域情報によって定義されている部分の情報を白い背景上に重ね合わせ、得た合成映像をディスプレイ23(表示手段)に送る。
【0038】
ディスプレイ23は、合成映像を表示する。
【0039】
図2は、本実施形態のハードウエア構成図である。ビデオカメラ21、ディスプレイ23、外部機器32、ビデオ画像取得器1〜映像重ね合わせ器14までの各種処理器を備えた(インストールした)PC24で構成される。PC24は、CPU25(演算部)、メモリ27、レジスタ26、ファイルシステム22(ハードディスク)、を備えている。
【0040】
各処理器は、本実施形態のように汎用のPC上に構築する代わりに、機能モジュールごとに専用の装置を用いても良い。
【0041】
以下、画像を構成するピクセルの配置が横N縦M(ピクセル)であることをピクセルN×Mのように表す。ピクセルの位置を横縦それぞれ何番目かを示す数字の組(x,y)をピクセル座標と呼ぶ。以下で画像に関する幾何学的言及においては、この座標系を仮定するものとする。画像がピクセルN×Mであるとき、横0〜N−1、縦0〜M−1、の範囲をピクセル座標の有効範囲と呼ぶ。N、Mの値を当該画像の横幅、高さと呼ぶ。なお、本実施形態で取り扱う画像は主にピクセル320×240である。
【0042】
本実施形態で使用する各種データが格納される専用メモリについて説明する。この専用メモリは1ワード32ビットの列で構成されていて、メモリ27の一部を用いている。この専用メモリは格納されるデータごとのセグメントに分かれている。セグメントの先頭アドレスを当該セグメントのオフセットと呼び、セグメントに含まれるワード数を当該セグメントのサイズと呼ぶ。オフセットがfであるようなセグメントに含まれるアドレスf+m(0 ≦ m < 当該セグメントのサイズ)のことを「当該セグメントのm番地」と呼ぶことにする。さらに、セグメントがピクセル340×240の画像または領域情報を格納する場合、アドレスf+240×x+yはピクセル座標(x,y)のピクセル値が格納されるので「当該セグメントの(x,y)番地」と呼ぶことにする。
【0043】
ひとつのセグメントすべてのビットを0にすることをセグメントのゼロリセットと呼ぶことにする。また、サイズ320×240のセグメントに格納するものがピクセル320×240の画像または領域情報である場合、x=0〜319、y=0〜239のすべてのx、yに対してセグメントの(x,y)番地に画像または領域情報Gのピクセル座標(x,y)のピクセル値を格納することを、当該セグメントにGを格納すると呼ぶことにする。さらに、ピクセルデータは、32ビットのうち下位24ビットを高位から8ビットごとに赤・緑・青と区切った値で表す。たとえば、赤色を16進数で表記と0x00FF0000となる。
【0044】
専用メモリを構成するセグメントM1〜M11の詳細は以下のとおりである。セグメントの配置例を図3に示す。
【0045】
M1は、サイズ320×240ワードのセグメントであって、ライブ映像格納エリアである。このセグメントには、ビデオカメラ21からのライブ映像の1フレームのピクセルデータ(ピクセル320×240)が格納される。このセグメントは、一定周期ごとにビデオカメラ21からのライブ映像が格納され更新される。
【0046】
M2は、サイズ320×240ワードのセグメントであって、初期オブジェクト可触領域格納エリアである。このセグメントは、ピクセルごとに、その場所がオブジェクト可触領域に含まれるか否かを表す値1、0を格納する。これらの値全体によって回転・移動等加工前のオブジェクト可触領域が指定される。オブジェクト可触領域を回転・移動等加工するときに、これらの値を用いる。
【0047】
M3は、サイズ320×240ワードのセグメントであって、初期オブジェクト可視領域格納エリアである。このセグメントは、ピクセルごとに、その場所がオブジェクト可視領域に含まれるか否かを表す値1、0を格納する。これらの値全体によって回転・移動等加工前のオブジェクト可視領域が指定される。オブジェクト可視領域を回転・移動等加工するときに、これらの値を用いる。
【0048】
M4は、サイズ320×240ワードのセグメントであって、初期オブジェクト画像格納エリアである。このセグメントにはオブジェクト画像のピクセルデータが格納される。これらの値は回転・移動等加工して現フレームのオブジェクト画像を得るためのオブジェクト原画像として用いられる。
【0049】
M5は、サイズ320×240ワードのセグメントであって、ユーザ領域格納エリアである。このセグメントは各ピクセルがユーザ領域に含まれるか否かを表す値1、0を格納する。このデータがユーザの領域を表現する。
【0050】
M6は、サイズ320×240ワードのセグメントであって、背景画像格納エリアである。このセグメントは背景画像のピクセルデータにセットされる。このデータは背景差分法の背景画像として利用される。
【0051】
M7は、サイズ320×240ワードのセグメントであって、オブジェクト可触領域格納エリアである。このセグメントは、各ピクセルがオブジェクト可触領域に含まれるか否かを表す値1、0を格納する。これらの値全体によってオブジェクトの領域が表される。
【0052】
M8は、サイズ320×240ワードのセグメントであって、オブジェクト可視領域格納エリアである。このセグメントは、各ピクセルがオブジェクト可視領域に含まれるか否かを表す値1、0を格納する。これらの値全体によってオブジェクトの領域が表される。
【0053】
M9は、サイズ320×240ワードのセグメントであって、オブジェクト画像格納エリアである。このセグメントにはオブジェクト画像のピクセルデータが格納される。
【0054】
M10は、サイズ320×240ワードのセグメントであって、表示用映像格納エリアである。このセグメントは、オブジェクト映像の各ピクセルを、ユーザ領域の同じ位置のピクセルの値が1の場合に限り、ライブ映像格納エリアM1の当該ピクセルの値で置き換えたものを格納している。このデータは、ディスプレイ23に表示する映像である。
【0055】
本実施形態で使用する各種データが格納されるレジスタについて説明する。このレジスタは1ワード32ビットの列で構成されていて、レジスタ26の一部を用いている。この専用レジスタは格納されるデータごとのセグメントに分かれている。なお、以下で「レジスタz」は格納場所として言及するときはレジスタzそのものを、値として参照するときはレジスタzに格納された値を、意味する。
【0056】
レジスタXおよびYは、画像を格納したセグメントの(X,Y)番地を指定するときに使用されるもので複数のモジュールで利用される。
【0057】
専用レジスタについて説明する。この専用レジスタはレジスタ26の一部を用いている。専用レジスタは24個あり、それぞれは1ワードである。
【0058】
次に説明する7つのレジスタ(InitCenterX、InitCenterY、Rotate、CenterX、CenterY、DisplacementX、DisplacementY)(変換特徴量格納手段)は、初期オブジェクト可触領域、初期オブジェクト可視領域、初期オブジェクト画像の変換に用いる変換特徴量を格納する。
【0059】
レジスタInitCenterX, InitCenterYは回転変換で用いる中心座標(X,Y)の初期値を格納する。
【0060】
レジスタRotateは、初期オブジェクト画像をどれだけ回転すべきかを示す値(ラジアン)を格納する。
【0061】
レジスタCenterXおよびCenterYは、回転中心のピクセル座標(x,y)を格納する。
【0062】
レジスタDisplacementXおよびDisplacementYは、オブジェクトの初期位置からの変位量のx、y成分(ピクセル)を格納する。
【0063】
レジスタPrvOverlapは重なり履歴格納エリア(重なり履歴格納手段)である。このレジスタは、ユーザ領域とオブジェクト領域が前フレームで重なっていたか否かを表す値1、0を保持する。
【0064】
レジスタGravityXおよびGravityYは、重なり領域の重心のピクセル座標(x,y)を格納する。
【0065】
レジスタPrvGravityXおよびPrvGravityYは、前の重なり領域の重心のピクセル座標(x,y)を格納する。
【0066】
レジスタOriginalXおよびOriginalYは、オブジェクトを移動・回転等加工するときの移動元のピクセル座標(x,y)を格納する。
【0067】
レジスタOverlapは、ユーザ領域とオブジェクト領域と、が同じピクセル座標を持っているか否かを重なり判定結果として格納する。
【0068】
レジスタCOUNTは、重なり領域が何ピクセルあるかを表す値を格納する。この値は、重なり重心を算出するときに用いる。
【0069】
レジスタtotalXおよびtotalYは、ピクセルのx ,y座標それぞれの重なり領域全体にわたる和を格納する。
【0070】
レジスタEVENTはイベント分類の結果を0〜3の値として格納する。
【0071】
レジスタIN_USERは重なり重心がユーザ領域に帰属するか否かを1、0の値として格納する。
【0072】
レジスタIN_OBJECTは重なり重心がオブジェクト可触領域に帰属するか否かを1,0の値として格納する
【0073】
次に説明する4つのレジスタは、操作命令用の値を格納する。
【0074】
レジスタObjectCommandは、グラフィック操作命令を格納する。
【0075】
レジスタDifferenceRotateは、次フレームで加算すべきグラフィック変換特徴量のうち回転角(ラジアン)を格納する。
【0076】
レジスタDifferenceDisplacementXおよびDifferenceDisplacementYは、次フレームで加算すべきグラフィック変換得量のうち移動量のx,y成分(ピクセル)を格納する。
【0077】
次に、上記モジュールごとの詳細処理について、フローチャートを用いて説明する。
【0078】
ビデオカメラ21では、ユーザを含む映像を取得する。本実施例では、解像度320×240のビデオカメラを1台用いる。
【0079】
ライブ映像取得器1の処理フローを、図4を参照しながら説明する。ステップA1では、ビデオカメラ21から1フレーム分の画像を取得し、得た画像のピクセルデータをライブ映像格納エリアM1に格納する。
【0080】
オブジェクト可触領域格納器3の処理フローを、図5を参照しながら説明する。ステップB1では、ファイルシステム22からオブジェクト可触領域定義ファイルを読み込む。このオブジェクト可触領域定義ファイルは、ピクセル320×240の画像に対応したピクセルごとにオブジェクト可触領域に含まれるか否かを示す値(1,0)を記述したものである。得たオブジェクト可触領域情報を初期オブジェクト可触領域格納エリアM2に格納する。
【0081】
オブジェクト領域格納器M5の処理フローを、図6を参照しながら説明する。ステップC1では、ファイルシステム22からオブジェクト可視領域定義ファイルを読み込む。このオブジェクト可視領域定義ファイルは、ピクセル320×240の画像に対応したピクセルごとにオブジェクトが可視領域に含まれるか否かを示す値(1,0)を記述したものである。得たオブジェクト可視領域情報を初期オブジェクト可視領域格納エリアM3に格納する。
【0082】
オブジェクト画像格納器5の処理フローを、図7を参照しながら説明する。ステップD1では、ファイルシステム22からオブジェクト画像ファイルを読み込み、得たオブジェクト画像のピクセルデータを初期オブジェクト画像格納エリアM4に格納する。
【0083】
変換特徴量格納器の処理フローを、図8を参照しながら説明する。ステップE1では、ファイルシステム22から変換特徴量定義ファイルを読み込む。この変換特徴量定義ファイルは、オブジェクトを移動・回転等加工するための、移動ベクトルのx,y成分(ピクセル)、回転中心(ピクセル座標)、回転角(ラジアン)を記述したものである。これらの値は、InitCenterX、InitCenterYには回転中心の初期のピクセル座標(x,y), Rotateには回転角、CenterXには回転中心のピクセル座標のx成分、CenterYには回転中心のピクセル座標のy成分、DisplacementXには移動量のx成分、DisplacementYには移動量のy成分が格納される。
【0084】
ユーザ領域抽出器2の処理フローを、図9を参照しながら説明する。ステップF1では、背景画像格納エリアM6にファイルシステム22から読み込んだ背景画像を格納する。ステップF2では、XおよびYをゼロリセットする。
【0085】
ステップF3では、ライブ映像の各ピクセルが背景のものであるかユーザのものであるかを判断する。このことは、ライブ映像格納エリアM1の(X,Y)番地に格納されている値と背景画像格納エリアM6の(X,Y)番地に格納されている値が同じか否かを判断することによる。具体的には、同じである場合には、判断結果がYesとなり、ステップF4に進む。一方、異なる場合には、判断結果はNoとなり、ステップF5に進む。ステップF4では、ユーザ領域格納エリアM5の(X,Y)番地に値0を格納する。ステップF5では、ユーザ領域格納エリアM5の(X,Y)番地に値1を格納する。ここで、値0はライブ映像のその座標のピクセルデータと背景画像の該当ピクセルデータとが一致しないことを表し、値1は一致することを表す。ステップF6では、Yを1インクリメントする。ステップF7では、セグメントの縦方向の座標が画像の高さより大きいか否かを判断する。このことは、Yが配列サイズ240以上か否かを判断することによる。具体的には、240より小さい場合には、判断結果がNoとなり、前述のステップF3に戻る。これにより、Y=0〜239に対してステップF3〜F7が繰り返され、ピクセル座標を縦方向に1列分スキャンしてピクセルを比較したことになる。一方、240以上場合には、判断結果がYesになり、ステップF8に進む。ステップF8では、Xを1インクリメントし、Yをゼロリセットする。これにより、ピクセル座標は、横方向は1ピクセル進み、縦方向は先頭に戻る。ステップF9では、セグメントの横方向の座標が画像の横幅より大きいか否かを判断する。このことは、Xが配列サイズ320以上か否かを判断することによる。具体的には、320より小さい場合には、判断結果がNoとなり、前述したステップF4に戻る。これにより、X=0〜319に対してステップF3〜F9が繰り返され、結局、ピクセル座標すべてをスキャンして1フレーム分の映像と背景を比較することになり、ユーザのみの領域を抽出したことになる。一方、大きい場合には、判断結果がYesとなり、ユーザ領域抽出の処理を終了する。
【0086】
オブジェクト可触領域加工器4の処理フローを、図10を参照しながら説明する。ステップG1では、XとYをゼロリセットする。
【0087】
初期オブジェクト可触領域格納エリアM2に格納された画像をθだけ回転させたり、指定された向きと大きさだけ移動させたりした画像をオブジェクト可触領域格納エリアM7に格納するために、初期オブジェクト可触領域格納エリアM2の式1で計算される番地u=(x,y)に格納されている値をオブジェクト可触領域格納エリアM7のu´=(X,Y)番地に格納する。
【0088】
ステップG2では、u´は回転および移動後の座標とし、Cは回転中心の座標とし、Dは移動量として、回転および移動前の座標uを式1によって算出する。具体的には、uはx成分がレジスタX、y成分がYであり、Cはx成分がCenterX、y成分がCenterYであり(式2)、Mはx成分がDisplacementX、y成分がDesplacementYであり(式3)、式1を用いて得たuの、x成分をOriginalXに、y成分をOriginalYにセットする。
【数1】
【数2】
【数3】
【数4】
【0089】
ここで、R[φ]は回転ベクトルであり、cosφ、sinφ、−sinφ、cosφから成る(式4)。
【0090】
ステップG3では、変換後の画像のピクセル座標(X,Y)が有効範囲内のピクセル座標を変換したものか否か、言い換えればピクセル座標(X,Y)を逆変換したら有効範囲内に入るか否か、を判断する。このことは、OriginalXが0〜319かつOriginalYが0〜239か否かを判断することによる。具体的には、OriginalXが0〜319かつOriginalYが0〜239である場合、判断結果がYesとなり、ステップG4に進む。一方、それ以外の場合、判断結果はNoとなり、ステップG5に進む。ステップG4では、初期オブジェクト可触領域格納エリアM2の(OriginalX、OriginalY)番地に格納されている値をオブジェクト可触領域格納エリアM7の(X,Y)番地に格納する。ステップG5では、オブジェクト可触領域格納エリアの(X,Y)番地に値0を格納する。ステップG8では、Yを1インクリメントする。ステップG6では、セグメントの縦方向の座標が画像の高さより大きいか否かを判断する。このことは、Yが配列サイズ240以上か否かを判断することによる。具体的には、240より小さい場合には、判断結果がNoとなり、前述のステップG2に戻る。これにより、Y=0〜239に対してステップG2〜G7が繰り返され、ピクセル座標を縦方向に1列分スキャンしてピクセルを比較したことになる。一方、240以上場合には、判断結果がYesになり、ステップG8に進む。ステップG8では、Xを1インクリメントし、Yをゼロリセットする。これにより、ピクセル座標は、横方向は1ピクセル進み、縦方向は先頭に戻る。ステップG9では、セグメントの横方向の座標が画像の横幅よりも大きいか否かを判断する。このことは、Xが配列サイズ320以上か否かを判断することによる。具体的には、320より小さい場合には、判断結果がNoとなり、前述したステップG4に戻る。これにより、X=0〜319に対してステップG4〜G11が繰り返され、ピクセル座標すべてをスキャンしたことになる。このようにして、可触領域を回転・移動する。一方、320以上の場合には、判断結果がYesとなり、オブジェクト可触領域加工の処理を終了する。
【0091】
オブジェクト可視領域加工器7の処理フローは、オブジェクト可触領域格納エリアの代わりにオブジェクト可視領域格納エリアを用いる点を除いてオブジェクト可触領域加工器6の処理フローと同じである。(図11)
【0092】
オブジェクト画像加工器8の処理フローは、オブジェクト可触領域格納エリアの代わりにオブジェクト画像格納エリアを用いる点を除いてオブジェクト可触領域加工器6の処理フローと同じである。(図12)
【0093】
重なり判定器9の処理フローを、図13を参照しながら説明する。ステップJ1では、XおよびYをゼロリセットする。
【0094】
ステップJ2では、座標(X,Y)のピクセルがユーザ領域およびオブジェクト可触領域のピクセル座標の少なくとも一方に含まれていないか、両方に含まれるか、を判断する。このことは、ユーザ領域格納エリアM5の(X,Y)番地に格納されている値またはオブジェクト可触領域格納エリアM7の(X,Y)番地に格納されている値のどちらかが0であるか否かを判断するによる。具体的には、どちらも0でない場合には、判断結果がNoとなり、ステップJ8に進む。ステップJ8では、Overlapを値1にセットして重なり判定の処理を終了する。ここで、値1はユーザとオブジェクトとが重なっていることを表す。一方、共に0の場合には、判断結果がYesとなり、ステップJ3に進む。ステップJ3では、Yを1インクリメントする。ステップJ4では、セグメントの縦方向の座標が画像の高さより大きいか否かを判断する。このことは、Yが配列サイズ240以上か否かを判断するによる。具体的には、240より小さい場合には、判断結果がNoとなり、前述のステップJ2に戻る。これにより、Y=0〜239に対してステップJ2〜J4が繰り返され、ピクセル座標を縦方向に1列分スキャンして結果を比較したことになる。一方、240以上場合には、判断結果がYesになり、ステップJ5に進む。ステップJ5では、Xを1インクリメントし、Yをゼロリセットする。これにより、ピクセル座標は、横方向は1ピクセル進み、縦方向は先頭に戻る。ステップJ6では、セグメントの横方向の座標が画像の横幅より大きいか否かを判断する。このことは、Xが配列サイズ320以上か否かを判断するによる。具体的には、320より小さい場合には、判断結果がNoとなり、前述したステップJ2に戻る。これにより、X=0〜319に対してステップJ2〜J6が繰り返され、ピクセル座標すべてをスキャンして判定することになり、ユーザ領域とオブジェクト可触領域が重なっているか否かを判断したことになる。一方、大きい場合には、判断結果がYesとなり重なりステップJ7に進む。ステップJ7ではOverlapに値0をセットして処理を終了する。ここで、値0はユーザとオブジェクトとが重なっていないことを表す。
【0095】
重心計算器10の処理フローを、図14を参照しながら説明する。ステップK1では、X、Y、COUNT、totalX、totalYをゼロリセットする。
【0096】
ステップK2では、座標(X,Y)のピクセルがユーザ領域およびオブジェクト可触領域のピクセル座標の両方に含まれているか否か、を判断する。このことは、ユーザ領域格納エリアM5の(X,Y)番地に格納されている値と、オブジェクト可触領域格納エリアM7の(X,Y)番地に格納されている値と、がともに1であるか否かを判断することによる。具体的には、どちらかが1でない場合、判断結果がNoとなり、ステップK4に進む。一方、0の場合、判断結果がYesとなり、ステップK3に進む。ステップK3では、COUNTを1インクリメントし、totalXをtotalX+Xにセットし、totalYをtotalY+Yにセットする。ステップK4では、Yを1インクリメントする。ステップK5では、セグメントの縦方向の座標が画像の高さより大きいか否かを判断する。このことは、Yが配列サイズ240以上か否かを判断することによる。具体的には、240より小さい場合には、判断結果がNoとなり、前述のステップK2に戻る。これにより、Y=0〜239に対してステップK2〜K5が繰り返され、ピクセル座標を縦方向に1列分スキャンして結果を比較したことになる。一方、240以上場合には、判断結果がYesになり、ステップK6に進む。ステップK6では、Xを1インクリメントし、Yをゼロリセットする。これにより、ピクセル座標は、横方向は1進み、縦方向は先頭に戻る。ステップK7では、セグメントの横方向の座標が画像の横幅より大きいか否かを判断する。このことは、Xが配列サイズ320以上か否かを判断するによる。具体的には、320より小さい場合には、判断結果がNoとなり、前述したステップK2に戻る。これにより、X=0〜319に対してステップK2〜K7が繰り返され、ピクセル座標すべてをスキャンし、計算し、重なり領域の座標の和と重なっているデータ数を取得したことになる。一方、大きい場合には、判断結果がYesとなり、ステップK8に進む。ステップ+K8では、GravityXをtotalX/COUNTにセットし、GravityYをtotalY/COUNTにセットする。これにより、GX、GYに重心座標がセットされたことになる。
【0097】
重心帰属分類器102の処理フローを、図15を参照しながら説明する。ステップL1では、座標(X,Y)のピクセルがユーザ領域およびオブジェクト可触領域のピクセル座標の少なくとも一方に含まれていないか、両方に含まれるか、を判断する。このことは、Overlapに格納された値が0か否かを判断することによる。具体的には、0の場合、判断結果はYesとなり、処理を終了する。一方、0でない場合、判断結果はNoとなり、ステップL2に進む。ステップL2では、即ち重なり重心がユーザ領域に含まれていない(図25)か含まれている(図26)かを判断する。このことはユーザ領域格納エリアM5の(GravityX、GravityY)番地に格納されている値が0か否かを判断することによる。具体的には、0の場合、判断結果がYesとなり、ステップL3に進む。一方、0でない場合、判断結果がNoとなり、ステップL4に進む。なお、以下図では、Uがユーザ領域、Oがオブジェクト領域、Gは重なり重心(GravityX、GravityY)を表す。ステップL3では、レジスタIN_USERを値0にセットする。ステップL4では、IN_USERを値1にセットする。次にステップL5では、重なり重心がオブジェクト可触領域に含まれていないのか含まれているのかを判断する。このことは、オブジェクト可触領域格納エリアM7の(GravityX、GravityY)番地に格納されている値が0か否かを判断することによる。具体的には、0の場合、判断結果はYesとなり、ステップL6に進む。一方、0でない場合、判断結果がNoとなり、ステップL7に進む。ステップL6では、レジスタIN_OBJECTを値0にセットする。ステップL7では、レジスタIN_OBJECTを値1にセットする。
【0098】
イベント分類手段104の処理フローを、図16を参照しながら説明する。ステップM1では、前フレームで重なり重心が存在していなかったか存在していたかを判断する。このことは、prvOverlapに格納されている値が0か否かを判断することによる。具体的には、0である場合、判断結果がYesとなり、ステップM2に進む。ステップM2では、座標(X,Y)のピクセルがユーザ領域およびオブジェクト可触領域のピクセル座標の少なくとも一方に含まれていないか、両方に含まれるか、を判断する。このことは、Overlapに格納されている値が0であるか否かを判断することによる。具体的には、ステップM2で、0である場合、判断結果がYesとなり、ステップM3に進む。一方ステップM2で、0でない場合、判断結果がNoとなり、ステップM4に進む。ステップM3では、EVENTをゼロリセットする。この0という値は、重なっていないというイベント(以下でNoneと表す)を表す。ステップM4では、EVENTを値1にセットする。この1という値は、重なり領域が発生したというイベント(以下でOntouchと表す)を表す。一方ステップM1で、0でない場合、判断結果がNoとなり、ステップM5に進む。ステップM5では、映像内でユーザとオブジェクトとが重なっていないのか重なっているのかを判断する。このことは、Overlapに格納されている値が0であるか否かを判断することによる。具体的には、ステップM5で、0である場合、判断結果がYesとなり、ステップM6に進む。一方、ステップM5で、0でない場合、判断結果がNoとなり、ステップM7に進む。ステップM6では、EVENTを値2にセットする。この2という値は、重なり領域が消滅したというイベント(以下でReleaseを表す)を表す。ステップM7では、EVENTを値3にセットする。この3という値は、重なり重心が存在し続けているというイベント(以下でIntouchと表す)を表している。
【0099】
重なり履歴更新器105の処理フローを、図17を参照しながら説明する。ステップN1でレジスタOverlapに格納された値をPrvOverlapにコピーする。これは次フレームで使用する。
【0100】
グラフィック操作命令生成器106の処理フローを、図18を参照しながら説明する。ステップO1ではレジスタObjectCommandをゼロリセットする。ObjectCommandの値が0であることは命令がない状態(「空命令」)を意味する。
【0101】
ステップO2では、映像内でユーザとオブジェクトとが重なっていないか重なっているかを判断する。このことは、レジスタEVENTの値が0か否かを判断することによる。具体的には、0の場合、判断結果がYesとなり、グラフィック操作命令生成の処理を終了する。一方、0でない場合、判断結果がNoとなり、ステップO3に進む。
【0102】
ステップO3では、映像内でユーザとオブジェクトとの重なりが発生したか否かを判断する。このことは、EVENTの値が1か否かを判断することによる。具体的には、1の場合、判断結果がYesとなり、ステップO4に進む。一方、1でない場合、判断結果がNoとなり、ステップO5に進む。
【0103】
ステップO4ではレジスタObjectCommandに値1を格納してグラフィック操作命令生成の処理を終了する。ObjectCommandの値が1であることは、指がダイアルに「接触」したことを意味する。
【0104】
ステップO5では、映像内でユーザとオブジェクトとの重なりが消滅したか存在しているかを判断する。このことは、EVENTに格納されている値が2か否かを判断することによる。具体的には、2の場合、判断結果がYesとなり、グラフィック操作命令生成の処理を終了する。一方2でない場合、判断結果がNoとなり、ステップO6に進む。
【0105】
ステップO6ではダイアル操作命令生成ルーチンの処理(後述)を行い、終了後グラフィック操作命令生成の処理を終了する。
【0106】
前述のダイアル操作命令生成ルーチンの処理フローを、図19を参照しながら説明する。ステップP1では、重なり重心の場所がユーザ領域の中であるか(図25)否(図26)かを判断する。このことは、レジスタIN_USERが1であるか否かを判定することによる。具体的には、1の場合、判断結果がYesとなり、ステップP2に進む。一方、1でない場合、判断結果がNoになり、ステップP3に進む。ステップP2ではレジスタObjectCommandに2を格納し、ダイアル操作命令生成の処理を終了する。ObjectCommandの値2はダイアルを「回転」させる命令を表す。ステップP3ではObjectCommandに3を格納して、ダイアル操作命令生成の処理を終了する。 ObjectCommandの値3はダイアルを「移動」させる命令を表す。
【0107】
グラフィック変換特徴量計算器12の処理フローを、図20を参照しながら説明する。ステップQ1では、空命令か特定の命令が発行されたのかを判断する。このことは、レジスタObjectCommandが0であるか否かを判定することによる。具体的には、0の場合、判断結果がYesとなり、グラフィック変換特徴量計算器の処理を終了する。一方0でない場合、判断結果がNoとなり、ステップQ2に進む。ステップQ2では、命令が接触か否かを判断する。このことは、ObjectCommandが1か否かを判定するとこによる。具体的には、1の場合、判断結果がYesとなり、ステップQ4に進む。一方1でない場合、判断結果がNoとなり、ステップQ3に進む。 ステップQ3ではダイアル変換特徴量計算ルーチンの処理を行い、終了後、ステップQ4に進む。ステップQ4では、レジスタPrvGravityX、PrvGravityYにそれぞれGravityX、GravityYを格納し、グラフィック変換特徴量計算器の処理を終了する。
【0108】
前述のダイアル変換特徴量計算ルーチンの処理フローを、図21を参照しながら説明する。ステップR1では、命令が回転か否かを判断する。このことは、レジスタObjectCommandに格納されている値が2か否かを判断することによる。具体的には、2である場合、判断結果がYesとなり、ステップR2に進む。一方、2でない場合、判断結果はNoとなり、ステップR4に進む。
【0109】
ステップR2では、現フレームと前フレームで、重なり重心がオブジェクトの回転の中心とが同一座標になったか否かを判断する。このことは、GravityX=CXかつGravityY=CenterYであるか、またはPrvGravityX=CenterXかつPrvGravityY=CenterYであるかのいずれかが成り立つか否かを判断する。これが成り立つのは後述する算出方法が使えないとき、すなわち重なり重心の移動を算出するための2点のうちいずれかが回転中心と一致するために回転角が定義できなくなることを意味する。(この場合回転は生じないものとする。)具体的には、成り立つ場合、判断結果がYesとなり、ステップダイアル変換特徴量計算イベントの処理を終了する。一方、成り立たない場合、判断結果がNoとなり、ステップR3に進む。
【0110】
ステップR3では、連続した2フレームの重なり重心の、オブジェクトの回転中心からみた回転角度を求める。図27で、pはオブジェクトの回転中心Cから前フレームの重なり重心G´へ向かうベクトル、qはオブジェクトの回転中心Cから重なり重心Gに向かうベクトル、θはCからみたGからG´の回転角度である。θは式5によって算出する。
【数5】
【0111】
ここで、detAは正方行列Aの行列式を表し、m次元縦ベクトルp1、…、pnを横に並べて作るm×n行列を(p1 … pn)で表す。また、ベクトルaの大きさを|a|で表す。実数を引数にとる関数sign(z)の値は、z≧0のときは1、z<0のときは−1と定義する。a・bはベクトルa、bの内積を表す。
具体的には、pはx成分がレジスタCenterX−prvGravityX、y成分がCenterY−prvGravityYで表されており(式6)、qはx成分がCenterX−GravityX、y成分がCenterY―GravityYで表されており(式7)、式5を用いて得た値をdifferenceThetaにセットする。
【数6】
【数7】
【0112】
図27では、Cは回転中心(CenterX、CenterY)、G´は(PrvGravityX、PrvGravityY)である。以上でダイアル変換特徴量計算ルーチンの処理を終了する。
【0113】
ステップR4では、DifferenceDisplacementXをGravityX−PrvGravityXに、DifferenceDisplacementYをGravityY−PrvGravityYにセットし、ダイアル変換特徴量計算イベントの処理を終了する。
【0114】
変換特徴量更新器13の処理フローを、図22を参照しながら説明する。ステップS1では、命令が空命令または接触であるか、またはどちらでもないかを判断する。このことは、ObjectCommandの値が0または1であるか否かを判断することによる。具体的には、0または1の場合、判断結果がYesとなり、特徴量更新器の処理を終了する。一方、0または1以外の場合、判断結果がNoとなり、ステップS2に進む。ステップS2では、命令が回転か否かを判断する。このことは、ObjectCommandの値が2であるか否かを判定することによる。具体的には、2の場合、判断結果がYesとなり、ステップS3に進む。一方、2ではない場合、判断結果がNoとなり、ステップS4に進む。ステップS3では、RotateにRotate+DifferenceRotateを格納し、処理を終了する。ステップS4では、CenterXにCenterX+DifferenceDisplacementXを、CenterYにCenterY+DifferenceDisplacementYを、DisplacementXにDisplacementX+DifferenceDisplacementXを、DisplacementYにDisplacementY+DifferenceDisplacementYを、それぞれ格納し、処理を終了する。これにより、変換特徴量がグラフィック操作命令生成器106で生成された変換を施した結果得られる、新しい値に更新される。
【0115】
映像重ね合わせ器14の処理フローを、図23を参照しながら説明する。このモジュールでは、まず、オブジェクト画像を表示用の画像バッファにコピーする。次に、ユーザ画像を表示用の画像バッファにコピーする。ステップT1では、レジスタXおよびYをゼロリセットする。
【0116】
ステップT2では、オブジェクト可視領域格納エリアの(X,Y)番地に格納された値が0か否かを判断することによる。具体的には、0である場合、判断結果がYesとなり、ステップT3に進む。一方、0でない場合、判断結果がNoとなり、ステップT4に進む。ステップT3では、表示用映像格納エリアの(X,Y)番地に値0を格納する。ステップT4では、オブジェクト画像格納エリアの(X,Y)番地に格納されている値を表示用映像格納エリアの(X,Y)番地に格納する。これにより、表示すべきオブジェクトを画像から抽出し、その画像を表示領域に格納したことになる。ステップT5では、ユーザ領域格納エリアの(X,Y)番地に格納された値が0か否かを判断することによる。具体的には、0でない場合、判断結果がNoになり、ステップT6に進む。一方、0である場合、判断結果がYesになり、ステップT7に進む。ステップT6では、にライブ映像格納エリアの(X,Y)番地を格納されている値を表示用映像格納エリアの(X,Y)番地に格納する。ステップT7では、Yを1インクリメントする。ステップT8では、セグメントの縦方向の座標が画像の高さより大きいか否かを判断する。このことは、Yが配列サイズ240以上か否かを判断することによる。具体的には、240より小さい場合には、判断結果がNoとなり、前述のステップT2に戻る。これにより、Y=0〜239に対してステップT2〜T8が繰り返され、ピクセル座標を縦方向に1列分スキャンして結果を比較したことになる。一方、240以上場合には、判断結果がYesになり、ステップT9に進む。ステップT9では、Xを1インクリメントし、Yをゼロリセットする。これにより、ピクセル座標は、横方向は1ピクセル進み、縦方向は先頭に戻る。ステップT10では、セグメントの横方向の座標が画像の横幅より大きいか否かを判断する。このことは、Xが配列サイズ320以上か否かを判断することによる。具体的には、320より小さい場合には、判断結果がNoとなり、前述したステップT2に戻る。これにより、X=0〜319に対してステップT2〜T10が繰り返され、画像(ピクセル)座標すべてをスキャンして表示用映像格納エリアに重ね合わせた映像のピクセルデータを格納したことになる。一方、大きい場合には、判断結果がYesとなり、ユーザ映像切抜きの処理を終了する。
【0117】
外部機器用操作命令意味変換器31の処理フローを、図24を参照しながら説明する。ステップU1では、命令が空命令または接触であるか、またはどちらでもないかを判断する。このことは、レジスタObjectCommandの値が0または1であるか否かを判定することによる。具体的には、0または1の場合、判断結果がYesとなり、外部機器用操作命令意味変換の処理を終了する。一方、それ以外の場合、判断結果がNoとなり、ステップU2に進む。U2では、命令が回転か否かを判断する。このことは、ObjectCommandの値が2であるか否かを判定することによる。具体的には、2の場合、判断結果がYesとなり、「回転」に対してあらかじめ定めた外部機器の命令と、レジスタDifferenceRotateに格納されている値を、例えば3倍するなど、外部機器に応じてあらかじめ定めた関数により変換して得たパラメータを組とした外部機器操作命令を外部機器に送る。一方、2でない場合、判断結果がNoとなり、「移動」に対してあらかじめ定めた外部機器の命令と、レジスタDifferenceDisplacementX、DifferenceDisplacementYに格納されている値を、例えば3倍するなど、外部機器に応じてあらかじめ定めた関数により変換して得たパラメータを組とした外部機器操作命令を外部機器に送る。
【0118】
外部機器32は、外部機器用操作命令に従ってあらかじめ定められた、例えば後述の実施例に示すような動作をする。
【0119】
以下で表示と触れる領域が一致しているオブジェクトをあつかう。すなわち、オブジェクト可視領域とオブジェクト可触領域が同一である場合に限る。
【0120】
上記実施形態1を用いれば、1つのオブジェクトに、3種類のイベントと、重なり重心のユーザ領域とオブジェクト領域への帰属4種類を組み合わせた12種類の条件を網羅するようにインタラクションを割り当てることができる。オブジェクトが円盤の場合、2つの命令(回転、移動)を割り当てることができる。「回転」が発行される条件は、イベントIntouchのときに重なり重心がユーザとオブジェクト両方に帰属することである(図25)。「移動」が発行される条件は、イベントIntouchのときに重なり重心がオブジェクトのみに帰属することである(図26)。それ以外では、オブジェクトの位置や回転角度を記録する等の命令を発行する。
【0121】
実施形態1では一般にダイアルの位置によりX、Yの2パラメータ、回転角により1パラメータ、計3パラメータの指定が可能であって、3つのパラメータで指定できる機器の制御に適している。
【0122】
使用法は、実施形態1では図28に示すように、ユーザはディスプレイに表示されたオブジェクトを見ながら、ビデオカメラで撮影したユーザ自身の映像で該オブジェクトとのインタラクションを行うことで関連付けられた外部機器を操作する。さらに、ディスプレイに表示される映像では実世界でユーザがオブジェクトを操作しているかのように見える。このことは、ユーザ自身の実際の手でオブジェクトを触っているかのような操作感を呼び起こす。
【0123】
次に、実施形態1を利用した6つの実施例を説明する。なお、上記で参照した図と同一部分は、同一番号を付すことにより、説明は省略する。
【0124】
実施例1―1では、扇風機の制御装置に適用した。この装置は、ディスプレイに表示されるダイアルを回転させたり移動させたりするといった直観的な操作で、扇風機の風量と風向を制御できる。このような用途では、手を用いてダイアルを操作するのが通例なのでユーザ映像として手の映像を用いる。手の映像の抽出には、ユーザ領域抽出器2にて特定色(肌色)部位領域の抽出に変更しても良い。
【0125】
図29に、扇風機の風量を調整しているときのディスプレイに表示される画像を示す。ディスプレイには部屋の間取りの上に、扇風機オブジェクト33、ダイアル42、ユーザの手の映像41が表示されている。この部屋の間取り上の扇風機オブジェクト33の位置は実際の部屋に置いてある扇風機の位置に対応している。ここでは、ユーザの手の映像41によってディスプレイ上のダイアル42を操作している。ダイアル42の、回転角に関連付けられた風量と、部屋の間取り上での位置が表す場所に風が当たるような風向きとが実際の扇風機に設定される。
【0126】
実施例1―2は地図の制御であり、ディスプレイに表示されるダイアルを回転させたり移動させたりといった直観的な操作で、地図の縮尺を制御できる。ダイアルの、回転角が表す縮尺と、番組表上の位置が表す地図上の場所とが実際の地図の表示に設定される。
【0127】
実施例1−3は監視カメラの制御であり、ディスプレイに表示されるダイアルを回転させたり移動させたりといった直観的な操作で、監視カメラの撮影方向とズーム率を制御できる。ダイアルの、回転角が表すズーム率と、部屋の間取り上の位置が表す場所を撮影するような方向とが実際の監視カメラに設定される。
【0128】
実施例1−4はカーオーディオの制御であり、ディスプレイに表示されるダイアルを回転させたり移動させたりといった直観的な操作で、カーオーディオの音のバランスと音量を調節できる。ダイアルの、回転角が表すカーオーディオの音量と、車の内部の図上の位置が表す場所が最適になるような左右の音量比・位相とが実際のカーオーディオに設定される。
【0129】
上記の実施例1−4は、ホームシアター等のサラウンドシステムにも利用できる。
【0130】
実施例1−5はスポットライトの制御であり、ディスプレイに表示されるダイアルを回転させたり移動させたりといった直観的な操作で、スポットライトの向きと光の量を制御できる。ダイアルの、回転角が表す光の強さと、舞台上の位置が表す場所が照らされるような向きとが実際のスポットライトに設定される。
【0131】
実施例1−6は、地図表示の制御装置であり、操作画面に表示されるダイアルを回転させたり移動させたりといった直観的な操作で、別画面の地図を表示する地点の移動とその地図の縮尺の変更を制御できる。ダイアルの、回転角が表す縮尺と、操作画面の地図上の位置が表す場所が中心となる座標とが地図表示の制御装置に設定される。
【0132】
[実施形態2]
次に第2の実施形態について図面を参照して説明する。
【0133】
実施形態2の、基本構成と情報の流れは図1に示す実施形態1のものと同一である。ただし、変換特徴量格納器101、グラフィック操作命令生成器106、グラフィック変換特徴量計算器12、変換特徴量更新器13、の4つの機能モジュールの処理は実施形態1とは異なっている。それらについて、処理フローを参照しながら説明する。また、実施形態2では、オブジェクトが2つに分かれている場合を想定している。
【0134】
変換特徴量格納器101(変換特徴量格納手段)は、次に説明する5つのレジスタ(InitCenterX、InitCenterY、ToggleSwitch、DisplacementX、DisplacementY)であり、初期オブジェクト可触領域、初期オブジェクト可視領域、初期オブジェクト画像の変換に用いる変換特徴量を格納する。
【0135】
レジスタInitCenterX, InitCenterYは画像移動で用いる中心座標(X,Y)の初期値を格納する。
【0136】
レジスタToggleSwitchは、トグルスイッチであり、スイッチのオン・オフを表す値を格納する。
【0137】
レジスタDifferenceToggleSwitchは、前フレームからスイッチのオン・オフが変化したかどうかを表す値を格納する。
【0138】
レジスタDisplacementXおよびDisplacementYは、オブジェクトの初期位置からの変位量のx、y成分(ピクセル)を格納する。
【0139】
グラフィック操作命令生成器106の処理フローを、図30を参照しながら説明する。
【0140】
ステップV1ではレジスタObjectCommandをゼロリセットする。ObjectCommandの値が0であることは命令がない状態(「空命令」)を意味する。
【0141】
ステップV2では、命令が空命令であるか特定の命令であるかを判断する。このことは、レジスタEVENTの値が0か否かを判断することによる。具体的には、0である場合、判断結果がYesとなり、グラフィック操作命令生成の処理を終了する。一方、0でない場合、判断結果がNoとなり、ステップV3に進む。
【0142】
ステップV3では、命令が接触であるか否かを判断する。このことは、EVENTの値が1か否かを判断することによる。具体的には、1である場合、判断結果がYesとなり、ステップV4に進む。一方、1でない場合、判断結果がNoとなり、ステップV5に進む。
【0143】
ステップV4ではトグルスイッチオーバラップルーチンの処理を行い、終了後グラフィック操作命令生成の処理を終了する。
【0144】
ステップV5では、命令が切り替えであるか否かを判断する。このことは、EVENTの値が2か否かを判断することによる。具体的には、2である場合、判断結果がYesとなり、グラフィック操作命令生成の処理を終了する。一方、2でない場合、判断結果がNoとなり、ステップV6に進む。
【0145】
ステップV6ではトグルスイッチ操作命令生成の処理を行い、終了後グラフィック操作命令生成の処理を終了する。
【0146】
前述のトグルスイッチオーバラップルーチンの処理フローを、図31を参照しながら説明する。
【0147】
ステップW1では、重なり重心の場所がユーザ領域の中であるか否かを判断する。このことは、レジスタIN_USERが1であるか否かを判定するによる。具体的には、1の場合、判断結果がYesとなり、トグルスイッチオーバラップの処理を終了する。一方、1でない場合、判断結果がNoとなり、ステップW2に進む。
【0148】
ステップW2では、重なり重心の場所がオブジェクト領域の中であるか否かを判断する。このことは、レジスタIN_USERが1であるか否かを判定することによる。具体的には、1の場合、判断結果がYesとなり、ステップW3に進む。一方、1でない場合、判断結果がNoとなり、ステップW4に進む。ステップW3では、レジスタObjectCommandに12を格納し、ダイアルオーバラップの処理を終了する。ObjectCommandの値12はトグルスイッチを「切り替え」させる命令を表す。ステップW4ではObjectCommandに11を格納して、トグルスイッチオーバラップルーチンの処理を終了する。ObjectCommandの値11はトグルスイッチと「接触」し始めたという命令を表す。
【0149】
前述のトグルスイッチ操作命令生成ルーチンの処理フローを、図32を参照しながら説明する。
【0150】
ステップX1では、重なり重心の場所がユーザ領域の中であるか否かを判断する。このことは、レジスタIN_USERが1であるか否かを判定することによる。具体的には、1の場合、判断結果がYesとなり、トグルスイッチ操作命令生成ルーチンを終了する。一方、1でない場合、判断結果がNoとなり、ステップX2に進む。ステップX2では、重なり重心の場所がオブジェクト領域の外か否かを判断する。このことは、レジスタIN_OBJECTが1であるか否かを判定することによる。具体的には、1でない場合、判断結果がNoとなり、ステップX3に進む。一方、1である場合、判断結果がYesとなり、ステップX4に進む。ステップX3では、レジスタObjectCommandに12を格納し、トグルスイッチ操作命令生成ルーチンの処理を終了する。ObjectCommandの値12はトグルスイッチを「切り替え」させる命令を表す。ステップX4ではObjectCommandに13を格納して、トグルスイッチ操作命令生成ルーチンの処理を終了する。ObjectCommandの値13はトグルスイッチを「移動」させる命令を表す。
【0151】
グラフィック変換特徴量計算器12の処理フローを、図33を参照しながら説明する。
【0152】
ステップY1では、命令が空命令であるか特定の命令であるかを判断する。このことは、レジスタObjectCommandが0であるか否かを判定することによる。具体的には、0の場合、判断結果がYesとなり、グラフィック変換特徴量計算器の処理を終了する。一方、0でない場合、判断結果がNoとなり、ステップY2に進む。ステップY2では、命令が接触か否かを判断する。このことは、ObjectCommandが11か否かを判定することによる。具体的には、11の場合、判断結果がYesとなり、ステップY3に進む。一方、11でない場合、判断結果がNoとなり、ステップY4に進む。ステップY4ではトグルスイッチ変換特徴量計算ルーチンの処理を行い、終了後、ステップY3に進む。ステップY3ではレジスタPrvGravityX、PrvGravityYにそれぞれGravityX、GravityYの値を格納し、グラフィック変換特徴量計算器12の処理を終了する。
【0153】
前述のトグルスイッチ変換特徴量計算ルーチンの処理フローを、図34を参照しながら説明する。
【0154】
ステップ Z1では、命令が切り替えか否かを判断する。このことは、レジスタObjectCommandに格納されている値が12か否かを判断することによる。具体的には、12である場合、判断結果がYesとなり、ステップZ2に進む。一方、0でない場合、判断結果はNoとなり、ステップZ8に進む。
【0155】
ステップZ2では、トグルスイッチがオフか否かを判断する。このことは、レジスタDifferenceToggleSwitchに格納されている値が0か否かを判断することによる。具体的には、0である場合、判断結果がYesとなり、ステップZ3に進む。一方、0でない場合、判断結果はNoとなり、ステップZ4に進む。ステップZ3では、DiffirenceToggleSwitchを1にセットし、トグルスイッチ特徴量計算ルーチンの処理を終了する。DiffirenceToggleSwitchの値1は、トグルスイッチがオンということを表す。ステップZ4では、DifferenceToggleSwitchを0にセットし、トグルスイッチ特徴量計算ルーチンの処理を終了する。DifferenceToggleSwitchの値0は、トグルスイッチがオフということを表す。ステップZ5では、DifferenceDisplacementXをGravityX−PrvGravityXに、DifferenceDisplacementYをGravityY−PrvGravityYにセットし、ダイアル特徴量計算イベントの処理を終了する。
【0156】
変換特徴量更新器13の処理フローを、図35を参照しながら説明する。
【0157】
ステップAA1では、命令が空命令または接触であるか、どちらでもないのかを判断する。このことは、ObjectCommandの値が0または11であるか否かを判定することによる。具体的には、0または11の場合、判断結果がYesとなり、特徴量更新器の処理を終了する。一方、0または11以外の場合、判断結果がNoとなり、ステップAA2に進む。ステップAA2では、命令が切り替えか否かを判断する。このことは、ObjectCommandの値が12であるか否かを判定することによる。具体的には、12の場合、判断結果がYesとなり、ステップAA3に進む。一方、12でない場合、判断結果がNoとなり、ステップAA4に進む。ステップAA3では、ToggleSwitchにDifferenceToggleSwitchを格納し、処理を終了する。ステップAA4では、CenterXにCenterX + DifferenceDisplacementXを、CenterYにCenterY + DifferenceDisplacementYを、DisplacementXにDisplacementX+DifferenceDisplacementXを、DisplacementYにDisplacementY+DifferenceDisplacementYを、それぞれ格納し、処理を終了する。これにより、変換特徴量がグラフィック操作命令生成器13で生成された変換を施した結果得られる、新しい値に更新される。
【0158】
外部機器用操作命令意味変換器31の処理フローを、図36を参照しながら説明する。
【0159】
ステップBB1では、命令が空命令または接触であるか、どちらでもないのかを判断する。このことは、レジスタObjectCommandの値が0または11であるか否かを判定することによる。具体的には、0または11の場合、判断結果がYesとなり、外部機器用操作命令意味変換の処理を終了する。一方、0または11以外の場合、判断結果がNoとなり、ステップBB2に進む。BB2では、命令が切り替えか否かを判断する。このことは、ObjectCommandの値が12であるか否かを判定することによる。具体的には、12の場合、判断結果がYesになり、ステップBB3に進む。一方、12でない場合、判断結果がNoとなり、ステップBB4に進む。ステップ3では、「切り替え」に対してあらかじめ定めた外部機器の命令と、レジスタDifferenceToggleSwitchに格納されている値を、例えば3倍するなど、外部機器に応じてあらかじめ定めた関数により変換して得たパラメータを組とした外部機器操作命令を外部機器に送る。ステップ4では、「移動」に対してあらかじめ定めた外部機器の命令と、レジスタDifferenceDisplacementX、DifferenceDisplacementYに格納されている値を、例えば3倍するなど、外部機器に応じてあらかじめ定めた関数により変換して得たパラメータを組とした外部機器操作命令を外部機器に送る。
【0160】
上記実施形態2を用いれば、3種類のイベントと、重なり重心のユーザ領域とオブジェクト領域への帰属4種類(ユーザ領域とオブジェクト領域、ユーザ領域、オブジェクト領域、それ以外)を組み合わせた12種類の条件を網羅するようにインタラクションを割り当てることができる。2つの命令(切り替え、移動)を発行できる。「切り替え」が発行される条件は、イベントOntouchとIntouchのときに重なり重心がユーザとオブジェクトのどちらにも帰属しないことである(図37)。「移動」が発行される条件は、Intouchの場合に重なり重心がオブジェクトのみに帰属することである(図38)。本実施形態では重なり重心が存在していても命令が発行されない条件が存在する。この条件は、OntouchとIntouchの場合に重なり重心がユーザのみに帰属することである(図39)。この状態はユーザが接触を意図していていないとみなし、命令がないということを割り当てる。それ以外では、オブジェクトの位置や回転角度を記録する等の命令を発行する。
【0161】
実施形態2では一般にトグルスイッチオベジェクトの位置によりX、Yの2パラメータ、スイッチによりオン・オフパラメータ、計3パラメータの指定が可能であって、特に2つの状態の切り替えを含むような操作に向いている。
【0162】
使用法は、実施形態1と同様である(図28)。
【0163】
次に、実施形態2を利用した3つの実施例を説明する。
【0164】
実施例2−1では、PCのグラフィカルユーザインタフェース(GUI)に適用した。ディスプレイに表示されるアイコンを移動させたりと選択させたりといった直観的な操作で、マウスを使用しているかのようなGUIを提供する。このような用途では、手を用いてアイコンを操作するのが通例なのでユーザ映像として手の映像を用いる。手の映像の抽出には、ユーザ領域抽出器2にて特定色(肌色)の抽出に変更しても良い。
【0165】
図40に、ディスプレイ内のファルダオブジェクトを選択しているときにディスプレイに表示される画像を示す。ディスプレイには、フォルダオブジェクト43、ユーザの手の映像41が表示されている。フォルダオブジェクト43はPCのファイルシステムのフォルダに対応している。ユーザの手の映像41で、ファルダオブジェクト43をつかんで移動させたり、選択するとこで開いたり・閉じたりできる。
【0166】
実施例2―2はビデオ録画器の制御であり、ディスプレイに表示されるトグルスイッチを切り替えたり移動させたりといった直観的な操作で、チャンネルと録画のオン・オフを制御できる。トグルスイッチの、オン・オフ状態が表す録画指示と、テレビ番組表上の位置が表す番組がビデオ機器に設定される。
【0167】
実施例2−3は仮想ペンの制御であり、ディスプレイに表示されるトグルスイッチを切り替えたり移動させたりといった直感的な操作で、ディスプレイ上に曲線を引いたりできる。トグルスイッチの、オン・オフ状態が表す描画可否状態と、ディスプレイ上の位置が表す座標が描画ソフトに設定される。
【0168】
[実施形態3]
次に第3の実施形態について図面を参照して説明する。
【0169】
実施形態3の基本構成とデータの流れは図1に示す実施形態1のものと同一である。ただし、外部機器用操作命令意味変換器と外部機器の2つのモジュールは存在しない。さらに、変換特徴量格納器101、グラフィック操作命令生成器106、グラフィック変換特徴量計算器12、変換特徴量更新器13、の4つのモジュールの処理フローは実施形態1とは異なっている。それらについて、次に処理フローを参照しながら説明する。
【0170】
変換特徴量格納器101(変換特徴量格納手段)は、次に説明する6つのレジスタ(InitCenterX、InitCenterY、VelocityX、VelocityY、DisplacementX、DisplacementY)であり、初期オブジェクト可触領域、初期オブジェクト可視領域、初期オブジェクト画像の変換に用いる変換特徴量を格納する。
【0171】
レジスタInitCenterX、InitCenterYは画像移動で用いる中心座標(X,Y)の初期値を格納する。
【0172】
レジスタVelocityXおよびVelocityYは、速度ベクトルのx、y成分を格納する。
【0173】
レジスタCenterXおよびCenterYは、回転中心のピクセル座標(x,y)を格納する。
【0174】
レジスタDisplacementXおよびDisplacementYは、オブジェクトの初期位置からの変位量のx、y成分(ピクセル)を格納する。
【0175】
グラフィック操作命令生成器106の処理フローを、図41を参照しながら説明する。
【0176】
ステップCC1ではレジスタObjectCommandをゼロリセットする。ObjectCommandの値が0であることはボールを「自由落下」させる命令を表す。
【0177】
ステップCC2では、命令が空命令であるか特定の命令であるかを判断する。このことは、レジスタEVENTの値が0か否かを判断することによる。具体的には、0である場合、判断結果がYesとなり、グラフィック操作命令生成の処理を終了する。一方、0でない場合、判断結果がNoとなり、ステップCC3に進む。
【0178】
ステップCC3では、命令が接触であるか否かを判断する。このことは、EVENTに格納されている値が1か否かを判断することによる。具体的には、1である場合、判断結果がYesとなり、ステップCC4に進む。一方、1でない場合、判断結果がNoとなり、ステップCC5に進む。
【0179】
ステップCC4では、ステップ4では、レジスタObjectCommandに21を格納し、グラフィック操作命令生成器・ボールの処理を終了する。ObjectCommandの値21はボールと「接触した」ということを意味する命令を表す。
【0180】
ステップCC5では、切り替えであるか否かを判断する。このことは、EVENTに格納されている値が2か否かを判断することによる。具体的には、2である場合、判断結果がYesとなり、ステップ6に進む。一方、2でない場合、判断結果がNoとなり、ステップV7に進む。
【0181】
ステップCC6では、ObjectCommandに24を格納し、グラフィック操作命令生成器・ボールの処理を終了する。ObjectCommandの値24はボールと「離れた」ということを意味する命令を表す。
【0182】
ステップCC7ではボール操作命令生成ルーチンの処理を行い、終了後グラフィック操作命令生成・ボールの処理を終了する。
【0183】
前述のボール操作命令生成ルーチンの処理フローを、図42を参照しながら説明する。ステップDD1では、重なり重心の場所がユーザ領域の中であるか否かを判断する。このことは、レジスタIN_USERが1であるか否かを判定することによる。具体的には、1の場合、判断結果がYesとなり、ステップ2に進む。ステップDD2では、重なり重心の場所がオブジェクト領域の中であるか否かを判断する。このことは、レジスタIN_OBJECTが1であるか否かを判定することによる。具体的には、1の場合、判断結果がYesとなり、キャッチボール操作命令生成ルーチンの処理を終了する。一方、1でない場合、判断結果がNoとなり、ステップDD3に進む。ステップ3では、ObjectCommandに22を格納し、キャッチボール操作命令生成ルーチンの処理を終了する。ObjectCommandの値23はボールを「反射」という意味の命令を表す。
【0184】
一方、ステップDD1で、1でない場合、判断結果がNoとなり、ステップDD4に進む。ステップDD4では、レジスタObjectCommandに22を格納し、ボール操作命令生成ルーチンの処理を終了する。ObjectCommandの値22はボールを「持つ」という意味の命令を表す。
【0185】
グラフィック変換特徴量計算器12の処理フローを、図43を参照しながら説明する。ステップEE1では、命令が自由落であるか否かを判断する。このことは、レジスタObjectCommandが0であるか否かを判定することによる。具体的には、0の場合、判断結果がYesとなり、ステップEE2に進む。ステップEE2では、ボール軌道計算ルーチンの処理(後述)を行い、終了後、グラフィック変換特徴量の処理を終了する。
【0186】
一方、ステップEE1で、0でない場合、判断結果がNoとなり、ステップEE3に進む。ステップEE3では、命令が離れたか否かを判断する。このことは、ObjectCommandが24か否かを判定することによる。具体的には、24の場合、判断結果がYesとなり、ステップEE4に進む。一方、24でない場合、判断結果がNoとなり、ステップEE5に進む。ステップEE5では、命令が接触したか否かを判断する。このことは、ObjectCommandが21か否かを判定することによる。具体的には、21の場合、判断結果がYesとなり、ステップEE6に進む。一方、21でない場合、判断結果がNoとなり、ステップEE7に進む。ステップEE6では、ボール軌道計算ルーチンの処理(後述)を行ない、ステップEE8に進む。ステップEE7では、ボール変換特徴量計算ルーチンの処理(後述)を行い、終了後、ステップEE8に進む。ステップEE8では、レジスタPrvGravityX, PrvGravityYにそれぞれGravityX,GravityYを格納し、グラフィック変換特徴量計算器の処理を終了する。
【0187】
前述のボール軌道計算ルーチンの処理フローを、図44を参照しながら説明する。ステップ FF1では、レジスタDifferenceDisplacementXをDifferenceDisplacementX+DifferenceVelocityXに、DifferenceDisplacementYをDifferenceDisplacementX+DifferenceVelocityYに、DifferenceVelocityYをDifferenceVelocityY−1にそれぞれセットし、ボール軌道計算ルーチンの処理を終了する。
【0188】
前述のボール変換特徴量計算ルーチンの処理フローを、図45を参照しながら説明する。ステップ GG1では、命令が「持つ」か否かを判断する。このことは、レジスタObjectCommandに格納されている値が22か否かを判断することによる。具体的には、22である場合、判断結果がYesとなり、ステップGG2に進む。一方、22でない場合、判断結果はNoとなり、ステップGG3に進む。
【0189】
ステップGG2では、DifferenceDisplacementXをGravityX−PrvGravityXに、DifferenceDisplacementYをGravityY−PrvGravityYに、DifferenceVelocityXを得たDifferenceDisplacementXに、DifferenceVelocityYを得たDifferenceDisplacementYに、PrvObjectCommandをObjectCommandに、それぞれセットし、ボール変換特徴量計算ルーチンの処理を終了する。
【0190】
ステップGG3では、前フレームの命令が「持つ」だったか否かを判断する。このことは、レジスタPrvObjectCommandに格納されている値が22か否かを判断することによる。具体的には、22である場合、判断結果がYesとなり、ステップGG4に進む。一方、22でない場合、判断結果はNoとなり、ステップGG5に進む。
【0191】
ステップGG4ではボール軌道計算ルーチンの処理を行ない、ボール変換特徴量計算ルーチンの処理を終了する。
【0192】
ステップGG5では、速度の変化のベクトルδvとオブジェクトが1フレームで移動する量を表す速度ベクトルvを足し合わせて反射ベクトルv´を算出する(式8)。δvは式9を用いて算出する。
【数8】
【数9】
【0193】
ここで、nは、重なり重心からオブジェクトの中心に向かう単位ベクトルであり、仮想的な反射面の法線ベクトルを表わす。オブジェクトの重心Cから重なり重心Gに引く線の長さがオブジェクトの半径に近いときは、nは式10で近似できる。ここで式10のnはオブジェクトの中心座標Cと重なり重心の座標Gから成る。具体的には、vはx成分がVelocityX、y成分がVelocityYで表されており(式11)、Cはx成分がCenterX、y成分がCenterYで表されており(式2)。Gはx成分がGravityX、y成分がGravityYで表されており(式12)、式8により得た値の、x成分をDifferenceVelocityXに、y成分をDifferenceVelocityYに、DifferenceDisplacementXを得たDifferenceVelocityX+DifferenceDisplacementXに、DifferenceDisplacementYを得たDifferenceDisplacementY+DifferenceDisplacementYに、それぞれセットする。
【数10】
【数11】
【数12】
【0194】
それぞれの点とベクトルの関係を図47に示す。最後にボール変換特徴量計算イベントの処理を終了する。
【0195】
変換特徴量更新器13の処理フローを、図46を参照しながら説明する。ステップHH1では、DisplacementXにDisplacementX+DifferenceDisplacementXを、DisplacementYにDisplacementY+DifferenceDisplacementYを、CenterXにCenterX+DifferenceDisplacementXを、CenterYにCenterY+DifferenceDisplacementYを、VelocityXにDifferenceVelocityXを、VelocityYにDifferenceVelocityYを、それぞれセットし、特徴量更新器13の処理を終了する。これにより、変換特徴量がグラフィック操作命令生成器13で生成された変換を施した結果得られる、新しい値に更新される。
【0196】
上記実施形態3を用いれば、1つのオブジェクトに、3種類のイベントと、重なり重心のユーザ領域とオブジェクト領域への帰属4種類(ユーザ領域とオブジェクト領域、ユーザ領域、オブジェクト領域、それ以外)を組み合わせた12種類の条件を網羅するようにインタラクションを割り当てることができる。オブジェクトが中抜きの円盤の場合、3つの命令(反射、持つ、離す)を発行できる。「反射」が発行される条件は、イベントIntouchのときに重なり重心がオブジェクトのみに帰属することである(図48)。「持つ」が発行される条件は、イベントIntouchのときに重なり重心がオブジェクトのみに帰属することである(図49)。「離す」が発行される条件は、イベントIntouchのときに重なり重心がユーザとオブジェクト両方に帰属することである(図50)。それ以外では、オブジェクトの位置や回転角度を記録する等の命令を発行する。
【0197】
実施形態3では一般にオブジェクトの位置によりX、Yの2パラメータ、速度のVX、VYの2パラメータ、計4パラメータの指定が可能であって、オブジェクトの動きや位置を4つのパラメータで指定するようなゲームでの利用に適している。
【0198】
使用法は、実施形態1と同様である(図28)。
【0199】
次に、実施形態3を利用した実施例を説明する。
【0200】
実施例3−1では、ドッジボールソフトの制御システムに適用した。ディスプレイに表示されるボールオブジェクトを持つといった操作や、そのボールオブジェクトが反射するといった物理現象を模倣した実世界のようなドッジボールゲームを提供する。ドッジボールは、ユーザ映像は体全身で行うこと望ましい。
【図面の簡単な説明】
【0201】
【図1】本発明におけるインタフェース方法の一実施例の機能モジュールである。
【図2】本発明におけるハードウエア構成を示す図である。
【図3】本発明におけるメモリマップを示す図である。
【図4】本発明におけるライブ映像取得器の操作手順の一例を示すフローチャートである。
【図5】本発明におけるオブジェクト可触領域格納器の操作手順の一例を示すフローチャートである。
【図6】本発明におけるオブジェクト可視領域格納器の操作手順の一例を示すフローチャートである。
【図7】本発明におけるオブジェクト画像格納器の操作手順の一例を示すフローチャートである。
【図8】本発明における変換特徴量格納器の操作手順の一例を示すフローチャートである。
【図9】本発明におけるユーザ領域抽出機の操作手順の一例を示すフローチャートである。
【図10】本発明におけるオブジェクト可触領域加工器の操作手順の一例を示すフローチャートである。
【図11】本発明におけるオブジェクト可視領域加工器の操作手順の一例を示すフローチャートである。
【図12】本発明におけるオブジェクト画像加工器の操作手順の一例を示すフローチャートである。
【図13】本発明における重なり判定器の操作手順の一例を示すフローチャートである。
【図14】本発明における重心計算器の操作手順の一例を示すフローチャートである。
【図15】本発明における重心帰属分類器の操作手順の一例を示すフローチャートである。
【図16】本発明におけるイベント分類器の操作手順の一例を示すフローチャートである。
【図17】本発明における重なり履歴更新器の操作手順の一例を示すフローチャートである。
【図18】本発明におけるグラフィック操作命令生成器の操作手順の一例を示すフローチャートである。
【図19】本発明におけるダイアル操作命令生成ルーチンの操作手順の一例を示すフローチャートである。
【図20】本発明におけるグラフィック変換特徴量計算器の操作手順の一例を示すフローチャートである。
【図21】本発明におけるダイアル変換特徴量計算ルーチンの操作手順の一例を示すフローチャートである。
【図22】本発明における変換特徴量更新器の操作手順の一例を示すフローチャートである。
【図23】本発明における映像重ね合わせ器の操作手順の一例を示すフローチャートである。
【図24】本発明における外部機器用操作命令意味変換器の操作手順の一例を示すフローチャートである。
【図25】本発明における重なり重心がユーザ領域とオブジェクト領域と、の両方に帰属している一例を示す図である。
【図26】本発明におけるかなさり重心がオブジェクト領域のみに帰属している一例を示す図である。
【図27】本発明における連続した2フレームの重なり重心の、オブジェクトの回転中心からみた回転角度を示す図である。
【図28】本発明による実施例を使用している外観を示す図である。
【図29】本発明を扇風機の制御に適用したインタフェースの画面を示す図である。
【図30】本発明におけるグラフィック操作命令生成器の操作手順の一例を示すフローチャートである。
【図31】本発明におけるトグルスイッチオーバラップルーチンの操作手順の一例を示すフローチャートである。
【図32】本発明におけるトグルスイッチ操作命令生成ルーチンの操作手順の一例を示すフローチャートである。
【図33】本発明におけるグラフィック変換特徴量計算器の操作手順の一例を示すフローチャートである。
【図34】本発明におけるトグルスイッチ変換特徴量計算ルーチンの操作手順の一例を示すフローチャートである。
【図35】本発明における変換特徴量更新器の操作手順の一例を示すフローチャートである。
【図36】本発明における外部機器操作命令意味変換器の操作手順の一例を示すフローチャートである。
【図37】本発明における重なり重心がユーザ領域とオブジェクト領域のどちらにも帰属しない一例を示す図である。
【図38】本発明における重なり重心がオブジェクト領域のみに帰属している一例を示す図である。
【図39】本発明における重なり重心がオブジェクト領域のみに帰属している一例を示す図である。
【図40】本発明をファイルシステムに適用したインタフェースの様子を示す図である。
【図41】本発明におけるグラフィック操作命令生成器の操作手順の一例を示す図である。
【図42】本発明におけるボール操作命令生成ルーチンの操作手順の一例を示す図である。
【図43】本発明におけるグラフィック変換特徴量計算器の操作手順の一例を示す図である。
【図44】本発明におけるボール軌道計算ルーチンの操作手順の一例を示す図である。
【図45】本発明におけるボール特徴量計算ルーチンの操作手順の一例を示す図である。
【図46】本発明における変換特徴量更新器の操作手順の一例を示す図である。
【図47】本発明におけるボールが反射する場合のオブジェクトに関わるベクトルと点を示す図である。
【図48】本発明における重なり重心がユーザ領域のみに帰属している一例を示す図である。
【図49】本発明における重なり重心がオブジェクト領域のみに帰属している一例を示す図である。
【図50】本発明における重なり重心がユーザ領域とオブジェクト領域と、の両方に帰属している一例を示す図である。
【技術分野】
【0001】
本発明は、グラフィックオブジェクトの重心を用いた、仮想空間でのインタラクションよって命令を生成するインタフェース方法に関する。
【背景技術】
【0002】
日常的な身体動作で遠隔機器を操作できるようにするための技術として、操作者をビデオ撮影して映像化し、その映像と操作対象を表すグラフィックオブジェクトとのインタラクションを通じて、実際の機器に命令を入力する方法が知られている。従来、このような技術では、ビデオカメラで撮影されたユーザ映像の重心位置を、機器を制御するためのパラメータとして利用していた。
【0003】
たとえば、特開2006―268209では、ユーザの手の映像の重心が操作対象を表すグラフィックオブジェクトの領域に含まれたときに、ユーザがダイアルを“選択(接触)”したと解釈し、対応する命令を発行する。
【0004】
また、特開平7−281666では、ユーザ映像の領域が、操作対象のオブジェクトの領域に重なったときに、「選択(接触)」したと解釈されるだけでなく、同時に、重なった領域の重心とユーザ映像の重心の離間距離にもとづいて「入力データ」(入力パラメータ)を生成する。これによってあたかも音量レバーを押下する操作感覚を実現できる。
【0005】
映像重心を用いて実現できるインタラクションは1種類だけではない。たとえば、実世界で物体を手で押して動かすには、物体の後ろから重心に向かって押せばよい。このインタラクションを前述の特開平7−281666の映像重心を用いて仮想空間に実現するには、ユーザ映像とグラフィックオブジェクトとの重なり重心(複数の映像が重なっている領域の重心)の移動の、オブジェクト重心に向かう成分だけオブジェクトを移動させればよい。別のインタラクションとして、オブジェクトをダイアルのように回転させるには、重なり重心の、あらかじめ定めた点を回転中心とする回転角度だけオブジェクトを回せばよい。
【0006】
このように、映像の重心位置をパラメータとして用いることで、仮想空間内の身体を用いたインタラクションを、実世界でのある種の物理的なインタラクションのように、多様でなめらかかつ直観的なものにすることが可能である。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特開2006―268209
【特許文献2】特開平7−281666
【発明の開示】
【発明が解決しようとする課題】
【0008】
実世界にはダイアル付きリモコンのように、回転して状態を変えると同時に移動させることが可能なものもある。このように現実のオブジェクトは複数のインタラクションに応答することが一般的である。仮想世界のインタラクションの現実感と機能を高めるためにこのような複数のインタラクションを1つの仮想オブジェクトに実現することがのぞましい。
【0009】
しかしながら重心の位置にもとづく従来手法では、複数のインタラクションを1つのオブジェクトに実現することは困難である。たとえば、前述のダイアルを上記方法(重なり重心の平行移動)で押して動かせるようにすることを考える。単純に、押す機能と回す機能を同居させただけでは、押す向きがぴったり中心に向かうか、中心からぴったり等距離になるように動かない限り、移動の成分と回転の成分の両方が現れてしまい、二つの操作を使い分けることが困難になる。
このように、一般に1つのオブジェクトに複数の種類のインタラクションをわりあてることを映像内の重心位置を用いた技術だけで実現することは困難である。
【0010】
本発明は、従来技術が抱える上記問題点を解決するためになされた。すなわち、できるだけ多くのインタラクションを1つのオブジェクト上に実現し、仮想世界のインタラクションの現実感と機能を向上させることを目的とする。
【課題を解決するための手段】
【0011】
ユーザを撮影しライブ映像を取得する撮影手段と、該ライブ映像から背景差分法よりユーザ領域を抽出するユーザ領域抽出手段と、1つまたは複数のオブジェクト画像と該オブジェクト画像の領域を表すオブジェクト領域を提供するオブジェクト提供手段と、該ユーザ領域と該オブジェクト領域と、が同じピクセル座標のピクセルを持つか否かを表す重なり判定データを作り出す重なり判定手段と、該ユーザ領域と該オブジェクト領域と、の重なり領域の重心である重なり重心を算出する重心計算手段と、該重なり重心から、該オブジェクト画像および該オブジェクト領域の、移動の向きと大きさ、または回転の中心と角度と、を表す特徴量を算出する特徴量計算手段と、該特徴量によって該オブジェクト画像および該オブジェクト領域を移動または回転させるオブジェクト加工手段と、該ライブ映像のうち該ユーザ領域に含まれるピクセルにより上書きされた、該オブジェクト画像のうち該オブジェクト領域に含まれるピクセルである合成映像を作り出す映像重ね合わせ手段と、該合成映像を表示する表示手段と、を備え、ユーザによってオブジェクトを操作するインタフェース方法において、該重なり重心の位置と該ユーザ領域と該オブジェクト領域から、該重なり重心が該ユーザ領域と該オブジェクト領域の両方にあるか、該ユーザ領域だけにあるか、該オブジェクト領域だけにあるか、どちらにもないか、のいずれの場合かを分類した重心帰属データを作り出す重心帰属分類手段と、過去の該重なり判断データである重なり履歴情報を格納する重なり履歴格納手段と、該重なり履歴情報と該重なり判定データから、該重なり履歴情報と該重なり判定データの両方が重なっているという判定か、該重なり履歴情報だけが重なっているという判定か、該可な重なり判定データだけが重なっているという判定か、どちらも重なっていないという判定か、のいずれの場合かを分類したイベントを作り出すイベント分類手段と、該イベントと該帰属判断データから移動および回転するという命令種類である操作命令信号作り、該操作命令信号に該特徴量を割り当てる操作命令生成手段と、を備えたことを特徴とするインタフェース方法。
【発明の効果】
【0012】
以上説明したように、本発明によれば、できるだけ多くのインタラクションを1つのオブジェクト上に実現し、仮想世界のインタラクションの現実感と機能を向上させることを目的とする。
【発明を実施するための形態】
【0013】
[実施形態1]
本発明の実施形態1について図面を参照して説明する。なお、同一部位は同一符号で示し、重複した説明を省略する。
【0014】
まず、本発明に係わる情報の流れについて図1を参照しながら以下で説明する。図でボックスはフレームごとに行う処理の機能モジュールを表し、矢印は機能モジュール間の情報の流れを表す。行き先のボックスよりも下に描かれたボックスから出る矢印で表された情報は、次のフレームで用いるものであり、上から下への矢印のみを出すボックスの処理が終わった後に出力される。なお説明で言及されるハードウエアについてはハードウエア構成(後述、図2)を参照し、各機能モジュールの詳細については後述を参照のこと。
【0015】
ビデオカメラ(撮影手段)21によって、ユーザの全身または身体部位を撮影し、そのライブ映像を接続されたPC24内のライブ映像取得器に送る。
【0016】
ライブ映像取得器(ライブ映像取得手段) 1は、ビデオカメラ21からのライブ映像をフレームごとにピクセルごとのデータとしてとりこみ、ユーザ領域抽出器2(ユーザ領域抽出手段)および映像重ね合わせ器14(映像重ね合わせ手段)に送る。
【0017】
ファイルシステム22には背景画像(ビデオカメラ21でユーザがいない状態で撮った静止物体のみの画像)、オブジェクト画像、オブジェクト可触領域情報、オブジェクト可視領域情報、オブジェクトの変換特徴量(変換で用いるパラメータ)の初期値がそれぞれ、背景画像ファイル、オブジェクト画像ファイル、オブジェクト可触領域定義ファイル、オブジェクト可視領域定義ファイル、変換特徴量定義ファイルとして格納されている。これらはそれぞれ、ユーザ領域抽出器2、オブジェクト画像格納器3、オブジェクト可触領域格納器4、オブジェクト可視領域格納器5、変換特徴量格納器101に送られる。
【0018】
ユーザ領域抽出器2は、後述の背景差分法によって、ファイルシステム22から取得した背景情報を用いてライブ映像取得器で得られるライブ映像のフレームからユーザの領域情報(各ピクセルがユーザの領域に含まれるか否かの情報)を抽出し、得たユーザ領域情報を重なり判定器9(重なり判定手段)、重心帰属分類器102、重心計算器10、映像重ね合わせ器14に送る。
【0019】
オブジェクト画像格納器5(オブジェクト画像提供手段)は、ファイルシステム22から一度だけ、オブジェクト画像ファイルの内容をメモリ27内の初期オブジェクト画像格納エリアM4(詳細後述)にロードする。このメモリ領域はオブジェクト画像加工器8から参照される。
【0020】
オブジェクト可触領域格納器3(オブジェクト可触領域提供手段)は、ファイルシステム22から一度だけ、オブジェクト可触領域定義ファイルの内容をメモリ27内の初期オブジェクト可触領域格納エリアM2にロードする。このメモリ領域の内容は初期オブジェクト可触領域情報としてオブジェクト可触領域加工器6(オブジェクト可触領域加工手段)から参照される。
【0021】
オブジェクト可視領域ローダ4(オブジェクト可視領域提供手段)は、ファイルシステム22から一度だけ、オブジェクト可視領域定義ファイルの内容をメモリ27内の初期オブジェクト可視領域格納エリアM3にロードする。このメモリ領域の内容は初期オブジェクト可視領域情報としてオブジェクト可視領域加工器7(オブジェクト可視領域加工手段)から参照される。
【0022】
変換特徴量格納器101は、ファイルシステム22から一度だけ、変換特徴量定義ファイルを読み込み、回転中心の初期位置と現フレームの変換特徴量を保持する。これらの値はオブジェクト画像加工器8、オブジェクト可触領域加工器6、オブジェクト可視領域加工器7、グラフィック変換特徴量計算器12、変換特徴量更新器13で参照される。これらのうち変換特徴量はフレームごとの処理(図1)の最後に次フレームの変換特徴量に置き換えられる。これらの値の格納にはレジスタ26内の専用レジスタを用いている。
【0023】
オブジェクト画像加工器8は、現フレームの変換特徴量に従い初期オブジェクト画像に対して移動・回転等の変換を施し、得たオブジェクト画像を映像重ね合わせ器14に送る。
【0024】
オブジェクト可触領域加工器6は、現フレームの変換特徴量に従って初期オブジェクト可触領域に対して移動・回転等の変換を施し、得たオブジェクト可触領域を重なり判定器9、重心計算器10、重心帰属分類器102に送る。
【0025】
オブジェクト可視領域加工器7は、現フレームの変換特徴量に従って初期オブジェクト可視領域に対して移動・回転等の変換を施し、得たオブジェクト可視領域を映像重ね合わせ器14に送る。
【0026】
重なり判定器9は、ユーザ領域とオブジェクト可触領域との重なり(重なっているか否か)を判定する。すなわちユーザ領域およびオブジェクト可触領域の両方が同じピクセル座標のピクセルを持つか否かを判断する。ここで得た重なり判定結果を重なり履歴更新器105(重なり履歴更新手段)、イベント分類器104、重心計算器10、重心帰属分類器102に送る。
【0027】
重なり履歴格納器103は、当該フレームの処理開始時には前フレームの重なり判定結果が格納されている。この値の格納にはレジスタ26内の専用レジスタを用いている。ここに格納された判定結果はイベント分類器104で用いられる。この値はその後、後述するように、重なり履歴更新器105によって現フレームの重なり判定結果に置き換えられる。
【0028】
重心計算器10は、重なり判定器で得られた重なり判定がYesの場合のみ、ユーザ領域抽出器2とオブジェクト可触領域加工器6の出力を用いて重なり領域の重心の位置を算出し、得た重心位置を重心帰属分類器102、グラフィック変換特徴量計算器12に送る。
【0029】
重心帰属分類器102は、重なり判定がYesの場合のみ重なり重心がオブジェクト領域に含まれるか否か、およびユーザ領域に含まれるか否かを判定し、結果をグラフィック操作命令生成器106に送る。以下で、重なり重心が含まれる領域については、重なり重心がオブジェクト領域やユーザ領域に帰属していると表記する場合もある。
【0030】
イベント分類器104は、重なり判定結果と重なり判定結果履歴をもとに1フレーム前の重なり(Yes/No)と現フレームの重なり(Yes/No)の組み合わせが4つのうちいずれであるかをイベントとしてグラフィック操作命令生成器106に送る。
【0031】
重なり履歴更新器105は、前述したように、重なり判定器103の結果を重なり履歴格納器104に格納する。
【0032】
グラフィック操作命令生成器106は、イベントと帰属種に応じてあらかじめ定められた命令(グラフィック操作命令)を生成しグラフィック変換特徴量計算器12、変換特徴量更新器13、外部機器用操作命令意味変換器31に送る。
【0033】
グラフィック変換特徴量計算器12は、グラフィック操作命令に応じて、変換特徴量と重なり重心位置から既定の演算により算出されるパラメータからなる、オブジェクトのグラフィックを変換・加工するためのグラフィック変換特徴量を生成し、変換特徴量更新器13と外部機器用操作命令意味変換器31に送る。
【0034】
変換特徴量更新器13は、変換特徴量格納器101から取得した現フレームのグラフィックの変換特徴量のうち、グラフィック操作命令生成器106が生成した命令ごとにあらかじめ定めたものの値、にグラフィック変換特徴量計算器12で得られた値を加算して得た結果で変換特徴量格納器101が保持する変換特徴量を更新する。
【0035】
外部機器用操作命令意味変換器31は、グラフィック変換特徴量とグラフィック操作命令を、外部機器32に固有の、あらかじめ定めた外部機器操作命令に変換し、得た外部機器用操作命令を外部機器32に送る。
【0036】
外部機器32は、操作対象の機器であって、外部機器32に固有の操作命令で動作するものである。
【0037】
映像重ね合わせ器14は、オブジェクト画像のうちオブジェクト可視領域で定義されている部分の情報と、ライブ映像のうちユーザ領域情報によって定義されている部分の情報を白い背景上に重ね合わせ、得た合成映像をディスプレイ23(表示手段)に送る。
【0038】
ディスプレイ23は、合成映像を表示する。
【0039】
図2は、本実施形態のハードウエア構成図である。ビデオカメラ21、ディスプレイ23、外部機器32、ビデオ画像取得器1〜映像重ね合わせ器14までの各種処理器を備えた(インストールした)PC24で構成される。PC24は、CPU25(演算部)、メモリ27、レジスタ26、ファイルシステム22(ハードディスク)、を備えている。
【0040】
各処理器は、本実施形態のように汎用のPC上に構築する代わりに、機能モジュールごとに専用の装置を用いても良い。
【0041】
以下、画像を構成するピクセルの配置が横N縦M(ピクセル)であることをピクセルN×Mのように表す。ピクセルの位置を横縦それぞれ何番目かを示す数字の組(x,y)をピクセル座標と呼ぶ。以下で画像に関する幾何学的言及においては、この座標系を仮定するものとする。画像がピクセルN×Mであるとき、横0〜N−1、縦0〜M−1、の範囲をピクセル座標の有効範囲と呼ぶ。N、Mの値を当該画像の横幅、高さと呼ぶ。なお、本実施形態で取り扱う画像は主にピクセル320×240である。
【0042】
本実施形態で使用する各種データが格納される専用メモリについて説明する。この専用メモリは1ワード32ビットの列で構成されていて、メモリ27の一部を用いている。この専用メモリは格納されるデータごとのセグメントに分かれている。セグメントの先頭アドレスを当該セグメントのオフセットと呼び、セグメントに含まれるワード数を当該セグメントのサイズと呼ぶ。オフセットがfであるようなセグメントに含まれるアドレスf+m(0 ≦ m < 当該セグメントのサイズ)のことを「当該セグメントのm番地」と呼ぶことにする。さらに、セグメントがピクセル340×240の画像または領域情報を格納する場合、アドレスf+240×x+yはピクセル座標(x,y)のピクセル値が格納されるので「当該セグメントの(x,y)番地」と呼ぶことにする。
【0043】
ひとつのセグメントすべてのビットを0にすることをセグメントのゼロリセットと呼ぶことにする。また、サイズ320×240のセグメントに格納するものがピクセル320×240の画像または領域情報である場合、x=0〜319、y=0〜239のすべてのx、yに対してセグメントの(x,y)番地に画像または領域情報Gのピクセル座標(x,y)のピクセル値を格納することを、当該セグメントにGを格納すると呼ぶことにする。さらに、ピクセルデータは、32ビットのうち下位24ビットを高位から8ビットごとに赤・緑・青と区切った値で表す。たとえば、赤色を16進数で表記と0x00FF0000となる。
【0044】
専用メモリを構成するセグメントM1〜M11の詳細は以下のとおりである。セグメントの配置例を図3に示す。
【0045】
M1は、サイズ320×240ワードのセグメントであって、ライブ映像格納エリアである。このセグメントには、ビデオカメラ21からのライブ映像の1フレームのピクセルデータ(ピクセル320×240)が格納される。このセグメントは、一定周期ごとにビデオカメラ21からのライブ映像が格納され更新される。
【0046】
M2は、サイズ320×240ワードのセグメントであって、初期オブジェクト可触領域格納エリアである。このセグメントは、ピクセルごとに、その場所がオブジェクト可触領域に含まれるか否かを表す値1、0を格納する。これらの値全体によって回転・移動等加工前のオブジェクト可触領域が指定される。オブジェクト可触領域を回転・移動等加工するときに、これらの値を用いる。
【0047】
M3は、サイズ320×240ワードのセグメントであって、初期オブジェクト可視領域格納エリアである。このセグメントは、ピクセルごとに、その場所がオブジェクト可視領域に含まれるか否かを表す値1、0を格納する。これらの値全体によって回転・移動等加工前のオブジェクト可視領域が指定される。オブジェクト可視領域を回転・移動等加工するときに、これらの値を用いる。
【0048】
M4は、サイズ320×240ワードのセグメントであって、初期オブジェクト画像格納エリアである。このセグメントにはオブジェクト画像のピクセルデータが格納される。これらの値は回転・移動等加工して現フレームのオブジェクト画像を得るためのオブジェクト原画像として用いられる。
【0049】
M5は、サイズ320×240ワードのセグメントであって、ユーザ領域格納エリアである。このセグメントは各ピクセルがユーザ領域に含まれるか否かを表す値1、0を格納する。このデータがユーザの領域を表現する。
【0050】
M6は、サイズ320×240ワードのセグメントであって、背景画像格納エリアである。このセグメントは背景画像のピクセルデータにセットされる。このデータは背景差分法の背景画像として利用される。
【0051】
M7は、サイズ320×240ワードのセグメントであって、オブジェクト可触領域格納エリアである。このセグメントは、各ピクセルがオブジェクト可触領域に含まれるか否かを表す値1、0を格納する。これらの値全体によってオブジェクトの領域が表される。
【0052】
M8は、サイズ320×240ワードのセグメントであって、オブジェクト可視領域格納エリアである。このセグメントは、各ピクセルがオブジェクト可視領域に含まれるか否かを表す値1、0を格納する。これらの値全体によってオブジェクトの領域が表される。
【0053】
M9は、サイズ320×240ワードのセグメントであって、オブジェクト画像格納エリアである。このセグメントにはオブジェクト画像のピクセルデータが格納される。
【0054】
M10は、サイズ320×240ワードのセグメントであって、表示用映像格納エリアである。このセグメントは、オブジェクト映像の各ピクセルを、ユーザ領域の同じ位置のピクセルの値が1の場合に限り、ライブ映像格納エリアM1の当該ピクセルの値で置き換えたものを格納している。このデータは、ディスプレイ23に表示する映像である。
【0055】
本実施形態で使用する各種データが格納されるレジスタについて説明する。このレジスタは1ワード32ビットの列で構成されていて、レジスタ26の一部を用いている。この専用レジスタは格納されるデータごとのセグメントに分かれている。なお、以下で「レジスタz」は格納場所として言及するときはレジスタzそのものを、値として参照するときはレジスタzに格納された値を、意味する。
【0056】
レジスタXおよびYは、画像を格納したセグメントの(X,Y)番地を指定するときに使用されるもので複数のモジュールで利用される。
【0057】
専用レジスタについて説明する。この専用レジスタはレジスタ26の一部を用いている。専用レジスタは24個あり、それぞれは1ワードである。
【0058】
次に説明する7つのレジスタ(InitCenterX、InitCenterY、Rotate、CenterX、CenterY、DisplacementX、DisplacementY)(変換特徴量格納手段)は、初期オブジェクト可触領域、初期オブジェクト可視領域、初期オブジェクト画像の変換に用いる変換特徴量を格納する。
【0059】
レジスタInitCenterX, InitCenterYは回転変換で用いる中心座標(X,Y)の初期値を格納する。
【0060】
レジスタRotateは、初期オブジェクト画像をどれだけ回転すべきかを示す値(ラジアン)を格納する。
【0061】
レジスタCenterXおよびCenterYは、回転中心のピクセル座標(x,y)を格納する。
【0062】
レジスタDisplacementXおよびDisplacementYは、オブジェクトの初期位置からの変位量のx、y成分(ピクセル)を格納する。
【0063】
レジスタPrvOverlapは重なり履歴格納エリア(重なり履歴格納手段)である。このレジスタは、ユーザ領域とオブジェクト領域が前フレームで重なっていたか否かを表す値1、0を保持する。
【0064】
レジスタGravityXおよびGravityYは、重なり領域の重心のピクセル座標(x,y)を格納する。
【0065】
レジスタPrvGravityXおよびPrvGravityYは、前の重なり領域の重心のピクセル座標(x,y)を格納する。
【0066】
レジスタOriginalXおよびOriginalYは、オブジェクトを移動・回転等加工するときの移動元のピクセル座標(x,y)を格納する。
【0067】
レジスタOverlapは、ユーザ領域とオブジェクト領域と、が同じピクセル座標を持っているか否かを重なり判定結果として格納する。
【0068】
レジスタCOUNTは、重なり領域が何ピクセルあるかを表す値を格納する。この値は、重なり重心を算出するときに用いる。
【0069】
レジスタtotalXおよびtotalYは、ピクセルのx ,y座標それぞれの重なり領域全体にわたる和を格納する。
【0070】
レジスタEVENTはイベント分類の結果を0〜3の値として格納する。
【0071】
レジスタIN_USERは重なり重心がユーザ領域に帰属するか否かを1、0の値として格納する。
【0072】
レジスタIN_OBJECTは重なり重心がオブジェクト可触領域に帰属するか否かを1,0の値として格納する
【0073】
次に説明する4つのレジスタは、操作命令用の値を格納する。
【0074】
レジスタObjectCommandは、グラフィック操作命令を格納する。
【0075】
レジスタDifferenceRotateは、次フレームで加算すべきグラフィック変換特徴量のうち回転角(ラジアン)を格納する。
【0076】
レジスタDifferenceDisplacementXおよびDifferenceDisplacementYは、次フレームで加算すべきグラフィック変換得量のうち移動量のx,y成分(ピクセル)を格納する。
【0077】
次に、上記モジュールごとの詳細処理について、フローチャートを用いて説明する。
【0078】
ビデオカメラ21では、ユーザを含む映像を取得する。本実施例では、解像度320×240のビデオカメラを1台用いる。
【0079】
ライブ映像取得器1の処理フローを、図4を参照しながら説明する。ステップA1では、ビデオカメラ21から1フレーム分の画像を取得し、得た画像のピクセルデータをライブ映像格納エリアM1に格納する。
【0080】
オブジェクト可触領域格納器3の処理フローを、図5を参照しながら説明する。ステップB1では、ファイルシステム22からオブジェクト可触領域定義ファイルを読み込む。このオブジェクト可触領域定義ファイルは、ピクセル320×240の画像に対応したピクセルごとにオブジェクト可触領域に含まれるか否かを示す値(1,0)を記述したものである。得たオブジェクト可触領域情報を初期オブジェクト可触領域格納エリアM2に格納する。
【0081】
オブジェクト領域格納器M5の処理フローを、図6を参照しながら説明する。ステップC1では、ファイルシステム22からオブジェクト可視領域定義ファイルを読み込む。このオブジェクト可視領域定義ファイルは、ピクセル320×240の画像に対応したピクセルごとにオブジェクトが可視領域に含まれるか否かを示す値(1,0)を記述したものである。得たオブジェクト可視領域情報を初期オブジェクト可視領域格納エリアM3に格納する。
【0082】
オブジェクト画像格納器5の処理フローを、図7を参照しながら説明する。ステップD1では、ファイルシステム22からオブジェクト画像ファイルを読み込み、得たオブジェクト画像のピクセルデータを初期オブジェクト画像格納エリアM4に格納する。
【0083】
変換特徴量格納器の処理フローを、図8を参照しながら説明する。ステップE1では、ファイルシステム22から変換特徴量定義ファイルを読み込む。この変換特徴量定義ファイルは、オブジェクトを移動・回転等加工するための、移動ベクトルのx,y成分(ピクセル)、回転中心(ピクセル座標)、回転角(ラジアン)を記述したものである。これらの値は、InitCenterX、InitCenterYには回転中心の初期のピクセル座標(x,y), Rotateには回転角、CenterXには回転中心のピクセル座標のx成分、CenterYには回転中心のピクセル座標のy成分、DisplacementXには移動量のx成分、DisplacementYには移動量のy成分が格納される。
【0084】
ユーザ領域抽出器2の処理フローを、図9を参照しながら説明する。ステップF1では、背景画像格納エリアM6にファイルシステム22から読み込んだ背景画像を格納する。ステップF2では、XおよびYをゼロリセットする。
【0085】
ステップF3では、ライブ映像の各ピクセルが背景のものであるかユーザのものであるかを判断する。このことは、ライブ映像格納エリアM1の(X,Y)番地に格納されている値と背景画像格納エリアM6の(X,Y)番地に格納されている値が同じか否かを判断することによる。具体的には、同じである場合には、判断結果がYesとなり、ステップF4に進む。一方、異なる場合には、判断結果はNoとなり、ステップF5に進む。ステップF4では、ユーザ領域格納エリアM5の(X,Y)番地に値0を格納する。ステップF5では、ユーザ領域格納エリアM5の(X,Y)番地に値1を格納する。ここで、値0はライブ映像のその座標のピクセルデータと背景画像の該当ピクセルデータとが一致しないことを表し、値1は一致することを表す。ステップF6では、Yを1インクリメントする。ステップF7では、セグメントの縦方向の座標が画像の高さより大きいか否かを判断する。このことは、Yが配列サイズ240以上か否かを判断することによる。具体的には、240より小さい場合には、判断結果がNoとなり、前述のステップF3に戻る。これにより、Y=0〜239に対してステップF3〜F7が繰り返され、ピクセル座標を縦方向に1列分スキャンしてピクセルを比較したことになる。一方、240以上場合には、判断結果がYesになり、ステップF8に進む。ステップF8では、Xを1インクリメントし、Yをゼロリセットする。これにより、ピクセル座標は、横方向は1ピクセル進み、縦方向は先頭に戻る。ステップF9では、セグメントの横方向の座標が画像の横幅より大きいか否かを判断する。このことは、Xが配列サイズ320以上か否かを判断することによる。具体的には、320より小さい場合には、判断結果がNoとなり、前述したステップF4に戻る。これにより、X=0〜319に対してステップF3〜F9が繰り返され、結局、ピクセル座標すべてをスキャンして1フレーム分の映像と背景を比較することになり、ユーザのみの領域を抽出したことになる。一方、大きい場合には、判断結果がYesとなり、ユーザ領域抽出の処理を終了する。
【0086】
オブジェクト可触領域加工器4の処理フローを、図10を参照しながら説明する。ステップG1では、XとYをゼロリセットする。
【0087】
初期オブジェクト可触領域格納エリアM2に格納された画像をθだけ回転させたり、指定された向きと大きさだけ移動させたりした画像をオブジェクト可触領域格納エリアM7に格納するために、初期オブジェクト可触領域格納エリアM2の式1で計算される番地u=(x,y)に格納されている値をオブジェクト可触領域格納エリアM7のu´=(X,Y)番地に格納する。
【0088】
ステップG2では、u´は回転および移動後の座標とし、Cは回転中心の座標とし、Dは移動量として、回転および移動前の座標uを式1によって算出する。具体的には、uはx成分がレジスタX、y成分がYであり、Cはx成分がCenterX、y成分がCenterYであり(式2)、Mはx成分がDisplacementX、y成分がDesplacementYであり(式3)、式1を用いて得たuの、x成分をOriginalXに、y成分をOriginalYにセットする。
【数1】
【数2】
【数3】
【数4】
【0089】
ここで、R[φ]は回転ベクトルであり、cosφ、sinφ、−sinφ、cosφから成る(式4)。
【0090】
ステップG3では、変換後の画像のピクセル座標(X,Y)が有効範囲内のピクセル座標を変換したものか否か、言い換えればピクセル座標(X,Y)を逆変換したら有効範囲内に入るか否か、を判断する。このことは、OriginalXが0〜319かつOriginalYが0〜239か否かを判断することによる。具体的には、OriginalXが0〜319かつOriginalYが0〜239である場合、判断結果がYesとなり、ステップG4に進む。一方、それ以外の場合、判断結果はNoとなり、ステップG5に進む。ステップG4では、初期オブジェクト可触領域格納エリアM2の(OriginalX、OriginalY)番地に格納されている値をオブジェクト可触領域格納エリアM7の(X,Y)番地に格納する。ステップG5では、オブジェクト可触領域格納エリアの(X,Y)番地に値0を格納する。ステップG8では、Yを1インクリメントする。ステップG6では、セグメントの縦方向の座標が画像の高さより大きいか否かを判断する。このことは、Yが配列サイズ240以上か否かを判断することによる。具体的には、240より小さい場合には、判断結果がNoとなり、前述のステップG2に戻る。これにより、Y=0〜239に対してステップG2〜G7が繰り返され、ピクセル座標を縦方向に1列分スキャンしてピクセルを比較したことになる。一方、240以上場合には、判断結果がYesになり、ステップG8に進む。ステップG8では、Xを1インクリメントし、Yをゼロリセットする。これにより、ピクセル座標は、横方向は1ピクセル進み、縦方向は先頭に戻る。ステップG9では、セグメントの横方向の座標が画像の横幅よりも大きいか否かを判断する。このことは、Xが配列サイズ320以上か否かを判断することによる。具体的には、320より小さい場合には、判断結果がNoとなり、前述したステップG4に戻る。これにより、X=0〜319に対してステップG4〜G11が繰り返され、ピクセル座標すべてをスキャンしたことになる。このようにして、可触領域を回転・移動する。一方、320以上の場合には、判断結果がYesとなり、オブジェクト可触領域加工の処理を終了する。
【0091】
オブジェクト可視領域加工器7の処理フローは、オブジェクト可触領域格納エリアの代わりにオブジェクト可視領域格納エリアを用いる点を除いてオブジェクト可触領域加工器6の処理フローと同じである。(図11)
【0092】
オブジェクト画像加工器8の処理フローは、オブジェクト可触領域格納エリアの代わりにオブジェクト画像格納エリアを用いる点を除いてオブジェクト可触領域加工器6の処理フローと同じである。(図12)
【0093】
重なり判定器9の処理フローを、図13を参照しながら説明する。ステップJ1では、XおよびYをゼロリセットする。
【0094】
ステップJ2では、座標(X,Y)のピクセルがユーザ領域およびオブジェクト可触領域のピクセル座標の少なくとも一方に含まれていないか、両方に含まれるか、を判断する。このことは、ユーザ領域格納エリアM5の(X,Y)番地に格納されている値またはオブジェクト可触領域格納エリアM7の(X,Y)番地に格納されている値のどちらかが0であるか否かを判断するによる。具体的には、どちらも0でない場合には、判断結果がNoとなり、ステップJ8に進む。ステップJ8では、Overlapを値1にセットして重なり判定の処理を終了する。ここで、値1はユーザとオブジェクトとが重なっていることを表す。一方、共に0の場合には、判断結果がYesとなり、ステップJ3に進む。ステップJ3では、Yを1インクリメントする。ステップJ4では、セグメントの縦方向の座標が画像の高さより大きいか否かを判断する。このことは、Yが配列サイズ240以上か否かを判断するによる。具体的には、240より小さい場合には、判断結果がNoとなり、前述のステップJ2に戻る。これにより、Y=0〜239に対してステップJ2〜J4が繰り返され、ピクセル座標を縦方向に1列分スキャンして結果を比較したことになる。一方、240以上場合には、判断結果がYesになり、ステップJ5に進む。ステップJ5では、Xを1インクリメントし、Yをゼロリセットする。これにより、ピクセル座標は、横方向は1ピクセル進み、縦方向は先頭に戻る。ステップJ6では、セグメントの横方向の座標が画像の横幅より大きいか否かを判断する。このことは、Xが配列サイズ320以上か否かを判断するによる。具体的には、320より小さい場合には、判断結果がNoとなり、前述したステップJ2に戻る。これにより、X=0〜319に対してステップJ2〜J6が繰り返され、ピクセル座標すべてをスキャンして判定することになり、ユーザ領域とオブジェクト可触領域が重なっているか否かを判断したことになる。一方、大きい場合には、判断結果がYesとなり重なりステップJ7に進む。ステップJ7ではOverlapに値0をセットして処理を終了する。ここで、値0はユーザとオブジェクトとが重なっていないことを表す。
【0095】
重心計算器10の処理フローを、図14を参照しながら説明する。ステップK1では、X、Y、COUNT、totalX、totalYをゼロリセットする。
【0096】
ステップK2では、座標(X,Y)のピクセルがユーザ領域およびオブジェクト可触領域のピクセル座標の両方に含まれているか否か、を判断する。このことは、ユーザ領域格納エリアM5の(X,Y)番地に格納されている値と、オブジェクト可触領域格納エリアM7の(X,Y)番地に格納されている値と、がともに1であるか否かを判断することによる。具体的には、どちらかが1でない場合、判断結果がNoとなり、ステップK4に進む。一方、0の場合、判断結果がYesとなり、ステップK3に進む。ステップK3では、COUNTを1インクリメントし、totalXをtotalX+Xにセットし、totalYをtotalY+Yにセットする。ステップK4では、Yを1インクリメントする。ステップK5では、セグメントの縦方向の座標が画像の高さより大きいか否かを判断する。このことは、Yが配列サイズ240以上か否かを判断することによる。具体的には、240より小さい場合には、判断結果がNoとなり、前述のステップK2に戻る。これにより、Y=0〜239に対してステップK2〜K5が繰り返され、ピクセル座標を縦方向に1列分スキャンして結果を比較したことになる。一方、240以上場合には、判断結果がYesになり、ステップK6に進む。ステップK6では、Xを1インクリメントし、Yをゼロリセットする。これにより、ピクセル座標は、横方向は1進み、縦方向は先頭に戻る。ステップK7では、セグメントの横方向の座標が画像の横幅より大きいか否かを判断する。このことは、Xが配列サイズ320以上か否かを判断するによる。具体的には、320より小さい場合には、判断結果がNoとなり、前述したステップK2に戻る。これにより、X=0〜319に対してステップK2〜K7が繰り返され、ピクセル座標すべてをスキャンし、計算し、重なり領域の座標の和と重なっているデータ数を取得したことになる。一方、大きい場合には、判断結果がYesとなり、ステップK8に進む。ステップ+K8では、GravityXをtotalX/COUNTにセットし、GravityYをtotalY/COUNTにセットする。これにより、GX、GYに重心座標がセットされたことになる。
【0097】
重心帰属分類器102の処理フローを、図15を参照しながら説明する。ステップL1では、座標(X,Y)のピクセルがユーザ領域およびオブジェクト可触領域のピクセル座標の少なくとも一方に含まれていないか、両方に含まれるか、を判断する。このことは、Overlapに格納された値が0か否かを判断することによる。具体的には、0の場合、判断結果はYesとなり、処理を終了する。一方、0でない場合、判断結果はNoとなり、ステップL2に進む。ステップL2では、即ち重なり重心がユーザ領域に含まれていない(図25)か含まれている(図26)かを判断する。このことはユーザ領域格納エリアM5の(GravityX、GravityY)番地に格納されている値が0か否かを判断することによる。具体的には、0の場合、判断結果がYesとなり、ステップL3に進む。一方、0でない場合、判断結果がNoとなり、ステップL4に進む。なお、以下図では、Uがユーザ領域、Oがオブジェクト領域、Gは重なり重心(GravityX、GravityY)を表す。ステップL3では、レジスタIN_USERを値0にセットする。ステップL4では、IN_USERを値1にセットする。次にステップL5では、重なり重心がオブジェクト可触領域に含まれていないのか含まれているのかを判断する。このことは、オブジェクト可触領域格納エリアM7の(GravityX、GravityY)番地に格納されている値が0か否かを判断することによる。具体的には、0の場合、判断結果はYesとなり、ステップL6に進む。一方、0でない場合、判断結果がNoとなり、ステップL7に進む。ステップL6では、レジスタIN_OBJECTを値0にセットする。ステップL7では、レジスタIN_OBJECTを値1にセットする。
【0098】
イベント分類手段104の処理フローを、図16を参照しながら説明する。ステップM1では、前フレームで重なり重心が存在していなかったか存在していたかを判断する。このことは、prvOverlapに格納されている値が0か否かを判断することによる。具体的には、0である場合、判断結果がYesとなり、ステップM2に進む。ステップM2では、座標(X,Y)のピクセルがユーザ領域およびオブジェクト可触領域のピクセル座標の少なくとも一方に含まれていないか、両方に含まれるか、を判断する。このことは、Overlapに格納されている値が0であるか否かを判断することによる。具体的には、ステップM2で、0である場合、判断結果がYesとなり、ステップM3に進む。一方ステップM2で、0でない場合、判断結果がNoとなり、ステップM4に進む。ステップM3では、EVENTをゼロリセットする。この0という値は、重なっていないというイベント(以下でNoneと表す)を表す。ステップM4では、EVENTを値1にセットする。この1という値は、重なり領域が発生したというイベント(以下でOntouchと表す)を表す。一方ステップM1で、0でない場合、判断結果がNoとなり、ステップM5に進む。ステップM5では、映像内でユーザとオブジェクトとが重なっていないのか重なっているのかを判断する。このことは、Overlapに格納されている値が0であるか否かを判断することによる。具体的には、ステップM5で、0である場合、判断結果がYesとなり、ステップM6に進む。一方、ステップM5で、0でない場合、判断結果がNoとなり、ステップM7に進む。ステップM6では、EVENTを値2にセットする。この2という値は、重なり領域が消滅したというイベント(以下でReleaseを表す)を表す。ステップM7では、EVENTを値3にセットする。この3という値は、重なり重心が存在し続けているというイベント(以下でIntouchと表す)を表している。
【0099】
重なり履歴更新器105の処理フローを、図17を参照しながら説明する。ステップN1でレジスタOverlapに格納された値をPrvOverlapにコピーする。これは次フレームで使用する。
【0100】
グラフィック操作命令生成器106の処理フローを、図18を参照しながら説明する。ステップO1ではレジスタObjectCommandをゼロリセットする。ObjectCommandの値が0であることは命令がない状態(「空命令」)を意味する。
【0101】
ステップO2では、映像内でユーザとオブジェクトとが重なっていないか重なっているかを判断する。このことは、レジスタEVENTの値が0か否かを判断することによる。具体的には、0の場合、判断結果がYesとなり、グラフィック操作命令生成の処理を終了する。一方、0でない場合、判断結果がNoとなり、ステップO3に進む。
【0102】
ステップO3では、映像内でユーザとオブジェクトとの重なりが発生したか否かを判断する。このことは、EVENTの値が1か否かを判断することによる。具体的には、1の場合、判断結果がYesとなり、ステップO4に進む。一方、1でない場合、判断結果がNoとなり、ステップO5に進む。
【0103】
ステップO4ではレジスタObjectCommandに値1を格納してグラフィック操作命令生成の処理を終了する。ObjectCommandの値が1であることは、指がダイアルに「接触」したことを意味する。
【0104】
ステップO5では、映像内でユーザとオブジェクトとの重なりが消滅したか存在しているかを判断する。このことは、EVENTに格納されている値が2か否かを判断することによる。具体的には、2の場合、判断結果がYesとなり、グラフィック操作命令生成の処理を終了する。一方2でない場合、判断結果がNoとなり、ステップO6に進む。
【0105】
ステップO6ではダイアル操作命令生成ルーチンの処理(後述)を行い、終了後グラフィック操作命令生成の処理を終了する。
【0106】
前述のダイアル操作命令生成ルーチンの処理フローを、図19を参照しながら説明する。ステップP1では、重なり重心の場所がユーザ領域の中であるか(図25)否(図26)かを判断する。このことは、レジスタIN_USERが1であるか否かを判定することによる。具体的には、1の場合、判断結果がYesとなり、ステップP2に進む。一方、1でない場合、判断結果がNoになり、ステップP3に進む。ステップP2ではレジスタObjectCommandに2を格納し、ダイアル操作命令生成の処理を終了する。ObjectCommandの値2はダイアルを「回転」させる命令を表す。ステップP3ではObjectCommandに3を格納して、ダイアル操作命令生成の処理を終了する。 ObjectCommandの値3はダイアルを「移動」させる命令を表す。
【0107】
グラフィック変換特徴量計算器12の処理フローを、図20を参照しながら説明する。ステップQ1では、空命令か特定の命令が発行されたのかを判断する。このことは、レジスタObjectCommandが0であるか否かを判定することによる。具体的には、0の場合、判断結果がYesとなり、グラフィック変換特徴量計算器の処理を終了する。一方0でない場合、判断結果がNoとなり、ステップQ2に進む。ステップQ2では、命令が接触か否かを判断する。このことは、ObjectCommandが1か否かを判定するとこによる。具体的には、1の場合、判断結果がYesとなり、ステップQ4に進む。一方1でない場合、判断結果がNoとなり、ステップQ3に進む。 ステップQ3ではダイアル変換特徴量計算ルーチンの処理を行い、終了後、ステップQ4に進む。ステップQ4では、レジスタPrvGravityX、PrvGravityYにそれぞれGravityX、GravityYを格納し、グラフィック変換特徴量計算器の処理を終了する。
【0108】
前述のダイアル変換特徴量計算ルーチンの処理フローを、図21を参照しながら説明する。ステップR1では、命令が回転か否かを判断する。このことは、レジスタObjectCommandに格納されている値が2か否かを判断することによる。具体的には、2である場合、判断結果がYesとなり、ステップR2に進む。一方、2でない場合、判断結果はNoとなり、ステップR4に進む。
【0109】
ステップR2では、現フレームと前フレームで、重なり重心がオブジェクトの回転の中心とが同一座標になったか否かを判断する。このことは、GravityX=CXかつGravityY=CenterYであるか、またはPrvGravityX=CenterXかつPrvGravityY=CenterYであるかのいずれかが成り立つか否かを判断する。これが成り立つのは後述する算出方法が使えないとき、すなわち重なり重心の移動を算出するための2点のうちいずれかが回転中心と一致するために回転角が定義できなくなることを意味する。(この場合回転は生じないものとする。)具体的には、成り立つ場合、判断結果がYesとなり、ステップダイアル変換特徴量計算イベントの処理を終了する。一方、成り立たない場合、判断結果がNoとなり、ステップR3に進む。
【0110】
ステップR3では、連続した2フレームの重なり重心の、オブジェクトの回転中心からみた回転角度を求める。図27で、pはオブジェクトの回転中心Cから前フレームの重なり重心G´へ向かうベクトル、qはオブジェクトの回転中心Cから重なり重心Gに向かうベクトル、θはCからみたGからG´の回転角度である。θは式5によって算出する。
【数5】
【0111】
ここで、detAは正方行列Aの行列式を表し、m次元縦ベクトルp1、…、pnを横に並べて作るm×n行列を(p1 … pn)で表す。また、ベクトルaの大きさを|a|で表す。実数を引数にとる関数sign(z)の値は、z≧0のときは1、z<0のときは−1と定義する。a・bはベクトルa、bの内積を表す。
具体的には、pはx成分がレジスタCenterX−prvGravityX、y成分がCenterY−prvGravityYで表されており(式6)、qはx成分がCenterX−GravityX、y成分がCenterY―GravityYで表されており(式7)、式5を用いて得た値をdifferenceThetaにセットする。
【数6】
【数7】
【0112】
図27では、Cは回転中心(CenterX、CenterY)、G´は(PrvGravityX、PrvGravityY)である。以上でダイアル変換特徴量計算ルーチンの処理を終了する。
【0113】
ステップR4では、DifferenceDisplacementXをGravityX−PrvGravityXに、DifferenceDisplacementYをGravityY−PrvGravityYにセットし、ダイアル変換特徴量計算イベントの処理を終了する。
【0114】
変換特徴量更新器13の処理フローを、図22を参照しながら説明する。ステップS1では、命令が空命令または接触であるか、またはどちらでもないかを判断する。このことは、ObjectCommandの値が0または1であるか否かを判断することによる。具体的には、0または1の場合、判断結果がYesとなり、特徴量更新器の処理を終了する。一方、0または1以外の場合、判断結果がNoとなり、ステップS2に進む。ステップS2では、命令が回転か否かを判断する。このことは、ObjectCommandの値が2であるか否かを判定することによる。具体的には、2の場合、判断結果がYesとなり、ステップS3に進む。一方、2ではない場合、判断結果がNoとなり、ステップS4に進む。ステップS3では、RotateにRotate+DifferenceRotateを格納し、処理を終了する。ステップS4では、CenterXにCenterX+DifferenceDisplacementXを、CenterYにCenterY+DifferenceDisplacementYを、DisplacementXにDisplacementX+DifferenceDisplacementXを、DisplacementYにDisplacementY+DifferenceDisplacementYを、それぞれ格納し、処理を終了する。これにより、変換特徴量がグラフィック操作命令生成器106で生成された変換を施した結果得られる、新しい値に更新される。
【0115】
映像重ね合わせ器14の処理フローを、図23を参照しながら説明する。このモジュールでは、まず、オブジェクト画像を表示用の画像バッファにコピーする。次に、ユーザ画像を表示用の画像バッファにコピーする。ステップT1では、レジスタXおよびYをゼロリセットする。
【0116】
ステップT2では、オブジェクト可視領域格納エリアの(X,Y)番地に格納された値が0か否かを判断することによる。具体的には、0である場合、判断結果がYesとなり、ステップT3に進む。一方、0でない場合、判断結果がNoとなり、ステップT4に進む。ステップT3では、表示用映像格納エリアの(X,Y)番地に値0を格納する。ステップT4では、オブジェクト画像格納エリアの(X,Y)番地に格納されている値を表示用映像格納エリアの(X,Y)番地に格納する。これにより、表示すべきオブジェクトを画像から抽出し、その画像を表示領域に格納したことになる。ステップT5では、ユーザ領域格納エリアの(X,Y)番地に格納された値が0か否かを判断することによる。具体的には、0でない場合、判断結果がNoになり、ステップT6に進む。一方、0である場合、判断結果がYesになり、ステップT7に進む。ステップT6では、にライブ映像格納エリアの(X,Y)番地を格納されている値を表示用映像格納エリアの(X,Y)番地に格納する。ステップT7では、Yを1インクリメントする。ステップT8では、セグメントの縦方向の座標が画像の高さより大きいか否かを判断する。このことは、Yが配列サイズ240以上か否かを判断することによる。具体的には、240より小さい場合には、判断結果がNoとなり、前述のステップT2に戻る。これにより、Y=0〜239に対してステップT2〜T8が繰り返され、ピクセル座標を縦方向に1列分スキャンして結果を比較したことになる。一方、240以上場合には、判断結果がYesになり、ステップT9に進む。ステップT9では、Xを1インクリメントし、Yをゼロリセットする。これにより、ピクセル座標は、横方向は1ピクセル進み、縦方向は先頭に戻る。ステップT10では、セグメントの横方向の座標が画像の横幅より大きいか否かを判断する。このことは、Xが配列サイズ320以上か否かを判断することによる。具体的には、320より小さい場合には、判断結果がNoとなり、前述したステップT2に戻る。これにより、X=0〜319に対してステップT2〜T10が繰り返され、画像(ピクセル)座標すべてをスキャンして表示用映像格納エリアに重ね合わせた映像のピクセルデータを格納したことになる。一方、大きい場合には、判断結果がYesとなり、ユーザ映像切抜きの処理を終了する。
【0117】
外部機器用操作命令意味変換器31の処理フローを、図24を参照しながら説明する。ステップU1では、命令が空命令または接触であるか、またはどちらでもないかを判断する。このことは、レジスタObjectCommandの値が0または1であるか否かを判定することによる。具体的には、0または1の場合、判断結果がYesとなり、外部機器用操作命令意味変換の処理を終了する。一方、それ以外の場合、判断結果がNoとなり、ステップU2に進む。U2では、命令が回転か否かを判断する。このことは、ObjectCommandの値が2であるか否かを判定することによる。具体的には、2の場合、判断結果がYesとなり、「回転」に対してあらかじめ定めた外部機器の命令と、レジスタDifferenceRotateに格納されている値を、例えば3倍するなど、外部機器に応じてあらかじめ定めた関数により変換して得たパラメータを組とした外部機器操作命令を外部機器に送る。一方、2でない場合、判断結果がNoとなり、「移動」に対してあらかじめ定めた外部機器の命令と、レジスタDifferenceDisplacementX、DifferenceDisplacementYに格納されている値を、例えば3倍するなど、外部機器に応じてあらかじめ定めた関数により変換して得たパラメータを組とした外部機器操作命令を外部機器に送る。
【0118】
外部機器32は、外部機器用操作命令に従ってあらかじめ定められた、例えば後述の実施例に示すような動作をする。
【0119】
以下で表示と触れる領域が一致しているオブジェクトをあつかう。すなわち、オブジェクト可視領域とオブジェクト可触領域が同一である場合に限る。
【0120】
上記実施形態1を用いれば、1つのオブジェクトに、3種類のイベントと、重なり重心のユーザ領域とオブジェクト領域への帰属4種類を組み合わせた12種類の条件を網羅するようにインタラクションを割り当てることができる。オブジェクトが円盤の場合、2つの命令(回転、移動)を割り当てることができる。「回転」が発行される条件は、イベントIntouchのときに重なり重心がユーザとオブジェクト両方に帰属することである(図25)。「移動」が発行される条件は、イベントIntouchのときに重なり重心がオブジェクトのみに帰属することである(図26)。それ以外では、オブジェクトの位置や回転角度を記録する等の命令を発行する。
【0121】
実施形態1では一般にダイアルの位置によりX、Yの2パラメータ、回転角により1パラメータ、計3パラメータの指定が可能であって、3つのパラメータで指定できる機器の制御に適している。
【0122】
使用法は、実施形態1では図28に示すように、ユーザはディスプレイに表示されたオブジェクトを見ながら、ビデオカメラで撮影したユーザ自身の映像で該オブジェクトとのインタラクションを行うことで関連付けられた外部機器を操作する。さらに、ディスプレイに表示される映像では実世界でユーザがオブジェクトを操作しているかのように見える。このことは、ユーザ自身の実際の手でオブジェクトを触っているかのような操作感を呼び起こす。
【0123】
次に、実施形態1を利用した6つの実施例を説明する。なお、上記で参照した図と同一部分は、同一番号を付すことにより、説明は省略する。
【0124】
実施例1―1では、扇風機の制御装置に適用した。この装置は、ディスプレイに表示されるダイアルを回転させたり移動させたりするといった直観的な操作で、扇風機の風量と風向を制御できる。このような用途では、手を用いてダイアルを操作するのが通例なのでユーザ映像として手の映像を用いる。手の映像の抽出には、ユーザ領域抽出器2にて特定色(肌色)部位領域の抽出に変更しても良い。
【0125】
図29に、扇風機の風量を調整しているときのディスプレイに表示される画像を示す。ディスプレイには部屋の間取りの上に、扇風機オブジェクト33、ダイアル42、ユーザの手の映像41が表示されている。この部屋の間取り上の扇風機オブジェクト33の位置は実際の部屋に置いてある扇風機の位置に対応している。ここでは、ユーザの手の映像41によってディスプレイ上のダイアル42を操作している。ダイアル42の、回転角に関連付けられた風量と、部屋の間取り上での位置が表す場所に風が当たるような風向きとが実際の扇風機に設定される。
【0126】
実施例1―2は地図の制御であり、ディスプレイに表示されるダイアルを回転させたり移動させたりといった直観的な操作で、地図の縮尺を制御できる。ダイアルの、回転角が表す縮尺と、番組表上の位置が表す地図上の場所とが実際の地図の表示に設定される。
【0127】
実施例1−3は監視カメラの制御であり、ディスプレイに表示されるダイアルを回転させたり移動させたりといった直観的な操作で、監視カメラの撮影方向とズーム率を制御できる。ダイアルの、回転角が表すズーム率と、部屋の間取り上の位置が表す場所を撮影するような方向とが実際の監視カメラに設定される。
【0128】
実施例1−4はカーオーディオの制御であり、ディスプレイに表示されるダイアルを回転させたり移動させたりといった直観的な操作で、カーオーディオの音のバランスと音量を調節できる。ダイアルの、回転角が表すカーオーディオの音量と、車の内部の図上の位置が表す場所が最適になるような左右の音量比・位相とが実際のカーオーディオに設定される。
【0129】
上記の実施例1−4は、ホームシアター等のサラウンドシステムにも利用できる。
【0130】
実施例1−5はスポットライトの制御であり、ディスプレイに表示されるダイアルを回転させたり移動させたりといった直観的な操作で、スポットライトの向きと光の量を制御できる。ダイアルの、回転角が表す光の強さと、舞台上の位置が表す場所が照らされるような向きとが実際のスポットライトに設定される。
【0131】
実施例1−6は、地図表示の制御装置であり、操作画面に表示されるダイアルを回転させたり移動させたりといった直観的な操作で、別画面の地図を表示する地点の移動とその地図の縮尺の変更を制御できる。ダイアルの、回転角が表す縮尺と、操作画面の地図上の位置が表す場所が中心となる座標とが地図表示の制御装置に設定される。
【0132】
[実施形態2]
次に第2の実施形態について図面を参照して説明する。
【0133】
実施形態2の、基本構成と情報の流れは図1に示す実施形態1のものと同一である。ただし、変換特徴量格納器101、グラフィック操作命令生成器106、グラフィック変換特徴量計算器12、変換特徴量更新器13、の4つの機能モジュールの処理は実施形態1とは異なっている。それらについて、処理フローを参照しながら説明する。また、実施形態2では、オブジェクトが2つに分かれている場合を想定している。
【0134】
変換特徴量格納器101(変換特徴量格納手段)は、次に説明する5つのレジスタ(InitCenterX、InitCenterY、ToggleSwitch、DisplacementX、DisplacementY)であり、初期オブジェクト可触領域、初期オブジェクト可視領域、初期オブジェクト画像の変換に用いる変換特徴量を格納する。
【0135】
レジスタInitCenterX, InitCenterYは画像移動で用いる中心座標(X,Y)の初期値を格納する。
【0136】
レジスタToggleSwitchは、トグルスイッチであり、スイッチのオン・オフを表す値を格納する。
【0137】
レジスタDifferenceToggleSwitchは、前フレームからスイッチのオン・オフが変化したかどうかを表す値を格納する。
【0138】
レジスタDisplacementXおよびDisplacementYは、オブジェクトの初期位置からの変位量のx、y成分(ピクセル)を格納する。
【0139】
グラフィック操作命令生成器106の処理フローを、図30を参照しながら説明する。
【0140】
ステップV1ではレジスタObjectCommandをゼロリセットする。ObjectCommandの値が0であることは命令がない状態(「空命令」)を意味する。
【0141】
ステップV2では、命令が空命令であるか特定の命令であるかを判断する。このことは、レジスタEVENTの値が0か否かを判断することによる。具体的には、0である場合、判断結果がYesとなり、グラフィック操作命令生成の処理を終了する。一方、0でない場合、判断結果がNoとなり、ステップV3に進む。
【0142】
ステップV3では、命令が接触であるか否かを判断する。このことは、EVENTの値が1か否かを判断することによる。具体的には、1である場合、判断結果がYesとなり、ステップV4に進む。一方、1でない場合、判断結果がNoとなり、ステップV5に進む。
【0143】
ステップV4ではトグルスイッチオーバラップルーチンの処理を行い、終了後グラフィック操作命令生成の処理を終了する。
【0144】
ステップV5では、命令が切り替えであるか否かを判断する。このことは、EVENTの値が2か否かを判断することによる。具体的には、2である場合、判断結果がYesとなり、グラフィック操作命令生成の処理を終了する。一方、2でない場合、判断結果がNoとなり、ステップV6に進む。
【0145】
ステップV6ではトグルスイッチ操作命令生成の処理を行い、終了後グラフィック操作命令生成の処理を終了する。
【0146】
前述のトグルスイッチオーバラップルーチンの処理フローを、図31を参照しながら説明する。
【0147】
ステップW1では、重なり重心の場所がユーザ領域の中であるか否かを判断する。このことは、レジスタIN_USERが1であるか否かを判定するによる。具体的には、1の場合、判断結果がYesとなり、トグルスイッチオーバラップの処理を終了する。一方、1でない場合、判断結果がNoとなり、ステップW2に進む。
【0148】
ステップW2では、重なり重心の場所がオブジェクト領域の中であるか否かを判断する。このことは、レジスタIN_USERが1であるか否かを判定することによる。具体的には、1の場合、判断結果がYesとなり、ステップW3に進む。一方、1でない場合、判断結果がNoとなり、ステップW4に進む。ステップW3では、レジスタObjectCommandに12を格納し、ダイアルオーバラップの処理を終了する。ObjectCommandの値12はトグルスイッチを「切り替え」させる命令を表す。ステップW4ではObjectCommandに11を格納して、トグルスイッチオーバラップルーチンの処理を終了する。ObjectCommandの値11はトグルスイッチと「接触」し始めたという命令を表す。
【0149】
前述のトグルスイッチ操作命令生成ルーチンの処理フローを、図32を参照しながら説明する。
【0150】
ステップX1では、重なり重心の場所がユーザ領域の中であるか否かを判断する。このことは、レジスタIN_USERが1であるか否かを判定することによる。具体的には、1の場合、判断結果がYesとなり、トグルスイッチ操作命令生成ルーチンを終了する。一方、1でない場合、判断結果がNoとなり、ステップX2に進む。ステップX2では、重なり重心の場所がオブジェクト領域の外か否かを判断する。このことは、レジスタIN_OBJECTが1であるか否かを判定することによる。具体的には、1でない場合、判断結果がNoとなり、ステップX3に進む。一方、1である場合、判断結果がYesとなり、ステップX4に進む。ステップX3では、レジスタObjectCommandに12を格納し、トグルスイッチ操作命令生成ルーチンの処理を終了する。ObjectCommandの値12はトグルスイッチを「切り替え」させる命令を表す。ステップX4ではObjectCommandに13を格納して、トグルスイッチ操作命令生成ルーチンの処理を終了する。ObjectCommandの値13はトグルスイッチを「移動」させる命令を表す。
【0151】
グラフィック変換特徴量計算器12の処理フローを、図33を参照しながら説明する。
【0152】
ステップY1では、命令が空命令であるか特定の命令であるかを判断する。このことは、レジスタObjectCommandが0であるか否かを判定することによる。具体的には、0の場合、判断結果がYesとなり、グラフィック変換特徴量計算器の処理を終了する。一方、0でない場合、判断結果がNoとなり、ステップY2に進む。ステップY2では、命令が接触か否かを判断する。このことは、ObjectCommandが11か否かを判定することによる。具体的には、11の場合、判断結果がYesとなり、ステップY3に進む。一方、11でない場合、判断結果がNoとなり、ステップY4に進む。ステップY4ではトグルスイッチ変換特徴量計算ルーチンの処理を行い、終了後、ステップY3に進む。ステップY3ではレジスタPrvGravityX、PrvGravityYにそれぞれGravityX、GravityYの値を格納し、グラフィック変換特徴量計算器12の処理を終了する。
【0153】
前述のトグルスイッチ変換特徴量計算ルーチンの処理フローを、図34を参照しながら説明する。
【0154】
ステップ Z1では、命令が切り替えか否かを判断する。このことは、レジスタObjectCommandに格納されている値が12か否かを判断することによる。具体的には、12である場合、判断結果がYesとなり、ステップZ2に進む。一方、0でない場合、判断結果はNoとなり、ステップZ8に進む。
【0155】
ステップZ2では、トグルスイッチがオフか否かを判断する。このことは、レジスタDifferenceToggleSwitchに格納されている値が0か否かを判断することによる。具体的には、0である場合、判断結果がYesとなり、ステップZ3に進む。一方、0でない場合、判断結果はNoとなり、ステップZ4に進む。ステップZ3では、DiffirenceToggleSwitchを1にセットし、トグルスイッチ特徴量計算ルーチンの処理を終了する。DiffirenceToggleSwitchの値1は、トグルスイッチがオンということを表す。ステップZ4では、DifferenceToggleSwitchを0にセットし、トグルスイッチ特徴量計算ルーチンの処理を終了する。DifferenceToggleSwitchの値0は、トグルスイッチがオフということを表す。ステップZ5では、DifferenceDisplacementXをGravityX−PrvGravityXに、DifferenceDisplacementYをGravityY−PrvGravityYにセットし、ダイアル特徴量計算イベントの処理を終了する。
【0156】
変換特徴量更新器13の処理フローを、図35を参照しながら説明する。
【0157】
ステップAA1では、命令が空命令または接触であるか、どちらでもないのかを判断する。このことは、ObjectCommandの値が0または11であるか否かを判定することによる。具体的には、0または11の場合、判断結果がYesとなり、特徴量更新器の処理を終了する。一方、0または11以外の場合、判断結果がNoとなり、ステップAA2に進む。ステップAA2では、命令が切り替えか否かを判断する。このことは、ObjectCommandの値が12であるか否かを判定することによる。具体的には、12の場合、判断結果がYesとなり、ステップAA3に進む。一方、12でない場合、判断結果がNoとなり、ステップAA4に進む。ステップAA3では、ToggleSwitchにDifferenceToggleSwitchを格納し、処理を終了する。ステップAA4では、CenterXにCenterX + DifferenceDisplacementXを、CenterYにCenterY + DifferenceDisplacementYを、DisplacementXにDisplacementX+DifferenceDisplacementXを、DisplacementYにDisplacementY+DifferenceDisplacementYを、それぞれ格納し、処理を終了する。これにより、変換特徴量がグラフィック操作命令生成器13で生成された変換を施した結果得られる、新しい値に更新される。
【0158】
外部機器用操作命令意味変換器31の処理フローを、図36を参照しながら説明する。
【0159】
ステップBB1では、命令が空命令または接触であるか、どちらでもないのかを判断する。このことは、レジスタObjectCommandの値が0または11であるか否かを判定することによる。具体的には、0または11の場合、判断結果がYesとなり、外部機器用操作命令意味変換の処理を終了する。一方、0または11以外の場合、判断結果がNoとなり、ステップBB2に進む。BB2では、命令が切り替えか否かを判断する。このことは、ObjectCommandの値が12であるか否かを判定することによる。具体的には、12の場合、判断結果がYesになり、ステップBB3に進む。一方、12でない場合、判断結果がNoとなり、ステップBB4に進む。ステップ3では、「切り替え」に対してあらかじめ定めた外部機器の命令と、レジスタDifferenceToggleSwitchに格納されている値を、例えば3倍するなど、外部機器に応じてあらかじめ定めた関数により変換して得たパラメータを組とした外部機器操作命令を外部機器に送る。ステップ4では、「移動」に対してあらかじめ定めた外部機器の命令と、レジスタDifferenceDisplacementX、DifferenceDisplacementYに格納されている値を、例えば3倍するなど、外部機器に応じてあらかじめ定めた関数により変換して得たパラメータを組とした外部機器操作命令を外部機器に送る。
【0160】
上記実施形態2を用いれば、3種類のイベントと、重なり重心のユーザ領域とオブジェクト領域への帰属4種類(ユーザ領域とオブジェクト領域、ユーザ領域、オブジェクト領域、それ以外)を組み合わせた12種類の条件を網羅するようにインタラクションを割り当てることができる。2つの命令(切り替え、移動)を発行できる。「切り替え」が発行される条件は、イベントOntouchとIntouchのときに重なり重心がユーザとオブジェクトのどちらにも帰属しないことである(図37)。「移動」が発行される条件は、Intouchの場合に重なり重心がオブジェクトのみに帰属することである(図38)。本実施形態では重なり重心が存在していても命令が発行されない条件が存在する。この条件は、OntouchとIntouchの場合に重なり重心がユーザのみに帰属することである(図39)。この状態はユーザが接触を意図していていないとみなし、命令がないということを割り当てる。それ以外では、オブジェクトの位置や回転角度を記録する等の命令を発行する。
【0161】
実施形態2では一般にトグルスイッチオベジェクトの位置によりX、Yの2パラメータ、スイッチによりオン・オフパラメータ、計3パラメータの指定が可能であって、特に2つの状態の切り替えを含むような操作に向いている。
【0162】
使用法は、実施形態1と同様である(図28)。
【0163】
次に、実施形態2を利用した3つの実施例を説明する。
【0164】
実施例2−1では、PCのグラフィカルユーザインタフェース(GUI)に適用した。ディスプレイに表示されるアイコンを移動させたりと選択させたりといった直観的な操作で、マウスを使用しているかのようなGUIを提供する。このような用途では、手を用いてアイコンを操作するのが通例なのでユーザ映像として手の映像を用いる。手の映像の抽出には、ユーザ領域抽出器2にて特定色(肌色)の抽出に変更しても良い。
【0165】
図40に、ディスプレイ内のファルダオブジェクトを選択しているときにディスプレイに表示される画像を示す。ディスプレイには、フォルダオブジェクト43、ユーザの手の映像41が表示されている。フォルダオブジェクト43はPCのファイルシステムのフォルダに対応している。ユーザの手の映像41で、ファルダオブジェクト43をつかんで移動させたり、選択するとこで開いたり・閉じたりできる。
【0166】
実施例2―2はビデオ録画器の制御であり、ディスプレイに表示されるトグルスイッチを切り替えたり移動させたりといった直観的な操作で、チャンネルと録画のオン・オフを制御できる。トグルスイッチの、オン・オフ状態が表す録画指示と、テレビ番組表上の位置が表す番組がビデオ機器に設定される。
【0167】
実施例2−3は仮想ペンの制御であり、ディスプレイに表示されるトグルスイッチを切り替えたり移動させたりといった直感的な操作で、ディスプレイ上に曲線を引いたりできる。トグルスイッチの、オン・オフ状態が表す描画可否状態と、ディスプレイ上の位置が表す座標が描画ソフトに設定される。
【0168】
[実施形態3]
次に第3の実施形態について図面を参照して説明する。
【0169】
実施形態3の基本構成とデータの流れは図1に示す実施形態1のものと同一である。ただし、外部機器用操作命令意味変換器と外部機器の2つのモジュールは存在しない。さらに、変換特徴量格納器101、グラフィック操作命令生成器106、グラフィック変換特徴量計算器12、変換特徴量更新器13、の4つのモジュールの処理フローは実施形態1とは異なっている。それらについて、次に処理フローを参照しながら説明する。
【0170】
変換特徴量格納器101(変換特徴量格納手段)は、次に説明する6つのレジスタ(InitCenterX、InitCenterY、VelocityX、VelocityY、DisplacementX、DisplacementY)であり、初期オブジェクト可触領域、初期オブジェクト可視領域、初期オブジェクト画像の変換に用いる変換特徴量を格納する。
【0171】
レジスタInitCenterX、InitCenterYは画像移動で用いる中心座標(X,Y)の初期値を格納する。
【0172】
レジスタVelocityXおよびVelocityYは、速度ベクトルのx、y成分を格納する。
【0173】
レジスタCenterXおよびCenterYは、回転中心のピクセル座標(x,y)を格納する。
【0174】
レジスタDisplacementXおよびDisplacementYは、オブジェクトの初期位置からの変位量のx、y成分(ピクセル)を格納する。
【0175】
グラフィック操作命令生成器106の処理フローを、図41を参照しながら説明する。
【0176】
ステップCC1ではレジスタObjectCommandをゼロリセットする。ObjectCommandの値が0であることはボールを「自由落下」させる命令を表す。
【0177】
ステップCC2では、命令が空命令であるか特定の命令であるかを判断する。このことは、レジスタEVENTの値が0か否かを判断することによる。具体的には、0である場合、判断結果がYesとなり、グラフィック操作命令生成の処理を終了する。一方、0でない場合、判断結果がNoとなり、ステップCC3に進む。
【0178】
ステップCC3では、命令が接触であるか否かを判断する。このことは、EVENTに格納されている値が1か否かを判断することによる。具体的には、1である場合、判断結果がYesとなり、ステップCC4に進む。一方、1でない場合、判断結果がNoとなり、ステップCC5に進む。
【0179】
ステップCC4では、ステップ4では、レジスタObjectCommandに21を格納し、グラフィック操作命令生成器・ボールの処理を終了する。ObjectCommandの値21はボールと「接触した」ということを意味する命令を表す。
【0180】
ステップCC5では、切り替えであるか否かを判断する。このことは、EVENTに格納されている値が2か否かを判断することによる。具体的には、2である場合、判断結果がYesとなり、ステップ6に進む。一方、2でない場合、判断結果がNoとなり、ステップV7に進む。
【0181】
ステップCC6では、ObjectCommandに24を格納し、グラフィック操作命令生成器・ボールの処理を終了する。ObjectCommandの値24はボールと「離れた」ということを意味する命令を表す。
【0182】
ステップCC7ではボール操作命令生成ルーチンの処理を行い、終了後グラフィック操作命令生成・ボールの処理を終了する。
【0183】
前述のボール操作命令生成ルーチンの処理フローを、図42を参照しながら説明する。ステップDD1では、重なり重心の場所がユーザ領域の中であるか否かを判断する。このことは、レジスタIN_USERが1であるか否かを判定することによる。具体的には、1の場合、判断結果がYesとなり、ステップ2に進む。ステップDD2では、重なり重心の場所がオブジェクト領域の中であるか否かを判断する。このことは、レジスタIN_OBJECTが1であるか否かを判定することによる。具体的には、1の場合、判断結果がYesとなり、キャッチボール操作命令生成ルーチンの処理を終了する。一方、1でない場合、判断結果がNoとなり、ステップDD3に進む。ステップ3では、ObjectCommandに22を格納し、キャッチボール操作命令生成ルーチンの処理を終了する。ObjectCommandの値23はボールを「反射」という意味の命令を表す。
【0184】
一方、ステップDD1で、1でない場合、判断結果がNoとなり、ステップDD4に進む。ステップDD4では、レジスタObjectCommandに22を格納し、ボール操作命令生成ルーチンの処理を終了する。ObjectCommandの値22はボールを「持つ」という意味の命令を表す。
【0185】
グラフィック変換特徴量計算器12の処理フローを、図43を参照しながら説明する。ステップEE1では、命令が自由落であるか否かを判断する。このことは、レジスタObjectCommandが0であるか否かを判定することによる。具体的には、0の場合、判断結果がYesとなり、ステップEE2に進む。ステップEE2では、ボール軌道計算ルーチンの処理(後述)を行い、終了後、グラフィック変換特徴量の処理を終了する。
【0186】
一方、ステップEE1で、0でない場合、判断結果がNoとなり、ステップEE3に進む。ステップEE3では、命令が離れたか否かを判断する。このことは、ObjectCommandが24か否かを判定することによる。具体的には、24の場合、判断結果がYesとなり、ステップEE4に進む。一方、24でない場合、判断結果がNoとなり、ステップEE5に進む。ステップEE5では、命令が接触したか否かを判断する。このことは、ObjectCommandが21か否かを判定することによる。具体的には、21の場合、判断結果がYesとなり、ステップEE6に進む。一方、21でない場合、判断結果がNoとなり、ステップEE7に進む。ステップEE6では、ボール軌道計算ルーチンの処理(後述)を行ない、ステップEE8に進む。ステップEE7では、ボール変換特徴量計算ルーチンの処理(後述)を行い、終了後、ステップEE8に進む。ステップEE8では、レジスタPrvGravityX, PrvGravityYにそれぞれGravityX,GravityYを格納し、グラフィック変換特徴量計算器の処理を終了する。
【0187】
前述のボール軌道計算ルーチンの処理フローを、図44を参照しながら説明する。ステップ FF1では、レジスタDifferenceDisplacementXをDifferenceDisplacementX+DifferenceVelocityXに、DifferenceDisplacementYをDifferenceDisplacementX+DifferenceVelocityYに、DifferenceVelocityYをDifferenceVelocityY−1にそれぞれセットし、ボール軌道計算ルーチンの処理を終了する。
【0188】
前述のボール変換特徴量計算ルーチンの処理フローを、図45を参照しながら説明する。ステップ GG1では、命令が「持つ」か否かを判断する。このことは、レジスタObjectCommandに格納されている値が22か否かを判断することによる。具体的には、22である場合、判断結果がYesとなり、ステップGG2に進む。一方、22でない場合、判断結果はNoとなり、ステップGG3に進む。
【0189】
ステップGG2では、DifferenceDisplacementXをGravityX−PrvGravityXに、DifferenceDisplacementYをGravityY−PrvGravityYに、DifferenceVelocityXを得たDifferenceDisplacementXに、DifferenceVelocityYを得たDifferenceDisplacementYに、PrvObjectCommandをObjectCommandに、それぞれセットし、ボール変換特徴量計算ルーチンの処理を終了する。
【0190】
ステップGG3では、前フレームの命令が「持つ」だったか否かを判断する。このことは、レジスタPrvObjectCommandに格納されている値が22か否かを判断することによる。具体的には、22である場合、判断結果がYesとなり、ステップGG4に進む。一方、22でない場合、判断結果はNoとなり、ステップGG5に進む。
【0191】
ステップGG4ではボール軌道計算ルーチンの処理を行ない、ボール変換特徴量計算ルーチンの処理を終了する。
【0192】
ステップGG5では、速度の変化のベクトルδvとオブジェクトが1フレームで移動する量を表す速度ベクトルvを足し合わせて反射ベクトルv´を算出する(式8)。δvは式9を用いて算出する。
【数8】
【数9】
【0193】
ここで、nは、重なり重心からオブジェクトの中心に向かう単位ベクトルであり、仮想的な反射面の法線ベクトルを表わす。オブジェクトの重心Cから重なり重心Gに引く線の長さがオブジェクトの半径に近いときは、nは式10で近似できる。ここで式10のnはオブジェクトの中心座標Cと重なり重心の座標Gから成る。具体的には、vはx成分がVelocityX、y成分がVelocityYで表されており(式11)、Cはx成分がCenterX、y成分がCenterYで表されており(式2)。Gはx成分がGravityX、y成分がGravityYで表されており(式12)、式8により得た値の、x成分をDifferenceVelocityXに、y成分をDifferenceVelocityYに、DifferenceDisplacementXを得たDifferenceVelocityX+DifferenceDisplacementXに、DifferenceDisplacementYを得たDifferenceDisplacementY+DifferenceDisplacementYに、それぞれセットする。
【数10】
【数11】
【数12】
【0194】
それぞれの点とベクトルの関係を図47に示す。最後にボール変換特徴量計算イベントの処理を終了する。
【0195】
変換特徴量更新器13の処理フローを、図46を参照しながら説明する。ステップHH1では、DisplacementXにDisplacementX+DifferenceDisplacementXを、DisplacementYにDisplacementY+DifferenceDisplacementYを、CenterXにCenterX+DifferenceDisplacementXを、CenterYにCenterY+DifferenceDisplacementYを、VelocityXにDifferenceVelocityXを、VelocityYにDifferenceVelocityYを、それぞれセットし、特徴量更新器13の処理を終了する。これにより、変換特徴量がグラフィック操作命令生成器13で生成された変換を施した結果得られる、新しい値に更新される。
【0196】
上記実施形態3を用いれば、1つのオブジェクトに、3種類のイベントと、重なり重心のユーザ領域とオブジェクト領域への帰属4種類(ユーザ領域とオブジェクト領域、ユーザ領域、オブジェクト領域、それ以外)を組み合わせた12種類の条件を網羅するようにインタラクションを割り当てることができる。オブジェクトが中抜きの円盤の場合、3つの命令(反射、持つ、離す)を発行できる。「反射」が発行される条件は、イベントIntouchのときに重なり重心がオブジェクトのみに帰属することである(図48)。「持つ」が発行される条件は、イベントIntouchのときに重なり重心がオブジェクトのみに帰属することである(図49)。「離す」が発行される条件は、イベントIntouchのときに重なり重心がユーザとオブジェクト両方に帰属することである(図50)。それ以外では、オブジェクトの位置や回転角度を記録する等の命令を発行する。
【0197】
実施形態3では一般にオブジェクトの位置によりX、Yの2パラメータ、速度のVX、VYの2パラメータ、計4パラメータの指定が可能であって、オブジェクトの動きや位置を4つのパラメータで指定するようなゲームでの利用に適している。
【0198】
使用法は、実施形態1と同様である(図28)。
【0199】
次に、実施形態3を利用した実施例を説明する。
【0200】
実施例3−1では、ドッジボールソフトの制御システムに適用した。ディスプレイに表示されるボールオブジェクトを持つといった操作や、そのボールオブジェクトが反射するといった物理現象を模倣した実世界のようなドッジボールゲームを提供する。ドッジボールは、ユーザ映像は体全身で行うこと望ましい。
【図面の簡単な説明】
【0201】
【図1】本発明におけるインタフェース方法の一実施例の機能モジュールである。
【図2】本発明におけるハードウエア構成を示す図である。
【図3】本発明におけるメモリマップを示す図である。
【図4】本発明におけるライブ映像取得器の操作手順の一例を示すフローチャートである。
【図5】本発明におけるオブジェクト可触領域格納器の操作手順の一例を示すフローチャートである。
【図6】本発明におけるオブジェクト可視領域格納器の操作手順の一例を示すフローチャートである。
【図7】本発明におけるオブジェクト画像格納器の操作手順の一例を示すフローチャートである。
【図8】本発明における変換特徴量格納器の操作手順の一例を示すフローチャートである。
【図9】本発明におけるユーザ領域抽出機の操作手順の一例を示すフローチャートである。
【図10】本発明におけるオブジェクト可触領域加工器の操作手順の一例を示すフローチャートである。
【図11】本発明におけるオブジェクト可視領域加工器の操作手順の一例を示すフローチャートである。
【図12】本発明におけるオブジェクト画像加工器の操作手順の一例を示すフローチャートである。
【図13】本発明における重なり判定器の操作手順の一例を示すフローチャートである。
【図14】本発明における重心計算器の操作手順の一例を示すフローチャートである。
【図15】本発明における重心帰属分類器の操作手順の一例を示すフローチャートである。
【図16】本発明におけるイベント分類器の操作手順の一例を示すフローチャートである。
【図17】本発明における重なり履歴更新器の操作手順の一例を示すフローチャートである。
【図18】本発明におけるグラフィック操作命令生成器の操作手順の一例を示すフローチャートである。
【図19】本発明におけるダイアル操作命令生成ルーチンの操作手順の一例を示すフローチャートである。
【図20】本発明におけるグラフィック変換特徴量計算器の操作手順の一例を示すフローチャートである。
【図21】本発明におけるダイアル変換特徴量計算ルーチンの操作手順の一例を示すフローチャートである。
【図22】本発明における変換特徴量更新器の操作手順の一例を示すフローチャートである。
【図23】本発明における映像重ね合わせ器の操作手順の一例を示すフローチャートである。
【図24】本発明における外部機器用操作命令意味変換器の操作手順の一例を示すフローチャートである。
【図25】本発明における重なり重心がユーザ領域とオブジェクト領域と、の両方に帰属している一例を示す図である。
【図26】本発明におけるかなさり重心がオブジェクト領域のみに帰属している一例を示す図である。
【図27】本発明における連続した2フレームの重なり重心の、オブジェクトの回転中心からみた回転角度を示す図である。
【図28】本発明による実施例を使用している外観を示す図である。
【図29】本発明を扇風機の制御に適用したインタフェースの画面を示す図である。
【図30】本発明におけるグラフィック操作命令生成器の操作手順の一例を示すフローチャートである。
【図31】本発明におけるトグルスイッチオーバラップルーチンの操作手順の一例を示すフローチャートである。
【図32】本発明におけるトグルスイッチ操作命令生成ルーチンの操作手順の一例を示すフローチャートである。
【図33】本発明におけるグラフィック変換特徴量計算器の操作手順の一例を示すフローチャートである。
【図34】本発明におけるトグルスイッチ変換特徴量計算ルーチンの操作手順の一例を示すフローチャートである。
【図35】本発明における変換特徴量更新器の操作手順の一例を示すフローチャートである。
【図36】本発明における外部機器操作命令意味変換器の操作手順の一例を示すフローチャートである。
【図37】本発明における重なり重心がユーザ領域とオブジェクト領域のどちらにも帰属しない一例を示す図である。
【図38】本発明における重なり重心がオブジェクト領域のみに帰属している一例を示す図である。
【図39】本発明における重なり重心がオブジェクト領域のみに帰属している一例を示す図である。
【図40】本発明をファイルシステムに適用したインタフェースの様子を示す図である。
【図41】本発明におけるグラフィック操作命令生成器の操作手順の一例を示す図である。
【図42】本発明におけるボール操作命令生成ルーチンの操作手順の一例を示す図である。
【図43】本発明におけるグラフィック変換特徴量計算器の操作手順の一例を示す図である。
【図44】本発明におけるボール軌道計算ルーチンの操作手順の一例を示す図である。
【図45】本発明におけるボール特徴量計算ルーチンの操作手順の一例を示す図である。
【図46】本発明における変換特徴量更新器の操作手順の一例を示す図である。
【図47】本発明におけるボールが反射する場合のオブジェクトに関わるベクトルと点を示す図である。
【図48】本発明における重なり重心がユーザ領域のみに帰属している一例を示す図である。
【図49】本発明における重なり重心がオブジェクト領域のみに帰属している一例を示す図である。
【図50】本発明における重なり重心がユーザ領域とオブジェクト領域と、の両方に帰属している一例を示す図である。
【特許請求の範囲】
【請求項1】
ユーザを撮影しライブ映像を取得する撮影手段と、該ライブ映像から背景差分法よりユーザ領域を抽出するユーザ領域抽出手段と、1つまたは複数のオブジェクト画像と該オブジェクト画像の領域を表すオブジェクト領域を提供するオブジェクト提供手段と、該ユーザ領域と該オブジェクト領域と、が同じピクセル座標のピクセルを持つか否かを表す重なり判定データを作り出す重なり判定手段と、該ユーザ領域と該オブジェクト領域と、の重なり領域の重心である重なり重心を算出する重心計算手段と、該重なり重心から、該オブジェクト画像および該オブジェクト領域の、移動の向きと大きさ、または回転の中心と角度と、を表す特徴量を算出する特徴量計算手段と、該特徴量によって該オブジェクト画像および該オブジェクト領域を移動または回転させるオブジェクト加工手段と、該ライブ映像のうち該ユーザ領域に含まれるピクセルにより上書きされた、該オブジェクト画像のうち該オブジェクト領域に含まれるピクセルである合成映像を作り出す映像重ね合わせ手段と、該合成映像を表示する表示手段と、を備え、ユーザによってオブジェクトを操作するインタフェース方法において、
該重なり重心の位置と該ユーザ領域と該オブジェクト領域から、該重なり重心が該ユーザ領域と該オブジェクト領域の両方にあるか、該ユーザ領域だけにあるか、該オブジェクト領域だけにあるか、どちらにもないか、のいずれの場合かを分類した重心帰属データを作り出す重心帰属分類手段と、過去の該重なり判断データである重なり履歴情報を格納する重なり履歴格納手段と、該重なり履歴情報と該重なり判定データから、該重なり履歴情報と該重なり判定データの両方が重なっているという判定か、該重なり履歴情報だけが重なっているという判定か、該可な重なり判定データだけが重なっているという判定か、どちらも重なっていないという判定か、のいずれの場合かを分類したイベントを作り出すイベント分類手段と、該イベントと該帰属判断データから移動および回転するという命令種類である操作命令信号を作り、該操作命令信号に該特徴量を割り当てる操作命令生成手段と、を備えたことを特徴とするインタフェース方法。
【請求項2】
前記操作命令および前記特徴量を、外部機器の命令および指示値に変換する外部機器用命令意味変換手段を備えることを特徴とする請求項1および請求項2のグラフィック特徴量計算機。
【請求項3】
前記外部機器はコンピュータであり、該コンピュータのソフトウエアとインタラクションすることを特徴とする請求項3のグラフィック特徴量計算機。
【請求項1】
ユーザを撮影しライブ映像を取得する撮影手段と、該ライブ映像から背景差分法よりユーザ領域を抽出するユーザ領域抽出手段と、1つまたは複数のオブジェクト画像と該オブジェクト画像の領域を表すオブジェクト領域を提供するオブジェクト提供手段と、該ユーザ領域と該オブジェクト領域と、が同じピクセル座標のピクセルを持つか否かを表す重なり判定データを作り出す重なり判定手段と、該ユーザ領域と該オブジェクト領域と、の重なり領域の重心である重なり重心を算出する重心計算手段と、該重なり重心から、該オブジェクト画像および該オブジェクト領域の、移動の向きと大きさ、または回転の中心と角度と、を表す特徴量を算出する特徴量計算手段と、該特徴量によって該オブジェクト画像および該オブジェクト領域を移動または回転させるオブジェクト加工手段と、該ライブ映像のうち該ユーザ領域に含まれるピクセルにより上書きされた、該オブジェクト画像のうち該オブジェクト領域に含まれるピクセルである合成映像を作り出す映像重ね合わせ手段と、該合成映像を表示する表示手段と、を備え、ユーザによってオブジェクトを操作するインタフェース方法において、
該重なり重心の位置と該ユーザ領域と該オブジェクト領域から、該重なり重心が該ユーザ領域と該オブジェクト領域の両方にあるか、該ユーザ領域だけにあるか、該オブジェクト領域だけにあるか、どちらにもないか、のいずれの場合かを分類した重心帰属データを作り出す重心帰属分類手段と、過去の該重なり判断データである重なり履歴情報を格納する重なり履歴格納手段と、該重なり履歴情報と該重なり判定データから、該重なり履歴情報と該重なり判定データの両方が重なっているという判定か、該重なり履歴情報だけが重なっているという判定か、該可な重なり判定データだけが重なっているという判定か、どちらも重なっていないという判定か、のいずれの場合かを分類したイベントを作り出すイベント分類手段と、該イベントと該帰属判断データから移動および回転するという命令種類である操作命令信号を作り、該操作命令信号に該特徴量を割り当てる操作命令生成手段と、を備えたことを特徴とするインタフェース方法。
【請求項2】
前記操作命令および前記特徴量を、外部機器の命令および指示値に変換する外部機器用命令意味変換手段を備えることを特徴とする請求項1および請求項2のグラフィック特徴量計算機。
【請求項3】
前記外部機器はコンピュータであり、該コンピュータのソフトウエアとインタラクションすることを特徴とする請求項3のグラフィック特徴量計算機。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【図34】
【図35】
【図36】
【図37】
【図38】
【図39】
【図40】
【図41】
【図42】
【図43】
【図44】
【図45】
【図46】
【図47】
【図48】
【図49】
【図50】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【図34】
【図35】
【図36】
【図37】
【図38】
【図39】
【図40】
【図41】
【図42】
【図43】
【図44】
【図45】
【図46】
【図47】
【図48】
【図49】
【図50】
【公開番号】特開2012−14550(P2012−14550A)
【公開日】平成24年1月19日(2012.1.19)
【国際特許分類】
【出願番号】特願2010−151751(P2010−151751)
【出願日】平成22年7月2日(2010.7.2)
【出願人】(504275834)
【Fターム(参考)】
【公開日】平成24年1月19日(2012.1.19)
【国際特許分類】
【出願日】平成22年7月2日(2010.7.2)
【出願人】(504275834)
【Fターム(参考)】
[ Back to top ]