[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

JP5472610B2 - 数値データ列の符号化/復号化の方法および装置 - Google Patents

数値データ列の符号化/復号化の方法および装置 Download PDF

Info

Publication number
JP5472610B2
JP5472610B2 JP2009268415A JP2009268415A JP5472610B2 JP 5472610 B2 JP5472610 B2 JP 5472610B2 JP 2009268415 A JP2009268415 A JP 2009268415A JP 2009268415 A JP2009268415 A JP 2009268415A JP 5472610 B2 JP5472610 B2 JP 5472610B2
Authority
JP
Japan
Prior art keywords
data
bit
unit
string
length
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2009268415A
Other languages
English (en)
Other versions
JP2011114525A (ja
Inventor
成紀 中田
孝次 稲垣
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Dai Nippon Printing Co Ltd
Original Assignee
Dai Nippon Printing Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Dai Nippon Printing Co Ltd filed Critical Dai Nippon Printing Co Ltd
Priority to JP2009268415A priority Critical patent/JP5472610B2/ja
Publication of JP2011114525A publication Critical patent/JP2011114525A/ja
Application granted granted Critical
Publication of JP5472610B2 publication Critical patent/JP5472610B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Description

本発明は、固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化し、逆に、復号化する技術に関する。
デジタルデータファイルに対するデータ圧縮・伸張の技術は、情報量を維持しつつ、ファイルサイズを縮小する手法として様々な分野で利用されている。特に、音声・画像・映像といったデータファイルは、情報の冗長度が高いため、データ圧縮した状態でデータファイルを取り扱うことが一般化している。
データ圧縮技術の重要な基本原理の1つは、固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化することである。8ビット、16ビットという固定長ビットのデータは、CPUによる演算処理には向いているが、冗長ビットが多く含まれているため、データ容量が大きくなるという問題がある。そこで、固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化し、冗長ビットを削除すれば、情報量を維持しつつ、データ容量を圧縮することができる。
データ圧縮技術のもうひとつの重要な基本原理は、ランレングスを用いた表現形式の採用である。たとえば、0を示す数値データについて、ランレングス表現形式を採用した場合、連続した0の個数をカウントし、当該カウント値を情報として記録することにより、データ容量の削減を図ることができる。特に、画像データや映像データの圧縮には、このランレングスを用いた表現形式が有効である。
現在、主流となっているJPEG方式、MPEG方式、LHA方式などのデータ圧縮方式では、可変長符号であるハフマン符号を利用した符号化技術が採用されている。一般的に利用されているベースラインJPEG方式では、画像を8×8画素のブロックに分け、個々のブロックごとに離散コサイン変換(DCT)、量子化、ハフマン符号化という処理が順次行われる。この場合、ハフマン符号化では、DC成分とAC成分とに分けた処理が行われる、いずれの場合も、固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化することにより、冗長ビットの削減が行われる。AC成分については、更に、0を示す数値データについて、ランレングス表現形式が採用され、データ容量の大幅な削減が図られる。
たとえば、下記の特許文献1,2には、ハフマン符号を利用してJPEG方式で画像データの圧縮を行う符号化装置が開示されている。また、下記の特許文献3には、JPEG方式で圧縮された画像データを効率良く復号化する復号化装置が開示されている。
特開平5−110863号公報 特開平5−114240号公報 特開平8−316844号公報
上述したとおり、可変長のビット列を用いて符号化したデータ列は、CPUによる取り扱いに不適当であるため、実際に利用する際には、復号化を行って、元の固定長ビットからなる数値データ列へ戻す必要がある。ところが、可変長のビット列からなる符号化データは、区切りとなるビット位置が固定ではないため、処理単位の境界が不明確であり、従来の一般的な方法では、並列処理による復号化を行うことができない。すなわち、1台の復号処理ユニットを用いて、先頭から順に復号処理を行わざるを得ない。このため、復号処理に時間がかかり、特にリアルタイムでの表示処理を要求される映像データなどの場合、スムーズな再生が阻害されるなどの問題が生じる。
前掲の特許文献3には、このような問題の一解決法として、初回の復号処理時に、符号化データ列の処理単位の境界を特定する境界情報を作成する作業を行っておき、2回目以降の復号処理時には、当該境界情報に基づいて符号化データ列を複数の部分データに分割し、複数台の復号処理ユニットを用いた並列処理により復号化を行う技術が開示されている。この技術を利用すれば、2回目以降の復号処理時には、並列処理による効率的な復号化が可能になる。しかしながら、初回の復号処理時には、依然として並列処理を行うことができず、当該技術は、根本的な解決策を提示するものではない。
そこで本発明は、固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化しつつ、復号化の段階において、並列処理が可能になる特殊な符号化の技術を提供することを目的とする。また、本発明は、当該符号化技術によって符号化されたデータを複数台の復号処理ユニットを用いた並列処理によって復号化する技術を提供することを目的とする。
(1) 本発明の第1の態様は、固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化する数値データ列の符号化方法において、
演算処理装置が、特定の数値データを可変長のビット列を用いて表現した実データを生成し、この実データの先頭に、少なくとも当該実データのビット長を示す情報をもった識別コードを付加することにより、少なくとも上記特定の数値データ自身を示す情報をもった単位符号データを生成し、生成された複数の単位符号データを順番に並べて符号化データ列として出力する処理を実行し、
付加する識別コードを選択する際に、少なくとも「所定範囲内の複数通りのビット長と、当該ビット長に対応する識別コードとの対応関係」を示す符号化テーブルを用いるようにし、かつ、当該テーブルが、当該テーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をaとしたときに、先頭からaビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在せず、かつ、当該着目識別コードに対応するビット長をbとしたときに、所定の基準ビット長N(但し、Nは2以上の整数)に対して「a+b=k×N」(但し、kは任意の整数)なる条件を満足するテーブルであるようにしたものである。
(2) 本発明の第2の態様は、上述した第1の態様に係る数値データ列の符号化方法において、
演算処理装置が、
符号化の対象となる数値データ列を入力するデータ入力段階と、
個々のビット長に対応する固有の識別コードを示す符号化テーブルを入力するテーブル入力段階と、
入力した数値データ列から個々の数値データを順番に抽出するデータ抽出段階と、
抽出した数値データから冗長なビットを削除することにより実データを生成する実データ生成段階と、
符号化テーブルを参照して、生成された実データのビット長に対応する識別コードを選択する識別コード選択段階と、
生成された実データの先頭に、選択された識別コードを付加することにより、抽出した数値データを示す単位符号データを生成する単位符号データ生成段階と、
データ抽出段階、実データ生成段階、識別コード選択段階、単位符号データ生成段階を、入力した数値データ列を構成する数値データのそれぞれについて繰り返し実行する段階と、
生成された単位符号データを順番に並べて、符号化データ列として出力するデータ出力段階と、
を実行するようにし、
符号化テーブルが、
実データを表現するのに十分な所定範囲内の複数通りのビット長について、個々のビット長と、当該ビット長に対応する固有の識別コードと、の対応関係を示すテーブルであり、
このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をaとしたときに、先頭からaビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在せず、かつ、当該着目識別コードに対応するビット長をbとしたときに、所定の基準ビット長N(但し、Nは2以上の整数)に対して「a+b=k×N」(但し、kは任意の整数)なる条件を満足するテーブルであるようにしたものである。
(3) 本発明の第3の態様は、上述した第2の態様に係る数値データ列の符号化方法において、
実データ生成段階で、抽出した数値データを示す実データとして、当該数値データが0を示すデータである場合にはビット長が0である仮想のビット列を、正の値を示すデータである場合には先頭に0を含まない可変長のビット列を、負の値を示すデータである場合には先頭に1を含まない可変長のビット列を、それぞれ生成するようにしたものである。
(4) 本発明の第4の態様は、上述した第1の態様に係る数値データ列の符号化方法において、
演算処理装置が、
符号化の対象となる数値データ列を入力するデータ入力段階と、
個々のビット長と個々のランレングス値との組み合わせに対応する固有の識別コードを示す二次元符号化テーブルを入力するテーブル入力段階と、
入力した数値データ列から個々の数値データを順番に抽出するデータ抽出段階と、
抽出した数値データが0を示すデータであり、かつ、これまでのカウント値が最大値Rmaxに達していない場合に、0を示す数値データが連続して抽出された回数をランレングス値としてカウントするランレングス値カウント段階と、
抽出した数値データが正の値を示すデータである場合に、当該数値データを示す実データとして先頭に0を含まない可変長のビット列を生成し、抽出した数値データが負の値を示すデータである場合に、当該数値データを示す実データとして先頭に1を含まない可変長のビット列を生成し、抽出した数値データが0を示すデータであり、かつ、カウント値が最大値Rmaxに達していた場合に、ビット長が0である仮想のビット列を実データとして生成する実データ生成段階と、
二次元符号化テーブルを参照して、生成された実データのビット長と、当該実データが生成された時のランレングス値と、の組み合わせに対応する識別コードを選択し、カウント値を0にリセットする識別コード選択段階と、
生成された実データの先頭に、選択された識別コードを付加することにより、抽出した数値データを示す単位符号データを生成する単位符号データ生成段階と、
データ抽出段階を、入力した数値データ列を構成する数値データのそれぞれについて繰り返し実行するとともに、ランレングス値カウント段階、実データ生成段階、識別コード選択段階および単位符号データ生成段階を、必要に応じて繰り返し実行する段階と、
生成された単位符号データを順番に並べて、符号化データ列として出力するデータ出力段階と、
を実行するようにし、
符号化テーブルが、予め定められた所定の最大ランレングス値をRmaxとしたときに、実データを表現するのに十分な所定範囲内の複数通りのビット長と、Rmax までの範囲内の複数通りのランレングス値と、の各組み合わせについて、個々の組み合わせと、当該組み合わせに対応する固有の識別コードと、の対応関係を示すテーブルであり、
このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をaとしたときに、先頭からaビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在せず、かつ、当該着目識別コードに対応するビット長をbとしたときに、所定の基準ビット長N(但し、Nは2以上の整数)に対して「a+b=k×N」(但し、kは任意の整数)なる条件を満足するテーブルであるようにしたものである。
(5) 本発明の第5の態様は、上述した第4の態様に係る数値データ列の符号化方法において、
データ抽出段階で、数値データを抽出する際に、「抽出対象となる数値データを含めて、数値データ列の末尾までに後続する数値データがすべて0であるというゼロ永続状態」か否かを調べる調査処理を実行し、当該調査処理によりゼロ永続状態であることが確認された場合に、
実データ生成段階では、ビット長が0である仮想のビット列を実データとして生成し、識別コード選択段階では、ゼロ永続状態を示す終端コードを識別コードとして選択するようにしたものである。
(6) 本発明の第6の態様は、上述した第1〜第5の態様に係る数値データ列の符号化方法において、
実データのビット長bの出現頻度、もしくは、ビット長bとランレングス値Rとの組み合わせの出現頻度が高いほど、より短いビット長aをもつ識別コードが対応づけられている符号化テーブルを用いるようにしたものである。
(7) 本発明の第7の態様は、上述した第6の態様に係る数値データ列の符号化方法において、
符号化の対象となる数値データ列について、実データのビット長bの出現頻度、もしくは、ビット長bとランレングス値Rとの組み合わせの出現頻度を集計する頻度集計段階と、
既存の標準符号化テーブル内の、基準ビット長Nの整数倍の差をもつビット長b相互について、テーブルの内容を入れ替える処理を行うことにより、実データのビット長bの出現頻度、もしくは、ビット長bとランレングス値Rとの組み合わせの出現頻度が高いほど、より短いビット長aをもつ識別コードが対応づけられている修正した符号化テーブルを生成するテーブル修正段階と、
を更に実行し、
識別コード選択段階で、修正した符号化テーブルを参照して、識別コードの選択を行うようにしたものである。
(8) 本発明の第8の態様は、上述した第1〜第7の態様に係る数値データ列の符号化方法において、
データ出力段階において、符号化データ列と、符号化の処理に用いた符号化テーブルと、を含むデータファイルを出力するようにしたものである。
(9) 本発明の第9の態様は、上述した第1〜第7の態様に係る数値データ列の符号化方法において、
データ出力段階において、符号化データ列と、符号化の処理に用いた符号化テーブルを特定するテーブル特定情報と、を含むデータファイルを出力するようにしたものである。
(10) 本発明の第10の態様は、上述した第2の態様に係る数値データ列の符号化方法によって符号化された符号化データ列について、符号化の対象となった数値データ列を復元する数値データ列の復号化方法において、
複数M台の復号処理ユニットを含む演算処理装置が、
復号化の対象となる符号化データ列を入力するデータ入力段階と、
符号化に用いられた符号化テーブルを入力するテーブル入力段階と、
それぞれLビット(但し、LはNの整数倍、かつ、単位符号データの最大ビット長をUmaxとした場合に、L≧Umax)の連続ビットデータに対する復号処理を行う機能を有する複数M台の復号処理ユニットに対して、符号化データ列の一部を部分データとして分配するデータ分配段階と、
M台の復号処理ユニットによる並列処理により、符号化テーブルを参照しながら、それぞれ分配された部分データから、実データに対応する数値データを取り出す復号処理を行う復号処理段階と、
M台の復号処理ユニットによる復号処理の結果を取捨選択して、個々の実データに対応する数値データを並べた復号化データ列を生成するデータ編成段階と、
生成された復号化データ列を出力するデータ出力段階と、
を実行するようにし、
データ分配段階では、符号化データ列の未復号化部の先頭から数えて第(N×(i−1)+1)ビット目〜第(N×(i−1)+L)ビット目までのビット列を、第i番目のユニット(i=1〜M)に分配する処理を、符号化データ列のすべての部分に対する復号化が完了するまで繰り返し行い、
復号処理段階では、M台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、実データに対応する数値データを取り出すための処理を行い、
データ編成段階では、1回の並列処理によってM台の復号処理ユニットから処理結果が得られたときに、まず第1のユニットを最初の採択ユニットとして決定し、この採択ユニットによって正常な復号処理が行われた最終ビットを認識し、当該最終ビットの直後のビットを先頭ビットとする部分データが分配された別なユニットを新たな採択ユニットと決定する処理を、可能な限り続ける処理を行い、各採択ユニットで正常に復号化が行われた数値データを収集し、1回もしくは複数回の並列処理によってそれぞれ収集された数値データを並べることにより復号化データ列を生成するようにしたものである。
(11) 本発明の第11の態様は、上述した第4の態様に係る数値データ列の符号化方法によって符号化された符号化データ列について、符号化の対象となった数値データ列を復元する数値データ列の復号化方法において、
複数M台の復号処理ユニットを含む演算処理装置が、
復号化の対象となる符号化データ列を入力するデータ入力段階と、
符号化に用いられた二次元符号化テーブルを入力するテーブル入力段階と、
それぞれLビット(但し、LはNの整数倍、かつ、単位符号データの最大ビット長をUmaxとした場合に、L≧Umax)の連続ビットデータに対する復号処理を行う機能を有する複数M台の復号処理ユニットに対して、符号化データ列の一部を部分データとして分配するデータ分配段階と、
M台の復号処理ユニットによる並列処理により、二次元符号化テーブルを参照しながら、それぞれ分配された部分データから、0を示す数値データを羅列する回数を示すランレングス値と、当該0を示す数値データに後続する実データに対応する数値データと、を取り出す復号処理を行う復号処理段階と、
M台の復号処理ユニットによる復号処理の結果を取捨選択して、0を示す数値データおよび個々の実データに対応する数値データを並べた復号化データ列を生成するデータ編成段階と、
生成された復号化データ列を出力するデータ出力段階と、
を実行するようにし、
データ分配段階では、符号化データ列の未復号化部の先頭から数えて第(N×(i−1)+1)ビット目〜第(N×(i−1)+L)ビット目までのビット列を、第i番目のユニット(i=1〜M)に分配する処理を、符号化データ列のすべての部分に対する復号化が完了するまで繰り返し行い、
復号処理段階では、M台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、ランレングス値および実データに対応する数値データを取り出すための処理を行い、
データ編成段階では、1回の並列処理によってM台の復号処理ユニットから処理結果が得られたときに、まず第1のユニットを最初の採択ユニットとして決定し、この採択ユニットによって正常な復号処理が行われた最終ビットを認識し、当該最終ビットの直後のビットを先頭ビットとする部分データが分配された別なユニットを新たな採択ユニットと決定する処理を、可能な限り続ける処理を行い、各採択ユニットで正常に復号化が行われた数値データを収集し、1回もしくは複数回の並列処理によってそれぞれ収集された情報に基いて数値データを並べることにより復号化データ列を生成するようにしたものである。
(12) 本発明の第12の態様は、「少なくとも所定のビット長を示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配したデータであって、全長が所定の基準ビット長N(但し、Nは2以上の整数)の整数倍になるように設定された単位符号データ」を、複数組並べることにより構成された符号化データ列について、少なくとも個々の実データに対応する数値データを復元する数値データ列の復号化方法において、
符号化データ列をNビットの整数倍の単位で分割して複数の部分データを生成し、各部分データを複数M台の復号処理ユニットに分配し、
複数M台の復号処理ユニットの並列処理により、分配された部分データに対する復号処理を行い、
正常に復号化が行われた数値データを並べることにより復号化データ列を生成するようにしたものである。
(13) 本発明の第13の態様は、上述した第12の態様に係る数値データ列の復号化方法において、
「所定のビット長を示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配したデータであって、全長が所定の基準ビット長N(但し、Nは2以上の整数)の整数倍になるように設定された単位符号データ(最大ビット長Umax)」を、複数組並べることにより構成された符号化データ列について、個々の実データに対応する数値データを復元するために、
複数M台の復号処理ユニットを含む演算処理装置が、
復号化の対象となる符号化データ列を入力するデータ入力段階と、
個々の識別コードに対応する特定のビット長を示す符号化テーブルを入力するテーブル入力段階と、
それぞれLビット(但し、LはNの整数倍、かつ、L≧Umax)の連続ビットデータに対する復号処理を行う機能を有する複数M台の復号処理ユニットに対して、符号化データ列の一部を部分データとして分配するデータ分配段階と、
M台の復号処理ユニットによる並列処理により、符号化テーブルを参照しながら、それぞれ分配された部分データから、実データに対応する数値データを取り出す復号処理を行う復号処理段階と、
M台の復号処理ユニットによる復号処理の結果を取捨選択して、個々の実データに対応する数値データを並べた復号化データ列を生成するデータ編成段階と、
生成された復号化データ列を出力するデータ出力段階と、
を実行するようにし、
データ分配段階では、符号化データ列の未復号化部の先頭から数えて第(N×(i−1)+1)ビット目〜第(N×(i−1)+L)ビット目までのビット列を、第i番目のユニット(i=1〜M)に分配する処理を、符号化データ列のすべての部分に対する復号化が完了するまで繰り返し行い、
復号処理段階では、M台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、実データに対応する数値データを取り出すための処理を行い、
データ編成段階では、1回の並列処理によってM台の復号処理ユニットから処理結果が得られたときに、まず第1のユニットを最初の採択ユニットとして決定し、この採択ユニットによって正常な復号処理が行われた最終ビットを認識し、当該最終ビットの直後のビットを先頭ビットとする部分データが分配された別なユニットを新たな採択ユニットと決定する処理を、可能な限り続ける処理を行い、各採択ユニットで正常に復号化が行われた数値データを収集し、1回もしくは複数回の並列処理によってそれぞれ収集された数値データを並べることにより復号化データ列を生成するようにしたものである。
(14) 本発明の第14の態様は、上述した第13の態様に係る数値データ列の符号化方法において、
復号処理段階で、M台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、実データに対応する数値データを取り出すための処理を、正常な復号処理が可能な限り続行するようにしたものである。
(15) 本発明の第15の態様は、上述した第13の態様に係る数値データ列の符号化方法において、
復号処理段階で、M台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、1つの単位符号データについての実データに対応する数値データのみを取り出すための処理を行うようにしたものである。
(16) 本発明の第16の態様は、上述した第13の態様に係る数値データ列の符号化方法において、
復号処理段階で、M台の復号処理ユニットのうち、第1台目〜第(M−1)台目のユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、1つの単位符号データについての実データに対応する数値データのみを取り出すための処理を行い、第M台目のユニットが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、実データに対応する数値データを取り出すための処理を、正常な復号処理が可能な限り続行するようにしたものである。
(17) 本発明の第17の態様は、上述した第12の態様に係る数値データ列の復号化方法において、
「所定のビット長と所定のランレングス値との組み合わせを示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配した構造を有し、0を示す数値データを当該ランレングス値に相当する回数だけ羅列した後に実データに対応する数値データを並べたデータ列を示し、全長が所定の基準ビット長N(但し、Nは2以上の整数)の整数倍になるように設定された単位符号データ(最大ビット長Umax)」を、複数組並べることにより構成された符号化データ列について、0を示す数値データおよび個々の実データを並べてなる元のデータ列を復元するために、
複数M台の復号処理ユニットを含む演算処理装置が、
復号化の対象となる符号化データ列を入力するデータ入力段階と、
個々の識別コードに対応する特定のビット長と特定のランレングス値との組み合わせを示す二次元符号化テーブルを入力するテーブル入力段階と、
それぞれLビット(但し、LはNの整数倍、かつ、L≧Umax)の連続ビットデータに対する復号処理を行う機能を有する複数M台の復号処理ユニットに対して、符号化データ列の一部を部分データとして分配するデータ分配段階と、
M台の復号処理ユニットによる並列処理により、二次元符号化テーブルを参照しながら、それぞれ分配された部分データから、0を示す数値データを羅列する回数を示すランレングス値と、当該0を示す数値データに後続する実データに対応する数値データと、を取り出す復号処理を行う復号処理段階と、
M台の復号処理ユニットによる復号処理の結果を取捨選択して、0を示す数値データおよび個々の実データに対応する数値データを並べた復号化データ列を生成するデータ編成段階と、
生成された復号化データ列を出力するデータ出力段階と、
を実行するようにし、
データ分配段階では、符号化データ列の未復号化部の先頭から数えて第(N×(i−1)+1)ビット目〜第(N×(i−1)+L)ビット目までのビット列を、第i番目のユニット(i=1〜M)に分配する処理を、符号化データ列のすべての部分に対する復号化が完了するまで繰り返し行い、
復号処理段階では、M台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、ランレングス値および実データに対応する数値データを取り出すための処理を行い、
データ編成段階では、1回の並列処理によってM台の復号処理ユニットから処理結果が得られたときに、まず第1のユニットを最初の採択ユニットとして決定し、この採択ユニットによって正常な復号処理が行われた最終ビットを認識し、当該最終ビットの直後のビットを先頭ビットとする部分データが分配された別なユニットを新たな採択ユニットと決定する処理を、可能な限り続ける処理を行い、各採択ユニットで正常に復号化が行われた数値データを収集し、1回もしくは複数回の並列処理によってそれぞれ収集された情報に基づいて数値データを並べることにより復号化データ列を生成するようにしたものである。
(18) 本発明の第18の態様は、上述した第17の態様に係る数値データ列の復号化方法において、
復号処理段階で、M台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、ランレングス値および実データに対応する数値データを取り出すための処理を、正常な復号処理が可能な限り続行するようにしたものである。
(19) 本発明の第19の態様は、上述した第17の態様に係る数値データ列の復号化方法において、
復号処理段階で、M台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、1つの単位符号データについてのランレングス値および実データに対応する数値データのみを取り出すための処理を行うようにしたものである。
(20) 本発明の第20の態様は、上述した第17の態様に係る数値データ列の復号化方法において、
復号処理段階で、M台の復号処理ユニットのうち、第1台目〜第(M−1)台目のユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、1つの単位符号データについてのランレングス値および実データに対応する数値データのみを取り出すための処理を行い、第M台目のユニットが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、ランレングス値および実データに対応する数値データを取り出すための処理を、正常な復号処理が可能な限り続行するようにしたものである。
(21) 本発明の第21の態様は、上述した第17〜第20の態様に係る数値データ列の復号化方法において、
復号処理段階で、M台の復号処理ユニットのそれぞれが、0を示す数値データをランレングス値に相当する回数だけ羅列した後に実データに相当する数値データを並べることにより、元のデータを復元する処理を実行し、
データ編成段階で、復元されたデータを並べることにより復号化データ列を生成することを特徴とする数値データ列の復号化方法。
(22) 本発明の第22の態様は、上述した第17〜第20の態様に係る数値データ列の復号化方法において、
復号処理段階で、M台の復号処理ユニットのそれぞれが、取り出したランレングス値および実データに対応する数値データをそのまま出力する処理を実行し、
データ編成段階で、各採択ユニットから収集した情報に基づいて、0を示す数値データをランレングス値に相当する回数だけ羅列した後に実データに相当する数値データを並べることにより、元のデータを復元する処理を実行し、復元されたデータを並べることにより復号化データ列を生成することを特徴とする数値データ列の復号化方法。
(23) 本発明の第23の態様は、上述した第13〜第22の態様に係る数値データ列の復号化方法において、
符号化データ列と、符号化の処理に用いた符号化テーブルと、を含むデータファイルが与えられたときに、
データ入力段階において、データファイルから符号化データ列を抽出する処理を行い、
テーブル入力段階において、データファイルから符号化テーブルを抽出する処理を行うようにしたものである。
(24) 本発明の第24の態様は、上述した第13〜第22の態様に係る数値データ列の復号化方法において、
符号化データ列と、符号化の処理に用いた符号化テーブルを特定するテーブル特定情報と、を含むデータファイルが与えられたときに、
データ入力段階において、データファイルから符号化データ列を抽出する処理を行い、
テーブル入力段階において、データファイルからテーブル特定情報を抽出する処理を行った後、当該テーブル特定情報によって特定されるテーブルを選択して利用するようにしたものである。
(25) 本発明の第25の態様は、上述した第13〜第24の態様に係る数値データ列の復号化方法において、
データ分配段階では、M≧1+L/Nとなるような複数M台の復号処理ユニットに部分データの分配を行い、
復号処理段階では、これらM台の復号処理ユニットによる並列処理を行うようにしたものである。
(26) 本発明の第26の態様は、固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化する数値データ列の符号化装置において、
符号化の対象となる数値データ列を入力して格納するデータ格納部と、
個々のビット長に対応する固有の識別コードを示す符号化テーブルを格納するテーブル格納部と、
データ格納部に格納されている数値データ列から個々の数値データを順番に抽出するデータ抽出部と、
抽出した数値データから冗長なビットを削除することにより実データを生成する実データ生成部と、
符号化テーブルを参照して、生成された実データのビット長に対応する識別コードを選択する識別コード選択部と、
生成された実データの先頭に、選択された識別コードを付加することにより、抽出した数値データを示す単位符号データを生成する単位符号データ生成部と、
生成された単位符号データを順番に並べて、符号化データ列として出力するデータ出力部と、
を設け、
符号化テーブルが、
実データを表現するのに十分な所定範囲内の複数通りのビット長について、個々のビット長と、当該ビット長に対応する固有の識別コードと、の対応関係を示すテーブルであり、
このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をaとしたときに、先頭からaビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在せず、かつ、当該着目識別コードに対応するビット長をbとしたときに、所定の基準ビット長N(但し、Nは2以上の整数)に対して「a+b=k×N」(但し、kは任意の整数)なる条件を満足するテーブルであるようにしたものである。
(27) 本発明の第27の態様は、上述した第26の態様に係る数値データ列の符号化装置において、
実データ生成部が、抽出した数値データを示す実データとして、当該数値データが0を示すデータである場合にはビット長が0である仮想のビット列を、正の値を示すデータである場合には先頭に0を含まない可変長のビット列を、負の値を示すデータである場合には先頭に1を含まない可変長のビット列を、それぞれ生成するようにしたものである。
(28) 本発明の第28の態様は、固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化する数値データ列の符号化装置において、
符号化の対象となる数値データ列を入力して格納するデータ格納部と、
個々のビット長と個々のランレングス値との組み合わせに対応する固有の識別コードを示す二次元符号化テーブルを格納するテーブル格納部と、
データ格納部に格納されている数値データ列から個々の数値データを順番に抽出するデータ抽出部と、
抽出した数値データが0を示すデータであり、かつ、これまでのカウント値が最大値Rmaxに達していない場合には、0を示す数値データが連続して抽出された回数をランレングス値としてカウントする処理を行い、抽出した数値データが正の値を示すデータである場合には、当該数値データを示す実データとして先頭に0を含まない可変長のビット列を生成する処理を行い、抽出した数値データが負の値を示すデータである場合には、当該数値データを示す実データとして先頭に1を含まない可変長のビット列を生成する処理を行い、抽出した数値データが0を示すデータであり、かつ、カウント値が最大値Rmaxに達していた場合には、ビット長が0である仮想のビット列を実データとして生成する実データ生成部と、
二次元符号化テーブルを参照して、生成された実データのビット長と、当該実データが生成された時のランレングス値と、の組み合わせに対応する識別コードを選択し、カウント値を0にリセットする識別コード選択部と、
生成された実データの先頭に、選択された識別コードを付加することにより、抽出した数値データを示す単位符号データを生成する単位符号データ生成部と、
生成された単位符号データを順番に並べて、符号化データ列として出力するデータ出力部と、
を設け、
符号化テーブルが、予め定められた所定の最大ランレングス値をRmaxとしたときに、実データを表現するのに十分な所定範囲内の複数通りのビット長と、Rmax までの範囲内の複数通りのランレングス値と、の各組み合わせについて、個々の組み合わせと、当該組み合わせに対応する固有の識別コードと、の対応関係を示すテーブルであり、
このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をaとしたときに、先頭からaビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在せず、かつ、当該着目識別コードに対応するビット長をbとしたときに、所定の基準ビット長N(但し、Nは2以上の整数)に対して「a+b=k×N」(但し、kは任意の整数)なる条件を満足するテーブルであるようにしたものである。
(29) 本発明の第29の態様は、上述した第28の態様に係る数値データ列の符号化装置において、
データ抽出部が、数値データを抽出する際に、「抽出対象となる数値データを含めて、数値データ列の末尾までに後続する数値データがすべて0であるというゼロ永続状態」か否かを調べる調査処理を実行し、
実データ生成部が、調査処理によりゼロ永続状態であることが確認された場合に、ビット長が0である仮想のビット列を実データとして生成し、
識別コード選択部が、調査処理によりゼロ永続状態であることが確認された場合に、ゼロ永続状態を示す終端コードを識別コードとして選択するようにしたものである。
(30) 本発明の第30の態様は、上述した第26〜第29の態様に係る数値データ列の符号化装置において、
テーブル格納部に格納されている符号化テーブルが、実データのビット長bの出現頻度、もしくは、ビット長bとランレングス値Rとの組み合わせの出現頻度が高いほど、より短いビット長aをもつ識別コードが対応づけられている符号化テーブルであるようにしたものである。
(31) 本発明の第31の態様は、上述した第30の態様に係る数値データ列の符号化装置において、
データ格納部に格納されている数値データ列について、実データのビット長bの出現頻度、もしくは、ビット長bとランレングス値Rとの組み合わせの出現頻度を集計する頻度集計部と、
既存の標準符号化テーブル内の、基準ビット長Nの整数倍の差をもつビット長b相互について、テーブルの内容を入れ替える処理を行うことにより、実データのビット長bの出現頻度、もしくは、ビット長bとランレングス値Rとの組み合わせの出現頻度が高いほど、より短いビット長aをもつ識別コードが対応づけられている修正した符号化テーブルを生成し、これをテーブル格納部に格納するテーブル修正部と、
を更に設けたものである。
(32) 本発明の第32の態様は、上述した第26〜第31の態様に係る数値データ列の符号化装置において、
データ出力部が、符号化データ列とともに、テーブル格納部に格納されている符号化テーブルもしくは当該符号化テーブルを特定するテーブル特定情報を出力するようにしたものである。
(33) 本発明の第33の態様は、「所定のビット長を示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配したデータであって、全長が所定の基準ビット長N(但し、Nは2以上の整数)の整数倍になるように設定された単位符号データ(最大ビット長Umax)」を、複数組並べることにより構成された符号化データ列について、個々の実データに対応する数値データを復元する数値データ列の復号化装置であって、
復号化の対象となる符号化データ列を入力して格納するデータ格納部と、
個々の識別コードに対応する特定のビット長を示す符号化テーブルを格納するテーブル格納部と、
それぞれLビット(但し、LはNの整数倍、かつ、L≧Umax)の連続ビットデータに対する復号処理を並列して行う複数M台の復号処理ユニットと、
M台の復号処理ユニットに対して、データ格納部に格納されている符号化データ列の一部を部分データとして分配するデータ分配部と、
M台の復号処理ユニットによる復号処理の結果を取捨選択して、個々の実データに対応する数値データを並べた復号化データ列を生成するデータ編成部と、
生成された復号化データ列を出力するデータ出力部と、
を設け、
データ分配部は、符号化データ列の未復号化部の先頭から数えて第(N×(i−1)+1)ビット目〜第(N×(i−1)+L)ビット目までのビット列を、第i番目のユニット(i=1〜M)に分配する処理を、符号化データ列のすべての部分に対する復号化が完了するまで繰り返し行い、
M台の復号処理ユニットは、符号化テーブルを参照しながら、それぞれ分配された部分データから、実データに対応する数値データを取り出す復号処理を行う機能を有し、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、実データに対応する数値データを取り出すための処理を行い、
データ編成部は、1回の並列処理によってM台の復号処理ユニットから処理結果が得られたときに、まず第1のユニットを最初の採択ユニットとして決定し、この採択ユニットによって正常な復号処理が行われた最終ビットを認識し、当該最終ビットの直後のビットを先頭ビットとする部分データが分配された別なユニットを新たな採択ユニットと決定する処理を、可能な限り続ける処理を行い、各採択ユニットで正常に復号化が行われた数値データを収集し、1回もしくは複数回の並列処理によってそれぞれ収集された数値データを並べることにより復号化データ列を生成するようにしたものである。
(34) 本発明の第34の態様は、上述した第33の態様に係る数値データ列の復号化装置において、
M台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、実データに対応する数値データを取り出すための処理を、正常な復号処理が可能な限り続行するようにしたものである。
(35) 本発明の第35の態様は、上述した第33の態様に係る数値データ列の復号化装置において、
M台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、1つの単位符号データについての実データに対応する数値データのみを取り出すための処理を行うようにしたものである。
(36) 本発明の第36の態様は、上述した第33の態様に係る数値データ列の復号化装置において、
M台の復号処理ユニットのうち、第1台目〜第(M−1)台目のユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、1つの単位符号データについての実データに対応する数値データのみを取り出すための処理を行い、第M台目のユニットが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、実データに対応する数値データを取り出すための処理を、正常な復号処理が可能な限り続行するようにしたものである。
(37) 本発明の第37の態様は、「所定のビット長と所定のランレングス値との組み合わせを示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配した構造を有し、0を示す数値データを当該ランレングス値に相当する回数だけ羅列した後に実データに対応する数値データを並べたデータ列を示し、全長が所定の基準ビット長N(但し、Nは2以上の整数)の整数倍になるように設定された単位符号データ(最大ビット長Umax)」を、複数組並べることにより構成された符号化データ列について、0を示す数値データおよび個々の実データを並べてなる元のデータ列を復元する数値データ列の復号化装置において、
復号化の対象となる符号化データ列を入力して格納するデータ格納部と、
個々の識別コードに対応する特定のビット長と特定のランレングス値との組み合わせを示す二次元符号化テーブルを格納するテーブル格納部と、
それぞれLビット(但し、LはNの整数倍、かつ、L≧Umax)の連続ビットデータに対する復号処理を並列して行う複数M台の復号処理ユニットと、
M台の復号処理ユニットに対して、データ格納部に格納されている符号化データ列の一部を部分データとして分配するデータ分配部と、
M台の復号処理ユニットによる復号処理の結果を取捨選択して、0を示す数値データおよび個々の実データに対応する数値データを並べた復号化データ列を生成するデータ編成部と、
生成された復号化データ列を出力するデータ出力部と、
を設け、
データ分配部は、符号化データ列の未復号化部の先頭から数えて第(N×(i−1)+1)ビット目〜第(N×(i−1)+L)ビット目までのビット列を、第i番目のユニット(i=1〜M)に分配する処理を、符号化データ列のすべての部分に対する復号化が完了するまで繰り返し行い、
M台の復号処理ユニットは、二次元符号化テーブルを参照しながら、それぞれ分配された部分データから、0を示す数値データを羅列する回数を示すランレングス値と、当該0を示す数値データに後続する実データに対応する数値データと、を取り出す復号処理を行う機能を有し、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、ランレングス値および実データに対応する数値データを取り出すための処理を行い、
データ編成部は、1回の並列処理によってM台の復号処理ユニットから処理結果が得られたときに、まず第1のユニットを最初の採択ユニットとして決定し、この採択ユニットによって正常な復号処理が行われた最終ビットを認識し、当該最終ビットの直後のビットを先頭ビットとする部分データが分配された別なユニットを新たな採択ユニットと決定する処理を、可能な限り続ける処理を行い、各採択ユニットで正常に復号化が行われた数値データを収集し、1回もしくは複数回の並列処理によってそれぞれ収集された情報に基づいて数値データを並べることにより復号化データ列を生成するようにしたものである。
(38) 本発明の第38の態様は、上述した第37の態様に係る数値データ列の復号化装置において、
M台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、ランレングス値および実データに対応する数値データを取り出すための処理を、正常な復号処理が可能な限り続行するようにしたものである。
(39) 本発明の第39の態様は、上述した第37の態様に係る数値データ列の復号化装置において、
M台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、1つの単位符号データについてのランレングス値および実データに対応する数値データのみを取り出すための処理を行うようにしたものである。
(40) 本発明の第40の態様は、上述した第37の態様に係る数値データ列の復号化装置において、
M台の復号処理ユニットのうち、第1台目〜第(M−1)台目のユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、1つの単位符号データについてのランレングス値および実データに対応する数値データのみを取り出すための処理を行い、第M台目のユニットが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、ランレングス値および実データに対応する数値データを取り出すための処理を、正常な復号処理が可能な限り続行するようにしたものである。
(41) 本発明の第41の態様は、上述した第37〜第40の態様に係る数値データ列の復号化装置において、
M台の復号処理ユニットのそれぞれが、0を示す数値データをランレングス値に相当する回数だけ羅列した後に実データに相当する数値データを並べることにより、元のデータを復元する処理を実行し、復元されたデータをデータ編成部に与え、
データ編成部が、各復号処理ユニットから与えられたデータを並べることにより復号化データ列を生成するようにしたものである。
(42) 本発明の第42の態様は、上述した第37〜第40の態様に係る数値データ列の復号化装置において、
M台の復号処理ユニットのそれぞれが、取り出したランレングス値および実データに対応する数値データをそのままデータ編成部に与え、
データ編成部が、各採択ユニットから与えられた情報に基づいて、0を示す数値データをランレングス値に相当する回数だけ羅列した後に実データに相当する数値データを並べることにより、元のデータを復元する処理を実行し、復元されたデータを並べることにより復号化データ列を生成するようにしたものである。
(43) 本発明の第43の態様は、上述した第33〜第42の態様に係る数値データ列の復号化装置において、
符号化データ列と、符号化の処理に用いた符号化テーブルと、を含むデータファイルが与えられたときに、
データ格納部が、データファイルから符号化データ列を抽出して格納する処理を行い、
テーブル格納部が、データファイルから符号化テーブルを抽出して格納する処理を行うようにしたものである。
(44) 本発明の第44の態様は、上述した第33〜第42の態様に係る数値データ列の復号化装置において、
符号化データ列と、符号化の処理に用いた符号化テーブルを特定するテーブル特定情報と、を含むデータファイルが与えられたときに、
データ格納部が、データファイルから符号化データ列を抽出して格納する処理を行い、
テーブル格納部が、データファイルからテーブル特定情報を抽出する処理を行った後、当該テーブル特定情報によって特定されるテーブルを外部から読み込んで格納する処理を行うようにしたものである。
(45) 本発明の第45の態様は、上述した第33〜第44の態様に係る数値データ列の復号化装置において、
M≧1+L/Nとなるような複数M台の復号処理ユニットを設けるようにしたものである。
(46) 本発明の第46の態様は、上述した第33〜第45の態様に係る数値データ列の復号化装置において、
各復号処理ユニットが、データ編成部に対して、正常な復号処理によって得られた情報と、当該正常な復号処理に関与したビット数を示す正常処理ビット長とを報告する機能を有し、
データ編成部が、報告された正常処理ビット長に基づいて採択ユニットを決定し、報告された情報を用いて復号化データ列を生成するようにしたものである。
(47) 本発明の第47の態様は、上述した第46の態様に係る数値データ列の復号化装置において、
データ編成部が、1回の並列処理によってM台の復号処理ユニットからの処理結果が得られるたびに、各採択ユニットから報告された正常処理ビット長を合計することにより既復号化部を認識し、これをデータ分配部に対して報告する機能を有し、
データ分配部が、当該報告に基づいて、次回の並列処理のための未復号化部の認識を行うようにしたものである。
(48) 本発明の第48の態様は、上述した第26〜第47の態様に係る数値データ列の符号化装置もしくは復号化装置を、コンピュータにプログラムを組み込むことによって構成したものである。
(49) 本発明の第49の態様は、上述した第26の態様に係る数値データ列の符号化装置をDC成分の数値データの符号化手段として用い、上述した第28の態様に係る数値データ列の符号化装置をAC成分の数値データ列の符号化手段として用いることにより、JPEG画像用圧縮処理装置を構成したものである。
(50) 本発明の第50の態様は、上述した第33〜第36の態様に係る数値データ列の復号化装置をDC成分の数値データの復号化手段として用い、上述した第37〜第42の態様に係る数値データ列の復号化装置をAC成分の数値データ列の復号化手段として用いることにより、JPEG画像用伸張処理装置を構成したものである。
(51) 本発明の第51の態様は、固定長ビットからなる数値データ列を、演算処理装置が、少なくともビット長と識別コードとの対応関係を示すハフマン符号化テーブルを用いて、可変長ビットからなる符号化データ列に符号化するハフマン符号化方法において、
ハフマン符号化テーブルとして、識別コード自身のビット長をaとし、当該識別コードに対応するビット長をbとしたときに、所定の基準ビット長N(但し、Nは2以上の整数)に対して「a+b=k×N」(但し、kは任意の整数)なる条件を満足するテーブルを用いるようにしたものである。
(52) 本発明の第52の態様は、可変長ビットからなる符号化データ列を、演算処理装置が、少なくともビット長と識別コードとの対応関係を示すハフマン符号化テーブルを用いて、固定長ビットからなる数値データ列に復号化するハフマン復号化方法において、
ハフマン符号化テーブルとして、識別コード自身のビット長をaとし、当該識別コードに対応するビット長をbとしたときに、所定の基準ビット長N(但し、Nは2以上の整数)に対して「a+b=k×N」(但し、kは任意の整数)なる条件を満足するテーブルを用いるようにしたものである。
(53) 本発明の第53の態様は、所定のビット長を示す識別コードに後続して当該ビット長をもつビット列からなる実データを配したデータであって、全長が所定の基準ビット長N(但し、Nは2以上の整数)の整数倍になるように設定された、互いに長さの異なる複数通りの単位符号データ(最大ビット長Umax)を、並べることにより構成されるビット羅列データと、個々の識別コードに対応する特定のビット長を示す符号化テーブルと、を含むデータファイルを、コンピュータ読み取り可能な情報記録媒体に記録するようにしたものである。
(54) 本発明の第54の態様は、所定のビット長を示す識別コードに後続して当該ビット長をもつビット列からなる実データを配したデータであって、全長が所定の基準ビット長N(但し、Nは2以上の整数)の整数倍になるように設定された、互いに長さの異なる複数通りの単位符号データ(最大ビット長Umax)を、並べることにより構成されるビット羅列データと、個々の識別コードに対応する特定のビット長を示す符号化テーブルを特定するテーブル特定情報と、を含むデータファイルを、コンピュータ読み取り可能な情報記録媒体に記録するようにしたものである。
(55) 本発明の第55の態様は、「所定のビット長と所定のランレングス値との組み合わせを示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配した構造を有し、0を示す数値データを当該ランレングス値に相当する回数だけ羅列した後に実データに対応する数値データを並べたデータ列を示し、全長が所定の基準ビット長N(但し、Nは2以上の整数)の整数倍になるように設定された、互いに長さの異なる複数通りの単位符号データ(最大ビット長Umax)」を、並べることにより構成されるビット羅列データと、個々の識別コードに対応する特定のビット長と特定のランレングス値との組み合わせを示す二次元符号化テーブルと、を含むデータファイルを、コンピュータ読み取り可能な情報記録媒体に記録するようにしたものである。
(56) 本発明の第56の態様は、「所定のビット長と所定のランレングス値との組み合わせを示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配した構造を有し、0を示す数値データを当該ランレングス値に相当する回数だけ羅列した後に実データに対応する数値データを並べたデータ列を示し、全長が所定の基準ビット長N(但し、Nは2以上の整数)の整数倍になるように設定された、互いに長さの異なる複数通りの単位符号データ(最大ビット長Umax)」を、並べることにより構成されるビット羅列データと、個々の識別コードに対応する特定のビット長と特定のランレングス値との組み合わせを示す二次元符号化テーブルを特定するテーブル特定情報と、を含むデータファイルを、コンピュータ読み取り可能な情報記録媒体に記録するようにしたものである。
(57) 本発明の第57の態様は、上述した第6または第7の態様に係る数値データ列の符号化方法で出力されたデータファイルを、コンピュータ読み取り可能な情報記録媒体に記録するようにしたものである。
(58) 本発明の第58の態様は、数値データ列を可変長のビット列を用いて符号化する符号化方法に用いるテーブルであって、
所定範囲内の複数通りのビット長について、個々のビット長と、当該ビット長に対応する固有の識別コードと、の対応関係が示されており、
このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をaとしたときに、先頭からaビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在せず、かつ、当該着目識別コードに対応するビット長をbとしたときに、所定の基準ビット長N(但し、Nは2以上の整数)に対して「a+b=k×N」(但し、kは任意の整数)なる条件を満足するテーブルを、コンピュータ読み取り可能な情報記録媒体に記録するようにしたものである。
(59) 本発明の第59の態様は、数値データ列を可変長のビット列を用いて符号化する符号化方法に用いるテーブルであって、
所定範囲内の複数通りのビット長と所定範囲内の複数通りのランレングス値とについて、個々のビット長と個々のランレングス値との各組み合わせと、当該組み合わせに対応する固有の識別コードと、の対応関係が示されており、
このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をaとしたときに、先頭からaビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在せず、かつ、当該着目識別コードに対応するビット長をbとしたときに、所定の基準ビット長N(但し、Nは2以上の整数)に対して「a+b=k×N」(但し、kは任意の整数)なる条件を満足するテーブルを、コンピュータ読み取り可能な情報記録媒体に記録するようにしたものである。
本発明に係る数値データの符号化では、数値データそのものを可変長のビット列を用いて表現した実データの先頭に、当該実データのビット長を示す情報をもった識別コードを付加することにより、当該特定の数値データ自身を示す情報をもった単位符号データが生成される。しかも、当該識別コード自身のビット長をaとし、当該実データのビット長をbとしたときに、所定の基準ビット長N(但し、Nは2以上の整数)に対して「a+b=k×N」(但し、kは任意の整数)なる条件が満足されるようにする。
このため、単位符号データのビット長は、必ずNの整数倍になるので、符号化データ列の処理単位の境界は、必ず先頭からNの整数倍のビット位置になる。したがって、符号化データ列をその先頭からNの整数倍のビット位置で複数の部分データに分割し、複数台の復号処理ユニットを用いた並列処理で復号化を行うことが可能になる。kの値が任意の整数であるため、Nの整数倍のビット位置は、必ずしも処理単位の境界として正しい位置になるとは限らないが、処理単位の境界は、必ずNの整数倍のビット位置にくるので、複数台の復号処理ユニットのうち、正しい処理単位で復号処理を行ったユニットの処理結果だけを選択して並べることにより、正しい復号化データ列を得ることができる。
かくして、固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化しつつ、復号化の段階において、並列処理が可能になる特殊な符号化を行うことが可能になる。また、当該符号化によって作成された符号化データ列を、複数台の復号処理ユニットを用いた並列処理によって復号化することが可能になる。
固定長ビットで表現された数値データの一例を示す図である。 図1に示す数値データを表現する固定長ビット列を示す図である。 図2に示す固定長ビット列から冗長な0を削除して得られる可変長ビット列を示す図である。 図3に示す可変長ビット列に、ビット長を示す情報(丸数字)を挿入した状態を示す図である。 可変長のビット列を用いて符号化されたデータを構成する単位符号データの基本構造を示す図である。 図2に示す固定長ビット列で表現された数値データ列を、固定長符号化テーブルを用いて符号化するプロセスを示す図である。 図2に示す固定長ビット列で表現された数値データ列を、可変長符号化テーブルを用いて符号化するプロセスを示す図である。 図2に示す固定長ビット列で表現された数値データ列を、ハフマン符号化テーブルを用いて符号化するプロセスを示す図である。 図2に示す固定長ビット列で表現された数値データ列を、本発明に係る符号化テーブルを用いて符号化するプロセスを示す図である。 図9(c) に示す符号化データ列を、本発明に係る復号化方法を用いて、8台の復号処理ユニットによる並列処理で復号化する原理を示す第1の図である。 図9(c) に示す符号化データ列を、本発明に係る復号化方法を用いて、8台の復号処理ユニットによる並列処理で復号化する原理を示す第2の図である。 図9(c) に示す符号化データ列を、本発明に係る復号化方法を用いて、8台の復号処理ユニットによる並列処理で復号化する原理を示す第3の図である。 図9(c) に示す符号化データ列を、本発明に係る復号化方法を用いて、8台の復号処理ユニットによる並列処理で復号化する原理を示す第4の図である。 本発明に係る数値データ列の符号化方法の基本手順を示す流れ図である。 本発明に係る数値データ列の符号化方法で作成される符号化データファイルの構造の一例を示すブロック図である。 本発明に係る数値データ列の符号化方法で作成される符号化データファイルの構造の別な一例を示すブロック図である。 本発明に係る数値データ列の復号化方法の基本手順を示す流れ図である。 本発明に係る数値データ列の符号化装置の基本構成を示すブロック図である。 本発明に係る数値データ列の復号化装置の基本構成を示すブロック図である。 符号化の対象となる別な数値データ列の一例を示す図である。 図20に示す数値データ列に対して、本発明に係る一次元符号化テーブルを用いた符号化方法を実施するプロセスを示す図である。 本発明に係る二次元符号化テーブルを用いた符号化方法の基本原理を示す図である。 図20に示す数値データ列に対して、本発明に係る二次元符号化テーブルを用いた符号化方法を実施するプロセスを示す図である。 本発明に係る二次元符号化テーブルを用いた符号化方法の基本手順を示す流れ図である。 一般的なJPEG画像用の圧縮・伸張処理装置の構成を示すブロック図である。 JPEG方式の圧縮を行う際の量子化後の8×8画素ブロックを構成する画素配列を示す平面図である。 JPEG方式の圧縮処理の対象となる量子化後の画素ブロックの画素値分布の一例を示す平面図である。 図27に示す画素ブロックから抽出したDC成分およびAC成分の数値データを示す図である。 本発明に係るDC成分用符号化テーブル(一次元符号化テーブル)の一例を示す図である。 図29に示すテーブルを利用して図28に示すDC成分を符号化した結果を示す図である。 本発明に係るAC成分用符号化テーブル(二次元符号化テーブル)の一例を示す図である。 図31に示すテーブルを利用して図28に示すAC成分を符号化するプロセスを示す図である。 図31に示すテーブルを利用して図28に示すAC成分を符号化した結果を示す図である。 図33に示す符号化データ列を、本発明に係る復号化方法を用いて、7台の復号処理ユニットによる並列処理で復号化する原理を示す第1の図である。 図33に示す符号化データ列を、本発明に係る復号化方法を用いて、7台の復号処理ユニットによる並列処理で復号化する原理を示す第2の図である。 本発明に係るハフマン符号化テーブルを用いる符号化装置の基本構成を示すブロック図である。 一次元ハフマン符号化テーブルを作成するための頻度集計結果の一例を示す図である。 本発明に係る一次元ハフマン符号化テーブルを作成する具体的な方法を示す図である。 二次元ハフマン符号化テーブルを作成するための頻度集計結果(輝度成分と色差成分)の一例を示す図である。 図31に示すテーブルを修正することによって作成された二次元ハフマン符号化テーブルの一例(輝度成分用)を示す図である。 図31に示すテーブルを修正することによって作成された二次元ハフマン符号化テーブルの別な一例(色差成分用)を示す図である。 基準ビット長Nの設定時に考慮するパラメータを示すグラフである。 図11に示す復号化原理の変形例を示す図である。 図12に示す復号化原理の変形例を示す図である。 図13に示す復号化原理の変形例を示す図である。 図31に示す符号化テーブルより作成された復号化用第1参照テーブルを示す図である。 図31に示す符号化テーブルより作成された復号化用第2参照テーブルを示す図である。 図46および図47に示す復号化用第1および第2参照テーブルを用いた復号化処理の原理を示す図である。
以下、本発明を図示する実施形態に基づいて説明する。
<<< §1.従来の符号化/復号化方法の基本原理 >>>
本発明は、固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化し、これを元に戻す復号化を行う技術に関するものである。そこで、このような固定長ビット列と可変長ビット列との間の変換を伴う、従来の符号化/復号化方法の基本原理を簡単に説明する。
いま、図1に示すような固定長ビットで表現された数値データ列D1,D2,D3,D4,D5,...を考えてみる。ここでは、これらの各数値データが、いずれも8ビットで表現可能な0〜255の範囲内の値であり、具体的には、10進表記で、28,251,1,13,3,...という値をとるものとしよう。この場合、2進表記では、図示の表に示すとおり、いずれも8ビットのビット列で表現される。
図2は、図1に示す数値データを表現する固定長ビット列を示す図である。どの数値データも、その大小に関係なく、すべて8ビットのビット列で表される。このため、データの区切りは必ず8ビット周期で現れ、所望の数値データにランダムアクセスが可能であり、CPUによる演算処理には適している。しかしながら、各数値データの先頭部分の0は冗長なビットになる。たとえば、数値データD3の場合、本来の数値を示す実データの部分は末尾の「1」のみであり、先頭に付された7個の「0」は冗長なビットということになる。
図3は、図2に示す固定長ビット列から冗長な0を削除して得られる可変長ビット列を示す図である。いずれの数値データも、先頭の0が削除され、実データを示すビット列のみが残されている。たとえば、数値データD3は1ビットの実データ「1」のみで表現されている。このように、固定長ビット列で表現されていた数値データ列を、可変長ビット列で表現すれば、データ容量を削減することができる。
しかしながら、図3に示す可変長ビット列からは、個々の数値データを取り出すことはできない。これは、各数値データの区切りの情報が逸失し、このビット列をどこで区切って1つの数値として取り扱うかが不明になるためである。図2,図3では、説明の便宜上、1つの数値データを示すビット列を矩形枠で囲って示しているが、実際には、このような矩形枠は存在しない。したがって、図2に示す固定長ビット列の場合は、8ビット単位でビット列を区切ることにより、個々の数値データを取り出すことができるが、図3に示す可変長ビット列の場合、区切り位置が不明であり、個々の数値データを認識することができない。
結局、固定長ビット列を可変長ビット列へ変換する場合、数値データの区切りを示す何らかの情報を付加する必要がある。そこで、通常は、各数値を示す実データの先頭に、当該実データのビット長を示す情報を付加する手法が採られる。図4は、図3に示す可変長ビット列に、ビット長を示す情報を挿入した状態を示す図である。図に丸数字で示す情報が、後続する実データのビット長を示す識別コードになっている。たとえば、先頭の識別コードC1(丸数字5)は、後続する実データD1のビット長が「5」であることを示しており、続く識別コードC2(丸数字8)は、後続する実データD2のビット長が「8」であることを示している。
結局、図4に示すデータビット列は、図5に示すような基本構造をもった単位符号データUを並べたものになる。すなわち、単位符号データUは、識別コードCと、これに後続する実データD(可変長ビット列)とによって構成され、識別コードCは、後続する実データDのビット長bを示すコードということになる。図4に示すデータビット列から、各数値データを取り出すには、まず、先頭の識別コードC1の部分を解析して、後続する実データD1のビット長が「5」であることを認識し、実データD1として5ビットの情報を取り出せばよい。次に、識別コードC2の部分を解析して、後続する実データD2のビット長が「8」であることを認識し、実データD2として8ビットの情報を取り出せばよい。以下、同様である。
図5に示すように、単位符号データUは、ビット長aをもった識別コードCの部分と、ビット長bをもった実データDの部分とによって構成されており、図4,図5では、説明の便宜上、識別コードCの部分と実データDの部分とをそれぞれ矩形枠で囲って示した。しかしながら、実際には、このような矩形枠は存在しない。したがって、識別コードCの部分と識別コードDの部分との区切り位置を何らかの方法で認識できるようにする必要がある。
最も簡単な方法は、識別コードCのビット長aを固定長にする方法である。たとえば、ビット長aを3ビットに固定しておけば、常に単位符号データUの先頭3ビットが識別コードCということになるので、識別コードCと実データDとの区切りは明確になる。そこで、この3ビットの識別コードCに基づいて、後続する実データDのビット長bを認識すれば、実データDを正しく取り出すことができる。
識別コードCとしては、ビット長bに対応するデジタル値そのものを用いることができる。たとえば、ビット長b=「5」を示す識別コードCには、「5」を示す3ビットのビット列「101」をそのまま用いることができる。もっとも、識別コードCとビット長bとの対応関係が明確になっていれば、識別コードCには、どのようなビット列を用いてもかまわない。
図6は、図2に示す固定長ビット列で表現された数値データ列を、固定長符号化テーブルを用いて符号化するプロセスを示す図である。図6(a) は、図4と同じ図であり、図3に示す可変長ビット列に、ビット長を示す情報(丸数字)を挿入した状態を示している。図6(b) は、固定長符号化テーブルであり、識別コードCとビット長bとの対応関係を示すテーブルである。この例の場合、識別コードCは、対応するビット長bのデジタル値にはなっていない。たとえば、ビット長b=「1」を示す3ビットのビット列は「001」であるが、図示のテーブルの場合、ビット長b=「1」に対応する識別コードCは「000」になっている。それでも、このテーブルを参照することにより、識別コードC「000」に対応するビット長bは「1」であることを認識することができるので、支障は生じない。
図6(c) は、図6(a) における丸数字のビット長を示す各識別コードC1,C2,...の部分に、図6(b) の固定長符号化テーブルで定義された固有の識別コードCを当てはめることにより得られる符号化データ列を示している。この図6(c) に示す符号化データ列と、図6(b) に示す固定長符号化テーブルとを用いれば、図2に示す元の固定長ビットの数値データ列の復元が可能である。
すなわち、図6(c) の符号化データ列の先頭3ビットにある識別コードC1「100」について、図6(b) のテーブルを参照すれば、対応するビット長b=「5」が得られるので、続く5ビットのデータ「11100」を実データD1として認識すれば、8ビットのデータ「00011100」を復元することができる。続いて、図6(c) の符号化データ列の第9〜11ビット目にある識別コードC2「111」について、図6(b) のテーブルを参照すれば、対応するビット長b=「8」が得られるので、続く8ビットのデータ「11111011」を実データD2として認識できる。以下、同様である。
図6(b) のテーブルでは、3ビットに固定された識別コードCによって、8通りのビット長b=1〜8を示すことができる。これは、実データのビット長が最小1ビット、最大8ビットである場合を想定したものである。結局、図6に示す例では、実データDは1〜8ビットの可変長になるが、識別コードCは3ビットの固定長になる。なお、実データのビット長b=0を定義する場合は(たとえば、数値データ「00000000」の実データを、1桁のビット「0」ではなく、ビット長が0である0桁の仮想データ、すなわち、実質的に実データを示すビットを配置しない状態で表現するような場合は)、ビット長b=0に対応する識別コードCも定義する必要がある。
一方、識別コードCのビット長aを可変長にする方法も知られている。図7は、図2に示す固定長ビット列で表現された数値データ列を、可変長符号化テーブルを用いて符号化するプロセスを示す図である。図7(a) は、図4と同じ図であり、図3に示す可変長ビット列に、ビット長を示す情報(丸数字)を挿入した状態を示している。図7(b) は、可変長符号化テーブルであり、可変長の識別コードCとビット長bとの対応関係を示すテーブルである。図6(b) に示す固定長符号化テーブルでは、識別コードCが3ビットの固定長になっていたのに対して、図7(b) に示す可変長符号化テーブルでは、識別コードCが1〜7ビットの可変長になっている。
図7(c) は、図7(a) における丸数字のビット長を示す各識別コードC1,C2,...の部分に、図7(b) の可変長符号化テーブルで定義された固有の識別コードCを当てはめることにより得られる符号化データ列を示している。この図7(c) に示す符号化データ列と、図7(b) に示す可変長符号化テーブルとを用いれば、図2に示す元の固定長ビットの数値データ列の復元が可能である。ただ、識別コードが可変長であるため、符号化データ列を先頭から1ビットずつチェックしながら、可変長符号化テーブルを参照し、合致するコードが存在するか否かを調べる処理が必要になる。
具体的には、まず、図7(c) の符号化データ列の第1ビット目のビット「1」について、合致する識別コードCの有無を調べる。図7(b) のテーブルには合致する識別コードは存在しない。そこで、次に第1〜2ビット目のビット列「11」について、合致する識別コードCの有無を調べるが、やはり合致する識別コードは存在しない。更に、第1〜3ビット目のビット列「111」について、合致する識別コードCの有無を調べるが、やはり合致する識別コードは存在しない。このようにして、合致判定対象となるビット列を1ビットずつ伸ばしてゆくと、第1〜5ビット目のビット列「11110」について、はじめて合致する識別コードが見つかる。かくして、先頭から5ビットのビット列「11110」の部分が識別コードCであることが認識できる。
図7(b) のテーブルによると、識別コード「11110」に対応するビット長bは「5」であるから、第6〜10ビット目のビット列「11100」を実データD1として取り出すことができ、8ビットのデータ「00011100」を復元することができる。
続いて、図7(c) の符号化データ列の第11ビット目のビットから、前述した合致判定プロセスを続けてゆく。まず、第11ビット目のビット「1」について、合致する識別コードCの有無を調べるが、合致する識別コードは存在しない。そこで、次に第11〜12ビット目のビット列「11」について、合致する識別コードCの有無を調べるが、やはり合致する識別コードは存在しない。このようにして、合致判定対象となるビット列を1ビットずつ伸ばしてゆくと、第11〜17ビット目のビット列「1111111」について、はじめて合致する識別コードが見つかる。かくして、当該7ビットのビット列「1111111」の部分が識別コードCであることが認識できる。
図7(b) のテーブルによると、識別コード「1111111」に対応するビット長bは「8」であるから、第18〜25ビット目のビット列「11111011」を実データD2として取り出すことができる。以下、同様である。
このように、識別コードCを可変長コードにする場合は、テーブルを構成する識別コードに条件が課されることになる。すなわち、「テーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をaとしたときに、先頭からaビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在しない」という条件である。
たとえば、図7(b) のテーブルにおける識別コード「0」に着目すると、ビット長a=1であるから、上記条件は「先頭1ビットの部分が0となる別な識別コードは存在しない」という条件になる。実際、このテーブル内には、0で始まる識別コードは他には存在しない。同様に、図7(b) のテーブルにおける識別コード「10」に着目すると、ビット長a=2であるから、上記条件は「先頭2ビットの部分が10となる別な識別コードは存在しない」という条件になる。実際、このテーブル内には、10で始まる識別コードは他には存在しない。
このような条件が必要な理由は、前述した合致判定プロセスのアルゴリズムを考えれば、容易に理解できよう。すなわち、当該条件が満たされていないと、識別コードの誤認識が生じてしまうことになる。たとえば、識別コード「10」と同じ「10」で始まる別な識別コード「100」,「101」,「1000」などが同じテーブル内に存在したとしても、ビット列「10」についての合致判定プロセスで「合致」の判定がなされてしまうため、識別コード「100」,「101」,「1000」などについての合致判定は行われなくなってしまう。
ところで、図7(c) に示す符号化データ列を、図6(c) に示す符号化データ列と比較すると、前者の方が後者よりも全ビット長が増えていることがわかる。これは、図6(b) に示す固定長符号化テーブルでは、識別コードCが常に3ビットであるのに対して、図7(b) に示す可変長符号化テーブルでは、識別コードCのビット長は1ビットですむこともあるものの、場合によっては7ビットを必要とするためである。そこで、実用上は、各実データについてのビット長bの出現頻度を集計し、実データのビット長bの出現頻度が高いほど、より短いビット長aをもつ識別コードが対応づけられている符号化テーブルを用いるようにする。このように、出現頻度を考慮して作成した可変長符号化テーブルは、一般に、ハフマン符号化テーブルと呼ばれており、このハフマン符号化テーブルを用いた符号化は、ハフマン符号化と呼ばれている。
図8は、図2に示す固定長ビット列で表現された数値データ列を、ハフマン符号化テーブルを用いて符号化するプロセスを示す図である。図8(a) は、図4と同じ図であり、図3に示す可変長ビット列に、ビット長を示す情報(丸数字)を挿入した状態を示している。図8(b) は、ハフマン符号化テーブルであり、可変長の識別コードCとビット長bとの対応関係を示す可変長符号化テーブルである。ここでは、説明の便宜上、このハフマン符号化テーブルの左側の破線欄に出現頻度を示してある。この出現頻度は、符号化の対象となる数値データ(ここに示す例の場合、図2に示す数値データD1,D2,...)の各実データについてのビット長bの出現頻度を示すものである。図示の例の場合、ビット長b=「4」の出現頻度が「685」となり第一位となっている。
図示のテーブルは、ビット長bをその出現頻度順にソートして示したものである。ここで、識別コードCの欄を見ると、識別コードCも短い順にソートされていることがわかる。すなわち、ビット長bの出現頻度が高いほど、より短いビット長aをもつ識別コードが対応づけられていることになる。このようなハフマン符号化テーブルを用いた符号化を行えば、より短い識別コードCがより高い頻度で利用されることになるので、得られる符号化データ列の全ビット長を短縮することができ、データ容量の削減を図ることができる。たとえば、図8(b) のテーブルにおける「1111110」や「1111111」といった7ビットからなる識別コードCは、用いられる頻度が極めて小さくなるので、これら長い識別コードの存在によって、全ビット長が増大する影響は小さい。
図8(c) は、図8(a) における丸数字のビット長を示す各識別コードC1,C2,...の部分に、図8(b) のハフマン符号化テーブルで定義された固有の識別コードCを当てはめることにより得られる符号化データ列を示している。この図8(c) に示す符号化データ列と、図8(b) に示すハフマン符号化テーブルとを用いれば、図2に示す元の固定長ビットの数値データ列の復元が可能である点は、図7の例と全く同様である。また、符号化データ列を先頭から1ビットずつチェックしながら、ハフマン符号化テーブルを参照し、合致するコードが存在するか否かを調べる処理を行う点も、図7の例と全く同様である。
したがって、このハフマン符号化テーブルにおいても、「テーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をaとしたときに、先頭からaビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在しない」という条件が必要な点に変わりはない。ハフマン符号化テーブルの特徴は、「実データのビット長bの出現頻度が高いほど、より短いビット長aをもつ識別コードが対応づけられている」という点であり、それ以外は、図7で述べた一般的な可変長符号化テーブルと変わりはない。別言すれば、図8(b) に示すハフマン符号化テーブルは、ビット長bの出現頻度が高いほど、より短いビット長aをもつ識別コードが対応づけられるように、図7(b) に示す可変長符号化テーブルの識別コードCの部分を相互に入れ替える操作を行うことによって得られたテーブルということができる。
図8(c) に示す符号化データ列を、図7(c) に示す符号化データ列と比較すると、前者の方が後者よりも全ビット長が減少していることがわかる。図には、たかだか5個の数値データの部分しか示されていないが、実際には、図8(b) の破線欄に示すような出現頻度で各数値データのビット長が出現することになるので、ハフマン符号化テーブルを用いた場合のデータ容量の削減効果はより顕著なものになる。前掲の特許文献1,2には、このようなハフマン符号化テーブルを利用してJPEG方式で画像データの圧縮を行う技術が開示されている。
<<< §2.本発明の着想の根源 >>>
さて、§1で述べた方法で作成された符号化データ列(可変長ビット)を、CPUによる演算処理に適した元の数値データ(固定長ビット)に戻すためには、復号化を行う必要がある。ところが、可変長のビット列からなる符号化データは、区切りとなるビット位置が固定ではないため、処理単位の境界が不明確であり、従来の一般的な方法では、並列処理による復号化を行うことができない。
たとえば、図6(c) に示す符号化データ列は、識別コードCの部分は3ビットに固定されているものの、実データDの部分は可変長であるため、各単位符号データUの境界は、データ列の先頭から順に復号処理を行ってゆくことによって、はじめて認識可能である。実際、各単位符号データU1,U2,U3,U4,U5の境界は不規則であり、このビット列を先頭から順に解析してゆかない限り、境界を認識することはできない。これは、この図6(c) に示す符号化データ列を復号化する際には、1台の復号処理ユニットを用いて、先頭から順に復号処理を行わざるを得ないことを意味する。このため、復号処理に時間がかかり、特にリアルタイムでの表示処理を要求される映像データなどの場合、スムーズな再生が阻害されるなどの問題が生じることは、既に述べたとおりである。
このような事情は、図7(c) に示す符号化データ列(可変長符号化テーブルを用いた符号化処理によって得られたもの)や、図8(c) に示す符号化データ列(ハフマン符号化テーブルを用いた符号化処理によって得られたもの)についても全く同じである。
このような問題に対処するための一手法として、本願発明者は、次のような着想を得ることができた。いま、図8(c) に示す符号化データを復号化する際に、このデータ列を所定位置で分割し、個々の部分データを複数台の復号処理ユニットに与えて並列処理を行うことを考えよう。複数台の復号処理ユニットによる並列処理が実現できれば、それだけ復号処理に必要な時間は短縮され、スムーズな動画再生などが可能になる。
ただ、各復号処理ユニットによって正しい復号処理が実行されるようにするためには、各部分データを正しい位置で切り出す必要がある。具体的には、各単位符号データU1,U2,U3,U4,U5の境界で分割する必要がある。ところが、単位符号データUを構成する実データDのビット長が可変であるため、単位符号データUの境界は不確定である。そこで、本願発明者は、実データDのビット長の不確定さを、識別コードCのビット長で補完することができるのではないか、という第1の着想を得た。
図5に示すように、単位符号データUのビット長は、識別コードC自身のビット長aと実データDのビット長bとの和「a+b」になる。しかも、用いる識別コードCは、後続する実データDのビット長bに基づいて定められる。そこで本願発明者は、識別コードCを、図7(b) や図8(b) に示すような可変長の符号化テーブルによって定義するようにし、かつ、識別コードC自身のビット長aを、当該識別コードCに対応するビット長bに応じて定めるようにすれば、ビット長の和「a+b」を一定にすることができるのではないかと考えた。
たとえば、図5に示す単位符号データUのビット長を固定値Nに定めるようにし、常に「a+b=N」が成り立つような運用が可能になれば、単位符号データUの境界は、常にNビット周期で現れることになるので、このNビット周期の位置で部分データの切り出しを行うようにすれば、各部分データの先頭は、単位符号データUの先頭に一致し、各復号処理ユニットは正しい復号処理を行うことができる。
ところが、常に「a+b=N」が成り立つような可変長符号化テーブルを実際に設計すると、ビット長bの出現頻度が高いほど、より短いビット長aをもつ識別コードを対応づけたハフマン符号化テーブルへの適用を行うことができなくなってしまう。たとえば、図7(b) に示す可変長符号化テーブルを改変して、常に「a+b=N」が成り立つようにすることを考えてみよう。ここで、たとえば、N=9に固定したとすると、a=9−bが成り立つようなビット長aをもった識別コードCをテーブルの各欄に掲載すればよいことになる。したがって、ビット長b=1に対応する識別コードは8ビットの長さをもったコード、ビット長b=2に対応する識別コードは7ビットの長さをもったコード、ビット長b=3に対応する識別コードは6ビットの長さをもったコード、... 、ビット長b=8に対応する識別コードは1ビットの長さをもったコードということになり、一応、条件を満たす可変長符号化テーブルを作成することは可能である。
しかしながら、ビット長bの出現頻度が高いほど、より短いビット長aをもつ識別コードを対応づけるような入れ替えを行って、ハフマン符号化テーブルを作成すると、「a+b=N」という条件は必ずしも満足されなくなってしまう。結局、「a+b=N」という条件を満たす可変長符号化テーブルは、ビット長bと識別コードCとの対応関係の自由度が著しく制限され、出現頻度を考慮したハフマン符号化テーブルへの適用は一切できなくなり、実用上、利用価値が極めて低いものにならざるを得ない。
そこで、本願発明者は、所定の基準ビット長N(但し、Nは2以上の整数)に対して「a+b=k×N」(但し、kは任意の整数)なる条件を満足する符号化テーブルを用いるようにし、識別コードCのビット長aにある程度の自由度をもたせる、という第2の着想を得るに至った。上記条件であれば、kの値を調整することにより、ビット長aを基準ビット長Nの単位で増減することができるので、ビット長bの出現頻度に応じてビット長aを設定することができる。
もっとも、単位符号データUのビット長「a+b」について、「a+b=k×N」なる条件設定を行うと、単位符号データUのビット長は、固定値にはならない。したがって、単位符号データUの境界が確定しない、という問題が再び浮上してくる。しかしながら、上記条件設定を行えば、単位符号データUの境界は全く不規則になるわけではなく、必ず基準ビット長Nの整数倍の位置になる。そこで、本願発明者は、復号化を行う際に、符号化データ列を、とりあえず基準ビット長Nの整数倍の位置で分割して部分データを作成し、各部分データを複数の復号処理ユニットに与えて、復号化を並列処理で行い、正しい復号処理が行われたユニットの処理結果だけを採用すれば、正しい復号化データ列を得ることができる、という第3の着想を得るに至ったのである。
kの値が任意の整数であるため、Nの整数倍のビット位置は、必ずしも単位符号データUの境界として正しい位置になるとは限らないが、単位符号データUの境界は、必ずNの整数倍のビット位置にくる。したがって、複数台の復号処理ユニットのうちの何台かは、単位符号データUの途中から誤った復号処理を開始することになるが、別な何台かは、単位符号データUの先頭から正しい復号処理を開始することになる。最終的に、正しい復号処理の結果だけを採用し、誤った復号処理の結果を捨ててしまえば、誤った復号処理のプロセスは無駄になるものの、並列処理による復号化に要する時間短縮の効果は得られる。
こうして、本発明によれば、固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化しつつ、復号化の段階において、符号化されたデータを複数台の復号処理ユニットを用いた並列処理によって復号化することが可能になる。続く§3では、このような本発明の基本原理を、具体例を挙げながら詳述する。
<<< §3.本発明に係る符号化方法の基本原理 >>>
図9は、図2に示す固定長ビット列で表現された数値データ列を、本発明に係る符号化テーブルを用いて符号化するプロセスを示す図である。図9(a) は、図4と同じ図であり、図3に示す可変長ビット列に、ビット長を示す情報(丸数字)を挿入した状態を示している。図9(b) は、本発明に用いる符号化テーブルである。
このテーブルは、ビット長bの出現頻度は考慮していないので、ハフマン符号化テーブルではないが、可変長の識別コードCとビット長bとの対応関係を示す可変長符号化テーブルである。ここでは、説明の便宜上、この符号化テーブルの右側の破線欄に、識別コードC自身のビット長aと、当該識別コードCを含む単位符号データUのビット長「a+b」を示してある(この破線欄の内容は、説明の便宜のために示すものであって、この符号化テーブルの一部ではない)。
この図9(b) のテーブルでは、b=0〜8の9通りのビット長について、それぞれ対応する識別コードCが定義されている。§1で述べた各符号化テーブルでは、b=1〜8の8通りのビット長について、それぞれ対応する識別コードCが定義されていたが、図9(b) のテーブルでは、更に、b=0の場合についても識別コードの定義が行われている。これは、以下に述べる実施形態では、実データのビット長b=0を定義する方法を採っているためである。具体的には、数値データ「00000000」の実データは、1桁のビット「0」ではなく、ビット長が0である0桁の仮想データ、すなわち、実質的に実データを示すビットを配置しない状態で表現される(この場合、単位符号データUは、実質的に、識別コードCを構成するビットのみから構成される)。
図9(b) のテーブルは、§2で説明した「a+b=k×N」なる条件を満足する符号化テーブルになっている。具体的には、基準ビット長N=4に設定した例であり、整数kの値は、1,2,3,4のいずれかである。たとえば、テーブルの1行目には、ビット長b=0を示す識別コードCとして「1000」なる4ビットからなるコードが示されている。ここでビット長b=0は、上述したように、数値データ「00000000」の実データを、長さ0ビットの仮想ビットによって表現するときに用いられ、実質的に、実データDを構成するビットは存在しない。したがって、この場合の、単位符号データUのビット長「a+b」は4になる。
一方、テーブルの2行目には、ビット長b=1を示す識別コードCとして「010」なる3ビットからなるコードが示されている。この場合の、単位符号データUのビット長「a+b」はやはり4になる。テーブルの3行目には、ビット長b=2を示す識別コードCとして「00」なる2ビットからなるコードが示されている。この場合の、単位符号データUのビット長「a+b」はやはり4になる。また、テーブルの4行目には、ビット長b=3を示す識別コードCとして「10100」なる5ビットからなるコードが示されている。この場合の、単位符号データUのビット長「a+b」は8になる。以下同様に続き、最後に、テーブルの9行目には、ビット長b=8を示す識別コードCとして「10111010」なる8ビットからなるコードが示されている。この場合の、単位符号データUのビット長「a+b」は16になる。
結局、この図9(b) に示す符号化テーブルを用いて符号化を行った場合、単位符号データUのビット長「a+b」は4,8,12,16のいずれかになる。すなわち、必ず基準ビット長N=4の整数倍になり、最大ビット長Umax =16である。もちろん、この符号化テーブルは、基本的には、図7(b) に示すテーブルと同様に、可変長符号化テーブルであるから、テーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をaとしたときに、先頭からaビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在しない、という条件も満たしている。
図9(c) は、図9(a) における丸数字のビット長を示す各識別コードC1,C2,...の部分に、図9(b) の符号化テーブルで定義された固有の識別コードCを当てはめることにより得られる符号化データ列を示している。この図9(c) に示す符号化データ列と、図9(b) に示す符号化テーブルとを用いれば、図2に示す元の固定長ビットの数値データ列の復元が可能である点は、図7の例と全く同様である。すなわち、復号化を行う際には、符号化データ列を先頭から1ビットずつチェックしながら、符号化テーブルを参照し、合致するコードが存在するか否かを調べる処理を行うことになる。
具体的には、まず、図9(c) の符号化データ列の第1ビット目のビット「0」について、合致する識別コードCの有無を調べる。図9(b) のテーブルには合致する識別コードは存在しない。そこで、次に第1〜2ビット目のビット列「01」について、合致する識別コードCの有無を調べるが、やはり合致する識別コードは存在しない。更に、第1〜3ビット目のビット列「011」について、合致する識別コードCの有無を調べると、ようやくビット長「5」に対応する識別コードが見つかることになる。よって、先頭から3ビットのビット列「011」の部分が識別コードCであることが認識でき、これに後続する5ビットのビット列「11100」を実データD1として取り出すことができ、8ビットのデータ「00011100」を復元することができる。
続いて、図9(c) の符号化データ列の第9ビット目のビットから、同様の合致判定プロセスを続けてゆく。まず、第9ビット目のビット「1」について、合致する識別コードCの有無を調べるが、合致する識別コードは存在しない。そこで、次に第9〜10ビット目のビット列「10」について、合致する識別コードCの有無を調べるが、やはり合致する識別コードは存在しない。このようにして、合致判定対象となるビット列を1ビットずつ伸ばしてゆくと、第9〜16ビット目のビット列「10111010」について、はじめて合致する識別コードが見つかる。かくして、当該ビット列「10111010」の部分が識別コードCであることが認識できる。図9(b) のテーブルによると、識別コード「10111010」に対応するビット長bは「8」であるから、第17〜24ビット目のビット列「11111011」を実データD2として取り出すことができる。
次に、図9(c) の符号化データ列の第25ビット目のビットから、同様の合致判定プロセスを続けてゆくと、第25〜27ビット目のビット列「010」について、はじめて合致する識別コードが見つかる。かくして、当該ビット列「010」の部分が識別コードCであることが認識できる。図9(b) のテーブルによると、識別コード「010」に対応するビット長bは「1」であるから、第28ビット目のビット「1」を実データD3として取り出すことができ、8ビットのデータ「00000001」を復元することができる。
続いて、図9(c) の符号化データ列の第29ビット目のビットから、同様の合致判定プロセスを続けてゆくと、第29〜32ビット目のビット列「1001」について、はじめて合致する識別コードが見つかる。かくして、当該ビット列「1001」の部分が識別コードCであることが認識できる。図9(b) のテーブルによると、識別コード「1001」に対応するビット長bは「4」であるから、第33〜36ビット目のビット「1101」を実データD4として取り出すことができ、8ビットのデータ「00001101」を復元することができる。
最後に、図9(c) の符号化データ列の第37ビット目のビットから、同様の合致判定プロセスを続けてゆくと、第37〜38ビット目のビット列「00」について、はじめて合致する識別コードが見つかる。かくして、当該ビット列「00」の部分が識別コードCであることが認識できる。図9(b) のテーブルによると、識別コード「00」に対応するビット長bは「2」であるから、第39〜40ビット目のビット「11」を実データD5として取り出すことができ、8ビットのデータ「00000011」を復元することができる。
なお、図9(b) に示す符号化テーブルは、対応するビット長bの差がN(この例では、N=4)の整数倍となるような2つの識別コードを入れ替えても、「a+b=k×N」という条件は維持されたままになる。たとえば、ビット長b=「2」に対応する識別コード「00」と、ビット長b=「6」に対応する識別コード「101100」とを相互に入れ替えても、上記条件は維持されたままになる(kの値は変わる)。同様に、たとえば、ビット長b=「4」に対応する識別コード「1001」と、ビット長b=「8」に対応する識別コード「10111010」とを相互に入れ替えても、上記条件は維持されたままになる(kの値は変わる)。このような入れ替えを行えば、ビット長bの出現頻度が高いほど、より短いビット長aをもつ識別コードが対応づけられているハフマン符号化テーブルを作成することも可能である。
<<< §4.本発明に係る復号化方法の基本原理 >>>
§3では、本発明に係る符号化方法と、当該符号化方法によって作成された図9(c) に示す具体的な符号化データ列を、1台の復号処理ユニットを用いて、先頭から順番に処理しながら復号化を行う手順を述べた。しかしながら、1台の復号処理ユニットを用いた復号化を前提とする場合、図9に示す符号化処理を行う特有のメリットは生かされない。実際、図9(c) に示す符号化データ列は、図7(c) に示す符号化データ列よりも若干データ容量が大きくなっており、データ容量をより削減するというメリットは得られない。図9に示す符号化処理を行う特有のメリットは、並列処理による復号化が可能になり、復号化に要する時間を短縮できるという点である。以下、このメリットについて、具体的な復号処理手順を示しながら説明する。
図9(c) の符号化データ列を構成する各単位符号データU1,U2,U3,U4,U5のデータ長は、図示のとおり、8ビット,16ビット,4ビット,8ビット,4ビットになっており、いずれも基準ビット長N=4の整数倍になっている。したがって、この符号化データ列を4ビットごとに区切ったとすれば、当該区切りは、必ずしも単位符号データUの境界になるとは限らないが、単位符号データUの境界は、必ず当該区切りの位置にくることになる。したがって、区切り位置を先頭から4ビットずつずらした複数通りの部分データを作成し、これらをそれぞれ複数台の復号処理ユニットに与えれば、何台かの復号処理ユニットには、先頭が単位符号データUの境界位置に一致した部分データが与えられることになり、これらの復号処理ユニットは、正しい復号処理を実行できる。
ここでは、図9(c) に示す符号化データ列について、8台の復号処理ユニットによる並列処理で復号化する原理を、図10〜図14を参照しながら具体的に説明しよう。図10の上段に示すデータ列は、図9(c) に示す符号化データ列を、4ビットずつのブロックB1〜B11に分割して示したものである。なお、ブロックB11には「****」なるビット列が示されているが、これは図9(c) には、単位符号データU5に後続するビット列が明記されていないための便宜であり、実際には、「****」なる部分には何らかのビット列(単位符号データU6を構成するビット列)が入ることになる。
ここでは、8台の復号処理ユニットを、それぞれユニットQ1〜Q8と呼ぶ。いずれの復号処理ユニットも、単位符号データUの最大ビット長Umaxに相当する16ビットの連続ビットデータを収容し、先頭から順次、復号処理を実行する機能を有している。但し、この8台の復号処理ユニットには、Nビット(この例では、4ビット)ずつずらした部分データが与えられる。図において、8台の復号処理ユニットQ1〜Q8が、4ビットずつずらして描かれているのは、与えられる部分データが4ビットずつずれていることを明確に示すためである。
すなわち、第1の復号処理ユニットQ1には、第1〜16ビット目のビット列(ブロックB1〜B4)が与えられ、第2の復号処理ユニットQ2には、第5〜20ビット目のビット列(ブロックB2〜B5)が与えられ、第3の復号処理ユニットQ3には、第9〜24ビット目のビット列(ブロックB3〜B6)が与えられ、... 以下同様である。
さて、この8台の復号処理ユニットQ1〜Q8が並行して、それぞれ復号処理を開始したものとしよう。図11は、各ユニットにおける復号処理の結果を示している。図において、太線の楕円は、合致判定プロセスにより、図9(b) に示す符号化テーブル内の識別コードと合致したビット列を示しており、当該楕円から上方へ向かう矢印の先に記載された丸数字は、合致した識別コードに対応するビット長bを示している。
たとえば、第1の復号処理ユニットQ1が行う復号処理は、まず、第1ビット目のビット「0」について、合致する識別コードCの有無を調べる。図9(b) のテーブルには合致する識別コードは存在しない。そこで、次に第1〜2ビット目のビット列「01」について、合致する識別コードCの有無を調べるが、やはり合致する識別コードは存在しない。更に、第1〜3ビット目のビット列「011」について、合致する識別コードCの有無を調べると、ようやくビット長「5」に対応する識別コードが合致するコードとして見つかることになる。図のユニットQ1の行に示されている楕円「011」とその上方の丸数字「5」は、このような合致認識が行われることを示している。ビット長「5」の認識が行われたため、これに後続する5ビットのビット列「11100」が実データとして取り出され、8ビットのデータ「00011100」が復元される。図のユニットQ1の行の右側に示されている[28]は、この8ビットのデータ「00011100」の10進表記である。
続いて、第1の復号処理ユニットQ1は、第9ビット目のビット「1」について、合致する識別コードCの有無を調べるが、合致する識別コードは存在しない。そこで、次に第9〜10ビット目のビット列「10」について、合致する識別コードCの有無を調べるが、やはり合致する識別コードは存在しない。このようにして、合致判定対象となるビット列を1ビットずつ伸ばしてゆくと、第9〜16ビット目のビット列「10111010」について、ようやくビット長「8」に対応する識別コードが合致するコードとして見つかる。図のユニットQ1の行に示されている楕円「10111010」とその上方の丸数字「8」は、このような合致認識が行われることを示している。ここで、ビット長「8」の認識が行われたため、これに後続する8ビットのビット列を実データとして取り出そうとするが、第1の復号処理ユニットQ1には、ブロックB5以降のビット列は取り込まれていないため、処理は失敗に終わる。図のユニットQ1の行の右側に示されている[28]に後続する[ERR]は、次の実データの復号処理に失敗したことを示している。
結局、第1の復号処理ユニットQ1による復号処理は、最初の実データ[28]の復号化には成功するが、次の実データの復号化には失敗する([ERR])。こうして、復号処理に失敗した場合、そこで処理は終了する。図のユニットQ1の行の右端の「P1=8」なる記述は、正常処理ビット長P1が「8」であることを示している。ここで、正常処理ビット長とは、正常な復号処理に関与したビット列の長さを言う。上例の場合、正常に処理が行われたのは、数値[28]を復元する処理までであるから、この数値[28]の復元に関与した第1〜8ビット目までのビット長が、正常処理ビット長P1ということになる。
次に、第2の復号処理ユニットQ2が行う復号処理を見てみよう。ユニットQ2は、まず、第1ビット目のビット「1」について、合致する識別コードCの有無を調べる。図9(b) のテーブルには合致する識別コードは存在しない。そこで、次に第1〜2ビット目のビット列「11」について、合致する識別コードCの有無を調べるが、やはり合致する識別コードは存在しない。このようにして、合致判定対象となるビット列を1ビットずつ伸ばしてゆくが、結局、いつまで経っても、合致する識別コードは見つからない。よって、正常な復号処理は全く行われないことになる。図のユニットQ2の行の右側に示されている[ERR]および「P2=0」なる記述は、正常な復号処理は全く行われず、正常処理ビット長P2が「0」であることを示している。
次に、第3の復号処理ユニットQ3が行う復号処理を見てみよう。ユニットQ3が、合致判定対象となるビット列を1ビットずつ伸ばしながら、合致する識別コードを見つける処理を繰り返してゆくと、第1〜8ビット目のビット列「10111010」について、ようやくビット長「8」に対応する識別コードが合致するコードとして見つかる。図のユニットQ3の行に示されている楕円「10111010」とその上方の丸数字「8」は、このような合致認識が行われることを示している。ここで、ビット長「8」の認識が行われたため、これに後続する8ビットのビット列「11111011」が実データとして取り出され、8ビットのデータ「11111011」が復元される。図のユニットQ3の行の右側に示されている[251]は、この8ビットのデータ「11111011」の10進表記である。この時点で、第3の復号処理ユニットQ3内には未処理のビットは残っていないので、復号処理はここで終了する。図のユニットQ3の行の右側に示されている[251]および「P3=16」なる記述は、正常処理により[251]なる数値データが復元され、正常処理ビット長P3が「16」であることを示している。
また、第4の復号処理ユニットQ4が行う復号処理は次のとおりである。ユニットQ4は、合致判定対象となるビット列を1ビットずつ伸ばしながら、合致する識別コードを見つける処理を繰り返してゆくと、第1〜5ビット目のビット列「10101」について、ビット長「7」に対応する識別コードが合致するコードとして見つかる。図のユニットQ4の行に示されている楕円「10101」とその上方の丸数字「7」は、このような合致認識が行われることを示している。ここで、ビット長「7」の認識が行われたため、これに後続する7ビットのビット列「1111011」が実データとして取り出され、8ビットのデータ「01111011」が復元される。図のユニットQ4の行の右側に示されている[123]は、この8ビットのデータ「01111011」の10進表記である。
第4の復号処理ユニットQ4は、更に復号処理を続行する。すると、第13〜15ビット目のビット列「010」について、ビット長「1」に対応する識別コードが合致するコードとして見つかる。図のユニットQ4の行に示されている楕円「010」とその上方の丸数字「1」は、このような合致認識が行われることを示している。ここで、ビット長「1」の認識が行われたため、これに後続する1ビットのデータ「1」が実データとして取り出され、8ビットのデータ「00000001」が復元される。図のユニットQ4の行の右側の[123]の右に示されている[1]は、この8ビットのデータ「00000001」の10進表記である。この時点で、第4の復号処理ユニットQ4内には未処理のビットは残っていないので、復号処理はここで終了する。図のユニットQ4の行の右端に示されている「P4=16」なる記述は、[123]および[1]なる数値データを復元する処理に関与した正常処理ビットのビット長P4が「16」であることを示している。
この第4の復号処理ユニットQ4による復号処理で留意すべき点は、すべて正常な復号処理が行われ、[123]および[1]なる2つの数値データが復元されたのにもかかわらず、数値データ[123]は、本来、復元されるべきではない数値データである点である。図11の上段に示す符号化データ列は、もともと図1に示す数値データ[28][251][1][13][3]を符号化したものであり、[28][251][1]なる数値データは、本来、復元されるべき数値データであるが、[123]なる数値データは、図1に示す数値データ列には含まれていない。したがって、この図11に示す復号処理プロセスでは、正常処理で得られた数値データであっても、必ずしも復号化すべき数値データとは限らないことになる。もっとも、この[123]のような数値データは、後述するように、最終的なデータ編成段階で採用されないため、問題が生じることはない。
さて、続く第5の復号処理ユニットQ5および第6の復号処理ユニットQ6が行う復号処理では、いつまで経っても、合致する識別コードは見つからず、正常な復号処理は全く行われない。図のユニットQ5,Q6の行の左側に示されている[ERR]および「P5=0」,「P6=0」なる記述は、正常な復号処理は全く行われず、正常処理ビット長P5,P6が「0」であることを示している。
次の第7の復号処理ユニットQ7が行う復号処理では、図示のとおり、正常処理により、3つの数値データ[1][13][3]が実データとして取り出される。このときの正常処理ビット長P7は「16」である。そして、最後の第8の復号処理ユニットQ8が行う復号処理では、図示のとおり、正常処理により、2つの数値データ[13][3]が実データとして取り出される。その後、「****」の部分について、復号処理が続行されるが、ここでは、この「****」の部分についての復号処理は、有効なビット列が中断されたために失敗したものとしよう。そのため、図示のとおり[13][3][ERR]なる結果が得られ、このときの正常処理ビット長P8は「12」になる。ここで、数値データ[13][3]は、ユニットQ7,Q8で重複して復元されているが、最終的なデータ編成段階では一方のみが採用されるため、問題が生じることはない。
結局、この図11を見ると、ユニットQ1には、単位符号データU1の先頭から始まる部分データが与えられ、ユニットQ3には、単位符号データU2の先頭から始まる部分データが与えられ、ユニットQ7には、単位符号データU3の先頭から始まる部分データが与えられ、ユニットQ8には、単位符号データU4の先頭から始まる部分データが与えられる。したがって、これらユニットQ1,Q3,Q7,Q8は、少なくとも当初は、正常な復号処理を行うことができる。これに対して、ユニットQ2,Q5,Q6には、単位符号データの途中から始まる部分データが与えられるため、当初から正常な復号処理を行うことはできず、処理は失敗に終わる。
なお、ユニットQ4には、単位符号データの途中から始まる部分データが与えられているにもかかわらず、正常な復号処理が完了している。このように、単位符号データの途中から始まる部分データが与えられた場合にも、偶然、正常な復号処理が完了する場合もあり得る。しかしながら、後述するように、最終的なデータ編成段階において、偶然、正常な復号処理が行われたような場合は、その処理結果が採用されることはないので、問題は生じない。
それでは、最終的なデータ編成段階の処理を説明しよう。このデータ編成段階の処理の基本的な考え方は、まず第1の復号処理ユニットQ1を最初の採択ユニットとして決定し、この採択ユニットによって正常な復号処理が行われた最終ビットを認識し、当該最終ビットの直後のビットを先頭ビットとする部分データが分配された別なユニットを新たな採択ユニットと決定する処理を、可能な限り続ける処理を行い、各採択ユニットで正常に復号化が行われた数値データを収集することにより復号化データ列を生成するというものである。
これを上述した具体例に即して説明しよう。図12は、図11に示す復号処理プロセスの図に、正常処理端線Z0〜Z3を付加したものである。この正常処理端線Z0〜Z3は、正常な復号処理が行われたビット列の端部を示すものであり、その位置は、正常処理ビット長P1〜P8に基づいて決定することができる。
まず、ユニットQ1を最初の採択ユニットとして決定し、当該採択ユニットQ1の先頭位置に、正常処理端線Z0を引く。次に、この採択ユニットQ1についての正常処理ビット長P1=8を参照して、正常処理端線Z0から8ビット目(P1ビット目)の位置に、正常処理端線Z1を引く。そして、この正常処理端線Z1を先頭位置とする別なユニットQ3を新たな採択ユニットと決定し、この採択ユニットQ3についての正常処理ビット長P3=16を参照して、正常処理端線Z1から16ビット目(P3ビット目)の位置に、正常処理端線Z2を引く。更に、この正常処理端線Z2を先頭位置とする別なユニットQ7を新たな採択ユニットと決定し、この採択ユニットQ7についての正常処理ビット長P7=16を参照して、正常処理端線Z2から16ビット目(P7ビット目)の位置に、正常処理端線Z3を引く。
このようにすれば、ユニットQ1,Q3,Q7の3台が採択ユニットとなる。図13は、この3台の採択ユニットQ1,Q3,Q7における正常処理ビットの部分を太枠で囲って示した図である。この太枠で囲った正常処理ビットの部分に着目すると、それぞれ正常処理端線Z0〜Z1の区間、正常処理端線Z1〜Z2の区間、正常処理端線Z2〜Z3の区間となり、互いに連続した区間になる。したがって、これら3台の採択ユニットQ1,Q3,Q7による正常な復号処理によって得られた数値データを収集すれば、本来復元されるべき数値データ列が得られる。すなわち、図13に示すように、これら採択ユニットQ1,Q3,Q7によって復元された数値データを収集して並べれば、[28][251][1][13][3]となり、図1に示す元の数値データ列に一致する。
図12に示す例では、ユニットQ4によって[123][1]なる数値データが復元され、ユニットQ8によって[13][3]なる数値データが復元されているが、ユニットQ4,Q8は、採択ユニットにはならないため、これらの数値データは、何ら利用されないまま捨てられることになる。したがって、この場合、ユニットQ4,Q8は無駄な処理を行ったことになるが、並列処理による復号化時間の短縮というメリットを享受する上で貢献したことになる。
結局、上述した復号処理プロセスでは、実際には、8台のユニットQ1〜Q8のすべてが並列的に復号処理を行うことになるが、図13の上段に示す符号化データ列について、単位符号データU1の部分(実際には、後続する単位符号データU2の一部を含む)をユニットQ1に与え、単位符号データU2の部分をユニットQ3に与え、単位符号データU3,U4,U5の部分をユニットQ7に与え、この3台の復号処理ユニットによる並列処理によって、単位符号データU1〜U5の復号化を行ったことと同じである。
こうして、8台のユニットQ1〜Q8の1回目の並列処理により、単位符号データU1〜U5の復号化が完了する。すなわち、この1回目の並列処理により、図13の上段に示す符号化データ列のうちのブロックB1〜B10の部分についての復号化が完了したことになる。そこで、2回目の並列処理では、符号化データ列の未復号化部の先頭、すなわち、ブロックB11の先頭から、1回目の並列処理と全く同じことを繰り返せばよい。このようにして、並列処理を繰り返し実行してゆけば、符号化データ列を構成する各ブロックを順番に復号化してゆくことができる。
なお、上述した実施形態では、基準ビット長Nを4に設定した例を示したが、基準ビット長Nは2以上の整数であれば、任意の整数であってかまわない。また、各復号処理ユニットQ1〜Q8は、いずれも単位符号データUの最大ビット長Umaxに相当する16ビットの連続ビットデータを収容し、復号処理を実行する機能を有しているが、一般に、それぞれLビット(但し、LはNの整数倍、かつ、L≧Umax)の連続ビットデータに対する復号処理を行う機能を有する復号処理ユニットを用いればよい。したがって、たとえば、最大ビット長Umax=16ビットである場合に、L=20ビットとし、20ビットの連続ビットデータを収容し、復号処理を実行する機能を有するユニットを用いてもかまわない。
更に、上述した実施形態では、8台の復号処理ユニットQ1〜Q8を用いた並列処理の例を示したが、用いる復号処理ユニットの台数Mは、必ずしもM=8に設定する必要はなく、たとえば、M=7のような素数に設定しても問題はない。ただ、並列処理による復号化の時間短縮効果が必ず得られるようにするには、M≧1+L/Nとなるような複数M台の復号処理ユニットを用いるのが好ましい。そうすれば、1回の並列処理において、必ず2つ以上の単位符号データの正常な復号処理を行うことができるので、並列処理の効果が毎回必ず得られるようになる。
<<< §5.本発明に係る符号化方法の基本手順 >>>
続いて、本発明に係る符号化方法の基本手順を流れ図を参照しながら説明する。図14は、本発明に係る数値データ列の符号化方法の基本手順を示す流れ図である。この手順を構成する各ステップは、実際には、コンピュータや集積回路などの演算処理装置によって実行される。
まず、ステップS11のデータ入力段階では、符号化の対象となる数値データ列を演算処理装置に入力する処理が行われる。このステップS11で入力される数値データ列は、たとえば、図2に示すような固定長ビットで表現されたデータ列であり、ここで行う符号化処理の目的は、この固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化することにある。
一方、ステップS12のテーブル入力段階では、個々のビット長に対応する固有の識別コードを示す符号化テーブルを演算処理装置に入力する処理が行われる。このステップS12で入力される符号化テーブルは、図9(b) に示すように、実データを表現するのに十分な所定範囲内の複数通りのビット長b(図示の例では、0〜8)について、個々のビット長bと、当該ビット長bに対応する固有の識別コードCと、の対応関係を示す可変長符号化テーブルであり、次の2つの条件を満たしている。
第1の条件は、可変長の識別コードCを認識可能にするために必要な条件であり、「このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をaとしたときに、先頭からaビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在しない」という条件である。このような条件を満たす識別コード群を用いれば、§1で述べたように、復号化を行う際に、先頭から1ビットずつ比較してゆく合致判定処理が可能になる。
第2の条件は、本発明に特有の条件であり、「このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コードに対応するビット長をbとしたときに、所定の基準ビット長N(但し、Nは2以上の整数)に対して『a+b=k×N』(但し、kは任意の整数)である。」という条件である。この第2の条件を満足する識別コード群を用いれば、復号化を行う際に、複数台の復号処理ユニットを用いた並列処理が可能になる点は、既に§4で実例を挙げて説明したとおりである。
こうして、符号化の対象となる数値データ列と、符号化に利用する符号化テーブルとが用意できたら、ステップS13〜S17によって、実際の符号化処理が実行される。
まず、ステップS13のデータ抽出段階において、入力した数値データ列から個々の数値データを順番に抽出する処理が行われる。たとえば、図2に示す例の場合、固定長ビットからなる数値データD1,D2,D3,... が1つずつ順に抽出される。すなわち、最初は、数値「28」を示す8ビットの固定長ビット列D1「00011100」が抽出される。
次の実データ生成段階S14では、抽出した数値データから冗長なビットを削除することにより、実データを生成する処理が行われる。上例の場合、固定長ビット列D1「00011100」の先頭の0を削除する処理が行われ、「11100」なる実データが生成される。図2に示す8ビットの固定長ビット列D1,D2,D3,... について作成された実データは、図3に示すような可変長ビット列になる。いずれも各数値データを構成するビット列から、先頭の0を削除する処理が行われている。この図3に示す可変長ビット列を見ると、いずれも先頭のビットが1になっており、不要な0が削除されていることがわかる。
なお、0を示す数値データ(8ビットの固定長ビット列「00000000」)の取り扱い方には、一般に2通りの方法がある。第1の方法は、数値0を、可変長のビット「0」で表現する方法である。この場合、固定長ビット列「00000000」なる数値データに対して、可変長ビット「0」なる1ビットの実データが生成されることになる。このように、数値0に対しても1ビットの実データが作成されるので、可変長符号化テーブルとしては、図7(b) に示す例のように、ビット長bの最小値が「1」であるテーブルを用いれば十分である。なお、後述するように、本発明では負の値を取り扱うことも可能であり、負の値を「1の補数」を用いて表現する場合には、以下に述べる第2の方法を用いる必要がある。
第2の方法は、数値0を、長さ0ビットの仮想ビットによって表現する方法である。この場合、固定長ビット列「00000000」なる数値データに対して、長さ0ビットの可変長ビット「」なる実データが生成されることになる。すなわち、この場合の実データは、実質的なビットを有しておらず、実際には、実データの部分には何らビットを配置しないことになる。この場合、実データは、ビット長が0である仮想のビット列ということになり、単位符号データUは、実質的に、識別コードCを構成するビット列のみによって構成される。このように、数値0に対して長さ0ビットの実データが作成されるので、可変長符号化テーブルとしては、図9(b) に示す例のように、ビット長bの最小値が「0」であるテーブルを用いる必要がある。
データ容量をできるだけ削減するという観点からは、上述した第2の方法が好ましい。また、これまで述べてきた実施例は、いずれも符号化の対象となる数値データが、正の値を示すデータであるという前提の実施例であったが、実用上は、負の値を示すデータを取り扱うことも可能である。一般的な固定長ビット列による2進表現形式では、値「0」は「00000000」のようにビット0を並べて表現し、正の値「2」は「00000010」のように実データの先頭に0を詰めて表現し、負の値「−2」は「11111101」(1の補数表現の場合)のように実データの先頭に1を詰めて表現する。
したがって、正負の数値が混在する符号付きの数値データを取り扱う場合、値「0」については全ビットを冗長ビットとし、正の値については、先頭に連続して付されているビット「0」を冗長ビットとし、負の値については、先頭に連続して付されているビット「1」を冗長ビットとし、これら冗長ビットを削除することにより実データを生成することができる。すなわち、ステップS14では、抽出した数値データを示す実データとして、当該数値データが0を示すデータである場合にはビット長が0である仮想のビット列を、正の値を示すデータである場合には先頭に0を含まない可変長のビット列を、負の値を示すデータである場合には先頭に1を含まない可変長のビット列を、それぞれ生成する処理を行えばよい。
続くステップS15の識別コード選択段階では、ステップS12で入力した符号化テーブルを参照して、ステップS14で生成された実データのビット長bに対応する識別コードCを選択する処理が行われる。たとえば、図9(a) に示す例の場合、ステップS14において作成された実データD1「11100」のビット長b(図では、丸数字「5」で示されている)に対応する識別コードC1「011」が、図9(b) に示す符号化テーブルから選択される。
そして、ステップS16の単位符号データ生成段階では、ステップS14で生成された実データの先頭に、ステップS15で選択された識別コードを付加することにより、抽出した数値データを示す単位符号データが生成される。上例の場合、実データD1「11100」の先頭に、識別コードC1「011」が付加され、図9(c) に示すように、単位符号データU1「01111100」が生成されることになる。
続くステップS17では、全データについての処理が完了するまで、ステップS13からの処理へ戻る繰り返し処理が実行される。すなわち、上述したデータ抽出段階S13、実データ生成段階S14、識別コード選択段階S15、単位符号データ生成段階S16が、入力した数値データ列を構成する数値データのそれぞれについて繰り返し実行される。これにより、図9(c) に示すような単位符号データU1,U2,U3,U4,U5,... が順番に生成されてゆくことになる。
最後のステップS18では、生成された単位符号データを順番に並べて、符号化データ列として出力するデータ出力段階が行われる。これにより、図9(c) に示すような単位符号データU1,U2,U3,U4,U5,...を並べたデータ列が、符号化データ列として出力されることになる。
このステップS18のデータ出力段階では、符号化データ列と、符号化の処理に用いた符号化テーブルと、を含むデータファイルを出力するのが好ましい。図15は、このデータ出力段階で作成される符号化データファイルFの構造の一例を示すブロック図である。画像データなどの一般的なデータファイルは、図示のとおり、ヘッダ部F1、本体部F2、フッタ部F3によって構成されている。ここで、本体部F2には、符号化データファイルFに収容すべき本来のデータ、すなわち、図9(c) に示すような単位符号データU1,U2,U3,U4,U5,...を並べて構成される符号化データ列が組み込まれる。
これに対して、ヘッダ部F1には、通常、本体部F2に組み込まれているデータの形式、フォーマット、容量などを示す補助的な情報が組み込まれる。図15に示す実施例では、このヘッダ部F1に、符号化の処理に用いた符号化テーブルTを組み込んでいる。そうすれば、後述する復号化を行う際に、このヘッダ部F1に組み込まれた符号化テーブルTをそのまま利用することが可能になる。もちろん、符号化テーブルTは、フッタ部F3に組み込むようにしてもよい。なお、図15では、各単位符号データU1,U2,...は、いずれも同じ幅のブロックで示されているが、実際には、それぞれのデータ長は異なっている(但し、いずれも所定の基準ビット長N(但し、Nは2以上の整数)の整数倍になるような長さ)。
結局、図15に示す符号化データファイルFは、所定のビット長bを示す識別コードCに後続して当該ビット長bをもつビット列からなる実データDを配したデータであって、全長が所定の基準ビット長N(但し、Nは2以上の整数)の整数倍になるように設定された、互いに長さの異なる複数通りの単位符号データU(最大ビット長Umax)を、並べることにより構成されるビット羅列データと、個々の識別コードCに対応する特定のビット長bを示す符号化テーブルTと、を含むデータファイルということになり、当該データファイルFは、コンピュータ読み取り可能な情報記録媒体に記録して配布することができる。
また、このデータファイルFに含まれている符号化テーブルTは、数値データ列を可変長のビット列を用いて符号化する符号化方法に用いるテーブルであって、所定範囲内の複数通りのビット長について、個々のビット長と、当該ビット長に対応する固有の識別コードと、の対応関係が示されており、このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をaとしたときに、先頭からaビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在せず、かつ、当該着目識別コードに対応するビット長をbとしたときに、所定の基準ビット長N(但し、Nは2以上の整数)に対して「a+b=k×N」(但し、kは任意の整数)なる条件を満足するテーブルということになる。
一方、図16は、符号化データファイルFの構造の別な一例を示すブロック図である。ステップS18のデータ出力段階では、この図16に示す例のように、符号化データ列と、符号化の処理に用いた符号化テーブルを特定するテーブル特定情報と、を含むデータファイルFを出力するようにしてもよい。
図15に示すファイルFと図16に示すファイルFとの相違は、後者では、ヘッダ部F1に、符号化テーブルT自身を組み込む代わりに、符号化の処理に用いた符号化テーブルを特定するテーブル特定情報Hを組み込むようにした点である。テーブル特定情報Hは、符号化テーブルそれ自身ではないが、符号化テーブルを特定するためのファイル名や、URLなどの情報であり、復号化を行う際に、このテーブル特定情報Hを用いて、復号化に必要な符号化テーブルを入手できるようにするための情報である。
たとえば、図示の例の場合、4種類の符号化テーブルT1〜T4が別ファイルなどによって用意されており、これらのテーブルのどれかを特定する情報が、テーブル特定情報Hとしてヘッダ部F1に組み込まれることになる。具体的には、たとえば、テーブルT3が符号化に用いられたテーブルであるとすると、当該テーブルT3のファイル名や、当該テーブルT3の入手先を示すURLなどの情報が、テーブル特定情報Hとしてヘッダ部F1に組み込まれる。復号化を行う際には、このテーブル特定情報Hを利用して、必要な符号化テーブルを入手することができる。
結局、図16に示す符号化データファイルFは、所定のビット長を示す識別コードCに後続して当該ビット長bをもつビット列からなる実データDを配したデータであって、全長が所定の基準ビット長N(但し、Nは2以上の整数)の整数倍になるように設定された、互いに長さの異なる複数通りの単位符号データU(最大ビット長Umax)を、並べることにより構成されるビット羅列データと、個々の識別コードCに対応する特定のビット長bを示す符号化テーブルTを特定するテーブル特定情報Hと、を含むデータファイルということになり、当該データファイルは、コンピュータ読み取り可能な情報記録媒体に記録して配布することができる。
なお、§3でも述べたとおり、実用上は、ステップS12で入力する符号化テーブルとして、図8(b) に示す例のように、実データのビット長bの出現頻度が高いほど、より短いビット長aをもつ識別コードが対応づけられているハフマン符号化テーブルを用いるようにするのが好ましい。このようなハフマン符号化テーブルは、§3で述べたとおり、図9(b) に示す符号化テーブルについて、対応するビット長bの差がNの整数倍となるような2つの識別コードを入れ替える作業を行うことにより作成することができる。
そのためには、ステップS11のデータ入力段階の後に、入力した数値データ列について、実データのビット長bの出現頻度を集計する頻度集計段階を行うようにし、ステップS12のテーブル入力段階の後に、入力した既存の標準符号化テーブル内の、基準ビット長Nの整数倍の差をもつビット長b相互について、テーブルの内容を入れ替える処理を行うことにより、実データのビット長bの出現頻度が高いほど、より短いビット長aをもつ識別コードが対応づけられている修正した符号化テーブルを生成するテーブル修正段階を行うようにし、ステップS15の識別コード選択段階で、この修正した符号化テーブルを参照して、識別コードの選択を行うようにすればよい。
<<< §6.本発明に係る復号化方法の基本手順 >>>
続いて、本発明に係る復号化方法の基本手順を流れ図を参照しながら説明する。図17は、本発明に係る数値データ列の復号化方法の基本手順を示す流れ図である。この手順を構成する各ステップは、実際には、コンピュータや集積回路などの演算処理装置によって実行される。
ここで述べる復号化方法は、§5で述べた符号化方法によって符号化された符号化データ列、すなわち、「所定のビット長bを示す識別コードCに後続して、当該ビット長bをもつビット列からなる実データDを配したデータであって、全長が所定の基準ビット長N(但し、Nは2以上の整数)の整数倍になるように設定された単位符号データU(最大ビット長Umax)」を、複数組並べることにより構成された符号化データ列、を復号処理の対象とするものであり、個々の実データに対応する数値データを復元することを目的とするものである。
この復号化方法の基本原理は、既に§4で説明したとおり、符号化データ列をNビットの整数倍の単位で分割して複数の部分データを生成し、各部分データを複数M台の復号処理ユニットに分配し、この複数M台の復号処理ユニットの並列処理により、分配された部分データに対する復号処理を行い、正常に復号化が行われた数値データを並べることにより復号化データ列を生成する、というものである。
まず、ステップS21のデータ入力段階では、復号化の対象となる符号化データ列を、複数M台の復号処理ユニットを含む演算処理装置に入力する処理が行われる。具体的には、たとえば、図9(c) に示すような可変長ビットで表現された符号化データ列が入力されることになる。
一方、ステップS22のテーブル入力段階では、個々の識別コードに対応する特定のビット長を示す符号化テーブルを演算処理装置に入力する処理が行われる。ここで入力する符号化テーブルは、当然ながら、ステップS21で入力した符号化データ列を作成する符号化処理の段階で用いられたテーブルと実質的な内容が同一のテーブルである必要がある。したがって、実用上は、図15に示すように、符号化の処理に用いた符号化テーブルTが組み込まれた符号化データファイルFか、図16に示すように、符号化の処理に用いた符号化テーブルTを特定するテーブル特定情報Hが組み込まれた符号化データファイルFを利用して、符号化データ列を保存しておき、復号化を行う際には、この符号化データファイルFによって、符号化データ列とともに、その復号化に用いる符号化テーブルの情報を引き渡せるようにしておくのが好ましい。
たとえば、図15に示すように、符号化データ列と、符号化の処理に用いた符号化テーブルTと、を含むデータファイルFが与えられたときには、データ入力段階S21において、当該データファイルFから符号化データ列を抽出する処理を行い、テーブル入力段階S22において、当該データファイルFから符号化テーブルTを抽出する処理を行えばよい。また、図16に示すように、符号化データ列と、符号化の処理に用いた符号化テーブルを特定するテーブル特定情報Hと、を含むデータファイルが与えられたときには、データ入力段階S21において、当該データファイルFから符号化データ列を抽出する処理を行い、テーブル入力段階S22において、データファイルFからテーブル特定情報Hを抽出する処理を行った後、当該テーブル特定情報Hによって特定されるテーブルを選択して利用すればよい。
続くステップS23のデータ分配段階では、それぞれLビット(但し、LはNの整数倍、かつ、L≧Umax)の連続ビットデータに対する復号処理を行う機能を有する複数M台の復号処理ユニットに対して、ステップS21で入力した符号化データ列の一部を部分データとして分配する処理が行われる。図10に示した実施形態は、N=4,L=16,Umax =16,M=8に設定した例であり、それぞれ16ビットの連続ビットデータに対する復号処理を行う機能を有する8台の復号処理ユニットQ1〜Q8に対して、ステップS21で入力した符号化データ列の一部を部分データとして分配する処理が行われる。
この分配段階の処理を一般論として記述すると、符号化データ列の未復号化部の先頭から数えて第(N×(i−1)+1)ビット目〜第(N×(i−1)+L)ビット目までのビット列を、第i番目のユニット(i=1〜M)に分配する処理ということになる。図10に示した実施形態の場合、N=4,L=16,M=8であるから、符号化データ列の未復号化部の先頭から数えて第(4×(i−1)+1)ビット目〜第(4×(i−1)+16)ビット目までのビット列を、第i番目のユニット(i=1〜8)に分配する処理ということになる。たとえば、第1の復号処理ユニットQ1に分配されるビット列は、i=1として、符号化データ列の未復号化部の先頭から数えて第1ビット目〜第16ビット目までのビット列になり、第2の復号処理ユニットQ2に分配されるビット列は、i=2として、符号化データ列の未復号化部の先頭から数えて第5ビット目〜第20ビット目までのビット列になる。
次のステップS24の復号処理段階は、M台の復号処理ユニットによる並列処理として行われる段階である。すなわち、M台の復号処理ユニットによる並列処理により、ステップS22で入力した符号化テーブルを参照しながら、それぞれ分配された部分データから、実データに対応する数値データを取り出す復号処理が行われる。既に§4で述べたとおり、この復号処理は、必ずしも正常に行われるとは限らない。たとえば、図11に[ERR]と記述されたユニットでは、正常な復号処理が行われないことになる。したがって、この復号処理段階では、分配された部分データの先頭から順に、正常な復号処理が可能な限り処理を続行し、正常な復号処理ができない場合には、そこで処理を中断することになる(もしくは、§14で述べるように、所定時点で処理を中断してもよい。)。
続くステップS25のデータ編成段階では、このM台の復号処理ユニットによる復号処理の結果を取捨選択して、個々の実データに対応する数値データを並べた復号化データ列を生成する処理が行われる。具体的には、1回の並列処理によってM台の復号処理ユニットから処理結果が得られたときに、まず第1のユニットを最初の採択ユニットとして決定し、この採択ユニットによって正常な復号処理が行われた最終ビットを認識し、当該最終ビットの直後のビットを先頭ビットとする部分データが分配された別なユニットを新たな採択ユニットと決定する処理を、可能な限り続ける処理を行い、各採択ユニットで正常に復号化が行われた数値データを収集して並べる処理が行われる。
たとえば、図12に示す実施例の場合、まず第1のユニットQ1を最初の採択ユニットとして決定し、この採択ユニットQ1によって正常な復号処理が行われた最終ビットが、正常処理ビット長P1によって第8ビット目と認識される(正常処理端線Z1の左側ビット)。そして、この最終ビットの直後のビット(正常処理端線Z1の右側ビット)を先頭ビットとする部分データが分配された別なユニットQ3を新たな採択ユニットと決定する処理が行われる。更に、この新たな採択ユニットQ3によって正常な復号処理が行われた最終ビットが、正常処理ビット長P3によって第24ビット目と認識される(正常処理端線Z2の左側ビット)。そして、この最終ビットの直後のビット(正常処理端線Z2の右側ビット)を先頭ビットとする部分データが分配された別なユニットQ7を新たな採択ユニットと決定する処理が行われる。更に、この新たな採択ユニットQ7によって正常な復号処理が行われた最終ビットが、正常処理ビット長P7によって第40ビット目と認識される(正常処理端線Z3の左側ビット)。そして、各採択ユニットQ1,Q3,Q7で正常に復号化が行われた数値データ[28][251][1][13][3]を収集して並べる処理が行われる。
続くステップS26では、全データについての処理が完了するまで、すなわち、入力した符号化データ列のすべての部分に対する復号化が完了するまで、ステップS23からの処理へ戻る繰り返し処理が実行される。そして、データ分配段階S23では、符号化データ列の未復号化部の先頭から(図13に示す例の場合、ブロックB11から)、前述した分配処理が繰り返し実行される。そして、ステップS24では、新たな部分データの分配が行われるたびに、各復号処理ユニットによる並列的な復号処理が実行され、ステップS25では、こうして複数回の並列処理によってそれぞれ収集された数値データを並べることにより、復号化データ列の生成が行われる。
最後に、ステップS27のデータ出力段階において、生成された復号化データ列が出力される。
なお、既に述べたとおり、並列処理の効果が毎回必ず得られるようにするためには、1回の並列処理において、必ず2つ以上の単位符号データの正常な復号処理を行うことができるようにすればよい。そのためには、ステップS23のデータ分配段階では、M≧1+L/Nとなるような複数M台の復号処理ユニットに部分データの分配を行い、ステップS24の復号処理段階では、これらM台の復号処理ユニットによる並列処理を行うようにすればよい。
<<< §7.本発明に係る符号化装置の基本構成 >>>
続いて、本発明に係る符号化装置の基本構成を、図18に示すブロック図を参照しながら説明する。ここに示す装置は、実際には、コンピュータや集積回路などの演算処理装置によって構成することができる。
図18に示すとおり、この符号化装置は、データ格納部110、テーブル格納部120、データ抽出部130、実データ生成部140、識別コード選択部150、単位符号データ生成部160、データ出力部170によって構成され、固定長ビットからなる数値データ列Eを、符号化テーブルTを参照することにより符号化し、可変長ビット列からなる符号化データ列Sを生成する機能を有する。
データ格納部110は、符号化の対象となる数値データ列Eを入力して格納する構成要素であり、たとえば、図2に例示するような固定長ビット列からなる数値データ列Eが格納される。一方、テーブル格納部120は、個々のビット長bに対応する固有の識別コードCを示す符号化テーブルTを格納する構成要素であり、たとえば、図9(b) に例示するような可変長符号化テーブルが格納される。
ここで、このテーブル格納部120に格納される符号化テーブルは、既に述べたとおり、実データDを表現するのに十分な所定範囲内の複数通りのビット長bについて、個々のビット長bと、当該ビット長bに対応する固有の識別コードCと、の対応関係を示すテーブルであり、「条件1:このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をaとしたときに、先頭からaビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在しない。」かつ「条件2:当該着目識別コードに対応するビット長をbとしたときに、所定の基準ビット長N(但し、Nは2以上の整数)に対して『a+b=k×N』(但し、kは任意の整数)となる」という2つの条件を満足するテーブルである。
データ抽出部130は、データ格納部110に格納されている数値データ列Eから個々の数値データD1,D2,D3,... を順番に抽出する構成要素である。たとえば、入力された数値データD1,D2,D3,... が、図2に示すような8ビットの固定長ビット列である場合、先頭から8ビットずつ区切りながら、8ビットのビット列を1つの数値データとして抽出する処理を行う。
実データ生成部140は、この抽出した数値データから冗長なビットを削除することにより実データを生成する構成要素である。具体的には、符号付きの数値データを取り扱う場合であれば、抽出した数値データを示す実データとして、当該数値データが0を示すデータである場合にはビット長が0である仮想のビット列を生成し、正の値を示すデータである場合には先頭に0を含まない可変長のビット列を生成し(ビット1が出現するまで先頭のビット0を削除してゆく)、負の値を示すデータである場合には先頭に1を含まない可変長のビット列を生成(ビット0が出現するまで先頭のビット1を削除してゆく)すればよい。
識別コード選択部150は、テーブル格納部120に格納されている符号化テーブルTを参照して、実データ生成部140で生成された実データのビット長bに対応する識別コードCを選択する構成要素であり、単位符号データ生成部160は、実データ生成部140によって生成された実データの先頭に、識別コード選択部150によって選択された識別コードを付加することにより、データ抽出部130が抽出した数値データを示す単位符号データを生成する構成要素である。
そして、データ出力部170は、単位符号データ生成部160で生成された単位符号データUを順番に並べて、符号化データ列Sとして出力する構成要素である。具体的には、図9(c) に示すような符号化データ列が出力されることになる。なお、ここに示す実施形態の場合、データ出力部170は、符号化データ列Sとともに、テーブル格納部120に格納されている符号化テーブルTもしくは当該符号化テーブルTを特定するテーブル特定情報Hを出力する機能を有している。たとえば、データ出力部170から出力されるデータファイルFは、図15もしくは図16に示す構造をもったデータファイルになる。
<<< §8.本発明に係る復号化装置の基本構成 >>>
続いて、本発明に係る復号化装置の基本構成を、図19に示すブロック図を参照しながら説明する。ここに示す装置は、実際には、コンピュータや集積回路などの演算処理装置によって構成することができる。
ここで述べる復号化装置は、§7で述べた符号化装置によって符号化された符号化データ列S、すなわち、「所定のビット長bを示す識別コードCに後続して、当該ビット長bをもつビット列からなる実データDを配したデータであって、全長が所定の基準ビット長N(但し、Nは2以上の整数)の整数倍になるように設定された単位符号データU(最大ビット長Umax)」を、複数組並べることにより構成された符号化データ列、を復号処理の対象とするものであり、個々の実データに対応する数値データを復元する処理を行う。
図19に示すとおり、この復号化装置は、データ格納部210、テーブル格納部220、データ分配部230、複数M台の復号処理ユニット240(1)〜240(M)、データ編成部250、データ出力部260によって構成され、可変長ビット列からなる符号化データ列Sを、符号化テーブルTを参照することにより復号化し、固定長ビットからなる復号化データ列G(元の数値データ列E)を生成する機能を有する。
データ格納部210は、復号化の対象となる符号化データ列Sを入力して格納する構成要素であり、たとえば、図9(c) に例示するような可変長ビット列からなる符号化データ列Sが格納される。一方、テーブル格納部220は、個々の識別コードCに対応する特定のビット長bを示す符号化テーブルTを格納する構成要素であり、たとえば、図9(b) に例示するような可変長符号化テーブルが格納される。このテーブル格納部220に格納される符号化テーブルは、符号化データ列Sを作成する際に、図18に示すテーブル格納部120に格納されていた符号化テーブルと実質的な内容が同一のものである。
実用上は、図15に示すように、符号化の処理に用いた符号化テーブルTが組み込まれた符号化データファイルFか、図16に示すように、符号化の処理に用いた符号化テーブルTを特定するテーブル特定情報Hが組み込まれた符号化データファイルFを利用して、符号化データ列を保存しておき、復号化を行う際には、この符号化データファイルFから、符号化データ列Sとともに、その復号化に用いる符号化テーブルの情報を読み出すようにするのが好ましい。
たとえば、図15に示すように、符号化データ列と、符号化の処理に用いた符号化テーブルTと、を含むデータファイルFが与えられたときには、データ格納部210が、当該データファイルFから符号化データ列Sを抽出して格納する処理を行い、テーブル格納部220が、当該データファイルFから符号化テーブルTを抽出して格納する処理を行うようにすればよい。また、図16に示すように、符号化データ列と、符号化の処理に用いた符号化テーブルを特定するテーブル特定情報Hと、を含むデータファイルFが与えられたときには、データ格納部210が、当該データファイルFから符号化データ列Sを抽出して格納する処理を行い、テーブル格納部220が、当該データファイルFからテーブル特定情報Hを抽出する処理を行った後、当該テーブル特定情報Hによって特定されるテーブルを外部から読み込んで格納する処理を行うようにすればよい。
データ分配部230は、M台の復号処理ユニット240(1)〜240(M)に対して、データ格納部210に格納されている符号化データ列Sの一部を部分データとして分配する構成要素である。具体的には、§6で説明したとおり、符号化データ列Sの未復号化部の先頭から数えて第(N×(i−1)+1)ビット目〜第(N×(i−1)+L)ビット目までのビット列を、第i番目のユニット(i=1〜M)に分配する処理を、符号化データ列Sのすべての部分に対する復号化が完了するまで繰り返し実行する。
M台の復号処理ユニット240(1)〜240(M)は、ここに示す実施例の場合、全く同一の構成要素であり、それぞれLビット(但し、LはNの整数倍、かつ、L≧Umax)の連続ビットデータに対する復号処理を行う機能を有する。具体的には、これらM台の復号処理ユニット240(1)〜240(M)は、テーブル格納部220に格納されている符号化テーブルTを参照しながら、それぞれ分配された部分データから、実データに対応する数値データを取り出す復号処理を行う機能を有し、データ分配部230から新たな部分データの分配が行われるたびに、分配された部分データの先頭から順に、正常な復号処理が可能な限り処理を続行する。上述したように、正常な復号処理が行えない場合には、そこで処理を中断する。
これらM台の復号処理ユニット240(1)〜240(M)による復号処理は、並列処理として並行して行われることになり、その結果、復号化の処理時間を短縮するという効果が得られることになる。ただ、既に述べたとおり、並列処理の効果が毎回必ず得られるようにするためには、1回の並列処理において、必ず2つ以上の単位符号データの正常な復号処理を行うことができるようにするのが好ましい。そのためには、M≧1+L/Nとなるような複数M台の復号処理ユニットを設けるようにすればよい。
なお、ここに示す実施例の場合、各復号処理ユニット240からデータ編成部250に対して、正常な復号処理によって復元された数値データDと、当該正常な復号処理に関与したビット数を示す正常処理ビット長Pと、正常な復号処理を続行することができなかった場合には、その旨を示すエラー信号ERRとが報告される。
たとえば、図12に示す実施例の場合、ユニットQ1からは、正常な復号処理によって復元された数値データ「28」と、当該正常な復号処理に関与したビット数を示す正常処理ビット長「P1=8」と、エラー信号「ERR」とが報告されることになり、ユニットQ2からは、正常処理ビット長「P2=0」と、エラー信号「ERR」とが報告されることになり、ユニットQ3からは、復元された数値データ「251」と、正常処理ビット長「P3=16」とが報告されることになる。ユニットQ4〜Q8からも、同様の報告がなされる。
データ編成部250は、M台の復号処理ユニット240(1)〜240(M)による復号処理の結果を取捨選択して、個々の実データに対応する数値データを並べた復号化データ列を生成する構成要素である。具体的には、データ編成部250は、1回の並列処理によってM台の復号処理ユニット240(1)〜240(M)から処理結果が得られたときに、まず第1のユニット240(1)を最初の採択ユニットとして決定し、この採択ユニットによって正常な復号処理が行われた最終ビットを認識し、当該最終ビットの直後のビットを先頭ビットとする部分データが分配された別なユニットを新たな採択ユニットと決定する処理を、可能な限り続ける処理を行い、各採択ユニットで正常に復号化が行われた数値データを収集し、1回もしくは複数回の並列処理によってそれぞれ収集された数値データを並べることにより復号化データ列を生成する。
また、データ編成部250は、1回の並列処理によってM台の復号処理ユニット240(1)〜240(M)からの処理結果が得られるたびに、データ分配部230に対して、既復号化部を示す信号を与える。たとえば、図13に示す実施例の場合、ブロックB1〜B10までのビット列についての復号化が完了したことになるので、データ編成部250は、データ分配部230に対して、ブロックB10までが既復号化部であることを示す信号を与える。具体的には、たとえば、ブロックB10の最終ビットの位置(先頭から第40番目のビット)を示す信号を与えればよい。これにより、データ編成部250は、次回の並列処理のための分配を行う起点となる未復号化部の先頭が、先頭から第41番目のビット(ブロックB11の先頭ビット)であることを認識し、この起点から分配処理を行うことができる。
データ編成部250による上述した処理は、M台の復号処理ユニット240(1)〜240(M)から報告された数値データDと正常処理ビット長Pとに基づいて行うことができる。すなわち、M台の復号処理ユニットのうちの採択ユニットは、正常処理ビット長Pに基づいて決定することができる。具体的には、まず第1のユニット240(1)を最初の採択ユニットとする。続いて、この第1のユニット240(1)から報告された正常処理ビット長Pに基づいて、当該採択ユニットによって正常な復号処理が行われた最終ビットを認識することができるので、当該最終ビットの直後のビットを先頭ビットとする部分データが分配された別なユニットを新たな採択ユニットとして特定することができる。以下、同様にして、順次採択ユニットを決定してゆくことができ、最後に、各採択ユニットから報告された数値データDを、順番に並べることにより、復号化データ列を生成することができる。また、各採択ユニットから報告された正常処理ビット長Pを合計することにより、既復号化部を認識することができるので、これをデータ分配部230に対して報告することができる。
なお、ここに示す実施例では、各復号処理ユニット240からデータ編成部250に対して、正常な復号処理を続行することができなかったことを示すエラー信号ERRを報告させるようにしているが、上述したように、データ編成部250における処理を実行する上では、このエラー信号ERRは直接的には用いられない。したがって、エラー信号ERRの報告は必ずしも必要なものではなく、省略してもかまわない。実用上は、正常処理ビット長P=0なる報告を、エラー信号ERRに代用することができる。
こうして、1回もしくは複数回の並列処理により、データ編成部250は、復号化データ列Gを作成することができる。データ出力部260は、こうして作成された復号化データ列Gを出力する機能を果たす。この復号化データ列Gは、図18の左上に示す元の数値データ列Eと同じものになる。
<<< §9.二次元符号化テーブルを利用する基本原理 >>>
これまで述べてきた実施形態で用いた符号化テーブルは、いずれも実データのビット長bと識別コードCとの1対1の対応関係を示すものであり、各識別コードCは、特定のビット長bの情報を示すコードであった。これに対して、この§9で述べる実施形態は、識別コードCに、ビット長bの情報だけでなく、付加的な情報をもたせる運用を行うものである。具体的には、ゼロのランレングス値Rの情報をもたせることになる。
そこで、まず、ゼロのランレングス値Rを採り入れる基本概念を簡単に説明する。いま、図20に示すような数値データ列(10進表記)を符号化する場合を考えてみよう。ここでは、この図20に示す数値データ列が8ビットの固定長ビット列として与えられた場合に、図9(b) に示す符号化テーブルを用いて、これまで述べた本発明に係る符号化方法によって、可変長ビット列に変換する事例を考える。
図21は、このような符号化方法を実施するプロセスを示す図である。図の上段の表には、個々の数値データD(10進表記)について、冗長ビットを削除することによって得られる実データDと、この実データDのビット長bに対応する識別コードCと、実データDの先頭に識別コードCを付加してなる単位符号データUのビット長と、が示されている。たとえば、データ番号1の行には、数値データ「28」(8ビット固定長による2進表記は「00011100」)」について、実データ「11100」と、この実データのビット長「5」に対応する識別コード「011」(図9(b) のテーブル参照)と、識別コードと実データとを連結して得られる単位符号データ「01111100」のビット長「8」と、が示されている。
図20に示す数値データ列の特徴は、途中に連続した0が含まれている点である。一般に、画像データには、このような連続した0が含まれることが多く、特に、後述するJPEG形式の画像データなどでは、通常、連続した多数の0が含まれる。図21に示す符号化プロセスは、これまで述べてきた基本的な実施形態に係る符号化方法によるものであり、このような連続した0についても、それぞれ単位符号データUが作成されることになる。すなわち、図21の上段の表におけるデータ番号4〜9の行が、6個の連続した0についての符号化プロセスを示している。
図9(b) に示す符号化テーブルでは、数値データが0を示すデータである場合には、ビット長が0である仮想のビット列を実データとし、識別コード「1000」を割り当てることになる。したがって、図21の上段の表におけるデータ番号4〜9の行では、実データは存在せず、識別コード「1000」のみが割り当てられている。この表に基づいて作成された符号化データ列の一部が、図21の下段に示されている。図示の単位符号データU1,U2,U3,U4,U5,U6は、それぞれ元の数値データ28,251,1,0,0,0に対応する。単位符号データU4,U5,U6は、数値0を示すデータであるため、実データを構成するビットは存在せず、識別コード「1000」のみによって構成されている。
図21の上段の表におけるUのビット長の欄を見ると、4,8,16のいずれかになっており、基準ビット長N=4の整数倍になっている。これは、そうなるように設定された図9(b) に示す符号化テーブルを用いて符号化を行ったためである。したがって、図21の下段に示す単位符号データU1,U2,U3,U4,U5,U6のビット長は、必ず4の整数倍になっており、並列処理による復号化が可能になる点は、これまで述べてきたとおりである。
さて、この図21に示す符号化プロセスでは、図21の下段に示すように、数値0を表すために「1000」なる4ビットの単位符号データUが作成されることになるので、元の数値データ列に連続した0が含まれている場合、必ずしも効率的な符号化が行われているとは言い難い。そこで、連続した0が多く含まれる可能性のある画像データなどでは、この連続した0をゼロのランレングスとして把握し、ランレングス値Rによって表す手法が採られる。たとえば、図21に示す例の場合、データ番号4〜9の部分については、ゼロのランレングス値R=6によって表現し、このランレングス値R=6の情報を、データ番号10についての単位符号データに盛り込む手法を採る。
図21に示す例では、データ番号10の数値「13」について、その実データ「1101」の先頭に、当該実データのビット長「4」に対応する識別コード「1001」(図9(b) のテーブル参照)を付加することにより、「10011101」なる単位符号コードU10が作成されることになる。この場合、識別コード「1001」は、実データのビット長「4」を示す機能しか有していないが、識別コードにゼロのランレングス値R=6の情報をもたせることができれば、データ番号4〜9の部分についての単位符号データU4〜U9を省略することができ、データ量を大幅に削減することができる。
そのためには、図22の下段に示すような符号化テーブルを用いるようにすればよい。この符号化テーブルは、個々のビット長bと個々のランレングス値Rとの組み合わせに対応する固有の識別コードを示すテーブルであり、ここでは、二次元符号化テーブルと呼ぶことにする。また、これと対比する上で、これまでの実施形態で用いた符号化テーブル(個々のビット長bに対応する固有の識別コードを示すテーブル)を一次元符号化テーブルと呼ぶ。
この二次元符号化テーブルは、横方向にビット長b=0〜8、縦方向にランレングス値R=0〜8がとられており、両者の任意の組み合わせに対して、所定の識別コードが定義されている。たとえば、「ビット長b=4」と「ランレングス値R=6]との組み合わせに対しては、「C64」なる識別コードが定義されている。もっとも、図示する各識別コードC00〜C88は、実際の識別コードではなく、説明の便宜上、簡単な略記号に置き換えて示したものである。実際には、各識別コードは、これまでの一次元符号化テーブルで定義されていた識別コードと同様に、デジタルビット列から構成されている。
しかも、この二次元符号化テーブルについても、これまで述べた一次元符号化テーブルと同様に、「条件1:このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をaとしたときに、先頭からaビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在しない。」かつ「条件2:当該着目識別コードに対応するビット長をbとしたときに、所定の基準ビット長N(但し、Nは2以上の整数)に対して『a+b=k×N』(但し、kは任意の整数)となる」という2つの条件を満足している必要がある。
更に、図示の例の場合、ビット長b=0〜8およびランレングス値R=0〜8の範囲をカバーするテーブルにするために、合計99通りもの識別コードが必要になり(実際には、後述するように、識別コードC10,C20,C30,... ,C70は定義する必要がない)、これらの識別コードのすべてについて、上記2つの条件が満足されていなければならない。したがって、実際には、各識別コードC00〜C88は、かなりビット長の長いコードになる(§11で実例を示す)。ただ、ここでは、説明の便宜上、C00〜C88という略記号を用いて、これらの識別コードを示すことにする。
図22の上段の図は、この二次元符号化テーブルを利用する実施形態における単位符号データUの基本構造を示す図である。当該基本構造は、基本的には、これまで述べてきた一次元符号化テーブルを利用する実施形態における単位符号データの構造と同じであり、識別コードCと実データDとによって構成されている。そして、識別コードCのビット長をaとし、実データDのビット長をbとすれば、「a+b=k×N」(但し、kは任意の整数)という条件を満足する。ただ、識別コードCが、二次元符号化テーブルから選択されたコードとなっており、実データDのビット長bを示すだけでなく、ランレングス値Rを示すコードになっている。このランレングス値Rは、実データDに先行して配置される数値0の数を示している。
図23は、図20に示す数値データ列に対して、図22に示す二次元符号化テーブルを用いた符号化方法を実施するプロセスを示す図である。図23の上段に示す表は、図21の上段に示す表とほぼ同じであるが、識別コードCの欄に示された個々の識別コードが、図22に示す二次元符号化テーブルに掲載されている識別コードになっている。また、Uのビット長の欄の代わりに、カウント値Jなる欄を設けている。ここで、カウント値Jは、ゼロのランレングス値を計数するための変数であり、初期値は0である。
この図23の上段に示す表において、データ番号1の行には、数値データ「28」(8ビット固定長による2進表記は「00011100」)」について、実データ「11100」と、この実データのビット長「5」に対応する識別コード「C05」と、カウント値「J=0」が示されている。カウント値Jは、数値データDが0であった場合には、+1だけカウントアップされ(但し、最大値Rmaxに達していた場合には、カウントアップされない)、数値データDが0でなかった場合には、識別コードCを選択した後に0にリセットされる。データ番号1の数値データは「28」であるため、識別コード「C05」の選択後に、J=0にリセットされる。識別コード「C05」は、図22に示す二次元符号化テーブルにおいて、「ビット長b=5」と「ランレングス値0」との組み合わせに対応する識別コードである。ここで、「ビット長b=5」は、実データ「11100」のビット長を示すものであり、「ランレングス値0」は、その時点のカウント値Jを示すものである。
次のデータ番号2の行には、数値データ「251」(8ビット固定長による2進表記は「11111011」)」について、実データ「11111011」と、この実データのビット長「8」に対応する識別コード「C08」と、カウント値「J=0」が示されている。データ番号2の数値データは「251」であるため、識別コード「C08」の選択後に、J=0にリセットされる。識別コード「C08」は、図22に示す二次元符号化テーブルにおいて、「ビット長b=8」と「ランレングス値0」との組み合わせに対応する識別コードである。ここで、「ビット長b=8」は、実データ「11111011」のビット長を示すものであり、「ランレングス値0」は、その時点のカウント値Jを示すものである。
続くデータ番号3の行には、数値データ「1」(8ビット固定長による2進表記は「00000001」)」について、実データ「1」と、この実データのビット長「1」に対応する識別コード「C01」と、カウント値「J=0」が示されている。データ番号3の数値データは「1」であるため、識別コード「C01」の選択後に、J=0にリセットされる。識別コード「C01」は、図22に示す二次元符号化テーブルにおいて、「ビット長b=1」と「ランレングス値0」との組み合わせに対応する識別コードである。ここで、「ビット長b=1」は、実データ「1」のビット長を示すものであり、「ランレングス値0」は、その時点のカウント値Jを示すものである。
一方、データ番号4〜9の行には、識別コードCおよび実データDの記載はなく、斜線が引かれている。これは、数値データ「0」については、基本的に、単位符号データUが作成されないためである。このように、数値データが0であった場合には、カウント値Jのカウントアップのみが行われる(Jが最大値Rmax に達していた場合を除く)。こうして、データ番号4〜9の行では、カウント値Jの欄のみが1〜6へと順次更新されている。
続くデータ番号10の行には、数値データ「13」(8ビット固定長による2進表記は「00001101」)」について、実データ「1101」と、この実データのビット長「4」に対応する識別コード「C64」と、カウント値「J=0」が示されている。データ番号10の数値データは「13」であるため、識別コード「C64」の選択後に、J=0にリセットされる。識別コード「C64」は、図22に示す二次元符号化テーブルにおいて、「ビット長b=4」と「ランレングス値6」との組み合わせに対応する識別コードである。ここで、「ビット長b=4」は、実データ「1101」のビット長を示すものであり、「ランレングス値6」は、その時点(リセット前)のカウント値Jを示すものである。
次のデータ番号11の行には、数値データ「3」(8ビット固定長による2進表記は「00000011」)」について、実データ「11」と、この実データのビット長「2」に対応する識別コード「C02」と、カウント値「J=0」が示されている。データ番号11の数値データは「3」であるため、識別コード「C02」の選択後に、J=0にリセットされる。識別コード「C02」は、図22に示す二次元符号化テーブルにおいて、「ビット長b=2」と「ランレングス値0」との組み合わせに対応する識別コードである。ここで、「ビット長b=2」は、実データ「11」のビット長を示すものであり、「ランレングス値0」は、その時点のカウント値Jを示すものである。
このようなプロセスに基づいて作成された符号化データ列が、図23の下段に示されている。図示のとおり、データ番号4〜9の数値0についての単位符号データU4〜U9は作成されないため、符号化データ列は、単位符号データU1,U2,U3,U10,U11,... によって構成されている。ここで、単位符号データU1,U2,U3は、それぞれ元の数値データ28,251,1に対応し、単位符号データU10は、元の数値データ0,0,0,0,0,0,13に対応し、単位符号データU11は、元の数値データ3に対応することになる。結局、単位符号データU10は、データ番号10の数値「13」のみならず、それに先行する6個の0を符号化したデータということができる。すなわち、単位符号データU10の実データ「1101」の部分が数値「13」を示し、識別コード「C64」の部分が6個の0を示していることになる。
このように、多数の0が連続して現れる可能性が高い数値データ列については、二次元符号化テーブルを利用した符号化を行えば、1つの単位符号データによって、多数の0を表現することができるため、データ容量を大幅に削減する効果が得られる。しかも、二次元符号化テーブルとして、上述した2つの条件を満足するテーブルを用いるようにすれば、これまで述べてきた一次元符号化テーブルを用いる実施形態と同様に、復号化を行う際に並列処理が可能になるという本発明に特有のメリットも得られる。
ところで、以上述べた実施形態の場合、0を示す数値データの情報は、基本的に、後続する0でない数値データについて作成された単位符号データの識別コードにランレングス値として盛り込まれることになる。したがって、基本的には、0を示す数値データについて実データを作成する必要はなく、実データのビット長bの最小値は1になる。そうすると、図22に示す二次元符号化テーブルのビット長「b=0」の欄は不要になるはずである。ただ、実用上は、例外的な処理が必要になる。以下、この点について説明しよう。
第1の例外処理は、予め設定されたランレングス値の最大値Rmax を越えて、0を示す数値データが連続して出現した場合である。たとえば、図22に示す二次元符号化テーブルの場合、ランレングス値Rの最大値Rmax =8に設定しているため、数値0が9以上連続するようなランレングスを取り扱うことができない。もちろん、最大値Rmax を非常に大きな値に設定できれば問題は解決するが、最大値Rmax を大きくすればするほど、必要な識別コードの数も増え、個々の識別コードのビット長も増大することになり好ましくない。したがって、実用上、最大値Rmaxは、ある程度の値に抑制せざるを得ない。
そこで、最大値Rmax を越えて、0を示す数値データが連続して出現した場合には、次のような例外処理を行うことにする。たとえば、Rmax =8の場合を考えよう。この場合、連続して8個の0が出現した後に、9個目に0でない数値Xがきたときには、これまで述べたとおりの処理が可能である。すなわち、8個目の0がきたときに、カウント値J=8となり、9個目の数値Xについての単位符号データを作成する際に、識別コードにランレングス値R=8という情報を盛り込めばよい。ところが、9個目も0であった場合には、これ以上カウント値Jを増やすことはできないので、この9個目の0については、例外的に単位符号データを作成するのである。この場合、実データは、ビット長が0である仮想のビット列になり、作成される単位符号データは、実質的に、識別コードのみから構成されるデータになる。
このような例外処理を行うためには、図22に示す二次元符号化テーブルにおいて、「ビット長b=0」と「ランレングス値8」との組み合わせに対応する識別コード「C80」を用意しておく必要がある。このような例外処理に用いる識別コード「C80」は、一般的に「ZRL(Zero Run Length)」と呼ばれている。
第2の例外処理は、必ずしも必要な処理ではないが、入力した数値データ列について、末尾までに後続する数値データがすべて0であるという「ゼロ永続状態」が確認された場合に、この「ゼロ永続状態」を示す特別な「終端コード」を識別コードとして利用する処理である。このような「終端コード」は、一般的に「EOB(End Of Block)」と呼ばれており、便宜的に、二次元符号化テーブルにおいて、「ビット長b=0」と「ランレングス値0」との組み合わせに対応する識別コードとして定義される。したがって、図22に示す二次元符号化テーブルにおける識別コード「C00」は、この「終端コードEOB」として利用することができる。
前述したとおり、図22に示す二次元符号化テーブルにおいて、「ビット長b=0」の欄における「C00」および「C80」以外の識別コードC10,C20,C30,... ,C70は、実際には定義する必要はない。
<<< §10.二次元符号化テーブルを利用する場合の変更点 >>>
さて、§9では、二次元符号化テーブルを利用する基本原理を述べたが、ここでは、この二次元符号化テーブルを利用する場合に、これまで述べてきた実施形態に対して施す必要がある変更点を述べる。
<§5で述べた符号化方法についての変更点>
二次元符号化テーブルを利用した場合であっても、固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化する符号化方法である点には何ら変わりはない。そして、特定の数値データを可変長のビット列を用いて表現した実データを生成し、この実データの先頭に、少なくとも当該実データのビット長を示す情報をもった識別コードを付加することにより、少なくとも前記特定の数値データ自身を示す情報をもった単位符号データを生成し、生成された複数の単位符号データを順番に並べて符号化データ列として出力する処理が行われる点も同じである。ただ、識別コードには、実データのビット長を示す情報だけでなく、先行して配置される数値0のランレングス値を示す情報も含まれることになる。このため、生成される単位符号データには、実データとして特定の数値データ自身を示す情報が含まれるだけでなく、先行して配置される数値0の情報も含まれることになる。
最も大きな相違点は、当然ながら、図9(b) に示すような一次元符号化テーブルの代わりに、図22に示すような二次元符号化テーブルを用いる点である。この二次元符号化テーブルは、個々のビット長と個々のランレングス値との組み合わせに対応する固有の識別コードを示すテーブルになる。もちろん、一次元符号化テーブルも、二次元符号化テーブルも、少なくとも「所定範囲内の複数通りのビット長と、当該ビット長に対応する識別コードとの対応関係」を示す符号化テーブルである点では共通する。また、これらのテーブルが、「条件1:当該テーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をaとしたときに、先頭からaビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在しない」と「条件2:当該着目識別コードに対応するビット長をbとしたときに、所定の基準ビット長N(但し、Nは2以上の整数)に対して『a+b=k×N』(但し、kは任意の整数)である。」という2つの条件を満たすテーブルであるという点も共通する。
図24は、この二次元符号化テーブルを用いた符号化方法の基本手順を示す流れ図である。この図24に示す流れ図の各段階は、図14に示す流れ図の各段階とほぼ同じである。変更点は、ステップS12のテーブル入力段階で、二次元符号化テーブルが入力される点と、ステップS13のデータ抽出段階の後に、ステップS13A,ステップS13B,ステップS13Cが加えられた点と、ステップS15において、二次元符号化テーブルを参照して識別コードを選択し、選択後にカウント値J=0にリセットする点だけである。以下、これら変更点を説明する。
まず、ステップS12では、予め定められた所定の最大ランレングス値をRmaxとしたときに、実データを表現するのに十分な所定範囲内の複数通りのビット長と、Rmax までの範囲内の複数通りのランレングス値と、の各組み合わせについて、個々の組み合わせと、当該組み合わせに対応する固有の識別コードと、の対応関係を示す二次元符号化テーブルが入力される。もちろん、このテーブルは、上述した2つの条件を満足するテーブルになっている。
そして、この時点において、カウント値Jは初期値0になっているものとする。次に、ステップS13のデータ抽出段階で数値データの抽出が行われたら、ステップS13Aにおいて、抽出された数値データが0を示すデータであるか否かが判定される。ここで、抽出した数値データが0を示すデータであった場合は、ステップS13Bへと進み、これまでのカウント値Jが最大値Rmaxに達しているか否かが判定される。カウント値が最大値Rmaxに達していない場合には、ステップS13Cへと進み、0を示す数値データが連続して抽出された回数をランレングス値Rとしてカウントするランレングス値カウント段階が実行される。具体的には、このステップS13Cにおいて、カウント値Jを1だけ増加させる処理が行われ、再び、ステップS13のデータ抽出段階が実行される。結局、最大値Rmaxに達しない限り、数値0が抽出されるたびに、ステップS13Cで0の抽出回数が計数されることになる。
一方、抽出した数値データが0を示すデータではなかった場合、ステップS13AからステップS14へと進み、実データの生成が行われる。この実データの生成処理は、§4で述べたとおりである。たとえば、符号付きの数値データを取り扱う場合、抽出した数値データが正の値を示すデータである場合には、当該数値データを示す実データとして先頭に0を含まない可変長のビット列を生成し、抽出した数値データが負の値を示すデータである場合には、当該数値データを示す実データとして先頭に1を含まない可変長のビット列を生成する。
なお、抽出した数値データが0を示すデータであり、ステップS13Bにおいて、カウント値Jが最大値Rmaxに達していたと判断された場合にも、前述した例外処理として、ステップS14の実データ生成段階が行われる。この場合、数値データは0であるから、ビット長が0である仮想のビット列が実データとして生成されることになる(実際には、ビット列の生成はない)。
さて、ステップS12では、二次元符号化テーブルが入力されているので、ステップS15の識別コード選択段階では、この二次元符号化テーブルを参照して、識別コードの選択が行われる。具体的には、ステップS14で生成された実データのビット長bと、当該実データが生成された時のランレングス値R(カウント値J)と、の組み合わせに対応する識別コードを選択することになる。そして、この識別コードの選択の後に、カウント値J=0にリセットする処理が行われる。要するに、識別コードが選択され、単位符号データが生成されることになるたびに、カウント値Jは0にリセットされる。
なお、ステップS13Bにおいて、カウント値Jが最大値Rmaxに達していたと判断され、ステップS14で実データが生成された場合、当該実データのビット長は0であり、その時点でのカウンタ値J=Rmaxであるから、ステップS15の識別コード選択段階では、§9で説明したとおり、例外処理用の特別な識別コード「ZRL」(図22に示す識別コード「C80」)が選択されることになる。
最後に、ステップS17において、全データについての処理が完了したと判断されるまで、ステップS13へと戻る処理が行われる。したがって、ステップS13のデータ抽出段階が、入力した数値データ列を構成する数値データのそれぞれについて繰り返し実行されることになり、更に、ステップS13Cのランレングス値カウント段階、ステップS14の実データ生成段階、ステップS15の識別コード選択段階およびステップS16の単位符号データ生成段階が、必要に応じて繰り返し実行される。
なお、§9で説明したとおり、「抽出対象となる数値データを含めて、数値データ列の末尾までに後続する数値データがすべて0であるというゼロ永続状態」であった場合に、ゼロ永続状態を示す「終端コードEOB」を例外的な識別コードとして用いる方法を採る場合には、ステップS13のデータ抽出段階で、数値データを抽出する際に、「抽出対象となる数値データを含めて、数値データ列の末尾までに後続する数値データがすべて0であるというゼロ永続状態」か否かを調べる調査処理を実行し、当該調査処理によりゼロ永続状態であることが確認された場合には、そのままステップS14の実データ生成段階へと進み、ビット長が0である仮想のビット列を実データとして生成し、続くステップS15の識別コード選択段階では、ゼロ永続状態を示す「終端コードEOB」を例外処理用の識別コードとして選択すればよい。
<§6で述べた復号化方法についての変更点>
二次元符号化テーブルを利用した場合であっても、「少なくとも所定のビット長を示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配したデータであって、全長が所定の基準ビット長N(但し、Nは2以上の整数)の整数倍になるように設定された単位符号データ」を、複数組並べることにより構成された符号化データ列について、少なくとも個々の実データに対応する数値データを復元する復号化方法、である点には何ら変わりはない。ただ、数値0をランレングス値として表現した符号化データ列を対象とした復号化が行われる点が若干異なることになる。
したがって、二次元符号化テーブルを利用した復号化方法は、「所定のビット長と所定のランレングス値との組み合わせを示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配した構造を有し、0を示す数値データを当該ランレングス値に相当する回数だけ羅列した後に実データに対応する数値データを並べたデータ列を示し、全長が所定の基準ビット長N(但し、Nは2以上の整数)の整数倍になるように設定された単位符号データ(最大ビット長Umax)」を、複数組並べることにより構成された符号化データ列について、0を示す数値データおよび個々の実データを並べてなる元のデータ列を復元する方法と言うことができる。
この復号化方法の手順は、基本的には、§6で述べた図17の流れ図に示された手順と同じである。ただ、ステップS22のテーブル入力段階では、図9(b) に示すような一次元符号化テーブルの代わりに、図22に示すような二次元符号化テーブルが入力される。
また、ステップS24の復号処理段階も若干異なる。すなわち、M台の復号処理ユニットによる並列処理により、二次元符号化テーブルを参照しながら、それぞれ分配された部分データについて、0を示す数値データをランレングス値に相当する回数だけ羅列した後に実データに対応する数値データを並べることにより、元のデータ列を復元する復号処理が行われることになる。そして、ステップS25のデータ編成段階では、このM台の復号処理ユニットによる復号処理の結果を取捨選択して、0を示す数値データおよび個々の実データに対応する数値データを並べた復号化データ列を生成する処理が行われる。
なお、ステップS24の復号処理段階では、例外処理用の特別な識別コード「ZRL」や「終端コードEOB」が認識された場合には、当該識別コードに応じた例外処理を行う必要がある。すなわち、識別コード「ZRL」が認識された場合には、二次元符号化テーブルで定義されているランレングスの最大値をRmax としたときに、「Rmax +1個分」の数値0を並べる処理を行う必要がある。また、「終端コードEOB」が認識された場合には、予め定められた所定のデータ長に達するまで、数値0を並べる処理を行う必要がある。
<§7で述べた符号化装置についての変更点>
§7では、図18を参照しながら、本発明に係る符号化装置の基本構成を述べた。二次元符号化テーブルを利用する符号化装置の基本構成も、図18のブロック図に示す構成とほぼ同様である。ただ、テーブル格納部120には、当然ながら、個々のビット長と個々のランレングス値との組み合わせに対応する固有の識別コードを示す二次元符号化テーブルが格納される。この二次元符号化テーブルは、予め定められた所定の最大ランレングス値をRmaxとしたときに、実データを表現するのに十分な所定範囲内の複数通りのビット長と、Rmax までの範囲内の複数通りのランレングス値と、の各組み合わせについて、個々の組み合わせと、当該組み合わせに対応する固有の識別コードと、の対応関係を示すテーブルである。
また、実データ生成部140で行われる処理も若干変わってくる。たとえば、符号付きの数値データを取り扱う場合であれば、抽出した数値データが0を示すデータであり、かつ、これまでのカウント値が最大値Rmaxに達していない場合には、0を示す数値データが連続して抽出された回数をランレングス値としてカウントする処理を行い、抽出した数値データが正の値を示すデータである場合には、当該数値データを示す実データとして先頭に0を含まない可変長のビット列を生成する処理を行い、抽出した数値データが負の値を示すデータである場合には、当該数値データを示す実データとして先頭に1を含まない可変長のビット列を生成する処理を行い、抽出した数値データが0を示すデータであり、かつ、カウント値が最大値Rmaxに達していた場合には、ビット長が0である仮想のビット列を実データとして生成する処理を行えばよい。
一方、識別コード選択部150は、テーブル格納部120に格納されている二次元符号化テーブルを参照して、生成された実データのビット長と、当該実データが生成された時のランレングス値と、の組み合わせに対応する識別コードを選択し、選択後にカウント値を0にリセットする処理を行うようにする。このとき、「ビット長b=0」と「ランレングス値R=Rmax」との組み合わせについては、上述した例外処理用の特別な識別コード「ZRL」を選択するようにする。
なお、前述した「終端コードEOB」を用いる場合には、データ抽出部130が、数値データを抽出する際に、「抽出対象となる数値データを含めて、数値データ列の末尾までに後続する数値データがすべて0であるというゼロ永続状態」か否かを調べる調査処理を実行するようにし、実データ生成部140が、この調査処理によりゼロ永続状態であることが確認された場合に、ビット長が0である仮想のビット列を実データとして生成するようにし、識別コード選択部150が、この調査処理によりゼロ永続状態であることが確認された場合に、ゼロ永続状態を示す「終端コードEOB」を識別コードとして選択するようにすればよい。
<§8で述べた復号化装置についての変更点>
§8では、図19を参照しながら、本発明に係る復号化装置の基本構成を述べた。二次元符号化テーブルを利用する復号化装置の基本構成も、図19のブロック図に示す構成とほぼ同様である。ただ、テーブル格納部220には、当然ながら、個々のビット長と個々のランレングス値との組み合わせに対応する固有の識別コードを示す二次元符号化テーブルが格納される。
そして、この復号化装置は、「所定のビット長と所定のランレングス値との組み合わせを示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配した構造を有し、0を示す数値データを当該ランレングス値に相当する回数だけ羅列した後に前記実データに対応する数値データを並べたデータ列を示し、全長が所定の基準ビット長N(但し、Nは2以上の整数)の整数倍になるように設定された単位符号データ(最大ビット長Umax)」を、複数組並べることにより構成された符号化データ列について、0を示す数値データおよび個々の実データを並べてなる元のデータ列を復元する機能をもった装置ということになる。
また、この装置におけるM台の復号処理ユニット240(1)〜240(M)は、テーブル格納部220に格納されている二次元符号化テーブルを参照しながら、それぞれ分配された部分データについて、0を示す数値データをランレングス値に相当する回数だけ羅列した後に実データに対応する数値データを並べることにより、元のデータ列を復元する復号処理を行うことになる。そして、データ編成部250は、このM台の復号処理ユニット240(1)〜240(M)による復号処理の結果を取捨選択して、0を示す数値データおよび個々の実データに対応する数値データを並べた復号化データ列を生成する。
なお、復号処理ユニット240(1)〜240(M)には、例外処理用の特別な識別コード「ZRL」や「終端コードEOB」が認識された場合には、当該識別コードに応じた例外処理を行う機能をもたせておく。すなわち、識別コード「ZRL」が認識された場合には、二次元符号化テーブルで定義されているランレングスの最大値をRmax としたときに、「Rmax +1個分」の数値0を並べる処理を行うようにする。また、「終端コードEOB」が認識された場合には、これをデータ編成部250に報告するようにし、データ編成部250では、予め定められた所定のデータ長(たとえば、後述するJPEG画像データのAC成分の場合であれば、合計63個の数値データ)に達するまで、数値0を並べる処理を行い、当該符号化データ列Sについての復号化の処理を打ち切るようにする。
<符号化データファイルについての変更点>
図15には、本発明に係る符号化方法によって作成される符号化データファイルFの構造例を示したが、二次元符号化テーブルを利用した符号化を行った場合、このデータファイルFの内容も若干異なることになる。すなわち、データファイルF内には、「所定のビット長と所定のランレングス値との組み合わせを示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配した構造を有し、0を示す数値データを当該ランレングス値に相当する回数だけ羅列した後に前記実データに対応する数値データを並べたデータ列を示し、全長が所定の基準ビット長N(但し、Nは2以上の整数)の整数倍になるように設定された、互いに長さの異なる複数通りの単位符号データ(最大ビット長Umax)」を、並べることにより構成されるビット羅列データと、個々の識別コードに対応する特定のビット長と特定のランレングス値との組み合わせを示す二次元符号化テーブルTと、が収容されることになる。
ここで、二次元符号化テーブルTは、数値データ列を可変長のビット列を用いて符号化する符号化方法に用いるテーブルであって、所定範囲内の複数通りのビット長と所定範囲内の複数通りのランレングス値とについて、個々のビット長と個々のランレングス値との各組み合わせと、当該組み合わせに対応する固有の識別コードと、の対応関係が示されており、このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をaとしたときに、先頭からaビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在せず、かつ、当該着目識別コードに対応するビット長をbとしたときに、所定の基準ビット長N(但し、Nは2以上の整数)に対して「a+b=k×N」(但し、kは任意の整数)なる条件を満足するテーブルということになる。
一方、図16には、本発明に係る符号化方法によって作成される符号化データファイルFの別な構造例を示したが、二次元符号化テーブルを利用した符号化を行った場合、このデータファイルFの内容も若干異なることになる。すなわち、データファイルF内には、「所定のビット長と所定のランレングス値との組み合わせを示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配した構造を有し、0を示す数値データを当該ランレングス値に相当する回数だけ羅列した後に前記実データに対応する数値データを並べたデータ列を示し、全長が所定の基準ビット長N(但し、Nは2以上の整数)の整数倍になるように設定された、互いに長さの異なる複数通りの単位符号データ(最大ビット長Umax)」を、並べることにより構成されるビット羅列データと、個々の識別コードに対応する特定のビット長と特定のランレングス値との組み合わせを示す二次元符号化テーブルを特定するテーブル特定情報Hと、が収容されることになる。
<ゼロ以外のランレングスの取り扱い>
これまで述べた例は、いずれも数値データ列に含まれる連続した0をランレングスとして表現する例であった。一般に、画像データには、連続した0が含まれることが多く、特に、後述するJPEG形式の画像データの場合、連続した多数の0が含まれる。ただ、本発明に係る二次元符号化テーブルを利用した符号化方法は、必ずしも数値0をランレングスとして表現する方法に限定されるものではなく、任意の数値Xをランレングスとして表現する場合にも適用可能である。
たとえば、符号化の対象となる数値データ列に、特定の数値Xの連続部分が多く含まれている場合、数値0の代わりに、当該特定の数値Xをランレングスとして表現した符号化を行うと効率的である。この場合、数値0については、通常の表現(ランレングスではなく、実データとしての表現)を行い、数値Xについては、連続して出現する回数をカウントして、ランレングス値として符号化を行うようにすればよい。
また、§9で述べた「0をランレングスとして表現する方法」をそのまま利用して、実質的に、任意の数値Xをランレングスとして表現することも可能である。具体的には、符号化の対象となる一群の数値データすべてについて、予めXを減算する処理を施した後に、§9で述べた方法で符号化を行えばよい。また、復号化を行う際には、§9で述べてきた方法で復号化を行った後に、Xを加算する処理を行えばよい。
たとえば、数値「7」が連続して続くことが多いデータを符号化する場合、まず、全データからそれぞれ「7」を減算する処理を行う。この処理により、数値「7」は数値「0」に変換されるので、数値「7」の連続部分は数値「0」の連続部分に変換されることになる。したがって、§9で述べた方法で符号化を行えば、数値「0」の連続部分(元は数値「7」の連続部分)は、ランレングスによって表現される。一方、復号化を行う際には、§9で述べてきた方法で得られた復号化データに対して、それぞれ「7」を加算する処理が行われるので、元通りの正しい数値の復元が可能になる。
もちろん、符号化の際に、予めXを加算する処理を行い、復号化の際に、Xを減算する処理を行うようにしてもかまわない。なお、減算や加算を行うと、ビット数が増えることになるので(たとえば、−127〜+127の範囲内の数値であれば、8ビットで表現できるが(1の補数表現)、「7」を減算すると、−134〜+120の範囲内の数値となるため、9ビット必要になる)、これを避けるには、元の範囲の下限からはみ出した数値をローテーションして上限へまわし、元の範囲の上限からはみ出した数値をローテーションして下限へまわす処理を行えばよい(たとえば、上例の場合、−134は+121に置き換えられ、−133は+122に置き換えられ、... 、−128は+127に置き換えられ、数値範囲は元どおり−127〜+127になる)。
<<< §11.JPEG画像への適用 >>>
ここでは、本発明に係る符号化/復号化方法をJPEG画像へ適用した実施形態を説明する。JPEG方式は、静止画像データを圧縮する方式のひとつとして、コンピュータやデジタルカメラで広く利用されており、この方式で圧縮された画像は、一般にJPEG画像と呼ばれている。
図25は、一般的なJPEG画像用の圧縮・伸張処理装置の構成を示すブロック図である。JPEG方式の圧縮を行うには、まず、1枚の画像を8×8画素という固定サイズのブロックに分割し、この8×8画素ブロックの単位で処理を行うことになる。
JPEG画像用の圧縮処理装置300は、図示のとおり、DCT手段310、量子化手段320、符号化手段330によって構成されている。DCT手段310は、8×8画素ブロックのデータXに対して、離散コサイン変換(DCT: Discrete Cosine Transform)を用いて、空間領域から周波数領域へ変換する処理を行う。続いて、量子化手段320によって情報量の削減を行い、更に、符号化手段330によってデータ圧縮のための符号化を行うことにより、圧縮データYを得る。
一方、JPEG画像用の伸張処理装置400は、図示のとおり、復号化手段410、逆量子化手段420、逆DCT手段430によって構成されている。これらの各手段は、圧縮処理装置300における符号化手段330、量子化手段320、DCT手段310とは逆の処理を行う機能を有している。したがって、圧縮データYに対して、圧縮時とは逆のプロセスが実行され、元の8×8画素ブロックのデータXが得られる。
このようなJPEG画像の圧縮/伸張処理を行う装置における符号化手段330および復号化手段410の部分に本発明を適用することが可能である。以下、具体的な適用例を簡単に説明する。
図25に示す量子化手段320の量子化処理が完了すると、量子化後の8×8画素ブロックを構成する全64画素のうち左上の1画素はDC成分の画素値をもち、残りの63画素はAC成分の画素値をもつことになる。図26は、このような量子化後の8×8画素ブロックを構成する画素配列を示す平面図である。この画素配列を構成する個々の画素のもつ値は、DCT処理後の画素値であり、もとの画像の画素値ではない。したがって、正確に言えば、「画素値」ではなく「DCT係数」と呼ぶべき値である。ただ、以下の説明では、便宜上、これらの値も「画素値」と呼ぶことにする。図に「DC」と記載した画素が、DC成分の画素値をもつ画素であり、その他の63画素がAC成分の画素値をもつ画素になる。AC成分は画素値の周波数成分を示す情報であり、DC成分は8×8画素ブロックの画素値の平均を示す情報になる。
このような8×8画素ブロックを構成するデータに対して符号化を行う際には、図示のとおり、AC成分についてジグザグスキャン処理が行われる。すなわち、AC成分の画素値をもつ63画素について、図に矢印で示す順番で並び替えが行われる。これは、DCT手段310による離散コサイン変換を行うと、低い周波数成分ほどブロックの左上近傍に集まり、高い周波数成分ほどブロックの右下近傍に集まる性質があるためである。図示のようなジグザグスキャン処理による並べ替えを行うと、AC成分の画素値をもつ63画素は、低周波成分から高周波成分へと順に並べ替えられる。
上述の処理を、具体的な実例を挙げて示そう。図27は、JPEG方式の圧縮処理の対象となる量子化後の画素ブロックの画素値分布の一例を示す平面図である。ここで、左上画素の画素値「20」がDC成分を示す値であり、残りの63画素の各画素値がAC成分を示す値になる。図28は、図27に示す画素ブロックから抽出したDC成分およびAC成分の数値データを示す図である。DC成分の数値データは、図28(a) に示すように「20」のみであり、符号ビットを含めて12ビットのデータで表現されることになっている。一方、AC成分の数値データは、ジグザグスキャン処理による並べ替えの結果、図28(b) に示すように、63個の数値データ列になり、それぞれ符号ビットを含めて11ビットのデータで表現されることになっている。
DC成分の数値データおよびAC成分の数値データは、いずれも符号をもった数値となる(たとえば、図示の例では、数値「−2」が負のデータになっている)。図では、説明の便宜上、各数値データを10進表記で示しているが、実際には、DC成分の数値データは、符号ビットを除くと11ビット固定長のビット列として与えられ、AC成分の数値データは、符号ビットを除くと10ビット固定長のビット列として与えられる。
ここで、図28(a) に示すDC成分の数値データは、1ブロックについて1つのみ抽出されるデータであるため、可変長ビット列への符号化を行う際には、一次元符号化テーブルを用いれば十分である。これに対して、図28(b) に示すAC成分の数値データは、1ブロックについて63個の連続したデータとして得られ、しかも0が連続して出現する可能性が高い。特に高周波成分を示す後半には0が続く可能性が高い。したがって、このAC成分の数値データについて可変長ビット列への符号化を行う際には、二次元符号化テーブルを用いるのが好ましい。
したがって、図25に示すJPEG画像用圧縮処理装置300の符号化手段330としては、DC成分の数値データの符号化を行う部分については、これまで述べてきた一次元符号化テーブルを用いる符号化装置を採用し、AC成分の数値データの符号化を行う部分については、これまで述べてきた二次元符号化テーブルを用いる符号化装置を採用すればよい。同様に、JPEG画像用伸張処理装置400の復号化手段410としては、DC成分の数値データの復号化を行う部分については、これまで述べてきた一次元符号化テーブルを用いる復号化装置を採用し、AC成分の数値データの復号化を行う部分については、これまで述べてきた二次元符号化テーブルを用いる復号化装置を採用すればよい。
図29は、DC成分の数値データに対する符号化に用いるDC成分用符号化テーブル(一次元符号化テーブル)の一例を示す図である。図示のとおり、ビット長b=0〜11の範囲について、それぞれ識別コードCが定義されている。テーブルの右側の破線欄には、参考のため、各識別コードC自身のビット長aと、当該識別コードCを用いて作成される単位符号データUのビット長「a+b」とを示してある。図示のとおり、Uのビット長「a+b」は、4,8,12,16,20のいずれかに該当する。これは、N=4に設定したときに、「a+b=k×N」(但し、kは任意の整数)なる条件を満足することを示している。
もちろん、この符号化テーブルは、「このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をaとしたときに、先頭からaビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在しない」という可変長符号化テーブルに必要とされる条件も満足している。
図30は、図29に示すテーブルを利用して図28に示すDC成分を符号化した結果を示す図である。数値「20」について、冗長ビットを削除した実データDは「10100」になり、そのデータ長「5」に対応する識別コードCは、図29のテーブルを参照すると「010」になる。よって、DC成分の数値データ「20」は、図30に示すように、「01010100」なる8ビットの符号化データに変換されることになる。
一方、図31は、AC成分の数値データに対する符号化に用いるAC成分用符号化テーブル(二次元符号化テーブル)の一例を示す図である。図示のとおり、ビット長b=0〜10の範囲およびランレングス値R=0〜15の範囲の組み合わせについて、それぞれ識別コードCが定義されている。図22に示す二次元符号化テーブルでは、説明の便宜上、個々の識別コードを略記号C00〜C88で示したが、この図31に示すテーブルでは、個々の識別コードを実際のビット列で示してある。なお、ビット長b=0の欄の識別コード「0010」は、前述した例外処理用の「終端コードEOB」であり、識別コード「0101」は、前述した例外処理用の「ZRL」である。
もちろん、この図31に示すテーブルも、「このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をaとしたときに、先頭からaビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在しない」という可変長符号化テーブルに必要とされる条件を満足しており、更に、「当該着目識別コードに対応するビット長をbとしたときに、所定の基準ビット長N(但し、Nは2以上の整数)に対して『a+b=k×N』(但し、kは任意の整数)」という条件を満たしている。具体的には、N=4に設定されているため、単位符号データUのビット長は、4,8,12,16,20,24といった4の倍数になる。
図32は、図31に示すテーブルを利用して図28に示すAC成分を符号化するプロセスを示す図である。この図32に示す表の構成は、図23の上段に示す表の構成と同じであり、各数値データDについて、識別コードCおよび実データD(単位符号コードU)と、カウント値Jとが示されている。このカウント値Jは、ゼロのランレングス値を計数するための変数である。この表において、データ番号1〜63が付された63個の数値データDは、それぞれ図28(b) に示す63個のAC成分の数値データ(10ビット固定長のビット列)である。以下、この図32の表を上から順に見てゆこう。
まず、データ番号1の行には、数値データ「5」(10ビット固定長による2進表記は「0000000101」)」について、実データ「101」と、この実データのビット長「3」に対応する識別コード「01100」と、カウント値「J=0」が示されている。前述したとおり、カウント値Jは、数値データDが0であった場合には、+1だけカウントアップされ(但し、最大値Rmax =15に達していた場合には、カウントアップされない)、数値データDが0でなかった場合には、識別コードCを選択した後に0にリセットされる。データ番号1の数値データは「5」であるため、識別コード「01100」の選択後に、J=0にリセットされる。識別コード「01100」は、図31に示す二次元符号化テーブルにおいて、「ビット長b=3」と「ランレングス値0」との組み合わせに対応する識別コードである。ここで、「ビット長b=3」は、実データ「101」のビット長を示すものであり、「ランレングス値0」は、その時点のカウント値Jを示すものである。
次のデータ番号2の行では、数値データが「0」(10ビット固定長による2進表記は「0000000000」)」であるため、識別コードCの選択や実データDの作成は行われず、単位符号データUは作成されない。その代わりに、カウント値JがJ=1にカウントアップされる。同様に、データ番号3,4の行においても、カウント値JがそれぞれJ=2,J=3にカウントアップされる。
続くデータ番号5の行では、数値データが「37」(10ビット固定長による2進表記は「0000100101」)」であるため、実データ「100101」が作成される。この実データのビット長b=6と、その時点でのカウント値J=3に基づいて、図31のテーブルを参照することにより、対応する識別コード「1111011000」が選択され、カウント値はJ=0にリセットされる。
次のデータ番号6の行では、数値データが「0」であるため、識別コードCの選択や実データDの作成は行われず、単位符号データUは作成されない。その代わりに、カウント値JがJ=1にカウントアップされる。
続くデータ番号7の行では、数値データが「23」(10ビット固定長による2進表記は「0000010111」)」であるため、実データ「10111」が作成される。この実データのビット長b=5と、その時点でのカウント値J=1に基づいて、図31のテーブルを参照することにより、対応する識別コード「1011111」が選択され、カウント値はJ=0にリセットされる。
次のデータ番号8〜13の行では、いずれも数値データが「0」であるため、識別コードCの選択や実データDの作成は行われず、単位符号データUは作成されない。その代わりに、カウント値Jが順次カウントアップされ、最終的にJ=6になる。
続くデータ番号14の行では、数値データが「−2」(10ビット固定長による2進表記は「1111111101」)」であるため、実データ「01」が作成される。この実データのビット長b=2と、その時点でのカウント値J=6に基づいて、図31のテーブルを参照することにより、対応する識別コード「101100」が選択され、カウント値はJ=0にリセットされる。
次のデータ番号15〜16の行では、いずれも数値データが「0」であるため、識別コードCの選択や実データDの作成は行われず、単位符号データUは作成されない。その代わりに、カウント値Jが順次カウントアップされ、最終的にJ=2になる。
続くデータ番号17の行では、数値データが「9」(10ビット固定長による2進表記は「0000001001」)」であるため、実データ「1001」が作成される。この実データのビット長b=4と、その時点でのカウント値J=2に基づいて、図31のテーブルを参照することにより、対応する識別コード「11010000」が選択され、カウント値はJ=0にリセットされる。
次のデータ番号18の行では、数値データが「0」であるが、それ以降、データ番号63まで、数値データがすべて「0」である「ゼロ永続状態」が確認される。そこで、図31のテーブルを参照することにより、「終端コードEOB」に対応する識別コード「0010」が選択され、処理はそこで打ち切られる。
かくして、図28(b) に示す合計63個の固定長ビットからなるAC成分の数値データは、図33に示すような可変長ビットからなる符号化データ列に変換されることになる。ここで、図33の1〜6行目に示す各ビット列は、図32の表におけるそれぞれ第1,5,7,14,17,18行目の単位符号データUに対応するものであり、右端の括弧内の数字はそのデータ長を示している。実際に得られる符号化データ列は、この図33に示すビット列をすべて連結した合計60個のビットの列になる。もちろん、当該ビット列には何ら区切りはないが、各単位符号データのデータ長は、括弧内の数字に示すとおり、いずれも4の倍数となっており、本発明に特有の並列処理による復号化に適した形になっている。
図34は、図33に示す符号化データ列を、本発明に係る復号化方法を用いて、7台の復号処理ユニットによる並列処理で復号化する原理を示す図である。図には、7台のユニットQ1〜Q7に、それぞれ24ビットずつの部分データが分配された状態が示されている。各ユニットを示す符号Q1〜Q7の下に示した括弧書きの数値は、各ユニットに分配される部分データが、元のデータ(図33に示す全60ビットのデータ)の先頭から何ビット目に相当するかを示している。たとえば、ユニットQ1には、先頭から1〜24ビット目のデータが分配され、ユニットQ2には、先頭から5〜28ビット目のデータが分配されている。この例の場合、基準ビット長N=4に設定されているため、各ユニットには、4ビットずつずらした位置の部分データが分配されることになる。
図35は、こうして部分データの分配を受けた7台のユニットQ1〜Q7によって行われる復号処理プロセスを示す図である。復号処理は、図31に示すAC成分用符号テーブルを参照することによって行われる。
たとえば、ユニットQ1では、先頭から比較対象を1ビットずつ増やしながら、テーブルを参照して合致する識別コードを探索してゆくと、「01100」なるビット列が、「b=3,R=0」に対応する識別コードに合致する。そこで、後続する3ビット「101」の部分を実データとして認識し、数値「5」の復元に成功する。続く、「1111011000」なるビット列は、「b=6,R=3」に対応する識別コードに合致するので、後続する6ビット「100101」の部分を実データとして認識し、数値「37」の復元に成功する。また、ランレングス値R=3に応じて、数値「37」に先行して数値「0」を3回配置する処理が行われる。結局、処理結果は図の右側に示すように、[5][0][0][0][37],P1=24になる。
ユニットQ2では、「0101」なるビット列が、[ZRL]に対応する識別コードに合致する。この識別コードは、前述したとおり、例外処理を行うための識別コードであり、数値「0」を「Rmax +1個」だけ並べる処理を意味する。図31に示すテーブルの場合、Rmax =15であるから、結局、数値「0」を16個並べる処理が行われる。続いて、「1111011000」なるビット列が、「b=6,R=3」に対応する識別コードに合致する。そこで、後続する6ビット「100101」の部分を実データとして認識し、数値「37」の復元に成功する。また、ランレングス値R=3に応じて、数値「37」に先行して数値「0」を3回配置する処理が行われる。その後は、正常な復号処理を行うことはできず、処理結果は図の右側に示すように、[0]×16[0][0][0][37][ERR],P2=20になる。
ユニットQ3では、「1111011000」なるビット列が、「b=6,R=3」に対応する識別コードに合致する。そこで、後続する6ビット「100101」の部分を実データとして認識し、数値「37」の復元に成功する。また、ランレングス値R=3に応じて、数値「37」に先行して数値「0」を3回配置する処理が行われる。ただ、その後は、正常な復号処理を行うことはできず、処理結果は図の右側に示すように、[0][0][0][37][ERR],P3=16になる。
ユニットQ4では、「01100」なるビット列が、「b=3,R=0」に対応する識別コードに合致する。そこで、後続する3ビット「010」の部分を実データとして認識し、数値「−5」の復元に成功する。続く「0101」なるビット列は、[ZRL]に対応する識別コードに合致するので、数値「0」を16個並べる処理が行われる。次の「1011111」なるビット列は、「b=5,R=1」に対応する識別コードに合致する。そこで、後続する5ビット「10111」の部分を実データとして認識し、数値「23」の復元に成功する。また、ランレングス値R=1に応じて、数値「23」に先行して数値「0」を1回配置する処理が行われる。処理結果は図の右側に示すように、[−5][0]×16[0][23],P4=24になる。
ユニットQ5では、「0010」なるビット列が、「終端コードEOB」に対応する識別コードに合致する。この識別コードは、前述したとおり、ゼロ永続状態の例外処理を行うための識別コードであり、数値データ列の末尾まで、数値「0」を配置することを示している。したがって、この「終端コードEOB」を認識した段階で、ユニットQ5としては、処理を正常に終了する。よって、処理結果は図の右側に示すように、[EOB],P5=4になる。
ユニットQ6では、「0101」なるビット列が、[ZRL]に対応する識別コードに合致するので、まず、数値「0」を16個並べる処理が行われる。次の「1011111」なるビット列は、「b=5,R=1」に対応する識別コードに合致する。そこで、後続する5ビット「10111」の部分を実データとして認識し、数値「23」の復元に成功する。また、ランレングス値R=1に応じて、数値「23」に先行して数値「0」を1回配置する処理が行われる。更に続く「101100」なるビット列は、「b=2,R=6」に対応する識別コードに合致するので、後続する2ビット「01」の部分を実データとして認識し、数値「−2」の復元に成功する。また、ランレングス値R=6に応じて、数値「−2」に先行して数値「0」を6回配置する処理が行われる。処理結果は図の右側に示すように、[0]×16[0][23][0]×6[−2],P6=24になる。
ユニットQ7では、「1011111」なるビット列が、「b=5,R=1」に対応する識別コードに合致する。そこで、後続する5ビット「10111」の部分を実データとして認識し、数値「23」の復元に成功する。また、ランレングス値R=1に応じて、数値「23」に先行して数値「0」を1回配置する処理が行われる。更に続く「101100」なるビット列は、「b=2,R=6」に対応する識別コードに合致するので、後続する2ビット「01」の部分を実データとして認識し、数値「−2」の復元に成功する。また、ランレングス値R=6に応じて、数値「−2」に先行して数値「0」を6回配置する処理が行われる。ただ、その後は、正常な復号処理を行うことはできず、処理結果は図の右側に示すように、[0][23][0]×6[−2][ERR],P7=20になる。
以上が、7台のユニットQ1〜Q7の並列処理として実行される復号処理である。データ編成部は、これら各ユニットによる復号処理の結果を取捨選択して、復号化データ列を生成する。すなわち、まず、ユニットQ1を採択ユニットとして、このユニットQ1から報告される正常処理ビット長P1=24に基づいて、正常な復号処理が行われた最終ビットが第24ビット目であることを認識し、第25ビット目を先頭ビットとする部分データが分配された別なユニットQ7を新たな採択ユニットと決定する。更に、この採択ユニットQ7から報告される正常処理ビット長P7=20に基づいて、正常な復号処理が行われた最終ビットが第44ビット目であることを認識し、第45ビット目を先頭ビットとする部分データが分配された別なユニットを新たな採択ユニットとするよう試みるが、該当するユニットはみつからず、1回目の並列処理は完了する。
かくして、2台のユニットQ1,Q7が採択ユニットとして決定される。図35の右端に「◎」を付したユニットが採択ユニットであり、「×」を付したユニットが不採択ユニットである。データ編成部は、各採択ユニットQ1,Q7で正常に復号化が行われた数値データを収集し、これらの数値データを並べることにより復号化データ列を生成する。図示の例の場合、[5][0][0][0][37][0][23][0][0][0][0][0][0][−2]なる数値データ列が生成されることになる。
そして、この時点で、データ編成部からデータ分配部に対して、各採択ユニットQ1,Q7から報告された正常処理ビット長P1,P7の合計値「44」を、既復号化部を示す情報として報告する処理が行われる。これは、上述した1回目の並列処理により、図33に示す全60ビットからなるデータのうち、先頭から第44ビット目までの復号化が完了したことを示している。そこで、データ分配部は、2回目の並列処理のために、第45ビット目以降の未復号化部について、新たな分配処理を実行することになる。
<<< §12.ハフマン符号化テーブルの作成 >>>
既に図8で説明したとおり、ビット長bの出現頻度を考慮して作成した可変長符号化テーブルは、一般に、ハフマン符号化テーブルと呼ばれており、このハフマン符号化テーブルを用いた符号化は、ハフマン符号化と呼ばれている。ハフマン符号化テーブルでは、実データのビット長bの出現頻度が高いほど、より短いビット長aをもつ識別コードが対応づけられているため、ハフマン符号化により、データの圧縮効率を更に向上させることができる。このため、前述したJPEG画像用の圧縮処理など、実用上、多くのデータ圧縮処理において、ハフマン符号化テーブルが採用されている。
本発明の実施に用いる符号化テーブルは、必ずしもハフマン符号化テーブルである必要はないが、実用上は、データ圧縮効率を向上するために、ハフマン符号化テーブルを用いるのが好ましい。
本発明に係るハフマン符号化方法は、固定長ビットからなる数値データ列を、少なくともビット長と識別コードとの対応関係を示すハフマン符号化テーブルを用いて、可変長ビットからなる符号化データ列に符号化するハフマン符号化方法であり、その特徴は、ハフマン符号化テーブルとして、識別コード自身のビット長をaとし、当該識別コードに対応するビット長をbとしたときに、所定の基準ビット長N(但し、Nは2以上の整数)に対して「a+b=k×N」(但し、kは任意の整数)なる条件を満足するテーブルを用いる、という点になる。
また、本発明に係るハフマン復号化方法は、可変長ビットからなる符号化データ列を、演算処理装置が、少なくともビット長と識別コードとの対応関係を示すハフマン符号化テーブルを用いて、固定長ビットからなる数値データ列に復号化するハフマン復号化方法であり、その特徴は、ハフマン符号化テーブルとして、識別コード自身のビット長をaとし、当該識別コードに対応するビット長をbとしたときに、所定の基準ビット長N(但し、Nは2以上の整数)に対して「a+b=k×N」(但し、kは任意の整数)なる条件を満足するテーブルを用いる、という点になる。
既に§2で述べたとおり、上記条件は、任意の整数kによってある程度の自由度が確保できるため、上記条件を満足するハフマン符号化テーブルを作成することが可能になる。ハフマン符号化テーブルは、特定の数値データ列についてのビット長bの出現頻度を考慮して作成されたテーブルであるため、当該特定の数値データ列の符号化に特化したテーブルということができる。別言すれば、符号化の対象となる数値データ列が与えられることにより、はじめて定義できるテーブルである。したがって、本発明においてハフマン符号化テーブルを利用する場合、まず、既存の標準符号化テーブルを用意しておき、この標準符号化テーブルの内容を入れ替える処理を行うことによって、ハフマン符号化テーブルを作成するようにするのが好ましい。
図36は、本発明に係るハフマン符号化テーブルを用いる符号化装置の基本構成を示すブロック図である。この図36に示す符号化装置は、図18に示す符号化装置に、新たに頻度集計部180とテーブル修正部190とを付加したものである。
頻度集計部180は、データ格納部110に格納されている数値データ列Eについて、実データのビット長bの出現頻度を集計する機能を有している。実データのビット長bは、数値データの値に基づいて一義的に定まる値であるので、実際には、個々のビット長bごとに投票箱を設けておき、個々の数値データの値に対応する投票箱に投票する処理を行えば、出現頻度の集計値を求めることができる。
一方、テーブル修正部190は、テーブル格納部120に予め格納されていた既存の標準符号化テーブルについて、内容の入れ替えを行うことによる修正を施し、修正した符号化テーブルをテーブル格納部に格納する機能を有している。具体的には、既存の標準符号化テーブル内の、基準ビット長Nの整数倍の差をもつビット長b相互について、テーブルの内容を入れ替える処理を行うことにより、実データのビット長bの出現頻度が高いほど、より短いビット長aをもつ識別コードが対応づけられている修正した符号化テーブルを生成する処理を行う。
このテーブル修正部190によって、テーブル格納部120内に新たに格納されることになった修正された符号化テーブルは、実データのビット長bの出現頻度が高いほど、より短いビット長aをもつ識別コードが対応づけられているハフマン符号化テーブルとなっている。したがって、データ出力部170から出力される符号化データファイルFには、このハフマン符号化テーブルを用いて符号化された符号化データ列Sと、当該ハフマン符号化テーブル自身もしくは当該ハフマン符号化テーブルを特定するテーブル特定情報(たとえば、当該ハフマン符号化テーブルの所在を示すURLなど)とが収容されることになる。
ここでは、§11で述べたJPEG画像への適用例について、ハフマン符号化テーブルを作成した実例を以下に説明する。いま、DC成分用の標準符号化テーブルとして、テーブル格納部120内に、図29に示すようなテーブルが予め格納されていたものとしよう。一方、データ格納部110内には、多数の8×8画素ブロックの集合体からなるJPEG方式の圧縮対象となる画像データが格納されていたものとしよう。この場合、頻度集計部180によって、当該画像データを構成する個々の数値データに対する上述した頻度集計の処理が行われる。ここでは、たとえば、図37の表に示すような頻度集計結果が得られたものとしよう。
通常の可変長符号化テーブルの場合、この図37に示す頻度集計結果に基づいて、標準符号化テーブルの内容をソートすれば、ハフマン符号化テーブルが得られる。具体的には、最も高い出現頻度「220」の得票が得られたビット長b=5に対して、図29に示す標準符号化テーブル内の最も短い識別コード「00」を割り当てればよい。同様に、2番目に高い出現頻度「209」の得票が得られたビット長b=6に対しては、図29に示す標準符号化テーブル内の2番目に短い識別コード「011」もしくは「010」を割り当てればよい。要するに、ビット長bを出現頻度順にソートした後、短い識別コードから順番に割り当てる作業を行えばよい。
しかしながら、本発明に係る可変長符号化テーブルの場合、識別コード自身のビット長をaとし、当該識別コードに対応するビット長をbとしたときに、所定の基準ビット長N(但し、Nは2以上の整数)に対して「a+b=k×N」(但し、kは任意の整数)なる条件を満足する、という制約が課されるため、上述したようなソート作業を行うことはできない。ただ、§2でも述べたとおり、対応するビット長bの差がN(この例では、N=4)の整数倍となるような2つの識別コードを入れ替えても、「a+b=k×N」という条件は維持されたままになる。
たとえば、図37に太枠で示したビット長b=2とb=6とは、差が4であるから、図38に示すように、b=2に対応する識別コードとb=6に対応する識別コードとを入れ替えたとしても、上記条件は維持される。図29に示す標準符号化テーブルの場合、b=6に対応する識別コードは「101100」という6ビットのコードであったが、図38に示す入れ替えを行えば、b=6に対応する識別コードは「00」という2ビットのコードに修正される。すなわち、出現頻度が高いb=6に対してより短い識別コードが割り当てられたことになる。
このように、互いに入れ替えが可能な識別コードは、「対応するビット長bの差がNの整数倍となるような2つの識別コード」に限るという限定は課されるものの、このような限定された範囲内で、ビット長bを出現頻度順にソートした後、短い識別コードから順番に割り当てる作業を行えばよい。具体的には、たとえば、ビット長b=0,4,8の識別コードを1グループとして、出現頻度順にソートした後、これらに対応づけられていた識別コードを、ソート順に短くなるように割り当てなおす作業を行えばよい。同様の作業を、ビット長b=1,5,9のグループ、ビット長b=2,6,10のグループ、ビット長b=3,7,11のグループについても行うことにより、ハフマン符号化テーブルが得られる。
このように、本発明における「実データのビット長bの出現頻度が高いほど、より短いビット長aをもつ識別コードが対応づけられている」という条件は、あくまでも「識別コード自身のビット長をaとし、当該識別コードに対応するビット長をbとしたときに、所定の基準ビット長N(但し、Nは2以上の整数)に対して『a+b=k×N』(但し、kは任意の整数)となる」という条件を主条件としたときの副条件というべきものである。すなわち、当該副条件は、あくまでも上記主条件を優先した上で、付加的に満たされるべき従たる条件ということになる。このため、実際には、任意の2つの識別コードを比較すると、「対応する実データのビット長bの出現頻度が高いほど、より短い」という上記副条件が満足されていない場合もありうる。したがって、上述した入れ替え作業によって修正された符号化テーブルは、厳密な意味では「ハフマン符号化テーブル」とは言えないかもしれながい、ここでは便宜上、「ハフマン符号化テーブル」と呼ぶことにする。
もともと「ハフマン符号」は、出現頻度の順に「ハフマン符号木」と呼ばれる二分木を作成することにより定義される符号であり、厳密な意味では、「平均符号長が最小となり、かつ、出現頻度が高いほどより短い符号」と定義される。ただ、実用上は、様々な応用分野で様々なバリエーションが用いられるようになってきており、必ずしも「平均符号長が最小」という条件を満たさない符号や、必ずしも「出現頻度が高いほどより短い」という条件を満たさない符号まで拡張して、一般に「ハフマン符号」と呼ばれるようになってきている(たとえば、JPEG画像を取り扱う分野では、出現頻度を全く考慮しない符号についても「ハフマン符号」と呼ぶ場合がある)。
そこで、本願では、「テーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をaとしたときに、先頭からaビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在せず」かつ「符号化の対象となる数値データ列に含まれる実データのビット長bの出願頻度を考慮して、最終的に符号化されたデータの全ビット長ができるだけ短くなるような最適化処理が施された識別コード」を、「ハフマン符号」と定義することにする。上記最適化処理の最も簡単な例は、これまで例示したような「出現頻度を考慮した入れ替え作業」であるが、他の方法により最適化処理を行うことも可能である。たとえば、所定のアルゴリズムにより、上記主条件を満足する複数通りのハフマン符号化テーブルを生成し、これら複数通りのテーブルの中から、「符号化の対象となる数値データ列に含まれる実データのビット長bの出願頻度を考慮して、最終的に符号化されたデータの全ビット長が最短となるテーブル」を選択する処理も、上記最適化処理の一態様である。
続いて、図31に示すAC成分用の二次元符号化テーブルを標準符号化テーブルとして用い、この標準符号化テーブルに対して、出現頻度を考慮した入れ替えを行い、二次元ハフマン符号化テーブルを作成した例を示す。図39(a) ,(b) は、JPEG方式の圧縮対象となる画像データにおけるAC成分の数値データについての出現頻度を集計した結果である。ここでは、カラー画像を、輝度成分と色差成分とに分けて取り扱った例が示されており、図39(a) は、輝度成分を構成する画素についての集計結果であり、図39(b) は、色差成分を構成する画素についての集計結果である。
二次元符号化テーブルの場合、各識別コードは、「ビット長bとランレングス値Rとの組み合わせ」に対応づけられて決定されるので、「ビット長bの出現頻度」の代わりに、「ビット長bとランレングス値Rとの組み合わせの出現頻度」を考慮する必要がある。したがって、図39に示す頻度集計結果は、ゼロのランレングス表現を用いた符号化を行う前段階として、個々のランレングス値と実データのビット長とを予め決定した上で、「特定のビット長bと特定のランレングス値Rとの組み合わせ」を投票箱とした投票を行った結果として得られたものである。
図40に示す二次元符号化テーブルは、図31に示す標準符号化テーブルに対して、図39(a) に示す頻度集計結果を考慮した入れ替え作業を行うことによって得られた二次元ハフマン符号化テーブルであり、図41に示す二次元符号化テーブルは、図31に示す標準符号化テーブルに対して、図39(b) に示す頻度集計結果を考慮した入れ替え作業を行うことによって得られた二次元ハフマン符号化テーブルである。いずれも元になる標準符号化テーブルは同じものであるが、異なる頻度集計結果を考慮した入れ替え作業を行ったため、相互に異なるテーブルになっている。
図40のハフマン符号化テーブルは、輝度成分を構成する画素からなる数値データの符号化を行う際に用いられ、図41のハフマン符号化テーブルは、色差成分を構成する画素からなる数値データの符号化を行う際に用いられる。いずれの図においても、二重枠で示した欄内の識別コードは、入れ替えによって、元の識別コードよりも短くなったコード(出現頻度が比較的高い結果が得られたコード)であり、太線枠で示した欄内の識別コードは、入れ替えによって、元の識別コードよりも長くなったコード(出現頻度が比較的低い結果が得られたコード)である。
やはり入れ替え作業は、「対応するビット長bの差がN(この例では、N=4)の整数倍となるような2つの識別コード」という条件を満たすコード間でのみ行われているため、図40および図41に示すハフマン符号化テーブルにおいても、「識別コード自身のビット長をaとし、当該識別コードに対応するビット長をbとしたときに、所定の基準ビット長N(但し、Nは2以上の整数)に対して『a+b=k×N』(但し、kは任意の整数)である」という本発明に特有の条件は満たされている。
実際に、図31に示す標準符号化テーブルを、カラー画像の輝度成分と色差成分とに共通して利用した場合と、図40に示すハフマン符号化テーブルを輝度成分に利用し、図41に示すハフマン符号化テーブルを色差成分に利用した場合とで、JPEG方式による圧縮効率を比較した。その結果、もとの画像データのデータ容量を基準の100%として、前者の場合に得られる圧縮データの容量は9.20%、後者の場合に得られる圧縮データの容量は9.13%という数値が得られた。これにより、ハフマン符号化テーブルの採用により、圧縮率が若干向上していることがわかる。
<<< §13.基準ビット長Nに関する留意事項 >>>
ここでは、基準ビット長Nの設定に関する留意事項を簡単に述べておく。これまで述べてきた実施形態では、いずれも基準ビット長N=4に設定しているが、本発明を実施する上で、基準ビット長Nは、2以上の任意の整数に設定することができる(N=1に設定すると、従来の一般的な符号化方法になる)。
ただ、本発明を商業的に利用する場合、コストパフォーマンスを考慮して、基準ビット長Nを最適な値に設定するのが好ましい。図42は、基準ビット長Nの設定時に考慮するパラメータを示すグラフである。図42(a) は、基準ビット長Nと回路規模との関係を示すグラフである。一般に、基準ビット長Nを大きく設定すればするほど、回路規模は低減できる。一方、図42(b) は、基準ビット長Nと圧縮率との関係を示すグラフである。一般に、基準ビット長Nを小さく設定すればするほど、圧縮効率を高める(圧縮率を低める)ことができる。
したがって、回路規模を低減する上では、できるだけ大きな基準ビット長Nを設定するのが好ましいが、圧縮効率を高める上では、できるだけ小さな基準ビット長Nを設定するのが好ましい。このように、回路規模と圧縮効率とはトレードオフの関係にあるので、実用上は、この点を考慮して、基準ビット長Nを最適な値に設定するのが好ましい。
<<< §14.より実用的な復号化処理 >>>
最後に、本発明を実施する上でより実用的な復号化処理を述べておく。
<各復号処理ユニットによる処理中止時点>
§4では、図10に示すように、8台の復号処理ユニットQ1〜Q8に、それぞれ16ビットのデータを分配した後、各復号処理ユニットQ1〜Q8が、図11〜図13に示すような復号処理を実行する例を述べた。この例では、各復号処理ユニットQ1〜Q8のそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、実データに対応する数値データを取り出すための処理を、正常な復号処理が可能な限り続行することになる。
たとえば、図11に示すように、ユニットQ1は、まず「01111100」なる第1番目の単位符号データの部分について[28]なる実データを復号化した後、更に、第2番目の単位符号データの部分についての復号化を試みる。しかしながら、実際には、第2番目の単位符号データの復号化には失敗し、復号処理の結果は、図示のとおり、[28][ERR]となる。これに対して、ユニットQ4は、[123][1]という2組の実データの復号化に成功しており、ユニットQ7は、[1][13][3]という3組の実データの復号化に成功している。その一方で、ユニットQ2,Q5,Q6は、正常な復号処理に失敗し、実データを1つも取り出すことはできない。
このように、各復号処理ユニットが取り出しに成功する実データの数は、実際に処理を実行してみるまでは未知であるが、§4で述べたとおり、各復号処理ユニットが、正常な復号処理が可能な限り、分配された部分データの先頭から、実データに対応する数値データを取り出すための処理を続行することにすれば、原理的には何ら支障は生じない。図示の例の場合、図9(c) に示す符号化テーブルに掲載されている識別コードCの最大ビット長は8であるから、先頭から8ビット目まで照合しても合致する識別コードがない場合は、正常な復号処理に失敗したことになるので、その時点で処理を中止すればよい。
しかしながら、§4で述べた方法は、実用的な観点からは、必ずしも効率的な方法にはなっていない。具体的には、実用上、次の2つの無駄な点が存在する。第1の無駄は、同一の実データを異なるユニットで重複して取り出す処理が行われている点である。たとえば、図12に示す例の場合、ユニットQ4で取り出された実データ[1]は、ユニットQ7でも重複して取り出されている。同様に、ユニットQ7で取り出された実データ[13][3]は、ユニットQ8でも重複して取り出されている。このように、同一の実データが複数のユニットで重複して取り出されても、最終的には、採択ユニットで取り出された実データのみが採用されるので、原理的には何ら支障は生じない。しかしながら、実用上は、演算時間が余分に必要になるなど、非効率的な処理が行われていることは否定できない。
第2の無駄は、物理的な配線の問題である。図示の例の場合、各復号処理ユニットから取り出された実データは8ビットの数値データとして、データ編成部へと出力されることになる。したがって、1つの復号処理ユニットから取り出される可能性のある実データの数をn個とすると(図12に示す例の場合、n=4である)、図19に示すM台の復号処理ユニット240のそれぞれから、データ編成部250に対して、パラレル信号として情報を同時送信する場合、取り出した実データを伝達するための信号線が(8×n)本だけ必要になる。これは、回路を実装する上で、大きな問題になる。
実は、本発明に係る復号化方法を実行する上で、各復号処理ユニットは、実データに対応する数値データを取り出すための処理を、必ずしも「正常な復号処理が可能な限り」続行する必要はなく、実データに対応する数値データを少なくとも1つだけ取り出すための処理を行えば十分である。
図43は、図10に示すように、8台の復号処理ユニットQ1〜Q8に、それぞれ16ビットのデータを分配した後、各復号処理ユニットQ1〜Q8によって行われる別な復号処理を示す図である。この例の場合、8台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、1つの単位符号データについての実データに対応する数値データのみを取り出すための処理を行う。
具体的には、図示のとおり、ユニットQ1は、「01111100」なる第1番目の単位符号データの部分について[28]なる実データを復号化したら、そこで処理を中止する。同様に、ユニットQ3,Q4,Q7,Q8も、それぞれ第1番目の単位符号データの部分について、[251],[123],[1],[13]なる実データを復号化したら、そこで処理を中止する。一方、ユニットQ2,Q5,Q6は、正常な復号処理に失敗して処理を中止することになる。
このように、各ユニットは、分配された部分データの先頭にある第1番目の単位符号データの部分について、正常な復号処理に成功した場合も、正常な復号処理に失敗した場合も、そこで処理を中止することになる。成功した場合は、1つの実データに対応する数値データが取り出され、失敗した場合は、何ら数値データは取り出されない。要するに、各ユニットは、1つの単位符号データ(分配された部分データの先頭にある第1番目の単位符号データ)についての実データに対応する数値データのみを取り出すための処理を行うことになる。
この図43に示す例の場合も、各ユニットから、正常な復号処理によって得られた情報と、当該正常な復号処理に関与したビット数を示す正常処理ビット長とが、データ編成部に対して報告される点は同じである。図示のP1〜P8の値は、各ユニットQ1〜Q8から報告される正常処理ビット長を示している。図44は、図43に示す復号処理プロセスの図に、正常処理端線Z0〜Z4を付加したものである。この正常処理端線Z0〜Z4は、正常な復号処理が行われたビット列の端部を示すものであり、その位置は、§4で説明したとおり、正常処理ビット長P1〜P8に基づいて決定される。
具体的には、まず、ユニットQ1を最初の採択ユニットとして決定し、当該採択ユニットQ1の先頭位置に、正常処理端線Z0を引く。次に、この採択ユニットQ1についての正常処理ビット長P1=8を参照して、正常処理端線Z0から8ビット目(P1ビット目)の位置に、正常処理端線Z1を引く。そして、この正常処理端線Z1を先頭位置とする別なユニットQ3を新たな採択ユニットと決定し、この採択ユニットQ3についての正常処理ビット長P3=16を参照して、正常処理端線Z1から16ビット目(P3ビット目)の位置に、正常処理端線Z2を引く。更に、この正常処理端線Z2を先頭位置とする別なユニットQ7を新たな採択ユニットと決定し、この採択ユニットQ7についての正常処理ビット長P7=4を参照して、正常処理端線Z2から4ビット目(P7ビット目)の位置に、正常処理端線Z3を引く。更に、この正常処理端線Z3を先頭位置とする別なユニットQ8を新たな採択ユニットと決定し、この採択ユニットQ8についての正常処理ビット長P8=8を参照して、正常処理端線Z3から8ビット目(P8ビット目)の位置に、正常処理端線Z4を引く。
このようにすれば、ユニットQ1,Q3,Q7,Q8の4台が採択ユニットとなる。図45は、この4台の採択ユニットQ1,Q3,Q7,Q8における正常処理ビットの部分を太枠で囲って示した図である。この太枠で囲った正常処理ビットの部分に着目すると、それぞれ正常処理端線Z0〜Z1の区間、正常処理端線Z1〜Z2の区間、正常処理端線Z2〜Z3の区間、正常処理端線Z3〜Z4の区間となり、互いに連続した区間になる。したがって、これら4台の採択ユニットQ1,Q3,Q7,Q8による正常な復号処理によって得られた数値データを収集すれば、本来復元されるべき数値データ列が得られる。すなわち、図45に示すように、これら採択ユニットQ1,Q3,Q7,Q8によって復元された数値データを収集して並べれば、[28][251][1][13]となる。
図11〜図13に示す例(各ユニットが、正常な復号処理が可能な限り処理を続行する例)と、図43〜図45に示す例(各ユニットが、1つの実データに対応する数値データのみを取り出す処理を行う例)とを比べると、前者に含まれていた2つの無駄が、後者では省かれていることがわかる。すなわち、後者では、同一の実データを異なるユニットで重複して取り出す処理が行われることはなく、また、1つのユニットからは、1つの実データに対応する数値データ(図示の例では、8ビットの数値データ)のみをデータ編成部へと出力するための配線を設けておけば足りる。
ただ、前者の方が後者よりも優れている点もある。図13と図45とを比較すると、前者では、第1回目の並列処理により、上段に示す符号化データ列のうちのブロックB1〜B10の部分についての復号化が行われ、[28][251][1][13][3]という5組の数値データの復号化が行われているのに対して、後者では、第1回目の並列処理により、ブロックB1〜B9の部分についての復号化だけが行われ、[28][251][1][13]という4組の数値データの復号化だけが行われている。すなわち、後者の場合、ブロックB10の部分についての復号化は、第1回目の並列処理では行われず、第2回目の並列処理にまわされることになる。これは、後者では、「各ユニットは、1つの実データに対応する数値データを取り出した時点で処理を中止する」という運用を採るため、ユニットQ8が、ブロックB10のビット列「0011」を数値データ[3]として取り出すことができるのにもかかわらず、数値データ[13]を取り出した時点で処理を中止してしまったためである。
このような弊害を是正するためには、前者と後者との両方を採り入れた折衷方式を採用すればよい。すなわち、M台の復号処理ユニットを用いる一般論で説明すれば、第1台目〜第(M−1)台目のユニットのそれぞれについては、「新たな部分データの分配が行われるたびに、分配された部分データの先頭から、1つの単位符号データについての実データに対応する数値データのみを取り出すための処理(前者の処理)」を行い、第M台目のユニットについては、「新たな部分データの分配が行われるたびに、分配された部分データの先頭から、実データに対応する数値データを取り出すための処理を、正常な復号処理が可能な限り続行する(後者の処理)」ようにすればよい。
この折衷方式では、図45の例(M=8の例)において、第1台目〜第7台目のユニットQ1〜Q7については、図示のとおり、1つの実データに対応する数値データのみが取り出されるが、第8台目のユニットQ8については、正常な復号処理が可能な限り、実データを取り出す処理が続行されるので、[13]に引き続いて[3]が取り出されることになる。この場合、正常処理端線Z4の位置は、4ビット分右へ移動し、ブロックB10の右端になる。かくして、図13に示す例と同様に、第1回目の並列処理により、[28][251][1][13][3]という5組の数値データの復号化が行われる。この場合、第8台目のユニットQ8からは、複数組の数値データが出力される可能性があるため、これに応じた配線を用意する必要があるものの、第1台目〜第7台目のユニットQ1〜Q7については、1つの数値データに必要な配線を用意しておけば足りる。
このように、本発明に係る復号処理段階では、M台の復号処理ユニットは、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、任意の数の実データに対応する数値データを取り出すための処理を行えばよく、個々の復号処理ユニットによる処理の中止時点は任意に設定することが可能である。また、図43〜図45に示す例は、一次元符号化テーブルを用いた例であるが、§9で述べた二次元符号化テーブルを利用する例においても、個々の復号処理ユニットによる処理の中止時点は任意に設定することが可能である。たとえば、図35に示す例の場合、各ユニットが、分配された部分データの先頭にある第1番目の単位符号データの部分についての復号処理を行った時点で処理を中止するようにすると、「◎」が付される採択ユニットは、Q1(P1=8),Q3(P3=16),Q7(P7=12)となり、1回目の並列処理で、先頭から第36ビット目までの復号化が完了する。
すなわち、二次元符号化テーブルを利用して符号化されたデータを復号化する場合、M台の復号処理ユニットは、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、ランレングス値および実データに対応する数値データを取り出すための処理を任意の回数だけ繰り返せばよい。具体的には、正常な復号処理が可能な限り何回でも処理を続行するようにしてもよいし、1つの単位符号データについてのランレングス値および実データに対応する数値データを取り出した時点で処理を中止してもよい。もちろん、その折衷方式として、第1台目〜第(M−1)台目のユニットについては、1つの単位符号データについてのランレングス値および実データに対応する数値データを取り出した時点で処理を中止し、第M台目のユニットについては、正常な復号処理が可能な限り処理を続行するようにしてもよい。
<ランレングス値に基づく復元処理の担当>
§9で述べた二次元符号化テーブルを利用する方法では、M台の復号処理ユニットによる並列処理により、二次元符号化テーブルを参照しながら、それぞれ分配された部分データから、0を示す数値データを羅列する回数を示すランレングス値と、当該0を示す数値データに後続する実データに対応する数値データと、を取り出す復号処理が行われ、1回もしくは複数回の並列処理によってそれぞれ収集された情報に基づいて数値データを並べることにより復号化データ列が生成される。
図17に示す流れ図において、ステップS24として示されている復号処理段階が、M台の復号処理ユニットによって実行される並列処理であり、続く、ステップS25として示されているデータ編成段階が、復号化データ列を生成する処理である。§10で説明した方法では、ステップS24の復号処理段階において、0を示す数値データをランレングス値に相当する回数だけ羅列した後に実データに対応する数値データを並べることにより、元のデータ列を復元する復号処理を行い、続くステップS25のデータ編成段階において、このM台の復号処理ユニットによる復号処理の結果を取捨選択して、0を示す数値データおよび個々の実データに対応する数値データを並べた復号化データ列を生成する処理を行っていた。
別言すれば、§10で説明した方法では、ステップS24の復号処理段階において、M台の復号処理ユニットのそれぞれが、0を示す数値データをランレングス値に相当する回数だけ羅列した後に実データに相当する数値データを並べることにより、元のデータを復元する処理を実行し、ステップS25のデータ編成段階において、データ編成部が、復元されたデータを並べることにより復号化データ列を生成する処理を行っていた。すなわち、この方法では、M台の復号処理ユニットのそれぞれが、ランレングス値に基いて0の羅列データの復元処理を担当していることになる。
しかしながら、実用上は、ランレングス値に基づく復元処理は、データ編成部に担当させるのが好ましい。その理由は、各復号処理ユニットからデータ編成部への配線を効率化するためである。図19に示すように、実際の復号化装置には、M台の復号処理ユニット240のそれぞれから、データ編成部250に対して、処理結果を示す情報を伝達するための配線が必要である。データ編成部250は、M台の復号処理ユニット240による1回の並列処理の結果として得られた情報を、時分割して受け取ることもできるが、実用上は、パラレル信号として同一タイミングで受け取り、復号化データ列を生成する処理を行うのが好ましい。そうすると、もし、M台の復号処理ユニット240側で既にランレングス値に基づく復元処理(0を示す数値データをランレングス値に相当する回数だけ羅列する処理)を実施してしまっていると、これらの数値データをパラレル信号としてデータ編成部250に伝達するためには、膨大な数の配線が必要になる。
そこで、実用上は、復号処理段階では、M台の復号処理ユニット240のそれぞれが、取り出したランレングス値および実データに対応する数値データをそのまま出力する処理を実行するようにし、データ編成段階で、データ編成部250が、0を示す数値データをランレングス値に相当する回数だけ羅列した後に実データに相当する数値データを並べることにより、元のデータを復元する処理を実行し、復元されたデータを並べることにより復号化データ列を生成する処理を行うようにする。そうすれば、各復号処理ユニット240からデータ編成部250に対しては、ランレングス値と、実データに対応する数値データと、正常処理ビット長と、を伝達するための配線を用意しておけば足りるので、配線の数を大幅に節約することができる。
<専用の参照テーブルを利用した復号化>
本発明に係る符号化方法で用いる符号化テーブルは、「テーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をaとしたときに、先頭からaビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在しない」という条件を満たすテーブルである。そして、復号化を行う際には、そのような条件を満たすことを利用して、符号化されたデータの先頭から1ビット、2ビット、3ビット、... の部分について順に、テーブル内に合致する識別コードがあるか否かを判定する処理を行うことが可能になる。
このように、復号化の基本原理は、符号化テーブル内の識別コードとの合致判定処理ということになるが、実用上は、次のような効率的な合致判定処理が行われている。この処理は、JPEG画像の復号化などに利用されている公知の技術であるが、以下、本発明に適用した場合の具体例を簡単に述べておく。
ここで述べる効率的な合致判定処理を行うためには、予め、復号化に利用する符号化テーブルに基づいて、専用の復号化用参照テーブルを用意しておく必要がある。ここでは、図31に示す「AC成分用符号化テーブル」に基づいて作成した復号化用参照テーブルを図46および図47に例示する。
図46に示す復号化用第1参照テーブルは、識別コード自身のビット長aと、当該ビット長aをもつ識別コードの総数(図31のテーブル内の総数)を示す符号語数wと、当該ビット長aをもつ識別コードのうち、値が最小の識別コードCminと、を収容したものである。たとえば、この参照テーブルの1行目には、a=3,w=1,Cmin =「000」なるデータが収容されているが、これは、図31に示すテーブル内に、ビット長が「3」の識別コードが1つだけ存在し(b=1,R=0の欄)、当該識別コードが「000」であることを意味している。同様に、この参照テーブルの2行目には、a=4,w=4,Cmin =「0010」なるデータが収容されているが、これは、図31に示すテーブル内に、ビット長が「4」の識別コードが4つ存在し(b=0,R=0の欄、b=0,R=15の欄、b=4,R=0の欄、b=4,R=1の欄)、これら4つの識別コードのうちの最小値が「0010」であることを意味している。以下、同様である。
一方、図47に示す復号化用第2参照テーブルは、図31のテーブルに収容されている各識別コードを、そのビット長aの小さい順に、かつ、同じビット長aをもつ識別コードについては識別コードの小さい順に並べ、当該識別コードの収容位置を示すbおよびRの値を記載したテーブルである。たとえば、この参照テーブルの1行目には、識別コード「000」の収容位置「b=1,R=0」が記載され、2行目には、識別コード「0010」の収容位置「b=0,R=0(=EOB)」が記載され、3行目には、識別コード「0011」の収容位置「b=4,R=0」が記載され、4行目には、識別コード「0100」の収容位置「b=4,R=1」が記載されている。なお、この復号化用第2参照テーブルには、識別コード自身を記載しておく必要はないので、図では、参考のために右欄外に括弧書きで識別コードを示してある。また、左欄外には、個々のビット長aの先頭アドレスを矢印で示してある。
この2つの参照テーブルは、実質的に図31のテーブルと同じ内容を示すものであり、これら2つのテーブルを予め作成しておけば、以下に述べるような効率的な方法で、復号化を行うことが可能である。ここでは、図35に示す復号処理ユニットQ3に分配された24ビットのデータについての復号化を行う場合を例にとって説明しよう。図35に示すとおり、復号処理ユニットQ3については、先頭の10ビットのデータ「1111011000」が、図31のテーブルの収容位置「b=6,R=3」に合致することになる。
図48は、復号化用第1および第2参照テーブルを用いた効率的な復号化処理の原理を示す図である。まず、ビット長a=3をもつ識別コードについての合致判定を行うために、図46に示す第1参照テーブルから、ビット長a=3の行に記載されている識別コードCmin 「000」(ビット長3をもつ識別コードの最小値)を取り出し、ユニットQ3内のビット列の先頭に揃えて減算を行い、差dを求める。図48の丸数字3には、このような減算が示されている。図示のとおり、ユニットQ3内のビット列の先頭3ビットは「111」であるから、ここで行う減算は、「111−000=111」であり、差d=「111」が求まる。
続いて、図46に示す第1参照テーブルから、ビット長a=3の行に記載されている符号語数w(この場合、w=1)を取り出し、「0≦d<w」が満足するか否かを調べる。差d=「111」の10進表記はd=7であるから、d≧wとなり、a=3の場合、「0≦d<w」は満足しないことになる。このような処理を、aを1ずつ増やしながら、「0≦d<w」が満足されるまで繰り返し実行してゆく。
たとえば、a=4の場合は、識別コードCmin 「0010」(ビット長4をもつ識別コードの最小値)が取り出され、図48の丸数字4に示されているように、ユニットQ3内のビット列の先頭4ビット「1111」に対する減算が行われ、「1111−0010=1101」として、差d=「1101(10進表記では13)」が求まる。一方、ビット長a=4の行に記載されている符号語数wは、w=4であるから、d≧wとなり、a=4の場合も「0≦d<w」は満足しないことになる。
続く、a=5の場合は、識別コードCmin 「01100」(ビット長5をもつ識別コードの最小値)が取り出され、図48の丸数字5に示されているように、ユニットQ3内のビット列の先頭5ビット「11110」に対する減算が行われ、「11110−01100=10010」として、差d=「10010(10進表記では18)」が求まる。一方、ビット長a=5の行に記載されている符号語数wは、w=5であるから、d≧wとなり、a=5の場合も「0≦d<w」は満足しないことになる。同様に、a=6〜9の場合も、減算によって求めた差dについて、「0≦d<w」は満足しない。
次に、a=10の場合は、識別コードCmin 「1111010110」(ビット長10をもつ識別コードの最小値)が取り出され、図48の丸数字10に示されているように、ユニットQ3内のビット列の先頭10ビット「1111011000」に対する減算が行われ、「1111011000−1111010110=0000000010」として、差d=「0000000010(10進表記では2)」が求まる。一方、ビット長a=10の行に記載されている符号語数wは、w=20であるから、a=10の場合に初めて「0≦d<w」が満足されることになる。
こうして、「0≦d<w」が満足したら、図47に示す第2参照テーブルを参照して、その時点のビット長aの先頭アドレスからd個目のデータを抽出する。上例の場合、ビット長a=10の先頭アドレスから2個目のデータ、すなわち、「b=6,R=3」が抽出されることになる。こうして抽出されたデータ「b=6,R=3」は、正に、復号処理ユニットQ3の先頭の10ビットのデータ「1111011000」に合致する識別コードが示すビット長bおよびランレングス値Rである。
上述した復号化方法を採れば、図31のテーブルの各欄を総当たりで比較してゆく方法に比べて、非常に効率的な合致判定処理が可能になる。なお、この復号化方法を採る場合は、図18に示す符号化装置におけるデータ出力部170に、テーブル格納部120に格納されている符号化テーブルT(二次元符号化テーブル)に基づいて、図46に示すような復号化用第1参照テーブルおよび図47に示すような復号化用第2参照テーブルを作成する機能をもたせておき、符号化データファイルF内に、これら参照テーブル自身を、もしくはこれら参照テーブルを特定するテーブル特定情報を組み込むようにすればよい。前述したとおり、図46および図47に示す参照テーブルは、図31のテーブルと同等の機能を果たすテーブルであり、実質的には同一内容を示すテーブルである。
なお、上述した復号化の演算処理を高速化するには、図48に丸数字3〜10として示されているような個々の減算処理(具体的には、図46の第1参照テーブルに示されているビット長a=3についての識別コードCmin 〜ビット長a=14についての識別コードCmin を、それぞれユニットQ3に分配された24ビットのデータの先頭に桁合わせして引き算する処理)を並列して行うようにすればよい。すなわち、復号処理ユニットQ3の内部に、個々の減算処理を実行するためのハードウエアを複数台用意しておけば、ビット長a=3についての減算、ビット長a=4についての減算、ビット長a=5についての減算、... と個々の減算処理を順番に繰り返し実行する代わりに、すべての減算処理を並行して行うことができ、ビット長a=3〜14についての減算結果を同時に得ることができる。
110:データ格納部
120:テーブル格納部
130:データ抽出部
140:実データ生成部
150:識別コード選択部
160:単位符号データ生成部
170:データ出力部
180:頻度集計部
190:テーブル修正部
210:データ格納部
220:テーブル格納部
230:データ分配部
240(1),240(2),...,240(m):復号処理ユニット
250:データ編成部
260:データ出力部
300:JPEG画像用圧縮処理装置
310:DCT手段
320:量子化手段
330:符号化手段
400:JPEG画像用伸張処理装置
410:復号化手段
420:逆量子化手段
430:逆DCT手段
a:識別コードC自身のビット長
B1〜B11:基準ビット長Nをもつデータブロック
b:実データDのビット長
C,C1,C2,C3,C4,C5,...:識別コード
C00〜C88:識別コード
Cmin:最小の識別コード
D,D1,D2,D3,D4,D5,...:数値データ/実データ
d:差
E:数値データ列
F:符号化データファイル
F1:ヘッダ部
F2:本体部
F3:フッタ部
G:復号化データ列
H:テーブル特定情報
i:復号処理ユニットの番号
J:カウント値
k:任意の整数(1,2,3,4,...)
L:復号処理ユニットの処理可能ビット数(Nの整数倍)
M:復号処理ユニットの台数
N:基準ビット長(2以上の整数)
P1〜P8:正常処理ビット長
Q1〜Q8:復号処理ユニット
R:ランレングス値
Rmax:ランレングス値の最大値
S:符号化データ列
S11〜S27:流れ図の各ステップ
T,T1,T2,T3,T4:符号化テーブル
U,U1,U2,U3,U4,U5,...Un:単位符号データ
Umax:単位符号データの最大ビット長
w:符号語数
X:8×8画素ブロックのデータ
Y:圧縮データ
Z0〜Z4:正常処理端線

Claims (39)

  1. 固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化する符号化方法であって、
    演算処理装置が、
    符号化の対象となる数値データ列を入力するデータ入力段階と、
    個々のビット長に対応する固有の識別コードを示す符号化テーブルを入力するテーブル入力段階と、
    入力した数値データ列から個々の数値データを順番に抽出するデータ抽出段階と、
    抽出した数値データから冗長なビットを削除することにより実データを生成する実データ生成段階と、
    前記符号化テーブルを参照して、生成された前記実データのビット長に対応する識別コードを選択する識別コード選択段階と、
    生成された前記実データの先頭に、選択された前記識別コードを付加することにより、抽出した前記数値データを示す単位符号データを生成する単位符号データ生成段階と、
    前記データ抽出段階、前記実データ生成段階、前記識別コード選択段階、前記単位符号データ生成段階を、入力した数値データ列を構成する数値データのそれぞれについて繰り返し実行する段階と、
    生成された単位符号データを順番に並べて、符号化データ列として出力するデータ出力段階と、
    を実行し、
    前記符号化テーブルが、
    前記実データを表現するのに十分な所定範囲内の複数通りのビット長について、個々のビット長と、当該ビット長に対応する固有の識別コードと、の対応関係を示すテーブルであり、
    このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をaとしたときに、先頭からaビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在せず、かつ、当該着目識別コードに対応するビット長をbとしたときに、所定の基準ビット長N(但し、Nは2以上の整数)に対して「a+b=k×N」(但し、kは任意の整数)なる条件を満足するテーブルであり、
    前記実データ生成段階で、抽出した数値データを示す実データとして、当該数値データが0を示すデータである場合にはビット長が0である仮想のビット列を、正の値を示すデータである場合には先頭に0を含まない可変長のビット列を、負の値を示すデータである場合には先頭に1を含まない可変長のビット列を、それぞれ生成することを特徴とする数値データ列の符号化方法。
  2. 固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化する符号化方法であって、
    演算処理装置が、
    符号化の対象となる数値データ列を入力するデータ入力段階と、
    個々のビット長と個々のランレングス値との組み合わせに対応する固有の識別コードを示す二次元符号化テーブルを入力するテーブル入力段階と、
    入力した数値データ列から個々の数値データを順番に抽出するデータ抽出段階と、
    抽出した数値データが0を示すデータであり、かつ、これまでのカウント値が最大値Rmaxに達していない場合に、0を示す数値データが連続して抽出された回数をランレングス値としてカウントするランレングス値カウント段階と、
    抽出した数値データが正の値を示すデータである場合に、当該数値データを示す実データとして先頭に0を含まない可変長のビット列を生成し、抽出した数値データが負の値を示すデータである場合に、当該数値データを示す実データとして先頭に1を含まない可変長のビット列を生成し、抽出した数値データが0を示すデータであり、かつ、前記カウント値が前記最大値Rmaxに達していた場合に、ビット長が0である仮想のビット列を実データとして生成する実データ生成段階と、
    前記二次元符号化テーブルを参照して、生成された前記実データのビット長と、当該実データが生成された時のランレングス値と、の組み合わせに対応する識別コードを選択し、前記カウント値を0にリセットする識別コード選択段階と、
    生成された前記実データの先頭に、選択された前記識別コードを付加することにより、抽出した前記数値データを示す単位符号データを生成する単位符号データ生成段階と、
    前記データ抽出段階を、入力した数値データ列を構成する数値データのそれぞれについて繰り返し実行するとともに、前記ランレングス値カウント段階、前記実データ生成段階、前記識別コード選択段階および前記単位符号データ生成段階を、必要に応じて繰り返し実行する段階と、
    生成された単位符号データを順番に並べて、符号化データ列として出力するデータ出力段階と、
    を実行し、
    前記符号化テーブルが、予め定められた所定の最大ランレングス値をRmaxとしたときに、前記実データを表現するのに十分な所定範囲内の複数通りのビット長と、Rmax までの範囲内の複数通りのランレングス値と、の各組み合わせについて、個々の組み合わせと、当該組み合わせに対応する固有の識別コードと、の対応関係を示すテーブルであり、
    このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をaとしたときに、先頭からaビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在せず、かつ、当該着目識別コードに対応するビット長をbとしたときに、所定の基準ビット長N(但し、Nは2以上の整数)に対して「a+b=k×N」(但し、kは任意の整数)なる条件を満足するテーブルであることを特徴とする数値データ列の符号化方法。
  3. 請求項2に記載の符号化方法において、
    データ抽出段階で、数値データを抽出する際に、「抽出対象となる数値データを含めて、数値データ列の末尾までに後続する数値データがすべて0であるというゼロ永続状態」か否かを調べる調査処理を実行し、当該調査処理により前記ゼロ永続状態であることが確認された場合に、
    実データ生成段階では、ビット長が0である仮想のビット列を実データとして生成し、識別コード選択段階では、ゼロ永続状態を示す終端コードを識別コードとして選択することを特徴とする数値データ列の符号化方法。
  4. 固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化する符号化方法であって、
    演算処理装置が、特定の数値データを可変長のビット列を用いて表現した実データを生成し、この実データの先頭に、少なくとも当該実データのビット長を示す情報をもった識別コードを付加することにより、少なくとも前記特定の数値データ自身を示す情報をもった単位符号データを生成し、生成された複数の単位符号データを順番に並べて符号化データ列として出力する処理を実行し、
    付加する識別コードを選択する際に、少なくとも「所定範囲内の複数通りのビット長と、当該ビット長に対応する識別コードとの対応関係」を示す符号化テーブルを用いるようにし、かつ、当該テーブルが、当該テーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をaとしたときに、先頭からaビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在せず、かつ、当該着目識別コードに対応するビット長をbとしたときに、所定の基準ビット長N(但し、Nは2以上の整数)に対して「a+b=k×N」(但し、kは任意の整数)なる条件を満足するテーブルであり、
    実データのビット長bの出現頻度、もしくは、ビット長bとランレングス値Rとの組み合わせの出現頻度が高いほど、より短いビット長aをもつ識別コードが対応づけられている符号化テーブルを用いることを特徴とする数値データ列の符号化方法。
  5. 請求項4に記載の符号化方法において、
    符号化の対象となる数値データ列について、実データのビット長bの出現頻度、もしくは、ビット長bとランレングス値Rとの組み合わせの出現頻度を集計する頻度集計段階と、
    既存の標準符号化テーブル内の、基準ビット長Nの整数倍の差をもつビット長b相互について、テーブルの内容を入れ替える処理を行うことにより、実データのビット長bの出現頻度、もしくは、ビット長bとランレングス値Rとの組み合わせの出現頻度が高いほど、より短いビット長aをもつ識別コードが対応づけられている修正した符号化テーブルを生成するテーブル修正段階と、
    を更に実行し、
    識別コード選択段階で、前記修正した符号化テーブルを参照して、識別コードの選択を行うことを特徴とする数値データ列の符号化方法。
  6. 請求項1〜5のいずれかに記載の符号化方法において、
    データ出力段階において、符号化データ列と、符号化の処理に用いた符号化テーブルと、を含むデータファイルを出力することを特徴とする数値データ列の符号化方法。
  7. 請求項1〜5のいずれかに記載の符号化方法において、
    データ出力段階において、符号化データ列と、符号化の処理に用いた符号化テーブルを特定するテーブル特定情報と、を含むデータファイルを出力することを特徴とする数値データ列の符号化方法。
  8. 請求項2に記載の数値データ列の符号化方法によって符号化された符号化データ列について、符号化の対象となった数値データ列を復元する復号化方法であって、
    複数M台の復号処理ユニットを含む演算処理装置が、
    復号化の対象となる符号化データ列を入力するデータ入力段階と、
    符号化に用いられた二次元符号化テーブルを入力するテーブル入力段階と、
    それぞれLビット(但し、LはNの整数倍、かつ、単位符号データの最大ビット長をUmaxとした場合に、L≧Umax)の連続ビットデータに対する復号処理を行う機能を有する複数M台の復号処理ユニットに対して、前記符号化データ列の一部を部分データとして分配するデータ分配段階と、
    前記M台の復号処理ユニットによる並列処理により、前記二次元符号化テーブルを参照しながら、それぞれ分配された部分データから、0を示す数値データを羅列する回数を示すランレングス値と、当該0を示す数値データに後続する実データに対応する数値データと、を取り出す復号処理を行う復号処理段階と、
    前記M台の復号処理ユニットによる復号処理の結果を取捨選択して、0を示す数値データおよび個々の実データに対応する数値データを並べた復号化データ列を生成するデータ編成段階と、
    生成された前記復号化データ列を出力するデータ出力段階と、
    を実行し、
    前記データ分配段階では、前記符号化データ列の未復号化部の先頭から数えて第(N×(i−1)+1)ビット目〜第(N×(i−1)+L)ビット目までのビット列を、第i番目のユニット(i=1〜M)に分配する処理を、前記符号化データ列のすべての部分に対する復号化が完了するまで繰り返し行い、
    前記復号処理段階では、前記M台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、ランレングス値および実データに対応する数値データを取り出すための処理を行い、
    前記データ編成段階では、1回の並列処理によって前記M台の復号処理ユニットから処理結果が得られたときに、まず第1のユニットを最初の採択ユニットとして決定し、この採択ユニットによって正常な復号処理が行われた最終ビットを認識し、当該最終ビットの直後のビットを先頭ビットとする部分データが分配された別なユニットを新たな採択ユニットと決定する処理を、可能な限り続ける処理を行い、各採択ユニットで正常に復号化が行われた数値データを収集し、1回もしくは複数回の並列処理によってそれぞれ収集された情報に基づいて数値データを並べることにより復号化データ列を生成することを特徴とする数値データ列の復号化方法。
  9. 「少なくとも所定のビット長を示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配したデータであって、全長が所定の基準ビット長N(但し、Nは2以上の整数)の整数倍になるように設定された単位符号データ」を、複数組並べることにより構成された符号化データ列について、少なくとも個々の実データに対応する数値データを復元する復号化方法であって、
    前記符号化データ列をNビットの整数倍の単位で分割して複数の部分データを生成し、各部分データを複数M台の復号処理ユニットに分配し、
    前記複数M台の復号処理ユニットの並列処理により、分配された部分データに対する復号処理を行い、
    正常に復号化が行われた数値データを並べることにより復号化データ列を生成し、
    「所定のビット長と所定のランレングス値との組み合わせを示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配した構造を有し、0を示す数値データを当該ランレングス値に相当する回数だけ羅列した後に前記実データに対応する数値データを並べたデータ列を示し、全長が所定の基準ビット長N(但し、Nは2以上の整数)の整数倍になるように設定された単位符号データ(最大ビット長Umax)」を、複数組並べることにより構成された符号化データ列について、0を示す数値データおよび個々の実データを並べてなる元のデータ列を復元するために、
    複数M台の復号処理ユニットを含む演算処理装置が、
    復号化の対象となる符号化データ列を入力するデータ入力段階と、
    個々の識別コードに対応する特定のビット長と特定のランレングス値との組み合わせを示す二次元符号化テーブルを入力するテーブル入力段階と、
    それぞれLビット(但し、LはNの整数倍、かつ、L≧Umax)の連続ビットデータに対する復号処理を行う機能を有する複数M台の復号処理ユニットに対して、前記符号化データ列の一部を部分データとして分配するデータ分配段階と、
    前記M台の復号処理ユニットによる並列処理により、前記二次元符号化テーブルを参照しながら、それぞれ分配された部分データから、0を示す数値データを羅列する回数を示すランレングス値と、当該0を示す数値データに後続する実データに対応する数値データと、を取り出す復号処理を行う復号処理段階と、
    前記M台の復号処理ユニットによる復号処理の結果を取捨選択して、0を示す数値データおよび個々の実データに対応する数値データを並べた復号化データ列を生成するデータ編成段階と、
    生成された前記復号化データ列を出力するデータ出力段階と、
    を実行し、
    前記データ分配段階では、前記符号化データ列の未復号化部の先頭から数えて第(N×(i−1)+1)ビット目〜第(N×(i−1)+L)ビット目までのビット列を、第i番目のユニット(i=1〜M)に分配する処理を、前記符号化データ列のすべての部分に対する復号化が完了するまで繰り返し行い、
    前記復号処理段階では、前記M台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、ランレングス値および実データに対応する数値データを取り出すための処理を行い、
    前記データ編成段階では、1回の並列処理によって前記M台の復号処理ユニットから処理結果が得られたときに、まず第1のユニットを最初の採択ユニットとして決定し、この採択ユニットによって正常な復号処理が行われた最終ビットを認識し、当該最終ビットの直後のビットを先頭ビットとする部分データが分配された別なユニットを新たな採択ユニットと決定する処理を、可能な限り続ける処理を行い、各採択ユニットで正常に復号化が行われた数値データを収集し、1回もしくは複数回の並列処理によってそれぞれ収集された情報に基づいて数値データを並べることにより復号化データ列を生成することを特徴とする数値データ列の復号化方法。
  10. 請求項9に記載の復号化方法において、
    復号処理段階で、M台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、ランレングス値および実データに対応する数値データを取り出すための処理を、正常な復号処理が可能な限り続行することを特徴とする数値データ列の復号化方法。
  11. 請求項9に記載の復号化方法において、
    復号処理段階で、M台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、1つの単位符号データについてのランレングス値および実データに対応する数値データのみを取り出すための処理を行うことを特徴とする数値データ列の復号化方法。
  12. 請求項9に記載の復号化方法において、
    復号処理段階で、M台の復号処理ユニットのうち、第1台目〜第(M−1)台目のユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、1つの単位符号データについてのランレングス値および実データに対応する数値データのみを取り出すための処理を行い、第M台目のユニットが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、ランレングス値および実データに対応する数値データを取り出すための処理を、正常な復号処理が可能な限り続行することを特徴とする数値データ列の復号化方法。
  13. 請求項9〜12のいずれかに記載の復号化方法において、
    復号処理段階で、M台の復号処理ユニットのそれぞれが、0を示す数値データをランレングス値に相当する回数だけ羅列した後に実データに相当する数値データを並べることにより、元のデータを復元する処理を実行し、
    データ編成段階で、復元されたデータを並べることにより復号化データ列を生成することを特徴とする数値データ列の復号化方法。
  14. 請求項9〜12のいずれかに記載の復号化方法において、
    復号処理段階で、M台の復号処理ユニットのそれぞれが、取り出したランレングス値および実データに対応する数値データをそのまま出力する処理を実行し、
    データ編成段階で、各採択ユニットから収集した情報に基づいて、0を示す数値データをランレングス値に相当する回数だけ羅列した後に実データに相当する数値データを並べることにより、元のデータを復元する処理を実行し、復元されたデータを並べることにより復号化データ列を生成することを特徴とする数値データ列の復号化方法。
  15. 請求項9〜14のいずれかに記載の復号化方法において、
    符号化データ列と、符号化の処理に用いた符号化テーブルと、を含むデータファイルが与えられたときに、
    データ入力段階において、前記データファイルから符号化データ列を抽出する処理を行い、
    テーブル入力段階において、前記データファイルから符号化テーブルを抽出する処理を行うことを特徴とする数値データ列の復号化方法。
  16. 請求項9〜14のいずれかに記載の復号化方法において、
    符号化データ列と、符号化の処理に用いた符号化テーブルを特定するテーブル特定情報と、を含むデータファイルが与えられたときに、
    データ入力段階において、前記データファイルから符号化データ列を抽出する処理を行い、
    テーブル入力段階において、前記データファイルからテーブル特定情報を抽出する処理を行った後、当該テーブル特定情報によって特定されるテーブルを選択して利用することを特徴とする数値データ列の復号化方法。
  17. 請求項9〜16のいずれかに記載の復号化方法において、
    データ分配段階では、M≧1+L/Nとなるような複数M台の復号処理ユニットに部分データの分配を行い、
    復号処理段階では、これらM台の復号処理ユニットによる並列処理を行うことを特徴とする数値データ列の復号化方法。
  18. 固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化する符号化装置であって、
    符号化の対象となる数値データ列を入力して格納するデータ格納部と、
    個々のビット長に対応する固有の識別コードを示す符号化テーブルを格納するテーブル格納部と、
    前記データ格納部に格納されている数値データ列から個々の数値データを順番に抽出するデータ抽出部と、
    抽出した数値データから冗長なビットを削除することにより実データを生成する実データ生成部と、
    前記符号化テーブルを参照して、生成された前記実データのビット長に対応する識別コードを選択する識別コード選択部と、
    生成された前記実データの先頭に、選択された前記識別コードを付加することにより、抽出した前記数値データを示す単位符号データを生成する単位符号データ生成部と、
    生成された単位符号データを順番に並べて、符号化データ列として出力するデータ出力部と、
    を備え、
    前記符号化テーブルが、
    前記実データを表現するのに十分な所定範囲内の複数通りのビット長について、個々のビット長と、当該ビット長に対応する固有の識別コードと、の対応関係を示すテーブルであり、
    このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をaとしたときに、先頭からaビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在せず、かつ、当該着目識別コードに対応するビット長をbとしたときに、所定の基準ビット長N(但し、Nは2以上の整数)に対して「a+b=k×N」(但し、kは任意の整数)なる条件を満足するテーブルであり、
    前記実データ生成部が、抽出した数値データを示す実データとして、当該数値データが0を示すデータである場合にはビット長が0である仮想のビット列を、正の値を示すデータである場合には先頭に0を含まない可変長のビット列を、負の値を示すデータである場合には先頭に1を含まない可変長のビット列を、それぞれ生成することを特徴とする数値データ列の符号化装置。
  19. 固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化する符号化装置であって、
    符号化の対象となる数値データ列を入力して格納するデータ格納部と、
    個々のビット長と個々のランレングス値との組み合わせに対応する固有の識別コードを示す二次元符号化テーブルを格納するテーブル格納部と、
    前記データ格納部に格納されている数値データ列から個々の数値データを順番に抽出するデータ抽出部と、
    抽出した数値データが0を示すデータであり、かつ、これまでのカウント値が最大値Rmaxに達していない場合には、0を示す数値データが連続して抽出された回数をランレングス値としてカウントする処理を行い、抽出した数値データが正の値を示すデータである場合には、当該数値データを示す実データとして先頭に0を含まない可変長のビット列を生成する処理を行い、抽出した数値データが負の値を示すデータである場合には、当該数値データを示す実データとして先頭に1を含まない可変長のビット列を生成する処理を行い、抽出した数値データが0を示すデータであり、かつ、前記カウント値が前記最大値Rmaxに達していた場合には、ビット長が0である仮想のビット列を実データとして生成する実データ生成部と、
    前記二次元符号化テーブルを参照して、生成された前記実データのビット長と、当該実データが生成された時のランレングス値と、の組み合わせに対応する識別コードを選択し、前記カウント値を0にリセットする識別コード選択部と、
    生成された前記実データの先頭に、選択された前記識別コードを付加することにより、抽出した前記数値データを示す単位符号データを生成する単位符号データ生成部と、
    生成された単位符号データを順番に並べて、符号化データ列として出力するデータ出力部と、
    を備え、
    前記符号化テーブルが、予め定められた所定の最大ランレングス値をRmaxとしたときに、前記実データを表現するのに十分な所定範囲内の複数通りのビット長と、Rmax までの範囲内の複数通りのランレングス値と、の各組み合わせについて、個々の組み合わせと、当該組み合わせに対応する固有の識別コードと、の対応関係を示すテーブルであり、
    このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をaとしたときに、先頭からaビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在せず、かつ、当該着目識別コードに対応するビット長をbとしたときに、所定の基準ビット長N(但し、Nは2以上の整数)に対して「a+b=k×N」(但し、kは任意の整数)なる条件を満足するテーブルであることを特徴とする数値データ列の符号化装置。
  20. 請求項19に記載の符号化装置において、
    データ抽出部が、数値データを抽出する際に、「抽出対象となる数値データを含めて、数値データ列の末尾までに後続する数値データがすべて0であるというゼロ永続状態」か否かを調べる調査処理を実行し、
    実データ生成部が、前記調査処理により前記ゼロ永続状態であることが確認された場合に、ビット長が0である仮想のビット列を実データとして生成し、
    識別コード選択部が、前記調査処理により前記ゼロ永続状態であることが確認された場合に、ゼロ永続状態を示す終端コードを識別コードとして選択することを特徴とする数値データ列の符号化装置。
  21. 固定長ビットからなる数値データ列を、可変長のビット列を用いて符号化する符号化装置であって、
    符号化の対象となる数値データ列を入力して格納するデータ格納部と、
    個々のビット長に対応する固有の識別コードを示す符号化テーブルを格納するテーブル格納部と、
    前記データ格納部に格納されている数値データ列から個々の数値データを順番に抽出するデータ抽出部と、
    抽出した数値データから冗長なビットを削除することにより実データを生成する実データ生成部と、
    前記符号化テーブルを参照して、生成された前記実データのビット長に対応する識別コードを選択する識別コード選択部と、
    生成された前記実データの先頭に、選択された前記識別コードを付加することにより、抽出した前記数値データを示す単位符号データを生成する単位符号データ生成部と、
    生成された単位符号データを順番に並べて、符号化データ列として出力するデータ出力部と、
    を備え、
    前記符号化テーブルが、
    前記実データを表現するのに十分な所定範囲内の複数通りのビット長について、個々のビット長と、当該ビット長に対応する固有の識別コードと、の対応関係を示すテーブルであり、
    このテーブル内のいずれの識別コードに着目した場合にも、当該着目識別コード自身のビット長をaとしたときに、先頭からaビットの部分が当該着目識別コードと同一になるような別な識別コードはこのテーブル内に存在せず、かつ、当該着目識別コードに対応するビット長をbとしたときに、所定の基準ビット長N(但し、Nは2以上の整数)に対して「a+b=k×N」(但し、kは任意の整数)なる条件を満足するテーブルであり、
    前記テーブル格納部に格納されている符号化テーブルが、実データのビット長bの出現頻度、もしくは、ビット長bとランレングス値Rとの組み合わせの出現頻度が高いほど、より短いビット長aをもつ識別コードが対応づけられている符号化テーブルであることを特徴とする数値データ列の符号化装置。
  22. 請求項18〜20のいずれかに記載の符号化装置において、
    テーブル格納部に格納されている符号化テーブルが、実データのビット長bの出現頻度、もしくは、ビット長bとランレングス値Rとの組み合わせの出現頻度が高いほど、より短いビット長aをもつ識別コードが対応づけられている符号化テーブルであることを特徴とする数値データ列の符号化装置。
  23. 請求項21または22に記載の符号化装置において、
    データ格納部に格納されている数値データ列について、実データのビット長bの出現頻度、もしくは、ビット長bとランレングス値Rとの組み合わせの出現頻度を集計する頻度集計部と、
    既存の標準符号化テーブル内の、基準ビット長Nの整数倍の差をもつビット長b相互について、テーブルの内容を入れ替える処理を行うことにより、実データのビット長bの出現頻度、もしくは、ビット長bとランレングス値Rとの組み合わせの出現頻度が高いほど、より短いビット長aをもつ識別コードが対応づけられている修正した符号化テーブルを生成し、これをテーブル格納部に格納するテーブル修正部と、
    を更に設けたことを特徴とする数値データ列の符号化装置。
  24. 請求項18〜23のいずれかに記載の符号化装置において、
    データ出力部が、符号化データ列とともに、テーブル格納部に格納されている符号化テーブルもしくは当該符号化テーブルを特定するテーブル特定情報を出力することを特徴とする数値データ列の符号化装置。
  25. 「所定のビット長と所定のランレングス値との組み合わせを示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配した構造を有し、0を示す数値データを当該ランレングス値に相当する回数だけ羅列した後に前記実データに対応する数値データを並べたデータ列を示し、全長が所定の基準ビット長N(但し、Nは2以上の整数)の整数倍になるように設定された単位符号データ(最大ビット長Umax)」を、複数組並べることにより構成された符号化データ列について、0を示す数値データおよび個々の実データを並べてなる元のデータ列を復元する復号化装置であって、
    復号化の対象となる符号化データ列を入力して格納するデータ格納部と、
    個々の識別コードに対応する特定のビット長と特定のランレングス値との組み合わせを示す二次元符号化テーブルを格納するテーブル格納部と、
    それぞれLビット(但し、LはNの整数倍、かつ、L≧Umax)の連続ビットデータに対する復号処理を並列して行う複数M台の復号処理ユニットと、
    前記M台の復号処理ユニットに対して、前記データ格納部に格納されている符号化データ列の一部を部分データとして分配するデータ分配部と、
    前記M台の復号処理ユニットによる復号処理の結果を取捨選択して、0を示す数値データおよび個々の実データに対応する数値データを並べた復号化データ列を生成するデータ編成部と、
    生成された前記復号化データ列を出力するデータ出力部と、
    を備え、
    前記データ分配部は、前記符号化データ列の未復号化部の先頭から数えて第(N×(i−1)+1)ビット目〜第(N×(i−1)+L)ビット目までのビット列を、第i番目のユニット(i=1〜M)に分配する処理を、前記符号化データ列のすべての部分に対する復号化が完了するまで繰り返し行い、
    前記M台の復号処理ユニットは、前記二次元符号化テーブルを参照しながら、それぞれ分配された部分データから、0を示す数値データを羅列する回数を示すランレングス値と、当該0を示す数値データに後続する実データに対応する数値データと、を取り出す復号処理を行う機能を有し、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、ランレングス値および実データに対応する数値データを取り出すための処理を行い、
    前記データ編成部は、1回の並列処理によって前記M台の復号処理ユニットから処理結果が得られたときに、まず第1のユニットを最初の採択ユニットとして決定し、この採択ユニットによって正常な復号処理が行われた最終ビットを認識し、当該最終ビットの直後のビットを先頭ビットとする部分データが分配された別なユニットを新たな採択ユニットと決定する処理を、可能な限り続ける処理を行い、各採択ユニットで正常に復号化が行われた数値データを収集し、1回もしくは複数回の並列処理によってそれぞれ収集された情報に基づいて数値データを並べることにより復号化データ列を生成することを特徴とする数値データ列の復号化装置。
  26. 請求項25に記載の復号化装置において、
    M台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、ランレングス値および実データに対応する数値データを取り出すための処理を、正常な復号処理が可能な限り続行することを特徴とする数値データ列の復号化装置。
  27. 請求項25に記載の復号化装置において、
    M台の復号処理ユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、1つの単位符号データについてのランレングス値および実データに対応する数値データのみを取り出すための処理を行うことを特徴とする数値データ列の復号化装置。
  28. 請求項25に記載の復号化装置において、
    M台の復号処理ユニットのうち、第1台目〜第(M−1)台目のユニットのそれぞれが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、1つの単位符号データについてのランレングス値および実データに対応する数値データのみを取り出すための処理を行い、第M台目のユニットが、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、ランレングス値および実データに対応する数値データを取り出すための処理を、正常な復号処理が可能な限り続行することを特徴とする数値データ列の復号化装置。
  29. 請求項25〜28のいずれかに記載の復号化装置において、
    M台の復号処理ユニットのそれぞれが、0を示す数値データをランレングス値に相当する回数だけ羅列した後に実データに相当する数値データを並べることにより、元のデータを復元する処理を実行し、復元されたデータをデータ編成部に与え、
    データ編成部が、各復号処理ユニットから与えられたデータを並べることにより復号化データ列を生成することを特徴とする数値データ列の復号化装置。
  30. 請求項25〜28のいずれかに記載の復号化装置において、
    M台の復号処理ユニットのそれぞれが、取り出したランレングス値および実データに対応する数値データをそのままデータ編成部に与え、
    データ編成部が、各採択ユニットから与えられた情報に基づいて、0を示す数値データをランレングス値に相当する回数だけ羅列した後に実データに相当する数値データを並べることにより、元のデータを復元する処理を実行し、復元されたデータを並べることにより復号化データ列を生成することを特徴とする数値データ列の復号化装置。
  31. 請求項25〜30のいずれかに記載の復号化装置において、
    符号化データ列と、符号化の処理に用いた符号化テーブルと、を含むデータファイルが与えられたときに、
    データ格納部が、前記データファイルから符号化データ列を抽出して格納する処理を行い、
    テーブル格納部が、前記データファイルから符号化テーブルを抽出して格納する処理を行うことを特徴とする数値データ列の復号化装置。
  32. 請求項25〜30のいずれかに記載の復号化装置において、
    符号化データ列と、符号化の処理に用いた符号化テーブルを特定するテーブル特定情報と、を含むデータファイルが与えられたときに、
    データ格納部が、前記データファイルから符号化データ列を抽出して格納する処理を行い、
    テーブル格納部が、前記データファイルからテーブル特定情報を抽出する処理を行った後、当該テーブル特定情報によって特定されるテーブルを外部から読み込んで格納する処理を行うことを特徴とする数値データ列の復号化装置。
  33. 請求項25〜32のいずれかに記載の復号化装置において、
    M≧1+L/Nとなるような複数M台の復号処理ユニットを設けたことを特徴とする数値データ列の復号化装置。
  34. 請求項25〜33のいずれかに記載の復号化装置において、
    各復号処理ユニットが、データ編成部に対して、正常な復号処理によって得られた情報と、当該正常な復号処理に関与したビット数を示す正常処理ビット長とを報告する機能を有し、
    データ編成部が、報告された前記正常処理ビット長に基づいて採択ユニットを決定し、報告された前記情報を用いて復号化データ列を生成することを特徴とする数値データ列の復号化装置。
  35. 請求項34に記載の復号化装置において、
    データ編成部が、1回の並列処理によってM台の復号処理ユニットからの処理結果が得られるたびに、各採択ユニットから報告された正常処理ビット長を合計することにより既復号化部を認識し、これをデータ分配部に対して報告する機能を有し、
    データ分配部が、前記報告に基づいて、次回の並列処理のための未復号化部の認識を行うことを特徴とする数値データ列の復号化装置。
  36. 請求項18〜35のいずれかに記載の数値データ列の符号化装置もしくは復号化装置としてコンピュータを機能させるプログラム。
  37. 請求項18に記載の数値データ列の符号化装置をDC成分の数値データの符号化手段として用い、請求項19に記載の数値データ列の符号化装置をAC成分の数値データ列の符号化手段として用いたことを特徴とするJPEG画像用圧縮処理装置。
  38. 下記の(1) に記載の数値データ列の復号化装置をDC成分の数値データの復号化手段として用い、下記の(2) に記載の数値データ列の復号化装置をAC成分の数値データ列の復号化手段として用いたことを特徴とするJPEG画像用伸張処理装置。
    (1) 「所定のビット長を示す識別コードに後続して、当該ビット長をもつビット列からなる実データを配したデータであって、全長が所定の基準ビット長N(但し、Nは2以上の整数)の整数倍になるように設定された単位符号データ(最大ビット長Umax)」を、複数組並べることにより構成された符号化データ列について、個々の実データに対応する数値データを復元する復号化装置であって、
    復号化の対象となる符号化データ列を入力して格納するデータ格納部と、
    個々の識別コードに対応する特定のビット長を示す符号化テーブルを格納するテーブル格納部と、
    それぞれLビット(但し、LはNの整数倍、かつ、L≧Umax)の連続ビットデータに対する復号処理を並列して行う複数M台の復号処理ユニットと、
    前記M台の復号処理ユニットに対して、前記データ格納部に格納されている符号化データ列の一部を部分データとして分配するデータ分配部と、
    前記M台の復号処理ユニットによる復号処理の結果を取捨選択して、個々の実データに対応する数値データを並べた復号化データ列を生成するデータ編成部と、
    生成された前記復号化データ列を出力するデータ出力部と、
    を備え、
    前記データ分配部は、前記符号化データ列の未復号化部の先頭から数えて第(N×(i−1)+1)ビット目〜第(N×(i−1)+L)ビット目までのビット列を、第i番目のユニット(i=1〜M)に分配する処理を、前記符号化データ列のすべての部分に対する復号化が完了するまで繰り返し行い、
    前記M台の復号処理ユニットは、前記符号化テーブルを参照しながら、それぞれ分配された部分データから、実データに対応する数値データを取り出す復号処理を行う機能を有し、新たな部分データの分配が行われるたびに、分配された部分データの先頭から、実データに対応する数値データを取り出すための処理を行い、
    前記データ編成部は、1回の並列処理によって前記M台の復号処理ユニットから処理結果が得られたときに、まず第1のユニットを最初の採択ユニットとして決定し、この採択ユニットによって正常な復号処理が行われた最終ビットを認識し、当該最終ビットの直後のビットを先頭ビットとする部分データが分配された別なユニットを新たな採択ユニットと決定する処理を、可能な限り続ける処理を行い、各採択ユニットで正常に復号化が行われた数値データを収集し、1回もしくは複数回の並列処理によってそれぞれ収集された数値データを並べることにより復号化データ列を生成することを特徴とする数値データ列の復号化装置。
    (2) 請求項25〜30のいずれかに記載の数値データ列の復号化装置。
  39. 請求項4または5に記載された符号化方法で出力されたデータファイルを記録したコンピュータ読み取り可能な情報記録媒体。
JP2009268415A 2009-11-26 2009-11-26 数値データ列の符号化/復号化の方法および装置 Expired - Fee Related JP5472610B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009268415A JP5472610B2 (ja) 2009-11-26 2009-11-26 数値データ列の符号化/復号化の方法および装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009268415A JP5472610B2 (ja) 2009-11-26 2009-11-26 数値データ列の符号化/復号化の方法および装置

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2013257542A Division JP5626440B2 (ja) 2013-12-13 2013-12-13 数値データ列の符号化/復号化の方法および装置

Publications (2)

Publication Number Publication Date
JP2011114525A JP2011114525A (ja) 2011-06-09
JP5472610B2 true JP5472610B2 (ja) 2014-04-16

Family

ID=44236550

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009268415A Expired - Fee Related JP5472610B2 (ja) 2009-11-26 2009-11-26 数値データ列の符号化/復号化の方法および装置

Country Status (1)

Country Link
JP (1) JP5472610B2 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5450532B2 (ja) * 2011-08-31 2014-03-26 京楽産業.株式会社 遊技機
JP5450534B2 (ja) * 2011-08-31 2014-03-26 京楽産業.株式会社 遊技機
CN105335989B (zh) * 2014-06-11 2019-04-05 富士通株式会社 图像编码方法和图像编码装置
JP6821184B2 (ja) * 2017-02-28 2021-01-27 株式会社シキノハイテック 画像復号化装置
JP7024866B2 (ja) * 2018-06-01 2022-02-24 株式会社島津製作所 機器分析用データ処理方法及び装置
JP7685843B2 (ja) 2021-02-01 2025-05-30 三菱電機株式会社 データ圧縮装置、データ復号装置、データ復号方法及びデータ復号プログラム

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6276931A (ja) * 1985-09-30 1987-04-09 Toshiba Corp デ−タ圧縮装置
JPS62298280A (ja) * 1986-06-18 1987-12-25 Ricoh Co Ltd 画像符号化方法
JPH05207301A (ja) * 1992-01-28 1993-08-13 Mitsubishi Electric Corp ファクシミリ符号化装置
JP2646503B2 (ja) * 1992-10-14 1997-08-27 株式会社ハドソン データフォーマット
JPH07135471A (ja) * 1993-11-09 1995-05-23 Tokyo Electron Ltd データ圧縮装置およびデータ伸張装置
JPH08316844A (ja) * 1995-05-17 1996-11-29 Hitachi Ltd 符号データ復号方法および符号データ復号装置
JPH0993138A (ja) * 1995-09-27 1997-04-04 Canon Inc データ圧縮装置及びデータ復元装置
JP3676078B2 (ja) * 1998-05-07 2005-07-27 株式会社リコー ランレングス符号化方法及び圧縮装置
JP2000217003A (ja) * 1999-01-20 2000-08-04 Ricoh Co Ltd 符号化装置および復号化装置
JP3661594B2 (ja) * 2001-02-07 2005-06-15 ソニー株式会社 データストリーム生成装置とその方法、可変長符号化データストリーム生成装置とその方法、および、カメラシステム

Also Published As

Publication number Publication date
JP2011114525A (ja) 2011-06-09

Similar Documents

Publication Publication Date Title
JP5472610B2 (ja) 数値データ列の符号化/復号化の方法および装置
CN103067022B (zh) 一种整型数据无损压缩方法、解压缩方法及装置
US5818877A (en) Method for reducing storage requirements for grouped data values
JP6025923B2 (ja) 整数値データのストリームを圧縮するシステム及び方法
JP5944510B2 (ja) 構文要素のコンテキスト−適応バイナリ算術符号化(Context−AdaptiveBinaryArithmeticCoding)の方法と装置
WO2014131527A1 (en) Data encoder, data decoder and method
US7375660B1 (en) Huffman decoding method
US8682091B2 (en) Real-time image compression
JP5656593B2 (ja) 符号化データを復号する装置及び方法
Saravanan et al. Enhancing efficiency of huffman coding using Lempel Ziv coding for image compression
JP5626440B2 (ja) 数値データ列の符号化/復号化の方法および装置
KR101023536B1 (ko) 데이터 무손실 압축 방법
RU2709656C2 (ru) Кодер, декодер и способ, использующие модовые символы
EP0635807B1 (en) Coding apparatus for image compression
US7123656B1 (en) Systems and methods for video compression
Saravanan et al. Lossless grey-scale image compression using source symbols reduction and Huffman coding
JP4758494B2 (ja) ビット長を符号に変換する回路及び方法
KR101268934B1 (ko) 데이터 압축/해제장치 및 방법
van der Meer et al. JPEG file fragmentation point detection using huffman code and quantization array validation
JP6593445B2 (ja) 符号化プログラム、符号化方法、符号化装置、復号化プログラム、復号化方法および復号化装置
JP4462087B2 (ja) 符号化装置及び符号化方法
KR20210012580A (ko) 이진데이터의 압축 방법 및 장치
KR20230022289A (ko) 데이터 압축 방법 및 장치
Kim A new lossless data compression method
JP4526209B2 (ja) 可変長符号伸長方法および装置並びに可変長符号圧縮伸長方法および装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120918

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20131002

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131015

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131213

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140108

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140121

R150 Certificate of patent or registration of utility model

Ref document number: 5472610

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees