以下、本発明の一実施の形態について、図面を参照して説明する。
図1は、本発明の実施の形態に係る画像処理装置を用いた印刷装置の構成例を示す図である。以下、本発明の一実施の形態について、図1から図13に基づいて説明する。図1は、本実施の形態に係る印刷装置11の基本構成を示す斜視図である。この図1に示すように、印刷装置11は、ロール紙対応型のインクジェット式印刷装置であり、装置全体を覆うケース12と、印刷媒体としてのロール紙Rおよび印刷用紙(不図示)を供給する給紙装置13と、ロール紙Rまたは印刷用紙に対して印刷を行う印刷部とを備える。
ケース12は、略四角形状の箱体であり、上面右側に操作パネル部15を備え、操作パネル部15は、LCD(Liquid Crystal Display)17と、操作ボタン18とを備える。LCD17には、印刷装置11のメニュー機能、動作内容、動作状況、エラー内容などが表示され、操作ボタン18は、印刷装置11のメニュー選択等を行う時に押されるようになっている。そして、これらLCD17および操作ボタン18により、カット位置調整等の各種操作が行えるようになっている。
ケース12は、前面下部に、排出口12aを備え、印刷されたロール紙Rまたは印刷用紙が排出されるようになっている。また、ケース12の前面右側には、カードスロット21が設けられており、例えば、ディジタルカメラ30等によって撮影された画像データを記録するメモリカードMが、取り外し自在に収納されるようになっている。
給紙装置13は、ケース12の背面側に設けられており、ケース12に対して固定されているホルダー22と、ロール紙軸23とを備える。そして、同ロール紙軸23には、ロール紙Rの基端(終端)が連結され巻回されており、この状態で、ホルダー22に対して回転可能に支持されている。そして、ユーザーがロール紙軸23の両端部を掴んでロール紙軸23を正回転、あるいは、逆回転させると、ロール紙Rは給紙装置13から送り出されたり、巻き取られたりするようになっている。
つぎに、図1に示す印刷装置11の制御系について説明する。図2は、図1に示す印刷装置の制御系を示すブロック図である。この図に示すように、印刷装置の制御系は、CPU(Central Processing Unit)50、ROM(Read Only Memory)51、RAM(Random Access Memory)52、EEPROM(Electrically Erasable and Programmable ROM)53、GP(Graphic Processor)54、I/F(Interface)55、バス56、LCD17、操作ボタン18、カードMが挿入されるカードスロット21、カードI/F回路60、プリンタエンジンコントローラ62、紙送りモータ63、ローラ64、キャリッジモータ65、駆動ベルト66、キャリッジ67、および、記録ヘッド68を有している。
ここで、特定手段、調整手段、および、補正手段としてのCPU50は、ROM51およびEEPROM53に格納されているプログラムに応じて各種演算処理を実行するとともに、紙送りモータ63およびキャリッジモータ65をはじめとする装置の各部を制御する。
ROM51は、CPU50が実行する各種プログラムや各種データを格納している半導体メモリである。RAM52は、CPU50が実行対象とするプログラムやデータを一時的に格納する半導体メモリである。
EEPROM53は、CPU50における演算処理結果の所定のデータ等が格納され、印刷装置の電源が切断された後も該データを保持する半導体メモリである。
GP54は、CPU50から供給されが描画命令に基づいて描画処理を実行し、得られた画像データをLCD17に供給して表示させる。
I/F55は、操作ボタン18、カードI/F回路60、および、プリンタエンジンコントローラ62の間で情報を授受する際に、データの表現形式を適宜変換する装置である。
バス56は、CPU50、ROM51、RAM52、EEPROM53、GP54、および、I/F55、を相互に接続し、これらの間で情報の授受を可能とするための信号線群である。
操作ボタン18は、前述したように、メニュー選択等を行う場合に操作される。メモリカードMは、前述したように、ディジタルカメラ30によって撮像された画像データが格納されている不揮発メモリである。
カードスロット21は、前述したように印刷装置11のケース12の前面右側に設けられており、当該部分にメモリカードMが挿入される。カードI/F回路60は、メモリカードMとの間で情報を読み書きするためのインタフェースである。
プリンタエンジンコントローラ62は、紙送りモータ63、キャリッジモータ65、および、記録ヘッド68を制御するための制御装置である。紙送りモータ63は、ローラ64を回転させることにより印刷用紙またはロール紙Rを副走査方向に移動させる。ローラ64は、円柱状の部材によって構成され、印刷用紙またはロール紙Rを副走査方向に移動させる。
キャリッジモータ65は、キャリッジ67に一端が固定されている駆動ベルト66に駆動力を与えることにより、キャリッジ67を主走査方向に往復動させる。記録ヘッド68は、印刷用紙に対向する面に複数のノズルが形成されており、当該複数のノズルからインクを吐出させることにより情報を印刷用紙に記録する。
図3は、図1に示すディジタルカメラ30の詳細な構成例を示す図である。この図に示すように、ディジタルカメラ30は、CPU31、ROM32、RAM33、CCD(Charge Coupled Device)34、光学系35、GP36、LCD37、I/F38、バス39、操作ボタン40、カードI/F41、カードスロット42、メモリカードM、ジャイロセンサ43を有している。なお、図3において図2と同一の部分については説明を省略する。図3の例では、図2の場合と比較して、CCD34、光学系35、および、ジャイロセンサ43が異なっている。ここで、CCD34は、光学系35によって集光された被写体からの光画像を対応する電気信号に変換して出力する。光学系35は、複数のレンズおよびアクチュエータによって構成されており、被写体からの光画像を複数のレンズによってCCD34の受光面に集光するとともに、アクチュエータによってフォーカス等を調整する。ジャイロセンサ43は、ディジタルカメラ30によって被写体を撮影した際のカメラ本体の角度(水平面に対する角度)を示す信号を生成して出力する。ディジタルカメラ30では、撮影時におけるカメラの角度を示す情報を、後述するexif(Exchangeable Image File Format)情報として画像データに添付することができる構造となっている。
つぎに、以上の実施の形態の動作について説明する。以下では、まず、本実施の形態の動作の概略について説明した後、詳細な動作について説明する。
本発明の実施の形態では、印刷装置11によって印刷しようとする画像データに人物の顔が含まれている場合には、当該顔を構成する画素の状態に応じて画像データを補正し、最適な印刷状態が得られるようにする。
ところで、画像データに顔が含まれているか否かを判定する方法としては、例えば、顔のテンプレートを利用して画像データとマッチング処理を行う方法がある。このような方法では、画像データに含まれている画像の大きさ、および、方向が一定でないため、図4(A)に示すように複数のサイズのテンプレート(第1〜第5のテンプレート)を準備し、図5(A),(B)に示すように、例えば、画像データの左上端から右下端まで当該テンプレートとのマッチング処理を実行し、当該テンプレートに対応する顔が含まれているか否かを判定する。なお、マッチング処理の際には、図4(B)に示すように、テンプレートにはモザイク処理が施され、個人の特徴による影響が排除される。
ところで、ディジタルカメラ30で被写体である人物を撮像する場合、図6に示すように、ディジタルカメラ30の角度を変えて撮影される場合がある。図6の例では、(A)は通常の場合を示し、(B)は正面から見て反時計方向に90度回転させた場合を示し、(C)は正面から見て時計方向に90度回転させた場合を示している。このような場合、(A)〜(C)にそれぞれ示すように、画像に含まれている顔は、(A)では正立状態、(B)では反時計方向に90度回転した状態、(C)では時計方向に90度回転した状態となる。したがって、この場合、図4に示すような正立方向のテンプレートを使用して顔の検出処理を実行した場合には(B),(C)の状態の顔が検出できなくなってしまう。
そこで、画像データを段階的に360度回転させ、それぞれの段階において図5に示すようにスキャンを行うことにより、撮影された角度によらず顔を検出することができる。
しかしながら、画像を360度回転させ、しかも、図4に示すように、複数のテンプレートを使用して検出を行うことは、処理コストが高くついてしまう。そこで、本発明の実施の形態では、図7(A)に示すように、ディジタルカメラ30を180度回転させた状態で撮影が行われることは想定できないことから、当該状態を処理対象から除外することにより処理を高速化している。具体的には、図7(B)に示すように、画像データを+135度〜−135度の範囲で段階的に(例えば、+5度ずつ)回転させ、それぞれの段階において顔を検出する処理を実行する。この結果、図6(B)に示す場合には−90度回転された状態で正立状態となり、図6(C)に示す場合では+90度回転された状態で正立状態となって顔が検出される。なお、図6(B),(C)の場合では、−90度および+90度回転させれば顔を検出することができるが、被写体が傾いていたり、あるいは、ディジタルカメラ30が傾いたりしている場合を考慮し、余裕をみて−135度および+135度の範囲で回転させるようにしている。このように、本発明の実施の形態では、図7(A)に示す反転状態およびその近傍の状態を処理対象から除外することにより、処理速度を向上させている。
つぎに、本発明の実施の形態の詳細について説明する。図8は、以上の実施の形態の動作を説明するためのフローチャートである。このフローチャートの処理が開始されると、以下のステップが実行される。なお、この処理は、メモリカードMがカードスロット21に挿入された後、所定の画像または画像群を印刷することが指示された場合に、ROM51に格納されているプログラムを読み出して実行することにより、実現される。
ステップS10:CPU50は、印刷の対象となる画像ファイルをメモリカードMから取得し、ハフマン解凍処理を実行し、量子化DCT(Discrete Cosine Transform)係数を得る。図9に示すように、画像ファイル70は、ヘッダ情報71、テーブル72、および、圧縮データ73によって構成されている。ここで、ヘッダ情報71は、例えば、exif情報71a(詳細は後述する)を有するとともに、ファイル名、圧縮方式、画像サイズ、密度単位等の情報を有している。テーブル72は、例えば、量子化テーブルおよびエントロピー符号化テーブル等によって構成されている。圧縮データ73は、JPEG(Joint Photographic Coding Experts Group)方式により圧縮された画像データによって構成されている。CPU50は、図9に示す画像ファイル70のテーブル72からエントロピー符号化テーブルを取得し、圧縮データ73に含まれているY(輝度)成分、Cr(色差成分)、および、Cb(色差成分)のそれぞれのブロックのDC係数と、AC係数とを復号する。なお、この際、最小符号化単位であるMCU単位で復号を行う。
ステップS11:CPU50は、ステップS11において得られた量子化DCT係数を逆量子化する。具体的には、CPU50は、図9に示す画像ファイル70のテーブル72から量子化テーブルを取得し、ステップS11において得られた量子化DCT係数に乗じることにより(逆量子化することにより)、DCT係数を得る。
ステップS12:CPU50は、画像を回転させるために必要な情報を、例えば、RAM52にキャッシュする。具体的には、JPEG方式によって圧縮された画像を回転させる場合、MCUのDC成分(直流成分)とAC成分(交流成分)のそれぞれを一度ハフマン展開しなければならない。ここで、DC成分については隣接するDC成分値の差分をハフマン符号化することから、隣接するMCUとの相関関係が問題となる。また、AC成分ではハフマン符号化処理によりそのデータ長が各MCUで一定にならず、JPEGデータのビットストリーム中のどのデータが求めるMCUのAC成分値であるかが不明となることが問題となる。そこで、ステップS12の処理では、各MCUのDC成分値とAC成分のアドレスを求めてキャッシュしておくことにより、ローテート処理を可能とする。
ステップS13:CPU50は、ステップS11で得られたDCT係数に対して逆DCT演算を施すことによりもとの画素値を得る。
ステップS14:CPU50は、ステップS13の処理によって得られたYCC方式の画像をRGB(Red Green Blue)方式の画像と、HSB(Hue Saturation Brightness)方式の画像に変換する。
ステップS15:CPU50は、ステップS13およびステップS14の処理において得られたYCC,RGB,HSBのそれぞれの画像をRAM52に格納して保持する。なお、このとき、データ量を削減するために画素を所定の割合で間引きした後にRAM52に格納してもよい。
ステップS16:CPU50は、ステップS15においてRAM52に格納されたYCC,RGB,HSBそれぞれの画像の成分について、ヒストグラムを計算する。具体的には、RGB画像については、R,G,Bそれぞれの画像についてヒストグラムを計算する。その結果、画像を構成する各成分の分布を得る。
ステップS17:CPU50は、全てのMCUについての処理が終了したか否かを判定し、終了した場合にはステップS18に進み、それ以外の場合にはステップS10に戻って同様の処理を繰り返す。
ステップS18:CPU50は、画像方向を特定する処理を実行する。なお、この処理の詳細については、図11を参照して後述するが、概略を説明すると、つぎの通りである。すなわち、画像ファイル70のexif情報71aに撮影時のディジタルカメラ30の角度(ジャイロセンサ43の出力データ)が記録されている場合には、当該情報を抽出する。なお、特別な場合として、画像データの天地が反転された状態(図7(A)に示す状態)となっている場合には、肌色領域および黒色領域の位置関係を参照して天地が反転されていることを検出し、画像データの天地を反転させる。
ステップS19:CPU50は、画像データに含まれている顔を特定する処理を実行する。なお、この処理の詳細については、図12および図13を参照して後述するが、概略を説明するとつぎの通りである。すなわち、この処理では、画像データに顔画像が含まれているか否かを判定するために、図7(B)に示すように、画像データを回転させながら、図4に示すテンプレートと相関が高い領域を顔画像が含まれている領域(以下、「顔領域」と称する)として特定する。なお、含まれている顔画像の大きさは、被写体とディジタルカメラの距離によって変化し、また、被写体が複数である場合も想定されるので、ステップS19の処理では、大きさの異なる複数のテンプレートを用いて顔画像の検出を行うとともに、10人分の顔領域が発見されるまで処理を繰り返すようにしている。なお、特定された顔領域については、例えば、その中心部分の座標または左上端の座標がRAM52に格納される。
ステップS20:CPU50は、ステップS19の処理において顔画像が特定された場合にはステップS21に進み、それ以外の場合にはステップS22に進む。
ステップS21:CPU50は、ステップS19において特定された顔領域から顔色を取得する。具体的には、顔領域を構成する所定の画素を抽出してR,G,Bそれぞれの値を取得する。このとき、複数の画素を抽出して平均値または中央値を計算し、これらの値を用いるようにしてもよい。なお、複数の顔領域が特定された場合にはそれぞれの顔領域から顔色を取得し、例えば、中央値または平均値を計算する。
ステップS22:CPU50は、ステップS21において取得された顔色が、正常な顔色となる補正パラメータを算出する。具体的には、R,G,Bのバランスが適正値からずれている場合には、色かぶりが生じているとして、正常値に補正するための補正パラメータをR,G,Bそれぞれについて算出する。また、R,G,Bのトータル値がずれている場合には、露光が適正でないとして、露光を適正とするための補正パラメータをR,G,Bそれぞれについて算出する。なお、ステップS19において顔が特定できなかった場合には、例えば、空の色に基づいて補正パラメータを算出する。
なお、顔色は、人種および光源の種類によって異なる。そこで、ROM51に格納されているテーブル(図10参照)を参照して、取得したR,G,Bから適正な補正パラメータを算出する。図10の例では、第1〜第3の肌色が列挙してある。ここで、第1の肌色は白色系、第2の肌色は黄色系、第3の肌色は黒色系の肌色となっている。図10では、第1から第3の肌色のそれぞれについて、太陽光、蛍光灯、白熱光を光源とした場合のR,G,Bそれぞれの値の範囲が列挙されている。ステップS22の処理では、顔領域の複数のポイントから画素をサンプリングし、サンプリングされた画素のR,G,B値の平均値または中央値を算出し、図10に示すテーブルと比較することにより、対象となる顔の肌色の種類と、光源の種類を特定する。そして、画素の平均値のR,G,Bのそれぞれの値が図5に示すテーブルの中央値(適正値)となるような補正パラメータを求める。なお、複数人の顔領域が特定された場合には、それぞれの顔領域から複数点におけるサンプリングを行い、得られた複数人分の画素の平均値または中央値を算出し、これらの値に基づいて、補正パラメータを算出する。
ステップS23:CPU50は、印刷対象となる画像ファイルにおいて、解凍処理の対象となる位置を示すファイルポインタをリセットし、処理位置を画像ファイルの先頭に復元する。
ステップS24:CPU50は、RAM52にキャッシュされた1MCUライン分の画像データにハフマン解凍処理を施し、量子化DCT係数を得る。ここで、1MCUラインとは、画像を回転させる場合には、画像を構成する列方向に1列のMCU群をいい、回転させない場合には、画像を構成する行方向に1列のMCU群をいう。
ステップS25:CPU50は、ステップS24の処理において得られた量子化DCT係数を逆量子化する。
ステップS26:CPU50は、ステップS25で得られたDCT係数に対して逆DCT演算を施すことによりもとのデータを得る。
ステップS27:CPU50は、ステップS26の処理によって得られたYCC方式の画像をRGB方式の画像に変換する。
ステップS28:CPU50は、ステップS27において得られたRGB方式の画像を構成する各画素に対して補正処理を施す。具体的には、それぞれの画素に対して、ステップS22において算出した補正パラメータを適用することにより、色かぶりを解消するとともに、露出が適正となるように補正する。例えば、色かぶりによって赤色が強い場合には、Rのヒストグラムの分布が原点方向に移動するように、例えば、それぞれの画素値に対して値“0.9”を乗算する等の処理を行う。
ステップS29:CPU50は、補正処理の結果得られた画像データを、プリンタエンジンコントローラ62の図示せぬバンドバッファに供給し、印刷処理を実行させる。この結果、プリンタエンジンコントローラ62は、記録ヘッド68を制御して画像データに対応するインクを吐出させ、キャリッジモータ65を駆動して記録ヘッド68を主走査方向に移動させるとともに、紙送りモータ63を駆動して副走査方向に移動させ、画像を印刷する。
ステップS30:CPU50は、RAM52にキャッシュされている画像データを、つぎの処理に備えて更新する。
ステップS31:CPU50は、処理を終了するか否かを判定し、終了しない場合にはステップS24に戻って同様の処理を繰り返し、それ以外の場合には処理を終了する。
つぎに、図11を参照して、図8のステップS18の詳細な処理について説明する。図6の処理が開始されると、以下のステップが実行される。
ステップS40:CPU50は、画像ファイル70にexif情報71aが含まれている場合には当該exif情報71aを取得する。
ステップS41:CPU50は、exif情報71aに画像方向情報が含まれている場合には当該情報を取得する。なお、画像方向情報とは、撮影時におけるディジタルカメラの角度(例えば、水平面からの角度)を示す情報であり、例えば、図3に示すディジタルカメラ30の場合、画像の撮影時において、ジャイロセンサ43から出力されるデータがexif情報71aに格納される。
ステップS42:CPU50は、ステップS41において画像方向情報が取得できたか否かを判定し、取得できた場合にはもとの処理に復帰し、それ以外の場合にはステップS43に進む。
ステップS43:CPU50は、画像データから図10を参照して、人物の顔に対応する肌色領域を検出する。
ステップS44:CPU50は、画像データから目および口に対応する黒色領域を検出する。
ステップS45:CPU50は、ステップS43およびステップS44の検出結果に基づき、黒色領域と肌色領域の位置関係に基づき、黒色領域を結ぶ三角形が頂点を上として配置されている場合(双方の目を結ぶ底辺が下向きに配置されている場合)には、図7(A)に示すように天地が反転した状態で撮影されたと判定してステップS46に進み、それ以外の場合にはもとの処理に復帰する。
ステップS46:CPU50は、図7(A)に示すように天地が反転した状態で撮影された画像データの天地を反転する処理を実行する。
つぎに、図12を参照して、図9に示すステップS19の顔特定処理の詳細について説明する。図12に示す処理が開始されると、以下のステップが実行される。
ステップS50:CPU50は、ステップS41において画像方向情報を取得した場合にはステップS51に進み、それ以外の場合にはステップS52に進む。
ステップS51:CPU50は、画像データを方向情報に示される角度に回転させる処理を実行する。なお、回転させる画像(顔の有無を検出する画像)としては、例えば、もとの画像データを所定の割合で間引きして縮小して得られるQVGA(Quarter Video Graphics Array)サイズの画像とする。なお、処理の対象となる画像データの種類としては、例えば、Y(輝度)成分画像を用いることができる。すなわち、画像データに顔領域が含まれているか否か検索する場合には、後述する白黒濃淡画像であるテンプレートとの類比を判断するので、検索対象となる画像データについても白黒濃淡画像である輝度成分であるY成分画像を利用する。
ステップS52:CPU50は、図13に示す顔特定処理を実行する。なお、この処理の詳細については後述する。
ステップS53:CPU50は、画像データを−135度回転させる処理を実行する。なお、回転させる画像データとしては、前述のステップS51の場合と同様に、もとの画像データを所定の割合で間引きして縮小して得られるQVGAサイズの画像とし、また、画像データの種類としては、Y(輝度)成分画像を用いる。
ステップS54:CPU50は、図13に示す顔特定処理を実行する。なお、この処理の詳細については後述する。
ステップS55:ステップS54の処理により顔が特定されたか否かを判定し、特定された場合にはもとの処理に復帰し、それ以外の場合にはステップS56に進む。
ステップS56:CPU50は、画像データを+5度だけ回転させる処理を実行し、ステップS54に戻って同様の処理を繰り返す。
ステップS57:CPU50は、画像データが+135度回転したか否かを判定し、回転した場合にはもとの処理に復帰し、それ以外の場合にはステップS54に戻って同様の処理を繰り返す。
以上の処理により、図7(B)に示すように、画像データが−135度から+135度まで5度ずつ回転され、それぞれの角度において顔が特定される。
つぎに、図13を参照して、図12のステップS52に示す顔特定処理の詳細について説明する。図13に示す処理が開始されると、以下のステップが実行される。
ステップS60:CPU50は、テンプレートを指定する変数nに値“1”を初期設定し、テンプレートの走査位置を指定する変数x,yに値“0”をそれぞれ初期設定する。
ステップS61:CPU50は、変数nによって指定される第n番目のテンプレート(詳細は後述する)をROM51から選択する。第1回目の処理では、変数nには値“1”が設定されているので、第1番目のテンプレートが選択される。図4(A)に示すように、テンプレートは顔の特徴点(目、鼻、口等)を含む画像であり、第1〜第5の順でそのサイズが小さくなっている。なお、テンプレートの画像の解像度が高い場合には、各個人の顔の特徴に影響を受けてマッチング処理の精度が低下するので、図4(B)に示すように、テンプレートにモザイク処理を施すことにより、各個人の特徴に影響を受けにくくしている。
ステップS62:CPU50は、画像データからx,yを左上端とし、ステップS61で選択したテンプレートに対応するサイズの領域を抽出する。なお、以下では、抽出された画像データを抽出画像データと称する。いまの例では、x,y=0であり、第1のテンプレートが選択されているので、x,y=0を左上端とし、第1のテンプレートと同じサイズの領域が抽出画像データとして抽出される。なお、回転によって画像が傾いている場合には、抽出画像データの一部が欠落しない範囲で、画像データを抽出する。
ステップS63:CPU50は、ステップS61において選択したテンプレートと、ステップS62において抽出された抽出画像データとのマッチング処理を実行する。マッチング方法としては、例えば、抽出画像データと、テンプレートの各画素の差分の2乗を累積加算し、所定の閾値以下になった場合には、これらの類似性が高い(顔が含まれている)と判断することができる。なお、これ以外にも、例えば、ニューラルネットワークを利用することも可能である。その場合、例えば、入力層、中間層、および、出力層の3層構造を有するニューラルネットワークを利用し、入力層にテンプレートの画像を、例えば、位置等をずらしながら入力して学習を行い、十分に学習を積んだニューラルネットワークを用いてマッチング処理を行うことが可能である。
また、ニューラルネットワークではなく、例えば、ジェネティックアルゴリズム(遺伝的アルゴリズム)を用いてマッチング処理を行うことも可能である。例えば、テンプレートを原画像に重ねる際のパラメータとして、テンプレートの種類n、左上端のx,y座標を定義し、各固体の染色体をこれらのパラメータに基づいて決定し、マッチング率を固体の適応度とみなして個体集団を進化させることにより、最適な個体をマッチング処理の結果とすることができる。
ステップS64:CPU50は、ステップS63の処理の結果に基づいて、ステップS62で抽出された抽出画像データに顔が含まれているか否かを判定し、含まれていると判定した場合にはステップS65に進み、それ以外の場合にはステップS66に進む。例えば、前述した差分の2乗を計算するマッチング処理の場合には、累積加算値が所定の閾値よりも小さい場合には顔が含まれていると判定する。
ステップS65:CPU50は、顔が存在すると判定された領域の中心の座標をRAM52に記憶する。なお、中心座標を求めるには、現在選択されているテンプレートのサイズの半分の長さを、現在のx,y座標に加算すればよい。
ステップS66:CPU50は、それまでの処理で合計して10人分の顔を検出したか否かを判定し、10人分の顔を検出した場合には処理を終了してもとの処理に復帰し、それ以外の場合にはステップS67に進む。例えば、第1のテンプレートで、3人の顔が検出され、第3のテンプレートで7人の顔が検出された場合には処理を終了してもとの処理に復帰する。
ステップS67:CPU50は、抽出画像データが抽出される領域が画像データの右端に到達したか否かを判定し、到達した場合にはステップS69に進み、それ以外の場合にはステップS68に進む。すなわち、本発明の実施の形態では、図5(A)に示すように、画像データからテンプレートに対応した大きさの画像データを抽出し、図5(B)に示す順序で抽出を繰り返す。このとき、画像を抽出する領域が右端に到達した場合には、ステップS69に進む。
ステップS68:CPU50は、左上端のx座標に対してΔxを加算する。なお、Δxは、選択されているテンプレートのサイズに応じて最適な値を決定する。例えば、テンプレートのサイズが小さい場合にはΔxの値を小さくし、サイズが大きい場合にはΔxの値を大きくする。
ステップS69:CPU50は、左上端のy座標に対してΔyを加算する。なお、Δyは、前述のΔxの場合と同様に、テンプレートのサイズに応じて決定する。
ステップS70:CPU50は、左上端のx座標を“0”に設定する。その結果、画像を抽出する領域が画像の左端に復帰する。
ステップS71:CPU50は、所定のテンプレートについて、全領域に対する処理が完了したか否かを判定し、終了したと判断した場合にはステップS72に進み、それ以外の場合にはステップS62に戻って同様の処理を繰り返す。
ステップS72:CPU50は、x,yのそれぞれに対して値“0”を設定する。その結果、画像を抽出する領域が画像データの左上端にリセットされる。
ステップS73:CPU50は、テンプレートを選択するための変数nを“1”だけインクリメントする。いまの例では、変数nには初期値“1”が設定されているので、変数nの値はこの処理により“2”となる。その結果、ステップS61の処理では第2のテンプレートが選択されることになる。
ステップS74:CPU50は、変数nの値がテンプレートの最大値を示す値Nよりも大きいか否かを判定し、大きい場合には処理を終了する。いまの例では、図4に示すように、N=5であるので、n>5である場合には処理を終了してもとの処理に復帰し、それ以外の場合にはステップS61に戻って同様の処理を繰り返す。
以上に説明したように、本発明の実施の形態によれば、画像データを回転させながら顔領域が含まれているか判定する場合に、天地反転した角度およびその近傍の角度を処理の対象から除外するようにしたので、処理速度を向上させることが可能になる。
なお、以上の実施の形態では、スタンドアロン型の印刷装置を例に挙げて説明を行ったが通常の印刷装置(パーソナルコンピュータと接続して使用するタイプの印刷装置)に対して本発明を適用することができる。また、図14に示す、スキャナ装置、印刷装置、および、コピー装置が一体となったいわゆる複合型の印刷装置に対して本発明を適用することも可能である。
図14の例では、印刷装置211は、装置全体を覆うケース212と、印刷媒体としての印刷用紙を供給する給紙装置213と、紙媒体等に印刷された画像を読み取るスキャナ部230と、印刷用紙に対して印刷を行う印刷部(不図示)とを備える。
ケース212は、略四角形状の箱体であり、上面にスキャナ部230が設けられており、また、前面中央部には、LCD217と、各種操作ボタン218とを備える。LCD217には、図1の場合と同様に、印刷装置211のメニュー機能、動作内容、動作状況、エラー内容などが表示され、操作ボタン218は、印刷装置211のメニュー選択等を行う時に押されるようになっている。
ケース212は、前面下部に、排出口212aを備え、印刷された印刷用紙が排出されるようになっている。また、ケース212の前面右側には、カードスロット221が設けられており、例えば、ディジタルカメラ30等によって撮影された画像データを記録するメモリカードMが、取り外し自在に収納されるようになっている。
給紙装置213は、ケース212の背面側に設けられており、印刷用紙をストックするとともに、必要に応じて印刷装置211の内部に一枚ずつ供給する。
図15は、図14に示す複合型の印刷装置210の制御系の構成例を示す図である。なお、この図において、図2の場合と対応する部分には同一の符号を付してその説明を省略する。図15の例では、図2の場合と比較して、操作ボタン18が操作ボタン218に置換され、また、スキャナ部230が新たに付加されている。なお、その他の構成は、図2の場合と同様である。
ここで、操作ボタン218としては、スキャナ装置およびコピー装置を制御するためのボタンが新たに追加されている。スキャナ部230は、紙媒体に印刷されている画像を読み取るための光学系、撮像系、および、これらを制御するための制御系によって構成されており、CPU50の制御に応じて紙媒体に印刷された画像を読み取って、対応する画像データに変換して出力する。
このような複合型の印刷装置211では、メモリカードMから読み込んだ画像データに対して、前述したような処理を実行することにより、画像に含まれている顔に応じて補正処理を行うことが可能となる。
なお、図14に示す実施の形態では、メモリカードMのみならず、スキャナ部230によって読み込まれた画像に含まれている顔に応じて、補正処理を実行することも可能である。しかしながら、その場合、原稿である写真等の置き方には制限がないことから、例えば、図7(A)のように天地が逆転した状態で画像データが読み込まれることも想定される。したがって、図14に示す実施の形態では、メモリカードMから読み込まれた画像データについては、前述のように−135度〜+135度の範囲で回転させて顔を検出するようにし、スキャナ部230から読み込まれた画像データについては、天地が逆転した状態も含めて、360度回転させて顔を検出するようにしてもよい。
なお、以上の実施の形態は、一例であって、これ以外にも種々の変形実施態様が存在する。例えば、以上の実施の形態では、処理対象となる画像データを−135度〜+135度の範囲で回転させるようにしたが、これ以外の角度であってもよい。例えば、−120度〜+120度の範囲に設定することも可能である。要は、−90度〜+90度を含む範囲であって、ある程度の余裕を有する範囲であればよい。
また、以上の実施の形態では、画像を回転させる範囲については固定としたが、撮影者の癖を学習することにより、適切な範囲に設定することも可能である。例えば、図6(A)および(B)の角度のみの使用が大半であって、図6(C)および図7(A)の角度の使用がない場合には、例えば、−135度〜+45度の範囲で回転させるようにしてもよい。また、撮影者の癖として、カメラの傾きの範囲が狭い場合には、−135度〜+135度の範囲ではなく、学習に基づいて適切な範囲(例えば、−100度〜+100度の範囲)で回転させるようにすることも可能である。
また、以上の実施の形態では、画像データ自体を回転させるようにしたが、画像データは固定とし、テンプレートの方を回転させるようにすることも可能である。その場合、テンプレートの方がデータ量が少ないので、回転に係る処理量を削減することにより、処理速度を向上させることができる。さらに、画像データを回転させる場合であっても、画像データ全体を回転させるのではなく、画像データから一部のデータを抽出し、当該抽出された画像データのみを回転させるようにすることも可能である。その場合、テンプレートよりも少しだけ大きい範囲(回転させた場合にテンプレートが含まれる範囲)を抽出するようにすれば、顔検出処理も問題なく実行することができるとともに、回転に係るデータの処理量を減少させることができる。
また、以上の実施の形態では、画像データを+5度ずつ増加させて顔領域を特定するようにしたが、これ以外の角度ずつ(例えば、+2度ずつ)増加または減少させながら顔領域を検出してもよい。また、増加する角度については固定ではなく、顔領域が存在する蓋然性が高い範囲(例えば、0度、+90度、−90度およびこれらの近傍の範囲)では、増加する角度を狭くし(例えば、+3度とし)、それ以外の範囲では増加する角度を広くする(例えば、+10度)とするようにしてもよい。
また、以上の実施の形態では、正面を向いた顔に対応するテンプレートを使用するようにしたが、例えば、上、下、右、および、左を向いたテンプレートを用いるようにしてもよい。その場合、正面と上、下、右、左の中間の段階のテンプレートを複数用意し、それぞれのテンプレートとのマッチング処理を実行してもよい。そのような実施の形態によれば、被写体の人物が正面以外の方向を向いている場合であっても、顔として認識される確率を向上させることができる。
また、以上の実施の形態では、画像データの全ての範囲を検出処理の対象としたが、例えば、撮影者の癖に基づいて、人物の顔が存在する可能性が高い範囲について学習を行い、可能性が高い範囲を含む領域を抽出して前述の処理を実行するようにしてもよい。そのような方法によれば、最小限のコストで顔を発見することが可能になる。
また、画像データに対して拡大および縮小処理を施すことによりノイズ成分を減少させ、認識精度を向上させることも可能である。すなわち、画像データを拡大および縮小することによりノイズ成分を平均化し、ノイズの影響を少なくするようにすることができる。
また、以上の実施の形態では、テンプレートについてはモザイク処理を施すようにしたが、画像データについてもモザイク処理を施すようにしてもよい。
また、以上の実施の形態では、YCC方式の画像のY画像を利用して顔を検出するようにしたが、例えば、RGB方式の画像から黒白濃淡画像を生成し、当該白黒濃淡画像から顔を検出することも可能である。
また、以上の実施の形態では、顔の大きさに拘わらず、10人検出した場合に、処理を終了するようにしたが、例えば、小さい顔については重要度が低いと考えることができることから、大きい顔が所定の個数見つかった場合には、処理を終了するようにしてもよい。そのような実施の形態によれば、処理速度を向上させることができる。また、それぞれの大きさについて、個数を定めておき、定められた個数の顔が検出された場合には処理を終了するようにしてもよい。例えば、第1のテンプレートでは1つ、第2のテンプレートでは2つ、といった具合である。そのような処理によれば、主な被写体と考えられる大きな顔が検出された場合には、迅速に処理を終了することにより、処理時間を短縮することができる。
また、以上の実施の形態では、図5(B)に示す順序で顔を検出するようにしたが、例えば、顔が含まれている蓋然性が最も高い、画面の中央から外側に向かって、螺旋状に旋回しながら検出するようにしてもよい。なお、そのとき、画面の中央部分では、抽出範囲の移動ステップを小さくし、外側に行くほどステップを大きくするようにしてもよい。そのような実施の形態によれば、例えば、顔が存在する蓋然性に応じたステップで検出処理を実行することができる。また、前述の大きい顔が見つかった場合には処理を終了する実施の形態と併せて実施するようにすれば、処理速度を向上させることが可能になる。
また、以上の実施の形態では、図8,11〜13に示す処理を、印刷装置11または印刷装置211において実行するようにしたが、例えば、印刷装置11または印刷装置211に接続されているホストコンピュータにおいて実行することも可能である。
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、画像処理装置が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ハードディスク装置(HDD)、フレキシブルディスク(FD)、磁気テープなどがある。光ディスクには、DVD(Digital Versatile Disk)、DVD−RAM、CD−ROM(Compact Disk ROM)、CD−R(Recordable)/RW(ReWritable)などがある。光磁気記録媒体には、MO(Magneto-Optical disk)などがある。
プログラムを流通させる場合には、たとえば、そのプログラムが記録されたDVD、CD−ROMなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
プログラムを実行するコンピュータは、たとえば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送される毎に、逐次、受け取ったプログラムに従った処理を実行することもできる。