操作判定装置、指先検出装置、操作判定方法、指先検出方法、操作判定プログラム、及び、指先検出プログラム
【課題】ユーザにとって容易なジェスチャにより、クリック操作が行なわれたと判定する操作判定装置を提供する。
【解決手段】指先50が大体静止した状態になった場合に、最新の指先50を中心とした矩形範囲52を設定する(S2000)。最新の指先50から一定距離内に過去所定数分の指先50が存在する場合に、指先50が大体静止した状態であると判断される。矩形範囲52の設定から一定時間TC以内に、矩形範囲52から指先50が消失し、矩形範囲52に指先50が存在しない状態になり(S2002)、そして、再び、矩形範囲52に指先50が出現し、矩形範囲52に指先50が存在する状態になった時に(S2004)、シングルクリックが行なわれたとみなす。
【解決手段】指先50が大体静止した状態になった場合に、最新の指先50を中心とした矩形範囲52を設定する(S2000)。最新の指先50から一定距離内に過去所定数分の指先50が存在する場合に、指先50が大体静止した状態であると判断される。矩形範囲52の設定から一定時間TC以内に、矩形範囲52から指先50が消失し、矩形範囲52に指先50が存在しない状態になり(S2002)、そして、再び、矩形範囲52に指先50が出現し、矩形範囲52に指先50が存在する状態になった時に(S2004)、シングルクリックが行なわれたとみなす。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ジェスチャにより非接触で機器を操作する際に、クリック操作が行なわれたか否かを判定する操作判定装置及びその関連技術に関する。
【0002】
また、本発明は、ジェスチャにより非接触で機器を操作する際に、擬似的にボタン操作が行なわれたか否かを判定する操作判定装置及びその関連技術に関する。
【0003】
さらに、本発明は、人の手を撮像して、撮像画像から指先を検出する指先検出装置及びその関連技術に関する。
【背景技術】
【0004】
特許文献1のカーソル操作装置は、カメラにより三次元空間中のユーザのジェスチャを検出して、非接触で機器を操作するためのカーソルを制御する。つまり、このカーソル操作装置は、画面を指し示す指先を検出し、その指先の位置に対応する画面上の位置にカーソルを表示する。そして、カーソル操作装置は、画面に表示されたボタンの上にカーソルが一定時間滞在すると、クリック操作がなされたと判断し、そのボタンが押下されたとみなす。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2004−258837
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、ユーザは、クリック操作のために、指先を一定時間静止させなければならず、それを三次元空間中で行なうのは、困難な場合も多い。
【0007】
また、カメラによる画像の精度でしか、指先の位置を求めることができない。従って、カメラの画像が低解像度で、カーソルを表示する画面が高解像度である場合、カーソルを滑らかに動かすことができず、不連続な動きになる。
【0008】
そこで、本発明は、ユーザにとって容易なジェスチャにより、クリック操作が行なわれたと判定する操作判定装置及びその関連技術を提供することを目的とする。
【0009】
本発明の他の目的は、ユーザにとって容易なジェスチャにより、擬似的にボタン操作が行なわれたと判定する操作判定装置及びその関連技術を提供することである。
【0010】
本発明のさらに他の目的は、人の指を撮影して得られた低解像度の画像から、高精度で指先の位置を検出することができ、かつ、記憶容量の削減と処理の高速化を図ることができる指先検出装置及びその関連技術を提供することである。
【課題を解決するための手段】
【0011】
本発明の第1の観点によれば、操作判定装置は、三次元空間中で動かされるユーザの手を撮影する撮影手段と、撮影により得られた画像から、前記ユーザの指先に相当する部分を検出する検出手段と、検出された前記指先に相当する部分を含む所定範囲を設定する設定手段と、前記設定手段が、前記所定範囲を設定した後、前記指先に相当する部分が消失したか否かを判断する第1判断手段と、前記第1判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断した後、前記指先に相当する部分が前記所定範囲に出現したか否かを判断する第2判断手段と、前記第2判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断した場合に、クリック操作が行なわれたと判定する判定手段と、を備える。
【0012】
この構成によれば、ユーザは、三次元空間中で、1本指を立てた状態から、その指を折って、再び、元の立てた状態に戻すというジェスチャを行なうだけで、非接触のクリック操作を行なうことができる。このように、ユーザにとって容易なジェスチャにより、クリック操作を行なうことができる。
【0013】
このような人のジェスチャでは、指が曲げられた後、指先が、ほぼ元の位置に戻ることが、本願発明者の実験により検証されている。このため、このようなジェスチャを検出することにより、クリック操作が行なわれたか否かを、安定して、かつ、確実に、つまり、高い再現性をもって、判断できる。
【0014】
この操作判定装置において、前記設定手段は、検出された前記指先に相当する部分の動きが一定範囲内に収まっている場合に、前記所定範囲を設定する。
【0015】
この構成によれば、前記指先に相当する部分の動きが一定範囲内に収まっている場合に、ユーザがクリック操作を行なうことを意図しているとみなし、所定範囲を設定し、これをトリガとして、ユーザがクリック操作に対応するジェスチャを行ったか否かを判定できる。このため、ユーザが当該ジェスチャを行なったか否かを、常に判定する必要がなく、処理負荷を軽減できる。
【0016】
上記操作判定装置において、前記設定手段は、前記所定範囲が設定されてから第1所定時間内に、前記第1判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断しない場合、前記所定範囲を解除する。
【0017】
この構成によれば、第1所定時間内に、第1判断手段が、指先に相当する部分が所定範囲から消失したと判断しない場合、ユーザがクリック操作を行なうことを意図していないとみなして、ユーザの意図に反してクリック操作が行なわれたと判定されることを防止できる。つまり、一般にクリック操作は素早く行なわれるところ、第1所定時間を適切に設定することにより、同一の動きであっても、クリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0018】
この操作判定装置において、前記設定手段は、前記所定範囲が設定されてから前記第1所定時間内に、前記第2判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断しない場合、前記所定範囲を解除する。
【0019】
この構成によれば、第1所定時間内に、第2判断手段が、指先に相当する部分が所定範囲に出現したと判断しない場合、ユーザがクリック操作を行なうことを意図していないとみなして、ユーザの意図に反してクリック操作が行なわれたと判定されることを防止できる。つまり、一般にクリック操作は素早く行なわれるところ、第1所定時間を適切に設定することにより、同一の動きであっても、クリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0020】
また、上記操作判定装置において、前記設定手段は、前記第1判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断した後、第2所定時間内に、前記第2判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断しない場合、前記所定範囲を解除することもできる。
【0021】
この構成によれば、第2所定時間内に、第2判断手段が、指先に相当する部分が所定範囲に出現したと判断しない場合、ユーザがクリック操作を行なうことを意図していないとみなして、ユーザの意図に反してクリック操作が行なわれたと判定されることを防止できる。つまり、一般にクリック操作は素早く行なわれるところ、第2所定時間を適切に設定することにより、同一の動きであっても、クリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0022】
上記操作判定装置は、前記第2判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断した後、前記指先に相当する部分が消失したか否かを判断する第3判断手段と、前記第3判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断した後、前記指先に相当する部分が前記所定範囲に出現したか否かを判断する第4判断手段と、をさらに備え、前記判定手段は、前記第4判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断した場合に、ダブルクリック操作が行なわれたと判定する。
【0023】
この構成によれば、ユーザは、三次元空間中で、1本指を立てた状態から、その指を折って、再び、元の立てた状態に戻し、さらに、再び、その指を折って、再び、元の立てた状態に戻すというジェスチャを行なうだけで、つまり、上記クリック操作(シングルクリック操作)のためのジェスチャを2回行なうだけで、非接触のダブルクリック操作を行なうことができる。このように、ユーザにとって容易なジェスチャにより、ダブルクリック操作を行なうことができる。
【0024】
このようなダブルクリック操作は、上記シングルクリック操作を2回行うものであるところ、折り曲げられた指先は、2回とも、ほぼ同じ位置に戻ってくることが、本願発明者の実験により検証されている。このため、このようなジェスチャを検出することにより、ダブルクリック操作が行なわれたか否かを、安定して、かつ、確実に、つまり、高い再現性をもって、判断できる。
【0025】
この操作判定装置において、前記設定手段は、前記所定範囲が設定されてから前記第1所定時間内に、前記第3判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断しない場合、前記所定範囲を解除する。
【0026】
この構成によれば、第1所定時間内に、第3判断手段が、指先に相当する部分が所定範囲から消失したと判断しない場合、ユーザがダブルクリック操作を行なうことを意図していないとみなして、ユーザの意図に反してダブルクリック操作が行なわれたと判定されることを防止できる。つまり、一般にダブルクリック操作は素早く行なわれるところ、第1所定時間を適切に設定することにより、同一の動きであっても、ダブルクリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0027】
この操作判定装置において、前記設定手段は、前記所定範囲が設定されてから前記第1所定時間内に、前記第4判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断しない場合、前記所定範囲を解除する。
【0028】
この構成によれば、第1所定時間内に、第4判断手段が、指先に相当する部分が所定範囲に出現したと判断しない場合、ユーザがダブルクリック操作を行なうことを意図していないとみなして、ユーザの意図に反してダブルクリック操作が行なわれたと判定されることを防止できる。つまり、一般にダブルクリック操作は素早く行なわれるところ、第1所定時間を適切に設定することにより、同一の動きであっても、ダブルクリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0029】
また、上記操作判定装置において、前記設定手段は、前記第3判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断した後、第3所定時間内に、前記第4判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断しない場合、前記所定範囲を解除することもできる。
【0030】
この構成によれば、第3所定時間内に、第4判断手段が、指先に相当する部分が所定範囲に出現したと判断しない場合、ユーザがダブルクリック操作を行なうことを意図していないとみなして、ユーザの意図に反してダブルクリック操作が行なわれたと判定されることを防止できる。つまり、一般にダブルクリック操作は素早く行なわれるところ、第3所定時間を適切に設定することにより、同一の動きであっても、ダブルクリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0031】
上記操作判定装置において、前記設定手段は、前記第2判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断してから、第4所定時間内に、前記第3判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断しない場合、前記所定範囲を解除する。
【0032】
この構成によれば、第4所定時間内に、第3判断手段が、指先に相当する部分が所定範囲から消失したと判断しない場合、ユーザがダブルクリック操作を行なうことを意図していないとみなして、ユーザの意図に反してダブルクリック操作が行なわれたと判定されることを防止できる。つまり、一般にダブルクリック操作は素早く行なわれるところ、第4所定時間を適切に設定することにより、同一の動きであっても、ダブルクリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0033】
この操作判定装置において、前記設定手段は、前記第4所定時間内に、前記第4判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断しない場合、前記所定範囲を解除する。
【0034】
この構成によれば、第4所定時間内に、第4判断手段が、指先に相当する部分が所定範囲に出現したと判断しない場合、ユーザがダブルクリック操作を行なうことを意図していないとみなして、ユーザの意図に反してダブルクリック操作が行なわれたと判定されることを防止できる。つまり、一般にダブルクリック操作は素早く行なわれるところ、第4所定時間を適切に設定することにより、同一の動きであっても、ダブルクリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0035】
また、上記操作判定装置において、前記設定手段は、前記第3判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断した後、第5所定時間内に、前記第4判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断しない場合、前記所定範囲を解除することもできる。
【0036】
この構成によれば、第5所定時間内に、第4判断手段が、指先に相当する部分が所定範囲に出現したと判断しない場合、ユーザがダブルクリック操作を行なうことを意図していないとみなして、ユーザの意図に反してダブルクリック操作が行なわれたと判定されることを防止できる。つまり、一般にダブルクリック操作は素早く行なわれるところ、第5所定時間を適切に設定することにより、同一の動きであっても、ダブルクリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0037】
本発明の第2の観点によれば、操作判定装置は、三次元空間中で動かされるユーザの手を撮影する撮影手段と、撮影により得られた画像から、前記ユーザの指に相当する部分を検出する検出手段と、今回前記ユーザの指に相当する部分が1つ検出された場合において、前回前記ユーザの指に相当する部分が2つ検出されていたとき、擬似的にボタン操作が行なわれたと判定する判定手段と、を備える。
【0038】
この構成によれば、ユーザは、1本指を立てた状態から、もう一本の指を立てて2本指を立てた状態にするだけで、擬似的にボタン操作を行なうことができる。このように、ユーザにとって容易なジェスチャにより、擬似的にボタン操作を行なうことができる。
【0039】
また、擬似的なボタン操作の前後において、常に1本の指は撮影されるので、その指先に対応する画面上の位置にカーソルを表示でき、ポインティングと擬似的なボタン操作を片手で行なうことができる。
【0040】
ここで、本明細書及び特許請求の範囲において、「擬似的なボタン操作」とは、ポインティングデバイス等のデバイスの実際のボタンの操作ではないが、実際のボタンを操作する場合と同等の情報ないしは命令を、三次元空間中のジェスチャにより、コンピュータに与えることを意味する。
【0041】
本発明の第3の観点によれば、操作判定装置は、三次元空間中で動かされるユーザの手を撮影する撮影手段と、撮影により得られた画像から、前記ユーザの指に相当する部分を検出する検出手段と、今回前記ユーザの指に相当する部分が2つ検出された場合において、前回前記ユーザの指に相当する部分が1つ検出されていたとき、擬似的にボタン操作が行なわれたと判定する判定手段と、を備える。
【0042】
この構成によれば、ユーザは、2本指を立てた状態から、もう一本の指を閉じて1本指を立てた状態にするだけで、擬似的にボタン操作を行なうことができる。このように、ユーザにとって容易なジェスチャにより、擬似的にボタン操作を行なうことができる。
【0043】
また、擬似的なボタン操作の前後において、常に1本の指は撮影されるので、その指先に対応する画面上の位置にカーソルを表示でき、ポインティングと擬似的なボタン操作を片手で行なうことができる。
【0044】
本発明の第4の観点によれば、操作判定装置は、三次元空間中で動かされるユーザの手を撮影する撮影手段と、撮影により得られた画像から、前記ユーザの指先に相当する部分を検出する検出手段と、前記ユーザの指先に相当する部分が2つ検出された場合において、その2点間の距離が所定値より小さい場合に、擬似的にボタンが行なわれたと判定する判定手段と、を備える。
【0045】
この構成によれば、ユーザは、2本の指の指先を近づけるだけで、擬似的にボタン操作を行なうことができる。このように、ユーザにとって容易なジェスチャにより、擬似的にボタン操作を行なうことができる。
【0046】
また、検出された2つの指先の間(例えば中点)にカーソルを表示することができ、ポインティングと擬似的なボタン操作を片手で行なうことができる。
【0047】
本発明の第5の観点によれば、指先検出装置は、三次元空間中で動かされるユーザの手を撮影する撮影手段と、撮影により得られた画像から、前記手の像の輪郭を検出する輪郭検出手段と、前記輪郭から、前記手の指先に相当する部分の画素(以下、「指先画素」と呼ぶ。)を検出する指先検出手段と、前記指先画素の周囲の画素(以下、「周囲画素」と呼ぶ。)の画素値及び座標を用いて、前記指先検出手段により検出された前記指先画素の座標を小数点精度で補正する補正手段と、を備える。
【0048】
この構成によれば、輪郭から大体の指先を決定し、その周囲画素のみを用いて補正を行なうので、処理のための記憶容量の削減と処理速度の向上を図ることができる。
【0049】
また、補正が小数点精度で実行されるので、撮像手段が比較的低解像度であっても、高精度で指先の位置を決定することができる。その結果、撮影手段より高解像度の画面上の、指先に対応する位置にカーソルを表示する場合でも、その動きを滑らかにすることができる。
【0050】
さらに、周囲画素の画素値により、補正を行なうので、補正後の指先を、輪郭線上ではなく、指の内部の位置に決定でき、ユーザが指先と認識する位置により近づけることができる。その結果、指先に対応する画面上の位置にカーソルを表示する場合、ユーザにとって、指先によるカーソルの制御が容易になる。なお、一般に、人は、指の腹を向けて、指を動かすときは、指の輪郭線上の凸点を指先と認識せず、指先端部の指の腹(finger pad)の中心を指先と認識するものである。
【0051】
この指先検出装置において、前記補正値算出手段は、前記指先画素及び前記周囲画素の画素値を重みとし、前記指先画素及び前記周囲画素の座標の加重平均を算出し、前記指先画素の座標を補正する。
【0052】
上記指先検出装置において、前記補正値算出手段は、補正後の指先の位置が、前記周囲画素の範囲を超えるように、前記補正を行う。
【0053】
この構成によれば、補正後の指先の位置を指先端部の指の腹の一定位置あるいは略一定位置に決定することができ、輪郭検出手段により検出された指先の位置が安定していない場合でも、補正後の指先の位置を極力一定させ、あるいは、指先の位置の相違を極力小さい範囲に収めることができる。その結果、指先に対応する画面上の位置にカーソルを表示する場合、カーソルを安定化できる。
【0054】
また、補正後の指先を、ユーザが指先と認識する位置により一層近づけることができる。その結果、指先に対応する画面上の位置にカーソルを表示する場合、ユーザにとって、指先によるカーソルの制御が一層容易になる。
【0055】
上記指先検出装置において、前記補正値算出手段は、前記指先画素及び前記周囲画素の画素値を、前記指先画素及び前記周囲画素の座標への重みとし、重み付けされた前記指先画素及び前記周囲画素の座標の和を算出し、その和を、前記指先画素及び前記周囲画素の画素値のうちの最大値で除することにより、前記指先画素の座標を補正することもできる。
【0056】
上記指先検出装置において、前記補正値算出手段は、前記指先画素と前記指先画素の斜め方向に位置する前記周囲画素との間の距離と、前記指先画素と前記指先画素の水平方向又は垂直方向に位置する前記周囲画素との間の距離と、が等しくなるように、前記周囲画素の座標を定義する。
【0057】
この構成によれば、画素値を利用するに当って、全周囲画素の画素値が均等に扱われ、方向によって偏りのない補正を行なうことができる。
【0058】
本発明の第6の観点によれば、操作判定方法は、三次元空間中で動かされるユーザの手を撮影するステップと、撮影により得られた画像から、前記ユーザの指先に相当する部分を検出するステップと、検出された前記指先に相当する部分を含む所定範囲を設定するステップと、前記所定範囲を設定した後、前記指先に相当する部分が消失したか否かを判断するステップと、消失したか否かを判断する前記ステップが、前記指先に相当する部分が前記所定範囲から消失したと判断した後、前記指先に相当する部分が前記所定範囲に出現したか否かを判断するステップと、出現したか否かを判断する前記ステップが、前記指先に相当する部分が前記所定範囲に出現したと判断した場合に、クリック操作が行なわれたと判定するステップと、を含む。
【0059】
この構成によれば、上記第1の観点による操作判定装置と同様の効果を奏する。
【0060】
本発明の第7の観点によれば、操作判定方法は、三次元空間中で動かされるユーザの手を撮影するステップと、撮影により得られた画像から、前記ユーザの指に相当する部分を検出するステップと、今回前記ユーザの指に相当する部分が1つ検出された場合において、前回前記ユーザの指に相当する部分が2つ検出されていたとき、擬似的にボタン操作が行なわれたと判定するステップと、を含む。
【0061】
この構成によれば、上記第2の観点による操作判定装置と同様の効果を奏する。
【0062】
本発明の第8の観点によれば、操作判定方法は、三次元空間中で動かされるユーザの手を撮影するステップと、撮影により得られた画像から、前記ユーザの指に相当する部分を検出するステップと、今回前記ユーザの指に相当する部分が2つ検出された場合において、前回前記ユーザの指に相当する部分が1つ検出されていたとき、擬似的にボタン操作が行なわれたと判定するステップと、を含む。
【0063】
この構成によれば、上記第3の観点による操作判定装置と同様の効果を奏する。
【0064】
本発明の第9の観点によれば、操作判定方法は、三次元空間中で動かされるユーザの手を撮影するステップと、撮影により得られた画像から、前記ユーザの指先に相当する部分を検出するステップと、前記ユーザの指先に相当する部分が2つ検出された場合において、その2点間の距離が所定値より小さい場合に、擬似的にボタン操作が行なわれたと判定するステップと、を含む。
【0065】
この構成によれば、上記第4の観点による操作判定装置と同様の効果を奏する。
【0066】
本発明の第10の観点によれば、指先検出方法は、三次元空間中で動かされるユーザの手を撮影するステップと、撮影により得られた画像から、前記手の像の輪郭を検出するステップと、前記輪郭から、前記手の指先に相当する部分の画素(以下、「指先画素」と呼ぶ。)を検出するステップと、前記指先画素の周囲の画素(以下、「周囲画素」と呼ぶ。)の画素値及び座標を用いて、前記指先画素を検出する前記ステップにより検出された前記指先画素の座標を小数点精度で補正するステップと、を含む。
【0067】
この構成によれば、上記第5の観点による指先検出装置と同様の効果を奏する。
【0068】
本発明の第11の観点によれば、コンピュータプログラムは、上記第6の観点による操作判定方法をコンピュータに実行させる。
【0069】
本発明の第12の観点によれば、コンピュータプログラムは、上記第7の観点による操作判定方法をコンピュータに実行させる。
【0070】
本発明の第13の観点によれば、コンピュータプログラムは、上記第8の観点による操作判定方法をコンピュータに実行させる。
【0071】
本発明の第14の観点によれば、コンピュータプログラムは、上記第9の観点による操作判定方法をコンピュータに実行させる。
【0072】
本発明の第15の観点によれば、コンピュータプログラムは、上記第10の観点による指先検出方法をコンピュータに実行させる。
【図面の簡単な説明】
【0073】
【図1】(a)本発明の実施の形態による擬似ボタン操作の説明図である。(b)本発明の実施の形態による擬似ボタン操作の第1〜第3の例の説明図である。
【図2】本発明の実施の形態による画像処理装置1の電気的構成を示す図である。
【図3】図2のMCU3による画像解析処理の流れの一例を示すフローチャートである。
【図4】図3のステップS5の変曲点の検出処理の流れの一例を示すフローチャートである。
【図5】図3のステップS7の輪郭画像の形状を判定する処理の流れの一例を示すフローチャートである。
【図6】図5のステップS161の輪郭情報を算出する処理の流れの一例を示すフローチャートである。
【図7】図5のステップS163の指先を検出する処理の流れの一例を示すフローチャートである。
【図8】図5のステップS165の「パー」を判定する処理の流れの一例を示すフローチャートである。
【図9】図5のステップS167の「チョキ」を判定する処理の流れの一例を示すフローチャートである。
【図10】図5のステップS169の「グー」を判定する処理の流れの一例を示すフローチャートである。
【図11】図5のステップS171の一本指を判定する処理の流れの一例を示すフローチャートである。
【図12】(a)図9のステップS377及び図11のステップS447の指先補正値計算処理の第1の例の流れを示すフローチャートである。(b)図9のステップS377及び図11のステップS447の指先補正値計算処理の第2の例の流れを示すフローチャートである。(c)図9のステップS377及び図11のステップS447の指先補正値計算処理の第3の例の流れを示すフローチャートである。(d)図9のステップS377及び図11のステップS447の指先補正値計算処理の第4の例の流れを示すフローチャートである。
【図13】(a)図3のステップS9の擬似ボタン操作判定処理の第1の例の流れを示すフローチャートである。(b)図3のステップS9の擬似ボタン操作判定処理の第2の例の流れを示すフローチャートである。(c)図3のステップS9の擬似ボタン操作判定処理の第3の例の流れを示すフローチャートである。
【図14】図3のステップS3で検出される偏角θjの説明図である。
【図15】図3のステップS5で検出される変曲点及び図5のステップS163で検出される指先の説明図である。
【図16】(a)図12(a)及び図12(c)の指先補正値計算処理の説明図である。(b)図12(b)及び図12(d)の指先補正値計算処理の説明図である。
【図17】指先補正値計算処理における除数の説明図である。
【図18】(a)図3のステップS9の擬似ボタン操作判定処理の第4の例の流れを示すフローチャートである。(b)図3のステップS9の擬似ボタン操作判定処理の第5の例の流れを示すフローチャートである。(c)図3のステップS9の擬似ボタン操作判定処理の第6の例の流れを示すフローチャートである。
【図19】(a)本発明の実施の形態による擬似ボタン操作の第4の例(シングルクリック)の説明図である。(b)本発明の実施の形態による擬似ボタン操作の第4の例(ダブルクリック)の説明図である。
【図20】図3のステップS9の擬似ボタン操作判定処理の第7の例の流れの一部を示すフローチャートである。
【図21】図3のステップS9の擬似ボタン操作判定処理の第7の例の流れの他の一部を示すフローチャートである。
【発明を実施するための形態】
【0074】
以下、本発明の実施の形態について、図面を参照しながら説明する。なお、図中、同一または相当部分については同一の参照符号を付してその説明を援用する。また、本明細書において、数字の後尾に付した「h」は、16進数であることを示す。
【0075】
図1(a)及び図1(b)は、本発明の実施の形態による擬似ボタン操作の説明図である。図1(a)を参照して、後述する画像処理装置1は、ユーザ(人)の手を撮影し、得られた画像を解析することによって、指先a及びbの位置を求める。この例では、指先aは、人差し指の指先であり、指先bは、親指の指先である。
【0076】
図1(b)を参照して、第1の例では、後述する電子機器9は、画像処理装置1から指先aの位置を受け取って、後述するモニタ13の画面上の対応する位置にカーソルを表示する。また、画像処理装置1は、撮影画像中に指先aと指先bとが存在する状態から、撮影画像中に指先aのみが存在する状態へ遷移したことを検出すると、例えば、二本の指(親指及び人差し指)が写っている状態から、カーソルの位置に関係ない一本の指(親指)が折り曲げられ、カーソルの位置を制御する他の一本の指(人差し指)のみが写っている状態に遷移したことを検出すると、ユーザが擬似的にボタン操作を行なったと判定し、擬似的にボタン操作が行なわれたことを電子機器9に通知する。すると、電子機器9は、ボタン操作に応じた処理を実行する。
【0077】
第2の例では、電子機器9は、画像処理装置1から指先aの位置を受け取って、モニタ13の画面上の対応する位置にカーソルを表示する。また、画像処理装置1は、撮影画像中に指先aのみが存在する状態から、撮影画像中に指先aと指先bとが存在する状態へ遷移したことを検出すると、例えば、カーソルの位置に関係ない一本の指(親指)が折り曲げられ、カーソルの位置を制御する他の一本の指(人差し指)のみが写っている状態から、二本の指(親指及び人差し指)が写っている状態に遷移したことを検出すると、ユーザが擬似的にボタン操作を行なったと判定し、擬似的にボタン操作が行なわれたことを電子機器9に通知する。すると、電子機器9は、ボタン操作に応じた処理を実行する。
【0078】
第3の例では、電子機器9は、画像処理装置1から指先aの位置と指先bの位置との中点の位置を受け取って、モニタ13の画面上の対応する位置にカーソルを表示する。また、画像処理装置1は、指先aと指先bとの間の距離を算出して、その距離が一定値以下になったことを検出すると、つまり、指先aと指先bとが近づいて、その距離が一定値以下になると、ユーザが擬似的にボタン操作を行なったと判定し、擬似的にボタン操作が行なわれたことを電子機器9に通知する。すると、電子機器9は、ボタン操作に応じた処理を実行する。
【0079】
ここで、上記第1〜第3の例において、擬似的にボタン操作が行われたと判定されたことを、ボタンのプレス操作(ボタンを押したままの状態)が行なわれたとみなすこともできるし、あるいは、クリック操作(ボタンを押下して放す操作)が行なわれたとみなすこともできる。
【0080】
なお、擬似的にボタン操作が行われたと判定されたことを、ボタンのプレス操作が行なわれたとみなす場合、ボタンを放したとみなす操作は、次のようにして判定される。
【0081】
第1の例では、画像処理装置1は、撮影画像中に指先aのみが存在する状態から、撮影画像中に指先aと指先bとが存在する状態へ遷移したことを検出すると、ユーザが擬似的にボタンを放す操作を行なったと判定し、擬似的にボタンを話す操作が行なわれたことを電子機器9に通知する。
【0082】
第2の例では、画像処理装置1は、撮影画像中に指先aと指先bとが存在する状態から、撮影画像中に指先aのみが存在する状態へ遷移したことを検出すると、ユーザが擬似的にボタンを放す操作を行なったと判定し、擬似的にボタンを放す操作が行なわれたことを電子機器9に通知する。
【0083】
第3の例では、画像処理装置1は、指先aと指先bとの間の距離を算出して、その距離が一定値以下になった後、再び、その距離が一定値を超えたことを検出すると、ユーザが擬似的にボタンを放す操作を行なったと判定し、擬似的にボタンを放す操作が行なわれたことを電子機器9に通知する。
【0084】
なお、「擬似的なボタン操作」とは、ポインティングデバイス等のデバイスの実際のボタンの操作ではないが、実際のボタンを操作する場合と同等の情報ないしは命令を、三次元空間中のジェスチャにより、コンピュータに与えることを意味する。
【0085】
図2は、本発明の実施の形態による画像処理装置1の電気的構成を示す図である。図1を参照して、この画像処理装置1は、MCU(Micro Controler Unit)3及びイメージセンサ5を含む。MCU3は、メモリ7を含む。イメージセンサ5は、カラー及びグレースケールのいずれでも使用でき、また、その画素数も任意のものを使用できるが、本実施の形態では、グレースケールで、64×64画素の比較的低解像度のものを使用する。また、イメージセンサ5としては、CMOSイメージセンサやCCDイメージセンサ等を採用できる。
【0086】
MCU3のメモリ7は、RAM、ROM、及びフラッシュメモリ等の半導体メモリであり、プログラム格納領域、データ格納領域、作業領域、及び一時格納領域等として利用される。MCU3は、メモリ7に格納されたコンピュータプログラムに従って、後述のフローチャートで示される各種処理を実行する。なお、仕様に応じて、記録媒体として、メモリ7の他、CD(CD−ROM、Video−CDを含む)やDVD(DVD−Video、DVD−ROM、DVD−RAMを含む)等の光ディスク、半導体メモリを搭載したメモリカード・メモリカートリッジ・USBメモリ、ハードディスク、光磁気ディスク、磁気テープ、及び、フレキシブルディスク等を、MCU3に接続することもできる。そして、これらにコンピュータプログラムやデータなどを格納することもできる。
【0087】
画像処理装置1は、電子機器9と接続されて使用される。電子機器9は、コンピュータ11及びその処理結果を表示するモニタ13を含む。電子機器9は、例えば、テレビジョン、ビデオゲーム機、カーナビゲーション、及び、パーソナルコンピュータ等であるが、特に限定されるものではない。なお、本実施の形態では、イメージセンサ5よりも高解像度のモニタ13を使用するものとする。
【0088】
MCU3は、メモリ7に格納されたプログラムに従って、イメージセンサ5を制御する。イメージセンサ5は、MCU3の制御により、三次元空間中で動くあるいは動かされる被写体(本実施の形態では人の手)を撮影し、得られた画像をMCU3に出力する。MCU3は、メモリ7に格納されたプログラムに従って、イメージセンサ5から受け取った画像を解析して、指先を検出して、その位置や擬似的なボタン操作の有無の情報等を、電子機器9のコンピュータ11に出力する。すると、電子機器9のコンピュータ11は、指先の位置に対応するモニタ13の画面上の位置にカーソルを表示し、また、ボタン操作が行なわれたことが通知されると、それに応じた処理を実行する。その他、コンピュータ11は、電子機器9の仕様に応じて、画像処理装置1から受け取った他の情報を処理し、また、独自の情報処理を実行する。
【0089】
次に、フローチャートを用いて画像処理装置1のMCU3の処理の詳細を説明する。
【0090】
図3は、図2のMCU3による画像解析処理の流れの一例を示すフローチャートである。図3を参照して、ステップS1にて、MCU3は、イメージセンサ5が出力した画像データから被写体(本実施の形態では手)の像の輪郭線を抽出する。この処理では、輪郭線上の各画素Pj(j=0〜J−1)の座標(XO[j],YO[j])を求める。
【0091】
ここで、本実施の形態では、値Jは、輪郭線上の画素Pjの総数を示す。また、反時計回りに輪郭線の抽出処理が実行されるものとする。
【0092】
輪郭線を抽出するためのアルゴリズムは、周知のものを使用できる。例えば、3×3の小画素領域からなるマスクを用いる方法で、このマスクの中心を輪郭線上にたえずおきならが、順次、マスクを移動して、輪郭線を抽出する。
【0093】
ステップS3にて、MCU3は、抽出した輪郭線上の各画素PjのベクトルVjの偏角θjを算出する。
【0094】
図14は、図3のステップS3で検出される偏角θjの説明図である。図4を参照して、今、被写体の輪郭線上の3つの画素Pj−1,Pj,及びPj+1に注目する。また、輪郭線を反時計回りにスキャンするものとする。画素PjのベクトルVjは、画素Pjから次の画素Pj+1に向かうベクトルとして定義される。画素PjのベクトルVjの偏角θjは、画素Pjの1つ前の画素Pj−1のベクトルVj−1に対してベクトルVjがなす角度として定義される。反時計回りの偏角θjの符号は正であり、時計回りの偏角θjの符号は負である。
【0095】
図3に戻って、ステップS5にて、MCU3は、抽出した輪郭線の変曲点を検出する。変曲点は、輪郭線の向きが変化する点であり、凸点と凹点とが定義される。
【0096】
図15は、図3のステップS5で検出される変曲点の説明図である。図15を参照して、抽出した輪郭線21の向きが変化する点として、変曲点I0〜I8が挙げられる。変曲点I0,I2,I4,I6及びI8は凸点である。変曲点I1,I3,I5及びI7は凹点である。
【0097】
図3に戻って、ステップS7にて、MCU3は、抽出した輪郭線(輪郭画像)の形状(グー、チョキ、パー、一本指、不定)を判定する。ステップS9にて、MCU3は、擬似的にボタン操作が行なわれたか否かを判定する。ステップS11にて、MCU3は、ステップS7の結果(輪郭画像の重心座標、面積、形状の情報(後述のフラグSH)、補正後の指先の座標、並びに、二つの指先の中点座標)及びステップS9の結果(後述の擬似ボタンフラグないしは後述のシングルクリックフラグ及びダブルクリックフラグ)を電子機器9のコンピュータ11に送信する。なお、MCU3は、イメージセンサ5から1フレームの画像データを受け取るたびに、ステップS1〜S11を繰り返す。
【0098】
図4は、図3のステップS5の変曲点の検出処理の流れの一例を示すフローチャートである。図4を参照して、ステップS21にて、MCU3は、変数DA,ADA,j,及びCF[]に0を代入する。ステップS23にて、MCU3は、図3のステップS1で検出された輪郭線上の画素Pjの偏角θjをメモリ7から取得する。ステップS25にて、MCU3は、変数DAの現在の値に偏角θjを加算して、変数DAに代入する。ステップS27にて、MCU3は、変数DAの絶対値を求めて、変数ADAに代入する。
【0099】
ステップS29にて、MCU3は、変数ADAの値が135度になったか否かを判断し、135度の場合輪郭線の向きが変わったと判断して、画素Pjを変曲点とみなしてステップS31に進み、それ以外はステップS39に進む。ステップS31では、MCU3は、変数DAの符号が正か否かを判断し、正の場合ステップS33に進み、負の場合ステップS35に進む。ステップS33では、MCU3は、凸凹フラグCF[j]に、変曲点が凸点であることを示す01を代入する。一方、ステップS35では、MCU3は、凸凹フラグCF[j]に、変曲点が凹点であることを示す10を代入する。
【0100】
ステップS37にて、MCU3は、変数DAに0を代入する。ステップS39にて、MCU3は、変数jを1つインクリメントする。ステップS41にて、MCU3は、変数jの値が、値Jと等しくなったか否かを判断し、j=Jの場合リターンし、それ以外はステップS23に進む。
【0101】
図5は、図3のステップS7の輪郭画像の形状を判定する処理の流れの一例を示すフローチャートである。図5を参照して、ステップS161にて、MCU3は、輪郭線に関する情報を算出する。ステップS163にて、MCU3は、輪郭画像から手の指先に相当する画素を検出する。
【0102】
再び、図15を参照して、凸点I0,I2,I4,I6及びI8を総称して、凸点As(s=0,1,…,S)と表記し、凹点I1,I3,I5及びI7を総称して、凹点Bt(t=0,1,…,T)と表記する。MCU3は、凸点Asから一定画素数Npだけ離れて位置する2つの画素を結ぶ線分23を求め、凸点Asから線分23に下ろした垂線25の長さLvを算出する。MCU3は、長さLvが、所定値CLを超えている場合に、その凸点Asを指先の候補とする。
【0103】
そして、MCU3は、指先の候補とした凸点Asの両側又は一方側に凹点Btが存在するか否かを判断し、存在する場合、その凸点Asを指先とみなす。
【0104】
また、MCU3は、「パー」及び「グー」を判定するのに必要な傾角θvを算出する。傾角θvは、指先とみなされた凸点Asから線分23に下ろした垂線25が、差分画像のX軸と平行な線27となす角である。
【0105】
図5に戻って、ステップS165にて、MCU3は、輪郭画像の形状が「パー」をした手の形状であるか否かを判定する。ステップS167にて、MCU3は、輪郭画像の形状が「チョキ」をした手の形状であるか否かを判定する。ステップS169にて、MCU3は、輪郭画像の形状が「グー」をした手の形状であるか否かを判定する。ステップS171にて、MCU3は、輪郭画像の形状が一本指を立てた手の形状であるか否かを判定してリターンする。
【0106】
図6は、図5のステップS161の輪郭情報を算出する処理の流れの一例を示すフローチャートである。図6を参照して、ステップS191にて、MCU3は、変数XG,YG及びjに0を代入する。ステップS193にて、MCU3は、変数XGの現在の値に輪郭線上の画素PjのX座標XO[j]を加算したものを、変数XGに代入する。また、MCU3は、変数YGの現在の値に輪郭線上の画素PjのY座標YO[j]を加算したものを、変数XGに代入する。ステップS195にて、MCU3は、変数jを1つインクリメントする。ステップS197にて、MCU3は、変数jの値が値Jになったか否かを判断し、値Jになった場合ステップS199に進み、それ以外はステップS193に進む。
【0107】
ステップS199にて、MCU3は、変数XGの値を値Jで除したものを、変数Xgに代入する。また、MCU3は、変数YGの値を値Jで除したものを、変数Ygに代入する。座標(Xg,Yg)は、輪郭画像の重心座標を示す。
【0108】
ステップS201にて、MCU3は、変数j,LS及びL[]に0を代入する。ステップS203にて、MCU3は、次式により、重心座標(Xg,Yg)と輪郭線上の各画素Pjの座標(XO[j],YO[j])との間の距離L[j]を算出する。
【0109】
L[j]←√((Xg−XO[j])2+(Yg−YO[j])2)
【0110】
ステップS205にて、MCU3は、変数LSの現在の値に変数L[j]の値を加算したものを、変数LSに代入する。ステップS207にて、MCU3は、変数jを1つインクリメントする。ステップS209にて、MCU3は、変数jの値が値Jになったか否かを判断し、値Jになった場合ステップS211に進み、それ以外はステップS203に進む。
【0111】
ステップS211にて、MCU3は、変数LSの値を値Jで除することにより、距離L[j]の平均値AVLを算出する。ステップS213にて、MCU3は、輪郭線及び輪郭線内の画素を計数して、輪郭画像の面積を算出してリターンする。
【0112】
図7は、図5のステップS163の指先を検出する処理の流れの一例を示すフローチャートである。図7を参照して、ステップS241にて、MCU3は、変数j及びFP[]に0を代入する。ステップS243にて、MCU3は、フラグCF[j]が凸点を示す01にセットされているか否かを判断し、肯定的判断の場合ステップS245に進み、否定的判断の場合ステップS249に進む。
【0113】
ステップS245にて、MCU3は、凸点である画素Pjの両側又は一方側に、フラグCF[j]に凹点を示す10がセットされている画素が存在するか否かを判断し、存在する場合画素Pjを指先候補とみなしてステップS247に進み、存在しない場合ステップS249に進む。ステップS247にて、MCU3は、フラグFP[j]に画素Pjが指先候補であることを示す1をセットする。
【0114】
ステップS249にて、MCU3は、変数jを1つインクリメントする。ステップS251にて、MCU3は、変数jの値が値Jになったか否かを判断し、値Jになった場合ステップS253に進み、それ以外はステップS243に進む。
【0115】
ステップS253にて、MCU3は、変数j,q,TF[],θv[],XT,YT,Q及びθvに0を代入する。ステップS255にて、MCU3は、フラグFP[j]に指先候補を示す1がセットされているか否かを判断し、肯定的判断の場合ステップS257に進み、それ以外はステップS271に進む。
【0116】
ステップS257にて、MCU3は、画素Pj+Npと画素Pj−Npとを結ぶ線分23に画素Pjから下ろした垂線25の長さLvを算出する(図15参照)。ステップS259にて、MCU3は、長さLvが所定値CLを超えているか否かを判断し、超えている場合画素Pjを指先とみなしてステップS261に進み、それ以外はステップS271に進む。
【0117】
ステップS261にて、MCU3は、指先フラグTF[j]に画素Pjが指先であることを示す1をセットする。ステップS263にて、MCU3は、変数XT[q]に画素PjのX座標を代入する。また、MCU3は、変数YT[q]に画素PjのY座標を代入する。座標(XT[q],YT[q])は、指先の座標である。ステップS265にて、MCU3は、垂線25の傾角θvを算出する(図15参照)。ステップS267にて、MCU3は、変数θv[q]に傾角θvを代入する。傾角θv[q]は、座標(XT[q],YT[q])で示される指先に対応する指の傾角である。ステップS269にて、MCU3は、変数qを1つインクリメントする。
【0118】
ステップS271にて、MCU3は、変数jを1つインクリメントする。ステップS273にて、MCU3は、変数jの値が値Jになったか否かを判断し、値Jになった場合ステップS275に進み、それ以外はステップS255に進む。ステップS275にて、MCU3は、変数Qに変数qの値を代入してリターンする。変数Qの値は、検出された指先の数を表す。
【0119】
図8は、図5のステップS165の「パー」を判定する処理の流れの一例を示すフローチャートである。図3を参照して、ステップS301にて、MCU3は、変数Qの値(指先の数)が3以上か否かを判断し、3以上の場合ステップS303に進み、それ以外はリターンする。ステップS303にて、MCU3は、変数q及びmに0を代入する。ステップS305にて、MCU3は、配列θv[q]と配列θv[q+1]との差の絶対値を算出し、変数θdに代入する。変数θdは、隣り合う指と指とがなす角度を表す。
【0120】
ステップS307にて、MCU3は、変数θdの値が100度未満か否かを判断し、肯定的判断の場合ステップS309に進み、否定的判断の場合ステップS311に進む。ステップS309にて、MCU3は、変数mを1つインクリメントする。ステップS311にて、MCU3は、変数qを1つインクリメントする。
【0121】
ステップS313にて、MCU3は、変数qの値が値Qになったか否かを判断し、値Qになった場合ステップS315に進み、それ以外はステップS305に進む。
【0122】
ステップS315では、MCU3は、変数mの値が、6以下3以上であるか否かを判断し、肯定的判断の場合手の形状が「パー」であると判断してステップS317に進み、否定的判断の場合リターンする。変数mの値は、隣り合う指と指とがなす角度θdが100度未満のケースの発生回数である。ステップS317では、MCU3は、フラグSHを「パー」を示す10hにセットして、図3のステップS9に進む。
【0123】
図9は、図5のステップS167の「チョキ」を判定する処理の流れの一例を示すフローチャートである。図9を参照して、ステップS341にて、MCU3は、変数Qの値(指先の数)が2又は3の場合ステップS343に進み、それ以外はリターンする。
【0124】
ステップS343にて、MCU3は、変数q,p,SH,XL,YL,XS及びYSに0を代入する。ステップS345にて、MCU3は、輪郭画像の重心座標(Xg,Yg)と指先の座標(XT[q],YT[q])との間の距離Lgt0を算出する。ステップS347にて、MCU3は、距離Lgt0が平均値AVL(図6のステップS211参照)に1.1を乗じたもの以上か否かを判断し、つまり、距離Lgt0が平均値AVLの110%以上か否かを判断し、肯定的判断の場合ステップS349に進み、否定的判断の場合ステップS359に進む。
【0125】
ステップS349にて、MCU3は、輪郭画像の重心座標(Xg,Yg)と指先の座標(XT[q+1],YT[q+1])との間の距離Lgt1を算出する。座標(XT[q+1],YT[q+1])の指先は、座標(XT[q],YT[q])の指先の隣の指先である。ステップS351にて、MCU3は、距離Lgt1が値AVLに1.1を乗じたもの以上か否かを判断し、つまり、距離Lgt1が平均値AVLの110%以上か否かを判断し、肯定的判断の場合ステップS353に進み、否定的判断の場合ステップS359に進む。
【0126】
ステップS353では、MCU3は、配列θv[q]と配列θv[q+1]との差の絶対値(つまり、隣あう指と指とがなす角度)を算出し、変数θdに代入する。ステップS355にて、MCU3は、変数θdの値が90度未満か否かを判断し、肯定的判断の場合ステップS357に進み、否定的判断の場合ステップS359に進む。ステップS357にて、MCU3は、変数pを1つインクリメントする。
【0127】
ステップS359にて、MCU3は、変数qを1つインクリメントする。ステップS361にて、MCU3は、変数qの値が値Qになったか否かを判断し、値Qになった場合ステップS363に進み、それ以外はステップS345に進む。ステップS363にて、MCU3は、変数pの値が1又は2の場合手の形状が「チョキ」と判断してステップS365に進み、それ以外はリターンする。
【0128】
ステップS365にて、MCU3は、変数Qの値が2か否かを判断し、2の場合、つまり、検出された指が2本の場合、ステップS369に進み、それ以外はステップS367に進む。ステップS367では、MCU3は、フラグSHを「チョキ」を示す21hにセットして、図3のステップS9に進む。なお、値21hは、3本の指が検出されたことになっているが、そのうち1本は指ではないノイズであることを示している。
【0129】
ステップS369では、MCU3は、フラグSHを「チョキ」を示す20hにセットする。なお、値20hは、2本の指が検出され、ステップS367のようなノイズを含まないことを示している。ステップS371にて、MCU3は、距離Lgt0が距離Lgt1より大きいか否かを判断し、つまり、検出された2本の指のどちらが長いか否かを判断し、距離Ltg0が大きい場合ステップS373に進み、それ以外はステップS375に進む。
【0130】
ステップS373では、MCU3は、座標XL及びYLにそれぞれ座標XT[0]及びYT[0]を代入する。また、MCU3は、座標XS及びYSにそれぞれ座標XT[1]及びYT[1]を代入する。一方、ステップS375では、MCU3は、座標XL及びYLにそれぞれ座標XT[1]及びYT[1]を代入する。また、MCU3は、座標XS及びYSにそれぞれ座標XT[0]及びYT[0]を代入する。ここで、座標(XL,YL)は、長い指の指先の座標であり、座標(XS,YS)は、短い指の指先の座標である。
【0131】
ステップS377にて、MCU3は、座標(XL,YL)及び座標(XS,YS)のそれぞれに対して、補正値を算出する。ステップS379にて、MCU3は、座標(XL,YL)に、その補正値を加算して、補正後座標を求める。また、MCU3は、座標(XS,YS)に、その補正値を加算して、補正後座標を求める。ステップS381にて、MCU3は、座標(XL,YL)の補正後座標と座標(XS,YS)の補正後座標との中点座標を算出する。そして、MCU3は、図3のステップS9に進む。
【0132】
図10は、図5のステップS169の「グー」を判定する処理の流れの一例を示すフローチャートである。図10を参照して、ステップS391にて、MCU3は、変数Qの値(指先の数)が2以上か否かを判断して、肯定的判断の場合ステップS393に進み、否定的判断の場合リターンする。
【0133】
ステップS393にて、MCU3は、変数jに0を代入する。ステップS395にて、MCU3は、距離L[j](図6のステップS203参照)が、平均値AVL(図6のステップS211参照)に0.6を乗じたもの以上であり、かつ、値AVLに1.4を乗じたもの以下であるか否かを判断し、つまり、距離L[j]が、平均値AVLの60%以上であり、かつ、平均値AVLの140%以下であるか否かを判断し、肯定的判断の場合ステップS397に進み、否定的判断の場合リターンする。
【0134】
ステップS397にて、MCU3は、変数jを1つインクリメントする。ステップS399にて、MCU3は、変数jの値が値Jになったか否かを判断し、値Jになった場合手の形状が「グー」と判断しステップS401に進み、それ以外はステップS395に進む。ステップS401にて、MCU3は、フラグSHを「グー」を示す30hにセットして、図3のステップS9に進む。
【0135】
図11は、図5のステップS171の一本指を判定する処理の流れの一例を示すフローチャートである。図11を参照して、ステップS421にて、MCU3は、変数Qの値(指先の数)が1以下か否かを判断して、肯定的判断の場合ステップS423に進み、否定的判断の場合ステップS447に進む。ステップS447では、MCU3は、フラグSHを「不定」を示す00hにセットしてリターンする。
【0136】
一方、ステップS423では、MCU3は、変数j,s,Dc[],Dca及びDcmに0を代入する。ステップS425にて、MCU3は、フラグFP[j]に指先候補(つまり凸点)を示す1がセットされているか否かを判断し、肯定的判断の場合ステップS427に進み、それ以外はステップS433に進む。
【0137】
ステップS427では、MCU3は、重心座標(Xg,Yg)と凸点の画素Pjとの間の距離Dを算出する。ステップS429にて、MCU3は、配列Dc[s]に距離Dを代入する。ステップS431にて、MCU3は、変数sを1つインクリメントする。ステップS433にて、MCU3は、変数jを1つインクリメントする。ステップS435にて、MCU3は、変数jの値が値Jになったか否かを判断し、値Jになった場合ステップS437に進み、それ以外はステップS425に進む。
【0138】
ステップS437にて、距離Dc[s]の平均値Dcaを算出する。つまり、平均値Dcaは、重心から各凸点までの距離の平均値である。ステップS439にて、距離Dc[s]から、最大値Dcmを検出する。つまり、最大値Dcmは、重心から各凸点までの距離のうち、最大のものである。ステップS441にて、MCU3は、最大値Dcmが、平均値Dcaに1.3を乗じた値以上か否かを判断し、肯定判断の場合一本の指が立った状態であるとみなしてステップS443に進み、否定判断の場合ステップS447に進む。
【0139】
ステップS443では、MCU3は、フラグSHを「1本の指が立った状態」を示す40hにセットする。ステップS445では、MCU3は、座標XHに、最大値Dcmに対応する凸点の画素PjのX座標を代入する。また、MCU3は、座標YHに、最大値Dcmに対応する凸点の画素PjのY座標を代入する。座標(XH,YH)は、立った状態の1本指の指先の座標である。ステップS447にて、MCU3は、座標(XH,YH)の補正値(Xc,Yc)を計算する。ステップS449にて、MCU3は、座標(XH,YH)に、その補正値(Xc,Yc)を加算し、補正後座標(Xf,Yf)を求める。そして、MCU3は、リターンする。
【0140】
さて、次に、図9のステップS373及びS375で求めた指先を示す画素の座標(XL,YL)及び(XS,YS)、並びに、図11のステップS445で求めた指先を示す画素の座標(XH,YH)を、イメージセンサ5の解像度を超える高精度で再計算する方法を説明する。以下では、再計算前の指先を示す画素P4の座標を、座標(Xb,Yb)と表記する。そして、下記のようにして、座標(Xb,Yb)の補正値(Xc,Yc)を求める。本実施の形態では、補正値の算出方法として、第1〜第4の例を挙げる。
【0141】
図12(a)は、図9のステップS377及び図11のステップS447の指先補正値計算処理の第1の例の流れを示すフローチャートである。図12(b)は、図9のステップS377及び図11のステップS447の指先補正値計算処理の第2の例の流れを示すフローチャートである。図12(c)は、図9のステップS377及び図11のステップS447の指先補正値計算処理の第3の例の流れを示すフローチャートである。図12(d)は、図9のステップS377及び図11のステップS447の指先補正値計算処理の第4の例の流れを示すフローチャートである。
【0142】
図16(a)は、図12(a)及び図12(c)の指先補正値計算処理の説明図である。図16(b)は、図12(b)及び図12(d)の指先補正値計算処理の説明図である。
【0143】
図16(a)及び図16(b)を参照して、補正前(再計算前)の指先画素P4の座標(Xb,Yb)を原点(0,0)とする。図中、水平右方向をx軸の正とし、垂直下方向をy軸の正とする。そして、補正前の指先画素P4を取り囲む8個の画素P0,P1,P2,P5,P6,P7及びP8を利用する。また、画素P0〜P8は、それぞれ、画素値(つまり輝度値)p0〜p8を有する。
【0144】
図16(a)に示すように、第1及び第3の例では、原点(0,0)の指先画素P4の上下左右の画素P1,P7,P3及びP5の座標は、それぞれ、座標(0,−1),(0,1),(−1,0)及び(1,0)である。また、指先画素P4の左上画素P0、右上画素P2、左下画素P6及び右下画素P8の座標は、それぞれ、座標(−√2/2,−√2/2),(√2/2,−√2/2),(−√2/2,√2/2)及び(√2/2,√2/2)である。
【0145】
一方、図16(b)に示すように、第2及び第4の例では、原点(0,0)の指先画素P4の周囲画素P0,P1,P2,P5,P6,P7及びP8の座標は、それぞれ、座標(−1,−1)、(0,−1)、(1,−1)、(−1,0)、(1,0)、(−1,1)、(0,1)及び(1,1)である。
【0146】
なお、下記の数式中シンボル“*”及び“/”は、それぞれ、乗算及び除算を示す。
【0147】
図12(a)を参照して、第1の例では、ステップS361及びS363にて、MCU3は、次式により、X座標Xbの補正値Xc及びY座標Ybの補正値Ycを算出する。値Csは定数である。定数Csは1より大きい値である。
【0148】
Xc=(A/C)*Cs
Yc=(B/C)*Cs
【0149】
A=−R*p0+0*p1+R*p2+(−1)*p3+0*p4+1*p5+(−R)*p6+0*p7+R*p8
B=−R*p0+(−1)*p1+(−R)*p2+0*p3+0*p4+0*p5+R*p6+1*p7+R*p8
C=p0+p1+p2+P3+p4+p5+p6+p7+p8
R=√2/2
【0150】
よって、補正後の指先のX座標Xf及びY座標Yfは、次のようになる。
【0151】
Xf=Xb+Xc
Yf=Yb+Yc
【0152】
図12(b)を参照して、第2の例では、ステップS371及びS373にて、MCU3は、次式により、X座標Xbの補正値Xc及びY座標Ybの補正値Ycを算出する。値Csは定数である。
【0153】
Xc=(D/C)*Cs
Yc=(E/C)*Cs
【0154】
D=−1*p0+0*p1+1*p2+(−1)*p3+0*p4+1*p5+(−1)*p6+0*p7+1*p8
E=−1*p0+(−1)*p1+(−1)*p2+0*p3+0*p4+0*p5+1*p6+1*p7+1*p8
C=p0+p1+p2+P3+p4+p5+p6+p7+p8
【0155】
よって、補正後の指先のX座標Xf及びY座標Yfは、次のようになる。
【0156】
Xf=Xb+Xc
Yf=Yb+Yc
【0157】
図12(c)を参照して、第3の例では、ステップS381及びS383にて、MCU3は、次式により、X座標Xbの補正値Xc及びY座標Ybの補正値Ycを算出する。値pmaxは、画素値p0〜p8のうちの最大値を示す。
【0158】
Xc=A/pmax
Yc=B/pmax
【0159】
A=−R*p0+0*p1+R*p2+(−1)*p3+0*p4+1*p5+(−R)*p6+0*p7+R*p8
B=−R*p0+(−1)*p1+(−R)*p2+0*p3+0*p4+0*p5+R*p6+1*p7+R*p8
R=√2/2
【0160】
よって、補正後の指先のX座標Xf及びY座標Yfは、次のようになる。
【0161】
Xf=Xb+Xc
Yf=Yb+Yc
【0162】
図12(d)を参照して、第4の例では、ステップS391及びS393にて、MCU3は、次式により、X座標Xbの補正値Xc及びY座標Ybの補正値Ycを算出する。値pmaxは、画素値p0〜p8のうちの最大値を示す。
【0163】
Xc=D/pmax
Yc=E/pmax
【0164】
D=−1*p0+0*p1+1*p2+(−1)*p3+0*p4+1*p5+(−1)*p6+0*p7+1*p8
E=−1*p0+(−1)*p1+(−1)*p2+0*p3+0*p4+0*p5+1*p6+1*p7+1*p8
【0165】
よって、補正後の指先のX座標Xf及びY座標Yfは、次のようになる。
【0166】
Xf=Xb+Xc
Yf=Yb+Yc
【0167】
ここで、図9のステップS377の指先補正値算出処理では、MCU3は、座標(XL,YL)及び(XS,YS)のそれぞれを指先P4の座標(Xb,Yb)として、それぞれの補正値を算出する。また、図11のステップS447の指先補正値算出処理では、座標(XH,YH)を指先P4の座標(Xb,Yb)として、その補正値を算出する。
【0168】
図16(b)を参照しながら、上記第4の例について補足説明する。
【0169】
第4の例の上記式では、指先画素P4並びに周囲画素P0,P1,P2,P5,P6,P7及びP8の座標(0,0)、(−1,−1)、(0,−1)、(1,−1)、(−1,0)、(1,0)、(−1,1)、(0,1)及び(1,1)に、対応する画素値p4,p0,p1,p2,P3,p5,p6,p7及びp8で重み付けをし、それらの和Dが算出される。そして、和Dを値pmaxで除することにより、補正値Xcを求める。
【0170】
このようにして、小数点を持った精度の補正値Xcが得られる。なお、座標Xbは、画素単位で求められるので、整数値である。従って、座標Xbに補正値Xcを加えることにより、小数点精度の座標値を得ることができる。これらのことは同様にY座標についても言える。
【0171】
また、画素値による重み付けを行うことにより得られた補正値Xcを、補正前のX座標Xbに加えることにより、画素値(輝度値)の大きい側に、X座標Xbを補正できる(画素値による重み付け)。このことは同様にY座標についても言える。つまり、偏角θjから変曲点を求めることによって、手の輪郭線上の画素から、指先に相当する画素を特定し(図9のステップS373及びS375並びに図11のステップS445)、さらに、画素値を加味することによって、輪郭線上で特定された画素の周囲で、より画素値の大きい位置に、指先の座標を補正している。なぜなら、画像に写り込んだ指の像のうち、その先端部分であって、さらに、画素値(輝度値)の大きい位置を、指先とみなすことにより、より適切に指先を特定できるからである。
【0172】
さらに、和Dを、画素値p0〜p8のうちの最大値pmaxで除している。つまり、除数を、固定値とするのではなく、変動値としている。これは、イメージセンサ5から手までの距離は、一定ではないからである。つまり、イメージセンサ5から手までの距離が近い場合は、画像に指は大きく写り込み、一方、イメージセンサ5から手までの距離が遠い場合は、画像には指は小さく写り込むので、補正値Xcを、イメージセンサ5から手までの遠近に応じて、適切な値に設定するためである。補正値Ycについても同様である。
【0173】
例えば、除数を固定値とする場合、その固定値が小さすぎると、イメージセンサ5から手までの距離が遠い場合は比較的妥当な値になるかもしれないが、近い場合は、補正値が大きくなりすぎてしまう。また、逆に、除数を固定値とする場合、その固定値が大きすぎると、イメージセンサ5から手までの距離が近い場合は比較的妥当な値になるかもしれないが、遠い場合は、補正値が小さくなりすぎてしまう。また、イメージセンサ5から手までの距離が遠い場合と近い場合の双方に適切な除数を、固定値として設定することは困難である。なぜなら、同じ距離で同じ指を撮影する場合であっても、イメージセンサ5が設置される環境(照明や外光など)によって、画素値(輝度値)は異なってくるし、また、指の色彩、輪郭、及び表面の形状等も人によって異なるからである。
【0174】
また、値C(=p0+p1+p2+P3+p4+p5+p6+p7+p8)で除することにより、加重平均をとることもできる。しかし、次の理由により、除数は、値Cではなく、最大値pmaxとするほうが好ましい。
【0175】
図17を参照して、一般的に、実際の人間の指先30は、平面視において、ある点を頂点(「実頂点」と呼ぶ。)32として、円弧状となっている。一方、本実施の形態のように、比較的低解像度の画像から指の輪郭を検出し、指先を決定する場合、常に実頂点32を指先として検出することは困難である。従って、検出される指先は、実頂点32であったり、実頂点32の左の点34になったり、右の点36になったりする。
【0176】
この場合、和Dを値Cで除して補正値とすると、その補正値は、図16(b)の画素P4を中心とした9×9画素の範囲を超えることができない。和Eについても同様である。このため、例えば、図17の実頂点32の補正後の位置は点38、点34の補正後の位置は点40、点36の補正後の位置は点42となる。このように、補正後の指先の位置は、これら3つの点で異なっている。同じ指先を検出するのに、異なった部分を指先と認識したのでは、検出された指先位置に配置されるカーソルが安定しない。
【0177】
そこで、輪郭から求めた指先が、一定していな場合でも、補正後の位置を極力一定させるため、あるいは、指先の位置の相違を極力小さい範囲に収めるため、最大値pmaxで和D及びEを除して、補正値を、9×9画素の範囲を越えるようにし、補正後の位置が、図17の点44、つまり、指先端部30の腹の中心付近に集まるようにした。
【0178】
図16(a)を参照しながら、上記第1の例について補足説明する。この例では、第4の例と異なり、画素P0,P2,P6及びP8の重み付けの対象を、それぞれ、座標(−√2/2,−√2/2),(√2/2,−√2/2),(−√2/2,√2/2)及び(√2/2,√2/2)とした。これは次の理由による。
【0179】
補正前の指先画素P4の中心からの距離を、全周囲画素で同じ値として、画素値を重みとするに当って、全画素値を均等に扱うためである。例えば、画素P4と画素P5との間の距離は「1」であるが、画素P2の座標を(1,−1)として計算すると、画素P4と画素P2との間の距離は、「√2」となってしまい、周囲画素の位置によって不均衡が発生する。補正前の指先画素P4の中心からの距離を、全周囲画素で同じ値とすることにより、補正値を方向によって偏りのないものとすることができる。
【0180】
また、この例では、A/C及びB/Cに定数Csを乗じている。これは、第4の例で、除数を値Cとせず、加重平均をとらなかった理由と同じである。つまり、輪郭から求めた指先が、一定していな場合でも、補正後の位置を極力一定させるため、あるいは、指先の位置の相違を極力小さい範囲に収めるため、定数Csを乗じて、補正値を、9×9画素の範囲を越えるようにし、補正後の位置が、図17の点44に集まるようにしたのである。なお、定数Csを乗ずることなしにA/C及びB/Cを補正値とすることもできる。
【0181】
ここで、定数Csは、実験及び試行錯誤等により決定される。また、定数Csを、検出された指の幅に応じて動的に変更することもできる。例えば、画像から指の幅を算出し、その幅に所定数(小数値)を乗じることにより、定数Csを決定する。この所定数は、実験及び試行錯誤等により決定される。例えばこの所定数は2/3である。なお、例えば、補正前の指先画素の左右それぞれに一定画素数離れた左右の画素間の距離を求め、それを指の幅とする。
【0182】
また、和A及びBをそれぞれ値Cで除して加重平均をとるのは、小数点を持った精度の補正値Xc及びYcを得るためである。なお、座標Xbは、画素単位で求められるので、整数値である。従って、座標Xbに補正値Xcを加えることにより、小数点精度の座標値を得ることができる。これらのことは同様にY座標についても言える。
【0183】
さらに、画素値による重み付けを行う理由は、第4の例と同様である。
【0184】
上記第2の例について補足説明する。定数Csを乗じる理由、加重平均をとる理由、及び、画素値による重み付けを行なう理由は、第1の例と同じである。
【0185】
上記第3の例について補足説明する。和A及びBをそれぞれ最大値pmaxで除して加重平均をとるのは、小数点を持った精度の補正値Xc及びYcを得るためである。なお、座標Xbは、画素単位で求められるので、整数値である。従って、座標Xbに補正値Xcを加えることにより、小数点精度の座標値を得ることができる。これらのことは同様にY座標についても言える。
【0186】
また、画素P0,P2,P6及びP8の重み付けの対象を、それぞれ、座標(−√2/2,−√2/2),(√2/2,−√2/2),(−√2/2,√2/2)及び(√2/2,√2/2)とした理由は、第1の例と同じである。
【0187】
さらに、画素値による重み付けを行う理由、除数を変動値とした理由、及び、最大値pmaxで除し加重平均をとらない理由は、第4の例と同様である。
【0188】
図13(a)は、図3のステップS9の擬似ボタン操作判定処理の第1の例の流れを示すフローチャートである(図1(b)の第1の例に対応)。図13(a)を参照して、ステップS621にて、MCU3は、擬似的なボタン操作の有無を示す擬似ボタンフラグをオフにする。ステップS623にて、MCU3は、手の形状を示す今回のフラグSHに40hがセットされているか否かを判断し、40hがセットされている場合(つまり、「1本指」の状態)、ステップS627に進み、それ以外はリターンする。
【0189】
ステップS627では、MCU3は、手の形状を示す前回のフラグSHに20hがセットされているか否かを判断し、20hがセットされている場合(つまり、「チョキ」の状態)、ステップS629に進み、それ以外はリターンする。ステップS629では、MCU3は、擬似的にボタン操作が行なわれたことを示すため、擬似ボタンフラグをオンにする。
【0190】
図13(b)は、図3のステップS9の擬似ボタン操作判定処理の第2の例の流れを示すフローチャートである(図1(b)の第2の例に対応)。図13(b)を参照して、ステップS601にて、MCU3は、擬似的なボタン操作の有無を示す擬似ボタンフラグをオフにする。ステップS603にて、MCU3は、手の形状を示す今回のフラグSHに20hがセットされているか否かを判断し、20hがセットされている場合(つまり、「チョキ」の状態)、ステップS607に進み、それ以外はリターンする。
【0191】
ステップS607では、MCU3は、手の形状を示す前回のフラグSHに40hがセットされているか否かを判断し、40hがセットされている場合(つまり、「1本指」の状態)、ステップS609に進み、それ以外はリターンする。ステップS609では、MCU3は、擬似的にボタン操作が行なわれたことを示すため、擬似ボタンフラグをオンにする。
【0192】
図13(c)は、図3のステップS9の擬似ボタン操作判定処理の第3の例の流れを示すフローチャートである(図1(b)の第3の例に対応)。図13(c)を参照して、ステップS641にて、MCU3は、擬似的なボタン操作の有無を示す擬似ボタンフラグをオフにする。ステップS643にて、MCU3は、手の形状を示す今回のフラグSHに20hがセットされているか否かを判断し、20hがセットされている場合(つまり、「チョキ」の状態)、ステップS645に進み、それ以外はリターンする。
【0193】
ステップS645では、MCU3は、補正後の一方の指先の座標と、補正後の他方の指先の座標と、の間の距離DCを算出する。ステップS647にて、MCU3は、距離DCが一定値CCより小さいか否かを判断し、小さい場合一方指先が他方指先に近づいたと判断してステップS649に進み、それ以外はリターンする。ステップS649にて、MCU3は、擬似的にボタン操作が行なわれたことを示すため、擬似ボタンフラグをオンにする。
【0194】
ここで、図13(a)〜図13(c)及び後述の図18(a)〜図18(c)において、今回のフラグSHとは、イメージセンサ5から今回受け取った1フレームの画像データに基づき設定されたフラグを意味する。また、前回のフラグSHとは、イメージセンサ5から前回受け取った1フレームの画像データに基づき設定されたフラグを意味する。
【0195】
また、図13(a)〜図13(c)は、擬似的にボタン操作が行われたと判定されたこと(つまり、擬似ボタンフラグのオン)を、クリック操作(ボタンを押下して放す操作)が行なわれたとみなす場合の処理例を示している。
【0196】
次に、図18(a)〜図18(c)を参照して、擬似的にボタン操作が行われたと判定されたこと(つまり、擬似ボタンフラグのオン)を、ボタンのプレス操作(ボタンを押したままの状態)が行なわれたとみなす処理例を説明する。なお、擬似ボタンフラグのオフは、ボタンを放した状態とみなされる。
【0197】
図18(a)は、図3のステップS9の擬似ボタン操作判定処理の第4の例の流れを示すフローチャートである(図1(b)の第1の例に対応)。図18(a)を参照して、ステップS701にて、MCU3は、擬似的なボタン操作の有無を示す擬似ボタンフラグがオンか否かを判断し、オンの場合ステップS709に進み、オフの場合ステップS703に進む。なお、擬似ボタンフラグは、システム初期化時にオフにセットされるものとする。
【0198】
ステップS703にて、MCU3は、手の形状を示す今回のフラグSHに40hがセットされているか否かを判断し、40hがセットされている場合(つまり、「1本指」の状態)、ステップS705に進み、それ以外はリターンする。
【0199】
ステップS705では、MCU3は、手の形状を示す前回のフラグSHに20hがセットされているか否かを判断し、20hがセットされている場合(つまり、「チョキ」の状態)、ステップS707に進み、それ以外はリターンする。ステップS707では、MCU3は、擬似的にボタンがプレスされたことを示すため、擬似ボタンフラグをオンにする。
【0200】
一方、ステップS709では、MCU3は、今回のフラグSHに20hがセットされているか否かを判断し、20hがセットされている場合(つまり、「チョキ」の状態)、ステップS711に進み、それ以外はボタンプレスの状態が維持されているとみなしリターンする。ステップS711では、MCU3は、擬似的にボタンが放されたことを示すため、擬似ボタンフラグをオフにする。
【0201】
図18(b)は、図3のステップS9の擬似ボタン操作判定処理の第5の例の流れを示すフローチャートである(図1(b)の第2の例に対応)。図18(b)を参照して、ステップS731にて、MCU3は、擬似的なボタン操作の有無を示す擬似ボタンフラグがオンか否かを判断し、オンの場合ステップS739に進み、オフの場合ステップS733に進む。なお、擬似ボタンフラグは、システム初期化時にオフにセットされるものとする。
【0202】
ステップS733にて、MCU3は、手の形状を示す今回のフラグSHに20hがセットされているか否かを判断し、20hがセットされている場合(つまり、「チョキ」の状態)、ステップS735に進み、それ以外はリターンする。
【0203】
ステップS735では、MCU3は、手の形状を示す前回のフラグSHに40hがセットされているか否かを判断し、40hがセットされている場合(つまり、「1本指」の状態)、ステップS737に進み、それ以外はリターンする。ステップS737では、MCU3は、擬似的にボタンがプレスされたことを示すため、擬似ボタンフラグをオンにする。
【0204】
一方、ステップS739では、MCU3は、今回のフラグSHに40hがセットされているか否かを判断し、40hがセットされている場合(つまり、「一本指」の状態)、ステップS741に進み、それ以外はボタンプレスの状態が維持されているとみなしリターンする。ステップS741では、MCU3は、擬似的にボタンが放されたことを示すため、擬似ボタンフラグをオフにする。
【0205】
図18(c)は、図3のステップS9の擬似ボタン操作判定処理の第6の例の流れを示すフローチャートである(図1(b)の第3の例に対応)。図18(c)を参照して、ステップS761にて、MCU3は、擬似的なボタン操作の有無を示す擬似ボタンフラグがオンか否かを判断し、オンの場合ステップS771に進み、オフの場合ステップS763に進む。なお、擬似ボタンフラグは、システム初期化時にオフにセットされるものとする。
【0206】
ステップS763にて、MCU3は、手の形状を示す今回のフラグSHに20hがセットされているか否かを判断し、20hがセットされている場合(つまり、「チョキ」の状態)、ステップS765に進み、それ以外はリターンする。
【0207】
ステップS765では、MCU3は、補正後の一方の指先の座標と、補正後の他方の指先の座標と、の間の距離DCを算出する。ステップS767にて、MCU3は、距離DCが一定値CCより小さいか否かを判断し、小さい場合一方指先が他方指先に近づいたと判断してステップS769に進み、それ以外はリターンする。ステップS769にて、MCU3は、擬似的にボタンのプレスが行なわれたことを示すため、擬似ボタンフラグをオンにする。
【0208】
一方、ステップS771にて、MCU3は、今回のフラグSHに20hがセットされているか否かを判断し、20hがセットされている場合(つまり、「チョキ」の状態)、ステップS773に進み、それ以外はボタンプレスの状態が維持されているとみなしリターンする。
【0209】
ステップS773では、MCU3は、補正後の一方の指先の座標と、補正後の他方の指先の座標と、の間の距離DCを算出する。ステップS775にて、MCU3は、距離DCが一定値CC以上か否かを判断し、CC以上の場合擬似的にボタンが放されたとみなしてステップS777に進み、それ以外はボタンプレスの状態が維持されているとみなしリターンする。ステップS777にて、MCU3は、擬似的にボタンが放されたことを示すため、擬似ボタンフラグをオフにする。
【0210】
ところで、上記では、図1(b)を参照して、擬似ボタン操作の第1〜第3の例を説明した。以下では、擬似ボタン操作の第4の例を説明する。この第4の例では、シングルクリック及びダブルクリックの判定を行なう。
【0211】
図19(a)は、本発明の実施の形態による擬似ボタン操作の第4の例(シングルクリック)の説明図である。図19(a)を参照して、一定時間TC以内に、ステップS2000〜S2004の変化が検出された場合に、シングルクリックが行なわれたとみなす。
【0212】
具体的には、指先50が大体静止した状態になった場合に、最新の指先50を中心とした矩形範囲(例えば3画素×3画素)52を設定する(ステップS2000)。例えば、最新の指先50から一定距離RD内に過去所定数分の指先50が存在する場合に、指先50が大体静止した状態であると判断される。
【0213】
この矩形範囲52の設定から一定時間TC以内に、矩形範囲52から指先50が消失し(出て)、矩形範囲52に指先50が存在しない状態になり(ステップS2002)、そして、再び、矩形範囲52に指先50が出現し(入って)、矩形範囲52に指先50が存在する状態になった時に(ステップS2004)、シングルクリックが行なわれたとみなす。例えば、矩形範囲52内の画素値(輝度値)の合計値を、所定の閾値と比較して、合計値が閾値を超えていれば矩形範囲52に指先50が存在すると判断し、一方、合計値が閾値以下の場合に矩形範囲52に指先50が存在しないと判断する。
【0214】
なお、例えば、ユーザが、一定時間TC以内に、人差し指を伸ばした状態から、人差し指の第3関節(付け根の関節)を曲げて指を折り、再び、元の状態(人差し指を伸ばした状態)に戻すというジェスチャを行なった時に、シングルクリックが行なわれたとみなされる。この場合、第1及び第2関節の状態は任意である。また、例えば、ユーザが、一定時間TC以内に、人差し指を伸ばした状態から、人差し指の第2関節を曲げて指を折り(第3関節は固定)、再び、元の状態(人差し指を伸ばした状態)に戻すというジェスチャを行なった時に、シングルクリックが行なわれたとみなされる。この場合、第1関節の状態は任意である。ここで、指先に一番近い関節を第1関節、その次の関節を第2関節、さらにその次の関節を第3関節と呼んでいる。
【0215】
この例のような人のジェスチャでは、指が曲げられた後、指先が、ほぼ元の位置に戻ることが、本願発明者の実験により検証されている。このため、図19(a)で説明した手法により、シングルクリックが行なわれたか否かを、安定して、かつ、確実に、つまり、高い再現性をもって、判断できるのである。
【0216】
図19(b)は、本発明の実施の形態による擬似ボタン操作の第4の例(ダブルクリック)の説明図である。図19(b)を参照して、一定時間TC以内に、ステップS2100〜S2108の変化が検出された場合に、ダブルクリックが行なわれたとみなす。この場合の一定時間TCは、シングルクリックを判定するときの一定時間TCと同じである。
【0217】
具体的には、指先50が大体静止した状態になった場合に、最新の指先50を中心とした矩形範囲(例えば3画素×3画素)52を設定する(ステップS2100)。指先50が大体静止した状態の判断方法は、シングルクリックの場合と同じである。
【0218】
この矩形範囲52の設定から一定時間TC以内に、矩形範囲52から指先50が消失し(出て)、矩形範囲52に指先50が存在しない状態になり(ステップS2102)、そして、再び、矩形範囲52に指先50が出現し(入って)、矩形範囲52に指先50が存在する状態になり(ステップS2104)、再び、矩形範囲52から指先50が消失し(出て)、矩形範囲52に指先50が存在しない状態になり(ステップS2106)、そして、再び、矩形範囲52に指先50が出現し(入って)、矩形範囲52に指先50が存在する状態になった時に(ステップS2108)、ダブルクリックが行なわれたとみなす。矩形範囲52に指先50が存在するか否かの判断は、シングルクリックの場合と同じである。
【0219】
なお、ダブルクリックは、上記のシングルクリックのジェスチャをユーザが2回行なうことで実行される。また、ダブルクリックは、シングルクリックを2回行なうものであり、それ故、折り曲げられた指先は、2回とも、ほぼ同じ位置に戻ってくる。この点も本願発明者により検証されている。このため、図19(b)で説明した手法により、ダブルクリックが行なわれたか否かを、安定して、かつ、確実に、つまり、高い再現性をもって、判断できるのである。
【0220】
図20及び図21は、図3のステップS9の擬似ボタン操作判定処理の第7の例の流れを示すフローチャートである(図19(a)及び図19(b)の第4の例に対応)。図20を参照して、ステップS1200にて、MCU3は、シングルクリックが行なわれたとみなす時にオンにセットされるシングルクリックフラグと、ダブルクリックが行なわれたとみなす時にオンにセットされるダブルクリックフラグと、をオフにする。
【0221】
ステップS1202にて、MCU3は、滞在フラグがオンか否かを判断し、オンの場合図21のステップS1250に進み、オフの場合ステップS1204に進む。滞在フラグは、指先50が大体静止した状態になったと判断された時に、つまり、図19(a)及び図19(b)の矩形範囲52が設定された時にオンにセットされるフラグである。従って、ステップS1202で否定判断がされた後のステップS1204〜S1220の処理は、矩形範囲52を設定するための処理である。一方、ステップS1202で肯定判断がされた後のステップS1250〜S1284の処理は、図19(a)及び図19(b)のステップS2002,S2004,S2102〜S2108の状態を判断するための処理である。
【0222】
ステップS1204にて、MCU3は、変数kに0をセットする。ステップS1206にて、MCU3は、最新の指先50と、過去の指先50と、の間の距離DISを算出する。距離DISは次式により算出される。
【0223】
DIS=√(XD2+YD2)
XD=Xf[0]−Xf[k+1]
YD=Yf[0]−Yf[k+1]
【0224】
ここで、図11のステップS449では、補正後の指先50の座標(Xf,Yf)を計算する。この場合、補正後の指先50の座標(Xf,Yf)は、キューに格納され、現在及び過去の計N個のデータが保存される(Nは2以上の整数。本実施の形態ではN=10)。キューは、X座標Xfを代入する配列Xf[0]〜Xf[9]及びY座標Yfを代入する配列Yf[0]〜Yf[9]により構成される。配列Xf[0]及びYf[0]に常に最新の座標(Xf,Yf)が格納される。
【0225】
従って、ステップS1206では、最新の指先50の座標(Xf[0],Yf[0])と、それより(k+1)個だけ過去の指先50の座標(Xf[k+1],Yf[k+1])と、の間の距離DISが計算される。
【0226】
そして、ステップS1208にて、MCU3は、距離DISが、一定距離RDより小さいか否かを判断し、小さい場合ステップS1210に進み、それ以外は指先50が静止した状態にないと判断してステップS1220に進む。ステップS1210にて、MCU3は、変数kを1つインクリメントする。ステップS1212にて、MCU3は、変数kの値が9になったか否かを判断し、9になった場合ステップS1214に進み、それ以外はステップS1206に戻る。
【0227】
ステップS1212でk=9が判断されたことは、最新の指先50と過去9個の指先50それぞれとの間の距離全てが、一定距離RD内に存在することを意味する。つまり、指先50が大体静止した状態にあることを意味する。このため、ステップS1214では、MCU3は、滞在フラグをオンにする。一方、距離DISが一定距離RD内にない過去の指先50が1つでも存在する場合は、指先50が静止した状態にないと判断する。このため、ステップS1220では、MCU3は、滞在フラグをオフにしてリターンする。
【0228】
ステップS1214の次のステップS1216にて、MCU3は、最新の指先50の座標(Xf[0],Yf[0])を中心とした矩形範囲52を設定する(図19(a)のステップS2000及び図19(b)のステップS2100に相当)。そして、ステップS1218にて、MCU3は、タイマTMをセットしてリターンする。このタイマTMは、上記一定時間TC(図19(a)及び図19(b)参照)を計測するためのものである。この一定時間TCは、実験及び試行錯誤等により、決定される。
【0229】
図21を参照して、ステップS1250にて、MCU3は、タイマTMの値が一定時間TCになったか否かを判断し、一定時間TCになった場合ステップS1278に進み、一定時間になっていない場合ステップS1252に進む。
【0230】
ステップS1252にて、MCU3は、消失フラグがオンか否かを判断し、オンの場合ステップS1262に進み、オフの場合ステップS1254に進む。消失フラグは、矩形範囲52に指先50が存在する状態から存在しない状態に変化したときにオンにされるフラグである。
【0231】
ステップS1254では、MCU3は、矩形範囲52に指先50が不存在か否かを判断し、存在する場合リターンし、不存在の場合ステップS1256に進む。ステップS1256にて、MCU3は、消失フラグをオンにしてリターンする(図19(a)のステップS2002並びに図19(b)のステップS2102及びS2106に相当)。
【0232】
消失フラグがオンの場合、ステップS1262にて、MCU3は、矩形範囲52に指先50が存在するか否かを判断し、存在しない場合リターンし、存在する場合ステップS1264に進む(図19(a)のステップS2004並びに図19(b)のステップS2104及びS2108に相当)。
【0233】
ステップS1264では、MCU3は、仮クリックフラグがオンか否かを判断し、オンの場合ステップS1272に進み、オフの場合ステップS1266に進む。仮クリックフラグは、ユーザのジェスチャがシングルクリックの条件(図19(a)のステップS2000〜S2004)を満たしたときにオンにされるフラグである。ただし、ダブルクリックはシングルクリックの動作を含むので(図19(b)のステップS2100〜S2104)、一定時間TCが経過するまでは、ダブルクリックが行なわれる可能性もある。このため、一定時間TCの経過後に、シングルクリックかダブルクリックかを最終決定する必要がある。それ故、シングルクリックの条件が満たされた時、仮クリックフラグにより、最終決定まで、その事実を保持しておくのである。
【0234】
ステップS1266では、MCU3は、シングルクリックの条件が満足されたので、仮クリックフラグをオンにする。そして、ステップS1268にて、MCU3は、消失フラグをオフにしてリターンする。なぜなら、ステップS1262で肯定判断がされているからである。
【0235】
一方、ステップS1272にて、MCU3は、ダブルクリックフラグをオンにする。なぜなら、仮クリックフラグがオンである状態において、さらに、図19(b)のステップS2106,S2108の変化が検出されたからである(ステップS1264にて肯定判断、ステップS1252にて肯定判断、ステップS1262にて肯定判断)。ステップS1274にて、MCU3は、タイマTMを解除する。ステップS1276にて、MCU3は、滞在フラグ、消失フラグ及び仮クリックフラグをオフにしてリターンする。なぜなら、ダブルクリックが決定されているため、これが最終決定だからである。なお、滞在フラグのオフは、矩形範囲52の解除、つまり、クリック操作判定のリセットに相当する。
【0236】
さて、ステップS1250にて肯定判断がされた後、MCU3は、最終決定を行なうべく、ステップS1278に進む。ステップS1278にて、MCU3は、仮クリックフラグがオンか否かを判断し、オンの場合ステップS1280に進み、オフの場合シングルクリックもダブルクリックも行なわれていないためステップS1282に進む。ステップS1280では、MCU3は、シングルクリックフラグをオンにしてステップS1282に進む。
【0237】
ステップS1282にて、MCU3は、タイマTMを解除する。ステップS1284にて、MCU3は、滞在フラグ、消失フラグ及び仮クリックフラグをオフにしてリターンする。なお、滞在フラグのオフは、矩形範囲52の解除、つまり、クリック操作判定のリセットに相当する。
【0238】
なお、シングルクリックフラグ及びダブルクリックフラグは、図3のステップS11にて、コンピュータ11に送信される。
【0239】
さて、以上のように、本実施の形態によれば、ユーザは、1本指を立てた状態から、もう一本の指を立てて2本指を立てた状態にするだけで、擬似的にボタン操作を行なうことができる。このように、ユーザにとって容易なジェスチャにより、擬似的にボタン操作を行なうことができる(図1(b)の第1の例)。
【0240】
また、擬似的なボタン操作の前後において、常に1本の指は撮影されるので、その指先に対応する画面上の位置にカーソルを表示でき、ポインティングと擬似的なボタン操作を片手で行なうことができる(図1(b)の第1の例)。
【0241】
また、本実施の形態によれば、ユーザは、2本指を立てた状態から、もう一本の指を閉じて1本指を立てた状態にするだけで、擬似的にボタン操作を行なうことができる。このように、ユーザにとって容易なジェスチャにより、擬似的にボタン操作を行なうことができる(図1(b)の第2の例)。
【0242】
また、擬似的なボタン操作の前後において、常に1本の指は撮影されるので、その指先に対応する画面上の位置にカーソルを表示でき、ポインティングと擬似的なボタン操作を片手で行なうことができる(図1(b)の第2の例)。
【0243】
さらに、本実施の形態によれば、ユーザは、2本の指の指先を近づけるだけで、擬似的なボタン操作を行なうことができる。このように、ユーザにとって容易なジェスチャにより、擬似的にボタン操作を行なうことができる(図1(b)の第3の例)。
【0244】
また、検出された2つの指先の間(例えば中点)にカーソルを表示することができ、ポインティングと擬似的なボタン操作を片手で行なうことができる(図1(b)の第3の例)。
【0245】
さらに、本実施の形態によれば、ユーザは、三次元空間中で、1本指を立てた状態から、その指を折って、再び、元の立てた状態に戻すというジェスチャを行なうだけで、非接触のクリック操作を行なうことができる。このように、ユーザにとって容易なジェスチャにより、クリック操作を行なうことができる(図19(a)の第4の例)。
【0246】
このような人のジェスチャでは、指が曲げられた後、指先が、ほぼ元の位置に戻ることが、本願発明者の実験により検証されている。このため、このようなジェスチャを検出することにより、クリック操作が行なわれたか否かを、安定して、かつ、確実に、つまり、高い再現性をもって、判断できる。
【0247】
さらに、本実施の形態によれば、ユーザは、三次元空間中で、1本指を立てた状態から、その指を折って、再び、元の立てた状態に戻し、さらに、再び、その指を折って、再び、元の立てた状態に戻すというジェスチャを行なうだけで、つまり、シングルクリック操作のためのジェスチャを2回行なうだけで、非接触のダブルクリック操作を行なうことができる。このように、ユーザにとって容易なジェスチャにより、ダブルクリック操作を行なうことができる(図19(b)の第4の例)。
【0248】
このようなダブルクリック操作は、シングルクリック操作を2回行うものであるところ、折り曲げられた指先は、2回とも、ほぼ同じ位置に戻ってくることが、本願発明者の実験により検証されている。このため、このようなジェスチャを検出することにより、ダブルクリック操作が行なわれたか否かを、安定して、かつ、確実に、つまり、高い再現性をもって、判断できる。
【0249】
また、本実施の形態では、MCU3は、指先50の動きが一定範囲DIS内に収まっている場合に(図20のステップS1208及びS1212で肯定判断)、ユーザがクリック操作(シングルクリック又はダブルクリック)を行なうことを意図しているとみなし、矩形範囲52を設定し(図20のステップS1216)、これをトリガとして、ユーザがクリック操作に対応するジェスチャを行ったか否かを判定できる。このため、ユーザが当該ジェスチャを行なったか否かを、常に判定する必要がなく、処理負荷を軽減できる。
【0250】
さらに、MCU3は、矩形範囲52が設定されてから所定時間TC内に、指先50が矩形範囲52から消失したと判断しない場合(図21のステップS1254)、又は、矩形範囲52に指先が出現したと判断しない場合(図21のステップS1262)、滞在フラグをオフにして、矩形範囲52を解除する(図21のステップS1284)。
【0251】
このように、所定時間TC内に、指先50が矩形範囲52から消失したと判断しない場合、又は、矩形範囲52に指先が出現したと判断しない場合、ユーザがクリック操作(シングルクリック又はダブルクリック)を行なうことを意図していないとみなして、ユーザの意図に反してクリック操作が行なわれたと判定されることを防止できる。つまり、一般にクリック操作は素早く行なわれるところ、所定時間TCを適切に設定することにより、同一の動きであっても、クリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0252】
さらに、本実施の形態によれば、輪郭から大体の指先を決定し(図9のステップS373,S375、図11のステップS445)、その周囲画素のみを用いて補正を行なうので(図12(a)〜図12(d))、処理のための記憶容量の削減と処理速度の向上を図ることができる。
【0253】
また、補正が小数点精度で実行されるので、イメージセンサ5が比較的低解像度であっても、高精度で指先の位置を決定することができる。その結果、イメージセンサ5より高解像度のモニタ13の画面上の、指先に対応する位置にカーソルを表示する場合でも、その動きを滑らかにすることができる。
【0254】
さらに、周囲画素の画素値により、補正を行なうので、補正後の指先を、輪郭線上ではなく、指の内部の位置に決定でき、ユーザが指先と認識する位置により近づけることができる。その結果、指先に対応するモニタ13の画面上の位置にカーソルを表示する場合、ユーザにとって、指先によるカーソルの制御が容易になる。なお、一般に、人は、指の腹を向けて、指を動かすときは、指の輪郭線上の凸点を指先と認識せず、指先端部の指の腹(finger pad)の中心を指先と認識するものである。
【0255】
さらに、本実施の形態では、補正後の指先の位置が、周囲画素の範囲(9×9画素の範囲)を超えるように、補正を行う。このため、補正後の指先の位置を指先端部の指の腹の一定位置あるいは略一定位置に決定することができ、図9のステップS373,S375、及び図11のステップS445により検出された指先の位置が安定していない場合でも、補正後の指先の位置を極力一定させ、あるいは、指先の位置の相違を極力小さい範囲に収めることができる。その結果、指先に対応するモニタ13の画面上の位置にカーソルを表示する場合、カーソルを安定化できる。
【0256】
また、補正後の指先を、ユーザが指先と認識する位置により一層近づけることができる。その結果、指先に対応するモニタ13の画面上の位置にカーソルを表示する場合、ユーザにとって、指先によるカーソルの制御が一層容易になる。
【0257】
さらに、本実施の形態では、指先画素P4と指先画素P4の斜め方向に位置する周囲画素(P0,P2,P6,P8)との間の距離と、指先画素P4と指先画素P4の水平方向又は垂直方向に位置する周囲画素(P1,P3,P5,P7)との間の距離と、が等しくなるように、周囲画素(P0,P2,P6,P8)の座標を定義する(図16(a)参照)。その結果、重みとして画素値を利用するに当って、全周囲画素の画素値が均等に扱われ、方向によって偏りのない補正を行なうことができる。
【0258】
さらに、本実施の形態によれば、電子機器9は、被写体の形状(グー、チョキ、パー、1本指)を入力とした情報処理を実行することができる。
【0259】
さらに、本実施の形態によれば、指先と水かきとの間の画素に基づいて指を特定し(図7のステップS257及びS259、図15参照)、輪郭画像の重心により指を特定しないので、重心により指を特定する場合と比較して、精度良く指を特定でき(図7)、ひいてはより精度良く手の形状を判定できる(図8、図9)。一般に、輪郭画像の重心と、被写体の重心と、は一致しない場合も多く、この場合に、重心により指を特定すると、認識の精度が低くなる。
【0260】
また、指先と水かきとの間の画素に基づいて得られた、隣り合う指と指とがなす角度だけでなく、重心から指先に相当する画素までの距離に基づいて、手の形状を判断するので(図9のステップS345〜S351)、より多様な手の形状を判定できる(図9)。例えば、手の形状が「チョキ」であることを判定できる。
【0261】
また、重心から輪郭線上の画素までの距離を求めるといった簡単な計算で(図6のステップS203)、手の形状を判定できる(図10)。例えば、重心から輪郭線上の画素までの距離が、一定範囲内の場合に、手の形状が「グー」であることを判定できる。
【0262】
さらに、本実施の形態によれば、図7のステップS275の結果だけに基づいて、検出された指先の数を判断するのではなく、さらに、重心座標(Xg,Yg)と凸点(図4のステップS33)の画素Pjの座標との間の距離Dを加味して(図11のステップS427,S441)、指が1本だけ立っている状態か否かを判定する。このため、より精度よく、指が1本だけ立っている状態を検出できる。
【0263】
さらに、本実施の形態によれば、画像上の被写体の面積は(図6のステップS213)、イメージセンサ5と被写体との間の距離に相関するので、面積により、イメージセンサ5と被写体との間の距離を容易に判断できる。
【0264】
なお、本発明は、上記の実施の形態に限られるものではなく、その要旨を逸脱しない範囲で種々の態様において実施することが可能であり、例えば、以下のような変形も可能である。
【0265】
(1)上記では、「グー」、「チョキ」、「パー」、及び「1本指」の形状を認識したが、これに限定されない。
【0266】
(2)画像処理装置1は、間欠的に点滅する赤外発光ダイオードを搭載することもできる。この場合、イメージセンサ5は、赤外光発光時及び消灯時のそれぞれにおいて撮影処理を実行し、発光時画像と消灯時画像との差分画像を生成して、MCU3に出力する。MCU3は、その差分画像から手を検出する。このように、差分といった簡易な処理で、背景画像を容易に除去できる。
【0267】
この場合、イメージセンサ5は、差分画像の各画素(例えばグレースケール)をシリアルに出力するところ、MCU3は、イメージセンサ5から受け取った画素を、順次、所定の閾値と比較して、2値化し、メモリ7に格納する。そして、MCU3は、2値化後の差分画像に基づいて、上述した各種処理を実行する。また、図12(a)〜図12(d)に示す指先補正値計算処理を実行する場合は、MCU3は、画素値p0〜p8を、イメージセンサ5から順次取得し、計算式に代入して、補正値(Xc,Yc)を算出する。なお、イメージセンサ5は、MCU3による2値化のために差分画像を出力した後でも、一定時間は(次の撮影処理までは)、差分画像データを保持しているので、指先補正値計算処理では、そこから必要な画素を取得することができる。
【0268】
以上のように、2値化された差分画像をメモリ7に格納することで、メモリ容量を削減できる。また、指先補正値計算処理においても、メモリ7に格納した3×3画素(例えばグレースケール)を処理するのではなく、イメージセンサ5からの出力画素を順次処理しており、これもまたメモリ容量を削減できる。もちろん、イメージセンサ5が出力した差分画像をそのままメモリ7に格納して処理することもできる。
【0269】
(3)上記では、指先画素P4を原点(0,0)として、周囲画素の座標値を設定し、補正値(Xc,Yc)を算出し、それを指先画素P4の座標(Xb,Yb)に加算することで、補正座標(Xf,Yf)を得た(図16(a)及び図16(b))。ただし、図12の第1〜第4の例の各式で使用する座標の原点は、これに限定されない。例えば、図9のステップS373,S375、及び図11のステップS445で求められた座標を、そのまま、指先画素P4の座標として使用して、周囲画素の座標を定め、補正座標(Xf,Yf)を求めることもできる。この場合は、図12(a)〜図12(d)の各ステップで得られた値(Xc,Yc)が、補正座標(Xf,Yf)そのものであり、加算は不要である。
【0270】
(4)図19(a)の第4の例では、所定時間TC内に、シングルクリック操作に対応するジェスチャが検出されない場合は、矩形範囲52が解除されシングルクリック操作判定がリセットされた(図21のステップS1284)。
【0271】
ただし、MCU3が、指先50が矩形範囲52から消失したと判断した後(ステップS1254で肯定判断)の所定時間TC2内に、指先50が矩形範囲52に出現したと判断しない場合、矩形範囲52を解除し、シングルクリック操作判定をリセットしてもよい。なお、MCU3が、矩形範囲52設定後所定時間TC内に、指先50が矩形範囲52から消失したと判断しない場合に、矩形範囲52を解除する点は、図21と同じである。
【0272】
このように、所定時間TC2内に、MCU3が、指先50が矩形範囲52に出現したと判断しない場合、ユーザがクリック操作を行なうことを意図していないとみなして、ユーザの意図に反してクリック操作が行なわれたと判定されることを防止できる。つまり、一般にクリック操作は素早く行なわれるところ、所定時間TC2を適切に設定することにより、同一の動きであっても、クリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0273】
また、図19(b)の第4の例では、所定時間TC内に、ダブルクリック操作に対応するジェスチャが検出されない場合は、ダブルクリック操作判定がリセットされた(図21のステップS1284)。
【0274】
ただし、仮クリックフラグがオンになった後において、MCU3が、指先50が矩形範囲52から消失したと判断した後の所定時間TC3内に、指先50が矩形範囲52に出現したと判断しない場合、矩形範囲52を解除し、ダブルクリック操作判定をリセットしてもよい。なお、仮クリックフラグがオンになった後において、MCU3が、矩形範囲52の設定後所定時間TC内に、指先50が矩形範囲52から消失したと判断しない場合に、矩形範囲52を解除する点は、図21と同じである。また、仮クリックフラグがオンになるまでの判定(シングルクリックの判定)は図21又は上記変形と同じである。
【0275】
このように、所定時間TC3内に、MCU3が、指先50が矩形範囲52に出現したと判断しない場合、ユーザがダブルクリック操作を行なうことを意図していないとみなして、ユーザの意図に反してダブルクリック操作が行なわれたと判定されることを防止できる。つまり、一般にダブルクリック操作は素早く行なわれるところ、所定時間TC3を適切に設定することにより、同一の動きであっても、ダブルクリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0276】
また、MCU3が、指先50が矩形範囲に出現したと判断してから、つまり、仮クリックフラグをオンにしてから所定時間TC4内に、指先50が矩形範囲52から消失したと判断しない場合、矩形範囲52を解除し、ダブルクリック操作判定をリセットしてもよい。なお、仮クリックフラグがオンになるまでの判定(シングルクリックの判定)は図21又は上記変形と同じである。
【0277】
このように、所定時間TC4内に、MCU3が、指先50が矩形範囲52から消失したと判断しない場合、ユーザがダブルクリック操作を行なうことを意図していないとみなして、ユーザの意図に反してダブルクリック操作が行なわれたと判定されることを防止できる。つまり、一般にダブルクリック操作は素早く行なわれるところ、所定時間TC4を適切に設定することにより、同一の動きであっても、ダブルクリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0278】
さらに、この場合、MCU3が、仮クリックフラグをオンにしてから所定時間TC4内に、指先50の消失の後、再び指先50が矩形範囲52に出現したと判断しない場合、矩形範囲52を解除し、ダブルクリック操作判定をリセットしてもよい。
【0279】
このように、所定時間TC4内に、MCU3が、指先50が矩形範囲52に出現したと判断しない場合、ユーザがダブルクリック操作を行なうことを意図していないとみなして、ユーザの意図に反してダブルクリック操作が行なわれたと判定されることを防止できる。つまり、一般にダブルクリック操作は素早く行なわれるところ、所定時間TC4を適切に設定することにより、同一の動きであっても、ダブルクリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0280】
また、このような判定に代えて、MCU3が、仮クリックフラグをオンにしてから所定時間TC4内の指先50の消失の後の所定時間TC5内に、指先50が矩形範囲52に出現したと判断しない場合、矩形範囲52を解除し、ダブルクリック操作判定をリセットすることもできる。
【0281】
このように、所定時間TC5内に、MCU3が、指先50が矩形範囲52に出現したと判断しない場合、ユーザがダブルクリック操作を行なうことを意図していないとみなして、ユーザの意図に反してダブルクリック操作が行なわれたと判定されることを防止できる。つまり、一般にダブルクリック操作は素早く行なわれるところ、所定時間TC5を適切に設定することにより、同一の動きであっても、ダブルクリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0282】
ここで、上記の所定時間TC2〜TC5は、実験及び試行錯誤等により決定される。
【0283】
(5)MCU3が行なう処理の全部又は一部をコンピュータ11が行なうこともできる。要するに、どちらがどの処理を行なうかは、仕様に応じて、任意に決定できる。
【0284】
(6)MCU3に各種の処理を行わせるためのプログラムを記述する処理ステップは、必ずしもフローチャートとして記載された順序に沿って時系列に処理する必要はなく、また、並列的あるいは個別に実行される処理も含むものである。
【0285】
(7)本明細書及び請求の範囲において、手段とは必ずしも物理的手段を意味するものではなく、各手段の機能がソフトウェアによって実現される場合も含む。さらに、1つの手段の機能が2つ以上の物理的手段により実現されても、もしくは2つ以上の手段の機能が1つの物理的手段により実現されてもよい。
【産業上の利用可能性】
【0286】
本発明は、表示装置にカーソルを表示してポインティングを行なうポインティングデバイスの分野に利用可能である。
【0287】
また、本発明は、画像解析により指先を検出する画像解析の分野に利用可能である。
【符号の説明】
【0288】
1…画像処理装置、3…MCU、5…イメージセンサ、7…メモリ、9…電子機器、11…コンピュータ、13…モニタ。
【技術分野】
【0001】
本発明は、ジェスチャにより非接触で機器を操作する際に、クリック操作が行なわれたか否かを判定する操作判定装置及びその関連技術に関する。
【0002】
また、本発明は、ジェスチャにより非接触で機器を操作する際に、擬似的にボタン操作が行なわれたか否かを判定する操作判定装置及びその関連技術に関する。
【0003】
さらに、本発明は、人の手を撮像して、撮像画像から指先を検出する指先検出装置及びその関連技術に関する。
【背景技術】
【0004】
特許文献1のカーソル操作装置は、カメラにより三次元空間中のユーザのジェスチャを検出して、非接触で機器を操作するためのカーソルを制御する。つまり、このカーソル操作装置は、画面を指し示す指先を検出し、その指先の位置に対応する画面上の位置にカーソルを表示する。そして、カーソル操作装置は、画面に表示されたボタンの上にカーソルが一定時間滞在すると、クリック操作がなされたと判断し、そのボタンが押下されたとみなす。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2004−258837
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、ユーザは、クリック操作のために、指先を一定時間静止させなければならず、それを三次元空間中で行なうのは、困難な場合も多い。
【0007】
また、カメラによる画像の精度でしか、指先の位置を求めることができない。従って、カメラの画像が低解像度で、カーソルを表示する画面が高解像度である場合、カーソルを滑らかに動かすことができず、不連続な動きになる。
【0008】
そこで、本発明は、ユーザにとって容易なジェスチャにより、クリック操作が行なわれたと判定する操作判定装置及びその関連技術を提供することを目的とする。
【0009】
本発明の他の目的は、ユーザにとって容易なジェスチャにより、擬似的にボタン操作が行なわれたと判定する操作判定装置及びその関連技術を提供することである。
【0010】
本発明のさらに他の目的は、人の指を撮影して得られた低解像度の画像から、高精度で指先の位置を検出することができ、かつ、記憶容量の削減と処理の高速化を図ることができる指先検出装置及びその関連技術を提供することである。
【課題を解決するための手段】
【0011】
本発明の第1の観点によれば、操作判定装置は、三次元空間中で動かされるユーザの手を撮影する撮影手段と、撮影により得られた画像から、前記ユーザの指先に相当する部分を検出する検出手段と、検出された前記指先に相当する部分を含む所定範囲を設定する設定手段と、前記設定手段が、前記所定範囲を設定した後、前記指先に相当する部分が消失したか否かを判断する第1判断手段と、前記第1判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断した後、前記指先に相当する部分が前記所定範囲に出現したか否かを判断する第2判断手段と、前記第2判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断した場合に、クリック操作が行なわれたと判定する判定手段と、を備える。
【0012】
この構成によれば、ユーザは、三次元空間中で、1本指を立てた状態から、その指を折って、再び、元の立てた状態に戻すというジェスチャを行なうだけで、非接触のクリック操作を行なうことができる。このように、ユーザにとって容易なジェスチャにより、クリック操作を行なうことができる。
【0013】
このような人のジェスチャでは、指が曲げられた後、指先が、ほぼ元の位置に戻ることが、本願発明者の実験により検証されている。このため、このようなジェスチャを検出することにより、クリック操作が行なわれたか否かを、安定して、かつ、確実に、つまり、高い再現性をもって、判断できる。
【0014】
この操作判定装置において、前記設定手段は、検出された前記指先に相当する部分の動きが一定範囲内に収まっている場合に、前記所定範囲を設定する。
【0015】
この構成によれば、前記指先に相当する部分の動きが一定範囲内に収まっている場合に、ユーザがクリック操作を行なうことを意図しているとみなし、所定範囲を設定し、これをトリガとして、ユーザがクリック操作に対応するジェスチャを行ったか否かを判定できる。このため、ユーザが当該ジェスチャを行なったか否かを、常に判定する必要がなく、処理負荷を軽減できる。
【0016】
上記操作判定装置において、前記設定手段は、前記所定範囲が設定されてから第1所定時間内に、前記第1判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断しない場合、前記所定範囲を解除する。
【0017】
この構成によれば、第1所定時間内に、第1判断手段が、指先に相当する部分が所定範囲から消失したと判断しない場合、ユーザがクリック操作を行なうことを意図していないとみなして、ユーザの意図に反してクリック操作が行なわれたと判定されることを防止できる。つまり、一般にクリック操作は素早く行なわれるところ、第1所定時間を適切に設定することにより、同一の動きであっても、クリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0018】
この操作判定装置において、前記設定手段は、前記所定範囲が設定されてから前記第1所定時間内に、前記第2判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断しない場合、前記所定範囲を解除する。
【0019】
この構成によれば、第1所定時間内に、第2判断手段が、指先に相当する部分が所定範囲に出現したと判断しない場合、ユーザがクリック操作を行なうことを意図していないとみなして、ユーザの意図に反してクリック操作が行なわれたと判定されることを防止できる。つまり、一般にクリック操作は素早く行なわれるところ、第1所定時間を適切に設定することにより、同一の動きであっても、クリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0020】
また、上記操作判定装置において、前記設定手段は、前記第1判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断した後、第2所定時間内に、前記第2判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断しない場合、前記所定範囲を解除することもできる。
【0021】
この構成によれば、第2所定時間内に、第2判断手段が、指先に相当する部分が所定範囲に出現したと判断しない場合、ユーザがクリック操作を行なうことを意図していないとみなして、ユーザの意図に反してクリック操作が行なわれたと判定されることを防止できる。つまり、一般にクリック操作は素早く行なわれるところ、第2所定時間を適切に設定することにより、同一の動きであっても、クリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0022】
上記操作判定装置は、前記第2判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断した後、前記指先に相当する部分が消失したか否かを判断する第3判断手段と、前記第3判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断した後、前記指先に相当する部分が前記所定範囲に出現したか否かを判断する第4判断手段と、をさらに備え、前記判定手段は、前記第4判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断した場合に、ダブルクリック操作が行なわれたと判定する。
【0023】
この構成によれば、ユーザは、三次元空間中で、1本指を立てた状態から、その指を折って、再び、元の立てた状態に戻し、さらに、再び、その指を折って、再び、元の立てた状態に戻すというジェスチャを行なうだけで、つまり、上記クリック操作(シングルクリック操作)のためのジェスチャを2回行なうだけで、非接触のダブルクリック操作を行なうことができる。このように、ユーザにとって容易なジェスチャにより、ダブルクリック操作を行なうことができる。
【0024】
このようなダブルクリック操作は、上記シングルクリック操作を2回行うものであるところ、折り曲げられた指先は、2回とも、ほぼ同じ位置に戻ってくることが、本願発明者の実験により検証されている。このため、このようなジェスチャを検出することにより、ダブルクリック操作が行なわれたか否かを、安定して、かつ、確実に、つまり、高い再現性をもって、判断できる。
【0025】
この操作判定装置において、前記設定手段は、前記所定範囲が設定されてから前記第1所定時間内に、前記第3判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断しない場合、前記所定範囲を解除する。
【0026】
この構成によれば、第1所定時間内に、第3判断手段が、指先に相当する部分が所定範囲から消失したと判断しない場合、ユーザがダブルクリック操作を行なうことを意図していないとみなして、ユーザの意図に反してダブルクリック操作が行なわれたと判定されることを防止できる。つまり、一般にダブルクリック操作は素早く行なわれるところ、第1所定時間を適切に設定することにより、同一の動きであっても、ダブルクリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0027】
この操作判定装置において、前記設定手段は、前記所定範囲が設定されてから前記第1所定時間内に、前記第4判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断しない場合、前記所定範囲を解除する。
【0028】
この構成によれば、第1所定時間内に、第4判断手段が、指先に相当する部分が所定範囲に出現したと判断しない場合、ユーザがダブルクリック操作を行なうことを意図していないとみなして、ユーザの意図に反してダブルクリック操作が行なわれたと判定されることを防止できる。つまり、一般にダブルクリック操作は素早く行なわれるところ、第1所定時間を適切に設定することにより、同一の動きであっても、ダブルクリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0029】
また、上記操作判定装置において、前記設定手段は、前記第3判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断した後、第3所定時間内に、前記第4判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断しない場合、前記所定範囲を解除することもできる。
【0030】
この構成によれば、第3所定時間内に、第4判断手段が、指先に相当する部分が所定範囲に出現したと判断しない場合、ユーザがダブルクリック操作を行なうことを意図していないとみなして、ユーザの意図に反してダブルクリック操作が行なわれたと判定されることを防止できる。つまり、一般にダブルクリック操作は素早く行なわれるところ、第3所定時間を適切に設定することにより、同一の動きであっても、ダブルクリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0031】
上記操作判定装置において、前記設定手段は、前記第2判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断してから、第4所定時間内に、前記第3判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断しない場合、前記所定範囲を解除する。
【0032】
この構成によれば、第4所定時間内に、第3判断手段が、指先に相当する部分が所定範囲から消失したと判断しない場合、ユーザがダブルクリック操作を行なうことを意図していないとみなして、ユーザの意図に反してダブルクリック操作が行なわれたと判定されることを防止できる。つまり、一般にダブルクリック操作は素早く行なわれるところ、第4所定時間を適切に設定することにより、同一の動きであっても、ダブルクリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0033】
この操作判定装置において、前記設定手段は、前記第4所定時間内に、前記第4判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断しない場合、前記所定範囲を解除する。
【0034】
この構成によれば、第4所定時間内に、第4判断手段が、指先に相当する部分が所定範囲に出現したと判断しない場合、ユーザがダブルクリック操作を行なうことを意図していないとみなして、ユーザの意図に反してダブルクリック操作が行なわれたと判定されることを防止できる。つまり、一般にダブルクリック操作は素早く行なわれるところ、第4所定時間を適切に設定することにより、同一の動きであっても、ダブルクリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0035】
また、上記操作判定装置において、前記設定手段は、前記第3判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断した後、第5所定時間内に、前記第4判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断しない場合、前記所定範囲を解除することもできる。
【0036】
この構成によれば、第5所定時間内に、第4判断手段が、指先に相当する部分が所定範囲に出現したと判断しない場合、ユーザがダブルクリック操作を行なうことを意図していないとみなして、ユーザの意図に反してダブルクリック操作が行なわれたと判定されることを防止できる。つまり、一般にダブルクリック操作は素早く行なわれるところ、第5所定時間を適切に設定することにより、同一の動きであっても、ダブルクリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0037】
本発明の第2の観点によれば、操作判定装置は、三次元空間中で動かされるユーザの手を撮影する撮影手段と、撮影により得られた画像から、前記ユーザの指に相当する部分を検出する検出手段と、今回前記ユーザの指に相当する部分が1つ検出された場合において、前回前記ユーザの指に相当する部分が2つ検出されていたとき、擬似的にボタン操作が行なわれたと判定する判定手段と、を備える。
【0038】
この構成によれば、ユーザは、1本指を立てた状態から、もう一本の指を立てて2本指を立てた状態にするだけで、擬似的にボタン操作を行なうことができる。このように、ユーザにとって容易なジェスチャにより、擬似的にボタン操作を行なうことができる。
【0039】
また、擬似的なボタン操作の前後において、常に1本の指は撮影されるので、その指先に対応する画面上の位置にカーソルを表示でき、ポインティングと擬似的なボタン操作を片手で行なうことができる。
【0040】
ここで、本明細書及び特許請求の範囲において、「擬似的なボタン操作」とは、ポインティングデバイス等のデバイスの実際のボタンの操作ではないが、実際のボタンを操作する場合と同等の情報ないしは命令を、三次元空間中のジェスチャにより、コンピュータに与えることを意味する。
【0041】
本発明の第3の観点によれば、操作判定装置は、三次元空間中で動かされるユーザの手を撮影する撮影手段と、撮影により得られた画像から、前記ユーザの指に相当する部分を検出する検出手段と、今回前記ユーザの指に相当する部分が2つ検出された場合において、前回前記ユーザの指に相当する部分が1つ検出されていたとき、擬似的にボタン操作が行なわれたと判定する判定手段と、を備える。
【0042】
この構成によれば、ユーザは、2本指を立てた状態から、もう一本の指を閉じて1本指を立てた状態にするだけで、擬似的にボタン操作を行なうことができる。このように、ユーザにとって容易なジェスチャにより、擬似的にボタン操作を行なうことができる。
【0043】
また、擬似的なボタン操作の前後において、常に1本の指は撮影されるので、その指先に対応する画面上の位置にカーソルを表示でき、ポインティングと擬似的なボタン操作を片手で行なうことができる。
【0044】
本発明の第4の観点によれば、操作判定装置は、三次元空間中で動かされるユーザの手を撮影する撮影手段と、撮影により得られた画像から、前記ユーザの指先に相当する部分を検出する検出手段と、前記ユーザの指先に相当する部分が2つ検出された場合において、その2点間の距離が所定値より小さい場合に、擬似的にボタンが行なわれたと判定する判定手段と、を備える。
【0045】
この構成によれば、ユーザは、2本の指の指先を近づけるだけで、擬似的にボタン操作を行なうことができる。このように、ユーザにとって容易なジェスチャにより、擬似的にボタン操作を行なうことができる。
【0046】
また、検出された2つの指先の間(例えば中点)にカーソルを表示することができ、ポインティングと擬似的なボタン操作を片手で行なうことができる。
【0047】
本発明の第5の観点によれば、指先検出装置は、三次元空間中で動かされるユーザの手を撮影する撮影手段と、撮影により得られた画像から、前記手の像の輪郭を検出する輪郭検出手段と、前記輪郭から、前記手の指先に相当する部分の画素(以下、「指先画素」と呼ぶ。)を検出する指先検出手段と、前記指先画素の周囲の画素(以下、「周囲画素」と呼ぶ。)の画素値及び座標を用いて、前記指先検出手段により検出された前記指先画素の座標を小数点精度で補正する補正手段と、を備える。
【0048】
この構成によれば、輪郭から大体の指先を決定し、その周囲画素のみを用いて補正を行なうので、処理のための記憶容量の削減と処理速度の向上を図ることができる。
【0049】
また、補正が小数点精度で実行されるので、撮像手段が比較的低解像度であっても、高精度で指先の位置を決定することができる。その結果、撮影手段より高解像度の画面上の、指先に対応する位置にカーソルを表示する場合でも、その動きを滑らかにすることができる。
【0050】
さらに、周囲画素の画素値により、補正を行なうので、補正後の指先を、輪郭線上ではなく、指の内部の位置に決定でき、ユーザが指先と認識する位置により近づけることができる。その結果、指先に対応する画面上の位置にカーソルを表示する場合、ユーザにとって、指先によるカーソルの制御が容易になる。なお、一般に、人は、指の腹を向けて、指を動かすときは、指の輪郭線上の凸点を指先と認識せず、指先端部の指の腹(finger pad)の中心を指先と認識するものである。
【0051】
この指先検出装置において、前記補正値算出手段は、前記指先画素及び前記周囲画素の画素値を重みとし、前記指先画素及び前記周囲画素の座標の加重平均を算出し、前記指先画素の座標を補正する。
【0052】
上記指先検出装置において、前記補正値算出手段は、補正後の指先の位置が、前記周囲画素の範囲を超えるように、前記補正を行う。
【0053】
この構成によれば、補正後の指先の位置を指先端部の指の腹の一定位置あるいは略一定位置に決定することができ、輪郭検出手段により検出された指先の位置が安定していない場合でも、補正後の指先の位置を極力一定させ、あるいは、指先の位置の相違を極力小さい範囲に収めることができる。その結果、指先に対応する画面上の位置にカーソルを表示する場合、カーソルを安定化できる。
【0054】
また、補正後の指先を、ユーザが指先と認識する位置により一層近づけることができる。その結果、指先に対応する画面上の位置にカーソルを表示する場合、ユーザにとって、指先によるカーソルの制御が一層容易になる。
【0055】
上記指先検出装置において、前記補正値算出手段は、前記指先画素及び前記周囲画素の画素値を、前記指先画素及び前記周囲画素の座標への重みとし、重み付けされた前記指先画素及び前記周囲画素の座標の和を算出し、その和を、前記指先画素及び前記周囲画素の画素値のうちの最大値で除することにより、前記指先画素の座標を補正することもできる。
【0056】
上記指先検出装置において、前記補正値算出手段は、前記指先画素と前記指先画素の斜め方向に位置する前記周囲画素との間の距離と、前記指先画素と前記指先画素の水平方向又は垂直方向に位置する前記周囲画素との間の距離と、が等しくなるように、前記周囲画素の座標を定義する。
【0057】
この構成によれば、画素値を利用するに当って、全周囲画素の画素値が均等に扱われ、方向によって偏りのない補正を行なうことができる。
【0058】
本発明の第6の観点によれば、操作判定方法は、三次元空間中で動かされるユーザの手を撮影するステップと、撮影により得られた画像から、前記ユーザの指先に相当する部分を検出するステップと、検出された前記指先に相当する部分を含む所定範囲を設定するステップと、前記所定範囲を設定した後、前記指先に相当する部分が消失したか否かを判断するステップと、消失したか否かを判断する前記ステップが、前記指先に相当する部分が前記所定範囲から消失したと判断した後、前記指先に相当する部分が前記所定範囲に出現したか否かを判断するステップと、出現したか否かを判断する前記ステップが、前記指先に相当する部分が前記所定範囲に出現したと判断した場合に、クリック操作が行なわれたと判定するステップと、を含む。
【0059】
この構成によれば、上記第1の観点による操作判定装置と同様の効果を奏する。
【0060】
本発明の第7の観点によれば、操作判定方法は、三次元空間中で動かされるユーザの手を撮影するステップと、撮影により得られた画像から、前記ユーザの指に相当する部分を検出するステップと、今回前記ユーザの指に相当する部分が1つ検出された場合において、前回前記ユーザの指に相当する部分が2つ検出されていたとき、擬似的にボタン操作が行なわれたと判定するステップと、を含む。
【0061】
この構成によれば、上記第2の観点による操作判定装置と同様の効果を奏する。
【0062】
本発明の第8の観点によれば、操作判定方法は、三次元空間中で動かされるユーザの手を撮影するステップと、撮影により得られた画像から、前記ユーザの指に相当する部分を検出するステップと、今回前記ユーザの指に相当する部分が2つ検出された場合において、前回前記ユーザの指に相当する部分が1つ検出されていたとき、擬似的にボタン操作が行なわれたと判定するステップと、を含む。
【0063】
この構成によれば、上記第3の観点による操作判定装置と同様の効果を奏する。
【0064】
本発明の第9の観点によれば、操作判定方法は、三次元空間中で動かされるユーザの手を撮影するステップと、撮影により得られた画像から、前記ユーザの指先に相当する部分を検出するステップと、前記ユーザの指先に相当する部分が2つ検出された場合において、その2点間の距離が所定値より小さい場合に、擬似的にボタン操作が行なわれたと判定するステップと、を含む。
【0065】
この構成によれば、上記第4の観点による操作判定装置と同様の効果を奏する。
【0066】
本発明の第10の観点によれば、指先検出方法は、三次元空間中で動かされるユーザの手を撮影するステップと、撮影により得られた画像から、前記手の像の輪郭を検出するステップと、前記輪郭から、前記手の指先に相当する部分の画素(以下、「指先画素」と呼ぶ。)を検出するステップと、前記指先画素の周囲の画素(以下、「周囲画素」と呼ぶ。)の画素値及び座標を用いて、前記指先画素を検出する前記ステップにより検出された前記指先画素の座標を小数点精度で補正するステップと、を含む。
【0067】
この構成によれば、上記第5の観点による指先検出装置と同様の効果を奏する。
【0068】
本発明の第11の観点によれば、コンピュータプログラムは、上記第6の観点による操作判定方法をコンピュータに実行させる。
【0069】
本発明の第12の観点によれば、コンピュータプログラムは、上記第7の観点による操作判定方法をコンピュータに実行させる。
【0070】
本発明の第13の観点によれば、コンピュータプログラムは、上記第8の観点による操作判定方法をコンピュータに実行させる。
【0071】
本発明の第14の観点によれば、コンピュータプログラムは、上記第9の観点による操作判定方法をコンピュータに実行させる。
【0072】
本発明の第15の観点によれば、コンピュータプログラムは、上記第10の観点による指先検出方法をコンピュータに実行させる。
【図面の簡単な説明】
【0073】
【図1】(a)本発明の実施の形態による擬似ボタン操作の説明図である。(b)本発明の実施の形態による擬似ボタン操作の第1〜第3の例の説明図である。
【図2】本発明の実施の形態による画像処理装置1の電気的構成を示す図である。
【図3】図2のMCU3による画像解析処理の流れの一例を示すフローチャートである。
【図4】図3のステップS5の変曲点の検出処理の流れの一例を示すフローチャートである。
【図5】図3のステップS7の輪郭画像の形状を判定する処理の流れの一例を示すフローチャートである。
【図6】図5のステップS161の輪郭情報を算出する処理の流れの一例を示すフローチャートである。
【図7】図5のステップS163の指先を検出する処理の流れの一例を示すフローチャートである。
【図8】図5のステップS165の「パー」を判定する処理の流れの一例を示すフローチャートである。
【図9】図5のステップS167の「チョキ」を判定する処理の流れの一例を示すフローチャートである。
【図10】図5のステップS169の「グー」を判定する処理の流れの一例を示すフローチャートである。
【図11】図5のステップS171の一本指を判定する処理の流れの一例を示すフローチャートである。
【図12】(a)図9のステップS377及び図11のステップS447の指先補正値計算処理の第1の例の流れを示すフローチャートである。(b)図9のステップS377及び図11のステップS447の指先補正値計算処理の第2の例の流れを示すフローチャートである。(c)図9のステップS377及び図11のステップS447の指先補正値計算処理の第3の例の流れを示すフローチャートである。(d)図9のステップS377及び図11のステップS447の指先補正値計算処理の第4の例の流れを示すフローチャートである。
【図13】(a)図3のステップS9の擬似ボタン操作判定処理の第1の例の流れを示すフローチャートである。(b)図3のステップS9の擬似ボタン操作判定処理の第2の例の流れを示すフローチャートである。(c)図3のステップS9の擬似ボタン操作判定処理の第3の例の流れを示すフローチャートである。
【図14】図3のステップS3で検出される偏角θjの説明図である。
【図15】図3のステップS5で検出される変曲点及び図5のステップS163で検出される指先の説明図である。
【図16】(a)図12(a)及び図12(c)の指先補正値計算処理の説明図である。(b)図12(b)及び図12(d)の指先補正値計算処理の説明図である。
【図17】指先補正値計算処理における除数の説明図である。
【図18】(a)図3のステップS9の擬似ボタン操作判定処理の第4の例の流れを示すフローチャートである。(b)図3のステップS9の擬似ボタン操作判定処理の第5の例の流れを示すフローチャートである。(c)図3のステップS9の擬似ボタン操作判定処理の第6の例の流れを示すフローチャートである。
【図19】(a)本発明の実施の形態による擬似ボタン操作の第4の例(シングルクリック)の説明図である。(b)本発明の実施の形態による擬似ボタン操作の第4の例(ダブルクリック)の説明図である。
【図20】図3のステップS9の擬似ボタン操作判定処理の第7の例の流れの一部を示すフローチャートである。
【図21】図3のステップS9の擬似ボタン操作判定処理の第7の例の流れの他の一部を示すフローチャートである。
【発明を実施するための形態】
【0074】
以下、本発明の実施の形態について、図面を参照しながら説明する。なお、図中、同一または相当部分については同一の参照符号を付してその説明を援用する。また、本明細書において、数字の後尾に付した「h」は、16進数であることを示す。
【0075】
図1(a)及び図1(b)は、本発明の実施の形態による擬似ボタン操作の説明図である。図1(a)を参照して、後述する画像処理装置1は、ユーザ(人)の手を撮影し、得られた画像を解析することによって、指先a及びbの位置を求める。この例では、指先aは、人差し指の指先であり、指先bは、親指の指先である。
【0076】
図1(b)を参照して、第1の例では、後述する電子機器9は、画像処理装置1から指先aの位置を受け取って、後述するモニタ13の画面上の対応する位置にカーソルを表示する。また、画像処理装置1は、撮影画像中に指先aと指先bとが存在する状態から、撮影画像中に指先aのみが存在する状態へ遷移したことを検出すると、例えば、二本の指(親指及び人差し指)が写っている状態から、カーソルの位置に関係ない一本の指(親指)が折り曲げられ、カーソルの位置を制御する他の一本の指(人差し指)のみが写っている状態に遷移したことを検出すると、ユーザが擬似的にボタン操作を行なったと判定し、擬似的にボタン操作が行なわれたことを電子機器9に通知する。すると、電子機器9は、ボタン操作に応じた処理を実行する。
【0077】
第2の例では、電子機器9は、画像処理装置1から指先aの位置を受け取って、モニタ13の画面上の対応する位置にカーソルを表示する。また、画像処理装置1は、撮影画像中に指先aのみが存在する状態から、撮影画像中に指先aと指先bとが存在する状態へ遷移したことを検出すると、例えば、カーソルの位置に関係ない一本の指(親指)が折り曲げられ、カーソルの位置を制御する他の一本の指(人差し指)のみが写っている状態から、二本の指(親指及び人差し指)が写っている状態に遷移したことを検出すると、ユーザが擬似的にボタン操作を行なったと判定し、擬似的にボタン操作が行なわれたことを電子機器9に通知する。すると、電子機器9は、ボタン操作に応じた処理を実行する。
【0078】
第3の例では、電子機器9は、画像処理装置1から指先aの位置と指先bの位置との中点の位置を受け取って、モニタ13の画面上の対応する位置にカーソルを表示する。また、画像処理装置1は、指先aと指先bとの間の距離を算出して、その距離が一定値以下になったことを検出すると、つまり、指先aと指先bとが近づいて、その距離が一定値以下になると、ユーザが擬似的にボタン操作を行なったと判定し、擬似的にボタン操作が行なわれたことを電子機器9に通知する。すると、電子機器9は、ボタン操作に応じた処理を実行する。
【0079】
ここで、上記第1〜第3の例において、擬似的にボタン操作が行われたと判定されたことを、ボタンのプレス操作(ボタンを押したままの状態)が行なわれたとみなすこともできるし、あるいは、クリック操作(ボタンを押下して放す操作)が行なわれたとみなすこともできる。
【0080】
なお、擬似的にボタン操作が行われたと判定されたことを、ボタンのプレス操作が行なわれたとみなす場合、ボタンを放したとみなす操作は、次のようにして判定される。
【0081】
第1の例では、画像処理装置1は、撮影画像中に指先aのみが存在する状態から、撮影画像中に指先aと指先bとが存在する状態へ遷移したことを検出すると、ユーザが擬似的にボタンを放す操作を行なったと判定し、擬似的にボタンを話す操作が行なわれたことを電子機器9に通知する。
【0082】
第2の例では、画像処理装置1は、撮影画像中に指先aと指先bとが存在する状態から、撮影画像中に指先aのみが存在する状態へ遷移したことを検出すると、ユーザが擬似的にボタンを放す操作を行なったと判定し、擬似的にボタンを放す操作が行なわれたことを電子機器9に通知する。
【0083】
第3の例では、画像処理装置1は、指先aと指先bとの間の距離を算出して、その距離が一定値以下になった後、再び、その距離が一定値を超えたことを検出すると、ユーザが擬似的にボタンを放す操作を行なったと判定し、擬似的にボタンを放す操作が行なわれたことを電子機器9に通知する。
【0084】
なお、「擬似的なボタン操作」とは、ポインティングデバイス等のデバイスの実際のボタンの操作ではないが、実際のボタンを操作する場合と同等の情報ないしは命令を、三次元空間中のジェスチャにより、コンピュータに与えることを意味する。
【0085】
図2は、本発明の実施の形態による画像処理装置1の電気的構成を示す図である。図1を参照して、この画像処理装置1は、MCU(Micro Controler Unit)3及びイメージセンサ5を含む。MCU3は、メモリ7を含む。イメージセンサ5は、カラー及びグレースケールのいずれでも使用でき、また、その画素数も任意のものを使用できるが、本実施の形態では、グレースケールで、64×64画素の比較的低解像度のものを使用する。また、イメージセンサ5としては、CMOSイメージセンサやCCDイメージセンサ等を採用できる。
【0086】
MCU3のメモリ7は、RAM、ROM、及びフラッシュメモリ等の半導体メモリであり、プログラム格納領域、データ格納領域、作業領域、及び一時格納領域等として利用される。MCU3は、メモリ7に格納されたコンピュータプログラムに従って、後述のフローチャートで示される各種処理を実行する。なお、仕様に応じて、記録媒体として、メモリ7の他、CD(CD−ROM、Video−CDを含む)やDVD(DVD−Video、DVD−ROM、DVD−RAMを含む)等の光ディスク、半導体メモリを搭載したメモリカード・メモリカートリッジ・USBメモリ、ハードディスク、光磁気ディスク、磁気テープ、及び、フレキシブルディスク等を、MCU3に接続することもできる。そして、これらにコンピュータプログラムやデータなどを格納することもできる。
【0087】
画像処理装置1は、電子機器9と接続されて使用される。電子機器9は、コンピュータ11及びその処理結果を表示するモニタ13を含む。電子機器9は、例えば、テレビジョン、ビデオゲーム機、カーナビゲーション、及び、パーソナルコンピュータ等であるが、特に限定されるものではない。なお、本実施の形態では、イメージセンサ5よりも高解像度のモニタ13を使用するものとする。
【0088】
MCU3は、メモリ7に格納されたプログラムに従って、イメージセンサ5を制御する。イメージセンサ5は、MCU3の制御により、三次元空間中で動くあるいは動かされる被写体(本実施の形態では人の手)を撮影し、得られた画像をMCU3に出力する。MCU3は、メモリ7に格納されたプログラムに従って、イメージセンサ5から受け取った画像を解析して、指先を検出して、その位置や擬似的なボタン操作の有無の情報等を、電子機器9のコンピュータ11に出力する。すると、電子機器9のコンピュータ11は、指先の位置に対応するモニタ13の画面上の位置にカーソルを表示し、また、ボタン操作が行なわれたことが通知されると、それに応じた処理を実行する。その他、コンピュータ11は、電子機器9の仕様に応じて、画像処理装置1から受け取った他の情報を処理し、また、独自の情報処理を実行する。
【0089】
次に、フローチャートを用いて画像処理装置1のMCU3の処理の詳細を説明する。
【0090】
図3は、図2のMCU3による画像解析処理の流れの一例を示すフローチャートである。図3を参照して、ステップS1にて、MCU3は、イメージセンサ5が出力した画像データから被写体(本実施の形態では手)の像の輪郭線を抽出する。この処理では、輪郭線上の各画素Pj(j=0〜J−1)の座標(XO[j],YO[j])を求める。
【0091】
ここで、本実施の形態では、値Jは、輪郭線上の画素Pjの総数を示す。また、反時計回りに輪郭線の抽出処理が実行されるものとする。
【0092】
輪郭線を抽出するためのアルゴリズムは、周知のものを使用できる。例えば、3×3の小画素領域からなるマスクを用いる方法で、このマスクの中心を輪郭線上にたえずおきならが、順次、マスクを移動して、輪郭線を抽出する。
【0093】
ステップS3にて、MCU3は、抽出した輪郭線上の各画素PjのベクトルVjの偏角θjを算出する。
【0094】
図14は、図3のステップS3で検出される偏角θjの説明図である。図4を参照して、今、被写体の輪郭線上の3つの画素Pj−1,Pj,及びPj+1に注目する。また、輪郭線を反時計回りにスキャンするものとする。画素PjのベクトルVjは、画素Pjから次の画素Pj+1に向かうベクトルとして定義される。画素PjのベクトルVjの偏角θjは、画素Pjの1つ前の画素Pj−1のベクトルVj−1に対してベクトルVjがなす角度として定義される。反時計回りの偏角θjの符号は正であり、時計回りの偏角θjの符号は負である。
【0095】
図3に戻って、ステップS5にて、MCU3は、抽出した輪郭線の変曲点を検出する。変曲点は、輪郭線の向きが変化する点であり、凸点と凹点とが定義される。
【0096】
図15は、図3のステップS5で検出される変曲点の説明図である。図15を参照して、抽出した輪郭線21の向きが変化する点として、変曲点I0〜I8が挙げられる。変曲点I0,I2,I4,I6及びI8は凸点である。変曲点I1,I3,I5及びI7は凹点である。
【0097】
図3に戻って、ステップS7にて、MCU3は、抽出した輪郭線(輪郭画像)の形状(グー、チョキ、パー、一本指、不定)を判定する。ステップS9にて、MCU3は、擬似的にボタン操作が行なわれたか否かを判定する。ステップS11にて、MCU3は、ステップS7の結果(輪郭画像の重心座標、面積、形状の情報(後述のフラグSH)、補正後の指先の座標、並びに、二つの指先の中点座標)及びステップS9の結果(後述の擬似ボタンフラグないしは後述のシングルクリックフラグ及びダブルクリックフラグ)を電子機器9のコンピュータ11に送信する。なお、MCU3は、イメージセンサ5から1フレームの画像データを受け取るたびに、ステップS1〜S11を繰り返す。
【0098】
図4は、図3のステップS5の変曲点の検出処理の流れの一例を示すフローチャートである。図4を参照して、ステップS21にて、MCU3は、変数DA,ADA,j,及びCF[]に0を代入する。ステップS23にて、MCU3は、図3のステップS1で検出された輪郭線上の画素Pjの偏角θjをメモリ7から取得する。ステップS25にて、MCU3は、変数DAの現在の値に偏角θjを加算して、変数DAに代入する。ステップS27にて、MCU3は、変数DAの絶対値を求めて、変数ADAに代入する。
【0099】
ステップS29にて、MCU3は、変数ADAの値が135度になったか否かを判断し、135度の場合輪郭線の向きが変わったと判断して、画素Pjを変曲点とみなしてステップS31に進み、それ以外はステップS39に進む。ステップS31では、MCU3は、変数DAの符号が正か否かを判断し、正の場合ステップS33に進み、負の場合ステップS35に進む。ステップS33では、MCU3は、凸凹フラグCF[j]に、変曲点が凸点であることを示す01を代入する。一方、ステップS35では、MCU3は、凸凹フラグCF[j]に、変曲点が凹点であることを示す10を代入する。
【0100】
ステップS37にて、MCU3は、変数DAに0を代入する。ステップS39にて、MCU3は、変数jを1つインクリメントする。ステップS41にて、MCU3は、変数jの値が、値Jと等しくなったか否かを判断し、j=Jの場合リターンし、それ以外はステップS23に進む。
【0101】
図5は、図3のステップS7の輪郭画像の形状を判定する処理の流れの一例を示すフローチャートである。図5を参照して、ステップS161にて、MCU3は、輪郭線に関する情報を算出する。ステップS163にて、MCU3は、輪郭画像から手の指先に相当する画素を検出する。
【0102】
再び、図15を参照して、凸点I0,I2,I4,I6及びI8を総称して、凸点As(s=0,1,…,S)と表記し、凹点I1,I3,I5及びI7を総称して、凹点Bt(t=0,1,…,T)と表記する。MCU3は、凸点Asから一定画素数Npだけ離れて位置する2つの画素を結ぶ線分23を求め、凸点Asから線分23に下ろした垂線25の長さLvを算出する。MCU3は、長さLvが、所定値CLを超えている場合に、その凸点Asを指先の候補とする。
【0103】
そして、MCU3は、指先の候補とした凸点Asの両側又は一方側に凹点Btが存在するか否かを判断し、存在する場合、その凸点Asを指先とみなす。
【0104】
また、MCU3は、「パー」及び「グー」を判定するのに必要な傾角θvを算出する。傾角θvは、指先とみなされた凸点Asから線分23に下ろした垂線25が、差分画像のX軸と平行な線27となす角である。
【0105】
図5に戻って、ステップS165にて、MCU3は、輪郭画像の形状が「パー」をした手の形状であるか否かを判定する。ステップS167にて、MCU3は、輪郭画像の形状が「チョキ」をした手の形状であるか否かを判定する。ステップS169にて、MCU3は、輪郭画像の形状が「グー」をした手の形状であるか否かを判定する。ステップS171にて、MCU3は、輪郭画像の形状が一本指を立てた手の形状であるか否かを判定してリターンする。
【0106】
図6は、図5のステップS161の輪郭情報を算出する処理の流れの一例を示すフローチャートである。図6を参照して、ステップS191にて、MCU3は、変数XG,YG及びjに0を代入する。ステップS193にて、MCU3は、変数XGの現在の値に輪郭線上の画素PjのX座標XO[j]を加算したものを、変数XGに代入する。また、MCU3は、変数YGの現在の値に輪郭線上の画素PjのY座標YO[j]を加算したものを、変数XGに代入する。ステップS195にて、MCU3は、変数jを1つインクリメントする。ステップS197にて、MCU3は、変数jの値が値Jになったか否かを判断し、値Jになった場合ステップS199に進み、それ以外はステップS193に進む。
【0107】
ステップS199にて、MCU3は、変数XGの値を値Jで除したものを、変数Xgに代入する。また、MCU3は、変数YGの値を値Jで除したものを、変数Ygに代入する。座標(Xg,Yg)は、輪郭画像の重心座標を示す。
【0108】
ステップS201にて、MCU3は、変数j,LS及びL[]に0を代入する。ステップS203にて、MCU3は、次式により、重心座標(Xg,Yg)と輪郭線上の各画素Pjの座標(XO[j],YO[j])との間の距離L[j]を算出する。
【0109】
L[j]←√((Xg−XO[j])2+(Yg−YO[j])2)
【0110】
ステップS205にて、MCU3は、変数LSの現在の値に変数L[j]の値を加算したものを、変数LSに代入する。ステップS207にて、MCU3は、変数jを1つインクリメントする。ステップS209にて、MCU3は、変数jの値が値Jになったか否かを判断し、値Jになった場合ステップS211に進み、それ以外はステップS203に進む。
【0111】
ステップS211にて、MCU3は、変数LSの値を値Jで除することにより、距離L[j]の平均値AVLを算出する。ステップS213にて、MCU3は、輪郭線及び輪郭線内の画素を計数して、輪郭画像の面積を算出してリターンする。
【0112】
図7は、図5のステップS163の指先を検出する処理の流れの一例を示すフローチャートである。図7を参照して、ステップS241にて、MCU3は、変数j及びFP[]に0を代入する。ステップS243にて、MCU3は、フラグCF[j]が凸点を示す01にセットされているか否かを判断し、肯定的判断の場合ステップS245に進み、否定的判断の場合ステップS249に進む。
【0113】
ステップS245にて、MCU3は、凸点である画素Pjの両側又は一方側に、フラグCF[j]に凹点を示す10がセットされている画素が存在するか否かを判断し、存在する場合画素Pjを指先候補とみなしてステップS247に進み、存在しない場合ステップS249に進む。ステップS247にて、MCU3は、フラグFP[j]に画素Pjが指先候補であることを示す1をセットする。
【0114】
ステップS249にて、MCU3は、変数jを1つインクリメントする。ステップS251にて、MCU3は、変数jの値が値Jになったか否かを判断し、値Jになった場合ステップS253に進み、それ以外はステップS243に進む。
【0115】
ステップS253にて、MCU3は、変数j,q,TF[],θv[],XT,YT,Q及びθvに0を代入する。ステップS255にて、MCU3は、フラグFP[j]に指先候補を示す1がセットされているか否かを判断し、肯定的判断の場合ステップS257に進み、それ以外はステップS271に進む。
【0116】
ステップS257にて、MCU3は、画素Pj+Npと画素Pj−Npとを結ぶ線分23に画素Pjから下ろした垂線25の長さLvを算出する(図15参照)。ステップS259にて、MCU3は、長さLvが所定値CLを超えているか否かを判断し、超えている場合画素Pjを指先とみなしてステップS261に進み、それ以外はステップS271に進む。
【0117】
ステップS261にて、MCU3は、指先フラグTF[j]に画素Pjが指先であることを示す1をセットする。ステップS263にて、MCU3は、変数XT[q]に画素PjのX座標を代入する。また、MCU3は、変数YT[q]に画素PjのY座標を代入する。座標(XT[q],YT[q])は、指先の座標である。ステップS265にて、MCU3は、垂線25の傾角θvを算出する(図15参照)。ステップS267にて、MCU3は、変数θv[q]に傾角θvを代入する。傾角θv[q]は、座標(XT[q],YT[q])で示される指先に対応する指の傾角である。ステップS269にて、MCU3は、変数qを1つインクリメントする。
【0118】
ステップS271にて、MCU3は、変数jを1つインクリメントする。ステップS273にて、MCU3は、変数jの値が値Jになったか否かを判断し、値Jになった場合ステップS275に進み、それ以外はステップS255に進む。ステップS275にて、MCU3は、変数Qに変数qの値を代入してリターンする。変数Qの値は、検出された指先の数を表す。
【0119】
図8は、図5のステップS165の「パー」を判定する処理の流れの一例を示すフローチャートである。図3を参照して、ステップS301にて、MCU3は、変数Qの値(指先の数)が3以上か否かを判断し、3以上の場合ステップS303に進み、それ以外はリターンする。ステップS303にて、MCU3は、変数q及びmに0を代入する。ステップS305にて、MCU3は、配列θv[q]と配列θv[q+1]との差の絶対値を算出し、変数θdに代入する。変数θdは、隣り合う指と指とがなす角度を表す。
【0120】
ステップS307にて、MCU3は、変数θdの値が100度未満か否かを判断し、肯定的判断の場合ステップS309に進み、否定的判断の場合ステップS311に進む。ステップS309にて、MCU3は、変数mを1つインクリメントする。ステップS311にて、MCU3は、変数qを1つインクリメントする。
【0121】
ステップS313にて、MCU3は、変数qの値が値Qになったか否かを判断し、値Qになった場合ステップS315に進み、それ以外はステップS305に進む。
【0122】
ステップS315では、MCU3は、変数mの値が、6以下3以上であるか否かを判断し、肯定的判断の場合手の形状が「パー」であると判断してステップS317に進み、否定的判断の場合リターンする。変数mの値は、隣り合う指と指とがなす角度θdが100度未満のケースの発生回数である。ステップS317では、MCU3は、フラグSHを「パー」を示す10hにセットして、図3のステップS9に進む。
【0123】
図9は、図5のステップS167の「チョキ」を判定する処理の流れの一例を示すフローチャートである。図9を参照して、ステップS341にて、MCU3は、変数Qの値(指先の数)が2又は3の場合ステップS343に進み、それ以外はリターンする。
【0124】
ステップS343にて、MCU3は、変数q,p,SH,XL,YL,XS及びYSに0を代入する。ステップS345にて、MCU3は、輪郭画像の重心座標(Xg,Yg)と指先の座標(XT[q],YT[q])との間の距離Lgt0を算出する。ステップS347にて、MCU3は、距離Lgt0が平均値AVL(図6のステップS211参照)に1.1を乗じたもの以上か否かを判断し、つまり、距離Lgt0が平均値AVLの110%以上か否かを判断し、肯定的判断の場合ステップS349に進み、否定的判断の場合ステップS359に進む。
【0125】
ステップS349にて、MCU3は、輪郭画像の重心座標(Xg,Yg)と指先の座標(XT[q+1],YT[q+1])との間の距離Lgt1を算出する。座標(XT[q+1],YT[q+1])の指先は、座標(XT[q],YT[q])の指先の隣の指先である。ステップS351にて、MCU3は、距離Lgt1が値AVLに1.1を乗じたもの以上か否かを判断し、つまり、距離Lgt1が平均値AVLの110%以上か否かを判断し、肯定的判断の場合ステップS353に進み、否定的判断の場合ステップS359に進む。
【0126】
ステップS353では、MCU3は、配列θv[q]と配列θv[q+1]との差の絶対値(つまり、隣あう指と指とがなす角度)を算出し、変数θdに代入する。ステップS355にて、MCU3は、変数θdの値が90度未満か否かを判断し、肯定的判断の場合ステップS357に進み、否定的判断の場合ステップS359に進む。ステップS357にて、MCU3は、変数pを1つインクリメントする。
【0127】
ステップS359にて、MCU3は、変数qを1つインクリメントする。ステップS361にて、MCU3は、変数qの値が値Qになったか否かを判断し、値Qになった場合ステップS363に進み、それ以外はステップS345に進む。ステップS363にて、MCU3は、変数pの値が1又は2の場合手の形状が「チョキ」と判断してステップS365に進み、それ以外はリターンする。
【0128】
ステップS365にて、MCU3は、変数Qの値が2か否かを判断し、2の場合、つまり、検出された指が2本の場合、ステップS369に進み、それ以外はステップS367に進む。ステップS367では、MCU3は、フラグSHを「チョキ」を示す21hにセットして、図3のステップS9に進む。なお、値21hは、3本の指が検出されたことになっているが、そのうち1本は指ではないノイズであることを示している。
【0129】
ステップS369では、MCU3は、フラグSHを「チョキ」を示す20hにセットする。なお、値20hは、2本の指が検出され、ステップS367のようなノイズを含まないことを示している。ステップS371にて、MCU3は、距離Lgt0が距離Lgt1より大きいか否かを判断し、つまり、検出された2本の指のどちらが長いか否かを判断し、距離Ltg0が大きい場合ステップS373に進み、それ以外はステップS375に進む。
【0130】
ステップS373では、MCU3は、座標XL及びYLにそれぞれ座標XT[0]及びYT[0]を代入する。また、MCU3は、座標XS及びYSにそれぞれ座標XT[1]及びYT[1]を代入する。一方、ステップS375では、MCU3は、座標XL及びYLにそれぞれ座標XT[1]及びYT[1]を代入する。また、MCU3は、座標XS及びYSにそれぞれ座標XT[0]及びYT[0]を代入する。ここで、座標(XL,YL)は、長い指の指先の座標であり、座標(XS,YS)は、短い指の指先の座標である。
【0131】
ステップS377にて、MCU3は、座標(XL,YL)及び座標(XS,YS)のそれぞれに対して、補正値を算出する。ステップS379にて、MCU3は、座標(XL,YL)に、その補正値を加算して、補正後座標を求める。また、MCU3は、座標(XS,YS)に、その補正値を加算して、補正後座標を求める。ステップS381にて、MCU3は、座標(XL,YL)の補正後座標と座標(XS,YS)の補正後座標との中点座標を算出する。そして、MCU3は、図3のステップS9に進む。
【0132】
図10は、図5のステップS169の「グー」を判定する処理の流れの一例を示すフローチャートである。図10を参照して、ステップS391にて、MCU3は、変数Qの値(指先の数)が2以上か否かを判断して、肯定的判断の場合ステップS393に進み、否定的判断の場合リターンする。
【0133】
ステップS393にて、MCU3は、変数jに0を代入する。ステップS395にて、MCU3は、距離L[j](図6のステップS203参照)が、平均値AVL(図6のステップS211参照)に0.6を乗じたもの以上であり、かつ、値AVLに1.4を乗じたもの以下であるか否かを判断し、つまり、距離L[j]が、平均値AVLの60%以上であり、かつ、平均値AVLの140%以下であるか否かを判断し、肯定的判断の場合ステップS397に進み、否定的判断の場合リターンする。
【0134】
ステップS397にて、MCU3は、変数jを1つインクリメントする。ステップS399にて、MCU3は、変数jの値が値Jになったか否かを判断し、値Jになった場合手の形状が「グー」と判断しステップS401に進み、それ以外はステップS395に進む。ステップS401にて、MCU3は、フラグSHを「グー」を示す30hにセットして、図3のステップS9に進む。
【0135】
図11は、図5のステップS171の一本指を判定する処理の流れの一例を示すフローチャートである。図11を参照して、ステップS421にて、MCU3は、変数Qの値(指先の数)が1以下か否かを判断して、肯定的判断の場合ステップS423に進み、否定的判断の場合ステップS447に進む。ステップS447では、MCU3は、フラグSHを「不定」を示す00hにセットしてリターンする。
【0136】
一方、ステップS423では、MCU3は、変数j,s,Dc[],Dca及びDcmに0を代入する。ステップS425にて、MCU3は、フラグFP[j]に指先候補(つまり凸点)を示す1がセットされているか否かを判断し、肯定的判断の場合ステップS427に進み、それ以外はステップS433に進む。
【0137】
ステップS427では、MCU3は、重心座標(Xg,Yg)と凸点の画素Pjとの間の距離Dを算出する。ステップS429にて、MCU3は、配列Dc[s]に距離Dを代入する。ステップS431にて、MCU3は、変数sを1つインクリメントする。ステップS433にて、MCU3は、変数jを1つインクリメントする。ステップS435にて、MCU3は、変数jの値が値Jになったか否かを判断し、値Jになった場合ステップS437に進み、それ以外はステップS425に進む。
【0138】
ステップS437にて、距離Dc[s]の平均値Dcaを算出する。つまり、平均値Dcaは、重心から各凸点までの距離の平均値である。ステップS439にて、距離Dc[s]から、最大値Dcmを検出する。つまり、最大値Dcmは、重心から各凸点までの距離のうち、最大のものである。ステップS441にて、MCU3は、最大値Dcmが、平均値Dcaに1.3を乗じた値以上か否かを判断し、肯定判断の場合一本の指が立った状態であるとみなしてステップS443に進み、否定判断の場合ステップS447に進む。
【0139】
ステップS443では、MCU3は、フラグSHを「1本の指が立った状態」を示す40hにセットする。ステップS445では、MCU3は、座標XHに、最大値Dcmに対応する凸点の画素PjのX座標を代入する。また、MCU3は、座標YHに、最大値Dcmに対応する凸点の画素PjのY座標を代入する。座標(XH,YH)は、立った状態の1本指の指先の座標である。ステップS447にて、MCU3は、座標(XH,YH)の補正値(Xc,Yc)を計算する。ステップS449にて、MCU3は、座標(XH,YH)に、その補正値(Xc,Yc)を加算し、補正後座標(Xf,Yf)を求める。そして、MCU3は、リターンする。
【0140】
さて、次に、図9のステップS373及びS375で求めた指先を示す画素の座標(XL,YL)及び(XS,YS)、並びに、図11のステップS445で求めた指先を示す画素の座標(XH,YH)を、イメージセンサ5の解像度を超える高精度で再計算する方法を説明する。以下では、再計算前の指先を示す画素P4の座標を、座標(Xb,Yb)と表記する。そして、下記のようにして、座標(Xb,Yb)の補正値(Xc,Yc)を求める。本実施の形態では、補正値の算出方法として、第1〜第4の例を挙げる。
【0141】
図12(a)は、図9のステップS377及び図11のステップS447の指先補正値計算処理の第1の例の流れを示すフローチャートである。図12(b)は、図9のステップS377及び図11のステップS447の指先補正値計算処理の第2の例の流れを示すフローチャートである。図12(c)は、図9のステップS377及び図11のステップS447の指先補正値計算処理の第3の例の流れを示すフローチャートである。図12(d)は、図9のステップS377及び図11のステップS447の指先補正値計算処理の第4の例の流れを示すフローチャートである。
【0142】
図16(a)は、図12(a)及び図12(c)の指先補正値計算処理の説明図である。図16(b)は、図12(b)及び図12(d)の指先補正値計算処理の説明図である。
【0143】
図16(a)及び図16(b)を参照して、補正前(再計算前)の指先画素P4の座標(Xb,Yb)を原点(0,0)とする。図中、水平右方向をx軸の正とし、垂直下方向をy軸の正とする。そして、補正前の指先画素P4を取り囲む8個の画素P0,P1,P2,P5,P6,P7及びP8を利用する。また、画素P0〜P8は、それぞれ、画素値(つまり輝度値)p0〜p8を有する。
【0144】
図16(a)に示すように、第1及び第3の例では、原点(0,0)の指先画素P4の上下左右の画素P1,P7,P3及びP5の座標は、それぞれ、座標(0,−1),(0,1),(−1,0)及び(1,0)である。また、指先画素P4の左上画素P0、右上画素P2、左下画素P6及び右下画素P8の座標は、それぞれ、座標(−√2/2,−√2/2),(√2/2,−√2/2),(−√2/2,√2/2)及び(√2/2,√2/2)である。
【0145】
一方、図16(b)に示すように、第2及び第4の例では、原点(0,0)の指先画素P4の周囲画素P0,P1,P2,P5,P6,P7及びP8の座標は、それぞれ、座標(−1,−1)、(0,−1)、(1,−1)、(−1,0)、(1,0)、(−1,1)、(0,1)及び(1,1)である。
【0146】
なお、下記の数式中シンボル“*”及び“/”は、それぞれ、乗算及び除算を示す。
【0147】
図12(a)を参照して、第1の例では、ステップS361及びS363にて、MCU3は、次式により、X座標Xbの補正値Xc及びY座標Ybの補正値Ycを算出する。値Csは定数である。定数Csは1より大きい値である。
【0148】
Xc=(A/C)*Cs
Yc=(B/C)*Cs
【0149】
A=−R*p0+0*p1+R*p2+(−1)*p3+0*p4+1*p5+(−R)*p6+0*p7+R*p8
B=−R*p0+(−1)*p1+(−R)*p2+0*p3+0*p4+0*p5+R*p6+1*p7+R*p8
C=p0+p1+p2+P3+p4+p5+p6+p7+p8
R=√2/2
【0150】
よって、補正後の指先のX座標Xf及びY座標Yfは、次のようになる。
【0151】
Xf=Xb+Xc
Yf=Yb+Yc
【0152】
図12(b)を参照して、第2の例では、ステップS371及びS373にて、MCU3は、次式により、X座標Xbの補正値Xc及びY座標Ybの補正値Ycを算出する。値Csは定数である。
【0153】
Xc=(D/C)*Cs
Yc=(E/C)*Cs
【0154】
D=−1*p0+0*p1+1*p2+(−1)*p3+0*p4+1*p5+(−1)*p6+0*p7+1*p8
E=−1*p0+(−1)*p1+(−1)*p2+0*p3+0*p4+0*p5+1*p6+1*p7+1*p8
C=p0+p1+p2+P3+p4+p5+p6+p7+p8
【0155】
よって、補正後の指先のX座標Xf及びY座標Yfは、次のようになる。
【0156】
Xf=Xb+Xc
Yf=Yb+Yc
【0157】
図12(c)を参照して、第3の例では、ステップS381及びS383にて、MCU3は、次式により、X座標Xbの補正値Xc及びY座標Ybの補正値Ycを算出する。値pmaxは、画素値p0〜p8のうちの最大値を示す。
【0158】
Xc=A/pmax
Yc=B/pmax
【0159】
A=−R*p0+0*p1+R*p2+(−1)*p3+0*p4+1*p5+(−R)*p6+0*p7+R*p8
B=−R*p0+(−1)*p1+(−R)*p2+0*p3+0*p4+0*p5+R*p6+1*p7+R*p8
R=√2/2
【0160】
よって、補正後の指先のX座標Xf及びY座標Yfは、次のようになる。
【0161】
Xf=Xb+Xc
Yf=Yb+Yc
【0162】
図12(d)を参照して、第4の例では、ステップS391及びS393にて、MCU3は、次式により、X座標Xbの補正値Xc及びY座標Ybの補正値Ycを算出する。値pmaxは、画素値p0〜p8のうちの最大値を示す。
【0163】
Xc=D/pmax
Yc=E/pmax
【0164】
D=−1*p0+0*p1+1*p2+(−1)*p3+0*p4+1*p5+(−1)*p6+0*p7+1*p8
E=−1*p0+(−1)*p1+(−1)*p2+0*p3+0*p4+0*p5+1*p6+1*p7+1*p8
【0165】
よって、補正後の指先のX座標Xf及びY座標Yfは、次のようになる。
【0166】
Xf=Xb+Xc
Yf=Yb+Yc
【0167】
ここで、図9のステップS377の指先補正値算出処理では、MCU3は、座標(XL,YL)及び(XS,YS)のそれぞれを指先P4の座標(Xb,Yb)として、それぞれの補正値を算出する。また、図11のステップS447の指先補正値算出処理では、座標(XH,YH)を指先P4の座標(Xb,Yb)として、その補正値を算出する。
【0168】
図16(b)を参照しながら、上記第4の例について補足説明する。
【0169】
第4の例の上記式では、指先画素P4並びに周囲画素P0,P1,P2,P5,P6,P7及びP8の座標(0,0)、(−1,−1)、(0,−1)、(1,−1)、(−1,0)、(1,0)、(−1,1)、(0,1)及び(1,1)に、対応する画素値p4,p0,p1,p2,P3,p5,p6,p7及びp8で重み付けをし、それらの和Dが算出される。そして、和Dを値pmaxで除することにより、補正値Xcを求める。
【0170】
このようにして、小数点を持った精度の補正値Xcが得られる。なお、座標Xbは、画素単位で求められるので、整数値である。従って、座標Xbに補正値Xcを加えることにより、小数点精度の座標値を得ることができる。これらのことは同様にY座標についても言える。
【0171】
また、画素値による重み付けを行うことにより得られた補正値Xcを、補正前のX座標Xbに加えることにより、画素値(輝度値)の大きい側に、X座標Xbを補正できる(画素値による重み付け)。このことは同様にY座標についても言える。つまり、偏角θjから変曲点を求めることによって、手の輪郭線上の画素から、指先に相当する画素を特定し(図9のステップS373及びS375並びに図11のステップS445)、さらに、画素値を加味することによって、輪郭線上で特定された画素の周囲で、より画素値の大きい位置に、指先の座標を補正している。なぜなら、画像に写り込んだ指の像のうち、その先端部分であって、さらに、画素値(輝度値)の大きい位置を、指先とみなすことにより、より適切に指先を特定できるからである。
【0172】
さらに、和Dを、画素値p0〜p8のうちの最大値pmaxで除している。つまり、除数を、固定値とするのではなく、変動値としている。これは、イメージセンサ5から手までの距離は、一定ではないからである。つまり、イメージセンサ5から手までの距離が近い場合は、画像に指は大きく写り込み、一方、イメージセンサ5から手までの距離が遠い場合は、画像には指は小さく写り込むので、補正値Xcを、イメージセンサ5から手までの遠近に応じて、適切な値に設定するためである。補正値Ycについても同様である。
【0173】
例えば、除数を固定値とする場合、その固定値が小さすぎると、イメージセンサ5から手までの距離が遠い場合は比較的妥当な値になるかもしれないが、近い場合は、補正値が大きくなりすぎてしまう。また、逆に、除数を固定値とする場合、その固定値が大きすぎると、イメージセンサ5から手までの距離が近い場合は比較的妥当な値になるかもしれないが、遠い場合は、補正値が小さくなりすぎてしまう。また、イメージセンサ5から手までの距離が遠い場合と近い場合の双方に適切な除数を、固定値として設定することは困難である。なぜなら、同じ距離で同じ指を撮影する場合であっても、イメージセンサ5が設置される環境(照明や外光など)によって、画素値(輝度値)は異なってくるし、また、指の色彩、輪郭、及び表面の形状等も人によって異なるからである。
【0174】
また、値C(=p0+p1+p2+P3+p4+p5+p6+p7+p8)で除することにより、加重平均をとることもできる。しかし、次の理由により、除数は、値Cではなく、最大値pmaxとするほうが好ましい。
【0175】
図17を参照して、一般的に、実際の人間の指先30は、平面視において、ある点を頂点(「実頂点」と呼ぶ。)32として、円弧状となっている。一方、本実施の形態のように、比較的低解像度の画像から指の輪郭を検出し、指先を決定する場合、常に実頂点32を指先として検出することは困難である。従って、検出される指先は、実頂点32であったり、実頂点32の左の点34になったり、右の点36になったりする。
【0176】
この場合、和Dを値Cで除して補正値とすると、その補正値は、図16(b)の画素P4を中心とした9×9画素の範囲を超えることができない。和Eについても同様である。このため、例えば、図17の実頂点32の補正後の位置は点38、点34の補正後の位置は点40、点36の補正後の位置は点42となる。このように、補正後の指先の位置は、これら3つの点で異なっている。同じ指先を検出するのに、異なった部分を指先と認識したのでは、検出された指先位置に配置されるカーソルが安定しない。
【0177】
そこで、輪郭から求めた指先が、一定していな場合でも、補正後の位置を極力一定させるため、あるいは、指先の位置の相違を極力小さい範囲に収めるため、最大値pmaxで和D及びEを除して、補正値を、9×9画素の範囲を越えるようにし、補正後の位置が、図17の点44、つまり、指先端部30の腹の中心付近に集まるようにした。
【0178】
図16(a)を参照しながら、上記第1の例について補足説明する。この例では、第4の例と異なり、画素P0,P2,P6及びP8の重み付けの対象を、それぞれ、座標(−√2/2,−√2/2),(√2/2,−√2/2),(−√2/2,√2/2)及び(√2/2,√2/2)とした。これは次の理由による。
【0179】
補正前の指先画素P4の中心からの距離を、全周囲画素で同じ値として、画素値を重みとするに当って、全画素値を均等に扱うためである。例えば、画素P4と画素P5との間の距離は「1」であるが、画素P2の座標を(1,−1)として計算すると、画素P4と画素P2との間の距離は、「√2」となってしまい、周囲画素の位置によって不均衡が発生する。補正前の指先画素P4の中心からの距離を、全周囲画素で同じ値とすることにより、補正値を方向によって偏りのないものとすることができる。
【0180】
また、この例では、A/C及びB/Cに定数Csを乗じている。これは、第4の例で、除数を値Cとせず、加重平均をとらなかった理由と同じである。つまり、輪郭から求めた指先が、一定していな場合でも、補正後の位置を極力一定させるため、あるいは、指先の位置の相違を極力小さい範囲に収めるため、定数Csを乗じて、補正値を、9×9画素の範囲を越えるようにし、補正後の位置が、図17の点44に集まるようにしたのである。なお、定数Csを乗ずることなしにA/C及びB/Cを補正値とすることもできる。
【0181】
ここで、定数Csは、実験及び試行錯誤等により決定される。また、定数Csを、検出された指の幅に応じて動的に変更することもできる。例えば、画像から指の幅を算出し、その幅に所定数(小数値)を乗じることにより、定数Csを決定する。この所定数は、実験及び試行錯誤等により決定される。例えばこの所定数は2/3である。なお、例えば、補正前の指先画素の左右それぞれに一定画素数離れた左右の画素間の距離を求め、それを指の幅とする。
【0182】
また、和A及びBをそれぞれ値Cで除して加重平均をとるのは、小数点を持った精度の補正値Xc及びYcを得るためである。なお、座標Xbは、画素単位で求められるので、整数値である。従って、座標Xbに補正値Xcを加えることにより、小数点精度の座標値を得ることができる。これらのことは同様にY座標についても言える。
【0183】
さらに、画素値による重み付けを行う理由は、第4の例と同様である。
【0184】
上記第2の例について補足説明する。定数Csを乗じる理由、加重平均をとる理由、及び、画素値による重み付けを行なう理由は、第1の例と同じである。
【0185】
上記第3の例について補足説明する。和A及びBをそれぞれ最大値pmaxで除して加重平均をとるのは、小数点を持った精度の補正値Xc及びYcを得るためである。なお、座標Xbは、画素単位で求められるので、整数値である。従って、座標Xbに補正値Xcを加えることにより、小数点精度の座標値を得ることができる。これらのことは同様にY座標についても言える。
【0186】
また、画素P0,P2,P6及びP8の重み付けの対象を、それぞれ、座標(−√2/2,−√2/2),(√2/2,−√2/2),(−√2/2,√2/2)及び(√2/2,√2/2)とした理由は、第1の例と同じである。
【0187】
さらに、画素値による重み付けを行う理由、除数を変動値とした理由、及び、最大値pmaxで除し加重平均をとらない理由は、第4の例と同様である。
【0188】
図13(a)は、図3のステップS9の擬似ボタン操作判定処理の第1の例の流れを示すフローチャートである(図1(b)の第1の例に対応)。図13(a)を参照して、ステップS621にて、MCU3は、擬似的なボタン操作の有無を示す擬似ボタンフラグをオフにする。ステップS623にて、MCU3は、手の形状を示す今回のフラグSHに40hがセットされているか否かを判断し、40hがセットされている場合(つまり、「1本指」の状態)、ステップS627に進み、それ以外はリターンする。
【0189】
ステップS627では、MCU3は、手の形状を示す前回のフラグSHに20hがセットされているか否かを判断し、20hがセットされている場合(つまり、「チョキ」の状態)、ステップS629に進み、それ以外はリターンする。ステップS629では、MCU3は、擬似的にボタン操作が行なわれたことを示すため、擬似ボタンフラグをオンにする。
【0190】
図13(b)は、図3のステップS9の擬似ボタン操作判定処理の第2の例の流れを示すフローチャートである(図1(b)の第2の例に対応)。図13(b)を参照して、ステップS601にて、MCU3は、擬似的なボタン操作の有無を示す擬似ボタンフラグをオフにする。ステップS603にて、MCU3は、手の形状を示す今回のフラグSHに20hがセットされているか否かを判断し、20hがセットされている場合(つまり、「チョキ」の状態)、ステップS607に進み、それ以外はリターンする。
【0191】
ステップS607では、MCU3は、手の形状を示す前回のフラグSHに40hがセットされているか否かを判断し、40hがセットされている場合(つまり、「1本指」の状態)、ステップS609に進み、それ以外はリターンする。ステップS609では、MCU3は、擬似的にボタン操作が行なわれたことを示すため、擬似ボタンフラグをオンにする。
【0192】
図13(c)は、図3のステップS9の擬似ボタン操作判定処理の第3の例の流れを示すフローチャートである(図1(b)の第3の例に対応)。図13(c)を参照して、ステップS641にて、MCU3は、擬似的なボタン操作の有無を示す擬似ボタンフラグをオフにする。ステップS643にて、MCU3は、手の形状を示す今回のフラグSHに20hがセットされているか否かを判断し、20hがセットされている場合(つまり、「チョキ」の状態)、ステップS645に進み、それ以外はリターンする。
【0193】
ステップS645では、MCU3は、補正後の一方の指先の座標と、補正後の他方の指先の座標と、の間の距離DCを算出する。ステップS647にて、MCU3は、距離DCが一定値CCより小さいか否かを判断し、小さい場合一方指先が他方指先に近づいたと判断してステップS649に進み、それ以外はリターンする。ステップS649にて、MCU3は、擬似的にボタン操作が行なわれたことを示すため、擬似ボタンフラグをオンにする。
【0194】
ここで、図13(a)〜図13(c)及び後述の図18(a)〜図18(c)において、今回のフラグSHとは、イメージセンサ5から今回受け取った1フレームの画像データに基づき設定されたフラグを意味する。また、前回のフラグSHとは、イメージセンサ5から前回受け取った1フレームの画像データに基づき設定されたフラグを意味する。
【0195】
また、図13(a)〜図13(c)は、擬似的にボタン操作が行われたと判定されたこと(つまり、擬似ボタンフラグのオン)を、クリック操作(ボタンを押下して放す操作)が行なわれたとみなす場合の処理例を示している。
【0196】
次に、図18(a)〜図18(c)を参照して、擬似的にボタン操作が行われたと判定されたこと(つまり、擬似ボタンフラグのオン)を、ボタンのプレス操作(ボタンを押したままの状態)が行なわれたとみなす処理例を説明する。なお、擬似ボタンフラグのオフは、ボタンを放した状態とみなされる。
【0197】
図18(a)は、図3のステップS9の擬似ボタン操作判定処理の第4の例の流れを示すフローチャートである(図1(b)の第1の例に対応)。図18(a)を参照して、ステップS701にて、MCU3は、擬似的なボタン操作の有無を示す擬似ボタンフラグがオンか否かを判断し、オンの場合ステップS709に進み、オフの場合ステップS703に進む。なお、擬似ボタンフラグは、システム初期化時にオフにセットされるものとする。
【0198】
ステップS703にて、MCU3は、手の形状を示す今回のフラグSHに40hがセットされているか否かを判断し、40hがセットされている場合(つまり、「1本指」の状態)、ステップS705に進み、それ以外はリターンする。
【0199】
ステップS705では、MCU3は、手の形状を示す前回のフラグSHに20hがセットされているか否かを判断し、20hがセットされている場合(つまり、「チョキ」の状態)、ステップS707に進み、それ以外はリターンする。ステップS707では、MCU3は、擬似的にボタンがプレスされたことを示すため、擬似ボタンフラグをオンにする。
【0200】
一方、ステップS709では、MCU3は、今回のフラグSHに20hがセットされているか否かを判断し、20hがセットされている場合(つまり、「チョキ」の状態)、ステップS711に進み、それ以外はボタンプレスの状態が維持されているとみなしリターンする。ステップS711では、MCU3は、擬似的にボタンが放されたことを示すため、擬似ボタンフラグをオフにする。
【0201】
図18(b)は、図3のステップS9の擬似ボタン操作判定処理の第5の例の流れを示すフローチャートである(図1(b)の第2の例に対応)。図18(b)を参照して、ステップS731にて、MCU3は、擬似的なボタン操作の有無を示す擬似ボタンフラグがオンか否かを判断し、オンの場合ステップS739に進み、オフの場合ステップS733に進む。なお、擬似ボタンフラグは、システム初期化時にオフにセットされるものとする。
【0202】
ステップS733にて、MCU3は、手の形状を示す今回のフラグSHに20hがセットされているか否かを判断し、20hがセットされている場合(つまり、「チョキ」の状態)、ステップS735に進み、それ以外はリターンする。
【0203】
ステップS735では、MCU3は、手の形状を示す前回のフラグSHに40hがセットされているか否かを判断し、40hがセットされている場合(つまり、「1本指」の状態)、ステップS737に進み、それ以外はリターンする。ステップS737では、MCU3は、擬似的にボタンがプレスされたことを示すため、擬似ボタンフラグをオンにする。
【0204】
一方、ステップS739では、MCU3は、今回のフラグSHに40hがセットされているか否かを判断し、40hがセットされている場合(つまり、「一本指」の状態)、ステップS741に進み、それ以外はボタンプレスの状態が維持されているとみなしリターンする。ステップS741では、MCU3は、擬似的にボタンが放されたことを示すため、擬似ボタンフラグをオフにする。
【0205】
図18(c)は、図3のステップS9の擬似ボタン操作判定処理の第6の例の流れを示すフローチャートである(図1(b)の第3の例に対応)。図18(c)を参照して、ステップS761にて、MCU3は、擬似的なボタン操作の有無を示す擬似ボタンフラグがオンか否かを判断し、オンの場合ステップS771に進み、オフの場合ステップS763に進む。なお、擬似ボタンフラグは、システム初期化時にオフにセットされるものとする。
【0206】
ステップS763にて、MCU3は、手の形状を示す今回のフラグSHに20hがセットされているか否かを判断し、20hがセットされている場合(つまり、「チョキ」の状態)、ステップS765に進み、それ以外はリターンする。
【0207】
ステップS765では、MCU3は、補正後の一方の指先の座標と、補正後の他方の指先の座標と、の間の距離DCを算出する。ステップS767にて、MCU3は、距離DCが一定値CCより小さいか否かを判断し、小さい場合一方指先が他方指先に近づいたと判断してステップS769に進み、それ以外はリターンする。ステップS769にて、MCU3は、擬似的にボタンのプレスが行なわれたことを示すため、擬似ボタンフラグをオンにする。
【0208】
一方、ステップS771にて、MCU3は、今回のフラグSHに20hがセットされているか否かを判断し、20hがセットされている場合(つまり、「チョキ」の状態)、ステップS773に進み、それ以外はボタンプレスの状態が維持されているとみなしリターンする。
【0209】
ステップS773では、MCU3は、補正後の一方の指先の座標と、補正後の他方の指先の座標と、の間の距離DCを算出する。ステップS775にて、MCU3は、距離DCが一定値CC以上か否かを判断し、CC以上の場合擬似的にボタンが放されたとみなしてステップS777に進み、それ以外はボタンプレスの状態が維持されているとみなしリターンする。ステップS777にて、MCU3は、擬似的にボタンが放されたことを示すため、擬似ボタンフラグをオフにする。
【0210】
ところで、上記では、図1(b)を参照して、擬似ボタン操作の第1〜第3の例を説明した。以下では、擬似ボタン操作の第4の例を説明する。この第4の例では、シングルクリック及びダブルクリックの判定を行なう。
【0211】
図19(a)は、本発明の実施の形態による擬似ボタン操作の第4の例(シングルクリック)の説明図である。図19(a)を参照して、一定時間TC以内に、ステップS2000〜S2004の変化が検出された場合に、シングルクリックが行なわれたとみなす。
【0212】
具体的には、指先50が大体静止した状態になった場合に、最新の指先50を中心とした矩形範囲(例えば3画素×3画素)52を設定する(ステップS2000)。例えば、最新の指先50から一定距離RD内に過去所定数分の指先50が存在する場合に、指先50が大体静止した状態であると判断される。
【0213】
この矩形範囲52の設定から一定時間TC以内に、矩形範囲52から指先50が消失し(出て)、矩形範囲52に指先50が存在しない状態になり(ステップS2002)、そして、再び、矩形範囲52に指先50が出現し(入って)、矩形範囲52に指先50が存在する状態になった時に(ステップS2004)、シングルクリックが行なわれたとみなす。例えば、矩形範囲52内の画素値(輝度値)の合計値を、所定の閾値と比較して、合計値が閾値を超えていれば矩形範囲52に指先50が存在すると判断し、一方、合計値が閾値以下の場合に矩形範囲52に指先50が存在しないと判断する。
【0214】
なお、例えば、ユーザが、一定時間TC以内に、人差し指を伸ばした状態から、人差し指の第3関節(付け根の関節)を曲げて指を折り、再び、元の状態(人差し指を伸ばした状態)に戻すというジェスチャを行なった時に、シングルクリックが行なわれたとみなされる。この場合、第1及び第2関節の状態は任意である。また、例えば、ユーザが、一定時間TC以内に、人差し指を伸ばした状態から、人差し指の第2関節を曲げて指を折り(第3関節は固定)、再び、元の状態(人差し指を伸ばした状態)に戻すというジェスチャを行なった時に、シングルクリックが行なわれたとみなされる。この場合、第1関節の状態は任意である。ここで、指先に一番近い関節を第1関節、その次の関節を第2関節、さらにその次の関節を第3関節と呼んでいる。
【0215】
この例のような人のジェスチャでは、指が曲げられた後、指先が、ほぼ元の位置に戻ることが、本願発明者の実験により検証されている。このため、図19(a)で説明した手法により、シングルクリックが行なわれたか否かを、安定して、かつ、確実に、つまり、高い再現性をもって、判断できるのである。
【0216】
図19(b)は、本発明の実施の形態による擬似ボタン操作の第4の例(ダブルクリック)の説明図である。図19(b)を参照して、一定時間TC以内に、ステップS2100〜S2108の変化が検出された場合に、ダブルクリックが行なわれたとみなす。この場合の一定時間TCは、シングルクリックを判定するときの一定時間TCと同じである。
【0217】
具体的には、指先50が大体静止した状態になった場合に、最新の指先50を中心とした矩形範囲(例えば3画素×3画素)52を設定する(ステップS2100)。指先50が大体静止した状態の判断方法は、シングルクリックの場合と同じである。
【0218】
この矩形範囲52の設定から一定時間TC以内に、矩形範囲52から指先50が消失し(出て)、矩形範囲52に指先50が存在しない状態になり(ステップS2102)、そして、再び、矩形範囲52に指先50が出現し(入って)、矩形範囲52に指先50が存在する状態になり(ステップS2104)、再び、矩形範囲52から指先50が消失し(出て)、矩形範囲52に指先50が存在しない状態になり(ステップS2106)、そして、再び、矩形範囲52に指先50が出現し(入って)、矩形範囲52に指先50が存在する状態になった時に(ステップS2108)、ダブルクリックが行なわれたとみなす。矩形範囲52に指先50が存在するか否かの判断は、シングルクリックの場合と同じである。
【0219】
なお、ダブルクリックは、上記のシングルクリックのジェスチャをユーザが2回行なうことで実行される。また、ダブルクリックは、シングルクリックを2回行なうものであり、それ故、折り曲げられた指先は、2回とも、ほぼ同じ位置に戻ってくる。この点も本願発明者により検証されている。このため、図19(b)で説明した手法により、ダブルクリックが行なわれたか否かを、安定して、かつ、確実に、つまり、高い再現性をもって、判断できるのである。
【0220】
図20及び図21は、図3のステップS9の擬似ボタン操作判定処理の第7の例の流れを示すフローチャートである(図19(a)及び図19(b)の第4の例に対応)。図20を参照して、ステップS1200にて、MCU3は、シングルクリックが行なわれたとみなす時にオンにセットされるシングルクリックフラグと、ダブルクリックが行なわれたとみなす時にオンにセットされるダブルクリックフラグと、をオフにする。
【0221】
ステップS1202にて、MCU3は、滞在フラグがオンか否かを判断し、オンの場合図21のステップS1250に進み、オフの場合ステップS1204に進む。滞在フラグは、指先50が大体静止した状態になったと判断された時に、つまり、図19(a)及び図19(b)の矩形範囲52が設定された時にオンにセットされるフラグである。従って、ステップS1202で否定判断がされた後のステップS1204〜S1220の処理は、矩形範囲52を設定するための処理である。一方、ステップS1202で肯定判断がされた後のステップS1250〜S1284の処理は、図19(a)及び図19(b)のステップS2002,S2004,S2102〜S2108の状態を判断するための処理である。
【0222】
ステップS1204にて、MCU3は、変数kに0をセットする。ステップS1206にて、MCU3は、最新の指先50と、過去の指先50と、の間の距離DISを算出する。距離DISは次式により算出される。
【0223】
DIS=√(XD2+YD2)
XD=Xf[0]−Xf[k+1]
YD=Yf[0]−Yf[k+1]
【0224】
ここで、図11のステップS449では、補正後の指先50の座標(Xf,Yf)を計算する。この場合、補正後の指先50の座標(Xf,Yf)は、キューに格納され、現在及び過去の計N個のデータが保存される(Nは2以上の整数。本実施の形態ではN=10)。キューは、X座標Xfを代入する配列Xf[0]〜Xf[9]及びY座標Yfを代入する配列Yf[0]〜Yf[9]により構成される。配列Xf[0]及びYf[0]に常に最新の座標(Xf,Yf)が格納される。
【0225】
従って、ステップS1206では、最新の指先50の座標(Xf[0],Yf[0])と、それより(k+1)個だけ過去の指先50の座標(Xf[k+1],Yf[k+1])と、の間の距離DISが計算される。
【0226】
そして、ステップS1208にて、MCU3は、距離DISが、一定距離RDより小さいか否かを判断し、小さい場合ステップS1210に進み、それ以外は指先50が静止した状態にないと判断してステップS1220に進む。ステップS1210にて、MCU3は、変数kを1つインクリメントする。ステップS1212にて、MCU3は、変数kの値が9になったか否かを判断し、9になった場合ステップS1214に進み、それ以外はステップS1206に戻る。
【0227】
ステップS1212でk=9が判断されたことは、最新の指先50と過去9個の指先50それぞれとの間の距離全てが、一定距離RD内に存在することを意味する。つまり、指先50が大体静止した状態にあることを意味する。このため、ステップS1214では、MCU3は、滞在フラグをオンにする。一方、距離DISが一定距離RD内にない過去の指先50が1つでも存在する場合は、指先50が静止した状態にないと判断する。このため、ステップS1220では、MCU3は、滞在フラグをオフにしてリターンする。
【0228】
ステップS1214の次のステップS1216にて、MCU3は、最新の指先50の座標(Xf[0],Yf[0])を中心とした矩形範囲52を設定する(図19(a)のステップS2000及び図19(b)のステップS2100に相当)。そして、ステップS1218にて、MCU3は、タイマTMをセットしてリターンする。このタイマTMは、上記一定時間TC(図19(a)及び図19(b)参照)を計測するためのものである。この一定時間TCは、実験及び試行錯誤等により、決定される。
【0229】
図21を参照して、ステップS1250にて、MCU3は、タイマTMの値が一定時間TCになったか否かを判断し、一定時間TCになった場合ステップS1278に進み、一定時間になっていない場合ステップS1252に進む。
【0230】
ステップS1252にて、MCU3は、消失フラグがオンか否かを判断し、オンの場合ステップS1262に進み、オフの場合ステップS1254に進む。消失フラグは、矩形範囲52に指先50が存在する状態から存在しない状態に変化したときにオンにされるフラグである。
【0231】
ステップS1254では、MCU3は、矩形範囲52に指先50が不存在か否かを判断し、存在する場合リターンし、不存在の場合ステップS1256に進む。ステップS1256にて、MCU3は、消失フラグをオンにしてリターンする(図19(a)のステップS2002並びに図19(b)のステップS2102及びS2106に相当)。
【0232】
消失フラグがオンの場合、ステップS1262にて、MCU3は、矩形範囲52に指先50が存在するか否かを判断し、存在しない場合リターンし、存在する場合ステップS1264に進む(図19(a)のステップS2004並びに図19(b)のステップS2104及びS2108に相当)。
【0233】
ステップS1264では、MCU3は、仮クリックフラグがオンか否かを判断し、オンの場合ステップS1272に進み、オフの場合ステップS1266に進む。仮クリックフラグは、ユーザのジェスチャがシングルクリックの条件(図19(a)のステップS2000〜S2004)を満たしたときにオンにされるフラグである。ただし、ダブルクリックはシングルクリックの動作を含むので(図19(b)のステップS2100〜S2104)、一定時間TCが経過するまでは、ダブルクリックが行なわれる可能性もある。このため、一定時間TCの経過後に、シングルクリックかダブルクリックかを最終決定する必要がある。それ故、シングルクリックの条件が満たされた時、仮クリックフラグにより、最終決定まで、その事実を保持しておくのである。
【0234】
ステップS1266では、MCU3は、シングルクリックの条件が満足されたので、仮クリックフラグをオンにする。そして、ステップS1268にて、MCU3は、消失フラグをオフにしてリターンする。なぜなら、ステップS1262で肯定判断がされているからである。
【0235】
一方、ステップS1272にて、MCU3は、ダブルクリックフラグをオンにする。なぜなら、仮クリックフラグがオンである状態において、さらに、図19(b)のステップS2106,S2108の変化が検出されたからである(ステップS1264にて肯定判断、ステップS1252にて肯定判断、ステップS1262にて肯定判断)。ステップS1274にて、MCU3は、タイマTMを解除する。ステップS1276にて、MCU3は、滞在フラグ、消失フラグ及び仮クリックフラグをオフにしてリターンする。なぜなら、ダブルクリックが決定されているため、これが最終決定だからである。なお、滞在フラグのオフは、矩形範囲52の解除、つまり、クリック操作判定のリセットに相当する。
【0236】
さて、ステップS1250にて肯定判断がされた後、MCU3は、最終決定を行なうべく、ステップS1278に進む。ステップS1278にて、MCU3は、仮クリックフラグがオンか否かを判断し、オンの場合ステップS1280に進み、オフの場合シングルクリックもダブルクリックも行なわれていないためステップS1282に進む。ステップS1280では、MCU3は、シングルクリックフラグをオンにしてステップS1282に進む。
【0237】
ステップS1282にて、MCU3は、タイマTMを解除する。ステップS1284にて、MCU3は、滞在フラグ、消失フラグ及び仮クリックフラグをオフにしてリターンする。なお、滞在フラグのオフは、矩形範囲52の解除、つまり、クリック操作判定のリセットに相当する。
【0238】
なお、シングルクリックフラグ及びダブルクリックフラグは、図3のステップS11にて、コンピュータ11に送信される。
【0239】
さて、以上のように、本実施の形態によれば、ユーザは、1本指を立てた状態から、もう一本の指を立てて2本指を立てた状態にするだけで、擬似的にボタン操作を行なうことができる。このように、ユーザにとって容易なジェスチャにより、擬似的にボタン操作を行なうことができる(図1(b)の第1の例)。
【0240】
また、擬似的なボタン操作の前後において、常に1本の指は撮影されるので、その指先に対応する画面上の位置にカーソルを表示でき、ポインティングと擬似的なボタン操作を片手で行なうことができる(図1(b)の第1の例)。
【0241】
また、本実施の形態によれば、ユーザは、2本指を立てた状態から、もう一本の指を閉じて1本指を立てた状態にするだけで、擬似的にボタン操作を行なうことができる。このように、ユーザにとって容易なジェスチャにより、擬似的にボタン操作を行なうことができる(図1(b)の第2の例)。
【0242】
また、擬似的なボタン操作の前後において、常に1本の指は撮影されるので、その指先に対応する画面上の位置にカーソルを表示でき、ポインティングと擬似的なボタン操作を片手で行なうことができる(図1(b)の第2の例)。
【0243】
さらに、本実施の形態によれば、ユーザは、2本の指の指先を近づけるだけで、擬似的なボタン操作を行なうことができる。このように、ユーザにとって容易なジェスチャにより、擬似的にボタン操作を行なうことができる(図1(b)の第3の例)。
【0244】
また、検出された2つの指先の間(例えば中点)にカーソルを表示することができ、ポインティングと擬似的なボタン操作を片手で行なうことができる(図1(b)の第3の例)。
【0245】
さらに、本実施の形態によれば、ユーザは、三次元空間中で、1本指を立てた状態から、その指を折って、再び、元の立てた状態に戻すというジェスチャを行なうだけで、非接触のクリック操作を行なうことができる。このように、ユーザにとって容易なジェスチャにより、クリック操作を行なうことができる(図19(a)の第4の例)。
【0246】
このような人のジェスチャでは、指が曲げられた後、指先が、ほぼ元の位置に戻ることが、本願発明者の実験により検証されている。このため、このようなジェスチャを検出することにより、クリック操作が行なわれたか否かを、安定して、かつ、確実に、つまり、高い再現性をもって、判断できる。
【0247】
さらに、本実施の形態によれば、ユーザは、三次元空間中で、1本指を立てた状態から、その指を折って、再び、元の立てた状態に戻し、さらに、再び、その指を折って、再び、元の立てた状態に戻すというジェスチャを行なうだけで、つまり、シングルクリック操作のためのジェスチャを2回行なうだけで、非接触のダブルクリック操作を行なうことができる。このように、ユーザにとって容易なジェスチャにより、ダブルクリック操作を行なうことができる(図19(b)の第4の例)。
【0248】
このようなダブルクリック操作は、シングルクリック操作を2回行うものであるところ、折り曲げられた指先は、2回とも、ほぼ同じ位置に戻ってくることが、本願発明者の実験により検証されている。このため、このようなジェスチャを検出することにより、ダブルクリック操作が行なわれたか否かを、安定して、かつ、確実に、つまり、高い再現性をもって、判断できる。
【0249】
また、本実施の形態では、MCU3は、指先50の動きが一定範囲DIS内に収まっている場合に(図20のステップS1208及びS1212で肯定判断)、ユーザがクリック操作(シングルクリック又はダブルクリック)を行なうことを意図しているとみなし、矩形範囲52を設定し(図20のステップS1216)、これをトリガとして、ユーザがクリック操作に対応するジェスチャを行ったか否かを判定できる。このため、ユーザが当該ジェスチャを行なったか否かを、常に判定する必要がなく、処理負荷を軽減できる。
【0250】
さらに、MCU3は、矩形範囲52が設定されてから所定時間TC内に、指先50が矩形範囲52から消失したと判断しない場合(図21のステップS1254)、又は、矩形範囲52に指先が出現したと判断しない場合(図21のステップS1262)、滞在フラグをオフにして、矩形範囲52を解除する(図21のステップS1284)。
【0251】
このように、所定時間TC内に、指先50が矩形範囲52から消失したと判断しない場合、又は、矩形範囲52に指先が出現したと判断しない場合、ユーザがクリック操作(シングルクリック又はダブルクリック)を行なうことを意図していないとみなして、ユーザの意図に反してクリック操作が行なわれたと判定されることを防止できる。つまり、一般にクリック操作は素早く行なわれるところ、所定時間TCを適切に設定することにより、同一の動きであっても、クリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0252】
さらに、本実施の形態によれば、輪郭から大体の指先を決定し(図9のステップS373,S375、図11のステップS445)、その周囲画素のみを用いて補正を行なうので(図12(a)〜図12(d))、処理のための記憶容量の削減と処理速度の向上を図ることができる。
【0253】
また、補正が小数点精度で実行されるので、イメージセンサ5が比較的低解像度であっても、高精度で指先の位置を決定することができる。その結果、イメージセンサ5より高解像度のモニタ13の画面上の、指先に対応する位置にカーソルを表示する場合でも、その動きを滑らかにすることができる。
【0254】
さらに、周囲画素の画素値により、補正を行なうので、補正後の指先を、輪郭線上ではなく、指の内部の位置に決定でき、ユーザが指先と認識する位置により近づけることができる。その結果、指先に対応するモニタ13の画面上の位置にカーソルを表示する場合、ユーザにとって、指先によるカーソルの制御が容易になる。なお、一般に、人は、指の腹を向けて、指を動かすときは、指の輪郭線上の凸点を指先と認識せず、指先端部の指の腹(finger pad)の中心を指先と認識するものである。
【0255】
さらに、本実施の形態では、補正後の指先の位置が、周囲画素の範囲(9×9画素の範囲)を超えるように、補正を行う。このため、補正後の指先の位置を指先端部の指の腹の一定位置あるいは略一定位置に決定することができ、図9のステップS373,S375、及び図11のステップS445により検出された指先の位置が安定していない場合でも、補正後の指先の位置を極力一定させ、あるいは、指先の位置の相違を極力小さい範囲に収めることができる。その結果、指先に対応するモニタ13の画面上の位置にカーソルを表示する場合、カーソルを安定化できる。
【0256】
また、補正後の指先を、ユーザが指先と認識する位置により一層近づけることができる。その結果、指先に対応するモニタ13の画面上の位置にカーソルを表示する場合、ユーザにとって、指先によるカーソルの制御が一層容易になる。
【0257】
さらに、本実施の形態では、指先画素P4と指先画素P4の斜め方向に位置する周囲画素(P0,P2,P6,P8)との間の距離と、指先画素P4と指先画素P4の水平方向又は垂直方向に位置する周囲画素(P1,P3,P5,P7)との間の距離と、が等しくなるように、周囲画素(P0,P2,P6,P8)の座標を定義する(図16(a)参照)。その結果、重みとして画素値を利用するに当って、全周囲画素の画素値が均等に扱われ、方向によって偏りのない補正を行なうことができる。
【0258】
さらに、本実施の形態によれば、電子機器9は、被写体の形状(グー、チョキ、パー、1本指)を入力とした情報処理を実行することができる。
【0259】
さらに、本実施の形態によれば、指先と水かきとの間の画素に基づいて指を特定し(図7のステップS257及びS259、図15参照)、輪郭画像の重心により指を特定しないので、重心により指を特定する場合と比較して、精度良く指を特定でき(図7)、ひいてはより精度良く手の形状を判定できる(図8、図9)。一般に、輪郭画像の重心と、被写体の重心と、は一致しない場合も多く、この場合に、重心により指を特定すると、認識の精度が低くなる。
【0260】
また、指先と水かきとの間の画素に基づいて得られた、隣り合う指と指とがなす角度だけでなく、重心から指先に相当する画素までの距離に基づいて、手の形状を判断するので(図9のステップS345〜S351)、より多様な手の形状を判定できる(図9)。例えば、手の形状が「チョキ」であることを判定できる。
【0261】
また、重心から輪郭線上の画素までの距離を求めるといった簡単な計算で(図6のステップS203)、手の形状を判定できる(図10)。例えば、重心から輪郭線上の画素までの距離が、一定範囲内の場合に、手の形状が「グー」であることを判定できる。
【0262】
さらに、本実施の形態によれば、図7のステップS275の結果だけに基づいて、検出された指先の数を判断するのではなく、さらに、重心座標(Xg,Yg)と凸点(図4のステップS33)の画素Pjの座標との間の距離Dを加味して(図11のステップS427,S441)、指が1本だけ立っている状態か否かを判定する。このため、より精度よく、指が1本だけ立っている状態を検出できる。
【0263】
さらに、本実施の形態によれば、画像上の被写体の面積は(図6のステップS213)、イメージセンサ5と被写体との間の距離に相関するので、面積により、イメージセンサ5と被写体との間の距離を容易に判断できる。
【0264】
なお、本発明は、上記の実施の形態に限られるものではなく、その要旨を逸脱しない範囲で種々の態様において実施することが可能であり、例えば、以下のような変形も可能である。
【0265】
(1)上記では、「グー」、「チョキ」、「パー」、及び「1本指」の形状を認識したが、これに限定されない。
【0266】
(2)画像処理装置1は、間欠的に点滅する赤外発光ダイオードを搭載することもできる。この場合、イメージセンサ5は、赤外光発光時及び消灯時のそれぞれにおいて撮影処理を実行し、発光時画像と消灯時画像との差分画像を生成して、MCU3に出力する。MCU3は、その差分画像から手を検出する。このように、差分といった簡易な処理で、背景画像を容易に除去できる。
【0267】
この場合、イメージセンサ5は、差分画像の各画素(例えばグレースケール)をシリアルに出力するところ、MCU3は、イメージセンサ5から受け取った画素を、順次、所定の閾値と比較して、2値化し、メモリ7に格納する。そして、MCU3は、2値化後の差分画像に基づいて、上述した各種処理を実行する。また、図12(a)〜図12(d)に示す指先補正値計算処理を実行する場合は、MCU3は、画素値p0〜p8を、イメージセンサ5から順次取得し、計算式に代入して、補正値(Xc,Yc)を算出する。なお、イメージセンサ5は、MCU3による2値化のために差分画像を出力した後でも、一定時間は(次の撮影処理までは)、差分画像データを保持しているので、指先補正値計算処理では、そこから必要な画素を取得することができる。
【0268】
以上のように、2値化された差分画像をメモリ7に格納することで、メモリ容量を削減できる。また、指先補正値計算処理においても、メモリ7に格納した3×3画素(例えばグレースケール)を処理するのではなく、イメージセンサ5からの出力画素を順次処理しており、これもまたメモリ容量を削減できる。もちろん、イメージセンサ5が出力した差分画像をそのままメモリ7に格納して処理することもできる。
【0269】
(3)上記では、指先画素P4を原点(0,0)として、周囲画素の座標値を設定し、補正値(Xc,Yc)を算出し、それを指先画素P4の座標(Xb,Yb)に加算することで、補正座標(Xf,Yf)を得た(図16(a)及び図16(b))。ただし、図12の第1〜第4の例の各式で使用する座標の原点は、これに限定されない。例えば、図9のステップS373,S375、及び図11のステップS445で求められた座標を、そのまま、指先画素P4の座標として使用して、周囲画素の座標を定め、補正座標(Xf,Yf)を求めることもできる。この場合は、図12(a)〜図12(d)の各ステップで得られた値(Xc,Yc)が、補正座標(Xf,Yf)そのものであり、加算は不要である。
【0270】
(4)図19(a)の第4の例では、所定時間TC内に、シングルクリック操作に対応するジェスチャが検出されない場合は、矩形範囲52が解除されシングルクリック操作判定がリセットされた(図21のステップS1284)。
【0271】
ただし、MCU3が、指先50が矩形範囲52から消失したと判断した後(ステップS1254で肯定判断)の所定時間TC2内に、指先50が矩形範囲52に出現したと判断しない場合、矩形範囲52を解除し、シングルクリック操作判定をリセットしてもよい。なお、MCU3が、矩形範囲52設定後所定時間TC内に、指先50が矩形範囲52から消失したと判断しない場合に、矩形範囲52を解除する点は、図21と同じである。
【0272】
このように、所定時間TC2内に、MCU3が、指先50が矩形範囲52に出現したと判断しない場合、ユーザがクリック操作を行なうことを意図していないとみなして、ユーザの意図に反してクリック操作が行なわれたと判定されることを防止できる。つまり、一般にクリック操作は素早く行なわれるところ、所定時間TC2を適切に設定することにより、同一の動きであっても、クリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0273】
また、図19(b)の第4の例では、所定時間TC内に、ダブルクリック操作に対応するジェスチャが検出されない場合は、ダブルクリック操作判定がリセットされた(図21のステップS1284)。
【0274】
ただし、仮クリックフラグがオンになった後において、MCU3が、指先50が矩形範囲52から消失したと判断した後の所定時間TC3内に、指先50が矩形範囲52に出現したと判断しない場合、矩形範囲52を解除し、ダブルクリック操作判定をリセットしてもよい。なお、仮クリックフラグがオンになった後において、MCU3が、矩形範囲52の設定後所定時間TC内に、指先50が矩形範囲52から消失したと判断しない場合に、矩形範囲52を解除する点は、図21と同じである。また、仮クリックフラグがオンになるまでの判定(シングルクリックの判定)は図21又は上記変形と同じである。
【0275】
このように、所定時間TC3内に、MCU3が、指先50が矩形範囲52に出現したと判断しない場合、ユーザがダブルクリック操作を行なうことを意図していないとみなして、ユーザの意図に反してダブルクリック操作が行なわれたと判定されることを防止できる。つまり、一般にダブルクリック操作は素早く行なわれるところ、所定時間TC3を適切に設定することにより、同一の動きであっても、ダブルクリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0276】
また、MCU3が、指先50が矩形範囲に出現したと判断してから、つまり、仮クリックフラグをオンにしてから所定時間TC4内に、指先50が矩形範囲52から消失したと判断しない場合、矩形範囲52を解除し、ダブルクリック操作判定をリセットしてもよい。なお、仮クリックフラグがオンになるまでの判定(シングルクリックの判定)は図21又は上記変形と同じである。
【0277】
このように、所定時間TC4内に、MCU3が、指先50が矩形範囲52から消失したと判断しない場合、ユーザがダブルクリック操作を行なうことを意図していないとみなして、ユーザの意図に反してダブルクリック操作が行なわれたと判定されることを防止できる。つまり、一般にダブルクリック操作は素早く行なわれるところ、所定時間TC4を適切に設定することにより、同一の動きであっても、ダブルクリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0278】
さらに、この場合、MCU3が、仮クリックフラグをオンにしてから所定時間TC4内に、指先50の消失の後、再び指先50が矩形範囲52に出現したと判断しない場合、矩形範囲52を解除し、ダブルクリック操作判定をリセットしてもよい。
【0279】
このように、所定時間TC4内に、MCU3が、指先50が矩形範囲52に出現したと判断しない場合、ユーザがダブルクリック操作を行なうことを意図していないとみなして、ユーザの意図に反してダブルクリック操作が行なわれたと判定されることを防止できる。つまり、一般にダブルクリック操作は素早く行なわれるところ、所定時間TC4を適切に設定することにより、同一の動きであっても、ダブルクリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0280】
また、このような判定に代えて、MCU3が、仮クリックフラグをオンにしてから所定時間TC4内の指先50の消失の後の所定時間TC5内に、指先50が矩形範囲52に出現したと判断しない場合、矩形範囲52を解除し、ダブルクリック操作判定をリセットすることもできる。
【0281】
このように、所定時間TC5内に、MCU3が、指先50が矩形範囲52に出現したと判断しない場合、ユーザがダブルクリック操作を行なうことを意図していないとみなして、ユーザの意図に反してダブルクリック操作が行なわれたと判定されることを防止できる。つまり、一般にダブルクリック操作は素早く行なわれるところ、所定時間TC5を適切に設定することにより、同一の動きであっても、ダブルクリック操作を意図したジェスチャ以外の動きを除外して、誤判定を防止できる。
【0282】
ここで、上記の所定時間TC2〜TC5は、実験及び試行錯誤等により決定される。
【0283】
(5)MCU3が行なう処理の全部又は一部をコンピュータ11が行なうこともできる。要するに、どちらがどの処理を行なうかは、仕様に応じて、任意に決定できる。
【0284】
(6)MCU3に各種の処理を行わせるためのプログラムを記述する処理ステップは、必ずしもフローチャートとして記載された順序に沿って時系列に処理する必要はなく、また、並列的あるいは個別に実行される処理も含むものである。
【0285】
(7)本明細書及び請求の範囲において、手段とは必ずしも物理的手段を意味するものではなく、各手段の機能がソフトウェアによって実現される場合も含む。さらに、1つの手段の機能が2つ以上の物理的手段により実現されても、もしくは2つ以上の手段の機能が1つの物理的手段により実現されてもよい。
【産業上の利用可能性】
【0286】
本発明は、表示装置にカーソルを表示してポインティングを行なうポインティングデバイスの分野に利用可能である。
【0287】
また、本発明は、画像解析により指先を検出する画像解析の分野に利用可能である。
【符号の説明】
【0288】
1…画像処理装置、3…MCU、5…イメージセンサ、7…メモリ、9…電子機器、11…コンピュータ、13…モニタ。
【特許請求の範囲】
【請求項1】
三次元空間中で動かされるユーザの手を撮影する撮影手段と、
撮影により得られた画像から、前記ユーザの指先に相当する部分を検出する検出手段と、
検出された前記指先に相当する部分を含む所定範囲を設定する設定手段と、
前記設定手段が、前記所定範囲を設定した後、前記指先に相当する部分が消失したか否かを判断する第1判断手段と、
前記第1判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断した後、前記指先に相当する部分が前記所定範囲に出現したか否かを判断する第2判断手段と、
前記第2判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断した場合に、クリック操作が行なわれたと判定する判定手段と、を備える操作判定装置。
【請求項2】
前記設定手段は、検出された前記指先に相当する部分の動きが一定範囲内に収まっている場合に、前記所定範囲を設定する、請求項1記載の操作判定装置。
この構成によれば、前記指先に相当する部分の動きが一定範囲内に収まっている場合に、ユーザがクリック操作を行なうことを意図しているとみなし、所定範囲を設定し、これをトリガとして、ユーザがクリック操作に対応するジェスチャを行ったか否かを判定できる。このため、ユーザが当該ジェスチャを行なったか否かを、常に判定する必要がなく、処理負荷を軽減できる。
【請求項3】
前記設定手段は、前記所定範囲が設定されてから第1所定時間内に、前記第1判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断しない場合、前記所定範囲を解除する、請求項1又は2記載の操作判定装置。
【請求項4】
前記設定手段は、前記所定範囲が設定されてから前記第1所定時間内に、前記第2判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断しない場合、前記所定範囲を解除する、請求項3記載の操作判定装置。
【請求項5】
前記設定手段は、前記第1判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断した後、第2所定時間内に、前記第2判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断しない場合、前記所定範囲を解除する、請求項3記載の操作判定装置。
【請求項6】
前記第2判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断した後、前記指先に相当する部分が消失したか否かを判断する第3判断手段と、
前記第3判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断した後、前記指先に相当する部分が前記所定範囲に出現したか否かを判断する第4判断手段と、をさらに備え、
前記判定手段は、前記第4判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断した場合に、ダブルクリック操作が行なわれたと判定する、請求項1又は2記載の操作判定装置。
【請求項7】
前記設定手段は、前記所定範囲が設定されてから前記第1所定時間内に、前記第3判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断しない場合、前記所定範囲を解除する、請求項6記載の操作判定装置。
【請求項8】
前記設定手段は、前記所定範囲が設定されてから前記第1所定時間内に、前記第4判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断しない場合、前記所定範囲を解除する、請求項7記載の操作判定装置。
【請求項9】
前記設定手段は、前記第3判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断した後、第3所定時間内に、前記第4判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断しない場合、前記所定範囲を解除する、請求項7記載の操作判定装置。
【請求項10】
前記設定手段は、前記第2判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断してから、第4所定時間内に、前記第3判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断しない場合、前記所定範囲を解除する、請求項6記載の操作判定装置。
【請求項11】
前記設定手段は、前記第4所定時間内に、前記第4判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断しない場合、前記所定範囲を解除する、請求項10記載の操作判定装置。
【請求項12】
前記設定手段は、前記第3判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断した後、第5所定時間内に、前記第4判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断しない場合、前記所定範囲を解除する、請求項10記載の操作判定装置。
【請求項13】
三次元空間中で動かされるユーザの手を撮影する撮影手段と、
撮影により得られた画像から、前記ユーザの指に相当する部分を検出する検出手段と、
今回前記ユーザの指に相当する部分が1つ検出された場合において、前回前記ユーザの指に相当する部分が2つ検出されていたとき、擬似的にボタン操作が行なわれたと判定する判定手段と、を備える操作判定装置。
【請求項14】
三次元空間中で動かされるユーザの手を撮影する撮影手段と、
撮影により得られた画像から、前記ユーザの指に相当する部分を検出する検出手段と、
今回前記ユーザの指に相当する部分が2つ検出された場合において、前回前記ユーザの指に相当する部分が1つ検出されていたとき、擬似的にボタン操作が行なわれたと判定する判定手段と、を備える操作判定装置。
【請求項15】
三次元空間中で動かされるユーザの手を撮影する撮影手段と、
撮影により得られた画像から、前記ユーザの指先に相当する部分を検出する検出手段と、
前記ユーザの指先に相当する部分が2つ検出された場合において、その2点間の距離が所定値より小さい場合に、擬似的にボタンが行なわれたと判定する判定手段と、を備える操作判定装置。
【請求項16】
三次元空間中で動かされるユーザの手を撮影する撮影手段と、
撮影により得られた画像から、前記手の像の輪郭を検出する輪郭検出手段と、
前記輪郭から、前記手の指先に相当する部分の画素(以下、「指先画素」と呼ぶ。)を検出する指先検出手段と、
前記指先画素の周囲の画素(以下、「周囲画素」と呼ぶ。)の画素値及び座標を用いて、前記指先検出手段により検出された前記指先画素の座標を小数点精度で補正する補正手段と、を備える指先検出装置。
【請求項17】
前記補正値算出手段は、前記指先画素及び前記周囲画素の画素値を重みとし、前記指先画素及び前記周囲画素の座標の加重平均を算出し、前記指先画素の座標を補正する、請求項16記載の指先検出装置。
【請求項18】
前記補正値算出手段は、補正後の指先の位置が、前記周囲画素の範囲を超えるように、前記補正を行う、請求項16又は17記載の指先検出装置。
【請求項19】
前記補正値算出手段は、前記指先画素及び前記周囲画素の画素値を、前記指先画素及び前記周囲画素の座標への重みとし、重み付けされた前記指先画素及び前記周囲画素の座標の和を算出し、その和を、前記指先画素及び前記周囲画素の画素値のうちの最大値で除することにより、前記指先画素の座標を補正する、請求項16記載の指先検出装置。
【請求項20】
前記補正値算出手段は、前記指先画素と前記指先画素の斜め方向に位置する前記周囲画素との間の距離と、前記指先画素と前記指先画素の水平方向又は垂直方向に位置する前記周囲画素との間の距離と、が等しくなるように、前記周囲画素の座標を定義する、請求項16から19のいずれかに記載の指先検出装置。
【請求項21】
三次元空間中で動かされるユーザの手を撮影するステップと、
撮影により得られた画像から、前記ユーザの指先に相当する部分を検出するステップと、
検出された前記指先に相当する部分を含む所定範囲を設定するステップと、
前記所定範囲を設定した後、前記指先に相当する部分が消失したか否かを判断するステップと、
消失したか否かを判断する前記ステップが、前記指先に相当する部分が前記所定範囲から消失したと判断した後、前記指先に相当する部分が前記所定範囲に出現したか否かを判断するステップと、
出現したか否かを判断する前記ステップが、前記指先に相当する部分が前記所定範囲に出現したと判断した場合に、クリック操作が行なわれたと判定するステップと、を含む操作判定方法。
【請求項22】
三次元空間中で動かされるユーザの手を撮影するステップと、
撮影により得られた画像から、前記ユーザの指に相当する部分を検出するステップと、
今回前記ユーザの指に相当する部分が1つ検出された場合において、前回前記ユーザの指に相当する部分が2つ検出されていたとき、擬似的にボタン操作が行なわれたと判定するステップと、を含む操作判定方法。
【請求項23】
三次元空間中で動かされるユーザの手を撮影するステップと、
撮影により得られた画像から、前記ユーザの指に相当する部分を検出するステップと、
今回前記ユーザの指に相当する部分が2つ検出された場合において、前回前記ユーザの指に相当する部分が1つ検出されていたとき、擬似的にボタン操作が行なわれたと判定するステップと、を含む操作判定方法。
【請求項24】
三次元空間中で動かされるユーザの手を撮影するステップと、
撮影により得られた画像から、前記ユーザの指先に相当する部分を検出するステップと、
前記ユーザの指先に相当する部分が2つ検出された場合において、その2点間の距離が所定値より小さい場合に、擬似的にボタン操作が行なわれたと判定するステップと、を含む操作判定方法。
【請求項25】
三次元空間中で動かされるユーザの手を撮影するステップと、
撮影により得られた画像から、前記手の像の輪郭を検出するステップと、
前記輪郭から、前記手の指先に相当する部分の画素(以下、「指先画素」と呼ぶ。)を検出するステップと、
前記指先画素の周囲の画素(以下、「周囲画素」と呼ぶ。)の画素値及び座標を用いて、前記指先画素を検出する前記ステップにより検出された前記指先画素の座標を小数点精度で補正するステップと、を含む指先検出方法。
【請求項26】
請求項21記載の操作判定方法をコンピュータに実行させるためのコンピュータプログラム。
【請求項27】
請求項22記載の操作判定方法をコンピュータに実行させるためのコンピュータプログラム。
【請求項28】
請求項23記載の操作判定方法をコンピュータに実行させるためのコンピュータプログラム。
【請求項29】
請求項24記載の操作判定方法をコンピュータに実行させるためのコンピュータプログラム。
【請求項30】
請求項25記載の指先検出方法をコンピュータに実行させるためのコンピュータプログラム。
【請求項1】
三次元空間中で動かされるユーザの手を撮影する撮影手段と、
撮影により得られた画像から、前記ユーザの指先に相当する部分を検出する検出手段と、
検出された前記指先に相当する部分を含む所定範囲を設定する設定手段と、
前記設定手段が、前記所定範囲を設定した後、前記指先に相当する部分が消失したか否かを判断する第1判断手段と、
前記第1判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断した後、前記指先に相当する部分が前記所定範囲に出現したか否かを判断する第2判断手段と、
前記第2判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断した場合に、クリック操作が行なわれたと判定する判定手段と、を備える操作判定装置。
【請求項2】
前記設定手段は、検出された前記指先に相当する部分の動きが一定範囲内に収まっている場合に、前記所定範囲を設定する、請求項1記載の操作判定装置。
この構成によれば、前記指先に相当する部分の動きが一定範囲内に収まっている場合に、ユーザがクリック操作を行なうことを意図しているとみなし、所定範囲を設定し、これをトリガとして、ユーザがクリック操作に対応するジェスチャを行ったか否かを判定できる。このため、ユーザが当該ジェスチャを行なったか否かを、常に判定する必要がなく、処理負荷を軽減できる。
【請求項3】
前記設定手段は、前記所定範囲が設定されてから第1所定時間内に、前記第1判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断しない場合、前記所定範囲を解除する、請求項1又は2記載の操作判定装置。
【請求項4】
前記設定手段は、前記所定範囲が設定されてから前記第1所定時間内に、前記第2判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断しない場合、前記所定範囲を解除する、請求項3記載の操作判定装置。
【請求項5】
前記設定手段は、前記第1判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断した後、第2所定時間内に、前記第2判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断しない場合、前記所定範囲を解除する、請求項3記載の操作判定装置。
【請求項6】
前記第2判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断した後、前記指先に相当する部分が消失したか否かを判断する第3判断手段と、
前記第3判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断した後、前記指先に相当する部分が前記所定範囲に出現したか否かを判断する第4判断手段と、をさらに備え、
前記判定手段は、前記第4判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断した場合に、ダブルクリック操作が行なわれたと判定する、請求項1又は2記載の操作判定装置。
【請求項7】
前記設定手段は、前記所定範囲が設定されてから前記第1所定時間内に、前記第3判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断しない場合、前記所定範囲を解除する、請求項6記載の操作判定装置。
【請求項8】
前記設定手段は、前記所定範囲が設定されてから前記第1所定時間内に、前記第4判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断しない場合、前記所定範囲を解除する、請求項7記載の操作判定装置。
【請求項9】
前記設定手段は、前記第3判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断した後、第3所定時間内に、前記第4判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断しない場合、前記所定範囲を解除する、請求項7記載の操作判定装置。
【請求項10】
前記設定手段は、前記第2判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断してから、第4所定時間内に、前記第3判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断しない場合、前記所定範囲を解除する、請求項6記載の操作判定装置。
【請求項11】
前記設定手段は、前記第4所定時間内に、前記第4判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断しない場合、前記所定範囲を解除する、請求項10記載の操作判定装置。
【請求項12】
前記設定手段は、前記第3判断手段が、前記指先に相当する部分が前記所定範囲から消失したと判断した後、第5所定時間内に、前記第4判断手段が、前記指先に相当する部分が前記所定範囲に出現したと判断しない場合、前記所定範囲を解除する、請求項10記載の操作判定装置。
【請求項13】
三次元空間中で動かされるユーザの手を撮影する撮影手段と、
撮影により得られた画像から、前記ユーザの指に相当する部分を検出する検出手段と、
今回前記ユーザの指に相当する部分が1つ検出された場合において、前回前記ユーザの指に相当する部分が2つ検出されていたとき、擬似的にボタン操作が行なわれたと判定する判定手段と、を備える操作判定装置。
【請求項14】
三次元空間中で動かされるユーザの手を撮影する撮影手段と、
撮影により得られた画像から、前記ユーザの指に相当する部分を検出する検出手段と、
今回前記ユーザの指に相当する部分が2つ検出された場合において、前回前記ユーザの指に相当する部分が1つ検出されていたとき、擬似的にボタン操作が行なわれたと判定する判定手段と、を備える操作判定装置。
【請求項15】
三次元空間中で動かされるユーザの手を撮影する撮影手段と、
撮影により得られた画像から、前記ユーザの指先に相当する部分を検出する検出手段と、
前記ユーザの指先に相当する部分が2つ検出された場合において、その2点間の距離が所定値より小さい場合に、擬似的にボタンが行なわれたと判定する判定手段と、を備える操作判定装置。
【請求項16】
三次元空間中で動かされるユーザの手を撮影する撮影手段と、
撮影により得られた画像から、前記手の像の輪郭を検出する輪郭検出手段と、
前記輪郭から、前記手の指先に相当する部分の画素(以下、「指先画素」と呼ぶ。)を検出する指先検出手段と、
前記指先画素の周囲の画素(以下、「周囲画素」と呼ぶ。)の画素値及び座標を用いて、前記指先検出手段により検出された前記指先画素の座標を小数点精度で補正する補正手段と、を備える指先検出装置。
【請求項17】
前記補正値算出手段は、前記指先画素及び前記周囲画素の画素値を重みとし、前記指先画素及び前記周囲画素の座標の加重平均を算出し、前記指先画素の座標を補正する、請求項16記載の指先検出装置。
【請求項18】
前記補正値算出手段は、補正後の指先の位置が、前記周囲画素の範囲を超えるように、前記補正を行う、請求項16又は17記載の指先検出装置。
【請求項19】
前記補正値算出手段は、前記指先画素及び前記周囲画素の画素値を、前記指先画素及び前記周囲画素の座標への重みとし、重み付けされた前記指先画素及び前記周囲画素の座標の和を算出し、その和を、前記指先画素及び前記周囲画素の画素値のうちの最大値で除することにより、前記指先画素の座標を補正する、請求項16記載の指先検出装置。
【請求項20】
前記補正値算出手段は、前記指先画素と前記指先画素の斜め方向に位置する前記周囲画素との間の距離と、前記指先画素と前記指先画素の水平方向又は垂直方向に位置する前記周囲画素との間の距離と、が等しくなるように、前記周囲画素の座標を定義する、請求項16から19のいずれかに記載の指先検出装置。
【請求項21】
三次元空間中で動かされるユーザの手を撮影するステップと、
撮影により得られた画像から、前記ユーザの指先に相当する部分を検出するステップと、
検出された前記指先に相当する部分を含む所定範囲を設定するステップと、
前記所定範囲を設定した後、前記指先に相当する部分が消失したか否かを判断するステップと、
消失したか否かを判断する前記ステップが、前記指先に相当する部分が前記所定範囲から消失したと判断した後、前記指先に相当する部分が前記所定範囲に出現したか否かを判断するステップと、
出現したか否かを判断する前記ステップが、前記指先に相当する部分が前記所定範囲に出現したと判断した場合に、クリック操作が行なわれたと判定するステップと、を含む操作判定方法。
【請求項22】
三次元空間中で動かされるユーザの手を撮影するステップと、
撮影により得られた画像から、前記ユーザの指に相当する部分を検出するステップと、
今回前記ユーザの指に相当する部分が1つ検出された場合において、前回前記ユーザの指に相当する部分が2つ検出されていたとき、擬似的にボタン操作が行なわれたと判定するステップと、を含む操作判定方法。
【請求項23】
三次元空間中で動かされるユーザの手を撮影するステップと、
撮影により得られた画像から、前記ユーザの指に相当する部分を検出するステップと、
今回前記ユーザの指に相当する部分が2つ検出された場合において、前回前記ユーザの指に相当する部分が1つ検出されていたとき、擬似的にボタン操作が行なわれたと判定するステップと、を含む操作判定方法。
【請求項24】
三次元空間中で動かされるユーザの手を撮影するステップと、
撮影により得られた画像から、前記ユーザの指先に相当する部分を検出するステップと、
前記ユーザの指先に相当する部分が2つ検出された場合において、その2点間の距離が所定値より小さい場合に、擬似的にボタン操作が行なわれたと判定するステップと、を含む操作判定方法。
【請求項25】
三次元空間中で動かされるユーザの手を撮影するステップと、
撮影により得られた画像から、前記手の像の輪郭を検出するステップと、
前記輪郭から、前記手の指先に相当する部分の画素(以下、「指先画素」と呼ぶ。)を検出するステップと、
前記指先画素の周囲の画素(以下、「周囲画素」と呼ぶ。)の画素値及び座標を用いて、前記指先画素を検出する前記ステップにより検出された前記指先画素の座標を小数点精度で補正するステップと、を含む指先検出方法。
【請求項26】
請求項21記載の操作判定方法をコンピュータに実行させるためのコンピュータプログラム。
【請求項27】
請求項22記載の操作判定方法をコンピュータに実行させるためのコンピュータプログラム。
【請求項28】
請求項23記載の操作判定方法をコンピュータに実行させるためのコンピュータプログラム。
【請求項29】
請求項24記載の操作判定方法をコンピュータに実行させるためのコンピュータプログラム。
【請求項30】
請求項25記載の指先検出方法をコンピュータに実行させるためのコンピュータプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【公開番号】特開2012−73659(P2012−73659A)
【公開日】平成24年4月12日(2012.4.12)
【国際特許分類】
【出願番号】特願2010−203748(P2010−203748)
【出願日】平成22年9月10日(2010.9.10)
【出願人】(396025861)新世代株式会社 (138)
【Fターム(参考)】
【公開日】平成24年4月12日(2012.4.12)
【国際特許分類】
【出願日】平成22年9月10日(2010.9.10)
【出願人】(396025861)新世代株式会社 (138)
【Fターム(参考)】
[ Back to top ]