(57)【特許請求の範囲】
【請求項１】
手を撮像する撮像手段と、
前記撮像手段により撮像された画像を輝度情報に変換する変換手段と、
前記変換手段により変換された現フレームの前記輝度情報と、１フレーム前の前記輝度情報の差に基づいて、動き領域を検出する動き領域検出手段と、
前記動き領域検出手段により検出された前記動き領域が前記手であるかを評価する評価値を算出する評価値算出手段と、
前記評価値算出手段により算出された前記評価値に基づいて、複数の前記動き領域のうちの所定の領域を前記手の領域として選択する選択手段と、
前記選択手段により選択された前記手の領域における前記現フレームの前記輝度情報と、前記１フレーム前の前記輝度情報の差によってできた画像のエッジ情報を抽出するエッジ情報抽出手段と、
前記エッジ情報抽出手段により抽出された前記エッジ情報の特徴ベクトルを特徴量として算出する特徴量算出手段と、
前記特徴量算出手段により算出された前記特徴量に基づいて、ＤＰマッチングの手法を用いてＤＰ値を算出するＤＰ値算出手段と、
前記ＤＰ値算出手段により算出された前記ＤＰ値が所定値より小さいか否かを判定する判定手段と、
前記判定手段により、前記ＤＰ値が前記所定値より小さいと判定された場合、前記手の握り動作を認識する認識手段と
を備えることを特徴とする画像処理装置。
【請求項２】
前記動き領域検出手段は、前記現フレームの前記輝度情報と、前記１フレーム前の前記輝度情報の差が所定の閾値以上であるか否かを判断することにより、前記動き領域を検出する
ことを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記動き領域検出手段により検出された前記動き領域の重心を算出する重心算出手段をさらに備え、
前記エッジ情報抽出手段は、前記重心算出手段により算出された前記動き領域の重心を中心とする所定の矩形領域を上下方向に３等分し、各領域のそれぞれにおいて、垂直方向および水平方向のエッジ情報を抽出する
ことを特徴とする請求項１に記載の画像処理装置。
【請求項４】
前記選択手段により選択された前記動き領域の動き方向を検出する動き方向検出手段をさらに備え、
前記認識手段は、前記動き方向検出手段により検出された前記手の動きをマウスの移動操作と認識し、前記手を握る動作を前記マウスがアイコンを選択する操作と認識し、前記手を握ったまま移動させる動作を前記アイコンを選択したままドラッグする操作と認識し、前記手を開く動作を前記アイコンの選択を解除する操作と認識し、前記手を左方向に振る動作を前記マウスの左ボタンをクリックする操作と認識し、前記手を右方向に振る動作を前記マウスの右ボタンをクリックする操作と認識する
ことを特徴とする請求項１に記載の画像処理装置。
【請求項５】
手を撮像する撮像ステップと、
前記撮像ステップの処理により撮像された画像を輝度情報に変換する変換ステップと、
前記変換ステップの処理により変換された現フレームの前記輝度情報と、１フレーム前の前記輝度情報の差に基づいて、動き領域を検出する動き領域検出ステップと、
前記動き領域検出ステップの処理により検出された前記動き領域が前記手であるかを評価する評価値を算出する評価値算出ステップと、
前記評価値算出ステップの処理により算出された前記評価値に基づいて、複数の前記動き領域のうちの所定の領域を前記手の領域として選択する選択ステップと、
前記選択ステップの処理により選択された前記手の領域における前記現フレームの前記輝度情報と、前記１フレーム前の前記輝度情報の差によってできた画像のエッジ情報を抽出するエッジ情報抽出ステップと、
前記エッジ情報抽出ステップの処理により抽出された前記エッジ情報の特徴ベクトルを特徴量として算出する特徴量算出ステップと、
前記特徴量算出ステップの処理により算出された前記特徴量に基づいて、ＤＰマッチングの手法を用いてＤＰ値を算出するＤＰ値算出ステップと、
前記ＤＰ値算出ステップの処理により算出された前記ＤＰ値が所定値より小さいか否かを判定する判定ステップと、
前記判定ステップの処理により、前記ＤＰ値が前記所定値より小さいと判定された場合、前記手の握り動作を認識する認識ステップと
を含むことを特徴とする画像処理方法。
【請求項６】
手を撮像する撮像ステップと、
前記撮像ステップの処理により撮像された画像を輝度情報に変換する変換ステップと、
前記変換ステップの処理により変換された現フレームの前記輝度情報と、１フレーム前の前記輝度情報の差に基づいて、動き領域を検出する動き領域検出ステップと、
前記動き領域検出ステップの処理により検出された前記動き領域が前記手であるかを評価する評価値を算出する評価値算出ステップと、
前記評価値算出ステップの処理により算出された前記評価値に基づいて、複数の前記動き領域のうちの所定の領域を前記手の領域として選択する選択ステップと、
前記選択ステップの処理により選択された前記手の領域における前記現フレームの前記輝度情報と、前記１フレーム前の前記輝度情報の差によってできた画像のエッジ情報を抽出するエッジ情報抽出ステップと、
前記エッジ情報抽出ステップの処理により抽出された前記エッジ情報の特徴ベクトルを特徴量として算出する特徴量算出ステップと、
前記特徴量算出ステップの処理により算出された前記特徴量に基づいて、ＤＰマッチングの手法を用いてＤＰ値を算出するＤＰ値算出ステップと、
前記ＤＰ値算出ステップの処理により算出された前記ＤＰ値が所定値より小さいか否かを判定する判定ステップと、
前記判定ステップの処理により、前記ＤＰ値が前記所定値より小さいと判定された場合、前記手の握り動作を認識する認識ステップと
を含むことを特徴とするコンピュータが読み取り可能なプログラムが記録されている記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、画像処理装置および方法、並びに記録媒体に関し、特に、画像処理により、ユーザの手の握りおよび開き動作を認識することができるようにした画像処理装置および方法、並びに記録媒体に関する。
【０００２】
【従来の技術】
従来、ユーザの身振りや手振りをコンピュータグラフィックスとして取り入れることにより、人とコンピュータとのインタフェースをとる手法がいくつか提案されている。
【０００３】
例えば、特開平１１−１９５１４０号公報には、データグローブを用いて身振りや手振りでコンピュータを操作することにより、３次元コンピュータグラフィックスデータを編集する技術が開示されている。
【０００４】
また、例えば、特開平９−３１１７５９号公報には、所定色に点灯・点滅するペンライトを用いてユーザがジェスチャし、そのペンライトをカメラで撮像・画像認識することにより、コンピュータと人とのインタフェースを行う技術が開示されている。
【０００５】
さらにまた、例えば、特開平９−１０２０４６号公報には、カメラで撮像したシルエット画像から手の形状を推定、認識することにより、コンピュータと人とのインタフェースを行う技術が開示されている。
【０００６】
さらにまた、例えば、特開平８−２１２３２７号公報には、カメラで撮像した手の画像のオリエンテーション一次元ヒストグラム、および、二次元空間時間オリエンテーションヒストグラムを用いて身振りを認識することにより、コンピュータと人とのインタフェースを行う技術が開示されている。
【０００７】
さらにまた、例えば、特開平９−１７９９８８号公報には、２台のカメラを用いて手の三次元的な姿勢、身振りを認識することにより、コンピュータと人とのインタフェースを行う技術が開示されている。
【０００８】
さらにまた、例えば、特開平１１−１６２１５１号公報には、連続DP（Continuous Dynamic Programming）の手法を用いて、ユーザの身振りを認識することにより、コンピュータと人とのインタフェースを行う技術が開示されている。
【０００９】
【発明が解決しようとする課題】
データグローブを用いる手法（特開平１１−１９５１４０号公報）の場合、手の形や手の動きを認識することができる反面、データグローブの着脱が不便であり、かつ、データグローブとコンピュータとを接続するケーブルが煩わしくなる課題があった。
【００１０】
そこで、ユーザの使い勝手を考慮して、ペンライトを用いる手法（特開平９−３１１７５９号公報）が提案されているが、ユーザがペンライトを持たなければならず、ユーザに対する煩わしさが依然として残り、また、特殊なデバイス（ペンライト）を用いているため、汎用性に欠ける課題があった。
【００１１】
また、ユーザに対する煩わしさを軽減させるため、カメラで撮像した手の形状を画像認識する手法が提案されている（特開平９−１０２０４６号公報、および、特開平８−２１２３２７号公報）が、照明変化などにより、手の形状が正確に検出されない恐れがあり、誤認識する課題があった。
【００１２】
そこで、誤認識を防止するため、複数台のカメラを用いて画像認識する手法も提案されている（特開平９−１７９９８８号公報）が、低コストで実現することができない課題があった。
【００１３】
さらに、連続DPを用いたジェスチャ認識手法が提案されている（特開平１１−１６２１５１号公報）が、掴む（握る）というような手の動作を認識することができない課題があった。
【００１４】
そこで、特開平１１−２９６６７３号公報などには、ユーザが指し示した位置を特定することが開示されているが、手で掴んで（握って）、選択するといった動作を簡易な手法で認識することが困難である課題があった。
【００１５】
本発明はこのような状況に鑑みてなされたものであり、低コストで、かつ、高精度に、ユーザの身振りを認識し、かつ、手で掴む動作を画像処理により認識することができるようにするものである。
【００１６】
【課題を解決するための手段】
本発明の画像処理装置は、手を撮像する撮像手段と、撮像手段により撮像された画像を輝度情報に変換する変換手段と、変換手段により変換された現フレームの輝度情報と、１フレーム前の輝度情報の差に基づいて、動き領域を検出する動き領域検出手段と、動き領域検出手段により検出された動き領域が手であるかを評価する評価値を算出する評価値算出手段と、評価値算出手段により算出された評価値に基づいて、複数の動き領域のうちの所定の領域を手の領域として選択する選択手段と、選択手段により選択された手の領域における現フレームの輝度情報と、１フレーム前の輝度情報の差によってできた画像のエッジ情報を抽出するエッジ情報抽出手段と、エッジ情報抽出手段により抽出されたエッジ情報の特徴ベクトルを特徴量として算出する特徴量算出手段と、特徴量算出手段により算出された特徴量に基づいて、ＤＰマッチングの手法を用いてＤＰ値を算出するＤＰ値算出手段と、ＤＰ値算出手段により算出されたＤＰ値が所定値より小さいか否かを判定する判定手段と、判定手段により、ＤＰ値が所定値より小さいと判定された場合、手の握り動作を認識する認識手段とを備えることを特徴とする。
【００１７】
動き領域検出手段は、現フレームの輝度情報と、１フレーム前の輝度情報の差が所定の閾値以上であるか否かを判断することにより、動き領域を検出するようにすることができる。
【００１８】
本発明の画像処理装置は、動き領域検出手段により検出された動き領域の重心を算出する重心算出手段をさらに設けるようにすることができ、エッジ情報抽出手段は、重心算出手段により算出された動き領域の重心を中心とする所定の矩形領域を上下方向に３等分し、各領域のそれぞれにおいて、垂直方向および水平方向のエッジ情報を抽出するようにすることができる。
【００１９】
本発明の画像処理装置は、選択手段により選択された動き領域の動き方向を検出する動き方向検出手段をさらに設けるようにすることができ、認識手段は、動き方向検出手段により検出された手の動きをマウスの移動操作と認識し、手を握る動作をマウスがアイコンを選択する操作と認識し、手を握ったまま移動させる動作をアイコンを選択したままドラッグする操作と認識し、手を開く動作をアイコンの選択を解除する操作と認識し、手を左方向に振る動作をマウスの左ボタンをクリックする操作と認識し、手を右方向に振る動作をマウスの右ボタンをクリックする操作と認識するようにすることできる。
【００２１】
本発明の画像処理方法は、手を撮像する撮像ステップと、撮像ステップの処理により撮像された画像を輝度情報に変換する変換ステップと、変換ステップの処理により変換された現フレームの輝度情報と、１フレーム前の輝度情報の差に基づいて、動き領域を検出する動き領域検出ステップと、動き領域検出ステップの処理により検出された動き領域が手であるかを評価する評価値を算出する評価値算出ステップと、評価値算出ステップの処理により算出された評価値に基づいて、複数の動き領域のうちの所定の領域を手の領域として選択する選択ステップと、選択ステップの処理により選択された手の領域における現フレームの輝度情報と、１フレーム前の輝度情報の差によってできた画像のエッジ情報を抽出するエッジ情報抽出ステップと、エッジ情報抽出ステップの処理により抽出されたエッジ情報の特徴ベクトルを特徴量として算出する特徴量算出ステップと、特徴量算出ステップの処理により算出された特徴量に基づいて、ＤＰマッチングの手法を用いてＤＰ値を算出するＤＰ値算出ステップと、ＤＰ値算出ステップの処理により算出されたＤＰ値が所定値より小さいか否かを判定する判定ステップと、判定ステップの処理により、ＤＰ値が所定値より小さいと判定された場合、手の握り動作を認識する認識ステップとを含むことを特徴とする。
【００２２】
本発明の記録媒体に記録されているプログラムは、手を撮像する撮像ステップと、撮像ステップの処理により撮像された画像を輝度情報に変換する変換ステップと、変換ステップの処理により変換された現フレームの輝度情報と、１フレーム前の輝度情報の差に基づいて、動き領域を検出する動き領域検出ステップと、動き領域検出ステップの処理により検出された動き領域が手であるかを評価する評価値を算出する評価値算出ステップと、評価値算出ステップの処理により算出された評価値に基づいて、複数の動き領域のうちの所定の領域を手の領域として選択する選択ステップと、選択ステップの処理により選択された手の領域における現フレームの輝度情報と、１フレーム前の輝度情報の差によってできた画像のエッジ情報を抽出するエッジ情報抽出ステップと、エッジ情報抽出ステップの処理により抽出されたエッジ情報の特徴ベクトルを特徴量として算出する特徴量算出ステップと、特徴量算出ステップの処理により算出された特徴量に基づいて、ＤＰマッチングの手法を用いてＤＰ値を算出するＤＰ値算出ステップと、ＤＰ値算出ステップの処理により算出されたＤＰ値が所定値より小さいか否かを判定する判定ステップと、判定ステップの処理により、ＤＰ値が所定値より小さいと判定された場合、手の握り動作を認識する認識ステップとを含むことを特徴とする。
【００２３】
本発明の画像処理装置、画像処理方法、並びに記録媒体に記録されているプログラムにおいては、手が撮像され、撮像された画像が輝度情報に変換され、変換された現フレームの輝度情報と、１フレーム前の輝度情報の差に基づいて、動き領域が検出され、検出された動き領域が手であるかを評価する評価値が算出され、算出された評価値に基づいて、複数の動き領域のうちの所定の領域が手の領域として選択され、選択された手の領域における現フレームの輝度情報と、１フレーム前の輝度情報の差によってできた画像のエッジ情報が抽出され、抽出されたエッジ情報の特徴ベクトルが特徴量として算出され、算出された特徴量に基づいて、ＤＰマッチングの手法を用いてＤＰ値が算出され、算出されたＤＰ値が所定値より小さいか否かが判定され、ＤＰ値が所定値より小さいと判定された場合、手の握り動作が認識される。
【００２４】
【発明の実施の形態】
図１は、本発明に係る画像処理システムの一実施の形態を示すブロック図である。
【００２５】
ビデオカメラ２は、ユーザ１の身振り、手振り、および手の握り動作を撮像し、撮像された画像データを、後述する処理で利用する輝度データ（Ｙデータ）に変換し、それを画像処理装置３に供給する。画像処理装置３は、ビデオカメラ２より供給された画像データに対して、画像処理およびジェスチャ認識処理などの所定の処理を施し、表示・出力装置４に出力する。表示・出力装置４は、画像処理装置３より供給された、ユーザ１の身振り、手振り、あるいは手の握り動作に対応する画像データに基づいて、画面にアプリケーションを起動させたり、画面に表示されているウィンドウを移動させたりする。
【００２６】
図２は、画像処理装置３の構成例を示すブロック図である。
【００２７】
画像処理部１１は、ビデオカメラ２より供給された画像データに対して、フレーム間差分処理、重心検出処理、および、動き検出処理などを行い、その画像処理結果をジェスチャ認識部１２に供給する。ジェスチャ認識部１２は、画像処理部１１より供給された画像処理結果に基づいて、ジェスチャ認識処理を行い、その認識結果を表示・出力装置４に供給する。
【００２８】
図３は、画像処理部１１およびジェスチャ認識部１２の詳細な構成例を示すブロック図である。
【００２９】
画像処理部１１は、画像記憶部２１、領域分割部２２、および、領域処理部２３で構成される。ジェスチャ認識部１２は、握り動作認識部３１および重心軌跡認識部３２で構成される。さらに、画像処理部１１の領域分割部２２は、フレーム間差分部４１、閾値処理部４２、ブロック内カウント部４３、閾値処理部４４、周辺探索部４５、および、ラベリング部４６で構成され、画像処理部１１の領域処理部２３は、重心検出部５１、外接枠検出部５２、面積検出部５３、領域評価部５４、領域記憶部５５、動き検出部５６、および、エッジ検出部５７で構成される。また、ジェスチャ認識部１２の握り動作認識部３１は、握り動作判定部６１およびDP値算出部６２で構成される。
【００３０】
画像記憶部２１は、ビデオカメラ２より供給された画像データの輝度データをフレーム毎に記憶する。
【００３１】
フレーム間差分算出部４１は、画像記憶部２１に記憶されている１フレーム前の画像データの輝度データ（Ｙデータ）を読み出し、その１フレーム前の輝度データとビデオカメラ２より供給された現フレームの画像データの輝度データから、画素毎に輝度差（フレーム間差分値）を算出し、算出結果を閾値処理部４２に供給する。
【００３２】
閾値処理部４２は、フレーム間差分算出部４１より供給された算出結果（フレーム間差分値）に基づいて、所定の閾値以上の差分値がある画素を１とし、所定の閾値に満たない差分値の画素を０として２値化し、それをブロック内カウント部４３に供給するとともに、領域処理部２３のエッジ検出部５７に供給する。
【００３３】
ブロック内カウント部４３は、閾値処理部４２より供給された２値化画像を所定のブロックに分割し、各ブロック毎に、ブロック内の画素値が１の画素をカウントし、カウント数を閾値処理部４４に供給する。
【００３４】
閾値処理部４４は、ブロック内カウント部４３より供給された各ブロック毎のカウント数に基づいて、所定の閾値以上のカウント数があるブロックを動きブロックとして認識し、認識結果を周辺探索部４５に供給する。
【００３５】
周辺探索部４５は、閾値処理部４４より供給された認識結果に基づいて、動きブロックとして認識されなかったブロックを中心とする所定の領域内の動きブロック数をさらにカウントする。周辺探索部４５は、カウント数が所定の閾値以上であれば、そのブロックを新たに動きブロックとして認識し、認識結果をラベリング部４６に供給する。
【００３６】
ラベリング部４６は、周辺探索部４５より供給された認識結果（動きブロックとして認識されたブロック）に基づいて、ラベリング処理し、処理結果を領域処理部２３の重心検出部５１に供給する。
【００３７】
重心検出部５１は、ラベリング部４６より供給されたラベリング処理結果に基づいて、ラベリングされた各領域内の重心を検出し、検出結果を外接枠検出部５２に供給する。
【００３８】
外接枠検出部５２は、重心検出部５１より供給されたラベリング処理結果に基づいて、ラベリングされた各領域を外側から囲む矩形（外接枠）を検出し、検出結果を面積検出部５３に供給する。
【００３９】
面積検出部５３は、外接枠検出部５２より供給された検出結果（外接枠）に基づいて、外接枠内に含まれる動きブロックの画素数をカウントすることにより、面積を算出し、算出結果を領域評価部５４に供給する。面積検出部５３はまた、外接枠検出部５２より供給された検出結果に基づいて、外接枠の縦横比（アスペクト比）を算出し、その算出結果も領域評価部５４に供給する。
【００４０】
領域評価部５４は、面積検出部５３より供給された、ラベリングされた各領域の重心、面積、および、外接枠のアスペクト比に基づいて、評価値を算出し、評価値の最も小さい領域を選択し、その選択結果を動き検出部５６、エッジ検出部５７、および、重心軌跡認識部３２にそれぞれ供給する。
【００４１】
領域記憶部５５は、領域評価部５４で選択された評価値の最も小さい領域を記憶する。
【００４２】
動き検出部５６は、画像記憶部２１より供給される１フレーム前の画素とビデオカメラ２より供給される現在の画素を用いて、フレーム間差分値および空間方向差分値を算出し、その算出結果から動き方向を検出し、検出結果を握り動作認識部３１の握り動作判定部６１に供給する。
【００４３】
エッジ検出部５７は、領域分割部２２の閾値処理部４２より供給された２値化されたフレーム間差分値と、領域評価部５４より供給された領域選択結果に基づいて、後述するジェスチャ認識部１２の握り動作認識部３１でDP値を算出する際に必要となるエッジ情報（特徴ベクトル）を検出する。
【００４４】
握り動作判定部６１は、動き検出部５６より供給された検出結果（動き方向）、および、後述するDP値算出部６２より供給されるDP値に基づいて、手の握りおよび開き動作を認識し、認識結果を表示・出力装置４に供給する。
【００４５】
DP値算出部６２は、エッジ検出部５７より供給されたエッジ情報（特徴ベクトル）に基づいて、連続DP手法を用いて、DP値を算出する。なお、連続DP(Continuous DynamicProgramming)手法は、あらかじめ用意されている参照パターンと、所定のパターンとの間の類似度を算出するアルゴリズムが用いられており、その詳細が、例えば、高橋 他: ジェスチャ動画像のスポッティング認識, 信学論D-II vol. J77-D-II no.8 pp.1552-1561 (1994)に記載されている。これは、参照パターンＲと認識対象となるパターンＱの長さが異なっていても効率的に対応づけを行いながらマッチングできる手法である。また、認識対象パターンの始点および終点を決定する必要がないため、時系列パターンを認識する際に有効な手法の一つである。
【００４６】
重心軌跡認識部３２は、領域処理部２３の領域評価部５４より供給された評価値の最も小さい現フレームの領域の重心と１フレーム前に選択された領域の重心の間の距離を算出し、その算出結果から重心の軌跡（移動）を認識し（すなわち、手の振り動作を認識し）、認識結果を表示・出力装置４に供給する。
【００４７】
次に、図４のフローチャートを参照して、画像処理装置３が実行する、手の握り・振り動作認識処理について説明する。
【００４８】
ステップＳ１において、ビデオカメラ２は、ユーザ１の身振りや手振りを撮像し、撮像された画像データを輝度データ（Ｙデータ）に変換し、画像記憶部２１に記憶する。例えば、ビデオカメラ２の出力がRGBの色データである場合、ビデオカメラ２は、撮像された画像データのRGBの色データから、次式（１）に従って、各画素におけるＹデータを算出する。
Ｙ＝０．２９９Ｒ＋０．５８７Ｇ＋０．１１４Ｂ                ・・・（１）
【００４９】
ステップＳ２において、領域分割部２２は、ステップＳ１の処理で撮像された画像の領域分割を行う。
【００５０】
ここで、図５のフローチャートを参照して、領域分割処理について詳しく説明する。
【００５１】
ステップＳ３１において、領域分割部２２のフレーム間差分算出部４１は、ビデオカメラ２より供給された現フレームの画像データの輝度データ（Ｙデータ）と、画像記憶部２１より記憶された１フレーム前の画像データの輝度データとの間のフレーム間差分値（輝度差）を算出する。閾値処理部４２は、フレーム間差分算出部４１で算出されたフレーム間差分値のうち、所定の閾値以上のフレーム間差分値がある画素を１とし、所定の閾値に満たないフレーム間差分値の画素を０として２値化する。これにより、図６（Ａ）に示されるような２値画像が生成される。
【００５２】
図６（Ａ）の例の場合、フレーム間差分値が所定の閾値より大きい画素（すなわち、画素値１の画素）が黒で表わされ、フレーム間差分値が所定の閾値より小さい画素（すなわち、画素値０の画素）が白で表わされている。
【００５３】
ステップＳ３２において、ブロック内カウント部４３は、ステップＳ３１の処理で生成された２値画像を、例えば、図６（Ｂ）に示されるように、Ｂｗ×Ｂｈの大きさのブロックに分割し、各ブロック毎に、ブロック内の画素値が１の画素（すなわち、黒で表示されている画素）をカウントする。
【００５４】
ステップＳ３３において、閾値処理部４４は、ステップＳ３２の処理でカウントされた各ブロック毎のカウント数に基づいて、そのカウント数が所定の閾値より大きいブロックを動きブロックとして認識する。これにより、例えば、図６（Ｃ）に示されるような動きブロックが検出される。図６（Ｃ）の例の場合、網掛け表示されているブロックが動きブロックとされる。なお、カウント数が所定の閾値より小さいブロックは、ノイズとして認識される。
【００５５】
ステップＳ３４において、周辺探索部４５は、ステップＳ３３の処理で動きブロックと認識されなかったブロック（すなわち、図６（Ｃ）で網掛け表示されていない白ブロック）を中心とする所定の領域内の動きブロック数をそれぞれカウントする。例えば、図６（Ｃ）に示されるように、周辺探索部４５は、動きブロックと認識されなかったブロック８１を中心とする３×３の領域８２内の動きブロック数をカウントする。
【００５６】
ステップＳ３５において、周辺探索部４５は、ステップＳ３４の処理でカウントされたカウント数が所定の閾値より大きいブロックを新たに動きブロックとして認識する。すなわち、図６（Ｄ）に示されるように、動きブロックと認識されなかったブロック８１を中心とする３×３の領域８２内の動きブロック（すなわち、黒で示されているブロック）の数が６個であり、例えば、閾値が領域８２のブロック数（いまの場合、９個）の過半数（すなわち、５個）に設定されているとすると、このブロック８１は、新たな動きブロックとして認識される。
【００５７】
このような処理を、ステップＳ３３の処理で動きブロックと認識されなかったブロック全てに対して行う。これにより、図６（Ｅ）に示されるように、ステップＳ３３の処理では動きブロックとして認識されなかったブロック８１，８３および８４が、新たな動きブロックとして認識される。
【００５８】
ステップＳ３６において、ラベリング部４６は、ステップＳ３３およびＳ３５の処理で認識された動きブロックに基づいて、領域毎に、ラベリング処理する。これにより、図６（Ｆ）に示されるように、領域８５および領域８６の２つの領域が検出される。
【００５９】
図４のステップＳ３に戻り、重心検出部５１は、ステップＳ２の処理でラベリングされた各領域内の重心を検出（算出）する。
【００６０】
ここで、図７を参照して、ラベリングされた領域内の重心の算出方法について説明する。
【００６１】
図７（Ａ）の例の場合、ラベリングされた領域の外接枠内の画素を使って平均位置を算出し、それを重心Ｃとする。
【００６２】
図７（Ｂ）の例の場合、画面上方に重み付け加重平均を算出し、それを重心Ｃとする。すなわち、ラベリングされた領域の外接枠の左上の座標（Ｘul，Ｙul）、右下の座標（Ｘbr,Ｙbr）から、ある画素（ｘ，ｙ）に対応する重みを次式（２）に従って算出し、その算出結果を次式（３）に代入し、重み付き加重平均を算出する。なお、この例は、ビデオカメラ２に対して手が差し出される場合、指先が画面上方になる確率が高いことを利用して、画面上方に重み付けされる。
（Ｙbr−ｙ）／（Ｙbr−Ｙul）                                ・・・（２）
【００６３】
【数１】
0004790113.tif 000002
【００６４】
図７（Ｃ）の例の場合、第１回目では、図７（Ａ）の例で示したように、ラベリングされた領域の外接枠内の画素を使って平均位置Ｃ１を算出する。第２回目では、平均位置Ｃ１より画面上方にある画素を使って平均位置Ｃ２を算出する。同様に、第３回目以降の平均位置を順次繰り返し算出する。そして、第ｎ回目の平均位置Ｃｎを、最終的な重心Ｃとする。
【００６５】
以上のような重心算出方法のいずれかを用いて、ラベリングされた領域（いまの場合、領域８５および８６）の重心が検出されると、ステップＳ４に進み、領域処理部２３の外接枠検出部５２は、ステップＳ２の処理でラベリングされた各領域（いまの場合、領域８５および８６）を外側から囲む外接枠（矩形）を検出する。
【００６６】
ステップＳ５において、面積検出部５３は、ステップＳ４の処理により検出された外接枠内に含まれる動きブロックの画素数をカウントすることにより面積を算出（検出）する。すなわち、図６（Ｆ）の領域８５の場合、動きブロック（すなわち、黒で示されているブロック）は１３個であり、例えば、１ブロックが１６画素で構成されているとすると、動き画素数は２０８個とカウントされ、そのカウントされた画素数から面積が算出される。
【００６７】
ステップＳ６において、面積検出部５３は、ステップＳ４の処理により検出された外接枠のアスペクト比（縦横比）を算出する。すなわち、図６（Ｆ）の領域８５の場合、縦のブロック数が５個であり、横のブロック数が４個であり、アスペクト比は、１．２５（＝５／４）と算出される。
【００６８】
ステップＳ７において、領域評価部５４は、ステップＳ３の処理で検出された、ラベリングされた領域（いまの場合、領域８５および８６）の重心、ステップＳ５の処理で算出された各領域の動きブロックの面積、ステップＳ６の処理で算出された領域の外接枠のアスペクト比に基づいて、次式（４）に従って、評価値を算出する。
Φ（ｉ）＝αc｜Ｃi−Ｃp｜＋αa｜Ａi−Ａp｜＋αs｜Ｓi−Ｓp｜−αmＮｍi
・・・（４）
【００６９】
なお、上記式（４）において、Ｃiは領域ｉの重心位置、Ａiは領域ｉのアスペクト比、Ｓiは領域ｉの面積、Ｎｍiは領域ｉの動き画素数を表わし、Ｃp，Ａp,Ｓpは前フレームで選択された領域ｐの重心位置、アスペクト比、面積をそれぞれ表わし、αc，αa，αs，αmは、重心位置、アスペクト比、面積、動き画素数の重要度を示すそれぞれの重み付け係数である。例えば、重み付け係数には、αc＝１０．０，αa＝１０．２，αs＝０．２などの値が用いられる。
【００７０】
ステップＳ８において、領域評価部５４は、ステップＳ７の処理で算出された評価値のうち、評価値の最も小さい領域（例えば、領域８５）を選択する。
【００７１】
ステップＳ９において、動き検出部５６は、ステップＳ２の処理でラベリングされた領域（いまの場合、領域８５および８６）の動き方向を検出する。
【００７２】
ここで、図８のフローチャートを参照して、動き方向検出処理について説明する。なお、図９に示すように、３×３画素からなる現フレームの領域と１フレーム前の領域を比較し、現フレームの領域の動き方向を検出するものとして説明する。
【００７３】
ステップＳ４１において、動き検出部５６は、動きの方向を示す変数ｈ，ｖに０を代入する。ステップＳ４２において、動き検出部５６は、縦および横の両方向の動きが検出されたのか否かを判定し、未だ、縦および横の両方向の動きが検出されていないと判定した場合、ステップＳ４３に進み、現フレームの中心画素Ｐ（i,j）と１フレーム前の中心画素Ｐ´（i,j）の輝度差が所定の正の閾値より大きいのか否かを判定する。なお、ｉは、ｙ座標を表わし、ｊはｘ座標を表わしている。
【００７４】
ステップＳ４３において、Ｐ（i,j）−Ｐ´（i,j）が所定の正の閾値より大きいと判定された場合、ステップＳ４４に進み、動き検出部５６は、横方向の動きを検出するのか否か、すなわち、縦方向の動きが検出済みであるのか否かを判定し、横方向の動きを検出すると判定した場合（縦方向の動きが検出済みであると判定した場合）、ステップＳ４５に進む。ステップＳ４５において、動き検出部５６は、中心画素Ｐ（i,j）と画素Ｐ（i,j+1）の輝度差が所定の閾値より大きいのか否かを判定し、Ｐ（i,j）−Ｐ（i,j+1）が所定の閾値より大きいと判定した場合、ステップＳ４６に進み、変数ｈに１を代入し、ステップＳ４２に戻る。
【００７５】
ステップＳ４５において、Ｐ（i,j）−Ｐ（i,j+1）が所定の閾値より大きくはないと判定された場合、ステップＳ４７に進み、動き検出部５６は、さらに、中心画素Ｐ（i,j）と画素Ｐ（i,j-1）の輝度差が所定の閾値より大きいのか否かを判定し、Ｐ（i,j）−Ｐ（i,j-1）が所定の閾値より大きいと判定した場合、ステップＳ４８に進み、変数ｈに−１を代入し、ステップＳ４２に戻る。ステップＳ４７において、Ｐ（i,j）−Ｐ（i,j-1）が所定の閾値より大きくはないと判定された場合、ステップＳ４２に戻る。
【００７６】
また、ステップＳ４４において、横方向の動きではなく、縦方向の動きを検出すると判定された場合、ステップＳ４９に進み、動き検出部５６は、中心画素Ｐ（i,j）と画素Ｐ（i+1,j）の輝度差が所定の閾値より大きいのか否かを判定し、Ｐ（i,j）−Ｐ（i+1,j）が所定の閾値より大きいと判定した場合、ステップＳ５０に進み、変数ｖに１を代入し、ステップＳ４２に戻る。
【００７７】
ステップＳ４９において、Ｐ（i,j）−Ｐ（i+1,j）が所定の閾値より大きくはないと判定された場合、ステップＳ５１に進み、動き検出部５６は、さらに、中心画素Ｐ（i,j）と画素Ｐ（i-1,j）の輝度差が所定の閾値より大きいのか否かを判定し、Ｐ（i,j）−Ｐ（i-1,j）が所定の閾値より大きいと判定した場合、ステップＳ５２に進み、変数ｖに−１を代入し、ステップＳ４２に戻る。ステップＳ５１において、Ｐ（i,j）−Ｐ（i-1,j）が所定の閾値より大きくはないと判定された場合、ステップＳ４２に戻る。
【００７８】
また、ステップＳ４３において、Ｐ（i,j）−Ｐ´（i,j）が所定の正の閾値より大きくはないと判定された場合、ステップＳ５３に進み、動き検出部５６は、さらに、現フレームの中心画素Ｐ（i,j）と１フレーム前の中心画素Ｐ´（i,j）の輝度差が所定の負の閾値より小さいのか否かを判定する。
【００７９】
ステップＳ５３において、Ｐ（i,j）−Ｐ´（i,j）が所定の負の閾値より小さいと判定された場合、ステップＳ５４に進み、動き検出部５６は、横方向の動きを検出するのか否か、すなわち、縦方向の動きが検出済みであるのか否かを判定し、横方向の動きを検出すると判定した場合（縦方向の動きが検出済みであると判定した場合）、ステップＳ５５に進む。ステップＳ５５において、動き検出部５６は、画素Ｐ（i,j+1）と中心画素Ｐ（i,j）の輝度差が所定の閾値より大きいのか否かを判定し、Ｐ（i,j+1）−Ｐ（i,j）が所定の閾値より大きいと判定した場合、ステップＳ５６に進み、変数ｈに１を代入し、ステップＳ４２に戻る。
【００８０】
ステップＳ５５において、Ｐ（i,j+1）−Ｐ（i,j）が所定の閾値より大きくはないと判定された場合、ステップＳ５７に進み、動き検出部５６は、さらに、中心画素Ｐ（i,j-1）と画素Ｐ（i,j）の輝度差が所定の閾値より大きいのか否かを判定し、Ｐ（i,j-1）−Ｐ（i,j）が所定の閾値より大きいと判定した場合、ステップＳ５８に進み、変数ｈに−１を代入し、ステップＳ４２に戻る。ステップＳ５７において、Ｐ（i,j-1）−Ｐ（i,j）が所定の閾値より大きくはないと判定された場合、ステップＳ４２に戻る。
【００８１】
また、ステップＳ５４において、横方向の動きではなく、縦方向の動きを検出すると判定された場合、ステップＳ５９に進み、動き検出部５６は、画素Ｐ（i+1,j）と中心画素Ｐ（i,j）の輝度差が所定の閾値より大きいのか否かを判定し、Ｐ（i+1,j）−Ｐ（i,j）が所定の閾値より大きいと判定した場合、ステップＳ６０に進み、変数ｖに１を代入し、ステップＳ４２に戻る。
【００８２】
ステップＳ５９において、Ｐ（i+1,j）−Ｐ（i,j）が所定の閾値より大きくはないと判定された場合、ステップＳ６１に進み、動き検出部５６は、さらに、画素Ｐ（i-1,j）と中心画素Ｐ（i,j）の輝度差が所定の閾値より大きいのか否かを判定し、Ｐ（i-1,j）−Ｐ（i,j）が所定の閾値より大きいと判定した場合、ステップＳ６２に進み、変数ｖに−１を代入し、ステップＳ４２に戻る。ステップＳ６１において、Ｐ（i-1,j）−Ｐ（i,j）が所定の閾値より大きくはないと判定された場合、ステップＳ４２に戻る。
【００８３】
そして、ステップＳ４２において、縦および横の両方向の動きが検出されたと判定された場合、または、ステップＳ５３において、Ｐ（i,j）−Ｐ´（i,j）が所定の負の閾値より小さくはないと判定された場合、図４のステップＳ９にリターンする。
【００８４】
図４のステップＳ９において、動き検出部５６は、上述した処理により算出された変数ｈ，ｖの値を、図１０に示す対応図に対応付け、動き方向を示す画素値（インデックス値）を設定する。
【００８５】
図１０の例の場合、LU（Left Upper）は、左上に画素が動いたことを表わし、U（Upper）は、上に画素が動いたことを表わし、RU（Right Upper）は、右上に画素が動いたことを表わし、L（Left）は、左に画素が動いたことを表わし、N（No move）は、画素が動いていないことを表わし、R（Right）は、右に画素が動いたことを表わし、LD（Left Down）は、左下に動いたことを表わし、D（Down）は、下に画素が動いたことを表わし、そして、RD（Right Down）は、右下に画素が動いたことを表わす。
【００８６】
図１０において、例えば、N＝０，LU＝１，U＝２，RU＝３，L＝４，R＝５，LD＝６，D＝７，RD＝８であるとする。算出された変数ｈ，ｖがいずれも−１である場合、動き方向を示す画素値は１に設定される。算出された変数ｈが０、変数ｖが−１である場合、動き方向を示す画素値は２に設定される。算出された変数ｈが１、変数ｖが−１である場合、動き方向を示す画素値は３に設定される。算出された変数ｈが−１、変数ｖが０である場合、動き方向を示す画素値は４に設定される。算出された変数ｈ，ｖがいずれも０である場合、動き方向を示す画素値は０に設定される。算出された変数ｈが１、変数ｖが０である場合、動き方向を示す画素値は５に設定される。算出された変数ｈが−１、変数ｖが１である場合、動き方向を示す画素値は６に設定される。算出された変数ｈが０、変数ｖが１である場合、動き方向を示す画素値は７に設定される。そして、算出された変数ｈ，ｖがいずれも１である場合、動き方向を示す画素値は８に設定される。
【００８７】
すなわち、画素値が１である場合、左上に画素が動いたことになり、画素値が２である場合、上に画素が動いたことになり、画素値が３である場合、右上に画素が動いたことになり、画素値が４である場合、左に画素が動いたことになり、画素値が０である場合、画素が動いていないことになり、画素値が５である場合、右に画素が動いたことになり、画素値が６である場合、左下に動いたことになり、画素値が７である場合、下に画素が動いたことになり、そして、画素値が８である場合、右下に画素が動いたことになる。
【００８８】
なお、本願発明では、これに限らず、ブロックマッチングや動きベクトルマッチングなどの手法を用いて、動き方向を検出することも可能である。
【００８９】
例えば、ステップＳ８の処理で選択された領域のU，Dの画素値を持つ画素数ＮU，ＮDをそれぞれカウントし、ＮUが所定の閾値を越えていた場合、領域内で「上向きの動きが発生した」と認識され、ＮDが所定の閾値を越えていた場合、領域内で「下向きの動きが発生した」と認識される。また、ＮU，ＮDが、ともに所定の閾値を越えていた場合、「動きなし」と認識される。
【００９０】
図４のステップＳ１０に戻って、エッジ検出部５７は、ステップＳ２の処理でラベリングされた領域（図６（Ｆ）の例の場合、領域８５および８６）のうち、ステップＳ８の処理で選択された評価値の最も小さい領域（例えば、領域８５）のエッジ情報を検出する。
【００９１】
ここで、図１１を参照して、エッジ情報を検出する処理についてさらに詳しく説明する。なお、ステップＳ８の処理で、評価値が最も小さい領域として領域８５が選択されたものとして以下に説明する。
【００９２】
図１１（Ａ）は、ステップＳ３の処理により検出された領域８５の重心Ｃを示している。図１１（Ｂ）は、ステップＳ２の処理により２値化されたフレーム間差分画像を示している。
【００９３】
エッジ検出部５７は、ステップＳ２の処理で２値化されたフレーム間差分画像（図１１（Ｂ））の垂直方向および水平方向のエッジ情報をそれぞれ検出する。これにより、図１１（Ｃ）および図１１（Ｄ）に示されるように、垂直方向のエッジ情報と水平方向のエッジ情報が検出される。
【００９４】
次に、エッジ情報の検出処理についてさらに詳しく説明する。なお、エッジ情報の検出には、図１２に示されるようなフィルタが用いられる。
【００９５】
エッジ検出部５７は、エッジ情報を検出したい画素を中心に、図１２に示されるフィルタと画素値の積和（畳み込み）演算を行い、その演算結果の絶対値を２値化することによりエッジ画素を算出する。そして、エッジ検出部５７は、積和演算の絶対値が所定の閾値より大きい場合、それをエッジ画素として検出する。
【００９６】
まず、現フレームにおける中心画素Ｐ（ｉ，ｊ）（図９）が垂直方向のエッジ画素か否かを判定する例について説明する。エッジ検出部３７は、次式（５）に従って、図１２（Ａ）に示されるフィルタと画素値の積和演算Ｌｖを行う。
Ｌｖ＝−１・Ｐ（i-1,j-1）＋０・Ｐ（i-1,j）＋１・Ｐ（i-1,j+1）−２・Ｐ（i,j-1）
＋０・Ｐ（i,j）＋２・Ｐ（i,j+1）−１・Ｐ（i+1,j-1）＋０・Ｐ（i+1,j）
＋１・Ｐ（i+1,j+1）                                  ・・・（５）
【００９７】
エッジ検出部５７は、上記式（５）の算出の結果、積和演算Ｌｖの絶対値が所定の閾値Ｔｖより大きいか否かを判定し、積和演算Ｌｖの絶対値が所定の閾値Ｔｖより大きいと判定した場合、画素Ｐ（ｉ，ｊ）を垂直方向のエッジ画素（エッジ情報）として検出する。
【００９８】
次に、現フレームにおける中心画素Ｐ（ｉ，ｊ）（図９）が水平方向のエッジ画素か否かを判定する例について説明する。エッジ検出部３７は、次式（６）に従って、図１２（Ｂ）に示されるフィルタと画素値の積和演算Ｌｈを行う。
Ｌｈ＝−１・Ｐ（i-1,j-1）−２・Ｐ（i-1,j）−１・Ｐ（i-1,j+1）＋０・Ｐ（i,j-1）
＋０・Ｐ（i,j）＋０・Ｐ（i,j+1）＋１・Ｐ（i+1,j-1）＋２・Ｐ（i+1,j）
＋１・Ｐ（i+1,j+1）                                  ・・・（６）
【００９９】
エッジ検出部５７は、上記式（６）の算出の結果、積和演算Ｌｈの絶対値が所定の閾値Ｔｈより大きいか否かを判定し、積和演算Ｌｈの絶対値が所定の閾値Ｔｈより大きいと判定した場合、画素Ｐ（ｉ，ｊ）を水平方向のエッジ画素（エッジ情報）として検出する。
【０１００】
このような処理を、２値化されたフレーム間差分画像の各画素に対して行うことにより、垂直方向のエッジ情報と水平方向のエッジ情報が検出される。
【０１０１】
次に、Ｆｗ×Ｆｈの矩形領域９１（図１１（Ｅ））を縦方向に３等分したtop，middle，bottomの３領域について考える。
【０１０２】
エッジ検出部５７は、Ｆｗ×Ｆｈの矩形領域９１の中心が、図１１（Ａ）で示された重心Ｃとなるように設定し、それぞれの領域内の垂直方向のエッジピクセルの数をカウントするとともに（図１１（Ｆ））、水平方向のエッジピクセルの数をカウントする（図１１（Ｇ））。
【０１０３】
すなわち、ユーザ１の手７１（図１８（Ａ））が、指先を画面上方に向けて撮像されている場合、撮像された画像を３分割して各領域毎のエッジピクセルの数をカウントすることにより、手の握り動作時に発生する時間的特徴変化に、手の構造を反映させることができる。
【０１０４】
従って、手を握る動作の場合には、動作開始直後は、領域上部（図１１（Ｅ）のtopの領域）にピクセルエッジ分布が集中し、動作終了時には、領域中央部（図１１（Ｅ）のmiddleの領域）にピクセルエッジ分布が集中する。一方、領域下部（図１１（Ｅ）のbottomの領域）には、ピクセルエッジ分布がほとんど生じない。これに対して、手を開く動作の場合には、動作開始直後は、領域中央部にピクセルエッジが集中し、動作終了時には、領域上部にピクセルエッジ分布が集中する。一方、領域下部には、手を握る動作と同様に、ピクセルエッジ分布がほとんど生じない。
【０１０５】
図４に戻って、ステップＳ１１において、エッジ検出部５７は、topの領域に属する垂直エッジピクセル数をｅtv、middleの領域の属する垂直エッジピクセル数をｅmv、および、bottomの領域に属する垂直エッジピクセル数をｅbv、並びに、topの領域に属する水平エッジピクセル数をｅth、middleの領域の属する水平エッジピクセル数をｅmh、および、bottomの領域に属する水平エッジピクセル数をｅbhとして、次式（７）に従って、特徴ベクトルｆを算出する。ここで、Ｆｓ＝Ｆｗ×Ｆｈである。
ｆ≡（Ｒtv，Ｒth，Ｒmv，Ｒmh，Ｒbv，Ｒbh）
＝１／Ｆｓ・（ｅtv，ｅth，ｅmv，ｅmh，ｅbv，ｅbh）      ・・・（７）
【０１０６】
ステップＳ１２において、DP値算出部６２は、連続DPの手法を用いて、ステップＳ１１の処理で算出された特徴ベクトルｆに基づいて、DP値を算出する。ここで、認識対照パターンとして、ステップＳ１１の処理で算出された特徴ベクトルｆが用いられ、参照パターンとして、例えば、予め、手を握ったり開いたりしている動作がビデオカメラ２で撮像され、エッジ検出部５７で算出される特徴ベクトルｆの時系列のうち、手の握りあるいは開き動作に相当する部分が切り出されている。
【０１０７】
DP値算出部６２は、時刻ｔにおいて、参照パターンＲ＝｛ｒ（γ）｜１≦γ≦Ｔ｝と認識対象パターンｑ（ｔ）との距離ｄ（ｔ，γ）＝‖ｑ（ｔ）−ｒ（γ）‖を用いて、累積距離Ｓ（ｔ，γ）を、次式（８）および式（９）に従って算出する。ここで、次式（８）は、累積距離Ｓ（ｔ，γ）を算出するための初期条件とされる。
Ｓ（−１，γ）＝Ｓ（０，γ）＝∞（１≦γ≦Ｔ）              ・・・（８）
【０１０８】
１≦γにおける累積距離Ｓ（ｔ，γ）は、次式（９）で表わされる。
【数２】
0004790113.tif 000003
【０１０９】
ここで、γ＝Ｔとすると、Ｓ（ｔ，Ｔ）は、参照パターンＲの区域（１，Ｔ）について入力時系列パターンに最適に適合したときの累積距離を表わすことになる。これを重みの和３・Ｔで正規化すると、次式（１０）で表わされる。
【数３】
0004790113.tif 000004
これを時刻ｔにおける連続DP値に決定する。
【０１１０】
図１３に示されるように、参照パターンＲに類似したパターンが発生したときに、この連続DP値は最小値minを取る。この最小値minが所定の閾値以下になれば、参照パターンＲとマッチングしたと判定される。従って、最小値minが検出されたとき、握り動作が認識されることになる。
【０１１１】
このように、DP値算出部６２は、認識対象パターンが手の握り参照パターンにマッチした場合、「握り」を握り動作判定部６１へ出力し、認識対象パターンが手の開き参照パターンにマッチした場合、「開き」を握り動作判定部６１へ出力する。
【０１１２】
握り動作判定部６１は、動き検出部５６から「上向きの動き」が入力された後、Ｆmoveフレームの間にDP値算出部６２から「開き」が入力されたとき、手の開き動作を認識することができる。また、握り動作判定部６１は、動き検出部５６から「下向きの動き」が入力された後、Ｆmoveフレームの間にDP算出部６２から「握り」が入力されたとき、手の握り動作を認識することができる。なお、Ｆmoveの値は、任意に設定することが可能であり、例えば、１５フレームなどの値が設定される。
【０１１３】
ステップＳ１３において、重心軌跡認識部３２は、ステップＳ３の処理で検出された重心に基づいて、手の振り動作を認識する。
【０１１４】
ここで、図１４および図１５のフローチャートを参照して、手の振り動作認識処理について説明する。
【０１１５】
ステップＳ１０１において、重心軌跡認識部３２は、図１６に示すような１０個のバッファで構成されるリングバッファに、各フレームで選択された領域の重心位置をそれぞれ代入する。ステップＳ１０２において、重心軌跡認識部３２は、ステップＳ１０１の処理で代入された現フレームの重心位置Ｘ，Ｙと、１フレーム前の重心位置Ｘ´，Ｙ´の更新を行う。いまの場合、現フレームの重心位置Ｘ＝Ｘ5，Ｙ＝Ｙ5、１フレーム前の重心位置Ｘ´＝Ｘ4，Ｙ´＝Ｙ4に更新される。
【０１１６】
ステップＳ１０３において、重心軌跡認識部３２は、Ｘ−Ｘ´の絶対値が所定の正の閾値より大きいのか否か、すなわち、現フレームのＸ座標とｎフレーム（いまの場合、１フレーム）前のＸ´座標を比較し、変化があったのか否かを判定し、Ｘ−Ｘ´の絶対値が所定の正の閾値より大きくないと判定された場合、すなわち、変化がないと判定された場合、ステップＳ１０４に進む。
【０１１７】
ステップＳ１０４におてい、重心軌跡認識部３２は、リングバッファが１周したのか否かを判定し、リングバッファが未だ１周していないと判定した場合、ステップＳ１０２に戻り、現フレームの重心位置Ｘ，Ｙと、１フレーム前の重心位置Ｘ´，Ｙ´の更新を行い（いまの場合、現フレームの重心位置Ｘ＝Ｘ4，Ｙ＝Ｙ4、１フレーム前の重心位置Ｘ´＝Ｘ3，Ｙ´＝Ｙ3に更新し）、それ以降の処理を繰り返す。すなわち、Ｘ座標が変化するまで、１フレームずつさかのぼった、現フレームの重心位置Ｘ，Ｙと１フレーム前の重心位置Ｘ´，Ｙ´に更新される。また、ステップＳ１０４において、リングバッファが１周したと判定された場合、ステップＳ１２８に進む。
【０１１８】
また、ステップＳ１０３において、Ｘ−Ｘ´の絶対値が所定の正の閾値より大きいと判定された場合、ステップＳ１０５に進み、重心軌跡認識部３２は、変化したときの座標Ｘ´，Ｙ´をＸｓ，Ｙｓにそれぞれ代入し、変数ｍａｘを０に、変数BigSkipをFALSEに初期設定する。ステップＳ１０６において、重心軌跡認識部３２は、Ｘ−Ｘ´が０より大きいのか否かを判定し、０より大きい場合（Ｘ−Ｘ´が正の値の場合）、ステップＳ１０７に進み、さらに、Ｘ−Ｘ´が所定の正の閾値より大きいのか否かを判定する。
【０１１９】
ステップＳ１０７において、Ｘ−Ｘ´が所定の正の閾値より大きいと判定された場合、ステップＳ１０８に進み、重心軌跡認識部３２は、変数BigSkipにTRUEを代入する。また、ステップＳ１０７において、Ｘ−Ｘ´が所定の正の閾値より大きくはないと判定された場合、ステップＳ１０９に進み、重心軌跡認識部３２は、さらに、Ｘ−Ｘ´が所定の負の閾値より小さいのか否かを判定し、所定の負の閾値より小さいと判定した場合、ステップＳ１２３に進み、所定の負の閾値より小さくはないと判定した場合、ステップＳ１１０に進む。
【０１２０】
ステップＳ１０８またはＳ１０９の処理の後、ステップＳ１１０において、重心軌跡認識部３２は、Ｘ−Ｘｓの絶対値が変数ｍａｘの絶対値（いまの場合、０）より大きいのか否かを判定し、Ｘ−Ｘｓの絶対値が変数ｍａｘの絶対値より大きいと判定した場合、ステップＳ１１１に進み、変数ｍａｘにＸ−Ｘｓの値を代入する。また、ステップＳ１１０において、Ｘ−Ｘｓの絶対値が変数ｍａｘの絶対値より大きくはないと判定した場合、ステップＳ１１１の処理をスキップし、ステップＳ１１２に進む。
【０１２１】
ステップＳ１１０またはステップＳ１１１の処理の後、ステップＳ１１２において、重心軌跡認識部３２は、Ｙ−Ｙｓの絶対値が所定の閾値より小さいのか否かを判定し、所定の閾値より小さいと判定した場合、ステップＳ１１３に進み、Ｙ−Ｙｓの絶対値が所定の閾値より小さくはないと判定した場合、ステップＳ１２８に進む。
【０１２２】
ステップＳ１１３において、重心軌跡認識部３２は、リングバッファが１周したのか否かを判定し、リングバッファが未だ１周していないと判定した場合、ステップＳ１１４に進み、重心軌跡認識部３２は、現フレームの重心位置Ｘ，Ｙと、１フレーム前の重心位置Ｘ´，Ｙ´の更新を行い、ステップＳ１０７に戻る。いまの場合、１フレームずつさかのぼった、現フレームの重心位置Ｘ＝Ｘ4，Ｙ＝Ｙ4、１フレーム前の重心位置Ｘ´＝Ｘ3，Ｙ´＝Ｙ3に更新される。また、ステップＳ１１３において、リングバッファが１周したと判定された場合、ステップＳ１２３に進む。
【０１２３】
また、ステップＳ１０６において、Ｘ−Ｘ´が０より大きくはないと判定された場合（Ｘ−Ｘ´が負の値であると判定された場合）、ステップＳ１１５に進み、重心軌跡認識部２３は、Ｘ−Ｘ´が所定の負の閾値より小さいのか否かを判定し、所定の負の閾値より小さいと判定した場合、ステップＳ１１６に進む。ステップＳ１１６において、重心軌跡認識部３２は、変数BigSkipにTRUEを代入する。また、ステップＳ１１５において、Ｘ−Ｘ´が所定の負の閾値より小さくはないと判定された場合、ステップＳ１１７に進み、重心軌跡認識部３２は、さらに、Ｘ−Ｘ´が所定の正の閾値より大きいのか否かを判定し、所定の正の閾値より大きくはないと判定した場合、ステップＳ１１８に進み、所定の正の閾値より大きいと判定した場合、ステップＳ１２３に進む。
【０１２４】
ステップＳ１１６またはＳ１１７の処理の後、ステップＳ１１８において、重心軌跡認識部３２は、Ｘ−Ｘｓの絶対値が変数ｍａｘの絶対値より大きいのか否かを判定し、Ｘ−Ｘｓの絶対値が変数ｍａｘの絶対値より大きいと判定した場合、ステップＳ１１９に進み、変数ｍａｘにＸ−Ｘｓの値を代入する。また、ステップＳ１１８において、Ｘ−Ｘｓの絶対値が変数ｍａｘの絶対値より大きくはないと判定した場合、ステップＳ１１９の処理をスキップし、ステップＳ１２０に進む。
【０１２５】
ステップＳ１１８またはステップＳ１１９の処理の後、ステップＳ１２０において、重心軌跡認識部３２は、Ｙ−Ｙｓの絶対値が所定の閾値より小さいのか否かを判定し、所定の閾値より小さいと判定した場合、ステップＳ１２１に進み、Ｙ−Ｙｓの絶対値が所定の閾値より小さくはないと判定した場合、ステップＳ１２８に進む。
【０１２６】
ステップＳ１２１において、重心軌跡認識部３２は、リングバッファが１周したのか否かを判定し、リングバッファが未だ１周していないと判定した場合、ステップＳ１２２に進み、重心軌跡認識部３２は、現フレームの重心位置Ｘ，Ｙと、１フレーム前の重心位置Ｘ´，Ｙ´の更新を行い、ステップＳ１１５に戻る。いまの場合、１フレームずつさかのぼった、現フレームの重心位置Ｘ＝Ｘ4，Ｙ＝Ｙ4、１フレーム前の重心位置Ｘ´＝Ｘ3，Ｙ´＝Ｙ3に更新される。また、ステップＳ１２１において、リングバッファが１周したと判定された場合、ステップＳ１２３に進む。
【０１２７】
ステップＳ１０９，１１３，１１７、またはステップＳ１２１の処理の後、ステップＳ１２３において、重心軌跡認識部３２は、変数BigSkipがFALSEであるのか否かを判定し、変数BigSkipがFALSEであると判定した場合、ステップＳ１２４に進む、ステップＳ１２４において、重心軌跡認識部３２は、変数ｍａｘの値が所定の正の閾値より大きいのか否かを判定し、変数ｍａｘの値が所定の正の閾値より大きいと判定した場合、ステップＳ１２５に進み、右の振りがあったと認識し、図４のステップＳ１４にリターンする。
【０１２８】
また、ステップＳ１２４において、変数ｍａｘが所定の正の閾値より大きくはないと判定された場合、ステップＳ１２６に進み、重心軌跡認識部３２は、さらに、変数ｍａｘが所定の負の閾値より小さいのか否かを判定し、変数ｍａｘの値が所定の負の閾値より小さいと判定した場合、ステップＳ１２７に進み、左の振りがあったと認識し、図４のステップＳ１４にリターンする。
【０１２９】
ステップＳ１２３において、変数BigSkipがFALSEではないと判定された場合、ステップＳ１２６において、変数ｍａｘが所定の負の閾値より小さくはないと判定された場合、また、ステップＳ１０４，１１２，またはステップＳ１２０の処理の後、ステップＳ１２８において、重心軌跡認識部３２は、手の振りはなかったと認識し、図４のステップＳ１４にリターンする。
【０１３０】
また、他の例の振り動作認識処理について、図１７のフローチャートを参照して説明する。ステップＳ１４１において、重心軌跡認識部３２は、curr_gesにRight，Left、またはNoneを代入する。すなわち、図１５のステップＳ１２５，Ｓ１２７、または、Ｓ１２８での処理結果（右振り、左振り、または手振りなし）を代入する。ステップＳ１４２において、重心軌跡認識部３２は、現フレームの時刻と基準時刻とを比較し、現フレームの経過時間を算出する。ステップＳ１４３において、重心軌跡認識部３２は、現フレームが右方向または左方向の動きがあったのか否かを判定し、右方向または左方向の動きがあったと判定した場合、ステップＳ１４４に進む。ステップＳ１４４において、重心軌跡認識部３２は、経過時間を算出するための基準時刻を現フレームの時刻に更新する。
【０１３１】
また、ステップＳ１４３において、右方向または左方向の動きがなかったと判定された場合、ステップＳ１４４の処理をスキップし、ステップＳ１４５に進む。ステップＳ１４５において、重心軌跡認識部３２は、ステップＳ１４２の処理で算出された現フレームの経過時間が所定の閾値より長いのか否かを判定し、現フレームの経過時間が所定の閾値より長いと判定した場合、ステップＳ１４６に進み、変数prev_gesに保存されているジェスチャ（右振りまたは左振り）を出力する。
【０１３２】
ステップＳ１４５において、現フレームの経過時間が所定の閾値より長くはないと判定された場合、ステップＳ１４７に進み、重心軌跡認識部３２は、現フレームのジェスチャ（右振りまたは左振り）であるcurr_gesを出力する。ステップＳ１４８において、重心軌跡認識部３２は、ステップＳ１４７の処理で出力された現フレームのジェスチャであるcurr_gesをprev_gesに代入（保存）する。
【０１３３】
ステップＳ１４９において、重心軌跡認識部３２は、ステップＳ１４６またはＳ１４７の処理で出力されたジェスチャから、振り動作を認識し、図４のステップＳ１４にリターンする。
【０１３４】
上述した処理は、短時間で一方の動き（例えば、左方向の動き）から他方の動き（例えば、右方向の動き）に変化した場合、一方（左方向）の動きを排除して、他方（右方向）の動きを認識するので、処理を高速化することができる。なお、図１４および図１５、または図１７による処理と同様にして上下方向の手振りを認識することもできる。
【０１３５】
図４に戻って、ステップＳ１４において、表示・出力装置４は、画像処理装置３の握り動作判定部６１より供給された認識結果（握りまたは開き動作）、および、重心軌跡認識部３２より供給された認識結果（身振りや手振り）を表示する。ステップＳ１５において、画像処理装置３は、ユーザ１の動作が終了したのか否かを判定し、未だ、動作が終了していないと判定した場合、ステップＳ１に戻り、上述した処理を繰り返す。そして、ステップＳ１５において、ユーザ１の動作が終了したと判定されると、処理は終了される。
【０１３６】
以上の握り動作認識処理の順序が明らかなようにまとめると、図１８に示されるようになる。そこで、次に、図１８を参照して、手の握り動作認識処理について説明する。なお、簡単のため、動きブロックの領域は、領域７２のみとされ、動きブロックの領域が複数存在した場合に行われる評価値の最も小さい領域を選択するための処理はここでは省略する。
【０１３７】
ビデオカメラ２は、ユーザ１の手７１を撮像し（図１８（Ａ））、撮像された画像データを輝度データに変換し、画像記憶部２１に記憶させる。領域分割部２２のフレーム間差分算出部４１は、ビデオカメラ２で変換された現フレームの画像データの輝度データと画像記憶部２１に記憶されている１フレーム前の画像データの輝度データとの間のフレーム間差分値を算出する。閾値処理部４２は、フレーム間差分値のうち、所定の閾値以上のフレーム間差分値がある画素を１とし、所定の閾値に満たないフレーム間差分値の画素を０として２値化する（図１８（Ｂ））。
【０１３８】
ラベリング部４６は、２値化された画像の動きブロックの領域７２をラベリング処理する。重心検出部５１は、ラベリングされた領域７２内の重心を検出する（図１８（Ｃ））。
【０１３９】
エッジ検出部５７は、領域７２の垂直方向および水平方向のエッジ情報をそれぞれ検出する。すなわち、エッジ検出部５７は、領域７２の重心Ｃが矩形領域９１の中心になるように設定して矩形領域９１を３等分したtop，middle，bottomの３領域内の垂直方向のエッジピクセルの数をカウントするとともに（図１８（Ｅ））、水平方向のエッジピクセルの数をカウントする（図１８（Ｆ））。
【０１４０】
エッジ検出部５７は、カウントされたエッジピクセル数に基づいて、上記式（７）に従って、特徴ベクトルｆを算出する。DP値算出部６２は、連続DPの手法を用いて、算出された特徴ベクトルｆから連続DP値を算出し、参照パターンにマッチした動作を握り動作判定部６１に出力する。これにより、握り動作判定部６１は、手の握りまたは開き動作を認識することができる。
【０１４１】
以上のように、ビデオカメラで撮像した画像データから、ユーザの手の握りまたは開き動作を認識することができるので、マウスやキーボードなどの入力装置を用いることなく、離れた場所から容易にコンピュータ等を操作することができる。
【０１４２】
また、特別なデバイスや複数台のビデオカメラを使用していないため、低コストなシステムを実現することができる。
【０１４３】
また、以上においては、手の握り・開き動作を認識することは勿論、手の移動（軌跡）動作および手の振り動作も認識することができるので、例えば、コンピュータに対応付けた場合、手を移動（マウス移動）、手を握る（アイコン選択）、手を握ったまま移動（アイコンを選択したままドラッグ）、手を開く（アイコン選択解除）という操作を行ったり、左方向の振り（マウス左ボタンクリック）、右方向の振り（マウス右ボタンクリック）という操作を行ったりすることができる。従って、ユーザは、マウスを用いなくても、直感的な操作で、画面にアプリケーションを起動させたり、画面に表示されているウィンドウを移動させたりすることができる。
【０１４４】
これにより、例えば、ディスプレイに表示されているファイルを、手を握ることにより選択し、手を移動させることによりドラッグし、所定の場所（例えば、ハードディスクドライブなど）で手を開くことにより、所望のファイルの移動やコピーなどを直感的な動作で行うことができる。
【０１４５】
上述した一連の処理は、ハードウェアにより実行させることもできるが、ソフトウェアにより実行させることもできる。一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、記録媒体からインストールされる。
【０１４６】
この記録媒体は、コンピュータとは別に、ユーザにプログラムを提供するために配布される、プログラムが記録されている磁気ディスク（フロッピディスクを含む）、光ディスク（CD-ROM（Compact Disk-Read Only Memory），DVD（Digital Versatile Disk）を含む、光磁気ディスク（MD（Mini-Disk）を含む）、若しくは半導体メモリなどよりなるパッケージメディアにより構成されるだけでなく、コンピュータに予め組み込まれた状態でユーザに提供される、プログラムが記録されているROMや、ハードディスクなどで構成される。
【０１４７】
なお、本明細書において、記録媒体に記録されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
【０１４８】
また、本明細書において、システムとは、複数の装置により構成される装置全体を表すものである。
【０１４９】
【発明の効果】
以上のように、本発明の画像処理装置、画像処理方法、および記録媒体に記録されているプログラムによれば、手を撮像し、撮像された画像を輝度情報に変換し、変換された現フレームの輝度情報と、１フレーム前の輝度情報の差に基づいて、動き領域を検出し、検出された動き領域が手であるかを評価する評価値を算出し、算出された評価値に基づいて、複数の動き領域のうちの所定の領域を手の領域として選択し、選択された手の領域における現フレームの輝度情報と、１フレーム前の輝度情報の差によってできた画像のエッジ情報を抽出し、抽出されたエッジ情報の特徴ベクトルを特徴量として算出し、算出された特徴量に基づいて、ＤＰマッチングの手法を用いてＤＰ値を算出し、算出されたＤＰ値が所定値より小さいか否かを判定し、ＤＰ値が所定値より小さいと判定された場合、手の握り動作を認識するようにしたので、低コストに、かつ、高精度に、ユーザの手の握りおよび開き動作を画像処理により認識することができる。
【図面の簡単な説明】
【図１】本発明を適用した画像処理システムの構成例を示す図である。
【図２】図１の画像処理装置の構成を示すブロック図である。
【図３】図２の画像処理部およびジェスチャ認識部の詳細な構成を示すブロック図である。
【図４】手の握り・振り動作認識処理を説明するフローチャートである。
【図５】図４のステップＳ２の領域分割処理を説明するフローチャートである。
【図６】領域分割処理を説明するための図である。
【図７】重心を算出する動作を説明するための図である。
【図８】図４のステップＳ９の動き方向検出処理を説明するフローチャートである。
【図９】動き方向を検出するフレームを説明するための図である。
【図１０】動き方向を示す画素値を設定するための対応図である。
【図１１】エッジ情報検出処理を説明するための図である。
【図１２】エッジ情報検出処理に利用されるフィルタを示す図である。
【図１３】  DPマッチングを説明するための図である。
【図１４】図４のステップＳ１３の振り動作認識処理を説明するフローチャートである。
【図１５】図１４に続くフローチャートである。
【図１６】リングバッファを説明する図である。
【図１７】図４のステップＳ１３の他の例の振り動作認識処理を説明するフローチャートである。
【図１８】握り動作認識処理を説明するための図である。
【符号の説明】
２  ビデオカメラ，  ３  画像処理装置，  ４  表示・出力装置，  １１  画像処理部，  １２  ジェスチャ認識部，  ２１  画像記憶部,  ２２  領域分割部，  ２３  領域処理部，  ３１  握り動作認識部,  ３２  重心軌跡認識部,  ４１  フレーム間差分算出部，  ４２  閾値処理部,  ４３  ブロック内カウント部,  ４４  閾値処理部,  ４５  周辺探索部,  ４６  ラベリング部,  ５１  重心検出部,  ５２  外接枠検出部,  ５３  面積検出部,  ５４  領域評価部,  ５５  領域記憶部,  ６１  握り動作判定部,  ６２  DP値算出部
【図１】
0004790113.tif 000005
【図２】
0004790113.tif 000006
【図３】
0004790113.tif 000007
【図４】
0004790113.tif 000008
【図５】
0004790113.tif 000009
【図６】
0004790113.tif 000010
【図７】
0004790113.tif 000011
【図８】
0004790113.tif 000012
【図９】
0004790113.tif 000013
【図１０】
0004790113.tif 000014
【図１１】
0004790113.tif 000015
【図１２】
0004790113.tif 000016
【図１３】
0004790113.tif 000017
【図１４】
0004790113.tif 000018
【図１５】
0004790113.tif 000019
【図１６】
0004790113.tif 000020
【図１７】
0004790113.tif 000021
【図１８】
0004790113.tif 000022