A.実施例:
A−1:画像処理システム1000の構成
図1は、実施例における画像処理システムの構成を示すブロック図である。画像処理システム1000は、画像処理装置としてのサーバ400と、複合機200と、を備えている。サーバ400は、インターネット70に接続されており、複合機200は、LAN(Local Area Network)50を介して、インターネット70に接続されている。この結果、サーバ400と複合機200は、LAN50とインターネット70とを介して、通信可能である。また、LAN50には、複合機200のユーザのパーソナルコンピュータ500が接続されていても良い。
サーバ400は、CPU410と、DRAMなどの揮発性記憶装置420と、ハードディスクドライブやフラッシュメモリなどの不揮発性記憶装置430と、インターネット70などのネットワークに接続するためのインタフェースを含む通信部480と、を備えている。揮発性記憶装置420には、CPU410が処理を行う際に生成される種々の中間データを一時的に格納するバッファ領域421が設けられている。不揮発性記憶装置430には、コンピュータプログラム431と、複数個のテンプレートデータを含むテンプレートデータ群432と、後述するUIデータ群433と、が格納されている。
コンピュータプログラム431は、例えば、DVD−ROMなどに格納された形態で提供され、サーバ400の管理者によって、サーバ400にインストールされる。CPU410は、コンピュータプログラム431を実行することにより、後述する画像処理を実現する。
図2は、テンプレートデータの一例を示す図である。1個のテンプレートデータは、テンプレート画像10(図2(A))を表すテンプレート画像データと、マスク画像11(図2(B))を表すマスク画像データと、領域情報12と、を含んでいる。テンプレートデータは、所定のファイルフォーマット、例えば、PNG(Portable Network Graphics)フォーマットで生成されている。
テンプレート画像データは、例えば、RGB画像データである。図2の例では、テンプレート画像10は、文字や図柄などのオブジェクトがデザインされた背景画像BGと、他の画像を合成するための3個の合成対象領域15A〜15Cと、を含んでいる。合成対象領域の個数や形状やサイズ、および、背景画像BGのデザインは、テンプレートごとに異なり得る。合成対象領域は、後述する画像処理において、テンプレート画像10を用いて合成画像を生成する際に、後述する元画像内の部分画像が、合成される領域である。
マスク画像11は、テンプレート画像10内の3個の合成対象領域15A〜15Cを特定するための画像である。マスク画像11は、テンプレート画像10と同じサイズ(すなわち、縦方向の画素数および横方向の画素数)を有する。マスク画像11内の画素の値は、第1値と、第2値と、の2つの値を取る。第1値は、対応するテンプレート画像10内の画素が背景画像BGを構成する画素であることを示す。第2値は、対応するテンプレート画像10内の画素が合成対象領域15A〜15Cを構成する画素であることを示す。例えば、マスク画像データには、画素ごとに透過率を規定するアルファチャンネルが用いられる。この場合には、例えば、第1値は、透過率が0%であること、すなわち、不透明であることを示す値(例えば、255)であり、第2値は、透過率が100%であること、すなわち、透明であることを示す値(例えば、0)である。
マスク画像11内のハッチングされた領域MAは、第1値を有する複数個の画素で構成される領域である。領域MAは、テンプレート画像10の背景画像BGに対応する。マスク画像11内のハッチングされていない3個の領域11A〜11Cは、第2値を有する複数個の画素で構成される領域である。領域11A〜11Cは、テンプレート画像10内の合成対象領域15A〜15Cに対応する。
なお、これに代えて、マスク画像データにおいて、テンプレート画像10内の合成対象領域15A〜15Cに対応する領域11A〜11C内の画素の値は、対応する合成対象領域の領域番号(例えば、1〜3)であってもよい。そして、テンプレート画像10の背景画像BGに対応する領域MA内の画素の値は、領域番号とは異なる特定値(例えば、0)であっても良い。
領域情報12は、合成対象領域15A〜15Cに関する情報である。具体的には、領域情報12は、合成対象領域15A〜15Cを識別する識別子としての領域番号と、合成対象領域15A〜15Cの代表点P1〜P3の座標、幅W1〜W3(左右方向の長さ)、および、高さH1〜H3(上下方向の長さ)を含む。代表点の座標は、1個の代表点、例えば、合成対象領域15A〜15Cに外接する外接矩形14A〜14Cの左上の頂点の座標が用いられる。
複合機200は、CPU210と、DRAMなどの揮発性記憶装置220と、フラッシュメモリやハードディスクドライブなどの不揮発性記憶装置230と、プリンタ部240と、スキャナ部250と、タッチパネルやボタンなどの操作部260と、液晶ディスプレイなどの表示部270と、外部機器と通信を行う通信部280と、を備えている。例えば、通信部280は、LAN50などのネットワークに接続するためのインタフェースや、外部記憶装置(例えば、USBメモリ)と接続するためのインタフェースを含んでいる。
揮発性記憶装置220には、CPU210が処理を行う際に生成される種々のデータを一時的に格納するバッファ領域221が設けられている。不揮発性記憶装置230には、制御プログラム231が格納されている。
プリンタ部240は、インクジェット方式やレーザー方式などの印刷方式を用いて印刷を実行する。スキャナ部250は、光電変換素子(例えば、CCD、CMOS)を用いて光学的に原稿を読み取ることによってスキャンデータを生成する。
CPU210は、制御プログラム231を実行することにより、複合機200の制御を実行する。例えば、CPU210は、プリンタ部240やスキャナ部250を制御して、コピー処理、印刷処理、スキャン処理などを実行する。さらに、CPU210は、サーバ400にアクセスして、サーバ400が提供するサービスを利用するサービス利用処理を、実行することができる。
A−2:画像処理システム1000の動作
サーバ400のCPU410は、クライアントとしての複合機200の要求に応じて、後述する元画像をテンプレート画像に合成して、合成画像を生成する画像処理を実行する。この画像処理は、サーバ400がクライアントに提供する画像生成サービスを実現するために、実行される。以下では、サーバ400が提供する画像生成サービスを含む画像処理システム1000の動作について説明する。
図3は、画像処理システム1000の動作を示すフローチャートである。このフローチャートの処理は、複合機200が、サーバ400が提供する画像生成サービスの利用指示を、ユーザから受け付けた場合に開始される。この画像生成サービスは、具体的には、ユーザの所有する画像データを用いて、ハガキ(例えば、年賀ハガキ)に印刷するための合成画像を生成するサービスである。ユーザの所有する画像データは、例えば、デジタルスチルカメラで撮影された写真を表す画像データであり、例えば、JPEG形式で圧縮された画像データである。
処理が開始されると、ステップS5では、複合機200のCPU210は、サービス開始要求を、サーバ400に対して送信する。サーバ400のCPU410は、サービス開始要求を受信すると、UIデータ群433(図1)から画像生成サービスの提供に必要なUIデータを選択し、該UIデータを複合機200に対して送信する(ステップS10)。UIデータは、具体的には、UI画像を表示するために必要な各種の画像データと、制御データと、を含む。この制御データは、例えば、UI画像を利用して複合機200が所定の処理(具体的には、後述するS15、S20、S30、S35の処理)を行うために必要な各種のデータを含む。例えば、制御データは、UI画像(例えば、図4)を介して受け付けたユーザの指示に基づいて、複合機200が実行すべき処理、例えば、サーバ400に所定の情報を送信する処理を示す情報を含む。
ステップS15では、CPU210は、受信したUIデータに基づいて、ユーザ指示受付処理を実行する。ユーザ指示受付処理は、サーバ400が画像生成サービスを提供するために必要なユーザの指示を、ユーザから受け付ける処理である。
図4は、UI画像の一例を示す図である。先ず、CPU210は、図4(A)のUI画像UG1を表示部270に表示して、利用するテンプレート画像の選択をユーザから受け付ける。例えば、UI画像UG1は、選択可能な複数個のテンプレート画像を示す複数個のサムネイル画像SM1、SM2と、テンプレート画像の選択を促すメッセージMS1と、を含む。UI画像UG1やサムネイル画像SM1、SM2示す画像データ群は、サーバ400から受信されたUIデータに含まれているデータ群が用いられる。次に、CPU210は、所定のUI画像(図示省略)を表示して、画像生成サービスの動作モードをユーザから受け付ける。本実施例では、動作モードは、詳細は後述するが「顔抽出モード」と「全体抽出モード」とを含んでいる。動作モードによって、利用するテンプレート画像と元画像(後述)とが同じであっても、生成される画像が異なる。
ステップS20では、CPU210は、ユーザから受け付けた指示を示す指示データをサーバ400に対して送信する。指示データは、ユーザによって選択されたテンプレート画像を指定する情報と、動作モードを指定する情報と、を含む。
ステップS25では、サーバ400のCPU410は、受信された指示データに基づいて、不揮発性記憶装置430に格納されたテンプレートデータ群432(図1)の中から、ユーザによって選択されたテンプレート画像に対応するテンプレートデータを取得する。テンプレートデータは、外部機器、例えば、サーバ400と接続された他のサーバや外部記憶装置から取得されても良い。なお、図2に示すテンプレート画像10がユーザによって選択された場合を例として、以後の処理を説明する。
ステップS20の指示データの送信に続いて、複合機200のCPU210は、元画像データ選択処理を実行する(ステップS30)。元画像データ選択処理は、テンプレート画像10に合成すべき画像(元画像とも呼ぶ)をユーザの指示に基づいて選択する処理である。具体的には、CPU210は、図4(B)のUI画像UG2を表示部270に表示して、使用する元画像の選択をユーザから受け付ける。例えば、UI画像UG2は、選択可能な複数個の元画像を示す複数個のサムネイル画像SI1〜SI4と、元画像の選択を促すメッセージMS2と、を含む。サムネイル画像SI1〜SI4を表す画像データは、元画像を表す画像データ(元画像データとも呼ぶ)に基づいて生成される。
元画像データは、例えば、ユーザによって指定された記憶装置から取得される。指定される記憶装置には、例えば、通信部280に接続されたUSBメモリなどのリムーバブルメディアや、外部のハードディスクドライブや、複合機200の内部に備えられた記憶装置220、230が含まれる。本実施例の元画像データは、例えば、ユーザが所有する画像データ、具体的には、ユーザがデジタルカメラを用いて撮影を行うことで生成された画像データ、あるいは、画像生成アプリケーションなどを用いて生成された画像データである。
CPU210は、利用するテンプレート画像に含まれる合成領域の個数の元画像の選択を受け付ける。例えば、テンプレート画像10を利用する場合には、テンプレート画像10は、他の画像を合成すべき3個の合成対象領域15A〜15Cを含んでいるので(図2(A))、3個の元画像が選択される。
図5は、元画像の一例を示す図である。元画像には、オブジェクトとしての人物の顔を含む画像と、人物の顔を含まない画像と、が含まれる。例えば、図5(A)の元画像16は、1個の顔16Aを含み、図5(B)の元画像17は、2個の顔17A、17Bを含み、図5(D)の元画像19は、2個の顔19B、19Cを含む。図5(C)の元画像18は、人物の顔を含んでいない。元画像には、人物の顔とは異なるオブジェクト、例えば、建物18A(図5(C))、木19A(図5(D))が含まれ得る。3個の元画像16〜18がユーザによって選択された場合を例に、以後の処理を説明する。ただし、説明の便宜のために、他の元画像も、一例として適宜に参照する。
元画像が選択されると、ステップS35では、CPU210は、選択された3個の元画像16〜18を表す3個の元画像データをサーバ400に送信する。このときに、CPU210は、元画像がユーザによって選択された順序を示す情報を、元画像データに対応付けて、送信する。これによって、サーバ400のCPU410は、3個の元画像データと、選択順序を示す情報と、を取得する(ステップS40)。テンプレート画像10の3個の合成対象領域15A〜15Cには、予め処理順序が決められており、選択順序が先の元画像が、処理順序が先の合成対象領域に、順次に対応付けられる。また、元画像を表す元画像データに、元画像の撮影日時を示す情報(タイムスタンプ)が対応付けられている場合には、撮影日時が早い元画像が、処理順序が先の合成対象領域に、対応付けられても良い。
ステップS45では、CPU410は、クロッピング処理を実行する。クロッピング処理は、テンプレート画像10の3個の合成対象領域15A〜15Cに合成すべき部分画像を含む矩形画像を、3個の元画像16〜18からそれぞれ抽出する処理である。
図6は、クロッピング処理のフローチャートである。ステップS100では、CPU410は、取得された元画像データから、1個の元画像データを処理対象とする画像データ(対象画像データとも呼ぶ)として選択する。
ステップS110では、CPU410は、対象画像データによって表される画像(対象画像とも呼ぶ)内に存在する顔領域FAを検出する顔領域検出処理を実行する。顔領域FAは、対象画像内に含まれる人物の顔を含む領域である。顔領域検出処理は、公知の方法を用いて実行される。例えば、顔領域検出処理は、例えば、エッジのような低次特徴から眼や口のような高次特徴を階層的に検出し、最終的に顔の重心位置や顔の外形などを検出するコンボリューションニューラルネットワークが知られている(例えば、特開2013−120954、特開2009−237618参照)。
なお、傾いた顔を含む顔領域を、顔の傾き角を示す角度情報などとともに特定できる第1種のアルゴリズムを用いる場合には、1つの方向に関してのみの対象画像に対して顔検出処理が実行される。基準方向を向いた顔の領域を検出する第2種のアルゴリズムを用いる場合には、対象画像を、0度(回転無し)、90度、180度、270度だけ回転させた4つの方向に関する対象画像に対してそれぞれ顔検出処理が実行される。基準方向を向いた顔は、例えば、頭頂部が上方を向き、かつ、あごが下を向いた顔である。顔領域検出処理によって、本実施例では、顔に外接する外接矩形が顔領域として特定される。すなわち、顔に外接する外接矩形の位置およびサイズを示す情報が算出される。
例えば、図5(A)の元画像16では、顔16Aを含む顔領域FA1が検出される。図5(A)の元画像17では、2個の顔17A、17Bを含む2個の顔領域FA2、FA3が検出される。図5(D)の元画像19では、2個の顔19B、17Cを含む2個の顔領域FA4、FA5が検出される。図5(C)の元画像18では、顔領域FAは検出されない。
ステップS115では、CPU410は、対象画像内に顔領域FAが検出されたか否かを判断する。顔領域FAが検出された場合には(ステップS115:YES)、CPU410は、顔領域FAの検出結果に基づいて、必要に応じて対象画像を回転する。例えば、上述した第1種のアルゴリズムを用いて顔検出処理が実行された場合には、特定された顔の傾き角に基づいて、顔領域FA内の顔が上述した基準方向を向くように、対象画像が回転される。なお、回転角度は、0度(回転無し)、90度、180度、270度のうちのいずれかが用いられる。
また、第2種のアルゴリズムを用いて顔検出処理が実行された場合には、顔検出処理時の4つの回転角度、0度、90度、180度、270度のうち、検出された顔領域の個数が最も多い回転角度で、対象画像が回転される。
顔領域FAを含む画像(例えば、写真画像)を用いて合成画像を生成する場合には、その他のオブジェクトの向きに拘わらずに、合成画像において、顔領域FA内の顔が上述した基準方向を向いていることが好ましい場合が多い。本実施例では、顔領域FAが検出された場合には、顔領域の検出結果に基づいて回転処理を行う。この結果、後に、対象画像(元画像)がテンプレート画像10に合成されるときに、対象画像内の顔が適切な方向を向いた状態で対象画像が合成される。この結果、適切な合成画像を生成することができる。
顔領域FAが検出されない場合には(ステップS115:NO)、CPU410は、対象画像の4個の端部の平均輝度を算出する(ステップS125)。具体的には、図5(C)の元画像18に示すように、対象画像の上下左右の4方向の端に沿う帯状の4個の領域TA1〜TA4内の画素の平均輝度が、それぞれ算出される。帯状の領域TA1〜TA4の幅BTは、予め定められており、例えば、対象画像の上下方向の長さ(高さとも呼ぶ)、または、左右方向の長さ(幅とも呼ぶ)の5%〜20%の長さに設定される。
ステップS130では、CPU410は、算出された4個の端部の平均輝度に基づいて、対象画像を回転する。具体的には、4個の端部のうち、平均輝度が最も高い輝度が上方に位置するように、対象画像を回転する。対象画像が写真画像である場合には、撮影された被写体の上方の輝度が高い可能性が高い。屋外での太陽や外灯、屋内での室内灯などの光源は、被写体となる人物や風景の上方に位置する可能性が高いからである。本実施例では、ステップS130によって、対象画像を適切な方向に回転することができる。特に、顔領域FAが検出されない場合や、顔領域検出処理を行わない場合であっても、対象画像を適切な方向に回転することができる。この結果、後に、対象画像(元画像)がテンプレート画像10に合成されるときに、対象画像内の被写体(例えば、風景)が適切な方向を向いた状態で対象画像が合成される。この結果、適切な合成画像を生成することができる。ステップS130に続いて、後述する最大矩形抽出処理A(ステップS165)が実行される。
ステップS120に続くステップS135では、CPU410は、ユーザによって指定された動作モードが顔抽出モードであるか、全体抽出モードであるか、を判断する。動作モードが全体抽出モードである場合には(ステップS135:NO)、CPU410は、後述する最大矩形抽出処理A(ステップS165)を実行する。動作モードが顔抽出モードである場合には(ステップS135:YES)、CPU410は、画像種類判定処理を実行する(ステップS140)。顔抽出モードは、顔領域FAの検出結果に基づいて、合成対象領域に合成すべき部分画像を変更する動作モードである。全体抽出モードは、顔領域FAの有無に拘わらずに、合成対象領域に合成すべき部分画像を決定する動作モードである。
図7は、画像種類判定処理のフローチャートである。画像種類判定処理は、対象画像が、人物画像であるか、非人物画像であるか、を判定する処理である。人物画像は、人物が主要なオブジェクトである画像である。非人物画像は、人物とは異なるオブジェクトが、主要なオブジェクトである画像である。人物とは異なるオブジェクトは、風景や、車や家などの人工物などを含む。
ステップS200では、CPU410は、対象画像内に、第1の閾値TH1以上のサイズを有する顔領域FAが存在するか否かを判断する。第1の閾値TH1は、例えば、高さの閾値と幅の閾値との組合わせであっても良く、面積の閾値であっても良い。対象画像内の顔領域FAは、図6のステップS100にて検出済みである。第1の閾値TH1は、例えば、一人の人物のポートレートに含まれ得る顔領域のサイズより小さい値に設定される。第1の閾値TH1は、例えば、複数の人物を含む写真(家族写真や集合写真など)に含まれ得る顔領域のサイズより大きい値に設定される。具体的には、一人の人物のポートレートに含まれ得る顔領域のサイズには、対象画像の面積の6%程度の面積に相当するサイズが想定される。複数の人物を含む写真に含まれ得る顔領域のサイズには、例えば、対象画像の面積の3%程度の面積に相当するサイズが想定される。
例えば、図5(A)の元画像16の顔領域FA1のサイズは、第1の閾値TH1以上であると判断される。図5(B)、図5(D)の元画像17、19の顔領域FA2〜FA5のサイズは、第1の閾値TH1より小さいと判断される。
第1の閾値TH1以上のサイズを有する顔領域FAが存在する場合には(ステップS200:YES)、CPU410は、対象画像は、人物画像であると判定する(ステップS215)。例えば、図5(A)の元画像16は、人物画像であると判定される。
第1の閾値TH1以上のサイズを有する顔領域FAが存在しない場合には(ステップS200:NO)、CPU410は、第1の閾値TH1より小さな第2の閾値TH2以上のサイズを有する顔領域FAが2個以上存在するか否かを判断する(ステップS205)。第2の閾値TH2は、例えば、複数の人物を含む写真(家族写真や集合写真など)に含まれ得る顔領域のサイズより小さな値に設定される。例えば、図5(B)、図5(D)の元画像17、19の顔領域FA2〜FA5のサイズは、第2の閾値TH2以上であると判断される。
第2の閾値TH2以上のサイズを有する2個以上の顔領域FAが存在しない場合には(ステップS205:NO)、CPU410は、対象画像は、非人物画像であると判定する(ステップS220)。
第2の閾値TH2以上のサイズを有する2個以上の顔領域FAが存在する場合には(ステップS205:YES)、CPU410は、最も近い顔領域のペア(以下、最近接ペアとも呼ぶ)を構成する2個の顔領域の距離DFが、第3の閾値TH3以下であるか否かを判断する(ステップS210)。最近接ペアは、第2の閾値TH2以上のサイズを有する2個以上の顔領域FAのうち、互いの距離が最も近い2個の顔領域FAで構成されるペアである。2個の顔領域FAの距離には、例えば、2個の顔領域FAのうち、右側の顔領域FAの右端と、左側の顔領域FAの左端と、の間の横方向の距離が用いられる。図5(B)には、元画像17内の、顔領域FA2と顔領域FA3との間の距離DF1が示されている。図5(D)には、元画像19内の、顔領域FA4と顔領域FA5との間の距離DF2が示されている。第3の閾値TH3は、例えば、対象画像の横方向の長さ(幅)の1/3の長さに設定される。
距離DFが第3の閾値TH3以下である場合には(ステップS210:YES)、CPU410は、対象画像は、人物画像であると判定する(ステップS215)。距離DFが第3の閾値TH3より大きい場合には(ステップS210:NO)、CPU410は、対象画像は、非人物画像であると判定する(ステップS220)。
距離DFが比較的近い場合には、対象画像は、複数の人物を主要なオブジェクトとする画像、例えば、家族写真や集合写真である可能性が高いと考えられる。一方、距離DFが比較的遠い場合には、対象画像内の人物は、対象画像の主要なオブジェクトではない可能性が高い。具体的には、対象画像内の人物は、人物以外のオブジェクトを撮影したときに、偶然に、対象画像内の端部に写った人物である可能性が考えられる。例えば、図5(B)の元画像17は、顔領域FA2と顔領域FA3との間の距離DF1が比較的近いので人物画像であると判定される。また、図5(D)の元画像19は、顔領域FA4と顔領域FA5との間の距離DF2が比較的遠いので非人物画像であると判定される。
以上説明した画像種類判定処理によれば、対象画像内の顔領域FAの個数およびサイズ、および、顔領域の位置(具体的には、2個の顔領域の間の距離)に基づいて、対象画像の種類を適切に判定することができる。対象画像が、人物画像であるか、非人物画像であるか、が判定されると、画像種類判定処理は、終了される。
図6に戻って説明を続ける。画像種類判定処理にて、対象画像が人物画像であると判定された場合には(ステップS145:YES)、CPU410は、対象画像内の有効な顔領域FAの個数は、1個であるか否かを判断する(ステップS150)。ここで、有効な顔領域FAは、上述した画像種類判定処理(ステップS140)において考慮された顔領域FAである。したがって、人物画像であると判定された対象画像には、少なくとも1個以上の有効な顔領域FAが存在する。
有効な顔領域FAの個数は、1個である場合には(ステップS150:YES)、CPU410は、顔周囲領域抽出処理を実行する(ステップS155)。顔周囲領域抽出処理は、有効な1個な顔領域FAを含み、かつ、有効な1個の顔領域FAのサイズに基づいて決定されるサイズを有する矩形画像を、対象画像から抽出する処理である。
図8は、顔周囲領域抽出処理のフローチャートである。図9は、対象画像に対する抽出枠EAの設定について説明する図である。以下では、図9に示す元画像16の顔領域FA1に対して、抽出枠EA1を設定する場合を例に説明する。
ステップS300では、CPU410は、テンプレート画像10内の合成対象領域15A〜15Cのうち、対象画像を合成すべき合成対象領域の縦横比AR1を算出する。縦横比は、横方向の長さ(幅)Wに対する縦方向の長さ(高さ)Hの比H/Wである。合成対象領域の縦横比AR1は、例えば、領域情報12(図2(C))を用いて算出される。抽出枠EAは、後述するように、合成対象領域の縦横比AR1を有する矩形に設定される。
図2に示すように、合成対象領域は、合成対象領域15Aのように、矩形を有している場合もあるが、矩形とは異なる様々な外形などを有している場合がある。例えば、合成対象領域15Bは、ノコギリの歯のように比較的複雑に配置された多数の辺を含む外形を有している。図2の合成対象領域15Cは、曲線を含む外形を有しており、合成対象領域15Bは、矩形の外形を有している。その他にも合成対象領域は、例えば、円や、三角形などの各種の多角形などの形状を有し得る。このために、本実施例では、合成対象領域15A〜15Cに外接する外接矩形14A〜14Cの幅および高さが、合成対象領域15A〜15Cの幅および高さとして用いられる(図2(A))。例えば、合成対象領域15Aの縦横比AR1は、H1/W1であり、合成対象領域15Cの縦横比AR1は、H3/W3である。
ステップS305では、CPU410は、顔領域FAの縦横比AR2を算出する。図9の顔領域FA1の縦横比AR2は、図9に示すようにFH1/FW1である。ステップS310では、CPU410は、顔領域FAの縦横比AR2が、合成対象領域の縦横比AR1より大きいか否かを判断する(ステップS310)。
縦横比AR2が縦横比AR1より大きい場合には(ステップS310:YES)、CPU410は、顔領域FAの高さFHを基準にして、抽出枠EAの高さEHを決定する(ステップS330)。例えば、顔領域FAの高さFHの100%〜150%の範囲に、抽出枠EAの高さEHが決定される。より具体的には、抽出枠EAの高さEHは、顔領域FAの高さFHと、基準マージンTMの2倍と、の和に決定される(EH=FH+2TM)。そして、抽出枠EAの高さEHを決定した後に、抽出枠EAの縦横比が、顔領域FA1の縦横比AR1と同じになるように、抽出枠EAの幅EWを決定する(ステップS340)。縦横比AR2が縦横比AR1より大きい場合には、抽出枠EAの形状が顔領域FAの形状より横長になる。したがって、抽出枠EAの幅EWを高さEHより先に決定すると、顔領域FAと抽出枠EAとの間の縦方向のマージンが基準マージンTMより小さくなる。場合によっては、顔領域FAの高さFHより抽出枠EAの高さTHが小さくなり、本来、抽出枠EA内に含まれるべき顔領域FAの上下の端が、抽出枠EA内に含まれなくなることが起こり得る。このために、縦横比AR2が縦横比AR1より大きい場合には、基準マージンTMを抽出枠EAの4方向に確保するために、抽出枠EAの高さEHを幅EWより先に決定する。
図9(A)では、顔領域FA1の縦横比AR2が、設定すべき抽出枠EA1の縦横比(すなわち、合成すべき合成対象領域の縦横比AR1)が、より大きい場合、すなわち、設定すべき抽出枠EA1が、顔領域FA1より横長な形状を有している場合が例示されている。この場合には、上述したように、抽出枠EA1の縦方向のマージン、すなわち、上側と下側のマージンUM、DMが、それぞれ基準マージンTMとなるように、抽出枠EA1の高さEH1が先に決定される(EH1=FH1+2TM、ステップS330)。その後に、抽出枠EA1の縦横比が、合成対象領域の縦横比AR1と同じになるように、抽出枠EA1の幅EW1が決定される(ステップS340)。
縦横比AR2が縦横比AR1以下である場合には(ステップS310:NO)、CPU410は、顔領域FAの幅FWを基準にして、抽出枠EAの幅EWを決定する(ステップS315)。例えば、顔領域FAの幅FWの100%〜150%の範囲に、抽出枠EAの幅EWが決定される。より具体的には、抽出枠EAの幅EWは、顔領域FAの幅FWと、基準マージンTMの2倍と、の和に決定される(EA=FW+2TM)。そして、抽出枠EAの幅EWを決定した後に、抽出枠EAの縦横比が、合成対象領域の縦横比AR1と同じになるように、抽出枠EAの高さEHを決定する(ステップS315)。縦横比AR2が縦横比AR1以下である場合には、抽出枠EAの形状が顔領域FAの形状より縦長になる。したがって、抽出枠EAの高さEHを幅EWより先に決定すると、顔領域FAと抽出枠EAとの間の横方向のマージンが基準マージンTMより小さくなる。場合によっては、顔領域FAの幅FWより抽出枠EAの幅TWが小さくなり、本来、抽出枠EA内に含まれるべき顔領域FAの左右の端が、抽出枠EA内に含まれなくなることが起こり得る。このために、縦横比AR2が縦横比AR1以下である場合には、基準マージンTMを抽出枠EAの4方向に確保するために、抽出枠EAの幅EWを高さEHより先に決定する。
ステップS350では、CPU410は、サイズが決定された抽出枠EAの中心と、顔領域FAの中心とが一致するように対象画像に対して抽出枠EAを設定する。この結果、縦方向または横方向の一方のマージンが基準マージンTMと同じになり、他方のマージンが基準マージンTM以上になるように、対象画像に対して抽出枠EAを設定することができる。図9(A)の例では、抽出枠EA1の縦方向のマージン、すなわち、上側と下側のマージンUM、DMが、それぞれ基準マージンTMとなっている。そして、抽出枠EA1の横方向のマージン、すなわち、右側と左側のマージンRM、LMが、それぞれ基準マージンTMより大きくなっている。本ステップで設定される抽出枠EAによって規定される領域が、第3の領域の例である。
ステップS360では、CPU410は、設定された抽出枠EAが、対象画像内に含まれているか否か(すなわち、設定された抽出枠EAが対象画像の外側にはみ出さないか否か)を判断する。例えば、図9(A)の例では、抽出枠EA1が、元画像16内に含まれている。図9(B)には、抽出枠EAが、対象画像内に含まれていない場合の例が示されている。対象画像としての元画像20は、顔領域FA6が、元画像20の右辺および上辺に比較的近い位置にある。このために、ステップS350において、元画像20に対して設定される抽出枠EA2は、元画像20より外側の部分OSA(図9(B)でクロスハッチングされた部分)を含んでいる。
設定された抽出枠EAが、対象画像内に含まれている場合には(ステップS360:YES)、CPU410は、対象画像のうち、抽出枠EAに対応する矩形画像を抽出する(ステップS380)。すなわち、CPU410は、対象画像を抽出枠EAを基準にクロッピングして得られる矩形画像を表す画像データを生成する。例えば、図9(A)の例では、抽出枠EA1に対応する矩形画像がクロッピングされる。矩形画像が抽出されると、顔周囲領域抽出処理は終了される。
設定された抽出枠EAが、対象画像内に含まれていない場合には(ステップS360:NO)、すなわち、抽出枠EAが対象画像より外側の部分を含む場合には、CPU410は、抽出枠EAを、対象画像内にシフトする(ステップS370)。具体的には、CPU410は、抽出枠EAの4つの辺のうち、対象画像より外側に位置する辺が、対象画像の対応する辺と一致するように、対象画像の中心に近づく方向に抽出枠EAをシフトする。例えば、図9(B)の例では、図9(B)の矢印ARで示す方向に抽出枠EA2がシフトされる。図9(C)には、図9(B)の抽出枠EA2をシフトされて得られる抽出枠EA2aが図示されている。抽出枠EA2aの上辺と元画像20の上辺は一致しており、抽出枠EA2aの右辺と元画像20の右辺は一致していることが解る(図9(C))。本ステップでシフトされた後の抽出枠EA2aによって規定される領域が、第4の領域の例である。
抽出枠EAがシフトされた後には、CPU410は、対象画像のうち、抽出枠EAに対応する矩形画像を抽出する(ステップS380)。すなわち、CPU410は、対象画像をシフト済みの抽出枠EAを基準にクロッピングして得られる矩形画像を表す画像データを生成する。例えば、図9(C)の例では、抽出枠EA2aに対応する矩形画像がクロッピングされる。矩形画像が抽出されると、顔周囲領域抽出処理は終了される。
このように、抽出枠EAが対象画像内に含まれる場合には、顔領域FAの中心を基準として配置される抽出枠EAに対応する矩形画像が抽出され、抽出枠EAが対象画像内に含まれない場合には、対象画像内にシフトされた抽出枠EAに対応する矩形画像が抽出される。したがって、後の処理で矩形画像内の部分画像を合成対象領域に合成する際に、適切な部分画像を矩形画像から特定することができる。すなわち、合成対象領域内に部分画像が合成できない部分が生じず、かつ、顔領域FAが合成対象領域内に適切に配置されるように、適切なサイズの部分画像を特定することができる。
図6に戻って説明を続ける。対象画像内に有効な顔領域が複数個存在する場合には(ステップS150:NO)、CPU410は、最大矩形抽出処理Bを実行する(ステップS160)。一方、ステップS115にて顔領域FAが検出されずにステップS130が実行された後、あるいは、動作モードが全体抽出モードである場合(ステップS135:NO)、あるいは、対象画像が非人物画像であると判断された場合には(ステップS145:NO)、最大矩形抽出処理Aが実行される(ステップS165)。最大矩形抽出処理Bは、最大矩形抽出処理Aより複雑な処理であるので、理解の容易のために、最大矩形抽出処理Aを先に説明する。
図10は、最大矩形抽出処理Aのフローチャートである。図11は、最大矩形抽出処理Aの説明図である。最大矩形抽出処理Aは、顔領域FAの有無とは無関係に、対象合成領域の縦横比AR1と等しい縦横比を有する矩形画像であって、対象画像から抽出し得る最大の矩形画像を抽出する処理である。
ステップS400では、CPU410は、上述した合成対象領域の縦横比AR1を算出する。ステップS405では、CPU410は、対象画像の縦横比AR3を算出する。ステップS410では、CPU410は、対象画像の縦横比AR3が、合成対象領域の縦横比AR1より大きいか否かを判断する。
縦横比AR3が縦横比AR1より大きい場合には(ステップS410:YES)、CPU410は、抽出枠EAの幅EWを、対象画像の幅GWと同じ値に決定する(ステップS415)。そして、抽出枠EAの幅EWを決定した後に、抽出枠EAの縦横比が、合成対象領域の縦横比AR1と同じになるように、抽出枠EAの高さEHを決定する(ステップS420)。縦横比AR3が縦横比AR1より大きい場合には、対象画像の形状が、抽出枠EAの形状より縦長になる。したがって、抽出枠EAの高さEHを幅EWより先に決定すると、抽出枠EAが対象画像より大きくなってしまう。このために、縦横比AR3が縦横比AR1より大きい場合には、対象画像内に抽出枠EAを設定するために、抽出枠EAの幅EWを高さEHより先に決定する。
図11(A)では、対象画像である元画像18の縦横比AR3が、設定すべき抽出枠EA3の縦横比(すなわち、合成すべき合成対象領域の縦横比AR1)より大きい。すなわち、元画像18が、設定すべき抽出枠EA3より縦長な形状を有している。この場合には、上述したように、抽出枠EA3の幅EW3が先に決定される(EW3=GW1、ステップS415)。その後に、抽出枠EA3の縦横比が、合成対象領域の縦横比AR1と同じになるように、抽出枠EA3の高さEH3が決定される(ステップS420)。
縦横比AR3が縦横比AR1以下である場合には(ステップS410:NO)、CPU410は、抽出枠EAの高さEHを、対象画像の高さGHと同じ値に決定する(ステップS430)。そして、抽出枠EAの高さEHを決定した後に、抽出枠EAの縦横比が、合成対象領域の縦横比AR1と同じになるように、抽出枠EAの幅EWを決定する(ステップS440)。縦横比AR3が縦横比AR1以下である場合には、対象画像の形状が、抽出枠EAの形状より横長になる。したがって、抽出枠EAの幅EWを高さEHより先に決定すると、抽出枠EAが対象画像より大きくなってしまう。このために、縦横比AR3が縦横比AR1以下である場合には、対象画像内に抽出枠EAを設定するために、抽出枠EAの高さEHを幅EWより先に決定する。
図11(B)では、対象画像である元画像19の縦横比AR3が、設定すべき抽出枠EA4の縦横比(すなわち、合成すべき合成対象領域の縦横比AR1)以下である。すなわち、元画像19が、設定すべき抽出枠EA4より横長な形状を有している。この場合には、上述したように、抽出枠EA4の高さEH4が先に決定される(EH4=GH2、ステップS430)。その後に、抽出枠EA4の縦横比が、合成対象領域の縦横比AR1と同じになるように、抽出枠EA4の幅EW4が決定される(ステップS440)。
ステップS400〜S440までの処理によって、抽出枠EAのサイズが決定される。決定されるサイズは、対象合成領域の縦横比AR1と等しい縦横比を有する矩形であって、対象画像内に含まれ得る最大の矩形のサイズ(以下、最大矩形サイズとも呼ぶ)である。
ステップS450では、CPU410は、サイズが決定された抽出枠EAの中心と、対象画像の中心と、が一致するように対象画像に対して抽出枠EAを設定する。ステップS460では、CPU410は、対象画像のうち、抽出枠EAに対応する矩形画像を抽出する。この結果、対象画像を抽出枠EAを基準にクロッピングして得られる矩形画像を表す画像データが生成される。矩形画像が抽出されると、最大矩形抽出処理Aは終了される。上述したように、抽出枠EAの幅EWが対象画像の幅GWと同じ値に設定される(ステップS415)、あるいは、抽出枠EAの高さEHが対象画像の高さGHと同じ値に設定される(ステップS430)。したがって、矩形画像の上下の2辺、および、左右の2辺のうちの少なくとも一方の2辺が、対象画像の対応する2辺と一致するように、矩形画像が抽出される。
最大矩形抽出処理Aによって、最大矩形サイズを有する矩形画像を抽出することができる。この結果、後の処理で矩形画像内の部分画像を合成対象領域に合成する際に、合成対象領域には、合成対象領域と相似な形状を有する対象画像内の最大のサイズの部分画像を合成することができる。
次に、図6のステップS150にて、対象画像内に有効な顔領域が複数個存在すると判断された場合(ステップS150:NO)に実行される最大矩形抽出処理Bについて説明する。最大矩形抽出処理Bでは、最大矩形抽出処理Aと同様に、最大矩形サイズの抽出枠EAを設定して、矩形画像を抽出する処理である。最大矩形抽出処理Bでは、複数個の顔領域の位置に基づいて、抽出枠EAの位置を調整する点が、最大矩形抽出処理Aと異なる。
図12は、最大矩形抽出処理Bのフローチャートである。図13は、最大矩形抽出処理Bの説明図である。ステップS500では、図10のステップS400〜S440までの処理が、実行される。この結果、対象画像に設定すべき抽出枠EAのサイズ(最大矩形サイズ)が決定される。
ステップS505では、CPU410は、対象画像の縦横比AR3が、合成対象領域の縦横比AR1(すなわち、設定すべき抽出枠EAの縦横比AR1)より大きいか否かを判断する。縦横比AR3が縦横比AR1より大きい場合には(ステップS505:YES)、すなわち、対象画像が、設定すべき抽出枠EAより縦長な形状を有する場合には、CPU410は、処理方向を縦方向に決定する(ステップS510)。縦横比AR3が縦横比AR1以下である場合には(ステップS505:NO)、すなわち、対象画像が、設定すべき抽出枠EAより横長な形状を有する場合には、CPU410は、処理方向を横方向に決定する(ステップS515)。例えば、図13(A)、図13(B)に示す元画像17、21が対象画像である場合には、処理方向は横方向に決定される。
処理方向が決定されると、ステップS520では、CPU410は、対象画像内の2個の顔領域FAP、FAQの間の距離Dを算出する。2個の顔領域FAP、FAQは、抽出対象の複数個の顔領域FAのうち、処理方向の両端に位置する2個の顔領域である。初回のステップS520では、対象画像内の全ての有効な顔領域が抽出対象である。後述するように、ステップS520が2回以上実行される場合には、一部の顔領域が、抽出対象から除外されている。
図13(A)に示す元画像17が対象画像である場合には、有効な2個の顔領域FA2、FA3が、距離Dが算出されるべき2個の顔領域FAP、FAQである。したがって、右側の顔領域FA3の右端と、左側の顔領域FA2の左端と、の間の横方向の距離D1が算出される。図13(B)に示す元画像21元画像17が対象画像である場合には、初回のステップS520では、有効な3個の顔領域FA6〜FA8のうち、右端の顔領域FA8と左端の顔領域FA6とが、距離Dが算出されるべき2個の顔領域FAP、FAQである。したがって、右側の顔領域FA8の右端と、左側の顔領域FA6の左端と、の間の横方向の距離D2が算出される。
ステップS525では、CPU410は、算出された距離Dが、抽出枠EAの処理方向の長さより長いか否かを判断する。処理方向が横方向である場合には、距離Dが抽出枠EAの幅EWより大きいか否かが判断され、処理方向が縦方向である場合には、距離Dが抽出枠EAの高さEHより大きいか否かが判断される。図13(A)の例では、距離D1は、抽出枠EA6の幅EW6以下であると判断される。図13(B)の例では、距離D2は、抽出枠EA7の幅EW7より長いと判断される。
距離Dが、抽出枠EAの処理方向の長さより長い場合には(ステップS525:YES)、現在の抽出対象の顔領域FAを全て含み、かつ、最大矩形サイズを有する領域は、対象画像内には含まれない(存在しない)、と判断できる。すなわち、このような抽出枠EAは、対象画像内に設定できないと判断できる。したがって、この場合には、CPU410は、このような抽出枠EAとは異なる抽出枠EAを設定する処理を実行する。すなわち、CPU410は、距離Dが算出された2個の顔領域FAP、FAQのサイズを比較して、小さい方の顔領域を抽出対象から除外する(ステップS530〜540)。すなわち、顔領域FAPのサイズが顔領域FAQのサイズより小さい場合には(ステップS530:YES)、顔領域FAPが抽出対象から除外される(ステップS535)。そして、顔領域FAPのサイズが顔領域FAQのサイズ以上である場合には(ステップS530:NO)、顔領域FAQが抽出対象から除外される(ステップS540)。1個の顔領域が抽出対象から除外されると、CPU410は、ステップS520に処理を戻す。
例えば、図13(B)の例では、初回のステップS520で算出される距離D2が、抽出枠EA7の幅EW7より長い。したがって、顔領域FA6と顔領域FA8とのうち、サイズが小さい顔領域FA8が抽出対象から除外される。そして、2回目のステップS520では、顔領域FA6と顔領域FA7との間の距離D3が算出される。
距離Dが、抽出枠EAの処理方向の長さ以下である場合には(ステップS525:NO)、現在の抽出対象の顔領域FAを全て含むように、最大矩形サイズを有する抽出枠EAが設定できると判断できる。したがって、この場合には、CPU410は、現在の抽出対象の顔領域FAを全て含むように、対象画像内に、最大矩形サイズを有する抽出枠EAを設定する(ステップS545)。具体的には、顔領域FAPの外側の端と顔領域FAQの外側の端との間の処理方向の中心位置と、抽出枠EAの処理方向の中心位置とが、一致するように、抽出枠EAを対象画像内に設定する。このように中心位置に基づいて抽出枠EAを対象画像内に設定することによって、現在の抽出対象の顔領域FAが抽出枠EA内に適切に含まれるように、抽出枠EAを設定することができる。この結果、後の処理にて、複数個の顔領域FAが適切に配置された部分画像を、テンプレート画像10に合成することができる。
例えば、図13(A)の例では、初回のステップS520で算出される距離D1が、設定されるべき抽出枠EA6の幅EW6以下である。したがって、図13(A)に示す中心位置CL1が、抽出枠EA6の横方向の中心位置と一致するように、抽出枠EA6が設定される。図13(A)に示す中心位置CL1は、右側の顔領域FA3の右端と、左側の顔領域FA2の左端と、の間の横方向の中心位置である。
また、図13(B)の例では、2回目のステップS520で算出される距離D3が、設定されるべき抽出枠EA7の幅EW7以下である。したがって、図13(B)に示す中心CL2と、抽出枠EA7の横方向の中心とが、一致するように、抽出枠EA7が設定される。図13(B)に示す中心CL2は、抽出対象である2個の顔領域FAのうちの右側の顔領域FA7の右端と、左側の顔領域FA6の左端と、の間の横方向の中心位置である。換言すれば、図13(B)の例では、元画像21内の横方向の両端に位置する2個の顔領域FA6、FA8のうち、サイズが大きい顔領域FA6を含み、サイズが小さい顔領域FA8を含まない抽出枠EA7が設定される。この結果、後の処理にて、比較的サイズが大きい顔領域FAを含むように、適切な部分画像をテンプレート画像10に合成することができる。
ステップS550では、CPU410は、対象画像のうち、抽出枠EAに対応する矩形画像を抽出する。この結果、抽出枠EAを基準にして対象画像をクロッピングして得られる矩形画像を表す画像データが生成される。矩形画像が抽出されると、最大矩形抽出処理Bは終了される。
最大矩形抽出処理Bによって、最大矩形抽出処理Aと同様に、合成対象領域の縦横比AR1を有し、かつ、対象画像内に設定し得る最大の矩形を抽出枠EAとして設定することができる。さらに、設定される抽出枠EAには、少なくとも1個の顔領域FAが含まれる。この結果、後の処理で矩形画像内の部分画像を合成対象領域に合成する際に、合成対象領域には、合成対象領域と相似な形状を有する対象画像内の最大のサイズの部分画像であって、少なくとも1個の顔領域FAを含む部分画像を合成することができる。
顔周囲領域抽出処理、最大矩形抽出処理A、Bのいずれかによって対象画像から矩形画像が抽出されると、図6のステップS170では、CPU410は、全ての元画像データを対象画像データとして処理したか否かを判断する。未処理の元画像データがある場合には(ステップS170:NO)、ステップS100に戻って、未処理の元画像データが選択され、上述したステップS100〜S160までの処理が繰り返される。全ての元画像データが処理された場合には(ステップS170:YES)、クロッピング処理は終了される。
図14は、元画像から抽出される矩形画像の一例を示す図である。図15は、生成される合成画像の一例を示す図である。図14(A)〜図14(C)は、図5の元画像16〜18から抽出された矩形画像26〜28をそれぞれ示す。以下に説明する処理によって、図14の3個の矩形画像26〜28と、図2(A)に示すテンプレート画像10と、が合成されて、図16の合成画像10Mが生成される。
クロッピング処理の後、図3のステップS50では、CPU410は、サイズ調整処理を実行する。サイズ調整処理は、クロッピング処理によって抽出された矩形画像のサイズを、対応する合成対象領域のサイズに応じて調整する処理である。矩形画像に対応する合成対象領域は、当該矩形画像の輪郭に内接する部分画像が合成されるべき合成対象領域である。図14、図15の例では、矩形画像26〜28が、テンプレート画像10(図2(A))の合成対象領域15A〜15Cにそれぞれ対応する。
具体的には、CPU410は、矩形画像の横方向のサイズと、対応する合成対象領域の外接矩形の横方向のサイズと、のサイズ比を算出する。CPU410は、算出されたサイズ比を用いて、矩形画像の縦横比を変更することなく、矩形画像を拡大または縮小する。矩形画像の縦横比は、合成対象領域の縦横比と一致するように抽出されているので、拡大または縮小の結果、矩形画像の縦方向および横方向のサイズは、対応する合成対象領域の外接矩形の縦方向および横方向のサイズと一致する。例えば、サイズが調整された後の矩形画像26〜28(図14)のサイズは、合成対象領域15A〜15Cの外接矩形14A〜14C(図2)のサイズと一致する。
ステップS55では、CPU410は、サイズが調整された後の矩形画像を用いて、矩形画像内の部分画像を、対応する合成対象領域に合成する合成処理を実行する。具体的には、CPU410は、領域情報12(図2(C))を参照して、テンプレート画像10上における合成対象領域の左上の頂点の位置(座標)を取得する。CPU410は、合成対象領域の外接矩形の左上の頂点の画素と、矩形画像の左上の頂点の画素と、が対応するように、テンプレート画像10の座標系と、矩形画像の座標系と、を対応付ける。例えば、矩形画像26〜28の頂点P26〜P28(図14)の画素は、合成対象領域15A〜15Cの外接矩形14A〜14Cの頂点P1〜P3の画素(図2(A))に対応付けられる。
そして、CPU410は、矩形画像内の画素を1個ずつ注目画素に設定して、矩形画像内の画素ごとに次の処理を実行する。すなわち、CPU410は、矩形画像内の注目画素に対応する、マスク画像11(図2(B))内の画素を参照する。CPU410は、参照したマスク画像11内の画素の値が第2値である場合には、参照したマスク画像11内の画素に対応するテンプレート画像10内の画素の色値を、矩形画像内の注目画素の色値に置換する。CPU410は、参照したマスク画像11内の画素の値が第1値である場合には、参照したマスク画像11内の画素に対応するテンプレート画像10内の画素の色値を、元の値に維持する。
この結果、テンプレート画像10の合成対象領域15A〜15Cを構成する複数個の画素の色値が、対応する矩形画像26〜28内の画素の色値に置換される。すなわち、対応する矩形画像26〜28から合成すべき部分画像26A〜28A(図14)が特定されて、特定された部分画像26A〜28Aが、テンプレート画像10の合成対象領域15A〜15C(図2)に合成される。この結果、合成画像10M(図15(A))を表す合成画像データが生成される。
図14に示すように、矩形画像26〜28内に特定される部分画像26A〜28Aは、矩形画像26〜28の輪郭に内接する画像であり、かつ、合成対象領域15A〜15Cと同じ形状、および、同じサイズを有する画像である。
そして、1個の顔領域FA1を含む矩形画像26は、上述した顔周囲領域抽出処理(図8、図9(A))によって元画像16(図5(A))から抽出された矩形画像である。すなわち、顔領域FA1を含む部分画像26A(図14(A))は、合成対象領域15Aと同じ縦横比を有し、かつ、顔領域FA1のサイズに基づいて決定されたサイズで、元画像16から抽出された矩形画像26の輪郭に内接する画像である。したがって、部分画像26Aは、元画像16(図5(A))の部分画像であり、かつ、元画像16内の顔領域FA1のサイズに基づいて決定されたサイズを有する部分画像である。
また、2個の顔領域FA2、FA3を含む矩形画像27は、上述した最大矩形抽出処理B(図12、図13(A))によって元画像17(図5(B))から抽出された矩形画像である。すなわち、2個の顔領域FA2、FA3を含む部分画像27A(図14(B))は、合成対象領域15Bと同じ縦横比を有し、かつ、元画像17から取り得る最大のサイズの矩形画像27の輪郭に内接する画像である。したがって、部分画像27Aは、元画像17の部分画像であり、かつ、合成対象領域15Bと相似な形状で、元画像17から取り得る最大のサイズの部分画像である。
同様に、有効な顔領域FAを含まない矩形画像28は、上述した最大矩形抽出処理A(図10、図11(A))によって元画像18(図5(C))から抽出された矩形画像である。すなわち、有効な顔領域FAを含まない部分画像28A(図14(C))は、合成対象領域15Cと同じ縦横比を有し、かつ、元画像18から取り得る最大のサイズの矩形画像28の輪郭に内接する画像である。したがって、部分画像28Aは、元画像18の部分画像であり、かつ、合成対象領域15Cと相似な形状で、元画像17から取り得る最大のサイズの部分画像である。
以上の説明から解るように、部分画像26Aは、第1の部分画像の例であり、部分画像27Aは、第2の部分画像の例である。
ステップS60では、CPU410は、ステップS55で生成された合成画像データを用いて、テスト画像10T(図15(B))を表すテスト画像データを生成する。テスト画像10Tは、合成画像10Mと余白MJとを含んでいる。余白MJには、テスト画像10Tが、合成画像10Mのテスト印刷のための画像であることを示すメッセージMS3、MS4が配置されている。
なお、合成画像10Mを示す合成画像データは、ハガキに合成画像10Mを印刷するための画像データである。一方、テスト画像10Tを表すテスト画像データは、ハガキより大きなA4サイズの用紙にテスト画像10Tを印刷するためのデータである。合成画像データを用いて、ハガキに印刷される合成画像10Mのハガキ上のサイズと、テスト画像データを用いて、A4サイズの用紙に印刷されるテスト画像10T内の合成画像10Mの用紙上のサイズとは、互いに等しい。このために、A4サイズの用紙に印刷されたテスト画像10Tを見たユーザは、ハガキに合成画像10Mを印刷することなく、ハガキに印刷された場合の合成画像10Mの内容を適切に確認することができる。
このように、テスト画像データによって表されるテスト画像10Tに含まれる合成画像10Mと、合成画像データによって表される合成画像10Mとは、同じサイズである。このため、テスト画像データは、合成画像データに余白分の画像データを付加するだけで容易に生成することができる。すなわち、テスト画像データのために新たな合成画像を生成しなくても良い。
ステップS65では、CPU410は、生成された合成画像データと、テスト画像データと、を複合機200に対して送信して処理を終了する。複合機200のCPU210は、合成画像データとテスト画像データとを受信すると、これらの画像データを不揮発性記憶装置230に格納するとともに、ユーザに合成画像データとテスト画像データを受信したことを通知する。なお、CPU210は、合成画像データとテスト画像データとを、複合機200に接続されたUSBメモリやメディアカードなどのリムーバブルメディアに格納しても良い。
合成画像データとテスト画像データは、ユーザの利用に供される。ユーザは、例えば、複合機200に、テスト画像10TをA4サイズの用紙上に印刷させる。そして、ユーザは、A4サイズの用紙に印刷されたテスト画像10Tに含まれる合成画像10Mを確認する。ユーザは、合成画像10Mの内容に満足した場合には、複合機200に、合成画像10Mをハガキ上に印刷させる。ユーザは、合成画像10Mの内容に満足しない場合には、合成画像10Mの生成をもう一度行ってもよい。例えば、使用するテンプレート画像や元画像を変更して、複合機200とサーバ400とに図3の処理をもう一度実行させても良い。
上記実施例によれば、1個の顔領域FA1を含む元画像16が対象画像である場合には、顔領域FA1を含み、顔領域FAのサイズに基づいて決定されるサイズを有する部分画像26Aが特定され、合成対象領域15Aに合成される(図8、図9、図14、図15)。そして、CPU410は、2個の顔領域FA2、F3を含む元画像17が対象画像である場合には、2個の顔領域FA2、F3を含み、合成対象領域15Bと相似な形状を有し、元画像17から取り得る最大のサイズの部分画像27Aが特定され、合成対象領域15Bに合成される(図12〜図15)。この結果、対象画像内に含まれる顔領域FAの個数に応じて、適切なサイズの部分画像がテンプレート画像10に合成される。この結果、サーバ400は、適切な合成画像10Mを表す合成画像データを生成することができる。
例えば、上記実施例は、ハガキなどの郵便物に印刷される合成画像を生成する場合、特に、年賀ハガキに印刷される合成画像を生成する場合に有効である。複数の人物(例えば、同じ家族の複数の人物)を含む画像をハガキに印刷する場合には、複数の人物が行った行動(旅行など)を伝える意図がある場合が多いと考えられるからである。したがって、この場合には、複数の人物の顔とともに、複数の人物が行った行動が解る画像(例えば、人物の背景に写っている画像)を含む部分画像を特定することが適切であると考えられる。また、一人の人物(例えば、子供)を含む画像をハガキに印刷する場合には、一人の人物の現在の様子(成長の程度など)を伝える意図がある場合が多いと考えられるからである。この場合には、一人の人物の顔に基づくサイズの部分画像(例えば、一人の人物をクローズアップした部分画像)を特定することが適切であると考えられる。とりわけ、年賀ハガキに印刷される画像については、上記の推定が正しい場合が多い。
さらに、上記のクロッピング処理では、有効な顔領域FAを含まない元画像18が対象画像である場合には、合成対象領域15Cと相似な形状を有し、元画像18から取り得る最大のサイズの部分画像28Aが特定され、合成対象領域15Cに合成される(図10、図11、図14、図15)。この結果、顔領域FAを含まない対象画像から特定された適切なサイズの部分画像がテンプレート画像10に合成される。この結果、適切な合成画像10Mを表す合成画像データを生成することができる。
さらに、上記のクロッピング処理では、対象画像が人物画像である場合には、部分画像26A、27Aのように、顔領域を基準としたサイズや、合成対象領域と相似な形状で取り得る最大のサイズを有し、有効な顔領域FAを含む部分画像が特定される(図6のステップS145〜S160)。そして、対象画像が非人物画像である場合には、部分画像28Aのように、合成対象領域と相似な形状で取り得る最大のサイズを有し、顔領域とは無関係に決定される部分画像が特定される(図6のステップS145、S165)。この結果、対象画像が人物画像である場合にも、非人物画像である場合にも、適切な部分画像を特定することができる。
さらに、上記のクロッピング処理では、ユーザの指示に基づいて、動作モードが顔抽出モードに設定されている場合には、顔領域の検出結果に基づいて、顔周囲領域抽出処理、最大矩形抽出処理A、Bが使い分けられる。そして、動作モードが顔抽出モードに設定されている場合には、顔領域の有無に拘わらずに、最大矩形抽出処理Aのみが実行される。この結果、ユーザの意図に沿った適切な部分画像を特定することができる。
B.変形例
(1)上記実施例におけるクロッピング処理では、処理の始めに対象画像が適切な向きとなるように、対象画像を回転する処理が実行される(図6のステップS110〜S135)。例えば、上記実施例では、顔領域の検出結果に基づく回転処理(ステップS110〜S120)や、対象画像の端部近傍領域の輝度に基づく回転処理(ステップS125、S130)が採用されているが、これに限られない。
図16は、変形例の対象画像回転処理のフローチャートである。この回転処理は、例えば、図6のステップS110〜S135に代えて実行される。この回転処理は、元画像データに、撮影時の重力方向を特定するための重力情報が、付属情報(例えば、Exif(Exchangeable image file format)に規定されたメタデータ)として対応付けられている場合に、使用できる。ステップS600では、CPU410は、元画像データの付属情報から、当該重力情報を取得して、撮影時の重力方向を特定する。撮影時の重力方向は、デジタルカメラなどの撮影装置の向きを示す情報と言うことができる。重力情報は、例えば、デジタルカメラに備えられた加速度センサを用いて検出された重力に基づいて生成される情報である。ステップS610では、CPU410は、撮影時の重力方向が下方向になるように、対象画像を回転する。本変形例によれば、重力情報が元画像データに対応付けられている場合に、対象画像を適切かつ容易に回転することができる。この結果、適切な向きに回転された部分画像を用いて、適切な合成画像データを生成することができる。
(2)上記実施例において、元画像データは、ユーザの所有する画像データであり、USBメモリなどの記憶装置から取得されて、サーバ400に送信される。これに代えて、元画像データの全部または一部は、複合機200のスキャナ部250を用いて、ユーザが用意した原稿を光学的に読み取ることによって、取得されても良い。
(3)上記実施例のクロッピング処理において、対象画像内で検出された顔領域FAが1個である場合には、CPU410は、顔領域FAの4方向に所定のマージンが設けられるように決定された矩形画像を抽出している(図8、図9(A))。そして、この矩形画像の輪郭に内接する部分画像が特定されて、対応する合成対象領域に部分画像が合成される(ステップS55)。これに代えて、対象画像内で検出された顔領域FAが1個である場合であって、かつ、合成対象領域が円形である場合には、CPU410は、顔領域FAのサイズに基づく半径を有し、顔領域FAの重心を中心とした円形の部分画像を特定し、該円形の部分画像を、円形の合成対象領域に合成しても良い。また、対象画像内で検出された顔領域FAが1個である場合であって、かつ、合成対象領域が星形である場合には、CPU410は、顔領域FAのサイズに基づく半径を有し、顔領域FAの重心を中心とした円形に外接する星型の部分画像を特定し、該星型の部分画像を、星型の合成対象領域に合成しても良い。一般的に言えば、CPU410は、対象画像内で検出された顔領域FAが1個である場合には、顔領域FAを含み、顔領域FAのサイズに基づいて決定されるサイズを有する部分画像を特定して、合成対象領域に合成すれば良い。そして、特定される部分画像は、合成対象領域と相似な形状を有することが好ましい。
(4)上記実施例のクロッピング処理において、対象画像内で検出された顔領域FAが複数個である場合には、CPU410は、複数個の顔領域FAのうちの2個の顔領域の間の距離Dを用いて、抽出対象の顔領域FAを含むように決定された矩形画像を抽出している(図12、図13)。そして、この矩形画像の輪郭に内接する部分画像が特定されて、対応する合成対象領域に部分画像が合成される(ステップS55)。これに代えて、対象画像内で検出された顔領域FAが複数個である場合であって、かつ、合成対象領域が円形である場合には、CPU410は、対象画像に内接し、1個以上の顔領域FAを含む円形の部分画像を特定し、該円形の部分画像を、円形の合成対象領域に合成しても良い。また、対象画像内で検出された顔領域FAが複数個である場合であって、かつ、合成対象領域が星形である場合には、CPU410は、対象画像に内接し、1個以上の顔領域を含む星型の部分画像を特定し、該星型の部分画像を、星型の合成対象領域に合成しても良い。一般的に言えば、CPU410は、対象画像内で検出された顔領域FAが複数個である場合には、少なくとも1個以上の顔領域FAを含み、合成対象領域と相似な形状を有する対象画像内の最大のサイズの部分画像を特定して、合成対象領域に合成すれば良い。
(5)上記実施例の最大矩形抽出処理B(図12、図13)では、対象画像内の全ての顔領域FAを含み、かつ、最大矩形サイズの抽出枠EAを設定できない場合には(ステップS525:NO)、抽出対象の顔領域FAのうち、対象画像の両端に位置する2個の顔領域FAP、FAQのうち、サイズが小さな顔領域が抽出対象から除外される(ステップS530〜S540)。そして、サイズが小さな顔領域を除いた残りの顔領域を含み、かつ、合成対象領域の縦横比AR1を有する抽出枠EAが設定される。これに代えて、対象画像内の全ての顔領域FAを含み、かつ、最大矩形サイズの抽出枠EAを設定できない場合には、対象画像内の全ての顔領域FAのうち、最大のサイズの顔領域FAを少なくとも含むように設定される最大矩形サイズの抽出枠EAのうち、最も多数の顔領域FAを含む抽出枠EAが設定されても良い。一般的には、CPU410は、対象画像内の全ての顔領域FAを含み、かつ、最大矩形サイズの第1の領域を抽出枠EAとして設定できない場合には、第1の領域とは異なる第2の領域を抽出枠EAとして設定すれば良い。
(6)上記実施例のクロッピング処理(図6)において、一部の処理ステップは適宜に省略され得る。例えば、画像の回転処理(ステップS120、S125、S130)は、省略されて良く、動作モードの判定(ステップS135)や、画像種類判定処理(ステップS140)なども適宜に省略され得る。
(7)上記第1実施例では、図2(A)に示すように、テンプレート画像10は、合成対象領域15A〜15Cを示す枠が明示的に設けられている。したがって、テンプレート画像10を表すテンプレート画像データを用いて、合成対象領域15A〜15Cを特定することもでき、マスク画像11(図2(B))を表すマスク画像データを用いて、合成対象領域15A〜15Cを特定することもできる。これに代えて、テンプレート画像には、合成対象領域を示す枠が明示的には設けられていない画像、例えば、ユーザが所有する画像データによって表される風景画像が用いられても良い。換言すれば、テンプレート画像データ用いて合成対象領域を特定できなくても良く、マスク画像データのみによって、合成対象領域が特定可能であっても良い。この場合には、風景画像における、マスク画像上に規定された合成対象領域に対応する領域内の画像が消去されて、当該領域に元画像内の部分画像が合成される。
(8)上記実施例においてサーバ400のCPU410によって実行される画像処理(例えば、図3のステップS45〜S60の処理)は、サーバ400とは異なる装置、例えば、複合機200のCPU210によって実行されても良い。この場合には、例えば、CPU210は、合成画像を生成した後に、テスト画像データや合成画像データをプリンタ部240に出力することによって、テスト画像10Tや合成画像10M(図15)をプリンタ部240に印刷させる。また、これらの画像処理は、プリンタなどの印刷装置と接続されたパーソナルコンピュータ500(図1)のCPU(図示省略)によって実行されても良い。この場合には、CPUは、合成画像を生成した後に、テスト画像データや合成画像データを外部のプリンタに出力することによって、テスト画像10Tや合成画像10M(図15)を外部のプリンタに印刷させる。すなわち、テスト画像データや合成画像データの出力には、実施例のようなサーバ400からクライアント装置(例えば、複合機200)への送信に加えて、複合機200の内部でのCPU210からプリンタ部240への供給、パーソナルコンピュータ500から外部のプリンタへの送信などが含まれる。
(9)これらの画像処理は、例えば、複合機200のスキャナ部250や、単体のスキャナ(図示せず)を、制御するためにパーソナルコンピュータ500にインストールされたスキャナドライバによって実行されても良い。また、サーバ400は、本実施例のように1つの計算機で構成されても良く、複数個の計算機を含む計算システム(例えば、いわゆるクラウドコンピューティングを実現する分散型の計算システム)によって構成されていても良い。例えば、サーバ400は、UIデータを複合機200に提供(送信)する第1の装置と、画像処理を実行する第2の装置と、を含むサーバシステムであっても良い。この場合には、例えば、図3のステップS10の処理は、第1の装置が実行し、図3のステップS25〜S65までの処理は、第2の装置が実行しても良い。
(10)上記実施例において、ハードウェアによって実現されていた構成の一部をソフトウェアに置き換えるようにしてもよく、逆に、ソフトウェアによって実現されていた構成の一部をハードウェアに置き換えるようにしてもよい。