(57)【要約】適応圧縮、多次元予測、複数符号復号のオプションを有する、改良された、ロスレス・データ・変換の操作である。
2008535327.tif 000002
【特許請求の範囲】
【請求項１】
各入力群が、値を有し、配列は複数の行及び列を有し、以下の操作から構成されることを特徴とする入力群の配列の処理方法。配列の各要素に対し、以下の操作より構成される演算を実行する。
所定の関数を、対象の要素と選択された所定の位置関係の最初の要素に適用し、対象の要素の値を予測する。ここで、最初の要素は、対象の要素と同じ行にある要素、もしくは対象の要素と同じ列にある要素のいずれかから構成されることを特徴とする。
対象の要素の予測値とその実際値の差から構成されることを特徴とする１−Ｄエラーの計算及び計算された１−Ｄエラーを、エラーフレームに対象のピクセルと共に入力する方法から構成されることを特徴とする演算を実行する。
【請求項２】
前記選択された所定の位置関係が、対象の要素の１つ左の列もしくは２つ左の列のいずれかから構成されることを特徴とする請求項１に記載の方法。
【請求項３】
前記所定の関数が、対象の要素の直ぐ左に有る要素の値をとることを特徴とする請求項１に記載の方法。
【請求項４】
前記所定の関数が、少なくとも線形関数、非線形関数、フラクタル、ウェーブレット、多項式関数のいずれか１つから構成されることを特徴とする請求項１に記載の方法。
【請求項５】
少なくとも１つの信号保持媒体が、デジタル・データ処理機により実行できる機械可読命令から成るプログラムで、次の操作を実行するものを実現する。すなわち、入力群の、それぞれが値を有し、複数の行と列を有する配列を処理する演算を実行し、演算は次の操作より成る。配列の各要素に対し、以下の操作より構成される演算を実行する。
所定の関数を、対象の要素と選択された所定の位置関係の最初の要素に適用し、対象の要素の値を予測する。ここで、最初の要素は、対象の要素と同じ行にある要素、もしくは対象の要素と同じ列にある要素のいずれかから構成されることを特徴とする。
対象の要素の予測値とその実際値の差から構成されることを特徴とする１−Ｄエラーの計算及び計算された１−Ｄエラーを、エラーフレームに対象のピクセルと共に入力する方法から構成されることを特徴とする演算を実行する。
【請求項６】
前記選択された所定の位置関係が、対象の要素の１つ左の列もしくは２つ左の列のいずれかから構成されることを特徴とする請求項５に記載の媒体。
【請求項７】
前記所定の関数が、対象の要素の直ぐ左に有る要素の値をとることを特徴とする請求項５に記載の媒体。
【請求項８】
前記所定の関数が、少なくとも線形関数、非線形関数、フラクタル、ウェーブレット、多項式関数のいずれか１つから構成されることを特徴とする請求項５に記載の媒体。
【請求項９】
複数の導電要素が接続された回路が、それぞれが値を有する入力要素群の、複数の行と列を有する配列を処理する演算を実行するように設計され、その演算は以下の操作から構成されることを特徴とする。
所定の関数を、対象の要素と選択された所定の位置関係の最初の要素に適用し、対象の要素の値を予測する。ここで、最初の要素は、対象の要素と同じ行にある要素、もしくは対象の要素と同じ列にある要素のいずれかから構成されることを特徴とする。
対象の要素の予測値とその実際値の差から構成されることを特徴とする１−Ｄエラーの計算及び計算された１−Ｄエラーを、エラーフレームに対象のピクセルと共に入力する方法。
【請求項１０】
前記選択された所定の位置関係が、対象の要素の１つ左の列もしくは２つ左の列のいずれかから構成されることを特徴とする請求項９に記載の回路。
【請求項１１】
前記所定の関数が、対象の要素の直ぐ左に有る要素の値をとることを特徴とする請求項９に記載の回路。
【請求項１２】
前記所定の関数が、少なくとも線形関数、非線形関数、フラクタル、ウェーブレット、多項式関数のいずれか１つから構成されることを特徴とする請求項９に記載の回路。
【請求項１３】
複数の配列に分割可能なデータ・ストリームを処理する方法が以下の操作から構成されることを特徴とする。ここで、それぞれの配列は複数の入力要素を持ち、各入力要素は値を持ち、それぞれの配列は，少なくとも最小の数の列と行を持っている。
対象の配列の各対象要素に、以下の操作から構成される第一の演算を実行する。
２−Ｄエラーを、所定の関数を、対象の要素と選択された所定の位置関係の最初の要素に適用し計算する。ここで、最初の要素は、対象の要素として、他の行と列の要素を含む。
計算された２−Ｄエラーを、エラーフレームに、対象のピクセルと共に入力する。
【請求項１４】
計算操作が、以下の操作から構成されることを特徴とする請求項１３に記載の処理方法。
第一の値を、所定の関数を対象の要素の所定の近傍に適用して計算する。
第二の値を、所定の関数を、対象の要素の近傍である要素の所定の近傍に適用して計算する。
２−Ｄエラーを、第一の値と第二の値の差として計算する。
【請求項１５】
計算操作が、以下の操作から構成されることを特徴とする請求項１３に記載の処理方法。
第一の値を、所定の関数を対象の要素の所定の近傍に適用して計算する。
複数のサブシーケンスの値を個々のケースにおいて、所定の関数を、対象の要素の近傍である要素の所定の近傍に適用して計算する。
第一の値と、各サブシーケンスの値との差を計算する。
計算された差を合計し、２−Ｄエラーを計算する。
【請求項１６】
前記の計算された差を合計する演算が、平均することを含むことを特徴とする請求項１５に記載の処理方法。
【請求項１７】
前記所定の関数による計算結果が、所定の関数を適用した結果が、所定の要素の所定の１つの値から構成されることを特徴とする請求項１５に記載の処理方法。
【請求項１８】
第一の要素が、対象の要素に対して、１つ左の列、１つ上の行、１つ上の行で１つ右の列、１つ上の行で１つ左の列に位置することを特徴とする請求項１３に記載の処理方法。
【請求項１９】
演算がさらに、対象の第一の要素の位置を、圧縮手法で得られた圧縮率、入力ストリーム内の色の分布、入力ストリームの内容、その他の要素の少なくとも１つに応じて、対象の要素に関係する最初の要素の位置を調整することを特徴とする請求項１３に記載の処理方法。
【請求項２０】
前記各配列が、要素の異なる時間での状態を表現する。
各対象の要素が、配列で独自の位置を占める。
配列の各要素への演算がさらに、対象の要素の２−Ｄエラーを少なくとも１つの所定の過去の配列の内容から計算する、３−Ｄエラーを、現在の配列の２−Ｄエラーと、少なくとも１つの過去の配列の２−Ｄエラーを合わせて計算する、計算された２−Ｄエラーをエラーフレームに入力する代わりに、３−Ｄエラーをエラーフレームの中に、対象のピクセルと並べて入力する操作から構成されることを特徴とする  請求項１３に記載の処理方法。
【請求項２１】
少なくとも１つの信号保持媒体が、デジタル・データ処理装置により実行できる機械可読命令から成るプログラムで次の演算を実行するものを実現する。複数の配列に分割可能なデータ・ストリームを処理する方法が以下の操作より構成されることを特徴とする。ここで、それぞれの配列は複数の入力要素を持ち、各入力要素は値を持ち、それぞれの配列は，少なくとも最小の数の列と行を持っている。
対象の配列の対象の各要素に、以下の操作から構成される第一の演算を実行する。
２−Ｄエラーを、所定の関数を、対象の要素と選択された所定の位置関係の最初の要素に適用し計算する。ここで、最初の要素は、対象の要素として、他の行と列の要素を含む。
計算された２−Ｄエラーを、エラーフレームに、対象のピクセルと共に入力する。
【請求項２２】
計算操作が、以下の操作から構成されることを特徴とする請求項２１に記載の媒体。
第一の値を、所定の関数を対象の要素の所定の近傍に適用して計算する。
第二の値を、所定の関数を、対象の要素の近傍である、対象の要素の近傍に作用して計算する。
２−Ｄエラーを、第一の値と第二の値の差として計算する。
【請求項２３】
計算操作が、２−Ｄエラーを、計算された差を合わせて計算し、第一の値を、所定の関数を対象の要素の所定の近傍に適用して計算し、複数のサブシーケンスの値を個々のケースにおいて、所定の関数を、対象の要素の近傍のである所定の要素の所定の近傍に適用して計算し、第一の値と、各サブシーケンスの値との差を計算し、２−Ｄエラーを、計算された差の合計として計算する操作から構成されることを特徴とする請求項２１に記載の媒体。
【請求項２４】
前記の計算された差を合わせる演算が、平均することを含むことを特徴とする請求項２３に記載の媒体。
【請求項２５】
前記所定の関数による計算結果が、所定の関数が適用された、所定の要素の１つの値から構成されることを特徴とする請求項２３に記載の媒体。
【請求項２６】
第一の要素が、対象の要素に対して、１つ左の列、１つ上の行、１つ上の行で１つ右の列、１つ上の行で１つ左の列に位置することを特徴とする請求項２１に記載の媒体。
【請求項２７】
演算がさらに、対象の第一の要素の位置を、圧縮手法で得られた圧縮率、入力ストリーム内の色の分布、入力ストリームの内容、その他の要素の少なくとも１つに応じて、対象の要素に関係する最初の要素の位置を調整することを特徴とする請求項２１に記載の媒体。
【請求項２８】
前記各配列が、要素の異なる時間での状態を表現する。
各対象の要素が、配列で独自の位置を占める。
配列の各要素への演算がさらに、対象の要素の２−Ｄエラーを少なくとも１つの所定の過去の配列の内容から計算する、３−Ｄエラーを、現在の配列の２−Ｄエラーと、少なくとも１つの過去の配列の２−Ｄエラーを合計して計算する、計算された２−Ｄエラーをエラーフレームに入力する代わりに、３−Ｄエラーをエラーフレームの中に、対象のピクセルと並べて入力する操作から構成されることを特徴とする請求項２１に記載の媒体。
【請求項２９】
複数の導電要素が接続された回路が、データ・ストリームの処理を実行するように設計され、た回路。すなわち、複数の配列に分割可能なデータ・ストリームを処理する方法が以下の操作から構成されることを特徴とする。ここで、それぞれの配列は複数の入力要素を持ち、各入力要素は値を持ち、それぞれの配列は，少なくとも最小の数の列と行を持っている。
対象の配列の各対象要素に、以下の操作から構成される第一の演算を実行する。
２−Ｄエラーを、所定の関数を、対象の要素と選択された所定の位置関係の最初の要素に適用し計算する。ここで、最初の要素は、対象の要素として、他の行と列の要素を含む。
計算された２−Ｄエラーを、エラーフレームに、対象のピクセルと共に入力する。
【請求項３０】
計算操作が、第一の値を所定の関数を、対象の要素の所定の近傍に適用して計算し、第二の値を所定の関数を、対象の要素の近傍である対象の要素の所定の近傍に適用して計算し、２−Ｄエラーを、第一の値と第二の値の差として計算する方法から構成されることを特徴とする請求項２８に記載の回路。
【請求項３１】
計算操作が、第一の値を所定の関数を、対象の要素の所定の近傍に適用して計算し、複数のサブシーケンスの値を個々のケースにおいて、所定の関数を、対象の要素の近傍である所定の近傍に適用して計算し、第一の値と、各サブシーケンスの値との差を計算し、２−Ｄエラーを、計算された差を合わせて計算する操作から構成されることを特徴とする請求項２８に記載の回路。
【請求項３２】
前記の計算された差を合わせる演算方法が、平均することを含むことを特徴とする請求項３１に記載の回路。
【請求項３３】
前記所定の関数による計算結果が、所定の関数が適用された、所定の要素の１つの値から構成されることを特徴とする請求項３１に記載の回路。
【請求項３４】
第一の要素が、対象の要素に対して、１つ左の列、１つ上の行、１つ上の行で１つ右の列、１つ上の行で１つ左の列に位置することを特徴とする請求項２８に記載の回路。
【請求項３５】
演算がさらに、対象の第一の要素の位置を、圧縮手法で得られた圧縮率、入力ストリーム内の色の分布、入力ストリームの内容、その他の要素の少なくとも１つに応じて、対象の要素に関係する最初の要素の位置を調整することを特徴とする請求項２８に記載の回路。
【請求項３６】
前記各配列が、要素の異なる時間での状態を表現する。各対象の要素が、配列で独自の位置を占める。
配列の各要素への演算がさらに、対象の要素の２−Ｄエラーを少なくとも１つの所定の配列の内容から計算する、３−Ｄエラーを、現在の配列の２−Ｄエラーと、少なくとも１つの過去の配列の２−Ｄエラーを合計して計算する、計算された２−Ｄエラーをエラーフレームに入力する代わりに、３−Ｄエラーをエラーフレームの中に、対象のピクセルと並べて入力することから構成されることを特徴とする、請求項２８に記載の回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、圧縮、解凍のようなロスレスデータ変換に関する。とりわけ本発明は適応型データ圧縮、多次元予測及び／または複数符号復号を利用するロスレス変換に関する。
【背景技術】
【０００２】
ビデオデータは通常巨大なメモリブロックを用いて符号化されている。１つのビデオフレームにでさえ何メガバイトもメモリを必要とする。ビデオデータを記憶させ、高コミュニケーション帯域幅を用いての転送に、膨大なメモリを必要とする。そのため、ビデオデータを圧縮することは非常に有利となる。しかしながら、一部の圧縮方法ではその過程で情報が失われていた。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
いくつかのアプリケーションは種々の程度のロスへの耐性を有しているが、多くアプリケーションはロスレス圧縮を必要としている。
【０００４】
典型的なロスレスビデオデータ圧縮は予測符号化（DPCM）という方法が用いられている。これは現在の画素の値が隣接するピクセルとの差分に置き換えられるものである。画素の値は走査線に沿ってややゆっくりと変化するため、値の変化はゼロに近いので、圧縮アルゴリズムの作成はとりわけ効果的である。しかしながら、ゆっくりとした画素の値の間の変化は、垂直または対角線上にも多く発生する。画像の捜査線上の隣接するピクセルだけを利用する手法は最適では無い。
【０００５】
リアルタイムビデオデータの圧縮にハフマン符号化を用いることができる。ハフマンツリーがつくられ、ツリーはデータの再符号化に用いられる。基本的な考え方は、頻繁に出現するビデオコードがより少ない数のビットのハフマンコードに置き換えられる。
【０００６】
めったに起こらない、たまに現れるビデオコードはビデオコード自体より多くの数のビットを要求するハフマンコードで記述されることがある。これにもかかわらず、ハフマンコードを用いただけで、全体でみると圧縮比の向上になる。
【０００７】
ハフマン符号化により得られた利益や他のデータ圧縮分野における前進にもかかわらず、現在の発明者たちは機能強化や改善、関連する分野における種々の問題に対する解決手法の開発に力を注いできた。
【課題を解決するための手段】
【０００８】
詳細な説明
ハードウェア
構成
開示された発明の１つの局面はデータ変換装置、様々なハードウェアコンポーネントとの相互接続によって具体化される可能性を有する、に関係がある。いくつかの例を挙げると、データ変換装置は特定用途向け集積回路（ＡＳＩＣ）、ビデオカード、ラックに差した電子モジュール、外部処理モジュール、コンピュータプログラム、サブルーチン、ファームウェア、論理回路または様々な他の形体で実現することができる。
【０００９】
データ変換装置はさらにそれぞれが１つ以上のハードウェアデバイス、ソフトウェアデバイス、１つ以上のハードウェアまたはソフトウェアデバイスの一部もしくは前記の組み合わせにより実現される、のように様々なサブコンポーネントを含むことがある。以上のハードウェアの構造の特色、典型的なデジタルデータ処理装置、論理回路および信号保持媒体に関して以下により詳細に記載されている。
【００１０】
典型的なデジタルデータ処理装置
ある例として、データ変換装置はデータ処理実体、それ自体がさまざまなフォームによりもたらされる、により実行される。１つの例が、ハードウェアコンポーネントと、図９のデジタルデータ処理装置９００との相互接続により例示されているデジタルデータ処理装置である。
【００１１】
装置９００は例えばストレージ９０４と結合されたマイクロプロセッサ、パーソナルコンピュータ、ワークステーション、コントローラ、マイクロコントローラ、ステートマシンまたは他の処理マシンのようにプロセッサ９０２を含む。現在の例では、ストレージ９０４は不揮発性ストレージ９０８と同様高速アクセスストレージ９０６を含む。高速アクセスストレージ９０６はランダムアクセスメモリ（ＲＡＭ）を含み、プロセッサ９０２により実行されたプログラミング指令を記憶させられる。不揮発性ストレージ９０８は例えばバッテリーバックアップＲＡＭ、ＥＥＰＲＯＭ、フラッシュＰＲＯＭ、１つ以上の磁気データストレージディスク、例えば「ハードドライブ」、テープドライブまたは他の適当なストレージデバイスを含む。装置９００はまた、入出力装置９１０、例えばライン、バス、ケーブル、電磁気リンク、チャンネル、インターフェースやプロセッサ９０２が装置９００への外部の他のハードウェアとデータ交換を行う他の手段、を含む。
【００１２】
以上の詳細な説明にもかかわらず、上述の装置が本発明を超えない範囲で異なる構造のマシンで実施できることを、本開示の恩恵を享受する当業者は理解する。特別な例として、９０６、９０８のいずれかの部品は除去出来る。更に、記録装置９０４、９０６及び／または９０８は処理装置９０２上で実現し有る、また装置９００の外部に準備される。
【００１３】
信号保持媒体
本開示のいずれかの機能性が１つ以上の、様々な信号保持媒体で実施され得る機械実施プログラム制御列を１つ以上用いて実装される。図９ではこのような信号保持媒体は例えば、記録装置９０４や他の信号保持媒体、例えばプロセッサ９０２により直接あるいは間接的にアクセスできる取り外し可能なメディア１０００（図１０）を含む。たとえ、記録装置９０６、メディア１０００や他の場所に保管されていても、命令は機械読み取り可能なデータ記録メディアに保管される。
【００１４】
いくつかの例では直接記録装置、例えば通常の「ハードドライブ」、「ＲＡＩＤ」、もしくは他の直接アクセス記憶装置「ＤＡＳＤ」、磁気もしくは光学テープなどのシリアルアクセス記憶装置、電子不揮発性メモリ、例えばＲＯＭ、ＥＰＲＯＭ、フラッシュＰＲＯＭあるいはＥＥＰＲＯＭ、バッテリーバックアップＲＡＭ、光記憶装置、例えばＣＤ−ＲＯＭ、ＷＯＲＭ、ＤＶＤやデジタル光学テープ、紙のパンチ・カードもしくは、アナログもしくはデジタル転送メディアやアナログ通信リンクや無線通信などの他の適当な信号保持媒体を包含している。例示された実施形態で、機械可読な命令はアセンブリー言語やＣ言語をコンパイルした、ソフトウェアオブジェクトコードを含んでいる。
【００１５】
論理回路
上記で議論された信号保持媒体と対照的に、異なる実施形態ではコンピュータで実行された命令の代わりに論理回路を用いてここで説明する演算制御列の一部または全部を実行する。速度、費用、ツールの値段等の要求に応じて、論理回路は、数千の小さな集積回路よりなる特定用途向け集積回路（ＡＳＩＣ）を製作して実現される。そのようなＡＳＩＣはＣＯＭＳ、ＴＴＬ、ＶＬＳＩまたは他の適当な工事で実行する。他の代替手段はデジタル信号処理チップ（ＤＳＰ）、ディスクリート部品（例えば抵抗、コンデンサ、ダイオード、インダクタやトランジスタ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、プログラマブルロジックアレイ（ＰＬＡ）、プログラマブルロジックデバイス（ＰＬＤ）などを含む。意図的な制限が全くなければ、図１１は論理回路のための典型的なパッケージ１１００を説明する。ほぼ無尽蔵にある論理回路のためのパッケージの種類は商品、専門書、関連技術に関する知識などの対象である。
【００１６】
演算
概要
様々な構造上の特色を説明したので、開示された発明の運用的側面の説明をいくつか行う。上記されたように、開示された発明のいくつかの運用的側面は入力シンボルのロスレス符号化及び復号過程を伴う。さらなるいくつかの改良は適応型圧縮、多次元予測及び複数符号復号を含む。
【００１７】
以下の記述はビデオ圧縮への応用について強調する。今日のデジタルメディア爆発で、ビデオ圧縮はデジタルビデオカメラ、Ｘ線マシン、コンピュータ支援トモグラフィー、電波媒体などの分野に応用されている。それでもなお、ビデオ圧縮アプリケーションは意図的な制限なしに提供され、この開示された発明は実質どのような入力シンボルの制御列、一例としてオーディオシグナル、ラジオ電波、レーダー信号など、等しく圧縮解凍適用できる。この点から、「ピクセル」などの語は「部分」を示す、より広い有用の例示的実施形態を例証することを意図し、利用されている。
【発明の効果】
【００１８】
広く、今回開示された発明の１つの側面が適応型圧縮、多次元予測及び／または複数符号復号を随意使う事による改良されたロスレスデータ変換の過程である。
【発明を実施するための最良の形態】
【００１９】
最適近接前処理及びハフマン符号化方法
図１は高速前処理最適近隣圧縮方法の実施形態を示しており、ここでは一般に参照番号１００で示されている。例では大きさ４平方のブロックを用いているが、一般的にはｎ×ｍ、ｎは走査線の数より小さい任意の数、ｍは１つの走査線上のピクセル数より小さい任意の数、のブロックを用いることができると当業者は容易に理解する。
【００２０】
方法１００で圧縮する典型的なビデオストリームは連続したビデオフレームの列、各ビデオフレームは数本の走査線を含み、各走査線は多くのピクセルを含む。方法１００は現在の走査線アドレスカウンターをフレーム最上部の走査線に設定する操作１０２を含む。操作１０４は現在の走査線の下に残る走査線数が４（ｎ）以下であるか調べる。そうでない場合、操作１０６が現在の走査線アドレスカウンターを４（ｎ）下げる。本記述及び図１では例として走査線をフレームの一番下から上へ順に番号を付している。しかしながら、実際は、どのような適当な番号の付し方用いても良い。
【００２１】
操作１０８はカーソルアドレスカウンターを一番目、もしくは走査線の一番左のピクセルにセットする。操作１１０はカーソルの右のピクセルが４（ｍ）以下か調べる。その場合、コントロールは操作１０４に戻る。そうでなければ操作１１２、カーソルアドレスカウンターを右に４（ｍ）進める。例えば、操作１１４はカーソルピクセルが一番下の右端に位置する４平方（ｎ×ｍ）ピクセルの行列を選択する。
【００２２】
操作１１６は４個のピクセル差分値（デルタ）、左差分、左上差分、上差分、右上差分、を選択したピクセル行列について計算する。評価測定は４つの差分計算による各差分行列に応じて行われる。評価測定が最良（値が最低）の差分行列が選択され、元の行列は選択された差分行列とマーカーで置換される。マーカーにはハフマン符号化が施される。
【００２３】
操作１１８はピクセル左差分計算を現在の走査線の下の残り及び最上部の走査線に適用する。ピクセル左差分計算は一番左のピクセルを除き、走査線上の全てのピクセル値を置換する。各ピクセルはそのピクセル値とすぐ左のピクセル値との差で置換される。操作１２２はランレングス符号化を適用する。例えば、０，０，０，０，１，１，１，１，２，２，２，２のように、同じ値が連続したピクセル値の列の有る場合、これは（４，０）、（４，１）、（４，２）という最初の整数は２番目の整数の繰り返し数を示す、   タプルの組として符号化される。操作１２４は次にハフマンで全体の結果のフレームの各ピクセルを符号化する。また任意にノイズが多く効果がない画像に対してランレングス符号化がスキップされる。その場合、ランレングス符号化はそれぞれの領域のマーカーに適用される（変化が少しずつで、ノイズが少ない）。
【００２４】
開示された発明の方法の実施形態では、左差分計算は、ピクセル値が元の行列から計算された４×４（ｎ×ｍ）行列を返す。元行列の各ピクセルでは現在のピクセルとすぐ左のピクセルとの値の差が計算される。
【００２５】
左上差分計算はピクセル値が元の行列から計算された４×４（ｎ×ｍ）行列を返す。元行列の各ピクセルでは現在のピクセルとその左斜め上のピクセル値との差が計算される。
【００２６】
上差分計算はピクセル値が元の行列から計算された４×４（ｎ×ｍ）行列を返す。元行列の各ピクセルでは現在のピクセルと真上のピクセル値との差が計算される。
【００２７】
右上差分計算はピクセル値が元の行列から計算された４×４（ｎ×ｍ）行列を返す。元行列の各ピクセルでは現在のピクセルとその右上のピクセル値との差が計算される。
【００２８】
ハフマン符号化はハフマン符号木の作成及びそれに基づいた復号を含む。ハフマン符号木作成には多くの時間を要する。ハフマン符号化を用いたＭＰＥＧのような圧縮技術はビデオ全体にハフマン符号木を１つ使用するが、圧縮比が低下するため、多くの場合は満足の行くものとはならない。
【００２９】
開示された制御列はハフマン符号木を定期的に作成する。１つの方法では、一定のフレーム数毎に１つ、ハフマン符号木を作成する。木の作成の頻度は、フレーム毎の木の作成の計算時間が復号時間のおよそ１／１０となるように計算される。
【００３０】
もう１つの方法は適応型である。コンピュータが速く、多くの計算時間が使われなくて残っている場合、ハフマン符号木作成はより頻繁に動作し、より良い圧縮比を得られる。問題の１つの解決方法は入力バッファーに注目する。入力バッファーが空、もしくはそれに近くなることは、圧縮システムがビデオ入力に追いついていることを意味し、それゆえ処理時間が他のこと、例えば木の生成、を行うために残されている。このアルゴリズムは入力バッファーサイズを監視し、サイズがいき値を下回るとハフマン符号木の生成を呼び出す。
【００３１】
ハフマン符号木生成の最も高価な部分がイメージ統計の収集なので、もう１つの方法として各フレームの圧縮中に統計収集を行い、そのフレームの前の１つ以上のフレームの統計に基づいて新しい各フレームの新しい符号木の計算を行う。
【００３２】
これには２つの利点があり：（１）データの圧縮または解凍中に統計を計算するので計算時間を節約出来る、（２）ハフマン符号木を圧縮されたストリームへ記録する事は、圧縮解凍両方のコードとも符合木の計算を行う同じデータへのアクセスを有するため、不要である。この方法の主たる不利な点は、ビデオストリーム統計が突然変化すると、前のフレームからの統計が現在のイメージのモデル化を不十分に行い、圧縮比が劇的に低下する可能性があることである。フレーム圧縮後、圧縮コードは、圧縮比がいき値以下となったことを認識し、古い効率の悪い符号木を用いてフレームの圧縮に失敗した間に計算した統計を用いて圧縮をし直す。そして新規の符号木は出力ストリームに含めることができる。統計が突然に変化する事はめったに起こらないので、いくつかのフレームを２回符号化する余分な計算は全体のパフォーマンスに殆ど影響を与えない。
【００３３】
図２は簡単な高速の最良近接圧縮方法の前処理２００を表している。方法２００は方法１００に似ているが、左差分及び上差分の計算のみをおこなう。
【００３４】
方法２００によって圧縮される典型的なビデオストリームは連続するビデオフレームを含み、各ビデオフレームはいくつもの走査線を含み、各走査線はいくつもの画素を含む。方法２００は現在の走査線アドレスカウンターをフレーム最上部の走査線に設定する操作２０２を含む。操作２０４は、現在の走査線の下に残る走査線数が４（ｎ）以下か調べる。そうでない場合、操作２０６が現在の走査線アドレスカウンターを４（ｎ）下げる。
【００３５】
操作２０８はカーソルアドレスカウンターを一番目、即ち走査線の一番左のピクセルにセットする。操作２１０はカーソルの右のピクセルが４（ｍ）以下か調べる。４（ｍ）以下の場合には、制御は操作２０４に戻る。そうでなければ操作２１２は、カーソルアドレスカウンターを右に４（ｍ）進める。例えば、操作２１４はカーソルピクセルが一番下の右端に位置する４平方（ｎ×ｍ）のピクセルの行列を選択する。
【００３６】
操作２１６は２個のピクセル差分値（デルタ）、左差分及び上差分、を選択したピクセル行列について計算する。評価測定は２つの差分計算による各差分行列に対して行われる。評価測定が最良（値が最低）の差分行列が選択される。        どの差分行列が選ばれたか示すマーカーが付加され、元の行列は選択された差分行列とマーカーで置換される。マーカーにはハフマン符号化が施される。
【００３７】
操作２１８はピクセル左差分計算を現在の走査線の下の残り及び最上部の走査線に適用する。操作２２２はランレングス符号化を適用する。操作２２４は全体のフレームの走査線をハフマン符号化する。
【００３８】
操作１１６と２１６についての評価値はむしろ４×４（ｎ×ｍ）の差分行列の全ピクセルの絶対値の合計と等しい事が望ましい。いくつかのピクセル値の差分がフレームの縁にあるため計算できないときは、評価値は存在しないか表されない。表１に示された圧縮例を検討する。
【００３９】
代替の実施形態では差分行列の絶対値の最大値のような他の評価計量を利用する。
【００４０】
【表１】
2008535327.tif 000003
【００４１】
最初に処理される行列を表２に示す。
【００４２】
【表２】
2008535327.tif 000004
【００４３】
第二列の第二行の値１７がある。左差分計算は１７−１２＝５、左上差分計算は１７−１４＝３、上差分計算は１７−１８＝−１、右上差分計算は１７−２２＝−５となる。各１６の現在のピクセル位置は左差分行列、左上差分行列、上差分行列及び右上差分行列を発生させるよう同様に計算される。完成した左差分行列は表２の一番目の行列に測定評価＝ニルをもたらす。左上差分行列の計算もまた評価測定＝ニルをもたらす。
【００４４】
上差分行列は表３にあるように評価測定＝２７という結果をもたらす。
【００４５】
【表３】
2008535327.tif 000005
【００４６】
右上差分行列は表４にあるように評価測定＝８３という結果をもたらす。
【００４７】
【表４】
2008535327.tif 000006
【００４８】
ゆえに、評価測定の比較は上差分（Ａ）が一番目の４×４ピクセル行列に最適であることを示している。表５に二番目の行列を示す。
【００４９】
【表５】
2008535327.tif 000007
【００５０】
表６にあるように、そのような二番目の行列の左差分行列は評価測定＝38という結果をもたらす。
【００５１】
【表６】
2008535327.tif 000008
【００５２】
左上差分行列は評価測定＝５９という結果をもたらす。
【００５３】
【表７】
2008535327.tif 000009
【００５４】
上差分行列は評価測定＝５１という結果をもたらす。
【００５５】
【表８】
2008535327.tif 000010
【００５６】
右上差分行列は評価測定＝ニルという結果をもたらす。
【００５７】
そのため、評価測定の比較は左差分（Ｌ）が二番目の４×４ピクセル行列に最適である。最初の走査線のピクセル左差分は表９に示されている。
【００５８】
【表９】
2008535327.tif 000011
【００５９】
表１０には結果が示されている。
【００６０】
【表１０】
2008535327.tif 000012
【００６１】
近傍行列のマーカーは次のとおりである。
【００６２】
2008535327.tif 000013
【００６３】
ハフマン圧縮処理は表１１にあるハフマン符号木をもたらす。
【００６４】
【表１１】
2008535327.tif 000014
【００６５】
この例の圧縮比は２００／（２００−１３３）：１＝２．９９：１である。
【００６６】
一般には、開示された手法の実施形態ではピクセル値の差と近接するピクセルと比較し、いくつかのうち差が最小のものと置換する。マーカーが、ブロックを構成する全ピクセルが一方向に近接するものと比べるよう、ピクセルのブロックに付されている。マーカーはそのブロックの全ピクセルがどのように比較されるか示す。
【００６７】
定期的にハフマン符号木が作成される。ハフマン符号化が出来たフレームの圧縮に用いられる。ハフマン符号木はフレーム数ｑ毎に１つ作成される。フレームは頻繁に変化しないので、ｑを３０に設定しても圧縮比を大きく低下させない。リアルタイムビデオの圧縮に用いられる場合、作成を実行するプロセッサ時間のその時々の存在量に応じてハフマン符号木作成の頻度が選択される。より多くの処理時間が存在すれば、ハフマン符号木はより頻繁に計算される。頻度の変更は最初に入力ビデオフレームバッファーを調べる。フレームバッファーが空であれば、ハフマン符号木を作成する時間は存在する。
【００６８】
画像のロスレス圧縮が、画像の表面では色と明るさがゆっくりと変化するという事実を用いたので、近傍のピクセルは値が急激に変化せず実行された。別の言葉で言えば、画像データが完全に任意ではないので、各ピクセルは近傍のピクセルによる制約される。
【００６９】
多くの圧縮方法は、走査線上のピクセルの線形関数から得られる「予測子」を作成する差分パルス符号変調（ＤＰＣＭ）に基づいている。実際のピクセル値は、実際の値と予測子の差で置換される。予測子は度々直前のピクセル値と同値となる。このように、画像の全ピクセル値はゼロに近くなり、少ない数のビットを用いるかハフマン符号化を用いて圧縮される。各ピクセルにどの比較が用いられたか示すマーカーを割り当てると、そのようなマーカーに必要なデータ量は多大なもの、例えば全量の１／４、になる。このオーバーヘッドは画像をｎ×ｍの小さなブロックに分割することにより、大幅に削減できる。１つのブロックの全ピクセルに対し、１つのマーカーが割り当てられる。各ブロックに１つのマーカーが割り当てられ、４つの比較のうち選択されたものを示す。各ブロックの全てのピクセルは近傍のピクセルと一方向で比較される。ブロックは様々な形と大きさをとることができる。１つの実施形態では、ｎ×ｍのブロックは４次正方行列とされる。
【００７０】
ピクセルの絶対値を全て前処理し、小さい数の差分値に減じた後、フレームの圧縮にハフマン符号化が用いられる。しかし、ビデオのハフマン符号化は時間がかかる。ハフマン符号化は２つのフェーズから成り立つ。第１は符号化のためのハフマン符号木作成、次にピクセルの符号化である。第１フェーズのハフマン符号木作成は第２フェーズで全画像の符号化と同じくらいの時間がかかる。この時間を減らすために、符号木作成は、数フレーム毎に行う事があります。画像は、フレーム毎にあまり変化しないので、これは通常は圧縮比を低下させない。
【００７１】
ハフマン符号木の作成の頻度を決めるため、２つの方法が考えられる。１つは、固定、もう１つは可変である。例えば、３０という固定数のフレームが１つのハフマン符号木を共有することができる。可変の方法では、ハフマン符号木はその時のプロセッサパワーの存在量により作成される。処理能力の有用性は、入力バッファー中の圧縮の必要の有るエントリー数を見ることで評価できる。
【００７２】
少しあるいは全く仕事がないときはハフマン符号木作成をより頻繁に多くの計算時間をかけることが出来る。
【００７３】
ハフマン符号木は入力ビデオストリームの各符号をハフマン符号に変換するのに用いられる。ハフマン符号は、可変長符号で、頻繁に出現する入力符号は短い符号に、頻繁に出現しない入力符号は長い符号になる。あるハフマン符号木は、他の符号木より小さい出力ファイルを作成できれば、より効率が良いと考えられる。入力ビデオの統計的分布が知られている時は、大変効率の良いハフマン符号木が作成される。しかしながら、リアルタイム圧縮システムでは、全てのビデオの符号の分布を予測する事は出来ない。１つの方法は大部分の入力ファイルを上手く圧縮できる所定のハフマン符号木、を用いる事である。しかし、この方法は、いくつかの特別なケースで悪い結果をもたらす可能性がある。最適な方法は、フレーム毎に、ハフマン符号木を作成することであるが、これは多くの計算時間を使い過ぎる。
【００７４】
１つの前提は、ビデオの性質、即ちフレームの情報は頻繁に変化しないという事である。処理ステップとしては、最初の数フレームの符号の統計分布を得て、ハフマン符号木を作成する。ハフマン符号木を全ての入力ビデオに適用できる、しかしビデオの他の部分では、悪い結果になる可能性がある。その代わり、処理ステップでは、最初のスキャンされた数フレーム、例えば3フレーム、からハフマン符号木を作る。そして、このハフマン符号木を用いて、つながった、符号化された、フレーム、例えば２０フレーム、を変換する。この方法を使って、ハフマン符号木作成に必要な長い時間は、長い時間で均等に分けられ、計算時間の中では、無視できる程の時間になる。
【００７５】
別の実施形態：最適近傍処理と適応型圧縮を伴うハフマン符号化
図１Ａはタスク１２４（図１）あるいはタスク２２４（図２）の別の実施形態を行う処理ステップ１５０を示している。演算１５０は上で述べられたハードウェア要素を１つ以上使って実行され、図９から１１の部分がその例である。広く言えば、処理ステップ１５０は適応型圧縮の実施形態を実現し、ここでは、各走査線にハフマン符号化が適応される。各走査線の圧縮率があるいき値に達しない時は、ハフマン符号木は再計算され、新しく計算されたハフマン符号木を使って、その走査線は圧縮されなおす。別の実施様態としては、ハフマン符号化の代わりに、別の型のエントロピー符号化、例えば領域符号化、算術符号化等が使われる。説明を簡単にする為に、意図された制限がなければ、処理ステップ１５０は図１の処理ステップ１００を使って説明される。
【００７６】
上で述べられているように、処理ステップ１００は１つのビデオ・フレームの最適近傍処理を実行し、前処理されたビデオ・フレームのハフマン符号化を行う。下に示される処理ステップ１５０は、処理ステップ１２４の別の実施形態を示す。
【００７７】
現在のフレーム内の走査線の中の動きを追う為、処理ステップ１５２は「現在の走査線」を最上位の走査線にする。処理ステップ１５３はハフマン符号木を作成し、処理ステップ１５６は処理ステップ１５３で作られたハフマン符号木を使って現在の走査線を圧縮する。ハフマン符号木の作成とハフマン符号化の応用は関連した技術分野で良く知られており、様々な技術文献で、多く討論されている。別の実施形態では、ハフマン符号化の代わりに、別の、もう１つの型のエントロピー符号化が使われる、例として領域符号化や算術符号化がある。処理ステップ１５８は処理ステップ１５６で実行された１行の圧縮が示されたいき値に達しているか調べる。１つの例として、いき値は非圧縮と圧縮された走査線の大きさの比である。実際には、任意の値が使えるが、良く使われる例としては、２対１、２．５対１、３対１が有る。圧縮比がいき値に達していれば、操作１５８は操作１６６に進み、そこで、現在の走査線が、現在のフレームの最後の走査線かどうか問われる。そうならば、プログラムは終了する（操作１６８）。そうでなければ、操作１６８は現在の走査線を、フレーム内の次の走査線に進め、前述されたように、操作１５６を実行する。
【００７８】
前の記述とは反対に、操作１５８が、操作１５６の圧縮が指定のいき値に満たされないと見つけたら、操作１６０が実行される。操作１５０は前の走査線の値の統計的分布を用いて、ハフマン符号木を再計算する。そして、再計算されたハフマン符号木を用いて、操作１６２は現在の走査線にハフマン符号化を適用し、操作１５６で得られた現在の走査線のハフマン符号化の結果を捨てる。操作１６２の後は、上で述べたように、操作１６６が実行される。
【００７９】
別の実施形態では、画像を前処理し、画像の最適な分割方法を模索しながら統計データを集める（但し、前もって決められた最大数以上には分割しない）。各部分は、それぞれのハフマン符号木を使って、処理される
別の実施形態：多次元予測による前処理
図１Ｂは多次元予測処理ステップ１７０について記述している。演算１７０は上で説明されたハードウェア要素を１つ以上使って実行され、図９から１１の部分がその例である。この図を、以前説明された図におくため、処理ステップ１７０は図１または２のステップの前処理代替手段として実行される。この点から、処理ステップ１７０は操作３０９（図３）もしくは操作４０９（図４）遂行のために実行される。
【００８０】
基本的に、前処理の処理ステップ１７０はビデオフレームの各ピクセルをそのピクセルの「エラー」と置換する。主として、前処理（１−Ｄ、２−Ｄもしくは３−Ｄエラーの計算）を行う理由は、ビデオフレームをより少ないデータ量、それにより将来ハフマン（または他のエントロピー）圧縮を改良する、で表すことである。ピクセルエラーの計算のため異なった実施形態がある。即ち、１−Ｄ、２−Ｄ及び３−Ｄエラー計算である。各エラー計算は異なる利点、特徴を有するため異なるアプリケーション、入力ビデオの性質、計算時間の有効性や他の条件に応じて利用することが出来る。
【００８１】
処理ステップ１７０は図１Ｂに、より詳細に表さていれる。操作１７２は処理のため、デジタルデータ入力ストリームを受け取る。本例では、入力ストリームはデータ・ストリーム提供のためデジタルビデオフレーム（イメージ）、受信、キャプチャ、スキャン、サンプリングされまたは別の方法で受け取る、を含む。ビデオは単に例であり、他のデータは開示された技術による符号化を同様に受け入れる。ビデオ「フレーム」より、むしろ他の入力ビデオのユニットは特定の手元のアプリケーションに対して適当に処理される。図示された例では入力（１７２）は連続したデータ・ストリームを包含し、１つのビデオフレームの線、そして時間内に次のビデオフレーム、などを含む。
【００８２】
操作１７４は入力フレームの処理を始め、現在（対象）のピクセル用に位置を確定させる。もしビデオフレーム全体を受信したら、最初のピクセルは画像内ピクセルの可能性がある。または、ビデオフレームのピクセルがサンプリング、キャプチャもしくはリアルタイムや他のシリアルオーダー（例えばストリーム）で受信した場合、現在のピクセルはそのようなオーダーの最初のピクセルから始まる。
【００８３】
次に、操作１７６現在のピクセルのエラー計算を行う。上で述べたように、１−Ｄエラー（操作１７６ａ）、２−Ｄエラー（操作１７６ｂ）、もしくは３−Ｄエラー（操作１７６ｃ）を含む。１つのアプリケーションでは、ルーチン１７０は１７６ａ−１７６ｃの選択肢の何れか１つを行うよう固定されてプログラムされている。この場合、他の選択肢はそれらがルーチン１７０にないときに実例目的に示される。他の例ではルーチン１７０は各ビデオフレーム、ストリームもしくは他の有用な入力ストリームのセグメントのため、１７６ａ−１７６ｃのオプションの１つに一貫してくっつくが、実施された選択肢１７６ａ−１７６ｃはセグメントにより異なることがある。選択肢１７６ａ−１７６ｃは、リソースの有用性処理、圧縮効率の検出、入力ストリーム特性、ユーザーからの指示、ランダム選択もしくは他の適当な要素に基づいている。代わりに、十分なコンピュータリソースがあるなら、画像は１７６ａ−１７６ｃのいくつかのオプションで圧縮を行い、圧縮結果が一番小さいものを選択する。
【００８４】
演算１７６ａは現在のピクセルの１−Ｄエラーを計算する。以下で詳細に論ずるが、これは同じビデオフレーム列のピクセル値に基づく現在のピクセルの予測を伴う。現在のピクセルと予測の違いは１−Ｄエラーを構成する点である。
【００８５】
演算１７６ｂは現在のピクセルの２−Ｄエラーを計算する。以下で詳細に論ずるが、所定の決められた機能を複数の行と列のピクセルに適用することになる、そこで「２−Ｄ」という。１つの例として操作１７６ｂは現在のピクセルの１つ以上の１−Ｄエラーを計算し、さらにその１−Ｄエラーを処理して、変更された１−Ｄエラーが２−Ｄエラーとなる。簡単な記述では、２−Ｄエラーの計算は、現在のピクセルと近傍のピクセルとの１−Ｄエラーを計算し、現在のピクセルの１−Ｄエラーから、近傍のエラーを引いて得られる。この変更されたエラーが現在のピクセルの２−Ｄエラーである。例えばより複雑な計算は、２−Ｄエラーは現在のピクセルの、別の近傍を使い計算し変更された、エラーを組み合わせて得られる。
【００８６】
演算１７６ｃは現在のピクセルの３次元予測を行う。これは、２−Ｄ予測が、１つ以上前のビデオフレームの重要なピクセルの拡大を伴う。別の言葉で言えば、３−Dエラーは現在のフレームの現在のピクセルの２−Ｄエラーと、１つ以上前のフレームの２−Ｄエラーの組み合わせよりなる。
【００８７】
上記全ての場合（１７６ａ−１７６ｃ）で、エラーの計算は、解凍アルゴリズムが現在のピクセル処理時に、解凍済みのピクセルのみを参照する。これにより、解凍アルゴリズムは圧縮アルゴリズムが用いた同じ予測を計算できる事を保証する。
【００８８】
操作１７６が現在のピクセルのエラーを計算した後、操作１７８は現在のフレームのエラー値の記録にこのエラー値を付加する。この記録は「エラーフレーム」と呼ばれる。操作１８４は次に現在のビデオフレーム内の全ピクセルが操作１７６と１７８で処理されたか聞く。されていなければ、操作１８２は次のピクセルに進み、そこを現在のピクセルとし、操作１７６に戻る。操作１８２は「次」が入力ストリームから選ばれたピクセルならば、どの順序で選んでも良い。この順序の例の１つは、入力ストリームのピクセルの順序である。
【００８９】
操作１８４が、全ピクセルが処理されたと判れば、操作１８６が実行される。操作１８６は操作１７８で作られたエラーフレームにランレングス符号化を施す。ランレングス符号化については多くの特許文献、技術文献、その他の参考書に記載されている。操作１８６は、操作１８６が圧縮されたフレームのサイズを大きくするような事実があれば、任意に省かれる。操作１８６の次に、操作１８８はエラーフレームを、前もって計算されていたハフマン符号木や操作３０６−３０７（図３）や操作４０６−４０７（図4）を使い計算された符号化テーブルを用い、ハフマン符号化で圧縮する。場合によっては、操作１８８は図１Aの適応型圧縮技術を使う。操作１８８が完了すると、現在のビデオフレームの処理ステップ１７０が終了する。次のビデオフレーム処理の為、処理ステップ１７０は繰り返される。
【００９０】
１−Ｄ、２−Ｄ及び３−Ｄの方法１７６ａ−１７６ｃは図１Ｃに詳細に、現在のビデオフレームの、対象のピクセルと様々な近傍のピクセルの位置関係を示している、説明されている。配列１９０は処理される現在のビデオフレームを作る様々な行と列がある。色々なピクセルの位置は、次のような符号で特定される。
【００９１】
Ｓ      ＝対象のピクセル
Ｕ      ＝Ｓの１つ上のピクセル
ＵＵ    ＝Ｓの２つ上のピクセル
ＲＵ    ＝Ｓの１つ上、１つ右のピクセル
Ｌ      ＝Ｓの１つ左のピクセル
ＬＬ    ＝Ｓの２つ左のピクセル
ＬＬＵ  ＝Ｓの１つ上、２つ左のピクセル
ＬＵ    ＝Ｓの１つ上、１つ左のピクセル
ＬＵＵ  ＝Ｓの２つ上、１つ左のピクセル
「ビデオフレーム」や様々な「ピクセル」という特殊な語は次のプロセスの動作説明に使われる。この説明は意図的な制限が設けられていない。なぜならこれらのプロセスは、実質上ビデオフレームやピクセルと関係ない様々な要素を含むいかなる配列にも用いられるからである。さらに、「近傍」という語は現在のピクセルと所定のピクセルの位置関係について言及するものであり、隣同士の必要はない（「隣接」）。近傍のピクセルは近くにある事もあるが、現在のピクセル特に近接する必要はない。
【００９２】
Ａ  １−Ｄエラーの計算
前に述べたように、演算１７６ａは現在のピクセルの１−Ｄエラーを計算する。この為には、同じビデオフレームの行のピクセル値から予測する。現在のピクセルと予測の差が１−Ｄエラーである。
【００９３】
１−Dエラー計算を説明する為に詳細な解説をする。最初の演算は、同じビデオフレームの行の他のピクセル値から現在のピクセル値を予測する。この点から、「一次元」とは水平次元である。よって、現在のピクセルの予測値は、その行の１つ以上の他のピクセルに所定の関数を使う事により得られる。この関数の１つの例は、ＬとＬＬを使って予測される。この関係は、数学的には下の方程式１で示される。
【００９４】
方程式１      Ｓの予測値＝ｆ（Ｌ，ＬＬ）
次の演算は、現在のピクセルのエラー、対象のフレームのピクセルの値と予測との差を等しく計算する。この関係は、数学的に、下の方程式２で示される。
【００９５】
方程式２      Ｓのエラー値＝Ｓ−ｆ（Ｌ，ＬＬ）
式１、２の関数を具現化する為に、様々な数学の関数が用いられる。例えば、１つ以上の線形関数、非線形関数、フラクタル、ウェーブレット、多項式関数等がある。
【００９６】
関数の１つの簡単な実施形態としては、２つのオペランドの関数の値は、いつでも最初のオペランドである。これは、数学的に、下の方程式3で示される。
【００９７】
方程式３      ｆ（Ａ，Ｂ）＝Ａ
Ｂ  ２−Ｄエラーの計算
２−Ｄエラー計算につて詳細に述べる。即ち、２−Ｄエラーは所定の関数を対象のピクセルの存在する行とその他の行に適用することにより計算される。この所定の関数は対象のピクセルの前のピクセル、すなわち対象のピクセルの左及び上の列のピクセル、を引数とするどのような関数をも含む。ゆえに関数はシリアルビデオストリームで対象ピクセルより、前のピクセルに適用される。式４は本関数の一般例を表す。
【００９８】
方程式４      Ｓの予測値＝ｇ（Ｌ，ＬＬ，ＬＬＵ，ＬＵ，Ｕ，…）
１つの特定の詳細な実施形態は、２−Ｄエラー計算は近傍ピクセルの１−Ｄエラーの計算によりなされ、現在のピクセルの１−Ｄエラーから近傍の１−Ｄエラーを引き、修正される。修正されたエラーが現在のピクセルの２−Ｄエラーである。
【００９９】
以下に先の実施形態を第１の例として表す。ここで、Ｕを近傍ピクセルとして選択する。Ｕの１−Ｄエラーは式５で計算される。
【０１００】
方程式５      Ｕのエラー値＝Ｕ−ｆ（ＬＵ，ＬＬＵ）
対象のピクセルのエラーは以下に繰り返された式２で計算された。
【０１０１】
方程式２      Ｓのエラー値＝Ｓ−ｆ（Ｌ，ＬＬ）
本例中の２−Ｄエラーは、式６が示すように、対象の１−Ｄエラーから近傍の１−Ｄエラーを引いたものである。
【０１０２】
方程式６      ２−Ｄエラー＝Ｓ−ｆ（Ｌ，ＬＬ）−［Ｕ−ｆ（ＬＵ，ＬＬＵ）］
２番目に、ＲＵが近傍のピクセルの例を挙げる。ＲＵの１−Ｄエラーは式７で計算される。
【０１０３】
方程式７      ＲＵのエラー＝ＲＵ−ｆ（Ｕ，ＬＵ）
対象のピクセルエラーは上記の式２で計算された。本例の２−Ｄエラーは、式８が示すように、対象のピクセルの１−Ｄエラーから近傍の１−Ｄエラーを引いたものである。
【０１０４】
方程式８      ２−Ｄエラー＝Ｓ−ｆ（Ｌ，ＬＬ）−［ＲＵ−ｆ（Ｕ，ＬＵ）］
３番目に、ＬＵが近傍のピクセルの例を挙げる。ＬＵの１−Ｄエラーは式９で計算される。
【０１０５】
方程式９      ＬＵのエラー＝ＬＵ−ｆ（ＬＬＵ，ＬＬＬＵ）
対象のピクセルのエラーは上記の式２で計算された。本例の２−Ｄエラーは式１０が示すように、対象のピクセルの１−Ｄエラーから近傍の１−Ｄエラーを引いたものである。
【０１０６】
方程式１０    ２−Ｄエラー＝Ｓ−ｆ（Ｌ，ＬＬ）−［ＬＵ−ｆ（ＬＬＵ，ＬＬＬＵ）］
４番目と最終としてＬが近傍のピクセルの例を挙げる。水平方向に画像の類似性をキャプチャするため、下の式は上の各式と異なる位置関係を用いている。Ｌの１−Ｄエラーは式１１で計算される。
【０１０７】
方程式１１    Ｌのエラー＝Ｌ−ｆ（ＬＵ，ＬＬＵ）
水平方向に画像の類似性のキャプチャの精神と調和して、対象のピクセルは下の式１２より上の式２を用いて予測される。
【０１０８】
方程式１２    Ｓの予測値＝ｆ（Ｕ，ＵＵ）
予測されたピクセルのエラーは下の式１３で計算される。
【０１０９】
方程式１３    Ｓのエラー値＝Ｓ−ｆ（Ｕ，ＵＵ）
本例の２−Ｄエラーは、式１４に示すように、対象のピクセルの１−Ｄエラーから近傍の１−Ｄエラーを引いたもので修正したものである。
【０１１０】
方程式１４    ２−Ｄエラー＝Ｓ−ｆ（Ｕ，ＵＵ）−［Ｌ−ｆ（ＬＵ，ＬＬＬＵ）］
上の４つの例と対照的に、完全に異なった２−Ｄエラーの計算が、現在のピクセルのいくつかの修正されたエラー、各修正されたエラーは異なる近傍を用いて計算されている、を組み合わせ実現することが可能である。例えば、式６、８、１０、１４で計算されたＳの２−Ｄエラーを平均して，得られる。
【０１１１】
広義に言うと、２−Ｄエラーの過程が、ステップ１７６ｂの実行という形で、ビデオフレームに繰り返し適用されると、対象のピクセルと予め定められた位置関係に有る同じグループのピクセルが、そのフレーム処理で利用される。
【０１１２】
先の例では、演算１７６ｂの一回ごとに実行は同じ近傍ピクセル、例えばＵ、ＲＵ、ＬＵ及び／もしくはＬ、を利用する。他の例では、操作１７６ｂは近傍ピクセル、すなわち対象のピクセルとの位置関係、は処理されたフレームにより異なる。予め定められた位置関係のセット間の選択や変更は様々な問題、例えば圧縮比、色領域やコンテンツタイプ、例えばビデオ、コンピュータで生成したグラフィックス、に基づき実行される。
【０１１３】
Ｃ  ３−Ｄエラーの計算
上で述べられたように、演算１７６ｃは現在のピクセルの３−Ｄ予測を実行する。これは、２−D予測を拡張し、１つ以上前のビデオフレームのピクセルを考慮に入れる。３−Ｄ予測は対象のピクセルの、現在及び１つ以上前のビデオフレームのピクセルのいかなる関数をも利用し実行する。
【０１１４】
３−Ｄ予測のより詳細な例として、３−Ｄエラーは対象のピクセルの現在のフレームの２−Ｄエラーと１つ以上前のフレームの２−Ｄエラーの結合により計算されるであろう。
【０１１５】
図１Ｄは対象のピクセルと、過去のビデオフレーム１９２に存在したこれらのピクセル値を用いる様々な近傍のピクセル、との位置関係を示す。過去のビデオフレーム１９２は現在のフレーム１９０（図１Ｃ）の１、２または任意のフレーム数前に出現し、その数はプログラム１７６ｃの実行に依存する。本例では、過去のフレーム１９２は現在のフレーム１９０の直前に起きているフレームである。
【０１１６】
図１Ｃと１Ｄを念頭に、３−Ｄエラー計算について議論する。第１に、対象のピクセルの２−Ｄエラーは上記のようにフレーム１９０を利用し、計算される。上述したように、これは１、２、３または任意の数の近傍ピクセルを用い計算される。次に、計算を行い対象のピクセルの１以上前のフレーム、本例ではフレーム１９２の直前のもの、の２−Ｄエラーが得られる。現在と過去の２−Ｄエラーの差を計算すると、３−Ｄエラーが得られる。
【０１１７】
圧縮制御列の全般−基本手順
図３Ａは符号化（圧縮）制御列３５０を記述している。制御列３５０の典型的実施の２つが図３、４として記述されている。演算３５０は上で述べられたハードウェア装置、例として図９−１１、を１つ以上用いて実行される。この図を他の図の背景に配置すると、制御列３５０は圧縮制御列全般として実行され、下のステップ３５８に記述された図１、１Ａもしくは２に記載の前処理順序の１つを使う。
【０１１８】
ステップ３５２はＮ１個のフレームに基づく統計的分布を実行する。１つの具体例では、Ｎ１は３フレームである。１つの例では、統計的分布はヒストグラムを含む。ステップ３５４はステップ３５２の統計的分布に基づきハフマン符号木を形成する。ステップ３５６は後で符号化された出力手順の復号に使用するため、出力ストリームにハフマン符号木を記録する。ハフマン符号化は例として挙げられているだけであるが、他の実施形態では領域符号化、算術符号化等他のエントロピー符号化が利用される。
【０１１９】
ステップ３５８は複数のフレームのピクセル値をハフマン符号に変換し、出力ストリームに記録する。ステップ３５８はＮ２個、Ｎ１より大きい数、のフレームの演算を行う。１つの例として、Ｎ２は２０となる。１つの例で、ステップ３５８は各フレームで図１、１Ａもしくは２の１つを実行し、ステップ３５４の最後の実行中に現在のハフマン符号木もしくは符号化に基づき計算され、実現される。
【０１２０】
ステップ３５８への任意の強化として、ステップ３６６はステップ３５８で圧縮された各フレームの圧縮比を探知する。いずれのフレームの圧縮比も規定されたいき値に満たない場合、ステップ３５８はステップ３５８の残りのフレームの圧縮を中止し、ステップ３５９へ進む。ステップ３５９は次のフレームに進み、統計的分布の再計算（ステップ３５２）、ハフマン符号木の再計算（ステップ３５４）を行い、ステップ３５２に戻る。１つの例ではステップ３６６、３５９は下でより詳細に議論されるが、図４のステップ４１１、４１２により実行される。
【０１２１】
ステップ３５８が無事終了すると、ステップ３６０は入力ストリーム中の全フレームが処理されたかたずねる。処理されていない場合は、ステップ３６４は次のＮ２個のフレーム進み、ステップ３５２へ戻る。ステップ３６０が全フレームの処理されたことを分かったら順序３５０はステップ３６２で終了する。
【０１２２】
圧縮制御列の全般−第一の実施形態
図３で解説すると、この制御列は２つの数字（スキャン、符号化されたもの）を全体のファイルに一定に保つ、もしくはハフマン符号木を適用するフレームの数を変えることが出来る。この制御列は３０１で符合化されたフレーム数をカウンタで数える。この制御列では最初に、scanFrameの数だけのフレームがスキャンされ、統計的分布が制御列３０２、３０３、３０４、３０５でフレーム内のコードで計算される。本例では、scanFrameの値は３である。
【０１２３】
制御列３０６では、スキャンされたフレームの統計的分布を用いハフマン符号木が作成される。ハフマン符号木は、出力ストリームに記録され、解凍ステージ３０７で読み出せる。開示された制御列はハフマン符号木を用いて、codedFrames数のフレームのセット内のコードを変換する。制御列３０８、３０９、３１０、３１１では、このセットには、スキャンされたフレームが含まれ、変換されて得られたハフマン符号は出力ストリームに吐き出される。本例のcodedFramesは２０である。
【０１２４】
開示された制御列はステップ３１２、３１３でビデオの全フレーム（totalFrames）に対し、ビデオの全フレームが変換されるまで繰り返す（制御列３１４）。
【０１２５】
圧縮制御列の全般−第二の実施形態
図４について言えば、もし圧縮比が低くなったなら、それはシーンが変化し、フレーム内の符号の統計が大きく変化したためであろう。開示された制御列では、このことにより符号木が再作成される。図３と同様、図４の制御列は符号化されたフレーム数をカウンタで数える（制御列４０１）。制御列はフレームのscanFrame数のフレームをスキャンし、統計的分布をフレーム内のコードから求める（制御列４０２、４０３、４０４、４０５）。本例でscanFrameは３である。
【０１２６】
スキャンされたフレームの統計的分布を用いハフマン符号木が作成される（制御列４０６）。ハフマン符号木は、出力ストリームに記録され、解凍ステージ４０７で読み出せる。開示された制御列はハフマン符号木を使い、スキャンされたフレームを含むcodeFramesの中の符号を変換し、出来たハフマン符号を出力ストリームに記録する（制御列４０８、４０９、４１０、４１１、４１３）。本例でcodeFramesは２００である。
【０１２７】
フレームの圧縮比がいき値（通常０．７）に満たない場合，大体の場合はシーンの変化を示し、開示された制御列はcurrentFrameを次のフレーム４１２にセットし、スキャンプロセス４０２、４０３、４０４、４０５に戻り、新しいハフマン符号木を作成する（制御列４０６、４０７）。
【０１２８】
制御列はビデオ中の全フレーム（totalFrames）のため、ビデオ中の全フレームが変換される（制御列４１６）まで本工程（制御列４１４，４１５）を繰り返す。
【０１２９】
ハフマン符号は高速符号化のため参照テーブルを用い符号化を行う。しかし、ハフマンアルゴリズムは短い符号を可変長符号に変換する為、中には大変長い符号もある。典型的な例では、入力符号が８ビットなら、作成されるハフマン符号は最長で３０ビット程度である。符号化は比較的簡単に８ビット入力符号用の２５６個の要素からなる表として例示された表１２を用いて行われる。
【０１３０】
【表１２】
2008535327.tif 000015
【０１３１】
復号化テーブル：様々な方法
一方、復号化は長い符号用の参照テーブルの実現は不可能のため、より複雑で時間がかかる。ハフマン符号の最大長が３０ビットの場合、表には１０億の要素、現在のコンピュータのメインメモリをしても不可能、が必要となる。
【０１３２】
大部分のハフマン復号は、メインメモリにフィットし、早く処理できるよう、符号を２つに分割する。２つの部分は、固定長の前半分と、可変長の後半分である。開示された制御列は固定長の前半分を表１３で例示された参照テーブルへのインデックスとして用いる。
【０１３３】
記憶階層が数層ある現代のコンピュータを使えば、キャッシュメモリと呼ばれる最速のメモリに参照を入れることが望ましい。典型的なパーソナルコンピュータは２５６キロバイトのキャッシュメモリを持っており、示されている制御列は固定長の前半分は１１ビットの長さを持っている（この値はコンピュータが進歩し、より大きなキャッシュが一般的になれば変わる）。大部分のピクセルは、ハフマン符号の、頻繁に出現する入力符号は短い出力符号を割り当てられる、という性質により、１１ビットで収まる符号で符号化されているからである。
【０１３４】
【表１３】
2008535327.tif 000016
【０１３５】
しかしながら、符号が１１ビットに収まらない場合、符号の残りは後部分に残される。後部分の変換を扱う典型的な方法は探索テーブルを使うことである。最初の参照テーブルの要素は、ある前部分で始まる出力符号が１１ビットより長い時、他のテーブルを指す。表１４に示されるように、このオーバーフローしたテーブルでは要素は後部分と対象の符号という対になった数字からなる。最初の参照テーブルが符号は１１ビット以上であると示した時は、オーバーフローしたテーブルを、後部分を比較のインデックス（または連想参照）として探索し、入力ストリームの次の、その後のビット列と比較される。もし一致する要素があれば、対応する対象符号が出力される。しかしこの方法は膨大な時間を要する。そこで一般にはハッシュテーブルが用いられ、探索を速くする。
【０１３６】
【表１４】
2008535327.tif 000017
【０１３７】
ハッシュテーブルでさえ遅く、いくつかの参照を必要とする。したがって、これは完全に満足できるものではない。代わりに開示された制御列は連結符号を用いる。ハフマン符号作成時に出力が１１ビットより長い場合、１９ビット符号が１１ビットの前部分と８ビットの入力符号の連結符号として作成される。復号化テーブル要素は前部分が１１ビット以下の場合前部分の長さと８ビット出力符号、あるいは１１ビットより長い場合は、長いというインジケーターである。復号化テーブルを、表１５に示す。
【０１３８】
【表１５】
2008535327.tif 000018
【０１３９】
解凍法
図５及び図６で、連結符号のハフマン解凍法が示される。示されている制御列は入力ストリーム５０１を、currentBitポインタ５０２を用いてストリームを移動して、処理する（制御列６０１）。符号は、入力ストリーム５０１からcurrentBitと次の１０ビットを用いて計算される（制御列６０２）。解凍表は表１５で示されたように、計算された符号を参照し符号のビットの数を求めるために用いられる（制御列６０３）。
【０１４０】
ビットの数が１９の場合、制御列は入力ストリームに索引付けし、取った８ビットの入力符号を出力ストリームに付加する（制御列６０５、６０６、６０７、６１０）。ビットの数が１９でない場合、制御列は復号テーブルから取った出力符号を出力ストリームに付加する（制御列６０８、６０９、６１０）。
【０１４１】
当業者（開示の恩恵を受けている）には、アルゴリズムが８ビット以外の画像のピクセルに適応出来ることが明らかである。
【０１４２】
この過程６１１は入力ストリーム５０１の全ビットを消費するまで繰り返し行われる（制御列６１２）。
【０１４３】
上の方法は最悪の場合１０％程度の圧縮ファイルの増大を犠牲にしても特別な符号の時間のかかる探索を避ける方法である
複数符号復号化法
Ａ．イントロダクション
図６Ａ−図６Ｃでは、前出の復号化スキームの他の手段が説明されている。概略としてはこの過程は符号化されたデータの塊に複数のハフマン符号が存在しても個別にハフマン符号を復号するよりむしろ１度での復号を可能にする。
【０１４４】
実行の仕方よっては、この方法は符号データの復号過程を大幅に速くする。この方法では、符号化は符号化表の変更を必要とせずにいかなる適用可能な方法（例えば前に示した方法）を使える。しかし、復号過程は複数符号復号化表と呼ばれる新しい復号化表を利用する。
【０１４５】
Ｂ．複数符号復号化表
図６Ｂは複数符号復号化表の一例６７０を示す。前に説明した方法のように、表６７０はいくつかの行（”entries”）からなる。下に示すように、各行は行番号６７１（”index”）、ビット数（”numBits”）６７２、符号数（”numCodes”）６７４、そして復号された値６７６（”codeArray”）を含む。
【０１４６】
表の各行はアドレスを持つ。各行のアドレスはその行のインデックス６７１が与えられる。その代わりに、各行のアドレスが行番号の場合、（例えば最初の行のアドレスが１、二番目の行のアドレスが２等々）行のアドレスは表６７０に固有で、インデックス列は省略できる（制御列６７０）。インデックス６７１はまた、復号されたデータ・ストリームの予測されたデータの塊を代表する。説明されている例では、データの塊の長さは、欄６７１の幅（indexWidth ６７８）が１１のため、１１ビットである。ハフマン符号の長さは変化するので、各インデックス６７１は０、１あるいはそれ以上のハフマン符号を含む。
【０１４７】
各行では、列６７６がインデックス６７１内のハフマン符号に対応する復号された値を順序付けし並べられる。例えば０００１１１０１１００というインデックス値を持つ行では、このインデックス値はハフマン符号を３つ含み、それらは”a”、”b”及び”x”に復号される。インデックス値１１０１１００１０１１の行は、”x”、”a”及び”r”に復号される３つのハフマン符号を持つ。列６７６の復号された値とハフマン符号（連結され、インデックス６７１の一部あるいは全部になる）の関係は上の表１２のような適切なハフマン符号化表で与えられる。
【０１４８】
表６７０の大部分の行では行のインデックスビットは、欄６７６で復号される，一つ或いはそれ以上の、ハフマン符号を表す。numBits欄６７２は欄６７６で何ビットが復号されたかを表している。各行ではnumCode欄６７４が行のインデックス６７１に存在するハフマン符号の数を示している。
【０１４９】
他の実施形態では、numCodeは除去され、欄６７６の値の数を調べることによりこの情報が得られる。また、別の実施形態では復号値欄６７６を除去し、通常のハフマン復号化をnumCodeの値の回数繰り返し、１１ビットサンプルを完全に復号する。
【０１５０】
もしnumBitsがインデックス幅６７８より（本例では１１）大きい場合、インデックス６７１に対応するハフマン符号は１１ビットより長いことを示し、復号のため次の入力ストリームの部分を必要とする。したがって、この場合、インデックス６７１はハフマン符号の一部のみを含む。インデックス値０１０１０１０１０１０の列はこの一例である。ここではビットの数の欄６７２は１２となっている。しかしこれは、復号された値に対応するインデックス６７１に１２ビットは存在しない、インデックス欄６７１は本例で１１ビットのみ含む、ため矛盾が生じる。ゆえにnumBits６７２がindexwidth６７８より大きい場合は、インデックスに対応するハフマン符号がハフマン符号の一部のみを表していることを示す。したがって、numCodes６７４とcodeArray６７６は空白かＮ／Ａ、null等の値を含む。
【０１５１】
別の実施形態は32ビット単長語もしくは64ビット語のいずれかを要素とする表の組み立てである。それゆえ各表の探索は、各表の要素への32ビットの単長語もしくは64ビット語の検索となる。この語は、ビット数を示す。4もしくは５ビットの欄、復号された符号の固定された数を入れる場所、及び各符号が存在しているかを示すフラッグとからなる。符号が表示されない場合、ビットの数はゼロであり、要素の残りが探索表のポインタである。
【０１５２】
上で示したように、各インデックス値６７１はゼロ、１あるいはそれ以上の、復号された値と同数を示す、ハフマン符号を含む。列６７２は復号された値６７６を表すのに利用されたインデックスビットの数を示す。インデックスの残りのビットは次のハフマン符号、このデータの塊で復号することができない、を始める。列６７４は、インデックス値６７１により表されている、６７６内に有る、復号された値の数を述べる。
【０１５３】
言い換えれば、列６７２はインデックス値６７１のいくつのビットが対象の要素により復号されたかを特定するビット数を提供する。列６７６はインデックス値６７１の最初のビット数のビットが復号された全出力値の連結したハフマン符号化を含む。列６７４は列６７６で提供された、復号された出力値の数を示す符号番号を提供する。
【０１５４】
下の図６Ｃの復号制御列で、欄６７２、６７４及び６７６の値はそれぞれ、”numBits”、”numCodes”及び”codeArray”と呼ばれる。
【０１５５】
上の例では表について述べたが、表は１つの例として挙げられているだけで、本開示発明においては「表」に限定されない。表６７０は代わりに他のツール、例えば連結リスト、リレーショナルデータベース、ハッシュ表、データ構造、プログラム等を利用し実行される。
【０１５６】
Ｃ．複数符号復号化表の作成
図６Ａは複数符号復号化表の作成プロセス６５０を記述する。演算６５０は上で述べられたハードウェア要素を１つ以上使って実行され、図９から１１の部分がその例である。前述の図では、表を作るプロセス６５０は、ステップ３０６（図３）やステップ４０６（図４）という適切なタイミングで実行される。
【０１５７】
ステップ６５２はハフマン符号木を作成し、可変長ビット符号（ハフマン符号）を各入力（unencode）符号に当てはめる。ハフマン符号木の作成は関連分野でよく知られており、様々な技術文献で議論されている。別の方法としては、領域符号化、算術符号化や他のエントロピー符号化が適用可能である。
【０１５８】
ステップ６５４は複数符号復号化表６７０を初期化する。indexWidth６７８はステップ６５４の一部として確立される。幅６７８は様々なファクターにより決定される。例えば、復号過程がある特定のコンピュータで実行されるのであれば、indexWidth６７８は復号時間の最も早くなるメモリ階層により決定される。他の考慮から、幅６７８は以下のように選択される。選択された表の行（entries）の最大数を、要望した数、例えばコンピュータのバスの最大バイナリー数、と一致させ、選択された表の幅は、ハフマンインデックスに対応する復号された値の最大幅が適応する最小ものとする。さらに別の考慮としては、幅６７８は最も頻繁に現れる復号された値の組み合わせに適用できる十分な長さを得られるよう選ばれる。
【０１５９】
ステップ６５６は表６７０に値を入れる。即ち、ステップ６５６はハフマン符号の適当な制御列を各表の要素に挿入し、制御列のハフマン符号を連結して作られたビット制御列は表のインデックス６７１の先頭部分と一致するようにし、さらにこれ以上ハフマン符号を追加すると幅６７８の上限を越える。別の言葉で言うと、各表の要素に対し、ステップ６５６はインデックス６７１を連結されたハフマン符号の列として扱い、ステップ６５６が欄６７６に挿入する復号値を与えるようにハフマン符号を復号する。インデックスの終わりの部分の残されたビットは無視される。ステップ６５８に示されるように、ステップ６５６の終了時、各復号値の欄６７６はインデックス６７１で割り当てられたハフマン符号と一致する最も長い復号された符号の列を含む。
【０１６０】
ステップ６６０は欄６７２、６７４を完成させる。欄６７２は、欄６７６の中で復号された値で表されるインデックス６７１の中のビットの数を表す。復号化表に関する限り、使われなかった、後のビットは無視される。表の各要素に対して、欄６７４は、欄６７６にいくつ復号値が含まれているかを表す。
【０１６１】
１つの実施形態として、実世界のビデオで、複数の色チャンネル、即ちＲ、Ｇ及びＢチャンネルあるいは、Ｙ、Ｃｒ及びＣｂチャンネルを含むビデオへの応用では、複数符号化表が作られ、それぞれの記号表は、それ自身のハフマン符号木を持っている。
【０１６２】
Ｄ．複数符号復号化表を用いた復号
図６Ｃは複数符号を使った復号プロセス６００を示す。演算６００は上で述べられたハードウェア要素を１つ以上使って実行され、図９から１１の部分がその例である。制限は無く、単に説明を簡単にするため、操作６００は表６７０のコンテクストで説明される（図６Ｂ）。
【０１６３】
ここでは示されていないが、最初に操作は符号化されたデータ・ストリームを受け取る。これが復号されるデータ・ストリームである。制御列６００はポインタ（”currentBit”と呼ばれる）を使って、入力ストリームを処理する。ステップ６０１ａは入力データの最初のビットもしくは適切な開始位置にポインタを設定する。
【０１６４】
ステップ６０２ａはcurrentBitポインタで始まるビットを調べる。ここで調べられたビットの数がindexWidth６７８で、現在のサンプルとして参照される。制限がない場合本例のindexWidth６７８は１１となる。
【０１６５】
ステップ６０３ａはインデックス６７１を用い現在のサンプルを表６７０へインデックスし、対応する表の要素（row）を特定し、numBits６７２の値を求める。上記されたとおり、numBits値は復号値列６７６で復号されたインデックスビットの数を示す。
【０１６６】
ステップ６０４ａはnumBitsがindexWidth６７８より大きいかを聞く。大きい場合、現在のサンプルはインデックス６７１には大きすぎて収まらないハフマン符号の一部を示す。ゆえに現在のサンプルは完全なハフマン符号を表さない。その場合、ステップ６０４ａからステップ６０５ａに進む。ステップ６０５ａではcurrentBitポインタをindexWidth６７８の値分前に進める。
【０１６７】
次に、ステップ６０６ａは次の８ビットを考慮する。ステップ６０６ａの１つの例では、図６及び表１５とともに上で議論されたように、これらの８つのビットはＡＳＣＩＩや他の出力表現の１つの特定された出力符号を含み示される。ステップ６０６ａの別の例では、これら８つのビットは現在のサンプル（合計８＋１１＝１９ビット）と同時に考慮され、上記されたように図６及び表１３−１４とともに処理される。さらに別の実施形態では複数符号化表がエスケープ記号無しの長いハフマン符号を使って実行され、探索表へポインタを使用しており、ある状況下では、圧縮率の向上を見る。
【０１６８】
ステップ６０６ａの後、６０７ａはポインタを８ビット進ませ、８ビットの次のビットがステップ６０６ａで新たにサンプルされる。これは、ステップ６０２ａが次に実行されるとき、次のサンプルを処理するポインタを準備する。ステップ６０７ａの後、ステップ６２０はステップ６０６ａで見つけられた最終値を取り、出力、例えば出力ストリームに加える、として提供する。
【０１６９】
ステップ６２０の後、ステップ６１１ａはポインタが入力ストリームの最後まで届いたかを聞く。届いた場合、ルーチン６００はステップ６１２ａで終了する。
【０１７０】
以上の記述とは対照的に、ステップ６０４ａは、表６７０の現在のサンプルの要素のnumBits欄がindexWidth６７８を超えない場合それを見つけ、ステップ６２１、６２２、６０９ａはステップ６０５ａ、６０６ａ、６０７ａ６２０の代わりに実行される。
【０１７１】
ステップ６２１は、表６７０を正しい行への索引付けに現在のサンプルを用い、そして欄６７４のnumCodesと一致する値を参照する。上で述べたように、これは一致するインデックス値に存在するハフマン符号の数を示す。ステップ６２２は次にnumCodesの異なるハフマン符号が復号されるまで現在のサンプルのビットでハフマン復号化を繰り返して実行する。代替手段として、ステップ６２２は欄６７６に記載された、復号された値を出力することがあり得る。いずれの場合にも、復号された値はステップ６２２における出力ストリームに追加される。
【０１７２】
ステップ６０９ａではcurrentBitポインタはステップ６２２で処理されたサンプルに対応するnumBits値６７２前に進む。例えば、最後のサンプルの６ビットが１つ以上のハフマン符号を表したなら（即ち、numBits６７２で６であった）、ステップ６０９ａはcurrentBitポインタを６ビット進める。これは最後のサンプルの残り５ビットを、次の１１ビットのサンプル（これらの５ビットを含む）がステップ６０２ａで取られるときに再分析のため残す。
【０１７３】
ステップ６０９ａの後、ステップ６１１ａはポインタが入力ストリームの最後まで届いたかを聞く。届いた場合、ルーチン６００はステップ６１２ａで終了する。別の状況ではcurrentBitsポインタが入力ストリームの最後に届かない場合、ルーチン６００はステップ６０２ａに戻り、より多くのビットを処理する。
【０１７４】
タスク概要
図７を参照すると、タスク視点が示されている。圧縮側では、ビデオキャプチャタスク７０１は圧縮されることになっているビデオストリームをキャプチャする。ビデオストリームは高速前処理ビデオタスク７０２、ビデオを上記図１及び２に述べられているように、前処理される。ビデオ中のフレームが前処理されると、圧縮ビデオタスク７０３、ビデオを上記の記述及び図３及び４に記載のとおり圧縮を行う、へ送られる。圧縮ビデオタスク７０３は圧縮された出力ストリームに使われたハフマン符号木の記録及びハードディスク７０４上の出力ストリームの記録を行う。
【０１７５】
解凍側では、圧縮されたビデオストリームが解凍されるため送られると、圧縮ビデオキャプチャタスク７０５が入力ストリームをキャプチャする。入力ストリームは、圧縮ビデオキャプチャタスク７０５からビデオ解凍タスク７０６へ送られる。ビデオ解凍タスク７０６は入力ストリームを上記と図６にあるように回答し、解凍されたビデオストリーム７０７を出力する。
【０１７６】
ビデオのフレームサイズが大きい、もしくはフレームレートが高い場合、ビデオのデータレートが大変高くなり、ＣＰＵが力不足で全フレームの圧縮解凍が出来ない場合もある。そのような場合、解説されている制御列は、所定の間フレームを圧縮しないので、ＣＰＵは入力されてくるビデオデータに追いつくことができる。
【０１７７】
選択して圧縮する方法は２つある。１つは、決まった周期で圧縮する方法である。例えば、説明されている制御列では、１フレームおきに圧縮するか、２フレーム圧縮し、３番目のフレームはそのままにし、また２フレーム圧縮する、ということが出来る。
【０１７８】
処理可用性に基づく適応する方法
図８で示しているもう１つの方法は、適応システムである。この方法は、ＣＵＰリソースに空きがある場合、フレームを圧縮する。この制御列は入力フレーム８０２のバッファーを保持し、ＣＰＵの可用性を計算する。このバッファー８０２は高速ビデオ前処理タスク８０１とビデオ圧縮タスク８０３の間におかれる。バッファー８０２のなかのフレーム数がいき値、例えば５、を超えると、ビデオ圧縮タスク８０３はフレームの圧縮を飛ばし、バッファー８０２中のフレームを直ちにディスク８０４に書き込む。バッファーサイズが０、もしくは２番目のいき値以下になったら、ビデオ圧縮タスク８０３はフレームの圧縮を再開する。
【０１７９】
他の実施形態
今までの開示された発明は、いくつも例示的に実施形態を示しているが、当業者には、発明の範囲は添付した特許請求の範囲の記載を逸脱することなく改変を行うことができることは明白である。さらに、発明特定事項は明細書、特許請求の範囲では単数で記載されているが、単数への限定が明瞭に示されていない限り、複数が考慮される。その上、当業者にとり、演算制御列が説明と請求のため、特別な順序で見解を述べる必要があることは明白であるが、本発明では、そのような特別な順序以外の様々な変更が考慮されている。
【０１８０】
また、当業者は情報や信号は多くの技術や技法を使い示されていることを解する。例えば、ここで参照されているデータ、命令、コマンド、情報、シグナル、ビット、信号及びチップは電圧、電流、電磁波、磁界または粒子、その他の物あるいはこれらの組み合わせで表される。
【０１８１】
さらに、当業者は上述した論理ブロック、モジュール、回路、プロセスステップあるいはここで説明されている他の機能は、電子ハードウェア、ファームウェア、コンピュータソフトウェア、あるいはこれらの組み合わせとして実行されることを理解する。ハードウェアとソフトウェアの互換性、上述した要素、ブロック、モジュール、回路及びステップを理解することはそれらの機能性という点で、上で解説されている。そのような機能性がハードウェアまたはソフトウェアとして実行されているかどうかはシステム全体に特定のアプリケーションと設計制約が課されるかによる。当業者は解説された機能性を、各特定用途のための様々な方法で実施することがあるが、それは本発明の範囲外と解釈すべきではない。
【０１８２】
ここで開示された実施形態と関連して記述された、上述の様々な論理ブロック、モジュールや回路は汎用プロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、特定用途向き集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）や他のプラグラム可能な論理デバイス、ディスクリートゲート、トランジスタ論理、ディスクリートハードウェアコンポーネントやここで説明された機能を実行するために設計されたいかなる組み合わせとともに実施、実行しうる。汎用プロセッサはマイクロプロセッサでよいが、通常のプロセッサ、コントローラ、マイクロコントローラあるいは状態マシンでもよい。プロセッサはまた、計算デバイスの組み合わせは、例えばＤＳＰとマイクロプロセッサの組み合わせ、複数のマイクロプロセッサ、１つ以上のＤＰＳコアと結合したマイクロプロセッサ、や他のそのような構成として実行される。
【０１８３】
本開示発明の実施形態に関連して説明された方法やアルゴリズムのステップは、直接ハードウェア、プロセッサにより実行されるソフトウェアモジュールあるいはそれらの組み合わせで行われる。ソフトウェアモジュールは、ＲＡＭメモリ、フラッシュメモリ、ＲＯＭメモリ、ＥＰＲＯＭメモリ、ＥＥＰＲＯＭメモリ、レジスター、ハードディスク、リムーバルディスク、ＣＤ−ＲＯＭあるいはあらゆる公知の記録装置に存する。典型的な記録装置はプロセッサと組み合わされ、プロセッサは情報を読み、書き込むことが出来る。他の表現としては、記録装置はプロセッサと一体化している。プロセッサと記録装置は同じＡＳＩＣ中に存在する。
【０１８４】
さらに、上述の開示された実施形態は、当業者が本発明の実施を可能な程度記載されている。実施形態の様々な改変は当業者にとり明白なものであり、本明細書に記載の包括的な原則は、他の実施形態に対し本発明の範囲を逸脱することなく応用できる。即ち、本発明はここで示された実施形態に制限されることなく、ここで開示された原理及び新規機能と最も広い範囲で一致させる。
【０１８５】
本明細書中において「典型的」という語は、「例として、例、あるいは解説」という意味で用いられる。ここで「典型的」と説明されているいかなる実施形態も、他の実施形態と比較し優れているという意味ではない。
【図面の簡単な説明】
【０１８６】
【図１】４つの差分計算を用いるビデオデータ圧縮制御列のフローチャートである。
【図１Ａ】図１のタスク１２４の他の選択として実現された適応型圧縮用の典型的制御列のフローチャートである。
【図１Ｂ】多次元予測用の典型的制御列のフローチャートである。
【図１Ｃ】現在の時間で示された入力配列の、現在の要素と隣接する種々の要素との関係を表したテーブルである。
【図１Ｄ】過去の有る時間における、入力配列の、現在のメンバーと隣接する種々の要素との関係を表したテーブルである。
【図２】２つの差分計算を用いるビデオデータ圧縮制御列のフローチャートである。
【図３Ａ】一般化された圧縮制御列のフローチャートである。
【図３】ハフマン符号木を画像フレームの列の統計的分布を用いて作成し、そのハフマン符号木をより長い画像の列に応用するフローチャートであるである。
【図４】ハフマン符号木を画像フレームの列の統計的分布を用いて作成し、そのハフマン符号木をより長い画像の列に応用し、圧縮比がある水準を下回るときにハフマン符号木を作成するフローチャートである。
【図５】入力ストリーム及び現在のビットポインタのブロック略図である。
【図６】連鎖状のコードアプローチ及び復号テーブルを用いた入力ストリームのフレームの復号についてのフローチャートである。
【図６Ａ】複数符号テーブルを準備するプロセスのフローチャートである。
【図６Ｂ】図６Ａにより準備された複数符号復号テーブルの例である。
【図６Ｃ】図６Ａにより準備された、図６Ｂに示されたテーブルのようなテーブルを利用し複数符号復号を行う過程のフローチャートである。
【図７】圧縮及び解凍のステージを表すタスク観点からのブロック略図である。
【図８】選択圧縮スキームのブロック略図である。
【図９】典型的なデジタルデータ処理機のブロックダイアグラムである。
【図１０】典型的な信号保持媒体の平面図である。
【図１１】典型的な論理回路の透視図である。
【図１】
2008535327.tif 000019
【図１Ａ】
2008535327.tif 000020
【図１Ｂ】
2008535327.tif 000021
【図１Ｃ】
2008535327.tif 000022
【図１Ｄ】
2008535327.tif 000023
【図２】
2008535327.tif 000024
【図３】
2008535327.tif 000025
【図３Ａ】
2008535327.tif 000026
【図４】
2008535327.tif 000027
【図５】
2008535327.tif 000028
【図６】
2008535327.tif 000029
【図６Ａ】
2008535327.tif 000030
【図６Ｂ】
2008535327.tif 000031
【図６Ｃ】
2008535327.tif 000032
【図７】
2008535327.tif 000033
【図８】
2008535327.tif 000034
【図９】
2008535327.tif 000035
【図１０】
2008535327.tif 000036
【図１１】
2008535327.tif 000037
【国際調査報告】
2008535327.tif 000038
2008535327.tif 000039