本発明の実施の形態について図面を参照しながら詳細に説明する。なお、図中同一または相当部分には同一符号を付してその説明は繰返さない。
図1は、この発明の実施の形態による特徴検出装置の機能ブロック図である。図1を参照して、この発明の実施の形態による特徴検出装置10は、画像縮小モジュール1と、累積モジュール2と、サイズ算出モジュール3と、一致処理モジュール4と、強識別器モジュール5とを含む。
画像縮小モジュール1は、各フレームからなる入力画像を受ける。各フレームは、行方向および列方向に配列された複数の画素からなる。複数の画素の各々は、画素の輝度からなる。画像縮小モジュール1は、入力画像を受けると、その受けた入力画像を後述する方法によって縮小する。そして、画像縮小モジュール1は、その縮小した入力画像を累積モジュール2へ出力する。
また、画像縮小モジュール1は、画像を縮小するための信号GSDをサイズ算出モジュール3から受けると、その受けた信号GSDに応じて入力画像を後述する方法によって縮小する。そして、画像縮小モジュール1は、その縮小した入力画像を累積モジュール2へ出力する。
累積モジュール2は、画像縮小モジュール1から入力画像を受ける。そして、累積モジュール2は、その受けた入力画像の複数の画素の複数の輝度に基づいて、後述する方法によって、各画素の輝度の累積値を演算する。そうすると、累積モジュール2は、各画素が輝度の累積値からなる入力画像をサイズ算出モジュール3へ出力する。
サイズ算出モジュール3は、各画素が輝度の累積値からなる入力画像を累積モジュール2から受ける。そして、サイズ算出モジュール3は、後述する方法によって、スキャンウィンドウのサイズを算出する。ここで、スキャンウィンドウとは、人間の顔の特徴を明暗差で表したHaar特徴を含み、各フレームからHaar特徴に一致する特徴を検出するために用いられるものである。
その後、サイズ算出モジュール3は、その演算したスキャンウィンドウのサイズが入力画像の行方向の幅または列方向の幅以下であるか否かを判定する。そして、サイズ算出モジュール3は、スキャンウィンドウのサイズが入力画像の行方向の幅または列方向の幅以下であると判定したとき、その算出したスキャンウィンドウのサイズと、入力画像とを一致処理モジュール4へ出力する。
一方、サイズ算出モジュール3は、スキャンウィンドウのサイズが入力画像の行方向の幅または列方向の幅よりも大きいと判定したとき、信号GSDを生成し、その生成した信号GSDを画像縮小モジュール1へ出力する。
一致処理モジュール4は、スキャンウィンドウのサイズと入力画像とをサイズ算出モジュール3から受ける。そして、一致処理モジュール4は、Haar特徴、スキャンウィンドウのサイズおよび入力画像に基づいて、後述する方法によって、Haar特徴の明暗差に一致する明暗差を有する画素領域の個数の累積値である個数累積値を検出する。そうすると、一致処理モジュール4は、その検出した個数累積値を強識別器モジュール5へ出力する。
強識別器モジュール5は、一致処理モジュール4から個数累積値を受ける。そして、強識別器モジュール5は、その受けた個数累積値に基づいて、後述する方法によって、人間の顔を検出する。
図2は、入力画像の概念図である。図2を参照して、入力画像は、4個の頂点O,A,B,Cを有する。そして、頂点Oは、(0,0)のx−y座標からなり、頂点Aは、(0,Ymax)のx−y座標からなり、頂点Bは、(Xmax,Ymax)のx−y座標からなり、頂点Cは、(Xmax,0)のx−y座標からなる。
図1に示す画像縮小モジュール1は、画像縮小率s(sは、s>1を満たす実数)を予め保持している。そして、画像縮小モジュール1は、次式によって、入力画像の画像サイズPicture sizeを縮小する。
なお、式(3)において、iは、0,1,2,3,・・・である。
画像縮小モジュール1は、i=0であるとき、式(3)に従って、自律的に入力画像を縮小する。また、画像縮小モジュール1は、iが1以上であるとき、サイズ算出モジュール3からの信号GSDに応じて、式(3)に従って入力画像を縮小する。この場合、画像縮小モジュール1は、iが画像縮小回数Imaxに達するまで、式(3)に従って入力画像を縮小する。この画像縮小回数Imaxは、予め決定されている画像の縮小回数の最大数である。
そして、画像縮小モジュール1は、式(3)によって入力画像を1回縮小するごとに、その縮小した入力画像を累積モジュール2へ出力する。
図3は、画素の輝度の累積値を計算する方法を説明するための図である。図3を参照して、入力画像の複数の画素の各々は、画素の輝度からなる((a)参照)。
0列目の各画素の累積値は、0列目の各画素の輝度からなる。1列目の各画素の累積値は、0列目の各画素の輝度と、1列目の各画素の輝度との和からなる。2列目の各画素の累積値は、0列目の各画素の輝度と、1列目の各画素の輝度と、2列目の各画素の輝度との和からなる。そして、一般的に、g(gは正の整数)列目の画素の累積値は、0列目の各画素の輝度からg列目の各画素の輝度までの和からなる(図3の(b)参照)。
図1に示す累積モジュール2は、図3に示す計算方法に従って、各行の各画素の累積値を演算する累積処理を実行する。そして、累積モジュール2は、列方向に配置された複数の行に対して累積処理を並行して実行する。
累積モジュール2は、各行の画素の累積値を演算すると、各画素が累積値からなる入力画像をサイズ算出モジュール3へ出力する。
このように、累積モジュール2は、複数の行に対して、画素の輝度の累積処理を並行して実行する。したがって、入力画像を構成する複数の画素の累積値を迅速に演算できる。
サイズ算出モジュール3は、スキャンウィンドウの初期サイズwと、スキャンウィンドウの拡大率e(eは、1よりも大きい実数)とを予め保持している。初期サイズwは、たとえば、20ピクセル×20ピクセルからなる。
サイズ算出モジュール3は、初期サイズw、拡大率eおよび拡大回数j(jは正の整数)を次式に代入してスキャンウィンドウのサイズScan window sizeを算出する。ここで、拡大回数jは、スキャンウィンドウを拡大する回数である。
そして、サイズ算出モジュール3は、wej≦Xmaxであるか、またはwej≦Ymaxであるかを判定する。
サイズ算出モジュール3は、wej≦Xmaxである、またはwej≦Ymaxであるとき、その算出したスキャンウィンドウのサイズScan window sizeと、各画素が累積値からなる入力画像とを一致処理モジュール4へ出力する。
一方、サイズ算出モジュール3は、wejがXmaxおよびYmaxのいずれか一方よりも大きいとき、信号GSDを生成し、その生成した信号GSDを画像縮小モジュール1へ出力する。
図4は、この発明の実施の形態におけるHaar特徴の概念図である。図4を参照して、この発明の実施の形態におけるHaar特徴は、パターン0〜パターン14によって示される15個のHaar特徴CH0〜CH14からなる。そして、15個のHaar特徴CH0〜CH14の各々は、黒領域と白領域とからなる。
なお、図4においては、パターン0〜パターン14の四角形の枠は、スキャンウィンドウを表す。
パターン0〜パターン6は、白領域と黒領域とによって構成された1個のパターンからなるHaar特徴CH0〜CH6がスキャンウィンドウ内の所望の位置に配置される。そして、Haar特徴CH0〜CH6は、OpenCVで用いられているHaar特徴である(非特許文献6)。
パターン7〜パターン14は、各々が白領域と黒領域とによって構成された複数のパターンからなるHaar特徴CH7〜CH14がスキャンウィンドウ内の所望の位置に配置される。そして、パターン7〜パターン14によって示されるHaar特徴CH7〜CH14は、この発明によって新たに考案されたパターンであり、並列処理に適したものである。なお、パターン7〜パターン14によって示されるHaar特徴CH7〜CH14の各々は、「混合Haar特徴」を構成する。
複数のパターンからなるHaar特徴をスキャンウィンドウ内に配置する場合の条件は、次のとおりである。
Cnd1)複数のパターンの横幅(=行方向の幅)が同じサイズであり、かつ、複数のパターンの左端および右端(横方向(=行方向)の両端)の位置が同じである。
Cnd2)複数のパターンの縦幅(=列方向の幅)が同じサイズである。
水平方向(=行方向)に画素の輝度を累積加算する方式の場合、矩形領域の輝度値の総和をHaar特徴の右端の累積値から左端の累積値を減算することによって実現している。そのため、複数のパターンの間で、パターンの右端と左端とが揃っていれば、並列に同時に演算可能である。したがって、複数のパターンからなるHaar特徴をスキャンウィンドウ内に配置する場合、条件Cnd1が必要となる。
また、複数のパターンの縦幅が同じである場合、垂直方向(列方向)に加算を行う回数が同一であるため、並列に処理が可能である。したがって、複数のパターンからなるHaar特徴をスキャンウィンドウ内に配置する場合、条件Cnd2が必要である。
パターン0〜パターン14は、人間の顔の特徴に基づいて予め決定されたものである。そして、一致処理モジュール4は、パターン0〜パターン14を予め保持している。
図5は、スキャンウィンドウの走査方法を説明するための図である。なお、図5においては、図4の(a)に示すパターン0からなるHaar特徴を配置したスキャンウィンドウSW1を例としてスキャンウィンドウの走査方法について説明する。
図5を参照して、スキャンウィンドウSW1は、スキャンウィンドウSW1の左端が入力画像の0列目に一致するように配置される。そして、スキャンウィンドウSW1は、入力画像の行方向へ所望の画素数m(mは正の整数)分ずつ移動させられて1つの行を走査する。図5においては、m=4である。したがって、スキャンウィンドウSW1は、入力画像の行方向へ4画素数分ずつ移動させられて行方向への1つの走査を行う。すなわち、スキャンウィンドウSW1は、最初、位置PS1に配置され、その後、スキャンウィンドウSW1は、位置PS2,PS3,・・・,PSk(kは1以上の整数)へ順次移動させられて行方向への1つの走査を行う。
位置PS2は、スキャンウィンドウSW1に含まれるHaar特徴の左端が位置PS1よりも行方向へ4画素数分だけ移動した位置であり、位置PS3は、スキャンウィンドウSW1に含まれるHaar特徴の左端が位置PS2よりも行方向へ4画素数分だけ移動した位置であり、以下、同様にして、位置PSkは、スキャンウィンドウSW1に含まれるHaar特徴の左端が位置PSk−1よりも行方向へ4画素数分だけ移動した位置である。
スキャンウィンドウSW2〜SWp(pは1以上の正の整数)の各々は、スキャンウィンドウSW1と同じ構成(すなわち、同じHaar特徴を同じ位置に含む)からなる。
そして、スキャンウィンドウSW2は、スキャンウィンドウSW1よりも1行だけ列方向にずらされた位置において、スキャンウィンドウSW1と同じように位置PS1〜PSkに順次移動させられて行方向への1つの走査を行う。
スキャンウィンドウSW3は、スキャンウィンドウSW2よりも1行だけ列方向にずらされた位置において、スキャンウィンドウSW1と同じように位置PS1〜PSkに順次移動させられて行方向への1つの走査を行う。
以下、同様にして、スキャンウィンドウSWpは、スキャンウィンドウSWp−1よりも1行だけ列方向にずらされた位置において、スキャンウィンドウSW1と同じように位置PS1〜PSkに順次移動させられて行方向への1つの走査を行う。
そして、p個のスキャンウィンドウSW1〜SWpの行方向への走査は、並列して行われる。
なお、図5においては、p個のスキャンウィンドウSW1〜SWpは、行方向へずらされて図示されているが、これは、p個のスキャンウィンドウSW1〜SWpを見易くするためであり、実際には、p個のスキャンウィンドウSW1〜SWpは、最初、位置PS1に配置され、その後、位置PS2〜PSkへ順次移動させられて行方向への走査を行う。
図6は、画素とHaar特徴との一致を検出する方法を説明するための図である。図6を参照して、スキャンウィンドウSW1が図5に示す位置PS1に位置するとき、スキャンウィンドウSW1内に配置されたHaar特徴CH0(図4の(a)参照)は、第1列〜第6列と、第1行〜第6行とによって規定される画素領域に位置する。
Haar特徴CH0のうちの黒領域(図6においては、斜線領域)は、第1列〜第6列と、第1行〜第3行とによって規定される画素領域に位置し、Haar特徴CH0のうちの白領域は、第1列〜第6列と、第4行〜第6行とによって規定される画素領域に位置する。
黒領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第3行の範囲において、第6列目の累積値から第0列目の累積値を減算した値になり、白領域が位置する画素領域の行方向における輝度値の総和は、第4行〜第6行の範囲において、第6列目の累積値から第0列目の累積値を減算した値になる。
その結果、黒領域が位置する画素領域の行方向における輝度値の総和は、第1行において、“0004”になり、第2行において、“0004”になり、第3行において、“0003”になる。
また、白領域が位置する画素領域の行方向における輝度値の総和は、第4行において、“05A0”になり、第5行において、“056C”になり、第6行において、“059C”になる。
そして、黒領域が位置する画素領域の輝度値の総和は、列方向に配置された“0004”,“0004”,“0003”の総和になり、白領域が位置する画素領域の輝度値の総和は、列方向に配置された“05A0”,“056C”,“059C”の総和になる。
また、Haar特徴CH0が配置された画素領域の明暗差は、黒領域が位置する画素領域の輝度値の総和から白領域が位置する画素領域の輝度値の総和を減算したものになる。
したがって、Haar特徴CH0が配置された画素領域の明暗差は、黒領域が位置する画素領域の第1行〜第3行における輝度値の総和“0004”,“0004”,“0003”を累積加算し、その累積加算の結果から白領域が位置する画素領域の第4行〜第6行における輝度値の総和“05A0”,“056C”,“059C”を累積減算することによって求められる。すなわち、Haar特徴CH0が配置された画素領域の明暗差は、“0004”,“0004”,“0003”を列方向に累積加算し、その累積加算の結果から“05A0”,“056C”,“059C”を列方向に累積減算することによって求められる。
その後、最終的に演算された明暗差がHaar特徴CH0の明暗差と一致するか否かが判定される。そして、最終的に演算された明暗差がHaar特徴CH0の明暗差に一致する場合、値αl(lは、0〜14)が累積値qkに加算され、最終的に演算された明暗差がHaar特徴CH0の明暗差に一致しない場合、値βlが累積値qkに加算される。そうすると、累積値qkが位置PS1に対応付けられて記憶される。ここで、値αlは、画素領域の明暗差がHaar特徴の明暗差に一致することを示し、例えば、1である。また、値βlは、画素領域の明暗差がHaar特徴の明暗差に一致しないことを示し、例えば、0である。
なお、図4に示すパターン7、パターン8、パターン11、およびパターン12のHaar特徴CH7,CH8,CH11,CH12が用いられた場合も、Haar特徴CH7,CH8,CH11,CH12が配置された画素領域の明暗差は、図6に示す方法によって演算される。
図7は、画素とHaar特徴との一致を検出する他の方法を説明するための図である。図7を参照して、スキャンウィンドウSW1が図5に示す位置PS1に位置するとき、スキャンウィンドウSW1内に配置されたHaar特徴CH1(図4の(b)参照)は、第1列〜第6列と、第1行〜第6行とによって規定される画素領域に位置する。
Haar特徴CH1のうちの黒領域(図7においては、斜線領域)は、第1列および第2列と、第1行〜第6行とによって規定される画素領域と、第5列および第6列と、第1行〜第6行とによって規定される画素領域とに位置し、Haar特徴CH1のうちの白領域は、第3列および第4列と、第1行〜第6行とによって規定される画素領域に位置する。
ここで、第0列、第2列、第4列および第6列における累積値をそれぞれP0,P2,P4,P6とすると、左側の黒領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第6行の範囲において(P2−P0)を演算した値になり、白領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第6行の範囲において、(P4−P2)を演算した値になり、右側の黒領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第6行の範囲において(P6−P4)を演算した値になる。
また、Haar特徴CH1が配置された画素領域の明暗差は、黒領域が位置する画素領域の輝度値の総和から白領域が位置する画素領域の輝度値の総和を減算したものになる。
したがって、Haar特徴CH1が配置された画素領域の明暗差は、第1行〜第6行の各行において(P2−P0)−2×(P4−P2)+(P6−P4)を演算し、その演算結果を列方向に累積加算した値になる。
その後、最終的に演算された明暗差がHaar特徴CH1の明暗差と一致するか否かが判定される。そして、最終的に演算された明暗差がHaar特徴CH1の明暗差に一致する場合、値αlが累積値qkに加算され、最終的に演算された明暗差がHaar特徴CH1の明暗差に一致しない場合、値βlが累積値qkに加算される。そうすると、累積値qkが位置PS1に対応付けられて記憶される。
なお、図4に示すパターン2、パターン13およびパターン14のHaar特徴CH2,CH13,CH14が用いられた場合も、Haar特徴CH2,CH13,CH14が配置された画素領域の明暗差は、図7に示す方法によって演算される。
また、Haar特徴CH1,CH2,CH13,CH14の白領域と黒領域とを入れ換えたHaar特徴が用いられる場合も、Haar特徴が配置された画素領域の明暗差は、図7に示す方法によって演算される。
図8は、画素とHaar特徴との一致を検出するさらに他の方法を説明するための図である。図8を参照して、スキャンウィンドウSW1が図5に示す位置PS1に位置するとき、スキャンウィンドウSW1内に配置されたHaar特徴CH3(図4の(d)参照)は、第1列〜第6列と、第1行〜第6行とによって規定される画素領域に位置する。
Haar特徴CH3のうちの黒領域(図8においては、斜線領域)は、第4列〜第6列と、第1行〜第6行とによって規定される画素領域に位置し、Haar特徴CH3のうちの白領域は、第1列〜第3列と、第1行〜第6行とによって規定される画素領域に位置する。
ここで、第0列、第3列、および第6列における累積値をそれぞれP0,P3,P6とすると、白領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第6行の範囲において、(P3−P0)を演算した値になり、黒領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第6行の範囲において(P6−P3)を演算した値になる。
また、Haar特徴CH3が配置された画素領域の明暗差は、黒領域が位置する画素領域の輝度値の総和から白領域が位置する画素領域の輝度値の総和を減算したものになる。
したがって、Haar特徴CH3が配置された画素領域の明暗差は、第1行〜第6行の各行において(P6−P3)−(P3−P0)を演算し、その演算結果を列方向に累積加算した値になる。
その後、最終的に演算された明暗差がHaar特徴CH3の明暗差と一致するか否かが判定される。そして、最終的に演算された明暗差がHaar特徴CH3の明暗差に一致する場合、値αlが累積値qkに加算され、最終的に演算された明暗差がHaar特徴CH3の明暗差に一致しない場合、値βlが累積値qkに加算される。そうすると、累積値qkが位置PS1に対応付けられて記憶される。
なお、図4に示すパターン9のHaar特徴CH9が用いられた場合も、Haar特徴CH9が配置された画素領域の明暗差は、図8に示す方法によって演算される。
図9は、画素とHaar特徴との一致を検出するさらに他の方法を説明するための図である。図9を参照して、スキャンウィンドウSW1が図5に示す位置PS1に位置するとき、スキャンウィンドウSW1内に配置されたHaar特徴CH6(図4の(g)参照)は、第1列〜第6列と、第1行〜第6行とによって規定される画素領域に位置する。
Haar特徴CH6のうちの黒領域(図9においては、斜線領域)は、第1列〜第3列と、第1行〜第6行とによって規定される画素領域に位置し、Haar特徴CH6のうちの白領域は、第4列〜第6列と、第1行〜第6行とによって規定される画素領域に位置する。
ここで、第0列、第3列、および第6列における累積値をそれぞれP0,P3,P6とすると、黒領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第6行の範囲において(P3−P0)を演算した値になり、白領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第6行の範囲において、(P6−P3)を演算した値になる。
また、Haar特徴CH6が配置された画素領域の明暗差は、黒領域が位置する画素領域の輝度値の総和から白領域が位置する画素領域の輝度値の総和を減算したものになる。
したがって、Haar特徴CH6が配置された画素領域の明暗差は、第1行〜第6行の各行において(P3−P0)−(P6−P3)を演算し、その演算結果を列方向に累積加算した値になる。
その後、最終的に演算された明暗差がHaar特徴CH6の明暗差と一致するか否かが判定される。そして、最終的に演算された明暗差がHaar特徴CH6の明暗差に一致する場合、値αlが累積値qkに加算され、最終的に演算された明暗差がHaar特徴CH6の明暗差に一致しない場合、値βlが累積値qkに加算される。そうすると、累積値qkが位置PS1に対応付けられて記憶される。
なお、図4に示すパターン10のHaar特徴CH10が用いられた場合も、Haar特徴CH10が配置された画素領域の明暗差は、図9に示す方法によって演算される。
図10は、画素とHaar特徴との一致を検出するさらに他の方法を説明するための図である。図10を参照して、スキャンウィンドウSW1が図5に示す位置PS1に位置するとき、スキャンウィンドウSW1内に配置されたHaar特徴CH4(図4の(e)参照)は、第1列〜第6列と、第1行〜第6行とによって規定される画素領域に位置する。
Haar特徴CH4のうちの黒領域(図10においては、斜線領域)は、第1列〜第3列と、第4行〜第6行とによって規定される画素領域と、第4列〜第6列と、第1行〜第3行とによって規定される画素領域とに位置し、Haar特徴CH4のうちの白領域は、第1列〜第3列と、第1行〜第3行とによって規定される画素領域と、第4列〜第6列と、第4行〜第6行とによって規定される画素領域に位置する。
ここで、第0列、第3列、および第6列における累積値をそれぞれP0,P3,P6とすると、黒領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第3行の範囲において(P6−P3)を演算した値になり、第4行〜第6行の範囲において(P3−P0)を演算した値になる。また、白領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第3行の範囲において、(P3−P0)を演算した値になり、第4行〜第6行の範囲において、(P6−P3)を演算した値になる。
また、Haar特徴CH4が配置された画素領域の明暗差は、黒領域が位置する画素領域の輝度値の総和から白領域が位置する画素領域の輝度値の総和を減算したものになる。
したがって、Haar特徴CH4が配置された画素領域の明暗差は、各行において(P6−P3)−(P3−P0)を演算し、第1行〜第3行の範囲において、演算結果(P6−P3)−(P3−P0)を列方向に累積加算し、第4行〜第6行の範囲において演算結果(P6−P3)−(P3−P0)を列方向に累積減算した値になる。
その後、最終的に演算された明暗差がHaar特徴CH4の明暗差と一致するか否かが判定される。そして、最終的に演算された明暗差がHaar特徴CH4の明暗差に一致する場合、値αlが累積値qkに加算され、最終的に演算された明暗差がHaar特徴CH4の明暗差に一致しない場合、値βlが累積値qkに加算される。そうすると、累積値qkが位置PS1に対応付けられて記憶される。
なお、図4に示すパターン5のHaar特徴CH5が用いられた場合も、Haar特徴CH5が配置された画素領域の明暗差は、図10に示す方法によって演算される。
図4に示すパターン0〜パターン14のHaar特徴CH0〜CH14が配置された画素領域の明暗差は、上述した方法によって演算される。
一致処理モジュール4は、図5に示す方法によって、列方向に配置されたp個のスキャンウィンドウSW1〜SWp(各々がHaar特徴CH0を含む)を位置PS1〜PSkに順次移動させながら行方向に並行して走査し、スキャンウィンドウSW1〜SWpが各位置PS1〜PSkに配置されたときの画素領域の明暗差を上述した方法によって演算し、その演算した画素領域の明暗差がHaar特徴CH0の明暗差と一致するか否かを示す累積値qkを演算し、その演算した累積値qkを位置PS1〜PSkに対応付けて記憶する。
その後、一致処理モジュール4は、図5に示す方法によって、列方向に配置されたp個のスキャンウィンドウSW1〜SWp(各々がHaar特徴CH1を含む)を位置PS1〜PSkに順次移動させながら行方向に並行して走査し、スキャンウィンドウSW1〜SWpが各位置PS1〜PSkに配置されたときの画素領域の明暗差を上述した方法によって演算し、その演算した画素領域の明暗差がHaar特徴CH1の明暗差と一致するか否かを示す累積値qkを演算し、その演算した累積値qkを位置PS1〜PSkに対応付けて記憶する。
以下、同様にして、一致処理モジュール4は、図5に示す方法によって、列方向に配置されたp個のスキャンウィンドウSW1〜SWp(各々がHaar特徴CH14を含む)を位置PS1〜PSkに順次移動させながら行方向に並行して走査し、スキャンウィンドウSW1〜SWpが各位置PS1〜PSkに配置されたときの画素領域の明暗差を上述した方法によって演算し、その演算した画素領域の明暗差がHaar特徴CH14の明暗差と一致するか否かを示す累積値qkを演算し、その演算した累積値qkを位置PS1〜PSkに対応付けて記憶する。
このように、一致処理モジュール4は、図4に示す15個のHaar特徴CH0〜CH14の全てを用いて行方向に並行して入力画像を走査し、Haar特徴CH0〜CH14が配置された画素領域の明暗差とHaar特徴CH0〜CH14の明暗差との一致を検出する。
一致処理モジュール4は、15個のHaar特徴CH0〜CH14を含む15個のスキャンウィンドウのサイズが入力画像の行方向のサイズXmaxよりも大きくなるまで、または入力画像の列方向のサイズYmaxよりも大きくなるまで、上述した動作を繰返し実行する。すなわち、一致処理モジュール4は、Haar特徴CH0〜CH14を大きくしながらHaar特徴CH0〜CH14の明暗差に一致する画素領域の明暗差を検出する動作を繰返し実行する。
強識別器モジュール5は、位置PS1〜PSkに対応付けられた累積値q1〜qkを一致処理モジュール4から受ける。また、強識別器モジュール5は、顔を検出するためのしきい値Tを予め保持している。そして、強識別器モジュール5は、累積値q1〜qkをしきい値Tと比較し、しきい値T以上の累積値qn(n=1〜k)が検出されると、顔が検出されたと判定し、しきい値Tよりも小さい累積値qn(n=1〜k)が検出されると、顔が検出されなかったと判定する。
累積モジュール2、サイズ算出モジュール3、一致処理モジュール4および強識別器モジュール5は、入力画像の縮小回数が画像縮小回数Imaxに達するまで、入力画像のサイズを縮小しながら、上述した動作を繰返し実行する。
図11は、図1に示す特徴検出装置10の動作を説明するためのフローチャートである。図11を参照して、一連の動作が開始されると、h=0、i=0、j=0、k=0、l=0およびn=0が設定される(ステップS1)。
そして、画像縮小モジュール1は、式(3)に従って入力画像のサイズを縮小する(ステップS2)。その後、画像縮小モジュール1は、画像の縮小回数iがImax以下であるか否かを判定する(ステップS3)。
ステップS3において、画像の縮小回数iがImax以下であると判定されたとき、累積モジュール2は、1つの行に含まれる各画素の輝度を行方向に累積加算する累積処理を入力画像の全ての行に対して並行して行なう(ステップS4)。
より具体的には、累積モジュール2は、次式に従って各画素の輝度の累積値Phを演算する(ステップS41)。
なお、式(5)において、hは、1つの行において画素の輝度を累積する最後の列を表し、tは、0〜hであり、xhは、1つの行に含まれる各画素の輝度である。
ステップS41の後、累積モジュール2は、hがXmax以下であるか否かを判定する(ステップS42)。
ステップS42において、hがXmax以下であると判定されたとき、累積モジュール2は、h=h+1を設定する(ステップS43)。そして、一連の動作は、ステップS41に戻る。
そうすると、ステップS42において、hがXmaxよりも大きいと判定されるまで、上述したステップS41〜ステップS43が繰返し実行される。
そして、ステップS42において、hがXmaxよりも大きいと判定されると、累積モジュール2は、h=0を設定する(ステップS44)。
hは、最初、“0”に設定されているため、累積モジュール2は、ステップS41において、1つの行の0列目から0列目までの画素の輝度x0を加算する。つまり、累積モジュール2は、ステップS41が1回目に実行される場合、1つの行の0列目の画素の輝度x0を累積値Phとして演算する。
その後、累積モジュール2は、ステップS41を2回目に実行する場合、1つの行の0列目から1列目までの画素の輝度x0,x1を加算して累積値P1を演算する。
更に、累積モジュール2は、ステップS41を3回目に実行する場合、1つの行の0列目から2列目までの画素の輝度x0,x1,x2を加算して累積値P2を演算する。
以下、同様にして、累積モジュール2は、ステップS41をXmax+1回目に実行する場合、1つの行の0列目からXmax列目までの画素の輝度x0,x1,・・・,xXmaxを加算して累積値PXmaxを演算する。
したがって、累積モジュール2は、ステップS41〜ステップS43からなるループを1つの行に含まれる画素数分(Xmax個)だけ繰返し実行することによって、1つの行に含まれる各画素の輝度の累積値を演算する。
そして、累積モジュール2は、全ての行について、1つの行に含まれる各画素の輝度の累積値を演算する累積処理を並行して行なう。
累積モジュール2による輝度の累積処理が終了すると、顔判定が実行される(ステップS5)。
より具体的には、サイズ算出モジュール3は、式(4)に従って、スキャンウィンドウのサイズを算出する(ステップS51)。そして、サイズ算出モジュール3は、wejがXmaxまたはYmax以下であるか否かを判定する(ステップS52)。
ステップS52において、wejがXmaxまたはYmax以下でないと判定されたとき、サイズ算出モジュール3は、j=0を設定し、かつ、信号GSDを生成して画像縮小モジュール1へ出力し、画像縮小モジュール1は、信号GSDに応じてi=i+1を設定する(ステップS53)。その後、一連の動作は、ステップS2へ移行する。
一方、ステップS52において、wejがXmaxまたはYmax以下であると判定されたとき、サイズ算出モジュール3は、j=j+1を設定し(ステップS54)、各画素が累積値からなる入力画像と、スキャンウィンドウのサイズとを一致処理モジュール4へ出力する。
一致処理モジュール4は、各画素が累積値からなる入力画像と、スキャンウィンドウのサイズとをサイズ算出モジュール3から受ける。そして、一致処理モジュール4は、その受けたスキャンウィンドウのサイズを有し、かつ、l=0のHaar特徴CH0を含むスキャンウィンドウSW1を生成し、その生成したスキャンウィンドウSW1をポインタmkへ移動させる(ステップS55)。
その後、一致処理モジュール4は、その移動させた位置において、スキャンウィンドウSW1内の画像に対し、Haar特徴CH0の形状に基づく明暗差を上述した方法によって算出する(ステップS56)。
引き続いて、一致処理モジュール4は、スキャンウィンドウSW1内のHaar特徴の個数が2以上であるか否かを判定する(ステップS57)。
ステップS57において、スキャンウィンドウSW1内のHaar特徴の個数が2以上であると判定されたとき、一致処理モジュール4は、スキャンウィンドウSW1内に配置された2以上のHaar特徴を用いて上述した方法によって演算された複数の明暗差を加算する(ステップS58)。
そして、ステップS57において、スキャンウィンドウSW1内のHaar特徴の個数が2以上でないと判定されたとき、またはステップS58の後、一致処理モジュール4は、画素領域の明暗差がHaar特徴の明暗差に一致することを検証する。すなわち、一致処理モジュール4は、画素領域の明暗差に基づいて、Haar特徴との一致を検証する(ステップS59)。
その後、一致処理モジュール4は、画素領域の明暗差がHaar特徴の明暗差に一致する場合、rl=αlを用いて累積値qk=qk+rlを演算し、画素領域の明暗差がHaar特徴の明暗差に一致しない場合、rl=βlを用いて累積値qk=qk+rlを演算する(ステップS60)。そして、一致処理モジュール4は、ポイントmk(すなわち、位置PSk)に対応付けて累積値qkを記憶する。
その後、一致処理モジュール4は、mk+wejがXmax以下であるか否かを判定する(ステップS61)。すなわち、一致処理モジュール4は、スキャンウィンドウSW1が入力画像の行方向において入力画像内に位置するか否かを判定する。
ステップS61において、mk+wejがXmax以下であると判定されたとき、すなわち、スキャンウィンドウSW1が入力画像の行方向において入力画像内に位置すると判定されたとき、一致処理モジュール4は、k=k+1を設定する(ステップS62)。
そして、一連の動作は、ステップS55へ移行する。
その後、一致処理モジュール4は、ステップS61において、mk+wejがXmaxよりも大きいと判定されるまで、すなわち、スキャンウィンドウSW1の右端が入力画像の行方向において入力画像の右端を越えたと判定されるまで、上述したステップS55〜ステップS62を繰返し実行する。
kは、最初、“0”に設定されているため(ステップS1参照)、一致処理モジュール4は、ステップS55を1回目に実行する場合、スキャンウィンドウSW1を0列目の画素へ移動させる。そして、一致処理モジュール4は、スキャンウィンドウSW1内に配置されたHaar特徴CH0の形状に基づく明暗差を演算し(ステップS57参照)、累積値qkを演算する。
また、一致処理モジュール4は、ステップS55を2回目に実行する場合、スキャンウィンドウSW1をm列目の画素へ移動させる。そして、一致処理モジュール4は、スキャンウィンドウSW1内に配置されたHaar特徴CH0の形状に基づく明暗差を演算し(ステップS57参照)、累積値qkを演算する。
さらに、一致処理モジュール4は、ステップS55を3回目に実行する場合、スキャンウィンドウSW1を2m列目の画素へ移動させる。そして、一致処理モジュール4は、スキャンウィンドウSW1内に配置されたHaar特徴CH0の形状に基づく明暗差を演算し(ステップS57参照)、累積値qkを演算する。
そして、一致処理モジュール4は、スキャンウィンドウSW1の右端が入力画像の右端を越えるまで、スキャンウィンドウSW1の各位置においてHaar特徴CH0の形状に基づく明暗差を演算し(ステップS57参照)、累積値qkを演算する。
つまり、一致処理モジュール4は、行方向における1つの走査が終了するまで、各位置mk(=PS1〜PSk)においてHaar特徴CH0の形状に基づく明暗差を演算し(ステップS57参照)、累積値qkを演算する。
その後、ステップS61において、mk+wejがXmaxよりも大きいと判定されると、一致処理モジュール4は、lがLmax以下であるか否かをさらに判定する(ステップS63)。すなわち、一致処理モジュール4は、予め決定した顔検出用のHaar特徴の全てを用いたか否かを判定する。
ステップS63において、lがLmax以下であると判定されたとき、すなわち、全てのHaar特徴を用いていないと判定されたとき、一致処理モジュール4は、l=l+1およびk=0を設定する(ステップS64)。そして、一連の動作は、ステップS55へ移行する。
その後、ステップS63において、lがLmaxよりも大きいと判定されるまで、すなわち、全てのHaar特徴を用いたと判定されるまで、一致処理モジュール4は、ステップS55〜ステップS64を繰返し実行する。
そして、ステップS63において、lがLmaxよりも大きいと判定されると、すなわち、全てのHaar特徴を用いたと判定されると、一致処理モジュール4は、l=0を設定する(ステップS65)。
その後、一致処理モジュール4は、各位置mk(=PS1〜PSk)に対応付けられた累積値qkを強識別器モジュール5へ出力する。
強識別器モジュール5は、各位置mk(=PS1〜PSk)に対応付けられた累積値qkを一致処理モジュール4から受ける。そして、強識別器モジュール5は、累積値qn(n=1〜k)をしきい値Tと比較し、累積値qnがしきい値T以上であるとき、人間の顔を検出したと判定し、累積値qnがしきい値Tよりも小さいとき、人間の顔を検出しなかったと判定する(ステップS66)。
その後、強識別器モジュール5は、nがk以下であるか否かを判定する(ステップS67)。ステップS67において、nがk以下であると判定されたとき、強識別器モジュール5は、n=n+1を設定する(ステップS68)。そして、一連の動作は、ステップS66へ移行する。
その後、強識別器モジュール5は、ステップS67において、nがkよりも大きいと判定するまで、ステップS66〜ステップS68を繰返し実行する。すなわち、強識別器モジュール5は、スキャンウィンドウSW1の行方向への1回の走査の結果、演算されたk個の累積値q1〜qkの全てについて、顔が検出されたか否かを判定するまで、ステップS66〜ステップS68を繰返し実行する。
そして、強識別器モジュール5は、ステップS67において、nがkよりも大きいと判定すると、k=0およびn=0を設定する(ステップS69)。その後、一連の動作は、ステップS51へ移行する。
そして、ステップS52において、スキャンウィンドウのサイズwejがXmaxまたはYmaxよりも大きいと判定されるまで、ステップS51,S52の“YES”,ステップS55〜ステップS69が繰返し実行される。すなわち、スキャンウィンドウのサイズwejを大きくしながら、Haar特徴パターンの全てを用いたHaar特徴の形状に基づく明暗差の演算、Haar特徴の明暗差と画素領域の明暗差との一致の検証、および顔検出の判定が実行される。
ステップS5は、入力画像の列方向に配置されたp個のスキャンウィンドウSW1〜SWpの行方向への走査に対して並行して実行される。
そして、各ステップS5のステップS52において、スキャンウィンドウのサイズwejがXmaxまたはYmaxよりも大きいと判定されると、画像縮小モジュール1は、ステップS2において、画像サイズを縮小し、累積モジュール2は、ステップS4において、その縮小された画像サイズを有する入力画像の各画素の累積値を演算し、サイズ算出モジュール3は、ステップS51において、その縮小された画像サイズを有する入力画像に対してスキャンウィンドウのサイズを算出し、一致処理モジュール4は、その縮小された画像サイズを有する入力画像の各画素の累積値に基づいて、Haar特徴の形状に基づく画素領域の明暗差の演算、Haar特徴の明暗差と画素領域の明暗差との一致の検証、および顔検出の判定を実行する。
この場合、ステップS51〜ステップS69からなるループにおいて、縮小された入力画像に基づいて、スキャンウィンドウのサイズを大きくしながら、Haar特徴CH0〜CH14の全てに対して、Haar特徴の形状に基づく画素領域の明暗差の演算、Haar特徴の明暗差と画素領域の明暗差との一致の検証、および顔検出の判定が実行される。
したがって、迅速に顔を検出できる。
そして、ステップS3において、iがImax以下であると判定されると、i=0が設定され(ステップS6)、一連の動作が終了する。
なお、Haar特徴CH0〜CH14を用いた顔検出においては、Haar特徴CH0〜CH14は、任意の順番で用いられる。
このように、特徴検出装置10は、入力画像の各画素の輝度の累積演算を全ての行について並行して行ない(ステップS4参照)、複数のスキャンウィンドウSW1〜SWpを用いた行方向への走査を並行して行ない、Haar特徴の形状に基づく画素領域の明暗差の演算、Haar特徴の明暗差と画素領域の明暗差との一致の検証、および顔検出の判定を複数のスキャンウィンドウSW1〜SWpの行方向への走査に対して並行して行なう(ステップS5参照)。
したがって、Haar特徴を用いた顔検出を迅速に行なうことができる。
特に、図4に示すパターン7〜パターン14のHaar特徴CH7〜CH14のいずれかが用いられる場合、1つのスキャンウィンドウSWの行方向への走査によって、パターン0〜パターン6のHaar特徴CH0〜CH6を含む1つのスキャンウィンドウSWの行方向への走査を2回実行した効果が得られる。したがって、顔を迅速に検出することができる。
なお、サイズ算出モジュール3がステップS51においてスキャンウィンドウSWのサイズを大きくすると、スキャンウィンドウSWに含まれるHaar特徴(Haar特徴CH0〜CH14のいずれか)も大きくなるので、サイズ算出モジュール3がステップS51においてスキャンウィンドウSWのサイズを大きくすることは、Haar特徴(Haar特徴CH0〜CH14のいずれか)のサイズを大きくすることに相当する。
また、図4に示すパターン7〜パターン14のHaar特徴CH7〜CH14のいずれかが用いられる場合、一致処理モジュール4は、ステップS58において、Haar特徴CH7〜CH14の各々に含まれる複数の形状(=パターン)に基づく画素領域の明暗差を相互に加算する。
図12は、図1に示す特徴検出装置10のハード構成を示す構成図である。図12を参照して、特徴検出装置100は、メインメモリ110と、DMAC(Direct Memory Access Controller)120と、CPU(Central Processing Unit)130と、SIMD(Single Instruction Multiple Data)アクセラレータ140と、バスBSとを備える。
メインメモリ110、DMAC120、CPU130およびSIMDアクセラレータ140は、バスBSを介して相互に接続される。
メインメモリ110は、カメラによって撮影された画像データと、Haar特徴CH0〜CH14と、スキャンウィンドウの初期サイズと、スキャンウィンドウの行方向への移動量mとを格納する。また、メインメモリ110は、図11に示すフローチャートからなるプログラムを格納する。
DMAC120は、CPU130を介さないで、メインメモリ110に格納された画像データを1つのフレームずつバスBSを介して読み出し、その読み出した画像データをSIMDアクセラレータへ出力するコントローラとなっている。
CPU130は、この発明の実施の形態による顔検出を実行する場合、メインメモリ110からプログラムを読み出し、その読み出したプログラムを実行してDMAC120およびSIMDアクセラレータ140を制御する。また、CPU130は、バスBSを介して各画素が輝度からなる画像データをメインメモリ10から受け、その受けた画像データをSIMDアクセラレータ140へ出力する。さらに、CPU130は、バスBSを介してHaar特徴CH0〜CH14、スキャンウィンドウの初期サイズ、およびスキャンウィンドウの行方向への移動量mをメインメモリ110から読み出し、その読み出したHaar特徴CH0〜CH14、スキャンウィンドウの初期サイズ、およびスキャンウィンドウの行方向への移動量mをSIMDアクセラレータ140へ出力する。
SIMDアクセラレータ140は、CPU130からの制御に応じて、CPU130から画像データ、Haar特徴CH0〜CH14、スキャンウィンドウの初期サイズ、およびスキャンウィンドウの行方向への移動量mを受け、その受けた画像データ、Haar特徴CH0〜CH14、スキャンウィンドウの初期サイズ、およびスキャンウィンドウの行方向への移動量mに基づいて、図11に示すフローチャートに従って各画像データ中の人間の顔を検出する。そして、SIMDアクセラレータ140は、その検出した顔をCPU130へ出力する。
図13は、図12に示すSIMDアクセラレータ140の構成図である。図13を参照して、SIMDアクセラレータ140は、コントローラ1401と、演算領域1402,1405,1407と、データ蓄積領域1403と、演算器(PE:Processing Element)1404と、結果領域1406と、システム領域1408とを含む。
コントローラ1401は、登録部1410〜1414を含む。そして、コントローラ1401は、CPU130から画像データ、Haar特徴CH0〜CH14、スキャンウィンドウの初期サイズ、およびスキャンウィンドウの行方向への移動量mを受ける。そして、コントローラ1401は、画像データをデータ蓄積領域1403に格納し、Haar特徴CH0〜CH14を登録部1410に格納し、スキャンウィンドウの初期サイズを登録部1411に格納し、スキャンウィンドウの行方向への移動量mを登録部1412に格納する。
また、コントローラ1401は、図11に示すステップS51に従ってスキャンウィンドウのサイズを算出する。
さらに、コントローラ1401は、図11に示すS52に従って、wejがXmaxまたはYmax以下であるか否かを判定し、wejがXmaxまたはYmaxよりも大きいと判定したとき、信号GSDを生成する。
さらに、コントローラ1401は、学習によって予め作製されたHaar特徴を含むスキャンウィンドウのサイズを、その算出したスキャンウィンドウのサイズに設定する。そして、コントローラ1401は、そのサイズを設定したスキャンウィンドウSWおよびスキャンウィンドウSWの行方向への移動量mを演算器1404へ出力する。
さらに、コントローラ1401は、図11に示すステップS63において、lがLmax以下であると判定するごとに、別のHaar特徴を含むスキャンウィンドウSWを作成して演算器1404へ出力する。
さらに、コントローラ1401は、登録部1413に予め格納されたしきい値Tを読み出し、累積値qnを結果領域1406から読み出す。そして、コントローラ1401は、図11に示すステップS66〜ステップS68に従って、演算領域1407を用いて、各累積値qnをしきい値Tと比較して人間の顔を検出する。そして、コントローラ1401は、その検出結果をCPU130を介してメインメモリ110へ出力する。
演算器1404は、図11に示すステップS4に従って、データ蓄積領域1403に格納された画像データの各画素の輝度の累積加算を演算領域1402を用いて全ての行について並行して行ない、その累積値をデータ蓄積領域1403に格納する。
また、演算器1404は、コントローラ1401からスキャンウィンドウSWおよびスキャンウィンドウSWの行方向への移動量mを受ける。そして、演算器1404は、その受けたスキャンウィンドウSWおよびスキャンウィンドウSWの行方向への移動量mに基づいて、図11に示すステップS55〜ステップS62を実行する。この場合、演算器1404は、Haar特徴の形状に基づく画素領域の明暗差の演算を演算領域1405を用いて複数のスキャンウィンドウの行方向への走査に対して並行して行なう。また、演算器1404は、Haar特徴の明暗差と、Haar特徴の形状に基づく画素領域の明暗差との一致を検証し、その検証結果を示す累積値qkを結果領域1406を用いて演算する。
演算領域1402,1405,1407は、各種の演算に用いられる領域である。また、システム領域1408は、システムの使用領域である。
演算器1404は、ステップS4に従って各画素の輝度の累積値を演算する場合、1つの行において隣接する2つの列に属する2つの画素の2つの輝度を1クロックで2ビットずつデータ蓄積領域1403から読み出して加算する。
また、演算器1404は、ステップS56に従って、Haar特徴の形状に基づく画素領域の明暗差を演算する場合、行方向(水平方向)の累積値の減算を列方向に配置された複数のスキャンウィンドウSW内に含まれる複数のHaar特徴の形状に基づく複数の画素領域に対して並行して行ない、その演算結果を列方向(垂直方向)に加減算してHaar特徴の形状に基づく画素領域の明暗差を演算する。
このように、SIMDアクセラレータ140は、並列処理に適した演算器である。
SIMDアクセラレータ140の演算器1404は、図1に示す累積モジュール2および一致処理モジュール4を構成し、SIMDアクセラレータ140のコントローラ1401は、図1に示すサイズ算出モジュール3および強識別器モジュール5を構成する。
なお、上記においては、特徴検出装置10について説明したが、この発明によれば、これに限らず、特徴検出装置10は、画像データ中の人間の顔以外の何からの特徴を上述した方法によって検出するものであればよい。この場合、Haar特徴は、特徴を画素の明暗の差によって表したものとして定義される。
また、上記においては、複数のスキャンウィンドウSW1〜SWpを1行ずつ列方向にずらせて配置し、複数のスキャンウィンドウSW1〜SWpを行方向に並行して走査すると説明したが、この発明の実施の形態においては、これに限らず、複数のスキャンウィンドウSW1〜SWpを任意の行数ずつ列方向にずらせて配置し、複数のスキャンウィンドウSW1〜SWpを行方向に並行して走査してもよい。
特に、複数の形状からなるHaar特徴CH7〜CH14が用いられる場合、複数のパターンの一方が既に走査した行を重複して行方向に走査しないように複数のスキャンウィンドウSW1〜SWpを列方向にずらせて配置し、複数のスキャンウィンドウSW1〜SWpを行方向に並行して走査する。これによって、1回の行方向への走査に用いる複数のスキャンウィンドウSW1〜SWpの個数を最小限にでき、Haar特徴の形状に基づく画素領域の明暗差の演算、Haar特徴の形状に基づく画素領域の明暗差とHaar特徴の明暗差との一致の検証処理、その一致結果を示す累積値qkの演算、および累積値qkおよびしきい値Tに基づく顔検出処理を少なくでき、顔の検出を更に迅速に行なうことができる。
さらに、上記においては、特徴検出装置10は、入力画像のサイズを縮小しながら人間の顔を検出すると説明したが、この発明の実施の形態においては、これに限らず、特徴検出装置10は、入力画像のサイズを一定に保持したまま入力画像から人間の顔を検出してもよい。この場合、特徴検出装置10は、図11に示すステップS4,S5に従って人間の顔を検出する。ステップS4,S5が入力画像の行方向に対して並行して実行されれば、人間の顔を迅速に検出できるからである。
さらに、この発明の実施の形態においては、特徴検出装置10は、スキャンウィンドウのサイズを一定にして人間の顔を検出してもよい。ステップS4、およびステップS5のステップS55〜ステップS69が行方向に並行して実行されれば、人間の顔を迅速に検出できるからである。
さらに、この発明の実施の形態においては、各画素の輝度の累積加算、Haar特徴の形状に基づく画素領域の明暗差の演算、およびHaar特徴の形状に基づく画素領域の明暗差とHaar特徴の明暗差との一致の検証は、列方向に並行して行なわれてもよい。すなわち、この発明の実施の形態による特徴検出装置は、各画素の輝度の累積加算、Haar特徴の形状に基づく画素領域の明暗差の演算、およびHaar特徴の形状に基づく画素領域の明暗差とHaar特徴の明暗差との一致の検証を入力画像の行方向および列方向のいずれか一方の方向に対して並行して行なうものであればよい。
Haar特徴の形状に基づく画素領域の明暗差とHaar特徴の明暗差との一致の検証が列方向に並行して行なわれる場合、複数のパターンからなるHaar特徴は、上述した条件Cnd1,Cnd2を満たす。
さらに、この発明の実施の形態においては、パターン7〜パターン14によって示されるHaar特徴CH7〜CH14に限らず、並列処理に適したHaar特徴であれば、どのような形状のHaar特徴が用いられてもよい。
さらに、この発明の実施の形態においては、図11に示すステップS4において実行される各画素の輝度の累積加算の処理は、「累積処理」を構成する。
さらに、この発明の実施の形態においては、図11に示すステップS60において演算される累積値qkは、「個数累積値」を構成する。
さらに、この発明の実施の形態においては、図11に示すフローチャートは、この発明の実施の形態による顔の検出をコンピュータに実行させるためのプログラムを構成する。そして、プログラムを記録したメインメモリ110は、プログラムを記録したコンピュータ(CPU)読み取り可能な記録媒体を構成する。
さらに、この発明の実施の形態においては、サイズ算出モジュール3および一致処理モジュール4は、「特徴検出モジュール」を構成し、強識別器モジュール5は、「特徴判定モジュール」を構成する。
さらに、この発明の実施の形態においては、Haar特徴CH0〜CH6の各々は、「単一Haar特徴」を構成し、Haar特徴CH7〜CH14の各々は、「混合Haar特徴」を構成する。
図12の点線で囲った部分は、実施の形態における特徴検出装置の特徴的な構成部を集積回路化した場合の一例を示す。LSI(Large Scale Integrated circuite)200は、集積回路の一例であり、点線で囲まれている範囲に含まれる構成部の機能を実現する。
集積回路は、集積度の違いや集積されている機能の違いにより、IC(Integrated Circuite)、システムLSI、スーパーLSI、ウルトラLSIと呼称されることもある。
また、集積回路は、LSIに限るものではなく、専用回路または汎用プロセッサによって実現されてもよい。LSIを作製後にプログラムを格納することが可能なFPGA(Field Programmable Gate Array)や、LSI回路の回路セルの接続や設定を再構成することが可能なリコンフィギュラブル・プロセッサが利用されてもよい。
さらには、半導体技術の進歩または派生する別技術によりLSIに置き換わる集積回路化の技術(バイオ技術、有機化学技術等)が登場すれば、当然、その技術を用いて上述した機能の集積化が行なわれてよい。
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した実施の形態の説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。