JP4373230B2 - データファイルの符号化方法 - Google Patents

データファイルの符号化方法 Download PDF

Info

Publication number
JP4373230B2
JP4373230B2 JP2004016890A JP2004016890A JP4373230B2 JP 4373230 B2 JP4373230 B2 JP 4373230B2 JP 2004016890 A JP2004016890 A JP 2004016890A JP 2004016890 A JP2004016890 A JP 2004016890A JP 4373230 B2 JP4373230 B2 JP 4373230B2
Authority
JP
Japan
Prior art keywords
block
sub
encoding
bytes
data
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
JP2004016890A
Other languages
English (en)
Other versions
JP2005210584A (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 JP2004016890A priority Critical patent/JP4373230B2/ja
Publication of JP2005210584A publication Critical patent/JP2005210584A/ja
Application granted granted Critical
Publication of JP4373230B2 publication Critical patent/JP4373230B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Description

本発明は、映像・音響制作、映像・音響データの素材保管、ロケ素材の中継など映像・音響制作分野、特にNTSC以上の品質またはCD以上の品質の高精細映像・音響制作を行う分野、コンピュータグラフィックスを用いたCGアニメーション映像制作分野、科学技術シミュレーションにおける可視化映像制作分野、CD・DVD・半導体メモリ等のデジタル記録媒体を用いた映像・音響記録再生装置分野、電子カルテや遠隔医療における医用音響信号・静止画・動画像の保存と伝送、電子文書、印刷文書、デジタル印刷製版工程における素材やページメークアップ画像データの保管と伝送、リモートセンシング・衛星画像解析・地図情報処理分野におけるデータの保管と伝送など、データの改変が嫌われる分野、バイオインフォマティクス、ゲノム創薬、バイオ新素材開発など生物情報データベースの構築、検索を行う分野等、比較的情報量の多いデータファイルを扱う際に好適なデータの圧縮技術に関する。
従来より、デジタルデータの圧縮には様々な方式が用いられている。このようなデータファイルの圧縮には、ZIP、LHA等の圧縮機能も備えたアーカイバが、汎用的に用いられている。しかしながら、ZIP、LHA等の汎用符号化プログラムでは、テキストデータの圧縮は効率的に行うことができるが、オーディオデータ・静止画データ・動画データなど、いわゆるバイナリデータの圧縮を効率的に行うことができないため、バイナリデータの圧縮を効率的に行うさまざまな手法が開発されてきている(例えば、特許文献1〜特許文献3参照)。
特開2001−325131号公報 特開2002−163180号公報 特開2002−135128号公報
しかしながら、上記特許文献1に記載の発明は、同一データブロックの重複を探索して圧縮するものであるため、自然界のサウンドや画像の圧縮には適しておらず、特許文献2に記載の発明は、ロッシー型圧縮にも適応したものであるため、ロスレス型圧縮について最適なものとなっておらず、特許文献3に記載の発明は、規則的に現れるバイトデータ群を辞書にワード登録するものであるが、対象データが16ビット単位や24ビット単位に配列されていると、規則的なワードが検出できない、等の問題がある。
そこで、本発明は、圧縮対象とするファイルのファイル形式およびデータ形式をユーザが意識せずに圧縮することが可能であり、特に画像や音声を含むデータファイルを効率的に圧縮することが可能なデータファイルの符号化方法を提供することを課題とする。
上記課題を解決するため、本発明では、与えられたデータファイルに対して、前記データファイルの総バイト数より小さい所定のバイト数のデータブロックである主ブロックを読み込む主ブロック入力段階と、前記主ブロック内のデータを、所定のバイト数k(1≦k≦K)だけ離れたバイト同士で相関演算を行い、バイト間の相関が最も高くなるときのバイト数kを、基本周期となるバイト数Kmとするバイト構成解析段階と、前記基本周期の第m(1≦m≦Km)番目のバイトだけで構成されるKm個の副ブロックに、前記主ブロックを分離するブロック分離段階と、前記分離された各副ブロックに対して、情報量を削減する符号化処理を行う副ブロック符号化段階と、前記符号化された複数の副ブロックを符号化ブロックとして出力ファイルに書き込む符号化ブロック出力段階を有し、前記主ブロック入力段階、前記バイト構成解析段階、前記ブロック分離段階、前記副ブロック符号化段階、前記符号化ブロック出力段階を繰り返し実行し、前記データファイルに対してロスレス符号化を行うようにしたことを特徴とする。
本発明によれば、符号化対象とするデータのバイト構成を解析して、解析結果に基づいて複数の副ブロックに分割し、分割した各副ブロックについて、さらに符号化を行うようにしたので、符号化対象のデータの特徴に応じて相関の高い部分について効率的に圧縮を行うことが可能となり、結果として圧縮率を高めることが可能となる。
以下、本発明の実施形態について図面を参照して詳細に説明する。
(符号化方法)
本発明に係るデータファイルの符号化方法は、コンピュータに専用のアプリケーションプログラムを搭載し、このプログラムに従ってコンピュータが実行することになる。図1は、本発明に係るデータファイルの符号化方法の概要を示すフローチャートである。まず、対象とするデータファイルからデータを所定の単位で読み込む(ステップS1)。具体的には、100kB(バイト)〜1MB程度のデータブロック単位で読み込むことになる。したがって、ステップS2以降の処理は、実際には、このデータブロック単位で行われることになる。ステップS1で読み込んだデータブロックを、後述する分離後の副ブロックと区別するために主ブロックと呼ぶことにする。続いて、読み込んだ主ブロックのバイト構成を解析する(ステップS2)。具体的には、どの程度のバイト間隔で、相関の高い部分が繰り返しているかを確認する。これは、マルチメディア・データの記録は、1バイト単位に限らず数バイト単位で行われるものが多いため、数バイト単位で相関の高い部分が繰り返されている可能性が高いために行う。実際には、主ブロックがNバイトのときに、主ブロックのバイト値B(i)(i=1,…,N)を利用して、以下の数式〔数1〕により算出されたS(k)が最小となるときのkをKmとする。この結果、その主ブロックはKmバイト単位で繰り返すバイト構成をしているということが解析される。言いかえれば、Kmバイト単位の基本周期が繰り返されているということになる。
Figure 0004373230
上記数式〔数1〕において、kは、基本周期のバイト数を探すための変数であり、設定された整数K(例えば6程度)を上限とする範囲内で、1よりKまで変化させる。すなわち、数式〔数1〕を利用してS(1)〜S(K)を算出し、これが最小値をとるkを上述のようにKmとする。
ステップS2において、主ブロックのバイト構成が解析できたら、次に、そのバイト構成に従って、主ブロックをKm個の副ブロックに分離する(ステップS3)。具体的には、第(Km×j+1)番目のバイトの集合、第(Km×j+2)番目のバイトの集合、…第(Km×j+Km)番目のバイトの集合に分離することになる。すなわち、主ブロックは、第1副ブロック〜第Km副ブロックのKm個の副ブロックに分離され、第m副ブロック(1≦m≦Km)は、元の主ブロックの第(Km×j+m)番目のバイトの集合となる。なお、jは0以上の整数、mは1以上の整数である。ここで、図2(a)に示すような配列の主ブロックを考えてみる。なお、図2(a)において、B1〜B8は先頭から1バイト目〜8バイト目のバイトを示している。このとき、Km=2であったとすると、図2(a)に示したブロックは、図2(b)に示す2つの副ブロックに分離される。すなわち、図2(a)に示す主ブロックの基本周期は2バイトと解析されるため、図2(b)に示すように、副ブロックは、基本周期の第1番目のバイトの集合と、基本周期の第2番目のバイトの集合の2つの副ブロックに分離されることになる。
図2(b)に示したような、Km=2になる典型的なデータの例としては、量子化ビット数8ビットでサンプリングしたステレオ音響信号がある。この場合、同時刻のL(左)、R(右)の信号が交互に1バイト(8ビット)で記録されるため、1バイトおきに相関が高くなる。ここで、典型的な主ブロックのバイト配列とKmの値の関係について図3に示す。図3(a)は、音楽CD仕様のオーディオデータのバイト構成である。音楽CD仕様のオーディオデータは、量子化ビット数16ビットでサンプリングしたステレオ音響信号であるため、1チャンネルの1サンプルの記録に2バイト(16ビット)必要とする。そのため、図3(a)に示すように、L、L、R、Rという順で記録されていくことになる。このため、Km=4となる。図3(b)は、高精細オーディオデータのバイト構成である。高精細オーディオデータは、量子化ビット数24ビットでサンプリングしたステレオ音響信号であるため、1チャンネルの1サンプルの記録に3バイト(24ビット)必要とする。そのため、図3(b)に示すように、L、L、L、R、R、Rという順で記録されていくことになる。このため、Km=6となる。図3(c)は、RGBフルカラー画像データのバイト構成である。RGBフルカラー画像データは、R(赤)、G(緑)、B(青)の各色8ビットで記録するため、1画素の記録に3バイト(24ビット)必要とする。そのため、図3(c)に示すように、R、G、B、R、G、Bという順で記録されていくことになる。このため、Km=3となる。図3(d)は、CMYKフルカラー画像データのバイト構成である。CMYKフルカラー画像データは、C(シアン)、M(マゼンタ)、Y(イエロー)、K(ブラック)の各色8ビットで記録するため、1画素の記録に4バイト(32ビット)必要とする。そのため、図3(d)に示すように、C、M、Y、K、C、M、Y、Kという順で記録されていくことになる。このため、Km=4となる。
続いて、分離した副ブロック間において、対応するバイトごとの差分演算を行う(ステップS4)。これは、先頭から1バイト目同士、先頭から2バイト目同士、という具合に副ブロック内の全てのバイトに対して行っていく。差分演算の結果は、一方の副ブロックのバイトの値として格納される。他方の副ブロックの各バイトの値はそのままである。ここで、図4(a)に示すような配列の2つの副ブロックを考えてみる。これは、図2(b)に示した配列と全く同じである。このような2つの副ブロックに対して、ステップS4の処理を行うと、図4(b)に示すように、第1副ブロックの値はそのままであるが、第2副ブロックの値は、差分値に置き換えられる。図4の例では、副ブロックが2つの場合について示したが、3以上の副ブロックが存在する場合には、第m副ブロックのバイト値を第(m−1)副ブロックのバイト値との差分、第(m−2)副ブロックのバイト値との差分から第1副ブロックのバイト値との差分のいずれかに置き換える処理を行う。すなわち、前に位置する副ブロックのいずれかとの差分処理を行うことになる。なお、差分値が負の値となった場合には、256を加算して0〜255の範囲に納まるように補正した値を記録する。この際、前に位置する副ブロックの中で、どの副ブロックとの差分を採用するかは、後述するヒストグラムを算出する方法により判断し、差分をとる前に比べ分散値が増大したものを採用する。いずれの場合も増大しない場合は、本差分処理の結果を採用しない。
次に、各副ブロック内において、ランレングス符号化処理を行う(ステップS5)。これは、通常のランレングス符号化と同様、同一値のバイトが連続する場合に、各バイトごとの値を、そのバイト値と、連続するバイト数に置き換えることにより行う。ここで、図5(a)に示すような配列の267バイトの副ブロックを考えてみる。ランレングス符号化処理を行う場合には、どの程度の長さ以上のものをランレングス化するかを変化させることができる。図5(b)〜図5(d)はそれぞれ、図5(a)に示した副ブロックのデータを、ランが1〜3以上の場合に符号化した例を示している。図5(b)はランが1以上、すなわち全ての値についてランレングス化する場合を示している。この場合、図5(a)に示した先頭から第1番目のバイトの値「1」は1つだけであるため、そのままデータ値部に記録され、ランレングス部には、連続する個数「1」から「1」を減じた「0」が記録される。ここで、「1」を減じるのは、データ記録の効率化のためであり、最小の長さ「1」を記録可能な最少値「0」に合わせるためである。同様にして、図5(a)に示した先頭から第2、3番目のバイトの値「2」は、その値がデータ値部に記録されると共に、ランレングス部には、連続する個数「2」から「1」を減じた「1」が記録される。また、図5(a)に示した先頭から第4〜6番目のバイトの値「3」は、その値がデータ値部に記録されると共に、ランレングス部には、連続する個数「3」から「1」を減じた「2」が記録される。また、図5(a)に示した先頭から第7〜10番目のバイトの値「4」は、その値がデータ値部に記録されると共に、ランレングス部には、連続する個数「4」から「1」を減じた「3」が記録される。図5(a)に示した先頭から第11〜267番目のバイトの値「0」は257個続くが、1バイトに記録できる数は256までであるので、2バイトにまたがって記録する必要が生じる。したがって、このような場合、データ値部には「0」が2バイト連続して記録される。一方、ランレングス部においても、257続くランを「256」と「1」に分離し、それぞれから「1」を減じた「255」と「0」が記録される。図5(b)の例では、データ値部6バイト、ランレングス部6バイトの計12バイトに圧縮されることになる。
図5(c)はランが2以上の値についてランレングス化する場合を示している。この場合、図5(a)に示した先頭から第1番目のバイトの値「1」は1つだけであるため、そのままデータ値部に記録され、ランレングス部には、記録されない。図5(a)に示した先頭から第2、3番目のバイトの値「2」は、その値がデータ値部に2個記録されると共に、ランが2となるため、ランレングス部には、連続する個数「2」から「2」を減じた「0」が記録される。ここで、「2」を減じるのも、データ記録の効率化のためであり、最小の長さ「2」を記録可能な最少値「0」に合わせるためである。また、図5(a)に示した先頭から第4〜6番目のバイトの値「3」は、その値がデータ値部に2個記録されると共に、ランレングス部には、連続する個数「3」から「2」を減じた「1」が記録される。また、図5(a)に示した先頭から第7〜10番目のバイトの値「4」は、その値がデータ値部に2個記録されると共に、ランレングス部には、連続する個数「4」から「2」を減じた「2」が記録される。図5(a)に示した先頭から第11〜267番目のバイトの値「0」は257個続くが、図5(c)の例では、2以上の長さのみ記録するため、257個は1バイトで記録可能である。したがって、データ値部には「0」が2個記録され、ランレングス部には、連続する個数「257」から「2」を減じた「255」が記録される。図5(c)の例では、データ値部9バイト、ランレングス部4バイトの計13バイトに圧縮されることになる。
図5(d)はランが3以上の値についてランレングス化する場合を示している。この場合、図5(a)に示した先頭から第1番目のバイトの値「1」は1つだけであるため、そのままデータ値部に記録され、ランレングス部には記録されない。図5(a)に示した先頭から第2、3番目のバイトの値「2」も、そのままデータ値部に2個記録され、ランレングス部には記録されない。また、図5(a)に示した先頭から第4〜6番目のバイトの値「3」は、その値がデータ値部に3個記録されると共に、ランレングス部には、連続する個数「3」から「3」を減じた「0」が記録される。ここで、「3」を減じるのも、データ記録の効率化のためであり、最小の長さ「3」を記録可能な最少値「0」に合わせるためである。また、図5(a)に示した先頭から第7〜10番目のバイトの値「4」は、その値がデータ値部に3個記録されると共に、ランレングス部には、連続する個数「4」から「3」を減じた「1」が記録される。図5(a)に示した先頭から第11〜267番目のバイトの値「0」は257個続くが、図5(d)の例では、3以上の長さのみ記録するため、257個は1バイトで記録可能である。したがって、データ値部には「0」が3個記録され、ランレングス部には、連続する個数「257」から「3」を減じた「254」が記録される。図5(d)の例では、データ値部12バイト、ランレングス部3バイトの計15バイトに圧縮されることになる。
上記3つのモード(ランがどれだけ以上続いた場合にランレングス化するか)のいずれを適用するかについては、あらかじめ1つを設定しておいても良いし、3つのモードそれぞれを行って、その結果最も圧縮率が高くなるものを選ぶようにしてもよい。例えば、上記の例では、図5(b)に示したようにランが1以上のモードの場合にランレングス化する場合が最もデータ量が少なくなるため、ランが1以上の場合にランレングス化した結果が採用される。いずれのモードを適用すると最も効率的であるかは、圧縮対象とされるデータにより異なる。いずれのモードを選択した場合であっても、復号のために、どのモードにより符号化しておくかを記録する。どのモードで符号化したかは、後述する処理パラメータに記憶しておく。
次に、図6(a)に示すような配列の267バイトの副ブロックを考えてみる。図6(b)〜図6(d)はそれぞれ、図6(a)に示した副ブロックのデータを、ランが1〜3以上の場合に符号化した例を示している。図6(b)はランが1以上、すなわち全ての値についてランレングス化する場合を示している。この場合、図6(a)に示した先頭から順に1バイトずつ値が変化しているため、各値はそのままデータ値部に順に記録され、ランレングス部には、連続する個数「1」から「1」を減じた「0」が順に記録される。図6(a)に示した先頭から第9、10番目のバイトの値「1」は、その値がデータ値部に記録されると共に、ランレングス部には、連続する個数「2」から「1」を減じた「1」が記録される。図6(a)に示した先頭から第11〜267番目のバイトの値「0」は257個続くため、図5(b)に示した場合と同様に、データ値部には「0」が2バイト連続して記録され、ランレングス部においては、「255」と「0」が記録される。図6(b)の例では、データ値部11バイト、ランレングス部11バイトの計22バイトに圧縮されることになる。
図6(c)はランが2以上の値についてランレングス化する場合を示している。この場合、図6(a)に示した先頭から第8番目のバイトまでは、全てランが1であるため、各値がそのまま順にデータ値部に記録され、ランレングス部には記録されない。図6(a)に示した先頭から第9、10番目のバイトの値「1」は、その値がデータ値部に2個記録されると共に、ランが2となるため、ランレングス部には、連続する個数「2」から「2」を減じた「0」が記録される。また、図6(a)に示した先頭から第11〜267番目のバイトの値「0」は257個続くため、図5(c)の場合と同様に、データ値部には「0」が2個記録され、ランレングス部には、連続する個数「257」から「2」を減じた「255」が記録される。図6(c)の例では、データ値部12バイト、ランレングス部2バイトの計14バイトに圧縮されることになる。
図6(d)はランが3以上の値についてランレングス化する場合を示している。この場合、図6(a)に示した先頭から第8番目のバイトまでは全てランが1であるため、各値がそのまま順にデータ値部に記録され、ランレングス部には記録されない。図6(a)に示した先頭から第9、10番目のバイトの値「1」も、そのままデータ値部に2個記録され、ランレングス部には記録されない。図6(a)に示した先頭から第11〜267番目のバイトの値「0」は257個続くため、図5(d)に示した場合と同様に、データ値部には「0」が3個記録され、ランレングス部には、連続する個数「257」から「3」を減じた「254」が記録される。図6(d)の例では、データ値部13バイト、ランレングス部1バイトの計14バイトに圧縮されることになる。図6(a)に示したデータに対しては、図6(c)、図6(d)に示したようにランが2以上の場合にランレングス化する場合、もしくはランが3以上の場合にランレングス化する場合が最もデータ量が少なくなるため、このどちらかの結果が採用される。
次に、各副ブロック内において連続するバイトの差分演算処理を行う(ステップS6)。具体的には、連続する2つのバイトの差分を演算し、後方のバイト値を更新する前の直前のバイト値との差分値で置き換える処理を副ブロック内の全てのバイトに対して行い、第1バイト目を除く全てのバイトが更新される。
さらに、上記ステップS6による処理後の各副ブロック内において連続するバイトの差分演算処理を行う(ステップS7)。すなわち、ステップS6で行った処理をもう1度繰り返すことになる。この結果、各バイトには、2バイト離れたバイトの値に影響された値が記録されることになる。これは、過去2サンプルを基に算出された線形予測誤差に類似の効果を得るために行われる。ステップS6、ステップS7における処理は、単なる差分演算であるので、線形予測誤差を算出するのに比べて精度は落ちるが演算負荷を削減することができる。なお、ステップS6、ステップS7における差分値が負の値となった場合には、256を加算して0〜255の範囲に納まるように補正した値を記録する。
以上のような処理の結果得られた各副ブロック(データ値ブロックおよびランレングスブロック)に対して、可変長符号化処理を行う(ステップS8)。この可変長符号化処理としては、ZIP、LHA(Lampel Ziv+Huffman方式)、PPM(Predicted by Partial Match)、Golomb-Rice等のある情報を記録するために必要な平均ビット数を削減する公知の種々の符号化方式が適用可能である。
可変長符号化が行われたら、その結果得られる副ブロックをまとめて符号化ブロックとして、出力ファイルに書き込んでいく(ステップS9)。上記ステップS1〜ステップS9の処理を各主ブロック単位で処理することにより、元のデータファイルがロスレス圧縮された符号化ファイルが得られることになる。この符号化ファイルは、符号化ブロック単位で記録されている。
上記、ステップS3〜ステップS8の各処理については、全てを実行するようにしても良いが、その処理を行うことによって、反ってデータ量が増えてしまう場合には、その処理を省略するようにすることが望ましい。そこで、本発明では、各ステップにおける処理前と処理後のデータに基づいて所定の判断を行い、各ステップの結果を活かすかどうかの決定を行っている。基本的には、処理前のデータ量と処理後のデータ量を比較して、データ量の小さい方を採用するようにすれば良いが、ステップS4、ステップS6、ステップS7の処理については、各処理を行うことにより、各段階ではデータ量は変化せず、後段のステップS8の可変長符号化の段階で圧縮率に効果(または逆効果)が生じる。そこで、各段階ごとにステップ8を実行して逐次データ量の変化を調べる方法も考えられるが、処理負荷を軽減するため、以下分散を利用して推定判断する方法を提案する。与えられた副ブロックのデータのヒストグラムを算出して、分布がバイト値0またはバイト値255の両末端に偏ると、即ち平均値128に対する分散値が大きいと、ステップ8による可変長符号化により圧縮率が高くなることが判っている。具体的には、差分を計算して、データが0近辺の値になると、負値は255近辺の値に補正するようにしているため、0または255の両末端のデータが多くなり、圧縮率が増大する。分散を利用した判断の具体的な例について、図7のフローチャートを用いて説明する。
まず、副ブロックのバイト値のヒストグラムを算出し、平均値に対する分散を算出する(ステップS11)。一方、差分処理後の副ブロックのバイト値のヒストグラムを算出し、平均値に対する分散を算出する(ステップS12)。続いて、2つの分散を比較する(ステップS13)。この結果、分散が大きい方のデータを採用する。すなわち、差分処理前の副ブロックに基づく分散が大きい場合は、差分処理前の副ブロックのデータを以降利用することとし(ステップS14)、差分処理後の副ブロックに基づく分散が大きい場合は、差分処理後の副ブロックのデータを以降利用することとする(ステップS15)。したがって、差分処理前の副ブロックに基づく分散が大きい場合は、差分処理を行わなかったのと同じこととなる。
なお、上記ステップS11においては、バイト値Bm(j)(j=1,2,…N/Km:Nはブロックのバイト数)に対して分散σm0が算出される。また、ステップS12においては、バイト差分値Dm(j)(j=1,2,…N/Km:Nはブロックのバイト数)に対して分散σmdが算出される。なお、kはブロック番号である。Dm(j)は、副ブロック間における差分の場合と、各副ブロック内における差分の場合とで異なる。副ブロック間における差分の場合、Dm(j)=Bm(j)−Bm(j−1)であり、各副ブロック内における差分の場合、Dm(j)=Bm(j)−Bm-1(j)である。なお、Dm(j)<0の場合は、Dm(j)に256を加えて正の値となるようにする。
各ステップの処理を行ったか否かの情報は、処理パラメータに記録されていく。各ステップの処理を行ったか否かの情報は、例えば行った場合は「1」、行わなかった場合は「0」とすることで各ステップについて1ビットで記録可能であるので、処理パラメータ自体は数ビット程度で済むことになる。各ステップの処理を行うか否かは、各主ブロックのデータにより異なるので、処理パラメータは各主ブロックごとに記録されることになる。
(復号処理)
次に、上記符号化方法により符号化した符号化ファイルからソースファイルを復元する復号方法について説明する。この復号方法も、符号化方法と同様に、コンピュータに専用のアプリケーションプログラムを搭載し、このプログラムに従ってコンピュータが実行することになる。図8は、データファイルの復号方法の概要を示すフローチャートである。まず、符号化ファイルからソースファイルの1ブロックに対応した符号化ブロックを読み込む(ステップS21)。符号化ブロックの長さは、ブロックごとに異なるが、先頭にブロック長が記録されているため、復号するコンピュータは、符号化ブロックを認識して処理することができる。したがって、ステップS22以降の処理は、実際には、この符号化ブロック単位で行われることになる。この符号化ブロックには、上述のように、符号化主ブロックと処理パラメータが記録されている。続いて、符号化主ブロックを構成する各符号化副ブロックの可変長から固定長への復号処理を行う(ステップS22)。具体的には、各符号化副ブロック(データ値ブロックおよびランレングスブロック)に対して、ステップS8で行った方式の可変長符号化処理に対応した復号処理を行う。
続いて、各副ブロック内において連続するバイトの差分復元処理を行う(ステップS23)。具体的には、連続する2つのバイトに対して、上記ステップS7で行ったのと逆の処理を行う。
次に、各副ブロック内において連続するバイトの差分復元処理を行う(ステップS24)。具体的には、上記ステップS23と同様、連続する2つのバイトに対して、上記ステップS6で行ったのと逆の処理を行う。
次に、各副ブロック内においてランレングス復号処理を行う(ステップS25)。具体的には、上記ステップS5で行ったのと逆の処理を行う。すなわち、符号化時の規則に基づいて、データ値部のバイト値とランレングス部のバイト値から、元の形式の副ブロックを復元する。
次に、各副ブロック間の差分復元処理を行う(ステップS26)。具体的には、上記ステップS4で行ったのと逆の処理を行う。すなわち、各副の先頭から1バイト目同士、先頭から2バイト目同士、という具合に副ブロック内の全てのバイトに対してバイト同士の値の加算を行い、加算した結果は、差分値が記録されていた副ブロックのバイトの値として格納される。他方の副ブロックの各バイトの値はそのままである。この結果、図4(b)に示したような配列の2つの副ブロックの値が、図4(a)に示すような配列の2つの副ブロックに復元される。
次に、各副ブロックを統合して主ブロックを復元する(ステップS27)。具体的には、上記ステップS3で行ったのと逆の処理を行う。すなわち、各副ブロックの先頭から順にバイトデータを並べて一つの主ブロックとする処理を行うことになる。この結果、例えばKm=2の場合、図2(b)に示したような2つの副ブロックが、図2(a)に示すような配列の主ブロックに統合されることになる。
主ブロックが復元されたら、その主ブロックを出力ファイルに書き込んでいく(ステップS28)。上記ステップS21〜ステップS28の処理を各符号化ブロック単位で処理することにより、圧縮符号化前の元のデータファイルが復元されることになる。
上記、ステップS22〜ステップS27の各処理については、符号化時にステップS3〜ステップS8の処理を行った場合にのみ実行される。そのため、図6のフローチャートに示した判断に基づいて、各処理を行った場合には、その際に記録された処理パラメータに従って、復号処理を行うことになる。この場合、上記ステップS21において処理パラメータを読み込み、その処理パラメータに処理を行った旨の情報が記録されているステップについてのみ復号処理を行うようにする。
以上、本発明の好ましい実施形態について説明したが、本発明は上記実施形態に限定されず、種々の変形が可能である。例えば、上記実施形態では、主ブロックを複数の副ブロックに分離した後、各副ブロックに対してステップS4〜ステップS8の各処理を行っているが、これらの処理は、必ずしも全て行う必要はなく、少なくとも1つ以上を実行するようにすれば良い。
本発明に係るデータファイルの符号化方法の概要を示すフローチャートである。 主ブロックを複数の副ブロックに分離した状態を示す図である。 典型的な主ブロックのバイト配列を示す図である。 副ブロック間における差分演算を示す図である。 ランレングス符号化処理の一例を示す図である。 ランレングス符号化処理の異なる例を示す図である。 各処理前後のどちらのデータを利用するかの判断処理を示すフローチャートである。 データファイルの復号方法の概要を示すフローチャートである。

Claims (13)

  1. 与えられたデータファイルに対して、前記データファイルの総バイト数より小さい所定のバイト数のデータブロックである主ブロックを読み込む主ブロック入力段階と、
    前記主ブロック内のデータを、所定のバイト数k(1≦k≦K)だけ離れたバイト同士で相関演算を行い、バイト間の相関が最も高くなるときのバイト数kを、基本周期となるバイト数Kmとするバイト構成解析段階と、
    前記基本周期の第m(1≦m≦Km)番目のバイトだけで構成されるKm個の副ブロックに、前記主ブロックを分離するブロック分離段階と、
    前記分離された各副ブロックに対して、情報量を削減する符号化処理を行う副ブロック符号化段階と、
    前記符号化された複数の副ブロックを符号化ブロックとして出力ファイルに書き込む符号化ブロック出力段階と、を有し、
    前記主ブロック入力段階、前記バイト構成解析段階、前記ブロック分離段階、前記副ブロック符号化段階、前記符号化ブロック出力段階を繰り返し実行し、前記データファイルに対してロスレス符号化を行うことを特徴とするデータファイルの符号化方法。
  2. 請求項1において、
    前記副ブロック符号化段階が、前記各副ブロックに対してランレングス符号化を行い、各副ブロックをデータ値部とランレングス部の2つの要素ブロックに分離するランレングス符号化段階を有し、前記符号化ブロック出力段階については2つの要素ブロックをまとめて副ブロックとして扱うものとしていることを特徴とするデータファイルの符号化方法。
  3. 請求項2において、
    前記ランレングス符号化段階において生成される2つの要素ブロックの総バイト数が、当該ランレングス符号化段階による処理前の対応する副ブロックのバイト数に比べて減少しない場合、前記符号化ブロック出力段階については前記ランレングス符号化段階による処理前の副ブロックに対して行うものとしていることを特徴とするデータファイルの符号化方法。
  4. 請求項2において、
    前記ランレングス符号化段階が、ランレングス符号化を実行するため最小のランの長さ別の符号化モードを設定し、各符号化モードによりランレングス符号化された前記2つの要素ブロックのうち、その総バイト数が最小となる2つの要素ブロックを、前記符号化ブロック出力段階について副ブロックとして扱うものとすることを特徴とするデータファイルの符号化方法。
  5. 請求項1において、
    前記副ブロック符号化段階が、第m番目のバイト(m>1)で構成される各副ブロックの各バイトデータに対して、第(m−1)番目のバイト以下で構成される副ブロックのいずれかに対応する各バイトデータとの差分値に置換するブロック間差分段階を有していることを特徴とするデータファイルの符号化方法。
  6. 請求項1において、
    前記副ブロック符号化段階が、各副ブロックの各バイトデータを、その直前に位置するバイトデータとの差分値に置換するブロック内差分段階を有していることを特徴とするデータファイルの符号化方法。
  7. 請求項6において、
    前記ブロック内差分段階を所定の回数だけ繰り返す処理を行うことを特徴とするデータファイルの符号化方法。
  8. 請求項5または請求項6において、
    前記ブロック間差分段階または前記ブロック内差分段階において得られる差分値が負値である場合、256を加えて0〜255の範囲に納める補正処理を行うことを特徴とするデータファイルの符号化方法。
  9. 請求項5または請求項6において、
    前記ブロック間差分段階または前記ブロック内差分段階による処理前後の副ブロックのバイトデータに対して、値の出現頻度を示すヒストグラムを算出し、ヒストグラムの分散値が処理前と比較して増大しない場合、前記ブロック間差分段階または前記ブロック内差分段階による処理前の副ブロックに対して前記符号化ブロック出力段階を行うこととすることを特徴とするデータファイルの符号化方法。
  10. 請求項1において、
    前記副ブロック符号化段階が、バイトデータの出現頻度に基づいて頻度の高いデータほど短いビット長を割り当てる可変長符号化を行うものであることを特徴とするデータファイルの符号化方法。
  11. 請求項1から請求項9のいずれかにおいて、
    前記符号化ブロック出力段階で書き込まれる前記出力ファイルに対して、可逆圧縮方式によりさらに符号化を行うことを特徴とするデータファイルの符号化方法。
  12. 与えられたデータファイルに対して、請求項1から請求項11のいずれかに記載の符号化方法における前記符号化ブロック出力段階で書き込まれる前記出力ファイルを記録したコンピュータで読み取り可能な記録媒体。
  13. コンピュータに、
    与えられたデータファイルに対して、前記データファイルの総バイト数より小さい所定のバイト数のデータブロックである主ブロックを読み込む主ブロック入力段階と、
    前記主ブロック内のデータを、所定のバイト数k(1≦k≦K)だけ離れたバイト同士で相関演算を行い、バイト間の相関が最も高くなるときのバイト数kを、基本周期となるバイト数Kmとするバイト構成解析段階と、
    前記基本周期の第m(1≦m≦Km)番目のバイトだけで構成されるKm個の副ブロックに、前記主ブロックを分離するブロック分離段階と、
    前記分離された各副ブロックに対して、情報量を削減する符号化処理を行う副ブロック符号化段階と、
    前記符号化された複数の副ブロックを符号化ブロックとして出力ファイルに書き込む符号化ブロック出力段階を実行させ、
    前記主ブロック入力段階、前記バイト構成解析段階、前記ブロック分離段階、前記副ブロック符号化段階、前記符号化ブロック出力段階を繰り返し実行させることにより、前記データファイルに対してロスレス符号化を行うためのプログラム。
JP2004016890A 2004-01-26 2004-01-26 データファイルの符号化方法 Expired - Fee Related JP4373230B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2004016890A JP4373230B2 (ja) 2004-01-26 2004-01-26 データファイルの符号化方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004016890A JP4373230B2 (ja) 2004-01-26 2004-01-26 データファイルの符号化方法

Publications (2)

Publication Number Publication Date
JP2005210584A JP2005210584A (ja) 2005-08-04
JP4373230B2 true JP4373230B2 (ja) 2009-11-25

Family

ID=34901898

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004016890A Expired - Fee Related JP4373230B2 (ja) 2004-01-26 2004-01-26 データファイルの符号化方法

Country Status (1)

Country Link
JP (1) JP4373230B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10000187B2 (en) 2014-06-26 2018-06-19 Sumitomo Wiring Systems, Ltd. Vehicle communication system, in-vehicle device, portable device, and computer program

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6405667B2 (ja) * 2014-03-31 2018-10-17 ヤマハ株式会社 データ復元装置、およびデータ生成方法
US10142636B2 (en) * 2014-06-09 2018-11-27 Sony Corporation Communication system with coding mechanism and method of operation thereof

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10000187B2 (en) 2014-06-26 2018-06-19 Sumitomo Wiring Systems, Ltd. Vehicle communication system, in-vehicle device, portable device, and computer program

Also Published As

Publication number Publication date
JP2005210584A (ja) 2005-08-04

Similar Documents

Publication Publication Date Title
KR20070090165A (ko) 디지털 이미지의 무손실 압축을 위한 시스템 및 방법
US7502514B2 (en) System and method for lossless compression of already compressed files
JP5103479B2 (ja) メディアデータに電子透かしを付与する方法
JP3284932B2 (ja) 画像処理装置
JP2003244446A5 (ja)
CN1713710B (zh) 图像处理装置和图像处理方法
WO2021145105A1 (ja) データ圧縮装置、およびデータ圧縮方法
JP4373230B2 (ja) データファイルの符号化方法
JP2014212374A (ja) 画像符号化装置、画像符号化方法、画像符号化プログラムおよび記録媒体
JP4124366B2 (ja) 電子透かしの埋め込み方法および抽出方法
JP2005516495A5 (ja)
JP3672143B2 (ja) 電子すかし作成方法
JP4334940B2 (ja) データファイルの圧縮方法
JP4139704B2 (ja) 時系列信号の符号化装置および復号装置
JP4256364B2 (ja) 信号符号化装置、信号符号化方法、信号符号化プログラム、および記録媒体
JP2864968B2 (ja) データ配列方法及び記録媒体
JP2006060490A (ja) 画像圧縮装置および画像圧縮プログラム
JP4705685B2 (ja) 信号の符号化装置、復号化装置、方法、プログラム、および記録媒体
JP4184817B2 (ja) 時系列信号の符号化方法および装置
JP3889738B2 (ja) 逆量子化装置、オーディオ復号化装置、画像復号化装置、逆量子化方法および逆量子化プログラム
JP4743884B2 (ja) 画像符号化装置及びその制御方法
JP2005045527A (ja) 静止画像の圧縮方法および映像信号の圧縮方法
JP2004112658A (ja) コンテンツの符号化方法および復号化方法
JP5108514B2 (ja) デジタルオーディオファイル,イメージファイル,又はビデオファイルのサイズ縮小方法
JP2010278650A (ja) 画像圧縮処理装置、画像形成装置、コンピュータプログラム、記録媒体及び画像圧縮方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20061226

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20090515

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090527

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090724

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: 20090807

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20090903

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120911

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4373230

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120911

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130911

Year of fee payment: 4

LAPS Cancellation because of no payment of annual fees