以下、発明を実施するための形態(以下実施の形態とする)について説明する。なお、説明は以下の順序で行う。
1.第1の実施の形態(エンコーダ)
2.第2の実施の形態(デコーダ)
3.第3の実施の形態(エンコーダ)
4.第4の実施の形態(パーソナルコンピュータ)
<1.第1の実施の形態>
[概要]
従来のアーカイブシステムまたは画像のデータベースでは、マスタ画像と呼ばれる非圧縮の画像を記憶・保持しておき、これを必要に応じて符号化して、符号化結果のファイルをネットワーク経由で配信したり、記録メディアに保存したりする等のオペレーションが行われる。
映画制作では、まず35mmまたは60mmフィルムで撮影して、フィルムスキャンコンバータという機器を用いてデジタルデータにコンバートする。このデジタル化された映画ソースがマスタ画像になる。
医用の場合も、レントゲン写真等のフィルムがフィルムスキャンされ、デジタルコンバートされて得られたデジタルデータがマスタ画像になる。
また、最近の一眼レフのデジタルカメラ等では、CCD(Charge Coupled Device)やCMOS(Complementary Metal Oxide Semiconductor)のイメージセンサから取得したRAWデータまたはRGBデータを、符号化せずにメモリカードに保存することができるものも存在する。
以上の様な、符号化されていない(非符号化の)マスタ画像は、画像としてのデータに欠損がないため重要であるが、そのデータサイズが膨大になってしまう。従って、マスタ画像をネットワーク経由で転送する場合や、メモリカードに多くの画像を記録する場合、そのマスタ画像に対して何らかの符号化を行うことが余議なくされる。
また、このようなマスタ画像を記録する場合も、そのマスタ画像を記録させるハードディスクの容量は有限である。従って、より多くのマスタ画像をハードディスクに記憶させることができるように、マスタ画像を可逆符号化してからハードディスクに記憶させる方が望ましい。その際、マスタ画像はテープなどのより安価な記録媒体にセーブしておくのが便利である。
可逆符号化(ロスレス符号化とも称する)の技術としては、例えば、ZipやLZ77等があるが、画像の圧縮には不適である(圧縮率が悪い)。また、国際規格のJPEG(Joint Photographic Experts Group)にも、可逆符号化がJPEG-LSとして規格化されているが、実用性が低かった。
可逆符号化の規格として、さらに、JPEG2000がある。このJPEG2000は、可逆と非可逆の2つのオプションが用意されており、さらに、スケラビリティ(解像度、画質、コンポーネントなど)などの他の優れた利点を兼ね備えている。このJPEG2000は、非可逆用の符号化として、例えばデジタルシネマに利用される。DCI規格(Digital Cinema Initiatives)によれば、JPEG2000 Part-1を符号化・復号技術として使うことが決められている。
また、JPEG2000は、可逆用の符号化としても利用される。例えば、非符号化のマスタ画像を一時保存する際の符号化処理に利用される。また、JPEG2000の特徴であるスケラビリティを利用して、まず可逆符号化を行って可逆のファイルを生成しておき、必要に応じてDCI規格などの非可逆なファイルに変換するような場合にも利用される。
特許文献1には、ビットシフト器とウェーブレット変換器とで構成される固定小数点型ウェーブレット変換器と、ウェーブレット変換器で構成される整数型ウェーブレット変換器の両方を備え、可逆変換および非可逆変換の両方を行うことができ、画質や圧縮率の選択の自由度を高め得るような画像符号化装置が記載されている。
しかしながら、上述したようなJPEG2000方式の場合、可逆符号化の処理量が大きすぎ、実用的でなかった。JPEG2000のエントロピ符号化では、ビットモデリングと算術符号化を組み合わせたEBCOT(Embedded Block Coding with Optimized Truncation)という技術が採用されている。EBCOTはJPEG2000の高い圧縮性能の基盤になっている反面、非常に計算負荷が大きい。JPEG2000の可逆符号化の場合、EBCOTが全ビットプレーンに対して実行されるため、更に計算負荷が増大する。したがって、JPEG2000可逆符号化方式のエンコーダを実現する場合、この負荷の大きさによりハードウェアコストが許容範囲を超えるほど増大してしまい、実現が困難になる恐れがあった。
また、処理負荷の増大から、符号化の処理時間が許容範囲を超えるほど増大する恐れがあった。例えば、DCI規格のマスタ画像は高解像度画像(例えば4K×2K)であり、JPEG2000可逆符号化方式により、このようなマスタ画像を1ピクチャ分可逆符号化すると、一般的なエンコーダではその処理に数秒を要する。このペースでは、例えば約2時間程度のコンテンツの符号化を行うのに、全体で数日の期間を要する。このように処理時間が増大すると、例えば、ハードウェア占有や電気代等の処理コストだけでなく、作業員の人件費も増大する恐れがある。
従って、圧縮率を犠牲にしないで、JPEG2000圧縮の計算負荷を軽減する手段の確立が、非常に望まれてきた。
本開示はこのような問題を解決するためのものであり、データの符号化または復号の負荷を低減させることができるようにするものである。
例えば、特許文献2では、特にJPEG2000可逆符号化の場合の計算負荷を軽減する手段について述べたものであったが、非可逆符号化については特に言及していなかった。
しかしながら、JPEG2000可逆符号化と非可逆符号化では、用いるウェーブレット変換が異なる。さらに、非可逆符号化では、目標符号量に合わせたレート制御が必要になる。したがって、非可逆符号化の場合、可逆符号化の場合に比べて格段に制御が困難になる。したがって、可逆符号化処理の計算負荷を軽減する方法を、非可逆符号化処理に単純に適用しても、画質の劣化および処理速度の低減を抑制しながら適切にレート制御を行うことは困難であった。
そこで、以下においては、非可逆符号化においても、画質の劣化および処理速度の低減を抑制しながら適切にレート制御を行う事ができるようにする方法について説明する。
[エンコーダ]
図1は、エンコーダの主な構成例を示すブロック図である。図1に示されるエンコーダは、画像データをJPEG(Joint Photographic Experts Group)2000の方式で符号化する符号化装置である。エンコーダは、画像データを非可逆符号化する。
エンコーダ100は、画像データをウェーブレット変換し、得られた係数を、コードブロック毎にビットプレーンに展開し、ビットプレーン毎にエントロピ符号化する。
JPEG2000のビットプレーンは、下位ビット側のものほどランダムノイズが多くなる傾向があり、エントロピ符号化による圧縮の圧縮率(メリット)が低下する。これに対して、エントロピ符号化の処理量(デメリット)は、どのビットプレーンを処理対象とする場合も大きな変化はない。つまり、処理対象のビットプレーンが下位ビット側になるほど、エントロピ符号化により得られるメリットが、デメリットに対して小さくなる。
そこで、エンコーダ100は、上位ビット(MSB)側のビットプレーンから順にエントロピ符号化していき、途中のビットプレーンにおいてそのエントロピ符号化を終了する。つまり、エンコーダ100は、上位ビット側の一部のビットプレーンのみエントロピ符号化し、残りの下位ビット側のビットプレーンは符号化せずに出力する。
換言すれば、エンコーダ100は、得られる効果が大きい、上位ビット側のビットプレーンに対してのみエントロピ符号化を行い、得られる効果が小さい、下位ビット側のビットプレーンに対しては符号化処理を省略する。この符号化処理の省略により、エンコーダ100は、処理量を低減させることができる。しかも、圧縮率が低くなる下位ビット側のビットプレーンの符号化処理のみを省略するので、圧縮効率に対する影響を小さくすることができる。
さらに、エンコーダ100は、レート制御を行う。一般的に、レート制御においてデータ量を低減させる場合、できるだけ画質を劣化させないように(レート制御の影響が画質に表れないように)、下位ビット側のビットプレーンから優先的に削除する。
しかしながら、下位ビット側のビットプレーンは、符号化されていない非符号化のデータ(非符号化データ)である。つまり、下位ビット側のビットプレーンには劣化が存在しない。したがって、このような下位ビット側のビットプレーンを削除すると、画質への影響(画質の低減)が大きくなる恐れがある。
そこでエンコーダ100は、その下位ビット側のビットプレーンを削除せずに、それよりも上位の、符号化されたビットプレーンの中の下位ビット側から優先的に削除する。
このようにすることにより、エンコーダ100は、非可逆符号化においても、画質の劣化および処理速度の低減を抑制しながら適切にレート制御を行う事ができる。また、削除するビットプレーンの符号化処理を省略することにより、エンコーダ100は、処理速度をさらに向上させる事ができる。
図1に示されるように、エンコーダ100は、DCレベルシフト部101、ウェーブレット変換部102、量子化部103、コードブロック化部104、およびビットプレーン展開部105を有する。エンコーダ100は、さらに、非符号化データ量算出部106、選択部107、符号化部108、レート制御部109、合成部110、埋め込み部111、およびパケット生成部112も有する。
DCレベルシフト部101は、後段のウェーブレット変換を効率的に行うために画像データのDC成分のレベルシフトを行う。例えば、RGB信号が正の値(符号無しの整数)を持っている。そこで、DCレベルシフト部101は、そのことを利用し、原信号のダイナミックレンジを半分にするレベルシフトを行うことで、符号化効率の向上を図る。従ってYCbCr信号のCbやCr(色差信号)の様に符号(正負両方あり)の整数値を持つ信号を原信号とする場合、このレベルシフトは行われない。
ウェーブレット変換部102は、通常、低域フィルタと高域フィルタから構成されるフィルタバンクによって実現される。また、デジタルフィルタは通常複数タップ長のインパルス応答(フィルタ係数)を有するので、ウェーブレット変換部102は、フィルタリングが行えるだけの入力画像を予めバッファリングするバッファを有する。
ウェーブレット変換部102は、DCレベルシフト部101より出力された画像データを、フィルタリングに最低限必要なデータ量以上取得する。ウェーブレット変換部102は、そのDCレベルシフト後の画像データに対して、所定のウェーブレット変換フィルタを用いてフィルタリングを行い、ウェーブレット係数を生成する。なお、ウェーブレット変換部102は、画像の垂直方向および水平方向のそれぞれに対して、画像データを低域成分と高域成分に分離するフィルタリングを行う。
そして、ウェーブレット変換部102は、このようなフィルタリング処理を、図2に示されるように、垂直方向および水平方向の両方において低域成分として分離されたサブバンドに対して再帰的に所定回数繰り返す。これは、画像のエネルギーの多くが低域成分に集中しているからである。
図2は、分割レベル数3のウェーブレット変換処理により生成されるサブバンドの構成例を示す図である。この場合、ウェーブレット変換部102は、まず、画像全体をフィルタリングし、サブバンド3LL(図示せず)、3HL、3LH、および3HHを生成する。次に、ウェーブレット変換部102は、生成されたサブバンド3LLに対して再度フィルタリングを行い、2LL(図示せず)、2HL、2LH、および2HHを生成する。さらに、ウェーブレット変換部102は、生成されたサブバンド2LLに対して再度フィルタリングを行い、0LL、1HL、1LH、および1HHを生成する。
ウェーブレット変換部102は、フィルタリングにより得られたウェーブレット係数を、サブバンド毎に、量子化部103に供給する。量子化部103は、例えばレート制御部109の制御に応じて、ウェーブレット変換部102から取得したウェーブレット係数を量子化する。量子化部103は、得られた量子化係数をコードブロック化部104に供給する。
なお、JPEG2000の規格では、可逆符号化の場合、量子化処理は省略される。換言すれば、エンコーダ100が可逆圧縮を行う場合、量子化部を省略し、ウェーブレット変換部102において得られたウェーブレット係数が、コードブロック化部104に供給されるようにすればよい。
コードブロック化部104は、量子化されたサブバンド毎のウェーブレット係数を、予め定められた所定の大きさの、エントロピ符号化の処理単位であるコードブロックに分割する。図3は各サブバンド中のコードブロックの位置関係を示したものである。例えば64×64画素程度のサイズのコードブロックが、分割後のすべてのサブバンド中に生成される。図2の例において、最も分割レベルが小さい3HHのサブバンドの大きさが例えば640×320画素であるとすると、64×64画素のコードブロックは合計50個存在することになる。後段の各処理部は、このコードブロック毎に処理を行う。もちろん、このコードブロックのサイズ(画素数)は任意である。
コードブロック化部104は、各コードブロックをビットプレーン展開部105に供給する。ビットプレーン展開部105は、そのコードブロック毎の係数データを、ビットの位毎のビットプレーンに展開する。
ビットプレーンは、所定の数のウェーブレット係数よりなる係数群(例えばコードブロック)を、1ビット毎、つまり位毎に分割(スライス)したものである。つまり、ビットプレーンは、それぞれが複数ビットのビット深度を持つ複数のデータの、互いに同一の位のビット(係数ビット)の集合である。
図4にその具体例を示す。図4の左図は縦4個、横4個の計16個の係数を示している。この16個の係数のうち、絶対値が最大のものは13で、2進数で1101と表現される。ビットプレーン展開部105は、このような係数群を、絶対値を示す4枚のビットプレーン(絶対値のビットプレーン)と、符号を示す1枚のビットプレーン(符号のビットプレーン)に展開する。つまり、図4中左の係数群は、図4中右に示されるように、4枚の絶対値のビットプレーンと1枚の符号のビットプレーンに展開される。ここで、絶対値のビットプレーンの要素はすべて0か1の値をとる。また、符号を示すビットプレーンの要素は、係数の値が正であることを示す値、係数の値が0であることを示す値、または係数の値がマイナスを示す値のいずれかをとる。
なお、このようにビットプレーンとされる係数群における係数の数は任意である。以下においては、処理単位を統一することで各部における処理を容易にするために、ビットプレーン展開部105が、係数をコードブロック毎にビットプレーン展開するものとして説明する。
ビットプレーン展開部105は、このように展開したビットプレーンを、係数の最上位ビット(MSB:Most Significant Bit)から最下位ビット(LSB:Least Significant Bit)に向かう順に、非符号化データ量算出部106に供給する。つまり、ビットプレーン展開部105は、ビット深度の上位ビット側から下位ビット側に向かう順に、展開したビットプレーンを非符号化データ量算出部106に供給する。
なお、このビットプレーンの供給順は任意とすることも可能であるが、エンコーダ100や後述するデコーダの各部がその順序を予め把握しておく必要がある。
非符号化データ量算出部106は、符号化ビットプレーン数Nを取得する(符号化ビットプレーン数Nの指定を受け付ける)。符号化ビットプレーン数Nは、コードブロック(ビットプレーン展開部105による展開処理の処理単位)毎の、符号化するビットプレーンの数を示す。つまり、符号化ビットプレーン数Nは、各コードブロックのビットプレーン群のうち、いくつのビットプレーンを符号化するかを示す。
この符号化ビットプレーン数Nは、例えば、予め定められていてもよいし、エンコーダ100の外部(例えばユーザ等)から指定されるようにしてもよい。つまり、符号化ビットプレーン数Nは、不変であっても可変であっても良い。
非符号化データ量算出部106は、この符号化ビットプレーン数Nを用いて、ビットプレーン展開部105から取得したビットプレーンについて、符号化しないビットプレーンの総データ量である非符号化データ量(Bit_BP)を算出する。符号化されないビットプレーンは、MSB乃至MSBからN番目の位のビットプレーンを除いた、残りの下位ビット側のビットプレーンである。つまり、符号化されないビットプレーンは、MSBから(N+1)番目の位乃至LSBのビットプレーンである。
なお、以下においては、位をMSBから数えるものとし、「MSBからM番目の位」のことを「M番目の位」と称する。例えば、「MSBからN番目の位」のことを「N番目の位」と称し、「MSBから(N+1)番目の位」のことを「(N+1)番目の位」と称する。
非符号化データ量算出部106は、その残りの下位ビット側のビットプレーンの各データ量を加算し、非符号化データ量(Bit_BP)を算出する。
非符号化データ量算出部106は、算出した非符号化データ量(Bit_BP)をレート制御部109に供給する。また、非符号化データ量算出部106は、ビットプレーン展開部105から取得したビットプレーンを選択部107に供給する。
選択部107も符号化ビットプレーン数Nを取得する。選択部107は、この符号化ビットプレーン数Nを用いて、非符号化データ量算出部106から取得したビットプレーンを符号化するか否かを、そのビットプレーン毎に選択する。
選択部107は、符号化すると判定したビットプレーンを符号化部108に供給する。また、選択部107は、符号化しないと判定したビットプレーンを合成部110に供給する。
上述したように、JPEG2000のビットプレーンの特徴から、MSBに近いビットプレーンほど画質に与える影響が大きく圧縮効率が高い。これに対して、LSBに近いビットプレーンほどランダムノイズが多くなる傾向があり、その圧縮率は自ずと悪くなる。そこで、選択部107は、圧縮効率が低い下位のビットプレーンにおいては、符号化処理を省略し、その代わりに符号化前のビットプレーンを出力するように、ビットプレーン毎に処理の選択を行う。
つまり、選択部107は、上位ビット側の符号化ビットプレーン数Nのビットプレーンを符号化すると判定し、符号化部108に供給し、それより下位のビットプレーンは符号化しないと判定し、合成部110に供給する。
このような選択部107の制御により、エンコーダ100は、下位のビットプレーンにおいてエントロピ符号化を省略することができる。したがって、エンコーダ100は、符号化処理の負荷を低減させることができる。これにより、例えばコストの低減や処理時間の短縮を実現することができる。
符号化部108は、入力されるビットプレーンに対して、JPEG2000規格で定められたEBCOT(Embedded Coding with Optimized Truncation)と呼ばれるエントロピ符号化を行う。EBCOTは、所定の大きさのブロック毎にそのブロック内の係数の統計量を測定しながら符号化を行う手法である。
図1に示されるように、符号化部108は、ビットモデリング部121および算術符号化部122を有する。ビットモデリング部121は、JPEG2000規格で定められた手順に従って、係数データに対してビットモデリングを行い、算術符号化部122にコンテキストを送出する。算術符号化部122は、そのコンテキストを用いてビットプレーンを算術符号化する。
コードブロックの縦横のサイズは4から256まで2のべき乗で、通常使用される大きさは、32×32、64×64、128×32等がある。係数値がnビットの符号付き2進数で表されていて、bit0からbit(n−2)がLSBからMSBまでのそれぞれのビットを表すとする。残りの1ビットは符号を示す。符号ブロックの符号化は、MSB側のビットプレーンから順番に、次の3種類の符号化パスによって行われる。
(1)Significance Propagation Pass あるビットプレーンを符号化するSignificance Propagation Passでは、8近傍の少なくとも1つの係数が有意(Significant)であるようなnon-significant係数のビットプレーンの値が算術符号化される。その符号化したビットプレーンの値が1である場合は、符号が+であるか、−であるかが続けて算術符号化される。
ここでsignificanceという言葉について説明する。Significanceとは、各係数に対して符号化されたときにsignificantを表す1に変化し、以降常に1であり続けるものである。従って、significanceとは、有効桁の情報をすでに符号化したか否かを示すフラグとも言える。あるビットプレーンでsignificantになれば、以降のビットプレーンではsignificantになったままである。
(2)Magnitude Refinement Pass
ビットプレーンを符号化するMagnitude Refinement Passでは、ビットプレーンを符号化するSignificance Propagation Passで符号化されていないsignificantな係数のビットプレーンの値が算術符号化される。
(3)Cleanup Pass
ビットプレーンを符号化するCleanup Passでは、ビットプレーンを符号化するSignificance Pass で符号化されていないnon-significanceな係数のビットプレーンの値が算術符号化される。また、その符号化されたビットプレーンの値が1である場合、符号が+であるか−であるかが続けて算術符号化される。
なお、以上の3つのPassでの算術符号化では、ケースに応じて(1)ZC(Zero Coding)、(2)RLC(Run-Length Coding)、(3)SC(Sign Coding)、または(4)MR(Magnitude Refinement)等の手法が使い分けられる。なお、ここではMQ符号化と呼ばれる算術符号が用いられるものとする。MQ符号化は、JBIG2で規定された学習型の2値算術符号である。JPEG2000では、すべての符号化パスで合計19種類のコンテキストがある。
これらの3つの符号化パスの用いられる順序の例は図5に示される。最初に最上位ビット(MSB)のビットプレーンであるビットプレーン(n−2){Bit-Plane(n−2)}がCleanup Passによって符号化される。続いて1枚ずつ順次LSB側に向かって各ビットプレーンが、上述した3つの符号化パスがSignificant Propagation Pass,Magnitude Refinement Pass,Cleanup Passの順序で用いられて符号化される。
ただし、実際には、符号化部108は、何番目の位のビットプレーンで初めて1が出てくるかをヘッダに書き、MSBから連続する、全ての係数が0のビットプレーン(ゼロビットプレーンと称する)は符号化しない。
次に、係数の走査(スキャニング)について図6を用いて説明する。コードブロックは高さ4個の係数毎にストライプ(stripe)に分けられるストライプの幅はコードブロックの幅に等しい。スキャン順とは、1個のコードブロック内の、全ての係数をたどる順番で、コードブロック中では上のストライプから下のストライプへの順序、ストライプの中では、左の列から右の列へ向かっての順序、列の中では上から下へという順序である。各符号化パスにおいてコードブロック中の全ての係数が、このスキャン順で処理される。
符号化部108は、レート制御部109により符号化を行わないように制御されるまで、各ビットプレーンに対してエントロピ符号化を行う。符号化部108の算術符号化部122は、生成した符号化データ(符号化後のビットプレーン)を、レート制御部109に供給する。
レート制御部109は、処理対象のコードブロック(ビットプレーン展開部105による展開処理の処理単位)に対して割り当てられた総データ量(Bit_CB)を取得する(総データ量(Bit_CB)の指定を受け付ける)。この総データ量(Bit_CB)は、例えば、符号化処理全体を制御する制御部(図示せず)等から指定される。この制御部は任意の情報に基づいて任意の方法で各コードブロックに割り当てる総データ量を決定し、それをレート制御部109に通知する。
また、レート制御部109は、非符号化データ量算出部106が算出した非符号化データ量(Bit_BP)を取得する。
レート制御部109は、これらの情報に基づいて合成部110に供給する符号化データの目標符号量を算出する。レート制御部109は、その目標符号量を達成するように(合成部110に供給する符号化データの符号量が目標符号量以下となるように)、符号化部108から供給される符号化データ(符号化後のビットプレーン)を必要に応じて削除して符号量を調整する。つまり、レート制御部109は、ビットプレーン単位で符号量を調整する。レート制御部109は、下位ビット側のビットプレーンから優先的に削除する。
レート制御部109は、符号量調整後の符号化データ(削除しなかった符号化後のビットプレーン)を合成部110に供給する。
より具体的に説明すると、レート制御部109には、符号化部108から符号化データ(符号化されたビットプレーン)が、MSB側からLSB側に向かう順に供給される。レート制御部109は、符号化データを取得する毎にその符号量を累算する。レート制御部109は、その累算値が目標符号量より小さい場合、取得した符号化データを合成部110に供給する。
符号量の累算値が目標符号量以上となった場合、レート制御部109は、今回取得した符号化データを破棄し、符号化部108に符号化処理を終了させ、それより下位ビット側のビットプレーン(符号化データ)の供給を停止させる。
また、レート制御部109は、取得したビットプレーン(符号化データ)の数を示す符号化ビットプレーン数N’を埋め込み部111に通知する。
このように、レート制御部109は、レートを下げる場合、選択部107により符号化処理が施されることが選択されるビットプレーンの下位ビット側を優先的に符号化しない(受け取らない)ように制御する。このとき、レート制御部109は、選択部107により符号化処理が施されないことが選択される、さらに下位ビット側のビットプレーン(非符号化データ)は取得するように制御する。したがって、レート制御部109は、画質の低減を抑制しながらレート制御を行うことができる。
また、そのレート制御の際に、レート制御部109は、ビットプレーンを削除したり残したりするのみで、特別な画像処理を必要としない。さらに、レート制御部109は、符号化部108の動作を制御し、不要な符号化処理を省略させる。したがって、レート制御部109は、符号化の負荷の増大を抑制することができる。つまり、レート制御部109は、画質の劣化や負荷の増大を抑制しながら、コードストリームの符号量の制御(レート制御)を適切に行うことができる。したがって、エンコーダ100は、非可逆符号化においても負荷の低減を実現させることができる。
合成部110は、レート制御部109から供給される符号化データ(符号化されたビットプレーン)を取得する。また、合成部110は、選択部107から供給される非符号化データ(符号化されていないビットプレーン)を取得する。合成部110は、これらの符号化データおよび非符号化データを合成し、ヘッダ等を付加して1本のコードストリームを生成し、それを埋め込み部111に供給する。
埋め込み部111は、合成部110から供給されるコードストリームの所定の位置にレート制御部109から供給される符号化ビットプレーン数N’を示す情報を埋め込む。
例えば、埋め込み部111は、符号化条件などの情報を記述する部分であるCOD(Coding style default)パラメータ(ISO(International Organization for Standardization)154441 JPEG2000 Part-1規格書より)内部のSPcodまたはSPcocパラメータの空きビットに、符号化ビットプレーン数N’を示す情報を多重化する。
図7はこの埋め込みを説明するための図である。図7に示される表は、SPcodやSPcocパラメータとして与えられる8ビットの構成を説明するものである。この表に示されるように、SPcodやSPcocパラメータの下位6ビットには、それぞれ各種情報が割り当てられているが、これらのMSBから上位2ビットは、JPEG2000規格ではReserved、つまり空きビットになっている。埋め込み部111は、例えば、この2ビットを用いて符号化ビットプレーン数N’を指定する。
なお、このような制御情報の埋め込み位置は、このコードストリームの復号処理を行うデコーダが特定可能な位置であれば任意である。この埋め込み位置は予め定められていてもよいし、埋め込み位置を示す情報を別途用意するようにしてもよい。また、制御情報の情報量も任意である。
例えば、レート制御部109が符号化データを削除しなかった場合、レート制御部109から供給される符号化ビットプレーン数N’は符号化ビットプレーン数Nに一致する。つまり、この場合、SPcodやSPcocパラメータの上位2ビットには、選択部107が符号化するビットプレーンとして選択したビットプレーンの数が埋め込まれる。
このような埋め込み処理の後、埋め込み部111は、コードストリームをパケット生成部112に供給する。このように、埋め込み部111が符号化ビットプレーン数N’(若しくはN)をコードストリームに埋め込むことにより、このコードストリームを復号するデコーダは、コードストリームよりその情報を抽出し、その情報に基づいて適切にコードストリームを復号することができる。例えば、デコーダは、他の情報を必要とせずに、コードストリームのみから、復号するビットプレーン数を特定することができる。これによりデコーダの構成や処理を容易にすることができる。
なお、この情報は、コードストリームとは別にデコーダに提供されるようにしてもよい。その場合、埋め込み部111は省略可能であり、その分、エンコーダ100の処理が容易になるが、この情報の授受についてデコーダとの間の取り決めが必要になる。また、デコーダが、その別途提供される情報を、復号処理に利用することができるようにする必要がある。
パケット生成部112は、供給されたコードストリームをパケット化し、生成した各パケットをエンコーダ100の外部に出力する。このパケットは例えば所定の伝送路や記憶媒体を介してエンコーダ100に対応するデコーダに供給される。
[選択部]
図8は、図1の選択部107の主な構成例を示すブロック図である。図8に示されるように選択部107は、符号化ビットプレーン数取得部131および処理選択部132を有する。
符号化ビットプレーン数取得部131は、図示せぬユーザや制御部等からの符号化ビットプレーン数Nの指定を受け付ける。つまり、符号化ビットプレーン数取得部131は、符号化ビットプレーン数Nを取得する。なお、上述したように符号化ビットプレーン数Nは予め定められた定数であってもよく、その場合、符号化ビットプレーン数取得部131が予め符号化ビットプレーン数Nを保持していてもよい。符号化ビットプレーン数取得部131は、符号化ビットプレーン数Nを処理選択部132に供給する。
また、処理選択部132は、非符号化データ量算出部106を介して供給されるビットプレーンを取得する。このビットプレーンは、MSBからLSBに向かう順に供給される。
処理選択部132は、符号化ビットプレーン数N番目の位より上位のビットプレーン(上位ビット側のビットプレーン)に対して符号化処理を行うように制御する(符号化処理を選択する)。すなわち、処理選択部132は、N番目の位より上位のビットプレーンを符号化するビットプレーン(符号化用ビットプレーン)として選択し、符号化部108に供給する。
また、処理選択部132は、(N+1)番目の位より下位のビットプレーン(下位ビット側のビットプレーン)に対して符号化処理を行わないように制御する(符号化処理を選択しない)。すなわち、処理選択部132は、(N+1)番目の位より下位のビットプレーンを符号化しないビットプレーン(非符号化用ビットプレーン)として選択し、合成部110に供給する。
つまり、処理選択部132は、MSBからLSBに向かう順に供給されるビットプレーンをカウントし、N番目までのビットプレーンを符号化用ビットプレーンとして符号化部108に供給し、(N+1)番目以降のビットプレーンを非符号化用ビットプレーンとして合成部110に供給する。
例えば、指定ビットプレーン数Nが「4」であるとする。その場合、図9に示されるように、処理選択部132は、ビットプレーン番号「0」乃至「3」の4つのビットプレーンについて、CPパス、SPパス、およびMRパスのそれぞれについて符号化が行われるように、それらのビットプレーンを符号化部108に供給する。
また、処理選択部132は、指定ビットプレーン数を超えるビットプレーン番号「4」以降のビットプレーンについて、符号化処理が省略され、非符号化データが出力されるように、それらのビットプレーンを合成部110に供給する。特にCPパスにおいては、非符号化データはバイト境界に合うようにパディングされた後、終端される。
また、例えば、指定ビットプレーン数Nが「2」であるとする。その場合、図10に示されるように、処理選択部132は、ビットプレーン番号「0」および「1」の2つのビットプレーンについて、CPパス、SPパス、およびMRパスのそれぞれについて符号化が行われるように、それらのビットプレーンを符号化部108に供給する。
また、処理選択部132は、指定ビットプレーン数を超えるビットプレーン番号「2」以降のビットプレーンについて、符号化処理が省略され、非符号化データが出力されるように、それらのビットプレーンを合成部110に供給する。特にCPパスにおいては、非符号化データはバイト境界に合うようにパディングされた後、終端される。
以上のように、選択部107は、容易に、指定ビットプレーン数N分のビットプレーンを符号化し、それ以下のビットプレーンを符号化しないように制御することができる。換言すれば、エンコーダ100は、指定ビットプレーン数Nによって、非符号化データが選択される位置(位)を、確実に制御することができる。
[レート制御部]
図11は、図1のレート制御部109の主な構成例を示すブロック図である。図11に示されるように、レート制御部109は、符号量算出部151、総データ量取得部152、目標符号量算出部153、および出力制御部154を有する。
符号量算出部151は、符号化部108から供給されるNビットプレーン分の符号化データの符号量(Bit_N)を算出し、取得した符号化データと、算出した符号量(Bit_N)とを出力制御部154に供給する。
より具体的には、符号量算出部151は、ビットプレーン毎の符号化データが供給される度に、その符号量を累算し、その符号化データと、その時点の符号量の累算値(Bit_N)とを出力制御部154に供給する。
総データ量取得部152は、処理対象コードストリームに割り当てられた総データ量(Bit_CB)を取得すると、それを目標符号量算出部153に供給する。目標符号量算出部153は、総データ量取得部152から供給される総データ量(Bit_CB)と、非符号化データ量算出部106から供給される非符号化データ量(Bit_BP)とを用いて、符号化データ(符号化されるビットプレーン)の目標符号量(Bit_N')を算出する。
より具体的には、目標符号量算出部153は、以下の式(1)のように目標符号量(Bit_N')を算出する。
Bit_N' = Bit_CB − Bit_BP ・・・(1)
つまり、処理対象のコードブロックに対して割り当てられた総データ量(Bit_CB)から、非符号化データ量(Bit_BP)を減算した値が目標符号量(Bit_N')となる。
目標符号量算出部153は、このように算出した目標符号量(Bit_N')を出力制御部154に供給する。
出力制御部154は、符号量算出部151を介して供給されるNビットプレーン(符号化データ)に対して、その符号化量(Bit_N)が目標符号量(Bit_N')以下となるように、レート制御を行う。
より具体的には、出力制御部154は、符号量算出部151から符号化データと、その時点の符号量の累算値(Bit_N)が供給されると、その符号量(Bit_N)と、目標符号量算出部153から取得した目標符号量(Bit_N')とを比較する。
符号量(Bit_N)が目標符号量(Bit_N')よりも小さい場合、出力制御部154は、取得した符号化データを合成部110に供給する。また、出力制御部154は、合成部110に供給した符号化データのビットプレーン数をカウントする。この場合、次のビットプレーンに対応する符号化データが符号量算出部151に供給され、同様の処理が繰り返される。
符号量(Bit_N)が目標符号量(Bit_N')と等しい場合、出力制御部154は、取得した符号化データを合成部110に供給する。さらに、出力制御部154は、符号化部108を制御し、それより下位のビットプレーンの符号化(処理対象コードブロックに対する符号化)を終了させる。この場合、処理対象が次のコードブロックに移るまで符号化データはレート制御部109に供給されない。
また、出力制御部154は、合成部110に供給した符号化データのビットプレーン数をカウントし、さらに、これまで合成部110に供給した処理対象コードブロックのビットプレーン数N’を埋め込み部111に供給する。さらに、出力制御部154は、このカウント値N’を初期化する(例えば0にする)。
符号量(Bit_N)が目標符号量(Bit_N')よりも大きい場合、出力制御部154は、取得した符号化データを破棄する。さらに、出力制御部154は、符号化部108を制御し、それより下位のビットプレーンの符号化(処理対象コードブロックに対する符号化)を終了させる。この場合、処理対象が次のコードブロックに移るまで符号化データはレート制御部109に供給されない。
また、出力制御部154は、これまで合成部110に供給した処理対象コードブロックのビットプレーン数N’を埋め込み部111に供給する(今回取得した符号化データは破棄したのでカウントされない)。さらに、出力制御部154は、このカウント値N’を初期化する(例えば0にする)。
以上のように、レート制御部109は、合成部110に供給する符号化データの符号量を、処理対象コードブロックに割り当てられた総データ量(Bit_CB)と非符号化データ量(Bit_BP)を用いて算出された目標符号量(Bit_N')以下に抑制する。
図12に示される例の場合、あるコードブロックのMSBからビットプレーン番号4までがEBCOT符号化される。この場合、符号化データの符号量はBit_Nとなり、残りのビットプレーンのデータ量である非符号化データ量はBit_BPとなる。Bit_NとBit_BPとの和は、処理対象コードブロックに割り当てられる総データ量(Bit_CB)となる。
しかしながら、この処理対象コードブロックに割り当てられる総データ量(Bit_CB)の値が小さくなった場合、非符号化データ量(Bit_BP)は変化しないので、総データ量(Bit_CB)に合わせて符号量(Bit_N)を小さくする必要がある。
そこで、図13に示されるように、レート制御部109は、例えばビットプレーン番号2の部分で境界を設け、それ以降の符号化データは、合成部110に供給しない(削除する)ようにする。
このようにレート制御部109は、下位ビット側の符号化データを優先的に削除することによりレート制御を行うことができる。これにより、レート制御部109は、情報の欠損がない非符号化データを削除せずにレート制御を行うことができるので、画質の劣化を抑制しながらレート制御を行うことができる。
また、レート制御部109は、容易に目標符号量を算出し、その目標符号量を用いて符号化データを削除するか否かを制御するのみで容易に適切なレート制御を実現することができる。
さらに、レート制御部109は、符号量が目標値に達した時点でそのコードブロックに対する符号化処理を終了させるので、負荷を低減させることができる。これにより。符号化処理の高速化や、製造コストの低減を実現することができる。
[符号化処理の流れ]
次に、図14のフローチャートを参照して、エンコーダ100による符号化処理の流れの例を説明する。動画像データを符号化するエンコーダ100は、以下に説明する符号化処理を動画像の各フレームについて実行する。
符号化処理が開始されると、DCレベルシフト部101は、ステップS101において、入力された画像データのDCレベルをシフトする。ステップS102において、ウェーブレット変換部102は、画像データをウェーブレット変換する。ステップS103において量子化部103は、ステップS102の処理により得られたウェーブレット係数を量子化する。
ステップS104において、コードブロック化部104は、ステップS103の処理により量子化されたウェーブレット係数をコードブロック単位で分割する。ステップS105において、ビットプレーン展開部105は、処理対象コードブロックをビットプレーンに展開する。ステップS106において、非符号化データ量算出部106は、符号化ビットプレーン数Nに基づいて、処理対象コードブロックの非符号化データ量(Bit_BP)を算出する。
ステップS107において、選択部107は選択処理を行い、各ビットプレーンを符号化用ビットプレーンと非符号化用ビットプレーンに分ける。ステップS108において、符号化部108は、符号化用ビットプレーンをエントロピ符号化する。
ステップS109において、レート制御部109は、符号化ビットプレーン数を制御することにより、レート制御を行う。ステップS110において、合成部110は、ステップS109のレート制御が行われた符号化データと、符号化されていない非符号化用ビットプレーンである非符号化データとを合成し、コードストリームを生成する。
ステップS111において、埋め込み部111は、ステップS109のレート制御後の符号化ビットプレーン数N’をコードストリームに埋め込む。
ステップS112において、ビットプレーン展開部105は、全てのコードブロックを処理したか否かを判定する。全てのコードブロックを処理していないと判定した場合、ビットプレーン展開部105は、処理をステップS113に進め、処理対象を次のコードブロックに移し、処理をステップS105に戻し、それ以降の処理を繰り返す。
ステップS105乃至ステップS113の処理が繰り返し実行され、ステップS112において全てのコードブロックが処理されたと判定された場合、符号化処理が終了される。
なお、上述した各処理は、矛盾が生じない限り、適宜、順序を変えて実行されたり、並列に実行されたりしてもよい。例えば、ステップS105において、処理対象コードブロックがビットプレーンに展開された後、ステップS106乃至ステップS109の各処理が、1ビットプレーンずつ行われるようにしてもよい。また、例えば、あるビットプレーンに対するあるステップの処理が開始されると、その処理と並行して、次のビットプレーンに対するその前のステップの処理が行われるようにしてもよい。
[選択処理の流れ]
次に、図15のフローチャートを参照して、図14のステップS107において実行される選択処理の流れの例について説明する。
選択処理が開始されると、符号化ビットプレーン数取得部131は、ステップS131において、符号化ビットプレーン数Nを取得し、処理選択部132に供給する。ステップS132において、処理選択部132は、非符号化データ量算出部106から供給される処理対象のビットプレーンを取得する。処理選択部132は、これまでに取得した処理対象コードブロックに属するビットプレーンの数をカウントする。
ステップS133において、処理選択部132は、これまでに取得したビットプレーンの数であるビットプレーン取得数が符号化ビットプレーン数Nを超えたか否かを判定する。
ビットプレーン取得数が符号化ビットプレーン数N以下であると判定された場合、処理選択部132は、処理をステップS134に進める。ステップS134において、処理選択部132は、処理対象のビットプレーンを符号化用ビットプレーンとして符号化部108に供給し、符号化させる。ステップS134の処理を終了すると、処理選択部132は、処理をステップS136に進める。
また、ステップS133において、ビットプレーン取得数が符号化ビットプレーン数Nを超えたと判定された場合、処理選択部132は、処理をステップS135に進める。ステップS135において、処理選択部132は、処理対象ビットプレーンを非符号化用ビットプレーンとして合成部110に供給し、符号化させずに出力させる。ステップS135の処理を終了すると、処理選択部132は、処理をステップS136に進める。
ステップS136において、処理選択部132は、処理対象コードブロックの全てのビットプレーンを処理したか否かを判定する。未処理のビットプレーンが存在する場合、処理選択部132は、処理をステップS132に戻し、それ以降の処理を繰り返す。また、ステップS136において、全てのビットプレーンを処理したと判定された場合、処理選択部132は、選択処理を終了し、処理を図14のステップS107に戻し、ステップS108以降の処理を実行させる。
[レート制御処理]
次に、図16のフローチャートを参照して、図14のステップS109において実行されるレート制御処理の流れの例を説明する。
レート制御処理が開始されると、ステップS151において、目標符号量算出部153は、非符号化データ量算出部106が算出した非符号化データ量(Bit_BP)を取得する。ステップS152において、総データ量取得部152は、処理対象コードブロックに割り当てられた総データ量(Bit_CB)を取得する。
ステップS153において、目標符号量算出部153は、ステップS152において取得した総データ量(Bit_CB)から、ステップS151において取得した非符号化データ量(Bit_BP)を減算することにより、目標符号量(Bit_N')を算出する。
ステップS154において、符号量算出部151は、符号化部108から供給される符号化データを取得する。ステップS155において、符号量算出部151は、ステップS154において取得した符号化データの符号量(の累積値)(Bit_N)を算出する。
ステップS156において、出力制御部154は、ステップS155において算出された符号量(Bit_N)が、ステップS153において算出された目標符号量(Bit_N')に達したか否かを判定する。符号量(Bit_N)が目標符号量(Bit_N')より小さいと判定された場合、出力制御部154は、処理をステップS157に進める。
ステップS157において、出力制御部154は、ステップS154において今回取得した符号化データを合成部110に出力し、処理をステップS154に戻し、それ以降の処理を繰り返す。
また、ステップS156において、符号量(Bit_N)が目標符号量(Bit_N')以上であると判定された場合、出力制御部154は、処理をステップS158に進める。ステップS158において、出力制御部154は、符号化データの出力を終了する。より具体的には、符号量(Bit_N)が目標符号量(Bit_N')に一致する場合、出力制御部154は、ステップS154において今回取得した符号化データを合成部110に出力した後、それ以降の符号化データ(より下位ビット側のビットプレーンに対応する符号化データ)を出力するのを止める。また、符号量(Bit_N)が目標符号量(Bit_N')より大きい場合、出力制御部154は、ステップS154において今回取得した符号化データを破棄し、それ以降の符号化データ(より下位ビット側のビットプレーンに対応する符号化データ)を出力するのを止める。
ステップS159において、出力制御部154は、これまでに出力した処理対象コードブロックのビットプレーン数である符号化ビットプレーン数N’を求める。出力制御部154は、求めた符号化ビットプレーン数N’を埋め込み部111に供給する。
ステップS160において、出力制御部154は、符号化部108を制御し、符号化を終了させる。ステップS160の処理が終了すると、出力制御部154は、レート制御処理を終了し、図14のステップS109に処理を戻し、ステップS110以降の処理を実行させる。
[エンコード結果の例]
次に上述したエンコーダ100により符号化を行ったときの処理時間と画質について、図17および図18を参照して説明する。図17は、レート制御部109がレート制御処理において残す符号化データの数の違いによる速度の違いを示す図である。
なお、ここで、符号化ビットプレーン数N=4とする。つまり、選択部107は、4番目の位までのビットプレーンを符号化させて符号化データとし、5番目の位より下位のビットプレーンを符号化せずに非符号化データとする。
図17においては、5つの場合についてエンコーダ100全体の処理時間の長さを比較する。その1つ目は、処理対象コードブロックの全てのビットプレーンを符号化する場合(NoLazy)である。2つ目は、処理対象コードブロックの全ての符号化用ビットプレーンを符号化する(4番目(BP=4)の位より上位のビットプレーンを符号化する)場合(NormalLazy)である。3つ目は、処理対象コードブロックの3番目の符号化用ビットプレーンまでを符号化する(3番目(BP=3)の位より上位のビットプレーンを符号化する)場合(3BP)である。4つ目は、処理対象コードブロックの2番目の符号化用ビットプレーンまでを符号化する(2番目(BP=2)の位より上位のビットプレーンを符号化する)場合(2BP)である。5つ目は、処理対象コードブロックの1番目の符号化用ビットプレーンのみを符号化する(MSBのビットプレーンのみを符号化する)場合(1BP)である。
図17の例においては、各場合の処理時間の長さを、「NoLazy」の場合を基準として表している。また、図17の例においては、圧縮レートが0.25bppの場合、0.5bppの場合、1.0bppの場合、2.0bppの場合、および4.0bppの場合の、5つの場合についてそれぞれ比較している。
図17に示されるように、どの圧縮レートの場合も、処理対象コードブロックの最上位のビットプレーンのみを符号化する場合(1BPの場合)が最も処理時間が短い。つまり、エンコーダ100の処理時間は、圧縮レートに依らず、符号化するビットプレーン数が少なくなる程、短くなる。例えば、NoLazyを100%とした時、NormalLazyが95%程度なのに対して、BP=1では75%程度になっている。従ってJPEG2000で規定されているNormalLazyに比べても20%ものアドバンテージがある。
つまり、レート制御部109は、上述したようにレート制御を行うことにより、符号化処理の処理時間を低減させることができる。
図18は、レート制御部109がレート制御処理において残す符号化データの数の違いによる画質の違いを示す図である。
なお、図18においても図17の場合と同様に、符号化ビットプレーン数N=4とし、NoLazy、NormalLazy、3BP、2BP、および1BPの5つの場合について、エンコーダ100により生成された符号化データが復号されて得られる画像の画質(PSNR(Peak Signal-to-Noise Ratio)(ピーク信号対雑音比))を比較する。
図18に示されるように、どの圧縮レートの場合も、PSNRに大きな違いは現れない。つまり、レート制御部109は、上述したようにレート制御を行うにより、画質の低減を抑制することができる。
すなわち、エンコーダ100は、処理時間の増大や画質の劣化を抑制しながら、適切なレート制御を行うことができる。したがって、エンコーダ100は、非可逆符号化の場合であっても、適切なレート制御を実現し、負荷を低減させることができる。
<2.第2の実施の形態>
[デコーダの構成例]
次に、以上のように説明したエンコーダ100に対応するデコーダ(復号装置)について説明する。図19は、デコーダの構成例を示すブロック図である。
図19に示されるデコーダ200は、エンコーダ100より供給されるコードストリームをエンコーダ100の符号化方式に対応する復号方法で復号し、復号画像データを得る復号装置である。
デコーダ200は、エンコーダ100より供給されるコードストリームを解読し、エンコーダ100における圧縮データ・非圧縮データの選択を切り替えたビットプレーンを特定し、そのエンコーダ100の選択に合わせて各ビットプレーンの復号を行う。すなわち、デコーダ200は、エンコーダ100が符号化したビットプレーンについて、エンコーダ100の符号化方式に対応する復号方法で復号を行い、エンコーダ100が符号化しなかったビットプレーンについて、復号せずにそのまま利用する。つまり、デコーダ200は、各ビットプレーンを適宜復号して合成し、ベースバンドの画像データを生成する(復号画像データを得る)。
なお、以上においては、エンコーダ100がコードストリームをパケット化して出力するように説明した。したがって、エンコーダ100の出力を復号する場合、実際には、そのパケットを解析してコードストリームを抽出するパケット解析処理が必要になる。しかしながら、このパケット解析処理は任意の方法により可能であるので、以下においては、説明の簡略化のため、このパケット解析処理についての説明は省略する。
図19に示されるように、デコーダ200は、解読部201、処理選択部202、復号部203、ビットプレーン合成部204、コードブロック合成部205、逆量子化部206、ウェーブレット逆変換部207、およびDCレベル逆シフト部208を有する。
解読部201は、供給されたコードストリームを解読する。例えば、解読部201は、コードストリームに埋め込まれている、エンコーダ100における符号化ビットプレーン数N’を示す情報を抽出し、その情報に基づいて、処理対象のビットプレーンが符号化されているか否かを判定する。
より具体的には、例えば、解読部501は、JPEG2000のシンタックスに従ってコードストリームを解読し、図7に示されるSPcodまたはSPcocの上位2ビットをリードし、符号化ビットプレーン数N’を示す情報を抽出する。また、解読部201は、コードストリームに含まれるビットプレーン毎のデータを処理選択部202に供給する。その際、解読部201は、抽出した符号化ビットプレーン数N’に基づいて、供給するデータが符号化データであるか非符号化データであるかを処理選択部202に通知する。
例えば、解読部201は、コードストリームの先頭から符号化ビットプレーン数N’番目までのビットプレーンのデータを処理選択部202に供給する際に、そのデータが符号化データであることを処理選択部202に通知する。また、解読部201は、(N’+1)番目以降のビットプレーンのデータを処理選択部202に供給する際に、そのデータが非符号化データであることを処理選択部202に通知する。
なお、解読部501は、コードストリームに含まれる各コードブロックの全ビットプレーン数(全BP数)を示す情報を抽出し、ビットプレーン合成部204に供給する。なお、この全BP数が予め定められており、その情報をビットプレーン合成部204が予め保持しているようにしてもよい。その場合、この全BP数の供給は省略することができる。
以上のように、処理選択部202は、解読部からビットプレーン毎のデータを、そのデータが符号化データであるか、若しくは、非符号化データであるかを識別可能な状態で取得する。そして、処理選択部202は、解読部201から供給された符号化データを復号部203に供給する。また、処理選択部202は、解読部201から供給された非符号化データ(ビットプレーン)をビットプレーン合成部204に供給する。
復号部203は、ビットプレーン毎の符号化データをエンコーダ100の符号化に対応する復号方法で復号し、その復号結果(非符号化データ、すなわち、ビットプレーン)をビットプレーン合成部204に供給する。
図19の例の場合、復号部203は、算術復号部211およびビットモデリング部212を有する。算術復号部211は符号化データを復号し、ビットモデリング部212はビットプレーンに展開されたウェーブレット係数を生成する。
ビットプレーン合成部204は、復号部203と処理選択部202とからそれぞれビットプレーン(非符号化データ)を取得すると、それらを合成することによりビットプレーンの合成を行い、コードブロック単位の係数データを生成する。
ただし、上述したようにエンコーダ100におけるレート制御により一部のビットプレーンが削除されている場合(N>N’の場合)、このビットプレーンの合成の際にビットプレーン数が不足する。つまり、ビットプレーン合成部204に供給されるビットプレーンの数が全BP数より少ない場合、その差分だけビットプレーンがエンコーダ100のレート制御において削除されている。
ビットプレーン合成部204は、処理対象コードブロックについて、処理選択部202および復号部203から供給されるビットプレーンの数をカウントする。そして、ビットプレーン合成部204は、解読部201から供給される全BP数と、その1コードブロック分のビットプレーンのカウント値の差分値を算出する。
ビットプレーン合成部204は、その差分値の分、全ての係数の値がゼロのビットプレーンを生成し、処理選択部202および復号部203から供給される非符号化データと合成する。
より具体的には、復号部203から供給されるビットプレーンは、MSB乃至N’番目の位のビットプレーンであり、処理選択部202から供給されるビットプレーンは、(N+1)番目の位乃至LSBのビットプレーンである。したがって、それらの間の位、すなわち、(N’+1)番目の位乃至N番目の位は、ビットプレーンが割り当てられない空きの位となる。ビットプレーン合成部204は、この空きの位に、生成した全ての係数の値がゼロのビットプレーンを挿入する。
つまり、MSBからLSBに向かって、復号部203から供給されるビットプレーン、全ての係数の値がゼロのビットプレーン、および、処理選択部202から供給されるビットプレーンがこの順に並ぶように整列されて合成され、コードブロック単位の係数データが生成される。
コードブロック合成部205は、このように生成されたコードブロック単位の係数データを合成し、1ピクチャ分の係数データを生成する。この係数データは、量子化部103において量子化されている。コードブロック合成部205は、この係数データを逆量子化部206に供給する。
逆量子化部206は、量子化部103に対応する方法でこの係数データを逆量子化し、逆量子化後の係数データをウェーブレット逆変換部207に供給する。
ウェーブレット逆変換部207は、供給されたウェーブレット係数をウェーブレット逆変換し、ベースバンドの画像データを生成する。DCレベル逆シフト部208は、その画像データのDC成分に対して、符号化時にシフトされた分を元に戻すDCレベル逆シフト処理を必要に応じて行う。DCレベル逆シフト部208は、DCレベル逆シフト処理後の画像データを出力する。
以上のように、デコーダ200は、エンコーダ100により生成された、符号化が省略されたビットプレーンを含むコードストリームを適切に復号し、復号画像データを得ることができる。さらに、その場合、デコーダ200は、通常の、全てのビットプレーンが符号化されたコードストリームを復号する場合(全てのビットプレーンを復号する場合)よりも、復号処理の処理量を低減させることができる。
[ビットプレーン合成部]
図20は、図19のビットプレーン合成部204の主な構成例を示すブロック図である。図20に示されるように、ビットプレーン合成部204は、ビットプレーンバッファ221、ビットプレーン数カウント部222、挿入ビットプレーン数決定部223、ビットプレーン挿入部224、および読み出し制御部225を有する。
ビットプレーンバッファ221は、処理選択部202および復号部203から供給されるビットプレーンを記憶する。ビットプレーン数カウント部222は、ビットプレーンバッファ221に記憶されるビットプレーンの数をカウントし、そのカウント値Y(ビットプレーン数Y)を挿入ビットプレーン数決定部223に通知する。
挿入ビットプレーン数決定部223は、解読部201から供給される全BP数X(1コードブロックのビットプレーン数)を取得する。また、挿入ビットプレーン数決定部223は、ビットプレーン数カウント部222からビットプレーン数Yを取得する。
挿入ビットプレーン数決定部223は、これらの値から、ビットプレーンを合成する際に挿入するビットプレーン数である挿入ビットプレーン数Zを決定する。より具体的には、挿入ビットプレーン数決定部223は、以下の式(2)のように、全BP数Xからビットプレーン数Yを減算し、挿入ビットプレーン数Zを求める。
Z=X−Y ・・・(2)
挿入ビットプレーン数決定部223は、この挿入ビットプレーン数Zをビットプレーン挿入部224に通知する。
ビットプレーン挿入部224は、係数が全てゼロのビットプレーン(挿入ビットプレーン)を、供給された挿入ビットプレーン数Zだけ生成し、その挿入ビットプレーンを読み出し制御部225に供給し、読み出し制御部225において合成されるビットプレーン群に挿入させる。
読み出し制御部225は、ビットプレーンバッファ221に記憶されているビットプレーンをMSBからLSBに向かう順に読み出し、取得する。より具体的には、読み出し制御部225は、まず、復号部203から供給された各ビットプレーンをMSBから下位ビット側に向かう順に読み出し、次に、処理選択部202から供給された各ビットプレーンを上位ビット側からLSBに向かう順に読み出す。
また、読み出し制御部225は、ビットプレーン挿入部224から供給されるビットプレーン数Zの挿入ビットプレーンを取得し、それらを、復号部203から供給されたビットプレーンと、処理選択部202から供給されたビットプレーンとの間の位に挿入する。つまり、読み出し制御部225は、MSBからLSBに向かう方向に、復号部203から供給されたビットプレーン、挿入ビットプレーン、処理選択部202から供給されたビットプレーンの順に並ぶように各ビットプレーンを並べる。
ビットプレーン数Zの挿入ビットプレーンが挿入されることにより、読み出し制御部225が保持するビットプレーンの数が全BP数Xとなる。読み出し制御部225は、この順でこれらのビットプレーンを合成し、1コードブロック分の係数データを生成する。読み出し制御部225は、生成した1コードブロック分の係数データをコードブロック合成部205に供給する。
以上のように、ビットプレーン合成部204は、ビットプレーン数の不足分(エンコーダ100において削除されたビットプレーン数)を容易に把握することができ、その分の挿入ビットプレーンを容易に生成、挿入することもできる。つまり、ビットプレーン合成部204は、上述したように、ビットプレーンを削除してレート制御が行われる場合であっても、容易に、1コードブロック分の係数データを生成することができる。
[復号処理の流れ]
図21のフローチャートを参照して、図19のデコーダ200により実行される復号処理の流れの例を説明する。
デコーダ200は、エンコーダ100により生成されたコードストリームを取得すると、復号処理を開始する。なお、デコーダ200は、以下に説明する復号処理を、ピクチャ単位で繰り返し実行する。
復号処理が開始されると、デコーダ200の解読部201は、ステップS201において、供給されたコードストリームを解読する。ステップS202において、処理選択部202は、その解読結果に基づいて、処理対象ビットプレーンが符号化されているか否かを判定する。処理対象ビットプレーンが符号化されている、すなわち、処理対象のビットプレーンのデータが符号化データであると判定した場合、処理選択部202は、処理をステップS203に進める。
ステップS203において、復号部203は、処理対象の符号化データをエントロピ復号し、処理をステップS204に進める。また、ステップS202において、処理対象ビットプレーンが符号化されていない、すなわち、処理対象のビットプレーンのデータが非符号化データであると判定した場合、処理選択部202は、処理をステップS204に進める。
ステップS204において、処理選択部202は、処理対象コードブロック内の全てのビットプレーンが処理されたか否かを判定する。未処理のビットプレーンが存在すると判定した場合、処理選択部202は、処理をステップS201に戻し、処理対象を次のビットプレーンに変更し、それ以降の処理を繰り返させる。
ステップS201乃至ステップS204の各処理が繰り返し実行され、ステップS204において、処理対象コードブロック内の全てのビットプレーンが処理されたと判定した場合、処理選択部202は、ステップS205に処理を進める。ステップS205において、ビットプレーン合成部204は、各ビットプレーンを合成し、コードブロック単位のウェーブレット係数を生成する。
ステップS206において、ビットプレーン合成部204は、全てのコードブロックが処理されたか否かを判定する。未処理のコードブロックが存在すると判定した場合、ビットプレーン合成部204は、処理をステップS201に戻し、処理対象を次のコードブロックに変更し、それ以降の処理を繰り返させる。
ステップS201乃至ステップS206の各処理が繰り返し実行され、ステップS206において、全てのコードブロックが処理されたと判定した場合、コードブロック合成部205は、ステップS207に処理を進める。ステップS207において、コードブロック合成部205は、各コードブロックのウェーブレット係数を合成する。
その合成結果である1ピクチャ分のウェーブレット係数は、エンコーダ100において量子化されている。ステップS208において、逆量子化部206は、その量子化された各ウェーブレット係数を、エンコーダ100の量子化部103に対応する方法で逆量子化する。
ステップS209において、ウェーブレット逆変換部207は、ステップS208の処理により逆量子化された1ピクチャ分のウェーブレット係数に対してウェーブレット逆変換処理を行い、1ピクチャ分のベースバンドの画像データ(復号画像データ)を生成する。
ステップS210において、DCレベル逆シフト部208は、DCレベルをエンコーダ100におけるシフト量に応じて、そのエンコーダ100によるシフト方向と反対方向にシフトし、復号処理を終了する。
[ビットプレーン合成処理の流れ]
次に、図22のフローチャートを参照して、図21のステップS205において実行されるビットプレーン合成処理の流れの例を説明する。
ビットプレーン合成処理が開始されると、図20に示されるビットプレーン合成部204の挿入ビットプレーン数決定部223は、ステップS231において、全ビットプレーン数Xを取得する。
ステップS232において、ビットプレーンバッファ221は、復号部203により復号されて得られたビットプレーン、若しくは、処理選択部202から供給されるビットプレーンを取得し、記憶する。
ステップS233において、ビットプレーンバッファ221は、処理対象コードブロックの全てのビットプレーンを記憶したか否かを判定し、未処理のコードブロックが存在するか否かを判定し、未処理のコードブロックが存在すると判定された場合、処理をステップS232に戻し、それ以降の処理を繰り返す。
ステップS232およびステップS233の処理が繰り返し実行され、ステップS233において、処理対象コードブロックの全てのビットプレーンが処理されたと判定された場合、ビットプレーンバッファ221は、処理をステップS234に進める。
このように、ビットプレーンバッファ221は、処理選択部202および復号部203から供給されるビットプレーンを順次記憶し、1コードブロック分保持する。つまり、実際には、このステップS232およびステップS233の処理は、図21のステップS202およびステップS203の処理に対応して実行される。すなわち、このステップS232およびステップS233の繰り返しは、図21のステップS202およびステップS203の繰り返しと並行して行われる。
ステップS234において、ビットプレーン数カウント部222は、ビットプレーンバッファ221に蓄積されたビットプレーンの数(ビットプレーン数Y)をカウントする。なお、この処理は、ステップS232の処理に対応して実行されるようにしてもよい。つまり、処理対象コードブロックの全てのビットプレーンがビットプレーンバッファ221に記憶された後で、そのビットプレーンバッファ221に蓄積されているビットプレーンの数が数えられるようにしてもよいし、ビットプレーンバッファ221がビットプレーンを記憶する度に、その記憶した回数が数えられるようにしてもよい。
ステップS235において、挿入ビットプレーン数決定部223は、ステップS231において取得された全ビットプレーン数(全BP数)Xと、ステップS234において得られたビットプレーン数Yとを用いて、以下の式(3)のように、挿入ビットプレーン数Zを求める。
Z=X−Y ・・・(3)
つまり、エンコーダ100において展開された時のビットプレーン数である全BP数Xに対して現在のビットプレーン数Yが不足している場合、その不足分が挿入される。ステップS236において、ビットプレーン挿入部224は、係数が全てゼロの挿入ビットプレーンを、挿入ビットプレーン数Z分生成する。
ステップS237において、読み出し制御部225は、ビットプレーンバッファ221からビットプレーンを読み出す。読み出し制御部225は、まず、復号部203から供給された各ビットプレーンをMSBから下位ビット側に向かう順に読み出し、次に、処理選択部202から供給された各ビットプレーンを上位ビット側からLSBに向かう順に読み出す。
ステップS238において、読み出し制御部225は、ビットプレーン挿入部224から供給されるビットプレーン数Zの挿入ビットプレーンを、復号部203から供給されたビットプレーンと、処理選択部202から供給されたビットプレーンとの間の位に挿入する。
ステップS238の処理が終了すると、読み出し制御部225は、このように生成した1コードブロック分の係数データをコードブロック合成部205に供給し、ビットプレーン合成処理を終了し、処理を図21のステップS205に戻し、ステップS206以降の処理を実行させる。
以上のように各処理が実行されることにより、デコーダ200は、エンコーダ100により生成された、符号化が省略されたビットプレーンを含むコードストリームを適切に復号し、復号画像データを得ることができる。
<3.第3の実施の形態>
[エンコーダの構成例]
なお、上述した第1の実施の形態においては、レート制御方法として、符号化されて得られる符号化データの符号量を累算し、その符号量が目標符号量に達した時点で符号化を終了するように説明したが、レート制御方法はこれに限らない。例えば、選択部に符号化用ビットプレーンとして選択されたビットプレーンを全て符号化し、その後で目標符号量を超える分を破棄するようにしてもよい。
その場合のエンコーダの構成例を図23に示す。図23に示されるエンコーダ300は、図1のエンコーダ100と同様に、画像データを非可逆符号化する符号化装置である。
エンコーダ300は、基本的にエンコーダ100と同様の構成を有するが、上述したように、レート制御の前に、処理対象コードブロックの全てのビットプレーンについて符号化・非符号化の処理選択を行い、符号化する予定の全てのビットプレーンに対して符号化を行う。
したがって、エンコーダ300は、エンコーダ100の選択部107の代わりに選択部307を有し、レート制御部109の代わりにレート制御部309を有する。なお、エンコーダ100の非符号化データ量算出部106、合成部110、および埋め込み部111は省略される。
エンコーダ300の場合、ビットプレーン展開部105により展開された各ビットプレーンは、MSBからLSBに向かう順で、符号化部108と選択部307に供給される。符号化部108は、選択部307の制御の下、供給される各符号化用ビットプレーンを符号化し、生成した符号化データを選択部307に供給する。
選択部307は、選択部107と同様に符号化ビットプレーン数Nを取得する。選択部307は、この符号化ビットプレーン数Nを用いて、レート制御部309に供給するデータをビットプレーン毎に選択する。
より具体的には、選択部307は、N番目の位より上位について、符号化部108から供給される符号化データを選択し、その符号化データをレート制御部309に供給する。選択部307は、(N+1)番目の位より下位について、ビットプレーン展開部105から供給されるビットプレーン(非符号化データ)を選択し、レート制御部309に供給する。
なお、非符号化データが選択される位については、符号化部108による符号化は不要である。選択部307は、N番目の位のビットプレーンについての選択を行った後、符号化部108に対して符号化終了を指示する。符号化部108は、この制御に従って、N番目の位より上位のビットプレーンについてのみ符号化を行い、(N+1)番目の位より下位のビットプレーンについての符号化は省略する。
したがって、符号化部108は、選択部307により選択されないビットプレーンについての不要な符号化処理を省略することができる。つまり、選択部307は、不要な負荷の増大を抑制することができる。
上述したように、選択部307は、符号化停止後の、(N+1)番目より下位について、非符号化データを選択し、レート制御部309に供給する。このように、レート制御部309には、処理対象コードブロックのビット深度の全位について、符号化データ若しくは非符号化データが供給される。レート制御部309は、それらの符号化データおよび非符号化データを保持する。
レート制御部309は、選択部307と同様に符号化ビットプレーン数Nを取得する。また、レート制御部309は、レート制御部109と同様に、処理対象コードブロックに割り当てられた総データ量(Bit_CB)を取得する。レート制御部309は、それらの情報に基づいて、レート制御を行う。
レート制御の方法は基本的にレート制御部109の場合と同様である。レート制御部309は、出力する符号化データの目標符号量を求め、その目標符号量を達成するように、必要に応じて、選択部307から供給された符号化データを削除する。このとき、レート制御部309は、下位ビット側の符号化データを優先的に削除する。また、レート制御部309は、非符号化データは削除しない。
なお、レート制御部309は、このレート制御の際に、非符号化データ量の算出、コードストリームの生成、および符号化ビットプレーン数N’のコードストリームへの埋め込みも行う。
レート制御部309は、レート制御後、削除しなかった上位ビット側の符号化データ、および、非符号化データをパケット生成部112に供給する。
したがって、レート制御部309は、画質の劣化や負荷の増大を抑制しながら、コードストリームの符号量の制御(レート制御)を適切に行うことができる。したがって、エンコーダ300は、エンコーダ100の場合と同様に、非可逆符号化においても負荷の低減を実現させることができる。
なお、エンコーダ300の場合、以上に説明したように、レート制御が行われる前に全ての符号化用ビットプレーンが符号化される。したがって、コードストリームに含めるビットプレーンのみ符号化するエンコーダ100の場合と比べて負荷は増大するが、より多様なシステムへの適用を容易化することができる。
例えば、量子化処理を省略し、レート制御前の符号化データおよび非符号化データ(選択部307の出力)を出力させるようにするだけで、エンコーダ300は、可逆符号化方式にも対応することができる。
[選択部]
図24は、図23の選択部307の主な構成例を示すブロック図である。図24に示されるように、選択部307は、基本的に選択部107と同様の構成を有するが、処理選択部132の代わりに、ビットプレーン選択部332を有する。
ビットプレーン選択部332は、符号化部108から供給される符号化データ、若しくは、ビットプレーン展開部105から供給される非符号化データを選択し、選択した方をレート制御部309に供給する。
ビットプレーン選択部332は、符号化ビットプレーン数取得部131により取得された符号化ビットプレーン数Nに基づいてこの選択を行う。ビットプレーン選択部332は、N番目の位より上位について、符号化データを選択し、それをレート制御部309に供給する。また、ビットプレーン選択部332は、(N+1)番目の位より下位について、非符号化データを選択し、それをレート制御部309に供給する。
ビットプレーン選択部332は、N番目の位より上位について、符号化データを選択すると、符号化部108を制御し、処理対象コードブロックに対しての符号化を終了させる。つまり、ビットプレーン選択部332は、符号化部108から供給される符号化データをN個取得し、レート制御部309に供給すると、符号化部108の符号化処理を終了させ、その後、ビットプレーン展開部105から供給される非符号化データを(N+1)個取得し、それをレート制御部309に供給する。
以上のように、選択部307は、容易に、上位Nビットについて符号化データを選択し、それより下位ビットの非符号化データを選択することができる。換言すれば、エンコーダ300は、指定ビットプレーン数Nによって、非符号化データが選択される位置(位)を、確実に制御することができる。
[レート制御部]
図25は、図23のレート制御部309の主な構成例を示すブロック図である。図25に示されるように、レート制御部309は、埋め込み部111、総データ量取得部152、目標符号量算出部153、符号化ビットプレーン数取得部351、バッファ353、符号量算出部354、非符号化データ量算出部355、出力制御部356、およびコードストリーム生成部357を有する。
符号化ビットプレーン数取得部351は、選択部307が取得する符号化ビットプレーン数Nを取得し、それを符号量算出部354および非符号化データ量算出部355に供給する。
バッファ353は、選択部307から供給される符号化データおよび非符号化データをその供給順に記憶する。
符号量算出部354は、符号化ビットプレーン数取得部351から供給される符号化ビットプレーン数Nに基づいて、レート制御部309が取得した(バッファ353に記憶された)処理対象コードブロックの符号化データの符号量(Bit_N)を算出する。上述したように、符号化データが先に供給され、その後、非符号化データが供給される。つまり、選択部307から供給されるデータの内、1番目乃至N番目のデータが符号化データであり、(N+1)番目以降のデータは非符号化データである。そこで、符号量算出部354は、選択部307から供給される1番目乃至N番目までのデータ(符号化データ)のデータ量を算出する。
符号量算出部354は、符号化ビットプレーン数Nおよび算出した符号量(Bit_N)を出力制御部356に供給する。
非符号化データ量算出部355は、符号化ビットプレーン数取得部351から供給される符号化ビットプレーン数Nに基づいて、レート制御部309が取得した(バッファ353に記憶された)処理対象コードブロックの非符号化データのデータ量(非符号化データ量(Bit_BP))を算出する。上述したように、符号化データが先に供給され、その後、非符号化データが供給される。つまり、選択部307から供給されるデータの内、1番目乃至N番目のデータが符号化データであり、(N+1)番目以降のデータは非符号化データである。そこで、非符号化データ量算出部355は、選択部307から供給される(N+1)番目以降のデータ(非符号化データ)のデータ量を算出する。
非符号化データ量算出部355は、算出した非符号化データ量(Bit_BP)を目標符号量算出部153に供給する。
目標符号量算出部153は、総データ量取得部152により取得された処理対象コードブロックに割り当てられた総データ量(Bit_CB)と、非符号化データ量算出部355により算出された非符号化データ量(Bit_BP)とに基づいて、目標符号量(Bit_N')を算出する。目標符号量算出部153は、算出した目標符号量(Bit_N')を出力制御部356に供給する。
出力制御部356は、符号化ビットプレーン数取得部351により取得された符号化ビットプレーン数N、符号量算出部354により算出された符号量(Bit_N)、および、目標符号量算出部153により算出された目標符号量(Bit_N')に基づいて、レート制御を行いながら、バッファ353に蓄積されている符号化データおよび非符号化データを読み出す。
例えば、出力制御部356は、符号量(Bit_N)と目標符号量(Bit_N')とを比較し、符号量(Bit_N)が目標符号量(Bit_N')以下の場合、バッファ353に蓄積されている全てのデータを読み出し、コードストリーム生成部357に供給する。
また、出力制御部356は、例えば、符号量(Bit_N)が目標符号量(Bit_N')より大きい場合、符号量が目標符号量(Bit_N')以下となるように、バッファ353から読み出す符号化データの数(符号化ビットプレーン数N’)を決定する。出力制御部356は、バッファ353に蓄積されている符号化データの内、上位ビット側のN’個の符号化データ(1番目乃至N’番目の符号化データ)を読み出し、コードストリーム生成部357に供給する。その後、出力制御部356は、バッファ353に蓄積されている非符号化データを全て読み出し、コードストリーム生成部357に供給する。
以上のように、出力制御部356は、バッファ353から読み出す符号化データの数を制御することにより、レート制御を行う。
出力制御部356は、また、バッファ353から読み出した符号化データの数である符号化ビットプレーン数N’を埋め込み部111に供給する。例えば、符号量(Bit_N)が目標符号量(Bit_N')以下の場合、符号化ビットプレーン数N’は、符号化ビットプレーン数Nと等しい。
コードストリーム生成部357は、出力制御部356から供給される符号化データおよび非符号化データを取得し、合成部110の場合と同様に、これらの符号化データおよび非符号化データを合成し、ヘッダ等を付加して1本のコードストリームを生成し、それを埋め込み部111に供給する。
埋め込み部111は、コードストリーム生成部357から供給されるコードストリームの所定の位置に出力制御部356から供給される符号化ビットプレーン数N’を示す情報を埋め込む。
このようにレート制御部309は、レート制御部109の場合と同様に、下位ビット側の符号化データを優先的に削除することによりレート制御を行うことができる。つまり、レート制御部309は、情報の欠損がない非符号化データを削除せずにレート制御を行うことができるので、画質の劣化を抑制しながらレート制御を行うことができる。また、レート制御部309は、容易に目標符号量を算出し、その目標符号量を用いて符号化データを削除するか否かを制御するのみで容易に適切なレート制御を実現することができる。
[符号化処理の流れ]
次に、図26のフローチャートを参照して、エンコーダ300による符号化処理の流れの例を説明する。動画像データを符号化するエンコーダ300は、以下に説明する符号化処理を動画像の各フレームについて実行する。
符号化処理が開始されると、ステップS301乃至ステップS305の各処理が、図14のステップS101乃至ステップS105の各処理と同様に行われ、処理対象コードブロックがビットプレーンに展開される。
ステップS306において、符号化部108は、N番目の位より上位のビットプレーンを符号化する。
ステップS307において、選択部307は、選択処理を行い、N番目の位より上位について、ステップS306において生成された符号化データを選択し、(N+1)番目の位より下位について、ステップS305において展開されたビットプレーン(非符号化データ)を選択する。
ステップS308において、レート制御部309は、レート制御を行い、必要に応じて符号化データを削除する。
ステップS309において、ビットプレーン展開部105は、全てのコードブロックを処理したか否かを判定する。全てのコードブロックを処理していないと判定した場合、ビットプレーン展開部105は、処理をステップS310に進め、処理対象を次のコードブロックに移し、処理をステップS305に戻し、それ以降の処理を繰り返す。
ステップS305乃至ステップS310の処理が繰り返し実行され、ステップS309において全てのコードブロックが処理されたと判定された場合、符号化処理が終了される。
なお、上述した各処理は、矛盾が生じない限り、適宜、順序を変えて実行されたり、並列に実行されたりしてもよい。例えば、ステップS306およびステップS307の各処理は、互いに並行して実行されるようにしてもよい。
[選択処理の流れ]
次に、図27のフローチャートを参照して、図26のステップS307において実行される選択処理の流れの例について説明する。
選択処理が開始されると、符号化ビットプレーン数取得部131は、ステップS331において、符号化ビットプレーン数Nを取得する。
ステップS332において、ビットプレーン選択部332は、符号化部108およびビットプレーン展開部105から供給されるビットプレーン(符号化データ若しくは非符号化データ)の取得を開始する。
ステップS333において、ビットプレーン選択部332は、1番目乃至N番目のビットプレーンについて、符号化データを選択する。
ステップS334において、ビットプレーン選択部332は、図26のステップS306において実行される符号化処理を終了させる。
ステップS335において、ビットプレーン選択部332は、(N+1)番目以降のビットプレーンについて、非符号化データを選択する。
以上の処理が終了すると、ビットプレーン選択部332は、選択処理を終了し、処理を図26のステップS307に戻し、ステップS308以降の処理を実行させる。
[レート制御処理の流れ]
次に、図28のフローチャートを参照して、図26のステップS308において実行されるレート制御処理の流れの例を説明する。
レート制御処理が開始されると、ステップS351において、符号化ビットプレーン数取得部351は、符号化ビットプレーン数Nを取得する。ステップS352において、総データ量取得部152は、処理対象コードブロックに割り当てられた総データ量(Bit_CB)を取得する。
ステップS353において、バッファ353は、選択部307から供給される符号化データを記憶する。ステップS354において、バッファ353は、選択部307から供給される非符号化データを記憶する。
ステップS355において、符号量算出部354は、ステップS353において記憶したN個の符号化データの符号量(Bit_N)を算出する。ステップS356において、非符号化データ量算出部355は、ステップS354において記憶した非符号化データのデータ量である非符号化データ量(Bit_BP)を算出する。ステップS357において、目標符号量算出部153は、ステップS352において取得した総データ量(Bit_CB)から非符号化データ量(Bit_BP)を減算し、目標符号量(Bit_N')を算出する。
ステップS358において、出力制御部356は、ステップS355において算出された符号量(Bit_N)やステップS357において算出された目標符号量(Bit_N')等に基づいて、符号化ビットプレーン数N’を決定する。
ステップS359において、出力制御部356は、バッファ353に蓄積されている符号化データの中から、ステップS358において決定された符号化ビットプレーン数N’分の符号化データを選択して読み出す。ステップS360において、出力制御部356は、バッファ353に蓄積されている非符号化データを全て選択して読み出す。
ステップS361において、コードストリーム生成部357は、ステップS359において選択した符号化データ、および、ステップS360において選択した非符号化データを合成し、コードストリームを生成する。
ステップS362において、埋め込み部111は、ステップS361において生成されたコードストリームの所定の位置に、ステップS358において決定された符号化ビットプレーン数N’を埋め込む。
ステップS362の処理が終了すると、埋め込み部111は、レート制御処理を終了し、図26のステップS308に処理を戻し、ステップS309以降の処理を実行させる。
以上のような各種処理を行うことにより、エンコーダ300は、エンコーダ100の場合と同様に、処理時間の増大や画質の劣化を抑制しながら、適切なレート制御を行うことができる。したがって、エンコーダ300は、非可逆符号化の場合であっても、適切なレート制御を実現し、負荷を低減させることができる。
[複数コンポーネント]
なお、画像が複数のコンポーネントから構成されるようにしてもよい。その場合、例えば、以上に説明したレート制御を行う際に、コンポーネント毎に走査するようにしてもよい。また、例えば、第1の実施の形態や第2の実施の形態の場合、レート制御を行う際に、図29に示されるように、全てのコンポーネントを通して走査するようにしてもよい。図29は、各ビット位置を、Y成分、Cb成分、およびCr成分の全てのコンポーネントに渡って走査する場合の例を示す図である。
図29の例の場合、ゼロビットプレーンを除いて、MSBからLSBに向かって、Y、Cb、Crの順に、同一ビットプレーンに位置する符号化パスから順に、ビットプレーン単位にエンコードが進められ、発生符号量の累積カウントが行われている。そして、その累積の結果、あるXビットプレーンの位置に来た時の累積ビット数が目標符号量(Bit_N')に十分近くなったと判断した際に、累積カウント動作が中止される。
第3の実施の形態の場合、図30に示される様に、ビットプレーン毎にLSBからMSBに向かう順に符号化データが切り捨てられ、データ量が目標量に達した時点で切り捨て制御が中止されるようにしてもよい。
以上に説明したエンコーダ100、デコーダ200、およびエンコーダ300は、上述した以外の構成を含むようにしてももちろんよい。また、1つの装置としてだけでなく、複数の装置よりなるシステムとして構成されるようにしてもよい。例えば、デジタルシネマ用編集装置、アーカイブシステム、画像データベース、医用画像の記録システム、ネットワークサーバ、ノンリニア編集装置、PC上のオーサリング・ツールまたはそのソフトウェア・モジュール等として構成されるようにしてもよい。
<4.第4の実施の形態>
[パーソナルコンピュータ]
上述した一連の処理は、ハードウェアにより実行させることもできるし、ソフトウェアにより実行させることもできる。この場合、例えば、図31に示されるようなパーソナルコンピュータとして構成されるようにしてもよい。
図31において、パーソナルコンピュータ400のCPU(Central Processing Unit)401は、ROM(Read Only Memory)402に記憶されているプログラム、または記憶部413からRAM(Random Access Memory)403にロードされたプログラムに従って各種の処理を実行する。RAM403にはまた、CPU401が各種の処理を実行する上において必要なデータなども適宜記憶される。
CPU401、ROM402、およびRAM403は、バス404を介して相互に接続されている。このバス404にはまた、入出力インタフェース410も接続されている。
入出力インタフェース410には、キーボード、マウスなどよりなる入力部411、CRT(Cathode Ray Tube)ディスプレイやLCD(Liquid Crystal Display)等のディスプレイ、並びにスピーカなどよりなる出力部412、フラッシュメモリ等SSD(Solid State Drive)やハードディスクなどよりなる記憶部413、有線LAN(Local Area Network)や無線LANのインタフェースやモデムなどよりなる通信部414が接続されている。通信部414は、インターネットを含むネットワークを介しての通信処理を行う。
入出力インタフェース410にはまた、必要に応じてドライブ415が接続され、磁気ディスク、光ディスク、光磁気ディスク、或いは半導体メモリなどのリムーバブルメディア421が適宜装着され、それらから読み出されたコンピュータプログラムが、必要に応じて記憶部413にインストールされる。
上述した一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、ネットワークや記録媒体からインストールされる。
この記録媒体は、例えば、図31に示されるように、装置本体とは別に、ユーザにプログラムを配信するために配布される、プログラムが記録されている磁気ディスク(フレキシブルディスクを含む)、光ディスク(CD-ROM(Compact Disc - Read Only Memory),DVD(Digital Versatile Disc)を含む)、光磁気ディスク(MD(Mini Disc)を含む)、若しくは半導体メモリなどよりなるリムーバブルメディア421により構成されるだけでなく、装置本体に予め組み込まれた状態でユーザに配信される、プログラムが記録されているROM402や、記憶部413に含まれるハードディスクなどにより構成される。
なお、コンピュータが実行するプログラムは、本明細書で説明する順序に沿って時系列に処理が行われるプログラムであっても良いし、並列に、あるいは呼び出しが行われたとき等の必要なタイミングで処理が行われるプログラムであっても良い。
また、本明細書において、記録媒体に記録されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
また、本明細書において、システムとは、複数のデバイス(装置)により構成される装置全体を表すものである。
また、以上において、1つの装置(または処理部)として説明した構成が、複数の装置(または処理部)として構成されるようにしてもよい。逆に、以上において複数の装置(または処理部)として説明した構成が、まとめて1つの装置(または処理部)として構成されるようにしてもよい。また、各装置(または各処理部)の構成に上述した以外の構成が付加されるようにしてももちろんよい。さらに、システム全体としての構成や動作が実質的に同じであれば、ある装置(または処理部)の構成の一部が他の装置(または他の処理部)の構成に含まれるようにしてもよい。つまり、本開示の実施の形態は、上述した実施の形態に限定されるものではなく、本開示の要旨を逸脱しない範囲において種々の変更が可能である。
例えば、図1のレート制御部109、図19のビットプレーン合成部204、および図23のレート制御部309を独立した装置としてもよい。