(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0029】
以下、図面を参照しつつ、本発明の実施の形態を詳しく説明する。
【0030】
[1.人物検出装置1の構成]
図1は、本実施の形態による人物検出装置1の構成を示す機能ブロック図である。人物検出装置1は、入力画像21に含まれる人物の範囲を特定する。
【0031】
人物検出装置1は、エッジ抽出部11と、肩検出部12と、足先検出部13と、頭頂検出部14と、胴検出部15と、脚検出部16と、画像認識部17と、サイズ決定部18と、メモリ19とを備える。
【0032】
エッジ抽出部11は、入力画像21に対してエッジ抽出処理を実行して、横エッジ画像22及び縦エッジ画像23を生成する。
【0033】
肩検出部12は、横エッジ画像22を用いて、入力画像21に含まれる人物の肩の中心位置及び肩幅を検出する。肩検出部12は、肩の中心位置及び肩幅の検出結果を含む肩候補データ24を生成してメモリ19に格納する。
【0034】
足先検出部13は、横エッジ画像22と肩候補データ24とを用いて、入力画像21に含まれる人物の足先の位置を検出する。足先の位置は、肩検出部12により検出された肩の中心及び肩幅に基づいて検出される。
【0035】
頭頂検出部14は、横エッジ画像22と肩候補データ24とを用いて、入力画像21に含まれる人物の頭頂の位置を検出する。頭頂の位置は、肩検出部12により検出された肩の中心及び肩幅に基づいて検出される。
【0036】
胴検出部15は、縦エッジ画像23と肩候補データ24とを用いて、入力画像21に含まれる人物の胴の位置及び胴幅を検出する。胴の位置及び胴幅は、肩検出部12により検出された肩の中心及び肩幅に基づいて検出される。
【0037】
脚検出部16は、縦エッジ画像23と肩候補データ24とを用いて、入力画像21に含まれる人物の脚を検出する。人物の脚は、肩検出部12により検出された肩の中心及び肩幅に基づいて検出される。
【0038】
サイズ決定部18は、検出された人物の肩幅及び胴幅に基づいて、入力画像21に含まれる人物の横方向のサイズを決定し、検出された足先の位置及び頭頂の位置に基づいて、入力画像21に含まれる人物の縦方向のサイズを決定する。サイズ決定部18は、決定したサイズ、肩の中心位置、足先の位置、頭頂の位置などを含む人物範囲データ28を生成する。
【0039】
画像認識部17は、ニューラルネットワークや、サポートベクターマシンなどのアルゴリズムを用いて、入力画像21における人物の有無を判断する。人物が入力画像21に含まれる場合、画像認識部17は、人物の存在する大まかな範囲を特定した対象領域データ25を作成する。対象領域データ25により特定される領域が、肩検出の対象となる。
【0040】
メモリ19は、RAM(Random Access memory)などの記憶装置であり、肩候補データ24、対象領域データ25、及び探索範囲データ26を格納する。探索範囲データ26には、胴、脚、足先の位置、及び頭頂の位置を探索する範囲を設定するための基準が記録されている。また、メモリ19は、エッジ抽出部11、肩検出部12、足先検出部13、頭頂検出部14、胴検出部15、脚検出部16、画像認識部17、及びサイズ決定部18が各々の処理を実行する際の作業領域として使用される。
【0041】
[2.人物検出装置1の全体的な動作]
人物検出装置1は、入力画像21に含まれる人物の肩の中心、肩幅、胴、脚、足先、及び頭頂を検出することにより、人物の位置及びサイズを特定する。
【0042】
図2は、人物検出装置1により検出される人物の肩と、胴と、脚と、足先と、頭頂との位置関係を示す図である。
図2に示すように、人物3の肩31とは、腕32が胴33に接続される部分から、首34の付け根までの部位をいう。人物3が正面を向いている場合、肩31は、略三角形状である。頭頂35は、直立している人物3の上端を指し、足先36は、直立している人物3の下端を指す。胴33は、人物の頭及び手足を除いた部位である。胴幅は、腕32,32及び胴33を含む横方向のサイズである。胴33の横サイズのみを胴幅として検出してもよい。脚38,38は、大腿部からくるぶしまでの部位を指す。足先は、くるぶしから下の部位を指す。
【0043】
図3は、人物検出装置1の動作を示すフローチャートである。人物検出装置1は、入力画像21に含まれる人物の大まかな領域を特定した対象領域データ25を作成する(ステップS1)。入力画像21は、カメラ(図示省略)により撮影された画像データ(フレーム)である。カメラは、例えば、自動車等の車両に搭載される。
【0044】
対象領域データ25は、ニューラルネットワークなどのアルゴリズムを用いる画像認識部17により生成される。ニューラルネットワークを用いた人物検出では、検出された人物のサイズを特定することができないが、人物が検出された大まかな位置を特定することができる。画像認識部17は、人物が存在する領域を示す対象領域データ25を作成してメモリ19に格納する。
【0045】
図4は、入力画像21の一例を示す図である。
図4において、入力画像21は、後ろ向きに立つ3人の人物を含む。3人の人物をそれぞれ囲む枠21a〜21cは、画像認識部17により人物が存在すると判断された領域(対象領域)であり、対象領域データ25は、枠21a〜21cを特定する情報を含む。
【0046】
以下、特に説明のない限り、枠21a内の人物の範囲を特定する場合における人物検出装置1の動作を説明する。
【0047】
まず、人物検出装置1は、入力画像21に対してエッジ抽出処理を実行し(ステップS2)、横エッジ画像22及び縦エッジ画像23を生成する。人物検出装置1は、入力画像の垂直方向(縦方向)の画素値の勾配に基づいてエッジを抽出して横エッジ画像22を生成する。このため、横エッジ画像22では、入力画像21が有する横方向に延びるエッジが強調される。人物検出装置1は、入力画像の水平方向(横方向)の画素値の勾配に基づいてエッジを抽出して縦エッジ画像23を生成する。このため、縦エッジ画像23では、入力画像21が有する縦方向に延びるエッジが強調される。
【0048】
図5は、
図4に示す入力画像21から生成された横エッジ画像22を示す図である。
図6は、
図4に示す入力画像21から生成された縦エッジ画像23を示す図である。
図5に示す横エッジ画像22では、3人の男性の肩付近のエッジや、3人の男性のシャツとパンツとの境界が強調されている。
図6に示す縦エッジ画像23では、3人の男性の腕や、脚が強調されている。
【0049】
人物検出装置1は、横エッジ画像22を用いて、対象領域データ25で特定された枠21a〜21cにおける人物の肩の中心及び肩幅を検出する(ステップS3)。ステップS3で検出された肩の中心及び肩幅は、肩候補データ24に記録される。ステップS3の詳細については、後述する。
【0050】
人物検出装置1は、ステップS3で検出された肩の中心に対応する足先の位置を検出する(ステップS4)。足先の探索対象となる領域(足先探索領域)は、ステップS3で検出された肩の中心及び肩幅と、探索範囲データ26とに基づいて特定される。ステップS4の詳細については、後述する。
【0051】
人物検出装置1は、ステップS3で検出された肩の中心に対応する頭頂の位置を検出する(ステップS5)。頭頂の探索対象となる領域(頭頂探索領域)が、ステップS3で検出された肩の中心及び肩幅と、探索範囲データ26とに基づいて特定される。ステップS5の詳細については、後述する。
【0052】
人物検出装置1は、ステップS3で検出された肩の中心に対応する胴の位置及び胴幅を検出する(ステップS6)。胴の探索対象となる領域(胴探索領域)が、ステップS3で検出された肩の中心及び肩幅と、探索範囲データ26とに基づいて特定される。ステップS6の詳細については、後述する。
【0053】
人物検出装置1は、ステップS3で検出された肩の中心に対応する脚を検出する(ステップS7)。脚の探索対象となる領域(脚探索領域)が、ステップS3で検出された肩の中心及び肩幅と、探索範囲データ26とに基づいて特定される。ステップS7の詳細については、後述する。
【0054】
人物検出装置1は、ステップS3〜S7の結果を用いて、枠21a〜21c内の人物の範囲を決定する(ステップS8)。人物検出装置1は、ステップS3〜S7の処理結果に基づいて、人物が枠21a〜21cに含まれるか否かを最終的に判断する。人物が各々の枠に含まれている場合、人物検出装置1は、ステップS3,S6で検出された肩幅及び胴幅に基づいて、人物の横方向のサイズを決定し、ステップS4,S5で検出された足先の位置及び頭頂の位置に基づいて、人物の縦方向のサイズを決定する。ステップS8の詳細については、後述する。
【0055】
図3に示すフローチャートにおいて、ステップS4〜S7の処理の順序は、特に限定されない。ステップS4〜S7の処理は、ステップS3により人物の肩の中心及び肩幅が特定された後に実行されればよい。
【0056】
[3.エッジ抽出処理(ステップS2)]
エッジ抽出部11は、入力画像21に対してバンドパスフィルタをかけることにより、入力画像21から横エッジ及び縦エッジを抽出する。エッジ抽出処理では、以下の式(1)が用いられる。
【0058】
式(1)の上段において、x(n)は、入力画像21の画素値である。y(n)は、横エッジ画像22または縦エッジ画像23の画素値である。h(n)は、バンドパスフィルタを示す。αについては、後述する。横エッジの抽出に用いられるバンドパスフィルタh(n)と、縦エッジの抽出に用いられるバンドパスフィルタh(n)とは、互いに異なる。
【0059】
式(1)の下段において、maxは、入力画像21の画素値の最大値である。αは、y(n)の最大値を255に設定するための正規化係数である。シグマ演算子による演算結果にαを乗じることにより、y(n)の最大値を255に設定することができる。
【0060】
エッジ抽出部11は、入力画像21の垂直方向に並ぶ画素に対して上記式(1)を適用して、横エッジを抽出する。エッジ抽出部11は、入力画像21の水平方向に並ぶ画素に対して上記式(1)を適用して、縦エッジを抽出する。バンドパスフィルタh(n)を用いることにより、画像の本質的な特徴を示す低周波成分と、画像の微小な変化を示す高周波成分とが、入力画像21から取り除かれ、中間の周波数帯域の画像の変化がエッジとして抽出される。バンドパスフィルタh(n)として、奇数タップのフィルタを用いることができる。例えば、タップ数は、3,5,7,9タップのいずれかである。
【0061】
[4.肩検出処理(ステップS3)]
図7は、
図3に示す肩検出処理(ステップS3)のフローチャートである。肩検出処理(ステップS3)は、肩検出部12により実行される。
【0062】
肩検出部12は、対象領域データ25に記録された枠21a〜21cの全てを、人物の肩を検出する範囲(肩検出範囲)として選択済みであるか否かを判断する(ステップS31)。枠21a〜21cの全てが選択されていない場合(ステップS31においてNo)、肩検出部12は、未選択の枠を1つ選択する(ステップS32)。初回の選択時には、枠21aが選択される。
【0063】
肩検出部12は、肩尤度を枠21a内の画素ごとに計算する(ステップS33)。ステップS33の詳細については、後述する。
【0064】
肩検出部12は、枠21a〜21cの全てを選択した場合(ステップS31においてYes)、後処理(ステップS34)を実行する。後処理(ステップS34)において、肩検出部12は、入力画像21の各画素の画素値を肩尤度に置換した肩尤度画像27を生成する(ステップS341)。また、肩検出部12は、生成した肩尤度画像27に対して、2値化処理(ステップS342)、膨張・縮退処理(ステップS343)、ラベリング処理(ステップS344)、肩幅候補選択処理(ステップS345)を実行する。後処理(ステップS34)の後に、肩検出部12は、肩幅決定処理(ステップS35)を実行して、枠21a〜21cの各々の領域において、人物の肩の中心及び肩幅を決定する。ステップS34,S35の詳細については、後述する。
【0065】
[4.1.肩尤度計算処理(ステップS33)]
肩検出部12は、ステップS33において、枠21a内の各画素の肩尤度及び推定肩幅を計算する。肩尤度は、各画素が人物の肩の中心であろう度合いを示す数値であり、推定肩幅は、各画素が肩の中心である場合に推定される人物の肩幅である。画素が肩の中心となる可能性が高くなるにつれて、肩尤度は大きくなる。
図8は、肩尤度の計算方法の概略を説明する図である。なお、
図8に示す枠21a及び人物21mのサイズを、誇張して表示している。
【0066】
図8において、入力画像21の左上頂点を原点、横方向をX軸、縦方向をY軸と仮定する。X軸の正方向は、右方向であり、Y軸の正方向は、下方向である。
【0067】
STX、STYは、枠21aにおいて、最初に肩尤度が計算される画素P1のX座標、Y座標である。EDX、EDYは、枠21aにおいて、最後に肩尤度が計算される画素P4のX座標、Y座標である。win
sは、肩尤度を計算する際に暫定的に設定される肩幅(以下、「窓幅」と呼ぶ。)である。窓幅の最小値は、ws
minであり、窓幅の最大値は、ws
maxである。窓幅の詳細については、後述する。
【0068】
肩検出部12は、画素P1から右方向に並ぶ各画素の肩尤度を、左から順に計算する。右端の画素P2の肩尤度が計算された場合、肩検出部12は、画素P1の下に隣接する画素の肩尤度を計算する。このようにして、枠21aをスキャンすることにより、枠21a内の各画素の肩尤度が計算される。
【0069】
図9は、肩尤度計算処理(ステップS33)のフローチャートである。
図9に示すステップS331〜S337(ステップS335を除く)の処理により、枠21a内の各画素が、肩尤度の計算対象となる基準画素に順次指定される。以下、肩尤度計算処理(ステップS33)を詳しく説明する。
【0070】
肩検出部12は、基準画素のY座標jをSTYに設定する(ステップS331)。肩検出部12は、Y座標jがEDY以下であるか否かを判断する(ステップS332)。Y座標jがEDY以下である場合(ステップS332にいてYes)、基準画素のX座標iが、STXに設定される(ステップS333)。初回の基準画素の設定時には、画素P1が、基準画素に設定される。
【0071】
肩検出部12は、X座標iがEDX以下であるか否かを判断する(ステップS334)。X座標iがEDX以下である場合(ステップS334にいてYes)、肩検出部12は、基準画素の肩尤度及び推定肩幅を計算する(ステップS335)。ステップS335の詳細については、後述する。
【0072】
次に、現在の基準画素の右隣の画素を次の基準画素に設定するために、X座標iがインクリメントされる(ステップS336)。インクリメントされたX座標iがEDX以下である場合(ステップS334においてYes)、肩検出部12は、ステップS335,S336を繰り返す。これにより、枠21a内の横方向に並ぶ画素の肩尤度及び推定肩幅が順次計算される。以下、枠21a内の横方向に並ぶ画素の列を、「画素ライン」と呼ぶ。
【0073】
一方、インクリメントされたX座標iがEDXよりも大きい場合(ステップS334においてNo)、肩検出部12は、次の画素ラインの各画素を基準画素に設定する。具体的には、肩検出部12は、Y座標jをインクリメントし(ステップS337)、ステップS332に戻る。Y座標jがEDY以下である場合(ステップS332においてYes)、肩検出部12は、X座標iをSTXに設定する(ステップS333)。これにより、次の画素ラインの左端の画素が、基準画素に設定される。肩検出部12は、Y座標jがEDYより大きくなるまで(ステップS332においてNo)、ステップS333〜S337を繰り返す。これにより、枠21a内の各画素の肩尤度及び推定肩幅が計算される。
【0074】
ステップS332において、Y座標jがEDYよりも大きい場合(ステップS332においてNo)、肩検出部12は、枠21a内の全ての画素の肩尤度及び推定肩幅が計算されたと判断し、
図9に示すフローチャートを終了する。
【0075】
[4.2.肩尤度及び推定肩幅の計算処理(ステップS335)]
図10は、肩尤度及び推定肩幅の計算手順を説明する図である。
図10を参照しながら、肩尤度及び推定肩幅の計算の概略を説明する。
【0076】
図10に示す各画素は、横エッジ画像22の画素である。基準画素Pcを通る縦軸を中心にして線対称の左画素群LG1及び右画素群RG2を想定する。また、基準画素Pcを含む中心画素群CGを想定する。
【0077】
左画素群LG1及び右画素群RG1の形状は、人間の肩の形状に対応する鉤型である。左画素群LG1は、画素LP1〜LP5を有する。画素LP1〜LP4は、基準画素Pcと同じY座標を有し、左から右へ横方向に連続して並んでいる。画素LP5は、左端の画素LP1の直下に位置する。右画素群RG1は、左画素群LG1の左右反対の形状であり、画素RP1〜RP5を有する。画素RP1〜RP5は、画素LP1〜LP5にそれぞれ対応する。
【0078】
中心画素群CGは、基準画素Pcと、基準画素Pcの左右に隣接する2つの画素とを底辺とした、長方形状の画素の集合である。中心画素群CGの縦方向のサイズは、画素5つ分である。
【0079】
基準画素Pcから左画素群LG1の左端の画素LP1までの距離を、間隔k
sと定義する。間隔k
sは、基準画素Pcから右画素群RG1の右端の画素RP1までの距離と同じである。ただし、基準画素Pcから画素RP1までの距離が、基準画素Pcから画素LP1までの距離と異なることを妨げるものではない。
【0080】
肩検出部12は、基準画素Pcから間隔k
sの位置にある左画素群LG1の各画素を重み付け加算することにより、左演算値を生成する。肩検出部12は、基準画素Pcから間隔k
sの位置にある右画素群RGの各画素を重み付け加算することにより、右演算値を生成する。左演算値及び右演算値を加算した数値が、間隔k
sにおける肩尤度として得られる。
【0081】
肩検出部12は、間隔k
sを、窓幅ws
min/2〜ws
max/2の範囲で変化させることにより、それぞれの間隔k
sにおける肩尤度(個別肩尤度)を計算する。各間隔k
sに対応する個別肩尤度のうち最大値が、基準画素Pcの肩尤度として選択され、最大の個別肩尤度に対応する間隔k
sに基づいて推定肩幅が算出される。
【0082】
図11は、基準画素Pcの肩尤度及び推定肩幅の計算処理(ステップS335)のフローチャートである。以下、
図10及び
図11を参照しながら、ステップS335を実行する肩検出部12の動作を説明する。
【0083】
まず、肩検出部12は、基準画素Pcが肩の中心となり得るか否かを判断する。具体的には、肩検出部12は、中心画素群CGの全画素が予め設定されたしきい値よりも小さいか否かを判断する(ステップS371)。
【0084】
中心画素群CGの全画素の画素値が、予め設定されたしきい値よりも小さい場合(ステップS371においてNo)、肩検出部12は、基準画素Pcが肩の中心とはならないと判断し、基準画素Pcの肩尤度G
s(i,j)及び推定肩幅H
s(i,j)を0に設定する(ステップS384)。
【0085】
ここで、肩尤度G
s(i,j)及び推定肩幅H
s(i,j)が0に設定される理由を説明する。一般的に、人物の首と上半身の衣服との間には、横エッジが形成される。
図10に示す各画素は、横エッジ画像22の画素であるため、基準画素Pcが肩の中心である場合、中心画素群CGの少なくとも1つの画素は、横方向に延びるエッジを含み、一定値以上の画素値を有すると考えられる。この考えに基づいて、中心画素群CGの少なくとも1つの画素が、しきい値以上の画素値を有する場合、基準画素Pcが、肩の中心である可能性があると判断される。一方、中心画素群CGの全画素が、しきい値よりも小さい画素値を有する場合、基準画素Pcは、肩の中心でないと判定され、基準画素Pcの肩尤度及び推定肩幅は、0に設定される。
【0086】
中心画素群CGの少なくとも1つの画素値が、予め設定されたしきい値以上である場合(ステップS371においてYes)、肩検出部12は、基準画素Pcが肩の中心となりうると判断する。そして、肩検出部12は、ステップS372〜S383を実行して、基準画素Pcの肩尤度及び推定肩幅を計算する。
【0087】
肩検出部12は、間隔k
s、暫定肩尤度D
s、暫定肩幅F
sを初期化する(ステップS372)。暫定肩尤度D
sは、現時点までに計算された個別肩尤度の最大値である。間隔k
sの初期値は、最小窓幅(ws
min)の半分である。暫定肩幅F
sは、暫定肩尤度D
sに対応する間隔k
sを示す。ステップS372において、暫定肩尤度D
sには所定の初期値が設定される。暫定肩幅F
sの初期値は、0である。
【0088】
肩検出部12は、間隔k
sが最大窓幅(ws
max)の半分よりも小さいか否かを判断する(ステップS373)。間隔k
sが最大窓幅(ws
max)の半分よりも小さい場合(ステップS373においてYes)、肩検出部12は、ステップS374,S375を実行して、現在の間隔k
sに対応する個別肩尤度を計算する。
【0089】
ステップS374において、肩検出部12は、左画素群LG1の各画素を重み付け加算した左演算値SH_Lと、右画素群RGの各画素値を重み付け加算した右演算値SH_Rとを計算する。左演算値SH_L、右演算値SH_Rは、下記式(2)、(3)によりそれぞれ計算される。
【0092】
式(2),(3)において、Y
Hは、横エッジ画像22の画素値である。aは、画素LP2,LP3,LP5,RP2,RP3,RP5の重み付け係数であり、bは、画素LP4,RP4の重み付け係数である。画素LP1,RP1の重み付け係数は、1である。
【0093】
肩検出部12は、右演算値SH_Rを左演算値SH_Lに加算して、現在の間隔k
sに対応する個別肩尤度SH_Cを計算する(ステップS375)。
【0094】
肩検出部12は、個別肩尤度SH_Cが暫定肩尤度D
sよりも大きいか否かを判断する(ステップS376)。個別肩尤度SH_Cが暫定肩尤度D
s以下である場合(ステップS376においてNo)、肩検出部12は、現在の左画素群LG1及び右画素群RG1の位置が人物21mの肩に一致していないと判断し、S379に進む。
【0095】
一方、個別肩尤度SH_Cが暫定肩尤度D
sよりも大きい場合(ステップS376においてYes)、肩検出部12は、暫定肩尤度D
sを更新する条件が満たされているか否かを判断する(ステップS377)。具体的には、肩検出部12は、左演算値SH_Lと右演算値SH_Rとの間に極端な差が存在するか否かを判断する。下記式(4)及び式(5)のいずれかが満たされている場合、肩検出部12は、極端な差がないため、暫定肩尤度D
sを更新できると判断する。
【0098】
式(4),(5)において、tは、2以上の整数である。t=2の場合、式(4)は、左演算値SH_Lが、右演算値SH_Rの半分より大きく、かつ、右演算値SH_Rよりも小さい場合、更新条件が満たされることを示している。式(5)は、右演算値SH_Rが、左演算値SH_Lの半分より大きく、かつ、左演算値SH_Lよりも小さい場合、更新条件が満たされることを示している。肩検出部12は、式(4),(5)を用いることなく、ステップS377を実行してもよい。つまり、肩検出部12は、左演算値SH_Lと右演算値SH_Rとの比率が所定の範囲内であるか否かに基づいて、左演算値SH_Lと右演算値SH_Rとの間に極端な差があるか否かを判断すればよい。
【0099】
式(4),(5)のいずれかが満たされている場合、肩検出部12は、左画素群LG1及び右画素群RG1の両者が、人物の両肩の形状に対応するエッジを有しているため、暫定肩尤度D
s及び暫定肩幅F
sの更新条件が満たされていると判断する(ステップS377においてNo)。肩検出部12は、ステップS378に進む。
【0100】
一方、式(4),(5)の両者とも満たされていない場合、肩検出部12は、左画素群LG1及び右画素群RG1の少なくとも一方が、人物の肩に対応するエッジを有していないため、更新条件が満たされていないと判断する(ステップS377においてYes)。この場合、肩検出部12は、次の間隔k
sの個別肩尤度SH_Cを計算するために、ステップS379に進む。
【0101】
更新条件が満たされている場合(ステップS377においてNo)、肩検出部12は、暫定肩尤度D
sをステップS375で計算した個別肩尤度SH_Cに更新し、暫定肩幅F
sを現在の間隔k
sに更新する(ステップS378)。そして、肩検出部12は、間隔k
sをインクリメントする(ステップS379)。
【0102】
肩検出部12は、間隔k
sが最大窓幅ws
maxの半分を超えるまで(ステップS373においてNo)、ステップS374〜S379を繰り返す。つまり、肩検出部12は、左画素群LG1と右画素群RG1との距離が異なるように、左画素群LG1と右画素群RG1との配置パターンを設定し、各配置パターンの左画素群LG1及び右画素群RG1に含まれる画素の画素値に基づいて、個別肩尤度を計算する。そして、ws
min/2〜ws
max/2の範囲において、最大の個別肩尤度SH_Cと、最大の個別肩尤度SH_Cに対応する間隔k
sとが特定される。
【0103】
間隔k
sが最大窓幅ws
maxの半分よりも大きい場合(ステップS373においてNo)、肩検出部12は、個別肩尤度SH_Cの算出が終了したと判断し、暫定肩幅F
sに基づいて、基準画素Pcの推定肩幅H
sを算出する(ステップS380)。基準画素Pcにおける推定肩幅H
s(i,j)は、下記式(6)により求められる。推定肩幅H
s(i,j)は、暫定肩幅F
sを2倍して1を加算した値である。つまり、推定肩幅は、左画素群LG1と右画素群RG1との距離に基づいて決定される。
【0105】
次に、肩検出部12は、暫定肩幅F
sが0であるか否かを判断する(ステップS381)。暫定肩幅F
sが0よりも大きい場合(ステップS381においてNo)、肩検出部12は、暫定肩尤度D
sを基準画素Pcの肩尤度G
s(i,j)として設定する(ステップS382)。暫定肩幅F
sが0である場合(ステップS381においてYes)、暫定肩尤度D
sの初期値を超える個別肩尤度が算出されなかったため、有意な肩幅を得られなかったことを示す。この場合、肩検出部12は、基準画素Pcが肩の中心でないと判断し、基準画素Pcの肩尤度G
s(i,j)を0に設定する(ステップS383)。
【0106】
以上、基準画素Pcの肩尤度及び推定肩幅の計算処理を説明した。枠21a内の各画素の肩尤度及び推定肩幅が、上述の処理に基づいて実行される。
【0107】
[4.3.後処理(ステップS34)]
図7に示すように、肩検出部12は、
図7に示すステップS31〜S33を繰り返し実行することにより、枠21a〜21c内の横エッジ画像22の各画素の肩尤度及び推定肩幅を計算する。全ての枠が選択された場合(ステップS31においてYes)、肩検出部12は、枠21a〜21cの肩尤度を用いて、肩尤度画像27を生成する(ステップS341)。
【0108】
図12は、
図5に示す横エッジ画像22に基づいて生成された肩尤度画像27を示す図である。
図12に示す枠27a〜27cは、
図4に示す枠21a〜21cにそれぞれ対応する。肩検出部12は、枠27a〜27c内の各画素の画素値をステップS335で得られた肩尤度に設定する。枠27a〜27cの外側に位置する画素の画素値は、0に設定される。これにより、肩尤度画像27が生成される。
【0109】
次に、肩検出部12は、肩尤度画像27を2値化し(ステップS342)、2値化された肩尤度画像27に対して縮退・膨張処理を実行する(ステップS343)。これにより、2値化された肩尤度画像27に含まれる細かいパターンが除去される。肩検出部12は、細かいパターンが除去された肩尤度画像27に対してラベリング処理を実行する(ステップS344)。これにより、0よりも大きい肩尤度が集まっている領域に対してユニークな番号が割り当てられる。
【0110】
肩検出部12は、ラベリングされた領域のうち一定値以下の面積を有する領域を削除し、一定値よりも大きい面積の領域のみを残す肩幅候補選択処理を実行する(ステップS345)。肩検出部12は、ステップS345により、領域R1〜R5(
図12参照)を肩尤度画像27から選択する。
【0111】
[4.4.肩幅決定処理(ステップS35)]
肩検出部12は、各領域R1〜R5ごとに、肩幅と肩の中心を決定する(ステップS35)。
図13は、肩幅決定処理(ステップS35)のフローチャートである。
図13に示す処理は、領域R1〜R5の各々に対して実行される。以下、領域R1における肩の中心及び肩幅を決定する場合を例に説明する。
【0112】
肩検出部12は、領域R1内の画素のうち、最大の肩尤度を有する画素を特定する(ステップS351)。特定された画素の位置が、領域R1における肩の中心として決定される(ステップS352)。肩の中心に決定された画素の推定肩幅H
s(i,j)が領域R1における人物の肩幅として決定される(ステップS353)。対象領域の肩の中心及び肩幅が、肩候補データ24に記録される。
【0113】
なお、左画素群LG1及び右画素群RG1の形状が鉤型である場合を例に説明したが、左画素群LG1及び右画素群RG1は、他の形状であってもよい。例えば、右上方向に延びる直線を形成する複数の画素を、左画素群LG1とし、左上方向に延びる直線を形成する複数の画素を、右画素群RG1としてもよい。あるいは、左画素群LG1及び右画素群RG1は、曲線を形成してもよい。つまり、左画素群LG1及び右画素群RG1は、人物の肩の形状に合う所定形状に設定されればよい。
【0114】
また、画素LP1〜LP4,RP1〜RP2のY座標が、基準画素PcのY座標に一致する例を説明したが、これに限定されない。左画素群LG1及び右画素群RG1は、基準画素の左右に位置するように配置されればよい。
【0115】
[5.足先検出処理(ステップS4)]
図14は、足先検出処理(ステップS4)を示すフローチャートである。足先検出部13は、肩検出処理(ステップS3)により肩が存在すると判定された領域R1〜R5(
図12参照)の各々に対して足先検出処理(ステップS4)を実行する。これにより、領域R1〜R5の肩の中心に対応する足先の位置が特定される。足先検出処理では、横エッジ画像22が用いられる。以下、領域R1に対応する足先の位置を特定する場合を例に説明する。
【0116】
図14に示すように、足先検出部13は、探索範囲データ26と、肩候補データ24に記録された領域R1の肩の中心座標及び肩幅に基づいて、領域R1に対応する足先探索領域を決定する(ステップS41)。
【0117】
足先検出部13は、足先探索領域内の横エッジ画像22の画素値を、横方向に積算することにより、足先値を計算する(ステップS42)。つまり、足先値は、横方向に配列された画素ラインごとに生成される。足先値は、足先探索領域における足先の位置を特定するために、ステップS43で使用される。
【0118】
足先検出部13は、ステップS42で求められた足先値に基づいて、領域R1に対応する足先位置を特定する(ステップS43)。具体的には、足先検出部13は、ステップS42により積算された足先値のうち、所定の条件を満たす足先値を特定する。所定の条件を満たす足先値のうち、領域R1の肩の中心に一番近い足先値を有する画素ラインのY座標が、領域R1に対応する足先の位置として特定される。
【0119】
以下、足先検出処理の各ステップについて詳しく説明する。
【0120】
[5.1.足先探索領域の決定(ステップS41)]
図15は、領域R1における肩の中心PSHと、足先探索領域TE1との位置関係を示す図である。
図15に示すように、足先探索領域TE1は、長方形の領域として定義される。肩の中心PSHの座標を、(X
SH,Y
SH)と仮定した場合、足先探索領域TE1の左上頂点の画素PTE1のX座標X
PTE1と、Y座標Y
PTE1とは、下記式(7)で表され、右下頂点の画素PTE2のX座標X
PTE2と、Y座標Y
PTE2とは、下記式(8)で表される。
【0123】
上記式(7),(8)において、SH_Wは、領域R1の肩幅であり、P,Q,nは、任意の定数である。好ましくは、Pは、2であり、Qは、3である。nは、2以上5以下の整数である。
【0124】
上記式(7),(8)は、探索範囲データ26に記録されている。足先検出部13は、上記式(7),(8)を用いて足先探索領域TE1を決定し、後述する足先値計算処理(ステップS42)を実行する。
【0125】
[5.2.足先値計算処理(ステップS42)]
図16は、足先探索領域TE1における足先値の計算方法を説明する図である。
図16において、足先探索領域TE1内の画素の表示を一部省略している。
【0126】
図16に示すように、足先検出部13は、足先探索領域TE1内の横エッジ画像22の各画素の画素値を画素ラインごとに積算することにより、足先値を計算する。画素ラインとは、足先探索領域内の横方向に1列に並ぶ画素の配列である。例えば、足先検出部13は、画素ライン71に含まれる各画素の画素値を積算することにより、画素ライン71の足先値を計算する。
【0127】
図17は、足先値計算処理(ステップS42)のフローチャートである。足先検出部13は、足先探索領域TE1の上から順に、各画素ラインの足先値を計算する。以下、
図16及び
図17を参照しながら、足先値の計算手順について詳しく説明する。
【0128】
足先検出部13は、画素ライン71の足先値を計算するために、足先値の計算対象の画素ラインのY座標として、Y
PTE1を設定する(ステップS421)。足先検出部13は、計算対象の画素ラインが足先探索領域TE1内であるか否かを判断するために、設定された画素ラインのY座標がY
PTE2以下であるか否かを判断する(ステップS422)。
【0129】
計算対象の画素ラインのY座標がY
PTE2以下である場合(ステップS422においてYes)、足先検出部13は、積算対象の画素を決定するために、積算対象の画素のX座標をX
PTE1に設定する(ステップS423)。ステップS423が最初に実行された場合、積算対象の画素は、画素PTE1に設定される。
【0130】
足先検出部13は、画素ライン71の足先値を0に初期化し(ステップS424)、積算対象の画素のX座標が足先探索領域TE1内であるか否かを判断するために、設定されたX座標がX
PTE2以下であるか否かを判断する(ステップS425)。
【0131】
積算対象の画素のX座標がX
PTE2以下である場合(ステップS425においてYes)、足先検出部13は、積算対象の横エッジ画像22の画素の画素値を足先値に加算する(ステップS426)。足先検出部13は、積算対象の画素のX座標をインクリメントする(ステップS427)。これにより、現在の積算対象の画素の右に隣接する画素が、新たな積算対象に設定される。
【0132】
足先検出部13は、積算対象の画素のX座標がX
PTE2よりも大きくなるまで(ステップS425においてNo)、ステップS426,S427を繰り返す。これにより、画素ライン71の足先値が計算される。
【0133】
積算対象の画素のX座標がX
PTE2よりも大きい場合(ステップS425においてNo)、足先検出部13は、計算対象の画素ラインを変更するために、計算対象の画素ラインのY座標をインクリメントする(ステップS428)。これにより、現在の計算対象の画素ラインの下に隣接する画素ラインが、新たな計算対象に設定される。インクリメントされたY座標がY
PTE2以下である場合(ステップS422においてYes)、次の画素ラインの足先値の計算を開始するために、積算対象の画素のX座標がX
PTE1に設定される(ステップS423)。
【0134】
以下、計算対象の画素ラインのY座標がY
PTE2よりも大きくなるまで(ステップS422においてNo)、ステップS422〜S428が繰り返される。この結果、足先探索領域TE1内の各画素ラインの足先値が計算される。
【0135】
[5.3.足先位置特定処理(ステップS43)]
足先検出部13は、ステップS42で計算された各画素ラインの足先値を用いて、領域R1の肩の中心PSHに対応する足先の位置を特定する。まず、
図16を参照しながら、足先の位置の決定手順の概略を説明する。
【0136】
足先検出部13が、判定対象として画素ライン73を選択したと仮定する。足先検出部13は、画素ライン73の上下に隣接する画素ライン72,74のうち、足先値の低い画素ラインを決定する。ここでは、画素ライン72が決定されたと仮定する。
【0137】
足先検出部13は、判定対象の画素ライン73の足先値が画素ライン72の足先値のs倍よりも大きく、かつ、判定対象の画素ライン73の足先値が画素ライン71〜75の平均値のs倍よりも大きい場合、画素ライン73を、肩の中心PSHの足先の候補として決定する。
【0138】
足先検出部13は、足先探索領域TE1内の各画素ラインが上記の条件を満たすか否かを判断することにより、足先の候補となる画素ラインを決定する。候補に決定された画素ラインのうち、肩の中心PSHに最も近い画素ラインのY座標が、肩の中心PSHに対応する足先の位置として特定される。
【0139】
図18は、足先位置特定処理(ステップS43)のフローチャートである。以下、
図16及び
図18を参照しながら、足先位置特定処理(ステップS43)を実行する足先検出部13の動作を説明する。
【0140】
足先検出部13は、足先検出フラグFrsを0に初期化する(ステップS431)。足先検出フラグFrsは、足先位置が足先探索領域TE1から特定されたか否かを示し、後述するサイズ決定処理(ステップS8)で用いられる。足先検出フラグFrsが0である場合、足先の位置が特定されなかったことを示し、足先検出フラグFrsが1以上である場合、足先の位置が特定されたことを示す。
【0141】
足先検出部13は、足先探索領域TE1内の各画素ラインの足先値の平均を算出する(ステップS432)。
【0142】
足先検出部13は、足先探索領域TE1の下側から順に、画素ラインが足先の条件を満たすか否かを判定する。足先検出部13は、足先探索領域TE1の画素ラインの中から、判定対象の画素ラインを選択する(ステップS433)。初回の選択時には、足先探索領域TE1において下から2番目に位置する画素ラインが選択される。一番下の画素ライン75には、比較の対象となる下側の画素ラインが存在しないため、画素ライン75は、判定対象として選択されない。同様の理由で、足先探索領域TE1の一番上に位置する画素ラインは、判定対象として選択されない。
【0143】
足先検出部13は、選択された画素ラインが比較対象の画素ラインを有するか否かを判断するために、選択された画素ラインのY座標がY
PTE1より大きいか否かを判断する(ステップS434)。
【0144】
選択された画素ラインのY座標がY
PTE1より大きい場合(ステップS434においてYes)、足先検出部13は、判定対象の画素ラインの上下に隣接する画素ラインが有する足先値の内、小さい方の足先値を特定する(ステップS435)。判定対象の画素ラインの足先値が、特定された足先値のs倍より大きい場合(ステップS436においてYes)、足先検出部13は、ステップS437に進む。一方、判定対象の画素ラインの足先値が、特定された足先値のs倍以下である場合(ステップS436においてNo)、足先検出部13は、判定対象の画素ラインが足先の条件を満たさないと判断し、次の画素ラインを選択するためにステップS440に進む。
【0145】
足先検出部13は、ステップS437において、判定対象の画素ラインの足先値が足先値の平均のs倍よりも大きいか否かを判断する。判定対象の画素ラインの足先値が足先値の平均のs倍以下である場合(ステップS437においてNo)、足先検出部13は、判定対象の画素ラインが足先の条件を満たさないと判断し、次の画素ラインを選択するためにステップS440に進む。
【0146】
一方、判定対象の画素ラインの足先値が足先値の平均のs倍よりも大きい場合(ステップS437においてYes)、足先検出部13は、判定対象の画素ラインが足先の条件を満たすと判断し、足先検出フラグFrsをインクリメントする(ステップS438)。足先検出部13は、判定対象の画素ラインのY座標を足先位置TEyとして登録する(ステップS439)。
【0147】
足先検出部13は、次の画素ラインを判定対象に選択するために、判定対象の画素ラインのY座標をデクリメントする(ステップS440)。デクリメントされたY座標に基づいて、判定対象の画素ラインが新たに選択される(ステップS433)。Y座標がデクリメントされる理由は、上述のように、画素ラインが足先の条件を満たすか否かを、足先探索領域TE1の下側から順に判断するためである。
【0148】
以下、足先検出部13は、判定対象の画素ラインのY座標がY
PTE1以下となるまで(ステップS434においてNo)、ステップS435〜S440を繰り返す。これにより、足先位置TEyは、足先の条件を満たす画素ラインが特定される度に更新される(ステップS439)。この結果、足先検出部13は、足先の条件を満たす画素ラインのうち、肩の中心PSHに最も近い画素ラインを足先位置として特定することができる。
【0149】
[6.頭頂検出処理(ステップS5)]
[6.1.頭頂検出処理(ステップS5)の概略]
図19は、頭頂検出処理(ステップS5)を示すフローチャートである。頭頂検出部14は、肩検出処理(ステップS3)により肩が存在すると判定された領域R1〜R5(
図12参照)の各々に対して頭頂検出処理(ステップS5)を実行する。これにより、領域R1〜R5の肩の中心に対応する頭頂の位置が特定される。頭頂検出処理では、横エッジ画像22が用いられる。以下、領域R1に対応する頭頂の位置を特定する場合を例に説明する。
【0150】
頭頂検出処理(ステップS5)は、頭頂の位置を探索する頭頂探索領域の決定方法などを除いて、上述の足先検出処理(ステップS4)と同様である。従って、頭頂検出処理(ステップS5)の説明において、足先検出処理(ステップS4)と共通する説明を一部省略する。
【0151】
図19に示すように、足先検出部13は、領域R1の肩の中心PSHに基づいて、領域R1に対応する頭頂探索領域を決定する(ステップS51)。
【0152】
図20は、肩の中心PSHと、頭頂探索領域HT1との位置関係を示す図である。
図20に示すように、頭頂探索領域HT1は、長方形の領域として定義される。頭頂探索領域HT1の左上頂点の画素PHT1のX座標X
PHT1と、Y座標Y
PHT1とは、下記式(8)で表され、右下頂点の画素PHT2のX座標X
PHT2と、Y座標Y
PHT2とは、下記式(9)で表される。
【0155】
上記式(9),(10)において、n,mは、任意の定数である。定数nは、式(7),(8)で用いられる定数nと共通である。mは、3以上6以下の整数である。式(9),(10)は、探索範囲データ26に記録されている。頭頂検出部14は、上記式(9),(10)を用いて頭頂探索領域HT1を決定し、後述する頭頂値計算処理(ステップS52)を実行する。
【0156】
頭頂検出部14は、頭頂探索領域HT1内の横エッジ画像22の画素値を、横方向に積算することにより、頭頂値を計算する(ステップS52)。頭頂値は、頭頂探索領域HT1における頭頂の位置を特定するために、ステップS53で使用される。
【0157】
頭頂検出部14は、ステップS52で求められた頭頂値に基づいて、領域R1に対応する頭頂位置を特定する(ステップS53)。頭頂検出部14は、ステップS52により積算された各画素ラインの頭頂値のうち、足先検出処理(ステップS4)で用いた条件と同じ条件を有する画素ラインの頭頂値を特定する。特定された頭頂値を有する画素ラインのうち、領域R1の肩の中心PSHに一番近い画素ラインのY座標が、領域R1に対応する頭頂の位置として特定される。
【0158】
[6.2.頭頂値の計算(ステップS52)]
図21は、頭頂値計算処理(ステップS52)のフローチャートである。頭頂検出部14により検出される頭頂値の計算方法は、計算対象の領域が頭頂探索領域HT1となる点を除き、上述した足先値の計算方法と同様である。つまり、
図21のステップS521〜S528は、
図17のステップS421〜S428に対応する。
【0159】
頭頂検出部14は、頭頂値の計算対象の画素ラインのY座標として、Y
PHT1を設定する(ステップS521)。頭頂検出部14は、設定された画素ラインのY座標がY
PHT2以下であるか否かを判断する(ステップS522)。
【0160】
計算対象の画素ラインのY座標がY
PHT2以下である場合(ステップS522においてYes)、頭頂検出部14は、積算対象の画素のX座標をX
PHT1に決定する(ステップS523)。積算対象の画素のY座標は、ステップS521で設定されたY
PHT1である。積算対象に最初に設定される画素は、画素PHT1である。
【0161】
頭頂検出部14は、計算対象の画素ラインの頭頂値を初期化する(ステップS524)。積算対象の画素のX座標がX
PHT2以下である場合(ステップS525においてYes)、頭頂検出部14は、積算対象の横エッジ画像22の画素の画素値を頭頂値に加算する(ステップS526)。頭頂検出部14は、は、積算対象の画素のX座標をインクリメントする(ステップS527)。これにより、現在の積算対象の画素の右に隣接する画素が、新たな積算対象に設定される。
【0162】
頭頂検出部14は、積算対象の画素のX座標がX
PHT2よりも大きくなるまで(ステップS525においてNo)、ステップS526,S527を繰り返す。積算対象の画素のX座標がX
PHT2よりも大きい場合(ステップS525においてNo)、頭頂検出部14は、計算対象の画素ラインのY座標をインクリメントする(ステップS528)。これにより、現在の計算対象の画素ラインの下に隣接する画素ラインが、新たな計算対象に設定される。次の画素ラインの頭頂値の計算を開始するために、積算対象の画素のX座標がX
PHT1に設定される(ステップS523)。
【0163】
以下、計算対象の画素ラインのY座標がY
PHT2よりも大きくなるまで(ステップS522においてNo)、ステップS522〜S528が繰り返される。この結果、頭頂探索領域HT1内の各画素ラインの頭頂値が計算される。
【0164】
[6.3.頭頂位置検出処理(ステップS53)]
頭頂検出部14は、ステップS52で計算された各画素ラインの頭頂値を用いて、領域R1の肩の中心PSHに対応する頭頂の位置を決定する。頭頂の位置の決定方法は、足先の位置の決定方法と同様である。
【0165】
図22は、頭頂位置検出処理(ステップS53)のフローチャートである。
図22に示すステップS531〜540は、
図18に示すステップS431〜S440に対応する。ただし、頭頂検出部14は、頭頂探索領域HT1の上側の画素ラインから順に、画素ラインが頭頂の条件を満たすか否かを判定する。
【0166】
頭頂検出部14は、頭頂検出フラグHrsを0に初期化する(ステップS531)。頭頂検出フラグHrsは、頭頂位置が頭頂探索領域HT1から特定されたか否かを示し、後述するサイズ決定処理(ステップS8)で用いられる。頭頂検出フラグHrsが0である場合、頭頂の位置が特定されなかったことを示し、頭頂検出フラグHrsが1以上である場合、頭頂の位置が特定されたことを示す。
【0167】
頭頂検出部14は、頭頂探索領域HT1内の各画素ラインの頭頂値の平均を算出する(ステップS532)。頭頂検出部14は、頭頂探索領域HT1の画素ラインの中から、判定対象の画素ラインを選択する(ステップS533)。初回の選択時には、頭頂探索領域HT1の上から2番目に位置する画素ラインが選択される。
【0168】
頭頂検出部14は、判定対象の画素ラインのY座標がY
PHT2より小さいか否かを判断する(ステップS534)。判定対象のY座標がY
PHT2より小さい場合(ステップS534においてYes)、頭頂検出部14は、判定対象の画素ラインの上下に隣接する画素ラインが有する頭頂値のうち、小さいほうの頭頂値を特定する(ステップS535)。判定対象の画素ラインの頭頂値が特定された頭頂値のs倍より大きい場合(ステップS536においてYes)、頭頂検出部14は、ステップS537に進む。一方、判定対象の画素ラインの頭頂値が特定された頭頂値のs倍以下である場合(ステップS536においてNo)、頭頂検出部14は、判定対象の画素ラインが頭頂の条件を満たさないと判断し、次の画素ラインを選択するためにステップS540に進む。
【0169】
頭頂検出部14は、判定対象の画素ラインの頭頂値が頭頂値の平均のs倍以下である場合(ステップS537においてNo)、頭頂検出部14は、次の画素ラインを選択するためにステップS540に進む。一方、判定対象の画素ラインの頭頂値が頭頂値の平均のs倍よりも大きい場合(ステップS537においてYes)、頭頂検出部14は、判定対象の画素ラインが頭頂の条件を満たすと判断し、頭頂検出フラグHrsをインクリメントする(ステップS538)。頭頂検出部14は、判定対象の画素ラインのY座標を頭頂位置HTyとして登録する(ステップS539)。
【0170】
頭頂検出部14は、次の画素ラインを判定対象に選択するために、判定対象の画素ラインのY座標をインクリメントする(ステップS540)。インクリメントされたY座標に基づいて、判定対象の画素ラインが新たに選択される(ステップS533)。
【0171】
以下、頭頂検出部14は、判定対象の画素ラインのY座標がY
PHT2以上となるまで(ステップS534においてNo)、ステップS535〜S540を繰り返す。これにより、頭頂位置HTyは、頭頂の条件を満たす画素ラインが特定される度に更新される(ステップS539)。この結果、頭頂検出部14は、頭頂の条件を満たす画素ラインのうち、肩の中心PSHに最も近い画素ラインを頭頂位置として特定することができる。
【0172】
[7.胴検出処理(ステップS6)]
図23は、
図3に示す胴検出処理(ステップS6)のフローチャートである。胴検出処理(ステップS6)は、胴検出部15により実行される。胴検出部15は、肩が存在すると判定された領域R1〜R5(
図12参照)の各々に対して、
図23に示す処理を実行する。これにより、領域R1〜R5の肩の中心に対応する胴の中心及び胴幅が特定される。 胴検出処理(ステップS6)では、縦エッジ画像23が用いられる。以下、領域R1に対応する胴の中心及び胴幅を検出する場合を例に説明する。
【0173】
図23に示すように、胴検出部15は、探索範囲データ26と、肩候補データ24に記録された領域R1の肩の中心、肩幅とに基づいて、領域R1に対応する胴探索領域を決定する(ステップS61)。
【0174】
胴検出部15は、胴探索領域内の各画素の胴尤度を計算する(ステップS62)。胴尤度とは、各画素が胴の中心であろう度合いを示す。胴検出部15は、各画素の胴尤度を縦方向(Y軸方向)に積算することにより、胴積算値を計算する(ステップS63)。以下、胴探索領域と、後述する脚探索領域において縦方向に並ぶ画素の列を「カラム」と呼ぶ。
【0175】
胴検出部15は、各カラムの胴積算値に基づいて、胴探索領域内における胴の有無を決定する(ステップS64)。胴検出部15は、各カラムの胴積算値に基づいて、領域R1の肩に対応する胴の中心及び胴幅を決定する(ステップS65)。なお、ステップS64において、胴が存在しないと判断された場合、ステップS65を省略してもよい。
【0176】
[7.1.胴探索領域決定(ステップS61)]
図24は、肩の中心PSHと、胴探索領域BD1との位置関係を示す図である。
図24に示すように、胴探索領域BD1は、長方形の領域として定義される。胴探索領域BD1の左上頂点の画素PBD1のX座標X
PBD1と、Y座標Y
PBD1とは、下記式(11)で表され、右下頂点の画素PBD2のX座標X
PBD2と、Y座標Y
PBD2とは、下記式(12)で表される。窓幅win
bについては、後述する。
【0179】
上記式(11),(12)において、定数nは、式(7),(8)で用いられる定数nと共通である。定数Rは、好ましくは、2である。胴検出部15は、探索範囲データ26に記録された上記式(11),(12)を用いて、胴探索領域BD1を決定する。
【0180】
[7.2.胴尤度計算処理(ステップS62)]
胴検出部15は、胴探索領域BD1内の各画素の胴尤度を計算する(ステップS62)。胴尤度の計算手順は、肩尤度の計算手順(
図11参照)と基本的に同じである。ただし、胴尤度の計算に用いられる左画素群及び右画素群は、肩尤度の計算に用いられる左画素群LG1及び右画素群RG1と形状が異なる。また、中心画素群CGは、胴尤度の計算に用いられない。
【0181】
図25は、各画素の胴尤度及び推定胴幅の計算手順を説明する図である。
図25に示す各画素は、縦エッジ画像23の画素である。基準画素Pbは、胴尤度の計算対象である。基準画素Pbの左右に位置する左画素群LG2及び右画素群RG2を想定する。左画素群LG2及び右画素群RG2は、Y軸方向に連続して並ぶ3つの画素である。左画素群LG2は、上から順に画素LP6〜LP8を有する。右画素群RG2は、上から順に画素RP6〜RP8を有する。画素LP6,RP6は、基準画素Pbと同じY座標を有する。
【0182】
胴検出部15は、基準画素Pbから間隔k
bの位置にある左画素群LG2の各画素を重み付け加算することにより、左演算値を生成する。胴検出部15は、基準画素Pbから間隔k
bの位置にある右画素群RG2の各画素を重み付け加算することにより、右演算値を生成する。左演算値及び右演算値を加算した数値が、間隔k
bにおける胴尤度として得られる。
【0183】
胴検出部15は、間隔k
bを、最小窓幅wb
minの半分〜最大窓幅wb
maxの範囲で変化させることにより、それぞれの間隔k
bにおける胴尤度(個別胴尤度)を計算する。最小窓幅wb
min及び最大窓幅wb
maxは、左画素群LG2から右画素群RGまでの距離の最小値及び最大値であり、それぞれ式(13)、(14)により表される。
【0186】
式(13),(式14)において、定数fは、3以上6以下の整数である。
【0187】
複数の個別胴尤度のうち最大値が、基準画素Pbの胴尤度として選択され、最大の個別胴尤度に対応する間隔k
bに基づいて推定胴幅が決定される。
【0188】
図26は、基準画素Pbの胴尤度及び推定胴幅の計算処理(ステップS62)のフローチャートである。
図26に示す処理は、胴探索領域BD1内の画素ごとに実行される。
図26に示すステップS661〜S672は、
図11に示すステップS372〜S383に対応する。以下、
図11に示す処理と同様の処理については、説明を一部省略する。
【0189】
胴探索領域BD1内の各画素は、
図9に示す処理と同様の手順で計算対象に決定される。すなわち、胴探索領域BD1内の画素は、胴探索領域BD1の左上頂点の画素PBD1から右上頂点の画素PBD2まで、左から右に順次スキャンされる。
【0190】
図26に示すように、胴検出部15は、間隔k
b、暫定胴尤度D
b、暫定胴幅F
bを初期化する(ステップS661)。暫定胴尤度D
bは、現時点までに計算された個別胴尤度の最大値であり、所定の初期値が設定される。間隔k
bの初期値は、最小窓幅(wb
min)の半分である。暫定胴幅F
bは、0に設定される。
【0191】
間隔k
bが最大窓幅(wb
max)の半分よりも小さい場合(ステップS662においてYes)、胴検出部15は、左画素群LG2の各画素を重み付け加算した左演算値BD_Lと、右画素群RG2の各画素値を重み付け加算した右演算値BD_Rとを計算する(ステップS663)。左演算値BD_L、右演算値BD_Rの計算には、下記式(15)、(16)が用いられる。
【0194】
式(15),(16)において、Y
vは、縦エッジ画像23の各画素の画素値を示す。定数cは、画素LP7,RP7の重み付け係数であり、定数dは、画素LP8,RP8の重み付け係数である。画素LP6,RP6の重み付け係数は、1である。胴検出部15は、右演算値BD_Rを左演算値BD_Lに加算して、現在の間隔k
bに対応する個別胴尤度BD_Cを計算する(ステップS664)。
【0195】
個別胴尤度BD_Cが暫定胴尤度D
bよりも大きい場合(ステップS665においてYes)、胴検出部15は、暫定胴尤度D
bの更新条件が満たされているか否かを判断する(ステップS666)。具体的には、胴検出部15は、上記式(4),(5)の左演算値SH_L及び右演算値SH_Rを、左演算値BD_L及び右演算値BD_Rに置き換えた式に基づいて、左演算値BD_Lと右演算値BD_Rとの間に極端な差が存在するか否かを判断する。胴検出部15は、極端な差がないと判断した場合(ステップS666においてNo)、暫定胴尤度D
bを個別胴尤度BD_Cに更新し、暫定胴幅F
bを現在の間隔k
bに更新する(ステップS667)。そして、胴検出部15は、間隔k
bをインクリメントする(ステップS668)。
【0196】
胴検出部15は、間隔k
bがwb
max/2よりも大きくなるまで(ステップS662においてNo)、ステップS663〜S668を繰り返す。これにより、wb
min/2〜wb
max/2の範囲において、最大の個別胴尤度BD_Cと、最大の個別胴尤度BD_Cに対応する間隔k
bとが特定される。
【0197】
間隔k
bがwb
max/2以上である場合(ステップS662においてNo)、胴検出部15は、暫定胴幅F
bに基づいて、基準画素Pbの推定胴幅H
b(i,j)を算出する(ステップS669)。推定胴幅H
b(i,j)は、上記式(6)において、暫定肩幅F
sを暫定胴幅F
bに置換した式から求められる。
【0198】
暫定胴幅F
bが0よりも大きい場合(ステップS670においてNo)、胴検出部15は、暫定胴尤度D
bを基準画素Pbの胴尤度G
b(i,j)として設定する(ステップS671)。暫定胴幅F
bが0である場合(ステップS670においてYes)、胴尤度G
b(i,j)は、0に設定される(ステップS672)。
【0199】
[7.3.胴積算値計算処理(ステップS63)]
次に、胴検出部15は、ステップS63において、胴探索領域BD1内の各画素の胴尤度をカラムごとに積算する。
図27は、胴積算計算処理(ステップS63)のフローチャートである。
【0200】
図27を参照しながら、胴積算値計算処理(ステップS63)を説明する。胴検出部15は、胴探索領域BD1内の各画素の胴尤度差分値を計算する(ステップS631)。胴検出部15は、各画素の胴尤度差分値を用いて、胴尤度凸判定処理(ステップS632)を実行する。ステップS632により、胴探索領域BD1内において、左右の胴尤度よりも大きい胴尤度を有する画素が特定される。胴検出部15は、各画素の胴尤度G
bをカラムごとに積算して、胴積算値A
b(i)を計算する(ステップS633)。
【0201】
[7.3.1.胴尤度差分値の計算(ステップS631)]
図28は、胴探索領域BD1内の一部の画素の配置及び胴尤度の分布の一例を示す図である。
図28を参照しながら、ステップS631を説明する。胴尤度差分値の計算対象が画素83である場合、画素83の胴尤度差分値は、画素83の左に隣接する画素82の胴尤度を画素83の胴尤度から引くことにより求められる。
【0202】
各画素は、
図9に示す処理と同様の手順で、胴尤度差分値の計算対象に決定される。ただし、画素PBD1を含む胴探索領域BD1の左端の画素は、左隣の画素の胴尤度が計算されてないため、胴尤度差分値の計算対象外となる。
【0203】
[7.3.2.胴尤度凸判定処理(ステップS632)]
胴尤度凸判定処理(ステップS632)は、胴探索領域BD1内の各画素の胴尤度G
bが左右の画素の胴尤度G
bよりも大きい胴尤度を有するか否かを判定する処理である。
【0204】
図29は、胴尤度凸判定処理(ステップS632)のフローチャートである。
図28及び
図29を参照しながら、画素83が判定対象である場合を例にして、ステップS632を詳しく説明する。
【0205】
胴検出部15は、画素83の胴尤度G
bが上に凸であるか否かを、下記式(17)に基づいて判定する(ステップS636)。
【0207】
式17において、lin(i)は、判定対象の画素の胴尤度差分値である。lin(i−1)は、判定対象の画素の左に隣接する画素の胴尤度差分値である。lin(i+1)は、判定対象の画素の右に隣接する画素の胴尤度差分値である。
【0208】
式(17)に示す3つの不等式がすべて満たされる場合、画素83の胴尤度は上に凸であると判定される(ステップS636においてYes)。lin(i)>0である場合、画素83の胴尤度は、画素82の胴尤度よりも大きい。lin(i−1)>0である場合、画素82の胴尤度は、画素81の胴尤度よりも大きい。lin(i+1)<0である場合、画素83の胴尤度は、画素84の胴尤度よりも大きい。この結果、画素81〜84の区間において、胴尤度G
bのピークの位置は、画素83となるため、画素83の胴尤度が上に凸であると判断される。
【0209】
判定対象の画素が上に凸である場合(ステップS636においてYes)、対象画素の胴尤度は、そのまま保持される。一方、対象画素が上に凸でない場合(ステップS636においてNo)、対象画素の胴尤度は、0に設定される(ステップS637)。
図28に示す例では、画素83が上に凸であると判定されるため(ステップS636においてYes)、画素83の胴尤度は、維持される。一方、画素81,82,84が上に凸でないと判定されるため(ステップS636においてNo)、画素81,82,84の胴尤度は、0に設定される(ステップS637)。
【0210】
胴尤度凸判定処理(ステップS632)において、各画素は、
図9に示す処理と同様の手順で、判定対象として選択される。しかし、胴検出部15は、胴探索領域BDの左から1番目、2番目の画素及び右端の画素を対象として、式(17)を用いた判定(ステップS636)を実行することができない。これらの画素は、ステップS636において判定対象として選択されず、胴尤度が0に設定される。
【0211】
このように、上に凸でないと判定された画素の胴尤度が0に設定されるため、ステップS633で計算される各カラムの胴積算値A
b(i)の差を際立たせることができる。なお、胴尤度凸判定処理(ステップS632)を省略して、胴積算値A
b(i)を求めることも可能である。
【0212】
[7.4.胴有無決定(ステップS64)]
図30は、胴有無決定処理(ステップS64)のフローチャートである。
図30を参照しながら、ステップS64を詳しく説明する。
【0213】
胴検出部15は、胴検出フラグBrsを0に初期化する(ステップS641)。胴検出フラグBrsは、胴が胴探索領域BD1から検出されたか否かを示し、後述するサイズ決定処理(ステップS8)で用いられる。胴検出フラグBrsが0である場合、胴が検出されなかったことを示し、胴検出フラグBrsが1以上である場合、胴が検出されたことを示す。
【0214】
胴検出部15は、各カラムの胴積算値A
b(i)を用いて、胴積算値A
b(i)の平均を計算する(ステップS642)。胴検出部15は、各カラムの胴積算値A
b(i)のうち最大の胴積算値(胴最大値M
sb)を特定し、胴最大値M
sbに対応するカラムのX座標X
msbを特定する(ステップS643)。
【0215】
胴検出部15は、胴最大値M
sbを有するカラムの左右に隣接する2つのカラムのうち、胴積算値A
b(i)の小さいカラムを選択する(ステップS644)。胴検出部15は、胴最大値M
sbがステップS644で特定されたカラムの胴積算値A
b(i)のu倍よりも大きいか否かを判断する(ステップS645)。
【0216】
胴最大値M
sbが特定されたカラムの胴積算値A
b(i)のu倍以下である場合(ステップS645においてNo)、胴検出部15は、胴最大値M
sbが他の胴積算値Ab(i)に比べて際立ったピークを有しておらず、胴探索領域BD内から有意な胴幅を検出できなかったと判断する。この場合、胴検出部15は、胴検出フラグBrsを0に維持したまま、
図30に示す処理を終了する。
【0217】
一方、胴最大値M
sbが特定されたカラムの胴積算値のu倍よりも大きい場合(ステップS645においてYes)、胴検出部15は、胴最大値M
sbが胴積算値の平均のu倍よりも大きいか否かを判断する(ステップS646)。胴検出部15は、胴最大値M
sbが胴積算値の平均のu倍以下である場合(ステップS646においてNo)、上記と同様に、有意な胴幅を検出できないと判断し、
図30に示す処理を終了する。
【0218】
一方、胴最大値M
sbが胴積算値の平均のu倍よりも大きい場合(ステップS646においてYes)、胴検出部15は、有意な胴幅が存在すると判断し、胴検出フラグBrsを1に設定する(ステップS647)。そして、胴検出部15は、胴最大値M
sbを有するカラムのX座標X
msbを暫定胴中心X
cbに設定し、
図30に示す処理を終了する。
【0219】
[7.5.胴幅決定(ステップS65)]
図31は、胴幅決定処理(ステップS65)のフローチャートである。
図31を参照しながら、ステップS65を詳しく説明する。
【0220】
胴検出部15は、ステップS648で設定された暫定胴中心X
cbに基づいて、最大胴幅選択領域MBDを決定する(ステップS651)。
【0221】
図32は、最大胴幅選択領域MBDと暫定胴中心X
cbとの関係を示す図である。最大胴幅選択領域MBDの左上頂点の画素PBD3のX座標は、暫定胴中心X
cbから予め設定された定数Sを減じた数値であり、Y座標は、画素PBD1のY座標と等しい。右上頂点の画素PBD4のX座標は、定数Sを暫定胴中心X
cbに加えた数値であり、Y座標は、画素PBD2のY座標と等しい。なお、定数Sは、最大胴幅選択領域MBDが胴探索領域BD1の中に位置するような値が用いられる。
【0222】
胴検出部15は、最大胴幅選択領域MBD内の各画素のうち、最大の推定胴幅H
bを有する画素を特定する(ステップS652)。胴検出部15は、最大の推定胴幅H
bを領域R1に対応する胴幅に決定し(ステップS653)、最大の推定胴幅H
bを有する画素の座標を胴の中心に決定する(ステップS654)。
【0223】
このようにして、領域R1に対応する胴の中心及び胴幅が特定される。領域R2〜R5の各々に対応する胴の中心及び胴幅も、同様に特定される。領域R1〜R5ごとに求められた胴検出フラグBrs及び胴幅は、後述するサイズ決定処理(ステップS8)で用いられる。
【0224】
[8.脚検出処理(ステップS7)]
図33は、
図3に示す脚検出処理(ステップS7)のフローチャートである。脚検出処理(ステップS7)は、脚検出部16により実行される。脚検出部16は、肩が存在すると判定された領域R1〜R5(
図12参照)の各々に対して、
図33に示す処理を実行する。これにより、領域R1〜R5の肩の中心に対応する脚が検出される。脚検出処理(ステップS7)では、縦エッジ画像23が用いられる。
【0225】
脚検出処理(ステップS7)は、脚の探索対象となる脚探索領域が胴探索領域BD1と異なる点、足幅が特定されない点などを除き、胴検出処理(ステップS6)と同様である。以下、胴検出処理(ステップS6)と異なる点を中心に、領域R1に対応する脚を検出する場合を例にして脚検出処理(ステップS7)を説明する。
【0226】
図33に示すように、脚検出部16は、探索範囲データ26と肩候補データ24とに基づいて、領域R1に対応する脚探索領域を決定する(ステップS71)。脚検出部16は、脚探索領域内の各画素の脚尤度を計算する(ステップS72)。脚尤度とは、各画素が脚の中心であろう度合いを示す。脚検出部16は、各画素の脚尤度をY軸方向に積算して、カラムごとの脚積算値を計算する(ステップS73)。脚検出部16は、各カラムの脚積算値に基づいて、脚探索領域内における脚の有無を決定する(ステップS74)。
【0227】
脚検出処理(ステップS7)では、領域R1に対応する脚の中心及び脚幅を求めなくてもよい。一般的に、人物の脚幅は、肩幅及び胴幅よりも小さいため、脚幅は、サイズ決定処理(ステップS8)において人物の横サイズの決定に使用されない。しかし、本実施の形態は、領域R1〜R5に対応する脚の中心及び脚幅を求めることを妨げるものではない。
【0228】
[8.1.脚探索領域決定(ステップS71)]
図34は、肩の中心PSHと、脚探索領域LE1との位置関係を示す図である。
図34に示すように、脚探索領域LE1の左上頂点の画素PLE1のX座標X
PLE1と、Y座標Y
PLE1とは、下記式(18)で表され、右下頂点の画素PLE2のX座標X
PLE2と、Y座標Y
PLE2とは、下記式(19)で表される。窓幅win
Lについては、後述する。
【0231】
上記式(18),(19)において、定数nは、式(7),(8)で用いられる定数nと共通である。定数Vは、好ましくは、2.5である。脚検出部16は、探索範囲データ26に記録された上記式(18),(19)を用いて、脚探索領域LE1を決定する。
【0232】
[8.2.脚尤度計算処理(ステップS72)]
脚検出部16は、脚探索領域LE1内の各画素の脚尤度を計算する(ステップS72)。胴尤度計算処理(
図26参照)と同様に、脚探索領域LE1において、基準画素Pb、左画素群LG2、及び右画素群RG2が設定される。脚尤度は、左画素群LG2の画素値を重み付け加算し、右画素群RG2の画素値を重み付け加算することにより計算される。また、胴尤度計算処理(ステップS62)で用いられた最小窓幅wb
min、最大窓幅wb
maxが、脚尤度計算処理(ステップS72)でも用いられる。
【0233】
図35は、脚尤度計算処理(ステップS72)のフローチャートである。
図35に示すステップS761〜S768は、
図26に示すステップS661〜S668に対応し、ステップS769〜S771は、
図26に示すステップS670〜S672に対応する。これは、脚検出処理(ステップS7)では、脚幅を求めないため、推定脚幅を計算しなくてもよいためである。
【0234】
図35に示すように、脚検出部16は、間隔k
L、暫定脚尤度D
L、暫定脚幅F
Lを初期化する(ステップS761)。間隔k
Lが最大窓幅(wb
max)の半分よりも小さい場合(ステップS762においてYes)、脚検出部16は、上記式(15),(16)において間隔k
bを間隔k
Lに置換した式を用いて、左演算値LE_L及び右演算値LE_Rを計算する(ステップS763)。脚検出部16は、右演算値LE_Rを左演算値LE_Lに加算して、個別脚尤度LE_Cを計算する(ステップS764)。
【0235】
個別脚尤度LE_Cが暫定脚尤度D
Lよりも大きい場合(ステップS765においてYes)、脚検出部16は、左演算値LE_Lと右演算値LE_Rとの間に極端な差が存在するか否かを判断する(ステップS766)。脚検出部16は、極端な差がないと判断した場合(ステップS766においてNo)、暫定脚尤度D
Lを個別脚尤度LE_Cに更新し、暫定脚幅F
Lを現在の間隔k
Lに更新する(ステップS767)。そして、脚検出部16は、間隔k
Lをインクリメントする(ステップS768)。
【0236】
脚検出部16は、間隔k
Lがwb
max/2よりも大きくなるまで(ステップS762においてNo)、ステップS763〜S768を繰り返す。これにより、wb
min/2〜wb
max/2の範囲において、最大の個別脚尤度LE_Cと、最大の個別脚尤度LE_Cに対応する間隔k
Lとが特定される。
【0237】
間隔k
Lがwb
max/2以上である場合(ステップS762においてNo)、脚検出部16は、暫定脚幅F
Lが0であるか否かを判断する(ステップS769)。暫定脚幅F
Lが0よりも大きい場合(ステップS769においてNo)、脚検出部16は、暫定脚尤度D
Lを基準画素Pbの脚尤度G
L(i,j)として設定する(ステップS770)。暫定脚幅F
Lが0である場合(ステップS769においてYes)、脚尤度G
L(i,j)は、0に設定される(ステップS771)。
【0238】
[8.3.脚積算値計算処理(ステップS73)]
図36は、脚積算計算処理(ステップS73)のフローチャートである。脚検出部16は、胴積算値計算処理(ステップS63)と同様の手順で、脚探索領域LE1の各カラムに対応する脚積算値A
L(i)を計算する。
【0239】
脚検出部16は、脚探索領域LE1内の各画素の脚尤度差分値を計算する(ステップS731)。脚尤度差分値は、計算対象の画素の脚尤度から、左に隣接する画素の脚尤度を引くことにより求められる。
【0240】
脚検出部16は、各画素の脚尤度差分値を用いて、脚尤度凸判定処理(ステップS732)を実行する。ステップS732では、
図29に示す処理と同じ処理が実行される。つまり、対象画素が上に凸である場合、対象画素の脚尤度は、そのまま維持される。対象画素が上に凸でない場合、対象画素の脚尤度は、0に設定される。
【0241】
ステップS732の後に、脚検出部16は、各画素の脚尤度G
Lをカラムごとに積算して、脚積算値A
L(i)を計算する(ステップS733)。
【0242】
[8.4.脚有無決定(ステップS74)]
図37は、脚有無決定処理(ステップS74)のフローチャートである。胴有無決定処理(ステップS64)では、最大の胴積算値Ab(i)に基づいて胴の有無を判断していたが、脚有無決定処理(ステップS74)では、各カラムの脚積算値A
L(i)が、左右のカラムの脚積算値よりも有意なピークを有しているか否かが判定される。
【0243】
脚検出部16は、脚検出フラグLrsを0に初期化する(ステップS741)。脚検出フラグLrsが0である場合、脚が検出されなかったことを示し、脚検出フラグLrsが1以上である場合、脚が検出されたことを示す。
【0244】
脚検出部16は、各カラムの脚積算値A
L(i)の平均を計算し(ステップS742)、判定対象のカラムのX座標iをX
PLE1+1に設定する(ステップS744)。これにより、脚探索領域LE1の左から2番目のカラムが判定対象に選択される。左端のカラムは、比較の対象となるカラムが左側に存在しないため、判定対象から除かれる。
【0245】
脚検出部16は、判定対象のカラムのX座標iがX
PLE2と等しいか否かを判断する(ステップS744)。X座標iがX
PLE2と等しい場合(ステップS744においてYes)、判定対象のカラムは、脚探索領域LE1の右端であり、比較対象となる右側のカラムが存在しない。このため、脚検出部16は、
図37に示す処理を終了する。
【0246】
一方、判定対象のカラムのX座標がX
PLE2よりも小さい場合(ステップS744においてNo)、脚検出部16は、判定対象のカラムの左右に隣接する2つのカラムのうち、脚積算値A
L(i)の小さいカラムを特定する(ステップS745)。脚検出部16は、判定対象のカラムの脚積算値A
L(i)がステップS745で特定されたカラムの脚積算値A
L(i)のw倍よりも大きいか否かを判断する(ステップS745)。
【0247】
判定対象のカラムの脚積算値A
L(i)が特定されたカラムの脚積算値A
L(i)のw倍以下である場合(ステップS746においてNo)、脚検出部16は、判定対象のカラムの脚積算値A
L(i)が左右に比べて際立ったピークを有していないと判定する。
【0248】
一方、判定対象のカラムの脚積算値A
L(i)が特定されたカラムの脚積算値のw倍よりも大きい場合(ステップS746においてYes)、脚検出部16は、判定対象のカラムの脚積算値A
L(i)が脚積算値の平均のw倍よりも大きいか否かを判断する(ステップS746)。脚検出部16は、判定対象のカラムの脚積算値A
L(i)が脚積算値の平均のu倍以下である場合(ステップS747においてNo)、上記と同様に、判定対象のカラムの脚積算値A
L(i)が左右に比べて際立ったピークを有していないと判定する。
【0249】
一方、判定対象のカラムの脚積算値A
L(i)が脚積算値の平均のw倍よりも大きい場合(ステップS747においてYes)、脚検出部16は、判定対象のカラムの脚積算値A
L(i)が有意なピークを有すると判断し、脚検出フラグLrsをインクリメントすることにより(ステップS748)、現在の判定対象のカラムの右側のカラムを次の判定対象に設定する。
【0250】
脚検出部16は、次の判定対象のカラムのX座標がX
PLE2と等しくなるまで(ステップS744においてYes)、ステップS745〜S748を繰り返す。これにより、脚検出フラグLrsは、1以上の値に設定される。例えば、領域R1に対応する人物が、
図4に示す人物21mのように、入力画像21中に背を向けて(あるいは正面を向いて)立っている場合、有意な脚積算値のピークを有する2つのカラムが特定される。この場合、脚検出フラグLrsの値は、2となり、2本の脚が検出されたことを示す。あるいは、人物21mの一方の脚が他方の脚の後ろに隠れている場合、有意な脚積算値のピークを有する1つのカラムが特定される。この場合、脚検出フラグLrsの値は、1となり、1本の脚が検出されたことを示す。
【0251】
このようにして、領域R1に対応する脚が検出される。領域R2〜R5の各々に対応する脚も、同様に特定される。領域R1〜R5ごとに求められた脚検出フラグLrsは、後述するサイズ決定処理(ステップS8)で用いられる。
【0252】
[9.サイズ決定処理(ステップS8)]
図38は、
図3に示すサイズ決定処理(ステップS8)のフローチャートである。以下、
図38を参照しながら、サイズ決定処理(ステップS8)を説明する。
【0253】
サイズ決定部18は、ステップS3〜S6の検出結果に基づいて、領域R1〜R5の各々に対応する人物範囲を決定する(ステップS81)。サイズ決定部18は、各領域に対応する人物の確度を計算する(ステップS82)。確度とは、各領域に対応する人物が実際の人物である度合いを示す数値である。サイズ決定部18は、各領域R1〜R5に対応する人物の範囲が重複するか否かを判断する(ステップS83)。複数の人物範囲が重複する場合、サイズ決定部18は、重複する人物の範囲の中から人物範囲を1つ選択し、選択されなかった人物の範囲を消去する。
【0254】
[9.1.人物範囲決定(ステップS81)]
図39は、人物範囲決定処理(ステップS81)のフローチャートである。サイズ決定部18は、領域R1〜R5の各々に対して人物範囲決定処理(ステップS61)を実行することにより、領域R1〜R5に対応する人物範囲データ28を生成する。
【0255】
以下、領域R1に対応する人物範囲を決定する場合を例にして、人物範囲決定処理(ステップS61)について詳しく説明する。
【0256】
サイズ決定部18は、ステップS851〜S854により、領域R1に対応する人物の横サイズを決定する。サイズ決定部18は、胴検出フラグBrsが0よりも大きいか否かを判断する(ステップS851)。胴検出フラグBrsが0よりも大きい場合(ステップS851においてYes)、領域R1の肩に対応する胴幅が検出されている。サイズ決定部18は、領域R1の肩幅が検出された胴幅よりも大きいか否かを判断する(ステップS852)。
【0257】
肩幅が胴幅以上である場合(ステップS852においてYes)、サイズ決定部18は、肩幅を領域R1に対応する人物の横サイズとして決定する(ステップS853)。一方、肩幅が胴幅よりも小さい場合(ステップS852においてNo)、胴幅が検出されていない。このため、サイズ決定部18は、胴幅を領域R1に対応する人物の横サイズとして決定する(ステップS854)。
【0258】
ステップS851の説明に戻る。胴検出フラグBrsが0である場合(ステップS851においてNo)、サイズ決定部18は、領域R1の肩に対応する胴幅が検出されていないため、領域R1で検出された肩幅を、領域R1に対応する人物の横サイズに決定する(ステップS853)。
【0259】
次に、サイズ決定部18は、ステップS855〜S860により、領域R1に対応する人物の縦サイズを決定する。足先検出フラグFrsが0よりも大きい場合(ステップS855においてYes)、領域R1の肩に対応する足先の位置が特定されたことを示す。この場合、サイズ決定部18は、足先検出処理(ステップS4)により特定された足先位置TEyの使用を決定する(ステップS856)。
【0260】
一方、領域R1の足先検出フラグFrsが0である場合(ステップS855においてNo)、領域R1の肩に対応する足先の位置が特定されていない。このため、サイズ決定部18は、領域R1の肩の中心PSH及び肩幅に基づいて、足先位置を推定する(ステップS857)。例えば、サイズ決定部18は、足先位置の推定用に予め設定された係数を領域R1の肩幅に乗じ、肩の中心PSHのY座標Y
SHに乗算値を加算することにより、足先位置を得ることができる。
【0261】
次に、サイズ決定部18は、領域R1の頭頂検出フラグHrsが0よりも大きいか否かを判断する(ステップS858)。頭頂検出フラグHrsが0よりも大きい場合(ステップS858においてYes)、領域R1の肩に対応する頭頂の位置が特定されている。この場合、サイズ決定部18は、頭頂検出処理(ステップS5)により特定された頭頂位置HTyの使用を決定する(ステップS859)。
【0262】
一方、領域R1の頭頂検出フラグHrsが0である場合(ステップS858においてNo)、領域R1の肩に対応する頭頂の位置が特定されていない。この場合、サイズ決定部18は、ステップS857と同様の方法で、頭頂位置を推定する(ステップ860)。頭頂位置の推定用に予め設定された係数は、足先位置推定用の係数と異なる値を有する。
【0263】
サイズ決定部18は、足先位置と頭頂位置とに基づいて、領域R1に対応する人物の縦サイズを決定する(ステップS861)。具体的には、足先位置のY座標から頭頂位置のY座標を減算することにより、縦サイズを求めることができる。サイズ決定部18は、領域R1に対応する肩の中心PSH、横サイズ及び縦サイズに基づいて、領域R1に対応する人物範囲を決定し、領域R1の肩の中心PSH,足先位置TEy,頭頂位置HTy、横サイズ及び縦サイズを含む人物範囲データ28を生成する。同様にして、領域R2〜R5に対応する人物範囲データ28が作成される。
【0264】
[9.2.確度計算(ステップS82)]
図40は、確度計算処理(ステップS82)のフローチャートである。サイズ決定部18は、領域R1〜R5の各々に対して確度計算処理(ステップS82)を実行することにより、領域R1〜R5に対応する人物範囲データ28が実際の人物の範囲を示す度合いとして、確度を計算する。計算された確度は、後述する重複判断処理(ステップS83)で用いられる。以下、領域R1に対応する人物の確度を計算する場合を例に説明する。
【0265】
図40に示すように、サイズ決定部18は、確度を0に初期化する(ステップS871)。領域R1に対応する肩幅が0よりも大きい場合(ステップS872においてYes)、サイズ決定部18は、確度をインクリメントする(ステップS873)。領域R1に対応する肩幅が0である場合(ステップS872においてNo)、サイズ決定部18は、確度をインクリメントすることなく、ステップS874に進む。
【0266】
領域R1の胴検出フラグBrsが0よりも大きい場合(ステップS874においてYes)、サイズ決定部18は、確度をインクリメントする(ステップS875)。領域R1の胴検出フラグBrsが0である場合(ステップS874においてNo)、サイズ決定部18は、確度をインクリメントすることなく、ステップS876に進む。
【0267】
領域R1の頭頂検出フラグHrsが0よりも大きい場合(ステップS876においてYes)、サイズ決定部18は、確度をインクリメントする(ステップS877)。領域R1の頭頂検出フラグHrsが0である場合(ステップS876においてNo)、サイズ決定部18は、確度をインクリメントすることなく、ステップS878に進む。
【0268】
領域R1の足先検出フラグFrsが0よりも大きい場合(ステップS878においてYes)、サイズ決定部18は、確度をインクリメントする(ステップS879)。領域R1の足先検出フラグFrsが0である場合(ステップS878においてNo)、サイズ決定部18は、確度をインクリメントすることなく、ステップS880に進む。
【0269】
領域R1の脚検出フラグLrsが1である場合(ステップS880においてYes)、サイズ決定部18は、確度をインクリメントする(ステップS881)。領域R1の脚検出フラグLrsが1でない場合(ステップS880においてNo)、サイズ決定部18は、脚検出フラグLrsが2以上であるか否かを判断する(ステップS882)。
【0270】
領域R1の脚検出フラグLrsが2以上である場合(ステップS882おいてYes)、サイズ決定部18は、確度を2つ増加させる(ステップS883)。これは、脚有無決定処理(ステップS74。
図37参照)において、2本の脚が検出されているためである。一方、領域R1の脚検出フラグLrsが0である場合(ステップS882においてNo)、サイズ決定部18は、確度をインクリメントすることなく、
図40に示す処理を終了する。
【0271】
このように、サイズ決定部18は、人物の肩、胴、脚、足先、頭頂の検出結果に基づいて、各領域に対応する人物の確度を計算する。
【0272】
[9.3.重複判定処理(ステップS83)]
まず、重複判定処理(ステップS83)を実行する理由について説明する。
図12に示すように、枠27aにおいて、肩幅を示す2つの領域R1,R2が特定されている。これらの領域ごとに人物の範囲が特定されることにより、枠27aにおいて、複数の人物範囲が特定される。しかし、
図4に示す枠21a(枠27aに対応)の中には、1人の人物21mしか存在していない。このように、同じ枠内において2つの肩幅が検出されることにより、1人の人物が別々の人物として検出される場合がある。サイズ決定部18は、重複判定処理(ステップS83)を実行することにより、1人の人物を誤って複数の人物として検出することを防止する。
【0273】
図41は、重複判定処理(ステップS83)のフローチャートである。
図41に示すように、サイズ決定部18は、領域R1〜R5に対応する人物範囲の中で、重複する人物範囲が存在するか否かを判断する(ステップS831)。
【0274】
重複する人物範囲が存在する場合(ステップS831においてYes)、サイズ決定部18は、重複する複数の人物範囲の確度が等しい否かを判断する(ステップS832)。確度が等しくない場合(ステップS832においてNo)、サイズ決定部18は、重複する複数の人物範囲のうち、最大の確度を有する人物範囲に対応する人物範囲データ28を保持し、その他の人物範囲データを消去する(ステップS833)。つまり、サイズ決定部18は、重複する複数の人物範囲のうち、最大の確度を有する人物範囲を選択する。
【0275】
一方、確度が等しい場合(ステップS832においてYes)、サイズ決定部18は、重複する複数の人物範囲のうち、面積の一番広い人物範囲に対応する人物範囲データ28を保持し、その他の人物範囲データ28を消去する(ステップS834)。つまり、サイズ決定部18は、重複する複数の人物範囲のうち、最大の面積を有する人物範囲を選択する。
【0276】
また、サイズ決定部18は、重複のない人物範囲データ28をそのまま保持する。
【0277】
次に、サイズ決定部18は、現在保持している人物範囲データ28のうち、縦サイズと横サイズとの比率が一定の範囲外である人物範囲データ28を消去する(ステップS835)。一定の範囲は、一般的な人物の縦サイズと横サイズとの比率に基づいて決定される。縦サイズとの横サイズとの比率が一定の範囲内に存在しない場合、ステップS81で特定された人物範囲は、人物でないものを誤って人物として検出した結果であると判断される。サイズ決定部18は、消去されなかった人物範囲データ28を外部に出力する。
【0278】
以上説明したように、本実施の形態の人物検出装置1は、入力画像21から人物の肩の中心及び肩幅を検出し、検出された肩の中心及び肩幅に基づいて、胴幅、足先位置、頭頂位置を特定する。これにより、入力画像21に含まれる人物の横サイズ及び縦サイズを特定することができる。
【0279】
上記実施の形態では、画像認識部17が対象領域データ25を作成し、対象領域データ25で定義された枠21a〜21c内から人物の範囲を特定する例を説明したが、これに限られない。人物検出装置1は、対象領域データ25を使用せずに、入力画像21の全体から肩の中心位置及び肩幅を検出してもよい。
【0280】
上記実施の形態では、肩の水平方向の対称性に基づいて、肩の中心位置及び肩幅を入力画像21から検出する例を説明したが、これに限られない。人物検出装置1は、他の一般的に画像認識処理を用いて、肩の中心位置及び肩幅を求めてもよい。
【0281】
上記実施の形態では、肩の中心及び肩幅に基づいて、胴、脚、足先位置、頭頂位置を検出し、人物範囲を特定する例を説明した。しかし、人物の胴の有無、及び脚の有無を検出することのみを目的として、人物検出装置1を用いてもよい。
【0282】
上記実施の形態では、足先検出部13が、足先位置特定処理(ステップS43、
図18参照)において、判定対象の画素ラインがステップS436,S437の両者を実行する例を説明したが、これに限られない。足先検出部13は、ステップS436,S437の少なくとも一方を実行することにより、判定対象の画素ラインが足先の条件を満たすか否かを判定してもよい。頭頂位置特定処理(ステップS53、
図22参照)、胴有無決定処理(ステップS64、
図30参照)、脚有無決定処理(ステップS74,
図37参照)でも同様である。
【0283】
上記実施の形態では、ステップS437(
図18参照)において、足先検出部13が、判定対象の画素ラインの足先値が画素ラインの足先値の平均のs倍よりも大きいか否かを判定する例を説明したが、これに限られない。足先値の平均に代えて、足先値の中央値などの代表値を用いてもよい。つまり、足先検出部13は、判定対象の画素ラインの足先値が、各画素ラインの足先値と所定の関係を満たす場合、肩の中心PSHに対応する足先値を検出したと判定してもよい。ステップS537(
図22参照)、ステップS646(
図30参照)、ステップS746(
図37参照)についても同様である。
【0284】
上記実施の形態で説明した人物検出装置1において、各機能ブロックは、LSIなどの半導体装置により個別に1チップ化されても良いし、一部又は全部を含むように1チップ化されてもよい。集積回路化の手法はLSIに限るものではなく、専用回路又は汎用プロセサで実現してもよい。LSI製造後に、プログラムすることが可能なFPGA(Field Programmable Gate Array)や、LSI内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサーを利用しても良い。
【0285】
また、上記実施の形態の各機能ブロックの処理の一部または全部は、プログラムにより実現されるものであってもよい。そして、上記実施の形態の各機能ブロックの処理の一部または全部は、コンピュータにおいて、中央演算装置(CPU)により行われる。また、それぞれの処理を行うためのプログラムは、ハードディスク、ROMなどの記憶装置に格納されており、ROMにおいて、あるいはRAMに読み出されて実行される。
【0286】
また、上記実施形態の各処理をハードウェアにより実現してもよいし、ソフトウェア(OS(オペレーティングシステム)、ミドルウェア、あるいは、所定のライブラリとともに実現される場合を含む。)により実現してもよい。さらに、ソフトウェアおよびハードウェアの混在処理により実現しても良い。なお、上記実施の形態に係る人物検出装置1をハードウェアにより実現する場合、各処理を行うためのタイミング調整を行う必要があるのは言うまでもない。上記実施形態においては、説明便宜のため、実際のハードウェア設計で生じる各種信号のタイミング調整の詳細については省略している。
【0287】
前述した方法をコンピュータに実行させるコンピュータプログラム及びそのプログラムを記録したコンピュータ読み取り可能な記録媒体は、本発明の範囲に含まれる。ここで、コンピュータ読み取り可能な記録媒体としては、例えば、フレキシブルディスク、ハードディスク、CD−ROM、MO、DVD、DVD−ROM、DVD−RAM、BD(Blu−ray Disc)、半導体メモリを挙げることができる。
【0288】
上記コンピュータプログラムは、上記記録媒体に記録されたものに限られず、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク等を経由して伝送されるものであってもよい。