(57)【要約】【課題】色変換用ＬＵＴをそのまま圧縮してもデータ量の大幅に削減することができない。【解決手段】色変換用ＬＵＴの格子点値を３軸方向の差分、あるいは間引いた縮小ＬＵＴの補間値と元の格子点値の差分、あるいは類似性の高い２つのＬＵＴ間の差分のいずれか、もしくはそれら３つの差分の内２つを組み合わせて用いることにより、色変換用ＬＵＴの大幅なデータ量削減を実現する。特に、ＬＵＴ間の差分と他の差分を組み合わせにより多数のＬＵＴがある場合の圧縮率を大きく改善することが可能である。【選択図】図１
2011041316.tif 000002
【特許請求の範囲】
【請求項１】
変換テーブルを圧縮して記憶媒体に格納するための変換テーブル圧縮方法であって、
差分作成手段により、変換テーブルに格納されているデータから、前記変換テーブルの入力空間を規定する複数の軸それぞれの一定方向について隣接する格子点値間の差分値を求めて、軸差分テーブルを作成する全軸差分作成ステップと、
圧縮手段により、前記軸差分テーブルを圧縮して圧縮データを作成する圧縮ステップと、
格納手段により、前記圧縮データを記録媒体に格納する格納ステップと
を有することを特徴とする変換テーブル圧縮方法。
【請求項２】
コンピュータにより記憶媒体に圧縮して格納された変換テーブルを復元するための変換テーブル復元プログラムであって、
伸長手段により、記録媒体から圧縮データを読み取って復号する伸長ステップと、
復元手段により、前記伸長工程により復号されたデータから、変換テーブルの入力空間を規定する複数の軸それぞれの一定方向について隣接する格子の値を加算することにより、変換テーブルを復元する復元ステップと、
格納手段により、前記復元ステップにより復元された変換テーブルを記憶媒体に格納する格納ステップと
をコンピュータにより実行させるための変換テーブル復元プログラム。
【請求項３】
コンピュータにより記憶媒体に圧縮して格納された変換テーブルを復元するための変換テーブル復元プログラムであって、
伸長手段により、記録媒体から圧縮データを読み取って復号する伸長ステップと、
復元手段により、前記伸長工程により復号されたデータに含まれる間引きされた変換テーブルを補間し、補間された変換テーブルの要素に、該要素に対応する、前記復号されたデータに含まれる階層差分テーブルの要素を加算して、変換テーブルを復元する復元ステップと、
格納手段により、前記復元ステップにより復元された変換テーブルを記憶媒体に格納する格納ステップと
をコンピュータにより実行させるための変換テーブル復元プログラム。
【請求項４】
コンピュータにより記憶媒体に圧縮して格納された変換テーブルを復元するための変換テーブル復元プログラムであって、
伸長手段により、記録媒体から圧縮データを読み取って復号する伸長ステップと、
前記伸長工程により復号されたデータに、第１の変換テーブルが第２の変換テーブルとのテーブル差分テーブルに変換されていることを示す情報が含まれている場合には、前記第２の変換テーブルの要素を、前記伸張したデータに含まれるテーブル差分テーブルの対応する要素に加算して第１の変換テーブルを復元する復元ステップと、
格納手段により、前記復元ステップにより復元された変換テーブルを記憶媒体に格納する格納ステップと
をコンピュータにより実行させるための変換テーブル復元プログラム。
【請求項５】
コンピュータにより記憶媒体に圧縮して格納された変換テーブルを復元するための変換テーブル復元プログラムであって、
伸長手段により、記録媒体から圧縮データを読み取って復号する伸長ステップと、
前記伸長工程により復号されたデータに、第１の全軸差分テーブルが第２の全軸差分テーブルとのテーブル差分テーブルに変換されていることを示す情報が含まれている場合には、前記第２の全軸差分テーブルの要素を、前記伸張したデータに含まれるテーブル差分テーブルの対応する要素に加算して第１の全軸差分テーブルを、第１の復元手段により復元する第１の復元ステップと、
前記第１の復元ステップにより復号された第１の全軸差分テーブルについて、変換テーブルの入力空間を規定する複数の軸それぞれの一定方向について隣接する格子の値を加算することにより、第１の変換テーブルを復元する第２の復元ステップと、
格納手段により、前記復元ステップにより復元された第１の変換テーブルを記憶媒体に格納する格納ステップと
をコンピュータにより実行させるための変換テーブル復元プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、たとえば画像の色変換等に用いられる変換テーブル圧縮方法および変換テーブル復元プログラムに関する。詳しくは、カラー画像処理装置で画像データの処理に用いる変換テーブル、特に色変換テーブルを格納するために必要な記憶容量を小さくするための方法、および、変換テーブルを格納に適したデータに変換する、または、格納した変換テーブルを用いて画像処理を行なう画像処理装置に関する。
【背景技術】
【０００２】
カラープリンタやカラー複写機またはカラースキャナなどのカラー画像の入力あるいは出力を行う機器では、高品位なカラー画像を実現するために、人間の知覚特性などに基づいて高度に最適化された色変換処理を行う必要がある。このような色変換処理は、単純な演算によって実現することが困難であるため、自由度の高い変換処理を実現することが可能であるルックアップテーブル（以下、ＬＵＴとする）を用いた変換処理により実施されている。ＬＵＴとは変換テーブルの一種であり、入力に対応する出力値をテーブルとして保持する。ＬＵＴに考えられる全ての入力に対する出力データを保持するためには膨大な記憶容量が必要となる。そのため、ＬＵＴには、離散的に定めた特定の入力（格子点という）に対する出力データ（格子点値という）を保持し、格子点以外の入力に対する出力データは、格子点値を使用して補間により算出されることが一般的である。
【０００３】
例えば、色変換処理として最も一般的である、入力データがＲ（レッド）、Ｇ（グリーン）、Ｂ（ブルー）各色８ビット（０〜２５５）で構成され、出力データがＣ（シアン）、Ｍ（マゼンタ）、Ｙ（イエロー）、Ｋ（ブラック）各色８ビットとなる色変換処理を考える。この変換に用いられるＬＵＴは、ＲＧＢを座標軸とする３次元のテーブルとなり、ＲＧＢの値に応じたＹＭＣＫの値をその要素として含む。この場合入力データ（Ｒ，Ｇ，Ｂ）がとり得る値は、０ｈ〜ＦＦＦＦＦＦｈまでの約１６７０万通りとなる。したがってこの色変換のために用いるＬＵＴには、約１６７０万×４バイト＝約６４Ｍバイトのデータを記憶する必要ある。
【０００４】
そこで、データ量を削減するために、特定の入力、例えばＲＧＢの各値が ０、 ６４、 １２８、 １９１、 ２５５ のいずれかであるような値を格子点とし、ＬＵＴにはその格子点に対応するＹＭＣＫの値を格子点値として保存する。たとえば、格子点となる入力データは、（０、０、０） 、（１２８、１９１、６４）、（６４、２５５、１２８）などであり、それら格子点に対応する格子点値すなわち出力データがＬＵＴに保持される。ここで改めて定義すると、出力データがＬＵＴに保持されている入力データを格子点、保持された出力データの値をその格子点値という。そして格子点以外の入力データ、たとえば（１２８、２００、６４）などに対する出力データは、格子点値を格子点からの距離に応じた加重平均により算出することが一般的には実施されている。このように格子点値を加重平均することにより出力データを算出することは補間と呼ばれ、様々な補間の手法が提案されている（特許文献４等参照）。
【０００５】
なお各軸の格子点の数を格子点数と呼び、前述の例では格子点数は５である。また、各軸の格子点が対応する入力データの値、前述の例では ０、 ６４、 １２８、 １９１、 ２５５ を格子位置と呼ぶ。また格子位置をその値が小さいものから順につけた番号を格子番号と呼ぶ。例えば前述の例では格子位置０の格子番号は０、格子位置１９１の格子番号は３となる。なお、前述の例では各軸の格子点数、格子位置がすべて同じとしたが、格子点数も格子位置も各軸ごとに異なるものにすることも可能である。ＬＵＴでは内挿により格子点でない入力データに対応する出力データを算出するため、少なくとも入力データの最小値と最大値に対応する格子点は保持する必要があるので格子点数の最小値は２となる。
【０００６】
近年、インクジェットプリンタをはじめとする画像処理装置は銀塩写真を超えるほどの高画質の実現するようになり、その用途をさらに広げるためより多くの用紙の種類に対応することが求められてきている。また、更なる高画質を実現するためにより高精度な色変換処理の実現が求められている。より多くの用紙の種類に対応するためには、それぞれの用紙に最適化された色変換テーブルが必要であるため１つの画像処理装置において使用される色変換テーブルの数はさらに増えている。また、テーブルに補間演算を併用した色変換処理を高精度に行おうとする場合、その色変換テーブルの格子点の数を多くし、補間演算で用いる格子点と入力データの距離を小さくすることが有効な手法の一つである。しかし、格子点数が多くなると１つのＬＵＴのデータ量が大幅に増加することになる。これらの要因により色変換テーブルのデータ量はますます増大し、そのデータを格納するために使用されるメモリー等のリソースを圧迫する結果をもたらしている。 
一方、限られたリソースに相対的に多量のデータを収める技術として、データ圧縮が知られている。 しかしながら、既知のデータ圧縮を色変換テーブルの圧縮にそのまま適用しても、十分にデータ量の低減が図れない、つまり高い圧縮率が得られない問題があった。これは以下の理由による。すなわち、通常の圧縮処理では同じデータが高い頻度で繰り返し出現すること利用してデータ量の削減を図っている。このため、同じデータが高頻度で表れるデータの圧縮率は高く、そうでないデータの圧縮率は低くなる。色変換テーブルは、色の連続性により、通常滑らかな、しかし非線形に変化する値の集合として表現される。そのため、色変換テーブルの値は入力の変化に応じて滑らかに変化するが、その変化は規則的なものではなく、さらにその値は広い範囲に偏ることなく分布している。このために色変換テーブルの圧縮率を挙げることは困難である。
【０００７】
このため、既知のさまざまな圧縮アルゴリズムのどのようなものを適用しても高い圧縮率が得られないという問題がある。そこで圧縮処理を施す前に色変換テーブルに対して変換処理を施すことで色変換テーブルの圧縮率を向上する手法がいくつか提案されている（たとえば特許文献１乃至特許文献３等参照）。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平１１−０１７９７１号公報
【特許文献２】特開２００２−２０９１１４号公報
【特許文献３】特開２００３−１１０８６９号公報
【特許文献４】特開昭５３−１２３２０１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかし、既に提案されている色変換テーブルに対して圧縮処理の前に変換処理を施す手法には、いくつもの欠陥があった。たとえば、（１）圧縮率の向上が十分なものではない。（２）色変換テーブルが一定の条件を満たさないとその手法を適用することができない。（３）個々の色変換テーブルを個別に処理しているため色変換テーブルの数が増加した場合にも個々の色変換テーブルの圧縮率は変化せず、そのため色変換テーブルの数の増加と同じ割合で圧縮後の色変換テーブルの合計データ量も増加してしまう。
【００１０】
上記欠陥を解消して変換テーブルの容量を縮小するために、より効率的で汎用的な圧縮処理の手法が必要とされている。
【００１１】
本発明は、上述の従来例に鑑みてなされたものであり、その目的とするところは、上記欠陥を解消することにある。より具体的には、色変換テーブルをデータ圧縮して記憶媒体に格納する場合に、どのような色変換テーブルにも適応することが可能で、色変換テーブルの数が増加するに従って圧縮率を向上させることが可能である変換テーブル圧縮方法および変換テーブル復元プログラムを提供することにある。
【課題を解決するための手段】
【００１２】
上述の問題を解決するための本発明は以下の構成を備える。すなわち、変換テーブルを圧縮して記憶媒体に格納するための変換テーブル圧縮方法であって、
差分作成手段により、変換テーブルに格納されているデータから、前記変換テーブルの入力空間を規定する複数の軸それぞれの一定方向について隣接する格子間の差分値を求めて、軸差分テーブルを作成する全軸差分作成ステップと、
圧縮手段により、前記軸差分テーブルを圧縮して圧縮データを作成する圧縮ステップと、
格納手段により、前記圧縮データを記録媒体に格納する格納ステップとを有することを特徴とする。
【００１３】
あるいは、コンピュータにより記憶媒体に圧縮して格納された変換テーブルを復元するための変換テーブル復元プログラムであって、
伸長手段により、記録媒体から圧縮データを読み取って復号する伸長ステップと、
復元手段により、前記伸長工程により復号されたデータから、変換テーブルの入力空間を規定する複数の軸それぞれの一定方向について隣接する格子の値を加算することにより、変換テーブルを復元する復元ステップと、
格納手段により、前記復元ステップにより復元された変換テーブルを記憶媒体に格納する格納ステップと
をコンピュータにより実行させるための変換テーブル復元プログラム。
【００１４】
あるいは、コンピュータにより記憶媒体に圧縮して格納された変換テーブルを復元するための変換テーブル復元プログラムであって、
伸長手段により、記録媒体から圧縮データを読み取って復号する伸長ステップと、
復元手段により、前記伸長工程により復号されたデータに含まれる間引きされた変換テーブルを補間し、補間された変換テーブルの要素に、該要素に対応する、前記復号されたデータに含まれる階層差分テーブルの要素を加算して、変換テーブルを復元する復元ステップと、
格納手段により、前記復元ステップにより復元された変換テーブルを記憶媒体に格納する格納ステップと
をコンピュータにより実行させるための変換テーブル復元プログラム。
【００１５】
あるいは、コンピュータにより記憶媒体に圧縮して格納された変換テーブルを復元するための変換テーブル復元プログラムであって、
伸長手段により、記録媒体から圧縮データを読み取って復号する伸長ステップと、
前記伸長工程により復号されたデータに、第１の変換テーブルが第２の変換テーブルとのテーブル差分テーブルに変換されていることを示す情報が含まれている場合には、前記第２の変換テーブルの要素を、前記伸張したデータに含まれるテーブル差分テーブルの対応する要素に加算して第１の変換テーブルを復元する復元ステップと、
格納手段により、前記復元ステップにより復元された変換テーブルを記憶媒体に格納する格納ステップと
をコンピュータにより実行させるための変換テーブル復元プログラム。
【００１６】
あるいは、コンピュータにより記憶媒体に圧縮して格納された変換テーブルを復元するための変換テーブル復元プログラムであって、
伸長手段により、記録媒体から圧縮データを読み取って復号する伸長ステップと、
前記伸長工程により復号されたデータに、第１の全軸差分テーブルが第２の全軸差分テーブルとのテーブル差分テーブルに変換されていることを示す情報が含まれている場合には、前記第２の全軸差分テーブルの要素を、前記伸張したデータに含まれるテーブル差分テーブルの対応する要素に加算して第１の全軸差分テーブルを、第１の復元手段により復元する第１の復元ステップと、
前記第１の復元ステップにより復号された第１の全軸差分テーブルについて、変換テーブルの入力空間を規定する複数の軸それぞれの一定方向について隣接する格子の値を加算することにより、第１の変換テーブルを復元する第２の復元ステップと、
格納手段により、前記復元ステップにより復元された第１の変換テーブルを記憶媒体に格納する格納ステップと
をコンピュータにより実行させるための変換テーブル復元プログラム。
【発明の効果】
【００１７】
本発明により、色変換テーブルをデータ圧縮して記憶媒体に格納する場合に、どのような色変換テーブルにも適応することが可能で、色変換テーブルの数が増加するに従って圧縮率を向上させることが可能である。
【図面の簡単な説明】
【００１８】
【図１】３軸ＬＵＴを模式的に示した図
【図２】３軸ＬＵＴを２次元的に展開した図
【図３】３軸ＬＵＴを１次元テーブルに展開した図
【図４】複数の出力データを格納する３軸ＬＵＴを１次元テーブルに展開した図
【図５Ａ】第１実施形態のメインフローチャート
【図５Ｂ】ＬＵＴの圧縮手順のメインフローチャート
【図６】第１実施形態の変換処理の部分処理のフローチャート
【図７】第１実施形態の変換処理の部分処理のフローチャート
【図８】第１実施形態の変換処理の部分処理のフローチャート
【図９】格子点値の差分処理による変化を示す図
【図１０】第２実施形態のメインフローチャート
【図１１】第２実施形態の変換処理の部分処理のフローチャート
【図１２】第２実施形態の変換処理の部分処理のフローチャート
【図１３】第２実施形態の第１段階の縮小ＬＵＴを示す図
【図１４】第２実施形態の第１段階の差分データを示す図
【図１５】第２実施形態の第２段階の縮小ＬＵＴを示す図
【図１６】第２実施形態の第２段階の差分データを示す図
【図１７】第２実施形態の第３段階の縮小ＬＵＴを示す図
【図１８】第２実施形態の第３段階の差分データを示す図
【図１９】第２実施形態の圧縮対象となるデータを示す図
【図２０】第２実施形態の圧縮対象となるデータを示す図
【図２１】第３実施形態の第１処理のメインフローチャート
【図２２】第３実施形態の第１処理の部分フローチャート
【図２３】第３実施形態の第１処理の部分フローチャート
【図２４】第１処理のＬＵＴ管理テーブルを示す図
【図２５】第１処理のリストＡを示す図
【図２６】３軸ＬＵＴのＬＵＴ間差分を１次元テーブルに展開した図
【図２７】複数の出力データを格納する３軸ＬＵＴのＬＵＴ間差分を１次元テーブルに展開した図
【図２８】第３実施形態の第２処理のメインフローチャート
【図２９】第３実施形態の第２処理の部分フローチャート
【図３０】第３実施形態の第２処理の部分フローチャート
【図３１】第３実施形態の第２処理の部分フローチャート
【図３２】第２処理のＬＵＴ管理テーブルを示す図
【図３３】第２処理のリストＡを示す図
【図３４】コンピュータのブロック図
【図３５Ａ】第１実施形態におけるＬＵＴの復元手順のメインフローチャート
【図３５Ｂ】ＬＵＴの復号手順のメインフローチャート
【図３６】第１実施形態の復元処理の部分フローチャート
【図３７】第１実施形態の復元処理の部分フローチャート
【図３８】第１実施形態の復元処理の部分フローチャート
【図３９】第２実施形態の復元処理のフローチャート
【図４０】第３実施形態の復元処理のフローチャート
【発明を実施するための形態】
【００１９】
以下、図面を参照して本発明の実施形態を詳細に説明する。 まず、すべての実施形態において共通するルックアップテーブル（以下ＬＵＴ）の構成について説明する。ＬＵＴは３つの要素から構成される入力データに対して１つ以上のデータを出力する３次元テーブルである。このような３次元テーブルは、図１に示すように直方体として模式的に表現することができる。直方体における１つの角を原点とすると、その角を形成する３つの辺が入力軸となり、入力データの３つの要素の値が角からの距離と対応する。各格子点には格子点値が格納される。このように変換テーブル１は、規則的にサンプリングした入力データに対する出力データである格子点値を格納している格子点１００から構成されている。図１では省略してあるが直方体のかくれている３面および直方体の内部にも規則的に格子点が並んでおり、全体で１０５個の格子点から構成されている。そして以下の実施形態では、変換テーブルは、ＲＧＢ３成分の輝度データを入力とし、ＣＭＹＫ４成分の濃度データを出力とする色変換テーブルである。入力データとしてはＲＧＢのほか、ＣＭＹ、Ｌａｂ、ＸＹＺなどの入力色空間で定義されたデータが想定される。しかし、それらの以外であっても３つの要素のいずれもが有限の範囲をとるデータであれば本発明を適応することができる。また、出力色空間もＹＭＣＫ色空間に限られない。さらに、たとえばＹＭＣＫからＲＧＢへ変換するための色テーブルのように、入力色空間が３次元ではない色空間であり、出力色空間が４次元ではない色空間であっても、各実施形態は適用可能である。さらに、本実施形態は、色変換テーブルと同様に、入力データの変化に応じて出力値が滑らかに変化するが、変化が非線形であり、圧縮しても高圧縮率が得られないような変換テーブル一般に対して適用することもできる。以下では入力データをＲＧＢ、出力データをＹＭＣＫとする色変換テーブルについて説明する。
【００２０】
図１に示した３次元テーブルは、図２のテーブル２０１〜２０３に示すように、入力データのうち１つの要素を格子位置ごとに分割し、残りの２つの要素を２次元的に配置して、それぞれを縦軸、横軸に対応づけることでも模式的に表現することができる。この変換テーブルは、出力データの成分をおのおの独立して保持している。つまり３要素からなる入力により１つの値を出力する変換テーブルである。例えばＲＧＢを入力としＣＭＹＫの４つの値を出力する変換テーブルは、ＲＧＢ値に応じてＣＭＹＫのそれぞれの値を与える４つの変換テーブルを１組としたものである。したがって、たとえばＣの値は入力ＲＧＢの値によってのみ決められる、つまりＣ＝Ｆｃ(Ｒ、Ｇ、Ｂ)である（ＦｃはＣ成分の変換テーブルによる写像）。同様にＭ＝Ｆｍ(Ｒ、Ｇ、Ｂ)、Ｙ＝Ｆｙ(Ｒ、Ｇ、Ｂ)、Ｋ＝Ｆｋ(Ｒ、Ｇ、Ｂ) である。このようなＬＵＴは、通常、各色成分のＬＵＴの格子位置は共通である。本実施形態の処理は、処理の対象となる変換テーブルの出力データの次元数がいくつであっても、各成分について個別に適応できる。そのため、以下の説明では出力データを１次元とする。
【００２１】
以下の説明では、特にＣ[ｉ:ｊ:ｋ]という名のＬＵＴを例にして説明する。また、格子点値は全て正の値で８ビットで表されるものとする。各軸の格子番号を決めれば３次元空間での格子位置が確定される。[ｉ:ｊ:ｋ]はＲ、Ｇ、Ｂの格子番号がそれぞれｉ、ｊ、ｋである格子点を表し、Ｃ[ｉ:ｊ:ｋ]は３軸の格子番号がそれぞれｉ、ｊ、ｋである格子点値を表すものとする。また、Ｒ、Ｇ、Ｂの各軸の格子点数をそれぞれＮ、Ｍ、Ｌとする。視覚的な理解を容易にするために、格子点を３次元に配置した模式図を図１に示したが、ＬＵＴを汎用的なデジタル演算処理装置により処理する場合には１次元のテーブルとする必要がある。ＬＵＴを１次元テーブルＣ[ｘ]により表す手法は何通りか存在する。本実施形態では、１次元テーブルにおける位置と、ＬＵＴの格子点を図１のように３次元的に配置したときの３次元空間における格子点の隣接関係が最も容易に関係づけられるように、図３に示すような規則によりＬＵＴを１次元テーブル化する。この規則ではＣ[ｉ:ｊ:ｋ]の格子点値は、１次元テーブルではＣ[ｉ*Ｍ*Ｌ+ｊ*Ｌ+ｋ]となる。図３は一例としてＮ＝５、Ｍ＝３、Ｌ＝７の場合のＣ[ｘ]とＣ[ｉ:ｊ:ｋ]との関係を示している。もちろんＣ[ｘ]とＣ[ｉ:ｊ:ｋ]との相違は本質的なものではなく、ＬＵＴの要素の表現方法の相違にすぎない。したがって本実施形態ではＬＵＴの添え字を一次元の値で説明しているが、３次元で表現した場合でも同様な処理を行える。図３においては、変換テーブルＣ[ｘ]においては、インデックスｘ＝ｉ*Ｍ*Ｌ+ｊ*Ｌ+ｋにより特定された要素がアクセスされる。
【００２２】
１つの格子点が複数の格子点値を保持するＬＵＴの場合は、各格子点値ごとに図４のように第１要素の１次元テーブルの次に第２要素の１次元テーブルを、第２要素の１次元テーブルの次に第３要素の１次元テーブルを、のように各要素のテーブルを連結して１つのデータとし、このデータ全体を圧縮処理の対象とする。図４においては、まず入力座標系の各軸の格子点位置４０１が記述され、次にシアン要素の変換テーブル４０２が図３の順序で記述され、同様にマゼンタ、黄、黒の各出力要素４０３〜４０５について記述される。格子点位置４０１には、格子点に対応する入力値が好ましくは昇べき又は降べきに、各格子点毎に区別できるように記述されている。たとえば格子点が、０，１２８，２５５であれば、この値が区別可能に記述される。もちろん格子位置は各軸ごとに記述される。なお、図４の例では、全出力要素について格子位置が共通である。もしも共通でなければ、ＲＧＢの格子点位置が、各色成分の変換テーブルごとに用意される。
【００２３】
なお、以下の説明において具体的な例を示す場合には図３に示した格子点数がＲ軸、Ｇ軸、Ｂ軸それぞれ５、３、７のＬＵＴ（総格子点数１０５）を例とする。もちろん本発明は２以上のいかなる格子点数のＬＵＴに対しても適応可能である。
【００２４】
さて、個別の実施形態について説明する前に、本実施形態に示すフローチャートに即したプログラムを実行するコンピュータの構成を説明する。コンピュータは通常の汎用コンピュータである。ホスト装置５１と画像出力装置５２のハードウェア構成について図３４を参照して説明する。図３４は情報処理システムを構成するホスト装置（コンピュータ）５１と画像出力装置（プリンタ）５２のハードウェア構成概要を示すブロック図である。図３４に示されているように、ホスト装置５１は処理部１０００とこれに周辺装置を含めてホスト装置全体が構成されている。また、プリンタ５２は、エンジン部および制御回路部から構成されている。
【００２５】
ホスト装置５１の処理部１０００は、制御プログラムに従ってホスト装置の全体制御を司るＭＰＵ１００１、システム構成要素を互いに接続するバス１００２、ＭＰＵ１００１が実行するプログラムやデータ等を一時記憶するＤＲＡＭ１００３を含む。さらに、システムバスとメモリバス、ＭＰＵ１００１を接続するブリッジ１００４、例えば、ＣＲＴなどの表示装置２００１にグラフィック情報を表示するための制御機能を備えたグラフィックアダプタ１００５を含んでいる。さらに、処理部１０００はＨＤＤ装置２００２ａおよびリムーバブルディスク２００２ｂとのインタフェースを司るディスクコントローラ１００６を有する。さらに、キーボード２００３とのインタフェースを司るキーボードコントローラ１００７、ＩＥＥＥ１２８４あるいはＵＳＢ規格に従って画像出力装置５２との間の通信を司る、インタフェースである通信Ｉ／Ｆ１００８を備えている。さらに、処理部１０００には、グラフィックアダプタ１００５を介して操作者にグラフィック情報等を表示する表示装置２００１（この例では、ＣＲＴ）が接続されている。更に、プログラムやデータが格納された大容量記憶装置であるハードディスクドライブ（ＨＤＤ）装置２００２ａ、キーボード２００３が夫々、コントローラを介して接続されている。
【００２６】
各実施形態で説明する圧縮された色変換テーブルは、たとえば不図示のネットワークを介してサーバからダウンロードされたり、あるいはリムーバブルディスクの媒体２００２ｂにより電磁データとして提供される。そして提供された色変換テーブルは、ＨＤＤ２００２ａに保存される。コンピュータ５１では、プリンタ５２に対して送信する画像データの変換等を行うプリンタドライバが実行される。ＨＤＤ２００２ａに格納された色変換テーブルはこのプリンタドライバにより参照されて、ＲＧＢ色空間で定義された色から、ＹＭＣＫ色空間で定義された色への色変換が実行される。ここでＨＤＤ２００２ａには、種々の印刷設定に対応して複数の色変換テーブルが圧縮された状態で保存されている。またプリンタドライバは、用紙の種類等の印刷設定を利用者が指定することができるユーザインターフェースを提供している。プリンタドライバは、指定された印刷設定に対応する色変換テーブルを、圧縮された複数の色変換テーブルから選択して復号（本例では、圧縮に対する用語として復号を用いる。伸長と呼ぶ場合もある）する。そして復号した色変換テーブルを色変換のために使用する。
【００２７】
[第１実施形態]
＜色変換テーブルの圧縮処理＞
図５Ｂは、図１の色変換テーブルを圧縮するフローチャートである。図５Ｂの手順は本例では、たとえば色変換テーブルを提供するベンダのコンピュータにより実行される。まず、色変換テーブルの第１の出力色成分に着目して（Ｓ１０３）、着目色成分のＬＵＴ変換処理を行う（Ｓ１０４）。本例では出力色がＹＭＣＫであるから、たとえばＣに着目し、Ｃ色成分について、色変換テーブルの変換を行う。そして全色成分に変換が終了したかテストし（Ｓ１０５）、終了していなければ次の色成分に着目して（Ｓ１０６）、ＬＵＴ変換を行う。一方全色成分にＬＵＴ変換が終了していれば、色変換テーブル全体について、可逆圧縮処理を実行し（Ｓ１０７）、圧縮データを記録媒体に保存する（Ｓ１０８）。圧縮した色変換テーブルをたとえばネットワークを介してオンラインで頒布する場合には、記録媒体はＨＤＤ２００２ａである。また、蓄積媒体を介してオフラインで頒布する場合には、記録媒体はリムーバブル媒体である。もちろんＨＤＤ２００２ａからリムーバブル媒体へと複製しても良い。
【００２８】
＜色変換テーブルの前置変換処理＞
図５Ａは、本発明の第１実施形態にかかるＬＵＴの変換処理の手順を示すメインフローチャートである。図５ＢのステップＳ１０４において圧縮に先立って実行される。本実施形態のＬＵＴに対する処理は大きく分けてＳ１００、Ｓ１０１、Ｓ１０２の３つのステップに分けられる。各ステップでは、ＲＧＢの各軸方向についての軸方向の差分を求める処理をそれぞれ行う。ステップＳ１００の詳細な処理手順を図６のフローチャートに示す。図６による処理対象は、図４の色変換テーブルである。各色成分のテーブルは、図３のように１次元のインデックスでアクセスされる。
【００２９】
図６のステップＳ１００では、ある格子点Ｘの格子点値と、第３軸方向について格子番号が格子点Ｘよりも一つ小さい隣接格子点の格子点値との差分を求め、その差分を、格子点Ｘの格子点値として代入する処理を、すべての格子点について行う。なお、３次元の入力色空間の各軸を第１軸、第２軸、第３軸と呼び、本例では、ＲＧＢ色空間のＢ成分が第３軸に相当する。
【００３０】
図６において、ステップＳ１１０からＳ１１６で、第３軸の格子番号０番の格子点値を除く全ての格子点値を、１つ前の格子点値との差分値とする。ここで注意が必要なのは、差分値とした値を元の格子点値が格納されていた領域に上書きしている点である。このように上書きをせずに差分値を別の領域に格納して処理を行うことも可能であるが、そのような処理では処理対象のＬＵＴの格納領域とは別に差分値を格納するための同じ量の格納領域が必要になる。逆方向に処理を進めることにより差分値を上書きしながらの処理が可能になる。
【００３１】
図６においては、Ｎ，Ｍ，Ｌは色変換テーブルの格子数に応じて決まる定数であり、図４のＲＧＢ各色成分の格子点の数がそれぞれＮ，Ｍ，Ｌに代入される。また、Ｃ［ｘ］は、図３のように一次元のインデックスで示した形式の色変換テーブルであり、図６（図７，図８も同様）ではシアン成分を例とした。ｐ，ｑは変数であり、ＤＲＡＭ１００３に変数として確保される。
【００３２】
変数ｐは第２軸（すなわちＧ）方向についての格子点位置を示す。１次元で格子点位置（インデックス）ｘを与える式ｘ＝ｉ*Ｍ*Ｌ+ｊ*Ｌ+ｋ＝（ｉ*Ｍ+ｊ）*Ｌ+ｋに即して説明すると、ｐ＝（ｉ*Ｍ+ｊ）*Ｌに相当する。ＭおよびＬは定数であり、ｐはＬを単位として増加するから、ｐが与えられれば第１軸方向の格子位置ｉと第２軸方向の格子位置ｊは定まる。また変数ｑはｋに相当する。すなわちｑにより第３軸方向の格子位置が定まる。ステップＳ１１３〜Ｓ１１５では、変数ｐで定まる第１軸および第２軸の格子位置において、第３軸すなわちｑの値をまず最大値すなわちＬ−１とする。その格子点を着目格子点として、着目格子点の格子点値から、当該第３軸上で着目格子点に隣接する格子点の格子点値を差し引き、その値を着目格子点の値として上書きする。ただしここで隣接する格子点とは、着目格子点よりも格子位置がちいさい方向に隣接する格子点である。これを、着目格子位置を、第３軸上で１ずつ小さくしながら繰り返す。ｋ＝ｑ＝０の格子位置は差分をとる相手が存在しないので、ｑ＞０についてのみ行われる。そしてステップＳ１１６では、差分計算する格子位置を、第２軸方向に１ずらす。
【００３３】
この処理は、ＬＵＴを図１のような格子点を三次元的に配置した直方体とした場合にＢ軸方向に隣り合う格子点値の差分を算出することに対応する。この差分処理により格子点値がＢ軸方向の変化量になる。
【００３４】
ここで本実施形態での差分を算出する処理について説明する。通常、２つの値ａ、ｂの差分ｄはｄ＝ａ−ｂとして、ａ＞＝ｂなら正、ａ＜ｂなら負という符号付きの値として算出されるが、そのように演算した場合、ａおよびｂが８ビットの０〜２５５の値であっても差分ｄは−２５５〜２５５となり、符号付きの正しい差を記録するために符号ビットを含めた９ビットが必要となる。しかし、本発明における差分では２つの値の正しい差は必要ではなく、復元が可能であれば十分である。そこで差分処理を次にプログラミング言語であるＣ言語で示す処理のように行うことにより、差分ｄを０〜２５５、つまり８ビットで表せる範囲の値とすることができる。
ｄ＝ａ−ｂ；
ｉｆ ( ｄ＜０ ){
ｄ＝ｄ＋２５６；
}。
【００３５】
また差分ｄとｂの値からａの値を復元する併合処理は次のように行う。
ａ＝ｂ＋ｄ；
ｉｆ ( ａ＞＝２５６ ){
ａ＝ａ−２５６；
}。
【００３６】
これら演算は、８ビットを越える桁数で演算した場合処理であって、たとえば演算の桁数を８ビットに限れば、符号（サイン）なし減算及び符号なし加算を用いることで、条件処理を行うことなく上記差分処理及び併合処理をそれぞれ実現できる。
【００３７】
この差分・併合処理による幾つかの演算例を示す。
差分 ８２ − ５７ ＝ ２５、
併合 ５７ + ２５ ＝ ８２、
差分 ２２８ − ３ ＝ ２２５、
併合 ２２５ + ３ ＝ ２２８、
差分 ５７ − ８２ ＝ −２５、 −２５ + ２５６ ＝ ２３１、
併合 ８２ + ２３１ ＝ ３１３、 ３１３ − ２５６ ＝ ５７、
差分 ０ − ２５５ ＝ −２５５、 −２５５ + ２５６ ＝ １、
併合 ２５５ + １ ＝ ２５６、 ２５６ − ２５６ ＝ ０、
差分 ２３ − ２５４ ＝ −２３１、 −２３１ + ２５６ ＝ ２５、
併合 ２５４ + ２５ ＝ ２７９、 ２７９ − ２５６ ＝ ２３。
【００３８】
この差分・併合処理を任意のビット数ｐに適用できるよう一般化すると、
差分：
ｄ＝ａ−ｂ;
ｉｆ ( ｄ ＜ ０ ){
ｄ＝ｄ＋２＾ｐ;
}。
併合：
ａ＝ｂ＋ｄ;
ｉｆ ( ａ＞＝２＾ｐ ){
ａ＝ａ−２＾ｐ;
}。
となる。ここで２＾ｐは２のｐ乗である。なお、ｐ桁の符号なし演算を用いれば、上記条件処理（ｉｆ以下の処理）は不要となる。
【００３９】
格子点値が符号付きで負の値も取り得る場合は、符号付きの格子点値を符号ビットも含めて正の値と見なすことにより上記の差分処理を適用することができる。併合も処理自体は上記の処理のまま、上記併合処理により得られた値を符号付きの値と見なすだけで対応することができる。
【００４０】
結局ステップＳ１１０からＳ１１６までの処理は次の式で表すことができる。
Ｃ[ｉ:ｊ:ｋ] ← Ｃ[ｉ:ｊ:ｋ] − Ｃ[ｉ:ｊ:ｋ−１]、  ｉ＝０〜Ｎ−１、ｊ＝０〜Ｍ−１、ｋ＝Ｌ−１〜１。
【００４１】
図９に５つの値に対して逆方向に差分処理を行ったときの各値の変化するようすを示す。図６の手順では、ひとつの変換テーブルが順次書き替えられていくが、図９では説明の便宜から更新前と更新後のテーブルを別々に示した。図９のテーブルは、テーブルＣ[ｉ:ｊ:ｋ]において、インデックスｉ及びｊを一定値とし、第３軸（ｋ）方向の格子点値を格子位置の順に並べたものである。一番左のテーブル９０１が初期の状態であり、右にいくに従い最下段の格子点値から順に、そのひとつ前の格子点値との差分に更新されている。処理が終了したテーブル９０５では、一番上の格子点値を除いて、すべてひとつ前の格子点値との差分値となる。なお、逆に図９の右から順に、上の値をひとつ下の値に加算（併合）してゆくと、左端の初期の状態に戻すことができる。
【００４２】
次にステップＳ１０１の詳細な処理手順を図７のフローチャートに示す。図７のステップＳ１２０からＳ１２６では、第２軸の格子点番号０番の格子点値を除く全ての格子点値を、格子点数Ｌ前の格子点値との差分値としている。ステップＳ１１０からＳ１１６と同様にここでも逆方向に処理を進めることにより差分値を上書きしながら処理を行う。この処理は、ＬＵＴを図１のような格子点を三次元的に配置した直方体とした場合に、Ｇ軸（第２軸）方向に隣り合う格子点値の差分を算出することに対応する。図７では、Ｎ、Ｍ、Ｌの値は図６と同様である。変数ｐはＲ（第１軸）方向のインデックスを示す。変数ｑは、変数ｐで与えられるＢＧ面上における格子点位置を示す。そしてｑの初期値はＭ＊Ｌ−１すなわちＧ軸およびＢ軸とも最大値の格子点を示す。その位置からＢ軸に沿って１ずつ着目格子点を移動しつつ、差分を計算する。
【００４３】
ステップＳ１２０からＳ１２６までの処理は次の式で表すことができる。
Ｃ[ｉ:ｊ:ｋ]←Ｃ[ｉ:ｊ:ｋ]−Ｃ[ｉ:ｊ−１:ｋ]、ｉ＝０〜Ｎ−１、ｊ＝Ｍ−１〜１、ｋ＝０〜Ｌ−１。
また、図６の処理を前提とすれば、Ｃ[ｉ:ｊ:ｋ] = Ｃ[ｉ:ｊ:ｋ] − Ｃ[ｉ:ｊ:ｋ−１],Ｃ[ｉ:ｊ−１:ｋ] = Ｃ[ｉ:ｊ−１:ｋ] − Ｃ[ｉ:ｊ−１:ｋ−１]である。したがって、
C[i:j:k]←(C[i:j:k]-C[i:j:k-1])-(C[i:j-1:k]-C[i:j-1:k-1])
となる。
【００４４】
次にステップＳ１０２の詳細な処理手順を図８のフローチャートに示す。ステップＳ１３０からＳ１３３で第１軸の格子点番号０番の格子点値を除く全ての格子点値を、格子点数のＭ*Ｌ前の格子点値との差分値とする。この処理はＬＵＴを図１のような格子点を三次元的に配置した直方体とした場合にＲ軸方向に隣り合う格子点値の差分を算出することに対応する。図８では、ＭＮＬの値は図６と同様である。変数ｑは、色変換テーブルの１次元のインデックスを示す。そしてｑの初期値はＮＭＬ−１すなわち図３のテーブルの末尾である。その位置から１ずつ着目格子点を移動しつつ、第１軸方向について隣接する格子点との差分を計算する。
【００４５】
ステップＳ１３０からＳ１３３までの処理は次の式で表すことができる。
Ｃ[ｉ:ｊ:ｋ] ←Ｃ[ｉ:ｊ:ｋ]−Ｃ[ｉ−１:ｊ:ｋ] 、ｉ＝Ｎ−１〜１、ｊ＝０〜Ｍ−１、ｋ＝０〜Ｌ−１。
また、図６および図７の処理を前提とすれば、テーブルＣの全軸差分値Ｃ'は以下のように表せる。
C'[i:j:k] ← ((C[i:j:k]-C[i:j:k-1])-(C[i:j-1:k]-C[i:j-1:k-1]))-((C[i-1:j:k]-C[i-1:j:k-1])-((C[i-1:j-1:k]-C[i-1:j-1:k-1]))
=C[i:j:k]-C[i:j:k-1]-C[i:j-1:k]-C[i-1:j:k]
+C[i:j-1:k-1]+C[i-1:j:k-1]+C[i-1:j-1:k]-C[i-1:j-1:k-1] ...（数式１）。
【００４６】
このように、以上の処理により[０：０：０]以外の全ての格子点値が差分値となる。ただし、数式１において、該当する格子点が存在しない項の値は０とする。この結果、座標[０：０：０]等、マトリクス端部の格子点を含む全ての格子点を数式１（ただし書きも含む）によって表すことができる。数式１により表される値のことを本実施形態では全軸差分と呼ぶ。なお、着目格子点[ｉ：ｊ：ｋ]に関する差分値の求め方は数式１にはかぎられない。上記例では格子点[０：０：０]の値は差分が求められない値である。これは、各軸方向についての差分値は独立して計算することができるためである。すなわち、各軸方向について、着目格子点のマイナス方向にある隣接格子点を差し引くか（これは上記例である。）、それとも着目格子点のプラス方向にある隣接格子点を差し引くかは選択事項である。したがって、格子点[０：０：０]のように減ずる値（すなわち差分計算の第２項）としかならない格子点を差分原点とよぶとすれば、マトリクスの８隅点のどこを差分原点として選んでも良いはずである。したがって、数式１の"ｉ−１"、"ｊ−１"、"ｋ−１"をそれぞれ"ｉ＋１"、"ｊ＋１"、"ｋ＋１"に置換した数式もやはり全軸差分を表す。すべてを置換せずに、一部を置換した場合も同様である。したがって全軸差分C'[i:j:k]の定義を一般化すると以下のようになる。
C'[i:j:k]=C[i:j:k]-C[i:j:k-a3]-C[i:j-a2:k]-C[i-a1:j:k]
+C[i:j-a2:k-a3]+C[i-a1:j:k-a3]+C[i-a1:j-a2:k]-C[i-a1:j-a2:k-a3]...(数式1')。
ただし、ａ１，ａ２，ａ３は、−１または１であり、該当する格子点が存在しない項の値は０とする。
【００４７】
換言すれば、これまでの説明では各軸の差分をとらない格子点値を０番目の格子点値としたが、０番目ではなく各軸の最後の格子点値を、差分をとらない格子点とすることができる。例えば第３軸で最後の格子点値を差分をとらないとした場合には、ステップＳ１１０からＳ１１６のループは０〜Ｌ−２の範囲を０から順方向にまわることになる。これは第３軸の逆方向とするために、数式１'におけるパラメータを、ａ１＝−１、ａ２＝１、ａ３＝１として全軸差分を計算する手順に相当する。
【００４８】
これまで説明した第１の実施形態では、まず第３軸方向の差分処理を行い、続いて第２軸方向、最後に第１軸方向と差分処理を行っているが、この順番は任意に変更して処理を実施することが可能であり、３軸方向全ての差分処理が終了した段階では全く同一の結果を得ることができる。このことは、数式１から明らかであろう。すなわち、これまでの説明で各軸方向の差分処理が相互に依存していないこと、差分処理がその順番を変えても同じ結果が得られることから明らかである。
【００４９】
なお、ここまで説明した処理を実施しても変換テーブルのデータ量は全く変化しない。つまり変換テーブルが格納する値を圧縮が効果的に行えるように変換する処理であって、データ量を削減する圧縮処理ではない。だたし、格子点値を３軸方向に差分をとることにより、偏りなく分散していた格子点値が０または２５５の近辺の値に集中するようになる。なぜなら色変換のためのＬＵＴの格子点値は多くの場合滑らかに変化しているため、３軸方向の差分をとることは格子点値を小さくすることにつながるからである。なお、２５５は−１に相当する値である。０付近の値は、２進数で表現すれば比較的長いリーディング０の後に、短い桁の１が表れる数値である。２５５付近の値は、２進数で表現すれば比較的長いリーディング１の後に、短い桁の０が表れる数値である。このような値をたとえばランレングスを利用した圧縮法で可逆圧縮すれば、高圧縮率で圧縮できる。なお各軸の格子位置４０１は、変換テーブルを構成するデータの一部である。したがって、格子位置４０１は全軸差分の処理対象とはならないが、圧縮されたＬＵＴの一部として、あるいは圧縮されたＬＵＴとともに、ＬＵＴを利用するコンピュータに提供される。
【００５０】
以上説明してきた３軸方向全ての差分処理をおのおの全ての出力データに施し、図４のようにそれらを連結して得られたデータに対して、図５ＢのステップＳ１０７において圧縮処理を実施する。圧縮処理としては完全に元のデータを復元できる手法、いわゆる可逆圧縮あるいはロスレス圧縮、であればどのような手法であっても適応することができる。一例としてランレングス圧縮やＵＳＰ４５５８３０２に開示されているＬＺＷ圧縮として知られる手法などがある。
【００５１】
＜復元処理＞
このように３軸方向に差分処理を行った後、圧縮処理を施したデータを利用して変換処理を実施する処理手順を、図３５Ｂに示す。この処理は、入力された印刷設定に対応した着目色変換テーブルを利用するプリンタドライバが、そのプリンタドライバがインストールされたコンピュータにおいて、着目色変換テーブルを対象として実行する。また、本実施形態では、図３５Ｂの復元プログラムは、図５Ｂのプログラムによって圧縮された色変換テーブルと共にコンピュータにロードされる。ただし、圧縮された色変換テーブルと復元プログラムは別々に同じコンピュータにロードされても良い。
【００５２】
まず、圧縮の復号処理を行う（Ｓ３５０３）。可逆圧縮処理であるので、３軸方向に差分処理を行った後のデータ、すなわち図５ＢのステップＳ１０７直前のデータを取得することができる。
【００５３】
次にＬＵＴ復元処理を行って、差分処理された変換テーブルを復元する（Ｓ３５０５）。これを出力色空間の各色成分について繰り返す（Ｓ３５０６、Ｓ３５０７）。復元が終了したなら、復元した色変換テーブルを、ＤＲＡＭ１００３あるいはＨＤＤ２００２ａに保存する。保存された色変換テーブルは、色変換のために参照される。ＬＵＴ復元処理は差分処理とほぼ同じ手順である。ただし以下の２点が異なる。第１に、着目格子点値に、そのひとつ前の格子点値を併合（加算）することである。第２は、順方向に併合処理を進めることである。併合処理を順方向に進めるのは、復号済みのテーブルの格子点値に差分を併合する必要があるためである。
【００５４】
図３５ＡにＬＵＴ復号処理の手順を示す。また、図３８、図３７、図３６に、図３５ＡのステップＳ３５００〜Ｓ３５０２それぞれを示す。図３６、図３７、図３８の処理は、それぞれ図６乃至図８の手順のほぼ逆をなぞる処理である。しかし、上記２点が守られれば、着目する軸方向以外の方向に対するテーブルの走査の順序はどのような順序であっても良いので、その順序は必ずしも図６乃至図８それぞれの逆になってはいない。復元処理により、以下の変換がされる。
Ｃ[ｉ:ｊ:ｋ] ← Ｃ[ｉ:ｊ:ｋ] + Ｃ[ｉ:ｊ:ｋ−１]、ｉ＝０〜Ｎ−１、ｊ＝０〜Ｍ−１、ｋ＝１〜Ｌ−１、
Ｃ[ｉ:ｊ:ｋ] ← Ｃ[ｉ:ｊ:ｋ] + Ｃ[ｉ:ｊ−１:ｋ]、ｉ＝０〜Ｎ−１、ｊ＝１〜Ｍ−１、ｋ＝０〜Ｌ−１、
Ｃ[ｉ:ｊ:ｋ] ← Ｃ[ｉ:ｊ:ｋ] + Ｃ[ｉ−１:ｊ:ｋ]、ｉ＝１〜Ｎ−１、ｊ＝０〜Ｍ−１、ｋ＝０〜Ｌ−１。
【００５５】
図３５Ａの例では、図５Ａと逆の順序で復元を行っている。しかし、差分処理を行う順番と、差分処理を復元する順番は無関係に実施することができる。たとえば、Ｂ軸方向、Ｇ軸方向、Ｒ軸方向の順に差分処理を行ったとしても、差分処理の復元をＧ軸、Ｂ軸、Ｒ軸の順のように、順不同で復元処理を行うことができる。なぜなら、差分処理をどのような順序で行っても得られる結果が変わらないのと同じ理由で、差分処理の復元をどのような順序で行っても結果には変化がないからである。この結果、色変換テーブルには元の値が復元される。
【００５６】
以上の手順により本実施形態によれば、色変換テーブルの特徴を利用して、色変換テーブルを高圧縮率で圧縮することができる。また、変換および逆変換によって失われる情報がない。
【００５７】
［第２実施形態］
本実施形態も第１の実施形態と同様に、隣接する格子点値の相関性を活用して圧縮処理の効果を高める手法である。本実施形態では隣接する格子点値の単純な差分を取るのではなく、近隣の格子点値を用いた補間により得られる値と実際の格子点値の差分を取ることにより格子点値を０近辺の値に変換する。本実施形態は、変換精度を向上さるために格子数を増大させたＬＵＴの圧縮に特に有効である。図１０は、本発明の第２実施形態にかかるＬＵＴの変換処理の手順を示すメインフローチャートである。なお、圧縮手順は図５Ｂに示したものと同一である。ただし、ステップＳ１０４が図１０の手順となる。なお本実施形態でも、第１実施形態と同様に出力色成分（ＹＭＣＫ）それぞれの変換テーブルのうち、Ｃ成分の変換テーブルを例として説明するが、全ての色成分について同様に本実施形態の変換処理（図１０）は適用され、その後に圧縮が行われる。
【００５８】
本実施形態は大きく分けてステップＳ２０４の縮小ＬＵＴ作成とステップＳ２０５の差分データ作成から構成される。さらにステップＳ２０４とステップＳ２０５とを、格子点数を減少させながら繰り返し処理を行う。図１０において、まずＮ、Ｍ、Ｌの値をセットする（Ｓ２００〜Ｓ２０１）。これらの値の意味は、第１実施形態の図６乃至図８と同様である。そして縮小ＬＵＴが、補間可能な最小のサイズ、すなわち各座標軸の格子点が２となるまでステップＳ２０４において間引き処理を行い、ステップＳ２０５において、縮小ＬＵＴの補間値と、その補間値に対応する、間引き前のＬＵＴの格子点の値との差分データを、各格子点毎に求めて差分テーブルを作成する。図１１は縮小ＬＵＴ作成処理の手順を示すフローチャートである。
【００５９】
図１１では、格子番号が偶数であるか、または最後の格子点である格子点値は縮小ＬＵＴ（縮小後のＬＵＴ）の格子点値とする。この処理を第１軸から第３軸の全ての軸に対して適応することで格子点数をほぼ半減した縮小ＬＵＴを作成する。例えば３軸全ての格子点数が１７のＬＵＴからは各軸について９格子点の縮小ＬＵＴが作成される。なお図１１の手順は、変換テーブルを３次元のインデックスで表して実現されている。もちろん第１実施形態のように１次元のインデックスで表しても、第１実施形態で示した変換式に則って、図１１と同様に間引き処理を実現できる。
【００６０】
図１１において、変数ｉ、ｊ、ｋ、ｌ、ｍ、ｎはＤＲＡＭ２００３に確保される。定数Ｎ、Ｍ、ＬもＤＲＡＭに保存される。変数ｉ、ｊ、ｋは、間引き対象となるＬＵＴの入力色空間の第１座標軸（Ｒ）、第２座表軸（Ｇ）、第３座標軸（Ｂ）のインデックスであり、それぞれの格子番号を表す。変数ｌ、ｍ、ｎは、間引き後の縮小ＬＵＴの第１座標軸（Ｒ）、第２座表軸（Ｇ）、第３座標軸（Ｂ）のインデックスであり、それぞれの格子番号を表す。またＣ［ｉ：ｊ：ｋ］は間引き対象のＬＵＴの格子点値を、Ｃｒ［ｌ：ｍ：ｎ］は縮小ＬＵＴの格子点値を示す。図１１の手順では、間引き対象のＬＵＴから、ＲＧＢ各軸について、格子番号が奇数または最大値であるような格子点値を残し、その他を間引いた縮小ＬＵＴとしてＣｒ［ｌ：ｍ：ｎ］が作成される。
【００６１】
図１２は、図１０のステップＳ２０５の差分データを作成する処理の手順を示すフローチャートである。差分データは、元ＬＵＴ（間引き対象ＬＵＴ）の格子点の内、間引かれた格子点の値と、その格子点に対応して縮小ＬＵＴより補間演算により算出された出力データ値との差分である。元ＬＵＴの格子点値の内、各軸のいずれかの格子番号が奇数であり、かつ、最後の格子点ではない格子点の格子点値は、縮小ＬＵＴに含まれていない。そのため、その格子点の格子位置を縮小ＬＵＴの入力データとして出力値を算出する。入力された入力データに相当する格子位置がＬＵＴに登録されていない場合、通常は補間演算により出力値が求められ、出力される。補間手法は既知のどのような手法により行うことも可能であるが、本実施形態のプリンタドライバが実際の色変換処理時に行う補間手法と同じ補間方法を用いるのが最も好ましい。そして、元ＬＵＴにおける間引かれた格子点の格子点値と、補間により縮小ＬＵＴに基づいて算出された出力値との差分が計算され、その値が差分テーブルに格納される。差分テーブルは元ＬＵＴと同じディメンションを持ち、間引かれた格子点値と同じ格子点に、その格子点値と補間値との差分値が登録される。差分計算は第１実施形態で示したものと同じ方法で行う。また補間演算の一例として線形補間を用いる補間演算がある。
【００６２】
図１２において、変数および定数の意味は図１１とほぼ同様である。図１２に特有の変数として、フラグｈｒ、ｈｇ、ｈｂがある。これらのフラグは、その全てが０であった場合、そのときの着目格子点（変数ｉ、ｊ、ｋで格子番号を示される格子点）が間引かれない格子点であることを示す。また（ｒ、ｇ、ｂ）は、輝度値を示す。Ｃｄ［ｉ：ｊ：ｋ］は、着目格子点に係る差分データを示す。図１２の手順では、上述の通り間引かれた格子点に対応する差分データが得られ、差分テーブルの対応する位置に登録される。
【００６３】
間引き前の初期状態において各軸の格子点数が、ＲＧＢそれぞれ５×３×７であるＬＵＴ（図２参照）に対して、図１０の処理を実施した場合を考える。第１段階（第１回目のループ）では、ＲＧＢそれぞれが３×２×４の格子点を持つ縮小ＬＵＴ（図１３に示す）が作成される。そして、残りの８１(＝５*３*７−３*２*４＝１０５−２４)の格子点が間引かれる。これら間引かれる格子点について、縮小ＬＵＴ（図１３）による出力値と、元ＬＵＴ（図２）の格子点値との差分データ（図１４に示す）を作成する。図１４の差分テーブルにおいては、間引かれずに縮小ＬＵＴに含まれる格子点については差分データは不要なので、空欄となっている。また丸印の格子点に差分データが登録される。
【００６４】
例えば初期状態のＬＵＴの３つの各軸の格子位置が図２に示すようである場合は元ＬＵＴの格子点[２:１:４]は、入力データ(１２７、１２８、１９０)に対応する。第２軸の格子番号が奇数なので、この格子点は元ＬＵＴから間引かれる。この入力データ(１２７、１２８、１９０)に対する縮小ＬＵＴ（図１３）の出力値Ｃ'(１２７、１２８、１９０)と、元ＬＵＴ（図２）のＣ[２:１:４]の差分を差分データとする。
【００６５】
第２段階（第２回目のループ）では、第１段階で作成した格子点数３×２×４の縮小ＬＵＴ（図１３）が元ＬＵＴになり、格子点数２×２×３の縮小ＬＵＴ（図１５）が作成される。残りの１２(＝３*２*４−２*２*３＝２４−１２)の格子点は間引かれる。これらの格子点について、格子点数２、２、３の縮小ＬＵＴによる出力と元格子点値との差分データ（図１６）が作成される。作成の仕方は、第１段階と同様である。
【００６６】
第３段階（第３回目のループ）では、第２段階で作成した格子点数２×２×３の縮小ＬＵＴ（図１５）が元ＬＵＴとなり、格子点数２×２×２の縮小ＬＵＴ（図１７）が作成される。残りの４(＝２*２*３−２*２*２＝１２−８)の格子点について、格子点数２、２、２の縮小ＬＵＴによる出力と元の格子点値との差分データ（図１８）が作成される。
【００６７】
縮小ＬＵＴの格子点数が２×２×２となるとこれ以上縮小することができないため処理を終了する（Ｓ２０３）。
【００６８】
図１０の処理により、差分データの多くが０近辺の値となるため、第１実施形態と同様、ランレングス符号化などを用いた可逆圧縮の圧縮率が大きく向上する。なお、これまで説明してきた図１０の処理を実施しても、最終的に得られる縮小ＬＵＴと各段階で作成される差分テーブルとを合計したデータ量は、初期のＬＵＴのデータ量と同じである。つまり本手法も格子点値の変換を目的とした処理であって、データ量を削減する圧縮処理ではない。そしてこの変換後に、変換されたデータの圧縮を行う。
【００６９】
上記処理を１段階のみ実施することでも効果はあるが、縮小ＬＵＴの格子点数が２になるまで繰り返し実施することがより効果的である。１段階のみ実施とは、図１０のループを行わず１回目のステップＳ２０５の終了を以てＬＵＴ変換処理を終了させることである。たとえば、図２のＬＵＴから、図１３の縮小ＬＵＴと図１４の差分テーブルとを生成した段階が１段階の処理に相当する。
【００７０】
また、入力空間の座標軸それぞれ（本例では３軸）の格子点数が異なる場合には、全ての軸について同時に格子点数が２とならない場合もある。この場合、格子点数が２になった軸はそれ以降も格子点数を２に維持し、格子点数が２より大きい軸については前述した処理に従い格子点数を減少させてゆく。全ての軸の格子点数が２になったところで処理を終了する。
【００７１】
なお、圧縮は、図１９のデータ全体を対象として行っても良いし、データ量が小さい上に、あまり効果が上がらないことが予想される格子位置１９０１を除外して残りを圧縮しても良い。
【００７２】
＜復元処理＞
ＬＵＴの復元には、初期状態のＬＵＴの各軸の格子点数および格子位置が必要であるため、図１９のようにこれらの値（各軸の格子位置１９０１）を差分データ１９０２〜１９０４および縮小ＬＵＴ１９０５とともに格納されている必要がある。元ＬＵＴには、図４に示すように各軸の格子位置は与えられているので、それをそのまま保持すればよい。格子点の間引き方を規則的に行う場合は初期状態のＬＵＴの各軸の格子位置のみを格納することによりＬＵＴを復元することができる。なお復元処理は、第１実施形態と同様にたとえばプリンタドライバが、印刷設定を入力された場合に、入力された印刷設定に応じたＬＵＴを選択して、それを復元する。
【００７３】
復元処理は縮小ＬＵＴの格子数、差分データおよび初期状態のＬＵＴの格子数・位置を用いて以下のように行う。元ＬＵＴの格子位置から差分データのデータ数および各差分データの格子点位置を確定できる。なぜなら格子位置の間引き方は規則的であるため、各段階の格子位置を初期状態のＬＵＴの格子位置から決定することができるからである。よって、各段階の縮小ＬＵＴの格子点位置、すなわち差分テーブルの格子点の位置が得られる。こうして、元ＬＵＴの格子位置の情報から縮小ＬＵＴの格子位置と１つ前のＬＵＴの格子位置が得られる。そこで縮小ＬＵＴを使用して、１つ前のＬＵＴの格子位置（すなわち差分テーブルの格子点の位置）を入力とした時の出力値を、格子点値の補間によって得ることができる。その出力値と該当する格子位置の差分データとを併合（加算）することで１段階前のＬＵＴの格子点値を取得することができる。１段階前のＬＵＴとは、間引き処理を行う前のＬＵＴである。この処理を１段階前のＬＵＴのすべての格子点に対して行うことにより、１段階前のＬＵＴを復元することができる。
【００７４】
そしてそれらの処理を、格子点数が初期状態のＬＵＴ（元ＬＵＴ）と同じになるまで繰り返すことによりＬＵＴを完全に復元することができる。
【００７５】
図３９に復元処理手順の例を示す。この例では復元を各格子点毎に行わず、補間により得られたデータのみによる補間値テーブルを作成し、それに対応する差分を加算して１段階上のＬＵＴを復元している。まず、圧縮データを復号する（Ｓ３９０１）。次に、復元に先立って、各段階における縮小ＬＵＴの格子位置を、格子点の間引き方法に基づいて決定し、記憶しておく。そして、まず最低階層の差分テーブルに着目する。これを着目差分テーブルと呼ぶ。なお縮小ＬＵＴとは、ある時点において復元されたＬＵＴを指す。
【００７６】
次に復号したデータ中に含まれる縮小ＬＵＴの値に基づいて、着目差分テーブルの格子点に対応する各格子点の格子点値を補間し、補間テーブルを作成する（Ｓ３９０２）。次に補間テーブルの各格子点値について、着目差分テーブルの対応する格子位置の差分データを加算する（Ｓ３９０３）。次に最上位まで復元したか判定する（Ｓ３９０４）。たとえば復元されたＬＵＴの格子数が、格子位置情報１９０１に含まれる格子位置を一致していれば、最上位まで復元したものと判定できる。復元が終了して入れば、復元したＬＵＴを保存し（Ｓ３９０６）、終了していなければ、現在より１段階上の差分テーブルに着目する（Ｓ３９０５）。もちろん縮小ＬＵＴは、復元されたＬＵＴとする。そしてステップＳ３９０２に戻る。
【００７７】
また図２０に示すように、各段階の差分データとともにその差分データで復元される格子位置を格納する方法も可能である。先に示した例では第３段階で作成される差分データとともに各軸の格子位置としてＲ軸（０、２５５）、Ｇ軸（０、２５５）、Ｂ軸（０、１９０、２５５）を格納する。また第２段階で作成される差分データと格子位置としてＲ軸（０、１２７、２５５）、Ｇ軸（０、２５５）、Ｂ軸（０、８５、１９０、２５５）を格納する。また第１段階で作成される差分データと格子位置としてＲ軸（０、６４、１２７、１９０、２５５）、Ｇ軸（０、１２８、２５５）、Ｂ軸（０、４２、８５、１２７、１９０、２３２、２５５）を格納する。
【００７８】
一方、図２０のように各段階の縮小ＬＵＴの格子位置を順に格納する方法も可能である。上述の場合と、形式は共通であるが、格子位置の意味が相違する。先に示したＬＵＴの場合であれば、第３段階の縮小ＬＵＴの各軸の格子位置であるＲ軸（０、２５５）、Ｇ軸（０、２５５）、Ｂ軸（０、２５５）を格納する。また、第２段階の縮小ＬＵＴの各軸の格子位置であるＲ軸（０、２５５）、Ｇ軸（０、２５５）、Ｂ軸（０、１９０、２５５）を格納する。また、第１段階の縮小ＬＵＴの各軸の格子位置であるＲ軸（０、１２７、２５５）、Ｇ軸（０、２５５）、Ｂ軸（０、８５、１９０、２５５）を格納する。また、初期状態のＬＵＴの格子位置であるＲ軸（０、６４、１２７、１９０、２５５）、Ｇ軸（０、１２８、２５５）、Ｂ軸（０、４２、８５、１２７、１９０、２３２、２５５）を格納する。
【００７９】
これらの形式で格子位置を格納すれば、差分処理がどのように行われたかが格子位置情報から判別できる。そのため、差分処理の格子点の間引き方、およびどの格子数まで間引くかという取り決めを変更しても、間引きデータからＬＵＴの復元処理を行うことが可能になる。また、復元に先立って、各段階における縮小ＬＵＴの格子位置を決定する処理を省くことができる。
【００８０】
以上説明したように本実施形態では、色変換ＬＵＴを、補間値との差分を示す差分テーブルに変換することで、各格子点値を０に近い値に変換することができる。これによって、可逆圧縮した際のＬＵＴの圧縮率を高めることができる。
【００８１】
［第３実施形態］
第３の実施形態では、異なる２つのＬＵＴ間で差分をとる手法である。ただし、２つのＬＵＴは同一のディメンションを有する必要がある。また、差分をとるのは圧縮率を高めるためなので、対応する格子点値が近似値している必要がある。
【００８２】
画像形成装置では用紙種類や品位、使用する色などの条件に対応した複数のＬＵＴを格納していて、条件に従って適切なものを選択して色変換処理を実施している。このような複数の色変換のためのＬＵＴを保有する装置においては全く同一ではないが類似性の高いＬＵＴが存在することがある。第３の実施形態はその類似性を活用することにより圧縮率を向上させる手法である。よって本実施形態では、たとえばプリンタドライバが利用する全てのＬＵＴのうち、軸数が同じで、各軸の格子数が同じで、かつ、出力データ数が同じＬＵＴを１つのグループとする。そして同じグループに属するＬＵＴの間で、圧縮率を高める効果のある組み合わせを構成し、そのＬＵＴの差分をとる。１つのグループ内のＬＵＴの個数をＥとする。
【００８３】
まず、本実施形態におけるＬＵＴ間の差分について説明する。図２６に示すように各軸の格子数が同じである２つのＬＵＴＣａ２６０１、Ｃｂ２６０２の一方の格子値を他方の格子点値との差分としたテーブルＣａｂ２６０３を作成する。Ｃａｂ２６０３の各レコード（格子点）の値は以下の通りである。
Ｃａｂ［ｉ：ｊ：ｋ］← Ｃａ［ｉ：ｊ：ｋ］−Ｃｂ［ｉ：ｊ：ｋ］、ｉ＝０〜Ｎ−１、ｊ＝０〜Ｍ−１、ｋ＝０〜Ｌ−１。
このＣａｂ［ｉ：ｊ：ｋ］を、Ｃｂを参照ＬＵＴとしたＣａの差分ＬＵＴという。この差分ＬＵＴに対して圧縮処理を行ったものを差分圧縮ＬＵＴとする。一方、差分をとることなく単に圧縮したＬＵＴを単独圧縮ＬＵＴとする。なお本実施形態での差分演算は、第１の実施形態で示したのと同じ演算による差分を使用する。またＬＵＴが１つの格子点に複数の格子点値を保持する場合はおのおのについて格子点値の差分をとり、図２７に示すように連結したものを圧縮処理の対象とする。
【００８４】
差分圧縮ＬＵＴは適当な２つのＬＵＴに対して作成しても圧縮率が向上するとは限らない。よってＬＵＴ間差分の可能な組み合わせの中からより効果のあがる組み合わせを選択する処理が必要となる。以下にその処理の１つの例を示す。
【００８５】
＜ＬＵＴ管理テーブル＞
本実施形態では複数のＬＵＴを管理する必要があるため図２４に示すようなＬＵＴ管理テーブルを使用する。ＬＵＴ管理テーブル２４００はグループ内のＬＵＴの数であるＥ個の項目を含み、それぞれの項目はＬＵＴの状態を示す状態値２４０１とＬＵＴのデータが格納されている領域へアドレス２４０２から構成されている。ＬＵＴ管理テーブル２４００における順番をそのＬＵＴのＩＤとする。ＬＵＴ管理テーブルの最初のＬＵＴのＩＤを１とし、以下ＬＵＴ管理テーブルに番号を割り当てて行き、ＬＵＴ管理テーブルの最後のＬＵＴのＩＤはＥとする。ＬＵＴ管理テーブルの状態値２４０１は初期状態では０にする。状態値が０であることはそのＬＵＴの処理が確定していないことを示す。
【００８６】
＜圧縮処理＞
図２１は差分圧縮の対象となるＬＵＴの組み合わせを選択し、圧縮する処理の一例を示すメインフローチャートである。なお、本実施形態においてはＬＵＴの圧縮も図２１の手順で行われる。図２１の前に、まず共通のディメンションを持つＬＵＴを選択して、ＬＵＴ管理テーブルをグループ毎に作成する。そして、各グループ毎に、図２１の処理を実行する。図２１に記載した本実施形態の処理は、ＬＵＴ管理テーブルの作成を別にすれば、リストＡの作成処理（ステップＳ３５０）、リストＡのソート処理（Ｓ３５１）、ＬＵＴの圧縮処理（Ｓ３５２）の３つの処理により構成される。
【００８７】
ステップＳ３５０の詳細な処理手順を図２２のフローチャートに示す。ステップＳ３３０からＳ３３３によりＬＵＴ管理テーブルを参照しながらグループ内の全てのＬＵＴを単独で圧縮し、図２５のようなリストＡを作成する。リストＡには各ＬＵＴのＩＤとそのＬＵＴを単独圧縮した場合のデータ量を処理した順に登録する。
【００８８】
次に図２１に戻って、ステップＳ３５１でリストＡの項目を単独圧縮のデータ量が大きい順に並び替える。次にステップＳ３５２が実行される。
【００８９】
ステップＳ３５２の詳細な処理手順を図２３のフローチャートに示す。ＤＲＡＭに確保した、リストＡにおける対象ＬＵＴの番号（ただし１から始まる）を示す変数ｅに初期値１を代入する（Ｓ３００）。変数ｅの値に基づいてグループ内の最後のＬＵＴまで処理が終えたか判定する（Ｓ３０１）。終えていなければ、リストＡ中のｅ番目のＬＵＴを、処理の対象となるＬＵＴ（対象ＬＵＴ）として選択する（Ｓ３０２）。なお、対象ＬＵＴは、たとえば所定のアドレスに対象ＬＵＴのＩＤを記憶しておくことで特定できる。この例ではそれを単に対象ＬＵＴという。そしてＬＵＴ管理テーブルを参照し、対象ＬＵＴのＩＤに対応する状態値を読み取る。状態値が−１であれば、対象ＬＵＴは単独圧縮ＬＵＴである。もしそうであれば、リストＡに登録されているＬＵＴのうち、現在の対象ＬＵＴの次のＬＵＴを、新たな対象ＬＵＴとする（Ｓ３１５）。
【００９０】
ステップＳ３０３において、状態値が−１以外、すなわち単独圧縮ＬＵＴでなければ、対象ＬＵＴの次にリストＡに登録されているＬＵＴを参照ＬＵＴとする。すなわちリストＡにおける参照ＬＵＴの番号を示す変数ｅ'に、変数ｅの値に１加算した値を代入する（Ｓ３０４）。その番号がリストＡの上限を越えていなければ（Ｓ３０５−Ｙ）、リストＡ中で変数ｅ'で示されるＬＵＴを参照ＬＵＴとする（Ｓ３０６）。参照ＬＵＴも対象ＬＵＴと同じく、ＤＲＡＭ等の所定の領域にそのＩＤを保存することで、特定可能である。
【００９１】
次に参照ＬＵＴが差分圧縮ＬＵＴであるかを、ＬＵＴ管理テーブルを参照して参照ＬＵＴに対応する状態値に基づいて判定する（３０７）。状態値が０，−１以外であれば差分圧縮ＬＵＴである。差分圧縮ＬＵＴであれば、現在の参照ＬＵＴの次にリストＡに登録されているＬＵＴを新たな参照ＬＵＴとする（Ｓ３０９）。一方差分圧縮ＬＵＴでなけれれば対象ＬＵＴと参照ＬＵＴの差分圧縮ＬＵＴを作成する（Ｓ３０８）。作成した差分圧縮ＬＵＴは、たとえば対象ＬＵＴのＩＤと参照ＬＵＴのＩＤとに関連づけて保存される。参照ＬＵＴがリストＡの最後のＬＵＴになるまで上記の処理を繰り返す（Ｓ３０５）。繰り返しにより、ひとつの対象ＬＵＴに対して、その対象ＬＵＴよりも単独圧縮した場合のサイズが小さいすべてのＬＵＴを参照ＬＵＴとした差分圧縮ＬＵＴが得られる。
【００９２】
上記の処理で作成した差分圧縮ＬＵＴの中からサイズが最小の差分圧縮ＬＵＴを最小差分圧縮ＬＵＴとして選択する（Ｓ３１０）。選択されていない差分ＬＵＴは削除される。選択とは、たとえば選択した差分圧縮ＬＵＴのアドレスを、選択したＬＵＴを示す特定のメモリ領域に保存することで実現できる。次に最小差分圧縮ＬＵＴのサイズと対象ＬＵＴの単独圧縮ＬＵＴのサイズとを比較する（Ｓ３１１）。差分圧縮ＬＵＴのデータ量の方が小さい場合は、その差分圧縮ＬＵＴを、対象ＬＵＴの圧縮ＬＵＴとして格納することに決定する。その場合、ＬＵＴ管理テーブルにおける対象ＬＵＴについて、ステップＳ３１０で選択した最小差分圧縮ＬＵＴのアドレスをアドレス欄に書き込み、最小差分圧縮ＬＵＴの作成に用いた参照ＬＵＴのＩＤを状態値欄に書き込む（Ｓ３１３）。そして、その差分圧縮ＬＵＴの参照ＬＵＴを単独圧縮ＬＵＴとすることに決定する。そこでＬＵＴ管理テーブルの参照ＬＵＴについて、その単独圧縮ＬＵＴのアドレスをアドレス欄に、−１を状態値欄に書き込む（Ｓ３１４）。このように、差分圧縮ＬＵＴの状態値は参照ＬＵＴのＩＤであり、単独圧縮ＬＵＴの状態値は−１が書き込まれる。
【００９３】
一方、最小差分圧縮ＬＵＴのサイズが対象ＬＵＴの単独圧縮ＬＵＴのサイズより大きいか等しい場合は、対象ＬＵＴを単独圧縮ＬＵＴとすることに決定する。その場合、ＬＵＴ管理テーブルの対象ＬＵＴについて、その状態値を−１にする。また、対象ＬＵＴの単独圧縮ＬＵＴのアドレスをアドレス欄に書き込む（Ｓ３１２）。単独圧縮ＬＵＴのアドレスは、リストＡに登録されている。
【００９４】
ステップＳ３０１からＳ３１５の処理を対象ＬＵＴがリストＡの最後から２番目のＬＵＴになるまで繰り返す。最後に、完成したＬＵＴ管理テーブルと、選択された方式で圧縮された圧縮ＬＵＴとを保存する。なおＬＵＴ管理テーブルに含まれる圧縮ＬＵＴのアドレスは、圧縮ＬＵＴを特定する情報であれば、ファイル名など他の情報であっても良い。
【００９５】
＜復元処理＞
本手法により変換されたＬＵＴを復元するには、どのＬＵＴが差分ＬＵＴでその参照ＬＵＴがどれであるかを示す情報が必要であるため、ＬＵＴの圧縮データとともに図２４のＬＵＴ管理テーブルも格納し、圧縮ＬＵＴを復号する装置に対して渡す必要がある。図４０に復元処理手順を示す。印刷設定が指示されると色変換処理に使用する復元すべきＬＵＴ（着目ＬＵＴ）が確定する（Ｓ４００１）。ＬＵＴ管理テーブルにおける着目ＬＵＴの状態値が０または−１であれば（Ｓ４００３−Ｙ）、着目ＬＵＴは単独圧縮ＬＵＴであるので、復号することで復元されている（Ｓ４００２）。ＬＵＴ管理テーブルにおける着目ＬＵＴの状態値が０でも−１でもなければ（Ｓ４００３−Ｎ）、着目ＬＵＴは差分圧縮ＬＵＴであるので、その状態値をＩＤとするＬＵＴを参照ＬＵＴとしてＬＵＴ管理テーブルから取得し（Ｓ４００４）、単独圧縮されている参照ＬＵＴを復号する（Ｓ４００５）。参照ＬＵＴは単独圧縮ＬＵＴであるので復号によって復元でき、差分圧縮ＬＵＴである着目ＬＵＴを復号して、それらを併合する（Ｓ４００６）ことで復元される。ＬＵＴ復元処理では第３の実施形態で示した併合処理と同じ処理を使用する。
【００９６】
以上のようにして、対象ＬＵＴが単独圧縮ＬＵＴである場合、および、参照ＬＵＴが差分圧縮ＬＵＴである場合には、対象ＬＵＴを差分圧縮ＬＵＴとしない。このため、２段階の差分を求めた場合に発生する可能性のある差分のループを防止できる。また、復元時の処理を簡素にすることができる。
【００９７】
さらに、単独圧縮ＬＵＴのサイズと差分圧縮ＬＵＴのサイズとを比較し、より小さい方を選択しているため、いずれか一方の方法（単独圧縮または差分圧縮）ですべてのＬＵＴを圧縮する場合に比べて、圧縮率を高めることができる。上記の手順により、最適に近い結果を簡便に得ることができる。
【００９８】
［第３実施形態の変形例］
より最適に近い結果を得るためには図２８のフローチャートに示す手順によりＬＵＴの組み合わせを選択する処理を行う。なお、この処理において使用するＬＵＴ管理テーブルは図３２に示すように状態値とアドレスとともに単独圧縮時のデータ量も格納する。初期状態ではＬＵＴ管理テーブルの状態値はすべて０にする。図２８において、まず差分圧縮ＬＵＴと単独圧縮ＬＵＴのデータ量の差のリストＢ（図３３）を作成し（Ｓ４００）、リストＢをデータ量でソートする（Ｓ４０１）。そしてリストＢを参照して図３２のＬＵＴ管理テーブルを作成する（Ｓ４０２）。最後に、ＬＵＴ管理テーブルを参照して、各ＬＵＴを圧縮する（Ｓ４０３）。ただし、リストＢを作成する段階で各ＬＵＴの単独圧縮ＬＵＴと差分圧縮ＬＵＴは作成されている。したがってそれを保存しておけば、ステップＳ４０３で行うべきは、保存された圧縮ＬＵＴから条件に適合するＬＵＴを選択してＬＵＴ管理テーブルに登録するだけである。
【００９９】
ステップＳ４００の詳細な処理手順を図２９のフローチャートに示す。変数ｅは対象ＬＵＴのＩＤであり、変数ｅ'は参照ＬＵＴのＩＤである。変数ｈはリストＢにおけるレコードの番号を示す。まず変数ｅ，ｈに、初期値として１を代入する（Ｓ４４０）。そして以下の処理をすべてのＬＵＴについて繰り返す（Ｓ４４１−Ｙ）。まず対象ＬＵＴとして変数ｅの値をＩＤとするＬＵＴを選択する（Ｓ４４２）。そして対象ＬＵＴの単独圧縮ＬＵＴを作成する（Ｓ４４３）。単独圧縮ＬＵＴのサイズは保存しておく必要がある。単独圧縮ＬＵＴ自体は保存しておくことが望ましいが、いったん廃棄してもよい。続いて、グループ内の対象ＬＵＴ以外のＬＵＴを参照ＬＵＴとする差分圧縮ＬＵＴを、ＩＤの小さな参照ＬＵＴから順に作成する（Ｓ４４７，Ｓ４４８）。そして、保存されている対象ＬＵＴの単独圧縮ＬＵＴのサイズから、ステップＳ４４８で作成した差分圧縮ＬＵＴのサイズを差し引いた値を計算し、その値を、リストＢの変数ｈで指定される項目のデータ量差欄に登録する（Ｓ４４９）。すなわち、単独圧縮ＬＵＴの方が大きければ差の値は正となる。このとき、対応する対象ＬＵＴのＩＤと参照ＬＵＴのＩＤも、ＬＵＴのサイズ差に関連づけてリストＢに登録しておく。
【０１００】
これを、グループ内の全てのＬＵＴについて繰り返し行う。すなわち、グループ内のすべての単独圧縮ＬＵＴと、全ての組み合わせの差分圧縮ＬＵＴを作成し、それぞれの差分圧縮ＬＵＴの対象ＬＵＴを単独で圧縮した場合とのデータ量の差を算出する。その差と、対象ＬＵＴと参照ＬＵＴのＩＤとを関連づけて登録した図３３のようなリストＢを作成する。リストＢの項目数はグループ内のＬＵＴの数がＥであれば、Ｅ*(Ｅ−１)となる。
【０１０１】
図２８に戻って、次にリストＢの項目をデータ量差の大きい順に並び替えを行う（Ｓ４０１）。並び替え後のリストＢの順に差分圧縮を行うＬＵＴおよびその参照ＬＵＴを決定する（Ｓ４０２）。ステップＳ４０２のＬＵＴ管理テーブルの作成の詳細な処理手順を図３０のフローチャートに示す。図３０において変数ｅはリストＢにおける、１から順に付した項目の番号を示す。図３０の手順は変数ｅの値を増加させてリストＢを走査しつつ行われる。ステップＳ４７１ではリストＢの全体について処理を終えたか判定する。変数ｅで示されるリストＢの項目に登録されたデータ量差が０より大きければ（すなわち単独圧縮ＬＵＴの方が大きければ）、変数ｅで示されるリストＢの項目の対象ＬＵＴ欄に登録されたＩＤを、対象ＬＵＴとする。そして、ＬＵＴ管理テーブルを参照し、対象ＬＵＴの圧縮方式が未決定であるか、すなわち状態値が０であるか判定する。０でなければ既に差分圧縮ＬＵＴまたは単独圧縮ＬＵＴとすることが決定済みなので、ステップＳ４７９へ分岐して、リストＢにおいて着目する項目を次に進める。
【０１０２】
対象ＬＵＴの圧縮方式が決定されていなければ、変数ｅで示されるリストＢの参照ＬＵＴの欄の値を、参照ＬＵＴのＩＤとして選択する（Ｓ４７５）。そしてＬＵＴ管理テーブルを参照して、その参照ＬＵＴが差分圧縮ＬＵＴであるか、すなわち状態値が０または−１以外であるか判定する（Ｓ４７６）。参照ＬＵＴが差分圧縮ＬＵＴでなければ、対象ＬＵＴの圧縮率は、その参照ＬＵＴを用いた差分圧縮ＬＵＴとして圧縮する場合にもっとも高くなる。したがって、ＬＵＴ管理テーブルにおける対象ＬＵＴの状態値には参照ＬＵＴのＩＤを書き込む（Ｓ４７８）。次にＬＵＴ管理テーブルにおける参照ＬＵＴの状態値には単独圧縮を示す−１を書き込む（Ｓ４７９）。以上を、リストＢ全体について繰り返す。この結果、ＬＵＴ管理テーブルには、状態値が書き込まれる。ただし、図３０の処理では、状態値が０のまま残されるＬＵＴもある。図３０の処理が終了した段階で状態値が０であるＬＵＴは、圧縮方法として差分圧縮が選択されなかったＬＵＴであるので、単独圧縮される。
【０１０３】
ここでも第３実施形態と同様に、差分圧縮ＬＵＴとする場合は参照ＬＵＴのＩＤを状態値とし、単独圧縮ＬＵＴとする場合は−１を状態値とする。またここでも第３実施形態と同様に参照ＬＵＴとして使用されたＬＵＴを差分圧縮ＬＵＴとしないことにより差分のループの発生を防止するとともに、復元時の処理を簡素にすることが達成される。
【０１０４】
最後にステップＳ４０３により状態値が０または−１のＬＵＴを単独圧縮し、それ以外のＬＵＴを、状態値で示されるＩＤを持つＬＵＴを参照ＬＵＴとして差分圧縮する。ステップＳ４０３の詳細な処理手順を図３１のフローチャートに示す。差分圧縮したＬＵＴのアドレスは、ＬＵＴ管理テーブルのアドレス欄に登録される。なお、図２９の手順において作成した単独圧縮ＬＵＴおよび差分圧縮ＬＵＴそれぞれを、対象ＬＵＴおよび参照ＬＵＴと関連づけて保存しておけば、それらを図３１のステップＳ４８３およびＳ４８４で使用することができる。
【０１０５】
＜復元処理＞
本手法により変換されたＬＵＴを復元するには、どのＬＵＴが差分ＬＵＴでその参照ＬＵＴがどれであるかを示す情報が必要であるため、ＬＵＴの圧縮データとともに図３２のＬＵＴ管理テーブルから圧縮ＬＵＴデータ量を削除したＬＵＴ管理テーブルも格納し、圧縮ＬＵＴを復号する装置に対して渡す必要がある。復元処理は第３実施形態の復元処理と同じである。
【０１０６】
［第４実施形態］
第４の実施形態は第１の実施形態と第２の実施形態の手法を効果的に組み合わせたものである。第２の手法で縮小ＬＵＴおよび差分テーブルを作成し、格子点数が２になる以前であってもその処理を停止する。そうして残った格子点数が２以上の縮小ＬＵＴに対して第１の実施形態の手法で全軸方向差分をとる。こうして得られた、全軸方向差分化された縮小ＬＵＴと差分テーブルとを圧縮する。
【０１０７】
あるいは、縮小ＬＵＴに対して全軸方向差分をとり、差分データとともに圧縮したデータ量と、縮小ＬＵＴをさらに一段階縮小して、その差分データと縮小ＬＵＴの全軸方向差分をとったＬＵＴを圧縮したデータ量とを比較する。そして、縮小を進めた場合にデータ量が低減されない場合には、ＬＵＴをさらに一段階縮小する前の状態で、全軸方向差分化された縮小ＬＵＴと差分テーブルとを圧縮する。低減された場合には、上記処理を繰り返す、データ量がより小さくなる限り繰り返す。こうすることで、第１の手法と第２の手法の最適な組み合わせを得ることができる。
【０１０８】
以上の手順によりより圧縮率を向上させることができる。
【０１０９】
［第５実施形態］
第５の実施形態は、第１の実施形態と第３の実施形態の手法を効果的に組み合わせたものである。第３の実施形態の手法を３軸方向差分処理を行ったＬＵＴに対して処理を行う。まず、全てのＬＵＴに対して第１の実施形態で示した３軸方向差分処理を行う。そして３軸方向差分が施されたＬＵＴに対して第３の実施形態に示したＬＵＴ間差分を行う。つまりＬＵＴ間差分における対象ＬＵＴ、参照ＬＵＴともに３軸方向差分処理を行ったＬＵＴを処理対象にする。
【０１１０】
第１の実施形態の説明で示した通り、第１の手法を実施してもＬＵＴのデータ量は変化せず、格子点値が差分された値に変化するだけである。また第３の実施形態はＬＵＴの格子点値の内容に全く関係なく実施可能である。そのため、第１の実施形態のＬＵＴ変換方法と、第３の実施形態のＬＵＴ変換方法とを全く変更することなく適応することができる。すなわち、各方法を直列的に実行するだけでよい。ただし、圧縮処理は、両方の変換が完了した後に行われる。第３の手法において単独で圧縮を行う場合に第１の手法の３軸方向差分処理を行う。
【０１１１】
本実施形態では、３軸方向差分処理を行うことによりグループに属する複数のＬＵＴ間の類似性が高まる。そのため第３の実施形態による手法がより効果的となる。
【０１１２】
［第６実施形態］
第６の実施形態は第２の実施形態と第３の実施形態の手法を効果的に組み合わせたものである。まず全てのＬＵＴに対して第２の手法による変換を施し、ＬＵＴを縮小ＬＵＴと差分データにする。第２の手法が施されたＬＵＴに対して第３の手法による効果的なＬＵＴ間の差分を取る。第２の手法が施されてもデータ量は変化しないため、第２の手法を施す前のＬＵＴに対するのと全く同様な方法で第３の手法を適応することができる。第２の手法により縮小ＬＵＴと差分データに変換されたＬＵＴデータの間で第３の手法で示した手順で差分にする。
【０１１３】
なお、第３の実施形態の変換は、第２の実施形態の変換によってえられた縮小ＬＵＴのみならず、差分テーブルについて適用することもできる。
【０１１４】
以上の手順により一層圧縮率を向上させることが可能となる。
【０１１５】
なお本発明は、複数の機器（例えばホストコンピュータ、インタフェイス機器、リーダ、プリンタなど）から構成されるシステムに適用しても、一つの機器からなる装置（例えば、複写機、ファクシミリ装置など）に適用してもよい。また本発明の目的は、前述の実施形態の機能を実現するプログラムコードを記録した記録媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータが記憶媒体に格納されたプログラムコードを読み出し実行することによっても達成される。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコード自体およびプログラムコードを記憶した記憶媒体は本発明を構成することになる。
【０１１６】
また、本発明には、プログラムコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム(OS)などが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれる。さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた場合についても、本発明は適用される。その場合、書き込まれたプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される。
【図１】
2011041316.tif 000003
【図２】
2011041316.tif 000004
【図３】
2011041316.tif 000005
【図４】
2011041316.tif 000006
【図５Ａ】
2011041316.tif 000007
【図５Ｂ】
2011041316.tif 000008
【図６】
2011041316.tif 000009
【図７】
2011041316.tif 000010
【図８】
2011041316.tif 000011
【図９】
2011041316.tif 000012
【図１０】
2011041316.tif 000013
【図１１】
2011041316.tif 000014
【図１２】
2011041316.tif 000015
【図１３】
2011041316.tif 000016
【図１４】
2011041316.tif 000017
【図１５】
2011041316.tif 000018
【図１６】
2011041316.tif 000019
【図１７】
2011041316.tif 000020
【図１８】
2011041316.tif 000021
【図１９】
2011041316.tif 000022
【図２０】
2011041316.tif 000023
【図２１】
2011041316.tif 000024
【図２２】
2011041316.tif 000025
【図２３】
2011041316.tif 000026
【図２４】
2011041316.tif 000027
【図２５】
2011041316.tif 000028
【図２６】
2011041316.tif 000029
【図２７】
2011041316.tif 000030
【図２８】
2011041316.tif 000031
【図２９】
2011041316.tif 000032
【図３０】
2011041316.tif 000033
【図３１】
2011041316.tif 000034
【図３２】
2011041316.tif 000035
【図３３】
2011041316.tif 000036
【図３４】
2011041316.tif 000037
【図３５Ａ】
2011041316.tif 000038
【図３５Ｂ】
2011041316.tif 000039
【図３６】
2011041316.tif 000040
【図３７】
2011041316.tif 000041
【図３８】
2011041316.tif 000042
【図３９】
2011041316.tif 000043
【図４０】
2011041316.tif 000044