(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0020】
以下、本発明の実施の形態について、図面を用いて説明する。
【0021】
まず、本発明の一実施の形態に係る画像形成装置としてのMFP(Multifunction Peripheral)の構成について説明する。
【0022】
図1は、本実施の形態に係るMFP10のブロック図である。
【0023】
図1に示すように、MFP10は、種々の操作が入力されるボタンなどの入力デバイスである操作部11と、種々の情報を表示するLCD(Liquid Crystal Display)などの表示デバイスである表示部12と、用紙などの記録媒体に印刷を実行する印刷デバイスであるプリンター13と、原稿から画像を読み取る読取デバイスであるスキャナー14と、図示していない外部のファクシミリ装置と公衆電話回線などの通信回線経由でファックス通信を行うファックスデバイスであるファックス通信部15と、LAN(Local Area Network)、インターネットなどのネットワーク経由で外部の装置と通信を行うネットワーク通信デバイスであるネットワーク通信部16と、各種の情報を記憶する半導体メモリー、HDD(Hard Disk Drive)などの不揮発性の記憶デバイスである記憶部17と、MFP10全体を制御する制御部18とを備えている。
【0024】
記憶部17は、色を変換する色変換プログラム17aを記憶可能である。色変換プログラム17aは、MFP10の製造段階でMFP10にインストールされていても良いし、SDカード、USB(Universal Serial Bus)メモリーなどの外部の記憶媒体からMFP10に追加でインストールされても良いし、ネットワーク上からMFP10に追加でインストールされても良い。
【0025】
制御部18は、例えば、CPU(Central Processing Unit)と、プログラムおよび各種のデータを記憶しているROM(Read Only Memory)と、CPUの作業領域として用いられるRAM(Random Access Memory)とを備えている。CPUは、記憶部17またはROMに記憶されているプログラムを実行する。
【0026】
制御部18は、記憶部17に記憶されている色変換プログラム17aを実行することによって、外部から入力された印刷データに含まれる画像(以下「入力画像」と言う。)における近似色の集合であるクラスターの重心(以下「クラスター重心」と言う。)を取得する重心取得手段18a、入力画像を出力画像に変換するための色変換情報としての色変換リストを生成する色変換情報生成手段18b、および、色変換情報生成手段18bによって生成された色変換リストを用いて入力画像における色を変換して出力画像を生成する出力画像生成手段18cとして機能する。
【0027】
次に、MFP10の動作について説明する。
【0028】
図2は、外部から入力された印刷データに基づいた印刷を実行する場合のMFP10の動作のフローチャートである。
【0029】
図2に示すように、重心取得手段18aは、印刷データに含まれる画像としての入力画像内のRGB値(以下「入力値」と言う。)を取得する入力値取得処理を実行する(S101)。
【0030】
次いで、重心取得手段18aは、S101において取得された入力値に基づいて、入力画像におけるドミナントカラー(支配色)の代表色、すなわち、入力画像の特徴色として、クラスター重心を取得する特徴色取得処理を実行する(S102)。
【0031】
次いで、色変換情報生成手段18bおよび出力画像生成手段18cは、S102において求められた代表色に応じて入力画像の色を調整して出力画像を生成する色調整処理を実行する(S103)。
【0032】
次いで、出力画像生成手段18cは、S103において生成された出力画像をプリンター13によって印刷して(S104)、
図2に示す動作を終了する。
【0033】
図3は、S101の入力値取得処理のフローチャートである。
【0034】
図3に示すように、重心取得手段18aは、印刷データからカラー画像である入力画像、すなわち、色を再現する部分を取得する(S131)。
【0035】
次いで、重心取得手段18aは、S131において取得した入力画像における画素毎のRGB値としての入力値を取得して(S132)、
図3に示す処理を終了する。
【0036】
図4は、S102の特徴色取得処理のフローチャートである。
【0037】
図4に示すように、重心取得手段18aは、S132において画素毎に取得された入力値に基づいて、入力画像におけるRGB値毎の頻度を示すデータを求める(S161)。S161の処理によって、S132において画素毎に取得された入力値から、各画素を識別するための情報が削除されて、色情報のみとなる。したがって、後続の処理において扱われるデータ量を低減することができる。
【0038】
次いで、重心取得手段18aは、S161において求めたデータから頻度が0のRGB値を省くことによって、入力画像におけるRGB値と、頻度との関係を示すデータ列MLを生成する(S162)。
【0039】
図5は、S162において生成されたデータ列MLを示すグラフの一例である。
【0040】
図5に示すように、S162において生成されたデータ列MLは、頻度とは無関係の特定の規則でRGB値が並べられている。
【0041】
図4に示すように、重心取得手段18aは、S162の処理の後、S162において生成したデータ列MLに基づいて、クラスター重心の初期値を算出する重心初期値算出処理を実行する(S163)。
【0042】
次いで、重心取得手段18aは、S163において算出した初期値を使用して、クラスター重心を求めるクラスター分析処理を実行して(S164)、
図4に示す処理を終了する。
【0043】
図6は、S163の重心初期値算出処理のフローチャートである。
【0044】
図6に示すように、重心取得手段18aは、S162において生成されたデータ列MLを、頻度をキーに降順にソートする(S201)。
【0045】
図7は、S201においてソートされたデータ列MLを示すグラフの一例である。
【0046】
図7に示すデータ列MLは、
図5に示すデータ列がS201の処理によってソートされたものである。
図7に示すように、S201においてソートされたデータ列MLは、頻度の大きいRGB値から頻度の小さいRGB値へ向かう順番でRGB値が並べられている。
【0047】
図6に示すように、重心取得手段18aは、S201の処理の後、データ列MLのデータ数NL、すなわち、データ列MLにおけるRGB値の種類の数を求める(S202)。
【0048】
以下、S201においてソートされたデータ列MLの各RGB値を変数jを用いてRGB値L
jとして表す。ここで、変数jは、1以上の整数になることが可能である。例えば、S201においてソートされたデータ列MLの先頭のRGB値、すなわち、頻度が最も大きいRGB値は、RGB値L
1である。また、S201においてソートされたデータ列MLの最後のRGB値、すなわち、頻度が最も小さいRGB値は、RGB値L
NLである。
【0049】
また、登録される各クラスター重心を変数iを用いてクラスター重心A
iとして表す。ここで、変数iは、1以上の整数になることが可能である。
【0050】
また、RGB値L
jをクラスター重心A
iとして登録するか否かの判断に使用される登録フラグを変数iを用いて登録フラグF
iとして表す。登録フラグF
iは、Trueと、Falseとの何れかの値になることが可能である。登録フラグF
iがTrueである状態は、対象のRGB値L
jがクラスター重心の候補である状態を示している。一方、登録フラグF
iがFalseである状態は、対象のRGB値L
jがクラスター重心の候補ではない状態を示している。
【0051】
重心取得手段18aは、S202の処理の後、変数iおよび変数jに1を代入する(S203)。
【0052】
次いで、重心取得手段18aは、RGB値L
jをクラスター重心A
iとして登録する(S204)。すなわち、重心取得手段18aは、データ列MLにおいて頻度が最も大きいRGB値を1つ目のクラスター重心として登録する。
【0053】
重心取得手段18aは、S204の処理の後、変数i、すなわち、クラスター重心の登録数が一定数Ncに達したか否かを判断する(S205)。
【0054】
重心取得手段18aは、クラスター重心の登録数が一定数Ncに達していないとS205において判断すると、変数jがS202において求めたデータ数NLであるか否かを判断する(S206)。
【0055】
重心取得手段18aは、変数jの値がデータ数NLではない、すなわち、S201においてソートされたデータ列MLの最後のRGB値まで処理を終了していないとS206において判断すると、変数jに1を加算する(S207)。
【0056】
次いで、重心取得手段18aは、登録フラグF
iをTrueに初期化する(S208)。
【0057】
重心取得手段18aは、S208の処理の後、RGB値L
jと、登録済みのクラスター重心との色空間における位置関係に基づいて登録フラグF
iを更新する登録フラグ更新処理を実行する(S209)。
【0058】
次いで、重心取得手段18aは、登録フラグF
iがTrueであるか否かを判断する(S210)。
【0059】
重心取得手段18aは、登録フラグF
iがTrueであるとS210において判断すると、変数iに1を加算して(S211)、S204の処理を実行する。すなわち、重心取得手段18aは、RGB値L
jを追加のクラスター重心として登録する。
【0060】
重心取得手段18aは、登録フラグF
iがTrueではないとS210において判断すると、S206の処理を実行する。
【0061】
重心取得手段18aは、クラスター重心の登録数が一定数Ncに達したとS205において判断するか、変数jの値がデータ数NLである、すなわち、S201においてソートされたデータ列MLの最後のRGB値まで処理を終了したとS206において判断すると、
図6に示す処理を終了する。すなわち、重心取得手段18aは、クラスター重心の登録数が一定数Ncに達するか、データ列MLの最後のRGB値まで処理を終了すると、クラスター重心の登録を終了する。なお、10個など、ある程度の個数のクラスター重心によって十分な精度の色再現が可能であるので、クラスター重心の登録数は、一定数Ncを上限としている。
【0062】
図8は、S209の登録フラグ更新処理のフローチャートである。
【0063】
図8に示すように、重心取得手段18aは、RGB値L
jに対応するLab値を算出する(S231)。ここで、重心取得手段18aは、入力画像にプロファイルが含まれている場合、入力画像に含まれるプロファイルに応じて、RGB値L
jに対応するLab値を算出する。一方、重心取得手段18aは、入力画像にプロファイルが含まれていない場合、RGB値L
jをsRGB(standard RGB)値に変換した後、このsRGB値のLab値を算出することによって、RGB値L
jに対応するLab値を算出する。
【0064】
重心取得手段18aは、S231の処理の後、RGB色空間におけるRGB値L
jの色相角を算出する(S232)。ここで、重心取得手段18aは、RGB色空間において白および黒を通る直線としての中心軸まわりの角度として、RGB値L
jの色相角を算出する。
【0065】
図9は、S232において算出される色相角を示す図である。
【0066】
図9は、白および黒を通る直線の延在方向にRGB色空間を観察した場合の図である。Redの色相角を0°として、Yellow、Green、Cyan、Blue、Magentaをそれぞれ60°、120°、180°、240°(−120°)、300°(−60°)とする。
【0067】
図8に示すように、重心取得手段18aは、S232の処理の後、変数kに1を代入する(S233)。ここで、変数kは、1以上の整数になることが可能である。
【0068】
重心取得手段18aは、S233の処理の後、S231の処理と同様に、クラスター重心A
kに対応するLab値を算出する(S234)。
【0069】
次いで、重心取得手段18aは、S231において算出したLab値と、S234において算出したLab値とに基づいて、RGB値L
jと、クラスター重心A
kとの色差ΔEを算出する(S235)。
【0070】
次いで、重心取得手段18aは、S235において算出した色差ΔEが特定の色差E1以下であるか否かを判断する(S236)。
【0071】
重心取得手段18aは、色差ΔEが色差E1より大きいとS236において判断すると、S235において算出した色差ΔEが特定の色差E2以上であるか否かを判断する(S237)。ここで、色差E2は、色差E1より大きい。
【0072】
重心取得手段18aは、色差ΔEが色差E2より小さいとS237において判断すると、S232の処理と同様に、RGB色空間におけるクラスター重心A
kの色相角を算出する(S238)。
【0073】
次いで、重心取得手段18aは、S232において算出した色相角と、S238において算出した色相角とに基づいて、RGB値L
jと、クラスター重心A
kとの角度差分Degを算出する(S239)。ここで、角度差分Degは、S232において算出した色相角と、S238において算出した色相角との差の絶対値である。
【0074】
重心取得手段18aは、S239の処理の後、S232において算出した色相角と、S238において算出した色相角との両方が緑色付近の特定の角度範囲21(
図10参照。)内に存在するか否かを判断する(S240)。
【0075】
図10は、
図8に示す処理において特別の補正が行われる角度範囲の一例を示す図である。
【0076】
図10に示すように、緑色付近の特定の角度範囲21は、60°〜140°の角度範囲である。角度範囲21は、植物の葉の色のための緑色を含む緑色付近の角度範囲である。葉の色としては、互いに微妙に異なる様々な緑色付近の色が存在する。しかしながら、人間は、通常、それらの微妙に異なる様々な色を略同一の色として認識する。すなわち、多数の人間が葉の理想的な色として記憶している色、すなわち、葉の記憶色が存在する。角度範囲21は、葉の記憶色を含む角度範囲であり、範囲内に含まれる2色が同一のクラスターの色として扱われ易くするための範囲である。
【0077】
青付近の特定の角度範囲22は、200°(−160°)〜230°(−130°)の角度範囲である。角度範囲22は、空の色のための青色付近の角度範囲である。空の色としては、互いに微妙に異なる様々な青色付近の色が存在する。しかしながら、人間は、通常、それらの微妙に異なる様々な色を略同一の色として認識する。すなわち、多数の人間が空の理想的な色として記憶している色、すなわち、空の記憶色が存在する。角度範囲22は、空の記憶色を含む角度範囲であり、範囲内に含まれる2色が同一のクラスターの色として扱われ易くするための範囲である。
【0078】
図8に示すように、重心取得手段18aは、S232において算出した色相角と、S238において算出した色相角との両方が角度範囲21内に存在するとS240において判断すると、S239において算出した角度差分Degに係数0.25を掛けて新たな角度差分Degとする(S241)。なお、係数0.25は、一例であり、設計次第である。
【0079】
重心取得手段18aは、S232において算出した色相角と、S238において算出した色相角との少なくとも一方が角度範囲21内に存在しないとS240において判断すると、S232において算出した色相角と、S238において算出した色相角との両方が青色付近の特定の角度範囲22(
図10参照。)内に存在するか否かを判断する(S242)。
【0080】
重心取得手段18aは、S232において算出した色相角と、S238において算出した色相角との両方が角度範囲22内に存在するとS242において判断すると、S239において算出した角度差分Degに係数0.8を掛けて新たな角度差分Degとする(S243)。なお、係数0.8は、一例であり、設計次第である。
【0081】
重心取得手段18aは、S232において算出した色相角と、S238において算出した色相角との少なくとも一方が角度範囲22内に存在しないとS242において判断するか、S241またはS243の処理を実行すると、角度差分Degが特定の角度差分Deg1以下であるか否かを判断する(S244)。
【0082】
重心取得手段18aは、色差ΔEが色差E2以上であるとS237において判断するか、角度差分Degが角度差分Deg1より大きいとS244において判断すると、変数kの値と、変数iの値とが同一であるか否かを判断する(S245)。
【0083】
重心取得手段18aは、変数kの値と、変数iの値とが同一ではないとS245において判断すると、変数kに1を加算して(S246)、S234の処理を実行する。
【0084】
重心取得手段18aは、色差ΔEが色差E1以下であるとS236において判断するか、角度差分Degが角度差分Deg1以下であるとS244において判断すると、登録フラグF
iをFalseに変更して(S247)、
図8に示す処理を終了する。
【0085】
重心取得手段18aは、変数kの値と、変数iの値とが同一であるとS245において判断すると、
図8に示す処理を終了する。
【0086】
図11は、
図8に示す処理における判断基準を示す図である。
【0087】
図11に示すように、登録済みのクラスター重心A
kの何れかに対して、色差ΔEが色差E1以下である場合(S236でYES)には、RGB値L
jは、そのクラスター重心A
kと近似色であると考えられるので、そのクラスター重心A
kと同一のクラスターに所属すべきであり、新たなクラスター重心の候補とはされない(S247)。また、登録済みのクラスター重心A
kの何れかに対して、色差ΔEが色差E1より大きく色差E2より小さくて角度差分Degが角度差分Deg1以下である場合(S244でYES)にも、RGB値L
jは、そのクラスター重心A
kと明度および彩度の少なくとも一方が多少異なるものの、色相が近いため、人間の感覚として、そのクラスター重心A
kと近似色であると考えられても良いので、そのクラスター重心A
kと同一のクラスターに所属すべきであり、新たなクラスター重心の候補とはされない(S247)。
【0088】
一方、登録済みのクラスター重心A
kの何れに対しても、色差ΔEが色差E2以上である(S237でYES)か、色差ΔEが色差E1より大きく色差E2より小さくて角度差分Degが角度差分Deg1より大きい(S244でYES)場合には、RGB値L
jは、登録済みのクラスター重心A
kの何れとも異なるクラスターに所属すべきであるので、新たなクラスター重心の候補とされる(S208)。なお、角度差分Degは、RGB値L
jおよびクラスター重心A
kの両方の色相角が角度範囲21または角度範囲22に含まれる場合に小さくされる(S241またはS243)。すなわち、角度差分Deg1は、RGB値L
jおよびクラスター重心A
kの両方の色相角が角度範囲21または角度範囲22に含まれる場合に、RGB値L
jおよびクラスター重心A
kの少なくとも一方の色相角が角度範囲21および角度範囲22の何れにも含まれない場合と比較して実質的に大きい。
【0089】
以上において説明したように、
図6に示す重心初期値算出処理においては、同一のクラスターに所属すべきRGB値L
jが複数存在する場合、そのうち最も頻度が高いRGB値L
jがクラスター重心として登録される。登録されるクラスター重心の個数、すなわち、クラスターの個数は、iである。
【0090】
図12は、S164のクラスター分析処理のフローチャートである。
【0091】
図12に示すように、重心取得手段18aは、変数kに1を代入する(S261)。
【0092】
次いで、重心取得手段18aは、データ列MLのRGB値のうちクラスターC
kに所属しているRGB値の個数(以下「所属数」と言う。)として、クラスター重心A
kの更新前の所属数(以下「更新前所属数」と言う。)Nb
kと、クラスター重心A
kの更新後の所属数(以下「更新後所属数」と言う。)Na
kとを0に初期化する(S262)。ここで、クラスターC
kは、クラスター重心A
kが所属するクラスターである。
【0093】
重心取得手段18aは、S262の処理の後、変数kの値と、変数iの値とが同一であるか否かを判断する(S263)。
【0094】
重心取得手段18aは、変数kの値と、変数iの値とが同一ではないとS263において判断すると、変数kに1を加算して(S264)、S262の処理を実行する。
【0095】
重心取得手段18aは、変数kの値と、変数iの値とが同一であるとS263において判断すると、変数jに1を代入する(S265)。
【0096】
次いで、重心取得手段18aは、RGB値L
jが所属するクラスターC
kを決定する所属クラスター決定処理を実行する(S266)。
【0097】
次いで、重心取得手段18aは、S266の処理の後、変数jの値がデータ数NLであるか否かを判断する(S267)。
【0098】
重心取得手段18aは、変数jの値がデータ数NLではないとS267において判断すると、変数jに1を加算して(S268)、S266の処理を実行する。
【0099】
重心取得手段18aは、変数jの値がデータ数NLであるとS267において判断すると、データ列MLにおけるRGB値および頻度と、このRGB値が何れのクラスターに所属するかのS266における決定結果とに基づいて、クラスター重心を更新するクラスター重心更新処理を実行する(S269)。
【0100】
次いで、重心取得手段18aは、変数kに1を代入する(S270)。
【0101】
次いで、重心取得手段18aは、クラスター重心A
kの更新前所属数Nb
kと、クラスター重心A
kの更新後所属数Na
kとが異なるか否かを判断する(S271)。
【0102】
重心取得手段18aは、クラスター重心A
kの更新前所属数Nb
kと、クラスター重心A
kの更新後所属数Na
kとが異なるとS271において判断すると、変数kに1を代入する(S272)。
【0103】
次いで、重心取得手段18aは、クラスター重心A
kの更新前所属数Nb
kを、クラスター重心A
kの更新後所属数Na
kにする(S273)。
【0104】
次いで、重心取得手段18aは、変数kの値と、変数iの値とが同一であるか否かを判断する(S274)。
【0105】
重心取得手段18aは、変数kの値と、変数iの値とが同一ではないとS274において判断すると、変数kに1を加算して(S275)、S273の処理を実行する。
【0106】
重心取得手段18aは、変数kの値と、変数iの値とが同一であるとS274において判断すると、S265の処理を実行する。
【0107】
重心取得手段18aは、クラスター重心A
kの更新前所属数Nb
kと、クラスター重心A
kの更新後所属数Na
kとが異ならないとS271において判断すると、変数kの値と、変数iの値とが同一であるか否かを判断する(S276)。
【0108】
重心取得手段18aは、変数kの値と、変数iの値とが同一ではないとS276において判断すると、変数kに1を加算して(S277)、S271の処理を実行する。
【0109】
重心取得手段18aは、変数kの値と、変数iの値とが同一であるとS276において判断すると、
図12に示す処理を終了する。
【0110】
図12に示す処理は、クラスター重心の更新前後で各クラスターの所属数が変動しなくなる(S276でYES)まで、クラスター重心の更新が行われる(S269)。したがって、重心取得手段18aは、入力画像における最適なクラスター重心を求めることができる。
【0111】
図13は、S266の所属クラスター決定処理のフローチャートである。
【0112】
なお、RGB値L
jが何れのクラスターに所属するかを決定するための方法は、例えば最小二乗法を利用する方法など、多数存在する。ここでは、例として、最小二乗法を利用する方法について説明する。
【0113】
図13に示すように、重心取得手段18aは、変数kに1を代入する(S301)。
【0114】
次いで、重心取得手段18aは、RGB値L
jに対応するLab値と、クラスター重心A
kに対応するLab値とのLab色空間における距離を算出する(S302)。
【0115】
次いで、重心取得手段18aは、変数kの値と、変数iの値とが同一であるか否かを判断する(S303)。
【0116】
重心取得手段18aは、変数kの値と、変数iの値とが同一ではないとS303において判断すると、変数kに1を加算して(S304)、S302の処理を実行する。
【0117】
重心取得手段18aは、変数kの値と、変数iの値とが同一であるとS303において判断すると、S302において算出された距離に基づいて、RGB値L
jに対応するLab値との距離が最も短いクラスター重心を特定する(S305)。なお、重心取得手段18aは、RGB値L
jに対応するLab値との距離が最も短いクラスター重心が複数存在する場合、これら複数のクラスター重心の中でS163の処理の直後に最も高い頻度のRGB値であったクラスター重心をS305において特定する。
【0118】
次いで、重心取得手段18aは、S305において特定したクラスター重心が所属するクラスターを、RGB値L
jが所属するクラスターとして決定する(S306)。例えば、重心取得手段18aは、S305においてクラスター重心A
10を特定した場合、RGB値L
jが所属するクラスターとしてクラスターC
10を決定する。
【0119】
次いで、重心取得手段18aは、S306において決定したクラスターの更新後所属数を1加算して(S307)、
図13に示す処理を終了する。例えば、重心取得手段18aは、S306においてクラスターC
10を決定した場合、クラスターC
10の更新後所属数Na
10を1加算する。
【0120】
図14は、S269のクラスター重心更新処理のフローチャートである。
【0121】
図14に示すように、重心取得手段18aは、変数kに1を代入する(S331)。
【0122】
次いで、重心取得手段18aは、数1に示すように、頻度を重みにしたR値、B値、G値のそれぞれの平均を求めることによってクラスター重心A
kを更新する(S332)。数1において、R
k、G
k、B
kは、それぞれ、更新後のクラスター重心A
kのR値、G値、B値である。R
l、G
l、B
lは、それぞれ、クラスターC
kに所属しているRGB値のR値、G値、B値である。Hist
lは、クラスターC
kに所属しているRGB値のデータ列MLにおける頻度である。例えば、クラスターC
kにRGB値L
10、L
20、L
30が所属している場合、RGB値L
10のR値、頻度をそれぞれR
10、Hist
10とし、RGB値L
20のR値、頻度をそれぞれR
20、Hist
20とし、RGB値L
30のR値、頻度をそれぞれR
30、Hist
30とすると、R
kは、(R
10・Hist
10+R
20・Hist
20+R
30・Hist
30)/(Hist
10+Hist
20+Hist
30)となる。
【数1】
【0123】
重心取得手段18aは、S332の処理の後、変数kの値と、変数iの値とが同一であるか否かを判断する(S333)。
【0124】
重心取得手段18aは、変数kの値と、変数iの値とが同一ではないとS333において判断すると、変数kに1を加算して(S334)、S332の処理を実行する。
【0125】
重心取得手段18aは、変数kの値と、変数iの値とが同一であるとS333において判断すると、
図14に示す処理を終了する。
【0126】
図15は、S103の色調整処理のフローチャートである。
【0127】
図15に示すように、色変換情報生成手段18bは、データ列MLの全てのRGB値をコピーしてデータ列MLaを生成する(S361)。
【0128】
次いで、色変換情報生成手段18bは、フラグFをFalseに初期化する(S362)。なお、フラグFは、Trueと、Falseとの何れかの値になることが可能である。
【0129】
色変換情報生成手段18bは、S362の処理の後、変数kに1を代入する(S363)。
【0130】
次いで、色変換情報生成手段18bは、植物の葉の記憶色の範囲30(
図16参照。)内にクラスター重心Akが存在するか否かを判断する(S364)。
【0131】
図16(a)は、植物の葉の記憶色の範囲30を含む色相面を示す図である。
図16(b)は、範囲30の角度範囲30aを示す図である。
【0132】
図16(a)に示す色相面は、植物の葉の記憶色の代表色を示す代表値31を含む色相面である。範囲30は、
図16(b)に示す角度範囲30aの全域に亘って
図16(a)に示す大きさおよび形状であるわけではない。角度範囲30aは、角度範囲21に含まれる。なお、MFP10の製造者は、事前に例えば何百種類の画像を分析して範囲30および代表値31を定める。
【0133】
図15に示すように、色変換情報生成手段18bは、植物の葉の記憶色の範囲30内にクラスター重心Akが存在するとS364において判断すると、クラスター重心Akを植物の葉の記憶色の代表値31に移動させる場合のデータ列MLaの各RGB値の移動方向および移動量を求める(S365)。
【0134】
ここで、MFP10は、色の変更方法として、まず色相角の方向に移動させ、次いで色相面内で移動させる方法が採用されている。なお、色の変更は、Lch色空間で行われる。
【0135】
まず、クラスター重心A
kは、植物の葉の記憶色の代表値31の色相角に移動させられることによって、代表値31を含む色相面上の点Pとされる。次いで、代表値31を含む色相面で点Pは代表値31に移動させられる。
【0136】
図17は、植物の葉の記憶色の代表値31を含む色相面でのクラスター重心A
kの移動方向を示す図である。
【0137】
図17においては、クラスター重心A
kを点Pとし、植物の葉の記憶色の代表値31を点Rとして表している。植物の葉の記憶色の代表値31の周辺の色に関しては、直線PRが色相面における明度方向の下端の線の延長線と交わる点Sに向かう方向に向いたベクトルを形成する。葉は、彩度を上げて明るさを出すと綺麗に見えるからである。
【0138】
図18は、植物の葉の記憶色の代表値31を含む色相面での色の移動方向を示す図である。
【0139】
図18に示すように、植物の葉の記憶色の代表値31の周辺の色である点Unは、クラスター重心Akが植物の葉の記憶色の代表値31に移動させられる場合、点Sに向かう方向に移動させられて点Vnとなる。
【0140】
ここで、ベクトルUnVnの大きさは、ベクトルPRの大きさとは異なる。ベクトルPRの大きさと、ベクトルUnVnの大きさとの比率は、点Pと、点Unとの位置関係によって求められる。
【0141】
図19は、植物の葉の記憶色の代表値31を含む色相面での色の移動量を示す図である。
【0142】
図18に示すベクトルPRをx軸成分とするとともにベクトルPRと直角に交わる直線をy軸成分として、アフィン変換を行って座標を回転および平行移動をすると、
図19に示すようになる。
【0143】
図19に示すように、点Pおよび点Rに基づいて、特定の曲線(例えば卵型)を考える。そして、その曲線と、直線PUnとの交点である点Tを得る。△TUnVnと、△TPRとは相似であるので、線分PT:線分PUn=1:αである場合、線分PR:線分UnVn=1:(1−α)である。ここで、線分PTおよび線分PUnのそれぞれの長さは計算によって得られる。したがって、線分PRに対する線分UnVnの比率(1−α)は、計算によって得られる。すなわち、ベクトルUnVnの大きさは、ベクトルPRの大きさに対して、(1−α)倍である。
【0144】
図20は、植物の葉の記憶色の代表値31の周辺の色の三次元空間での移動範囲を示す図である。
【0145】
色空間は、二次元ではなく、三次元なので、色相角の成分の次元を定義する必要がある。
図20に示すように、y軸成分と、色相角の成分との二次元で見た場合、真円になるように定義する。そのため、色相角の成分については、y成分と同等量の扱いとなる。すなわち、植物の葉の記憶色の代表値31の周辺の色は、色相角の方向においても、点Pからの距離に応じた移動比率を掛けて移動量を算出することができる。
【0146】
図15に示すように、色変換情報生成手段18bは、S365の処理の後、S365において求めた移動方向および移動量をデータ列MLaに適用して(S366)、フラグFをTrueにする(S367)。
【0147】
色変換情報生成手段18bは、植物の葉の記憶色の範囲30内にクラスター重心A
kが存在しないとS364において判断すると、空の記憶色の範囲40(
図21参照。)内にクラスター重心Akが存在するか否かを判断する(S368)。
【0148】
図21(a)は、空の記憶色の範囲40を含む色相面を示す図である。
図21(b)は、範囲40の角度範囲40aを示す図である。
【0149】
図21(a)に示す色相面は、空の記憶色の代表色を示す代表値41を含む色相面である。範囲40は、
図21(b)に示す角度範囲40aの全域に亘って
図21(a)に示す大きさおよび形状であるわけではない。角度範囲40aは、角度範囲22に含まれる。なお、MFP10の製造者は、事前に例えば何百種類の画像を分析して範囲40および代表値41を定める。ただし、代表値41は、色相のみが定められる。
【0150】
図15に示すように、色変換情報生成手段18bは、空の記憶色の範囲40内にクラスター重心Akが存在するとS368において判断すると、クラスター重心Akを空の記憶色の代表値41に移動させる場合のデータ列MLaの各RGB値の移動方向および移動量を求める(S369)。
【0151】
ここで、MFP10は、色の変更方法として、まず色相角の方向に移動させ、次いで色相面内で移動させる方法が採用されている。なお、色の変更は、Lch色空間で行われる。
【0152】
まず、クラスター重心A
kは、空の記憶色の代表値41の色相角に移動させられることによって、代表値41を含む色相面上の点Pとされる。次いで、代表値41を含む色相面で点Pは代表値41に移動させられる。
【0153】
図22は、空の記憶色の代表値41を含む色相面でのクラスター重心A
kの移動方向を示す図である。
【0154】
図22においては、クラスター重心A
kを点Pとし、空の記憶色の代表値41を点Rとして表している。点Rは、点Pから明度成分のみが上がる方向に延長した線と、色相面の明度方向の上端の線との交点Qと、点Pとを結ぶ線分QP上の点であって、点Pから線分QPの長さの0.8倍などの特定の比率の距離の位置の点である。空の記憶色の代表値41の周辺の色に関しては、明度成分のみが上がる方向に向いたベクトルを形成する。空は、明るい方が綺麗に見えるからである。
【0155】
なお、クラスター重心Akを空の記憶色の代表値41に移動させる場合のデータ列MLaの各RGB値の移動量については、クラスター重心Akを植物の葉の記憶色の代表値31に移動させる場合のデータ列MLaの各RGB値の移動量と同様に求めることができる。
【0156】
図15に示すように、色変換情報生成手段18bは、S369の処理の後、S366の処理を実行する。
【0157】
色変換情報生成手段18bは、空の記憶色の範囲40内にクラスター重心Akが存在しないとS368において判断すると、人間の肌の記憶色の範囲50(
図23参照。)内にクラスター重心A
kが存在するか否かを判断する(S370)。
【0158】
図23(a)は、人間の肌の記憶色の範囲50を含む色相面を示す図である。
図23(b)は、範囲50の角度範囲50aを示す図である。
【0159】
図23(a)に示す色相面は、人間の肌の記憶色の代表色を示す代表値51を含む色相面である。範囲50は、
図23(b)に示す角度範囲50aの全域に亘って
図23(a)に示す大きさおよび形状であるわけではない。人間の肌の色としては、互いに微妙に異なる様々な肌色付近の色が存在する。しかしながら、人間は、通常、それらの微妙に異なる様々な色を略同一の色として認識する。すなわち、多数の人間が肌の理想的な色として記憶している色、すなわち、肌の記憶色が存在する。範囲50は、肌の記憶色を示す範囲である。なお、MFP10の製造者は、事前に例えば何百種類の画像を分析して範囲50および代表値51を定める。
【0160】
図15に示すように、色変換情報生成手段18bは、人間の肌の記憶色の範囲50内にクラスター重心A
kが存在するとS370において判断すると、クラスター重心A
kを人間の肌の記憶色の代表値51に移動させる場合のデータ列MLaの各RGB値の移動方向および移動量を求める(S371)。
【0161】
ここで、MFP10は、色の変更方法として、まず色相角の方向に移動させ、次いで色相面内で移動させる方法が採用されている。なお、色の変更は、Lch色空間で行われる。
【0162】
まず、クラスター重心A
kは、人間の肌の記憶色の代表値51の色相角に移動させられることによって、代表値51を含む色相面上の点Pとされる。次いで、代表値51を含む色相面で点Pは代表値51に移動させられる。
【0163】
図24は、人間の肌の記憶色の代表値51を含む色相面でのクラスター重心A
kの移動方向を示す図である。
【0164】
図24においては、クラスター重心A
kを点Pとし、人間の肌の記憶色の代表値51を点Rとして表している。人間の肌の記憶色の代表値51の周辺の色に関しては、直線PRがグレー軸の延長線と交わる点Sに向かう方向に向いたベクトルを形成する。肌は、明るく白っぽくする方が綺麗に見えるからである。
【0165】
なお、クラスター重心Akを人間の肌の記憶色の代表値51に移動させる場合のデータ列MLaの各RGB値の移動量については、クラスター重心Akを植物の葉の記憶色の代表値31に移動させる場合のデータ列MLaの各RGB値の移動量と同様に求めることができる。
【0166】
図15に示すように、色変換情報生成手段18bは、S371の処理の後、S366の処理を実行する。
【0167】
色変換情報生成手段18bは、人間の肌の記憶色の範囲50内にクラスター重心Akが存在しないとS370において判断するか、S367の処理が終了すると、変数kの値と、変数iの値とが同一であるか否かを判断する(S372)。
【0168】
色変換情報生成手段18bは、変数kの値と、変数iの値とが同一ではないとS372において判断すると、変数kに1を加算して(S373)、S364の処理を実行する。
【0169】
色変換情報生成手段18bは、変数kの値と、変数iの値とが同一であるとS372において判断すると、フラグFがTrueであるか否かを判断する(S374)。
【0170】
色変換情報生成手段18bは、フラグFがTrueであるとS374において判断すると、データ列MLのRGB値と、データ列MLaのRGB値とに基づいて、データ列MLのRGB値をデータ列MLaのRGB値に変換する色変換リストを生成する(S375)。
【0171】
次いで、出力画像生成手段18cは、S375において生成された色変換リストを用いて入力画像の色変換、すなわち、色調整を行って出力画像を生成して(S376)、
図15に示す処理を終了する。
【0172】
色変換情報生成手段18bは、フラグFがFalseであるとS374において判断すると、
図15に示す処理を終了する。すなわち、フラグFがFalseであるとS374において判断された場合、入力画像に対する色調整は行われない。
【0173】
以上に説明したように、MFP10は、入力画像における近似色の集合であるクラスターの重心、すなわち、クラスター重心が色空間における特定の記憶色の範囲30、40または50に含まれる場合(S364でYES、S368でYESまたはS370でYES)に、このクラスター重心がこの記憶色の代表色に移動させられるように、入力画像の色を変換して出力画像を生成する(S376)ので、入力画像の色を変換して特定の記憶色を強調した出力画像を生成することができる。
【0174】
MFP10は、RGB値L
jおよびクラスター重心A
kの両方の色相角が角度範囲21、22に含まれる場合(S240でYESまたはS242でYES)に、RGB値L
jおよびクラスター重心A
kの少なくとも一方の色相角が角度範囲21、22に含まれない場合(S240でNOおよびS242でNO)と比較して、RGB値L
jおよびクラスター重心A
k同士を近似色であると判断するための色相角の差分、すなわち、角度差分Deg1が実質的に大きいので、特定の記憶色の範囲30、40の色相角、すなわち、角度範囲30a、40aを含む角度範囲21、22に含まれる色同士を、角度範囲21、22に含まれない色同士と比較して、同一のクラスターとして判断する傾向が強く、範囲30、40にクラスター重心が多数含まれる可能性を抑えることができる。したがって、MFP10は、多数のクラスター重心が同一の色に移動させられるように入力画像の色が変換される可能性を抑えることができ、範囲30、40の色を強調した自然な出力画像を生成することができる。
【0175】
なお、
図15に示す処理では、本実施の形態において、記憶色として、植物の葉の色、空の色、および、人間の肌の色を対象にしている。しかしながら、他の記憶色を対象にしても良い。
【0176】
また、
図8に示す処理で対象にしている記憶色は、本実施の形態において、
図15に示す処理で対象にしている記憶色の一部のみである。しかしながら、
図15に示す処理で対象にしている記憶色の全部を、
図8に示す処理で対象にしても良い。
【0177】
また、本実施の形態においては、記憶色を強調した出力画像を生成するようになっているが、記憶色以外の特定の色を強調した出力画像を生成するようになっていても良い。
【0178】
また、本実施の形態においては、
図2に示す動作における全ての処理がMFP10において行われている。しかしながら、
図2に示す動作における一部の処理がPC(Personal Computer)など、MFP10以外のコンピューターによって行われても良い。
【0179】
本発明の画像形成装置は、本実施の形態においてMFPであるが、プリンター専用機など、MFP以外の画像形成装置でも良い。