(57)【特許請求の範囲】
【請求項１】
画像データを符号化する画像符号化装置であって、
符号化対象の画像データから、ラスタスキャン順に、複数の画素で構成される画素ブロックを入力する入力手段と、
該入力手段による入力画素ブロック内の画像データを周波数変換し、当該周波数変換で得られた各変換係数を、所定の基準で決定した境界ビット位置で特定されるビット位置より上位の上位ビット部と、前記境界ビット位置以下の下位ビット部とに分離することで符号化データを生成し、かつ、前記上位ビット部について所定の符号化効率を表す指標値を算出し、当該指標値に従って前記境界ビット位置に対して予め設定された増減範囲で増減させたビット位置を、前記入力画素ブロックに後続して符号化される画素ブロックの前記境界ビット位置として決定する符号化手段と、
許容歪み値を設定する設定手段と、
前記符号化手段で生成された符号化データから、前記設定手段で設定された前記許容歪み値以下の符号化列を形成する符号列形成手段とを有し、
当該符号列形成手段は、
１つの画素ブロックから生成された前記下位ビット部について、設定されたビット数であるＮに相当する部分を削除する削除手段であって、前記１つの画素ブロックにおける前記境界ビット位置をｎとしたとき、
Ｎ≦ｎの場合には、前記着目している画素ブロックの下位ビット部の最下位ビットからＮビットまでを削除し、
Ｎ＞ｎの場合には、前記着目している画素ブロックの下位ビット部の最下位ビットからｎビットを削除する削除手段と、
着目画素ブロックから予め設定された距離以内の２次元領域内に位置する複数の画素ブロックそれぞれについて、前記削除手段による削除するビット数ｉを１、２、…と変更していったと仮定したときの、各画素ブロックの上位ビット部と削除後に残った下位ビット部で表される変換係数の有効ビット数の最大差をmax_diff(i)を求めることを、前記着目画素ブロックの位置を変更するたびに行うことで前記ｉとmax_diff(i)のヒストグラムを生成し、前記符号化対象の画像データにおける前記max_diff(i)の出現率を、前記ｉにおける前記符号化対象の画像データの歪み評価値として算出する算出手段と、
該算出手段で算出した歪み評価値の中で、前記許容歪み値以下であって、最大となるビット数ｉを求め、当該ｉを前記削除手段による削除するビット数Ｎとして決定し、前記削除手段を実行させ、削除後に残った符号化データを予め設定された形式のデータ構造にして出力する出力手段と
を備えることを特徴とする画像符号化装置。
【請求項２】
画像データを符号化する画像符号化装置であって、
符号化対象の画像データから、ラスタスキャン順に、複数の画素で構成される画素ブロックを入力する入力手段と、
該入力手段による入力画素ブロック内の画像データを周波数変換し、当該周波数変換で得られた各変換係数を、所定の基準で決定した境界ビット位置で特定されるビット位置より上位の上位ビット部と、前記境界ビット位置以下の下位ビット部とに分離することで符号化データを生成し、かつ、前記上位ビット部について所定の符号化効率を表す指標値を算出し、当該指標値に従って前記境界ビット位置に対して予め設定された増減範囲で増減させたビット位置を、前記入力画素ブロックに後続して符号化される画素ブロックの前記境界ビット位置として決定する符号化手段と、
許容歪み値を設定する設定手段と、
前記符号化手段で生成された符号化データから、前記設定手段で設定された前記許容歪み値以下の符号化列を形成する符号列形成手段とを有し、
当該符号列形成手段は、
１つの画素ブロックから生成された前記下位ビット部について、設定されたビット数であるＮに相当する部分を削除する削除手段であって、前記１つの画素ブロックにおける前記境界ビット位置をｎとしたとき、
Ｎ≦ｎの場合には、前記着目している画素ブロックの下位ビット部の最下位ビットからＮビットまでを削除し、
Ｎ＞ｎの場合には、前記着目している画素ブロックの下位ビット部の最下位ビットからｎビットを削除する削除手段と、
着目画素ブロックについて、前記削除手段による削除するビット数ｉを１、２、…と変更していったと仮定したときの、上位ビット部と削除後に残った下位ビット部で表される変換係数の有効ビット数をＳ(i,0)、当該着目画素ブロックから予め設定された距離以内の２次元領域内に位置し、前記着目画素ブロックを除くｍ個の近傍画素ブロックそれぞれの上位ビット部と削除後に残った下位ビット部で表わされる変換係数の有効ビット数をＳ（i,j)（j=1,2,…,m）と定義したとき、前記ｉについての差分合計値sum_diff(i)を
sum_diff(i)=Σ｜S(i,0)-S(i,j)|
として求め、前記ｉと前記sum_diff(i)に対する頻度で構成されるヒストグラムを生成し、前記符号化対象の画像データにおける前記sum_diff(i)の出現率を、前記ｉにおける前記符号化対象の画像データの歪み評価値として算出する算出手段と、
該算出手段で算出した歪み評価値の中で、前記許容歪み値以下であって、最大となるビット数ｉを求め、当該ｉを前記削除手段による削除するビット数Ｎとして決定し、前記削除手段を実行させ、削除後に残った符号化データを予め設定された形式のデータ構造にして出力する出力手段と
を備えることを特徴とする画像符号化装置。
【請求項３】
前記符号化手段は、前記入力画素ブロックの前記上位ビット部の非ゼロ係数又はゼロ係数の発生頻度に基づいて、前記入力画素ブロックに後続して符号化される画素ブロックの前記境界ビット位置を決定することを特徴とする請求項１又は２に記載の画像符号化装置。
【請求項４】
前記２次元領域は、前記画素ブロックの整数倍の領域であることを特徴とする請求項１又は２に記載の画像符号化装置。
【請求項５】
更に、符号化しようとする画像を、複数のマクロブロックを内包する複数のタイルに分割する分割手段とを備え、
前記入力手段は、前記分割手段で分割したタイルの画像データを、前記符号化対象の画像データとして入力し、
前記符号化手段は、
前記マクロブロックが内包する４×４画素で構成される複数のブロックそれぞれについて周波数変換し、１つのブロックにつき１つのＤＣ成分と１５個のＡＣ成分を得る第１の周波数変換手段と、
該第１の周波数変換手段で得られた各ブロックのＤＣ成分をまとめてＤＣブロックを生成し、当該ＤＣブロックを周波数変換することで１つのＤＣ成分と、１５個のＡＣＤＣ成分を生成する第２の周波数変換手段と、
前記第２の周波数変換手段で得られた１つのＤＣ成分、１５個のＡＣＤＣ成分をエントロピー符号化し、前記第１の周波数変換手段で得られた複数のＡＣ成分について、前記上位ビット部、前記下位ビット部に分離して符号化する
ことを特徴とする請求項１乃至４のいずれか１項に記載の画像符号化装置。
【請求項６】
画像データを符号化する画像符号化装置の制御方法であって、
入力手段が、符号化対象の画像データから、ラスタスキャン順に、複数の画素で構成される画素ブロックを入力する入力工程と、
符号化手段が、該入力工程による入力画素ブロック内の画像データを周波数変換し、当該周波数変換で得られた各変換係数を、所定の基準で決定した境界ビット位置で特定されるビット位置より上位の上位ビット部と、前記境界ビット位置以下の下位ビット部とに分離することで符号化データを生成し、かつ、前記上位ビット部について所定の符号化効率を表す指標値を算出し、当該指標値に従って前記境界ビット位置に対して予め設定された増減範囲で増減させたビット位置を、前記入力画素ブロックに後続して符号化される画素ブロックの前記境界ビット位置として決定する符号化工程と、
設定手段が、許容歪み値を設定する設定工程と、
符号列形成手段が、前記符号化工程で生成された符号化データから、前記設定工程で設定された前記許容歪み値以下の符号化列を形成する符号列形成工程とを有し、
当該符号列形成工程は、
１つの画素ブロックから生成された前記下位ビット部について、設定されたビット数であるＮに相当する部分を削除する削除手段であって、前記１つの画素ブロックにおける前記境界ビット位置をｎとしたとき、
Ｎ≦ｎの場合には、前記着目している画素ブロックの下位ビット部の最下位ビットからＮビットまでを削除し、
Ｎ＞ｎの場合には、前記着目している画素ブロックの下位ビット部の最下位ビットからｎビットを削除する削除工程と、
着目画素ブロックから予め設定された距離以内の２次元領域内に位置する複数の画素ブロックそれぞれについて、前記削除工程による削除するビット数ｉを１、２、…と変更していったと仮定したときの、各画素ブロックの上位ビット部と削除後に残った下位ビット部で表される変換係数の有効ビット数の最大差をmax_diff(i)を求めることを、前記着目画素ブロックの位置を変更するたびに行うことで前記ｉとmax_diff(i)のヒストグラムを生成し、前記符号化対象の画像データにおける前記max_diff(i)の出現率を、前記ｉにおける前記符号化対象の画像データの歪み評価値として算出する算出工程と、
該算出工程で算出した歪み評価値の中で、前記許容歪み値以下であって、最大となるビット数ｉを求め、当該ｉを前記削除工程による削除するビット数Ｎとして決定し、前記削除工程を実行させ、削除後に残った符号化データを予め設定された形式のデータ構造にして出力する出力工程と
を備えることを特徴とする画像符号化装置の制御方法。
【請求項７】
画像データを符号化する画像符号化装置の制御方法であって、
入力手段が、符号化対象の画像データから、ラスタスキャン順に、複数の画素で構成される画素ブロックを入力する入力工程と、
符号化手段が、該入力工程による入力画素ブロック内の画像データを周波数変換し、当該周波数変換で得られた各変換係数を、所定の基準で決定した境界ビット位置で特定されるビット位置より上位の上位ビット部と、前記境界ビット位置以下の下位ビット部とに分離することで符号化データを生成し、かつ、前記上位ビット部について所定の符号化効率を表す指標値を算出し、当該指標値に従って前記境界ビット位置に対して予め設定された増減範囲で増減させたビット位置を、前記入力画素ブロックに後続して符号化される画素ブロックの前記境界ビット位置として決定する符号化工程と、
設定手段が、許容歪み値を設定する設定工程と、
符号列形成手段が、前記符号化工程で生成された符号化データから、前記設定工程で設定された前記許容歪み値以下の符号化列を形成する符号列形成工程とを有し、
当該符号列形成工程は、
１つの画素ブロックから生成された前記下位ビット部について、設定されたビット数であるＮに相当する部分を削除する削除工程であって、前記１つの画素ブロックにおける前記境界ビット位置をｎとしたとき、
Ｎ≦ｎの場合には、前記着目している画素ブロックの下位ビット部の最下位ビットからＮビットまでを削除し、
Ｎ＞ｎの場合には、前記着目している画素ブロックの下位ビット部の最下位ビットからｎビットを削除する削除工程と、
着目画素ブロックについて、前記削除工程による削除するビット数ｉを１、２、…と変更していったと仮定したときの、上位ビット部と削除後に残った下位ビット部で表される変換係数の有効ビット数をＳ(i,0)、当該着目画素ブロックから予め設定された距離以内の２次元領域内に位置し、前記着目画素ブロックを除くｍ個の近傍画素ブロックそれぞれの上位ビット部と削除後に残った下位ビット部で表わされる変換係数の有効ビット数をＳ（i,j)（j=1,2,…,m）と定義したとき、前記ｉについての差分合計値sum_diff(i)を
sum_diff(i)=Σ｜S(i,0)-S(i,j)|
として求め、前記ｉと前記sum_diff(i)に対する頻度で構成されるヒストグラムを生成し、前記符号化対象の画像データにおける前記sum_diff(i)の出現率を、前記ｉにおける前記符号化対象の画像データの歪み評価値として算出する算出工程と、
該算出工程で算出した歪み評価値の中で、前記許容歪み値以下であって、最大となるビット数ｉを求め、当該ｉを前記削除工程による削除するビット数Ｎとして決定し、前記削除工程を実行させ、削除後に残った符号化データを予め設定された形式のデータ構造にして出力する出力工程と
を備えることを特徴とする画像符号化装置の制御方法。
【請求項８】
コンピュータが読み込み実行することで、前記コンピュータを、請求項１乃至５のいずれか１項に記載の画像符号化装置として機能させるためのプログラム。
【請求項９】
請求項８に記載のプログラムを格納したことを特徴とするコンピュータが読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像データの符号化技術に関するものである。
【背景技術】
【０００２】
デジタル画像を効率的に扱う上で、そのファイルサイズを小さくする画像圧縮は不可欠である。そして、かかる技術を開示する文献として、特許文献１、非特許文献１、非特許文献２が挙げられる。
【０００３】
上記技術を基礎にした技術では、１６×１６画素サイズのマクロブロック（ＭＢ）を定義して周波数変換を行い、その後に量子化、エントロピー符号化を行う。エントロピー符号化では、符号化対象の各高周波係数が自然二進表現の値と見なし、図６のように上位ビットと下位ビットに分ける。この上位ビットのことをＨＰｕ（ＨＰ  ｕｐｐｅｒ）、下位ビットのことをＦＬＥＸＢＩＴＳと呼ぶ。これら２種類のデータについて、ＨＰｕについては“０”ビットが多く存在しており圧縮しやすいためハフマン符号化を実施する。一方ＦＬＥＸＢＩＴＳについては、“０”，“１”ビットが実質的に無作為に存在しており圧縮しづらいため、非圧縮で出力する。さらに圧縮の効果を考慮すると、ＦＬＥＸＢＩＴＳのビット数については画像中で固定にさせるより変動させる方が望ましい。なぜならエッジがあまり含まれない領域とエッジが多く含まれる領域を比較すると、前者についてはＬＳＢ（Ｌｅａｓｔ  Ｓｉｇｎｉｆｉｃａｎｔ  Ｂｉｔ）に近いビットにも“０”ビットが多く存在する。一方後者についてはＭＳＢ（Ｍｏｓｔ  Ｓｉｇｎｉｆｉｃａｎｔ  Ｂｉｔ）に近いビットでも“０”と”１”のビットが無作為に存在しやすい。つまり前者についてはＦＬＥＸＢＩＴＳのビット数を少なく割り当て、ＨＰｕとして符号化するビット数を増やした方がよい。後者についてはその逆である。この点を考慮して、特許文献１等をベースとした技術ではマクロブロックを単位としてＦＬＥＸＢＩＴＳのビット数を、主走査方向の隣接ＭＢの間で±１の範囲で動的に変化させる仕組みを導入している。ここで「±１の範囲」と限定がある理由は、画像全体で同一のビット数によりＦＬＥＸＢＩＴＳの下位ビットを削除することが可能となっている。ＦＬＥＸＢＩＴＳをすべて削除した場合等、隣接ＭＢ間において大きな画質差が発生することがあり、抑制するためである。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特表２００９−５０５４９４号公報
【非特許文献】
【０００５】
【非特許文献１】“ＪＰＥＧ  ＸＲ  標準化の最新動向”画像電子学会  Ｖｏｌ．３７  Ｎｏ４  ５０２〜５１２頁  ２００８年７月２５日発行
【非特許文献２】日経エレクトロニクス  ２００８年１２月２９日号  ７１〜７７頁  ２００８年１２月２９日発行
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし主走査方向の隣接ＭＢ間以外にはＦＬＥＸＢＩＴＳのビット数の差について制限がない。例えば、ＪＰＥＧ  ＸＲにおいては、画像中の位置の離れた２つのＭＢや、副走査方向で隣接するＭＢの間ではＦＬＥＸＢＩＴＳの差が幾つになるかは不明である。そのため削除するビット数によってＭＢ間の画質の差異を発生することがある。特に、副走査方向の隣接ＭＢの間で画質差が生じた場合には、歪みとして知覚され、問題となる。
【０００７】
本発明は、上記従来例に鑑みてなされたものである。そして、本発明は、予め設定されたスキャン順に、画素ブロックを単位に符号化しつつ、周波数変換結果である変換係数の上位ビット部と下位ビット部に分離する境界ビット位置を最大でも１ビットだけ更新する符号化技術を採用しながらも、そのスキャン順だけでなく、それとは異なる方向に対する歪みをも評価して、符号化データ量を削減する技術を提供しようとするものである。
【課題を解決するための手段】
【０００８】
この課題を解決するため、例えば本発明の画像符号化装置は以下の構成を備える。すなわち、
画像データを符号化する画像符号化装置であって、
符号化対象の画像データから、ラスタスキャン順に、複数の画素で構成される画素ブロックを入力する入力手段と、
該入力手段による入力画素ブロック内の画像データを周波数変換し、当該周波数変換で得られた各変換係数を、所定の基準で決定した境界ビット位置で特定されるビット位置より上位の上位ビット部と、前記境界ビット位置以下の下位ビット部とに分離することで符号化データを生成し、かつ、前記上位ビット部について所定の符号化効率を表す指標値を算出し、当該指標値に従って前記境界ビット位置に対して予め設定された増減範囲で増減させたビット位置を、前記入力画素ブロックに後続して符号化される画素ブロックの前記境界ビット位置として決定する符号化手段と、
許容歪み値を設定する設定手段と、
前記符号化手段で生成された符号化データから、前記設定手段で設定された前記許容歪み値以下の符号化列を形成する符号列形成手段とを有し、
当該符号列形成手段は、
１つの画素ブロックから生成された前記下位ビット部について、設定されたビット数であるＮに相当する部分を削除する削除手段であって、前記１つの画素ブロックにおける前記境界ビット位置をｎとしたとき、
Ｎ≦ｎの場合には、前記着目している画素ブロックの下位ビット部の最下位ビットからＮビットまでを削除し、
Ｎ＞ｎの場合には、前記着目している画素ブロックの下位ビット部の最下位ビットからｎビットを削除する削除手段と、
着目画素ブロックから予め設定された距離以内の２次元領域内に位置する複数の画素ブロックそれぞれについて、前記削除手段による削除するビット数ｉを１、２、…と変更していったと仮定したときの、各画素ブロックの上位ビット部と削除後に残った下位ビット部で表される変換係数の有効ビット数の最大差をmax_diff(i)を求めることを、前記着目画素ブロックの位置を変更するたびに行うことで前記ｉとmax_diff(i)のヒストグラムを生成し、前記符号化対象の画像データにおける前記max_diff(i)の出現率を、前記ｉにおける前記符号化対象の画像データの歪み評価値として算出する算出手段と、
該算出手段で算出した歪み評価値の中で、前記許容歪み値以下であって、最大となるビット数ｉを求め、当該ｉを前記削除手段による削除するビット数Ｎとして決定し、前記削除手段を実行させ、削除後に残った符号化データを予め設定された形式のデータ構造にして出力する出力手段とを備える。
【発明の効果】
【０００９】
本発明によれば、予め設定されたスキャン順に、画素ブロックを単位に符号化しつつ、周波数変換結果である変換係数の上位ビット部と下位ビット部に分離する境界ビット位置を最大でも１ビットだけ更新する符号化技術を採用しながらも、そのスキャン順だけでなく、それとは異なる方向に対する歪みをも評価して、符号化データ量を削減することができる。
【図面の簡単な説明】
【００１０】
【図１】第１の実施形態における画像処理部のブロック構成図。
【図２】画像中のタイル、マクロブロック、ブロックの関係を示す図。
【図３】系列変換処理を説明するための図。
【図４】系列変換処理の処理手順を示すフローチャート。
【図５】系列変換の回路図。
【図６】上位ビット群とＦＬＥＸＢＩＴＳの説明図。
【図７】ＦＬＥＸＢＩＴＳの変動の説明図。
【図８】第１の実施形態におけるヒストグラム。
【図９】第１の実施形態におけるマクロブロックの歪みの説明図。
【図１０】歪みの発生分布表の説明図。
【図１１】第１の実施形態における歪みの発生分布表を生成するフローチャート。
【図１２】第２の実施形態における歪みの発生分布表を生成するフローチャート。
【図１３】ＦＬＥＸＢＩＴＳの削除の手順を示すフローチャート。
【図１４】num_flex_bitsの情報を保持する対象となるマクロブロックの説明図。
【図１５】符号列形成方法の説明図。
【図１６】第１の実施形態における処理のフローチャート。
【図１７】その他の実施形態におけるＦＬＥＸＢＩＴＳの削除に関する説明図。
【発明を実施するための形態】
【００１１】
以下、添付図面に従って本発明に係る実施形態を詳細に説明する。
【００１２】
［第１の実施形態］
本実施形態では、画像を符号化した結果である画像符号化データの符号量が所定値以上である場合、歪みの発生を最小限に抑えて符号を削除する例を以下に説明する。処理のおおまかな流れは図１６に示したとおりである。画像を入力し（S1601）、その後に符号化する（S1602）。並行して、FLEXBITSに対して削除するビット数を複数想定し、それぞれについて画像中に発生する歪みを示す指標を算出する（S1602）。指標については後ほど説明する。符号化と歪みの発生指標の算出が終了した後には、符号化の条件を示したヘッダを生成する。その上でヘッダと、符号化して得られたデータをメモリ中に並べて画像符号化データを構成する（S1603）。続いて画像符号化データの符号量を算出し（S1604）、算出した符号量と所定値との比較を行う（S1605）。もし所定値より少なければ画像符号化データを出力して（S1608）、処理を終える。一方で所定値より多ければ、指標を基に削除するビット数(trim_bit数)を決定し、trim_bit数だけFLEXBITSの下位ビットを削除する（S1606）。その上で、画像符号化データを再構成（S1607）し、出力する（S1608)。なお歪みの発生を示す指標については以下のとおり定義する。前述のとおりＦＬＥＸＢＩＴＳを削除すると、着目マクロブロック（MB)と周囲のMBの間には復号されるビット数に差が生じ画質差が発生することがあり、歪みと知覚される。また歪みの大きさは大きいほど、また歪みの発生箇所が多いほど、画像の全体の品位は低下していくと考えられる。つまり歪みの発生の程度によって画像の品位は決定される。そこで本実施の形態では着目MBと、着目MBの周囲に存在する任意の１つのMBとの間における、復号されるビット数の差(diff)を算出する。さらに各MBで発生する歪みの大きさをdiffにより決定する。その上で所定値以上のdiffを持つMBの発生割合を算出し、指標と定義する。
【００１３】
図１は、実施形態における画像符号化装置のブロック構成図である。同図の如く、本装置は、色変換部１０１、系列変換部１０２、量子化部１０３、係数予測部１０４、係数スキャン部１０５、エントロピー符号化部１０６、符号列形成部１０７、及び、装置全体の制御を司る制御部１１０で構成される。
【００１４】
説明に先立ち、用語について定義する。ブロックとは符号化処理の最小単位であり、実施形態では４×４画素のサイズである。マクロブロックとはブロックを複数個内包する単位であり、実施形態では４×４個のブロック（言い換えれば、１６×１６画素）を示す。タイルとは、マクロブロックを複数個内包する単位であり、Ｍ×Ｎ個（Ｍ，Ｎは１以上の整数であって）のマクロブロックで構成される。図２にブロック、マクロブロック、タイルの関係を示している。本実施形態では１画像に対して１タイルを割り当てる。つまりタイル分割を行わない。
【００１５】
色変換部１０１はＲ、Ｇ、Ｂ（実施形態では各成分が８ビット＝２５６階調とする）データをＹ、Ｕ、Ｖの色空間に変換し、変換結果を系列変換部１０２に出力する。ＲＧＢ→ＹＵＶの変換は、例えば以下に示す変換式に従って行なう。
Ｖ＝Ｂ−Ｒ
ｔ＝Ｒ−Ｇ＋Ｃｅｉｌｉｎｇ（Ｖ／２）
Ｕ＝−ｔ
Ｙ＝Ｇ＋Ｆｌｏｏｒ（ｔ／２）
（ここで、Ceiling(x)は実数ｘを以上の最小整数値を返す関数であり、Floor(x)は実数ｘ以下の最大整数値を変える関数であある）。
【００１６】
Ｙ，Ｕ，Ｖの各コンポーネントの符号化処理は個別に処理される。そこで、説明を簡単なものとするため、以下では、Ｙ（輝度）について説明する。すなわち、以下の説明にて画像データとはＹコンポーネントで表わされる画像データを意味することに注意されたい（Ｕ，Ｖの各コンポーネントについては、適宜、置き換えて把握されたい）。
【００１７】
系列変換部１０２では周波数変換処理を２回実行する。この処理を、図３を用いて具体的に説明する。
【００１８】
先ず、１つのマクロブロックから４×４個のブロックを生成するブロック分割を行い、それぞれに対し周波数変換処理を行なう。１つのブロックからは、１個のＤＣ成分（直流成分）データと１５（＝４×４−１）個のＡＣ成分（交流成分）データが得られる。上記の通り、１つのマクロブロックは４×４個のブロックで構成されているので、１つのマクロブロックからは４×４個のＤＣ成分データと、１５×４×４個のＡＣ成分データが得られる。この４×４個のＤＣ成分値を集めたものをＤＣブロックと言う。ここまでの処理が、第１回目の周波数変換処理（第１の周波数変換）である。
【００１９】
次に、第２回目の周波数変換処理（第２の周波数変換）について説明する。第２回目の周波数変換対象は、上記のＤＣブロックであり、処理は第一回目の周波数変換処理と同様である。この結果、ＤＣブロックから１個のＤＣ成分値と、１５個のＡＣ成分値が得られる。後者のＡＣ成分値は、ＤＣブロック（４×４画素）のＤＣ成分から算出したＡＣ成分であるので、図３ではＡＣＤＣ成分として示している。なお、１回目で得られるＤＣ成分データ、ＡＣ成分データを、第１レベルのＤＣ成分データ、第１レベルのＡＣ成分データとも言う。そして、２回目で得られるＤＣ成分データ、ＡＣＤＣ成分データを、第２レベルのＤＣ成分データ、第２レベルのＡＣ成分データとも言っても構わない。ここで、周波数変換処理は図４のフローチャートに示す手順で行われる。なお、同フローチャートは１ブロック（４×４画素）についてのものである点に注意されたい。すなわち、マクロブロックは４×４ブロックで構成されているので、第１回目の周波数変換処理では、図４のフローチャートに従った処理を１６回行なうことになる。 
なお、図４のフローチャートにおけるステップＳ７１乃至Ｓ７８における変換処理（フィルタリング処理）は、図５（ｂ）乃至（ｄ）の同名の変換回路（フィルタリング回路）のいずれかで実行される。また、図４の各変換処理での引数ａ乃至ｐは、図５（ａ）の着目ブロック内の画素ａ乃至ｐの位置に対応する。
【００２０】
図４の最初の処理ステップＳ７１の変換処理Ｔ＿Ｈ（ａ，ｄ，ｍ，ｐ）は、図５（ｂ）の回路構成で実行することを示している。すなわち、図５（ｂ）の入力端子Ｘ１，Ｘ２，Ｘ３，Ｘ４に、図５（ａ）におけるａ，ｄ，ｍ，ｐをそれぞれセットし演算を開始させる。そして、出力端子Ｙ１、Ｙ２、Ｙ３、Ｙ４に現れる４つの値で、元のａ，ｄ，ｍ，ｐの値を更新する。ステップＳ７２以降でも、同様である。なお、ステップＳ７８では、データｌ，ｏの正負の符号を反転した後、Ｔ＿Ｏｄｄ＿Ｏｄｄ演算処理（図５（ｄ）参照）を行なうことを示している。図４の処理をＤＣ成分について平たく言えば、最初の４つの処理（ステップＳ７１乃至７４）では、着目ブロック（４×４画素）のデータから、仮の低周波成分を左上隅の２×２の位置（図５ではａ，ｂ，ｅ，ｆの位置）に集中させる。そして、ステップＳ７５では、左上隅の｛ａ，ｂ，ｅ，ｆ｝の位置に格納された２×２個の仮低周波成分のデータを用いて、図５（ａ）の“ａ”の位置に、着目ブロックの１つのＤＣ成分を格納させる。また、１５個のＡＣ成分については、ステップＳ７１乃至Ｓ７８の処理過程を経て生成していることになる。１回目の周波数変換処理では、図４の着目マクロブロックに含まれる１６個のブロックそれぞれについて行なう。また、２回めの周波数変換処理では、着目マクロブロックから得られたＤＣブロック（４×４個のＤＣ成分値）が、図５（ａ）の配列にあるものと見なし、図４のフローチャートに示す処理を１回行なえば良いことになる。上記の通り、２回の周波数変換処理で、１つのマクロブロックからは、１つのＤＣ成分、１５（＝４×４−１）個のＡＣＤＣ成分、２４０（＝１５×４×４）個のＡＣ成分が得られる。
【００２１】
以上説明したのが、図１における系列変換部１０２の処理である。系列変換部１０２は上記の変換結果を、後続する量子化部１０３に出力する。量子化部１０３は、外部から指定された量子化ステップを用いて、ＤＣ，ＡＣＤＣ,ＡＣの各係数を量子化する。量子化については本発明の本質ではないので、詳細な説明を割愛する。
【００２２】
さて、上記のようにして量子化部１０３は、その量子化処理を終えると、量子化後のデータを係数予測部１０４に出力する。係数予測部１０４は、係数予測を行い、その予測誤差を出力する。係数予測ではＤＣ成分のみを対象として、ラスタスキャン順で見て、着目マクロブロックと１つ前のマクロブロックの間において、ＤＣ成分の予測誤差を算出する。
【００２３】
以上が係数予測部１０４の処理の説明である。この係数予測部１０４による予測処理の結果、ＤＣ成分の予測誤差、ＡＣＤＣ成分、ＡＣ成分の複数の成分値が係数スキャン部１０５に出力される。係数スキャン部１０５は、ＡＣＤＣ成分、ＡＣ成分の複数の成分値を格納するバッファを有し、ＡＣＤＣ成分、ＡＣ成分のブロックをＪＰＥＧ方式の係数スキャンと同様にジグザグスキャンを行い、内部バッファ内に並べ替える。この詳細については、本発明の本質ではないので省略する。
【００２４】
エントロピー符号化部１０６は、係数スキャン部１０５内の内部バッファに並べられた値についてエントロピー符号化を行なう。本実施形態においては、ＤＣ成分、ＡＣＤＣ成分についてはハフマン符号化する。
【００２５】
以下、エントロピー符号化部１０６によるＡＣ成分の符号化に関する説明である。ＡＣ成分についてはまず、各成分を符号・絶対値表現に変える。そして各々が正か負かを判別し、正負識別情報を生成する。この情報は１係数あたり１ビットの情報であり、正であれば０、負であれば１となる。なお絶対値がゼロの成分については、正負識別情報は不要であるが、各成分の正負識別情報を復号可能とするために与える必要がある。本実施の形態においては０を与える。続いて各成分の絶対値について、ビット深さ方向である境界ビット位置より上位の上位ビット群とその境界ビット位置以下の下位ビット群に分離する。上位ビット群は、連続して同じ値になる確率が高いので符号化対象とし、ジグザグスキャンを行った上でハフマン符号化を行う。下位ビット群で表わされる値は、連続性が少ないので符号化せず、無圧縮の状態で出力する。ＦＬＥＸＢＩＴＳは、各成分値の下位ビットの未符号化のデータで構成されるものである。ＦＬＥＸＢＩＴＳのビット数(num_flex_bits)はマクロブロック毎に設定（変更）され、動的に決まる。決め方は、ラスタスキャン順にマクロブロックを見た際、最初のマクロブロック目についてはnum_flex_bitsに初期値を与える。本実施形態では初期値として２、ＡＣ係数の下位２ビットをＦＬＥＸＢＩＴＳとして決定する。すなわち、ＡＣ係数がＮビットで表わされる場合、上位ビット数はＮ−２、下位ビット数は２とする。
【００２６】
そして、最初のマクロブロックの変換係数を上位ビット群に対して符号化を行い、さらに上位ビット群が示す符号化効率の指標値を算出する。実施形態では、具体的には、上位ビット群の非ゼロ係数（もしくは逆にゼロ係数）の数をカウントする。もし非ゼロ係数の数が所定の閾値Num1以上であれば、その上位ビット群は圧縮効率が高くないと言えるので、次に符号化する２番目のマクロブロックについては、上位、下位ビットに分離する境界位置を更に上位方向に１ビット移動させるため、num_flex_bitsを１ビット増やす。つまりnum_flex_bits=3とする。一方非ゼロ係数の数が所定の閾値Num2未満であれば、最初のマクロブロックの上位ビット部の符号化効率が良かったと言える。つまり、上位ビット部のビット数をより多くしても構わないと言える。そこで、２番目のマクロブロックの符号化に備え、境界ビット位置を１ビットだけ下位方向に移動させるため、num_flex_bitsを１ビット減らす。つまりnum_flex_bits=1とする。ここでNum1＞Num2であり、非ゼロ係数の個数がNum2以上でありかつ、Num1未満であればnum_flex_bitsを変更しない（維持する）。つまりnum_flex_bits=2である。３番目のマクロブロック目以降については、この処理を繰り返してnum_flex_bitsを決定する。つまりi番目のマクロブロックの上位ビット群の非ゼロ係数の数をカウントする。その上でi+1番目のマクロブロックのnum_flex_bitsを決定する。ここで述べたビットの増減が±１に限定されている理由は、本符号化方式においては符号化後に画像全体を同一のビット数でＦＬＥＸＢＩＴＳを削除することができ、削除した際のマクロブロックを単位とした画質の変動を抑えるためである。なお、説明するまでもないが、num_flex_bitsの値は、０以上、ＡＣ係数を表わすビット数以下の値である。従って、例えば着目マクロブロックの１つ前のマクロブロックのnum_flex_bitsの値が０であり、且つ、その非ゼロ係数の個数がNum2未満であったとしても、着目マクロブロックのnum_flex_bitsは“０”のままとする（１を減じない）。
【００２７】
上記を具体例を図７を用いて説明する。同図(a)は２次元的に並んでいるマクロブロックをラスタスキャン順に１次元的に並び変えて、各マクロブロックの上位ビット群(以下ＨＰｕと呼ぶ点は既に説明した)とＦＬＥＸＢＩＴＳの分布を示している。同図において、番号0と番号１のマクロブロックについてはＦＬＥＸＢＩＴＳのビット数が2であることを表す。同様に、番号2のマクロブロックはＦＬＥＸＢＩＴＳのビット数が3、番号3は4を表している。さらに、同図(b)は下位３ビットのＦＬＥＸＢＩＴＳを削除した場合に、復号できるビット数を白の破線で示している。同図において、番号0、番号1のマクロブロックはＦＬＥＸＢＩＴＳのビット数が2であるため、下位3ビットのＦＬＥＸＢＩＴＳを削除しようとしても2ビットしか削除できないことを示している。番号2、番号3のマクロブロックについてはＦＬＥＸＢＩＴＳのビット数が3以上であるため、下位3ビットの削除が可能である。同様に同図(c)は下位５ビットを削除した場合を示している。これらの図からわかるとおり、主走査方向では隣接マクロブロックの間ではdiffは０ビットもしくは１ビットである。つまり主走査方向で見た画質の変動はせいぜい１ビット分で抑えられる
しかし主走査方向以外では、マクロブロックの間にnum_flex_bitsの設定に関する制限を設けていないため、ＦＬＥＸＢＩＴＳを削除した後に大きな画質差（歪み）が多数発生することがある。このため歪みの発生を許容範囲内に収められるような削除が必要となる。これには削除するビット数をいくつか想定して、どの程度の歪みを持つMBがどの程度の割合で発生しているかを、分析する必要がある。そこで、本実施の形態においては、主走査方向だけでなく、それ以外を方向を含めるため、着目ブロックから予め設定された距離以内の２次元領域内に位置する複数のマクロブロックそれぞれについて、削除するビット数ｉを１、２、…と変更していったと仮定したときの、各マクロブロックの上位ビット部と削除後に残った下位ビット部で表わされる変換係数の有効ビット数の最大差をmax_diff(i)としたとき、各ｉとmax_diff(i)に対する頻度で構成されるヒストグラムを作成する。そして、ヒストグラムにおける頻度を出現するマクロブロック数で除算することで、ｉと前記max_diff(i)に対する出現率を算出し、それを削除ビット数ｉに対する歪み評価値とした。そして、符号列形成部１０７は、ユーザが予め設定したmax_diff(i)の出現率以下で、最大となるｉを前記ヒストグラムから求め、このｉを実際に削除するビット数として決定する。以下、より具体的に説明する。
【００２８】
例えば図９(a),(b)のように着目マクロブロックとその周囲の８個のマクロブロックでＦＬＥＸＢＩＴＳ数の分布について考える。
【００２９】
実施形態では、ＦＬＥＸＢＩＴＳについて、設定された削除ビット数Ｎに相当する部分を削除するが、以下のような条件がある。すなわち、着目しているマクロブロックのtrim_bits数ｎ（境界ビット数ｎ）としたとき、Ｎ≦ｎの場合には、着目しているマクロブロックのＦＬＥＸＢＩＴＳの最下位ビットからＮビットまでを削除する。また、Ｎ＞ｎの場合には、着目しているマクロブロックのＦＬＥＸＢＩＴＳの最下位ビットからｎビットを削除する。要するに、各マクロブロックのtrim_bits数を超えるビット数が削除する上限とする。かか点を踏まえて、図９(a)のように、着目マクロブロックと周囲８近傍のマクロブロックのＦＬＥＸＢＩＴＳ数は３以上である。従って、削除するビット数が１乃至３の間である限り、９個の上位ビット部と削除後に残った下位ビットで表わされる有効ビット数は互いに同じとなり、歪みの大きさmax_diffは０である（同図(c)）。一方、削除するビット数が４（trim_bit数=4）と仮定すると、max_diffは１（同図(d)）となる。そして、trim_bit数=5と仮定するとmax_diffは２となる（同図(e)）。その上で図８(a)のようなヒストグラムを作成する。このヒストグラムについては横軸がmax_diffで、縦軸が削除するビット(trim_bit)の数(trim_bit数)である。縦軸、横軸とも、その最大値は有限ビット数であり、変換係数（ＡＣ係数）を表わすビット数となる。このヒストグラムからtrim_bit数を設定した際に画像全体で見て、所定の大きさの歪みを発生しているマクロブロックがいくつ存在しているかがわかる。なお図９(a)のようなＦＬＥＸＢＩＴＳの分布を持つマクロブロックを分析する際、それまでのヒストグラムが図８(a)であったとする。この場合、分析後、着目マクロブロックに従い、図８(b)のようにヒストグラムが更新される。着目マクロブロックとその隣接する８つのマクロブロックのＦＬＥＸＢＩＴＳが、図９(a)の状態の場合、符号化して得られた符号化データ中のＦＬＥＸＢＩＴの最下位ビットから３ビットを削除したとしても、着目マクロブロックの近傍には歪みが発生しない。従って、図８(b)に示すように、trim_bit数が１乃至３の範囲では、max-diffが０の頻度が“１”増加する。また、ＦＬＥＸＢＩＴの最下位ビットから４ビットを削除対象としたとき、着目マクロブロックとその近傍のＦＬＥＸＢＩＴＳの分布は図９(d)の状態になるので、max-diffが１になる。それ故、図８(b)に示すように、trim_bit数が４場合には、max-diffが１の頻度が“１”増加する。他は説明するまでもないであろう。
【００３０】
さて、全てのマクロブロックに関して歪みの算出を終えたら、歪みの発生割合の分布表を生成する。この生成方法については図１０(a),(b)を用いて説明する。図１０(a)は画像中の全マクロブロックの分析を終了した後のヒストグラムである。このヒストグラム中の発生頻度を、画像中のマクロブロックの個数で除算して、各ケースの出現率を算出する。これが図１０(b)であり、歪みの発生割合の分布表である（以下分布表と呼ぶ）。ＦＬＥＸＢＩＴＳを削除する際には、この分布表を基にtrim_bit数を決定する。同図において、もし３ビット以上の歪みを持つマクロブロックが画像全体で見て１割以上ある場合（この割合はユーザが不図示の指示部より指示するものとする）、画像全体の画質として許容できないとするのであれば、trim_bit数=3と決定する。なおエントロピー符号化部１０６における処理は分布表を生成するまでであり、trim_bit数の決定は符号列形成部１０７における処理である。そこでここでは、マクロブロックの符号化から分布表を生成するまでの処理のフローについて図１１のフローチャートを用いて説明する。
【００３１】
符号列形成部１０７は、そののエントロピー符号化を開始すると、まずnum_flex_bitsに初期値を設定する。その上で全マクロブロックについてnum_flex_bitsを格納するためのメモリアレイ(array_num_flex_bits())を初期化する（S2501）。なお、実施形態では、１つのマクロブロックのサイズが１６×１６画素としている。また、符号化対象の画像をタイルに分割しない（符号化対象の画像＝１タイル）としているので、仮に符号化対象の画像の水平方向の画素数をＷ、垂直方向の画素数をＨとするなら、タイル総数ＮはＮ＝Ceiling(W/16)×Ceiling(H/16)で与えられる。従って、メモリアレイarray_num_flex_bits()もこの数だけ不図示のメモリに確保することになる。
【００３２】
次にマクロブロックのカウンタｉを０で初期化し（S2502）、ラスタスキャン順で見て最初のマクロブロックをnum_flex_bits（初期値は２であることは既に説明した）を用いて符号化する（S2503）。マクロブロックの符号化が終わると、num_flex_bitsをarray_num_flex_bits(i)に格納した後、符号化済のマクロブロックの上位ビット部に含まれる非ゼロ係数の数(num_NonZero)を解析する。その上で、次のマクロブロックの符号化に備えて、num_flex_bitsを更新する（S2504）。
【００３３】
もしnum_NonZeroが、予め設定された閾値num_Thより大きければ、符号化しているマクロブロックの周辺には上位ビットに非ゼロ係数が多く発生する領域と考えて、num_flex_bitsの値を１つインクリメントする。逆に小さければ、num_flex_bitsの値を１つデクリメントする（S2504)。なおS2504については、各マクロブロックの処理が終わるごとに情報を格納していく。そして、マクロブロックカウンタｉと、マクロブロック数Ｎ−１を比較する。もしｉの方が小さければマクロブロックカウンタｉをインクリメントして、次のマクロブロックの符号化のために処理をS2503に戻す。もしｉとＮ−1が同じ大きさであれば、全マクロブロックの符号化が一応完了したことになるので、S2506に処理を進める。
【００３４】
このS2506では、ヒストグラムを初期化する。続いてマクロブロックカウンタｊを０に初期化して（S2507）、各マクロブロックの歪みを算出する（S2508）。マクロブロックの歪みの算出は次の通りである。
【００３５】
今、着目しているのがｊ番目のマクロブロックのＦｌｅｘＢｉｔｓ数はarray_num_flex_bits(j)で得られるのは理解できよう。実施形態では、タイル＝オリジナル画像としているので、タイル内に存在する水平方向に並ぶマクロブロック数は、オリジナルの画像の水平方向に並ぶタイル数ceiling(Ｗ／１６)と同じである。仮に、ceiling(Ｗ／１６)を“ｗ”とするなら、図９の星印の着目マクロブロックに隣接する８つのマクロブロックのＦＬＥＸＢＩＴＳ数は、array_num_flex_bits(j-w-1),array_num_flex_bits(j-w),array_num_flex_bits(j-w+1),array_num_flex_bits(j-1),array_num_flex_bits(j+1),array_num_flex_bits(j+w-1),array_num_flex_bits(j+w),array_num_flex_bits(j+w+1)で得られる。この結果、着目マクロブロックに対する歪みが算出できる。
【００３６】
着目マクロブロックの歪みを算出するとで、ヒストグラムを更新する（S2509）。そして、変数ｊとN-1の大きさを比較する（S2510）。もしｊの方が小さければ、インクリメントした上で処理をS2508に戻す。そうでなければ発生分布表を生成し（S2511）、処理を終える。
【００３７】
符号列形成部１０７は、上記のようにしてエントロピー符号化を終えると、図１５(a)に示すように、不図示のメモリ中にヘッダを生成し、それに後続して符号化データを周波数順であるＤＣ，ＡＣＤＣ,ＡＣの順番で並べる。なおＡＣについては、図１５（ｂ）に示したように画像全体の正負識別情報をまとめ、その後ろに画像全体の上位ビット群をまとめる。最後に、画像全体のＦＬＥＸＢＩＴＳを並べる。また図１５(c),(d)に示したように、正負識別情報，上位ビット群のそれぞれはマクロブロックを単位としてラスタスキャン順に並べられる。そして各マクロブロック内についてはブロック単位にラスタスキャン順で並べられる。さらに各ブロックのデータについては、ラスタスキャン順に各成分のデータが並べられる。さらに図１５(e)に示したように、ＦＬＥＸＢＩＴＳはマクロブロックを単位としてラスタスキャン順に並べられる。そして各マクロブロック内についてはブロック単位にラスタスキャン順で並べられる。さらに各ブロックのデータについては、ジグザグスキャン順に各成分のデータが並べられる。ここで上位ビット群の各成分がジグザグスキャン順に並べられる理由は、その順で符号化が行われているからである。。なおヘッダには、符号化の条件をまとめて記述する。符号化の条件とは、画像の縦横サイズ，量子化ステップ，num_flex_bit，各周波数成分や上位ビット群，ＦＬＥＸＢＩＴＳの先頭へのポインタ，などがある。なおtrim_bit数の情報もヘッダに記述する必要があるが、後段の符号を削除する処理を終えた後に記述するものとする。
【００３８】
さて、上記のようにして、符号列を生成すると、符号列形成部１０７は、以下に示す最終処理を行う。この最終処理では、生成された符号化データ量が、予め設定した閾値rate_Thを上まわったとき、ユーザが設定した画質劣化についての許容範囲内である限り、その符号量を減らす処理である。なお、一旦、符号量削減を行った場合、その符号化データ量が閾値rate_Thを上まわっているか否かは不問である。
【００３９】
以下、かかる処理を図１３のフローチャートに従って説明する。
【００４０】
先ず、符号列形成部１０７は、閾値rate_Thの指定があるかどうかを判定する（S1301）。もしrate_Thが指定されていない場合、trim_bit数＝０とした上でヘッダに記述し(S1312)、処理を終える。もし指定があれば、生成された総符号化データ量(rate)と閾値rate_Thとを比較する（S1302）。もし総符号化データ量が閾値以下であれば（rate≦rate_Thであれば）処理をS1312へ進め、符号化データ量が閾値より大きければ（rate＞rate_Thであれば）、S1303に進めて、画質劣化許容範囲とする条件の下でtrim_bit数を決定する。
【００４１】
trim_bit数の決定については、歪みの大きさが許容範囲を超えているマクロブロックが、所定の割合以下となるように行う。例えば分布表が図１０(ｂ)であり、ユーザが指定した許容範囲を示す条件が、『max_diffが“３”の発生する割合が１０％以下』とする。この条件を満たすのは、最大trim_bitの値は、図１０(b)から、“３”である。すなわち、trim_bit数＝３と決定する。なお許容範囲の歪みの大きさと、所定の割合については外部から予め指定される。
【００４２】
こうして、trim_bit数を決定すると、符号列形成部１０７は、先に生成した符号列中の全マクロブロックのＦＬＥＸＢＩＴＳを不図示のワークメモリに移動する（S1304）。次に、マクロブロックカウンタｉを０で初期化し（S1305）、array_num_flex_bitsの情報を基に着目しているｉ番目のマクロブロックのnum_flex_bitsを取得する（S1306）。例えば、array_num_flex_bits()が、図７(a)の状態であり、ｉ＝０の場合、num_flex_bitsは２であることがわかる（array_num_flex_bit(0)=2であるため）。続いてｉ番目の着目マクロブロック内のブロックの係数カウンタｊを０で初期化する（S1307）。実施形態では、１つのマクロブロックは、４×４個のブロックで構成される例を示しているので、係数カウンタｊの値は最大でも４×４−１＝１５である。そして、ｊ番目のブロックのＦＬＥＸＢＩＴＳの下位trim_bit数だけビットを削除し、符号列中の上位ビット群の最後尾に追加する（S1309）。
【００４３】
なお、ＦＬＥＸＢＩＴＳを削減処理について、一応説明する。符号列形成部１０７は、着目マクロブロックのnum_flex_bitsと、先のS1303で決定したtrim_bit数とを比較し、その比較結果に応じて次の処理のいずれかを実行する。
・num_flex_bits≧trim_bit数である場合：
符号列形成部１０７は、着目マクロブロック内の各ブロックのＦＬＥＸＢＩＴＳの下位trim_bits数のデータを削除する。
・num_flex_bits＜trim_bit数である場合：
符号列形成部１０７は、着目マクロブロック内の各ブロックのＦＬＥＸＢＩＴＳの下位num_flex_bits数のデータ、言い換えれば、各ブロックのＦＬＥＸＢＩＴＳを全て削除する。
【００４４】
次いでマクロブロック内のブロック数をｎとしてｊとｎ−１（＝１５）を比較する（ステップS1310）。もしｊ＜ｎ−１であれば、ｊをインクリメントして処理をS1308に戻す。もしｊ＜ｎ−１ではない場合（ｊ＝ｎ−１の場合）、着目マクロブロックの全ブロックについての削除処理を終えたことになるので、つぎのマクロブロックの削減のため、ｉとＮ−１を比較する（S1311）。もしｉ＜Ｎ−１であればｉをインクリメントして処理をS1306へ戻し、ｉ＜Ｎ−１でない場合（ｉ＝Ｎ−１の場合）、ビット削除は終了したと判断して、S1312に進む。S1312の処理を終えたら、全体の処理を終了する。この後、符号列形成部１０７は、予め設定された形式のデータ構造にして出力することになる。
【００４５】
以上説明したとおり、歪みの発生の指標を求めた上で削除するビット数を決めるので、歪みの発生を抑制しつつ符号量を削減することができるようになる。
【００４６】
なお、上記実施形態では、最初の符号化処理で得られた符号量rateが、rate_Thを超える場合にFLEXBITSの削除処理を行ったが、符号量rateの大小如何にかかわらず、FLEXBITSの削除処理を行うようにしても構わない。このようにすると、符号化処理を終えた後、ユーザが許容する範囲内で更に符号量を少なくすることができることになる。
【００４７】
［第２の実施形態］
第１の実施形態においては歪みの発生の指標として、所定値以上の歪みを持つマクロブロックの発生割合と定義して算出する方法を示した。しかしこの方法だとマクロブロック毎に演算を行い処理時間がかかってしまうため、簡易な方法が望まれることもある。本実施形態においては、歪みの発生の指標として、所定値以上の歪みを持つマクロブロックの発生割合の目安を更に簡便に算出する例を説明する。
【００４８】
具体的にはマクロブロックの一つ一つに注目するのではなく、マクロブロックの行（以下、マクロブロック行）を単位にＦＬＥＸＢＩＴＳの頻度分布を生成する。その中で最頻出のＦＬＥＸＢＩＴＳのビット数を着目マクロブロック行のＦＬＥＸＢＩＴＳとして代表させる（代表させるビット数を代表ビット数と呼ぶことにする）。続いて、削除するビット数を複数想定しマクロブロック行の間でdiffを算出して、図８(a)に相当するヒストグラムを生成する。次いで画像中の全マクロブロックの処理が終わりヒストグラムの生成が完了すると、分布表を生成する。なお処理の流れは第１実施形態とほぼ同じであり、歪みの発生の目安の算出方法のみに限定して説明する。
【００４９】
図１２は本第２の実施形態における符号列形成部１０７の歪みの発生分布表を生成する処理のフローである。なお、以下の説明において、タイルの水平方向のマクロブロック数をＮ，垂直方向のマクロブロック数をＭとする。また、ヒストグラム１とは、水平方向の並ぶＮ個のマクロブロックそれぞれを符号化する際のＦＬＥＸＢＩＴＳの頻度を格納する不図示のメモリ内の領域である。ここで水平方向の並ぶＮ個のマクロブロックを総称して、マクロブロック行という。ヒストグラム２とはマクロブロック行の代表的なＦＬＥＸＢＩＴＳ数を格納する不図示のメモリ内の領域である。
【００５０】
先ず、符号列形成部１０７は、歪みの発生分布表を生成する処理が開始すると各マクロブロック行の代表ビット数を格納するためのarray_num_flex_bitsを０で初期化し、num_flex_bitsも初期値（実施形態では２）を設定する（S2601）。続いて、行カウンタｒの初期化（S2602）、列カウンタｃの初期化（S2603）を行う。さらにマクロブロック行におけるnum_flex_bitsのヒストグラム（ヒストグラム１）を初期化する（S2604）。続いて着目マクロブロック行における各マクロブロックを符号化する（S2605）。このとき、各マクロブロックの符号化した際に得られた上位ビット部に含まれる非ゼロ係数の数に従って、num_flex_bitsを更新していく点は第１の実施形態と同じである。また、各マクロブロックを符号化する際に、その際に使用したnum_flex_bitsの値に応じて、ヒストグラム１を更新することも行う（S2606)。この後、列カウンタｃとＮ−１とを比較する（S2607)。すなわち、直前に符号化したのがマクロブロック行の行端のマクロブロックであったのか否かを判断する。ｃ＜Ｎ−１の場合は、ｃをインクリメントして処理をS2605に戻す。一方でそうでなければ、着目マクロブロック行のFLEXBITSの代表ビット数を決定する（S2608）。
【００５１】
次いで、マクロブロック行の行数ｒをＭ−１と比較する（S2609）。もしｒ＜Ｍ−１の場合、ｒをインクリメントして処理をS2603に戻す。一方でそうでなければ、全マクロブロック号について代表ビット数が決定したことになるので、歪みの算出値を格納するヒストグラム（ヒストグラム２）の初期化を行う（S2610）。このヒストグラム２は第１実施形態における図８(a)に相当するヒストグラムである。次に行カウンタｒを初期化して（S2611）。そして着目マクロブロック行と次の行のマクロブロック行の間における、復号されるビット数の差(第１の実施形態におけるdiffに相当)を算出し（S2612）、ヒストグラム２を更新する（S2613）。次にｒとM-1の大きさを比較して（S2614）、ｒの方が小さければｒをインクリメントして処理をS2612に戻す。そうでなければ、歪みの発生分布表を作成して（S2615）、処理を終了する。
【００５２】
以上説明したとおり、歪みの発生の目安を算出した上で、歪みの発生を抑制しつつ符号量を削減する方法を示した。
【００５３】
［その他の実施形態］
第１実施形態において複数の画素で構成される画素ブロック（マクロブロック）の歪みとして、着目画素ブロックと隣接する画素ブロックの間におけるdiffの最大値としたが、隣接する画素ブロックの一部もしくはを全部を選択しdiffの和を歪みとしてもよい。すなわち、削除するビット数ｉを１、２、…と変更していったと仮定したときの着目画素ブロックの上位ビット部と削除後に残った下位ビット部で表わされる変換係数の有効ビット数をＳ(i,0)、この着目ブロックから予め設定された距離以内の２次元領域内に位置し、着目マクロブロックを除くｍ個の近傍画素ブロックそれぞれの上位ビット部と削除後に残った下位ビット部で表わされる変換係数の有効ビット数をＳ（i,j)（j=1,2,…,m）と定義したとき、ｉについての差分合計値sum_diff(i)を
sum_diff(i)=Σ｜S(i,0)-S(i,j)|
として求め、前記ｉと前記sum_diff(i)に対する頻度で構成されるヒストグラムを作成する。図１０(c)はその一例である。そして、この頻度を出現する画素ブロック数で除算することで、ｉとsum_diff(i)に対する出現率を算出する。
【００５４】
この後は上記実施形態と同じである。すなわち、許容できるsum_diff(i)の値とその出現率を設定してあったとき、符号列形成部１０７は、その設定されたsum_diff(i)とその出現率以下で、最大となるｉをヒストグラムから求め、当該ｉを削除するビット数として決定する。なお、かかる処理を、画素ブロック行を単位として判定する第２の実施形態にも適用可能である。
【００５５】
第１実施形態において、着目マクロブロックと隣接するマクロブロックの間におけるＦＬＥＸＢＩＴＳの差に注目した。しかし着目マクロブロックから、予め設定された距離範囲（隣接するマクロブロック間の距離を１とするなら、Ｎ（Ｎ＞２）だけ離れたマクロブロックとの間におけるＦＬＥＸＢＩＴＳの差に注目してもよい。
【００５６】
第１実施形態において所定値以上の歪みを持つMBの発生割合を指標としたが、指標の選び方はこれに限られない。例えば、diffを使って各MBで発生する歪みを算出する。その上で画像全体の歪みの平均値を導き指標としてもよい。
【００５７】
第１の実施形態において全マクロブロックのnum_flex_bitsの情報を格納した上で、マクロブロックの歪みのヒストグラムを生成する方法を示した。しかし本発明の範疇はこれに限られず、エントロピー符号化の過程で最低限のnum_flex_bitsの情報を保持した上でヒストグラムを生成する方法でもよい。その方法の一例について図１４(a),(b)を用いて説明する。同１４(a)は画像をマクロブロックで分割した状態を示している。マクロブロックを単位とするラスタースキャン順に符号化するとした場合、図１４(b)のマクロブロックBのエントロピー符号化が終了した時点で、num_flex_bitsの情報を最低限保持すべきマクロブロックは図示の太枠内のもので良い。つまり太い黒枠で囲われた範囲のマクロブロックについてnum_flex_bitsの情報を持てば、マクロブロックＸの周囲のnum_flex_bitsの情報を基に、発生し得る歪みの大きさを分析できる。そしてヒストグラムの情報を更新できる。さらに次のマクロブロックに処理が移る際には、マクロブロックAのnum_flex_bitsの情報を捨てて、処理を繰り返す。なおこの手法では画像全体のnum_flex_bitsの情報を保持しない。このため、ＦＬＥＸＢＩＴＳの削除を行う段階において、ＡＣ成分の上位ビット群を復号してnum_flex_bitsの情報を生成する必要がある。この処理に関する具体的な説明に関し、図７(a)を用いて行う。図７(a)は、画像をラスタスキャン順にマクロブロックを見た場合における、上位ビット群とＦＬＥＸＢＩＴＳの分布の一例である。第一の実施形態で述べたとおり、番号０のマクロブロックについてはnum_flex_bitsは２としており、復号でも同様に２とする。次に番号０のマクロブロックの復号を行い、非ゼロ係数の数をカウントする。所定の個数以上であれば、次のマクロブロックのnum_flex_bitsを１ビット増やす。逆に所定の個数以下であればnum_flex_bitsを１ビット減らす。番号１以降のマクロブロックについても復号を行い、num_flex_bitsの情報を取得する。
【００５８】
第２の実施形態において歪み発生の目安を指標とする方法として、マクロブロック行を単位としてＦＬＥＸＢＩＴＳの代表となるビット数を用いる方法を示した。しかし本発明の範疇はこれに限られず、各MBで発生する歪みを実際に計算せずに、歪みの発生の目安を算出する方法であればよい。例えば、より簡易な方法として、各マクロブロックのＦＬＥＸＢＩＴＳのビット数について頻度分布を生成し、これに基づいて画質差の発生可能性を推測しても良い。この頻度分布に基づき画質差を推測できる理由を簡単に説明する。あるtrim_bit数ＴでＦＬＥＸＢＩＴＳを削除した際、ＦＬＥＸＢＩＴＳのビット数がＴ未満のマクロブロックではＴビットの削除ができない。このため、画質差、つまり復号されるビット数にばらつきが生じる。また復号されるビット数にばらつきがある程、大きな歪みの発生割合が多くなる可能性が高い。より具体的にはtrim_bit=4としたときに、１,２,３ビットしか削れないMBが１割しかない画像と、５割ある画像とを比べると、後者の画像の方が大きな歪みが多く発生する可能性が高いと考えられる。よって頻度分布から各trim_bit数を設定した際にtrim_bit未満のビットしか削れないMBの発生割合を求め、歪みの発生の目安とすることができる。
【００５９】
上記第１，第２の実施形態において、タイル分割を行わないことを示したが、タイル分割を行ってもかまわない。その場合には、タイル全体で統一的なビット数で削除する方法、画像全体で統一的なビット数で削除する方法の２つが考えられるが、いずれも本発明の範疇である。さらに、タイル全体もしくは画像全体で統一的なビット数で削除する方法だけでなく、任意の複数のマクロブロックにわたり同一のビット数で削除する方法も本発明の範疇である。
【００６０】
第１の実施形態において各係数に対して正負識別情報を付与する方法を示したが、非ゼロ（有意）の係数にのみ識別情報を付与する方法でもよい。例えば、係数を符号・絶対値表現し、上位ビット群とＦＬＥＸＢＩＴＳに分割する。その後、上位ビットが有意である係数を特定する。そして該当する係数の絶対値を符号化し、生成された符号化データをメモリ上へ並べる際、符号化データの後に正負識別情報を並べる。また上位ビットが有意ではない（非有意な）係数のうち、ＦＬＥＸＢＩＴＳが有意な係数については、該当する係数のビット列の後ろに正負識別情報を並べる。このようにすることで、非有意な係数には正負識別情報を付与せずにすむ。図番を用いて具体的に説明すると、図１７(a)に示したとおりブロックにアドレスを割り振り、図１７(b)のように係数が分布していたとする。またnum_flex_bits=2であるとすると、上位ビット群とＦＬＥＸＢＩＴＳの分布は図１７(c)のようになる。そして図１７(c)を基に上位ビット群の符号化データと正負識別情報を考えると、図１７(d)のようになる。またＦＬＥＸＢＩＴＳについては、図１７(e)のようになる。結果として、非有意な係数であるc,hについては、正負識別情報を付与しないですむ。
【００６１】
なおここで述べたような、ＦＬＥＸＢＩＴＳに正負識別情報がある係数とない係数が混在する場合、ＦＬＥＸＢＩＴＳのビットを削除する上で正負識別情報の分布に関する情報が必要となる。この情報がないと正負識別情報のビットを特定できないからである。この問題を解消するために、符号化の過程で図１７(f)のような正負識別情報の分布マップ（以下分布マップと呼ぶ）を符号化の過程で生成する。同図において”0”のアドレスの係数にはＦＬＥＸＢＩＴＳに正負識別情報が存在せず、”1”のアドレスの係数には存在することを示している。実際にビットを削除する場合には、分布マップを基に削除すべきビットを決定する。具体的には、図１７(e)のＦＬＥＸＢＩＴＳをtrim_bit=1として削除する場合を考える。分布マップから、アドレスb, d, f, i,...のＦＬＥＸＢＩＴＳの直後には正負識別情報が存在することがわかる。そのため、cのＦＬＥＸＢＩＴＳにアクセスする際には、ＦＬＥＸＢＩＴＳの正負識別情報からなる符号列の先頭から６ビット目にポインタを移して、２ビット取得して１ビット削除する。アドレスd以降も同様な方法でアクセスする。結果としてＦＬＥＸＢＩＴＳの削除が可能となる。
【００６２】
上記実施形態では、ＪＰＥＧ  ＸＲに適応した例を説明したが、ＪＰＥＧ  ＸＲに限るものではない。すなわち、複数の画素で構成される画素ブロック（実施形態でのマクロブロック）を入力し、その入力画素ブロック内の画像データについて周波数変換し、その周波数変換の全部もしくは一部を、画素ブロック単位に更新する境界ビット位置より上位の上位ビット部と、境界ビット位置以下の下位ビット部に分離し、上位ビット部については圧縮符号化し、下位ビット部を無圧縮状態で出力する符号化技術に適用可能だからである。この場合、削除するビット数であるｉを、変換係数を表わす有限ビット数の範囲内で、１、２、…と変更させたと仮定した場合の、各ｉに対し、上位ビット部と削除後に残った下位ビット部で表わされる変換係数の有効ビット数を各画素ブロック毎に求め、各ｉと有効ビット数との関係から、各ｉに対する画像の歪み評価値を算出する。そして、算出した評価値の中で、設定した許容歪み値以下となる最大となるｉと求め、このｉを実際に削除するビット数として決定すればよい。
【００６３】
上位ビットと下位ビットの処理方法として、上位ビットを符号化して下位ビットについては符号化しない方法を示したが、これに限られることはない。より圧縮性能向上を目指して下位ビットを符号化する方法でもよい。具体的には、上位ビットについてはハフマン符号化などの多値符号化を行い、下位ビットについてはビット単位で削除できるように、ブロックを単位としたビットプレーン符号化等の２値算術符号化を用いていもよい。
【００６４】
境界ビット位置を変更させる基準として、注目マクロブロックの直前のマクロブロックの情報を参考にする方法を示したが、これに限られることではない。例えば、直前のマクロブロックとその前のマクロブロックとの間における、上位ビットの有意係数の個数の変化量に着目する方法も考えられる。より具体的には、該変化量が大きければ、直前のマクロブロックと注目マクロブロックの間でも変化量は大きいと考える。そして直前のマクロブロックにおける上位ビットの有係数の個数が所定値以上であれば、注目マクロブロックの上位ビットにおける有意係数の個数は、高い確率で多く存在すると判断して、境界ビットの位置を下げる、という方法でもよい。
【００６５】
また、直前のマクロブロックだけでなく、副走査方向でみて上に位置するマクロブロック（上方マクロブロック）における上位ビットの有係数の個数も参照してもよい。具体的には、直前のマクロブロックにおける上位ビットの有係数の個数、上方マクロブロックにおける上位ビットの有係数の個数のそれぞれが、所定数以上であれば、境界ビットを下げる方法が考えられる。
【００６６】
境界ビット位置を変更させる基準として、マクロブロック内における上位ビットの有意係数の数を用いる方法を示したが、これに限られることではない。例えば、画像中に、実施形態で説明したマクロブロックや画素ブロックの整数倍で表わされる着目領域（ＲＯＩ）が定められている場合、その周囲の周囲領域に対して、着目領域についてはなるべくビットを削除させたくない。その考え方をベースとして、各マクロブロックについて、着目領域に含まれる画素（注目画素）数をカウントして割合を求める。一定以上の割合を持つマクロブロックについては重要マクロブロックと判断する。その上で重要マクロブロックの符号化においては、境界ビットを１ビット下げる方法も考えられる。つまりマクロブロックにおける注目画素の割合を基準とする方法も本発明の範疇となる。
【００６７】
また、第１の実施形態で示した上位ビットの有意係数の数と、注目画素の割合を基に境界ビット位置を変化させる方法も考えられる。具体的には、重要マクロブロック内において、上位ビットにおいて有意係数が閾値以上存在すれば境界ビットを２下げて、閾値以下であれば１下げる。一方、重要マクロブロックでなければ、第１の実施形態のとおりに境界ビットを変化させる方法である。
【００６８】
なおこの方法は、隣接マクロブロックの間で２ビットの差により発生する歪みは許容の範囲と考えるので、歪みと考えるビット数の差は３ビット以上となる。
【００６９】
（その他の実施例）
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
0005529571.tif 000002
【図２】
0005529571.tif 000003
【図３】
0005529571.tif 000004
【図４】
0005529571.tif 000005
【図５】
0005529571.tif 000006
【図６】
0005529571.tif 000007
【図７】
0005529571.tif 000008
【図８】
0005529571.tif 000009
【図９】
0005529571.tif 000010
【図１０】
0005529571.tif 000011
【図１１】
0005529571.tif 000012
【図１２】
0005529571.tif 000013
【図１３】
0005529571.tif 000014
【図１４】
0005529571.tif 000015
【図１５】
0005529571.tif 000016
【図１６】
0005529571.tif 000017
【図１７】
0005529571.tif 000018