(57)【要約】【課題】  計算負荷は増加させずに、回路規模やメモリ等の必要なリソースを低減する。【解決手段】  複数次元配列の入力情報を入力し、前記入力情報の各要素位置に対応する累積情報値を計算し、前記累積情報値を所定ビットのサイズを持つバッファに保持する。その際に、計算された累積情報値が前記所定ビットのサイズに対してオーバーフローを生じた場合、当該計算された累積情報値の前記ビットサイズ以下の部分を、前記累積情報値として保持する。【選択図】  図１１
2008299627.tif 000002
【特許請求の範囲】
【請求項１】
複数次元配列の入力情報を入力する入力工程と、
前記入力情報の各要素の位置に対応する累積情報値を計算する計算工程と、
前記累積情報値を所定ビットのサイズを持つバッファに保持する保持工程とを備え、
前記保持工程では、前記計算工程において計算された累積情報値が前記サイズに対してオーバーフローを生じた場合、当該計算された累積情報値の前記所定ビット以下の部分を、前記累積情報値として保持することを特徴とする情報処理方法。
【請求項２】
前記所定ビットのサイズは、前記複数次元配列の入力情報の全ての要素が最大値を取るときに、当該入力情報の最終の要素位置に対応する累積情報値をオーバーフローせずに格納するのに必要なサイズよりも小さいことを特徴とする請求項１に記載の情報処理方法。
【請求項３】
前記保持工程で保持された複数の前記累積情報値の間で加減算を行う加減算工程をさらに備え、
前記加減算工程では、前記加減算の計算結果に、前記所定ビットでアンダーフローまたはオーバーフローが生じた場合は、当該計算結果の前記所定ビットの部分を前記加減算の結果として出力することを特徴とする請求項１に記載の情報処理方法。
【請求項４】
前記加減算工程により出力される加減算の結果は、前記複数の累積情報値の要素の位置で示される前記入力情報の特定領域に関する情報を表すことを特徴とする請求項３に記載の情報処理方法。
【請求項５】
前記特定領域に関する情報は、前記入力情報の前記特定領域における全ての要素の総和値もしくは総和値に基づく情報であることを特徴とする請求項４に記載の情報処理方法。
【請求項６】
複数の前記特定領域を含む領域を単位として、当該複数の前記特定領域のそれぞれの前記加減算の結果を用いる後段処理を行う後段処理工程を備え、
前記所定ビットのサイズは、前記後段処理の単位となる領域において、前記入力情報の全ての要素が前記所定ビットのサイズにおける最大値をとるときの総和値をオーバーフローせずに格納するのに必要なサイズ以上であることを特徴とする請求項４に記載の情報処理方法。
【請求項７】
前記所定ビットのサイズは、前記複数の前記特定領域の中で最大の要素数を持つ領域において、前記入力情報の全ての要素が前記所定ビットのサイズにおける最大値をとるときの総和値をオーバーフローせずに格納するのに必要なサイズ以上であることを特徴とする請求項４に記載の情報処理方法。
【請求項８】
前記入力情報は２次元配列であって、前記計算工程では、前記入力情報の原点位置と各要素の位置とを対角とする矩形領域内の全ての要素の総和値を、当該要素位置に対応する前記累積情報値として計算することを特徴とする請求項１に記載の情報処理方法。
【請求項９】
前記入力情報は２次元配列であって、前記特定領域は、当該２次元配列において前記複数の前記累積情報値の対応する位置で示される矩形領域であることを特徴とする請求項４に記載の情報処理装置。
【請求項１０】
前記入力情報は３次元以上の多次元配列であって、前記計算工程では、前記入力情報の原点位置と各要素の位置とを対角とする超直方体の領域内の全ての要素の総和値を、当該要素位置に対応する前記累積情報値とすることを特徴とする請求項１に記載の情報処理方法。
【請求項１１】
前記入力情報は３次元以上の多次元配列であって、前記特定領域は、３次元以上の多次元配列である前記入力情報における、前記複数の前記累積情報値に対応する位置で示される超直方体の領域であることを特徴とする請求項４に記載の情報処理方法。
【請求項１２】
複数次元配列の入力情報を入力する入力手段と、
前記入力情報の各要素の位置に対応する累積情報値を計算する計算手段と、
前記累積情報値を所定ビットのサイズで保持する保持手段とを備え、
前記保持手段は、前記計算手段により計算された累積情報値が前記所定ビットに対してオーバーフローを生じた場合、当該計算された累積情報値の前記所定ビット以下の部分を、前記累積情報値として保持することを特徴とする情報処理装置。
【請求項１３】
前記入力情報の特定領域に関し、複数の前記累積情報値の間で加減算を行う加減算手段と、
複数の前記特定領域を含む領域を単位として、前記複数の前記特定領域のそれぞれの前記加減算の結果を用いる後段処理を行う後段処理手段とを備えることを特徴とする請求項１２に記載の情報処理装置。
【請求項１４】
前記保持手段は、前記入力情報と論理的に同次元の構造を持ち、各次元方向のうち、少なくとも一次元の方向が、前記入力情報のある一次元の方向における要素数に基づく要素数で構成され、他の次元方向が、前記後段処理の単位となる領域の各次元方向における要素数に基づく要素数で構成されることを特徴とする請求項１３に記載の情報処理装置。
【請求項１５】
前記計算手段は、前記累積情報値として、前記入力情報の同一の次元方向の要素数に基づく要素数を持つ次元方向に要素が並んだ要素列を順に計算し、
前記保持手段は、前記計算手段により前記累積情報の新たな要素列が計算されると、格納されている前記累積情報のうちで最も前に計算された要素列が格納されていた領域に、前記新たな要素列の演算結果を格納し、
前記後段処理手段は、前記累積情報保持手段に新たに格納された要素列と前から格納されている残りの要素列とが論理的に連続するものとして前記後段処理を行うことを特徴とする請求項１４に記載の情報処理装置。
【請求項１６】
前記保持手段は、前記入力情報と論理的に同次元の構造を持ち、各次元方向が、前記後段処理の単位となる領域の各次元方向の要素数に基づく要素数で構成されることを特徴とする請求項１３に記載の情報処理装置。
【請求項１７】
前記計算手段は、最初に前記入力情報の全ての次元の原点に相当する位置の要素を含む領域の前記累積情報を計算し、以後、前記構造の内の所定の一次元の方向に１要素だけ、その方向の最終の位置に達するまで領域を順にシフトさせて加えられる領域の前記累積情報を新たに計算し、
前記保持手段は、保持されている前記累積情報のうちで前記シフトさせた領域の範囲の外となる累積情報が保持されていた領域に、新たに計算した前記累積情報を格納し、
前記後段処理手段は、前記保持手段に新たに格納された累積情報と前から格納されている残りの累積情報とが論理的に連続するものとして前記後段処理を行うことを特徴とする請求項１６に記載の情報処理装置。
【請求項１８】
さらに前記シフトさせた領域が前記所定の一次元の方向における最終の位置に達した後に、当該領域を前記所定の一次元の方向における原点位置にいったん戻し、別の一次元の方向に１要素だけシフトさせた位置を新たな開始位置として、前記計算手段による前記所定の一次元の方向における前記１要素のシフトと前記累積情報の計算、前記保持手段による保持および前記後段処理手段による後段処理を同様に繰り返し、
前記入力情報の他の次元方向に対しても順に同様に繰り返すことによって、前記入力情報の全領域に対して処理を行うことを特徴とする請求項１７に記載の情報処理装置。
【請求項１９】
請求項１乃至１１に記載の情報処理方法をコンピュータに実行させるコンピュータ読み取り可能なプログラム。
【請求項２０】
請求項１９に記載のプログラムを記憶したコンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像処理、画像認識や画像合成、或いは情報分析などの情報処理方法及び装置に関するものである。
【背景技術】
【０００２】
情報処理分野においては、多次元配列情報を頻繁に取り扱う。その中でも、画像処理、画像認識や画像合成等に関わる一部処理や統計処理等では、特定領域の範囲内における要素の総和値を求めて使用することが多い。
【０００３】
このため、情報処理を行うアプリケーションの一例として、例えばMicrosoft社のExcel（商標）などの表計算アプリケーションでは、2次元の表において、指定された矩形内の要素の和を求める機能がある。また、MathWorks社のMATLAB（商標）などの計算用のプログラミング言語においても、行列の要素の和を求める関数がある。
【０００４】
コンピュータ・グラフィックスの分野では、F. C. Crowが長方形のsummed-area tableと呼ばれる、元の入力画像情報に対する累積画像情報の概念を提案している（非特許文献１参照）。この文献では、summed-area tableを入力画像と同サイズ（同要素数）の2次元配列とし、入力画像の座標位置(x, y)の画素値をI(x, y)としたとき、summed-area tableの同位置(x, y)の成分Ｃ(x, y)を
【０００５】
【数１】
2008299627.tif 000003
【０００６】
として定義している。すなわち図４に示すように、元の入力画像(a)において原点位置(0, 0)と位置(x, y)とを対角とする長方形内の画素の総和値がsummed-area table(b)の位置(x, y)の値Ｃ(x, y)となる。（尚、非特許文献１のオリジナルのsummed-area tableは、原点位置を画像左下として説明しているが、ここでは後述の説明と整合させるため左上を原点とする。）
この定義によれば、入力画像上で水平または垂直に置かれた任意の矩形領域内の画素値I(x, y)の和を、次の式を使ってsummed-area table上の4点の値を参照するのみで、求めることができる。例えば図５に示すように(x0, y0)と(x1, y1)とを対角とする矩形領域内の画素値の総和Ｃ(x0, y0;x1, y1)を求めるには、
Ｃ(x0, y0;x1, y1)=Ｃ(x0-1,y0-1)−Ｃ(x0-1,y1)−Ｃ(x1,y0-1)＋Ｃ(x1,y1)  (2)
とすればよい。これにより、画像上の任意の矩形領域内の値の総和を高速に求めることが可能となった。
【０００７】
一方、画像認識の分野においては、上記summed-area tableと同等の累積画像情報をIntegral imageと呼んでいる。また、これを用いた複数の矩形フィルタからなる弱判別器をカスケード接続した顔検出装置が提案されている（例えば非特許文献２参照）。
【０００８】
更に、非特許文献２の考え方に基づいて、連続画面からの実時間での顔抽出（例えば特許文献１参照）、表情認識（例えば特許文献２参照）、顔のジェスチャーによる指示入力（例えば特許文献３参照）なども提案されている。
【０００９】
ここでは、後述する本発明の実施形態における後段処理としても適用可能な、非特許文献２に記載されているパターン識別法について詳細に説明する。
【００１０】
非特許文献２では、図８に示すように、ある特定の大きさの矩形領域801（以下「処理ウインドウ」と呼ぶ）を処理対象となる画像800内で移動させ、各移動先の処理ウインドウ801内に人物の顔が含まれるか否かを判定する。
【００１１】
図９は、各移動先の処理ウインドウ801において、非特許文献２で行われている顔検出処理の流れを示す図である。ある処理ウインドウ内における顔検出処理は、複数のステージによって実行される。各ステージには、異なる組み合わせの弱判別器が割り当てられている。各弱判別器は所謂Haar-like特徴を検出するもので、矩形フィルタの組み合わせで構成されている。
【００１２】
図９に示すように、各ステージに割り当てられる弱判別器の数も異なっている。各ステージは、自身に割り当てられたパターンの弱判別器を用いて、処理ウインドウ内に人物の顔が含まれるか否かをそれぞれ判定する。
【００１３】
また、各ステージには判定を実施する順番が割り当てられており、各ステージはその順番に従ってカスケードに処理を行う。即ち、例えば図９において、第１ステージ、第２ステージ、第３ステージの順に判定が実施される。
【００１４】
ここで、あるステージにおいて、ある位置の処理ウインドウ内に人物の顔が含まれないと判定された場合、この位置の処理ウインドウについては、処理が打ち切られ、それ以降のステージでの判定は実施されない。そして、最後のステージによる判定で、処理ウインドウ内に人物の顔が含まれると判定された場合に、その位置の処理ウインドウ内に人物の顔が含まれると判定される。
【００１５】
図１０は、顔検出処理の流れを示すフローチャートである。次に、図１０を用いて、顔検出処理の具体的な流れについて説明する。
【００１６】
顔検出処理では、まず処理の対象となる処理ウインドウ801が顔検出対象画像800上の最初の位置に配置される（ステップS1001）。基本的には、この処理ウインドウ801は、図８に示されるように、顔検出対象画像800の端から一定間隔で縦方向及び横方向へ順に移動する。これによって画像全体が網羅的に選択される。例えば、顔検出対象画像800をラスタスキャンすることによって処理ウインドウ801が選択される。
【００１７】
次に、選択された処理ウインドウ801に人物の顔が含まれるか否かの判定が実施される。この判定は、図９を用いて上述したように、複数のステージで実施される。このため、判定を実施するステージが第１のステージから順に選択される（ステップS1002）。
【００１８】
次に、選択されたステージによって判定が実施される（ステップS1003）。このステージの判定では、累積得点（説明は後述）が算出され、ステージごとに予め定められている閾値を超えたか否かが判定される（ステップS1004）。閾値を超えなかった場合（ステップS1004でＮｏ）、処理ウインドウに人物の顔が含まれないと判定され（ステップS1008）、ステップS1007以降の処理が実行される。ステップS1007以降の処理については後述する。
【００１９】
一方、累積得点（説明は後述）が閾値を超えた場合（ステップS1004でＹｅｓ）、その判定処理（ステップS1003）が最終ステージによる判定処理であったか否かが判断される（ステップS1005）。最終ステージでなかった場合（ステップS1005でＮｏ）、ステップS1002に戻って、次のステージが選択され、新たに選択されたステージによって判定処理が実施される。一方、最終ステージであった場合（ステップS1005でＹｅｓ）、現在の処理ウインドウに人物の顔が含まれるという最終的な判定がなされる（ステップS1006）。この時点で、この処理ウインドウに人物の顔が含まれると判断したことになる。
【００２０】
次に、判定の対象となっていた処理ウインドウが、顔検出対象画像の中で最後の位置の処理ウインドウであったか否かを判断する（ステップS1007）。最後の位置の処理ウインドウではなかった場合（ステップS1007でＮｏ）、ステップS1001の処理に戻り、次の位置に処理ウインドウが移動され、ステップS1002以降の処理が実行される。一方、最後の位置の処理ウインドウであった場合、この顔検出対象の入力画像に対する顔検出処理は終了する。
【００２１】
次に、各ステージにおける判定の処理内容について説明する。各ステージには、１以上のパターンの弱判別器が割り当てられる。この割り当ては学習処理において、AdaBoostなどのブースティング学習アルゴリズムによって実施される。各ステージは、自身に割り当てられたパターンの弱判別器に基づいて、処理ウインドウ内に顔が含まれるか否かの判定を行う。
【００２２】
各ステージでは、そのステージに割り当てられた各パターンの弱判別器に基づいて、処理ウインドウ内の複数の矩形領域における特徴量が、それぞれ算出される。このとき用いられる特徴量は、各矩形領域内の画素値の合計や平均等、矩形領域内の画素値の総和を用いて算出される値である。この矩形領域内総和値は、非特許文献１について図５で説明したように、入力画像に対する累積画像情報（Summed-area tableあるいはIntegral Image）を用いることにより高速に計算可能である。
【００２３】
次に、算出された特徴量の相対値（例えば比や差分値。ここでは差分値とする）としての差分値が算出され、この差分値に基づいて処理ウインドウに人物の顔が含まれるか否かの判定が実施される。具体的には、算出された差分値が、判定に用いられているパターンの弱判別器に設定された閾値よりも大きいか否か又は小さいか否かが判定される。そして、この判定の結果に応じて処理ウインドウにおける人物の顔の存否が判定される。
【００２４】
ただし、この時点での判定は、各パターンの弱判別器それぞれに基づいた判定であり、ステージとしての判定ではない。このように、各ステージでは、割り当てられた全てのパターンの弱判別器それぞれに基づいて個別に判定が実施され、それぞれの判定結果が得られる。
【００２５】
次に、ステージにおける累積得点が算出される。各パターンの弱判別器には個別のスコアが割り当てられている。処理ウインドウに人物の顔が含まれると判定されると、そのとき使用されたパターンの弱判別器に割り当てられたスコアが参照され、当該ステージの累積スコアに加算される。このようにして、加算されたスコアの総計が、ステージにおける累積スコアとして算出される。そして、このステージにおける累積スコアが特定の閾値（累積スコア閾値）を越えた場合に、このステージでは処理ウインドウに人物の顔が含まれる可能性有りと判定し、次のステージでの処理に移る。一方、このステージにおける累積スコアが累積スコア閾値を越えない場合、このステージでは処理ウインドウに人物の顔が含まれないと判定し、カスケード処理を打ち切る。
【００２６】
非特許文献２では、このような手順により、顔検出に代表される高速なパターン識別を実現している。尚、図９、１０の検出器は、予め適正な学習を行っておけば、顔以外のパターン識別器として用いることももちろん可能である。
【非特許文献１】F. C. Crow, “Summed-Area Tables For Texture Mapping”, Computer Graphics, 1984.
【非特許文献２】P. Viola, M. Jones, “Rapid Object Detection using a Boosted Cascade of Simple Features”, Proc. IEEE Conf. on Computer Vision and Pattern Recognition, Vol. 1, pp.511-518, December 2001.
【特許文献１】特開２００４−１８５６１１号公報
【特許文献２】特開２００５−４４３３０号公報
【特許文献３】特開２００５−２９３０６１号公報
【発明の開示】
【発明が解決しようとする課題】
【００２７】
入力画像情報から上述の累積画像情報（summed area tableあるいはintegral image）を生成するにあたり、通常は計算され得る最悪値に基づいて格納するバッファのビット精度とサイズ（一時に保持する領域の大きさ）を定める。すなわち、入力画像情報の幅（横方向画素数）をXimg、高さ（縦方向画素数）をYimgとし、各画素のビット精度をNimgビット（但し正の整数）とすると、当該最悪値Ｃmaxとは、全ての画素値が最大値
【００２８】
【数２】
2008299627.tif 000004
【００２９】
をとる場合の全画素総和値
【００３０】
【数３】
2008299627.tif 000005
【００３１】
となる。従って、累積画像情報を格納するバッファの１要素ビット精度Nbufは、Ｃmaxを格納可能なビット精度Nbuf_maxとする必要があり、画像サイズにも依存するがNimgよりかなり大きな値となる。例えば、VGAサイズの８ビットGrayscale画像を入力画像とする場合、Nimg＝8, Ximg＝640, Yimg＝480である。よって、Ｃmax＝78336000＝4AB5000hつまりNbuf＝Nbuf_max＝27bit精度（サイズ）のバッファを用意する必要がある。入力画像情報に対する累積画像情報を全域分、同時に持つ必要がある場合には、Nbuf_max×Ximg×Yimg＝8294400bitものRAM等のメモリ領域を準備する必要があり、処理リソースを圧迫する。
【００３２】
そこで、バッファのビット精度Nbufをなんらかの方法で低減する必要がある。特にこのような累積情報に基づく処理をハードウェアで行う場合、ワークメモリの容量は回路規模に直結するため切実な問題である。また、ソフトウェアによる処理であっても、Nbufを低減できれば、より小さい型を用いることが可能となって、リソース消費量を抑えることができる。
【００３３】
非特許文献１においては、バッファのビット精度Nbufを低減するための１つの方法について述べられている。すなわち、入力情報を例えば16×16画素のブロックに分割し、各々のブロックについて独立にSummed-area tableを計算する。入力情報のビット精度Nbuf＝8bitであれば、このとき必要なバッファのビット精度は16bitとなる。そしてこれとは別に、各ブロック毎にその左上端コーナーの左上斜め方向に隣接する画素位置に対応する、元のSummed-area tableの32bit値を保持するようにする。所望の位置に対応する値を復元するには、当該位置の16bitの値に、当該位置が含まれるブロックが保持する32bit値を加算すれば良い、としている。（しかしながら、実際に元のSummed-area tableの値を復元するには、これだけの演算では不十分である。）
しかしながら、従来４点を参照して式(2)のような簡単な加減演算を行うのみで、所望の領域の総和値を求めることができたのに対し、各点の値を復元するための演算が加わることにより、演算負荷は大幅に増大する。ハードウェアによる処理では、演算のための回路規模が増大することになるし、ソフトウェアによる処理を行う場合であっても、処理速度を低下させる。
【００３４】
本発明は、このような課題を解決するためになされたものであり、演算のための回路規模や処理負荷を増大させることなく、むしろ低減させつつも、累積情報を保持するバッファ容量を大幅に低減させることを目的とする。
【課題を解決するための手段】
【００３５】
上記課題を解決するために、本発明によれば、情報処理方法に、複数次元配列の入力情報を入力する入力工程と、前記入力情報の各要素の位置に対応する累積情報値を計算する計算工程と、前記累積情報値を所定ビットのサイズを持つバッファに保持する保持工程とを備え、前記保持工程では、前記計算工程において計算された累積情報値が前記サイズに対してオーバーフローを生じた場合、当該計算された累積情報値の前記所定ビット以下の部分を、前記累積情報値として保持することを特徴とする。
【００３６】
また、本発明の他の態様によれば、情報処理装置に、複数次元配列の入力情報を入力する入力手段と、前記入力情報の各要素の位置に対応する累積情報値を計算する計算手段と、前記累積情報値を所定ビットのサイズで保持する保持手段とを備え、前記保持手段は、前記計算手段により計算された累積情報値が前記所定ビットに対してオーバーフローを生じた場合、当該計算された累積情報値の前記所定ビット以下の部分を、前記累積情報値として保持することを特徴とする。
【発明の効果】
【００３７】
本発明によれば、複数次元配列の入力情報の特定領域の要素の総和値を求めるための、処理負荷やバッファ容量を低減することができる。また、本発明に係る装置をハードウェアで構成する場合、小さな回路規模で高速な処理を実現することが可能となる。
【発明を実施するための最良の形態】
【００３８】
以下、添付図面を参照しながら、本発明の実施形態を説明する。
【００３９】
尚、本実施形態においては、上述したSummed-area tableあるいはIntegral Imageのような、２次元以上の複数次元配列の入力情報に基づき累積加算演算により生成される同次元の配列情報を、単に累積情報と呼ぶことにする。特に入力情報が２次元配列の画像情報である場合には、累積画像情報と呼ぶ。尚、本実施形態において、入力情報の各要素は正の整数（または固定小数点の数）として表される。
【００４０】
（第１の実施の形態）
図１は本発明の一実施形態である情報処理装置の構成を示すブロック図である。
【００４１】
CPU101は、バス105を介して接続される各部を制御し、情報処理装置が目的とする所望の処理を実現する。情報入力部102は、複数次元の入力情報を入力するものであり、例えば処理対象となる入力画像データを装置内に取り込む。情報入力部102は、例えばCCDなどの画像センサによって構成されても良いし、ネットワーク等所定の通信経路を介して外部装置から処理したいデータを受信するI/F装置であってもよい。外部メモリ104はバス105に接続され、ROMやRAMあるいはHDD等のストレージ装置で構成されている。外部メモリ104は、CPU101が動作するためのプログラムコードを記憶したり、各種処理を行う上での作業領域として用いられる。また、必要に応じて、入力情報を保持するための領域としても用いられる。
【００４２】
DMAコントローラ103は、CPU101から設定されて動作が指令されることにより、情報入力部102、外部メモリ104、後述の累積情報処理部100間の所定サイズのデータ転送を、自立的に連続して行うことが可能である。指令された転送動作が完了すると、バス105を介して割り込み信号をCPU101に通知する。
【００４３】
累積情報処理部100は、バス105に接続するためのI/F110、累積情報生成部111、累積情報利用演算部112、累積情報保持部113により構成されている。累積情報保持部113は、累積情報を保持するためのビット精度Nbufの専用メモリと、専用バッファメモリへの入出力を制御するメモリコントローラにより構成される。ビット精度Nbufについては後述する。
【００４４】
累積情報生成部111は、情報入力部102より入力された画像データ等の処理対象情報の累積情報を生成し、累積情報保持部113へと格納する。累積情報利用演算部112は、CPU101からの要求に従って累積情報保持部113に保持されている累積情報を用いた演算処理を行い、結果をCPU101に返す。ここで累積情報とは、入力情報が二次元画像データである場合には、非特許文献１あるいは２のIntegral image（or Summed-area table）に相当する累積画像情報となる。同様の累積情報は、３次元以上の多次元であっても生成可能である（後述）。
【００４５】
（後段処理を含んだ処理の流れ）
次に図１の情報処理装置における、後段処理まで含んだ全体の処理の流れについて説明する。図１１は全体処理フローを示すフローチャートである。
【００４６】
本実施形態の情報処理装置は、ユーザの操作や不図示の外部装置からの処理開始トリガによって、まず情報入力処理ステップS1101を実行する。この処理では、情報入力部102より入力情報を受信し、必要に応じて外部メモリ104に蓄積する。本実施形態では、入力情報を所定サイズの二次元配列として表される画像データであるものとして説明するが、本発明の本質によれば、三次元以上の多次元配列情報が入力情報であってもかまわない。
【００４７】
外部メモリ104に蓄積された入力情報を用い、ステップS1102おいて累積情報生成処理を行う。この処理は後に詳述するが、累積情報保持部113に入力情報に基づく累積情報を生成する処理を行うものである。CPU101はDMAC103を設定し、外部メモリ104から累積情報処理部100への、入力情報要素値の逐次転送を行わせる。
【００４８】
また、本装置における後段処理等で、入力情報がそのまま利用されない場合には、ステップS1101とS1102との処理を並列に実行するような構成とすることも可能である。すなわち、１ライン入力される毎にステップS1101とS1102を繰り返すようにするか、あるいは１要素入力単位でパイプライン的に連続処理させることもできる。このときCPU101はDMAC103に対し、情報入力部102から累積情報処理部100へ、入力情報の各要素を逐次自動転送するように設定するようにすることもできる。
【００４９】
累積情報保持部113に累積情報が生成されると、次にステップS1103としてメイン処理を行う。本実施形態の情報処理装置では、メイン処理として、図１０で説明したパターン識別処理を行っているが、累積情報を用いる他の処理適用することももちろん可能である。図１０のパターン識別処理においては、先に説明したとおりステップS1003の判定処理において、各弱判別器で所定のHaar-like特徴を検出するため、各矩形領域内要素の総和値を得る必要がある。CPU101は、累積情報利用演算部112を動作させて、この総和値を高速に得ることが可能である。累積情報利用演算部112の動作については、後ほど詳しく説明する。尚、本明細書で述べている後段処理とは、累積情報を用いるメイン処理S1103以降の処理を指している。
【００５０】
パターン識別処理等のメイン処理S1103が完了し後、所望の後処理としてステップS1104を行う。これは、例えば外部装置やユーザ等に処理結果等を通知する処理であったり、認識結果を利用して行う諸々の処理である。
【００５１】
（累積情報生成部の説明）
次に、累積情報生成部111の構成と動作について説明する。図２は累積情報生成部111の構成と、バスI/F110および累積情報保持部113との接続の様子を示すブロック図である。
【００５２】
入力情報サイズ記憶レジスタ201は、情報入力部102より入力される複数次元配列情報のサイズを記憶するレジスタであって、バスI/F110を介してCPU101により、処理開始前に値が設定される。入力値保持レジスタ203は、バスI/Fを介してCPU101もしくはDMAC103の制御により入力される入力配列情報の１要素値を、順に一時保持する。
【００５３】
アドレスカウンタ202は、入力情報サイズ記憶レジスタ201に記憶されている入力配列情報のサイズに基づき、入力値保持レジスタ203に要素値が入力される毎に、対応して生成する累積情報値を格納すべき累積情報保持部113のメモリアドレスを計算する。入力情報の最初の画素（原点位置）が入力されると、格納すべきアドレスは０または所定のオフセット値にリセットされ、以後画像の終端画素の入力まで、格納先アドレスを１ずつインクリメントする。
【００５４】
また、アドレスカウンタ202は、入力情報サイズ記憶レジスタ201に記憶されている入力配列情報のサイズを参照し、入力要素値が２ライン目以降のものになったとき、１ライン前の同列位置の累積情報が格納されている前ライン累積情報アドレスを計算する。これは先に算出した格納先アドレスから、１ラインの要素列中の要素個数を引くことにより得られる。本実施形態のように二次元である場合には、この減算結果が負（もしくはオフセットより小）であれば、まだ１ライン目の要素値を投入中であるということが判別できる。
【００５５】
アドレスカウンタ202が計算したアドレスは、メモリコントローラ113-2に与えられ、累積情報保持メモリ113-1の当該アドレスへの書き込みまたは読み出しが成される。
【００５６】
前ライン累積情報アドレスにより参照された前ライン累積値は、前ライン累積値参照レジスタ205に一時保持される。但し、現在の入力画素が１ライン目である場合には、このレジスタには0がセットされる。
【００５７】
現ライン累積値保持レジスタ204は、現在投入中の１ラインのみについて、先頭要素（原点）からの累積加算情報を保持するレジスタである。入力要素値保持レジスタ203に要素が投入された時点では、その前回までの要素の累積加算値が保持された状態となっている。この値は投入中の１ラインについてのみ保持するものであるので、投入ラインが変わった時点で0にリセットされる。
【００５８】
累積加算処理部206は、２つの加算器により構成されている。加算器206-1、206-2は、どちらも入出力共にビット精度Nbufの正の整数である。
【００５９】
累積情報の生成動作は、次のようになる。まず、バスI/F110を介して、CPU101から入力情報サイズ記憶レジスタ201に、これから入力する配列情報の各次元方向サイズがセットされる。そして、CPU101あるいはDMAC103の転送機能により、情報入力部102から入力された配列情報の、１番目の要素が入力要素値保持レジスタへと入力される。このとき同時に、アドレスカウンタが0または所定のオフセット値にリセットされる。同時に、１ライン目の要素投入であるので前ライン累積値参照レジスタ205も0にセットされ、１ラインの先頭要素であるから現ライン累積値保持レジスタ204も0にリセットされる。
【００６０】
次に累積加算処理部206の加算器206-1において、現ライン累積値と入力要素値の加算が行われる。加算された結果は、現ライン累積値保持レジスタ204へフィードバック格納されるので、次の要素値投入時に使用できる。そして、この加算値は加算器206-2に入力され、前ライン累積値参照レジスタ205に保持されている前ライン累積値に加算される。この加算結果が当該入力要素位置に対応する累積情報値となり、メモリコントローラ113-2を介して、累積情報保持メモリの先に述べたアドレスカウンタ202で計算された格納アドレスに格納される。以後、続く配列要素値投入毎に同様の処理を繰り返してゆくと、２ライン目以降の処理では、投入された入力配列要素値に現ライン累積値と前ラインの同じ位置の累積情報値が加算され、入力情報に対応する累積情報が生成できる。
【００６１】
（累積情報利用演算部の説明）
次に、ステップS1103のメイン処理で用いられる累積情報利用演算部112の構成と動作について説明する。本実施形態では、累積情報を利用した演算結果を用いる後段処理として、図８〜１０で説明したパターン識別処理を行っている。従って必要とする演算結果は、処理ウィンドウ801内に相対的に配置される、Haar-like特徴を検出する弱判別器の各矩形内要素の総和値である。入力画像の任意の矩形領域内要素の総和値は、図５で説明したように累積画像情報の４点の要素値を参照することで計算することができる。
【００６２】
図３は、累積情報利用演算部112と、バスI/F110および累積情報保持部113との接続の構成を示すブロック図である。201は入力情報サイズ記憶レジスタであって、図２で説明したのと同一のものであり、先に説明したように、累積情報生成前にCPU101によりバスI/F110を介して予め入力情報のサイズが設定されている。
【００６３】
CPU101はまず処理ウィンドウ内における総和値を求める矩形領域を特定する。そしてこの矩形領域を表す処理ウィンドウ内の２点の対角座標（相対座標）を、入力情報の原点からの絶対座標、すなわち図５における(x0, y0),(x1, y1)に変換する。そして、バスI/F110を介して領域指定レジスタ301にこの絶対座標値を設定する。
【００６４】
バスI/F110を介してCPU101から演算開始のトリガが掛かると、参照アドレス計算部302は、領域指定レジスタ301に設定されている値を参照し、図５におけるA,B,C,Dの４点の位置の値を格納しているアドレスを計算する。そしてこのアドレス値を順にメモリコントローラ1113-2に渡す。
【００６５】
メモリコントローラ113-2は、送られてくるアドレスに基づき累積情報保持メモリ113-1にアクセスし、順次取得した４点の累積情報値を参照値一時保持レジスタ303に設定する。
【００６６】
参照値一時保持レジスタ303に４点の値が保持されると、加減算処理部304は４点の値を用いた所定の加減算処理を実行する。ここで所定の加減算処理とは、式(2)に示した演算を行うものである。この演算結果は、演算結果保持レジスタ305に保持される。CPU101は演算完了を、バスI/F110を介して割り込み通知や完了フラグの参照等によって知ることができる。そして演算結果保持レジスタ305の値を取得し、設定した矩形領域の総和値として使用する。
【００６７】
尚、加減算処理部304で用いられている加減算器は、全てNbufビットの正の値を入出力とするものである。
【００６８】
（非特許文献１の記述に基づくビット削減方法）
ここで、非特許文献１に述べられている、ブロック分割して生成した累積情報を保持することにより、バッファのビット精度を削減する方法について詳細に説明する。尚、先に述べたとおり非特許文献１に明記されている演算のみでは、元の分割されない累積情報値を復元するには不十分であるので、以下にはこの点に改良を加えた方法について図６を用いて説明する。
【００６９】
図６(a)は、このブロック分割による累積情報の保持方法の一例を説明する図である。画像600は、Ximg×Yimg画素の大きさの入力画像をXsub×Ysub画素のブロックに分割し、夫々のブロック毎に左上端の画素を原点として累積画像情報を生成した様子を示す。各ブロックの累積画像情報をサブ累積情報と呼んでＣsub(j,k)と表し、夫々のブロックにおいて左上端の画素を原点(0, 0) としたときの位置（Xsub, Ysub）の値（サブ累積情報値）をＣsub(j,k)（Xsub, Ysub）と表す。但し、jは横方向のブロック位置、kは縦方向のブロック位置（共に0スタートの整数値）を表す。また、0≦xsub＜Xsub, 0≦ysub＜Ysub である。このとき、各Ｃsub(j,k)（Xsub, Ysub）の最悪値Ｃmax_subは、
Ｃmax_sub＝ImaxXsubYsub      (4)
となって、これを格納可能なビット精度Nbuf_subがＣsub(j,k)を格納するために必要なバッファに要求されるビット精度となる。（Imaxは、ビット精度Nimgの入力情報値として取り得る最大値すなわち
【００７０】
【数４】
2008299627.tif 000006
【００７１】
である。）
【００７２】
そして別途、各ブロックＣsub(j,k)毎に、夫々の右下端位置における従来の全域で演算した累積情報値Ｒsub(j,k)（代表累積情報値と呼ぶ）601を記憶するバッファＲsub602を用意する。すなわち、式(1)と対応付けると、
Ｒsub(j,k)＝Ｃ(Ｘsub(j+1)-1, Ｙsub(k+1)-1)      (5)
である。Ｒsub(j,k)のビット精度は従来の累積情報であるのでNbuf_maxである。また、
Jmax＝（Ximg-1）/Xsub, Kmax＝（Yimg-1）/Ysub      (6)
とすると、Ｒsubの要素数はブロック数に等しいので(Jmax+1)(Kmax+1)で表される。（但し、式中の/は整数除算であり、余りは切り捨てる。）
さて、全てのブロックのサブ累積情報Ｃsub(j,k)一式と、代表累積情報Ｒsubが記憶されているとする。このとき、例えば図６(a)に示す点Xの位置に対応する従来の累積画像情報値C(x, y)を復元するには、位置610の代表累積情報値にサブ累積情報値611の値を加えるだけでは不十分で、位置612-1〜5に示すサブ累積情報値も加算する必要がある。従って、
xsub＝mod(x,Xsub), ysub＝mod(x,Ysub)      (7)
ｊ＝ｘ/Xsub, k＝y/Ysub
として
【００７３】
【数５】
2008299627.tif 000007
【００７４】
なる計算を行えば、所望の位置Xの従来の累積情報値を再現することができる。（但し、mod(a, b)は整数除算a/bを行った際の剰余である。またｊ＝0もしくはｋ＝0のとき、Ｒsub(j-1,k-1)＝0とする。）
４点それぞれの値をこのようにして求めたら、通常の累積画像情報と同様に式(2)の計算を行うことで、矩形領域の総和値を求めることができる。
【００７５】
このような累積情報の保持方法にすると、例えば上述した条件すなわち、Nimg＝8, Ximg＝640, Yimg＝480の入力画像に対し、Xsub＝Ysub＝16とすると、Ｃmax_sub＝ImaxXsubYsub＝65280＝FF00ｈであるので、Nbuf_sub＝16bitとなる。生成する累積情報を一時に全て保持するとしても、用意すべきバッファ容量トータルは、Nbuf_sub×Ximg×Yimg＋Nbuf_sub×Jmax×kmax=4947600bitとなる。つまり、従来のC(x, y)の値全てを保持する場合に比べ、大幅にバッファ容量が削減できていることがわかる。
【００７６】
しかしながら、このようなブロック分割によるバッファ容量削減方法には、以下に述べる問題点がある。すなわち、従来は、４点の値を参照するだけで、後は式(2)による簡単な加減演算のみを行えば、所望の矩形領域の総和値を求めることができたのに対し、この方法では４点それぞれに対し、さらに値復元のための式(7),(8)の演算を行わなければならない。つまり、所望の結果を得るための演算負荷が大幅に増大する。
【００７７】
特に(7)のような演算に必要な除算器の実装は、ハードウェアによる処理を実現する際に、回路規模を大幅に増大させる。また、(2)の演算を行うための加減算器は従来の累積情報値を用いるので、バッファのビット精度が削減されているにもかかわらず、従来と同じビット精度Nbuf_maxの入力が必要である。これは通常、求める一部領域の総和値を格納するのに必要なビット精度より大きいので、やはり回路規模増大の要因と成り得る。
【００７８】
さらに、処理速度を上げるため並列演算処理を行う場合には、これら増大した回路が並列度倍で効いてくるため、より切実な問題となるし、動作クロックやパイプライン段数にも影響する。ソフトウェアにより処理を行う場合であっても、復元演算に相当する処理負荷が増えることになるため、実行速度が大幅に低下するのは言うまでも無い。
【００７９】
従って、本実施形態においては、ブロック分割しない以下に説明する方法を実施している。
【００８０】
（ビット精度と生成されるオーバーフロー累積情報）
ここで、ビット精度Nbufが、先に説明したような入力配列要素全てが最大値であるときの最悪累積値Ｃmaxを格納可能なビット精度Nbuf_maxであるとする。このとき、生成される累積情報は図４(b)に示す従来の累積情報となり、入力情報が二次元配列である場合には、右下方向に向かって値が単調増加してゆく。しかしながら、累積情報を保持するバッファをNbuf＜Nbuf_maxなるビット精度（所定ビット）とすると、入力情報の値に依存して、図７に示すように右下に向かってある地点でオーバーフローを起こし小さい値に戻る。これを繰り返し、元の累積情報の所定ビット以下の部分に相当する累積情報が生成される。このような累積情報を、オーバーフロー累積情報と呼ぶことにする。
【００８１】
尚、図７ではこのオーバーフローの位置を等高線的に示しているが、一般的に右下位置に進むにつれ累積される値が蓄積するのでオーバーフローする頻度は多くなり、等高線が詰まった状態となる。つまり、同一の大きさのエリア内（例えば処理ウィンドウ内）であっても、オーバーフローの起こる頻度は右下の位置ほど多くなる。
【００８２】
本実施形態の情報処理装置では、このようなオーバーフロー累積情報を生成するビット精度Nbufの累積情報生成部111と累積情報保持部113を用いている。また、図３で説明したの加減算処理部304で用いられている加減算器も、先に説明したようにNbufビットの正の値を入出力とするものであるので、参照する４点の値によっては、オーバーフローやアンダーフローを起こす可能性がある。
【００８３】
累積情報保持部113は、先に説明したとおり累積情報保持メモリ113-1とメモリコントローラ113-2により構成されている。累積情報保持メモリ113-1は、各アドレスにNbufビットの値を保持可能なメモリであるが、メモリコントローラ113-2を工夫することにより、8bitや32bit単位の汎用的なRAMを用いることも可能である。この際、メモリコントローラ113-1においてアドレスとビットの対応付けを行い、Nbufとの差である端数ビットを別のアドレス値として割り当てれば、パッキングを行って必要最小限のRAM容量とすることができる。
【００８４】
図７のようなビット精度Nbufのオーバーフロー累積情報用い、Nbufビット加減算器を用いて加減算処理を行ったとしても、後段処理に演算結果値を用いる際に問題の無いこと、及び問題の無い最低限必要なビット精度の定め方については、次に説明する。
【００８５】
（オーバーフロー累積情報の原理とビット精度の決定要件）
本実施形態においては、以下に示すNbuf＝Novとしてオーバーフロー累積情報を生成している。図５は、オーバーフロー累積情報であっても、正しく矩形領域内要素の総和値が求められる原理を説明するための図である。尚、図５は先の従来技術の説明（式(2)）においては、通常の累積情報すなわち図４(b)に相当するものとしたが、ここではオーバーフロー累積情報すなわち図６に相当するものに置き換えて説明する。元の入力画像（図４(a)）における特定領域の要素値の総和を得るという点では、利用目的は同等である。
【００８６】
図５において、点(x0-1, y0-1), (x1, y0-1), (x0-1, y1), (x1, y1)それぞれの位置の要素値（オーバーフロー累積値）を、A,B,C,Dとする。今、累積情報保持部の専用バッファメモリのビット精度をNovとし、X=2Novとする。ここで演算mod(S',T)はS'をTで割った余りと定義し、これをSと記す。但し、Tは正の整数であり、S'は正負共にあり得る整数である。また、S'が負である場合は、0以上の値になるまでTを足したものをmod(S',T)の演算結果Sとする。従ってSは非負整数である。
【００８７】
ここでS'を、複数の正の整数の加減算またはその組み合わせによる演算結果とする。そして、用いる加減算器を全てNovビット正整数入力・Novビット正整数出力のものにすれば、得られる出力はXを超えるものはオーバーフローし、0より小なるものはアンダーフローする。このため、結果はS＝mod(S',X)に等しくなる。つまり真の加減算演算結果S'がX以上であれば、Xで割った余りとなり、S'が負値ならば正になるまでXが足された値となって、結果、常に０≦S＜Xなる値Sが得られる。
【００８８】
図５における各オーバーフロー累積値A,B,C,Dは、バッファのビット精度をNovとすれば、
A＝mod(A',X)
B＝mod(B',X)
C＝mod(C',X)
D＝mod(D',X)        (9)
と表すことができる。但し、A',B',C',D'は通常のオーバーフローの無い従来の累積情報の場合の同位置の値であって、正の整数であり、式(2)の記述によれば、
A'＝Ｃ(x0-1, y0-1)
B'＝Ｃ(x1, y0-1)
C'＝Ｃ(x0-1, y1)
D'＝Ｃ(x1, y1)        (10)
である。本実施形態では、図２に示した累積加算処理部206で、バッファのビット精度に合わせたNovビット正整数入出力の加算器を用いる。従って、オーバーフロー累積情報を生成するに当って、別途式(9)に相当する演算を行う必要はなく、結果的に成されていることになる。
【００８９】
さて、(x0, y0)と(x1, y1)とを対角とする矩形領域内の総和値をＣ(x0, y0;x1, y1)＝S'とすると、式(2),(10)より、
S'＝          Ｃ(x0-1, y0-1)−Ｃ(x0-1, y1)−Ｃ(x1, y0-1)＋Ｃ(x1, y1)
＝A'−B'−C'＋D'                                    (11)
が求めたい値である。ここで、A',B',C',D'を
A'＝A”X+A
B'＝B”X+B
C'＝C”X+C
D'＝D”X+D          (12)
として表す。このときA”,B”,C”,D”はそれぞれ、A',B',C',D'をXで割った商である。
【００９０】
さて、式(11)と全く同様の加減算処理を、A',B',C',D'の代わりにA,B,C,Dをそのまま用いて行うことを考えてみる。但し、用いる加減算器はここでも全てNovビット正整数入出力のものとする。（つまり本実施形態では、加減算処理部304もNovビット正整数入出力の加減算器で構成される。）このとき演算結果Sは、加減算器のビット制限により(A−B−C＋D)がXより大きければオーバーフローし、0より小さければアンダーフローするので０≦S＜Xとなる。すなわち先に述べたmod演算の定義より、
S＝mod{(A−C−B＋D),X}          (13)
となる。これに式(12)を代入してを変形すると、
S＝mod{(A−C−B＋D),X}
＝mod[{(A'−C'−B'＋D')−(A”−C”−B”＋D”)X},X]
＝mod{(A'−C'−B'＋D'),X}
＝mod(S',X)                                (14)
つまり、ここでもし０≦S'＜Xが保証できるならば、S=S'となることが分かる。
【００９１】
S'はそもそもの定義より、正の整数（または固定小数点の数）の各要素値を持つ入力情報の特定矩形領域内の総和値であるので、0以上であることは保証されている。従って、０≦S＜X＝2Novを保証できるNovを選び、これをバッファのビット精度Nbufとすれば、S=S'が保証できることになる。
【００９２】
これはすなわち、後段の処理に必要とされる特定矩形領域の大きさに応じて、Novを定めれば良いことを示している。後段処理で使用する最大矩形領域のサイズをXrect_max,Yrect_maxとすると、矩形内総和値の最悪値は
Ｃrect_max＝Irect_maxXrect_maxYrect_max                  (15)
となるので、Ｃrect_maxをオーバーフローせず格納するために必要なサイズ以上にNovを定めれば良い。
【００９３】
一例として、課題の項において従来技術の説明で例示したのと同条件で考えてみる。すなわちNimg＝8, Ximg＝640, Yimg＝480の入力画像とする。ここで後段処理に用いる最大矩形領域サイズを、例えばXrect_max＝Yrect_max＝16とすると、
Ｃrect_max＝Irect_maxXrect_maxYrect_max＝65280＝FF00ｈ（Ｃmax_subと同値）となるので、Nov＝16bit（上述したブロック分割時のNbuf_subと同値）となる。入力画像全域に対し生成した累積情報を全て一時に保持するとしても、用意すべきバッファ容量は、Nov×Ximg×Yimg＝4915200bitとなる。つまりこの条件では、上述したブロック分割＋代表累積情報値を保持する方法よりも、さらに低減できることが分かる。
【００９４】
もちろん本実施形態の方法は、使用する最大矩形領域が大きくなるとNovのビット数が増加するため、条件によっては、常に上述のブロック分割による方法よりもバッファ容量が少なくなるとは限らない。しかし、ここまで説明してきたとおり、用いる演算器はビット精度Nbuf＝Novの加減算器のみの極めてシンプルな構成である。
【００９５】
すでに述べたように、上述のブロック分割による方法では、復元演算のための除算器やビット精度Nbuf_max＞Novの加減算器・レジスタ等、複雑な付加演算（回路）を必要とする。対して本実施形態の方法は、従来の非分割の累積情報と演算回数は全く同じであり、さらに演算器のビット精度を削減できる。回路の段数が減ることから、よりクロックアップできる可能性もある。つまり、バッファ容量削減だけでなく、処理速度高速化や回路規模削減に対しても大きな利点がある。
【００９６】
Novの上限は、回路規模やバッファ容量に余裕があるならばいくらでも良く、Nbuf_maxにすれば、従来のオーバーフロー無しの累積情報を生成することになる。しかし、それ以上にするのは、有効に使われないビットが増えるだけで意味が無い。Nbuf_maxよりも小さくすれば、入力画像の値に応じて上述したオーバーフロー累積情報になる可能性がある。しかし上述の通り、Novが後段の処理に必要とされる特定矩形領域の大きさに基づいて定めた下限Nov_min以上であれば、オーバーフロー累積情報となっても全く問題はない。
【００９７】
通常はNov＝Nov_minとするのがもっとも有利であるが、同回路で将来的に別の処理を行わせる可能性がある場合等は、回路規模や処理時間の許す限りNovを大きくしておけば、より多くの処理に対応できる可能性が広がる。
【００９８】
（ビット精度の決定方法：矩形基準と処理ウィンドウ基準）
ここで、本発明の原理に基づくビット精度Novの下限Nov_minの定める方法の例を２通り説明する。後段処理の例として、従来技術の非特許文献２と同様のパターン認識処理を行うものとする。
【００９９】
第一の方法としては、図９において、学習の結果得られた各弱判別器は、複数の矩形領域を組み合わせたフィルタにより構成されている。これらを正負（白黒）の区別なく、全てチェックし、最大サイズ（含む要素数のもっとも多い）の領域のものを選ぶ。そしてこの最大矩形領域に基づき、Nov_minを定めるというものである。この方法は、当該パターン認識処理を行うに当って、最も効率の良いNov_minを決定することを可能とする。しかしながら、認識条件が変わるなどして学習し直す必要が生じた場合、学習後に生成されたフィルタがより大きな矩形領域を使用するものとなって条件に合わなくなる可能性がある。
【０１００】
これに対し、第二の方法として、図８で説明した処理ウィンドウ８０１の大きさを最大矩形領域と見なし、同様にNov_minを定める方法がある。このようにすれば、第一の方法より若干効率が悪くなる可能性が高いが、処理ウィンドウサイズが変わらない限り、学習し直しにもそのまま対応可能な回路が構成できる。
【０１０１】
（第２の実施形態）
第１の実施形態では、累積情報保持部113に入力情報全領域に対応するオーバーフロー累積情報を保持する例について説明したが、本発明はこれに限るわけではない。
【０１０２】
図１２は、累積情報保持部113の累積情報保持メモリ113-1を、バンドバッファとして利用する際に一時に保持されるオーバーフロー累積情報の領域を示している。領域1200は、図７で説明したオーバーフロー累積情報の全域である。このオーバーフロー累積情報全域1200に対し、領域1202は一時に保持する所定高さのバンド領域を示している。
【０１０３】
バンド領域1202の高さは、後段処理の処理ウィンドウ1201の高さと等しく定められており、幅は入力情報に等しい。尚、本実施形態における後段処理は、図１０および図１１のメイン処理以降として説明した、第１の実施形態のものと同等のものである。但し、ステップS1103として示したメイン処理に相当する処理は、バンド領域単位で行われる。１バンド位置におけるメイン処理が完了すると、保持するオーバーフロー累積情報が１ライン下方にスライドし、スライド後の領域を論理的に連続する領域として、当該バンド位置で左端の処理ウィンドウからメイン処理を行う。
【０１０４】
領域1202は処理開始時最初に保持されるバンド領域を示し、領域1203は１ライン下方に保持されるバンド領域が移動した様子を示している。本実施形態におけるバンドバッファは、ライン単位のリングバッファとして構成しているので、新たな１ラインを生成する際には、最も古い１ラインを破棄してこの領域に新たなラインを保持する。従って、オーバーフロー累積情報の所望の位置が、現在のバッファ中のどのアドレスに相当するかを換算する必要はあるが、全域を一度に保持するときに比べて処理のオーバーヘッドはほとんど無い。
【０１０５】
図１３は、バンドバッファによるオーバーフロー累積情報を保持した際の、全体の処理の流れを示すフローチャートであり、実施形態１における図１１に相当する。
【０１０６】
ステップS1301はステップS1101と同等の情報入力処理である。尚、実施形態１と同様にステップS1301も、後述するステップS1302やS1305と並列に行うように実装してももちろん構わない。
【０１０７】
ステップS1302は累積情報生成処理であるが、ステップS1101と異なりバンド領域1202の先頭バンド位置のみの累積情報を生成する処理である。尚、CPU101やDMAC103、累積情報処理部100の動作は、範囲が異なるだけで実施形態１と同様の動作である。
【０１０８】
S1302により、累積情報保持部113におけるバンドバッファが、領域1202に示す位置（原点位置）の累積情報を保持すると、S1103に相当するメイン処理S1303を行う。本実施形態においても、この処理は図１０で説明したパターン認識処理を実施している。
【０１０９】
まず、処理ウィンドウ1201が図１２のようにバンドの先頭位置にあるときに、図１０のステップS1002〜S1008として説明した所定の処理を行う。そして次にS1001に相当する処理として、処理ウィンドウ1201の位置を先頭から右に1画素ずらした位置に移動させ、再び所定の処理を行う。以後、処理ウィンドウ1201がバンド領域1202の右端に達するまで、実施形態１と同様に所定の処理を繰り返す。つまり、本実施形態においては、ステップS1001はバンドの左端位置から１画素ずつ右に処理ウィンドウ1201を移動させる処理であって、S1007のスキャン終了とは１バンドの右端までの処理終了を検知する処理である。
【０１１０】
１バンド分のメイン処理ステップS1303が完了すると、現在処理していたバンドが入力情報の最終ラインを含む位置であったかどうかを、ステップS1304として判別する。
【０１１１】
最終ライン位置でなければステップS1305に進み、次の１ライン分の累積情報を生成して保持する。このとき前ライン分の累積情報はすでに累積情報保持メモリ113-1のバンドバッファ上に存在しているので、実施形態１で説明した生成方法と全く同様に１ライン分の累積情報を生成できる。すなわちこの演算において、バンドバッファにしたことによるオーバーヘッドは生じない。
【０１１２】
次ライン生成・保持後は、累積情報のバンド位置が領域1203に移った状態となり、再びS1303のメイン処理を実行する。以後、S1304において最終ラインと判別されるまで、１ラインずつバンドを下方に移動させつつ、同様に処理を繰り返す。
【０１１３】
ステップS1304で最終ラインに到達したことが判別されると、ステップS1104と同様の後処理S1306を行って処理完了となる。
【０１１４】
本実施形態によると、実施形態１に比べ、ほとんどの演算オーバーヘッド無しに、累積情報保持メモリ113-1のメモリ容量を大幅に削減することが可能となる。尚、バンドバッファで保持する際であっても、ビット精度Nbufは、実施形態１で説明したNovで良いことは、後段の加減算演算処理が同等の処理であることから自明である。もちろんバンドバッファ内で何度オーバーフローしていてもかまわない。
【０１１５】
実施形態１と同様にNimg＝8, Ximg＝640, Yimg＝480で、処理ウィンドウサイズが16×16画素（つまりXrect_max＝Yrect_max＝16）である場合を考えてみる。一時に保持する必要のあるサイズは１バンド分であるので、最低限用意すべきバッファ容量は、Nov×Ximg×Yimg＝16×640×16＝163840bitとなって、実施形態１に比べ大幅に削減できることが分かる。
【０１１６】
また、バンドの高さを実際に用いる矩形領域の最大サイズに基づいて定めることももちろん可能であり、さらにバッファ容量を削減できる可能性がある。但し、この場合は、処理ウィンドウ単位の処理ではなく、フィルタ種別単位の処理にするなど、後段処理を変更する必要がある。また、後段処理を変更したことによるオーバーヘッドが生ずる可能性もある。
【０１１７】
（実施形態３）
更にバッファ容量を削減する方法として、ブロックバッファでオーバーフロー累積情報を保持するようにすることもできる。
【０１１８】
図１４は、累積情報全域に対し、一時に保持されるブロックバッファの様子を示す図である。1400は現在処理中のバンド位置を示す破線であって、図１４では先頭バンド位置を示している。1401は現在ブロックバッファに保持している累積情報の領域を示し、図１４では開始位置（原点位置）にあることを示している。これは現在の処理ウィンドウの位置と一致する。1402は処理ウィンドウが右に１画素分ずれた領域を示し、この領域を処理する際にはブロックバッファには同領域の累積情報が保持されることになる。
【０１１９】
本実施形態において、ブロックバッファは縦方向線分単位のリングバッファとして構成される。ここで縦方向線分とは、処理ウィンドウ高さに一致する長さの線分である。ブロックバッファに保持される累積情報が、1401から1402の位置に移る際、縦方向線分1403の累積情報が記憶されている領域が破棄されて、同領域に新たに計算される縦方向線分1404の領域の累積情報が保持される。これを処理バンドの右端位置まで順次繰り返す。
【０１２０】
図１６は、ブロックバッファでオーバーフロー累積情報を保持する際の全体の処理の流れを示すフローチャートである。
【０１２１】
ステップS1601は図１１におけるS1101と同様の情報入力処理である。尚、ステップS1601は実施形態１と同様、後段の処理で入力情報を直接使うことが無ければ、後述するステップS1602、S1605、S1608と同時に行うようにすることも、もちろん可能である。
【０１２２】
ステップS1602では、先頭バンド位置における先頭ブロックの累積情報を生成・記憶する。すなわち、まず図１４における1401の位置の累積情報を生成する。ここで、本実施形態におけるブロックバッファは、処理ウィンドウサイズのバッファを２つ用意したダブルバッファ構造となっている。図１７(a),(b)は２つのバッファを表している。生成された1401領域のブロック単位の累積情報は、図１７の(a)の領域に保持される。そして同時に、(a)の上線分を１行分を除いた破点部1701の領域の累積情報と同じ値が、(b)の破点部1702に示す領域に記憶される。この理由については後述する。
【０１２３】
また、図１７のダブルバッファとは別に、図１４の1405に相当する領域、すなわち現在の処理バンドにおける先頭１ライン分（先頭ブロック分を除く）の記憶領域を用意しておく必要がある。この領域を先頭列方向累積値バッファと呼ぶ。S1602の処理完了時点で、先頭列方向累積値バッファは全て0にセットされる。
【０１２４】
次にステップS1603のメイン処理を行う。この処理は図１０に示した処理とほぼ同等であるが、ここでは１箇所の処理ウィンドウ分の処理のみを行えばよいので、ステップS1001とS1007は除かれる。
【０１２５】
一つの処理ウィンドウ分すなわち１ブロックに対するメイン処理が終わると、処理したブロックの位置が、現在の処理バンド（1400）の最終ブロックすなわち右端であったかどうかを判定する。
【０１２６】
最終ブロックでなければ、次のステップS1605としてブロックの右端に隣接する線分領域1404の累積情報を生成し、線分領域1403の累積情報を保持していたバッファ領域に保持する。この線分1404の位置に対応する累積情報は、同領域の入力情報と、ブロックバッファ内に現在保持されている累積情報値、および先頭列方向累積値バッファに保持されている値から計算可能である。すなわち線分の各画素について、線分と同じ列の先頭列方向累積値バッファの値に、同線分内の上から当該画素までの和を加え、更にすでにブロックバッファに保持されている当該画素のすぐ左の累積情報値を加算すれば良い。
【０１２７】
ここで、線分1404に対応する累積情報が一式、ブロックバッファに格納された後、先頭列方向累積値バッファの同列の位置に、すでに格納されている値に線分1404の一番上の画素を加えた値を格納し直す。つまり、先頭列方向累積値バッファとは、各列別に、入力情報の開始ラインの画素から累積情報を生成した線分の上端画素まで累積した縦方向累積値を保持するバッファとなっている。この値を保持することによって、処理バンド位置が下方に向かうのに同期して、各位置に対応する累積情報値が計算できる。これは、実施形態１や実施形態２のオーバーフロー累積情報で、ある位置の累積情報値を計算するのに、同列のすぐ上のラインの累積情報値に行方向のみの累積値を加算したのと同様である。つまり本実施形態では、行方向累積値の代わりに列方向累積値を用いるので、前ライン累積情報ちの代わりに前列累積情報値をそのまま用いることができるのである。例えば1407の位置から始まる縦線分を計算するためには、当該位置の画素値とすぐ左の前列累積情報値に、同じ列の1406の位置までの縦方向累積値を加算すれば良い。以後、１ライン毎の処理バンドの進行に合わせて、先頭列方向累積値バッファの値を更新していく。
【０１２８】
次線分累積情報を生成し、処理ウィンドウを右へ１画素ずらしたら、当該領域に対しステップS1603に戻ってメイン処理を実行する。以後、ステップS1604にて、処理ウィンドウが現在の処理バンドの右端ブロックまで達したと判定されるまで、同様に繰り返す。
【０１２９】
処理バンド位置において最終ブロック位置（右端）までの処理が完了したら、次にステップS1606にて全入力情報の最終ライン位置まで処理完了したかどうかを判定する。処理バンド位置が最終ライン位置に到達していなければ、ステップS1607として処理バンド位置を１ライン下方に設定し直す。
【０１３０】
そして、ステップS1608において、新たに設定した処理バンド位置の左端先頭ブロックの累積情報の生成・記憶処理を行う。この処理においては、前処理バンド位置で用いたダブルバッファの一方とは別のブロックバッファを用いる。前処理バンドにおいて図１７(a)のブロックバッファを用いていたとすると、今回の処理バンドにおいては(b)のブロックバッファを用いることになる。このとき領域1702には、(a)が前処理バンド位置の先頭にあったときの領域1701に相当する累積情報と、同じ値がすでに格納されている。（もちろん(a)はリングバッファとして使われた後であるので、現在の値は異なっている。）従って、新たに1703に相当する位置の横方向線分の累積情報を生成し(b)に格納すれば、現在の処理バンド位置における先頭ブロックの累積情報の生成が完了する。尚、生成した累積情報は次ラインの処理に備えるため、前回の(a)→(b)と同様の１線分上方にシフトした位置関係で(b)→(a)に同値をコピーしておく。
【０１３１】
現在の処理バンドにおける先頭位置（左端）ブロックの累積情報の生成が完了したら、ステップS1603の処理に戻り、ブロック毎のメイン処理を行う。以後、ステップS1606において最終ラインに到達するまで、順に処理を繰り返して入力情報全域に対する処理を実行する。そして、ステップS1104と同等の後処理を行って全体の処理完了となる。
【０１３２】
本実施形態でも、バッファのビット精度Nbufは実施形態１で説明したNovとして良い。もちろん入力情報と保持するブロックの位置に応じて、ブロック内で複数回のオーバーフローが生ずるが、このオーバーフロー累積情報を用いた計算結果は、実施形態1と同様に問題なく利用可能なものとなる。
【０１３３】
本実施形態におけるバッファ容量を実施形態１や２で説明した例と同条件で計算すると、Nov×{Xrect_max×Yrect_max×2＋(Ximg−Xrect_max)}＝16×{16×16×2＋(640−16)}＝18176bitとなる。よって、極めて少ないバッファ容量にすることが可能となっていることが分かる。上記において、×２はダブルバッファ分、(Ximg−Xrect_max)は先頭累積値バッファ分である。
【０１３４】
但し、本実施形態のブロックバッファによる実装では累積情報を計算する上でのオーバーヘッドが生ずる。図１５を用いて、演算オーバーヘッドについて説明する。図１５の(a)において、先頭の処理ウィンドウ1500と上下１ライン分を除いた1501の領域の累積情報は、同じ累積情報値が２回以上計算される領域である。例えば、図１４の1407の位置の累積情報は、処理バンドが1400の位置にあるときに１度計算され、さらに処理バンドが次の１ライン下方位置へ移動した際も計算されるため、都合２回同じ値が計算されることになる。そのさらに１画素下の累積情報は３回計算されその下は４回、というように、ブロックサイズが16×16であれば最大１５回計算される累積情報が存在することになる。図１５(a)において、1500の幅で縦方向に最終ラインまでの間が再計算されないのは、図１７に述べたダブルバッファの構造のためである。
【０１３５】
また、ダブルバッファ構造にせず、シングルのブロックバッファを用いて構成する方法もある。この場合、処理バンドが１ライン下方に移動する度に、先頭ブロック領域の累積情報を全て計算し直す。このとき基準となる入力情報の要素の位置は、今まで説明してきた累積情報のように原点位置とする必要はなく、処理バンドの左上端位置の要素としてよい。つまり、生成されるオーバーフロー累積情報は、図７で説明したものとは異なった値となり、さらにバンドの移動に応じて再計算される度に、同じ位置に対応する累積値であっても異なった値が格納される。このようにした場合、ブロックサイズが16×16で最大１５回再計算されるというのは変わらないが、再計算される領域は、図１５(b)に示すものとなる。また、必要となるバッファ容量は、Nov×Xrect_max×Yrect_max＝16×16×16＝4096bitとなり、累積情報を計算するための負荷は増えるが、必要な容量は最小化できる。尚、累積情報利用演算部112で行われる加減算負荷は、ビット精度Nbuf＝Novであるので今まで説明してきた実施形態と全く変わらないのは明らかである。
【０１３６】
（他の実施形態）
上述した累積情報は、三次元以上の多次元配列情報に対しても生成することができる。図１８は三次元の場合の累積情報の様子を例示する図である。三次元配列の入力情報とは、例えば動画情報であって、二次元画像に時間軸の一次元が加わり三次元情報となる。
【０１３７】
図１８の(a)において、三次元累積情報配列の点Xの位置の要素には、入力三次元情報における原点と点Xを対角とする直方体の中に含まれる要素の総和値となる。
【０１３８】
この三次元累積情報を用いて、例えば図１８(b)の直方体1801内の要素の総和値を求めることが可能である。ここで、直方体1801の対角を示す２点の座標を(x0, y0, t0),(x1, y1, t1)とする。A,B,C,D,E,F,G,Hをそれぞれ、
A：(x0-1, y0-1, t0-1)
B：(x1, y0-1, t0-1)
C：(x0-1, y1, t0-1)
D：(x1, y1, t0-1)
E：(x0-1, y0-1, t1)
F：(x1, y0-1, t1)
G：(x0-1, y1, t1)
H：(x1, y1, t1)          (16)
なる位置の累積情報値であるとすると、入力情報の直方体1801内要素の総和値S3dは、
S3d＝H−D−F＋B−(G−C−E＋A)        (17)
として計算することができる。
【０１３９】
この三次元累積情報に対し、本発明の考え方を適用しオーバーフロー累積情報で代替することももちろん可能である。図１９において1901は三次元入力情報時の処理ウィンドウの一例を示す。この処理ウィンドウサイズが、(Xrect_max,Yrect_max,Trect_max)のとき、二次元の場合と同様に、この中の全ての要素が最大値を取る場合の総和値を、オーバーフローせずに格納可能なビット精度NOVを求める。そして、これをバッファのビット精度Nbufとすればよい。例えば入力情報が８ビットで、Xrect_max＝16, Yrect_max＝16, Trect_max＝4であるとする。このとき、Ｃrect_max＝ImaxXrect_maxYrect_maxTrect_max＝255×16×16×4＝261120＝3FC00ｈとなって、Nov＝18bitとなる。もちろんこのビット精度Nbuf＝Novのとき、原点位置より離れるに従って処理ウィンドウ内でオーバーフローが発生した状態の累積情報となるが、二次元の場合と同様に、式(14)で所望の直方体内の総和値を求められる。
【０１４０】
また、図２０に示すように、バンドもしくはブロックタイプのバッファとして保持するようにすることによって、さらにバッファ容量を削減できるのは二次元の場合と同様である。図２０において、(a)のタイプのバッファであれば、累積情報を計算する上で余分なオーバーヘッドは生じない。(b),(c)タイプであれば、より容量を削減できる代わりに、再計算する累積情報が多数必要となることは二次元の場合と同様である。
【０１４１】
三次元を超える多次元入力情報に対する累積情報であっても、同様に超直方体で考えれば、本発明を適用可能であるのは明らかであろう。
【０１４２】
また、本発明はハードウェア回路のみでなく、ソフトウェアによる処理であっても適用可能である。例えば、先に述べた27bit精度必要な従来の累積情報であれば、32bitのlong型配列を用いる必要があったところを、上述の実施形態で述べたように16bitとすることができれば、16bitのshort型配列を使用することが可能となる。つまり使用するバッファ容量を半分に削減することができる。
【０１４３】
さらに区切りの悪いビット精度が必要な場合であっても、メモリアクセス時間とのトレードオフで、例えばＣ言語のビットフィールド機能等を用いることにより、メモリの利用効率を上げることができることは明らかであろう。
【０１４４】
また、実施形態では、バンドバッファやブロックバッファをリングバッファとして使用する例を説明したが、本発明はこのようなメモリの使用方法に限るわけではない。例えば、リングカウンタに対応するメモリアドレステーブルを有し、当該テーブルを参照する事で、不連続な領域を所定の処理単位で割り当てながら処理する等の方法でも良い。即ち、本発明で述べたリングバッファとは狭義のリングバッファ或いは循環バッファに限定するものではない。
【０１４５】
また、上述の実施形態でメイン処理として説明した後段処理は、パターン認識処理に限定するものではない。本発明は、従来技術で述べたようなコンピュータグラフィクス等の他分野の処理であっても、累積情報を用い、かつ使用する可能性のある最大領域の大きさが限定できる処理であれば、適用可能であることは言うまでも無い。
【０１４６】
なお本発明は、コンピュータ読み取り可能な記憶媒体から読出されたプログラムコードの指示に基づき、ＣＰＵの処理によって前述した実施形態の各機能が実現される場合も含まれる。
【０１４７】
また、プログラムコードを供給するための記憶媒体としては、例えば、フロッピー（登録商標）ディスク，ハードディスク，光ディスク，光磁気ディスク，ＣＤ、ＤＶＤ，磁気テープ，不揮発性のメモリカード，ＲＯＭなどを用いることができる。
【０１４８】
さらに、画像入力装置、情報蓄積機器、またこれらが複合または接続された装置において、両方またはいずれかの装置に備わるＣＰＵなどが実際の処理の一部または全部を行うことで前述した実施形態の機能が実現される場合も含まれる。
【０１４９】
上記画像入力装置としては、ビデオカメラ、デジタルカメラ、監視カメラなど各種ＣＣＤを利用したカメラやスキャナ、アナログ画像入力装置からＡＤ変換によりデジタル画像に変換された画像入力装置が利用できる。上記情報蓄積機器としては、外部ハードディスク、ビデオレコーダなどが利用できる。
【図面の簡単な説明】
【０１５０】
【図１】第１の実施形態における情報処理装置の構成を示すブロック図である。
【図２】累積情報生成部の構成を示すブロック図である。
【図３】累積情報利用演算部の構成を示すブロック図である。
【図４】二次元入力情報に対する、従来の累積画像情報の生成方法を説明する図である。
【図５】累積画像情報を用いて、所望の矩形領域内要素の総和値を求める方法の説明図である。
【図６】累積情報を保持するバッファのビット精度を削減する従来技術の説明図である。
【図７】オーバーフロー累積情報の一例を示す図である。
【図８】パターン認識処理の一例である、顔検出処理を説明する図である。
【図９】複数の弱判別器で構成されるパターン識別器の構成例を示す図である。
【図１０】複数の弱判別器で構成されるパターン識別器における検出処理のフローチャートである。
【図１１】実施形態１の全体的な処理の流れを示すフローチャートである。
【図１２】バンドバッファによる累積情報の保持を説明する図である。
【図１３】累積情報をバンドバッファにより保持した場合の全体の処理の流れを示すフローチャートである。
【図１４】ブロックバッファによる累積情報の保持を説明する図である。
【図１５】累積情報をブロックバッファにより保持した場合の演算オーバーヘッドの起こる領域を示す図である。
【図１６】累積情報をブロックバッファにより保持した場合の全体の処理の流れを示すフローチャートである。
【図１７】ブロックバッファをダブルバッファとしたときの説明図である。
【図１８】多次元累積情報の一例である三次元累積情報の説明図である。
【図１９】三次元累積情報を用いる場合の処理ウィンドウを説明する図である。
【図２０】三次元累積情報を保持するためのバッファの形態を示す図である。
【符号の説明】
【０１５１】
100  累積情報演算処理部
101  CPU
102  情報入力部
103  DMAコントローラ
104  外部メモリ
105  バス
110  バス・インターフェース部
111  累積情報生成部
112  累積情報利用演算部
113  累積情報保持部
113-1  累積情報保持メモリ
113-2  メモリコントローラ
201  入力情報サイズ記憶レジスタ
202  アドレスカウンタ
203  入力要素値保持レジスタ
204  現ライン累積値保持レジスタ
205  前ライン累積値参照レジスタ
206  累積加算処理部
206-1、206-2  加算器
301  領域指定レジスタ
302  参照アドレス計算部
303  参照値一時保持レジスタ
304  加減算処理部
305  演算結果保持レジスタ
【図１】
2008299627.tif 000008
【図２】
2008299627.tif 000009
【図３】
2008299627.tif 000010
【図４】
2008299627.tif 000011
【図５】
2008299627.tif 000012
【図６】
2008299627.tif 000013
【図７】
2008299627.tif 000014
【図８】
2008299627.tif 000015
【図９】
2008299627.tif 000016
【図１０】
2008299627.tif 000017
【図１１】
2008299627.tif 000018
【図１２】
2008299627.tif 000019
【図１３】
2008299627.tif 000020
【図１４】
2008299627.tif 000021
【図１５】
2008299627.tif 000022
【図１６】
2008299627.tif 000023
【図１７】
2008299627.tif 000024
【図１８】
2008299627.tif 000025
【図１９】
2008299627.tif 000026
【図２０】
2008299627.tif 000027