以下、添付図面を参照しながら、実施形態を詳細に説明する。以下の各実施形態の符号化装置及び復号装置は、LSI(Large-Scale Integration)チップ、DSP(Digital Signal Processor)、又はFPGA(Field Programmable Gate Array)などのハードウェアにより実現できる。また、以下の各実施形態の符号化装置及び復号装置は、コンピュータにプログラムを実行させること、即ち、ソフトウェアにより実現させることもできる。なお、以降の説明において、「画像」という用語は、「映像」、「画素」、「画像信号」、「絵」、又は「画像データ」などの用語に適宜読み替えることができる。
(第1実施形態)
第1実施形態では、動画像を符号化する符号化装置について説明する。
図1は、第1実施形態の符号化装置100の構成の一例を示すブロック図である。
符号化装置100は、入力画像を構成する各フレーム又は各フィールドを複数の画素ブロックに分割し、符号化制御部111から入力される符号化パラメータを用いて、分割した画素ブロックに対して予測符号化を行い、予測画像を生成する。そして符号化装置100は、複数の画素ブロックに分割した入力画像と予測画像とを減算して予測誤差を生成し、生成した予測誤差を直交変換及び量子化し、更にエントロピー符号化を行って符号化データを生成し、出力する。
符号化装置100は、画素ブロックのブロックサイズ及び予測画像の生成方法の少なくともいずれかが異なる複数の予測モードを選択的に適用して予測符号化を行う。予測画像の生成方法は、大別すると、符号化対象フレーム内で予測を行うイントラ予測と、時間的に異なる1以上の参照フレームを用いて動き補償予測を行うインター予測との2種類である。なお、イントラ予測は、画面内予測又はフレーム内予測などとも称され、インター予測は、画面間予測、フレーム間予測、又は動き補償予測などとも称される。
図2Aは、第1実施形態における画素ブロックの予測符号化順序の一例を示す説明図である。図2Aに示す例では、符号化装置100は、画素ブロックの左上から右下に向かって予測符号化を行っており、符号化処理対象のフレームfにおいて、符号化対象画素ブロックcよりも左側及び上側に符号化済み画素ブロックpが位置している。
図2Bは、第1実施形態における画素ブロックの予測符号化順序の他の例を示す説明図である。図2Bに示す例は、符号化装置100は、予め画面を複数のタイル状又はスライス状に分割した上で、各タイル又は各スライスの中の画素ブロックの左上から右下に向かって予測符号化を行っており、符号化処理対象のフレームfにおいて、符号化対象画素ブロックcよりも左側及び上側に符号化済み画素ブロックpが位置している。なお、タイルは、画面を任意の矩形領域で切り出した領域を意味し、スライスは、予測符号化順に従って後述する任意数のラージコーディングツリーブロックで切り出した領域を意味する。
図2Bに示す例のように、画面を複数のタイル状又は複数のスライス状に分割した後に、タイル毎又はスライス毎に符号化処理を行うことにより、タイル毎又はスライス毎の復号処理が可能となる。このため、高解像度映像の復号処理を並列して行うことにより、復号に必要となる演算量を分散することが可能となる。つまり、図2Bに示す例の場合、符号化処理及び復号処理の高速化が可能となる。
以下では、説明の簡単化のため、符号化装置100は、図2Aに示す順序で予測符号化を行うものとするが、予測符号化の順序はこれに限定されるものではない。
画素ブロックは、画像を処理する単位を示し、例えば、M×Nサイズのブロック(M及びNは自然数)、コーディングツリーブロック、マクロブロック、サブブロック、又は1画素などが該当する。以降の説明では、基本的に、画素ブロックをコーディングツリーブロックの意味で使用するが、他の意味で使用する場合もある。例えば、プレディクションユニットの説明では、画素ブロックを、プレディクションユニットの画素ブロックの意味で使用する。また、ブロックはユニットなどの名称で呼ばれることもある。例えばコーディングブロックをコーディングユニットと呼ぶ。
図3Aは、第1実施形態におけるコーディングツリーブロックのブロックサイズの一例を示す図である。コーディングツリーブロックは、典型的には、図3Aに示すような64×64の画素ブロックである。但し、これに限定されるものではなく、32×32の画素ブロック、16×16の画素ブロック、8×8の画素ブロック、又は4×4の画素ブロックなどであってもよい。また、コーディングツリーブロックは、正方形でなくてもよく、例えば、M×Nサイズ(M≠N)の画素ブロックであってもよい。
図3B〜図3Dは、第1実施形態のコーディングツリーブロックの具体例を示す図である。図3Bは、ブロックサイズが64×64(N=32)のコーディングツリーブロックを示している。Nは、基準となるコーディングツリーブロックのサイズを表しており、分割された場合のサイズがN、分割されない場合のサイズが2Nと定義されている。図3Cは、図3Bのコーディングツリーブロックを四分木分割したコーディングツリーブロックを示している。コーディングツリーブロックは、図3Cに示すように、四分木構造を持つ。コーディングツリーブロックが分割された場合、分割後の4つの画素ブロックに対して、図3Cに示すように、Zスキャン順で番号が付される。
なお、コーディングツリーブロックは、1つの四分木の番号内で更に四分木分割することができる。これにより、コーディングツリーブロックを階層的に分割することができる。この場合、分割の深さは、Depthで定義される。図3Dは、図3Bのコーディングツリーブロックを四分木分割したコーディングツリーブロックの1つを示し、ブロックサイズが32×32(N=16)となっている。図3Bに示すコーディングツリーブロックのDepthは0であり、図3Dに示すコーディングツリーブロックのDepthは、1である。なお、最もユニットが大きいコーディングツリーブロックは、ラージコーディングツリーブロックと呼ばれ、この単位で入力画像信号がラスタースキャン順に符号化される。
以降の説明では、入力画像の符号化対象ブロック又はコーディングツリーブロックを予測対象ブロック又は予測画素ブロックと称することもある。なお、符号化単位は画素ブロックに限らず、フレーム、フィールド、スライス、ライン、及び画素の少なくともいずれかを用いることもできる。
符号化装置100は、図1に示すように、減算部101と、直交変換部102と、量子化部103と、逆量子化部104と、逆直交変換部105と、加算部106と、予測画像生成部107と、インデックス設定部108と、動き評価部109と、符号化部110とを、備える。なお、図1に示す符号化制御部111は、符号化装置100を制御するものであり、例えば、CPU(Central Processing Unit)などにより実現できる。
減算部101は、画素ブロックに分割された入力画像から対応する予測画像を減算して予測誤差を得る。減算部101は、予測誤差を出力し、直交変換部102に入力する。
直交変換部102は、減算部101から入力された予測誤差に対して、例えば、離散コサイン変換(DCT)又は離散サイン変換(DST)のような直交変換を行い、変換係数を得る。直交変換部102は、変換係数を出力し、量子化部103に入力する。
量子化部103は、直交変換部102から入力された変換係数に対して量子化処理を行い、量子化変換係数を得る。具体的には、量子化部103は、符号化制御部111によって指定される量子化パラメータや量子化マトリクスなどの量子化情報に従って量子化を行う。より詳細には、量子化部103は、変換係数を量子化情報によって導出される量子化ステップサイズで除算し、量子化変換係数を得る。量子化パラメータは、量子化の細かさを示す。量子化マトリクスは、量子化の細かさを変換係数の成分毎に重み付けするために使用される。量子化部103は、量子化変換係数を出力し、逆量子化部104及び符号化部110に入力する。
逆量子化部104は、量子化部103から入力された量子化変換係数に対して逆量子化処理を行い、復元変換係数を得る。具体的には、逆量子化部104は、量子化部103において使用された量子化情報に従って逆量子化を行う。より詳細には、逆量子化部104は、量子化情報によって導出された量子化ステップサイズを量子化変換係数に乗算し、復元変換係数を得る。なお、量子化部103において使用された量子化情報は、符号化制御部111の図示せぬ内部メモリからロードされて利用される。逆量子化部104は、復元変換係数を出力し、逆直交変換部105に入力する。
逆直交変換部105は、逆量子化部104から入力された復元変換係数に対して、例えば、逆離散コサイン変換(IDCT)又は逆離散サイン変換(IDST)などのような逆直交変換を行い、復元予測誤差を得る。なお、逆直交変換部105が行う逆直交変換は、直交変換部102において行われた直交変換に対応する。逆直交変換部105は、復元予測誤差を出力し、加算部106に入力する。
加算部106は、逆直交変換部105から入力された復元予測誤差と対応する予測画像とを加算し、局所復号画像を生成する。加算部106は、局所復号画像を出力し、予測画像生成部107に入力する。
予測画像生成部107は、加算部106から入力された局所復号画像を参照画像としてメモリ(図1では図示省略)に蓄積し、メモリに蓄積した参照画像を出力し、動き評価部109に入力する。また予測画像生成部107は、動き評価部109から入力される動き情報及びWPパラメータ情報に基づいて重み付き動き補償予測を行い、予測画像を生成する。予測画像生成部107は、予測画像を出力し、減算部101及び加算部106に入力する。
図4は、第1実施形態の予測画像生成部107の構成の一例を示すブロック図である。予測画像生成部107は、図4に示すように、複数フレーム動き補償部201と、メモリ202と、単方向動き補償部203と、予測パラメータ制御部204と、参照画像セレクタ205と、フレームメモリ206と、参照画像制御部207と、を備える。
フレームメモリ206は、参照画像制御部207の制御の下、加算部106から入力された局所復号画像を参照画像として格納する。フレームメモリ206は、参照画像を一時保持するための複数のメモリセットFM1〜FMN(N≧1)を有する。
予測パラメータ制御部204は、動き評価部109から入力される動き情報に基づいて、参照画像番号と予測パラメータとの複数の組み合わせをテーブルとして用意している。ここで、動き情報とは、動き補償予測で用いられる動きのズレ量を示す動きベクトルや参照画像番号、単方向/双方向予測などの予測モードに関する情報などを指す。予測パラメータは、動きベクトル及び予測モードに関する情報を指す。そして予測パラメータ制御部204は、入力画像に基づいて、予測画像の生成に用いる参照画像番号と予測パラメータとの組み合わせを選択して出力し、参照画像番号を参照画像セレクタ205に入力し、予測パラメータを単方向動き補償部203に入力する。
参照画像セレクタ205は、フレームメモリ206が有するフレームメモリFM1〜FMNのいずれの出力端を接続するかを、予測パラメータ制御部204から入力された参照画像番号に従って切り替えるスイッチである。参照画像セレクタ205は、例えば、参照画像番号が0であれば、FM1の出力端を参照画像セレクタ205の出力端に接続し、参照画像番号がN−1であれば、FMNの出力端を参照画像セレクタ205の出力端に接続する。参照画像セレクタ205は、フレームメモリ206が有するフレームメモリFM1〜FMNのうち、出力端が接続されているフレームメモリに格納されている参照画像を出力し、単方向動き補償部203及び動き評価部109へ入力する。
単方向動き補償部203は、予測パラメータ制御部204から入力された予測パラメータと参照画像セレクタ205から入力された参照画像に従って、動き補償予測処理を行い、単方向予測画像を生成する。
図5は、第1実施形態の双方向予測における動き補償予測の動きベクトルの関係の一例を示す図である。動き補償予測では、参照画像を用いて補間処理が行われ、作成された補間画像と入力画像との符号化対象位置の画素ブロックからの動きのズレ量を元に単方向予測画像が生成される。ここで、ズレ量は、動きベクトルである。図5に示すように、双方向予測スライス(B−slice)では、2種類の参照画像と動きベクトルのセットを用いて予測画像が生成される。補間処理としては、1/2画素精度の補間処理や、1/4画素精度の補間処理などが用いられ、参照画像に対してフィルタリング処理が行われることによって、補間画像の値が生成される。例えば、輝度信号に対して1/4画素精度までの補間処理な可能なH.264では、ズレ量は整数画素精度の4倍で表現される。
単方向動き補償部203は、単方向予測画像を出力し、メモリ202に一時的に格納する。ここで、動き情報(予測パラメータ)が双方向予測を示す場合には、複数フレーム動き補償部201が2種類の単方向予測画像を用いて重み付き予測を行うため、単方向動き補償部203は、1つ目に対応する単方向予測画像をメモリ202に格納し、2つ目に対応する単方向予測画像を複数フレーム動き補償部201に直接出力する。ここでは、1つ目に対応する単方向予測画像を第一予測画像とし、2つ目に対応する単方向予測画像を第二予測画像とする。
なお、単方向動き補償部203を2つ用意し、それぞれが2つの単方向予測画像を生成するようにしてもよい。この場合、動き情報(予測パラメータ)が単方向予測を示すときには、単方向動き補償部203が、1つ目の単方向予測画像を第一予測画像として複数フレーム動き補償部201に直接出力すればよい。
複数フレーム動き補償部201は、メモリ202から入力される第一予測画像、単方向動き補償部203から入力される第二予測画像、及び動き評価部109から入力されるWPパラメータ情報を用いて、重み付き予測を行って予測画像を生成する。複数フレーム動き補償部201は、予測画像を出力し、減算部101及び加算部106に入力する。
図6は、第1実施形態の複数フレーム動き補償部201の構成の一例を示すブロック図である。複数フレーム動き補償部201は、図6に示すように、デフォルト動き補償部301と、重み付き動き補償部302と、WPパラメータ制御部303と、WPセレクタ304、305とを、備える。
WPパラメータ制御部303は、動き評価部109から入力されるWPパラメータ情報に基づいて、WP適用フラグ及び重み情報を出力し、WP適用フラグをWPセレクタ304、305に入力し、重み情報を重み付き動き補償部302に入力する。具体的には、WPパラメータ制御部303は、動き評価部109からWPパラメータ情報が入力されると、WPパラメータ情報を第一WP適用フラグ、第二WP適用フラグ、及び重み情報に分離して出力し、第一WP適用フラグをWPセレクタ304に入力し、第二WP適用フラグをWPセレクタ305に入力し、重み情報を重み付き動き補償部302に入力する。
ここで、WPパラメータ情報は、第一WP適用フラグ(詳細には、第一WP適用フラグのフラグ情報)、第二WP適応フラグ(詳細には、第二WP適用フラグのフラグ情報)、及び重み情報の情報を含む。第一WP適用フラグ、第二WP適用フラグは、該当する参照画像及び信号成分毎に設定可能なパラメータであり、それぞれ、第一予測画像、第二予測画像の予測に関してデフォルト動き補償予測を行うか重み付き動き補償予測を行うかの情報を含む。ここでは、第一WP適用フラグ、第二WP適用フラグは、いずれも、0である場合デフォルト動き補償予測を行うことを示し、1である場合重み付き動き補償予測を行うことを示すものとする。
重み情報は、第一重み係数の値w0C、第二重み係数の値w1C、第一重み係数及び第二重み係数の固定小数点精度を示すパラメータLWD(以下、「固定小数点精度LWD」と称する場合がある)、第一オフセットo0C、及び第二オフセットo1Cの情報を含む。なお、変数Cは、信号成分を意味する。例えば、YUV空間信号の場合、輝度信号をC=Yとし、Cr色差信号をC=Cr、Cb色差成分をC=Cbと表す。
第一重み係数は、第一予測画像に対応する重み係数であり、固定小数点精度LWDによって値が定まる(変動する)パラメータである。第二重み係数は、第二予測画像に対応する重み係数であり、固定小数点精度LWDによって値が定まる(変動する)パラメータである。固定小数点精度LWDは、第一重み係数及び第二重み係数の分数精度に対応する刻み幅を制御するパラメータである。固定小数点精度LWDは、輝度と色差で異なる値を使ってもよいが、ここでは、簡単化のため、色信号毎に明示的に分けずに説明する。例えば、w0Cが実数値で表現した場合に1.0(2進数表記で1)、LWDが5の場合、第一重み係数は32(2進数表記で100000)となり、w1Cが実数値で表現した場合に2.0(2進数表記で10)、LWDが5の場合、第二重み係数は64(2進数表記で1000000)となる。第一オフセットo0Cは、第一予測画像に対応するオフセットであり、第二オフセットo1Cは、第二予測画像に対応するオフセットである。
なお、WPパラメータ制御部303は、WPパラメータ情報が入力されると、重み情報の値が規定の範囲内に収まっているかどうかチェックし、範囲外の値を範囲内の値に再設定したり、WP適用フラグの値を変更したりする。例えば、w0Cが実数値で表現した場合に3.0、LWDが7の場合、第一重み係数は384となる。ここで、384は、第一重み係数の範囲外であり、使用できないが、96は、第一重み係数の範囲内であり、使用できるとする。この場合、WPパラメータ制御部303は、LWDを5、第一重み係数は96とすることで、w0Cを実数値で表現した場合に3.0としたまま、第一重み係数を範囲内に再設定してもよい。またこの際に、WPパラメータ制御部303は、量子化処理を行ってもよい。例えば、LWDが7であり、第一重み係数が385となる場合、WPパラメータ制御部303は、量子化処理を行って第一重み係数を384とした後に、LWDを5、w0Cを実数値で表現した場合に3.0とすることで、第一重み係数は96に再設定してもよい。また、WPパラメータ制御部303は、第一WP適用フラグの値を1から0に変更し、重み付き動き補償予測を利用しないようにしてもよい。これらの手法に限定されないが、WPパラメータ制御部303は、重み情報の値が仕様等で定められた規定の範囲を超えて使用されないように制御する。
WPセレクタ304、305は、WPパラメータ制御部303から入力されたWP適用フラグに基づいて、各々の予測画像の接続端を切り替える。WPセレクタ304、305は、各々のWP適用フラグが0の場合、各々の出力端をデフォルト動き補償部301へ接続する。そしてWPセレクタ304、305は、第一予測画像及び第二予測画像を出力し、デフォルト動き補償部301に入力する。一方、WPセレクタ304、305は、各々のWP適用フラグが1の場合、各々の出力端を重み付き動き補償部302へ接続する。そしてWPセレクタ304、305は、第一予測画像及び第二予測画像を出力し、重み付き動き補償部302に入力する。
デフォルト動き補償部301は、WPセレクタ304、305から入力された2つの単方向予測画像(第一予測画像及び第二予測画像)を元に平均値処理(デフォルト動き補償予測)を行い、予測画像を生成する。具体的には、デフォルト動き補償部301は、第一WP適用フラグ及び第二WP適用フラグが0の場合、数式(1)に基づいて平均値処理を行う。
P[x,y]=Clip1((PL0[x,y]+PL1[x,y]+offset2)>>(shift2)) …(1)
ここで、P[x,y]は予測画像、PL0[x,y]は第一予測画像、PL1[x,y]は第二予測画像である。offset2及びshift2は平均値処理における丸め処理のパラメータであり、第一予測画像及び第二予測画像の内部演算精度によって定まる。Clip1(X)は、変数Xを特定のビット精度内にクリップする関数であり、ここでは、予測画像のビット精度内にクリップする。例えば予測画像のビット精度をL=8とした場合、0から255の範囲外の値を0から255にクリップする。更に具体的に説明すると、0以下の値を0に設定し、255より大きい値を255に設定する。
予測画像のビット精度をL、第一予測画像及び第二予測画像のビット精度をM(L≦M)とすると、shift2は数式(2)で定式化され、offset2は数式(3)で定式化される。
shift2=(M−L+1) …(2)
offset2=(1<<(shift2−1) …(3)
例えば、予測画像のビット精度が8であり、第一予測画像及び第二予測画像のビット精度が14である場合、数式(2)よりshift2=7、数式(3)よりoffset2=(1<<6)となる。
なお、動き情報(予測パラメータ)で示される予測モードが単方向予測である場合、デフォルト動き補償部301は、第一予測画像のみを用いて、数式(4)に基づいて最終的な予測画像を算出する。
P[x,y]=Clip1((PLX[x,y]+offset1)>>(shift1)) …(4)
ここで、PLX[x,y]は単方向予測画像(第一予測画像)を示しており、Xは参照リストの0又は1のいずれかを示す識別子である。例えば、参照リストが0の場合はPL0[x,y]、参照リストが1の場合はPL1[x,y]となる。offset1及びshift1は丸め処理のパラメータであり、第一予測画像の内部演算精度によって定まる。予測画像のビット精度をL、第一予測画像のビット精度をMとすると、shift1は数式(5)で定式化され、offset1は数式(6)で定式化される。
shift1=(M−L) …(5)
offset1=(1<<(shift1−1) …(6)
例えば、予測画像のビット精度が8であり、第一予測画像のビット精度が14である場合、数式(5)よりshift1=6、数式(6)よりoffset1=(1<<5)となる。
重み付き動き補償部302は、WPセレクタ304、305から入力された2つの単方向予測画像(第一予測画像及び第二予測画像)とWPパラメータ制御部303から入力された重み情報とを元に重み付き動き補償(重み付き動き補償予測)を行う。
ここで、重み係数について更に説明する。図7は、重み係数の説明のための参考図であり、時間方向の画素値変化がある動画像の階調値の変化の一例を示している。図7に示す例では、符号化対象フレームをFrame(t)とし、時間的に1つ前のフレームをFrame(t−1)、時間的に1つ後のフレームをFrame(t+1)としている。図7に示すように、白から黒に変化するフェード画像では、画像の明度(階調値)が時間とともに減少していく。重み係数の値は、図7で説明したような画素値変化の度合いを意味しており、画素値変化が無い場合(画素値変化が0の場合)に実数値で表現すると1.0の値を取る。
ここで、画素値変化が無い場合について更に説明する。例えば、同一の静止画像が時間的に連続している動画像を想定した場合、画面間の輝度変化は0となる。この場合、重み付き動き補償部302は、重み付き動き補償予測を行っても画素値変化が0であるため、デフォルト動き補償予測を行っていることと等価となる。このような場合、即ち、画素値変化が無い場合、重み付き動き補償部302は、重み係数の基準値を選択することで、デフォルト動き補償予測を重み付き動き補償予測で実現する。ここで、重み係数の基準値は、固定小数点精度に従って導出でき、(1<<LWD)となる。
また、一般的に、フェード効果やディゾルブ効果などの動画像の画素値変化はフレーム毎にそれほど大きく変化しないため、重み係数の値は、実数値で表現した場合に1.0近傍に偏っている。なお、第1実施形態では、重み係数の値は2のべき乗で示される固定小数点精度に量子化されているため、2つの画像間で平均的な画素値変化が僅かに生じたとしても1/128精度以下での変化であれば、重み係数の値は実数値で表現した場合に1.0に量子化される。このため、第1実施形態では、画素値変化が生じたとしても実質的に画素値変化が無い場合として扱うことができる。以下では、説明を簡単にするため、画素値変化が無い場合、即ち、重み係数の値を実数値で表現すると1.0となる場合を想定して、説明を行う。なお、画素値変化が無い場合は、画素値変化が所定の値(重み係数の精度よりも十分小さい値)以下であることに相当する。
このため、重み付き動き補償部302は、第一WP適用フラグ及び第二WP適用フラグが1の場合、数式(7)に基づいて重み付き処理を行う。
P[x,y]=Clip1(((PL0[x,y]*w0C+PL1[x,y]*w1C+((o0C+o1C+1)<<LWD))>>(LWD+1))) …(7)
なお、重み付き動き補償部302は、第一予測画像及び第二予測画像と予測画像との演算精度が異なる場合、LWDを数式(8)のように制御することで丸め処理を実現する。
LWD’=LWD+offset1 …(8)
丸め処理は、数式(7)のLWDを、数式(8)のLWD’に置き換えることで実現できる。例えば、予測画像のビット精度が8であり、第一予測画像及び第二予測画像のビット精度が14である場合、LWDを再設定することにより、数式(1)のshift2と同様の演算精度における一括丸め処理を実現することが可能となる。
なお、動き情報(予測パラメータ)で示される予測モードが単方向予測である場合、重み付き動き補償部302は、第一予測画像のみを用いて、数式(9)に基づいて最終的な予測画像を算出する。
P[x,y]=Clip1((PLX[x,y]*wXC+(1<<(LWD−1)))>>(LWD)+oXC) …(9)
ここで、PLX[x,y]は単方向予測画像(第一予測画像)を示し、wXCは単方向予測に対応する重み係数を示しており、Xは参照リストの0又は1のいずれかを示す識別子であり、oXCは単方向予測に対応するオフセットを示す。例えば、参照リストが0の場合はPL0[x,y]、w0C、o0C、参照リストが1の場合はPL1[x,y]、w1C、o1Cとなる。
なお、重み付き動き補償部302は、第一予測画像及び第二予測画像と予測画像との演算精度が異なる場合、LWDを双方向予測時と同様に数式(8)のように制御することで丸め処理を実現する。
丸め処理は、数式(9)のLWDを、数式(8)のLWD’に置き換えることで実現できる。例えば、予測画像のビット精度が8であり、第一予測画像のビット精度が14である場合、LWDを再設定することにより、数式(4)のshift1と同様の演算精度における一括丸め処理を実現することが可能となる。
なお、単方向予測の場合には、第二予測画像に対応する各種パラメータ(第二WP適応フラグ、第二重み係数、及び第二オフセットの情報)は利用されないため、予め定めた初期値に設定されていてもよい。
図1に戻り、動き評価部109は、入力画像と予測画像生成部107から入力された参照画像とに基づき複数フレーム間の動き評価を行い、動き情報及びWPパラメータ情報を出力し、動き情報を予測画像生成部107及び符号化部110に入力し、WPパラメータ情報を予測画像生成部107及びインデックス設定部108に入力する。
動き評価部109は、例えば、予測対象画素ブロックの入力画像と同位置に対応する複数の参照画像を起点として差分値を計算することで誤差を算出し、この位置を分数精度でずらし、誤差最小のブロックを探すブロックマッチングなどの手法により、最適な動き情報を算出する。動き評価部109は、双方向予測の場合には、単方向予測で導出された動き情報を用いて、数式(1)及び数式(4)に示すようなデフォルト動き補償予測を含むブロックマッチングを行うことにより、双方向予測の動き情報を算出する。
この際、動き評価部109は、数式(7)及び数式(9)で示されるような重み付き動き補償予測を含むブロックマッチングを行うことにより、WPパラメータ情報を算出できる。なお、WPパラメータ情報の算出には、入力画像の画素勾配を用いて重み係数やオフセットを算出する方法や、符号化した際の予測誤差の累積による重み係数やオフセットの算出方法などを用いてもよい。またWPパラメータ情報は、符号化装置毎に予め定めた固定値を用いてもよい。
ここで、再度図7を参照しながら、時間的に画素値変化のある動画像から、重み係数、重み係数の固定小数点精度、及びオフセットを算出する方法を説明する。前述したように、図7に示すような白から黒に変化するフェード画像では、画素値(階調値)が時間とともに減少していく。動き評価部109は、この傾きを計算することにより、重み係数を算出することができる。
また、重み係数の固定小数点精度は、この傾きの精度を示す情報であり、動き評価部109は、参照画像の時間的な距離と画像値の変化度から、最適な値を計算できる。例えば、図7において、Frame(t−1)〜Frame(t+1)間の重み係数の値を実数精度で表現すると0.75である場合、1/4精度であれば、3/4が表現できるため、動き評価部109は、固定小数点精度を2(1<<2)に設定する。固定小数点精度の値は、重み係数を符号化した場合の符号量に影響を与えるため、符号量と予測精度を考慮して最適な値を選択すればよい。なお、固定小数点精度の値は、予め定めた固定値としてもよい。
また、動き評価部109は、傾きが一致しない場合、一次関数の切片に対応する補正値(ズレ量)を求めることでオフセット値を算出できる。例えば、図7において、Frame(t−1)〜Frame(t+1)間の重み係数の値を実数精度で表現すると0.60であり、固定小数点精度が1(1<<1)である場合、重み係数は1(つまり、重み係数の値を実数精度で表現した場合の0.50に該当)が設定される可能性が高い。この場合、重み係数の小数点精度は、最適な値である0.60から0.10ずれているため、動き評価部109は、この分の補正値を画素の最大値から計算し、オフセット値として設定する。画素の最大値が255である場合、動き評価部109は、25(255×0.1)などの値を設定すればよい。
なお第1実施形態では、符号化装置100の一機能として動き評価部109を例示しているが、動き評価部109は符号化装置100の必須の構成ではなく、例えば、動き評価部109を符号化装置100外の装置としてもよい。この場合、動き評価部109で算出された動き情報及びWPパラメータ情報を符号化装置100にロードするようにすればよい。
インデックス設定部108は、動き評価部109から入力されたWPパラメータ情報を受け取り、参照リスト(リスト番号)と参照画像(参照番号)とを確認して、インデックス情報を出力し、符号化部110に入力する。インデックス設定部108は、動き評価部109から入力されたWPパラメータ情報を、後述するシンタクス要素にマッピングしてインデックス情報を生成する。この際、インデックス設定部108は、重み係数の選択範囲を導出し、重み係数が当該選択範囲に含まれていることを確認する。
ここで、重み係数の選択範囲の導出について説明する。
第1実施形態では、前述したように、画素値変化が無く、重み係数の値を実数値で表現すると1.0となる場合を想定しており、この場合、重み係数/重み係数の基準値=1が成立する。重み係数の基準値は、前述したように、(1<<LWD)であるため、第1実施形態では、重み係数は(1<<LWD)となり、重み係数の基準値と同値となる。
ところで、H.264などでは、重み係数やオフセットなどのインデックスは、−128から127までの符号付き8ビットの値を取るよう規定され、固定小数点精度は、0から7までの値を取るように規定されている。このため第1実施形態では、重み係数が規定の範囲外となる場合が生じる。
図8は、H.264における重み係数の選択範囲を示す参考図であり、固定小数点精度LWDがそれぞれ0から7の値を取った場合の重み係数(1<<LWD)を示している。図8から明らかなように、重み係数は、固定小数点精度LWDの値が小さくなると0近辺の正の値を取るが、固定小数点精度LWDの値が7になると128となり、H.264の規定の範囲外となる。
このように、H.264の規定では、使用したい重み係数の範囲が規定の範囲外となってしまい、実用面に則さないことがある。また、単方向予測では、負の方向に対応する重み係数を選択したとしても、単方向予測で出力される予測画素値が入力画像のビット範囲にクリップ処理され0となる可能性が高く、負の方向に対応する重み係数を実質的に選択できない。一方、双方向予測では、外挿予測を実現するために、片方の単方向予測の重み係数を負の値に設定し、他方の重み係数を正の値に設定するといった使い方が可能であるが、負側の値は、重み係数の範囲として、正側の値と同じ精度が必要とならない場合が多い。
このため、第1実施形態では、インデックス設定部108は、重み係数の基準値を略中心として負の方向と正の方向に値を割り振ることにより重み係数の選択範囲を導出し、導出した重み係数の選択範囲内に重み係数が含まれていることを確認する。
図9は、第1実施形態の重み係数の選択範囲の一例を示す説明図である。図9に示す例では、図8で説明した重み係数の選択範囲と異なり、重み係数の基準値(1<<LWD)が、選択範囲の略中心に位置するように配置され、重み係数の基準値から128を減算した値(−128+(1<<LWD))が選択範囲の最小値となり、重み係数の基準値に127を加算した値(127+(1<<LWD))が選択範囲の最大値となっている。
インデックス設定部108は、数式(10)及び数式(11)を用いて、重み係数の選択範囲を設定する。なお、数式(10)で選択範囲の最小値が定式化され、数式(11)で選択範囲の最大値が定式化される。
min_wXC=−128+(1<<LWD) …(10)
max_wXC=127+(1<<LWD) …(11)
図10A及び図10Bは、第1実施形態の重み係数の選択範囲の具体例を示す説明図であり、図10Aは、固定小数点精度LWDの値が7の場合の重み係数の選択範囲を示し、図10Bは、固定小数点精度LWDの値が5の場合の重み係数の選択範囲を示している。図10Aに示す例では、重み係数の基準値である128が選択範囲の略中心に位置するように配置され、選択範囲の最小値が0となり、選択範囲の最大値が255となっている。図10Bに示す例では、重み係数の基準値である32が選択範囲の略中心に位置するように配置され、選択範囲の最小値が−96となり、選択範囲の最大値が159となっている。
図11は、H.264における重み係数の選択範囲の最小値及び最大値を示す参考図であり、図12は、第1実施形態の重み係数の選択範囲の最小値及び最大値の一例を示す説明図である。図11に示すように、H.264では、重み係数の選択範囲の最小値及び最大値は、重み係数の基準値に依存せず、一定である。一方、図12に示すように、第1実施形態では、重み係数の選択範囲の最小値及び最大値は、重み係数の基準値に依存して変動している。
図12に示すように、重み係数の基準値を略中心として重み係数の選択範囲を設定した場合、重み係数の取りうる範囲は、−127から255となり、符号付き9ビットの精度が必要となる。このため、第1実施形態では、後述の符号化部110が、インデックスとして設定された重み係数、即ち、符号化対象の値を、重み係数と重み係数の基準値との差分値に更新する。図9に示すように、導出した重み係数の選択範囲から重み係数の基準値を減算すると、重み係数の差分値の範囲が−128から127までの符号付き8ビットの値を取ることが分かる。つまり、重み係数の基準値を略中心として重み係数の選択範囲を設定した場合、重み係数の選択範囲は重み係数の基準値に依存して変動するが、重み係数の選択範囲から重み係数の基準値を減算することにより、重み係数の差分値の範囲は、重み係数の基準値に依存せず、一定となる。このように第1実施形態では、重み係数を重み係数の差分値に置き換えるので、重み係数の選択範囲を拡張し、かつ符号付き8ビット精度の選択範囲を規定することができる。
なお、インデックス設定部108は、重み係数が導出した重み係数の選択範囲内に含まれていないことを確認した場合、重み係数の選択範囲の最大値又は最小値を用いてクリップ処理を行ってもよい。この場合、インデックス設定部108は、重み係数が選択範囲の最小値より小さければ当該最小値でクリップし、重み係数が選択範囲の最大値よりも大きければ当該最大値でクリップすればよい。このようなクリップ処理を導入することで、特定の範囲制約を設けなくても、重み係数の差分値などの符号化対象の値は、予め定められたビット精度内の値を取るため、ハードウェアが用いる回路規模の構成を明確化できる。
また第1実施形態では、重み係数の選択範囲が符号付き8ビットの精度である場合を想定しているが、重み係数の選択範囲の精度はこれに限定されるものではなく、例えば、符号付き9ビットの精度としてもよい。この場合、重み係数の選択範囲は、−256から255までとなるが、数式(10)の−128を−256に置き換え、数式(11)の127を255に置き換えればよい。
また第1実施形態では、重み係数の選択範囲の導出をインデックス設定部108が行う例について説明したが、これに限定されず、符号化部110で行うようにしてもよい。つまり、インデックス設定部108を導出部としてもよいし、符号化部110を導出部としてもよい。
図13A及び図13Bは、第1実施形態のインデックス設定部108に入力されるWPパラメータ情報の一例を示す図である。P−slice時のWPパラメータ情報の一例は、図13Aに示すとおりであり、B−slice時のWPパラメータ情報の一例は、図13A及び図13Bに示すとおりである。リスト番号は、予測方向を示す識別子であり、単方向予測時は0の値を取り、双方向予測時は2種類の予測を用いることができるため、0と1の2つの値を取る。参照番号は、フレームメモリ206に示される1〜Nに対応する値である。WPパラメータ情報は、参照リストと参照画像毎に保持されるため、B−slice時で必要な情報は、参照画像がN個とすると2N個となる。
図14は、第1実施形態の重み係数の選択範囲の導出処理の一例を示すフローチャートである。ここでは、インデックス設定部108が重み係数の選択範囲の導出処理を行う場合を想定して説明するが、前述したように、符号化部110が行ってもよい。
まず、インデックス設定部108は、重み係数の固定小数点精度LWDを導出する(ステップS02)。ここで、インデックス設定部108は、重み係数の固定小数点精度LWDをWPパラメータ情報から導出してもよいし、インデックス情報から導出してもよい。
続いて、インデックス設定部108は、導出した固定小数点精度LWDを用いて、重み係数の基準値(1<<LWD)を導出する(ステップS03)。
続いて、インデックス設定部108は、導出した重み係数の基準値(1<<LWD)から128を減算し、重み係数の選択範囲の最小値を導出する(ステップS04)。
続いて、インデックス設定部108は、導出した重み係数の基準値(1<<LWD)に127を加算し、重み係数の選択範囲の最大値を導出する(ステップS05)。
そしてインデックス設定部108は、導出した重み係数の選択範囲内に重み係数が含まれていることを確認する。
図1に戻り、符号化部110は、量子化部103から入力された量子化変換係数、動き評価部109から入力された動き情報、インデックス設定部108から入力されたインデックス情報及び重み係数の選択範囲、並びに符号化制御部111によって指定される量子化情報などの様々な符号化パラメータに対して符号化処理を行い、符号化データを生成する。符号化処理は、例えば、ハフマン符号化や算術符号化などが該当する。
符号化パラメータとは、予測方法などを示す予測情報、量子化変換係数に関する情報、及び量子化に関する情報などの復号に必要となるパラメータである。例えば、符号化制御部111が図示せぬ内部メモリを持ち、この内部メモリに符号化パラメータが保持され、画素ブロックを符号化する際に隣接する既に符号化済みの画素ブロックの符号化パラメータを用いるようにできる。例えば、H.264のイントラ予測では、符号化済みの隣接ブロックの予測情報から、画素ブロックの予測情報を導出することができる。
符号化部110は、生成した符号化データを、符号化制御部111が管理する適切な出力タイミングに従って出力する。出力された符号化データは、例えば、図示せぬ多重化部などで様々な情報が多重化されて、図示せぬ出力バッファなどに一時的に蓄積された後に、例えば、図示せぬ蓄積系(蓄積メディア)又は伝送系(通信回線)へ出力される。
符号化部110は、エントロピー符号化部110Aと、インデックス再構成部110Bとを、備える。
エントロピー符号化部110Aは、入力されてきた情報に対して可変長符号化や算術符号化などの符号化処理を行う。例えば、H.264では、コンテキスト適応型の可変長符号化(CAVLC:Context based Adaptive Variable Length Coding)やコンテキスト適応型の算術符号化(CABAC:Context based Adaptive Binary Arithmetic Coding)などが用いられる。
インデックス再構成部110Bは、インデックス設定部108から入力されたインデックス情報のシンタクス要素の符号長を削減するため、シンタクス要素のパラメータの特徴に応じて予測処理を行い、シンタクス要素のそのままの値(直値)と予測値の差分値とを計算し、エントロピー符号化部110Aに出力する。予測処理の具体例は、後述する。なお、重み係数の選択範囲の導出を符号化部110で行う場合、インデックス再構成部110Bで行うことになる。
図15は、第1実施形態の符号化装置100が利用するシンタクス500の一例を示す図である。シンタクス500は、符号化装置100が入力画像(動画像データ)を符号化して生成した符号化データの構造を示している。符号化データを復号する場合、後述の復号装置は、シンタクス500と同一のシンタクス構造を参照して動画像データのシンタクス解釈を行う。
シンタクス500は、ハイレベルシンタクス501、スライスレベルシンタクス502及びコーディングツリーレベルシンタクス503の3つのパートを含む。ハイレベルシンタクス501は、スライスよりも上位のレイヤのシンタクス情報を含む。シンタクス情報は、例えば、図2Bに示す例で説明したタイル状の分割情報を含む。スライスとは、フレーム若しくはフィールドに含まれる矩形領域又は連続領域を指す。スライスレベルシンタクス502は、各スライスを復号するために必要な情報を含む。コーディングツリーレベルシンタクス503は、各コーディングツリー(即ち、各コーディングツリーブロック)を復号するために必要な情報を含む。これら各パートは、更に詳細なシンタクスを含む。
ハイレベルシンタクス501は、シーケンスパラメータセットシンタクス504、ピクチャパラメータセットシンタクス505、及びアダプテーションパラメータセットシンタクス506などのシーケンス及びピクチャレベルのシンタクスを含む。
スライスレベルシンタクス502は、スライスヘッダーシンタクス507、プレッドウェイトテーブルシンタクス508、及びスライスデータシンタクス509などを含む。プレッドウェイトテーブルシンタクス508は、スライスヘッダーシンタクス507から呼び出される。
コーディングツリーレベルシンタクス503は、コーディングツリーユニットシンタクス510、トランスフォームユニットシンタクス511、及びプレディクションユニットシンタクス512などを含む。コーディングツリーユニットシンタクス510は、四分木構造を持つことができる。具体的には、コーディングツリーユニットシンタクス510のシンタクス要素として、更にコーディングツリーユニットシンタクス510を再帰呼び出しすることができる。即ち、1つのコーディングツリーブロックを四分木で細分化することができる。また、コーディングツリーユニットシンタクス510内にはトランスフォームユニットシンタクス511が含まれている。トランスフォームユニットシンタクス511は、四分木の最末端の各コーディングツリーユニットシンタクス510において呼び出される。トランスフォームユニットシンタクス511は、逆直交変換及び量子化などに関わる情報が記述されている。これらのシンタクスには、重み付き動き補償予測に関する情報が記述されてもよい。
図16は、第1実施形態のピクチャパラメータセットシンタクス505の一例を示す図である。weighted_pred_flagは、例えば、P−sliceに関する第1実施形態の重み付き補償予測の有効又は無効を示すシンタクス要素である。weighted_pred_flagが0である場合、P−slice内での第1実施形態の重み付き動き補償予測は無効となる。従って、WPパラメータ情報に含まれるWP適用フラグは常に0に設定され、WPセレクタ304、305は、各々の出力端をデフォルト動き補償部301へ接続する。一方、weighted_pred_flagが1である場合、P−slice内での第1実施形態の重み付き動き補償予測は有効となる。
なお、別の例として、weighted_pred_flagが1である場合には、より下位のレイヤ(スライスヘッダー、コーディングツリーブロック、トランスフォームユニット、及びプレディクションユニットなど)のシンタクスにおいて、スライス内部の局所領域毎に第1実施形態の重み付き動き補償予測の有効又は無効を規定するようにしてもよい。
weighted_bipred_idcは、例えば、B−sliceに関する第1実施形態の重み付き補償予測の有効又は無効を示すシンタクス要素である。weighted_bipred_idcが0である場合、B−slice内での第1実施形態の重み付き動き補償予測は無効となる。従って、WPパラメータ情報に含まれるWP適用フラグは常に0に設定され、WPセレクタ304、305は、各々の出力端をデフォルト動き補償部301へ接続する。一方、weighted_bipred_idcが1である場合、B−slice内での第1実施形態の重み付き動き補償予測は有効となる。
なお、別の例として、weighted_bipred_idcが1である場合には、より下位のレイヤ(スライスヘッダー、コーディングツリーブロック、及びトランスフォームユニットなど)のシンタクスにおいて、スライス内部の局所領域毎に第1実施形態の重み付き動き補償予測の有効又は無効を規定するようにしてもよい。
図17は、第1実施形態のスライスヘッダーシンタクス507の一例を示す図である。slice_typeはスライスのスライスタイプ(I−slice,P−slice,B−sliceなど)を示している。pic_parameter_set_idは、いずれのピクチャパラメータセットシンタクス505を参照するかを示す識別子である。num_ref_idx_active_override_flagは、有効な参照画像の数を更新するかどうかを示すフラグであり、本フラグが1の場合、参照リストの参照画像数を定義するnum_ref_idx_l0_active_minus1及びnum_ref_idx_l1_active_minus1が利用できる。pred_weight_table()は、重み付き動き補償予測に利用するプレッドウェイトテーブルシンタクスを示す関数であり、前述のweighted_pred_flagが1かつP−sliceの場合、及びweighted_bipred_idcが1かつB−sliceの場合に、本関数が呼び出される。
図18は、第1実施形態のプレッドウェイトテーブルシンタクス508の一例を示す図である。luma_log2_weight_denomは、スライスにおける輝度信号の重み係数の固定小数点精度(LWD)を表しており、数式(7)又は数式(9)のLWDに対応する値である。delta_chroma_log2_weight_denomは、スライスにおける色差信号の重み係数の固定小数点精度を表しており、導出方法は後述する。chroma_format_idcは、色空間を表す識別子であり、MONO_IDXはモノクロ映像を示す値である。num_ref_common_active_minus1は、スライスにおける共通リストに含まれる参照画像の数から1を引いた値を示している。
luma_weight_l0_flag及びluma_weight_l1_flagは、リスト0及びリスト1のそれぞれに対応する輝度信号におけるWP適応フラグを示している。本フラグが1の場合、スライス内全域で第1実施形態の輝度信号の重み付き動き補償予測が有効となる。chroma_weight_l0_flag及びchroma_weight_l1_flagは、リスト0及びリスト1のそれぞれに対応する色差信号におけるWP適応フラグを示している。本フラグが1の場合、スライス内全域で第1実施形態の色差信号の重み付き動き補償予測が有効となる。luma_weight_l0[i]及びluma_weight_l1[i]は、リスト0及びリスト1のそれぞれで管理された参照番号i番目に対応する輝度信号の重み係数である。luma_offset_l0[i]及びluma_offset_l1[i]は、リスト0及びリスト1のそれぞれで管理された参照番号i番目に対応する輝度信号のオフセットである。これらは、それぞれ、数式(7)又は数式(9)のw0C、w1C、o0C、o1Cに対応する値である。但し、C=Yとする。
chroma_weight_l0[i][j]及びchroma_weight_l1[i][j]は、リスト0及びリスト1のそれぞれで管理された参照番号i番目に対応する色差信号の重み係数である。chroma_offset_l0[i][j]及びchroma_offset_l1[i][j]は、リスト0及びリスト1のそれぞれで管理された参照番号i番目に対応する色差信号のオフセットである。これらは、それぞれ、数式(7)又は数式(9)のw0C、w1C、o0C、o1Cに対応する値である。但し、C=Cr又はCbとする。jは色差成分のコンポーネントを示しており、例えばYUV4:2:0信号の場合、j=0がCr成分、j=1がCb成分であることを示す。なお、本表記はj=0がCb成分、j=1がCr成分として用いてもよい。
ここで、シンタクス構成における重み付き予測に関連するそれぞれのシンタクス要素の予測方法の詳細について説明する。シンタクス要素の予測は、インデックス再構成部110Bにより行われる。図18に示す例では、予測を導入したシンタクス要素をdeltaの接頭語を付けて示している。
まず、重み係数の固定小数点精度を示すluma_log2_weight_denom及びchroma_log2_weight_denomの信号間の予測方法について説明する。インデックス再構成部110Bは、数式(12)を用いて、luma_log2_weight_denom及びchroma_log2_weight_denomの信号間の予測処理を行い、数式(13)を用いて、復元処理を行う。ここでは、図18に示すとおり、luma_log2_weight_denomが先に定義されているため、luma_log2_weight_denomの値からchroma_log2_weight_denomを予測する。
delta_chroma_log2_weight_denom = (chroma_log2_weight_denom - luma_log2_weight_denom) …(12)
chroma_log2_weight_denom = (luma_log2_weight_denom + delta_chroma_log2_weight_denom) …(13)
フェード効果は、一般的に色空間別に異なる時間的変化をさせるケースが少ないため、信号成分毎の固定小数点精度は、輝度成分と色差成分で強い相関がある。このため、このように色空間内で予測することにより、固定小数点精度を示す情報量を削減できる。
なお、数式(12)では、色差成分から輝度成分を減算しているが、輝度成分から色差成分を減算してもよい。この場合、数式(12)に応じて数式(13)も式を変形すればよい。
次に、輝度及び色差信号の重み係数をそれぞれ表すluma_weight_lx[i]及びchroma_weight_lx[i][j]の予測方法について説明する。ここで、xは、0又は1を示す識別子である。luma_weight_lx[i]及びchroma_weight_lx[i][j]の値は、それぞれ、luma_log2_weight_denom及びchroma_log2_weight_denomの値に応じて変化する。例えば、luma_log2_weight_denomの値が3である場合、画素値変化がない場合のluma_weight_lx[i]は、(1<<3)となる。一方、luma_log2_weight_denomの値が5である場合、明度変化がないと仮定した場合のluma_weight_lx[i]は、(1<<5)となる。
このため、インデックス再構成部110Bは、画素値変化がない場合の重み係数を基準係数(デフォルト値)として予測処理を行う。具体的には、インデックス再構成部110Bは、数式(14)〜(15)を用いてluma_weight_lx[i]の予測処理を行い、数式(16)を用いて、復元処理を行う。同様に、インデックス再構成部110Bは、数式(17)〜(18)を用いてchroma_weight_lx[i]の予測処理を行い、数式(19)を用いて、復元処理を行う。
delta_luma_weight_lx[i] = (luma_weight_lx[i] - default_luma_weight_lx) …(14)
default_luma_weight_lx = (1<<luma_log2_weight_denom) …(15)
luma_weight_lx[i] = (default_luma_weight_lx + delta_luma_weight_lx[i]) …(16)
delta_chroma_weight_lx[i][j] = (chroma_weight_lx[i][j] - default_chroma_weight_lx) …(17)
default_chroma_weight_lx = (1<<chroma_log2_weight_denom) …(18)
chroma_weight_lx[i][j] = (default_chroma_weight_lx + delta_chroma_weight_lx[i][j]) …(19)
ここで、default_luma_weight_lx、default_chroma_weight_lxは、それぞれ、輝度成分、色差成分における画素値変化がない基準値(デフォルト値)である。
フェード効果を含む画像は、ある特定のフェード変化点でフェードを行い、それ以外の画像は通常の自然画像又はフェード効果のない画像であることが多い。この場合、重み係数は画素値変化がない場合を取ることが多くなる。そこで、画素値変化がない場合の初期値を、固定小数点精度から導出し、予測値として用いることで重み係数の符号量を削減できる。
次に、色差信号のオフセットを表すchroma_offset_lx[i][j]の予測方法について説明する。YUVの色空間では、色差成分は、中央値からのズレ量で色を表現する。このため、重み係数を用いて中央値を考慮した画素値変化からの変化量を予測値とすることができる。具体的には、インデックス再構成部110Bは、数式(20)〜(21)を用いてchroma_offset_lx[i][j]の予測処理を行い、数式(22)を用いて、復元処理を行う。
delta_chroma_offset_lx[i][j] = (chroma_offset_lx[i][j] + ( ( MED * chroma_weight_lx[i][j])>> chroma_log2_weight_denom) - MED ) …(20)
MED = (MaxChromaValue>>1) …(21)
ここで、MaxChromaValueは色差信号が取れる最大画素値を示している。例えば、8ビットの信号である場合、MaxChromaValueは255であり、MEDは128となる。
chroma_offset_lx[i][j] = (delta_chroma_offset_lx[i][j] - ( ( MED * chroma_weight_lx[i][j])>> chroma_log2_weight_denom) + MED ) …(22)
色差信号の信号特性を利用して、中央値からのズレ量を考慮した予測値を導入することにより、オフセット値をそのまま符号化する場合と比較して、色差信号のオフセット値の符号量を削減できる。
図19は、第1実施形態のシンタクス要素の値の関係の一例を示す説明図であり、luma_log2_weight_denom、default_luma_weight_lx、luma_weight_lx[i]、及びdelta_luma_weight_lx[i]の値の関係を示している。図19に示すように、エントロピー符号化部110Aによって符号化されるシンタクス要素であるdelta_luma_weight_lx[i]、即ち、重み係数の差分値の取りうる範囲は、−128から127の範囲に固定されており、符号付き8ビット精度となっている。
以上のように第1実施形態では、画素値変化が0となる重み係数の基準点を略中心として負の方向と正の方向に値を割り振ることにより重み係数の選択範囲を導出し、導出した重み係数の選択範囲内に重み係数が含まれていることを確認する。このため第1実施形態によれば、H.264等と比較して、重み係数の選択範囲を拡張し、選択頻度の高い正側の値を取りやすくすることができる。また第1実施形態によれば、符号化対象の重み係数の差分値が−128から127までの符号付き8ビットの値を固定値として取るため、重み係数の選択範囲を拡張しつつ、符号付き8ビット精度の選択範囲を規定することができる。
このように第1実施形態では、符号化するシンタクス(重み係数の差分値)の範囲を固定値にできるため、エンコーダがこれらの範囲を動的に変更するような構成と比較して、仕様を簡略化できる。例えば、符号化するシンタクスを重み係数とし、重み係数の選択範囲が重み係数の基準値に応じて変動する場合、重み係数の基準値と重み係数の選択範囲の最小値及び最大値を対応付けたテーブルを用意して重み係数の選択範囲の導出後に都度参照するような構成や、重み係数の選択範囲を都度計算して導出するような構成が必要となる。このような場合、テーブルをメモリにロードして都度参照するという構成や、重み係数の選択範囲を都度計算するための演算回路が必要になり、ハードウェア規模が増大する。これに対し、第1実施形態では、符号化するシンタクス(重み係数の差分値)の範囲を固定値にできるため、上述したようなハードウェア構成などの制約を受けず、ハードウェア規模を削減することができる。
更に第1実施形態では、範囲が符号付き8ビット精度に固定された重み係数の差分値を符号化することになるが、重み係数の差分値は範囲の中心付近(0付近)の値を取るため、符号化時の符号長を短くすることができ、符号化効率を向上できる。H.264などでは、重み係数を符号付き指数ゴロム符号(se(v))で符号化するが、この符号は、符号化する値が0を基準として指数的に増加するシンボルに対して有効な符号であるため、一番利用頻度が高い基準値を範囲の中心にすることが一般的である。第1実施形態では、一般的な動画像でピクチャ間の画素値変化が0となる場合を重み係数の基準値とし、かつ重み係数の選択範囲の予測においても上記基準値からの予測を導入している。これにより、指数ゴロム符号と予測及び重み係数の選択範囲が一致するため、符号量削減効果が高いとともに、基準値を中心に係数範囲を決めているため、大きな値を取る場合でも正の値と負の値の基準値からの距離が同程度になり、従来手法と比較して短い符号長で符号化できる効果を奏する。
なお、第1実施形態の図16〜図18に例示するシンタクステーブルの行間には、本実施形態において規定していないシンタクス要素が挿入されてもよいし、その他の条件分岐に関する記述が含まれていてもよい。また、シンタクステーブルを複数のテーブルに分割したり、複数のシンタクステーブルを統合したりしてもよい。また、例示した各シンタクス要素の用語は、任意に変更可能である。
(第2実施形態)
第2実施形態では、第1実施形態の符号化装置で符号化された符号化データを復号する復号装置について説明する。なお第2実施形態においても、第1実施形態同様、画素値変化が無い場合、即ち、重み係数の値を実数値で表現すると1.0となる場合を想定して、説明を行う。
図20は、第2実施形態の復号装置800の構成の一例を示すブロック図である。
復号装置800は、図示せぬ入力バッファなどに蓄積された符号化データを復号画像に復号し、出力画像として図示せぬ出力バッファに出力する。符号化データは、例えば、図1の符号化装置100などから出力され、図示せぬ蓄積系、伝送系、又はバッファなどを経て、復号装置800に入力される。
復号装置800は、図20に示すように、復号部801と、逆量子化部802と、逆直交変換部803と、加算部804と、予測画像生成部805と、インデックス設定部806とを、備える。逆量子化部802、逆直交変換部803、加算部804、予測画像生成部805は、それぞれ、図1の逆量子化部104、逆直交変換部105、加算部106、予測画像生成部107、と実質的に同一又は類似の要素である。なお、図20に示す復号制御部807は、復号装置800を制御するものであり、例えば、CPUなどにより実現できる。
復号部801は、符号化データの復号のために、1フレーム又は1フィールド毎にシンタクスに基づいて解読を行う。復号部801は、エントロピー復号部801Aと、インデックス再構成部801Bとを、備える。
エントロピー復号部801Aは、各シンタクスの符号列を順次エントロピー復号し、予測モード、動きベクトル、及び参照番号などを含む動き情報、重み付き動き補償予測のためのインデックス情報、並びに量子化変換係数などの符号化対象ブロックの符号化パラメータを再生する。なお、エントロピー復号は、パース処理などとも称される。ここで、符号化パラメータとは、上記以外にも変換係数に関する情報、量子化に関する情報、などの復号に必要となるすべてのパラメータである。
具体的には、エントロピー復号部801Aは、入力されてきた符号化データに対して可変長復号処理や算術復号処理などの復号処理を行う機能を有する。例えば、H.264ではコンテキスト適応型の可変長符号化(CAVLC:Context based Adaptive Variable Length Coding)やコンテキスト適応型の算術符号化(CABAC:Context based Adaptive Binary Arithmetic Coding)などが用いられ、入力されてきた符号化データを意味のあるシンタクス要素に復号している。これらの処理は解読処理とも呼ばれる。
インデックス再構成部801Bは、解読されたインデックス情報を復元し、インデックス情報を再構成する。具体的には、インデックス再構成部801Bは、解読されたインデックス情報のシンタクス要素の符号長を削減するために、シンタクス要素のパラメータの特徴に応じて予測処理を行い、シンタクス要素を復元し、インデックス情報を再構成する。予測処理の具体例は、後述する。
復号部801は、動き情報、インデックス情報、及び量子化変換係数を出力し、量子化変換係数を逆量子化部802に入力し、インデックス情報をインデックス設定部806に入力し、動き情報を予測画像生成部805に入力する。
逆量子化部802は、復号部801から入力された量子化変換係数に対して逆量子化処理を行い、復元変換係数を得る。具体的には、逆量子化部802は、復号部801において使用された量子化情報に従って逆量子化を行う。より詳細には、逆量子化部802は、量子化情報によって導出された量子化ステップサイズを量子化変換係数に乗算し、復元変換係数を得る。逆量子化部802は、復元変換係数を出力し、逆直交変換部803に入力する。
逆直交変換部803は、逆量子化部802から入力された復元変換係数に対して、符号化側において行われた直交変換に対応する逆直交変換を行い、復元予測誤差を得る。逆直交変換部803は、復元予測誤差を出力し、加算部804に入力する。
加算部804は、逆直交変換部803から入力された復元予測誤差と、対応する予測画像とを加算し、復号画像を生成する。加算部804は、復号画像を出力し、予測画像生成部805に入力する。また加算部804は、復号画像を出力画像として外部に出力する。出力画像は、その後図示せぬ外部の出力バッファなどに一時的に蓄積され、例えば、復号制御部807によって管理される出力タイミングに従って、図示せぬディスプレイやモニタなどの表示装置系又は映像デバイス系へ出力される。
インデックス設定部806は、復号部801から入力されたインデックス情報を受け取り、WPパラメータ情報に変換して出力し、予測画像生成部805に入力する。具体的には、インデックス設定部806は、エントロピー復号部801Aで復号処理され、インデックス再構成部801Bで再構成されたインデックス情報を受け取る。そしてインデックス設定部806は、参照画像のリストと参照番号を確認して、WPパラメータ情報に変換し、変換したWPパラメータ情報を予測画像生成部805へ出力する。インデックス設定部806は、インデックス情報をWPパラメータ情報に変換する際に、重み係数の選択範囲を導出し、重み係数が当該選択範囲に含まれていることを確認する。なお、重み係数の選択範囲の導出については、第1実施形態と同様であるため、詳細な説明は省略する。また、重み係数の選択範囲の導出をインデックス設定部806ではなく、インデックス再構成部801Bで行うようにしてもよい。つまり、インデックス設定部806を導出部としてもよいし、インデックス再構成部801B(復号部801)を導出部としてもよい。
また、WPパラメータ情報は、第1実施形態同様、第一WP適用フラグ、第二WP適応フラグ及び重み情報の情報を含む。また、重み情報は、第1実施形態同様、第一重み係数の値w0C、第二重み係数の値w1C、第一重み係数及び第二重み係数の固定小数点精度LWD、第一オフセットo0C、及び第二オフセットo1Cの情報を含む。
予測画像生成部805は、復号部801から入力された動き情報、インデックス設定部806から入力されたWPパラメータ情報、及び加算部804から入力された復号画像を用いて、予測画像を生成する。
ここで、図4を参照しながら、予測画像生成部805の詳細について説明する。予測画像生成部805は、予測画像生成部107同様、複数フレーム動き補償部201と、メモリ202と、単方向動き補償部203と、予測パラメータ制御部204と、参照画像セレクタ205と、フレームメモリ206と、参照画像制御部207と、を備える。
フレームメモリ206は、参照画像制御部207の制御の下、加算部106から入力された復号画像を参照画像として格納する。フレームメモリ206は、参照画像を一時保持するための複数のメモリセットFM1〜FMN(N≧1)を有する。
予測パラメータ制御部204は、復号部801から入力される動き情報に基づいて、参照画像番号と予測パラメータとの複数の組み合わせをテーブルとして用意している。ここで、動き情報とは、動き補償予測で用いられる動きのズレ量を示す動きベクトルや参照画像番号、単方向/双方向予測などの予測モードに関する情報などを指す。予測パラメータは、動きベクトル及び予測モードに関する情報を指す。そして予測パラメータ制御部204は、動き情報に基づいて、予測画像の生成に用いる参照画像番号と予測パラメータとの組み合わせを選択して出力し、参照画像番号を参照画像セレクタ205に入力し、予測パラメータを単方向動き補償部203に入力する。
参照画像セレクタ205は、フレームメモリ206が有するフレームメモリFM1〜FMNのいずれの出力端を接続するかを、予測パラメータ制御部204から入力された参照画像番号に従って切り替えるスイッチである。参照画像セレクタ205は、例えば、参照画像番号が0であれば、FM1の出力端を参照画像セレクタ205の出力端に接続し、参照画像番号がN−1であれば、FMNの出力端を参照画像セレクタ205の出力端に接続する。参照画像セレクタ205は、フレームメモリ206が有するフレームメモリFM1〜FMNのうち、出力端が接続されているフレームメモリに格納されている参照画像を出力し、単方向動き補償部203へ入力する。なお、復号装置800では、予測画像生成部805以外で参照画像は利用されないため、予測画像生成部805の外部へ参照画像を出力しなくてもよい。
単方向動き補償部203は、予測パラメータ制御部204から入力された予測パラメータと参照画像セレクタ205から入力された参照画像に従って、動き補償予測処理を行い、単方向予測画像を生成する。動き補償予測については、図5を参照して既に説明しているため、説明を省略する。
単方向動き補償部203は、単方向予測画像を出力し、メモリ202に一時的に格納する。ここで、動き情報(予測パラメータ)が双方向予測を示す場合には、複数フレーム動き補償部201が2種類の単方向予測画像を用いて重み付き予測を行うため、単方向動き補償部203は、1つ目に対応する単方向予測画像をメモリ202に格納し、2つ目に対応する単方向予測画像を複数フレーム動き補償部201に直接出力する。ここでは、1つ目に対応する単方向予測画像を第一予測画像とし、2つ目に対応する単方向予測画像を第二予測画像とする。
なお、単方向動き補償部203を2つ用意し、それぞれが2つの単方向予測画像を生成するようにしてもよい。この場合、動き情報(予測パラメータ)が単方向予測を示すときには、単方向動き補償部203が、1つ目の単方向予測画像を第一予測画像として複数フレーム動き補償部201に直接出力すればよい。
複数フレーム動き補償部201は、メモリ202から入力される第一予測画像、単方向動き補償部203から入力される第二予測画像、及び動き評価部109から入力されるWPパラメータ情報を用いて、重み付き予測を行って予測画像を生成する。複数フレーム動き補償部201は、予測画像を出力し、加算部804に入力する。
ここで、図6を参照しながら、複数フレーム動き補償部201の詳細について説明する。複数フレーム動き補償部201は、予測画像生成部107同様、デフォルト動き補償部301と、重み付き動き補償部302と、WPパラメータ制御部303と、WPセレクタ304、305とを、備える。
WPパラメータ制御部303は、インデックス設定部806から入力されるWPパラメータ情報に基づいて、WP適用フラグ及び重み情報を出力し、WP適用フラグをWPセレクタ304、305に入力し、重み情報を重み付き動き補償部302に入力する。
詳細には、WPパラメータ制御部303は、インデックス設定部806からWPパラメータ情報が入力されると、WPパラメータ情報を第一WP適用フラグ、第二WP適用フラグ、及び重み情報に分離して出力し、第一WP適用フラグをWPセレクタ304に入力し、第二WP適用フラグをWPセレクタ305に入力し、重み情報を重み付き動き補償部302に入力する。
なお、WPパラメータ制御部303は、WPパラメータ情報が入力されると、重み情報の値が規定の範囲内に収まっているかどうかチェックする。例えば、w0Cが実数値で表現した場合に3.0、LWDが7の場合、第一重み係数は384となる。ここで、384は、第一重み係数の範囲外であり、使用できないとする。この場合、WPパラメータ制御部303は、規格違反のデータであるため、規格違反であることを示す情報を復号制御部807に通知し、復号処理をやめてもよい。また、WPパラメータ制御部303は、第一重み係数の範囲内にクリップ処理を行い、復号処理を進めてもよい。また、WPパラメータ制御部303は、第一WP適用フラグの値を1から0に変更し、デフォルト動き補償予測を行ってもよい。
WPセレクタ304、305は、WPパラメータ制御部303から入力されたWP適用フラグに基づいて、各々の予測画像の接続端を切り替える。WPセレクタ304、305は、各々のWP適用フラグが0の場合、各々の出力端をデフォルト動き補償部301へ接続する。そしてWPセレクタ304、305は、第一予測画像及び第二予測画像を出力し、デフォルト動き補償部301に入力する。一方、WPセレクタ304、305は、各々のWP適用フラグが1の場合、各々の出力端を重み付き動き補償部302へ接続する。そしてWPセレクタ304、305は、第一予測画像及び第二予測画像を出力し、重み付き動き補償部302に入力する。
デフォルト動き補償部301は、WPセレクタ304、305から入力された2つの単方向予測画像(第一予測画像及び第二予測画像)を元に平均値処理を行い、予測画像を生成する。具体的には、デフォルト動き補償部301は、第一WP適用フラグ及び第二WP適用フラグが0の場合、数式(1)に基づいて平均値処理を行う。
なお、動き情報(予測パラメータ)で示される予測モードが単方向予測である場合、デフォルト動き補償部301は、第一予測画像のみを用いて、数式(4)に基づいて最終的な予測画像を算出する。
重み付き動き補償部302は、WPセレクタ304、305から入力された2つの単方向予測画像(第一予測画像及び第二予測画像)とWPパラメータ制御部303から入力された重み情報とを元に重み付き動き補償を行う。具体的には、重み付き動き補償部302は、第一WP適用フラグ及び第二WP適用フラグが1の場合、数式(7)に基づいて重み付き処理を行う。
なお、重み付き動き補償部302は、第一予測画像及び第二予測画像と予測画像との演算精度が異なる場合、固定小数点精度であるLWDを数式(8)のように制御することで丸め処理を実現する。
また、動き情報(予測パラメータ)で示される予測モードが単方向予測である場合、重み付き動き補償部302は、第一予測画像のみを用いて、数式(9)に基づいて最終的な予測画像を算出する。
なお、重み付き動き補償部302は、第一予測画像及び第二予測画像と予測画像との演算精度が異なる場合、固定小数点精度であるLWDを双方向予測時と同様に数式(8)のように制御することで丸め処理を実現する。
重み係数の固定小数点精度については、図7を参照して既に説明しているため、説明を省略する。なお、単方向予測の場合には、第二予測画像に対応する各種パラメータ(第二WP適応フラグ、第二重み係数、及び第二オフセットの情報)は利用されないため、予め定めた初期値に設定されていてもよい。
復号部801は、図15に示すシンタクス500を利用する。シンタクス500は、復号部801の復号対象の符号化データの構造を示している。シンタクス500については、図15を参照して既に説明しているため、説明を省略する。また、ピクチャパラメータセットシンタクス505については、符号化が復号である点を除き、図16を参照して既に説明しているため、説明を省略する。また、スライスヘッダーシンタクス507についても、符号化が復号である点を除き、図17を参照して既に説明しているため、説明を省略する。また、プレッドウェイトテーブルシンタクス508についても、符号化が復号である点を除き、図18を参照して既に説明しているため、説明を省略する。
ここで、シンタクス構成における重み付き予測に関連するそれぞれのシンタクス要素の予測方法の詳細について説明する。シンタクス要素の予測は、インデックス再構成部801Bにより行われる。第2実施形態の予測方法を明示的に示したシンタクス構成は、第1実施形態と同様である。
重み係数の固定小数点精度を示すluma_log2_weight_denom及びchroma_log2_weight_denomの信号間の予測方法については、数式(13)を用いて、復元処理が行われる。
輝度及び色差信号の重み係数を表すluma_weight_lx[i]及びchroma_weight_lx[i][j]の予測方法については、数式(16)及び(19)を用いて、復元処理が行われる。
なお、上記説明した複数の予測手法は、単独で使用するだけでなく組み合わせて利用することもできる。例えば、数式(13)、数式(15)、及び数式(19)等を組み合わせるなどとすることにより、インデックス情報におけるシンタクス要素の符号量を効率良く削減することが可能となる。
以上のように第2実施形態では、画素値変化が0となる重み係数の基準点を略中心として負の方向と正の方向に値を割り振ることにより重み係数の選択範囲を導出し、導出した重み係数の選択範囲内に重み係数が含まれていることを確認する。このため第2実施形態によれば、H.264等と比較して、重み係数の選択範囲を拡張し、選択頻度の高い正側の値を取りやすくすることができる。また第2実施形態によれば、復号対象の重み係数の差分値が−128から127までの符号付き8ビットの値を固定値として取るため、重み係数の選択範囲を拡張しつつ、符号付き8ビット精度の選択範囲を規定することができる。
このように第2実施形態では、復号するシンタクス(重み係数の差分値)の範囲を固定値にできるため、デコーダは復号処理した符号化データが予め定められた仕様の範囲内に収まっているかどうかを簡単にチェックすることができ仕様を簡略化できる。例えば、復号するシンタクスを重み係数とし、重み係数の選択範囲が重み係数の基準値に応じて変動する場合、重み係数の基準値と重み係数の選択範囲の最小値及び最大値を対応付けたテーブルを用意して重み係数の選択範囲の導出後に都度参照するような構成が必要となる。このような場合、テーブルをメモリにロードして都度参照するという構成が必要になり、ハードウェア規模が増大する。これに対し、第2実施形態では、復号するシンタクス(重み係数の差分値)の範囲を固定値にできるため、上述したようなハードウェア構成などの制約を受けず、ハードウェア規模を削減することができる。
更に第2実施形態では、範囲が符号付き8ビット精度に固定された重み係数の差分値を復号することになるが、重み係数の差分値は範囲の中心付近(0付近)の値を取るため、復号時の符号長を短くすることができ、復号効率を向上できる。H.264などでは、重み係数を符号付き指数ゴロム符号(se(v))で復号するが、この符号は、復号する値が0を基準として指数的に増加するシンボルに対して有効な符号であるため、一番利用頻度が高い基準値を範囲の中心にすることが一般的である。第2実施形態では、一般的な動画像でピクチャ間の画素値変化が0となる場合を重み係数の基準値とし、かつ重み係数の選択範囲の予測においても上記基準値からの予測を導入している。これにより、指数ゴロム符号と予測及び重み係数の選択範囲が一致するため、符号量削減効果が高いとともに、基準値を中心に係数範囲を決めているため、大きな値を取る場合でも正の値と負の値の基準値からの距離が同程度になり、従来手法と比較して短い符号長で復号できる効果を奏する。
(第1実施形態の変形例1)
第1実施形態では、符号化装置100での重み係数の選択範囲の導出について説明したが、変形例1では、符号化装置100でのオフセットの選択範囲の導出について説明する。
数式(20)〜数式(22)で説明したとおり、YUVの色空間では、色差成分は中央値からのズレ量で色を表現する。このため、重み係数を用いて中央値を考慮した画素値変化からの変化量を予測値とすることができる。この予測値は、重み係数の影響を排除した場合のオフセットの基準値を示している。つまり、インデックス設定部108は、予測値(オフセットの基準値)を略中心として値の取りうる範囲を割り振ることで、オフセットの選択範囲を導出でき、オフセットが導出したオフセットの選択範囲内に含まれていることを確認できる。
例えば、LWDが2、重み係数の値が5の場合、重み係数の基準値は(1<<2)、即ち、4となる。一方、重み係数の値が5であるため、画素値変化が生じる。色差信号は、中央値からのズレ量で色を表現するため、インデックス設定部108は、重み係数の影響を排除することで、オフセットの基準値を求める。オフセットの基準値は、数式(23)で定式化される。
Pred =( MED − ( ( MED * chroma_weight_lx[i][j])>> chroma_log2_weight_denom)) …(23)
Predは色差信号のオフセットの基準値を示し、MEDは色差信号の中央値(8ビット時に128)を示し、右側の項は重み係数の影響による中央値からのズレ量を意味している。なお、数式(23)は、数式(20)の右端の項の符号を反転した値に対応している。数式(23)に示すように、色差信号のオフセットの基準値は、色差信号の重み係数及び固定小数点精度に従って定まる。
なお、数式(23)は、数式(24)のように変形できる。
Pred =( ( 1 << ( BitDepth − 1 )) − ( ( chroma_weight_lx[i][j] ) << (BitDepth − 1 − chroma_log2_weight_denom)) …(24)
ここで、BitDepthは色差信号の画素深度を表しており、8ビット信号であればBitDepthは8である。数式(23)のMEDは、2のべき乗で表現される値であるため、右辺のシフト内をBitDepthを利用して書き換えると数式(24)のように表現することが可能となる。
図21は、変形例1の色差信号のオフセットの選択範囲の一例を示す説明図である。図21に示す例では、Predが、選択範囲の略中心に位置するように配置され、(Pred)-(1<<OR)が選択範囲の最小値となり、(Pred)+(1<<OR)-1が選択範囲の最大値となっている。ORは、オフセットのビット精度を意味し、例えば、H.264などでは、8となる。図21に示すように、色差信号のオフセットの選択範囲は、色差信号のオフセットの基準値を略中心として、所定のビット精度の中で定義される。また、詳細な説明は省略するが、符号化対象の色差信号のオフセットの差分値(色差信号のオフセットと色差信号のオフセットの基準値との差分値)は、オフセットのビット精度の固定値で定義できる。例えば、8ビット精度であれば、色差信号のオフセットの差分値は、−128から127の8ビット固定値となる。また、例えば9ビット精度であれば、色差信号のオフセットの差分値は、−256から255の9ビット固定値となる。
これにより、基準値を復元しないと符号化する値の範囲が決まらないような問題を解決できる。なお、変形例1では、色差信号のオフセットの選択範囲の導出をインデックス設定部108が行う例について説明したが、これに限定されず、符号化部110で行うようにしてもよい。
図22は、変形例1の色差信号のオフセットの選択範囲の導出処理の一例を示すフローチャートである。ここでは、インデックス設定部108が色差信号のオフセットの選択範囲の導出処理を行う場合を想定して説明するが、前述したように、符号化部110が行ってもよい。
まず、インデックス設定部108は、重み係数の固定小数点精度LWDを導出する(ステップS12)。ここで、インデックス設定部108は、重み係数の固定小数点精度LWDをWPパラメータ情報から導出してもよいし、インデックス情報から導出してもよい。
続いて、インデックス設定部108は、重み係数Wxcを導出する(S13)。ここで、インデックス設定部108は、重み係数WxcをWPパラメータ情報から導出してもよいし、インデックス情報から導出してもよい。
続いて、インデックス設定部108は、導出した重み係数の固定小数点精度LWD及び重み係数Wxcを用いて、色差信号のオフセットの基準値を数式(23)より導出する(ステップS14)。
続いて、インデックス設定部108は、導出した色差信号のオフセットの基準値から(1<<OR)を減算し、色差信号のオフセットの選択範囲の最小値を導出する(ステップS15)。
続いて、インデックス設定部108は、導出した色差信号のオフセットの基準値に(1<<OR)-1を加算し、色差信号のオフセットの選択範囲の最大値を導出する(ステップS16)。
そしてインデックス設定部108は、導出した色差信号のオフセットの選択範囲内に色差信号のオフセットが含まれていることを確認する。なお、インデックス設定部108は、色差信号のオフセットが色差信号のオフセットの選択範囲内に含まれていないことを確認した場合、色差信号のオフセットの選択範囲の最大値又は最小値を用いてクリップ処理を行ってもよい。この場合、インデックス設定部108は、色差信号のオフセットが選択範囲の最小値より小さければ当該最小値でクリップし、色差信号のオフセットが選択範囲の最大値よりも大きければ当該最大値でクリップすればよい。このようなクリップ処理を導入することで、特定の範囲制約を設けなくても、色差信号のオフセットの差分値などの符号化対象の値は、予め定められたビット精度内の値を取るため、ハードウェアが用いる回路規模の構成を明確化できる。
なお、図18で説明したとおり、重み係数の値と固定小数点精度の情報は、オフセットの情報よりも先に符号化されるため、オフセットの基準値を導出する際に重み係数の値を導出できる。
また、変形例1で説明した色差信号に対する第1オフセット及び第2オフセットの選択範囲を、第1実施形態で説明した第1重み係数及び第2重み係数の選択範囲と別々に適用してもよい。例えば、第1重み係数、第2重み係数の選択範囲は、H.264と同一とし、色差信号に対する第1オフセット及び第2オフセットの選択範囲は、変形例1のようにしてもよい。
変形例1によれば、符号化するシンタクス(オフセットの差分値)の範囲を固定値にできるため、エンコーダがこれらの範囲を動的に変更するような構成と比較して、仕様を簡略化できる。なお、復号するシンタクスをオフセットとし、オフセットの選択範囲がオフセットの基準値に応じて変動する場合、オフセットの基準値とオフセットの選択範囲の最小値及び最大値を対応付けたテーブルを用意して、オフセットの選択範囲を導出後に都度参照するような構成やオフセットの選択範囲を都度計算して導出するような構成が必要となる。このような場合、テーブルをメモリにロードして都度参照するという構成や計算するための演算回路が必要になりハードウェア規模が増大する。これに対し、変形例1のように符号化するシンタクス(オフセットの差分値)の範囲が固定であると、このようなハードウェア構成などの制約を受けないため、ハードウェア規模を削減できる。
(第2実施形態の変形例1)
第2実施形態では、復号装置800での重み係数の選択範囲の導出について説明したが、第2実施形態の変形例1では、復号装置800でのオフセットの選択範囲の導出について説明する。第2実施形態の変形例1では、インデックス設定部806が、予測値(オフセットの基準値)を略中心として値の取りうる範囲を割り振ることで、オフセットの選択範囲を導出でき、オフセットが導出したオフセットの選択範囲内に含まれていることを確認できる。なお、オフセットの選択範囲を導出については、第1実施形態の変形例1と同様であるため、詳細な説明は省略する。また、オフセットの選択範囲の導出をインデックス設定部806ではなく、インデックス再構成部801Bで行うようにしてもよい。
第2実施形態の変形例1によれば、符号化するシンタクス(オフセットの差分値)の範囲を固定値にできるため、デコーダがこれらの範囲を動的に変更するような構成と比較して、仕様を簡略化できる。なお、復号するシンタクスをオフセットとし、オフセットの選択範囲がオフセットの基準値に応じて変動する場合、オフセットの基準値とオフセットの選択範囲の最小値及び最大値を対応付けたテーブルを用意して、オフセットの選択範囲を導出後に都度参照するような構成やオフセットの選択範囲を都度計算して導出するような構成が必要となる。このような場合、テーブルをメモリにロードして都度参照するという構成や計算するための演算回路が必要になりハードウェア規模が増大する。これに対し、変形例1のように符号化するシンタクス(オフセットの差分値)の範囲が固定であると、このようなハードウェア構成などの制約を受けないため、ハードウェア規模を削減できる。
(第1実施形態の変形例2)
第1実施形態では、符号化装置100での重み係数の選択範囲の導出について説明したが、変形例2では、符号化装置100での重み係数の選択範囲の導出の際に、重み係数の選択範囲をシフトする例について説明する。
第1実施形態では、図9で説明したように、重み係数の選択範囲の略中心を、重み係数の基準値としていた。また、図7等で説明したように、画像間で平均的な画素値変化が無い場合、重み係数の値を実数値で表現すると1.0となり、重み係数が負となる範囲は単方向の重み付き予測では選択されない。これより、実運用上の重み係数の選択範囲は、基準値近辺の選択頻度が最も高く、負の範囲はあまり利用されないことが判る。このため、変形例2では、インデックス設定部108は、重み係数の選択範囲の導出の際に、重み係数の選択範囲を正側にシフトする。
図23は、変形例2の重み係数の選択範囲の一例を示す説明図である。図23に示す例では、図9で説明した重み係数の選択範囲と異なり、重み係数の基準値(1<<LWD)にシフト値SHFTを加算した新たな基準値((1<<LWD)+SHFT)が、選択範囲の略中心に位置するように配置され、この値から128を減算した値(−128+(1<<LWD)+SHFT)が選択範囲の最小値となり、この値に127を加算した値(127+(1<<LWD)+SHFT)が選択範囲の最大値となっている。この際、固定小数点精度LWDの値によって最大値が255よりも大きくなる場合が発生するが、インデックス設定部108は、最大値を255でクリップ処理してもよいし、固定小数点ごとに取りうるSHFTの値を変更してもよい。なお、変形例2では、重み係数の選択範囲の導出をインデックス設定部108が行う例について説明したが、これに限定されず、符号化部110で行うようにしてもよい。
図24は、変形例2の重み係数の選択範囲の導出処理の一例を示すフローチャートである。ここでは、インデックス設定部108が重み係数の選択範囲の導出処理を行う場合を想定して説明するが、前述したように、符号化部110が行ってもよい。
まず、インデックス設定部108は、重み係数の固定小数点精度LWDを導出する(ステップS22)。ここで、インデックス設定部108は、重み係数の固定小数点精度LWDをWPパラメータ情報から導出してもよいし、インデックス情報から導出してもよい。
続いて、インデックス設定部108は、導出した固定小数点精度LWD及びシフト値SHFTを用いて、重み係数の基準値((1<<LWD)+SHFT)を導出する(ステップS23)。
続いて、インデックス設定部108は、導出した重み係数の基準値((1<<LWD)+SHFT)から128を減算し、重み係数の選択範囲の最小値を導出する(ステップS24)。
続いて、インデックス設定部108は、導出した重み係数の基準値((1<<LWD)+SHFT)に127を加算し、重み係数の選択範囲の最大値を導出する(ステップS25)。
そしてインデックス設定部108は、導出した重み係数の選択範囲内に重み係数が含まれていることを確認する。なお、インデックス設定部108は、重み係数が導出した重み係数の選択範囲内に含まれていないことを確認した場合、重み係数の選択範囲の最大値又は最小値を用いてクリップ処理を行ってもよい。この場合、インデックス設定部108は、重み係数が選択範囲の最小値より小さければ当該最小値でクリップし、重み係数が選択範囲の最大値よりも大きければ当該最大値でクリップすればよい。このようなクリップ処理を導入することで、特定の範囲制約を設けなくても、重み係数の差分値などの符号化対象の値は、予め定められたビット精度内の値を取るため、ハードウェアが用いる回路規模の構成を明確化できる。
以上のように変形例2では、重み係数の選択範囲を、重み係数の変化分を考慮した上で所定の値だけシフトした基準点を中心として、負の方向と正の方向に値を割り振ることにより、符号化する値の範囲を固定とすることができる。
(第2実施形態の変形例2)
第2実施形態では、復号装置800での重み係数の選択範囲の導出について説明したが、第2実施形態の変形例2では、復号装置800での重み係数の選択範囲の導出の際に、重み係数の選択範囲をシフトする例について説明する。第2実施形態の変形例2では、インデックス設定部806が、重み係数の選択範囲の導出の際に、重み係数の選択範囲を正側にシフトする。なお、重み係数の選択範囲の導出については、第1実施形態の変形例2と同様であるため、詳細な説明は省略する。また、重み係数の選択範囲の導出をインデックス設定部806ではなく、インデックス再構成部801Bで行うようにしてもよい。
以上のように第2実施形態の変形例2では、重み係数の選択範囲を、重み係数の変化分を考慮した上で所定の値だけシフトした基準点を中心として、負の方向と正の方向に値を割り振ることにより、復号する値の範囲を固定とすることができる。
(第1実施形態の変形例3)
変形例3では、第1実施形態の符号化装置100での重み係数の選択範囲の導出手法と異なる導出手法について説明する。
変形例3では、数式(14)〜数式(16)におけるluma_weight_lx[i]が固定の選択範囲を持ち、delta_luma_weight_lx[i]が、LWDに応じて動的な選択範囲を持つ。なお、変形例5の重み係数(luma_weight_lx[i])の選択範囲は図9と同様である。
図25は、変形例3における符号化対象の重み係数の差分値の範囲の一例を示す説明図である。図25に示す例では、重み係数の差分値(delta_luma_weight_lx[i])は、符号付き8ビット信号の加減算を行うため、符号付き9ビットの値を取る。一方、重み係数の基準値は固定小数点精度に応じて大きくなる値を取るため、重み係数の差分値は固定小数点精度の値が大きくなるにつれて負側に偏る傾向がある。
図26は、変形例3のシンタクス要素の値の関係の一例を示す説明図であり、luma_log2_weight_denom、default_luma_weight_lx、luma_weight_lx[i]、及びdelta_luma_weight_lx[i]の値の関係を示している。エントロピー符号化部110Aによって符号化されるシンタクス要素であるdelta_luma_weight_lx[i]、即ち、重み係数の差分値の取りうる範囲は、図19に示すように、固定小数点精度を表すluma_log2_weight_denomの値が大きくなるにつれて負側に偏る傾向があることが判る。一方、復号した重み係数の値(luma_weight_lx[i])は、−128から127まで固定の範囲となることが判る。
以上のように変形例3では、復号した重み係数の値が固定の選択範囲を持つように符号化する差分値の範囲を定めることにより、予測方法が変わった場合においてもH.264と同一の選択範囲を定めることが出来るようになる。
(第2実施形態の変形例3)
第2実施形態の変形例3では、第2実施形態の復号装置800での重み係数の選択範囲の導出手法と異なる導出手法について説明する。但し、第2実施形態の変形例3の重み係数の選択範囲の導出手法は、第1実施形態の変形例3と同様であるため、詳細な説明は省略する。
以上のように第2実施形態の変形例3では、重み係数の値が固定の選択範囲を持つように復号する差分値の範囲を定めることにより、予測方法が変わった場合においてもH.264と同一の選択範囲を定めることが出来るようになる。
(第1実施形態の変形例4)
変形例4では、第1実施形態の変形例3の重み係数の選択範囲の導出の際に、重み係数の選択範囲をシフトする例について説明する。
変形例4では、インデックス設定部108が重み係数の差分値の範囲を正側にシフトするが、これは実質的に復号後の重み係数の選択範囲を正側にシフトしていることと等価である。
図27は、変形例4の重み係数の差分値の範囲の一例を示す説明図である。第1実施形態の変形例3と比較して、−128から127までの8ビット範囲の値を取る重み係数の差分値の範囲が、正側にSHFT分シフトしている。
図28は、変形例4の復号後の重み係数の選択範囲を示している。図28より、変形例4では、差分値のシフト分だけ、重み係数の範囲を正側にシフトしていることが判る。このような構成としても、従来選択することが出来なかったLWDが7の場合の基準値も選択することが出来るようになる。
(第2実施形態の変形例4)
第2実施形態の変形例4では、第2実施形態の変形例3の重み係数の選択範囲の導出の際に、重み係数の選択範囲をシフトする例について説明する。但し、第2実施形態の変形例4の重み係数の選択範囲をシフトする手法は、第1実施形態の変形例4と同様であるため、詳細な説明は省略する。このような構成としても、従来選択することが出来なかったLWDが7の場合の基準値も選択することが出来るようになる。
(第1実施形態の変形例5)
変形例5では、第1実施形態の変形例3及び変形例4において重み係数の差分値をラップ処理する例について説明する。
図25で説明したように、重み係数の差分値は、符号付き9ビット信号(−256から126)であって、固定小数点精度が大きくなると負側に偏っている。重み係数は、一般的に指数ゴロム符号などを用いてエントロピー符号化されるため、正負のバランスが偏っている場合、符号化効率が低下する場合がある。重み係数の差分値の範囲は、固定小数点精度に応じて異なるが、固定小数点精度が確定した場合の範囲は8ビット内に収まっている。例えば、LWDが7の場合、差分値の範囲は−256から−1までであり、0基準にシフトすると0から255までの8ビットの値となる。このため、インデックス再構成部110Bは、固定小数点精度に応じて、符号付き9ビットを符号無し8ビットにラップ処理する。この場合、正方向の値は従来通りの値を取り、負の値は正の値の終端に接続される。
図29は、変形例5の重み係数の差分値のラップ処理の一例を示すフローチャートである。
まず、インデックス再構成部110Bは、インデックス情報から重み係数の固定小数点精度LWDを導出する(ステップS32)。
続いて、インデックス再構成部110Bは、インデックス情報から重み係数を導出する(ステップS33)。
続いて、インデックス再構成部110Bは、導出した固定小数点精度LWDを用いて、重み係数の基準値(1<<LWD)を導出する(ステップS34)。
続いて、インデックス再構成部110Bは、数式(14)より重み係数の差分値を導出する(ステップS35)。
続いて、インデックス再構成部110Bは、重み係数の基準値(1<<LWD)に基づいて、ラップ処理を行い、正の値はそのままに負の値を正の最大値の後ろに接続することで符号無し8ビットコードを生成する(ステップS36)。
そして、インデックス再構成部110Bにより生成されたコードがエントロピー符号化部110Aでエントロピー符号化される。
以上のように変形例5では、符号付き9ビットの値に対してラップ処理を施すことにより、常に符号無し8ビットで符号化できるようになり、符号付き9ビットの指数ゴロム符号化部などのハードウェアを持つ必要が無くなる。
(第2実施形態の変形例5)
第2実施形態の変形例5では、第2実施形態の変形例3及び変形例4において重み係数の差分値をラップ処理する例について説明する。
図25で説明したように、重み係数の差分値は、符号付き9ビット信号(−256から126)であって、固定小数点精度が大きくなると負側に偏っている。重み係数は、一般的に指数ゴロム符号などを用いてエントロピー符号化されるため、正負のバランスが偏っている場合、符号化効率が低下する場合がある。重み係数の差分値の範囲は、固定小数点精度に応じて異なるが、固定小数点精度が確定した場合の範囲は8ビット内に収まっている。例えば、LWDが7の場合、差分値の範囲は−256から−1までであり、0基準にシフトすると0から255までの8ビットの値となる。このため、インデックス再構成部801Bは、固定小数点精度に応じて、符号付き9ビットを符号無し8ビットにラップ処理する。この場合、正方向の値は従来通りの値を取り、負の値は正の値の終端に接続される。
図30は、第2実施形態の変形例5の重み係数の差分値の復元処理の一例を示すフローチャートである。
まず、エントロピー復号部801Aは、符号化データを復号して重み係数の固定小数点精度LWDを導出する(ステップS42)。
続いて、エントロピー復号部801Aは、次に符号化データを復号して重み係数の差分値を示す符号無し8ビットコードを復号する(ステップS43)。
続いて、インデックス再構成部801Bは、導出した固定小数点精度LWDを用いて、重み係数の基準値(1<<LWD)を導出する(ステップS44)。
続いて、インデックス再構成部801Bは、導出した重み係数の基準値(1<<LWD)を用いて、符号無し8ビットコードを符号付き9ビットの差分値に復元する(ステップS45)。ここでは、復号したデータから基準値を下回る値をそのままにし、基準値以上のコードを負側に接続することで差分値を復元する。以上により、復元された重み係数の差分値を導出し、数式(15)により重み係数を復元する。
以上のように第2実施形態の変形例5では、符号付き9ビットの値に対してラップ処理を施すことにより、常に符号無し8ビットで符号化できるようになり、符号付き9ビットの指数ゴロム符号化部などのハードウェアを持つ必要が無くなる。
(変形例6)
上記第1〜第2実施形態では、フレームを16×16画素サイズなどの矩形ブロックに分割し、画面左上のブロックから右下に向かって順に符号化/復号を行う例について説明している(図2Aを参照)。しかしながら、符号化順序及び復号順序はこの例に限定されない。例えば、右下から左上に向かって順に符号化及び復号が行われてもよいし、画面中央から画面端に向かって渦巻を描くように符号化及び復号が行われてもよい。更に、右上から左下に向かって順に符号化及び復号が行われてもよいし、画面端から画面中央に向かって渦巻きを描くように符号化及び復号が行われてもよい。この場合、符号化順序によって参照できる隣接画素ブロックの位置が変わるので、適宜利用可能な位置に変更すればよい。
上記第1〜第2実施形態では、4×4画素ブロック、8×8画素ブロック、16×16画素ブロックなどの予測対象ブロックサイズを例示して説明を行ったが、予測対象ブロックは均一なブロック形状でなくてもよい。例えば、予測対象ブロックサイズは、16×8画素ブロック、8×16画素ブロック、8×4画素ブロック、4×8画素ブロックなどであってもよい。また、1つのコーディングツリーブロック内で全てのブロックサイズを統一させる必要はなく、複数の異なるブロックサイズを混在させてもよい。1つのコーディングツリーブロック内で複数の異なるブロックサイズを混在させる場合、分割数の増加に伴って分割情報を符号化又は復号するための符号量も増加する。そこで、分割情報の符号量と局所復号画像または復号画像の品質との間のバランスを考慮して、ブロックサイズを選択することが望ましい。
上記第1〜第2実施形態では、簡単化のために、輝度信号と色差信号における予測処理や選択範囲の導出方法とを区別せず、色信号成分に関して包括的な説明を記述した部分がある。しかしながら、予測処理や選択範囲の導出方法が輝度信号と色差信号との間で異なる場合には、同一または異なる予測方法が用いられてよい。輝度信号と色差信号との間で異なる予測方法が用いられるならば、色差信号に対して選択した予測方法を輝度信号と同様の方法で符号化又は復号できる。
上記第1〜第2実施形態では、簡単化のために、輝度信号と色差信号における重み付き動き補償予測処理とを区別せず、色信号成分に関して包括的な説明を記述した。しかしながら、重み付き動き補償予測処理が輝度信号と色差信号との間で異なる場合には、同一または異なる重み付き動き補償予測処理が用いられてよい。輝度信号と色差信号との間で異なる重み付き動き補償予測処理が用いられるならば、色差信号に対して選択した重み付き動き補償予測処理を輝度信号と同様の方法で符号化又は復号できる。
上記第1〜第2実施形態では、シンタクス構成に示す表の行間には、本実施形態で規定していないシンタクス要素が挿入されることも可能であるし、それ以外の条件分岐に関する記述が含まれていても構わない。或いは、シンタクステーブルを複数のテーブルに分割、統合することも可能である。また、必ずしも同一の用語を用いる必要は無く、利用する形態によって任意に変更しても構わない。
以上説明したように、各実施形態及び各変形例は、重み付き動き補償予測を行う際にシンタクス要素の取りうる値の範囲を定義し、それに伴う値の範囲を予め定めたビット精度の範囲で設定し、実際に利用頻度の高い値に対して短い符号長を与える構成とすることで、シンタクス要素の冗長な情報を符号化する問題を解消しつつ、高効率な重み付き動き補償予測処理を実現する。故に、各実施形態及び各変形例によれば、符号化効率が向上し、ひいては主観画質も向上する。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
例えば、上記各実施形態の処理を実現するプログラムを、コンピュータで読み取り可能な記憶媒体に格納して提供することも可能である。記憶媒体としては、磁気ディスク、光ディスク(CD−ROM、CD−R、DVD等)、光磁気ディスク(MO等)、半導体メモリなど、プログラムを記憶でき、かつ、コンピュータが読み取り可能な記憶媒体であれば、その記憶形式は何れの形態であってもよい。
また、上記各実施形態の処理を実現するプログラムを、インターネットなどのネットワークに接続されたコンピュータ(サーバ)上に格納し、ネットワーク経由でコンピュータ(クライアント)にダウンロードさせてもよい。