(57)【要約】【課題】矩形フィルターを用いた物体検出において、矩形特徴を計算する際に使用する積分画像を保持するためのメモリー・バッファー量を削減する。【解決手段】入力画像全体の積分画像を生成するのではなく、スキャン位置毎に検索ウィンドウの大きさに相当する必要なサイズだけの部分的な積分画像を生成して矩形特徴を計算する。また、既に計算した検索ウィンドウ分の積分画像のうち、後続のスキャン位置でまだ必要な値はメモリー・バッファーに保持し続けながら、スキャンする度に新たに検索ウィンドウに加わる領域についてのみ、計算済みの注目画素点の値を利用して積分画像を計算する。【選択図】  図１５
2011180792.tif 000002
【特許請求の範囲】
【請求項１】
被検出画像上で検索ウィンドウをスキャンする走査部と、
各スキャン位置において、所望の物体を検出するための１以上の矩形フィルターを検索ウィンドウの画像に適用して矩形特徴を計算し、得られた１以上の前記矩形特徴に基づいて物体を検出したか否かを判別する判別部と、
を備え、
前記走査部は、スキャン位置毎に前記検索ウィンドウのサイズに相当する積分画像を生成して所定のメモリー・バッファーに保持し、
前記判別部は、前記メモリー・バッファーに保持されている積分画像を用いて各スキャン位置における前記検索ウィンドウの画像について矩形特徴を計算する、
画像処理装置。
【請求項２】
前記走査部は、スキャン位置を移動する際に、以降のスキャン位置において不要となる領域の積分画像を前記メモリー・バッファーから廃棄するとともに、前記検索ウィンドウに新たに加わる領域の積分画像を計算して前記メモリー・バッファーに追加して保持する、
請求項１に記載の画像処理装置。
【請求項３】
前記走査部は、スキャン位置を移動する際に、以降のスキャン位置において前記検索ウィンドウに新たに追加される領域に隣接する領域の積分画像を前記メモリー・バッファー内に保持し続けるとともに、前記検索ウィンドウに新たに追加される領域の積分画像を、前記メモリー・バッファーに保持された前記隣接する領域の積分画像を用いて再帰的に計算する、
請求項２に記載の画像処理装置。
【請求項４】
前記走査部は、現在のスキャンライン上でスキャン位置を移動する際に、次のスキャンラインの直前の１画素以上の画素幅の画素ラインの積分画像を前記メモリー・バッファーに保持し続け、次のスキャンライン上の各スキャン位置において前記の保持した画素ラインの積分画像を用いて前記検索ウィンドウの領域の積分画像を再帰的に計算する、
請求項２に記載の画像処理装置。
【請求項５】
前記走査部は、前記被検出画像上を縦方向に走査する際に、スキャンライン毎に前記検索ウィンドウの幅分の１列の領域の積分画像を生成する、
請求項１に記載の画像処理装置。
【請求項６】
前記走査部は、前記被検出画像上を横方向に走査する際に、スキャンライン毎に前記検索ウィンドウの高さ分の１行の領域の積分画像を生成する、
請求項１に記載の画像処理装置。
【請求項７】
被検出画像上で検索ウィンドウをスキャンするとともに、スキャン位置毎に前記検索ウィンドウのサイズに相当する積分画像を生成して所定のメモリー・バッファーに保持する走査ステップと、
各スキャン位置において、所望の物体を検出するための１以上の矩形フィルターを検索ウィンドウの画像に適用し、前記メモリー・バッファーに保持されている積分画像を用いて矩形特徴を計算し、得られた１以上の前記矩形特徴に基づいて物体を検出したか否かを判別する判別ステップと、
を有する画像処理方法。
【請求項８】
被検出画像から所望の物体を検出するための処理をコンピューター上で実行するようにコンピューター可読形式で記述されたコンピューター・プログラムであって、前記コンピューターを、
被検出画像上で検索ウィンドウをスキャンするとともに、スキャン位置毎に前記検索ウィンドウのサイズに相当する積分画像を生成して所定のメモリー・バッファーに保持する走査手段、
各スキャン位置において、所望の物体を検出するための１以上の矩形フィルターを検索ウィンドウの画像に適用し、前記メモリー・バッファーに保持されている積分画像を用いて矩形特徴を計算し、得られた１以上の前記矩形特徴に基づいて物体を検出したか否かを判別する判別手段、
として機能させるためのコンピューター・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、矩形フィルターを用いて画像から所望の物体を検出する画像処理装置及び画像処理方法、並びにコンピューター・プログラムに係り、特に、積分画像を用いて矩形特徴を計算する際のメモリー・バッファー量を削減する画像処理装置及び画像処理方法、並びにコンピューター・プログラムに関する。
【背景技術】
【０００２】
顔認識などの物体検出を行なう際、画像の特徴量を抽出する手段としてフィルターが用いられる。１つのフィルターは、画像から所望の物体（例えば、被写体の顔や笑顔など）を認識できたか否かを、例えば正負の符号で表わす、ランダムより少し良い程度の「弱判別器（若しくは弱学習器：ｗｅａｋ  ｌｅａｒｎｅｒ）」に過ぎない。しかしながら、複数の弱判別器を線形結合することで、より強い判別器を構築することができる（例えば、特許文献１を参照のこと）。
【０００３】
個々の弱判別器として、例えば、Ｈａａｒ基底に基づいた矩形フィルター（Ｒｅｃｔａｎｇｌｅ  Ｆｉｌｔｅｒ、又は、Ｈａａｒ−ｌｉｋｅ  Ｆｉｌｔｅｒ）が用いられる。矩形フィルターは、黒矩形と白矩形の組み合わせからなる単純な構造である。弱判別器は、矩形フィルターを探索領域に重ね合わせて得られる矩形特徴（ｒｅｃｔａｎｇｌｅ  ｆｅａｔｕｒｅ）、すなわち、黒矩形に対応する領域内の輝度値の和と白矩形に対応する領域内の輝度値の和との差が閾値よりも大きいかで、物体を検出したか否かを判定する。
【０００４】
矩形特徴を高速に計算するために、中間的な画像である積分画像（Ｉｎｔｅｇｒａｌ  Ｉｍａｇｅ）を用いる方法が提案されている（例えば、非特許文献１を参照のこと）。積分画像とは、入力画像における各画素点を画像特徴量の累積和すなわち積分画素値で表わした画像のことである。例えば、入力画像が輝度画像の場合、入力画像内の各画素点（ｘ，ｙ）の積分画素値を、入力画像の原点（０，０）及び当該画素点（ｘ，ｙ）を対角線上の頂点とする矩形内のすべての画素点の輝度値を積分した輝度積分値で表わしたものが積分画像である。積分画像を用いると、画像内の任意の矩形領域の輝度値の和を簡単に計算することができる。したがって、白黒１つずつの矩形からなる矩形フィルター（１次微分フィルター）の場合、白矩形の領域の輝度値の和と黒矩形の領域の輝度値の和を、それぞれ積分画像を用いて高速に計算すると、前者から後者を引き算すると、矩形特徴が得られる。
【０００５】
入力画像上で矩形フィルターをスキャンする際、積分画像を用いれば、矩形特徴を高速に計算することができる。しかしながら、生成した積分画像を保持するには、入力画像と同じサイズのメモリー・バッファーが必要となるため、例えばハードウェアで実装する際には問題となる。例えば、６４０×４８０画素からなるＶＧＡ（Ｖｉｄｅｏ  Ｇｒａｐｈｉｃ  Ａｒｒａｙ）画像を処理対象とする場合、入力画像用に３０７．２Ｋバイト（８ビットのとき）のバッファーと、積分画像用に１，２２８，８００バイト（１．２Ｍバイト：但し、１画素を４バイトで表現した場合）のバッファーが必要になる。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明の目的は、矩形フィルターを用いて画像から所望の物体を好適に検出することができる、優れた画像処理装置及び画像処理方法、並びにコンピューター・プログラムを提供することにある。
【０００７】
本発明のさらなる目的は、積分画像を用いて矩形特徴を計算する際のメモリー・バッファー量を削減することができる、優れた画像処理装置及び画像処理方法、並びにコンピューター・プログラムを提供することにある。
【課題を解決するための手段】
【０００８】
本願は、上記課題を参酌してなされたものであり、請求項１に記載の発明は、
被検出画像上で検索ウィンドウをスキャンする走査部と、
各スキャン位置において、所望の物体を検出するための１以上の矩形フィルターを検索ウィンドウの画像に適用して矩形特徴を計算し、得られた１以上の前記矩形特徴に基づいて物体を検出したか否かを判別する判別部と、
を備え、
前記走査部は、スキャン位置毎に前記検索ウィンドウのサイズに相当する積分画像を生成して所定のメモリー・バッファーに保持し、
前記判別部は、前記メモリー・バッファーに保持されている積分画像を用いて各スキャン位置における前記検索ウィンドウの画像について矩形特徴を計算する、
画像処理装置である。
【０００９】
本願の請求項２に記載の発明によれば、請求項１に記載の画像処理装置の走査部は、スキャン位置を移動する際に、以降のスキャン位置において不要となる領域の積分画像を前記メモリー・バッファーから廃棄するとともに、前記検索ウィンドウに新たに加わる領域の積分画像を計算して前記メモリー・バッファーに追加して保持するように構成されている。
【００１０】
本願の請求項３に記載の発明によれば、請求項２に記載の画像処理装置の走査部は、スキャン位置を移動する際に、以降のスキャン位置において前記検索ウィンドウに新たに追加される領域に隣接する領域の積分画像を前記メモリー・バッファー内に保持し続けるとともに、前記検索ウィンドウに新たに追加される領域の積分画像を、前記メモリー・バッファーに保持された前記隣接する領域の積分画像を用いて再帰的に計算するように構成されている。
【００１１】
本願の請求項４に記載の発明によれば、請求項２に記載の画像処理装置の走査部は、現在のスキャンライン上でスキャン位置を移動する際に、次のスキャンラインの直前の１画素以上の画素幅の画素ラインの積分画像を前記メモリー・バッファーに保持し続け、次のスキャンライン上の各スキャン位置において前記の保持した画素ラインの積分画像を用いて前記検索ウィンドウの領域の積分画像を再帰的に計算するように構成されている。
【００１２】
本願の請求項５に記載の発明によれば、請求項２に記載の画像処理装置の走査部は、前記被検出画像上を縦方向に走査する際に、スキャンライン毎に前記検索ウィンドウの幅分の１列の領域の積分画像を生成するように構成されている。
【００１３】
また、本願の請求項６に記載の発明によれば、請求項２に記載の画像処理装置の走査部は、前記被検出画像上を横方向に走査する際に、スキャンライン毎に前記検索ウィンドウの高さ分の１行の領域の積分画像を生成するように構成されている。
【００１４】
本願の請求項７に記載の発明は、
被検出画像上で検索ウィンドウをスキャンするとともに、スキャン位置毎に前記検索ウィンドウのサイズに相当する積分画像を生成して所定のメモリー・バッファーに保持する走査ステップと、
各スキャン位置において、所望の物体を検出するための１以上の矩形フィルターを検索ウィンドウの画像に適用し、前記メモリー・バッファーに保持されている積分画像を用いて矩形特徴を計算し、得られた１以上の前記矩形特徴に基づいて物体を検出したか否かを判別する判別ステップと、
を有する画像処理方法である。
【００１５】
本願の請求項８に記載の発明は、被検出画像から所望の物体を検出するための処理をコンピューター上で実行するようにコンピューター可読形式で記述されたコンピューター・プログラムであって、前記コンピューターを、
被検出画像上で検索ウィンドウをスキャンするとともに、スキャン位置毎に前記検索ウィンドウのサイズに相当する積分画像を生成して所定のメモリー・バッファーに保持する走査手段、
各スキャン位置において、所望の物体を検出するための１以上の矩形フィルターを検索ウィンドウの画像に適用し、前記メモリー・バッファーに保持されている積分画像を用いて矩形特徴を計算し、得られた１以上の前記矩形特徴に基づいて物体を検出したか否かを判別する判別手段、
として機能させるためのコンピューター・プログラムである。
【００１６】
本願の請求項８に係るコンピューター・プログラムは、コンピューター上で所定の処理を実現するようにコンピューター可読形式で記述されたコンピューター・プログラムを定義したものである。換言すれば、本願の請求項８に係るコンピューター・プログラムをコンピューターにインストールすることによって、コンピューター上では協働的作用が発揮され、本願の請求項１に係る画像処理装置と同様の作用効果を得ることができる。
【発明の効果】
【００１７】
本発明によれば、矩形フィルターを用いた物体検出において、矩形特徴を計算する際に使用する積分画像を保持するためのメモリー・バッファー量を削減することができる、優れた画像処理装置及び画像処理方法、並びにコンピューター・プログラムを提供することができる。
【００１８】
本願の請求項１、７、８に係る発明によれば、矩形フィルターによる物体検出処理において、積分画像を用いて矩形特徴の計算を高速化するが、スキャン位置毎に検索ウィンドウのサイズに相当する部分的な積分画像を生成することから、メモリー・バッファーの容量はこの部分的な積分画像のサイズ分で済む。被検出画像全体のサイズに相当する積分画像を保持する場合に比べ、積分画像用のメモリー・バッファーの容量を大幅に削減することができる。
【００１９】
本願の請求項２に係る発明によれば、既に計算した検索ウィンドウ分の積分画像のうち、後続のスキャン位置でまだ必要な値はメモリー・バッファーに保持し続けながら、スキャンする度に新たに検索ウィンドウに加わる領域についてのみ積分画像を計算してメモリー・バッファーに追加して保持するので、積分画像の計算量を削減することができる。
【００２０】
本願の請求項３に係る発明によれば、メモリー・バッファーに追加する領域の積分画像を計算する際、注目画素点に隣接する画素点について計算済みの積分画素値を利用して再帰的に計算することで、注目画素点の積分画像の計算を簡素化することができる。
【００２１】
本願の請求項４に係る発明によれば、１つ前のスキャンライン上でスキャン位置を移動する際に保持した画素ラインの積分画像を利用して検索ウィンドウの領域の積分画像を再帰的に計算するので、積分画像の計算を簡素化することができる。また、メモリー・バッファーの容量は、検索ウィンドウと画素ラインの積分画像を保持できるサイズで済む。したがって、被検出画像全体のサイズに相当する積分画像を保持する場合に比べ、メモリー容量を大幅に削減することができる。
【００２２】
本願の請求項５に係る発明によれば、メモリー・バッファーの容量は、索ウィンドウの幅分の１列の領域の積分画像を保持できるサイズで済む。したがって、被検出画像全体のサイズに相当する積分画像を保持する場合に比べ、メモリー容量を大幅に削減することができる。
【００２３】
本願の請求項６に係る発明によれば、メモリー・バッファーの容量は、索ウィンドウの高さ分の１行の領域の積分画像を保持できるサイズで済む。したがって、被検出画像全体のサイズに相当する積分画像を保持する場合に比べ、メモリー容量を大幅に削減することができる。
【００２４】
本発明のさらに他の目的、特徴や利点は、後述する本発明の実施形態や添付する図面に基づくより詳細な説明によって明らかになるであろう。
【図面の簡単な説明】
【００２５】
【図１Ａ】図１Ａは、矩形フィルターの構成例（但し、１次微分フィルター）を示した図である。
【図１Ｂ】図１Ｂは、矩形フィルターの構成例（但し、２次微分フィルター）を示した図である。
【図１Ｃ】図１Ｃは、矩形フィルターの構成例（但し、３次微分フィルター）を示した図である。
【図１Ｄ】図１Ｄは、矩形フィルターの構成例（但し、ラプラシアン・フィルター）を示した図である。
【図２Ａ】図２Ａは、矩形フィルターにかける前の入力画像を示した図である。
【図２Ｂ】図２Ｂは、図２Ａに示した入力画像に１次微分の垂直フィルターをかけた結果を示した図である。
【図２Ｃ】図２Ｃは、図２Ａに示した入力画像にかけた１次微分の垂直フィルターを示した図である。
【図３】図３は、複数の矩形フィルターを用いて入力画像から物体を検出する処理手順を模式的に示した図である。
【図４】図４は、垂直・水平方向用矩形フィルターに対して適用する積分画像の計算方法を説明するための図である。
【図５】図５は、注目画素点の積分画素値を、隣接する３画素点の積分画素値と注目画素点の輝度値から計算する方法を説明するための図である。
【図６】図６は、垂直・水平矩形フィルター用の積分画像を用いて画像内の任意の矩形領域における輝度値の和を高速に計算する方法を説明するための図である。
【図７】図７は、斜め方向用矩形フィルターに対して適用する積分画像の計算方法を説明するための図である。
【図８】図８は、注目画素点の積分画素値を、隣接する３画素点の積分画素値と注目画素点の輝度値から計算する方法を説明するための図である。
【図９】図９は、斜め方向矩形フィルター用の積分画像を用いて画像内の任意の矩形領域における輝度値の和を高速に計算する方法を説明するための図である。
【図１０】図１０は、本発明の一実施形態に係る物体検出装置１０の機能的構成を模式的に示したブロック図である。
【図１１】図１１は、スケーリング部１２が縮小画像を生成する様子を示した図である。
【図１２】図１２は、走査部１３において入力画像上で所定のウィンドウ・サイズの検索ウィンドウＳをスキャンする様子を示した図である。
【図１３】図１３は、判別器１４の構成を示した図である。
【図１４Ａ】図１４Ａは、入力画像の各スキャン位置において積分画素値を新たに計算する領域、並びに、メモリー・バッファーに積分画素値を保持しておくべき領域を示した図である。
【図１４Ｂ】図１４はＢ、入力画像の各スキャン位置において積分画素値を新たに計算する領域、並びに、メモリー・バッファーに積分画素値を保持しておくべき領域を示した図である。
【図１４Ｃ】図１４Ｃは、入力画像の各スキャン位置において積分画素値を新たに計算する領域、並びに、メモリー・バッファーに積分画素値を保持しておくべき領域を示した図である。
【図１４Ｄ】図１４Ｄは、入力画像の各スキャン位置において積分画素値を新たに計算する領域、並びに、メモリー・バッファーに積分画素値を保持しておくべき領域を示した図である。
【図１４Ｅ】図１４Ｅは、入力画像の各スキャン位置において積分画素値を新たに計算する領域、並びに、メモリー・バッファーに積分画素値を保持しておくべき領域を示した図である。
【図１４Ｆ】図１４Ｆは、入力画像の各スキャン位置において積分画素値を新たに計算する領域、並びに、メモリー・バッファーに積分画素値を保持しておくべき領域を示した図である。
【図１４Ｇ】図１４Ｇは、入力画像の各スキャン位置において積分画素値を新たに計算する領域、並びに、メモリー・バッファーに積分画素値を保持しておくべき領域を示した図である。
【図１５】図１５は、入力画像の縦方向（Ｙ方向）をスキャンラインとする場合に必要となるメモリー・バッファーの容量を説明するための図である。
【図１６】図１６は、入力画像の横方向（Ｘ方向）をスキャンラインとする場合に必要となるメモリー・バッファーの容量を説明するための図である。
【図１７】図１７は、垂直・水平方向用矩形フィルターによる矩形特徴を、積分画像を用いて計算するための処理手順を示したフローチャートである。
【図１８】図１８は、入力画像の縦方向をスキャン方向とする場合に、スキャンライン毎に検索ウィンドウの幅分の積分画像を生成し、メモリー・バッファーに保持する様子を示した図である。
【図１９】図１９は、入力画像の横方向をスキャン方向とする場合に、スキャンライン毎に検索ウィンドウの高さ分の積分画像を生成し、メモリー・バッファーに保持する様子を示した図である。
【図２０Ａ】図２０Ａは、入力画像の各スキャン位置において積分画素値を新たに計算する領域、並びに、メモリー・バッファーに積分画素値を保持しておくべき領域を示した図である。
【図２０Ｂ】図２０はＢ、入力画像の各スキャン位置において積分画素値を新たに計算する領域、並びに、メモリー・バッファーに積分画素値を保持しておくべき領域を示した図である。
【図２０Ｃ】図２０Ｃは、入力画像の各スキャン位置において積分画素値を新たに計算する領域、並びに、メモリー・バッファーに積分画素値を保持しておくべき領域を示した図である。
【図２０Ｄ】図２０Ｄは、入力画像の各スキャン位置において積分画素値を新たに計算する領域、並びに、メモリー・バッファーに積分画素値を保持しておくべき領域を示した図である。
【図２０Ｅ】図２０Ｅは、入力画像の各スキャン位置において積分画素値を新たに計算する領域、並びに、メモリー・バッファーに積分画素値を保持しておくべき領域を示した図である。
【図２０Ｆ】図２０Ｆは、入力画像の各スキャン位置において積分画素値を新たに計算する領域、並びに、メモリー・バッファーに積分画素値を保持しておくべき領域を示した図である。
【図２０Ｇ】図２０Ｇは、入力画像の各スキャン位置において積分画素値を新たに計算する領域、並びに、メモリー・バッファーに積分画素値を保持しておくべき領域を示した図である。
【図２１】図２１は、斜め方向用矩形フィルターによる矩形特徴を、積分画像を用いて計算するための処理手順を示したフローチャートである。
【発明を実施するための形態】
【００２６】
以下、図面を参照しながら本発明の実施形態について詳細に説明する。
【００２７】
Ｈａａｒ基底に基づいた矩形フィルターは、黒矩形と白矩形の組み合わせからなる２次元フィルターであり、白黒の矩形の数により微分次数が異なる。また、矩形フィルターは、白矩形と黒矩形を垂直又は水平方向に並べた垂直・水平方向用矩形フィルターと、白矩形と黒矩形を斜め方向に並べた斜め方向用矩形フィルター（但し、本明細書中では、説明の簡素化のため、斜め方向に±４５度に傾けた斜めフィルターのみを扱う）に大別される。
【００２８】
図１Ａ〜Ｃには、矩形フィルターを例示している。１次微分フィルターは、白から黒、又は、黒から白へ変化する特徴を、入力画像から抽出することができる（図１Ａを参照のこと）。２次微分フィルターは、白→黒→白、又は、黒→白→黒のように変化する特徴を、入力画像から抽出することができる（図１Ｂを参照のこと）。３次微分フィルターは、白→黒→白→黒のようにより複雑に変化する特徴を、入力画像から抽出することができる（図１Ｃを参照のこと）。さらに、図１Ｄに示すようなラプラシアン（Ｌａｐｌａｃｉａｎ：擬微分）フィルターを利用することもできる。白黒の矩形を０度、４５度、９０度、１３５度のように幾つかの方向と、大きさを変化させて、物体の特徴を抽出する方法は、画像認識の分野で広く知られている。
【００２９】
図２Ｂには、図２Ａに示した入力画像に対して、図２Ｃに示す１次微分の垂直フィルターをかけた結果を示している。同図から、縦方向に白黒の矩形の境界を持つ垂直フィルターを用いると、入力画像から縦方向のエッジを抽出できることが分かる。また、図示しないが、横方向に白黒の矩形の境界を持つ水平フィルターを用いると、入力画像から横方向のエッジを抽出することができる。
【００３０】
図１Ａ〜図１Ｄに示した各矩形フィルターは、それぞれ１つの弱判別器となり得る。弱判別器は、矩形フィルターを探索領域に重ね合わせて得られる矩形特徴、すなわち、黒矩形に対応する領域内の輝度値の和と白矩形に対応する領域内の輝度値の和との差が閾値よりも大きいかで、物体を検出したか否かを判定する。例えば、頬の領域よりも眼の領域の輝度値が低いという学習結果を利用して、矩形特徴に基づいて入力画像から顔領域をある程度の確率で判別することができる。個々の弱判別器はランダムより少し良い程度に過ぎないが、複数の弱判別器を線形結合することで、より強い判別器を構築することができる。このような判別システムは、一般に、学習フェーズと認識フェーズが分かれており、大量の画像サンプルと矩形特徴から統計学習を行なう。学習の大枠として、例えばブースティング（Ａｄａｂｏｏｓｔ）を適用することができる。
【００３１】
上述したように、積分画像を用いれば、矩形特徴を高速に計算することができる。図３には、矩形特徴に基づく物体検出の処理手順を模式的に図解している。
【００３２】
まず、入力画像から積分画像を作成する。積分画像は、垂直・水平矩形フィルター用と斜め方向矩形フィルター用とで作成方法が異なるため（後述）、垂直・水平矩形フィルター用、及び、斜め方向矩形フィルター用の２種類の積分画像を作成することになる。
【００３３】
次いで、入力画像上で各矩形フィルターをスキャンして、各スキャン位置（ｘ，ｙ）における矩形特徴を合計（又は、重み付け合計）して、検出スコアーＦ（ｘ，ｙ）を計算する。積分画像を用いることで、スキャン位置毎の矩形特徴を高速に計算することができる（図６、図９、後述を参照のこと）。そして、検出スコアーがある閾値以上に到達したときに、そのスキャン位置（ｘ，ｙ）で所望の物体が検出されたと判定する。
【００３４】
ここで、検出スコアーＦ（ｘ，ｙ）の閾値は、例えばブースティングやサポート・ベクター、マシン（Ｓｕｐｐｏｒｔ  Ｖｅｃｔｏｒ  Ｍａｃｈｉｎｅ：ＳＶＭ）などの統計学習器を用いて、事前に学習させておく。ブースティングを用いる場合、スキャン位置（ｘ，ｙ）におけるｉ番目の矩形フィルターから得られる矩形特徴をｆi（ｘ，ｙ）とおくと、検出スコアーＦ（ｘ，ｙ）は下式（１）のように記述される。なお、下式（１）は通常の算術平均であるが、各矩形特徴ｆi（ｘ，ｙ）を重み付け加算して検出スコアーＦ（ｘ，ｙ）を求めるようにしてもよい（後述）。
【００３５】
【数１】
2011180792.tif 000003
【００３６】
入力画像をスキャンして得られた最大の検出スコアー次第で、検出結果が否定的（ｒｅｊｅｃｔｉｏｎ）、すなわち、物体が検出されなかったという結果が返されることもある。また、スケール変換すなわち入力画像の大きさを変えながら、積分画像の生成と検出スコアーの計算を繰り返し行なう。
【００３７】
なお、最初に計算した積分画像をスケール変換すれば任意のサイズのウィンドウの探索が可能になるが、積分画像をスケール変換すると演算量が増大し、積分画像を使用して処理を高速化する効果を相殺することになる。そこで、図３に示した例では、入力画像をスケール変換する度に積分画像を再計算するようにしている。
【００３８】
垂直・水平方向用矩形フィルターに対して適用する積分画像の計算方法について、図４を参照しながら説明する。垂直又は水平方向矩形フィルターのための積分画像は、各画素点（ｘ，ｙ）を、入力画像の原点（０，０）及び当該画素点（ｘ，ｙ）を対角線上の頂点とする矩形領域内（言い換えれば、ｙよりも上でｘよりも左側の矩形領域内）のすべての画素点の画素特徴量（輝度画像の場合は輝度値）を積分した積分画素値で表わしたものである。画素点（ｘ，ｙ）の積分画素値ｉｉ（ｘ，ｙ）は、ｙよりも上でｘよりも左側の矩形領域内のすべての画素点（ｘ´，ｙ´）の輝度値ｉ（ｘ´，ｙ´）の和であり、下式（２）のように記述される（例えば、非特許文献１を参照のこと）。
【００３９】
【数２】
2011180792.tif 000004
【００４０】
ここで、１行毎の輝度値の合計（ｃｕｍｕｌａｔｉｖｅ  ｒｏｗ  ｓｕｍ）を表す変数ｓ（ｘ，ｙ）を導入すると、画像を一度スキャンするだけで、下式（３−１）、（３−２）に示すように、積分画素値ｉｉ（ｘ，ｙ）を再帰的に計算することができる（例えば、非特許文献１を参照のこと）。
【００４１】
【数３】
2011180792.tif 000005
【００４２】
上式（３−１）、（３−２）によれば、注目画素点の積分画素値を、隣接する３画素点の積分画素値と注目画素点の輝度値から計算することができる。図５には、注目画素点Ａ4の積分画素値ｉｉ（Ａ4）を、隣接する３つの画素点Ａ1、Ａ2、Ａ3の積分画素値ｉｉ（Ａ1）、ｉｉ（Ａ2）、ｉｉ（Ａ3）と注目画素点Ａ４の輝度値ｉ（Ａ4）から計算する方法を図解している。計算式は以下の通りとなる。
【００４３】
【数４】
2011180792.tif 000006
【００４４】
注目画素点に隣接する３つの画素点について積分画素値を既に計算済みであれば、上式（４）を用いることで、ｙよりも上でｘよりも左側の矩形領域内のすべての画素点について上式（２）に従って積分画素値を逐次計算する場合と比較して、積分画像をはるかに簡単に求めることができる。
【００４５】
図６には、垂直・水平矩形フィルター用の積分画像を用いて画像内の任意の矩形領域における輝度値の和を高速に計算する方法を図解している。同図中、Ａ、Ａ＋Ｂ、Ａ＋Ｃ、Ａ＋Ｂ＋Ｃ＋Ｄの各矩形領域内における輝度値の合計はそれぞれ、各画素点ａ、ｂ、ｃ、ｄにおける積分画素値ｉｉ（ａ）、ｉｉ（ｂ）、ｉｉ（ｃ）、ｉｉ（ｄ）である。したがって、矩形領域Ｄ内の輝度値の和は、４つの画素点ａ〜ｄにおける積分画素値ｉｉ（ａ）〜ｉｉ（ｄ）の加算及び引き算、すなわちｉｉ（ｄ）−ｉｉ（ｂ）−ｉｉ（ｃ）＋ｉｉ（ａ）により高速に計算することができる。
【００４６】
垂直・水平方向用の矩形フィルターは、白矩形と黒矩形を横方向又は縦方向に並べて構成される。矩形フィルターを構成する黒矩形並びに白矩形に対応する各領域内の輝度値の和を、図６に示したように積分画像を用いて、それぞれ求めることができる。したがって、白矩形の領域の輝度値の和から黒矩形の領域の輝度値の和を引き算することで、各スキャン位置にて垂直・水平方向の矩形フィルターを重ねた領域の矩形特徴を高速に計算することができる。
【００４７】
続いて、斜め方向矩形フィルター用の積分画像の計算方法について、図７を参照しながら説明する。斜め方向矩形フィルターのための積分画像は、各画素点（ｘ，ｙ）を、画素点（ｘ，ｙ）を頂点とする矩形を頂点（ｘ，ｙ）回りに４５度だけ回転させたときに入力画像の境界まで（スキャン方向の逆向きに）拡がる直角２等辺３角形の領域内のすべての画素点の画素特徴量（輝度画像の場合は輝度値）を積分した積分画素値で表わしたものである。画素点（ｘ，ｙ）の積分画素値ＲＳＡＴ（ｘ，ｙ）は、画素点（ｘ，ｙ）を頂点とする直角２等辺３角形の領域内のすべての画素点（ｘ´，ｙ´）の輝度値ｉ（ｘ´，ｙ´）の和であり、下式（５）のように記述される（例えば、非特許文献２を参照のこと）。
【００４８】
【数５】
2011180792.tif 000007
【００４９】
垂直・水平矩形フィルター用の積分画素値ｉｉ（ｘ，ｙ）と同様に、画像を一度スキャンするだけで、下式（６）に示すように、積分画素値ＲＳＡＴ（ｘ，ｙ）を再帰的に計算することができる（例えば、非特許文献２を参照のこと）。
【００５０】
【数６】
2011180792.tif 000008
【００５１】
上式（６）によれば、注目画素点の積分画素値を、隣接する３画素点の積分画素値と注目画素点の輝度値から計算することができる。図８には、注目画素点Ａ4の積分画素値ＲＳＡＴ（Ａ4）を、隣接する３画素点Ａ1、Ａ2、Ａ3の積分画素値ＲＳＡＴ（Ａ1）、ＲＳＡＴ（Ａ2）、ＲＳＡＴ（Ａ3）と注目画素点Ａ４の輝度値ｉ（Ａ4）から計算する方法を図解している。計算式は以下の通りとなる。
【００５２】
【数７】
2011180792.tif 000009
【００５３】
注目画素点に隣接する３つの画素点について積分画素値を既に計算済みであれば、上式（７）を用いることで、注目画素点を頂点とする直角２等辺３角形の領域内のすべての画素点について上式（５）に従って積分画素値を逐次計算する場合と比較して、積分画像をはるかに簡単に求めることができる（同上）。
【００５４】
図９には、斜め方向矩形フィルター用の積分画像を用いて画像内の任意の矩形領域における輝度値の和を高速に計算する方法を図解している。図中、Ａ、Ａ＋Ｂ、Ａ＋Ｃ、Ａ＋Ｂ＋Ｃ＋Ｄの各矩形領域内における輝度値の合計は、各画素点ａ、ｂ、ｃ、ｄにおける積分画素値ＲＳＡＴ（ａ）、ＲＳＡＴ（ｂ）、ＲＳＡＴ（ｃ）、ＲＳＡＴ（ｄ）の値である。したがって、矩形領域Ｄ内の輝度値の和は、４つの画素点ａ〜ｄにおける積分画素値ＲＳＡＴ（ａ）〜ＲＳＡＴ（ｄ）の加算及び引き算、すなわちＲＳＡＴ（ｄ）−ＲＳＡＴ（ｂ）−ＲＳＡＴ（ｃ）＋ＲＳＡＴ（ａ）により高速に計算することができる。
【００５５】
斜め方向用の矩形フィルターは、白矩形と黒矩形を４５度又は−４５度の方向に並べて構成される。黒矩形に対応する領域内の輝度値の和と白矩形に対応する領域内の輝度値の和の各々を、図９に示したように積分画像を用いて、それぞれ求めることできる。したがって、白矩形の領域の輝度値の和から黒矩形の領域の輝度値の和を引き算することで、各スキャン位置にて斜め方向用の矩形フィルターを重ねた領域の矩形特徴を高速に計算することができる。
【００５６】
従来、非特許文献１、２で開示されたような積分画像を用いて矩形特徴の計算を行なう場合、入力画像から上式（２）又は（５）で記述される計算式に従って入力画像と同じサイズの積分画像を１回生成しておき（図３を参照のこと）、この積分画像上で矩形フィルターをスキャンさせてスコアー計算するのが一般的である。しかしながら、入力画像と同じサイズの積分画像を生成することは、入力画像と同じサイズのメモリー・バッファーが必要であることを意味し、例えば入力画像がＶＧＡ画像であれば、積分画像用に１．２Ｍバイトのメモリー・バッファーが必要である。かかるメモリー容量は、ハードウェアで実装する際や、小メモリー容量のＰＣや組み込みデバイス上で処理する際に問題となる。
【００５７】
物体検出処理では、入力画像上で検索ウィンドウをスキャンしながら、スキャン位置毎に各矩形フィルターの矩形特徴を逐次的に計算する。各スキャン位置で矩形特徴を計算する際には、検出したい物体のサイズすなわち検索ウィンドウのサイズに相当する領域の積分画像があれば十分である。
【００５８】
そこで、本発明者は、入力画像全体の積分画像を生成するのではなく、スキャン位置毎に検索ウィンドウの大きさに相当する必要なサイズだけの部分的な積分画像を生成して矩形特徴を計算するという方法を提案する。かかる提案方法によれば、積分画像を用いることによる矩形特徴の計算の高速化と併せて、積分画像を保持するメモリー・バッファーの容量削減の効果を得ることができる。
【００５９】
例えば、検索ウィンドウのサイズが６４×３２画素であれば、検索ウィンドウのサイズ相当の積分画像を保持するために必要なメモリー容量は約１１Ｋバイトであり（但し、１画素を４バイトで表現する場合）、入力画像全体の積分画像を保持する場合と比較すると、約１／１００程度で済み、大幅なメモリー量削減になる。
【００６０】
図１０には、本発明の一実施形態に係る物体検出装置１０の機能的構成を模式的に示している。図示の物体検出装置１０は、画像入力部１１と、スケーリング部１２と、走査部１３と、判別器１４と、集団学習機１５で構成される。
【００６１】
画像入力部１１は、例えばディジタルカメラで撮影された濃淡画像（輝度画像）を入力する。スケーリング部１２は、入力画像を、指定されたすべてのスケールに拡大又は縮小したスケーリング画像を出力する。走査部１３は、各スケーリング画像について、検出したい物体の大きさとなる検索ウィンドウを例えば最上ラインから下に向かって順次水平スキャンして、現在のスキャン位置におけるウィンドウ画像を切り出す。そして、判別器１４は、走査部１３にて順次スキャンされた各ウィンドウ画像に所望の物体（例えば、被写体の顔や、手などの特定の部位）が存在するか否かを判別し、対象物を検出したときには、その検出ウィンドウＳの領域を示す位置及び大きさを検出結果として出力する。ここで、判別器１４は、複数の弱判別器を含むが、個々の弱判別器には矩形フィルターが用いられ、且つ、矩形特徴の計算には積分画像を用いて高速化が図られている。また、走査部１３は、スキャン位置毎にウィンドウ画像分のサイズの積分画像を逐次生成し、積分画像を保持するためのメモリー容量を節約するようなっている。
【００６２】
集団学習機１５は、集団学習により判別器１４を構成する複数の弱判別器の集団学習を実行する。判別器１４は、集団学習機１５の学習結果を参照して、スキャン位置毎にウィンドウ画像内に所望の物体が存在するか否かを判別する。なお、集団学習機１５は、物体検出装置１０内のコンポーネントであっても、あるいは外部の独立した装置であってもよい。
【００６３】
画像入力部１１に入力された画像（輝度画像）は、まずスケーリング部１２に供給される。スケーリング部１２では、例えばバイリニア補間を用いた画像の縮小が行なわれる。最初に複数の縮小画像を生成するのではなく、必要とされる画像を走査部１３に対して出力し、その画像の処理を終えた後で、次のさらに小さな縮小画像を生成するという処理を繰り返す。図１１には、スケーリング部１２が縮小画像１２Ａ、１２Ｂ、１２Ｃ、…を順次生成する様子を示している。同図に示すように、入力画像１２Ａをそのまま走査部１３へ出力し、走査部１３及び判別器１４の処理が終了するのを待って、入力画像１２Ａのサイズを縮小した入力画像１２Ｂを生成する。次いで、この入力画像１２Ｂにおける走査部１３及び判別器１４の処理が終了してから、入力画像１２Ｂのサイズをさらに縮小した入力画像１２Ｃを走査部１３に出力するというように、順次縮小画像１２Ｄ、１２Ｅなどを生成していく。そして、縮小画像の画像サイズが、走査部１３にて走査するウィンドウ・サイズより小さくなった時点で処理を終了する。画像入力部１１は、このような処理が終了してから、次の入力画像をスケーリング部１２に出力する。
【００６４】
図１２には、走査部１３において入力画像上で所定のウィンドウ・サイズの検索ウィンドウＳをスキャンする様子を示している。ウィンドウ・サイズは、後段の判別器５が受け付ける（すなわち対象物の判別に適した）サイズであり、例えば６４×３２画素である。走査部１３は、スケーリング部１２からの入力画像上の現在のスキャン位置に検索ウィンドウＳを当て嵌めて、ウィンドウ画像を切り取る。また、本実施形態では、走査部１３は、スキャン位置毎に検索ウィンドウ画像分のサイズの積分画像を逐次生成し、積分画像を保持するためのメモリー容量を節約するようなっている。そして、走査部１３は、各スキャン位置におけるウィンドウ画像及びウィンドウ画像の積分画像を、メモリー・バッファー（図示しない）に保持する。検索ウィンドウＳのウィンドウ・サイズは一定であるが、図１１に示した通りスケーリング部１２により入力画像を順次縮小してさまざまな画像サイズにスケール変換するので、任意の大きさの物体を検出することが可能となる。
【００６５】
判別器１４は、走査部１３から与えられたウィンドウ画像に所望の物体が含まれているか否かを判定する。図１３には、判別器１４の構成を示している。判別器１４は、複数（Ｋ個）の弱判別器１４1〜１４Kと、これらの出力にそれぞれ重みα1〜αKを乗算し、重み付き多数決を求める加算器１７で構成される。
【００６６】
本実施形態では、個々の弱判別器１４1〜１４Kには矩形フィルターが用いられ、且つ、矩形特徴の計算には積分画像を用いて高速化が図られている。各弱判別器１４1〜１４Kは、現在のスキャン位置における検索ウィンドウの画像及びその積分画像を各々のメモリー・バッファー（前述）から読み出すと、スキャン位置（ｘ，ｙ）における矩形特徴ｆi（ｘ，ｙ）を高速に計算する（但し、ｉは１〜Ｋの整数）。各矩形特徴ｆi（ｘ，ｙ）は、検索ウィンドウに所望の物体が含まれるか否かをある程度の確率で示す推定値である。加算器１７は、矩形特徴ｆi（ｘ，ｙ）を重み付き加算して検出スコアーＦ（ｘ，ｙ）を求める。各む矩形特徴ｆi（ｘ，ｙ）に付けられる重みα1〜αKは、各弱判別器１４1〜１４Kに対する信頼度を表す係数である。そして、判別器１４は、この加算結果をより強い判別結果として出力する。
【００６７】
集団学習機１５は、あらかじめ弱判別器１４1〜１４Kに割り当てる矩形フィルターと、それらの出力（矩形特徴）に乗算する重みα1〜αKを集団学習により学習する。集団学習としては、複数の弱判別器１４1〜１４Kの結果を多数決にて求めることができる手法を適用することができる。例えば、データの重み付けを行なって重み付き多数決を行なうＡｄａＢｏｏｓｔなどのブースティングを用いた集団学習を適用可能である。
【００６８】
学習の際には、所望の物体であるかの２クラスが分別すなわちラベリングされた濃淡画像からなる複数の学習サンプルを各弱判別器１４1〜１４Kに投入して、それぞれの矩形特徴をあらかじめ学習しておく。そして、判別の際には、走査部１３から順次供給されるウィンドウ画像について算出した矩形特徴を、あらかじめ学習しておいた矩形特量と比較して、ウィンドウ画像に所望の物体が含まれるか否かを推定するための推定値を確定的又は確率的に出力する。
【００６９】
ＡｄａＢｏｏｓｔでは、各弱判別器１４1〜１４Kが順次推定値を算出し、これに伴い重み付き多数決の値が逐次更新されていく。各弱判別器１４1〜１４Nでそれぞれ使用する矩形フィルター、集団学習機１５が学習サンプルを使用した集団学習により逐次的に生成したものであり、例えばその生成順に矩形特徴を算出する。また、重み付き多数決の重みα1〜αK（信頼度）は、各弱判別器１４1〜１４Kを生成する学習工程にて学習される。
【００７０】
なお、複数の弱判別器の集団学習の詳細については、例えば特許文献１（段落００７２〜０１４１）を参照されたい。
【００７１】
スキャン位置毎に検索ウィンドウ・サイズの積分画像のみを生成して矩形特徴を計算する方法によれば、積分画像を用いることによる矩形特徴の計算の高速化と併せて、メモリー容量削減の効果を得ることができる。ここで、検索ウィンドウ相当の必要なサイズだけとはいえ、スキャン位置毎に必要なサイズ内のすべての画素点について積分画像を計算し直すと、その都度計算時間がかかってしまい、積分画像を用いて矩形特徴を高速に計算するという本来のメリットを活かせなくなってしまう。
【００７２】
このため、上記の提案方法を実現する際に、既に計算した検索ウィンドウ分の積分画像のうち、後続のスキャン位置でまだ必要な値はメモリー・バッファーに保持し続けながら、スキャンする度に新たに検索ウィンドウに加わる領域についてのみ積分画像を計算してメモリー・バッファーに追加して保持するので、積分画像の計算量を削減することができる。また、メモリー・バッファーに追加する領域の積分画像を計算する際、注目画素点に隣接する３つの画素点について計算済みの積分画素値を利用して再帰的に計算することで（図５、図８、上式（４）、（７）を参照のこと）、注目画素点の積分画像の計算を簡素化することができる。
【００７３】
垂直・水平方向用の矩形フィルターを用いる場合の、入力画像の各スキャン位置において積分画素値を新たに計算する領域、並びに、メモリー・バッファーに積分画素値を保持しておくべき領域について、図１４Ａ〜図１４Ｇを参照しながら説明する。但し、同図は、スキャン方向を縦方向（Ｙ方向）とする例である。まず、原点（０，０）を開始位置として縦方向のスキャンラインに沿って検索ウィンドウを所定のスキップ幅（ｓｋｉｐ画素）ずつスキャンし、スキャン位置毎に積分画像の生成と検出スコアーの計算を行なう。そして、検索ウィンドウがスキャン方向の終端（Ｙ座標の上限）に達すると、検索ウィンドウのスキャンラインを水平方向に所定のスキップ幅（ｓｋｉｐ画素）だけスキップさせてスキャンを繰り返していく。
【００７４】
まず、走査部１３は、検索ウィンドウを原点位置（０，０）に設定して、図１４Ａ中の参照番号１４０１で示される検索ウィンドウ領域内のすべての画素点について、上式（２）、（３−１）、（３−２）に従って積分画素値を計算すると、その結果をメモリー・バッファーに保持する。
【００７５】
積分画素値を計算するとき、隣接する３画素点の既に算出した積分画素値を適宜利用して、図５並びに上式（４）に示したように、注目画素点の積分画素値を再帰的に計算する方法を適用する。
【００７６】
そして、判別部１４では、各弱判別器１４1〜１４Kがメモリー・バッファーに保持されている現在の検索ウィンドウ領域１４０１内の積分画像を用いて、当該スキャン位置での矩形特徴ｆi（０，０）をそれぞれ計算し、加算器１７がこれらを重み付け加算して、当該スキャン位置での検出スコアーＦ（０，０）を出力する。
【００７７】
次いで、図１４Ｂに示すように、走査部１３は、所定のスキップ幅（ｓｋｉｐ画素）だけ検索ウィンドウをスキャンライン（ｘ＝０）に沿って縦方向に移動させる（すなわち、ｙ＝ｙ＋ｓｋｉｐ）。移動した後のスキャン位置（０，ｓｋｉｐ）の検索ウィンドウ１４０２のうち、参照番号１４０２Ａで示す、直前のスキャン位置の検索ウィンドウ１４０１と重なる領域内の各画素点については、計算済みの積分画素値がメモリー・バッファーに保持されている。そこで、走査部１３は、参照番号１４０２Ｂで示す、スキャン位置の移動によって新たに検索ウィンドウ１４０２に加わるスキャン方向の先端の領域内の各画素についてのみ、積分画像の計算を行なうと、その結果をメモリー・バッファーにコピーし追加して保持する。
【００７８】
ここで、図１４Ｂ中の参照番号１４０２Ｂで示す、追加部分についての積分画像を計算する際には、領域１４０２内の隣接する３画素点の既に算出した積分画素値を適宜利用して、図５並びに上式（４）に示したように、注目画素点の積分画素値を再帰的に計算する方法を適用することによって、計算コストを削減することができる。
【００７９】
また、検索ウィンドウの移動に伴って、図１４Ｂ中の参照番号１４０３で示す領域の積分画像は以降の矩形特徴の計算には不要となるので、走査部１３は、メモリー・バッファーから廃棄する。但し、参照番号１４０４で示す、次のスキャンラインの直前の１画素分（すなわち、ｘ＝ｓｋｉｐ−１の１画素ライン）（若しくは１画素以上の画素幅の画素ライン）の領域は、メモリー・バッファーに保持しておく。当該１画素ライン分の領域１４０４は、次のスキャンライン（ｘ＝ｓｋｉｐ）に移動したときに、注目画素点に隣接する画素点の既に計算した積分画素値（図５を参照のこと）として利用すれば、注目画素の積分画素値を上式（４）に従って再帰的に計算できるからである。
【００８０】
そして、判別部１４では、メモリー・バッファーに保持されている現在の検索ウィンドウ領域１４０２内の積分画像を用いて、各弱判別器１４1〜１４Kが当該スキャン位置での矩形特徴ｆi（０，ｓｋｉｐ）をそれぞれ計算し、加算器１７がこれらを重み付け加算して、当該スキャン位置での検出スコアーＦ（０，ｓｋｉｐ）を出力する。
【００８１】
さらに次いで、図１４Ｃに示すように、走査部１３は、所定のスキップ幅（ｓｋｉｐ画素）だけ検索ウィンドウをスキャンライン（ｘ＝０）に沿って縦方向に移動させる（すなわち、ｙ＝ｙ＋ｓｋｉｐ）。移動した後の検索ウィンドウ１４０５のうち、参照番号１４０５Ａで示す領域内の積分画素値は、メモリー・バッファーに保持されている。そこで、走査部１３は、参照番号１４０５Ｂで示す、スキャン位置の移動によって新たに検索ウィンドウ１４０５に加わる領域内の各画素についてのみ積分画素値の計算を行ない、その結果をメモリー・バッファーに追加して保持する。追加部分の領域１４０５Ｂについての積分画像を計算する際には、領域１４０５内の隣接する３画素点の既に算出した積分画素値を適宜利用して、図５並びに上式（４）に示したように、注目画素点の積分画素値を再帰的に計算する。
【００８２】
また、検索ウィンドウの移動に伴って、参照番号１４０６で示す領域の積分画像は以降の矩形特徴の計算には不要となるので、走査部１３は、メモリー・バッファーから廃棄する。但し、参照番号１４０７で示す、次のスキャンラインの直前１画素分（すなわち、ｘ＝ｓｋｉｐ−１の１画素ライン）（若しくは１画素以上の画素幅の画素ライン）の領域の積分画像は、次のスキャンライン（ｘ＝ｓｋｉｐ）で積分画素値を再帰的に計算する際に、隣接する画素点の既知の積分画素値として利用するため、走査部１３は、メモリー・バッファーに保持しておく。
【００８３】
そして、判別部１４では、メモリー・バッファーに保持されている現在の検索ウィンドウ領域１４０５内の積分画像を用いて、各弱判別器１４1〜１４Kが当該スキャン位置での矩形特徴ｆi（０，２ｓｋｉｐ）をそれぞれ計算し、加算器１７がこれらを重み付け加算して、当該スキャン位置での検出スコアーＦ（０，２ｓｋｉｐ）を出力する。
【００８４】
以降は、検索ウィンドウが現在のスキャンライン（ｘ＝０）の終端（ｙ＝ｈｅｉｇｈｔ）に達するまで、図１４Ｂ並びに図１４Ｃに示した処理が、検索ウィンドウがスキャン位置を移動する度に繰り返し実行される。
【００８５】
図１４Ｄには、検索ウィンドウがスキャンライン（ｘ＝０）の終端（ｙ＝ｈｅｉｇｈｔ）に到達した際に、メモリー・バッファーに積分画像が保持されている領域を示している。参照番号１４０８で示す検索ウィンドウ領域内の積分画像を計算するが、当該スキャン位置での矩形特徴計算に用いた後、次のスキャンラインでの矩形特徴計算には不要となるので、走査部１３は、メモリー・バッファーから廃棄する。但し、参照番号１４０９で示す、次のスキャンラインの直前１画素分（すなわち、ｘ＝ｓｋｉｐ−１の１画素ライン）（若しくは１画素以上の画素幅の画素ライン）の領域の積分画像は、次のスキャンラインで積分画素値を再帰的に計算する際に、隣接する画素点の既知の積分画素値として利用するため、走査部１３は、メモリー・バッファーに保持しておく。
【００８６】
検索ウィンドウがスキャンライン（ｘ＝０）の終端（ｙ＝ｈｅｉｇｈｔ）に到達すると、走査部１３は、スキャンラインを所定のスキップ幅（ｓｋｉｐ）だけスキャンラインに直交する水平方向に移動させるとともに（すなわち、ｘ＝ｓｋｉｐ）、検索ウィンドウをこのスキャンラインの先頭に設定して（すなわち、ｙ＝０）、スキャンを開始する。このスキャンライン（ｘ＝ｓｋｉｐ）上をスキャンし検出スコアーを算出する間、走査部１３は、直前のスキャンライン（ｘ＝０）上での処理で保持した領域１４０９の積分画素値をメモリー・バッファーに保持し続ける。そして、現在のスキャンライン（ｘ＝ｓｋｉｐ）上の各スキャン位置で積分画素値を新たに計算する際には、領域１４０９内の積分画素値を隣接画素点の既に算出した積分画素値として適宜利用して、注目画素点の積分画素値を再帰的に計算する。
【００８７】
図１４Ｅには、検索ウィンドウが次のスキャンライン（ｘ＝ｓｋｉｐ）上で先頭位置（ｙ＝０）に設定されたときの様子を示している。参照番号１４１０で示される検索ウィンドウ領域内の画素点について積分画像を計算する。その際、メモリー・バッファーに保持されている領域１４０９内の隣接する３画素点の既に算出した積分画素値を適宜利用して、図５並びに上式（４）に示したように、注目画素点の積分画素値を再帰的に計算する。
【００８８】
そして、判別部１４では、メモリー・バッファーに保持されている現在の検索ウィンドウ１４１０領域内の積分画像を用いて、各弱判別器１４1〜１４Kが当該スキャン位置での矩形特徴ｆi（ｓｋｉｐ，０）をそれぞれ計算し、加算器１７がこれらを重み付け加算して、当該スキャン位置での検出スコアーＦ（ｓｋｉｐ，０）を出力する。
【００８９】
次いで、図１４Ｆに示すように、走査部１３は、所定のスキップ幅（ｓｋｉｐ画素）だけ検索ウィンドウをスキャンラインに沿って縦方向に移動させる（すなわち、ｙ＝ｙ＋ｓｋｉｐ）。移動した後の検索ウィンドウ１４１１のうち、参照番号１４１１Ａで示される、直前のスキャン位置の検索ウィンドウ領域内の各画素については、計算済みの積分画像がメモリー・バッファーに保持されている。そこで、走査部１３は、参照番号１４１１Ｂで示す、スキャン位置の移動によって新たに検索ウィンドウ１４１１に加わるスキャン方向の先端の領域内の各画素についてのみ、積分画素値の計算を行なうと、その結果をメモリー・バッファーに追加して保持する。追加部分についての積分画像を計算する際には、参照番号１４０９並びに１４１１で示される領域内の隣接する３画素点の既に算出した積分画素値を適宜利用して、図５並びに上式（４）に示したように、注目画素点の積分画素値を再帰的に計算する。
【００９０】
また、検索ウィンドウの移動に伴って、参照番号１４１２で示す領域の積分画像は以降の矩形特徴の計算には不要となるので、走査部１３は、メモリー・バッファーから廃棄する。但し、参照番号１４１３で示す、次のスキャンラインの直前１画素分（すなわち、ｘ＝２ｓｋｉｐ−１の１画素ライン）（若しくは１画素以上の画素幅の画素ライン）の領域は、次のスキャンライン（ｘ＝２ｓｋｉｐ）で積分画素値を再帰的に計算する際に、隣接する画素点の既知の積分画素値として利用するため、走査部１３は、メモリー・バッファーに保持しておく。
【００９１】
そして、判別部１４では、メモリー・バッファーに保持されている現在の検索ウィンドウ領域１４１１内の積分画像を用いて、各弱判別器１４1〜１４Kが当該スキャン位置での矩形特徴ｆi（ｓｋｉｐ，ｓｋｉｐ）をそれぞれ計算し、加算器１７がこれらを重み付け加算して、当該スキャン位置での検出スコアーＦ（ｓｋｉｐ，ｓｋｉｐ）を出力する。
【００９２】
以降は、検索ウィンドウが現在のスキャンライン（ｘ＝ｓｋｉｐ）の終端に達するまで、図１４Ｆに示した処理が、検索ウィンドウがスキャン位置を移動する度に繰り返し実行される。
【００９３】
また、検索ウィンドウがスキャンライン（ｘ＝ｓｋｉｐ）の終端（ｙ＝ｈｅｉｇｈｔ）に到達すると、走査部１３は、スキャンラインを所定のスキップ幅（ｓｋｉｐ）だけスキャンラインに直交する水平方向に移動させるとともに（すなわち、ｘ＝ｘ＋ｓｋｉｐ＝２ｓｋｉｐ）、検索ウィンドウをこのスキャンラインの先頭に設定して（すなわち、ｙ＝０）、スキャンを開始する。このスキャンライン（ｘ＝２ｓｋｉｐ）上でスキャンする間、走査部１３は、直前のスキャンライン（ｘ＝ｓｋｉｐ）上での処理で保持した領域１４１４の積分画像をメモリー・バッファーに保持し続ける。そして、現在のスキャンライン（ｘ＝２ｓｋｉｐ）上の各スキャン位置で積分画素値を新たに計算する際には、領域１４１４内の積分画素値を隣接画素点の既に算出した積分画素値として適宜利用して、注目画素点の積分画素値を再帰的に計算する。また、２つ前のスキャンライン上でのスキャン時に保持した領域１４０９内の積分画像（前述）は、スキャンラインの移動に伴って不要となるので、走査部１３は、メモリー・バッファーから廃棄する。
【００９４】
図１４Ｇには、検索ウィンドウが次のスキャンライン（ｘ＝２ｓｋｉｐ）上で先頭位置（ｙ＝０）に設定されたときの様子を示している。当該スキャンライン上では、図１４Ｅ、図１４Ｆに示した処理と同様の処理が繰り返し実行される。そして、スキャン位置が当該スキャンライン（ｘ＝２ｓｋｉｐ）の終端（ｙ＝ｈｅｉｇｈｔ）に到達すると、さらにスキャンラインを所定のスキップ幅（ｓｋｉｐ）だけスキャンラインに直交する水平方向に移動させる（ｘ＝ｘ＋ｓｋｉｐ）。そして、スキャンラインが入力画像の終端（ｘ＝ｗｉｄｔｈ）に到達するまで、図１４Ｅ〜図１４Ｇに示した処理と同様の処理が繰り返し実行される。
【００９５】
入力画像全体ではなく、図１４に示したように検索ウィンドウのサイズに相当する領域並びに積分画素値の再帰的計算に必要な領域の積分画像のみをメモリー・バッファーに保持する場合に必要となるメモリー・バッファーの容量について考察してみる。但し、入力画像の幅及び高さをそれぞれｗｉｄｔｈ、ｈｅｉｇｈｔとし、検索ウィンドウのサイズをｗ×ｈとし、１画素をｎバイトで表現するものとする。図１４に示したように、入力画像の縦方向（Ｙ方向）をスキャンラインとする場合、図１５に示すように、積分画像の保持用に（ｈｅｉｇｈｔ＋ｗ×ｈ）×ｎバイトのメモリー容量が必要である。例えば、入力画像がＶＧＡ画面であり、検索ウィンドウのサイズを３２×６４画素、１画素を４バイトで表現する場合、（４８０＋３２×６４）×４＝１０，３３６バイトすなわち約１１Ｋバイトである。図３に示したようにＶＧＡ画像全体について積分画像を保存するには約１．２Ｍバイトのバッファーが必要であることから、メモリー容量節約の効果は極めた大きい。また、スキャン方向を縦方向にした場合、メモリー領域が連続になり、扱い易くなるというメリットもある。
【００９６】
一方、入力画像の横方向（Ｘ方向）をスキャンラインとする場合には、図１６に示すように、積分画像の保持用に（ｗｉｄｔｈ＋ｗ×ｈ）×ｎバイトのメモリー容量が必要である。例えば、入力画像がＶＧＡ画面であり、検索ウィンドウのサイズを３２×６４画素、１画素を４バイトで表現する場合、（６４０＋３２×６４）×４＝１０，７５２バイトすなわち約１１Ｋバイトであり、メモリー容量節約の効果は大きい（同上）。
【００９７】
なお、図１５並びに図１６では、検索ウィンドウをスキャンする際のスキップ幅（ｓｋｉｐ）を１画素として、積分画像を保持するために必要なメモリー・バッファーの容量について試算したが、本発明の要旨は特定のスキップ幅に限定されるものではない。
【００９８】
図１７には、垂直・水平方向用矩形フィルターによる矩形特徴を、積分画像を用いて計算するための処理手順をフローチャートの形式で示している。但し、図１４に示したようにスキャン方向を縦方向（Ｙ方向）とし、ＸＹ各方向の１回のスキャン当たりのスキャン位置の移動量をｓｋｉｐ（画素数）とする。
【００９９】
まず、図１４Ａに示したように、走査部１３は、スキャン位置（ｘ，ｙ）を原点位置（０，０）に設定して、ｘ＝０をスキャンラインとして検索ウィンドウのスキャンを開始する（ステップＳ１）。
【０１００】
走査部１３は、現在のスキャン位置（ｘ，ｙ）に設定した検索ウィンドウのサイズ分の積分画像を生成して（ステップＳ２）、積分画像用のメモリー・バッファーに保持する。検索ウィンドウのうち計算済みの積分画素値がメモリー・バッファー内に保持されている領域については、これを利用する。また、積分画像を生成する際、既に計算済みの隣接画素点の積分画素値を適宜用いて、再帰的に積分画素値を計算する。
【０１０１】
走査部１３は、入力画像上の現在のスキャン位置（ｘ，ｙ）に検索ウィンドウを当て嵌めて、入力画像用のメモリー・バッファーからウィンドウ画像を切り取る。そして、判別部１４では、積分画像用のメモリー・バッファーから積分画像を読み出すと、各弱判別器１４1〜１４Kにおいて矩形フィルター（但し、垂直・水平方向用フィルター）の矩形特徴ｆi（ｘ，ｙ）を高速に算出する（図６を参照のこと）。そして、加算器１７が各矩形特徴ｆi（ｘ，ｙ）を重み付き加算して、現在のスキャン位置（ｘ，ｙ）での検出スコアーを計算する（ステップＳ３）。
【０１０２】
判別部１４において現在のスキャン位置（ｘ，ｙ）での矩形特徴計算及び検出スコアーの計算を終了すると、走査部１３は、スキャン位置を移動させる。すなわち、走査部１３は、現在のスキャン位置のｙ座標に所定のスキップ幅ｓｋｉｐを加算して（ステップＳ４）、スキャンラインすなわちＹ方向に沿って移動させてみる。
【０１０３】
このとき、走査部１３は、スキャン位置のｙ座標が入力画像の高さｈｅｉｇｈｔ未満か、すなわち、スキャン位置が現在のスキャンラインの終端にまだ到達していないかをチェックする（ステップＳ５）。
【０１０４】
ここで、スキャン位置が現在のスキャンラインの終端にまだ到達していないときには（ステップＳ５のＹｅｓ）、走査部１３は、積分画像用のメモリー・バッファーに積分画素値を保持しておくべき領域を更新するとともに、これに伴い積分画素値の計算を行なう。具体的には、積分画像を保持すべき検索ウィンドウの領域を、ｓｋｉｐ×ｗｉｄｔｈだけ移動する（ステップＳ６）。
【０１０５】
このとき、走査部１３は、新たに検索ウィンドウに加わる、積分画素値をまだ計算していない領域（例えば、図１４Ｂ中の参照番号１４０３で示す領域）内の各画素点についてのみ、積分画素値の計算を行なうと、その結果をメモリー・バッファーに追加して保持する（ステップＳ７）。その際、既に計算済みの隣接画素点の積分画素値を適宜用いて、再帰的に積分画素値を計算する。
【０１０６】
また、次のスキャンラインの直前１画素分（すなわち、ｘ＝ｓｋｉｐ−１の１画素ライン）（若しくは１画素以上の画素幅の画素ライン）の領域（例えば、図１４Ｂ中の参照番号１４０５で示す領域）は、次のスキャンラインでの積分画素値の再帰的計算に利用するため、走査部１３は、当該領域内の各画素点の積分画素値をメモリー・バッファーに保持しておく（ステップＳ１８）。検索ウィンドウの移動に伴って、検索ウィンドウから外れた領域（例えば、図１４Ｂ中の参照番号１４０４で示す領域）の積分画素値は、メモリー・バッファーから廃棄される。
【０１０７】
但し、スキャン幅ｓｋｉｐが検索ウィンドウの幅ｗを超えるときには、ステップＳ８では、上記に代えて、ｓｋｉｐ×ｓｋｉｐ画素分の積分画素値を計算して、メモリー・バッファーにコピーする処理を行なう。
【０１０８】
一方、スキャン位置（ｘ，ｙ）が現在のスキャンラインの終端に到達したときには（ステップＳ５のＮｏ）、走査部１３は、検索ウィンドウを次のスキャンラインに移動させる。すなわち、走査部１３は、検索ウィンドウのｙ座標位置を０に戻すとともに、ｘ座標位置に所定のスキップ幅ｓｋｉｐを加算して（ステップＳ９）、ステップＳ２に戻り、次のスキャンラインで上述と同様の処理を繰り返し実行する。
【０１０９】
なお、図１４Ａ〜図１４Ｇ、図１７には、スキャンライン上でスキャン位置を移動させる度に新たに追加された領域について逐次的に積分画像を生成する方法を図解したが、本発明の要旨は特定のスキップ幅に限定されるものではない。スキャンライン単位で必要な積分画像を一括して生成して、スキャンラインを移動させるまでの間はメモリー・バッファーに保持しておくようにしてもよい。後者の場合であっても、入力画像全体にわたって積分画像を保持するのと比較すれば、メモリー容量の節約の効果がある。また、同じスキャンライン上では１回だけ積分画像を生成する処理が発生し、スキャン位置を移動するときにはメモリー・バッファーから積分画像を読み出すアドレスを変更するだけでよい。
【０１１０】
図１８には、入力画像の縦方向（Ｙ方向）をスキャン方向とする場合に、スキャンライン毎に検索ウィンドウの幅（ｗｉｄｔｈ）分の１列の積分画像を一括して生成し、メモリー・バッファーに保持する様子を示している。この場合、入力画像の幅及び高さをそれぞれｗｉｄｔｈ、ｈｅｉｇｈｔとし、検索ウィンドウのサイズをｗ×ｈとし、１画素をｎバイトで表現するものとすると、積分画像の保持用にｈｅｉｇｈｔ×ｗ×ｎバイトのメモリー容量が必要である。入力画像がＶＧＡ画面であり、検索ウィンドウのサイズを３２×６４画素、１画素を４バイトで表現する場合、４８０×３２×４＝６１，３３６バイトすなわち約６２Ｋバイトである。図３に示したようにＶＧＡ画像全体について積分画像を保存するのと比較すると、メモリー容量節約の効果がある。
【０１１１】
また、図１９には、入力画像の横方向（Ｘ方向）をスキャン方向とする場合に、スキャンライン毎に検索ウィンドウの高さ（ｈｅｉｇｈｔ）分の１行の積分画像を一括して生成し、メモリー・バッファーに保持する様子を示している。この場合、積分画像の保持用にｈｅｉｇｈｔ×ｗ×ｎバイトのメモリー容量が必要である（但し、１画素をｎバイトで表現するものとする）。入力画像がＶＧＡ画面であり、検索ウィンドウのサイズを３２×６４画素、１画素を４バイトで表現する場合、６４０×３２×４＝１６３，８４０バイトすなわち約１６４Ｋバイトである。図３に示したようにＶＧＡ画像全体について積分画像を保存するのと比較すると、メモリー容量節約の効果がある。
【０１１２】
図１４Ａ〜図１４Ｇ、並びに図１７には、垂直・水平方向用の矩形フィルターを用いる場合に、積分画像保持用のメモリー・バッファーの容量を節約する方法について示した。斜め方向用の矩形フィルターを用いる場合であっても、積分画像保持用のメモリー・バッファーの容量を節約することができるが、細部では異なる処理が必要となる。
【０１１３】
斜め方向用の矩形フィルターを用いる場合の、入力画像の各スキャン位置において積分画素値を新たに計算する領域、並びに、メモリー・バッファーに積分画素値を保持しておくべき領域について、図２０Ａ〜図２０Ｇを参照しながら説明する。但し、同図は、スキャン方向を縦方向（Ｙ方向）とする例である。まず、原点（０，０）を開始位置として縦方向のスキャンラインに沿って検索ウィンドウを所定のスキップ幅（ｓｋｉｐ画素）ずつスキャンし、スキャン位置毎に積分画像の生成と検出スコアーの計算を行なう。そして、検索ウィンドウがスキャン方向の終端（Ｙ座標の上限）に達すると、検索ウィンドウのスキャンラインを水平方向に所定のスキップ幅（ｓｋｉｐ画素）だけスキップさせてスキャンを繰り返していく。
【０１１４】
まず、走査部１３は、検索ウィンドウを原点位置（０，０）に設定して、図２０Ａ中の参照番号２００１で示される検索ウィンドウ領域内のすべての画素点について、上式（５）、（６）に従って積分画素値を計算すると、その結果をメモリー・バッファーにコピーして保持する。
【０１１５】
積分画素値を計算するとき、先に算出した隣接する３画素点の積分画素値を適宜利用して、図８並びに上式（７）に示したように、注目画素点の積分画素値を再帰的に計算する方法を適用する。
【０１１６】
また、斜め方向矩形フィルターの積分画素値の計算には、図７、図８に示したように、注目画素点を頂点とする直角２等辺３角形の領域内の画素点について積分画素値を求める必要がある。このため、領域２００１内のすべての画素点について積分画素値を再帰的に計算する過程で、検索ウィンドウに相当する領域２００１以外に、領域２００２内の各画素点についても積分画素値を計算することになる。領域２００２の積分画像は、後続のスキャン位置で必要になることから、領域２００１の積分画像と併せてメモリー・バッファーにコピーして保持しておく。
【０１１７】
そして、判別部１４では、各弱判別器１４1〜１４Kがメモリー・バッファーに保持されている現在の検索ウィンドウ領域２００１内の積分画像を用いて、当該スキャン位置での矩形特徴ｆi（０，０）をそれぞれ計算し、加算器１７がこれらを重み付け加算して、当該スキャン位置での検出スコアーＦ（０，０）を出力する。
【０１１８】
次いで、図２０Ｂに示すように、走査部１３は、所定のスキップ幅（ｓｋｉｐ画素）だけ検索ウィンドウをスキャンライン（ｘ＝０）に沿って縦方向に移動させる（すなわち、ｙ＝ｙ＋ｓｋｉｐ）。移動した後のスキャン位置（０，ｓｋｉｐ）の検索ウィンドウ２００３のうち、参照番号２００３Ａで示す、直前のスキャン位置の検索ウィンドウ２００１と重なる領域内の各画素点、並びに、参照番号２００３Ｂで示す、領域２００２と重なる領域内の各画素点については、計算済みの積分画素値がメモリー・バッファーに保持されている。そこで、走査部１３は、参照番号２００３Ｃで示す、新たな検索ウィンドウ２００３のうち未計算の領域内の各画素点についてのみ、積分画像の計算を行なうと、その結果をメモリー・バッファーにコピーし追加して保持する。
【０１１９】
ここで、領域２００３Ｃ内のすべての画素点について再帰的に積分画素値を計算する過程で、検索ウィンドウに相当する領域２００３以外に、領域２００４内の各画素点についても積分画素値を計算することになる。領域２００４の積分画像は、後続のスキャン位置で必要になることから、併せてメモリー・バッファーにコピーして保持しておく。
【０１２０】
また、検索ウィンドウの移動に伴って、図２０Ｂ中の参照番号２００５で示す領域の積分画像は以降の矩形特徴の計算には不要となるので、走査部１３は、メモリー・バッファーから廃棄する。但し、参照番号２００６で示す、次のスキャンラインの直前１画素分（すなわち、ｘ＝ｓｋｉｐ−１の１画素ライン）（若しくは１画素以上の画素幅の画素ライン）の領域は、メモリー・バッファーに保持しておく。当該１画素ライン分の領域２００６は、次のスキャンライン（ｘ＝ｓｋｉｐ）に移動したときに、注目画素点に隣接する画素点の積分画素値（図８を参照のこと）として利用すれば、上式（７）に従って積分画素値を再帰的に計算できるからである。
【０１２１】
そして、判別部１４では、メモリー・バッファーに保持されている現在の検索ウィンドウ領域１４０２内の積分画像を用いて、各弱判別器１４1〜１４Kが当該スキャン位置での矩形特徴ｆi（０，ｓｋｉｐ）をそれぞれ計算し、加算器１７がこれらを重み付け加算して、当該スキャン位置での検出スコアーＦ（０，ｓｋｉｐ）を出力する。
【０１２２】
さらに次いで、図２０Ｃに示すように、走査部１３は、所定のスキップ幅（ｓｋｉｐ画素）だけ検索ウィンドウをスキャンライン（ｘ＝０）に沿って縦方向に移動させる（すなわち、ｙ＝ｙ＋ｓｋｉｐ）。移動した後のスキャン位置（０，ｓｋｉｐ）の検索ウィンドウ２００７のうち、参照番号２００７Ａで示す、直前のスキャン位置の検索ウィンドウ２００３と重なる領域内の各画素点、並びに、参照番号２００７Ｂで示す、領域２００２又は２００４と重なる領域内の各画素点については、計算済みの積分画素値がメモリー・バッファーに保持されている。そこで、走査部１３は、参照番号２００７Ｃで示す、新たな検索ウィンドウ２００７のうち未計算の領域内の各画素点についてのみ、積分画像の計算を行なうと、その結果をメモリー・バッファーにコピーし追加して保持する。
【０１２３】
ここで、領域２００７Ｃ内のすべての画素点について再帰的に積分画素値を計算する過程で、検索ウィンドウに相当する領域２００７以外に、領域２００８内の各画素点についても積分画素値を計算することになる。領域２００８の積分画像は、後続のスキャン位置で必要になることから、併せてメモリー・バッファーにコピーして保持しておく。
【０１２４】
また、検索ウィンドウの移動に伴って、図２０Ｂ中の参照番号２００９で示す領域の積分画像は以降の矩形特徴の計算には不要となるので、走査部１３は、メモリー・バッファーから廃棄する。但し、参照番号２０１０で示す、次のスキャンラインの直前１画素分（すなわち、ｘ＝ｓｋｉｐ−１の１画素ライン）（若しくは１画素以上の画素幅の画素ライン）の領域は、メモリー・バッファーに保持しておく。当該１画素ライン分の領域２０１０は、次のスキャンライン（ｘ＝ｓｋｉｐ）で積分画素値を再帰的に計算する際に、既知の積分画素値として利用するため、走査部１３は、メモリー・バッファーに保持しておく。
【０１２５】
そして、判別部１４では、メモリー・バッファーに保持されている現在の検索ウィンドウ領域２００７内の積分画像を用いて、各弱判別器１４1〜１４Kが当該スキャン位置での矩形特徴ｆi（０，２ｓｋｉｐ）をそれぞれ計算し、加算器１７がこれらを重み付け加算して、当該スキャン位置での検出スコアーＦ（０，２ｓｋｉｐ）を出力する。
【０１２６】
以降は、検索ウィンドウが現在のスキャンライン（ｘ＝０）の終端（ｙ＝ｈｅｉｇｈｔ）に達するまで、図２０Ｂ並びに図２０Ｃに示した処理が、検索ウィンドウがスキャン位置を移動する度に繰り返し実行される。
【０１２７】
図２０Ｄには、検索ウィンドウがスキャンライン（ｘ＝０）の終端（ｙ＝ｈｅｉｇｈｔ）に到達した際に、メモリー・バッファーに積分画像が保持されている領域を示している。参照番号２０１１で示す領域検索ウィンドウ領域内の積分画像を計算するが、当該スキャン位置での矩形特徴計算に用いた後、次のスキャンラインでの矩形特徴計算には不要となるので、走査部１３は、メモリー・バッファーから廃棄する。但し、参照番号２０１２で示す、次のスキャンラインの直前１画素分（すなわち、ｘ＝ｓｋｉｐ−１の１画素ライン）（若しくは１画素以上の画素幅の画素ライン）の領域は、次のスキャンラインで積分画素値を再帰的に計算する際に、既知の積分画素値として利用するため、走査部１３は、メモリー・バッファーに保持しておく。
【０１２８】
検索ウィンドウがスキャンライン（ｘ＝０）の終端（ｙ＝ｈｅｉｇｈｔ）に到達すると、走査部１３は、スキャンラインを所定のスキップ幅（ｓｋｉｐ）だけスキャンラインに直交する水平方向に移動させるとともに（すなわち、ｘ＝ｓｋｉｐ）、検索ウィンドウをこのスキャンラインの先頭に設定して（すなわち、ｙ＝０）、スキャンを開始する。このスキャンライン（ｘ＝ｓｋｉｐ）上をスキャンし検出スコアーを算出する間、走査部１３は、直前のスキャンライン（ｘ＝０）上での処理で保持した領域２０１２の積分画素値をメモリー・バッファーに保持し続ける。そして、現在のスキャンライン（ｘ＝ｓｋｉｐ）上の各スキャン位置で積分画素値を新たに計算する際には、領域２０１２内の積分画素値を隣接画素点の積分画素値として適宜利用して、注目画素点の積分画素値を再帰的に計算する。
【０１２９】
図２０Ｅには、検索ウィンドウが次のスキャンライン（ｘ＝ｓｋｉｐ）上で先頭位置（ｙ＝０）に設定されたときの様子を示している。参照番号２０１３で示される検索ウィンドウ領域内の画素点について積分画像を計算する。その際、メモリー・バッファーに保持されている領域２０１２内の既に算出した隣接する３画素点の積分画素値を適宜利用して、図８並びに上式（７）に示したように、注目画素点の積分画素値を再帰的に計算する。
【０１３０】
また、領域２０１３内のすべての画素点について積分画素値を再帰的に計算する過程で、検索ウィンドウに相当する領域２０１３以外に、領域２０１４内の各画素点についても積分画素値を計算することになる。領域２０１４の積分画像は、後続のスキャン位置で必要になることから、領域２０１３の積分画像と併せてメモリー・バッファーにコピーして保持しておく。
【０１３１】
そして、判別部１４では、メモリー・バッファーに保持されている現在の検索ウィンドウ２０１３領域内の積分画像を用いて、各弱判別器１４1〜１４Kが当該スキャン位置での矩形特徴ｆi（ｓｋｉｐ，０）をそれぞれ計算し、加算器１７がこれらを重み付け加算して、当該スキャン位置での検出スコアーＦ（ｓｋｉｐ，０）を出力する。
【０１３２】
次いで、図２０Ｆに示すように、走査部１３は、所定のスキップ幅（ｓｋｉｐ画素）だけ検索ウィンドウをスキャンラインに沿って縦方向に移動させる（すなわち、ｙ＝ｙ＋ｓｋｉｐ）。移動した後のスキャン位置（ｓｋｉｐ，ｓｋｉｐ）の検索ウィンドウ２０１５のうち、参照番号２０１５Ａで示す、直前のスキャン位置の検索ウィンドウ２０１３と重なる領域内の各画素点、並びに、参照番号２０１５Ｂで示す、領域２０１４と重なる領域内の各画素点については、計算済みの積分画素値がメモリー・バッファーに保持されている。そこで、走査部１３は、参照番号２０１５Ｃで示す、新たな検索ウィンドウ２０１５のうち未計算の領域内の各画素点についてのみ、積分画像の計算を行なうと、その結果をメモリー・バッファーにコピーし追加して保持する。
【０１３３】
ここで、領域２０１５Ｃ内のすべての画素点について再帰的に積分画素値を計算する過程で、検索ウィンドウに相当する領域２０１５以外に、領域２０１６内の各画素点についても積分画素値を計算することになる。領域２０１６の積分画像は、後続のスキャン位置で必要になることから、併せてメモリー・バッファーにコピーして保持しておく。
【０１３４】
また、検索ウィンドウの移動に伴って、図２０Ｆ中の参照番号２０１７で示す領域の積分画像は以降の矩形特徴の計算には不要となるので、走査部１３は、メモリー・バッファーから廃棄する。但し、参照番号２０１８で示す、次のスキャンラインの直前１画素分（すなわち、ｘ＝２ｓｋｉｐ−１の１画素ライン）（若しくは１画素以上の画素幅の画素ライン）の領域は、次のスキャンライン（ｘ＝２ｓｋｉｐ）で積分画素値を再帰的に計算する際に、既知の積分画素値として利用するため、走査部１３は、メモリー・バッファーに保持しておく。
【０１３５】
そして、判別部１４では、メモリー・バッファーに保持されている現在の検索ウィンドウ領域２０１５内の積分画像を用いて、各弱判別器１４1〜１４Kが当該スキャン位置での矩形特徴ｆi（ｓｋｉｐ，ｓｋｉｐ）をそれぞれ計算し、加算器１７がこれらを重み付け加算して、当該スキャン位置での検出スコアーＦ（ｓｋｉｐ，ｓｋｉｐ）を出力する。
【０１３６】
以降は、検索ウィンドウが現在のスキャンライン（ｘ＝ｓｋｉｐ）の終端に達するまで、図２０Ｆに示した処理が、検索ウィンドウがスキャン位置を移動する度に繰り返し実行される。
【０１３７】
また、検索ウィンドウがスキャンライン（ｘ＝ｓｋｉｐ）の終端（ｙ＝ｈｅｉｇｈｔ）に到達すると、走査部１３は、スキャンラインを所定のスキップ幅（ｓｋｉｐ）だけスキャンラインに直交する水平方向に移動させるとともに（すなわち、ｘ＝ｘ＋ｓｋｉｐ＝２ｓｋｉｐ）、検索ウィンドウをこのスキャンラインの先頭に設定して（すなわち、ｙ＝０）、スキャンを開始する。このスキャンライン（ｘ＝２ｓｋｉｐ）上でスキャンする間、走査部１３は、直前のスキャンライン（ｘ＝ｓｋｉｐ）上での処理で保持した領域２０１９の積分画像をメモリー・バッファーに保持し続ける。そして、現在のスキャンライン（ｘ＝２ｓｋｉｐ）上の各スキャン位置で積分画素値を新たに計算する際には、領域２０１９内の積分画素値を隣接画素点の積分画素値として適宜利用して、注目画素点の積分画素値を再帰的に計算する。また、２つ前のスキャンライン上でのスキャン時に保持した領域２０１２内の積分画像（前述）は、スキャンラインの移動に伴って不要となるので、走査部１３は、メモリー・バッファーから廃棄する。
【０１３８】
図２０Ｇには、検索ウィンドウが次のスキャンライン（ｘ＝２ｓｋｉｐ）上で先頭位置（ｙ＝０）に設定されたときの様子を示している。当該スキャンライン上では、図２０Ｅ、図２０Ｆに示した処理と同様の処理が繰り返し実行される。そして、スキャン位置が当該スキャンライン（ｘ＝２ｓｋｉｐ）の終端（ｙ＝ｈｅｉｇｈｔ）に到達すると、さらにスキャンラインを所定のスキップ幅（ｓｋｉｐ）だけスキャンラインに直交する水平方向に移動させ（ｘ＝ｘ＋ｓｋｉｐ）、スキャンラインが入力画像の終端（ｘ＝ｗｉｄｔｈ）に到達するまで、図２０Ｅ〜図２０Ｇに示した処理と同様の処理が繰り返し実行される。
【０１３９】
図２１には、斜め方向用矩形フィルターによる矩形特徴を、積分画像を用いて計算するための処理手順をフローチャートの形式で示している。但し、図１４に示したようにスキャン方向を縦方向（Ｙ方向）とし、ＸＹ各方向の１回のスキャン当たりのスキャン位置の移動量をｓｋｉｐ（画素数）とする。
【０１４０】
まず、図２０Ａに示したように、走査部１３は、スキャン位置（ｘ，ｙ）を原点位置（０，０）に設定して、ｘ＝０をスキャンラインとして検索ウィンドウのスキャンを開始する（ステップＳ１１）。
【０１４１】
走査部１３は、現在のスキャン位置（ｘ，ｙ）に設定した検索ウィンドウのサイズ分の積分画像を生成して（ステップＳ１２）、積分画像用のメモリー・バッファーに保持する。検索ウィンドウのうち計算済みの積分画素値がメモリー・バッファー内に保持されている領域については、これを利用する。また、積分画像を生成する際、既に計算済みの隣接画素点の積分画素値を適宜用いて、再帰的に積分画素値を計算する。
【０１４２】
走査部１３は、入力画像上の現在のスキャン位置（ｘ，ｙ）に検索ウィンドウを当て嵌めて、入力画像用のメモリー・バッファーからウィンドウ画像を切り取る。そして、判別部１４では、積分画像用のメモリー・バッファーから積分画像を読み出すと、各弱判別器１４1〜１４Kにおいて矩形フィルター（但し、斜め方向用フィルター）の矩形特徴ｆi（ｘ，ｙ）を高速に算出する（図６を参照のこと）。そして、加算器１７が各矩形特徴ｆi（ｘ，ｙ）を重み付き加算して、現在のスキャン位置（ｘ，ｙ）での検出スコアーを計算する（ステップＳ１３）。
【０１４３】
判別部１４において現在のスキャン位置（ｘ，ｙ）での矩形特徴計算及び検出スコアーの計算を終了すると、走査部１３は、スキャン位置を移動させる。すなわち、走査部１３は、現在のスキャン位置のｙ座標に所定のスキップ幅ｓｋｉｐを加算して（ステップＳ１４）、スキャンラインすなわちＹ方向に沿って移動させてみる。
【０１４４】
このとき、走査部１３は、スキャン位置のｙ座標が入力画像の高さｈｅｉｇｈｔ未満か、すなわち、スキャン位置が現在のスキャンラインの終端にまだ到達していないかをチェックする（ステップＳ１５）。
【０１４５】
ここで、スキャン位置が現在のスキャンラインの終端にまだ到達していないときには（ステップＳ１５のＹｅｓ）、走査部１３は、積分画像用のメモリー・バッファーに積分画素値を保持しておくべき領域を更新するとともに、これに伴い積分画素値の計算を行なう。具体的には、積分画像を保持すべき検索ウィンドウの領域を、ｓｋｉｐ×ｗｉｄｔｈだけ移動する（ステップＳ１６）。
【０１４６】
このとき、走査部１３は、新たに検索ウィンドウに加わる、積分画素値をまだ計算していない領域（例えば、図２０Ｂ中の参照番号２００３Ｃで示す領域）内の各画素点についてのみ、積分画素値の計算を行なうと、その結果をメモリー・バッファーに追加して保持する（ステップＳ１７）。その際、既に計算済みの隣接画素点の積分画素値を適宜用いて、再帰的に積分画素値を計算する。また、追加した領域内のすべての画素点について再帰的に積分画素値を計算する過程で、検索ウィンドウ以外の必要な領域（例えば、図２０Ｂ中の参照番号２００４で示す平行四辺形の領域）内の各画素点についても積分画素値を計算することになる。
【０１４７】
また、次のスキャンラインの直前１画素分（すなわち、ｘ＝ｓｋｉｐ−１の１画素ライン）（若しくは１画素以上の画素幅の画素ライン）の領域（例えば、図２０Ｂ中の参照番号２００６で示す領域）は、次のスキャンラインでの積分画素値の再帰的計算に利用するため、走査部１３は、当該領域内の各画素点の積分画素値をメモリー・バッファーに保持しておく（ステップＳ１８）。検索ウィンドウの移動に伴って、検索ウィンドウから外れた領域（例えば、図２０Ｂ中の参照番号２００５で示す領域）の積分画素値は、メモリー・バッファーから廃棄される。
【０１４８】
但し、スキャン幅ｓｋｉｐが検索ウィンドウの幅ｗを超えるときには、ステップＳ１８では、上記に代えて、ｓｋｉｐ×ｓｋｉｐ画素分の積分画素値を計算して、メモリー・バッファーにコピーする処理を行なう。
【０１４９】
一方、スキャン位置（ｘ，ｙ）が現在のスキャンラインの終端に到達したときには（ステップＳ１５のＮｏ）、走査部１３は、検索ウィンドウを次のスキャンラインに移動させる。すなわち、走査部１３は、検索ウィンドウのｙ座標位置を０に戻すとともに、ｘ座標位置に所定のスキップ幅ｓｋｉｐを加算して（ステップＳ１９）、ステップＳ１２に戻り、次のスキャンラインで上述と同様の処理を繰り返し実行する。
【０１５０】
斜め方向用の矩形フィルターを用いる場合も、入力画像全体ではなく、図２０に示したように検索ウィンドウのサイズに相当する領域並びに積分画素値の再帰的計算に必要な領域の積分画像のみをメモリー・バッファーに保持する場合、必要となるメモリー・バッファーの容量は、垂直・水平方向用の矩形フィルターを用いる場合（図１５、図１６を参照のこと）と同様に、大幅に削減することができる。
【０１５１】
また、斜め方向用の矩形フィルターを用いる場合も、垂直・水平方向用の矩形フィルターを用いる場合（図１８、図１９を参照のこと）と同様に、スキャンライン毎に検索ウィンドウの幅または高さ分の積分画像を一括して生成し、メモリー・バッファーに保持するという変形例も考えられる。
【先行技術文献】
【特許文献】
【０１５２】
【特許文献１】特開２００９−１４０３６９号公報
【非特許文献】
【０１５３】
【非特許文献１】Ｐａｕｌ  Ｖｉｏｌａ  ＆  Ｍｉｃｈａｅｌ  Ｊｏｎｅｓ“Ｒｏｂｕｓｔ  Ｒｅａｌ−Ｔｉｍｅ  Ｆａｃｅ  Ｄｅｔｅｃｔｉｏｎ”（Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｊｏｕｒｎａｌ  ｏｆ  Ｃｏｍｐｕｔｅｒ  Ｖｉｓｉｏｎ，  ２００４）
【非特許文献２】Ｒａｉｎｅｒ  Ｌｉｅｎｈａｒｔ，Ａｌｅｘａｎｄｅｒ  Ｋｕｒａｎｏｖ，Ｖａｄｉｍ  Ｐｉｓａｒｅｖｓｋｙ“Ｅｍｐｉｒｉｃａｌ  Ａｎａｌｙｓｉｓ  ｏｆ  Ｄｅｔｅｃｔｉｏｎ  Ｃａｓｃａｄｅｓ  ｏｆ  Ｂｏｏｓｔｅｄ  Ｃｌａｓｓｉｆｉｅｒ”（ＤＡＧＭ’０３，２５ｔｈ  Ｐａｔｔｅｒｎ  Ｒｅｃｏｇｎｉｔｉｏｎ  Ｓｙｍｐｏｓｉｕｍ，Ｍａｄｇｅｂｕｒｇ，Ｇｅｒｍａｎｙ，ｐｐ．２９７−３０４，Ｓｅｐ．２００３）
【産業上の利用可能性】
【０１５４】
以上、特定の実施形態を参照しながら、本発明について詳細に説明してきた。しかしながら、本発明の要旨を逸脱しない範囲で当業者が該実施形態の修正や代用を成し得ることは自明である。
【０１５５】
本明細書では、主に輝度画像を例にとって、白矩形と黒矩形の組み合わせからなる矩形フィルターを用いて特徴量を計算する実施形態を中心に説明してきたが、本発明の要旨はこれに限定されるものではない。例えば、ＲＧＢの色成分毎の矩形フィルターを組み合わせて用いることで、カラー画像からの物体検出を行なうことができる。
【０１５６】
また、本発明は、画像をスキャンすることで、顔、あるいは手など顔以外の部位の「検出」技術として利用することができる。同様に、顔以外のパターンにも本発明が適用可能であり、例えばロゴマークの検出などが挙げられる。あるいは、本発明は、さまざまな画像の検出、判別、識別に用いることができるが、その例を以下に挙げる。
【０１５７】
（１）ロゴマーク検出（会社のロゴや道路標識など）
（２）笑顔などの表情判別
（３）目や口の開閉状態の判別
（４）性別判別
（５）大人・子供判別
（６）人種判別
（７）個人識別（ある特定の個人か、そうでないかの判別）
（８）メガネの有無の判別
（９）顔パーツ（目・鼻・口といった顔器官など）の位置検出
（１０）文字認識
（１１）車検出・車種判別
【０１５８】
要するに、例示という形態で本発明を開示してきたのであり、本明細書の記載内容を限定的に解釈するべきではない。本発明の要旨を判断するためには、特許請求の範囲を参酌すべきである。
【符号の説明】
【０１５９】
１０…物体検出装置
１１…画像入力部
１２…スケーリング部
１３…走査部
１４…判別部
１５…集団学習機
【図１Ａ】
2011180792.tif 000010
【図１Ｂ】
2011180792.tif 000011
【図１Ｃ】
2011180792.tif 000012
【図１Ｄ】
2011180792.tif 000013
【図２Ｃ】
2011180792.tif 000014
【図３】
2011180792.tif 000015
【図１０】
2011180792.tif 000016
【図１１】
2011180792.tif 000017
【図１２】
2011180792.tif 000018
【図１３】
2011180792.tif 000019
【図１７】
2011180792.tif 000020
【図２１】
2011180792.tif 000021
【図２Ａ】
2011180792.tif 000022
【図２Ｂ】
2011180792.tif 000023
【図４】
2011180792.tif 000024
【図５】
2011180792.tif 000025
【図６】
2011180792.tif 000026
【図７】
2011180792.tif 000027
【図８】
2011180792.tif 000028
【図９】
2011180792.tif 000029
【図１４Ａ】
2011180792.tif 000030
【図１４Ｂ】
2011180792.tif 000031
【図１４Ｃ】
2011180792.tif 000032
【図１４Ｄ】
2011180792.tif 000033
【図１４Ｅ】
2011180792.tif 000034
【図１４Ｆ】
2011180792.tif 000035
【図１４Ｇ】
2011180792.tif 000036
【図１５】
2011180792.tif 000037
【図１６】
2011180792.tif 000038
【図１８】
2011180792.tif 000039
【図１９】
2011180792.tif 000040
【図２０Ａ】
2011180792.tif 000041
【図２０Ｂ】
2011180792.tif 000042
【図２０Ｃ】
2011180792.tif 000043
【図２０Ｄ】
2011180792.tif 000044
【図２０Ｅ】
2011180792.tif 000045
【図２０Ｆ】
2011180792.tif 000046
【図２０Ｇ】
2011180792.tif 000047