画像処理装置、画像データの処理方法およびプログラム
【課題】入力画像データに対し、複数の弱判別器を直列に接続して構成される判別処理を効率良く行う技術を提供すること。
【解決手段】画像処理装置は、複数の部分画像のそれぞれに検出の対象となる特定パターンが含まれるか否かの判別処理の実行を指示する指示部と、指示部の指示に従って、判別処理の継続または終了を判定するための閾値を含む、判別処理のためのパラメータを用いて、複数の部分画像のそれぞれについて判別処理を行う演算部と、演算結果から、複数の部分画像のそれぞれに対する判別処理が終了したか否かを判定する判定部と、を備える。指示部は、判定部により、複数の部分画像の少なくとも1つに対して判別処理が終了していないと判定された場合、終了していないと判定された部分画像に対する判別処理の実行を再度指示し、再度指示に従って、演算部は、異なるパラメータを用いて、終了していないと判定された部分画像についての判別処理を実行する。
【解決手段】画像処理装置は、複数の部分画像のそれぞれに検出の対象となる特定パターンが含まれるか否かの判別処理の実行を指示する指示部と、指示部の指示に従って、判別処理の継続または終了を判定するための閾値を含む、判別処理のためのパラメータを用いて、複数の部分画像のそれぞれについて判別処理を行う演算部と、演算結果から、複数の部分画像のそれぞれに対する判別処理が終了したか否かを判定する判定部と、を備える。指示部は、判定部により、複数の部分画像の少なくとも1つに対して判別処理が終了していないと判定された場合、終了していないと判定された部分画像に対する判別処理の実行を再度指示し、再度指示に従って、演算部は、異なるパラメータを用いて、終了していないと判定された部分画像についての判別処理を実行する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、画像処理装置、画像データの処理方法およびプログラムに関する。特に、画像中に写っている特定の被写体を検出する技術に関する。
【背景技術】
【0002】
画像から特定の被写体パターンを自動的に検出する画像処理方法は有用であり、例えば、人間の顔の判定に利用することができる。このような方法は、通信会議、マン・マシン・インタフェース、セキュリティ、人間の顔を追跡するためのモニタ・システム、画像圧縮等の多くの分野で使用することができる。このような画像中から顔を検出する技術としては、非特許文献1に各種方式が挙げられている。
【0003】
特に、実行速度と検出率の高さとから、非特許文献2に掲載されるViolaらのAdaBoostベースの手法は、顔検出研究において広く使用されている。AdaBoostベースの手法は、それぞれ異なる単純な判別処理のフィルタを直列状に連結し、判別処理の途中で非顔領域であるとわかった時点で、後続の判別処理を打ち切ることで、判別処理の高速化を行っている。この判別処理をさらに高速化するために、判別処理の並列化やパイプライン化が考えられるが、画像データなどの内容に応じて処理の打ち切りが発生するため、判別処理のスケジュールが困難であるという課題がある。特に、判別処理をハードウェアで実現する場合には、制限されたリソースをより高い効率で活用して判別処理を実現することが求められるので、さらにこのスケジュールの困難さが大きな課題となっている。
【0004】
課題についてより具体的に説明するために、以下ではBoostingアルゴリズムを応用した顔検出処理を例として説明を行う。図2は、Boostingアルゴリズムを応用した顔検出処理のアルゴリズムを説明する図である。図2において、201は入力された画像データを構成する部分画像であるウィンドウ画像である。ウィンドウ画像201は、後述する弱判別器210〜250が参照する画像領域含む。
【0005】
弱判別器210は、ウィンドウ画像201の一部もしくは全部の画素値を参照し、その画素値に対して予め定められた演算処理を行い、ウィンドウ画像201が、検出対象オブジェクト(例えば、人間の顔領域)を含むか否かを判定する。この予め定めておいた演算に用いる係数等のパラメータは、実際の検出処理の前に機械学習により決定されている。
【0006】
弱判別器211〜250も弱判別器210と同様の演算処理が可能であるが、好ましくは弱判別器210が参照するウィンドウ画像201の参照位置および参照範囲、弱判別器210の演算に用いる係数等のパラメータがそれぞれ異なるよう構成する。弱判別器210〜250はウィンドウ画像201の参照位置や範囲、また演算に用いる係数等のパラメータが異なるだけで、弱判別器210の処理と概略同じ処理を実行することが可能である。図2において、N個の弱判別器(弱判別器210〜弱判別器250)は直列状に接続されている。弱判別器210〜弱判別器250のそれぞれは、演算結果に応じてPASSかNGの判定を行う。そして、0番目の弱判別器210から処理を行い、判定結果がPASSであれば次の弱判別器211が判定処理を行う、というように順次処理を進める。そうして、最終弱判別器である弱判別器250の判定結果もPASSであったら、ウィンドウ画像201は検出対象のオブジェクト(顔)を含むと判定する。一方で、N個の弱判別器のいずれかの弱判別器における判定処理でNGと判定された場合は、以降の処理は打切られ、ウィンドウ画像201には検出の対象オブジェクト(顔)が含まれないと判定する。
【0007】
図3は、各弱判別器の出力がPASS/NGの2値ではなく、各弱判別器の出力がOK(部分画像は検出対象オブジェクト(顔)を含む)/PASS/NGの3通りの出力をする場合の例である。図3において、図2と同じものについては同じ参照番号を付して説明を省略する。弱判別器310〜350が図2の弱判別器210〜250と異なるのは、先に述べたように出力が3値である点である。N個の弱判別器310〜350のいずれかの弱判別器における判定処理で、 部分画像が検出対象オブジェクト(顔)を含むことが判定された場合(判定結果「OK」)、後続の判定処理を行う必要がないため、判定処理は打ち切りとなる。この点において、図2で説明した弱判別器と相違する。N個の弱判別器310〜350におけるその他の処理は、図2で説明した弱判別器と同様である。
【0008】
顔検出処理は、与えられた画像の一部分に対して、弱判別器における判定処理を繰り返し行うことで実現される。この時、直列状に並んだ弱判別器列の序盤でなるべく多くの判定結果を確定(OKもしくはNG)できるように構成すれば、全体として弱判別器の処理回数の期待値を小さく抑えることができる。また、全体として弱判別器の演算量の削減や処理速度の向上が期待できる。
【先行技術文献】
【非特許文献】
【0009】
【非特許文献1】M.H.Yang, D.J.Kriegman and N.Ahuja. “Detecting Faces in Images:A Survey,” IEEE Trans. on PAMI, vol.24, no.1, pp.34-58, January, 2002.
【非特許文献2】P.Viola and M. Jones. “Robust Real-time Object Detection,” in Proc. of IEEE Workshop SCTV, July, 2001.
【発明の概要】
【発明が解決しようとする課題】
【0010】
しかしながら、アルゴリズム的な観点では上記のようにして平均演算量を削減できる一方、これをさらに高速化するためにパイプライン処理化する場合、各ウィンドウに対する処理量が不均一なため、処理のスケジュールが難しいという課題がある。
【課題を解決するための手段】
【0011】
本発明は、入力画像データに対し、複数の弱判別器を直列に接続して構成される判別処理を効率良く行うことを可能にする技術を提供する。
【0012】
本発明の一つの側面にかかる画像処理装置は、複数の部分画像のそれぞれに検出の対象となる特定パターンが含まれるか否かの判別処理の実行を指示する指示手段と、
前記指示手段の前記指示に従って、前記判別処理の継続または終了を判定するための閾値を含む、前記判別処理のためのパラメータを用いて、前記複数の部分画像のそれぞれについて前記判別処理を行う演算手段と、
前記演算手段による演算結果から、前記複数の部分画像のそれぞれに対する判別処理が終了したか否かを判定する判定手段と、を備え、
前記指示手段は、前記判定手段により、前記複数の部分画像の少なくとも1つに対して前記判別処理が終了していないと判定された場合、当該終了していないと判定された部分画像に対する判別処理の実行を再度指示し、
当該再度指示に従って、前記演算手段は、前記パラメータとは異なるパラメータを用いて、当該終了していないと判定された部分画像についての判別処理を実行することを特徴とする。
【発明の効果】
【0013】
本発明によれば、入力画像データに対し、複数の弱判別器を直列に接続して構成される判別処理を効率良く行うことが可能になる。
【図面の簡単な説明】
【0014】
【図1】実施形態にかかる画像処理装置の構成例を示す図。
【図2】Boostingアルゴリズムを応用した検出処理の例を説明する図。
【図3】Boostingアルゴリズムを応用した検出処理の例を説明する図。
【図4】分岐構造を持つ、Boostingアルゴリズムを応用した検出処理の例を説明する図。
【図5】指示部の処理の流れを説明する図。
【図6】指示部の処理における初期化処理の流れを説明する図。
【図7】指示部の処理における指示部状態更新処理の流れを説明する図。
【図8】指示部の処理におけるジョブ投入処理の流れを説明する図。
【図9】指示部の処理におけるメモリ態更新処理の流れを説明する図。
【図10】判定部の処理の流れを説明する図。
【図11】ウィンドウ画像の例を示す図。
【図12】弱判別器の処理を例示する図。
【図13】弱判別器の処理を例示する図。
【図14】弱判別器の処理を例示する図。
【図15】弱判別器の処理を例示する図。
【図16】指示部、演算部、パラメータ供給部、メモリおよび判定部の間の動作の流れを示す図。
【図17】判定部の処理における判定部状態更新処理の流れを説明する図。
【図18】ウィンドウ画像に対する判別処理の実行順を例示する図。
【発明を実施するための形態】
【0015】
(第1実施形態)
本発明の実施形態を、図面を参照して詳細に説明する。図1は、実施形態にかかる画像処理方法を実現する画像処理装置の概略構成を示す図である。図1において、指示部101は、部分画像のそれぞれに対する画像処理のスケジュール管理を行う。指示部101は、外部からの制御入力(画像処理の開始指示)を受け取り、画像処理が開始される。指示部101は、メモリ102との間でデータの入出力が可能である。また、指示部101は、演算部103へのデータ出力が可能であり、判定部104からのデータ入力が可能なように構成されている。
【0016】
メモリ102は、例えば、図2におけるウィンドウ画像201を複数保持することが可能である。メモリ102は、外部に対して画像データの要求を送信し、また、画像データを取得し、取得した画像データを保持することができる。さらに、メモリ102は、指示部101からの指示を受信して、応答が返せるように構成されている。また、メモリ102は、演算部103からの画像データの要求受信と、演算部103へ要求された画像データの出力が可能なように構成されている。メモリ102は検出対象の画像データの全てを同時に格納できる記憶容量を有するものであってもよいが、検出対象の画像データの全体を保持するための記憶容量は必ずしも必要ない。メモリ102は、複数のウィンドウ画像を保持できればよく、例えば、検出対象の画像データをバンド状もしくはブロック状に分割した部分画像を格納できるような記憶容量を有すればよい。また、メモリ102は、指示部101からの指示に応じて、メモリ102に保持している画像データの一部もしくは全部を入れ替えることが可能なように構成されている。その場合、メモリ102は、指示部101からの指示に応じて、外部に対して画像データの要求を送信し、画像データの受信(取得)が完了した時点で指示部101に対して返答するように構成されている。
【0017】
演算部103は、少なくとも1つの弱判別器の処理を実行可能なように構成されている。また、演算部103は、メモリ102に画像データの要求を送信し、メモリ102から送信された画像データ(複数の部分画像データ)を参照できるように構成されている。パラメータ供給部105は、弱判別器が判別処理に用いるパラメータを保持しており、演算部103からの要求に応じて、パラメータを送信できるように構成されている。演算部103は、パラメータの要求をパラメータ供給部105に送信し、パラメータ供給部105から送信されたパラメータを参照できるように構成されている。判定部104は、演算部103の出力を受信して判定を行い、判定結果を出力する。この際、判定結果は指示部101にも送信される。
【0018】
メモリ102が保持する複数のウィンドウ画像を図11の参照により例示的に説明する。メモリ領域1110は、演算部103がメモリ102から参照可能な領域を表しており、メモリ領域1110の内部にある最も小さな矩形領域1111は各画素データを表している。1101〜1105はメモリ領域1110に設定された複数のウィンドウ画像を表しており、例えば、ウィンドウ画像1101はメモリ領域1110の位置(0、0)から幅10画素、高さ10画素の領域にある。また、同様にウィンドウ画像1102はメモリ領域1110の位置(0、2)から幅、高さともに10画素の領域にある。ウィンドウ画像1103はメモリ領域1110の位置(0、4)から幅、高さともに10画素の領域にある。ウィンドウ画像1104はメモリ領域1110の位置(0、6)から幅、高さともに10画素の領域にある。そして、ウィンドウ画像1105はメモリ領域1110の位置(0、8)から幅、高さともに10画素の領域である。ウィンドウ画像1101〜1105は、図2におけるウィンドウ画像201に対応するが、それぞれ原画像の位置が異なるウィンドウ画像である。
【0019】
図16は、図1で説明した、指示部101、演算部103、パラメータ供給部105、メモリ102、および判定部104の処理の流れを説明するシーケンス図である。対象オブジェクトの検出処理は、例えば、図2で説明したように、1つのウィンドウ画像に対してN個の弱判別器を順次適用して、N個全ての弱判別器を通過(PASSと判定された)場合、ウィンドウ画像は対象オブジェクトを含むと判定する。あるいは、いずれかの弱判別器でNGと判定された場合、その時点で後続する弱判別器の処理を取りやめ、ウィンドウ領域が対象オブジェクトを含まないと判定する。N個の弱判別器のそれぞれは異なるパラメータを処理に使用するが、処理の内容は同一である。メモリは同時に複数のウィンドウ画像を保持している。
【0020】
指示部101は、外部から画像処理の開始の指示を受信すると(S1601)、メモリ102に対して画像更新要求を送信する。メモリ102は、指示部101から画像更新要求を受信すると、外部に対して画像データを要求し、画像データの要求に対して外部から送信された画像データを蓄積する。複数のウィンドウ画像を構成するのに十分なデータ量を蓄積した時点で指示部101に応答(OK)を返す。
【0021】
指示部101は演算部103に対して判別処理の実行を指示する(ジョブ指示)。指示部101は演算部103に対し、判別処理の対象となるウィンドウ画像や弱判別器に対して、識別情報(ID)を付与する。1つのウィンドウ画像に対する1つの弱判別器の処理を、以下、判別ジョブ、もしくは単にジョブと呼ぶことにする。判別ジョブの指示は、ウィンドウ画像の識別情報(ID)と弱判別器の識別情報(ID)との対を演算部103に対して送信することで行う。指示部101はステップS1602、S1603、S1604において、次に処理すべき判別ジョブを決定し、演算部103に判別ジョブの指示を送信する。ステップS1602〜S1604の判別ジョブの生成については後述する。
【0022】
演算部103は、指示部101からの指示を受け取り、パラメータ供給部105にパラメータの要求を送信する。パラメータには、後続の演算処理ステップS1611で用いる係数、判別処理の継続(PASS)または打ち切り(終了:NG)の判定を行うための閾値や、また、ウィンドウ画像内の参照領域の位置や大きさに関する情報などが含まれる。演算部103は、パラメータ供給部105から送信されたパラメータを受信すると、そのパラメータに従いメモリ102に対して演算処理に必要な画像データを参照するための画像データの要求を送信する。演算部103はメモリ102から送信された画像データを受信して、受信した画像データと、先に受信したパラメータとを用いて、予め定められた演算を行い(S1611)、その演算結果(PASS/NG)を判定部104に送信する。
【0023】
ステップS1612とステップS1613は、ステップS1611と異なる判別ジョブに対する演算処理である。
【0024】
ステップS1612、S1613における判別ジョブはウィンドウ画像の識別情報(ID)と弱判別器の識別情報(ID)との少なくとも一方が異なる。それに応じてパラメータ要求や画像データの要求がそれぞれ行われるが、処理の内容はステップS1611と同じである。
【0025】
判定部104は、ステップS1611の演算結果を演算部103から受け取って、判定処理(S1621)を行い、その結果を指示部101に送信する。判定処理については後述する。尚、ステップS1622とステップS1623は、判定対象の判別ジョブが異なるだけで同じ処理であり、判定処理が完了すると、ステップS1621と同様に判別結果は指示部101に送信される。
【0026】
指示部101の判別ジョブの指示もしくは演算部103の演算結果の送信と、判定部104の判定結果の送信はタイミングがずれているようになっているが、それは表記上の都合で、実際は概略同じタイミングであってよい。例えば、ステップS1604のジョブ生成の結果についての判別ジョブ指示と、ステップS1621の判定処理の結果である判定結果の送信とは、ほぼ同時に発生し得る。
【0027】
図16では、ステップS1621の判定処理で、判定結果が確定した場合を例示的に示している。指示部101は、ステップS1621における判定結果を判定部104から受信する。ウィンドウ画像に対象物(特定パターン)が含まれることを示す結果が判定結果に含まれている場合、ウィンドウ画像に対する検出処理が終了したことを検出する(S1605)。以後、指示部101は判別ジョブの生成を停止する。
【0028】
しかしながら、図1に示した各部の全ての処理が終わるのは、ステップS1623の判定処理による判定結果送信を受け取った後のステップS1606である。ステップS1606において、全体の処理が終了したか否かを判定するために、指示部101がジョブ生成により演算部103に対して指示したジョブの数と、判定部104が指示部101に送信した判定結果の数とをそれぞれ計数しておく。そして、ステップS1605によるウィンドウ画像の処理終了検出の後に、指示部101は、計数された両者の数が一致するタイミングで、全体の処理が終了したことを判定する。
【0029】
ステップS1622およびS1623の判定処理が、ステップS1621で判別結果が確定済みであるウィンドウ画像と同一のウィンドウ画像に対する判別ジョブである場合、判定部104はそのウィンドウ画像の判別処理が終了済みであると判定する。判定部104は、識別情報(ID)の比較により、同一のウィンドウ画像であるか否かについての判定を行うことが可能である。指示部101においても、ステップS1605において、ウィンドウ画像に対する検出処理が終了したことを検出しており、ウィンドウ画像の判別処理が終了していることは既知である。このような場合、重複した演算処理の負荷を軽減するために、ステップS1622およびS1623の判定処理を省略して、ダミーのデータを指示部101に返すこともできる。
【0030】
このような場合、例えば、演算処理S1612およびS1613の演算処理の結果は正確なものである必要はない。従って、ステップS1621の判定処理で全てのウィンドウ画像に対する判定処理が確定した後であれば、指示部101はメモリ102に対して画像データの入れ替えを指示しても良い。メモリ102は、画像データの入れ替え中でもメモリ102に対する演算部103の画像データ要求に対して応答を返すように構成することが可能である。そうすれば、演算部103は演算を進めることができる一方、判定部104における重複した判定処理の演算負荷を軽減することができる。
【0031】
(指示部101の処理)
図5は、指示部101の処理の流れを示す流れ図である。メモリ102が保持するウィンドウ画像はW個(W>0)あり、0〜(W-1)までの識別情報を与えて区別するものとする。例えば、図11の例において、ウィンドウ画像1101〜1105に対して順番にウィンドウ画像の識別情報(ID)=0〜4の識別情報(ID)を付与する。
【0032】
また、先頭に配列された弱判別器から順番に弱判別器の識別情報(ID)=0〜(N−1)の識別情報(ID)を付与し、弱判別器の識別情報(ID)の順に判別処理が順次実行される。まず、ステップS501で初期化処理を行う。初期化処理の詳細を図6の参照により説明する。
【0033】
まず、ステップS601で、次に処理すべきウィンドウ画像の識別情報(ID)を保持するcurrentをW-1で初期化する。W-1に設定するのは、後述する判別ジョブ投入処理においてウィンドウ画像の識別情報(ID)0番から処理を開始するためにW-1としているが、値を明確に初期化すれば良く、他のウィンドウ画像の識別情報(ID)で初期化してもよい。また、最初の処理であることを表す、init_flagを1にセットする。
【0034】
ステップS602では、ステップS603〜S604の処理回数を数えるカウンタiを0に初期化する。ステップS603では、ループ処理の終了判定を行う。S604の処理をN回処理したかどうかを判定し、まだ処理が終了していなければ(S603−Yes)、ステップS604の処理を繰り返し、終了した場合(S603−No)、処理は終了する。
【0035】
ステップS604では、配列win_status[i]の値を0で初期化して、カウンタiの値をカウントアップして、処理をステップS603に戻す。
【0036】
本実施形態では、各ウィンドウ画像の状態を管理する変数として、win_statusを用いる。win_statusはW個の配列を有し、次に処理すべき弱判別器IDの値を保持する。また、この値が負の値である場合は、そのウィンドウに対する判別処理が終了していることを表すものとする。初期化処理の段階で、次に処理すべき弱判別器の識別情報(ID)として0が設定される。
【0037】
図6で説明した初期化処理(S501、図6)が終了すると、処理は図5のステップS502に進められる。ステップS502では、メモリ102に対してメモリ更新処理を行う。メモリ更新処理の詳細を図9の参照により説明する。ステップS901において、指示部101は、メモリ102に対して、画像の更新要求を送信する。そして、メモリ102は、指示部101から画像更新要求を受信すると、外部に対して画像データを要求し、画像データの要求に対して外部から送信された画像データを蓄積する。そして、ステップS902において、複数のウィンドウ画像を構成するのに十分なデータ量を蓄積した時点で、メモリ102は、指示部101に応答(OK)を返す。
【0038】
メモリ更新処理(S502、図9)が終了すると、図5のステップS503に処理は進められる。ステップS503では、判定部104からの出力の有無を確認する。判定部104からの出力があれば(S503−Yes)、処理はステップS504に進められる。ステップS504では、判定部104の出力(判定結果)を読み込み、ステップS505では、判定部104の出力(判定結果)に応じて指示部101の状態を更新する。指示部状態更新処理の詳細を図7の参照により説明する。
【0039】
まず、判定部104の出力(判定結果)には、判定したウィンドウ画像の識別情報(ID)と、その判定結果とが含まれるものとする。ステップS701において、指示部101は、出力(判定結果)から、ウィンドウ画像の識別情報(ID)と判定結果とを読み込む。ここで、判定結果としては、最低限、処理を継続する(PASS)か、処理を終了するかがわかればよい。例えば、判定部104の返す判定結果として、「0」を処理継続、「1」を処理終了とする。処理終了は、例えば、図2の場合、ジョブの判定結果がNGの場合や、最後の弱判別器250をPASSした場合が該当する。さらには、図3の場合、途中の弱判別器でOKの判定がされた場合も処理終了に該当し得る。また、図16のステップS1622やS1623のように、既に判定処理が終了したウィンドウ画像に対するジョブの結果なども、処理終了に該当し得る。
【0040】
これらの判定結果については、より詳細に信号に意味を割り当ててもよいが、最低限、そのウィンドウ画像の継続処理か、処理終了かを判定できればよい。
【0041】
続く、ステップS702では、判定部104の出力するウィンドウ画像の識別子が(win_ID)で表されるウィンドウ画像に対して、処理を継続する指示かどうかを判定する。判定結果(result)=0であれば処理継続と判定され(S702−Yes)、処理は終了する。ステップS702の判定で、判定結果(result)=1であれば、処理終了と判定され(S702−No)、処理はステップS703に進められる。
【0042】
ステップS703はウィンドウ画像を無効化する処理で、先に述べたように、win_status [win_ID]を無効にするために、判定結果の値として-1を設定し、処理を終了する。
【0043】
説明を図5のステップS503に戻す。ステップS503の判定で、判定部104からの出力が無ければ(S503−No)、処理はステップS506に進められる。ステップS506では、演算部103に判別ジョブを投入する空きがあるかどうかを判定する。空きがなければ(S506−No)、処理はS508に進められる。一方、演算部103に判別ジョブを投入する空きがあれば、処理はステップS507のジョブ投入処理に進められる。ジョブ投入処理の詳細を図8の参照により説明する。
【0044】
まず、ステップS801で、指示部101は、currentの値を更新する。また、指示部101は、ステップS802〜S804の処理を制御するカウンタcntを0に初期化する。ステップS802では、ループ処理を抜けるか否かの判断を行う。cnt≧Wとなった場合(S802−No)、処理は終了する。このステップS802の判定でNoとなるのは、次に判別ジョブとして投入すべきウィンドウ画像がなかった場合が該当し得る。
【0045】
ステップS802の判定で、cnt<Wの場合(S802−Yes)、処理はステップS803に進められる。ステップS803では、currentのウィンドウ画像が有効か否かが判定される。win_status[current]<0という状態は、currentのウィンドウ画像の処理が終了していること、すなわちウィンドウ画像は無効である判定する(S803−Yes)。ウィンドウが無効な場合(S803−Yes)、処理はステップS804に進められる。ステップS804では、currentの値とcntの値が更新され、処理はステップS802に戻され、同様の処理が繰り返される。ステップS803の判定で、有効なウィンドウが見つかった場合(S803−No)、処理はステップS805に進められる。
【0046】
ステップS805では、指示部101は、演算部103に対して、ウィンドウ画像のIDとしてcurrentを、弱判別器のIDとしてwin_status[current]を、判別ジョブとして送信する。指示部101は、判別ジョブとあわせて、フラグinit_flagを送信する。本処理がウィンドウ画像に対して初めての判別ジョブの送信である場合には、初期化処理(図6のS601)でinit_flag =1が設定されているので、init_flag =1を送信する。
【0047】
ステップS806では、win_status[current]に「1」を加算して、win_status[current]を更新するとともに、init_flagを「0」にセットする。以上の処理によりジョブ投入処理が終了する。指示部状態更新処理(S505、図7)、またはジョブ投入処理(S507、図8)が終了すると、処理は図5のステップS508に進められる。ステップS508では、有効なウィンドウ画像があるかどうかを判定する。ここでは、win_statusの全ての要素が負の値であれば有効なウィンドウ画像が無いと判定される(S508−Yes)。一方、ステップS508の判定で、有効なウィンドウ画像が有ると判定される場合(S508−No)、処理がステップS503に進められ、以下同様の処理が繰り返される。
【0048】
ステップS508の判定処理で有効なウィンドウ画像が無いと判定される場合(S508−Yes)、処理はステップS509に進められ、処理を終了するか否かが判定される。これは、例えば、外部からの制御入力において、何回ウィンドウ画像の入れ替えをして判定処理を行ったら終了かという情報を受け取っておき、図5のステップS501〜S509の処理を何回行ったかを数えておけばよい。この比較に基づいてステップS509の真偽を決定してもよいし、あるいは、ステップS509の判定において、外部から、継続すべきか終了すべきかの指示を受け取り、それに基づいて終了判定を行うことも可能である。ステップS509の判定で、処理を終了しない場合(S509-No)、処理はステップS501に戻され、同様の処理が繰り返される。
【0049】
ステップS510は、図16におけるステップS1622およびステップS1623に対応する処理で、判定部104からの応答を待つ処理である。
【0050】
(判定部104の処理)
判定部104の処理を図10の参照により説明する。ステップS1001では、判定部104は、演算部103からの入力待ちの状態で待機する。ステップS1002では、演算部103よりウィンドウ画像のIDとしてwin_ID、弱判別器のIDとしてclf_ID、また演算値としてval、また、初期化フラグとしてinit_flagを受け取る。ウィンドウ画像のIDと弱判別器のIDとinit_flagは、指示部101が図8のS805で演算部103に送信したものと同じものである。
【0051】
続くステップS1003では、init_flagの値で処理を分岐させる。init_flagが1であれば(S1003−Yes)、ステップS1004の初期化処理を行い、そうでない場合は(S1003−No)、ステップS1004をスキップして、処理はステップS1005に進められる。
【0052】
ステップS1004の初期化処理では、各ウィンドウ画像の判定済みか否かを管理する変数の初期化を行う。例えば、判定状態を示す情報win_status2[win_ID](配列:要素数W個)を設け、要素の値が0であればそのウィンドウ画像の処理は判定済(状態が確定)を表し、そうでなければウィンドウ画像の処理は判定が終了していないとする。この場合、それらの各要素について非0値 (ウィンドウは有効) 、例えば1を設定すれば良い。また、ステップS1008で用いるsend_flagフラグの値(結果を送信したかどうか判別するのに用いる)を0に初期化する。さらに、各ウィンドウ画像の検出結果を示す情報win_detect[]配列(要素数W個)を設け、各要素に0を設定する。win_detect[]配列は、各ウィンドウの検出結果を記憶し、0は検出なし、1は検出ありを表すものとする。
【0053】
ステップS1005では判定部104の内部状態を更新する。これは演算部103の出力する結果に基づき、win_status2[win_ID]の値を更新する。例えば、図2の例の場合、演算部103の演算結果がNGであるか、あるいは最後の弱判別器(N-1) (図2の250)をPASSして状態が確定すれば、win_status2[win_ID]の値を0にする。ステップS1005の詳細を図17の参照により説明する。
【0054】
まず、ステップS1701で、指定されたウィンドウ画像が判定未終了かそれとも終了しているかを判定する。これは、演算部103から受け取ったwin_IDに基づき、それに対応するwin_status2[]配列の要素、すなわちwin_status2[win_ID]を参照し、その値と0を比較して判定すれば良い。win_status2[win_ID]が非0であればウィンドウは判定が済んでいない状態であるので(S1701−Yes)、処理はステップS1702に進められる。win_status2[win_ID]=0の場合(S1701−No)、図17の処理は終了する。
【0055】
続くステップS1702では、判定部104は演算部103から入力された演算値がPASSを表すかどうかを判定する。演算値に対してその弱判別器に応じた閾値を使って判定し、閾値未満であればNG、そうでなければPASSとする。各弱判別器によって閾値が変わる場合には、その閾値はパラメータ供給部105から閾値の供給を受ければよい。図1において、パラメータ供給部105は判定部104と直接には接続していないが、例えば、演算部103を介して閾値の供給を受けることが可能である。あるいは、図1に示していないが、パラメータ供給部105と判定部104との間を接続し、その接続を介して閾値の供給を受けるように変形してもよい。閾値との大小関係とNG/PASSの対応は一例であって、例えば、逆に閾値未満であればPASS、そうでなければNGとするような演算であってもよい。
【0056】
ステップS1702の判定結果が真であれば、処理はステップS1703に進められ、そうでない場合、処理はステップS1705に進められる。ステップS1703の判定は処理中の弱判別器が最終弱判別器(図2における250)か否かの判定である。これは演算部103から弱判別器のIDとして受け取ったclf_IDを元にN-1と比較すれば良い。ステップS1703―Yesの場合、判定の対象となる弱判別器は最終判別器ではないので、処理は終了する。一方、ステップS1703―Noの場合、処理中の弱判別器は最終弱判別器なので、PASSであった場合に、検出対象物である顔を「検出した」として処理をする。ステップS1704では、最終弱判別器をPASSして、判定状態は確定する。判定状態を示す情報win_status2[win_ID]の値を0に設定する。また、「検出した」ことを記憶するため、検出結果を示す情報win_detect[win_ID]の値を1に設定し、処理は終了する。各ウィンドウ画像の検出結果として、例えば、0は検出なし、1は検出ありを表すものとする。
【0057】
ステップS1705は、S1702の判定で、弱判別器の判定結果がNGとなった場合、部分画像には対象物(特定パターン)は含まれない判定が確定するので、判定状態を示す情報win_status2[win_ID]の値を0に設定して処理は終了する。ステップS1005の処理(図17)が終了すると処理は、図10のステップS1006に進められ、判定部状態更新処理の結果が指示部101に通知される。
【0058】
ステップS1007では、有効なウィンドウ画像があるかどうかをwin_status2[]配列を参照し、有効なウィンドウ画像がない場合(S1007−N0)、処理はステップS1008に進められ、そうでなければ処理はS1001に戻る。ステップS1008では、結果を送信したかどうか判別するのに用いるフラグsend_flagの値を調べて処理を分岐する。フラグsend_flagの値が1であれば(S1008−Yes)、処理はステップS1009に進められ、そうでなければ処理はステップS1001に戻される(S1008−No)。
【0059】
ステップS1009では、判定結果の出力処理を実行する。これはwin_detect[]配列の各要素の値に基づき、各ウィンドウ画像の領域検出の有無を出力する。出力は任意の形式で良い。
【0060】
ステップS1010では、send_flagの値を0に設定する。これは、図16で説明した通り、ウィンドウ画像の検出が全て終了した後も、演算部103からはジョブの演算結果が入力される可能性があるためである。この処理は、図10のフローチャートにおいてステップS1008へのパスを複数回通る可能性があるので、その最初の一回のみにステップS1009の処理を実行するようにするためのものである。ステップS1010を実行した後は、ステップS1008の判定は偽(S1008−No)になりステップS1009は実行されない。また、init_flagとして1が与えられるとステップS1004の初期化処理によってsend_flagが1に設定され、S1008の判定が再度、真になるようになる。
【0061】
演算部103の処理は、公知の検出処理における弱判別処理であれば任意のもので良い。概略としては次のように構成する。まず、メモリ102内に設定された複数のウィンドウ画像のうち、指示部101から判別ジョブとして指定されたウィンドウ画像のIDに基づきウィンドウ画像を特定する。
【0062】
続いて、そのウィンドウ画像の内部の一部もしくは全部の画素値を参照するとともに、判別ジョブの弱判別器のIDに基づき、パラメータ供給部105から対応するパラメータの供給を受け、画素値とパラメータを用いた演算を行う。そして、その演算値を判別ジョブの情報とともに判定部104に出力するよう構成する。
【0063】
メモリ102は指示部101の指示に応じて、外部から画像データを取得し、保持する。メモリ102は、例えば、図11のように複数のウィンドウ画像を保持することが可能である。メモリ102内に複数のウィンドウ画像が同時に存在していればよく、必ずしも図11のようにウィンドウが他のウィンドウと重複している必要はない。
【0064】
パラメータ供給部105は演算部103の要求に応じて、判別処理用のパラメータを提供する。パラメータ供給部105が全ての判別処理用のパラメータを保持するよう構成するか、あるいは外部に大容量のメモリを設け、パラメータ供給部105はその大容量メモリに対するキャッシュのように動作するように構成してもよい。パラメータ供給部105をキャッシュのように動作するように構成する場合、好ましくは、指示部101からの出力を、パラメータ供給部105が直接受け取るように構成する。さらに、指示部101は処理の進行を予測して、事前にパラメータ供給部105に必用とされる判別処理用のパラメータをプリフェッチするよう構成することも可能である。指示部101が処理の進行を予測するとは、例えば、図2乃至図4のような処理に対し、例えば、演算部103に対して指示を行う弱判別器よりN個(N≧0)先の弱判別器で用いる判別パラメータのプリフェッチをパラメータ供給部105に指示するようにする。Nは予め定めておけば良いし、なんらかの方法により弱判別器処理の進行を予測して動的に決定するように構成しても良い。
【0065】
(弱判別器の処理)
次に、弱判別器の処理について、図12乃至図15を参照して説明する。弱判別器の処理方式は、図2、3に示した、直線状に接続した弱判別器の判別処理に適用可能であるが、この例に限定されず、図4に示した分岐構造を有する判別処理に対しても適用可能である。直線状に接続した弱判別器(例えば、弱判別器(1、0)・・・(1、P−1)、または、弱判別器(2、0)・・・(2、Q−1)、または、弱判別器(3、0)・・・(3、R−1))の判別処理に適用可能である。また、その分岐先の弱判別器の処理を、仮想的に別検出ウィンドウ画像に対する処理のように扱えば、分岐が多段であっても適用可能であることは自明である。
【0066】
説明の簡単のため、検出対象のウィンドウ画像が対象物(特定パターン)を含むか含まないかが確定したことを、検出対象のウィンドウ画像に対する処理が終了したとも言うこととする。図12乃至図15では判別ジョブが、指示部101、演算部103および判定部104で処理される際のタイムチャートを示している。図12乃至図15において横軸は時間軸である。図12では時刻t0〜t15、図13乃至図15においてはt0〜t18の時刻の間にそれぞれ15個、18個のタイムスロットがあり、各タイムスロットで各部が1つの判別ジョブを処理するものとする。タイムスロットに配置された四角は判別ジョブをあらわし、Wxはウィンドウ画像のIDがxであること、Syは弱判別器のIDがyであることを示している。また、説明の簡単のため、ウィンドウ画像のグループ中には最大でIDが0から2(0≦x≦3)の3ウィンドウ画像あることとする。また、弱判別器はIDが0から5(0≦y≦5)の6個あり、弱判別器S5をPASSした場合、対象物(特定パターン)有りと検出するものとする。また、ウィンドウ画像のID =Wx、弱判別器のID= Syの判別ジョブを、Wx/Syとも表記する。
【0067】
図12乃至図15では、最初のウィンドウ画像のグループに対して実線の四角で表された判別ジョブの処理を行う。そして全てのウィンドウ画像に対する処理が終了したことを検出した時に、指示部101のt13の時点でメモリの入れ替えを行い、次のウィンドウ画像のグループとして破線の四角で表された判別ジョブを行うものとする。ただし、図13は1つのウィンドウ画像のグループに関するタイムチャートで、2つ目のウィンドウ画像のグループ、すなわち、図12に示すような破線のウィンドウ画像のグループの判別ジョブは書かれていない。また、網掛けで表された四角は、実際にはその判別ジョブに対応する弱判別器より前の弱判別器で処理が終了した判別ジョブであることを示している。図12乃至図15では、方式1〜方式3の3つの方式による処理の違いを図示している。方式1〜方式3はそれぞれ以下のように動作する。
【0068】
(方式1)
ある検出対象のウィンドウ画像に対する処理が終了するまで投機的に判別ジョブを指示する。判別処理が終了したことを検知した時点で、そのウィンドウ画像に対する判別処理の指示を止め、次のウィンドウ画像の判別ジョブを指示する。
【0069】
(方式2)
各ウィンドウ画像に対する同一の弱判別器に対する判別ジョブを指示し、その判別結果を待つ。判別結果を受け取り、そのウィンドウ画像の処理が終了していなかったら、次の弱判別器に対する判別ジョブを指示する。
【0070】
(方式3)
本発明の実施形態による画像データの処理はこの方式によるものである。判別ジョブの指示の時点で判別処理が終了していないウィンドウ画像を巡回しながら次に行うべき判別器に対する判別ジョブを指示する。
【0071】
図12では、最初のウィンドウ画像のグループ中にW0〜W2の3つのウィンドウ画像が存在し、次の表1のような判定結果である場合の例を示している。
【0072】
【表1】
【0073】
表1のケースを方式1で処理すると、表2のようになる。表2は方式1による処理について、時刻と、指示部および判定部の処理と、をまとめたものである。表2において、セルが網掛けになっている部分は、その判別ジョブに対応する弱判別器より前の弱判別器で処理が終了した判別ジョブである。また、空白のセルは判別ジョブを処理していない状態を示している。
【0074】
【表2】
【0075】
表2の例の場合、方式1による方式でウィンドウ画像のグループの処理終了を検知するのは、時刻t13のタイミングである。
【0076】
表1のケースを方式2で処理すると、表3のようになる。表3は方式2による処理について、時刻と、指示部および判定部の処理と、をまとめたものである。表3の表記は表2の表記と同様である。
【0077】
【表3】
【0078】
表3の例の場合、方式2による方式でウィンドウ画像のグループの処理終了を検知するのは、時刻t12のタイミングになる。
【0079】
次に、図12の方式3について説明する。本方式においては、ウィンドウ画像を処理する順序を規定する。指示部101は外部からの制御入力により、複数のウィンドウ画像について、判別処理の実行順を設定することが可能である。設定された実行順は、判別ジョブに含まれ、指示部101から演算部103に送信される。演算部103は、判別ジョブに含まれる実行順に従い、複数のウィンドウ画像(部分画像)の判別処理を行う。図18(a)、(b)、(c)は、ウィンドウ画像に対する判別処理の実行順を例示する図であり、図12の例にあわせて、3つのウィンドウ画像(W0〜W2)の例を示している。図18のウィンドウ画像1801〜1803が、図12のウィンドウ画像W0〜W2に対応するものとする。図18(a)、(b)、(c)において、実線の矩形は処理済みでないウィンドウ画像を示しており、破線の矩形は処理済みのウィンドウ画像を示している。尚、ウィンドウ画像の数は、3つの例に限定されるものではなく、4つ以上の場合でも循環の順序を規定できるのは明らかである。
【0080】
図18(a)は、全てのウィンドウ画像が処理済みでない状態を例示している。例えば、判別処理を行う弱判別器を弱判別器Siとする。この弱判別器Siで最初に処理されるウィンドウ画像をウィンドウ画像W0(1801)とする。ウィンドウ画像W0(1801)の次に処理の対象となるのはウィンドウ画像W1(1802)である。ウィンドウ画像W1(1802)の次に処理の対象となるのはウィンドウ画像W2(1803)である。ウィンドウ画像W0(1801)〜W2(1803)が弱判別器Siの判別処理で処理済みとならない場合、ウィンドウ画像W0(1801)〜W2(1803)は、次の弱判別器Si+1で処理される。次の弱判別器Si+1で処理される処理の対象となるのは、順番が循環してウィンドウ画像W2(1803)の次の順番にあたるウィンドウ画像W0(1801)から順番に、ウィンドウ画像W0(1801)、W1(1802)、W2(1803)が処理される。図18(b)は、ウィンドウ画像W1(1802)が処理済となった状態を例示しており、処理済となったウィンドウ画像W1(1802)は、次の判別処理の対象から除外される。指示部101は、複数のウィンドウ画像(部分画像)のうち判別処理の打ち切り(終了)と判定されたウィンドウ画像(部分画像)が少なくとも1つ含まれている場合、ウィンドウ画像(例えば、W1)を除いた新たな実行順(W0→W2)を設定する。この場合、ウィンドウ画像W0(1801)の次に処理の対象となるのは、ウィンドウ画像W2(1803)である。図18(c)は、処理済でないウィンドウ画像が1つになった状態を例示している。例えば、判別処理を行う弱判別器Siとして、ウィンドウ画像W0(1801)が弱判別器Siの判別処理により処理済みとならなければ、次の弱判別器Si+1での判別処理の対象もウィンドウ画像W0(1801)である。
【0081】
表1のケースを方式3で処理すると、表4のようになる。表4は方式3による処理について、時刻と、指示部および判定部の処理と、をまとめたものである。表4の表記は表2の表記と同様である。
【0082】
【表4】
【0083】
時刻t4で判別器S1による判別ジョブを指示したウィンドウ画像W1の次に処理の対象となるのはウィンドウ画像W2である。時刻t4におけるW2/S0の判定結果(NG)により、ウィンドウ画像W2に対する判別処理が終了していることは、指示部101において、時刻t5の時点で既知になっている。この場合、指示部101は、更に、次のウィンドウ画像W0を探し、ウィンドウ画像W0が処理済でないのでW0/S2の判別ジョブを再度指示する(t5)。
【0084】
同様に時刻t8では、時刻t7で弱判別器S3による判別ジョブを再度指示したウィンドウ画像W0の次に処理の対象となるのはウィンドウ画像W1である。時刻t6におけるW1/S1の判定結果(NG)により、ウィンドウ画像W1に対する判別処理は終了している。時刻t7、t8では判別処理が終了していないウィンドウ画像に対する判別処理が順次出力される(WO/S3、WO/S4)。この間、ウィンドウ画像W1、W2は判別対象から除外される。時刻t9のタイミングにおいて、判定部104はWO/S3の判定結果(NG)を確定し、時刻t10のタイミングにおいて、指示部101は、ウィンドウ画像のグループの処理終了を検知する。以上のように、図12の例の場合、本発明の実施形態にかかる方式3が最も早くウィンドウ画像のグループを処理することができる。
【0085】
図13は別の例として、表5のように、ウィンドウ画像W0〜W2の全てにおいて、検出対象物(特定パターン)が含まれると判定される場合の例を示している。
【0086】
【表5】
【0087】
図13の場合、3つの方法ともウィンドウ画像のグループの処理が終了したことを時刻t18のタイミングで、指示部101が検知しており、この例に関しては3つの方式で処理速度に差はない。
【0088】
図14は、更に別の例として、表6のように、ウィンドウ画像W0〜W2の全てが最初の弱判別器S0でNGと判定された場合の例を示している。
【0089】
【表6】
【0090】
表6のケースを方式1で処理すると、表7のようになる。表7は方式1による処理について、時刻と、指示部および判定部の処理と、をまとめたものである。表7の表記は表2の表記と同様である。
【0091】
【表7】
【0092】
表7に示すように、方式1では、ウィンドウ画像W0〜W2のグループの処理終了を指示部101が検知するのは、時刻t9のタイミングである。
【0093】
表1のケースを方式2で処理すると、表8のようになる。表8は方式2による処理について、時刻と、指示部および判定部の処理と、をまとめたものである。表8の表記は表2の表記と同様である。
【0094】
【表8】
【0095】
表8に示すように、方式2では、ウィンドウ画像W0〜W2のグループの処理終了を指示部101が検知するのは、時刻t5のタイミングである。
【0096】
表1のケースを方式3で処理すると、表9のようになる。表9は方式3による処理について、時刻と、指示部および判定部の処理と、をまとめたものである。表9の表記は表2の表記と同様である。
【0097】
【表9】
【0098】
表9に示すように、方式3では、ウィンドウ画像W0〜W2のグループの処理終了を指示部101が検知するのは、時刻t5のタイミングである。方式3は、方式2と同じ時刻t5のタイミングで、ウィンドウ画像のグループの処理を終了することができる。また方式3は、方式1に比べて速くウィンドウ画像のグループを処理することができる。
【0099】
図15は、更に別の例として、表10のように、ウィンドウ画像W0〜W2のうち、ウィンドウ画像W0とW1が最初の弱判別器S0でNGと判定され、処理終了していないウィンドウが1つだけという場合の例を示している。
【0100】
【表10】
【0101】
表10のケースを方式1で処理すると、表11のようになる。表11は方式1による処理について、時刻と、指示部および判定部の処理と、をまとめたものである。表11の表記は表2の表記と同様である。
【0102】
【表11】
【0103】
表11に示すように、方式1では、ウィンドウ画像W0〜W2のグループの処理終了を指示部101が検知するのは、時刻t10のタイミングである。
【0104】
表10のケースを方式2で処理すると、表12のようになる。表12は方式2による処理について、時刻と、指示部および判定部の処理と、をまとめたものである。表12の表記は表2の表記と同様である。
【0105】
【表12】
【0106】
表12に示すように、方式2では、ウィンドウ画像W0〜W2のグループの処理終了を指示部101が検知するのは、時刻t8のタイミングである。
【0107】
表10のケースを方式3で処理すると、表13のようになる。表13は方式3による処理について、時刻と、指示部および判定部の処理と、をまとめたものである。表13の表記は表2の表記と同様である。
【0108】
【表13】
【0109】
表13に示すように、方式3では、ウィンドウ画像W0〜W2のグループの処理終了を指示部101が検知するのは、時刻t7のタイミングである。方式3は、方式1、2に比べて速くウィンドウ画像のグループを処理することができる。
【0110】
図12乃至図15に示す例において、方式3は、他の方式1、2に比べて同等もしくは高速にウィンドウ画像のグループを処理することができる。
【0111】
本実施形態ではメモリ102が保持するのは静止画の画像データであるとして説明を行ったが、動画像データであっても良い。複数フレームをメモリ102に格納し、それらを参照して処理を行うことも可能である。また、メモリ102は単一のメモリにより構成されるものに限定されず、複数のメモリで構成してもよい。例えば、3つのメモリで構成し、それぞれに注目しているフレームと、その前後のフレームを格納するように構成することも可能である。その場合、演算部103が複数のメモリのそれぞれに対して判別処理を実行する際に、各メモリのウィンドウ画像と判別処理で参照すべきパラメータとを対応付けるための対応付け情報が、パラメータ供給部105に付与されている。パラメータ供給部105がパラメータを演算部103に供給する際に、対応付け情報もあわせて演算部103に供給される。演算部103はこの対応付け情報を参照して、各メモリとの対応付けを判断し、ウィンドウ画像の判別処理で参照すべきパラメータを特定する。
【0112】
実施形態として、静止画像を空間軸による2次元データ、動画像をさらに時間軸を加えた3次元データの例を説明した。この他、更に多次元のデータ、あるいは、音声などの1次元データ(音声の場合、時間軸を入れ2次元とする場合もある)にも本発明を適用することは可能である。また、本実施形態では、特定オブジェクトを検出するとして説明したが、一般的な多次元データである場合、これは多次元データの特定パターンを検出することに相当する。
【0113】
また、本実施形態ではメモリ102が保持するものは画像データそのものであったが、例えば、前処理として特徴量(例えばエッジ量、フレーム間差分など)を抽出し、それをメモリ部に保持するようにしてもよい。なお特徴量を1種類に限る必要性はなく、例えば、1つの画像から複数の特徴量を抽出し、それを用いて判定処理を行うことも可能である。この場合、動画像データの場合のように、パラメータ保持部が保持するパラメータにはどの特徴量を参照するのかという情報を付与し、それに基づいて演算部103が参照すべきデータを特定するように構成する。更には、本実施形態ではメモリ102が通常の画像データを保持するものとして説明したが、積分画像(Integral Image)の形式で保持することも可能である。
【0114】
以上説明したように、本実施形態によれば、入力画像データに対し、複数の弱判別器を直列に接続して構成される判別処理を効率良く行うことができる。
【0115】
(その他の実施例)
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
【技術分野】
【0001】
本発明は、画像処理装置、画像データの処理方法およびプログラムに関する。特に、画像中に写っている特定の被写体を検出する技術に関する。
【背景技術】
【0002】
画像から特定の被写体パターンを自動的に検出する画像処理方法は有用であり、例えば、人間の顔の判定に利用することができる。このような方法は、通信会議、マン・マシン・インタフェース、セキュリティ、人間の顔を追跡するためのモニタ・システム、画像圧縮等の多くの分野で使用することができる。このような画像中から顔を検出する技術としては、非特許文献1に各種方式が挙げられている。
【0003】
特に、実行速度と検出率の高さとから、非特許文献2に掲載されるViolaらのAdaBoostベースの手法は、顔検出研究において広く使用されている。AdaBoostベースの手法は、それぞれ異なる単純な判別処理のフィルタを直列状に連結し、判別処理の途中で非顔領域であるとわかった時点で、後続の判別処理を打ち切ることで、判別処理の高速化を行っている。この判別処理をさらに高速化するために、判別処理の並列化やパイプライン化が考えられるが、画像データなどの内容に応じて処理の打ち切りが発生するため、判別処理のスケジュールが困難であるという課題がある。特に、判別処理をハードウェアで実現する場合には、制限されたリソースをより高い効率で活用して判別処理を実現することが求められるので、さらにこのスケジュールの困難さが大きな課題となっている。
【0004】
課題についてより具体的に説明するために、以下ではBoostingアルゴリズムを応用した顔検出処理を例として説明を行う。図2は、Boostingアルゴリズムを応用した顔検出処理のアルゴリズムを説明する図である。図2において、201は入力された画像データを構成する部分画像であるウィンドウ画像である。ウィンドウ画像201は、後述する弱判別器210〜250が参照する画像領域含む。
【0005】
弱判別器210は、ウィンドウ画像201の一部もしくは全部の画素値を参照し、その画素値に対して予め定められた演算処理を行い、ウィンドウ画像201が、検出対象オブジェクト(例えば、人間の顔領域)を含むか否かを判定する。この予め定めておいた演算に用いる係数等のパラメータは、実際の検出処理の前に機械学習により決定されている。
【0006】
弱判別器211〜250も弱判別器210と同様の演算処理が可能であるが、好ましくは弱判別器210が参照するウィンドウ画像201の参照位置および参照範囲、弱判別器210の演算に用いる係数等のパラメータがそれぞれ異なるよう構成する。弱判別器210〜250はウィンドウ画像201の参照位置や範囲、また演算に用いる係数等のパラメータが異なるだけで、弱判別器210の処理と概略同じ処理を実行することが可能である。図2において、N個の弱判別器(弱判別器210〜弱判別器250)は直列状に接続されている。弱判別器210〜弱判別器250のそれぞれは、演算結果に応じてPASSかNGの判定を行う。そして、0番目の弱判別器210から処理を行い、判定結果がPASSであれば次の弱判別器211が判定処理を行う、というように順次処理を進める。そうして、最終弱判別器である弱判別器250の判定結果もPASSであったら、ウィンドウ画像201は検出対象のオブジェクト(顔)を含むと判定する。一方で、N個の弱判別器のいずれかの弱判別器における判定処理でNGと判定された場合は、以降の処理は打切られ、ウィンドウ画像201には検出の対象オブジェクト(顔)が含まれないと判定する。
【0007】
図3は、各弱判別器の出力がPASS/NGの2値ではなく、各弱判別器の出力がOK(部分画像は検出対象オブジェクト(顔)を含む)/PASS/NGの3通りの出力をする場合の例である。図3において、図2と同じものについては同じ参照番号を付して説明を省略する。弱判別器310〜350が図2の弱判別器210〜250と異なるのは、先に述べたように出力が3値である点である。N個の弱判別器310〜350のいずれかの弱判別器における判定処理で、 部分画像が検出対象オブジェクト(顔)を含むことが判定された場合(判定結果「OK」)、後続の判定処理を行う必要がないため、判定処理は打ち切りとなる。この点において、図2で説明した弱判別器と相違する。N個の弱判別器310〜350におけるその他の処理は、図2で説明した弱判別器と同様である。
【0008】
顔検出処理は、与えられた画像の一部分に対して、弱判別器における判定処理を繰り返し行うことで実現される。この時、直列状に並んだ弱判別器列の序盤でなるべく多くの判定結果を確定(OKもしくはNG)できるように構成すれば、全体として弱判別器の処理回数の期待値を小さく抑えることができる。また、全体として弱判別器の演算量の削減や処理速度の向上が期待できる。
【先行技術文献】
【非特許文献】
【0009】
【非特許文献1】M.H.Yang, D.J.Kriegman and N.Ahuja. “Detecting Faces in Images:A Survey,” IEEE Trans. on PAMI, vol.24, no.1, pp.34-58, January, 2002.
【非特許文献2】P.Viola and M. Jones. “Robust Real-time Object Detection,” in Proc. of IEEE Workshop SCTV, July, 2001.
【発明の概要】
【発明が解決しようとする課題】
【0010】
しかしながら、アルゴリズム的な観点では上記のようにして平均演算量を削減できる一方、これをさらに高速化するためにパイプライン処理化する場合、各ウィンドウに対する処理量が不均一なため、処理のスケジュールが難しいという課題がある。
【課題を解決するための手段】
【0011】
本発明は、入力画像データに対し、複数の弱判別器を直列に接続して構成される判別処理を効率良く行うことを可能にする技術を提供する。
【0012】
本発明の一つの側面にかかる画像処理装置は、複数の部分画像のそれぞれに検出の対象となる特定パターンが含まれるか否かの判別処理の実行を指示する指示手段と、
前記指示手段の前記指示に従って、前記判別処理の継続または終了を判定するための閾値を含む、前記判別処理のためのパラメータを用いて、前記複数の部分画像のそれぞれについて前記判別処理を行う演算手段と、
前記演算手段による演算結果から、前記複数の部分画像のそれぞれに対する判別処理が終了したか否かを判定する判定手段と、を備え、
前記指示手段は、前記判定手段により、前記複数の部分画像の少なくとも1つに対して前記判別処理が終了していないと判定された場合、当該終了していないと判定された部分画像に対する判別処理の実行を再度指示し、
当該再度指示に従って、前記演算手段は、前記パラメータとは異なるパラメータを用いて、当該終了していないと判定された部分画像についての判別処理を実行することを特徴とする。
【発明の効果】
【0013】
本発明によれば、入力画像データに対し、複数の弱判別器を直列に接続して構成される判別処理を効率良く行うことが可能になる。
【図面の簡単な説明】
【0014】
【図1】実施形態にかかる画像処理装置の構成例を示す図。
【図2】Boostingアルゴリズムを応用した検出処理の例を説明する図。
【図3】Boostingアルゴリズムを応用した検出処理の例を説明する図。
【図4】分岐構造を持つ、Boostingアルゴリズムを応用した検出処理の例を説明する図。
【図5】指示部の処理の流れを説明する図。
【図6】指示部の処理における初期化処理の流れを説明する図。
【図7】指示部の処理における指示部状態更新処理の流れを説明する図。
【図8】指示部の処理におけるジョブ投入処理の流れを説明する図。
【図9】指示部の処理におけるメモリ態更新処理の流れを説明する図。
【図10】判定部の処理の流れを説明する図。
【図11】ウィンドウ画像の例を示す図。
【図12】弱判別器の処理を例示する図。
【図13】弱判別器の処理を例示する図。
【図14】弱判別器の処理を例示する図。
【図15】弱判別器の処理を例示する図。
【図16】指示部、演算部、パラメータ供給部、メモリおよび判定部の間の動作の流れを示す図。
【図17】判定部の処理における判定部状態更新処理の流れを説明する図。
【図18】ウィンドウ画像に対する判別処理の実行順を例示する図。
【発明を実施するための形態】
【0015】
(第1実施形態)
本発明の実施形態を、図面を参照して詳細に説明する。図1は、実施形態にかかる画像処理方法を実現する画像処理装置の概略構成を示す図である。図1において、指示部101は、部分画像のそれぞれに対する画像処理のスケジュール管理を行う。指示部101は、外部からの制御入力(画像処理の開始指示)を受け取り、画像処理が開始される。指示部101は、メモリ102との間でデータの入出力が可能である。また、指示部101は、演算部103へのデータ出力が可能であり、判定部104からのデータ入力が可能なように構成されている。
【0016】
メモリ102は、例えば、図2におけるウィンドウ画像201を複数保持することが可能である。メモリ102は、外部に対して画像データの要求を送信し、また、画像データを取得し、取得した画像データを保持することができる。さらに、メモリ102は、指示部101からの指示を受信して、応答が返せるように構成されている。また、メモリ102は、演算部103からの画像データの要求受信と、演算部103へ要求された画像データの出力が可能なように構成されている。メモリ102は検出対象の画像データの全てを同時に格納できる記憶容量を有するものであってもよいが、検出対象の画像データの全体を保持するための記憶容量は必ずしも必要ない。メモリ102は、複数のウィンドウ画像を保持できればよく、例えば、検出対象の画像データをバンド状もしくはブロック状に分割した部分画像を格納できるような記憶容量を有すればよい。また、メモリ102は、指示部101からの指示に応じて、メモリ102に保持している画像データの一部もしくは全部を入れ替えることが可能なように構成されている。その場合、メモリ102は、指示部101からの指示に応じて、外部に対して画像データの要求を送信し、画像データの受信(取得)が完了した時点で指示部101に対して返答するように構成されている。
【0017】
演算部103は、少なくとも1つの弱判別器の処理を実行可能なように構成されている。また、演算部103は、メモリ102に画像データの要求を送信し、メモリ102から送信された画像データ(複数の部分画像データ)を参照できるように構成されている。パラメータ供給部105は、弱判別器が判別処理に用いるパラメータを保持しており、演算部103からの要求に応じて、パラメータを送信できるように構成されている。演算部103は、パラメータの要求をパラメータ供給部105に送信し、パラメータ供給部105から送信されたパラメータを参照できるように構成されている。判定部104は、演算部103の出力を受信して判定を行い、判定結果を出力する。この際、判定結果は指示部101にも送信される。
【0018】
メモリ102が保持する複数のウィンドウ画像を図11の参照により例示的に説明する。メモリ領域1110は、演算部103がメモリ102から参照可能な領域を表しており、メモリ領域1110の内部にある最も小さな矩形領域1111は各画素データを表している。1101〜1105はメモリ領域1110に設定された複数のウィンドウ画像を表しており、例えば、ウィンドウ画像1101はメモリ領域1110の位置(0、0)から幅10画素、高さ10画素の領域にある。また、同様にウィンドウ画像1102はメモリ領域1110の位置(0、2)から幅、高さともに10画素の領域にある。ウィンドウ画像1103はメモリ領域1110の位置(0、4)から幅、高さともに10画素の領域にある。ウィンドウ画像1104はメモリ領域1110の位置(0、6)から幅、高さともに10画素の領域にある。そして、ウィンドウ画像1105はメモリ領域1110の位置(0、8)から幅、高さともに10画素の領域である。ウィンドウ画像1101〜1105は、図2におけるウィンドウ画像201に対応するが、それぞれ原画像の位置が異なるウィンドウ画像である。
【0019】
図16は、図1で説明した、指示部101、演算部103、パラメータ供給部105、メモリ102、および判定部104の処理の流れを説明するシーケンス図である。対象オブジェクトの検出処理は、例えば、図2で説明したように、1つのウィンドウ画像に対してN個の弱判別器を順次適用して、N個全ての弱判別器を通過(PASSと判定された)場合、ウィンドウ画像は対象オブジェクトを含むと判定する。あるいは、いずれかの弱判別器でNGと判定された場合、その時点で後続する弱判別器の処理を取りやめ、ウィンドウ領域が対象オブジェクトを含まないと判定する。N個の弱判別器のそれぞれは異なるパラメータを処理に使用するが、処理の内容は同一である。メモリは同時に複数のウィンドウ画像を保持している。
【0020】
指示部101は、外部から画像処理の開始の指示を受信すると(S1601)、メモリ102に対して画像更新要求を送信する。メモリ102は、指示部101から画像更新要求を受信すると、外部に対して画像データを要求し、画像データの要求に対して外部から送信された画像データを蓄積する。複数のウィンドウ画像を構成するのに十分なデータ量を蓄積した時点で指示部101に応答(OK)を返す。
【0021】
指示部101は演算部103に対して判別処理の実行を指示する(ジョブ指示)。指示部101は演算部103に対し、判別処理の対象となるウィンドウ画像や弱判別器に対して、識別情報(ID)を付与する。1つのウィンドウ画像に対する1つの弱判別器の処理を、以下、判別ジョブ、もしくは単にジョブと呼ぶことにする。判別ジョブの指示は、ウィンドウ画像の識別情報(ID)と弱判別器の識別情報(ID)との対を演算部103に対して送信することで行う。指示部101はステップS1602、S1603、S1604において、次に処理すべき判別ジョブを決定し、演算部103に判別ジョブの指示を送信する。ステップS1602〜S1604の判別ジョブの生成については後述する。
【0022】
演算部103は、指示部101からの指示を受け取り、パラメータ供給部105にパラメータの要求を送信する。パラメータには、後続の演算処理ステップS1611で用いる係数、判別処理の継続(PASS)または打ち切り(終了:NG)の判定を行うための閾値や、また、ウィンドウ画像内の参照領域の位置や大きさに関する情報などが含まれる。演算部103は、パラメータ供給部105から送信されたパラメータを受信すると、そのパラメータに従いメモリ102に対して演算処理に必要な画像データを参照するための画像データの要求を送信する。演算部103はメモリ102から送信された画像データを受信して、受信した画像データと、先に受信したパラメータとを用いて、予め定められた演算を行い(S1611)、その演算結果(PASS/NG)を判定部104に送信する。
【0023】
ステップS1612とステップS1613は、ステップS1611と異なる判別ジョブに対する演算処理である。
【0024】
ステップS1612、S1613における判別ジョブはウィンドウ画像の識別情報(ID)と弱判別器の識別情報(ID)との少なくとも一方が異なる。それに応じてパラメータ要求や画像データの要求がそれぞれ行われるが、処理の内容はステップS1611と同じである。
【0025】
判定部104は、ステップS1611の演算結果を演算部103から受け取って、判定処理(S1621)を行い、その結果を指示部101に送信する。判定処理については後述する。尚、ステップS1622とステップS1623は、判定対象の判別ジョブが異なるだけで同じ処理であり、判定処理が完了すると、ステップS1621と同様に判別結果は指示部101に送信される。
【0026】
指示部101の判別ジョブの指示もしくは演算部103の演算結果の送信と、判定部104の判定結果の送信はタイミングがずれているようになっているが、それは表記上の都合で、実際は概略同じタイミングであってよい。例えば、ステップS1604のジョブ生成の結果についての判別ジョブ指示と、ステップS1621の判定処理の結果である判定結果の送信とは、ほぼ同時に発生し得る。
【0027】
図16では、ステップS1621の判定処理で、判定結果が確定した場合を例示的に示している。指示部101は、ステップS1621における判定結果を判定部104から受信する。ウィンドウ画像に対象物(特定パターン)が含まれることを示す結果が判定結果に含まれている場合、ウィンドウ画像に対する検出処理が終了したことを検出する(S1605)。以後、指示部101は判別ジョブの生成を停止する。
【0028】
しかしながら、図1に示した各部の全ての処理が終わるのは、ステップS1623の判定処理による判定結果送信を受け取った後のステップS1606である。ステップS1606において、全体の処理が終了したか否かを判定するために、指示部101がジョブ生成により演算部103に対して指示したジョブの数と、判定部104が指示部101に送信した判定結果の数とをそれぞれ計数しておく。そして、ステップS1605によるウィンドウ画像の処理終了検出の後に、指示部101は、計数された両者の数が一致するタイミングで、全体の処理が終了したことを判定する。
【0029】
ステップS1622およびS1623の判定処理が、ステップS1621で判別結果が確定済みであるウィンドウ画像と同一のウィンドウ画像に対する判別ジョブである場合、判定部104はそのウィンドウ画像の判別処理が終了済みであると判定する。判定部104は、識別情報(ID)の比較により、同一のウィンドウ画像であるか否かについての判定を行うことが可能である。指示部101においても、ステップS1605において、ウィンドウ画像に対する検出処理が終了したことを検出しており、ウィンドウ画像の判別処理が終了していることは既知である。このような場合、重複した演算処理の負荷を軽減するために、ステップS1622およびS1623の判定処理を省略して、ダミーのデータを指示部101に返すこともできる。
【0030】
このような場合、例えば、演算処理S1612およびS1613の演算処理の結果は正確なものである必要はない。従って、ステップS1621の判定処理で全てのウィンドウ画像に対する判定処理が確定した後であれば、指示部101はメモリ102に対して画像データの入れ替えを指示しても良い。メモリ102は、画像データの入れ替え中でもメモリ102に対する演算部103の画像データ要求に対して応答を返すように構成することが可能である。そうすれば、演算部103は演算を進めることができる一方、判定部104における重複した判定処理の演算負荷を軽減することができる。
【0031】
(指示部101の処理)
図5は、指示部101の処理の流れを示す流れ図である。メモリ102が保持するウィンドウ画像はW個(W>0)あり、0〜(W-1)までの識別情報を与えて区別するものとする。例えば、図11の例において、ウィンドウ画像1101〜1105に対して順番にウィンドウ画像の識別情報(ID)=0〜4の識別情報(ID)を付与する。
【0032】
また、先頭に配列された弱判別器から順番に弱判別器の識別情報(ID)=0〜(N−1)の識別情報(ID)を付与し、弱判別器の識別情報(ID)の順に判別処理が順次実行される。まず、ステップS501で初期化処理を行う。初期化処理の詳細を図6の参照により説明する。
【0033】
まず、ステップS601で、次に処理すべきウィンドウ画像の識別情報(ID)を保持するcurrentをW-1で初期化する。W-1に設定するのは、後述する判別ジョブ投入処理においてウィンドウ画像の識別情報(ID)0番から処理を開始するためにW-1としているが、値を明確に初期化すれば良く、他のウィンドウ画像の識別情報(ID)で初期化してもよい。また、最初の処理であることを表す、init_flagを1にセットする。
【0034】
ステップS602では、ステップS603〜S604の処理回数を数えるカウンタiを0に初期化する。ステップS603では、ループ処理の終了判定を行う。S604の処理をN回処理したかどうかを判定し、まだ処理が終了していなければ(S603−Yes)、ステップS604の処理を繰り返し、終了した場合(S603−No)、処理は終了する。
【0035】
ステップS604では、配列win_status[i]の値を0で初期化して、カウンタiの値をカウントアップして、処理をステップS603に戻す。
【0036】
本実施形態では、各ウィンドウ画像の状態を管理する変数として、win_statusを用いる。win_statusはW個の配列を有し、次に処理すべき弱判別器IDの値を保持する。また、この値が負の値である場合は、そのウィンドウに対する判別処理が終了していることを表すものとする。初期化処理の段階で、次に処理すべき弱判別器の識別情報(ID)として0が設定される。
【0037】
図6で説明した初期化処理(S501、図6)が終了すると、処理は図5のステップS502に進められる。ステップS502では、メモリ102に対してメモリ更新処理を行う。メモリ更新処理の詳細を図9の参照により説明する。ステップS901において、指示部101は、メモリ102に対して、画像の更新要求を送信する。そして、メモリ102は、指示部101から画像更新要求を受信すると、外部に対して画像データを要求し、画像データの要求に対して外部から送信された画像データを蓄積する。そして、ステップS902において、複数のウィンドウ画像を構成するのに十分なデータ量を蓄積した時点で、メモリ102は、指示部101に応答(OK)を返す。
【0038】
メモリ更新処理(S502、図9)が終了すると、図5のステップS503に処理は進められる。ステップS503では、判定部104からの出力の有無を確認する。判定部104からの出力があれば(S503−Yes)、処理はステップS504に進められる。ステップS504では、判定部104の出力(判定結果)を読み込み、ステップS505では、判定部104の出力(判定結果)に応じて指示部101の状態を更新する。指示部状態更新処理の詳細を図7の参照により説明する。
【0039】
まず、判定部104の出力(判定結果)には、判定したウィンドウ画像の識別情報(ID)と、その判定結果とが含まれるものとする。ステップS701において、指示部101は、出力(判定結果)から、ウィンドウ画像の識別情報(ID)と判定結果とを読み込む。ここで、判定結果としては、最低限、処理を継続する(PASS)か、処理を終了するかがわかればよい。例えば、判定部104の返す判定結果として、「0」を処理継続、「1」を処理終了とする。処理終了は、例えば、図2の場合、ジョブの判定結果がNGの場合や、最後の弱判別器250をPASSした場合が該当する。さらには、図3の場合、途中の弱判別器でOKの判定がされた場合も処理終了に該当し得る。また、図16のステップS1622やS1623のように、既に判定処理が終了したウィンドウ画像に対するジョブの結果なども、処理終了に該当し得る。
【0040】
これらの判定結果については、より詳細に信号に意味を割り当ててもよいが、最低限、そのウィンドウ画像の継続処理か、処理終了かを判定できればよい。
【0041】
続く、ステップS702では、判定部104の出力するウィンドウ画像の識別子が(win_ID)で表されるウィンドウ画像に対して、処理を継続する指示かどうかを判定する。判定結果(result)=0であれば処理継続と判定され(S702−Yes)、処理は終了する。ステップS702の判定で、判定結果(result)=1であれば、処理終了と判定され(S702−No)、処理はステップS703に進められる。
【0042】
ステップS703はウィンドウ画像を無効化する処理で、先に述べたように、win_status [win_ID]を無効にするために、判定結果の値として-1を設定し、処理を終了する。
【0043】
説明を図5のステップS503に戻す。ステップS503の判定で、判定部104からの出力が無ければ(S503−No)、処理はステップS506に進められる。ステップS506では、演算部103に判別ジョブを投入する空きがあるかどうかを判定する。空きがなければ(S506−No)、処理はS508に進められる。一方、演算部103に判別ジョブを投入する空きがあれば、処理はステップS507のジョブ投入処理に進められる。ジョブ投入処理の詳細を図8の参照により説明する。
【0044】
まず、ステップS801で、指示部101は、currentの値を更新する。また、指示部101は、ステップS802〜S804の処理を制御するカウンタcntを0に初期化する。ステップS802では、ループ処理を抜けるか否かの判断を行う。cnt≧Wとなった場合(S802−No)、処理は終了する。このステップS802の判定でNoとなるのは、次に判別ジョブとして投入すべきウィンドウ画像がなかった場合が該当し得る。
【0045】
ステップS802の判定で、cnt<Wの場合(S802−Yes)、処理はステップS803に進められる。ステップS803では、currentのウィンドウ画像が有効か否かが判定される。win_status[current]<0という状態は、currentのウィンドウ画像の処理が終了していること、すなわちウィンドウ画像は無効である判定する(S803−Yes)。ウィンドウが無効な場合(S803−Yes)、処理はステップS804に進められる。ステップS804では、currentの値とcntの値が更新され、処理はステップS802に戻され、同様の処理が繰り返される。ステップS803の判定で、有効なウィンドウが見つかった場合(S803−No)、処理はステップS805に進められる。
【0046】
ステップS805では、指示部101は、演算部103に対して、ウィンドウ画像のIDとしてcurrentを、弱判別器のIDとしてwin_status[current]を、判別ジョブとして送信する。指示部101は、判別ジョブとあわせて、フラグinit_flagを送信する。本処理がウィンドウ画像に対して初めての判別ジョブの送信である場合には、初期化処理(図6のS601)でinit_flag =1が設定されているので、init_flag =1を送信する。
【0047】
ステップS806では、win_status[current]に「1」を加算して、win_status[current]を更新するとともに、init_flagを「0」にセットする。以上の処理によりジョブ投入処理が終了する。指示部状態更新処理(S505、図7)、またはジョブ投入処理(S507、図8)が終了すると、処理は図5のステップS508に進められる。ステップS508では、有効なウィンドウ画像があるかどうかを判定する。ここでは、win_statusの全ての要素が負の値であれば有効なウィンドウ画像が無いと判定される(S508−Yes)。一方、ステップS508の判定で、有効なウィンドウ画像が有ると判定される場合(S508−No)、処理がステップS503に進められ、以下同様の処理が繰り返される。
【0048】
ステップS508の判定処理で有効なウィンドウ画像が無いと判定される場合(S508−Yes)、処理はステップS509に進められ、処理を終了するか否かが判定される。これは、例えば、外部からの制御入力において、何回ウィンドウ画像の入れ替えをして判定処理を行ったら終了かという情報を受け取っておき、図5のステップS501〜S509の処理を何回行ったかを数えておけばよい。この比較に基づいてステップS509の真偽を決定してもよいし、あるいは、ステップS509の判定において、外部から、継続すべきか終了すべきかの指示を受け取り、それに基づいて終了判定を行うことも可能である。ステップS509の判定で、処理を終了しない場合(S509-No)、処理はステップS501に戻され、同様の処理が繰り返される。
【0049】
ステップS510は、図16におけるステップS1622およびステップS1623に対応する処理で、判定部104からの応答を待つ処理である。
【0050】
(判定部104の処理)
判定部104の処理を図10の参照により説明する。ステップS1001では、判定部104は、演算部103からの入力待ちの状態で待機する。ステップS1002では、演算部103よりウィンドウ画像のIDとしてwin_ID、弱判別器のIDとしてclf_ID、また演算値としてval、また、初期化フラグとしてinit_flagを受け取る。ウィンドウ画像のIDと弱判別器のIDとinit_flagは、指示部101が図8のS805で演算部103に送信したものと同じものである。
【0051】
続くステップS1003では、init_flagの値で処理を分岐させる。init_flagが1であれば(S1003−Yes)、ステップS1004の初期化処理を行い、そうでない場合は(S1003−No)、ステップS1004をスキップして、処理はステップS1005に進められる。
【0052】
ステップS1004の初期化処理では、各ウィンドウ画像の判定済みか否かを管理する変数の初期化を行う。例えば、判定状態を示す情報win_status2[win_ID](配列:要素数W個)を設け、要素の値が0であればそのウィンドウ画像の処理は判定済(状態が確定)を表し、そうでなければウィンドウ画像の処理は判定が終了していないとする。この場合、それらの各要素について非0値 (ウィンドウは有効) 、例えば1を設定すれば良い。また、ステップS1008で用いるsend_flagフラグの値(結果を送信したかどうか判別するのに用いる)を0に初期化する。さらに、各ウィンドウ画像の検出結果を示す情報win_detect[]配列(要素数W個)を設け、各要素に0を設定する。win_detect[]配列は、各ウィンドウの検出結果を記憶し、0は検出なし、1は検出ありを表すものとする。
【0053】
ステップS1005では判定部104の内部状態を更新する。これは演算部103の出力する結果に基づき、win_status2[win_ID]の値を更新する。例えば、図2の例の場合、演算部103の演算結果がNGであるか、あるいは最後の弱判別器(N-1) (図2の250)をPASSして状態が確定すれば、win_status2[win_ID]の値を0にする。ステップS1005の詳細を図17の参照により説明する。
【0054】
まず、ステップS1701で、指定されたウィンドウ画像が判定未終了かそれとも終了しているかを判定する。これは、演算部103から受け取ったwin_IDに基づき、それに対応するwin_status2[]配列の要素、すなわちwin_status2[win_ID]を参照し、その値と0を比較して判定すれば良い。win_status2[win_ID]が非0であればウィンドウは判定が済んでいない状態であるので(S1701−Yes)、処理はステップS1702に進められる。win_status2[win_ID]=0の場合(S1701−No)、図17の処理は終了する。
【0055】
続くステップS1702では、判定部104は演算部103から入力された演算値がPASSを表すかどうかを判定する。演算値に対してその弱判別器に応じた閾値を使って判定し、閾値未満であればNG、そうでなければPASSとする。各弱判別器によって閾値が変わる場合には、その閾値はパラメータ供給部105から閾値の供給を受ければよい。図1において、パラメータ供給部105は判定部104と直接には接続していないが、例えば、演算部103を介して閾値の供給を受けることが可能である。あるいは、図1に示していないが、パラメータ供給部105と判定部104との間を接続し、その接続を介して閾値の供給を受けるように変形してもよい。閾値との大小関係とNG/PASSの対応は一例であって、例えば、逆に閾値未満であればPASS、そうでなければNGとするような演算であってもよい。
【0056】
ステップS1702の判定結果が真であれば、処理はステップS1703に進められ、そうでない場合、処理はステップS1705に進められる。ステップS1703の判定は処理中の弱判別器が最終弱判別器(図2における250)か否かの判定である。これは演算部103から弱判別器のIDとして受け取ったclf_IDを元にN-1と比較すれば良い。ステップS1703―Yesの場合、判定の対象となる弱判別器は最終判別器ではないので、処理は終了する。一方、ステップS1703―Noの場合、処理中の弱判別器は最終弱判別器なので、PASSであった場合に、検出対象物である顔を「検出した」として処理をする。ステップS1704では、最終弱判別器をPASSして、判定状態は確定する。判定状態を示す情報win_status2[win_ID]の値を0に設定する。また、「検出した」ことを記憶するため、検出結果を示す情報win_detect[win_ID]の値を1に設定し、処理は終了する。各ウィンドウ画像の検出結果として、例えば、0は検出なし、1は検出ありを表すものとする。
【0057】
ステップS1705は、S1702の判定で、弱判別器の判定結果がNGとなった場合、部分画像には対象物(特定パターン)は含まれない判定が確定するので、判定状態を示す情報win_status2[win_ID]の値を0に設定して処理は終了する。ステップS1005の処理(図17)が終了すると処理は、図10のステップS1006に進められ、判定部状態更新処理の結果が指示部101に通知される。
【0058】
ステップS1007では、有効なウィンドウ画像があるかどうかをwin_status2[]配列を参照し、有効なウィンドウ画像がない場合(S1007−N0)、処理はステップS1008に進められ、そうでなければ処理はS1001に戻る。ステップS1008では、結果を送信したかどうか判別するのに用いるフラグsend_flagの値を調べて処理を分岐する。フラグsend_flagの値が1であれば(S1008−Yes)、処理はステップS1009に進められ、そうでなければ処理はステップS1001に戻される(S1008−No)。
【0059】
ステップS1009では、判定結果の出力処理を実行する。これはwin_detect[]配列の各要素の値に基づき、各ウィンドウ画像の領域検出の有無を出力する。出力は任意の形式で良い。
【0060】
ステップS1010では、send_flagの値を0に設定する。これは、図16で説明した通り、ウィンドウ画像の検出が全て終了した後も、演算部103からはジョブの演算結果が入力される可能性があるためである。この処理は、図10のフローチャートにおいてステップS1008へのパスを複数回通る可能性があるので、その最初の一回のみにステップS1009の処理を実行するようにするためのものである。ステップS1010を実行した後は、ステップS1008の判定は偽(S1008−No)になりステップS1009は実行されない。また、init_flagとして1が与えられるとステップS1004の初期化処理によってsend_flagが1に設定され、S1008の判定が再度、真になるようになる。
【0061】
演算部103の処理は、公知の検出処理における弱判別処理であれば任意のもので良い。概略としては次のように構成する。まず、メモリ102内に設定された複数のウィンドウ画像のうち、指示部101から判別ジョブとして指定されたウィンドウ画像のIDに基づきウィンドウ画像を特定する。
【0062】
続いて、そのウィンドウ画像の内部の一部もしくは全部の画素値を参照するとともに、判別ジョブの弱判別器のIDに基づき、パラメータ供給部105から対応するパラメータの供給を受け、画素値とパラメータを用いた演算を行う。そして、その演算値を判別ジョブの情報とともに判定部104に出力するよう構成する。
【0063】
メモリ102は指示部101の指示に応じて、外部から画像データを取得し、保持する。メモリ102は、例えば、図11のように複数のウィンドウ画像を保持することが可能である。メモリ102内に複数のウィンドウ画像が同時に存在していればよく、必ずしも図11のようにウィンドウが他のウィンドウと重複している必要はない。
【0064】
パラメータ供給部105は演算部103の要求に応じて、判別処理用のパラメータを提供する。パラメータ供給部105が全ての判別処理用のパラメータを保持するよう構成するか、あるいは外部に大容量のメモリを設け、パラメータ供給部105はその大容量メモリに対するキャッシュのように動作するように構成してもよい。パラメータ供給部105をキャッシュのように動作するように構成する場合、好ましくは、指示部101からの出力を、パラメータ供給部105が直接受け取るように構成する。さらに、指示部101は処理の進行を予測して、事前にパラメータ供給部105に必用とされる判別処理用のパラメータをプリフェッチするよう構成することも可能である。指示部101が処理の進行を予測するとは、例えば、図2乃至図4のような処理に対し、例えば、演算部103に対して指示を行う弱判別器よりN個(N≧0)先の弱判別器で用いる判別パラメータのプリフェッチをパラメータ供給部105に指示するようにする。Nは予め定めておけば良いし、なんらかの方法により弱判別器処理の進行を予測して動的に決定するように構成しても良い。
【0065】
(弱判別器の処理)
次に、弱判別器の処理について、図12乃至図15を参照して説明する。弱判別器の処理方式は、図2、3に示した、直線状に接続した弱判別器の判別処理に適用可能であるが、この例に限定されず、図4に示した分岐構造を有する判別処理に対しても適用可能である。直線状に接続した弱判別器(例えば、弱判別器(1、0)・・・(1、P−1)、または、弱判別器(2、0)・・・(2、Q−1)、または、弱判別器(3、0)・・・(3、R−1))の判別処理に適用可能である。また、その分岐先の弱判別器の処理を、仮想的に別検出ウィンドウ画像に対する処理のように扱えば、分岐が多段であっても適用可能であることは自明である。
【0066】
説明の簡単のため、検出対象のウィンドウ画像が対象物(特定パターン)を含むか含まないかが確定したことを、検出対象のウィンドウ画像に対する処理が終了したとも言うこととする。図12乃至図15では判別ジョブが、指示部101、演算部103および判定部104で処理される際のタイムチャートを示している。図12乃至図15において横軸は時間軸である。図12では時刻t0〜t15、図13乃至図15においてはt0〜t18の時刻の間にそれぞれ15個、18個のタイムスロットがあり、各タイムスロットで各部が1つの判別ジョブを処理するものとする。タイムスロットに配置された四角は判別ジョブをあらわし、Wxはウィンドウ画像のIDがxであること、Syは弱判別器のIDがyであることを示している。また、説明の簡単のため、ウィンドウ画像のグループ中には最大でIDが0から2(0≦x≦3)の3ウィンドウ画像あることとする。また、弱判別器はIDが0から5(0≦y≦5)の6個あり、弱判別器S5をPASSした場合、対象物(特定パターン)有りと検出するものとする。また、ウィンドウ画像のID =Wx、弱判別器のID= Syの判別ジョブを、Wx/Syとも表記する。
【0067】
図12乃至図15では、最初のウィンドウ画像のグループに対して実線の四角で表された判別ジョブの処理を行う。そして全てのウィンドウ画像に対する処理が終了したことを検出した時に、指示部101のt13の時点でメモリの入れ替えを行い、次のウィンドウ画像のグループとして破線の四角で表された判別ジョブを行うものとする。ただし、図13は1つのウィンドウ画像のグループに関するタイムチャートで、2つ目のウィンドウ画像のグループ、すなわち、図12に示すような破線のウィンドウ画像のグループの判別ジョブは書かれていない。また、網掛けで表された四角は、実際にはその判別ジョブに対応する弱判別器より前の弱判別器で処理が終了した判別ジョブであることを示している。図12乃至図15では、方式1〜方式3の3つの方式による処理の違いを図示している。方式1〜方式3はそれぞれ以下のように動作する。
【0068】
(方式1)
ある検出対象のウィンドウ画像に対する処理が終了するまで投機的に判別ジョブを指示する。判別処理が終了したことを検知した時点で、そのウィンドウ画像に対する判別処理の指示を止め、次のウィンドウ画像の判別ジョブを指示する。
【0069】
(方式2)
各ウィンドウ画像に対する同一の弱判別器に対する判別ジョブを指示し、その判別結果を待つ。判別結果を受け取り、そのウィンドウ画像の処理が終了していなかったら、次の弱判別器に対する判別ジョブを指示する。
【0070】
(方式3)
本発明の実施形態による画像データの処理はこの方式によるものである。判別ジョブの指示の時点で判別処理が終了していないウィンドウ画像を巡回しながら次に行うべき判別器に対する判別ジョブを指示する。
【0071】
図12では、最初のウィンドウ画像のグループ中にW0〜W2の3つのウィンドウ画像が存在し、次の表1のような判定結果である場合の例を示している。
【0072】
【表1】
【0073】
表1のケースを方式1で処理すると、表2のようになる。表2は方式1による処理について、時刻と、指示部および判定部の処理と、をまとめたものである。表2において、セルが網掛けになっている部分は、その判別ジョブに対応する弱判別器より前の弱判別器で処理が終了した判別ジョブである。また、空白のセルは判別ジョブを処理していない状態を示している。
【0074】
【表2】
【0075】
表2の例の場合、方式1による方式でウィンドウ画像のグループの処理終了を検知するのは、時刻t13のタイミングである。
【0076】
表1のケースを方式2で処理すると、表3のようになる。表3は方式2による処理について、時刻と、指示部および判定部の処理と、をまとめたものである。表3の表記は表2の表記と同様である。
【0077】
【表3】
【0078】
表3の例の場合、方式2による方式でウィンドウ画像のグループの処理終了を検知するのは、時刻t12のタイミングになる。
【0079】
次に、図12の方式3について説明する。本方式においては、ウィンドウ画像を処理する順序を規定する。指示部101は外部からの制御入力により、複数のウィンドウ画像について、判別処理の実行順を設定することが可能である。設定された実行順は、判別ジョブに含まれ、指示部101から演算部103に送信される。演算部103は、判別ジョブに含まれる実行順に従い、複数のウィンドウ画像(部分画像)の判別処理を行う。図18(a)、(b)、(c)は、ウィンドウ画像に対する判別処理の実行順を例示する図であり、図12の例にあわせて、3つのウィンドウ画像(W0〜W2)の例を示している。図18のウィンドウ画像1801〜1803が、図12のウィンドウ画像W0〜W2に対応するものとする。図18(a)、(b)、(c)において、実線の矩形は処理済みでないウィンドウ画像を示しており、破線の矩形は処理済みのウィンドウ画像を示している。尚、ウィンドウ画像の数は、3つの例に限定されるものではなく、4つ以上の場合でも循環の順序を規定できるのは明らかである。
【0080】
図18(a)は、全てのウィンドウ画像が処理済みでない状態を例示している。例えば、判別処理を行う弱判別器を弱判別器Siとする。この弱判別器Siで最初に処理されるウィンドウ画像をウィンドウ画像W0(1801)とする。ウィンドウ画像W0(1801)の次に処理の対象となるのはウィンドウ画像W1(1802)である。ウィンドウ画像W1(1802)の次に処理の対象となるのはウィンドウ画像W2(1803)である。ウィンドウ画像W0(1801)〜W2(1803)が弱判別器Siの判別処理で処理済みとならない場合、ウィンドウ画像W0(1801)〜W2(1803)は、次の弱判別器Si+1で処理される。次の弱判別器Si+1で処理される処理の対象となるのは、順番が循環してウィンドウ画像W2(1803)の次の順番にあたるウィンドウ画像W0(1801)から順番に、ウィンドウ画像W0(1801)、W1(1802)、W2(1803)が処理される。図18(b)は、ウィンドウ画像W1(1802)が処理済となった状態を例示しており、処理済となったウィンドウ画像W1(1802)は、次の判別処理の対象から除外される。指示部101は、複数のウィンドウ画像(部分画像)のうち判別処理の打ち切り(終了)と判定されたウィンドウ画像(部分画像)が少なくとも1つ含まれている場合、ウィンドウ画像(例えば、W1)を除いた新たな実行順(W0→W2)を設定する。この場合、ウィンドウ画像W0(1801)の次に処理の対象となるのは、ウィンドウ画像W2(1803)である。図18(c)は、処理済でないウィンドウ画像が1つになった状態を例示している。例えば、判別処理を行う弱判別器Siとして、ウィンドウ画像W0(1801)が弱判別器Siの判別処理により処理済みとならなければ、次の弱判別器Si+1での判別処理の対象もウィンドウ画像W0(1801)である。
【0081】
表1のケースを方式3で処理すると、表4のようになる。表4は方式3による処理について、時刻と、指示部および判定部の処理と、をまとめたものである。表4の表記は表2の表記と同様である。
【0082】
【表4】
【0083】
時刻t4で判別器S1による判別ジョブを指示したウィンドウ画像W1の次に処理の対象となるのはウィンドウ画像W2である。時刻t4におけるW2/S0の判定結果(NG)により、ウィンドウ画像W2に対する判別処理が終了していることは、指示部101において、時刻t5の時点で既知になっている。この場合、指示部101は、更に、次のウィンドウ画像W0を探し、ウィンドウ画像W0が処理済でないのでW0/S2の判別ジョブを再度指示する(t5)。
【0084】
同様に時刻t8では、時刻t7で弱判別器S3による判別ジョブを再度指示したウィンドウ画像W0の次に処理の対象となるのはウィンドウ画像W1である。時刻t6におけるW1/S1の判定結果(NG)により、ウィンドウ画像W1に対する判別処理は終了している。時刻t7、t8では判別処理が終了していないウィンドウ画像に対する判別処理が順次出力される(WO/S3、WO/S4)。この間、ウィンドウ画像W1、W2は判別対象から除外される。時刻t9のタイミングにおいて、判定部104はWO/S3の判定結果(NG)を確定し、時刻t10のタイミングにおいて、指示部101は、ウィンドウ画像のグループの処理終了を検知する。以上のように、図12の例の場合、本発明の実施形態にかかる方式3が最も早くウィンドウ画像のグループを処理することができる。
【0085】
図13は別の例として、表5のように、ウィンドウ画像W0〜W2の全てにおいて、検出対象物(特定パターン)が含まれると判定される場合の例を示している。
【0086】
【表5】
【0087】
図13の場合、3つの方法ともウィンドウ画像のグループの処理が終了したことを時刻t18のタイミングで、指示部101が検知しており、この例に関しては3つの方式で処理速度に差はない。
【0088】
図14は、更に別の例として、表6のように、ウィンドウ画像W0〜W2の全てが最初の弱判別器S0でNGと判定された場合の例を示している。
【0089】
【表6】
【0090】
表6のケースを方式1で処理すると、表7のようになる。表7は方式1による処理について、時刻と、指示部および判定部の処理と、をまとめたものである。表7の表記は表2の表記と同様である。
【0091】
【表7】
【0092】
表7に示すように、方式1では、ウィンドウ画像W0〜W2のグループの処理終了を指示部101が検知するのは、時刻t9のタイミングである。
【0093】
表1のケースを方式2で処理すると、表8のようになる。表8は方式2による処理について、時刻と、指示部および判定部の処理と、をまとめたものである。表8の表記は表2の表記と同様である。
【0094】
【表8】
【0095】
表8に示すように、方式2では、ウィンドウ画像W0〜W2のグループの処理終了を指示部101が検知するのは、時刻t5のタイミングである。
【0096】
表1のケースを方式3で処理すると、表9のようになる。表9は方式3による処理について、時刻と、指示部および判定部の処理と、をまとめたものである。表9の表記は表2の表記と同様である。
【0097】
【表9】
【0098】
表9に示すように、方式3では、ウィンドウ画像W0〜W2のグループの処理終了を指示部101が検知するのは、時刻t5のタイミングである。方式3は、方式2と同じ時刻t5のタイミングで、ウィンドウ画像のグループの処理を終了することができる。また方式3は、方式1に比べて速くウィンドウ画像のグループを処理することができる。
【0099】
図15は、更に別の例として、表10のように、ウィンドウ画像W0〜W2のうち、ウィンドウ画像W0とW1が最初の弱判別器S0でNGと判定され、処理終了していないウィンドウが1つだけという場合の例を示している。
【0100】
【表10】
【0101】
表10のケースを方式1で処理すると、表11のようになる。表11は方式1による処理について、時刻と、指示部および判定部の処理と、をまとめたものである。表11の表記は表2の表記と同様である。
【0102】
【表11】
【0103】
表11に示すように、方式1では、ウィンドウ画像W0〜W2のグループの処理終了を指示部101が検知するのは、時刻t10のタイミングである。
【0104】
表10のケースを方式2で処理すると、表12のようになる。表12は方式2による処理について、時刻と、指示部および判定部の処理と、をまとめたものである。表12の表記は表2の表記と同様である。
【0105】
【表12】
【0106】
表12に示すように、方式2では、ウィンドウ画像W0〜W2のグループの処理終了を指示部101が検知するのは、時刻t8のタイミングである。
【0107】
表10のケースを方式3で処理すると、表13のようになる。表13は方式3による処理について、時刻と、指示部および判定部の処理と、をまとめたものである。表13の表記は表2の表記と同様である。
【0108】
【表13】
【0109】
表13に示すように、方式3では、ウィンドウ画像W0〜W2のグループの処理終了を指示部101が検知するのは、時刻t7のタイミングである。方式3は、方式1、2に比べて速くウィンドウ画像のグループを処理することができる。
【0110】
図12乃至図15に示す例において、方式3は、他の方式1、2に比べて同等もしくは高速にウィンドウ画像のグループを処理することができる。
【0111】
本実施形態ではメモリ102が保持するのは静止画の画像データであるとして説明を行ったが、動画像データであっても良い。複数フレームをメモリ102に格納し、それらを参照して処理を行うことも可能である。また、メモリ102は単一のメモリにより構成されるものに限定されず、複数のメモリで構成してもよい。例えば、3つのメモリで構成し、それぞれに注目しているフレームと、その前後のフレームを格納するように構成することも可能である。その場合、演算部103が複数のメモリのそれぞれに対して判別処理を実行する際に、各メモリのウィンドウ画像と判別処理で参照すべきパラメータとを対応付けるための対応付け情報が、パラメータ供給部105に付与されている。パラメータ供給部105がパラメータを演算部103に供給する際に、対応付け情報もあわせて演算部103に供給される。演算部103はこの対応付け情報を参照して、各メモリとの対応付けを判断し、ウィンドウ画像の判別処理で参照すべきパラメータを特定する。
【0112】
実施形態として、静止画像を空間軸による2次元データ、動画像をさらに時間軸を加えた3次元データの例を説明した。この他、更に多次元のデータ、あるいは、音声などの1次元データ(音声の場合、時間軸を入れ2次元とする場合もある)にも本発明を適用することは可能である。また、本実施形態では、特定オブジェクトを検出するとして説明したが、一般的な多次元データである場合、これは多次元データの特定パターンを検出することに相当する。
【0113】
また、本実施形態ではメモリ102が保持するものは画像データそのものであったが、例えば、前処理として特徴量(例えばエッジ量、フレーム間差分など)を抽出し、それをメモリ部に保持するようにしてもよい。なお特徴量を1種類に限る必要性はなく、例えば、1つの画像から複数の特徴量を抽出し、それを用いて判定処理を行うことも可能である。この場合、動画像データの場合のように、パラメータ保持部が保持するパラメータにはどの特徴量を参照するのかという情報を付与し、それに基づいて演算部103が参照すべきデータを特定するように構成する。更には、本実施形態ではメモリ102が通常の画像データを保持するものとして説明したが、積分画像(Integral Image)の形式で保持することも可能である。
【0114】
以上説明したように、本実施形態によれば、入力画像データに対し、複数の弱判別器を直列に接続して構成される判別処理を効率良く行うことができる。
【0115】
(その他の実施例)
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
【特許請求の範囲】
【請求項1】
複数の部分画像のそれぞれに検出の対象となる特定パターンが含まれるか否かの判別処理の実行を指示する指示手段と、
前記指示手段の前記指示に従って、前記判別処理の継続または終了を判定するための閾値を含む、前記判別処理のためのパラメータを用いて、前記複数の部分画像のそれぞれについて前記判別処理を行う演算手段と、
前記演算手段による演算結果から、前記複数の部分画像のそれぞれに対する判別処理が終了したか否かを判定する判定手段と、を備え、
前記指示手段は、前記判定手段により、前記複数の部分画像の少なくとも1つに対して前記判別処理が終了していないと判定された場合、当該終了していないと判定された部分画像に対する判別処理の実行を再度指示し、
当該再度指示に従って、前記演算手段は、前記パラメータとは異なるパラメータを用いて、当該終了していないと判定された部分画像についての判別処理を実行することを特徴とする画像処理装置。
【請求項2】
前記判定手段により、前記複数の部分画像の少なくとも1つに対して前記判別処理が終了したと判定された場合、前記指示手段は、当該終了したと判定された部分画像を、前記再度指示により実行される判別処理の対象から除外する指示を前記演算手段に出力することを特徴とする請求項1に記載の画像処理装置。
【請求項3】
前記判定手段により、前記複数の部分画像の全てについて前記判別処理が終了したと判定された場合、前記指示手段は、前記複数の部分画像についての判別ジョブを終了することを特徴とする請求項1または2に記載の画像処理装置。
【請求項4】
前記指示手段からの指示に応じて、外部から画像データを取得して、前記取得した前記画像データを記憶する記憶手段を更に備え、
前記演算手段は、前記記憶手段から前記画像データを構成する複数の部分画像を前記判別処理のために取得することを特徴とする請求項1乃至3のいずれか1項に記載の画像処理装置。
【請求項5】
前記判定手段により、前記複数の部分画像の全てについて前記判別処理が終了したと判定された後、前記指示手段は、前記記憶手段に前記画像データの入れ替えを指示し、
前記記憶手段は、前記画像データの入れ替えを指示により、新たな画像データを取得して、当該取得した画像データを記憶することを特徴とする請求項4に記載の画像処理装置。
【請求項6】
前記指示手段は、前記指示に含まれる情報として、前記複数の部分画像について、前記判別処理の実行順を設定し、前記演算手段は、前記実行順に従って、前記判別処理を実行することを特徴とする請求項1乃至5のいずれか1項に記載の画像処理装置。
【請求項7】
前記指示手段は、前記複数の部分画像の少なくとも1つに対して前記判別処理が終了したと判定された場合、当該部分画像を除いた新たな実行順を設定することを特徴とする請求項6に記載の画像処理装置。
【請求項8】
画像処理装置で実行される画像データの処理方法であって、
前記画像処理装置の指示手段が、複数の部分画像のそれぞれに検出の対象となる特定パターンが含まれるか否かの判別処理の実行を指示する指示工程と、
前記画像処理装置の演算手段が、前記指示工程の前記指示に従って、前記判別処理の継続または終了を判定するための閾値を含む、前記判別処理のためのパラメータを用いて、前記複数の部分画像のそれぞれについて前記判別処理を行う演算工程と、
前記画像処理装置の判定手段が、前記演算工程による演算結果から、前記複数の部分画像のそれぞれに対する判別処理が終了したか否かを判定する判定工程と、を有し、
前記指示工程は、前記判定工程により、前記複数の部分画像の少なくとも1つに対して前記判別処理が終了していないと判定された場合、当該終了していないと判定された部分画像に対する判別処理の実行を再度指示し、
当該再度指示に従って、前記演算工程は、前記パラメータとは異なるパラメータを用いて、当該終了していないと判定された部分画像についての判別処理を実行することを特徴とする画像データの処理方法。
【請求項9】
コンピュータを、請求項1乃至7のいずれか1項に記載の画像処理装置の各手段として機能させるためのプログラム。
【請求項1】
複数の部分画像のそれぞれに検出の対象となる特定パターンが含まれるか否かの判別処理の実行を指示する指示手段と、
前記指示手段の前記指示に従って、前記判別処理の継続または終了を判定するための閾値を含む、前記判別処理のためのパラメータを用いて、前記複数の部分画像のそれぞれについて前記判別処理を行う演算手段と、
前記演算手段による演算結果から、前記複数の部分画像のそれぞれに対する判別処理が終了したか否かを判定する判定手段と、を備え、
前記指示手段は、前記判定手段により、前記複数の部分画像の少なくとも1つに対して前記判別処理が終了していないと判定された場合、当該終了していないと判定された部分画像に対する判別処理の実行を再度指示し、
当該再度指示に従って、前記演算手段は、前記パラメータとは異なるパラメータを用いて、当該終了していないと判定された部分画像についての判別処理を実行することを特徴とする画像処理装置。
【請求項2】
前記判定手段により、前記複数の部分画像の少なくとも1つに対して前記判別処理が終了したと判定された場合、前記指示手段は、当該終了したと判定された部分画像を、前記再度指示により実行される判別処理の対象から除外する指示を前記演算手段に出力することを特徴とする請求項1に記載の画像処理装置。
【請求項3】
前記判定手段により、前記複数の部分画像の全てについて前記判別処理が終了したと判定された場合、前記指示手段は、前記複数の部分画像についての判別ジョブを終了することを特徴とする請求項1または2に記載の画像処理装置。
【請求項4】
前記指示手段からの指示に応じて、外部から画像データを取得して、前記取得した前記画像データを記憶する記憶手段を更に備え、
前記演算手段は、前記記憶手段から前記画像データを構成する複数の部分画像を前記判別処理のために取得することを特徴とする請求項1乃至3のいずれか1項に記載の画像処理装置。
【請求項5】
前記判定手段により、前記複数の部分画像の全てについて前記判別処理が終了したと判定された後、前記指示手段は、前記記憶手段に前記画像データの入れ替えを指示し、
前記記憶手段は、前記画像データの入れ替えを指示により、新たな画像データを取得して、当該取得した画像データを記憶することを特徴とする請求項4に記載の画像処理装置。
【請求項6】
前記指示手段は、前記指示に含まれる情報として、前記複数の部分画像について、前記判別処理の実行順を設定し、前記演算手段は、前記実行順に従って、前記判別処理を実行することを特徴とする請求項1乃至5のいずれか1項に記載の画像処理装置。
【請求項7】
前記指示手段は、前記複数の部分画像の少なくとも1つに対して前記判別処理が終了したと判定された場合、当該部分画像を除いた新たな実行順を設定することを特徴とする請求項6に記載の画像処理装置。
【請求項8】
画像処理装置で実行される画像データの処理方法であって、
前記画像処理装置の指示手段が、複数の部分画像のそれぞれに検出の対象となる特定パターンが含まれるか否かの判別処理の実行を指示する指示工程と、
前記画像処理装置の演算手段が、前記指示工程の前記指示に従って、前記判別処理の継続または終了を判定するための閾値を含む、前記判別処理のためのパラメータを用いて、前記複数の部分画像のそれぞれについて前記判別処理を行う演算工程と、
前記画像処理装置の判定手段が、前記演算工程による演算結果から、前記複数の部分画像のそれぞれに対する判別処理が終了したか否かを判定する判定工程と、を有し、
前記指示工程は、前記判定工程により、前記複数の部分画像の少なくとも1つに対して前記判別処理が終了していないと判定された場合、当該終了していないと判定された部分画像に対する判別処理の実行を再度指示し、
当該再度指示に従って、前記演算工程は、前記パラメータとは異なるパラメータを用いて、当該終了していないと判定された部分画像についての判別処理を実行することを特徴とする画像データの処理方法。
【請求項9】
コンピュータを、請求項1乃至7のいずれか1項に記載の画像処理装置の各手段として機能させるためのプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【公開番号】特開2012−247940(P2012−247940A)
【公開日】平成24年12月13日(2012.12.13)
【国際特許分類】
【出願番号】特願2011−118396(P2011−118396)
【出願日】平成23年5月26日(2011.5.26)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
【公開日】平成24年12月13日(2012.12.13)
【国際特許分類】
【出願日】平成23年5月26日(2011.5.26)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
[ Back to top ]