以下、本発明にかかる一実施例の画像処理を図面を参照して詳細に説明する。なお、以下で説明する画像処理は、主として、プリンタエンジンへ出力すべき画像情報を生成する、コンピュータ内で稼働するプリンタドライバ、および、スキャナなどの光学読取装置を駆動する、コンピュータ内で稼働するスキャナドライバに組み込むことが望ましい。あるいは、複写機、ファクシミリ、プリンタ、スキャナ、ディジタルカメラ、ディジタルビデオカメラなどのハードウェアに内蔵する、または、ソフトウェアとして供給してもよい。
[装置の構成]
図1は実施例1の画像処理を実行するコンピュータ(画像処理装置)の構成例を示すブロック図である。
コンピュータ100は、CPU101、ROM102、RAM103、モニタ113(タッチパネルを備えてもよい)を接続するビデオカード104、ハードディスクドライブやメモリカードなどの記憶装置105、マウス、スタイラスおよびタブレットなどのポインティングデバイス106、キーボード107などを接続するUSBやIEEE1394などのシリアルバス用のインタフェイス108、ネットワーク114と接続するネットワークインタフェイスカード(NIC)107を備え、これらの構成はシステムバス109で相互に接続されている。また、インタフェイス108には、プリンタ110、スキャナ111、ディジタルカメラ112などを接続可能である。
CPU101は、ROM103または記憶装置105に格納されたプログラム(以下で説明する画像処理のプログラムを含む)をワークメモリであるRAM103にロードして当該プログラムを実行し、当該プログラムに従いシステムバス109を介して上記の各構成を制御することで、当該プログラムの機能を実現する。
なお、図1は、実施例1で説明する画像処理を実施するハードウェアの一般的な構成を示し、その一部の構成を欠いたり、他のデバイスが追加されても、本発明の範疇に含まれる。
[処理の概要]
図2は実施例1の赤目の自動補正処理の概要を示す機能ブロック図で、CPU101によって実行される処理である。なお、入力画像は、例えば、ディジタルカメラ112やフィルムスキャナ111から入力される一画素あたりRGB各8ビット、合計24ビットのディジタル画像データである。
図3はディジタルカメラ112などの撮像装置により撮像された赤目画像を概念的に示す図で、目の瞳孔領域302、虹彩領域301、撮影時に使用したフラッシュに起因するハイライト領域304を示す。また、符号303は白目部分を示している。通常、赤目現象により瞳孔領域302が赤くなる。
図2に示す赤領域抽出部202は、入力端子201に入力される画像データから赤色の領域を抽出する。赤色の領域の抽出方法は様々な方法が考えられるが、適応的二値化による赤色領域の抽出法を後述する。なお、赤領域抽出部202は目であるか否かに関わらず赤色領域を抽出するため、抽出される赤色の領域は、赤目、赤色の信号機、衣服の赤色の模様、赤色の照明など様々なものを含む。
赤丸領域抽出部203は、入力画像データと抽出された赤色領域の情報を入力して、赤色の領域の中からその形状が比較的円に近い領域(以下「赤丸領域」と呼ぶ)を特定する。領域形状の判定方法は様々な方法が考えられるが、境界線追跡による赤丸領域の抽出法を後述する。なお、赤丸領域抽出部203は、抽出した赤丸領域の位置情報を候補領域リストに格納する。
特徴量判定部204は、入力画像データと候補領域リストを入力して、候補領域リストに記録された赤丸領域について、目と特定できるような様々な特徴量の判定処理を行う。目と特定できるような特徴量には、赤丸領域の彩度、赤丸周辺領域の明度、彩度、色相、エッジの分布などがある。これらの特徴量を、予め定められた閾値と比較し、すべての条件を満たす赤丸領域を赤目領域であると特定する。なお、特徴量判定部204は、特定した赤目領域の位置情報を候補領域リストに格納する。
補正部205は、入力画像データと赤目領域の位置情報が格納された候補領域リストを入力して、画像データの赤目領域に補正処理を施し、補正処理を施した画像データを出力端子206に出力する。補正処理後の画像データは、モニタ113に表示されたり、RAM103あるいは記憶装置105に格納される、あるいは、インタフェイス108に接続されたプリンタ110によってプリントされたり、NIC107を介してネットワーク114(イントラネット、インターネットを含む)に接続された他のコンピュータやサーバに送信される。
[赤領域抽出部202]
赤領域抽出部202は、入力画像データに適応的二値化処理を適用することで、画像データから赤色領域を抽出する。つまり、入力画像データの各画素に対して赤色度合いを示す赤色評価量を算出し、その評価量と閾値を比較して、評価値>閾値の場合に注目画素を赤色と判定する。この閾値は、注目画素の周辺領域において適応的に決定される閾値である。なお、ここで言う「二値化」とは赤色と判定した画素に‘1’を、そうではない画素に‘0’を割り当てることを言う。
図4は適応的二値化処理を説明する図である。
図4において、入力画像データ401上の注目画素402は二値化処理の対象画素である。赤領域抽出部202は、注目画素402の赤色度合いを示す評価量Erを式(3)で定義する。
Er = (R - G)/R …(3)
式(3)は、注目画素402の赤色度合いを、一般的なHSI系の彩度ではなく、B成分を除くR、Gの二成分から求めることを意味している。赤色評価量Erを彩度ではなく、式(3)で定義することの利点を以下に説明する。
例えば、色素が濃い(多い)人の場合、瞳孔領域302の水晶体の透過率が低いために、鮮やかな赤目になりにくいという傾向がある。前述したように、日本人の赤目領域の画素値の推測値は(R, G, B)=(109, 58, 65)であり、日本人の肌色は色相で言えば赤(0度)からイエロー(60度)の間に多く分布することが実験の結果明らかになっている。このような領域は、RGB各成分の大小関係がR>G>Bになり、目の周辺の肌色領域の画素値の推測値は(R, G, B)=(226, 183, 128)である。このような場合、赤目画素の彩度は40、目の周辺の肌領域の画素の彩度は43とほぼ同様の彩度値になる。つまり、赤目領域の画素の彩度値は、目の周辺の肌色領域の画素の彩度値に対して特別突出するわけではない。従って、適応的二値化処理の閾値として彩度を用いれば赤目領域の検出が困難になる。
一方、赤色評価量Erを式(3)で定義すれば、赤目領域の画素の赤色評価量Erは47、目の周辺の肌色領域の赤色評価量Erは19になり、目の周辺の肌色領域に比べて赤目領域の画素の赤色評価量Erは二倍以上の値をもつことになる。
以上から、色素が濃い(多い)人の赤目を検出する場合、彩度ではなく、式(3)に示すようなB成分を含まない、R、G成分のみの評価量を定義することで、赤目を構成する画素を精度よく抽出することが可能になる。なお、式(3)において、R成分に対する(R-G)の割合を評価量Erとしたが、これに限定されるわけではなく、例えば(R-G)のみやR/Gを評価量Erとしてもよい。
図4に戻り、注目画素402を二値化するために、注目画素402と同一ライン上の、注目画素402に対して左方向(主走査方向の前方)に画素数がThWindowSizeになるようなウィンドウ領域403を設定し、当該ウィンドウ内の画素の赤色評価量Erの平均値Er(ave)を求める。ここで、画素数ThWindowSizeは画像の短辺と比較して1〜2%程度の幅とすることが望ましい。なお、評価量Erは以下の条件を満たす場合にのみ算出するため、評価量Erが負になることはない。
R > 0 かつ R > G …(4)
平均値Er(ave)を用いて注目画素402を二値化するが、この処理を行うには、注目画素402は以下の条件を満たす必要がある。
R > Th_Rmin かつ R > G かつ R > B …(5)
ここで、Th_RminはRの下限値を表す閾値
上記の条件を満たす場合、式(6)による二値化処理を実行する。
Er > Er(ave) + Margin_RGB ならば‘1’
Er ≦ Er(ave) + Margin_RGB ならば‘0’ …(6)
ここで、Margin_RGRはパラメータ
式(6)は、注目画素402の赤色度合いErがウィンドウ領域403の平均値Er(ave)にMargin_RGRを加えた値よりも大きい場合、注目画素402の二値化後の値を‘1’にする。すなわち、その注目画素402を赤色領域として抽出したことを意味する。なお、赤色領域が連続する場合、平均値Er(ave)の値が大きくなり過ぎるため、平均値Er(ave)に上限を設けてもよい。この二値化結果は、RAM103の中の入力画像用のバッファとは別に割り当てられた領域に保存される。
以上の処理を、入力画像データのライン単位に、注目画素402を左から右に移動して、すべての画素に施す。
なお、実施例1においては、二値化するための閾値(平均値Er(ave))を、注目画素402と同一ライン上の左方向に設定したウィンドウ内の画素の評価値Erから算出したが、これに限定されるものではなく、例えば、注目画素402を含むラインの上方(副走査方向行の前方)数ラインの注目画素402の左方向(主走査方向行の前方)数画素を含むような領域や、注目画素402を中心とする所定の矩形領域をウィンドウに設定してもよい。
図5は適応的二値化の結果例を示す図である。図5(a)は入力画像データの赤目周辺の画像を示し、図5(b)は適応的二値化の結果得られる二値画像で、赤目の瞳孔部分の画素のみが抽出されている様子を示す。
また、主走査方向に設定したウィンドウ内部の評価量の平均値Er(ave)を求める際に、以下のような高速化手法を用いてもよい。
図6は平均値Er(ave)を求める際の高速化手法を説明する図である。
図6(a)において、注目画素402の左方向に設定したウィンドウ403内の平均値Er(ave)を求める際、ウィンドウ403内の評価量Erの総和をメモリ(例えばRAM103)に格納する。平均値Er(ave)は、総和をウィンドウ403を構成する画素数nで除算することにより、簡単に求めることができる。次に、注目画素402は一画素右へ移動するが、その際はウィンドウ403も一画素分右へ移動する。この時、図6(b)に示すウィンドウ403内の評価量Erの総和は、図6(a)において求めた総和から画素501の評価量Erを減算し、画素502(直前の注目画素402)の評価量Erを加えることで処理の高速化が図れる。つまり、注目画素402およびウィンドウ403の移動後、改めてウィンドウ403内すべての画素の評価量Erを算出する必要はない。
[赤丸領域抽出部203]
赤丸領域抽出部203は、二値画像処理方法の一つである境界線追跡法を用いて、赤丸領域を抽出する。
図7は境界線追跡法を説明する図である。
境界線追跡処理は、適応的二値化処理の結果得られる二値画像に対して、画像を上端から主副走査方向にスキャンして、注目画素(xa, ya)の値が‘1’で、注目画素の左(xa-1, ya)、左斜め上(xa-1, ya-1)、上方(xa, ya-1)、右斜め上(xa+1, ya-1)の四画素の値が‘0’である注目画素を始点にする(図7に符号701で示す画素)。なお、図7は、二値画像の左上を原点とする座標系を設定している。
そして、始点画素701から反時計回りに再び始点701に戻るまで、値が‘1’の画素を追跡する。追跡の途中、画像領域を逸脱したり、始点画素701よりもY座標が小さくなる場合は、追跡を打ち切り、次の始点を探索する。追跡の途中でY座標が始点画素701よりも小さくなった場合に追跡を打ち切るのは、図8に示すような環状領域の内側を誤って追跡することを防ぐためである。環状領域の内側を追跡した場合には、図8において、画素802に到達すると始点画素801よりもY座標が小さくなるので、ここで追跡処理を打ち切る。
上記の追跡過程で、追跡対象領域の周辺の長さ、方向ヒストグラム、X座標とY座標の最大値、最小値を得ることができる。ここで、周辺の長は、追跡した画素の数で、例えば図7の例では始点画素701を含めて九画素になる。
方向ヒストグラムは、追跡過程で、ある画素から次の画素へ移動する向きを、図9に示す八方向で累積したヒストグラムである。図7の例では、始点画素701から反時計回りに追跡すると、移動の向きは667812334になり、その方向ヒストグラムは図10に示すようになる。
X、Y座標の最大、最小値は、図11に示すように、値が‘1’の画素が存在する領域、すなわち赤色領域の外接矩形領域を示す。
赤丸領域抽出部203は、各赤色領域を境界線追跡して、上記の値を取得し、赤丸領域か否かを判定する。
図12は赤丸領域か否かの判定処理の一例を示すフローチャートである。
まず、赤色領域の縦横比が予め設定された閾値Th_BF_VHRatio以上か否かを判定する(S1201)。縦横比ARは式(7)で算出する。
AR = (ymax - ymin)/(xmax - xmin) …(7)
ただし、AR > 1ならばAR = 1/AR
すなわち、縦横比ARは0.0〜1.0の範囲で表され、AR=1.0のときは縦と横の長さが同じである。ステップS1201は、縦横比ARと閾値Th_BF_VHRatioを比較して、AR<Th_BF_VHRatioの場合は、その赤色領域は赤丸領域ではないと判定して、次の赤色領域の探索に遷移する。
AR≧Th_BF_VHRatioの場合は、赤色領域のサイズが適正か否かを判定する(S1202)。サイズの判定は、(1)実際の画素数の上限、下限、(2)画像の短辺または長辺に対する比の二つの観点から行う。
まず、(1)については、赤色領域の横幅X=xmax-xminと縦幅Y=ymax-yminの小さい方と、予め設定された閾値を比較して、縦幅または横幅が上限Th_BF_SizeMaxと下限Th_BF_SizeMinの間にあるか否かを判定する。もし、上限と下限の間に縦幅Yまたは横幅Xがなければ、その赤色領域は赤丸領域ではないと判定して、次の赤色領域の探索に遷移する。
また、(2)については、式(8)により求める。
Th_BF_RatioMin < min(X, Y)/min(W, H) < Th_BF_RatioMax …(8)
ここで、X = xmax - xmin
Y = ymax - ymin
Wは入力画像の幅
Hは入力画像の高さ
もし、注目赤色領域が式(8)を満さない場合は、赤丸領域ではないと判定して、次の赤色領域の探索に遷移する。なお、式(8)には、短辺同士を比較する例を示したが、長辺同士を比較してもよい。
ステップS1202とサイズが適正と判定した場合は、周辺の長さを理想的な円周と比較して、抽出した赤領域が円形に近いか否かの判定を行う。赤色領域の幅X、高さYから、理想的な円周Ciを式(9)で近似的に求める。
Ci = (X + Y)×2×2π/8 …(9)
式(9)は、抽出した赤色領域が正方形と仮定して、正方形に内接する円の円周を算出するものである。式(9)において、(X+Y)×2は赤色領域を包含する正方形の四辺の長を、2π/8が正方形の四辺の長さと当該正方形に内接する円の円周の比を示す。上記の理想的な円周ciと周辺の長さを式(10)によって比較し、式(10)を満たさない場合は赤丸領域とは判定せずに、次の赤色領域の探索に遷移する。
min(Ci, Cx)/max(Ci, Cx) > Th_BF_CircleRatio …(10)
ここで、Cxは周辺の長さ
周辺の長さが式(10)を満たす場合、方向ヒストグラムの偏りに関する判定を行う(S1204)。既に説明したように、境界線追跡の過程で、図10に示すような方向のヒストグラムを得ることができる。もし、境界線追跡の対象領域が円に近い場合、追跡処理の結果から得られた八方向の方向ヒストグラムは均等な分布になるが、対象領域が細長い場合などは方向ヒストグラムに偏りが生じる。例えば、右上から右下に細長い形状の対象領域であれば、図9に示す方向のうち、方向2および6に度数が集中し、方向4および8の度数が少なくなる。従って、式(11)に示す条件すべてを満たす場合は注目赤色領域を赤丸領域と判定し、何れか一つでも条件を満たさない場合は、注目赤色領域は赤丸領域ではないと判定して、次の赤色領域の探索に遷移する。
sum(f1, f2, f5, f6) < Σf×Th_BF_DirectRatio
sum(f2, f3, f6, f7) < Σf×Th_BF_DirectRatio
sum(f3, f4, f7, f8) < Σf×Th_BF_DirectRatio …(11)
sum(f4, f5, f8, f1) < Σf×Th_BF_DirectRatio
ここで、fnは方向nの度数
sum(fa, fb, fc, fd)は方向a, b, c, dの度数の和
Σfは度数の総和
式(11)により、ある方向について求めた度数の和が所定割合よりも多い場合、すなわち、ある方向に集中があるならば、注目赤色領域は赤丸領域ではないと判定する。また、式(11)による判定は、度数の総和Σfが小さい場合は判定精度が低下する危惧があり、度数の総和Σfが所定値以下の場合、ステップS1204の処理をスキップしてステップS1205に進むようにしてもよい。
以上のステップS1201〜S1204のすべての判定(ステップS1204をスキップした場合は残るステップS1201〜S1203の判定)を満たす赤色領域について赤丸領域(赤目領域候補)と判定して、RAM103に割り当てた候補領域リストにその座標位置を格納し(S1205)、画像データの右下近傍に達するまでさらに境界線追跡および図12に示す判定を繰り返す。
[特徴量判定部204]
特徴量判定部204は、抽出された赤丸領域(赤目候補領域)について、人の赤目と特定できるような様々な特徴量を算出し、それを予め定められた閾値と比較して、赤目か否かを判定する。
特徴量判定部204は、前段までの処理によって候補領域リストに記録された赤目候補領域に対して、以下の五つの特徴量群の判定を図16に示す順番で実行する。
特徴量群0:赤丸領域と周辺領域の評価量の平均値Er(ave)の比較(S10)
特徴量群1:赤丸領域内の色相と評価量Er、色成分の変化に関する判定(S11)
特徴量群2:周辺領域の輝度に関する判定(S12)
特徴量群3:周辺領域の彩度、色相に関する判定(S13)
特徴量群4:周辺領域のエッジの強度に関する判定(S14)
理想的な赤目領域の赤色成分は、その周辺領域に比べて、瞳孔部分にのみ突出して存在する特徴がある。この特徴は、その他の様々な特徴量と比較しても、最も顕著に表れることが実験により判明している。従って、特徴量群0の判定処理(S10)を最初に行い、赤目候補領域を絞ることが効率的である。
特徴量群1の判定(S11)は、赤丸候補領域内のみの画素を参照して特徴量判定を行うため、他の特徴量群の判定に比較して演算量は少ない。
特徴量群2と特徴量群3の判定(S12、S13)は、設定した周辺領域に存在する画素に対して、RGB成分を輝度、色差成分に変換したり、RGB成分を明度、彩度、色相成分に変換する処理を必要とするため、特徴量群1の判定に比べて演算量は多くなる。
特徴量群4の判定(S14)は、エッジの強度を求めるためにSobelなどの公知のエッジ検出フィルタを用いる。そのため、他の特徴量群の判定と比較して最も演算量が多い。
従って、特徴量判定部204は、演算量の少ない判定、あるいは、赤目領域の特徴を掴み易い判定から順に行い、それによって赤目領域ではないと判定される赤目候補領域について、図16に示すように、以降の判定をスキップすることで、特徴量判定部204の処理量を抑制する。
●周辺領域の定義
図13は赤目候補領域の特徴量を算出する際に使用する周辺領域の定義を説明する図である。
図13において、中央のブロック1301が前段の処理で抽出された赤目候補領域(赤丸領域)の外接矩形で、周辺領域はブロック1301を中心として、その周辺にブロック1301の縦横のサイズをそれぞれ二倍、三倍、五倍に拡大した領域である。各倍率の周辺領域を図13(a)〜図13(c)に示す。また、以降で「周辺領域全体」と呼ぶ場合は、周辺領域からブロック1301を除いた部分を意味する。また、「周辺領域のブロック」とは、図13に破線で示すように、ブロック1301の辺を延長して周辺領域を八つに区切った各ブロックを意味する。特徴量群のうち、特徴量群1以外は、この周辺領域に対して判定を行う。このような周辺領域の設定は、最大でも赤目候補領域の外接矩形の五倍の領域しか参照しないため、高速な判定処理が可能である。
図14は赤目候補領域が画像の端部近傍に存在する場合の周辺領域を説明する図である。
図14(a)は、赤目候補領域の外接矩形(ブロック1301)が画像の右端近傍に、ややマージンを残して存在する場合を示す。この場合、周辺領域の各ブロック内に一画素でも画素が存在するならば、その画素を用いて特徴量判定を行う。
一方、図14(b)は、ブロック1301がマージンなしで画像右端に接する場合を示している。この場合、周辺ブロックのうち、右上(TR)、右(R)、右下(BR)の3ブロックには画素が存在しないため、当該周辺ブロックの特徴量を算出することができない。このような場合、実施例1では、ブロック1301を赤目領域と判定しないことにして、候補領域リストから除外する。
●特徴量群0の判定(S10)
特徴量群0の判定は、ブロック1301に対して例えば図13(b)に示す三倍の周辺領域を設定し、ブロック1301を含む各ブロックについて、式(3)を用いて各画素の評価量Erを算出し、それらの平均値Er(ave)を算出する。算出した平均値Er(ave)は、RAM103に割り当てた配列AEvR[8]に格納する。ここでAEvRは0〜8の九つの要素を保持する配列で、要素0は図13に示す左上(TL)ブロック、要素1は上(T)ブロック、要素2は右上(TR)ブロック、…というように、左上ブロックから右下ブロックの順に割り当てる。
次に、要素i=0〜8(ただし、ブロック1301のi=4は除く)について、以下の式を満たすか否かを判定する。
AEvR[i] < AEvR[4]×Th_FJ0_EvR …(12)
式(12)は、ブロック1301の評価量の平均値AEvR[4]に閾値Th_FJ0_EvRを乗じた値が、他の八個の周辺ブロックの評価量の平均値AEvR[i]よりも大きい場合、赤目領域と判定することを意味する。式(12)を満さない場合、注目赤目候補領域は赤目領域ではないとして、以降の特徴量群の判定を行わず、次の赤目候補領域の判定に移る。
ところで、まず式(12)によって評価量Erを比較する理由は、以降で説明する特徴量の中で、最も顕著に赤目領域の特徴を掴むことができるからである。様々な実験の結果、式(12)による判定が、赤目領域以外の領域を候補領域リストから除外するのに最も効果的であることが判明している。従って、できるだけ特徴を掴みやすい特徴量から順番に判定することで、特徴量判定部204の演算量を最小限に抑えることができる。
また、各ブロックの平均値Er(ave)を算出する際、ブロック1301については、図15(a)に示すような菱形の算出領域1501の画素についてのみ評価値Erを算出することが望ましい。赤目領域の形状は一般に円もしくは楕円であるから、ブロック1301の四隅には、赤色度合いが小さい画素が存在する。このため、ブロック1301の評価量の平均値Er(ave)を低下させないためにも、ブロック1301の四隅を除く画素を対象として評価量Erを算出すべきである。なお、評価値Erの算出領域は図15(a)に示す菱形以外に、ブロック1306に内接する円(図15(b))や楕円(図15(c))内としても、同等もしくはより良好な算出結果を得ることができる。
●特徴量群1の判定(S11)
特徴量群1の判定は、赤目候補領域(図13に示すブロック1301)内のみの画像データを参照して、赤目領域か否かを判定する処理である。特徴量群1の判定には、例えば以下のような判定処理が含まれる。
まず、赤目候補領域において、色相が±30度以内の画素の評価量の平均値Er(ave)が閾値Th_FJ1_EMin以上で、かつ、閾値Th_FJ1_EMax以下かを判定する。この判定を満さない場合は候補領域リストから除外する。なお、色相については、公知の手法により求めることが可能である。
次に、赤目候補領域において、色相が±30度以内の画素の評価量Erの最大値、最小値を求め、比率R=最小値/最大値を算出する。赤目候補領域では、評価量Erは大きく変化するため、比率Rはある程度小さい値になる。従って、式(13)に示す判定を行い、式(13)を満さない注目赤目候補領域を候補領域リストから除外する。
R < Th_FJ1_EMaxMinRatio …(13)
次に、赤目候補領域において、R成分の標準偏差を測定する。赤目領域には鮮やかな赤領域と、瞳孔境界付近の暗い領域が含まれるため、R成分のダイナミックレンジは非常に大きな値になる。従って、赤目領域のR成分の偏差を測定すれば、その値はある程度大きい値になる。従って、赤目候補領域において、既知の方法によりR成分の標準偏差δrを測定し、閾値Th_FJ1_RDivより大きいか否か判定する。
δr > Th_FJ1_RDiv …(14)
式(14)を満たさない赤目候補領域は候補領域リストから除外する。なお、上ではR成分の標準偏差について言及したが、当然、R成分の分散を用いたとしても、同様の判定を行うことができる。
また、R成分の変化の度合いを判定する別の方法として、赤目候補領域において、近隣画素間のR成分の差分和の平均値SDr(ave)を算出して閾値Th_FJ1_RDiffより大きいか否かを判定することも考えられる(式15)。
SDr(ave) > Th_FJ1_RDiff …(15)
近隣画素の差分和の平均値を算出する方法は様々な方法が考えられる。例えば、注目画素と、隣接する八つの画素との差分和の平均値を算出してもよいし、単純に左隣の画素との差分を求めてもよい。また、上記の判定は、R成分だけでなく、他のG、B成分あるいは輝度や評価量Erに対しても同様に実施することができる。
●特徴量群2の判定(S12)
特徴量群2の判定は、特徴量群1の判定により候補領域リストから除外されずに残った赤目候補領域に対して周辺領域を設定し、周辺領域内の輝度成分に関する判定処理を行う。特徴量群2の判定には、例えば以下の判定処理が含まれる。
まず、赤目候補領域に対して周辺領域(例えば図13(c)に示す五倍領域)を設定する。次に、ブロック1301を除く周辺領域の8ブロックの平均輝度値Y(ave)を算出し、平均輝度値Y(ave)が閾値Th_FJ2_YMin以上、閾値Th_FJ2_YMax以下の範囲か否かを判定する。平均輝度値Y(ave)がこの範囲に入らない場合、つまりブロック1301の周辺が極端に明るい、あるいは、暗い場合は、注目赤目候補領域を候補領域リストから除外する。
上記の輝度に関する判定は、周辺領域の8ブロック全体で行ってもよいし、周辺領域のブロックごとに平均輝度値Y(ave)を求めて、ブロックごとに予め設定した閾値と比較してもよい。
次に、赤目候補領域に対して二倍の周辺領域(図13(a))を設定し、ブロック1301を除く周辺領域の8ブロックそれぞれの平均輝度値Y(ave)を算出し、さらに、八つの平均輝度値の最大値Ymaxと最小値Yminを得る。赤目候補領域に対して二倍の周辺領域を設定した場合、周辺領域の明るさが大きく変化している可能性があるため、以下のような判定を行う。
(Ymax - Ymin) > Th_FJ2_MaxMinDiff2 …(16)
式(16)を満たさない場合、注目赤目候補領域を候補領域リストから除外する。
また一方で、赤目候補領域に対して五倍の周辺領域(図13(c))を設定し、上述したように、周辺領域の8ブロックそれぞれの平均輝度値Y(ave)を算出し、さらに、八つの平均輝度値の最大値Ymaxと最小値Yinを得る。赤目候補領域に対して比較的広い五倍の周辺領域を設定した場合、周辺領域の多くは肌色領域であり、それら領域で輝度値が大きく変化するとは考えられない。従って、二倍の周辺領域を設定した場合と異なり、以下の判定を行う。
(Ymax - Ymin) < Th_FJ2_MaxMinDiff5 …(17)
式(17)を満たさない場合、注目赤目候補領域を候補領域リストから除外する。
●特徴量群3の判定(S13)
特徴量群3の判定は、特徴量群1および特徴量群2の判定により候補領域リストから除外されずに残った赤目候補領域に対して周辺領域を設定し、該周辺領域内の彩度および色相に関する判定を行う。特徴量群3の判定には、例えば以下の判定処理が含まれる。
まず、赤目候補領域に対して周辺領域を設定し(例えば、図13(c)に示す五倍領域)、ブロック1301を除く周辺領域の8ブロックにおいて、色相が±Th_FJ3_HRangeの画素数の割合Rhを算出する。赤目領域の周辺領域は肌色領域であるから、大部分の画素の色相は上記の範囲に含まれる筈である。従って、算出した割合Rhが閾値Th_FJ3_HRatio以上であれば赤目候補領域とするが、当該閾値未満の場合は注目赤目候補領域を候補領域リストから除外する。なお、割合Rhは式(18)で計算する。
Rh = Nh/ΣN …(18)
ここで、Nhは色相が±Th_FJ3_HRangeの画素数
ΣNは8ブロックの画素数
次に、赤目候補領域に対して周辺領域を設定し(例えば、図13(c)に示すの五倍領域)、周辺領域の8ブロック全体の平均彩度S(ave)を算出する。平均彩度S(ave)が閾値Th_FJ3_SMin以上、閾値Th_FJ3_SMax以下の範囲にあるか否かを判定する。当該範囲を逸脱する場合、注目赤目候補領域を候補領域リストから除外する。
また、上記の彩度の判定は、ブロック単位に行うことも考えられる。つまり、周辺領域のブロックごとに平均彩度S(ave)を算出し、予め設定された閾値と比較すればよい。
さらに、赤目領域の周辺には所謂白目領域が存在するため、赤目候補領域に対して設定した周辺領域(例えば、図13(b)に示すの三倍領域)において、彩度Sと明度Lの比S/Lが閾値Th_FJ3_WhitePix以下になる、すなわち彩度Sが小さく、明度Lが高い画素が存在するならば赤目候補領域と判定する。もし、上記の判定が否の場合は、注目赤目候補領域を候補領域リストから除外する。
●特徴量群4の判定(S14)
特徴量群4の判定は、特徴量群1から特徴量群3の判定により候補領域リストから除外されずに残った赤目候補領域に対して周辺領域を設定し、周辺領域内のエッジに関する判定処理を行う。人の目近傍には非常に強いエッジが存在するため、有効な特徴量になり得る。また、以下ではエッジの検出に公知のSobelフィルタを用いる例を説明するが、これに限定されるものではなく、他のエッジ検出フィルタを用いたとしても、同様の判定処理を行うことが可能である。なお、Sobelフィルタについては公知であるため、ここでの詳細な説明は省略する。特徴量群4の判定には、例えば以下のような判定処理が含まれる。
まず、赤目候補領域に対して周辺領域(例えば、図13(a)に示す二倍領域)を設定し、周辺領域内の各画素に対してSobelフィルタを施す。その結果、画素ごとに得られるSobel出力値の平均値So(ave)を算出する。人の目近傍には強いエッジが存在する場合が多いため、平均値So(ave)と閾値Th_FJ4_SobelPowを比較して、So(ave)≦Th_FJ4_SobelPowの場合は注目赤目候補領域を候補領域リストから除外する。
また、赤目候補領域に対して周辺領域(例えば、図13(b)に示す三倍領域)を設定し、周辺領域内の各画素に対してSobelフィルタを施す。その結果、画素ごとに得られるSobel出力値の最大値と最小値の差Dsを算出する。人の目近傍には強いエッジが存在する一方で、肌色の平坦な部分も存在することから、差Dsは比較的大きな値になる筈である。従って、差Dsと閾値Th_FJ4_MaxMinDiffを比較して、Ds≦Th_FJ4_MaxMinDiffの場合は注目赤目候補領域を候補領域リストから除外する。
さらに、赤目候補領域に対して周辺領域(例えば、図13(b)に示すの三倍領域)を設定し、周辺領域内の各画素に対してSobelフィルタを施す。その結果、画素ごとに得られるSobel出力値をエッジ画像としてRAM103の割り当てた配列sobel[y][x]に格納する。次に、エッジ画像の重心位置(Xw, Yx)を算出する。重心位置(Xw, Yx)は、式(19)によって求める。
(Xw, Yw) = (Σx・Sobel[y][x]/Sobel[y][x], Σy・Sobel[y][x]/Sobel[y][x]) …(19)
もし、注目赤目候補領域が人の目であれば、重心位置(Xw, Yx)は、エッジ画像の中央近傍に存在する筈である。従って、重心位置(Xw, Yx)が、例えばブロック1301に含まれるか否かを判定し、含まれていれば赤目候補領域と判定し、含まれない場合は注目赤目候補領域を候補領域リストから除外する。
また、赤目候補領域に対して五倍の周辺領域(図13(c))を設定し、周辺領域の各画素に対してSobelフィルタを施す。その結果得られる各画素のSobel出力値をエッジ画像として配列Sobel[y][x]に格納する。配列Sobel[y][x]は五倍の周辺領域の画素数と同じサイズの配列になる。次に、ブロック1301を含む周辺領域全体に対して、図17に示すような二つの領域、すなわち中央領域1601と外部領域1602を定義し、各領域に対して、配列Sobel[y][x]に格納したSobel出力値の平均値を算出する。なお、図17においては、中央領域1601のサイズをブロック1301の2.5倍としたが、これに限定されるものではない。中央領域1601と外部領域1602それぞれのSobel出力値の平均をSPowin、SPowoutとすると、人の目の近辺においては、外部領域1602よりも中央領域1601の方が強いエッジが存在することから、以下の判定を行う。
SPowin/SPowout > Th_FJ4_InOutRatio …(20)
式(20)を満たす場合、注目赤目候補領域を赤目領域と判定する。もし、式(20)を満たさない注目赤目候補領域は赤目領域ではないと判定し、候補領域リストから除外する。
また、上記の応用として、SPowin、SPowoutを単独に別の閾値と比較するような判定も考えられる。
特徴量判定部204は、以上の特徴量群0〜4の判定すべて(あるいは一部)を満たす赤目候補領域を赤目領域として確定し、赤目領域を確定した候補領域リストを補正部205に入力する。
[補正部205]
補正部205は、RGB成分で構成された入力画像データと、前段までの処理で得られた赤目領域が記載された候補領域リストが入力される。
図18は補正部205が実行する、候補領域リストに記載された複数の赤目領域のうちの一つを補正する処理例を示すフローチャートである。つまり、補正部205は、候補領域リストに記載された赤目領域を一つずつ図18に示す処理で補正する。
まず、注目赤目領域に対して補正範囲を決定する(S1701)。図19は補正範囲の決定を説明する図である。
図19において、中央の矩形領域が候補領域リストに記載された赤目領域1901である。赤目領域1901の中心を通る長径、短径がそれぞれLw1、Lh1の楕円の補正領域1902を設定する。なお、Lw1、Lh1は式(21)によって算出する。
Lw1 = Lw0×CPARAM_AREARATIO
Lh1 = Lh0×CPARAM_AREARATIO …(21)
ここで、Lw0、Lh0は赤目領域1901の幅と高さの1/2
CPARAM_AREARATIOは補正範囲を決定するためのパラメータ
次に、補正領域1902内で補正に必要なパラメータを算出する(S1702)。算出するパラメータは、楕円領域内部での最大輝度値Ymaxおよび式(3)に示す評価量Erの最大値Ermaxである。
次に、注目画素が補正領域1902内に存在するか否かを判定する(S1703)。注目画素が補正領域1902の楕円領域に存在するか否かは、楕円を算出する公式(式(22))によって判定することができる。
(x/Lw1)2 + (y/Lh1)2 ≦ 1 …(22)
ここで、(x, y)は注目画素の座標
ただし、座標原点は注目赤目領域の中心
注目画素の座標(x, y)が式(22)を満たす場合、注目画素は補正領域1902内に存在すると判断して、処理をステップS1704に進める。注目画素が補正領域1902内に存在しない場合は、注目画素を次の画素に移動し(S1710)、処理をステップS1703に戻す。
注目画素が補正領域1902に存在する場合、注目画素のRGB成分値を輝度、色差成分のYCC値に変換する(S1704)。変換方法には既知の様々な方法が存在するが、どの方法を用いても構わない。
次に、注目画素に対する評価量を算出する(S1705)。この評価量は、後段のステップS1706で補正量を決定するために必要なパラメータで、具体的には以下の三つの値である。
(1) 赤目領域1901の中心から注目画素までの距離rと、
中心から楕円境界までの距離r0の比r/r0
(2) 注目画素の評価量Erと評価量の最大値Ermaxの比Er/Ermax
(3) 注目画素の輝度Yと最大輝度値Ymaxの比Y/Ymax
次に、ステップS1705で求めたパラメータを用いて、注目画素の輝度Yおよび色差成分Cr、Cbそれぞれの補正量Vy、Vcを式(23)によって算出する(S1706)。
Vy = {1 - RrTy1}・{1 - (1 - Re)Ty2}・{1 - RyTy3}
Vc = {1 - RrTc1}・{1 - (1 - Re)Tc2} …(23)
ここで、Rr = r/r0、Re = Er/Ermax、Ry = Y/Ymax
Vy、Vcはともに0.0〜1.0の範囲になり、1.0に近いほど補正量が大きいことを意味する。輝度の補正量Vyは、三つのパラメータすべてを用いて決定し、注目画素の位置が補正領域1902の中心から離れるほど補正量が小さくなる。また、注目画素の評価量Erが、最大値Ermaxに比べて小さい場合、補正量Vyは小さくなる。また、注目画素の輝度値Yが、最大値Ymaxに近い場合、補正量Vyは小さくなる。輝度が高い画素の補正量Vyを小さくするのは、目の中のハイライト部(キャッチライト)を保存する効果がある。一方、色差の補正量Ycは、輝度に関するパラメータを除いたものである。
式(23)において、Ty1、Ty2、Ty3、Tc1、Tc2もパラメータで、それらの設定によって、各評価量(つまり、式(23)の括弧{ }内の値)を図20に示すように一次(実線)、二次(破線)、三次(一転鎖線)といった直線または曲線で適用することが可能である。
次に、補正量Vy、Vcを用いて式(24)により補正後のYCC値を算出する(S1707)。
Y' = (1.0 - Wy・Vy)・Y
C' = (1.0 - Wc・Vc)・C …(24)
ここで、Y、Cは補正前の値
Y'、C'は補正後の値
Wy、Wcは重み(0.0〜1.0)
重みWy、Wcは、補正強度を指定したい場合に調節する。例えば、補正強度を弱、中、強と三段階とする場合、Wy、Wcをともに0.3、0.7、1.0などに設定することで、同一の処理で、補正強度が異なる結果を得ることができる。
新しい輝度、色差成分の値が決定したら、YCC値をRGB値へ変換し、補正後の画素値として入力画像用のメモリバッファに上書きする、あるいは、出力用画像を格納するメモリバッファの所定アドレスに格納する(S1708)。
ステップS1709の判定により、注目赤目領域に対応する最後の画素に達するまで、ステップS1710で注目画素を移動して(S1710)、上記の処理(S1703〜S1708)を繰り返す。また、注目赤目領域に対応する最後の画素に達した場合、次の赤目領域の補正処理に移行して、公報領域リストに記録されたすべての赤目領域の補正処理を繰り返す。
なお、補正部205に入力される画像がRGB成分で構成され、入力画像を輝度、色差成分に変換して補正した後、再び、RGB成分に戻す方法を説明したが、これに限定されるものではない。例えば、RGB成分を明度、彩度に変換し、同様の方法を用いて明度、彩度を補正した後、再び、RGB成分に戻したとしても、ほぼ同様の出力結果が得られる。
さらに、補正量を決定するためのパラメータとして、注目画素の評価量Erと補正領域1902内の評価量の最大値Ermaxの比Er/Ermaxを用いる例を説明したが、同パラメータを単純に彩度に置き換えることも可能である。つまり、注目画素の彩度と、補正領域1902内の最大彩度との比を用いて補正量を決定してもよい。
このように、赤目を構成する画素か否かを、彩度ではなく、RおよびG成分の関係で求めた評価量Erを用いて判定することで、色素が濃い(多い)人の赤目も高精度に抽出することができる。また、赤目候補画素に対応する二値画像上で、境界線追跡法を適用することにより、二値画像から極めて少ない演算量で高速に赤丸領域を抽出することができる。また、赤丸領域から、赤目であると考えられる様々な特徴量を算出し、それを評価することで、最終的に赤目領域を高精度に特定することができる。また、個々の特徴量判定による効果、および、特徴量算出時の演算量を考慮して、特徴量の判定を適切な順序で行って赤目領域候補を篩にかけ、赤目領域ではない可能性が高い候補領域を早々に除外する。従って、必要最小限の処理量で赤目領域の検出を実現することができる。
以下、本発明にかかる実施例5の画像処理を説明する。なお、実施例5において、実施例1〜4と略同様の構成については、同一符号を付して、その詳細説明を省略する。
実施例5では、実施例1〜4で説明した画像処理を、CPUの処理能力や使用可能なメモリ(RAMなど)の記憶容量が制限された環境下において実施する方法を説明する。このような環境は、複写機、プリンタ、ディジタルカメラ、スキャナ、複合機などの画像入出力デバイスに実装される画像処理部を想定したものである。
上記の環境では、使用可能なワークメモリは多くても数百KB〜数MB程度である。一方、ディジタルカメラの高解像度化が進み、1000万画素を超える撮像能力をもつかカメラも登場している。このような高精細な画像から赤目領域を検出する処理を、限られたワークメモリを用いて行うには、入力画像の解像度を低下することが有効である。例えば、800万画素の入力画像を、水平垂直方向に一画素間隔でサブサンプルすれば1/4の解像度、すなわち200万画素の画像に縮小することが可能である。この場合、画像を記憶するために必要なワークメモリの容量も1/4になる。しかし、たとえ200万画素に縮小したとしても、縮小後の画像全体を同時に保持するには、RGB24ビットの場合、約6MBのワークメモリが必要になる。大容量のRAMを備えるパーソナルコンピュータやワークステーションでは問題とならない記憶容量だが、限られた環境下においては、ワークメモリの使用量を削減するために、さらなる工夫が必要になる。
実施例5においては、入力画像を縮小し、縮小画像をさらにバンドに分割し、各バンド単位に、順次、赤目領域を抽出する方法を説明する。また、バンド分割においては、バンド境界に存在する赤目の検出を可能にするために、図33に示すように、オーバラップ領域を有する。図33において、符号3201は入力画像を縮小して得られる縮小画像を示し、BandHeightは1バンドを構成するライン数を示す。つまり、赤目領域の抽出処理は、Width×BandHeight(単位は画素数)の画像に対して行うことになる。また、実施例5におけるバンド分割は、OverlapAreaで示すライン数だけ、前のバンドと重複する。これによって、符号3202で示すような、バンド境界に存在する赤目領域についても抽出が可能になる。
図34は実施例5における赤目領域の抽出処理の一例を示すフローチャートで、画像入出力デバイスに搭載されたCPUが実行する処理である。
まず、カウンタNを零に初期化し(S3301)、Nバンド目の縮小画像を生成する(S3302)。
縮小画像の生成方法は、簡単のために、単純間引きによって縮小画像を生成する方法を説明する。例えば、800万画素の画像が画像入出力デバイスのメモリ(例えばデバイスに装備されたフラッシュメモリやハードディスク、あるいは、外部から装着されたメモリカード)に格納されているものとする。
ステップS3302において、メモリの画像データにアクセスし、画像データがJPEG形式で保存されていれば、最初のMCU(最小符号化単位)ブロックのデコードしてワークメモリの所定領域に格納する。このMCUブロックのサイズは、例えば16×8画素である。次に、デコード後の画像データから例えば一画素間隔でサブサンプリングして、8×4画素の画像データを生成し、ワークメモリの赤目領域抽出用の画像格納領域に格納する。この処理をBandHeightライン数分の赤目領域抽出用の画像格納領域が満たされるまで繰り返す。この処理によって、800万画素の画像を200万画素に縮小する場合のバンド画像を得ることができる。
勿論、画像の縮小方法は、単純間引き以外にも、最近隣補間や線形縮小を用いる方法など、様々な方法を利用することができ、それらのどれを使用しても構わない。
上記の処理によって、縮小画像のバンド画像が得られると、Nバンド目の赤目領域の抽出処理を行う(S3303)。
図35はNバンド目の赤目領域の抽出処理(S3303)の詳細を示すフローチャートである。
まず、縮小画像データに上記実施例で説明した適応的二値化処理を施す(S3401)。処理結果(赤色領域の二値画像)は、縮小画像の格納領域とは別に割り当てた領域に保存する。この際、縮小画像のOverlapArea領域は重複領域であるから、当該領域の処理は、N-1バンド目で実施済みである。従って、N>0であれば、OverlapArea領域の処理をスキップし、N-1バンド目の処理結果を再利用するようにしてもよい。このようにすることで、処理の高速化を図ることができる。
次に、二値化の結果(赤色領域)に対して、上記の実施例で説明した境界線追跡を施し、バンド画像から赤丸領域を抽出する(S3402)。
次に、抽出した赤丸領域に対して特徴量判定処理を施す前に、複数の赤丸領域のうち、特徴量判定処理を施す赤丸領域を選択する候補領域選択処理を行う(S3403)。
図36は、N-1、NおよびN+1バンド目において、OverlapArea内に四つの赤丸領域が存在する例を示している。例えば、赤丸領域3603に注目すると、当該領域はNバンド目とN+1バンド目の双方に存在し両者について特徴量判定を行えば、OverlapArea領域に存在する赤丸領域は常に二回の処理することになり、効率的ではない。
そこで、赤丸領域3603の場合、NまたはN+1バンド目のどちらで特徴量判定を行うべきかを考える。N+1バンド目では、赤丸領域3601に対して設定する周辺領域の上部が欠けるのに対して、Nバンド目では、周辺領域を参照することが可能である。従って、赤丸領域3603については、Nバンド目の判定結果の方が信頼性が高いと言える。さらに一般化すれば、OverlapArea領域に存在する赤丸領域の特徴量判定は、周辺領域をより広く参照できるバンドにおいて処理すべきである。
従って、実施例5の候補領域選択処理(S3403)は、OverlapArea領域に存在する赤丸領域について、図37に示すように、赤丸領域の上端からN+1バンド目の上端までの距離UPLenを予測(N+1バンド目は未処理であるから、N+1バンド目における赤丸領域の位置を予測する)し、赤丸領域の下端からNバンド目の下端までの距離BTLenを算出し、当該赤丸領域の特徴量判定を、UPLen<BTLenならばNバンド目で行い、UPLen≧BTLenならばNバンド目では行わない(言い換えればN+1バンド目で行う)と判定する。なお、Nバンド目で特徴量判定を行わない場合は、当該赤丸領域を当該バンドの候補領域リストから除外する。
同様に、図36に示す赤丸領域3604について距離UPLen、BTLenを算出すると、その関係はUPLen>BTLenになるため、赤丸領域3604はN+1バンド目で特徴量判定を行うことになる。また、上記の関係を赤丸領域3601、3602に適用すると、それぞれN-1バンド目、Nバンド目で特徴量判定を行うことになる。
このように、候補領域選択処理(S3403)では、OverlapArea領域に存在する赤丸領域の上部および下部とバンド端の距離(マージン)を算出し、その関係に応じて、どちらのバンドで特徴量判定を行うか否かを判断する。これによって、OverlapArea領域内の赤丸領域の重複する特徴量判定を防ぐことができる。
図35に戻り、候補領域選択処理(S3403)で選択された赤丸領域に対して、上記の実施例で説明した特徴量判定処理を施す(S3404)。その結果、赤目領域と判断した領域の補正処理に必要なパラメータを算出し(S3405)、赤目領域の情報とパラメータの組み合わせを、図38に示すように、候補領域リストに追加する(S3406)。なお、パラメータは、補正量Vy、Vcの計算(式(23))に必要な補正領域の最大輝度値Ymaxと評価量の最大値Ermaxである。
図34に戻り、図35に示すNバンド目の赤目領域の抽出処理(S3303)が終了すると、最終バンドの処理が完了したか否かを判定し(S3304)、完了であれば処理を終了し、未了であればカウンタNをインクリメントして(S3405)、処理をステップS3302に戻す。
図39は実施例5における補正処理の一例を示すフローチャートである。
まず、赤目領域の位置情報を変換する(S3801)。実施例5では、赤目領域の抽出、補正処理を画像入出力デバイスの組み込み処理として実行することを想定するため、上述したように、赤目領域の抽出処理は縮小画像で行う。しかし、補正対象の画像は縮小前の高解像度の画像であり、プリンタなどの画像出力デバイスであれば、縮小前の画像をさらに印刷(出力)解像度に拡大したり、回転した画像の可能性がある。従って、縮小画像上で抽出した赤目領域の位置情報を縮小率や拡大率(変倍率)、回転に応じて変換する必要がある。
候補領域リストに格納された位置情報が、図41に示すように、赤目領域の左上座標(xt0, yt0)と右下座標(xb0, yb0)で表現され、かつ、縮小画像の縦横の画素数がW0、H0、補正対象画像の縦横の画素数がW1、H1の場合、補正対象画像における赤目領域の座標を式(27)で算出する。
(xt1, yt1) = {int(xt0・k), int(yt0・k)}
(xb1, yb1) = {int(xb0・k), int(yb0・k)} …(27)
ここで、k = W1/W0
int( )は自身を超えない最大の整数
(xt1, yt1)は補正対象画像上の赤目領域の左上座標
(xb1, yb1)は補正対象画像上の赤目領域の右下座標
ステップSS3801において、補正対象画像上の赤目領域の座標が決定すると、実施例1と同様に、赤目領域周辺に楕円領域を設定し、楕円領域に含まれる画素を補正対象画素として以下の処理を行う。
まず、カウンタRを零に初期化し(S3802)、補正対象画像のRライン目の画像データを取得する(S3803)。実施例5では、補正対象画像をライン単位に補正する処理を説明するが、これに限定されるわけではなく、所定ライン数のバンド単位に補正しても構わない。補正対象画像の画像データの取得は、例えば図1に示す記憶装置105やメモリカードなどに、JPEGなどの圧縮形式で保存された画像データを所定のライン数分伸長し、そのうちの1(または複数)ラインを取得することで実現する。
次に、Rライン目が補正対象画素を含むか否かを判定する(S3804)。実施例5の補正処理は、赤目領域(矩形領域)の周辺に設定した楕円領域を補正対象領域にする。そのため、Rライン目が補正対象領域の上端から下端の間に位置するか否かを、候補領域リストに格納されたすべての赤目領域について判定する。Rライン目が補正対象画素を含まない場合は、カウンタRをインクリメントして(S3807)、処理をステップS3803に戻す。
例えば、図40に示すような場合、Rライン目は、ある赤目領域4003周辺に設定した補正対象領域4002に含まれる。従って、Rライン目の補正対象領域4002に含まれる画素について、実施例1で説明した補正処理を施す(S3805)。この補正処理に必要な最大輝度値Ymaxと評価量の最大値Ermaxは、上述したステップS3405において求めて候補領域リストに格納された値を使用する。
以上の処理を、ステップS3806の判定により、Rライン目が最終ラインになるまで繰り返すことで、入力画像全体に補正処理を施すことができる。
補正処理が終了した画像データは、例えば、記憶装置105に格納されたり、あるいは、色変換、疑似階調処理を施した後、例えばプリンタ110により記録紙に印刷されることになる。
このように、入力画像を縮小し、かつ、バンドに分割してバンド単位に赤目領域の抽出処理を行うことで、実施例1〜4で説明したような赤目領域の抽出および補正を、メモリリソースが極めて少ない環境下で実行することが可能になる。また、隣接するバンドとの間に重複領域が存在するようにバンド分割することで、バンド境界に存在する赤目領域の抽出が可能になる。
なお、赤目領域の抽出部を撮像装置などの画像入力デバイスに搭載し、赤目領域の補正部を印刷装置などの画像出力デバイスに搭載しても構わない。
[変形例]
上記の各実施例においては、画素ごとの評価量ErとしてRGB成分値のうち、Bを使用しない評価量Erを定義した。しかし、これに限定するものではなく、例えば、式(28)によって評価量Erを定義し、係数kを0または係数i、jよりも小さい値に設定しても同様の効果を得ることができる。ここで、係数i、j、kは負の数になり得る重みである。
Er = (i・R + j・G + k・B)/R …(28)
また、画素値をLabやYCbCrなどの別の色空間に変換した後、青色成分を考慮に入れない、あるいは、青色成分の重みを小さくして評価量Erを定義してもよい。
[他の実施例]
なお、本発明は、複数の機器(例えばホストコンピュータ、インタフェイス機器、リーダ、プリンタなど)から構成されるシステムに適用しても、一つの機器からなる装置(例えば、複写機、ファクシミリ装置など)に適用してもよい。
また、本発明の目的は、前述した実施例の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体(または記録媒体)を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)が記憶媒体に格納されたプログラムコードを読み出し実行することによっても、達成されることは言うまでもない。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施例の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム(OS)などが実際の処理の一部または全部を行い、その処理によって前述した実施例の機能が実現される場合も含まれることは言うまでもない。
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって前述した実施例の機能が実現される場合も含まれることは言うまでもない。
本発明を上記記憶媒体に適用する場合、その記憶媒体には、先に説明したフローチャートに対応するプログラムコードが格納されることになる。