(57)【特許請求の範囲】
【請求項１】
浮動小数点フォーマットのデータを符号化する方法であって、該浮動小数点フォーマットは少なくとも１つの指数及び仮数を有し、該浮動小数点フォーマットのデータは、３Ｄメッシュ・モデルのジオメトリ・データであり、テクスチャ座標を有し、当該方法は、
（ａ）現在の浮動小数点フォーマットのデータ値の仮数がメモリに以前に格納されたかどうかを決定するステップであって、該メモリは所定のサイズを有し、別個のメモリ又はメモリ領域が異なる指数のために用いられ、該メモリ又はメモリ領域の各々は１つの指数と関連付けられる、ステップと、
（ｂ）前記現在の浮動小数点フォーマットのデータ値の仮数が前記メモリに以前に格納されていなかった場合、前記現在の浮動小数点フォーマットのデータ値の仮数を前記メモリに格納し符号化するステップと、
（ｃ）前記現在の浮動小数点フォーマットのデータ値の仮数が前記メモリに以前に格納されていた場合に、前記以前に格納されていたデータ値の前記メモリ内の記憶位置を決定し、該記憶位置を指すリファレンスを符号化するステップと、
（ｄ）前記現在の浮動小数点フォーマットのデータ値の指数又は該指数と関連付けられたメモリを指すポインタを符号化するステップと、を含み、
前記ステップ（ａ）、前記ステップ（ｂ）、及び前記ステップ（ｃ）は、前記現在の浮動小数点フォーマットのデータ値の指数と関連付けられたメモリのみに適用され、
前記ステップ（ｂ）は、
（ｂ１）前記メモリ内の以前に格納された別のデータ値の中から、前記現在の浮動小数点フォーマットのデータ値の仮数に対して最小絶対差の仮数を有する別のデータ値を決定するステップと、
（ｂ２）前記メモリにおいて、前記決定された以前に格納された別のデータ値を前記現在の浮動小数点フォーマットのデータ値の仮数で上書きするステップと、
（ｂ３）前記現在の浮動小数点フォーマットのデータ値の仮数を前記以前に格納された別のデータ値に対して差分符号化するステップと、
を含む、方法。
【請求項２】
前記現在の浮動小数点フォーマットのデータ値の仮数を前記メモリに格納する前に、
（ｅ）前記現在の浮動小数点フォーマットのデータ値の指数に関連付けられたメモリが一杯であると決定するステップ
を更に含み、
前記ステップ（ｂ２）は、前記メモリが一杯である場合にのみ実行される、請求項１に記載の方法。
【請求項３】
別個のメモリ又はメモリ領域が前記座標の各次元のために用いられる、請求項１又は２に記載の方法。
【請求項４】
前記浮動小数点フォーマットのデータ値に含まれる前記テクスチャ座標は、圧縮されていない、請求項１乃至３のいずれか一項に記載の方法。
【請求項５】
前記ジオメトリ・データにおける所定データ範囲内で繰り返し現れる浮動小数点フォーマットのデータ値について、前記ステップ（ａ）、前記ステップ（ｂ）、前記ステップ（ｃ）及び前記ステップ（ｄ）が適用される、請求項１乃至４のいずれか一項に記載の方法。
【請求項６】
前記現在の浮動小数点フォーマットのデータ値の仮数と前記決定された以前に格納された別のデータ値との間の差が閾より小さい場合に、前記ステップ（ｂ２）及び前記ステップ（ｂ３）は実行される、請求項１乃至５のいずれか一項に記載の方法。
【請求項７】
符号化された浮動小数点フォーマットのデータを復号化する方法であって、該浮動小数点フォーマットは少なくとも１つの指数及び仮数を有し、該浮動小数点フォーマットのデータは、３Ｄメッシュ・モデルのジオメトリ・データであり、テクスチャ座標を有し、当該方法は、
（ａ）符号化された入力値を受け取り、該符号化された入力値から、符号化された浮動小数点フォーマットのデータ値の指数又は該指数と関連付けられたメモリ又はメモリ領域を指すポインタと、前記符号化された浮動小数点のデータ値の仮数が差分符号化されているかどうかを示すコーディング・モード表示とを決定するステップと、
（ｂ）前記コーディング・モード表示に基づき前記データ値の仮数が差分符号化されていないと決定される場合は、前記符号化された浮動小数点フォーマットのデータ値の仮数を復号化し、該復号化をされた仮数を前記データ値の指数又は前記ポインタに従って前記メモリ又はメモリ領域に格納するステップと、
（ｃ）前記コーディング・モード表示に基づき前記データ値の仮数が差分符号化されていると決定される場合は、前記データ値の指数又は前記ポインタに従って前記メモリ又はメモリ領域から該メモリ又はメモリ領域に以前に格納された更なるデータ値を読み出すステップと、
（ｄ）前記符号化された入力値から更に残余を決定し、該残余及び前記以前に格納された更なるデータ値から前記符号化された浮動小数点フォーマットのデータ値の仮数を差分復号化し、該差分復号化をされた仮数を前記メモリ又はメモリ領域において前記更なるデータ値を上書きするよう格納するステップと、
を含む方法。
【請求項８】
（ｅ）前記符号化された浮動小数点フォーマットのデータ値の指数と関連付けられたメモリは一杯であることを検出するステップ、
を更に含み、
前記差分復号化をされた仮数を、前記更なるデータ値を上書きすることで前記メモリ又はメモリ領域に格納することは、前記符号化された浮動小数点フォーマットのデータ値の指数と関連付けられた前記メモリ又はメモリ領域は一杯であることが検出されると実行される、請求項７に記載の方法。
【請求項９】
最小値より小さい指数を有する浮動小数点値及び／又は最大値より大きい指数を有する浮動小数点値は、初期値として符号化され、減少されたビット数の指数が格納され、符号化され又は復号化される、請求項１乃至８のいずれか一項に記載の方法。
【請求項１０】
浮動小数点フォーマットのデータを符号化する符号器であって、該浮動小数点フォーマットは少なくとも１つの指数及び仮数を有し、当該符号器は、
−所定のサイズを有する複数の別個のメモリ又はメモリ領域であって、異なる指数のために用いられ、該メモリ又はメモリ領域の各々は１つの指数と関連付けられる、前記メモリ又はメモリ領域と、
−現在の浮動小数点フォーマットのデータ値の仮数が以前に前記現在の浮動小数点フォーマットのデータ値の指数と関連付けられたメモリに格納されたかどうかを決定する第１の決定手段と、
−前記現在の浮動小数点フォーマットのデータ値の仮数が以前に前記メモリに格納されていなかった場合に、前記現在の浮動小数点フォーマットのデータ値の仮数を前記メモリに格納する第１の記憶手段と、前記現在の浮動小数点フォーマットのデータ値の仮数を符号化する第１の符号化手段と、
−前記現在の浮動小数点フォーマットのデータ値の仮数が前記メモリ内に以前に格納されていた場合に、前記以前に格納されていたデータ値の前記メモリ内の記憶位置を決定する第２の決定手段と、該記憶位置を指すリファレンスを符号化する第２の符号化手段と、
−前記現在の浮動小数点フォーマットのデータ値の指数又は該指数と関連付けられたメモリを指すポインタを符号化する第３の符号化手段と、を備え、
前記第１の決定手段、前記第１の記憶手段、及び前記第２の決定手段は、前記現在の浮動小数点フォーマットのデータ値の指数と関連付けられたメモリのみに適用され、
前記第１の記憶手段は、
−前記メモリ内の以前に格納された別のデータ値の中から、前記現在の浮動小数点フォーマットのデータ値の仮数に対して最小絶対差の仮数を有する別のデータ値を決定する第３の決定手段と、
−前記メモリにおいて、前記決定された以前に格納された別のデータ値を前記現在の浮動小数点フォーマットのデータ値の仮数で上書きする第２の記憶手段と、を備え、
前記第１の符号化手段は、前記現在の浮動小数点フォーマットのデータ値の仮数の前記以前に格納された別のデータ値に対する差分符号化を実行する、符号器。
【請求項１１】
−前記現在の浮動小数点フォーマットのデータ値の仮数が前記メモリに格納される前に、前記現在の浮動小数点フォーマットのデータ値の指数と関連付けられたメモリは一杯であると決定する第４の決定手段を更に備え、前記メモリが一杯である場合にのみ、前記第２の記憶手段により前記以前に格納された別のデータ値を上書きする、請求項１０に記載の符号器。
【請求項１２】
符号化された浮動小数点フォーマットのデータの復号器であって、該浮動小数点フォーマットは少なくとも１つの指数及び仮数を有し、該浮動小数点フォーマットのデータは、３Ｄメッシュ・モデルのジオメトリ・データであり、テクスチャ座標を有し、当該復号器は、
符号化された入力値を受け取り、該符号化された入力値から、該入力値に含まれる符号化された浮動小数点フォーマットのデータ値の指数又は該指数と関連付けられたメモリ又はメモリ領域を指すポインタと、仮数が差分符号化されているかどうかを示すコーディング・モード表示とを決定する決定手段と、
前記コーディング・モード表示に基づき前記データ値の仮数が差分符号化されていないと決定される場合は、前記符号化された浮動小数点フォーマットのデータ値の仮数を復号化する第１の復号化手段と、
前記復号化をされた仮数を前記データ値の指数又は前記ポインタに従って前記メモリ又はメモリ領域に格納する第１の記憶手段と、
前記コーディング・モード表示に基づき前記データ値の仮数が差分符号化されていると決定される場合は、前記データ値の指数又は前記ポインタに従って前記メモリ又はメモリ領域から該メモリ又はメモリ領域に以前に格納された更なるデータ値を読み出すメモリ・アクセス手段と、
前記符号化された入力値から更に残余を決定し、該残余及び前記更なるデータ値から前記符号化された浮動小数点フォーマットのデータ値の仮数を差分復号化する第２の復号化手段と、
該差分復号化をされた仮数を前記メモリ又はメモリ領域において前記更なるデータ値を上書きするよう格納する第２の記憶手段と、を備える復号器。
【請求項１３】
−前記現在の浮動小数点フォーマットのデータ値の指数と関連付けられたメモリ又はメモリ領域は一杯であることを検出する手段、
を更に備え、
前記第２の記憶手段は、は、前記符号化された浮動小数点フォーマットのデータ値の指数と関連付けられた前記メモリ又はメモリ領域が一杯であると検出されると、前記差分復号化された仮数を、前記更なるデータ値を上書きすることで前記メモリ又はメモリ領域に記憶する、請求項１２に記載の復号器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、浮動小数点データを符号化する方法、浮動小数点データを復号化する方法並びに関連する符号器及び復号器に関する。
【背景技術】
【０００２】
浮動小数点は数値表現の体系を表し、この体系では数字（又はビット）列が有理数を表す。幾つかの異なる浮動小数点表現がコンピュータで用いられている。最も一般的に見られる表現は、ＩＥＥＥ７５４標準に定められたものである。浮動小数点表現が固定小数点及び整数表現より優れている主な利点は、非常に広範囲の値に対応できることである。固定小数点表現であって、７個の１０進数の数字を有し、小数点が５番目の数字の後に位置すると見なされる表現は、例えば、数字１２３４５．６７、８７６５．４３、１２３．００等を表すことができる。一方で、７個の１０進数の数字を有するＩＥＥＥ７５４のｄｅｃｉｍａｌ３２フォーマットのような浮動小数点表現は、例えば０．００００１２３４５６７、１２３４５６７０００００、１．２３４５６７、１２３４５６．７等を更に表すことができる。浮動小数点フォーマットは、基数点の位置を符号化する必要があるので、僅かに多くの記憶を必要とする。
【０００３】
浮動小数点表現は、概念が科学表記法に似ている。必然的に、浮動小数点の数は仮数と指数を有する。仮数は、所与の底（又は基数）の所与の長さの符号付き数字列である。仮数は、「仮数部」又は単に「係数」とも称される。基数点は、明示的に含まれないが暗に常に仮数部内の特定の位置、多くの場合に最上位の数字の直後若しくは直前、又は右端の数字の右にあると見なされる。通常、基数点は最上位（左端）の数字の直後にある。仮数部の長さは精度を決定する。
【０００４】
指数は、符号付き整数の指数であり、指標、又は数字の大きさを変更するスケールとも表される。
【０００５】
浮動小数点の数は、通常、コンピュータ・データに、左から右へ符号ビット、指数フィールド及び仮数部（仮数とも称される）として詰め込まれる。ＩＥＥＥ７５４の２進フォーマットでは、浮動小数点の数は次のように割り当てられる。
【０００６】
表１：浮動小数点データのＩＥＥＥ７５４の２進フォーマット
【表１】
0005628317.tif 000002
２進数が正規化されるとき、仮数部の左端ビットは１になることが知られている。ＩＥＥＥの２進変換フォーマットでは、このビットは実際にはコンピュータ・データに格納されない。このビットは、「隠し」又は「インプリシット」ビットと称される。このため、単精度フォーマットは実際には２４ビットの精度を有する仮数部を有し、２倍精度フォーマットは５３ビットであり、４倍精度フォーマットでは１１３ビットである。例えば、浮動小数点データは、（左から右へ、又は最上位ビットＭＳＢから最下位ビットＬＳＢへ）１ビットの符号、８ビットの指数及び２３ビットの仮数を有してもよい。また、指数は負であってもよいので、１２７のバイアスが追加される。例えば、浮動小数点値は、符号（ｓｉｇｎ）＝０；ｅ＝１；ｓ＝１１００．１００１．００００．１１１１．１１０１．１０１１（隠しビットを含む）を有してよい。指数バイアスと指数の和は１２８なので、これは、単精度フォーマットでは０１００．００００．０１００．１００１．００００．１１１１．１１０１．１０１１（隠しビットを除く）で又は１６進数として４０４９０ＦＤＢで表される。
【０００７】
さらに、３Ｄメッシュは、３Ｄオブジェクトを表すために種々のアプリケーションで広く用いられている。３Ｄメッシュの生の表現は、通常、膨大な量のデータを必要とする。一方で、殆どのアプリケーションは、記憶及び伝送のために３Ｄメッシュのコンパクトな表現を要する。したがって、多くのアルゴリズムが、効率的に３Ｄメッシュメッシュを圧縮するために提案されている。通常、３Ｄメッシュは３種類のデータにより表される。つまり、頂点間の近接関係を記述するトポロジ・データ（接続性データとも称される）、頂点位置を指定するジオメトリ・データ、法線ベクトル、物質の反射率及びテクスチャ座標のような属性を指定するプロパティ・データである。最も広く用いられている３Ｄ圧縮アルゴリズムは、トポロジ・データ及びジオメトリ・データを別個に圧縮する。ジオメトリ・データのコーディング順序は、基礎をなすトポロジ・コーディングにより決定される。ジオメトリ・データは、通常、３つの主なステップ、つまり量子化、予測及びエントロピー・コーディングにより圧縮される。３Ｄメッシュのプロパティ・データは、通常、ジオメトリの圧縮と同様の方法により圧縮される。
【０００８】
テクスチャ座標は、テクスチャ画像の位置を頂点に対して指定するために用いられる。つまり、テクスチャ座標は、図１に示されるように、テクスチャ内のピクセルがオブジェクト空間内の三角形の面にどのようにマッピングされるかを決定する。頂点毎のテクスチャ座標の指定は、レンダリングされるジオメトリにテクスチャ画像をマッピングするための鍵である。３Ｄメッシュ・コーディングでは、各頂点は、テクスチャ座標のグループ（ｘ，ｙ）を有する。テクスチャ座標のグループは浮動小数点データを有する。座標は、範囲［０，．．．，１］に正規化される。従来の浮動小数点テクスチャ座標の圧縮方法は、正規化、予測及び残余（residue）符号化として説明できる。予測については、テクスチャ座標の予測値を得るための種々の予測スキームが知られている。例えば、平行四辺形予測である。このスキームは、ジオメトリ・データの予測にも広く用いられる。結果として生じる残余は、浮動小数点値であり、指数、符号及び仮数を有する。浮動小数点値は、非常に小さく、例えば２−１２より小さい場合、通常、ゼロとして扱うことができる。浮動小数点値が閾より大きい場合、更なる圧縮が行われる。
【０００９】
通常、指数、符号及び仮数は別個に圧縮される。これらのそれぞれに対して、コンテキストに基づくコーディング・スキームを算術コーディング（例えば、レンジ符号器）と同様に用いることができる。従来の圧縮スキームは、「Lossless  Compression  of  Floating-Point  Geometry」、Martin  Isenburg、Peter  Lindstrom、Jack  Snoeyink、Proceedings  of  CAD'  ３D、２００４年５月、Revised  journal  version  in  Computer-Aided  Design、Volume３７、Issue  ８、p.８６９-８７７２００５年７月から分かる。
【発明の概要】
【００１０】
本発明は、今までの浮動小数点データのコーディング・スキームがテクスチャ座標に含まれる冗長性を完全に活用していないという事実の認識に基づく。開示されるエントロピー・コーディング方法は、特に３Ｄメッシュ・データのテクスチャ座標の圧縮のために考案されているが、原理上は他の用途であって浮動小数点データを圧縮する必要のあるものにも適用できる。
【００１１】
本発明の一態様によると、浮動小数点フォーマットの（少なくとも１つの指数及び仮数を有する浮動小数点フォーマットの）データを符号化する方法は、現在の浮動小数点フォーマットのデータ値が以前に所定サイズのメモリに格納されたかどうかを決定するステップと、前記現在の浮動小数点フォーマットのデータ値が以前にメモリに格納されていなかった場合、前記現在の浮動小数点フォーマットのデータ値を該メモリに格納するステップと、前記現在の浮動小数点フォーマットのデータ値を符号化するステップとを含む。その他の場合（現在の浮動小数点フォーマットのデータ値が既に以前にメモリに格納されていた場合）、前記値の前記メモリ内の記憶位置を決定し、前記記憶位置を指すリファレンスを符号化する。
【００１２】
一実施形態では、別個のメモリが異なる指数のために用いられ、前記メモリの各々は所定のサイズを有し１つの指数と関連付けられる。メモリは、明示的に指数を格納しないが、仮数値のみ又は仮数値及び符号値を格納する。この実施形態では、前記現在の値が以前にメモリに格納されていたかどうかを決定するステップと、前記値を前記メモリに格納するステップと、前記記憶位置を決定するステップとは、前記現在の浮動小数点フォーマットのデータ値の指数と関連付けられたメモリのみを参照し、仮数を参照し、又は仮数と符号とを参照する。この実施形態の方法は、現在の指数に関連付けられたメモリを決定し、前記指数、前記指数の表示又は前記現在の指数に関連付けられたメモリを指すポインタを符号化することを更に有してもよい。
【００１３】
一実施形態では、符号化方法は、前記メモリが一杯であると決定するステップと、前記メモリに以前に格納された値を決定するステップと、決定された前記メモリに以前に格納された値を前記現在の値で上書きするステップと、前記現在の値を前記以前に格納された値に対して差分符号化するステップと、を更に含む。符号化されたデータは、この場合には共に、記憶位置を指すリファレンス及び差の値を有する。一実施形態では、値が差の値であることを示すコーディング・モード表示も含まれる。別の実施形態では、値は、別の方法で差の値であると認識できる。別個のメモリが異なる指数のために用いられる場合、前記のステップは、現在の指数と関連付けられたメモリを参照する。
【００１４】
本発明の別の態様によると、符号化された浮動小数点フォーマットのデータを復号化する方法であって、前記浮動小数点フォーマットは少なくとも１つの指数及び仮数を有し、当該方法は、第１の符号化された浮動小数点フォーマットのデータ値を復号化するステップと、前記第１の符号化された浮動小数点フォーマットのデータ値を所定サイズのメモリに格納するステップと、符号化された記憶位置の表示を検出するステップと、前記表示を復号化するステップと、復号化された浮動小数点フォーマットのデータ値を前記メモリから前記記憶位置で読み出すステップと、を含む。
【００１５】
復号化方法の一実施形態では、別個のメモリが異なる指数のために用いられ、前記メモリの各々は１つの指数と関連付けられている。メモリは、指数を明示的に格納する必要はなく、仮数値のみ又は仮数値及び符号値を格納すればよい。符号化された記憶位置の表示を検出するステップは、現在のデータ値の指数と関連付けられたメモリの符号化された表示を検出し復号化することを含む。復号化された浮動小数点フォーマットのデータ値をメモリから読み出すステップは、仮数を参照し又は仮数及び符号を参照する。符号化されたメモリの表示は、例えば別個の指数、指数の表示又は指数に関連付けられたメモリを指すポインタでありうる。データは、メモリから前記指数に従って読み出される。
【００１６】
一実施形態では、復号化方法は、コーディング・モード表示及び差分符号化された値を記憶位置の表示と一緒に検出し、現在の値を、差分符号化された値及び以前に格納されメモリから読み出された値又は現在の指数に従ってメモリ（つまり、現在の値の指数と関連付けられたメモリ）から読み出された値から差分符号化し、復号化された現在の値をメモリに又は現在の指数に従ってメモリに前記記憶位置に基づき格納し、それにより以前に格納された値を上書きすることを含む。差分符号化された値は、コーディング・モード表示により又は別の方法で差分符号化されたと認識されうる。
【００１７】
本発明の一態様によると、浮動小数点フォーマットのデータの符号器は、所定サイズを有するメモリと、現在の浮動小数点フォーマットのデータ値が以前に前記メモリに格納されたかどうかを、例えば検索手段で検索し及び比較手段で比較することにより決定する第１の決定手段と、前記現在の浮動小数点フォーマットのデータ値が以前に前記メモリに格納されていなかった場合、前記現在の浮動小数点フォーマットのデータ値を格納する更なる手段と、前記現在の浮動小数点フォーマットのデータ値を符号化する第１の符号化手段と、前記値が以前に前記メモリに格納されていた場合、前記値の前記メモリ内の記憶位置を決定する第２の決定手段と、前記記憶位置を指すリファレンスを符号化する第２の符号化手段と、を備える。
【００１８】
一実施形態では、符号器は、前記メモリが一杯であると決定する決定手段と、前記メモリに以前に格納された値を決定する決定手段と、決定された前記メモリに以前に格納された値を前記現在の値で上書きする記憶手段と、前記現在の値を前記以前に格納された値に対して差分符号化する符号化手段と、を更に備える。別個のメモリが異なる指数のために用いられる一実施形態では、「メモリ」は、現在の指数と関連付けられた対応するメモリを表す。
【００１９】
本発明の一態様によると、符号化された浮動小数点フォーマットのデータの復号器は、第１の符号化された浮動小数点フォーマットのデータ値を復号化する第１の復号化手段と、所定サイズを有するメモリと、前記第１の符号化された浮動小数点フォーマットのデータ値を前記メモリに格納する記憶手段と、記憶位置の表示を検出する表示検出手段と、第２の復号化された浮動小数点フォーマットのデータ値を前記メモリから前記記憶位置で読み出すメモリ・アクセス手段と、を備える。
【００２０】
一実施形態では、復号器は、異なる指数のために用いられる別個のメモリであって、前記メモリの各々は指数と関連付けられている、前記メモリを備え、前記メモリは仮数値のみ又は仮数値及び符号値を格納する。したがって、前記表示検出手段は、仮数を参照し又は仮数及び符号を参照し、第２の復号化された浮動小数点フォーマットのデータ値を前記メモリから読み出す前記手段は、全てのメモリを参照せず、前記現在の浮動小数点フォーマットのデータ値の指数と関連付けられたメモリのみを参照する。復号器は、別個の指数、又は指数の表示若しくは現在の指数と関連付けられたメモリを指すポインタを復号化する指数復号化手段と、前記指数に従ってメモリを選択する選択手段と、を更に備える。
【００２１】
一実施形態では、復号器は、コーディング・モード表示及び差分符号化された値を記憶位置の表示と一緒に検出する手段と、現在の値を前記差分符号化された値及び前記以前に格納されメモリから読み出された値から差分復号化する復号化手段と、前記復号化された現在の値を前記メモリに前記記憶位置に格納し、それにより前記以前に格納された値を上書きする記憶手段と、を更に備える。別個のメモリが異なる指数のために用いられる一実施形態では、「前記メモリ」は、現在の指数と関連付けられた対応するメモリを表す。
【００２２】
浮動小数点フォーマットは、一般的に、少なくとも指数及び仮数を有する。一実施形態では、符号も浮動小数点フォーマットに含まれ、１又は複数のメモリに格納される。
【００２３】
一実施形態では、符号化された信号は、使用されるべきメモリ・サイズの表示を有する。一実施形態では、符号器は、符号化された信号から使用されるべきメモリ・サイズを決定する手段と、実際のメモリ・サイズを決定されたメモリ・サイズとして設定する手段と、を備える。
【００２４】
本発明の有利な実施形態は、従属請求項、以下の説明及び図面に開示される。
【図面の簡単な説明】
【００２５】
本発明の例示的な実施形態は、添付の図面を参照して説明される。
【図１】テクスチャ内のピクセルがオブジェクト空間内の三角形の面にどのようにマッピングされるかを示す。
【図２】符号化方法のステップである。
【図３】一実施形態の符号化方法のステップである。
【図４】復号化方法のステップである。
【図５】一実施形態による復号器である。
【発明を実施するための形態】
【００２６】
図２は、浮動小数点フォーマットのデータを符号化する符号化フレームワーク１０の一実施形態による方法のステップを示す。浮動小数点値のシーケンスは、入力１１として方法に供給される。浮動小数点フォーマットは、少なくとも指数と仮数を有する。しかし、浮動小数点フォーマットは、符号を有する必要はない。第１のステップは、現在の浮動小数点フォーマットのデータ値について、その現在の浮動小数点フォーマットのデータ値が以前にメモリに格納されたかどうかを決定する１２。格納されていなかった場合、次のステップは、この値を（このメモリに）格納し、符号化する１６、１８。格納及び符号化するステップ１６、１８は、互いに独立しているので、同時に又はどんな順序で連続して生じてもよい。符号化ステップは、現在の浮動小数点データ値の従来の符号化を含む。
【００２７】
入力値のシーケンスのうちの２番目の値からは、同一の値が既に以前に格納されている可能性がある。したがって、格納されていると決定された場合には１２、現在の値の符号化は、現在の値がメモリから読み出せることを示す表示、及び記憶位置へのポインタ又はリファレンス、アドレスを有する。一実施形態では、別個のメモリが異なる指数のために用いられ、現在の値の符号化は、この現在の値を読み出すことができるメモリの表示（例えば、指数の表示）も有する。符号化された現在の値は、順に出力される１９。
【００２８】
現在の浮動小数点フォーマットのデータ値が以前にメモリに格納されているかどうかを決定するステップ１２は、一実施形態では、メモリ内を検索するステップ及び格納されている値を現在の値と比較するステップを含む。
【００２９】
別の実施形態では、以前に格納された値の別個のリストが保持されてもよい。
【００３０】
一実施形態では、入力値の範囲は、符号化前の所定数の指数に限定される。この限定は、閾より小さい指数を有する値を最小値に設定すること、及び／又は閾より大きい指数を有する値を最大値に設定することを含む。一実施形態では、この限定は、符号化方法の一部である。一実施形態では、符号器は、対応するクリッピング手段を有する。クリッピング手段は、入力値を最小及び／又は最大値に対応して限定する。別の実施形態では、入力値の指数は、所与の範囲に限定されることが分かっている。
【００３１】
３Ｄメッシュ・データのテクスチャ座標は、通常、同一の浮動小数点データが何回も現れるというある特性を有する。提案されるコーディング・フレームワークでは、平行四辺形予測は用いられない。代わりに、最近現れた浮動小数点データはバッファに格納されるので、次の浮動小数点データを符号化するために参照できる。同一の指数及び仮数を有する新しい浮動小数点データが来た場合、バッファ内のインデックスのみが符号化される。
【００３２】
一実施形態では、メモリが一杯であり、前の値と同一の指数を有するが異なる仮数を有する新しい浮動小数点データが来た場合、最小絶対差を有するインデックスが決定され、仮数の差が符号化される。次に、バッファは新しい浮動小数点データの仮数で更新される。
【００３３】
例として、真の３Ｄメッシュ・モデルからの座標データの一部が表２に与えられる。
【００３４】
表２：３Ｄモデルのテクスチャ座標（「Viewing  Room」）
【表２】
0005628317.tif 000003
一実施形態では、データは、以下に記載されるように符号化される。Ｘ及びＹ座標のデータ対は、符号器に入力される。以下のステップの記載はＸ座標のみを参照するが、これらのステップはＸ及びＹ座標に対して同じ方法で実行することができる。第１のステップで、入力値０．９７９９９９９５９４６８８４１６が受け取られる。値は本願明細書ではテキスト形式で書かれるが、これらの値は実際には従来の浮動小数点フォーマットで上述のように表現される。つまり、第１の入力値は、仮数ｓ１＝９．７９９９９９５９４６８８４１６及び指数−１により表現されるだろう。上述の１２７のバイアスのため、指数はｅ＝１２６である。仮数は、例えば２４ビット後に切り捨て又は四捨五入され、ｓ１ｔ＝９．７９９９９又はｓ１ｒ＝９．８００００にされてもよい。第１の入力値の仮数は、メモリ内に第１の位置に格納される。第１の位置は、アドレスＡ１（例えば、シーケンス中の第１の値で１）を有し、現在の指数ｅ＝１２６の値のみのための別個のメモリＰ１２６を有してもよい。さらに、第１の入力値は出力されるために符号化される。
【００３５】
第２の入力値は、第１の入力値と異なり、つまり０．０１９９９９９９９５５２９６５２である。これは、浮動小数点フォーマットでは、ｓ２＝１．９９９９９９９５５２９６５２（切り捨てられてｓ２ｔ＝１．９９９９９９９にされてもよく又は四捨五入してｓ２ｒ＝２．０００００にされてもよい）及びｅ＝１２５（−２の指数に対応する）として表される。符号化は、現在の値が以前に格納された値と異なると決定すること、その後、値をメモリ内に第２の記憶位置に格納すること、値を従来通り符号化することを含む。第２の記憶位置は、別個のメモリ、例えば指数ｅ＝１２５を有する値のためにのみ用いられるメモリＰ１２５及びそのメモリ内の対応するアドレスＡ２、例えばＡ２＝１を有してもよい。また、第２の入力値は、出力されるために従来通り符号化される。Ｘ座標のシーケンスからの第３の入力値は第１の入力値と同じなので、有利なことに本発明の一態様に従って符号化することができる。
【００３６】
第３の入力値は、第１の値について上述したように、再び仮数Ｓ３＝９．７９９９９９５９４６８８４１６（上述のように切り捨て又は四捨五入されてもよい）及び指数ｅ＝１２６により表される。符号化は、関連メモリＰ１２６を指数に従って決定すること、同じ値が以前にメモリに格納されていると決定することを含む。この決定は値が以前にメモリＰ１２６のアドレスＡ１に格納されていることを示すので、第３の値はアドレスＡ１及びメモリＰ１２６（又は指数ｅ＝１２６）を参照することにより符号化される。つまり、符号化はＡ１／Ｐ１２６であってよい。同等に指数の表示も符号化できるが、通常は、メモリの表示は更に圧縮できるので、更に効率的に符号化される。
【００３７】
例えば、１６個の異なる指数の範囲のみが現れうる用途では、メモリの表示は４ビットしか使用しない。８個の異なる指数の範囲のみが現れうる３Ｄメッシュ・モデルのための用途では、メモリ表示は３ビットしか使用しない。２２４個のエントリより有意に少ないメモリ・サイズ、それ故に２４ビットより有意に少ないメモリ・アドレス・サイズにより、この符号化は、従来の符号化の３２ビットより少ないビットしか使用しない。通常のメモリ・サイズは２６−２１２個のエントリであり、これは指数当たり６−１２ビットのアドレス・サイズに相当する。したがって、具体例として符号化された値は、１ビットのフラグ（符号化方法の表示）、３ビットの指数表示及び８ビットのアドレスを有し、結果として１つの値につき１２ビットになる。
【００３８】
表２に示されるように、Ｘ座標の第１のエントリの値は、数回繰り返される。同じことが他のＸ座標にも当てはまり、Ｙ座標の値についても同様である。これは、多くの３Ｄメッシュ・モデルについて言えることであり、極めて整然とした構造を有する場合が多い。さらに、例えば８バイトの限られた精度は、座標値の仮数のためには十分である。これは、更なる詳細は観察者には感知できず、無意味だからである。
【００３９】
図３は、本発明の一実施形態によるコーディング方法を示す。先ず、現在の入力値の指数が符号化される。この目的のため、指数バイアス１２７が実際の指数から差し引かれる。残りが７より大きい場合、この値は大きすぎるので無視される。その他の場合、符号及び仮数が符号化される。仮数を符号化するために、第１のステップは、その仮数をメモリ内で検索する。仮数が以前に格納されていた場合、仮数が見付かり、値は上述のように符号化される。この場合、符号化された値は、１に設定されているフラグmantissa_mode、値を読み出すことができる記憶アドレス及びメモリ表示（memry  indication）を有する。仮数が以前に格納されていなかった場合、フラグmantissa_modeは０に設定され、別の値、つまり現在の仮数に対して最小差を有する値ｓｃｌｓがメモリ（つまり、現在の指数に関連付けられたメモリ）内で検索される。最も近い格納された仮数値ｓｃｌｓが決定され、残余が計算される。残余は、最も近い仮数値ｓｃｌｓと現在の仮数値との間の差である（現在の指数の表を参照する）。一実施形態では、残余は浮動小数点値であり、正又は負である。次のステップで、残余の符号、仮数及び指数は符号化される。一実施形態では、残余は、閾値より小さい場合又はその指数が指数閾値より小さい場合にのみ符号化される。
【００４０】
次に、（現在の指数の）仮数メモリが更新される。一実施形態では、メモリは大きく（例えば２１２エントリ）、一旦メモリが一杯になると、それ以上値がメモリに書き込まれない。別の実施形態では、メモリは小さくてもよく、メモリが一杯になった場合、以前に格納された仮数値は現在の仮数値で置き換えられてもよい。これは、オーバーフローを防ぎ、小さいバッファを使用できるようにする。一実施形態では、上述の最も近い格納された仮数値ｓｃｌｓは現在の仮数値で置き換えられる。仮数メモリが一杯でない場合、現在の仮数値は付け足されるだけである。
【００４１】
一実施形態に従い符号化された値は、符号化された指数、符号、符号化モード表示mantissa_mode、残余表示、残余の符号及び残余を有する。この指数は、同時に、使用されるべき仮数メモリの表示である。一実施形態では、符号化された値は符号を有しない。なぜなら、全ての入力値は正であると定められるからである。
【００４２】
図４は、例示的な復号化方法４０を示す。符号化された入力値のシーケンス４１が受け取られる。各値について、その値の指数及び符号化モード表示mantissa_modeが決定される４２。表示が第１のモード（例えば、従来フォーマットのモード）を示す場合、受け取られた値は通常通り復号化され、その仮数は決定された指数に従ってバッファに格納される４６、４８。その他の場合、表示が第２のモード（例えば、仮数モード）を示す場合、受け取られた値の一部はメモリ・アドレスとして解釈され、実際の仮数の値が、その指数に関連付けられたメモリのメモリ・アドレスから読み出される４４。受け取られた値を通常通り復号化しその仮数をバッファに格納するステップ４６、４８は互いに独立しており、任意の順次的な順序で又は図４（ｂ）に示されるように同時に実行されてもよい。
【００４３】
復号器は値をバッファに格納する又は値をバッファから読み出すために符号器と同じ決定を行い、バッファは所定のサイズを有するために同時に一杯になるので、符号化／復号化処理の任意の特定の段階で、復号器のバッファの中身は符号器のバッファの中身の正確なコピーである。
【００４４】
一実施形態では、バッファが一杯になったとき、それ以上値はバッファに書き込まれない。この実施形態では、バッファは大きいことが望ましい（例えば２１２エントリ）。
【００４５】
別の実施形態では、バッファのエントリは更新されてもよい。この実施形態では、復号化方法は、残余モード表示、浮動小数点値及び符号を、仮数モード表示と一緒に検出するステップと、その後、浮動小数点値及び符号を残余として解釈するステップとを更に有する。次に、仮数モードでは、値はメモリから読み出され、残余が読み出された値に加算される。結果として生じた和は出力値、つまり復号化された座標値である。さらに、復号化された座標値は、メモリに現在のアドレスに基づき格納され、以前に読み出された値を置き換える。この実施形態の利点は、バッファが比較的少ないエントリ、例えば２６個しか有しなくてよいことである。これは、例えば３Ｄメッシュ・モデルの記述が領域毎に進む場合、等しい値は互いに近くに現れる傾向があるからである。
【００４６】
値のバッファへの格納及び値のバッファからの読み出しは、符号器及び復号器で同期している。つまり、対応するバッファが利用可能であり、バッファは同一のデータを対応するエントリに有している。これは、復号器で、符号器のステップに対応するステップを実行することにより保証される。入力値はメモリが一杯でない限りメモリに格納され、メモリが一杯だった場合には以前に格納された値を置き換える４４。
【００４７】
異なる指数に関連付けられた異なるメモリは、１つのメモリ内の所定サイズの異なる領域として設けられてもよいことに留意する。
【００４８】
符号器及び復号器はそれらのメモリの使用、つまりメモリが一杯か否かの決定を同期させる必要があるので、メモリは所定のサイズ（つまり、エントリ数）を有する。一実施形態では、符号器で用いられるメモリ・サイズは復号器へ送られ、復号器が必要なメモリ・サイズを決定し、自身のメモリを相応して設定できるようにする（復号器が必要とされるより多くの利用可能なメモリを有するとする）。
【００４９】
表３は、Ｈ．２６４／ＡＶＣで使用可能なビットストリームの例示的なシンタックスを記載する。
表３：テクスチャ座標のビットストリーム・シンタックス
【表３】
0005628317.tif 000004
表３では、ａｅ（ｖ）は数学的符号化を表し、Ｈ．２６４／ＡＶＣの数学的コーディングと似ている。
【００５０】
例示的な実施形態では、ビットストリームのセマンティックは次の通りである。
【００５１】
exponent[i]は浮動小数点デ―タのテクスチャ座標のreal_exponentを得るために用いることができる。例えば、ｘについてｉ＝０、ｙについてｉ＝１である。３Ｄメッシュ・コーディングでは、全てのテクスチャ座標は［０，．．．，１］の範囲内にスケーリングされるので、real_exponentは常に１２７より小さいが、１２７に近い。したがって、１２７からreal_exponentを差し引いたものをexponent[i]として設定する。real_exponentが１２０より小さい場合、これは小さすぎるので、指数及び浮動小数点データはゼロとして設定される。したがって、３ビットが用いられ次のようにexponent[i]を示す。
【００５２】
【数１】
0005628317.tif 000005
表４：Real_exponent及びexponent（指数）
【表４】
0005628317.tif 000006
sign[i]は浮動小数点データのテクスチャ座標の１ビットの符号である。通常、０は正の値を示す。
mantissa_mode[i]は１ビットのフラグである。仮数モード（mantissa  mode）が１のとき、real_mantissaはバッファに参照インデックスとともに格納されたデータである。仮数モードが０のとき、real_mantissaは参照インデックス及び復号化された仮数の残余とともにバッファに格納されたデータである。
ref[i]はｌｏｇ２（buffer_size）個のビットを有するアドレス、つまりバッファ内の参照仮数のインデックスである。
mantissa_sign[i]は１ビットのフラグであり、仮数の残余の符号を示す。
mantissa_residue[i]は２３ビットの浮動小数点値であり、実際の仮数とバッファ内の参照仮数との間の残余を示す。
表５：仮数バッファを更新する手順
【表５】
0005628317.tif 000007
表５は、仮数メモリを更新する例示的な手順を示す。符号器及び復号器のバッファは同じ方法で更新される。現在の値ｉ、その指数、参照アドレスｒｅｆ及び仮数の残余に対して、指数exp[i]に関連するバッファは、エントリ毎に検索され、仮数が比較される。
【００５３】
発明者等により行われたバッファ・サイズの分析により、僅かなメモリ空間しか必要ないことが分かった。この実施形態では、２つのバッファがあり、一方はｘのため、他方はｙのためである。各バッファには、７個の指数（１２０，．．．，１２６）があり、これらの指数について、仮数の値が格納される必要がある。例示的に、各仮数を格納するために２４ビット（３バイト）が用いられ、１つの指数につき全部で６４個の仮数が格納される。したがって、必要なバッファ・サイズは２ｘ７ｘ６４ｘ３＝２６８８バイト＝２．６２５ｋＢである。
【００５４】
いずれにしても、異なる用途のシナリオで、バッファ・サイズは相応して変更することができる。たとえば、各指数について格納された仮数の数は、２の冪乗（例えば、８、３２、１２８、２５６）又は別の数である。
【００５５】
バッファ更新スキームは、別に設計されうる。一実施形態では、現在の仮数について、同じ値がバッファ内に見付からずバッファが一杯だった場合、異なる更新スキームは次のように説明できる。（例えば、特定の計数方法を用いることにより）バッファ内のどの仮数が最も古いかを決定する。次に、新しい仮数は、最小の絶対差を有する仮数を置き換えるのではなく、古い仮数を置き換える。これは、頻繁に用いられる仮数は長く維持されるので、より効率的であるが、幾らか多くの処理労力を必要とする。
【００５６】
本発明は、３Ｄメッシュのテクスチャ座標の冗長性を利用し、浮動小数点データのための効率的なエントロピー・コーティング・スキームを提案する。これは特にテクスチャ座標に有利である。なぜなら、テクスチャ座標は、同一の浮動小数点データが多数回現れる特徴を有する場合が多いからである。これは、そのような３Ｄメッシュ・モデルの規則的構造のためである。したがって、平行四辺形予測は開示されたコーディング・フレームワークでは用いられない。代わりに、最近に使用された浮動小数点データは、バッファに格納されるので、次の浮動小数点データを符号化及び復号化するための参照としての機能を果たす。同一の指数及び仮数を有する新しい浮動小数点データが来た場合、バッファ・メモリ内のインデックスが符号化され、メモリの表示が符号化されるだけである。その他の場合、一実施形態では、最小絶対差を有するインデックス及び仮数の差が符号化され、バッファは新しい浮動小数点データで更新される。
【００５７】
符号器のメモリ・サイズは、本発明の幾つかの態様で重要なパラメータである。したがって、符号器で用いられるメモリ・サイズは、復号器へ送信されてもよい。復号器がより多くの利用可能なメモリ空間を有する場合、復号器は指示されたエントリ数だけ使用するよう自身のメモリを相応して設定してもよい。一実施形態では、メモリ・サイズは慣例により定められ、符号器と復号器とで等しい。
【００５８】
符号器を以上に説明した。一実施形態では、符号器は、メモリ又は現在の指数に関連付けられたメモリが一杯であると決定する決定手段と、メモリ又は現在の指数に関連付けられたメモリに以前に格納された値を決定する決定手段と、決定されたメモリ又は現在の指数に関連付けられたメモリに以前に格納された値を現在の値で上書きする記憶手段と、現在の値を以前に格納された値に対して差分符号化する符号化手段と、を更に備える。
【００５９】
復号器が以上に説明された。一実施形態では、復号器は、コーディング・モード表示及び差分符号化された値を記憶位置の表示と一緒に検出する手段と、現在の値を差分符号化された値及び以前に格納され現在の指数に従ってメモリ（つまり、現在の指数と関連付けられたメモリ）から読み出された値から差分符号化する手段と、復号化された現在の値を現在の指数に従ってメモリ（つまり、現在の値の指数と関連付けられたメモリ）にその記憶位置で格納し、それにより以前に格納された値を上書きする記憶手段と、を更に備える。
【００６０】
本発明は、浮動小数点データを圧縮する種々の用途に適用可能である。特に、本発明は、３Ｄオブジェクトの浮動小数点データを使用及び圧縮する、例えばゲーム、工学的設計、建築の通路、電子商取引、仮想現実及びサイエンティフィック・ビジュアライゼーションを含む用途にとって有利である。
【００６１】
本発明の基本的な新規な特徴は本発明の好適な実施形態に適用されるとして示され、記載され及び指摘されたが、記載された機器及び方法において、開示された装置の形式及び詳細において、及びそれらの動作において、種々の省略及び代替及び変更が本発明の精神から逸脱することなく当業者により行われうることが理解されるだろう。本発明は３Ｄメッシュ・モデルの浮動小数点データに関して開示されたが、当業者は、本願明細書に記載された方法及び装置が浮動小数点データを使用、符号化又は復号化する任意の用途に適用できることを認めるだろう。実質的に同一の機能を実質的に同一の方法で実行して同一の結果を達成する要素の全ての組合せは本発明の範囲内であることが明確に意図される。要素をある記載された実施形態から他の実施形態に置換することも、完全に意図され予期される。本発明は単に例として記載されており、詳細の変更は、本発明の範囲から逸脱することなく行うことができる。説明及び（適切な場合には）請求項及び図面中に開示された各特徴は、独立して又は任意の適切な組合せで提供されてもよい。特徴は、必要に応じて、ハードウェア、ソフトウェア又は両者の組み合わせで実施されてもよい。請求項中に現れる参照符号は、説明のためのみであり、請求項の範囲を限定する効果を有しない。
【図１】
0005628317.tif 000008
【図２ａ）】
0005628317.tif 000009
【図２ｂ）】
0005628317.tif 000010
【図３】
0005628317.tif 000011
【図４ａ）】
0005628317.tif 000012
【図４ｂ）】
0005628317.tif 000013
【図５】
0005628317.tif 000014