以下、添付の図面を参照して、本発明をその好適な実施形態に基づいて詳細に説明する。なお、以下の実施形態において示す構成は一例に過ぎず、本発明は図示された構成に限定されるものではない。
<第1実施形態>
図1は、本実施形態の色処理装置を実現するハードウエア構成を示すブロック図である。同図に示す色処理装置1において、101は色域データを取得するデータ取得部、102はデータ取得部101で取得した色域の色相反転領域を検出する反転検出部、103は反転検出部102で検出された反転領域を補正する領域補正部である。また、104は領域補正部103で補正された色域をマッピングする色域マッピング部、105は色域マッピング部104でマッピングされた色域を出力デバイスの色空間値に変換する色空間値変換部である。また、106は色空間値変換部105で変換された色空間値を出力する出力部、107はデータ取得部101で読み込む色域データを保持する色域データ保持部、108は演算途中の各データを一時的に保持するためのバッファメモリである。
<<処理概要>>
本実施形態の色処理装置1においては、入力色空間値(RGB)を出力色空間値(Jab)に変換するための色変換テーブルを作成する。以下、色処理装置1における処理について、図2を用いて説明する。図2は、色処理装置1における色変換テーブル作成処理を示すフローチャートである。
まずステップS1において、データ取得部101は、色域データ保持部107に保持されている入力色域および出力色域を取得し、バッファメモリ108に保存する。
ここで色域データは、例えば図3に示すような、デバイスの各色信号値に対応する知覚色空間値の対を記述した対応表として示される。例えば、プリンタの色域データは以下のように作成される。まず、プリンタの色信号値R,G,Bをそれぞれ、5スライスあるいは9スライス等の複数スライスに分割し、各スライスの格子点におけるRGB値をプリンタに入力し、所定の用紙に色票を印刷する。次に、印刷された色票を測色器で測色してXYZ値を得、該XYZ値からCIECAM02の変換式によって知覚色空間値Jabを算出する。本実施形態では、このようにして算出されたJab値とデバイスRGB値とを対にして保存することで、色域データを作成する。なお、データ取得部101における詳細な処理内容については、後述する。
次にステップS2において、反転検出部102は、ステップS1で取得した入力色域および出力色域の色相反転領域を検出する。なお、反転検出部102における詳細な処理内容については、後述する。
次にステップS3において、領域補正部103は、ステップS2で検出した色相反転領域を補正する。なお、領域補正部103における詳細な処理内容については、後述する。
次にステップS4において、色域マッピング部104は、ステップS3における補正後の入力色域を、補正後の出力色域にマッピングする。なお、色域マッピング部104における詳細な処理内容については、後述する。
次にステップS5において、色空間値変換部105は、ステップS4におけるマッピング後の色値を、出力デバイスの色空間値、例えばRGB値に変換する。知覚色空間値の変換は、例えば、デバイス色空間値とCIECAM02値との関係を表すLUTや変換マトリクス等を用いて行う。LUTを用いる場合は、四面体補間、立方体補間等の既知の技術を用いて変換する。
そしてステップS6において、出力部106は、ステップS1で取得した入力色域データのRGB値と、ステップS5で変換された変換後色空間値と、を組にした色変換テーブル出力する。
<<データ取得部101における動作>>
以下、ステップS1におけるデータ取得部101の動作について、図4を用いて詳細に説明する。図4は、データ取得部101におけるデータ取得処理を示すフローチャートである。
データ取得部101は、まずステップS101において、入力色域データまたは出力色域データのいずれかを示すカウンタiに初期値1を代入し、初期化する。そしてステップS102において、色域データ保持部107に保持されているi番目の色域データの最下行の格子点番号を読み込み、これをi番目の色域の格子点数Nに設定する。そしてステップS103において、格子点を示すカウンタjに初期値1を代入し、初期化する。そしてステップS104において、色域データ保持部107に保持されている色域データのj番目の格子点の格子点番号、RGB値、およびJab値を順に読み込み、バッファメモリ108に書き込む。そしてステップS105において、カウンタjに1を加算する。そしてステップS106において、全ての格子点番号、RGB値、およびJab値を取得したか否かを判定する。この判定には格子点数Nを用い、カウンタjがN以下の場合、すなわち色域データを全て取得し終えていない場合にはステップS104に戻り、カウンタjがNを超えている場合、すなわち色域データを全て取得している場合にはステップS107へ進む。
そしてステップS107において、カウンタiに1を加算し、ステップS108において、入力色域および出力色域の色域データを取得したか否かを判定する。カウンタiが2以下の場合、すなわち、色域データを取得し終えていない場合には、ステップS102に戻って次の色域データを取得する。一方、カウンタiが2を超えている場合、すなわち、入力色域、出力色域ともに色域データを取得している場合には、データ取得部101における処理を終了する。
以上の処理によって、データ取得部101において入力色域データおよび出力色域データが取得される。
<<反転検出部102における動作>>
以下、ステップS2における反転検出部102の動作について、図5を用いて詳細に説明する。図5は反転検出部102における反転検出処理を示すフローチャートである。
反転検出部102は、まずステップS201において、カウンタiに初期値1を代入し、初期化する。そしてステップS202において、バッファメモリ108からi番目の色域の色域データ(全ての格子点の格子点番号、RGB値、およびJab値)を取得する。そしてステップS203において、ステップS202で取得した色域データの格子点数から部分格子数(詳細は後述する)を算出し、Nに設定する。
本実施形態では、反転領域を検出する際、および該領域を補正する際に、RGB格子を入れ子状に分割し、それぞれの格子ごとに処理を行う。一般に入れ子とは、箱状の容器の中に、その容器よりも小さな容器が順々に入っている状態を指す。したがって、それぞれの箱の内側は空洞でなければならないが、本実施形態においては、それぞれの格子の内側には格子点が存在するものとする。以下、それぞれの格子を部分格子と呼ぶ。
図6に、本実施形態における部分格子の例を示す。図6において●印が格子点を示し、第1部分格子は、格子点P1,P2,P3,P4,P5,P6,P7,P8を頂点とする六面体に含まれる全ての格子点によって構成される。また、第2部分格子は、格子点P9,P10,P11,P12,P13,P14,P15,P16を頂点とする六面体に含まれる全ての格子点によって構成される。図6に示すような5スライス格子の場合、第1部分格子は125点全ての格子点からなり、第2部分格子はその内側の入れ子となる27点の格子点からなる。一般に、Nスライス格子の場合、各スライスの刻み幅をNステップ(step)とすると、第j部分格子の格子点のR,G,B値が取り得る値Vは、以下の式(1)によって表すことができる。
V=min(Nstep×(x−1),255) ・・・(1)
なお、式(1)におけるmin(a,b)は、aとbとを比較し、小さい方の値を返す関数である。また、j,xはそれぞれ以下の式(2)、式(3)を満たすものとする。
j≦x≦N−(j−1) ・・・(2)
1≦j≦(N−1)/2 ・・・(3)
また、デバイスRGB値のビット数をnとすると、ステップ幅Nstepは、スライス数Nを用いて、以下の式(4)のように表すことができる。
Nstep=2n/(N−1) ・・・(4)
また、一般にNスライス格子の場合には、部分格子が(N−1)/2個存在し、第j部分格子の格子点数は(N−j+1)3と表すことができる。
図5に戻り、反転検出部102はステップS204において、カウンタjに初期値1を代入し、初期化する。そしてステップS205において、ステップS202で取得した色域データから第j部分格子を取り出す。そしてステップS206において、ステップS205で取り出した部分格子に含まれる検索ライン数(詳細は後述する)を算出し、NLに設定する。
本実施形態では、部分格子の色相反転領域を検出する際に、いくつかの格子点によって組を作り、この組に含まれる各格子点を検索しながら、各格子点における色相反転の有無を記録していく。この組に含まれる格子点を、以下、検索格子点と呼ぶ。そして、該検索格子点を検索順に結んだラインを、以下、検索ラインと呼ぶ。図7に、検索ラインの例を示す。図7において、7a〜7gの各格子は、そのR,G,B値が以下の式(5)、式(6)、式(7)を満たす格子点で構成される。
Vi=Nstep×j ・・・(5)
1≦i≦N−1のとき、 1≦j≦i+1 ・・・(6)
N≦i≦2N−3のとき、 i−N+2≦j≦N ・・・(7)
ここで、Nstepは、R,G,B値のビット数をnとし、以下の式(8)で表される格子の刻み幅である。
Nstep=2n/(N−1) ・・・(8)
各格子に含まれる格子点のRGB値が取り得る最小の値をVmin、最大の値をVmaxとすると、図7の太線で示した検索ラインは、以下の6点を順に結ぶ線分によって構成される。ただし、点6の次は点1に戻るものとする。
点1:(Vmax,Vmin,Vmin)
点2:(Vmax,Vmax,Vmin)
点3:(Vmin,Vmax,Vmin)
点4:(Vmin,Vmax,Vmax)
点5:(Vmin,Vmin,Vmax)
点6:(Vmax,Vmin,Vmax)
以上で説明した検索ラインは、一般にNスライスの部分格子の場合、2N−3本存在する。
図5に戻り、反転検出部102はステップS207において、カウンタkに初期値1を代入し、初期化する。そしてステップS208において、ステップS205で取得した部分格子からk番目の検索ライン上の検索格子点を検索順に取り出し、バッファメモリ108に書き込む。この検索格子点のバッファメモリ108への書き込みは、取り出した順に行われる。そしてステップS209において、ステップS208で取り出した検索格子点の色相角hおよび彩度Cを算出し、バッファメモリ108に書き込む。色相角hは、その格子点のa,b値を用いて式(9)によって算出され、彩度Cは、式(10)によって算出される。
そしてステップS210において、ステップS208で取り出した検索格子点のうち、ステップS209で算出した色相角hが最も小さい格子点の格子点番号を、kminに設定する。そしてステップS211において、ステップS210で検索したkmin番目の検索格子点から順に、色相−彩度平面上に検索格子点をプロットし、隣り合う検索格子点を線分で結ぶ。そしてステップS212において、ステップS211で作成したグラフをもとに、各検索格子点の色相が反転しているか否かを検出する。
ここで、図8に示す色相−彩度平面を用いて、本実施形態における色相反転の検出方法について説明する。図8において、横軸は色相を表し、縦軸は彩度を表す。また、点P1〜P7は、検索ライン上の一部の検索格子点を表す。まず、各検索格子点を通って色相軸に垂直な直線を定義し、検索格子点を結ぶグラフとの交点を求めて交点数を算出する。ここで、求めた各交点を図8の点Q1〜Q4に示す。例えば、点Q1およびQ2は、点P3を通る垂線l3と該グラフとの交点を表す。したがって、垂線l3と該グラフとの交点数は、点Q1およびQ2に加えて、該検索格子点P3を含めた計3点となる。このように、各検索格子点を通る垂線と該グラフとの交点数を求め、該交点数を各検索格子点番号と対応付けて、バッファメモリ108に書き込む。格子点番号と交点数の対応を表す交点数対応表の例を図9に示す。図9に示すように、1列目には格子点番号を書き込み、2列目には対応する交点数を書き込む。この交点数が2以上であった場合には、該検索格子点とそれ以外の検索格子点との色相が逆転していることを表しているので、該交点数対応表によって格子点における色相反転を検出することができる。
図5に戻り、反転検出部102は、ステップS213においてカウンタkに1を加算する。そしてステップS214において、部分格子内の全ての検索ラインについて処理が終了したか否かを判定する。この判定には、ステップS206で設定したNLを用いる。カウンタkがNL未満であった場合、すなわち、全ての検索ラインについて処理が終了していない場合には、ステップS208へ戻る。一方、カウンタkがNLを超える場合、すなわち、全ての検索ラインについて処理が終了している場合には、ステップS215へ進む。
ステップS215においては、カウンタjに1を加算し、ステップS216において、全ての部分格子について処理が終了したか否かを判定する。この判定には、ステップS203で設定したNを用いる。カウンタjがN未満であった場合、すなわち、全ての部分格子について処理が終了していない場合には、ステップS205へ戻る。一方、カウンタjがNを超える場合、すなわち、全ての部分格子について処理が終了している場合には、ステップS217へ進む。
ステップS217においては、カウンタiに1を加算し、ステップS218において、全ての色域について処理が終了したか否かを判定する。本実施形態における色域は、入力色域と出力色域の2つであるため、この判定はカウンタiと色域数2を比較することによって行う。カウンタiが2未満であった場合、すなわち、入力色域と出力色域の両方についての処理が終了していない場合には、ステップS202へ戻る。一方、カウンタiが2を超える場合、すなわち、入力色域と出力色域の両方について処理が終了している場合には、ステップS2における処理を終了する。
以上のように反転検出部102では、色相−彩度平面における検索格子点を結ぶ線分と検索格子点を通る垂線との交点数によって、格子点における色相反転を検出する。これは、格子点の位置関係が逆転している場合、該格子点における交点が2点以上出現することを利用した検出方法である。
また、色相反転の検出処理は、色域表面だけではなく、色域内部の格子点に対しても行うため、色域内部の格子点の色相反転も検出することができる。
また、色相反転の検出処理を格子点に対して行っているため、色域のわずかな色相反転をも検出することができる。これは、色域が格子点から構成されており、同時に格子点が色域の特異点になっているので、この格子点に対して色相反転の有無を検査することにより、色域の全ての色相反転を検出することができることを利用した検出方法である。
また、格子点のみを対象として検出処理を行うので、最小限の探索コストで色相反転を検出することができる。よって、例えば色相を1度刻みで検索する方法に比べ、より高速に色相反転を検出することができる。
<<領域補正部103における動作>>
以下、ステップS3における領域補正部103の動作について、図10を用いて詳細に説明する。図10は、領域補正部103における領域補正処理を示すフローチャートである。
領域補正部103は、ステップS301〜S308の処理において、バッファメモリ108から色域データを読み込み、該色域データから部分格子を取り出した後に、該部分格子に含まれる検索ライン上の格子点を取得する。以上の処理は、上述した反転検出部102における、図5に示すステップS201〜S208と同様の処理であるため、ここでは詳細な説明を省略する。
また、ステップS313〜S318では、部分格子内の検索ラインに対する処理の終了判定、部分格子に対する処理の終了判定、および色域に対する処理の終了判定を行う。これらの処理についても、上述した反転検出部102における、図5に示すステップS213〜S218と同様であるため、詳細な説明を省略する。以下、反転検出部102の処理とは異なる、ステップS309〜S312までの処理について説明する。
領域補正部103は、ステップS309において、上述した図5のステップS212でバッファメモリ108に書き込んだ交点数対応表(図9)を取得する。そしてステップS310において、該交点数対応表に基づき、色相反転領域の境界に位置する検索格子点の格子点番号を取得する。図9に示した交点数対応表によれば、交点数が2つ以上の検索格子点は、格子点番号3〜5の検索格子点であるので、該検索格子点が色相反転領域であることが分かる。以下、色相反転領域と隣り合う検索格子点を境界格子点と呼ぶ。図9の場合であれば、格子点番号2および6の検索格子点が境界格子点となる。この2つの検索格子点を1組にして、組ごとにバッファメモリ108に保存しておく。
そしてステップS311において、ステップS310で取得した境界格子点に挟まれる色相反転領域の検索格子点について、格子点間距離を算出してバッファメモリ108に書き込む。ここで、iを自然数とすると、i番目の検索格子点とi+1番目の検索格子点との格子点間距離diは、以下の式(11)によって算出される。式(11)において、Ji,ai,biは、i番目の検索格子点のJ,a,b値を表す。
次にステップS312において、ステップS311で算出した格子点間距離の比に応じて、色相反転領域の検索格子点を移動する。本実施形態では、1組の境界格子点間を、色相反転格子点の格子点間距離の比で内分する点に該色相反転格子点を移動する。色相反転格子点の移動の例を図11に示す。図11はab平面上に検索格子点および移動後の点を示す図である。検索格子点をそれぞれP1〜P7とし、検索格子点の移動後の点をP'3〜P'5とすると、移動後の各点は、境界格子点の一方の格子点番号をs、他方の格子点番号をeとすると、式(12)によって表すことができる。このとき、mi,niは、それぞれ式(13)、式(14)のように表すことができる。なお、Oはab平面の原点を表す。
上記式(12)を用いて求めた該移動後のJab値によって、色域データの該色相反転格子点のJab値を書き換える。以上の処理によって、色域の色相反転領域を補正することができる。
以上のように、領域補正部103では、色相反転領域の格子点間距離の比を保持して、該色相反転領域をはさむ両端の境界格子点の間に、色相反転格子点を移動することによって、色域の色相反転を補正する。
<<色域マッピング部104における動作>>
以下、ステップS4における色域マッピング部104の動作について、図12を用いて詳細に説明する。図12は、本実施形態の色域マッピング部104における色域マッピング処理を示すフローチャートである。
色域マッピング部104は、まずステップS401およびステップS402において、上述した図10のステップS312によって補正された入力色域データおよび出力色域データを、バッファメモリ108から取得する。そしてステップS403において、ステップS401で取得した入力色域データから格子点数を取得し、Nに設定する。そしてステップS404において、色変換テーブルのデータ領域をバッファメモリ108に確保する。この色変換テーブルは、入力デバイスの色空間値R,G,Bと、該色空間値に対応するJ,a,b値を出力色域にマッピングした後のJ,a,b値との対応付けを保存しておくためのものである。
次にステップS405において、出力色域内の点、例えば(50,0,0)を収束点に設定する。そしてステップS406において、カウンタiに初期値1を代入し、初期化する。そしてステップS407において、入力色域のi番目の格子点を取得し、ステップS408において、該入力格子点のRGB値をステップS404で確保した色変換テーブルに書き込む。そしてステップS409において、該入力格子点が出力色域の外側に存在しているか否かを判定する。この色域内外判定は、出力色域表面を構成する三角形と、該入力格子点と収束点とを結ぶ直線との交点の位置関係に基づいて行う。ここで図13に、本実施形態における色域内外判定の例を示す。図13に示すように、出力色域表面の格子点によって構成される三角形の各頂点をそれぞれB,C,Dとし、ステップS405で設定した収束点をA、入力格子点をPとすると、直線AP上の点は以下の式(15)によって表される。
ここで、点XのJ,a,b値を(Jx,ax,bx)で表すと、s,t,uは、式(16)によって算出される。
このとき、点Pが四面体ABCD内部に存在すれば、以下の式(17),式(18)が成り立つ。
s+t+u≦1 ・・・(17)
0≦s,0≦t,0≦u ・・・(18)
式(17),式(18)が成り立てば、該入力格子点が出力色域内に存在すると判定し、ステップS412へ進む。一方、式(17),式(18)が成り立たなければ、該入力格子点が出力色域外に存在すると判定し、ステップS410へ進む。
ステップS410においては、該入力格子点と該収束点とを通る直線と出力色域表面との交点を算出し、ステップS411において、ステップS410で算出した交点のJab値を、ステップS404で確保した色変換テーブルのi行目に書き込む。
またステップS412においては、ステップS407で取得した入力格子点のJab値を、ステップS404で確保した色変換テーブルのi行目に書き込む。
そしてステップS413において、カウンタiに1を加算し、ステップS414において、入力色域の全ての格子点について処理が終了したか否かを判定する。この判定には、ステップS403で設定したNを用いる。カウンタiがN未満であった場合、すなわち、全ての格子点について処理が終了していない場合には、ステップS407へ戻る。一方、カウンタiがNを超える場合、すなわち、全ての格子点について処理が終了している場合には、ステップS4における処理を終了する。
以上のように、色域マッピング部104では、出力色域内の入力格子点についてはその色値を保存する。一方、出力色域外の入力格子点については、該入力格子点と収束点とを結ぶ線分と、出力色域表面との交点に貼り付けることによって、入力色域を出力色域へマッピングする。
<<本実施形態による効果>>
以上説明したように本実施形態によれば、入力色空間値を出力色空間値へ変換する色変換テーブルを作成する際に、入力デバイスの色域を出力デバイスの色域に自動的にマッピングすることができる。さらに、色域を構成する格子を部分格子に分割し、各部分格子の検索ラインごとに、色相−彩度平面にて隣り合った格子点を線分で結び、各格子点を通り色相軸に垂直な直線と該線分との交点数によって、色相が反転している格子点を検出することができる。そして、色相が反転していた場合には、色相反転格子点をはさむ境界格子点を結んだ直線上に、該色相反転格子点の格子点間距離の比を維持して該色相反転格子点を移動することによって、色相反転を防止したマッピングを行うことができる。
<第2実施形態>
以下、本発明に係る第2実施形態について説明する。。第2実施形態においても、入力色空間値を出力色空間値に変換するための色変換テーブルを作成するが、この際にユーザによる確認操作が介入することを特徴とする。また第2実施形態においても色域における色相反転を検出するが、この検出方法として上述した第1実施形態とは異なる手法を用いる。
図14は、第2実施形態における色処理装置を実現するハードウエア構成を示すブロック図である。同図に示す色処理装置2において、201はユーザからの入力を受けるUI(ユーザインターフェース)部、202は色域データを取得するデータ取得部、203はデータ取得部202で取得した色域の色相反転領域を検出する反転検出部である。また、204は反転検出部203で検出された反転領域を補正するか否かをユーザに選択させるメッセージを表示する表示部、205は反転検出部203で検出された反転領域を補正する領域補正部である。また、206は領域補正部205で補正された色域をマッピングする色域マッピング部、207は色域マッピング部206でマッピングされた色域を出力デバイスの色空間値に変換する色空間値変換部である。また、208は色空間値変換部207で変換された色空間値を出力する出力部、209はデータ取得部202で読み込む色域データを保持する色域データ保持部、210は演算途中の各データを一時的に保持するためのバッファメモリである。
<<処理概要>>
以下、第2実施形態の色処理装置2における処理について、図15および図16を用いて説明する。図15は、色処理装置2における変換テーブル作成処理を示すフローチャートであり、図16は、色変換テーブル作成条件の設定を実現するUI部201の表示例を示す図である。
第2実施形態における色変換テーブルは、図16に示す表示画面で設定される色変換テーブル作成条件に基づいて作成される。図16において、1Pは設定画面として機能するUIである。また、2Pは入力色域データを取得する入力色域取得部、3Pは出力色域データを取得する出力色域取得部である。ここでは、例えば、処理対象の入力色域データおよび出力色域データが記憶されているメモリ(例えば外部記憶装置)に対するファイルパスを指定することで、入力色域データおよび出力色域データを取得するとする。また、4Pは色域表示部であり、色域および色相反転格子点を表示する。5PはOKボタンであり、各種入力が完了して、指定された各種データを処理に用いるデータとして確定するためのボタンである。
色変換テーブルの作成時には、まず図15に示すステップS21において、データ取得部202は、UI部201におけるOKボタン5Pが押下されたか否かを判定する。これが押下されていない場合は、そのままユーザの入力を待機するが、OKボタン5Pが押下された場合には、ステップS22へ進む。
そしてステップS22において、データ取得部202は、図16の画面で設定された入力色域および出力色域の条件に基づいて、色域データ保持部209に保持されている入力色域および出力色域を取得し、バッファメモリ108に保存する。なお、データ取得部202における詳細な処理内容については、後述する。
次にステップS23において、反転検出部203は、ステップS22で取得した入力色域および出力色域の色相反転格子点を検出する。なお、反転検出部203における詳細な処理内容については、後述する。
次にステップS24において、表示部204は、ステップS23で色相反転格子点が検出されたか否かを判定する。この色相反転の有無の判定方法については、表示部204の具体的な処理内容とあわせて後述する。位相反転格子点が検出された場合はステップS25に進むが、検出されない場合はステップS28へ進む。
ステップS25では表示部204において、色相反転に起因する画質劣化が生じる旨のメッセージを表示し、反転領域を補正するか否かを、後述するようにユーザに選択させる。
そしてステップS26において、ステップS25における選択結果を後述するように判定し、反転領域の補正が選択された場合にはステップS27へ進み、補正しないことが選択された場合にはステップS28へ進む。
ステップS27において、領域補正部205は、ステップS23で検出した色相反転領域を補正する。なお、この補正方法は、上述した第1実施形態におけるステップS3と同様であるため、説明を省略する。
次にステップS28において、色域マッピング部206は、入力色域の入力色値を出力色域にマッピングする。すなわち、マッピング対象となる入力色値としては、ステップS27で補正されている場合と補正されていない場合が考えられる。なお、このマッピング方法は、上述した第1実施形態におけるステップS4と同様であるため、説明を省略する。
そしてステップS29において、色空間値変換部207は、ステップS28におけるマッピング後の色値を、出力デバイスの色空間値、例えばRGB値に変換する。この変換方法は、上述した第1実施形態におけるステップS5と同様であるため、説明を省略する。 そしてステップS30において、出力部208は、ステップS29で変換された変換後色空間値に基づいて色変換テーブル出力する。この出力方法は、上述した第1実施形態におけるステップS6と同様であるため、説明を省略する。
<<データ取得部202における動作>>。
以下、ステップS22におけるデータ取得部202の動作について、図17を用いて詳細に説明する。図17は、データ取得部202におけるデータ取得処理を示すフローチャートである。
データ取得部202は、まずステップS501において、図16に示す入力色域取得部2Pに設定された、入力色域データのファイルパスを取得する。そしてステップS502において、ステップS501で取得したファイルパスに保持されている入力色域データを色域データ保持部209から読み込み、バッファメモリ210に書き込む。そしてステップS503において、出力色域取得部3Pに設定された出力色域データのファイルパスを取得する。そしてステップS504において、ステップS503で取得したファイルパスに保持されている出力色域データを色域データ保持部209から読み込み、バッファメモリ210に書き込む。
<<反転検出部203における動作>>
以下、ステップS23における反転検出部203の動作について、図18を用いて詳細に説明する。図18は反転検出部203における反転検出処理を示すフローチャートである。なお、図18に示すステップS601〜S603の処理は、上述した第1実施形態における反転検出処理を示す図5のステップS201〜S203と同様であるため、説明を省略する。
反転検出部203は、ステップS601〜S603におけるカウンタiの初期化、i番目の色域の色域データの取得、部分格子数Nの設定、を終えると、次にステップS604において、出力色域内の点、例えば(50,0,0)を収束点に設定する。そしてステップS605においてカウンタjに初期値1を代入し、初期化する。そしてステップS606において、ステップS602で取得した色域データから第j部分格子を取り出す。そしてステップS607において、ステップS606で取り出した部分格子の色域表面における格子点数を算出し、Nsに設定する。
ここで、色域の格子点数をNとし、iを自然数とすると、第i部分格子の格子点数は、以下の式(19)によって表される。したがって、第i部分格子の色域表面の格子点数Nsは、以下の式(20)によって表される。
次にステップS608において、カウンタkに初期値1を代入し、初期化する。そしてステップS609において、ステップS606で取り出した部分格子から、色域表面のk番目の格子点についてのJ,a,b値を取得し、ステップS610において該格子点とステップS604で設定した収束点とを結ぶ直線の方程式を算出する。そしてステップS611において、部分格子の色域表面と該直線との交点を算出し、得られた交点数をバッファメモリ210に書き込む。
ここで図19に、格子点と収束点を結ぶ直線と、部分格子の色域表面およびその交点の例を示す。図19において、部分格子の色域表面の格子点をPi(ただし、i=1,...,8)、収束点をPF、格子点と収束点とを結ぶ直線(図19において、PFから放射状に伸びる破線)と色域表面との交点をQj(ただし、j=1,...,4)とする。このとき、色相反転領域内の直線上には格子点自身を含む交点が2点以上存在し、色相が反転していない領域内の直線上には格子点自身しか存在しない。したがって、交点数によって各格子点が色相反転しているか否かを判定することができる。
図18に戻り、反転検出部203は、ステップS612において、カウンタkに1を加算する。そしてステップS613において、部分格子内の全ての格子点について処理が終了したか否かを判定する。この判定には、ステップS607で設定したNsを用いる。カウンタkがNs未満であった場合、すなわち、全ての格子点について処理が終了していない場合にはステップS609へ戻る。一方、カウンタkがNsを超える場合、すなわち、全ての検索ラインについて処理が終了している場合には、ステップS614へ進む。
なお、ステップS614〜S617の処理は、上述した第1実施形態で図5に示したステップS215〜S218と同様であるため、説明を省略する。
以上のように、第2実施形態の反転検出部203では、色域を部分格子に分割し、該部分格子の表面を構成する格子点と収束点を結ぶ直線を求め、該直線と該部分格子の色域表面との交点を算出し、その交点数によって各格子点の色相反転を検出する。これは、部分格子の色域表面を構成する格子点が逆転している場合、該格子点と収束点とを結ぶ直線と該色域表面との交点が2点以上出現することを利用した検出方法である。
また、色相反転の検出処理を、色域表面だけではなく、色域内部の格子点に対しても行うことによって、色域内部の格子点の色相反転も検出することができる。
また、色相反転の検出処理を格子点に対して行っているため、色域のわずかな色相反転をも検出することが可能である。これは、色域が格子点から構成されており、同時に格子点が色域の特異点になっているので、この格子点に対して色相反転の有無を検査することにより、色域の全ての色相反転を検出することができることを利用している。
また、格子点のみを対象として検出処理を行うため、最小限の探索コストで色相反転を検出することができ、高速に色相反転を検出することができる。
<<表示部204における動作>>
以下、ステップS25における表示部204の動作について、図20を用いて詳細に説明する。図20は、第2実施形態の表示部204における表示処理を示すフローチャートである。
表示部204は、まずステップS701において、反転フラグFに初期値0を代入し、初期化する。この反転フラグFは、色域の格子点において色相反転が発生しているか否かを判定するためのフラグであり、後述するステップS708において色相反転の可能性をユーザに警告する際に用いられる。第2実施形態では、反転フラグFが0のときは反転がないことを表し、Fが1以上のときは反転があることを表すものとする。
そしてステップS702において、各格子点における交点数をバッファメモリ210から取得し、ステップS703において、該交点数をもとに、各格子点における色相反転の有無を判定する。交点数が1を超えていた場合、すなわち、該格子点において色相反転が発生していた場合には、ステップS704へ進む。一方、交点数が1以下であった場合、すなわち、該格子点において色相反転が発生していなかった場合には、ステップS706へ進む。
ステップS704においては、反転フラグFに1を加算し、次にステップS705において、UI部201の色域表示部4Pのa−b平面上に、該格子点をプロットする。
ステップS706では、全格子点について処理が終了したか否かを判定する。終了していた場合にはステップS707へ進むが、終了していなかった場合にはステップS702へ戻る。
ステップS707においては、補正フラグFcに初期値0を代入し、初期化する。この補正フラグFcは、色相反転領域を補正するか否かを判定するためのフラグであり、後述するステップS709におけるユーザの判断によって設定される。
そしてステップS708において、反転フラグFに基づいて反転領域の有無を判定する。反転フラグFが0を超えていた場合、すなわち、反転領域が存在していた場合には、ステップS709へ進む。一方、反転フラグFが0以下だった場合、すなわち、反転領域が存在していなかった場合には、ステップS25の処理を終了する。
ステップS709においては、警告メッセージをユーザに表示し、反転領域を補正するか否かを選択させる。ユーザへの警告は、例えば、図21に示すように、色域に色相反転領域が存在するため、該反転領域に起因する画質劣化が生じる可能性があることを報知し、色域の補正を行うか否かの選択を促すような内容で、メッセージボックスを表示する。このメッセージボックスは、ユーザの判断を取得するための「はい」ボタン1Q、および「いいえ」ボタン2Qを備える。
ステップS710においては、ステップS709で表示したメッセージボックス上で、「はい」ボタン1Q、または「いいえ」ボタン2Qのどちらが押下されたかを判定する。「はい」ボタン1Qが押下された場合、ステップS711へ進んで補正フラグFcに1を設定した後、ステップS25の処理を終了するが、「いいえ」ボタン2Qが押下された場合には、そのままステップS25の処理を終了する。
以上のように、表示部204では、ステップS23で設定した各格子点の交点数によって色相反転の有無を判定する。そして、該格子点において色相反転が発生していた場合には、UI部201の色域表示部4Pに該格子点をプロットすることによって、ユーザに色相反転領域を視覚的に知らしめる。そしてさらに、色相反転に起因する画質劣化の可能性をユーザに警告するとともに、該色相反転領域を補正するか否かをユーザが選択することができる。
以上説明したように第2実施形態によれば、入力色空間値を出力色空間値へ変換する色変換テーブルを作成する際に、入力デバイスの色域を出力デバイスの色域に自動的にマッピングすることを、ユーザによって設定された条件に基づいて行うことができる。さらに、マッピングの際に色域の色相反転を検出し、該色相反転に起因する画質劣化の可能性をユーザに告知することができる。
また、該告知とともに、該反転領域を補正するか否かをユーザが選択できる選択ボタンを備えることにより、ユーザが補正処理の実行の可否を選択することができる。さらに、該色相反転領域をa−b平面に表示する表示部も備えているため、ユーザは視覚的にどの領域で色相反転が発生しているかを把握することができる。
<変形例>
上述した各実施形態においては、CIECAM02色空間を用いて説明を行ったが、CIELAB、CIELUV、CIECAM97sなどの知覚色空間であれば、どのような色空間を用いてもよい。
また、反転検出部102,203、および領域補正部103,205においては、図5のステップS206で説明したように検索格子点を点1から点6の順で検索したが、検索順はこれに限定されるものではない。例えば、点2から検索を開始し、点3,4,5,6,1の順で検索し、最後に点2へと戻るような順序でも良い。
また、領域補正部103,205においては、色相反転領域を補正する際に、色相反転格子点をはさむ両端の境界格子点を結ぶ直線上に該色相反転格子点を移動する例を示した。しかしながら本発明はこの例に限らず、例えば、色相反転格子点および境界格子点をはさむ2つの格子点の間に該色相反転格子点および該境界格子点を移動するようにしても良い。また、色相反転格子点の移動先は直線上に限る必要はなく、例えば、境界格子点および、該境界格子点をはさむ2つの格子点とを通る4次関数を定義し、該4次関数の曲線上を移動先としても良い。このように曲線上に移動させることによって、補正領域と非補正領域との境界の階調を滑らかに接続することができる。
また、反転検出部102,203、および色域マッピング部104,206においては、収束点のJ,a,b値を(50,0,0)に設定する例を示したが、これは、出力色域内であれば、どのような座標でも良い。好ましくは、出力色域の白点、すなわち(R,G,B)=(255,255,255)なる点と、黒点、すなわち(R,G,B)=(0,0,0)なる点との中点に、収束点を設定する。また、入力色域あるいは出力色域のグレイ、すなわち(R,G,B)=(128,128,128)なる点、あるいは、入力色域の重心や出力色域の重心等、出力色域の中心近辺の点を、収束点としても良い。
また、色域マッピング部104,206においては、出力色域内の入力格子点についてはその色値を保存し、出力色域外の入力格子点については、該入力格子点と所定の収束点とを結ぶ線分と、出力色域表面との交点に貼り付ける手法を説明した。しかしながら本発明はこの例に限定されず、例えば、入力格子点の明度を保って出力色域表面に貼り付けても良いし、入力格子点のマッピング前後におけるCIECAM02色空間の3次元距離が最小になるように出力色域表面に貼り付けても良い。また、出力色域内の色を完全に保存する必要もなく、出力色域内、色域外ともに好ましい色にマッピングするようにマッピングしても良い。また、第1の色空間の色値と第2の色空間の色値とを対応付ける変換マトリックスを用いたマスキング手法を用いても良い。
また、上述した各実施形態で示した各構成は、本発明の趣旨を逸脱しない限り、互いに組み合わせることが可能である。
<他の実施形態>
以上、実施形態例を詳述したが、本発明は例えば、システム、装置、方法、プログラム若しくは記憶媒体(記録媒体)等としての実施態様をとることが可能である。具体的には、複数の機器(例えば、ホストコンピュータ、インタフェース機器、撮像装置、webアプリケーション等)から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
尚本発明は、前述した実施形態の機能を実現するソフトウェアのプログラムを、システムあるいは装置に直接あるいは遠隔から供給し、そのシステムあるいは装置のコンピュータが該供給されたプログラムコードを読み出して実行することによっても達成される。なお、この場合のプログラムとは、実施形態において図に示したフローチャートに対応したプログラムである。
従って、本発明の機能処理をコンピュータで実現するために、該コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、本発明は、本発明の機能処理を実現するためのコンピュータプログラム自体も含まれる。
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、OSに供給するスクリプトデータ等の形態であっても良い。
プログラムを供給するための記録媒体としては、以下に示す媒体がある。例えば、フロッピー(登録商標)ディスク、ハードディスク、光ディスク、光磁気ディスク、MO、CD-ROM、CD-R、CD-RW、磁気テープ、不揮発性のメモリカード、ROM、DVD(DVD-ROM,DVD-R)などである。
プログラムの供給方法としては、以下に示す方法も可能である。すなわち、クライアントコンピュータのブラウザからインターネットのホームページに接続し、そこから本発明のコンピュータプログラムそのもの(又は圧縮され自動インストール機能を含むファイル)をハードディスク等の記録媒体にダウンロードする。また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるWWWサーバも、本発明に含まれるものである。
また、本発明のプログラムを暗号化してCD-ROM等の記憶媒体に格納してユーザに配布し、所定の条件をクリアしたユーザに対し、インターネットを介してホームページから暗号化を解く鍵情報をダウンロードさせることも可能である。すなわち該ユーザは、その鍵情報を使用することによって暗号化されたプログラムを実行し、コンピュータにインストールさせることができる。
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される。さらに、そのプログラムの指示に基づき、コンピュータ上で稼動しているOSなどが、実際の処理の一部または全部を行い、その処理によっても前述した実施形態の機能が実現され得る。
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、実行されることによっても、前述した実施形態の機能が実現される。すなわち、該プログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行うことが可能である。