以下、本実施形態について図面を用いて詳細に説明する。
図1は本実施形態の色処理装置のハードウェア構成を示すブロック図である。
図1において、101はCPUであり、色処理装置を構成する各種構成要素を制御する。102はメインメモリであり、RAMやROM等で構成され、RAMはデータ作業領域や一時待避領域として機能する。ROMは、本実施形態を実現するプログラムを含む各種制御プログラムを記憶している。
103はSCSIインタフェース(I/F)であり、SCSIデバイス(例えば、HDD105)との接続及びそれに対するデータ転送を制御する。104はネットワークインタフェース(I/F)であり、外部ネットワーク(ローカルエリアネットワーク113)との接続及びそれを介するデータ送受信を制御する。105はHDD(ハードディスクドライブ)であり、上記各種制御プログラム(OSや、各種アプリケーション)やルックアップテーブル(LUT)を含むプロファイルデータ等の各種データを記憶する。
尚、本実施形態では、HDDは、SCSI形式のHDDを例に挙げて説明しているが、これに限定されず、IDE形式、SATA形式等の他の形式のHDDであっても構わない。その場合、各形式に応じたインタフェースが構成されることは言うまでもない。
106はグラフィックアクセラレータであり、カラーモニタ107に出力する画像(例えば、CPU101の制御によって生成される各種ユーザインタフェース)の表示を制御する。107はカラーモニタであり、例えば、LCDやCRTで構成される。
108はUSBコントローラであり、USBデバイス(例えば、カラープリンタ109)との接続及びそれの制御を実行する。109はカラープリンタであり、例えば、インクジェット方式やレーザビーム方式等の各種印刷方式がある。110はキーボード/マウスコントローラであり、入力デバイス(キーボード111やマウス112)との接続及びそれらの制御を実行する。111はキーボード、112はマウスである。113はローカルエリアネットワークである。114はシステムバスであり、例えば、PCIバス、ISAバス等で構成され、色処理装置を構成する各種構成要素を相互に接続する。
次に、図1の色処理装置に於けるプロファイル作成の一連の動作について、図1の構成と、図2のユーザインタフェースとを用いて説明する。
まず、ユーザの操作及びCPU101の指示により、HDD105に格納されているプロファイル作成アプリケーションが、OSプログラムにより起動され、メインメモリ102上に展開される。プロファイル作成アプリケーションが起動されると、まず、HDD105に格納されている初期ガマットデータが、CPU101の指示に基づきSCSI I/F103、システムバス114を経由して、メインメモリ102に転送される。そして、プロファイル作成アプリケーションにより、図2に示すプロファイル作成用のユーザインタフェースがカラーモニタ107上に表示される。
尚、このユーザインタフェースに対する操作は、キーボード111やマウス112等の入力デバイスを用いて実行する。そして、ユーザはこれらの入力デバイスを用いてユーザインタフェース上で用意された各種コントロールを操作することによって、所望のプロファイルを作成することができる。
ここで、図2のユーザインタフェースについて説明すると、201は、ガマットデータの読込を指示するためのボタンである。202は、作成したプロファイルを保存するためのボタンである。203は、表示領域である。
204は、色域表示のON/OFFを指示するための色域表示チェックボックスである。205は、プロファイル生成に使用される色再現特性の表示をON/OFFを指示するための色再現表示チェックボックスである。206は、プロファイル色分布の三次元表示をON/OFFするためのプロファイル色分布表示チェックボックスである。207は、アプリケーション終了ボタンである。
ユーザが、ガマット読込ボタン201によりガマットデータの読込を指示すると、プロファイル作成アプリケーションの処理に従い、HDD105に格納されたガマットデータが、CPU101の指示に基づきSCSI I/F103、システムバス114を経由して、メインメモリ102に転送される。あるいは、LAN113に接続されたサーバに格納されたガマットデータまたはインターネット上のガマットデータが、CPU101の指示により、ネットワークI/F104、システムバス114を経由してメインメモリ102に転送される。そして、プロファイル算出処理が実行される。
プロファイル算出処理結果は、各チェックボックスの設定に従って、表示領域203に擬似三次元表示される。
まず、色域表示チェックボックス204がONである(チェックされている)場合には、読み込んだガマットデータの三次元色域形状が、表示領域203に擬似三次元表示される。また、色再現表示チェックボックス205がONである場合には、プロファイル生成に使用される色再現特性が、擬似三次元表示される。また、プロファイル色分布表示チェックボックス206がONである場合には、プロファイルのLUT値が、表示領域203に擬似三次的に点表示される。
また、各チェックボックス204〜206のON/OFFを行った場合にも、上記のような表示形態に更新がなされる。
ユーザが、プロファイル保存ボタン202を操作して、プロファイル保存を指示すると、プロファイル作成アプリケーションは、生成されたプロファイルをHDD105に保存する。
ユーザが、終了ボタン207を操作してアプリケーション終了を指示すると、総てのデータ並びにプロファイル作成アプリケーションがメインメモリ102より消去され、アプリケーション動作を終了する。
次に、プロファイル作成アプリケーションの動作について、図3の状態図を用いて説明する。
図3は本実施形態のプロファイル作成アプリケーション動作の状態遷移図である。
ステート301では、アプリケーション動作に必要な各種メモリ領域の確保等の初期化動作を行う。
ステート302では、後述の処理に従って、プロファイル算出用のB−Spline Solidに対する基底関数並びに係数を算出し、設定する。
ステート303では、初期ガマットデータをHDD105から読み込んでメインメモリ102に記憶する。ここでガマットデータは、図4に示すデータ構造からなる。構造としては、色域(ガマット)を表す三角パッチデータの総数が記述され、その後にパッチ総数分だけ三角パッチの3頂点を表す3つのL*a*b*値が記述されたものである。
ステート304では、後述の写像動作に従って、B−Spline Solid(B−スプライン体)の係数を写像変換して、メインメモリ102に記憶する。但し、オリジナルのB−Spline Solidの係数は、破棄せずにそのまま保存を続ける。
ステート305では、後述の処理に従って、プロファイル算出用のB−Spline Solidを用いてプロファイルを作成し、メインメモリ102に記憶する。
ステート306では、後述の処理に従って、ステート304にて生成したプロファイル算出用のB−Spline Solid並びにステート305にて生成したプロファイルを用い、擬似三次元表示用の3Dオブジェクトデータを生成する。3Dオブジェクトデータは、色域表示用のソリッドデータ、プロファイル算出用色再現用のソリッドデータ、プロファイル表示用のポイントデータの3データである。
ステート307では、ユーザ操作判断待ち状態となる。
ここで、色域表示チェックボックス204がON/OFFされた場合には、ステート308へ移行して、色域表示処理を実行する。
色再現表示チェックボックス205がON/OFFされた場合には、ステート309へ移行して、色再現表示処理を実行する。
プロファイル色分布表示チェックボックス206がON/OFFされた場合には、ステート310へ移行し、プロファイル保存処理を実行する。
ガマットデータ読込ボタン202が押下されると、ステート311へ移行して、ガマットデータ読込処理を実行する。プロファイル保存ボタン202が押下されると、ステート312へ移行し、プロファイル保存処理を実行する。終了ボタン207が押下されると、ステート313へ移行し、終了処理を実行する。
ステート308では、色域表示チェックボックス204がONとなった場合には、色域表示用のソリッドデータを表示する。一方、OFFとなった場合には色域表示用のソリッドデータを非表示する。このON/OFFにより、図2の表示領域203内に、図示のような、色域表示用のソリッドデータの表示/非表示がなされる。尚、図2では、色再現表示用のソリッドデータを単体で表示しているものであり、他の3Dオブジェクトデータが重畳して表示される場合もある。
ステート309では、色再現表示チェックボックス205がONとなった場合には、色再現表示用のソリッドデータを表示する。一方、OFFとなった場合には、色再現表示用のソリッドデータを非表示する。このON/OFFにより、図2の表示領域203内に、図5に示すような、色再現表示用のソリッドデータの表示/非表示がなされる。尚、図5では、色再現表示用のソリッドデータを単体で表示しているものであり、他の3Dオブジェクトデータが重畳して表示される場合もある。
ステート310では、プロファイル色分布三次元表示チェックボックス206がONとなった場合には、プロファイル表示用のポイントデータを表示する。一方、OFFとなった場合には、プロファイル表示用のポイントデータを非表示する。このON/OFFにより、図2の表示領域203内に、図6に示すような、プロファイル表示用のポイントデータの表示/非表示がなされる。尚、図6では、プロファイル表示用のポイントデータを単体で表示しているものであり、他の3Dオブジェクト・データが重畳して表示される場合もある。
ステート311では、読込対象のガマットデータファイルをユーザが指定し、その後、指定されたガマットデータファイルがオープンできるかどうか、また正しいガマットデータフォーマットかどうかを判定する。ガマットデータファイルがオープンでき且つ正しいフォーマットであれば、HDD105もしくはネットワーク経由で読み込まれたガマットデータファイルをメインメモリ102に記憶した後、ステート303へ移行し、そうでなければステート307へ移行する。
ステート312では、メインメモリ102に記憶されているプロファイルをしかるべきフォーマットにてHDD105へ保存し、ステート307へ移行する。
ステート313では、メインメモリ解放等の終了動作を行った後、プロファイル作成アプリケーションを終了する。
以下では、ステート302における、プロファイル算出用のB−Spline Solidに対する基底関数並びに係数の算出処理について、図7のフローチャートを用いて説明する。
図7は本実施形態のプロファイル算出用のB−Spline Solidに対する基底関数並びに係数の算出処理を示すフローチャートである。
尚、以後の説明のため、あらかじめプロファイル算出用のB−Spline Solidの式を説明する。この式は、
で定義される。
ここで、rr、gg、bbはRGB値、l、a、bはL*a*b*値を表す。NrはR軸方向での基底関数、NgはG軸方向での基底関数、NbはB軸方向での基底関数であり、clijk、caijk、cbijkは係数を表すものである。また、式の中でNr、Ng、Nbに付属するサフィックスi、j、kは、それぞれの軸に対する基底における基底関数番号である。つまり、この式は、区分的多項式を基底関数とする多重総和演算式である。
ステップS401では、sRGBの変換式に従って、RGB値とL*a*b*値との対応を取得する。以後、RGB値とL*a*b*値との対応関係として、i番目のRGB値をrri、ggi、bbi、L*a*b*値をli、ai、biとして説明する。但し、RGB値は、あらかじめ定められたR/G/B値のステップに基づいて、R/G/B値の順番でネストされた値である。
ステップS402では、あらかじめ定められたR/G/B値のステップに基づいて、基底関数を算出し、メインメモリ102に記憶する。基底関数の算出には、一般的なDe Boor−Coxのアルゴリズムを用いる。R/G/B値のステップが同一であった場合、基底関数Nr、Ng、Nbがいずれも3位のB−Spline基底であれば、いずれも図8に示すような、ξ0〜ξ3の4節点の基底関数となる。尚、図8では、R軸の基底関数Nrとして記してある。以下、基底関数はいずれも3位のB−Spline基底であるものとして説明する。
ステップS403では、ステップ402で算出した基底関数と、ステップS401で取得したRGB値とL*a*b*値との対応関係を用い、行列方程式
をL*成分、a*成分、b*成分について、それぞれLU分解を用いて解くことで、各係数を算出する。以下、この行列方程式による係数算出について詳しく説明する。
まず、行列Mをのs行t列成分mstを、次のように算出する。
ここで、t = 25(i−1)+5(j−1)+kであり、i、j、kは1から5までの整数である。尚、このtとi、j、kとの間の関係は、節点数と基底関数の位数によって変化する。例えば、3位のB−Spline基底で節点数が6である場合には、t=49(i−1)+7(j−1)+kという関係になる。
以下、係数clijk、caijk、cbijkの算出について、それぞれ説明する。
まず、係数clijkを算出するために、次の行列方程式をLU分解を用いて解く。
次に、係数caijkを算出するため、次の行列方程式をLU分解を用いて解く。
次に、係数cbijkを算出するため、次の行列方程式をLU分解を用いて解く。
ステップS404では、算出した係数を、メインメモリ102に記憶する。
以上のように、複数の入力色(RGB)と、複数の入力色に対応する出力色(L*a*b*値)から非線形演算式を求めるため、入力色データに対して、滑らかな変化をする非線形演算式を求めることができる。
ここで、算出されたB−Spline Solidにより算出されるsRGB色再現の模式図を示すと、例えば、図9のようになる。
次に、ステート304における、B−Spline Solidの係数写像処理について、図10のフローチャートを用いて説明する。
図10は本実施形態のB−Spline Solidの係数写像処理を示すフローチャートである。
ステップS801では、ステート302で算出したB−Spline Solidより、Spline Solid係数clijk、caijk、cbijkのそれぞれ係数値を1つ取得し、取得した値を用いて、色CをL*a*b*値において、C=(clijk、caijk、cbijk)と定める。但し、取得する際のサフィックスはcl、ca、cbに対して同一の値を用いるものである。
ステップS802では、ステップS801で取得した色Cに対し、所定条件に基づいて、写像動作を適用することで、あらたなSpline Solid係数値/clijk、/caijk、/cbijkを算出する。
ここで、写像動作の具体例について、図11を用いて説明する。
図11は本実施形態の係数の写像に対応するガマットマッピングの具体例を説明するための図である。
図11において、901は、ステート304で算出されたB−Spline Solidより定まる色域(入力デバイスの色再現範囲)である。902は、ステート303で読み込んだガマットデータの色域(出力デバイスの色再現範囲)である。Bsは、色Cと点Fを結んだ直線と色域901の交点である。Bdは、色Cと点F(目標典)を結んだ直線と色域902の交点である。尚、点F(目標点)は、明度軸上の色(50,0,0)として定められている。
ここで、FとBs間の距離≦FとBd間の距離である場合、色Cに対して写像変換は実行しない。一方、FとBs間の距離>FとBd間の距離となる場合、FとCとの距離を算出し、例えば、図12の変換テーブルのように、非線形に距離を変換する。そして、非線形に変換された距離を用いて、色CをFとBdを結ぶ直線上でかつ色域902に属する色信号値Cmに写像変換する。
以上の写像変換(ガマットマッピング)を、Spline Solid係数写像に適用する。例えば、clijkと/clijk、との比が、色CのL*値と色CmのL*値との比と等しくなるように、/clijkを求める。同様に、/caijkと/cbijkとを算出する。また、FCとFCmとの距離の比に応じて、/clijk、/caijk及び/cbijkを算出してもよい。算出された係数値(/clijk、/caijk及び/cbijk)は、元の係数値(clijk、caijk及びcbijk)と入れ替える。
つまり、本実施形態では、第一の色補正を、RGB値(デバイス依存値)からL*a*b*値(デバイス非依存値(デバイス独立値))への変換とし、第二の色補正を入力デバイスの色再現範囲と出力デバイスの色再現範囲に基づくL*a*b*値へのガマットマッピングとすると、写像変換されたSpline Solid係数を用いた非線形演算式により、図16に示すような階調の変動が振動してしまうことを防ぎつつ、第二の色補正に対応する処理を行うことができる。
ステップS803では、ステップS802で算出したSpline Solid係数値をメインメモリ102に記憶する。
ステップS804では、Spline Solid係数値の総てに対して、処理を実行したか否かを判定する。実行していない場合(ステップS804でNO)、ステップS801に戻る。一方、実行している場合(ステップS804でYES)、処理を終了する。
次に、ステート305における、プロファイル算出用のB−Spline Solidを用いたプロファイル作成処理について、図13を用いて説明する。
図13は本実施形態のプロファイル作成処理を示すフローチャートである。
ここで、作成するプロファイルは、例えば、図14に示すデータ構造で構成される。RGB値はネストの順番と、プロファイルに記述されたR/G/B値のステップ値とに従って算出され、L*a*b*値はプロファイルに記述されている値となる。
ステップS1101では、作業用のメモリ領域を確保し、変数初期化などの初期化動作を行う。
ステップS1102では、しかるべき順序に従って、プロファイルのLUT格子点に相当するRGB値を1つ取得する。
ステップS1103では、メインメモリ102よりプロファイル算出用のB−Spline Solidにおける基底関数と係数値とを1つ取得し、下式よりL*a*b*値を算出する。
ここで、rr、gg、bbはRGB値、l、a、bはL*a*b*値を表す。NrはR軸方向での基底関数、NgはG軸方向での基底関数、NbはB軸方向での基底関数であり、clijk、caijk、cbijkは係数を表すものである。また、式の中でNr、Ng、Nbに付属するサフィックスi、j、kは、それぞれの軸に対する基底における基底関数番号である。
ステップS1104では、LUT格子点位置に対応するメモリアドレス(メインメモリ102)に、算出したL*a*b*値を格納する。
ステップS1105では、LUT格子点総てに対し、上記の変換を実行して、L*a*b*値を算出したか否かを判定する。算出していない場合(ステップS1105でNO)、ステップS1102に戻り、LUT格子点総てに対し、上記の変換を実行して、L*a*b*値を算出するまで、ステップS1102〜ステップS1104を繰り返す。
一方、LUT格子点総てに対し、上記の変換を実行して、L*a*b*値を算出した場合(ステップS1105でYES)、ステップS1106へ進む。
ステップS1106では、メインメモリ102に格納された変換後のLUTデータを、プロファイルデータとして、メインメモリ102の所定領域に格納する。
そして、ステップS1107では、作業用メモリの解放等の終了動作を行う。
次に、ステート306における3Dオブジェクト生成処理について説明する。
色域表示用のソリッドデータは、ステート302にて読み込んだ三角パッチデータを総て用いて、ポリゴン表記のソリッドデータを生成する。
プロファイル表示用のポイントデータは、LUTにおける総てのL*a*b*値をポイントとし、ポイントデータを生成する。
また、色再現表示用のソリッドデータは、以下のように生成する。
まず、ステップが[0,64,128,192,255]からなる5×5×5の格子を生成する。次に、総ての格子点について、ステップS1102と同様にしてRGB値からL*a*b*値を算出する。最後に、算出されたL*a*b*値の組より、ポリゴン表記の色再現表示用のソリッドデータを生成する。
以上説明したように、本実施形態によれば、第1の表色系で表現される色信号値より第2の表色系の色信号値に算出(写像)する際に、第一の色補正に対応する処理として、一度滑らかな色再現を非線形演算式(第1の表色系のサンプル点を補間する補間式(本実施形態では、B−Spline Solid式))を設定して近似する。また、第二の色補正に対応する処理として、その非線形演算式の係数を写像変換して、その非線形演算式を変形する。そして、この変形した非線形演算式を用いて、プロファイル算出用の演算を実行する。
特に、この変形は、スプラインの変動近似特性を応用したものであり、この変動近似特性は、補間で発生する振動を抑制することができる。
つまり、補間式の係数を所定条件(図11で説明したような写像変換)を満足するように変形し、その変形した補間式を用いて、色域写像を行って色を算出することで、変動減少近似効果を利用し、複数の入力色に対応する出力色の階調の変動が振動してしまう現象を防ぐことができる。
特に、本実施形態では、入力デバイスの色域内に含まれる多くの入力色データについて、上記係数の写像変換処理を行うため、階調の変動が振動してしまう現象を防ぐ効果は顕著になる。
図17は、ライン1701上にある複数の入力色と、ガマットマッピング後の複数の出力色との関係を示す図である。
例えば、図17のライン1701上の点群をガマットマッピングした後、ガマットマッピング後の点群をB−スプライン曲線で結ぶと、ライン1703の点線のようにラインが振動してしまう。これは、図16に示すB−スプライン曲線の特性に起因し、図15で示した通り、点群間の間で急峻な変化があると、その振動はより顕著になる。
これに対して、本実施形態によれば、B−スプライン曲線の係数を写像することにより、ラインの振動が小さいライン1701の軌跡を維持しつつ、ガマットマッピング後の点群を近似するライン1702を形成することができる。
つまり、ライン1702を示すB−スプライン関数で入力色を変換するので、出力色の良好な階調を得ることができる。また、このような算出を実行することで、擬似輪郭等の画像障害の発生を抑制することができる。
尚、上記実施形態では、ソリッド表現における基底関数として、B−Spline(B−スプライン)を用いる例を挙げて説明しているが、これに限定されるものではない。例えば、基底関数としては、Rational B−Spline(有理B−スプライン)、Non Uniform Rational B−Spline(不均一有理B−スプライン)、Bezier(ベジェ)、Rational Bezier(有理ベジェ)等の、あらゆる区分的関数(区分的多項式)を用いることができる。
ここで、本実施形態では、基底関数の局所性が存在するとより望ましいことから、基底関数として最も代表的なB−Spline(B−スプライン)を例に挙げて説明している。
このように、本実施形態では、第1の表色系で表現される色信号値より第2の表色系の色信号値に算出する際、第1の表色系の次元数と同じ多重度の区分的多項式を基底関数とする多重総和演算を用いて第2の表色系の色信号値を算出する。
尚、上記実施形態で処理対象とする色空間については何ら制限はなく、CMYK色空間、L*a*b*色空間、JCH色空間、XYZ色空間、xy色空間等の様々な色空間を用いることができる。さらに、インク色分解などにも適用可能であり、CMYKに淡シアンならびに淡マゼンタを加えた六次元色空間、さらに、レッドインクおよびグリーンインクを加えた八次元色空間等の色空間も用いることができる。また、式に与える色空間と、式より算出される色空間とが同一の色空間であってもよい。
以上、実施形態例を詳述したが、本発明は、例えば、システム、装置、方法、プログラムもしくは記憶媒体等としての実施態様をとることが可能であり、具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
尚、本発明は、前述した実施形態の機能を実現するソフトウェアのプログラム(実施形態では図に示すフローチャートに対応したプログラム)を、システムあるいは装置に直接あるいは遠隔から供給し、そのシステムあるいは装置のコンピュータが該供給されたプログラムコードを読み出して実行することによっても達成される場合を含む。
従って、本発明の機能処理をコンピュータで実現するために、該コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、本発明は、本発明の機能処理を実現するためのコンピュータプログラム自体も含まれる。
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、OSに供給するスクリプトデータ等の形態であっても良い。
プログラムを供給するための記録媒体としては、例えば、フロッピー(登録商標)ディスク、ハードディスク、光ディスク、光磁気ディスク、MO、CD−ROM、CD−R、CD−RW、磁気テープ、不揮発性のメモリカード、ROM、DVD(DVD−ROM,DVD−R)などがある。
その他、プログラムの供給方法としては、クライアントコンピュータのブラウザを用いてインターネットのホームページに接続し、該ホームページから本発明のコンピュータプログラムそのもの、もしくは圧縮され自動インストール機能を含むファイルをハードディスク等の記録媒体にダウンロードすることによっても供給できる。また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるWWWサーバも、本発明に含まれるものである。
また、本発明のプログラムを暗号化してCD−ROM等の記憶媒体に格納してユーザに配布し、所定の条件をクリアしたユーザに対し、インターネットを介してホームページから暗号化を解く鍵情報をダウンロードさせ、その鍵情報を使用することにより暗号化されたプログラムを実行してコンピュータにインストールさせて実現することも可能である。
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される他、そのプログラムの指示に基づき、コンピュータ上で稼動しているOSなどが、実際の処理の一部または全部を行ない、その処理によっても前述した実施形態の機能が実現され得る。
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行ない、その処理によっても前述した実施形態の機能が実現される。
また、本実施形態では、図11に示すガマットマッピング方法を適用し、Spline Solid係数を写像した。しかし、例えば、入力色の明度に応じて、図11における点Fの位置を変化させても良いし、その他のガマットマッピング方法を適用し、Spline Solid係数を写像しても良い。
また、本実施形態では、第二の色補正として、ガマットマッピングを用いたが、色相調整など他の色補正に適用してもよい。