A.第1実施例:
A−1:画像処理システム1000の構成
図1は、第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(上下方向の長さ)と、を含む。代表点の座標は、例えば、合成対象領域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は、第1実施例の画像処理システム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は、ユーザによって指定された動作モードが顔抽出モードであるか、全体抽出モードであるか、を判断する。動作モードが全体抽出モードである場合には(ステップS110:NO)、CPU410は、後述する最大矩形抽出処理(ステップS160)を実行する。動作モードが顔抽出モードである場合には(ステップS110:YES)、CPU410は、顔領域検出処理を実行する(ステップS120)。顔抽出モードは、顔領域FAの検出結果に基づいて、合成対象領域に合成すべき部分画像を変更する動作モードである。全体抽出モードは、顔領域FAの有無に拘わらずに、合成対象領域に合成すべき部分画像を決定する動作モードである。
顔領域検出処理は、対象画像データによって表される画像(対象画像とも呼ぶ)内に存在する顔領域FAを検出する処理である。顔領域FAは、対象画像内に含まれる人物の顔を含む領域である。顔領域検出処理は、公知の方法を用いて実行される。例えば、顔領域検出処理は、例えば、エッジのような低次特徴から眼や口のような高次特徴を階層的に検出し、最終的に顔の重心位置や顔の外形などを検出するコンボリューションニューラルネットワークが知られている(例えば、特開2013−120954、特開2009−237618参照)。
本実施例では、顔に外接する外接矩形が顔領域として検出される。すなわち、検出結果として、顔に外接する外接矩形の位置およびサイズを示す情報が算出される。例えば、図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は検出されない。顔に外接する外接矩形である顔領域FAは、「対象画像内のオブジェクトに基づいて決定される領域」の例である。
顔領域検出処理に続いて、ステップS130では、CPU410は、画像種類判定処理を実行する。
図7は、画像種類判定処理のフローチャートである。画像種類判定処理は、対象画像が、人物画像であるか、非人物画像であるか、を判定する処理である。人物画像は、人物が主要なオブジェクトである画像である。非人物画像は、人物とは異なるオブジェクトが、主要なオブジェクトである画像である。人物とは異なるオブジェクトは、風景や、車や家などの人工物などを含む。
ステップS200では、CPU410は、対象画像内に、第1の閾値TH1以上のサイズを有する顔領域FAが存在するか否かを判断する。第1の閾値TH1は、例えば、高さの閾値と幅の閾値との組合わせであっても良く、面積の閾値であっても良い。対象画像内の顔領域FAは、図6のステップS120にて検出済みである。第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は、最も近い顔領域FAのペア(以下、最近接ペアとも呼ぶ)を構成する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に戻って説明を続ける。画像種類判定処理にて、対象画像が人物画像であると判定された場合には(ステップS140:YES)、CPU410は、対象画像内の有効な顔領域FAの個数は、1個であるか否かを判断する(ステップS150)。ここで、有効な顔領域FAは、上述した画像種類判定処理(ステップS130)において考慮された顔領域FAである。したがって、人物画像であると判定された対象画像には、少なくとも1個以上の有効な顔領域FAが存在する。
有効な顔領域FAの個数が、1個である場合には(ステップS150:YES)、CPU410は、顔周囲領域抽出処理を実行する(ステップS155)。顔周囲領域抽出処理は、後述する合成処理(図3のステップS55)において、対象画像を合成すべき合成対象領域に、対象画像が適切に合成されるように、合成処理に用いられる矩形画像を対象画像から抽出する処理である。以下では、対象画像が、図5(A)の元画像16であり、対象画像を合成すべき合成対象領域が、図2(A)の合成対象領域15Aである場合を例に、顔周囲領域抽出処理について説明する。
図8は、顔周囲領域抽出処理のフローチャートである。図9は、合成対象領域15Aの形状を示す図である。ステップS300では、CPU410は、対象画像内の顔領域FA1の縦横比AR1を算出する。縦横比は、横方向の長さ(幅)Wに対する縦方向の長さ(高さ)Hの比H/Wである。したがって、元画像16内の顔領域FA1の縦横比AR1は、FH1/FW1である(図5(A))。
ステップS310では、CPU410は、内接矩形特定処理を実行する。この処理は、顔領域FA1(図5(A))の縦横比AR1を有し、かつ、合成対象領域15Aの輪郭に内接する最大の内接矩形(以下、最大内接矩形ISmaxとも呼ぶ)を特定する処理である。
図10は、内接矩形特定処理のフローチャートである。ステップS311では、CPU410は、合成対象領域15A内の1個の画素を注目画素として選択する。合成対象領域15A内の画素は、マスク画像11(図2(B))を参照することによって、特定することができる。
ステップS312では、CPU410は、注目画素を左上の頂点とし、かつ、顔領域FA1(図5(A))の縦横比AR1を有し、かつ、合成対象領域15Aの輪郭に内接する内接矩形ISを特定する。具体的には、CPU410は、注目画素を左上の頂点とし、かつ、縦横比AR1を有する微小な矩形を、左上の頂点の位置と縦横比AR1とを維持しつつ、合成対象領域15Aの輪郭に内接するまで拡大する。すなわち、CPU410は、順次、微小矩形の縦方向の距離及び横方向の距離を増加させながら、微小な矩形を拡大する。CPU410は、合成対象領域15Aに内接するまで拡大された矩形を、内接矩形ISとして特定する。
図9には、合成対象領域15A内の3個の画素IP1〜IP3が注目画素である場合に、ステップS312にて特定される内接矩形IS1〜IS3が図示されている。
ステップS313では、CPU410は、特定された内接矩形ISが、現時点で記憶済みの最大内接矩形ISmaxより大きいか否かを判定する。CPU410は、内接矩形ISが、最大内接矩形ISmaxより大きい場合には(ステップS313:YES)、内接矩形ISを新たな最大内接矩形ISmaxとしてバッファ領域421に記憶する(ステップS314)。CPU410は、内接矩形ISが、最大内接矩形ISmax以下である場合には(ステップS313:NO)、ステップS314をスキップする。
ステップS315では、CPU410は、合成対象領域15A内の全ての画素を注目画素として処理したか否かを判断する。未処理の画素がある場合には(ステップS315:NO)、CPU410は、ステップS311に戻って、未処理の画像を新たな注目画素に選択し、上述したステップS312〜S314までの処理を繰り返す。合成対象領域15A内の全ての画像が処理された場合には(ステップS415:YES)、内接矩形特定処理は終了される。内接矩形特定処理が終了した時点でバッファ領域221に記憶されている最大内接矩形ISmaxが、最終的に特定される。
特定すべき最大内接矩形ISmaxの左上の頂点は、必ず合成対象領域15A内に存在する。そして、注目画素を左上の画素とし、かつ、縦横比AR1を有し、かつ、合成対象領域15Aの輪郭に内接する内接矩形ISは、1つである。このために、合成対象領域15A内の全ての画素を注目画素として内接矩形ISを注目画素ごとに特定すると、特定された複数個の内接矩形ISのうちの最大の矩形が、特定すべき最大内接矩形ISmaxになる。
図9の例では、画素IP1に対応する内接矩形IS1が、最大内接矩形ISmaxであるとして、説明を続ける。続くステップS320(図8)では、CPU410は、合成対象領域15Aの外接矩形14Aを特定する。外接矩形14Aは、領域情報12に基づいて容易に特定される。
ステップS330では、CPU410は、対象画像内の顔領域FA1のサイズと、合成対象領域の最大内接矩形のサイズと、のサイズ比SRを算出する。対象画像が元画像16である場合には、元画像16内の顔領域FA1のサイズ(図5(A))と、合成対象領域15Aの最大内接矩形ISmaxのサイズ(図9)と、のサイズ比SR1が算出される。例えば、サイズ比SR1には、例えば、ISmaxの幅IW1に対する顔領域FA1の幅FW1(FW1/IW1)、または、ISmaxの高さIH1に対する顔領域FA1の高さFH1(FH1/IH1)が、用いられる。上述したように、顔領域FA1と、最大内接矩形ISmaxと、は、互いに同じ縦横比AR1を有する相似な矩形であるので、(FW1/IW1)と(FH1/IH1)とは、等しい。
ステップS340では、CPU410は、サイズ比SRを用いて、抽出枠EAを対象画像に対して設定する。図11は、対象画像に対する抽出枠EAの設定について説明する図である。対象画像が元画像16である場合(図11(A))には、CPU410は、合成対象領域15Aにおける、最大内接矩形ISmaxの右辺から外接矩形14Aの右辺までの距離RD1(図9)にサイズ比SR1を乗じた値(RD1×SR1)を、算出する。CPU410は、算出された値(RD1×SR1)と、元画像16における、顔領域FA1の右辺から抽出枠EA1の右辺までの距離RD2(図11(A))と、が等しくなるように、抽出枠EA1の右辺の位置を決定する(RD2=RD1×SR1)。
同様に、CPU410は、顔領域FA1の左辺から抽出枠EA1の左辺までの距離LD2、顔領域FA1の上辺から抽出枠EA1の上辺までの距離UD2、顔領域FA1の下辺から抽出枠EA1の下辺までの距離DD2を、それぞれ算出する(LD2=LD1×SR1、UD2=UD1×SR1、DD2=DD1×SR1)。LD1、UD1、DD1は、それぞれ、合成対象領域15Aにおける、最大内接矩形ISmaxの左辺、上辺、下辺から外接矩形14Aの左辺、上辺、下辺までの距離である(図9)。そして、CPU410は、距離LD2、UD2、DD2(図11(A))に基づいて、抽出枠EA1の左辺、上辺、下辺の位置を決定する。この結果、対象画像としての元画像16に対して、図11(A)にて破線で示す抽出枠EA1が設定される。
ステップS350では、CPU410は、設定された抽出枠EAが、対象画像内に含まれるか否かを判断する。例えば、図11(A)の例では、抽出枠EA1が、元画像16内に含まれていない。すなわち、抽出枠EA1は、元画像16より外側に位置する外部領域OSU、OSD(図11(A)でハッチングされた部分)を含んでいる。図11(B)には、抽出枠EAが、対象画像内に含まれる場合の例が示されている。対象画像としての元画像20は、比較的小さな顔領域FA6が、元画像20の中心近傍に位置している。このために、ステップS340において、元画像20に対して設定される抽出枠EA2は、元画像20内に含まれている。図20に示す距離RD3、LD3、UD3、DD3は、それぞれ、RD1×SR2、LD1×SR2、UD1×SR2、DD1×SR2である。SR2は、元画像20内の顔領域FA6と、合成対象領域15Aの最大内接矩形ISmaxと、のサイズ比である。
設定された抽出枠EAが、対象画像内に含まれている場合には(ステップS350:YES)、CPU410は、対象画像のうち、抽出枠EA内の矩形画像を抽出する(ステップS360)。すなわち、CPU410は、対象画像を、抽出枠EAを基準にクロッピングして得られる矩形画像を表す画像データを生成する。例えば、図11(B)の例では、抽出枠EA2に対応する矩形画像が元画像20から抽出される。矩形画像が抽出されると、顔周囲領域抽出処理は終了される。
設定された抽出枠EAが、対象画像内に含まれていない場合には(ステップS350:NO)、すなわち、抽出枠EAが対象画像内に設定できない場合には、CPU410は、修正画像生成処理を実行する(ステップS370)。修正画像生成処理は、対象画像に含まれる部分画像を用いて、設定すべき抽出枠EAのサイズの修正画像を生成する処理である。用いられる部分画像は、設定すべき抽出枠EAより小さな領域内の画像になる。図11(A)の例では、抽出枠EA1のうち、外部領域OSU、OSBを除いた領域内の部分画像が用いられる。
図12は、修正画像生成処理のフローチャートである。図13は、修正画像生成処理について説明する図である。ステップS400では、CPU410は、対象画像の外側に位置する抽出枠EAの辺(すなわち、端部)を特定する。図11(A)の例では、抽出枠EA1の上辺と、下辺と、が特定される。
ステップS410では、CPU410は、特定された1個の辺に対応する対象画像内の端部領域を設定する。図11(A)の例では、例えば、抽出枠EA1の上辺が処理対象である場合には、元画像16の上辺に沿う端部領域TAUが設定される。端部領域TAUの上辺に沿う方向の長さUW1は、抽出枠EA1の上辺の長さと同じに設定され、端部領域TAUの上辺と垂直な方向の長さUH1は、所定値(例えば、3画素〜10画素分の長さ)に設定される。
ステップS420では、CPU410は、対象画像のうちの端部領域内の画像を、抽出枠EAのうちの外部領域に並べて配置する。例えば、図11(A)の例では、CPU410は、元画像16の上辺に沿う端部領域TAU内の画像SAUが、抽出枠EA1の上側の外部領域OSUに並べて配置される。この結果、図13に示すように、上側の外部領域OSU内には、端部領域TAU内の画像SAUを縦方向に4個並べて得られる補填画像USIが生成される。
ステップS430では、CPU410は、ステップS400で特定された全ての辺について処理されたか否かを判断する。図11(A)の例では、抽出枠EA1の上辺と下辺とについてそれぞれ処理されたか否かが判断される。未処理の辺がある場合には(ステップS430:NO)、CPU410は、ステップS410とS420とを、未処理の辺について実行する。例えば、図11(A)の例では、また、抽出枠EA1の下辺が処理対象とされ、元画像16の下辺に沿う端部領域TADが設定される(ステップS410)。そして、端部領域TAD内の画像SADが、下側の外部領域OSDに並べて配置される(ステップS420)。この結果、図13に示すように、下側の外部領域OSD内には、端部領域TAD内の画像SADを縦方向に4個並べて得られる補填画像DSIが生成される。
ステップS400で特定された全ての辺が処理された場合には(ステップS430:YES)、修正画像生成処理は終了される。修正画像生成処理によって、上側の端部領域TAUと接する上側の補填画像USIと、下側の端部領域TADと接する下側の補填画像DSIと、がそれぞれ生成される。この結果、設定すべき抽出枠EA1のサイズと同じサイズを有する修正画像AI(図13)が生成される。修正画像生成処理が終了されると、顔周囲領域抽出処理は、終了される(図8)。
このように、抽出枠EAが対象画像内に含まれている場合には(ステップS350:YES)、設定された抽出枠EA内の矩形画像が対象画像から抽出され(図11(B))、抽出枠EAが対象画像内に含まれていない場合には(ステップS350:NO)、対象画像内の部分画像を用いて、設定された抽出枠EAに対応する修正画像が生成される(図11(A)、図13)。したがって、後の処理において、矩形画像内の画像を合成対象領域に合成する際に、適切な画像を合成することができる。すなわち、合成対象領域内に画像が合成できない部分が生じず、かつ、顔領域FAが合成対象領域内に適切に配置されるように、合成を行うことができる。
図6に戻って説明を続ける。対象画像内に有効な顔領域が複数個存在する場合には(ステップS150:NO)、CPU410は、最大矩形抽出処理を実行する(ステップS160)。例えば、図5(B)の元画像17が対象画像である場合には、元画像17は、2個の顔領域FA2、FA3を含むので、最大矩形抽出処理が実行される。動作モードが全体抽出モードである場合(ステップS110:NO)、あるいは、対象画像が非人物画像であると判断された場合には(ステップS140:NO)、同様に、最大矩形抽出処理が実行される(ステップS160)。例えば、図5(C)の元画像18が対象画像である場合には、元画像18は、非人物画像であるので、最大矩形抽出処理が実行される。
図14は、最大矩形抽出処理のフローチャートである。図15は、最大矩形抽出処理の説明図である。最大矩形抽出処理は、顔領域FAの有無とは無関係に、対象合成領域の縦横比AR2を有する矩形画像であって、対象画像から抽出し得る最大の矩形画像を抽出する処理である。
ステップS500では、CPU410は、合成対象領域の縦横比AR2を算出する。合成対象領域の縦横比AR2は、例えば、領域情報12(図2(C))を用いて算出される。合成対象領域は、合成対象領域15B(図2(A))のように、矩形を有している場合もあるが、矩形とは異なる様々な外形などを有している場合がある。例えば、合成対象領域15A(図9、図2(A))は、ノコギリの歯のように比較的複雑に配置された多数の辺を含む外形を有し、合成対象領域15C(図2(A))は、曲線を含む外形を有している。このために、本実施例では、合成対象領域15A〜15Cに外接する外接矩形14A〜14Cの幅および高さが、合成対象領域15A〜15Cの幅および高さとして用いられる(図2(A))。例えば、合成対象領域15Bの縦横比AR2は、H2/W2である(図2(A))。
ステップS505では、CPU410は、対象画像の縦横比AR3を算出する。例えば、対象画像が元画像21(図15(A))である場合には、対象画像の縦横比AR3は、GH1/GW1である。また、対象画像が元画像18(図15(B))である場合には、対象画像の縦横比AR3は、GH2/GW2である。ステップS510では、CPU410は、対象画像の縦横比AR3が、合成対象領域の縦横比AR2より大きいか否かを判断する。
縦横比AR3が縦横比AR2より大きい場合には(ステップS510:YES)、CPU410は、抽出枠EAの幅EWを、対象画像の幅GWと同じ値に決定する(ステップS515)。そして、抽出枠EAの幅EWを決定した後に、抽出枠EAの縦横比が、合成対象領域の縦横比AR2と同じになるように、抽出枠EAの高さEHを決定する(ステップS520)。縦横比AR3が縦横比AR2より大きい場合には、対象画像の形状が、抽出枠EAの形状より縦長になる。したがって、抽出枠EAの高さEHを幅EWより先に決定すると、抽出枠EAが対象画像より大きくなってしまう。このために、縦横比AR3が縦横比AR2より大きい場合には、対象画像内に抽出枠EAを設定するために、抽出枠EAの幅EWを高さEHより先に決定する。
図15(A)では、対象画像である元画像21の縦横比AR3が、設定すべき抽出枠EA3の縦横比(すなわち、合成すべき合成対象領域の縦横比AR2)より大きい。すなわち、元画像21が、設定すべき抽出枠EA3より縦長な形状を有している。この場合には、上述したように、抽出枠EA3の幅EW3が先に決定される(EW3=GW1、ステップS515)。その後に、抽出枠EA3の縦横比が、合成対象領域の縦横比AR2と同じになるように、抽出枠EA3の高さEH3が決定される(ステップS520)。
縦横比AR3が縦横比AR2以下である場合には(ステップS510:NO)、CPU410は、抽出枠EAの高さEHを、対象画像の高さGHと同じ値に決定する(ステップS530)。そして、抽出枠EAの高さEHを決定した後に、抽出枠EAの縦横比が、合成対象領域の縦横比AR2と同じになるように、抽出枠EAの幅EWを決定する(ステップS540)。縦横比AR3が縦横比AR2以下である場合には、対象画像の形状が、抽出枠EAの形状より横長になる。したがって、抽出枠EAの幅EWを高さEHより先に決定すると、抽出枠EAが対象画像より大きくなってしまう。このために、縦横比AR3が縦横比AR2以下である場合には、対象画像内に抽出枠EAを設定するために、抽出枠EAの高さEHを幅EWより先に決定する。
図15(B)では、対象画像である元画像18の縦横比AR3が、設定すべき抽出枠EA4の縦横比(すなわち、合成すべき合成対象領域の縦横比AR2)以下である。すなわち、元画像18が、設定すべき抽出枠EA4より横長な形状を有している。この場合には、上述したように、抽出枠EA4の高さEH4が先に決定される(EH4=GH2、ステップS530)。その後に、抽出枠EA4の縦横比が、合成対象領域の縦横比AR2と同じになるように、抽出枠EA4の幅EW4が決定される(ステップS540)。
ステップS500〜S540までの処理によって、抽出枠EAのサイズが決定される。決定されるサイズは、対象合成領域の縦横比AR2と等しい縦横比を有する矩形であって、対象画像内に含まれ得る最大の矩形のサイズ(以下、最大矩形サイズとも呼ぶ)である。
ステップS550では、CPU410は、サイズが決定された抽出枠EAの中心と、対象画像の中心と、が一致するように対象画像に対して抽出枠EAを設定する。ステップS560では、CPU410は、対象画像のうち、抽出枠EA内の矩形画像を抽出する。この結果、対象画像を、抽出枠EAを基準にクロッピングして得られる矩形画像を表す画像データが生成される。矩形画像が抽出されると、最大矩形抽出処理は終了される。上述したように、抽出枠EAの幅EWが対象画像の幅GWと同じ値に設定される(ステップS515)、あるいは、抽出枠EAの高さEHが対象画像の高さGHと同じ値に設定される(ステップS530)。したがって、矩形画像の上下の2辺、および、左右の2辺のうちの少なくとも一方の2辺が、対象画像の対応する2辺と一致するように、矩形画像が抽出される。
最大矩形抽出処理によって、最大矩形サイズを有する矩形画像を抽出することができる。この結果、後の処理で矩形画像内の部分画像を合成対象領域に合成する際に、合成対象領域には、対象画像を用いて合成し得る最大のサイズの画像を合成することができる。
顔周囲領域抽出処理と最大矩形抽出処理とのいずれかが実行されると、図6のステップS170では、CPU410は、全ての元画像データを対象画像データとして処理したか否かを判断する。未処理の元画像データがある場合には(ステップS170:NO)、ステップS100に戻って、未処理の元画像データが選択され、上述したステップS100〜S160までの処理が繰り返される。全ての元画像データが処理された場合には(ステップS170:YES)、クロッピング処理は終了される。
図16は、元画像を用いて生成される矩形画像の一例を示す図である。図17は、合成画像の一例を示す図である。図16(A)〜図16(C)は、図5の元画像16〜18を用いて生成された矩形画像26〜28をそれぞれ示す。例えば、図5(A)の矩形画像26は、顔周囲領域抽出処理(図8)によって生成された修正画像AI(図13)である。図5(B)、図5(C)の矩形画像27、28は、最大矩形抽出処理(図14)によって抽出された画像である。以下に説明する処理によって、図16の3個の矩形画像26〜28と、図2(A)に示すテンプレート画像10と、が合成されて、図17の合成画像10Mが生成される。
図3のステップS50では、CPU410は、サイズ調整処理を実行する。サイズ調整処理は、クロッピング処理によって生成された矩形画像のサイズを、対応する合成対象領域のサイズに応じて調整する処理である。矩形画像に対応する合成対象領域は、当該矩形画像の輪郭に内接する部分画像が合成されるべき合成対象領域である。図16、図17の例では、矩形画像26〜28が、テンプレート画像10(図2(A))の合成対象領域15A〜15Cにそれぞれ対応する。
具体的には、CPU410は、矩形画像の横方向のサイズと、対応する合成対象領域の外接矩形の横方向のサイズと、のサイズ比を算出する。CPU410は、算出されたサイズ比を用いて、矩形画像の縦横比を変更することなく、矩形画像を拡大または縮小する。矩形画像の縦横比は、合成対象領域の縦横比と一致するように抽出されているので、拡大または縮小の結果、矩形画像の縦方向および横方向のサイズは、対応する合成対象領域の外接矩形の縦方向および横方向のサイズと一致する。例えば、サイズが調整された後の矩形画像26〜28(図16)のサイズは、合成対象領域15A〜15Cの外接矩形14A〜14C(図2(A))のサイズと一致する。
ステップS55では、CPU410は、サイズが調整された後の矩形画像を用いて、矩形画像内の部分画像を、対応する合成対象領域に合成する合成処理を実行する。具体的には、CPU410は、領域情報12(図2(C))を参照して、テンプレート画像10上における合成対象領域の左上の頂点の位置(座標)を取得する。CPU410は、合成対象領域の外接矩形の左上の頂点の画素と、矩形画像の左上の頂点の画素と、が対応するように、テンプレート画像10の座標系と、矩形画像の座標系と、を対応付ける。例えば、矩形画像26〜28の頂点P26〜P28(図16)の画素は、合成対象領域15A〜15Cの外接矩形14A〜14Cの頂点P1〜P3の画素(図2(A))に対応付けられる。
このように、テンプレート画像10の座標系と、矩形画像の座標系と、を対応付けた状態、換言すれば、テンプレート画像10の合成対象領域の左上の頂点と矩形画像の左上の頂点とが一致するように、合成対象領域と矩形画像とが重ねられた状態について説明する。この状態では、顔周囲領域抽出処理によって抽出された矩形画像26は、図9と図16(A)から解るように、矩形画像26における顔領域FA1の外縁(図16(A))と、合成対象領域15Aにおける最大内接矩形ISmax(図9)と、が一致する。すなわち、顔領域FA1内の顔16Aが、最大内接矩形ISmaxと接する。そして、矩形画像26の外縁(図16(A))と、合成対象領域15Aの外接矩形14Aと、が一致する。
そして、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(図16)が特定されて、特定された部分画像26A〜28Aが、テンプレート画像10の合成対象領域15A〜15C(図2)に合成される。この結果、合成画像10M(図17(A))を表す合成画像データが生成される。
図16に示すように、矩形画像26〜28内に特定される部分画像26A〜28Aは、矩形画像26〜28の輪郭に内接する画像であり、かつ、合成対象領域15A〜15Cと同じ形状、および、同じサイズを有する画像である。
ステップS60では、CPU410は、ステップS55で生成された合成画像データを用いて、テスト画像10T(図17(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の処理をもう一度実行させても良い。
上記実施例のクロッピング処理(図6)によれば、例えば、対象画像が元画像16(図5(A))である場合には、CPU410は、元画像16内のオブジェクトである人物の顔16Aを特定するために顔領域検出処理(図6のステップS120)を実行する。そして、その後に実行される顔周囲領域抽出処理(図6のステップS155、図8)において、CPU410は、合成対象領域15A(図2(A)、図9)に内接する最大内接矩形ISmaxと、外接矩形14Aと、を特定する(図8のステップS310、320)。さらに、CPU410は、最大内接矩形ISmaxと、顔領域FA1とのサイズ比SR1を算出し(図8のステップS330)、サイズ比SR1に基づいて、対象画像に対して、顔領域FA1を含む抽出枠EA1を設定する(図8のステップS340)。抽出枠EA1は、上述したように、抽出枠EA1に対応して生成される矩形画像26(図16(A))を、合成対象領域15Aに重ねた場合に、矩形画像26内の顔16Aが、合成対象領域15Aの内接矩形ISに接し、かつ、矩形画像26の外縁(図16(A))が、合成対象領域15Aの外接矩形14A(図2(A)、図9)と一致するように設定される。この結果、サイズ比SR1に基づいて適切にサイズが調整された画像をテンプレート画像10に合成できる。さらに、合成対象領域15Aの形状に拘わらずに、顔を適切な位置に合成でき、かつ、合成対象領域15Aの全体に画像を適切に合成することができる。すなわち、合成画像10Mにおいて、元画像16内の顔16Aは、合成対象領域15Aの最大内接矩形ISmax内に収めることができるとともに、合成対象領域15Aの外縁近傍に画像を合成できない領域が発生することを防止できる。この結果、合成対象領域15Aに、顔を含む画像を適切に合成することができる。
以上の説明から解るように、図11(A)、図11(B)に示す抽出枠EA1、EA2によって規定される領域は、第1種の領域の例であり、合成対象領域15A(図2(A))、図9)は、内接図形および外接図形とは異なる形状を有する合成対象領域の例である。
さらに、顔周囲領域抽出処理(図6のステップS155、図8)において、CPU410は、上述した抽出枠EA1を対象画像内に設定できない場合には、すなわち、抽出枠EA1が対象画像より外側の外部領域OSD、OSUを含む場合には(図8のステップS350:NO)、修正画像生成処理を実行する(ステップS370)。そして、CPU410は、生成処理によって生成された修正画像AI(図13)を合成対象領域15Aに合成する(ステップS55)。この結果、対象画像内に抽出枠EA1を設定できない場合であっても、合成対象領域に、顔領域FA1を含む画像を適切に合成することができる。
そして、修正画像生成処理では、CPU410は、対象画像のうち抽出枠EA1に含まれる部分画像の辺に沿う端部領域TAU、TAD内の画素値を用いて、端部領域TAU、TADに接する補填画像USI、TADが生成される(図13)。したがって、生成される修正画像AIが有し得る違和感を低減することができる。
さらに、対象画像内に顔領域FAが複数個存在する場合(図6のステップS150:NO)や、対象画像が非人物画像である場合には(図6のステップS140:NO)、顔周囲領域抽出処理とは異なる最大矩形抽出処理(図6のステップS160)が実行される。この結果、対象画像内に顔領域FAが複数個存在する場合や、対象画像が非人物画像である場合であっても、対象画像内から抽出された適切なサイズの画像を合成対象領域に合成することができる。
B.第2実施例:
第2実施例では、第1実施例のクロッピング処理(図6)とは異なるクロッピング処理が実行される。図18、図19は、第2実施例のクロッピング処理のフローチャートである。
ステップS600では、CPU410は、処理対象の合成対象領域を選択する。例えば、ユーザによって選択されたテンプレート画像10(図2(A))の複数個の合成対象領域15A〜15Cの中から、1個の合成対象領域が処理対象として選択される。合成対象領域は、例えば、テンプレート画像10ごとに予め定められた合成対象領域の優先順位に従って、選択される。
ステップS605では、CPU410は、複合機200から取得された元画像データから、1個の元画像データを対象画像データとして選択する。例えば、本実施例では、例えば、顔領域を含む元画像、例えば、図5の元画像16、17、19や、図11(B)の元画像20を表す複数個の元画像データが複合機200から取得されるものとする。元画像データは、所定の優先順位に従って、選択される。例えば、元画像データの優先順位は、例えば、ユーザによって決定されてサーバ400に通知されても良い。
ステップS610では、CPU410は、対象画像内の顔領域FAを検出する顔領域検出処理を実行する。第2実施例の顔領域検出処理は、第1実施例の顔領域検出処理(図6のステップS120)と同じ処理である。この結果、例えば、対象画像が、図5(A)の元画像16である場合には、顔領域FA1が検出され、対象画像が、図5(B)、図5(C)の元画像17、19である場合には、顔領域FA2〜FA5が検出される。
ステップS615では、CPU410は、対象画像から検出された顔領域の中から、処理対象の顔領域FAを選択する。処理対象の顔領域FAは、所定の優先順位に従って、選択される。例えば、顔領域FAの優先順位は、面積が大きい領域ほど高い順序に決定されても良く、対象画像の中心に近い領域ほど高い順序に決定されても良い。
ステップS620では、図8の顔周囲領域抽出処理のステップS300〜S340の処理が実行される。この結果、第1実施例にて説明したように、対象画像に対して抽出枠EAが設定される。例えば、図11(A)に示すように、対象画像が元画像16である場合には、元画像16より外側の外部領域OSD、OSUを含む抽出枠EA1が設定される。図11(B)に示すように、対象画像が元画像20である場合には、元画像20内に含まれる抽出枠EA2が設定される。
ステップS625では、CPU410は、図8のステップS350と同様に、設定された抽出枠EAが対象領域内に含まれるか否かを判断する。
設定された抽出枠EAが、対象画像内に含まれている場合には(ステップS625:YES)、CPU410は、図8のステップS360と同様に、対象画像のうち、抽出枠EA内の矩形画像を抽出する(ステップS630)。例えば、図11(B)の例では、抽出枠EA2に対応する矩形画像が元画像20から抽出される。
矩形画像が抽出されると、ステップS635では、CPU410は、所定の記録テーブルに、ステップS630の処理の結果を記録する。図20は、記録テーブル40の一例を示す図である。記録テーブル40は、例えば、揮発性記憶装置420のバッファ領域421(図1)に準備される。記録テーブル40には、合成対象領域ごとに、当該合成対象領域に合成される矩形画像を記録するテーブルである。例えば、複数個の顔領域FA2、FA3を含む元画像17(図5(B))が対象画像である場合には、元画像17からステップS630にて抽出される矩形画像には、顔領域FA2を基準にして抽出された矩形画像と、顔領域FA3を基準にして抽出された矩形画像と、の2種類が含まれ得る。これらの2種類の矩形画像を適切に識別するために、矩形画像は、抽出元の元画像を特定する情報と、抽出時に基準とされた顔領域FAを特定する情報と、の組み合わせによって、識別される。換言すれば、1個の合成対象領域には、複数個の元画像に含まれる複数個の顔領域FAの中から1個の顔領域FAが対応付けられる、と言うことができる。
図20の記録テーブル40では、合成対象領域15Aに合成される矩形画像は、元画像20から、顔領域FA6を基準にして抽出された矩形画像であることが記録されている。また、合成対象領域15Bに合成される矩形画像は、元画像17から、顔領域FA2を基準にして抽出された矩形画像であることが記録されている。さらに、合成対象領域15Cに合成される矩形画像は、決定されていない(抽出されていない)ことが記録されている。記録テーブル40への記録が行われると、CPU410は、処理をステップS650に進める。
設定された抽出枠EAが、対象画像内に含まれていない場合には(ステップS625:NO)、すなわち、抽出枠EAが対象画像より外側の部分を含む場合には、CPU410は、矩形画像の抽出を行うことなく、ステップS640に処理を進める。
ステップS640では、CPU410は、対象画像内で検出された全ての顔領域FAを処理対象として処理したか否かを判断する。未処理の顔領域FAがある場合には(ステップS640:NO)、ステップS615に戻って、未処理の顔領域FAが処理対象として選択される。全ての検出された顔領域FAが処理された場合には(ステップS640:YES)、CPU410は、全ての元画像データを処理対象として処理したか否かを判断する(ステップS645)。未処理の元画像データがある場合には(ステップS645:NO)、ステップS605に戻って、未処理の元画像データが処理対象として選択される。全ての元画像データが処理された場合には(ステップS645:YES)、CPU410は、全ての合成対象領域を処理対象として処理したか否かを判断する(ステップS650)。
未処理の合成対象領域がある場合には(ステップS650:NO)、ステップS600に戻って、未処理の合成対象領域が処理対象として選択される。全ての合成対象領域が処理された場合には(ステップS650:YES)、CPU410は、対応する矩形画像が決定されていない合成対象領域(未決の合成対象領域とも呼ぶ)があるか否かを判断する(ステップS660)。
未決の合成対象領域がある場合には(ステップS660:YES)、CPU410は、当該未決の合成対象領域に対応付ける顔領域FAを、他の合成対象領域に対応付けられていない残りの顔領域FAの中から選択する(ステップS670)。未決の合成対象領域が複数個有る場合には、それぞれの未決の合成対象領域に対応付けるべき顔領域が1個ずつ選択される。例えば、上述した優先順位が高い顔領域FAが、優先順が高い合成対象領域に対応付けられるように、優先順位に基づいて、未決の合成対象領域に対応付ける顔領域FAが選択される。
ステップS680では、CPU410は、未決の合成対象領域に対応付けられた顔領域FAを含む元画像を処理対象として、第1実施例において説明した最大矩形抽出処理(図14)を実行する。この結果、未決の合成対象領域に対応する矩形画像が抽出される。
未決の合成対象領域がない場合(ステップS660:NO)、あるいは、ステップS680で、未決の合成対象領域に対応する矩形画像が抽出された場合には、CPU410は、クロッピング処理を終了する。抽出された矩形画像は、第1実施例と同様に、サイズ調整処理(図3のステップS50)と、合成処理(図3のステップS55)において、対応する合成対象領域に合成される。
以上説明した第2実施例のクロッピング処理によれば、顔領域FAを合成対象領域に対応付けるか否かを、以下の方法により決定している。すなわち、第1実施例の顔周囲領域抽出処理と同じ方法で対象画像に対して抽出枠EAが設定される(図18のステップS620)。そして、当該顔領域FAを基準とした抽出枠EAを対象画像内に設定できるか否か(ステップS625)によって、顔領域FAを合成対象領域に対応付けるか否かが決定されている。そして、処理対象の顔領域FAが、1個の合成対象領域に対応付けるべき顔領域ではない場合には(ステップS625:NO)、対象画像内の他の顔領域FAを処理対象として、処理がくり返される(ステップS640:NO)。
換言すれば、CPU410は、対象画像内に第1の顔領域と第2の顔領域とが含まれる場合であって、第1の顔領域を含む抽出枠EAが対象画像内に設定できず、第2の顔領域を含む抽出枠EAが対象画像内に設定できる場合には、合成対象領域に第2の顔領域を対応付ける。この結果、後に生成される合成処理において、合成画像における当該合成対象領域には、第2の顔領域を含む画像が合成される。したがって、第1の顔領域を含む抽出枠EAを設定できない場合であっても、第2の顔領域を含む画像を用いて適切な合成画像を生成することができる。
さらに、本実施例では、対象画像内に、合成対象領域に対応付けるべき顔領域がない場合には(ステップS640:YES)、他の対象画像内の顔領域FAを処理対象として、処理がくり返される(ステップS645:NO)。
換言すれば、CPU410は、第1の元画像を表す元画像データと、第2の元画像を表す元画像データと、が取得される場合であって、第1の元画像内の顔領域を含む抽出枠EAが、第1の元画像内に設定できず、第2の元画像内の顔領域を含む抽出枠EAが、第2の対象画像内に設定できる場合には、合成対象領域に、第2の元画像内の顔領域を対応付ける。この結果、後に生成される合成処理において、合成画像における当該合成対象領域には、第2の元画像内の顔領域を含む画像が合成される。したがって、第1の元画像内の顔領域を含む抽出枠EAを設定できない場合であっても、第2の元画像を用いて適切な合成画像を生成することができる。
さらに、本実施例では、抽出枠EAを設定できるか否かに基づく方法では、特定の合成対象領域に対して、全ての対象画像内の全ての顔領域FAのうちのいずれの顔領域FAも対応付けることができない場合には、CPU410は、他の合成対象領域に対応付けられていない顔領域FAを対応付ける。その場合には、CPU410は、第1実施例の最大矩形抽出処理を用いて、当該特定の合成対象領域に対する画像の合成に用いる矩形画像を抽出する(ステップS670、S680)。この結果、抽出枠EAを設定できるか否かに基づく方法では、特定の合成対象領域に対して顔領域FAを対応付けることができない場合であっても、他の合成対象領域に対応付けられていない顔領域FAを含む画像を用いて適切な合成画像を生成することができる。
C.第3実施例:
第3実施例では、第1実施例のクロッピング処理(図6)とは異なるクロッピング処理が実行される。図21は、第3実施例のクロッピング処理のフローチャートである。
図21のステップS800〜S820の処理は、図18のステップS600〜S620の処理と同一である。ステップS825では、CPU410は、図8のステップS350と同様に、設定された抽出枠EAが対象領域内に含まれるか否かを判断する。
設定された抽出枠EAが、対象画像内に含まれている場合には(ステップS825:YES)、CPU410は、図8のステップS360と同様に、対象画像のうち、抽出枠EA内の矩形画像を抽出する(ステップS830)。設定された抽出枠EAが、対象画像内に含まれていない場合には(ステップS825:NO)、CPU410は、ステップS825の処理をスキップする。
ステップS840では、対象画像内で検出された全ての顔領域FAを処理対象として処理されたか否かが判断される。未処理の顔領域FAがある場合には(ステップS840:NO)、ステップS815に戻って、未処理の顔領域FAが処理対象として選択される。全ての検出された顔領域FAが処理された場合には(ステップS840:YES)、全ての元画像データが処理対象として処理されたか否かが判断される(ステップS845)。未処理の元画像データがある場合には(ステップS845:NO)、ステップS805に戻って、未処理の元画像データが処理対象として選択される。全ての元画像データが処理された場合には(ステップS845:YES)、全ての合成対象領域が処理対象として処理したか否かが判断される(ステップS850)。
未処理の合成対象領域がある場合には(ステップS850:NO)、ステップS800に戻って、未処理の合成対象領域が処理対象として選択される。全ての合成対象領域が処理された場合には(ステップS850:YES)、ステップS850に処理が進められる。この時点で、合成対象領域ごとに、全ての対象画像内の全ての顔領域FAが合成対象領域に適切に合成できるか否かが、合成対象領域ごとに判断されている。
ステップS860では、CPU410は、ステップS830にて抽出された矩形画像群をユーザに提示するための候補提示データを生成する。各矩形画像には、顔領域FAが含まれているので、候補提示データは、合成対象領域ごとに、合成対象領域に適切に合成できる顔領域の候補をユーザに提示するためのデータと、言うことができる。候補画像データは、例えば、合成対象領域ごとに、適切に合成できると判断された顔領域FAを含む複数個のサムネイル画像と、これらの顔領域FAを含む元画像を特定する情報と、後述する顔領域選択処理のためのUIデータと、を含む。顔領域FAの抽出元である元画像を特定する情報は、抽出元である元画像を表す元画像データのファイル名などが用いられる。候補提示データが生成されると、第3実施例のクロッピング処理は終了される。
図22は、第3実施例の画像処理システムの動作を示すフローチャートである。図22のフローチャートが、図3のフローチャートと異なる点は、ステップS45のクロッピング処理の後に、ステップS47〜S49が、追加されている点である。
ステップS47では、CPU410は、クロッピング処理で生成された候補提示データを複合機200に対して送信する。ステップS48では、複合機200のCPU210は、受信した候補提示データを用いて、顔領域選択処理を実行する。顔領域選択処理は、利用するテンプレート画像内の合成対象領域ごとに合成すべき顔領域を指定する指示をユーザから受け付ける処理である。例えば、CPU410は、テンプレート画像10の3個の合成対象領域15A〜15C(図2(A))のそれぞれについて、合成すべき顔領域FAの選択をユーザから受け付ける。
図23は、UI画像の一例を示す図である。UI画像UG3は、テンプレート画像10の合成対象領域15Aに合成すべき顔領域FAの選択を受け付けるためのUI画像である。例えば、UI画像UG3は、合成対象領域15Aに合成できる顔領域FAの候補を示す複数個のサムネイル画像SM6〜SM8を含んでいる。また、UI画像UG3は、各サムネイル画像によって示される顔領域FAを含む元画像を表す元画像データのファイル名CM1〜CM3と、顔領域FAの選択を促すメッセージMS5と、を含む。
ステップS49では、CPU210は、ユーザから受け付けた選択指示を示す選択指示データをサーバ400に対して送信する。選択指示データは、ユーザによって合成対象領域ごとに選択された顔領域FAを指定する情報と、指定された顔領域FAを合成すべき合成対象領域を示す情報と、を含む。
ステップS50では、CPU410は、受信した選択指示データに基づいて、ユーザによって指定された顔領域FAを含む矩形画像のサイズを、合成すべき合成対象領域のサイズに応じて調整する。ステップS55では、CPU410は、サイズが調整された矩形画像を用いて、合成画像を表す合成画像データを生成する。ステップS50とS55との具体的な処理内容は、第1実施例と同じである。
以上説明した第3実施例によれば、CPU410は、顔領域FAを合成対象領域に合成できるか否かを、以下の方法により決定している。すなわち、第1実施例の顔周囲領域抽出処理と同じ方法で対象画像に対して抽出枠EAが設定される(図21のステップS820)。そして、当該顔領域FAを基準とした抽出枠EAを対象画像内に設定できるか否か(図21のステップS825)によって、顔領域FAを合成対象領域に合成できるか否かを決定している。そして、CPU410は、全ての対象画像(すなわち、元画像)内の全ての顔領域FAのうち、合成対象領域に合成できると判断された顔領域FAの候補を、合成対象領域ごとに全て抽出する(ステップS830)。そして、CPU410は、合成対象領域ごとに抽出された顔領域FAの候補を利用者に提示する(ステップS850、図23のステップS47)。
また、提示される複数個の顔領域FAの候補は、複数個の対象画像(元画像)にそれぞれ含まれる複数個の顔領域FAを含み得る。換言すれば、CPU410は、複数個の元画像のうち、元画像内に抽出枠EAを設定可能な1個以上の元画像内の顔領域FAの候補をユーザに提示することができる。この結果、複数個の元画像データのうち、合成画像を生成するために適切な画像データをユーザに認識させることができる。
提示される複数個の顔領域FAの候補は、1個の対象画像(元画像)内に含まれる複数個の顔領域FAを含み得る。換言すれば、CPU410は、1個の元画像内の複数個の顔領域FAを1個ずつ含む複数個の抽出枠EAのうち、元画像内に設定可能な1個以上の抽出枠EA内の画像をユーザに提示することができる。この結果、1個の元画像内の複数個の顔領域FAのうち、合成対象領域に合成するために適切な顔領域をユーザに認識させることができる。
D.変形例
(1)上記第1実施例の修正画像生成処理では、対象画像内の端部領域TAD、TAU内の画像を、外部領域OSD、OSUに並べて配置することによって、修正画像AIを生成している(図12、図13)。これに代えて、対象画像内の端部領域を一方向に拡大することによって修正画像を生成しても良い。
図24は、変形例における修正画像生成処理について説明する図である。外部領域OSU、OSBが元画像16の上側と下側にある場合に、CPU410は、第1実施例と同様に、元画像16の上辺に沿う端部領域TAU2、TAD2を設定する。図24(A)の例では、端部領域TAU2は、顔領域FA1の上辺から元画像16の上辺までの領域に設定されている。端部領域TAD2は、顔領域FA1の下辺から元画像16の下辺までの領域に設定されている。これに限らず、端部領域TAU2は、顔領域FA1を含んでいなければ良く、顔領域FA1の上辺から元画像16の上辺までの領域のうち、元画像16の上辺に沿う一部の領域であっても良い。端部領域TAD2についても同様である。
CPU410は、端部領域内の画像を、辺に沿う方向の長さ(例えば、幅)が維持され、辺と交差する方向の長さ(例えば、高さ)が長くなるように、拡大して、拡大画像を生成する。換言すれば、図14(B)の端部領域TAU2内の画像の上端と、抽出枠EA1の上端と、が重なるように、端部領域TAU2内の画像が、上方に引き伸ばされるように拡大される。そして、端部領域TAD2内の画像の下端と、抽出枠EA1の下端と、が重なるように、端部領域TAD2内の画像が、下方に引き伸ばされるように、拡大される。図14(B)の例では、CPU410は、端部領域TAU2、TAD2内の画像を、幅が維持され、高さが長くなるように、縦方向に拡大して、拡大画像USI2、DSI2を生成する。なお、修正画像AI2のサイズが、抽出枠EA1(図24(A))のサイズと、等しくなるように、縦方向の倍率が設定される。この結果、拡大画像USI2、DSI2と、顔領域FA1を含む拡大されない領域内の画像OIと、を含む修正画像AI2が生成される(図24(B)。
このように生成された修正画像AI2のサイズが、図3のステップS50にて合成対象領域のサイズに応じて調整され、サイズが調整された修正画像AI2が、図3のステップS50にて合成対象領域に合成される。この結果、元画像16と、合成画像10M内に合成された修正画像AI2と、比較すると、修正画像AI2内の顔領域FA1を含む画像OIと、拡大画像USI2、DSI2と、の間で、元画像16からの縦方向の倍率が、互いに異なることになる。
換言すれば、合成画像10M内に合成された修正画像AI2は、元画像16のうちの顔領域FA1内の顔16Aと、顔16Aを除いた領域の少なくとも一部の領域と、の特定方向の長さが互いに異なる比率で調整された画像である。このような修正画像AI2を生成することによって、違和感が低減された修正画像AI2を生成することができる。
(2)上記第1実施例のクロッピング処理では、対象画像(元画像)内の顔を含む顔領域FAを特定し(図6のステップS120)、顔周囲領域抽出処理では、顔領域FAを基準とした矩形画像を抽出している(図8のステップS360)。これに代えて、顔とは異なるオブジェクト、例えば、植物、動物、車などを含むオブジェクト領域を特定し、これらのオブジェクト領域を基準として矩形画像を抽出しても良い。こうすれば、顔とは異なるオブジェクトが適切に合成された合成画像を生成することができる。
(3)上記第1実施例では、CPU410は、合成対象領域の最大内接矩形ISmaxを特定し(図8のステップS310)、外接矩形を特定し(図8のステップS320)ている。これに代えて、CPU410は、最大内接矩形ISmaxとは異なる内接図形、例えば、内接円や内接三角形などを、合成すべきオブジェクトの形状などに応じて特定しても良い。また、CPU410は、外接矩形とは異なる外接図形、例えば、外接円や外接三角形などを、合成対象領域の形状などに応じて特定しても良い。
(4)上記第2実施例および第3実施例では、全ての対象画像内の全ての顔領域FAを、1個の合成対象領域に合成される候補として扱っている(図18、図21)。これに代えて、1個の対象画像内の1個以上の顔領域FAを、1個の合成対象領域に合成される候補として扱っても良く、複数個の対象画像内の1個ずつの顔領域FA(例えば、最大サイズの顔領域FA)を、1個の合成対象領域に合成される候補として扱っても良い。
(5)上記第1実施例において、元画像データは、ユーザの所有する画像データであり、USBメモリなどの記憶装置から取得されて、サーバ400に送信される。これに代えて、元画像データの全部または一部は、複合機200のスキャナ部250を用いて、ユーザが用意した原稿を光学的に読み取ることによって、取得されても良い。
(6)上記実施例のクロッピング処理(図6)において、一部の処理ステップは適宜に省略され得る。例えば、動作モードの判定(ステップS110)や、画像種類判定処理(ステップS130)などは適宜に省略され得る。
(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(図17)をプリンタ部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)上記実施例において、ハードウェアによって実現されていた構成の一部をソフトウェアに置き換えるようにしてもよく、逆に、ソフトウェアによって実現されていた構成の一部をハードウェアに置き換えるようにしてもよい。