(57)【特許請求の範囲】
【請求項１】
画像データが示す画像からオブジェクトを検出するオブジェクト検出方法であって、
前記画像データに設定された検出窓の内側にオブジェクトが存在するか否かを判定する第１判定手段および第２判定手段を用意し、
前記画像データにおける複数の位置に設定された前記検出窓について前記第１判定手段による判定を実行させ、
前記第１判定手段によってオブジェクトが存在すると判定された位置同士の間の複数の位置の前記検出窓について前記第２判定手段による判定を実行させ、
前記第１判定手段によってオブジェクトが存在しないと判定された位置同士の間の位置の前記検出窓について前記第２判定手段による判定を実行させず、
前記第１判定手段によってオブジェクトが存在すると判定された位置と前記第１判定手段によってオブジェクトが存在しないと判定された位置の間の位置においては、前記第１判定手段によってオブジェクトが存在すると判定された位置から前記第１判定手段によってオブジェクトが存在しないと判定された位置に近づくように順に前記検出窓を移動させながら、前記検出窓について前記第２判定手段による判定を実行させるとともに前記第２判定手段によってオブジェクトが存在しないと最初に判定された位置から前記第１判定手段によってオブジェクトが存在しないと判定された位置との間の位置については前記第２判定手段による判定を実行させない、
ことを特徴とするオブジェクト検出方法。
【請求項２】
前記第１判定手段よりも前記第２判定手段の方が前記検出窓に対するオブジェクトの位置についての判定精度が高く、前記第２判定手段よりも前記第１判定手段の方が前記検出窓に対するオブジェクトの位置の変動に対するロバスト性が高いことを特徴とする請求項１に記載のオブジェクト検出方法。
【請求項３】
前記第２判定手段よりも前記第１判定手段の方が同一の前記検出窓について判定を実行させた場合の処理負担が少ないことを特徴とする請求項１または請求項２のいずれか一項に記載のオブジェクト検出方法。
【請求項４】
前記第１判定手段は、前記画像データにおける複数の大きさに設定された前記検出窓について判定を実行し、
前記第１判定手段によってオブジェクトが存在すると判定された大きさ同士の間の複数の大きさの前記検出窓について前記第２判定手段による判定を実行させ、
前記第１判定手段によってオブジェクトが存在しないと判定された大きさ同士の間の大きさの前記検出窓について前記第２判定手段による判定を実行させず、
前記第１判定手段によってオブジェクトが存在すると判定された大きさと前記第１判定手段によってオブジェクトが存在しないと判定された大きさの間の大きさにおいては、前記第１判定手段によってオブジェクトが存在しないと判定された大きさよりも前記第１判定手段によってオブジェクトが存在すると判定された大きさに近い大きさを優先させて設定した前記検出窓について前記第２判定手段による判定を実行させることを特徴とする請求項１〜請求項３のいずれか一項に記載のオブジェクト検出方法。
【請求項５】
画像データが示す画像からオブジェクトを検出するオブジェクト検出装置であって、
前記画像データに設定された検出窓の内側にオブジェクトが存在するか否かを判定する第１判定手段および第２判定手段と、
前記画像データにおける複数の位置に設定された前記検出窓について前記第１判定手段による判定を実行させる第１顔検出手段と、
前記第１判定手段によってオブジェクトが存在すると判定された位置同士の間の複数の位置の前記検出窓について前記第２判定手段による判定を実行させ、
前記第１判定手段によってオブジェクトが存在しないと判定された位置同士の間の位置の前記検出窓について前記第２判定手段による判定を実行させず、
前記第１判定手段によってオブジェクトが存在すると判定された位置と前記第１判定手段によってオブジェクトが存在しないと判定された位置の間の位置においては、前記第１判定手段によってオブジェクトが存在すると判定された位置から前記第１判定手段によってオブジェクトが存在しないと判定された位置に近づくように順に前記検出窓を移動させながら、前記検出窓について前記第２判定手段による判定を実行させるとともに前記第２判定手段によってオブジェクトが存在しないと最初に判定された位置から前記第１判定手段によってオブジェクトが存在しないと判定された位置との間の位置については前記第２判定手段による判定を実行させない第２顔検出手段とを具備することを特徴とするオブジェクト検出装置。
【請求項６】
画像データが示す画像からオブジェクトを検出する機能をコンピュータに実行させるためのコンピュータ読み取り可能なオブジェクト検出プログラムであって、
前記画像データに設定された検出窓の内側にオブジェクトが存在するか否かを判定する第１判定機能および第２判定機能と、
前記画像データにおける複数の位置に設定された前記検出窓について前記第１判定機能による判定を実行させる第１顔検出機能と、
前記第１判定機能によってオブジェクトが存在すると判定された位置同士の間の複数の位置の前記検出窓について前記第２判定機能による判定を実行させ、
前記第１判定機能によってオブジェクトが存在しないと判定された位置同士の間の位置の前記検出窓について前記第２判定機能による判定を実行させず、
前記第１判定機能によってオブジェクトが存在すると判定された位置と前記第１判定機能によってオブジェクトが存在しないと判定された位置の間の位置においては、前記第１判定機能によってオブジェクトが存在すると判定された位置から前記第１判定機能によってオブジェクトが存在しないと判定された位置に近づくように順に前記検出窓を移動させながら、前記検出窓について前記第２判定機能による判定を実行させるとともに前記第２判定機能によってオブジェクトが存在しないと最初に判定された位置から前記第１判定機能によってオブジェクトが存在しないと判定された位置との間の位置については前記第２判定機能による判定を実行させない第２顔検出機能とをコンピュータに実行させることを特徴とするコンピュータ読み取り可能なオブジェクト検出プログラム。
【請求項７】
画像データが示す画像を印刷する印刷装置であって、
前記画像データに設定された検出窓の内側にオブジェクトが存在するか否かを判定する第１判定手段および第２判定手段と、
前記画像データにおける複数の位置に設定された前記検出窓について前記第１判定手段による判定を実行させる第１顔検出手段と、
前記第１判定手段によってオブジェクトが存在すると判定された位置同士の間の複数の位置の前記検出窓について前記第２判定手段による判定を実行させ、
前記第１判定手段によってオブジェクトが存在しないと判定された位置同士の間の位置の前記検出窓について前記第２判定手段による判定を実行させず、
前記第１判定手段によってオブジェクトが存在すると判定された位置と前記第１判定手段によってオブジェクトが存在しないと判定された位置の間の位置においては、前記第１判定手段によってオブジェクトが存在すると判定された位置から前記第１判定手段によってオブジェクトが存在しないと判定された位置に近づくように順に前記検出窓を移動させながら、前記検出窓について前記第２判定手段による判定を実行させるとともに前記第２判定手段によってオブジェクトが存在しないと最初に判定された位置から前記第１判定手段によってオブジェクトが存在しないと判定された位置との間の位置については前記第２判定手段による判定を実行させない第２顔検出手段と、
前記第２判定手段による各判定に応じた画像処理を実行した前記画像データを印刷する印刷手段とを具備することを特徴とする印刷装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、オブジェクト検出方法、オブジェクト検出装置、オブジェクト検出プログラムおよび印刷装置に関し、特に画像に含まれるオブジェクトを検出するオブジェクト検出方法、オブジェクト検出装置、オブジェクト検出プログラムおよび印刷装置に関する。
【背景技術】
【０００２】
画像データに含まれる顔画像を検出し、その検出結果を利用して、印刷処理や補正処理や画像入力機器の動作制御が行われている。検出窓を画像データのあらゆる位置に移動させながら、検出窓において顔画像が存在するか否かを判定していくことにより、画像データにおける不特定の位置に存在する顔画像を検出することができる（特許文献１、参照。）かかる文献（図６、参照。）においては、画像データの隅から順に検出窓を移動させている。
【特許文献１】特開２００７−４８１０８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
検出窓において顔画像が存在するか否かを判定するための処理負担は小さいものでないため、検出窓を画像データのあらゆる位置に移動させることにより、全体の検出処理の処理負担は大きくなるという問題があった。画像データのすべての位置（画素）について検出窓を設定すれば、検出漏れを防止することができるが、処理負担が著しく増大してしまう。逆に、画像データの一部の位置（画素）のみについて検出窓を設定すれば、処理負担を軽減することができるが、検出漏れが発生してしまう。
【０００４】
本発明は、前記課題にかんがみてなされたもので、効率よく、かつ、漏れのないオブジェクトを検出するオブジェクト検出方法、オブジェクト検出装置、オブジェクト検出プログラムおよび印刷装置の提供を目的とする。
【課題を解決するための手段】
【０００５】
上記課題を解決するために、本発明は、画像データが示す画像からオブジェクトを検出するにあたり、まず前記画像データに設定された検出窓の内側にオブジェクトが存在するか否かを判定する第１判定手段および第２判定手段を用意する。前記画像データにおける複数の位置に設定された前記検出窓について前記第１判定手段による判定を実行させる。そして、前記第１判定手段によってオブジェクトが存在すると判定された位置同士の間の複数の位置の前記検出窓については、前記第２判定手段による判定を実行させる。すなわち、前記第１判定手段によってオブジェクトが存在すると判定された位置同士の間の位置の前記検出窓においては、前記オブジェクトが存在する可能性が高いと考えることができるため、前記第２判定手段を実行させるようにする。反対に、前記第１判定手段によってオブジェクトが存在しないと判定された位置同士の間の位置の前記検出窓については、前記第２判定手段による判定を実行させないようにする。すなわち、前記第１判定手段によってオブジェクトが存在しないと判定された位置同士の間の位置の前記検出窓においては、前記オブジェクトが存在する可能性が低いと考えることができるため、前記第２判定手段を実行させないようにしても、検出漏れが生じる可能性は低い。
【０００６】
さらに、前記第１判定手段によってオブジェクトが存在すると判定された位置と前記第１判定手段によってオブジェクトが存在しないと判定された位置の間の位置においては、前記第１判定手段によってオブジェクトが存在しないと判定された位置よりも前記第１判定手段によってオブジェクトが存在すると判定された位置に近い位置を優先させて前記検出窓を設定し、当該設定した前記検出窓について前記第２判定手段による判定を実行させる。このように、すべての位置について前記第１判定手段と前記第２判定手段による判定を実行させるのではなく、予め前記第２判定手段の結果に応じて絞り込まれた位置について前記第２判定手段による判定を実行させるため、効率的なオブジェクト検出を実現させることができる。なお、前記オブジェクトは、特定の画像的特徴を有するものであればよく、例えば人物・動物の顔や顔器官等を検出することができる。
【０００７】
さらに、前記第１判定手段によってオブジェクトが存在しないと判定された位置よりも前記第１判定手段によってオブジェクトが存在すると判定された位置に近い位置を優先させる具体的手法の一例として、以下の手法を採用することができる。すなわち、前記第１判定手段によってオブジェクトが存在すると判定された位置から前記第１判定手段によってオブジェクトが存在しないと判定された位置に近づくように順に前記検出窓を移動させながら前記第２判定手段による判定を実行させる。これにより、オブジェクトが存在する可能性が高いと考えられる位置から順に前記検出窓を移動させることができる。さらに、このように前記検出窓を移動させる際に、前記第２判定手段によってオブジェクトが存在しないと最初に判定された位置から前記第１判定手段によってオブジェクトが存在しないと判定された位置との間の位置については前記第２判定手段による判定を実行させないようにする。すなわち、前記第２判定手段によってオブジェクトが存在しないと最初に判定された位置よりも、前記第１判定手段によってオブジェクトが存在しないと判定された位置に近い側においては、オブジェクトが存在する可能性が低いと考えられる。このような位置については、検出漏れが生じる可能性が低いため、前記第２判定手段の判定を行わないようにする。
【０００８】
なお、前記第１判定手段と前記第２判定手段の判定特性の好適な例として、前記第１判定手段よりも前記第２判定手段の方が前記検出窓に対するオブジェクトの位置についての判定精度が高く、かつ、前記第２判定手段よりも前記第１判定手段の方が前記検出窓に対するオブジェクトの位置の変動に対するロバスト性が高いものを適用するのが望ましい。このようにすることにより、まず前記第１判定手段によって、オブジェクトが存在しそうな位置を大まかに絞り込み、その後、オブジェクトが存在しそうな位置について厳密に前記第２判定手段による判定を実行させることができる。
【０００９】
さらに、前記第１判定手段と前記第２判定手段として好適なものの別の例として、前記第２判定手段よりも前記第１判定手段の方が同一の前記検出窓について判定を実行させた場合の処理負担が少ないものを適用してもよい。前記第２判定手段における処理負担は大きいものであるが、上述したように前記第２判定手段を実行させる前記検出窓の位置は絞り込まれているため、処理を効率的なものとすることができる。
【００１０】
以上においては、前記第２判定手段を実行させる前記検出窓の位置を絞り込む態様のものを説明したが、同様に前記第２判定手段を実行させる前記検出窓のサイズを絞り込むようにしてもよい。すなわち、前記画像データにおける複数のサイズに設定された前記検出窓について前記第１判定手段による判定を実行させる。そして、前記第１判定手段によってオブジェクトが存在すると判定されたサイズ同士の間の複数のサイズの前記検出窓については、前記第２判定手段による判定を実行させる。すなわち、前記第１判定手段によってオブジェクトが存在すると判定されたサイズ同士の間のサイズの前記検出窓においては、サイズがマッチする前記オブジェクトが存在する可能性が高いと考えることができるため、前記第２判定手段を実行させるようにする。反対に、前記第１判定手段によってオブジェクトが存在しないと判定されたサイズ同士の間のサイズの前記検出窓については、前記第２判定手段による判定を実行させないようにする。すなわち、前記第１判定手段によってオブジェクトが存在しないと判定されたサイズ同士の間のサイズの前記検出窓においては、サイズがマッチする前記オブジェクトが存在する可能性が低いと考えることができるため、前記第２判定手段を実行させないようにしても、検出漏れが生じる可能性は低い。
【００１１】
さらに、前記第１判定手段によってオブジェクトが存在すると判定された大きさと前記第１判定手段によってオブジェクトが存在しないと判定された大きさの間の大きさにおいては、前記第１判定手段によってオブジェクトが存在しないと判定された大きさよりも前記第１判定手段によってオブジェクトが存在すると判定された大きさに近い大きさを優先させて前記検出窓を設定し、当該設定した前記検出窓について前記第２判定手段による判定を実行させる。このように、すべての大きさについて前記第１判定手段と前記第２判定手段による判定を実行させるのではなく、予め前記第１判定手段の結果に応じて絞り込まれた大きさについて前記第２判定手段による判定を実行させるため、効率的なオブジェクト検出を実現させることができる。
【００１２】
さらに、本発明の技術的思想は、具体的なオブジェクト検出方法にて具現化されるのみならず、当該方法をオブジェクト検出装置において具現化することもできる。すなわち、上述したオブジェクト検出方法が行う各工程に対応する手段を有するオブジェクト検出装置としても本発明を特定することができる。むろん、上述したオブジェクト検出装置がプログラムを読み込んで上述した各手段を実現する場合には、当該各手段に対応する機能を実行させるプログラムや当該プログラムを記録した各種記録媒体においても本発明の技術的思想が具現化できることは言うまでもない。なお、本発明のオブジェクト検出装置は、単一の装置のみならず、複数の装置によって分散して存在可能であることはいうまでもない。また、プリンタ等の印刷装置やデジタルスチルカメラ等の画像入力装置において本発明のオブジェクト検出方法を実現するようにしてもよい。
【発明を実施するための最良の形態】
【００１３】
以下、下記の順序に従って本発明の実施形態を説明する。
１．画像処理装置の構成：
２．画像処理：
２−１．第１顔検出処理：
２−２．絞り込み処理：
２−３．第２顔検出処理：
２−４．顔判定処理：
２−５．肌色補正処理および印刷処理：
３．変形例：
３−１．変形例１：
３−２．変形例２：
【００１４】
１．画像処理装置の構成
図１は、本発明の一実施形態にかかる画像処理装置を具体的に実現するコンピュータの構成を示している。同図において、コンピュータ１０はＣＰＵ１１とＲＡＭ１２とＲＯＭ１３とハードディスクドライブ（ＨＤＤ）１４と汎用インターフェイス（ＧＩＦ）１５とビデオインターフェイス（ＶＩＦ）１６と入力インターフェイス（ＩＩＦ）１７とバス１８とから構成されている。バス１８は、コンピュータ１０を構成する各要素１１〜１７の間でのデータ通信を実現するものであり、図示しないチップセット等によって通信が制御されている。ＨＤＤ１４には、オペレーティングシステム（ＯＳ）を含む各種プログラムを実行するためのプログラムデータ１４ａが記憶されており、当該プログラムデータ１４ａをＲＡＭ１２に展開しながらＣＰＵ１１が当該プログラムデータ１４ａに準じた演算を実行する。
【００１５】
また、ＨＤＤ１４には、デジタルスチルカメラやスキャナによって画像入力された画像データ１４ｂが記憶されている。ＧＩＦ１５は、例えばＵＳＢ規格に準じたインターフェイスを提供するものであり、外部のプリンタ２０をコンピュータ１０に接続させている。ＶＩＦ１６はコンピュータ１０を外部のディスプレイ４０に接続し、ディスプレイ４０に画像を表示するためのインターフェイスを提供する。ＩＩＦ１７はコンピュータ１０を外部のキーボード５０ａとマウス５０ｂに接続し、キーボード５０ａとマウス５０ｂからの入力信号をコンピュータ１０が取得するためのインターフェイスを提供する。
【００１６】
図２は、コンピュータ１０において実行されるプログラムのソフトウェア構成を示している。同図において、オペレーティングシステム（ＯＳ）ＰＧ１と画像処理アプリケーションＰＧ２とプリンタドライバＰＧ３が実行されている。ＯＳ ＰＧ１は各プログラム間のインターフェイスを提供し、プリンタドライバＰＧ３はプリンタ２０を制御するための処理を実行する。画像処理アプリケーションＰＧ２は、作業画像取得部ＰＧ２ａと検出窓設定部ＰＧ２ｂと窓画像取得部ＰＧ２ｃと第１特徴量算出部ＰＧ２ｄ１と第２特徴量算出部ＰＧ２ｄ２と第１顔判定部ＰＧ２ｅ１と第２顔判定部ＰＧ２ｅ２と画質調整部ＰＧ２ｆとから構成されている。画像処理アプリケーションＰＧ２を構成する各モジュールＰＧ２ａ〜ＰＧ２ｆが実行する処理の詳細については後述する画像処理の流れとともに説明する。
【００１７】
２．画像処理
図３は、画像処理の全体の流れを示している。同図において、画像処理は第１顔検出処理（ステップＳ１００）と、絞り込み処理（ステップＳ２００）と、第２顔検出処理（ステップＳ３００）と、肌色補正処理（ステップＳ５００）と印刷処理とから構成されている。また、第１顔検出処理（ステップＳ１００）と第２顔検出処理（ステップＳ３００）においてそれぞれ後述する検出窓ＳＷが設定されるごとに、第１顔判定処理（ステップＳ６００）と第２顔判定処理（ステップＳ７００）が実行され、それぞれ検出窓ＳＷに顔画像が存在するか否かの判定結果を出力する構成となっている。
【００１８】
２−１．第１顔検出処理
図４は、第１顔検出処理の流れを示し、図５は作業画像データＷＤを示している。ステップＳ１１０では、作業画像取得部ＰＧ２ａが所定のＵＩ画面をディスプレイ４０に表示させるとともに、キーボード５０ａとマウス５０ｂから操作を受け付ける。それにより、ＨＤＤ１４等に記憶された複数の画像データ１４ｂのなかからユーザーが印刷したい画像データ１４ｂを取得する。作業画像取得部ＰＧ２ａが画像データ１４ｂの解像度を変換することにより、３２０画素×２４０画素（ＱＶＧＡ）の作業画像データＷＤを生成する。
【００１９】
図５において、作業画像データＷＤに正方形状領域の検出窓（検出領域）ＳＷが設定されており、第１顔検出処理おいては検出窓設定部ＰＧ２ｂが検出窓ＳＷを作業画像データＷＤにおいて隈無く移動させていく。なお、作業画像データＷＤの長手方向をｘ軸とし、短手方向をｙ軸と表すものとし、ｘ軸とｙ軸の原点は作業画像データＷＤの左上隅位置とする。ステップＳ１２０においては、検出窓設定部ＰＧ２ｂが検出窓ＳＷの中心位置Ｐを指定するための方向カウンタｎx，ｎyをリセットする。各方向カウンタｎx，ｎyは、整数値であり、リセットによって０とされる。ステップＳ１３０においては、ｙ方向カウンタｎyに１を加算する。同様にステップＳ１４０において、ｘ方向カウンタｎxに１を加算する。次のステップＳ１５０においては、検出窓設定部ＰＧ２ｂが検出窓ＳＷの中心位置Ｐの座標を下記の（１）式に基づいて算出する。
【数１】
0004983682.tif 000002
上記の（１）式において、ｄx，ｄyは検出窓ＳＷの中心位置Ｐの各方向への単位移動距離（画素数）を示す一定の移動間隔を表しており、移動間隔ｄx，ｄyと方向カウンタｎx，ｎyをそれぞれ乗算することにより、検出窓ＳＷの中心位置Ｐのｘ，ｙ座標を算出する。移動間隔ｄx，ｄyは下記の（２）式によって定義されるものとする。
【数２】
0004983682.tif 000003
上記の（２）式において、検出窓ＳＷの中心位置Ｐのｙ方向への移動間隔ｄyは検出窓ＳＷのサイズＳの４％とされている。上記の（２）式によって移動間隔ｄy＜１となる場合は、ｄy＝１とする。また、ｙ方向カウンタｎsの上限値は、上記の（１）式による検出窓ＳＷの中心位置Ｐのｙ座標が作業画像データＷＤの内側に収まるように、２４０／（０．０４×Ｓ）（整数部分）とされる。なお、本実施形態では単一のサイズＳの検出窓ＳＷを設定するものを例示して説明するが、実際にはサイズＳを変化させながら顔検出を行っていく。一方、ｘ方向への移動間隔ｄxは検出窓ＳＷのサイズＳの５０％とされている。ｘ方向カウンタｎxの上限値は、３２０／（０．５×Ｓ）（整数部分）とされる。ステップＳ１６０においては、ステップＳ１５０においてそれぞれ算出した中心位置Ｐを中心としてサイズＳの検出窓ＳＷを生成するとともに、検出窓ＳＷの一部が作業画像データＷＤの外側にはみ出ていないか否かを判定する。
【００２０】
図６は、ステップＳ１６０における判定の様子を模式的に示している。同図に示すように、各方向カウンタｎx，ｎyの変動によって検出窓ＳＷの位置と大きさがシフトするため、ある各方向カウンタｎx，ｎyの組み合わせにおいては検出窓ＳＷの一部が作業画像データＷＤの外側にはみ出ることとなる。このような場合に正常な顔検出を行うことができないとして、当該各方向カウンタｎx，ｎyで特定される検出窓ＳＷについての第１顔判定処理をスキップさせる。
【００２１】
以上のようにして、ステップＳ１６０にてスキップされた場合を除いて、各方向カウンタｎx，ｎyが設定できると検出窓ＳＷの大きさと位置が検出窓設定部ＰＧ２ｂによって一意に特定されたこととなる。ステップＳ１７０においては、窓画像取得部ＰＧ２ｃが現在決定されている検出窓ＳＷの内側の画像データを抽出し、当該画像データを窓画像データＸＤとして取得する。取得した窓画像データＸＤは、第１特徴量算出部ＰＧ２ｄ１および第１顔判定部ＰＧ２ｅ１に出力され、窓画像データＸＤについての第１顔判定処理をステップＳ６００にて実行する。ステップＳ１７０において、検出窓設定部ＰＧ２ｂは第１顔判定処理によって得られた当該検出窓ＳＷにおける顔画像の有無を取得する。なお、第１顔判定処理の詳細については後述する。
【００２２】
ステップＳ１８０においては、ｘ方向カウンタｎx＝３２０／（０．５×Ｓ）（整数部分）であるか否かを判定する。すなわち、現在の検出窓ＳＷのｙ方向の位置における左端から右端までひととおり検出窓ＳＷを設定したか否かを判定する。ｘ方向カウンタｎx＜３２０／（０．５×Ｓ）（整数部分）である場合には、ステップＳ１４０に戻り、ｘ方向カウンタｎxを加算する。これにより、ｘ方向右側に移動間隔ｄxだけ進んだ中心位置Ｐに検出窓ＳＷを設定することができる。
【００２３】
ｘ方向カウンタｎx＝３２０／（０．５×Ｓ）であるとき、作業画像データＷＤの右端付近に検出窓ＳＷの中心位置Ｐが移動することとなり、当該ｙ方向の位置における移動を終了させる。ステップＳ１８５においてはｘ方向カウンタｎxを０にリセットさせ、ステップＳ１９０にてｙ方向カウンタｎy＝２４０／（０．０４×Ｓ）（整数部分）であるかを判定する。ここで、ｙ方向カウンタｎy＜２４０／（０．０４×Ｓ）（整数部分）であれば、ステップＳ１３０に戻る。ステップＳ１３０ではｙ方向カウンタｎyに１を加算し、再度、ステップＳ１４０〜ステップＳ１８０を繰り返して実行する。これにより、一段進んだｙ方向に位置において検出窓ＳＷの中心位置Ｐをｘ方向に移動させていくことができる。
【００２４】
図７は、以上の処理を実行することにより、順次移動していく検出窓ＳＷの様子を示している。上記の（１）式によって検出窓ＳＷの中心位置Ｐを決定しているため、作業画像データＷＤにおいて検出窓ＳＷの中心位置Ｐは、ｘ方向に移動間隔ｄxの周期で分布し、ｙ方向に移動間隔ｄyの周期で分布する格子点上に移動していくこととなる。最終的に、ｙ方向カウンタｎy＝２４０／（０．０４×Ｓ）（整数部分）となったとき、作業画像データＷＤの最下端まで検出窓ＳＷの中心位置Ｐを設定することができたとして、第１顔検出処理を終了させる。
【００２５】
２−２．絞り込み処理：
図８は、検出窓設定部ＰＧ２ｂが第１顔検出処理の後に実行させる絞り込み処理の流れを示している。上述した第１顔検出処理のステップＳ１７０において検出窓設定部ＰＧ２ｂが窓画像データＸＤを出力するごとに、第１顔判定処理が実行され、その判定結果が検出窓ＳＷの位置情報とともにＷＲＡＭ１２やＨＤＤ１４に記憶されている。ステップＳ２１０においては、各中心位置Ｐの検出窓ＳＷについて行われた第１顔判定処理による顔画像の有無の判定結果を作業画像データＷＤにおいてマッピングする。
【００２６】
図９Ａは、ｙ方向のある位置（ｙ＝１０）について第１顔判定処理による顔画像の有無の判定結果をマッピングした様子を示している。同図において、第１顔判定処理によって顔画像が存在すると判定された検出窓ＳＷの中心位置Ｐを○でプロットし、第１顔判定処理によって顔画像が存在しないと判定された検出窓ＳＷの中心位置Ｐを●でプロットしている。以下、第１顔判定処理によって顔画像が存在すると判定された検出窓ＳＷの中心位置Ｐを存在位置と表記し、第１顔判定処理によって顔画像が存在しないと判定された検出窓ＳＷの中心位置Ｐを不存在位置と表記する。なお、移動間隔ｄx，ｄyをそれぞれ５画素，１画素としたときの例を示しており、○と●でプロットされた存在位置と不存在位置との間には４画素分の位置が存在している。ステップＳ２２０においては、存在位置同士がｘ方向において隣接している区間（○と○が隣接する区間）を検出し、当該区間を検出対象区間（太線で図示。）とする。さらに、不存在位置同士がｘ方向において隣接している区間（●と●が隣接する区間）を検出し、当該区間を検出対象外区間（破線で図示。）とする。また、存在位置と、不存在位置がｘ方向において隣接している区間（○と●が隣接する区間）を検出し、当該区間を未確定区間（細線で図示。）とする。
【００２７】
ステップＳ２３０においては、以上のようにして定義された各区間内の各位置（画素）についてそれぞれ異なる規則を適用して移動順序を設定する。図９Ａにおいては、ステップＳ２３０にて設定される移動順序が示されている。基本的には、作業画像データＷＤの左上端の画素の移動順序を１とし、ｘ方向右側に１画素進むに連れて１ずつ移動順序が大きくなっていく。そして、右端の画素まで移動順序が設定できると、一段下の画素について同様に右端から左端に向かって昇順となるように移動順序を設定することを繰り返すことにより、すべての画素に移動順序を設定する。そのため、図９Ｂに示すように、検出対象外区間（破線で図示。）と検出対象外区間（破線で図示。）においては左端の画素の移動順序をｕとすると、右に１画素ずつずれるにつれて順序が１ずつ加算されていく。しかし、未確定区間（細線で図示。）においては、顔画像が存在すると判定された存在位置（○で図示）から顔画像が存在しないと判定された不存在位置（●で図示）に向かう方向（○から●に向かう方向）に昇順となるように各画素の移動順序を設定する。従って、図９Ｂの最下段に図示するように、不存在位置（●で図示）が左端に位置し、存在位置（○で図示）が右端に位置する未確定区間（細線で図示。）においては、左に１画素ずつずれるにつれて順序が１ずつ加算されていくこととなる。
【００２８】
また、ステップＳ２４０では、検出対象区間（太線で図示。）の各画素、および、顔画像が存在すると判定された存在位置と重複する画素については、検出フラグＴｆを添付する。一方、検出対象外区間（破線で図示。）の各画素、および、顔画像が存在しないと判定された不存在位置（●で図示）と重複する画素については、非検出フラグＦｆを添付する。さらに、未確定区間（細線で図示。）の各画素については、未確定フラグＮｆを添付する。ステップＳ２５０においては、以上のようにして設定した各画素の位置と移動順序と各フラグＴｆ，Ｎｆ，Ｆｆを格納した検出位置テーブルＴＢを生成し、ＲＡＭ１２やＨＤＤ１４に記憶させる。
【００２９】
図１０は、検出位置テーブルＴＢを示している。同図において、図９Ａに示したｙ＝１１のマップに対応する部分が示されている。各移動順序の昇順に各画素の位置を示すｘｙ座標が対応付けられて格納されているとともに、各画素について対応する区間のフラグＴｆ，Ｎｆ，Ｆｆが添付されている。ｙ方向の位置が単一であれば、基本的に移動順序が後になればｘ方向の位置が右方向に進む関係となるが、９Ｂで示すように存在位置（○で図示）が右端に位置する未確定区間（細線で図示。）については移動順序が後になるとｘ方向の位置が左方向に戻ることとなる（図１０において二重枠で図示した部分。）。このような検出位置テーブルＴＢによれば、後述する第２顔検出処理において、どのような順序でどの位置に検出窓ＳＷの中心位置Ｐを設定すべきかを特定することができる。なお、検出位置テーブルＴＢに格納された移動順序の値は、後述する第２顔検出処理にて使用される位置カウンタｎp（整数値）に対応している。検出位置テーブルＴＢが生成できると、ステップＳ３００において第２顔検出処理を実行させる。
【００３０】
２−３．第２顔検出処理：
図１１は、第２顔検出処理の流れを示している。ステップＳ３１０において、検出窓設定部ＰＧ２ｂが位置カウンタｎpを０にリセットする。ステップＳ３２０においては、位置カウンタｎpに１を加算する。ステップＳ３３０においては、検出窓設定部ＰＧ２ｂが検出位置テーブルＴＢおよび作業画像データＷＤを取得する。ステップＳ３４０においては、検出位置テーブルＴＢを参照して位置カウンタｎpに対応付けられた位置のｘｙ座標を取得する。ステップＳ３４５においては、当該取得した位置に対して非検出フラグＦｆが添付されているか否かを判定する。非検出フラグＦｆが添付されている場合には、ステップＳ３２０に戻り、位置カウンタｎpに１を加算する。
【００３１】
一方、ステップＳ３４０において取得した位置に対して検出フラグＴｆと未確定フラグＮｆが添付されている場合には、ステップＳ３５０にて、当該位置のｘｙ座標を中心位置Ｐとする検出窓ＳＷを検出窓設定部ＰＧ２ｂが設定する。ステップＳ３６０においては、窓画像取得部ＰＧ２ｃが現在設定されている検出窓ＳＷの内側の窓画像データＸＤを取得する。取得した窓画像データＸＤは、第２特徴量算出部ＰＧ２ｄ２および第２顔判定部ＰＧ２ｅ２に出力され、窓画像データＸＤについての第２顔判定処理をステップＳ７００にて実行する。ステップＳ７００において顔画像が存在すると判定された場合、そのときの検出窓ＳＷの位置をＲＡＭ１２に記憶させる。なお、第２顔判定処理の詳細については後述する。
【００３２】
ステップＳ３７０において、現在の検出窓ＳＷの位置に未確定フラグＮｆが添付されており、かつ、第２顔判定処理（ステップＳ７００）にて現在の検出窓ＳＷの窓画像データＸＤに顔画像が存在しないと判定されたかを判断する。そして、現在の検出窓ＳＷの位置に未確定フラグＮｆが添付されており、かつ、第２顔判定処理（ステップＳ７００）にて現在の検出窓ＳＷの窓画像データＸＤに顔画像が存在しないと判定された場合には、検出位置テーブルＴＢにおいて、現在の位置の移動順序の直後（図１１の検出位置テーブルＴＢにおける直下）に連続（単一の場合も含む）して存在する未確定フラグＮｆが添付された位置について、未確定フラグＮｆを非検出フラグＦｆに更新する（ステップＳ３８０）。ステップＳ３９０においては、位置カウンタｎpが検出位置テーブルＴＢに記述された最終の移動順序に対応するものであるか否かを判定する。位置カウンタｎpが最終のものでない場合には、ステップＳ３２０に戻り、位置カウンタｎpを加算する。このようにすることにより、位置カウンタｎpが最終のものとなるまで、順次検出窓ＳＷの中心位置Ｐを移動させていくことができる。
【００３３】
図１２Ｂは以上の第２顔検出処理において移動する検出窓ＳＷの様子を、第１顔検出処理（ステップＳ１００）における第１顔判定処理（ステップＳ６００）による判定結果（１２Ａ）と対比して示している。同図おいては、図９Ａに示したｙ＝１１のマップに対応する部分について検出窓ＳＷが移動する様子を示している。ここで、第１顔判定処理によって顔画像が存在しないと不存在位置（●で図示）、および、当該不存在位置同士の間の検出対象外区間（破線で図示。）の位置について非検出フラグＦｆが添付されているため、これらの位置については第２顔判定処理（ステップＳ７００）がスキップされることとなる。なお、スキップされた位置は−で図示し、第２顔判定処理が実行された位置は◎で図示する。一方、第１顔判定処理によって顔画像が存在すると判定された存在位置（○で図示）および、当該存在位置同士の間の検出対象区間（太線で図示。）の位置について検出フラグＴｆが添付されているため、当該位置については検出窓ＳＷの中心位置Ｐが各画素について設定され、第２顔判定処理（ステップＳ７００）が実行されることとなる。
【００３４】
第１顔判定処理（ステップＳ６００）において顔画像が存在すると判定された存在位置と、顔画像が存在しないと判定された不存在位置との間の未確定区間（細線で図示。）においては、存在位置から不存在位置に向かう方向（○から●に向かう方向）に昇順となるように移動順序が設定されている。そのため、未確定区間においては、存在位置から近い方の各位置を優先させて検出窓ＳＷの中心位置Ｐが設定され、第２顔判定処理（ステップＳ７００）を実行することができる。ただし、当該未確定区間のいずれかの位置について、第２顔判定処理にて顔画像が存在しないと判定された段階で、当該未確定区間の未処理の各位置についての未確定フラグＮｆを非検出フラグＦｆに更新するため、それ以降の未確定区間の位置については第２顔判定処理を実行させなくすることができる。図１２Ｃにおいては、第２顔判定処理による判定結果を示しており、未確定区間にて顔画像が存在しないと第２顔判定処理によって判定された位置（●で図示）よりも後の移動順序とされた位置については、図１２Ｂに示すようにスキップされている。すなわち、第１顔判定処理において顔画像が存在すると判定された存在位置から近い位置の順に第２顔判定処理を実行させるが、第２顔判定処理にて顔が検出されなかった位置よりも、存在位置から遠くにある位置については、第２顔判定処理を実行させないようにしている。
【００３５】
第１顔判定処理（ステップＳ６００）によって顔画像が存在しないと判定された不存在位置同士の検出対象外区間においては、それ以上、第２顔判定処理（ステップＳ７００）を実行しても顔が検出される可能性は低いと考えることができる。従って、検出対象外区間について第２顔判定処理を実行させないことにより、無駄な処理を防止することができる。これに対して、第１顔判定処理によって顔画像が存在すると判定された存在位置同士の検出対象区間においては、第２顔判定処理において顔が検出される可能性が高いと考えることができる。従って、検出対象区間のすべての位置について第２顔判定処理を実行させることによろい、漏れのない顔検出を実現することができる。
【００３６】
さらに、第１顔判定処理によって顔画像が存在すると判定された存在位置と顔画像が存在しないと判定された不存在位置との間の未確定区間においては、存在位置に近いほど第２顔判定処理において顔が検出される可能性が高いということができる。従って、存在位置に近い位置から先に第２顔判定処理を実行させることにより、早期に顔を検出することができる。さらに、未確定区間について第２顔判定処理を実行させた結果、顔画像が存在しないと判定された位置よりも、第１顔判定処理によって顔画像が存在すると判定された存在位置から遠い位置については、顔画像が存在する可能性が低いと考えることができる。従って、このような位置について第２顔判定処理を実行させないことにより、無駄な処理を防止することができる。
【００３７】
ステップＳ３９０において、位置カウンタｎpが最終のものであると判定された場合には、ステップＳ３９５において第２顔判定処理（ステップＳ７００）によってＲＡＭ１２に記憶された各位置についての判定結果のマップを取得する。そして、第２顔判定処理による判定結果のマップに基づいて最終的な顔検出の結果を出力する。図１２Ｃに示すように、検出対象外区間および未確定区間の一部については、検出窓ＳＷの中心位置Ｐの設定がスキップされているため、第２顔判定処理（ステップＳ７００）の判定結果が得られていない（−で図示。）。一方、検出対象区間および未確定区間の一部については、各画素について第２顔判定処理による顔画像が存在する（○で図示。）か、存在しない（●で図示。）かの判定結果が各画素について得られている。
【００３８】
ここで、検出窓ＳＷのサイズＳよりも狭い範囲において顔画像が存在すると判定された画素が連続する場合、複数の顔画像が存在しているのではなく、単一の顔画像が複数の隣接位置において検出されたものと考えられる。従って、このような場合には、顔画像が存在すると判定された隣接画素の中央の画素の位置を顔画像が存在する位置であるとしたり、顔画像が存在すると判定された隣接画素のうち最も第２顔判定処理において高い評価であった画素（後述するニューラルネットワークＮＮ２の出力値が大きかったもの）画素の位置を顔画像が存在する位置であるとする。なお、第１顔判定処理において存在位置と判定されたにもかかわらず、第２顔判定処理において顔画像が存在しないと判定される場合も考えられる。このような場合には、第２顔判定処理の方が位置に関する精度が高いため、第２顔判定処理の結果を優先するものとする。以上によって、作業画像データＷＤにおいて顔画像が存在する位置が最終的に特定できたこととなり、当該位置についての情報をＲＡＭ１２に記憶させて処理を終了させる。
【００３９】
２−４．顔判定処理
図１３は、第１顔判定処理と第２顔判定処理の流れを示している。なお、第１顔判定処理と第２顔判定処理の実行に必要なプログラムコードをＣＰＵ１１が読み込むことにより、本発明の第１判定手段と第２判定手段とが用意されることとなる。同図に示すように第１顔判定処理と第２顔判定処理は同様の処理とされている。ステップＳ６１０，Ｓ６２０にて窓画像データＸＤを取得すると、次のステップＳ６２０，Ｓ７２０において第１特徴量算出部ＰＧ２ｄ１と第２特徴量算出部ＰＧ２ｄ２がそれぞれステップＳ１７０，Ｓ３６０にて取得した窓画像データＸＤから複数の特徴量を算出する。これらの特徴量は、窓画像データＸＤに対して各種のフィルタを適用し、当該フィルタ内の輝度平均やエッジ量やコントラスト等の画像的特徴を示す特徴量（平均値や最大値や最小値や標準偏差等）を算出することにより得られる。
【００４０】
図１４は、窓画像データＸＤから特徴量を算出する様子を示している。同図において、窓画像データＸＤに対して多数のフィルタＦＴが用意されており、各フィルタＦＴを順次窓画像データＸＤに適用し、各フィルタＦＴ内の画像的特徴に基づいて、複数の特徴量ＣＡ，ＣＡ，ＣＡ…を算出する。第１特徴量算出部ＰＧ２ｄ１と第２特徴量算出部ＰＧ２ｄ２が算出する特徴量ＣＡ，ＣＡ，ＣＡ…は互いに異なっており、第１特徴量算出部ＰＧ２ｄ１よりも第２特徴量算出部ＰＧ２ｄ２によって算出される特徴量ＣＡ，ＣＡ，ＣＡ…の数の方が多くされている。特徴量ＣＡ，ＣＡ，ＣＡ…が算出できると、ステップＳ６３０，７３０において、第１顔判定部ＰＧ２ｅ１と第２顔判定部ＰＧ２ｅ２がそれぞれ特徴量ＣＡ，ＣＡ，ＣＡ…を予め用意されたニューラルネットワークＮＮに入力し、その出力として顔画像が存在する／しないの判定結果を算出する。
【００４１】
図１５は、第１顔判定部ＰＧ２ｅ１と第２顔判定部ＰＧ２ｅ２がそれぞれ使用するニューラルネットワークＮＮ１，ＮＮ２の構造の一例を対比して示している。ニューラルネットワークＮＮ１，ＮＮ２は、前段層のユニットＵの値の線形結合（添え字ｉは前段層のユニットＵの識別番号。）によって後段層のユニットＵの値が決定される基本構造を有している。さらに、線形結合によって得られた値をそのまま次の層のユニットＵの値としてもよいが、線形結合によって得られた値を例えばハイパボリックタンジェント関数のような非線形関数によって変換して次の層のユニットＵの値を決定することにより、非線形特性を与えてもよい。第１顔判定部ＰＧ２ｅ１が使用するニューラルネットワークＮＮ１は３層構造となっており、第２顔判定部ＰＧ２ｅ２が使用するニューラルネットワークＮＮ２は４層構造となっている。ニューラルネットワークＮＮ１，ＮＮ２は、最外の入力層と出力層と、これらに挟まれた中間層から構成されている。各特徴量ＣＡ，ＣＡ，ＣＡ…がニューラルネットワークＮＮの入力層に入力可能となっており、出力層では出力値Ｋ（０〜１に正規化された値）を出力することが可能となっている。なお、第１特徴量算出部ＰＧ２ｄ１よりも第２特徴量算出部ＰＧ２ｄ２によって算出される特徴量ＣＡ，ＣＡ，ＣＡ…の数の方が多いため、第２顔判定部ＰＧ２ｅ２が使用するニューラルネットワークＮＮ２の方が入力層を構成するユニットＵの数が多く複雑な構造となっている。
【００４２】
第１顔判定部ＰＧ２ｅ１と第２顔判定部ＰＧ２ｅ２は、それぞれニューラルネットワークＮＮ１，ＮＮ２の出力値Ｋが０．５以上であれば窓画像データＸＤに顔画像が存在すると判定し、出力値Ｋが０．５未満であれば窓画像データＸＤに顔画像が存在しないと判定する（ステップＳ６４０，Ｓ７４０）。このようなニューラルネットワークＮＮ１，ＮＮ２をＨＤＤ１４に予め用意しておけば、顔画像が窓画像データＸＤに存在するか否かを特徴量ＣＡ，ＣＡ，ＣＡ…に基づいて判定することができる。
【００４３】
図１６は、ニューラルネットワークＮＮ１，ＮＮ２を学習する様子を模式的に示している。なお、学習方法は同様であるためニューラルネットワークＮＮ１のみ図示するものとする。本実施形態では、誤差逆伝搬（error back propagation）法によって学習を行うことにより、各ユニットＵの数や、各ユニットＵ間における線形結合の際の重みｗの大きさやバイアスｂの値が最適化される。ニューラルネットワークＮＮ２の方が構造が複雑であるため、最適化すべき重みｗの大きさやバイアスｂの数も多くなる。誤差逆伝搬法による学習においては、まず各ユニットＵ間における線形結合の際の重みｗの大きさやバイアスｂの値を適当な値に初期設定する。そして、顔画像が存在しているか否かが既知の学習用画像データについてステップＳ６２０，Ｓ７２０と同様の手順で特徴量ＣＡ，ＣＡ，ＣＡ…を算出し、当該特徴量ＣＡ，ＣＡ，ＣＡ…を初期設定されたニューラルネットワークＮＮ１，ＮＮ２に入力し、その出力値Ｋを取得する。
【００４４】
本実施例において、顔画像が存在している学習用画像データについて出力値Ｋとして１が出力されるのが望ましく、顔画像が存在していない学習用画像データについて出力値Ｋとして０が出力されるのが望ましい。しかしながら、各ユニットＵ間における線形結合の際の重みｗの大きさやバイアスｂの値を適当な値に初期設定したに過ぎないため、実際の出力値Ｋと理想的な値との間には誤差が生じることとなる。このような誤差を極小化させる各ユニットＵについての重みｗやバイアスｂを、勾配法等の数値最適化手法を用いて算出する。以上のような誤差は、後段の層から前段の層に伝搬され、後段のユニットＵについて重みｗやバイアスｂから順に最適化されていく。
【００４５】
図１７は、ニューラルネットワークＮＮ１，ＮＮ２のそれぞれの学習において使用される学習用画像データを対比して示している。学習用画像データは、多数用意されており、多種多様な顔をそれぞれ１ずつ含んでいる。ニューラルネットワークＮＮ２の学習に使用される学習用画像データは顔の中心位置が学習用画像データの左右中央に厳密に一致するように作成されている。一方、ニューラルネットワークＮＮ１の学習に使用される学習用画像データは顔の中心位置が学習用画像データの左右中央から多少ずれたものも含むように作成されている。すなわち、ニューラルネットワークＮＮ１，ＮＮ２の学習に使用される学習用画像データに含まれる顔の中心位置の標準偏差は、ニューラルネットワークＮＮ１の方が大きくなるようにされている。以上のようにして学習したニューラルネットワークＮＮによれば、窓画像データＸＤに顔画像が存在している場合の特徴量ＣＡ，ＣＡ，ＣＡ…に対して１に近い出力値Ｋを得ることができ、窓画像データＸＤに顔画像が存在していない場合の特徴量ＣＡ，ＣＡ，ＣＡ…に対して０に近い出力値Ｋを得ることができる。従って、適当な閾値０．５によって閾値判定を行うことにより、窓画像データＸＤに顔画像が存在しているか否かを判定することができる（ステップＳ６４０，Ｓ７４０）。
【００４６】
ステップＳ６４０，Ｓ７４０において窓画像データＸＤについて顔画像が存在すると判定された場合、そのときの窓画像データＸＤが得られた検出窓ＳＷの中心位置をＲＡＭ１２に記憶させ（ステップＳ６５０，Ｓ７５０）、リターンする。このようにしてＲＡＭ１２に記憶された第１顔判定処理の判定結果に応じて前記絞り込み処理を実行することができるし、第２顔判定処理の判定結果に応じて後述する肌色調整および印刷処理を実行させることができる。一方、ステップＳ６３０，Ｓ７３０において窓画像データＸＤについて顔画像が存在しないと判定された場合、そのままリターンする。上述した第１顔検出処理と第２顔検出処理によって検出窓ＳＷを移動させながら窓画像データＸＤが第１特徴量算出部ＰＧ２ｄ１，第１特徴量算出部ＰＧ２ｄ１に順次出力されるため、その度にステップＳ６１０〜Ｓ６４０，Ｓ７１０〜Ｓ７４０の処理を実行させる。これにより、順次移動される検出窓ＳＷのそれぞれについて顔画像の存在の有無を判定していくことができる。
【００４７】
学習画像データに含まれる顔の左右方向の位置にばらつきを持たせた第１顔判定処理の方が判定する顔が検出窓ＳＷの中央から左右に多少ぶれていても顔画像が存在すると判定することができる。また、第１顔判定処理で使用するニューラルネットワークＮＮ１の構造は簡易であり、算出すべき特徴量ＣＡ，ＣＡ，ＣＡ…の数も第２顔判定処理よりも少ないため、高速な判定を行うことができる。一方、学習画像データに含まれる顔の左右方向の位置のばらつきが小さい第２顔判定処理の方が高精度に顔画像の位置を特定することができる。すなわち、検出窓ＳＷの左右中央に顔画像が存在する場合のみ顔画像が存在すると判定することとなるため、厳密に顔画像の位置を特定することができる。
【００４８】
作業画像データＷＤのすべての位置について第２顔判定処理を実行させれば、精度よい顔検出を実現させることができるが、第２顔判定処理による処理負担が膨大となる。そこで、図１２にて説明したように、予め顔画像の左右のぶれに対するロバスト性に優れ、かつ、処理負担の少ない第１顔判定処理を作業画像データＷＤの全体わたる低密度の位置について実行させることにより、顔画像が存在しそうな領域を絞り込むことができる。そして、顔画像が存在しそうな領域についてのみ第２顔判定処理を実行させるため、第２顔判定処理を実行させる回数を低減することができ、処理効率を向上させることができる。第２顔判定処理は、高い位置精度を有するため、絞り込まれた領域において厳密に顔画像が存在する位置を最終的に特定することができる。第２顔判定処理は顔画像の左右のぶれに対するロバスト性が低いが、第２顔検出処理では絞り込まれた領域において細かく（高密度に）検出窓ＳＷを移動させるため、顔画像が存在する位置を漏れなく特定することができる。
【００４９】
２−５．肌色補正処理および印刷処理：
図１８は、画質調整部ＰＧ２ｅが実行する肌色補正処理の流れを示している。上述した第２顔検出処理の位置について検出窓ＳＷの設定が完了したと判定すると、第２顔検出処理が終了するとともに、第２顔検出処理と同期して実行される第２顔判定処理も終了する。ステップＳ５１０においては、第２顔検出処理と第２顔判定処理の終了を検出し、調整対象の画像データ１４ｂを取得する。ここで取得される画像データ１４は、第１顔検出処理と第２顔検出処理の対象となった画像データ１４ｂである。ステップＳ５２０においては、顔画像が存在すると判定された検出窓ＳＷの位置と一定のサイズＳをＲＡＭ１２から読み出す。ステップＳ５３０においては、顔画像が存在すると判定された検出窓ＳＷに対応する領域を画像データ１４ｂにおいて特定する。検出窓ＳＷの位置がＲＡＭ１２から取得されているため、これを画像データ１４ｂの画像サイズに換算することにより、検出窓ＳＷに対応する領域を特定することができる。
【００５０】
ステップＳ５４０においては、ステップＳ５３０にて特定した領域に含まれる肌色画素の色をサンプリングし、当該色に基づいて画像データ１４ｂに対する色調調整のためのパラメータを設定する。ここでは、まずステップＳ５４０にて特定した領域に含まれる肌色画素を、各画素の色彩値（例えばＲＧＢ値やＨＳＶ値）に基づいて特定し、当該色彩値を肌色として好ましいものに補正するための調整パラメータを算出する。調整パラメータは、例えばカラーバランスやホワイトバランスや明るさを調整するためのパラメータが該当する。予め肌色として好ましい色彩値がＨＤＤ１４に記憶されており、各肌色画素の色彩値が好ましい色彩値に近づくような調整パラメータが算出される。検出窓ＳＷによって顔画像が存在する領域が予め特定されているため、顔画像の肌色画素に基づいて調整パラメータを得ることができる。なお、顔画像が存在すると判定された検出窓ＳＷが複数検出された場合には、平均的な調整パラメータの算出を実行する。調整パラメータが算出できると、ステップＳ５４５において、当該調整パラメータに基づく各画素の色彩値の調整が実行される。以上のようにして、肌色調整が完了すると、ステップＳ５５０にて調整後の画像データ１４ｂをプリンタドライバＰＧ３に出力する。すると、プリンタドライバＰＧ３は、画像データ１４ｂに対して解像度変換処理と色変換処理とハーフトーン処理とラスタライズ処理を順次実行させ、プリンタ２０に画質調整後の画像データ１４ｂに対応する画像の印刷を実行させる。
【００５１】
３−１．変形例１
上述した実施形態では、第１顔検出処理と第２顔検出処理においてそれぞれｘ方向について異なる検出窓ＳＷの設定手法を行うようにしたが、むろんｙ方向についても同様に設定手法を変えるようにしてもよい。また、説明の簡略化のため検出窓ＳＷのサイズＳを一定とした処理を説明したが、サイズＳを順次シフトさせ、様々な大きさの顔を検出するのが望ましい。さらに、サイズＳをシフトさせる手法も、第１顔検出処理と第２顔検出処理とで異ならせるようにしてもよい。
【００５２】
図１９においては、サイズＳをシフトさせる様子の一例を示している。同図において、横軸にサイズＳが示されており、上段に第１顔検出処理にて設定されるサイズＳを示し、下段に第１顔検出処理にて設定されるサイズＳを示している。第１顔検出処理にて設定されるサイズＳのうち、第１顔判定処理によって顔画像が存在すると判定されたサイズＳを○で示し、顔画像が存在しないと判定されたサイズＳを●で示している。第１顔検出処理においては、サイズＳの大きい順から例えば２０画素ずつ検出窓ＳＷのサイズＳを小さくしていく。第２顔判定処理においては、サイズＳの設定周期を第１顔検出処理よりも小さい５画素とする。
【００５３】
第１顔判定処理によって顔画像が存在しない判定されたサイズＳの間のサイズＳの範囲（●と●の間）については顔検出の対象としない。一方、第１顔判定処理によって顔画像が存在すると判定されたサイズＳの間のサイズＳの範囲（○と○の間）については顔検出の対象とする。第１顔判定処理によって顔画像が存在する（顔と大きさがマッチする）と判定されたサイズＳと、顔画像が存在しないと判定されたサイズＳの間のサイズＳの範囲（○と●の間）については、前者から後者のサイズＳに向かってサイズＳをシフトさせていき、顔が検出されなくなった時点で当該範囲のサイズＳについての顔検出を終了させる。なお、本変形例の第１顔判定処理と第２顔判定処理で使用するニューラルネットワークＮＮ１は含まれる顔画像の大きさにばらつきを持たせた学習画像データを使用して構築されており、ニューラルネットワークＮＮ２は含まれる顔画像の大きさのばらつきが小さい学習画像データを使用して構築されているものとする。このようにすることにより、まず第１顔検出処理にて大まかなサイズＳの絞り込みを行い、当該絞り込まれた範囲について詳細に第２顔判定処理を実行させることができる。従って、効率的かつ高精度に顔画像の大きさを特定することができる。
【００５４】
３−２．変形例２
図２０においては、本変形例の第１顔判定処理と第２顔判定処理の判定手法を模式的に示している。上述した実施形態ではニューラルネットワークＮＮ１，ＮＮ２を使用したが本変形例では複数の判定器Ｊ，Ｊ…を複数段カスケード状に接続した判定手段を使用する。判定器Ｊ，Ｊ…はハードウェアによって実現されてもよいし、ソフトウェアによって実現されてもよい。各判定器Ｊ，Ｊ…は、それぞれ異なる種類（例えばフィルタが異なる）の単数または複数の特徴量ＣＡ，ＣＡ，ＣＡ…を入力し、それぞれ正または否の判定を出力する。各判定器Ｊ，Ｊ…は、それぞれ特徴量ＣＡ，ＣＡ，ＣＡ…の大小比較や閾値判定等の判定アルゴリズムを有しており、それぞれ独自の判定を実行する。次の段の各判定器Ｊ，Ｊ…は、前の段の判定器Ｊ，Ｊ…の正の出力に接続されており、前の段の判定器Ｊ，Ｊ…の出力が正であった場合のみ次の段の判定器Ｊ，Ｊ…が判定を実行する。いずれの段においても否の出力がなされた時点で、第１顔判定処理と第２顔判定処理を終了させ、顔画像が存在しない旨の判定を出力する。一方、各段の判定器Ｊ，Ｊ…がすべて正の出力をした場合には、第１顔判定処理と第２顔判定処理を終了させ、顔画像が存在する旨の判定を出力する。
【００５５】
図２１は、本変形例にかかる判定手法における判定特性を示している。同図においては、上述した各判定器Ｊ，Ｊ…において使用される特徴量ＣＡ，ＣＡ，ＣＡ…の軸で定義される特徴量空間を示しており、最終的に顔画像が存在すると判定される窓画像データＸＤから得られる特徴量ＣＡ，ＣＡ，ＣＡ…の組み合わせで表される特徴量空間内の座標をプロットしている。顔画像が存在すると判定される窓画像データＸＤは一定の特徴を有しているため、特徴量空間における一定の領域に分布が見られると考えることができる。各判定器Ｊ，Ｊ…は、このような特徴量空間において境界平面を生成し、当該境界平面で区切られた空間のうち、前記分布が属する空間に判定対象の特徴量ＣＡ，ＣＡ，ＣＡ…の座標が存在している場合には、正を出力する。従って、各判定器Ｊ，Ｊ…をカスケード状に接続することにより、徐々に正と出力される空間を絞り込んでいくことができる。複数の境界平面によれば、複雑な形状の前記分布についても精度よく判定を行うことができる。
【００５６】
それぞれ異なる判定器Ｊ，Ｊ…を備える第１顔判定処理と第２顔判定処理を実行することにより、第１顔判定処理で絞り込んだ空間をさらに第２顔判定処理によって絞り込んでいくことができる。むろん、第１顔判定処理だけでなく、第１顔判定処理と第２顔判定処理を順次実行させた方が、判定結果が高精度となる。特に、第２顔判定処理の各判定器Ｊ，Ｊ…がｘ方向の位置を厳密化させる境界平面を適用するものとすれば、第２顔判定処理を実行させた方がｘ方向の位置に判定精度を高くすることができる。本発明では、顔画像が存在する可能性が高い位置やサイズについてのみ第２顔判定処理を実行するとともに、少ない個数の位置やサイズについてのみ第１顔判定処理を実行するため、効率的な処理を実現することができる。
【００５７】
なお、以上においては、本発明の画像処理方法が、コンピュータ上で実行されるものを例示したが、例えばプリンタやデジタルスチルカメラやスキャナ等の画像機器にて実行されてもよい。プリンタにて本発明の画像処理方法を行えば、印刷の際に理想的な顔画像に近づく画像処理を実行することができる。むろん、プリンタは家庭用のものに限られず、業務用の写真プリントシステムにおいても適用することができる。さらに、プリンタのように印刷用紙上に画像処理結果を出力するものに限らず、フォトビューワのようにディスプレイ上に画像処理結果を出力する装置においても本発明を実現することができる。また、デジタルスチルカメラにて本発明の画像処理方法を行えば、理想的な肌色の顔画像となった撮影結果を得ることができる。さらに、人物認証を行うＡＴＭ（Automated Teller 
Machine）等においても本発明を適用することができる。さらに、ニューラルネットワークＮＮを使用して顔判定を行うものに限られず、上述した特徴量の特徴量空間における種々の判別手法を用いることも可能である。例えば、サポートベクタマシンを利用してもよい。
【図面の簡単な説明】
【００５８】
【図１】画像処理装置のハードウェア構成を示すブロック図である。
【図２】画像処理装置のソフトウェア構成を示すブロック図である。
【図３】画像処理の流れを示すフローチャートである。
【図４】第１顔検出処理の流れを示すフローチャートである。
【図５】作業画像データの一例を示す図である。
【図６】検出窓と作業画像データの関係を示す図である。
【図７】検出窓の位置が移動する様子を示す図である。
【図８】絞り込み処理の流れを示すフローチャートである。
【図９】第１顔判定処理による顔画像の有無の判定結果のマップである。
【図１０】検出位置テーブルを示す図である。
【図１１】第２顔検出処理の流れを示すフローチャートである。
【図１２】検出窓の位置が移動する様子を示す図である。
【図１３】顔判定処理の流れを示すフローチャートである。
【図１４】窓画像データから特徴量を算出する様子を示す図である。
【図１５】ニューラルネットワークの構造の一例を示す図である。
【図１６】ニューラルネットワークを学習する様子を模式的に示す図である。
【図１７】学習画像データの例を示す図である。
【図１８】肌色調整処理の流れを示すフローチャートである。
【図１９】変形例において検出窓のサイズをシフトさせる様子を示す図である。
【図２０】変形例にかかる顔判定処理の流れを示す図である。
【図２１】変形例にかかる顔判定処理を模式的に示す図である。
【符号の説明】
【００５９】
１０…コンピュータ、１１…ＣＰＵ、１２…ＲＡＭ、１３…ＲＯＭ、１４…ＨＤＤ、１４ａ…プログラムデータ、１４ｂ…画像データ、１５…ＧＩＦ、１６…ＶＩＦ、１７…ＩＩＦ、１８…バス、２０…プリンタ、４０…ディスプレイ、５０ａ…キーボード、５０ｂ…マウス、ＰＧ１…ＯＳ、ＰＧ２…画像処理アプリケーション、ＰＧ２ａ…作業画像取得部、ＰＧ２ｂ…検出窓設定部、ＰＧ２ｃ…窓画像取得部、ＰＧ２ｄ１…第１特徴量算出部、ＰＧ２ｄ２…第２特徴量算出部、ＰＧ２ｅ１…第１顔判定部、ＰＧ２ｅ２…第２顔判定部、ＰＧ２ｆ…画質調整部、ＰＧ３…プリンタドライバ。
【図１】
0004983682.tif 000004
【図２】
0004983682.tif 000005
【図３】
0004983682.tif 000006
【図４】
0004983682.tif 000007
【図５】
0004983682.tif 000008
【図６】
0004983682.tif 000009
【図７】
0004983682.tif 000010
【図８】
0004983682.tif 000011
【図９】
0004983682.tif 000012
【図１０】
0004983682.tif 000013
【図１１】
0004983682.tif 000014
【図１２】
0004983682.tif 000015
【図１３】
0004983682.tif 000016
【図１４】
0004983682.tif 000017
【図１５】
0004983682.tif 000018
【図１６】
0004983682.tif 000019
【図１７】
0004983682.tif 000020
【図１８】
0004983682.tif 000021
【図１９】
0004983682.tif 000022
【図２０】
0004983682.tif 000023
【図２１】
0004983682.tif 000024