以下、発明を実施するための形態(以下実施の形態とする)について 説明する。なお、説明は以下の順序で行う。
1.第1の実施の形態(ラインベースのトランスコード制御処理)
2.第2の実施の形態(符号化方式がJPEG2000の場合のトランスコード制御処理)
<1.第1の実施の形態>
[符号化装置の構成]
まず、可逆エンコードされたコードストリームを、非可逆エンコードされたコードストリームに変換する画像データの変換処理について説明する。
図1は、そのような変換処理を用いる本発明を適用した符号化装置の構成例を示す図である。図1に示される符号化装置100は、入力されるベースバンドの画像データを、一旦、可逆符号化方式により所定の圧縮率で符号化し、その後、符号化されたコードストリームを、所望の圧縮率に変換し、非可逆方式で符号化されたコードストリームとして出力する装置である。
符号化装置100は、図1に示されるように、可逆ラインベースエンコード部101および非可逆トランスコード部102を有する。
可逆ラインベースエンコード部101は、装置内の処理の負荷を軽減させるため、入力されるベースバンドの画像データ(マスタ画像)を、所定の可逆符号化方式により所定の圧縮率で符号化し、データサイズを小さくしたコードストリームの可逆圧縮ファイルに変換する。ただし、可逆ラインベースエンコード部101は、符号化時に画像データに対して、所定のライン数毎にウェーブレット変換するラインベースウェーブレット変換を行う。可逆ラインベースエンコード部101の詳細については後述する。
例えば、符号化装置100は、情報処理部103−1において、その可逆圧縮ファイルに対してメタ情報を付加する等の所定の処理を施す。また、例えば、符号化装置100は、その可逆圧縮ファイルを、所定のバスやネットワーク等の伝送路103−2を介して伝送させる。さらに、例えば、符号化装置100は、その可逆圧縮ファイルをハードディスクや半導体メモリ等の記憶部103−3に一旦保存し、所定のタイミングで読み出して出力する。
符号化装置100は、非可逆トランスコード部102において、このコードストリームを、所定の非可逆符号化方式で符号化されたコードストリームに変換する。非可逆トランスコード部102は、制御部111、可逆ラインベースデコード部121、バッファ122、および非可逆ラインベースエンコード部123を有する。
可逆ラインベースデコード部121は、制御部111に制御され、情報処理部103−1において処理された可逆圧縮ファイル、伝送路103−2を介して供給された可逆圧縮ファイル、または、記憶部103−3より読み出された可逆圧縮ファイルのコードストリームの一部または全部を復号し、ベースバンドの画像データを生成する。
可逆ラインベースデコード部121は、制御部111に制御され、生成したベースバンドの画像データをバッファ122に供給し、保持させる。
非可逆ラインベースエンコード部123は、制御部111に制御され、バッファ122よりそのベースバンドの画像データを取得し、所定の非可逆符号化方式により所望の圧縮率で符号化し、生成したコードストリームを出力する。
このとき、制御部111は、非可逆ラインベースエンコード部123が生成するコードストリームの目標符号量を達成するために必要なベースバンドの画像データデータ量を求め、そのベースバンドの画像データの、マスタ画像(原画像)の画像データに対する圧縮率を算出し、それを目標圧縮率として可逆ラインベースデコード部121に供給する。つまり、制御部111は、目標符号量を達成するために必要なベースバンドの画像データの符号量を、マスタ画像(原画像)の画像データに対する圧縮率で表わし、それを可逆ラインベースデコード部121に供給する。
可逆ラインベースデコード部121は、その圧縮率を目標圧縮率とし、可逆圧縮ファイルのコードストリームの一部または全部を復号してベースバンドの画像データを生成する。後述するように、可逆ラインベースデコード部121は、生成するベースバンドの画像データの符号量が小さいほど、つまり、マスタ画像(原画像)の画像データに対する圧縮率が高いほど、復号するコードストリームの部分が少なくて済むので、復号処理の処理量を低減させることができる。しかしながら、可逆ラインベースデコード部121が生成するベースバンドの符号量が少なすぎると、非可逆ラインベースエンコード部123が目標符号量を達成することができなくなる恐れがある。
そこで、制御部111は、可逆ラインベースデコード部121に、可逆ラインベースデコード部121が生成するベースバンドの画像データの、マスタ画像(原画像)の画像データに対する圧縮率が、非可逆ラインベースエンコード部123の目標圧縮率と一致するように、または、それよりも少し小さくなるように、復号する部分の選択を行わせ、その選択した部分に対してのみ復号処理を行わせる。
換言すれば、制御部111は、可逆ラインベースデコード部121を制御し、非可逆ラインベースエンコード部123が目標符号量を達成することができる範囲において、復号処理の処理量をより低減させるように、可逆圧縮ファイルのコードストリームを部分的に復号させる。
以下において、このようなコードストリームの一部分を復号することを部分デコード処理と称する。以上のように部分デコード処理を行うことにより、可逆ラインベースデコード部121は、マスタ画像(原画像)のデータサイズが大きくても、容易かつ適切に可逆圧縮ファイルを復号することができる。
また、可逆ラインベースエンコード部101、可逆ラインベースデコード部121、および非可逆ラインベースエンコード部123のそれぞれが、画像データに対してラインベースのウェーブレット変換、または、コードストリームに対してラインベースのウェーブレット逆変換を行う。つまり、これらの処理部においては、1ピクチャを複数のライン毎に分割したラインブロック毎にウェーブレット変換またはウェーブレット逆変換が行われる。したがって、符号化装置100は、ピクチャ毎にウェーブレット変換を行う場合よりも、一度に保持するウェーブレット係数の量を低減させることができ、バッファ122等として必要なメモリ容量をより低減させることができる。
さらに、非可逆トランスコード部102において制御部111は、可逆ラインベースデコード部121より出力される画像データが、非可逆ラインベースエンコード部123が符号化可能な量だけ、バッファ122に蓄積され次第、非可逆ラインベースエンコード部123を制御し、その画像データを符号化させるようにする。このように制御することにより、符号化装置100は、バッファ122として必要なメモリ容量をより低減させることができる。
可逆ラインベースデコード部121および非可逆ラインベースエンコード部123の詳細については後述する。
[可逆エンコード部の構成]
次に、図1の符号化装置100の構成の詳細について説明する。図2は、図1の可逆ラインベースエンコード部101の詳細な構成例を示すブロック図である。図2に示されるように、可逆ラインベースエンコード部101は、制御部131、ラインベース分析フィルタ141、バッファ142、および可逆符号化部143を有する。
制御部131は、ラインベース分析フィルタ部141の動作を制御するウェーブレット変換制御部151、および、可逆符号化部143の動作を制御する可逆符号化制御部152を有する。
ラインベース分析フィルタ部141は、ウェーブレット変換制御部151に制御され、入力された画像データに対して、所定のライン数のラインブロック毎に、係数を低域成分と高域成分に分割する分析フィルタ処理を低域成分に対して再帰的に繰り返す、ラインベースのウェーブレット変換を行う。
図3は、分割レベル数3のウェーブレット変換処理により生成されるサブバンドの構成例を示す図である。この場合、ベースバンドの画像データに対して、水平方向および垂直方向に分析フィルタリングが行われ、サブバンド1LL(図示せず)、1HL、1LH、および1HHが生成される。次に、サブバンド1LLに対して再度、水平方向および垂直方向に分析フィルタリングが行われ、2LL(図示せず)、2HL、2LH、および2HHが生成される。さらに、生成されたサブバンド2LLに対して、再度、水平方向および垂直方向に分析フィルタリングが行われ、3LL、3HL、3LH、および3HHが生成される。
ラインベース分析フィルタ部141は、このようなウェーブレット変換を、1ピクチャが所定のライン数毎に分割されたラインブロック毎に行う。図4は、このようなラインベースのウェーブレット変換を説明する図である。
図4Aに示される斜線部分ように、ピクチャ内の連続する一部のラインによりラインブロックは形成される。このとき、図4Bに示されるように、ウェーブレット変換処理においては、分析フィルタリングが繰り返される度に、ライン数が低減する。
図4の例の場合、図4Aに示されるベースバンドの画像データにおいて、8ラインからなるラインブロックを図4Bに示されるように分割レベル3まで分割すると、分割レベル1のサブバンド(1HH,1HL,1LH)においては、ライン数は4となり、分割レベル2のサブバンド(2HH,2HL,2LH)においては、ライン数は2となり、分割レベル3のサブバンド(3HH,3HL,3LH,3LL)においては、ライン数は1となる。
したがって、ラインブロックは、少なくとも、ウェーブレット変換後に最低域のサブバンドのライン数が1以上となるのに必要なライン数以上となる。
ラインベース分析フィルタ部141は、水平方向に分析フィルタリングを行う水平分析フィルタ部161と、垂直方向に分析フィルタリングを行う垂直分析フィルタ部162を有する。
ラインベース分析フィルタ部141は、まず、水平分析フィルタ部161により、水平方向の分析フィルタリングを行い、その処理結果に対して、垂直分析フィルタ部162により、垂直方向の分析フィルタリングを行う。所定の分割レベルに達するまで、その処理結果のLL成分について、同様の順で水平方向および垂直方向の分析フィルタリングが繰り返される。
次に、上述した分析フィルタリングにおける演算方法について具体的に説明する。分析フィルタリングにおける演算方法で最も一般的な演算方法は、畳み込み演算と呼ばれる方法である。この畳み込み演算は、デジタルフィルタの最も基本的な実現手段であり、フィルタのタップ係数に、実際の入力データを畳み込み乗算するものである。しかしながら、この畳み込み演算では、タップ長が長いとその分、計算負荷が増えてしまう場合もある。
これに対応する方法として、論文「W.Swelden,“The lifting scheme :A custom-design construction of Biorthogonal wavelets”, Applied and Computational Harmonic Analysis, vol3, no.2, pp.186-200, 1996」で紹介されたウェーブレット変換のリフティング技術が知られている。
図5は、JPEG2000規格でも採用されている9×7分析フィルタのリフティング構成を示している。この9×7分析フィルタに対してリフティング技術を適用したときの分析フィルタリングについて説明する。
図5の例において、1段目(最上段)は、入力画像のサンプル群(画素列)を示し、2,3段目は、それぞれステップA1およびステップA2の処理で生成される成分(係数)を示す。また、4段目は、ステップA3の処理で生成される高域成分出力を示し、5段目は、ステップA4の処理で生成される低域成分出力を示している。最上段部は、入力画像のサンプル群に限らず、前の分析フィルタリングで得られた係数であってもよい。ここでは、最上段部が入力画像のサンプル群であるものとし、四角印(■)が偶数番目のサンプルまたはライン、丸印(●)が奇数番目のサンプルまたはラインとする。
9×7分析フィルタに対してリフティング技術を適用した分析フィルタリングにおいては、ステップA3の処理で高域成分が得られ、ステップA4の処理で低域成分が得られる。なお、ステップA1乃至ステップA4の処理は、次の式(1)乃至式(4)で表される。
stepA1:di 1=di 0+α(si 0+si+1 0) ・・・(1)
stepA2:si 1=si 0+β(di-1 1+di 1) ・・・(2)
stepA3:di 2=di 1+γ(si 1+si+1 1) ・・・(3)
stepA4:si 2=si 1+δ(di-1 2+di 2) ・・・(4)
(α=-1.586134342,β=-0.0529801185,γ=0.8829110755,δ=0.4435068520)
このように、リフティング技術を適用した分析フィルタリングにおいては、ステップA1およびA2の処理が行われ、ステップA3で、高域成分の係数が生成された後に、ステップA4で、低域成分の係数が生成される。この際に用いられるフィルタバンクは、式(1)乃至式(4)に示されるように、加算とシフト演算のみで実現できる。したがって、計算量を大幅に低減することができる。そこで、次に説明するように、水平分析フィルタリングおよび垂直分析フィルタリングに、このリフティング技術を適用する。
まず、水平分析フィルタリングの処理について具体的に説明する。図6は、水平分析フィルタリングを、図5のリフティング構成により実行する場合の例を示している。
図6の例においては、入力される水平方向の係数に対して、図5で上述した4つのステップ(ステップA1乃至A4)の処理を経て、高域成分の係数(以下、高域係数とも称する)と低域成分の係数(以下、低域係数とも称する)が生成される例が示されており、リフティングのステップの方向は、図中上から下に進む。また、水平方向の係数の上に示される数字は、列(コラム)番号を示している。
さらに、上から1段目の丸および四角は、それぞれ、入力される高域係数および低域係数を表しており、2段目以降の丸および四角は、それぞれ、リフティング演算の過程で生成される高域係数および低域係数を表しており、その中でも、ハッチが付された丸および四角は、それぞれ、リフティング演算の結果である高域係数および低域係数を表している。
以下、動作について上から順に説明する。図6の上段には、水平方向にコラム番号4乃至6の3コラムの係数が入力されて、水平方向のリフティング構成による演算(以下、水平リフティング演算と称する)が行われる場合の例が示されている。
この水平リフティング演算のステップA3において1番目の高域係数を求め、ステップA4において1番目の低域係数を求めるためには、コラム番号0乃至4の4コラムの係数の入力が必要である。
その後、2番目の高域係数と低域係数を求めるためには、太線実線で示される3つの係数と、丸数字で示されるコラム番号5および6の2コラムの係数が必要であり、さらに、ステップA2のP1が示される係数を算出するためには、丸数字で示されるコラム番号4の係数も必要である。
太線実線で示される3つの係数は、1番目の高域係数および低域係数を求めるための水平リフティング演算(以下、1番目の水平リフティング演算とも称する)の過程で生成される係数のうちの一部である。
すなわち、2番目の高域係数と低域係数を求めるためには、結局、丸数字で示されるコラム番号4乃至6の3コラムの係数の入力が必要であり、さらに、1番目の水平リフティング演算の過程において生成される太線実線で示される3つの係数を、途中演算用の係数として、ラッチしておく必要がある。実際には、高々3つの係数であるので、フリップフロップ等の小容量の記憶領域を用いることで対応することができる。
したがって、1番目の水平リフティング演算においてラッチされていた太線実線で示される3つの係数と、入力されたコラム番号4乃至6の3コラムの係数が用いられて水平リフティング演算が行われることにより、その演算過程および終了時においては、2番目の高域係数と低域係数を含めた4つの係数(太線点線で示される)が生成される。これらのうち、一点鎖線で示される3つの係数は、3番目の高域係数と低域係数を求めるために必要な係数であるので、途中演算用の係数として、内蔵されるフリップフロップにラッチされる。
コラム番号6の係数の入力の後、水平方向に2コラムの係数が追加入力される場合、すなわち、水平方向にコラム番号6乃至8の3コラムの係数が入力されて、水平リフティング演算が行われる場合の例が、図6の下段に示されている。
2番目の場合と同様に、3番目の高域係数と低域係数を求めるためには、太線実線で示される3つの係数と、丸数字で示されるコラム番号7および8の2コラムの係数が必要であり、さらに、ステップA2のP2が示される係数を算出するためには、丸数字で示されるコラム番号6の係数も必要であることがわかる。
なお、下段の太線実線で示される3つの係数は、上段の一点鎖線で示されるように、2番目の水平リフティング演算でフリップフロップにラッチされている。
したがって、2番目の水平リフティング演算でラッチされていた太線実線で示される3つの係数と、入力されたコラム番号6乃至8の3コラムの係数が用いられて水平リフティング演算が行われることにより、3番目の高域係数と低域係数を含めた4つの係数(太線点線で示される)が生成される。これらのうち、一点鎖線で示される3つの係数は、4番目の高域係数と低域係数を求めるために必要な係数であるので、内蔵されるフリップフロップにラッチされる。
以上のようにして、3コラム分の係数を順次入力しながら、途中演算用の3つの係数を保持しながら、水平リフティング演算が、画面の最右端のコラムまで実行されることで、水平方向の分析フィルタリングが完了される。
なお、以上においては、リフティング構成による1ライン分の水平分析フィルタリングの例を説明したが、上述した動作によって、係数のラインを上から下方向に順次入力しながら、リフティング構成により水平分析フィルタリングが行われる。
そして、垂直方向の係数が所定数集まり次第、すなわち、所定ライン数集まり次第、右側のリフティングのステップの方向に示されるように、左から右へと、垂直方向のリフティング構成による演算(すなわち、垂直リフティング演算)が行われる。
次に、垂直分析フィルタリングについて具体的に説明する。図7は、垂直方向の分析フィルタリングを、図5のリフティング構成により実行する場合の例を示している。
なお、この図は、水平方向に展開されて並ぶ係数1つに着目したものであり、実際の2次元のウェーブレット変換では、ウェーブレット変換の過程で生成される周波数成分(サブバンド)の水平方向の係数の個数だけ、垂直方向の分析フィルタリングの計算が必要になることは自明である。
図7の例においては、垂直方向の係数に対して、図5で上述した4つのステップ(ステップA1乃至A4)の処理を経て、高域係数と低域係数が生成される例が示されており、リフティングのステップの方向は、図中左から右に進む。また、垂直方向の係数の左に示される数字は、ライン番号を示している。
さらに、左から1列目の丸および四角は、それぞれ、入力される高域係数および低域係数を表しており、2列目以降の丸および四角は、それぞれ、リフティング演算の過程で生成される高域係数および低域係数を表しており、その中でも、ハッチが付された丸および四角は、それぞれ、リフティング演算の結果である高域係数および低域係数を表している。
以下、動作について左から順に説明する。図7の左側には、垂直方向にライン番号4乃至6の3ラインの係数が入力されて、垂直リフティング演算が行われる場合の例が示されている。
この垂直リフティング演算のステップA3において1番目の高域係数を求め、ステップA4において1番目の低域係数を求めるためには、ライン番号0乃至4の4ラインの係数が必要である。
その後、2番目の高域係数と低域係数を求めるためには、太線実線で示される3つの係数と、丸数字で示されるライン番号5および6の2ラインの係数が必要であり、さらに、ステップA2のP1が示される係数を算出するためには、丸数字で示されるライン番号4の係数も必要である。
太線実線で示される3つの係数は、1番目の高域係数および低域係数を求めるための垂直リフティング演算(以下、1番目の垂直リフティング演算と称する)の過程で生成される係数のうちの一部である。
すなわち、2番目の高域係数と低域係数を求めるためには、結局、丸数字で示されるライン番号4乃至6の3ラインの係数の入力が必要である。さらに、1番目の垂直リフティング演算の過程において生成される太線実線で示される3つの係数が必要である。この3つの係数が途中演算用の係数として記憶される。
したがって、1番目の垂直リフティング演算で記憶されていた太線実線で示される3つの係数と、対応するレベルのバッファから読み出され入力されるライン番号4乃至6の3ラインの係数が用いられて垂直リフティング演算が行われることにより、2番目の高域係数と低域係数を含めた4つの係数(太線点線で示される)が得られる。これらのうち、一点鎖線で示される3つの係数は、3番目の高域係数と低域係数を求めるために必要な係数であるので記憶される。
ライン番号6の係数の読み出しの後、2ラインの係数が追加して読み出される場合、すなわち、垂直方向にライン番号6乃至8の3ラインの係数が入力されて、垂直リフティング演算が行われる場合の例が、図7の右側に示されている。
2番目の場合と同様に、3番目の高域係数と低域係数を求めるためには、太線実線で示される3つの係数と、丸数字で示されるライン番号7および8の2ラインの係数が必要であり、さらに、ステップA2のP2が示される係数を算出するためには、丸数字で示されるライン番号6の係数も必要であることがわかる。
なお、右側の太線実線で示される3つの係数は、左側の一点鎖線で示されるように、2番目の垂直リフティング演算で記憶されている。したがって、2番目の垂直リフティング演算で記憶されていた太線実線で示される3つの係数と、対応するレベルのバッファから読み出されて入力されるライン番号6乃至8の3ラインの係数が用いられて垂直リフティング演算が行われることにより、3番目の高域係数と低域係数を含めた4つの係数(太線点線で示される)が得られる。これらのうち、一点鎖線で示される3つの係数は、4番目の高域係数と低域係数を求めるために必要な係数であるので記憶される。
以上のようにして、3ライン分の係数を順次入力しながら、途中演算用の3つの係数を保持しながら、垂直リフティング演算が、画面の最下位のラインまで実行されることで、垂直方向の分析フィルタリングが完了される。
図2に戻り、以上のようにして生成されたウェーブレット係数は、バッファ142に一時的に保持される。
可逆符号化部143は、可逆符号化制御部152に制御され、バッファ142に所定量の係数データが蓄積され次第、それを読み出して可逆符号化方式によるエントロピ符号化を行い、コードストリームを生成する。
可逆符号化部143は、EBCOT(Embedded Coding with Optimized Truncation)部171、ヘッダ生成部172、およびパケット生成部173を有する。
EBCOT部171は、入力される係数データに対して、JPEG2000規格で定められたEBCOTと呼ばれるエントロピ符号化を行う。EBCOTは、所定の大きさのブロック毎にそのブロック内の係数の統計量を測定しながら符号化を行う手法である。EBCOT部171は、ビットモデリング部181および算術符号化部182を有する。
ビットモデリング部181は、符号化方式の規格で定められた手順に従って、係数データに対してビットモデリングを行い、算術符号化部182にコンテキストを送出する。算術符号化部182は、係数のビットプレーンを算術符号化する。
コードブロックの縦横のサイズは4から256まで2のべき乗で、通常使用される大きさは、32×32、64×64、128×32等がある。係数値がnビットの符号付き2進数で表されていて、bit0からbit(n−2)がLSBからMSBまでのそれぞれのビットを表すとする。残りの1ビットは符号を示す。符号ブロックの符号化は、MSB側のビットプレーンから順番に、例えばSignificant Propagation Pass、Magnitude Refinement Pass、およびCleanup Passの3種類の符号化パスによって行われる。
算術符号化部207は、生成したコードストリームを、ヘッダ作成部172およびパケット生成部173に供給する。
パケット生成部173は、供給された符号化コードストリームをパケット化する。ヘッダ生成部172は、そのパケットのヘッダ情報を生成し、そのヘッダ情報をパケット生成部173に供給する。パケット生成部173は、そのヘッダ情報を用いてパケット化を行う。生成されたパケットは可逆ラインベースエンコード部101の外部に出力される。
[可逆デコード部の構成]
次に、図1の可逆ラインベースデコード部121について説明する。図8は、制御部111および可逆ラインベースデコード部121の構成例を示すブロック図である。
図8に示されるように、可逆ラインベースデコード部121は、復号部211、バッファ212、およびラインベース合成フィルタ部213を有する。
また、制御部111は、復号部211の動作を制御する復号制御部201、および、ラインベース合成フィルタ部213の動作を制御するウェーブレット逆変換制御部202を有する。
復号部211は、復号制御部201により制御され、非可逆トランスコード部102の外部より入力されるコードストリームに対して、可逆ラインベースエンコード部101における符号化方法に対応する復号方法で復号する。
復号部211は、パケット解読部231およびEBCOT部232を有する。パケット解読部231は、復号制御部201により制御され、パケットを解読し、コードストリームをEBCOT部232に供給する。EBCOT部232は、入力されるコードストリームに対して、規格で定められたEBCOTと呼ばれるエントロピ復号を行う。
EBCOT部232は、算術復号部241およびビットモデリング部242を有する。算術復号部241は、算術符号化部182に対応する方法でコードストリームを復号し、コンテキストをビットモデリング部242に供給する。ビットモデリング部242は、ビットモデリング部181に対応する方法で、ウェーブレット係数を生成する。ビットモデリング部242は、生成した係数データを、バッファ212に供給し、保持させる。
ラインベース合成フィルタ部213は、ウェーブレット逆変換制御部202に制御され、バッファ212に所定量の係数データが蓄積され次第、それを読み出し、所定のライン数のラインブロック毎に、低域成分と高域成分の係数を合成する合成フィルタ処理を低域成分から再帰的に繰り返す、ラインベースのウェーブレット逆変換を行う。
ラインベース合成フィルタ部213は、このようなウェーブレット逆変換を、各サブバンドの所定のライン数毎に分割されたラインブロック毎に行う。図9は、このようなラインベースのウェーブレット逆変換を説明する図である。
図9Aに示される斜線部分ように、各サブバンドの連続する一部のラインによりラインブロックは形成される。このとき、図9Aに示されるように、ウェーブレット逆変換処理においては、合成フィルタリングが繰り返される度に、ライン数が低減する。
図9の例の場合、図9Aに示される最低域のサブバンドにおいて、8ラインからなるラインブロックを合成フィルタリングしていき、図9Bに示されるようにベースバンドまで合成すると、そのベースバンドにおいてライン数は1となる。
したがって、最低域のサブバンドにおいて、ラインブロックは、少なくとも、ウェーブレット逆変換後にベースバンドのライン数が1以上となるのに必要なライン数以上となる。
ラインベース合成フィルタ部213は、垂直方向に合成フィルタリングを行う垂直合成フィルタ部251と、水平方向に合成フィルタリングを行う水平合成フィルタ部252を有する。
ラインベース合成フィルタ部213は、まず、垂直合成フィルタ部251により、最低域の分割レベルの4成分(LL,LH,HL,HH)について、垂直方向の合成フィルタリングを行い、その処理結果に対して、水平合成フィルタ部252により、水平方向の合成フィルタリングを行う。所定の分割レベルに達するまで、その処理結果の最低域の分割レベルの4成分について、同様の順で垂直方向および水平方向の合成フィルタリングが繰り返される。
上述したリフティング技術を適用したときの分析フィルタリングに対応して、効率的にフィルタリングを実行することができることから、ウェーブレット逆変換の合成フィルタリングにおいても、同様にリフティング技術を用いることが好ましい。
図10は、JPEG2000規格でも採用されている9×7合成フィルタのリフティング構成を示している。この9×7合成フィルタに対してリフティング技術を適用したときの合成フィルタリングについて説明する。
図10の例において、1段目(最上段)は、ウェーブレット変換により生成された係数であり、丸印(●)が高域成分の係数を示し、四角印(■)が低域成分の係数を示す。2,3段目は、それぞれステップB1およびステップB2の処理で生成される成分(係数)を示す。また、4段目は、ステップB3の処理で生成される偶数成分出力を示し、5段目は、ステップB4の処理で生成される奇数成分出力を示している。
9×7合成フィルタに対してリフティング技術を適用した合成フィルタリングにおいては、ステップB3の処理で偶数成分が得られ、ステップB4の処理で奇数成分が得られる。なお、ステップB1乃至ステップB4の処理は、次の式(5)乃至式(8)で表される。
stepB1:si 1=si 2−δ(di-1 2+di 2) ・・・(5)
stepB2:di 1=di 3−γ(si 1+si+1 1) ・・・(6)
stepB3:si 0=si 1−β(di-1 1+di 1) ・・・(7)
stepB4:di 0=di 1−α(si 0+si+1 0) ・・・(8)
(α=-1.586134342,β=-0.0529801185,γ=0.8829110755,δ=0.4435068520)
このように、リフティング技術を適用した合成フィルタリングにおいては、ステップB1およびB2の処理が行われ、ステップB3で、偶数成分の係数が生成された後に、ステップB4で、奇数成分の係数が生成される。この際に用いられるフィルタバンクは、式(5)乃至式(8)に示されるように、除算とシフト演算のみで実現できる。したがって、計算量を大幅に低減することができる。
そこで、次に説明するように、垂直合成フィルタリングおよび水平合成フィルタリングに、このリフティング技術を適用する。なお、用いる式が異なるだけであり、垂直合成フィルタリングは、図7を参照して上述した垂直分析フィルタリングと基本的に同様な動作を行い、水平合成フィルタリングは、図6を参照して上述した水平分析フィルタリングと基本的に同様な動作を行う。
まず、垂直合成フィルタリングの処理について具体的に説明する。図11は、垂直方向の係数群に対しての垂直合成フィルタリングを、図10のリフティング構成により実行する場合の例を示している。
図11の例においては、垂直方向の係数に対して、図10で上述した4つのステップ(ステップB1乃至B4)の処理を経て、偶数番目の係数(以下、偶数係数とも称する)と奇数番目の係数(以下、奇数係数とも称する)が生成される例が示されており、リフティングのステップの方向は、図中左から右に進む。
また、垂直方向の係数の左側に示される数字は、ライン番号を示しており、左から1列目のハッチが付された丸および四角は、それぞれ、高域入力および低域入力を表している。さらに、2列目以降の丸および四角は、それぞれ、リフティング演算の過程で生成される高域係数および低域係数を表しており、その中でも、黒丸および黒四角は、それぞれ、リフティング演算の結果である奇数係数および偶数係数を表している。
以下、動作について左から順に説明する。図11の左側には、垂直方向にライン番号4乃至6の3ラインの係数が入力されて、垂直方向のリフティング構成による演算(すなわち、垂直リフティング演算)が行われる場合の例が示されている。なお、いまの場合、最上段の偶数係数は、奇数係数と組みになっていないのでその説明を省略する。
この垂直リフティング演算のステップB3において1番目の偶数係数を求め、ステップB4において1番目の奇数係数を求めるためには、ライン番号0乃至5の6ラインの係数が必要である。
その後、2番目の偶数係数と奇数係数を求めるためには、太線実線で示される3つの係数と、丸数字で示されるライン番号6および7の2ラインの係数が必要であり、さらに、ステップB2のQ1が示される係数を算出するためには、丸数字で示されるライン番号5の係数も必要である。
太線実線で示される3つの係数は、1番目の偶数係数および奇数係数を求めるための垂直リフティング演算(以下、1番目の垂直リフティング演算と称する)の過程で生成される係数のうちの一部である。
したがって、2番目の偶数係数と奇数係数を求めるためには、結局、丸数字で示されるライン番号5乃至7の3ラインの係数の入力が必要であり、さらに、1番目の偶数係数と奇数係数を求めるための垂直リフティング演算の過程において生成される太線実線で示される3つの係数を記憶しておく必要がある。なお、このとき、垂直方向の3ラインの係数は、レベル毎に読み出される。
したがって、1番目の垂直リフティング演算でバッファに記憶されていた太線実線で示される3つの係数と、入力されるライン番号5乃至7の3ラインの係数が用いられて垂直リフティング演算が行われることにより、2番目の偶数係数と奇数係数を含めた4つの係数(太線点線で示される)が得られる。このうち、一点鎖線で示される3つの係数は、3番目の偶数係数と奇数係数を求めるために必要な係数であるので記憶される。
ライン番号7の係数の読み出しの後、2ラインの係数が追加して読み出される場合、すなわち、垂直方向にライン番号7乃至9の3ラインの係数が入力されて、垂直リフティング演算が行われる場合の例が、図11の右側に示されている。
2番目の場合と同様に、3番目の偶数係数と奇数係数を求めるためには、太線実線で示される3つの係数と、丸数字で示されるライン番号8および9の2ラインの係数が必要であり、さらに、ステップB2のQ2が示される係数を算出するためには、丸数字で示されるライン番号7の係数も必要である。
なお、右側の太線実線で示される3つの係数は、左側の一点鎖線で示されるように、2番目の垂直リフティング演算で係数バッファに記憶されている。
したがって、2番目の垂直リフティング演算で記憶されていた太線実線で示される3つの係数と、入力されるライン番号7乃至9の3ラインの係数が用いられて垂直リフティング演算が行われることにより、3番目の偶数係数と奇数係数を含めた4つの係数(太線点線で示される)が得られる。このうち、一点鎖線で示される3つの係数は、3番目の偶数係数と奇数係数を求めるために必要な係数であるので記憶される。
以上のようにして、3ライン分の係数を順次入力しながら、途中演算用の3つの係数を保持しながら、垂直リフティング演算が、画面の最下位のラインまで実行されることで、垂直方向の合成フィルタリングが完了される。
次に、水平合成フィルタリングについて具体的に説明する。図12は、垂直方向の合成フィルタリングの結果を水平方向に並べて、水平合成フィルタリングを、図10のリフティング構成により実行する場合の例を示している。
図12の例においては、水平方向の係数に対して、図10で上述した4つのステップ(ステップB1乃至B4)の処理を経て、奇数係数と偶数係数が生成される例が示されており、リフティングのステップの方向は、図中上から下に進む。
また、水平方向の係数の上に示される数字は、列(コラム)番号を示しており、上から1段目のハッチが付された丸および四角は、それぞれ、高域入力および低域入力を表しており、2段目以降の丸および四角は、それぞれ、リフティング演算の過程で生成される高域係数および低域係数を表しており、その中でも、黒丸および黒四角は、それぞれ、リフティング演算の結果である奇数係数および偶数係数を表している。
以下、動作について上から順に説明する。図12の上段には、水平方向にコラム番号5乃至7の3コラムの係数が入力されて水平方向のリフティング構成による演算(以下、水平リフティング演算と称する)が行われる場合の例が示されている。なお、いまの場合、最左側の偶数係数は奇数係数と組みになっていないのでその説明を省略する。
この水平リフティング演算のステップB3において1番目の偶数係数を求め、ステップB4において1番目の奇数係数を求めるためには、コラム番号0乃至5の6コラムの係数が必要である。
その後、2番目の奇数係数と偶数係数を求めるためには、太線実線で示される3つの係数と、丸数字で示されるコラム番号6および7の2コラムの係数が必要であり、さらに、ステップB2のQ1が示される係数を算出するためには、丸数字で示されるコラム番号5の係数も必要である。
太線実線で示される3つの係数は、1番目の奇数係数および偶数係数を求めるための水平リフティング演算(以下、1番目の水平リフティング演算とも称する)の過程で生成される係数のうちの一部である。
すなわち、2番目の奇数係数と偶数係数を求めるためには、結局、丸数字で示されるコラム番号5乃至7の3コラムの係数の入力が必要であり、さらに、1番目の水平リフティング演算の過程において生成される太線実線で示される3つの係数を、ラッチしておく必要がある。実際には、高々3つの係数であるので、フリップフロップのような小容量の記憶領域を用いることで対応することができる。
したがって、1番目の水平リフティング演算でラッチされていた太線実線で示される3つの係数と、入力されたコラム番号5乃至7の3コラムの係数が用いられて水平リフティング演算が行われることにより、その演算過程および終了時においては、2番目の奇数係数と偶数係数を含めた4つの係数(太線点線で示される)が得られる。このうち、一点鎖線で示される3つの係数は、3番目の奇数係数と偶数係数を求めるために必要な係数であるので、内蔵されるフリップフロップにラッチされる。
コラム番号7の係数の入力の後、水平方向に2コラムの係数が追加入力される場合、すなわち、水平方向にコラム番号7乃至9の3コラムの係数が入力されて、水平リフティング演算が行われる場合の例が、図12の下段に示されている。
2番目の場合と同様に、3番目の奇数係数と偶数係数を求めるためには、太線実線で示される3つの係数と、丸数字で示されるコラム番号8および9の2コラムの係数が必要であり、さらに、ステップB2のQ2が示される係数を算出するためには、丸数字で示されるコラム番号7の係数も必要である。
なお、下段の太線実線で示される3つの係数は、上段の一点鎖線で示されるように、2番目の水平リフティング演算でラッチされている。
したがって、2番目の水平リフティング演算でラッチされていた太線実線で示される3つの係数と、新たに入力されるコラム番号7乃至9の3コラムの係数が用いられて水平リフティング演算が行われることにより、3番目の奇数係数と偶数係数を含めた4つの係数(太線点線で示される)が得られる。このうち、一点鎖線で示される3つの係数は、4番目の奇数係数と偶数係数を求めるために必要な係数であるので、内蔵されるフリップフロップにラッチされる。
以上のようにして、3コラム分の係数を順次入力しながら、途中演算用の3つの係数を保持しながら、水平リフティング演算が、画面の最右端のコラムまで実行されることで、水平方向の合成フィルタリングが完了される。
以上のように、垂直合成フィルタリングおよび水平合成フィルタリングにおいても、9×7ウェーブレット変換フィルタのリフティング構成が用いられることで、対応する分割レベルのバッファには、3ライン分の係数を記憶する各ラインの係数用のバッファが必要となり、さらに、図11のQ1およびQ2の係数を求めるため、垂直リフティング演算の際、すでに使用したラインの係数も、次の垂直リフティング演算に必要になる。
したがって、対応するレベルのバッファの内部では、1つのラインのバッファに記憶されている係数を、隣接するラインのバッファに、次々と転送していく構成となる。
以上のように合成フィルタリングされ、得られたベースバンドの画像データは、バッファ122に蓄積される。
なお、このラインベース合成フィルタ部213は、ウェーブレット逆変換制御部202に制御され、可逆符号化前の画像データに対して、所望の圧縮率で圧縮されたベースバンドの画像データを得るために、所定の分割レベルまで合成フィルタリングを行う。つまり、ラインベース合成フィルタ部213は、必ずしも分割レベル0まで合成するとは限らない。ただし、ラインベース合成フィルタ部213がどの分割レベルまで合成フィルタリングを行う場合であっても、得られた合成フィルタ結果は、ベースバンドの画像データとして取り扱われる。
[非可逆エンコード部の構成]
次に、非可逆ラインベースエンコード部123について説明する。図13は、制御部と非可逆ラインベースエンコード部の構成例を示すブロック図である。図13に示されるように、非可逆ラインベースエンコード部123は、基本的に、可逆ラインベースエンコード部101と同様の構成を有する。
すなわち、非可逆ラインベースエンコード部123は、図2のラインベース分析フィルタ部141と同様のラインベース分析フィルタ部311、図2のバッファ142と同様のバッファ312、および、可逆符号化部143と同様の非可逆符号化部313を有する。
また、制御部111は、ラインベース分析フィルタ部311の動作を制御するウェーブレット変換制御部301、および、非可逆符号化部313の動作を制御する非可逆符号化部302を有する。
ラインベース分析フィルタ部311は、ウェーブレット変換制御部301により制御され、バッファ122より読み出された画像データに対して、ラインブロック毎にウェーブレット変換を行う。ラインベース分析フィルタ部311は、図2の水平分析フィルタ部161と同様の水平分析フィルタ部321と、図2の垂直分析フィルタ部162と同様の垂直分析フィルタ部322を有する。
水平分析フィルタ部321は、ウェーブレット変換制御部301により制御され、バッファ122より読み出された画像データに対して、水平方向にラインベースの分析フィルタリングを行い、垂直分析フィルタ部322は、ウェーブレット変換制御部301により制御され、垂直方向にラインベースの分析フィルタリングを行い、得られた処理結果をバッファ312に供給して保持させる。
非可逆符号化部302は、可逆符号化部143の構成に加え、さらに量子化部331を有する。すなわち、EBCOT部332は、EBCOT部171に対応し、ヘッダ生成部333は、図2のヘッダ生成部172に対応し、パケット生成部334は、パケット生成部173に対応する。
EBCOT部332は、EBCOT部171のビットモデリング部181と同様のビットモデリング部341と、EBCOT部171の算術符号化部182と同様の算術符号化部342とを有する。
量子化部331は、非可逆符号化制御部302により制御され、バッファ312より取得したウェーブレット係数を量子化する。この量子化の方法は任意であるが、量子化ステップサイズで除算するスカラ量子化が一般的である。量子化部331は、量子化により得られた量子化係数を、EBCOT部332に供給する。なお、これより後段においては、ウェーブレット係数の代わりに量子化係数が供給されることになるが、この量子化係数もウェーブレット係数の場合と基本的に同様に扱われる。したがって、以下においては、必要でない限りその点についての説明は省略し、単に係数または係数データと称する。
ビットモデリング部341は、規格で定められた手順に従って、係数データに対してビットモデリングを行い、算術符号化部342にコンテキストを送出する。算術符号化部342は、係数のビットプレーンを算術符号化する。
図14は、ウェーブレット変換およびウェーブレット逆変換の処理の様子を説明する図である。
制御部111は、可逆ラインベースデコード部121によるラインベースウェーブレット逆変換処理と、非可逆ラインベースエンコード部123によるラインベースウェーブレット変換処理とを並行して行うように制御する。
図14左に示されるように、制御部111は、ラインベース合成フィルタ部213に、最低域成分のラインが所定のPラインバッファ212に保持される毎にラインベースウェーブレット逆変換を行わせ、1ラインのベースバンドの画像データを生成させ、それをバッファ122に保持させる。制御部111は、ラインベース合成フィルタ部213を制御し、このようなラインベースウェーブレット逆変換処理を繰り返す。
このような処理が繰り返され、バッファ122に、ベースバンドの画像データが所定のLライン分蓄積され次第、制御部111は、図14右に示されるように、ラインベース分析フィルタ部311に、そのLライン分のベースバンドの画像データを取得させ、ラインベースウェーブレット変換を行わせ、サブバンド毎の係数データを生成させる。制御部111は、ラインベース分析フィルタ部311を制御し、このようなラインベースウェーブレット変換処理を繰り返す。
このように制御することにより、バッファ122に同時に蓄積されるデータ量を必要最小限とすることができるので、制御部111は、バッファ122として必要なメモリ量を低減させることができる。
[処理の流れ]
次に、各処理の流れについて説明する。最初に、可逆ラインベースエンコード部101により実行される可逆符号化処理の流れの例を、図15のフローチャートを参照して説明する。
可逆符号化処理が開始されると、ラインベース分析フィルタ部141は、ウェーブレット変換制御部151に制御され、対象ラインブロックをウェーブレット変換する。ステップS102において、EBCOT部171は、可逆符号化制御部152に制御され、ステップS101の処理により生成されたウェーブレット係数に対して、エントロピ符号化を行い、コードストリームを生成する。ステップS103において、ヘッダ生成部172およびパケット生成部173は、可逆符号化制御部152に制御され、ヘッダを生成し、さらにコードストリームのパケットを生成する。ステップS104において、制御部131は、全てのラインブロックを処理したか否かを判定する。
未処理のラインブロックが存在し、全てのラインブロックを処理していないと判定された場合、ステップS101に戻り、それ以降の処理が繰り返される。また、ステップS104において、全てのラインブロックが処理されたと判定された場合、可逆符号化処理が終了される。
以上のように生成されたパケットは、非可逆トランスコード部102に供給される。
次に、非可逆トランスコード部102の制御部111により実行されるトランスコード制御処理の流れの例を図16のフローチャートを参照して説明する。
トランスコード制御処理が開始されると、ステップS121において、復号制御部201は、復号部211を制御し、処理対象コードストリームを全て処理するまで、コードストリームを復号させる。復号されて得られたウェーブレット係数は、順次バッファ212に供給され、保持される。
ステップS122において、ウェーブレット逆変換制御部202は、ラインベース合成フィルタ部213を制御し、バッファ212に保持されている処理対象係数データが無くなるまで、処理対象係数データをウェーブレット逆変換させる。ウェーブレット逆変換されて得られたベースバンドの画像データは、順次バッファ122に保持される。
ステップS123において、制御部111は、バッファ122に画像データが1ラインブロック分蓄積されたか否かを判定し、蓄積されたと判定されるまで待機する。
バッファ122に画像データが1ラインブロック分蓄積されたと判定された場合、処理はステップS124に進む。ステップS124において、ウェーブレット変換制御部301は、ラインベース分析フィルタ部311を制御し、バッファ122に蓄積されたラインブロックを読み出させ、ウェーブレット変換させる。符号化されて得られたウェーブレット係数は、順次バッファ312に供給され、保持される。
ステップS125において、非可逆符号化制御部302は、非可逆符号化部123を制御し、バッファ312に蓄積されたウェーブレット係数を読み出し、非可逆符号化させる。ステップS125の処理により得られたコードストリームは、パケット化されて符号化装置100の外部に出力される。
ステップS126において、制御部111は、バッファ122に未処理の画像データが存在するか否かを判定する。存在すると判定された場合、ステップS123に戻り、それ以降の処理が繰り返される。また、ステップS126において、バッファ122に未処理の画像データが存在しないと判定された場合、トランスコード制御処理が終了される。
次に、図16のステップS121の制御により実行される復号処理の流れの例を図17のフローチャートを参照して説明する。
復号処理が開始されると、パケット解読部231は、ステップS141において、所定量のコードストリームを取得する。ステップS142において、EBCOT部232は、得られたコードストリームをエントロピ復号する。ステップS143において、バッファ121は、ステップS142の処理により得られた係数を保持する。ステップS143の処理が終了されると、復号処理が終了される。
次に、図18のフローチャートを参照して、図16のステップS122の制御により実行されるウェーブレット逆変換処理の流れの例を図18のフローチャートを参照して説明する。
ウェーブレット逆変換処理が開始されると、ラインベース合成フィルタ部213は、ステップS161において、所定量の係数がバッファ212に蓄積されたか否かを判定し、蓄積されたと判定するまで待機する。所定量の係数がバッファ212に蓄積されたと判定された場合、処理はステップS162に進む。
ステップS162において、ラインベース合成フィルタ部213は、バッファ212に保持されている係数を取得する。ステップS163において、ラインベース合成フィルタ部213は、取得した係数に対して、合成フィルタ処理を行う。ステップS164において、ラインベース合成フィルタ部213は、ステップS163の処理により得られた画像データをバッファ122に供給し、保持させる。ステップS164の処理が終了されると、ウェーブレット逆変換処理が終了される。
次に、図15のステップS124の制御により実行されるウェーブレット変換処理の流れの例を図19のフローチャートを参照して説明する。
ウェーブレット変換処理が開始されると、ラインベース分析フィルタ部311は、ステップS181において、バッファ122に蓄積された処理対象ラインブロックを取得する。ステップS182において、ラインベース分析フィルタ部311は、取得したラインブロックについて分析フィルタ処理を行う。ステップS183において、ラインベース分析フィルタ部311は、ステップS182の処理により生成された係数データをバッファ312に供給し、保持させる。ステップS183の処理が終了されると、ウェーブレット変換処理が終了される。
次に、図15のステップS125の制御により実行される非可逆符号化処理の流れの例を図20のフローチャートを参照して説明する。
非可逆符号化処理が開始されると、非可逆符号化部313は、ステップS201において、所定量の係数がバッファ312に蓄積されたか否かを判定し、蓄積されたと判定されるまで待機する。所定量の係数がバッファ312に蓄積されたと判定された場合、処理はステップS202に進む。
ステップS202において、非可逆符号化部313は、バッファ312より係数データを取得する。ステップS203において、量子化部331は、取得された係数データを量子化する。ステップS204において、EBCOT部332は、量子化された係数をエントロピ符号化し、非可逆方式で符号化されたコードストリームを生成する。ステップS205において、ヘッダ生成部333およびパケット生成部334は、ステップS204の処理により得られたコードストリームのヘッダを生成し、さらにそのヘッダを用いてパケットを生成し、出力する。ステップS205の処理が終了されると、非可逆符号化処理が終了される。
以上のように、制御部111の図15のフローチャートを参照して説明したトランスコード制御処理の制御により、図18を参照して説明したウェーブレット逆変換処理と、図19を参照して説明したウェーブレット変換処理とが並行して(互いに独立して)実行される。
このとき制御部111は、ウェーブレット逆変換処理により生成された画像データが、バッファ122に必要最小限の量だけ蓄積され次第、ウェーブレット変換処理を実行させるので、符号化装置100は、バッファ122に必要はメモリ量を低減させることができる。
なお、可逆ラインベースエンコード部101、可逆ラインベースデコード部121、および非可逆ラインベースエンコード部123の各部が行う符号化処理または復号処理の符号化方式(復号方式)は任意である。例えば、JPEG2000方式であっても良い。
<2.第2の実施の形態>
[可逆エンコード部の構成]
符号化方式がJPEG2000方式である場合の可逆ラインベースエンコード部について説明する。図21は、可逆ラインベースエンコード部の他の構成例を示すブロック図である。
この場合も、可逆ラインベースエンコード部101は、基本的に図2を参照して説明した場合と基本的に同様の構成を有するが、制御部131の代わりに制御部401を有し、また、ラインベース分析フィルタ部141の代わりにウェーブレット変換部411を有し、さらに、可逆符号化部143の代わりに可逆符号化部413を備える。
ウェーブレット変換部411は、DCレベルシフト部431とラインベース分析フィルタ部141を有する。
DCレベルシフト部431は、後段のラインベース分析フィルタリングを効率的に行うために、ウェーブレット変換部411に入力された画像データのDC成分のレベルシフトを行う。例えば、RGB信号が正の値(符号無しの整数)を持っている。そこで、DCレベルシフト部431は、そのことを利用し、原信号のダイナミックレンジを半分にするレベルシフトを行うことで、圧縮効率の向上を図る。従ってYCbCr信号のCbやCr(色差信号)の様に符号(正負両方あり)の整数値を持つ信号を原信号とする場合、このレベルシフトは行われない。
ラインベース分析フィルタ部141は、DCレベルシフトされた画像データに対してウェーブレット変換処理を行う。
可逆符号化部413は、可逆符号化制御部152に制御され、JPEG2000の可逆符号化方式によりウェーブレット係数を符号化する。可逆符号化部413は、EBCOT部171乃至パケット生成部173の他に、さらに、コードブロック化部441およびビットプレーン展開部442を有する。
コードブロック化部441は、エントロピ符号化の処理単位である所定の大きさのコードブロックに分割される。図22は各サブバンド中のコードブロックの位置関係を示したものである。例えば64×64画素程度のサイズのコードブロックが、分割後のすべてのサブバンド中に生成される。図22の例において、最も分割レベルが小さい3HHのサブバンドの大きさが例えば640×320画素であるとすると、64×64画素のコードブロックは合計50個存在することになる。後段の各処理部は、このコードブロック毎に処理を行う。
コードブロック化部441は、各コードブロックをビットプレーン展開部442に供給する。ビットプレーン展開部205は、係数データを、ビットの位毎のビットプレーンに展開する。ビットプレーンは、所定の数のウェーブレット係数よりなる係数群を、1ビット毎、つまり位毎に分割(スライス)したものである。つまり、ビットプレーンは、その係数群の互いに同一の位のビット(係数ビット)の集合である。
EBCOT171は、ビットプレーン展開された係数データをエントロピ符号化する。
制御部401は、ウェーブレット変換制御部151および可逆符号化制御部152の他に、さらに、ラインブロック定義部421、コードブロック定義部422、およびプリシンクト定義部423を有する。
コードブロック定義部422はJPEG2000において規定されるコードブロックのサイズを定義する。プリシンクト定義部423は、JPEG2000において規定されるプリシンクトのサイズを定義する。
JPEG2000の場合、コードブロック定義部422は、ウェーブレット変換後のサブバンド内に、図22のように矩形のコードブロック(例えば64x64)を定義する。コードブロックの横サイズ(CB_h)、縦サイズ(CB_v)は以下の式で定義される。
xcb' = min (xcb, PPx-1). For r>0 ・・・・・・・(9)
xcb' = min (xcb, PPx). For r=0 ・・・・・・・(10)
ycb' = min (ycb, PPy-1). For r>0 ・・・・・・・(11)
ycb' = min (ycb, PPy). For r=0 ・・・・・・・(12)
(r:解像度レベル数を意味する。r=0は最低域)
CB_h (コードブロックの横サイズ)= 2xcb' ・・・・・・・(13)
CB_v (コードブロックの縦サイズ)= 2ycb' ・・・・・・・(14)
PR_h (プリシンクトの横サイズ)= 2PPx ・・・・・・・(15)
PR_v (プリシンクトの縦サイズ)= 2PPy ・・・・・・・(16)
上記より、JPEG2000ではコードブロックが必ずプリシンクト内部で定義されている必要がある。図23はこれらの関係を図示したもので、JPEG2000 Part1の規格書に図示されているものである。図中太線の矩形はサブバンドの境界を示し、灰色の矩形領域はプリシンクト(Precinct)、最小単位の矩形ブロックがCodeblock(コードブロック)を示している。
JPEG2000ではエンコードする時点で、コードブロックサイズとプリシンクトサイズが確定している必要がある。例えば、コードブロックとプリシンクトの関係は、ラインベースウェーブレット変換の過程で図24の様に定義することができる。しかし上記の様に、いずれのサイズも2のべき乗の値を取るべき制約条件が存在する。
従って、図24の最低域3LLの1ラインの係数が生成された時の、1HL、1HH、1LHのプリシンクトサイズが2のべき乗の値でなかった際の対応が必要になってくる。これはプリシンクトがラインブロックのライン群よりもはみ出ている部分を、後続のラインブロックのライン群が得られ次第、補充する。尚、上記は他のすべてのサブバンドについても同様である。
以上においては、水平方向の分析フィルタリングと垂直方向の分析フィルタリングの順番については特に言及しなかった。JPEG2000規格では最初に垂直方向の分析フィルタリングを行い、その後に水平方向の分析フィルタリングを行うように定義されている。
しかし、JPEG2000の規格以外で構わない場合には、フィルタリングの順番に制約はないので、例えばベースバンド画像が1ライン入力され次第フィルタリングを行う際には、Mコラム数のベースバンド画像が入力され次第水平方向の分析フィルタリングを行えばよい。縦方向にNライン分の係数が溜まり次第、今度は垂直方向の分析フィルタリングを行い、4つのサブバンドが生成される。この場合Lライン分遅延することがないので、低遅延でフィルタリングが実行できる。
次に、図1の可逆ラインベースエンコード部101がJPEG2000方式で符号化する場合の、圧縮率の決め方について説明する。既に述べた様に、JPEG2000ではコードブロック単位にEBCOT符号化を行うため、このコードブロックのサイズが小さいと圧縮率が低下するという問題がある。そのためJPEG2000では通常、32x32または64x64というサイズを用いる。
しかしながら、図24の3LL、3HL、3LH、3HHのように「1ライン×Mコラム(水平サイズ)」で1つのプリシンクトが形成されると、コードブロックはこれよりもサイズが小さいので、非常に圧縮率が悪くなる。従って、省メモリと圧縮率との間にはトレードオフがあると言える。
一方、このライン数Nを1の代わりに大きな値を取れば、ラインブロックを構成する他のサブバンドのライン数は大きくなるので、プリシンクトのサイズ、コードブロックのサイズも大きく設定することが可能になる。従って、エンコード時の圧縮率が高い場合は、上記Nの値を大きくすればよい。逆にエンコード時の圧縮率が低い場合は、上記Nの値を小さくすればよい。
ラインブロック定義部421は、プリシンクトサイズやコードブロックサイズをより大きく取ることができるようにし、符号化の圧縮率を向上させるために、処理に必要なメモリ容量を考慮しながら、ラインブロックのサイズ(ライン数)を極力大きく設定する。
[可逆デコード部の構成]
次に、この場合の、可逆ラインベースデコード部の構成について説明する。図25は、可逆ラインベースデコード部の他の構成例を示すブロック図である。
図25に示されるように、この場合の可逆ラインベースデコード部121の復号部211は、図8の場合の構成に加え、さらに、ビットプレーン合成部471およびコードブロック合成部472を有する。
ビットプレーン合成部471は、ビットプレーンに展開されたウェーブレット係数を合成する。ビットプレーン合成部471は、ビットプレーンを合成したウェーブレット係数を、コードブロック合成部472に供給する。
コードブロック合成部472は、供給されたビットプレーンを用いてコードブロック単位の係数データを生成し、さらにそれらを合成し、サブバンド毎の係数データを生成する。コードブロック合成部472は、それをバッファ212に供給し保持させる。
なお、JPEG2000のEBCOT復号を復号部211で実行した後に、ラインベースウェーブレット逆変換をラインベース合成フィルタ部213で行う際に必要なメモリサイズは、上記EBCOT部でのラインブロックの最低域のライン数Nに依存する。
即ち、Nが大きければラインブロックを構成する他のサブバンドのライン数は大きくなるので、必要なメモリサイズも大きくなる。逆にNが小さければ必要なメモリサイズも小さくなる。従って、システムやハードウェアでの許容メモリ容量に応じて、Nの値を決定すれば良い。
[非可逆エンコード部の構成]
次に、この場合の、非可逆ラインベースエンコード部の構成について説明する。図26は、非可逆ラインベースエンコード部の他の構成例を示すブロック図である。
図26に示されるように、この場合の非可逆ラインベースエンコード部123は、図13のラインベース分析フィルタ部311の代わりに、ウェーブレット変換部490を有する。ウェーブレット変換部490は、DCレベルシフト部491およびラインベース分析フィルタ部311を有する。
DCレベルシフト部491は、DCレベルシフト部431と基本的に同様でありバッファ122より取得された画像データのDCレベルをシフトし、ラインベース分析フィルタ部311に供給する。ラインベース分析フィルタ部311は、DCレベルシフトされた画像データに対してウェーブレット変換を行い、サブバンド毎のウェーブレット係数をバッファ312に保持させる。
また、非可逆符号化部313は、図13の構成に加えて、コードブロック化部492およびビットプレーン展開部493を有する。コードブロック化部492は、量子化部331より供給される量子化された係数データを、コードブロック定義部482により定義されたサイズのコードブロックに分割する。ビットプレーン展開部493は、そのコードブロックに分割された係数データを、ビットプレーンに展開する。EBCOT部332は、ビットプレーンに展開された係数データを符号化する。
制御部111は、図13の場合のウェーブレット変換制御部301および非可逆符号化制御部302の他に、ラインブロック定義部481、コードブロック定義部482、およびプリシンクト定義部483を有する。
コードブロック定義部482はJPEG2000において規定されるコードブロックのサイズを定義する。プリシンクト定義部483は、JPEG2000において規定されるプリシンクトのサイズを定義する。
この非可逆ラインベースエンコード部123の場合も、最低域3LLの1ラインの係数が生成された時の、1HL、1HH、1LHのプリシンクトサイズが2のべき乗の値でなかった際の対応が必要になってくる。これはプリシンクトがラインブロックのライン群よりもはみ出ている部分を、後続のラインブロックのライン群が得られ次第、補充する。尚、上記は他のすべてのサブバンドについても同様である。
以上においては、水平方向の分析フィルタリングと垂直方向の分析フィルタリングの順番については特に言及しなかった。JPEG2000規格では最初に垂直方向の分析フィルタリングを行い、その後に水平方向の分析フィルタリングを行うように定義されている。
しかし、JPEG2000の規格以外で構わない場合には、フィルタリングの順番に制約はないので、例えばベースバンド画像が1ライン入力され次第フィルタリングを行う際には、Mコラム数のベースバンド画像が入力され次第水平方向の分析フィルタリングを行えばよい。縦方向にNライン分の係数が溜まり次第、今度は垂直方向の分析フィルタリングを行い、4つのサブバンドが生成される。この場合Lライン分遅延することがないので、低遅延でフィルタリングが実行できる。
また、ラインブロック定義部481は、プリシンクトサイズやコードブロックサイズをより大きく取ることができるようにし、符号化の圧縮率を向上させるために、処理に必要なメモリ容量を考慮しながら、ラインブロックのサイズ(ライン数)を極力大きく設定する。
[処理の流れ]
次に、以上のように、符号化方式がJPEG2000方式である場合の、各種処理の流れの例を説明する。最初に、可逆ラインベースエンコード部101による可逆符号化処理の流れの例を図27のフローチャートを参照して説明する。
可逆符号化処理が開始されると、ラインブロック定義部421は、ステップS301において、ラインブロックサイズを定義する。ステップS302において、コードブロック定義部422は、コードブロックサイズを定義する。さらに、プリシンクト定義部423は、ステップS303において、プリシンクトサイズを定義する。
ステップS304において、ウェーブレット変換部411は、対象ラインブロックを取得する。ステップS305において、DCレベルシフト部431は、取得したラインブロックのDCレベルをシフトする。ステップS306において、ラインベース分析フィルタ部141は、対象ラインブロックの分析フィルタリングを行う。ステップS307において、ラインベース分析フィルタ部141は、その分析フィルタリングの結果である係数データをバッファ142に供給し、保持させる。
ステップS308において、可逆符号化部413は、係数データが1プレシンクト以上バッファ142に蓄積されたか否かを判定する。蓄積されていないと判定された場合、ステップS304に戻りそれ以降の処理が繰り返される。
また、ステップS308において、係数データが1プレシンクト以上バッファ142に蓄積されたと判定した場合、処理はステップS309に進む。
ステップS309において、コードブロック化部441は、係数データのコードブロック化を行う。ステップS310において、ビットプレーン展開部442は、コードブロック毎の係数データをビットプレーンに展開する。EBCOT部171は、ステップS311において、ビットプレーンに展開された係数データに対してエントロピ符号化を行う。
ステップS412において、パケット生成部173は、エントロピ符号化により生成されたコードストリームのパケットを生成する。
制御部401は、ステップS313において、全てのラインブロックを処理したか否かを判定する。未処理のラインブロックが存在すると判定した場合、ステップS304に戻り、それ以降の処理が繰り返される。
また、ステップS313において、全てのラインブロックを処理したと判定された場合、可逆符号化処理が終了される。
なお、この場合も、トランスコード制御処理の流れは、基本的に図16を参照して説明した場合と同様であるので、その説明は省略する。
この場合の、図16のステップS121の処理により制御されて実行される復号処理の流れの例を図28のフローチャートを参照して説明する。
復号処理が開始されると、ステップS331において、パケット解読部231は、1コードブロック分のコードストリームを取得する。ステップS332において、EBCOT部232は、取得されたコードストリームをエントロピ復号する。ステップS333において、ビットプレーン合成部471は、復号結果に対して、ビットプレーンを合成する。ステップS334において、コードブロック合成部472は、ビットプレーンが合成された係数データのコードブロックを合成する。ステップS335において、コードブロック合成部472は、コードブロックを合成した係数データをバッファ212に供給し、保持させる。
ステップS336において、制御部111は、プレシンクト内の全てのコードブロックを処理したか否かを判定する。未処理のコードブロックが存在すると判定された場合、ステップS331に戻りそれ以降の処理が繰り返される。
また、ステップS336において、プレシンクト内の全てのコードブロックが処理されたと判定された場合、復号処理を終了する。
次に、図16のステップS122の制御により実行されるウェーブレット逆変換処理の流れの例を図29のフローチャートを参照して説明する。
ウェーブレット逆変換処理が開始されると、ラインベース合成フィルタ部213は、ステップS351において、1プレシンクト分の係数がバッファ212に蓄積されたか否かを判定し、蓄積されたと判定されるまで待機する。
1プレシンクト分の係数がバッファ212に蓄積されたと判定された場合、ステップS352に進む。ステップS352において、ラインベース合成フィルタ部213は、バッファ212より係数データを取得する。
ステップS353において、ラインベース合成フィルタ部213は、取得した係数データに対して、合成フィルタ処理を行い、ベースバンドの画像データを生成する。ステップS354において、DCレベル逆シフト部473は、ベースバンドの画像データのDCレベルを逆シフトする。
ステップS355において、DCレベル逆シフト部473は、処理後の画像データをバッファ122に供給し、保持させる。ステップS355の処理が終了されると、ウェーブレット逆変換処理が終了される。
次に、図16のステップS124の制御により実行されるウェーブレット変換処理の流れの例を図30のフローチャートを参照して説明する。
ウェーブレット変換処理が開始されると、ステップS371において、ラインブロック定義部481は、ラインブロックサイズを定義する。ステップS372において、コードブロック定義部482は、コードブロックサイズを定義する。ステップS373において、プリシンクト定義部483は、プリシンクトサイズを定義する。
ステップS374において、DCレベルシフト部491は、バッファ122から対象ラインブロックを取得する。ステップS375において、DCレベルシフト部491は、取得したラインブロックについてDCレベルをシフトする。
ステップS376において、ラインベース分析フィルタ部311は、対象ラインブロックの分析フィルタリングを行う。ステップS377において、ラインベース分析フィルタ部311は、分析フィルタリング処理結果をバッファ312に供給し、保持させる。
ステップS377の処理が終了すると、ウェーブレット変換処理が終了される。
次に、図16のステップS125の制御により実行される非可逆符号化処理の流れの例を、図31のフローチャートを参照して説明する。
非可逆符号化処理が開始されると、ステップS391において、1プレシンクト以上の係数がバッファ312に蓄積されたか否かを判定する。蓄積されたと判定された場合、ステップS392に進む。
ステップS392において、量子化部331は、バッファ312から係数を取得する。ステップS393において、量子化部331は、取得した係数を量子化する。ステップS394において、コードブロック化部492は、量子化された係数データを、コードブロック化する。ステップS395において、ビットプレーン展開部493は、コードブロック毎の係数データをビットプレーンに展開する。
ステップS396において、EBCOT部332は、ビットプレーンに展開された係数データをエントロピ符号化し、コードストリームを生成する。ステップS397において、ヘッダ生成部333およびパケット生成部334は、コードストリームをパケット化する。
非可逆符号化制御部302は、ステップS398において、すべてのコードブロックを処理したか否かを判定する。未処理のコードブロックが存在すると判定された場合、ステップS392に戻り、それ以降の処理が繰り返される。また、ステップS398において、全てのコードブロックを処理したと判定された場合、非可逆符号化処理が終了される。また、ステップS391において、1プレシンクト以上の係数がバッファ312に蓄積されていないと判定された場合、非可逆符号化処理が終了される。
以上のように、符号化方式がJPEG2000の場合も、制御部111の図15のフローチャートを参照して説明したトランスコード制御処理の制御により、図29を参照して説明したウェーブレット逆変換処理と、図30を参照して説明したウェーブレット変換処理とが並行して(互いに独立して)実行される。
このとき制御部111は、ウェーブレット逆変換処理により生成された画像データが、バッファ122に必要最小限の量だけ蓄積され次第、ウェーブレット変換処理を実行させるので、符号化装置100は、バッファ122に必要はメモリ量を低減させることができる。
次に、例えば、図27のステップS301、または、図30のステップS371等において、実行されるラインブロックサイズ定義処理の流れの例を、図32のフローチャートを参照して説明する。なおここでは、可逆ラインベースエンコード部101が行う場合について説明する。非可逆ラインベースエンコード部123が行う場合も同様であるので、その説明は省略する。
ラインブロックサイズ定義処理が開始されると、ラインブロック定義部421は、ステップS411において、バッファ122の容量(バッファサイズ)を取得する。ステップS412において、ラインブロック定義部421は、可逆符号化部413が行うエントロピ符号化の圧縮率を取得する。ステップS413において、ラインブロック定義部421は、バッファサイズまたは圧縮率の少なくともいずれか一方に基づいて、ラインブロックサイズを定義する。
ステップS413の処理が終了すると、ラインブロックサイズ定義処理が終了される。
このように、ラインブロックサイズをメモリサイズや圧縮率に応じて定義することにより、ラインブロックのサイズを適切な大きさにすることができ、不要な負荷の増大や圧縮率の低減を抑制することができる。
以上のように、既にエンコードされた結果のJPEG2000圧縮コードストリームを、JPEG2000のコードストリームにトランスコードする際、例えば最初の圧縮コードストリームがロスレス(可逆圧縮)で後続のエンコードがロッシー(非可逆圧縮)の場合には、フィルタが異なるのでベースバンド画像に1度戻す必要がある。その際、1ピクチャ分すべての画素をデコードしてから再度エンコードすると、大きなメモリ量が必要になる。そこで、本発明では、ラインベースのデコードをしながら同時に、ラインベースのエンコードを並行して行える構成にしたので、常に少ないメモリサイズでデコードとエンコードの両方を実行することができるという効果がある。
また、デコーダとエンコーダが同時に動かせるので、短い時間で両者の動作を終わらせる高速動作という効果もある。
本発明では、メモリ消費量を削減しながら、ある符号化コードストリームをデコードして1度ベースバンドに戻してから、再度エンコードして符号化コードストリームに変換することを目的としている。具体的な応用例としては、省メモリでJPEG2000の可逆圧縮ファイルをJPEG2000の非可逆圧縮ファイルに変換することを目的としている。
この発明のトランスコード装置及び方法は、画像信号の符号化コードストリームを入力して、帯域分割されたサブバンド中のラインブロックのラインまたはブロック単位にエントロピ復号を行う手段と、上記エントロピ復号結果に対して水平方向の合成フィリタリングと垂直方向の合成フィルタリングを施すことでライン単位にベースバンド画像を出力する手段と、上記ベースバンド画像に対して、水平方向の分析フィルタリングと垂直方向の分析フィルタリングを、所定の分解レベル数まで実行する手段と、上記フィルタリングの結果生成される係数が、各サブバンド内でエントロピ符号化を実行可能なサンプル数に達し次第、直ちにエントロピ符号化を行う手段を備えた。
[パーソナルコンピュータの構成]
上述した一連の処理は、ハードウェアにより実行することもできるし、ソフトウェアにより実行することもできる。一連の処理をソフトウェアにより実行する場合には、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な汎用のパーソナルコンピュータなどに、プログラム記録媒体からインストールされる。
図33は、上述した一連の処理をプログラムにより実行するコンピュータ500のハードウェアの構成例を示すブロック図である。
CPU(Central Processing Unit)501、ROM(Read Only Memory)502、RAM(Random Access Memory)503は、バス504により相互に接続されている。
バス504には、さらに、入出力インタフェース510が接続されている。入出力インタフェース510には、キーボード、マウス、マイクロホンなどよりなる入力部511、ディスプレイ、スピーカなどよりなる出力部512、ハードディスクや不揮発性のメモリなどよりなる記憶部513、ネットワークインタフェースなどよりなる通信部514、光ディスクや半導体メモリなどのリムーバブルメディア521を駆動するドライブ515が接続されている。
以上のように構成されるコンピュータ500では、CPU501が、例えば、記憶部513に記憶されているプログラムを入出力インタフェース510及びバス504を介してRAM503にロードして実行することにより、上述した一連の処理が行われる。
CPU501が実行するプログラムは、例えばリムーバブルメディア521に記録して、あるいは、ローカルエリアネットワーク、インターネット、デジタル放送といった、有線または無線の伝送媒体を介して提供され、記憶部513にインストールされる。
なお、コンピュータが実行するプログラムは、本明細書で説明する順序に沿って時系列に処理が行われるプログラムであっても良いし、並列に、あるいは呼び出しが行われたとき等の必要なタイミングで処理が行われるプログラムであっても良い。
また、本明細書において、記録媒体に記録されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
また、本明細書において、システムとは、複数のデバイス(装置)により構成される装置全体を表わすものである。
また、以上において、1つの装置(または処理部)として説明した構成を分割し、複数の装置(または処理部)として構成するようにしてもよい。逆に、以上において複数の装置(または処理部)として説明した構成をまとめて1つの装置(または処理部)として構成されるようにしてもよい。また、各装置(または各処理部)の構成に上述した以外の構成を付加するようにしてももちろんよい。さらに、システム全体としての構成や動作が実質的に同じであれば、ある装置(または処理部)の構成の一部を他の装置(または他の処理部)の構成に含めるようにしてもよい。つまり、本発明の実施の形態は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能である。