(57)【要約】【課題】  歯画像の補正領域を、周囲との違和感を抑制して、補正する。【解決手段】  顔画像から歯の画像領域を検出し(S2006)、歯の画像領域の彩度を調整し(S2008)、彩度を調整した歯の画像領域から輝度の補正対象領域を検出する(S2009)。そして、補正対象領域を含む歯の画像を検出し、補正対象領域を含む歯の画像から目標白色を設定し、前記目標白色に基づき前記補正対象領域の輝度を補正する(S2011)。【選択図】  図2
2009037414.tif 000002
【特許請求の範囲】
【請求項１】
顔画像から歯の画像領域を検出する歯画像領域の検出手段と、
前記歯の画像領域の彩度を調整する調整手段と、
前記彩度を調整した歯の画像領域から輝度の補正対象領域を検出する補正対象領域の検出手段と、
前記補正対象領域を含む歯の画像を検出する歯画像の検出手段と、
前記補正対象領域を含む歯の画像から目標白色を設定する設定手段と、
前記目標白色に基づき前記補正対象領域の輝度を補正する補正手段とを有することを特徴とする画像処理装置。
【請求項２】
前記歯画像領域の検出手段は、入力画像から前記顔画像を検出し、前記顔画像の傾きを補正し、前記顔画像の所定領域を口周辺領域として抽出し、前記口周辺領域の彩度の低い領域を前記歯の画像領域として検出することを特徴とする請求項1に記載された画像処理装置。
【請求項３】
前記調整手段は、前記歯の画像領域の彩度を調整するとともに、前記歯の画像領域に対応する前記入力画像の領域の彩度を調整すること特徴とする請求項2に記載された画像処理装置。
【請求項４】
前記補正対象領域の検出手段は、前記歯の画像領域の低輝度領域を前記補正対象領域として検出することを特徴とする請求項1から請求項3の何れか一項に記載された画像処理装置。
【請求項５】
前記歯画像の検出手段は、前記補正対象領域に外接する矩形を設定し、前記矩形の各辺に直交する方向にエッジ検出を行い、検出したエッジに基づき前記補正対象領域を含む歯の画像を検出することを特徴とする請求項1から請求項4の何れか一項に記載された画像処理装置。
【請求項６】
前記設定手段は、前記補正対象領域を含む歯の画像から前記補正対象領域を除く領域の輝度の統計値を前記目標白色として設定することを特徴とする請求項1から請求項5の何れか一項に記載された画像処理装置。
【請求項７】
前記統計値は、輝度の平均値、輝度分布の最頻値、輝度分布の中央値の何れかであることを特徴とする請求項6に記載された画像処理装置。
【請求項８】
前記補正手段は、前記補正対象領域の輝度を前記目標白色の輝度に近付ける補正を行うことを特徴とする請求項6または請求項7に記載された画像処理装置。
【請求項９】
顔画像から歯の画像領域を検出し、
前記歯の画像領域の彩度を調整し、
前記彩度を調整した歯の画像領域から輝度の補正対象領域を検出し、
前記補正対象領域を含む歯の画像を検出し、
前記補正対象領域を含む歯の画像から目標白色を設定し、
前記目標白色に基づき前記補正対象領域の輝度を補正することを特徴とする画像処理方法。
【請求項１０】
コンピュータ装置を制御して、請求項1から請求項8の何れか一項に記載された画像処理装置の各手段として機能させることを特徴とするコンピュータプログラム。
【請求項１１】
請求項10に記載されたコンピュータプログラムが記録されたことを特徴とするコンピュータが読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、顔画像の画像処理に関する。
【背景技術】
【０００２】
笑顔の人物像など、歯が大きく見える顔画像は、歯の画像領域（以下、歯画像）の染み、黄ばみ、ルージュなどの付着を白く補正することで、顔画像の印象をよくすることができる。
【０００３】
顔画像の器官部分を白く補正する技術として、特許文献1は、充血した目の色を補正する発明を開示する。特許文献1は、充血部以外の白目の画像領域（以下、白目画像）の代表色に基づき、充血部の彩度、輝度を調整して充血した目の画像を白く補正する。
【０００４】
白目のように白色部分の明るさや色がある程度均一であれば、白く補正したい部分を違和感なく補正することができる。しかし、歯画像の場合は、同じように白い歯でも一本一本明るさや色が異なる。つまり、単純に歯画像の白い部分の代表色に基づき、染み、黄ばみ、ルージュなどが付着した領域（以下、補正領域）を補正しても、補正領域とその周囲領域の間で明るさや色に違和感を生じる。
【０００５】
【特許文献１】特開2005-228076公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
本発明は、歯画像の補正領域を、周囲との違和感を抑制して、補正することを目的とする。
【課題を解決するための手段】
【０００７】
本発明は、前記の目的を達成する一手段として、以下の構成を備える。
【０００８】
本発明にかかる画像処理装置は、顔画像から歯の画像領域を検出する歯画像領域の検出手段と、前記歯の画像領域の彩度を調整する調整手段と、前記彩度を調整した歯の画像領域から輝度の補正対象領域を検出する補正対象領域の検出手段と、前記補正対象領域を含む歯の画像を検出する歯画像の検出手段と、前記補正対象領域を含む歯の画像から目標白色を設定する設定手段と、前記目標白色に基づき前記補正対象領域の輝度を補正する補正手段とを有することを特徴とする。
【０００９】
本発明にかかる画像処理方法は、顔画像から歯の画像領域を検出し、前記歯の画像領域の彩度を調整し、前記彩度を調整した歯の画像領域から輝度の補正対象領域を検出し、前記補正対象領域を含む歯の画像を検出し、前記補正対象領域を含む歯の画像から目標白色を設定し、前記目標白色に基づき前記補正対象領域の輝度を補正することを特徴とする。
【発明の効果】
【００１０】
本発明によれば、歯画像の補正領域を、周囲との違和感を抑制して、補正することができる。
【発明を実施するための最良の形態】
【００１１】
以下、本発明にかかる実施例の画像処理を図面を参照して詳細に説明する。
【実施例１】
【００１２】
［概要］
実施例1では、歯画像を補正する際に、顔画像の口周辺領域の中から染み、黄ばみ、ルージュなどが付着した補正領域を検出して、補正領域を含む歯画像の白い領域から補正の目標色を決定する方法を説明する。
【００１３】
［装置の構成］
図1は実施例1の画像処理装置の構成例を示すブロック図である。
【００１４】
CPU104は、RAM106をワークメモリとして、ROM105およびハードディスクドライブ(HDD)102に格納されたプログラムを実行し、システムバス109を介して後述する各構成を制御して、後述する処理を含む様々な処理を実行する。
【００１５】
入力部101は、キーボードやポインティングデバイスなどである。ユーザは、入力部101を介して画像処理装置にデータを入力し、様々な操作をCPU104に指示する。HDD102は、様々なバイナリデータやメタデータを格納する。また、後述する処理をCPU104が実現するための制御プログラムや処理プログラムも格納する。
【００１６】
表示部103は、CRTやLCDである。CPU104は、ユーザインタフェイス、処理の経過や結果などを表示部103に表示する。インタフェイス(I/F)107は、例えばUSBやIEEE1394などのシリアルバスインタフェイスである。CPU104は、I/F107に接続されたディジタルカメラやメモリカードリーダから画像データを読み込んで、HDD102に格納することができる。また、CPU104は、HDD102に格納された画像データなどをI/F107を介して外部の装置に出力することができる。
【００１７】
［画像処理］
図2は画像処理を説明するフローチャートである。CPU104は、例えばユーザの指示により、I/F107を介して画像を入力してRAM106またはHDD102に入力画像を格納した後、図2に示す処理を実行する。なお、各フローチャートの各ステップに付した図番は、当該処理の詳細を示すフローチャートを指示すために便宜的に付加したものである。
【００１８】
CPU104は、変数fi、nMを0に初期化する(S2001)。なお、変数fiは画像に含まれる顔画像を順に参照するためのループ変数、変数nMは補正領域を順に処理するためのループ変数である。
【００１９】
次に、CPU104は、補正対象の画像データをRAM106の所定領域に読み込み(S2002)、読み込んだ画像データから顔画像を検出する。そして、顔画像の検出結果として、顔画像の総数nFと、顔画像領域を囲う矩形領域（以下、顔矩形）の座標値をRAM106の所定領域に格納する(S2003)。
【００２０】
顔画像の検出は、例えば、本郷仁志、山本和彦「動領域内の肌色推定による顔画像および顔部品抽出」映像情報メディア学会誌、社団法人映像情報メディア学会、1998年12月、第52巻、第12号、86-93頁に開示された方法を利用すればよい。または、特開平7-141506号公報に開示された方法を利用すればよい。これらは、色（肌色）を利用して顔画像を検出する。あるいは、パターンマッチングを利用する方法などでもよい。
【００２１】
CPU104は、顔画像に含まれる口周辺領域を顔矩形に対する相対的な位置としておおよその検出を行うため、顔矩形の縦横の比率は、検出した全顔画像において同一とする。
【００２２】
図3は顔画像の検出結果例を示す図である。顔画像201の顔矩形を表す四頂点はA1、A2、A3、A4である。また、傾いだ顔画像202の顔矩形を表す四頂点はB1、B2、B3、B4である。つまり、顔画像に傾きがある場合、その傾きに合わせて顔矩形も傾ける。
【００２３】
なお、検出した顔矩形を順に参照して歯画像群を検出する。検出の順番は、例えば、顔矩形の左上座標が画像の左上に近い順に行ってもよいし、顔矩形の面積の大きい順に行ってもよい。
【００２４】
次に、CPU104は、変数fiをインクリメントして(S2004)、fi番目の顔画像を抽出する(S2005)。その際、詳細は後述するが、顔矩形が傾いたままでは、以降の処理に支障があるため、傾きを補正して正立した顔画像（顔矩形）に補正する。
【００２５】
次に、CPU104は、詳細は後述するが、顔画像から複数の歯画像をまとめた一つの領域として歯画像領域（以下、歯画像群）を検出する(S2006)。図7は歯画像群を説明する図で、顔画像に含まれる歯画像をまとめた領域（斜線部分）を歯画像群501として検出する。
【００２６】
歯画像群501が画像全体に比べて非常に小さい場合、補正領域を補正しても効果は少ない。そこで、画像全体に比べて、ある程度の面積をもつ歯画像群501を補正領域にするため、CPU104は、歯画像群501の面積tSと画像全体の面積fSを比較する(S2007)。つまり、tS≧fS・fRの場合は歯画像群501を補正領域として補正処理を行い、tS＜fS・fRの場合は処理をステップS2013に進めて、補正処理をパスする。なお、fRは所定比率（0＜fR＜1）である。また、歯画像群501の面積tSは、後述する歯画像群テーブルに登録されたIDをもつ画素を、後述するIDマップデータからカウントすればよい。
【００２７】
tS≧fS・fRの場合、CPU104は、詳細は後述するが、歯画像群501に彩度補正を施す(S2008)。この彩度補正により、薄い色の黄ばみやルージュの付着部分は白く補正されるが、濃い色の染み部分は黒ずむ。そこで、歯画像群501において、明るさや色が周辺の領域と異なる領域を染み領域とみなす。つまり、CPU104は、詳細は後述するが、歯画像群501の中の低輝度領域を補正対象領域としての染み領域として検出する(S2009)。
【００２８】
次に、CPU104は、変数nMをインクリメントし(S2010)、詳細は後述するが、検出した染み領域を補正する(S2011)。
【００２９】
次に、CPU104は、変数nMと後述する染み総数nSを比較して(S2012)、nM＜nSならば処理をステップS2010に戻し、nM=nSならば染み領域の補正が終了したとして処理をステップS2013に進める。
【００３０】
nM=nSの場合、CPU104は、変数fiと顔画像の総数nFを比較して(S2013)、fi＜nFならば処理をステップ2004に戻し、fi=nFならば検出した全顔画像の処理が終了したとして画像処理を終了する。
【００３１】
以下では、主なステップの処理を詳細に説明する。
【００３２】
●顔画像の抽出(S2005)
図4は顔画像の抽出(S2005)の詳細を示すフローチャートである。
【００３３】
CPU104は、顔矩形の四頂点の座標値を取得する(S2101)。図5は顔画像202の四頂点の座標値を取得した例を示す図である。四頂点の座標値は下記のとおりである。
B1(BX1, BY1)
B2(BX2, BY2)
B3(BX3, BY3)
B4(BX4, BY4)
【００３４】
次に、CPU104は、顔画像が傾いているか否かを判定する(S2102)。判定方法は、四頂点のうち、例えば、Y軸が一致する筈のB1とB2の二頂点を選んでX座標値を比較する。座標値が等しければ顔画像は傾いていないと判定する。座標値が等しくない場合は顔画像は傾いてると判定する。
【００３５】
顔画像が傾いている場合、顔矩形を回転して顔画像の傾きを補正する(S2103)。顔矩形の左上頂点B1を中心に顔矩形の傾きを補正する場合は、次のようになる。
【００３６】
図6は顔矩形の回転を説明する図である。図5に示すようにY軸と顔矩形の傾き角をθとすれば、図6に示すように頂点B1を中心として顔画像を含む顔矩形を-θ回転する。回転前後の顔矩形の四頂点の座標値の間には次の関係が成り立つ。
X = (x - BX1)cosθ - (y - BY1)sinθ + BX1
Y = (x - BX1)sinθ + (y - BY1)cosθ + BY1      …(1)
ここで、(X, Y)は回転後の座標値
(x, y)は回転前の座標値
【００３７】
式(1)を変形した式(2)によれば、回転後の顔矩形内の画素に対応する回転前の画素を特定することができる。
x = (X - BX1)cosθ + (Y - BY1)sinθ + BY1
y = (Y - BY1)cosθ - (X - BX1)sinθ + BY1      …(2)
【００３８】
次に、CPU104は、顔矩形の画像を抽出する(S2104)。傾きがない場合は、例えば、図3に示す矩形A1A2A3A4内の画像を顔画像として抽出すればよい。また、傾きがある場合は、例えば、図6に示す回転した矩形B1'B2'B3'B4'内の画像を顔画像として抽出する。
【００３９】
●歯画像群の検出(S2006)
図8は歯画像群の検出(S2006)を説明するフローチャートである。以下では、図3に示す顔画像201を例に説明する。
【００４０】
CPU104は、変数kを0に初期化する(S2201)。なお、変数kは、口周辺領域に含まれる領域を順に参照する際のループ変数である。
【００４１】
次に、CPU104は、ステップS2005で抽出した顔矩形から口周辺領域を抽出する(S2202)。顔矩形における口周辺領域の平均的な位置を予め調べ、この平均的な位置と顔矩形の座標に基づき口周辺領域の座標を算出する。
【００４２】
図9は顔矩形における口周辺領域の平均的な位置を説明する図である。口周辺領域の顔矩形に対する相対的な位置は式(3)によって表される。
a(x, y) = (rx1・fW, ry1・fH)
b(x, y) = (rx2・fW, ry2・fH)      …(3)
ここで、aは口周辺領域の左上頂点、
bは口周辺領域の右下頂点、
fWは顔矩形の幅、
fHは顔矩形の高さ、
0＜rx1＜rx2＜1、
0＜ry1＜ry2＜1
【００４３】
つまり、口周辺領域は、X軸方向にrx1・fWからrx2・fWの範囲に存在し、Y軸方向にry1・fHからry2・fHの範囲に存在する。式(3)は、顔矩形の左上頂点を原点とする局所座標系における座標を示す。これを画像全体に適用する場合、画像全体の座標系に変換する必要がある。
【００４４】
図10は口周辺領域702の抽出を説明する図である。画像全体における口周辺領域の座標は式(4)によって表される。
ma(x, y) = (X1 + rx1(X2 - X1), Y1 + ry1(Y2 - Y1))
mb(x, y) = (X1 + rx2(X2 - X1), Y1 + ry2(Y2 - Y1))      …(4)
ここで、maは口周辺領域の左上頂点、
mbは口周辺領域の右下頂点、
(X1, Y1)は頂点A1の座標値、
(X2, Y2)は頂点B1の座標値
【００４５】
また、口周辺領域702の幅mWと高さmHは式(5)によって表される。
mW = (rx2 - rx1)(X2 - X1)
mH = (ry2 - ry1)(Y2 - Y1)      …(5)
【００４６】
次に、CPU104は、抽出した口周辺領域702の画像を領域分割し、領域分割の結果として、総領域数nRと、口周辺領域702の各画素がどの領域に含まれるかを示すIDマップデータを出力する(S2203)。領域分割の方法としては、特開2000-90239公報に開示されたエッジを抽出する  方法や、特開平8-83339号公報に開示された領域拡張法、特開2001-43371公報に開示されたクラスタリング法などがある。また、IDマップデータは、口周辺領域702の各画素に対応する領域ID（=1〜nR）を格納したビットマップ形式のデータである。
【００４７】
次に、CPU104は、口周辺領域702全体の平均彩度、および、詳細は後述するが、分割した各領域の平均彩度aveS[k]を算出する(S2204)。そして、変数kをインクリメントして(S2205)、ID=kの領域が低彩度領域か否かを判定する(S2206)。つまり、口周辺領域702全体の平均彩度に対して、所定割合以下の平均彩度aveS[k]をもつ領域を低彩度領域として判定する。
【００４８】
口周辺領域全体の平均彩度faveSは、式(6)に示すように、口周辺領域702の全画素のRGB各平均値から色度Cb、Crを計算して、色度Cb、Crから計算する。
Cb = -0.1687×aveR - 0.3312×aveG + 0.5000×aveB
Cr = 0.5000×aveR - 0.4187×aveG - 0.0813×aveB
faveS = √(Cb2 + Cr2)                            …(6)
ここで、aveRは口周辺領域の全画素のR平均値、
aveGは口周辺領域の全画素のG平均値、
aveBは口周辺領域の全画素のB平均値
【００４９】
そして、式(7)を満たす領域を低彩度領域と判定する。
aveS[k] ≦ faveS・rS      …(7)
ここで、rSは所定割合
【００５０】
CPU104は、低彩度領域と判定した領域のIDを変数fi＋変数k（ID）の形式でRAM106の歯画像群テーブルに記録する(S2207)。
【００５１】
次に、CPU104は、変数kとnRを比較して(S2208)、k＞nRになるまでステップS2205からS2207を繰り返して、分割した全領域について低彩度領域か否かの判定を行う。
平均彩度の算出(S2204)
【００５２】
図11は各領域の平均彩度の算出(S2204)の詳細を示すフローチャートである。
【００５３】
CPU104は、次の変数を0に初期化する(S2301)。口周辺領域702に含まれる領域内の画素の彩度の合計値を示す彩度合算値sumS[1]〜sumS[nR]（nRは領域数）。各領域の画素を走査するためのループ変数i、j。各領域を順に参照するためのループ変数r。領域内の画素のRGB各合算値を表す変数sumR[1]〜sumR[nR]、sumG[1]〜sumG[nR]、sumB[0]〜sumB[nR]。並びに、各領域の画素数を表すnP[1]〜nP[nR]である。
【００５４】
次に、CPU104は、変数iをインクリメントし(S2302)、座標(i, j)に対応する原画像に画素のRGB値を取得し、IDマップデータから画素(i, j)の領域IDを取得する(S2303)。なお、ここで取得した領域IDの値をnとして以降の処理を説明する。
【００５５】
次に、CPU104は、取得したRGB値をsumR[n]、sumG[n]、sumB[n]に加算し、nP[n]をインクリメントする(S2304)。
【００５６】
そして、CPU104は、変数iと口周辺領域702の幅mWを比較して(S2305)、i＜mWならば処理をステップS2302に戻す。また、i=mWならば変数iを0にリセットし、変数jをインクリメントし(S2306)、変数jと口周辺領域702の高さmHを比較して(S2307)、j＜mHならば処理をステップS2302に戻す。
【００５７】
そして、j=mHになると、CPU104は、口周辺領域の走査が終了したとして、変数rをインクリメントし(S2308)、ID=rの領域（以下、領域r）のRGB各平均値を式(8)によって計算する(S2309)。
aveR[r] = sumR[r]/nP[r]
aveG[r] = sumG[r]/nP[r]      …(8)
aveB[r] = sumB[r]/nP[r]
【００５８】
次に、CPU104は、aveR[r]、aveG[r]、aveB[r]から領域rの平均彩度aveS[r]を式(9)によって算出する(S2310)。
Cb[r] = -0.1687×aveR[r] - 0.3312×aveG[r] + 0.5000×aveB[r]
Cr[r] = 0.5000×aveR[r] - 0.4187×aveG[r] - 0.0813×aveB[r]
aveS[r] = √(Cb[r]2 + Cr[r]2)                            …(9)
【００５９】
そして、CPU104は、変数rと領域数nRを比較して(S2311)、r＜nRならば処理をステップS2308に戻し、r=nRならば平均彩度の算出を終了する。
【００６０】
●彩度補正(S2008)
図12は彩度補正(S2008)の詳細を説明するフローチャートである。
【００６１】
CPU104は、変数ki、kjを0に初期化する。なお、変数ki、kjはそれぞれ口周辺領域702の画素をX軸方向、Y軸方向に走査する際のループ変数である。
【００６２】
次に、CPU104は、変数kiをインクリメントし(S2402)、IDマップデータから座標(ki, kj)の画素（以下、画素(ki, kj)）の領域IDを取得する(S2403)。そして、歯画像群テーブルを参照して、取得した領域IDをもつ画素(ki, kj)が歯画像群501に含まれるか否かを判定する(S2404)。歯画像群501に含まれない画素の場合は処理をステップS2407に進める。
【００６３】
画素(ki, kj)が歯画像群501に含まれる場合、CPU104は、座標(ki,kj)に対応する原画像の画素のRGB値を取得し(S2405)、下式により、色を低減する方向に画素(ki, kj)を彩度補正する(S2406)。その際、歯画像群501の画素(ki, kj)、および、対応する原画像の画素の両方の彩度を補正（調整）する。
補正前の画素の色度：
Cb = -0.1687×R - 0.3312×G + 0.5000×B
Cr = 0.5000×R - 0.4187×G - 0.0813×B      …(10)
補正後の彩度S'：
S' = S・rC
∴Cb' = Cb・rC                                …(11)
Cr' = Cr・rC
ここで、rCは所定比率rC（0＜rC＜1）
補正後の画素のRGB値：
R' = Y ＋ 1.402×Cb・rC
G' = Y - 0.344×Cb・rC - 0.714×Cr・rC      …(12)
B' = Y + 1.772×Cb・rC
ただし、輝度Yは維持する
Y = 0.299×R + 0.587×G + 0.114×B
【００６４】
次に、CPU104は、変数kiと口周辺領域702の幅mWを比較して(S2407)、ki＜mWならば処理をステップS2402に戻す。また、ki=mWならば変数kiを0にリセットし、変数kjをインクリメントし(S2408)、変数kjと口周辺領域702の高さmHを比較して(S2409)、kj＜mHならば処理をステップS2402に戻す。そして、kj=mHになると、CPU104は、彩度補正を終了する。
【００６５】
●染み領域の検出(S2009)
図13は染み領域の検出(S2009)の詳細を説明するフローチャートである。
【００６６】
CPU104は、変数riを0に初期化する(S2501)。なお、変数riは、図8に示す歯画像群501の検出において分割した領域を順に参照する際のループ変数である。
【００６７】
次に、CPU104は、歯画像群501の平均輝度aveYを算出する(S2502)。詳細には、歯画像群501の検出（図8）におけるステップS2207で保存した歯画像群テーブルに記録したIDと、ステップ2203で出力したIDマップデータを参照して、歯画像群501に含まれる画素を抽出する。そして、式(12)に示した計算式を用いて、抽出した画素のRGB値に対応する輝度値Yを計算し、抽出した画素の輝度値Yの合計を抽出した画素数で割って平均輝度aveYにする。
【００６８】
次に、CPU104は、変数riをインクリメントし(S2503)、歯画像群テーブルを参照してID=riの領域（以下、領域ri）が歯画像群501に含まれるか否かを判定する(S2504)。領域riが歯画像群501に含まれない場合は処理をステップS2508に進める。
【００６９】
領域riが歯画像群501に含まれる場合、CPU104は、領域riの平均輝度aveY[ri]を算出する(S2505)。詳細には、式(12)に示した計算式を用いて、図11に示す平均彩度の算出で計算した領域riのRGB平均値aveR[ri]、aveG[ri]、aveB[ri]から領域riの平均輝度aveY[ri]を算出する。
【００７０】
なお、説明の都合上、ステップS2502やS2505において、歯画像群501や一部領域の平均輝度を計算するように説明した。しかし、ステップS2502やS2505に先んじる、彩度補正処理(S2008)において、歯画像群501や一部領域の平均輝度を計算してRAM106の所定領域に格納しておいてもよい。
【００７１】
次に、CPU104は、領域riが染み領域か否かを判定する(S2506)。本実施例では、式(13)に示すように、領域riの平均輝度aveY[ri]が歯画像群501の平均輝度aveYに対して所定の比率rsY以下であれば染み領域と判定する。CPU104は、領域riが染み領域ではないと判定した場合は、処理をステップS2508に進める。
aveY[ri] ≦ aveY・rsY      …(13)
ここで、0＜rsY＜1
【００７２】
領域riが染み領域であると判定した場合、CPU104は、歯画像群テーブルの領域riに対応するレコードに、染み領域を表す情報と、検出した順番を示す情報を記録する。さらに、検出した染み領域のカウント値（染み総数nS）をRAM106に格納する(S2507)。
【００７３】
次に、CPU104は、変数riと総領域数nRを比較して、歯画像群501の検出において分割した全領域について、染み領域か否かの判定を行ったか否かを判定する(S2508)。つまり、ri＜nRの場合は、処理をステップ2503に戻し、ri=nRの場合は染み領域の検出を終了する。
【００７４】
なお、歯画像群501の中で輝度が低い領域を染み領域として検出する例を説明したが、歯画像群501の中で色相が異なる領域を染み領域として検出してもよい。ただし、色相に基づき染み領域を検出する場合は、染み領域の代表色相を白色画素の代表色相に近付ける色相補正処理を行う。勿論、輝度または色相を対象として染み領域を検出するだけでなく、輝度と色相の双方を対象として染み領域を検出してもよい。
【００７５】
●染み領域の補正(S2011)
図14は染み領域の補正処理(S2011)の詳細を説明するフローチャートである。
【００７６】
CPU104は、歯画像群テーブルに記録されたnM番目に検出した染み領域に外接矩形を設定する(S2601)。外接矩形の設定は、IDマップデータからnM番目の染み領域に含まれる画素のX軸方向の最大、最小座標値Xmax、Xmin、Y軸方向の最大、最小座標値Ymax、Yminを取得することで行う。
【００７７】
図15は染み領域に設定する外接矩形を説明する図である。染み領域801の外接矩形の左上頂点CA(gx1, gy1)は(Xmin, Ymin)、右下頂点CB(gx2, gy2)は(Xmax, Ymax)に対応する。
【００７８】
次に、CPU104は、nM番目の染み領域が存在する歯画像（以下、補正対象歯画像）を検出する(S2602)。詳細は後述するが、歯画像の境界からは比較的大きなエッジを検出することができる。そこで、染み領域の外接矩形上の一点から外向きにエッジ検出を行い、エッジを検出した画素を歯画像の境界とする。エッジ検出のための画素走査をX軸方向、Y軸方向に行い、補正対象歯画像を検出する。
【００７９】
次に、CPU104は、詳細は後述するが、補正対象歯画像の染み領域を除く領域から白色画素の特徴量（以下、目標白色）を取得し(S2603)、染み領域の輝度を補正して(S2604)、nM番目の染み領域の補正を終了する。
補正対象歯画像の検出(S2602)
【００８０】
図16は補正対象歯画像の検出(S2602)を説明するフローチャートである。
【００８１】
CPU104は、変数rtを0に初期化する(S2701)。なお、変数rtは、エッジの走査方向をカウントするための変数である。
【００８２】
次に、CPU104は、染み領域の外接矩形の各辺の中点を決定する(S2702)。図17は外接矩形の各辺の中点を示す図である。中点gc1、gc2、gc3、gc4の座標値は、外接矩形の二頂点CA、CBの座標値から式(14)によって決定することができる。
gc1(gx1, gy1 + (gy2 - gy1)/2)
gc2(gx1 + (gx2 - gx1)/2, gy2)
gc3(gx2, gy1 + (gy2 - gy1)/2)      …(14)
gc4(gx1 + (gx2 - gx1)/2, gy1)
【００８３】
図18はエッジの検出方向を示す図である。つまり、中点gc1から辺に直交する方向、かつ、外接矩形の外向きに画素を走査して、エッジを検出する。他の中点gc2、gc3、gc4についても同様である。
【００８４】
次に、CPU104は、変数rtをインクリメントし(S2703)、変数rtに対応するエッジの走査条件を取得する(S2704)。図19は走査条件を示すテーブルの一例を示す図である。なお、走査条件は予め定められている。図19に示すように、変数rtに応じてgc1→gc2→gc3→gc4の順に走査の起点を変える。走査方向は、走査起点から走査する方向を示し、(-1, 0)はX軸の負方向に走査し、Y軸方向の走査は行わないことを示している。また、エッジを検出した時点で走査は終了するが、エッジが検出できない場合もある。そこで、走査終了条件により、最大の走査範囲を規定し、エッジが検出できない場合に走査を終了する。
【００８５】
次に、CPU104は、変数mを0に初期化する(S2705)。なお、変数mは走査量（画素数）を示す。
【００８６】
次に、CPU104は、走査条件に従い画素を移動し(S2706)、エッジを検出したか否かを判定する(S2707)。エッジを検出した場合は処理をステップS2711に進める。また、エッジを検出しなかった場合は変数mをインクリメントし(S2708)、変数mと走査終了条件を比較する(S2709)。例えば、変数rt=1の場合の走査終了条件をX_1とすると、m＜X_1の場合は処理をステップS2706に戻し、m=X_1の場合は、走査終了条件に達したとして、変数mを0にリセットし(S2710)、処理をステップS2711に進める。変数mのリセットは、走査終了画素を起点画素に戻すことに相当するが、この理由は後述する。
【００８７】
なお、エッジの検出は、例えば、原画像から輝度成分のみの画像データを作成し、公知のsobelフィルタなどを用いて行えばよい。
【００８８】
次に、CPU104は、走査終了画素（エッジ検出位置）を示す変数mの値をRAM106の所定領域に格納する(S2711)。図20はエッジ検出位置を示す図である。例えば、変数rt=1の場合、走査の起点は座標gc1(gx1, gy1+(gy2 - gy1)/2)、変数mの1カウント当り一画素移動するとすれば、エッジの検出位置E1は式(15)のようになる。
E1(gx1 - m, gy1 + (gy2 - gy1)/2)      …(15)
【００８９】
同様に起点をgc2、gc3、gc4とする場合のエッジの検出位置E2、E3、E4は式(16)のようになる。
E2(gx1+(gx2 - gx1)/2, gy2 + m)
E3(gx2 + m, gy1 + (gy2 - gy1)/2)      …(16)
E4(gx1 + (gx2 - gx1)/2, gy1 - m)
【００９０】
もし、エッジを検出せずに、走査終了条件に達した場合は、前述したように、変数mを0にリセットする。例えば、図21はgc1を起点とするX軸の負方向の走査においてエッジを検出できなかった場合を示す図であるが、この場合、エッジ検出位置E1として起点gc1の座標(gx1, gy1 + (gy2 - gy1)/2)が格納される。その結果、補正対象歯画像の領域が隣接する歯や歯以外の画像領域に及ぶことはない。
【００９１】
次に、CPU104は、変数rtを調べて四方向のエッジの検出が終了したか否かを判定する(S2712)。そして、rt＜4の場合は処理をステップS2706に戻して残る方向のエッジ検出を行い、rt=4nの場合は四方向のエッジ検出が終了したとして処理をステップS2713に進める。
【００９２】
四方向のエッジ検出が終了すると、CPU104は、エッジ検出位置を示す各方向のm値に基づき、補正対象歯画像の領域を決定し(S2713)、補正対象歯画像の検出を終了する。
【００９３】
図22は補正対象歯画像の領域を説明する図である。つまり、エッジ検出位置E1、E3を通る垂直線およびE2、E4を通る水平線が囲む領域を補正対象歯画像として、当該領域の二頂点sA、sBを計算する。
sA(E1x, E4y) = sA(gx1 - m1, gy1 - m4)
sB(E3x, E2y) = sB(gx2 + m3, gy2 + m2)      (17)
ここで、m1はrt=1における変数mの最終値、
m2はrt=2における変数mの最終値、
m3はrt=3における変数mの最終値、
m4はrt=4における変数mの最終値
【００９４】
図23はX軸の負方向でエッジが検出できなかった場合の補正対象歯画像の決定領域を示す図である。この場合、補正対象歯画像の領域は、染み領域を含む歯画像全体を含まない。しかし、染み領域を違和感なく補正することができる白色（以下、目標白色）が取得できればよいので、図23に示すような決定領域でも補正処理は可能である。
目標白色の取得(S2603)
【００９５】
図24は目標白色の取得(S2603)を説明するフローチャートである。なお、以下では、補正対象歯画像の決定領域の二頂点をsA(sX1, sY1)、sB(sX2, sY2)として説明する。
【００９６】
CPU104は、変数siをsX1に、変数sjをsY1に、変数sumSY、wnPを0にそれぞれ初期化する(S2801)。なお、変数si、sjは、補正対象歯画像の決定領域内の画素をX、Y軸方向に走査する際のループ変数である。また、変数sumSYは決定領域内の白色画素の輝度値の合計を示し、変数wnPは決定領域内の白色画素をカウント値を示す。
【００９７】
次に、CPU104は、変数siをインクリメントし(S2802)、IDマップデータから画素(si, sj)の領域IDを取得する(S2803)。そして、歯画像群テーブルを参照して、取得した領域IDから画素(si, sj)が歯画像群501に含まれるか否か(S2804)、画素(si, sj)が染み領域に含まれるか否か(S2805)を判定する。画素(si, sj)が歯画像群501に含まれない、または、染み領域に含まれる場合は、処理をステップS2809に進める。
【００９８】
画素(si, sj)が歯画像群501に含まれ、かつ、染み領域に含まれない場合、CPU104は、変数wnPをインクリメントし(S2806)、画素(si, sj)のRGB値を取得する(S2807)。そして、式(12)によって画素(si, sj)の輝度値sYを計算して変数sumSYに加算する(S2808)。
【００９９】
次に、CPU104は、変数siと決定領域の右下頂点のX座標値sX2を比較して(S2809)、si＜sX2ならば処理をステップS2802に戻し、si=sX2ならば変数siをsX1にリセットし、変数sjをインクリメントする(S2810)。そして、変数sjと決定領域の右下頂点の座標値sY2を比較して(S2811)、sj＜sY2ならば処理をステップS2802に戻す。また、sj=sY2ならば決定領域に含まれる、染み領域を除く歯画像の全画素について輝度値を取得したとして、処理をステップS2812に進める。
【０１００】
そして、CPU104は、式(18)により、決定領域に含まれる、染み領域を除く歯画像の平均輝度aveWを目標白色として計算し(S2812)、目標白色の取得を終了する。
aveW = sumSY/wnP      …(18)
染み領域の補正(S2604)
【０１０１】
図25は染み領域の輝度補正(S2604)を説明するフローチャートである。
【０１０２】
CPU104は、変数siをsX1に、変数sjをsY1にそれぞれ初期化し(S2901)、変数siをインクリメントし(S2902)、IDマップデータから画素(si, sj)の領域IDを取得する(S2903)。そして、歯画像群テーブルを参照して、画素(si, sj)が染み領域に含まれるか否かを判定し(S2904)、画素(si, sj)が染み領域に含まれない場合は、処理をステップS2908に進める。
【０１０３】
画素(si, sj)が染み領域に含まれる場合、CPU104は、画素(si, sj)に対応する原画像の画素のRGB値を取得する(S2905)。なお、画素(si, sj)に対応する原画像の画素位置は式(2)によって計算する。そして、式(12)によって画素(si, sj)の輝度値hYを計算する(S2906)。
【０１０４】
次に。CPU104は、輝度値hYを調整する(S2907)。つまり、輝度値hYをステップS2812（図24）で取得した目標白色（平均輝度aveW）に近付けるように調整する。この調整よって、染み領域を周辺領域と比べて違和感なく補正することができる。その際、染み領域の画素(si, sj)に対応する原画像の画素の輝度を補正（調整）する。
【０１０５】
図26は輝度値hYの調整用の輝度トーンカーブの一例を示す図である。つまり、注目画素の輝度が目標白色（平均輝度aveW）よりも小さい場合、輝度を上げるように注目画素の輝度値を調整する。なお、目標白色（平均輝度aveW）に基づき図26に示すようなカーブの変換関数を決定して輝度値hYを調整すればよい。
【０１０６】
図27は輝度トーンカーブの作成方法を説明する図である。例えば、図27に示すように、入力輝度方向、出力輝度方向それぞれに平均輝度aveWに対する比率ir、orを決めておき、点Zの位置を決定する。そして、原点Oと点Zを通る直線aと、点Zと平均輝度aveに対応する点Hを通る直線bを決定し、直線a、bによって変換関数を近似する。勿論、近似直線は二本に限らず、三本以上でもよい。
【０１０７】
次に、CPU104は、変数siと決定領域の右下頂点のX座標値sX2を比較して(S2908)、si＜sX2ならば処理をステップS2902に戻し、si=sX2ならば変数siをsX1にリセットし、変数sjをインクリメントする(S2909)。そして、変数sjと決定領域の右下頂点の座標値sY2を比較して(S2910)、sj＜sY2ならば処理をステップS2902に戻す。また、sj=sY2ならば染み領域の補正を終了する。
【０１０８】
このように、歯画像の染み、黄ばみ、ルージュなどが付着した補正領域を検出し、補正領域を彩度補正する。さらに、彩度補正後の歯画像から染み領域を検出し、染み領域周辺の歯画像から目標白色を決定して染み領域の輝度を補正する。従って、歯画像の染み、黄ばみ、ルージュなどが付着した補正領域を、その周辺の歯画像と違和感なく白く補正することができる。
【０１０９】
［変形例］
上記では、変換関数（輝度トーンカーブ）を決定して、輝度を補正する例を説明したが、代表的な輝度トーンカーブを予め複数用意し、目標白色（平均輝度aveW）に応じて一つの輝度トーンカーブを選択して輝度値hYを調整してもよい。
【０１１０】
あるいは、染み領域の平均輝度aveSと平均輝度aveWの比率aveW/aveSを計算し、この比率を染み領域内の画素の輝度値に掛けて、染み領域を補正してもよい。
【０１１１】
あるいは、染み領域の平均輝度aveSと平均輝度aveWの差分を計算し、その差分を所定の比率で縮めるように染み領域内の画素の輝度値を補正してもよい。
【０１１２】
あるいは、染み領域の画素の輝度と平均輝度aveWの差分を計算し、その差分を所定の比率で縮めるように染み領域内の画素の輝度値を補正してもよい。
【０１１３】
また、上記では、染み領域を除く歯画像の平均輝度aveWを目標白色にする例を示したが、染み領域を除く歯画像の最も頻度が高い画素の輝度値（最頻値）、または、輝度分布の中央値（輝度値）などの統計値を用いてもよい。
【０１１４】
［他の実施例］
なお、本発明は、複数の機器（例えばコンピュータ、インタフェイス機器、リーダ、プリンタなど）から構成されるシステムに適用しても、一つの機器からなる装置（例えば、複写機、ファクシミリ装置、制御装置など）に適用してもよい。
【０１１５】
また、本発明の目的は、上記実施例の機能を実現するコンピュータプログラムを記録した記憶媒体をシステムまたは装置に供給し、そのシステムまたは装置のコンピュータ（CPUやMPU）が前記コンピュータプログラムを実行することでも達成される。この場合、記憶媒体から読み出されたソフトウェア自体が上記実施例の機能を実現することになり、そのコンピュータプログラムと、そのコンピュータプログラムを記憶する、コンピュータが読み取り可能な記憶媒体は本発明を構成する。
【０１１６】
また、前記コンピュータプログラムの実行により上記機能が実現されるだけではない。つまり、そのコンピュータプログラムの指示により、コンピュータ上で稼働するオペレーティングシステム(OS)および/または第一の、第二の、第三の、…プログラムなどが実際の処理の一部または全部を行い、それによって上記機能が実現される場合も含む。
【０１１７】
また、前記コンピュータプログラムがコンピュータに接続された機能拡張カードやユニットなどのデバイスのメモリに書き込まれていてもよい。つまり、そのコンピュータプログラムの指示により、第一の、第二の、第三の、…デバイスのCPUなどが実際の処理の一部または全部を行い、それによって上記機能が実現される場合も含む。
【０１１８】
本発明を前記記憶媒体に適用する場合、その記憶媒体には、先に説明したフローチャートに対応または関連するコンピュータプログラムが格納される。
【図面の簡単な説明】
【０１１９】
【図１】実施例1の画像処理装置の構成例を示すブロック図、
【図２】画像処理を説明するフローチャート、
【図３】顔画像の検出結果例を示す図、
【図４】顔画像の抽出の詳細を示すフローチャート、
【図５】顔画像の四頂点の座標値を取得した例を示す図、
【図６】顔矩形の回転を説明する図、
【図７】歯画像群を説明する図、
【図８】歯画像群の検出を説明するフローチャート、
【図９】顔矩形における口周辺領域の平均的な位置を説明する図、
【図１０】口周辺領域の抽出を説明する図、
【図１１】各領域の平均彩度の算出の詳細を示すフローチャート、
【図１２】彩度補正の詳細を説明するフローチャート、
【図１３】染み領域の検出の詳細を説明するフローチャート、
【図１４】染み領域の補正処理の詳細を説明するフローチャート、
【図１５】染み領域に設定する外接矩形を説明する図、
【図１６】補正対象歯画像の検出を説明するフローチャート、
【図１７】外接矩形の各辺の中点を示す図、
【図１８】エッジの検出方向を示す図、
【図１９】走査条件を示すテーブルの一例を示す図、
【図２０】エッジ検出位置を示す図、
【図２１】gc1を起点とするX軸の負方向の走査においてエッジを検出できなかった場合を示す図、
【図２２】補正対象歯画像の領域を説明する図、
【図２３】X軸の負方向でエッジが検出できなかった場合の補正対象歯画像の決定領域を示す図、
【図２４】目標白色の取得を説明するフローチャート、
【図２５】染み領域の輝度補正を説明するフローチャート、
【図２６】輝度値hYの調整用の輝度トーンカーブの一例を示す図、
【図２７】輝度トーンカーブの作成方法を説明する図である。
【図１】
2009037414.tif 000003
【図２】
2009037414.tif 000004
【図３】
2009037414.tif 000005
【図４】
2009037414.tif 000006
【図５】
2009037414.tif 000007
【図６】
2009037414.tif 000008
【図７】
2009037414.tif 000009
【図８】
2009037414.tif 000010
【図９】
2009037414.tif 000011
【図１０】
2009037414.tif 000012
【図１１】
2009037414.tif 000013
【図１２】
2009037414.tif 000014
【図１３】
2009037414.tif 000015
【図１４】
2009037414.tif 000016
【図１５】
2009037414.tif 000017
【図１６】
2009037414.tif 000018
【図１７】
2009037414.tif 000019
【図１８】
2009037414.tif 000020
【図１９】
2009037414.tif 000021
【図２０】
2009037414.tif 000022
【図２１】
2009037414.tif 000023
【図２２】
2009037414.tif 000024
【図２３】
2009037414.tif 000025
【図２４】
2009037414.tif 000026
【図２５】
2009037414.tif 000027
【図２６】
2009037414.tif 000028
【図２７】
2009037414.tif 000029