特徴検出装置、特徴検出をコンピュータに実行させるためのプログラム、およびそのプログラムを記録したコンピュータ読み取り可能な記録媒体
【課題】特徴を迅速に検出可能な特徴検出装置を提供する。
【解決手段】累積モジュールは、全ての行に対して、1つの行に含まれる各画素の輝度の累積値を行方向へ並行して累積する(ステップS4)。そして、一致処理モジュールは、複数のスキャンウィンドウを行方向に並行して走査し、Haar特徴の形状に基づく画素領域の明暗差を演算し、その演算した画素領域の明暗差とHaar特徴の明暗差との一致を検証し、その一致の検証結果である累積値qkを演算する処理を行方向に並行して実行する。強識別器モジュールは、その累積値qkをしきい値Tと比較し、しきい値T以上の累積値qkが検出されると、人間の顔を検出したと判定する処理を行方向に並行して実行する。
【解決手段】累積モジュールは、全ての行に対して、1つの行に含まれる各画素の輝度の累積値を行方向へ並行して累積する(ステップS4)。そして、一致処理モジュールは、複数のスキャンウィンドウを行方向に並行して走査し、Haar特徴の形状に基づく画素領域の明暗差を演算し、その演算した画素領域の明暗差とHaar特徴の明暗差との一致を検証し、その一致の検証結果である累積値qkを演算する処理を行方向に並行して実行する。強識別器モジュールは、その累積値qkをしきい値Tと比較し、しきい値T以上の累積値qkが検出されると、人間の顔を検出したと判定する処理を行方向に並行して実行する。
【発明の詳細な説明】
【技術分野】
【0001】
この発明は、特徴検出装置、特徴検出をコンピュータに実行させるためのプログラム、およびそのプログラムを記録したコンピュータ読み取り可能な記録媒体に関するものである。
【背景技術】
【0002】
近年、画像などから意味のある特徴を抽出する技術が盛んに研究されている。そして、この技術は、ロボットビジョン、侵入者の監視、および入出管理等のセキュリティシステム、携帯電話、プリンタ、デジタルカメラ等のデジタル家電機器等、多岐にわたる分野で応用されている。
【0003】
特徴抽出アルゴリズムには、サポートベクターマシン(非特許文献1)またはブースティング(非特許文献2,3)を用いたものが知られている。この特徴抽出アルゴリズムは、高い動作周波数のプロセッサまたはDSP(Digital Signal Processor)において、ビデオレート(30fps)での処理が可能なレベルに達してきている。
【0004】
特に、Viola等によって開発された顔検出器は、高い識別性能と高速な処理を両立した手法である(非特許文献2,3)。これは、人間の顔の特徴を画素の明暗差で表したHaar特徴を用いた高速演算可能な顔検出器を用いることと、少数の弱識別器をAdaBoostアルゴリズムで組み合わせることにより、高い識別率と高速な処理が実現可能であることを示している。この手法は、物体における、ある画素領域間の明暗差を捉える弱識別器で構成されているため、絶対的な明度値に依存せず、照明条件の変動やノイズの影響を小さくできるという利点がある。また、このような検出処理に有効な明暗特徴は、様々な物体に適用できるため、様々な物体の検出に幅広く用いることができる。実際に、犬の顔および車の検出と言った人の顔以外のオブジェクトに対しての検出を行った例も存在する(非特許文献4,5)。
【0005】
また、Haar特徴を用いて1つのフレームに含まれる顔を並列して検出する並列顔検出処理手法が知られている(非特許文献7〜9)。
【先行技術文献】
【非特許文献】
【0006】
【非特許文献1】E. Osuna, R. Freund, and F. Girosi, “Training support vector machines: An application to face detection,” In Proc. Of Conf. Computer Vision and Pattern Recognition, pp. 130-136, 1997.
【非特許文献2】P. Viola and M. Jones, “Robust real-time object detection,” In IEEE ICCV Workshop on Statistical and Computational Theories of Vision, July 2001.
【非特許文献3】P. Viola and M. Jones, “Rapid object detection using a boosted cascade of simple feature,” In Proc. Of the IEEE Conf. on Computer Vision and Pattern Recognition, pp. 905-910, 2001.
【非特許文献4】賀谷晃太,“2クラス判別学習による類似特徴を有した異種物体認識システムの研究” 修士論文,広島大学,2007.
【非特許文献5】谷川昌司,日高章理,佐野夏樹,西田健次,栗田多喜夫,“矩形特徴による弱識別器のブースティングによる対象検出手法の汎化性能向上のための工夫と車載カメラの映像中の車の検出への応用,”ISS05, 2005.
【非特許文献6】Open source Computer Vision Library http://opencv.jp
【非特許文献7】熊木 武志,田上 正治,今井 雄太,小出 哲士,マタウシュ ハンス ユルゲン,“超並列SIMD型演算プロセッサMX-1を用いた並列顔検出処理手法 (1)”,2008年電子情報通信学会ソサイエティ大会,C-12-30,(2008.9).
【非特許文献8】今井 雄太,熊木 武志,田上 正治,小出 哲士,マタウシュ ハンス ユルゲン,“超並列SIMD型演算プロセッサMX-1による並列顔検出処理手法 (2)”,2008年電子情報通信学会ソサイエティ大会,C-12-31,(2008.9).
【非特許文献9】Y. Imai, T. Kumaki, T. Koide, H. J. Mattausch, “High-Speed Face Detectionin Images with Massive-Parallel Bit-Serial SIMD Processor Using Haar-LikeFeatures,” Extended Abstracts of the 2009 International Conference on Solid State Devices and Materials (SSDM2009),pp.464-465,(2009.10).
【発明の概要】
【発明が解決しようとする課題】
【0007】
従来のプロセッサは、積分画像(Integral Image)ii(x, y)を用いてHaar特徴を計算する。このIntegral Image ii(x, y)は、画像の原点から座標(x, y)までの輝度値の和を計算したものである。そして、入力画像i(x, y)から求められるIntegral Image ii(x, y)は、次式によって表される。
【0008】
【数1】
【0009】
そして、図14のD領域の輝度値を求めたい場合、D領域の輝度値は、図14に示す4点のIntegral Image P1〜P4を用いて次式によって表される。
【0010】
【数2】
【0011】
しかし、並列プロセッサにおいてIntegral Imageを用いて各領域の輝度値の和を求めると、並列プロセッサは、Integral Imageを座標(x,y)から求めるため、非常に多くの計算を行う必要があり、各領域の輝度値の和を迅速に求めることが困難であるという問題がある。したがって、顔検出を迅速に行うことが困難である。
【0012】
そこで、この発明は、かかる問題を解決するためになされたものであり、その目的は、特徴を迅速に検出可能な特徴検出装置を提供することである。
【0013】
また、この発明の別の目的は、特徴の迅速な検出をコンピュータに実行させるためのプログラムを提供することである。
【0014】
さらに、この発明の別の目的は、特徴の迅速な検出をコンピュータに実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体を提供することである。
【課題を解決するための手段】
【0015】
この発明によれば、特徴検出装置は、累積モジュールと、特徴検出モジュールと、特徴判定モジュールとを備える。累積モジュールは、1つのフレームを構成し、かつ、行方向および列方向に配列された複数の画素の複数の輝度に基づいて1つの行および1つの列のいずれか一方に含まれる各画素の輝度の累積値を行方向または列方向に演算する累積処理を全ての行または全ての列に対して並行して実行する。特徴検出モジュールは、特徴を画素の明暗の差によって表したHaar特徴を行方向または列方向に所望の画素数分ずつ移動させながら走査してHaar特徴の明暗差に一致する明暗差を有する画素領域の個数の累積値である個数累積値をHaar特徴を複数のHaar特徴に変えながら演算する特徴検出処理を並列して実行する。特徴判定モジュールは、特徴検出処理が実行されたときに同じ画素領域に対して演算された複数の個数累積値をしきい値と比較し、しきい値以上の個数累積値が検出されたとき、特徴を検出したと判定し、しきい値よりも小さい個数累積値が検出されたとき、特徴が検出されなかったと判定する判定処理を並列して実行する。累積処理は、1つの行の左端の画素を第0番目の画素とした場合、第0番目の画素の輝度から第g(gは正の整数)番目の画素における輝度までを加算した値を第h番目の画素の累積値とする処理である。複数の走査は、列方向または行方向の相互に異なる複数の位置におけるHaar特徴の走査からなる。複数のHaar特徴は、白領域と黒領域とによって構成された1つのパターンからなる単一Haar特徴と、各々が白領域と黒領域とによって構成された複数のパターンからなる混合Haar特徴とを含む。
【0016】
好ましくは、特徴検出モジュールは、サイズ算出モジュールと、一致処理モジュールとを含む。サイズ算出モジュールは、複数のHaar特徴のサイズを算出する。一致処理モジュールは、サイズ算出モジュールによって算出されたサイズを有する複数のHaar特徴を用いて特徴検出処理を並列して実行する。そして、サイズ算出モジュールは、一致処理モジュールが複数のHaar特徴の1つのサイズに対して特徴検出処理を並列して実行するとともに特徴判定モジュールが複数のHaar特徴の1つのサイズに対して判定処理を並列して実行するごとに複数のHaar特徴のサイズを大きくする。
【0017】
好ましくは、特徴検出装置は、画像縮小モジュールを更に備える。画像縮小モジュールは、1つのフレームのサイズを縮小する。サイズ算出モジュールは、各Haar特徴を含む走査ウィンドウのサイズを算出する。画像縮小モジュールは、走査ウィンドウのサイズが1つのフレームの行方向のサイズまたは1つのフレームの列方向のサイズよりも大きくなるごとに1つのフレームのサイズを縮小する。
【0018】
好ましくは、混合Haar特徴の複数のパターンは、行方向および列方向の幅が相互に同じであり、かつ、行方向の両端の位置が相互に同じである。
【0019】
好ましくは、累積モジュールは、メモリと演算器とを含み、かつ、演算器がメモリから同じクロックでデータを読み出して演算する演算装置によって累積処理を実行する。特徴検出モジュールは、演算装置によって個数累積値を演算する。
【0020】
また、この発明によれば、プログラムは、特徴検出をコンピュータに実行させるためのプログラムであって、累積モジュールが、1つのフレームを構成し、かつ、行方向および列方向に配列された複数の画素の複数の輝度に基づいて1つの行および1つの列のいずれか一方に含まれる各画素の輝度の累積値を行方向または列方向に演算する累積処理を全ての行または全ての列に対して並行して実行する第1のステップと、特徴検出モジュールが、特徴を画素の明暗の差によって表したHaar特徴を行方向または列方向に所望の画素数分ずつ移動させながら走査してHaar特徴の明暗差に一致する明暗差を有する画素領域の個数の累積値である個数累積値をHaar特徴を複数のHaar特徴に変えながら演算する特徴検出処理を並列して実行する第2のステップと、特徴判定モジュールが、特徴検出処理が実行されたときに同じ画素領域に対して演算された複数の個数累積値をしきい値と比較し、しきい値以上の個数累積値が検出されたとき、特徴を検出したと判定し、しきい値よりも小さい個数累積値が検出されたとき、特徴が検出されなかったと判定する判定処理を並列して実行する第3のステップとをコンピュータに実行させる。累積処理は、1つの行の左端の画素を第0番目の画素とした場合、第0番目の画素の輝度から第g(gは正の整数)番目の画素における輝度までを加算した値を第h番目の画素の累積値とする処理である。複数の走査は、列方向または行方向の相互に異なる複数の位置におけるHaar特徴の走査からなる。複数のHaar特徴は、白領域と黒領域とによって構成された1つのパターンからなる単一Haar特徴と、各々が白領域と黒領域とによって構成された複数のパターンからなる混合Haar特徴とを含む。
【0021】
好ましくは、第2のステップは、サイズ算出モジュールが、複数のHaar特徴のサイズを算出する第1のサブステップと、一致処理モジュールが、サイズ算出モジュールによって算出されたサイズを有する複数のHaar特徴を用いて特徴検出処理を並列して実行する第2のサブステップとを含む。サイズ算出モジュールは、第1のサブステップにおいて、一致処理モジュールが複数のHaar特徴の1つのサイズに対して特徴検出処理を並列して実行するとともに特徴判定モジュールが複数のHaar特徴の1つのサイズに対して判定処理を並列して実行するごとに複数のHaar特徴のサイズを大きくする。
【0022】
好ましくは、プログラムは、画像縮小モジュールが、1つのフレームのサイズを縮小する第4のステップを更にコンピュータに実行させ、サイズ算出モジュールは、第1のサブステップにおいて、各Haar特徴を含む走査ウィンドウのサイズを算出し、画像縮小モジュールは、第4のステップにおいて、走査ウィンドウのサイズが1つのフレームの行方向のサイズまたは1つのフレームの列方向のサイズよりも大きくなるごとに1つのフレームのサイズを縮小する。
【0023】
好ましくは、混合Haar特徴の複数のパターンは、行方向および列方向の幅が相互に同じであり、かつ、行方向の両端の位置が相互に同じである。
【0024】
さらに、この発明によれば、記録媒体は、請求項6から請求項9のいずれか1項に記載のプログラムを記録したコンピュータ読み取り可能な記録媒体である。
【発明の効果】
【0025】
この発明においては、入力画像の各画素の輝度を累積する累積処理は、入力画像の行方向または列方向へ並行して実行される。また、Haar特徴の形状に基づく画素領域の明暗差の演算、Haar特徴の形状に基づく画素領域の明暗差とHaar特徴の明暗差との一致の検証および一致の検証の結果を示す累積値に基づく特徴検出が入力画像の行方向または列方向へ並行して実行される。
【0026】
したがって、この発明によれば、特徴を迅速に検出できる。
【図面の簡単な説明】
【0027】
【図1】この発明の実施の形態による特徴検出装置の機能ブロック図である。
【図2】入力画像の概念図である。
【図3】画素の輝度の累積値を計算する方法を説明するための図である。
【図4】この発明の実施の形態におけるHaar特徴の概念図である。
【図5】スキャンウィンドウの走査方法を説明するための図である。
【図6】画素とHaar特徴との一致を検出する方法を説明するための図である。
【図7】画素とHaar特徴との一致を検出する他の方法を説明するための図である。
【図8】画素とHaar特徴との一致を検出するさらに他の方法を説明するための図である。
【図9】画素とHaar特徴との一致を検出するさらに他の方法を説明するための図である。
【図10】画素とHaar特徴との一致を検出するさらに他の方法を説明するための図である。
【図11】図1に示す特徴検出装置の動作を説明するためのフローチャートである。
【図12】図1に示す特徴検出装置のハード構成を示す構成図である。
【図13】図12に示すSIMDアクセラレータの構成図である。
【図14】従来の積分画像(Integral Image)を説明するための図である。
【発明を実施するための最良の形態】
【0028】
本発明の実施の形態について図面を参照しながら詳細に説明する。なお、図中同一または相当部分には同一符号を付してその説明は繰返さない。
【0029】
図1は、この発明の実施の形態による特徴検出装置の機能ブロック図である。図1を参照して、この発明の実施の形態による特徴検出装置10は、画像縮小モジュール1と、累積モジュール2と、サイズ算出モジュール3と、一致処理モジュール4と、強識別器モジュール5とを含む。
【0030】
画像縮小モジュール1は、各フレームからなる入力画像を受ける。各フレームは、行方向および列方向に配列された複数の画素からなる。複数の画素の各々は、画素の輝度からなる。画像縮小モジュール1は、入力画像を受けると、その受けた入力画像を後述する方法によって縮小する。そして、画像縮小モジュール1は、その縮小した入力画像を累積モジュール2へ出力する。
【0031】
また、画像縮小モジュール1は、画像を縮小するための信号GSDをサイズ算出モジュール3から受けると、その受けた信号GSDに応じて入力画像を後述する方法によって縮小する。そして、画像縮小モジュール1は、その縮小した入力画像を累積モジュール2へ出力する。
【0032】
累積モジュール2は、画像縮小モジュール1から入力画像を受ける。そして、累積モジュール2は、その受けた入力画像の複数の画素の複数の輝度に基づいて、後述する方法によって、各画素の輝度の累積値を演算する。そうすると、累積モジュール2は、各画素が輝度の累積値からなる入力画像をサイズ算出モジュール3へ出力する。
【0033】
サイズ算出モジュール3は、各画素が輝度の累積値からなる入力画像を累積モジュール2から受ける。そして、サイズ算出モジュール3は、後述する方法によって、スキャンウィンドウのサイズを算出する。ここで、スキャンウィンドウとは、人間の顔の特徴を明暗差で表したHaar特徴を含み、各フレームからHaar特徴に一致する特徴を検出するために用いられるものである。
【0034】
その後、サイズ算出モジュール3は、その演算したスキャンウィンドウのサイズが入力画像の行方向の幅または列方向の幅以下であるか否かを判定する。そして、サイズ算出モジュール3は、スキャンウィンドウのサイズが入力画像の行方向の幅または列方向の幅以下であると判定したとき、その算出したスキャンウィンドウのサイズと、入力画像とを一致処理モジュール4へ出力する。
【0035】
一方、サイズ算出モジュール3は、スキャンウィンドウのサイズが入力画像の行方向の幅または列方向の幅よりも大きいと判定したとき、信号GSDを生成し、その生成した信号GSDを画像縮小モジュール1へ出力する。
【0036】
一致処理モジュール4は、スキャンウィンドウのサイズと入力画像とをサイズ算出モジュール3から受ける。そして、一致処理モジュール4は、Haar特徴、スキャンウィンドウのサイズおよび入力画像に基づいて、後述する方法によって、Haar特徴の明暗差に一致する明暗差を有する画素領域の個数の累積値である個数累積値を検出する。そうすると、一致処理モジュール4は、その検出した個数累積値を強識別器モジュール5へ出力する。
【0037】
強識別器モジュール5は、一致処理モジュール4から個数累積値を受ける。そして、強識別器モジュール5は、その受けた個数累積値に基づいて、後述する方法によって、人間の顔を検出する。
【0038】
図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座標からなる。
【0039】
図1に示す画像縮小モジュール1は、画像縮小率s(sは、s>1を満たす実数)を予め保持している。そして、画像縮小モジュール1は、次式によって、入力画像の画像サイズPicture sizeを縮小する。
【0040】
【数3】
【0041】
なお、式(3)において、iは、0,1,2,3,・・・である。
【0042】
画像縮小モジュール1は、i=0であるとき、式(3)に従って、自律的に入力画像を縮小する。また、画像縮小モジュール1は、iが1以上であるとき、サイズ算出モジュール3からの信号GSDに応じて、式(3)に従って入力画像を縮小する。この場合、画像縮小モジュール1は、iが画像縮小回数Imaxに達するまで、式(3)に従って入力画像を縮小する。この画像縮小回数Imaxは、予め決定されている画像の縮小回数の最大数である。
【0043】
そして、画像縮小モジュール1は、式(3)によって入力画像を1回縮小するごとに、その縮小した入力画像を累積モジュール2へ出力する。
【0044】
図3は、画素の輝度の累積値を計算する方法を説明するための図である。図3を参照して、入力画像の複数の画素の各々は、画素の輝度からなる((a)参照)。
【0045】
0列目の各画素の累積値は、0列目の各画素の輝度からなる。1列目の各画素の累積値は、0列目の各画素の輝度と、1列目の各画素の輝度との和からなる。2列目の各画素の累積値は、0列目の各画素の輝度と、1列目の各画素の輝度と、2列目の各画素の輝度との和からなる。そして、一般的に、g(gは正の整数)列目の画素の累積値は、0列目の各画素の輝度からg列目の各画素の輝度までの和からなる(図3の(b)参照)。
【0046】
図1に示す累積モジュール2は、図3に示す計算方法に従って、各行の各画素の累積値を演算する累積処理を実行する。そして、累積モジュール2は、列方向に配置された複数の行に対して累積処理を並行して実行する。
【0047】
累積モジュール2は、各行の画素の累積値を演算すると、各画素が累積値からなる入力画像をサイズ算出モジュール3へ出力する。
【0048】
このように、累積モジュール2は、複数の行に対して、画素の輝度の累積処理を並行して実行する。したがって、入力画像を構成する複数の画素の累積値を迅速に演算できる。
【0049】
サイズ算出モジュール3は、スキャンウィンドウの初期サイズwと、スキャンウィンドウの拡大率e(eは、1よりも大きい実数)とを予め保持している。初期サイズwは、たとえば、20ピクセル×20ピクセルからなる。
【0050】
サイズ算出モジュール3は、初期サイズw、拡大率eおよび拡大回数j(jは正の整数)を次式に代入してスキャンウィンドウのサイズScan window sizeを算出する。ここで、拡大回数jは、スキャンウィンドウを拡大する回数である。
【0051】
【数4】
【0052】
そして、サイズ算出モジュール3は、wej≦Xmaxであるか、またはwej≦Ymaxであるかを判定する。
【0053】
サイズ算出モジュール3は、wej≦Xmaxである、またはwej≦Ymaxであるとき、その算出したスキャンウィンドウのサイズScan window sizeと、各画素が累積値からなる入力画像とを一致処理モジュール4へ出力する。
【0054】
一方、サイズ算出モジュール3は、wejがXmaxおよびYmaxのいずれか一方よりも大きいとき、信号GSDを生成し、その生成した信号GSDを画像縮小モジュール1へ出力する。
【0055】
図4は、この発明の実施の形態におけるHaar特徴の概念図である。図4を参照して、この発明の実施の形態におけるHaar特徴は、パターン0〜パターン14によって示される15個のHaar特徴CH0〜CH14からなる。そして、15個のHaar特徴CH0〜CH14の各々は、黒領域と白領域とからなる。
【0056】
なお、図4においては、パターン0〜パターン14の四角形の枠は、スキャンウィンドウを表す。
【0057】
パターン0〜パターン6は、白領域と黒領域とによって構成された1個のパターンからなるHaar特徴CH0〜CH6がスキャンウィンドウ内の所望の位置に配置される。そして、Haar特徴CH0〜CH6は、OpenCVで用いられているHaar特徴である(非特許文献6)。
【0058】
パターン7〜パターン14は、各々が白領域と黒領域とによって構成された複数のパターンからなるHaar特徴CH7〜CH14がスキャンウィンドウ内の所望の位置に配置される。そして、パターン7〜パターン14によって示されるHaar特徴CH7〜CH14は、この発明によって新たに考案されたパターンであり、並列処理に適したものである。なお、パターン7〜パターン14によって示されるHaar特徴CH7〜CH14の各々は、「混合Haar特徴」を構成する。
【0059】
複数のパターンからなるHaar特徴をスキャンウィンドウ内に配置する場合の条件は、次のとおりである。
【0060】
Cnd1)複数のパターンの横幅(=行方向の幅)が同じサイズであり、かつ、複数のパターンの左端および右端(横方向(=行方向)の両端)の位置が同じである。
【0061】
Cnd2)複数のパターンの縦幅(=列方向の幅)が同じサイズである。
【0062】
水平方向(=行方向)に画素の輝度を累積加算する方式の場合、矩形領域の輝度値の総和をHaar特徴の右端の累積値から左端の累積値を減算することによって実現している。そのため、複数のパターンの間で、パターンの右端と左端とが揃っていれば、並列に同時に演算可能である。したがって、複数のパターンからなるHaar特徴をスキャンウィンドウ内に配置する場合、条件Cnd1が必要となる。
【0063】
また、複数のパターンの縦幅が同じである場合、垂直方向(列方向)に加算を行う回数が同一であるため、並列に処理が可能である。したがって、複数のパターンからなるHaar特徴をスキャンウィンドウ内に配置する場合、条件Cnd2が必要である。
【0064】
パターン0〜パターン14は、人間の顔の特徴に基づいて予め決定されたものである。そして、一致処理モジュール4は、パターン0〜パターン14を予め保持している。
【0065】
図5は、スキャンウィンドウの走査方法を説明するための図である。なお、図5においては、図4の(a)に示すパターン0からなるHaar特徴を配置したスキャンウィンドウSW1を例としてスキャンウィンドウの走査方法について説明する。
【0066】
図5を参照して、スキャンウィンドウSW1は、スキャンウィンドウSW1の左端が入力画像の0列目に一致するように配置される。そして、スキャンウィンドウSW1は、入力画像の行方向へ所望の画素数m(mは正の整数)分ずつ移動させられて1つの行を走査する。図5においては、m=4である。したがって、スキャンウィンドウSW1は、入力画像の行方向へ4画素数分ずつ移動させられて行方向への1つの走査を行う。すなわち、スキャンウィンドウSW1は、最初、位置PS1に配置され、その後、スキャンウィンドウSW1は、位置PS2,PS3,・・・,PSk(kは1以上の整数)へ順次移動させられて行方向への1つの走査を行う。
【0067】
位置PS2は、スキャンウィンドウSW1に含まれるHaar特徴の左端が位置PS1よりも行方向へ4画素数分だけ移動した位置であり、位置PS3は、スキャンウィンドウSW1に含まれるHaar特徴の左端が位置PS2よりも行方向へ4画素数分だけ移動した位置であり、以下、同様にして、位置PSkは、スキャンウィンドウSW1に含まれるHaar特徴の左端が位置PSk−1よりも行方向へ4画素数分だけ移動した位置である。
【0068】
スキャンウィンドウSW2〜SWp(pは1以上の正の整数)の各々は、スキャンウィンドウSW1と同じ構成(すなわち、同じHaar特徴を同じ位置に含む)からなる。
【0069】
そして、スキャンウィンドウSW2は、スキャンウィンドウSW1よりも1行だけ列方向にずらされた位置において、スキャンウィンドウSW1と同じように位置PS1〜PSkに順次移動させられて行方向への1つの走査を行う。
【0070】
スキャンウィンドウSW3は、スキャンウィンドウSW2よりも1行だけ列方向にずらされた位置において、スキャンウィンドウSW1と同じように位置PS1〜PSkに順次移動させられて行方向への1つの走査を行う。
【0071】
以下、同様にして、スキャンウィンドウSWpは、スキャンウィンドウSWp−1よりも1行だけ列方向にずらされた位置において、スキャンウィンドウSW1と同じように位置PS1〜PSkに順次移動させられて行方向への1つの走査を行う。
【0072】
そして、p個のスキャンウィンドウSW1〜SWpの行方向への走査は、並列して行われる。
【0073】
なお、図5においては、p個のスキャンウィンドウSW1〜SWpは、行方向へずらされて図示されているが、これは、p個のスキャンウィンドウSW1〜SWpを見易くするためであり、実際には、p個のスキャンウィンドウSW1〜SWpは、最初、位置PS1に配置され、その後、位置PS2〜PSkへ順次移動させられて行方向への走査を行う。
【0074】
図6は、画素とHaar特徴との一致を検出する方法を説明するための図である。図6を参照して、スキャンウィンドウSW1が図5に示す位置PS1に位置するとき、スキャンウィンドウSW1内に配置されたHaar特徴CH0(図4の(a)参照)は、第1列〜第6列と、第1行〜第6行とによって規定される画素領域に位置する。
【0075】
Haar特徴CH0のうちの黒領域(図6においては、斜線領域)は、第1列〜第6列と、第1行〜第3行とによって規定される画素領域に位置し、Haar特徴CH0のうちの白領域は、第1列〜第6列と、第4行〜第6行とによって規定される画素領域に位置する。
【0076】
黒領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第3行の範囲において、第6列目の累積値から第0列目の累積値を減算した値になり、白領域が位置する画素領域の行方向における輝度値の総和は、第4行〜第6行の範囲において、第6列目の累積値から第0列目の累積値を減算した値になる。
【0077】
その結果、黒領域が位置する画素領域の行方向における輝度値の総和は、第1行において、“0004”になり、第2行において、“0004”になり、第3行において、“0003”になる。
【0078】
また、白領域が位置する画素領域の行方向における輝度値の総和は、第4行において、“05A0”になり、第5行において、“056C”になり、第6行において、“059C”になる。
【0079】
そして、黒領域が位置する画素領域の輝度値の総和は、列方向に配置された“0004”,“0004”,“0003”の総和になり、白領域が位置する画素領域の輝度値の総和は、列方向に配置された“05A0”,“056C”,“059C”の総和になる。
【0080】
また、Haar特徴CH0が配置された画素領域の明暗差は、黒領域が位置する画素領域の輝度値の総和から白領域が位置する画素領域の輝度値の総和を減算したものになる。
【0081】
したがって、Haar特徴CH0が配置された画素領域の明暗差は、黒領域が位置する画素領域の第1行〜第3行における輝度値の総和“0004”,“0004”,“0003”を累積加算し、その累積加算の結果から白領域が位置する画素領域の第4行〜第6行における輝度値の総和“05A0”,“056C”,“059C”を累積減算することによって求められる。すなわち、Haar特徴CH0が配置された画素領域の明暗差は、“0004”,“0004”,“0003”を列方向に累積加算し、その累積加算の結果から“05A0”,“056C”,“059C”を列方向に累積減算することによって求められる。
【0082】
その後、最終的に演算された明暗差がHaar特徴CH0の明暗差と一致するか否かが判定される。そして、最終的に演算された明暗差がHaar特徴CH0の明暗差に一致する場合、値αl(lは、0〜14)が累積値qkに加算され、最終的に演算された明暗差がHaar特徴CH0の明暗差に一致しない場合、値βlが累積値qkに加算される。そうすると、累積値qkが位置PS1に対応付けられて記憶される。ここで、値αlは、画素領域の明暗差がHaar特徴の明暗差に一致することを示し、例えば、1である。また、値βlは、画素領域の明暗差がHaar特徴の明暗差に一致しないことを示し、例えば、0である。
【0083】
なお、図4に示すパターン7、パターン8、パターン11、およびパターン12のHaar特徴CH7,CH8,CH11,CH12が用いられた場合も、Haar特徴CH7,CH8,CH11,CH12が配置された画素領域の明暗差は、図6に示す方法によって演算される。
【0084】
図7は、画素とHaar特徴との一致を検出する他の方法を説明するための図である。図7を参照して、スキャンウィンドウSW1が図5に示す位置PS1に位置するとき、スキャンウィンドウSW1内に配置されたHaar特徴CH1(図4の(b)参照)は、第1列〜第6列と、第1行〜第6行とによって規定される画素領域に位置する。
【0085】
Haar特徴CH1のうちの黒領域(図7においては、斜線領域)は、第1列および第2列と、第1行〜第6行とによって規定される画素領域と、第5列および第6列と、第1行〜第6行とによって規定される画素領域とに位置し、Haar特徴CH1のうちの白領域は、第3列および第4列と、第1行〜第6行とによって規定される画素領域に位置する。
【0086】
ここで、第0列、第2列、第4列および第6列における累積値をそれぞれP0,P2,P4,P6とすると、左側の黒領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第6行の範囲において(P2−P0)を演算した値になり、白領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第6行の範囲において、(P4−P2)を演算した値になり、右側の黒領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第6行の範囲において(P6−P4)を演算した値になる。
【0087】
また、Haar特徴CH1が配置された画素領域の明暗差は、黒領域が位置する画素領域の輝度値の総和から白領域が位置する画素領域の輝度値の総和を減算したものになる。
【0088】
したがって、Haar特徴CH1が配置された画素領域の明暗差は、第1行〜第6行の各行において(P2−P0)−2×(P4−P2)+(P6−P4)を演算し、その演算結果を列方向に累積加算した値になる。
【0089】
その後、最終的に演算された明暗差がHaar特徴CH1の明暗差と一致するか否かが判定される。そして、最終的に演算された明暗差がHaar特徴CH1の明暗差に一致する場合、値αlが累積値qkに加算され、最終的に演算された明暗差がHaar特徴CH1の明暗差に一致しない場合、値βlが累積値qkに加算される。そうすると、累積値qkが位置PS1に対応付けられて記憶される。
【0090】
なお、図4に示すパターン2、パターン13およびパターン14のHaar特徴CH2,CH13,CH14が用いられた場合も、Haar特徴CH2,CH13,CH14が配置された画素領域の明暗差は、図7に示す方法によって演算される。
【0091】
また、Haar特徴CH1,CH2,CH13,CH14の白領域と黒領域とを入れ換えたHaar特徴が用いられる場合も、Haar特徴が配置された画素領域の明暗差は、図7に示す方法によって演算される。
【0092】
図8は、画素とHaar特徴との一致を検出するさらに他の方法を説明するための図である。図8を参照して、スキャンウィンドウSW1が図5に示す位置PS1に位置するとき、スキャンウィンドウSW1内に配置されたHaar特徴CH3(図4の(d)参照)は、第1列〜第6列と、第1行〜第6行とによって規定される画素領域に位置する。
【0093】
Haar特徴CH3のうちの黒領域(図8においては、斜線領域)は、第4列〜第6列と、第1行〜第6行とによって規定される画素領域に位置し、Haar特徴CH3のうちの白領域は、第1列〜第3列と、第1行〜第6行とによって規定される画素領域に位置する。
【0094】
ここで、第0列、第3列、および第6列における累積値をそれぞれP0,P3,P6とすると、白領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第6行の範囲において、(P3−P0)を演算した値になり、黒領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第6行の範囲において(P6−P3)を演算した値になる。
【0095】
また、Haar特徴CH3が配置された画素領域の明暗差は、黒領域が位置する画素領域の輝度値の総和から白領域が位置する画素領域の輝度値の総和を減算したものになる。
【0096】
したがって、Haar特徴CH3が配置された画素領域の明暗差は、第1行〜第6行の各行において(P6−P3)−(P3−P0)を演算し、その演算結果を列方向に累積加算した値になる。
【0097】
その後、最終的に演算された明暗差がHaar特徴CH3の明暗差と一致するか否かが判定される。そして、最終的に演算された明暗差がHaar特徴CH3の明暗差に一致する場合、値αlが累積値qkに加算され、最終的に演算された明暗差がHaar特徴CH3の明暗差に一致しない場合、値βlが累積値qkに加算される。そうすると、累積値qkが位置PS1に対応付けられて記憶される。
【0098】
なお、図4に示すパターン9のHaar特徴CH9が用いられた場合も、Haar特徴CH9が配置された画素領域の明暗差は、図8に示す方法によって演算される。
【0099】
図9は、画素とHaar特徴との一致を検出するさらに他の方法を説明するための図である。図9を参照して、スキャンウィンドウSW1が図5に示す位置PS1に位置するとき、スキャンウィンドウSW1内に配置されたHaar特徴CH6(図4の(g)参照)は、第1列〜第6列と、第1行〜第6行とによって規定される画素領域に位置する。
【0100】
Haar特徴CH6のうちの黒領域(図9においては、斜線領域)は、第1列〜第3列と、第1行〜第6行とによって規定される画素領域に位置し、Haar特徴CH6のうちの白領域は、第4列〜第6列と、第1行〜第6行とによって規定される画素領域に位置する。
【0101】
ここで、第0列、第3列、および第6列における累積値をそれぞれP0,P3,P6とすると、黒領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第6行の範囲において(P3−P0)を演算した値になり、白領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第6行の範囲において、(P6−P3)を演算した値になる。
【0102】
また、Haar特徴CH6が配置された画素領域の明暗差は、黒領域が位置する画素領域の輝度値の総和から白領域が位置する画素領域の輝度値の総和を減算したものになる。
【0103】
したがって、Haar特徴CH6が配置された画素領域の明暗差は、第1行〜第6行の各行において(P3−P0)−(P6−P3)を演算し、その演算結果を列方向に累積加算した値になる。
【0104】
その後、最終的に演算された明暗差がHaar特徴CH6の明暗差と一致するか否かが判定される。そして、最終的に演算された明暗差がHaar特徴CH6の明暗差に一致する場合、値αlが累積値qkに加算され、最終的に演算された明暗差がHaar特徴CH6の明暗差に一致しない場合、値βlが累積値qkに加算される。そうすると、累積値qkが位置PS1に対応付けられて記憶される。
【0105】
なお、図4に示すパターン10のHaar特徴CH10が用いられた場合も、Haar特徴CH10が配置された画素領域の明暗差は、図9に示す方法によって演算される。
【0106】
図10は、画素とHaar特徴との一致を検出するさらに他の方法を説明するための図である。図10を参照して、スキャンウィンドウSW1が図5に示す位置PS1に位置するとき、スキャンウィンドウSW1内に配置されたHaar特徴CH4(図4の(e)参照)は、第1列〜第6列と、第1行〜第6行とによって規定される画素領域に位置する。
【0107】
Haar特徴CH4のうちの黒領域(図10においては、斜線領域)は、第1列〜第3列と、第4行〜第6行とによって規定される画素領域と、第4列〜第6列と、第1行〜第3行とによって規定される画素領域とに位置し、Haar特徴CH4のうちの白領域は、第1列〜第3列と、第1行〜第3行とによって規定される画素領域と、第4列〜第6列と、第4行〜第6行とによって規定される画素領域に位置する。
【0108】
ここで、第0列、第3列、および第6列における累積値をそれぞれP0,P3,P6とすると、黒領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第3行の範囲において(P6−P3)を演算した値になり、第4行〜第6行の範囲において(P3−P0)を演算した値になる。また、白領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第3行の範囲において、(P3−P0)を演算した値になり、第4行〜第6行の範囲において、(P6−P3)を演算した値になる。
【0109】
また、Haar特徴CH4が配置された画素領域の明暗差は、黒領域が位置する画素領域の輝度値の総和から白領域が位置する画素領域の輝度値の総和を減算したものになる。
【0110】
したがって、Haar特徴CH4が配置された画素領域の明暗差は、各行において(P6−P3)−(P3−P0)を演算し、第1行〜第3行の範囲において、演算結果(P6−P3)−(P3−P0)を列方向に累積加算し、第4行〜第6行の範囲において演算結果(P6−P3)−(P3−P0)を列方向に累積減算した値になる。
【0111】
その後、最終的に演算された明暗差がHaar特徴CH4の明暗差と一致するか否かが判定される。そして、最終的に演算された明暗差がHaar特徴CH4の明暗差に一致する場合、値αlが累積値qkに加算され、最終的に演算された明暗差がHaar特徴CH4の明暗差に一致しない場合、値βlが累積値qkに加算される。そうすると、累積値qkが位置PS1に対応付けられて記憶される。
【0112】
なお、図4に示すパターン5のHaar特徴CH5が用いられた場合も、Haar特徴CH5が配置された画素領域の明暗差は、図10に示す方法によって演算される。
【0113】
図4に示すパターン0〜パターン14のHaar特徴CH0〜CH14が配置された画素領域の明暗差は、上述した方法によって演算される。
【0114】
一致処理モジュール4は、図5に示す方法によって、列方向に配置されたp個のスキャンウィンドウSW1〜SWp(各々がHaar特徴CH0を含む)を位置PS1〜PSkに順次移動させながら行方向に並行して走査し、スキャンウィンドウSW1〜SWpが各位置PS1〜PSkに配置されたときの画素領域の明暗差を上述した方法によって演算し、その演算した画素領域の明暗差がHaar特徴CH0の明暗差と一致するか否かを示す累積値qkを演算し、その演算した累積値qkを位置PS1〜PSkに対応付けて記憶する。
【0115】
その後、一致処理モジュール4は、図5に示す方法によって、列方向に配置されたp個のスキャンウィンドウSW1〜SWp(各々がHaar特徴CH1を含む)を位置PS1〜PSkに順次移動させながら行方向に並行して走査し、スキャンウィンドウSW1〜SWpが各位置PS1〜PSkに配置されたときの画素領域の明暗差を上述した方法によって演算し、その演算した画素領域の明暗差がHaar特徴CH1の明暗差と一致するか否かを示す累積値qkを演算し、その演算した累積値qkを位置PS1〜PSkに対応付けて記憶する。
【0116】
以下、同様にして、一致処理モジュール4は、図5に示す方法によって、列方向に配置されたp個のスキャンウィンドウSW1〜SWp(各々がHaar特徴CH14を含む)を位置PS1〜PSkに順次移動させながら行方向に並行して走査し、スキャンウィンドウSW1〜SWpが各位置PS1〜PSkに配置されたときの画素領域の明暗差を上述した方法によって演算し、その演算した画素領域の明暗差がHaar特徴CH14の明暗差と一致するか否かを示す累積値qkを演算し、その演算した累積値qkを位置PS1〜PSkに対応付けて記憶する。
【0117】
このように、一致処理モジュール4は、図4に示す15個のHaar特徴CH0〜CH14の全てを用いて行方向に並行して入力画像を走査し、Haar特徴CH0〜CH14が配置された画素領域の明暗差とHaar特徴CH0〜CH14の明暗差との一致を検出する。
【0118】
一致処理モジュール4は、15個のHaar特徴CH0〜CH14を含む15個のスキャンウィンドウのサイズが入力画像の行方向のサイズXmaxよりも大きくなるまで、または入力画像の列方向のサイズYmaxよりも大きくなるまで、上述した動作を繰返し実行する。すなわち、一致処理モジュール4は、Haar特徴CH0〜CH14を大きくしながらHaar特徴CH0〜CH14の明暗差に一致する画素領域の明暗差を検出する動作を繰返し実行する。
【0119】
強識別器モジュール5は、位置PS1〜PSkに対応付けられた累積値q1〜qkを一致処理モジュール4から受ける。また、強識別器モジュール5は、顔を検出するためのしきい値Tを予め保持している。そして、強識別器モジュール5は、累積値q1〜qkをしきい値Tと比較し、しきい値T以上の累積値qn(n=1〜k)が検出されると、顔が検出されたと判定し、しきい値Tよりも小さい累積値qn(n=1〜k)が検出されると、顔が検出されなかったと判定する。
【0120】
累積モジュール2、サイズ算出モジュール3、一致処理モジュール4および強識別器モジュール5は、入力画像の縮小回数が画像縮小回数Imaxに達するまで、入力画像のサイズを縮小しながら、上述した動作を繰返し実行する。
【0121】
図11は、図1に示す特徴検出装置10の動作を説明するためのフローチャートである。図11を参照して、一連の動作が開始されると、h=0、i=0、j=0、k=0、l=0およびn=0が設定される(ステップS1)。
【0122】
そして、画像縮小モジュール1は、式(3)に従って入力画像のサイズを縮小する(ステップS2)。その後、画像縮小モジュール1は、画像の縮小回数iがImax以下であるか否かを判定する(ステップS3)。
【0123】
ステップS3において、画像の縮小回数iがImax以下であると判定されたとき、累積モジュール2は、1つの行に含まれる各画素の輝度を行方向に累積加算する累積処理を入力画像の全ての行に対して並行して行なう(ステップS4)。
【0124】
より具体的には、累積モジュール2は、次式に従って各画素の輝度の累積値Phを演算する(ステップS41)。
【0125】
【数5】
【0126】
なお、式(5)において、hは、1つの行において画素の輝度を累積する最後の列を表し、tは、0〜hであり、xhは、1つの行に含まれる各画素の輝度である。
【0127】
ステップS41の後、累積モジュール2は、hがXmax以下であるか否かを判定する(ステップS42)。
【0128】
ステップS42において、hがXmax以下であると判定されたとき、累積モジュール2は、h=h+1を設定する(ステップS43)。そして、一連の動作は、ステップS41に戻る。
【0129】
そうすると、ステップS42において、hがXmaxよりも大きいと判定されるまで、上述したステップS41〜ステップS43が繰返し実行される。
【0130】
そして、ステップS42において、hがXmaxよりも大きいと判定されると、累積モジュール2は、h=0を設定する(ステップS44)。
【0131】
hは、最初、“0”に設定されているため、累積モジュール2は、ステップS41において、1つの行の0列目から0列目までの画素の輝度x0を加算する。つまり、累積モジュール2は、ステップS41が1回目に実行される場合、1つの行の0列目の画素の輝度x0を累積値Phとして演算する。
【0132】
その後、累積モジュール2は、ステップS41を2回目に実行する場合、1つの行の0列目から1列目までの画素の輝度x0,x1を加算して累積値P1を演算する。
【0133】
更に、累積モジュール2は、ステップS41を3回目に実行する場合、1つの行の0列目から2列目までの画素の輝度x0,x1,x2を加算して累積値P2を演算する。
【0134】
以下、同様にして、累積モジュール2は、ステップS41をXmax+1回目に実行する場合、1つの行の0列目からXmax列目までの画素の輝度x0,x1,・・・,xXmaxを加算して累積値PXmaxを演算する。
【0135】
したがって、累積モジュール2は、ステップS41〜ステップS43からなるループを1つの行に含まれる画素数分(Xmax個)だけ繰返し実行することによって、1つの行に含まれる各画素の輝度の累積値を演算する。
【0136】
そして、累積モジュール2は、全ての行について、1つの行に含まれる各画素の輝度の累積値を演算する累積処理を並行して行なう。
【0137】
累積モジュール2による輝度の累積処理が終了すると、顔判定が実行される(ステップS5)。
【0138】
より具体的には、サイズ算出モジュール3は、式(4)に従って、スキャンウィンドウのサイズを算出する(ステップS51)。そして、サイズ算出モジュール3は、wejがXmaxまたはYmax以下であるか否かを判定する(ステップS52)。
【0139】
ステップS52において、wejがXmaxまたはYmax以下でないと判定されたとき、サイズ算出モジュール3は、j=0を設定し、かつ、信号GSDを生成して画像縮小モジュール1へ出力し、画像縮小モジュール1は、信号GSDに応じてi=i+1を設定する(ステップS53)。その後、一連の動作は、ステップS2へ移行する。
【0140】
一方、ステップS52において、wejがXmaxまたはYmax以下であると判定されたとき、サイズ算出モジュール3は、j=j+1を設定し(ステップS54)、各画素が累積値からなる入力画像と、スキャンウィンドウのサイズとを一致処理モジュール4へ出力する。
【0141】
一致処理モジュール4は、各画素が累積値からなる入力画像と、スキャンウィンドウのサイズとをサイズ算出モジュール3から受ける。そして、一致処理モジュール4は、その受けたスキャンウィンドウのサイズを有し、かつ、l=0のHaar特徴CH0を含むスキャンウィンドウSW1を生成し、その生成したスキャンウィンドウSW1をポインタmkへ移動させる(ステップS55)。
【0142】
その後、一致処理モジュール4は、その移動させた位置において、スキャンウィンドウSW1内の画像に対し、Haar特徴CH0の形状に基づく明暗差を上述した方法によって算出する(ステップS56)。
【0143】
引き続いて、一致処理モジュール4は、スキャンウィンドウSW1内のHaar特徴の個数が2以上であるか否かを判定する(ステップS57)。
【0144】
ステップS57において、スキャンウィンドウSW1内のHaar特徴の個数が2以上であると判定されたとき、一致処理モジュール4は、スキャンウィンドウSW1内に配置された2以上のHaar特徴を用いて上述した方法によって演算された複数の明暗差を加算する(ステップS58)。
【0145】
そして、ステップS57において、スキャンウィンドウSW1内のHaar特徴の個数が2以上でないと判定されたとき、またはステップS58の後、一致処理モジュール4は、画素領域の明暗差がHaar特徴の明暗差に一致することを検証する。すなわち、一致処理モジュール4は、画素領域の明暗差に基づいて、Haar特徴との一致を検証する(ステップS59)。
【0146】
その後、一致処理モジュール4は、画素領域の明暗差がHaar特徴の明暗差に一致する場合、rl=αlを用いて累積値qk=qk+rlを演算し、画素領域の明暗差がHaar特徴の明暗差に一致しない場合、rl=βlを用いて累積値qk=qk+rlを演算する(ステップS60)。そして、一致処理モジュール4は、ポイントmk(すなわち、位置PSk)に対応付けて累積値qkを記憶する。
【0147】
その後、一致処理モジュール4は、mk+wejがXmax以下であるか否かを判定する(ステップS61)。すなわち、一致処理モジュール4は、スキャンウィンドウSW1が入力画像の行方向において入力画像内に位置するか否かを判定する。
【0148】
ステップS61において、mk+wejがXmax以下であると判定されたとき、すなわち、スキャンウィンドウSW1が入力画像の行方向において入力画像内に位置すると判定されたとき、一致処理モジュール4は、k=k+1を設定する(ステップS62)。
【0149】
そして、一連の動作は、ステップS55へ移行する。
【0150】
その後、一致処理モジュール4は、ステップS61において、mk+wejがXmaxよりも大きいと判定されるまで、すなわち、スキャンウィンドウSW1の右端が入力画像の行方向において入力画像の右端を越えたと判定されるまで、上述したステップS55〜ステップS62を繰返し実行する。
【0151】
kは、最初、“0”に設定されているため(ステップS1参照)、一致処理モジュール4は、ステップS55を1回目に実行する場合、スキャンウィンドウSW1を0列目の画素へ移動させる。そして、一致処理モジュール4は、スキャンウィンドウSW1内に配置されたHaar特徴CH0の形状に基づく明暗差を演算し(ステップS57参照)、累積値qkを演算する。
【0152】
また、一致処理モジュール4は、ステップS55を2回目に実行する場合、スキャンウィンドウSW1をm列目の画素へ移動させる。そして、一致処理モジュール4は、スキャンウィンドウSW1内に配置されたHaar特徴CH0の形状に基づく明暗差を演算し(ステップS57参照)、累積値qkを演算する。
【0153】
さらに、一致処理モジュール4は、ステップS55を3回目に実行する場合、スキャンウィンドウSW1を2m列目の画素へ移動させる。そして、一致処理モジュール4は、スキャンウィンドウSW1内に配置されたHaar特徴CH0の形状に基づく明暗差を演算し(ステップS57参照)、累積値qkを演算する。
【0154】
そして、一致処理モジュール4は、スキャンウィンドウSW1の右端が入力画像の右端を越えるまで、スキャンウィンドウSW1の各位置においてHaar特徴CH0の形状に基づく明暗差を演算し(ステップS57参照)、累積値qkを演算する。
【0155】
つまり、一致処理モジュール4は、行方向における1つの走査が終了するまで、各位置mk(=PS1〜PSk)においてHaar特徴CH0の形状に基づく明暗差を演算し(ステップS57参照)、累積値qkを演算する。
【0156】
その後、ステップS61において、mk+wejがXmaxよりも大きいと判定されると、一致処理モジュール4は、lがLmax以下であるか否かをさらに判定する(ステップS63)。すなわち、一致処理モジュール4は、予め決定した顔検出用のHaar特徴の全てを用いたか否かを判定する。
【0157】
ステップS63において、lがLmax以下であると判定されたとき、すなわち、全てのHaar特徴を用いていないと判定されたとき、一致処理モジュール4は、l=l+1およびk=0を設定する(ステップS64)。そして、一連の動作は、ステップS55へ移行する。
【0158】
その後、ステップS63において、lがLmaxよりも大きいと判定されるまで、すなわち、全てのHaar特徴を用いたと判定されるまで、一致処理モジュール4は、ステップS55〜ステップS64を繰返し実行する。
【0159】
そして、ステップS63において、lがLmaxよりも大きいと判定されると、すなわち、全てのHaar特徴を用いたと判定されると、一致処理モジュール4は、l=0を設定する(ステップS65)。
【0160】
その後、一致処理モジュール4は、各位置mk(=PS1〜PSk)に対応付けられた累積値qkを強識別器モジュール5へ出力する。
【0161】
強識別器モジュール5は、各位置mk(=PS1〜PSk)に対応付けられた累積値qkを一致処理モジュール4から受ける。そして、強識別器モジュール5は、累積値qn(n=1〜k)をしきい値Tと比較し、累積値qnがしきい値T以上であるとき、人間の顔を検出したと判定し、累積値qnがしきい値Tよりも小さいとき、人間の顔を検出しなかったと判定する(ステップS66)。
【0162】
その後、強識別器モジュール5は、nがk以下であるか否かを判定する(ステップS67)。ステップS67において、nがk以下であると判定されたとき、強識別器モジュール5は、n=n+1を設定する(ステップS68)。そして、一連の動作は、ステップS66へ移行する。
【0163】
その後、強識別器モジュール5は、ステップS67において、nがkよりも大きいと判定するまで、ステップS66〜ステップS68を繰返し実行する。すなわち、強識別器モジュール5は、スキャンウィンドウSW1の行方向への1回の走査の結果、演算されたk個の累積値q1〜qkの全てについて、顔が検出されたか否かを判定するまで、ステップS66〜ステップS68を繰返し実行する。
【0164】
そして、強識別器モジュール5は、ステップS67において、nがkよりも大きいと判定すると、k=0およびn=0を設定する(ステップS69)。その後、一連の動作は、ステップS51へ移行する。
【0165】
そして、ステップS52において、スキャンウィンドウのサイズwejがXmaxまたはYmaxよりも大きいと判定されるまで、ステップS51,S52の“YES”,ステップS55〜ステップS69が繰返し実行される。すなわち、スキャンウィンドウのサイズwejを大きくしながら、Haar特徴パターンの全てを用いたHaar特徴の形状に基づく明暗差の演算、Haar特徴の明暗差と画素領域の明暗差との一致の検証、および顔検出の判定が実行される。
【0166】
ステップS5は、入力画像の列方向に配置されたp個のスキャンウィンドウSW1〜SWpの行方向への走査に対して並行して実行される。
【0167】
そして、各ステップS5のステップS52において、スキャンウィンドウのサイズwejがXmaxまたはYmaxよりも大きいと判定されると、画像縮小モジュール1は、ステップS2において、画像サイズを縮小し、累積モジュール2は、ステップS4において、その縮小された画像サイズを有する入力画像の各画素の累積値を演算し、サイズ算出モジュール3は、ステップS51において、その縮小された画像サイズを有する入力画像に対してスキャンウィンドウのサイズを算出し、一致処理モジュール4は、その縮小された画像サイズを有する入力画像の各画素の累積値に基づいて、Haar特徴の形状に基づく画素領域の明暗差の演算、Haar特徴の明暗差と画素領域の明暗差との一致の検証、および顔検出の判定を実行する。
【0168】
この場合、ステップS51〜ステップS69からなるループにおいて、縮小された入力画像に基づいて、スキャンウィンドウのサイズを大きくしながら、Haar特徴CH0〜CH14の全てに対して、Haar特徴の形状に基づく画素領域の明暗差の演算、Haar特徴の明暗差と画素領域の明暗差との一致の検証、および顔検出の判定が実行される。
【0169】
したがって、迅速に顔を検出できる。
【0170】
そして、ステップS3において、iがImax以下であると判定されると、i=0が設定され(ステップS6)、一連の動作が終了する。
【0171】
なお、Haar特徴CH0〜CH14を用いた顔検出においては、Haar特徴CH0〜CH14は、任意の順番で用いられる。
【0172】
このように、特徴検出装置10は、入力画像の各画素の輝度の累積演算を全ての行について並行して行ない(ステップS4参照)、複数のスキャンウィンドウSW1〜SWpを用いた行方向への走査を並行して行ない、Haar特徴の形状に基づく画素領域の明暗差の演算、Haar特徴の明暗差と画素領域の明暗差との一致の検証、および顔検出の判定を複数のスキャンウィンドウSW1〜SWpの行方向への走査に対して並行して行なう(ステップS5参照)。
【0173】
したがって、Haar特徴を用いた顔検出を迅速に行なうことができる。
【0174】
特に、図4に示すパターン7〜パターン14のHaar特徴CH7〜CH14のいずれかが用いられる場合、1つのスキャンウィンドウSWの行方向への走査によって、パターン0〜パターン6のHaar特徴CH0〜CH6を含む1つのスキャンウィンドウSWの行方向への走査を2回実行した効果が得られる。したがって、顔を迅速に検出することができる。
【0175】
なお、サイズ算出モジュール3がステップS51においてスキャンウィンドウSWのサイズを大きくすると、スキャンウィンドウSWに含まれるHaar特徴(Haar特徴CH0〜CH14のいずれか)も大きくなるので、サイズ算出モジュール3がステップS51においてスキャンウィンドウSWのサイズを大きくすることは、Haar特徴(Haar特徴CH0〜CH14のいずれか)のサイズを大きくすることに相当する。
【0176】
また、図4に示すパターン7〜パターン14のHaar特徴CH7〜CH14のいずれかが用いられる場合、一致処理モジュール4は、ステップS58において、Haar特徴CH7〜CH14の各々に含まれる複数の形状(=パターン)に基づく画素領域の明暗差を相互に加算する。
【0177】
図12は、図1に示す特徴検出装置10のハード構成を示す構成図である。図12を参照して、特徴検出装置100は、メインメモリ110と、DMAC(Direct Memory Access Controller)120と、CPU(Central Processing Unit)130と、SIMD(Single Instruction Multiple Data)アクセラレータ140と、バスBSとを備える。
【0178】
メインメモリ110、DMAC120、CPU130およびSIMDアクセラレータ140は、バスBSを介して相互に接続される。
【0179】
メインメモリ110は、カメラによって撮影された画像データと、Haar特徴CH0〜CH14と、スキャンウィンドウの初期サイズと、スキャンウィンドウの行方向への移動量mとを格納する。また、メインメモリ110は、図11に示すフローチャートからなるプログラムを格納する。
【0180】
DMAC120は、CPU130を介さないで、メインメモリ110に格納された画像データを1つのフレームずつバスBSを介して読み出し、その読み出した画像データをSIMDアクセラレータへ出力するコントローラとなっている。
【0181】
CPU130は、この発明の実施の形態による顔検出を実行する場合、メインメモリ110からプログラムを読み出し、その読み出したプログラムを実行してDMAC120およびSIMDアクセラレータ140を制御する。また、CPU130は、バスBSを介して各画素が輝度からなる画像データをメインメモリ10から受け、その受けた画像データをSIMDアクセラレータ140へ出力する。さらに、CPU130は、バスBSを介してHaar特徴CH0〜CH14、スキャンウィンドウの初期サイズ、およびスキャンウィンドウの行方向への移動量mをメインメモリ110から読み出し、その読み出したHaar特徴CH0〜CH14、スキャンウィンドウの初期サイズ、およびスキャンウィンドウの行方向への移動量mをSIMDアクセラレータ140へ出力する。
【0182】
SIMDアクセラレータ140は、CPU130からの制御に応じて、CPU130から画像データ、Haar特徴CH0〜CH14、スキャンウィンドウの初期サイズ、およびスキャンウィンドウの行方向への移動量mを受け、その受けた画像データ、Haar特徴CH0〜CH14、スキャンウィンドウの初期サイズ、およびスキャンウィンドウの行方向への移動量mに基づいて、図11に示すフローチャートに従って各画像データ中の人間の顔を検出する。そして、SIMDアクセラレータ140は、その検出した顔をCPU130へ出力する。
【0183】
図13は、図12に示すSIMDアクセラレータ140の構成図である。図13を参照して、SIMDアクセラレータ140は、コントローラ1401と、演算領域1402,1405,1407と、データ蓄積領域1403と、演算器(PE:Processing Element)1404と、結果領域1406と、システム領域1408とを含む。
【0184】
コントローラ1401は、登録部1410〜1414を含む。そして、コントローラ1401は、CPU130から画像データ、Haar特徴CH0〜CH14、スキャンウィンドウの初期サイズ、およびスキャンウィンドウの行方向への移動量mを受ける。そして、コントローラ1401は、画像データをデータ蓄積領域1403に格納し、Haar特徴CH0〜CH14を登録部1410に格納し、スキャンウィンドウの初期サイズを登録部1411に格納し、スキャンウィンドウの行方向への移動量mを登録部1412に格納する。
【0185】
また、コントローラ1401は、図11に示すステップS51に従ってスキャンウィンドウのサイズを算出する。
【0186】
さらに、コントローラ1401は、図11に示すS52に従って、wejがXmaxまたはYmax以下であるか否かを判定し、wejがXmaxまたはYmaxよりも大きいと判定したとき、信号GSDを生成する。
【0187】
さらに、コントローラ1401は、学習によって予め作製されたHaar特徴を含むスキャンウィンドウのサイズを、その算出したスキャンウィンドウのサイズに設定する。そして、コントローラ1401は、そのサイズを設定したスキャンウィンドウSWおよびスキャンウィンドウSWの行方向への移動量mを演算器1404へ出力する。
【0188】
さらに、コントローラ1401は、図11に示すステップS63において、lがLmax以下であると判定するごとに、別のHaar特徴を含むスキャンウィンドウSWを作成して演算器1404へ出力する。
【0189】
さらに、コントローラ1401は、登録部1413に予め格納されたしきい値Tを読み出し、累積値qnを結果領域1406から読み出す。そして、コントローラ1401は、図11に示すステップS66〜ステップS68に従って、演算領域1407を用いて、各累積値qnをしきい値Tと比較して人間の顔を検出する。そして、コントローラ1401は、その検出結果をCPU130を介してメインメモリ110へ出力する。
【0190】
演算器1404は、図11に示すステップS4に従って、データ蓄積領域1403に格納された画像データの各画素の輝度の累積加算を演算領域1402を用いて全ての行について並行して行ない、その累積値をデータ蓄積領域1403に格納する。
【0191】
また、演算器1404は、コントローラ1401からスキャンウィンドウSWおよびスキャンウィンドウSWの行方向への移動量mを受ける。そして、演算器1404は、その受けたスキャンウィンドウSWおよびスキャンウィンドウSWの行方向への移動量mに基づいて、図11に示すステップS55〜ステップS62を実行する。この場合、演算器1404は、Haar特徴の形状に基づく画素領域の明暗差の演算を演算領域1405を用いて複数のスキャンウィンドウの行方向への走査に対して並行して行なう。また、演算器1404は、Haar特徴の明暗差と、Haar特徴の形状に基づく画素領域の明暗差との一致を検証し、その検証結果を示す累積値qkを結果領域1406を用いて演算する。
【0192】
演算領域1402,1405,1407は、各種の演算に用いられる領域である。また、システム領域1408は、システムの使用領域である。
【0193】
演算器1404は、ステップS4に従って各画素の輝度の累積値を演算する場合、1つの行において隣接する2つの列に属する2つの画素の2つの輝度を1クロックで2ビットずつデータ蓄積領域1403から読み出して加算する。
【0194】
また、演算器1404は、ステップS56に従って、Haar特徴の形状に基づく画素領域の明暗差を演算する場合、行方向(水平方向)の累積値の減算を列方向に配置された複数のスキャンウィンドウSW内に含まれる複数のHaar特徴の形状に基づく複数の画素領域に対して並行して行ない、その演算結果を列方向(垂直方向)に加減算してHaar特徴の形状に基づく画素領域の明暗差を演算する。
【0195】
このように、SIMDアクセラレータ140は、並列処理に適した演算器である。
【0196】
SIMDアクセラレータ140の演算器1404は、図1に示す累積モジュール2および一致処理モジュール4を構成し、SIMDアクセラレータ140のコントローラ1401は、図1に示すサイズ算出モジュール3および強識別器モジュール5を構成する。
【0197】
なお、上記においては、特徴検出装置10について説明したが、この発明によれば、これに限らず、特徴検出装置10は、画像データ中の人間の顔以外の何からの特徴を上述した方法によって検出するものであればよい。この場合、Haar特徴は、特徴を画素の明暗の差によって表したものとして定義される。
【0198】
また、上記においては、複数のスキャンウィンドウSW1〜SWpを1行ずつ列方向にずらせて配置し、複数のスキャンウィンドウSW1〜SWpを行方向に並行して走査すると説明したが、この発明の実施の形態においては、これに限らず、複数のスキャンウィンドウSW1〜SWpを任意の行数ずつ列方向にずらせて配置し、複数のスキャンウィンドウSW1〜SWpを行方向に並行して走査してもよい。
【0199】
特に、複数の形状からなるHaar特徴CH7〜CH14が用いられる場合、複数のパターンの一方が既に走査した行を重複して行方向に走査しないように複数のスキャンウィンドウSW1〜SWpを列方向にずらせて配置し、複数のスキャンウィンドウSW1〜SWpを行方向に並行して走査する。これによって、1回の行方向への走査に用いる複数のスキャンウィンドウSW1〜SWpの個数を最小限にでき、Haar特徴の形状に基づく画素領域の明暗差の演算、Haar特徴の形状に基づく画素領域の明暗差とHaar特徴の明暗差との一致の検証処理、その一致結果を示す累積値qkの演算、および累積値qkおよびしきい値Tに基づく顔検出処理を少なくでき、顔の検出を更に迅速に行なうことができる。
【0200】
さらに、上記においては、特徴検出装置10は、入力画像のサイズを縮小しながら人間の顔を検出すると説明したが、この発明の実施の形態においては、これに限らず、特徴検出装置10は、入力画像のサイズを一定に保持したまま入力画像から人間の顔を検出してもよい。この場合、特徴検出装置10は、図11に示すステップS4,S5に従って人間の顔を検出する。ステップS4,S5が入力画像の行方向に対して並行して実行されれば、人間の顔を迅速に検出できるからである。
【0201】
さらに、この発明の実施の形態においては、特徴検出装置10は、スキャンウィンドウのサイズを一定にして人間の顔を検出してもよい。ステップS4、およびステップS5のステップS55〜ステップS69が行方向に並行して実行されれば、人間の顔を迅速に検出できるからである。
【0202】
さらに、この発明の実施の形態においては、各画素の輝度の累積加算、Haar特徴の形状に基づく画素領域の明暗差の演算、およびHaar特徴の形状に基づく画素領域の明暗差とHaar特徴の明暗差との一致の検証は、列方向に並行して行なわれてもよい。すなわち、この発明の実施の形態による特徴検出装置は、各画素の輝度の累積加算、Haar特徴の形状に基づく画素領域の明暗差の演算、およびHaar特徴の形状に基づく画素領域の明暗差とHaar特徴の明暗差との一致の検証を入力画像の行方向および列方向のいずれか一方の方向に対して並行して行なうものであればよい。
【0203】
Haar特徴の形状に基づく画素領域の明暗差とHaar特徴の明暗差との一致の検証が列方向に並行して行なわれる場合、複数のパターンからなるHaar特徴は、上述した条件Cnd1,Cnd2を満たす。
【0204】
さらに、この発明の実施の形態においては、パターン7〜パターン14によって示されるHaar特徴CH7〜CH14に限らず、並列処理に適したHaar特徴であれば、どのような形状のHaar特徴が用いられてもよい。
【0205】
さらに、この発明の実施の形態においては、図11に示すステップS4において実行される各画素の輝度の累積加算の処理は、「累積処理」を構成する。
【0206】
さらに、この発明の実施の形態においては、図11に示すステップS60において演算される累積値qkは、「個数累積値」を構成する。
【0207】
さらに、この発明の実施の形態においては、図11に示すフローチャートは、この発明の実施の形態による顔の検出をコンピュータに実行させるためのプログラムを構成する。そして、プログラムを記録したメインメモリ110は、プログラムを記録したコンピュータ(CPU)読み取り可能な記録媒体を構成する。
【0208】
さらに、この発明の実施の形態においては、サイズ算出モジュール3および一致処理モジュール4は、「特徴検出モジュール」を構成し、強識別器モジュール5は、「特徴判定モジュール」を構成する。
【0209】
さらに、この発明の実施の形態においては、Haar特徴CH0〜CH6の各々は、「単一Haar特徴」を構成し、Haar特徴CH7〜CH14の各々は、「混合Haar特徴」を構成する。
【0210】
図12の点線で囲った部分は、実施の形態における特徴検出装置の特徴的な構成部を集積回路化した場合の一例を示す。LSI(Large Scale Integrated circuite)200は、集積回路の一例であり、点線で囲まれている範囲に含まれる構成部の機能を実現する。
【0211】
集積回路は、集積度の違いや集積されている機能の違いにより、IC(Integrated Circuite)、システムLSI、スーパーLSI、ウルトラLSIと呼称されることもある。
【0212】
また、集積回路は、LSIに限るものではなく、専用回路または汎用プロセッサによって実現されてもよい。LSIを作製後にプログラムを格納することが可能なFPGA(Field Programmable Gate Array)や、LSI回路の回路セルの接続や設定を再構成することが可能なリコンフィギュラブル・プロセッサが利用されてもよい。
【0213】
さらには、半導体技術の進歩または派生する別技術によりLSIに置き換わる集積回路化の技術(バイオ技術、有機化学技術等)が登場すれば、当然、その技術を用いて上述した機能の集積化が行なわれてよい。
【0214】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した実施の形態の説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【産業上の利用可能性】
【0215】
この発明は、特徴を迅速に検出可能な特徴検出装置に適用される。また、この発明は、特徴の迅速な検出をコンピュータに実行させるためのプログラムに適用される。さらに、この発明は、特徴の迅速な検出をコンピュータに実行させるためのプログラムを記録したコンピュータ読み取り可能なプログラムに適用される。さらに、この発明は、実施の形態における特徴検出装置の特徴的な構成部の機能を集積化したLSI、IC、システムLSI、スーパーLSI、ウルトラLSI、FPGA、LSIに置き換わる集積回路化技術によって集積化された集積回路に適用される。
【符号の説明】
【0216】
1 画像縮小モジュール、2 累積モジュール、3 サイズ算出モジュール、4 一致処理モジュール、5 強識別器モジュール、10,100 特徴検出装置、110 メインメモリ、120 DMAC、130 CPU、140 SIMDアクセラレータ、1401 コントローラ、1402,1405,1407 演算領域、1403 データ蓄積領域、1404 演算器、1406 結果領域、1408 システム領域。
【技術分野】
【0001】
この発明は、特徴検出装置、特徴検出をコンピュータに実行させるためのプログラム、およびそのプログラムを記録したコンピュータ読み取り可能な記録媒体に関するものである。
【背景技術】
【0002】
近年、画像などから意味のある特徴を抽出する技術が盛んに研究されている。そして、この技術は、ロボットビジョン、侵入者の監視、および入出管理等のセキュリティシステム、携帯電話、プリンタ、デジタルカメラ等のデジタル家電機器等、多岐にわたる分野で応用されている。
【0003】
特徴抽出アルゴリズムには、サポートベクターマシン(非特許文献1)またはブースティング(非特許文献2,3)を用いたものが知られている。この特徴抽出アルゴリズムは、高い動作周波数のプロセッサまたはDSP(Digital Signal Processor)において、ビデオレート(30fps)での処理が可能なレベルに達してきている。
【0004】
特に、Viola等によって開発された顔検出器は、高い識別性能と高速な処理を両立した手法である(非特許文献2,3)。これは、人間の顔の特徴を画素の明暗差で表したHaar特徴を用いた高速演算可能な顔検出器を用いることと、少数の弱識別器をAdaBoostアルゴリズムで組み合わせることにより、高い識別率と高速な処理が実現可能であることを示している。この手法は、物体における、ある画素領域間の明暗差を捉える弱識別器で構成されているため、絶対的な明度値に依存せず、照明条件の変動やノイズの影響を小さくできるという利点がある。また、このような検出処理に有効な明暗特徴は、様々な物体に適用できるため、様々な物体の検出に幅広く用いることができる。実際に、犬の顔および車の検出と言った人の顔以外のオブジェクトに対しての検出を行った例も存在する(非特許文献4,5)。
【0005】
また、Haar特徴を用いて1つのフレームに含まれる顔を並列して検出する並列顔検出処理手法が知られている(非特許文献7〜9)。
【先行技術文献】
【非特許文献】
【0006】
【非特許文献1】E. Osuna, R. Freund, and F. Girosi, “Training support vector machines: An application to face detection,” In Proc. Of Conf. Computer Vision and Pattern Recognition, pp. 130-136, 1997.
【非特許文献2】P. Viola and M. Jones, “Robust real-time object detection,” In IEEE ICCV Workshop on Statistical and Computational Theories of Vision, July 2001.
【非特許文献3】P. Viola and M. Jones, “Rapid object detection using a boosted cascade of simple feature,” In Proc. Of the IEEE Conf. on Computer Vision and Pattern Recognition, pp. 905-910, 2001.
【非特許文献4】賀谷晃太,“2クラス判別学習による類似特徴を有した異種物体認識システムの研究” 修士論文,広島大学,2007.
【非特許文献5】谷川昌司,日高章理,佐野夏樹,西田健次,栗田多喜夫,“矩形特徴による弱識別器のブースティングによる対象検出手法の汎化性能向上のための工夫と車載カメラの映像中の車の検出への応用,”ISS05, 2005.
【非特許文献6】Open source Computer Vision Library http://opencv.jp
【非特許文献7】熊木 武志,田上 正治,今井 雄太,小出 哲士,マタウシュ ハンス ユルゲン,“超並列SIMD型演算プロセッサMX-1を用いた並列顔検出処理手法 (1)”,2008年電子情報通信学会ソサイエティ大会,C-12-30,(2008.9).
【非特許文献8】今井 雄太,熊木 武志,田上 正治,小出 哲士,マタウシュ ハンス ユルゲン,“超並列SIMD型演算プロセッサMX-1による並列顔検出処理手法 (2)”,2008年電子情報通信学会ソサイエティ大会,C-12-31,(2008.9).
【非特許文献9】Y. Imai, T. Kumaki, T. Koide, H. J. Mattausch, “High-Speed Face Detectionin Images with Massive-Parallel Bit-Serial SIMD Processor Using Haar-LikeFeatures,” Extended Abstracts of the 2009 International Conference on Solid State Devices and Materials (SSDM2009),pp.464-465,(2009.10).
【発明の概要】
【発明が解決しようとする課題】
【0007】
従来のプロセッサは、積分画像(Integral Image)ii(x, y)を用いてHaar特徴を計算する。このIntegral Image ii(x, y)は、画像の原点から座標(x, y)までの輝度値の和を計算したものである。そして、入力画像i(x, y)から求められるIntegral Image ii(x, y)は、次式によって表される。
【0008】
【数1】
【0009】
そして、図14のD領域の輝度値を求めたい場合、D領域の輝度値は、図14に示す4点のIntegral Image P1〜P4を用いて次式によって表される。
【0010】
【数2】
【0011】
しかし、並列プロセッサにおいてIntegral Imageを用いて各領域の輝度値の和を求めると、並列プロセッサは、Integral Imageを座標(x,y)から求めるため、非常に多くの計算を行う必要があり、各領域の輝度値の和を迅速に求めることが困難であるという問題がある。したがって、顔検出を迅速に行うことが困難である。
【0012】
そこで、この発明は、かかる問題を解決するためになされたものであり、その目的は、特徴を迅速に検出可能な特徴検出装置を提供することである。
【0013】
また、この発明の別の目的は、特徴の迅速な検出をコンピュータに実行させるためのプログラムを提供することである。
【0014】
さらに、この発明の別の目的は、特徴の迅速な検出をコンピュータに実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体を提供することである。
【課題を解決するための手段】
【0015】
この発明によれば、特徴検出装置は、累積モジュールと、特徴検出モジュールと、特徴判定モジュールとを備える。累積モジュールは、1つのフレームを構成し、かつ、行方向および列方向に配列された複数の画素の複数の輝度に基づいて1つの行および1つの列のいずれか一方に含まれる各画素の輝度の累積値を行方向または列方向に演算する累積処理を全ての行または全ての列に対して並行して実行する。特徴検出モジュールは、特徴を画素の明暗の差によって表したHaar特徴を行方向または列方向に所望の画素数分ずつ移動させながら走査してHaar特徴の明暗差に一致する明暗差を有する画素領域の個数の累積値である個数累積値をHaar特徴を複数のHaar特徴に変えながら演算する特徴検出処理を並列して実行する。特徴判定モジュールは、特徴検出処理が実行されたときに同じ画素領域に対して演算された複数の個数累積値をしきい値と比較し、しきい値以上の個数累積値が検出されたとき、特徴を検出したと判定し、しきい値よりも小さい個数累積値が検出されたとき、特徴が検出されなかったと判定する判定処理を並列して実行する。累積処理は、1つの行の左端の画素を第0番目の画素とした場合、第0番目の画素の輝度から第g(gは正の整数)番目の画素における輝度までを加算した値を第h番目の画素の累積値とする処理である。複数の走査は、列方向または行方向の相互に異なる複数の位置におけるHaar特徴の走査からなる。複数のHaar特徴は、白領域と黒領域とによって構成された1つのパターンからなる単一Haar特徴と、各々が白領域と黒領域とによって構成された複数のパターンからなる混合Haar特徴とを含む。
【0016】
好ましくは、特徴検出モジュールは、サイズ算出モジュールと、一致処理モジュールとを含む。サイズ算出モジュールは、複数のHaar特徴のサイズを算出する。一致処理モジュールは、サイズ算出モジュールによって算出されたサイズを有する複数のHaar特徴を用いて特徴検出処理を並列して実行する。そして、サイズ算出モジュールは、一致処理モジュールが複数のHaar特徴の1つのサイズに対して特徴検出処理を並列して実行するとともに特徴判定モジュールが複数のHaar特徴の1つのサイズに対して判定処理を並列して実行するごとに複数のHaar特徴のサイズを大きくする。
【0017】
好ましくは、特徴検出装置は、画像縮小モジュールを更に備える。画像縮小モジュールは、1つのフレームのサイズを縮小する。サイズ算出モジュールは、各Haar特徴を含む走査ウィンドウのサイズを算出する。画像縮小モジュールは、走査ウィンドウのサイズが1つのフレームの行方向のサイズまたは1つのフレームの列方向のサイズよりも大きくなるごとに1つのフレームのサイズを縮小する。
【0018】
好ましくは、混合Haar特徴の複数のパターンは、行方向および列方向の幅が相互に同じであり、かつ、行方向の両端の位置が相互に同じである。
【0019】
好ましくは、累積モジュールは、メモリと演算器とを含み、かつ、演算器がメモリから同じクロックでデータを読み出して演算する演算装置によって累積処理を実行する。特徴検出モジュールは、演算装置によって個数累積値を演算する。
【0020】
また、この発明によれば、プログラムは、特徴検出をコンピュータに実行させるためのプログラムであって、累積モジュールが、1つのフレームを構成し、かつ、行方向および列方向に配列された複数の画素の複数の輝度に基づいて1つの行および1つの列のいずれか一方に含まれる各画素の輝度の累積値を行方向または列方向に演算する累積処理を全ての行または全ての列に対して並行して実行する第1のステップと、特徴検出モジュールが、特徴を画素の明暗の差によって表したHaar特徴を行方向または列方向に所望の画素数分ずつ移動させながら走査してHaar特徴の明暗差に一致する明暗差を有する画素領域の個数の累積値である個数累積値をHaar特徴を複数のHaar特徴に変えながら演算する特徴検出処理を並列して実行する第2のステップと、特徴判定モジュールが、特徴検出処理が実行されたときに同じ画素領域に対して演算された複数の個数累積値をしきい値と比較し、しきい値以上の個数累積値が検出されたとき、特徴を検出したと判定し、しきい値よりも小さい個数累積値が検出されたとき、特徴が検出されなかったと判定する判定処理を並列して実行する第3のステップとをコンピュータに実行させる。累積処理は、1つの行の左端の画素を第0番目の画素とした場合、第0番目の画素の輝度から第g(gは正の整数)番目の画素における輝度までを加算した値を第h番目の画素の累積値とする処理である。複数の走査は、列方向または行方向の相互に異なる複数の位置におけるHaar特徴の走査からなる。複数のHaar特徴は、白領域と黒領域とによって構成された1つのパターンからなる単一Haar特徴と、各々が白領域と黒領域とによって構成された複数のパターンからなる混合Haar特徴とを含む。
【0021】
好ましくは、第2のステップは、サイズ算出モジュールが、複数のHaar特徴のサイズを算出する第1のサブステップと、一致処理モジュールが、サイズ算出モジュールによって算出されたサイズを有する複数のHaar特徴を用いて特徴検出処理を並列して実行する第2のサブステップとを含む。サイズ算出モジュールは、第1のサブステップにおいて、一致処理モジュールが複数のHaar特徴の1つのサイズに対して特徴検出処理を並列して実行するとともに特徴判定モジュールが複数のHaar特徴の1つのサイズに対して判定処理を並列して実行するごとに複数のHaar特徴のサイズを大きくする。
【0022】
好ましくは、プログラムは、画像縮小モジュールが、1つのフレームのサイズを縮小する第4のステップを更にコンピュータに実行させ、サイズ算出モジュールは、第1のサブステップにおいて、各Haar特徴を含む走査ウィンドウのサイズを算出し、画像縮小モジュールは、第4のステップにおいて、走査ウィンドウのサイズが1つのフレームの行方向のサイズまたは1つのフレームの列方向のサイズよりも大きくなるごとに1つのフレームのサイズを縮小する。
【0023】
好ましくは、混合Haar特徴の複数のパターンは、行方向および列方向の幅が相互に同じであり、かつ、行方向の両端の位置が相互に同じである。
【0024】
さらに、この発明によれば、記録媒体は、請求項6から請求項9のいずれか1項に記載のプログラムを記録したコンピュータ読み取り可能な記録媒体である。
【発明の効果】
【0025】
この発明においては、入力画像の各画素の輝度を累積する累積処理は、入力画像の行方向または列方向へ並行して実行される。また、Haar特徴の形状に基づく画素領域の明暗差の演算、Haar特徴の形状に基づく画素領域の明暗差とHaar特徴の明暗差との一致の検証および一致の検証の結果を示す累積値に基づく特徴検出が入力画像の行方向または列方向へ並行して実行される。
【0026】
したがって、この発明によれば、特徴を迅速に検出できる。
【図面の簡単な説明】
【0027】
【図1】この発明の実施の形態による特徴検出装置の機能ブロック図である。
【図2】入力画像の概念図である。
【図3】画素の輝度の累積値を計算する方法を説明するための図である。
【図4】この発明の実施の形態におけるHaar特徴の概念図である。
【図5】スキャンウィンドウの走査方法を説明するための図である。
【図6】画素とHaar特徴との一致を検出する方法を説明するための図である。
【図7】画素とHaar特徴との一致を検出する他の方法を説明するための図である。
【図8】画素とHaar特徴との一致を検出するさらに他の方法を説明するための図である。
【図9】画素とHaar特徴との一致を検出するさらに他の方法を説明するための図である。
【図10】画素とHaar特徴との一致を検出するさらに他の方法を説明するための図である。
【図11】図1に示す特徴検出装置の動作を説明するためのフローチャートである。
【図12】図1に示す特徴検出装置のハード構成を示す構成図である。
【図13】図12に示すSIMDアクセラレータの構成図である。
【図14】従来の積分画像(Integral Image)を説明するための図である。
【発明を実施するための最良の形態】
【0028】
本発明の実施の形態について図面を参照しながら詳細に説明する。なお、図中同一または相当部分には同一符号を付してその説明は繰返さない。
【0029】
図1は、この発明の実施の形態による特徴検出装置の機能ブロック図である。図1を参照して、この発明の実施の形態による特徴検出装置10は、画像縮小モジュール1と、累積モジュール2と、サイズ算出モジュール3と、一致処理モジュール4と、強識別器モジュール5とを含む。
【0030】
画像縮小モジュール1は、各フレームからなる入力画像を受ける。各フレームは、行方向および列方向に配列された複数の画素からなる。複数の画素の各々は、画素の輝度からなる。画像縮小モジュール1は、入力画像を受けると、その受けた入力画像を後述する方法によって縮小する。そして、画像縮小モジュール1は、その縮小した入力画像を累積モジュール2へ出力する。
【0031】
また、画像縮小モジュール1は、画像を縮小するための信号GSDをサイズ算出モジュール3から受けると、その受けた信号GSDに応じて入力画像を後述する方法によって縮小する。そして、画像縮小モジュール1は、その縮小した入力画像を累積モジュール2へ出力する。
【0032】
累積モジュール2は、画像縮小モジュール1から入力画像を受ける。そして、累積モジュール2は、その受けた入力画像の複数の画素の複数の輝度に基づいて、後述する方法によって、各画素の輝度の累積値を演算する。そうすると、累積モジュール2は、各画素が輝度の累積値からなる入力画像をサイズ算出モジュール3へ出力する。
【0033】
サイズ算出モジュール3は、各画素が輝度の累積値からなる入力画像を累積モジュール2から受ける。そして、サイズ算出モジュール3は、後述する方法によって、スキャンウィンドウのサイズを算出する。ここで、スキャンウィンドウとは、人間の顔の特徴を明暗差で表したHaar特徴を含み、各フレームからHaar特徴に一致する特徴を検出するために用いられるものである。
【0034】
その後、サイズ算出モジュール3は、その演算したスキャンウィンドウのサイズが入力画像の行方向の幅または列方向の幅以下であるか否かを判定する。そして、サイズ算出モジュール3は、スキャンウィンドウのサイズが入力画像の行方向の幅または列方向の幅以下であると判定したとき、その算出したスキャンウィンドウのサイズと、入力画像とを一致処理モジュール4へ出力する。
【0035】
一方、サイズ算出モジュール3は、スキャンウィンドウのサイズが入力画像の行方向の幅または列方向の幅よりも大きいと判定したとき、信号GSDを生成し、その生成した信号GSDを画像縮小モジュール1へ出力する。
【0036】
一致処理モジュール4は、スキャンウィンドウのサイズと入力画像とをサイズ算出モジュール3から受ける。そして、一致処理モジュール4は、Haar特徴、スキャンウィンドウのサイズおよび入力画像に基づいて、後述する方法によって、Haar特徴の明暗差に一致する明暗差を有する画素領域の個数の累積値である個数累積値を検出する。そうすると、一致処理モジュール4は、その検出した個数累積値を強識別器モジュール5へ出力する。
【0037】
強識別器モジュール5は、一致処理モジュール4から個数累積値を受ける。そして、強識別器モジュール5は、その受けた個数累積値に基づいて、後述する方法によって、人間の顔を検出する。
【0038】
図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座標からなる。
【0039】
図1に示す画像縮小モジュール1は、画像縮小率s(sは、s>1を満たす実数)を予め保持している。そして、画像縮小モジュール1は、次式によって、入力画像の画像サイズPicture sizeを縮小する。
【0040】
【数3】
【0041】
なお、式(3)において、iは、0,1,2,3,・・・である。
【0042】
画像縮小モジュール1は、i=0であるとき、式(3)に従って、自律的に入力画像を縮小する。また、画像縮小モジュール1は、iが1以上であるとき、サイズ算出モジュール3からの信号GSDに応じて、式(3)に従って入力画像を縮小する。この場合、画像縮小モジュール1は、iが画像縮小回数Imaxに達するまで、式(3)に従って入力画像を縮小する。この画像縮小回数Imaxは、予め決定されている画像の縮小回数の最大数である。
【0043】
そして、画像縮小モジュール1は、式(3)によって入力画像を1回縮小するごとに、その縮小した入力画像を累積モジュール2へ出力する。
【0044】
図3は、画素の輝度の累積値を計算する方法を説明するための図である。図3を参照して、入力画像の複数の画素の各々は、画素の輝度からなる((a)参照)。
【0045】
0列目の各画素の累積値は、0列目の各画素の輝度からなる。1列目の各画素の累積値は、0列目の各画素の輝度と、1列目の各画素の輝度との和からなる。2列目の各画素の累積値は、0列目の各画素の輝度と、1列目の各画素の輝度と、2列目の各画素の輝度との和からなる。そして、一般的に、g(gは正の整数)列目の画素の累積値は、0列目の各画素の輝度からg列目の各画素の輝度までの和からなる(図3の(b)参照)。
【0046】
図1に示す累積モジュール2は、図3に示す計算方法に従って、各行の各画素の累積値を演算する累積処理を実行する。そして、累積モジュール2は、列方向に配置された複数の行に対して累積処理を並行して実行する。
【0047】
累積モジュール2は、各行の画素の累積値を演算すると、各画素が累積値からなる入力画像をサイズ算出モジュール3へ出力する。
【0048】
このように、累積モジュール2は、複数の行に対して、画素の輝度の累積処理を並行して実行する。したがって、入力画像を構成する複数の画素の累積値を迅速に演算できる。
【0049】
サイズ算出モジュール3は、スキャンウィンドウの初期サイズwと、スキャンウィンドウの拡大率e(eは、1よりも大きい実数)とを予め保持している。初期サイズwは、たとえば、20ピクセル×20ピクセルからなる。
【0050】
サイズ算出モジュール3は、初期サイズw、拡大率eおよび拡大回数j(jは正の整数)を次式に代入してスキャンウィンドウのサイズScan window sizeを算出する。ここで、拡大回数jは、スキャンウィンドウを拡大する回数である。
【0051】
【数4】
【0052】
そして、サイズ算出モジュール3は、wej≦Xmaxであるか、またはwej≦Ymaxであるかを判定する。
【0053】
サイズ算出モジュール3は、wej≦Xmaxである、またはwej≦Ymaxであるとき、その算出したスキャンウィンドウのサイズScan window sizeと、各画素が累積値からなる入力画像とを一致処理モジュール4へ出力する。
【0054】
一方、サイズ算出モジュール3は、wejがXmaxおよびYmaxのいずれか一方よりも大きいとき、信号GSDを生成し、その生成した信号GSDを画像縮小モジュール1へ出力する。
【0055】
図4は、この発明の実施の形態におけるHaar特徴の概念図である。図4を参照して、この発明の実施の形態におけるHaar特徴は、パターン0〜パターン14によって示される15個のHaar特徴CH0〜CH14からなる。そして、15個のHaar特徴CH0〜CH14の各々は、黒領域と白領域とからなる。
【0056】
なお、図4においては、パターン0〜パターン14の四角形の枠は、スキャンウィンドウを表す。
【0057】
パターン0〜パターン6は、白領域と黒領域とによって構成された1個のパターンからなるHaar特徴CH0〜CH6がスキャンウィンドウ内の所望の位置に配置される。そして、Haar特徴CH0〜CH6は、OpenCVで用いられているHaar特徴である(非特許文献6)。
【0058】
パターン7〜パターン14は、各々が白領域と黒領域とによって構成された複数のパターンからなるHaar特徴CH7〜CH14がスキャンウィンドウ内の所望の位置に配置される。そして、パターン7〜パターン14によって示されるHaar特徴CH7〜CH14は、この発明によって新たに考案されたパターンであり、並列処理に適したものである。なお、パターン7〜パターン14によって示されるHaar特徴CH7〜CH14の各々は、「混合Haar特徴」を構成する。
【0059】
複数のパターンからなるHaar特徴をスキャンウィンドウ内に配置する場合の条件は、次のとおりである。
【0060】
Cnd1)複数のパターンの横幅(=行方向の幅)が同じサイズであり、かつ、複数のパターンの左端および右端(横方向(=行方向)の両端)の位置が同じである。
【0061】
Cnd2)複数のパターンの縦幅(=列方向の幅)が同じサイズである。
【0062】
水平方向(=行方向)に画素の輝度を累積加算する方式の場合、矩形領域の輝度値の総和をHaar特徴の右端の累積値から左端の累積値を減算することによって実現している。そのため、複数のパターンの間で、パターンの右端と左端とが揃っていれば、並列に同時に演算可能である。したがって、複数のパターンからなるHaar特徴をスキャンウィンドウ内に配置する場合、条件Cnd1が必要となる。
【0063】
また、複数のパターンの縦幅が同じである場合、垂直方向(列方向)に加算を行う回数が同一であるため、並列に処理が可能である。したがって、複数のパターンからなるHaar特徴をスキャンウィンドウ内に配置する場合、条件Cnd2が必要である。
【0064】
パターン0〜パターン14は、人間の顔の特徴に基づいて予め決定されたものである。そして、一致処理モジュール4は、パターン0〜パターン14を予め保持している。
【0065】
図5は、スキャンウィンドウの走査方法を説明するための図である。なお、図5においては、図4の(a)に示すパターン0からなるHaar特徴を配置したスキャンウィンドウSW1を例としてスキャンウィンドウの走査方法について説明する。
【0066】
図5を参照して、スキャンウィンドウSW1は、スキャンウィンドウSW1の左端が入力画像の0列目に一致するように配置される。そして、スキャンウィンドウSW1は、入力画像の行方向へ所望の画素数m(mは正の整数)分ずつ移動させられて1つの行を走査する。図5においては、m=4である。したがって、スキャンウィンドウSW1は、入力画像の行方向へ4画素数分ずつ移動させられて行方向への1つの走査を行う。すなわち、スキャンウィンドウSW1は、最初、位置PS1に配置され、その後、スキャンウィンドウSW1は、位置PS2,PS3,・・・,PSk(kは1以上の整数)へ順次移動させられて行方向への1つの走査を行う。
【0067】
位置PS2は、スキャンウィンドウSW1に含まれるHaar特徴の左端が位置PS1よりも行方向へ4画素数分だけ移動した位置であり、位置PS3は、スキャンウィンドウSW1に含まれるHaar特徴の左端が位置PS2よりも行方向へ4画素数分だけ移動した位置であり、以下、同様にして、位置PSkは、スキャンウィンドウSW1に含まれるHaar特徴の左端が位置PSk−1よりも行方向へ4画素数分だけ移動した位置である。
【0068】
スキャンウィンドウSW2〜SWp(pは1以上の正の整数)の各々は、スキャンウィンドウSW1と同じ構成(すなわち、同じHaar特徴を同じ位置に含む)からなる。
【0069】
そして、スキャンウィンドウSW2は、スキャンウィンドウSW1よりも1行だけ列方向にずらされた位置において、スキャンウィンドウSW1と同じように位置PS1〜PSkに順次移動させられて行方向への1つの走査を行う。
【0070】
スキャンウィンドウSW3は、スキャンウィンドウSW2よりも1行だけ列方向にずらされた位置において、スキャンウィンドウSW1と同じように位置PS1〜PSkに順次移動させられて行方向への1つの走査を行う。
【0071】
以下、同様にして、スキャンウィンドウSWpは、スキャンウィンドウSWp−1よりも1行だけ列方向にずらされた位置において、スキャンウィンドウSW1と同じように位置PS1〜PSkに順次移動させられて行方向への1つの走査を行う。
【0072】
そして、p個のスキャンウィンドウSW1〜SWpの行方向への走査は、並列して行われる。
【0073】
なお、図5においては、p個のスキャンウィンドウSW1〜SWpは、行方向へずらされて図示されているが、これは、p個のスキャンウィンドウSW1〜SWpを見易くするためであり、実際には、p個のスキャンウィンドウSW1〜SWpは、最初、位置PS1に配置され、その後、位置PS2〜PSkへ順次移動させられて行方向への走査を行う。
【0074】
図6は、画素とHaar特徴との一致を検出する方法を説明するための図である。図6を参照して、スキャンウィンドウSW1が図5に示す位置PS1に位置するとき、スキャンウィンドウSW1内に配置されたHaar特徴CH0(図4の(a)参照)は、第1列〜第6列と、第1行〜第6行とによって規定される画素領域に位置する。
【0075】
Haar特徴CH0のうちの黒領域(図6においては、斜線領域)は、第1列〜第6列と、第1行〜第3行とによって規定される画素領域に位置し、Haar特徴CH0のうちの白領域は、第1列〜第6列と、第4行〜第6行とによって規定される画素領域に位置する。
【0076】
黒領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第3行の範囲において、第6列目の累積値から第0列目の累積値を減算した値になり、白領域が位置する画素領域の行方向における輝度値の総和は、第4行〜第6行の範囲において、第6列目の累積値から第0列目の累積値を減算した値になる。
【0077】
その結果、黒領域が位置する画素領域の行方向における輝度値の総和は、第1行において、“0004”になり、第2行において、“0004”になり、第3行において、“0003”になる。
【0078】
また、白領域が位置する画素領域の行方向における輝度値の総和は、第4行において、“05A0”になり、第5行において、“056C”になり、第6行において、“059C”になる。
【0079】
そして、黒領域が位置する画素領域の輝度値の総和は、列方向に配置された“0004”,“0004”,“0003”の総和になり、白領域が位置する画素領域の輝度値の総和は、列方向に配置された“05A0”,“056C”,“059C”の総和になる。
【0080】
また、Haar特徴CH0が配置された画素領域の明暗差は、黒領域が位置する画素領域の輝度値の総和から白領域が位置する画素領域の輝度値の総和を減算したものになる。
【0081】
したがって、Haar特徴CH0が配置された画素領域の明暗差は、黒領域が位置する画素領域の第1行〜第3行における輝度値の総和“0004”,“0004”,“0003”を累積加算し、その累積加算の結果から白領域が位置する画素領域の第4行〜第6行における輝度値の総和“05A0”,“056C”,“059C”を累積減算することによって求められる。すなわち、Haar特徴CH0が配置された画素領域の明暗差は、“0004”,“0004”,“0003”を列方向に累積加算し、その累積加算の結果から“05A0”,“056C”,“059C”を列方向に累積減算することによって求められる。
【0082】
その後、最終的に演算された明暗差がHaar特徴CH0の明暗差と一致するか否かが判定される。そして、最終的に演算された明暗差がHaar特徴CH0の明暗差に一致する場合、値αl(lは、0〜14)が累積値qkに加算され、最終的に演算された明暗差がHaar特徴CH0の明暗差に一致しない場合、値βlが累積値qkに加算される。そうすると、累積値qkが位置PS1に対応付けられて記憶される。ここで、値αlは、画素領域の明暗差がHaar特徴の明暗差に一致することを示し、例えば、1である。また、値βlは、画素領域の明暗差がHaar特徴の明暗差に一致しないことを示し、例えば、0である。
【0083】
なお、図4に示すパターン7、パターン8、パターン11、およびパターン12のHaar特徴CH7,CH8,CH11,CH12が用いられた場合も、Haar特徴CH7,CH8,CH11,CH12が配置された画素領域の明暗差は、図6に示す方法によって演算される。
【0084】
図7は、画素とHaar特徴との一致を検出する他の方法を説明するための図である。図7を参照して、スキャンウィンドウSW1が図5に示す位置PS1に位置するとき、スキャンウィンドウSW1内に配置されたHaar特徴CH1(図4の(b)参照)は、第1列〜第6列と、第1行〜第6行とによって規定される画素領域に位置する。
【0085】
Haar特徴CH1のうちの黒領域(図7においては、斜線領域)は、第1列および第2列と、第1行〜第6行とによって規定される画素領域と、第5列および第6列と、第1行〜第6行とによって規定される画素領域とに位置し、Haar特徴CH1のうちの白領域は、第3列および第4列と、第1行〜第6行とによって規定される画素領域に位置する。
【0086】
ここで、第0列、第2列、第4列および第6列における累積値をそれぞれP0,P2,P4,P6とすると、左側の黒領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第6行の範囲において(P2−P0)を演算した値になり、白領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第6行の範囲において、(P4−P2)を演算した値になり、右側の黒領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第6行の範囲において(P6−P4)を演算した値になる。
【0087】
また、Haar特徴CH1が配置された画素領域の明暗差は、黒領域が位置する画素領域の輝度値の総和から白領域が位置する画素領域の輝度値の総和を減算したものになる。
【0088】
したがって、Haar特徴CH1が配置された画素領域の明暗差は、第1行〜第6行の各行において(P2−P0)−2×(P4−P2)+(P6−P4)を演算し、その演算結果を列方向に累積加算した値になる。
【0089】
その後、最終的に演算された明暗差がHaar特徴CH1の明暗差と一致するか否かが判定される。そして、最終的に演算された明暗差がHaar特徴CH1の明暗差に一致する場合、値αlが累積値qkに加算され、最終的に演算された明暗差がHaar特徴CH1の明暗差に一致しない場合、値βlが累積値qkに加算される。そうすると、累積値qkが位置PS1に対応付けられて記憶される。
【0090】
なお、図4に示すパターン2、パターン13およびパターン14のHaar特徴CH2,CH13,CH14が用いられた場合も、Haar特徴CH2,CH13,CH14が配置された画素領域の明暗差は、図7に示す方法によって演算される。
【0091】
また、Haar特徴CH1,CH2,CH13,CH14の白領域と黒領域とを入れ換えたHaar特徴が用いられる場合も、Haar特徴が配置された画素領域の明暗差は、図7に示す方法によって演算される。
【0092】
図8は、画素とHaar特徴との一致を検出するさらに他の方法を説明するための図である。図8を参照して、スキャンウィンドウSW1が図5に示す位置PS1に位置するとき、スキャンウィンドウSW1内に配置されたHaar特徴CH3(図4の(d)参照)は、第1列〜第6列と、第1行〜第6行とによって規定される画素領域に位置する。
【0093】
Haar特徴CH3のうちの黒領域(図8においては、斜線領域)は、第4列〜第6列と、第1行〜第6行とによって規定される画素領域に位置し、Haar特徴CH3のうちの白領域は、第1列〜第3列と、第1行〜第6行とによって規定される画素領域に位置する。
【0094】
ここで、第0列、第3列、および第6列における累積値をそれぞれP0,P3,P6とすると、白領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第6行の範囲において、(P3−P0)を演算した値になり、黒領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第6行の範囲において(P6−P3)を演算した値になる。
【0095】
また、Haar特徴CH3が配置された画素領域の明暗差は、黒領域が位置する画素領域の輝度値の総和から白領域が位置する画素領域の輝度値の総和を減算したものになる。
【0096】
したがって、Haar特徴CH3が配置された画素領域の明暗差は、第1行〜第6行の各行において(P6−P3)−(P3−P0)を演算し、その演算結果を列方向に累積加算した値になる。
【0097】
その後、最終的に演算された明暗差がHaar特徴CH3の明暗差と一致するか否かが判定される。そして、最終的に演算された明暗差がHaar特徴CH3の明暗差に一致する場合、値αlが累積値qkに加算され、最終的に演算された明暗差がHaar特徴CH3の明暗差に一致しない場合、値βlが累積値qkに加算される。そうすると、累積値qkが位置PS1に対応付けられて記憶される。
【0098】
なお、図4に示すパターン9のHaar特徴CH9が用いられた場合も、Haar特徴CH9が配置された画素領域の明暗差は、図8に示す方法によって演算される。
【0099】
図9は、画素とHaar特徴との一致を検出するさらに他の方法を説明するための図である。図9を参照して、スキャンウィンドウSW1が図5に示す位置PS1に位置するとき、スキャンウィンドウSW1内に配置されたHaar特徴CH6(図4の(g)参照)は、第1列〜第6列と、第1行〜第6行とによって規定される画素領域に位置する。
【0100】
Haar特徴CH6のうちの黒領域(図9においては、斜線領域)は、第1列〜第3列と、第1行〜第6行とによって規定される画素領域に位置し、Haar特徴CH6のうちの白領域は、第4列〜第6列と、第1行〜第6行とによって規定される画素領域に位置する。
【0101】
ここで、第0列、第3列、および第6列における累積値をそれぞれP0,P3,P6とすると、黒領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第6行の範囲において(P3−P0)を演算した値になり、白領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第6行の範囲において、(P6−P3)を演算した値になる。
【0102】
また、Haar特徴CH6が配置された画素領域の明暗差は、黒領域が位置する画素領域の輝度値の総和から白領域が位置する画素領域の輝度値の総和を減算したものになる。
【0103】
したがって、Haar特徴CH6が配置された画素領域の明暗差は、第1行〜第6行の各行において(P3−P0)−(P6−P3)を演算し、その演算結果を列方向に累積加算した値になる。
【0104】
その後、最終的に演算された明暗差がHaar特徴CH6の明暗差と一致するか否かが判定される。そして、最終的に演算された明暗差がHaar特徴CH6の明暗差に一致する場合、値αlが累積値qkに加算され、最終的に演算された明暗差がHaar特徴CH6の明暗差に一致しない場合、値βlが累積値qkに加算される。そうすると、累積値qkが位置PS1に対応付けられて記憶される。
【0105】
なお、図4に示すパターン10のHaar特徴CH10が用いられた場合も、Haar特徴CH10が配置された画素領域の明暗差は、図9に示す方法によって演算される。
【0106】
図10は、画素とHaar特徴との一致を検出するさらに他の方法を説明するための図である。図10を参照して、スキャンウィンドウSW1が図5に示す位置PS1に位置するとき、スキャンウィンドウSW1内に配置されたHaar特徴CH4(図4の(e)参照)は、第1列〜第6列と、第1行〜第6行とによって規定される画素領域に位置する。
【0107】
Haar特徴CH4のうちの黒領域(図10においては、斜線領域)は、第1列〜第3列と、第4行〜第6行とによって規定される画素領域と、第4列〜第6列と、第1行〜第3行とによって規定される画素領域とに位置し、Haar特徴CH4のうちの白領域は、第1列〜第3列と、第1行〜第3行とによって規定される画素領域と、第4列〜第6列と、第4行〜第6行とによって規定される画素領域に位置する。
【0108】
ここで、第0列、第3列、および第6列における累積値をそれぞれP0,P3,P6とすると、黒領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第3行の範囲において(P6−P3)を演算した値になり、第4行〜第6行の範囲において(P3−P0)を演算した値になる。また、白領域が位置する画素領域の行方向における輝度値の総和は、第1行〜第3行の範囲において、(P3−P0)を演算した値になり、第4行〜第6行の範囲において、(P6−P3)を演算した値になる。
【0109】
また、Haar特徴CH4が配置された画素領域の明暗差は、黒領域が位置する画素領域の輝度値の総和から白領域が位置する画素領域の輝度値の総和を減算したものになる。
【0110】
したがって、Haar特徴CH4が配置された画素領域の明暗差は、各行において(P6−P3)−(P3−P0)を演算し、第1行〜第3行の範囲において、演算結果(P6−P3)−(P3−P0)を列方向に累積加算し、第4行〜第6行の範囲において演算結果(P6−P3)−(P3−P0)を列方向に累積減算した値になる。
【0111】
その後、最終的に演算された明暗差がHaar特徴CH4の明暗差と一致するか否かが判定される。そして、最終的に演算された明暗差がHaar特徴CH4の明暗差に一致する場合、値αlが累積値qkに加算され、最終的に演算された明暗差がHaar特徴CH4の明暗差に一致しない場合、値βlが累積値qkに加算される。そうすると、累積値qkが位置PS1に対応付けられて記憶される。
【0112】
なお、図4に示すパターン5のHaar特徴CH5が用いられた場合も、Haar特徴CH5が配置された画素領域の明暗差は、図10に示す方法によって演算される。
【0113】
図4に示すパターン0〜パターン14のHaar特徴CH0〜CH14が配置された画素領域の明暗差は、上述した方法によって演算される。
【0114】
一致処理モジュール4は、図5に示す方法によって、列方向に配置されたp個のスキャンウィンドウSW1〜SWp(各々がHaar特徴CH0を含む)を位置PS1〜PSkに順次移動させながら行方向に並行して走査し、スキャンウィンドウSW1〜SWpが各位置PS1〜PSkに配置されたときの画素領域の明暗差を上述した方法によって演算し、その演算した画素領域の明暗差がHaar特徴CH0の明暗差と一致するか否かを示す累積値qkを演算し、その演算した累積値qkを位置PS1〜PSkに対応付けて記憶する。
【0115】
その後、一致処理モジュール4は、図5に示す方法によって、列方向に配置されたp個のスキャンウィンドウSW1〜SWp(各々がHaar特徴CH1を含む)を位置PS1〜PSkに順次移動させながら行方向に並行して走査し、スキャンウィンドウSW1〜SWpが各位置PS1〜PSkに配置されたときの画素領域の明暗差を上述した方法によって演算し、その演算した画素領域の明暗差がHaar特徴CH1の明暗差と一致するか否かを示す累積値qkを演算し、その演算した累積値qkを位置PS1〜PSkに対応付けて記憶する。
【0116】
以下、同様にして、一致処理モジュール4は、図5に示す方法によって、列方向に配置されたp個のスキャンウィンドウSW1〜SWp(各々がHaar特徴CH14を含む)を位置PS1〜PSkに順次移動させながら行方向に並行して走査し、スキャンウィンドウSW1〜SWpが各位置PS1〜PSkに配置されたときの画素領域の明暗差を上述した方法によって演算し、その演算した画素領域の明暗差がHaar特徴CH14の明暗差と一致するか否かを示す累積値qkを演算し、その演算した累積値qkを位置PS1〜PSkに対応付けて記憶する。
【0117】
このように、一致処理モジュール4は、図4に示す15個のHaar特徴CH0〜CH14の全てを用いて行方向に並行して入力画像を走査し、Haar特徴CH0〜CH14が配置された画素領域の明暗差とHaar特徴CH0〜CH14の明暗差との一致を検出する。
【0118】
一致処理モジュール4は、15個のHaar特徴CH0〜CH14を含む15個のスキャンウィンドウのサイズが入力画像の行方向のサイズXmaxよりも大きくなるまで、または入力画像の列方向のサイズYmaxよりも大きくなるまで、上述した動作を繰返し実行する。すなわち、一致処理モジュール4は、Haar特徴CH0〜CH14を大きくしながらHaar特徴CH0〜CH14の明暗差に一致する画素領域の明暗差を検出する動作を繰返し実行する。
【0119】
強識別器モジュール5は、位置PS1〜PSkに対応付けられた累積値q1〜qkを一致処理モジュール4から受ける。また、強識別器モジュール5は、顔を検出するためのしきい値Tを予め保持している。そして、強識別器モジュール5は、累積値q1〜qkをしきい値Tと比較し、しきい値T以上の累積値qn(n=1〜k)が検出されると、顔が検出されたと判定し、しきい値Tよりも小さい累積値qn(n=1〜k)が検出されると、顔が検出されなかったと判定する。
【0120】
累積モジュール2、サイズ算出モジュール3、一致処理モジュール4および強識別器モジュール5は、入力画像の縮小回数が画像縮小回数Imaxに達するまで、入力画像のサイズを縮小しながら、上述した動作を繰返し実行する。
【0121】
図11は、図1に示す特徴検出装置10の動作を説明するためのフローチャートである。図11を参照して、一連の動作が開始されると、h=0、i=0、j=0、k=0、l=0およびn=0が設定される(ステップS1)。
【0122】
そして、画像縮小モジュール1は、式(3)に従って入力画像のサイズを縮小する(ステップS2)。その後、画像縮小モジュール1は、画像の縮小回数iがImax以下であるか否かを判定する(ステップS3)。
【0123】
ステップS3において、画像の縮小回数iがImax以下であると判定されたとき、累積モジュール2は、1つの行に含まれる各画素の輝度を行方向に累積加算する累積処理を入力画像の全ての行に対して並行して行なう(ステップS4)。
【0124】
より具体的には、累積モジュール2は、次式に従って各画素の輝度の累積値Phを演算する(ステップS41)。
【0125】
【数5】
【0126】
なお、式(5)において、hは、1つの行において画素の輝度を累積する最後の列を表し、tは、0〜hであり、xhは、1つの行に含まれる各画素の輝度である。
【0127】
ステップS41の後、累積モジュール2は、hがXmax以下であるか否かを判定する(ステップS42)。
【0128】
ステップS42において、hがXmax以下であると判定されたとき、累積モジュール2は、h=h+1を設定する(ステップS43)。そして、一連の動作は、ステップS41に戻る。
【0129】
そうすると、ステップS42において、hがXmaxよりも大きいと判定されるまで、上述したステップS41〜ステップS43が繰返し実行される。
【0130】
そして、ステップS42において、hがXmaxよりも大きいと判定されると、累積モジュール2は、h=0を設定する(ステップS44)。
【0131】
hは、最初、“0”に設定されているため、累積モジュール2は、ステップS41において、1つの行の0列目から0列目までの画素の輝度x0を加算する。つまり、累積モジュール2は、ステップS41が1回目に実行される場合、1つの行の0列目の画素の輝度x0を累積値Phとして演算する。
【0132】
その後、累積モジュール2は、ステップS41を2回目に実行する場合、1つの行の0列目から1列目までの画素の輝度x0,x1を加算して累積値P1を演算する。
【0133】
更に、累積モジュール2は、ステップS41を3回目に実行する場合、1つの行の0列目から2列目までの画素の輝度x0,x1,x2を加算して累積値P2を演算する。
【0134】
以下、同様にして、累積モジュール2は、ステップS41をXmax+1回目に実行する場合、1つの行の0列目からXmax列目までの画素の輝度x0,x1,・・・,xXmaxを加算して累積値PXmaxを演算する。
【0135】
したがって、累積モジュール2は、ステップS41〜ステップS43からなるループを1つの行に含まれる画素数分(Xmax個)だけ繰返し実行することによって、1つの行に含まれる各画素の輝度の累積値を演算する。
【0136】
そして、累積モジュール2は、全ての行について、1つの行に含まれる各画素の輝度の累積値を演算する累積処理を並行して行なう。
【0137】
累積モジュール2による輝度の累積処理が終了すると、顔判定が実行される(ステップS5)。
【0138】
より具体的には、サイズ算出モジュール3は、式(4)に従って、スキャンウィンドウのサイズを算出する(ステップS51)。そして、サイズ算出モジュール3は、wejがXmaxまたはYmax以下であるか否かを判定する(ステップS52)。
【0139】
ステップS52において、wejがXmaxまたはYmax以下でないと判定されたとき、サイズ算出モジュール3は、j=0を設定し、かつ、信号GSDを生成して画像縮小モジュール1へ出力し、画像縮小モジュール1は、信号GSDに応じてi=i+1を設定する(ステップS53)。その後、一連の動作は、ステップS2へ移行する。
【0140】
一方、ステップS52において、wejがXmaxまたはYmax以下であると判定されたとき、サイズ算出モジュール3は、j=j+1を設定し(ステップS54)、各画素が累積値からなる入力画像と、スキャンウィンドウのサイズとを一致処理モジュール4へ出力する。
【0141】
一致処理モジュール4は、各画素が累積値からなる入力画像と、スキャンウィンドウのサイズとをサイズ算出モジュール3から受ける。そして、一致処理モジュール4は、その受けたスキャンウィンドウのサイズを有し、かつ、l=0のHaar特徴CH0を含むスキャンウィンドウSW1を生成し、その生成したスキャンウィンドウSW1をポインタmkへ移動させる(ステップS55)。
【0142】
その後、一致処理モジュール4は、その移動させた位置において、スキャンウィンドウSW1内の画像に対し、Haar特徴CH0の形状に基づく明暗差を上述した方法によって算出する(ステップS56)。
【0143】
引き続いて、一致処理モジュール4は、スキャンウィンドウSW1内のHaar特徴の個数が2以上であるか否かを判定する(ステップS57)。
【0144】
ステップS57において、スキャンウィンドウSW1内のHaar特徴の個数が2以上であると判定されたとき、一致処理モジュール4は、スキャンウィンドウSW1内に配置された2以上のHaar特徴を用いて上述した方法によって演算された複数の明暗差を加算する(ステップS58)。
【0145】
そして、ステップS57において、スキャンウィンドウSW1内のHaar特徴の個数が2以上でないと判定されたとき、またはステップS58の後、一致処理モジュール4は、画素領域の明暗差がHaar特徴の明暗差に一致することを検証する。すなわち、一致処理モジュール4は、画素領域の明暗差に基づいて、Haar特徴との一致を検証する(ステップS59)。
【0146】
その後、一致処理モジュール4は、画素領域の明暗差がHaar特徴の明暗差に一致する場合、rl=αlを用いて累積値qk=qk+rlを演算し、画素領域の明暗差がHaar特徴の明暗差に一致しない場合、rl=βlを用いて累積値qk=qk+rlを演算する(ステップS60)。そして、一致処理モジュール4は、ポイントmk(すなわち、位置PSk)に対応付けて累積値qkを記憶する。
【0147】
その後、一致処理モジュール4は、mk+wejがXmax以下であるか否かを判定する(ステップS61)。すなわち、一致処理モジュール4は、スキャンウィンドウSW1が入力画像の行方向において入力画像内に位置するか否かを判定する。
【0148】
ステップS61において、mk+wejがXmax以下であると判定されたとき、すなわち、スキャンウィンドウSW1が入力画像の行方向において入力画像内に位置すると判定されたとき、一致処理モジュール4は、k=k+1を設定する(ステップS62)。
【0149】
そして、一連の動作は、ステップS55へ移行する。
【0150】
その後、一致処理モジュール4は、ステップS61において、mk+wejがXmaxよりも大きいと判定されるまで、すなわち、スキャンウィンドウSW1の右端が入力画像の行方向において入力画像の右端を越えたと判定されるまで、上述したステップS55〜ステップS62を繰返し実行する。
【0151】
kは、最初、“0”に設定されているため(ステップS1参照)、一致処理モジュール4は、ステップS55を1回目に実行する場合、スキャンウィンドウSW1を0列目の画素へ移動させる。そして、一致処理モジュール4は、スキャンウィンドウSW1内に配置されたHaar特徴CH0の形状に基づく明暗差を演算し(ステップS57参照)、累積値qkを演算する。
【0152】
また、一致処理モジュール4は、ステップS55を2回目に実行する場合、スキャンウィンドウSW1をm列目の画素へ移動させる。そして、一致処理モジュール4は、スキャンウィンドウSW1内に配置されたHaar特徴CH0の形状に基づく明暗差を演算し(ステップS57参照)、累積値qkを演算する。
【0153】
さらに、一致処理モジュール4は、ステップS55を3回目に実行する場合、スキャンウィンドウSW1を2m列目の画素へ移動させる。そして、一致処理モジュール4は、スキャンウィンドウSW1内に配置されたHaar特徴CH0の形状に基づく明暗差を演算し(ステップS57参照)、累積値qkを演算する。
【0154】
そして、一致処理モジュール4は、スキャンウィンドウSW1の右端が入力画像の右端を越えるまで、スキャンウィンドウSW1の各位置においてHaar特徴CH0の形状に基づく明暗差を演算し(ステップS57参照)、累積値qkを演算する。
【0155】
つまり、一致処理モジュール4は、行方向における1つの走査が終了するまで、各位置mk(=PS1〜PSk)においてHaar特徴CH0の形状に基づく明暗差を演算し(ステップS57参照)、累積値qkを演算する。
【0156】
その後、ステップS61において、mk+wejがXmaxよりも大きいと判定されると、一致処理モジュール4は、lがLmax以下であるか否かをさらに判定する(ステップS63)。すなわち、一致処理モジュール4は、予め決定した顔検出用のHaar特徴の全てを用いたか否かを判定する。
【0157】
ステップS63において、lがLmax以下であると判定されたとき、すなわち、全てのHaar特徴を用いていないと判定されたとき、一致処理モジュール4は、l=l+1およびk=0を設定する(ステップS64)。そして、一連の動作は、ステップS55へ移行する。
【0158】
その後、ステップS63において、lがLmaxよりも大きいと判定されるまで、すなわち、全てのHaar特徴を用いたと判定されるまで、一致処理モジュール4は、ステップS55〜ステップS64を繰返し実行する。
【0159】
そして、ステップS63において、lがLmaxよりも大きいと判定されると、すなわち、全てのHaar特徴を用いたと判定されると、一致処理モジュール4は、l=0を設定する(ステップS65)。
【0160】
その後、一致処理モジュール4は、各位置mk(=PS1〜PSk)に対応付けられた累積値qkを強識別器モジュール5へ出力する。
【0161】
強識別器モジュール5は、各位置mk(=PS1〜PSk)に対応付けられた累積値qkを一致処理モジュール4から受ける。そして、強識別器モジュール5は、累積値qn(n=1〜k)をしきい値Tと比較し、累積値qnがしきい値T以上であるとき、人間の顔を検出したと判定し、累積値qnがしきい値Tよりも小さいとき、人間の顔を検出しなかったと判定する(ステップS66)。
【0162】
その後、強識別器モジュール5は、nがk以下であるか否かを判定する(ステップS67)。ステップS67において、nがk以下であると判定されたとき、強識別器モジュール5は、n=n+1を設定する(ステップS68)。そして、一連の動作は、ステップS66へ移行する。
【0163】
その後、強識別器モジュール5は、ステップS67において、nがkよりも大きいと判定するまで、ステップS66〜ステップS68を繰返し実行する。すなわち、強識別器モジュール5は、スキャンウィンドウSW1の行方向への1回の走査の結果、演算されたk個の累積値q1〜qkの全てについて、顔が検出されたか否かを判定するまで、ステップS66〜ステップS68を繰返し実行する。
【0164】
そして、強識別器モジュール5は、ステップS67において、nがkよりも大きいと判定すると、k=0およびn=0を設定する(ステップS69)。その後、一連の動作は、ステップS51へ移行する。
【0165】
そして、ステップS52において、スキャンウィンドウのサイズwejがXmaxまたはYmaxよりも大きいと判定されるまで、ステップS51,S52の“YES”,ステップS55〜ステップS69が繰返し実行される。すなわち、スキャンウィンドウのサイズwejを大きくしながら、Haar特徴パターンの全てを用いたHaar特徴の形状に基づく明暗差の演算、Haar特徴の明暗差と画素領域の明暗差との一致の検証、および顔検出の判定が実行される。
【0166】
ステップS5は、入力画像の列方向に配置されたp個のスキャンウィンドウSW1〜SWpの行方向への走査に対して並行して実行される。
【0167】
そして、各ステップS5のステップS52において、スキャンウィンドウのサイズwejがXmaxまたはYmaxよりも大きいと判定されると、画像縮小モジュール1は、ステップS2において、画像サイズを縮小し、累積モジュール2は、ステップS4において、その縮小された画像サイズを有する入力画像の各画素の累積値を演算し、サイズ算出モジュール3は、ステップS51において、その縮小された画像サイズを有する入力画像に対してスキャンウィンドウのサイズを算出し、一致処理モジュール4は、その縮小された画像サイズを有する入力画像の各画素の累積値に基づいて、Haar特徴の形状に基づく画素領域の明暗差の演算、Haar特徴の明暗差と画素領域の明暗差との一致の検証、および顔検出の判定を実行する。
【0168】
この場合、ステップS51〜ステップS69からなるループにおいて、縮小された入力画像に基づいて、スキャンウィンドウのサイズを大きくしながら、Haar特徴CH0〜CH14の全てに対して、Haar特徴の形状に基づく画素領域の明暗差の演算、Haar特徴の明暗差と画素領域の明暗差との一致の検証、および顔検出の判定が実行される。
【0169】
したがって、迅速に顔を検出できる。
【0170】
そして、ステップS3において、iがImax以下であると判定されると、i=0が設定され(ステップS6)、一連の動作が終了する。
【0171】
なお、Haar特徴CH0〜CH14を用いた顔検出においては、Haar特徴CH0〜CH14は、任意の順番で用いられる。
【0172】
このように、特徴検出装置10は、入力画像の各画素の輝度の累積演算を全ての行について並行して行ない(ステップS4参照)、複数のスキャンウィンドウSW1〜SWpを用いた行方向への走査を並行して行ない、Haar特徴の形状に基づく画素領域の明暗差の演算、Haar特徴の明暗差と画素領域の明暗差との一致の検証、および顔検出の判定を複数のスキャンウィンドウSW1〜SWpの行方向への走査に対して並行して行なう(ステップS5参照)。
【0173】
したがって、Haar特徴を用いた顔検出を迅速に行なうことができる。
【0174】
特に、図4に示すパターン7〜パターン14のHaar特徴CH7〜CH14のいずれかが用いられる場合、1つのスキャンウィンドウSWの行方向への走査によって、パターン0〜パターン6のHaar特徴CH0〜CH6を含む1つのスキャンウィンドウSWの行方向への走査を2回実行した効果が得られる。したがって、顔を迅速に検出することができる。
【0175】
なお、サイズ算出モジュール3がステップS51においてスキャンウィンドウSWのサイズを大きくすると、スキャンウィンドウSWに含まれるHaar特徴(Haar特徴CH0〜CH14のいずれか)も大きくなるので、サイズ算出モジュール3がステップS51においてスキャンウィンドウSWのサイズを大きくすることは、Haar特徴(Haar特徴CH0〜CH14のいずれか)のサイズを大きくすることに相当する。
【0176】
また、図4に示すパターン7〜パターン14のHaar特徴CH7〜CH14のいずれかが用いられる場合、一致処理モジュール4は、ステップS58において、Haar特徴CH7〜CH14の各々に含まれる複数の形状(=パターン)に基づく画素領域の明暗差を相互に加算する。
【0177】
図12は、図1に示す特徴検出装置10のハード構成を示す構成図である。図12を参照して、特徴検出装置100は、メインメモリ110と、DMAC(Direct Memory Access Controller)120と、CPU(Central Processing Unit)130と、SIMD(Single Instruction Multiple Data)アクセラレータ140と、バスBSとを備える。
【0178】
メインメモリ110、DMAC120、CPU130およびSIMDアクセラレータ140は、バスBSを介して相互に接続される。
【0179】
メインメモリ110は、カメラによって撮影された画像データと、Haar特徴CH0〜CH14と、スキャンウィンドウの初期サイズと、スキャンウィンドウの行方向への移動量mとを格納する。また、メインメモリ110は、図11に示すフローチャートからなるプログラムを格納する。
【0180】
DMAC120は、CPU130を介さないで、メインメモリ110に格納された画像データを1つのフレームずつバスBSを介して読み出し、その読み出した画像データをSIMDアクセラレータへ出力するコントローラとなっている。
【0181】
CPU130は、この発明の実施の形態による顔検出を実行する場合、メインメモリ110からプログラムを読み出し、その読み出したプログラムを実行してDMAC120およびSIMDアクセラレータ140を制御する。また、CPU130は、バスBSを介して各画素が輝度からなる画像データをメインメモリ10から受け、その受けた画像データをSIMDアクセラレータ140へ出力する。さらに、CPU130は、バスBSを介してHaar特徴CH0〜CH14、スキャンウィンドウの初期サイズ、およびスキャンウィンドウの行方向への移動量mをメインメモリ110から読み出し、その読み出したHaar特徴CH0〜CH14、スキャンウィンドウの初期サイズ、およびスキャンウィンドウの行方向への移動量mをSIMDアクセラレータ140へ出力する。
【0182】
SIMDアクセラレータ140は、CPU130からの制御に応じて、CPU130から画像データ、Haar特徴CH0〜CH14、スキャンウィンドウの初期サイズ、およびスキャンウィンドウの行方向への移動量mを受け、その受けた画像データ、Haar特徴CH0〜CH14、スキャンウィンドウの初期サイズ、およびスキャンウィンドウの行方向への移動量mに基づいて、図11に示すフローチャートに従って各画像データ中の人間の顔を検出する。そして、SIMDアクセラレータ140は、その検出した顔をCPU130へ出力する。
【0183】
図13は、図12に示すSIMDアクセラレータ140の構成図である。図13を参照して、SIMDアクセラレータ140は、コントローラ1401と、演算領域1402,1405,1407と、データ蓄積領域1403と、演算器(PE:Processing Element)1404と、結果領域1406と、システム領域1408とを含む。
【0184】
コントローラ1401は、登録部1410〜1414を含む。そして、コントローラ1401は、CPU130から画像データ、Haar特徴CH0〜CH14、スキャンウィンドウの初期サイズ、およびスキャンウィンドウの行方向への移動量mを受ける。そして、コントローラ1401は、画像データをデータ蓄積領域1403に格納し、Haar特徴CH0〜CH14を登録部1410に格納し、スキャンウィンドウの初期サイズを登録部1411に格納し、スキャンウィンドウの行方向への移動量mを登録部1412に格納する。
【0185】
また、コントローラ1401は、図11に示すステップS51に従ってスキャンウィンドウのサイズを算出する。
【0186】
さらに、コントローラ1401は、図11に示すS52に従って、wejがXmaxまたはYmax以下であるか否かを判定し、wejがXmaxまたはYmaxよりも大きいと判定したとき、信号GSDを生成する。
【0187】
さらに、コントローラ1401は、学習によって予め作製されたHaar特徴を含むスキャンウィンドウのサイズを、その算出したスキャンウィンドウのサイズに設定する。そして、コントローラ1401は、そのサイズを設定したスキャンウィンドウSWおよびスキャンウィンドウSWの行方向への移動量mを演算器1404へ出力する。
【0188】
さらに、コントローラ1401は、図11に示すステップS63において、lがLmax以下であると判定するごとに、別のHaar特徴を含むスキャンウィンドウSWを作成して演算器1404へ出力する。
【0189】
さらに、コントローラ1401は、登録部1413に予め格納されたしきい値Tを読み出し、累積値qnを結果領域1406から読み出す。そして、コントローラ1401は、図11に示すステップS66〜ステップS68に従って、演算領域1407を用いて、各累積値qnをしきい値Tと比較して人間の顔を検出する。そして、コントローラ1401は、その検出結果をCPU130を介してメインメモリ110へ出力する。
【0190】
演算器1404は、図11に示すステップS4に従って、データ蓄積領域1403に格納された画像データの各画素の輝度の累積加算を演算領域1402を用いて全ての行について並行して行ない、その累積値をデータ蓄積領域1403に格納する。
【0191】
また、演算器1404は、コントローラ1401からスキャンウィンドウSWおよびスキャンウィンドウSWの行方向への移動量mを受ける。そして、演算器1404は、その受けたスキャンウィンドウSWおよびスキャンウィンドウSWの行方向への移動量mに基づいて、図11に示すステップS55〜ステップS62を実行する。この場合、演算器1404は、Haar特徴の形状に基づく画素領域の明暗差の演算を演算領域1405を用いて複数のスキャンウィンドウの行方向への走査に対して並行して行なう。また、演算器1404は、Haar特徴の明暗差と、Haar特徴の形状に基づく画素領域の明暗差との一致を検証し、その検証結果を示す累積値qkを結果領域1406を用いて演算する。
【0192】
演算領域1402,1405,1407は、各種の演算に用いられる領域である。また、システム領域1408は、システムの使用領域である。
【0193】
演算器1404は、ステップS4に従って各画素の輝度の累積値を演算する場合、1つの行において隣接する2つの列に属する2つの画素の2つの輝度を1クロックで2ビットずつデータ蓄積領域1403から読み出して加算する。
【0194】
また、演算器1404は、ステップS56に従って、Haar特徴の形状に基づく画素領域の明暗差を演算する場合、行方向(水平方向)の累積値の減算を列方向に配置された複数のスキャンウィンドウSW内に含まれる複数のHaar特徴の形状に基づく複数の画素領域に対して並行して行ない、その演算結果を列方向(垂直方向)に加減算してHaar特徴の形状に基づく画素領域の明暗差を演算する。
【0195】
このように、SIMDアクセラレータ140は、並列処理に適した演算器である。
【0196】
SIMDアクセラレータ140の演算器1404は、図1に示す累積モジュール2および一致処理モジュール4を構成し、SIMDアクセラレータ140のコントローラ1401は、図1に示すサイズ算出モジュール3および強識別器モジュール5を構成する。
【0197】
なお、上記においては、特徴検出装置10について説明したが、この発明によれば、これに限らず、特徴検出装置10は、画像データ中の人間の顔以外の何からの特徴を上述した方法によって検出するものであればよい。この場合、Haar特徴は、特徴を画素の明暗の差によって表したものとして定義される。
【0198】
また、上記においては、複数のスキャンウィンドウSW1〜SWpを1行ずつ列方向にずらせて配置し、複数のスキャンウィンドウSW1〜SWpを行方向に並行して走査すると説明したが、この発明の実施の形態においては、これに限らず、複数のスキャンウィンドウSW1〜SWpを任意の行数ずつ列方向にずらせて配置し、複数のスキャンウィンドウSW1〜SWpを行方向に並行して走査してもよい。
【0199】
特に、複数の形状からなるHaar特徴CH7〜CH14が用いられる場合、複数のパターンの一方が既に走査した行を重複して行方向に走査しないように複数のスキャンウィンドウSW1〜SWpを列方向にずらせて配置し、複数のスキャンウィンドウSW1〜SWpを行方向に並行して走査する。これによって、1回の行方向への走査に用いる複数のスキャンウィンドウSW1〜SWpの個数を最小限にでき、Haar特徴の形状に基づく画素領域の明暗差の演算、Haar特徴の形状に基づく画素領域の明暗差とHaar特徴の明暗差との一致の検証処理、その一致結果を示す累積値qkの演算、および累積値qkおよびしきい値Tに基づく顔検出処理を少なくでき、顔の検出を更に迅速に行なうことができる。
【0200】
さらに、上記においては、特徴検出装置10は、入力画像のサイズを縮小しながら人間の顔を検出すると説明したが、この発明の実施の形態においては、これに限らず、特徴検出装置10は、入力画像のサイズを一定に保持したまま入力画像から人間の顔を検出してもよい。この場合、特徴検出装置10は、図11に示すステップS4,S5に従って人間の顔を検出する。ステップS4,S5が入力画像の行方向に対して並行して実行されれば、人間の顔を迅速に検出できるからである。
【0201】
さらに、この発明の実施の形態においては、特徴検出装置10は、スキャンウィンドウのサイズを一定にして人間の顔を検出してもよい。ステップS4、およびステップS5のステップS55〜ステップS69が行方向に並行して実行されれば、人間の顔を迅速に検出できるからである。
【0202】
さらに、この発明の実施の形態においては、各画素の輝度の累積加算、Haar特徴の形状に基づく画素領域の明暗差の演算、およびHaar特徴の形状に基づく画素領域の明暗差とHaar特徴の明暗差との一致の検証は、列方向に並行して行なわれてもよい。すなわち、この発明の実施の形態による特徴検出装置は、各画素の輝度の累積加算、Haar特徴の形状に基づく画素領域の明暗差の演算、およびHaar特徴の形状に基づく画素領域の明暗差とHaar特徴の明暗差との一致の検証を入力画像の行方向および列方向のいずれか一方の方向に対して並行して行なうものであればよい。
【0203】
Haar特徴の形状に基づく画素領域の明暗差とHaar特徴の明暗差との一致の検証が列方向に並行して行なわれる場合、複数のパターンからなるHaar特徴は、上述した条件Cnd1,Cnd2を満たす。
【0204】
さらに、この発明の実施の形態においては、パターン7〜パターン14によって示されるHaar特徴CH7〜CH14に限らず、並列処理に適したHaar特徴であれば、どのような形状のHaar特徴が用いられてもよい。
【0205】
さらに、この発明の実施の形態においては、図11に示すステップS4において実行される各画素の輝度の累積加算の処理は、「累積処理」を構成する。
【0206】
さらに、この発明の実施の形態においては、図11に示すステップS60において演算される累積値qkは、「個数累積値」を構成する。
【0207】
さらに、この発明の実施の形態においては、図11に示すフローチャートは、この発明の実施の形態による顔の検出をコンピュータに実行させるためのプログラムを構成する。そして、プログラムを記録したメインメモリ110は、プログラムを記録したコンピュータ(CPU)読み取り可能な記録媒体を構成する。
【0208】
さらに、この発明の実施の形態においては、サイズ算出モジュール3および一致処理モジュール4は、「特徴検出モジュール」を構成し、強識別器モジュール5は、「特徴判定モジュール」を構成する。
【0209】
さらに、この発明の実施の形態においては、Haar特徴CH0〜CH6の各々は、「単一Haar特徴」を構成し、Haar特徴CH7〜CH14の各々は、「混合Haar特徴」を構成する。
【0210】
図12の点線で囲った部分は、実施の形態における特徴検出装置の特徴的な構成部を集積回路化した場合の一例を示す。LSI(Large Scale Integrated circuite)200は、集積回路の一例であり、点線で囲まれている範囲に含まれる構成部の機能を実現する。
【0211】
集積回路は、集積度の違いや集積されている機能の違いにより、IC(Integrated Circuite)、システムLSI、スーパーLSI、ウルトラLSIと呼称されることもある。
【0212】
また、集積回路は、LSIに限るものではなく、専用回路または汎用プロセッサによって実現されてもよい。LSIを作製後にプログラムを格納することが可能なFPGA(Field Programmable Gate Array)や、LSI回路の回路セルの接続や設定を再構成することが可能なリコンフィギュラブル・プロセッサが利用されてもよい。
【0213】
さらには、半導体技術の進歩または派生する別技術によりLSIに置き換わる集積回路化の技術(バイオ技術、有機化学技術等)が登場すれば、当然、その技術を用いて上述した機能の集積化が行なわれてよい。
【0214】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した実施の形態の説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【産業上の利用可能性】
【0215】
この発明は、特徴を迅速に検出可能な特徴検出装置に適用される。また、この発明は、特徴の迅速な検出をコンピュータに実行させるためのプログラムに適用される。さらに、この発明は、特徴の迅速な検出をコンピュータに実行させるためのプログラムを記録したコンピュータ読み取り可能なプログラムに適用される。さらに、この発明は、実施の形態における特徴検出装置の特徴的な構成部の機能を集積化したLSI、IC、システムLSI、スーパーLSI、ウルトラLSI、FPGA、LSIに置き換わる集積回路化技術によって集積化された集積回路に適用される。
【符号の説明】
【0216】
1 画像縮小モジュール、2 累積モジュール、3 サイズ算出モジュール、4 一致処理モジュール、5 強識別器モジュール、10,100 特徴検出装置、110 メインメモリ、120 DMAC、130 CPU、140 SIMDアクセラレータ、1401 コントローラ、1402,1405,1407 演算領域、1403 データ蓄積領域、1404 演算器、1406 結果領域、1408 システム領域。
【特許請求の範囲】
【請求項1】
1つのフレームを構成し、かつ、行方向および列方向に配列された複数の画素の複数の輝度に基づいて1つの行および1つの列のいずれか一方に含まれる各画素の輝度の累積値を前記行方向または前記列方向に演算する累積処理を全ての行または全ての列に対して並行して実行する累積モジュールと、
特徴を画素の明暗の差によって表したHaar特徴を前記行方向または前記列方向に所望の画素数分ずつ移動させながら走査して前記Haar特徴の明暗差に一致する明暗差を有する画素領域の個数の累積値である個数累積値を前記Haar特徴を複数のHaar特徴に変えながら演算する特徴検出処理を並列して実行する特徴検出モジュールと、
前記特徴検出処理が実行されたときに同じ画素領域に対して演算された複数の前記個数累積値をしきい値と比較し、前記しきい値以上の個数累積値が検出されたとき、前記特徴を検出したと判定し、前記しきい値よりも小さい個数累積値が検出されたとき、前記特徴が検出されなかったと判定する判定処理を並列して実行する特徴判定モジュールとを備え、
前記累積処理は、1つの行の左端の画素を第0番目の画素とした場合、前記第0番目の画素の輝度から第g(gは正の整数)番目の画素における輝度までを加算した値を前記第h番目の画素の累積値とする処理であり、
前記複数の走査は、前記列方向または前記行方向の相互に異なる複数の位置における前記Haar特徴の走査からなり、
前記複数のHaar特徴は、
白領域と黒領域とによって構成された1つのパターンからなる単一Haar特徴と、
各々が白領域と黒領域とによって構成された複数のパターンからなる混合Haar特徴とを含む、特徴検出装置。
【請求項2】
前記特徴検出モジュールは、
前記複数のHaar特徴のサイズを算出するサイズ算出モジュールと、
前記サイズ算出モジュールによって算出されたサイズを有する前記複数のHaar特徴を用いて前記特徴検出処理を並列して実行する一致処理モジュールとを含み、
前記サイズ算出モジュールは、前記一致処理モジュールが前記複数のHaar特徴の1つのサイズに対して前記特徴検出処理を並列して実行するとともに前記特徴判定モジュールが前記複数のHaar特徴の1つのサイズに対して前記判定処理を並列して実行するごとに前記複数のHaar特徴のサイズを大きくする、請求項1に記載の特徴検出装置。
【請求項3】
前記1つのフレームのサイズを縮小する画像縮小モジュールを更に備え、
前記サイズ算出モジュールは、各Haar特徴を含む走査ウィンドウのサイズを算出し、
前記画像縮小モジュールは、前記走査ウィンドウのサイズが前記1つのフレームの前記行方向のサイズまたは前記1つのフレームの前記列方向のサイズよりも大きくなるごとに前記1つのフレームのサイズを縮小する、請求項2に記載の特徴検出装置。
【請求項4】
前記混合Haar特徴の複数のパターンは、前記行方向および前記列方向の幅が相互に同じであり、かつ、前記行方向の両端の位置が相互に同じである、請求項1に記載の特徴検出装置。
【請求項5】
前記累積モジュールは、メモリと演算器とを含み、かつ、前記演算器が前記メモリから同じクロックでデータを読み出して演算する演算装置によって前記累積処理を実行し、
前記特徴検出モジュールは、前記演算装置によって前記個数累積値を演算する、請求項1に記載の特徴検出装置。
【請求項6】
特徴検出をコンピュータに実行させるためのプログラムであって、
累積モジュールが、1つのフレームを構成し、かつ、行方向および列方向に配列された複数の画素の複数の輝度に基づいて1つの行および1つの列のいずれか一方に含まれる各画素の輝度の累積値を前記行方向または前記列方向に演算する累積処理を全ての行または全ての列に対して並行して実行する第1のステップと、
特徴検出モジュールが、特徴を画素の明暗の差によって表したHaar特徴を前記行方向または前記列方向に所望の画素数分ずつ移動させながら走査して前記Haar特徴の明暗差に一致する明暗差を有する画素領域の個数の累積値である個数累積値を前記Haar特徴を複数のHaar特徴に変えながら演算する特徴検出処理を並列して実行する第2のステップと、
特徴判定モジュールが、前記特徴検出処理が実行されたときに同じ画素領域に対して演算された複数の前記個数累積値をしきい値と比較し、前記しきい値以上の個数累積値が検出されたとき、前記特徴を検出したと判定し、前記しきい値よりも小さい個数累積値が検出されたとき、前記特徴が検出されなかったと判定する判定処理を並列して実行する第3のステップとをコンピュータに実行させ、
前記累積処理は、1つの行の左端の画素を第0番目の画素とした場合、前記第0番目の画素の輝度から第g(gは正の整数)番目の画素における輝度までを加算した値を前記第h番目の画素の累積値とする処理であり、
前記複数の走査は、前記列方向または前記行方向の相互に異なる複数の位置における前記Haar特徴の走査からなり、
前記複数のHaar特徴は、
白領域と黒領域とによって構成された1つのパターンからなる単一Haar特徴と、
各々が白領域と黒領域とによって構成された複数のパターンからなる混合Haar特徴とを含む、コンピュータに実行させるためのプログラム。
【請求項7】
前記第2のステップは、
サイズ算出モジュールが、前記複数のHaar特徴のサイズを算出する第1のサブステップと、
一致処理モジュールが、前記サイズ算出モジュールによって算出されたサイズを有する前記複数のHaar特徴を用いて前記特徴検出処理を並列して実行する第2のサブステップとを含み、
前記サイズ算出モジュールは、前記第1のサブステップにおいて、前記一致処理モジュールが前記複数のHaar特徴の1つのサイズに対して前記特徴検出処理を並列して実行するとともに前記特徴判定モジュールが前記複数のHaar特徴の1つのサイズに対して前記判定処理を並列して実行するごとに前記複数のHaar特徴のサイズを大きくする、請求項6に記載のコンピュータに実行させるためのプログラム。
【請求項8】
画像縮小モジュールが、前記1つのフレームのサイズを縮小する第4のステップを更にコンピュータに実行させ、
前記サイズ算出モジュールは、前記第1のサブステップにおいて、各Haar特徴を含む走査ウィンドウのサイズを算出し、
前記画像縮小モジュールは、前記第4のステップにおいて、前記走査ウィンドウのサイズが前記1つのフレームの前記行方向のサイズまたは前記1つのフレームの前記列方向のサイズよりも大きくなるごとに前記1つのフレームのサイズを縮小する、請求項7に記載のコンピュータに実行させるためのプログラム。
【請求項9】
前記混合Haar特徴の複数のパターンは、前記行方向および前記列方向の幅が相互に同じであり、かつ、前記行方向の両端の位置が相互に同じである、請求項8に記載のコンピュータに実行させるためのプログラム。
【請求項10】
請求項6から請求項9のいずれか1項に記載のプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項1】
1つのフレームを構成し、かつ、行方向および列方向に配列された複数の画素の複数の輝度に基づいて1つの行および1つの列のいずれか一方に含まれる各画素の輝度の累積値を前記行方向または前記列方向に演算する累積処理を全ての行または全ての列に対して並行して実行する累積モジュールと、
特徴を画素の明暗の差によって表したHaar特徴を前記行方向または前記列方向に所望の画素数分ずつ移動させながら走査して前記Haar特徴の明暗差に一致する明暗差を有する画素領域の個数の累積値である個数累積値を前記Haar特徴を複数のHaar特徴に変えながら演算する特徴検出処理を並列して実行する特徴検出モジュールと、
前記特徴検出処理が実行されたときに同じ画素領域に対して演算された複数の前記個数累積値をしきい値と比較し、前記しきい値以上の個数累積値が検出されたとき、前記特徴を検出したと判定し、前記しきい値よりも小さい個数累積値が検出されたとき、前記特徴が検出されなかったと判定する判定処理を並列して実行する特徴判定モジュールとを備え、
前記累積処理は、1つの行の左端の画素を第0番目の画素とした場合、前記第0番目の画素の輝度から第g(gは正の整数)番目の画素における輝度までを加算した値を前記第h番目の画素の累積値とする処理であり、
前記複数の走査は、前記列方向または前記行方向の相互に異なる複数の位置における前記Haar特徴の走査からなり、
前記複数のHaar特徴は、
白領域と黒領域とによって構成された1つのパターンからなる単一Haar特徴と、
各々が白領域と黒領域とによって構成された複数のパターンからなる混合Haar特徴とを含む、特徴検出装置。
【請求項2】
前記特徴検出モジュールは、
前記複数のHaar特徴のサイズを算出するサイズ算出モジュールと、
前記サイズ算出モジュールによって算出されたサイズを有する前記複数のHaar特徴を用いて前記特徴検出処理を並列して実行する一致処理モジュールとを含み、
前記サイズ算出モジュールは、前記一致処理モジュールが前記複数のHaar特徴の1つのサイズに対して前記特徴検出処理を並列して実行するとともに前記特徴判定モジュールが前記複数のHaar特徴の1つのサイズに対して前記判定処理を並列して実行するごとに前記複数のHaar特徴のサイズを大きくする、請求項1に記載の特徴検出装置。
【請求項3】
前記1つのフレームのサイズを縮小する画像縮小モジュールを更に備え、
前記サイズ算出モジュールは、各Haar特徴を含む走査ウィンドウのサイズを算出し、
前記画像縮小モジュールは、前記走査ウィンドウのサイズが前記1つのフレームの前記行方向のサイズまたは前記1つのフレームの前記列方向のサイズよりも大きくなるごとに前記1つのフレームのサイズを縮小する、請求項2に記載の特徴検出装置。
【請求項4】
前記混合Haar特徴の複数のパターンは、前記行方向および前記列方向の幅が相互に同じであり、かつ、前記行方向の両端の位置が相互に同じである、請求項1に記載の特徴検出装置。
【請求項5】
前記累積モジュールは、メモリと演算器とを含み、かつ、前記演算器が前記メモリから同じクロックでデータを読み出して演算する演算装置によって前記累積処理を実行し、
前記特徴検出モジュールは、前記演算装置によって前記個数累積値を演算する、請求項1に記載の特徴検出装置。
【請求項6】
特徴検出をコンピュータに実行させるためのプログラムであって、
累積モジュールが、1つのフレームを構成し、かつ、行方向および列方向に配列された複数の画素の複数の輝度に基づいて1つの行および1つの列のいずれか一方に含まれる各画素の輝度の累積値を前記行方向または前記列方向に演算する累積処理を全ての行または全ての列に対して並行して実行する第1のステップと、
特徴検出モジュールが、特徴を画素の明暗の差によって表したHaar特徴を前記行方向または前記列方向に所望の画素数分ずつ移動させながら走査して前記Haar特徴の明暗差に一致する明暗差を有する画素領域の個数の累積値である個数累積値を前記Haar特徴を複数のHaar特徴に変えながら演算する特徴検出処理を並列して実行する第2のステップと、
特徴判定モジュールが、前記特徴検出処理が実行されたときに同じ画素領域に対して演算された複数の前記個数累積値をしきい値と比較し、前記しきい値以上の個数累積値が検出されたとき、前記特徴を検出したと判定し、前記しきい値よりも小さい個数累積値が検出されたとき、前記特徴が検出されなかったと判定する判定処理を並列して実行する第3のステップとをコンピュータに実行させ、
前記累積処理は、1つの行の左端の画素を第0番目の画素とした場合、前記第0番目の画素の輝度から第g(gは正の整数)番目の画素における輝度までを加算した値を前記第h番目の画素の累積値とする処理であり、
前記複数の走査は、前記列方向または前記行方向の相互に異なる複数の位置における前記Haar特徴の走査からなり、
前記複数のHaar特徴は、
白領域と黒領域とによって構成された1つのパターンからなる単一Haar特徴と、
各々が白領域と黒領域とによって構成された複数のパターンからなる混合Haar特徴とを含む、コンピュータに実行させるためのプログラム。
【請求項7】
前記第2のステップは、
サイズ算出モジュールが、前記複数のHaar特徴のサイズを算出する第1のサブステップと、
一致処理モジュールが、前記サイズ算出モジュールによって算出されたサイズを有する前記複数のHaar特徴を用いて前記特徴検出処理を並列して実行する第2のサブステップとを含み、
前記サイズ算出モジュールは、前記第1のサブステップにおいて、前記一致処理モジュールが前記複数のHaar特徴の1つのサイズに対して前記特徴検出処理を並列して実行するとともに前記特徴判定モジュールが前記複数のHaar特徴の1つのサイズに対して前記判定処理を並列して実行するごとに前記複数のHaar特徴のサイズを大きくする、請求項6に記載のコンピュータに実行させるためのプログラム。
【請求項8】
画像縮小モジュールが、前記1つのフレームのサイズを縮小する第4のステップを更にコンピュータに実行させ、
前記サイズ算出モジュールは、前記第1のサブステップにおいて、各Haar特徴を含む走査ウィンドウのサイズを算出し、
前記画像縮小モジュールは、前記第4のステップにおいて、前記走査ウィンドウのサイズが前記1つのフレームの前記行方向のサイズまたは前記1つのフレームの前記列方向のサイズよりも大きくなるごとに前記1つのフレームのサイズを縮小する、請求項7に記載のコンピュータに実行させるためのプログラム。
【請求項9】
前記混合Haar特徴の複数のパターンは、前記行方向および前記列方向の幅が相互に同じであり、かつ、前記行方向の両端の位置が相互に同じである、請求項8に記載のコンピュータに実行させるためのプログラム。
【請求項10】
請求項6から請求項9のいずれか1項に記載のプログラムを記録したコンピュータ読み取り可能な記録媒体。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【公開番号】特開2011−123679(P2011−123679A)
【公開日】平成23年6月23日(2011.6.23)
【国際特許分類】
【出願番号】特願2009−280961(P2009−280961)
【出願日】平成21年12月10日(2009.12.10)
【出願人】(504136568)国立大学法人広島大学 (924)
【Fターム(参考)】
【公開日】平成23年6月23日(2011.6.23)
【国際特許分類】
【出願日】平成21年12月10日(2009.12.10)
【出願人】(504136568)国立大学法人広島大学 (924)
【Fターム(参考)】
[ Back to top ]