(実施形態1)
第1の実施形態を、図1から図10を使って説明する。
図1は、画像符号化装置の構成を示すブロック図である。なお、以下に記述する第2の実施形態以降の画像符号化装置の構成も図1と同様であるものとする。図1において、101は画像データを入力する入力部である。以下、単に入力部101と記す。102はスライス設定部であり、入力される画像の特性や予め決められたタイミングに応じて画像内のスライスのサイズ、位置等を決定し、それぞれのスライスのスライスタイプを設定する。103はイントラブロックコピー可否設定部であり、イントラブロックコピーイングを行うか否かを表すイントラブロックコピー可否情報を設定する。イントラブロックコピーイングを行うか否かの決定について特に限定しない。イントラブロックコピー可否設定部103は、ビットストリームを生成する画像符号化装置またはビットストリームを復号する画像復号装置の機能に基づいて設定したり、ユーザが設定したりしてもよい。104はピクチャバッファであり、入力される動画像をそれぞれピクチャ単位で格納するバッファとして使用される。105はブロック分割部であり、ピクチャバッファ104から画像をブロック単位で入力し、必要に応じてサブブロックに分割し、それぞれを後段の処理に出力する。後段ではブロックないしサブブロックを処理の単位としてブロックと称することとする。106はイントラブロックコピー予測部であり、符号化対象ピクチャの符号化済みがブロックの再生画像を参照してコピーベクトルを算出し、符号化対象のブロックの予測画像となるイントラブロックコピー予測ブロックデータを算出する。図34にその様子を表す。3401は例えば8x8の画素を有するブロックを表しており、ブロックXとする。ブロックXに対して、所定の探索範囲の符号化済みの画像データを参照して、最も類似するブロックの位置を決定する。ここでは、この類似するブロックを予測ブロックと呼ぶ。なお、図34に示す例では、符号化済みの画像データは対象ブロックXの上側および左側のブロックを含む範囲が探索範囲となる。点線で表したブロック3402や3403のいずれかが最も類似する予測ブロックとする場合、矢印3404、3405のいずれかが算出されるコピーベクトルとなる。すなわち、コピーベクトルは、ピクチャ内において符号化対象のブロック(復号化装置においては復号化対象のブロック)と予測ブロックとの空間的な関係を示している。所定の探索範囲については特に限定されない。例えば、符号化済みの全ての画像データを参照しても良いし、同じブロックラインの符号化済みの画像データのみを参照しても良い。前者ではコピーベクトル3104および3105のいずれかが算出され、後者ではコピーベクトル3405が算出されることになる。また、HEVCでは直前に符号化されたLCU(最大符号化単位)の画像データと符号化中のLCUで符号化済みの画像データにその探索範囲を限定しても構わない。イントラブロックコピー予測部106は、生成されたイントラブロックコピー予測ブロックデータと符号化対象ブロックの画像データからイントラブロックコピー予測誤差ブロックデータを生成し、出力する。107はインター予測部であり、符号化対象ピクチャより前に符号化されたピクチャの再生画像を参照して動きベクトルを算出し、符号化対象のブロックの予測画像となるインター予測ブロックデータを算出する。生成されたインター予測ブロックデータと符号化対象ブロックの画像データからインター予測誤差ブロックデータを生成し、出力する。108はイントラ予測部であり、符号化対象ピクチャの符号化対象ブロックの周辺の符号化済みの再生画像の画素値をイントラ予測モードに基づいて参照し、最適なイントラ予測モードを決定する。図33(a)にイントラ予測モードの一例を表す。3301はブロックを表す。ここでは8画素×8画素のブロックを例にとって説明するが、ブロックのサイズはこれに限定されない。図33において、z0、a01、a02、・・・a15、b01、b02、・・・b15は符号化済みの画素を表す。図33(b)は水平方向に周囲の復号済み画素から予測する様子を表す。図33(c)は垂直方向に周囲の復号済み画素から予測する様子を表す。図33(d)は斜め右下方向に周囲の復号済み画素から予測する様子を表す。図33(e)は斜め左下方向に周囲の復号済み画素から予測する様子を表す。さらに最適なイントラ予測モードに従って符号化対象のブロックの予測画像となるイントラ予測ブロックデータを算出する。生成されたイントラ予測ブロックデータと符号化対象ブロックの画像データからイントラ予測誤差ブロックデータを生成し、出力する。113は予測モード決定部であり、スライスタイプで使用できる予測符号化モードの内、最適な予測符号化モードを決定し、出力する。本実施形態ではイントラブロックコピー符号化を行うイントラブロックコピー符号化モード、動き補償を行うインター予測符号化モード、イントラ予測を行うイントラ予測符号化モードから選択する。判定の方法は特に限定されないが、符号化した際の符号量等から最小のものを選択するなどの方法が考えられる。109はコピーベクトル符号化部であり、イントラブロックコピー符号化モードが選択された場合に、コピーベクトルメモリ110に格納されたコピーベクトルを参照して、コピーベクトルを符号化する。110はコピーベクトルメモリであり、コピーベクトルの予測を行う際に用いるために符号化されたコピーベクトルを格納する。111は動きベクトル符号化部であり、予測符号化モードでインター符号化モードが選択された場合に、動きベクトルメモリ112に格納された動きベクトルを参照して、動きベクトルを符号化する。112は動きベクトルメモリであり、符号化において動きベクトルの予測を行う際に参照するために符号化済みの動きベクトルを格納する。114はヘッダ符号化部であり、シーケンスヘッダ、スライスヘッダ、ブロックヘッダの符号データを生成し、出力する。特に、シーケンスヘッダの符号化においては動画像シーケンス単位でイントラブロックコピー可否情報であるintra_block_copy_enabled_flagが符号化される。スライスヘッダの符号化においては、スライスタイプを表すslice_typeが符号化される。ブロックヘッダの符号化においては、ブロック符号化モードを表すpred_mode_flag符号を符号化する。ブロック符号化モードがイントラ符号化モードの場合、イントラブロックコピー符号化モードが選択されたことを示すイントラブロックコピーフラグを表すintra_bc_flag符号やイントラ予測モードを表す符号も符号化する。115は変換・量子化部であり、予測モード決定部113で決定された予測符号化モードに応じて、イントラブロックコピー予測部106、インター予測部107、イントラ予測部108から出力される予測誤差ブロックデータを入力する。変換・量子化部115は、入力された予測誤差ブロックデータに対して、直交変換を行い、直交変換係数を算出し、さらに直交変換係数を量子化パラメータを用いた所定の方法によって量子化して量子化係数を算出し、出力する。また、量子化に用いた量子化パラメータを逆量子化・逆変換部116に出力する。116は逆量子化・逆変換部であり、入力された量子化係数に対して量子化パラメータを用いて逆量子化して直交変換係数を再生し、さらに逆直交変換を施し、符号化対象ブロックの予測誤差ブロックデータを再生する。117は再構成部であり、復号された予測誤差と予測モード決定部113で決定された予測符号化モードに応じて、コピーベクトル、動きベクトル、イントラ予測モードを入力し、これに基づいて予測ブロックデータを生成し、復号された再生画像を生成する。118はカレントピクチャメモリであり、再生された符号化対象ピクチャの再生画像の画像データを格納する。119はピクチャメモリであり、符号化対象ピクチャのより前に符号化されたピクチャの再生画像の画像データを格納する。120は符号化部であり、量子化係数を符号化し、予測誤差の符号データを生成し、出力する。121はヘッダ符号化部114、コピーベクトル符号化部109、動きベクトル符号化部111、符号化部120から出力された符号データからビットストリームを構成し出力する。122は出力部であり、ビットストリームを外部に出力する。図1の各処理部は1つの物理的な集積回路によって構成されてもよいし、それぞれが1つの回路であってもよい。123は、画像符号化装置の上記の各処理部を制御する制御部であり、CPUなどによって構成される。
上記画像符号化装置における画像の符号化動作を以下に説明する。符号化動作については図5から図9に示したフローチャートに基づき説明する。
図5は符号化動作の全体を表すフローチャートである。ステップS501において、符号化に先立ち、イントラブロックコピー可否設定部103は、シーケンス全体でイントラブロックコピー符号化を行うか否かを表すイントラブロックコピー可否情報を設定する。イントラブロックコピー可否情報は符号化対象のシーケンスでイントラブロックコピー符号化を行う場合には値に1を、行わない場合は0が設定される。特にその設定にあたっては方法を問わないが、不図示のユーザが設定したり、符号化装置の構成によって設定したりすること等が可能である。さらに、ステップS502にて、ヘッダ符号化部114は、ステップS501で決定されたイントラブロックコピー可否情報をintra_block_copy_enabled_flag符号として符号化し、シーケンスヘッダの符号データに挿入する。生成されたシーケンスの符号データは統合部121に入力され、ビットストリームに成形されて出力部122から外部に出力される。ステップS503以降で、各ピクチャの符号化処理が行われる。
ステップS503にて、入力部101は、符号化対象のピクチャの画像データを入力し、ピクチャバッファ104に格納する。ステップS504にて、スライス設定部102は、入力された画像データのスライス分割の構成を決定し、それぞれのスライスのスライスタイプを設定する。スライス分割の構成の設定方法については特に限定しない。ピクチャを等分割したり、画像の特性に応じて分割したりすることが可能である。また、スライスタイプの設定方法についても特に限定しない。例えば、ピクチャ単位でスライスタイプを決定しても構わないし、スライス内の画像データの特性に応じて決定しても構わない。
ステップS505以降で、各スライスの符号化処理を行う。ステップS505にて、ヘッダ符号化部114は、スライスヘッダの符号化を実行する。スライスヘッダの符号化において、スライスタイプを表すslice_type符号を符号化する。slice_type符号にはイントラ予測符号化のみで符号化が可能なスライス(以下、イントラスライスと称する。)を表すI_sliceが含まれる。さらにslice_type符号には、インター符号化モードも使って符号化を行うことが可能なスライス(以下では総称して非イントラスライスと称する)としてP_slice、およびB_sliceが含まれる。ステップS506にて、ブロック分割部105はスライスをブロックに分割する。例えば、HEVCではまず、LCU(最大符号化単位)に分割し、その内部を必要に応じてCU(符号化単位)に分割する。本実施形態では説明を簡易にするため、それぞれをブロックと称する。ステップS507、S508にてブロック単位の符号化が実行される。
ステップS507において、各ブロックの符号化が行われる。図6はブロックの符号化動作を表すフローチャートである。
ステップS601にて、スライス設定部102は自身が設定したスライスタイプに基づく判定を行い、I_sliceを設定していればステップS603に進み、そうでなければ、ステップS602に進む。
最初に、ステップS601において、スライス設定部102がスライスタイプとしてI_sliceを設定したと判定された場合、ステップS603に進む。ステップS603にて、イントラブロックコピー予測部106、イントラ予測部108は、ステップS501で設定されたイントラブロックコピー可否情報を判定する。その結果、イントラブロックコピー可否情報が1であれば、ステップS606に進み、そうでなければステップS604に進む。
ステップS603において、イントラブロックコピー可否情報が1であった場合ステップS606に進む。ステップS606にて、イントラ予測部108は、カレントピクチャメモリ118に格納されている符号化対象ピクチャの符号化対象ブロックの周辺の再生画像の画像データを参照し、イントラ予測モードを決定する。また、イントラ予測部108は、決定されたイントラ予測モードに基づいて、符号化対象ブロックの予測画像であるイントラ予測ブロックデータを生成する。さらに、イントラ予測部108は、生成されたイントラ予測ブロックデータと符号化対象ブロックの画像データからイントラ予測誤差ブロックデータを生成する。算出されたイントラ予測モードはヘッダ符号化部114および再構成部117に出力され、イントラ予測誤差ブロックデータは予測モード決定部113および変換・量子化部115に出力される。ステップS607にて、イントラブロックコピー予測部106は、カレントピクチャメモリ118に格納されている符号化対象ピクチャの符号化済みのブロックの再生画像を参照し、コピーベクトルを算出する。さらに、イントラブロックコピー予測部106は算出されたコピーベクトルに基づいて、符号化対象ブロックの予測画像であるイントラブロックコピー予測ブロックデータを生成する。その後、生成されたイントラブロックコピー予測ブロックデータと符号化対象ブロックの画像データからイントラブロックコピー予測誤差ブロックデータを生成する。算出されたコピーベクトルはコピーベクトル符号化部109および再構成部117に出力され、イントラブロックコピー予測誤差ブロックデータは予測モード決定部113および変換・量子化部115に出力される。ステップS608にて、予測モード決定部113は、符号化に使用する予測符号化モードを決定する。但し、決定の方法は特に限定されない。例えば、予測モード決定部113は、それぞれの予測誤差ブロックデータから符号化コストを推定し、その大小比較によって符号化に使用する予測符号化モードを符号化コストが小さい方のモードに決定することができる。ここでは、選択できる予測符号化モードはイントラ予測符号化モードかイントラブロックコピー符号化モードである。イントラ予測符号化モードであればステップS605に進み、イントラブロックコピー符号化モードであればステップS609に進む。
ステップS608において、イントラブロックコピー符号化モードが選択された場合、ステップS609に進む。。ステップS609にて、ヘッダ符号化部114はイントラブロックコピーフラグに1を設定する。その後、ステップS623に進む。
ステップS623ではブロックのイントラブロックコピー符号化処理が行われる。図9はブロックのイントラブロックコピー符号化処理を表すフローチャートである。ステップS901にて、ヘッダ符号化部114は、ブロック符号化モードにイントラ符号化モード(MODE_INTRA)を設定する。ステップS902にて、コピーベクトル符号化部109はコピーベクトルメモリ110に格納されているコピーベクトルから、マージモードのためのコピーベクトルの候補リストを作成する。コピーベクトルの候補リストはインター予測符号化モードのマージモードと同様に、空間的に近傍のコピーベクトルから参照して生成される。具体的には、図32に周囲のブロックの参照を表す。図32において、符号化対象のブロックをXとすると空間的に近傍でありかつ符号化済みのブロックA0、A1、B0、B1、B2を参照する。コピーベクトル符号化部109は、それぞれのブロックが存在し、それぞれのブロックがイントラブロックコピー符号化モードで符号化されているかどうか判定する。もしイントラブロックコピーモードで符号化されていると判定された場合、コピーベクトル符号化部109は、イントラブロックコピーモードで符号化されたブロックに関連付けられているコピーベクトルをコピーベクトル候補リストに登録する。その後、コピーベクトル符号化部109は、同じベクトル値のコピーベクトルを1つにまとめる。もし、登録されたコピーベクトルが予め決められたコピーベクトル候補リストのコピーベクトル登録最大数よりも小さければ、コピーベクトル符号化部109は、適宜コピーベクトルを追加する。例えば、ブロックの縦の幅をh、横の幅をwとした時に、ベクトル値(−w、0)、(0、−h)、(−w、−h)、(w、−h)、(−2w、0)といった順にコピーベクトルを追加する。但し、追加するコピーベクトルはこれらに限定されない。
ステップS903にて、ヘッダ符号化部114はスライスタイプを判定する。スライスタイプとしてI_sliceが設定されていれば、ステップS905に進み、そうでなければステップS904に進む。ステップS904にて、ヘッダ符号化部114はスキップ符号化を行うか否かを示すスキップフラグの値を0に設定し、それを表すcu_skip_flag符号を符号化する。スキップフラグは符号化対象のブロックがスキップ符号化される場合に値として1となり、そうでなければ0となる。ステップS904の動作は、図2に示したシンタックスにおいて、スライスタイプがI_sliceではない場合に、cu_skip_flag符号の符号化が行われるため、必要となる。ステップS905にて、ヘッダ符号化部114はステップS609ないし、ステップS616で設定されたイントラブロックコピーフラグの値である1をintra_bc_flag符号として符号化する。intra_bc_flag符号の符号データは統合部121に入力され、ビットストリームに成形されて出力部122から外部に出力される。ステップS906にて、ステップS903と同様にヘッダ符号化部114はスライスタイプを判定し、I_sliceが設定されていれば、ステップS908に進み、そうでなければステップS907に進む。ステップS907にて、ヘッダ符号化部114はステップS901で設定されたイントラ符号化モード(MODE_INTRA)をpred_mode_flag符号として符号化する。
ステップS908にて、コピーベクトル符号化部109は、ステップS607ないしステップS612で算出されたコピーベクトルがマージモードで符号化できるか否かを判定する。判定の方法は特に限定しないが、例えば、コピーベクトル候補リストに登録されたコピーベクトルと算出されたコピーベクトルのベクトル値が一致するか否かを判定してもよい。マージモードでの符号化をする場合、ステップS909に進み、そうでない場合はステップS910に進む。ステップS909にて、コピーベクトル符号化部109はマージモードの可否を表すマージモードフラグに1を設定し、これをmerge_flag符号として符号化する。さらに、コピーベクトル符号化部109は、コピーベクトル候補リストのコピーベクトルの内、符号化対象のコピーベクトルと一致するベクトル値を持つコピーベクトルのベクトル候補インデックスをmerge_idx符号として符号化する。ステップS910にて、ヘッダ符号化部114はマージモードフラグに0を設定し、これをmerge_flag符号として符号化する。続いて、コピーベクトル符号化部109は算出されたコピーベクトルをコピーベクトルメモリ110に格納されている周囲のコピーベクトルから予測を行い、コピーベクトルの予測の方向を決定する。コピーベクトル符号化部109は、その予測されたコピーベクトルとの差分ベクトルを求めて、差分ベクトルのベクトル値とその予測の方向を表すコピーベクトル参照フラグをmvp_ibc_flag符号として符号化する。例えば、図32のA0、A1、B0、B1、B2において、ブロックA0、A1、から選ばれたコピーベクトルが用いられた場合はコピーベクトル参照フラグの値を0とする。また、ブロックB0、B1、B2から選ばれたコピーベクトルが用いられた場合はコピーベクトル参照フラグの値を1とする。この値をmvp_ibc_flag符号として符号化する。
ステップS911にて、変換・量子化部115はステップS605ないしステップS612で生成されたイントラブロックコピー予測誤差ブロックデータに直交変換、量子化を施し、量子化係数を算出する。算出された量子化係数は符号化部120と逆量子化・逆変換部116、ヘッダ符号化部114に入力される。逆量子化・逆変換部116に入力された量子化係数は逆量子化、逆変換を経て、イントラブロックコピー予測誤差ブロックデータとして再生する。また、再構成部117はコピーベクトルに基づいてカレントピクチャメモリ118からイントラブロックコピー予測ブロックデータを算出する。再構成部117は、さらにこのイントラブロックコピー予測ブロックデータとイントラブロックコピー予測誤差ブロックデータを用いて、符号化対象ブロックの復号画像の再生画像の画像データを算出する。算出された再生画像の画像データはカレントピクチャメモリ118に格納される。また、符号化部120はイントラブロックコピー予測誤差ブロックデータの量子化係数を符号化し、その符号データを生成する。生成された符号データは統合部121に入力され、ビットストリームに成形されて出力部122から外部に出力される。その後、符号化対象ブロックの符号化処理を終了する。
図6に戻り、ステップS608において、イントラ予測符号化モードが選択された場合、ステップS605に進む。ステップS605にて、ヘッダ符号化部114はイントラブロックコピーフラグに0を設定する。その後、ステップS622に進む。
ステップS622にて、ブロックのイントラ予測符号化処理が行われる。図8はブロックのイントラ予測符号化の符号化動作を表すフローチャートである。ステップS801にて、ヘッダ符号化部114はブロック符号化モードにイントラ符号化モード(MODE_INTRA)を設定する。ステップS802にて、ヘッダ符号化部114は、スライスタイプがI_sliceか否かを判定し、I_sliceであれば、ステップS804に進み、そうでなければステップS803に進む。ステップS803にて、ヘッダ符号化部114はスキップ符号化を行うか否かを示すスキップフラグの値を0に設定し、それを表すcu_skip_flagを符号化する。ステップS804にて、ヘッダ符号化部114はステップS501で設定されたイントラブロックコピー可否情報を判定し、イントラブロックコピー可否情報が1であれば、ステップS805に進み、そうでなければステップS806に進む。ステップS805にて、ヘッダ符号化部114はステップS609、ステップS615、ないし、ステップS617で設定されたイントラブロックコピーフラグの値である0をintra_bc_flag符号として符号化する。ステップS806にて、ヘッダ符号化部114は、スライスタイプがI_sliceか否かを判定し、I_sliceであれば、ステップS808に進み、そうでなければステップS807に進む。ステップS807にて、ヘッダ符号化部114はステップS801で設定されたイントラ符号化モード(MODE_INTRA)をpred_mode_flag符号として符号化する。ステップS808にて、ヘッダ符号化部114はステップS604、S606、ステップS611、ないし、ステップS619で算出したイントラ予測モードを符号化する。ステップS809にて、変換・量子化部115はステップS604、ステップS606、ステップS611、ないし、ステップS619で生成されたイントラ予測誤差ブロックデータに直交変換、量子化を施し、量子化係数を算出する。算出された量子化係数は符号化部120と逆量子化・逆変換部116、ヘッダ符号化部114に入力される。逆量子化・逆変換部116は入力された量子化係数に対して逆量子化、逆変換を施し、イントラ予測誤差ブロックデータを再生する。また、再構成部117は、イントラ予測モードに基づいてカレントピクチャメモリ118からイントラ予測ブロックデータを算出し、さらにイントラ予測誤差ブロックデータを用いて、符号化対象ブロックの復号画像として再生画像の画像データを算出する。算出された再生画像の画像データはカレントピクチャメモリ118に格納される。また、符号化部120はイントラ予測誤差ブロックデータの量子化係数を符号化し、予測誤差の符号データを生成する。生成された符号データは統合部121に入力され、ビットストリームに成形されて出力部122から外部に出力される。その後、符号化対象ブロックの符号化処理を終了する。
図6に戻り、ステップS603において、イントラブロックコピー可否情報が1ではなかった場合ステップS604に進む。ステップS604にて、ステップS606と同様に、イントラ予測部108は、イントラ予測モードを決定し、イントラ予測ブロックデータを生成して、符号化対象ブロックの画像データを用いてイントラ予測誤差ブロックデータを生成する。算出されたイントラ予測モードはヘッダ符号化部114および再構成部117に出力され、イントラ予測誤差ブロックデータは予測モード決定部113および変換・量子化部115に出力される。以下、ステップS608にて、イントラ予測符号化モードが選択された場合と同様に符号化処理が行われる。
続いて、ステップS601において、スライス設定部102がスライスタイプとしてI_slice以外のスライスタイプを設定したと判定された場合について説明する。ステップS602にて、イントラブロックコピー予測部106、イントラ予測部108、インター予測部107は、ステップS501で設定されたイントラブロックコピー可否情報を判定する。その結果、イントラブロックコピー可否情報が1であれば、ステップS610に進み、そうでなければステップS617に進む。
ステップS602にて、イントラブロックコピー可否情報が1であった場合、ステップS610に進む。ステップS610にて、インター予測部107は、ピクチャメモリ119に格納されている符号化対象ピクチャより前に符号化された符号化済みのピクチャの再生画像の画像データを参照し、動きベクトルを算出する。また、インター予測部107は、算出された動きベクトルに基づいて、符号化対象ブロックの予測画像であるインター予測ブロックデータを生成する。インター予測部107は、生成されたインター予測ブロックデータと符号化対象ブロックの画像データからインター予測誤差ブロックデータを生成する。算出された動きベクトルは、動きベクトル符号化部111および再構成部117に出力され、インター予測誤差ブロックデータは予測モード決定部113および変換・量子化部115に出力される。ステップS611にて、イントラ予測部108はステップS606と同様に、イントラ予測モードを決定し、イントラ予測ブロックデータを生成して、符号化対象ブロックの画像データを用いてイントラ予測誤差ブロックデータを生成する。ステップS612にて、イントラブロックコピー予測部106は、ステップS607と同様に、コピーベクトルを決定する。イントラブロックコピーイング予測部106は、決定されたコピーベクトルに基づいてイントラブロックコピー予測ブロックデータを生成し、符号化対象ブロックの画像データを用いてイントラブロックコピー予測誤差ブロックデータを生成する。
ステップS613にて、予測モード決定部113は符号化のモードをイントラ予測符号化モード/イントラブロックコピー符号化モード/インター予測符号化モードのいずれかを用いるかを決定する。但し、決定の方法は特に限定されない。例えば、それぞれの予測誤差から符号化コストを推定し、その大小比較によって決定することができる。インター予測符号化モードであればステップS614に進み、イントラ予測符号化モードであればステップS615に進み、イントラブロックコピー符号化モードであればステップS616に進む。
ステップS613において、予測符号化モードがインター予測符号化モードであった場合ステップS614に進む。ステップS614にて、ヘッダ符号化部114はイントラブロックコピーフラグに0を設定し、ステップS621に進む。ステップS621ではブロックのインター予測符号化処理を行う。図7はブロックのインター予測符号化の符号化動作を表すフローチャートである。ステップS701にて、ヘッダ符号化部114はブロック符号化モードにインター符号化モード(MODE_INTER)を設定する。ステップS702にて、動きベクトル符号化部111は、マージモードのための動きベクトルの候補リストを生成する。動きベクトルの候補リストは動きベクトルメモリ112に格納されている動きベクトルから、空間的および時間的に近傍の動きベクトルから参照することによって生成される。具体的には、動きベクトル符号化部111は、図32の符号化対象のブロックをXとすると空間的に近傍のブロックA0、A1、B0、B1、B2に、時間的に近傍の同じ位置のブロックの動きベクトルを加えて参照する。ここでは説明を簡易にするために双方向ではない動き補償を例にとって説明する。それぞれのブロックが存在し、それぞれのブロックがインター予測符号化モードで符号化されていれば、各ブロックの動きベクトルが動きベクトル候補リストに登録される。その後、動きベクトル符号化部111は、同じベクトル値の空間的に近傍のブロックの動きベクトルを1つにまとめる。スライスタイプがB_sliceの場合、動きベクトル候補リストに登録された動きベクトル候補を組合せた双方向マージ候補を生成する。もし、予め決められた動きベクトル候補リストのベクトル数が登録最大数より少なければ、適宜、ベクトル値が(0,0)のゼロベクトルが動きベクトルとして追加される。ステップS703にて、動きベクトル符号化部111は、ステップS610ないしステップS618で算出された動きベクトルがマージモードで符号化できるか否かを判定する。判定は、例えば、動きベクトル候補リストに登録された動きベクトルと算出された動きベクトルのベクトル値が一致するか否かを判定する。マージモードでの符号化をする場合、ステップS704に進み、そうでない場合はステップS715に進む。
ステップS703にて、動きベクトル符号化部111でマージモードでの符号化をすると判定された場合ステップS704に進む。ステップS704にて、変換・量子化部115はステップS610ないしステップS618にて算出されたインター予測誤差ブロックデータに直交変換、量子化を施し、量子化係数を算出する。ステップS705にて、ヘッダ符号化部114はスキップ符号化を行うか否かの判定を行う。ここでは、スキップ符号化を行う条件として、動きベクトルの符号化がマージモードで行え、かつステップS704で算出したインター予測誤差ブロックデータの量子化係数の値が全て0であることとする。マージモードで行えるか否かはステップS703で判定され、量子化係数についてはステップS704で算出された量子化係数の値が用いられる。スキップ符号化が可な場合、ステップS706に進み、そうでなければ、ステップS709に進む。
ステップS705において、スキップ符号化をすると判定された場合ステップS706に進む。ステップS706にて、ヘッダ符号化部114はスキップフラグの値として1を設定し、これをcu_skip_flag符号として符号化する。ステップS707にて、動きベクトル符号化部111はステップS702で生成した動きベクトル候補リストから該当する動きベクトル候補のベクトル候補インデックスをmerge_idx符号として符号化する。cu_skip_flag符号とmerge_idx符号は統合部121に入力され、ビットストリームに成形されて出力部122から外部に出力される。また、算出された動きベクトルは動きベクトルメモリ112に格納される。ステップS708にて、再構成部117は動きベクトルに基づいてピクチャメモリ119からインター予測ブロックデータを算出しインター予測ブロックデータを、符号化対象ブロックの復号画像の再生画像の画像データとする。再生画像の画像データはカレントピクチャメモリ118に格納される。その後、符号化対象ブロックの符号化処理を終了する。
ステップS705において、スキップ符号化をしないと判定された場合ステップS709に進む。ステップS709にて、ヘッダ符号化部114はスキップフラグの値として0を設定し、これをcu_skip_flag符号として符号化する。ステップS710にて、イントラブロックコピー予測部106は、ステップS501で設定されたイントラブロックコピー可否情報を判定する。イントラブロックコピー可否情報が1であれば、イントラブロックコピー予測が可と判断され、ステップS711に進み、そうでなければステップS712に進む。ステップS711にて、ヘッダ符号化部114は、ステップS614、ないし、ステップS617において設定されたイントラブロックコピーフラグの値である0をintra_bc_flag符号として符号化する。intra_bc_flag符号の符号データは統合部121に入力され、ビットストリームに成形されて出力部122から外部に出力される。ステップS712にて、ヘッダ符号化部114はステップS701で設定されたインター符号化モード(MODE_INTER)をpred_mode_flag符号として符号化する。pred_mode_flag符号の符号データは統合部121に入力され、ビットストリームに成形されて出力部122から外部に出力される。ステップS713にて、ステップS707と同様に、動きベクトル符号化部111はmerge_idx符号を符号化し、符号化した動きベクトルを動きベクトルメモリ112に格納する。ステップS714にて、インター予測部107は、ステップS704で算出された量子化係数を符号化部120と逆量子化・逆変換部116に入力する。逆量子化・逆変換部116は入力された量子化係数は逆量子化、逆変換を施して、インター予測誤差ブロックデータを再生する。再構成部117は動きベクトルに基づいてピクチャメモリ119からインター予測ブロックデータを算出する。さらに再構成部117は、算出されたインター予測ブロックデータと再生されたインター予測誤差ブロックデータを用いて、符号化対象ブロックの復号画像の再生画像の画像データを算出する。算出された再生画像の画像データはカレントピクチャメモリ118に格納される。また、符号化部120はインター予測誤差ブロックデータの量子化係数を符号化し、予測誤差の符号データを生成する。生成された符号化データは統合部121に入力され、ビットストリームに成形されて出力部122から外部に出力される。その後、符号化対象ブロックの符号化処理を終了する。
ステップS703において、動きベクトル符号化部111でマージモードでの符号化をしないと判定された場合ステップS715に進む。ステップS715において、ステップS709と同様に、ヘッダ符号化部114は、スキップフラグの値として0を設定し、これをcu_skip_flag符号として符号化する。cu_skip_flag符号の符号データは統合部121に入力され、ビットストリームに成形されて出力部122から外部に出力される。ステップS716にて、ステップS710と同様に、ヘッダ符号化部114は、イントラブロックコピー可否情報を判定する。イントラブロックコピー可否情報が1であれば、イントラブロックコピーイングが可能であると判断され、ステップS717に進み、そうでなければステップS718に進む。ステップS717にて、ステップS711と同様に、ヘッダ符号化部114は、イントラブロックコピーフラグをintra_bc_flag符号として符号化する。intra_bc_flag符号の符号データは統合部121に入力され、ビットストリームに成形されて出力部122から外部に出力される。ステップS718にて、ステップS712と同様に、ヘッダ符号化部114はpred_mode_flagを符号化し、出力する。ステップS719にて、動きベクトル符号化部111は算出された動きベクトルを動きベクトルメモリ112に格納されている周囲の動きベクトルから予測を行い、その予測方向とその差分ベクトルを求めて、符号化する。予測方向はmvp_l0_flag符号ないしはmvp_l1_flag符号として符号化される。
ステップS720にて、変換・量子化部115はステップS610ないしステップS618で生成されたインター予測誤差ブロックデータに直交変換、量子化を施し、量子化係数を算出する。算出された量子化係数は符号化部120と逆量子化・逆変換部116に入力される。逆量子化・逆変換部116に入力された量子化係数は逆量子化、逆変換を経て、インター予測誤差ブロックデータとして再生される。また、再構成部117は、動きベクトルに基づいてカレントピクチャメモリ118からインター予測ブロックデータを算出し、インター予測誤差ブロックデータを用いて、符号化対象ブロックの復号画像の再生画像の画像データを算出する。算出された再生画像の画像データはカレントピクチャメモリ118に格納される。また、符号化部120はインター予測誤差ブロックデータを符号化し、予測誤差の符号データを生成する。生成された符号データは統合部121に入力され、ビットストリームに成形されて出力部122から外部に出力される。その後、符号化対象ブロックの符号化処理を終了する。
図6に戻り、ステップS613において、符号化のモードがイントラ予測符号化モードであった場合について説明する。ステップS615にて、イントラブロックコピーフラグに0を設定し、ステップS622に進む。ステップS622では前述の通り、ブロックのイントラ予測符号化処理が行われる。
ステップS613において、符号化のモードがイントラブロックコピー符号化モードであった場合について説明する。ステップS616にて、ヘッダ符号化部114はイントラブロックコピーフラグに1を設定し、ステップS623に進む。ステップS623では前述の通り、ブロックのイントラブロックコピー符号化処理が行われる。
ステップS602において、イントラブロックコピー可否情報が1ではなかった場合について説明する。ステップS617にて、ステップS614と同様に、ヘッダ符号化部114はイントラブロックコピーフラグに0を設定する。ステップS618にて、ステップS610と同様に、インター予測部107は、動きベクトルを算出する。また、インター予測部107は、算出された動きベクトルに基づいて、インター予測ブロックデータを生成する。そして、インター予測部107は、生成されたインター予測ブロックデータと符号化対象ブロックの画像データからインター予測誤差ブロックデータを生成する。算出された動きベクトルは動きベクトル符号化部111および再構成部117に出力され、インター予測誤差ブロックデータは予測モード決定部113および変換・量子化部115に出力される。ステップS619にて、ステップS606と同様に、イントラ予測部108はイントラ予測モードを決定し、イントラ予測ブロックデータを生成して、符号化対象ブロックの画像データを用いてイントラ予測誤差ブロックデータを生成する。ステップS620にて、予測モード決定部113は符号化のモードをイントラ予測符号化モードかインター予測符号化モードのいずれかを用いるかを決定する。但し、決定の方法は特に限定されない。例えば、予測モード決定部113は、それぞれの予測誤差から符号化コストを推定し、符号化コストが小さい方を予測モードとして判定することができる。インター予測符号化モードであればステップS621に進む。ステップS621では前述の通り、ブロックのインター予測符号化処理が行われる。イントラ予測符号化モードであればステップS622に進む。ステップS622では前述の通り、ブロックのイントラ予測符号化処理が行われる。
図5に戻り、ステップS508にて、画像符号化装置全体を制御する制御部123は、スライス内の全てのブロックの符号化が終了したか否かを判定する。全てのブロックの符号化が終了している場合、ステップS509に進み、そうでない場合はブロックのスキャン順に次のブロックの符号化をステップS507で行う。ステップS509にて、制御部123は、ピクチャ内の全てのスライスの符号化が終了したか否かを判定する。全てのスライスの符号化が終了している場合、ステップS510に進み、そうでない場合はステップS505に戻り、次のスライスの符号化処理を行う。ステップS510にて、符号化対象であったピクチャの再生画像の画像データをカレントピクチャメモリ118からピクチャメモリ119に移動させる。ピクチャメモリ119においては必要に応じて、参照されることが無くなる画像データを消去する。ステップS511にて、制御部123はシーケンス内の全てのピクチャの符号化が終了したか否かを判定する。全てのピクチャの符号化が終了していない場合、ステップS503に進み、次のピクチャの符号化処理を行う。終了している場合は全ても符号化動作を終了する。
上記の構成と動作によって生成されたビットストリームにおいて、ブロックの符号化に関するシンタックスの例を図2および図3に示す。図2はブロックの符号化のシンタックスを表したものである。図2、3において、太字が符号を表している。本実施形態のシンタックスは非特許文献2のシンタックスを改良したものであり、従来のシンタックスとは19行目から31行目が異なっている。従来は
とし、動きベクトルの差分ベクトルの符号化の関数であったmvd_coding()をマージモードを使用できるベクトルの符号化を行うprediction_unit()に変更した。図3は予測を行うブロックでのシンタックスを表したものである。図3では、13行目から16行目および33行目が追加されている。4行目のmerge_idx符号は、本実施形態では非イントラスライスであるスライスタイプがP_sliceかB_sliceのみに限定される。9行目に関して、merge_idx符号の表すベクトル候補インデックスは、インター予測符号化モードとイントラブロックコピー符号化モードでベクトル候補リストが異なる。予測符号化モードがインター予測符号化モードであれば、図7のステップS702に記述したように空間的な近傍ブロックと時間的な近傍ブロックを参照して動きベクトル候補リストが作成される。予測符号化のモードがイントラブロックコピー符号化モードであれば、図9のステップS902に記述したように空間的な近傍ブロックを参照してコピーベクトル候補リストが作成される。図3の14行目でイントラブロックコピー符号化でのマージモードでない場合の動きベクトルの符号データが構成される。15行目のmvp_ibc_flag符号は差分ベクトルの符号化の際にいずれのブロックのコピーベクトルを参照したか表すコピーベクトル参照フラグを符号化したものである。prediction_unit()の変更での別な構成について図4を用いて説明する。14行目と15行目にイントラブロックコピーフラグによる条件が追加された。また、18行目、20行目、21行目が追加されている。これによって、mvp_l0_flag符号とmvp_ibc_flag符号を使い分けることができるようになる。
以上、説明した装置構成と方法で、イントラブロックコピー符号化のコピーベクトルにおいてもマージモードの使用が可能になり、コピーベクトルでの符号化効率の改善が可能になった。
なお、イントラ予測に関して、イントラ予測モードの決定、イントラ予測誤差ブロックデータの算出に関して、ステップS601より前で行い、ステップS604、S606、S612、S619を省略しても構わない。
なお、予め決められたコピーベクトル候補リストのコピーベクトルの候補となるベクトルのブロックの参照はこれに限定されない。
なお、登録最大数以下の場合に追加するコピーベクトルはこれに限定されない。簡略化のために、ベクトル値が(0、0)のゼロベクトルをコピーベクトルとして登録最大数になるまで追加しても構わない。但し、この場合、コピーベクトルにおいて、ベクトル値(0、0)は符号化対象ブロック自身を表すため、参照はされない。
なお、本実施形態において、コピーベクトルと動きベクトルはそれぞれコピーベクトルメモリ110と動きベクトルメモリ112に分けて格納したが、これに限定されず、同じメモリに格納しても構わない。参照されるブロックのintra_bc_flag符号を参照することで、判別される。さらには、非特許文献1においては、マージモードでの動きベクトル登録最大数がfive_minus_max_num_merge_cand符号としてスライスヘッダに挿入されている。コピーベクトルの候補ベクトルに関しては空間的な近傍ブロックのコピーベクトルの参照であることから、マージモードでの動きベクトル登録最大数よりも小さい。したがって、図10に示すようにマージモードでのコピーベクトル登録最大数を表すfive_minus_max_num_merge_bc符号を別途設けて、その数を送ることにより、無駄なベクトルの追加を抑えることが可能になる。
なお、マージモードでのコピーベクトル登録最大数については符号化せず、例えばマージモードでの動きベクトル登録最大数から予め決められた所定の数(例えば1)を減じた数でも構わない。
なお、本実施形態において、スキップ符号化の可否の判断の条件はこれに限定されない。例えば、画像の特徴や発生したデータ量などによって決めても構わない。
(実施形態2)
本発明の第2の実施形態を、図11から図13を使って説明する。本実施形態では実施形態1で生成されたビットストリームを復号する場合を例にとって説明する。
図11は、本発明の実施形態である画像復号装置の構成を示すブロック図である。図11において、1101は符号データであるビットストリームを入力する入力部である。入力されるビットストリームのシンタックスは図2および図3で説明されたものとするが、これに限定されない。なお、図1の画像符号化装置によるピクチャ内のブロックの符号化順序と図11の画像復号装置によるピクチャ内のブロックの復号化順序は同じである。1102は符号バッファであり、入力されるビットストリームを格納する。1103は分離部であり、入力されたビットストリームから各符号データを取り出し、それらを処理する後段の各復号部等に出力する。1104はヘッダ復号部であり、シーケンスヘッダ、スライスヘッダ、ブロックヘッダの符号データを復号し、必要な情報を各部に出力する。特に、シーケンスヘッダの復号においてはシーケンスでイントラブロックコピーイングを行うか否かを示す、intra_block_copy_enabled_flag符号を復号し、イントラブロックコピー可否情報を取得する。スライスヘッダの復号においては、スライスタイプを表すslice_type符号を復号する。ブロックヘッダの復号においては、cu_skip_flag符号、pred_mode_flag符号、intra_bc_flag符号、イントラ予測のモードを表す符号を復号する。1105はコピーベクトル復号部であり、コピーベクトルに関する符号データを復号してコピーベクトルを再生する。1106はコピーベクトルメモリであり、復号時にコピーベクトルの予測を行う際に参照するため復号済みのコピーベクトルを格納する。1107は動きベクトル復号部であり、動きベクトルに関する符号データを復号して動きベクトルを再生する。1108は動きベクトルメモリであり、復号時に動きベクトルの予測を行う際に参照するため復号済みの動きベクトルを格納する。1109はイントラブロックコピー予測部であり、復号されたコピーベクトルを用いて、復号対象ピクチャの復号済みの再生画像の画像データを参照して、復号対象のブロックの予測画像となるイントラブロックコピー予測ブロックデータを算出する。算出されたイントラブロックコピー予測ブロックデータは後段の再構成部1114に出力される。1110はインター予測部であり、再生された動きベクトルを用いて、復号対象ピクチャより前に復号された再生画像の画像データを参照して、復号対象のブロックの予測画像となるインター予測ブロックデータを算出し、後段の再構成部1114に出力する。1111はイントラ予測部であり、分離部1103を介して入力されたイントラ予測モードの符号データを復号してイントラ予測モードを再生する。さらに、イントラ予測部1111は、イントラ予測モードに従って、復号対象ピクチャの復号済みの再生画像の画像データのうち、復号対象のブロックの周囲の画素値からイントラ予測ブロックデータを算出する。算出されたイントラ予測ブロックデータは後段の再構成部1114に出力される。1112は復号部であり、入力された量子化係数に関する符号データを復号して量子化係数を再生する。1113は逆量子化・逆変換部であり、入力された量子化係数を逆量子化して直交変換係数を再生し、さらに逆直交変換を施し、復号対象ブロックの予測誤差ブロックデータを生成する。1114は再構成部であり、復号された予測誤差ブロックデータと、ヘッダ復号部1104で復号されたブロック符号化モード、イントラブロックコピー予測符号化モードに応じて予測ブロックデータを選択して取得する。すなわち、再構成部1114は、イントラブロックコピー予測部1109、インター予測部1110、イントラ予測部1111から出力される予測ブロックデータを選択して入力する。復号された予測誤差と予測ブロックデータから復号された再生画像を生成する。1115はカレントピクチャメモリであり、再生された復号対象ピクチャの再生画像の画像データを格納する。1116はピクチャメモリであり、復号対象ピクチャより前に復号されたピクチャの再生画像の画像データを格納する。1117は出力部であり、再生画像の画像データを外部に出力する。図11の各処理部は1つの物理的な集積回路によって構成されてもよいし、それぞれが1つの回路であってもよい。1118は、画像復号化装置の上記の各処理部を制御する制御部であり、CPUなどによって構成される。
画像復号装置における画像の復号動作を図12、13に示したフローチャートに基づき説明する。
図12は復号動作の全体を表すフローチャートである。図12のフローチャートでは特に言及していないが、順次、入力部1101を介して画像復号装置にビットストリームが入力され、符号バッファ1102に格納されるものとする。ステップS1201にて、ヘッダ復号部1104は分離部1103を介して入力されたシーケンスヘッダの符号データを復号する。その中で、ヘッダ復号部1104は、intra_block_copy_enabled_flag符号を復号し、イントラブロックコピー可否情報を復号する。イントラブロックコピー可否情報は復号対象のシーケンスでイントラブロックコピー予測符号化モードでの符号化が行われていた場合には値として1が、行われていない場合は0が再生される。ステップS1202以降で、各ピクチャの復号処理が行われる。
ステップS1202以降で、各スライスの復号処理が行われる。ステップS1202にて、ヘッダ復号部1104は、スライスヘッダの復号を行う。スライスヘッダの復号処理では、スライスタイプを表すslice_type符号が復号される。five_minus_max_num_merge_cand符号、および図10のシンタックスの符号データであれば、five_minus_max_num_merge_cand_bc符号が復号される。また、続いて、ステップS1203において、各ブロックの復号を行う。ここで、図13はブロックの復号動作を表すフローチャートである。なお、分離部1103におけるブロック符号データの入出力に関しては後述する。
ステップS1301にて、ヘッダ復号部1104は、ステップS1202で復号されたslice_type符号を参照し、スライスタイプがI_sliceであった場合はステップS1303に進み、そうでなければステップS1302に進む。
ステップS1302にて、ヘッダ復号部1104は分離部1103を介して入力されたcu_skip_flag符号を復号し、その値をスキップフラグに設定する。ステップS1303にて、ヘッダ復号部1104はスキップフラグに0を設定する。これはスキップ符号化の復号処理が、スライスタイプがP_sliceかB_sliceの非イントラスライスのみで行われることを示している。ステップS1304にて、ヘッダ復号部1104はスキップフラグの値を判定し、値が1であればステップS1326に進み、そうでなければステップS1305に進む。
ステップS1304において、スキップフラグの値が1であった場合スキップ符号化されていると判定しステップS1326に進む。ステップS1326にて、動きベクトル復号部1107は動きベクトルの復号を行う。ステップS1326ではスキップ符号化されているので、動きベクトルの符号データはマージモードで符号化されている。動きベクトル復号部1107は分離部1103を介して入力されたmerge_idx符号を復号する。本実施形態ではスキップ符号化は非イントラスライスのみであるので、merge_idx符号が表すベクトル候補インデックスは動きベクトル候補リストのベクトル候補インデックスである。動きベクトル復号部1107は、動きベクトルメモリ1108を参照して、復号対象ブロックの空間的・時間的近傍のブロックの動きベクトルを用いて、動きベクトル候補リストを生成する。動きベクトル復号部1107はmerge_idx符号を復号してベクトル候補インデックスを再生し、さらにベクトル候補インデックスに従って、動きベクトル候補リストから動きベクトルを再生する。再生された動きベクトルはインター予測部1110に入力される。また、再生された動きベクトルは動きベクトルメモリ1108に格納される。
ステップS1327において、インター予測部1110は入力された動きベクトルに基づいて、ピクチャメモリ1116に格納されている復号対象ピクチャより前に復号されたピクチャの再生画像を参照してインター予測ブロックデータを生成する。生成されたインター予測ブロックデータは再構成部1114に入力される。再構成部1114は入力されたインター予測ブロックデータを復号対象ブロックの復号画像の再生画像の画像データとする。復号対象ブロックの画像データはカレントピクチャメモリ1115に出力される。その後、復号対象ブロックの復号処理を終了する。
ステップS1304において、スキップフラグの値が1でなかった場合、スキップ符号化されていないと判定しステップS1305に進む。ステップS1305にて、ヘッダ復号部1104は、ステップS1201において復号して得られたイントラブロックコピー可否情報を判定する。イントラブロックコピー可否情報の値が1であれば、イントラブロックコピーイング予測に対応する復号が可能であると判定し、ステップS1306に進み、そうでなければステップS1306に進む。ステップS1307にて、ヘッダ復号部1104は、分離部1103を介して符号バッファ1102から入力されたintra_bc_flag符号を復号し、イントラブロックコピーフラグを再生する。ステップS1306にて、ヘッダ復号部1104は、イントラブロックコピーフラグの値に0を設定する。ステップS1308にて、ステップS1301と同様に、ヘッダ復号部1104は、スライスタイプを判定し、I_sliceであればステップS1310に進み、そうでなければステップS1309に進む。ステップS1310にて、ヘッダ復号部1104は、ブロック符号化モードにイントラ符号化モード(MODE_INTRA)を設定する。ステップS1309にて、ヘッダ復号部1104は、ブロック符号化モードを表すpred_mode_flag符号を復号し、その値をブロック符号化モードの値に設定する。
ステップS1311にて、ヘッダ復号部1104は、ステップS1309またはステップS1310において設定されたブロック符号化モードの値を判定する。ブロック符号化モードの値がイントラ符号化モードを表すMODE_INTRAであればステップS1312に進み、そうでなければ、ステップS1320に進む。
ステップS1311にて、イントラ符号化モードと判定された場合について説明する。ステップS1312にて、ヘッダ復号部1104は、ステップS1306またはステップS1307にて設定されたイントラブロックコピーフラグを判定する。イントラブロックコピーフラグの値が0であればステップS1318に進み、そうでなければステップS1313に進む。
ステップS1312にて、イントラブロックコピーフラグの値が0であった場合について説明する。この場合はイントラ予測符号化モードでの復号となる。ステップS1318にて、イントラ予測部1111は、符号バッファ1102から分離部1103を介して、イントラ予測の符号データを入力して復号し、イントラ予測モードを再生する。続いて、ステップS1319にて、イントラ予測部1111は再生されたイントラ予測モードに基づいてカレントピクチャメモリ1115を参照し、復号対象のブロックの周辺の画素値からイントラ予測ブロックデータを算出し、算出されたイントラ予測ブロックデータを再構成部1114に出力する。ステップS1325にて、復号部1112は分離部1103を介して入力された予測誤差の量子化係数の符号データを復号して、量子化係数を再生する。再生された量子化係数は逆量子化・逆変換部1113に入力される。逆量子化・逆変換部1113は入力された量子化係数を逆量子化して直交変換係数を再生し、さらに逆直交変換を施し、符号化対象ブロックの復号されたイントラ予測誤差ブロックデータを再生し、再構成部1114に出力する。再構成部1114はステップS1319で生成されたイントラ予測ブロックデータとイントラ予測誤差ブロックデータを用いて、復号対象ブロックの復号画像の画像データを再生する。再生された画像データはカレントピクチャメモリ1115に出力される。その後、復号対象ブロックの復号処理を終了する。
ステップS1312にて、イントラブロックコピーフラグの値が0ではなかった場合すなわち値が1であった場合について説明する。この場合はイントラブロックコピー符号化モードでの復号に決定される。ステップS1313にて、コピーベクトル復号部1105は符号バッファ1102から分離部1103を介して、merge_flag符号を入力して復号し、マージモードフラグの値を再生する。ステップS1314にて、コピーベクトル復号部1105は、再生されたマージモードの値を判定し、その値が1であればステップS1315に進み、そうでなければステップS1316に進む。ステップS1315にて、コピーベクトル復号部1105は分離部1103を介して入力されたmerge_idx符号を復号し、ベクトル候補インデックスを再生する。コピーベクトル復号部1105は、コピーベクトルメモリ1106を参照して、復号対象ブロックの空間的近傍のブロックのコピーベクトルを用いて、コピーベクトル候補リストを生成する。再生されたベクトル候補インデックスに従って、コピーベクトル候補リストからコピーベクトルを再生する。再生されたコピーベクトルはイントラブロックコピー予測部1109に入力される。ステップS1316にて、コピーベクトル復号部1105は、符号バッファ1102から分離部1103を介して入力された差分ベクトルの符号データを復号して差分ベクトルを生成する。また、mvp_ibc_flag符号を復号し、予測の方向を再生する。コピーベクトルメモリ110に格納されている周囲のコピーベクトルから再生された予測の方向に基づき、コピーベクトルの予測を行う。さらにコピーベクトル復号部1105はこの差分ベクトルと予測されたコピーベクトルから復号対象ブロックのコピーベクトルを再生する。
ステップS1317において、イントラブロックコピー予測部1109は再生されたコピーベクトルに基づいて、カレントピクチャメモリ1115に格納されている復号対象ピクチャの再生画像を参照する。参照された復号対象ピクチャの再生画像に基づいてイントラブロックコピー予測ブロックデータを生成する。生成されたイントラブロックコピー予測ブロックデータは再構成部1114に入力される。ステップS1325にて、復号部1112は、分離部1103を介して入力されたイントラブロックコピー予測誤差ブロックデータの量子化係数の符号データを復号して、量子化係数を再生する。再生された量子化係数は逆量子化・逆変換部1113に入力される。逆量子化・逆変換部1113は入力された量子化係数を逆量子化、逆直交変換を施し、イントラブロックコピー予測誤差ブロックデータを生成し、再構成部1114に出力する。再構成部1114はステップS1317で生成されたイントラブロックコピー予測ブロックデータとイントラブロックコピー予測誤差ブロックデータを用いて、復号対象ブロックの復号画像の再生画像の画像データを再生する。復号対象ブロックの画像データはカレントピクチャメモリ1115に出力される。その後、復号対象ブロックの復号処理を終了する。
ステップS1311にて、イントラ予測符号化モードではない、すなわちインター予測符号化モードであると判定された場合について説明する。ステップS1320にて、動きベクトル復号部1107は符号バッファ1102から分離部1103を介して、merge_flag符号を入力して復号し、マージモードフラグの値を再生する。ステップS1321にて、動きベクトル復号部1107は、再生されたマージモードの値を判定し、その値が1であればマージモードであると判定してステップS1322に進み、そうでなければステップS1323に進む。ステップS1322にて、動きベクトル復号部1107は分離部1103を介して入力されたmerge_idx符号を復号し、動きベクトルのベクトル候補インデックスを再生する。動きベクトル復号部1107は、動きベクトルメモリ1108を参照して、復号対象ブロックの空間的・時間的近傍のブロックの動きベクトルを用いて、動きベクトル候補リストを生成する。そして、動きベクトル復号部1107は、ベクトル候補インデックスに従って、動きベクトル候補リストから動きベクトルを選択する。選択された動きベクトルはインター予測部1110に入力される。ステップS1323にて、動きベクトル復号部1107は、符号バッファ1102から分離部1103を介して入力された差分ベクトルの符号データを復号して差分ベクトルを生成する。また、動きベクトル復号部1107は、mvp_l0_flag符号等を復号し、予測の方向を再生する。さらに、動きベクトル復号部1107は、動きベクトルメモリ1108に格納されている周囲の動きベクトルから予測の方向に基づき、動きベクトルの予測を行う。さらに動きベクトル復号部1107はこの差分ベクトルと予測された動きベクトルから復号対象ブロックの動きベクトルを再生する。再生した動きベクトルはインター予測部1110に入力される。ステップS1324にて、インター予測部1110は入力された動きベクトルに基づいて、ピクチャメモリ1116に格納されている復号対象ピクチャより前に復号されたピクチャの再生画像の画像データを参照してインター予測ブロックデータを生成する。生成されたインター予測ブロックデータは再構成部1114に入力される。復号部1112は分離部1103を介して入力されたインター予測誤差ブロックデータの量子化係数の符号データを復号して、量子化係数を再生する。再生された量子化係数は逆量子化・逆変換部1113に入力される。逆量子化・逆変換部1113は入力された量子化係数を逆量子化して直交変換係数を再生し、さらに逆直交変換を施し、符号化対象ブロックの復号されたインター予測誤差ブロックデータを生成し、再構成部1114に出力する。再構成部1114はステップS1324で生成されたインター予測ブロックデータとインター予測誤差ブロックデータを用いて、復号対象ブロックの復号画像の再生画像の画像データを再生する。再生画像の画像データはカレントピクチャメモリ1115に出力される。その後、復号対象ブロックの復号処理を終了する。
図12に戻り、ステップS1204にて、制御部1118はスライス内の全てのブロックの復号が終了したか否かを判定する。全てのブロックの復号が終了している場合、ステップS1205に進み、そうでない場合はブロックのスキャン順に次のブロックの復号をステップS1203で行う。ステップS1205にて、制御部1118はピクチャ内の全てのスライスの復号が終了したか否かを判定する。全てのスライスの復号が終了している場合、ステップS1206に進み、そうでない場合はステップS1202に戻り、次のスライスの復号処理が行われる。ステップS1206にて、制御部1118によってカレントピクチャメモリ1115に格納された再生画像の画像データが出力部1117を介して外部に出力される。また、ピクチャメモリ1116の画像データも再生画像の必要に応じて画像データを用いて更新する。ステップS1207にて、シーケンス内の全てのピクチャの復号が終了したか否かを判定する。全てのピクチャの復号が終了していない場合、ステップS1202に進み、次のピクチャの復号処理を行う。終了している場合は全ての復号動作を終了する。
分離部1103におけるブロック符号データの入出力に関して、図2および図33のシンタックスを用いて説明する。図2において、coding_unit()はブロックのシンタックスを表す。スライスタイプがI_sliceではない場合、分離部1103はcu_skip_flag符号を入力し、ヘッダ復号部1104に出力する。イントラブロックコピー可否情報が1の場合に分離部1103はintra_bc_flag符号を入力し、ヘッダ復号部1104に出力する。すなわち、イントラブロックコピー予測符号化モードをする場合、スライスタイプに関係なくintra_bc_flag符号を入力することになる。また、スライスタイプがP_sliceやB_sliceである非イントラスライスのイントラ符号化モードのブロックでもイントラブロックコピー符号化が可能である。続いて、スライスが非イントラスライス(P_sliceまたはB_slice)で、かつイントラブロックコピーフラグが0の場合に分離部1103はpred_mode_flag符号を入力し、ヘッダ復号部1104に出力する。
また、図3において、prediction_unit()は予測を行うブロックでのシンタックスを表す。図2のcu_skip_flag符号の値が1であれば、merge_idx符号を入力し、スライスタイプに応じてコピーベクトル復号部1105か動きベクトル復号部1107に入力される。スライスタイプがI_sliceであれば、コピーベクトル復号部1105に出力する。そうでなければ動きベクトル復号部1107に出力する。また、cu_skip_flag符号の値が0であればmerge_flag符号を入力し、スライスタイプに応じてコピーベクトル復号部1105か動きベクトル復号部1107に入力される。スライスタイプに応じた出力先に関してはmerge_idx符号と同様である。続いて、merge_flag符号の値が1であれば、merge_idx符号を入力し、スライスタイプに応じてコピーベクトル復号部1105か動きベクトル復号部1107に入力される。スライスタイプに応じた出力先に関しても上記と同様である。以下ではマージモードでなかった場合の符号については、intra_bc_flag符号の値が1であればmvd_coding()関数で差分ベクトルの符号データとmvp_ibc_flag符号をコピーベクトル復号部1105に出力する。intra_bc_flag符号の値が1でなければ、これらの符号データは動きベクトル復号部1107に出力される。
以上、説明した装置構成と方法で、イントラブロックコピーイングにおいて、コピーベクトルをマージモードで符号化されたビットストリームを復号することができる。これによって、より少ないデータ量で圧縮された画像を復号することができる。
さらに、各符号データの生成に用いた符号化方式は特に限定されない。例えば、算術符号化方式やハフマン符号化方式を用いて復号することができる。
さらに、本実施形態においては、各機能をハードウェアで実現する例をとって説明したが、これに限定されず、その一部または全部をCPUなどの演算処理装置を用いてソフトウェアで動作を実現しても構わない。
なお、本実施形態において、外部への再生画像の画像データの出力をピクチャ単位で行ったが、これに限定されず、スライス単位やブロック単位で外部に出力してももちろん構わない。
prediction_unit()関数での分離部1103の動作について図3を用いて説明したが、これに限定されず、図4に記載されたprediction_unit()関数でも同様に入力と出力が行える。
なお、本実施形態において、コピーベクトルと動きベクトルはそれぞれコピーベクトルメモリ1106と動きベクトルメモリ1108に分けて格納したが、これに限定されず、同じメモリに格納しても構わない。参照されるブロックのintra_bc_flag符号を参照することで、判別される。さらには、図4に示すように、コピーベクトル登録最大数を表すfive_minus_max_num_merge_bc符号を別途設けられている場合、コピーベクトルの候補リストでコピーベクトルの候補ベクトルの数を増減することができる。これにより、イントラブロックコピー予測符号化モードにおける候補ベクトルの数が少なく設定でき、符号データも短くなったビットストリームを復号することが可能になる。
(実施形態3)
本発明の第3の実施形態を、図14から図17を使って説明する。本実施形態において、画像符号化装置の構成は図1と同じなので省略する。但し、イントラブロックコピー予測部106、コピーベクトル符号化部109、ヘッダ符号化部114、統合部121の動作が実施形態1と異なる。本実施形態での画像の符号化動作を以下に説明する。符号化動作については図15、16に示したフローチャートに基づき説明する。この時、符号化動作の全体を表すフローチャートについては図5と同じであり、ステップS507のブロック符号化動作が異なる。
図15はブロックの符号化動作を表すフローチャートである。同図においては図6のフローチャートと同じ機能を果たすステップについては同じ番号を付し、説明を省略する。ステップS1501にてイントラブロックコピー予測部106、インター予測部107、イントラ予測部108は、ステップS501で設定されたイントラブロックコピー可否情報を判定する。その結果、イントラブロックコピー可否情報が1であれば、イントラブロックコピーイングの符号化が可であると判定され、ステップS610に進み、そうでなければステップS617に進む。
ステップS1501において、イントラブロックコピー可否情報が1ではなかった場合すなわち0であった場合、ステップS617に進む。ステップS617からステップS620による符号処理は実施形態1と同様であるため、説明を省略する。ステップS621においては実施形態1の図7に示すインター予測符号化処理が行われる。ステップS622においては、図8に示すイントラ予測符号化処理のうち、ステップS802の処理は行われず、全てのスライスタイプでステップS803が行われる点が異なる。
ステップS1501において、イントラブロックコピー可否情報が1であった場合について説明する。実施形態1と同様にステップS610からステップS612において、各予測符号化モードで用いられる、それぞれの予測誤差ブロックデータと動きベクトル、コピーベクトル、イントラ予測モードがそれぞれ算出される。ステップS613にて、実施形態1と同様に、予測モード決定部113は予測符号化モードをイントラ予測符号化モード/イントラブロックコピー符号化モード/インター予測符号化モードのいずれかを用いるかを決定する。インター予測符号化モードであればステップS614に進み、イントラ予測符号化モードであればステップS615に進み、実施形態1と同様にステップS621、ステップS622によって符号処理が行われるため、説明を省略する。イントラブロックコピー符号化モードであれば、ステップS616に進む。
ステップS613にて、イントラブロックコピー符号化モードであった場合について説明する。ステップS616にて、実施形態1と同様に、ヘッダ符号化部114はイントラブロックコピーフラグに1を設定する。ステップS1523ではブロックのイントラブロックコピー符号化処理が実行される。図16はブロックのイントラブロックコピー符号化の符号化動作を表すフローチャートである。同図においては図9のフローチャートと同じ機能を果たすステップについては同じ番号を付し、説明を省略する。ステップS901、ステップS902にて、実施形態1と同様に、ヘッダ符号化部114はブロック符号化モードにイントラ符号化モードを設定し、コピーベクトル符号化部109はコピーベクトル候補リストを生成する。ステップS1601にて、ステップS908と同様に、コピーベクトル符号化部109は、ステップS612で算出されたコピーベクトルがマージモードで符号化できるか否かを判定する。具体的には、コピーベクトル符号化部109は、コピーベクトル候補リストに登録されたコピーベクトルと算出されたコピーベクトルのベクトル値が一致するか否かを判定する。マージモードでの符号化をする場合、ステップS1602に進み、そうでない場合はステップS904に進む。
ステップS1601において、マージモードでの符号化をすると判定された場合、ステップS1602に進む。ステップS1602において、ヘッダ符号化部114はスライスタイプを判定する。スライスタイプとしてI_sliceが設定されていれば、ステップS1603に進み、そうでなければステップS1608に進む。
ステップS1602において、スライスタイプがI_sliceと判定された場合について説明する。ステップS1603にて、変換・量子化部115は図15のステップS612で算出されたイントラブロックコピー予測誤差ブロックデータに直交変換、量子化を施し、量子化係数を算出する。ステップS1603にて、ヘッダ符号化部114はスキップ符号化を行うか否かの判定を行う。ここでは、スキップ符号化を行う条件として、コピーベクトルの符号化がマージモードで行え、かつ図15のステップS612で算出したインター予測誤差ブロックデータの量子化係数の値が全て0であることとする。但し、これに限定されない。マージモードで行えるか否かはステップS1601で判定され、ステップS1603で算出された量子化係数の値で判定できる。ヘッダ符号化部114は、スキップ符号化をする場合、ステップS1605に進み、そうでなければ、ステップS1608に進む。
ステップS1604にてスキップ符号化が行われる場合について説明する。ステップS1605にて、ヘッダ符号化部114はスキップフラグの値として1を設定し、これをcu_skip_flag符号として符号化する。ステップS1606にて、コピーベクトル符号化部109はステップS902で生成したコピーベクトル候補リストから該当するコピーベクトル候補のベクトル候補インデックスをmerge_idx符号として符号化する。また、符号化されたコピーベクトルをコピーベクトルメモリ110に格納する。cu_skip_flag符号とmerge_idx符号は統合部121に入力され、統合された符号データがビットストリームとして出力部122から外部に出力される。また、算出されたコピーベクトルはコピーベクトルメモリ110に格納される。ステップS1607にて、再構成部117にてコピーベクトルに基づいてカレントピクチャメモリ118からイントラブロックコピー予測ブロックデータが算出される。イントラブロックコピー予測ブロックデータを、符号化対象ブロックの復号画像の再生画像の画像データとする。再生画像の画像データはカレントピクチャメモリ118に格納される。その後、符号化対象ブロックの符号化処理を終了する。
ステップS1604にてスキップ符号化をしないとされた場合について説明する。以下は、ステップS1602でスライスタイプがI_sliceではない場合も同じである。ステップS1608にて、ヘッダ符号化部114はスキップフラグの値として0を設定し、これをcu_skip_flag符号として符号化する。さらにステップS1609にて、ヘッダ符号化部114は、ステップS616において設定されたイントラブロックコピーフラグをintra_bc_flag符号として符号化する。intra_bc_flag符号の符号データは統合部121に入力され、ビットストリームに成形されて出力部122から外部に出力される。ステップS1610にて、ヘッダ符号化部114はスライスタイプを判定する。スライスタイプとしてI_sliceが設定されていれば、ステップS1612に進み、そうでなければステップS1611に進む。ステップS1611にて、ヘッダ符号化部114はステップS901で設定されたイントラ符号化モード(MODE_INTRA)をpred_mode_flag符号として符号化する。pred_mode_flag符号の符号データは統合部121に入力され、ビットストリームに成形されて出力部122から外部に出力される。ステップS1612にて、ステップS1606と同様にコピーベクトル符号化部109は該当するコピーベクトル候補のベクトル候補インデックスをmerge_idx符号として符号化し、選択されたコピーベクトルをコピーベクトルメモリ110に格納する。ステップS911にて、実施形態1と同様に、変換・量子化部115はイントラブロックコピー予測誤差ブロックデータの量子化係数を算出し、逆量子化・逆変換部116は符号化対象ブロックの復号画像の再生画像を算出し、カレントピクチャメモリ118に格納する。符号化部120はイントラブロックコピー予測誤差ブロックデータを符号化し、イントラブロックコピー予測誤差ブロックデータの符号データを生成し、統合部121に入力し、ビットストリームに成形されて出力部122から外部に出力される。その後、符号化対象ブロックの符号化処理を終了する。
ステップS1602において、スライスタイプがP_sliceないしB_sliceと判定された場合について説明する。ステップS1608以降、前述の符号化処理を行う。すなわち、cu_skip_flag、intra_bc_flag、pred_mode_flagの符号化が行われる。さらに、符号化対象ブロックのコピーベクトルが差分ベクトルの符号化によって符号化され、イントラブロックコピー予測誤差ブロックデータの量子化係数が符号化される。コピーベクトル、再生画像の画像データをコピーベクトルメモリ110、カレントピクチャメモリ118に格納し、符号化対象ブロックの符号化処理を終了する。
ステップS1601において、マージモードでの符号化をしないと判定された場合について説明する。実施形態1と同様に、ステップS904にて、ヘッダ符号化部114はスキップ符号化を行うか否かを示すスキップフラグの値を0に設定し、それを表すcu_skip_flag符号を符号化する。ステップS905にて、イントラブロックコピーフラグの値である1をintra_bc_flag符号として符号化する。ステップS906にて、ヘッダ符号化部114はスライスタイプを判定し、I_sliceが設定されていれば、ステップS910に進み、そうでなければステップS907に進む。ステップS907にて、ヘッダ符号化部114はステップS901で設定されたイントラ符号化モード(MODE_INTRA)をpred_mode_flag符号として符号化する。ステップS910にて、コピーベクトル符号化部109は差分ベクトルと予測の方向を求めて、符号化する。ステップS911にて、、実施形態1と同様に、変換・量子化部115はイントラブロックコピー予測誤差ブロックデータの量子化係数を算出する。逆量子化・逆変換部116に入力された量子化係数は逆量子化、逆変換を経て、イントラブロックコピー予測誤差ブロックデータとして再生する。また、再構成部117はイントラブロックコピー予測ブロックデータを算出し、イントラブロックコピー予測誤差ブロックデータを用いて、符号化対象ブロックの復号画像の再生画像の画像データを再生する。再生画像の画像データはカレントピクチャメモリ118に格納される。また、符号化部120はイントラブロックコピー予測誤差ブロックデータの量子化係数を符号化し、予測誤差の符号データを生成する。これらは統合部121に入力され、ビットストリームに成形されて出力部122から外部に出力される。その後、符号化対象ブロックの符号化処理を終了する。
図5に戻り、実施形態1と同様に、動画像シーケンス内の全てのピクチャの符号化を行い、符号化処理全体が終了する。
上記の構成と動作によって生成されたビットストリームの内、ブロックの符号化に関するシンタックスの例を図14に示す。図14において、図2のシンタックスに比べ、cu_skip_flag符号の前の
if(slice_type!=I)
という条件が外されている。したがって、全てのスライスタイプのスライスのブロックでスキップ符号化が可能になる。但し、スライスタイプがI_sliceであれば、イントラブロックコピー符号化モードのブロックのみでスキップ符号化が行われる。また、スライスタイプがP_sliceまたはB_sliceであれば、インター予測符号化モードのブロックのみでスキップ符号化が行われる。これは図3のスキップ符号化を行う時のmerge_idx符号の値であるベクトル候補インデックスがコピーベクトル候補のインデックスなのか、動きベクトル候補のインデックスなのかをスライスタイプで判断して使用することで実現される。
以上、説明した装置構成と方法で、イントラブロックコピー符号化のコピーベクトルにおいてもマージモードの使用が可能になる。さらにスライスタイプがI_sliceのスライスのイントラブロックコピー符号化においてスキップ符号化が可能になり、符号化効率の改善が可能になった。
なお、本実施形態において、図14のシンタックスの代わりに、図17のシンタックスを用いても構わない。図17において、図2の
if(slice_type!=I)
の条件の代わりに
if(slice_type!=I||intra_block_copy_enabled_flag)
とする。これにより、スライスタイプがI_sliceであっても、イントラブロックコピー符号化が可能でない場合にcu_skip_flag符号を省略できる効果が得られる。
なお、図16において、ステップS1604においてスキップ符号化をしないと判断された場合に、ステップS911ではイントラブロックコピー予測誤差ブロックデータをステップS1603で算出したものを用いても構わない。
また、本実施形態において、イントラブロックコピー符号化モードにおいて、スキップ符号化が行われる際に、予め決められたコピーベクトル候補のベクトル候補インデックスを用いても良い。例えば、ブロックの左側のブロックが参照可能であれば、左側のブロックのコピーベクトルを符号化対象ブロックのコピーベクトルとする。また、ブロックの左側のブロックが参照不可能であれば、上側のブロックのコピーベクトルを符号化対象ブロックのコピーベクトルとする。この場合、予測を行うブロックでのシンタックスに関して、図4の3行目について下記のように変更される。
これにより、さらにデータ量を削減することが可能になる。
(実施形態4)
本発明の第4の実施形態を、図18を使って説明する。本実施形態では実施形態3で生成されたビットストリームを復号する場合を例にとって説明する。
本実施形態において、画像復号装置の構成は図11と同じなので省略する。但し、分離部1103、ヘッダ復号部1104、コピーベクトル復号部1105、イントラブロックコピー予測部1109、再構成部1114の動作が実施形態2と異なる。本実施形態での画像の復号動作を以下に説明する。この時、復号動作の全体を表すフローチャートについては図12と同じであり、ステップS1203のブロック復号動作が異なる。
図18は、本実施形態のステップS1203のブロックの復号動作を表すフローチャートである。同図においては図13のフローチャートと同じ機能を果たすステップについては同じ番号を付し、説明を省略する。ステップS1302にて、実施形態2と同様に、ヘッダ復号部1104はスキップフラグの値を再生する。ステップS1304にて、ヘッダ復号部1104はスキップフラグの値を判定し、値が1であればスキップ符号化されていると判定しステップS1801に進み、そうでなければステップS1305に進む。
ステップS1304において、スキップフラグの値が1であった場合について説明する。ステップS1801にて、コピーベクトル復号部1105、及び動きベクトル復号部1107、イントラブロックコピー予測部1109、インター予測部1110はスライスタイプを判定する。スライスタイプがI_sliceであれば、ステップS1802に進み、そうでなければステップS1326に進む。
ステップS1801でスライスタイプがI_sliceと判定された場合について説明する。ステップS1802にて、コピーベクトル復号部1105は分離部1103を介してmerge_idx符号を入力し復号する。ここではイントラスライスであるので、merge_idx符号が表すベクトル候補インデックスはコピーベクトル候補リストのベクトル候補インデックスである。コピーベクトル復号部1105は、コピーベクトルメモリ1106を参照して、復号対象ブロックの空間的近傍のブロックのコピーベクトルを用いて、コピーベクトル候補リストを生成する。コピーベクトル復号部1105はmerge_idx符号を復号してベクトル候補インデックスを再生し、ベクトル候補インデックスに従って、コピーベクトル候補リストからコピーベクトルを再生する。再生されたコピーベクトルはイントラブロックコピー予測部1109に入力される。また、再生されたコピーベクトルはコピーベクトルメモリ1106に格納される。ステップS1803にて、イントラブロックコピー予測部1109はこのコピーベクトルに基づいて、カレントピクチャメモリ1115に格納されている復号対象ピクチャの再生画像の画像データを参照してイントラブロックコピー予測ブロックデータを生成する。イントラブロックコピーイング予測部1109は、このイントラブロックコピー予測ブロックデータを復号対象ブロックの再生画像の画像データとする。復号対象ブロックの再生画像の画像データはカレントピクチャメモリ1115に出力される。その後、復号対象ブロックの復号処理が終了する。
ステップS1801でスライスタイプがI_slice以外と判定された場合について説明する。実施形態2と同様に、ステップS1326において、動きベクトル復号部1107はmerge_idx符号を復号し、動きベクトル候補インデックスを再生し、生成された動きベクトル候補リストから動きベクトルを再生する。再生された動きベクトルは動きベクトルメモリ1108に格納される。ステップS1327にて、インター予測部1110は入力された動きベクトルに基づいて、ピクチャメモリ1116に格納されている復号対象ピクチャより前に復号されたピクチャの再生画像を参照してインター予測ブロックデータを生成する。再構成部1114はインター予測ブロックデータを用いて、復号対象ブロックの復号画像の再生画像の画像データとする。復号対象ブロックの画像データはカレントピクチャメモリ1115に出力される。その後、復号対象ブロックの復号処理が終了する。
ステップS1304において、スキップフラグの値が1でなかった場合については以下の動作は実施形態2と同様であるので、説明を省略する。
分離部1103におけるブロック符号データの入力に関して、図14のシンタックスを用いて説明する。図14において、coding_unit()はブロックのシンタックスを表す。分離部1103はスライスタイプに依存せず、cu_skip_flag符号を入力し、ヘッダ復号部1104に出力する。以下、従来通り、イントラブロックコピー可否情報が1の場合に分離部1103はintra_bc_flag符号を入力し、ヘッダ復号部1104に出力する。スライスが非イントラスライス(P_sliceまたはB_slice)でかつとイントラブロックコピーフラグが0の場合に分離部1103はpred_mode_flag符号を入力し、ヘッダ復号部1104に出力する。
図17のシンタックスにおいても以下のとおりである。分離部1103はスライスタイプがI_sliceではないか、I_sliceであってもintra_block_copy_enabled_flag符号が1であれば、cu_skip_flag符号を入力し、ヘッダ復号部1104に出力する。すなわち、スライスタイプがI_sliceでintra_block_copy_enabled_flag符号が0の時にはcu_skip_flag符号は入力されない。以下、従来通りに入力と出力を行う。
以上、説明した装置構成と方法で、イントラブロックコピーイングにおいて、さらにスライスタイプがI_sliceのスライスのイントラブロックコピー符号化においてスキップ符号化が可能になり、符号化効率の改善が可能になった。これによって、より少ないデータ量で圧縮された画像を復号することができる。
さらに、本実施形態においては、各機能をハードウェアで実現する例をとって説明したが、これに限定されず、その一部または全部をCPUなどの演算処理装置を用いてソフトウェアで動作を実現しても構わない。
さらに、各符号データの生成に用いた符号化方式は特に限定されない。例えば、算術符号化方式やハフマン符号化方式を用いて復号することができる。
なお、本実施形態において、外部への再生画像の画像データの出力をピクチャ単位で行ったが、これに限定されず、スライス単位やブロック単位で外部に出力してももちろん構わない。
また、本実施形態において、イントラブロックコピー符号化モードにおいて、スキップ符号化を行う際に、予め決められたコピーベクトル候補のベクトル候補インデックスが用いられていても良い。例えば、ブロックの左側のブロックが参照可能であれば、左側のブロックのコピーベクトルを復号対象ブロックのコピーベクトルとする。また、ブロックの左側のブロックが参照不可能であれば、上側のブロックのコピーベクトルを復号対象ブロックのコピーベクトルとする。さらには、一意に左側のブロックのコピーベクトルや復号対象ブロックの直前に復号されたブロックのコピーベクトルを復号対象ブロックのコピーベクトルとしてもよい。コピーベクトル候補のベクトルを限定することによって、よりデータ量の少ないビットストリームでも復号が可能である。
(実施形態5)
本発明の第5の実施形態を、図19から図22を使って説明する。本実施形態において、画像符号化装置の構成は図1と同じなのでその説明を省略する。但し、イントラブロックコピー予測部106、コピーベクトル符号化部109、ヘッダ符号化部114、統合部121の動作が実施形態3と異なる。本実施形態での画像の符号化動作を以下に説明する。符号化動作については図20、21に示したフローチャートに基づき説明する。この時、符号化動作の全体を表すフローチャートについては図5と同じであり、ステップS507のブロック符号化動作が異なる。また、ブロック符号化処理を表すフローチャートについては図6と同じであり、ステップS621、ステップS622、ステップS623の動作が異なる。
図20は図6におけるステップS621の本実施形態でのインター予測符号化処理を表すフローチャートである。同図においては図7のフローチャートと同じ機能を果たすステップについては同じ番号を付し、説明を省略する。ステップS701にて、実施形態1と同様に、ヘッダ符号化部114はブロック符号化モードにインター符号化モード(MODE_INTER)を設定する。ステップS2001にて、ヘッダ符号化部114はイントラブロックコピー可否情報を判定し、イントラブロックコピー可否情報が1であれば、ステップS2002に進み、そうでなければステップS702に進む。ステップS2002にて、図7のステップS717と同様に、ヘッダ符号化部114は、イントラブロックコピーフラグをintra_bc_flag符号として符号化する。intra_bc_flag符号の符号データは統合部121に入力され、ビットストリームに成形されて出力部122から外部に出力される。実施形態1と同様にステップS703にて、動きベクトル符号化部111はマージモードの可否を判定する。実施形態1と同様にステップS705にて、ヘッダ符号化部114はスキップ符号化の可否を決定する。その後、ステップS706、またはステップS709、またはステップS715にて、スキップフラグの符号化が行われる。以下、動きベクトルの符号化、インター予測誤差ブロックデータの符号化、再生画像の算出、動きベクトルの格納が行われ、符号化対象ブロックの符号化処理が終了する。
図21は図6におけるステップS622の本実施形態でのイントラ予測符号化処理を表すフローチャートである。同図においては図8のフローチャートと同じ機能を果たすステップについては同じ番号を付し、説明を省略する。ステップS801にて、実施形態1と同様に、ヘッダ符号化部114はブロック符号化モードにイントラ符号化モード(MODE_INTRA)を設定する。ステップS2101にて、ヘッダ符号化部114はイントラブロックコピー可否情報を判定し、イントラブロックコピー可否情報が1であれば、ステップS2102に進み、そうでなければステップS803に進む。ステップS2102にて、図8のステップS805と同様に、ヘッダ符号化部114は、イントラブロックコピーフラグをintra_bc_flag符号として符号化する。intra_bc_flag符号の符号データは統合部121に入力され、ビットストリームに成形されて出力部122から外部に出力される。実施形態1と同様にステップS803にて、スキップフラグの符号化が行われる。以下、実施形態1と同様に、イントラ予測モードの符号化、イントラ予測誤差ブロックデータの符号化、再生画像の算出が行われ、符号化対象ブロックの符号化処理が終了する。
図22は図6におけるステップS623の本実施形態でのイントラブロックコピー符号化処理を表すフローチャートである。同図においては図16のフローチャートと同じ機能を果たすステップについては同じ番号を付し、説明を省略する。ステップS901にて、実施形態1と同様に、ヘッダ符号化部114はブロック符号化モードにイントラ符号化モード(MODE_INTRA)を設定する。ステップS2201にて、図9のステップS904と同様に、ヘッダ符号化部114は、イントラブロックコピーフラグをintra_bc_flag符号として符号化する。ここではイントラブロックコピーフラグの値は1である。intra_bc_flag符号の符号データは統合部121に入力され、ビットストリームに成形されて出力部122から外部に出力される。続いて、同様に、ステップS902にて、コピーベクトル符号化部109はコピーベクトルの候補リストを生成する。ステップS1601にて、実施形態2と同様に、コピーベクトルがマージモードで符号化できるか否かを判定する。
ステップS1601において、マージモードでの符号化をすると判定された場合について説明する。ステップS1602において、実施形態2と同様に、ヘッダ符号化部114はスキップ符号化をするかどうかを判定する。
ステップS1602において、スキップ符号化を可能と判定した場合について説明する。以下、実施形態1と同様に、ステップS1605にて、ヘッダ符号化部114はスキップフラグの値として1を設定し、これをcu_skip_flag符号として符号化する。ステップS1606にて、コピーベクトル符号化部109は、該当するコピーベクトル候補のベクトル候補インデックスをmerge_idx符号として符号化する。ステップS1607にて、イントラブロックコピー予測ブロックデータを、符号化対象ブロックの復号画像の再生画像の画像データとする。再生画像の画像データはカレントピクチャメモリ118に格納される。その後、符号化対象ブロックの符号化処理を終了する。
ステップS1602において、スキップ符号化を行うと判定した場合について説明する。ステップS1608にて、ヘッダ符号化部114はスキップフラグの値として0を設定し、これをcu_skip_flag符号として符号化する。ステップS1612にて、コピーベクトル符号化部109は、該当するコピーベクトル候補のベクトル候補インデックスをmerge_idx符号として符号化する。ステップS911にて、、実施形態1と同様に、変換・量子化部115はイントラブロックコピー予測誤差ブロックデータの量子化係数を算出し、逆量子化・逆変換部116は符号化対象ブロックの再生画像の画像データが再生され、カレントピクチャメモリ118に格納する。符号化部120はイントラブロックコピー予測誤差ブロックデータの量子化係数が符号化され、予測誤差の符号データが生成される。符号データは統合部121に入力され、ビットストリームに成形されて出力部122から外部に出力される。その後、符号化対象ブロックの符号化処理を終了する。
ステップS1602において、スキップ符号化を行わないと判定した場合について説明する。ステップS1608にて、実施形態2と同様に、ヘッダ符号化部114はスキップフラグの値を0に設定し、それを表すcu_skip_flag符号を符号化する。続いて、ステップS1612にて、コピーベクトル符号化部109はステップS1606と同様に、該当するコピーベクトル候補のベクトル候補インデックスをmerge_idx符号として符号化する。続いてステップS911にて前述の通り、符号化対象ブロックの再生画像の画像データが再生され、イントラブロックコピー予測誤差ブロックデータの量子化係数が符号化され、予測誤差の符号データが生成される。
ステップS1601において、マージモードでの符号化をしないと判定された場合について説明する。ステップS904にて、ヘッダ符号化部114はスキップフラグの値として0を設定し、これをcu_skip_flag符号として符号化する。ステップS910にて、コピーベクトル符号化部109は差分ベクトルを求めて、符号化する。ステップS911にて、前述の通り、符号化対象ブロックの再生画像の画像データが再生され、イントラブロックコピー予測誤差ブロックデータの量子化係数を符号化し、予測誤差の符号データが生成される。
そして、実施形態2と同様に、動画像シーケンス内の全てのピクチャの符号化を行い、符号化処理全体が終了する。
上記の構成と動作によって生成されたビットストリームの内、ブロックの符号化に関するシンタックスの例を図19に示す。図19において、図2のシンタックスに比べ、cu_skip_flag符号より前に
if(intra_block_copy_enabled_flag)
intra_bc_flag[x0][y0]
が追加された。これにより、イントラブロックコピー可否情報であるintra_block_copy_enabled_flag符号に基づいて、intra_bc_flag符号が符号化される。
さらに、cu_skip_flag符号の条件である、
if(slice_type!=I)
が
if(slice_type!=I||intra_bc_flag)
に変更されている。これにより、cu_skip_flag符号はスライスタイプが非イントラスライスの全ての符号化のモードと、スライスタイプがI_sliceのイントラブロックコピー符号化モードの際にスキップ符号化を使用することができる。
以上、説明した装置構成と方法で、さらに、スライスタイプがI_sliceのスライスだけでなくP_sliceやB_sliceのイントラブロックコピー符号化においてもスキップ符号化が可能になり、符号化効率の改善が可能になった。
さらに、本実施形態においては、各機能をハードウェアで実現する例をとって説明したが、これに限定されず、その一部または全部をCPUなどの演算処理装置を用いてソフトウェアで動作を実現しても構わない。
さらに、各符号データの生成に用いた符号化方式は特に限定されない。例えば、算術符号化方式やハフマン符号化方式を用いて復号することができる。
また、本実施形態において、イントラブロックコピー符号化モードにおいて、スキップ符号化を行う際に、予め決められたコピーベクトル候補のベクトル候補インデックスを用いても良い。例えば、ブロックの左側のブロックが参照可能であれば、左側のブロックのコピーベクトルを符号化対象ブロックのコピーベクトルとする。また、ブロックの左側のブロックが参照不可能であれば、上側のブロックのコピーベクトルを符号化対象ブロックのコピーベクトルとする。この場合は、予測を行うブロックでのシンタックスに関して、実施形態3と同様にように変更される。これにより、さらにデータ量を削減することが可能になる。
(実施形態6)
本発明の第6の実施形態を、図23を使って説明する。本実施形態では実施形態5で生成されたビットストリームを復号する場合を例にとって説明する。
本実施形態において、画像復号装置の構成は図11と同じなので省略する。但し、分離部1103、ヘッダ復号部1104、コピーベクトル復号部1105、イントラブロックコピー予測部1109、再構成部1114の動作が実施形態4と異なる。本実施形態での画像の復号動作を以下に説明する。復号動作については図23に示したフローチャートに基づき説明する。同図においては図18のフローチャートと同じ機能を果たすステップについては同じ番号を付し、説明を省略する。ステップS2301にて、ヘッダ復号部1104は、ステップS1201にて復号して得られたイントラブロックコピー可否情報を判定する。イントラブロックコピー可否情報の値が1(イントラブロックコピーイングが可)であればステップS2302に進み、そうでなければステップS2303に進む。ステップS2302にて、ヘッダ復号部1104は分離部1103を介して入力されたintra_bc_flag符号を復号し、その値をイントラブロックコピーフラグに設定する。ステップS2303にて、ヘッダ復号部1104はイントラブロックコピーフラグに0を設定する。
ステップS1301にて、実施形態2と同様に、ヘッダ復号部1104は図12のステップS1202で再生されたスライスタイプを判定する。スライスタイプがI_sliceであればステップS2305に進み、そうでなければステップS1302に進む。ステップS2305にて、ヘッダ復号部1104はステップS2302またはステップS2303にて設定されたイントラブロックコピーフラグの値を判定し、その値が1であればステップS1302に進み、そうでなければステップS1303に進む。ステップS1302及びステップS1303は実施形態2と同様にスキップフラグの値を設定する。
ステップS1304にて、ヘッダ復号部1104はスキップフラグの値を判定し、値が1であればステップS2309に進み、そうでなければステップS1308に進む。
ステップS1304において、スキップフラグの値が1であった場合について説明する。ステップS2309にて、ヘッダ復号部1104は、ステップS2302またはステップS2303にて設定されたイントラブロックコピーフラグの値を判定し、その値が1であればステップS2329に進み、そうでなければステップS2327に進む。
ステップS2309において、イントラブロックコピーフラグの値が1であった場合について説明する。ステップS2329にて、コピーベクトル復号部1105は分離部1103を介してmerge_idx符号を入力し復号する。ここではイントラブロックコピーフラグの値が1であることからブロック符号化モードはイントラ符号化モードである。さらに言えば、予測符号化モードはイントラブロックコピー予測符号化モードである。したがって、merge_idx符号が表すベクトル候補インデックスはコピーベクトル候補リストのベクトル候補インデックスである。コピーベクトル復号部1105は、コピーベクトルメモリ1106を参照して、復号対象ブロックの空間的近傍のブロックのコピーベクトルを用いて、コピーベクトル候補リストを生成する。コピーベクトル復号部1105はmerge_idx符号を復号してベクトル候補インデックスを再生する。このベクトル候補インデックスに従って、コピーベクトル候補リストからコピーベクトルを再生する。再生されたコピーベクトルはイントラブロックコピー予測部1109に入力される。また、再生されたコピーベクトルはコピーベクトルメモリ1106に格納される。ステップS1803にて、実施形態4と同様にイントラブロックコピー予測ブロックデータが生成され、これを再生画像の画像データとする。復号対象ブロックの再生画像の画像データはカレントピクチャメモリ1115に出力される。その後、復号対象ブロックの復号処理を終了する。
ステップS2309において、イントラブロックコピーフラグの値が1でなかった場合について説明する。ステップS2327にて、動きベクトル復号部1107は分離部1103を介して入力されたmerge_idx符号を復号する。ここではイントラブロックコピーフラグの値が0であることから、ブロック符号化モードはインター符号化モードである。さらに言えば、予測符号化モードはインター予測符号化モードである。動きベクトル復号部1107は分離部1103を介して入力されたmerge_idx符号を復号する。動きベクトル復号部1107は、動きベクトルメモリ1108を参照して、復号対象ブロックの空間的・時間的近傍のブロックの動きベクトルを用いて、動きベクトル候補リストを生成する。動きベクトル復号部1107はさらにmerge_idx符号を復号してベクトル候補インデックスを再生し、ベクトル候補インデックスに従って、動きベクトル候補リストから復号対象ブロックの動きベクトルを再生する。再生された動きベクトルはインター予測部1110に入力される。また、再生された動きベクトルは動きベクトルメモリ1108に格納される。ステップS1327にて、実施形態4と同様にインター予測ブロックデータが生成され、この生成されたデータを復号対象ブロックの再生画像の画像データとする。再生画像の画像データはカレントピクチャメモリ1115に出力される。その後、復号対象ブロックの復号処理を終了する。
ステップS1304において、スキップフラグの値が1ではなかった場合について説明する。ステップS1308にて、ヘッダ復号部1104は、スライスタイプを判定し、I_sliceであればステップS1310に進み、そうでなければステップS2310に進む。ステップS1308において、スライスタイプがI_sliceでなかった場合、ステップS2310にて、ヘッダ復号部1104はイントラブロックコピーフラグの値を判定する。イントラブロックコピーフラグの値が1(イントラブロックコピーイングが可)であればステップS1310に進み、そうでなければステップS1309に進む。ステップS1309にて、実施形態2と同様に、ヘッダ復号部1104は、ブロック符号化モードを表すpred_mode_flag符号を復号し、その値をブロック符号化モードの値に設定する。ステップS1310にて、実施形態2と同様に、ヘッダ復号部1104は、ブロック符号化モードにイントラ符号化モード(MODE_INTRA)を設定する。以下、実施形態4と同様であるので、説明を省略する。
分離部1103におけるブロック符号データの入力に関して、図19のシンタックスを用いて説明する。図19において、coding_unit()はブロックのシンタックスを表す。分離部1103はスライスタイプに依存せず、イントラブロックコピー可否情報が1の場合に、分離部1103はintra_bc_flag符号を入力し、ヘッダ復号部1104に出力する。続いて、スライスタイプがI_sliceではないか、intra_bc_flag符号の値が1の場合にcu_skip_flag符号を入力し、ヘッダ復号部1104に出力する。これにより、イントラブロックコピーフラグの値が1の時、すなわち、スライスタイプに拘わらずイントラブロックコピー符号化モードにおいてcu_skip_flag符号を使用することが可能になった。
以上、説明した装置構成と方法で、さらにスライスタイプに拘わらずイントラブロックコピー符号化においてスキップ符号化されたビットストリームの復号が可能になり、符号化効率の改善が可能になった。これによって、より少ないデータ量で圧縮された画像を復号することができる。
さらに、本実施形態においては、各機能をハードウェアで実現する例をとって説明したが、これに限定されず、その一部または全部をCPUなどの演算処理装置を用いてソフトウェアで動作を実現しても構わない。
さらに、各符号データの生成に用いた符号化方式は特に限定されない。例えば、算術符号化方式やハフマン符号化方式を用いて復号することができる。
また、本実施形態において、イントラブロックコピー符号化モードにおいて、スキップ符号化を行う際に、予め決められたコピーベクトル候補のベクトル候補インデックスが用いられていても良い。例えば、ブロックの左側のブロックが参照可能であれば、左側のブロックのコピーベクトルを復号対象ブロックのコピーベクトルとする。また、ブロックの左側のブロックが参照不可能であれば、上側のブロックのコピーベクトルを復号対象ブロックのコピーベクトルとする。これによって、よりデータ量の少ないビットストリームでも復号が可能である。
(実施形態7)
本発明の第7の実施形態を、図24から図29を使って説明する。
本実施形態の説明に先立ち、本実施形態で使用する予測符号化モードについて、図24を用いて説明する。本実施形態で扱う予測符号化モードはイントラ予測符号化モード、イントラブロックコピー符号化モード、インター予測符号化モードである。図24(a)は従来の符号化のモードを説明した図である。図24(a)において、これらをpred_mode_flag符号の値であるMODE_INTRAとMODE_INTER、およびintra_bc_flag符号の値である1または0の組合せで表現することができた。本実施形態では、新たに予測符号化モードを表す符号として、ブロック符号化インデックスを設け、pred_mode_idx符号として符号化する。図24(b)を用いてこれを説明する。ブロック符号化インデックスとして、イントラ予測符号化モードとしてMODE_INTRAを、イントラブロックコピー符号化モードとしてMODE_INTRA_BCを、インター予測符号化モードとしてMODE_INTERを割り当てる。例えば、MODE_INTRAは0を、MODE_INTRA_BCは1を、MODE_INTERは2とすることができる。但し、値はこれに限定されない。
本実施形態において、画像符号化装置の構成は図1と同じなので省略する。但し、ヘッダ符号化部114、統合部121の動作が実施形態1と異なる。本実施形態での画像の符号化動作を以下に説明する。符号化動作については図27から図29に示したフローチャートに基づき説明する。このとき、符号化動作の全体を表すフローチャートについては図5と同じであり、ステップS507のブロック符号化動作が異なる。また、ブロック符号化処理を表すフローチャートについては図6と同じであり、ステップS621、ステップS622、ステップS623の動作が異なる。
図27は図6におけるステップS621の本実施形態でのインター予測符号化処理を表すフローチャートである。同図においては図7のフローチャートと同じ機能を果たすステップについては同じ番号を付し、説明を省略する。ステップS2701にて、ヘッダ符号化部114はブロック符号化インデックスの値としてMODE_INTERを設定する。以下、実施形態1と同様に、動きベクトル符号化部111は、ステップS702にて動きベクトルの候補リストを生成し、ステップS703にてマージモードで符号化できるか否かを判定する。マージモードでの符号化をする場合、ステップS704に進み、そうでない場合はステップS715に進む。
ステップS703で動きベクトルのマージモードでの符号化をすると判定された場合について説明する。ステップS704にて、変換・量子化部115はインター予測誤差ブロックデータの量子化係数を算出する。ステップS705にて、ヘッダ符号化部114はスキップ符号化をするか否かの判定を行う。スキップ符号化をすると判定した場合は、ステップS706に進み、そうでなければステップS709に進む。ステップS705において、スキップ符号化をすると判定した場合は、ステップS706からステップS708にて、実施形態1と同じ動作を行うため、説明を省略する。ステップS705において、スキップ符号化をしないと判定した場合、ステップS709にて、ヘッダ符号化部114はスキップフラグの値として0を設定し、これをcu_skip_flag符号として符号化する。ステップS2702にて、ヘッダ符号化部114は、ステップS2701で設定されたブロック符号化インデックスの値をpred_mode_idx符号として符号化する。符号化方式は特に限定されず、他の符号と同様に、ハフマン符号化や算術符号化によって符号化される。以下、ステップS712、ステップS713は実施形態1と同じ動作を行うため、説明を省略する。
ステップS703で動きベクトルのマージモードでの符号化をしないと判定された場合について説明する。実施形態1と同様に、ステップS715にて、ヘッダ符号化部114はスキップフラグの値として0を設定し、これをcu_skip_flag符号として符号化する。ステップS2703にて、ヘッダ符号化部114は、ステップS2701で設定されたブロック符号化インデックスの値をpred_mode_idx符号として符号化する。以下、ステップS719、ステップS720は実施形態1と同じ動作を行うため、説明を省略する。
図28は図6におけるステップS622の本実施形態でのイントラ予測符号化処理を表すフローチャートである。同図においては図8のフローチャートと同じ機能を果たすステップについては同じ番号を付し、説明を省略する。ステップS2801にて、ヘッダ符号化部114はブロック符号化インデックスの値としてMODE_INTRAを設定する。ステップS2802にて、ヘッダ符号化部114は、ステップS2801で設定されたブロック符号化インデックスの値をpred_mode_idx符号として符号化する。符号化方式は特に限定されず、他の符号と同様に、ハフマン符号化や算術符号化によって符号化される。以下、ステップS808、ステップS809は実施形態1と同じ動作を行うため、説明を省略する。
図29は図6におけるステップS623の本実施形態でのイントラブロックコピー符号化処理を表すフローチャートである。同図においては実施形態1の図9のフローチャートと同じ機能を果たすステップについては同じ番号を付し、説明を省略する。ステップS2901にて、ヘッダ符号化部114はブロック符号化インデックスの値としてMODE_INTRA_BCを設定する。以下、実施形態1と同様に、ステップS902にて、コピーベクトル符号化部109は、ステップS902にてコピーベクトルの候補リストを生成する。ステップS903にて、ヘッダ符号化部114はスライスタイプを判定する。ステップS904にて、ヘッダ符号化部114はスキップ符号化を行うか否かを示すスキップフラグの値を0に設定し、それを表すcu_skip_flag符号を符号化する。ステップS2903にて、ステップS2901で設定されたブロック符号化インデックスの値をpred_mode_idx符号として符号化する。以下、ステップS908からステップS911は実施形態1と同じ動作を行うため、説明を省略する。
上記の構成と動作によって生成されたビットストリームの内、ブロックの符号化に関するシンタックスの例を図25、図26に示す。図25はブロックの符号化のシンタックスを表したものである。図2のブロックの符号化のシンタックスで使用されていたintra_bc_flag符号とpred_mode_flag符号の代わりに、図25においてはpred_mode_idx符号が符号化される。以下、intra_bc_flag符号とpred_mode_flag符号の値の参照ではなく、pred_mode_idx符号の値がCuPredMode[x0][y0]に設定される。設定された値であるMODE_INTRA、MODE_INTRA_BC,MODE_INTERによって以下の判定が行われる。図26は予測を行うブロックでのシンタックスを表したものである。図2の12行目の、
if(CuPredMode[x0][y0]!=MODE_INTRA||intra_bc_flag[x0][y0]
||log2CbSize==MinCbLog2SizeY)
は図25と同様に図2のintra_bc_flag符号の参照ではなく、MODE_INTRA、MODE_INTRA_BC,MODE_INTERが設定されたCuPredMode[x0][y0]によって判定が行われる。このため、
if(CuPredMode[x0][y0]==MODE_INTER||
CuPredMode[x0][y0]==MODE_INTRA_BC||
log2CbSize==MinCbLog2SizeY)
となる。
以上、説明した装置構成と方法で、intra_bc_flag符号とpred_mode_flag符号の代わりにpred_mode_idx符号を用いることで、各ブロックでの処理の簡略化が可能になった。例えば、実施形態1の図7と本実施形態の図27を比較すればステップS701、ステップS712、ステップS718がステップS2701、ステップS2702、ステップS2703に置き換えられている。また、ステップS710、ステップS711、ステップS716、ステップS717が省略されている。
なお、pred_mode_idx符号の符号化においては、周囲のブロックのブロック符号化インデックスの値から予測を行って符号化しても構わない。例えば、MODE_INTRAは1を、MODE_INTRA_BCは2を、MODE_INTERは3とし、例えば、直前に符号化されたブロックのブロック符号化インデックスと同じであれば値を0とする。これに最も短い符号を割り当て符号化することで符号化効率の改善を図っても構わない。
また、実施形態5、6のブロックの符号化のシンタックスのように、pred_mode_idx符号を先頭に持ってきても構わない。すなわち、図19の3、4行目の
(実施形態8)
本発明の第8の実施形態を、図30を使って説明する。本実施形態では実施形態7で生成されたビットストリームを復号する場合を例にとって説明する。
本実施形態において、画像復号装置の構成は図11と同じなので省略する。但し、分離部1103、ヘッダ復号部1104の動作が実施形態2と異なる。本実施形態での画像の復号動作を以下に説明する。復号動作の全体を表すフローチャートについては実施形態1の図12とのステップS1203のブロック復号動作が異なることを除いては同じであるためその説明を省略する。
図30は実施形態8におけるブロックの復号動作を表すフローチャートである。同図においては図13のフローチャートと同じ機能を果たすステップについては同じ番号を付し、説明を省略する。ステップS1301からステップS1303にて、実施形態2と同様に、ヘッダ復号部1104は、スライスタイプに応じてスキップフラグの値を決定する。ステップS1304にて、ヘッダ復号部1104はスキップフラグの値を判定し、値が1であればスキップ符号化されていると判断しステップS1326に進み、そうでなければステップS3001に進む。ステップS1304において、スキップフラグが1であった場合、実施形態1と同様に、ヘッダ復号部1104、動きベクトル復号部1107、インター予測部1110はステップS1326、ステップS1327の処理を行う。その後、復号対象ブロックの復号処理を終了する。ステップs1304において、スキップフラグが1ではない場合、ステップS3001にて、ヘッダ復号部1104はpred_mode_idx符号を復号し、ブロック符号化インデックスの値を再生する。ステップS3002にて、ヘッダ復号部1104はブロック符号化インデックスの値を判定する。
ステップS3002において、ブロック符号化インデックスの値がMODE_INTRA_BCであった場合、ステップS1313に進む。以下、実施形態2と同様に、コピーベクトル復号部1105はステップS1313からステップS1316にてコピーベクトルを復号する。ステップS1317でイントラブロックコピー予測ブロックデータを再生し、ステップS1325にて、再生画像の画像データを生成して、復号対象ブロックの復号処理を終了する。ステップS3002において、ブロック符号化インデックスの値がMODE_INTRAであった場合、ステップS1318に進む。以下、実施形態1と同様に、イントラ予測部1111はステップS1318にてイントラ予測モードを復号し、ステップS1319にてイントラ予測ブロックデータを再生し、ステップS1325にて、再生画像を生成して、復号対象ブロックの復号処理を終了する。ステップS3002において、ブロック符号化インデックスの値がMODE_INTERであった場合、ステップS1320に進む。以下、実施形態2と同様に、動きベクトル復号部1107はステップS1321からステップS1323にて動きベクトルを復号する。ステップS1324でインター予測ブロックデータが再生され、ステップS1325にて、再生画像が生成されて、復号対象ブロックの復号処理が終了する。
分離部1103におけるブロック符号データの入力に関して、図25、26のシンタックスを用いて説明する。図25において、coding_unit()はブロックのシンタックスを表す。スライスタイプがI_sliceではない場合、分離部1103はcu_skip_flag符号を入力し、ヘッダ復号部1104に出力する。スキップ符号化ではない場合、分離部1103はpred_mode_idx符号を入力し、ヘッダ復号部1104に出力する。以下、ブロック符号化インデックスの値に従って順次、符号を入力し、ヘッダ復号部1104、コピーベクトル復号部1105、動きベクトル復号部1107にそれぞれ出力する。
また、図26において、prediction_unit()は予測を行うブロックでのシンタックスを表す。図2のcu_skip_flag符号の値が1であれば、merge_idx符号を入力し、スライスタイプに応じてコピーベクトル復号部1105か動きベクトル復号部1107に出力される。また、cu_skip_flag符号の値が1でなければ、merge_flag符号が入力され、ブロック符号化インデックスの値に応じて、コピーベクトル復号部1105か動きベクトル復号部1107に出力される。merge_idx符号があれば、これもブロック符号化インデックスの値に応じて、コピーベクトル復号部1105か動きベクトル復号部1107に出力される。merge_flag符号の値が0であれば、B_sliceではinter_pred_idc符号が入力され、動きベクトル復号部1107に出力される。また、ブロック符号化インデックスの値がMODE_INTRA_BCであれば、コピーベクトルに関連する符号データがコピーベクトル復号部1105に入力される。以下、必要に応じて動きベクトルに関連する符号データが動きベクトル復号部1107に入力される。
また、実施形態5、6のブロックの符号化のシンタックスのように、pred_mode_idx符号がブロックの符号データの先頭にあっても構わない。実施形態6と同様にて、最初にpred_mode_idx符号を復号することで、最初にintra_bc_flag符号とpred_mode_flag符号を復号するのと変わらないためである。
以上、説明した装置構成と方法で、intra_bc_flag符号とpred_mode_flag符号の代わりにpred_mode_idx符号を用いることで、各ブロックでの処理の簡略化が可能になった。例えば、実施形態2の図13と本実施形態の図30を比較すればステップS1309、ステップS1311がステップS3001、ステップS3002に置き換えられている。また、ステップS1305からステップS1308、ステップS1307、ステップS1310、ステップS1312が省略されている。
さらに、本実施形態においては、各機能をハードウェアで実現する例をとって説明したが、これに限定されず、その一部または全部をCPUなどの演算処理装置を用いてソフトウェアで動作を実現しても構わない。
さらに、各符号データの生成に用いた符号化方式は特に限定されない。例えば、算術符号化方式やハフマン符号化方式を用いて復号することができる。
(実施形態9)
図1、図11に示した各処理部はハードウェアでもって構成しているものとして上記実施形態では説明した。しかし、これらの図に示した各処理部で行う処理をコンピュータプログラムでもって構成しても良い。
図31は、上記各実施形態に係る画像表示装置に適用可能なコンピュータのハードウェアの構成例を示すブロック図である。
CPU3101は、RAM3102やROM3103に格納されているコンピュータプログラムやデータを用いてコンピュータ全体の制御を行うと共に、上記各実施形態に係る画像符号化装置または画像復号装置が行うものとして上述した各処理を実行する。即ち、CPU3101は、図1、図11に示した各処理部として機能することになる。
RAM3102は、外部記憶装置3106からロードされたコンピュータプログラムやデータ、I/F(インターフェース)3107を介して外部から取得したデータなどを一時的に記憶するためのエリアを有する。更に、RAM3102は、CPU3101が各種の処理を実行する際に用いるワークエリアを有する。即ち、RAM3102は、例えば、ピクチャメモリとして割り当てたり、その他の各種のエリアを適宜、提供したりすることができる。
ROM3103には、本コンピュータの設定データや、ブートプログラムなどが格納されている。操作部3104は、キーボードやマウスなどにより構成されており、本コンピュータのユーザが操作することで、各種の指示をCPU3101に対して入力することができる。表示部3105は、CPU3101による復号の結果を表示する。また表示部3105は例えば液晶ディスプレイで構成される。
外部記憶装置3106は、ハードディスクドライブ装置に代表される、大容量情報記憶装置である。外部記憶装置3106には、OS(オペレーティングシステム)や、図1、図11に示した各部の機能をCPU3101に実現させるためのコンピュータプログラムが保存されている。更には、外部記憶装置3106には、処理対象としての各画像データが保存されていても良い。
外部記憶装置3106に保存されているコンピュータプログラムやデータは、CPU3101による制御に従って適宜、RAM3102にロードされ、CPU3101による処理対象となる。I/F3107には、LANやインターネット等のネットワーク、投影装置や表示装置などの他の機器を接続することができ、本コンピュータはこのI/F3107を介して様々な情報を取得したり、送出したりすることができる。3108は上述の各部を繋ぐバスである。
上述の構成からなる作動は前述のフローチャートで説明した作動をCPU3101が中心となってその制御を行う。
(その他の実施形態)
本発明の目的は、前述した機能を実現するコンピュータプログラムのコードを記録した記憶媒体を、システムに供給し、そのシステムがコンピュータプログラムのコードを読み出し実行することによっても達成される。この場合、記憶媒体から読み出されたコンピュータプログラムのコード自体が前述した実施形態の機能を実現し、そのコンピュータプログラムのコードを記憶した記憶媒体は本発明を構成する。また、そのプログラムのコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム(OS)などが実際の処理の一部または全部を行い、その処理によって前述した機能が実現される場合も含まれる。
さらに、以下の形態で実現しても構わない。すなわち、記憶媒体から読み出されたコンピュータプログラムコードを、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込む。そして、そのコンピュータプログラムのコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行って、前述した機能が実現される場合も含まれる。
本発明を上記記憶媒体に適用する場合、その記憶媒体には、先に説明したフローチャートに対応するコンピュータプログラムのコードが格納されることになる。