以下、添付図面に従って本発明に係る実施形態を詳細に説明する。
<第1の実施形態>
先ず、多次元データの代表として色空間の変換用のカラールックアップテーブルを構成するデータを符号化する多次元データ符号化装置を説明する。
図1は本第1の実施形態に係る多次元データ符号化装置のブロック構成図である。
図1に示すように、本実施形態に係る装置は、多次元データ入力部101、プレーンバッファ102、プレーン間差分生成部103、バッファ104、多値データ予測部105、予測誤差生成部106、予測誤差符号化部107、ハフマンテーブル用メモリ108、符号列形成部109、及び、装置全体の制御を司る制御部150を備える。同図において110、111、112は信号線を表す。なお、本実施形態では、多次元データ入力部101は、予め符号化対象となる多次元データを記憶してある記憶媒体をアクセスする装置とする。しかしながら、そのデータがネットワーク上のサーバに格納されている場合には、ネットワークインタフェースで構成しても良く、その種類は問わない。
以下、図1を参照して、本第1の実施形態の多次元データ符号化装置の処理について説明する。
まず、前提として、本第1の実施形態に係る多次元データ符号化装置において処理対象となる多次元データは、X,Y、Zの3軸を有する3次元配列であるとする。また、3次元配列の各要素は16ビットで表現される非負の整数値データ(以降、多値データと称する)であるとする。そして、この多次元データの範囲は、各座標軸X,Y,Zについて“0”から“N−1”までの範囲とする。すなわち、多次元データは、N×N×N個の多値データで構成されるものとする。1つのデータは座標軸X,Y,Zの各値x,y,zで特定できるので、その多次元データI(x,y,z)と表す。なお、多次元データI(x,y,z)で示される多値データはN×N×N個の3次元配列に限らず、4次元の配列であっても良い。また、N×M×L個といった具合に各次元と取り得る範囲が異なっても構わない。
また、座標(x,y,z)で特定される3次元配列の要素が、例えばI0(x,y,z)、I1(x、y、z)、…、In(x,y,z)といった具合に、複数の成分値を有するものであっても構わない。これは、カラールックアップテーブルの場合に相当するが、説明を単純なものとするため、実施形態では、1つの座標につき、1つデータ(先に説明したように16ビットの多値データ)が格納される多次元データを符号化対象とする。なお、各要素のビット数も16にビットに限らず、8、10、12ビットなどであっても良い。上記はあくまで一例であると認識されたい。
図2は、本実施形態で入力される多次元データの概略図である。実施形態では、各次元の長さがNとしているので、図示の如く、3方が長さNの立方体形状を成している。
まず、多次元データ入力部101は、符号化対象の多次元データを構成する個々の多値データを入力される。多値データの入力順はZ軸のパラメータzを0からN−1に向けて順番に変化させる。そして、パラメータzの値で定義される、パラメータx、yで表わされる平面を以下プレーンと呼ぶ。多値データは、このプレーンのラスタースキャン順に入力されるものとする。符号化対象が3次元空間であるのに対し、1つのプレーンはそれより1次元少ない2次元の要素の集合とも言える。
図3(a)で斜線で示した部分は、z=0に固定して、x、yを変化させて構成されるプレーンである。最初に、このプレーンを構成する多値データがラスタースキャン順に入力される。そして、続いてz=1、z=2、…、z=N−1まで、順番に各プレーンの多値データがラスタースキャン順に走査されて入力される。
図3(b)は、0≦α<N(但し、値αは非負の整数)の任意の値αについて、z=αとしたプレーン(データ集合I(α))を図示したものである。以降の説明において、個々のプレーンを指す場合には、z=0であるプレーンをプレーンz0、z=1であるプレーンをプレーンz1というように、記号zとその値を「プレーン」に後続させて表現する。従って、図3(b)に示されるプレーンは「プレーンzα」と表現できる。
プレーンバッファ102は1プレーン分の多値データ、即ち、N×N個の多値データを格納するための領域を持つFIFOのバッファで構成される。このプレーンバッファ102は内部に常にN×N個の要素を保持し、多値データ入力部101から入力される多値データI(x,y,z)を格納すると同時に、1プレーン前のデータI(x,y,z−1)を出力する。符号化開始時は、プレーンバッファ102に格納されるN×N個のデータは全て“0”に初期化される。この初期化されたデータは、多値画素データI(x,y,0)を入力した際のI(x,y,−1)に相当するデータと言えば分かりやすい。
プレーン間差分生成部103は、多次元データ入力部101から信号線110を介して入力される要素の多値データI(x,y,z)と、プレーンバッファ102から出力されてくる1つ前のプレーンの要素の多値データI(x,y,z−1)の差分を求める。これは、要素データ集合I(z)と要素集合I(z−1)との差分を算出することに相当する。プレーン間差分生成部103は、更に、差分のビット数の増加を抑えるために2^15(ここで「i^j」は値iのj乗を表わす)をその差分に加算した後に、その加算結果の2^16の剰余演算を行ってプレーン間差分値D(x,y,z−1)を生成する。これは差分要素データ集合Dを算出するとも言える。プレーン間差分値D(着目要素差分データ)は次式で表される。
D(x,y,z)=Mod(I(x,y,z)−I(x,y,z-1) + 2^15 , 2^16 )
上式において、Mod(i,j)は整数値iを整数jで割った剰余を表す。値jは正の整数である。 値iは非負の整数の場合には説明は不要であろう。そこで、値iが負の場合について簡単に説明する。
値iは、i=n×m +rの式を満たす0からm−1の範囲の整数値rを持つものと見なす。例えば、値i=−5,除数が“3”のMod(−5,3)の場合、
条件1:i=−5=n×3+r
条件2:0≦r≦2
を満たさなければならないわけであるから、n=−2、r=1となる。すなわち、Mod(−5,3)は、Mod(1,3)と見なして演算する。
上記を更に分かりやすく説明すると次の通りである。説明を簡単なものとするため、2つの値Va,Vbが共に8ビットで表わされる非負の整数であるものとする。値Va,Vbは共に8ビットであるから、それぞれの取り得る範囲は0〜255の値であり、これ以外はあり得ないことに注意されたい。減算「Va−Vb」は、単純には−255〜+255の値を取り得る。しかし、Vaが“0”の場合、「Va−Vb」の値は、必ず−255〜0の範囲、すなわち、256種類中の1つの値となる。一方、Vbが“0”の場合には、「Va−Vb」の値は0〜+255、やはり、256種類中の1つの値となる。つまり、8ビットで表わされる2つの値の減算結果は、常に256種類の中の1つとなる、と言える。この減算結果に中間値128を加算して、256で剰余(あまり)を求めることで、減算結果を0〜255の値にマッピングできる。Va=0の例では、−255〜−129の値は129〜255に、−128〜0の値は0〜128に割り当てられる。また、Vb=0の例では、0〜127の値は128〜255に、128〜255の値は0〜127に割り当てられる。
さて、上記のようにして生成されるプレーン間差分値D(x,y,z)は入力多値データI(x,y,z)と同じビット数の情報となる。
バッファ104は信号線111から入力されるプレーン間差分値D(x,y,z)をN+1個分格納する容量を有する。
図4の斜線部はD(x,y,z)の入力時点でバッファ104に格納されるN+1個のプレーン間差分値Dデータを模式的に示したものである。以下、この座標(x,y,z)のプレーン間差分値D(x,y,z)を、着目データDi(要素差分データDiとも言う)と表現する。また、着目データDiの近傍に位置し、符号化処理済みの3つのデータをDa,Db,Dcとし、それら3つのデータを着目データDiの近傍データと呼ぶ。図5は、着目データDi(図示の*印)と、近傍データDa,Db,Dcとの相対位置関係を示している。近傍データDa,Db,Dcは次のように表わせる。
Da=D(x−1,y,z)(すなわち、着目データの左隣位置にあるデータ)
Db=D(x,y−1,z)(すなわち、着目データの真上位置にあるデータ)
Dc=D(x−1,y−1,z)(すなわち、着目データの左上位置にあるデータ)
多値データ予測部105は、着目データDiの入力のタイミングに同期して、バッファ104をアクセスし、バッファ104内の着目データDiの近傍データDa,Db,Dcを入力する。そして、多値データ予測部105は、着目データDiの予測値pを以下の予測式に従って算出し、その算出した予測値pを予測誤差生成部106に出力する。
p=Da+Db−Dc
なお、予測値pの算出には例外がある。着目データDiの座標がプレーンの左上隅位置(X、Y座標が共に“0”)にあるとき、近傍データDa,Db,Dcはいずれもプレーン外となってしまう。この場合には、多値データ予測部105は、予測値pを“32768”(16ビットで表わされる最大値の半分の値)であるものとして出力する。また、着目データDiの座標がプレーンの左上隅位置以外の、最初のライン上にある場合(Y座標が“0”)には、多値データ予測部105は、データDaを予測値pとして出力する。そして、着目データDiの座標がプレーンの左上隅位置以外の、左端位置にある場合(X座標が“0”)、多値データ予測部105は、データDbを予測値pとして出力する。なお、この例外ルールは、復号装置と同じにすれば良いので、上記によって本発明が限定されるものではない。
予測誤差生成部106は信号線111を介して入力した着目データDi(=プレーン間差分値D(x,y,z))と、多値データ予測部105から入力した予測値pとの差分値を求め、その差分値を予測誤差eとして予測誤差符号化部107に出力する。
予測誤差符号化部107は、まず、予測誤差生成部106から入力される予測誤差eが複数のグループのいずれに分類できるかを判定し、そのグループ番号SSSSと、グループごとに定められるビット長の付加ビットを生成する。
図6に予測誤差eとグループ番号SSSSの関係を示す。付加ビットはグループ内で予測誤差を特定するための情報であり、そのビット長はグループ番号SSSSで与えられる。なお、SSSS=16である場合には例外的に付加ビットのビット長は0である。また、予測誤差eが正であるならば予測誤差eの下位SSSSビットが付加ビットとなり、負である場合にはe−1の下位SSSSビットが付加ビットとなる。付加ビットの最上位ビットは予測誤差eが正であれば1、負であれば0となる。予測誤差符号化部107の予測誤差eに対する符号の生成処理は、先ず、ハフマンテーブル用メモリ108に格納されているハフマンテーブル(図7)を参照して、グループ番号SSSSに対応する符号化データを出力する。次いで、SSSSが0または16でない場合には、続いてグループ番号により定まるビット長の付加ビットを出力する、という順序で行われる。
符号列形成部109は、符号化処理の初期段階で、付加情報(ヘッダ)を生成し、信号線112上に出力する。この付加情報は、符号化対象となる多次元データのX,Y,Z軸方向の要素数(本実施形態の場合は全てN)、多次元データの各要素を構成する成分の数(本実施形態では1)、各成分の精度(実施形態では16ビット)や、予測誤差符号化部107で使用したハフマンテーブルの情報など復号時に必要とされる情報である。そして、符号列形成部109は、そのヘッダに後続して、予測誤差符号化部107から出力される各プレーンの符号化データを信号線112上に出力する。この結果、信号線112を介して出力された符号化データは、図8の構造を持つことになる。なお、信号線112の出力先はハードディスク等の記憶媒体或いは記憶装置とするが、ネットワークとしても良く、その出力先の種類は問わない。
次に、上記多次元データ符号化装置で生成された符号化データを復号する復号装置について説明する。図9は復号装置のブロック構成図である。本装置は、図示の如く、符号バッファ901、ヘッダ解析部902、予測誤差復号部903、プレーン間差分復号部904、多次元データ復号部905、多次元データ出力部906、ハフマンテーブル用メモリ108、バッファ104、多値データ予測部105、プレーンバッファ102、及び、装置全体の制御を司る制御部950とを備える。同図において907、908は信号線を示す。図1に示した符号化側のブロックと同じ動作をするブロックについては同じ番号を付し、説明を省略する。
以下、本実施形態の復号装置の各処理部の処理内容について説明する。
復号対象となる符号化データは信号線907から順に入力され、符号バッファ901に格納される。バッファ901には、全符号化データを格納しても良いし、後述する復号処理によって復号処理によって空エリアが発生する都度、符号化データを入力し、格納するようにしても構わない。
ヘッダ解析部902は符号バッファ901に格納される符号化データのヘッダ部分を解析し、付加情報を抽出する。付加情報は先に説明したように、ハフマンテーブルに関する情報、多次元データのX,Y,Z軸方向の要素数、各要素を構成する成分の数、各成分の精度(ビット数)などの情報である。ヘッダ解析部902は、抽出した付加情報を制御部950に通知する。制御部950は、ヘッダ解析部902からの付加情報を受けとると、先ず、プレーンバッファ102内のN×N個のデータ(16ビット)を“0”クリアする。そして、制御部950は、付加情報に基づき、各処理部に復号処理に必要な設定を行ない、復号処理を開始させる。なお、ヘッダ解析部902は、ヘッダより取り出したハフマンテーブルのデータをハフマンテーブル用メモリ108に格納する。ここでは符号化装置と同様に、図7のハフマンテーブルがハフマンテーブル用メモリ108に格納されるものとして説明する。
予測誤差復号部(第1の復号部として機能する)903は符号バッファ901から必要な長さのビットデータを取り出し、ハフマンテーブル用メモリ108に格納されるハフマンテーブルを参照して、着目するプレーン間差分値の予測誤差eを復号して出力する。予測誤差eの復号は上述の予測符号化部107の処理を逆の手順で行うことにより実施される。即ち、まず、ハフマンテーブル用メモリ108を参照して予測誤差eのグループ番号SSSSを復号する。グループ番号SSSSが0または16でない場合には続いてグループ番号により定まるビット長で付加ビットを取得する。グループ番号SSSSと付加ビットから予測誤差eを復号し、プレーン間差分復号部904へと出力する。
多値データ予測部105では先に述べた符号化時と同じ動作により、バッファ104に格納されている既に復号済みのプレーン間差分値Da,Db,Dcから、着目プレーン間差分値Diの予測値pを生成する。
プレーン間差分復号部904では多値データ予測部105から出力される予測値pと予測誤差復号部903から出力される予測誤差eとを加算して着目プレーン間差分値Diを復元し、信号線908へと出力する。
多次元データ復号部(第2の復号部として機能する)905は、プレーン間差分復号部904から出力される着目プレーン間差分値Di(=D(x,y,z))と、直前のプレーンの多値データI(x,y,z−1)を取り出す。そして、多次元データ復号部905は、プレーン間差分生成部103の処理と逆の手順により、着目位置の多値データ I(x,y,z)を復号する。復号した多値データI(x、y、z)は、多次元データ出力部906へと渡されると共に、プレーンバッファ102へと格納される。
多次元データ出力部906は、復号した多次元データを装置外部に出力するものであり、本実施形態においては記憶媒体であるとするが、ネットワークへのインターフェース等、その種類は問わない。
以上であるが、ここで3次元配列の要素 I (x,y,z)を符号化する場合について考察する。この場合の、多値データ予測部105で生成される予測値をP(x,y,z)、予測誤差符号化部107で符号化される予測誤差eをE(x、y、z)と表すと、予測誤差E(x,y,z)は次式によって表わされる。
E(x,y,z) =D(x,y,z)−P(x,y,z)
=D(x,y,z)−{D(x-1,y,z)+D(x,y-1,z)−D(x-1,y-1,z)}
ここで、D(x,y,z)は、多値データI(x、y、z)とI(x,y,z−1)の差分であるから、上式は更に次のように展開できる。
E(x,y,z) ={I(x,y,z)−I(x,y,z-1)}
−{I(x-1,y,z)-I(x-1,y,z-1)+I(x,y-1,z)-I(x,y-1,z-1)
+I(x-1,y-1,z)-I(x-1,y-1,z-1)}
=I(x,y,z)−{I(x-1,y,z)+I(x,y-1,z)+I(x-1,y-1,z)}−
{I(x,y,z-1)−{I(x-1,y,z-1)+I(x,y-1,z-1)+I(x-1,y-1,z-1)}}
これは要素I(x,y,z)を、予測値P’(x、y、z)=I(x−1,y,z)+I(x,y−1,z)- I(x−1、y−1、z)で符号化する場合に、直前のプレーンで発生した予測誤差E’(x、y、z−1)=I(x,y,z−1)−{I(x−1,y,z−1)+I(x,y−1,z−1)− I(x−1、y−1、z−1) }をフィードバックしていることを示している。従って、プレーン間で予測誤差がE’が近い値をもつような多次元ルックアップテーブルの場合、圧縮率は非常に高いものとすることができるのが理解できよう。
以上説明したように本実施形態によれば、カラールックアップテーブルのように多次元(3次元以上)データの多次元空間内の隣接するデータの差が十分に小さいことを利用して可逆符号化している。従って、オリジナルの多次元データに対して高い圧縮率で可逆の符号化データを生成することが可能になる。
なお、実施形態では、3次元空間中の1つの要素は1成分で構成されるものとしたが、1要素は複数成分を備える場合にも適用できる。例えば、デバイス依存のRGB空間を標準色空間Labに変換するルックアップテーブルの場合、R、G、Bの各成分値が座標値とし、その座標値で特定される要素は(L,a,b)の3つの成分値を持つことになる。この場合、それぞれの成分毎に上記処理を行なえば良いのは明らかである。
また、実施形態では、次元数を“3”の例を説明したが、次元数は“3”に限定されるものではない。ここでは、M次元(Mは3以上の値である)のデータについて考察する。1つの要素はM個の座標軸Q0、Q1、Q2、Q3、…、QM-1の各座標値で特定される。各座標軸における座標値をq0,q1,q2、…、qM-1とすると、1つの要素のデータはI(q0,q1,q2,…qM-1)と定義できる。このM次元の空間を、そのM次元に特化したスキャン方向にスキャンして符号する場合について考察する。
この場合、或る座標軸、例えば最後の座標軸QM-1の値qM-1=αである仮想2次元プレーン「α」(実際はM−1次元の空間であるが敢えてこのように表現する)と定義した場合、この多次元データは仮想2次元プレーンの集合と見ることができる。そこで、仮想2次元プレーン「α」と、仮想2次元プレーン「α−1」と差分を、先に示した仮想プレーン間差分値D(q0,q1,…,qM-2,α)として求める。
D(q0,q1,…,qM-2,α)=I(q0,q1,…qM-2,…,α)−I(q0,q1,…,qM-2,α−1)
これ以降は、上記と同様に、着目データDi(=D(q0,q1,…,qM-2,α))の近傍の、符号化済みの座標位置にある1つ又は複数のプレーン間差分値Dから予測値pを求め、着目データDiと予測値pとの差分を予測誤差として符号化することで、M次元の着目データ集合Dの符号化データを生成することができる。
なお、上記実施形態では、符号化側と復号側の装置がそれぞれ別々の装置であるものとしたが、1つの装置内にこの2つの機能を持つものでも構わない。
<第1の実施形態の変形例>
上記第1の実施形態を、例えばパーソナルコンピュータ等の汎用の情報処理装置のソフトウェア(コンピュータプログラム)でもって、上記と等価の処理を行なうことも可能である。
図10は本変形例に係る情報処理装置の基本構成を示す図である。
図中、1401は装置全体の制御を司るCPUである。1402はCPU1401のワークエリアとして使用するRAMであり、1403はBIOS及びブートプログラムを格納しているROMである。1404はキーボード、1405はポインティングデバイスの1つであるマウスである。1406は表示制御部であって、内部にはビデオメモリ及びCPU1401の制御によってビデオメモリへの描画、及び、ビデオメモリに可能されたデータをビデオ信号として表示装置1412に出力する表示コントローラを内蔵している。表示装置1412はCRTや液晶表示装置である。1407はハードディスク装置等の外部記憶装置であり、これにはOS(オペレーティングシステム)、多次元データ処理を行なうアプリケーションプログラムが格納されている。なお、外部記憶装置1407は、各種アプリケーションで作成されたファイルを格納するためにも利用される。1408は記憶媒体ドライブであり、フレキシブルディスク、メモリカード、CD−ROM等の記憶媒体に対してリード/ライトを行なう。1409は本装置とイメージスキャナ1411とを接続するためのスキャナインタフェース(USBやSCSIインタフェース等)ある。1413はネットワークインタフェースである。
本装置の電源がONになると、CPU1401はROM1403のブートプログラムに従って、外部記憶装置1407からOSをRAM1402にロードする。この結果、OSの制御の下で、表示制御部1406にGUIを描画して、表示装置1412にそのGUIを表示させる。操作者は、表示装置1412の表示を見て、キーボード1404やマウス1405を操作することになる。ここで、多次元データ処理アプリケーションの起動指示が操作者より与えられると、CPU1401は外部記憶装置1407内の多次元データ処理アプリケーションプログラムをRAM1402にロードし、実行する。この結果、本装置が多次元データ処理装置として機能することになる。
CPU1401が多次元データ処理アプリケーションを実行し、操作者より符号化対象となる画像の入力指示を受けると、外部記憶装置1407から多次元データ、またはその符号化データを入力し、符号化、復号を行なうことになる。符号化結果、復号結果は、外部記憶装置1407にファイルとして格納する。
ここで、多次元データ処理アプリケーションは、図1に示す各構成要素に相当するモジュール(サブルーチン、関数と言い換えることもできる)、或いは図9に示す各構成要素に相当するモジュールを有する。ただし、プレーンバッファ102、バッファ104、符号バッファ109については、RAM1402に確保されることになる。
図11は、本実施形態に係る多次元データ処理装置による符号化処理の流れを示すフローチャートである。以下、同図のフローチャートに従い、CPU1401が実行する手順(多次元データ処理アプリケーションの符号化処理)を説明する。なお、説明を簡単なものとするため、符号化対象のデータは第1の実施形態と同様3次元ルックアップテーブルであり、1つの要素は1つの成分で構成されており、ルックアップテーブルの取り得る範囲は各座標軸とも0乃至N−1であるものとして説明する。
まず、符号化処理の開始に先立ち、装置の初期化処理が行われる(ステップS1100)。プレーンバッファ102の初期値設定はこのタイミングで行われ、N×N個のデータの初期値として0が設定される。続いて、符号化対象の多次元データに関する情報や、ハフマンテーブルの情報からファイルヘッダを生成し、外部記憶装置1407に書き込む(ステップS1101)。次いで、ステップS1102、S1103、S1104において、変数z、y、xをそれぞれ“0”に初期化する。
ステップS1105では、多値データ I(x,y,z)を着目データとして入力する。ステップS1106において、着目多値データI(x,y,z)と直前のプレーンのX、Y座標値が着目多値データと同じ多値データI(x,y,z−1)との差分をプレーン間差分D(x,y,z)として算出する。続いて、ステップS1107にて予測値pを算出し、予測誤差eを算出する。ステップS1108では予測誤差eの符号化処理が行われ、その符号化データをファイルヘッダに後続するデータとして外部記憶装置1407に書き込む。
この後、ステップS1109に進み、変数xに“1”を加えることで変数xを更新する。そして、ステップS1110にて、変数xの値とNとを比較する。x<Nであると判断した場合にはステップS1105へ、x≧N(実際はx=N)の場合にはステップS1111へと処理を移す。
ステップS1111では、変数yに“1”を加え、ステップS1112で変数yの値とNとを比較する。y<Nである場合にはステップS1104へと処理を移し、y≧N(y=N)の場合にはステップS1113へと処理を移す。ステップS1113では、変数zに“1”を加えて更新し、ステップS114において変数zの値とNとを比較する。z<Nである場合にはステップS1103に処理を移し、z≧N(z=N)の場合には、本符号化処理を終了する。
以上説明したように、先に説明した第1の実施形態と同様の処理を、コンピュータプログラムにとっても実現できるようになる。
次に、CPU1401が実行する多次元データ処理アプリケーションの復号処理を図12のフローチャートに従って説明する。
まず、復号処理の開始に先立ち、装置の初期化処理が行われる(ステップS1200)。プレーンバッファ102の初期値設定はこのタイミングで行われ、N×N個のデータを初期値“0”に設定する。続いて、復号対象のファイルヘッダを読込み、復号対象の多次元データに関する情報や、ハフマンテーブルの情報をそのヘッダから取得する(ステップS1201)。ステップS1202、S1203、S1204にて、変数z,y,xをそれぞれを“0”に設定する。
ステップS1205では、ハフマンテーブルを参照して予測誤差eを復号する。そして、ステップS1206にて、既に復号済みのデータから予測値pを求め、予測誤差eに予測値pを加算することで、プレーン間差分値D(x,y,z)を復元する。ステップS1207では、直前のプレーンの復号結果を格納するバッファ中の該当する多値データI(x,y,z-1)を読込み、着目プレーン中の着目データを復号し、復号結果を格納する外部記憶装置に出力する。
この後、ステップS1208に進み、変数xに“1”を加えることで変数xを更新する。そして、ステップS1209にて、変数xの値とNとを比較する。x<Nであると判断した場合にはステップS1205へ、x≧N(実際はx=N)の場合にはステップS1210へと処理を移す。
ステップS1210では、変数yに“1”を加え、ステップS1211で変数yの値とNとを比較する。y<Nである場合にはステップS1204へと処理を移し、y≧N(y=N)の場合にはステップS1212へと処理を移す。ステップS1212では、変数zに“1”を加えて更新し、ステップS1213において変数zの値とNとを比較する。z<Nである場合にはステップS1203に処理を移し、z≧N(z=N)の場合には、本復号処理を終了する。
以上説明したように第1の実施形態と同様の機能をコンピュータプログラムによっても実現でき、同様の作用効果を奏することが可能になる。
なお、上記では、符号化対象の多次元データは外部記憶装置1407から読み出すものとしたが、符号化対象の多次元データは記憶媒体に格納されていても良いし、ネットワーク上のサーバからダウンロードする場合にも適用可能である。また符号化結果の出力先も、外部記憶装置1407に限らず、ネットワークでも構わないし、その出力先は如何なるものでも構わない。
<第2の実施形態>
第2の実施形態では、ICCプロファイルデータの中のカラールックアップテーブルを圧縮してICCプロファイル圧縮データを符号化する例とそれを復号する例を説明する。
図13は本第2の実施形態に係る多次元データの符号化装置のブロック構成図である。本第2の実施形態に係る符号化装置は、ICCプロファイル入力部1301、ICCプロファイル格納用メモリ1302、タグテーブル解析部1303、CLUT抽出部1304、プレーンバッファ1305、プレーン間差分変換部1306、JPEG可逆符号化部1307、CLUT符号化データ格納用メモリ1308、ICCプロファイルデータ形成部1309、ICCプロファイル圧縮データ出力部1310、そして、装置全体の制御を司る制御部1350を備える。同図において1311、1312は信号線を示す。
以下、同図を参照して、本第2の実施形態の符号化装置の多次元データであるICCプロファイルデータの符号化処理について説明する。
ICCプロファイルは、入力デバイス、出力デバイス、表示デバイスをPCS(Profile Connection Space)と呼ばれるデバイス非依存の標準色空間を介して結びつけ、カラー画像データの互換性を保つ技術である。この技術は、現在、カラーマネージメントを行う上での標準的な手法として広く利用されている。ICCプロファイルの詳細については公知であるので、ここでは説明を省略する。
本第2の実施形態に係る符号化装置は、International Colour Consortium (ICC)の策定したフォーマットによるカラープロファイルデータ(ICCプロファイルデータ)を符号化対象とする。図14にICCプロファイルデータの構造を図示する。ICCプロファイルデータは128バイトのプロファイルヘッダ(Profile header)1401を備える。そして、ヘッダに後続して、タグ付き要素データ(Tagged Element Data)の数を示したタグカウント(Tag Count)1402、各タグ付き要素データのタイプを示したシグネチャ、データ格納位置へのオフセット値、及び、データサイズを記述したタグテーブル(Tag Table)1404、そして、タグ付き要素データ1405から構成される。
特に、本第2の実施形態での符号化対象とするICCプロファイルデータには、タグ付き要素データに一つのlut16Typeのタグ付き要素データ(図14の1403)が存在するものとする。また、そのタグ付き要素データの他に、カラールックアップテーブル(CLUT)を含むタグ付き要素データを含まないものとする。しかしながら、本発明は同様にlut8Typeのタグ付き要素データや、lutAtoBType、lutBtoATypeのタグ付き要素データに対しても適用可能である。また、このようなタグ付き要素データを複数含むICCプロファイルデータに対しても適用可能である。複数存在する場合には、以下に説明するlut16Typeのタグ付き要素データに対する処理と同様の処理をそれぞれのタグ付き要素データに対して適用すれば良い。
次に、本第2の実施形態の画像処理装置での各部の動作について説明する。
まず、符号化対象となるICCプロファイルがICCプロファイル入力部1301から入力される。ICCプロファイル入力部1301は外部記憶媒体へのインターフェース、またはネットワークへのインターフェース等であり、符号化対象となるICCプロファイルデータを装置内部に取り込む役割を果たす。ICCプロファイル入力部1301は、入力したICCプロファイルデータを、一旦、ICCプロファイル格納用メモリ1302へ格納する。
ICCプロファイルデータがICCプロファイル格納用メモリ1302に格納されると、タグテーブル解析部1303ではICCプロファイルのタグテーブルを解析し、lut16Typeのタグ付き要素データを抜き出してCLUT抽出部1304に送る。
CLUT抽出部1304はその内部に不図示のバッファを有し、タグテーブル解析部1303により抜き出されたlut16Typeのタグ付き要素データを格納する。lut16Typeのタグ付き要素データはi次元の色空間をo次元の別の色空間に対応付けるものであり、3×3配列、1次元入力テーブル、多次元カラールックアップテーブル(CLUT)、1次元出力テーブルで構成される。CLUTはi次元の配列であり、各配列要素がo個の成分値を有する。lut16Typeのタグ付き要素データには付加情報として、i、oの他、CLUTの各次元の要素数gが記される。CLUT抽出部1304はlut16Typeのフォーマットに従って、i,o,gを取得し、CLUTの各要素の各成分を順番にプレーン間差分変換部1306へ出力する。
CLUTには3次元3成分、3次元4成分、4次元3成分などがあるが、本第2の実施形態では3次元3成分であり、各次元の要素数g=Nの場合を例に説明する。従って、本実施形態でのCLUTの要素数はN×N×Nであり、成分の総数はN×N×N×3である。よってCLUTの構成は第1の実施形態で符号化対象とした図2の多次元データと同じであり、各要素が3成分で構成されている点が異なる。
X,Y,Z軸の位置がそれぞれx、y、zである3次元配列の要素の第1成分をI0(x,y,z)、第2成分をI1(x,y,z)、第3成分をI2(x,y,z)と記す。lut16Typeの場合、各成分値は16ビットで表現される。
プレーンバッファ1305はCLUT抽出部1304から出力される3次元配列の要素を1プレーン分格納する。プレーンの概念は第1実施形態と同じであるが、各要素が3成分で構成されるため、プレーンバッファ1305にはN×N×N×2×3バイト分の容量が必要となる。プレーンバッファ1305は符号化処理の開始時点で全ての値を0に初期化する。
プレーン間差分変換部1306はCLUT抽出部1304から出力されるIn(x、y、z)(nは0、1,2のいずれか)について、プレーンバッファ1305から当該成分値の直前のプレーンの値In(x、y、z−1)を読み出す。そして、プレーン間差分変換部1306は、プレーン間差分値Dn(x、y、z)を生成し、出力する。具体的には以下の式を用いる。
Dn(x、y、z)=Mod(In(x、y、z)−In(x、y、z−1)+(2^15),(2^16))
JPEG可逆符号化部1307はプレーン間差分変換部1306から順次入力されるN×N×N個、3成分、各16ビットのプレーン間差分値Dn(x、y、z)を水平方向画素数N、垂直方向画素数N×Nの3成分、16ビットの画像データとしてJPEG(ISO/IEC 10918−1)に規定される可逆符号化(Lossless Process)により符号化し、符号化データをCLUT符号化データ格納用メモリ1308に格納する。JPEGの可逆符号化処理については規格書「ITU−T T.81|ISO/IEC10918−1 Information technology - Digital compression and coding of continuous-tone still images : Requirements and guidelines」や各種解説書に詳細が書かれているのでここでは説明を省略する。
JPEGの可逆符号化では予測なしを含めて8通りの予測式を選択することができる。ここでは、ここでは予測式の選択番号m=4、すなわち、Px=Ra+Rb−Rcを使用する(詳しくは、上記規格書のAnnex H Table H.1 - Predictors for lossless codingを参照されたい)。なお、本第2の実施形態では水平方向画素数をN、垂直方向画素数をN×Nとしているが、水平方向画素数をN×N、垂直方向画素数をNとして符号化しても構わない。
CLUT符号化データ格納用メモリ1308にCLUT符号化データが格納されたとする。この場合、ICCプロファイル圧縮データ形成部1309は、ICCプロファイル格納用メモリ1302に格納されるICCプロファイルデータと、CLUT符号化データ格納用メモリ1308に格納されるCLUT符号化データから必要なデータを取り出す。そし、ICCプロファイル圧縮データを形成して出力する。ICCプロファイル圧縮データはICCプロファイル格納用メモリに格納されるICCプロファイルデータのうち、CLUT抽出部1304で抽出されたCLUTをCLUT符号化データ格納用メモリに格納されているCLUT符号化データで置き換えたものである。図15はICCプロファイル圧縮データ形成部1309で生成されるICCプロファイル圧縮データの構造を示したものである。圧縮前の図14との違いは、CLUTの圧縮によりCLUTを含むタグ付き要素データ1403(図14)のCLUT部分がCLUT符号化データ格納用メモリ1308に格納されるCLUT符号化データによって置き換えられ、図15のようにCLUT圧縮データを含むタグ付き要素データ1501になる。また、CLUTの符号化によるタグ付き要素データのサイズ変更に伴い、タグテーブル中、CLUT圧縮データを含むタグ付き要素データのサイズを記した部分(図15の参照番号1502)が書き換えられる。更に、CLUT圧縮データを含むタグ付き要素データの後に続くタグ付き要素データ1504のオフセット位置が変わるため、それらのオフセットを記した部分(図15の参照番号1503)も更新される。
ICCプロファイル圧縮データ出力部1310はICCプロファイル圧縮データ形成部1309から出力されるICCプロファイル圧縮データを装置外部へと出力する。ICCプロファイル圧縮データ出力部1310は外部記憶装置へのインターフェースであり、圧縮データをファイルとして格納する。なお、このICCプロファイル圧縮データ出力部1310はネットワークへのインターフェース等であっても良い。
図16は本第2の実施形態に係る多次元データの符号化装置による符号化処理の流れを示すフローチャートである。以下、図16に示したフローチャートに従い、本第2の実施形態に係る制御部1350のICCプロファイルデータの符号化処理の全体的な流れについて説明する。
まず、ICCプロファイル入力部1301は、符号化対象となるICCプロファイルデータを入力し、ICCプロファイル格納用メモリ1302に格納する(ステップS1600)。続いて、タグテーブル解析部1303は、ICCプロファイルデータに格納されている各タグ付き要素データのタイプ判別を行ない、CLUTを含んだタグ付き要素データ(本第2の実施形態ではlut16Typeのタグ付き要素データ)を取り出し、CLUT抽出部1304に出力する。CLUT抽出部1304ではタグ付き要素データの内部からCLUTを抽出し、CLUTの各要素を順番に出力する(ステップS1602)。
プレーン間差分変換部1306は、CLUT抽出部1304から抽出されるCLUTの要素I0(x,y,z)、I1(x,y,z)、I2(x、y、z)と、プレーンバッファ1305に格納されている直前のプレーンの各要素要素I0(x,y,z−1)、I1(x,y,z−1)、I2(x、y、z−1)とのそれぞれの差分を求め、プレーン間差分D0(x、y、z)、D1(x,y,z)、D2(x、y、z)をJPEG可逆符号化部1307に出力する(ステップS1603)。
JPEG可逆符号化部1307はプレーン間差分変換部1306からのプレーン間差分値D0(x,y,z)、D1(x、y、z)、D2(x,y,z)を水平方向画素数N、垂直方向画素数N×Nの画像の1画素を構成する3つの成分値とみなして、JPEG可逆符号化(Lossless Process)による符号化処理を行う(ステップS1604)。
CLUTの全ての要素を符号化し終えた場合には処理をステップS1606へと移し、そうでない場合にはステップS1602へと処理を移し、CLUTの次の要素についてステップS1602からステップS1604の処理により符号化を行う(ステップS1605)。
ステップS1606ではICCプロファイル圧縮データ形成部1309によりICCプロファイル圧縮データの生成が行われる。最後にステップS1607でICCプロファイル圧縮データ出力部1310からICCプロファイル圧縮データが装置外部へと出力される。
以上の処理により、ICCプロファイルデータの符号化処理が行われ、装置外部へとICCプロファイル圧縮データが出力される。
次に、上記のようにして符号化されたICCプロファイルデータを復号する復号装置について説明する。
図17は本第2の実施形態に係る多次元データの復号装置の復号側のブロック構成図である。図17に示すように、本実施形態に係る多次元データの復号装置は、ICCプロファイル圧縮データ入力部1701、ICCプロファイル圧縮データ格納用メモリ1702、タグテーブル解析部1703、CLUT圧縮データ抽出部1704、JPEG可逆符号化データ復号部1705、CLUT要素データ復号部1706、プレーンバッファ1707、CLUT格納用メモリ1708、ICCプロファイルデータ復元部1709、ICCプロファイル出力部1710、そして、装置全体の制御を司る制御部1750を備える。同図において1711、1712は信号線を示す。
以下、図17を参照して、本第2の実施形態に係る多次元データの復号装置の制御部1750が行うICCプロファイルデータの復号処理について説明する。
本第2の実施形態に係る復号装置は、上述の符号化装置(図13)で生成した図15の構造を有するICCプロファイル圧縮データを入力し、元のICCプロファイルデータを復元する。
まず、ICCプロファイル圧縮データ入力部1701は、復号対象となるICCプロファイル圧縮データを入力する。ICCプロファイル圧縮データ入力部1701は外部記憶媒体へのインターフェース、またはネットワークへのインターフェース等であり、復号対象となるICCプロファイルデータを装置内部に取り込む役割を果たす。ICCプロファイル圧縮データ入力部1701は、入力されるICCプロファイルデータを、一旦、ICCプロファイル格納用メモリ1702に格納する。
ICCプロファイルデータがICCプロファイル圧縮データ格納用メモリ1702に格納されると、タグテーブル解析部1703は、ICCプロファイルのタグテーブルを解析し、lut16Typeのタグ付き要素データを抜き出してCLUT抽出部1704に送る。
CLUT抽出部1704は、その内部に不図示のバッファを有し、タグテーブル解析部1703により抜き出されたlut16Typeのタグ付き要素データを格納する。lut16Typeのタグ付き要素データはi次元の色空間をo次元の別の色空間に対応付けるものである。ICCプロファイルデータにおいては、3×3配列、1次元入力テーブル、多次元カラールックアップテーブル(CLUT)、1次元出力テーブルで構成される。先に説明したように、ICCプロファイル圧縮データにおいては、このCLUTがJPEG可逆符号化データに置き換えられている。CLUT抽出部1704はlut16Typeのフォーマットに従って、CLUTの配列次元数i,各配列要素の成分数o,各次元の要素数gを取得し、本来CLUTが格納されているべき位置(JPEG可逆符号化データの開始位置に相当)を特定する。
JPEG可逆符号化データ復号部1705は、CLUT圧縮データ抽出部1704で指定されるJPEG可逆符号化データの先頭位置からJPEG可逆符号化データの復号処理を開始し、CLUTの各要素のプレーン間差分値D0(x、y、z)、D1(x、y、z)、D2(x、y、z)を順に復号する。
CLUT要素データ復号部1706は、JPEG可逆符号化データ復号部1705により復号されるプレーン間差分値D0(x、y、z)、D1(x、y、z)、D2(x、y、z)について、プレーンバッファ1707からI0(x、y、z−1)、I1(x、y、z−1)、I2(x、y、z−1)を読み出し、上述のプレーン間差分変換部1306(図13)と対になる処理により、着目するCLUTの要素の各成分値I0(x,y,z)、I1(x,y,z)、I2(x、y、z)をそれぞれ復号する。
プレーンバッファ1707はCLUT要素復号部1706から出力される3次元配列の要素を1プレーン分格納する。なお、説明が前後するが、制御部1750は、復号処理開始時に、プレーンバッファ1705を全ての値を0に初期化する。
CLUT格納用メモリ1708には復号されたCLUTの各要素が順次格納される。プレーン間差分からCLUT要素を復号する点を明記するため、プレーンバッファ1707とCLUT格納用メモリ1708を記したが、直前のプレーンの要素値はCLUT格納用メモリ1708にも格納されているので、CLUT格納用メモリ1708のみを有してプレーンバッファ1707の機能を持たせても良い。
CLUT格納用メモリ1708にCLUTの全ての要素が格納されると、ICCプロファイル復元部1709は、ICCプロファイル圧縮データ格納用メモリ1702に格納されるICCプロファイル圧縮データと、CLUT格納用メモリ1708に格納されるCLUTデータから必要なデータを取り出し、ICCプロファイルデータを復元して出力する。ICCプロファイルデータはICCプロファイル圧縮データ格納用メモリ1702に格納されるICCプロファイル圧縮データのうち、CLUT圧縮データ抽出部で抽出されたCLUT圧縮データ(JPEG可逆符号化データ)をCLUT格納用メモリに格納されているCLUTデータで置き換えたものである。復元されるICCプロファイルは図14に示した構造をもつICCプロファイルデータである。ICCプロファイル圧縮データ(図15)との違いは、CLUTの復号によりCLUT圧縮データを含むタグ付き要素データ1501(図15)のCLUT圧縮データ部分がCLUT格納用メモリ1708に格納されるCLUTデータによって置き換えられ、図14のようにCLUTを含むタグ付き要素データ1403になる点である。また、CLUTの復号によるタグ付き要素データのサイズ変更に伴い、タグテーブル中、CLUT圧縮データを含むタグ付き要素データのサイズを記した部分(図15の参照番号1502)が書き換えられる。更に、CLUT圧縮データを含むタグ付き要素データの後に続くタグ付き要素データ1504のオフセット位置が変わるため、それらのオフセットを記した部分(図15の参照番号1503)も更新される。
ICCプロファイルデータ出力部1710はICCプロファイルデータ復元部1709から出力されるICCプロファイルデータを装置外部へと出力する。ICCプロファイルデータ出力部1710は外部記憶装置へのインターフェースであり、圧縮データをファイルとして格納する。なお、このICCプロファイルデータ出力部1710はネットワークへのインターフェース等であっても良い。
図18は本実施形態に係る多次元データ処理装置による復号処理の流れを示すフローチャートである。以下、図18に示したフローチャートに従い、本第2の実施形態に係る多次元データの復号装置の制御部1750が行うICCプロファイルデータの符号化処理の全体的な流れについて説明する。
まず、制御部1750は、ICCプロファイル圧縮データ入力部1701を制御し、復号対象となるICCプロファイル圧縮データを入力させ、それをICCプロファイル圧縮データ格納用メモリ1702に格納させる(ステップS1800)。続いて、制御部1750は、タグテーブル解析部1703を制御し、ICCプロファイル圧縮データに格納されている各タグ付き要素データのタイプ判別が行わせる。そして、制御部1750は、タグテーブル解析部1703を制御し、CLUT圧縮データを含んだタグ付き要素データ(本実施形態ではlut16Typeのタグ付き要素データ)を取り出させ、CLUT圧縮データ抽出部1704へ出力させる。CLUT抽出部1704は、制御部1750の制御の下で、タグ付き要素データの内部からCLUT圧縮データを抽出し、JPEG可逆符号化データ復号部1705に出力する。JPEG可逆符号化データ復号部1705は、プレーン間差分値D0(x,y,z)、D1(x、y、z)、D2(x,y,z)を順に復号する(ステップS1802)。
CLUT要素復号部1706は、CLUT要素の各成分I0(x,y,z)、I1(x,y,z)、I2(x、y、z)を復号し(ステップS1803)、復号された要素の各成分はプレーンバッファ1707とCLUT格納用メモリ1708に格納する(ステップS1804)。CLUTの全ての要素を復号し終えた場合には処理をステップS1806へと移し、そうでない場合にはステップS1802へと処理を移し、CLUTの次の要素についてステップS1802からステップS1804の処理により復号処理を行う(ステップS1805)。ステップS1806に処理が進むと、ICCプロファイルデータ復元部1809は、ICCプロファイルデータの復元を行なう。最後にステップS1807でICCプロファイルデータ出力部1810から復元されたICCプロファイルデータが装置外部へと出力される。
以上の処理により、ICCプロファイルデータの復号処理が行われ、装置外部へと復号されたICCプロファイルデータが出力される。
以上の説明のように、本第2の実施形態に係る多次元データ処理装置では、ICCプロファイルデータに含まれるカラールックアップテーブル(CLUT)をプレーン間差分へ変換した後にJPEG可逆符号化による符号化を行う。ICCプロファイルに含まれるCLUTはプレーン間での予測誤差が近い値をもつ傾向があり、第1の実施形態で述べた効果により圧縮の性能を向上することができる。本実施の形態によれば、プレーン間差分(1次元予測)へ変換後、プレーン内部で平面予測(2次元予測)を適用することで、3次元全ての軸に対して、近隣要素間の相関を利用することができ、高効率な圧縮が可能となる。特に、近隣要素間の相関の高いカラールックアップテーブルの圧縮には有効であると言える。なお、同様の効果をもたらす手法として、プレーン間で2次元予測を用いた誤差に変換した後、プレーン内で前値予測を用いるという場合でも本実施形態と同様の効果を得ることができる。また、本実施の形態の多次元データ処理装置では、カラーマッチングのためのICCプロファイルデータの圧縮に静止画像の可逆符号化方式を用いている。カラー画像の圧縮と、カラーマッチングのための情報(即ちICCプロファイルデータ)の圧縮に同じ方式を用いることで、新たな圧縮方式を必要とせず、簡易にかつ、多次元の相関を有効利用した高効率な符号化が実現できる。本実施形態の場合、機器間でのカラー画像データの受け渡しに際してもJPEG可逆符号化を用いれば良い。反対に例えばJPEG−LSなど、別の可逆符号化方式を適用するのであれば、上述の実施形態においてJPEG可逆符号化に代えて、その符号化方式を適用すれば良い。
また、上記第2の実施形態は、第1の実施形態の変形例と同様、コンピュータが該当するプログラムを実行することでも実施できる。この場合、そのコンピュータプログラムは、図13、17に示すような各構成に対応するモジュールを備え、メイン処理では図16、18の処理を行なえばよいのは容易に理解できよう。
<第3の実施形態>
第2の実施形態では、CLUTが3次元、3成分である場合について説明した。しかしながら、4次元や4成分であっても本発明は適用可能である。また、第2の実施形態では、3次元データのz軸を固定してプレーンを定義したが、多次元データのスキャン順序としては複数の方法が考えられ、上述の例に限定されるものではない。第3の実施形態では、ICCプロファイルデータの中の4次元3成分のカラールックアップテーブルを例に、複数のスキャン順序のうち、符号量が少なくなるスキャン順序を選択して適用する例について説明する。
図20に本第3の実施形態に係る符号化装置のブロック構成図を示す。同図に示す通り、第2の実施形態で説明した図13のCLUT抽出部1304を、動作の異なるCLUT抽出部2001に置き換え、さらにスイッチ2002、予測誤差絶対値平均算出部2003を追加した構成となっている。
以下、第2の実施形態と共通のブロックについては説明を省略し、動作の異なる点について説明する。
先に述べたように、本第3の実施形態では4次元3成分のCLUTを例に説明する。第2の実施形態と同様に各次元の要素数g=Nであるとする。つまり、CLUTが有する要素数はN×N×N×N個であり、成分の総数はN×N×N×N×3である。
CLUT抽出部2001はその内部に不図示のバッファを有し、タグテーブル解析部1303により抜き出されたlut16Typeのタグ付き要素データを格納する。lut16Typeのタグ付き要素データはi次元の色空間をo次元の別の色空間に対応付けるものであり、3×3配列、1次元入力テーブル、多次元カラールックアップテーブル(CLUT)、1次元出力テーブルで構成される。CLUTはi次元の配列であり、各配列要素がo個の成分値を有する。lut16Typeのタグ付き要素データには付加情報として、i、oの他、CLUTの各次元の要素数gが記される。CLUT抽出部1304はlut16Typeのフォーマットに従って、i,o,gを取得し、CLUTの各要素の各成分を順番にプレーン間差分変換部1306へ出力する。先に説明した第2の実施形態では、X,Y,Zの3軸で表現される3次元のCLUTの圧縮について述べたが、本実施形態では、W,X,Y,Zの4軸で表現される4次元のCLUTの圧縮を行う。各次元の要素数g=Nである場合、W軸の値を0からN−1まで変化させて得られるX,Y,Zの3次元データN個について符号化処理を行う。
以下、個々の3次元データの処理について述べる。
本第3の実施形態におけるCLUT抽出部1304では1つの3次元データについて、走査順序を決定する目的で3次元データの要素を読み出す「前走査」と、実際に符号化を行うために読み出す「本走査」を行う。
前走査では、走査順序を変えて3回の読み出しを行う。まず、第1回目の前走査の読み出しでは、図19(a)に示すように、Z軸を固定して得られるXYプレーンをZ軸の値N−1から0まで降順に読み出す。第2回目の前走査の読み出しでは、図19(b)に示すように、Y軸を固定して得られるXZプレーンをY軸の値N−1から0まで順番に読み出す。また、第3回目の前走査の読み出しでは、図19(c)に示すように、X軸を固定して得られるYZプレーンをX軸の値N−1から0まで順番に読み出す。
なお、1つのプレーンを表わす2つの軸をA,Bと定義したとき、そのプレーン内を走査する順序は、B軸の値を0に固定にし、Aの軸の座標の値を0、1、…、N−1に変化させる。そして、A軸の座標の値がN−1に到達したとき、B軸の値を1だけ加算し、Aの軸の座標の値を0、1、…、N−1に変化させる。以下、これをB軸の値がN−1、A軸の値がN−1になるまで繰り返すものとする。すなわち、B軸の値をA軸の値よりも優先して変化させるものとする。しかしながら、この逆、すなわち、A軸の値をB軸の値よりも優先しても構わない。
さて、本走査では、前走査で行った3回の読み出しのいずれかひとつと同じ読み出し方で配列要素の読み出しを行う。走査方法の選択は後述する予測誤差絶対値平均算出部2003から出力される制御信号に基づく。予測誤差絶対値平均算出部2003から信号線2004を介して入力される制御信号が0である場合、前走査における第1回目の読み出しと同じ走査方法で読み出すことで本走査を行なう。また、制御信号が1である場合には第2回目と、また、制御信号が2である場合には第3回目と同じ走査方法で読み出すことで本走査を行なう。
先ず、前走査を更に詳しく説明する。
プレーンバッファ1305はCLUT抽出部1304から出力される3次元配列の要素を1プレーン分格納する。プレーンの概念は第2実施形態と同じであるが、第2の実施形態ではZ軸を固定して形成されるXYプレーンが格納されたのに対し、本第3の実施形態では、固定する軸を変えて3回の読み出しが行われるため、第1回目の読み出しではXYプレーン、第2回目の読み出しではXZプレーン、第3回目ではYZプレーンと格納されるプレーンが変わる。ただし、プレーンバッファ1305は3回の読み出しの開始時点で全ての値を0に初期化される。
プレーン間差分変換部1306は第2の実施形態と同様にCLUT抽出部1304から出力されるIn(x,y,z)(nは0,1,2のいずれか)について、プレーンバッファ1305から当該成分値の直前のプレーンの値を読み出す。ここで直前のプレーンの値とは、第1回目の前走査の読み出しにおいてはIn(x、y, z+1)である。第2回目の前走査の読み出しではIn(x, y+1, z)、そして、第3回目の前走査の読出しではIn(x+1,y, z)である。 そして、プレーン間差分変換部1306は、プレーン間差分値Dn(x、y、z)を生成し、出力する。具体的には以下の式を用いる。
・第1回目の前走査の読み出しの場合:
Dn(x、y、z)=Mod(In(x、y、z)−In(x、y、z+1)+(2^15),(2^16))
・第2回目の前走査の読み出しの場合:
Dn(x、y、z)=Mod(In(x、y、z)−In(x、y+1、z)+(2^15),(2^16))
・第3回目の前走査の読み出しの場合:
Dn(x、y、z)=Mod(In(x、y、z)−In(x+1、y、z)+(2^15),(2^16))
スイッチ2002はCLUT抽出部2001において前走査が行われている間は、端子Ta側に接続され、本走査を行う際には端子Tb側に接続される。
予測誤差絶対値平均算出部2003は前走査における3回の前走査の読み出しのそれぞれについて、プレーン間差分変換部1306で生成されるプレーン間差分値Dn(x,y,z)を水平方向画素数N,垂直方向画素数NxNの3成分、16ビットの画像データとみなし、JPEGの可逆符号化における予測式の選択番号m=4、すなわち、Px=Ra+Rb−Rcを使用した場合の予測誤差を求め、その絶対値平均を求める。第1回目、第2回目、第3回目の前走査の読み出しについて、それぞれ予測誤差の絶対値平均値を求めることになる。前走査における3回の読み出しそれぞれの、予測誤差の絶対値平均値を算出すると、それら3つ絶対値平均値を比較する。そして、予測誤差が最小となる前走査の読み出しが何回目であったのかを示す制御信号を信号線2004へと出力する。
ここで、3回の前走査の絶対平均値のうち、第1回目の前走査の読み出しによる絶対値平均が最小となる場合には、予測誤差絶対値平均値算出部2003は、制御信号2004に“0”を出力する。また、絶対値平均が最小が、第2回目の前走査の読出しであった場合には“1”、第3回目の前走査の読出しであった場合には“2”を制御信号2004として出力する。
ここで算出している3つの予測誤差絶対値平均について説明する。図21(a)乃至(c)における黒丸が3次元データの着目する要素であるとする。第1回目の前走査の読み出し時における予測誤差絶対平均値は、図21(a)に斜線でしめした7個の要素を参照して予測した誤差の絶対値平均を示す。第2回目の前走査の読み出し時における予測誤差絶対平均値は図21(b)の斜線で示した7個の要素を参照した予測誤差の絶対値平均である。そして、第3回目の前走査の読み出し時における予測誤差絶対平均値は図21(c)の斜線で示した7個の要素を参照した予測誤差の絶対値平均である。
本来、3次元データの各要素について、ある着目する要素とその隣接要素を頂点とする立方体を考えるならば、8通りのやり方があるが、本実施形態ではそのうちの3通りについて予測誤差の絶対値が最小となる走査方法を探索している。もちろん、言うまでもなく、前走査の読み出し回数を増やし、全ての方法について探索するようにしても構わない。
3回の前走査における読み出しが終了し、予測誤差絶対値平均算出部2003から制御信号が出力されると、制御部1350は、スイッチ2002の出力を端子Tbへと切り替える。そして、CLUT抽出部2001は本走査を開始する。先に述べた通り、制御信号2004が“0”の場合には第1回目の前走査の読み出し方と同じ走査方法を用いる。また、制御信号2004が“1”の場合には第2回目の前走査の読出し方、“2”の場合には第3回目の前走査の読み出し方に従って走査を行う。
JPEG可逆符号化部1307は、第2の実施形態と同様に、プレーン間差分変換部1306から順次入力されるN×N×N個の要素(1つの要素は3成分であり各々は16ビット)のプレーン間差分値Dn(x、y、z)を水平方向画素数N、垂直方向画素数N×Nの3成分、16ビットの画像データとしてJPEGに規定される可逆符号化(Lossless Process)により符号化し、符号化データをCLUT符号化データ格納用メモリ1308に格納する。JPEGの可逆符号化で用いる予測式についても第2の実施形態と同じく選択番号m=4、すなわち、Px=Ra+Rb−Rcを使用する(詳しくは、規格書のAnnex H Table H.1 - Predictors for lossless codingを参照されたい)。なお、復号時に符号化と同じ走査順序で復号されるよう、符号量が最小となった走査順序に関する情報を、例えば、JPEGのAPPマーカやCOMマーカなどを利用して符号化データ内部に保持するものとする。
上述の処理を4次元のCLUTの1軸を固定して得られるN個の3次元データに対して繰り返して行うことにより、N個のJPEG圧縮データが生成され、格納される。なお、本第3の実施形態では、N個の3次元データについて符号量が最小となると思われる走査方法を探索するという都合上、N個の符号化データを生成する方法について述べたが、第2の実施形態のように固定された走査方法で3次元データを読み出す場合には、必ずしもN個の符号化データとして分ける必要はなく、例えば水平方向画素数N、垂直方向画素数N×N×Nの画像データとして1つの符号化データにまとめるようにしても構わない。
なお、本第3の実施形態で生成したICCプロファイル圧縮データは、元が4次元のCLUTであるために、N個の3次元データとして符号化されていること、それぞれの3次元データに対する走査方法が可変となっているが、符号化データから読み出される走査順序に関する情報に基づいてデータを復元し、符号化時と逆の処理でN個の3次元データから4次元データへと復元すれば、第2の実施形態で説明した復号装置とほぼ同じ構成で復号できる。従って、その復号処理についての説明を省略する。
以上述べたように、本第3の実施形態では多次元データを2次元化して符号化する際の走査方法について、符号量が少なくなる方法を選択して適用する方法を用いることで、更なる圧縮性能の向上を図っている。
<他の実施形態>
本発明は上述した実施の形態に限定されるものではない。例えば、第2の実施形態ではカラールックアップテーブル(CLUT)をJPEGに規定される可逆符号化(Lossless Process)により符号化する例を示した。しかし、これ以外として、JPEG−LS Baseline方式(ITU−T T.87|ISO/IEC14495)など、その他の符号化技術を用いても構わない。また、上述の実施形態では特に言及しなかったが、JPEGの可逆符号化を用いる場合、ハフマン符号の最適化を適用しても良いし、あらかじめ定めたハフマンテーブルを用いる構成としても良い。
また、第2の実施形態で、CLUTが3次元、3成分である場合、第3の実施形態ではCLUTが4次元、3成分である場合を例に説明した。しかしながら、4次元以上の次元数であったり、4成分であっても適用可能である。例えば、例えば5次元4成分、各次元の要素数がNであるCLUTの場合、軸を2つを固定して定義されるN×N×Nの4成分の3次元データがN×N個存在するものとみなして圧縮するといった具合に適用すれば良い。
なお、第2の実施形態のように複数成分を有する多次元データを符号化対象とする場合、更なる可逆符号化の性能向上を図るには、複数成分間での可逆の色変換処理を適用して、成分間の相関を除去するなどの処理を適用しても良い。
また、同じく第2の実施形態でICCプロファイルデータをICCプロファイル圧縮データへの符号化する例について述べたが、CLUT圧縮データを必ずしも同じファイル内に収める必要はない。例えば、符号化対象のICCプロファイルデータからCLUTを抜き取ったものと、CLUT圧縮データとを別ファイルとして持つようにしても構わない。更には、複数のICCプロファイルを圧縮する場合など、これらの圧縮データを一つのファイルとして格納したり、共通のタグ付き要素データを共有するようにしても構わない。 以上の説明から明らかなように、本発明は、3次元以上のルックアップテーブルを圧縮する場合に、好適なものであることが理解できよう。
また、上記各実施形態からも明らかなように、本発明はコンピュータプログラムをもその範疇とするものである。通常、コンピュータプログラムはCD−ROM等のコンピュータ可読記憶媒体に格納されて、コンピュータのシステムにコピーもしくはインストールすることで実行可能となる。従って、このようなコンピュータ可読記憶媒体も本発明の範疇にあることも明らかである。