説明

画像処理装置、画像処理方法および画像処理プログラム

【課題】手の指の領域を判定すること。
【解決手段】画像処理装置100は、画像領域からエッジを抽出し、エッジに挟まれた領域の中心部分に相当する疑似スケルトンを複数抽出する。また、画像処理装置100は、隣り合う疑似スケルトンの間にエッジが存在しないもの同士を同一のグループに分類することで、疑似スケルトンをグループ分けする。画像処理装置100は、疑似スケルトンと該疑似スケルトン周辺のエッジとに囲まれる領域において、長辺方向の輝度勾配に対する短辺方向の輝度勾配の割合が所定の閾値以内となる場合に、該疑似スケルトンと同一のグループに分類される疑似スケルトンとエッジとに囲まれる領域を指の領域であると判定する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、画像処理装置等に関する。
【背景技術】
【0002】
利用者の手をカメラで撮影して、手先の動きを判定し、手先の動きに応じた処理を実行する従来技術がある。この従来技術では、利用者の手先の動きを判定する場合に、手先の色が肌色であることを利用して、画像中に存在する手の指の領域を判定している。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2003−346162号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、上述した従来技術では、手の指の領域を抽出することができないという問題があった。
【0005】
上記の従来技術では、手が肌色であることを利用して、手の指の領域を判定しているが、指の色と同一色の背景と、手の指とが重なった場合には、色によって手の指の領域を判定することができない。例えば、利用者の手の指が顔にかかった状態では、指の領域を判定することができない。
【0006】
開示の技術は、上記に鑑みてなされたものであって、手の指の領域を判定することができる画像処理装置、画像処理方法および画像処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【0007】
開示の画像処理装置は、中心部分抽出部と、分類部と、判定部を有する。中心部分抽出部は、画像領域からエッジを抽出し、エッジに挟まれた領域の中心部分を複数抽出する。分類部は、隣り合う中心部分の間にエッジが存在しない中心部分同士を同一のグループに分類することで、複数の中心部分をグループ分けする。判定部は、中心部分と該中心部分周辺のエッジとに囲まれる領域において長辺方向の輝度勾配に対する短辺方向の輝度勾配の割合が所定の閾値以内となる場合に中心部分と同一のグループに分類される中心部分とエッジとに囲まれる領域を指の領域であると判定する。
【発明の効果】
【0008】
開示の画像処理装置によれば、手の指の領域を判定することができるという効果を奏する。
【図面の簡単な説明】
【0009】
【図1】図1は、本実施例にかかる画像処理装置の構成を示す機能ブロック図である。
【図2】図2は、第2指検出部の構成を示す機能ブロック図である。
【図3】図3は、エッジ画像の一例を示す図である。
【図4】図4は、エッジ画像とマップ値との関係を説明するための図である。
【図5】図5は、前向き処理を説明するための図である。
【図6】図6は、後向き処理を説明するための図である。
【図7】図7は、疑似スケルトンの一例を示す図である。
【図8】図8は、疑似スケルトン抽出データのデータ構造の一例を示す図である。
【図9】図9は、クラスタリング部の処理を説明するための図である。
【図10】図10は、クラス化スケルトンデータのデータ構造の一例を示す図である。
【図11】図11は、指に対する輝度の特徴を説明する図である。
【図12】図12は、dおよびeを説明するための図である。
【図13】図13は、指の方向の輝度勾配Gfと円周方向の輝度勾配Gnとの関係を示す図である。
【図14】図14は、a00、a01、a10、a11を説明するための図である。
【図15】図15は、本実施例にかかる画像処理装置の処理手順を示すフローチャートである。
【図16A】図16Aは、指検出処理の処理手順を示すフローチャートである。
【図16B】図16Bは、形状に基づく指検出処理の処理手順を示すフローチャートである。
【図17】図17は、疑似スケルトンによる抽出処理の処理手順を示すフローチャートである。
【図18】図18は、前向き処理の処理手順を示すフローチャート(1)である。
【図19】図19は、前向き処理の処理手順を示すフローチャート(2)である。
【図20】図20は、後ろ向き処理の処理手順を示すフローチャートである。
【図21】図21は、疑似スケルトン抽出処理の処理手順を示すフローチャートである。
【図22】図22は、疑似スケルトンクラスタリング処理の処理手順を示すフローチャート(1)である。
【図23】図23は、疑似スケルトンクラスタリング処理の処理手順を示すフローチャート(2)である。
【図24】図24は、疑似スケルトンクラスタリング処理の処理手順を示すフローチャート(3)である。
【図25】図25は、疑似スケルトン評価処理の処理手順を示すフローチャートである。
【図26】図26は、輝度勾配による抽出処理の処理手順を示すフローチャート(1)である。
【図27】図27は、輝度勾配による抽出処理の処理手順を示すフローチャート(2)である。
【図28】図28は、実施例にかかる画像処理装置を構成するコンピュータのハードウェア構成を示す図である。
【発明を実施するための形態】
【0010】
以下に、本願の開示する画像処理装置、画像処理方法および画像処理プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例】
【0011】
本実施例にかかる画像処理装置の構成について説明する。図1は、本実施例にかかる画像処理装置の構成を示す機能ブロック図である。図1に示すように、この画像処理装置100は、カメラ101a、表示部101b、第1指検出部102、第2指検出部103、指操作判定部104、制御部105を有する。
【0012】
カメラ101aは、撮影範囲の画像を撮影し、撮影した画像データを第1指検出部102に出力する。表示部101bは、各種の情報を表示するディスプレイなどの表示装置である。
【0013】
第1指検出部102は、色に基づいて、画像に含まれる指を検出する処理部である。例えば、第1指検出部102は、画像データから肌色の領域を抽出し、抽出した領域を指の領域として、指操作判定部104に通知する。
【0014】
なお、ここで抽出対象とする指は、カメラから特定の距離を挟む一定の区間とし、カメラの画角を予め計測しておくことにより、対象とする指の太さの範囲を指定するものとする。さらに、指の腹はカメラに対して正対ないしはほぼ正対していることを前提とする。
【0015】
一方、第1指検出部102は、色に基づいて、指を検出できない場合には、画像データを第2指検出部103に出力することで、指の検出を依頼する。例えば、第1指検出部102は、画像データの肌色の領域の画素数が、第1の画素数未満、または、第2の画素数以上である場合に、指を検出できないと判定する。第1の画素数および第2の画素数は、予め設定された値である。第1指検出部102が指を検出する処理は、例えば、特開2003−346162に開示された技術を利用して、指を検出してもよい。
【0016】
第2指検出部103は、画像データからエッジを抽出し、エッジに挟まれた領域の中心部分に対応する疑似スケルトンを求め、疑似スケルトンおよびエッジに囲まれる領域の輝度勾配を利用して、指を検出する処理部である。第2指検出102は、指の検出結果を指操作判定部104に出力する。
【0017】
指操作判定部104は、指の検出結果を基にして、利用者の指示内容を判定する処理部である。指操作判定部104は、指示内容を制御部105に出力する。制御部105は、指示内容を基にして、例えば、表示部101bの制御や、図示しないスピーカの音量制御などを行う。
【0018】
次に、図1に示した第2指検出部103の構成について説明する。図2は、第2指検出部の構成を示す機能ブロック図である。図2に示すように、第2指検出部103は、画像サイズ変更部201、エッジ抽出部202、疑似距離変換部203、疑似スケルトン抽出部204、クラスタリング部205を有する。また、第2指検出部103は、疑似スケルトン評価部206、輝度勾配抽出部207、指領域判定部208を有する。
【0019】
エッジ抽出部202、疑似距離変換部203、疑似スケルトン抽出部204は、中心部分抽出部の一例である。クラスタリング部205は、分類部の一例である。輝度勾配抽出部207、指領域判定部208は、判定部の一例である。
【0020】
画像サイズ変更部201は、画像の幅に関するパラメータSizeXと、画像の高さに関するパラメータSizeYを変更することで、画像のサイズを調整し、サイズを調整した画像データをエッジ抽出部202、輝度勾配抽出部207に出力する。例えば、画像サイズ変更部201は、原画像データ、1/2に縮小した画像データ、1/4に縮小した画像データ等を順次、エッジ抽出部202、輝度勾配抽出部207に出力する。
【0021】
エッジ抽出部202は、画像データからエッジを抽出する処理部である。画像データからエッジを抽出したものをエッジ画像と表記する。エッジ抽出部202は、例えば、ハフ変換、微分エッジ検出などを利用して、画像データからエッジを検出する。エッジ抽出部202は、エッジ画像を疑似距離変換部203に出力する。図3は、エッジ画像の一例を示す図である。図3に示すように、このエッジ画像10には、エッジ10aが含まれている。
【0022】
疑似距離変換部203は、エッジ画像において、各画素に対して最も距離の近いエッジからの距離を計測する処理部である。疑似距離変換部203は、エッジ画像をM(j,i)のマップに分割し、エッジからの距離に応じて、M(j,i)にマップ値を与える。マップは、画素に対応する。
【0023】
図4は、エッジ画像とマップ値との関係を説明するための図である。図4において、黒い画素は、エッジに対応し、白い画素は、非エッジに対応する。図4に示すように、疑似距離変換部203は、エッジからの距離が近いマップM(j,i)に対しては、小さいマップ値を与え、エッジからの距離が遠いマップM(j,i)に対しては、大きいマップ値を与える。疑似距離変換部203は、エッジに対応するマップM(j、i)に対しては、マップ値「0」を与える。
【0024】
具体的に、疑似距離変換部203の処理を説明する。疑似距離変換部203は、前向き処理と後向き処理を実行することで、各マップM(j,i)にマップ値を与える。
【0025】
前向き処理について説明する。前向き処理では、疑似距離変換部203は、エッジ画像の左上から横に走査して、エッジ画像の右下のまで下記の処理を順次実行する。図5は、前向き処理を説明するための図である。前向き処理において、疑似距離変換部203は、マップM(j,i)を選択し、選択したものがエッジであるか非エッジであるかを判定する。疑似距離変換部203は、マップM(j,i)がエッジである場合には、マップM(j,i)のマップ値を0に設定し、次のマップを選択する。
【0026】
これに対して、疑似距離変換部203は、選択したマップM(j,i)が非エッジの場合には、選択したマップM(j,i)の上部のマップのマップ値に2を加算した値と、マップM(j,i)の右上部のマップのマップ値に3を加算した値を取得する。また、疑似距離変換部203は、選択したマップM(j,i)の左上部のマップのマップ値に3を加算した値と、マップM(j,i)の左側のマップのマップ値に2を加算した値を取得する。そして、疑似距離変換部203は、取得したマップ値のうち、最小のものを、選択したマップM(j,i)のマップ値に設定する。
【0027】
図5に示すように、疑似距離変換部203が、選択したマップM(2,2)とする。また、マップM(2,2)の上部のマップM(1,2)のマップ値に2を加算した値を12、マップM(2,2)の右上部のマップM(1,3)のマップ値に3を加算した値を10とする。また、選択したマップM(2,2)の左上部のマップM(1,1)のマップ値に3を加算した値を14、マップM(2,2)の左側のマップM(2,1)のマップ値に2を加算した値を12とする。この場合には、疑似距離変換部203は、マップM(2,2)のマップ値を10に設定する。
【0028】
次に、後向き処理について説明する。後向き処理では、疑似距離変換部203は、エッジ画像の右下から横に走査して、エッジ画像の左上まで下記の処理を順次実行する。図6は、後向き処理を説明するための図である。後向き処理において、疑似距離変換部203は、マップM(j,i)を選択し、選択したものがエッジであるか非エッジであるかを判定する。疑似距離変換部203はマップM(j,i)がエッジである場合には、マップM(j,i)のマップ値を0に設定し、次のマップを選択する。
【0029】
これに対して、疑似距離変換部203は、選択したマップM(j,i)が非エッジの場合には、選択したマップM(j,i)の下部のマップのマップ値に2を加算した値と、マップM(j,i)の右下部のマップのマップ値に3を加算した値を取得する。また、疑似距離変換部203は、選択したマップM(j,i)の左下部のマップのマップ値に3を加算した値と、マップM(j,i)の右側のマップのマップ値に2を加算した値を取得する。そして、疑似距離変換部203は、取得したマップ値のうち、最小のものを、選択したマップM(j,i)のマップ値に設定する。
【0030】
図6に示すように、疑似距離変換部203が、選択したマップM(2,2)とする。また、マップM(2,2)の下部のマップM(3,2)のマップ値に2を加算した値を12、マップM(2,2)の右下部のマップM(3,3)のマップ値に3を加算した値を10とする。また、選択したマップM(2,2)の左下部のマップM(3,1)のマップ値に3を加算した値を14、マップM(2,2)の右側のマップM(2,3)のマップ値に2を加算した値を12とする。この場合には、疑似距離変換部203は、マップM(2,2)のマップ値を10に設定する。
【0031】
上記のように、疑似距離変換部203は、前向き処理および後向き処理を実行することで、各マップM(j,i)にマップ値を付与する。この各マップM(j,i)にマップ値を付与したデータを、疑似距離変換マップと表記する。疑似距離変換部203は、疑似距離変換マップを疑似スケルトン抽出部204に出力する。
【0032】
疑似スケルトン抽出部204は、疑似距離変換マップを基にして、エッジに囲まれた領域の中心部分に対応する疑似スケルトンを抽出する処理部である。疑似スケルトン抽出部204が、疑似スケルトンを抽出する処理は、指の中心を含むある領域の中心部分を検出することに相当する。図7は、疑似スケルトンの一例を示す図である。図7において、線10aはエッジを示す。線11〜14は、疑似スケルトンに対応する。
【0033】
疑似スケルトン抽出部204は、疑似距離変換マップから注目画素を選択し、選択した注目画素のマップ値が、3×3の近傍領域で最大となるか否かを判定する。注目画素のマップ値が近傍領域で最大となる場合には、疑似スケルトン抽出部204は、閾値比較により、該当する画素が、疑似スケルトンであるか否かを判定する。
【0034】
抽出したい指をカメラから特定の範囲の距離にあるものに限定する。その場合、指の太さはある範囲に存在する。標準的な指の太さを予め設定しておき、指の太さが画像に撮影される太さの最大を閾値Th(max)とし、撮影される太さの最小を閾値Th(min)とする。
【0035】
上記閾値Th(max)とTh(min)との関係が「Th(max)>Th(min)*4」である場合には、画像それ自身を縮小することにより、スケルトンそれ自身の幅のゆらぎを回避することができる。例えば、「Th(max)=Th(min)*4」であるとき、一度目のTh(max)をTh(min)*3に設定して、以下の処理を実行することで、指の太さの範囲のうち、細い方3/4に分布する指の太さだけを抽出する。一連の処理が終了したら、後述する図16Bの処理S52により画像サイズを半分にする。
【0036】
このとき、画像サイズを半分にするため、指のサイズも半分になる。このときTh(max)を半分になることから、Th(max)を半分にし、Th(min)をTh(min)*1.5とする。こうすることで、太い方3/4に相当する指を抽出することができる。このとき画像を縮小することで、処理する画素自体を削減することが可能になる。
【0037】
例えば、疑似スケルトン抽出部204は、注目画素のマップ値が閾値Th(max)より小さく、かつ、閾値Th(min)よりも大きい場合に、該当注目画素を、疑似スケルトンに対応する画素と判定する。閾値Th(max)および閾値Th(min)の値は予め設定されているものとする。また、疑似スケルトン抽出部204が注目画素を選択することは、上記のマップM(j,i)を選択することに等しい。
【0038】
疑似スケルトン抽出部204は、上記の処理を実行して、疑似スケルトン抽出データを生成する。図8は、疑似スケルトン抽出データのデータ構造の一例を示す図である。図8に示すように、この疑似スケルトン抽出データは、疑似スケルトン番号、座標、マップ値を対応づけて記憶する。例えば、疑似スケルトン番号「0」の疑似スケルトンでは、x座標が100、y座標が100であり、マップ値が13である。疑似スケルトン抽出部204は、疑似スケルトン抽出データを、クラスタリング部205に出力する。
【0039】
クラスタリング部205は、疑似スケルトン抽出データを基にして、疑似スケルトンに対応する画素をクラスタ化する処理部である。疑似スケルトンに対応する画素を疑似スケルトン画素と表記する。クラスタリング部205は、異なる二つの疑似スケルトン画素を選択し、各疑似スケルトン画素の間に、エッジが存在しない場合に、各疑似スケルトン画素を、同一のグループに分類する。
【0040】
クラスタリング部205の処理を具体的に説明する。疑似スケルトン画素のマップ値は、最も近いエッジからの距離を示している。このため、式(1)が成り立つ場合には、各疑似スケルトン画素の間にエッジが存在していない。式(1)において、Dabは、疑似スケルトン画素aと疑似スケルトン画素bとのユーグリッド距離を示す。また、val(a)は、疑似スケルトン画素のマップ値、val(b)は、疑似スケルトン画素bのマップ値に対応する。
【0041】
Dab<Min(val(a)/2、val(b)/2)・・・(1)
【0042】
式(1)において、マップ値を2で割ることの意義は、疑似距離変換部203にて置き換えられたマップ値が、ユーグリッド距離の2倍の距離に対応しているためである。
【0043】
図9は、クラスタリング部の処理を説明するための図である。図9において、aを疑似スケルトン画素aとし、bを疑似スケルトン画素bとすると、val(a)は5となり、val(b)は8となる。また、Dabは、4となる。この場合には、式(1)の条件を満たさないので、クラスタリング部205は、疑似スケルトン画素aと、疑似スケルトン画素bとを異なるクラスに分類する。
【0044】
クラスタリング部205は、式(1)を利用して、各疑似スケルトン画素を分類することで、クラス化スケルトンデータを生成する。図10は、クラス化スケルトンデータのデータ構造の一例を示す図である。図10に示すように、このクラス化スケルトンデータは、クラス番号、疑似スケルトン番号、座標、マップ値を対応づけて記憶する。図10に示す例では、クラス番号Pc「0」には、疑似スケルトン番号「0,1」の疑似スケルトン画素が含まれている。クラスタリング部205は、クラス化スケルトンデータを、疑似スケルトン評価部206に出力する。
【0045】
疑似スケルトン評価部206は、同一のクラスに分類される疑似スケルトン画素を評価し、指の候補であるか否かを判定する処理部である。疑似スケルトン評価部206は、長さと直線度に基づいて、同一のクラスに分類される疑似スケルトン画素を評価する。
【0046】
疑似スケルトン評価部206が、長さに基づいて、クラスiの疑似スケルトン画素を評価する処理について説明する。疑似スケルトン評価部206は、クラスiに属する疑似スケルトン画素の上端の座標と、下端の座標との距離を長さとして算出する。疑似スケルトン評価部206は、長さがTh(Len max)より小さく、かつ、Th(Len min)よりも大きい場合に、クラスiに属する疑似スケルトン画素を指の候補と判定する。Th(Len max)およびTh(Len min)の値は、予め設定されているものとする。なお、この長さは検出されたスケルトンのマップ値(指の幅)に応じて決定される。ここでの抽出対象とする指は、カメラに指の腹が正対ないしはほぼ正対しているものとする。このとき、指の長さは指の幅の定数倍を持つと仮定し、この定数倍によって決定される指の長さに対して、マージンを加減することによりTh(Len max)とTh(Len min)を決定する。
【0047】
長さに基づいた評価の後、疑似スケルトン評価部206は、指の候補としたクラスiに属する疑似スケルトン画素の直線度を計測し、指の候補とするかを再度評価する。疑似スケルトン評価部206は、直線の法線ベクトルを(Vx、Vy)、直線上の任意の点(Cx、Cy)としたときの直線のパラメータ(Vx、Vy)、(Cx、Cy)を直線度として求める。線の法線ベクトルを(Vx、Vy)、直線上の任意の点(Cx、Cy)としたときの直線は、式(2)のように表すことができる。
【0048】
Vx(x−Cx)+Vy(y−Cy)=0・・・(2)
【0049】
疑似スケルトン評価部206が、直線度Vx、Vy、Cx、Cyを求める処理について説明する。まず、疑似スケルトン評価部206は、式(3)によって表される直線の評価関数を最小にするVx’、Vy’を求める。直線の評価関数は、式(4)によって表される。式(4)において、jは、クラスiに含まれる疑似スケルトン画素の疑似スケルトン番号に対応するインデックスである。
【0050】
Vx’+Vy’y+1=0・・・(3)
【0051】
評価関数=ΣjVx’(Px(j))+Vy’(Py(j))+1)^2・・・(4)
【0052】
疑似スケルトン評価部206は評価関数を最小にするVx’、Vy’を式(5)により求める。
【0053】
【数1】

【0054】
疑似スケルトン評価部206は、Vx’、Vy’を求めた後に、Vx’、Vy’を法線ベクトルになるように規格化することでVx、Vyを求める。疑似スケルトン評価部206は、式(6)および式(7)に基づいて、Vx’、Vy’を法線ベクトルになるように規格化する。なお、式(6)および式(7)に含まれるZは、式(8)により求められる。
【0055】
Vx=Vx’/Z・・・(6)
【0056】
Vy=Vy’/Z・・・(7)
【0057】
Z=sqrt(Vx×Vx+Vy×Vy)・・・(8)
【0058】
ところで、式(2)、式(3)の関係から、式(9)が成り立つ。そして、Cx、CyをUx、Uyの直線に対する推薦の足と仮定すると、式(9)は式(10)によって表すことができる。ここで、Ux、Uyは、同一のクラスに属する疑似スケルトン画素のうち、最も上部に位置するものの座標に対応する。本実施例では、このUx、Uyの方向に、指先があると仮定する。
【0059】
VxCx+VyCy=Z・・・(9)
【0060】
(Uy−Cy)Vx−(Ux−Cx)Vy・・・(10)
【0061】
式(9)と式(10)を連立すると、式(11)によって、Cx、Cyを表すことができる。疑似スケルトン評価部206は、式(11)を利用して、Cx、Cyを求める。
【0062】
【数2】

【0063】
疑似スケルトン評価部206は、Vx、Vy、Cx、Cyを求めた後に、式(12)の評価式Jの値を求める。
【0064】
評価式J=Σj(Vx(x−Cx)+Vy(y−Cy))^2・・・(12)
【0065】
疑似スケルトン評価部206は、評価式Jの値がTh(line)以下の場合に、クラスiに属する疑似スケルトン画像を指の候補と判定する。Th(line)の値は予め設定されているものとする。
【0066】
また、疑似スケルトン評価部206は、指の候補と判定したクラスに含まれる各疑似スケルトン画素のマップ値を平均化することで、平均マップ値val(ave)を算出する。
【0067】
疑似スケルトン評価部206は、指の候補と判定したクラスに含まれる疑似スケルトン画像を基にして、クラスデータを作成する。このクラスデータは、長さl、上部の位置(Ux、Uy)、平均マップ値val(ave)、直線パラメータ(Vx、Vy)(Cx、Cy)を含む。疑似スケルトン評価部206は、クラスデータを輝度勾配抽出部207に出力する。
【0068】
輝度勾配抽出部207は、指の方向の輝度勾配と、指の方向に対する垂直方向の輝度勾配とを基にして、指の候補と判定されたクラスから、指に対応するクラスを判定する処理部である。指の方向に対する垂直方向は、指の円周方向と表記する。
【0069】
図11は、指に対する輝度の特徴を説明する図である。図11に示す円筒モデル20は、指に相当するものである。円筒モデル20は、一様な反射特性を持つものとする。図11の縦軸yは、指の方向に対応する。横軸xは、指の円周方向に対応する。平行光源からの光が照射された場合に、縦軸y方向には輝度の変化はない。これに対して、横軸x方向には、輝度勾配が存在する。輝度勾配抽出部207は、この光源を照射された円筒モデル20の特性を利用して、指に対応するクラスを判定する。指のような小さな対象では、蛍光灯のような照明もほぼ平行光源とみなすことができる。
【0070】
輝度勾配抽出部207の処理を具体的に説明する。輝度勾配抽出部207は、疑似スケルトン評価部206から取得したクラスデータを基にして、画像データから指の方向の輝度勾配と、円周方向の輝度勾配とを分離する。
【0071】
円周方向は、直線パラメータの法線ベクトルV=(Vx,Vy)によって得られる。この法線ベクトルVが既知であれば、指の方向(Wx、Wy)は、式(13)、式(14)によって求めることができる。輝度勾配抽出部207は、Vyの値が0未満の場合には、式(13)を利用して、指の方向(Wx,Wy)を算出する。輝度勾配抽出部207は、Vyの値が0より大きい場合には、式(14)を利用して、指の方向(Wx,Wy)を算出する。
【0072】
(Wx,Wy)=(Vy,−Vx)・・・(13)
【0073】
(Wx,Wy)=(−Vy,Vx)・・・(14)
【0074】
指の方向(Wx,Wy)を算出した後に、輝度勾配抽出部207は、クラスiに関する指の領域を特定する。任意の点(x,y)を指の方向および円周方向に分解すると、式(15)に示す関係となる。
【0075】
(x,y)=(Cx+d×Vx+e×Wx,Cy+d×Vy+e×Wy)・・・(15)
【0076】
式(15)に含まれるdは、円周方向に対して指の中心からの距離に対応する。eは、指の方向に対して、指の先端からの距離に対応する。図12は、dおよびeを説明するための図である。図12の線分30は、法線ベクトルV=(Vx,Vy)に対応する。座標31は、任意の座標(x,y)に対応する。座標32は、指の先端の座標(Cx,Cy)に対応する。
【0077】
輝度勾配抽出部207は、dおよびeを式(16)により求める。ただし、輝度勾配抽出部207は、dの範囲が式(17)及び式(18)を満たし、eの範囲が式(19)および式(20)を満たす画素(x,y)を指領域とし、かかる指領域を輝度勾配の検索範囲とする。
【0078】
【数3】

【0079】
d>−val(ave)/2・・・(17)
【0080】
d<val(ave)/2・・・(18)
【0081】
e>0・・・(19)
【0082】
e<l・・・(20)
【0083】
輝度勾配抽出部207は、輝度勾配の検索範囲となる指の領域を特定した後に、検索範囲の内部の各画素に対して、輝度勾配を求める。指の方向の輝度勾配をGfとし、指の円周方向の輝度勾配をGnとする。輝度勾配抽出部207は、式(21)、(22)を利用して、指の方向の輝度勾配Gf、円周方向の輝度勾配Gnを求める。式(21)、(21)のθは、式(23)により求められる角度である。
【0084】
Gf=G×cos(γ−θ)・・・(21)
【0085】
Gn=G×sin(γ−θ)・・・(22)
【0086】
θ=tan−1(Wy/Wx)・・・(23)
【0087】
図13は、指の方向の輝度勾配Gfと円周方向の輝度勾配Gnとの関係を示す図である。図13において、画素30は、注目画素であり、座標を(x,y)とする。線分31は、(Wx,Wy)に対応する指の方向のベクトルである。線分32は、画素30の輝度勾配である。線分32aは、指の方向の輝度勾配Gfに対応する。線分32bは、指の円周方向の輝度勾配Gnに対応する。角度33は、上記θに対応するものである。
【0088】
なお、式(21)、(22)におけるGは、各画素の輝度勾配の大きさに対応し、図13の線分32に対応する。また、式(21)、(22)におけるγは、水平軸35と、線分32とのなす角度34に対応する。輝度勾配抽出部207は、輝度勾配Gを式(24)により求める。また、輝度勾配抽出部207は、γを式(25)により求める。
【0089】
G=squrt(Gv^2+Gh^2)・・・(24)
【0090】
γ=tan−1(Gv/Gh)・・・(25)
【0091】
輝度勾配抽出部207は、式(24)、(25)に含まれるGvを式(26)により求める。また、輝度勾配抽出部207は、式(24)、(25)に含まれるGhを式(27)により求める。
【0092】
Gv=(a11+a10−a01−a00)・・・(26)
【0093】
Gh=(a11+a00−a10−a00)・・・(27)
【0094】
式(26)、(27)に含まれるa00、a01、a10、a11は、注目画素(x,y)の左上画素、右上画素、左下画素、右下画素の輝度値に対応する。図14は、a00、a01、a10、a11を説明するための図である。注目画素を33とすると、注目画素と左上画素A00、右上画素A01、左下画素A10、右下画素A11の位置関係は図14のようになる。A00、A01、A10、A11の画素値がそれぞれa00、a01、a10、a11となる。
【0095】
輝度勾配抽出部207は、検索範囲に含まれる任意の座標(x,y)について、指の方向の輝度勾配Gfと円周方向の輝度勾配Gnとを求めた後に、式(28)の条件を満たすか否かを判定する。輝度勾配抽出部207は、式(28)の条件を満たす場合には、任意の座標の画素は、指の領域ではないと判定する。これに対して、輝度勾配抽出部207は、式(28)の条件を満たさない場合には、指の領域であると判定し、Num(fing)の値に1を加算する。Num(fing)の初期値を0とする。
【0096】
Gf/Gn>Th・・・(28)
【0097】
輝度勾配抽出部207は、クラスiに対する指の検索範囲に含まれる全ての画素に対して、式(28)の条件を満たすか否かを判定し、Num(fing)の値をカウントアップする。輝度勾配抽出部207は、指の検索範囲に含まれる全ての画素に対して、式(28)の条件を満たすか否かを判定した後、Num(fing)の値が、閾値Th(m)以下であるか否かを判定する。
【0098】
輝度勾配抽出部207は、Num(fing)の値が、閾値Th(m)以下の場合には、クラスiを指に対応するクラスと判定する。輝度勾配抽出部207は、疑似スケルトン評価部206から取得した他のクラスに関しても、上記処理を実行し、指に対応するクラスか否かを判定する。輝度勾配抽出部207は、指に対応するクラスの情報を、指領域判定部208に出力する。
【0099】
指領域判定部208は、輝度勾配抽出部207から取得するクラスの情報を基にして、指の領域を判定する処理部である。例えば、指領域判定部208は、クラスに含まれる疑似スケルトン画素の範囲を、指の領域とする。また、指領域判定部208は、各疑似スケルトン画素のうち、最も上部に位置する疑似スケルトン画素の座標を指先の座標として判定する。指領域判定部208は、指の領域の情報と、指先の座標の情報を、指操作判定部104に出力する。
【0100】
次に、指操作判定部104の処理の一例について説明する。指操作判定部104は、指の領域の情報と、指の座標の情報とを基にして、指の本数を判定する。あるいは、指操作判定部104は、指の領域の情報と、指の座標の情報とを基にして、立てている指の組み合わせを判定する。指操作判定部104は、指の本数あるいは立てている指の組み合わせと、操作の種別とを対応づけたテーブルを参照し、操作の種別を判定する。かかるテーブルは、例えば、指操作判定部104が保持する。例えば、指操作判定部104は、特開2003−346162等に開示される、画像から認識した指の状態に応じて、操作を判断する既知の技術を用いてもよい。
【0101】
次に、本実施例にかかる画像処理装置100の処理手順について説明する。図15は、本実施例にかかる画像処理装置の処理手順を示すフローチャートである。例えば、図15に示す処理は、カメラ101aから画像データを取得したことを契機として実行される。画像処理装置100は、カメラ101aから画像データを取得し(ステップS101)、指検出処理を実行する(ステップS102)。
【0102】
画像処理装置100は、カーソルを描画し(ステップS103)、指先位置に対応したボタン算出処理を実行する(ステップS104)。画像処理装置100は、押下フラグが1か否かを判定する(ステップS105)。
【0103】
画像処理装置100は、押下フラグが1ではない場合には(ステップS105,No)、ステップS101に移行する。一方、画像処理装置100は、押下フラグが1の場合には(ステップS105,Yes)、指示内容がendか否かを判定する(ステップS106)。
【0104】
画像処理装置100は、指示内容がendではない場合には(ステップS106,No)、指示内容に応じた処理を実行し(ステップS107)、ステップS101に移行する。一方、画像処理装置100は、指示内容がendの場合には(ステップS106,Yes)、処理を終了する。
【0105】
次に、図15のステップS102に示した指検出処理の処理手順について説明する。図16Aは、指検出処理の処理手順を示すフローチャートである。図16Aに示すように、画像処理装置100は、色に基づいて指を抽出し(ステップS110)、指が検出されたか否かを判定する(ステップS111)。
【0106】
画像処理装置100は、指が検出された場合には(ステップS111,Yes)、指検出処理を終了する。一方、画像処理装置100は、指が検出されなかった場合には(ステップS111,No)、形状に基づく指抽出処理を実行する(ステップS112)。
【0107】
次に、図16AのステップS112に示した形状に基づく指抽出処理の処理手順について説明する。図16Bは、形状に基づく指検出処理の処理手順を示すフローチャートである。図16Bに示すように、画像処理装置100は、疑似スケルトンによる抽出処理を実行し(ステップS50)、輝度勾配による抽出処理を実行する(ステップS51)。
【0108】
画像処理装置100は、縮小サイズが所定のサイズ未満ではない場合には(ステップS52,No)、形状に基づく指抽出処理を終了する。一方、画像処理装置100は、縮小サイズが所定のサイズ未満の場合には(ステップS52,Yes)、画像のサイズを2倍に設定し(ステップS53)、画面サイズを変更し(ステップS54)、ステップS50に移行する。
【0109】
次に、図16BのステップS50に示した疑似スケルトンによる抽出処理について説明する。図17は、疑似スケルトンによる抽出処理の処理手順を示すフローチャートである。図17に示すように、画像処理装置100は、エッジ抽出処理を実行し(ステップS115)、疑似距離変換処理を実行する(ステップS116)。
【0110】
画像処理装置100は、疑似スケルトン抽出処理を実行し(ステップS117)、疑似スケルトンクラスタリング処理を実行し(ステップS118)、疑似スケルトン評価処理を実行する(ステップS119)。
【0111】
次に、図17のステップS116に示した疑似距離変換処理の処理手順について説明する。この疑似距離変換処理は、前向き処理と後ろ向き処理を順に実行する。図18および図19は、前向き処理の処理手順を示すフローチャートである。図20は、後ろ向き処理の処理手順を示すフローチャートである。
【0112】
前向き処理の処理手順について説明する。図18に示すように、画像処理装置100は、エッジ画像Eを取得し(ステップS120)、距離変換マップMを設定する(ステップS121)。画像処理装置100は、エッジ画像Eにおいて、0の画素を255とし、それ以外の画素を0に設定する(ステップS122)。
【0113】
画像処理装置100は、y方向のカウンタiを0に設定し(ステップS123)、x方向のカウンタjを0に設定する(ステップS124)。画像処理装置100は、E(j,i)の値が0の場合には(ステップS125,Yes)、ステップ127に移行する。一方、画像処理装置100は、E(j,i)の値が0ではない場合には(ステップS125,No)、M(j,i)の値を0に設定する(ステップS126)。
【0114】
画像処理装置100は、jに1を加算し(ステップS127)、E(j,i)の値が0か否かを判定する(ステップS128)。画像処理装置100は、E(j,i)の値が0ではない場合には(ステップS128,No)、M(j,i)の値を0に設定し(ステップS129)、ステップS131に移行する。
【0115】
一方、画像処理装置100は、E(j,i)の値が0の場合には(ステップS128,Yes)、M(j,i)の値を、MIN[255、M(j−1、i)+2]とし(ステップS130)、jに1を加算する(ステップS131)。画像処理装置100は、jの値がSizeX未満の場合には(ステップS132,Yes)、ステップS128に移行する。
【0116】
画像処理装置100は、jの値がSizeX未満ではない場合には(ステップS132,No)、図19のステップS133に移行する。画像処理装置100は、iの値に1を加算し、jの値を0に設定する(ステップS134)。画像処理装置100は、E(j,i)の値が0ではない場合には(ステップS135,No)、M(j,i)の値を0に設定し(ステップS136)、ステップS138に移行する。
【0117】
画像処理装置100は、E(j,i)の値が0の場合には(ステップS135,Yes)、M(j,i)の値を、MIN[255、M(j−1、i)+2、M(j+1、i−1)+3]とする(ステップS137)。画像処理装置100は、jの値に1を加算し(ステップS138)、E(j,i)の値が0ではない場合に(ステップS139,No)、M(j,i)の値を0に設定する(ステップS140)。
【0118】
画像処理装置100は、E(j,i)の値が0の場合に(ステップS139,Yes)、M(j,i)の値を、MIN[255、M(j、i−1)+2、M(j+1、i−1)+3、M(j−1、i−1)+2、M(j−1、i−1)+3]とする(ステップS141)。
【0119】
画像処理装置100は、jの値に1を加算し(ステップS142)、jの値がSizeX未満の場合には(ステップS143,Yes)、ステップS139に移行する。一方、画像処理装置100は、jの値がSizeX未満ではない場合には(ステップS143,No)、iの値に1を加算する(ステップS144)。
【0120】
画像処理装置100は、iの値がSizeY未満の場合には(ステップS145,Yes)、ステップS134に移行する。一方、画像処理装置100は、iの値がSizeY未満ではない場合には(ステップS145,No)、前向き処理を終了する。
【0121】
次に、後ろ向き処理の処理手順について説明する。図20に示すように、画像処理装置100は、エッジ画像Eを取得し(ステップS150)、距離変換マップMを設定する(ステップS151)。
【0122】
画像処理装置100は、y方向のカウンタiをSizeY−1に設定し(ステップS152)、画像処理装置100は、x方向のカウンタjをSizeX−1に設定する(ステップS153)。画像処理装置100は、M(j,i)の値を、MIN[M(i,j)、M(j+1,i)+2]に設定し(ステップS154)、jの値から1を減算する(ステップS155)。
【0123】
画像処理装置100は、jの値が0の場合には(ステップS156,Yes)、ステップS154に移行する。一方、画像処理装置100は、jの値が0ではない場合には(ステップS156,No)、jの値をSizeY−1に設定する(ステップS157)。
【0124】
画像処理装置100は、M(j,i)の値を、MIN[M(i,j)、M(j、i+11)+2、M(j−1、i+1)+3]に設定し(ステップS158)、jの値から1を減算する(ステップS159)。
【0125】
画像処理装置100は、M(j,i)の値を、MIN[M(i、j),M(j、i+1)+2、M(j−1、i+1)+3,M(j+1、i)+2,M(j+1、i+1)+3]とする(ステップS160)。
【0126】
画像処理装置100は、jの値から1を減算し(ステップS161)、jの値がSizeX未満の場合には(ステップS162,Yes)、ステップS160に移行する。一方、画像処理装置100は、jの値がSizeX未満ではない場合には(ステップS162,No)、iの値から1を減算する(ステップS163)。
【0127】
画像処理装置100は、iの値がSizeY未満の場合には(ステップS164,Yes)、ステップS157に移行する。一方、画像処理装置100は、iの値がSizeY未満ではない場合には(ステップS164,No)、後ろ向き処理を終了する。
【0128】
次に、図17のステップS117に示した疑似スケルトン抽出処理の処理手順について説明する。図21は、疑似スケルトン抽出処理の処理手順を示すフローチャートである。図21に示すように、画像処理装置100は、画面サイズ(SizeX、SizeY)を取得し(ステップS170)、距離変換マップMを取得する(ステップS171)。
【0129】
画像処理装置100は、スケルトン座標Px、Pyを取得し(ステップS172)、スケルトン座標数NumPを取得する(ステップS173)。画像処理装置100は、y方向のカウンタiの値を0に設定し(ステップS174)、x方向のカウンタjの値を0に設定する(ステップS175)。
【0130】
画像処理装置100は、注目画素が3×3の近傍で最も高いマップ値か否かを判定する(ステップS176)。画像処理装置100は、注目画素が3×3の近傍で最も高いマップ値ではない場合に(ステップS176,No)、ステップS179に移行する。
【0131】
一方、画像処理装置100は、注目画素が3×3の近傍で最も高いマップ値の場合には(ステップS176,Yes)、マップ値<Th(max)またはマップ値>Th(min)であるか否かを判定する(ステップS177)。
【0132】
画像処理装置100は、マップ値<Th(max)またはマップ値>Th(min)ではない場合には(ステップS177,No)、ステップS179に移行する。一方、画像処理装置100は、マップ値<Th(max)またはマップ値>Th(min)である場合には(ステップS177,Yes)、Px(NumP)の値をjとし、Py(NumP)の値をiとする(ステップS178)。
【0133】
画像処理装置100は、NumPの値に1を加算し(ステップS179)、jの値に1を加算し(ステップS180)、jの値がSizeX未満であるか否かを判定する(ステップS181)。
【0134】
画像処理装置100は、jの値がSizeX未満の場合には(ステップS181,Yes)、ステップS176に移行する。一方、画像処理装置100は、jの値がSizeY未満ではない場合に(ステップS181,No)、iの値に1を加算する(ステップS182)。画像処理装置100は、iの値がSizeY未満の場合には(ステップS183,Yes)、ステップS175に移行する。一方、画像処理装置100は、iの値がSizeY未満ではない場合には(ステップS183,No)、疑似スケルトン抽出処理を終了する。
【0135】
次に、図17のステップS118に示した疑似スケルトンクラスタリング処理について説明する。図22〜図24は、疑似スケルトンクラスタリング処理の処理手順を示すフローチャートである。図22に示すように、画像処理装置100は、画面サイズ(SizeX,SizeY)を取得し(ステップS201)、スケルトン座標配列(Px,Py)を取得する(ステップS202)。
【0136】
画像処理装置100は、スケルトン座標数NumPの値を0に設定し(ステップS203)、スケルトンクラスPcを取得する(ステップS204)。画像処理装置100は、スケルトンクラス数NumPcの値を0に設定する(ステップS205)。画像処理装置100は、スケルトンクラスを初期値に設定する(ステップS206)。
【0137】
画像処理装置100は、スケルトンカウンタiの値を0に設定し(ステップS207)、スケルトンカウンタjの値をi+1の値に設定する(ステップS208)。画像処理装置100は、Dijの値を、sqrt((Px(i)−Px(j))^2+(Py(i)−Py(j))^2)とする(ステップS209)。
【0138】
画像処理装置100は、Dijの値が、Min(val(i),val(j))未満ではない場合には(ステップS210,No)、図23のステップS222に移行する。一方、画像処理装置100は、、Dijの値が、Min(val(i),val(j))未満の場合には(ステップS210,Yes)、Pc(i)の値がPc(j)の値未満か否かを判定する(ステップS211)。
【0139】
画像処理装置100は、Pc(i)の値がPc(j)の値未満ではない場合には(ステップS211,No)、図23のステップS212に移行する。一方、画像処理装置100は、Pc(i)の値がPc(j)の値未満の場合には(ステップS211,Yes)、図23のステップS217に移行する。
【0140】
図23の説明に移行する。画像処理装置100は、スケルトンカウンタiiの値を0に設定し(ステップS212)、Pc(ii)の値とPc(i)の値とが等しくない場合には(ステップS213,No)、ステップS215に移行する。一方、画像処理装置100は、Pc(ii)の値とPc(i)の値とが等しい場合には(ステップS213,Yes)、Pc(ii)の値をPc(j)に設定する(ステップS214)。
【0141】
画像処理装置100は、iiの値に1を加算し(ステップS215)、iiの値とj+1の値とが等しくない場合に(ステップS216,No)、ステップS213に移行する。一方、画像処理装置100は、iiの値とj+1の値とが等しい場合には(ステップS216,Yes)、ステップS222に移行する。
【0142】
ところで、画像処理装置100は、スケルトンカウンタjjの値を0に設定し(ステップS217)、Pc(jj)の値とPc(j)の値とが等しくない場合には(ステップS218,No)、ステップS220に移行する。一方、画像処理装置100は、Pc(jj)の値とPc(j)の値とが等しい場合には(ステップS218,Yes)、Pc(jj)の値をPc(i)に設定する(ステップS219)。
【0143】
画像処理装置100は、jjの値に1を加算し(ステップS220)、jjの値とj+1の値とが等しくない場合に(ステップS221,No)、ステップS218に移行する。一方、画像処理装置100は、jjの値とj+1の値とが等しい場合には(ステップS221,Yes)、ステップS222に移行する。
【0144】
画像処理装置100は、jの値に1を加算し(ステップS222)、jの値がNumPの値未満ではない場合には(ステップS223,No)、図22のステップS208に移行する。一方、画像処理装置100は、jの値がNumPの値未満の場合には(ステップS223,Yes)、iの値に1を加算し(ステップS224)、jの値がNumP−1の値未満か否かを判定する(ステップS225)。
【0145】
画像処理装置100は、jの値がNumP−1の値未満ではない場合には(ステップS225,No)、図22のステップS209に移行する。一方、画像処理装置100は、jの値がNumP−1の値未満の場合には(ステップS225,Yes)、図24のステップS226に移行する。
【0146】
図24の説明に移行する。画像処理装置100は、スケルトンカウンタiの値を0に設定し(ステップS226)、iの値とPc(i)の値とが等しくない場合には(ステップS227,No)、Pc(i)の値をPc(Pc(i))の値に設定する(ステップS228)。画像処理装置100は、iに1を加算し(ステップS229)、ステップS232に移行する。
【0147】
一方、画像処理装置100は、iの値とPc(i)の値とが等しい場合には(ステップS227,Yes)、Pc(i)にNumPcの値を設定する(ステップS230)。画像処理装置100は、NumPcに1を加算する(ステップS231)。
【0148】
画像処理装置100は、iの値とNumPの値とが等しくない場合には(ステップS232,No)、ステップS227に移行する。一方、画像処理装置100は、iの値とNumPの値とが等しい場合には(ステップS232,Yes)、疑似スケルトンクラスタリング処理を終了する。
【0149】
次に、図17のステップS119に示した疑似スケルトン評価処理について説明する。図25は、疑似スケルトン評価処理の処理手順を示すフローチャートである。図25に示すように、画像処理装置100は、スケルトンクラス変数iの値を0に設定し(ステップS250)、クラス数Ncを取得する(ステップS251)。
【0150】
画像処理装置100は、クラスiの上端の点と下端の点との距離を直線の長さlに設定し(ステップS252)、Th(LenMin)<l<Th(LenMax)の関係を満たさない場合には(ステップS253,No)、ステップS259に移行する。
【0151】
画像処理装置100は、Th(LenMin)<l<Th(LenMax)の関係を満たす場合には(ステップS253,Yes)、クラスiのPx、Pyから最小二乗法により直線を算出する(ステップS254)。画像処理装置100は、非直線度を算出し(ステップS255)、非直線度がTh(line)より大きい場合には(ステップS256,Yes)、ステップS259に移行する。
【0152】
一方、画像処理装置100は、非直線度がTh(line)より大きくない場合には(ステップS256,No)、Ncnewに1を加算する(ステップS257)。Ncnewの初期値を0とする。画像処理装置100は、クラスiの情報を格納し(ステップS258)、iに1を加算する(ステップS259)。
【0153】
画像処理装置100は、iの値がNcの値未満ではない場合には(ステップS260,No)、ステップS252に移行する。一方、画像処理装置100は、iの値がNcの値未満の場合には(ステップS260,Yes)、NcにNcnewの値を設定し(ステップS261)、疑似スケルトン評価処理を終了する。
【0154】
次に、図16BのステップS51に示した輝度勾配による抽出処理の処理手順について説明する。図26および図27は、輝度勾配による抽出処理の処理手順を示すフローチャートである。図26に示すように、画像処理装置100は、スケルトンクラス変数iの値を0に設定し(ステップS270)、クラス数Ncを取得し(ステップS271)、候補画素数Num(fing)の値を0に設定する(ステップS272)。
【0155】
画像処理装置100は、探索数Num(cand)の値を0に設定し(ステップS273)、クラスカウンタNを設定する(ステップS274)。画像処理装置100は、y方向カウンタiの値を0に設定し(ステップS275)、x方向カウンタjの値を0に設定する(ステップS276)。
【0156】
画像処理装置100は、座標(j,i)におけるd、eを算出し(ステップS277)、検索範囲内ではない場合には(ステップS278,No)、図27のステップS285に移行する。
【0157】
一方、画像処理装置100は、検索範囲内の場合には(ステップS278,Yes)、Num(card)に1を加算し(ステップS279)、指方向を算出する(ステップS280)。画像処理装置100は、指方向の輝度勾配を算出し(ステップS281)、円周方向の輝度勾配を算出する(ステップS282)。
【0158】
画像処理装置100は、勾配比(Gf/Gn)が閾値未満の場合には(ステップS283,Yes)、図27のステップS285に移行する。一方、画像処理装置100は、勾配比(Gf/Gn)が閾値未満ではない場合には(ステップS283,No)、Num(fing)に1を加算し(ステップS284)、図27のステップS285に移行する。
【0159】
図27の説明に移行する。画像処理装置100は、jから1を減算し(ステップS285)、jの値がSizeXの値未満の場合には(ステップS286,Yes)、図26のステップS277に移行する。
【0160】
画像処理装置100は、jの値がSizeX未満ではない場合には(ステップS286,No)、iから1を減算し(ステップS287)、iの値がSizeYの値未満の場合には(ステップS288,Yes)、図26のステップS276に移行する。
【0161】
画像処理装置100は、Num(fing)/Num(cand)の値が、Th(m)の値未満ではない場合には(ステップS289,No)、ステップS291に移行する。一方、画像処理装置100は、Num(fing)/Num(cand)の値がTh(m)の値未満の場合には(ステップS289,Yes)、クラスNcの情報を指として出力領域に格納する(ステップS290)。
【0162】
画像処理装置100は、Nに1を加算し(ステップS291)、Nの値がNcの値未満の場合には(ステップS292,Yes)、ステップS275に移行する。一方、画像処理装置100は、Nの値がNcの値未満ではない場合には(ステップS292,No)、輝度勾配による抽出処理を終了する。
【0163】
次に、本実施例にかかる画像処理装置100の効果について説明する。画像処理装置100は、認識対象の画像からエッジを抽出し、エッジに挟まれた領域の疑似スケルトンを求める。そして、画像処理装置100は、疑似スケルトンとエッジとに囲まれる領域の長辺方向および短辺方向の輝度勾配を利用することで、指の領域か否かを判定する。このため、画像処理装置100によれば、背景色によらず指の領域を判定することができる。
【0164】
また、画像処理装置100は、表示部101bの画面上の領域と該画面上の領域に対応する操作の種別とを対応づけたボタン管理情報と指の領域の座標とを基にして、操作の種別を判定する。このため、画像処理装置100は、手と顔とが画像データに含まれている場合でも、指の動きによる操作を可能にする。
【0165】
また、画像処理装置100は、疑似スケルトンを抽出する場合に、エッジからの距離が所定の閾値未満となる疑似スケルトンを抽出する。このため、画像処理装置100は、指とは明らかに異なる疑似スケルトンを効率よく排除することができる。
【0166】
ところで、上記に示した画像処理装置100の処理は一例である。以下では、画像処理装置100のその他の処理について説明する。
【0167】
図1に示した第2指検出部103は、画像サイズ変更部201が、画像データのサイズを変更して、各サイズの画像データから、指の領域を検出する場合を例に説明したが、これに限定されるものではない。例えば、画像データのサイズを変更する代わりに、各閾値を変更することで、各サイズの画像データから、指の領域を検出することができる。
【0168】
例えば、第2指検出部103は、画像の横縦を1/2に縮小する代わりに、閾値Th(max)および閾値Th(min)の値、Th(Len max)より小さく、かつ、Th(Len min)の値を2倍にする。また、第2指検出部103は、Th(line)の値を2倍にする。すなわち、第2指検出部103は、画像の横縦を1/n倍する場合には、閾値Th(max)および閾値Th(min)の値、Th(Len max)より小さく、かつ、Th(Len min)の値をn倍にする。また、第2指検出部103は、Th(line)の値をn倍にする。このように、第2指検出部103は、画像サイズを変更しなくても、各サイズに対応する指の領域を検出することができる。
【0169】
また、疑似スケルトン抽出部204は、疑似スケルトンを抽出する場合には、上記処理に加えて、輝度勾配を利用してもよい。例えば、疑似スケルトン抽出部204は、縦軸方向および横軸方向の輝度勾配を求め、縦軸方向および横軸方向の輝度勾配が所定の閾値未満となる疑似スケルトンを抽出してもよい。指は円柱状であるため、縦軸方向および横軸方向で輝度は変化しないが、鼻は末広がりになるので、縦軸方向および横軸方向で輝度が変わることを利用する。このような処理を疑似スケルトン抽出部204が実行することで、抽出する疑似スケルトンの数を減らして処理負荷を軽減し、指の検出精度を向上させることができる。
【0170】
ところで、画像処理装置100は、既存のPC(Personal Computer)などの情報処理装置に、画像処理装置100の各機能を搭載することによって実現することもできる。
【0171】
図28は、実施例にかかる画像処理装置を構成するコンピュータのハードウェア構成を示す図である。図28に示すように、このコンピュータ300は、各種演算処理を実行するCPU(Central Processing Unit)301と、ユーザからのデータの入力を受け付ける入力装置302と、ディスプレイ303とを有する。また、コンピュータ300は、記憶媒体からプログラム等を読み取る読み取り装置304と、ネットワークを介して他の装置と通信を行うインターフェース装置305、画像を撮影するカメラ306とを有する。また、コンピュータ300は、各種情報を一時記憶するRAM(Random Access Memory)307と、ハードディスク装置308とを有する。各装置301〜308は、バス309に接続される。
【0172】
ハードディスク装置308は、中心部抽出プログラム308a、分類プログラム308b、判定プログラム308cを記憶する。
【0173】
CPU301は、ハードディスク装置308に記憶された各プログラム308a〜308cを読み出して、RAM307に展開する。これにより、中心部抽出プログラム308aは、中心部抽出プロセス307aとして機能する。分類プログラム308bは、分類プロセス307bとして機能する。判定プログラム308cは、判定プロセス307cとして機能する。
【0174】
例えば、中心部分抽出プロセス307aは、エッジ抽出部202、疑似距離変換部203、疑似スケルトン抽出部204に対応する。分類プロセス307bは、クラスタリング部205に対応する。判定プロセス307cは、輝度勾配抽出部207、指領域判定部208に対応する。
【0175】
なお、上記のプログラム308a〜308cは、必ずしもハードディスク装置308に格納されている必要はない。例えば、CD−ROM等の記憶媒体に記憶されたプログラム308a〜308cを、コンピュータ300が読み出して実行するようにしてもよい。また、公衆回線、インターネット、LAN(Local Area Network)、WAN(Wide Area Network)等に接続された記憶装置に、各プログラム308a〜308cを記憶させておいてもよい。この場合、コンピュータ300がこれらから各プログラム308a〜308cを読み出して実行するようにしてもよい。
【0176】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【0177】
(付記1)画像領域からエッジを抽出し、エッジに挟まれた領域の中心部分を複数抽出する中心部分抽出部と、
隣り合う中心部分の間にエッジが存在しない中心部分同士を同一のグループに分類することで、複数の中心部分をグループ分けする分類部と、
前記分類部によりあるグループに分類された中心部分と該中心部分周辺のエッジとに囲まれる領域において、長辺方向の輝度勾配に対する短辺方向の輝度勾配の割合が所定の閾値以内となる場合に、該領域を指の領域であると判定する判定部と
を有することを特徴とする画像処理装置。
【0178】
(付記2)前記判定部は、前記分類部によりあるグループに分類された中心部分と該中心部分周辺のエッジから得られる疑似スケルトンとスケルトンの各点のエッジからの距離値に基づき算出される矩形の領域において、長辺方向の輝度勾配に対する短辺方向の輝度勾配の割合が所定の閾値以内となる場合に、前記中心部分と同一のグループに分類される中心部分とエッジとに囲まれる領域を指の領域であると判定することを特徴とする付記1に記載の画像処理装置。
【0179】
(付記3)前記中心部分抽出部は、エッジに挟まれた領域の中心部分のうち、エッジからの距離が所定の閾値未満となる中心部分を抽出することを特徴とする付記1に記載の画像処理装置。
【0180】
(付記4)前記中心部分抽出部は、エッジに挟まれた領域の中心部分に対して、縦方向および横方向の輝度勾配を求め、縦方向および横方向の輝度勾配が所定の閾値未満となる中心部分を抽出することを特徴とする付記1、2または3に記載の画像処理装置。
【0181】
(付記5)コンピュータが実行する画像処理方法であって、
画像領域からエッジを抽出し、エッジに挟まれた領域の中心部分を複数抽出し、
隣り合う中心部分の間にエッジが存在しない中心部分同士を同一のグループに分類することで、複数の中心部分をグループ分けし、
あるグループに分類された中心部分と該中心部分周辺のエッジとに囲まれる領域において、長辺方向の輝度勾配に対する短辺方向の輝度勾配の割合が所定の閾値以内となる場合に、該領域を指の領域であると判定することを特徴とする画像処理方法。
【0182】
(付記6)前記指の領域を判定する処理は、前記分類部によりあるグループに分類された中心部分と該中心部分周辺のエッジから得られる疑似スケルトンとスケルトンの各点のエッジからの距離値に基づき算出される矩形の領域において、長辺方向の輝度勾配に対する短辺方向の輝度勾配の割合が所定の閾値以内となる場合に、前記中心部分と同一のグループに分類される中心部分とエッジとに囲まれる領域を指の領域であると判定することを特徴とすることを特徴とする付記5に記載の画像処理方法。
【0183】
(付記7)中心部分を抽出する場合に、エッジに挟まれた領域の中心部分のうち、エッジからの距離が所定の閾値未満となる中心部分を抽出すること特徴とすることを特徴とする付記5に記載の画像処理方法。
【0184】
(付記8)中心部分を抽出する場合に、エッジに挟まれた領域の中心部分に対して、縦方向および横方向の輝度勾配を求め、縦方向および横方向の輝度勾配が所定の閾値未満となる中心部分を抽出することを特徴とする付記5、6または7に記載の画像処理方法。
【0185】
(付記9)コンピュータに、
画像領域からエッジを抽出し、エッジに挟まれた領域の中心部分を複数抽出し、
隣り合う中心部分の間にエッジが存在しない中心部分同士を同一のグループに分類することで、複数の中心部分をグループ分けし、
あるグループに分類された中心部分と該中心部分周辺のエッジとに囲まれる領域において、長辺方向の輝度勾配に対する短辺方向の輝度勾配の割合が所定の閾値以内となる場合に、該領域を指の領域であると判定する処理を実行させる画像処理プログラム。
【0186】
(付記10)前記指の領域を判定する処理は、前記分類部によりあるグループに分類された中心部分と該中心部分周辺のエッジから得られる疑似スケルトンとスケルトンの各点のエッジからの距離値に基づき算出される矩形の領域において、長辺方向の輝度勾配に対する短辺方向の輝度勾配の割合が所定の閾値以内となる場合に、前記中心部分と同一のグループに分類される中心部分とエッジとに囲まれる領域を指の領域であると判定することを特徴とすることを特徴とする付記9に記載の画像処理プログラム。
【0187】
(付記11)中心部分を抽出する場合に、エッジに挟まれた領域の中心部分のうち、エッジからの距離が所定の閾値未満となる中心部分を抽出することを特徴とする付記9に記載の画像処理プログラム。
【0188】
(付記12)中心部分を抽出する場合に、エッジに挟まれた領域の中心部分に対して、縦方向および横方向の輝度勾配を求め、縦方向および横方向の輝度勾配が所定の閾値未満となる中心部分を抽出することを特徴する付記9、10または11に記載の画像処理プログラム。
【符号の説明】
【0189】
100 画像処理装置
101a カメラ
102 第1指検出部
103 第2指検出部
104 指操作判定部

【特許請求の範囲】
【請求項1】
画像領域からエッジを抽出し、エッジに挟まれた領域の中心部分を複数抽出する中心部分抽出部と、
隣り合う中心部分の間にエッジが存在しない中心部分同士を同一のグループに分類することで、複数の中心部分をグループ分けする分類部と、
前記分類部によりあるグループに分類された中心部分と該中心部分周辺のエッジとに囲まれる領域において、長辺方向の輝度勾配に対する短辺方向の輝度勾配の割合が所定の閾値以内となる場合に、該領域を指の領域であると判定する判定部と
を有することを特徴とする画像処理装置。
【請求項2】
前記判定部は、前記分類部によりあるグループに分類された中心部分と該中心部分周辺のエッジから得られる疑似スケルトンとスケルトンの各点のエッジからの距離値に基づき算出される矩形の領域において、長辺方向の輝度勾配に対する短辺方向の輝度勾配の割合が所定の閾値以内となる場合に、前記中心部分と同一のグループに分類される中心部分とエッジとに囲まれる領域を指の領域であると判定することを特徴とする請求項1に記載の画像処理装置。
【請求項3】
前記中心部分抽出部は、エッジに挟まれた領域の中心部分のうち、エッジからの距離が所定の閾値未満となる中心部分を抽出することを特徴とする請求項1に記載の画像処理装置。
【請求項4】
前記中心部分抽出部は、エッジに挟まれた領域の中心部分に対して、縦方向および横方向の輝度勾配を求め、縦方向および横方向の輝度勾配が所定の閾値未満となる中心部分を抽出することを特徴とする請求項1、2または3に記載の画像処理装置。
【請求項5】
コンピュータが実行する画像処理方法であって、
画像領域からエッジを抽出し、エッジに挟まれた領域の中心部分を複数抽出し、
隣り合う中心部分の間にエッジが存在しない中心部分同士を同一のグループに分類することで、複数の中心部分をグループ分けし、
あるグループに分類された中心部分と該中心部分周辺のエッジとに囲まれる領域において、長辺方向の輝度勾配に対する短辺方向の輝度勾配の割合が所定の閾値以内となる場合に、該領域を指の領域であると判定することを特徴とする画像処理方法。
【請求項6】
コンピュータに、
画像領域からエッジを抽出し、エッジに挟まれた領域の中心部分を複数抽出し、
隣り合う中心部分の間にエッジが存在しない中心部分同士を同一のグループに分類することで、複数の中心部分をグループ分けし、
あるグループに分類された中心部分と該中心部分周辺のエッジとに囲まれる領域において、長辺方向の輝度勾配に対する短辺方向の輝度勾配の割合が所定の閾値以内となる場合に、該領域を指の領域であると判定する処理を実行させる画像処理プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16A】
image rotate

【図16B】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate

【図26】
image rotate

【図27】
image rotate

【図28】
image rotate


【公開番号】特開2012−221088(P2012−221088A)
【公開日】平成24年11月12日(2012.11.12)
【国際特許分類】
【出願番号】特願2011−84346(P2011−84346)
【出願日】平成23年4月6日(2011.4.6)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】