(第一の実施例)
図3は、本実施例における色処理装置1のハードウェア構成を示すブロック図である。101は、出力デバイスの色域内の任意点集合1001を取得する任意点集合取得部である。
図7に示すように、任意点集合1001は、色域の形状を十分に再現できる程度の数のデータが必要であり、一般的にパッチを測色することにより得られる。
例えば、プリンタなどの出力デバイスでパッチを出力し、出力されたパッチを測色機で測色することにより得ることが出来る。
102は、前記任意点集合取得部101によって取得された出力色域の任意点集合1001から、出力色域の色域表面形状を近似し、色域表面情報1002を算出する色域表面近似部である。
図7に示すように、色域表面情報1002は、色域の表面を近似的に構成する三角形のID番号と各頂点の座標から構成されている。該三角形は、任意点集合1001をもとに、Convex hullを用いた方法で生成される。任意点集合1001に対して、Convex hullを用いた方法を適用すると、任意点集合1001のすべてを覆う凸形状の多面体が形成される。該多面体の表面は、色域を近似的に表し、三角形の集合で形成される。三角形以外の多角形の集合で近似することもできるが、処理が簡単になるため、色域の近似には三角形が良く用いられる。Convex hullを用いて表面形状を近似する方法については、これまでに様々な方法が提案されているため、本実施例では説明を省略する。
色域情報保持部103には、出力色域内の任意点集合1001と、色域表面近似部102で算出された色域表面情報1002とが保持される。104は、演算途中の各データを一時保存しておくバッファメモリである。105は、前記色域表面近似部103において算出された色域表面情報1002の近似精度の判定を行う精度判定部である。106は、前記精度判定部105において判定された結果に応じて、前記色域表面データ内の低精度領域を再構築する色域表面再構築部である。107は、色域表面再構築部106により再構築された色域情報を出力する出力部である。
色処理装置1は、色域表面を示す複数の三角形の内、精度が悪い三角形を判定し、精度が悪いと判定された三角形を再構築する。
図6は、色処理装置1により実行される処理手順を示すフローチャートである。
ステップS1において、任意点集合取得部102は、色域情報保持部103に保持されている出力色域内の任意点集合を取得し、バッファメモリ104に保存する。ステップS2において、色域表面近似部102は、ステップS1において任意点集合取得部101が取得した出力色域の任意点集合をもとに、前述したconvex Hullを用いた手法で出力色域の表面形状を三角形の集合で近似する。ステップS3において、精度判定部105は、ステップS2で作成された出力色域の表面近似精度を判定する。精度判定の方法については、後述する。ステップS4において、色域表面再構築部106は、ステップS3において近似精度が悪いと判断された三角形に対し、三角形の再構築を行う。色域表面再構築部106の処理内容については後述する。ステップS5において、出力部107は、最終的に得られた出力色域の色域表面情報を出力する。
本実施例では、出力色域を多面体で表している。ステップS3における精度判定は、多面体を構成する三角形ごとに行う。例えば、図1のLC平面図に示されているように、実際の色域は凹だが凸に近似された領域10がある。領域10は、図から分かるように、一つの三角形で近似される。本来は複数の三角形で近似される凹である領域が、一つの三角形で凸に近似されるため、領域10を近似する三角形は、図8の601のように大きくなる。従って、本実施例では、しきい値Kよりも面積が大きい三角形は、本来の色域表面が凹である領域が凸に近似されているとして、精度が悪いと判定する。三角形の面積をしきい値と比較するだけなので、簡単な処理で精度判定を行うことが出来る。
図9に、ステップS3の具体的な処理の流れの例を示す。
ステップS31において、精度判定部105は、しきい値Kを設定する。しきい値Kは、色域表面上の三角形の面積に対応し、精度判定を行う際に用いられる。Kの値は経験的に決定されるものである。また、しきい値Kは、あらかじめ精度判定部105に保持しておいても良いし、外部から取得しても良い。
ステップS32において、精度判定部105は、カウントiに1を代入する。カウントiは、精度判定を三角形の数だけ行うためのカウンタである。
ステップS33において、精度判定部105は、精度フラグFiに0を代入する。精度フラグFiは、出力色域表面の近似精度が許容できるか否かを判定するためのフラグである。ID番号iの三角形パッチに精度フラグFiが対応している。本実施例では、Fiが0の場合はID番号iの三角形パッチの精度が許容でき、1の場合は許容できない、とする。
ステップS34において、精度判定部105は、ステップS24において色域表面近似部102によってバッファメモリ107に格納された色域表面情報1002の内、ID番号iの三角形の情報を取得する。
ステップS35において、精度判定部105は、ステップS34において取得したID番号iの三角形の面積を算出する。三角形の面積は、三角形の各頂点の座標から算出する。
ステップS36において、精度判定部105は、ステップS31で設定したしきい値KとステップS35で算出したID番号iの三角形の面積Aiを比較する。Ai<Kであった場合には、ステップS38に進む。Ai≧Kであった場合には、ステップS37に進む。
ステップS37では、三角形の面積Aiが所定のしきい値Kよりも大きいので、近似の精度が悪いと判断し、精度フラグFiに1を代入し、ステップS38に進む。
ステップS38において、精度判定部105は、ID番号iが全三角形の数Nと一致するか否かを判定する。i<Nの場合は、ステップS39に進む。i=Nの場合は、処理を終了する。
ステップS39において、精度判定部105は、カウントiをインクリメントし、ステップS33に戻る。
次に、精度が悪いと判定された三角形を再構築する具体的な方法について述べる。
図10に、ステップS4における色域表面再構築部106の具体的な処理の流れの例を示す。
ステップS41において、色域表面再構築部106は、カウントiに1を代入する。カウントiは、再構築するか否かの判定を三角形の数だけ行うためのカウンタである。
ステップS42において、色域表面再構築部106は、ステップS3において設定された精度フラグFiの値を参照する。Fi=0の場合は、近似精度が良いと判断された三角形なので、再構築処理を終了する。Fi=1の場合は、ステップS43に進む。
ステップS43において、色域表面再構築部106は、バッファメモリ104から、ステップS3において精度が悪いと判定された三角形のID情報を取得する。ステップS44において、色域表面再構築部106は、色域表面の再構築範囲を定義する。再構築範囲とは、三角形の再構築の際に用いる色域内部のデータを選別するための範囲である。
例えば、図11のように、精度が悪いと判定された三角形1101の面に垂直な直線を、三角形の各頂点から色域内部の方向に延ばし、得られた三角柱領域を再構築範囲1102とする。
ステップS45において、色域表面再構築部106は、色域情報保持部103に格納されている出力色域内の任意点集合1001と、色域表面情報1002とを取得する。
ステップS46において、色域表面再構築部106は、ステップS45において取得した出力色域内の任意点集合1001から色域表面1201上の点1203を除いた点集合1204を抽出する。抽出された点集合1204は、図12のLC平面に示す第二の色域表面1202内の点である。図12に示す第二の色域表面1202は、点集合を抽出した後、色域表面再構築部106により、Convex Hullを用いて抽出された点集合1204から算出される。
ステップS47において、色域表面再構築部106は、ステップS46において算出した第二の色域表面を構成する点の内、ステップS44において定義された再構築範囲1102に含まれる点を再構築点1302として取得する。再構築点1302は、近似精度が悪いと判定された三角形1101を複数の三角形に再構築する際に用いられる。色域表面1201と、第二の色域表面1202と、再構築範囲1102と、再構築点1302との関係を図13に示す。図13に示すように、再構築範囲1101に含まれる第二の色域表面1202上の点が、再構築点1302となる。
ステップS48において、色域表面再構築部106は、色域表面データと、ステップS47において取得された再構築点1302とを用いて、該色域表面を再構築する。再構築を行うのは、対象となっている三角形1101のみであり、三角形1101の各頂点1301と、ステップS47で取得した再構築点を結び、新たな複数の三角形を構築する。三角形が再構築された後の色域表面は、図14の1401のようになる。再構築された新しい三角形は、元の三角形を構成する頂点1301と再構築点1302から成り、図15に示すような三角形になる。図15は、再構築された新しい三角形を図14の矢印1402の方向から見た図であり、1402方向に凹になるように構築されている。誤差が大きいと判定された凸平面が凹平面に変換されるため、本来の色域表面に近くなり、近似精度が良好になる。
本実施例を用いて、色域を示す多面体を再構築すれば、ガマットマッピングや、色域を擬似三次元表示させる際などに近似精度が良い多面体を提供することが出来る。
(第二の実施例)
図4は、本実施例における色処理装置2のハードウェア構成を示すブロック図である。その構成は、実施例1における色処理装置1の構成とほぼ同じである。従って、色処理装置1と同様の構成である101から107までの説明は割愛する。
208は、本実施例で用いる入力画像データを出力色域内に写像するガマットマッピング部である。211は、本実施例で用いられる画像データと色域表面情報1002を入力する入力部である。
本実施例では、ガマットマッピングを行う際に、ガマットマッピングに用いる三角形を再構築するか否か判定し、再構築すると判定した場合、ガマットマッピングに用いる三角形を再構築する。
以下に、図16を用いて、具体的な処理フローを示す。
ステップS61において、入力部211は、ガマットマッピングする対象であるカラー画像データを読み込み、バッファメモリ104に保存する。ステップS62において、入力部211は、色域表面情報1002を取得し、色域情報保持部103に保持する。ステップS63において、ガマットマッピング部208は、バッファメモリ104からカラー画像データ中の画素と色域情報保持部103から色域表面情報とを取得して、ガマットマッピングに用いる三角形1903を抽出する。本実施例では、出力色域内の点1803から入力点1801へ引いた半直線と交わる出力色域を示す三角形を、ガマットマッピングに用いる三角形とする。
S64において、精度判定部105は、ガマットマッピングに用いる三角形の精度を判定し、ガマットマッピングの精度を判定する。本実施例では、ガマットマッピングに用いる三角形の近似精度を判定し、三角形の近似精度が悪い場合、ガマットマッピングの精度も悪くなると判定する。ガマットマッピングに用いられる三角形の近似精度の判定方法は、第一の実施例と同様の方法である。S64では、マッピングの精度が悪くなると判定された場合、ガマットマッピングを行わず、三角形を再構築するため、S65へ進む。S65では,色域表面再構築部106が、マッピングの精度が悪くなると判定された三角形を再構築する。三角形の再構築方法は、第一の実施例と同様の方法である。
S64でマッピングの精度は悪くないと判定された場合、S66で、ガマットマッピング部208は、入力画素を示す点をガマットマッピングする。ガマットマッピングの具体的な処理は、後述する。
S66におけるガマットマッピング後、S67へ進み、入力画像に含まれるすべての画素について、ガマットマッピングを行ったか否かを判定する。S65での再構築後、もしくはS67で、入力画像のすべての画素についてガマットマッピングを行っていないと判定された場合、再びS63に戻り、ガマットマッピングに用いる三角形を抽出する。すべての画素について、ガマットマッピングを行った場合、S68でガマットマッピングされた画像データを出力部107に出力する。以上が、本実施例における処理フローである。
次に、ガマットマッピング部208がガマットマッピングに用いる三角形を抽出する方法を述べる。
本実施例の出力色域は、先に説明したように、Convex hullによって得られた三角形の集合体から成っている。そこで、図22に示す処理を用いて、三角形を抽出する。
ステップS81では、出力色域内と容易にわかる点、例えば、(L,a,b)=(50,0,0)の点を定義する。ステップS82では、色域表面情報1002から三角形を1つ取り出し、該三角形を構成する3頂点で定義される平面の方程式を算出する。ステップS83では、ステップS81で定義した出力色域内点1803(50,0,0)と入力画素を示す点1801とを結ぶ直線の方程式を算出する。ステップS84において、ステップS82において算出した平面の方程式と、ステップS83において算出した直線の方程式とから、平面と直線の交点を算出する。ステップS85において、ステップS84で算出した交点が、三角形の中に入っているか否かを判定する。図18に三角形の内外判定の例を示す。図18に示すように、三角形の各頂点をそれぞれA、B、C、とし、ステップS84において算出された三角形と直線の交点をPとすると、各点は、以下の式(3)のように表すことができる。
この時、点Pが三角形ABCの中であれば、以下の式(4)、式(5)が成り立つ。
式(4)、式(5)が成り立てば、交点が三角形の中にあると判定する。交点が中にある三角形は、入力点の内外判定に用いる三角形であり、図16のフローで、ガマットマッピングに用いる三角形として再構築するか否かを判定する対象となる。式(4)、式(5)が成り立たなければ、交点が三角形の外にあると判定し、ステップS86に進む。
ステップS86では、直線と三角形が交点を持たない場合に、出力色域表面データの三角形のID番号を更新して、ステップS82に戻る。
本実施例において、入力点が色域内か否かを判定する方法を示す。図19に入力点1801、交点1802、色域内点1803の関係を示す。図19に示すように、入力点1801、交点1802、色域内点1803の位置関係は(a)、(b)の2通り考えられる。入力点1801をQ、交点1802をP、色域内点1803をRとすると、両者の判別方法は、例えば、以下に示す式(6)におけるvが0≦v≦1であるか否かで判別可能である。
0≦v≦1である場合は、入力点1801から色域内点1803までの距離が、交点1802から色域内点1803までの距離以下である。従って、入力点1801は出力色域内(図19の(b)の状態)と判定する。
一方、0≦v≦1でない場合には、入力点1801から色域内点1803までの距離が、交点1802から色域内点1803までの距離よりも大きい。従って、入力点1801は出力色域外(図19の(a)の状態)であると判定する。
以上が、本実施例における色域内外判定の方法である。
次に、本実施例におけるガマットマッピング処理について説明する。
ステップS66におけるガマットマッピングは、図20に示すように行う。例えば、入力画素を示す入力点1801が出力色域外である場合、入力画素をマッピング後データとして、設定する。
また、入力画素を示す入力点1801が出力色域外である場合、入力点1801と出力色域内の点1803とを結ぶ直線を定義し、該直線と交わる出力色域表面上の三角形との交点にマッピングする。すなわち、マッピング後データとして、該交点の座標を設定する。
以下に、図17のフローを用いて、図20に示すガマットマッピングを実現するための具体的な処理の流れを示す。
ステップS71において、ガマットマッピング部208は、バッファメモリ104に保持されている入力画像の画素値(R,G,B値)を取得する。ステップS72において、ガマットマッピング部208は、色域情報保持部103から、色域表面情報1002を取得する。
ステップS73において、ガマットマッピング部208は、ステップS71で取得した入力画素(R,G,B値)をデバイス非依存のCIELAB値に変換する。本実施例では、入力画像を表現している色空間をsRGB(IEC61966−2−1)として以後の処理を説明する。入力画素のRGB値をRi,Gi,Biとすると、まず、以下の式(1)を用いて、CIE三刺激値XYZに変換する。
その後、白色点をD65としてCIELABに変換する。変換式を式(2)に示す。
以下、CIELABに変換された入力画素を(Li,ai,bi)とする。本実施例では、入力画像がIEC61966−2−1で規定されるsRGB色空間で表現されている場合を例にあげて説明したため、式(1)及び式(2)に示す変換式を用いた。しかし、画像を表現する色空間がsRGB色空間ではなく、AdobeRGB色空間などの他の色空間であってもよい。他の色空間であった場合は、式(1)は、該色空間に対応するものとなる。また、CIELABへ変換する際の白色点も該色空間に対応した白色点を用いる。
ステップS74において、ガマットマッピング部208は、ガマットマッピングに用いる三角形を用いて、入力画素が出力色域内にあるか否かを判定する。ガマットマッピングに用いる三角形がS65のステップで再構築されている場合、前述した三角形を抽出する方法を用いて、新たにガマットマッピングに用いる三角形を抽出し、入力画素が出力色域内にあるか否かを判定する。
入力画素が色域内にあると判定された場合には、マッピング後データに入力画素の値を代入し、ステップS76へ進む。
入力画素が色域外と判定された場合には、ステップS75に進む。ステップS75では、マッピング後データは、入力点1801と色域内点1803を結ぶ直線とガマットマッピングに用いる三角形との交点になる。交点の算出法については、色域内外判定法の説明の際に述べたため、ここでは省略する。
ステップS76において、ガマットマッピング部208は、マッピング後データ1901に対応する出力デバイス値、例えばRGB値を算出する。デバイス値の算出は、例えば、デバイス値とCIELAB値との関係を表すLUT、変換マトリクス等を用いて変換する。LUTの場合は、四面体補間等の既知の技術を用いて変換する。
以上が、本実施例におけるガマットマッピングの具体的な処理の流れである。
本実施例では、ガマットマッピングに用いる三角形を再構築するか否かの対象とした。ガマットマッピングに用いる三角形は、色域内外判定に用いられる。また、色域外の入力点を、ガマットマッピングする際、マッピング後の点は、ガマットマッピングに用いる三角形面上の点になる。図2に示したように、実際の色域は凹だが凸に近似された領域10が、マッピングに用いる三角形である場合、マッピング先は21になる。しかし、実際のマッピング先21が示す色は、出力色域外であるため、出力デバイスで出力することは出来ない。
また、内外判定に用いられる点24が、本来の色域表面と近似した色域表面との間に位置している場合、本来は色域外であるはずが、色域内と判定されてしまうことがある。
従って、本実施例のガマットマッピングに用いる三角形を再構築する方法を用いることにより、上記問題を防止し、より良好なガマットマッピングを行うことが出来る。
(第三の実施例)
図3は、本実施例における色処理装置3のハードウェア構成を示すブロック図である。その構成は、実施例1における色処理装置1の構成とほぼ同じである。従って、色処理装置1と同様の構成である101から107までの説明は割愛する。309は、色域を示す多面体を、モニタなどの表示装置に擬似三次元表示させる多面体表示部である。310は、ユーザーからの指示を取得する指示取得部である。
第一の実施例及び、第二の実施例では、面積が大きい三角形を近似精度が悪いと判定した。しかし、本実施例では、ユーザーの指示に従い、精度が悪いと判定された三角形を再構築する処理する。図21を用いて、以下に処理フローを示す。
S51では、色域保持部103から、色域表面情報1002を取得する。
S52では、取得された色域表面情報1002に基づき、多面体表示部309は色域を示す多面体を擬似三次元表示させる。多面体は、図8のようにモニタなどの表示装置に表示される。
S53では、ユーザーの指示を指示取得部310から取得し、再構築する三角形を選択する。この際、多面体は、擬似三次元表示されているため、ユーザーは、マウスなどのポインティングデバイスを用いて、簡単に再構築する三角形を選択することが出来る。また、ユーザーが選択しやすいように、各三角形の面積を多面体と共に表示させてもよい。
S54において、色域表面再構築部106は、選択された三角形を複数の三角形に再構築する。三角形の再構築の方法は、実施例1で述べた方法と同様であるため、説明を省く。S55では、ユーザーの指示に基づき、再構築する三角形が他にあるかどうかを判定する。再構築する三角形が他にある場合は、S52に戻り、再び多面体を表示させる。再構築する三角形が他にない場合は、S56へ進み、色域表面情報を出力し、処理を終了する。本実施例では、ユーザーの指示に基づき、再構築する対象となる三角形を指定した。従って、良好な近似精度が要求されない領域を構成する三角形については再構築を行わないなど、よりユーザーの要望を反映させた処理が可能になる。
(第四の実施例)
なお、第二の実施例においては、入力画像をsRGB(IEC61966−2−1)で表現されていると仮定して処理の説明をしたが、本実施例における色処理装置への入力は特にsRGBに限ったものではなく、AdobeRGBのような他の色空間であってもよい。
また、上記第一〜第三の実施例では、色域情報を色域情報保持部においてあらかじめ保持しておいたが、これに限らず、例えば、入力部を介し、外部から読み込むようにしても良いし、色域情報保持部にあらかじめ複数の色域情報を保持させておいて、外部からの入力に対応した色域情報を選択してもよい。
また、第二の実施例におけるガマットマッピング部208では、出力色域内の色を完全に保存し、出力色域外の色は、その色を示す点と色域内のある点を結ぶ直線と、出力色域表面との交点の色に変換する手法を説明したが、例えば、出力色域外の色と等明度で出力色域表面上の色に変換するようにしても良い。また、色相を変えずにCIELAB空間内のユークリッド距離(色差ΔE)が最小になるような色に変換しても良い。また、出力色域内の色を完全に保存する必要もなく、出力色域内、色域外とも好ましい色にマッピングするようにしても良いことは言うまでもない。
また、第二の実施例においては、マッピングする際の空間にCIELAB空間を用いたが、これは、例えばCIELUV空間やXYZ空間でも良いし、CIECAM97、CIECAM97s、CIECAM02のようなカラーアピアランス空間を用いてもかまわない。
また、上記実施例では、三角形の形状情報として、三角形の面積を用いて、色域表面の精度を判定した。しかし、例えば、三角形の各辺の長さの和で判定しても良いし、さらに言えば、色域表面の近似精度を判定できる方法であればどのような方法であってもかまわない。
また、上記実施例における色域表面再構築部では、再構築範囲として、三角形を含む三角柱領域を定義したが、再構築範囲はこれに限定されるものではなく、例えば、三角形と原点とを結ぶ三角錐領域であっても良いし、三角形を囲む立方体などであっても良い。
(第五の実施例)
上記実施例は、任意点集合から生成された色域表面形状を解析し、低精度領域を検出し、再構築することにより、高精度の色域表面形状を生成するものである。
これに対して、本実施例は、色域マッピングで行うスケーリング処理を高精度のものとするために、色域情報の所定条件を満たす領域を分割するものである。
図23は第五の実施例としての色再現編集装置のシステム構成を示すブロック図である。図23の構成において、401はCPU、402はメインメモリ、403はSCSIインタフェース、404はネットワークインタフェース、405はHDD、406はグラフィックアクセラレータ、407はカラーモニタ、408はUSBコントローラ、409はカラープリンタ、410はキーボード/マウスコントローラ、411はキーボード、412はマウス、413はローカルエリアネットワーク、414はPCIバス、415はスキャナである。
上記構成における、ディジタル画像のプリンタ出力動作について述べる。まず、HDD405に格納されている画像アプリケーションが、ユーザの指示を受けたOSプログラムに基づき、CPU401にて起動される。続いてユーザの指示による画像アプリケーション内の処理にしたがって、HDD405に格納されているディジタル画像データが、CPU401からの指令に基づきSCSII/F403を介してPCIバス414経由によりメインメモリ402に転送される。あるいは、LANに接続されているサーバに格納されている画像データあるいはインターネット上のディジタル画像データが、CPU401からの指令によりネットワークI/F404を介してPCIバス414経由によりメインメモリ402に転送される。以下、メインメモリ402に保持されているディジタル画像データは、RGB各色信号が符号無し8bitで表現される画像データであるものとして実施例を説明する。前記メインメモリ402に保持されているディジタル画像データは、CPU401からの指令によりPCIバス414経由によってグラフィックアクセラレータ406に転送され、グラフィックアクセラレータ406はディジタル画像データをD/A変換した後ディスプレイケーブルを通じてカラーモニタ407に送信する。これにより、カラーモニタ407上に画像が表示される。ここで、ユーザがメインメモリ402に保持されているディジタル画像をプリンタ409から出力するよう画像アプリケーションに指令すると、画像アプリケーションはディジタル画像データをプリンタドライバに転送する。CPU401は、プリンタドライバの後述の処理フローチャートに基づき、ディジタル画像データをCMYKディジタル画像データに変換し、USBコントローラ408を介して前記CMYK画像データをプリンタ409へ送信する。以上一連の動作の結果として、プリンタ409よりCMYK画像が印字される。
以下では、上記構成におけるプリンタドライバ動作について、図24のフローチャートを用いて説明する。
まずステップS101にて、画像アプリケーションより転送されたRGB24bit画像データ(各色信号が符号無し8bitの画像データ)をメインメモリ402に格納する。
ステップS102にて、後述の処理に基づいて色補正LUTを作成する。色補正LUTはRGB色空間での格子点の色座標データと、前記格子点が再現するL*a*b*色空間の座標値との対応を記した、図25の様なデータ構造で構成される。データ構造の先頭には、R/G/B値のステップが記述され、この後に、各格子点に対応する色座標がL*値、a*値、b*値が、R、G、Bの順でネストされて記述される。なお、以下では上記データ構造が色の分布を示すことから色補正LUTを色分布データとも呼ぶ。
ステップS103では、色補正LUTに基づき、RGB24bit画像データをL*a*b*固定小数点データに変換し、再びメインメモリ402に格納する。変換には四面体補間を用いる。
ステップS104では、あらかじめ定められた色変換LUTに従って、先のL*a*b*固定小数点データをCMYK32bit画像データ(CMYKの各色信号が符号無し8bitの画像データ)に変換し、再びメインメモリ402に格納する。
ステップS105では、メインメモリに格納されたCMYK32bit画像データを、USBコントローラ408を介してプリンタ409へ送信する。
以下では、ステップS102に於ける色補正LUT作成処理について、図26のフローチャートに従い説明する。
ステップS201では、図示されない方法により定められた、写像元の色再現情報と写像先の色再現情報とを取得する。これらの色再現情報は、例えばsRGBの変換式であったり、あるいはあらかじめ測定されたデバイスの色再現特性であったりする。一例として、プリンタの色再現の模式図を図27に示す。
ステップS202では、取得した写像元の色再現情報と写像先の色再現情報とから、後述の処理フローに基づいて写像元と写像先の色域の等色相断面情報をL*a*b*色空間において生成する。ここで、等色相断面情報は、2度毎に180個の情報が生成される。
ステップS203では、ステップ404での写像動作の為に国際照明委員会(CIE)のTC8−03にて推奨されているSGCK技法に基づき、後述する様に写像元の色域の等色相断面情報をL*a*b*色空間においてスケーリングする。
ステップS204では、SGCK技法に基づき、後述する様にL*a*b*色空間において色域写像を行う。
ステップS205では、ステップS204での写像結果を、写像先の色再現情報を用いてL*a*b*値からRGB値に変換し、色補正LUTを生成する。
SGCK技法による写像処理(色域マッピング)の概略について、図36のフローチャートに従い説明する。また、処理の1例を、図37および図38に示す。処理の詳細に関しては、国際照明委員会のTC8−03の文献に記述されている。
ステップS501では、写像すべき色を取得する。図37aにおいて、実線が写像元の色再現を示し、網点が写像先の色再現を示す。
ステップS502では、明度レンジを正規化するよう、明度値に対してスケーリングを施す。この処理による色再現の変化の一例を、図37bに示す。ここで一点破線が写像元の色再現を表し、実線が処理後の色再現を表し、点線が写像先の色域を表す。
ステップS503では、シグモイド関数を用いて明度値をスケーリングする。この処理による色再現の変化の一例を、図37cに示す。ここで一点破線がステップS502の処理結果である色再現を表し、実線が処理後の色再現を表し、点線が写像先の色域を表す。
ステップS504では、彩度値に基づいて明度値を補正する。この処理による色再現の変化の一例を、図37dに示す。ここで一点破線がステップS503の処理結果である色再現を表し、実線が処理後の色再現を表し、点線が写像先の色域を表す。
ステップS505では、色相値を保存しつつ、明度と彩度とを写像する。この写像について、図38を用いて説明する。図に於いて、実線はステップS203でスケーリングされた写像元の色域、破線は写像先の色域を表す。色Mを写像する際、まず、スケーリングされた写像元の等色相断面情報と、写像先の等色相断面情報とから、色Mの色相に最も近い等色相断面情報をそれぞれ取得する。続いて、写像先の等色相断面情報にてMと同じ色相で最大彩度となる明度値を算出し、その明度を有するL*軸上の色をFと定義する。その後、FとMとを結んだ線とスケーリングされた写像元の等色相断面情報との交点Bsrcを算出し、FとMとを結んだ線と写像先の等色相断面情報との交点Bdstを算出する。続いて、BdstとFとの間を1:9に内分する点Cを算出する。ここで、MとFとの距離が、BdstとCとの距離を下回っていれば、色Mに対して写像は行わない。他方、上回っている場合には、MがBsrcとCとを内分する値で、BdstとCとの間を内分する色を、Mの写像値とする。
次に、ステップS202における写像元の色域情報と写像先の色域情報との作成処理について、図28のフローチャートに従い説明する。
ステップS301では、写像元の色域情報から色域内の色分布情報を生成し、生成した色分布情報からConvex Hull技法を用いて写像元の初期色域情報を生成する。これらの一例として、図29に色分布情報を、図30にConvex Hull技法により生成された初期色域情報を示す。なお、色域情報は複数のポリゴンの組み合わせで表現される。
ステップS302では、色相平面と色域のポリゴンとの交点を求め、それらの点を結び等色相断面を生成する。図31において、等色相面を一点鎖線で示し、等色相断面を点線で示す。
ステップS303では、等色相断面を構成する線分の、線分選択情報をクリアする。ステップS304では、線分の選択情報に応じて、線分を一つ選択して情報を取得する。ステップS305では、選択した線分の長さが所定の値より長いかどうかを判定し、真であればステップS306へ移行し、偽であればステップS307へ移行する。
ステップS306では、選択された線分が、所定の値より短い線分で構成されるように、選択された線分に内分点を一つ、或いは複数挿入し、分割する。この動作を、図32に図示する。図に於いて、線分Lが選択された線分を示し、点M1、M2が挿入された内分点を表す。これによりT1〜T3の様に複数の線分に分割される。
ステップS307では、選択された線分情報を、次に新たに異なる線分を選択するように更新する。ステップS308では、全ての線分を選択したかどうかを判定する。判定が真であれば処理を終了する。このとき、全ての線分の長さが所定の値より短くなっている。偽であれば、ステップS304へ移行する。
上述の一連の動作による処理結果の一例を、図33に示す。図33aに示す等色相断面に対して上述の処理を行った結果が図33bである。図33bでは、図33aに比べて点が増えている。
ステップS203に於ける、ステップ402で生成された色域の等色相断面情報に対するSGCK技法に基づく色域スケーリング処理について、図34のフローチャートに従い説明する。
ステップS401では、ステップ402で生成した色域の等色相断面情報を取得する。ステップS402では、色域の等色相断面情報を構成する線分の各頂点に対し、ステップS502と同様に明度レンジを正規化するよう、明度値に対してスケーリングを施す。ステップS403では、色域の等色相断面情報を構成する線分の各頂点に対し、ステップS503と同様に、シグモイド関数を用いて明度値をスケーリングする。ステップS404では、色域の等色相断面情報を構成する線分の各頂点に対し、ステップS504と同様に、彩度値に基づいて明度値を補正する。ステップS405では、ステップS402〜S404の処理を施した色域情報をメインメモリ402に記憶する。
このように、本実施例では、頂点に対してステップS402〜S404の処理を行う。そして、各頂点の間については、スケーリング処理された頂点データを線形補間することにより算出する。
本実施例では、図28に示した色域情報の生成処理において、色域の等色相断面を構成する線分から、所定値より長い線分を分割している。つまり、ステップS402〜S404の処理を行う頂点データを増やしている。これにより、線形補間により生じる誤差が所定以下になるように制御することができ、高精度なスケーリング処理を実現することができる。
上述の一連の動作による処理結果の一例を、図35に示す。ここで、実線で示される領域が算出した等色相断面であり、点線で示した領域がスケーリング結果の領域である。図から明らかなように、本実施例を用いない場合の例である図39と比較してスケーリング誤差が小さくなっている。
(第六の実施例)
第五の実施例では、図28に示されるようにConvex Hull技法により生成された色域の色相断面を構成する線分の長さが長い場合は、線分を分割する頂点を追加する処理を行っている。これに対して、本実施例では、頂点の追加処理をポリゴンを構成する辺毎に行う。
以下、第五の実施例と異なる点について説明する。
本実施例における、ステップS202に写像元の色域情報と写像先の色域情報との作成処理について、図40を用いて説明する。
ステップS601では、写像元の色域情報から色域内の色分布情報を生成し、生成した色分布情報からConvex Hull技法を用いて写像元の初期色域情報を生成する。これらの一例として、図29に色分布情報を、図30に初期色域情報を示す。なお、色域情報は複数のポリゴンの組み合わせで表現される。
ステップS602では、ポリゴンを構成する辺の、辺選択情報をクリアする。ステップS603では、辺の選択情報に応じて、辺を一つ選択して情報を取得する。ステップS604では、選択した辺の長さが所定の値より長いかどうかを判定し、真であればステップS605へ移行し、偽であればステップS606へ移行する。ステップS605では、選択された辺を含む2つのポリゴンについて、それぞれ次のように分割する。まず、選択された辺の中点に点を一つ挿入する。その後、選択された辺の端点以外の点に対し線分を結ぶことで、新たに辺を生成する。最後に、新たに生成された辺を用いて、ポリゴンを、複数三角パッチに分割する。この動作を、図41に図示する。図に於いて、実線が選択されたポリゴンを示し、点Mが挿入された中点を表す。点線は、新たに生成された辺を表し、これによりT1〜TNの様に複数の三角パッチに分割される。尚、ポリゴンの頂点数Mと分割生成された三角パッチNの間にはN=M−2の関係がある。図41aは、ポリゴンが3角形の場合を示し、図41bは3角形とは異なる多角形の場合を示す。このように、本実施例ではポリゴンの形に限定されない。
ステップS606では、選択された辺情報を、次に新たに異なる辺を選択するように更新する。
ステップS607では、総ての辺を選択したかどうかを判定する。判定が真であれば、処理を終了する。このとき、総ての辺の長さが所定の値より短くなっている。偽であれば、ステップ603へ移行する。
上述の一連の動作による処理結果の一例を、図42に示す。これは、図30に示した色域情報に対して処理が行われた結果である。
このように、本実施例では頂点を追加する処理をポリゴンを構成する辺毎に行う。よって、図42に示されるように、ポリゴンを構成する頂点が適切に配置されることになる。
そして、本実施例では、第五の実施例において図34を用いて説明した、色域のスケーリング処理を、色域情報を構成するポリゴンの各頂点に対して行う。図42に示した色域情報に対してスケーリング処理を行った結果から算出した等色相断面図を図43に示す。ここで、網点で示される領域が本実施例によって算出された等色相断面であり、実線で示した領域が実際のデバイス色域をスケーリングした際の領域である。本実施例を用いない場合の例である図39と比較してスケーリング誤差が小さくなっている。
本実施例によれば、生成された色域情報を再度分割する手段を用意しておくことで、その後の色域写像で必要とされる色域のスケーリングにおいて、スケーリング精度を向上させることが可能となる。結果として、色域写像の精度向上を実現し、出力画像の色再現性向上を実現できる。
なお、本実施例では、色域情報がポリゴンあるいは三角パッチで構成されるとして説明した。しかしながら、本実施例は、色域情報が非線形曲面の集合として表現される場合にも応用可能である。
(第七の実施例)
第六の実施例では頂点を追加するか否かの判定をポリゴンを構成する辺毎に行っていた。本実施例では、ポリゴンの面積に基づきポリゴン毎に頂点の追加処理を行う。
本実施例におけるステップS202の写像元の色域情報と写像先の色域情報との作成処理について、図44のフローチャートに従い説明する。
ステップS701では、写像元の色域情報から色域内の色分布情報を生成し、生成した色分布情報からConvex Hull技法を用いて写像元の初期色域情報を生成する。ステップS702では、色域情報を構成するポリゴンに於ける、ポリゴン選択情報をクリアする。ステップS703では、ポリゴン選択情報に応じて、ポリゴンを一つ選択して情報を取得する。ステップS704では、選択したポリゴンの面積が所定の値より大きいかどうかを判定し、真であればステップS705へ移行し、偽であればステップS706へ移行する。ステップS705では、選択されたポリゴンについて、次のように分割する。まず、選択されたポリゴンの重心に点を一つ挿入する。その後、ポリゴンの頂点に対し線分を結ぶことで、ポリゴンを三角パッチに分割する。更に、生成した三角パッチを面積が等しくなるよう、挿入した点から線を引いて二つに分割する。
ステップS706では、選択されたポリゴン情報を、次に新たに異なるポリゴンを選択するように更新する。ステップS707では、総てのポリゴンを選択したかどうかを判定する。判定が真であれば、処理を終了する。このとき、総てのポリゴンの大きさが所定の面積より小さくなっている。偽であれば、ステップS703へ移行する。この動作を、図45a,bに図示する。図に於いて、実線が選択されたポリゴンを示し、点Mが挿入された重心点を表す。点線は、新たに生成された辺を表し、これによりT1〜TNの様に複数の三角パッチに分割される。尚、ポリゴンの頂点数Mと分割生成された三角パッチNの間にはN=2×Mの関係がある。
なお、第五〜第七の実施例では色域マッピングとしてSGCK技法を用いていたが、明度または彩度のスケーリング処理を行う他の色域マッピング方法にも適用できる。
(変形例)
なお、上記実施例では、色域表面を三角形の集合で近似した。しかし、三角形ではなく、四角形などの他の多角形で近似してもよい。
なお、上記実施例は、複数の機器(例えばホストコンピュータ、インタフェイス機器、リーダ、プリンタなど)から構成されるシステムに適用しても、一つの機器からなる装置(例えば、複写機、ファクシミリ装置など)に適用しても良い。
また、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記録媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ(またはCPUまたはMPU)が記録媒体に格納されたプログラムコードを読み出し実行することによって、本実施例に記載された方法を行ってもよい。この場合、記録媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記録媒体は本実施例を構成することになる。
プログラムコードを供給するための記録媒体としては、例えば、フロッピー(登録商標)ディスク、ハードディスク、光ディスク、光磁気ディスク、CD−ROM、CD−R、磁気テープ、不揮発性のメモリカード、ROMなどを用いることが出来る。
また、コンピュータが読み出したプログラムコードを実行することにより、前述した上記実施例の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているOS(オペレーティングシステム)などが実際の処理の一部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
さらに、記録媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって上記実施例の機能が実現される場合も含まれることは言うまでもない。