(57)【要約】  【課題】  処理時間が短く、必要なメモリ量が小さく、高い圧縮性能を発揮し得るデータ符号化装置等を提供する。  【解決手段】  ブロック単位のデータを適応的に予測し予測誤差データを算出する予測部１２および減算器１３と、予測誤差データを絶対値化する絶対値化部１４と、絶対値化された予測誤差データが連続して所定の閾値以下となる数を検出し、検出した数が所定数となるランセットの数を検出する平坦度検出部１５と、検出したランセットの数に応じて最小符号長のカテゴリ符号を割り当てるカテゴリを決定するカテゴリ部１６と、決定された最小符号長カテゴリに近いカテゴリに対してより短い符号長のカテゴリ符号を割り当てるように符号化テーブルを作成するハフマンテーブル作成部１７と、この符号化テーブルに基づいて予測誤差データを符号化するハフマン符号化部１８と、を備えたデータ符号化装置１。【選択図】図１
2006345321.tif 000002
【特許請求の範囲】
【請求項１】
データが連続して所定の範囲内となる数を検出するためのランカウンタと、
上記ランカウンタにより検出された数が所定数となるランセットの数を検出するためのランセットカウンタと、
上記ランセットカウンタにより検出されたランセットの数に応じて、最小符号長のカテゴリ符号を割り当てるカテゴリである最小符号長カテゴリを決定する最小符号長カテゴリ決定手段と、
上記最小符号長カテゴリ決定手段により決定された最小符号長カテゴリに近いカテゴリに対して、より短い符号長のカテゴリ符号を割り当てるように、カテゴリとカテゴリ符号との対応関係を示す符号化テーブルを作成する符号化テーブル作成手段と、
上記符号化テーブル作成手段により作成された符号化テーブルに基づいて上記データを符号化し符号化データを生成する符号化手段と、
を具備したことを特徴とするデータ符号化装置。
【請求項２】
過去に読み出された符号化対象データに基づき、注目する符号化対象データを予測し予測データを算出する予測手段と、
注目する符号化対象データと、上記予測手段により算出された予測データと、の差分をとることにより予測誤差データを生成する予測誤差演算手段と、
をさらに具備し、
上記データは、上記予測誤差演算手段により生成された予測誤差データであることを特徴とする請求項１に記載のデータ符号化装置。
【請求項３】
上記カテゴリは、上記データの有意ビット数を表すものであり、
上記符号化手段は、上記カテゴリ符号と上記データの有意ビット部分とを対応付けて符号化データを生成するものであることを特徴とする請求項１に記載のデータ符号化装置。
【請求項４】
上記最小符号長カテゴリ決定手段は、上記ランセットカウンタにより検出されたランセットの数が所定数以上であるときは、所定数未満であるときに比して、より小さい有意ビット数を表すカテゴリに、最小符号長のカテゴリ符号を割り当てるように最小符号長カテゴリを決定するものであることを特徴とする請求項３に記載のデータ符号化装置。
【請求項５】
上記所定の範囲は複数種類設定可能となっており、
上記ランカウンタは、設定された複数種類の所定の範囲のそれぞれに対して、データが連続して該所定の範囲内となる数を検出するものであり、
上記ランセットカウンタは、上記ランカウンタにより検出された数が所定数となるランセットの数を、上記複数種類の所定の範囲のそれぞれに対応して、検出するものであり、
上記最小符号長カテゴリ決定手段は、上記ランセットカウンタにより上記複数種類の所定の範囲のそれぞれに対応して検出されたランセットの数に応じて、最小符号長のカテゴリ符号を割り当てるカテゴリである最小符号長カテゴリを決定するものであることを特徴とする請求項１に記載のデータ符号化装置。
【請求項６】
上記所定の範囲は、上記データの絶対値が所定の閾値以下となる範囲であって、該所定の閾値は複数種類設定可能となっており、
上記ランカウンタは、設定された複数種類の所定の閾値のそれぞれに対して、データの絶対値が連続して該所定の閾値以下となる数を検出するものであり、
上記ランセットカウンタは、上記ランカウンタにより検出された数が所定数となるランセットの数を、上記複数種類の所定の閾値のそれぞれに対応して、検出するものであり、
上記最小符号長カテゴリ決定手段は、上記ランセットカウンタにより上記複数種類の所定の閾値のそれぞれに対応して検出されたランセットの数が所定数以上であるか否かを各々判定し、所定数以上となった最も低い閾値が、低いときには高いときに比して、最小符号長のカテゴリ符号を割り当てるカテゴリがより小さい有意ビット数を表すカテゴリとなるように、最小符号長カテゴリを決定するものであることを特徴とする請求項４に記載のデータ符号化装置。
【請求項７】
上記符号化テーブル作成手段により作成された符号化テーブルに係る情報と、上記符号化手段により生成された符号化データと、は一のファイルとして出力されるものであることを特徴とする請求項１に記載のデータ符号化装置。
【請求項８】
データが連続して所定の範囲内となる数を検出し、
検出された数が所定数となるランセットの数を検出し、
検出されたランセットの数に応じて、最小符号長のカテゴリ符号を割り当てるカテゴリである最小符号長カテゴリを決定し、
決定された最小符号長カテゴリに近いカテゴリに対して、より短い符号長のカテゴリ符号を割り当てるように、カテゴリとカテゴリ符号との対応関係を示す符号化テーブルを作成し、
作成された符号化テーブルに基づいて上記データを符号化し符号化データを生成する、
ことを特徴とするデータ符号化方法。
【請求項９】
データが連続して所定の範囲内となる数を検出し、
検出された数が所定数となるランセットの数を検出し、
検出されたランセットの数に応じて、最小符号長のカテゴリ符号を割り当てるカテゴリである最小符号長カテゴリを決定し、
決定された最小符号長カテゴリに近いカテゴリに対して、より短い符号長のカテゴリ符号を割り当てるように、カテゴリとカテゴリ符号との対応関係を示す符号化テーブルを作成し、
作成された符号化テーブルに基づいて上記データを符号化し符号化データを生成する、
処理をコンピュータに実行させるためのプログラム。
【請求項１０】
データが連続して所定の範囲内となる数を検出し、検出された数が所定数となるランセットの数を検出し、検出されたランセットの数に応じて最小符号長のカテゴリ符号を割り当てるカテゴリである最小符号長カテゴリを決定し、決定された最小符号長カテゴリに近いカテゴリに対してより短い符号長のカテゴリ符号を割り当てるようにカテゴリとカテゴリ符号との対応関係を示す符号化テーブルを作成し、作成された符号化テーブルに基づいて上記データを符号化して生成された符号化データ、を復号化するためのデータ復号化装置であって、
上記作成された符号化テーブルに係る情報に基づいて、符号化に用いられた符号化テーブルを再現する符号化テーブル再現手段と、
上記符号化テーブル再現手段により再現された符号化テーブルに基づいて、上記符号化データを復号化しデータを再現する復号化手段と、
を具備したことを特徴とするデータ復号化装置。
【請求項１１】
データが連続して所定の範囲内となる数を検出し、検出された数が所定数となるランセットの数を検出し、検出されたランセットの数に応じて最小符号長のカテゴリ符号を割り当てるカテゴリである最小符号長カテゴリを決定し、決定された最小符号長カテゴリに近いカテゴリに対してより短い符号長のカテゴリ符号を割り当てるようにカテゴリとカテゴリ符号との対応関係を示す符号化テーブルを作成し、作成された符号化テーブルに基づいて上記データを符号化して生成された符号化データ、を復号化するためのデータ復号化方法であって、
上記作成された符号化テーブルに係る情報に基づいて、符号化に用いられた符号化テーブルを再現し、
再現された符号化テーブルに基づいて、上記符号化データを復号化しデータを再現する、
ことを特徴とするデータ復号化方法。
【請求項１２】
データが連続して所定の範囲内となる数を検出し、検出された数が所定数となるランセットの数を検出し、検出されたランセットの数に応じて最小符号長のカテゴリ符号を割り当てるカテゴリである最小符号長カテゴリを決定し、決定された最小符号長カテゴリに近いカテゴリに対してより短い符号長のカテゴリ符号を割り当てるようにカテゴリとカテゴリ符号との対応関係を示す符号化テーブルを作成し、作成された符号化テーブルに基づいて上記データを符号化して生成された符号化データ、を復号化する処理をコンピュータに実行させるためのプログラムであって、
上記作成された符号化テーブルに係る情報に基づいて、符号化に用いられた符号化テーブルを再現し、
再現された符号化テーブルに基づいて、上記符号化データを復号化しデータを再現する、
処理をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、符号化テーブルに基づいてデータを符号化または復号化するデータ符号化装置、データ復号化装置、データ符号化方法、データ復号化方法、プログラムに関する。
【背景技術】
【０００２】
デジタルカメラ等の撮像装置では、例えば一眼レフレックスタイプの機種などにおいて、ＲＡＷデータと呼ばれる撮像データを記録媒体に記録することが行われている。このＲＡＷデータは、撮像素子から得られる画像信号に簡単なアナログ処理を施した後にデジタルデータに変換しただけのものである。ところで、近年、デジタルカメラの撮像素子の高画素化が進んでいるために、こうしたＲＡＷデータのデータサイズが大きくなってきている。従って、ＲＡＷデータに圧縮処理を行って、データサイズの縮小を図っているデジタルカメラも存在している。ただし、ＲＡＷデータは、ユーザによりレタッチされることが想定されるものであり、圧縮処理を行う場合にはロスレス（Lossless）圧縮であることが望ましい。
【０００３】
圧縮方式は、一般に、圧縮率が高いことが望まれるが、デジタルカメラ等の撮像装置に適用される圧縮方式の場合には、単体のパーソナルコンピュータ等に適用される圧縮方式の場合と異なって、仕様上の制限等から、さらに幾つかの望ましい条件があり、例えば以下のようになっている。  
（１）処理時間が短いこと
（２）処理に要するバッファ量が小さいこと
【０００４】
これらの内の条件（１）は、例えば、連写性能や、バッテリの消耗などに関連する条件である。また、条件（２）は、デジタルカメラのコストやサイズ、重量などに関連する条件となっている。
【０００５】
しかし、条件（１）と条件（２）とをともに満足させようとすると、今度は、圧縮性能が低下してしまう可能性が高くなる。
【０００６】
ところで、符号化には様々な方式があるが、ＪＰＥＧ等における画像圧縮などに用いられているハフマン符号化は、よく知られた可変長符号化方式の１つである。このハフマン符号化を行う際には、適切な符号化テーブルを用いることにより、より効率的な圧縮を行うことが可能であるために、符号化テーブルをどのように選択するかについて、従来より種々の提案がなされている。
【０００７】
例えば、特開平９−６５３３４号公報には、符号化テーブルを、零係数信号の割合に基づいて選択する技術が記載されている。従って、該公報に記載の技術は、零係数信号の割合が大きい場合、例えば、量子化を伴うロッシー（Lossy）な圧縮方式の場合などに、高い圧縮率を達成することができると考えられる。
【特許文献１】特開平９−６５３３４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、ロスレス圧縮においては、零係数信号の割合が比較的小さい場合が多いために、特開平９−６５３３４号公報に記載されたような零係数のみに基づく技術では、選択すべき符号化テーブルを高精度に判定することは困難である。さらに、該公報に記載されたような零係数信号の割合に基づいて評価する技術では、画像ブロック内における零係数以外の値に対する符号化効率（圧縮効率）が考慮されていないために、特にエッジを含む画像ブロックに対する処理を行う場合には、符号化効率が極端に低下する可能性がある。
【０００９】
従って、ロッシーな圧縮だけでなく、ロスレスな圧縮においても、上述した条件（１）および条件（２）を満たしながら、高い圧縮性能を発揮し得る圧縮方式が望まれている。
【００１０】
本発明は上記事情に鑑みてなされたものであり、処理時間が短く、必要なメモリ量が小さく、高い圧縮性能を発揮し得るデータ符号化装置、データ符号化方法、プログラムを提供することを目的としている。
【００１１】
また、本発明は、上記圧縮されたデータを、短い処理時間、かつ、小さな必要なメモリ量で復号化し得るデータ復号化装置、データ復号化方法、プログラムを提供することを目的としている。
【課題を解決するための手段】
【００１２】
上記の目的を達成するために、第１の発明によるデータ符号化装置は、データが連続して所定の範囲内となる数を検出するためのランカウンタと、上記ランカウンタにより検出された数が所定数となるランセットの数を検出するためのランセットカウンタと、上記ランセットカウンタにより検出されたランセットの数に応じて最小符号長のカテゴリ符号を割り当てるカテゴリである最小符号長カテゴリを決定する最小符号長カテゴリ決定手段と、上記最小符号長カテゴリ決定手段により決定された最小符号長カテゴリに近いカテゴリに対してより短い符号長のカテゴリ符号を割り当てるようにカテゴリとカテゴリ符号との対応関係を示す符号化テーブルを作成する符号化テーブル作成手段と、上記符号化テーブル作成手段により作成された符号化テーブルに基づいて上記データを符号化し符号化データを生成する符号化手段と、を具備したものである。
【００１３】
また、第２の発明によるデータ符号化装置は、上記第１の発明によるデータ符号化装置において、過去に読み出された符号化対象データに基づき注目する符号化対象データを予測し予測データを算出する予測手段と、注目する符号化対象データと上記予測手段により算出された予測データとの差分をとることにより予測誤差データを生成する予測誤差演算手段と、をさらに具備し、上記データは、上記予測誤差演算手段により生成された予測誤差データである。
【００１４】
さらに、第３の発明によるデータ符号化装置は、上記第１の発明によるデータ符号化装置において、上記カテゴリが、上記データの有意ビット数を表すものであり、上記符号化手段は、上記カテゴリ符号と上記データの有意ビット部分とを対応付けて符号化データを生成するものである。
【００１５】
第４の発明によるデータ符号化装置は、上記第３の発明によるデータ符号化装置において、上記最小符号長カテゴリ決定手段が、上記ランセットカウンタにより検出されたランセットの数が所定数以上であるときは、所定数未満であるときに比して、より小さい有意ビット数を表すカテゴリに、最小符号長のカテゴリ符号を割り当てるように最小符号長カテゴリを決定するものである。
【００１６】
第５の発明によるデータ符号化装置は、上記第１の発明によるデータ符号化装置において、上記所定の範囲は複数種類設定可能となっており、上記ランカウンタは、設定された複数種類の所定の範囲のそれぞれに対してデータが連続して該所定の範囲内となる数を検出するものであり、上記ランセットカウンタは、上記ランカウンタにより検出された数が所定数となるランセットの数を上記複数種類の所定の範囲のそれぞれに対応して検出するものであり、上記最小符号長カテゴリ決定手段は、上記ランセットカウンタにより上記複数種類の所定の範囲のそれぞれに対応して検出されたランセットの数に応じて最小符号長のカテゴリ符号を割り当てるカテゴリである最小符号長カテゴリを決定するものである。
【００１７】
第６の発明によるデータ符号化装置は、上記第４の発明によるデータ符号化装置において、上記所定の範囲が、上記データの絶対値が所定の閾値以下となる範囲であって該所定の閾値は複数種類設定可能となっており、上記ランカウンタは、設定された複数種類の所定の閾値のそれぞれに対してデータの絶対値が連続して該所定の閾値以下となる数を検出するものであり、上記ランセットカウンタは、上記ランカウンタにより検出された数が所定数となるランセットの数を上記複数種類の所定の閾値のそれぞれに対応して検出するものであり、上記最小符号長カテゴリ決定手段は、上記ランセットカウンタにより上記複数種類の所定の閾値のそれぞれに対応して検出されたランセットの数が所定数以上であるか否かを各々判定し、所定数以上となった最も低い閾値が、低いときには高いときに比して、最小符号長のカテゴリ符号を割り当てるカテゴリがより小さい有意ビット数を表すカテゴリとなるように、最小符号長カテゴリを決定するものである。
【００１８】
第７の発明によるデータ符号化装置は、上記第１の発明によるデータ符号化装置において、上記符号化テーブル作成手段により作成された符号化テーブルに係る情報と、上記符号化手段により生成された符号化データと、は一のファイルとして出力されるものである。
【００１９】
第８の発明によるデータ符号化方法は、データが連続して所定の範囲内となる数を検出し、検出された数が所定数となるランセットの数を検出し、検出されたランセットの数に応じて最小符号長のカテゴリ符号を割り当てるカテゴリである最小符号長カテゴリを決定し、決定された最小符号長カテゴリに近いカテゴリに対してより短い符号長のカテゴリ符号を割り当てるようにカテゴリとカテゴリ符号との対応関係を示す符号化テーブルを作成し、作成された符号化テーブルに基づいて上記データを符号化し符号化データを生成する方法である。
【００２０】
第９の発明によるプログラムは、データが連続して所定の範囲内となる数を検出し、検出された数が所定数となるランセットの数を検出し、検出されたランセットの数に応じて最小符号長のカテゴリ符号を割り当てるカテゴリである最小符号長カテゴリを決定し、決定された最小符号長カテゴリに近いカテゴリに対してより短い符号長のカテゴリ符号を割り当てるようにカテゴリとカテゴリ符号との対応関係を示す符号化テーブルを作成し、作成された符号化テーブルに基づいて上記データを符号化し符号化データを生成する処理をコンピュータに実行させるためのプログラムである。
【００２１】
第１０の発明によるデータ復号化装置は、データが連続して所定の範囲内となる数を検出し、検出された数が所定数となるランセットの数を検出し、検出されたランセットの数に応じて最小符号長のカテゴリ符号を割り当てるカテゴリである最小符号長カテゴリを決定し、決定された最小符号長カテゴリに近いカテゴリに対してより短い符号長のカテゴリ符号を割り当てるようにカテゴリとカテゴリ符号との対応関係を示す符号化テーブルを作成し、作成された符号化テーブルに基づいて上記データを符号化して生成された符号化データ、を復号化するためのデータ復号化装置であって、上記作成された符号化テーブルに係る情報に基づいて符号化に用いられた符号化テーブルを再現する符号化テーブル再現手段と、上記符号化テーブル再現手段により再現された符号化テーブルに基づいて上記符号化データを復号化しデータを再現する復号化手段と、を具備したものである。
【００２２】
第１１の発明によるデータ復号化方法は、データが連続して所定の範囲内となる数を検出し、検出された数が所定数となるランセットの数を検出し、検出されたランセットの数に応じて最小符号長のカテゴリ符号を割り当てるカテゴリである最小符号長カテゴリを決定し、決定された最小符号長カテゴリに近いカテゴリに対してより短い符号長のカテゴリ符号を割り当てるようにカテゴリとカテゴリ符号との対応関係を示す符号化テーブルを作成し、作成された符号化テーブルに基づいて上記データを符号化して生成された符号化データ、を復号化するためのデータ復号化方法であって、上記作成された符号化テーブルに係る情報に基づいて符号化に用いられた符号化テーブルを再現し、再現された符号化テーブルに基づいて上記符号化データを復号化しデータを再現する方法である。
【００２３】
第１２の発明によるプログラムは、データが連続して所定の範囲内となる数を検出し、検出された数が所定数となるランセットの数を検出し、検出されたランセットの数に応じて最小符号長のカテゴリ符号を割り当てるカテゴリである最小符号長カテゴリを決定し、決定された最小符号長カテゴリに近いカテゴリに対してより短い符号長のカテゴリ符号を割り当てるようにカテゴリとカテゴリ符号との対応関係を示す符号化テーブルを作成し、作成された符号化テーブルに基づいて上記データを符号化して生成された符号化データ、を復号化する処理をコンピュータに実行させるためのプログラムであって、上記作成された符号化テーブルに係る情報に基づいて符号化に用いられた符号化テーブルを再現し、再現された符号化テーブルに基づいて上記符号化データを復号化しデータを再現する処理をコンピュータに実行させるためのプログラムである。
【発明の効果】
【００２４】
本発明のデータ符号化装置、データ符号化方法、プログラムによれば、短い処理時間、かつ、小さな必要なメモリ量で、高い圧縮性能を発揮することが可能となる。
【００２５】
また、本発明のデータ復号化装置、データ復号化方法、プログラムによれば、上記圧縮されたデータを、短い処理時間、かつ、小さな必要なメモリ量で復号化することが可能となる。
【発明を実施するための最良の形態】
【００２６】
以下、図面を参照して本発明の実施の形態を説明する。
【００２７】
［実施形態１］
図１から図２４は本発明の実施形態１を示したものであり、図１はデータ符号化装置の構成を示すブロック図、図２はデータ復号化装置の構成を示すブロック図である。
【００２８】
図１に示すように、データ符号化装置１は、ブロック化部１１と、予測部１２と、減算器１３と、絶対値化部１４と、平坦度検出部１５と、カテゴリ決定部１６と、ハフマンテーブル作成部１７と、ハフマン符号化部１８と、を含んで構成されている。これらの内の、ブロック化部１１には画像データが入力され、ハフマンテーブル作成部１７からは符号化テーブルデータが出力され、符号化手段たるハフマン符号化部１８からは符号化データが出力されるようになっている。このデータ符号化装置１の詳細については、後で図４、図６〜図９等を参照しながら作用に沿って説明する。
【００２９】
また、このデータ符号化装置１により圧縮されたデータは、図２に示すようなデータ復号化装置２により復号化されるようになっている。すなわち、データ復号化装置２は、符号化テーブル再現手段たる復号テーブル作成部２１と、復号化手段たるハフマン復号化部２２と、加算器２３と、メモリ２４と、予測部２５と、を含んで構成されている。これらの内の、復号テーブル作成部２１には符号化テーブルデータが入力され、ハフマン復号化部２２には符号化データが入力され、加算器２３からは画像データが出力されるようになっている。このデータ復号化装置２の詳細については、後で図５等を参照しながら作用に沿って説明する。
【００３０】
なお、図１、図２において、各ブロック間の相互の動作タイミングの調整は、図示しないタイミング調整回路により行うようになっている。
【００３１】
さらに、データ符号化装置１の平坦度検出部１５は、図３に示すように構成されている。図３は平坦度検出部の構成を示すブロック図である。
【００３２】
平坦度検出部１５は、比較部３１と、ランカウンタ３２と、比較部３３と、ランセットカウンタ３４と、比較部３５と、を含んで構成されている。これらの内の、比較部３１には予測誤差データと閾値ｔｈとが入力され、ランカウンタ３２には外部カウントリセット信号が入力され、比較部３３には閾値ｔｈ＿ｒｕｎが入力され、ランセットカウンタ３４には外部カウントリセット信号が入力され、比較部３５には閾値ｔｈ＿ｒｕｎ＿ｓｅｔが入力されるようになっている。
【００３３】
この平坦度検出部１５の詳細についても、後で作用に沿って説明する。
【００３４】
次に、図４はデータ符号化装置１による圧縮処理を示すフローチャート、図６は平坦度検出の処理の画素単位分の処理を示すフローチャート、図７は平坦度検出の処理のライン単位分の処理を示すフローチャート、図８は平坦度検出の処理のブロック単位分の処理を示すフローチャート、図９はハフマン符号化テーブル作成の処理を示すフローチャート、図１０は画像データをブロックに分割する様子を示す図、図１１はブロックの画素データの例を示す図、図１２は注目画素と注目画素以前に読み出される近傍画素との配置を示す図、図１３は図１１の画素データから得られるブロックの予測誤差データを示す図、図１４は図１３の予測誤差データを絶対値化して得られる絶対値化された予測誤差データを示す図、図１５は平坦度検出において用いられる各閾値や設定値と閾値に対応する最小符号長シンボルとを示す図表、図１６は図１４の絶対値化された予測誤差データに対して図１５の各閾値や設定値を適用して得られる平坦度検出の結果を示す図表、図１７はカテゴリパターンを示す図表、図１８は最小符号長シンボルに対応するカテゴリと符号長との関係を示す図表、図１９は符号長とカテゴリ符号との対応を示す図表、図２０はハフマン符号の構造を示す図、図２１は予測誤差データの一例を示す図、図２２は図２１の予測誤差データを符号化して得られるハフマン符号を示す図である。
【００３５】
図４に示すような圧縮処理を開始すると、まず、ブロック化部１１が、入力される画像データを図１０に示すようにブロックに分割する（ステップＳ１）。この図１０には、縦３２×横５６画素でなる画像データを、８×８画素でなるブロックに分割する例を示し、分割した結果、Ｂ１〜Ｂ２８までの横７×縦４個のブロックが生成される。なお、ここでは１つの画像データを２８個のブロックに分割し、かつ１ブロックを６４画素で構成しているが、これに限るものではないために、ブロックの個数をより一般的にｎ個、ブロック内の画素数をより一般的にｍ個、であるとする。また、１つの画像データを複数に分割するに限るものではなく、画像データ全体を１つのブロックとして処理しても構わない。
【００３６】
次に、分割して得られた複数のブロックの内の１つのブロック（具体例としては、図１１に示すような８ビット（０〜２５５）の画素データが配列されたブロック）を処理対象として、予測部１２が、ブロック内の画素の画素データを順に読み出しながら、ブロック内における注目画素の画素データを、ブロック内で既に読み出された画素データに基づき予測する（ステップＳ２）。ここで、図１２に示すように、ブロック内における注目画素をｘで示すとすると、この注目画素ｘよりも以前に読み出されるブロック内の近傍画素は、例えば、注目画素ｘの左隣の画素ａと、注目画素ｘの上隣の画素ｂと、注目画素ｘの左上隣の画素ｃと、である。なお、ここでは、画素の読み出し順序が、ブロック内のあるラインについて左端の画素から右端の画素へ向けて順に読み出し、そのラインの読み出しが終了したらブロック内の次のラインの読み出しを同様に行う場合を例に説明するが、読み出し順序はこれに限るものではない。
【００３７】
そして、各画素ａ，ｂ，ｃの画素値をそれぞれＲａ，Ｒｂ，Ｒｃとし、注目画素ｘの予測値（予測データ）をＰｘとすると、予測値Ｐｘは、このような画素データの空間相関性に基づいて、予測手段たる予測部１２により、例えば次の数式１に示すような予測式を用いて算出される。  
［数１］
Ｐｘ＝ｍａｘ（Ｒａ，Ｒｂ）    （Ｒｃ＜ｍｉｎ（Ｒａ，Ｒｂ）のとき）
Ｐｘ＝ｍｉｎ（Ｒａ，Ｒｂ）    （Ｒｃ＞ｍａｘ（Ｒａ，Ｒｂ）のとき）
Ｐｘ＝Ｒａ＋Ｒｂ−Ｒｃ        （その他のとき）
ここに、記号ｍａｘ（ｘ，ｙ）は、ｘとｙとの小さくない方の値をとることを意味し、記号ｍｉｎ（ｘ，ｙ）は、ｘとｙとの大きくない方の値をとることを意味しており、以下でも同様に用いることにする。
【００３８】
なお、ここでは、数式１に示すような、エッジ検出に適した予測式を用いる例を説明したが、適用可能な予測式はこれに限るものではなく、その他の種々の予測式を用いることも可能である。例えば、以下の数式２〜数式８を、予測式の幾つかの例として挙げる。まず、数式２は、注目画素の左隣の画素ａの画素値Ｒａを、注目画素ｘの予測値Ｐｘとするものである。これは、水平方向の画素同士の相関性が高い場合に、精度の良い予測値を得ることができると考えられる。  
［数２］
Ｐｘ＝Ｒａ
【００３９】
次に、数式３は、注目画素の上隣の画素ｂの画素値Ｒｂを、注目画素ｘの予測値Ｐｘとするものである。これは、垂直方向の画素同士の相関性が高い場合に、精度の良い予測値を得ることができると考えられる。  
［数３］
Ｐｘ＝Ｒｂ
【００４０】
さらに、数式４は、注目画素の左上隣の画素ｃの画素値Ｒｃを、注目画素ｘの予測値Ｐｘとするものである。これは、左上から右下にかけての斜め方向の画素同士の相関性が高い場合に、精度の良い予測値を得ることができると考えられる。  
［数４］
Ｐｘ＝Ｒｃ
【００４１】
そして、数式５は、注目画素ｘの左隣の画素ａの画素値Ｒａと注目画素ｘの上隣の画素ｂの画素値Ｒｂとを加算し、そこから注目画素ｘの左上隣の画素ｃの画素値Ｒｃを減算して、注目画素ｘの予測値Ｐｘとするものである。これは、左上から右下にかけての斜め方向の画素の画素値の変化率に規則性がある場合に、精度の良い予測値を得ることができると考えられる。  
［数５］
Ｐｘ＝Ｒａ＋Ｒｂ−Ｒｃ
【００４２】
加えて、数式６は、注目画素ｘの左隣の画素ａの画素値Ｒａに、注目画素ｘの上隣の画素ｂの画素値Ｒｂから注目画素ｘの左上隣の画素ｃの画素値Ｒｃを減算して２で割ったものを加算し、注目画素ｘの予測値Ｐｘとするものである。これは、水平方向の画素の画素値の変化率に規則性がある場合に、精度の良い予測値を得ることができると考えられる。  
［数６］
Ｐｘ＝Ｒａ＋｛（Ｒｂ−Ｒｃ）／２｝
【００４３】
また、数式７は、注目画素ｘの上隣の画素ｂの画素値Ｒｂに、注目画素ｘの左隣の画素ａの画素値Ｒａから注目画素ｘの左上隣の画素ｃの画素値Ｒｃを減算して２で割ったものを加算し、注目画素ｘの予測値Ｐｘとするものである。これは、垂直方向の画素の画素値の変化率に規則性がある場合に、精度の良い予測値を得ることができると考えられる。  
［数７］
Ｐｘ＝Ｒｂ＋｛（Ｒａ−Ｒｃ）／２｝
【００４４】
さらに、数式８は、注目画素ｘの左隣の画素ａの画素値Ｒａと注目画素ｘの上隣の画素ｂの画素値Ｒｂとの平均値を、注目画素ｘの予測値Ｐｘとするものである。これは、周辺画素との相関性が高い場合（例えば、比較的平坦な場合）に、精度の良い予測値を得ることができると考えられる。  
［数８］
Ｐｘ＝（Ｒａ＋Ｒｂ）／２
【００４５】
なお、上述したような各予測式は、１つの画像データに対して１つのみを用いるに限るものではなく、組み合わせて用いることも可能である。すなわち、例えば、基本的には数式２に示すような予測式を用いるとしても、ライン上の左端の画素が注目画素となっているときには、そのさらに左側には画素が存在しないために、数式３に示す予測式を用いる、などの組み合わせが考えられる。そして、上述した各予測式に限るものではなく、注目画素よりも前に読み出される画素であって、注目画素に空間的な距離が近接する画素であれば、任意の１以上の画素の画素データを用いて予測値を算出することが可能である。
【００４６】
また、図１１に示す画素データから図１３に示すような予測誤差データを算出する例においては、予測誤差データを算出する前の予測値算出の際に、ブロック内の左上角の画素については画素のダイナミックレンジ０〜２５５の半分の値１２７を予測値とし、ブロック内の２ライン目から８ライン目までの左端の画素については数式３を用いて予測値を算出し、それ以外の画素については数式２を用いて予測値を算出している。
【００４７】
次に、予測誤差演算手段たる減算器１３は、数式９に示すように、注目画素の実際の画素値ＲｘからステップＳ１で予測した予測値Ｐｘを減算することにより、予測誤差値pred_diff を算出する（ステップＳ３）。  
［数９］
pred_diff ＝Ｒｘ−Ｐｘ
【００４８】
このようにして算出された予測誤差値pred_diff が、ハフマン符号化の対象となるデータであって、後で説明するステップＳ１７の処理に用いられるとともに、ハフマン符号化テーブルを作成するための指標となる平坦度を決定するために、以下に説明するように用いられるようになっている。なお、図１１に示したようなブロックの画素データについて、上述したように予測値Ｐｘを算出したときには、図１３に示すような予測誤差値pred_diff が得られる。
【００４９】
続いて、絶対値化部１４が、予測誤差値pred_diff を絶対値化して、絶対値化された予測誤差値abs_pred_diff を算出する（ステップＳ４）。図１３に示す予測誤差値pred_diff を図１４に示す予測誤差値abs_pred_diff に変換する絶対値化は、負の値である場合に、その負符号を取り除くことにより行っている。
【００５０】
なお、絶対値化の手段はこれに限るものではなく、例えば、次の数式１０に示すように行っても構わない。  
［数１０］
abs_pred_diff ＝pred_diff                   （pred_diff ≧０のとき）
abs_pred_diff ＝ａｂｓ（pred_diff ）−１    （pred_diff ＜０のとき）
ここに、第２式右辺のａｂｓ（）は、絶対値をとることを示している。
【００５１】
そして、絶対値化にはこれら以外にも種々の手段があるために、こうした他の手段を適用するようにしても勿論構わない。
【００５２】
次に、平坦度検出部１５が、第１の閾値との比較に基づく平坦度検出１の処理の画素単位分の処理（ステップＳ５）と、第２の閾値との比較に基づく平坦度検出２の処理の画素単位分の処理（ステップＳ６）と、第３の閾値との比較に基づく平坦度検出３の処理の画素単位分の処理（ステップＳ７）と、を行う。
【００５３】
なお、ステップＳ５の平坦度検出１の処理と、ステップＳ６の平坦度検出２の処理と、ステップＳ７の平坦度検出３の処理とは、所定の範囲を示す閾値ｔｈの値が異なる以外は同一の処理を行うものであるために、図６を参照して、これらの処理をまとめて説明する。また、具体的な閾値ｔｈとしては、図１５に示すように、ステップＳ５の平坦度検出１の処理では７（閾値ｔｈ１）を、ステップＳ６の平坦度検出２の処理では３１（閾値ｔｈ２、ここにｔｈ２＞ｔｈ１を満たす）を、ステップＳ７の平坦度検出３の処理では６３（閾値ｔｈ３、ここにｔｈ３＞ｔｈ２を満たす）を、それぞれ用いるようになっている。そして、後述するような所定のラン長を示す閾値th_runとしては、具体的には、ステップＳ５とステップＳ６とステップＳ７とで共通して４を用いるようになっている。
【００５４】
この平坦度検出の処理の画素単位分の処理を開始すると、まず、比較部３１が、絶対値化された予測誤差値abs_pred_diff が所定の閾値ｔｈ以下であるか否かを判定する（ステップＳ３１）。
【００５５】
ここで、閾値ｔｈ以下である場合には、ランカウンタ３２が、内部に備えるランカウンタrun_count をカウントアップ（ここでは、カウントアップを、記号「run_count +1」により示している）する（ステップＳ３２）。このランカウンタrun_count は、閾値ｔｈ以下である絶対値化された予測誤差値abs_pred_diff が何画素連続しているかを示すカウンタである。
【００５６】
そして、比較部３３は、ランカウンタrun_count が、所定のラン長を示す閾値th_run以上であるか否かを判定する（ステップＳ３３）。
【００５７】
ここで、閾値th_run以上である場合には、ランセットカウンタ３４が、ランセットカウンタrun_set_count をカウントアップ（ここでも上述と同様に、カウントアップを、記号「run_set_count +1」により示している）する（ステップＳ３４）。このランセットカウンタrun_set_count は、閾値ｔｈ以下の絶対値化された予測誤差値abs_pred_diff が閾値th_run個連続するセット（ランセット）が、ブロック内で幾つ検出されているかを示すカウンタである。
【００５８】
その後、ランカウンタ３２は、ステップＳ３４の結果を受けてランカウンタrun_count を初期化（つまり、「０」を格納）する（ステップＳ３５）。
【００５９】
一方、ステップＳ３１において、絶対値化された予測誤差値abs_pred_diff が所定の閾値ｔｈよりも大きいと判定された場合にも、ランカウンタ３２は、ランカウンタrun_count を初期化する（ステップＳ３６）。
【００６０】
こうして、ステップＳ３５またはステップＳ３６が終了するか、あるいはステップＳ３３においてランカウンタrun_count が閾値th_run未満であると判定された場合には、この処理から図４に示した処理に復帰する。
【００６１】
上述したようにステップＳ５、ステップＳ６、およびステップＳ７の処理が終了したら、続いて、ブロック内における１ライン分の処理が終了したか否かを判定する（ステップＳ８）。ここで１ライン分の処理が終了していない場合には、ステップＳ２へ戻って、同一ラインの次の画素について上述したような処理を行う。
【００６２】
また、１ライン分の処理が終了したと判定された場合には、平坦度検出部１５が、上述したステップＳ５に対応する平坦度検出１の処理のライン単位分の処理（ステップＳ９）と、上述したステップＳ６に対応する平坦度検出２の処理のライン単位分の処理（ステップＳ１０）と、上述したステップＳ７に対応する平坦度検出３の処理のライン単位分の処理（ステップＳ１１）と、を行う。
【００６３】
なお、ステップＳ９の処理とステップＳ１０の処理とステップＳ１１の処理とは、基本的に同一の処理を行うものであるために、図７を参照して、これらの処理をまとめて説明する。
【００６４】
この処理を開始すると、ランカウンタ３２が、外部の図示しない制御手段等から入力される外部カウントリセット信号を受けて、内部に備えるランカウンタrun_count をリセットし（ステップＳ４１）、この処理から図４に示した処理に復帰する。
【００６５】
こうしてステップＳ９、ステップＳ１０、およびステップＳ１１の処理が終了したら、続いて、ｍ画素分の処理が終了したか否か、つまり、注目している１つのブロック分の処理が終了したか否かを判定する（ステップＳ１２）。ここで１つのブロック分の処理が終了していない場合には、ステップＳ２へ戻って、同一ブロック内の次のラインについて上述したような処理を行う。
【００６６】
一方、１つのブロック分の処理が終了したと判定された場合には、平坦度検出部１５が、上述したステップＳ５およびステップＳ９に対応する平坦度検出１の処理のブロック単位分の処理（ステップＳ１３）と、上述したステップＳ６およびステップＳ１０に対応する平坦度検出２の処理のブロック単位分の処理（ステップＳ１４）と、上述したステップＳ７およびステップＳ１１に対応する平坦度検出３の処理のブロック単位分の処理（ステップＳ１５）と、を行う。
【００６７】
なお、ステップＳ１３の処理とステップＳ１４の処理とステップＳ１５の処理とは、基本的に同一の処理を行うものであるために、図８を参照して、これらの処理をまとめて説明する。なお、この処理では、所定のランセット数を示す閾値th_run_setが用いられるが、具体的な数値としては、図１５に示すように、４を用いるようになっている。
【００６８】
この処理を開始すると、比較部３５が、ランセットカウンタ３４によりカウントされたランセットカウンタrun_set_count が上述した閾値th_run_set以上であるか否かを判定する（ステップＳ５１）。
【００６９】
ここで、比較部３５は、閾値th_run_set以上であると判定した場合には、平坦度検出結果を示すランフラグrun_flagに１を代入して出力し（ステップＳ５２）、閾値th_run_set未満であると判定した場合には、平坦度検出結果を示すランフラグrun_flagに０を代入して出力する（ステップＳ５３）。ここに、図１５に示したような閾値や設定値に基づいて、図１４に示したような絶対値化された予測誤差値abs_pred_diff の判定を行った結果は、図１６に示すようになり、１ブロック分の処理を終えたところで、平坦度検出１によるランセットカウンタrun_set_count は０、平坦度検出２によるランセットカウンタrun_set_count は３、平坦度検出３によるランセットカウンタrun_set_count は５となる。そして、閾値th_run_setは上述したように４に設定されているために、図１６に示すように、平坦度検出１によるランフラグrun_flagは０、平坦度検出２によるランフラグrun_flagも０、平坦度検出３によるランフラグrun_flagは１となる。
【００７０】
こうしてステップＳ５２またはステップＳ５３の処理が終了したら、この処理から図４に示した処理に復帰する。
【００７１】
上述したようにステップＳ１３、ステップＳ１４、およびステップＳ１５の処理が終了したら、次に、ステップＳ１３の処理により出力されたランフラグrun_flagと、ステップＳ１４の処理により出力されたランフラグrun_flagと、ステップＳ１５の処理により出力されたランフラグrun_flagと、に基づき、最小符号長カテゴリ決定手段たるカテゴリ決定部１６が、図１５に示すような最小符号長シンボルの何れを用いるかを決定し、符号化テーブル作成手段たるハフマンテーブル作成部１７が決定されたカテゴリに従ってハフマン符号化テーブルの作成を行う（ステップＳ１６）。ここに、カテゴリ決定部１６は、ランフラグrun_flagが１となる最も小さい閾値ｔｈに対応した最小符号長シンボルを用いるようになっており、図１５および図１６に示す例においては、ランフラグrun_flagが１になるのは閾値がｔｈ３となるときのみであるために、最小符号長シンボルとしては６が設定される。また、閾値ｔｈ１〜ｔｈ３に各係るランフラグrun_flagの全てが０になる場合には、図示はしないが、例えば最小符号長シンボルとして７（あるいは８）を設定することが考えられる。
【００７２】
上記ハフマン符号化テーブル作成の処理の詳細について、図９を参照して説明する。
【００７３】
この処理を開始すると、まず、変数ｉを初期化（つまり、「０」を格納）する（ステップＳ６１）。ここに、変数ｉは、図１９に示すようなカテゴリ符号を上から下へ向かって０番目から８番目までとすると、何番目のカテゴリ符号に割り振ろうとするカテゴリの処理を行っているかを示す変数となっている。なお、ここでは８ビットの値を取り扱っているために、変数ｉは０≦ｉ≦８の範囲を変化するが、より一般に、ｋ（ｋは１以上の整数）ビットの値を取り扱う場合には、変数ｉは０≦ｉ≦ｋの範囲を変化することになる（このｋは、後述において最大カテゴリ値max_categoryとして参照されるために、変数ｉが変化する範囲は、０≦ｉ≦max_categoryと書くこともできる）。
【００７４】
次に、変数ｉが０に等しいか否かを判定し（ステップＳ６２）、０に等しくない場合には１つ前のリミットフラグlimit_flag[i-1] が０に等しくない（ここに、図９の記号「!=」は等しくないことを表している）か否かを判定する（ステップＳ６３）。また、リミットフラグlimit_flagは、後述するような、最小符号長のカテゴリ符号が割り当てられるカテゴリ（最小符号長となるカテゴリ）category_minに図１７に示すようなカテゴリパターン中のｉ番目のカテゴリパターンcategory_pattern[i] を加算したものが、取り得るカテゴリの値の範囲（０以上max_category以下）内である（後述するように、リミットフラグlimit_flagは「０」となる）か、あるいは取り得るカテゴリの値の上限（後述する最大カテゴリ値max_categoryであり、この例に示すような８ビットの値を扱う場合にはmax_category＝８）を超えている（後述するように、リミットフラグlimit_flagは「１」となる）か、または取り得るカテゴリの値の下限（「０」となる）を下回っている（後述するように、リミットフラグlimit_flagは「−１」となる）か、を判定するためのフラグである。
【００７５】
ここで、リミットフラグlimit_flag[i-1] が０でない場合には、前回または前回以前に、既にcategory_min＋category_patternが最大カテゴリ値max_categoryよりも大きくなってしまったか、あるいは０よりも小さくなってしまったことを意味するために、注目するリミットフラグlimit_flag[i] に、１つ前のリミットフラグlimit_flag[i-1] と同一の値を代入（ここに、図９の記号「＝」は代入を表している。以下同様。）する（ステップＳ６４）。
【００７６】
また、ステップＳ６２において変数ｉが０である場合、またはステップＳ６３において１つ前のリミットフラグlimit_flag[i-1] が０である場合には、最小符号長となるカテゴリcategory_minにｉ番目のカテゴリパターンcategory_pattern[i] を加算したものが、最大カテゴリ値max_categoryよりも大きいか否かを判定する（ステップＳ６５）。ここに、最小符号長となるカテゴリcategory_minは、０≦category_min≦max_categoryの範囲内で、例えば図１５や図１８に示すように、閾値ｔｈの値に応じて最小符号長シンボルとして予め定められている。これらの図に示す例においては、閾値ｔｈ１に対しては３の最小符号長シンボル、閾値ｔｈ２に対しては５の最小符号長シンボル、閾値ｔｈ３に対しては６の最小符号長シンボル、がそれぞれ与えられている。
【００７７】
このステップＳ６５において、大きいと判定された場合には、注目するリミットフラグlimit_flag[i] に、１を代入する（ステップＳ６６）。
【００７８】
一方、ステップＳ６５において、最大カテゴリ値max_category以下であると判定された場合には、最小符号長となるカテゴリcategory_minにｉ番目のカテゴリパターンcategory_pattern[i] を加算したものが、０未満であるか否かを判定する（ステップＳ６７）。
【００７９】
ここで、０未満である場合には注目するリミットフラグlimit_flag[i] に−１を代入し（ステップＳ６８）、０以上である場合には、注目するリミットフラグlimit_flag[i] に０を代入する（ステップＳ６９）。
【００８０】
上述した、ステップＳ６４、ステップＳ６６、ステップＳ６８、またはステップＳ６９の何れかの処理が終了したら、リミットフラグlimit_flag[i] の判定を行う（ステップＳ７０）。
【００８１】
そして、リミットフラグlimit_flag[i] が０であると判定された場合（つまり、０≦（category_min＋category_pattern[i] ）≦max_categoryとなる場合）には、最小符号長となるカテゴリcategory_minにｉ番目のカテゴリパターンcategory_pattern[i] を加算したものをｉ番目のカテゴリcategory[i] とする（ステップＳ７１）。
【００８２】
また、ステップＳ７０において、リミットフラグlimit_flag[i] が１であると判定された場合（つまり、１度でもmax_category＜（category_min＋category_pattern[i] ）となった場合）には、０番目のカテゴリcategory[0] から（ｉ−１）番目のカテゴリcategory[i-1] までの内の最小のものから１を引いたものを、ｉ番目のカテゴリcategory[i] とする（ステップＳ７２）。
【００８３】
さらに、ステップＳ７０において、リミットフラグlimit_flag[i] が−１であると判定された場合（つまり、１度でも（category_min＋category_pattern[i] ）＜０となった場合）には、０番目のカテゴリcategory[0] から（ｉ−１）番目のカテゴリcategory[i-1] までの内の最大のものに１を足したものを、ｉ番目のカテゴリcategory[i] とする（ステップＳ７３）。
【００８４】
ステップＳ７１〜Ｓ７３までの何れかの処理が終了したら、変数ｉは最大カテゴリ値max_category未満であるか否かを判定し（ステップＳ７４）、最大カテゴリ値max_category未満である場合には、ｉをインクリメント（図９においては、記号「++」により表している）してから（ステップＳ７５）、ステップＳ６２へ戻って上述したような処理を繰り返して行う。
【００８５】
また、ステップＳ７４において、変数ｉが最大カテゴリ値max_category以上であると判定された場合には、このハフマン符号化テーブル作成処理から、図４に示した処理に復帰する。
【００８６】
この図９に示したような処理を簡潔に述べれば、図１９に示すようなカテゴリ符号に対して、有意ビットの符号長を表すカテゴリを割り振っていく際に、最小符号長となるカテゴリcategory_minにまず最小符号長（図１９に示す例においては、符号長２）のカテゴリ符号（図１９に示す例では「００」）を与え、その後、最小符号長となるカテゴリcategory_minに図１７に示すようなカテゴリパターンcategory_patternを順に加算して、図１９に示すカテゴリ符号を順に割り振っていく。このとき、（category_min＋category_pattern）が、最大カテゴリ値max_categoryを超えてしまう場合には、まだ割り当てを行っていないカテゴリの内の最大のカテゴリから降べきに残りのカテゴリ符号を割り当て、一方、０未満となってしまう場合には、まだ割り当てを行っていないカテゴリの内の最小のカテゴリから昇べきに残りのカテゴリ符号を割り当てるようにしたものとなっている。
【００８７】
具体的な処理の例として、最小符号長シンボルが３であるときには、まず、有意ビットの符号長が３であることを表すカテゴリ「３」にカテゴリ符号「００」を割り振り、次に、「３」にカテゴリパターン「１」を加算したカテゴリ「４」にカテゴリ符号「０１０」を割り振り、「３」にカテゴリパターン「−１」を加算したカテゴリ「２」にカテゴリ符号「０１１」を割り振り、「３」にカテゴリパターン「２」を加算したカテゴリ「５」にカテゴリ符号「１００」を割り振り、「３」にカテゴリパターン「−２」を加算したカテゴリ「１」にカテゴリ符号「１０１」を割り振り、「３」にカテゴリパターン「３」を加算したカテゴリ「６」にカテゴリ符号「１１０」を割り振り、「３」にカテゴリパターン「−３」を加算したカテゴリ「０」にカテゴリ符号「１１１０」を割り振り、「３」にカテゴリパターン「４」を加算したカテゴリ「７」にカテゴリ符号「１１１１０」を割り振り、「３」にカテゴリパターン「−４」を加算すると「−１」となって該当するカテゴリが存在しないために、既に出現した最大のカテゴリ「７」に１を加えたカテゴリ「８」にカテゴリ符号「１１１１１０」を割り振り、ここで８ビットの値を扱うのに必要なカテゴリ「０」からカテゴリ「８」までの全てのカテゴリへの割り当てが行われたために、処理を終了する、という動作を行う。
【００８８】
また、例えば、最小符号長シンボルが６であるときにも同様に処理を行うが、ｉ＝５のときに、「６」にカテゴリパターン「３」を加算すると「９」となって該当するカテゴリが存在しないために、既に出現した最小のカテゴリ「４」から１を引いたカテゴリ「３」にカテゴリ符号「１１０」を割り振り、以降は、カテゴリ「２」、カテゴリ「１」、カテゴリ「０」に、カテゴリ符号を順に割り振るという動作を行う。
【００８９】
なお、上述した例においては、閾値ｔｈ３に対応する最小符号長シンボル「６」が設定されるために、図１９に示すカテゴリ符号に対して、図１８における最小符号長シンボルが６となる場合の各カテゴリが割り振られることになる。
【００９０】
図４の説明に戻って、ステップＳ１６の処理が終了したら、ハフマンテーブル作成部１７により作成された符号化テーブルを用いて、符号化手段たるハフマン符号化部１８が、上記ステップＳ３において算出された予測誤差値pred_diff のハフマン符号化を行う（ステップＳ１７）。
【００９１】
ハフマン符号は、よく知られているように、カテゴリ符号と、有意ビット（ここでは、予測誤差データの有意ビット）と、により構成されている（図２０参照）。カテゴリ符号は、有意ビット部分の符号長を示す符号となっており、例えば図２１に示すような９ビットの予測誤差データ「０００００１０１１」（１０進数で表して「１１」となる）が得られたとすると、有意ビットは下位４ビット分であるためにカテゴリは「４」となる。このカテゴリ４に対して、上述したように、最小符号長シンボルが６であるときに割り振られるカテゴリ符号は、図１８および図１９を参照して「１０１」となるために、ハフマン符号化データは、図２２に示すように「１０１１０１１」となる。この符号化データ「１０１１０１１」は、７ビットであり、データの圧縮が行われていることが分かる。
【００９２】
こうして、１つのブロック内の各画素データについて、ハフマン符号化の処理が終了したら、次に、ｎ個のブロックについて処理が終了したか否か、つまり、処理対象の画像データ全体の処理が終了したか否かを判定する（ステップＳ１８）。ここで画像データ全体の処理が終了していない場合には、ブロック単位での処理に用いる各種のパラメータ等のリセットを必要に応じて行ってから、ステップＳ２へ戻って、同一画像データ内の次のブロックについて上述したような処理を行う。また、画像データ全体の処理が終了している場合には、この圧縮処理の終了となる。
【００９３】
圧縮処理が行われた画像データは、ファイルシステム等を介して記録媒体等へ記録するために、所定のファイルフォーマットに基づいたファイル化が行われる。図２３は、圧縮された画像データを記録するためのファイルフォーマットの一例を示す図である。
【００９４】
圧縮された画像ファイルは、符号化データと、この符号化データに付随して設けられるヘッダおよびタグと、を有して構成されている。
【００９５】
そして、ブロック毎に作成されたハフマン符号化テーブルは、圧縮画像ファイルを生成する際に、例えば、タグ部分に記録されるようになっている。
【００９６】
ここで、図２４は、ファイルフォーマットにおけるタグの構造を示す図である。
【００９７】
タグは、タグの種類を示すタグＩＤと、タグの中に記録されている値の型を示すタイプと、このタイプで示される型の値が何個あるかを示すカウントと、タグ中において値が格納されているアドレスを示す値へのオフセットと、を含んで構成されている。
【００９８】
そして、ブロックに対して用いられたハフマン符号化テーブルを示すために、タグ情報として、例えば以下のような情報が格納される。
【００９９】
まず、タグＩＤに、例えば「値として格納されているのがブロック毎のハフマン符号化テーブルであること」を実質的に示す情報が格納される。
【０１００】
次に、タイプとして、データ量を示す型（具体的な例としては、プログラミング言語Ｃにおいて用いられているような、１バイトのデータを示す「char」や整数の型を示す「int」 など）が格納される。なお、ここでは、ハフマン符号化テーブルを格納するのに必要なデータサイズの型が格納されることになる。
【０１０１】
さらに、カウントとしては、例えば、ブロック数が格納される。
【０１０２】
そして、オフセットとしては、例えばタグＩＤの先頭から値が格納されているアドレスまでの相対的なデータ移動量、あるいは、図２３に示すタグ領域の先頭から値が格納されているアドレスまでのデータ移動量、などが格納される。
【０１０３】
これにより、復号化時にはブロックに対応するハフマン符号化テーブルを読み出して、伸張処理を行うことが可能となる。
【０１０４】
なお、上述した例においては、３種類の閾値ｔｈ１〜ｔｈ３を用いており、各閾値に対応する最小符号長シンボルが３種類、全ての閾値に対応するランフラグrun_flagが０になる場合の最小符号長シンボルが１種類、の合計４種類となるために、作成されるハフマン符号化テーブルの種類も４種類となる。従って、各ブロックに対応してハフマン符号化テーブルをそのままブロック数だけ記録するのは、データ量的に有利であるとはいえない。そこで、例えば、まず作成された全てのハフマン符号化テーブルをまずタグに記録しておき、ハフマン符号化テーブルに適当な符号を割り当てて（例えば、閾値ｔｈ１の最小符号長シンボル「３」に対応するハフマン符号化テーブルに符号「０」を、閾値ｔｈ２の最小符号長シンボル「５」に対応するハフマン符号化テーブルに符号「１」を、閾値ｔｈ３の最小符号長シンボル「６」に対応するハフマン符号化テーブルに符号「２」を、全ての閾値に対応するランフラグrun_flagが０になる場合の最小符号長シンボル「７」（あるいは「８」）に対応するハフマン符号化テーブルに符号「３」を、それぞれ割り当てるなど）、タグ内に各ブロックに対してこれらの符号「０」〜「３」の何れかを記録するようにすれば、１つのブロックに対して２ビット分のデータ量で済むために、データサイズを小さくすることが可能となる。ただし、実用上は、データが１バイト単位で格納されることが多いために、上述した例において、さらに、例えば４ブロック分のデータをまとめて１バイト中に格納することも考えられる。
【０１０５】
このようにして、各ブロックに対応する値の組として格納された、ブロック毎のハフマン符号化テーブル、あるいは全てのハフマン符号化テーブルおよびブロック毎のハフマン符号化テーブルの種類を示す情報、が、上述した符号化テーブルデータ（ハフマンテーブル作成部１７から出力されるデータであり、復号テーブル作成部２１へ入力されるデータ）である。
【０１０６】
次に、図５は、データ復号化装置２による伸張処理を示すフローチャートである。
【０１０７】
この処理を開始すると、まず、復号テーブル作成部２１が、画像ファイルから符号化テーブルデータを読み込んで、ブロック毎に対応するハフマン符号化テーブルを再現し、ハフマン復号化部２２へ出力する（ステップＳ２１）。
【０１０８】
続いて、ハフマン復号化部２２が、画像ファイルから符号化データを読み込んで、ブロック内の画素毎に、ハフマン符号化テーブルに基づいて復号化することにより予測誤差値pred_diff を再現する（ステップＳ２２）。
【０１０９】
そして、予測部２５が、メモリ２４に記憶されている既に算出された画素値に基づいて、図４のステップＳ２において説明したのと同様に予測値Ｐｘの算出を行う（ステップＳ２３）。
【０１１０】
次に、ステップＳ２２で復号化された予測誤差値pred_diff と、ステップＳ２３で算出された予測値Ｐｘと、に基づいて、次の数式１１に示すように、画素値Ｒｘを算出する（ステップＳ２４）。  
［数１１］
Ｒｘ＝Ｐｘ＋pred_diff 
【０１１１】
その後、ブロック内における１ライン分の処理が終了したか否かを判定し（ステップＳ２５）、終了していない場合にはステップＳ２２へ戻って同一ライン内の次の画素について、上述したような処理を繰り返して行う。
【０１１２】
また、ステップＳ２５において、ブロック内における１ライン分の処理が終了したと判定された場合には、次に、ｍ画素分の処理が終了したか否か、つまり１つのブロック分の処理が終了したか否かを判定し（ステップＳ２６）、終了していない場合には、上記ステップＳ２２へ戻って、同一ブロック内の次のラインについて、上述したような処理を繰り返して行う。
【０１１３】
一方、ステップＳ２６において、１つのブロック分の処理が終了したと判定された場合には、ｎ個のブロックの全てについて処理が終了したか否か、つまり１枚の画像データ全体の処理が終了したか否かを判定し（ステップＳ２７）、終了していない場合には、上記ステップＳ２１へ戻って、次のブロックに係る符号化テーブルデータを読み込むなどを行って、上述したような処理を行う。
【０１１４】
こうしてステップＳ２７において、画像データ全体の処理が終了したと判定された場合には、この伸張処理を終了する。
【０１１５】
なお、上述では、処理対象となるデータとして、画像データを例に挙げたが、データ符号化装置１やデータ復号化装置２により処理し得るデータは、これに限るものではないことは勿論である。
【０１１６】
また、上述では、データ符号化装置１やデータ復号化装置２により処理を行っているが、既存の演算器等にデータ符号化方法やデータ復号化方法を適用することにより処理するようにしても構わない。あるいは、データ符号化装置１やデータ復号化装置２と同等の処理を行うためのプログラムにより、コンピュータで処理させるようにしても良い。
【０１１７】
さらに、上述では、予測誤差データを絶対値化してから所定の閾値と比較して平坦度を検出しているが、これに限るものではない。例えば、絶対値化していない予測誤差データが所定範囲内に入るか否かに応じて、平坦度を検出するようにしても構わない。
【０１１８】
そして、上述では、ハフマン符号化を行う対象であり平坦度を検出する対象であるデータを、予測誤差データとしているが、これに限るものではなく、その他の種々のデータを対象とすることが可能である。
【０１１９】
加えて、上述では、作成する符号化テーブルとしてハフマン符号化テーブルを例に挙げたが、これに限るものではなく、その他の符号化方式における符号化テーブルを平坦度に応じて作成することも可能である。
【０１２０】
このような実施形態１によれば、ブロック単位で平坦度を検出し、平坦度に応じてハフマン符号化テーブルを作成するようにしたために、検出された平坦度に適したハフマン符号化テーブルを用いてハフマン符号化を行うことが可能となり、高い圧縮性能を発揮することが可能となる。
【０１２１】
そして、所定の閾値以下の絶対値化された予測誤差が所定数連続してなるランセット、の数を検出し、ランセットが所定数以上である場合に平坦である、と判定するようにしているために、複雑な処理を要することなく、短い時間で高速に平坦度を検出することが可能となる。
【０１２２】
さらに、絶対値化された予測誤差と比較する所定の閾値を複数種類用意しているために、平坦度の検出を、きめ細かく行うことが可能となる。
【０１２３】
加えて、平坦度を検出する際に、ランカウンタやランセットカウンタによるカウントを行うだけで良いために、ハフマン符号化テーブルを作成する際に必要なメモリ量の増加をほぼ抑制することができ、省メモリで構成することが可能となる。
【０１２４】
そして、ハフマン符号化テーブルは適応的に作成されるものであるために、予め複数のハフマン符号化テーブルを記憶しておくための記憶手段等も不要となり、より省メモリ化を図ることができる。
【０１２５】
また、圧縮されたデータを、短い処理時間、かつ、小さな必要なメモリ量で復号化することが可能となる。
【０１２６】
なお、本発明は上述した実施形態に限定されるものではなく、発明の主旨を逸脱しない範囲内において種々の変形や応用が可能であることは勿論である。
【産業上の利用可能性】
【０１２７】
本発明は、符号化テーブルに基づいてデータを符号化または復号化するデータ符号化装置、データ復号化装置、データ符号化方法、データ復号化方法、プログラムに好適に利用することができる。
【図面の簡単な説明】
【０１２８】
【図１】本発明の実施形態１におけるデータ符号化装置の構成を示すブロック図。
【図２】上記実施形態１におけるデータ復号化装置の構成を示すブロック図。
【図３】上記実施形態１における平坦度検出部の構成を示すブロック図。
【図４】上記実施形態１のデータ符号化装置による圧縮処理を示すフローチャート。
【図５】上記実施形態１のデータ復号化装置による伸張処理を示すフローチャート。
【図６】上記実施形態１における平坦度検出の処理の画素単位分の処理を示すフローチャート。
【図７】上記実施形態１における平坦度検出の処理のライン単位分の処理を示すフローチャート。
【図８】上記実施形態１における平坦度検出の処理のブロック単位分の処理を示すフローチャート。
【図９】上記実施形態１におけるハフマン符号化テーブル作成の処理を示すフローチャート。
【図１０】上記実施形態１において画像データをブロックに分割する様子を示す図。
【図１１】上記実施形態１におけるブロックの画素データの例を示す図。
【図１２】上記実施形態１において注目画素と注目画素以前に読み出される近傍画素との配置を示す図。
【図１３】上記図１１の画素データから得られるブロックの予測誤差データを示す図。
【図１４】上記図１３の予測誤差データを絶対値化して得られる絶対値化された予測誤差データを示す図。
【図１５】上記実施形態１の平坦度検出において用いられる各閾値や設定値と閾値に対応する最小符号長シンボルとを示す図表。
【図１６】上記図１４の絶対値化された予測誤差データに対して図１５の各閾値や設定値を適用して得られる平坦度検出の結果を示す図表。
【図１７】上記実施形態１におけるカテゴリパターンを示す図表。
【図１８】上記実施形態１において、最小符号長シンボルに対応するカテゴリと符号長との関係を示す図表。
【図１９】上記実施形態１において、符号長とカテゴリ符号との対応を示す図表。
【図２０】上記実施形態１におけるハフマン符号の構造を示す図。
【図２１】上記実施形態１における予測誤差データの一例を示す図。
【図２２】上記図２１の予測誤差データを符号化して得られるハフマン符号を示す図。
【図２３】上記実施形態１において圧縮された画像データを記録するためのファイルフォーマットの一例を示す図。
【図２４】上記実施形態１のファイルフォーマットにおけるタグの構造を示す図。
【符号の説明】
【０１２９】
１…データ符号化装置
２…データ復号化装置
１１…ブロック化部
１２…予測部（予測手段）
１３…減算器（予測誤差演算手段）
１４…絶対値化部
１５…平坦度検出部
１６…カテゴリ決定部（最小符号長カテゴリ決定手段）
１７…ハフマンテーブル作成部（符号化テーブル作成手段）
１８…ハフマン符号化部（符号化手段）
２１…復号テーブル作成部（符号化テーブル再現手段）
２２…ハフマン復号化部（復号化手段）
２３…加算器
２４…メモリ
２５…予測部
３１…比較部
３２…ランカウンタ
３３…比較部
３４…ランセットカウンタ
３５…比較部
【図１】
2006345321.tif 000003
【図２】
2006345321.tif 000004
【図３】
2006345321.tif 000005
【図４】
2006345321.tif 000006
【図５】
2006345321.tif 000007
【図６】
2006345321.tif 000008
【図７】
2006345321.tif 000009
【図８】
2006345321.tif 000010
【図９】
2006345321.tif 000011
【図１０】
2006345321.tif 000012
【図１１】
2006345321.tif 000013
【図１２】
2006345321.tif 000014
【図１３】
2006345321.tif 000015
【図１４】
2006345321.tif 000016
【図１５】
2006345321.tif 000017
【図１６】
2006345321.tif 000018
【図１７】
2006345321.tif 000019
【図１８】
2006345321.tif 000020
【図１９】
2006345321.tif 000021
【図２０】
2006345321.tif 000022
【図２１】
2006345321.tif 000023
【図２２】
2006345321.tif 000024
【図２３】
2006345321.tif 000025
【図２４】
2006345321.tif 000026