以下に添付図面を参照して、この発明に係る動画像符号化方法及び動画像符号化装置、動画像復号化方法及び動画像復号化装置の最良な実施の形態を詳細に説明する。
図1は、本発明の第1の実施の形態に係わる動画像符号化装置の構成を示すブロック図である。この実施の形態では、予測誤差信号をマクロブロック単位で量子化するに当たり、量子化コードテーブルを参照してマクロブロックより細かいブロックの単位で量子化して動画像の符号化を行う。
図1によると、動画像信号はマクロブロック毎或いはマクロブロックペア毎に分割され、動画像符号化装置100に入力される。動画像符号化装置100では、予測信号生成部120が行うフレーム内予測及びフレーム間予測モードとして、ブロックサイズや予測信号の生成方法の異なる複数の予測モードが用意されている。予測信号生成部120は、参照画像メモリ111に一時保存された参照画像を用いて、当該マクロブロックで選択可能な全てのモードで予測画像の生成を行い、また入力画像信号から予測信号を差し引いた予測誤差信号の生成を行う。指示されたモードが動き補償フレーム間予測の場合は、予測信号生成部120は動きベクトルの検出と参照画像の選択も併せて行う。即ち、予測信号生成部120は、図示しないが参照画像メモリ111の参照画像を用いて動きベクトルを検出し、動き補償予測信号を生成する動き補償予測回路とこの動き補償予測回路から出力される予測信号を入力画像信号から減算して予測誤差信号を生成する減算器とを有する。
ここで、H.264のフレーム内予測(4×4予測)のようにマクロブロック内でローカルデコード画像を作成しないと次の予測が行えないような場合に関しては、後述する直交変換部102でフレーム内予測を行っても良い。予測信号生成は予測信号生成部120と直交変換部102のみで行われる。
予測信号生成部120で生成された予測誤差信号は、量子化セット選択部101へと入力される。量子化セット選択部101は、量子化器及び逆量子化器で用いられる量子化コードテーブルの中からいずれかのテーブルを選択し、符号化制御部121にセットする。
予測信号生成部120で生成された予測誤差信号は量子化セット選択部101を介して直交変換部102へと送られる。直交変換部102は、直交変換(例えば離散コサイン変換)を行い、変換された係数を量子化部103へと出力する。
量子化部103では、符号化制御部121で設定されている量子化コードテーブルを参照し、当該量子化コードテーブルに従って当該変換係数を量子化するとともに、量子化した直交変換係数及び予測モード情報(或いは動きベクトル情報、参照画像情報など)をスイッチ104及び逆直交変換部108に出力する。本実施の形態において、マクロブロック内の量子化部103は、設定された量子化コードテーブルに従った方式の動画像符号化処理を行う信号生成手段として機能している。
量子化された変換係数は、モード情報、量子化係数、量子化コードテーブル等の予測方法に関する情報とともに、可変長符号化部112により可変長符号化される。これらの符号化データは多重化部122により多重化され、出力バッファ123を通して符号化データとして出力される。
一方、逆直交変換部108は、上記量子化部103によって量子化された変換係数を、符号化制御部121にて設定されている量子化コードテーブルに従って逆量子化し、得られた変換係数を逆直交変換部109へと出力する。逆直交変換部109は、復元した変換係数に対して逆直交変換処理(例えば逆離散コサイン変換)を行い、予測誤差信号等を復元し、かかる信号を予測復号化部110に出力する。
予測復号化部110は、予測信号生成部120によって行われた処理に対応する処理を行い、画像を復元し、参照画像メモリ111に出力する。参照画像メモリ111は復元された画像を蓄積する。このように参照画像メモリ111に蓄積された画像が、予測信号生成部120による予測誤差信号等の生成の際に参照される。尚、当該動画像符号化部では、予測復号化部110で、予測画像の生成は行なわず、予測信号生成部120の動き補償予測回路で生成された予測信号を保持しておき、利用することが望ましい。
スイッチ104は、量子化部103から供給された直交変換係数及び予測モード情報等を、仮符号化及び符号量計測部105あるいは、可変長符号化部112のいずれかに出力する。
仮符号化及び符号量計測部105は、スイッチ104経由で入力される直交変換係数等を示す信号に対し仮符号化を行って符号量を計測する。仮符号化とは、符号量を計測するために、一時的に符号化を行うことを指しており、仮符号化及び符号量計測部105は、エントロピー符号化データの出力は行わず、符号量の計測のみを行う。本実施の形態における仮符号化及び符号量計測部105では、ハフマン符号化、もしくは算術符号化に基づくエントロピー符号化がなされた場合の符号量を計測する。
仮符号化及び符号量計測部105で計測された符号量は、符号化歪み測定部106に入力される。符号化歪み測定部106では、予測復号化部110から得られるローカルデコード画像と入力画像信号との2乗誤差を計測し、これを符号化歪み(量子化歪み)として符号化モード制御・判定部107へと出力する。符号化モード制御・判定部107は、入力された符号化歪み(量子化歪み)と符号量から符号化コストを計測する。ここで得られた符号化コストを指標として当該マクロブロックのモードを決定する。より具体的に説明すると本実施の形態では次式(8)のようなコストを用いる。
ここでDは符号化歪みを表し、Rは符号量を表している。このようにして得られた符号化コストに基づいて複数の符号化モードの中から1つの符号化モードを選択する。つまり、符号化対象の画素ブロックに対して、1つ以上の符号化モードの各々で実際に予測符号化、発生符号量の計測及び符号化歪みの計測を行わせ、それぞれの符号化モードごとに得られた符号化コストを比較し、いずれか1つの符号化モードを選択する。本実施の形態では、符号化モード制御・判定部107は、最も符号化コストの小さい符号化モードを選択する。即ち、図1における量子化セット選択部101→直交変換部102→量子化部103→スイッチ104→仮符号化及び符号量計測部105→符号化歪み測定部106→符号化モード制御・判定部107といった順序で処理を行い最適符号化モードを選択する。
符号化モードが決定されると、スイッチ104の出力端は可変長符号化部112へと直接接続され、選択された符号化モード及び量子化コードテーブルで再符号化を行い、選択された符号化モードで、量子化変換係数、量子化コードテーブル、符号化コスト等の符号化情報を出力する。ここで、予め仮符号化時に最適な符号化モード及び量子化コードテーブルで符号化したときの諸々の情報(量子化された変換係数や選択された量子化コードテーブルのインデックスなど)を保持しておき、可変長符号化部112にて再符号化処理を行わずに、保持したデータを出力しても良い。
尚、仮符号化ループ(図1における量子化セット選択部101→直交変換部102→量子化部103→スイッチ104→仮符号化及び符号量計測部105→符号化歪み測定部106→符号化モード制御・判定部107といった順序で流れる処理)は、そのマクロブロックで選択可能な全てのモードに対して処理を行った場合に1回のループとなる。つまり、最初の仮符号化ループが終わった瞬間に、モード判定は完了しており、以後の仮符号化ループで再度モード判定を行う必要は無い。最初のループで選択された符号化モードは、符号化制御部121にセットされ、以後のループでは、量子化コードテーブルを変更して仮符号化を行うときに符号化制御部121に設定されている符号化モードで計算された予測誤差信号を利用する。
さらに、最初のループでは量子化コードテーブルによる符号化モード判定の影響を極力無くすために、本実施の形態では、マクロブロック内で量子化を変えない(従来のH.264の逆量子化と等しい)方式で量子化及び逆量子化を行う。
H.264のフレーム内予測では、予測画像の生成時に現ブロックのローカルデコード画像を参照画像として、隣のブロックの予測画像を生成する。そのため、小画素ブロック毎に直交変換、量子化及び逆量子化、逆直交変換を行う必要がある。そこで、仮符号化ループで量子化コードテーブルを決定するとき(二回目以降の仮符号化ループ)、直交変換部102にて、フレーム内予測をやり直して予測信号の再生成を行っても良いし、行わなくても良い。
符号化制御部121は発生符号量のフィードバック制御及び量子化特性制御、モード制御などを行い、発生符号量の制御を行うレート制御や、予測部の制御、符号化全体の制御を行う。
これら各部の機能は、コンピュータに記憶されたプログラムによって実現される。
以上が本実施の形態にかかる動画像符号化装置100の構成である。以下、本発明にかかる第1の実施の形態の動画像符号化方法について、動画像符号化装置100が実施する場合を例にあげ、図2を参照しながら説明する。
動画像符号化装置100に、1フレーム毎に動画像信号が入力されると、入力された画像はマクロブロック毎、或いはマクロブロックペア毎に符号化が開始される(ステップS201)。
入力された動画像信号を用いて、予測信号生成部120にて、当該ブロックで選択可能な全ての符号化モードにおける予測画像信号生成及び予測誤差信号の計算が行われる(ステップS202)。ここで得られた当該予測誤差信号を直交変換・量子化することで符号化モードの判定及び最適量子化コードテーブルの選択を行う。
次に、量子化コードテーブルを示すインデックスQ_idxを0に初期化する(ステップS203)。このインデックスは例えば図10で表されるようなコードテーブルの番号を表している。
さらに、符号化モードを示すindexを0に初期化、最終的に選択されるベスト符号化モードのインデックスBest_Modeを最大値に初期化、符号化コストの最小値を与えるMin_Costを最大値で初期化する(ステップS204)。
符号化モードI(=index)、量子化コードテーブルインデックスQC(=Q_idx)にて仮符号化を行う。つまり、仮符号化時には、スイッチ104の出力端は仮符号化及び符号量測定部105へと接続され、図1で示される仮符号化ループ(図1における量子化セット選択部101→直交変換部102→量子化部103→スイッチ104→仮符号化及び符号量計測部105→符号化歪み測定部106→符号化モード制御・判定部107といった順序で流れる処理)に従って仮符号化処理が実行される。量子化部103では、量子化コードテーブルインデックスQCに示されるコードテーブルの値に従って量子化或いは逆量子化処理がなされる。
量子化パラメータは、量子化コードテーブルインデックスQCから次式(9)のように求められる。
QP
blkは量子化コードテーブルインデックスQCから導出された小画素ブロック量子化パラメータを表しており、QPはマクロブロックの量子化パラメータを示す。QV(QC,blk)は量子化コードテーブルインデックスQC、ブロックナンバーblkで示される量子化コードテーブルを示している。これらの処理は、8×8ブロック単位で行っても良いし4×4ブロック単位で行っても良い。例えば、8×8ブロック単位の量子化コードテーブルは次式(10)のように定義される。
マクロブロック内には4つの8×8ブロックが存在する。よってblkは0から3までの値を取る。最初に仮符号化ループを通るときには、QC=0となり従来のマクロブロック内固定量子化パラメータで仮符号化処理が行われる。
それぞれの位置に対応するパラメータ変化度を用いて量子化パラメータを変更する。8×8画素単位で量子化パラメータを変える場合、4×4画素ブロック量子化器では、図3左側に示すように4つのブロックで同じ量子化パラメータで量子化が行われる。一方、8×8画素ブロック量子化器の場合は図3右側に示すようにブロック毎に量子化パラメータを変更する。
一般的に仮符号化に用いられる符号化コストは、マクロブロックでの量子化パラメータが変動しないことに基づいて定義されている。そのため、式(10)に以下の条件式(11)を加えるべきである。
これはマクロブロック内で、量子化パラメータの変動は定性的に一定であることを示しており、符号化コスト計算でのコスト評価のために必要な拘束条件である。
仮符号化及び符号量測定部105にて、発生した符号量の累積加算が行われ、符号化歪み測定部106では、入力画像とローカルデコード画像から符号化歪みの計算が行われる(S206)。ここで、量子化部103で量子化された変換係数は、逆量子化器108にて逆量子化され、逆直交変換部109にて逆直交変換されることによって予測誤差信号の復号が行われ、さらに予測信号と加算されることによってローカルデコード画像となる。
得られた発生符号量と符号化歪みから式(8)を用いて符号化コストの計算が行われる(S207)。ただし、例えば符号化歪みを用いず、発生符号量そのものを符号化コストとしても良い。この場合、モードの判定に符号化歪みが必要としなくなるため仮符号化ループに、逆量子化・逆直交変換といった処理負担の高い処理部を行う必要がなくなる。或いは、符号化歪みに代わる入力画像の統計量(例えば入力画像のDC値やアクティビティ(DC値からの各画素の差分を合計した値))などを用いても良い。仮符号化では符号化データの書き出しを行わない。
符号化モード制御・判定部107は、計算された符号化コストcostが、最小符号化コストmin_costより小さいか否かを判別し(ステップS208)、小さい場合にはその符号化コストで最小符号化コストを更新するとともに、その際の仮符号化の符号化モードをbest_modeインデックスとして、量子化コードテーブルインデックスをbest_Q_idxとして保持する。さらにindex値のインクリメントを行う。ここで、再符号化処理を避けるために、ベスト符号化モードで符号化されたときの様々の符号化データを保持しておく(S209)。
次に、符号化モード制御・判定部107は、更新したindexがMAX_INDEXより大きいか否かを判断する(ステップS210)。ここで、indexが大きい場合、つまり、当該ステップS209で選択されたマクロブロック内で選択可能な符号化モード全ての処理が終わっている場合は、かかる判別が「YES」となり、すべての符号化モードについて上記ステップS205〜ステップS210までの処理が終了したことを意味する。
ここで、かかる判別が「NO」の場合、更新されたindexで示されるモードで、ステップS205〜ステップS210までの処理を行う。
このようにして、ステップS210の判別が「YES」となったとき、そのマクロブロックで選択可能な符号化モードの中で符号化コストの最も小さい符号化モードが決定したことを意味する。ステップS210の判別が「YES」のときは、量子化コードテーブルインデックスQ_idxをインクリメントし、QCを更新する(S211)。
次に、符号化モード制御・判定部107は、更新したQ_idxがMAX_Q_IDXより大きいか否かを判断する(ステップS212)。ここでQ_idxが大きい場合、選択可能な量子化コードテーブルインデックスの全てに関して仮符号化処理が終わったことを意味する。また、かかる判別がNOの場合、符号化モード制御・判定部107から量子化セット選択部101へと処理は移行し、新しいQ_idxで仮符号化ループを繰り返すことになる。ここで符号化モードI=best_modeにより、モード判定は再度繰り返すことなく最初のループで確定したbest_modeで、量子化コードテーブルインデックスのループ(ステップS205からステップS212まで)を回ることになる。
ステップS212でかかる判別がYESの場合、仮符号化ループを終了し、best_mode及びbest_Q_idxを用いて、再量子化及び可変長符号化部112にて再符号化が行われる(ステップS214)。ここで、このときのデータを保持している場合は再符号化の必要は無いため、そのまま符号化データは多重化部122へと出力され、各々の方式に従って多重化された後に出力バッファ123へと出力され、ビットストリームデータとして出力される(S215)。
ここで、画素ブロック毎に選択された量子化コードテーブルは、複数の量子化コードテーブルから適切な量子化コードテーブルが選択され、選択されたコードテーブルに従って、量子化コードテーブルインデックスに変換されて符号化される。量子化コードテーブルは、フレーム内の複数画素ブロックから構成される領域(以下、スライスと呼ぶ)単位に変更可能であり、量子化セット選択部101により、スライス毎に符号化効率の高い量子化コードテーブルの選択が行われる。選択された量子化コードテーブルの情報は、量子化コードテーブルのインデックスとして、符号化データに多重化される。また、他の実施の形態として、量子化パラメータや目標ビットレートに応じて、量子化コードテーブルが自動的に一意に決定される構成としてもよい。例えば量子化パラメータが小さい場合は、量子化コードテーブルインデックスが小さい値が選択され、大きい場合はインデックスが大きな値が選択される。或いはビットレートが高い場合は、量子化コードテーブルインデックスが大きな値が選択され、低い場合はインデックスが小さな値が選択されるなどである。いずれの場合でも、符号化データの復号化時においても、同一の量子化コードテーブルが選択されて、対応する量子化コードテーブルに変換され、逆量子化が行われる。
次に、量子化コードテーブルインデックス情報の符号化方法について説明する。図4に本実施の形態で用いられるシンタクスの構造の概略を示す。シンタクスは主に3つのパートからなり、High Level Syntax(401)はスライス以上の上位レイヤのシンタクス情報が詰め込まれている。Slice Level Syntax(404)では、スライス毎に必要な情報が明記されており、Macroblock Level Syntax(407)では、マクロブロック毎に必要とされる可変長符号化された誤差信号やモード情報などが明記されている。
それぞれは、さらに詳細なシンタクスで構成されており、High Level Syntax(401)では、Sequence parameter set syntax(402)とPicture parameter set syntax(403)などのシーケンス、ピクチャレベルのシンタクスから構成されている。Slice Level Syntax(404)では、Slice header syntax(405)、Slice data syntax(406)などから成る。さらに、Macroblock Level Syntax(407)は、macroblock layer syntax(408)、macroblock prediction syntax(409)などから構成されている。
本実施の形態で、必要となるシンタクス情報はシーケンスヘッダ(402)、スライスヘッダ(405)、マクロブロックヘッダ(408)であり、それぞれのシンタクスを以下で説明する。
図5のシーケンスヘッダ内に示されるex_quant_code_in_slice_flagは、量子化コードテーブルインデックスをスライス毎に符号化するかどうかを示すフラグであり、このフラグが1の場合、量子化コードテーブルインデックス量子化コードテーブルインデックスはスライス毎に変更することができる。一方、ex_quant_code_in_mb_flagは、量子化コードテーブルインデックスをマクロブロック毎に符号化するかどうかを示すフラグであり、このフラグが1の場合、エンコーダはマクロブロック毎に量子化コードテーブルインデックスを変更することができる。
図5で示されるex_quant_code_in_slice_flagが1の場合、図6のスライスヘッダ内でslice_ex_code_zero_flagが符号化される。このフラグは選択された量子化コードテーブルインデックスが0であることを示しており、このフラグが1のとき、現在のスライスでは従来の量子化が選択されていることを示す。つまり、マクロブロック内で量子化パラメータが等しいことを示す。このとき、rem_slice_ex_code_numは符号化されない。一方、slice_ex_code_zero_flagが1であるとき、現在選択された量子化コードテーブルインデックスQCは以下の式(12)の値として符号化される。
同様に、図5で示されるex_quant_code_in_mb_flagが1の場合、図7のマクロブロックヘッダ内でmb_ex_code_zero_flagが符号化される。このフラグは選択された量子化コードテーブルインデックスが0であることを示しており、このフラグが1のとき、現在のマクロブロックでは従来の量子化が選択されていることを示す。つまり、マクロブロック内で量子化パラメータが等しいことを示す。このとき、rem_mb_ex_code_numは符号化されない。一方、mb_ex_code_zero_flagが1であるとき、現在選択された量子化コードテーブルインデックスQCは以下の式(13)の値として符号化される。
このようなシンタクスの目的は低ビットレートで、量子化コードテーブルインデックスによる効果が低いときにできるだけ符号量を削減するためである。
一方、シンタクスに関する別の実施の形態として、次のシンタクスが考えられる。図8にスライスヘッダのデータ構造の一部、及び図9にマクロブロックレイヤーのデータ構造の一部を示す。先ほどとは異なり、どちらも量子化コードテーブルインデックスをそのまま可変長符号化、あるいは固定長符号化し、多重化する。
特にフレーム内予測は、入力画像の空間相関を用いて予測を行うため、マクロブロック内の細かい領域で係数の分布が大きく異なる傾向が強い。このような場合、フラットな量子化器(マクロブロックで量子化パラメータを変更しない)はあまり選択されず、様々な量子化コードテーブルインデックスを用いて量子化された方が発生符号量を削減できる場合が存在する。つまり、量子化コードテーブルインデックスの発生頻度が予測できないため、効率の良いシンタクスを構成し難い。よって図8,9のようなシンタクスが有効になる場合が存在する。
以上説明したように本実施の形態では、複数の選択可能な符号化モードの各々について、実際に仮符号化処理がなされ、符号化モードごとの符号化データの符号量と符号化歪みから得られた符号化コストの最も小さいモードが選択され、選択されたモードに基づいて、量子化コードテーブルループとして再度仮符号化処理を行い、符号化コストが最も小さい量子化コードテーブルインデックスで符号化された符号化データが出力される。このように量子化コードテーブルを用いてマクロブロック内の量子化パラメータを小ブロック毎に制御して符号化モード選択を行っているので、予測ブロック形状及び予測方法に応じて符号化効率の高い符号化を行うことができる量子化パラメータを選択できる、つまり画素ブロックの内容等に応じて好適な量子化をなすことができる。一方、マクロブロック内の量子化パラメータの平均変動値を抑えることで、従来のモード判定方式をそのまま利用することができる。
このように、各符号化モードすべてについて負担の大きい符号化処理を行う必要がなく、選択された符号化モードでの符号化のみ行うようにすればよいので、演算負担の増加も抑制することができる。すなわち、本実施の形態では、高速かつ好適な符号化モード選択と、高速で圧縮効率の高い動画像符号化を実現することが可能となる。
なお、上述したように選択されたモードでの符号化の際、予測誤差信号の量子化された直交変換係数は、逆直交変換及び逆量子化部206にも入力されて、逆量子化及び逆直交変換が施されて予測誤差信号を再生し、予測復号部207によりローカルデコード画像が生成され、参照画像メモリ208に参照画像として一時保存される。これらのローカルデコード画像生成処理は、選択されたモードについてのみ行えばよく、予測モード判定のためのループ内では、必ずしも実行しなくてもよい。
次に、他の例に係る動画像符号化方法を説明する。
量子化コードテーブルインデックスの最大値Q_MAX_IDXが大きい値の場合、特に低ビットレートでは、符号化するシンタクスの符号量が無視できなくなる。そのため、実用的な範囲としてはマクロブロック毎にシンタクスを送る場合で、8通り(3ビット)程度が妥当である。一方、高ビットレートでは、効果の高い量子化コードテーブルインデックスを用いて符号化効率を向上させるべきである。そこで、ベースとなる量子化パラメータに応じて量子化コードテーブルを切り替える。
量子化パラメータQPの値は、符号化制御部121が制御するレートコントロールに従って制御されている。符号化対象マクロブロックを符号化する際には、量子化パラメータの値は既に決まっており、一般的にエンコーダでは量子化パラメータの差分値を符号化する。よって、仮符号化ループでは、与えられた量子化パラメータQPの値によって、使用する量子化コードテーブルを変更する。
より具体的には、量子化パラメータQPがある値QPLowより小さいときにはQ_MAX_IDXが大きいなテーブルを使用し、QPがQPHighより大きいときはQ_MAX_IDXが小さいテーブルを使用する。ビットレートに応じて選択されやすい量子化コードテーブルが存在するため、量子化パラメータの値によって使用するテーブルを適応的に変更する。
また別の例としては、Q_MAX_IDXのテーブルを用意しておき、量子化パラメータの値に応じて先頭から指定したビットの許す範囲で、仮符号化ループを行うといった方式を用いても良い。
図10に8×8画素ブロック量子化コードテーブルインデックスの一例を示す。レート制御から与えられるマクロブロックの量子化パラメータQPの値に応じて利用できるインデックスが変更される。例えばQPが32よりも大きい場合には量子化コードテーブルインデックスは8まで(rem_mb_ex_code_zero_flagが3ビット)選択できる。一方、QPが20−32までの範囲にある場合は、量子化コードテーブルインデックスは16まで(rem_mb_ex_code_zero_flagが4ビット)選択できる。
即ち、マクロブロック毎に使うビットの量をQPの有効範囲に応じて使えるビット長を変える。量子化パラメータが大きいときには荒く量子化するので、符号化データが小さくなる。小さくなるときにマクロブロック毎に大きなビット数を使ってしまうと、全体的に符号量を小さくできなくなるので、量子化パラメータの範囲に応じて何ビット使うかを決める。この決めをエンコーダ、デコーダに入れておくと、使うビットレートに応じて実際に送るシンタックスのビット量が調整できる。
このようにして、量子化パラメータQPに応じて選択できるテーブルを切り替えることで、シンタクスのオーバーヘッドを抑えて符号化効率を向上させることが可能である。
次に、第2の実施の形態にかかる動画像符号化方法を説明する。
本実施の形態では、第1の実施の形態に加えて、画素ブロック毎に対応する量子化マトリクスを選択するステップが加わっている。即ち、本実施の形態では、量子化コードテーブルの量子化パラメータを表すインデックスを決めるだけではなくて、複数の量子化マトリクスを選択的に切り替えることも含む。動画像符号化装置の構成は図1と同様である。第2の実施の形態において、第1の実施の形態と共通する構成要素にはその説明を省略する。
図11に本実施の形態における動画像符号化の処理の流れを示す。ステップS1001、ステップS1002はそれぞれステップS201、S202と等しい。
符号化制御部121は、量子化マトリクスのテーブル番号を示すインデックスWM_idxを0に初期化する(ステップS1003)。さらに各変数の初期化を行う(ステップS1004、ステップS1005)。
第1の実施の形態と同様に、仮符号化ループ(図1における量子化セット選択部101→直交変換部102→量子化部103→スイッチ104→仮符号化及び符号量計測部105→符号化歪み測定部106→符号化モード制御・判定部107の順序で流れる処理)を繰り返して、それぞれ符号化モードI、量子化コードテーブルインデックスQCを決定する(ステップS1005〜ステップS1013)。
ここで、符号化モードと量子化コードテーブルインデックスを決定するまでの仮符号化ループでは量子化マトリクスを用いないフラットな量子化及び逆量子化を行う。フラットな量子化とは、式(7)で示される量子化マトリクスの全成分が16であるような量子化である。H.264では、量子化マトリクスを利用しない場合、フラットな量子化が行われる。
ステップS1013の判定でYESが選択されると、量子化セット選択部101は、WM_idxをインクリメントして符号化制御部121にセットする。ここで、WM_idxが2に等しいかどうかを判別する。かかる判別がNOである場合、符号化モードを更新し(ステップS1014)、更新された量子化マトリクスインデックスで、さらに仮符号化が行われる。ここで、仮符号化によって得られた符号化コストcostが、min_costよりも小さい場合は、best_WM_idxを更新し、仮符号化結果を保存する(ステップS1010)。
かかる判別がYESの場合、仮符号化ループを終了し、仮符号化ループにて決定された諸々のパラメータで再符号化を行う(ステップS1016)。ここで、仮符号化時のデータを保持している場合は再符号化の必要は無いため、そのまま符号化データは多重化部122へと出力され、各々の方式に従って多重化された後に出力バッファ123へと出力され、ビットストリームデータとして出力される(S215)。
本実施の形態では、WM_idxは次のようなインデックスの値とする。WM_idxが0のときはフラットな量子化を行う。一方、WM_idxが1のときは、対象とするマクロブロックに対してH.264で規定されている量子化マトリクスを適用する。例えば、デフォルトマトリクスを用いた場合には、本方式によるとマクロブロック毎に、デフォルトマトリクスとフラットなマトリクスを任意に選択できるようになる。H.264の4×4画素ブロックにおけるデフォルトマトリクスとフラットなマトリクス(量子化マトリクスを用いない場合に対応)を式(14)に示す。
次に量子化マトリクスのインデックスの符号化方法について説明する。図12にシーケンスヘッダのデータ構造の一部、図13にスライスヘッダのデータ構造の一部、図14にマクロブロックヘッダのデータ構造の一部を示す。これらは、図4のシンタクス構造と同様に定義されている。
図12で示されるex_quant_matrix_in_slice_flagはスライス毎に量子化マトリクスのインデックスを符号化するかどうかを示すフラグであり、ex_quant_matrix_in_mb_flagはマクロブロック毎に量子化マトリクスのインデックスを符号化するかどうかを示すフラグである。
slice_ex_matrix_flagは、そのスライスで量子化マトリクスを使うかどうかを示すフラグであり、slice_ex_matrix_flagが1のときは対応する量子化マトリクスを使用する。この場合、量子化マトリクスを送っても良いし、H.264 Highプロファイルにあるようなデフォルトマトリクスを使用してもよい。0のときは、そのスライス内では、量子化マトリクスを使用しないことを意味する。同様に、mb_ex_matrix_flagは対応するマクロブロックで量子化マトリクスを使用するかどうかを示すフラグであり、1のときは量子化マトリクスを用いて量子化する。
尚、図12、13で示されるような1ビットで示されるフラグではなく、対応する量子化マトリクスのインデックスをそのまま送って、複数の量子化マトリクスを用いて量子化・逆量子化してもよい。このとき、符号化器ならびに復号化器では、それぞれの量子化マトリクスのインデックスに対応する量子化マトリクステーブルを所持している(または量子化マトリクスを符号化データに多重化して送る)必要がある。
フレーム間符号化に比べて、フレーム内符号化は量子化に関係するパラメータ(量子化パラメータ、量子化コードテーブル、量子化マトリクス、量子化オフセットなど)を細かく制御することで、符号化効率の改善が期待できる。そこで、上述した符号化方式をフレーム内符号化領域にだけ適用することも可能である。この場合、図1において、フレーム間符号化情報を符号化制御部121から得たときには、量子化セット選択部101は、量子化コードテーブルインデックス及び量子化マトリクスインデックスをそれぞれ0にセットする。さらに、ステップS212では常にYESを選択する。同様にステップS1015も常にYESを選択する。
つまり、フレーム間符号化ブロックでは、量子化コードテーブルインデックスループ及び量子化マトリクスインデックスループを実行しない。また、それぞれインデックス0しか選択しえないので、シンタクスも送る必要は無い。このようにして、効果の高いフレーム内符号化領域のみにそれぞれの量子化に関するパラメータを用いて符号化を行い、フレーム間符号化領域には適用しないことで、処理負担の改善ができ、符号化効率を向上することが可能である。
以上説明したように本実施の形態では、複数の選択可能な符号化モードの各々について、実際に仮符号化処理がなされ、モードごとの符号化データの符号量と符号化歪みから得られた符号化コストの最も小さいモードが選択される。選択されたモードに基づいて、量子化コードテーブルループとして再度仮符号化処理を行い、符号化コストが最も小さい量子化コードテーブルが選択される。選択された符号化モードと量子化コードテーブルに基づいて、量子化マトリクスループとして再度仮符号化処理を行い、符号化コストがもっとも小さい量子化マトリクスインデックスが決定される。これらの量子化に関するパラメータを用いて、再符号化が行われ、符号化データが出力される。このように量子化コードテーブルを用いてマクロブロック内の量子化パラメータを小ブロック毎に制御してモード選択を行い、さらに量子化マトリクスをマクロブロック毎に適応的に切り替えて符号化を行っているので、予測ブロック形状及び予測方法に応じて符号化効率の高い符号化を行うことができる、つまり画素ブロックの内容等に応じて好適な量子化をなすことができる。
図15に、本実施の形態に係る動画像復号化装置300の構成を示す。動画像符号化装置100から送出され、伝送系または蓄積系を経て送られてきた符号化データは、入力バッファ301に一度蓄えられ、多重化分離器302により1フレーム毎にシンタクスに基づいて分離された後、可変長復号化器303に入力される。可変長復号化器303では、符号化データの各シンタクスの可変長符号が復号され、量子化変換係数、量子化マトリクス、量子化パラメータ、量子化コードテーブル情報、モード情報、動きベクトル情報などが再生される。
量子化変換係数は、再生された各情報のうち、量子化マトリクス、量子化パラメータ、量子化コードテーブル情報を用いて、逆量子化器304で逆量子化され、逆直交変換器305で逆直交変換される。ここでモード情報がイントラ符号化モードを示している場合には、逆直交変換器305から再生画像信号が出力され、加算器306を介して最終的な再生画像信号310として出力される。
モード情報がインター符号化モードを示している場合には、逆直交変換器305から予測誤差信号が出力され、さらにモード選択スイッチ309がオンとされる。予測誤差信号とフレームメモリ/予測画像生成器308から出力される予測画像信号212が加算器106で加算されることにより、再生画像信号310が出力される。再生画像信号310は、フレームメモリ/予測画像作成器308に参照画像信号として蓄積される。
モード情報、動きベクトル情報は、フレームメモリ/予測画像作成器308に入力される。モード情報はモード選択スイッチ309にも入力され、該スイッチ309をイントラ符号化モードの場合にはオフ、インター符号化モードの場合にはオンとする。
可変長復号化部303は、多重化分離されたデータから各々の方式に従って可変長復号を行い、それぞれ復号化に必要な情報をセットする。本実施の形態で送られてくるシンタクスの概要は図4で示されている。
シンタクスは主に3つのパートからなり、High Level Syntax(401)はスライス以上の上位レイヤのシンタクス情報が詰め込まれている。Slice Level Syntax(404)では、スライス毎に必要な情報が明記されており、Macroblock Level Syntax(407)では、マクロブロック毎に必要とされる誤差信号やモード情報などが明記されている。
それぞれは、さらに詳細なシンタクスで構成されており、High Level Syntax(401)では、Sequence parameter set syntax(402)とPicture parameter set syntax(403)などのシーケンス、ピクチャレベルのシンタクスから構成されている。Slice Level Syntax(404)では、Slice header syntax(405)、Slice data syntax(406)などから成る。さらに、Macroblock Level Syntax(407)は、macroblock layer syntax(408)、macroblock prediction syntax(409)などから構成されている。
本実施の形態で、必要となるシンタクス情報はシーケンスヘッダ(402)、スライスヘッダ(405)、マクロブロックヘッダ(408)であり、それぞれのシンタクスを以下で説明する。
図5のシーケンスヘッダ内に示されるex_quant_code_in_slice_flagは、量子化コードテーブルインデックスをスライス毎に復号化するかどうかを示すフラグであり、このフラグが1の場合、量子化コードテーブルインデックスはスライス毎に変更されて復号化される。一方、ex_quant_code_in_mb_flagは、量子化コードテーブルインデックス量子化コードテーブルインデックスをマクロブロック毎に復号化するかどうかを示すフラグであり、このフラグが1の場合、エンコーダはマクロブロック毎に量子化コードテーブルインデックス量子化コードテーブルインデックスを変更して復号化される。
図5で示されるex_quant_code_in_slice_flagが1の場合、図6のスライスヘッダ内でslice_ex_code_zero_flagが復号化される。このフラグは選択された量子化コードテーブルインデックスが0であることを示しており、このフラグが1のとき、現在のスライスでは従来の逆量子化が選択されていることを示す。つまり、マクロブロック内で量子化パラメータが等しいことを示す。このとき、rem_slice_ex_code_numは符号化されない。一方、slice_ex_code_zero_flagが1であるとき、現在選択された量子化コードテーブルインデックスQCは次式(15)の値として復号化される。
同様に、図5で示されるex_quant_code_in_mb_flagが1の場合、図7のマクロブロックヘッダ内でmb_ex_code_zero_flagが復号化される。このフラグは選択された量子化コードテーブルインデックスが0であることを示しており、このフラグが1のとき、現在のマクロブロックでは従来の逆量子化が選択されていることを示す。つまり、マクロブロック内で量子化パラメータが等しいことを示す。このとき、rem_mb_ex_code_numは符号化されない。一方、mb_ex_code_zero_flagが1であるとき、現在選択された量子化コードテーブルインデックスQCは次式(16)の値として復号化される。
シーケンスヘッダ、スライスヘッダ、マクロブロックヘッダなどから得られた情報は、復号化制御部310に設定され、以後の信号処理部で利用される。
一方、シンタクスに関する別の実施の形態として、次のシンタクスが考えられる。図8にスライスヘッダのデータ構造の一部、及び図9にマクロブロックレイヤーのデータ構造の一部を示す。先ほどとは異なり、どちらも多重化分離部302で分離された量子化コードテーブルインデックスをそのまま可変長復号化、あるいは固定長復号化する。
逆量子化部304では、可変長復号された量子化コードテーブル情報を用いて現在のマクロブロックの量子化コードテーブルを量子化コードテーブルインデックスから呼び出し、対応する画素ブロック毎に小画素ブロックの量子化パラメータを設定して、式(3)で示されるような逆量子化が行われる。
この逆量子化の詳細な説明は以下のようになる。可変長復号化部303で復号化された量子化コードテーブルを示すインデックスQCを用いて、式(9)と同じ次式(17)により量子化パラメータが算出される。
QP
blkは量子化コードテーブルインデックスQCから導出された小画素ブロック量子化パラメータを表しており、QPはマクロブロックの量子化パラメータを示す。QPの値は、マクロブロックヘッダから可変長復号されて得ることができる。QV(QC,blk)は量子化コードテーブルインデックスQC、ブロックナンバーblkで示される量子化コードを示している。これらの処理は、8×8ブロック単位で行っても良いし4×4ブロック単位で行っても良い。例えば、8×8ブロック単位の量子化コードテーブルは式(10)と同じ次式(18)により定義される。
例えば−1はマクロブロックの量子化パラメータを−1して、対象とする8×8ブロックの逆量子化を行うことを示している。
マクロブロック内には4つの8×8ブロックが存在する。よってblkは0から3までの値を取る。
それぞれの位置に対応するパラメータ変化度を用いて量子化パラメータを変更する。8×8画素単位で量子化パラメータを変える場合、4×4画素ブロック量子化器では、図3左側に示すように4つのブロックで同じ量子化パラメータで逆量子化が行われる。一方、8×8画素ブロック量子化器の場合は図3右側に示すようにブロック毎に量子化パラメータを変更する。
次に量子化マトリクスのインデックスの復号化方法について説明する。図12にシーケンスヘッダのデータ構造の一部、図13にスライスヘッダのデータ構造の一部、図14にマクロブロックヘッダのデータ構造の一部を示す。これらは、図4のシンタクス構造と同様に定義されている。
図12で示されるex_quant_matrix_in_slice_flagはスライス毎に量子化マトリクスのインデックスを復号化するかどうかを示すフラグであり、ex_quant_matrix_in_mb_flagはマクロブロック毎に量子化マトリクスのインデックスを復号化するかどうかを示すフラグである。
slice_ex_matrix_flagは、そのスライスで量子化マトリクスを使うかどうかを示すフラグであり、slice_ex_matrix_flagが1のときは対応する量子化マトリクスを使用する。この場合、量子化マトリクスを受け取っても良いし、H.264 Highプロファイルにあるようなデフォルトマトリクスを使用するように取り決めておいても良い。slice_ex_matrix_flagが0のときは、そのスライス内では、逆量子化時に量子化マトリクスを使用しないことを意味する。同様に、mb_ex_matrix_flagは対応するマクロブロックで量子化マトリクスを使用するかどうかを示すフラグであり、1のときは量子化マトリクスを用いて逆量子化する。
尚、図12、13で示されるような1ビットで示されるフラグではなく、対応する量子化マトリクスのインデックスをそのまま受け取って、複数の量子化マトリクスを用いて逆量子化してもよい。このとき、復号化器では、それぞれの量子化マトリクスのインデックスに対応する量子化マトリクステーブルを所持している(または量子化マトリクスを符号化データから復号化する)必要がある。
実際に逆量子化時にどのように量子化マトリクスを切り替えるのかについて以下に詳細に説明する。スライスヘッダのslice_ex_matrix_flag或いはマクロブロックヘッダのmb_ex_matrix_flagが0であるとき、対応するスライス或いはマクロブロックでは、量子化マトリクスを使用しない(つまり、フラットな逆量子化が行われる)。一方、スライスヘッダのslice_ex_matrix_flag或いはマクロブロックヘッダのmb_ex_matrix_flagが1であるとき、対応するスライス或いはマクロブロックでは、送られてきた量子化マトリクス、或いはデフォルトマトリクスを用いて逆量子化が行われる。例えば、デフォルトマトリクスを用いた場合には、本方式によるとスライス又はマクロブロック毎に、デフォルトマトリクスとフラットなマトリクスを選択する。H.264の4×4画素ブロックにおけるデフォルトマトリクスとフラットなマトリクス(量子化マトリクスを用いない場合に対応)を式(19)に示す。
このように本方式を用いると、式(3)の逆量子化を行なう場合に、式(4)の量子化マトリクスが、スライス毎或いはマクロブロック毎に変更できるため、主観画質を考慮した逆量子化が可能となる。このように、逆量子化部304では、動画像符号化装置で行われる量子化と同様の方式を用いて逆量子化が行われる。
上記実施の形態においては動画像符号化を例にとり説明したが、静止画像符号化にも本発明を適用することができる。
100…動画像符号化装置、101…量子化セット選択部、102…直交変換部、103…量子化部、104…スイッチ、105…仮符号化及び符号量測定部、106…符号化歪み測定部、107…符号化モード制御・判定部、108…逆量子化部、109…逆直交変換部。110…予測復号化部、111…参照画像メモリ、112…可変長符号化部、120…予測信号生成部、121…符号化制御部、122…多重化部、123…出力バッファ