(58)【調査した分野】(Int.Cl.,DB名)
第1の方向のジェスチャに対応する複数の制御信号を連続的に入力するために連続往復運動に応じてジェスチャ入力を検知する方法であって、前記連続往復運動が第1の方向のジェスチャと第2の方向のジェスチャのみを含み、各々のジェスチャが検知装置によって認識できて、異なる制御信号が出力され、前記連続往復運動は前記第1の方向のジェスチャで始まる、方法において、
2つの方向のジェスチャのうちの前記第1の方向のジェスチャで始まる前記連続往復運動を受信することであって、前記第1の方向のジェスチャと前記第2の方向のジェスチャは交互に生じる、前記受信することと、
前記連続往復運動についての反転点を特定することと、
前記反転点を用いて、前記連続往復運動を、各々が前記2つの方向のジェスチャのうちの一方に対応する少なくとも2つの部分運動に分割することと、
前記第1の方向のジェスチャに対応する複数の制御信号であって、前記連続往復運動内に含まれている前記第1の方向のジェスチャの数に等しい回数で、前記第1の方向のジェスチャに対応する前記複数の制御信号、を出力することと、
を含む、前記方法。
第1の方向のジェスチャに対応する複数の制御信号を連続的に入力するために連続往復運動に応じてジェスチャ入力を検知する装置であって、前記連続往復運動が第1の方向のジェスチャと第2の方向のジェスチャのみを含み、各々のジェスチャが認識できて、異なる制御信号が出力され、前記連続往復運動は前記第1の方向のジェスチャで始まる、装置において、
交互に生じる前記第1の方向のジェスチャと前記第2の方向のジェスチャである2つの方向のジェスチャのうちの前記第1の方向のジェスチャで始まる前記連続往復運動を捕捉する捕捉モジュールと、
前記連続往復運動についての反転点を特定し、前記反転点を用いて、前記連続往復運動を、各々が前記2つの方向のジェスチャのうちの一方に対応する少なくとも2つの部分運動に分割し、前記第1の方向のジェスチャに対応する複数の制御信号であって、前記捕捉された連続往復運動に基づいて、前記連続往復運動内に含まれている前記第1の方向のジェスチャの数に等しい回数で、前記第1の方向のジェスチャに対応する、前記複数の制御信号を出力する処理モジュールと、
を備えた、前記装置。
【発明を実施するための形態】
【0009】
本発明の一実施形態を、図面と合わせて、詳細に説明する。以下の説明において、周知の機能と構成の一部の詳しい説明は、明瞭さと簡潔さのために、省略する場合がある。
【0010】
本発明の目的は、連続往復手運動によって重複命令を与える容易な方法を提供することである。この連続往復運動は、装置によって、1組の連続した各部分運動(sub movements)として認識でき、任意の連続した2つの部分運動は互いに反対の向きを有している。連続往復運動の結果として得られる各命令のタイプは、その1組の連続した各部分運動のうちの最初の部分運動によって決まり、また、結果として得られる各命令の数は、その1組内の最初の部分運動と同じ向きを有する各部分運動(最初の部分運動も含む)の数と同じになる。
【0011】
以下、本発明の一実施形態に従う詳細な例を説明する。当該システムは、ジェスチャ入力の連続した各映像を捕捉するために使用されるカメラと、該カメラに接続している処理装置とを備えている。この処理装置は、連続した各映像を用いて、これらに対応する各命令を生成する。本実施形態において、ジェスチャ認識についての基本的なジェスチャの軌跡は、実質的に直線に等しい(実際のジェスチャの動きは、真直ぐな線にはならない)。この例では、水平方向のハンド・ウェーブ(手による波形)ジェスチャを用いて本発明の原理を例示する。しかしながら、本発明の原理は、その他の連続往復運動、例えば、垂直方向のハンド・ウェーブ運動、斜めのハンド・ウェーブ運動、及び、深度検出可能なカメラの前で手を伸ばして引っ込める運動等にも適用できる。
【0012】
ジェスチャ認識技術は画像処理に関し、従って、ジェスチャ認識は、リアル・タイムの各画像フレームに基づいてリアル・タイムで行うことが出来、あるいはは、リアル・タイムで行わない、すなわち、カメラで1組の画像フレームを捕捉し、そして、その1組の画像フレームを分析することも出来る。
【0013】
実際、全ての静的ジェスチャ認識(状態認識)は、リアル・タイムの各画像フレームに基づいてリアル・タイムで行うことが出来る。例えば、勝利サインの状態を検知する場合、当該装置は、当該状態が、勝利サインであると、あるいは、手の形状の凸形輪郭の分析結果に基づいていないと、判断するだけでよい。動的ジェスチャ認識では、当該装置は、1組の画像フレームを捕捉し、各々のフレームにおける手の図心(重心)を見出し、そして、この一連の手の図心により形成された曲線の分析後に、どのようなジェスチャであるかを判断する必要がある。
【0014】
図2は本発明の一実施形態に従う1つのハンド・ウェーブの軌跡を示す図であり、
図2Aは右方向の手の動きを示し、
図2Bは左方向の手の動きを示している。この例において、カメラは左上の座標系であると仮定する。尚、ジェスチャ認識において、均質な曲線(あるいは、実質的に真直ぐな線)は存在しない。各々のフレームにおける手についての重心が、曲線上の点に等しい。従って、何れかの向きの動き、例えば、左方向の手の動きについての全ての画像フレームについて、一連の連続した点を示す場合、説明の便宜上、これらの全ての点を連結する線を使用することにする。離散した点の数は、フレームの捕捉率によって決まる。
【0015】
図3は、本発明の実施形態に従う、2つの隣接した画像フレームに対応する2つの点を示す図である。点Aは2つの画像フレームのうちの前のフレームに対応しており、点Bは2つの画像フレームのうちの後のフレームに対応している。ここでは、点Aを直前位置点と呼び、点Bを現在位置点と呼ぶことにする。
【0016】
この例では、上、下、左、及び、右を含む4つの動きの向きを使用する。
図3が示すように、点Bは、点Aの右に位置している。これは、両点が同じ座標系における各座標値を有するので、当該装置によって容易に決定できる。
【0017】
本実施形態においては、2つのデータ・アレイを用いて手の軌跡を記憶して、ユーザのジェスチャの分析を行う。もし動き動向が、例えば
図2Aに示されているように、反転しないならば、手の軌跡のデータは第1のアレイに記憶される。動き動向の反転の検知後に、手の軌跡のデータが、動き動向の反転の故に、第2のアレイに記憶され、次に、第1のアレイ内のデータによって、どのようなジェスチャが生じたかが判定されて、それに対応する命令が出力される。更に、反転閾値と4つの向きカウンタとを用いて、反転動作の発生が判定される。ユーザの連続したジェスチャ、例えば水平方向のハンド・ウェーブは、ある特定の規則性を有している。例えば、人が手を振る動作をしている場合、もしそれが左向きの振りならば、それは、先ず、ある距離だけ左向きに動き、次に、ある距離だけ右向きに動き、それが数回繰り返される筈である。また、もしそれが右向きの振りならば、同様に、それは、先ず、ある距離だけ右向きに動き、次に、ある距離だけ左向きに動き、それが数回繰り返される筈である。従って、先行する部分ジェスチャ(sub-gesture)に基づいて向きカウンタを選択できる。尚、本実施形態においては、第1のアレイのデータが、ジェスチャの判定基準として、使用される。
【0018】
以下、本発明の実施形態に従って、手の動きから生成された複数の位置点のうちの1つの位置点について実行される各処理ステップを説明する。
【0019】
ステップ1: 連続ジェスチャ入力期間中のある時点において、当該装置は、直前位置点の各座標値と現在位置点の各座標値とを特定する。擬似コードを以下に示す。
「Last position x coordinates (old_x) = (hand trace trend reverse happened) ? got last stored data in second array (pPointBuf1.x) : got last stored data in first array (pPointBuf0.x);
Last position y coordinates (old_y) = (hand trace trend reverse happened) ? got last stored data in second array (pPointBuf1.y) : got last stored data in first array (pPointBuf0.y);
Current position x coordinates (cur_x) = got hand x coordinate in current frame;
Current position y coordinates (cur_y) = got hand y coordinate in current frame;」
【0020】
上記の擬似コードから分かるように、当該時点に対応する現在のフレームを用いて、現在位置点の各座標値が特定される。当該時点の直前の画像フレームに対応する直前位置点については、当該装置は、先ず、動き動向の反転が生じているかを判定する必要がある。もし生じているならば、第2のアレイにおけるデータを用いて、直前位置点の各座標値が特定される。もし生じていないならば、第1のアレイにおけるデータを用いて、直前位置点の各座標値が特定される。
【0021】
ステップ2: 手の動きの動き動向を判定する4つの向きカウンタは、現在位置点と直前位置点との位置関係に基づいて、更新される。この実施形態においては、4つの向きカウンタによって、それぞれ、上向き、下向き、左向き、及び、右向きを記録する。しかしながら、別の一実施形態に従えば、もし垂直方向のハンド・ジェスチャが当該装置において規定されていないならば、上向きカウンタと下向きカウンタとは、不要となる。
【0022】
互いに反対の向きに対応する2つの向きカウンタは、1つのグループにおいて機能する。例えば、もし直前位置点に対する現在位置点の所在が左向きならば、左向きカウンタが1加算され、そして、同時に、もし右向きカウンタがゼロでないならば、このカウンタは、1減算される。そして、同じ原理が、上向きカウンタと下向きカウンタにも適用される。X軸の値に基づいて左向きと右向きの各カウンタ(orientation_l,orientation_r)を判定する関連擬似コードを以下に示す。同様の原理がY軸の値に基づく上向きと下向きの各カウンタにも適用できる。
If(cur_x > old_x) {//x-axis coordinates of current position is bigger than last position
orientation_r++;// RIGHT orientation counter increase one
If (orientation_l > 0) {// LEFT orientation counter bigger than zero
Orientation_l--;
} else {
Orientation_l = 0;
}
}
If(cur_x < old_x) {//x axis coordinates of current position is smaller than last position
orientation_l++;// LEFT orientation counter increase one
If (orientation_r > 0) {// RIGHT orientation counter bigger than zero
Orientation_r--;
} else {
Orientation_r = 0;
}
}
【0023】
図4は、本実施形態に従う、最初からの手の軌跡を示す図である。
図4から分かるように、反転点の前に14個の点がある(反転点を特定する方法は後で説明する)。反転点は、反転ジェスチャの開始点と見なせる。従って、反転点の前の点、すなわち、最も右側の点に於けるOrientation_lとOrientation_rについての上記の操作方法(この例では、上向きと下向きの各カウンタについての操作方法は省略する)に従えば、Orientation_lは0であり、Orientation_rは13である。反転点に移動した場合(cur_X<old_X)、Orientation_lは1加算されて1になり、Orientation_rは1減算されて12になる。
【0024】
ステップ3: 当該装置は、ジェスチャ入力の際に画像フレームを捕捉する毎に、動き動向が反転しているか否かを判定する。当該装置は、ジェスチャ入力の際に、ジェスチャをある捕捉率で1組の画像フレームとして捕捉する。当該装置は、画像フレーム毎に、先ず、画像フレーム内のユーザの手の位置点を特定し、該位置点とその直前の位置点とを用いて、該当する各向きカウンタを更新する。当該装置は、各向きカウンタを更新した後、これらの向きカウンタと向き閾値とを用いて、動き動向の反転が生じているか否かを判定する。向き閾値は、前もって決定された値であり、この例では6に設定されている。動き動向が反転しているか否かを判定するための擬似コードを以下に示す。ここでは、1組の部分ジェスチャ向きインジケータ、すなわち、gesture_l、gesture_r、gesture_uとgesture_dを用いて、連続したジェスチャ入力、あるいは、連続した手の往復運動における最終ジェスチャのジェスチャ向きを記録する。ユーザが連続したジェスチャを入力する前に、これらのパラメータは、偽に設定される。そして、当該装置が連続したジェスチャ入力における最初の部分ジェスチャを検知した後、それに対応するパラメータが真に設定される。
【0025】
最初の部分ジェスチャが検知される前に、4つのカウンタのうちの最大値のカウンタを選択して向き閾値と比較する。もし最大値のカウンタが向き閾値より大きく、そして、最大値のカウンタと反対の向きを有する向きカウンタが1に等しければ、反転が生じていると判定され、最初の部分ジェスチャの反対の向きに対応する部分ジェスチャ向きインジケータが真に設定される。別の実施形態に従えば、4つの値の選択肢を有する1つのインジケータを用いて4つの真偽インジケータと置き換えることが出来る。
If (~(gesture_l | gesture_r | gesture_u | gesture_d)) {//four orientation trajectory reversal does not happened
Got the maximum orientation counter;
If (the maximum orientation counter > THRESHOLD && the opposite orientation counter == 1) {
reverse = true;// Trajectory reversal happened
}
}
【0026】
更に
図4を用いて例示する。最も右側の点において、Orientation_lは0であり、Orientation_rは13である。最大値のカウンタとしてのOrientation_rは向き閾値6より大きいが、反対の向きカウンタ、すなわち、Orientation_lは0である。従って、反転が生じていないと判定される。しかしながら、反転点においては、両条件が満たされる。従って、反転が生じていることが当該装置によって判定され得る。
【0027】
最初の部分ジェスチャの各向きインジケータの後の反転の判定について、当該装置は、次の2つの条件、すなわち、1)最後の部分ジェスチャの向きインジケータと同じ向きの向きカウンタが閾値を超えているという条件と、2)最後の部分ジェスチャの向きインジケータと反対の向きの向きカウンタが1に等しいという条件と、が満たされているか否かを判定する。これらの両方が満たされている場合、反転が生じていると判定される。これによって、計算の複雑性が低減される。gesture_lが得られた後の反転の判定についての擬似コードを以下に示す。その他の向きインジケータについての擬似コードも同様である。
If (gesture_l) { //last gesture is LEFT
If((orientation_l > THRESHOLD) && (orientation_r == 1)) {
Reverse = true;
}
}
【0028】
反転が見出される前に、データは、第1のアレイpPointBuf0に記憶される。最初の反転が生じると、pPointBuf0に於けるデータを用いて当該ジェスチャが解釈されて、当該ジェスチャの意味を示す信号が出力される。この時、pPointBuf0における全ての点について、互いに隣接する2点のみを使用して、あるいは、向きカウンタの数値のみに基づいて、何のジェスチャであるかを判定することは出来ない。もしそのようにして判定するならば、エラーが生じることがある。
図5は、このような状況を示している。ユーザが右向きの部分ジェスチャを行っている場合、下向きの運動を伴うこともあり、反転点において、下向きカウンタが右向きカウンタより大きくても、この部分ジェスチャを下向きのジェスチャとして特定できない。このジェスチャを全体的に観察した場合、右向きの移動距離が下向きの移動距離より遥かに大きいことは明らかであり、この部分ジェスチャは右向きのジェスチャであると判定されるべきである。最初の反転が生じた後、データは第2のアレイpPointBuf1に記憶される。そして、対応する向きカウンタを用いて、2番目の反転の発生が特定される。尚、この例では、pPointBuf1のデータを用いてはジェスチャを判定しない。pPointBuf1におけるデータは、2番目の反転、4番目の反転、6番目の反転等の発生を特定することのみに使用される。各ジェスチャの動きが往復運動であるので、第1のアレイが、最初の部分ジェスチャの動きと同じ向きを有する各部分ジェスチャの動きのデータを記憶するために使用されること、及び、第2のアレイが、最初の部分ジェスチャの動きと反対の向きを有する各部分ジェスチャの動きのデータを記憶するために使用されることは容易に理解できる。3番目の反転、5番目の反転、7番目の反転等の判定は、最初の反転の判定と同様である。そして、4番目の反転、6番目の反転、8番目の反転等の判定は、2番目の反転の判定と同様である。開始点と停止点とのx軸及びy軸の各座標の差分を用いて何のジェスチャが起きたかを判定する(もう1つの方法は、ジェスチャの軌跡のx軸及びy軸の振幅比を用いてどのような種類のジェスチャであるかを判定する)。
【0029】
以下の擬似コードは、何のジェスチャが起きたかを判定する仕方を示している。
Function calcAction() :
If (nPointBufLength > 0) {// length of data array bigger than zero
nDiffx = pPointBuf0[nPointBufLength-1].x ‐ pPointBuf0[0].x;//Got the difference of x-axis nDiffx;
nDiffy = pPointBuf0[nPointBufLength-1].y ‐ pPointBuf0[0].y;//Got the difference of y-axis nDiffy;
If (abs(nDiffx) > abs(nDiffy))
If(nDiffx < 0) LEFT gesture occurred;
Else RIGHT gesture occurred;
} else {
If(nDiffy < 0) DOWN gesture occurred;
Else UP gesture occurred;
}
Return gesture;
【0030】
上記から分かるように、nDiffxとnDiffyとの各絶対値を比較して、水平方向の動きと垂直方向の動きとの間で、どのような主要な動きが生じているかを判定する。その理由は、ユーザの手の動きが、正確な水平方向の動き、あるいは、正確な垂直方向の動きには成り得ないからである。水平方向の動きを行おうとする際に、垂直方向における差分は不可避ではあるけれども、水平方向に於ける差分の絶対値は、垂直方向における差分の絶対値よりも大きくなるはずである。水平方向の動きとして判定されると、nDiffxを用いて、左向きジェスチャと右向きジェスチャのうち、どちらのジェスチャであるかが判定される。
【0031】
以下の擬似コードは、最初の反転が生じた後にどのような処理を行うかを示している。
If reversal occurred (reversal) {
Call calcAction;
Clear all four orientation counter;
gesture_l = LEFT gesture happened;
gesture_r = RIGHT gesture happened;
gesture_u = UP gesture happened;
gesture_d = DOWN gesture happened;
Set pPointBuf0 length to zero;
Push current data into pPointBuf1;
Set pPointBuf1 length to one;
} else {
Push data in pPointBuf0;
PointBufLength0++;// Increase the length of pPointBuf0
}
【0032】
以下の擬似コードは、2番目の反転が生じた後にどのような処理を行うかを示している。
If(reverse) {//after the first reversal occurs, bool variable reverse set to true
Got the four orientation counter;
Got the maximum orientation counter;
If (the maximum orientation counter > THRESHOLD && the related exclusive orientation counter == 1) {
reverse =false;// second trajectory reversal happened, after the second reversal occurs, bool variable reverse set to false
}
If(!reserve) {
Clear four orientation counters;
Push current point in pPointBuf0[0];
PointBufLength0 = 1;
} else {
Push current point in pPointBuf1;
PointBufLength1++;// Increase the length of pPointBuf1
}
}
【0033】
手の往復運動が停止した後(手が空中に一定時間、例えば、2秒間留まった後、あるいは、特別な状態を用いて停止を示した後、あるいは、ユーザが素早く手を引いた後)、もし第1のアレイpPointBuf0に於ける有効データの数値がある閾値(通常、少なくとも3、さもなければジェスチャの軌跡が短すぎて無視され得る)より大きければ、このデータを用いて何のジェスチャが生じているかを判定する。以下の擬似コードは、1つの連続したジェスチャが停止した後にどのような処理を行うかを示している。
If(gesture_stop) {
If(PointBufLength0 > 2) {
Call calcAction;
}
Clear all four orientation counter;
Set all gesture orientation indicators to false;
PointBufLength0 = 0;
PointBufLength1 = 0;
}
【0034】
図6は、本実施形態に従う、連続した往復運動から各ジェスチャ入力を検知する方法を表すフローチャートである。ここで、連続した往復運動は、2つのタイプの装置認識可能ジェスチャから成り、各々のジェスチャは、数回、生じる。
【0035】
ステップ601: 当該装置は、カメラを用いて連続した往復運動を捕捉することによってその運動を受信して、一連の画像フレームの結果を出力する。尚、ステップ601には、少なくとも2つのケース、すなわち、1)当該装置が、当該運動が終了するまで、当該運動を捕捉し続けて、捕捉モジュールが一連の画像フレームを出力するケースと、2)捕捉モジュールが、当該運動の期間中に、画像の捕捉に直ぐに応答して画像フレームを出力するケースとが含まれる。
【0036】
ステップ602: 当該装置が、一連の画像フレームを用いて少なくとも1つの反転点を特定する。具体的に述べると、このステップには、一連の座標値を得る為に、画像フレーム毎に、手の位置に対応する座標値を特定するステップ6021が更に含まれている。この座標値の特定については、例えば、捕捉されたRGB画像をHSV色空間に変換して、肌色に基づく背景減算を行える。もし必要であれば、何らかのモフォロジック(形態学的)処理を行って、手の輪郭を見出すことが出来る。この輪郭の重心(すなわち図心)が、このフレームについての手の位置に対応する座標値になる。更に、ステップ6022において、上述のステップ1からステップ3を用いて、一連の座標値に基づいて、反転点を特定する。
【0037】
ステップ603: 当該装置が、特定された反転点に基づいて、連続往復運動を各部分運動に分割する。反転点が特定され、そして、一連の画像フレームが連続往復運動に対応しているので、各部分運動が一連の画像フレーム内の反転点によって分離され、反転点が最初の部分運動以外のあらゆる部分運動についての開始点になる。なお、分割された全ての部分運動は、認識可能なジェスチャである。
【0038】
ステップ604: 当該装置が、各分割された部分運動に基づいて、少なくとも1つの信号を出力する。具体的に述べると、当該装置は、まず、最初の部分運動を含み、そして、最初の部分運動と同じ向きを有する各部分運動の数を特定し、次に、認識可能な最初の部分運動に対応する意味を有し、そして、数が最初の部分運動と同じ向きを有する各部分運動の数に等しい各信号を出力する。
【0039】
尚、当該装置が各画像フレームをリアル・タイムで処理する、すなわち、ステップ601において述べたケース2に対応する如く処理を行う場合、当該装置は、各々の画像フレームの入力に応じて、最初の反転点を見出すことによって、最初の部分運動を特定し、その最初の部分運動に対応する信号を出力する必要がある。最初の部分運動を特定した後、当該装置は、各々の画像フレームの入力に応じて、2番目の反転点、3番目の反転点、4番目の反転点等を順次見出すことによって、2番目の部分運動、3番目の部分運動、4番目の部分運動等を特定し、その2番目の部分運動、3番目の部分運動、4番目の部分運動等を最初の部分運動とそれぞれ個別に比較して、それらが同じタイプのジェスチャであるかを判定し、もしそれらが同じタイプのジェスチャであるならば、当該装置は、最初の部分運動と同じ信号を出力する。
【0040】
別の実施形態に従えば、連続往復運動であるがゆえに、2番目の部分運動、4番目の部分運動、6番目の部分運動等を比較することは不要である。従って、当該装置は、最初の部分運動、3番目の部分運動、5番目の部分運動を特定するだけでよい。勿論、当該装置が、連続往復運動を部分運動に分割するために、全ての反転点を特定する必要はある。3番目の部分運動、5番目の部分運動等を得た後、当該装置は、それらを最初の部分運動と比較して、各々の肯定の比較結果の後、最初の部分運動に対応する信号を出力する。更に、往復運動であるがゆえに、奇数番目の各部分運動を比較することは必要でない場合もある。その代わりに、当該装置は、最初の反転点から1つおきの各反転点において、最初の部分運動に対応する信号を出力する。
【0041】
図7は、ユーザ入力を検知する装置を示すブロック図である。
図7から分かるように、連続往復運動に応じて各ジェスチャ入力を検知する装置が提供される。この連続往復運動は、2つのタイプの認識可能なジェスチャ、すなわち、第1のタイプのジェスチャ(例えば、左向きに動く)と第2のタイプのジェスチャ(例えば、右向きに動く)とから構成される。また、各々のジェスチャは認識でき、その認識の結果、異なる制御信号が出力される。当該装置は、交互に生じる第1のタイプのジェスチャと第2のタイプのジェスチャである2つのタイプのジェスチャのうちの第1のタイプのジェスチャから始まる連続往復運動を捕捉する捕捉モジュールと、捕捉された連続往復運動に基づいて、この連続往復運動内に含まれている第1のタイプの各ジェスチャの数に等しい回数で、第1のタイプのジェスチャに対応する制御信号を出力する処理モジュールと、を備えている。
【0042】
更に、処理モジュールは、連続往復運動についての反転点を特定するように構成されている。
【0043】
更に、処理モジュールは、各反転点を用いて、連続往復運動を、各々が2つのタイプのジェスチャのうちの一方に対応する少なくとも2つの部分運動に分割し、部分運動毎に、それを最初の部分運動と比較し、その比較される部分運動が最初の部分運動と同じタイプであるという判定に応じて、第1のタイプのジェスチャに対応する制御信号を出力するように構成されている。
【0044】
更に、処理モジュールは、各々の奇数番目の反転点に応答して、第1のタイプのジェスチャに対応する制御信号を出力するように構成されている。
【0045】
以上、幾つかの実施形態を説明した。しかしながら、種々の修正を行うことが出来る。例えば、相異なる各実施形態の各要素を、組み合わせる、補足する、修正する、あるいは、削除することによって、別の実施形態を実現できる。更に、当業者であれば、その他の各構成と各処理とを用いて、ここに開示されたものと置き換えてもよく、その結果得られる各実施形態は、少なくとも実質的に同じ機能で、かつ、少なくとも実質的に同じやり方で実現され、ここに開示された各実施形態と少なくとも実質的に同じ結果が得られる。従って、これらの各実施形態とその他の各実施形態は、本発明の権利範囲に入る。