(57)【要約】【課題】  メモリアクセスを介してヒストグラムを作成する場合に要する時間を短縮化するための技術を提供すること。【解決手段】  画像中の画素ごとの特徴量を受け取り、第１のメモリよりも高速にアクセス可能な第２のメモリに該特徴量の頻度値が登録されていれば、該頻度値を増加させる。登録されていなければ、該第２のメモリの内容を該第１のメモリに移動させた後で該頻度値を該第１のメモリから該第２のメモリに読み出して増加させる。これにより、画像中の各画素の特徴量のヒストグラムを作成する。ヒストグラムにおいて頻度値が高いビンが近接するビンとなるように該ヒストグラムにおけるビンの並び替えを行う。【選択図】  図１
2015197897.tif 000002
【特許請求の範囲】
【請求項１】
画像中の画素ごとの特徴量を受け取り、第１のメモリよりも高速にアクセス可能な第２のメモリに該特徴量の頻度値が登録されていれば、該頻度値を増加させ、登録されていなければ、該第２のメモリの内容を該第１のメモリに移動させた後で該頻度値を該第１のメモリから該第２のメモリに読み出して増加させることで、画像中の各画素の特徴量のヒストグラムを作成する作成手段と、
前記ヒストグラムにおいて頻度値が高いビンが近接するビンとなるように該ヒストグラムにおけるビンの並び替えを行う並び替え手段と
を備えることを特徴とする画像処理装置。
【請求項２】
前記作成手段は、
画像中のそれぞれの画素について、該画素の画素値と該画素の周辺画素の画素値との大小関係を表すビット列を前記特徴量として生成し、
前記並び替え手段は、
並び替え順毎及びビットパターン毎に、該並び替え順に従ってビット値の並び替えを行うことで該ビットパターンを含むビット列となる複数種類のビット列のそれぞれの頻度値の合計値を求め、該合計値が最大となる並び替え順及びビットパターンの組み合わせを特定する特定手段と、
前記ヒストグラムのビンとしてのそれぞれのビット列について、該ビット列を構成する各ビット値を前記特定手段が特定した並び替え順に従って並び替えたビット列を生成し、該生成したビット列に対して、前記特定手段が特定したビットパターンを構成するそれぞれのビット値を同値にするための変換と同じ変換を施すことで、該生成したビット列を変換する変換手段と、
前記変換手段が変換したそれぞれのビット列に対応する、該ビット列と、前記ヒストグラムにおいて該ビット列の作成元であるビンに対応する頻度値と、を含むデータセットを、該ビット列の値が小さい順に並び替える手段と
を備えることを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記並び替え手段は、
前記ヒストグラムにおいて、頻度値が高いビンから順に並び替えることを特徴とする請求項１に記載の画像処理装置。
【請求項４】
前記作成手段は、
画像中のそれぞれの画素について、該画素の画素値と該画素の周辺画素の画素値との大小関係を表すビット列を前記特徴量として生成し、
前記並び替え手段は、
前記ヒストグラムにおいて最大の頻度値に対応するビット列中のビットパターンを対象ビットパターンとし、並び替え順毎に、該並び替え順に従ってビット値の並び替えを行うことで該対象ビットパターンを含むビット列となる複数種類のビット列のそれぞれの頻度値の合計値を求め、該合計値が最大となる並び替え順を特定する特定手段と、
前記ヒストグラムのビンとしてのそれぞれのビット列について、該ビット列を構成する各ビット値を前記特定手段が特定した並び替え順に従って並び替えたビット列を生成し、該生成したビット列に対して、前記対象ビットパターンを構成するそれぞれのビット値を同値にするための変換と同じ変換を施すことで、該生成したビット列を変換する変換手段と、
前記変換手段が変換したそれぞれのビット列に対応する、該ビット列と、前記ヒストグラムにおいて該ビット列の作成元であるビンに対応する頻度値と、を含むデータセットを、該ビット列の値が小さい順に並び替える手段と
を備えることを特徴とする請求項１に記載の画像処理装置。
【請求項５】
前記並び替え手段が作成したヒストグラムと、前記画像とは別の画像に対して前記作成手段及び前記並び替え手段により作成したヒストグラムと、を用いて、該別の画像に対する認識処理を行う手段を備えることを特徴とする請求項１乃至４の何れか１項に記載の画像処理装置。
【請求項６】
画像処理装置が行う画像処理方法であって、
前記画像処理装置の作成手段が、画像中の画素ごとの特徴量を受け取り、第１のメモリよりも高速にアクセス可能な第２のメモリに該特徴量の頻度値が登録されていれば、該頻度値を増加させ、登録されていなければ、該第２のメモリの内容を該第１のメモリに移動させた後で該頻度値を該第１のメモリから該第２のメモリに読み出して増加させることで、画像中の各画素の特徴量のヒストグラムを作成する作成工程と、
前記画像処理装置の並び替え手段が、前記ヒストグラムにおいて頻度値が高いビンが近接するビンとなるように該ヒストグラムにおけるビンの並び替えを行う並び替え工程と
を備えることを特徴とする画像処理方法。
【請求項７】
コンピュータを、請求項１乃至５の何れか１項に記載の画像処理装置の各手段として機能させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ヒストグラム作成技術に関するものである。
【背景技術】
【０００２】
入力データに対して、そのヒストグラムを作成することは、入力データの統計情報（例えば最大出現頻度をとる入力データ値の特定等）を取得するための有効な手段である。一般的に、ヒストグラムはメモリやカウンタ等の記憶素子を用いて作成される。例えばメモリを用いる場合には、データ値に対応したメモリアドレスに、そのデータ値の数（頻度値）を格納することによって、ヒストグラムを作成する。その際、データ値に対応する値を低速なメモリ（例えばDRAM等）から、CPU等の処理プロセッサが高速にアクセス可能なメモリ（例えばキャッシュメモリ等）に読み出し、読み出した値に対してデータ値を加算し、再度、DRAM等の低速なメモリに書きだす。以上の手順でヒストグラムを作成する。このようなヒストグラムを生成する場合にメモリアクセス時間を短縮する手法として以下のような手法が提案されている。
【０００３】
特許文献１では、階層構造のメモリを用いて、速度の速いメモリにデータ領域を読みだして加算する。入力データを加算したのち、速度の速いメモリ上にデータ領域を保持しておく。そして、次の入力データが入力された際に、投票したい領域が速度の速いメモリにあるかを判断し、作業メモリ上にある場合には、続けて投票し、無い場合は入れ替えることで高速化を実現している。
【０００４】
特許文献２では、入力データのデータを１つ保持しておき、次の入力データが保持していたデータと一致する場合に、ビンの値に２を加算する。これにより、メモリへのアクセス回数を減らすことで高速化を実現する。
【０００５】
特許文献３では、複数ある入力データの一部にマスクをかけて、アドレスデータを生成し、生成されたアドレスに従ってヒストグラム生成用のメモリにアクセスし、そのアドレスで特定される個数情報に１を加算することでヒストグラムを生成する。この方法により、複数のヒストグラムへのアクセスを１つのヒストグラムへのアクセスにすることができ、結果としてメモリへのアクセス回数を減らすことが可能となり、高速化を実現できる。
【０００６】
高速なヒストグラム作成の１つの応用先として、信号処理技術分野におけるパターン認識が挙げられる。従来、２つの画像間の類似度を算出するのによく用いられる手法として、類似度を算出したい２つの画像の輝度ヒストグラム、或いはカラーヒストグラムを求め、カラーヒストグラム間の類似度を算出することで、２つの画像の類似判別を行う手法が知られている。
【０００７】
非特許文献１には、周辺隣接画素の輝度値との大小関係をコード化したLBP（Local Binary Pattern）値に対してヒストグラムを算出して、類似判別する手法も提案されている。位置（xc, yc）の画素（注目画素）に対するLBPオペレータとは、以下の式のように定義される。ここで、icは位置（xc, yc）の画素の輝度値、inは近傍8画素のうちインデックス＝ｎの画素の輝度値を示す。ｎは近傍画素のインデックスを示し、位置（xc, yc）に対して左上画素をｎ＝７として、時計回りに１ずつ減少していく。また、以下の（式１）、（式２）はLBPオペレータ算出の1例であり、半径（注目画素と近傍画素との距離）とその半径の円周の分割数とをパラメータとして拡張したものも知られている。
【０００８】
【数１】
2015197897.tif 000003
【０００９】
【数２】
2015197897.tif 000004
【００１０】
（式１）及び（式２）に基づく演算の具体例を図２を用いて説明する。図２の左図に示すように中心位置（xc, yc）にある注目画素（ic＝９６）と周囲の８画素とが配置されていた場合、その大小関係に基づき１或いは０を割り当てる（図２右図）。この与えられた１或いは０を、差分値に対し２値の量子化を行ったという意味で量子化値と呼ぶことにする。またこの量子化値を並べたビット列を２値コードと呼ぶ。さらに、この量子化値に対して、それぞれに２のべき乗の重みを与えて加算することでLBP値を得る。非特許文献１では、このようにして得たLBP値をビンのインデクスとしたヒストグラムを算出して、顔認識処理を行っている。LBP値は、輝度値の大小関係に基づいて算出されるので、単純な輝度値よりも照明変動に頑健であることが期待されている。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開2009-86761号公報
【特許文献２】特開平6-36028号公報
【特許文献３】特開2008-242733号公報
【非特許文献】
【００１２】
【非特許文献１】Timo Ahonen, Abdenour Hadid, and Matti Pietikainen  “Face recognition with local binary patterns, Computer Vision, ” ECCV 2004 Proceedings, Lecture Notes in Computer Science 3021, Springer, 469-481.
【非特許文献２】N. Dalal and B. Triggs，「Histograms of Oriented Gradients for Human Detection」, IEEE Computer Vision and Pattern Recognition, pp. 886-893，2005.
【発明の概要】
【発明が解決しようとする課題】
【００１３】
上記のように、ヒストグラム作成時にメモリアクセス時間を短縮する手法として、背景技術に示したような様々な手法が提案されているが、それぞれの手法には以下のような問題点がある。
【００１４】
特許文献１の手法では、高速化を実現できる場合は、各入力データ値が緩やかに変化するようなデータに限られており、連続する入力データが同一領域に存在しない場合、低速なメモリへのアクセスが行われるため、高速化できない。
【００１５】
特許文献２の手法では、高速化を実現できる場合は、連続する入力データが一致している場合に限られており、前後の入力データが異なれば、高速化できない。
【００１６】
特許文献３の手法では、画像処理などで、正確に投票する必要がない場合に入力データの一部にマスクをかける。これにより入力データのビット情報を削減することで、高速にヒストグラムを作成するが、ビット情報を減らす結果となるため、情報を保持したい場合には使用できない。
【００１７】
本発明は、このような問題に鑑みてなされたものであり、メモリアクセスを介してヒストグラムを作成する場合に要する時間を短縮化するための技術を提供する。
【課題を解決するための手段】
【００１８】
本発明の一様態は、画像中の画素ごとの特徴量を受け取り、第１のメモリよりも高速にアクセス可能な第２のメモリに該特徴量の頻度値が登録されていれば、該頻度値を増加させ、登録されていなければ、該第２のメモリの内容を該第１のメモリに移動させた後で該頻度値を該第１のメモリから該第２のメモリに読み出して増加させることで、画像中の各画素の特徴量のヒストグラムを作成する作成手段と、前記ヒストグラムにおいて頻度値が高いビンが近接するビンとなるように該ヒストグラムにおけるビンの並び替えを行う並び替え手段とを備えることを特徴とする。
【発明の効果】
【００１９】
本発明の構成によれば、メモリアクセスを介してヒストグラムを作成する場合に要する時間を短縮化することができる。
【図面の簡単な説明】
【００２０】
【図１】画像処理装置の機能構成例を示すブロック図。
【図２】ＬＢＰを求めるための処理を説明する図。
【図３】顔画像の各画素位置に規定サイズのウィンドウを配置する処理を模式的に示した図。
【図４】ヒストグラム算出部１０５の構成例を示すブロック図。
【図５】第１のモードが設定された場合に画像処理装置が行う処理のフローチャート。
【図６】選択順及びＬＢＰについて説明する図。
【図７】ステップＳ５０７における処理の詳細を示すフローチャート。
【図８】合計値の一例を示す図。
【図９】ビンと頻度値との関係を説明する図。
【図１０】第２のモードが設定された場合にヒストグラム作成部１０３が行う処理のフローチャート。
【図１１】ステップＳ５０７の処理の前後のヒストグラムを説明する図。
【図１２】ステップＳ５０７における処理の詳細を示すフローチャート。
【図１３】ステップＳ１２０１で作成するテーブルの一例を示す図。
【図１４】第２のモードが設定された場合にヒストグラム作成部１０３が行う処理のフローチャート。
【図１５】マルチコアのプロセッサの構成例を示す図。
【図１６】ステップＳ５０７における処理の詳細を示すフローチャート。
【図１７】第２のモードが設定された場合にヒストグラム作成部１０３が行う処理のフローチャート。
【発明を実施するための形態】
【００２１】
以下、添付図面を参照し、本発明の好適な実施形態について説明する。なお、以下説明する実施形態は、本発明を具体的に実施した場合の一例を示すもので、特許請求の範囲に記載した構成の具体的な実施例の１つである。
【００２２】
［第１の実施形態］
本実施形態では、ヒストグラムを作成し、該ヒストグラムにおいて登場頻度が高いビン（ヒストグラム値が高いビン）がまとまった位置にあるビンとして扱われるように該ヒストグラムのビンを変換する技術の一例について説明する。以下ではその一例として、顔認識に用いるヒストグラムを作成し、該ヒストグラムにおけるビンを上記の目的で変換する技術について説明する。また、以下では説明を簡単にするために、取り扱う画像は何れも、グレースケール画像、いわゆる輝度画像であるとする。
【００２３】
先ず、顔認識用のヒストグラムを作成し、該ヒストグラムにおけるビンを上記の目的で変換する画像処理装置の機能構成例について、図１のブロック図を用いて説明する。図１の画像処理装置１００は、顔認識用のヒストグラムを作成し、該ヒストグラムにおけるビンを上記の目的で変換するモード（第１のモード）と、該ヒストグラムを用いて入力画像に対する顔認識処理を行うモード（第２のモード）と、を有しており、設定されたモードに応じた処理を実行する。
【００２４】
顔検出部１０１は、入力された画像から、該画像中における顔の位置、サイズ、方向等を特定し、特定したこれらの情報を用いて、該画像中における顔の領域のサイズを正規化し、予め定められた方向に顔が傾く（例えば顔を正立させる）ように、該領域内の画像、即ち顔画像を切り出して出力する。なお、画像から、該画像中に写っている顔の領域を検出し、該検出した領域内の画像を顔画像として出力する処理には様々なものがあり、これについては周知の技術であるため、これに係る説明は省略する。
【００２５】
なお、本実施形態では、入力画像中における顔画像を対象とするが、これに限るものではなく、入力画像全体を対象としても良いし、入力画像の代わりに顔画像を入力するようにしても構わない。
【００２６】
スキャンウィンドウ処理部１０２は、顔画像内における各画素位置に規定サイズのウィンドウを配置し、配置したウィンドウ内の各画素の画素値を、後段のヒストグラム作成部１０３に対して送出する。図３は、顔画像内の各画素位置に規定サイズのウィンドウを配置する処理を模式的に示した図である。図３では、顔画像３００において左上隅の画素位置から右下隅の画素位置までの各画素位置に、ラスタスキャン順に３画素×３画素のサイズのウィンドウ３０１を配置している。以下では、ウィンドウのサイズを図３に示す如く３画素×３画素のサイズとして説明するが、Ｍ画素×Ｎ画素（Ｍ，Ｎは３以上の整数）のサイズであっても以下の説明の本質は変わらない。
【００２７】
ヒストグラム作成部１０３は、スキャンウィンドウ処理部１０２から、ウィンドウ内の各画素位置における画素値を受けると、ウィンドウの中心画素位置（図３では斜線で示した画素位置）における画素値と該画素位置の周辺画素位置における画素値との大小関係を表すビット列を作成する。ウィンドウは、顔画像内の各画素位置に配置することになるため、ビット列は、顔画像内の各画素位置について求めることになる。そしてヒストグラム作成部１０３は、作成したそれぞれのビット列に対応するＬＢＰを求め、ＬＢＰをビンとし、該ＬＢＰに対応するビット列の顔画像内における登場頻度をヒストグラム値とするヒストグラムを作成する。そしてヒストグラム作成部１０３は、このヒストグラムにおいて登場頻度が高いビン（ヒストグラム値が高いビン）がまとまった位置にあるビンとして扱われるように該ヒストグラムのビンを変換する。そしてヒストグラム作成部１０３は、このようにしてビンを変換したヒストグラムを、現在設定されているモードに応じて、登録ヒストグラム格納部１０７若しくは相関値算出部１０８に対して出力する。
【００２８】
以下では、このヒストグラム作成部１０３の動作について、より詳細に説明する。図１に示す如く、ヒストグラム作成部１０３は、入力データ作成部１０４、ヒストグラム算出部１０５、再配置処理部１０６、を有する。
【００２９】
入力データ作成部１０４は、スキャンウィンドウ処理部１０２から、ウィンドウ内の各画素位置における画素値を受けると、ウィンドウの中心画素位置における画素値と該画素位置の周辺画素位置における画素値との大小関係を表すビット列を作成する。
【００３０】
ここで、ウィンドウ内の各画素における画素値が図２の左側に示すような状態であったとする。この場合、先ず、中心画素位置に対して左に隣接する画素位置における画素（画素０と呼称する）の画素値ｉ０と中心画素位置における画素の画素値ｉｃとの大小関係を比較する。図２の場合は、ｉ０＞ｉｃであるため、画素０にはビット値「１」を割り当てる。次に、中心画素位置に対して左下の画素位置における画素（画素１と呼称する）の画素値ｉ１と画素値ｉｃとの大小関係を比較する。図２の場合は、ｉ１＜ｉｃであるため、画素１にはビット値「０」を割り当てる。次に、中心画素位置に対して直下の画素位置における画素（画素２と呼称する）の画素値ｉ２と画素値ｉｃとの大小関係を比較する。図２の場合は、ｉ２＜ｉｃであるため、画素２にはビット値「０」を割り当てる。次に、中心画素位置に対して右下の画素位置における画素（画素３と呼称する）の画素値ｉ３と画素値ｉｃとの大小関係を比較する。図２の場合は、ｉ３＞ｉｃであるため、画素３にはビット値「１」を割り当てる。次に、中心画素位置に対して右に隣接する画素位置における画素（画素４と呼称する）の画素値ｉ４と画素値ｉｃとの大小関係を比較する。図２の場合は、ｉ４＞ｉｃであるため、画素４にはビット値「１」を割り当てる。次に、中心画素位置に対して右上の画素位置における画素（画素５と呼称する）の画素値ｉ５と画素値ｉｃとの大小関係を比較する。図２の場合は、ｉ５＞ｉｃであるため、画素５にはビット値「１」を割り当てる。次に、中心画素位置に対して直上の画素位置における画素（画素６と呼称する）の画素値ｉ６と画素値ｉｃとの大小関係を比較する。図２の場合は、ｉ６＜ｉｃであるため、画素６にはビット値「０」を割り当てる。次に、中心画素位置に対して左上の画素位置における画素（画素７と呼称する）の画素値ｉ７と画素値ｉｃとの大小関係を比較する。図２の場合は、ｉ７＜ｉｃであるため、画素７にはビット値「０」を割り当てる。
【００３１】
このような処理により、図２の右側に示す如く、画素０〜画素７に対してビット値「１」若しくはビット値「０」の何れかを割り当てることができる。然るに、画素０のビット値、画素１のビット値、…、画素７のビット値、の順にビット値を並べることで形成される８ビットのビット列「００１１１００１」が、図２の場合において入力データ作成部１０４が作成するビット列、となる。
【００３２】
そして入力データ作成部１０４は、作成したビット列を１０進数で表した値（このビット列を用いて上記の（式１）、（式２）を計算した結果）を、ウィンドウの中心画素位置における画素値と該画素位置の周辺画素位置における画素値との大小関係を表すビット列に対するＬＢＰとして求める。図２の場合、ビット列「００１１１００１」を１０進数で表すと（このビット列を用いて上記の（式１）、（式２）を計算すると）、値「１５６」が得られ、この「１５６」が、図２の場合において入力データ作成部１０４が求めるＬＢＰとなる。
【００３３】
上記の通り、ビット列は、顔画像内の各画素位置について得られるので、該ビット列に対するＬＢＰを求めることで、顔画像内の各画素位置に対するＬＢＰを求めることになる。
【００３４】
ヒストグラム算出部１０５は、入力データ作成部１０４が求めた、顔画像内の各画素位置に対するＬＢＰを用いて、ＬＢＰをビンとし、該ビンに対する頻度値（登場頻度）をヒストグラム値とするヒストグラムを作成する。これにより、顔画像内にどのＬＢＰがどの程度の登場頻度で登場するのかを表すヒストグラムを作成することができる。
【００３５】
ヒストグラム算出部１０５の構成例について、図４のブロック図を用いて説明する。第１のメモリ部４０１は、現段階で求まっている全てのビンの頻度値を格納するためのメモリであり、第２のメモリ部４０２は、第１のメモリ部４０１に格納されている頻度値のうち一部のビンの頻度値を格納するためのメモリである。制御部４００は、ヒストグラムの作成時には、第１のメモリ部４０１に格納されている頻度値のうち、必要となる頻度値を第１のメモリ部４０１から読み出して第２のメモリ部４０２に格納する。
【００３６】
ここで、第１のメモリ部４０１は、第２のメモリ部４０２と比して相対的にデータ容量が大きく且つメモリアクセス速度が遅いメモリであり、例えば、ＤＲＡＭで構成される。また、第２のメモリ部４０２は、第１のメモリ部４０１と比して相対的にデータ容量が小さく且つメモリアクセス速度が速いメモリであり、例えば、ＣＰＵ（例えば制御部４００）内部のキャッシュメモリで構成される。
【００３７】
ここで、第１のメモリ部４０１内のメモリ領域におけるデータを第２のメモリ部４０２に読み出す場合、読み出すデータに加えて、該データに関する、第１のメモリ部４０１上のアドレス情報のタグを付加する。具体的には、データ領域（ビンや頻度値などの実際の処理対象となるデータ）のサイズが３２バイトで、３２ビットアドレスの場合、タグのアドレス部として、個々のデータの共通ビットとなる２７ビットを格納する。このタグとデータ領域の組み合わせをキャッシュラインと呼び、第１のメモリ部４０１と第２のメモリ部４０２とはキャッシュライン単位でデータの転送を行う。なお、この説明におけるデータ領域のサイズやビット数等はあくまでも説明上のものであり、以下の説明がこれらの具体的な数値に限定されるものではない。
【００３８】
ここで、第２のメモリ部４０２には、入力データ作成部１０４から送出されたＬＢＰが入力される。頻度加算部４０３は、この入力されたＬＢＰの頻度値が第２のメモリ部４０２に格納されている場合には、この頻度値に１を加えて更新する。もし、この入力されたＬＢＰの頻度値が第２のメモリ部４０２に格納されていない場合には、制御部４００は、第２のメモリ部４０２に格納されている内容を第１のメモリ部４０１に移動させると共に、この入力されたＬＢＰの頻度値を第１のメモリ部４０１から第２のメモリ部４０２に読み出す。そして、頻度加算部４０３は、この読み出した頻度値に１を加えて更新する。第１のメモリ部４０１、第２のメモリ部４０２へのアクセスには、上記のアドレス情報を用いる。
【００３９】
ヒストグラム算出部１０５は、第１のモードが設定されてる場合には、作成したヒストグラムを再配置処理部１０６に対して送出し、第２のモードが設定されている場合には、作成したヒストグラムを相関値算出部１０８に対して送出する。
【００４０】
図１に戻って、再配置処理部１０６は、ヒストグラム算出部１０５が作成したヒストグラムにおいて、登場頻度が高いビンがまとまった位置にあるビンとして扱われるように該ヒストグラムのビンを変換する。そして再配置処理部１０６は、このようにしてビンを変換したヒストグラムを、登録ヒストグラム格納部１０７に格納する。
【００４１】
相関値算出部１０８は、登録ヒストグラム格納部１０７に格納されているそれぞれのヒストグラム（第２のヒストグラム：顔毎のヒストグラム）について、検査画像（認識したい顔が映っているか否かを調べたい画像）についてヒストグラム算出部１０５が作成したヒストグラム（第１のヒストグラム）と、該第２のヒストグラムと、を用いて、検査画像中における顔を認識する。具体的には、ビン毎に、第１のヒストグラムにおける該ビンの頻度値と、第２のヒストグラムにおける該ビンの頻度値と、の差分値を計算し、それぞれのビンについて求めた差分値の合計値を、第１のヒストグラム及び第２のヒストグラムの相関値として求める。
【００４２】
統合判断部１０９は、相関値算出部１０８がそれぞれの第２のヒストグラムについて求めた相関値と閾値との大小比較を行い、閾値以下となる相関値があれば、検査画像から検出した顔画像は、閾値以下となる相関値を求めた第２のヒストグラムに対応する人物の顔の画像であると判断し、その旨を出力する。一方、統合判断部１０９は、閾値以下となる相関値が１つもなければ、検査画像から検出した顔画像は、登録ヒストグラム格納部１０７に格納されたヒストグラムに対応する顔の何れでもないと判断し、その旨を出力する。もちろん、ヒストグラムを用いて顔認識を行う方法については様々な方法が考えられ、上記の方法に限るものではない。また、統合判断部１０９による出力先や出力形態については特定の出力先、特定の出力形態に限るものではない。
【００４３】
次に、第１のモードが設定された場合に、本実施形態に係る画像処理装置１００が行う処理について、同処理のフローチャートを示す図５を用いて説明する。なお、図５のフローチャートに従った処理を開始する段階では、顔検出部１０１はすでに、入力画像から顔画像を抽出し、該抽出した顔画像をスキャンウィンドウ処理部１０２に対して送出しているものとする。
【００４４】
＜ステップＳ５００＞
スキャンウィンドウ処理部１０２は、顔画像上の画素位置（ｘ、ｙ）（初期値はｘ＝２，ｙ＝２）にウィンドウを配置する。そしてスキャンウィンドウ処理部１０２は、ウィンドウ内の各画素の画素値を、入力データ作成部１０４に対して送出するので、入力データ作成部１０４は、ウィンドウの中心画素位置における画素値と該画素位置の周辺画素位置における画素値との大小関係を表すビット列を作成する。そして入力データ作成部１０４は、この作成したビット列を用いて上記の（式１）、（式２）を計算することで、対応するＬＢＰを特徴量として計算し、計算したＬＢＰをヒストグラム算出部１０５に対して送出する。
【００４５】
＜ステップＳ５０１＞
ヒストグラム算出部１０５内の頻度加算部４０３は、入力データ作成部１０４から送出されたＬＢＰの頻度値が第２のメモリ部４０２に格納されているか否かを判断する。この判断の結果、格納されている場合には、処理はステップＳ５０４に進み、格納されていない場合には、処理はステップＳ５０２に進む。
【００４６】
＜ステップＳ５０２＞
制御部４００は、第２のメモリ部４０２に格納されている全てのデータを第１のメモリ部４０１に移動させる（書き戻す）。第２のメモリ部４０２上には、特徴量をインデックスとするビンのデータと、第１のメモリ部４０１上のアドレス情報などを含むタグが保持されているため、タグに含まれるアドレス情報をもとに第１のメモリ部４０１に書き戻す。
【００４７】
＜ステップＳ５０３＞
制御部４００は、第１のメモリ部４０１から、入力データ作成部１０４から送出されたＬＢＰの頻度値を読み出して第２のメモリ部４０２に格納する（実際には、頻度値だけでなく、アドレス情報などの上記の付帯データも読み出される）。
【００４８】
＜ステップＳ５０４＞
頻度加算部４０３は、第２のメモリ部４０２に格納されている「入力データ作成部１０４から送出されたＬＢＰの頻度値」に１を加算して更新する。
【００４９】
＜ステップＳ５０５＞
スキャンウィンドウ処理部１０２は、顔画像上を移動させたウィンドウの現在位置（ｘ、ｙ）が最終画素位置（顔画像が縦Ｐ画素×横Ｑ画素のサイズを有する場合、ｘ＝Ｑ−２、ｙ＝Ｐ−２）に達したか否かを判断する。この判断の結果、達した場合には、処理はステップＳ５０６に進み、未だ達していない場合には、ｘに１を加算する、若しくはｘ＝Ｑ−２の場合にはｘ＝０にセットすると共にｙに１を加算することでウィンドウの位置を変更し、処理はステップＳ５００に戻る。
【００５０】
＜ステップＳ５０６＞
制御部４００は、上記のステップＳ５０２と同様にして、第２のメモリ部４０２に格納されている全てのデータを第１のメモリ部４０１に移動させる。この時点で、第１のメモリ部４０１には、顔画像について作成した、「ＬＢＰをビンのインデックスとし、該ビンに対する頻度値をヒストグラム値とするヒストグラム」が格納されていることになる。
【００５１】
＜ステップＳ５０７＞
再配置処理部１０６は、ヒストグラム算出部１０５が作成したヒストグラムにおいて、登場頻度が高いビンがまとまった位置にあるビンとして扱われるように該ヒストグラムのビンを変換する。登場頻度が高いビンがまとまった位置にあるビンとして扱われるように該ヒストグラムのビンを変換する処理は、メモリアクセスを効率化し、ヒストグラム作成を高速化することを目的とする処理である。メモリアクセスを効率化し、高速化を実現する並べ替え処理であればどのような処理でも良いが、本実施形態では、頻度値が高いビンを１つのキャッシュラインにまとめることで、キャッシュラインの入れ替え処理の頻度を減らし、第１のメモリ部４０１へのアクセス回数を少なくし、メモリアクセスの効率化を実現する。次に、ステップＳ５０７における処理の詳細について、同処理のフローチャートを示す図７を用いて説明する。
【００５２】
＜ステップＳ７００＞
先ず、中心画素を囲む８画素におけるそれぞれの画素（画素位置）の選択順を１つ選択する。以下では、中心画素位置に対して、左に隣接する画素（位置）をＰ０、左下の画素をＰ１、直下の画素をＰ２、右下の画素をＰ３、右に隣接する画素をＰ４、右上の画素をＰ５、直上の画素をＰ６、左上の画素をＰ７とする。このとき、ステップＳ７００では、例えば、Ｐ７，Ｐ６，Ｐ５，Ｐ１，Ｐ２，Ｐ３，Ｐ０，Ｐ４という選択順を決定する（図６）。
【００５３】
＜ステップＳ７０１＞
６ビットのビット列「００００００」〜「１１１１１１」のそれぞれについて、該ビット列を上位ビット列とし且つ下位ビットが「００」である８ビットのビット列、下位ビットが「０１」である８ビットのビット列、下位ビットが「１０」である８ビットのビット列、下位ビットが「１１」である８ビットのビット列、の４つのビット列を生成する。このようにして、６ビットのビット列「００００００」〜「１１１１１１」のそれぞれについて、下位ビットが４種類のビット列（４つのビット列（８ビット））を生成する。
【００５４】
そして、６ビットのビット列「００００００」〜「１１１１１１」のそれぞれについて、該ビット列を上位ビット列とし且つ下位ビットが「００」である８ビットのビット列に対する頻度値、下位ビットが「０１」である８ビットのビット列に対する頻度値、下位ビットが「１０」である８ビットのビット列に対する頻度値、下位ビットが「１１」である８ビットのビット列に対する頻度値、の合計値を計算する。
【００５５】
そのために先ず、生成したそれぞれの８ビットのビット列が、「中心画素を囲む８画素のそれぞれを上記選択順で選択し、該選択した画素に対するビット値を該選択順で並べたビット列（上記の例では、１ビット目〜８ビット目のそれぞれは、画素位置Ｐ７，Ｐ６，Ｐ５，Ｐ１，Ｐ２，Ｐ３，Ｐ０，Ｐ４のそれぞれにおけるビット値を表している）」であると見なす。このとき、それぞれの８ビットのビット列について、Ｐ０に対応するビット位置のビット値（７ビット目のビット値）を１ビット目に配置し、Ｐ１に対応するビット位置のビット値（４ビット目のビット値）を２ビット目に配置し、Ｐ２に対応するビット位置のビット値（５ビット目のビット値）を３ビット目に配置し、Ｐ３に対応するビット位置のビット値（６ビット目のビット値）を４ビット目に配置し、Ｐ４に対応するビット位置のビット値（８ビット目のビット値）を５ビット目に配置し、Ｐ５に対応するビット位置のビット値（３ビット目のビット値）を６ビット目に配置し、Ｐ６に対応するビット位置のビット値（２ビット目のビット値）を７ビット目に配置し、Ｐ７に対応するビット位置のビット値（１ビット目のビット値）を８ビット目に配置する、というビット並び替えを行うことで、新たな８ビットのビット列を生成する。この新たなビット列は、ヒストグラムにおける何れかのビン（ＬＢＰ）に対応するものであるから、上記のように４つのビット列に対する頻度値の合計値を計算する場合には、この４つのビット列のそれぞれについて上記のビット並び替えを行って生成した新たなビット列に対する頻度値を合計することで計算することができる。
【００５６】
然るに、このような処理により、６ビットのビット列「００００００」〜「１１１１１１」のそれぞれについて、該ビット列を上位ビットとし且つ下位ビットが「００」である８ビットのビット列、下位ビットが「０１」である８ビットのビット列、下位ビットが「１０」である８ビットのビット列、下位ビットが「１１」である８ビットのビット列、の４つのビット列に対する頻度値の合計値を求める。
【００５７】
６ビットのビット列「００００００」〜「１１１１１１」のそれぞれについて求めた合計値の一例を図８に示す。図８において「＊＊」は「００」、「０１」、「１０」、「１１」を表しており、例えば最上段の場合、「００００００００」、「０００００００１」、「００００００１０」、「００００００１１」のそれぞれについて上記の処理により求めた頻度値の合計が「４８」となっている。
【００５８】
＜ステップＳ７０２＞
中心画素を囲む８画素の選択順には複数通りあるが、それら全ての選択順を選択したか否かを判断する。この判断の結果、全ての選択順を選択した場合には、処理はステップＳ７０３に進み、まだ選択していない選択順が残っている場合には、処理はステップＳ７００に戻り、未選択の選択順を選択することになる。
【００５９】
＜ステップＳ７０３＞
最大の合計値を計算したときに用いた「選択順」及びそのときの６ビットのビット列（上記の例では上位ビット列として用いた６ビットのビット列）を不図示のメモリに登録する。
【００６０】
＜ステップＳ７０４＞
ステップＳ７０３でメモリに格納した６ビットにおける各ビット位置のビット値が同値となるような変換方法（ＬＢＰ値の作成方法）を設定する。本実施形態では、ステップＳ７０３でメモリに格納した６ビットにおける各ビット位置のビット値が「０」となるような変換方法を設定する。例えば、６ビット「００１００１」の場合、３ビット目と６ビット目のビット値「１」を反転させて「０」とすればよいので、この場合、変換方法は「３ビット目と６ビット目のビット値を反転させる」となる。ｉ０〜ｉ７を、中心画素を囲む８画素を上記選択順で選択した場合の１番目の画素の画素値〜８番目の画素の画素値、を表すものとすると、６ビット「００１００１」の場合における変換方法とは、以下の（式３）、（式４）に示したものとなる。
【００６１】
【数３】
2015197897.tif 000005
【００６２】
【数４】
2015197897.tif 000006
【００６３】
＜ステップＳ７０５＞
ヒストグラムにおけるそれぞれのビン、即ちＬＢＰを読み出し、該読み出したＬＢＰが表す８ビットのビット列が、「中心画素を囲む８画素のそれぞれを上記選択順（ステップＳ７０３でメモリに格納した選択順）で選択し、該選択した画素に対するビット値を該選択順で並べたビット列（上記の例では、１ビット目〜８ビット目のそれぞれは、画素位置Ｐ７，Ｐ６，Ｐ５，Ｐ１，Ｐ２，Ｐ３，Ｐ０，Ｐ４のそれぞれにおけるビット値を表している）」と見なす。このとき、それぞれの８ビットのビット列について、Ｐ０に対応するビット位置のビット値（７ビット目のビット値）を１ビット目に配置し、Ｐ１に対応するビット位置のビット値（４ビット目のビット値）を２ビット目に配置し、Ｐ２に対応するビット位置のビット値（５ビット目のビット値）を３ビット目に配置し、Ｐ３に対応するビット位置のビット値（６ビット目のビット値）を４ビット目に配置し、Ｐ４に対応するビット位置のビット値（８ビット目のビット値）を５ビット目に配置し、Ｐ５に対応するビット位置のビット値（３ビット目のビット値）を６ビット目に配置し、Ｐ６に対応するビット位置のビット値（２ビット目のビット値）を７ビット目に配置し、Ｐ７に対応するビット位置のビット値（１ビット目のビット値）を８ビット目に配置する、ことで、新たな８ビットのビット列を生成する。そして、この生成したビット列に対して上記の変換方法を適用することで、変換済みビット列（８ビット）を求め、該変換済みビット列から対応するＬＢＰ（変換済みＬＢＰ）を求める。上記の例の場合、新たな８ビットのビット列において、３ビット目と６ビット目のビット値を反転させることで変換済みビット列を求める。
【００６４】
本ステップにおける処理について、図９（ａ）を用いて説明する。００００００００〜１１１１１１１１の各ビン（元のインデックス）の１ビット目〜８ビット目のそれぞれが画素位置Ｐ７，Ｐ６，Ｐ５，Ｐ１，Ｐ２，Ｐ３，Ｐ０，Ｐ４のそれぞれにおけるビット値を表しているとする。このとき、各ビンについて、該ビンのＰ０〜Ｐ７に対応するビットを１ビット目〜８ビット目に再配置したものが「再配置インデックス」である。そしてこの「再配置インデックス」において、３ビット目と６ビット目とを反転させたものが「変換後インデックス」である。このようにして、本ステップでは、ヒストグラムにおける各ビンのＬＢＰを変換する。
【００６５】
＜ステップＳ７０６＞
ステップＳ７０５における処理により、ヒストグラムの各ビンの値（旧ＬＢＰ）は、変換済みＬＢＰに変わってしまったので、変換済みＬＢＰと該変換済みＬＢＰに対応する旧ＬＢＰの頻度値とのセットを、変換済みＬＢＰが小さい順にソートする（換言すれば、頻度値が大きい順にソートする）ことで、ヒストグラムにおける各ビン（及び対応する頻度値）を並び替える。
【００６６】
このような処理により、第２のモード時に頻度値が高くなると予測されるビンが先頭のキャッシュラインにまとまるようにヒストグラムが作成される。なお、第２のモード時に頻度値が高くなると予測されるビンを先頭のキャッシュラインにまとめることに限るものではなく、最後尾のキャッシュラインにまとめるようにしても構わないし、指定アドレスのキャッシュラインにまとめるようにしても構わない。
【００６７】
図９（ａ）の「変換後インデックス」と対応する「頻度値」とのセットを、「変換後インデックス」が表すＬＢＰが小さい順にソートする（換言すれば、頻度値が大きい順にソートする）ことで、図９（ｂ）に示す如く、ヒストグラムにおける各ビンを並び替える。あるヒストグラムについて、ステップＳ５０７における処理を開始する前の状態の一例を図１１（ａ）に示すと共に、ステップＳ５０７における処理を行った後の状態の一例を図１１（ｂ）に示す。
【００６８】
ここで、顔画像のサイズが３２０画素×２４０画素である場合、最大頻度値は７６８００である。よって、必要なこのためにメモリ量は、頻度値が整数型であれば、４Ｂｙｔｅであるので、４ビンをまとめるために必要なメモリ量は１６Ｂｙｔｅである。したがって、キャッシュラインサイズはタグ情報等を含め、１７Ｂｙｔｅ程度あれば良い。ただし、キャッシュラインサイズが大きければ、４つ以上のビンを１つのキャッシュラインにまとめられるように再配置してもよい。
【００６９】
そして、このようにして生成したヒストグラムのデータを登録ヒストグラム格納部１０７に格納する。
【００７０】
＜ステップＳ７０７＞
ステップＳ７０３でメモリに格納した「選択順」及びステップＳ７０４で設定した「変換方法」を、入力データ作成部１０４に通知する。
【００７１】
なお、本実施形態では、第１のモードで頻度値が高いビンを先頭のキャッシュラインにまとめるように記述したが、あらかじめ頻度が高くなるビンが分かっているのであれば、第１のモードで計算するのではなく、あらかじめ手動で決定してしまってもよい。
【００７２】
次に、第２のモードが設定された場合に、ヒストグラム作成部１０３が行う処理について、同処理のフローチャートを示す図１０を用いて説明する。なお、図１０において、図５に示した処理ステップと同じ処理ステップには同じステップ番号を付しており、該処理ステップに係る説明は省略する。
【００７３】
＜ステップＳ１０００＞
スキャンウィンドウ処理部１０２は、検査画像からの顔画像上の画素位置（ｘ、ｙ）（初期値はｘ＝２，ｙ＝２）にウィンドウを配置する。そしてスキャンウィンドウ処理部１０２は、ウィンドウ内の各画素の画素値を、入力データ作成部１０４に対して送出するので、入力データ作成部１０４は、ウィンドウの中心画素位置における画素値と該画素位置の周辺画素位置における画素値との大小関係を表すビット列を作成する。そして入力データ作成部１０４は、上記のステップＳ７０５と同様にして、この作成したビット列を構成する各ビットの並びを、上記のステップＳ７０７で再配置処理部１０６から通知された「選択順」を用いて並び替えて該ビット列を再構成する。そして入力データ作成部１０４は、この再構成したビット列を、上記のステップＳ７０７で再配置処理部１０６から通知された「変換方法」を用いて変換（変換方法が示すビット位置におけるビット値を反転させる）する。そして入力データ作成部１０４は、これらの処理を経て得たビット列を用いて、対応するＬＢＰを特徴量として計算し、計算したＬＢＰをヒストグラム算出部１０５に対して送出する。
【００７４】
第１のモード時に頻度値が高くなったビンが先頭のキャッシュラインにまとまっているため、第２のモード時にも頻度値が高くなると予測されるビンが先頭のキャッシュラインにまとまっている。したがって、ステップＳ５０１の処理で第２のメモリ部４０２に所望の頻度値が保持されている可能性が高くなり、低速な第１のメモリ部４０１へのアクセス頻度を減らすことができる。
【００７５】
このように、もともと、異なるメモリ領域に作成していた頻度値の高いビンを同メモリ領域に保持、つまり連続したデータとして扱うことで、低速なメモリへのアクセス回数を大幅に減らすことが可能となる。
【００７６】
なお、本実施形態では、ＬＢＰのヒストグラム作成について説明したが、ＬＢＰのヒストグラム作成に限られず、非特許文献２で述べられている、画素のエッジ勾配方向のヒストグラム作成などに適用することも可能である。
【００７７】
このように、本実施形態では、画像中の画素ごとの特徴量を受けるたびに、第１のメモリよりも高速にアクセス可能な第２のメモリに該特徴量の頻度値が登録されていれば、該頻度値を増加させ、登録されていなければ、該第２のメモリの内容を該第１のメモリに移動させた後で該頻度値を該第１のメモリから該第２のメモリに読み出して増加させることで、画像中の各画素の特徴量のヒストグラムを作成し、ヒストグラムにおいて比較的頻度値が高いビンが近接するビンとなるように該ヒストグラムにおけるビンの並び替えを行う技術の一例について説明した。
【００７８】
そしてその具体例として、画像中のそれぞれの画素について、該画素の画素値と該画素の周辺画素の画素値との大小関係を表すビット列を前記特徴量として生成し、並び替え順毎及びビットパターン毎に、該並び替え順に従ってビット値の並び替えを行うことで該ビットパターンを含むビット列となる複数種類のビット列のそれぞれの頻度値の合計値を求め、該合計値が最大となる並び替え順及びビットパターンの組み合わせを特定した。そして、ヒストグラムのビンとしてのそれぞれのビット列について、該ビット列を構成する各ビット値を上記特定した並び替え順に従って並び替えたビット列を生成し、該生成したビット列に対して、上記特定したビットパターンを構成するそれぞれのビット値を同値にするための変換と同じ変換を施すことで、該生成したビット列を変換した。そして、変換したそれぞれのビット列に対応する、該ビット列と、ヒストグラムにおいて該ビット列の作成元であるビンに対応する頻度値と、を含むデータセットを、該ビット列の値が小さい順に並び替えた。
【００７９】
［第２の実施形態］
第１の実施形態では、ヒストグラムにおいて登場頻度が高いビン（ヒストグラム値が高いビン）が先頭にまとまったビンとして扱われるように、該ヒストグラムのビンを変換した。本実施形態では、同様の目的を達成するために、インデックスとしてのＬＢＰをキーとしてアドレスを指定するテーブルを用いる技術の一例について説明する。
【００８０】
本実施形態に係る画像処理装置は、第１の実施形態に係る画像処理装置（図１）と同じものである。また、本実施形態において第１のモードで画像処理装置が行う処理は、図５のフローチャートに従ったものとなるが、ステップＳ５０１〜Ｓ５０６における処理は第１の実施形態と同様で、ステップＳ５０７における処理のみが第１の実施形態と異なる。また、第２のモードでヒストグラム作成部１０３が行う処理は、図１０のフローチャートにおいて、ステップＳ５０２，Ｓ５０３，Ｓ５０５，Ｓ５０６における処理は第１の実施形態と同様であるが、ステップＳ１０００，Ｓ５０１，Ｓ５０４における処理のみが第１の実施形態と異なる。以下では、第１の実施形態との差分について重点的に説明し、以下で特に触れない限りは、第１の実施形態と同様であるものとする。
【００８１】
先ず、本実施形態においてステップＳ５０７において行われる処理について、同処理のフローチャートを示す図１２を用いて説明する。
【００８２】
＜ステップＳ１２００＞
再配置処理部１０６は、ヒストグラム算出部１０５が作成して第１のメモリ部４０１に格納したヒストグラムにおけるＬＢＰと頻度値とを含むデータセットを、頻度値が高い順にソートすることで、第１のメモリ部４０１内に格納されているヒストグラムを更新する。
【００８３】
＜ステップＳ１２０１＞
再配置処理部１０６は、第１のメモリ部４０１におけるそれぞれのデータセットを登録したテーブルを作成する。作成したテーブルの一例を図１３に示す。図１３では、データセット中のＬＢＰ（ビット列で表している）と、対応するアドレス（第１のメモリ部４０１におけるアドレス）と、の対応関係を示している。この「アドレス」は、上記の通り、データセットに含められているものである。
【００８４】
＜ステップＳ１２０２＞
再配置処理部１０６は、第１のメモリ部４０１に格納されているヒストグラムを、登録ヒストグラム格納部１０７に登録する。
【００８５】
＜ステップＳ１２０３＞
再配置処理部１０６は、ステップＳ１２０１で作成したテーブルを、ヒストグラム算出部１０５に対して送出する。
【００８６】
次に、第２のモードでヒストグラム作成部１０３が行う処理について、同処理のフローチャートを示す図１４を用いて説明する。
【００８７】
＜ステップＳ１４００＞
スキャンウィンドウ処理部１０２は、検査画像からの顔画像上の画素位置（ｘ、ｙ）（初期値はｘ＝２，ｙ＝２）にウィンドウを配置する。そしてスキャンウィンドウ処理部１０２は、ウィンドウ内の各画素の画素値を、入力データ作成部１０４に対して送出するので、入力データ作成部１０４は、ウィンドウの中心画素位置における画素値と該画素位置の周辺画素位置における画素値との大小関係を表すビット列を作成する。そして入力データ作成部１０４は、このビット列を用いて、対応するＬＢＰを特徴量として計算し、計算したＬＢＰをヒストグラム算出部１０５に対して送出するので、ヒストグラム算出部１０５は、このＬＢＰを受け取る。
【００８８】
＜ステップＳ１４０１＞
ヒストグラム算出部１０５は、再配置処理部１０６から受けたテーブルを参照して、入力データ作成部１０４から受けたＬＢＰに対応するアドレスを、該テーブルから取得する。
【００８９】
＜ステップＳ１４０２＞
ヒストグラム算出部１０５は、ステップＳ１４０１でテーブルから取得したアドレスを含むデータセットが第２のメモリ部４０２に格納されているか否かを判断する。この判断の結果、格納されている場合には、処理はステップＳ１４０３に進み、格納されていない場合には、処理はステップＳ５０２に進む。
【００９０】
＜ステップＳ１４０３＞
ヒストグラム算出部１０５は、入力データ作成部１０４から受けたＬＢＰに対応するアドレスに対応する（該アドレスと同じデータセット中の）頻度値に１を加算して該頻度値を更新する。
【００９１】
このように、検査画像から取得したヒストグラムにおけるビンの並びを、登録ヒストグラム格納部１０７に格納したヒストグラムにおけるビンの並び（各ビンが頻度値が高いビンから降順に並んでいる）に合わせる。然るに同様の目的を達成することができるのであれば、他の方法を用いても構わない。
【００９２】
［第３の実施形態］
本実施形態では、第２の実施形態に係る技術を、マルチコアのプロセッサを用いて実施した場合について説明する。もちろん、以下の説明の本質は、コア数が２の場合に限ったものではなく、コア数が３以上であっても構わない。
【００９３】
本実施形態に適用可能なマルチコアのプロセッサの構成例を図１５に示す。本実施形態では、ヒストグラム算出部１０５が図１５の構成を有するものとして説明する。図１５に例示したＧＰＵやＣＰＵといったプロセッサ１５００は、演算処理を行う２つのプロセッサエレメント１５０１と、２つのキャッシュメモリ１５０２と、ローカルメモリ１５０３と、を有する。キャッシュメモリ１５０２のそれぞれは、対応する１つのプロセッサエレメントからのみアクセス可能であり、図１５の場合、左側のキャッシュメモリ１５０２には左側のプロセッサエレメント１５０１のみがアクセス可能であり、右側のキャッシュメモリ１５０２には右側のプロセッサエレメント１５０１のみがアクセス可能である。キャッシュメモリ１５０２、ローカルメモリ１５０３のそれぞれは、図４に示した第２のメモリ部４０２、第１のメモリ部４０１の一例であり、然るにキャッシュメモリ１５０２は第１，２の実施形態と同様に、キャッシュライン単位、つまり一定のメモリ領域で、ローカルメモリ１５０３との間でデータ転送を行う。また、キャッシュメモリ１５０２はローカルメモリ１５０３上のアドレス情報をタグとして保持する。
【００９４】
本実施形態において第１のモードで画像処理装置が行う処理は、図５のフローチャートに従ったものとなるが、ステップＳ５０１〜Ｓ５０６における処理は第１の実施形態と同様で、ステップＳ５０７における処理のみが第１の実施形態と異なる。また、第２のモードでヒストグラム作成部１０３が行う処理は、図１０のフローチャートにおいて、ステップＳ５０２，Ｓ５０３，Ｓ５０５，Ｓ５０６における処理は第１の実施形態と同様であるが、ステップＳ１０００，Ｓ５０１，Ｓ５０４における処理のみが第１の実施形態と異なる。以下では、第１の実施形態との差分について重点的に説明し、以下で特に触れない限りは、第１の実施形態と同様であるものとする。
【００９５】
先ず、本実施形態においてステップＳ５０７において行われる処理について、同処理のフローチャートを示す図１６を用いて説明する。
【００９６】
＜ステップＳ１６００＞
再配置処理部１０６は、ヒストグラム算出部１０５が作成して第１のメモリ部４０１に格納したヒストグラムにおけるＬＢＰと頻度値とを含むデータセットを、頻度値が高い順にソートすることで、第１のメモリ部４０１内に格納されているヒストグラムを更新する。なお、ヒストグラム算出部１０５は、２つのプロセッサエレメントを用いてヒストグラムを作成しても構わないし、何れか一方のみのプロセッサエレメントを用いてヒストグラムを作成しても構わない。
【００９７】
＜ステップＳ１６０１＞
再配置処理部１０６は、ステップＳ１６００で更新したヒストグラムにおいて、先頭のビンから（例えば図１３の最上段から）終端のビン（例えば図１３の最下段まで）までの各ビンのうち、一方のプロセッサエレメント１５０１に割り当てるビンを決定し、該決定したビンを表す情報と、該決定したビンのローカルメモリ１５０３におけるアドレスと、該一方のプロセッサエレメント１５０１を表す情報（ここでは一例として該一方のプロセッサエレメント１５０１のコア番号とする）と、を関連づけてテーブル（対応情報）に登録する。
【００９８】
なお、一方のプロセッサエレメント１５０１には、該一方のプロセッサエレメント１５０１に対応するキャッシュメモリ１５０２に保持可能なビン数を割り当てる。例えば、１つのビンに必要なメモリ量が第１，２の実施形態と同様に４Ｂｙｔｅであった場合、キャッシュメモリサイズが３２Ｂｙｔｅならば、タグのメモリ領域が必要なため、一方のプロセッサエレメント１５０１が担当するビンの数は７つである。
【００９９】
＜ステップＳ１６０２＞
再配置処理部１０６は、ステップＳ１６００で更新したヒストグラムにおける各ビンのうち一方のプロセッサエレメント１５０１に割り当てられなかった残りのビンを表す情報と、該残りのビンのローカルメモリ１５０３におけるアドレスと、該他方のプロセッサエレメント１５０１を表す情報（ここでは一例として該他方のプロセッサエレメント１５０１のコア番号とする）と、を関連づけてテーブル（対応情報）に登録する。
【０１００】
＜ステップＳ１６０３＞
再配置処理部１０６は、第１のメモリ部４０１に格納されているヒストグラムを、登録ヒストグラム格納部１０７に登録する。
【０１０１】
＜ステップＳ１６０４＞
再配置処理部１０６は、ステップＳ１６０１及びステップＳ１６０２で作成したテーブル（対応情報）を、ヒストグラム算出部１０５に対して送出する。
【０１０２】
次に、第２のモードでヒストグラム作成部１０３が行う処理について、同処理のフローチャートを示す図１７を用いて説明する。
【０１０３】
＜ステップＳ１７００＞
スキャンウィンドウ処理部１０２は、検査画像からの顔画像上の画素位置（ｘ、ｙ）（初期値はｘ＝２，ｙ＝２）にウィンドウを配置する。そしてスキャンウィンドウ処理部１０２は、ウィンドウ内の各画素の画素値を、入力データ作成部１０４に対して送出するので、入力データ作成部１０４は、ウィンドウの中心画素位置における画素値と該画素位置の周辺画素位置における画素値との大小関係を表すビット列を作成する。そして入力データ作成部１０４は、このビット列を用いて、対応するＬＢＰを特徴量として計算し、計算したＬＢＰをヒストグラム算出部１０５に対して送出するので、ヒストグラム算出部１０５における２つのプロセッサエレメント１５０１は、このＬＢＰを受け取る。
【０１０４】
＜ステップＳ１７０１＞
一方のプロセッサエレメント１５０１は、ステップＳ１６０１で作成したテーブルに、ビンを表す情報として、入力データ作成部１０４から受けたＬＢＰを表す情報が登録されているか否かを判断する。一方、他方のプロセッサエレメント１５０１は、ステップＳ１６０２で作成したテーブルに、ビンを表す情報として、入力データ作成部１０４から受けたＬＢＰを表す情報が登録されているか否かを判断する。
【０１０５】
それぞれのプロセッサエレメント１５０１による判断により、入力データ作成部１０４から受けたＬＢＰを表す情報が、ステップＳ１６０１で作成したテーブルに登録されているのか、それともステップＳ１６０２で作成したテーブルに登録されているのかを判断することができる。
【０１０６】
そして、入力データ作成部１０４から受けたＬＢＰを表す情報が、ステップＳ１６０１で作成したテーブルに登録されている場合には、一方のプロセッサエレメント１５０１は、該テーブルから、該ＬＢＰに対応するアドレス及びコア番号を取得する。また、入力データ作成部１０４から受けたＬＢＰを表す情報が、ステップＳ１６０２で作成したテーブルに登録されている場合には、他方のプロセッサエレメント１５０１は、該テーブルから、該ＬＢＰに対応するアドレス及びコア番号を取得する。
【０１０７】
以下では、一方のプロセッサエレメント１５０１及び他方のプロセッサエレメント１５０１のうち、対応するアドレス及びコア番号を取得したプロセッサエレメントを着目プロセッサエレメント１５０１と呼称する。
【０１０８】
＜ステップＳ１７０２＞
着目プロセッサエレメント１５０１は、ステップＳ１７０１でテーブルから取得したアドレスを含むデータセットが、ステップＳ１７０１でテーブルから取得したコア番号に対応するキャッシュメモリ１５０２（着目プロセッサエレメント１５０１に対応するキャッシュメモリ１５０２）に格納されているか否かを判断する。この判断の結果、格納されている場合には、処理はステップＳ１７０３に進み、格納されていない場合には、処理はステップＳ５０２に進む。
【０１０９】
なお、ステップＳ５０２，Ｓ５０３では、ステップＳ１７０１でテーブルから取得したコア番号に対応するキャッシュメモリ１５０２を第２のメモリ部４０２として用いるものとする。
【０１１０】
＜ステップＳ１７０３＞
着目プロセッサエレメント１５０１は、入力データ作成部１０４から受けたＬＢＰに対応するアドレスに対応する（該アドレスと同じデータセット中の）頻度値に１を加算して該頻度値を更新する。
【０１１１】
このように、本実施形態によれば、算出するヒストグラムにおいて、頻度の高いビンは１つ目のプロセッサエレメントで処理され、頻度の低い残りのビンは２つ目のプロセッサエレメントで処理されることとなる。ここで、１つ目のプロセッサエレメントに注目すると、メモリアクセス回数が多い、すなわち頻度値の高いビンはキャッシュメモリとローカルメモリとの間のデータ転送は、読み書き各一回のみ行われるだけであり、ステップＳ５０２、Ｓ５０３の処理は行われない。また、２つ目のプロセッサエレメントに注目すると、キャッシュメモリとローカルメモリとの間のデータ転送は行われるものの、ビンへのアクセス頻度が少ないため、影響が少ないと言える。よって、本実施形態によれば、低速なメモリへのアクセス回数を減らし、アクセス時間の短縮が可能となる。
【０１１２】
また、コア数が３以上である場合におけるそれぞれのプロセッサエレメント１５０１へのビンの割り当て方法については様々な方法が考えられ、特定の方法に限るものではない。
【０１１３】
［第４の実施形態］
第１の実施形態では、ステップＳ７００〜Ｓ７０２の処理によって、６ビットのビット列「００００００」〜「１１１１１１」のそれぞれについて、該ビット列を上位ビットとし且つ下位ビットが「００」である８ビットのビット列、下位ビットが「０１」である８ビットのビット列、下位ビットが「１０」である８ビットのビット列、下位ビットが「１１」である８ビットのビット列、の４つのビット列に対する頻度値の合計値を求めていた。
【０１１４】
本実施形態では、最大頻度のビンが先頭キャッシュラインに必ず含まれるようにする。そのために本実施形態では、ステップＳ７００〜Ｓ７０２では、ビット列００００００００〜１１１１１１１１の代わりに、ヒストグラムにおいて最大の頻度値に対応するビンにおけるビット列（最大頻度値ビット列）を使用する。具体的には、最大頻度値ビット列から上位６ビットを抽出し、該抽出した６ビットを上位ビットとし且つ下位ビットが「００」である８ビットのビット列に対する頻度値、下位ビットが「０１」である８ビットのビット列に対する頻度値、下位ビットが「１０」である８ビットのビット列に対する頻度値、下位ビットが「１１」である８ビットのビット列に対する頻度値、の合計値を、Ｐ０〜Ｐ７の全ての選択順について計算する。そしてステップＳ７０３では、最大の合計値を計算したときに用いた「選択順」及びこの６ビットのビット列を不図示のメモリに登録する。
【０１１５】
すなわち、画像中のそれぞれの画素について、該画素の画素値と該画素の周辺画素の画素値との大小関係を表すビット列を前記特徴量として生成し、ヒストグラムにおいて最大の頻度値に対応するビット列中のビットパターンを対象ビットパターンとし、並び替え順毎に、該並び替え順に従ってビット値の並び替えを行うことで該対象ビットパターンを含むビット列となる複数種類のビット列のそれぞれの頻度値の合計値を求め、該合計値が最大となる並び替え順を特定する。そして、ヒストグラムのビンとしてのそれぞれのビット列について、該ビット列を構成する各ビット値を上記特定した並び替え順に従って並び替えたビット列を生成し、該生成したビット列に対して、対象ビットパターンを構成するそれぞれのビット値を同値にするための変換と同じ変換を施すことで、該生成したビット列を変換する。そして、変換したそれぞれのビット列に対応する、該ビット列と、ヒストグラムにおいて該ビット列の作成元であるビンに対応する頻度値と、を含むデータセットを、該ビット列の値が小さい順に並び替える。
【０１１６】
また、第２の実施形態では、ステップＳ１２００において頻度値をキーとしてデータセットをソートしていたが、ヒストグラムにおいて閾値を超えたビンから順にアドレスを割り当てるようにしても構わない。
【０１１７】
また、図１に示した各機能部は全てをハードウェアで構成しても良いが、メモリとして動作する機能部をハードディスクやＲＡＭで構成し、それ以外の機能部をソフトウェア（コンピュータプログラム）で実装しても良い。その場合、このハードディスクやＲＡＭを有し、且つこのコンピュータプログラムを実行可能なプロセッサを有するコンピュータであれば、上記の画像処理装置に適用することができる。
【０１１８】
（その他の実施例）
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【符号の説明】
【０１１９】
１０５：ヒストグラム算出部  １０６：再配置処理部
【図１】
2015197897.tif 000007
【図２】
2015197897.tif 000008
【図３】
2015197897.tif 000009
【図４】
2015197897.tif 000010
【図５】
2015197897.tif 000011
【図６】
2015197897.tif 000012
【図７】
2015197897.tif 000013
【図８】
2015197897.tif 000014
【図９】
2015197897.tif 000015
【図１０】
2015197897.tif 000016
【図１１】
2015197897.tif 000017
【図１２】
2015197897.tif 000018
【図１３】
2015197897.tif 000019
【図１４】
2015197897.tif 000020
【図１５】
2015197897.tif 000021
【図１６】
2015197897.tif 000022
【図１７】
2015197897.tif 000023