以下、本発明の一実施の形態について、図面を参照して説明する。
図1は、本発明を適用したプリンタ1のハードウェアの構成例を示すブロック図である。このプリンタ1は、メモリカード18等から取得した画像データに基づき画像を印刷する、いわゆるダイレクトプリントに対応したカラーインクジェットプリンタである。なおカラー印刷だけでなく、モノクロ印刷についても、本発明を適用することができる。
プリンタ1は、CPU11、内部メモリ12、操作部13、表示部14、プリンタエンジン15、及びカードインターフェース(カードI/F)16を備えている。
CPU(central processing unit)11は、各部を制御して、内部メモリ12に格納されているプログラムに応じて各種の処理を実行する。
例えばCPU11は、人物の顔が写った画像を変形する処理を行う。具体的には、例えば顎付近が細くなり、顔の形状がシャープに見えるように、すなわち「小顔」に見えるように、画像が補正される(以下、この処理を、小顔補正処理Z1と称する)。またCPU11は、小顔補正処理Z1の実行に当たり、画像から認識される顔の状態に応じて、小顔補正処理Z1の実行を制限する(以下、この小顔補正処理Z1の実行を制限する処理を、画像変形処理Z2と称する)。具体的には、例えば、人物の顔が逆さまであると認識された場合、その画像には、小顔補正処理Z1が行われないようにする。
内部メモリ12は、CPU11が実行する各種プログラムや各種データを格納しているROM(Read Only Memory)、及びCPU11が実行対象とするプログラムやデータを一時的に格納するRAM(Random Access Memory)によって構成されている。
操作部13は、ボタンやタッチパネルの1つ又は複数より構成され、ユーザによる操作内容をCPU11に通知する。
表示部14は、例えば液晶ディスプレイより構成され、CPU11から供給されたデータに対応する画像を表示する。
プリンタエンジン15は、CPU11から供給された印刷データに基づき印刷を行う印刷機構である。
カードインターフェース16は、カードスロット17に挿入されたメモリカード18との間でデータのやり取りを行うためのインターフェースである。なお、この例では、メモリカード18にRGBデータとしての画像データが格納されており、プリンタ1は、カードインターフェース16を介してメモリカード18に格納された画像データの取得を行う。なおプリンタ1は、さらに、他の機器(例えばデジタルスチルカメラ)とのデータ通信を行うためのインターフェースを備えているとしてもよい。
プリンタ1の各構成要素は、バス19を介して互いに接続されている。
図2は、画像変形処理Z2を実行するためのプリンタ1の機能的構成例を示すブロック図である。この機能は、CPU11が内部メモリ12に記憶されている所定のプログラムを実行することより実現される。
顔領域特定部21は、例えばメモリカード18から読み出されてプリンタ1に入力された、小顔補正処理Z1の対象となる画像(以下、対象画像TIと称する)を解析し、人物の顔部分が写っている顔の画像を含む領域(以下、顔領域FAと称する)を特定する。
画像変形処理部22は、顔領域FAに基づいて、実際に変形される領域(以下、変形領域TAと称する)を設定し、その変形領域TA内の画像の変形を行うことにより、顔の画像に対して小顔補正処理Z1を行う。また画像変形処理部22は、小顔補正処理Z1を行うに当たり、顔領域FAから認識される顔の回転角に応じて、小顔補正処理Z1の実行を制限する(即ち画像変形処理Z2が実行される)。例えば、回転角が180度(即ち人物の顔が逆さまであると認識される場合)、その顔の画像に対しては小顔補正処理Z1が行われない。
画像変形処理部22は、変形領域設定部31、変形領域分割部32、及び分割領域変形部33から構成されている。画像変形処理部22のこれらの構成要素については、小顔補正処理Z1の説明と合わせて後述する。
美肌補正部23は、小顔補正処理Z1が施される顔領域FAの色が肌色として好ましい色となるような補正処理を行う。全体補正部24は、対象画像TI全体に対して、色かぶり等を排除する補正処理を実行する。
出力制御部25は、小顔補正処理Z1等が施された対象画像TIの画像データから表示データ又は印刷データを生成し、表示データを表示部14に供給して表示させたり、印刷データをプリンタエンジン15に供給して、その印刷データに基づく画像の印刷を実行させる。
図3は、小顔補正処理Z1の流れを示すフローチャートである。このフローチャートを参照して、小顔補正処理Z1について説明する。
ステップS1において、画像変形処理部22の変形領域設定部31は、後述するように対象画像TIに特定された顔領域FAに基づいて、変形領域TAを設定する。変形領域TAは、実際に画像が変形される領域である。
図4は、変形領域TAの設定例を示す図である。図4には、対象画像TIに含まれる人物の顔の画像に設定された顔領域FA、及びその顔領域FAに基づいて設定された変形領域TAが示されている。図4中、基準線RLは、矩形の顔領域FAの重心を通り、顔領域FAの高さ方向(上下方向)に沿った境界線に平行な直線である。
図4の例では、変形領域TAは、顔領域FAを基準線RLと平行な方向(高さ方向)及び基準線RLに直行する方向(幅方向)に伸張(または短縮)した領域として設定される。具体的には、顔領域FAの高さ方向の大きさをHfとし、幅方向の大きさをWfとすると、顔領域FAを、上方向にk1・Hfだけ、下方向にk2・Hfだけ伸ばすと共に、左右にそれぞれk3・Wfだけ伸ばした領域が、変形領域TAとして設定される。なお、k1,k2,k3は、所定の係数である。
変形領域TAはまた、高さ方向に関しては、概ね顎から額までの画像を含み、幅方向に関しては、左右の頬の画像を含むような領域として設定される。すなわち、本実施例では、変形領域TAが概ねそのような範囲の画像を含む領域となるように、顔領域FAの大きさとの関係に基づき、上述の係数k1,k2,k3が予め設定されている。
なお例えば目の画像と推定される画像がある側の方向「顔領域FAの上方向」となり、口の画像と推定される画像がある側の方向が「顔領域FAの下方向」となるが、その上下方向は、後述する顔領域FA特定時に把握される顔領域FAの画像面内における回転角によって決定される。顔領域FAが、その回転角から決定された顔領域FAの上方向と下方向に、それぞれ、k1・Hf又はk2・Hfだけ伸ばされる。
次にステップS2において、変形領域分割部32は、変形領域TAを複数の小領域に分割する。
図5は、変形領域TAの小領域への分割方法の一例を示す図である。変形領域分割部32は、変形領域TAに複数の分割点Dを配置し、分割点Dを結ぶ直線を用いて変形領域TAを複数の小領域に分割する。この例では、変形領域TAが15個の矩形の小領域に分割される。分割点Dの配置の態様(分割点Dの個数および位置)は、予め定義されている。
分割点Dは、水平分割線Lhと垂直分割線Lvとの交点と、水平分割線Lh及び垂直分割線Lvと変形領域TAの外枠との交点とに配置される。なお図5の例では、水平分割線Lhi(i=1又は2)上に位置する分割点Dは、左から順に、D0i,D1i,D2i,D3i,D4i,D5iと示されている。水平分割線Lh1上に位置する分割点Dは、D01,D11,D21,D31,D41,D51と示されている。垂直分割線Lvj(j=1,2,3,4のいずれか)上に位置する分割点Dは、下から順に、Dj0,Dj1,Dj2,Dj3と示されている。垂直分割線Lv1上に位置する分割点Dは、D10,D11,D12,D13と示されている。
水平分割線Lh及び垂直分割線Lvは、変形領域TA内に分割点Dを配置するための基準となる線である。図5の例の場合、2本の水平分割線Lhと、4本の垂直分割線Lvが設定される。この2本の水平分割線Lhを、変形領域TAの下方から順に、Lh1,Lh2と呼ぶ。また、4本の垂直分割線Lvを、変形領域TAの左から順に、Lv1,Lv2,Lv3,Lv4と呼ぶ。
なお水平分割線Lh及び垂直分割線Lvは、顔領域FAの回転角度に基づいて決定された顔領域FAの上下左右方向、及び変形領域TAの大きさに従って、水平分割線Lh及び垂直分割線Lvと画像との位置関係が結果的に図5に示す位置関係となるように配置される。具体的には、水平分割線Lh1は、変形領域TAにおいて、顎であるとされる部分より下方に配置され、水平分割線Lh2は、目であるとされる部分のすぐ下付近に配置される。また、垂直分割線Lv1及びLv4は、頬であるとされる部分の外側に配置され、垂直分割線Lv2及びLv3は、目尻であるとされる部分の外側に配置される。
上述した水平分割線Lhと垂直分割線Lvとの配置に従い、水平分割線Lhと垂直分割線Lvとの交点と、水平分割線Lh及び垂直分割線Lvと変形領域TAの外枠との交点とに、分割点Dが配置される。なお、図5に示すように、本実施例における分割点Dの配置は、基準線RLに対して対称の配置となっている。
このように変形領域TAに複数の分割点Dが配置され、分割点Dを結ぶ直線で変形領域TAが複数の小領域に分割される。
図3に戻りステップS3において、分割領域変形部33は、変形領域TAを対象とした画像の変形処理を行う。分割領域変形部33による変形処理は、ステップS2で変形領域TA内に配置された分割点Dの位置を移動して、小領域を変形することにより行われる。
変形処理のための各分割点Dの位置の移動態様(移動方向および移動距離)は、分割点移動テーブルにより、補正度合いに対応付けて予め定められている。分割領域変形部33は、分割点移動テーブルを参照し、補正度合いに対応付けられた移動方向及び移動距離で、分割点Dの位置を移動する。
図6は、分割点移動テーブルの内容の一例を示す説明図である。また図7は、この分割点移動テーブルに従った分割点Dの位置の移動の一例を示す説明図である。図6に示すように、分割点移動テーブルには、各分割点Dについて、基準線RLと直行する方向(H方向)及び基準線RLと平行な方向(V方向)に沿った移動量が示されている。なお、本実施例では、分割点移動テーブルに示された移動量の単位は、対象画像TIの画素ピッチPPである。また、H方向については、向かって右側への移動量が正の値として表され、向かって左側への移動量が負の値として表され、V方向については、上方への移動量が正の値として表され、下方への移動量が負の値として表される。例えば、分割点D11は、H方向に沿って右側に画素ピッチPPの7倍の距離だけ移動され、V方向に沿って上方に画素ピッチPPの14倍の距離だけ移動される。また、例えば分割点D22は、H方向及びV方向共に移動量がゼロであるため、移動されない。
なお、本実施例では、変形領域TAの内外の画像間の境界が不自然とならないように、変形領域TAの外枠上に位置する分割点D(例えば図5に示す分割点D10等)の位置は移動されないものとしている。従って、図6に示した分割点移動テーブルには、変形領域TAの外枠上に位置する分割点Dについての移動態様は定義されていない。
図7中、移動前の分割点Dは、白抜きの丸で、移動後の分割点Dや位置の移動の無い分割点Dは黒丸で示されている。また、移動後の分割点Dは、分割点D’と呼ぶものとする。例えば分割点D11の位置は、図7において右上方向に移動され、分割点D’11となる。
なお、本実施例では、基準線RLに対して対称な位置関係にある2つの分割点Dの組み合わせ(例えば分割点D11とD41との組み合わせ)の全てが、分割点Dの移動後も、基準線RLに対して対称な位置関係を維持するように、移動態様が定められている。
分割領域変形部33は、変形領域TAを構成する各小領域について、分割点Dの位置移動前の状態における小領域の画像が、分割点Dの位置移動により新たに定義された小領域の画像となるように、画像の変形処理を行う。例えば、図7において、分割点D11,D21,D22,D12を頂点とする小領域(ハッチングを付して示す小領域)の画像は、分割点D’11,D’21,D22,D’12を頂点とする小領域の画像に変形される。
図8は、分割領域変形部33による画像の変形処理方法の概念を示す図である。図8では、分割点Dを黒丸で示している。図8では、説明を簡略化するために、4つの小領域について、左側に分割点Dの位置移動前の状態を、右側に分割点Dの位置移動後の状態を、それぞれ示している。図8の例では、中央の分割点Daが分割点Da’の位置に移動され、その他の分割点Dの位置は移動されない。これにより、例えば、分割点Dの移動前の分割点Da,Db,Dc,Ddを頂点とする矩形の小領域(以下「変形前注目小領域BSA」とも呼ぶ)の画像は、分割点Da’,Db,Dc,Ddを頂点とする矩形の小領域(以下「変形後注目小領域ASA」とも呼ぶ)の画像に変形される。
本実施例では、矩形の小領域を小領域の重心CGを用いて4つの三角形領域に分割し、三角形領域単位で画像の変形処理を行っている。図8の例では、変形前注目小領域BSAが、変形前注目小領域BSAの重心CGを頂点の1つとする4つの三角形領域に分割される。同様に、変形後注目小領域ASAが、変形後注目小領域ASAの重心CG’を頂点の1つとする4つの三角形領域に分割される。そして、分割点Daの移動前後のそれぞれの状態において対応する三角形領域毎に、画像の変形処理が行われる。例えば、変形前注目小領域BSA中の分割点Da,Dd及び重心CGを頂点とする三角形領域の画像が、変形後注目小領域ASA中の分割点Da’,Dd及び重心CG’を頂点とする三角形領域の画像に変形される。
図9は、三角形領域における画像の変形処理方法の概念を示す説明図である。図9の例では、点s,t,uを頂点とする三角形領域stuの画像が、点s’,t’,u’を頂点とする三角形領域s’t’u’の画像に変形される。画像の変形は、変形後の三角形領域s’t’u’の画像中のある画素の位置が、変形前の三角形領域stuの画像中のどの位置に相当するかを算出し、算出された位置における変形前の画像における画素値を変形後の画像の画素値とすることにより行う。
例えば、図9において、変形後の三角形領域s’t’u’の画像中の注目画素p’の位置は、変形前の三角形領域stuの画像中の位置pに相当するものとする。位置pの算出は、以下のように行う。まず、注目画素p’の位置を、下記の式(1)のようにベクトルs’t’とベクトルs’u’との和で表現するための係数m1及びm2が算出される。
次に、算出された係数m1及びm2を用いて、下記の式(2)により、変形前の三角形領域stuにおけるベクトルstとベクトルsuとの和を算出することにより、位置pが求まる。
変形前の三角形領域stuにおける位置pが、変形前の画像の画素中心位置に一致した場合には、当該画素の画素値が変形後の画像の画素値とされる。一方、変形前の三角形領域stuにおける位置pが、変形前の画像の画素中心位置からはずれた位置となった場合には、位置pの周囲の画素の画素値を用いたバイキュービック等の補間演算により、位置pにおける画素値を算出し、算出された画素値が変形後の画像の画素値とされる。
変形後の三角形領域s’t’u’の画像中の各画素について上述のように画素値を算出することにより、三角形領域stuの画像から三角形領域s’t’u’の画像への画像変形処理を行うことができる。分割領域変形部33は、図5に示した変形領域TAを構成する各小領域について、上述したように三角形領域を定義して変形処理を行い、変形領域TAの小顔補正処理を行う。
図10は、本実施例における小顔補正の具体的な態様を示す図である。図10には、変形領域TAを構成する各小領域の変形態様のイメージを矢印により示している。図10に示すように、本実施例の顔形状補正では、基準線RLと平行な方向(V方向)に関し、水平分割線Lh1上に配置された分割点D(D11,D21,D31,D41)の位置は上方に移動される一方、水平分割線Lh2上に配置された分割点D(D12,D22,D32,D42)の位置は移動されない(図6参照)。従って、水平分割線Lh1と水平分割線Lh2との間に位置する画像は、V方向に関して縮小される。上述したように、水平分割線Lh1は顎の画像より下方に配置され、水平分割線Lh2は目の画像のすぐ下付近に配置されるため、本実施例の顔形状補正では、顔の画像の内、顎から目の下にかけての部分の画像がV方向に縮小されることとなる。この結果、画像中の顎のラインは上方に移動する。
他方、基準線RLと直行する方向(H方向)に関しては、垂直分割線Lv1上に配置された分割点D(D11,D12)の位置は右方向に移動され、垂直分割線Lv4上に配置された分割点D(D41,D42)の位置は左方向に移動される(図6参照)。さらに、垂直分割線Lv2上に配置された2つの分割点Dの内、水平分割線Lh1上に配置された分割点D(D21)の位置は右方向に移動され、垂直分割線Lv3上に配置された2つの分割点Dの内、水平分割線Lh1上に配置された分割点D(D31)の位置は左方向に移動される(図6参照)。従って、垂直分割線Lv1より左側に位置する画像は、H方向に関して右側に拡大され、垂直分割線Lv4より右側に位置する画像は、左側に拡大される。また、垂直分割線Lv1と垂直分割線Lv2との間に位置する画像は、H方向に関して縮小又は右側に移動され、垂直分割線Lv3と垂直分割線Lv4との間に位置する画像は、H方向に関して縮小又は左側に移動される。さらに、垂直分割線Lv2と垂直分割線Lv3との間に位置する画像は、水平分割線Lh1の位置を中心にH方向に関して縮小される。
上述したように、図6の例では、垂直分割線Lv1及びLv4は、頬のラインの画像の外側に配置され、垂直分割線Lv2及びLv3は、目尻の画像の外側に配置される。そのため、本実施例の顔形状補正では、顔の画像の内、両目尻より外側の部分の画像が全体的にH方向に縮小される。特に顎付近において縮小率が高くなる。この結果、画像中の顔の形状は、全体的に幅方向に細くなる。
上述したH方向及びV方向の変形態様を総合すると、本実施例の顔形状補正により、画像中の顔の形状が小さくなる。
なお、図10に示す分割点D22,D32,D33,D23を頂点とする小領域(ハッチングを付した領域)は、上述した水平分割線Lh2や垂直分割線Lv2及びLv3の配置方法によると、両目の画像を含む領域となる。図6に示すように、分割点D22及びD32はH方向にもV方向にも移動されないため、この両目の画像を含む小領域は変形されない。このように本実施例では、両目の画像を含む小領域については変形しないこととし、顔形状補正後の画像がより自然で好ましいものとなるようにしている。
このように変形領域TAを対象とした画像の変形処理が行われると、小顔補正処理Z1が終了する。
ところで上述した小顔補正処理Z1では、例えば目の画像と推定される画像がある側の方向が「顔領域FAの上方向」に、口の画像と推定される画像がある側の方向が「顔領域FAの下方向」とされ、顔領域FAが、その上下方向にある拡大率で拡大されて変形領域TAが設定される(図4)。そして、変形領域TAに顔領域FAの上下方向に応じて水平分割線Lhが設定され、その水平分割線Lhと垂直分割線Lvで区切られる領域の中の所定の領域(例えば、顔領域FAの下側の部分)(図5)が変形(例えば、細く)される(図7、図10)。従って、顔領域FAから認識された顔画像の上下方向(顔領域FAの上下方向)が、実際の顔画像の上下方向とある程度一致していないと、小顔補正の結果不自然な画像となってしまうことがある。
図11は、顔領域FAの上下方向が実際の顔画像の上下方向とが反対になった場合の例を示す図である。このように顎にひげが生えている顔の画像では、ひげと髪の毛が画像上類似することから、ひげの画像がある側の方向(実際の顔画像では下方向)が「顔領域FAの上方向」とされ、実際の顔画像の上下方向と反対に認識されることがある。このように、顔領域FAの上下方向が、実際の顔画像の上下方向と反対に認識されると、本来目の画像の下付近に配置されるべき水平分割線Lh2が、鼻の画像の下付近に配置され、また本来顎の画像の下付近に配置されるべき水平分割線Lh1が、額の画像付近に配置される。その結果分割点D11,D21,D22,D12を頂点とする小領域(図中、ハッチが付されている領域)、及び分割点D41,D31,D32,D42を頂点とする小領域(図中、ハッチが付されている領域)が、それぞれ内側に移動するように変形されるので、鼻から額にかけての部分が細くなる不自然な画像が生成される。
そこで本実施の形態では、小顔補正によりこのような不自然な画像が生成されないように、画像から認識される顔の画像面内における回転角に応じて、小顔補正処理Z1の実行が制限される(即ち画像変形処理Z2が実行される)。
図12は、「画像から認識される顔の画像面内における回転角」の例を示す図である。即ち「画像から認識される顔の画像面内における回転角」とは、例えば、基準線RLの「顔領域FAの上方向」(即ち顔領域FAから認識される顔画像の上方向)を示す直線Aと、顔領域FAの重心Cから対象画像TIの真上の方向に向かう直線Bとの角度に相当する角度である(即ち顔領域FAの画像面内における回転角である)。図12の上段の例における「顔領域FAの上方向」は、対象画像TIの真上の方向と一致するので、直線Aと直線Bのなす角度は0度となる。一方下段の例における「顔領域FAの上方向」は対象画像TIの真下の方向となるので、直線Aと直線Bのなす角は180度なる。
図13は、小顔補正処理Z1が制限される「画像から認識される顔の画像面内における回転角」の範囲を表す図である。図13の例では、「画像から認識される顔の画像面内における回転角」(以下、認識回転角と称する)が、0度、90度、270度を中心とする30度の範囲(以下、対象角範囲と称する)(図中、ハッチが付されている範囲)内であるときだけ、即ち、345度〜15度、75度〜105度、255度〜285度であるときだけ、小顔補正処理Z1が実行され、それ以外の範囲内のとき、小顔補正処理Z1は実行されない。即ち図11及び図12の下段に示したように、認識回転角度が180度である場合、小顔補正処理Z1は実行されない。このように認識回転角が180度である場合に小顔補正処理Z1を実行しないようにすることにより、図11を参照して説明したような不自然な画像が生成されることを防止することができる。
図14は、認識回転角に応じて、小顔補正処理Z1の実行を制限する処理(即ち画像変形処理Z2)の流れを示すフローチャートである。このフローチャートを参照して、画像変形処理Z2について説明する。
ステップS11において、画像変形処理部22は、操作部13に対する操作により選択されたユーザが印刷したい画像を、対象画像TIとし、その画像データ(例えば、2560画素×1920画素の24bitカラーの画像データ)を、メモリカード18から読み出す。そして画像変形処理部22は、その画像データの解像度を変換することにより、320画素×240画素(QVGA:Quarter Video Graphics Array)の作業画像データWDを生成する。
ステップS12において、顔領域特定処理が実行される。
図15は、顔領域特定処理の概要を示す図である。この例では、作業画像データWDにおいて正方形状領域の検出窓SWが、検出窓SWのサイズと、検出窓SWの画像面内における回転角を順次シフトさせながら、隈無く移動する。そして検出窓SWによって取り出されたデータの画像領域(以下、画像領域IDWと称する)を、例えば人間の目があると推定される領域や人間の口があると推定される領域を抽出することができる矩形フィルタを用いてフィルタリングすることで、画像領域IDWが顔領域FAであるか否かが判定される。
図16は、顔領域特定処理の流れを示すフローチャートである。このフローチャートを参照して、顔領域特定処理を説明する。
ステップS51においては、顔領域特定部21は、サイズカウンタns、y方向カウンタny、x方向カウンタnx、回転角カウンタntを、それぞれ0にリセットする。
この顔領域特定処理では、図15に示したように、検出窓SWが、検出窓SWのサイズと、検出窓SWの画像面内における回転角を順次シフトしながら、隈無く移動する。そのサイズと回転角を順次シフトさせながら移動させるために、検出窓SWのサイズのパラメータS、検出窓SWの中心位置のパラメータP、そして検出窓SWの回転角のパラメータTが用いられる。サイズカウンタnsは、検出窓SWのサイズのパラメータSの値を示し、x方向カウンタnx及びy方向カウンタnyは、検出窓SWの中心位置のパラメータPの値を示し、回転角カウンタntは、検出窓SWの回転角のパラメータTの値を示す。即ち各カウンタns,nx,ny,ntが、後述するように変更されることによって、パラメータS,P,Tが変更され、その変更に応じてサイズと画像面内における回転角が順次シフトしながら、検出窓SWが移動する。
ステップS52において、顔領域特定部21は、サイズカウンタnsに1を加算する。この例の場合、検出窓SWのサイズSは、15種類あることから、サイズカウンタnsは15まで増加する。なおサイズカウンタnsの値の増加(即ちパラメータSの値の増加)に応じて、検出窓SWのサイズS(縦と横の長さ)は段階的に小さくなるものとする。
次にステップS53及びS54において、顔領域特定部21は、検出窓SWの中心位置のパラメータPを設定するために、y方向カウンタnyとx方向カウンタnxにそれぞれ1を加算する。
ステップS55において、顔領域特定部21は、y方向カウンタnyが奇数であるか偶数であるかを判定し、y方向カウンタnyが奇数であると判定した場合、ステップS56において、検出窓SWの中心位置Pのx,y座標を下記の式(3)によって算出する。そして顔領域特定部21は、算出した中心位置Pを中心とする、サイズSの検出窓SWを生成する。
式(3)中、dx,dyは、検出窓SWの中心位置Pの各方向への単位移動距離(画素数)である。即ち単位移動間隔dx,dyと方向カウンタnx,nyをそれぞれ乗算することにより、検出窓SWの中心位置Pのx,y座標が算出される。
また単位移動間隔dx,dyは、検出窓SWの縦及び横の長さを示すサイズSに基づいて下記の式(4)によって算出される。
式(4)が示すように、単位移動間隔dx,dyは互いに異なる値となっており、px>pyとなっている。上記の式(4)によって単位移動間隔dy<1となる場合は、dy=1とする。なお、x方向カウンタnxが取り得る範囲は1〜320/dx(整数部分)とし、y方向カウンタnyは1〜240/dy(整数部分)とする。
ステップS55で、y方向カウンタnyが偶数であると判定された場合、ステップS57において、顔領域特定部21は、検出窓SWの中心位置Pのx,y座標を下記の式(5)によって算出する。即ちy方向カウンタnyが偶数である場合は、y方向カウンタnyが奇数である場合よりも、検出窓SWの中心位置Pのx座標がx方向の単位移動間隔dxの半分だけ進んだ位置となる。顔領域特定部21は、算出した中心位置Pを中心とする、サイズSの検出窓SWを生成する。
ステップS56又はS57で、検出窓SWが生成されると、ステップS58においては、顔領域特定部21は、検出窓SWの一部が作業画像データWDの外側にはみ出ているか否かを判定する。
図17は、検出窓SWの一部が作業画像データWDの外側にはみ出ている様子を示す図である。各カウンタns,nx,nyの値の大きさによって検出窓SWの位置と大きさがシフトするため、あるカウンタns,nx,nyの組み合わせにおいては、図17に示すように検出窓SWの一部が作業画像データWDの外側にはみ出ることがある。
ステップS58で、検出窓SWの一部が作業画像データWDの外側にはみ出ていないと判定された場合(即ち検出窓SWの全部が作業画像データWDの内側に入る場合)、ステップS59において、顔領域特定部21は、検出窓SWの回転角Tを設定するための回転角カウンタntに1を加算する。
回転角カウンタntの値が1増える毎に、例えば、検出窓SWを90度ずつ回転させることができる。このとき回転角カウンタntの最大値Ntは、4(=360度÷90度)となる。また同様に、30度刻み、15度刻み、5度刻みで、検出窓SWを回転させることができる。この例の場合、図13に示した対象角範囲に基づいて、小顔補正処理Z1の実行が制御されるので、15度以下の刻みで、回転角を検出する必要がある。従ってこの例の場合、5度刻みで検出窓SWを回転させるものとする。
次にステップS60において、顔領域特定部21は、上述したように設定されたカウンタns,nx,ny,ntの値に応じた大きさ、位置、及び回転角を有する検出窓SWの内側(画像領域IDW)の画像データを抽出し、抽出した画像データについての顔領域判定処理を実行する。
顔領域判定処理は、例えば人物の目、鼻、及び口等の基本的な形状を表すフィルタを利用して行われる。
図18は、この顔領域判定処理で用いられる矩形フィルタF11,F12の例を示す図である。矩形フィルタF11,F12は、画像領域IDWの一部の領域(図18においてハッチを付して示す領域)に含まれる画素の明度の情報を取り出すために使用される。
なお図18では、矩形フィルタF11,F12が適用される画像領域IDWの画像も、矩形フィルタF11,F12と重ねて表示されている。画像領域IDWの画像は、顔の画像である。また矩形フィルタF11,F12は、20画素×20画素の大きさを有する。ここでは、説明を簡略にするために、検出窓SWによって取り出されたデータの画像領域IDWの大きさと、矩形フィルタF11,F12の大きさとは、同じであるものとする。すなわち、画像領域IDWも、20画素×20画素の大きさを有する。
矩形フィルタF11を使用した判定では、画像領域IDWのデータのうち、領域A11aの各画素の明度のデータY11aが取り出される。領域A11aは、画像領域IDWにおいて高さ方向の中央よりも上側にあって画像領域IDWの左右幅と等しい幅を有する長方形の領域である。また、同様に、領域A11bの各画素の明度のデータY11bも取り出される。領域A11bは、画像領域IDWにおいて高さ方向の中央よりも下側にあって画像領域IDWの左右幅と等しい幅を有する長方形の領域である。
なお、領域A11aは、画像領域IDWが顔領域FAである場合に、人間の目があると推定される領域である。また、領域A11bは、画像領域IDWが顔領域FAである場合に、人間の口があると推定される領域である。
そして、領域A11aの各画素の明度Y11aの合計をα11a倍した値と(α11aは定数)、領域A11bの各画素の明度Y11bの合計をα11b倍した値と(α11bは定数)、の合計値が所定の基準値θ11よりも大きいか否かが判定される。合計値がθ11よりも大きい場合には、画像領域IDWは、顔領域FAであると判定される。画像領域IDWが顔領域FAであると判定された場合、そのときの各カウンタns,nx,ny,ntの値が内部メモリ12に記憶される。
矩形フィルタF12を使用した判定では、画像領域IDWのデータのうち、領域A12aの各画素の明度のデータY12aが取り出される。領域A12aは、領域A11aの左半分の領域A11alの一部であって、領域A11alの中心を含む領域である。また、同様に、領域A12bの各画素の明度のデータY12bが取り出される。領域A12bは、領域A11aの右半分の領域A11arの一部であって、領域A11arの中心を含む領域である。
なお、領域A12aは、画像領域IDWが顔領域FAである場合に、人間の右目があると推定される領域である。また、領域A12bは、画像領域IDWが顔領域FAである場合に、人間の左目があると推定される領域である。
そして、領域A12aの各画素の明度Y12aの合計をα12a倍した値と(α12aは定数)、領域A12bの各画素の明度Y12bの合計をα12b倍した値と(α12bは定数)、の合計値が所定の基準値θ12よりも大きいか否かが判定される。合計値がθ12よりも大きい場合には、画像領域IDWは、顔領域FAであると判定される。画像領域IDWが顔領域FAであると判定された場合、そのときの各カウンタns,nx,ny,ntの値が内部メモリ12に記憶される。
このようにフィルタを用いて、この顔領域判定処理が行われ、顔領域FAが特定される。
図16に戻りステップS58で、検出窓SWの一部が作業画像データWDの外側にはみ出していると判定された場合、又はステップS60で、顔領域判定処理が行われた場合、処理は、ステップS61に進み、顔領域特定部21は、回転角カウンタnt=Nt(例えば、5度刻みで検出窓SWを回転させる場合、72)であるか否かを判定する。すなわち、現在の検出窓SWのサイズS及び中心位置PにおいてNt(この例の場合、72)通りの回転角の設定が完了したか否かが判定される。回転角カウンタnt<Ntである場合には、処理は、ステップS59に戻り、顔領域特定部21は、回転角カウンタntに1を加算する。これにより、1が加算された回転角カウントntに対応する回転角となるように検出窓SWは回転する。
一方、ステップS61で、回転角カウンタnt=Nt(この例の場合、72)であると判定された場合、ステップS62において、顔領域特定部21は、回転角カウンタntを0にリセットし、ステップS63において、x方向カウンタnx=Nx(この例の場合、320/dx(整数部分))であるか否かを判定する。すなわち、現在の検出窓SWのサイズS及びy方向の位置における全てのx方向の位置について検出窓SWの設定が完了したか否かが判定される。x方向カウンタnx<320/dx(整数部分)であると判定された場合、処理は、ステップS54に戻り、顔領域特定部21は、x方向カウンタnxに1を加算する。これにより、x方向の単位移動間隔dxだけ右側に進んだ中心位置Pに検出窓SWが設定される。
一方、ステップS63で、x方向カウンタnx=320/dx(整数部分)であると判定された場合、ステップS64において、顔領域特定部21は、x方向カウンタnxを0にリセットし、ステップS65において、y方向カウンタny=Ny(この例の場合、240/dy(整数部分))であるか否かを判定する。すなわち、現在の検出窓SWのサイズSにおいて、全ての中心位置Pについて検出窓SWの設定が完了したか否かが判定される。ステップS65で、y方向カウンタny<240/dy(整数部分)であると判定された場合、処理は、ステップS53に戻り、顔領域特定部21は、y方向カウンタnyに1を加算する。これにより、y方向に1画素(単位移動間隔dy)だけ進んだ中心位置Pに検出窓SWが設定される。
一方、ステップS65で、y方向カウンタny=240/dy(整数部分)であると判定された場合、ステップS66において、顔領域特定部21は、y方向カウンタnyを0にリセットし、ステップS67において、サイズカウンタns=Ns(この例の場合、15)であるか否かを判定する。すなわち、全てのサイズSについて検出窓SWの設定が完了したか否かが判定される。ステップS67で、サイズカウンタns<15であると判定された場合、処理は、ステップS52に戻り、顔領域特定部21は、サイズカウンタnsに1を加算する。これにより、一回り小さいサイズSの検出窓SWが設定される。一方、ステップS67で、サイズカウンタns=15であると判定された場合、全てのパラメータ(サイズS、位置Pおよび回転角T)の組み合わせについて検出窓SWの設定が完了したとして顔領域特定処理は終了し、処理は、図14のステップS13に進む。
ステップS13において、画像変形処理部22は、ステップS12で特定された顔領域FAの中から1つの顔領域FAを選択する。なお実際には顔領域FAが特定されない場合もあるが、ここでは、顔領域FAが1個以上特定されているものとする。
ステップS14において、画像変形処理部22は、選択した顔領域FAの色情報を取得する。具体的には、画像変形処理部22は、選択した顔領域FAについて判定したときの検出窓SWのサイズS、位置P及び回転角Tを内部メモリ12から読み出して、その検出窓SWに対応する顔領域FAの画像データを対象画像TIから読み取る。そして画像変形処理部22は、顔領域FAに含まれる肌色画素の色をサンプリングする。
ステップS15において、画像変形処理部22は、小顔補正が設定されているか否かを判定する。この例の場合、ユーザは、操作部13を操作して、小顔補正を選択的に設定することができる。ステップS15で、小顔補正が設定されていると判定した場合、ステップS16に進み、画像変形処理部22は、顔領域FAの回転角を検出する。この例の場合、ステップS14で読み出された回転角Tが顔領域FAの回転角として検出される。
ステップS17において、画像変形処理部22は、顔領域FAの回転角が、対象角範囲内(図13)であるか否かを判定し、その範囲内であると判定した場合、ステップS18に進み、図3のフローチャートを参照して説明した小顔補正処理Z1を実行する。
ステップS15で、小顔補正が設定されていないと判定されたとき、ステップS17で、顔領域FAの回転角が対象角範囲内ではないと判定された場合、又はステップS18で小顔補正処理Z1が行われたとき、ステップS19において、美肌補正部23は、美肌補正処理を実行する。即ちステップS15で小顔補正が設定されていないと判定されたとき、及びステップS17で顔領域FAの回転角が対象角範囲内ではないと判定された場合、ステップS18での小顔補正処理Z1はスキップされる。
美肌補正処理は、具体的には、ステップS14でサンプリングされた顔領域FAに含まれる肌色画素を、各画素の色彩値(例えばRGB値やHSV値)に基づいて特定し、その色彩値を肌色として好ましいものに補正するための調整パラメータが算出される。調整パラメータは、例えばカラーバランスやホワイトバランスや明るさを調整するためのパラメータが該当する。予め肌色として好ましい色彩値は内部メモリ12に記憶されており、各肌色画素の色彩値が好ましい色彩値に近づくような調整パラメータが算出される。そしてこのようにして算出された調整パラメータに基づく各画素の色彩値の調整が実行させる。
次にステップS20において、画像変形処理部22は、全ての顔領域FAを選択したか否かを判定し、まだ残っている顔領域FAが存在すると判定した場合、ステップS13に戻り、次の顔領域FAを選択し、ステップS14以降の処理を同様に行う。ステップS20で、全ての顔領域FAを選択したと判定された場合、処理は、ステップS21に進む。
ステップS21において、全体補正部24は、対象画像TI全体に対して、ピント、露光、色かぶり等についての補正処理を施す。具体的には、ピントに関しては、高い空間周波数成分を強調する処理が実行される。すなわち、2次元のハイパスフィルタを用いて処理することにより、高い空間周波数成分が強調され、ピントぼけが解消される。また、露光に関しては、画素データのヒストグラムの重心が適正になるようにヒストグラム上において重心位置をシフトさせる補正が行われるとともに、分散が適切になるようにヒストグラム上において拡散又は集中させる処理が実行される。また、色かぶりについては、R,G,Bのヒストグラムのそれぞれの差分を検出し、差分が適正な範囲になるようにそれぞれの色の画素データに対してバランスを更正する処理が実行される。
次にステップS22において、出力制御部25は、上述したように顔領域FAに対して小顔補正処理Z1及び美肌補正処理が施され、そして全体補正処理が施された対象画像TIの画像データをプリンタエンジン15に出力する。プリンタエンジン15は、出力制御部25から供給された画像データに対して解像度変換処理、色変換処理、ハーフトーン処理、ラスタライズ処理を順次実行させ、プリンタ1に画質調整後の画像データに対応する画像の印刷を実行させる。
このように印刷処理が実行されると、画像変形処理Z2は終了する。
以上のように、処理の対象となる対象画像TIにおける顔の少なくとも一部の画像が含まれる顔領域FAに基づいて変形領域TAを設定し(図4)、変形領域TA内に複数の分割点Dを配置して、分割点同士を結ぶ直線を用いて変形領域TAを複数の小領域に分割し(図5)、少なくとも1つの分割点Dの位置を移動して小領域を変形することにより変形領域TA内の画像を変形させる小顔補正処理Z1を、例えば、顔領域FAから認識される顔画像の上方向(顔領域FAの上方向)が対象画像TIの真下を向いている場合(即ち逆さになっていると認識される場合)においては行わないようにしたので、小顔補正処理Z1により不自然な画像が生成されることを防止することができる。
図12に示したように、顔領域FAから認識された顔画像の上下方向(顔領域FAの上下方向)と実際の顔画像の上下方向とが反対になることがあり、その場合、上述した小顔補正処理Z1により、鼻から額にかけての部分が細くなるような不自然な画像が生成される。従って、このように方向が誤認された場合に不自然な画像が得られる顔領域FAの回転角が検出された場合には、小顔補正処理Z1自体を行わないようにすることで、不自然な画像が生成されることを防止することができる。
なお例えば実際には45度傾いている顔画像に対して、0度又は90度傾いた顔領域FAに基づいて小顔補正処理Z1が行われると、上下方向が真逆に認識された場合ほどでないにしても不自然が画像が生成される。そこでこの例では、図13に示すように、45度及び315度付近の回転角のときも小顔補正処理Z1は実行されない。図13の対象角範囲は、一例であり、他の角度の範囲を対象角範囲とすることができる。
なお図14に示した画像変形処理Z2では、検出窓SWを360度回転させて顔領域FAを特定し(図16)、検出窓SWの回転角に基づいて顔領域FAの回転角が対象角範囲内であるか否かを判定することによって(図14のステップS16,S17)、小顔補正処理Z1を行う顔領域FAを決定したが、対象角範囲内の回転角を有する顔領域FAだけが特定されるようにすることもできる。
図19は、対象角範囲内の回転角を有する顔領域FAだけが特定される場合の画像変形処理Z2の流れを示すフローチャートである。
即ちこの画像変形処理Z2では、ステップS101において、図14のステップS11における場合と同様に、作業画像データWDが生成される。
ステップS102において、小顔補正が設定されているか否かが判定され、設定されていると判定された場合、ステップS103において、顔領域FAの認識範囲が制限される。例えば、検出窓SWの回転角の範囲が、対象角範囲内に制限される。具体的には、回転角カウンタntに設定される値が、対象角範囲内の回転角に対応する値だけとされる。
ステップS104において、基本的には図16のフローチャートを参照して説明した顔領域特定処理が実行されるが、回転角カウンタntには、ステップS103で選択された、対象角範囲内の回転角に対応する値が設定されるように制御される。
ステップS105〜S107においては、図14のステップS13〜S15における場合と同様の処理が行われ、ステップS108〜S112においては、図14のステップS17〜S22における場合と同様の処理が行われるので、その説明は省略するが、この例では、ステップS104で対象角範囲内の回転角の顔領域FAだけが特定され、特定された顔領域FAの全てに小顔補正処理Z1が施されるので、図14のステップS16に相当する小顔補正処理Z1を施す顔領域FAを決定する処理は省略されている。
以上のようにして、対象角範囲内の回転角を有する顔領域FAだけが特定されるようにした画像変形処理Z2は行われる。なお図14の例の場合、回転角に関係なく顔領域FAが設定された顔の画像に対して美肌補正処理が行われたが、この例では、対象角範囲内の回転角を有する顔領域FAだけが特定されるので、その回転角の顔領域FAに対してのみ美肌補正処理が施される。
また、図14に示した画像変形処理Z2では、検出窓SW等のテンプレートを用いて顔領域FAを特定したが(図16)、検出窓SW等のテンプレートを使用せずに、例えば、目、鼻、口等の特徴部分を抽出し、これらの位置関係から顔領域FAを特定することもできる。そのようにして顔領域FAを特定する場合、図20に示すように、特定された顔領域FAを、顔領域FAの上辺と、対象画像TIの上辺との角度θを、顔領域FAの回転角とすることもできる。この角度θは、式(6)に従って算出される。
図20中、M1,M2,M3,M4は、顔領域FAの4隅の点を表し、(x1,y1),(x2,y2),(x3,y3),(x4,y4)は、M1,M2,M3,M4の座標を表す。また式(6)中、係数aは、顔領域FAの左上隅の点M1を通って対象画像TIの上辺と平行な軸に顔領域FAの上辺を投影したときの長さであり、係数bは、顔領域FAの点M1を通って対象画像TIの上辺と平行な軸と右上隅の点M2の間の長さである。
また、デジタルカメラには、傾きセンサーを内蔵し、撮像時の傾きを示す情報を画像データとともに記憶するものがある。そこでそのカメラの傾きを利用して顔領域FAの回転角を検出することができる。
図21は、カメラの傾きと撮像画像の関係を示す図である。図21の最上段のようにカメラが回転していない状態で撮像された場合、顔領域FAの回転角は0度となる。また中段のようにカメラが時計方向に90度回転した状態で撮像された場合、顔領域FAの回転角は90度となる。また最下段のようにカメラが反時計方向に90度回転した状態で撮像された場合、顔領域FAの回転角は270度となる。
なお対象角範囲は、カメラが回転していない状態で撮像された場合、0度を中心とする30度の範囲とし、カメラが時計方向に90度回転した状態で撮像された場合、90度を中心とする30度の範囲とし、カメラが反時計方向に90度回転した状態で撮像された場合、270度を中心とする30度の範囲とすることができる。
このように撮像時の情報を利用すれば、簡単に顔領域FAの回転角を検出することができる。
また以上においては、小顔補正が設定されると、自動的に小顔補正処理Z1が実行されたが、例えば、小顔補正処理Z1が実行される前に(例えば、ステップS17の前段に)、顔領域FAの上下方向をユーザに確認してもらうようにすることもできる。例えば図22に示すように、対象画像TIに、顔領域FAや変形領域TAとともに、ステップS16で検出された顔領域FAの回転角に基づく「顔領域FAの上方向」を示す矢印Wを表示させ、ユーザに顔領域FAの上下方向を確認させることができる。ユーザが、顔領域FAの上下方向が実際とは異なると判断した場合、操作部13に対する所定の操作により、小顔補正処理Z1の実行を停止させることができるようにすることができる。また例えば矢印Wを、例えばタッチペン等で移動させて、図23に示すように、実際の顔画像の上下方向に合わせることができるようにし、その方向を「顔領域FAの上方向」として小顔補正処理Z1が実行されるようにすることもできる。
また以上においては、小顔補正処理Z1を例として説明したが、顔領域FAから認識される顔画像の上下方向と実際の顔画像の上下方向と異なる場合に不都合が生じる処理であれば、他の処理についても適用することができる。例えば、いわゆるファン機能として、顔の画像に対して、目の画像部分にサングラスの画像を重畳させて表示させたり、頭の画像部分に帽子の画像を重畳させて表示させたりするものがある。このようなファン機能において、画像処理により認識された顔画像の上下方向と実際の顔画像の上下方向とが異なると、例えば目の画像でない部分にサングラスの画像が重畳されるなどの不具合が生じる。従って、このようなファン機能に適用しても、本来目的としていない画像が生成されることを防止することができる。
また以上においては、顔領域から認識される顔画像の画像面内の回転角(即ち顔画像の傾き状態)に基づいて、小顔補正処理Z1の実行を制限するようにしたが、他の顔の状態に応じて小顔補正処理Z1の実行を制限することもできる。例えば顔画像の奥行き方向の角度(即ち左向き、右向き、上向き、又は下向きの状態)に応じて小顔補正処理Z1の実行を制限することもできる。
また以上においては、インクジェット方式のプリンタ1を例として説明したが、インクジェット方式以外のプリンタにも適用するとともに、画像をユーザに提示するものであれば、デジタルカメラやフォトビューアーにも適用することができる。
また以上においては、図3、図14,図16,及び図19に示す処理を、プリンタ1において実行するようにしたが、例えば、プリンタ1に接続されているホストコンピュータにおいて実行することも可能である。
また上記の処理機能を、コンピュータによって実現することができる。その場合、プリンタ1が有すべき上述した機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ハードディスク装置(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などの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送される毎に、逐次、受け取ったプログラムに従った処理を実行することもできる。
なお上記実施例において、ハードウェアによって実現されていた構成の一部をソフトウェアに置き換えるようにしてもよく、逆に、ソフトウェアによって実現されていた構成の一部をハードウェアに置き換えるようにしてもよい。
1 プリンタ, 11 CPU, 12 内部メモリ, 13 操作部, 14 表示部, 15 プリンタエンジン, 16 カードI/F, 17 カードスロット, 18 メモリカード, 21 顔領域特定部, 22 画像変形処理部, 23 美肌補正部, 24 全体補正部, 25 出力制御部, 31 変形領域設定部, 32 変形領域分割部, 33 分割領域変形部