最初に、実施形態の詳細を説明する前に、ここで、空きビットについて説明を加える。9×7ウェーブレットは実数演算であり、本来ウェーブレット係数は浮動小数点で扱うが、ここでは、演算を高速化するため、整数(固定小数)で扱うことにする。9×7ウェーブレット係数のbit構成は、エンコード時、入力される原画像8bitであり、9×7ウェーブレット係数は実数であるため、整数部分と小数部分の両方を係数バッファに格納する必要がある。ウェーブレット変換で増加するビット数はLL1bit、HL2bit、LH2bit、HH3bitである。よって、ウェーブレット変換後の最大bit数はLL9bit、HL10bit、LH10bit、HH11bitである。計算機でのデータバッファには、通常8,16,32,64bitが用いられ、整数部は11bit必要なので、データバッファには16bitを使用する。小数部については、PSNRを良くするために、浮動小数点に近くする必要があり、小数部の桁数をなるべく大きくしたいため、残りの5bitを使用する。そのため、ここでの空いているビットは存在しない。
その後、16bitの係数に対し、線形量子化と整数化を行う。JPEG2000における線形量子化は、実は正規化であり、大抵のコーデックの場合、同じ量子化ステップ数で除算がなされるという特殊事情がある。
次に、所定圧縮率下でPSNRを最大にする量子化ステップ数の算出法に関して説明する。モノクロ画像の場合にPSNRを最大にする量子化ステップ数について述べる。非直交変換における線形量子化ステップ数に関する導出は、非特許文献1及び非特許文献2に記載されている。
非特許文献1及び2は、ラグランジェの未定乗数法(ある偏微分値を未定乗数の値と一致させて、所望の最適解を得る方法)によって最適なPSNRを与える条件を導出しており、後に発行された他者の文献は皆この方法を踏襲している。この方法では、各サブバンド毎にラグランジェの未定乗数λに相当するディストーションスロープ(Δ量子化誤差/Δ符号量)を同じ値にすることにより、量子化誤差を最小にできる。
あるサブバンドsbにおける逆ウェーブレット変換のエネルギーゲイン(以下サブバンドゲインと呼ぶ)をGsbとし、当該サブバンドに適用する量子化ステップ数をΔsbとする。量子化誤差に関するいくつかの近似を経ると、ディストーションスロープは最終的に「Gsb・Δsb^2」の定数倍として与えられ、この値が各サブバンドで同一の場合に所定符号量下で量子化誤差が最小になる(非特許文献1〜4)。
よって、PSNRを最大にするために、当該サブバンドに対して適用すべき量子化ステップ数は、式(1)で与えられる。ここでrは、所望符号量で決まる定数であり、代表値は1である。そして本実施形態でもこの代表値1が採用されていることを想定している。
次に、サブバンドゲイン算出法のサブバンドゲインについて説明する。正規直交変換でない周波数変換の逆変換においては、周波数帯域すなわちサブバンドごとに「変換係数値が信号値に逆変換された場合の倍率」が異なり、この倍率の二乗をサブバンドゲインという。量子化によって変換係数に生じた誤差△eは、信号への逆変換によってサブバンドゲインの平方根倍され、式(2)となる。
以下、簡単のため5×3ウェーブレットを例にとって説明する。xを座標値とした場合、JPEG2000のウェーブレット逆変換は、インターリーブされた係数C(x)の配列に対して、まず水平方向にxが偶数(x=2i)の係数を中心に逆ローパスフィルタを施し、次にxが奇数(x=2i+1)の係数を中心に逆ハイパスフィルタを施す。ここで逆ローパスフィルタ、逆ハイパスフィルタは、順に次式(3)、(4)で表される。
式(5)、(6)のフロア関数をとると、次の近似式を得る。
また、式(5)、(6)から下の5つの式を得る。
今、奇数位置のハイパス係数C(2i+1)に量子化誤差1が生じた場合、上記の式(7)〜(11)の5つの式は、該誤差がP(2i−1)からP(2i+3)の5画素に影響を及ぼすことを示す。
これら5つの誤差が独立であると仮定すると、該5画素に生じる誤差の二乗和の平方根は、以下の式(12)である。
つまり、ハイパス係数の誤差1が、画素値のエラー0.85に変換されるのである。ここで、−1/8、−1/4、3/4、−1/4、−1/8は正変換時のローパスフィルタの定数であり、一般にこれらの二乗和が逆ハイパスフィルタ1回分のサブバンドゲインGHを与える。
同様に、偶数位置のローパス係数C(2i)に量子化誤差1が生じた場合、上記の式(7)〜(11)の5つの式は、該誤差がP(2i−1)からP(2i+1)の3画素に影響を及ぼすことを示す。よって該3画素に生じる誤差の二乗和の平方根は、式(13)であり、一般に正変換時のハイパスフィルタの定数の二乗和が、逆ローパスフィルタ1回分のサブバンドゲインGLを与える。
また、水平方向に逆変換Aを施した後、さらに水平方向に逆変換Bを施した場合のサブバンドゲインは、逆変換a、Bのサブバンドゲインの積となる。つまりHL係数のサブバンドゲインはGH・GLである。
同様に、デコンポジションレベルnからn−1に逆変換を行う場合、例えば(n−1)HL係数のサブバンドゲインは、nLL係数のサブバンドゲインにHL係数のサブバンドゲインを乗じたものになる。
よって、一般にサブバンドゲインは、以下で与えられる。
nLL係数は、(GL^2)^nで、
nHL係数、nLH係数は、(GL・GH)・(GL^(n−1))で、
nHH係数は、(GH^2)・(GL^(n−1))となる。
以下に、5×3、9×7のデコンポジションレベル5までのサブバンドゲインの平方根を表1および表2に示す。表1は5×3逆ウェーブレット変換のサブバンドゲインの平方根を表す。表2は9×7逆ウェーブレット変換のサブバンドゲインの平方根を表す。
また、サブバンドごとの量子化ステップ数を、式(14)にするということは、線形量子化後のトランケーションによって生じる誤差の信号値への倍率を、サブバンド毎に等しくすることを意味する。よって、JPEG2000における線形量子化は、実は正規化である。
以上のように、ウェーブレット変換を決めれば、サブバンドゲインは一意の定数として算出され、その定数をもとに量子化ステップ数が決定される。前記rの代表値が1である実情を考慮すれば、JPEG2000における量子化ステップ数は、ほぼ定数として扱えることがわかる。
カラー画像の場合のPSNRを最大にする量子化ステップ数について説明する。カラーの場合は、サブバンドゲインGsbに逆コンポ−ネント変換のゲインGctを加味する必要があり、PSNRを最大にする量子化ステップ数は、式(15)で与えられる。ここでGctはサブバンドによらず一定であり、sは(1.1)類似の定数であるが、輝度YのゲインをGctYとしたときに、式(16)とするのが通常である。同様に、色差CbのゲインをGctCb、色差CrのゲインをGctCrとする。つまり、カラー画像の場合でも、輝度に対する量子化ステップ数はモノクロ画像の場合と同じ値を用いるようにし、Cb、Crに関しては、式(17)に対する式(18)、式(19)の比で換算するのである。
非可逆色変換(Irreversible Component Transform、ICT)の逆変換のゲインについて説明する。まず、逆ICTは以下の式で与えられ、非可逆9×7ウェーブレットの逆変換と同時に用いられる。一方、逆RCTは可逆5×3ウェーブレットの逆変換と同時に用いられる。
表3は逆ICTの定義を表す。上記の表3の式から、例えば色差Cbに単位量子化誤差が生じた場合、逆ICTによってRGB値に生じる量子化誤差の二乗和の平方根は、以下の式20で与えられる。
よって、下の表4が得られる。表4は逆ICTのゲインの平方根を表す。
上記を基に、各サブバンドのビット深さを考えると、線形量子化により、ビット数は増えるが、ビットプレーン化のため係数が整数化されるので、小数部分を係数バッファに格納する必要はなくなる。量子化で増加するビット数はLL5bit、HL4bit、LH4bit、HH3bitであり、量子化後の最大ビット数はLL14bit、HL14bit、LH14bit、HH14bitである。
すなわち、デコード時、復号化前の入力されてくる係数バッファの最大ビット数は、LL14bit、HL14bit、LH14bit、HH14bitとなる。結果的に全てのサブバンドについて、原画像が8bitの場合、係数バッファを16bit確保するため、上位2ビットが空く。これは、固定小数演算と正規化目的の量子化という特殊事情による結果である。
量子化後のこれらの上位ビットが、通常空いたままである理由としては、通常のデータ型(8,16,32,64bit)以外で扱う場合は、1つの係数にアクセスする度にビット単位での操作を伴うため、高速化に反し、バッファを小さくすることはできないためである。ここで、リコンストラクションを考えると、フラグが必要であるが、フラグ用にメモリを保持するのは不経済である。
次に本実施形態について図を用いて詳細に説明する。
<第1の実施形態の構成>
図1は、JPEG2000を用いた従来の画像復号化装置の構成を示すブロック図である。この装置は、符号データ入力手段1、ヘッダ解析手段2、エントロピ復号化手段3、スカラ逆量子化手段4、逆ウェーブレット変換手段5、カラー変換手段6、DCレベルシフト手段7、及び画像データ出力手段8を備えている。なお、これらのうち、スカラ逆量子化手段4、カラー変換手段6、及びDCレベルシフト手段7はJPEG2000においてはオプションとして備えられたものである。JPEG2000では、その他にもオプションとして備えられたものがあるが、本実施形態とは直接的な関連性がないか、あっても重要度が低いため説明は省略している。
次に、図1の動作について説明する。まず、JPEG2000の規格にしたがって圧縮符号化された画像データは、ファイルシステムやネットワーク手段を用いて符号データ入力手段1によって入力される。この画像データには、メインヘッダ、及びタイルヘッダが付されており、ヘッダ解析手段2はこれらのヘッダを読み込み、解析する。ここで、メインヘッダには、画像の大きさ、タイルの大きさ、画像位置のオフセット、タイル位置のオフセット、1画素あたりのサンプルビット数、RGBなどのコンポーネント数等についての情報が格納されている。また、タイルヘッダには、タイル番号、タイルの大きさ等が格納され、符号化スタイルや量子化スタイルなどを指定することができる。
エントロピ復号化手段3は、ヘッダ解析手段2の解析結果を用いて、圧縮符号化された画像データのエントロピ復号化を行い、出力されるビット列からスカラ量子化した係数列を作成する。
スカラ逆量子化手段4は、ヘッダ解析手段2で解析されたメインヘッダ及びタイルヘッダにより指定された量子化スタイルに基づき、エントロピ復号化手段3で作成された係数列をJPEG2000の規格にある所定の計算式で逆量子化し、ウェーブレット係数を生成する。なお、符号化時にはウェーブレット変換により生成されたウェーブレット係数は必ずしも量子化されるとは限らず、その場合にはスカラ逆量子化手段4による逆量子化は行われないことになる。
逆ウェーブレット変換手段5は、スカラ逆量子化手段4で得られたウェーブレット係数をメインヘッダ又はタイルヘッダで指定された符号化スタイルの分解数に基づき逆ウェーブレット変換を行い、YUVカラー空間の画像データを作成する。
カラー変換手段6は、逆ウェーブレット変換手段5で得られた画像データをヘッダ解析手段2の解析結果にしたがってYUV成分からRGB成分へカラー変換する。但し、モノクロ画像の符号データや、符号化時にカラー変換を行わなかった場合、カラー変換手段6は動作しない。
DCレベルシフト手段7は、カラー変換手段6で得られたRGB成分の各値のDCレベルをシフトする。DCレベルシフトとは、符号化時にダイナミックレンジが値0を中心とするようにシフトすることであり、復号化時にはそれを元に戻すことである。例えば、或る入力画像データが8ビットで表されているとすると、このデータは0〜255のうちのいずれかの値となるが、DCレベルシフトすることにより、このデータの値を、0を中心として−128〜127の値にすることができる。このように、DCレベルシフトを行う理由は、周波数変換後の係数は正負の符号と絶対値とに分けられて符号化されるため、ゼロ値を基準としてデータ配置されている方が、符号化効率が高くなるからである。画像データ出力手段8は、DCレベルシフト手段7で得られた画像を出力する手段である。
なお、JPEG2000ではウェーブレット変換され、係数ビットモデリングされた後の画像データに対して「ポスト量子化」(「トランケーション」と呼ばれることもある)と呼ばれるデータ切り捨て処理が行われる。しかし、常に行われるわけではない。
図2は、このポスト量子化についての説明図である。この図に示されているのは、ある1つのコードブロックに含まれている一部のビットプレーン化されたウェーブレット係数である。そして、JPEG2000の規格に基づくパケットヘッダ情報と呼ばれるヘッダ情報には、このウェーブレット係数のビット数、ゼロビットプレーン数、処理パス数等のデータが格納されている。
JPEG2000では、ポスト量子化により符号量が削減され効率的な画像圧縮が行われるようになっている。しかし、ポスト量子化が行われると、切り捨てポイントより下位ビットデータは全て一律に0値となってしまうため、これをそのまま復号して再生すると再生画像には違和感や不明瞭のある部分が含まれ、画質劣化となることがある。そこで、切り捨てポイントよりも下位ビットデータへの任意rの加算を行うことにより、復号処理の画質劣化の抑制となる。従来、任意rの加算が行われるポイントとしては、ビットプレーン単位での切り捨てポイントによって行われている。しかし、切り捨てポイントが各パス単位であった場合、切り捨てポイントとなるビットプレーンの判断ができない。
そこで、本発明は、切り捨てポイントとなるビットプレーンを正確に判断し、そのビットプレーンを用いた切り捨てポイントよりも下位ビットデータへの任意rの加算値により、復号処理の画質劣化の抑制となり、また、任意rの加算処理を最小限にすることにより、高速な処理方法となる。
図1の動作の詳細な流れを説明する。ヘッダ解析手段2は、CODマーカの解読により、パケットデータの先頭アドレスを特定する。特定されたパケットデータの先頭アドレスをもとに、最初の符号化パスの符号化データCDを取り出し、Sパス、Rパス、Cパスの各符号化ストリームを順次、エントロピ復号化手段3に出力する。エントロピ復号化手段3は、符号化データCDとコンテクストラベルCXを入力として受け取り、入力されてくるパスの順に各パスを順次復号処理する。エントロピ復号化手段3から出力されるデシジョンDをスカラ逆量子化手段4に出力する。
コンテクストラベルCXは、JPEG2000における復号時の係数ビットモデリング処理を行うことにより決定するものである。復号時の係数ビットモデリング処理は、エントロピ復号化手段3による復号結果を利用して周辺情報を更新しながら、算術復号の際に必要となるコンテクストを決定する処理である。以下、図3〜図10を参照して、復号時の係数ビットモデリング処理を説明する。
ヘッダ解析手段2により符号化ストリームから抽出されたサブバンド画像はコードブロックと呼ばれる小領域に分割され、コードブロックが復号処理単位となる。サブバンド画像は、原画像のx、yの両方向において低周波成分を有するLLサブバンド、x、yのいずれかひとつの方向において低周波成分を有し、かつもう一方の方向において高周波成分を有するHLおよびLHサブバンド、x、yの両方向において高周波成分を有するHHサブバンドのいずれかである。
コードブロックのサイズは、高さと幅が22〜210の範囲にある2のべき乗の整数値であり、高さと幅の指数の和は12以下であることが規格において定められている。
図3は、コードブロックをビット毎にスライスして形成されたビットプレーンを説明する図である。コードブロックのビットプレーンは、ウェーブレット変換係数の量子化値の正負の符号を格納したSignプレーンと、ウェーブレット変換係数の量子化値の絶対値を与えるMSBからLSBまでの複数のプレーンとから構成される。エントロピ復号化手段3は、上位ビットから順にビットプレーンを選択し、ビットプレーン単位でビットプレーン上で各係数の復号処理を行う。
図4は、ビットプレーン上の係数を復号する際の走査順序を説明する図である。ビットプレーンは、縦4ピクセルのストライプに分割され、ストライプ単位で走査されて復号される。各ストライプの横幅はコードブロックの横幅であり、本例では32ピクセルである。ストライプの本数は、合計で8本となる。
各ストライプにおいて、矢印で示すように最初の列の縦4ピクセルを上から順に走査して1ピクセルずつ復号処理を進め、次に2番目の列の縦4ピクセルを同じ向きに走査し、これを最後の列まで繰り返す。ストライプの終端まで復号処理が終わると、次のストライプの先頭の係数から同じように走査して復号処理を進め、コードブロックの最後の行まで繰り返す。なお、係数の正負の符号を格納したSignプレーンの復号は、係数の絶対値部分に相当するプレーンを復号する際に適宜行われる。
コードブロック内の各係数は、有意であるか、有意でないかの2つの状態で識別される。有意である場合は1、有意でない場合は0を割り当て、各係数の有意性状態を2値で識別する。復号開始時は、コードブロック内のすべての係数は有意でない。
ここで、係数が有意であるとは、着目しているウェーブレット変換係数の量子化値が、これまでの復号処理の結果から'0'ではないとわかっている状態をいう。言い換えれば、上位ビットプレーンから順次ストライプ単位で走査しながら復号していく中で、'1'であるビットが発見されているウェーブレット変換係数の状態をいう。また、係数が有意でないとは、着目しているウェーブレット変換係数の量子化値が'0'であるか、あるいは'0'である可能性が残っている状態をいう。言い換えれば、上位ビットプレーンから順次復号していく中で、'1'であるビットが未だ発見されていないウェーブレット変換係数の状態をいう。
係数ビットモデリング処理では、ビットプレーン上の係数の周囲にある係数の有意性状態にもとづいて各係数ビット毎にコンテクストが決定される。
図5は、ビットプレーン上の復号対象の係数X(以下、現係数Xという)の周囲に隣接する8個の近傍係数を説明する図である。8個の近傍係数は、現係数Xに対して水平方向に隣接する2つの係数h0、h1と、垂直方向に隣接する2つの係数v0、v1と、斜め方向に隣接する4つの係数d0〜d3とからなる。
図5の8個の近傍係数はそれぞれ有意であるか、有意でないかの2つの状態をとりうるため、現係数Xに対して、組み合わせとしては256個のコンテクストがありうるが、JPEG2000では、対称性などを利用して、19種類のコンテクストに集約されており、これらのコンテクストは0〜18のラベルをつけて識別される。なお、いずれかの近傍係数が処理中のコードブロックの外部に位置する場合は、その近傍係数は有意でないとみなして処理する。
ビットプレーン内の各係数ビットは、Sパス(significance propagation pass)、Rパス(magnitude refinement pass)、Cパス(cleanup pass)の3種類の処理パスのうちのいずれかにもとづいて復号される。1つのビットプレーンは3種類の処理パスとして3つのサブビットプレーンに分割されている。Sパスでは、有意である係数が周囲に存在する有意でない係数の復号が行われ、Rパスでは、有意である係数の復号が行われ、Cパスでは、残りの係数の復号が行われる。
Sパス、Rパス、Cパスの各処理パスはこの順に画像の画質への寄与度が大きい。各処理パスはこの順に実行され、各係数のコンテクストが近傍係数の情報を考慮して決定される。以下、各処理パスにおける具体的な処理手順を説明する。最初にSパス処理を説明する。
ビットプレーンの各ストライプにおける走査において、現係数Xが有意でない状態であり、かつその現係数Xに隣接する8個の近傍係数の内、少なくとも1つの近傍係数が有意である場合、現係数XはSパスの処理対象として選ばれる。それ以外の場合は、Sパスの処理対象とはならない。Sパスで復号対象となる係数は、そのビットプレーンにおいて最も有意になる可能性が高い係数である。
係数ビットモデリング処理では、現係数Xに対して、水平方向の2つの近傍係数h0,h1の内、有意である係数の数を与えるΣhi(=h0+h1)と、垂直方向の2つの近傍係数v0,v1の内、有意である係数の数を与えるΣvi(=v1+v2)と、斜め方向の4つの近傍係数d0,d1,d2,d3の内、有意である係数の数を与えるΣdi(=d1+d2+d3+d4)とを求める。
図6は、Sパスにおけるコンテクストの分類テーブルを説明する図である。このコンテクストテーブルは、処理中のコードブロックが、LH/LLサブバンド、HLサブバンド、HHサブバンドのいずれに属しているかによって、水平、垂直、斜め方向の有意である近傍係数の数Σhi,Σvi,Σdiの組み合わせと、0〜8のラベルで識別される9種類のコンテクストラベルCXとを対応づけたものである。コンテクスト推定部22は、このコンテクストの分類テーブルを参照し、サブバンドの周波数成分の方向性と有意である近傍係数の数Σhi,Σvi,Σdiの組み合わせにしたがって、Sパスで処理する係数を9種類のコンテクストのいずれかに分類し、該当するコンテクストラベルCXを出力する。
また、Sパスでは、現係数Xのビットの値が'1'であった場合、現係数Xの有意性状態を「有意でない」から「有意である」に変更する。現係数Xが有意になった場合、引き続き、その現係数Xの正負を示す極性ビットを復号する。
極性ビットに対するコンテクストは、垂直方向の2つの近傍係数v0,v1および水平方向の2つの近傍係数h0,h1の有意性状態および正負の極性値にもとづいて次の2段階で決定される。
図7は、極性ビットのコンテクスト決定のための垂直指標および水平指標テーブルを説明する図である。コンテクスト推定部22は、まず、2つの垂直方向の近傍係数v0、v1のそれぞれが正の有意である係数であるか、負の有意である係数であるか、有意でない係数であるかを判定し、図7のテーブルを参照して、垂直指標vに'0'、'1'、'−1'のいずれかの値を割り当てる。同様にして、水平方向の近傍係数h0、h1に対しても図7のテーブルを参照して、水平指標hに'0'、'1'、'−1'のいずれかの値を割り当てる。
図8は、水平指標hと垂直指標vの組み合わせと、9〜13のラベルで識別される5種類の極性ビットに対するコンテクストラベルCXとを対応づけたテーブルである。係数ビットモデリング処理では、図8のテーブルを参照して、求めた水平指標hと垂直指標vの値の組み合わせによって極性ビットを5種類のコンテクストのいずれかに分類し、該当するコンテクストラベルCXを出力する。
次にRパス処理を説明する。現係数Xがすでに有意であると判定されている場合、現係数Xは処理中のビットプレーンにおいてRパスの処理対象となる。ただし、そのビットプレーンにおいて、直前のSパスで有意である状態に変化した係数は処理対象としない。Rパスの復号処理は、Sパスで復号された係数の精度を上げる役割をもつ。
図9は、Rパスにおけるコンテクストの分類テーブルを示す図である。Rパスでは、係数ビットモデリング処理では、現係数Xに対する8つの近傍係数により、有意である係数の数を示すΣhi+Σvi+Σdiの値を求め、さらに、現係数Xが1つ上のビットプレーンで有意になったかどうか、言い換えれば、当該Rパスは、現係数Xが有意でない状態から有意である状態に変化した後の最初のパスであるかどうかを判定し、これらの結果にもとづいて、同図に示すように、14〜16のラベルで識別される3種類のコンテクストに分類し、該当するコンテクストラベルCXを出力する。
最後にCパス処理を説明する。Cパスは、現係数XがSパス、Rパスのいずれの処理対象にも該当しない場合に用いられる。Cパスでは、ランレングス復号か、Sパスのように8つの近傍係数の値を参照した復号処理を行う。Cパスでは、ランレングス復号を行うかどうかを判断しながら処理を進める。
図10は、Cパスにおけるコンテクストの分類テーブルを示す図である。Cパスでは、垂直方向に連続する4つの係数が全て有意でない、すなわちストライプ内の縦1列がすべてCパスに属しており、かつ、その4つのすべての係数に対する8個の近傍係数にも有意である係数が存在しないという条件の正否を判断する。この条件に該当する場合、ランレングスモードで復号処理を行い、コンテクストラベルCXは17である。この条件に該当しない場合、垂直方向に連続する4つの係数値の中に少なくとも1つの有意である係数が存在するため、最初に有意になる係数の位置はUNIFORMコンテクストを用い、このときのコンテクストラベルCXは18である。残りのすべての係数に対してはSパスと同様の処理を行う。
以上述べたように、係数ビットモデリング処理において、3つのいずれかの処理パスを用いて、ビットプレーン上の各係数のコンテクストラベルCXが決定される。そして、コンテクストラベルCXをエントロピ復号化手段3へ与える。
図19は、本実施形態に係る装置構成の例を示した図である。データバスを介して、HDD、RAM(PC内)、CPU(PC内)が接続されており、以下の流れで、原符号が伸張・色変換される。もしくは、伸張後のデータが色変換される。
SP1:HDD上に記録されたオリジナルの符号データもしくは伸張後のデータが、CPUからの命令によってRAM上に読み込まれる。
SP2:CPUはRAM上の符号を読み込み、伸張・色変換を行う。もしくは、CPUはRAM上の伸張後のデータを読み込み、色変換を行う。
SP3:CPUは、伸張・色変換後のデータや色変換後のデータをRAM上の別の領域に書き込む。
SP4:CPUからの命令によって、伸張・色変換後のデータや色変換後のデータがHDD上に記録される。
ここで、処理による格納する係数バッファのbit数について上記にも記述してあるが、簡単に記述する。エンコード時、入力される原画像8bitであり、9×7ウェーブレット係数のbit構成について考える。9×7ウェーブレット係数は実数であるため、整数部分と小数部分の両方を係数バッファに格納する必要がある。ウェーブレット変換で増加するbit数はLL1bit、HL2bit、LH2bit、HH3bitである。よって、ウェーブレット変換後の最大bit数はLL9bit、HL10bit、LH10bit、HH11bitである。
次に、同じ係数バッファに、線形量子化後の係数を格納することを考える。線形量子化でbit数は増えるが、ビットプレーン化のため係数が整数化されるので、小数部分を係数バッファに格納する必要はなくなる。量子化で増加するbit数はLL5bit、HL4bit、LH4bit、HH3bitである。よって、量子化後の最大bit数はLL14bit、HL14bit、LH14bit、HH14bitである。
すなわち、デコード時、復号化前の入力されてくる係数バッファの最大bit数は、LL14bit、HL14bit、LH14bit、HH14bitとなる。原画像が8bitの場合、係数バッファを16bit確保するため、バッファに2bitの空ビットを作成することができる。その空ビットを使用することにより、小数点以下のrを加算することができる。詳細な処理方法については、フローチャートを用い、後述する。
その空ビットを使用することにより、小数点以下のrを加算することができる。詳細な処理方法については、フローチャートを用い、後述する。
ここで、入力されてくるパスの順に各パスを順次復号処理するエントロピ復号化手段3についての流れを図11のフローチャートにそって説明する。
図15は、符号データがサブビットプレーン分割された状態を示している。これは、03→15→24・・・、の符号データが順次並んでいる場合について、サブビットプレーン数を9捨て、残りのサブビットプレーン数が4のときを示している。ここで、残サブビットプレーン数とは、符号化パスによって復号処理対象となる残りのサブビットプレーン数のことである。03→15→24・・・、のように順次符号データにおける符号化パスが入力され、各々下記の流れで処理される。例えば、03はCパス、Cパス、15はCパス、Sパス、24はCパス、Rパスのような順に符号化パスが入っていて、順次に符号化パスが入力されてくる。
ここでは、残サブビットプレーン数が4つのときについてである。入力された符号データ(ここでは、03)の残サブビットプレーン数≦3であるかの判定をする(ステップS1101)。残サブビットプレーン数≦3である場合(ステップS1101、YES)、Cパスの復号処理し、r値を加算する(ステップS1102)。残サブビットプレーン数≦3でない場合(ステップS1101、NO)、Cパスの復号処理をする(ステップS1103)。ここでは、残サブビットプレーン数≦3(残サブビットプレーン数=4)でないため、Cパスの復号処理をする。Cパスの復号処理を行ったため、残サブビットプレーン数は3となった。
次に、残サブビットプレーン数>0であるかを判定する(ステップS1104)。残サブビットプレーン数>0である場合(ステップS1104、YES)、次の符号データがSパスであるかの判定をする(ステップS1105)。残サブビットプレーン数>0でない場合(ステップS1104、NO)、終了する。ここでは、残サブビットプレーン数>0(残サブビットプレーン数=3)であるため、次の符号データがSパスであるかの判定をする(ステップS1105)。Sパスである場合、残サブビットプレーン数≦3であるかの判定をする(ステップS1106)。残サブビットプレーン数≦3である場合(ステップS1105、YES)、Sパスの復号処理し、r値を加算する(ステップS1107)。残サブビットプレーン数≦3でない場合、Sパスの復号処理をする(ステップS1108)。Sパスでない場合(ステップS1105、NO)、残サブビットプレーン数>0であるかの判定に移る(ステップS1109)。ここでは、Sパスでないため、残サブビットプレーン数>0であるかの判定に移る。ここで、残サブビットプレーン数は2となった。
次に、残サブビットプレーン数>0であるかを判定する(ステップS1109)。残サブビットプレーン数>0であるとき(ステップS1109、YES)、次の符号データがRパスであるかの判定をする(ステップS1110)。残サブビットプレーン数>0でないとき(ステップS1109、NO)、終了する(ステップS1119)。ここでは、残サブビットプレーン数>0(残サブビットプレーン数=2)であるため、次の符号データがRパスであるかの判定をする(ステップS1110)。Rパスである場合(ステップS1110、YES)、残サブビットプレーン数≦3であるかの判定をする(ステップS1111)。残サブビットプレーン数≦3である場合(ステップS1111、YES)、Rパスの復号処理し、r値を加算する(ステップS1112)。残サブビットプレーン数≦3でない場合(ステップS1111、NO)、Rパスの復号処理をする(ステップS1113)。
Rパスでない場合(ステップS1110、NO)、残サブビットプレーン数>0であるかの判定に移る(ステップS1114)。ここでは、Rパスでないため、残サブビットプレーン数>0であるかの判定に移る。ここで、残サブビットプレーン数は1となった。次に、残サブビットプレーン数>0であるかを判定する(ステップS1114)。残サブビットプレーン数>0であるとき(ステップS1114、YES)、次の符号データがCパスであるかの判定をする(ステップS1115)。残サブビットプレーン数>0でないとき、終了する(S1119)。ここでは、残サブビットプレーン数>0(残サブビットプレーン数=1)であるため、次の符号データがCパスであるかの判定をする(ステップS1115)。
Cパスである場合(ステップS1115、YES)、残サブビットプレーン数≦3であるかの判定をする(ステップS1116)。残サブビットプレーン数≦3である場合(ステップS1116、YES)、Cパスの復号処理し、r値を加算する(ステップS1117)。残サブビットプレーン数≦3でない場合(ステップS1116、NO)、Cパスの復号処理をする(ステップS1118)。Cパスでない場合(ステップS1115、NO)、残サブビットプレーン数>0であるかの判定に移る(ステップS1104)。ここでは、Cパスであるため、残サブビットプレーン数≦3であるかの判定をする(ステップS1116)。残サブビットプレーン数≦3(残サブビットプレーン数=1)であるため(ステップS1116、YES)、Cパスの復号処理をし、r値を加算する(ステップS1117)。Cパスの復号処理を行ったため、残サブビットプレーン数は0となった。
ここで、r値の加算方法について説明する。加算値rは、任意0<r<1である。rを1/2とした場合、処理対象である最下位ビットプレーンにr・2^(ビットプレーン数−復号化されたビットプレーン数)を加算する。実際は下記の値を加算することになる。
加算値=r・2^(ビットプレーン数−復号化されたビットプレーン数)
=1/2・2^(5−2)
=4
なお、復号値が0のときは、加算しないものとする。ここでは、復号値が0なので加算しない。
次に、残サブビットプレーン数>0であるかを判定する(ステップS1104)。残サブビットプレーン数>0であるとき(ステップS1104、YES)、次の符号データがSパスであるかの判定をする(ステップS1105)。残サブビットプレーン数>0でないとき(ステップS1104、NO)、終了する(ステップS1119)。ここでは、残サブビットプレーン数>0(残サブビットプレーン数=0)でないため、終了する。
最初の符号化データ(ここでは03)が終了したら、次の符号化データ(ここでは15)の処理を上記同様に行う。上記同様、初めの残サブビットプレーン数は4である。入力された符号データ(ここでは、15)の残サブビットプレーン数≦3であるかの判定をする(ステップS1101)。ここでは、残サブビットプレーン数≦3(残サブビットプレーン数=4)でないため(ステップS1101、NO)、Cパスの復号処理をする(ステップS1103)。Cパスの復号処理を行ったため、残サブビットプレーン数は3となった。
次に、残サブビットプレーン数>0であるかを判定する(ステップS1104)。ここでは、残サブビットプレーン数>0(残サブビットプレーン数=3)であるため(ステップS1104、YES)、次の符号データがSパスであるかの判定をする(ステップS1105)。Sパスである場合(ステップS1105、YES)、残サブビットプレーン数≦3であるかの判定をする(ステップS1106)。ここでは、残サブビットプレーン数≦3であるため(ステップS1106、YES)、Sパスの復号処理し、r値を加算する(ステップS1107)。Sパスの復号処理を行ったため、残サブビットプレーン数は2となった。
ここで、r値の加算方法について説明する。加算値rは、任意0<r<1である。rを1/2とした場合、処理対象である最下位ビットプレーンにr・2^(ビットプレーン数−復号化されたビットプレーン数)を加算する。実際は下記の値を加算することになる。
加算値=r・2^(ビットプレーン数−復号化されたビットプレーン数)
=1/2・2^(5−2)
=4
なお、復号値が0のときは、加算しないものとする。
ここで、加算する前に、最下位ビットプレーンより下のビットプレーンにビットが存在するかの判定をし、存在しているときには、そのビットを減算した後に上記加算値を加算する。ここでは、01000であり、最下位ビットプレーンより下のビットプレーンにビットが存在しない(000である)ので、減算をせず、そのまま加算することになる。よって、加算前は01000となっていて、加算後は01100となる。
次に、残サブビットプレーン数>0であるかを判定する(S1109)。ここでは、残サブビットプレーン数>0(残サブビットプレーン数=2)であるため(ステップS1109、YES)、次の符号データがRパスであるかの判定をする(ステップS1110)。ここでは、Rパスでないため、残サブビットプレーン数>0であるかの判定に移る。ここで、残サブビットプレーン数は1となった。
次に、残サブビットプレーン数>0であるかを判定する(ステップS1114)。ここでは、残サブビットプレーン数>0(残サブビットプレーン数=1)であるため(ステップS1114、YES)、次の符号データがCパスであるかの判定をする(ステップS1115)。ここでは、Cパスでないため、残サブビットプレーン数>0であるかの判定に移る(ステップS1104)。ここで、残サブビットプレーン数は0となった。次に、残サブビットプレーン数>0であるかを判定する(ステップS1104)。ここでは、残サブビットプレーン数>0(残サブビットプレーン数=0)であるため、終了する(ステップS1119)。
2番目の符号化データ(ここでは15)が終了したら、次の符号化データ(ここでは24)の処理を上記同様に行う。入力対象となる全符号化データが終了するまで処理を行う。
ここで、図13のような符号データがサブビットプレーン分割された状態のときについて記述する。これは、01→07→12・・・、の符号データが順次並んでいる場合について、サブビットプレーン数を2捨て、残りのサブビットプレーン数が8のときを示している。ここで、残サブビットプレーン数とは、符号化パスによって復号処理対象となる残りのサブビットプレーン数のことである。01→07→12・・・、のように順次符号データにおける符号化パスが入力され、各々下記の流れで処理される。例えば、01はCパス、Cパス、Sパス、Sパス、07はCパス、Sパス、Rパス、12はCパス、Rパス、Rパス、のような順に符号化パスが入っていて、順次に符号化パスが入力されてくる。
ここでは、残サブビットプレーン数が8つのときについてである。
入力された符号データ(ここでは、03)の残サブビットプレーン数≦3であるかの判定をする(S1101)。残サブビットプレーン数≦3である場合(ステップS1101、YES)、Cパスの復号処理し、r値を加算する(ステップS1102)。残サブビットプレーン数≦3でない場合(ステップS1101、NO)、Cパスの復号処理をする(ステップS1103)。ここでは、残サブビットプレーン数≦3(残サブビットプレーン数=8)でないため、Cパスの復号処理をする。Cパスの復号処理を行ったため、残サブビットプレーン数は7となった。
次に、残サブビットプレーン数>0であるかを判定する(ステップS1104)。残サブビットプレーン数>0である場合(ステップS1105、YES)、次の符号データがSパスであるかの判定をする(ステップS1105)。残サブビットプレーン数>0でない場合、終了する(ステップS1119)。ここでは、残サブビットプレーン数>0(残サブビットプレーン数=7)であるため、次の符号データがSパスであるかの判定をする(ステップS1105)。Sパスである場合(ステップS1105、YES)、残サブビットプレーン数≦3であるかの判定をする(ステップS1106)。
残サブビットプレーン数≦3である場合(ステップS1106、YES)、Sパスの復号処理し、r値を加算する(ステップS1107)。残サブビットプレーン数≦3でない場合(ステップS1106、NO)、Sパスの復号処理する(ステップS1108)。Sパスでない場合(ステップS1105、NO)、残サブビットプレーン数>0であるかの判定に移る(ステップS1109)。ここでは、Sパスでないため、残サブビットプレーン数>0であるかの判定に移る。ここで、残サブビットプレーン数は6となった。
次に、残サブビットプレーン数>0であるかを判定する(ステップS1109)。残サブビットプレーン数>0であるとき(ステップS1109、YES)、次の符号データがRパスであるかの判定をする(ステップS1110)。残サブビットプレーン数>0でないとき、終了する(ステップS1119)。ここでは、残サブビットプレーン数>0(残サブビットプレーン数=6)であるため(ステップS1109、YES)、次の符号データがRパスであるかの判定をする(ステップS1110)。Rパスである場合(ステップS1110、YES)、残サブビットプレーン数≦3であるかの判定をする(ステップS1111)。
残サブビットプレーン数≦3である場合(ステップS1111、YES)、Rパスの復号処理し、r値を加算する(ステップS1112)。残サブビットプレーン数≦3でない場合(ステップS1111、NO)、Rパスの復号処理をする(ステップS1113)。Rパスでない場合(ステップS1110、NO)、残サブビットプレーン数>0であるかの判定に移る(ステップS1114)。ここでは、Rパスでないため、残サブビットプレーン数>0であるかの判定に移る。ここで、残サブビットプレーン数は5となった。
次に、残サブビットプレーン数>0であるかを判定する(ステップS1114)。残サブビットプレーン数>0であるとき(ステップS1114、YES)、次の符号データがCパスであるかの判定をする(ステップS1115)。残サブビットプレーン数>0でないとき(ステップS1114、NO)、終了する(ステップS1119)。ここでは、残サブビットプレーン数>0(残サブビットプレーン数=5)であるため(ステップS1114、YES)、次の符号データがCパスであるかの判定をする(ステップS1115)。
Cパスである場合(ステップS1115、YES)、残サブビットプレーン数≦3であるかの判定をする(ステップS1116)。
残サブビットプレーン数≦3である場合(ステップS1116、YES)、Cパスの復号処理し、r値を加算する(ステップS1117)。残サブビットプレーン数≦3でない場合(ステップS1116、NO)、Cパスの復号処理をする(ステップS1118)。Cパスでない場合(ステップS1115、NO)、残サブビットプレーン数>0であるかの判定に移る(ステップS1104)。
ここでは、Cパスであるため、残サブビットプレーン数≦3であるかの判定をする(ステップS1116)。残サブビットプレーン数≦3(残サブビットプレーン数=5)であるため(ステップS1116、YES)、Cパスの復号処理をする(ステップS1117)。Cパスの復号処理を行ったため、残サブビットプレーン数は4となった。
上記処理を残サブビットプレーン数が0となるまで、繰り返す。S,R,Cパスと繰り返し行い、残サブビットプレーン数が1となった場合について記述する。
残サブビットプレーン数>0であるかを判定する(ステップS1104)。残サブビットプレーン数>0である場合(ステップS1104、YES)、次の符号データがSパスであるかの判定をする(ステップS1105)。残サブビットプレーン数>0でない場合、終了する(ステップS1119)。ここでは、残サブビットプレーン数>0(残サブビットプレーン数=1)であるため(ステップS1104、YES)、次の符号データがSパスであるかの判定をする(ステップS1105)。Sパスである場合(ステップS1105、YES)、残サブビットプレーン数≦3であるかの判定をする(ステップS1106)。
残サブビットプレーン数≦3である場合(ステップS1106、YES)、Sパスの復号処理し、r値を加算する(ステップS1107)。残サブビットプレーン数≦3でない場合、Sパスの復号処理する(ステップS1108)。Sパスでない場合(ステップS1105、NO)、残サブビットプレーン数>0であるかの判定に移る(ステップS1109)。ここでは、Sパスであるため(ステップS1105、YES)、残サブビットプレーン数≦3であるかの判定をする(ステップS1106)。残サブビットプレーン数≦3(残サブビットプレーン数=1)であるため、Sパスの復号処理を行い、r値加算を行う(ステップS1107)。Sパスの復号処理を行ったため、残サブビットプレーン数は0となった。
ここで、r値を加算した場合についての方法を説明する。加算値rは、任意0<r<1である。rを1/2とした場合、処理対象である最下位ビットプレーンに
r・2^(ビットプレーン数−復号化されたビットプレーン数)
を加算する。実際は下記の値を加算することになる。
加算値=r・2^(ビットプレーン数−復号化されたビットプレーン数)
=1/2・2^(4−4)
=0
なお、復号値が0のときは、加算しないものとする。
ここで、空ビットへのフラグ挿入についての流れを図17のフローチャートにそって説明する。ステップS1701の加算処理が必要かどうかの条件は、ビットプレーン=0、および加算値=0の場合である。図17のフローチャートは、上記記述中では省略していたが、図11のステップS1102、ステップS1107、ステップS1112、ステップS1117の各々パスでr値加算処理を行う処理中で行うことになる。
ビットプレーン=0、加算値=0であるため(ステップS1701、YES)、加算処理のために、空ビットへフラグ挿入(ステップS1702)の処理へと進む。そのため、符号データの空ビットにフラグをたてる。例えば、符号データの上位2bit目に1を入れる。次に、残サブビットプレーン数>0であるかを判定する(ステップS1114)。ここでは、残サブビットプレーン数>0(残サブビットプレーン数=0)であるため、終了する(ステップS1119)。最初の符号化データ(ここでは01)が終了したら、次の符号化データ(ここでは07)の処理を上記同様に行う。
空ビットのフラグを使用したr値の加算処理についての流れを図18のフローチャートにそって説明する。上記処理よりも後方の処理で、フラグの有無を判定(ステップS1801)し、フラグがあれば(ステップS1801、YES)、ビットプレーンが0以下、すなわち、小数点のr値を加算(ステップS1802)することができる。ここでは、r値が1/2であるため、1/2を加算すればよいことになる。
ここで、残サブビットプレーン数≦3としている理由について説明する。各々の符号化データは各々SRCパスのいずれかに存在する。そのため、最下位サブビットプレーンから上3つのサブビットプレーンに対して、加算処理することにより、最小限の加算処理となる。
よって、切り捨てポイントとなるビットプレーンを正確に判断し、そのビットプレーンを用いた切り捨てポイントよりも下位ビットデータへの任意rの加算値により、復号処理の画質劣化の抑制となり、また、残サブビットプレーン数により、加算する可能性にあるビットプレーンを推定し、加算処理を最低限必要なときのみ行うことができ、高速な処理方法となる。
<第2の実施形態の構成>
ここで、入力されてくるパスの順に各パスを順次復号処理するエントロピ復号化手段3についての流れを図12のフローチャートにそって説明する。
図14は、符号データがサブビットプレーン分割された状態を示している。これは、01→07→12・・・、の符号データが順次並んでいる場合について、サブビットプレーン数を2捨て、残りのサブビットプレーン数が8のときを示している。ここで、残サブビットプレーン数とは、符号化パスによって復号処理対象となる残りのサブビットプレーン数のことである。01→07→12・・・、のように順次符号データにおける符号化パスが入力され、各々下記の流れで処理される。例えば、01はCパス、Cパス、Sパス、Sパス、07はCパス、Sパス、Rパス、Rパス、12はCパス、Rパス、Rパス、Rパス、のような順に符号化パスが入っていて、順次に符号化パスが入力されてくる。
ここでは、残サブビットプレーン数が9のときについてである。入力された符号データ(ここでは、03)の残サブビットプレーン数≦3であるかの判定をする(ステップS1201)。残サブビットプレーン数≦3である場合(ステップS1201、YES)、Cパスの復号処理し、r値を加算する(ステップS1202)。残サブビットプレーン数≦3でない場合(ステップS1201、NO)、Cパスの復号処理をする(ステップS1203)。ここでは、残サブビットプレーン数≦3(残サブビットプレーン数=9)でないため(ステップS1201、NO)、Cパスの復号処理をする。Cパスの復号処理を行ったため、残サブビットプレーン数は8となった。
次に、残サブビットプレーン数>0であるかを判定する(ステップS1204)。残サブビットプレーン数>0である場合(ステップS1204、YES)、次の符号データがSパスであるかの判定をする(ステップS1205)。残サブビットプレーン数>0でない場合(ステップS1204、NO)、終了する(S1219)。ここでは、残サブビットプレーン数>0(残サブビットプレーン数=8)であるため、次の符号データがSパスであるかの判定をする(ステップS1205)。Sパスである場合(ステップS1205、YES)、残サブビットプレーン数≦4であるかの判定をする(ステップS1206)。
残サブビットプレーン数≦4である場合(ステップS1206、YES)、Sパスの復号処理し、r値を加算する(ステップS1207)。残サブビットプレーン数≦4でない場合(ステップS1206、NO)、Sパスの復号処理する(ステップS1208)。Sパスでない場合(ステップS1205、NO)、残サブビットプレーン数>0であるかの判定に移る(ステップS1209)。ここでは、Sパスでないため、残サブビットプレーン数>0であるかの判定に移る(ステップS1209)。ここで、残サブビットプレーン数は7となった。
次に、残サブビットプレーン数>0であるかを判定する(ステップS1209)。残サブビットプレーン数>0であるとき(ステップS1209、YES)、次の符号データがRパスであるかの判定をする(ステップS1210)。残サブビットプレーン数>0でないとき(ステップS1209、NO)、終了する(ステップS1219)。ここでは、残サブビットプレーン数>0(残サブビットプレーン数=7)であるため、次の符号データがRパスであるかの判定をする(ステップS1210)。Rパスである場合(ステップS1210、YES)、残サブビットプレーン数≦3であるかの判定をする(ステップS1211)。
残サブビットプレーン数≦3である場合(ステップS1211、YES)、Rパスの復号処理し、r値を加算する(ステップS1212)。残サブビットプレーン数≦3でない場合(ステップS1211、NO)、Rパスの復号処理をする(ステップS1213)。Rパスでない場合(ステップS1210、NO)、残サブビットプレーン数>0であるかの判定に移る(ステップS1214)。ここでは、Rパスでないため、残サブビットプレーン数>0であるかの判定に移る(ステップS1214)。ここで、残サブビットプレーン数は6となった。
次に、残サブビットプレーン数>0であるかを判定する(ステップS1214)。残サブビットプレーン数>0であるとき(ステップS1214、YES)、次の符号データがCパスであるかの判定をする(ステップS1215)。残サブビットプレーン数>0でないとき(ステップS1214、NO)、終了する(ステップS1219)。ここでは、残サブビットプレーン数>0(残サブビットプレーン数=6)であるため、次の符号データがCパスであるかの判定をする(ステップS1215)。Cパスである場合(ステップS1215、YES)、残サブビットプレーン数≦3であるかの判定をする(ステップS1216)。
残サブビットプレーン数≦3である場合(ステップS1216、YES)、Cパスの復号処理し、r値を加算する(ステップS1217)。残サブビットプレーン数≦3でない場合(ステップS1216、NO)、Cパスの復号処理をする(ステップS1218)。Cパスでない場合(ステップS1215、NO)、残サブビットプレーン数>0であるかの判定に移る(ステップS1204)。ここでは、Cパスであるため、残サブビットプレーン数≦3であるかの判定をする(ステップS1216)。残サブビットプレーン数≦3(残サブビットプレーン数=6)であるため(ステップS1216、NO)、Cパスの復号処理をする。Cパスの復号処理を行ったため、残サブビットプレーン数は5となった。
上記処理を残サブビットプレーン数が0となるまで、繰り返す。S,R,Cパスと繰り返し行い、残サブビットプレーン数が2となった場合について記述する。
残サブビットプレーン数>0であるかを判定する(ステップS1204)。残サブビットプレーン数>0である場合(ステップS1204、YES)、次の符号データがSパスであるかの判定をする(ステップS1205)。残サブビットプレーン数>0でない場合(ステップS1204、NO)、終了する(ステップS1219)。ここでは、残サブビットプレーン数>0(残サブビットプレーン数=2)であるため、次の符号データがSパスであるかの判定をする(ステップS1205)。Sパスである場合(ステップS1205、YES)、残サブビットプレーン数≦4であるかの判定をする(ステップS1206)。
残サブビットプレーン数≦4である場合(ステップS1206、YES)、Sパスの復号処理し、r値を加算する(ステップS1207)。残サブビットプレーン数≦4でない場合(ステップS1206、NO)、Sパスの復号処理する(ステップS1208)。Sパスでない場合(ステップS1205、NO)、残サブビットプレーン数>0であるかの判定に移る(ステップS1209)。ここでは、Sパスであるため、残サブビットプレーン数≦4であるかの判定をする(ステップS1206)。残サブビットプレーン数≦4(残サブビットプレーン数=2)であるため、Sパスの復号処理を行い、r値加算を行う(ステップS1207)。Sパスの復号処理を行ったため、残サブビットプレーン数は1となった。
ここで、r値を加算した場合についての方法を説明する。加算値rは、任意0<r<1である。rを1/2とした場合、処理対象である最下位ビットプレーンにr・2^(ビットプレーン数−復号化されたビットプレーン数)を加算する。実際は下記の値を加算することになる。
加算値=r・2^(ビットプレーン数−復号化されたビットプレーン数)
=1/2・2^(4−4)
=0
なお、復号値が0のときは、加算しないものとする。
ここで、空ビットへのフラグ挿入についての流れを図17のフローチャートにそって説明する。ここでは、ステップS1701の加算処理が必要かどうかの条件は、ビットプレーン=0、および加算値=0である。図17のフローチャートは、上記記述中では省略していたが、図11のステップS1102、ステップS1107、ステップS1112、ステップS1117の各々パスでr値加算処理を行う処理中で行うことになる。
ビットプレーン=0、加算値=0であるため、加算処理(ステップS1701)のために空ビットへフラグ挿入(ステップS1702)の処理へと進む。そのため、符号データの空ビットにフラグをたてる。例えば、符号データの上位2bit目に1を入れる。
次に、残サブビットプレーン数>0であるかを判定する(ステップS1209)。残サブビットプレーン数>0である場合(ステップS1209、YES)、次の符号データがRパスであるかの判定をする(ステップS1210)。残サブビットプレーン数>0でない場合(ステップS1209、NO)、終了する(ステップS1219)。ここでは、残サブビットプレーン数>0(残サブビットプレーン数=1)であるため、次の符号データがRパスであるかの判定をする(ステップS1210)。
Rパスである場合(ステップS1210、YES)、残サブビットプレーン数≦3であるかの判定をする(ステップS1206)。残サブビットプレーン数≦3である場合(ステップS1210、YES)、Rパスの復号処理し、r値を加算する(ステップS1212)。残サブビットプレーン数≦3でない場合(ステップS1211、NO)、Rパスの復号処理する(ステップS1213)。Rパスでない場合(ステップS1210、NO)、残サブビットプレーン数>0であるかの判定に移る(ステップS1214)。ここでは、Rパスでないため、残サブビットプレーン数>0であるかの判定に移る。ここで、残サブビットプレーン数は0となった。
次に、残サブビットプレーン数>0(残サブビットプレーン数=0)であるため(ステップS1214、NO)、終了する(ステップS1219)。最初の符号化データ(ここでは01)が終了したら、次の符号化データ(ここでは07)の処理を上記同様に行う。
空ビットのフラグを使用したr値の加算処理についての流れを図18のフローチャートにそって説明する。上記処理よりも後方の処理で、空ビットのフラグの有無を判定(S1801)し、フラグがあれば(ステップS1801、YES)、ビットプレーンが0以下、すなわち、小数点のr値を加算(ステップS1802)することができる。ここでは、r値が1/2であるため、1/2を加算すればよいことになる。
ここで、ステップS1206の残サブビットプレーン数≦4としている理由について説明する。各々の符号化データは各々SRCパスのいずれかに存在する。そのため、最下位サブビットプレーンから上3つのサブビットプレーンに対して、加算処理することにより、最小限の加算処理となる。しかし、サブビットプレーンの切り捨てポイントによって、各々の符号化データが各々SRCパスのいずれかに存在しない場合がある。図16のようにSパスで切り捨てられている場合である。符号化データ15の場合、最下位サブビットプレーンから上3つ(RCSの順)のいずれのパスにもパスが存在しない。これは、Sパスの場合、次に出てくるパスはSパスかRパスであるため、最下位サブビットプレーンから上4つめのSパスのように、次に出てくるパスがRパスであった場合、加算処理がされないことになる。そこで、最下位サブビットプレーンから上4つ(SRCSの順)のサブビットプレーンに対して、加算処理をすることにより、最小限の加算処理とすることができる。
切り捨てポイントとなるビットプレーンを正確に判断し、そのビットプレーンを用いた切り捨てポイントよりも下位ビットデータへの任意rの加算値により、復号処理の画質劣化の抑制となり、また、残サブビットプレーン数により、加算する可能性にあるビットプレーンを推定し、加算処理を最低限必要なときのみ行うことができ、高速な処理方法となる。
また上記の実施形態によれば、切り捨てポイントとなるビットプレーンを正確に判断したrの加算を行うとともに、rが小数数点以下となる場合にも正確に加算を行うために、フラグが必要であり、フラグ用に空きビットを有効利用することにより、画質劣化の抑制と、高速な処理と、メモリの有効活用とが可能となる。
また本発明のエントロピ符号化手段は、エントロピ復号処理過程の符号化パスの処理において、符号化パスの処理後のリコンストラクション値加算処理を行うか否かを判定し、加算処理を行う場合には判定されたデータの空いたビットにフラグをたてるようにしても良い。
また本発明は、リコンストラクション値加算処理を行うか否かの判定は、残サブビットプレーン数に基づいて判定するようにしても良い。
また本発明は、エントロピ符号化手段のマグニチュードリファイメントパスとクリーンアップパスは3に設定し、シグニフィカントプロパゲーションパスは4に設定するようにしても良い。
また本発明のエントロピ符号化手段は、符号化パスを処理した後に空いたビットにおけるフラグの有無を判定し、空きビットにフラグが有る場合には予め定められた加算値を予め定められた0以外の値を持った復号データに加算するようにしても良い。
また本発明のエントロピ符号化工程は、エントロピ復号処理過程の符号化パスの処理において、
符号化パスの処理後のリコンストラクション値加算処理を行うか否かを判定し、加算処理を行う場合には判定されたデータの空いたビットにフラグをたてるようにしても良い。
また本発明は、リコンストラクション値加算処理を行うか否かの判定は、残サブビットプレーン数に基づいて判定するようにしても良い。
また本発明は、エントロピ符号化工程のマグニチュードリファイメントパスとクリーンアップパスは3に設定し、シグニフィカントプロパゲーションパスは4に設定するようにしても良い。
また本発明は、エントロピ符号化工程は、符号化パスを処理した後に空いたビットにおけるフラグの有無を判定し、空きビットにフラグが有る場合には予め定められた加算値を予め定められた0以外の値を持った復号データに加算するようにしても良い。
また本発明のエントロピ符号化処理は、エントロピ復号処理過程の符号化パスの処理において、
符号化パスの処理後のリコンストラクション値加算処理を行うか否かを判定し、加算処理を行う場合には判定されたデータの空いたビットにフラグをたてるようにしても良い。
また本発明は、リコンストラクション値加算処理を行うか否かの判定は、残サブビットプレーン数に基づいて判定するようにしても良い。
また本発明はエントロピ符号化処理のマグニチュードリファイメントパスとクリーンアップパスは3に設定し、シグニフィカントプロパゲーションパスは4に設定するようにしても良い。
また本発明のエントロピ符号化処理は、符号化パスを処理した後に空いたビットにおけるフラグの有無を判定し、空きビットにフラグが有る場合には予め定められた加算値を予め定められた0以外の値を持った復号データに加算するようにしても良い。