(57)【特許請求の範囲】
【請求項１】
複数の値が含まれる数値列を構成する符号化対象データを入力する入力部と、
前記符号化対象データのゼロランレングス符号化を行い、前記数値列において０である前記値が連続している個数をｒｕｎｚデータとし、０ではない前記値をｖａｌｕｅデータとし、さらに、前記ｖａｌｕｅデータの絶対値を表現できる最小のビット長を示す数値をｇｒｏｕｐデータとする判定部と、
前記ｒｕｎｚデータを１次元の第１のハフマンテーブルを用いてハフマン符号化し、前記ｇｒｏｕｐデータを前記第１のハフマンテーブルとは異なる１次元の第２のハフマンテーブルを用いてハフマン符号化し、さらに、前記ｇｒｏｕｐデータから前記ｖａｌｕｅデータを特定するための付加ビットを算出する符号化部と、
前記符号化部がハフマン符号化した前記ｒｕｎｚデータと、前記符号化部がハフマン符号化した前記ｇｒｏｕｐデータと、前記符号化部が算出した前記付加ビットとを、前記符号化対象データの符号化データとして、固定長データを送受信する通信方式で送信する送信部と、
を有し、
前記判定部は、前記数値列において０である前記値が連続している個数が０個の場合、当該個数を前記ｒｕｎｚデータとせず、
前記判定部は、連続する、０ではない前記値の組を、前記ｖａｌｕｅデータとする
ことを特徴とするデータ圧縮装置。
【請求項２】
前記判定部は、前記数値列において連続する０である値の個数が１個の場合のみ、０である当該値を０ではない前記値とみなして、当該値を前記ｖａｌｕｅデータとする
ことを特徴とする請求項１に記載のデータ圧縮装置。
【請求項３】
請求項１に記載のデータ圧縮装置から送信される前記符号化データを、固定長データを送受信する通信方式で受信する受信部と、
前記第１のハフマンテーブルを用いてハフマン符号化された前記ｒｕｎｚデータを、前記第１のハフマンテーブルを用いて復号化し、前記第２のハフマンテーブルを用いて符号化された前記ｇｒｏｕｐデータを、前記第２のハフマンテーブルを用いて復号化し、前記ｇｒｏｕｐデータと前記付加ビットとに基づいて前記ｖａｌｕｅデータを算出する復号化部と、
復号化された前記ｒｕｎｚデータと、算出された前記ｖａｌｕｅデータとに基づいて、前記符号化対象データを算出する算出部と、
を有することを特徴とするデータ復号装置。
【請求項４】
複数の値が含まれる数値列を構成する符号化対象データを入力する入力ステップと、
前記符号化対象データのゼロランレングス符号化を行い、前記数値列において０である前記値が連続している個数をｒｕｎｚデータとし、０ではない前記値をｖａｌｕｅデータとし、さらに、前記ｖａｌｕｅデータの絶対値を表現できる最小のビット長を示す数値をｇｒｏｕｐデータとする判定ステップと、
前記ｒｕｎｚデータを１次元の第１のハフマンテーブルを用いてハフマン符号化し、前記ｇｒｏｕｐデータを前記第１のハフマンテーブルとは異なる１次元の第２のハフマンテーブルを用いてハフマン符号化し、さらに、前記ｇｒｏｕｐデータから前記ｖａｌｕｅデータを特定するための付加ビットを算出する符号化ステップと、
前記符号化ステップでハフマン符号化した前記ｒｕｎｚデータと、前記符号化ステップでハフマン符号化した前記ｇｒｏｕｐデータと、前記符号化ステップで算出した前記付加ビットとを、前記符号化対象データの符号化データとして、固定長データを送受信する通信方式で送信する送信ステップと、
を含み、
前記判定ステップでは、前記数値列において０である前記値が連続している個数が０個の場合、当該個数を前記ｒｕｎｚデータとせず、
前記判定ステップでは、連続する、０ではない前記値の組を、前記ｖａｌｕｅデータとする
ことを特徴とするデータ圧縮方法。
【請求項５】
請求項４に記載のデータ圧縮方法で符号化された前記符号化データを、固定長データを送受信する通信方式で受信する受信ステップと、
前記第１のハフマンテーブルを用いてハフマン符号化された前記ｒｕｎｚデータを、前記第１のハフマンテーブルを用いて復号化し、前記第２のハフマンテーブルを用いて符号化された前記ｇｒｏｕｐデータを、前記第２のハフマンテーブルを用いて復号化し、前記ｇｒｏｕｐデータと前記付加ビットとに基づいて前記ｖａｌｕｅデータを算出する復号化ステップと、
復号化された前記ｒｕｎｚデータと、算出された前記ｖａｌｕｅデータとに基づいて、前記符号化対象データを算出する算出ステップと、
を含むことを特徴とするデータ復号方法。
【請求項６】
複数の値が含まれる数値列を構成する符号化対象データを入力する入力部と、
前記符号化対象データのゼロランレングス符号化を行い、前記数値列において０である前記値が連続している個数をｒｕｎｚデータとし、０ではない前記値をｖａｌｕｅデータとし、さらに、前記ｖａｌｕｅデータの絶対値を表現できる最小のビット長を示す数値をｇｒｏｕｐデータとする判定部と、
前記ｒｕｎｚデータを１次元の第１のハフマンテーブルを用いてハフマン符号化し、前記ｇｒｏｕｐデータを前記第１のハフマンテーブルとは異なる１次元の第２のハフマンテーブルを用いてハフマン符号化し、さらに、前記ｇｒｏｕｐデータから前記ｖａｌｕｅデータを特定するための付加ビットを算出する符号化部と、
前記符号化部がハフマン符号化した前記ｒｕｎｚデータと、前記符号化部がハフマン符号化した前記ｇｒｏｕｐデータと、前記符号化部が算出した前記付加ビットとを、前記符号化対象データの符号化データとして、固定長データを送受信する通信方式で送信する送信部と、
を有するデータ圧縮装置と、
前記送信部から送信される前記符号化データを、固定長データを送受信する通信方式で受信する受信部と、
前記第１のハフマンテーブルを用いてハフマン符号化された前記ｒｕｎｚデータを、前記第１のハフマンテーブルを用いて復号化し、前記第２のハフマンテーブルを用いて符号化された前記ｇｒｏｕｐデータを、前記第２のハフマンテーブルを用いて復号化し、前記ｇｒｏｕｐデータと前記付加ビットとに基づいて前記ｖａｌｕｅデータを算出する復号化部と、
復号化された前記ｒｕｎｚデータと、算出された前記ｖａｌｕｅデータとに基づいて、前記符号化対象データを算出する算出部と、
を有するデータ復号装置と、
を含み、
前記判定部は、前記数値列において０である前記値が連続している個数が０個の場合、当該個数を前記ｒｕｎｚデータとせず、
前記判定部は、連続する、０ではない前記値の組を、前記ｖａｌｕｅデータとする
ことを特徴とするデータ圧縮および復号システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ圧縮装置、データ復号装置、データ圧縮方法、データ復号方法およびデータ圧縮および復号システムに関する。
【背景技術】
【０００２】
ＪＰＥＧで用いられるハフマン符号化のＡＣ成分処理では、「０」係数の長さ（ゼロランレングス）を求め、「０」以外の係数（有効係数）のときに、ゼロランレングスと有効係数のグループでハフマン符号を割り当てる手法が知られている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平６−１３９３４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上述した手法では、量子化後のビット長が増えるほどＡＣ係数の最大値が大きくなるので、ＡＣ係数を特定するためのグループ数が増加する。そのため、グループを符号化するための符号種類も増加する。符号種類が増加すると、データ長の変動が激しくなり、データ量のとり得る範囲が広がってしまう。また、固定長データを送受信するシステムでは、データ圧縮を固定長に変換して送信する必要がある。従って、固定長データを送受信するシステムにおいて、上述した手法でハフマン符号化したデータの送受信を行う際には、ハフマン符号化後のデータの最大ビット長を固定長と定める必要があり、量子化後のビット長が短い場合であっても無駄なデータを送信しなければならず、通信効率を向上することができないという問題がある。
【０００５】
本発明は、上記事情に鑑みてなされたものであり、通信効率を向上することができるデータ圧縮装置、データ復号装置、データ圧縮方法、データ復号方法およびデータ圧縮および復号システムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一態様は、複数の値が含まれる数値列を構成する符号化対象データを入力する入力部と、前記符号化対象データのゼロランレングス符号化を行い、前記数値列において０である前記値が連続している個数をｒｕｎｚデータとし、０ではない前記値をｖａｌｕｅデータとし、さらに、前記ｖａｌｕｅデータの絶対値を表現できる最小のビット長を示す数値をｇｒｏｕｐデータとする判定部と、前記ｒｕｎｚデータを１次元の第１のハフマンテーブルを用いてハフマン符号化し、前記ｇｒｏｕｐデータを前記第１のハフマンテーブルとは異なる１次元の第２のハフマンテーブルを用いてハフマン符号化し、さらに、前記ｇｒｏｕｐデータから前記ｖａｌｕｅデータを特定するための付加ビットを算出する符号化部と、前記符号化部がハフマン符号化した前記ｒｕｎｚデータと、前記符号化部がハフマン符号化した前記ｇｒｏｕｐデータと、前記符号化部が算出した前記付加ビットとを、前記符号化対象データの符号化データとして、固定長データを送受信する通信方式で送信する送信部と、を有し、前記判定部は、前記数値列において０である前記値が連続している個数が０個の場合、当該個数を前記ｒｕｎｚデータとせず、前記判定部は、連続する、０ではない前記値の組を、前記ｖａｌｕｅデータとすることを特徴とするデータ圧縮装置である。
【０００８】
また、本発明の他の態様のデータ圧縮装置において、前記判定部は、前記数値列において連続する０である値の個数が１個の場合のみ、０である当該値を０ではない前記値とみなして、当該値を前記ｖａｌｕｅデータとすることを特徴とする。
【０００９】
また、本発明の他の態様は、データ圧縮装置から送信される前記符号化データを、固定長データを送受信する通信方式で受信する受信部と、前記第１のハフマンテーブルを用いてハフマン符号化された前記ｒｕｎｚデータを、前記第１のハフマンテーブルを用いて復号化し、前記第２のハフマンテーブルを用いて符号化された前記ｇｒｏｕｐデータを、前記第２のハフマンテーブルを用いて復号化し、前記ｇｒｏｕｐデータと前記付加ビットとに基づいて前記ｖａｌｕｅデータを算出する復号化部と、復号化された前記ｒｕｎｚデータと、算出された前記ｖａｌｕｅデータとに基づいて、前記符号化対象データを算出する算出部と、を有することを特徴とするデータ復号装置である。
【００１０】
また、本発明の他の態様は、複数の値が含まれる数値列を構成する符号化対象データを入力する入力ステップと、前記符号化対象データのゼロランレングス符号化を行い、前記数値列において０である前記値が連続している個数をｒｕｎｚデータとし、０ではない前記値をｖａｌｕｅデータとし、さらに、前記ｖａｌｕｅデータの絶対値を表現できる最小のビット長を示す数値をｇｒｏｕｐデータとする判定ステップと、前記ｒｕｎｚデータを１次元の第１のハフマンテーブルを用いてハフマン符号化し、前記ｇｒｏｕｐデータを前記第１のハフマンテーブルとは異なる１次元の第２のハフマンテーブルを用いてハフマン符号化し、さらに、前記ｇｒｏｕｐデータから前記ｖａｌｕｅデータを特定するための付加ビットを算出する符号化ステップと、前記符号化ステップでハフマン符号化した前記ｒｕｎｚデータと、前記符号化ステップでハフマン符号化した前記ｇｒｏｕｐデータと、前記符号化ステップで算出した前記付加ビットとを、前記符号化対象データの符号化データとして、固定長データを送受信する通信方式で送信する送信ステップと、を含み、前記判定ステップでは、前記数値列において０である前記値が連続している個数が０個の場合、当該個数を前記ｒｕｎｚデータとせず、前記判定ステップでは、連続する、０ではない前記値の組を、前記ｖａｌｕｅデータとすることを特徴とするデータ圧縮方法である。
【００１１】
また、本発明の他の態様は、データ圧縮方法で符号化された前記符号化データを、固定長データを送受信する通信方式で受信する受信ステップと、前記第１のハフマンテーブルを用いてハフマン符号化された前記ｒｕｎｚデータを、前記第１のハフマンテーブルを用いて復号化し、前記第２のハフマンテーブルを用いて符号化された前記ｇｒｏｕｐデータを、前記第２のハフマンテーブルを用いて復号化し、前記ｇｒｏｕｐデータと前記付加ビットとに基づいて前記ｖａｌｕｅデータを算出する復号化ステップと、復号化された前記ｒｕｎｚデータと、算出された前記ｖａｌｕｅデータとに基づいて、前記符号化対象データを算出する算出ステップと、を含むことを特徴とするデータ復号方法である。
【００１２】
また、本発明の他の態様は、複数の値が含まれる数値列を構成する符号化対象データを入力する入力部と、前記符号化対象データのゼロランレングス符号化を行い、前記数値列において０である前記値が連続している個数をｒｕｎｚデータとし、０ではない前記値をｖａｌｕｅデータとし、さらに、前記ｖａｌｕｅデータの絶対値を表現できる最小のビット長を示す数値をｇｒｏｕｐデータとする判定部と、前記ｒｕｎｚデータを１次元の第１のハフマンテーブルを用いてハフマン符号化し、前記ｇｒｏｕｐデータを前記第１のハフマンテーブルとは異なる１次元の第２のハフマンテーブルを用いてハフマン符号化し、さらに、前記ｇｒｏｕｐデータから前記ｖａｌｕｅデータを特定するための付加ビットを算出する符号化部と、前記符号化部がハフマン符号化した前記ｒｕｎｚデータと、前記符号化部がハフマン符号化した前記ｇｒｏｕｐデータと、前記符号化部が算出した前記付加ビットとを、前記符号化対象データの符号化データとして、固定長データを送受信する通信方式で送信する送信部と、を有するデータ圧縮装置と、前記送信部から送信される前記符号化データを、固定長データを送受信する通信方式で受信する受信部と、前記第１のハフマンテーブルを用いてハフマン符号化された前記ｒｕｎｚデータを、前記第１のハフマンテーブルを用いて復号化し、前記第２のハフマンテーブルを用いて符号化された前記ｇｒｏｕｐデータを、前記第２のハフマンテーブルを用いて復号化し、前記ｇｒｏｕｐデータと前記付加ビットとに基づいて前記ｖａｌｕｅデータを算出する復号化部と、復号化された前記ｒｕｎｚデータと、算出された前記ｖａｌｕｅデータとに基づいて、前記符号化対象データを算出する算出部と、を有するデータ復号装置と、を含み、前記判定部は、前記数値列において０である前記値が連続している個数が０個の場合、当該個数を前記ｒｕｎｚデータとせず、前記判定部は、連続する、０ではない前記値の組を、前記ｖａｌｕｅデータとすることを特徴とするデータ圧縮および復号システムである。
【００１３】
また、本発明の他の態様は、複数の値が含まれる数値列を構成する符号化対象データを入力する入力部と、前記符号化対象データのうち、０ではない前記値をｖａｌｕｅ符号化対象データとして記憶するｖａｌｕｅ記憶部と、０ではない前記値と、他の０ではない前記値との間に、０である前記値が連続している個数をｒｕｎｚ符号化対象データとして記憶するｒｕｎｚ記憶部と、前記ｒｕｎｚ符号化対象データを第１のハフマンテーブルを用いて符号化するとともに、前記ｖａｌｕｅ符号化対象データを前記第１のハフマンテーブルとは異なる第２のハフマンテーブルを用いて符号化する符号化部と、前記符号化部が符号化した符号化データを、固定長データを送受信する通信方式で送信する送信部と、を有し、前記固定長は、前記符号化対象データのビット幅に基づいた長さであることを特徴とするデータ圧縮装置である。
【００１４】
また、本発明の他の態様のデータ圧縮装置において、前記ｒｕｎｚ記憶部は、０である前記値が連続している個数が０個の場合、当該個数を前記ｒｕｎｚ符号化対象データとして記憶せず、前記ｖａｌｕｅ記憶部は、連続する、０ではない前記値の組を、前記ｖａｌｕｅ符号化対象データとして記憶することを特徴とする。
【００１５】
また、本発明の他の態様のデータ圧縮装置において、前記ｖａｌｕｅ記憶部と、前記ｒｕｎｚ記憶部とは、連続する０である値の個数が１個の場合のみ、０である当該値を０ではない前記値とみなして、当該値を前記ｖａｌｕｅ符号化対象データとして記憶することを特徴とする。
【００１６】
また、本発明の他の態様は、データ圧縮装置から送信される前記符号化データを、固定長データを送受信する通信方式で受信する受信部と、前記第１のハフマンテーブルを用いて符号化された前記ｒｕｎｚ符号化対象データを、前記第１のハフマンテーブルを用いて復号化し、前記第２のハフマンテーブルを用いて符号化された前記ｖａｌｕｅ符号化対象データを、前記第２のハフマンテーブルを用いて復号化する復号化部と、復号化された前記ｒｕｎｚ符号化対象データと、復号化された前記ｖａｌｕｅ符号化対象データとに基づいて、前記符号化対象データを算出する算出部と、を有することを特徴とするデータ復号装置である。
【００１７】
また、本発明の他の態様は、データ圧縮装置から送信される前記符号化データを、固定長データを送受信する通信方式で受信する受信部と、前記第１のハフマンテーブルを用いて符号化された前記ｒｕｎｚ符号化対象データを、前記第１のハフマンテーブルを用いて復号化し、前記第２のハフマンテーブルを用いて符号化された前記ｖａｌｕｅ符号化対象データを、前記第２のハフマンテーブルを用いて復号化する復号化部と、復号化された前記ｒｕｎｚ符号化対象データと、復号化された前記ｖａｌｕｅ符号化対象データとに基づいて、前記符号化対象データを算出する算出部と、を有することを特徴とするデータ復号装置である。
【００１８】
また、本発明の他の態様は、データ圧縮装置から送信される前記符号化データを、固定長データを送受信する通信方式で受信する受信部と、前記第１のハフマンテーブルを用いて符号化された前記ｒｕｎｚ符号化対象データを、前記第１のハフマンテーブルを用いて復号化し、前記第２のハフマンテーブルを用いて符号化された前記ｖａｌｕｅ符号化対象データを、前記第２のハフマンテーブルを用いて復号化する復号化部と、復号化された前記ｒｕｎｚ符号化対象データと、復号化された前記ｖａｌｕｅ符号化対象データとに基づいて、前記符号化対象データを算出する算出部と、を有することを特徴とするデータ復号装置である。
【００１９】
また、本発明の他の態様は、複数の値が含まれる数値列を構成する符号化対象データを入力するステップと、前記符号化対象データのうち、０ではない前記値をｖａｌｕｅ符号化対象データとして記憶するステップと、０ではない前記値と、他の０ではない前記値との間に、０である前記値が連続している個数をｒｕｎｚ符号化対象データとして記憶するステップと、前記ｒｕｎｚ符号化対象データを第１のハフマンテーブルを用いて符号化するとともに、前記ｖａｌｕｅ符号化対象データを前記第１のハフマンテーブルとは異なる第２のハフマンテーブルを用いて符号化する符号化ステップと、前記符号化ステップで符号化した符号化データを、固定長データを送受信する通信方式で送信するステップと、を含み、前記固定長は、前記符号化対象データのビット幅に基づいた長さであることを特徴とするデータ圧縮方法である。
【００２０】
また、本発明の他の態様は、データ圧縮方法で符号化されたデータを、固定長データを送受信する通信方式で受信するステップと、前記第１のハフマンテーブルを用いて符号化された前記ｒｕｎｚ符号化対象データを、前記第１のハフマンテーブルを用いて復号化し、前記第２のハフマンテーブルを用いて符号化された前記ｖａｌｕｅ符号化対象データを、前記第２のハフマンテーブルを用いて復号化するステップと、復号化された前記ｒｕｎｚ符号化対象データと、復号化された前記ｖａｌｕｅ符号化対象データとに基づいて、前記符号化対象データを算出するステップと、を含むことを特徴とするデータ復号方法である。
【００２１】
また、本発明の他の態様は、複数の値が含まれる数値列を構成する符号化対象データを入力する入力部と、前記符号化対象データのうち、０ではない前記値をｖａｌｕｅ符号化対象データとして記憶するｖａｌｕｅ記憶部と、０ではない前記値と、他の０ではない前記値との間に、０である前記値が連続している個数をｒｕｎｚ符号化対象データとして記憶するｒｕｎｚ記憶部と、前記ｒｕｎｚ符号化対象データを第１のハフマンテーブルを用いて符号化するとともに、前記ｖａｌｕｅ符号化対象データを前記第１のハフマンテーブルとは異なる第２のハフマンテーブルを用いて符号化する符号化部と、前記符号化部が符号化した符号化データを、固定長データを送受信する通信方式で送信する送信部と、を有するデータ圧縮装置と、前記送信部から送信される前記符号化データを、固定長データを送受信する通信方式で受信する受信部と、前記第１のハフマンテーブルを用いて符号化された前記ｒｕｎｚ符号化対象データを、前記第１のハフマンテーブルを用いて復号化し、前記第２のハフマンテーブルを用いて符号化された前記ｖａｌｕｅ符号化対象データを、前記第２のハフマンテーブルを用いて復号化する復号化部と、復号化された前記ｒｕｎｚ符号化対象データと、復号化された前記ｖａｌｕｅ符号化対象データとに基づいて、前記符号化対象データを算出する算出部と、を有するデータ復号装置と、を有し、前記固定長は、前記符号化対象データのビット幅に基づいた長さであることを特徴とするデータ圧縮および復号システムである。
【発明の効果】
【００２２】
本発明のデータ圧縮装置またはデータ圧縮方法によれば、入力部は、複数の値が含まれる数値列を構成する符号化対象データを入力する。また、判定部は、符号化対象データのゼロランレングス符号化を行い、数値列において０である値が連続している個数をｒｕｎｚデータとし、０ではない値をｖａｌｕｅデータとし、さらに、ｖａｌｕｅデータの絶対値を表現できる最小のビット長を示す数値をｇｒｏｕｐデータとする。また、符号化部は、ｒｕｎｚデータを１次元の第１のハフマンテーブルを用いてハフマン符号化し、ｇｒｏｕｐデータを第１のハフマンテーブルとは異なる１次元の第２のハフマンテーブルを用いてハフマン符号化し、さらに、ｇｒｏｕｐデータからｖａｌｕｅデータを特定するための付加ビットを算出する。また、送信部は、符号化部がハフマン符号化したｒｕｎｚデータと、符号化部がハフマン符号化したｇｒｏｕｐデータと、符号化部が算出した付加ビットとを、符号化対象データの符号化データとして、固定長データを送受信する通信方式で送信する。また、固定長は送信するデータの最大長であり、符号化対象データの符号化後の最大ビット長に基づいて固定長を短くすることができる。
【００２３】
このように、１次元のハフマンテーブルを用いて符号化を行うため、符号種類が少なくなる。符号種類が少なくなると、ハフマン符号化後の最大ビット長も短くなる。よって、固定長データを送受信する通信方式でデータを送信する際に、固定長を短くすることができ、通信効率を向上することができる。
【００２４】
また、本発明のデータ復号装置またはデータ復号方法によれば、受信部は、データ圧縮装置から送信される符号化データを、固定長データを送受信する通信方式で受信する。また、復号化部は、第１のハフマンテーブルを用いてハフマン符号化されたｒｕｎｚデータを、第１のハフマンテーブルを用いて復号化し、第２のハフマンテーブルを用いて符号化されたｇｒｏｕｐデータを、第２のハフマンテーブルを用いて復号化し、ｇｒｏｕｐデータと付加ビットとに基づいてｖａｌｕｅデータを算出する。また、算出部は、復号化されたｒｕｎｚデータと、算出されたｖａｌｕｅデータとに基づいて、符号化対象データを算出する。
【００２５】
このように、１次元のハフマンテーブルを用いて復号化を行うため、符号種類が少なくなる。符号種類が少なくなると、ハフマン符号化後の最大ビット長も短くなる。よって、固定長データを送受信する通信方式でデータを受信する際に、固定長を短くすることができ、通信効率を向上することができる。
【００２６】
また、本発明のデータ圧縮および復号システムによれば、入力部は、複数の値が含まれる数値列を構成する符号化対象データを入力する。また、判定部は、符号化対象データのゼロランレングス符号化を行い、数値列において０である値が連続している個数をｒｕｎｚデータとし、０ではない値をｖａｌｕｅデータとし、さらに、ｖａｌｕｅデータの絶対値を表現できる最小のビット長を示す数値をｇｒｏｕｐデータとする。また、符号化部は、ｒｕｎｚデータを１次元の第１のハフマンテーブルを用いてハフマン符号化し、ｇｒｏｕｐデータを第１のハフマンテーブルとは異なる１次元の第２のハフマンテーブルを用いてハフマン符号化し、さらに、ｇｒｏｕｐデータからｖａｌｕｅデータを特定するための付加ビットを算出する。また、送信部は、符号化部がハフマン符号化したｒｕｎｚデータと、符号化部がハフマン符号化したｇｒｏｕｐデータと、符号化部が算出した付加ビットとを、符号化対象データの符号化データとして、固定長データを送受信する通信方式で送信する。また、受信部は、データ圧縮装置から送信される符号化データを、固定長データを送受信する通信方式で受信する。また、復号化部は、第１のハフマンテーブルを用いてハフマン符号化されたｒｕｎｚデータを、第１のハフマンテーブルを用いて復号化し、第２のハフマンテーブルを用いて符号化されたｇｒｏｕｐデータを、第２のハフマンテーブルを用いて復号化し、ｇｒｏｕｐデータと付加ビットとに基づいてｖａｌｕｅデータを算出する。また、算出部は、復号化されたｒｕｎｚデータと、算出されたｖａｌｕｅデータとに基づいて、符号化対象データを算出する。また、固定長は送信するデータの最大長であり、符号化対象データの符号化後の最大ビット長に基づいて固定長を短くすることができる。
【００２７】
このように、１次元のハフマンテーブルを用いて符号化および復号化を行うため、符号種類が少なくなる。符号種類が少なくなると、ハフマン符号化後の最大ビット長も短くなる。よって、固定長データを送受信する通信方式でデータを送受信する際に、固定長を短くすることができ、通信効率を向上することができる。
【図面の簡単な説明】
【００２８】
【図１】本発明の第１の実施形態におけるデータ圧縮および復号システムの構成を示したブロック図である。
【図２】本発明の第１の実施形態における圧縮部の構成を示したブロック図である。
【図３】本発明の第１の実施形態における伸張部の構成を示したブロック図である。
【図４】本発明の第１の実施形態におけるゼロランレングス符号化の具体例を示した説明図である。
【図５】本発明の第１の実施形態における本実施形態における記憶部が記憶する量子化スケールとハフマンテーブルの種類との関連を一意に特定する関連テーブルを示した概略図である。
【図６】本発明の第１の実施形態におけるｒｕｎｚと、ｖａｌｕｅと、ｇｒｏｕｐとの値を纏めた概略図である。
【図７】本発明の第１の実施形態におけるハフマン符号化部の構成を示したブロック図である。
【図８】本発明の第１の実施形態における判定部の処理手順を示したフローチャートである。
【図９】本発明の第１の実施形態における符号化部の処理手順を示したフローチャートである。
【図１０】本発明の第１の実施形態におけるハフマン伸張化部の構成を示したブロック図である。
【図１１】本発明の第１の実施形態における復号化部の処理手順を示したフローチャートである。
【図１２】本発明の第１の実施形態における出力部の処理手順を示したフローチャートである。
【図１３】本発明の第２の実施形態におけるゼロランレングス符号化の具体例を示した説明図である。
【図１４】本発明の第２の実施形態におけるバリューランレングス符号化の具体例を示した説明図である。
【図１５】本発明の第２の実施形態におけるｒｕｎｚと、ｒｕｎｖと、ｖａｌｕｅと、ｇｒｏｕｐとの値を纏めた概略図である。
【図１６】本発明の第２の実施形態におけるハフマン符号化部の構成を示したブロック図である。
【図１７】本発明の第２の実施形態における判定部の処理手順を示したフローチャートである。
【図１８】本発明の第２の実施形態における符号化部の処理手順を示したフローチャートである。
【図１９】本発明の第２の実施形態におけるハフマン伸張化部の構成を示したブロック図である。
【図２０】本発明の第２の実施形態における復号化部の処理手順を示したフローチャートである。
【図２１】本発明の第２の実施形態における出力部の処理手順を示したフローチャートである。
【図２２】本発明の第３の実施形態におけるゼロランレングス符号化の具体例を示した説明図である。
【図２３】本発明の第３の実施形態におけるバリューランレングス符号化の具体例を示した説明図である。
【図２４】本発明の第３の実施形態におけるｒｕｎｚと、ｒｕｎｖと、ｖａｌｕｅと、ｇｒｏｕｐとの値を纏めた概略図である。
【発明を実施するための形態】
【００２９】
（第１の実施形態）
以下、本発明の第１の実施形態について図面を参照して説明する。図１は、本実施形態におけるデータ圧縮および復号システム１の構成を示したブロック図である。図示する例では、データ圧縮および復号システム１は、データ圧縮装置２とデータ復号装置３とを備える。データ圧縮装置２は、圧縮部２０と送信部３０とを備える。データ復号装置３は、受信部４０と伸張部５０とを備える。
【００３０】
圧縮部２０は画像データを圧縮し、圧縮したデータを送信部に入力する。圧縮部２０の構成および圧縮部２０が用いる圧縮方法については後述する。送信部３０は、固定長のデータを送受信する規格を用いて、圧縮部２０が圧縮した圧縮データをデータ復号装置３に送信する。受信部４０は、送信部３０から送信される圧縮データを受信し、受信した圧縮データを伸張部５０に入力する。伸張部５０は、受信部４０から入力された圧縮データを伸張（復号）し、出力する。
【００３１】
次に、圧縮部２０について説明する。図２は、本実施形態における圧縮部２０の構成を示したブロック図である。図示する例では、圧縮部２０は、周波数変換部２１と、量子化部２２と、記憶部２３（圧縮装置記憶部）と、ハフマン符号化部２４（符号化部）とを備える。
【００３２】
周波数変換部２１は、空間周波数変換（フーリエ変換）を行い、圧縮部２０に入力された画像データを周波数成分に分ける。量子化部２２は、周波数変換部２１が変換した周波数成分を量子化して各周波数成分の分解能を変更する。記憶部２３は、１次元のハフマンテーブルを記憶する。ハフマン符号化部２４は、記憶部２３が記憶しているハフマンテーブルを用いて、量子化部２２が量子化した周波数成分（符号化対象データ）の符号化を行い、圧縮データを出力する。
【００３３】
次に、伸張部５０について説明する。図３は、本実施形態における伸張部５０の構成を示したブロック図である。図示する例では、伸張部５０は、記憶部５１（復号装置記憶部）と、ハフマン伸張化部５２（復号部）と、逆量子化部５３と、逆周波数変換部５４とを備える。
【００３４】
記憶部５１は、１次元のハフマンテーブルを記憶する。ハフマン伸張化部５２は、記憶部５１が記憶するハフマンテーブルを用いて、受信部４０から入力される圧縮データを伸張（復号）し、量子化された周波数成分を復元する。逆量子化部５３は、量子化された周波数成分から画像データの周波数成分を復元する。逆周波数変換部５４は、逆空間周波数変換（逆フーリエ変換）を行い、周波数成分から画像データを復元する。
【００３５】
次に、本実施形態のハフマン符号化部２４における符号化方法について説明する。以下、ハフマン符号化部２４に入力される周波数成分のうち、ＡＣ成分（符号化対象データ）「５，０，０，０，３，０，０，１，２，０，０，４，０，６，・・・」を符号化する例を用いて説明する。
【００３６】
初めに、ハフマン符号化部２４は、ゼロランレングス符号化を行う。具体的には、符号化対象データにおいて「０」が連続する数を算出し、「０」が連続する数と、「０」以外の値とで符号化対象データを表す。以下、「０」が連続する数を示すデータをｒｕｎｚとする。また「０」以外の値を示すデータをｖａｌｕｅとする。
【００３７】
図４は、ゼロランレングス符号化の具体例を示した説明図である。図示する例では、符号化対象データは「５，０，０，０，３，０，０，１，２，０，０，４，０，６，・・・」である。図示する符号化対象データの先頭の値は「５」であるため、「０」が連続する数は「０」個である。また、符号化対象データ「５」の後の値は「０，０，０，３」であるため、「０」が連続する数は「３」個である。また、符号化対象データ「３」の後の値は「０，０，１」であるため、「０」が連続する数は「２」個である。また、符号化対象データ「１」の後の値は「２」であるため、「０」が連続する数は「０」個である。また、符号化対象データ「２」の後の値は「０，０，４」であるため、「０」が連続する数は「２」個である。以下、同様に「０」が連続する数を算出すると、ｒｕｎｚは「０」「３」「２」「０」「２」「１」・・・となる。また、「０」以外の値（ｖａｌｕｅ）は、「５」「３」「１」「２」「４」「６」・・・となる。
【００３８】
次に、ハフマン符号化部２４は、ｖａｌｕｅを特定するｇｒｏｕｐと付加ビットとを算出する。なお、ｇｒｏｕｐは、Ｖａｌｕｅの絶対値を表現できる最小のビット長（付加ビットの長さ）と同じ値である。なお、ｇｒｏｕｐと付加ビットとでｖａｌｕｅを特定することができる。図５は、ｇｒｏｕｐとｖａｌｕｅと付加ビット長との対応を示した概略図である。図示する例では、ｖａｌｕｅ「−１、１」に対応するｇｒｏｕｐは「１」であり、付加ビット長は「１」である。また、ｖａｌｕｅ「−３、−２、２、３」に対応するｇｒｏｕｐは「２」であり、付加ビット長は「２」である。また、ｖａｌｕｅ「−７・・・−４、４・・・７」に対応するｇｒｏｕｐは「３」であり、付加ビット長は「３」である。他のｖａｌｕｅに対応するｇｒｏｕｐと付加ビット長とは図示するとおりである。この対応関係により、ｖａｌｕｅが「５」「３」「１」「２」「４」「６」・・・である場合、ｇｒｏｕｐは「３」「２」「１」「２」「３」「３」・・・となる。また、このときの付加ビット長は「３」「２」「１」「２」「３」「３」・・・となる。
【００３９】
図６は、符号化対象データ「５，０，０，０，３，０，０，１，２，０，０，４，０，６，・・・」のｒｕｎｚと、ｖａｌｕｅと、ｇｒｏｕｐとの値を纏めた概略図である。図示する例では、ｒｕｎｚと、ｖａｌｕｅと、ｇｒｏｕｐとの値が、行の上から順に記載されている。例えば、行１０１には、ｒｕｎｚ「０」と、ｖａｌｕｅ「５」と、ｇｒｏｕｐ「３」とが記載されている。また、行１０２には、ｒｕｎｚ「３」と、ｖａｌｕｅ「３」と、ｇｒｏｕｐ「２」とが記載されている。他の行については図示するとおりである。なお、各行のデータを１つの符号セットとする。
【００４０】
次に、ハフマン符号化部２４は、１つの符号セット毎に、ｒｕｎｚと、ｇｒｏｕｐと、ｖａｌｕｅとを、それぞれ１次元の符号化テーブルを用いて符号化する。なお、ｒｕｎｚの符号化に用いるハフマンテーブル（第１のハフマンテーブル）をＨｚとする。また、ｇｒｏｕｐの符号化に用いるハフマンテーブル（第２のハフマンテーブル）をＨｇとする。これにより、１つの符号セットをハフマン符号化したデータは、Ｈｚ［ｒｕｎｚ］＋Ｈｇ［ｇｒｏｕｐ］＋ｖａｌｕｅ．ｅｎｃとなる。ｖａｌｕｅ．ｅｎｃは付加ビットである。なお、符号化されたものに対して、接尾に．ｅｎｃを付加している。
【００４１】
次に、本実施形態のハフマン符号化部２４の構成について説明する。図７は、本実施形態のハフマン符号化部２４の構成を示したブロック図である。図示する例では、ハフマン符号化部２４は、入力部２４０と、判定部２４１と、符号化部２４２とを備えている。また、判定部２４１は、記憶部２４１０（ｖａｌｕｅ記憶部、ｒｕｎｚ記憶部）を備えている。判定部２４１は、入力された符号化対象データを判定し、ｔｒｉｇと、１セットのｒｕｎｚと、ｇｒｏｕｐと、ｖａｌｕｅとを記憶部２４１０に記憶させる。また、判定部２４１は、記憶部２４１０に記憶させたｔｒｉｇと、１セットのｒｕｎｚと、ｇｒｏｕｐと、ｖａｌｕｅとを符号化部２４２に入力する。符号化部２４２は、ｔｒｉｇが入力されると、ｔｒｉｇとともに入力された、１セットのｒｕｎｚと、ｇｒｏｕｐと、ｖａｌｕｅとを１次元ハフマンテーブルを用いて符号化する。そして、符号化部２４２は、符号化した１セットのデータ、Ｈｚ［ｒｕｎｚ］＋Ｈｇ［ｇｒｏｕｐ］＋ｖａｌｕｅ．ｅｎｃを出力する。符号化部２４２はｔｒｉｇが入力される毎にこの処理を行う。このような手順により、ハフマン符号化部２４は、符号化対象データの符号化を行う。
【００４２】
次に、判定部２４１の詳細な処理手順について説明する。図８は、本実施形態における判定部２４１の処理手順を示したフローチャートである。
（ステップＳ１０１）判定部２４１は、各変数の値を「０」に初期化する。その後、ステップＳ１０２の処理に進む。
【００４３】
（ステップＳ１０２）判定部２４１は、ｉ＜６３であれば、ｉ＋＋とした後にステップＳ１０３〜ステップＳ１１１の処理を実行する。また、判定部２４１は、ｉ＜６３でなければ処理を終了する。なお、符号化対象データであるＡＣ成分は６３個であるため、判定部２４１は、ステップＳ１０３〜ステップＳ１１１の処理を６３回繰り返す。すなわち、ステップＳ１０３〜ステップＳ１１１の処理の実行回数が６３回未満である場合にはステップＳ１０３の処理に進み、それ以外の場合には処理を終了する。
【００４４】
（ステップＳ１０３）判定部２４１は、ｔｒｉｇ＝０とする。その後、ステップＳ１０４の処理に進む。
（ステップＳ１０４）判定部２４１は、ｄｉｎ（ｉ）が「０」であるか否かを判定する。ｄｉｎ（ｉ）が「０」であると判定部２４１が判定した場合にはステップＳ１０５の処理に進み、それ以外の場合にはステップＳ１０８の処理に進む。
【００４５】
（ステップＳ１０５）判定部２４１は、ｒｕｎｚ＿ｃｎｔ＋＋とする。その後、ステップＳ１０６の処理に進む。
（ステップＳ１０６）判定部２４１は、ｉが「６２」であるか否かを判定する。ｉが「６２」であると判定部２４１が判定した場合にはステップＳ１０７の処理に進み、それ以外の場合にはステップＳ１１１の処理に進む。
【００４６】
（ステップＳ１０７）判定部２４１は、ｒｕｎｚ＝ＥＯＢとする。また、判定部２４１は、ｒｕｎｚ＿ｃｎｔ＝０とする。また、判定部２４１はｔｒｉｇ＝１とする。これにより、ｔｒｉｇが「１」となったため、判定部２４１は、ｒｕｎｚと、ｇｒｏｕｐと、ｖａｌｕｅと、ｔｒｉｇとを符号化部２４２に出力する。その後、ステップＳ１１１の処理に進む。
【００４７】
（ステップＳ１０８）判定部２４１は、ｒｕｎｚ＝ｒｕｎｚ＿ｃｎｔとする。その後、判定部２４１は、ｒｕｎｚ＿ｃｎｔ＝０とする。その後、ステップＳ１０９の処理に進む。
（ステップＳ１０９）判定部２４１は、ｇｒｏｕｐを、ｄｉｎ（ｉ）で一意に特定されるｇｒｏｕｐとする。また、判定部２４１は、ｖａｌｕｅ＝ｄｉｎ（ｉ）とする。その後、ステップＳ１１０の処理に進む。
【００４８】
（ステップＳ１１０）判定部２４１は、ｔｒｉｇ＝１とする。これにより、ｔｒｉｇが「１」となったため、判定部２４１は、ｒｕｎｚと、ｇｒｏｕｐと、ｖａｌｕｅと、ｔｒｉｇとを符号化部２４２に出力する。その後、ステップＳ１１１の処理に進む。
（ステップＳ１１１）判定部２４１は、ステップＳ１０２の処理に戻る。
【００４９】
上述したステップＳ１０１〜ステップＳ１１１の処理により、判定部２４１は、１つの符号セット毎に、ｒｕｎｚと、ｇｒｏｕｐと、ｖａｌｕｅと、ｔｒｉｇとを符号化部２４２に入力する。
【００５０】
次に、符号化部２４２の詳細な処理手順について説明する。図９は、本実施形態における符号化部２４２の処理手順を示したフローチャートである。符号化部２４２は、判定部２４１からｔｒｉｇが入力される毎に、以下のステップＳ２０１〜２０４の処理を実行する。
（ステップＳ２０１）符号化部２４２は、入力されたｔｒｉｇが「１」であるか否かを判定する。入力されたｔｒｉｇが「１」であると符号化部２４２が判定した場合にはステップＳ２０２の処理に進み、それ以外の場合には処理を終了する。
【００５１】
（ステップＳ２０２）符号化部２４２は、入力されたｒｕｎｚを、記憶部２３が記憶する一次元のハフマンテーブルＨｚを用いてハフマン符号化し、Ｈｚ［ｒｕｎｚ］を出力する。その後、ステップＳ２０３の処理に進む。
（ステップＳ２０３）符号化部２４２は、入力されたｒｕｎｚが「ＥＯＢ」では無いか否かを判定する。入力されたｒｕｎｚが「ＥＯＢ」では無いと符号化部２４２が判定した場合にはステップＳ２０４の処理に進み、それ以外の場合には処理を終了する。
【００５２】
（ステップＳ２０４）符号化部２４２は、入力されたｇｒｏｕｐを、記憶部２３が記憶する一次元のハフマンテーブルＨｇを用いてハフマン符号化し、Ｈｇ［ｇｒｏｕｐ］を出力する。また、符号化部２４２は、入力されたｇｒｏｕｐとｖａｌｕｅとに対応する付加ビットを算出して、ｖａｌｕｅ．ｅｎｃを出力する。その後、処理を終了する。
【００５３】
上述したステップＳ２０１〜ステップＳ２０４の処理により、符号化部２４２は、１つの符号セット毎に、ｒｕｎｚと、ｇｒｏｕｐと、ｖａｌｕｅとを、それぞれ一次元のハフマンテーブルを用いて符号化し、ｒｕｎｚを符号化したＨｚ［ｒｕｎｚ］と、ｇｒｏｕｐを符号化したＨｇ［ｇｒｏｕｐ］と、付加ビットｖａｌｕｅ．ｅｎｃとを出力する。
【００５４】
次に、本実施形態におけるハフマン伸張化部５２の構成について説明する。図１０は、本実施形態におけるハフマン伸張化部５２の構成を示したブロック図である。図示する例では、ハフマン伸張化部５２は、復号化部５２１と出力部５２２（算出部）とを備えている。復号化部５２１は、入力された符号化データを復号化して、１つの符号セット毎に、ｒｕｎｚとｖａｌｕｅを取得する。また、符号化部５２１は、取得した１セットのｒｕｎｚとｖａｌｕｅとを出力部５２２に入力する。出力部５２２は、入力された１セットのｒｕｎｚとｖａｌｕｅとに基づいて、１セット分の符号化対象データを算出して出力する。また、出力部５２２は、１セット分の符号化対象データを出力した後、ｔｒｉｇを復号化部５２１に入力する。復号化部５２１は、ｔｒｉｇが入力されると、次の符号セットのｒｕｎｚとｖａｌｕｅを取得し、出力部５２２に入力する。復号化部５２１と出力部５２２とが上記の処理を繰り返すことで、ハフマン伸張化部５２は、符号化された符号化対象データを復号化する。
【００５５】
次に、復号化部５２１の詳細な処理手順について説明する。図１１は、本実施形態における復号化部５２１の処理手順を示したフローチャートである。
【００５６】
（ステップＳ３０１）復号化部５２１は、ｎｕｍ＜６３であればステップＳ３０２〜ステップＳ３０６の処理を実行し、それ以外の場合には処理を終了する。なお、ｎｕｍの初期値は０である。また、２回目以降のステップＳ３０１の処理は、出力部５２２からｔｒｉｇが入力された場合に実行する。
【００５７】
（ステップＳ３０２）復号化部５２１は、Ｈｚ［ｒｕｎｚ］を、記憶部５１が記憶する一次元のハフマンテーブルＨｚを用いて復号化する。また復号化部５２１は、ｒｕｎｚを、復号化したＨｚ［ｒｕｎｚ］の値とする。そして、復号化部５２１は、ｒｕｎｚを出力部５２２に入力する。その後、ステップＳ３０３の処理に進む。
（ステップＳ３０３）復号化部５２１は、ｒｕｎｚが「ＥＯＢ」では無いか否かを判定する。ｒｕｎｚが「ＥＯＢ」では無いと符号化部５２１が判定した場合にはステップＳ３０４の処理に進み、それ以外の場合にはステップＳ３０５の処理に進む。
【００５８】
（ステップＳ３０４）復号化部５２１は、ｎｕｍ＝ｒｕｎｚ＋１とする。また、復号化部５２１は、Ｈｇ［ｇｒｏｕｐ］を、記憶部５１が記憶する一次元のハフマンテーブルＨｇを用いて復号化する。また、復号化部５２１は、ｇｒｏｕｐを、復号化したＨｇ［ｇｒｏｕｐ］の値とする。また、復号化部５２１は、ｇｒｏｕｐと付加ビットｖａｌｕｅ．ｅｎｃとに基づいて、ｖａｌｕｅを算出する。また、復号化部５２１は、ｖａｌｕｅ［ｊ］を、算出したｖａｌｕｅの値とする。そして、復号化部５２１は、ｖａｌｕｅ［ｊ］を出力部５２２に入力する。その後、ステップＳ３０６の処理に進む。
【００５９】
（ステップＳ３０５）復号化部５２１は、ｎｕｍ＝６３とする。その後、ステップＳ３０６の処理に進む。
（ステップＳ３０６）復号化部５２１は、ステップＳ３０１の処理に戻る。
【００６０】
上述したステップＳ３０１〜ステップＳ３０６の処理により、復号化部５２１は、１つの符号セット毎に、Ｈｚ［ｒｕｎｚ］と、Ｈｇ［ｇｒｏｕｐ］と、ｖａｌｕｅ．ｅｎｃとを、それぞれ一次元のハフマンテーブルを用いて復号化し、ｒｕｎｚとｖａｌｕｅ［ｊ］とを出力部５２２に入力する。
【００６１】
次に、出力部５２２の詳細な処理手順について説明する。図１２は、本実施形態における出力部５２２の処理手順を示したフローチャートである。
（ステップＳ４０１）出力部５２２は、各変数の値を「０」に初期化する。その後、ステップＳ４０２の処理に進む。
（ステップＳ４０２）出力部５２２は、ｉ＜６３であればステップＳ４０３〜ステップＳ４１１の処理を実行し、それ以外の場合にはステップＳ４１２の処理に進む。
【００６２】
（ステップＳ４０３）出力部５２２は、ｚ＿ｎｕｍ＝ｒｕｎｚ［ｋ］とする。また、出力部５２２は、ｋ＋＋とする。その後、ステップＳ４０４の処理に進む。
（ステップＳ４０４）出力部５２２は、ｚ＿ｎｕｍが「ＥＯＢ」では無いか否かを判定する。ｚ＿ｎｕｍが「ＥＯＢ」では無いと出力部５２２が判定した場合にはステップＳ４０５の処理に進み、それ以外の場合にはステップＳ４０６の処理に進む。
【００６３】
（ステップＳ４０５）出力部５２２は、ｊ＝０とする。また、出力部５２２は、ｎ＝ｚ＿ｎｕｍとする。また、出力部５２２は、ｉ＝ｉ＋ｎとする。その後、ステップＳ４０７の処理に進む。
（ステップＳ４０６）出力部５２２は、ｊ＝ｉとする。また、出力部５２２は、ｎ＝６３とする。また、出力部５２２は、ｉ＝６３とする。その後、ステップＳ４０７の処理に進む。
【００６４】
（ステップＳ４０７）出力部５２２は、ｊ＜ｎであれば、「０」を出力してステップＳ４０８の処理に進み、それ以外の場合にはステップＳ４０９の処理に進む。
（ステップＳ４０８）出力部５２２は、ｊ＋＋とした後、ステップＳ４０７の処理に戻る。
【００６５】
（ステップＳ４０９）出力部５２２は、ｉ＜６３であるか否かを判定する。ｉ＜６３であると出力部５２２が判定した場合にはステップＳ４１０の処理に進み、それ以外の場合にはステップＳ４１１の処理に進む。
（ステップＳ４１０）出力部５２２は、ｉ＋＋とする。また、出力部５２２は、ｖａｌｕｅ［ｍ］を出力する。また、出力部５２２は、ｍ＋＋とする。その後、ステップＳ４１１の処理に進む。
（ステップＳ４１１）出力部５２２は、ステップＳ４０２の処理に戻る。
【００６６】
（ステップＳ４１２）出力部５２２は、ｔｒｉｇ＝１とする。これにより、出力部５２２は、ｔｒｉｇを復号化部５２１に入力する。その後、処理を終了する。
【００６７】
上述したステップＳ４０１〜ステップＳ４０９の処理により、出力部５２２は、１つの符号セット毎に、符号化対象データを出力する。
【００６８】
上述したとおり、本実施形態によれば、１次元のハフマンテーブルを用いて符号化および復号化を行うため、２次元のハフマンテーブルを用いて符号化および復号化を行うよりも符号種類が少なくなる。例えば、ハフマン木はデータの出現確率に依存しているため、最大ビット長の計算は行えないが、JPEG画像では、データの出現確率が１６ｂｉｔにおさまるような確率分布に決めたと考えられる。これを前提とすると、ＪＰＥＧ画像の量子化後のデータが１２ｂｉｔの場合の符号種類（テーブル数）は次のようになる。
JPEG画像  ：  １６×１２＝１９６
本実施形態  ：  ６４＋１２＝７６
（ｒｕｎｚ：６４  ｇｒｏｕｐ：１２）
このように、ＪＰＥＧでは入力データのビット幅が増えることで出現確率が高いものでも短い符号が割り当てられなくなる。しかし、本実施形態では１次元テーブルを用いた符号化の結果を連結しているため、各符号種類の数が最大ビットに影響する。
このように、符号種類が少なくなると、ハフマン符号化後の最大ビット長も短くなる。また、本実施形態のデータ圧縮および復号システム１は、固定長データを送受信する通信方式でデータの送受信を行うため、送信するデータの最大長を固定長と定め、送信するデータ長が長くても短くても、毎回固定長のデータを送受信する。しかしながら、本実施形態では、ハフマン符号化後の最大ビット長が短くなるため、固定長を短くすることができ、通信効率を向上することができる。
【００６９】
（第２の実施形態）
以下、本発明の第２の実施形態について図面を参照して説明する。本実施形態と第１の実施形態と異なる点は、本実施形態では、ゼロランレングスだけではなくバリューランレングスも用いる点である。なお、本実施形態におけるデータ圧縮および復号システム１の構成は、第１の実施形態における各構成と同様の構成である。
【００７０】
次に、本実施形態のハフマン符号化部２４における符号化方法について説明する。以下、ハフマン符号化部２４に入力される周波数成分のうち、ＡＣ成分（符号化対象データ）「５，０，０，０，３，０，０，１，２，０，０，４，０，６，・・・」を符号化する例を用いて説明する。
【００７１】
初めに、ハフマン符号化部２４は、ゼロランレングス符号化を行う。具体的には、符号化対象データにおいて「０」が連続する数を算出し、「０」が連続する数と、「０」以外の値とで符号化対象データを表す。以下、「０」が連続する数を示すデータをｒｕｎｚとする。また「０」以外の値を示すデータをｖａｌｕｅとする。なお、本実施形態では第１の実施形態とは異なり、「０」以外の値が連続する場合、この間の「０」が連続する数については考慮しない。
【００７２】
図１３は、ゼロランレングス符号化の具体例を示した説明図である。図示する例では、符号化対象データは「５，０，０，０，３，０，０，１，２，０，０，４，０，６，・・・」である。図示する符号化対象データの先頭の値は「５」であるため、「０」が連続する数は「０」個である。また、符号化対象データ「５」の後の値は「０，０，０，３」であるため、「０」が連続する数は「３」個である。また、符号化対象データ「３」の後の値は「０，０，１」であるため、「０」が連続する数は「２」個である。また、符号化対象データ「１」の後の値は「２」であるが、本実施形態では「０」以外の値が連続する場合、この間の「０」が連続する数については考慮しない。また、符号化対象データ「２」の後の値は「０，０，４」であるため、「０」が連続する数は「２」個である。以下、同様に「０」が連続する数を算出すると、ｒｕｎｚは「０」「３」「２」「２」「１」・・・となる。また、「０」以外の値（ｖａｌｕｅ）は、「５」「３」「１，２」「４」「６」・・・となる。
【００７３】
次に、ハフマン符号化部２４は、バリューランレングス符号化を行う。具体的には、符号化対象データにおいて、「０」以外の値が連続する数を算出する。以下、「０」以外の値が連続する数を示すデータをｒｕｎｖとする。
【００７４】
図１４は、バリューランレングス符号化の具体例を示した説明図である。図示する例では、符号化対象データは「５，０，０，０，３，０，０，１，２，０，０，４，０，６，・・・」である。図示する符号化対象データの先頭の値は「５」であり、その後の値が「０」であるため、「０」以外の値が連続する数は「１」個である。また、符号化対象データ「５」の後の値は「０，０，０，３，０」であるため、「０」以外の値が連続する数は「１」個である。また、符号化対象データ「３」の後の値は「０，０，１，２，０」であるため、「０」以外の値が連続する数は「２」個である。また、符号化対象データ「２」の後の値は「０，０，４，０」であるため、「０」以外の値が連続する数は「１」個である。また、符号化対象データ「４」の後の値は「０，６，・・・」であるため、「０」以外の値が連続する数は「１」個である。以下、同様に「０」以外の数が連続する数を算出すると、ｒｕｎｖは「１」「１」「２」「１」「１」・・・となる。
【００７５】
次に、ハフマン符号化部２４は、ｖａｌｕｅを特定するｇｒｏｕｐと付加ビットとを算出する。ｖａｌｕｅが「５」「３」「１，２」「４」「６」・・・である場合、ｇｒｏｕｐは「３」「２」「１，２」「３」「３」・・・となる。また、このときの付加ビット長は「３」「２」「１，２」「３」「３」・・・となる。
【００７６】
図１５は、符号化対象データ「５，０，０，０，３，０，０，１，２，０，０，４，０，６，・・・」のｒｕｎｚと、ｒｕｎｖと、ｖａｌｕｅと、ｇｒｏｕｐとの値を纏めた概略図である。図示する例では、ｒｕｎｚと、ｒｕｎｖと、ｖａｌｕｅと、ｇｒｏｕｐとの値が、行の上から順に記載されている。例えば、行２０１には、ｒｕｎｚ「０」と、ｒｕｎｖ「１」と、ｖａｌｕｅ「５」と、ｇｒｏｕｐ「３」とが記載されている。また、行２０２には、ｒｕｎｚ「３」と、ｒｕｎｖ「１」と、ｖａｌｕｅ「３」と、ｇｒｏｕｐ「２」とが記載されている。また、行２０３には、ｒｕｎｚ「２」と、ｒｕｎｖ「２」と、ｖａｌｕｅ「１，２」と、ｇｒｏｕｐ「１，２」とが記載されている。他の行については図示するとおりである。なお、各行のデータを１つの符号セットとする。
【００７７】
次に、ハフマン符号化部２４は、１つの符号セット毎に、ｒｕｎｚと、ｒｕｎｖと、ｇｒｏｕｐと、ｖａｌｕｅとを、それぞれ１次元の符号化テーブルを用いて符号化する。なお、ｒｕｎｚの符号化に用いるハフマンテーブル（第１のハフマンテーブル）をＨｚとする。また、ｒｕｎｖの符号化に用いるハフマンテーブル（第３のハフマンテーブルをＨｖとする。また、ｇｒｏｕｐの符号化に用いるハフマンテーブル（第２のハフマンテーブルをＨｇとする。これにより、１つの符号セットをハフマン符号化したデータは、Ｈｚ［ｒｕｎｚ］＋Ｈｖ［ｒｕｎｖ］＋Ｈｇ［ｇｒｏｕｐ］＋ｖａｌｕｅ．ｅｎｃとなる。ｖａｌｕｅ．ｅｎｃは付加ビットである。なお、符号化されたものに対して、接尾に．ｅｎｃを付加している。
【００７８】
次に、本実施形態のハフマン符号化部２４の構成について説明する。図１６は、本実施形態のハフマン符号化部２４の構成を示したブロック図である。図示する例では、ハフマン符号化部２４は、入力部２４０と、判定部２４１と、符号化部２４２とを備えている。また、判定部２４１は、記憶部２４１０（ｖａｌｕｅ記憶部、ｒｕｎｚ記憶部、ｒｕｎｖ記憶部）を備えている。判定部２４１は、入力された符号化対象データを判定し、ｔｒｉｇと、１セットのｒｕｎｚと、ｒｕｎｖと、ｇｒｏｕｐと、ｖａｌｕｅとを記憶部２４１０に記憶させる。また、判定部２４１は、記憶部２４１０に記憶させたｔｒｉｇと、１セットのｒｕｎｚと、ｒｕｎｖと、ｇｒｏｕｐと、ｖａｌｕｅとを符号化部２４２に入力する。符号化部２４２は、ｔｒｉｇが入力されると、ｔｒｉｇとともに入力された、１セットのｒｕｎｚと、ｒｕｎｖと、ｇｒｏｕｐと、ｖａｌｕｅとを１次元ハフマンテーブルを用いて符号化する。そして、符号化部２４２は、符号化した１セットのデータを出力する。符号化部２４２はｔｒｉｇが入力される毎にこの処理を行う。このような手順により、ハフマン符号化部２４は、符号化対象データの符号化を行う。
【００７９】
次に、判定部２４１の詳細な処理手順について説明する。図１７は、本実施形態における判定部２４１の処理手順を示したフローチャートである。
（ステップＳ５０１）判定部２４１は、ｔｒｉｇ＿ｔｍｐ以外の変数の値を「０」に初期化する。その後、ステップＳ５０２の処理に進む。
【００８０】
（ステップＳ５０２）判定部２４１は、ｉ＜６３であれば、ｉ＋＋とした後にステップＳ５０３〜ステップＳ５２０の処理を実行する。また、判定部２４１は、ｉ＜６３でなければ処理を終了する。なお、符号化対象データであるＡＣ成分は６３個であるため、判定部２４１は、ステップＳ５０３〜ステップＳ５２０の処理を６３回繰り返す。すなわち、ステップＳ５０３〜ステップＳ５２０の処理の実行回数が６３回未満である場合にはステップＳ５０３の処理に進み、それ以外の場合には処理を終了する。
【００８１】
（ステップＳ５０３）判定部２４１は、ｔｒｉｇ＝０とする。その後、ステップＳ５０４の処理に進む。
（ステップＳ５０４）判定部２４１は、ｔｒｉｇ＿ｔｍｐが「１」であるか否かを判定する。ｔｒｉｇ＿ｔｍｐが「１」であると判定部２４１が判定した場合にはステップＳ５０５の処理に進み、それ以外の場合にはステップＳ５０６の処理に進む。
【００８２】
（ステップＳ５０５）判定部２４１は、ｒｕｎｚ＝ＥＯＢとする。また、判定部２４１は、ｒｕｎｚ＿ｃｎｔ＝０とする。また、判定部２４１は、ｔｒｉｇ＿ｔｍｐ＝０とする。また、判定部２４１はｔｒｉｇ＝１とする。これにより、ｔｒｉｇが「１」となったため、判定部２４１は、ｒｕｎｚと、ｒｕｎｖと、ｇｒｏｕｐと、ｖａｌｕｅと、ｔｒｉｇとを符号化部２４２に出力する。その後、ステップＳ５０６の処理に進む。
（ステップＳ５０６）判定部２４１は、ｄｉｎ（ｉ）が「０」であるか否かを判定する。ｄｉｎ（ｉ）が「０」であると判定部２４１が判定した場合にはステップＳ５０７の処理に進み、それ以外の場合にはステップＳ５１４の処理に進む。
【００８３】
（ステップＳ５０７）判定部２４１は、ｉが「０」ではなく、かつ、ｒｕｎｖ＿ｃｎｔが「０」ではないか否かを判定する。ｉが「０」ではなく、かつ、ｒｕｎｖ＿ｃｎｔが「０」ではないと判定部２４１が判定した場合にはステップＳ５０８の処理に進み、それ以外の場合にはステップＳ５０９の処理に進む。
（ステップＳ５０８）判定部２４１は、ｒｕｎｖ＝ｒｕｎｖ＿ｃｎｔとする。また、判定部２４１は、ｒｕｎｖ＿ｃｎｔ＝０とする。また、判定部２４１はｔｒｉｇ＝１とする。これにより、ｔｒｉｇが「１」となったため、判定部２４１は、ｒｕｎｚと、ｒｕｎｖと、ｇｒｏｕｐと、ｖａｌｕｅと、ｔｒｉｇとを符号化部２４２に出力する。その後、ステップＳ５０９の処理に進む。
【００８４】
（ステップＳ５０９）判定部２４１は、Ｒｕｎｚ＿ｃｎｔ＋＋とする。その後、ステップＳ５１０の処理に進む。
（ステップＳ５１０）判定部２４１は、ｉが「６２」であるか否かを判定する。ｉが「６２」であると判定部２４１が判定した場合にはステップＳ５１１の処理に進み、それ以外の場合にはステップＳ５２０の処理に進む。すなわち、判定部２４１は、ｄｉｎ（ｉ）が最終データであるか否かを判定し、ｄｉｎ（ｉ）が最終データであると判定した場合にはステップＳ５１１の処理に進み、それ以外の場合にはステップＳ５２０の処理に進む。
【００８５】
（ステップＳ５１１）判定部２４１は、ｔｒｉｇが「０」であるか否かを判定する。ｔｒｉｇが「０」であると判定部２４１が判定した場合にはステップＳ５１２の処理に進み、それ以外の場合にはステップＳ５１３の処理に進む。
（ステップＳ５１２）判定部２４１は、ｒｕｎｚ＝ＥＯＢとする。また、判定部２４１は、ｒｕｎｚ＿ｃｎｔ＝０とする。また、判定部２４１は、ｔｒｉｇ＝１とする。これにより、ｔｒｉｇが「１」となったため、判定部２４１は、ｒｕｎｚと、ｒｕｎｖと、ｇｒｏｕｐと、ｖａｌｕｅと、ｔｒｉｇとを符号化部２４２に出力する。その後、ステップＳ５２０の処理に進む。
（ステップＳ５１３）判定部２４１は、ｒｕｎｚ＿ｃｎｔ＝０とする。また、判定部２４１は、ｔｒｉｇ＿ｔｍｐ＝１とする。その後、ステップＳ５２０の処理に進む。
【００８６】
（ステップＳ５１４）判定部２４１は、ｒｕｎｖ＿ｃｎｔが「０」であるか否かを判定する。ｒｕｎｖ＿ｃｎｔが「０」であると判定部２４１が判定した場合にはステップＳ５１５の処理に進み、それ以外の場合にはステップＳ５１６の処理に進む。
（ステップＳ５１５）判定部２４１は、ｒｕｎｚ＝ｒｕｎｚ＿ｃｎｔとする。また、判定部２４１は、ｒｕｎｚ＿ｃｎｔ＝０とする。その後、ステップＳ５１６の処理に進む。
【００８７】
（ステップＳ５１６）判定部２４１は、ｇｒｏｕｐ［ｒｕｎｖ＿ｃｎｔ］を、ｄｉｎ（ｉ）で一意に特定されるｇｒｏｕｐとする。また、判定部２４１は、ｖａｌｕｅ［ｒｕｎｖ＿ｃｎｔ］＝ｄｉｎ（ｉ）とする。その後、ステップＳ５１７の処理に進む。
（ステップＳ５１７）判定部２４１は、ｒｕｎｖ＿ｃｎｔ＋＋とする。その後、ステップＳ５１８の処理に進む。
（ステップＳ５１８）判定部２４１は、ｉが「６２」であるか否かを判定する。ｉが「６２」であると判定部２４１が判定した場合にはステップＳ５１９の処理に進み、それ以外の場合にはステップＳ５２０の処理に進む。すなわち、判定部２４１は、ｄｉｎ（ｉ）が最終データであるか否かを判定し、ｄｉｎ（ｉ）が最終データであると判定した場合にはステップＳ５１９の処理に進み、それ以外の場合にはステップＳ５２０の処理に進む。
【００８８】
（ステップＳ５１９）判定部２４１は、ｒｕｎｖ＝ｒｕｎｖ＿ｃｎｔとする。また、判定部２４１は、ｒｕｎｖ＿ｃｎｔ＝０とする。また、判定部２４１は、ｔｒｉｇ＝１とする。これにより、ｔｒｉｇが「１」となったため、判定部２４１は、ｒｕｎｚと、ｒｕｎｖと、ｇｒｏｕｐと、ｖａｌｕｅと、ｔｒｉｇとを符号化部２４２に出力する。その後、ステップＳ５２０の処理に進む。
（ステップＳ５２０）判定部２４１は、ステップＳ５０２の処理に戻る。
【００８９】
上述したステップＳ５０１〜ステップＳ５２０の処理により、判定部２４１は、１つの符号セット毎に、ｒｕｎｚと、ｒｕｎｖと、ｇｒｏｕｐと、ｖａｌｕｅと、ｔｒｉｇとを符号化部２４２に入力する。
【００９０】
次に、符号化部２４２の詳細な処理手順について説明する。図１８は、本実施形態における符号化部２４２の処理手順を示したフローチャートである。符号化部２４２は、判定部２４１からｔｒｉｇが入力される毎に、以下のステップＳ６０１〜６０７の処理を実行する。
（ステップＳ６０１）符号化部２４２は、入力されたｔｒｉｇが「１」であるか否かを判定する。入力されたｔｒｉｇが「１」であると符号化部２４２が判定した場合にはステップＳ６０２の処理に進み、それ以外の場合には処理を終了する。
【００９１】
（ステップＳ６０２）符号化部２４２は、入力されたｒｕｎｚを、記憶部２３が記憶する一次元のハフマンテーブルＨｚを用いてハフマン符号化し、Ｈｚ［ｒｕｎｚ］を出力する。その後、ステップＳ６０３の処理に進む。
（ステップＳ６０３）符号化部２４２は、入力されたｒｕｎｚが「ＥＯＢ」では無いか否かを判定する。入力されたｒｕｎｚが「ＥＯＢ」では無いと符号化部２４２が判定した場合にはステップＳ６０４の処理に進み、それ以外の場合には処理を終了する。
（ステップＳ６０４）符号化部２４２は、入力されたｒｕｎｖを、記憶部２３が記憶する一次元のハフマンテーブルＨｖを用いてハフマン符号化し、Ｈｖ［ｒｕｎｖ］を出力する。その後、ステップＳ６０５の処理に進む。
【００９２】
（ステップＳ６０５）符号化部２４２は、ｊ＜ｒｕｎｖであれば、ｊ＋＋とした後にステップＳ６０６の処理を実行する。また、符号化部２４２は、ｉ＜ｒｕｎｖでなければ処理を終了する。なおｊの初期値は０である。
【００９３】
（ステップＳ６０６）符号化部２４２は、入力されたｇｒｏｕｐ［ｊ］を、記憶部２３が記憶する一次元のハフマンテーブルＨｇを用いてハフマン符号化し、Ｈｇ［ｇｒｏｕｐ［ｊ］］を出力する。また、符号化部２４２は、入力されたｇｒｏｕｐ［ｊ］とｖａｌｕｅ［ｊ］とに対応する付加ビットを算出して、ｖａｌｕｅ［ｊ］．ｅｎｃを出力する。その後、ステップＳ６０５の処理に戻る。
【００９４】
上述したステップＳ６０１〜ステップＳ６０６の処理により、符号化部２４２は、１つの符号セット毎に、ｒｕｎｚと、ｇｒｏｕｐ［ｊ］と、ｖａｌｕｅ［ｊ］とを、それぞれ一次元のハフマンテーブルを用いて符号化し、ｒｕｎｚを符号化したＨｚ［ｒｕｎｚ］と、ｇｒｏｕｐを符号化したＨｇ［ｇｒｏｕｐ［ｊ］］と、付加ビットｖａｌｕｅ［ｊ］．ｅｎｃとを出力する。
【００９５】
次に、本実施形態におけるハフマン伸張化部５２の構成について説明する。図１９は、本実施形態におけるハフマン伸張化部５２の構成を示したブロック図である。図示する例では、ハフマン伸張化部５２は、復号化部５２１と出力部５２２（算出部）とを備えている。復号化部５２１は、入力された符号化データを復号化して、１つの符号セット毎に、ｒｕｎｚと、ｒｕｎｖと、ｖａｌｕｅとを取得する。また、符号化部５２１は、取得した１セットのｒｕｎｚと、ｒｕｎｖと、ｖａｌｕｅとを出力部５２２に入力する。出力部５２２は、入力された１セットのｒｕｎｚと、ｒｕｎｖと、ｖａｌｕｅとに基づいて、１セット分の符号化対象データを算出して出力する。また、出力部５２２は、１セット分の符号化対象データを出力した後、ｔｒｉｇを復号化部５２１に入力する。復号化部５２１は、ｔｒｉｇが入力されると、次の符号セットのｒｕｎｚと、ｒｕｎｖと、ｖａｌｕｅを取得し、出力部５２２に入力する。復号化部５２１と出力部５２２とが上記の処理を繰り返すことで、ハフマン伸張化部５２は、符号化された符号化対象データを復号化する。
【００９６】
次に、復号化部５２１の詳細な処理手順について説明する。図２０は、本実施形態における復号化部５２１の処理手順を示したフローチャートである。
【００９７】
（ステップＳ７０１）復号化部５２１は、ｎｕｍ＜６３であればステップＳ７０２〜ステップＳ７０８の処理を実行し、それ以外の場合には処理を終了する。なお、ｎｕｍの初期値は０である。また、２回目以降のステップＳ７０１の処理は、出力部５２２からｔｒｉｇが入力された場合に実行する。
【００９８】
（ステップＳ７０２）復号化部５２１は、Ｈｚ［ｒｕｎｚ］を、記憶部５１が記憶する一次元のハフマンテーブルＨｚを用いて復号化する。また復号化部５２１は、ｒｕｎｚを、復号化したＨｚ［ｒｕｎｚ］の値とする。そして、復号化部５２１は、ｒｕｎｚを出力部５２２に入力する。その後、ステップＳ７０３の処理に進む。
（ステップＳ７０３）復号化部５２１は、ｒｕｎｚが「ＥＯＢ」では無いか否かを判定する。ｒｕｎｚが「ＥＯＢ」では無いと符号化部５２１が判定した場合にはステップＳ７０４の処理に進み、それ以外の場合にはステップＳ７０７の処理に進む。
【００９９】
（ステップＳ７０４）復号化部５２１は、Ｈｖ［ｒｕｎｖ］を、記憶部５１が記憶する一次元のハフマンテーブルＨｖを用いて復号化する。また復号化部５２１は、ｒｕｎｖを、復号化したＨｖ［ｒｕｎｖ］の値とする。そして、復号化部５２１は、ｒｕｎｖを出力部５２２に入力する。また、復号化部５２１は、ｎｕｍ＝ｒｕｎｚ＋ｒｕｎｖとする。その後、ステップＳ７０５の処理に進む。
【０１００】
（ステップＳ７０５）復号化部５２１は、ｊ＜ｒｕｎｖであれば、ｊ＋＋とした後にステップＳ７０６の処理を実行する。また、復号化部５２１は、ｉ＜ｒｕｎｖでなければステップＳ７０８の処理に進む。なおｊの初期値は０である。
【０１０１】
（ステップＳ７０６）復号化部５２１は、Ｈｇ［ｇｒｏｕｐ［ｊ］］を、記憶部５１が記憶する一次元のハフマンテーブルＨｇを用いて復号化する。また、復号化部５２１は、ｇｒｏｕｐ［ｊ］を、復号化したＨｇ［ｇｒｏｕｐ［ｊ］］の値とする。また、復号化部５２１は、ｇｒｏｕｐ［ｊ］と付加ビットｖａｌｕｅ［ｊ］．ｅｎｃとに基づいて、ｖａｌｕｅ［ｊ］を算出する。そして、復号化部５２１は、ｖａｌｕｅ［ｊ］を出力部５２２に入力する。その後、ステップＳ７０５の処理に戻る。
（ステップＳ７０７）復号化部５２１は、ｎｕｍ＝６３とする。その後、ステップＳ７０８の処理に進む。
（ステップＳ７０８）復号化部５２１は、ステップＳ７０１の処理に戻る。
【０１０２】
上述したステップＳ７０１〜ステップＳ７０８の処理により、復号化部５２１は、１つの符号セット毎に、Ｈｚ［ｒｕｎｚ］と、Ｈｇ［ｇｒｏｕｐ［ｊ］］と、ｖａｌｕｅ［ｊ］．ｅｎｃとを、それぞれ一次元のハフマンテーブルを用いて復号化し、ｒｕｎｚとｖａｌｕｅ［ｊ］とを出力部５２２に入力する。
【０１０３】
次に、出力部５２２の詳細な処理手順について説明する。図２１は、本実施形態における出力部５２２の処理手順を示したフローチャートである。
（ステップＳ８０１）出力部５２２は、各変数の値を「０」に初期化する。その後、ステップＳ８０２の処理に進む。
（ステップＳ８０２）出力部５２２は、ｉ＜６３であればステップＳ８０３〜ステップＳ８１３の処理を実行し、それ以外の場合にはステップＳ８１５の処理に進む。
【０１０４】
（ステップＳ８０３）出力部５２２は、ｚ＿ｎｕｍ＝ｒｕｎｚ［ｋ］とする。また、出力部５２２は、ｋ＋＋とする。その後、ステップＳ８０４の処理に進む。
（ステップＳ８０４）出力部５２２は、ｚ＿ｎｕｍが「ＥＯＢ」では無いか否かを判定する。ｚ＿ｎｕｍが「ＥＯＢ」では無いと出力部５２２が判定した場合にはステップＳ８０５の処理に進み、それ以外の場合にはステップＳ８０６の処理に進む。
【０１０５】
（ステップＳ８０５）出力部５２２は、ｊ＝０とする。また、出力部５２２は、ｎ＝ｚ＿ｎｕｍとする。また、出力部５２２は、ｉ＝ｉ＋ｎとする。その後、ステップＳ８０７の処理に進む。
（ステップＳ８０６）出力部５２２は、ｊ＝ｉとする。また、出力部５２２は、ｎ＝６３とする。また、出力部５２２は、ｉ＝６３とする。その後、ステップＳ８０７の処理に進む。
【０１０６】
（ステップＳ８０７）出力部５２２は、ｊ＜ｎであれば、「０」を出力してステップＳ８０８の処理に進み、それ以外の場合にはステップＳ８０９の処理に進む。
（ステップＳ８０８）出力部５２２は、ｊ＋＋とした後、ステップＳ８０７の処理に戻る。
【０１０７】
（ステップＳ８０９）出力部５２２は、ｉ＜６３であるか否かを判定する。ｉ＜６３であると出力部５２２が判定した場合にはステップＳ８１０の処理に進み、それ以外の場合にはステップＳ８１４の処理に進む。
（ステップＳ８１０）出力部５２２は、ｖ＿ｎｕｍ＝ｒｕｎｖ［ｌ］とする。また、出力部５２２は、ｌ＋＋とする。また、出力部５２２は、ｉ＝ｉ＋ｖ＿ｎｕｍとする。その後、ステップＳ８１１の処理に進む。
【０１０８】
（ステップＳ８１１）出力部５２２は、ｊ＜ｖ＿ｎｕｍであれば、ｊ＋＋とした後にステップＳ８１２の処理を実行する。また、出力部５２２は、ｊ＜ｖ＿ｎｕｍでなければステップＳ８１４の処理に進む。なおｊの初期値は０である。
【０１０９】
（ステップＳ８１２）出力部５２２は、ｖａｌｕｅ［ｍ］を出力する。また、出力部５２２は、ｍ＋＋とする。その後、ステップＳ８１１の処理に戻る。
（ステップＳ８１３）出力部５２２は、ステップＳ８０２の処理に戻る。
（ステップＳ８１４）出力部５２２は、ｔｒｉｇ＝１とする。これにより、出力部５２２は、ｔｒｉｇを復号化部５２１に入力する。その後、処理を終了する。
【０１１０】
上述したステップＳ８０１〜ステップＳ８１４の処理により、出力部５２２は、１つの符号セット毎に、符号化対象データを出力する。
【０１１１】
上述したとおり、本実施形態によれば、１次元のハフマンテーブルを用いて符号化および復号化を行うため、２次元のハフマンテーブルを用いて符号化および復号化を行うよりも符号種類が少なくなる。そのため、ハフマン符号化後の最大ビット長も短くなる。また、本実施形態のデータ圧縮および復号システム１は、固定長データを送受信する通信方式でデータの送受信を行うため、送信するデータの最大長を固定長と定め、送信するデータ長が長くても短くても、毎回固定長のデータを送受信する。しかしながら、本実施形態では、ハフマン符号化後の最大ビット長が短くなるため、固定長を短くすることができ、通信効率を向上することができる。また、本実施形態では、ゼロランレングスだけではなくバリューランレングスも用いて符号化を行う。これにより、更に符号化対象データを効率良く符号化することができる。
【０１１２】
なお、本実施形態において、ＪＰＥＧ画像の量子化後のデータが１２ｂｉｔの場合の符号種類（テーブル数）は次のようになる。
JPEG画像  ：  １６×１２＝１９６
本実施形態  ：  ６４＋６４＋１２＝１４０
（ｒｕｎｚ：６４  ｒｕｎｖ：６４  ｇｒｏｕｐ：１２）
【０１１３】
（第３の実施形態）
以下、本発明の第３の実施形態について図面を参照して説明する。本実施形態と第２の実施形態と異なる点は、本実施形態では、連続していない「０」を「０以外の数（バリュー）」として扱う点である。なお、本実施形態におけるデータ圧縮および復号システム１の構成は、第２の実施形態における各構成と同様の構成である。
【０１１４】
次に、本実施形態のハフマン符号化部２４における符号化方法について説明する。以下、ハフマン符号化部２４に入力される周波数成分のうち、ＡＣ成分（符号化対象データ）「５，０，０，０，３，０，０，１，２，０，０，４，０，６，・・・」を符号化する例を用いて説明する。
【０１１５】
初めに、ハフマン符号化部２４は、ゼロランレングス符号化を行う。具体的には、符号化対象データにおいて「０」が連続する数を算出し、「０」が連続する数と、「０」以外の値とで符号化対象データを表す。以下、「０」が連続する数を示すデータをｒｕｎｚとする。また「０」以外の値を示すデータをｖａｌｕｅとする。なお、本実施形態では第２の実施形態とは異なり、連続していない「０」を「０以外の数」として扱う。
【０１１６】
図２２は、ゼロランレングス符号化の具体例を示した説明図である。図示する例では、符号化対象データは「５，０，０，０，３，０，０，１，２，０，０，４，０，６，・・・」である。図示する符号化対象データの先頭の値は「５」であるため、「０」が連続する数は「０」個である。また、符号化対象データ「５」の後の値は「０，０，０，３」であるため、「０」が連続する数は「３」個である。また、符号化対象データ「３」の後の値は「０，０，１」であるため、「０」が連続する数は「２」個である。また、符号化対象データ「１」の後の値は「２」であるが、本実施形態では「０」以外の値が連続する場合、この間の「０」が連続する数については考慮しない。また、符号化対象データ「２」の後の値は「０，０，４」であるため、「０」が連続する数は「２」個である。また、符号化対象データ「４」の後の値は「０，６」であるが、この「０」は連続していない「０」であるため、「０以外の数」として扱う。よって、ｒｕｎｚは「０」「３」「２」「２」・・・となる。また、「０」以外の値（ｖａｌｕｅ）は、「５」「３」「１，２」「４，０，６」・・・となる。
【０１１７】
次に、ハフマン符号化部２４は、バリューランレングス符号化を行う。具体的には、符号化対象データにおいて、「０」以外の値が連続する数を算出する。以下、「０」以外の値が連続する数を示すデータをｒｕｎｖとする。
【０１１８】
図２３は、バリューランレングス符号化の具体例を示した説明図である。図示する例では、符号化対象データは「５，０，０，０，３，０，０，１，２，０，０，４，０，６，・・・」である。図示する符号化対象データの先頭の値は「５」であり、その後の値が「０」であるため、「０」以外の値が連続する数は「１」個である。また、符号化対象データ「５」の後の値は「０，０，０，３，０」であるため、「０」以外の値が連続する数は「１」個である。また、符号化対象データ「３」の後の値は「０，０，１，２，０」であるため、「０」以外の値が連続する数は「２」個である。また、符号化対象データ「２」の後の値は「０，０，４，０，６」であり、「４」と「６」との間に連続していない「０」が存在するため、「０」以外の値が連続する数は「３」個である。よって、ｒｕｎｖは「１」「１」「２」「３」・・・となる。
【０１１９】
次に、ハフマン符号化部２４は、ｖａｌｕｅを特定するｇｒｏｕｐと付加ビットとを算出する。ｖａｌｕｅが「５」「３」「１，２」「４，０，６」・・・である場合、ｇｒｏｕｐは「３」「２」「１，２」「３，１，１」・・・となる。また、このときの付加ビット長は「３」「２」「１，２」「３，１，１」・・・となる。
【０１２０】
図２４は、符号化対象データ「５，０，０，０，３，０，０，１，２，０，０，４，０，６，・・・」のｒｕｎｚと、ｒｕｎｖと、ｖａｌｕｅと、ｇｒｏｕｐとの値を纏めた概略図である。図示する例では、ｒｕｎｚと、ｒｕｎｖと、ｖａｌｕｅと、ｇｒｏｕｐとの値が、行の上から順に記載されている。例えば、行３０１には、ｒｕｎｚ「０」と、ｒｕｎｖ「１」と、ｖａｌｕｅ「５」と、ｇｒｏｕｐ「３」とが記載されている。また、行３０２には、ｒｕｎｚ「３」と、ｒｕｎｖ「１」と、ｖａｌｕｅ「３」と、ｇｒｏｕｐ「２」とが記載されている。また、行３０３には、ｒｕｎｚ「２」と、ｒｕｎｖ「２」と、ｖａｌｕｅ「１，２」と、ｇｒｏｕｐ「１，２」とが記載されている。また、行３０４には、ｒｕｎｚ「２」と、ｒｕｎｖ「３」と、ｖａｌｕｅ「４，０，６」と、ｇｒｏｕｐ「３，１，１」とが記載されている。なお、各行のデータを１つの符号セットとする。
【０１２１】
次に、ハフマン符号化部２４は、１つの符号セット毎に、ｒｕｎｚと、ｒｕｎｖと、ｇｒｏｕｐと、ｖａｌｕｅとを、それぞれ１次元の符号化テーブルを用いて符号化する。なお、ｒｕｎｚの符号化に用いるハフマンテーブル（第１のハフマンテーブル）をＨｚとする。また、ｒｕｎｖの符号化に用いるハフマンテーブル（第３のハフマンテーブル）をＨｖとする。また、ｇｒｏｕｐの符号化に用いるハフマンテーブル（第２のハフマンテーブル）をＨｇとする。これにより、１つの符号セットをハフマン符号化したデータは、Ｈｚ［ｒｕｎｚ］＋Ｈｖ［ｒｕｎｖ］＋（Ｈｇ［ｇｒｏｕｐ］＋ｖａｌｕｅ．ｅｎｃ＋・・・）となる。ｖａｌｕｅ．ｅｎｃは付加ビットである。なお、符号化されたものに対して、接尾に．ｅｎｃを付加している。
【０１２２】
次に、本実施形態のハフマン符号化部２４の構成について説明する。本実施形態のハフマン符号化部２４の構成は、第２の実施形態のハフマン符号化部２４の構成と同様である。
【０１２３】
次に、判定部２４１の詳細な処理手順について説明する。本実施形態の判定部２４１の処理手順は、第２の実施形態の判定部２４１と同様の処理手順である。但し、本実施形態では、ＡＣ成分（符号化対象データ）に対して、連続していない「０」をｖａｌｕｅ（０以外の数）として扱う。よって、本実施形態の判定部２４１は、第２の実施形態の判定部２４１と同様に、１つの符号セット毎に、ｒｕｎｚと、ｒｕｎｖと、ｇｒｏｕｐと、ｖａｌｕｅと、ｔｒｉｇとを符号化部２４２に入力する。
【０１２４】
次に、符号化部２４２の詳細な処理手順について説明する。本実施形態の符号化部２４２の処理手順は、第２の実施形態の符号化部２４２と同様の処理手順である。よって、本実施形態の符号化部２４２は、第２の実施形態の符号化部２４２と同様に、１つの符号セット毎に、ｒｕｎｚと、ｇｒｏｕｐ［ｊ］と、ｖａｌｕｅ［ｊ］とを、それぞれ一次元のハフマンテーブルを用いて符号化し、ｒｕｎｚを符号化したＨｚ［ｒｕｎｚ］と、ｇｒｏｕｐを符号化したＨｇ［ｇｒｏｕｐ［ｊ］］と、付加ビットｖａｌｕｅ［ｊ］．ｅｎｃとを出力する。
【０１２５】
次に、本実施形態におけるハフマン伸張化部５２の構成について説明する。本実施形態のハフマン伸張化部５２の構成は、第２の実施形態のハフマン伸張化部５２の構成と同様である。
【０１２６】
次に、復号化部５２１の詳細な処理手順について説明する。本実施形態の復号化部５２１の処理手順は、第２の実施形態の復号化部５２１と同様の処理手順である。よって、本実施形態の復号化部５２１は、第２の実施形態の復号化部５２１と同様に、１つの符号セット毎に、Ｈｚ［ｒｕｎｚ］と、Ｈｇ［ｇｒｏｕｐ［ｊ］］と、ｖａｌｕｅ［ｊ］．ｅｎｃとを、それぞれ一次元のハフマンテーブルを用いて復号化し、ｒｕｎｚとｖａｌｕｅ［ｊ］とを出力部５２２に入力する。
【０１２７】
次に、出力部５２２の詳細な処理手順について説明する。本実施形態の出力部５２２の処理手順は、第２の実施形態の出力部５２２と同様の処理手順である。よって、本実施形態の出力部５２２は、第２の実施形態の出力部５２２と同様に、１つの符号セット毎に、符号化対象データを出力する。
【０１２８】
上述したとおり、本実施形態によれば、１次元のハフマンテーブルを用いて符号化および復号化を行うため、２次元のハフマンテーブルを用いて符号化および復号化を行うよりも符号種類が少なくなる。そのため、ハフマン符号化後の最大ビット長も短くなる。また、本実施形態のデータ圧縮および復号システム１は、固定長データを送受信する通信方式でデータの送受信を行うため、送信するデータの最大長を固定長と定め、送信するデータ長が長くても短くても、毎回固定長のデータを送受信する。しかしながら、本実施形態では、ハフマン符号化後の最大ビット長が短くなるため、固定長を短くすることができ、通信効率を向上することができる。また、本実施形態では、ゼロランレングスだけではなくバリューランレングスも用いて符号化を行う。また、本実施形態では、連続していない「０」を「０以外の数（バリュー）」として扱う。これにより、更に符号化対象データを効率良く符号化することができる。
【０１２９】
以上、この発明の第１〜第３の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【符号の説明】
【０１３０】
１・・・データ圧縮および復号システム、２・・・データ圧縮装置、３・・・データ復号装置、２０・・・圧縮部、２１・・・周波数変換部、２２・・・量子化部、２３，５１，２４１０・・・記憶部、２４・・・ハフマン符号化部、３０・・・送信部、４０・・・受信部、５０・・・伸張部、５２・・・ハフマン伸張化部、５３・・・逆量子化部、５４・・・逆周波数変換部、２４０・・・入力部、２４１・・・判定部、２４２・・・符号化部、５２１・・・復号化部、５２２・・・出力部
【図１】
0005855777.tif 000002
【図２】
0005855777.tif 000003
【図３】
0005855777.tif 000004
【図４】
0005855777.tif 000005
【図５】
0005855777.tif 000006
【図６】
0005855777.tif 000007
【図７】
0005855777.tif 000008
【図８】
0005855777.tif 000009
【図９】
0005855777.tif 000010
【図１０】
0005855777.tif 000011
【図１１】
0005855777.tif 000012
【図１２】
0005855777.tif 000013
【図１３】
0005855777.tif 000014
【図１４】
0005855777.tif 000015
【図１５】
0005855777.tif 000016
【図１６】
0005855777.tif 000017
【図１７】
0005855777.tif 000018
【図１８】
0005855777.tif 000019
【図１９】
0005855777.tif 000020
【図２０】
0005855777.tif 000021
【図２１】
0005855777.tif 000022
【図２２】
0005855777.tif 000023
【図２３】
0005855777.tif 000024
【図２４】
0005855777.tif 000025