(57)【特許請求の範囲】
【請求項１】
２次元の原画像データを複数のブロックに分割し、直交変換を施して空間周波数毎に直交変換係数を求める直交変換手段と、
前記直交変換係数を所定の量子化係数から成る２次元の量子化テーブルにより量子化して量子化直交変換係数を求める量子化手段と、
前記量子化直交変換係数を空間周波数に応じた順序でスキャンすることにより、１次元配列データに並びかえた後、前記スキャンの順序に従った前記量子化直交変換係数に基づいて符号化を行って符号化データを求める符号化手段と、
全ての量子化係数が１であるデフォルトの量子化テーブルにより量子化された量子化直交変換係数に基づいて前記符号化手段により得られた前記符号化データと、データ圧縮の度合いが大きい前記空間周波数ほど大きい値を有する、前記空間周波数毎のフィルタリング係数を有するフィルタリングテーブルとから、前記空間周波数毎に、前記符号化データの符号量を前記フィルタリング係数で除算した値を合計して合計符号量を求め、この合計符号量と、前記符号化データの１画面分の合計ビット数の目標値である設定合計符号量との比である修正係数と、前記デフォルトの量子化テーブルにより量子化された量子化直交変換係数と、前記フィルタリング係数とに基づいて、前記符号化データの符号量を前記フィルタリング係数で除算し、さらに前記修正係数を乗算することにより、前記空間周波数毎に符号化データの符号量の目標値を設定する手段と、
各空間周波数の符号量が前記目標値以下になるように、その空間周波数に対応した量子化係数を定める量子化係数演算手段と、
前記デフォルトの量子化テーブルにより量子化された前記量子化直交変換係数を所定のデータ量を有するカテゴリに分類し、各空間周波数における各カテゴリに分類されるブロック数を示すカテゴリ分布表を求め、前記１次元配列データにおいてＡＣ成分の先頭に位置する空間周波数については、前記カテゴリ分布表に基づいて、前記量子化係数を変化させて前記符号化データの符号量を予測し、前記１次元配列データにおいてＡＣ成分の先頭以外に位置する空間周波数については、前記カテゴリ分布表と少なくとも第１の空間周波数の符号化データの統計量とに基づいて量子化係数を変化させ、前記第１の空間周波数における０の量子化直交変換係数に対応するカテゴリ「０」のブロック数を用いて、第２の空間周波数の符号化データの符号量を予測する予測手段とを備え、
前記量子化係数演算手段は、前記予測手段によって予測された前記第２の空間周波数の符号化データの符号量が前記目標値以下になるように、前記第２の空間周波数に対応した量子化係数を定めることを特徴とする画像圧縮装置。
【請求項２】
前記予測手段が、前記１次元配列データにおいてＡＣ成分の先頭以外に位置する空間周波数については、前記カテゴリ分布表と前記第１の空間周波数および前記第１の空間周波数よりも低い空間周波数の符号化データの統計量とに基づいて、前記第２の空間周波数の符号化データの符号量を予測することを特徴とする請求項１に記載の画像圧縮装置。
【請求項３】
前記第２の空間周波数に対応した量子化直交変換係数は、前記１次元配列データにおいて、前記第１の空間周波数に対応した量子化直交変換係数に隣接していることを特徴とする請求項１に記載の画像圧縮装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、カラー静止画像をＪＰＥＧアルゴリズムに準拠して情報圧縮する画像圧縮装置に関する。
【０００２】
【従来の技術】
高解像度画像を符号化して通信伝送路を介して情報の授受を行う標準化アルゴリズムが、ＪＰＥＧ（Joint Photographic Expert Group)から勧告されている。このＪＰＥＧから勧告されているアルゴリズム、すなわちＪＰＥＧアルゴリズムのベースライン・プロセスでは、大幅な情報圧縮を行うため、初めに２次元ＤＣＴ変換によって原画像データを空間周波数軸上の成分に分解し、そして、その空間周波数軸上で表された各データを量子化テーブルを用いて量子化し、さらに量子化した各データを符号化する。ＪＰＥＧでは、この符号化のため、所定のハフマンテーブルを推奨している。
【０００３】
従来の画像圧縮装置では、通常、デフォルトの量子化テーブルが使用され、必要に応じて、量子化テーブルの各量子化係数に単一の係数を乗じることによって修正された量子化テーブルが作成されている。
【０００４】
【発明が解決しようとする課題】
このように修正量子化テーブルは、各空間周波数に対して一律に係数を乗じることによって得られているため、個々の画像の特質（例えば、低周波数成分に比して高周波数成分が多い等の性質）に応じた量子化を行うことができず、画質を落とすことなく画像データを圧縮しているとは言い難かった。
【０００５】
本発明は、以上のような問題点に鑑み、個々の画像の画質に応じた画像圧縮を達成することができる画像圧縮装置を提供することを目的としている。
【０００６】
【課題を解決するための手段】
本発明に係る画像圧縮装置は、原画像データに直交変換を施して空間周波数毎に直交変換係数を求める直交変換手段と、直交変換係数を所定の量子化係数から成る量子化テーブルにより量子化して量子化直交変換係数を求める量子化手段と、量子化直交変換係数を空間周波数に関して所定の１次元配列データに並びかえた後、量子化直交変換係数に基づいて符号化を行って符号化データを求める符号化手段と、全ての量子化係数が１であるデフォルトの量子化テーブルにより量子化して得られた量子化直交変換係数と所定のフィルタリングテーブルとに基づいて、空間周波数毎に符号化データのデータ量の目標値を設定する手段と、各空間周波数のデータ量が目標値以下になるように、その空間周波数に対応した量子化係数を定める量子化係数演算手段とを備えたことを特徴としている。
【０００７】
【実施例】
以下図示実施例に基づいて本発明を説明する。
図１は本発明の一実施例に係る画像圧縮装置のブロック図である。
【０００８】
被写体Ｓから到来した光は集光レンズ１１によって集光され、被写体像がＣＣＤ（固体撮像素子）１２の受光面上に結像される。ＣＣＤ１２の受光面には多数の光電変換素子が配設され、また光電変換素子の上面には、例えばＲ、Ｇ、Ｂの各色フィルタ要素から成るカラーフィルタが設けられている。各光電変換素子はひとつの画素に対応している。被写体像は、各光電変換素子によって所定の色に対応した電気信号に変換され、Ａ／Ｄ変換器１３に入力される。なお、図１の構成ではＣＣＤ１２が１枚のみであるが、２枚以上のＣＣＤが設けられた構成でもよい。
【０００９】
Ａ／Ｄ変換器１３においてＡ／Ｄ変換された信号は、図示しない信号処理回路によって輝度信号Ｙと色差信号Ｃｂ、Ｃｒとに変換され、画像メモリ１４に入力される。画像メモリ１４は輝度信号Ｙおよび色差信号Ｃｂ、Ｃｒをそれぞれ格納するために、相互に独立したメモリ領域に分割されており、各メモリ領域は１画像分の記憶容量を有している。
【００１０】
画像メモリ１４から読み出された輝度信号Ｙおよび色差信号Ｃｂ、Ｃｒは、データ圧縮処理のため、ＤＣＴ処理回路２１に入力される。ＤＣＴ処理回路２１では、輝度信号Ｙ等の原画像データが離散コサイン変換（以下ＤＣＴという）される。すなわち本実施例では、原画像データの直交変換としてＤＣＴ変換が利用される。なお、図１ではＤＣＴ処理回路２１が１つの処理回路として示されているが、実際には輝度信号Ｙおよび色差信号Ｃｂ、Ｃｒ毎に独立したＤＣＴ処理回路が設けられている。
【００１１】
画像圧縮装置は、ＤＣＴ処理回路２１、量子化処理回路２２、ハフマン符号化処理回路２３、空間周波数データ量設定部２４、量子化テーブル生成部２５等から成る。ＤＣＴ処理回路２１、量子化処理回路２２およびハフマン符号化処理回路２３では、輝度信号Ｙ等の画像データは１画面に関して複数のブロックに分割され、ブロック単位で処理される。なお各ブロックは８×８個の画素データから構成される。
【００１２】
ＤＣＴ処理回路２１において求められた輝度信号Ｙおよび色差信号Ｃｂ、ＣｒのＤＣＴ係数は、それぞれ量子化処理回路２２に入力される。量子化処理回路２２も、ＤＣＴ処理回路２１と同様、各信号毎に設けられている。量子化処理回路２２に入力された輝度信号Ｙ、色差信号Ｃｂ、ＣｒのＤＣＴ係数は、８×８個の量子化係数により構成される量子化テーブルＱ１によって、それぞれ量子化される。この量子化は線形量子化であり、すなわち各ＤＣＴ係数は対応する量子化係数によって割算される。
【００１３】
なお本実施例においては、ＪＰＥＧアルゴリズムに準拠して、輝度信号ＹのＤＣＴ係数を量子化する量子化テーブルＱ１と、色差信号Ｃｂ、ＣｒのＤＣＴ係数を量子化する量子化テーブルＱ１とは異なっているが、各信号において同一の量子化テーブルＱ１を用いてもよい。これらの量子化テーブルＱ１は、後述するように、空間周波数データ量設定部２４と量子化テーブル生成部２５により、原画像データの空間周波数分布等の性質に応じた最適なものが生成される。
【００１４】
量子化処理回路２２から出力された輝度信号Ｙ、色差信号Ｃｂ、Ｃｒの量子化ＤＣＴ係数はハフマン符号化処理回路２３に入力され、ハフマンテーブルＱ２を用い、所定のアルゴリズムによってハフマン符号化される。
【００１５】
ハフマン符号化により得られた画像信号（圧縮画像データ）は、ＩＣメモリカード等の記録媒体に記録される。
【００１６】
図２は、一例として、８×８画素のブロックの画像データＰ(Y)xy と、ＤＣＴ係数Ｓ(Y)uv と、量子化ＤＣＴ係数Ｒ(Y)uv と、量子化テーブルＱ(Y)uv とを示している。
【００１７】
図２（ａ）の画像データＰ(Y)xy は、２次元ＤＣＴ変換によって、図２（ｂ）に示す８×８＝６４個のＤＣＴ係数Ｓ(Y)uv に変換される。これらのＤＣＴ係数のうち、位置（０，０）にあるＤＣＴ係数Ｓ(Y)00 はＤＣ成分であり、残り６３個のＤＣＴ係数Ｓ(Y)uv はＡＣ成分である。ＡＣ成分は、係数Ｓ(Y)01 若しくは係数Ｓ(Y)10 から係数Ｓ(Y)77 に向かって、より高い空間周波数成分が８×８画素ブロックの画像データ中にどのくらいあるかを示している。ＤＣ成分は８×８画素のブロック全体の画素値の平均値（直流成分）を表している。すなわち、各ＤＣＴ係数Ｓ(Y)uv はそれぞれ所定の空間周波数に対応している。
【００１８】
図２（ｄ）は量子化処理回路２１で用いられる量子化テーブルＱ(Y)uv の一例を示している。このような量子化テーブルＱ(Y)uv としては、上述したように、輝度信号Ｙと色差信号Ｃｂ、Ｃｒとで別のものでもよい。量子化テーブルＱ(Y)uv は、ＪＰＥＧフォーマットの画像データを記録媒体に記録する際に、各信号に対応した位置に、その信号の量子化に使用された量子化テーブルＱ(Y)uv の内容が記録される。
【００１９】
量子化テーブルＱ(Y)uv を用いてＤＣＴ係数Ｓ(Y)uv を量子化する式は以下のように定義される。
Ｒ(Y)uv ＝round(Ｓ(Y)uv ／Ｑ(Y)uv)  ｛０≦ u,v≦７｝
この式における roundは最も近い整数への近似を意味する。すなわち、ＤＣＴ係数Ｓ(Y)uv 及び量子化テーブルＱ(Y)uv の各要素同士の割算と四捨五入とによって、図２（ｃ）に示すような量子化ＤＣＴ係数Ｒ(Y)uv が求められる。
【００２０】
このようにして量子化処理回路２２において求められた量子化ＤＣＴ係数Ｒ(Y)uv 、Ｒ(Cb)uv、Ｒ(Cr)uvは、ハフマン符号化処理回路２３に入力される。
【００２１】
次にハフマン符号化処理回路２３におけるハフマン符号化について、図３〜図８を参照して説明する。なお以下の説明において、量子化ＤＣ係数とは量子化されたＤＣ成分をいい、量子化ＡＣ係数とは量子化されたＡＣ成分をいう。
【００２２】
量子化ＤＣ係数Ｒ(Y)00 と量子化ＡＣ係数（量子化ＤＣ係数Ｒ(Y)00 以外の量子化ＤＣＴ係数Ｒ(Y)uv ）では符号化方法が異なっている。量子化ＤＣ係数Ｒ(Y)00 の符号化は次のように行われる。
【００２３】
まず、現在符号化しようとするブロックの量子化ＤＣ係数Ｒ(Y)00 と一つ前に符号化されたブロックの量子化ＤＣ係数Ｒ(Y)00 との差分が求められる。この差分値が図３に示すカテゴリの何れに属するかが判断され、そのカテゴリを表す符号語が、図４に示す符号表（ＤＣ成分の符号化テーブル）から求められる。例えば、現在符号化しようとするブロックの量子化ＤＣ係数Ｒ(Y)00 が「１６」であり、一つ前に符号化されたブロックの量子化ＤＣ係数Ｒ(Y)00 が「２５」である時、差分値は「−９」であるので、図３のカテゴリ表から、差分値＝−９の属するカテゴリは「４」と判別され、さらにそのカテゴリの符号語が図４の符号表より「 101」と判断される。
【００２４】
次いで差分値が、図３のカテゴリ表において、そのカテゴリ内において何番目の値であるかが、付加ビットにより表される。例えば差分値＝−９はカテゴリ＝４のグループにおいて、小さい方から７番目にあるので、付加ビットは「0110」となる。すなわち、現在符号化しているブロックの量子化ＤＣ係数Ｒ(Y)00 のハフマン符号語は「 1010110」となる。
【００２５】
一方、量子化ＡＣ係数の符号化は、図５に示す処理ルーチンによって行われる。まずステップ１２０において、６３個の量子化ＡＣ係数が図６に示す順序でジグザグスキャンされ、１次元配列データに並びかえられる。量子化ＡＣ係数を、ジグザグスキャンの順序に従って、スキャンＡＣ1 、ＡＣ2 ・・・ＡＣ63と呼ぶこととする。次に、ステップ１２２では、１次元に並べられた各量子化ＡＣ係数が「０」であるか否かかが判断される。量子化ＡＣ係数が「０」である時、ステップ１２４において、その「０」である量子化ＡＣ係数が連続する数がカウントされる。これにより「０」が連続する長さ、すなわちラン長が求められる。
【００２６】
これに対し、ステップ１２２において量子化ＡＣ係数が「０」でないと判断された時、ステップ１２６において、量子化ＤＣ係数と同じようなグループ分けが行われるとともに付加ビットが求められる。この量子化ＡＣ係数のグループ分けは、量子化ＤＣ係数のグループ分けとは異なり、その量子化ＡＣ係数そのものについて行われる。すなわち、量子化ＡＣ係数が例えば「４」である時、図７に示す表を参照してカテゴリ「３」が得られる。また、量子化ＡＣ係数「４」はカテゴリ＝３のグループにおいて小さい方から５番目にあるので、付加ビットは「 100」となる。
【００２７】
ステップ１３０では、ハフマンテーブルのＡＣ符号表（図８）を参照し、例えば量子化ＡＣ係数「４」の直前のデータのラン長が「０」である場合、このラン長とカテゴリ＝３とに基づいて、符号語「 100」が得られる。そして、この符号語「 100」とステップ１２６において得られた付加ビット「 100」を組み合わせことにより２次元ハフマン符号語「100100」が求められる。
【００２８】
図２（ｃ）の量子化ＤＣＴ係数をハフマン符号化した結果を、図９の符号化データＨＦとして示す。
【００２９】
図１０は図９に示す符号化データＨＦを再び示している。このような符号化データＨＦは、各ブロック毎に得られ、１画面が５４００ブロックにより構成される場合、符号化データＨＦは５４００だけ得られる。上述したように、符号化データＨＦは、１つの量子化ＤＣ係数に関する符号化データと、６３個の量子化ＡＣ係数に関する符号化データとから成る。
【００３０】
量子化ＤＣ係数に関する符号化データは、カテゴリの符号語ＦＡ０と付加ビットＦＢ０とから成る。量子化ＡＣ係数に関する符号化データは、ラン長・カテゴリの符号語と付加ビットから構成される。次に、量子化ＡＣ係数に関する符号化データについてさらに詳細に説明する。
【００３１】
図９の例では、スキャンＡＣ1 が４であり、かつラン長が０であることに基づく符号化データとして、ラン長・カテゴリの符号語ＦＡ１と付加ビットＦＢ１が生成され、スキャンＡＣ2 が−７であり、かつラン長が０であることに基づく符号化データとして、ラン長・カテゴリの符号語ＦＡ２と付加ビットＦＢ２が生成されている。スキャンＡＣ3 が０であるので、付加ビットＦＢ２の後には、スキャンＡＣ4 が３であり、かつラン長が１であることに基づく符号化データとして、ラン長・カテゴリの符号語ＦＡ４と付加ビットＦＢ４が生成されている。同様にして、ラン長・カテゴリの符号語ＦＡ５と付加ビットＦＢ５、ラン長・カテゴリの符号語ＦＡ８と付加ビットＦＢ８、ラン長・カテゴリの符号語ＦＡ９と付加ビットＦＢ９がそれぞれ生成されている。終端データ（ＥＯＢ）は、スキャンＡＣ10以降は全て０が続くことを示している。
【００３２】
次に、量子化テーブルＱ１の生成について説明する。
図１に示すように量子化テーブルＱ１は、設定合計符号量とＤＣＴデータ統計量とフィルタリングテーブルＦＬとに基づいて生成される。
【００３３】
設定合計符号量は、記録媒体に記録される１画面分の符号化データＨＦの合計ビット数であり、例えば５２４２８８ビット（６４Ｋbyte）である。ＤＣＴデータ統計量はＤＣＴ処理回路２１の出力データに基づいて得られる。ＤＣＴ処理回路２１の出力データは原画像データをＤＣＴ変換したものであり、８×８個の量子化係数が全て「１」である量子化テーブルＱ１（以下、デフォルトの量子化テーブルという）を用いて量子化したものと等価である。この出力データをジグザグスキャンして（図６参照）、ラン長とカテゴリを求めた（図５参照）後、図２４に示す表を参照して各空間周波数毎のビット長を求めることにより、ＤＣＴデータ統計量が得られる。すなわち、このＤＣＴデータ統計量は、次に述べるように、図１１に示すようなカテゴリ分布と、図１２に示すようなスキャン毎の符号量の分布である。フィルタリングテーブルＦＬは、各空間周波数におけるデータ圧縮の度合いを定めるものである。後述するようにフィルタリングテーブルＦＬは、各空間周波数に対応したフィルタリング係数を有し、各フィルタリング係数は、データ圧縮の度合いが大きい空間周波数ほど大きい値を有している。
【００３４】
図１１は、デフォルトの量子化テーブルを用いた時の所定の空間周波数（例えばスキャンＡＣ1 ）でのカテゴリ分布、すなわち各カテゴリに分類されるブロックの数の例を示している。この図に示すようなカテゴリ分布は、１つの画像において、ＤＣ成分に関するものと、６３個のＡＣ成分に関するものとが生成され、すなわちカテゴリ分布は全部で６４だけ生成される。本実施例において原画像データは５４００ブロックに分割されており、図１１の例では、カテゴリが０であるブロック数は６０２であり、カテゴリが１であるブロック数は１０８８である。
【００３５】
図１２は、デフォルトの量子化テーブルを用いた時の各スキャンにおける符号化データＨＦのビット数の分布の例であり、これは１つの画像の全ブロックに関して、各空間周波数毎の合計ビット数を示している。例えばＤＣ成分の場合、カテゴリの符号語ＦＡ０と付加ビットＦＢ０（図１０参照）の合計ビット数は４２２３８（符号ＤＢ０）である。スキャンＡＣ1 の場合、ラン長・カテゴリの符号語ＦＡ１と付加ビットＦＢ１の合計ビット数は３４００９（符号ＤＢ１）、スキャンＡＣ2 の場合、ラン長・カテゴリの符号語ＦＡ２と付加ビットＦＢ２の合計ビット数は３３８３３（符号ＤＢ２）である。図１０の例では、スキャンＡＣ3 に関してラン長・カテゴリの符号語と付加ビットは存在しないが、他のブロックにおいてスキャンＡＣ3 のデータが存在するため、合計ビット数は２５９２０（符号ＤＢ３）となっている。このようにして、スキャンＡＣ63の合計ビット数２０９０９（符号ＤＢ６３）までのデータが生成される。
【００３６】
設定合計符号量とＤＣＴデータ統計量とフィルタリングテーブルＦＬは、空間周波数データ量設定部２４に入力される。空間周波数データ量設定部２４では、設定合計符号量とＤＣＴデータ統計量とフィルタリングテーブルＦＬに基づいて、例えば図１３に示すような、各空間周波数毎（すなわちスキャン毎）の符号量の分布が設定される。すなわち、ＤＣ成分の符号量は４４２４０ビット（符号ＳＢ０）、スキャンＡＣ1 の符号量は３３００８ビット（符号ＳＢ１）、スキャンＡＣ2 の符号量は３５６２９ビット（符号ＳＢ２）であり、スキャンＡＣ63の符号量まで設定される（符号ＳＢ６３）。これらの符号量の合計値すなわち設定合計符号量は所定値（図１３の例では５２４２８８ビット）に定められる。
【００３７】
この符号量（データ量）は目標値であり、この画像圧縮装置では、後述するように各空間周波数毎の符号量がこの目標値になるように、量子化テーブルＱ１が生成される。すなわち、この符号量の分布は、最終的に得られた量子化テーブルＱ１を用いた場合のハフマン符号化データにおける、各空間周波数毎の符号量の目標値である。例えば高周波数成分をカットしたい場合には、高周波数成分に関する符号量が相対的に小さくなるように定められ、このような符号量の分布はフィルタリングテーブルＦＬに基づいて設定される。
【００３８】
また空間周波数データ量設定部２４では、ＤＣＴデータ統計量のうちのスキャン毎の符号量の分布（図１２参照）を用いて、各空間周波数毎の符号量の上限値を定めてもよい。例えば、図１３においてスキャンＡＣ4 の合計ビット数は２８８４４（符号ＳＢ４）に定められているが、ＤＣＴデータ統計量の符号量分布に基づいて、２８４６１ビットに制限してもよい（図１２の符号ＤＢ４参照）。
【００３９】
量子化テーブル生成部２５では、ＤＣＴデータ統計量と空間周波数データ量設定部２４からの入力データとに基づいて、量子化テーブルＱ１を構成する各量子化係数が生成される。
【００４０】
ＤＣ成分に関する量子化係数の求め方について説明する。
まず、デフォルトの量子化テーブル（全ての量子化係数が１である量子化テーブル）を用いて、全てのブロックのＤＣ成分が量子化される。そして、現在量子化係数を求めようとしているブロックの量子化ＤＣ係数と一つ前のブロックの量子化ＤＣ係数との差分値が求められる。
【００４１】
この差分値が図３に示すカテゴリの何れに属するかが判断され、そのカテゴリを表す符号語が、図４に示す符号表（ＤＣ成分の符号化テーブル）から求められる。また図３のカテゴリ表から、その差分値に対応した付加ビット数が求められる。例えば、差分値のカテゴリが「２」であるとき、符号長は３ビットであり、付加ビット数は２ビットである。したがって、差分値のカテゴリが「２」である量子化ＤＣ係数の符号量は５ビットである。
【００４２】
このようにして、量子化ＤＣ係数の符号量が各ブロック毎に求められ、これらの合計符号量（ビット数）が求められる。この合計符号量が図１３に示すＤＣ成分の符号量（符号ＳＢ０）以下であれば、その時の量子化係数が最終的なものとして決定される。もし、その合計値が図１３の符号量（符号ＳＢ０）よりも大きければ、次に量子化係数は２に変更され、この量子化係数を用いて、上述したような合計ビット数の検討が行われる。
【００４３】
この新しい量子化係数を用いたときの合計ビット数を求めるために、各カテゴリに該当するブロックの数を予測しておくことが必要である。すなわち図１５に示すようなカテゴリ分布の表を、予め求めておく必要がある。このカテゴリ分布の表の求め方の一例を図３を参照して次に説明する。
【００４４】
例えばカテゴリ「２」に属する差分値は、−３、−２、２、３である。量子化係数が２になると、差分値「２」は２／２＝１となるため、カテゴリ「１」に移る。差分値「−２」も同様である。これに対し、差分値「３」は３／２＝１．５≒２となるため、カテゴリ「２」のままである。差分値「−３」も同様である。したがって、この例では、量子化係数が１であるときにカテゴリ「２」に属していた差分値のうち、半分がカテゴリ「１」に変化し、半分がカテゴリ「２」のままである。このようにして、量子化係数が変化した場合のカテゴリ分布が予想され、このカテゴリ分布の表を用いることにより、合計符号量が求められる。
【００４５】
次に、ＡＣ成分に関する量子化係数の求め方について説明する。
ＡＣ成分については、ハフマン符号化データの中にラン長に関するデータが含まれており（図１０の例えば符号ＦＡ１、ＦＡ２、ＦＡ４等）、また量子化係数を変化させるとラン長が変化する。したがって、量子化係数を変化させたときの各スキャンのデータ量は、量子化係数を変化させる前のそのスキャンのデータ量だけに基づいて予測することはできない。そこで本実施例では、次に述べるように、カテゴリ分布の表を用いて、量子化係数を変化させたときの各スキャンのデータ量を予測し、この予測値に基づいて量子化係数を決定している。
【００４６】
図１４は、図１１に示すカテゴリ分布を各スキャンについて同時に示す表の一例である。すなわち、このカテゴリ分布の表は、デフォルトの量子化テーブルを用いた時の各空間周波数における、各カテゴリに分類されるブロックの数を示している。なお図１４では、ＤＣ成分と、スキャンＡＣ1 からスキャンＡＣ11まで示され、スキャンＡＣ12からスキャンＡＣ63までは省略されている。また図１４において、最上段の数字はカテゴリを示している。例えばスキャンＡＣ1 において、カテゴリ「０」のブロック数は６０２、カテゴリ「１」のブロック数は１０８８である。
【００４７】
図１５は、図１４と異なり、全ての量子化係数が「１６」である量子化テーブルを用いた時のカテゴリ分布の表を示している。図７から理解されるように、量子化係数「１」を用いた場合のカテゴリ「０」から「３」までのＡＣ成分値は、量子化係数「１６」を用いると０になるため、そのＡＣ成分値のカテゴリは「０」となる。すなわち、図１５におけるスキャンＡＣ1 の３４７９個のカテゴリ「０」のブロックは、図１４における、カテゴリ「０」〜「３」の６０２、１０８８、１１８４、６０５の各ブロックに対応している。
【００４８】
同様に量子化係数「１」を用いた場合のカテゴリ「４」のＡＣ成分値は、量子化係数「１６」を用いると−１または１になるため、そのＡＣ成分値のカテゴリは「１」となる。一方、量子化係数「１」を用いた場合のカテゴリ「５」のＡＣ成分値は、量子化係数「１６」を用いると１になるものと２になるものとがある。したがって、量子化係数「１６」を用いた場合、一部のブロックのＡＣ成分値のカテゴリは「１」となり、他のブロックのＡＣ成分値のカテゴリは「２」となる。すなわち、図１５におけるスキャンＡＣ1 の８６６個のカテゴリ「１」のブロックは、図１４における、カテゴリ「４」の５２９のブロックと、カテゴリ「５」の一部のブロックに対応している。このように、量子化係数を変化させると、あるカテゴリに属するブロックがそのまま他のカテゴリに移行するとは限らず、異なるカテゴリに移行することがある。
【００４９】
次に、スキャンＡＣi-1 、ＡＣi のカテゴリが共に「０」であるブロック数の予測について、図１６〜図１９を参照して説明する。
【００５０】
図１６〜図１９において、Ｃ〔０〕は、そのスキャンでのカテゴリ「０」のブロック数、Ｃ〔１〜〕は、そのスキャンでのカテゴリ「１」以上のブロック数である。Ｚ〔ｋ〕は、ラン長がｋであるブロック数の予測値である。Ｃ’〔０〕は１つ前のスキャンでのカテゴリ「０」のブロック数、Ｚ’〔０〕は１つ前のスキャンでのラン長が０であるブロック数である。
【００５１】
図１６はスキャンＡＣ1 のカテゴリ「０」のブロック数と、カテゴリ「１」以上のブロック数を示している。スキャンＡＣ1 では、図１５に示すように、カテゴリ「０」のブロック数Ｃ〔０〕は３４７９であり、カテゴリ「１」以上のブロック数Ｃ〔１〜〕は１９２１（＝５４００−３４７９）である。したがって、スキャンＡＣ1 において、ラン長が１であるブロック数Ｚ〔１〕は３４７９、ラン長が０であるブロック数Ｚ〔０〕は１９２１である。
【００５２】
図１７は、スキャンＡＣ2 までのラン長が２、１、０であるブロック数を示している。スキャンＡＣ2 では、図１５に示すように、カテゴリ「０」のブロック数Ｃ〔０〕は３６１９であり、カテゴリ「１」以上のブロック数Ｃ〔１〜〕は１７８１である。したがってラン長が０であるブロック数Ｚ〔０〕が１７８１であることは明らかであるが、ラン長が２であるブロック数Ｚ〔２〕とラン長が１であるブロック数Ｚ〔１〕については明らかではない。そこで本実施例では、ブロック数Ｚ〔２〕とブロック数Ｚ〔１〕との比は、スキャンＡＣ1 でのラン長が１であるブロック数Ｚ〔１〕とラン長が０であるブロック数Ｚ’〔０〕との比に等しいと仮定して、ブロック数Ｚ〔２〕とブロック数Ｚ〔１〕のブロック数を予想している。すなわち本実施例では、スキャンＡＣ1 、ＡＣ2 において共にカテゴリが「０」であるブロック数は、スキャンＡＣ1 におけるカテゴリ「０」のブロック数に関連すると仮定している。
【００５３】
このようにして求められたブロック数Ｚ〔２〕は、スキャンＡＣ1 、ＡＣ2 のカテゴリが共に「０」である場合における、スキャンＡＣ2 に対応している。またブロック数Ｚ〔１〕は、スキャンＡＣ1 のカテゴリが「０」以外である場合における、カテゴリが「０」であるスキャンＡＣ2 に対応している。
【００５４】
図１８は、スキャンＡＣ3 までのラン長が３、２、１、０であるブロック数を示している。スキャンＡＣ3 では、図１５に示すように、カテゴリ「０」のブロック数Ｃ〔０〕は４３６６であり、カテゴリ「１」以上のブロック数Ｃ〔１〜〕は１０３４である。したがってブロック数Ｚ〔０〕は１０３４である。ブロック数Ｚ〔１〕は、スキャンＡＣ2 でのブロック数Ｚ’〔０〕の割合に依存すると仮定し、
Ｚ〔１〕＝４３６６×１７８１／５４００＝１４４０
となる。一方、ブロック数Ｚ〔２〕、〔３〕の比は、スキャンＡＣ2 でのブロック数Ｚ〔１〕、〔２〕の比に等しいと仮定し、
Ｚ〔２〕＝４３６６×１２８７／５４００＝１０４１
Ｚ〔３〕＝４３６６×２３３２／５４００＝１８８５
となる。
【００５５】
このブロック数Ｚ〔３〕は、スキャンＡＣ1 、ＡＣ2 、ＡＣ3 のカテゴリが共に「０」である場合における、スキャンＡＣ3 に対応している。またブロック数Ｚ〔２〕は、スキャンＡＣ1 のカテゴリが「０」以外であり、かつスキャンＡＣ2 のカテゴリが「０」である場合における、カテゴリが「０」であるスキャンＡＣ3 に対応している。ブロック数Ｚ〔１〕は、スキャンＡＣ2 のカテゴリが「０」以外である場合における、カテゴリが「０」であるスキャンＡＣ3 に対応している。
【００５６】
図１９はスキャンＡＣ4 までのラン長が４、３、２、１、０であるブロックを示している。スキャンＡＣ4 以降においても上述した処理が行われ、ラン長がｋであるブロック数Ｚ〔ｋ〕が求められる。
【００５７】
このようにしてスキャンＡＣ63までのラン長が求められると、次に、図２０〜図２３に示すようなラン長・カテゴリの表が各カテゴリ毎に作成される。
【００５８】
図２０は、スキャンＡＣ1 のラン長・カテゴリの表であり、この表は、ラン長が０であってカテゴリ「０」以外のカテゴリ分布を示している。スキャンＡＣ1 おいて、カテゴリ「０」以外のブロック数は、図１６に示すように全部で１９２１（＝Ｚ〔０〕）ある。カテゴリ分布は、図１５に示すように、カテゴリ「１」、「２」・・・「５」の順に、８６６、５１９、３００、２１２、２４であり、カテゴリ「６」以上のブロック数は０である。この数値をそのまま転記することにより、図２０の表が作成される。
【００５９】
図２１は、スキャンＡＣ2 のラン長・カテゴリの表であり、この表は、ラン長が０と１であってカテゴリ「０」以外のカテゴリ分布を示している。スキャンＡＣ2 おいて、カテゴリ「０」以外のブロック数は、図１７に示すように全部で１７８１（＝Ｚ〔０〕）ある。カテゴリ分布は、図１５に示すように、カテゴリ「１」、「２」・・・「５」の順に、８５０、４８７、３１５、１１９、１０であり、カテゴリ「６」以上のブロック数は０である。カテゴリ「１」の８５０のブロックは、図１７に示すＺ〔１〕とＺ〔２〕の比、すなわちスキャンＡＣ1 でのラン長が０であるブロック数Ｚ’〔０〕とラン長が１であるブロック数Ｚ〔１〕との比に等しいと仮定して、ラン長が０のブロック数は３０２、ラン長が１のブロック数は５４８に定められている。同様に、カテゴリ「２」の４８７のブロックについては、ラン長が０のブロック数は１７３、ラン長が１のブロック数は３１４に定められている。このようにして、図２１の表が作成される。
【００６０】
図２２は、スキャンＡＣ3 のラン長・カテゴリの表であり、この表は、ラン長が０と１と２であってカテゴリ「０」以外のカテゴリ分布を示している。スキャンＡＣ3 おいて、カテゴリ「０」以外のブロック数は、図１８に示すように全部で１０３４（＝Ｚ〔０〕）ある。カテゴリ分布は、図１５に示すように、カテゴリ「１」、「２」・・・「４」の順に、６７５、２２０、１２１、１８であり、カテゴリ「５」以上のブロック数は０である。各カテゴリのブロック数は、図１８に示すＺ〔１〕とＺ〔２〕とＺ〔３〕の比に従って、ラン長が０と１と２のブロック数に分配されている。
【００６１】
図２３は、スキャンＡＣ4 のラン長・カテゴリの表である。この表も上述した処理により、図１５と図１９を参照して作成される。このようにしてスキャンＡＣ63までのラン長・カテゴリの表が作成される。
【００６２】
次に、図２０〜図２３に示すようなラン長・カテゴリの表を参照して、各スキャンにおけるデータ量（ビット数）が計算される。この計算のため、図２４に示す符号長の表が用いられる。この表中の各数値はＪＰＥＧにより推奨されたハフマンテーブルの各符号語の符号長を示している。例えば、ラン長が１で、カテゴリが２である符号語の符号長は５である。
【００６３】
スキャンＡＣ1 については、図２０と図２４を参照して全ブロックにおけるラン長・カテゴリの符号語のビット数は、
866 x 2 + 519 x 2 + 300 x 3 + 212 x 4 + 24 x 5 = 4638
となる。一方、付加ビットについては、カテゴリの数値がそのままビット数に対応しているため、付加ビットのビット数は、
866 x 1 + 519 x 2+ 300 x 3 + 212 x 4 + 24 x 5 = 3772
となる。したがってスキャンＡＣ1 の予想データ量は、
4638 + 3772 = 8410（ビット）
である。
【００６４】
スキャンＡＣ2 〜スキャンＡＣ63についても、スキャンＡＣ1 と同様な計算によってデータ量が求められる。
【００６５】
このようにして得られた各スキャンにおけるデータ量は、図１３に示す設定符号量以下でなければならない。例えば、スキャンＡＣ1 については３３００８ビット以下に抑えられなければならない。上述の例では、実施例の説明のために量子化係数を「１６」としたため、データ量は８４１０ビットであり設定符号量よりもかなり小さい。したがって実際には、量子化係数は「１６」よりも小さい数値が適当である。すなわち、量子化係数が「１」である場合の予想データ量が３３００８ビットよりも大きければ、量子化係数を１だけ大きくして予想データ量を計算し直し、このような操作を行いながら、設定符号量以下になるような量子化係数を求める。
【００６６】
上述した量子化テーブルの生成を、図２５のフローチャートを用いて説明する。なお、このフローチャートはスキャンＡＣ2 〜ＡＣ63に関する量子化係数の生成を示しており、ＤＣ成分とスキャンＡＣ1 の量子化係数は既に求められているものとする。
【００６７】
ステップ１０１では、パラメータｉが２に定められる。ステップ１０２では、量子化係数ｑが初期値として１に定められる。
【００６８】
ステップ１０３では、図１４を用いて、図１５に示すようなスキャンＡＣi のカテゴリ分布が生成される。例えば、パラメータｉが３であり量子化係数ｑが１６である時、このカテゴリ分布は、図１５に示す例では、
4366, 675, 220, 121, 18, 0, 0, 0, 0, 0, 0
である。
【００６９】
なおステップ１０３が実行される前に、符号Ｐ１１で示すように、スキャンＡＣi-1 のカテゴリ「０」のブロック数が求められている。例えばパラメータｉが３であり、スキャンＡＣ2 の量子化係数ｑが１６であった場合、スキャンＡＣ2 のカテゴリ「０」のブロック数は図１５の例では３６１９である。また、符号Ｐ１２で示すように、スキャンＡＣi-1 のカテゴリ「０」のブロック数の分布が求められている。例えばパラメータｉが３であり、スキャンＡＣ2 の量子化係数ｑが１６であった場合、スキャンＡＣ2 における図１７の例では、ブロック数Ｚ〔２〕は２３３２、ブロック数Ｚ〔１〕は１２８７、ブロック数Ｚ〔０〕は１７８１である。
【００７０】
ステップ１０４では、ステップ１０３において求められたスキャンＡＣi のカテゴリ分布と、スキャンＡＣi-1 のカテゴリ「０」のブロック数（符号Ｐ１１）と、スキャンＡＣi-1 のカテゴリ「０」のブロック数の分布（符号Ｐ１２）とに基づいて、スキャンＡＣi におけるカテゴリ「０」のブロック数の分布が予測される。例えばパラメータｉが３であり、量子化係数ｑが１６である時、スキャンＡＣ3 における図１８の例では、図１５と図１７のデータに基づいて、ブロック数Ｚ〔３〕は１８８５、ブロック数Ｚ〔２〕は１０４１、ブロック数Ｚ〔１〕は１４４０である。
【００７１】
ステップ１０５では、スキャンＡＣi における圧縮データの予測データ量が求められる。例えばパラメータｉが３であり、量子化係数ｑが１６である時、スキャンＡＣ3 における予測データ量Ｄi は、図２２のラン長・カテゴリの表と図２４の符号長の表とから、
223 x 2 + 73 x 2 + 40 x 3 + 6 x 4
+ 161 x 4 + 52 x 5 + 29 x 7 + 4 x 9
+ 291 x 5 + 95 x 8 + 52 x 10 + 8 x 12
+ (223 + 161 + 291) + (73 + 52 + 95) x 2
+ (40 + 29 + 52) x 3 + (6 + 4 + 8) x 4
= 6260（ビット）
となる。
【００７２】
ステップ１０６では、ステップ１０５において計算された予測データ量Ｄi が図１３に示すような設定符号量Ｓi であるか否かが判定される。上述したステップ１０５の説明の例の場合、量子化係数ｑを１６としたため予測データ量Ｄi は６２６０ビットとなり、図１３の設定符号量Ｓ3 ＝２４０４２（符号ＳＢ３）よりもかなり小さい。しかし実際には、量子化係数ｑが１である場合から始めるため、最初のうちは予測データ量Ｄi は設定符号量Ｓi よりも大きい。したがって、ステップ１０７において量子化係数ｑがまだ２５５に達していないことが確認された後、ステップ１０８において量子化係数ｑが１だけインクリメントされ、再びステップ１０３に戻る。
【００７３】
そしてステップ１０３〜１０５が再び実行され、ステップ１０６において予測データ量Ｄi が設定符号量Ｓi 以下であると判定されると、これにより量子化係数ｑが確定する。すなわち、ステップ１０６からステップ１１０へ進み、パラメータｉが６３に達したか否かが判定される。パラメータｉが６３に達していない時、ステップ１１１において次のスキャンに関する設定符号量Ｓi+1 が設定符号量Ｓi と予測データ量Ｄi の差だけ加算される。すなわち、次のスキャンの設定符号量Ｓi+1 は、前のスキャン設定符号量Ｓi において用いられなかった分が割り当てられる。
【００７４】
次いでステップ１１２では、パラメータｉが１だけインクリメントされ、ステップ１０２へ戻り、次のスキャンについてステップ１０２〜１０８が実行されて量子化係数が求められる。
【００７５】
ステップ１１０においてパラメータｉが６３に達していると判定されると、ステップ１１３に進み、量子化係数ｑに基づいて量子化係数が生成され、このプログラムは終了する。
【００７６】
図１６〜図２３を参照して説明した、各スキャンＡＣi のデータ量の第１の予測方法は、比較的簡単な例であって、必ずしも高精度な予測であるとは言えない。そこで次に、さらに高精度な第２の予測方法について、図２６〜図２８を参照して説明する。
【００７７】
図２６は「００」データの分布、すなわちスキャンＡＣi-1 とスキャンＡＣi とが共にカテゴリ「０」であるブロック数を示し、図１４のカテゴリ分布の表に対応している。例えば、スキャンＡＣ1 、ＡＣ2 が共にカテゴリ「０」のブロック数は１２０（符号Ｊ12）、スキャンＡＣ2 、ＡＣ3 が共にカテゴリ「０」のブロック数は１５９（符号Ｊ23）、スキャンＡＣ3 、ＡＣ4 が共にカテゴリ「０」のブロック数は１８６（符号Ｊ34）、スキャンＡＣ62、ＡＣ63が共にカテゴリ「０」のブロック数は３２７（符号Ｊ6263）である。
【００７８】
スキャンＡＣi-1 、ＡＣi がそれぞれカテゴリ「０」であるブロック数が変化すると、スキャンＡＣi-1 、ＡＣi が共にカテゴリ「０」であるブロック数はスキャンＡＣi-1 のブロック数の変化率とスキャンＡＣi の変化率との積に比例すると仮定する。例えば、スキャンＡＣi-1 、ＡＣi のブロック数が共に２倍になったとすると、スキャンＡＣi-1 、ＡＣi が共にカテゴリ「０」であるブロック数は４倍になる。このような仮定の下に、スキャンＡＣi-1 とＡＣi のカテゴリ「０」のブロック数に基づいて、量子化後のスキャンＡＣi-1 、量子化後のスキャンＡＣi が共にカテゴリ「０」のブロック数を予測する。
【００７９】
「００」データの分布は、ブロック数の基準値を３５００とすることによって正規化され、メモリに格納される。例えば、スキャンＡＣ1 、ＡＣ2 が共にカテゴリ「０」であるブロック数は、正規化によって、図２７に示すように３８２３に変換される。図２８は、正規化された「００」データの分布の表を示し、例えば、スキャンＡＣ1 、ＡＣ2 の「００」データは３８２３（符号Ｋ12）、スキャンＡＣ2 、ＡＣ3 の「００」データは３５７７（符号Ｋ23）、スキャンＡＣ3 、ＡＣ4 の「００」データは３２８０（符号Ｋ34）、スキャンＡＣ62、ＡＣ63の「００」データは２２６２（符号ＫＪ6263）である。
【００８０】
図２９は、カテゴリ「０」であるスキャンＡＣi-1 のブロック数を横軸に、またスキャンＡＣi-1 、ＡＣi が共にカテゴリ「０」であるブロック数（すなわち「００」データ）を縦軸にとったグラフである。このグラフにおいて、横座標の最大値は全ブロック数（５４００）であり、Ｓlow は上述した基準値３５００、Ｓmid は例えば４８００、Ｓhighは例えば５１５０である。縦座標の最大値Ｏmax は可変であり、最大値Ｏmax が基準値３５００である時、Ｏhighは例えば３４０３、Ｏmid は例えば３１４４、Ｏlow は例えば２４６３である。折れ点ｆ、ｇ、ｈは、再生画像の画質が原画像に近くなるように、例えば試行錯誤によって求められるが、折れ点ｂは、次に述べるようにスキャンＡＣi-1 、ＡＣi のカテゴリ「０」のブロック数に応じて変化する。
【００８１】
折れ点ｂの求め方を、図１５の場合を例にとり説明する。
例えば、スキャンＡＣ3 のカテゴリ「０」のブロック数は４３６６であり、スキャンＡＣ4 のカテゴリ「０」のブロック数は４１０８である。
【００８２】
まず図２８の表を参照し、スキャンＡＣ3 、ＡＣ4 の「００」データとして、Ｋ34＝３２８０が得られる。次に、図２９において、最大値Ｏmax を基準値３５００に定めた状態で、Ｓlow （３５００）に対応する縦座標を読むと、点ｃが得られる。原点ａと点ｃを結んだ直線Ｌ１と、Ｏlow から横方向に延びる直線Ｌ２との交点ｂを求めると、折れ線ａｂｆｇｈが得られる。
【００８３】
次に、縦座標の最大値Ｏmax をスキャンＡＣ4 のブロック数４１０８に合わせると、Ｏhighは３９９４、Ｏmid は３６９０、Ｏlow は２８９１となる。この状態で、横座標においてスキャンＡＣ3 のブロック数４３６６に対応する折れ線ｂｆ上の点Ｐ３の縦座標を読むと、３５３０がスキャンＡＣ3 、ＡＣ4 の「００」データとして得られる。この数値は、図１９においてＺ〔２〕とＺ〔３〕とＺ〔４〕の和（＝３３２１）に相当し、図１９の例よりも大きい。すなわち第２の予測方法によれば、スキャンＡＣ3 、ＡＣ4 の「００」データは第１の予測方法の場合よりも多い。
【００８４】
このようにして得られた「００」データは、次に述べる方法によって、Ｚ〔２〕とＺ〔３〕とＺ〔４〕に分配される。
【００８５】
この分配のためには、図１８に示すようなスキャンＡＣ2 、ＡＣ3 の「００」データに関するＺ〔１〕、Ｚ〔２〕、Ｚ〔３〕の値が必要であり、また、これらのＺ〔１〕、Ｚ〔２〕、Ｚ〔３〕を求めるためには、図１７に示すようなスキャンＡＣ1 、ＡＣ2 の「００」データに関するＺ〔１〕、Ｚ〔２〕の値が必要である。
【００８６】
スキャンＡＣ1 、ＡＣ2 のＺ〔１〕、Ｚ〔２〕は、図２９と同様にして折れ線ａｂｆｇｈを作成し、この折れ線上の点を読むことによって求められる。Ｚ〔２〕は折れ線から直接求められ、Ｚ〔１〕はＣ〔０〕とＺ〔２〕の差として求められる。スキャンＡＣ2 、ＡＣ3 に関しては、Ｚ〔２〕とＺ〔３〕の和が、折れ線ａｂｆｇｈを作成してこの折れ線上の点を読むことによって求められ、Ｚ〔１〕は、Ｚ〔２〕とＺ〔３〕の和をＣ〔０〕から引くことにより求められる。Ｚ〔２〕とＺ〔３〕の各値は、スキャンＡＣ1 、ＡＣ2 のＺ〔１〕、Ｚ〔２〕の比に従って分配される。すなわち、スキャンＡＣ2 、ＡＣ3 に関するＺ〔１〕、Ｚ〔２〕、Ｚ〔３〕の各値が得られる。
【００８７】
同様にして、スキャンＡＣ3 、ＡＣ4 のＺ〔２〕、Ｚ〔３〕、Ｚ〔４〕の各値は、スキャンＡＣ2 、ＡＣ3 のＺ〔１〕、Ｚ〔２〕、Ｚ〔３〕の比に従って分配される。これにより、図２３に示すようなラン長・カテゴリの表が得られ、スキャンＡＣ4 における圧縮データの予測データ量が計算される。他のスキャンについても同様な計算が行われ、予測データ量が求められる。
【００８８】
次にスキャンＡＣi のデータ量の第３の予測方法について説明する。
スキャンＡＣi-1 においてラン長がｋであるブロック数をＺ〔ｋ〕、スキャンＡＣi-1 におけるカテゴリ「０」である全ブロック数をＺALL 、スキャンＡＣi-1 においてカテゴリ「０」であり、かつスキャンＡＣi においてカテゴリ「ｊ」であるブロック数をＣＴj とする。また修正係数をＺＷとする。
【００８９】
スキャンＡＣi におけるラン長がｋでカテゴリがｊであるブロック数Ｂ〔ｋ，ｊ〕は、
0003746804.tif 000002
により求められる。スキャンＡＣi におけるラン長が（ｋ＋１）であるブロック数Ｚ〔ｋ＋１〕（すなわちラン長がｋでカテゴリが０であるブロック数）は、
0003746804.tif 000003
により求められる。
【００９０】
修正係数ＺＷは、０から１０００までの値をとりうる。例えばＺＷ＝０のとき、
Ｚ〔ｋ＋１〕＝ＣＴj ×  Ｚ〔ｋ〕／ＺALL 
となり、これは第２の予測方法と同じ結果になる。ＺＷ＝１０００とすると、
Ｚ〔ｋ＋１〕＝Ｚ〔ｋ〕
となり、これは、スキャンＡＣi-1 のラン長ｋのブロックが、スキャンＡＣi において全てカテゴリ「０」となることを示している。以下に説明する例では、ＺＷ＝５０としている。
【００９１】
ここで、スキャンＡＣ3 において、Ｚ〔０〕＝１０３４、Ｚ〔１〕＝１４４０、Ｚ〔２〕＝１０４１、Ｚ〔３〕＝１８８５であり、またスキャンＡＣ4 におけるカテゴリ分布として、図３０のような表が得られているとする。すなわち、スキャンＡＣ3 がカテゴリ「０」である４３６６ブロックにおいて、スキャンＡＣ4 では、カテゴリ「０」のブロック数ＣＴ0 は３３２１、カテゴリ「１」のブロック数ＣＴ1 は６５５、カテゴリ「２」のブロック数ＣＴ2 は２７６、カテゴリ「３」のブロック数ＣＴ3 は１０１、カテゴリ「４」のブロック数ＣＴ4 は１３、カテゴリ「５」以上のブロック数は０であるとする。
【００９２】
次に述べるように、ラン長が１であるデータからブロック数が求められ、図３１に示すようなラン長・カテゴリの分布表が求められる。
【００９３】
スキャンＡＣ4 において、ラン長が１であり、かつカテゴリ「１」であるブロック数は、（１）式より、
0003746804.tif 000004
となる。同様に、ラン長が１であり、かつカテゴリ「２」であるブロック数は、（１）式より、
0003746804.tif 000005
となる。
【００９４】
ラン長が１であり、かつカテゴリ「３」であるブロック数については、（１）式より、
0003746804.tif 000006
となるが、図３０に示されるようにＣＴ3 ＝Ｃ〔３〕＝１０１である。したがって、１０４ではなく、強制的に１０１に定められる。
【００９５】
ラン長が１であり、かつカテゴリ「４」であるブロック数についても同様に、Ｂ〔１，４〕は強制的に１３に定められる。
【００９６】
スキャンＡＣ4 においてラン長が２であるブロック数Ｚ〔２〕（すなわちラン長が１であり、かつカテゴリが０であるブロック数）は、
Ｚ〔２〕＝Ｚ〔１〕−（277 + 158 + 101 + 13) ＝  891
となる。
【００９７】
ラン長が２であり、かつカテゴリ「１」であるブロック数については、
0003746804.tif 000007
となる。ラン長が２であり、かつカテゴリ「２」であるブロック数については、Ｂ〔２，２〕＝ 66 + 49  ＝  115
となる。
【００９８】
ラン長が２であり、かつカテゴリ「３」であるブロック数Ｂ〔２，３〕は、Ｂ〔１，３〕の結果に従って０であり、またラン長が２であり、かつカテゴリ「４」であるブロック数Ｂ〔２，４〕は、Ｂ〔１，４〕の結果に従って０である。
【００９９】
スキャンＡＣ4 においてラン長が３であるブロック数Ｚ〔３〕（すなわちラン長が２であり、かつカテゴリが０であるブロック数）は、
Ｚ〔３〕＝Ｚ〔２〕−（200 + 115 + 0 + 0)＝  726
となる。
【０１００】
ラン長が３であり、かつカテゴリ「１」であるブロック数については、
0003746804.tif 000008
となる。しかし、カテゴリ「１」であるブロック数ＣＴ1 の総数が６５５であるため、
Ｂ〔３，１〕＝ 655 - 277 - 200＝ 178
となる。
【０１０１】
ラン長が３であり、かつカテゴリ「２」であるブロック数については、
0003746804.tif 000009
となる。しかし、カテゴリ「２」であるブロック数ＣＴ2 の総数が２７６であるため、
Ｂ〔３，２〕＝ 276 - 158 - 115＝ 3
となる。
【０１０２】
ラン長が３であり、かつカテゴリ「３」であるブロック数は、Ｂ〔１，３〕、Ｂ〔２，３〕の結果に従って０であり、またラン長が３であり、かつカテゴリ「４」であるブロック数は、Ｂ〔１，４〕、Ｂ〔２，４〕の結果に従って０である。
【０１０３】
スキャンＡＣ4 においてラン長が４であるブロック数Ｚ〔４〕（すなわちラン長が３であり、かつカテゴリが０であるブロック数）は、
Ｚ〔４〕＝Ｚ〔３〕−（178 + 3 + 0 + 0)＝ 1704
となる。
【０１０４】
ラン長が０であるブロック数において、カテゴリ「１」〜「４」のブロック数は、図３０より、１５５、６５、２４、３となる。また、ラン長が１であるブロック数Ｚ〔１〕（すなわちラン長が０であり、かつカテゴリが０であるブロック数）は、図３０より、
Ｚ〔１〕＝787
となる。
【０１０５】
図３２は、このようにして求められたラン長・カテゴリの分布の表であり、第１の予測方法における図２３に対応している。また図３１に示されるように、ラン長が４であるブロック数（ラン長が３であり、かつカテゴリが０であるブロック数）は１７０４であり、これは第１の予測方法において得られたＺ〔４〕＝１４３４よりも大きくなっている。すなわち第３の予測方法によれば、ラン長が伸びることが理解される。
【０１０６】
次に、図３０に示されるようなカテゴリ分布表において、スキャンＡＣi-1 のカテゴリが「０」で、かつスキャンＡＣi のカテゴリが「１」以上のブロック数を図２９の折れ線ａｂｆｇｈを用いて求める方法を説明する。
【０１０７】
この場合、図２９において横軸はスキャンＡＣi-1 のカテゴリ「０」のブロック数を示し、縦軸はスキャンＡＣi におけるカテゴリ「０」とカテゴリ「１」のブロック数の和を示す。まず、縦軸のＯmax をＣ〔０〕とＣ〔１〕の和（＝４１０８＋８１０＝４９１８）に定め、これに伴いＯhigh、Ｏmid 、Ｏlow を求める。次に、横座標の４３６６に対応した折れ線上の点（例えばＰ３）を読み、この点に対応した縦座標を読むと、この値はスキャンＡＣ4 におけるカテゴリ「０」とカテゴリ「１」のブロック数の和である。したがって、この和から、既に求められているカテゴリ「０」の値を引けば、スキャンＡＣi-1 のカテゴリが「０」でかつスキャンＡＣi のカテゴリが「１」のブロック数が求められる。以下、同様にして、スキャンＡＣi-1 のカテゴリが「０」でかつスキャンＡＣi のカテゴリが「２」以上のブロック数が求められる。
【０１０８】
次に、図３３のフローチャートを参照して、図２５のステップ１０６において用いられた設定符号量Ｓi の分布（図１３参照）の生成について説明する。
【０１０９】
ステップ２０１では、１つの画像の全ブロックに関して、ＤＣ成分とスキャンＡＣ63の符号化データの最小限の合計符号量（ビット数）が求められる。ＤＣ成分の合計符号量ＣＤ0 は、ハフマン符号量とこれに対応する付加ビット数との合計値の最小値ＨＮ（０）＝２に、全ブロック数を乗じることにより得られる。なお、通常は、カテゴリ「０」においてハフマン符号量と付加ビット数との合計値が最小値をとるので、ここでは最小値ＨＮ（０）という符号を用いている。一方、スキャンＡＣ63の合計符号量ＣＤ63は、ハフマン符号化における終端データ（ＥＯＢ）の符号量ＨＮ（“ＥＯＢ”）＝４に全ブロック数を乗じることにより得られる。
【０１１０】
ステップ２０２では、デフォルトの量子化テーブルを用いた場合における、スキャンＡＣ63を除いた全てのブロックに関する合計符号量ＣＤＡが
ＣＤＡ＝Σ（ＣＯi ／ＦＴi )                             （３）
により求められる。ただし、ＣＯi は、デフォルトの量子化テーブルを用いた時のスキャンＡＣi の符号量（ビット数）（図１２参照）であり、ＦＴi は、スキャンＡＣi のフィルタリングテーブルＦＬ（図３４参照）のテーブル値、すなわちフィルタリング係数を示す。なお、Σはパラメータｉについて０から６２まで加算することを示す。
【０１１１】
フィルタリングテーブルＦＬは、例えば図３４に示すように各空間周波数に対応したフィルタリング係数ＦＴi から成る。フィルタリング係数ＦＴ0 はＤＣ成分に対応し、フィルタリング係数ＦＴ1 、ＦＴ2 ・・・ＦＴ63はスキャンＡＣ1 、ＡＣ2 ・・・ＡＣ63に対応する。またフィルタリング係数は、データ圧縮の度合いが大きい空間周波数ほど大きい値を有し、したがって図３４の例は高周波成分をカットするフィルタを示している。すなわち、高周波成分のフィルタリング係数は２００００あるいは３００００であり、高周波成分は、（３）式によって大きく圧縮される。
【０１１２】
ステップ２０３では、修正係数ＣＤＲが
ＣＤＲ＝（ＳＥＴＩＭ−ＣＤ0 −ＣＤ63）／ＣＤＡ          （４）
により求められる。ただしＳＥＴＩＭは設定合計符号量であり、例えば５２４２８８ビット（６４Ｋbyte）である。修正係数ＣＤＲの値は、（３）式によって得られた合計符号量ＣＤＡが小さいほど大きくなり、例えば約１００である。
【０１１３】
ステップ２０４においてパラメータｉが０にクリアされた後、ステップ２０５において、
ＣＯＤＥi ＝（ＣＯi ／ＦＴi ）×ＣＤＲ                    （５）
により、各空間周波数（スキャンＡＣi ）における圧縮データの量（ビット数）が求められる。（５）式に示されるように圧縮データ量ＣＯＤＥi は、デフォルトの量子化テーブルを用いた時の符号量ＣＯi をフィルタリング係数ＦＴi で割った結果に、修正係数ＣＤＲを乗じることによって得られる。
【０１１４】
ステップ２０６では、圧縮データ量ＣＯＤＥi がデフォルトの量子化テーブルを用いた時の符号量ＣＯi よりも大きいか否かが判定される。圧縮データ量ＣＯＤＥi の方が大きい場合、ステップ２０７において符号量ＣＯi が圧縮データ量ＣＯＤＥi として設定される。換言すると、この場合、量子化係数ｑがいくらであっても圧縮符号量は符号量ＣＯi を越える可能性が低いため、その符号量ＣＯi が圧縮データ量ＣＯＤＥi として定められる。
【０１１５】
これに対し、圧縮データ量ＣＯＤＥi の方が小さい場合、ステップ２０８においてパラメータｉが１だけインクリメントされた後、ステップ２０９においてパラメータが６２より大きいか否かが判定される。パラメータｉが６２を越えていない場合、ステップ２０５に戻り、上述した処理が再び実行される。このようにしてスキャンＡＣ62までの圧縮データ量ＣＯＤＥi が設定されると、ステップ２１０においてスキャンＡＣ63の圧縮データ量ＣＯＤＥ63がＣＤ63に設定され、このプログラムは終了する。
【０１１６】
以上のようにして得られた圧縮データ量ＣＯＤＥi が、図２５のステップ１０６において用いられる設定符号量Ｓi である。
【０１１７】
図３５は、図３４に示すフィルタリングテーブルＦＬにおける各スキャンＡＣi の割当比率を示している。この割当比率は、各ＡＣ成分のフィルタリング係数ＦＴi とＤＣ成分のフィルタリング係数ＦＴ0 との比の逆数に１００を乗じたものであり、例えばスキャンＡＣ2 の場合、フィルタリング係数ＦＴ2 は９８であるので、割当比率は符号ＲＡにより示すように１００よりも大きい。この図から理解されるように、図３４のフィルタリングテーブルＦＬは、高周波成分に対する割当比率が小さく、ローパスフィルタを示している。逆に、ハイパスフィルタのテーブルＦＬを生成するには、図３５の割当比率において、低周波成分に対する割当比率を小さくするようにしてフィルタリング係数を決定すればよい。
【０１１８】
図３６は、第１のローパスフィルタに対応したフィルタリングテーブルを示している。符号（ａ）は輝度用のフィルタリングテーブルを示し、これは図３４のフィルタリングテーブルと同じである。符号（ｂ）は色差用のフィルタリングテーブルを示している。図３７は、平均化フィルタに対応したフィルタリングテーブルであり、符号（ａ）は輝度用のフィルタリングテーブルを示し、符号（ｂ）は色差用のフィルタリングテーブルを示している。図３８は、第２のローパスフィルタに対応したフィルタリングテーブルを示している。この例では、輝度用と色差用のフィルタリングテーブルは共通である。図３９は、ハイパスフィルタに対応したフィルタリングテーブルを示し、このテーブルも、輝度用と色差用において共通である。
【０１１９】
【発明の効果】
以上のように本発明によれば、個々の画像の画質に応じた画像圧縮を達成することができるという効果が得られる。
【図面の簡単な説明】
【図１】本発明の一実施例の画像圧縮装置を示すブロック図である。
【図２】画像データＰ(Y)xy 、ＤＣＴ変換係数Ｓ(Y)uv 、量子化ＤＣＴ係数Ｒ(Y)uv 、量子化テーブルＱ(Y)uv の例を示す図である。
【図３】ＤＣ係数の差分値のカテゴリを示す図である。
【図４】ＤＣ係数の符号化テーブルを示す図である。
【図５】量子化ＡＣ係数の符号化を行う処理ルーチンを示すフローチャートである。
【図６】ＡＣ係数をハフマン符号化する際に行われるジグザグスキャンを示す図である。
【図７】ＡＣ係数のカテゴリを示す図である。
【図８】ＪＰＥＧにより推奨されたハフマンテーブルを示す図である。
【図９】ハフマン符号化による符号化データの一例を示す図である。
【図１０】符号化データの構成要素を示す図である。
【図１１】全ての量子化係数が「１」である量子化テーブルを用いた時の所定の空間周波数でのカテゴリ分布の例を示す図である。
【図１２】全ての量子化係数が「１」である量子化テーブルを用いた時の、各スキャンにおける符号化データのビット数の分布の例を示す図である。
【図１３】空間周波数データ量設定部において設定される各空間周波数毎（すなわちスキャン毎）の符号量の分布の例を示す図である。
【図１４】図１１に示すカテゴリ分布を各スキャンについて同時に示す図である。
【図１５】全ての量子化係数が「１６」である量子化テーブルを用いた時のカテゴリ分布の表を示す図である。
【図１６】スキャンＡＣ1 のカテゴリ「０」のブロック数と、カテゴリ「１」以上のブロック数を示す図である。
【図１７】スキャンＡＣ2 までのラン長が２、１、０であるブロック数を示す図である。
【図１８】スキャンＡＣ3 までのラン長が３、２、１、０であるブロック数を示す図である。
【図１９】スキャンＡＣ4 までのラン長が４、３、２、１、０であるブロック数を示す図である。
【図２０】スキャンＡＣ1 のラン長・カテゴリの表を示す図である。
【図２１】スキャンＡＣ2 のラン長・カテゴリの表を示す図である。
【図２２】スキャンＡＣ3 のラン長・カテゴリの表を示す図である。
【図２３】スキャンＡＣ4 のラン長・カテゴリの表を示す図である。
【図２４】ＪＰＥＧにより推奨されたハフマンテーブルの各符号語の符号長を示す図である。
【図２５】量子化テーブルを生成するプログラムのフローチャートである。
【図２６】「００」データの分布を示す図である。
【図２７】スキャンＡＣ1 とスキャンＡＣ2 の「００」データの正規化を示す図である。
【図２８】正規化された「００」データの分布の表を示す図である。
【図２９】スキャンＡＣi-1 のカテゴリ「０」のブロック数とスキャンＡＣi-1 とスキャンＡＣi の「００」データとの関係を示す図である。
【図３０】スキャンＡＣ4 におけるカテゴリ分布の例を示す図である。
【図３１】第３の予測方法によって得られたラン長・カテゴリの分布の例を示す図である。
【図３２】図３１のラン長・カテゴリの分布の表を図２３に対応した形式で表した図である。
【図３３】設定符号量Ｓi の分布を生成するプログラムのフローチャートである。
【図３４】フィルタリングテーブルの一例を示す図である。
【図３５】図３４のフィルタリングテーブルにおける各スキャンの割当比率を示す図である。
【図３６】第１のローパスフィルタのフィルタリングテーブルを示す図である。
【図３７】平均化フィルタのフィルタリングテーブルを示す図である。
【図３８】第２のローパスフィルタのフィルタリングテーブルを示す図である。
【図３９】ハイパスフィルタのフィルタリングテーブルを示す図である。
【符号の説明】
Ｍ  ＩＣメモリカード
【図１】
0003746804.tif 000010
【図２】
0003746804.tif 000011
【図３】
0003746804.tif 000012
【図４】
0003746804.tif 000013
【図５】
0003746804.tif 000014
【図６】
0003746804.tif 000015
【図７】
0003746804.tif 000016
【図８】
0003746804.tif 000017
【図９】
0003746804.tif 000018
【図１０】
0003746804.tif 000019
【図１１】
0003746804.tif 000020
【図１２】
0003746804.tif 000021
【図１３】
0003746804.tif 000022
【図１４】
0003746804.tif 000023
【図１５】
0003746804.tif 000024
【図１６】
0003746804.tif 000025
【図１７】
0003746804.tif 000026
【図１８】
0003746804.tif 000027
【図１９】
0003746804.tif 000028
【図２０】
0003746804.tif 000029
【図２１】
0003746804.tif 000030
【図２２】
0003746804.tif 000031
【図２３】
0003746804.tif 000032
【図２４】
0003746804.tif 000033
【図２５】
0003746804.tif 000034
【図２６】
0003746804.tif 000035
【図２７】
0003746804.tif 000036
【図２８】
0003746804.tif 000037
【図２９】
0003746804.tif 000038
【図３０】
0003746804.tif 000039
【図３１】
0003746804.tif 000040
【図３２】
0003746804.tif 000041
【図３３】
0003746804.tif 000042
【図３４】
0003746804.tif 000043
【図３５】
0003746804.tif 000044
【図３６】
0003746804.tif 000045
【図３７】
0003746804.tif 000046
【図３８】
0003746804.tif 000047
【図３９】
0003746804.tif 000048