説明

データ圧縮装置、データ復号装置、データ圧縮方法、データ復号方法およびデータ圧縮および復号システム

【課題】通信効率を向上することができる。
【解決手段】入力部240は、複数の値が含まれる数値列を構成する符号化対象データを入力する。記憶部2410は、符号化対象データのうち、0ではない値をvalue符号化対象データとして記憶し、0ではない値と、他の0ではない値との間に、0である値が連続している個数をrunz符号化対象データとして記憶する。符号化部242は、runz符号化対象データを第1のハフマンテーブルを用いて符号化するとともに、value符号化対象データを第1のハフマンテーブルとは異なる第2のハフマンテーブルを用いて符号化する。送信部は符号化部242が符号化した符号化データを送信する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データ圧縮装置、データ復号装置、データ圧縮方法、データ復号方法およびデータ圧縮および復号システムに関する。
【背景技術】
【0002】
JPEGで用いられるハフマン符号化のAC成分処理では、「0」係数の長さ(ゼロランレングス)を求め、「0」以外の係数(有効係数)のときに、ゼロランレングスと有効係数のグループでハフマン符号を割り当てる手法が知られている(例えば、特許文献1参照)。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開平6−139346号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、上述した手法では、量子化後のビット長が増えるほどAC係数の最大値が大きくなるので、AC係数を特定するためのグループ数が増加する。そのため、グループを符号化するための符号種類も増加する。符号種類が増加すると、データ長の変動が激しくなり、データ量のとり得る範囲が広がってしまう。また、固定長データを送受信するシステムでは、データ圧縮を固定長に変換して送信する必要がある。従って、固定長データを送受信するシステムにおいて、上述した手法でハフマン符号化したデータの送受信を行う際には、ハフマン符号化後のデータの最大ビット長を固定長と定める必要があり、量子化後のビット長が短い場合であっても無駄なデータを送信しなければならず、通信効率を向上することができないという問題がある。
【0005】
本発明は、上記事情に鑑みてなされたものであり、通信効率を向上することができるデータ圧縮装置、データ復号装置、データ圧縮方法、データ復号方法およびデータ圧縮および復号システムを提供することを目的とする。
【課題を解決するための手段】
【0006】
本発明は、複数の値が含まれる数値列を構成する符号化対象データを入力する入力部と、前記符号化対象データのうち、0ではない前記値をvalue符号化対象データとして記憶するvalue記憶部と、0ではない前記値と、他の0ではない前記値との間に、0である前記値が連続している個数をrunz符号化対象データとして記憶するrunz記憶部と、前記runz符号化対象データを第1のハフマンテーブルを用いて符号化するとともに、前記value符号化対象データを前記第1のハフマンテーブルとは異なる第2のハフマンテーブルを用いて符号化する符号化部と、前記符号化部が符号化した符号化データを送信する送信部と、を有することを特徴とするデータ圧縮装置である。
【0007】
また、本発明は、連続する、0ではない前記値の個数をrunv符号化対象データとして記憶するrunv記憶部を有し、前記runz記憶部は、0である前記値が連続している個数が0個の場合、当該個数を前記runz符号化対象データとして記憶せず、前記value記憶部は、連続する、0ではない前記値の組を、前記value符号化対象データとして記憶し、前記符号化部は、前記runv符号化対象データを前記第1及び前記第2のハフマンテーブルとは異なる第3のハフマンテーブルを用いて符号化することを特徴とするデータ圧縮装置である。
【0008】
また、本発明のデータ圧縮装置において、前記value記憶部と、前記runz記憶部と、前記runv記憶部とは、連続する0である値の個数が1個の場合のみ、0である当該値を0ではない前記値とみなして、前記value符号化対象データと、前記runz符号化対象データと、前記runv符号化対象データとを記憶することを特徴とする。
【0009】
また、本発明は、データ圧縮装置から送信される前記符号化データを受信する受信部と、前記第1のハフマンテーブルを用いて符号化された前記runz符号化対象データを、前記第1のハフマンテーブルを用いて復号化し、前記第2のハフマンテーブルを用いて符号化された前記value符号化対象データを、前記第2のハフマンテーブルを用いて復号化する復号化部と、復号化された前記runz符号化対象データと、復号化された前記value符号化対象データとに基づいて、前記符号化対象データを算出する算出部と、を有することを特徴とするデータ復号装置である。
【0010】
また、本発明は、データ圧縮装置から送信される前記符号化データを受信する受信部と、前記第1のハフマンテーブルを用いて符号化された前記runz符号化対象データを、前記第1のハフマンテーブルを用いて復号化し、前記第2のハフマンテーブルを用いて符号化された前記value符号化対象データを、前記第2のハフマンテーブルを用いて復号化し、前記第3のハフマンテーブルを用いて符号化された前記runv符号化対象データを、前記第3のハフマンテーブルを用いて復号化する復号化部と、復号化された前記runz符号化対象データと、復号化された前記value符号化対象データと、復号化された前記runv符号化対象データとに基づいて、前記符号化対象データを算出する算出部と、を有することを特徴とするデータ復号装置である。
【0011】
また、本発明は、データ圧縮装置から送信される前記符号化データを受信する受信部と、前記第1のハフマンテーブルを用いて符号化された前記runz符号化対象データを、前記第1のハフマンテーブルを用いて復号化し、前記第2のハフマンテーブルを用いて符号化された前記value符号化対象データを、前記第2のハフマンテーブルを用いて復号化し、前記第3のハフマンテーブルを用いて符号化された前記runv符号化対象データを、前記第3のハフマンテーブルを用いて復号化する復号化部と、復号化された前記runz符号化対象データと、復号化された前記value符号化対象データと、復号化された前記runv符号化対象データとに基づいて、前記符号化対象データを算出する算出部と、を有することを特徴とするデータ復号装置である。
【0012】
また、本発明は、複数の値が含まれる数値列を構成する符号化対象データを入力するステップと、前記符号化対象データのうち、0ではない前記値をvalue符号化対象データとして記憶するステップと、0ではない前記値と、他の0ではない前記値との間に、0である前記値が連続している個数をrunz符号化対象データとして記憶するステップと、前記runz符号化対象データを第1のハフマンテーブルを用いて符号化するとともに、前記value符号化対象データを前記第1のハフマンテーブルとは異なる第2のハフマンテーブルを用いて符号化する符号化ステップと、前記符号化ステップで符号化した符号化データを送信するステップと、を含むことを特徴とするデータ圧縮方法である。
【0013】
また、本発明は、データ圧縮方法で符号化されたデータを受信するステップと、前記第1のハフマンテーブルを用いて符号化された前記runz符号化対象データを、前記第1のハフマンテーブルを用いて復号化し、前記第2のハフマンテーブルを用いて符号化された前記value符号化対象データを、前記第2のハフマンテーブルを用いて復号化するステップと、復号化された前記runz符号化対象データと、復号化された前記value符号化対象データとに基づいて、前記符号化対象データを算出するステップと、を含むことを特徴とするデータ復号方法である。
【0014】
また、本発明は、複数の値が含まれる数値列を構成する符号化対象データを入力する入力部と、前記符号化対象データのうち、0ではない前記値をvalue符号化対象データとして記憶するvalue記憶部と、0ではない前記値と、他の0ではない前記値との間に、0である前記値が連続している個数をrunz符号化対象データとして記憶するrunz記憶部と、前記runz符号化対象データを第1のハフマンテーブルを用いて符号化するとともに、前記value符号化対象データを前記第1のハフマンテーブルとは異なる第2のハフマンテーブルを用いて符号化する符号化部と、前記符号化部が符号化した符号化データを送信する送信部と、を有するデータ圧縮装置と、前記送信部から送信される前記符号化データを受信する受信部と、前記第1のハフマンテーブルを用いて符号化された前記runz符号化対象データを、前記第1のハフマンテーブルを用いて復号化し、前記第2のハフマンテーブルを用いて符号化された前記value符号化対象データを、前記第2のハフマンテーブルを用いて復号化する復号化部と、復号化された前記runz符号化対象データと、復号化された前記value符号化対象データとに基づいて、前記符号化対象データを算出する算出部と、を有するデータ復号装置と、を有することを特徴とするデータ圧縮および復号システムである。
【発明の効果】
【0015】
本発明のデータ圧縮装置またはデータ圧縮方法によれば、複数の値が含まれる数値列を構成する符号化対象データのうち、0ではない値をvalue符号化対象データとして記憶し、0ではない値と、他の0ではない値との間に、0である値が連続している個数をrunz符号化対象データとして記憶し、runz符号化対象データを第1のハフマンテーブルを用いて符号化するとともに、value符号化対象データを第1のハフマンテーブルとは異なる第2のハフマンテーブルを用いて符号化し、符号化した符号化データを送信する。
【0016】
これにより、1次元のハフマンテーブルを用いて符号化を行うため、符号種類が少なくなる。符号種類が少なくなると、ハフマン符号化後の最大ビット長も短くなる。よって、固定長データを送受信する通信方式でデータを送信する際に、固定長を短くすることができ、通信効率を向上することができる。
【0017】
また、本発明のデータ復号装置またはデータ復号方法によれば、1次元の第1のハフマンテーブルを用いて符号化されたrunz符号化対象データと、1次元の第2のハフマンテーブルを用いて符号化されたvalue符号化対象データとを受信し、runz符号化対象データを、第1のハフマンテーブルを用いて復号化し、value符号化対象データを、第2のハフマンテーブルを用いて復号化し、復号化されたrunz符号化対象データと、復号化されたvalue符号化対象データとに基づいて、符号化対象データを算出する。
【0018】
これにより、1次元のハフマンテーブルを用いて復号化を行うため、符号種類が少なくなる。符号種類が少なくなると、ハフマン符号化後の最大ビット長も短くなる。よって、固定長データを送受信する通信方式でデータを受信する際に、固定長を短くすることができ、通信効率を向上することができる。
【0019】
また、本発明のデータ圧縮および復号システムによれば、データ圧縮装置は、複数の値が含まれる数値列を構成する符号化対象データのうち、0ではない値をvalue符号化対象データとして記憶し、0ではない値と、他の0ではない値との間に、0である値が連続している個数をrunz符号化対象データとして記憶し、runz符号化対象データを第1のハフマンテーブルを用いて符号化するとともに、value符号化対象データを第1のハフマンテーブルとは異なる第2のハフマンテーブルを用いて符号化し、符号化した符号化データを送信する。また、データ復号装置は、1次元の第1のハフマンテーブルを用いて符号化されたrunz符号化対象データと、1次元の第2のハフマンテーブルを用いて符号化されたvalue符号化対象データとを受信し、runz符号化対象データを、第1のハフマンテーブルを用いて復号化し、value符号化対象データを、第2のハフマンテーブルを用いて復号化し、復号化されたrunz符号化対象データと、復号化されたvalue符号化対象データとに基づいて、符号化対象データを算出する。
【0020】
これにより、1次元のハフマンテーブルを用いて符号化および復号化を行うため、符号種類が少なくなる。符号種類が少なくなると、ハフマン符号化後の最大ビット長も短くなる。よって、固定長データを送受信する通信方式でデータを送受信する際に、固定長を短くすることができ、通信効率を向上することができる。
【図面の簡単な説明】
【0021】
【図1】本発明の第1の実施形態におけるデータ圧縮および復号システムの構成を示したブロック図である。
【図2】本発明の第1の実施形態における圧縮部の構成を示したブロック図である。
【図3】本発明の第1の実施形態における伸張部の構成を示したブロック図である。
【図4】本発明の第1の実施形態におけるゼロランレングス符号化の具体例を示した説明図である。
【図5】本発明の第1の実施形態における本実施形態における記憶部が記憶する量子化スケールとハフマンテーブルの種類との関連を一意に特定する関連テーブルを示した概略図である。
【図6】本発明の第1の実施形態におけるrunzと、valueと、groupとの値を纏めた概略図である。
【図7】本発明の第1の実施形態におけるハフマン符号化部の構成を示したブロック図である。
【図8】本発明の第1の実施形態における判定部の処理手順を示したフローチャートである。
【図9】本発明の第1の実施形態における符号化部の処理手順を示したフローチャートである。
【図10】本発明の第1の実施形態におけるハフマン伸張化部の構成を示したブロック図である。
【図11】本発明の第1の実施形態における復号化部の処理手順を示したフローチャートである。
【図12】本発明の第1の実施形態における出力部の処理手順を示したフローチャートである。
【図13】本発明の第2の実施形態におけるゼロランレングス符号化の具体例を示した説明図である。
【図14】本発明の第2の実施形態におけるバリューランレングス符号化の具体例を示した説明図である。
【図15】本発明の第2の実施形態におけるrunzと、runvと、valueと、groupとの値を纏めた概略図である。
【図16】本発明の第2の実施形態におけるハフマン符号化部の構成を示したブロック図である。
【図17】本発明の第2の実施形態における判定部の処理手順を示したフローチャートである。
【図18】本発明の第2の実施形態における符号化部の処理手順を示したフローチャートである。
【図19】本発明の第2の実施形態におけるハフマン伸張化部の構成を示したブロック図である。
【図20】本発明の第2の実施形態における復号化部の処理手順を示したフローチャートである。
【図21】本発明の第2の実施形態における出力部の処理手順を示したフローチャートである。
【図22】本発明の第3の実施形態におけるゼロランレングス符号化の具体例を示した説明図である。
【図23】本発明の第3の実施形態におけるバリューランレングス符号化の具体例を示した説明図である。
【図24】本発明の第3の実施形態におけるrunzと、runvと、valueと、groupとの値を纏めた概略図である。
【発明を実施するための形態】
【0022】
(第1の実施形態)
以下、本発明の第1の実施形態について図面を参照して説明する。図1は、本実施形態におけるデータ圧縮および復号システム1の構成を示したブロック図である。図示する例では、データ圧縮および復号システム1は、データ圧縮装置2とデータ復号装置3とを備える。データ圧縮装置2は、圧縮部20と送信部30とを備える。データ復号装置3は、受信部40と伸張部50とを備える。
【0023】
圧縮部20は画像データを圧縮し、圧縮したデータを送信部に入力する。圧縮部20の構成および圧縮部20が用いる圧縮方法については後述する。送信部30は、固定長のデータを送受信する規格を用いて、圧縮部20が圧縮した圧縮データをデータ復号装置3に送信する。受信部40は、送信部30から送信される圧縮データを受信し、受信した圧縮データを伸張部50に入力する。伸張部50は、受信部40から入力された圧縮データを伸張(復号)し、出力する。
【0024】
次に、圧縮部20について説明する。図2は、本実施形態における圧縮部20の構成を示したブロック図である。図示する例では、圧縮部20は、周波数変換部21と、量子化部22と、記憶部23(圧縮装置記憶部)と、ハフマン符号化部24(符号化部)とを備える。
【0025】
周波数変換部21は、空間周波数変換(フーリエ変換)を行い、圧縮部20に入力された画像データを周波数成分に分ける。量子化部22は、周波数変換部21が変換した周波数成分を量子化して各周波数成分の分解能を変更する。記憶部23は、1次元のハフマンテーブルを記憶する。ハフマン符号化部24は、記憶部23が記憶しているハフマンテーブルを用いて、量子化部22が量子化した周波数成分(符号化対象データ)の符号化を行い、圧縮データを出力する。
【0026】
次に、伸張部50について説明する。図3は、本実施形態における伸張部50の構成を示したブロック図である。図示する例では、伸張部50は、記憶部51(復号装置記憶部)と、ハフマン伸張化部52(復号部)と、逆量子化部53と、逆周波数変換部54とを備える。
【0027】
記憶部51は、1次元のハフマンテーブルを記憶する。ハフマン伸張化部52は、記憶部51が記憶するハフマンテーブルを用いて、受信部40から入力される圧縮データを伸張(復号)し、量子化された周波数成分を復元する。逆量子化部53は、量子化された周波数成分から画像データの周波数成分を復元する。逆周波数変換部54は、逆空間周波数変換(逆フーリエ変換)を行い、周波数成分から画像データを復元する。
【0028】
次に、本実施形態のハフマン符号化部24における符号化方法について説明する。以下、ハフマン符号化部24に入力される周波数成分のうち、AC成分(符号化対象データ)「5,0,0,0,3,0,0,1,2,0,0,4,0,6,・・・」を符号化する例を用いて説明する。
【0029】
初めに、ハフマン符号化部24は、ゼロランレングス符号化を行う。具体的には、符号化対象データにおいて「0」が連続する数を算出し、「0」が連続する数と、「0」以外の値とで符号化対象データを表す。以下、「0」が連続する数を示すデータをrunzとする。また「0」以外の値を示すデータをvalueとする。
【0030】
図4は、ゼロランレングス符号化の具体例を示した説明図である。図示する例では、符号化対象データは「5,0,0,0,3,0,0,1,2,0,0,4,0,6,・・・」である。図示する符号化対象データの先頭の値は「5」であるため、「0」が連続する数は「0」個である。また、符号化対象データ「5」の後の値は「0,0,0,3」であるため、「0」が連続する数は「3」個である。また、符号化対象データ「3」の後の値は「0,0,1」であるため、「0」が連続する数は「2」個である。また、符号化対象データ「1」の後の値は「2」であるため、「0」が連続する数は「0」個である。また、符号化対象データ「2」の後の値は「0,0,4」であるため、「0」が連続する数は「2」個である。以下、同様に「0」が連続する数を算出すると、runzは「0」「3」「2」「0」「2」「1」・・・となる。また、「0」以外の値(value)は、「5」「3」「1」「2」「4」「6」・・・となる。
【0031】
次に、ハフマン符号化部24は、valueを特定するgroupと付加ビットとを算出する。なお、groupは、Valueの絶対値を表現できる最小のビット長(付加ビットの長さ)と同じ値である。なお、groupと付加ビットとでvalueを特定することができる。図5は、groupとvalueと付加ビット長との対応を示した概略図である。図示する例では、value「−1、1」に対応するgroupは「1」であり、付加ビット長は「1」である。また、value「−3、−2、2、3」に対応するgroupは「2」であり、付加ビット長は「2」である。また、value「−7・・・−4、4・・・7」に対応するgroupは「3」であり、付加ビット長は「3」である。他のvalueに対応するgroupと付加ビット長とは図示するとおりである。この対応関係により、valueが「5」「3」「1」「2」「4」「6」・・・である場合、groupは「3」「2」「1」「2」「3」「3」・・・となる。また、このときの付加ビット長は「3」「2」「1」「2」「3」「3」・・・となる。
【0032】
図6は、符号化対象データ「5,0,0,0,3,0,0,1,2,0,0,4,0,6,・・・」のrunzと、valueと、groupとの値を纏めた概略図である。図示する例では、runzと、valueと、groupとの値が、行の上から順に記載されている。例えば、行101には、runz「0」と、value「5」と、group「3」とが記載されている。また、行102には、runz「3」と、value「3」と、group「2」とが記載されている。他の行については図示するとおりである。なお、各行のデータを1つの符号セットとする。
【0033】
次に、ハフマン符号化部24は、1つの符号セット毎に、runzと、groupと、valueとを、それぞれ1次元の符号化テーブルを用いて符号化する。なお、runzの符号化に用いるハフマンテーブル(第1のハフマンテーブル)をHzとする。また、groupの符号化に用いるハフマンテーブル(第2のハフマンテーブル)をHgとする。これにより、1つの符号セットをハフマン符号化したデータは、Hz[runz]+Hg[group]+value.encとなる。value.encは付加ビットである。なお、符号化されたものに対して、接尾に.encを付加している。
【0034】
次に、本実施形態のハフマン符号化部24の構成について説明する。図7は、本実施形態のハフマン符号化部24の構成を示したブロック図である。図示する例では、ハフマン符号化部24は、入力部240と、判定部241と、符号化部242とを備えている。また、判定部241は、記憶部2410(value記憶部、runz記憶部)を備えている。判定部241は、入力された符号化対象データを判定し、trigと、1セットのrunzと、groupと、valueとを記憶部2410に記憶させる。また、判定部241は、記憶部2410に記憶させたtrigと、1セットのrunzと、groupと、valueとを符号化部242に入力する。符号化部242は、trigが入力されると、trigとともに入力された、1セットのrunzと、groupと、valueとを1次元ハフマンテーブルを用いて符号化する。そして、符号化部242は、符号化した1セットのデータ、Hz[runz]+Hg[group]+value.encを出力する。符号化部242はtrigが入力される毎にこの処理を行う。このような手順により、ハフマン符号化部24は、符号化対象データの符号化を行う。
【0035】
次に、判定部241の詳細な処理手順について説明する。図8は、本実施形態における判定部241の処理手順を示したフローチャートである。
(ステップS101)判定部241は、各変数の値を「0」に初期化する。その後、ステップS102の処理に進む。
【0036】
(ステップS102)判定部241は、i<63であれば、i++とした後にステップS103〜ステップS111の処理を実行する。また、判定部241は、i<63でなければ処理を終了する。なお、符号化対象データであるAC成分は63個であるため、判定部241は、ステップS103〜ステップS111の処理を63回繰り返す。すなわち、ステップS103〜ステップS111の処理の実行回数が63回未満である場合にはステップS103の処理に進み、それ以外の場合には処理を終了する。
【0037】
(ステップS103)判定部241は、trig=0とする。その後、ステップS104の処理に進む。
(ステップS104)判定部241は、din(i)が「0」であるか否かを判定する。din(i)が「0」であると判定部241が判定した場合にはステップS105の処理に進み、それ以外の場合にはステップS108の処理に進む。
【0038】
(ステップS105)判定部241は、runz_cnt++とする。その後、ステップS106の処理に進む。
(ステップS106)判定部241は、iが「62」であるか否かを判定する。iが「62」であると判定部241が判定した場合にはステップS107の処理に進み、それ以外の場合にはステップS111の処理に進む。
【0039】
(ステップS107)判定部241は、runz=EOBとする。また、判定部241は、runz_cnt=0とする。また、判定部241はtrig=1とする。これにより、trigが「1」となったため、判定部241は、runzと、groupと、valueと、trigとを符号化部242に出力する。その後、ステップS111の処理に進む。
【0040】
(ステップS108)判定部241は、runz=runz_cntとする。その後、判定部241は、runz_cnt=0とする。その後、ステップS109の処理に進む。
(ステップS109)判定部241は、groupを、din(i)で一意に特定されるgroupとする。また、判定部241は、value=din(i)とする。その後、ステップS110の処理に進む。
【0041】
(ステップS110)判定部241は、trig=1とする。これにより、trigが「1」となったため、判定部241は、runzと、groupと、valueと、trigとを符号化部242に出力する。その後、ステップS111の処理に進む。
(ステップS111)判定部241は、ステップS102の処理に戻る。
【0042】
上述したステップS101〜ステップS111の処理により、判定部241は、1つの符号セット毎に、runzと、groupと、valueと、trigとを符号化部242に入力する。
【0043】
次に、符号化部242の詳細な処理手順について説明する。図9は、本実施形態における符号化部242の処理手順を示したフローチャートである。符号化部242は、判定部241からtrigが入力される毎に、以下のステップS201〜204の処理を実行する。
(ステップS201)符号化部242は、入力されたtrigが「1」であるか否かを判定する。入力されたtrigが「1」であると符号化部242が判定した場合にはステップS202の処理に進み、それ以外の場合には処理を終了する。
【0044】
(ステップS202)符号化部242は、入力されたrunzを、記憶部23が記憶する一次元のハフマンテーブルHzを用いてハフマン符号化し、Hz[runz]を出力する。その後、ステップS203の処理に進む。
(ステップS203)符号化部242は、入力されたrunzが「EOB」では無いか否かを判定する。入力されたrunzが「EOB」では無いと符号化部242が判定した場合にはステップS204の処理に進み、それ以外の場合には処理を終了する。
【0045】
(ステップS204)符号化部242は、入力されたgroupを、記憶部23が記憶する一次元のハフマンテーブルHgを用いてハフマン符号化し、Hg[group]を出力する。また、符号化部242は、入力されたgroupとvalueとに対応する付加ビットを算出して、value.encを出力する。その後、処理を終了する。
【0046】
上述したステップS201〜ステップS204の処理により、符号化部242は、1つの符号セット毎に、runzと、groupと、valueとを、それぞれ一次元のハフマンテーブルを用いて符号化し、runzを符号化したHz[runz]と、groupを符号化したHg[group]と、付加ビットvalue.encとを出力する。
【0047】
次に、本実施形態におけるハフマン伸張化部52の構成について説明する。図10は、本実施形態におけるハフマン伸張化部52の構成を示したブロック図である。図示する例では、ハフマン伸張化部52は、復号化部521と出力部522(算出部)とを備えている。復号化部521は、入力された符号化データを復号化して、1つの符号セット毎に、runzとvalueを取得する。また、符号化部521は、取得した1セットのrunzとvalueとを出力部522に入力する。出力部522は、入力された1セットのrunzとvalueとに基づいて、1セット分の符号化対象データを算出して出力する。また、出力部522は、1セット分の符号化対象データを出力した後、trigを復号化部521に入力する。復号化部521は、trigが入力されると、次の符号セットのrunzとvalueを取得し、出力部522に入力する。復号化部521と出力部522とが上記の処理を繰り返すことで、ハフマン伸張化部52は、符号化された符号化対象データを復号化する。
【0048】
次に、復号化部521の詳細な処理手順について説明する。図11は、本実施形態における復号化部521の処理手順を示したフローチャートである。
【0049】
(ステップS301)復号化部521は、num<63であればステップS302〜ステップS306の処理を実行し、それ以外の場合には処理を終了する。なお、numの初期値は0である。また、2回目以降のステップS301の処理は、出力部522からtrigが入力された場合に実行する。
【0050】
(ステップS302)復号化部521は、Hz[runz]を、記憶部51が記憶する一次元のハフマンテーブルHzを用いて復号化する。また復号化部521は、runzを、復号化したHz[runz]の値とする。そして、復号化部521は、runzを出力部522に入力する。その後、ステップS303の処理に進む。
(ステップS303)復号化部521は、runzが「EOB」では無いか否かを判定する。runzが「EOB」では無いと符号化部521が判定した場合にはステップS304の処理に進み、それ以外の場合にはステップS305の処理に進む。
【0051】
(ステップS304)復号化部521は、num=runz+1とする。また、復号化部521は、Hg[group]を、記憶部51が記憶する一次元のハフマンテーブルHgを用いて復号化する。また、復号化部521は、groupを、復号化したHg[group]の値とする。また、復号化部521は、groupと付加ビットvalue.encとに基づいて、valueを算出する。また、復号化部521は、value[j]を、算出したvalueの値とする。そして、復号化部521は、value[j]を出力部522に入力する。その後、ステップS306の処理に進む。
【0052】
(ステップS305)復号化部521は、num=63とする。その後、ステップS306の処理に進む。
(ステップS306)復号化部521は、ステップS301の処理に戻る。
【0053】
上述したステップS301〜ステップS306の処理により、復号化部521は、1つの符号セット毎に、Hz[runz]と、Hg[group]と、value.encとを、それぞれ一次元のハフマンテーブルを用いて復号化し、runzとvalue[j]とを出力部522に入力する。
【0054】
次に、出力部522の詳細な処理手順について説明する。図12は、本実施形態における出力部522の処理手順を示したフローチャートである。
(ステップS401)出力部522は、各変数の値を「0」に初期化する。その後、ステップS402の処理に進む。
(ステップS402)出力部522は、i<63であればステップS403〜ステップS411の処理を実行し、それ以外の場合にはステップS412の処理に進む。
【0055】
(ステップS403)出力部522は、z_num=runz[k]とする。また、出力部522は、k++とする。その後、ステップS404の処理に進む。
(ステップS404)出力部522は、z_numが「EOB」では無いか否かを判定する。z_numが「EOB」では無いと出力部522が判定した場合にはステップS405の処理に進み、それ以外の場合にはステップS406の処理に進む。
【0056】
(ステップS405)出力部522は、j=0とする。また、出力部522は、n=z_numとする。また、出力部522は、i=i+nとする。その後、ステップS407の処理に進む。
(ステップS406)出力部522は、j=iとする。また、出力部522は、n=63とする。また、出力部522は、i=63とする。その後、ステップS407の処理に進む。
【0057】
(ステップS407)出力部522は、j<nであれば、「0」を出力してステップS408の処理に進み、それ以外の場合にはステップS409の処理に進む。
(ステップS408)出力部522は、j++とした後、ステップS407の処理に戻る。
【0058】
(ステップS409)出力部522は、i<63であるか否かを判定する。i<63であると出力部522が判定した場合にはステップS410の処理に進み、それ以外の場合にはステップS411の処理に進む。
(ステップS410)出力部522は、i++とする。また、出力部522は、value[m]を出力する。また、出力部522は、m++とする。その後、ステップS411の処理に進む。
(ステップS411)出力部522は、ステップS402の処理に戻る。
【0059】
(ステップS412)出力部522は、trig=1とする。これにより、出力部522は、trigを復号化部521に入力する。その後、処理を終了する。
【0060】
上述したステップS401〜ステップS409の処理により、出力部522は、1つの符号セット毎に、符号化対象データを出力する。
【0061】
上述したとおり、本実施形態によれば、1次元のハフマンテーブルを用いて符号化および復号化を行うため、2次元のハフマンテーブルを用いて符号化および復号化を行うよりも符号種類が少なくなる。例えば、ハフマン木はデータの出現確率に依存しているため、最大ビット長の計算は行えないが、JPEG画像では、データの出現確率が16bitにおさまるような確率分布に決めたと考えられる。これを前提とすると、JPEG画像の量子化後のデータが12bitの場合の符号種類(テーブル数)は次のようになる。
JPEG画像 : 16×12=196
本実施形態 : 64+12=76
(runz:64 group:12)
このように、JPEGでは入力データのビット幅が増えることで出現確率が高いものでも短い符号が割り当てられなくなる。しかし、本実施形態では1次元テーブルを用いた符号化の結果を連結しているため、各符号種類の数が最大ビットに影響する。
このように、符号種類が少なくなると、ハフマン符号化後の最大ビット長も短くなる。また、本実施形態のデータ圧縮および復号システム1は、固定長データを送受信する通信方式でデータの送受信を行うため、送信するデータの最大長を固定長と定め、送信するデータ長が長くても短くても、毎回固定長のデータを送受信する。しかしながら、本実施形態では、ハフマン符号化後の最大ビット長が短くなるため、固定長を短くすることができ、通信効率を向上することができる。
【0062】
(第2の実施形態)
以下、本発明の第2の実施形態について図面を参照して説明する。本実施形態と第1の実施形態と異なる点は、本実施形態では、ゼロランレングスだけではなくバリューランレングスも用いる点である。なお、本実施形態におけるデータ圧縮および復号システム1の構成は、第1の実施形態における各構成と同様の構成である。
【0063】
次に、本実施形態のハフマン符号化部24における符号化方法について説明する。以下、ハフマン符号化部24に入力される周波数成分のうち、AC成分(符号化対象データ)「5,0,0,0,3,0,0,1,2,0,0,4,0,6,・・・」を符号化する例を用いて説明する。
【0064】
初めに、ハフマン符号化部24は、ゼロランレングス符号化を行う。具体的には、符号化対象データにおいて「0」が連続する数を算出し、「0」が連続する数と、「0」以外の値とで符号化対象データを表す。以下、「0」が連続する数を示すデータをrunzとする。また「0」以外の値を示すデータをvalueとする。なお、本実施形態では第1の実施形態とは異なり、「0」以外の値が連続する場合、この間の「0」が連続する数については考慮しない。
【0065】
図13は、ゼロランレングス符号化の具体例を示した説明図である。図示する例では、符号化対象データは「5,0,0,0,3,0,0,1,2,0,0,4,0,6,・・・」である。図示する符号化対象データの先頭の値は「5」であるため、「0」が連続する数は「0」個である。また、符号化対象データ「5」の後の値は「0,0,0,3」であるため、「0」が連続する数は「3」個である。また、符号化対象データ「3」の後の値は「0,0,1」であるため、「0」が連続する数は「2」個である。また、符号化対象データ「1」の後の値は「2」であるが、本実施形態では「0」以外の値が連続する場合、この間の「0」が連続する数については考慮しない。また、符号化対象データ「2」の後の値は「0,0,4」であるため、「0」が連続する数は「2」個である。以下、同様に「0」が連続する数を算出すると、runzは「0」「3」「2」「2」「1」・・・となる。また、「0」以外の値(value)は、「5」「3」「1,2」「4」「6」・・・となる。
【0066】
次に、ハフマン符号化部24は、バリューランレングス符号化を行う。具体的には、符号化対象データにおいて、「0」以外の値が連続する数を算出する。以下、「0」以外の値が連続する数を示すデータをrunvとする。
【0067】
図14は、バリューランレングス符号化の具体例を示した説明図である。図示する例では、符号化対象データは「5,0,0,0,3,0,0,1,2,0,0,4,0,6,・・・」である。図示する符号化対象データの先頭の値は「5」であり、その後の値が「0」であるため、「0」以外の値が連続する数は「1」個である。また、符号化対象データ「5」の後の値は「0,0,0,3,0」であるため、「0」以外の値が連続する数は「1」個である。また、符号化対象データ「3」の後の値は「0,0,1,2,0」であるため、「0」以外の値が連続する数は「2」個である。また、符号化対象データ「2」の後の値は「0,0,4,0」であるため、「0」以外の値が連続する数は「1」個である。また、符号化対象データ「4」の後の値は「0,6,・・・」であるため、「0」以外の値が連続する数は「1」個である。以下、同様に「0」以外の数が連続する数を算出すると、runvは「1」「1」「2」「1」「1」・・・となる。
【0068】
次に、ハフマン符号化部24は、valueを特定するgroupと付加ビットとを算出する。valueが「5」「3」「1,2」「4」「6」・・・である場合、groupは「3」「2」「1,2」「3」「3」・・・となる。また、このときの付加ビット長は「3」「2」「1,2」「3」「3」・・・となる。
【0069】
図15は、符号化対象データ「5,0,0,0,3,0,0,1,2,0,0,4,0,6,・・・」のrunzと、runvと、valueと、groupとの値を纏めた概略図である。図示する例では、runzと、runvと、valueと、groupとの値が、行の上から順に記載されている。例えば、行201には、runz「0」と、runv「1」と、value「5」と、group「3」とが記載されている。また、行202には、runz「3」と、runv「1」と、value「3」と、group「2」とが記載されている。また、行203には、runz「2」と、runv「2」と、value「1,2」と、group「1,2」とが記載されている。他の行については図示するとおりである。なお、各行のデータを1つの符号セットとする。
【0070】
次に、ハフマン符号化部24は、1つの符号セット毎に、runzと、runvと、groupと、valueとを、それぞれ1次元の符号化テーブルを用いて符号化する。なお、runzの符号化に用いるハフマンテーブル(第1のハフマンテーブル)をHzとする。また、runvの符号化に用いるハフマンテーブル(第3のハフマンテーブルをHvとする。また、groupの符号化に用いるハフマンテーブル(第2のハフマンテーブルをHgとする。これにより、1つの符号セットをハフマン符号化したデータは、Hz[runz]+Hv[runv]+Hg[group]+value.encとなる。value.encは付加ビットである。なお、符号化されたものに対して、接尾に.encを付加している。
【0071】
次に、本実施形態のハフマン符号化部24の構成について説明する。図16は、本実施形態のハフマン符号化部24の構成を示したブロック図である。図示する例では、ハフマン符号化部24は、入力部240と、判定部241と、符号化部242とを備えている。また、判定部241は、記憶部2410(value記憶部、runz記憶部、runv記憶部)を備えている。判定部241は、入力された符号化対象データを判定し、trigと、1セットのrunzと、runvと、groupと、valueとを記憶部2410に記憶させる。また、判定部241は、記憶部2410に記憶させたtrigと、1セットのrunzと、runvと、groupと、valueとを符号化部242に入力する。符号化部242は、trigが入力されると、trigとともに入力された、1セットのrunzと、runvと、groupと、valueとを1次元ハフマンテーブルを用いて符号化する。そして、符号化部242は、符号化した1セットのデータを出力する。符号化部242はtrigが入力される毎にこの処理を行う。このような手順により、ハフマン符号化部24は、符号化対象データの符号化を行う。
【0072】
次に、判定部241の詳細な処理手順について説明する。図17は、本実施形態における判定部241の処理手順を示したフローチャートである。
(ステップS501)判定部241は、trig_tmp以外の変数の値を「0」に初期化する。その後、ステップS502の処理に進む。
【0073】
(ステップS502)判定部241は、i<63であれば、i++とした後にステップS503〜ステップS520の処理を実行する。また、判定部241は、i<63でなければ処理を終了する。なお、符号化対象データであるAC成分は63個であるため、判定部241は、ステップS503〜ステップS520の処理を63回繰り返す。すなわち、ステップS503〜ステップS520の処理の実行回数が63回未満である場合にはステップS503の処理に進み、それ以外の場合には処理を終了する。
【0074】
(ステップS503)判定部241は、trig=0とする。その後、ステップS504の処理に進む。
(ステップS504)判定部241は、trig_tmpが「1」であるか否かを判定する。trig_tmpが「1」であると判定部241が判定した場合にはステップS505の処理に進み、それ以外の場合にはステップS506の処理に進む。
【0075】
(ステップS505)判定部241は、runz=EOBとする。また、判定部241は、runz_cnt=0とする。また、判定部241は、trig_tmp=0とする。また、判定部241はtrig=1とする。これにより、trigが「1」となったため、判定部241は、runzと、runvと、groupと、valueと、trigとを符号化部242に出力する。その後、ステップS506の処理に進む。
(ステップS506)判定部241は、din(i)が「0」であるか否かを判定する。din(i)が「0」であると判定部241が判定した場合にはステップS507の処理に進み、それ以外の場合にはステップS514の処理に進む。
【0076】
(ステップS507)判定部241は、iが「0」ではなく、かつ、runv_cntが「0」ではないか否かを判定する。iが「0」ではなく、かつ、runv_cntが「0」ではないと判定部241が判定した場合にはステップS508の処理に進み、それ以外の場合にはステップS509の処理に進む。
(ステップS508)判定部241は、runv=runv_cntとする。また、判定部241は、runv_cnt=0とする。また、判定部241はtrig=1とする。これにより、trigが「1」となったため、判定部241は、runzと、runvと、groupと、valueと、trigとを符号化部242に出力する。その後、ステップS509の処理に進む。
【0077】
(ステップS509)判定部241は、Runz_cnt++とする。その後、ステップS510の処理に進む。
(ステップS510)判定部241は、iが「62」であるか否かを判定する。iが「62」であると判定部241が判定した場合にはステップS511の処理に進み、それ以外の場合にはステップS520の処理に進む。すなわち、判定部241は、din(i)が最終データであるか否かを判定し、din(i)が最終データであると判定した場合にはステップS511の処理に進み、それ以外の場合にはステップS520の処理に進む。
【0078】
(ステップS511)判定部241は、trigが「0」であるか否かを判定する。trigが「0」であると判定部241が判定した場合にはステップS512の処理に進み、それ以外の場合にはステップS513の処理に進む。
(ステップS512)判定部241は、runz=EOBとする。また、判定部241は、runz_cnt=0とする。また、判定部241は、trig=1とする。これにより、trigが「1」となったため、判定部241は、runzと、runvと、groupと、valueと、trigとを符号化部242に出力する。その後、ステップS520の処理に進む。
(ステップS513)判定部241は、runz_cnt=0とする。また、判定部241は、trig_tmp=1とする。その後、ステップS520の処理に進む。
【0079】
(ステップS514)判定部241は、runv_cntが「0」であるか否かを判定する。runv_cntが「0」であると判定部241が判定した場合にはステップS515の処理に進み、それ以外の場合にはステップS516の処理に進む。
(ステップS515)判定部241は、runz=runz_cntとする。また、判定部241は、runz_cnt=0とする。その後、ステップS516の処理に進む。
【0080】
(ステップS516)判定部241は、group[runv_cnt]を、din(i)で一意に特定されるgroupとする。また、判定部241は、value[runv_cnt]=din(i)とする。その後、ステップS517の処理に進む。
(ステップS517)判定部241は、runv_cnt++とする。その後、ステップS518の処理に進む。
(ステップS518)判定部241は、iが「62」であるか否かを判定する。iが「62」であると判定部241が判定した場合にはステップS519の処理に進み、それ以外の場合にはステップS520の処理に進む。すなわち、判定部241は、din(i)が最終データであるか否かを判定し、din(i)が最終データであると判定した場合にはステップS519の処理に進み、それ以外の場合にはステップS520の処理に進む。
【0081】
(ステップS519)判定部241は、runv=runv_cntとする。また、判定部241は、runv_cnt=0とする。また、判定部241は、trig=1とする。これにより、trigが「1」となったため、判定部241は、runzと、runvと、groupと、valueと、trigとを符号化部242に出力する。その後、ステップS520の処理に進む。
(ステップS520)判定部241は、ステップS502の処理に戻る。
【0082】
上述したステップS501〜ステップS520の処理により、判定部241は、1つの符号セット毎に、runzと、runvと、groupと、valueと、trigとを符号化部242に入力する。
【0083】
次に、符号化部242の詳細な処理手順について説明する。図18は、本実施形態における符号化部242の処理手順を示したフローチャートである。符号化部242は、判定部241からtrigが入力される毎に、以下のステップS601〜607の処理を実行する。
(ステップS601)符号化部242は、入力されたtrigが「1」であるか否かを判定する。入力されたtrigが「1」であると符号化部242が判定した場合にはステップS602の処理に進み、それ以外の場合には処理を終了する。
【0084】
(ステップS602)符号化部242は、入力されたrunzを、記憶部23が記憶する一次元のハフマンテーブルHzを用いてハフマン符号化し、Hz[runz]を出力する。その後、ステップS603の処理に進む。
(ステップS603)符号化部242は、入力されたrunzが「EOB」では無いか否かを判定する。入力されたrunzが「EOB」では無いと符号化部242が判定した場合にはステップS604の処理に進み、それ以外の場合には処理を終了する。
(ステップS604)符号化部242は、入力されたrunvを、記憶部23が記憶する一次元のハフマンテーブルHvを用いてハフマン符号化し、Hv[runv]を出力する。その後、ステップS605の処理に進む。
【0085】
(ステップS605)符号化部242は、j<runvであれば、j++とした後にステップS606の処理を実行する。また、符号化部242は、i<runvでなければ処理を終了する。なおjの初期値は0である。
【0086】
(ステップS606)符号化部242は、入力されたgroup[j]を、記憶部23が記憶する一次元のハフマンテーブルHgを用いてハフマン符号化し、Hg[group[j]]を出力する。また、符号化部242は、入力されたgroup[j]とvalue[j]とに対応する付加ビットを算出して、value[j].encを出力する。その後、ステップS605の処理に戻る。
【0087】
上述したステップS601〜ステップS606の処理により、符号化部242は、1つの符号セット毎に、runzと、group[j]と、value[j]とを、それぞれ一次元のハフマンテーブルを用いて符号化し、runzを符号化したHz[runz]と、groupを符号化したHg[group[j]]と、付加ビットvalue[j].encとを出力する。
【0088】
次に、本実施形態におけるハフマン伸張化部52の構成について説明する。図19は、本実施形態におけるハフマン伸張化部52の構成を示したブロック図である。図示する例では、ハフマン伸張化部52は、復号化部521と出力部522(算出部)とを備えている。復号化部521は、入力された符号化データを復号化して、1つの符号セット毎に、runzと、runvと、valueとを取得する。また、符号化部521は、取得した1セットのrunzと、runvと、valueとを出力部522に入力する。出力部522は、入力された1セットのrunzと、runvと、valueとに基づいて、1セット分の符号化対象データを算出して出力する。また、出力部522は、1セット分の符号化対象データを出力した後、trigを復号化部521に入力する。復号化部521は、trigが入力されると、次の符号セットのrunzと、runvと、valueを取得し、出力部522に入力する。復号化部521と出力部522とが上記の処理を繰り返すことで、ハフマン伸張化部52は、符号化された符号化対象データを復号化する。
【0089】
次に、復号化部521の詳細な処理手順について説明する。図20は、本実施形態における復号化部521の処理手順を示したフローチャートである。
【0090】
(ステップS701)復号化部521は、num<63であればステップS702〜ステップS708の処理を実行し、それ以外の場合には処理を終了する。なお、numの初期値は0である。また、2回目以降のステップS701の処理は、出力部522からtrigが入力された場合に実行する。
【0091】
(ステップS702)復号化部521は、Hz[runz]を、記憶部51が記憶する一次元のハフマンテーブルHzを用いて復号化する。また復号化部521は、runzを、復号化したHz[runz]の値とする。そして、復号化部521は、runzを出力部522に入力する。その後、ステップS703の処理に進む。
(ステップS703)復号化部521は、runzが「EOB」では無いか否かを判定する。runzが「EOB」では無いと符号化部521が判定した場合にはステップS704の処理に進み、それ以外の場合にはステップS707の処理に進む。
【0092】
(ステップS704)復号化部521は、Hv[runv]を、記憶部51が記憶する一次元のハフマンテーブルHvを用いて復号化する。また復号化部521は、runvを、復号化したHv[runv]の値とする。そして、復号化部521は、runvを出力部522に入力する。また、復号化部521は、num=runz+runvとする。その後、ステップS705の処理に進む。
【0093】
(ステップS705)復号化部521は、j<runvであれば、j++とした後にステップS706の処理を実行する。また、復号化部521は、i<runvでなければステップS708の処理に進む。なおjの初期値は0である。
【0094】
(ステップS706)復号化部521は、Hg[group[j]]を、記憶部51が記憶する一次元のハフマンテーブルHgを用いて復号化する。また、復号化部521は、group[j]を、復号化したHg[group[j]]の値とする。また、復号化部521は、group[j]と付加ビットvalue[j].encとに基づいて、value[j]を算出する。そして、復号化部521は、value[j]を出力部522に入力する。その後、ステップS705の処理に戻る。
(ステップS707)復号化部521は、num=63とする。その後、ステップS708の処理に進む。
(ステップS708)復号化部521は、ステップS701の処理に戻る。
【0095】
上述したステップS701〜ステップS708の処理により、復号化部521は、1つの符号セット毎に、Hz[runz]と、Hg[group[j]]と、value[j].encとを、それぞれ一次元のハフマンテーブルを用いて復号化し、runzとvalue[j]とを出力部522に入力する。
【0096】
次に、出力部522の詳細な処理手順について説明する。図21は、本実施形態における出力部522の処理手順を示したフローチャートである。
(ステップS801)出力部522は、各変数の値を「0」に初期化する。その後、ステップS802の処理に進む。
(ステップS802)出力部522は、i<63であればステップS803〜ステップS813の処理を実行し、それ以外の場合にはステップS815の処理に進む。
【0097】
(ステップS803)出力部522は、z_num=runz[k]とする。また、出力部522は、k++とする。その後、ステップS804の処理に進む。
(ステップS804)出力部522は、z_numが「EOB」では無いか否かを判定する。z_numが「EOB」では無いと出力部522が判定した場合にはステップS805の処理に進み、それ以外の場合にはステップS806の処理に進む。
【0098】
(ステップS805)出力部522は、j=0とする。また、出力部522は、n=z_numとする。また、出力部522は、i=i+nとする。その後、ステップS807の処理に進む。
(ステップS806)出力部522は、j=iとする。また、出力部522は、n=63とする。また、出力部522は、i=63とする。その後、ステップS807の処理に進む。
【0099】
(ステップS807)出力部522は、j<nであれば、「0」を出力してステップS808の処理に進み、それ以外の場合にはステップS809の処理に進む。
(ステップS808)出力部522は、j++とした後、ステップS807の処理に戻る。
【0100】
(ステップS809)出力部522は、i<63であるか否かを判定する。i<63であると出力部522が判定した場合にはステップS810の処理に進み、それ以外の場合にはステップS814の処理に進む。
(ステップS810)出力部522は、v_num=runv[l]とする。また、出力部522は、l++とする。また、出力部522は、i=i+v_numとする。その後、ステップS811の処理に進む。
【0101】
(ステップS811)出力部522は、j<v_numであれば、j++とした後にステップS812の処理を実行する。また、出力部522は、j<v_numでなければステップS814の処理に進む。なおjの初期値は0である。
【0102】
(ステップS812)出力部522は、value[m]を出力する。また、出力部522は、m++とする。その後、ステップS811の処理に戻る。
(ステップS813)出力部522は、ステップS802の処理に戻る。
(ステップS814)出力部522は、trig=1とする。これにより、出力部522は、trigを復号化部521に入力する。その後、処理を終了する。
【0103】
上述したステップS801〜ステップS814の処理により、出力部522は、1つの符号セット毎に、符号化対象データを出力する。
【0104】
上述したとおり、本実施形態によれば、1次元のハフマンテーブルを用いて符号化および復号化を行うため、2次元のハフマンテーブルを用いて符号化および復号化を行うよりも符号種類が少なくなる。そのため、ハフマン符号化後の最大ビット長も短くなる。また、本実施形態のデータ圧縮および復号システム1は、固定長データを送受信する通信方式でデータの送受信を行うため、送信するデータの最大長を固定長と定め、送信するデータ長が長くても短くても、毎回固定長のデータを送受信する。しかしながら、本実施形態では、ハフマン符号化後の最大ビット長が短くなるため、固定長を短くすることができ、通信効率を向上することができる。また、本実施形態では、ゼロランレングスだけではなくバリューランレングスも用いて符号化を行う。これにより、更に符号化対象データを効率良く符号化することができる。
【0105】
なお、本実施形態において、JPEG画像の量子化後のデータが12bitの場合の符号種類(テーブル数)は次のようになる。
JPEG画像 : 16×12=196
本実施形態 : 64+64+12=140
(runz:64 runv:64 group:12)
【0106】
(第3の実施形態)
以下、本発明の第3の実施形態について図面を参照して説明する。本実施形態と第2の実施形態と異なる点は、本実施形態では、連続していない「0」を「0以外の数(バリュー)」として扱う点である。なお、本実施形態におけるデータ圧縮および復号システム1の構成は、第2の実施形態における各構成と同様の構成である。
【0107】
次に、本実施形態のハフマン符号化部24における符号化方法について説明する。以下、ハフマン符号化部24に入力される周波数成分のうち、AC成分(符号化対象データ)「5,0,0,0,3,0,0,1,2,0,0,4,0,6,・・・」を符号化する例を用いて説明する。
【0108】
初めに、ハフマン符号化部24は、ゼロランレングス符号化を行う。具体的には、符号化対象データにおいて「0」が連続する数を算出し、「0」が連続する数と、「0」以外の値とで符号化対象データを表す。以下、「0」が連続する数を示すデータをrunzとする。また「0」以外の値を示すデータをvalueとする。なお、本実施形態では第2の実施形態とは異なり、連続していない「0」を「0以外の数」として扱う。
【0109】
図22は、ゼロランレングス符号化の具体例を示した説明図である。図示する例では、符号化対象データは「5,0,0,0,3,0,0,1,2,0,0,4,0,6,・・・」である。図示する符号化対象データの先頭の値は「5」であるため、「0」が連続する数は「0」個である。また、符号化対象データ「5」の後の値は「0,0,0,3」であるため、「0」が連続する数は「3」個である。また、符号化対象データ「3」の後の値は「0,0,1」であるため、「0」が連続する数は「2」個である。また、符号化対象データ「1」の後の値は「2」であるが、本実施形態では「0」以外の値が連続する場合、この間の「0」が連続する数については考慮しない。また、符号化対象データ「2」の後の値は「0,0,4」であるため、「0」が連続する数は「2」個である。また、符号化対象データ「4」の後の値は「0,6」であるが、この「0」は連続していない「0」であるため、「0以外の数」として扱う。よって、runzは「0」「3」「2」「2」・・・となる。また、「0」以外の値(value)は、「5」「3」「1,2」「4,0,6」・・・となる。
【0110】
次に、ハフマン符号化部24は、バリューランレングス符号化を行う。具体的には、符号化対象データにおいて、「0」以外の値が連続する数を算出する。以下、「0」以外の値が連続する数を示すデータをrunvとする。
【0111】
図23は、バリューランレングス符号化の具体例を示した説明図である。図示する例では、符号化対象データは「5,0,0,0,3,0,0,1,2,0,0,4,0,6,・・・」である。図示する符号化対象データの先頭の値は「5」であり、その後の値が「0」であるため、「0」以外の値が連続する数は「1」個である。また、符号化対象データ「5」の後の値は「0,0,0,3,0」であるため、「0」以外の値が連続する数は「1」個である。また、符号化対象データ「3」の後の値は「0,0,1,2,0」であるため、「0」以外の値が連続する数は「2」個である。また、符号化対象データ「2」の後の値は「0,0,4,0,6」であり、「4」と「6」との間に連続していない「0」が存在するため、「0」以外の値が連続する数は「3」個である。よって、runvは「1」「1」「2」「3」・・・となる。
【0112】
次に、ハフマン符号化部24は、valueを特定するgroupと付加ビットとを算出する。valueが「5」「3」「1,2」「4,0,6」・・・である場合、groupは「3」「2」「1,2」「3,1,1」・・・となる。また、このときの付加ビット長は「3」「2」「1,2」「3,1,1」・・・となる。
【0113】
図24は、符号化対象データ「5,0,0,0,3,0,0,1,2,0,0,4,0,6,・・・」のrunzと、runvと、valueと、groupとの値を纏めた概略図である。図示する例では、runzと、runvと、valueと、groupとの値が、行の上から順に記載されている。例えば、行301には、runz「0」と、runv「1」と、value「5」と、group「3」とが記載されている。また、行302には、runz「3」と、runv「1」と、value「3」と、group「2」とが記載されている。また、行303には、runz「2」と、runv「2」と、value「1,2」と、group「1,2」とが記載されている。また、行304には、runz「2」と、runv「3」と、value「4,0,6」と、group「3,1,1」とが記載されている。なお、各行のデータを1つの符号セットとする。
【0114】
次に、ハフマン符号化部24は、1つの符号セット毎に、runzと、runvと、groupと、valueとを、それぞれ1次元の符号化テーブルを用いて符号化する。なお、runzの符号化に用いるハフマンテーブル(第1のハフマンテーブル)をHzとする。また、runvの符号化に用いるハフマンテーブル(第3のハフマンテーブル)をHvとする。また、groupの符号化に用いるハフマンテーブル(第2のハフマンテーブル)をHgとする。これにより、1つの符号セットをハフマン符号化したデータは、Hz[runz]+Hv[runv]+(Hg[group]+value.enc+・・・)となる。value.encは付加ビットである。なお、符号化されたものに対して、接尾に.encを付加している。
【0115】
次に、本実施形態のハフマン符号化部24の構成について説明する。本実施形態のハフマン符号化部24の構成は、第2の実施形態のハフマン符号化部24の構成と同様である。
【0116】
次に、判定部241の詳細な処理手順について説明する。本実施形態の判定部241の処理手順は、第2の実施形態の判定部241と同様の処理手順である。但し、本実施形態では、AC成分(符号化対象データ)に対して、連続していない「0」をvalue(0以外の数)として扱う。よって、本実施形態の判定部241は、第2の実施形態の判定部241と同様に、1つの符号セット毎に、runzと、runvと、groupと、valueと、trigとを符号化部242に入力する。
【0117】
次に、符号化部242の詳細な処理手順について説明する。本実施形態の符号化部242の処理手順は、第2の実施形態の符号化部242と同様の処理手順である。よって、本実施形態の符号化部242は、第2の実施形態の符号化部242と同様に、1つの符号セット毎に、runzと、group[j]と、value[j]とを、それぞれ一次元のハフマンテーブルを用いて符号化し、runzを符号化したHz[runz]と、groupを符号化したHg[group[j]]と、付加ビットvalue[j].encとを出力する。
【0118】
次に、本実施形態におけるハフマン伸張化部52の構成について説明する。本実施形態のハフマン伸張化部52の構成は、第2の実施形態のハフマン伸張化部52の構成と同様である。
【0119】
次に、復号化部521の詳細な処理手順について説明する。本実施形態の復号化部521の処理手順は、第2の実施形態の復号化部521と同様の処理手順である。よって、本実施形態の復号化部521は、第2の実施形態の復号化部521と同様に、1つの符号セット毎に、Hz[runz]と、Hg[group[j]]と、value[j].encとを、それぞれ一次元のハフマンテーブルを用いて復号化し、runzとvalue[j]とを出力部522に入力する。
【0120】
次に、出力部522の詳細な処理手順について説明する。本実施形態の出力部522の処理手順は、第2の実施形態の出力部522と同様の処理手順である。よって、本実施形態の出力部522は、第2の実施形態の出力部522と同様に、1つの符号セット毎に、符号化対象データを出力する。
【0121】
上述したとおり、本実施形態によれば、1次元のハフマンテーブルを用いて符号化および復号化を行うため、2次元のハフマンテーブルを用いて符号化および復号化を行うよりも符号種類が少なくなる。そのため、ハフマン符号化後の最大ビット長も短くなる。また、本実施形態のデータ圧縮および復号システム1は、固定長データを送受信する通信方式でデータの送受信を行うため、送信するデータの最大長を固定長と定め、送信するデータ長が長くても短くても、毎回固定長のデータを送受信する。しかしながら、本実施形態では、ハフマン符号化後の最大ビット長が短くなるため、固定長を短くすることができ、通信効率を向上することができる。また、本実施形態では、ゼロランレングスだけではなくバリューランレングスも用いて符号化を行う。また、本実施形態では、連続していない「0」を「0以外の数(バリュー)」として扱う。これにより、更に符号化対象データを効率良く符号化することができる。
【0122】
以上、この発明の第1〜第3の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【符号の説明】
【0123】
1・・・データ圧縮および復号システム、2・・・データ圧縮装置、3・・・データ復号装置、20・・・圧縮部、21・・・周波数変換部、22・・・量子化部、23,51,2410・・・記憶部、24・・・ハフマン符号化部、30・・・送信部、40・・・受信部、50・・・伸張部、52・・・ハフマン伸張化部、53・・・逆量子化部、54・・・逆周波数変換部、240・・・入力部、241・・・判定部、242・・・符号化部、521・・・復号化部、522・・・出力部

【特許請求の範囲】
【請求項1】
複数の値が含まれる数値列を構成する符号化対象データを入力する入力部と、
前記符号化対象データのうち、0ではない前記値をvalue符号化対象データとして記憶するvalue記憶部と、
0ではない前記値と、他の0ではない前記値との間に、0である前記値が連続している個数をrunz符号化対象データとして記憶するrunz記憶部と、
前記runz符号化対象データを第1のハフマンテーブルを用いて符号化するとともに、前記value符号化対象データを前記第1のハフマンテーブルとは異なる第2のハフマンテーブルを用いて符号化する符号化部と、
前記符号化部が符号化した符号化データを送信する送信部と、
を有することを特徴とするデータ圧縮装置。
【請求項2】
連続する、0ではない前記値の個数をrunv符号化対象データとして記憶するrunv記憶部
を有し、
前記runz記憶部は、0である前記値が連続している個数が0個の場合、当該個数を前記runz符号化対象データとして記憶せず、
前記value記憶部は、連続する、0ではない前記値の組を、前記value符号化対象データとして記憶し、
前記符号化部は、前記runv符号化対象データを前記第1及び前記第2のハフマンテーブルとは異なる第3のハフマンテーブルを用いて符号化する
ことを特徴とする請求項1に記載のデータ圧縮装置。
【請求項3】
前記value記憶部と、前記runz記憶部と、前記runv記憶部とは、連続する0である値の個数が1個の場合のみ、0である当該値を0ではない前記値とみなして、前記value符号化対象データと、前記runz符号化対象データと、前記runv符号化対象データとを記憶する
ことを特徴とする請求項2に記載のデータ圧縮装置。
【請求項4】
請求項1に記載のデータ圧縮装置から送信される前記符号化データを受信する受信部と、
前記第1のハフマンテーブルを用いて符号化された前記runz符号化対象データを、前記第1のハフマンテーブルを用いて復号化し、前記第2のハフマンテーブルを用いて符号化された前記value符号化対象データを、前記第2のハフマンテーブルを用いて復号化する復号化部と、
復号化された前記runz符号化対象データと、復号化された前記value符号化対象データとに基づいて、前記符号化対象データを算出する算出部と、
を有することを特徴とするデータ復号装置。
【請求項5】
請求項2に記載のデータ圧縮装置から送信される前記符号化データを受信する受信部と、
前記第1のハフマンテーブルを用いて符号化された前記runz符号化対象データを、前記第1のハフマンテーブルを用いて復号化し、前記第2のハフマンテーブルを用いて符号化された前記value符号化対象データを、前記第2のハフマンテーブルを用いて復号化し、前記第3のハフマンテーブルを用いて符号化された前記runv符号化対象データを、前記第3のハフマンテーブルを用いて復号化する復号化部と、
復号化された前記runz符号化対象データと、復号化された前記value符号化対象データと、復号化された前記runv符号化対象データとに基づいて、前記符号化対象データを算出する算出部と、
を有することを特徴とするデータ復号装置。
【請求項6】
請求項3に記載のデータ圧縮装置から送信される前記符号化データを受信する受信部と、
前記第1のハフマンテーブルを用いて符号化された前記runz符号化対象データを、前記第1のハフマンテーブルを用いて復号化し、前記第2のハフマンテーブルを用いて符号化された前記value符号化対象データを、前記第2のハフマンテーブルを用いて復号化し、前記第3のハフマンテーブルを用いて符号化された前記runv符号化対象データを、前記第3のハフマンテーブルを用いて復号化する復号化部と、
復号化された前記runz符号化対象データと、復号化された前記value符号化対象データと、復号化された前記runv符号化対象データとに基づいて、前記符号化対象データを算出する算出部と、
を有することを特徴とするデータ復号装置。
【請求項7】
複数の値が含まれる数値列を構成する符号化対象データを入力するステップと、
前記符号化対象データのうち、0ではない前記値をvalue符号化対象データとして記憶するステップと、
0ではない前記値と、他の0ではない前記値との間に、0である前記値が連続している個数をrunz符号化対象データとして記憶するステップと、
前記runz符号化対象データを第1のハフマンテーブルを用いて符号化するとともに、前記value符号化対象データを前記第1のハフマンテーブルとは異なる第2のハフマンテーブルを用いて符号化する符号化ステップと、
前記符号化ステップで符号化した符号化データを送信するステップと、
を含むことを特徴とするデータ圧縮方法。
【請求項8】
請求項7に記載のデータ圧縮方法で符号化されたデータを受信するステップと、
前記第1のハフマンテーブルを用いて符号化された前記runz符号化対象データを、前記第1のハフマンテーブルを用いて復号化し、前記第2のハフマンテーブルを用いて符号化された前記value符号化対象データを、前記第2のハフマンテーブルを用いて復号化するステップと、
復号化された前記runz符号化対象データと、復号化された前記value符号化対象データとに基づいて、前記符号化対象データを算出するステップと、
を含むことを特徴とするデータ復号方法。
【請求項9】
複数の値が含まれる数値列を構成する符号化対象データを入力する入力部と、
前記符号化対象データのうち、0ではない前記値をvalue符号化対象データとして記憶するvalue記憶部と、
0ではない前記値と、他の0ではない前記値との間に、0である前記値が連続している個数をrunz符号化対象データとして記憶するrunz記憶部と、
前記runz符号化対象データを第1のハフマンテーブルを用いて符号化するとともに、前記value符号化対象データを前記第1のハフマンテーブルとは異なる第2のハフマンテーブルを用いて符号化する符号化部と、
前記符号化部が符号化した符号化データを送信する送信部と、
を有するデータ圧縮装置と、
前記送信部から送信される前記符号化データを受信する受信部と、
前記第1のハフマンテーブルを用いて符号化された前記runz符号化対象データを、前記第1のハフマンテーブルを用いて復号化し、前記第2のハフマンテーブルを用いて符号化された前記value符号化対象データを、前記第2のハフマンテーブルを用いて復号化する復号化部と、
復号化された前記runz符号化対象データと、復号化された前記value符号化対象データとに基づいて、前記符号化対象データを算出する算出部と、
を有するデータ復号装置と、
を有することを特徴とするデータ圧縮および復号システム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate