(57)【要約】【課題】浮動小数点数列の圧縮率を改善することのできる圧縮方法及び圧縮装置を提供する。【解決手段】本発明は、浮動小数点数列を圧縮及び伸張する方法に関する。圧縮方法は、前記浮動小数点数列の最小値と最大値を決定する工程と、前記最大値と最小値の関数として量子化ステップ値を決定する工程と、前記量子化ステップ値を用い、前記浮動小数点数列に前記最大値と最小値の間で線形量子化を適用し、前記浮動小数点数列の各数値を圧縮する工程と、前記量子化ステップ値を用いて得られた前記浮動小数点数列の各数値の圧縮値を２進数列に挿入する工程とを含む。【選択図】図４
2008512917.tif 000002
【特許請求の範囲】
【請求項１】
浮動小数点数列を圧縮する圧縮方法であって、
前記浮動小数点数列の最小値と最大値を決定する工程と、
前記最大値と最小値の関数として量子化ステップ値を決定する工程と、
前記量子化ステップ値を用い、前記浮動小数点数列に前記最大値と最小値の間で線形量子化を適用し、前記浮動小数点数列の各数値を圧縮する工程と、
前記圧縮工程で得られる各圧縮値を２進数列に挿入する工程とを含むことを特徴とする圧縮方法。
【請求項２】
前記浮動小数点数列の各数値を次式を用いて圧縮し、
2008512917.tif 000025
記号ｖは圧縮される浮動小数点数、記号ｍｉｎは浮動小数点数列の最小値、記号ｑｓｔｅｐは量子化ステップ値、記号ｑは浮動小数点数列の各数値の圧縮値、記号Ｉｎｔ［ｘ］は浮動小数点数ｘの整数部が得られる関数であることを特徴とする請求項１に記載の圧縮方法。
【請求項３】
前記量子化ステップ値が次式を用いて決定され、
2008512917.tif 000026
記号ｎｂｉｔｓは圧縮値のビット数、記号ｍａｘは浮動小数点数列の最大値であることを特徴とする請求項１に記載の圧縮方法。
【請求項４】
前記圧縮値のビット数が前記浮動小数点数列の最大精度の関数として決定されることを特徴とする請求項３に記載の圧縮方法。
【請求項５】
前記浮動小数点数列はディジタルグラフィックイメージの各点の座標であり、前記圧縮値のビット数は前記ディジタルグラフィックイメージが表示されるディスプレイの解像度の関数として決定されることを特徴とする請求項３に記載の圧縮方法。
【請求項６】
前記浮動小数点数列を新規の数列に置き換える初期工程を含み、
前記新規の数列は、前記浮動小数点数列の最初の数値と複数の相対数とを含み、
前記複数の相対数は、前記浮動小数点数列の各数値とそれ以前の数値との差分からなり、
前記複数の相対数は、前記量子化ステップ値を用いて圧縮され、
圧縮された相対数のビット数は、前記浮動小数点数列の各数値の圧縮値のビット数より小さいことを特徴とする請求項１から請求項５までの何れかに記載の圧縮方法。
【請求項７】
前記圧縮された相対数のビット数は、前記相対数の最大値を使って決定されることを特徴とする請求項６に記載の圧縮方法。
【請求項８】
前記浮動小数点数列は、複数の点の座標であり、
前記座標は、少なくとも２つの浮動小数点数を含み、
前記座標は、階数を有し、
前記浮動小数点数列の各数値を階数別に圧縮することを特徴とする請求項１から請求項７までの何れかに記載の圧縮方法。
【請求項９】
前記浮動小数点数列は、ＳＶＧドキュメントに所属していることを特徴とする請求項１から請求項８までの何れかに記載の圧縮方法。
【請求項１０】
浮動小数点数列の各数値の圧縮値の２進数列を伸張する伸張方法であって、
前記浮動小数点数列は、最大値と最小値を含み、
量子化ステップ値及び前記２進数列の少なくとも１つの圧縮値のビット数を決定する工程と、
前記ビット数を使って前記２進数列から前記浮動小数点数列の各数値の圧縮値を読み取る工程と、
前記量子化ステップ値と前記最小値又は最大値を使って前記浮動小数点数列の各数値の圧縮値を伸張する工程を含むことを特徴とする伸張方法。
【請求項１１】
前記浮動小数点数列の各数値の圧縮値を伸張する工程は、読み取った圧縮値に次式を適用し、
2008512917.tif 000027
記号ｖは伸張された浮動小数点数、記号ｍｉｎは浮動小数点数列の最小値、記号ｑｓｔｅｐは量子化ステップ値であることを特徴とする請求項１０に記載の伸張方法。
【請求項１２】
更に、前記量子化ステップ値を次式で決定する工程を含み、
2008512917.tif 000028
記号ｎｂｉｔは圧縮値のビット数、記号ｍａｘは浮動小数点数列の最大値であることを特徴とする請求項１０又は請求項１１に記載の伸張方法。
【請求項１３】
前記ビット数、前記最小値及び前記最大値が前記２進数列のヘッダーの識別子から決定されることを特徴とする請求項１２に記載の伸張方法。
【請求項１４】
前記圧縮値のビット数と前記浮動小数点数列の最小値及び最大値は、前記２進数列のヘッダーで規定されることを特徴とする請求項１２に記載の伸張方法。
【請求項１５】
前記２進数列の最初の圧縮値のビット数よりも、それ以外の圧縮値のビット数の方が小さく、
前記２進数列の各圧縮値を伸張し、伸張した浮動小数点数を取得し、
今回伸張した浮動小数点数を前回伸張した浮動小数点数に加算し、
１つめの浮動小数点数は、前記２進数列の最初の圧縮値から得られることを特徴とする請求項１０から請求項１４までの何れかに記載の伸張方法。
【請求項１６】
前記圧縮された相対数のビット数は、前記相対数の最大値を使って決定されることを特徴とする請求項１５に記載の伸張方法。
【請求項１７】
前記浮動小数点数列は、複数の点の座標であり、
前記座標は、少なくとも２つの浮動小数点数を含み、
前記座標は、階数を有し、
前記浮動小数点数列の各数値を階数別に圧縮することを特徴とする請求項１０から請求項１６までの何れかに記載の伸張方法。
【請求項１８】
前記浮動小数点数列は、ＳＶＧドキュメントに所属していることを特徴とする請求項１０から請求項１７までの何れかに記載の伸張方法。
【請求項１９】
浮動小数点数列を圧縮する圧縮装置であって、
前記浮動小数点数列の最小値と最大値を決定する手段と、
前記最大値と最小値から量子化ステップ値を決定する手段と、
前記量子化ステップ値を用い、前記浮動小数点数列に前記最大値と最小値の間で線形量子化を適用し、前記浮動小数点数列を数値毎に圧縮する手段と、
前記量子化ステップ値を用いて得られた前記浮動小数点数列の各数値の圧縮値を２進数列に挿入する手段とを備えることを特徴とする圧縮装置。
【請求項２０】
前記浮動小数点数列の各数値を次式に基づいて圧縮し、
2008512917.tif 000029
記号ｖは圧縮される浮動小数点数、記号ｍｉｎは浮動小数点数列の最小値、記号ｑｓｔｅｐは量子化ステップ値、記号ｑは浮動小数点数列の各数値の圧縮値、記号Ｉｎｔ［ｘ］は浮動小数点数ｘの整数部が得られる関数であることを特徴とする請求項１９に記載の圧縮装置。
【請求項２１】
前記量子化ステップ値が次式に基づいて決定され、
2008512917.tif 000030
記号ｎｂｉｔｓは圧縮値のビット数、記号ｍａｘは浮動小数点数列の最大値であることを特徴とする請求項２０に記載の圧縮装置。
【請求項２２】
前記圧縮値のビット数が前記浮動小数点数列の最大精度の関数として決定されることを特徴とする請求項２１に記載の圧縮装置。
【請求項２３】
前記浮動小数点数列はディジタルグラフィックイメージの各点の座標であり、前記圧縮値のビット数は前記ディジタルグラフィックイメージが表示されるディスプレイの解像度の関数として決定されることを特徴とする請求項２１に記載の圧縮装置。
【請求項２４】
前記浮動小数点数列を新規の数列に置き換える手段を備え、
前記新規の数列は、複数の相対数からなる第１の浮動小数点数列を含み、
前記相対数は、元の数列の現在の浮動小数点数とそれ以前の浮動小数点数との差分からなり、
前記圧縮手段は、前記量子化ステップ値を用いて前記相対数を圧縮し、
圧縮された相対数のビット数は、前記第１の浮動小数点数列の各数値の圧縮値のビット数より小さいことを特徴とする請求項１９から請求項２３までの何れかに記載の圧縮装置。
【請求項２５】
前記圧縮された相対数のビット数は、前記相対数の最大値を使って決定されることを特徴とする請求項２４に記載の圧縮装置。
【請求項２６】
前記浮動小数点数列は、複数の点の座標であり、
前記座標は、少なくとも２つの浮動小数点数を備え、
前記座標は、階数を有し、
前記浮動小数点数列の各数値を階数別に圧縮することを特徴とする請求項１９から請求項２５までの何れかに記載の圧縮装置。
【請求項２７】
前記浮動小数点数列は、ＳＶＧドキュメントに所属していることを特徴とする請求項１９から請求項２６までの何れかに記載の圧縮装置。
【請求項２８】
浮動小数点数列の圧縮値が示された２進数列を伸張する伸張装置であって、
前記浮動小数点数列は、最大値と最小値を備え、
量子化ステップ値及び前記２進数列の少なくとも１つの圧縮値のビット数を決定する手段と、
前記ビット数を使って前記２進数列から前記浮動小数点数列の各数値の圧縮値を読み取る手段と、
前記量子化ステップ値と前記最小値又は最大値を使って前記浮動小数点数列の各数値の圧縮値を伸張する手段とを備えることを特徴とする伸張装置。
【請求項２９】
前記浮動小数点数列の各数値の圧縮値を伸張する手段は、読み取った圧縮値に次式を適用し、
2008512917.tif 000031
記号ｖは伸張された浮動小数点数、記号ｍｉｎは浮動小数点数列の最小値、記号ｑｓｔｅｐは量子化ステップ値であることを特徴とする請求項２８に記載の伸張装置。
【請求項３０】
更に、前記量子化ステップ値を次式で決定する手段を備え、
2008512917.tif 000032
記号ｎｂｉｔは圧縮値のビット数、記号ｍａｘは浮動小数点数列の最大値であることを特徴とする請求項２８又は請求項２９に記載の伸張装置。
【請求項３１】
前記ビット数、前記最小値及び前記最大値が前記２進数列のヘッダーの識別子から決定する手段を備えることを特徴とする請求項３０に記載の伸張装置。
【請求項３２】
前記圧縮値のビット数と前記浮動小数点数列の最小値及び最大値は、前記２進数列のヘッダーで規定されることを特徴とする請求項３０に記載の伸張装置。
【請求項３３】
前記２進数列の最初の圧縮値のビット数よりも、それ以外の圧縮値のビット数の方が小さく、
前記伸張手段は、前記２進数列の各圧縮値を伸張し、伸張した浮動小数点数を取得し、
今回伸張した浮動小数点数を前回伸張した浮動小数点数に加算することによって各浮動小数点数を決定し、
１つめの浮動小数点数は、前記２進数列の最初の圧縮値からなることを特徴とする請求項２８から請求項３２までの何れかに記載の伸張装置。
【請求項３４】
前記圧縮された相対数のビット数は、前記相対数を読み取る手段を備えることを特徴とする請求項３２に記載の伸張装置。
【請求項３５】
前記浮動小数点数列は、複数の点の座標であり、
前記座標は、少なくとも２つの浮動小数点数を備え、
前記座標は、階数を有し、
前記浮動小数点数列の各数値を階数別に伸張することを特徴とする請求項２８から請求項３４までの何れかに記載の伸張装置。
【請求項３６】
前記浮動小数点数列は、ＳＶＧドキュメントに所属していることを特徴とする請求項２８から請求項３５までの何れかに記載の伸張装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを転送し、格納し、取り出し、表示するコンピュータシステムに関し、詳しくは、浮動小数点数列を圧縮及び伸張する方法及びシステムに関する。
【背景技術】
【０００２】
多くのアプリケーションソフトは、特に、芸術作品、技術図面、概略図等のディジタルグラフィックドキュメントを生成及び表示するとき、膨大な数の数値データを転送し、格納し、読み出すことを要求される。なぜなら、ドキュメントが、点、直線、曲線を描写するためのグラフィックデータを含んでいるからである。このようなグラフィックドキュメントでは、２次元ベクトルやベクトル/ラスター混合で記述するＳＶＧ（Scalable Vector Graphics）等の言語を用いてグラフィック対象が記述される。
【０００３】
ＳＶＧは、拡張可能なマークアップ言語ＸＭＬ（eXtensible Markup Language）に基いたマークアップ言語であり、ベクトルグラフィックシェイプ、イメージ、テキストの３タイプのグラフィック対象が記述可能である。ベクトルグラフィックシェイプは、直線と曲線で定義される。各直線及び曲線は、複数のセグメントの列で定義され、始点と終点の座標と始点から終点までの曲線の形状を定義する変換コマンドとを含んでいる。複雑な形状は、その座標とコマンドの長いリストのＳＶＧ言語で表される。ＳＶＧ言語では、全ての座標がIEEE 754フォーマットに基づいて３２ビットで符号化された浮動小数点数である。
【０００４】
ＳＶＧは、特に、携帯電話でグラフィックの転送及び表示に広く使用される傾向がある。しかしながら、携帯電話で可能なデータ転送レートは、一般に、減じられ、携帯電話の画面サイズも小さい。
【０００５】
ディジタルドキュメントを転送又は格納するのに必要なデータ転送レート又は容量を削減するため、ディジタルドキュメントが圧縮されている。ISO/IEC 15938-1やMPEG-7（Moving Picture Expert Group）は、ＸＭＬドキュメントの符号化（圧縮）方法及び復号化（伸張）方法を提案している。この規格は、特に、マルチメディア・メタデータのような高度に構造化されたデータ処理に適応される。しかしながら、数列は、ＳＶＧドキュメントの重要な部分を構成しており、浮動賞数点数列の圧縮が必要である。
【０００６】
ZLIB(ZIP)などの一般的な圧縮アルゴリズムは、浮動小数点数列に適用しても期待できるほど高い圧縮率は得られない。
【０００７】
浮動小数点数の圧縮方法が、特許文献US6,253,222及びUS6,396,420に開示されている。特許文献US6,253,222に開示された方法は、圧縮される浮動小数点数から一定の数値を差し引き、圧縮している。特許文献US6,396,420に開示された方法は、圧縮される２つの数値の共通の桁を特定し、共通の桁の数値と被共通の桁の数値を別々に圧縮している。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
本発明は、従来の問題を解決するためになされたもので、浮動小数点数列の圧縮率を改善することのできる圧縮方法を提供することを目的とする。また、低解像ディスプレイにＳＶＧドキュメントなどのベクトルグラフィックドキュメントを表示する圧縮方法及び伸張方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明の圧縮方法は、浮動小数点数列を圧縮する圧縮方法であって、
前記浮動小数点数列の最小値と最大値を決定する工程と、
前記最大値と最小値の関数として量子化ステップ値を決定する工程と、
前記量子化ステップ値を用い、前記浮動小数点数列に前記最大値と最小値の間で線形量子化を適用し、前記浮動小数点数列の各数値を圧縮する工程と、
前記圧縮工程で得られる各圧縮値を２進数列に挿入する工程とを含む。
【００１０】
本発明の圧縮方法は、前記浮動小数点数列の各数値を次式を用いて圧縮し、
2008512917.tif 000003
記号ｖは圧縮される浮動小数点数、記号ｍｉｎは浮動小数点数列の最小値、記号ｑｓｔｅｐは量子化ステップ値、記号ｑは浮動小数点数列の各数値の圧縮値、記号Ｉｎｔ［ｘ］は浮動小数点数ｘの整数部が得られる関数である。
【００１１】
本発明の圧縮方法は、前記量子化ステップ値が次式を用いて決定され、
2008512917.tif 000004
記号ｎｂｉｔｓは圧縮値のビット数、記号ｍａｘは浮動小数点数列の最大値である。
【００１２】
本発明の圧縮方法は、前記圧縮値のビット数が前記浮動小数点数列の最大精度の関数として決定される。
【００１３】
本発明の圧縮方法は、前記浮動小数点数列はディジタルグラフィックイメージの各点の座標であり、前記圧縮値のビット数は前記ディジタルグラフィックイメージが表示されるディスプレイの解像度の関数として決定される。
【００１４】
本発明の圧縮方法は、前記浮動小数点数列を新規の数列に置き換える初期工程を含み、
前記新規の数列は、前記浮動小数点数列の最初の数値と複数の相対数とを含み、
前記複数の相対数は、前記浮動小数点数列の各数値とそれ以前の数値との差分からなり、
前記複数の相対数は、前記量子化ステップ値を用いて圧縮され、
圧縮された相対数のビット数は、前記浮動小数点数列の各数値の圧縮値のビット数より小さい。
【００１５】
本発明の圧縮方法は、前記圧縮された相対数のビット数は、前記相対数の最大値を使って決定される。
【００１６】
本発明の圧縮方法は、前記浮動小数点数列は、複数の点の座標であり、
前記座標は、少なくとも２つの浮動小数点数を含み、
前記座標は、階数を有し、
前記浮動小数点数列の各数値を階数別に圧縮する。
【００１７】
本発明の圧縮方法は、前記浮動小数点数列は、ＳＶＧドキュメントに所属している。
【００１８】
本発明の伸張方法は、浮動小数点数列の各数値の圧縮値の２進数列を伸張する伸張方法であって、
前記浮動小数点数列は、最大値と最小値を含み、
量子化ステップ値及び前記２進数列の少なくとも１つの圧縮値のビット数を決定する工程と、
前記ビット数を使って前記２進数列から前記浮動小数点数列の各数値の圧縮値を読み取る工程と、
前記量子化ステップ値と前記最小値又は最大値を使って前記浮動小数点数列の各数値の圧縮値を伸張する工程を含む。
【００１９】
本発明の伸張方法は、前記浮動小数点数列の各数値の圧縮値を伸張する工程は、読み取った圧縮値に次式を適用し、
2008512917.tif 000005
記号ｖは伸張された浮動小数点数、記号ｍｉｎは浮動小数点数列の最小値、記号ｑｓｔｅｐは量子化ステップ値である。
【００２０】
本発明の伸張方法は、更に、前記量子化ステップ値を次式で決定する工程を含み、
2008512917.tif 000006
記号ｎｂｉｔは圧縮値のビット数、記号ｍａｘは浮動小数点数列の最大値である。
【００２１】
本発明の伸張方法は、前記ビット数、前記最小値及び前記最大値が前記２進数列のヘッダーの識別子から決定される。
【００２２】
本発明の伸張方法は、前記圧縮値のビット数と前記浮動小数点数列の最小値及び最大値は、前記２進数列のヘッダーで規定される。
【００２３】
本発明の伸張方法は、前記２進数列の最初の圧縮値のビット数よりも、それ以外の圧縮値のビット数の方が小さく、
前記２進数列の各圧縮値を伸張し、伸張した浮動小数点数を取得し、
今回伸張した浮動小数点数を前回伸張した浮動小数点数に加算し、
１つめの浮動小数点数は、前記２進数列の最初の圧縮値から得られる。
【００２４】
本発明の伸張方法は、前記圧縮された相対数のビット数は、前記相対数の最大値を使って決定される。
【００２５】
本発明の伸張方法は、前記浮動小数点数列は、複数の点の座標であり、
前記座標は、少なくとも２つの浮動小数点数を含み、
前記座標は、階数を有し、
前記浮動小数点数列の各数値を階数別に圧縮する。
【００２６】
本発明の圧縮装置は、浮動小数点数列を圧縮する圧縮装置であって、
前記浮動小数点数列の最小値と最大値を決定する手段と、
前記最大値と最小値から量子化ステップ値を決定する手段と、
前記量子化ステップ値を用い、前記浮動小数点数列に前記最大値と最小値の間で線形量子化を適用し、前記浮動小数点数列を数値毎に圧縮する手段と、
前記量子化ステップ値を用いて得られた前記浮動小数点数列の各数値の圧縮値を２進数列に挿入する手段とを備える。
【００２７】
本発明の圧縮装置は、前記浮動小数点数列の各数値を次式に基づいて圧縮し、
2008512917.tif 000007
記号ｖは圧縮される浮動小数点数、記号ｍｉｎは浮動小数点数列の最小値、記号ｑｓｔｅｐは量子化ステップ値、記号ｑは浮動小数点数列の各数値の圧縮値、記号Ｉｎｔ［ｘ］は浮動小数点数ｘの整数部が得られる関数である。
【００２８】
本発明の圧縮装置は、前記浮動小数点数列を新規の数列に置き換える手段を備え、
前記新規の数列は、複数の相対数からなる第１の浮動小数点数列を含み、
前記相対数は、元の数列の現在の浮動小数点数とそれ以前の浮動小数点数との差分からなり、
前記圧縮手段は、前記量子化ステップ値を用いて前記相対数を圧縮し、
圧縮された相対数のビット数は、前記第１の浮動小数点数列の各数値の圧縮値のビット数より小さい。
【００２９】
本発明の伸張装置は、浮動小数点数列の圧縮値が示された２進数列を伸張する伸張装置であって、
前記浮動小数点数列は、最大値と最小値を含み、
量子化ステップ値及び前記２進数列の少なくとも１つの圧縮値のビット数を決定する手段と、
前記ビット数を使って前記２進数列から前記浮動小数点数列の各数値の圧縮値を読み取る手段と、
前記量子化ステップ値と前記最小値又は最大値を使って前記浮動小数点数列の各数値の圧縮値を伸張する手段とを備える。
【００３０】
本発明の伸張装置は、前記浮動小数点数列の各数値の圧縮値を伸張する手段は、読み取った圧縮値に次式を適用し、
2008512917.tif 000008
記号ｖは伸張された浮動小数点数、記号ｍｉｎは浮動小数点数列の最小値、記号ｑｓｔｅｐは量子化ステップ値である。
【００３１】
本発明の伸張装置は、更に、前記量子化ステップ値を次式で決定する手段を備え、
2008512917.tif 000009
記号ｎｂｉｔは圧縮値のビット数、記号ｍａｘは浮動小数点数列の最大値である。
【００３２】
本発明の伸張装置は、前記ビット数、前記最小値及び前記最大値が前記２進数列のヘッダーの識別子から決定する手段を備える。
【００３３】
本発明の伸張装置は、前記２進数列の最初の圧縮値のビット数よりも、それ以外の圧縮値のビット数の方が小さく、
前記伸張手段は、前記２進数列の各圧縮値を伸張し、伸張した浮動小数点数を取得し、
今回伸張した浮動小数点数を前回伸張した浮動小数点数に加算することによって各浮動小数点数を決定し、
１つめの浮動小数点数は、前記２進数列の最初の圧縮値からなる。
【００３４】
本発明の伸張装置は、前記２進数列のヘッダーから相対ビット数を読み取る手段を備える。
【発明を実施するための最良の形態】
【００３５】
以下、本発明の特徴を詳細に説明する。図１は、本発明の圧縮装置ＣＭＰを示している。この圧縮装置は、ＳＶＧ言語のディジタルグラフィックドキュメントなどの浮動小数点数列を含むドキュメントを処理するようになっている。圧縮装置ＣＭＰは、ドキュメントＤＯＣ１から圧縮されたドキュメントＣＤＯＣを生成する。圧縮されたドキュメントＣＤＯＣはドキュメントＤＯＣ１よりもサイズが小さい。
【００３６】
図２は、圧縮装置ＣＰＭで生成された圧縮されたドキュメントＣＤＯＣを処理し、伸張されたドキュメントを出力する伸張装置ＤＥＣを示している。圧縮されたドキュメントＣＤＯＣ１から得られた伸張されたドキュメントＤＯＣ２は、圧縮されたドキュメントＣＤＯＣが生成される元のドキュメントＤＯＣ１と必ずしも同等でない。
【００３７】
図３は、圧縮されるドキュメントの一例を示している。このドキュメントは、少なくとも１つの浮動小数点数列ＦＰＳを含んでいる。この浮動小数点数列ＦＰＳは、ヘッダーＳＨＤと複数の浮動小数点数を含んでいる。複数の浮動小数点数は、グラフィックイメージの各点の座標（Ｘ１，Ｙ２）、（Ｘ２，Ｙ２）、・・・（Ｘｎ，Ｙｎ）を表している。ＳＶＧ言語では、各点の座標が３２ビット浮動小数点フォーマットで符号化される。
【００３８】
図４は、本発明の圧縮方法を示している。この圧縮方法は、以下のステップを含んでいる。
Ｓ１：圧縮される浮動小数点数列を分析する。
Ｓ２：量子化ステップ値を決定する。
Ｓ３：圧縮されたドキュメントに圧縮パラメータＲＬを挿入する。
Ｓ４：浮動小数点数列の最初の数値を読み取る。
Ｓ５：最初の数値を圧縮する。
Ｓ６：圧縮されたドキュメントに最初の数値の圧縮値を挿入する。
Ｓ７：浮動小数点数列の次の数値を読み取る。
Ｓ８：圧縮パラメータＲＬを調べる。
Ｓ９：浮動小数点数列の次の数値を圧縮する。
Ｓ１０：浮動小数点数列の次の数値と前回の数値との差分を圧縮する。
Ｓ１１：圧縮されたドキュメントに圧縮値を挿入する。
Ｓ１２：浮動小数点数列の最後の数値まで読み取られたか否かを判定する。
Ｓ１３：圧縮されたドキュメントにエンドコードを挿入する。
【００３９】
ステップＳ１において、浮動小数点数列ＦＰＳを分析し、浮動小数点数列ＦＰＳの圧縮パラメータを決定する。最小値と最大値及び有効ビット数又は浮動小数点数列の精度を決定することがこの分析の目的である。
【００４０】
本実施の形態では、浮動小数点数列ＦＰＳ又はドキュメントＤＯＣ１のヘッダーのパラメータから最小値と最大値が決定される。このパラメータには、例えば、浮動小数点数の最大値及び最小値と関連付けられた構成単位の定義又は浮動小数点数列の種類の情報が含まれている。
【００４１】
本発明の他の実施例では、最小値と最大値が浮動小数点数列ＦＰＳから決定される。
【００４２】
浮動小数点数の精度が低下しないように浮動小数点数の有効ビット数が選択されるので、精度を低下させないで圧縮が実行される。
【００４３】
代わりの実施例では、ドキュメントに基づいて浮動小数点数の有効ビット数が決定される。例えば、ドキュメントが携帯電話などの低解像ディスプレイに表示されるベクトルグラフィックイメージを含んでいる場合、解像度に応じた値が浮動小数点数の有効ビット数として選択される。例えば、解像度が３２０×２４０のディスプレイの場合、一方の次元の浮動小数点数の有効ビット数として９ビットが選択され、他方の次元の浮動小数点数の有効ビット数として８ビットが選択される。この場合の圧縮には精度が低下するので付加逆である。しかしながら、浮動小数点数がベクトルグラフィックイメージの各点の座標を表している場合、イメージの各点は、画面上での各点の座標が少し異なるが、イメージの鮮明さは低下しない。
【００４４】
また、ステップＳ１では、浮動小数点数列ＦＰＳの隣接の数値間の差分の最大値が計算される。差分の最大値は、圧縮比という意味において圧縮が効率的であるか否かが示された圧縮パラメータＲＬを決定するのに使用される。例えば、浮動小数点数が２次元イメージの各点の座標であり、各点が隣接の点に近い場合、より効率的な圧縮となる。
【００４５】
ステップＳ２では、量子化ステップ値ｑｓｔｅｐが次式で決定される。
2008512917.tif 000010
記号ｎｂｉｔは浮動小数点数列ＦＰＳの有効ビット数、記号ｍａｘ及びｍｉｎは決定された最大値及び最小値である。
【００４６】
浮動小数点数がイメージの各点の座標である場合、量子化ステップ値が階数毎に決定される。例えば、Ｘ成分及びＹ成分に対して決定される。
【００４７】
ステップＳ３では、圧縮パラメータＲＬが圧縮されたドキュメントＣＤＯＣに書き込まれる。
【００４８】
ステップＳ４では、最初の浮動小数点数Ｘ１が浮動小数点数列ＦＰＳから読み取られ、ステップＳ５では、最初の浮動小数点数Ｘ１に最小値と最大値の間に線形量子化を適応し、量子化ステップ値ｑｓｔｅｐを用い、最初の浮動小数点数Ｘ１が圧縮される。圧縮は、圧縮される数値に式（２）を適用することである。
2008512917.tif 000011
記号ｖは圧縮される浮動小数点数、記号ｑは浮動小数点数ｖの圧縮値、記号Ｉｎｔ［ｘ］は整数部が得られる関数である。
【００４９】
ステップＳ６では、圧縮されたドキュメントＣＤＯＣに圧縮値が書き込まれる。浮動小数点数が２次元の各点の座標を表している場合、ステップＳ４乃至Ｓ６で浮動小数点数列ＦＰＳの最初の２つの数値Ｘ１，Ｙ２が読み取られ、圧縮され、圧縮されたドキュメントに挿入される。
【００５０】
ステップＳ７では、浮動小数点数列ＦＰＳから次の浮動小数点数が読み取られる。圧縮パラメータＲＬに基づいて相対的方法で圧縮を実行する場合には、ステップＳ１０に進み、それ以外の場合には、ステップＳ９に進む。ステップＳ９では、ステップＳ７で読み取られた浮動小数点数が式（２）を用いて圧縮される。ステップＳ１０では、ステップＳ７で読み取られた浮動小数点数と前回の浮動小数点数（すなわち、浮動小数点数列ＦＰＳの２番目の数値が処理されている場合には、最初の数値Ｘ１又はＹ１）との差分の圧縮に式（２）が適用される。ステップＳ１０で圧縮された浮動小数点数の有効ビット数は、ステップＳ９で圧縮された浮動小数点数の有効ビット数より小さい。相対的圧縮でのビット数は、浮動小数点数列の分析（ステップＳ１）に基づいて浮動小数点数列の隣接する２つの数値の差分の関数として決定されるか、又は予め定義されているかの何れかである。
【００５１】
ステップＳ１１では、圧縮値が圧縮されたドキュメントＣＤＯＣに挿入される。浮動小数点数が２次元イメージの各点の座標を表している場合には、ステップＳ７乃至Ｓ１１で浮動小数点数列ＦＰＳの最初の２つの数値Ｘ１，Ｙ２が読み取られ、圧縮され、圧縮されたドキュメントに挿入される。
【００５２】
ステップＳ１２では、浮動小数点数列の最後の数値まで終了したか否かを決定している。浮動小数点数列の最後の数値まで終了した場合には、終了コードＥＳＣが圧縮されたドキュメントに挿入され（ステップＳ１３）、それ以外の場合にはステップＳ７乃至Ｓ１２が繰り返される。
【００５３】
図５は、ドキュメントＤＯＣ１の圧縮で得られる圧縮されたドキュメントＣＤＯＣの構造を示している。圧縮されたドキュメントは、浮動小数点数列ＦＰＳの圧縮で得られる圧縮された浮動小数点数列ＣＳを含んでいる。圧縮された浮動小数点数列ＣＳは、ヘッダーＣＳＨＤと浮動小数点数列の各数値Ｘ２，Ｙ２…Ｘｎ，Ｙｎの圧縮値ＣＸ２，ＣＹ２…ＣＸｎ，ＣＹｎを有する本体ＣＳＢＹとを含んでいる。
【００５４】
ヘッダーＣＳＨＤは圧縮パラメータを含み、その圧縮パラメータＲＬが下記の場合には、相対的圧縮を示している。
パラメータＦＰは、浮動小数点数列の最初の数値が絶対的な方法で圧縮されたことを示している。
パラメータＦＰは、圧縮された最初の数値ＣＸ１を示している。浮動小数点数列ＦＰＳの各数値が各点の座標である場合には、圧縮された最初の数値ＣＸ１，ＣＹ１を示している。
圧縮パラメータＮＤは、相対的圧縮でのビット数が初期値と違うか否かを示している。
圧縮パラメータＮＤは、初期値と違うビット数、すなわち、相対的圧縮でのビット数ＤＹＮを示している。
【００５５】
図６は、圧縮された浮動小数点数列ＦＰＳのヘッダーを表している。圧縮された浮動小数点数列ＦＰＳは、各点の座標と各点を結ぶ線の形状を定義するコマンドを含んでいる。この場合、ヘッダーは、図５に示されたヘッダーに加え、下記のパラメータ及びコマンドを含んでいる。
パラメータＥＣは、浮動小数点数列が明確なコマンドを含むことを示している。
パラメータＵＰは、コマンドが大文字で表現されている。
コマンドＣＭＤ。
【００５６】
図７は、本発明の伸張方法を示している。この伸張方法は以下の工程を含んでいる。
Ｓ２１：量子化ステップ値を決定する。
Ｓ２２：圧縮パラメータＲＬを読み取る。
Ｓ２３：圧縮された浮動小数点数列ＣＳの最初の圧縮値ＣＸ１を読み取る。
Ｓ２４：最初の圧縮値を伸張する。
Ｓ２５：伸張されたドキュメントに伸張値を挿入する。
Ｓ２６：圧縮された浮動小数点数列の次の圧縮値を読み取る。
Ｓ２７：次の圧縮値が圧縮値の最後を示すエスケープコードか否かを調べる。
Ｓ２８：次の圧縮値を伸張する。
Ｓ２９：圧縮パラメータを調べる。
Ｓ３０：次の伸張値と前回の伸張値の和を計算する。
Ｓ３１：圧縮値を圧縮されたドキュメントに挿入する。
【００５７】
ステップＳ２１では、量子化ステップ値ｑｓｔｅｐが式（１）を用いて算出される。式（１）のビット数ｎｂｉｔ、最大値ｍａｘ、最小値ｍｉｎは、圧縮された浮動小数点数列のヘッダーＣＳＨＤの識別子から得られる。
【００５８】
ステップＳ２２では、圧縮パラメータＲＬが圧縮された浮動小数点数列のヘッダーＣＳＨＤから読み取られる。
【００５９】
ステップＳ２３では、圧縮された浮動小数点数列から浮動小数点数の最初の数値の圧縮値ＣＸ１が読み取られる。ステップＳ２４では、ステップＳ５の圧縮演算の逆の演算が適用され、最小値ｍｉｎ及び最大値ｍａｘと量子化ステップ値ｑｓｔｅｐを用い、圧縮値ＣＸ１が伸張される。伸張は、圧縮値に、例えば、式（３）を適用することである。
2008512917.tif 000012
【００６０】
伸張値は、伸張されたドキュメントＤＯＣ２の伸張された浮動小数点数列に挿入される。圧縮された浮動小数点数列の各値が各点の座標を表している場合には、ステップＳ２３乃至Ｓ２５が繰り返される。
【００６１】
圧縮された浮動小数点数列ＣＳから次の圧縮値が読み取られる。次の圧縮値が浮動小数点数列の最後を示すエスケープコードである場合、圧縮された浮動小数点数列の伸張を完了し（ステップＳ２７）。エスケープコードでない場合、ステップＳ２８に進む。ステップＳ２８では、ステップＳ２４と同じ計算が適用され、ステップＳ２６で読み取られた次の圧縮値に量子化ステップ値ｑｓｔｅｐを掛け、次の圧縮値が伸張される。ステップＳ２９では、圧縮パラメータＲＬから浮動小数点数列が相対的方法で圧縮されたか否かが判定される。浮動小数点数列が相対的方法で圧縮された場合、式（４）を用いて次の圧縮値の伸張が更に続く。伸張されたドキュメントＤＯＣ２に挿入された伸張値は、ステップＳ２８で得られた伸張値と前回の伸張で得られた伸張値との和に等しい（ステップＳ３０）。
2008512917.tif 000013
ここで、記号ｖ（ｎ）は次の伸張値、記号ｖ（ｎ−１）は１つ前の伸張値、記号ｑは圧縮された浮動小数点数列から読み取った次の圧縮値である。
【００６２】
圧縮された浮動小数点数列の各数値に対して伸張プロセスのステップＳ２５乃至Ｓ３０が繰り返される。圧縮された浮動小数点数列の各数値が各点の座標を表している場合、座標毎にステップＳ２５，Ｓ２６，Ｓ２８，Ｓ３０が繰り返される。
【００６３】
伸張プロセスは、次のような構文で定義される。この構文には、ビットストリーム又は圧縮された浮動小数点数列から読み取られたデータ項目の夫々はボールド体で現れ、その名称とビット長で記述される。また、データのタイプと転送順序の簡略記号で記述される。ビットストリームから伸張されるデータ項目で始動される動作は、各項目の値とそれ以前に読み取られ伸張されたデータ項目に依存している。
2008512917.tif 000014
この条件が真の場合、ビットストリームにデータの項目のグループが発生し、この条件が偽になるまで続ける。この構文は、変数又は数式が真の条件に一致している状態と、変数又は数式が偽の条件に一致している状態に従うCコードの慣例を使用する。
【００６４】
次の構造では、条件が真の場合、ビットストリームのデータ項目の第１グループが発生する。一方、条件が偽の場合、ビットストリームのデータ項目の第２グループが発生する。
2008512917.tif 000015
【００６５】
次の構造では、データ項目のグループが（ｎ−ｍ）回発生する。条件構造は、データ項目の範囲内で、ループ制御変数ｉの値に依存し、最初の発生でｍに設定され、２回目の発生で１だけ増やされ、そして更に続けられる。
2008512917.tif 000016
【００６６】
関数形式の構文は、ある構文要素からの値又はパラメータを他の構文要素に引き渡すのに使用される。この構文要素は、以下に例示するように、Ｃ言語等の構文を用いて関数として定義される。
2008512917.tif 000017
【００６７】
この構文テーブルは、datatypeというパラメータparameter_nameを受け取る関数を説明している。パラメータparameter_nameは、この構文内で使用され、他の関数、例えば、上述の関数OtherFunctionに渡すことができる。
【００６８】
次の構文テーブルは、図７に示された伸張プロセスの別の表現である。
2008512917.tif 000018
【００６９】
構文テーブル２は、圧縮された浮動小数点数列の伸張関数の構文テーブルである。この関数は、パラメータcodecを受け取る。このパラメータcodecは、圧縮された浮動小数点数列の圧縮値のビット数、最小値、最大値を定義するnbits, min, maxを含む複雑なデータである。この関数は、他の関数decodeListOfCoodinatesHeaderを呼び出し、次に、ブール変数escapeを初期化し、下記の命令を実行するループに入る。最初の命令で、圧縮された浮動小数点数列を読み出し、伸張する関数decodeNumberを呼び出す。この関数は、２つのパラメータcodecと整数を受け取り、変数escapeとして記憶されるブール値を返す。次の命令では、圧縮された浮動小数点数列の各数値が２次元上の点の座標なのか否かが調べられる。次元の数は、変数codecのnbDimに格納されている。次の命令は、圧縮された浮動小数点数列の各数値が点の座標であるとき、圧縮された浮動小数点数列の各数値が２次元上の点の座標であるとき、関数decodeNumberを呼び出す。
【００７０】
構文テーブル３は、関数decodeListOfCoodinatesHeaderの構文である。
2008512917.tif 000019
【００７１】
関数decodeListOfCoodinatesHeaderの最初の命令は、ビット長が１ビットで変数codecのフィールドrelativeに格納された圧縮パラメータＲＬを読み取ることである。この圧縮パラメータＲＬが１のとき、変数startPointが１に設定される。フィールドcontextualが真に設定されるとき、１ビットで符号化された圧縮パラメータＳＰが圧縮された浮動小数点数列から読み取られ、変数startPointとして格納される。変数startPointが１のとき、圧縮された浮動小数点数列の最初の数値を読み取る関数decodeが呼び出される。この関数decodeは、変数codecのフィールドにあり、量子化ステップ値qstepを含んでいる入力パラメータcodec.quantizerUsedとして受け取る。関数decodeは、圧縮された浮動小数点数列の次の数値を読み取り、伸張し、変数codecのフィールドv(1)に格納される伸張値を返す。各伸張値が、平面（次元の数codec.nbDim = 2）上の点の座標を表しているとき、関数codecは、再度、呼び出され、圧縮された浮動小数点数列のY座標の最初の数値が読み取られ、伸張される。伸張された値は、変数codecのフィールドv(2)に格納される。次いで、変数newDynamicが１に初期化される。次の命令は、変数codecのフィールドcontextualの値を調べることである。フィールドcontextualが真であるとき、１ビットで符号化された圧縮パラメータＮＤは、圧縮された浮動小数点数列ＣＳから読み取られ、変数newDynamicに格納される。次いで、変数newDynamicの値が１と比べられ、１に等しいとき、圧縮パラメータＤＹＮの５ビットが読み取られ、変数codecのフィールドdynamicに格納される。関数decodeListOfCoodinatesHeaderの最後の命令は、その関数の出力である変数startPointの値を特定することである。
【００７２】
表４は、関数decodeNumberの構文である。
2008512917.tif 000020
【００７３】
関数decodeNumberは、複素変数codecとindexという変数を入力パラメータとして受け取る。この関数は、最初に、フィールドcodec.relativeに格納された圧縮パラメータを分析する。圧縮パラメータが、相対的方法で圧縮が実行されていないことを示している場合、数列ＣＳの次の値を読み、伸張する関数decodeが呼び出される。伸張値が変数numに格納され、その変数numが変数codecのフィールドcodec.quantizerUser.escapeCodeに格納されたエスケープ符号と比較される。このエスケープ符号は、圧縮された浮動小数点数列の最後を示す符号ESCである。圧縮された浮動小数点数列から読んだ値がエスケープ符号ESCであるとき、関数decodeNumberを終え、ブール値を戻す。次に、最後に伸張値を変数codecのフィールドv(index)に格納する。圧縮が相対的方法で実行された場合には、次の命令が実行される。最初の命令は、変数codec及び変数offsetのフィールドdynamicをパラメータとして受け取る関数readOffsetを呼び出す。関数readOffsetは、浮動小数点数列の最後であることを示すブール値を戻す。関数readOffsetによって読み取られた値は、変数offsetに戻される。次の命令で、変数offsetに変数codecのフィールドquantizerUser.stepに格納された量子化ステップ値qstepを掛け、変数codec.v(indec)に加算される。
【００７４】
構文テーブル５は、関数readOffsetの構文である。
2008512917.tif 000021
【００７５】
この関数は、圧縮された浮動小数点数列ＣＳから読み取られるビット数を示す変数dynamicityと読み取られる数値の格納先である変数ポインタvalueを入力パラメータとして受け取り、ブール値を返す。この関数の最初の命令は、圧縮された浮動小数点数列ＣＳから、数値が負の数であるか否かを示すビットを読み取り、このビットが変数negativeに格納される。次いで、この関数は、変数dynamicityと同じ数のビット数で、圧縮された浮動小数点数列の圧縮値を読み取り、変数valueに格納される。変数negativeが調べられ、負の数である場合には、変数valueが負の数に設定される。この関数の次の命令は、読み取った値が圧縮された浮動小数点数列の最後に達しているか否かを示すエスケープコード（“-0”として符号化）であるか否かを調べる。この情報がブール値として返される。
【００７６】
表６は、関数decodeの構文である。
2008512917.tif 000022
【００７７】
この関数は、浮動小数点数を圧縮するために使用される最小値minと量子化ステップ値qstepを含む複素変数quantizerを入力パラメータとして受け取る。この関数は、式（３）を適用し、浮動小数点フォーマットで圧縮の結果を返す。
【００７８】
表７は、圧縮された浮動小数点数列を伸張する関数decodePathの構文であり、圧縮された浮動小数点数列は、複数の点間が定義される直線又は曲線を表すコマンドの混じった複数の点の座標を表している。
2008512917.tif 000023
【００７９】
この関数の最初の命令は、変数variableに偽を設定し、変数firstCoordinateに真を設定する。この関数はループを含んでいる。出力条件としての変数escapeの値を有している。このループの最初の命令は、圧縮された浮動小数点数列から、圧縮パラメータＥＣ（図６参照）を読み取り、変数explicitCommandに格納する。次いで、変数explicitCommandが調べられる。この値が１つなら、１ビットの圧縮パラメータＵＰと４ビットのＣＭＤが圧縮された浮動小数点数列から読み取られ、変数uppercase及び変数commandに格納される。以下の命令はループに対応している。このループは、表に定義されたパラメータcommand.nbFollowで定義される回数だけ繰り返される。実際、変数command.nbFollowがコマンドcommandに従う点の数を示している。ループの最初の命令は、変数firstCoodinateを調べることであり、変数firstCoodinateが真ならば、関数decodeListOfCoodinatesHeaderを呼び出し、整数startPointを返す。次の命令は、変数startPointを調べることである。この値がゼロなら、関数decodeNumberを呼び出し、最初の位置の座標を読み出し、伸張する。次いで、変数firstCoodinateが偽に設定される。関数decodeListOfCoodinatesHeaderを呼び出した後の変数firstCoodinateが偽ならば、次の点の座標を読み取り、また、関数decodeNumberを呼び出して伸張する。ループの最後に、命令commandとエスケープコードを比較し、命令commandとエスケープコードが等しいとき、ループを終了するため、変数escapeが真に設定される。言い換えると、関数decadePathは、命令がエスケープコードになるまで、圧縮された浮動小数点数列から、コマンドとコマンドに従属する複数の点の座標を読み取る。
【００８０】
浮動小数点数列の伸張プロセス及びコマンドが次の構文で定義される。
2008512917.tif 000024
【００８１】
この構文は、関数codec_pathと関数codec_pointSequenceを定義する。関数code_pathは、最初に、関数code_pointSequenceを呼び出し、圧縮された浮動小数点数列から５ビットの整数を読み取り、その値を変数nbOfTypesに格納する。次の命令は、変数nbOfTypesで繰り返されるループ内に入る。このループは、圧縮された浮動小数点数列から５ビットの符号無しの整数を読み取り、その値を変数typeに格納する命令を含んでいる。言い換えると、関数codec_pathは、関数codec_pointSequenceを呼び出し、変数nbOfTypesを読み取り、テーブルtypeに変数nbOfTypesを格納する。
【００８２】
関数codec_pointSequenceは、圧縮された浮動小数点数列から、５ビットの変数nbPointsの整数と１ビットのflagを読み取る。変数flagがゼロでないとき、関数codec_pointSequenceは動作しない。また、変数nbPointsが３と比較され、変数nbPointsが３より小さいとき、浮動小数点数列の５ビットの整数を読み取り、その整数を変数bitsに格納する。次の命令は、圧縮された浮動小数点数列から、変数nbPointと同じ数の座標ｘ及びYを読み取り、テーブルｘ及びYに格納する。圧縮された浮動小数点数列の各座標は、変数bitsと同じビット数の整数である。変数nbPoints３よりも大きいか又は同じとき、５ビットの整数が読み取られ、変数bitsに格納される。最初の位置のｘ座標及びY座標が浮動小数点数列から読み取られ、テーブルｘ及びテーブルYに格納される。５ビットの２つの整数が圧縮された浮動小数点数列から読み取られ、変数bitsx及び変数bitsyに格納される。次の命令は、浮動小数点数列の変数dx及び変数dyの整数値nbPointsを読み取る。この変数dx及び変数dyは、変数bitsx及び変数bitsyのビット数と同じである。実際には、変数dx及び変数dyが各点の相対座標を表している。次の命令は、座標の絶対値を算出し、テーブルｘ及びテーブルYに格納することである。
【００８３】
実際には、関数codec_pointSequenceが次のように設定される。浮動小数点数列の点の数が３より小さい場合、点の座標を絶対的方法で圧縮し、点の数が３以上の場合、点の座標を相対的方法で圧縮する。更に、escape codeを使う代わりに、浮動小数点数列の点の数を圧縮された浮動小数点数列に書き込む。相対的方法で圧縮が実行されるとき、ｘ座標のビット数bitsxとｙ座標のbitsy数の差が圧縮された浮動小数点数列に書き込まれ、ｘ座標のテーブルとｙ座標のテーブルに格納された各座標の圧縮値を式（３）を使って伸張する。
【００８４】
従来のZlibのような圧縮アルゴリズムでは、圧縮率が２１％以上であるのに対し、本発明の圧縮方法では、圧縮率を元のドキュメントのサイズの４％以下にすることができる。
【００８５】
上述の実施例から、本発明の方法が、実施例の変形や多様な応用が可能であることは当業者なら明らかなことである。他の量子化計算を適応し、他の数式で量子化ステップ及び圧縮値を計算することもできる。
【図面の簡単な説明】
【００８６】
【図１】本発明の圧縮装置を模式的に示す図
【図２】本発明の伸張装置を模式的に示す図
【図３】圧縮される浮動小数点数列を含むドキュメントを示す図
【図４】本発明の圧縮方法を示すフローチャート
【図５】図１の圧縮装置で圧縮された浮動小数点数の２進数列を含むドキュメントを示す図
【図６】図３に示す圧縮されたドキュメントの選択的部分を示す図
【図７】本発明の伸張方法のフローチャート
【図１】
2008512917.tif 000033
【図２】
2008512917.tif 000034
【図３】
2008512917.tif 000035
【図４】
2008512917.tif 000036
【図５】
2008512917.tif 000037
【図６】
2008512917.tif 000038
【図７】
2008512917.tif 000039
【手続補正書】
【提出日】平成18年10月23日(2006.10.23)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
浮動小数点数列を圧縮する圧縮方法であって、
前記浮動小数点数列の最小値ｍｉｎと最大値ｍａｘを決定する工程と、
次式を用いて量子化ステップ値を決定する工程と、
2008512917.tif 000040
ここで、記号ｎｂｉｔｓは圧縮された値の少なくとも１つのビット数であり、
次式を用い、前記最小値と最大値の間に線形量子化を適用し、前記浮動小数点数列の各数値ｖを圧縮する工程と、
2008512917.tif 000041
ここで、記号ｑは浮動小数点数列の各数値が圧縮された値、記号Ｉｎｔ［ｘ］はカッコ内の数値ｘの整数部が得られる関数であり、
前記圧縮工程で得られる圧縮された値を２進数列に挿入する工程とを含むことを特徴とする圧縮方法。
【請求項２】
前記圧縮された値のビット数は、前記浮動小数点数列の最大精度の関数として決定されることを特徴とする請求項１に記載の圧縮方法。
【請求項３】
前記浮動小数点数列は、ディジタルグラフィックイメージの各点の座標であり、前記圧縮された値のビット数は、前記ディジタルグラフィックイメージが表示されるディスプレイの解像度の関数として決定されることを特徴とする請求項１に記載の圧縮方法。
【請求項４】
前記浮動小数点数列の最初の数値を除く各数値を前の数値との差分の相対数に置き換える初期工程を含み、
前記圧縮工程は、前記相対数から圧縮された相対数を生成し、
前記圧縮された相対数のビット数は、前記浮動小数点数列の各数値の圧縮値のビット数より小さいことを特徴とする請求項１から請求項３までの何れかに記載の圧縮方法。
【請求項５】
前記圧縮された相対数のビット数は、前記相対数の最大値を使って決定されることを特徴とする請求項４に記載の圧縮方法。
【請求項６】
前記浮動小数点数列は、複数の点の座標であり、
前記座標は、少なくとも２つの浮動小数点数を含み、
前記座標は、階数を有し、
前記浮動小数点数列の各数値を階数別に圧縮することを特徴とする請求項１から請求項５までの何れかに記載の圧縮方法。
【請求項７】
前記浮動小数点数列は、ＳＶＧドキュメントに所属することを特徴とする請求項１から請求項６までの何れかに記載の圧縮方法。
【請求項８】
複数の浮動小数点数の夫々を圧縮した複数のディジタル値の２進数列を伸張する伸張方法であって、
前記複数の浮動小数点数の夫々は、最大値と最小値の間の数値であり、
次式を用いて量子化ステップ値と前記２進数列の少なくとも１つのディジタル値のビット数ｎｂｉｔｓを決定する工程と、
2008512917.tif 000042
前記複数の浮動小数点数の夫々を圧縮した複数のディジタル値の夫々を前記ビット数を使って読み取る工程と、
次式を用い、
2008512917.tif 000043
読み取ったディジタル値から浮動小数点数の伸張された値ｖを取得するため、ディジタル値ｑを伸張する工程とを含むことを特徴とする伸張方法。
【請求項９】
前記ビット数、前記最小値及び前記最大値は、前記２進数列のヘッダーに規定された識別子から決定されることを特徴とする請求項８に記載の伸張方法。
【請求項１０】
前記ビット数、前記最小値及び前記最大値は、前記２進数列のヘッダーに規定されることを特徴とする請求項８に記載の伸張方法。
【請求項１１】
前記２進数列の最初のディジタル値のビット数よりも、それ以外のディジタル値のビット数の方が小さく、
前記２進数列の各ディジタル値を伸張し、伸張した浮動小数点数を取得し、
今回伸張した浮動小数点数を前回伸張した浮動小数点数に加算し、
最初の浮動小数点数は、前記２進数列の最初のディジタル値から得られることを特徴とする請求項８から請求項１０までの何れかに記載の伸張方法。
【請求項１２】
前記相対数のビット数は、前記２進数列のヘッダーから読み取られることを特徴とする請求項１０に記載の伸張方法。
【請求項１３】
前記浮動小数点数列は、複数の点の座標であり、
前記座標は、少なくとも２つの浮動小数点数を含み、
各浮動小数点数は、階数を有し、
前記浮動小数点数列の各数値を階数別に圧縮することを特徴とする請求項８から請求項１２までの何れかに記載の伸張方法。
【請求項１４】
前記浮動小数点数列は、ＳＶＧドキュメントに所属することを特徴とする請求項８から請求項１３までの何れかに記載の伸張方法。
【請求項１５】
浮動小数点数列を圧縮する圧縮装置であって、
前記浮動小数点数列の最小値ｍｉｎと最大値ｍａｘを決定する手段と、
次式を用いて量子化ステップ値を決定する手段と、
2008512917.tif 000044
ここで、記号ｎｂｉｔｓは圧縮された値の少なくとも１つのビット数であり、
次式を用い、前記最小値と最大値の間に線形量子化を適用し、前記浮動小数点数列の各数値ｖを圧縮する手段と、
2008512917.tif 000045
ここで、記号ｑは浮動小数点数列の各数値が圧縮された値、記号Ｉｎｔ［ｘ］はカッコ内の数値ｘの整数部が得られる関数であり、
前記圧縮手段で得られる圧縮された値を２進数列に挿入する手段とを含むことを特徴とする圧縮装置。
【請求項１６】
前記圧縮された値のビット数は、前記浮動小数点数列の最大精度の関数として決定されることを特徴とする請求項１５に記載の圧縮装置。
【請求項１７】
前記浮動小数点数列は、ディジタルグラフィックイメージの各点の座標であり、前記圧縮された値のビット数は、前記ディジタルグラフィックイメージが表示されるディスプレイの解像度の関数として決定されることを特徴とする請求項１５に記載の圧縮装置。
【請求項１８】
前記浮動小数点数列の最初の数値を除く各数値を前の数値との差分の相対数に置き換える手段を含み、
前記圧縮手段は、前記相対数から圧縮された相対数を生成し、
前記圧縮された相対数のビット数は、前記浮動小数点数列の各数値の圧縮値のビット数より小さいことを特徴とする請求項１５から請求項１７までの何れかに記載の圧縮装置。
【請求項１９】
前記圧縮された相対数のビット数は、前記相対数の最大値を使って決定されることを特徴とする請求項１８に記載の圧縮装置。
【請求項２０】
前記浮動小数点数列は、複数の点の座標であり、
前記座標は、少なくとも２つの浮動小数点数を含み、
前記座標は、階数を有し、
前記浮動小数点数列の各数値を階数別に圧縮することを特徴とする請求項１５から請求項１９までの何れかに記載の圧縮装置。
【請求項２１】
前記浮動小数点数列は、ＳＶＧドキュメントに所属することを特徴とする請求項１５から請求項２０までの何れかに記載の圧縮装置。
【請求項２２】
複数の浮動小数点数の夫々を圧縮した複数のディジタル値の２進数列を伸張する伸張装置であって、
前記複数の浮動小数点数の夫々は、最大値と最小値の間の数値であり、
次式を用いて量子化ステップ値と前記２進数列の少なくとも１つのディジタル値のビット数ｎｂｉｔｓを決定する手段と、
2008512917.tif 000046
前記複数の浮動小数点数の夫々を圧縮した複数のディジタル値の夫々を前記ビット数を使って読み取る手段と、
次式を用い、
2008512917.tif 000047
読み取ったディジタル値から浮動小数点数の伸張された値ｖを取得するため、ディジタル値ｑを伸張する手段とを含むことを特徴とする伸張装置。
【請求項２３】
前記ビット数、前記最小値及び前記最大値を前記２進数列のヘッダーに規定された識別子から決定する手段を備えることを特徴とする請求項２２に記載の伸張装置。
【請求項２４】
前記ビット数、前記最小値及び前記最大値は、前記２進数列のヘッダーに規定されることを特徴とする請求項２２に記載の伸張装置。
【請求項２５】
前記２進数列の最初のディジタル値のビット数よりも、それ以外のディジタル値のビット数の方が小さく、
前記伸張手段は、前記２進数列の各ディジタル値を伸張し、伸張した浮動小数点数を取得し、
今回伸張した浮動小数点数を前回伸張した浮動小数点数に加算することによって各浮動小数点数を決定し、
最初の浮動小数点数は、前記２進数列の最初のディジタル値から得ることを特徴とする請求項２２から請求項２４までの何れかに記載の伸張装置。
【請求項２６】
前記相対数のビット数を前記２進数列のヘッダーから読み取る手段を備えることを特徴とする請求項２４に記載の伸張装置。
【請求項２７】
前記浮動小数点数列は、複数の点の座標であり、
前記座標は、少なくとも２つの浮動小数点数を含み、
各浮動小数点数は、階数を有し、
前記浮動小数点数列の各数値を階数別に圧縮することを特徴とする請求項２２から請求項２６までの何れかに記載の伸張装置。
【請求項２８】
前記浮動小数点数列は、ＳＶＧドキュメントに所属することを特徴とする請求項２２から請求項２７までの何れかに記載の伸張装置。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを転送し、格納し、取り出し、表示するコンピュータシステムに関し、詳しくは、浮動小数点数列を圧縮及び伸張する方法及びシステムに関する。
【背景技術】
【０００２】
多くのアプリケーションソフトは、特に、芸術作品、技術図面、概略図等のディジタルグラフィックドキュメントを生成及び表示するとき、膨大な数の数値データを転送し、格納し、読み出すことを要求される。なぜなら、ドキュメントが、点、直線、曲線を描写するためのグラフィックデータを含んでいるからである。このようなグラフィックドキュメントでは、２次元ベクトルやベクトル/ラスター混合で記述するＳＶＧ（Scalable Vector Graphics）等の言語を用いてグラフィック対象が記述される。
【０００３】
ＳＶＧは、拡張可能なマークアップ言語ＸＭＬ（eXtensible Markup Language）に基いたマークアップ言語であり、ベクトルグラフィックシェイプ、イメージ、テキストの３タイプのグラフィック対象が記述可能である。ベクトルグラフィックシェイプは、直線と曲線で定義される。各直線及び曲線は、複数のセグメントの列で定義され、始点と終点の座標と始点から終点までの曲線の形状を定義する変換コマンドとを含んでいる。複雑な形状は、その座標とコマンドの長いリストのＳＶＧ言語で表される。ＳＶＧ言語では、全ての座標がIEEE 754フォーマットに基づいて３２ビットで符号化された浮動小数点数である。
【０００４】
ＳＶＧは、特に、携帯電話でグラフィックの転送及び表示に広く使用される傾向がある。しかしながら、携帯電話で可能なデータ転送レートは、一般に、減じられ、携帯電話の画面サイズも小さい。
【０００５】
ディジタルドキュメントを転送又は格納するのに必要なデータ転送レート又は容量を削減するため、ディジタルドキュメントが圧縮されている。ISO/IEC 15938-1やMPEG-7（Moving Picture Expert Group）は、ＸＭＬドキュメントの符号化（圧縮）方法及び復号化（伸張）方法を提案している。この規格は、特に、マルチメディア・メタデータのような高度に構造化されたデータ処理に適応される。しかしながら、数列は、ＳＶＧドキュメントの重要な部分を構成しており、浮動賞数点数列の圧縮が必要である。
【０００６】
ZLIB(ZIP)などの一般的な圧縮アルゴリズムは、浮動小数点数列に適用しても期待できるほど高い圧縮率は得られない。
【０００７】
浮動小数点数の圧縮方法が、特許文献US6,253,222及びUS6,396,420に開示されている。特許文献US6,253,222に開示された方法は、圧縮される浮動小数点数から一定の数値を差し引き、圧縮している。特許文献US6,396,420に開示された方法は、圧縮される２つの数値の共通の桁を特定し、共通の桁の数値と被共通の桁の数値を別々に圧縮している。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
本発明は、従来の問題を解決するためになされたもので、浮動小数点数列の圧縮率を改善することのできる圧縮方法を提供することを目的とする。また、低解像ディスプレイにＳＶＧドキュメントなどのベクトルグラフィックドキュメントを表示する圧縮方法及び伸張方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明の圧縮方法は、浮動小数点数列を圧縮する圧縮方法であって、
前記浮動小数点数列の最小値ｍｉｎと最大値ｍａｘを決定する工程と、
次式を用いて量子化ステップ値を決定する工程と、
2008512917.tif 000048
ここで、記号ｎｂｉｔｓは圧縮された値の少なくとも１つのビット数であり、
次式を用い、前記最小値と最大値の間に線形量子化を適用し、前記浮動小数点数列の各数値ｖを圧縮する工程と、
2008512917.tif 000049
ここで、記号ｑは浮動小数点数列の各数値が圧縮された値、記号Ｉｎｔ［ｘ］はカッコ内の数値ｘの整数部が得られる関数であり、
前記圧縮工程で得られる圧縮された値を２進数列に挿入する工程とを含む。
【００１０】
本発明の圧縮方法は、前記圧縮された値のビット数は、前記浮動小数点数列の最大精度の関数として決定される。
【００１１】
本発明の圧縮方法は、前記浮動小数点数列は、ディジタルグラフィックイメージの各点の座標であり、前記圧縮された値のビット数は、前記ディジタルグラフィックイメージが表示されるディスプレイの解像度の関数として決定される。
【００１２】
本発明の圧縮方法は、前記浮動小数点数列の最初の数値を除く各数値を前の数値との差分の相対数に置き換える初期工程を含み、
前記圧縮工程は、前記相対数から圧縮された相対数を生成し、
前記圧縮された相対数のビット数は、前記浮動小数点数列の各数値の圧縮値のビット数より小さい。
【００１３】
本発明の圧縮方法は、前記圧縮された相対数のビット数は、前記相対数の最大値を使って決定される。
【００１４】
本発明の圧縮方法は、前記浮動小数点数列は、複数の点の座標であり、
前記座標は、少なくとも２つの浮動小数点数を含み、
前記座標は、階数を有し、
前記浮動小数点数列の各数値を階数別に圧縮する。
本発明の圧縮方法は、前記浮動小数点数列は、ＳＶＧドキュメントに所属する。
【００１５】
本発明の伸張方法は、複数の浮動小数点数の夫々を圧縮した複数のディジタル値の２進数列を伸張する伸張方法であって、
前記複数の浮動小数点数の夫々は、最大値と最小値の間の数値であり、
次式を用いて量子化ステップ値と前記２進数列の少なくとも１つのディジタル値のビット数ｎｂｉｔｓを決定する工程と、
2008512917.tif 000050
前記複数の浮動小数点数の夫々を圧縮した複数のディジタル値の夫々を前記ビット数を使って読み取る工程と、
次式を用い、
2008512917.tif 000051
読み取ったディジタル値から浮動小数点数の伸張された値ｖを取得するため、ディジタル値ｑを伸張する工程とを含む。
【００１６】
本発明の伸張方法は、前記ビット数、前記最小値及び前記最大値は、前記２進数列のヘッダーに規定された識別子から決定される。
【００１７】
本発明の伸張方法は、前記ビット数、前記最小値及び前記最大値は、前記２進数列のヘッダーに規定される。
【００１８】
本発明の伸張方法は、前記２進数列の最初のディジタル値のビット数よりも、それ以外のディジタル値のビット数の方が小さく、
前記２進数列の各ディジタル値を伸張し、伸張した浮動小数点数を取得し、
今回伸張した浮動小数点数を前回伸張した浮動小数点数に加算し、
最初の浮動小数点数は、前記２進数列の最初のディジタル値から得られる。
【００１９】
本発明の伸張方法は、前記相対数のビット数は、前記２進数列のヘッダーから読み取られる。
【００２０】
本発明の伸張方法は、前記浮動小数点数列は、複数の点の座標であり、
前記座標は、少なくとも２つの浮動小数点数を含み、
各浮動小数点数は、階数を有し、
前記浮動小数点数列の各数値を階数別に圧縮する。
【００２１】
本発明の圧縮装置は、浮動小数点数列を圧縮する圧縮装置であって、
前記浮動小数点数列の最小値ｍｉｎと最大値ｍａｘを決定する手段と、
次式を用いて量子化ステップ値を決定する手段と、
2008512917.tif 000052
ここで、記号ｎｂｉｔｓは圧縮された値の少なくとも１つのビット数であり、
次式を用い、前記最小値と最大値の間に線形量子化を適用し、前記浮動小数点数列の各数値ｖを圧縮する手段と、
2008512917.tif 000053
ここで、記号ｑは浮動小数点数列の各数値が圧縮された値、記号Ｉｎｔ［ｘ］はカッコ内の数値ｘの整数部が得られる関数であり、
前記圧縮手段で得られる圧縮された値を２進数列に挿入する手段とを含む。
【００２２】
本発明の圧縮装置は、前記新規数列が、浮動小数点数列である。
【００２３】
本発明の圧縮装置は、前記浮動小数点数列の最初の数値を除く各数値を前の数値との差分の相対数に置き換える手段を含み、
前記圧縮手段は、前記相対数から圧縮された相対数を生成し、
前記圧縮された相対数のビット数は、前記浮動小数点数列の各数値の圧縮値のビット数より小さい。
【００２４】
本発明の伸張装置は、複数の浮動小数点数の夫々を圧縮した複数のディジタル値の２進数列を伸張する伸張装置であって、
前記複数の浮動小数点数の夫々は、最大値と最小値の間の数値であり、
次式を用いて量子化ステップ値と前記２進数列の少なくとも１つのディジタル値のビット数ｎｂｉｔｓを決定する手段と、
2008512917.tif 000054
前記複数の浮動小数点数の夫々を圧縮した複数のディジタル値の夫々を前記ビット数を使って読み取る手段と、
次式を用い、
2008512917.tif 000055
読み取ったディジタル値から浮動小数点数の伸張された値ｖを取得するため、ディジタル値ｑを伸張する手段とを含む。
【００２５】
本発明の伸張装置は、前記ビット数、前記最小値及び前記最大値を前記２進数列のヘッダーに規定された識別子から決定する手段を備える。
【００２６】
本発明の伸張装置は、前記２進数列の最初のディジタル値のビット数よりも、それ以外のディジタル値のビット数の方が小さく、
前記伸張手段は、前記２進数列の各ディジタル値を伸張し、伸張した浮動小数点数を取得し、今回伸張した浮動小数点数を前回伸張した浮動小数点数に加算することによって各浮動小数点数を決定し、
最初の浮動小数点数は、前記２進数列の最初のディジタル値から得る。
【００２７】
本発明の伸張装置は、前記相対数のビット数を前記２進数列のヘッダーから読み取る手段を備える。
【発明を実施するための最良の形態】
【００２８】
以下、本発明の特徴を詳細に説明する。図１は、本発明の圧縮装置ＣＭＰを示している。この圧縮装置は、ＳＶＧ言語のディジタルグラフィックドキュメントなどの浮動小数点数列を含むドキュメントを処理するようになっている。圧縮装置ＣＭＰは、ドキュメントＤＯＣ１から圧縮されたドキュメントＣＤＯＣを生成する。圧縮されたドキュメントＣＤＯＣはドキュメントＤＯＣ１よりもサイズが小さい。
【００２９】
図２は、圧縮装置ＣＰＭで生成された圧縮されたドキュメントＣＤＯＣを処理し、伸張されたドキュメントを出力する伸張装置ＤＥＣを示している。圧縮されたドキュメントＣＤＯＣ１から得られた伸張されたドキュメントＤＯＣ２は、圧縮されたドキュメントＣＤＯＣが生成される元のドキュメントＤＯＣ１と必ずしも同等でない。
【００３０】
図３は、圧縮されるドキュメントの一例を示している。このドキュメントは、少なくとも１つの浮動小数点数列ＦＰＳを含んでいる。この浮動小数点数列ＦＰＳは、ヘッダーＳＨＤと複数の浮動小数点数を含んでいる。複数の浮動小数点数は、グラフィックイメージの各点の座標（Ｘ１，Ｙ２）、（Ｘ２，Ｙ２）、・・・（Ｘｎ，Ｙｎ）を表している。ＳＶＧ言語では、各点の座標が３２ビット浮動小数点フォーマットで符号化される。
【００３１】
図４は、本発明の圧縮方法を示している。この圧縮方法は、以下のステップを含んでいる。
Ｓ１：圧縮される浮動小数点数列を分析する。
Ｓ２：量子化ステップ値を決定する。
Ｓ３：圧縮されたドキュメントに圧縮パラメータＲＬを挿入する。
Ｓ４：浮動小数点数列の最初の数値を読み取る。
Ｓ５：最初の数値を圧縮する。
Ｓ６：圧縮されたドキュメントに最初の数値の圧縮値を挿入する。
Ｓ７：浮動小数点数列の次の数値を読み取る。
Ｓ８：圧縮パラメータＲＬを調べる。
Ｓ９：浮動小数点数列の次の数値を圧縮する。
Ｓ１０：浮動小数点数列の次の数値と前回の数値との差分を圧縮する。
Ｓ１１：圧縮されたドキュメントに圧縮値を挿入する。
Ｓ１２：浮動小数点数列の最後の数値まで読み取られたか否かを判定する。
Ｓ１３：圧縮されたドキュメントにエンドコードを挿入する。
【００３２】
ステップＳ１において、浮動小数点数列ＦＰＳを分析し、浮動小数点数列ＦＰＳの圧縮パラメータを決定する。最小値と最大値及び有効ビット数又は浮動小数点数列の精度を決定することがこの分析の目的である。
【００３３】
本実施の形態では、浮動小数点数列ＦＰＳ又はドキュメントＤＯＣ１のヘッダーのパラメータから最小値と最大値が決定される。このパラメータには、例えば、浮動小数点数の最大値及び最小値と関連付けられた構成単位の定義又は浮動小数点数列の種類の情報が含まれている。
【００３４】
本発明の他の実施例では、最小値と最大値が浮動小数点数列ＦＰＳから決定される。
【００３５】
浮動小数点数の精度が低下しないように浮動小数点数の有効ビット数が選択されるので、精度を低下させないで圧縮が実行される。
【００３６】
代わりの実施例では、ドキュメントに基づいて浮動小数点数の有効ビット数が決定される。例えば、ドキュメントが携帯電話などの低解像ディスプレイに表示されるベクトルグラフィックイメージを含んでいる場合、解像度に応じた値が浮動小数点数の有効ビット数として選択される。例えば、解像度が３２０×２４０のディスプレイの場合、一方の次元の浮動小数点数の有効ビット数として９ビットが選択され、他方の次元の浮動小数点数の有効ビット数として８ビットが選択される。この場合の圧縮には精度が低下するので付加逆である。しかしながら、浮動小数点数がベクトルグラフィックイメージの各点の座標を表している場合、イメージの各点は、画面上での各点の座標が少し異なるが、イメージの鮮明さは低下しない。
【００３７】
また、ステップＳ１では、浮動小数点数列ＦＰＳの隣接の数値間の差分の最大値が計算される。差分の最大値は、圧縮比という意味において圧縮が効率的であるか否かが示された圧縮パラメータＲＬを決定するのに使用される。例えば、浮動小数点数が２次元イメージの各点の座標であり、各点が隣接の点に近い場合、より効率的な圧縮となる。
【００３８】
ステップＳ２では、量子化ステップ値ｑｓｔｅｐが次式で決定される。
2008512917.tif 000056
記号ｎｂｉｔは浮動小数点数列ＦＰＳの有効ビット数、記号ｍａｘ及びｍｉｎは決定された最大値及び最小値である。
【００３９】
浮動小数点数がイメージの各点の座標である場合、量子化ステップ値が階数毎に決定される。例えば、Ｘ成分及びＹ成分に対して決定される。
【００４０】
ステップＳ３では、圧縮パラメータＲＬが圧縮されたドキュメントＣＤＯＣに書き込まれる。
【００４１】
ステップＳ４では、最初の浮動小数点数Ｘ１が浮動小数点数列ＦＰＳから読み取られ、ステップＳ５では、最初の浮動小数点数Ｘ１に最小値と最大値の間に線形量子化を適応し、量子化ステップ値ｑｓｔｅｐを用い、最初の浮動小数点数Ｘ１が圧縮される。圧縮は、圧縮される数値に式（２）を適用することである。
2008512917.tif 000057
記号ｖは圧縮される浮動小数点数、記号ｑは浮動小数点数ｖの圧縮値、記号Ｉｎｔ［ｘ］は整数部が得られる関数である。
【００４２】
ステップＳ６では、圧縮されたドキュメントＣＤＯＣに圧縮値が書き込まれる。浮動小数点数が２次元の各点の座標を表している場合、ステップＳ４乃至Ｓ６で浮動小数点数列ＦＰＳの最初の２つの数値Ｘ１，Ｙ２が読み取られ、圧縮され、圧縮されたドキュメントに挿入される。
【００４３】
ステップＳ７では、浮動小数点数列ＦＰＳから次の浮動小数点数が読み取られる。圧縮パラメータＲＬに基づいて相対的方法で圧縮を実行する場合には、ステップＳ１０に進み、それ以外の場合には、ステップＳ９に進む。ステップＳ９では、ステップＳ７で読み取られた浮動小数点数が式（２）を用いて圧縮される。ステップＳ１０では、ステップＳ７で読み取られた浮動小数点数と前回の浮動小数点数（すなわち、浮動小数点数列ＦＰＳの２番目の数値が処理されている場合には、最初の数値Ｘ１又はＹ１）との差分の圧縮に式（２）が適用される。ステップＳ１０で圧縮された浮動小数点数の有効ビット数は、ステップＳ９で圧縮された浮動小数点数の有効ビット数より小さい。相対的圧縮でのビット数は、浮動小数点数列の分析（ステップＳ１）に基づいて浮動小数点数列の隣接する２つの数値の差分の関数として決定されるか、又は予め定義されているかの何れかである。
【００４４】
ステップＳ１１では、圧縮値が圧縮されたドキュメントＣＤＯＣに挿入される。浮動小数点数が２次元イメージの各点の座標を表している場合には、ステップＳ７乃至Ｓ１１で浮動小数点数列ＦＰＳの最初の２つの数値Ｘ１，Ｙ２が読み取られ、圧縮され、圧縮されたドキュメントに挿入される。
【００４５】
ステップＳ１２では、浮動小数点数列の最後の数値まで終了したか否かを決定している。浮動小数点数列の最後の数値まで終了した場合には、終了コードＥＳＣが圧縮されたドキュメントに挿入され（ステップＳ１３）、それ以外の場合にはステップＳ７乃至Ｓ１２が繰り返される。
【００４６】
図５は、ドキュメントＤＯＣ１の圧縮で得られる圧縮されたドキュメントＣＤＯＣの構造を示している。圧縮されたドキュメントは、浮動小数点数列ＦＰＳの圧縮で得られる圧縮された浮動小数点数列ＣＳを含んでいる。圧縮された浮動小数点数列ＣＳは、ヘッダーＣＳＨＤと浮動小数点数列の各数値Ｘ２，Ｙ２…Ｘｎ，Ｙｎの圧縮値ＣＸ２，ＣＹ２…ＣＸｎ，ＣＹｎを有する本体ＣＳＢＹとを含んでいる。
【００４７】
ヘッダーＣＳＨＤは圧縮パラメータを含み、その圧縮パラメータＲＬが下記の場合には、相対的圧縮を示している。
パラメータＦＰは、浮動小数点数列の最初の数値が絶対的な方法で圧縮されたことを示している。
パラメータＦＰは、圧縮された最初の数値ＣＸ１を示している。浮動小数点数列ＦＰＳの各数値が各点の座標である場合には、圧縮された最初の数値ＣＸ１，ＣＹ１を示している。
圧縮パラメータＮＤは、相対的圧縮でのビット数が初期値と違うか否かを示している。
圧縮パラメータＮＤは、初期値と違うビット数、すなわち、相対的圧縮でのビット数ＤＹＮを示している。
【００４８】
図６は、圧縮された浮動小数点数列ＦＰＳのヘッダーを表している。圧縮された浮動小数点数列ＦＰＳは、各点の座標と各点を結ぶ線の形状を定義するコマンドを含んでいる。この場合、ヘッダーは、図５に示されたヘッダーに加え、下記のパラメータ及びコマンドを含んでいる。
パラメータＥＣは、浮動小数点数列が明確なコマンドを含むことを示している。
パラメータＵＰは、コマンドが大文字で表現されている。
コマンドＣＭＤ。
【００４９】
図７は、本発明の伸張方法を示している。この伸張方法は以下の工程を含んでいる。
Ｓ２１：量子化ステップ値を決定する。
Ｓ２２：圧縮パラメータＲＬを読み取る。
Ｓ２３：圧縮された浮動小数点数列ＣＳの最初の圧縮値ＣＸ１を読み取る。
Ｓ２４：最初の圧縮値を伸張する。
Ｓ２５：伸張されたドキュメントに伸張値を挿入する。
Ｓ２６：圧縮された浮動小数点数列の次の圧縮値を読み取る。
Ｓ２７：次の圧縮値が圧縮値の最後を示すエスケープコードか否かを調べる。
Ｓ２８：次の圧縮値を伸張する。
Ｓ２９：圧縮パラメータを調べる。
Ｓ３０：次の伸張値と前回の伸張値の和を計算する。
Ｓ３１：圧縮値を圧縮されたドキュメントに挿入する。
【００５０】
ステップＳ２１では、量子化ステップ値ｑｓｔｅｐが式（１）を用いて算出される。式（１）のビット数ｎｂｉｔ、最大値ｍａｘ、最小値ｍｉｎは、圧縮された浮動小数点数列のヘッダーＣＳＨＤの識別子から得られる。
【００５１】
ステップＳ２２では、圧縮パラメータＲＬが圧縮された浮動小数点数列のヘッダーＣＳＨＤから読み取られる。
【００５２】
ステップＳ２３では、圧縮された浮動小数点数列から浮動小数点数の最初の数値の圧縮値ＣＸ１が読み取られる。ステップＳ２４では、ステップＳ５の圧縮演算の逆の演算が適用され、最小値ｍｉｎ及び最大値ｍａｘと量子化ステップ値ｑｓｔｅｐを用い、圧縮値ＣＸ１が伸張される。伸張は、圧縮値に、例えば、式（３）を適用することである。
2008512917.tif 000058
【００５３】
伸張値は、伸張されたドキュメントＤＯＣ２の伸張された浮動小数点数列に挿入される。圧縮された浮動小数点数列の各値が各点の座標を表している場合には、ステップＳ２３乃至Ｓ２５が繰り返される。
【００５４】
圧縮された浮動小数点数列ＣＳから次の圧縮値が読み取られる。次の圧縮値が浮動小数点数列の最後を示すエスケープコードである場合、圧縮された浮動小数点数列の伸張を完了し（ステップＳ２７）。エスケープコードでない場合、ステップＳ２８に進む。ステップＳ２８では、ステップＳ２４と同じ計算が適用され、ステップＳ２６で読み取られた次の圧縮値に量子化ステップ値ｑｓｔｅｐを掛け、次の圧縮値が伸張される。ステップＳ２９では、圧縮パラメータＲＬから浮動小数点数列が相対的方法で圧縮されたか否かが判定される。浮動小数点数列が相対的方法で圧縮された場合、式（４）を用いて次の圧縮値の伸張が更に続く。伸張されたドキュメントＤＯＣ２に挿入された伸張値は、ステップＳ２８で得られた伸張値と前回の伸張で得られた伸張値との和に等しい（ステップＳ３０）。
2008512917.tif 000059
ここで、記号ｖ（ｎ）は次の伸張値、記号ｖ（ｎ−１）は１つ前の伸張値、記号ｑは圧縮された浮動小数点数列から読み取った次の圧縮値である。
【００５５】
圧縮された浮動小数点数列の各数値に対して伸張プロセスのステップＳ２５乃至Ｓ３０が繰り返される。圧縮された浮動小数点数列の各数値が各点の座標を表している場合、座標毎にステップＳ２５，Ｓ２６，Ｓ２８，Ｓ３０が繰り返される。
【００５６】
伸張プロセスは、次のような構文で定義される。この構文には、ビットストリーム又は圧縮された浮動小数点数列から読み取られたデータ項目の夫々はボールド体で現れ、その名称とビット長で記述される。また、データのタイプと転送順序の簡略記号で記述される。ビットストリームから伸張されるデータ項目で始動される動作は、各項目の値とそれ以前に読み取られ伸張されたデータ項目に依存している。
2008512917.tif 000060
この条件が真の場合、ビットストリームにデータの項目のグループが発生し、この条件が偽になるまで続ける。この構文は、変数又は数式が真の条件に一致している状態と、変数又は数式が偽の条件に一致している状態に従うCコードの慣例を使用する。
【００５７】
次の構造では、条件が真の場合、ビットストリームのデータ項目の第１グループが発生する。一方、条件が偽の場合、ビットストリームのデータ項目の第２グループが発生する。
2008512917.tif 000061
【００５８】
次の構造では、データ項目のグループが（ｎ−ｍ）回発生する。条件構造は、データ項目の範囲内で、ループ制御変数ｉの値に依存し、最初の発生でｍに設定され、２回目の発生で１だけ増やされ、そして更に続けられる。
2008512917.tif 000062
【００５９】
関数形式の構文は、ある構文要素からの値又はパラメータを他の構文要素に引き渡すのに使用される。この構文要素は、以下に例示するように、Ｃ言語等の構文を用いて関数として定義される。
2008512917.tif 000063
【００６０】
この構文テーブルは、datatypeというパラメータparameter_nameを受け取る関数を説明している。パラメータparameter_nameは、この構文内で使用され、他の関数、例えば、上述の関数OtherFunctionに渡すことができる。
【００６１】
次の構文テーブルは、図７に示された伸張プロセスの別の表現である。
2008512917.tif 000064
【００６２】
構文テーブル２は、圧縮された浮動小数点数列の伸張関数の構文テーブルである。この関数は、パラメータcodecを受け取る。このパラメータcodecは、圧縮された浮動小数点数列の圧縮値のビット数、最小値、最大値を定義するnbits, min, maxを含む複雑なデータである。この関数は、他の関数decodeListOfCoodinatesHeaderを呼び出し、次に、ブール変数escapeを初期化し、下記の命令を実行するループに入る。最初の命令で、圧縮された浮動小数点数列を読み出し、伸張する関数decodeNumberを呼び出す。この関数は、２つのパラメータcodecと整数を受け取り、変数escapeとして記憶されるブール値を返す。次の命令では、圧縮された浮動小数点数列の各数値が２次元上の点の座標なのか否かが調べられる。次元の数は、変数codecのnbDimに格納されている。次の命令は、圧縮された浮動小数点数列の各数値が点の座標であるとき、圧縮された浮動小数点数列の各数値が２次元上の点の座標であるとき、関数decodeNumberを呼び出す。
【００６３】
構文テーブル３は、関数decodeListOfCoodinatesHeaderの構文である。
2008512917.tif 000065
【００６４】
関数decodeListOfCoodinatesHeaderの最初の命令は、ビット長が１ビットで変数codecのフィールドrelativeに格納された圧縮パラメータＲＬを読み取ることである。この圧縮パラメータＲＬが１のとき、変数startPointが１に設定される。フィールドcontextualが真に設定されるとき、１ビットで符号化された圧縮パラメータＳＰが圧縮された浮動小数点数列から読み取られ、変数startPointとして格納される。変数startPointが１のとき、圧縮された浮動小数点数列の最初の数値を読み取る関数decodeが呼び出される。この関数decodeは、変数codecのフィールドにあり、量子化ステップ値qstepを含んでいる入力パラメータcodec.quantizerUsedとして受け取る。関数decodeは、圧縮された浮動小数点数列の次の数値を読み取り、伸張し、変数codecのフィールドv(1)に格納される伸張値を返す。各伸張値が、平面（次元の数codec.nbDim = 2）上の点の座標を表しているとき、関数codecは、再度、呼び出され、圧縮された浮動小数点数列のY座標の最初の数値が読み取られ、伸張される。伸張された値は、変数codecのフィールドv(2)に格納される。次いで、変数newDynamicが１に初期化される。次の命令は、変数codecのフィールドcontextualの値を調べることである。フィールドcontextualが真であるとき、１ビットで符号化された圧縮パラメータＮＤは、圧縮された浮動小数点数列ＣＳから読み取られ、変数newDynamicに格納される。次いで、変数newDynamicの値が１と比べられ、１に等しいとき、圧縮パラメータＤＹＮの５ビットが読み取られ、変数codecのフィールドdynamicに格納される。関数decodeListOfCoodinatesHeaderの最後の命令は、その関数の出力である変数startPointの値を特定することである。
【００６５】
表４は、関数decodeNumberの構文である。
2008512917.tif 000066
【００６６】
関数decodeNumberは、複素変数codecとindexという変数を入力パラメータとして受け取る。この関数は、最初に、フィールドcodec.relativeに格納された圧縮パラメータを分析する。圧縮パラメータが、相対的方法で圧縮が実行されていないことを示している場合、数列ＣＳの次の値を読み、伸張する関数decodeが呼び出される。伸張値が変数numに格納され、その変数numが変数codecのフィールドcodec.quantizerUser.escapeCodeに格納されたエスケープ符号と比較される。このエスケープ符号は、圧縮された浮動小数点数列の最後を示す符号ESCである。圧縮された浮動小数点数列から読んだ値がエスケープ符号ESCであるとき、関数decodeNumberを終え、ブール値を戻す。次に、最後に伸張値を変数codecのフィールドv(index)に格納する。圧縮が相対的方法で実行された場合には、次の命令が実行される。最初の命令は、変数codec及び変数offsetのフィールドdynamicをパラメータとして受け取る関数readOffsetを呼び出す。関数readOffsetは、浮動小数点数列の最後であることを示すブール値を戻す。関数readOffsetによって読み取られた値は、変数offsetに戻される。次の命令で、変数offsetに変数codecのフィールドquantizerUser.stepに格納された量子化ステップ値qstepを掛け、変数codec.v(indec)に加算される。
【００６７】
構文テーブル５は、関数readOffsetの構文である。
2008512917.tif 000067
【００６８】
この関数は、圧縮された浮動小数点数列ＣＳから読み取られるビット数を示す変数dynamicityと読み取られる数値の格納先である変数ポインタvalueを入力パラメータとして受け取り、ブール値を返す。この関数の最初の命令は、圧縮された浮動小数点数列ＣＳから、数値が負の数であるか否かを示すビットを読み取り、このビットが変数negativeに格納される。次いで、この関数は、変数dynamicityと同じ数のビット数で、圧縮された浮動小数点数列の圧縮値を読み取り、変数valueに格納される。変数negativeが調べられ、負の数である場合には、変数valueが負の数に設定される。この関数の次の命令は、読み取った値が圧縮された浮動小数点数列の最後に達しているか否かを示すエスケープコード（“-0”として符号化）であるか否かを調べる。この情報がブール値として返される。
【００６９】
表６は、関数decodeの構文である。
2008512917.tif 000068
【００７０】
この関数は、浮動小数点数を圧縮するために使用される最小値minと量子化ステップ値qstepを含む複素変数quantizerを入力パラメータとして受け取る。この関数は、式（３）を適用し、浮動小数点フォーマットで圧縮の結果を返す。
【００７１】
表７は、圧縮された浮動小数点数列を伸張する関数decodePathの構文であり、圧縮された浮動小数点数列は、複数の点間が定義される直線又は曲線を表すコマンドの混じった複数の点の座標を表している。
2008512917.tif 000069
【００７２】
この関数の最初の命令は、変数variableに偽を設定し、変数firstCoordinateに真を設定する。この関数はループを含んでいる。出力条件としての変数escapeの値を有している。このループの最初の命令は、圧縮された浮動小数点数列から、圧縮パラメータＥＣ（図６参照）を読み取り、変数explicitCommandに格納する。次いで、変数explicitCommandが調べられる。この値が１つなら、１ビットの圧縮パラメータＵＰと４ビットのＣＭＤが圧縮された浮動小数点数列から読み取られ、変数uppercase及び変数commandに格納される。以下の命令はループに対応している。このループは、表に定義されたパラメータcommand.nbFollowで定義される回数だけ繰り返される。実際、変数command.nbFollowがコマンドcommandに従う点の数を示している。ループの最初の命令は、変数firstCoodinateを調べることであり、変数firstCoodinateが真ならば、関数decodeListOfCoodinatesHeaderを呼び出し、整数startPointを返す。次の命令は、変数startPointを調べることである。この値がゼロなら、関数decodeNumberを呼び出し、最初の位置の座標を読み出し、伸張する。次いで、変数firstCoodinateが偽に設定される。関数decodeListOfCoodinatesHeaderを呼び出した後の変数firstCoodinateが偽ならば、次の点の座標を読み取り、また、関数decodeNumberを呼び出して伸張する。ループの最後に、命令commandとエスケープコードを比較し、命令commandとエスケープコードが等しいとき、ループを終了するため、変数escapeが真に設定される。言い換えると、関数decadePathは、命令がエスケープコードになるまで、圧縮された浮動小数点数列から、コマンドとコマンドに従属する複数の点の座標を読み取る。
【００７３】
浮動小数点数列の伸張プロセス及びコマンドが次の構文で定義される。
2008512917.tif 000070
【００７４】
この構文は、関数codec_pathと関数codec_pointSequenceを定義する。関数code_pathは、最初に、関数code_pointSequenceを呼び出し、圧縮された浮動小数点数列から５ビットの整数を読み取り、その値を変数nbOfTypesに格納する。次の命令は、変数nbOfTypesで繰り返されるループ内に入る。このループは、圧縮された浮動小数点数列から５ビットの符号無しの整数を読み取り、その値を変数typeに格納する命令を含んでいる。言い換えると、関数codec_pathは、関数codec_pointSequenceを呼び出し、変数nbOfTypesを読み取り、テーブルtypeに変数nbOfTypesを格納する。
【００７５】
関数codec_pointSequenceは、圧縮された浮動小数点数列から、５ビットの変数nbPointsの整数と１ビットのflagを読み取る。変数flagがゼロでないとき、関数codec_pointSequenceは動作しない。また、変数nbPointsが３と比較され、変数nbPointsが３より小さいとき、浮動小数点数列の５ビットの整数を読み取り、その整数を変数bitsに格納する。次の命令は、圧縮された浮動小数点数列から、変数nbPointと同じ数の座標ｘ及びYを読み取り、テーブルｘ及びYに格納する。圧縮された浮動小数点数列の各座標は、変数bitsと同じビット数の整数である。変数nbPoints３よりも大きいか又は同じとき、５ビットの整数が読み取られ、変数bitsに格納される。最初の位置のｘ座標及びY座標が浮動小数点数列から読み取られ、テーブルｘ及びテーブルYに格納される。５ビットの２つの整数が圧縮された浮動小数点数列から読み取られ、変数bitsx及び変数bitsyに格納される。次の命令は、浮動小数点数列の変数dx及び変数dyの整数値nbPointsを読み取る。この変数dx及び変数dyは、変数bitsx及び変数bitsyのビット数と同じである。実際には、変数dx及び変数dyが各点の相対座標を表している。次の命令は、座標の絶対値を算出し、テーブルｘ及びテーブルYに格納することである。
【００７６】
実際には、関数codec_pointSequenceが次のように設定される。浮動小数点数列の点の数が３より小さい場合、点の座標を絶対的方法で圧縮し、点の数が３以上の場合、点の座標を相対的方法で圧縮する。更に、escape codeを使う代わりに、浮動小数点数列の点の数を圧縮された浮動小数点数列に書き込む。相対的方法で圧縮が実行されるとき、ｘ座標のビット数bitsxとｙ座標のbitsy数の差が圧縮された浮動小数点数列に書き込まれ、ｘ座標のテーブルとｙ座標のテーブルに格納された各座標の圧縮値を式（３）を使って伸張する。
【００７７】
従来のZlibのような圧縮アルゴリズムでは、圧縮率が２１％以上であるのに対し、本発明の圧縮方法では、圧縮率を元のドキュメントのサイズの４％以下にすることができる。
【００７８】
上述の実施例から、本発明の方法が、実施例の変形や多様な応用が可能であることは当業者なら明らかなことである。他の量子化計算を適応し、他の数式で量子化ステップ及び圧縮値を計算することもできる。
【図面の簡単な説明】
【００７９】
【図１】本発明の圧縮装置を模式的に示す図
【図２】本発明の伸張装置を模式的に示す図
【図３】圧縮される浮動小数点数列を含むドキュメントを示す図
【図４】本発明の圧縮方法を示すフローチャート
【図５】図１の圧縮装置で圧縮された浮動小数点数の２進数列を含むドキュメントを示す図
【図６】図３に示す圧縮されたドキュメントの選択的部分を示す図
【図７】本発明の伸張方法のフローチャート
【国際調査報告】
2008512917.tif 000071
2008512917.tif 000072
2008512917.tif 000073
2008512917.tif 000074
2008512917.tif 000075
2008512917.tif 000076