【課題】勾配画像を利用して高画質化する予測は、処理単位毎に処理を行うか否かを判定するために、二つの補間画像の差分絶対値和の計算が、追加で必要なため、最悪の場合の処理量の削減にはなっていなかったという問題があった。
【解決手段】二つの補間画像から、双方向勾配変化処理を用いて予測画像を生成する予測画像生成部を有し、前記予測画像生成部において、二つの補間画像の差分の演算精度を同一にして、処理単位毎の処理を行うか否かの判定と予測画像生成を行う。
請求項1の動画像復号装置の前記フラグ設定部と前記相関パラメータ計算部において、L0予測画像とL1予測画像の差分の演算精度を画素ビット長にかかわらず一定にすることを特徴とする動画像復号装置。
請求項3の動画像符号化装置の前記フラグ設定部と前記相関パラメータ計算部において、L0予測画像とL1予測画像の差分の演算精度を画素ビット長にかかわらず一定にすることを特徴とする動画像符号化装置。
【発明を実施するための形態】
【0013】
(第1の実施形態)
以下、図面を参照しながら本発明の実施形態について説明する。
【0014】
図1は、本実施形態に係る画像伝送システム1の構成を示す概略図である。
【0015】
画像伝送システム1は、符号化対象画像を符号化した符号化ストリームを伝送し、伝送された符号化ストリームを復号し画像を表示するシステムである。画像伝送システム1は、動画像符号化装置(画像符号化装置)11、ネットワーク21、動画像復号装置(画像復号装置)31、及び動画像表示装置(画像表示装置)41を含んで構成される。
【0016】
動画像符号化装置11には画像Tが入力される。
【0017】
ネットワーク21は、動画像符号化装置11が生成した符号化ストリームTeを動画像復号装置31に伝送する。ネットワーク21は、インターネット(Internet)、広域ネットワーク(WAN:Wide Area Network)、小規模ネットワーク(LAN:Local Area Network)またはこれらの組み合わせである。ネットワーク21は、必ずしも双方向の通信網に限らず、地上デジタル放送、衛星放送等の放送波を伝送する一方向の通信網であっても良い。また、ネットワーク21は、DVD(Digital Versatile Disc:登録商標)、BD(Blue-ray Disc:登録商標)等の符号化ストリームTeを記録した記憶媒体で代替されても良い。
【0018】
動画像復号装置31は、ネットワーク21が伝送した符号化ストリームTeのそれぞれを復号し、復号した1または複数の復号画像Tdを生成する。
【0019】
動画像表示装置41は、動画像復号装置31が生成した1または複数の復号画像Tdの全部または一部を表示する。動画像表示装置41は、例えば、液晶ディスプレイ、有機EL(Electro-luminescence)ディスプレイ等の表示デバイスを備える。ディスプレイの形態としては、据え置き、モバイル、HMD等が挙げられる。また、動画像復号装置31が高い処理能力を有する場合には、画質の高い画像を表示し、より低い処理能力しか有しない場合には、高い処理能力、表示能力を必要としない画像を表示する。
【0020】
<演算子>
本明細書で用いる演算子を以下に記載する。
【0021】
>>は右ビットシフト、<<は左ビットシフト、&はビットワイズAND、|はビットワイズOR、|=はOR代入演算子であり、||は論理和を示す。
【0022】
x?y:zは、xが真(0以外)の場合にy、xが偽(0)の場合にzをとる3項演算子である。
【0023】
Clip3(a,b,c)は、cをa以上b以下の値にクリップする関数であり、c<aの場合にはaを返し、c>bの場合にはbを返し、その他の場合にはcを返す関数である(ただし、a<=b)。
【0024】
abs(a)はaの絶対値を返す関数である。
【0025】
Int(a)はaの整数値を返す関数である。
【0026】
floor(a)はa以下の最大の整数を返す関数である。
【0027】
ceil(a)はa以上の最小の整数を返す関数である。
【0028】
a/dはdによるaの除算(小数点以下切り捨て)を表す。
【0030】
sign(a)はaの符号(sign)を返す関数である。sign(a) = a>0? 1 : a==0? 0 : -1
log2(a)はaの底を2とする対数を返す関数である。
【0031】
Max(a, b)は、a>=bの時、a、a<bの時bを返す関数である。
【0032】
Min(a, b)は、a<=bの時、a、a>bの時bを返す関数である。
【0033】
Round(a)はaの丸め値を返す関数である。Round(a) = sign(a)*floor(abs(a)+0.5)。
【0034】
<符号化ストリームTeの構造>
本実施形態に係る動画像符号化装置11および動画像復号装置31の詳細な説明に先立って、動画像符号化装置11によって生成され、動画像復号装置31によって復号される符号化ストリームTeのデータ構造について説明する。
【0035】
図4は、符号化ストリームTeにおけるデータの階層構造を示す図である。符号化ストリームTeは、例示的に、シーケンス、およびシーケンスを構成する複数のピクチャを含む。
図4の(a)〜(f)は、それぞれ、シーケンスSEQを既定する符号化ビデオシーケンス、ピクチャPICTを規定する符号化ピクチャ、スライスSを規定する符号化スライス、スライスデータを規定する符号化スライスデータ、符号化スライスデータに含まれる符号化ツリーユニット、符号化ツリーユニットに含まれる符号化ユニットを示す図である。
【0036】
(符号化ビデオシーケンス)
符号化ビデオシーケンスでは、処理対象のシーケンスSEQを復号するために動画像復号装置31が参照するデータの集合が規定されている。シーケンスSEQは、
図4(a)に示すように、ビデオパラメータセット(Video Parameter Set)、シーケンスパラメータセットSPS(Sequence Parameter Set)、ピクチャパラメータセットPPS(Picture Parameter Set)、ピクチャPICT、及び、付加拡張情報SEI(Supplemental Enhancement Information)を含んでいる。
【0037】
ビデオパラメータセットVPSは、複数のレイヤから構成されている動画像において、複数の動画像に共通する符号化パラメータの集合および動画像に含まれる複数のレイヤおよび個々のレイヤに関連する符号化パラメータの集合が規定されている。
【0038】
シーケンスパラメータセットSPSでは、対象シーケンスを復号するために動画像復号装置31が参照する符号化パラメータの集合が規定されている。例えば、ピクチャの幅や高さが規定される。なお、SPSは複数存在してもよい。その場合、PPSから複数のSPSの何れかを選択する。
【0039】
ピクチャパラメータセットPPSでは、対象シーケンス内の各ピクチャを復号するために動画像復号装置31が参照する符号化パラメータの集合が規定されている。例えば、ピクチャの復号に用いられる量子化幅の基準値(pic_init_qp_minus26)や重み付き予測の適用を示すフラグ(weighted_pred_flag)が含まれる。なお、PPSは複数存在してもよい。その場合、対象シーケンス内の各ピクチャから複数のPPSの何れかを選択する。
【0040】
(符号化ピクチャ)
符号化ピクチャでは、処理対象のピクチャPICTを復号するために動画像復号装置31が参照するデータの集合が規定されている。ピクチャPICTは、
図4(b)に示すように、スライス0〜スライスNS-1を含む(NSはピクチャPICTに含まれるスライスの総数)。
【0041】
なお、以下、スライス0〜スライスNS-1のそれぞれを区別する必要が無い場合、符号の添え字を省略して記述することがある。また、以下に説明する符号化ストリームTeに含まれるデータであって、添え字を付している他のデータについても同様である。
【0042】
(符号化スライス)
符号化スライスでは、処理対象のスライスSを復号するために動画像復号装置31が参照するデータの集合が規定されている。スライスは、
図4(c)に示すように、スライスヘッダ、および、スライスデータを含んでいる。
【0043】
スライスヘッダには、対象スライスの復号方法を決定するために動画像復号装置31が参照する符号化パラメータ群が含まれる。スライスタイプを指定するスライスタイプ指定情報(slice_type)は、スライスヘッダに含まれる符号化パラメータの一例である。
【0044】
スライスタイプ指定情報により指定可能なスライスタイプとしては、(1)符号化の際にイントラ予測のみを用いるIスライス、(2)符号化の際に単方向予測、または、イントラ予測を用いるPスライス、(3)符号化の際に単方向予測、双方向予測、または、イントラ予測を用いるBスライスなどが挙げられる。なお、インター予測は、単予測、双予測に限定されず、より多くの参照ピクチャを用いて予測画像を生成してもよい。以下、P、Bスライスと呼ぶ場合には、インター予測を用いることができるブロックを含むスライスを指す。
【0045】
なお、スライスヘッダは、ピクチャパラメータセットPPSへの参照(pic_parameter_set_id)を含んでいても良い。
【0046】
(符号化スライスデータ)
符号化スライスデータでは、処理対象のスライスデータを復号するために動画像復号装置31が参照するデータの集合が規定されている。スライスデータは、
図4(d)に示すように、CTUを含んでいる。CTUは、スライスを構成する固定サイズ(例えば64x64)のブロックであり、最大符号化単位(LCU:Largest Coding Unit)と呼ぶこともある。
【0047】
(符号化ツリーユニット)
図4(e)には、処理対象のCTUを復号するために動画像復号装置31が参照するデータの集合が規定されている。CTUは、再帰的な4分木分割(QT(Quad Tree)分割)、2分木分割(BT(Binary Tree)分割)あるいは3分木分割(TT(Ternary Tree)分割)により符号化処理の基本的な単位である符号化ユニットCUに分割される。BT分割とTT分割を合わせてマルチツリー分割(MT(Multi Tree)分割)と呼ぶ。再帰的な4分木分割により得られる木構造のノードのことを符号化ノード(Coding Node)と称する。4分木、2分木、及び3分木の中間ノードは、符号化ノードであり、CTU自身も最上位の符号化ノードとして規定される。
【0048】
CTは、CT情報として、QT分割を行うか否かを示すQT分割フラグ(qt_split_cu_flag)、MT分割の有無を示すMT分割フラグ(mtt_split_cu_flag)、MT分割の分割方向を示すMT分割方向(mtt_split_cu_vertical_flag)、MT分割の分割タイプを示すMT分割タイプ(mtt_split_cu_binary_flag)を含む。qt_split_cu_flag、mtt_split_cu_vertical_flag、mtt_split_cu_binary_flagは符号化ノード毎に伝送される。
【0049】
図5は、CTUの分割例を示す図である。qt_split_cu_flagが1の場合、符号化ノードは4つの符号化ノードに分割される(
図5(b))。
【0050】
qt_split_cu_flagが0の時、mtt_split_cu_flagが0の場合に符号化ノードは分割されず1つのCUをノードとして持つ(
図5(a))。CUは符号化ノードの末端ノードであり、これ以上分割されない。CUは、符号化処理の基本的な単位となる。
【0051】
mtt_split_cu_flagが1の場合に符号化ノードは以下のようにMT分割される。mtt_split_cu_vertical_flagが0、かつmtt_split_cu_binary_flagが1の場合に符号化ノードは2つの符号化ノードに水平分割され(
図5(d))、mtt_split_cu_vertical_flagが1、かつmtt_split_cu_binary_flagが1の場合に符号化ノードは2つの符号化ノードに垂直分割される(
図5(c))。また、mtt_split_cu_vertical_flagが0、かつmtt_split_cu_binary_flagが0の場合に符号化ノードは3つの符号化ノードに水平分割され(
図5(f))、mtt_split_cu_vertical_flagが1、かつmtt_split_cu_binary_flagが0の場合に符号化ノードは3つの符号化ノードに垂直分割される(
図5(e))。これらを
図5(g)に示す。
【0052】
また、CTUのサイズが64x64画素の場合には、CUのサイズは、64x64画素、64x32画素、32x64画素、32x32画素、64x16画素、16x64画素、32x16画素、16x32画素、16x16画素、64x8画素、8x64画素、32x8画素、8x32画素、16x8画素、8x16画素、8x8画素、64x4画素、4x64画素、32x4画素、4x32画素、16x4画素、4x16画素、8x4画素、4x8画素、及び、4x4画素の何れかをとり得る。
【0053】
(符号化ユニット)
図4(f)に示すように、処理対象の符号化ユニットを復号するために動画像復号装置31が参照するデータの集合が規定されている。具体的には、CUは、CUヘッダCUH、予測パラメータ、変換パラメータ、量子化変換係数等から構成される。CUヘッダでは予測モード等が規定される。
【0054】
予測処理は、CU単位で行われる場合と、CUをさらに分割したサブCU単位で行われる場合がある。CUとサブCUのサイズが等しい場合には、CU中のサブCUは1つである。CUがサブCUのサイズよりも大きい場合、CUは、サブCUに分割される。たとえばCUが8x8、サブCUが4x4の場合、CUは水平2分割、垂直2分割からなる、4つのサブCUに分割される。
【0055】
予測の種類(予測モード)は、イントラ予測と、インター予測の2つがある。イントラ予測は、同一ピクチャ内の予測であり、インター予測は、互いに異なるピクチャ間(例えば、表示時刻間)で行われる予測処理を指す。
【0056】
変換・量子化処理はCU単位で行われるが、量子化変換係数は4x4等のサブブロック単位でエントロピー符号化してもよい。
【0057】
(予測パラメータ)
予測画像は、ブロックに付随する予測パラメータによって導出される。予測パラメータには、イントラ予測とインター予測の予測パラメータがある。
【0058】
以下、インター予測の予測パラメータについて説明する。インター予測パラメータは、予測リスト利用フラグpredFlagL0、predFlagL1と、参照ピクチャインデックスrefIdxL0、refIdxL1と、動きベクトルmvL0、mvL1から構成される。予測リスト利用フラグpredFlagL0、predFlagL1は、各々L0リスト、L1リストと呼ばれる参照ピクチャリストが用いられるか否かを示すフラグであり、値が1の場合に対応する参照ピクチャリストが用いられる。なお、本明細書中「XXであるか否かを示すフラグ」と記す場合、フラグが0以外(たとえば1)をXXである場合、0をXXではない場合とし、論理否定、論理積などでは1を真、0を偽と扱う(以下同様)。但し、実際の装置や方法では真値、偽値として他の値を用いることもできる。
【0059】
インター予測パラメータを導出するためのシンタックス要素には、例えば、アフィンフラグaffine_flag、マージフラグmerge_flag、マージインデックスmerge_idx、インター予測識別子inter_pred_idc、参照ピクチャインデックスrefIdxLX、予測ベクトルインデック
スmvp_LX_idx、差分ベクトルmvdLX、動きベクトル精度モードamvr_modeがある。
【0060】
(参照ピクチャリスト)
参照ピクチャリストは、参照ピクチャメモリ306に記憶された参照ピクチャからなるリストである。
図6は、参照ピクチャおよび参照ピクチャリストの一例を示す概念図である。
図6(a)において、矩形はピクチャ、矢印はピクチャの参照関係、横軸は時間、矩形中のI、P、Bは各々イントラピクチャ、単予測ピクチャ、双予測ピクチャ、矩形中の数字は復号順を示す。図に示すように、ピクチャの復号順は、I0、P1、B2、B3、B4であり、表示順は、I0、B3、B2、B4、P1である。
図6(b)に、ピクチャB3(対象ピクチャ)の参照ピクチャリストの例を示す。参照ピクチャリストは、参照ピクチャの候補を表すリストであり、1つのピクチャ(スライス)が1つ以上の参照ピクチャリストを有してもよい。図の例では、対象ピクチャB3は、L0リストRefPicList0およびL1リストRefPicList1の2つの参照ピクチャリストを持つ。個々のCUでは、参照ピクチャリストRefPicListX(X=0または1)中のどのピクチャを実際に参照するかを参照ピクチャインデックスrefIdxLXで指定する。図は、refIdxL0=2、refIdxL1=0の例である。なお、LXは、L0予測とL1予測を区別しない場合に用いられる記述方法であり、以降では、LXをL0、L1に置き換えることでL0リストに対するパラメータとL1リストに対するパラメータを区別する。
【0061】
(マージ予測とAMVP予測)
予測パラメータの復号(符号化)方法には、マージ予測(merge)モードとAMVP(Advanced Motion Vector Prediction、適応動きベクトル予測)モードがあり、マージフラグmerge_flagは、これらを識別するためのフラグである。マージ予測モードは、予測リスト利用フラグpredFlagLX(またはインター予測識別子inter_pred_idc)、参照ピクチャインデックスrefIdxLX、動きベクトルmvLXを符号化データに含めずに、既に処理した近傍ブロックの予測パラメータから導出する用いるモードである。AMVPモードは、インター予測識別子inter_pred_idc、参照ピクチャインデックスrefIdxLX、動きベクトルmvLXを符号化データに含めるモードである。なお、動きベクトルmvLXは、予測ベクトルmvpLXを識別する予測ベクトルインデックスmvp_LX_idxと差分ベクトルmvdLX、動きベクトル精度モードamvr_modeとして符号化される。また、マージ予測モードの他に、アフィンフラグaffine_flagにより識別されるアフィン予測モードがあってもよい。マージ予測モードの一形態として、スキップフラグskip_flagにより識別されるスキップモードがあってもよい。なお、スキップモードとは、マージモードと同様の方法で予測パラメータを導出して用いるモードであり、かつ、予測誤差(残差画像)を符号化データに含めないモードである。換言すれば、スキップフラグskip_flagが1の場合、対象CUに関して、当該スキップフラグskip_flagとマージインデックスmerge_idxなどのマージモードに関連するシンタックスのみを含み、動きベクトルなどは符号化データに含まれない。このため、対象CUに対して、スキップフラグskip_flagがスキップモードを適用することを示している場合、当該スキップフラグskip_flag以外の予測パラメータの復号は省略される。
【0062】
(動きベクトル)
動きベクトルmvLXは、異なる2つのピクチャ上のブロック間のシフト量を示す。動きベクトルmvLXに関する予測ベクトル、差分ベクトルを、それぞれ予測ベクトルmvpLX、差分ベクトルmvdLXと呼ぶ。
【0063】
(インター予測識別子inter_pred_idcと予測リスト利用フラグpredFlagLX)
インター予測識別子inter_pred_idcは、参照ピクチャの種類および数を示す値であり、PRED_L0、PRED_L1、PRED_BIの何れかの値をとる。PRED_L0、PRED_L1は、各々L0リスト、L1リストで管理された1枚の参照ピクチャを用いる単予測を示す。PRED_BIはL0リストとL1リストで管理された2枚の参照ピクチャを用いる双予測BiPredを示す。
【0064】
マージインデックスmerge_idxは、処理が完了したブロックから導出される予測パラメータ候補(マージ候補)のうち、いずれの予測パラメータを対象ブロックの予測パラメータとして用いるかを示すインデックスである。
【0065】
インター予測識別子inter_pred_idcと、予測リスト利用フラグpredFlagL0、predFlagL1の関係は以下のとおりであり、相互に変換可能である。
【0066】
inter_pred_idc = (predFlagL1<<1)+predFlagL0
predFlagL0 = inter_pred_idc & 1
predFlagL1 = inter_pred_idc >> 1
(双予測biPredの判定)
双予測BiPredであるかのフラグbiPredは、2つの予測リスト利用フラグがともに1であるかによって導出できる。例えば以下の式で導出できる。
【0067】
biPred = (predFlagL0==1 && predFlagL1==1)
あるいは、フラグbiPredは、インター予測識別子が2つの予測リスト(参照ピクチャ)を使うことを示す値であるか否かによっても導出できる。例えば以下の式で導出できる。
【0068】
biPred = (inter_pred_idc==PRED_BI) ? 1 : 0
(動画像復号装置の構成)
本実施形態に係る動画像復号装置31(
図7)の構成について説明する。
【0069】
動画像復号装置31は、エントロピー復号部301、パラメータ復号部(予測画像復号装置)302、ループフィルタ305、参照ピクチャメモリ306、予測パラメータメモリ307、予測画像生成部(予測画像生成装置)308、逆量子化・逆変換部311、及び加算部312を含んで構成される。なお、後述の動画像符号化装置11に合わせ、動画像復号装置31にループフィルタ305が含まれない構成もある。
【0070】
パラメータ復号部302は、さらに、図示しない、ヘッダ復号部3020、CT情報復号部3021、及びCU復号部3022(予測モード復号部)を備えており、CU復号部3022はさらにTU復号部3024を備えている。これらを総称して復号モジュールと呼んでもよい。ヘッダ復号部3020は、符号化データからVPS、SPS、PPSなどのパラメータセット情報、スライスヘッダ(スライス情報)を復号する。CT情報復号部3021は、符号化データからCTを復号する。CU復号部3022は符号化データからCUを復号する。TU復号部3024は、TUに予測誤差が含まれている場合に、符号化データからQP更新情報(量子化補正値)と量子化予測誤差(residual_coding)を復号する。
【0071】
また、パラメータ復号部302は、図示しないインター予測パラメータ復号部(予測画像生成装置)303及びイントラ予測パラメータ復号部304を含んで構成される。予測画像生成部308は、インター予測画像生成部(予測画像生成装置)309及びイントラ予測画像生成部310を含んで構成される。
【0072】
また、以降では処理の単位としてCTU、CUを使用した例を記載するが、この例に限らず、サブCU単位で処理をしてもよい。あるいはCTU、CU、をブロック、サブCUをサブブロックと読み替え、ブロックあるいはサブブロック単位の処理としてもよい。
【0073】
エントロピー復号部301は、外部から入力された符号化ストリームTeに対してエントロピー復号を行って、個々の符号(シンタックス要素)を復号する。
【0074】
エントロピー復号部301は、復号した符号をパラメータ復号部302に出力する。復号した
符号とは、例えば、予測モードpredMode、マージフラグmerge_flag、マージインデックスmerge_idx、インター予測識別子inter_pred_idc、参照ピクチャインデックスrefIdxLX、予測ベクトルインデックスmvp_LX_idx、差分ベクトルmvdLX、動きベクトル精度モードamvr_mode等である。どの符号を復号するかの制御は、パラメータ復号部302の指示に基づいて行われる。
【0075】
(インター予測パラメータ復号部の構成)
インター予測パラメータ復号部303は、エントロピー復号部301から入力された符号に基づいて、予測パラメータメモリ307に記憶された予測パラメータを参照してインター予測パラメータを復号する。また、インター予測パラメータ復号部303は、復号したインター予測パラメータを予測画像生成部308に出力し、予測パラメータメモリ307に記憶する。
【0076】
図8は、本実施形態に係るインター予測パラメータ復号部303の構成を示す概略図である。インター予測パラメータ復号部303は、マージ予測部30374、DMVR部30375、サブブロック予測部(アフィン予測部)30372、MMVD予測部(動きベクトル導出部)30376、Triangle予測部30377、AMVP予測パラメータ導出部3032、加算部3038を含んで構成される。マージ予測部30374は、マージ予測パラメータ導出部3036を含んで構成される。AMVP予測パラメータ導出部3032、マージ予測パラメータ導出部3036、アフィン予測部30372は、動画像符号化装置、動画像復号装置で共通する手段であるので、これらを総称して動きベクトル導出部(動きベクトル導出装置)と称してもよい。
【0077】
インター予測パラメータ復号部303は、インター予測に関連するシンタックス要素の復号をエントロピー復号部301に指示し、符号化データに含まれるシンタックス要素、例えば、アフィンフラグaffine_flag、マージフラグmerge_flag、マージインデックスmerge_idx、インター予測識別子inter_pred_idc、参照ピクチャインデックスrefIdxLX、予測ベクトルインデックスmvp_LX_idx、差分ベクトルmvdLX、動きベクトル精度モードamvr_modeを抽出する。
【0078】
アフィンフラグaffine_flagが1、すなわち、アフィン予測モードを示す場合、アフィン予測部30372は、サブブロックのインター予測パラメータを導出する。
【0079】
マージフラグmerge_flagが1、すなわち、マージ予測モードを示す場合、マージインデックスmerge_idxを復号し、マージ予測パラメータ導出部3036に出力する。
【0080】
マージフラグmerge_flagが0、すなわち、AMVP予測モードを示す場合、AMVP予測パラメータとして、例えば、インター予測識別子inter_pred_idc、参照ピクチャインデックスrefIdxLX、予測ベクトルインデックスmvp_LX_idx、差分ベクトルmvdLXを復号する。AMVP予測パラメータ導出部3032は予測ベクトルインデックスmvp_LX_idxから予測ベクトルmvpLXを導出する。加算部3038では導出された予測ベクトルmvpLXと差分ベクトルmvdLXを加算し、動きベクトルmvLXを導出する。
【0081】
(アフィン予測部)
アフィン予測部30372は対象ブロックのアフィン予測パラメータを導出する。本実施形態では、アフィン予測パラメータとして、対象ブロックの2つの制御点(V0、V1)の動きベクトル(mv0_x,mv0_y)(mv1_x,mv1_y)を導出する。具体的には、対象ブロックの隣接ブロックの動きベクトルから予測することにより、各制御点の動きベクトルを導出してもよいし、制御点の動きベクトルとして導出された予測ベクトルと符号化データから導出される差分ベクトルの和により、各制御点の動きベクトルを導出してもよい。
【0082】
なお、アフィン予測部30372は、4パラメータMVDアフィン予測に用いるパラメータまた
は6パラメータMVDアフィン予測に用いるパラメータを適宜導出してもよい。
【0083】
(マージ予測)
図9の(a)は、マージ予測部30374に含まれるマージ予測パラメータ導出部3036の構成を示す概略図である。マージ予測パラメータ導出部3036は、マージ候補導出部30361、マージ候補選択部30362を備える。なお、マージ候補は、予測リスト利用フラグpredFlagLX、動きベクトルmvLX、参照ピクチャインデックスrefIdxLXを含んで構成され、マージ候補リストに格納される。マージ候補リストに格納されたマージ候補には、所定の規則に従ってインデックスが割り当てられる。
【0084】
マージ候補導出部30361は、復号済の隣接ブロックの動きベクトルと参照ピクチャインデックスrefIdxLXとをそのまま用いてマージ候補を導出する。それ以外に、マージ候補導出部30361は、後述する空間マージ候補導出処理、時間マージ候補導出処理、ペアワイズマージ候補導出処理、およびゼロマージ候補導出処理を適用してもよい。
【0085】
空間マージ候補導出処理として、マージ候補導出部30361は、所定の規則に従って、予測パラメータメモリ307が記憶している予測パラメータを読み出し、マージ候補に設定する。参照ピクチャの指定方法は、例えば、対象ブロックから予め定めた範囲内にある隣接ブロック(例えば、対象ブロックの左A1、右B1、右上B0、左下A0、左上B2にそれぞれ接するブロックの全部または一部)のそれぞれに係る予測パラメータである。各々のマージ候補をA1,B1,B0,A0,B2と呼ぶ。
【0086】
ここで、A1,B1,B0,A0,B2は各々、下記の座標を含むブロックから導出される動き情報である。
【0087】
A1: (xCb - 1, yCb + cbHeight - 1)
B1: (xCb + cbWidth - 1, yCb - 1)
B0: (xCb + cbWidth, yCb - 1)
A0: (xCb - 1, yCb + cbHeight)
B2: (xCb - 1, yCb - 1)
時間マージ導出処理として、マージ候補導出部30361は、対象ブロックの右下CBR、あるいは、中央の座標を含む参照画像中のブロックCの予測パラメータを、予測パラメータメモリ307から読み出してマージ候補Colとし、マージ候補リストmergeCandList[]に格納する。
【0088】
ペアワイズ導出部は、ペアワイズ候補avgKを導出し、マージ候補リストmergeCandList[]に格納する。
【0089】
マージ候補導出部30361は、参照ピクチャインデックスrefIdxLXが0…Mであり、動きベクトルmvLXのX成分、Y成分が共に0であるゼロマージ候補Z0,…,ZMを導出しマージ候補リストに格納する。
【0090】
マージ候補導出部30361またはペアワイズ導出部が各マージ候補をマージ候補リストmergeCandList[]に格納する順番は、例えば、空間マージ候補(A1,B1,B0,A0,B2)、時間マージ候補Col、ペアワイズ候補AvgK、ゼロマージ候補ZeroCandKである。なお、利用可能でない(ブロックがイントラ予測等)参照ブロックはマージ候補リストに格納しない。
i = 0
if( availableFlagA1 )
mergeCandList[ i++ ] = A1
if( availableFlagB1 )
mergeCandList[ i++ ] = B1
if( availableFlagB0 )
mergeCandList[ i++ ] = B0
if( availableFlagA0 )
mergeCandList[ i++ ] = A0
if( availableFlagB2 )
mergeCandList[ i++ ] = B2
if( availableFlagCol )
mergeCandList[ i++ ] = Col
if( availableFlagAvgK )
mergeCandList[ i++ ] = avgK
if( i < MaxNumMergeCand )
mergeCandList[ i++ ] = ZK
なお、対象ブロックの左上座標を(xCb, yCb)とし、対象ブロックの幅をcbWidthとし、対象ブロックの高さをcbHeightとする。
【0091】
マージ候補選択部30362は、マージ候補リストに含まれるマージ候補のうち、マージインデックスmerge_idxが示すマージ候補Nを以下の式で選択する。
【0092】
N = mergeCandList[merge_idx]
ここでNは、マージ候補を示すラベルであり、A1,B1,B0,A0,B2,Col,AvgK,ZeroCandKなどをとる。ラベルNで示されるマージ候補の動き情報は(mvLXN[0], mvLXN[1])、predFlagLXN, refIdxLXNで示される。
【0093】
マージ候補選択部30362は、選択されたマージ候補の動き情報(mvLXN[0], mvLXN[1])、predFlagLXN, refIdxLXNを対象ブロックのインター予測パラメータとして選択する。マージ候補選択部30362は選択したインター予測パラメータを予測パラメータメモリ307に記憶するとともに、予測画像生成部308に出力する。
【0094】
(MMVD予測部30373)
MMVD予測部30373は、マージ候補導出部30361で導出した中心ベクトルmvdLX(マージ候補の動きベクトル)に、差分ベクトルmvdLXを加算して動きベクトルを導出する。
【0095】
MMVD予測部30376は、マージ候補mergeCandList[]と符号化データから復号もしくは符号化データに符号化するシンタックスbase_candidate_idx、direction_idx、distance_idxを用いて動きベクトルmvLX[]を導出する。さらに、距離テーブル選択するシンタックスdistance_list_idxを符号化もしくは復号してもよい。
【0096】
MMVD予測部30376は、中心ベクトルmvLN[]をbase_candidate_idxで選択する。
【0097】
N = mergeCandList[base_candidate_idx]
MMVD予測部30376は、ベース距離(mvdUnit[0], mvdUnit[1])と距離DistFromBaseMVを導出する。
【0098】
dir_table_x[] = { 8, -8, 0, 0, 6, -6, -6, 6 }
dir_table_y[] = { 0, 0, 8, -8, 6, -6, 6, -6 }
mvdUnit[0] = dir_table_x[direction_idx]
mvdUnit[1] = dir_table_y[direction_idx]
DistFromBaseMV = DistanceTable[distance_idx]
MMVD予測部30376は、差分ベクトルrefineMv[]を導出する。
【0099】
firstMv[0] = (DistFromBaseMV<<shiftMMVD) * mvdUnit[0]
firstMv[1] = (DistFromBaseMV<<shiftMMVD) * mvdUnit[1]
ここでshiftMMVDは、動き補償部3091(補間部)での動きベクトルの精度MVPRECにあうように差分ベクトルの大きさを調整する値である。
【0100】
refineMvL0[0] = firstMv[0]
refineMvL0[1] = firstMv[1]
refineMvL1[0] = -firstMv[0]
refineMvL1[1] = -firstMv[1]
最終的に、MMVD予測部30376は、差分ベクトルrefineMvLXと中心ベクトルmvLXNから以下のように、MMVDマージ候補の動きベクトルを導出する。
【0101】
mvL0[ 0 ] = mvL0N[ 0 ] + refineMvL0[0]
mvL0[ 1 ] = mvL0N[ 1 ] + refineMvL0[1]
mvL1[ 0 ] = mvL1N[ 0 ] + refineMvL1[0]
mvL1[ 1 ] = mvL1N[ 1 ] + refineMvL1[1]
(AMVP予測)
図9(b)は、本実施形態に係るAMVP予測パラメータ導出部3032の構成を示す概略図である。AMVP予測パラメータ導出部3032は、ベクトル候補導出部3033とベクトル候補選択部3034を備える。ベクトル候補導出部3033は、参照ピクチャインデックスrefIdxLXに基づいて予測パラメータメモリ307が記憶する復号済みの隣接ブロックの動きベクトルmvLXから予測ベクトル候補を導出し、予測ベクトル候補リストmvpListLX[]に格納する。
【0102】
ベクトル候補選択部3034は、予測ベクトル候補リストmvpListLX[]の予測ベクトル候補のうち、予測ベクトルインデックスmvp_LX_idxが示す動きベクトルmvpListLX[mvp_LX_idx]を予測ベクトルmvpLXとして選択する。ベクトル候補選択部3034は選択した予測ベクトルmvpLXを加算部3038に出力する。
【0103】
加算部3038は、AMVP予測パラメータ導出部3032から入力された予測ベクトルmvpLXと復号した差分ベクトルmvdLXを加算して動きベクトルmvLXを算出する。加算部3038は、算出した動きベクトルmvLXを予測画像生成部308および予測パラメータメモリ307に出力する。
【0104】
mvLX[0] = mvpLX[0]+mvdLX[0]
mvLX[1] = mvpLX[1]+mvdLX[1]
動きベクトル精度モードamvr_modeは、AMVPモードで導出される動きベクトルの精度を切り替えるシンタックスである、例えば、amvr_mode=0, 1, 2において、1/4画素、1画素、4画素精度を切り替える。
【0105】
動きベクトルの精度を1/16精度とする場合、1/4, 1, 4画素精度の動きベクトル差分を1/16画素精度の動きベクトル差分に変更するために下記のように、amvr_modeから導出されるMvShift (=1<<amvr_mode)を用いて逆量子化してもよい。
【0106】
mvdLX[0] = mvdLX[0] << (MvShift + 2)
mvdLX[1] = mvdLX[1] << (MvShift + 2)
なお、さらにパラメータ復号部302は、mvdLX[]を以下のシンタックスを復号して導出してもよい。
・abs_mvd_greater0_flag
・abs_mvd_minus2
・mvd_sign_flag
を復号しする。そして、パラメータ復号部302は、以下の式を用いることによって、シンタックスから差分ベクトルlMvd[]を復号する。
【0107】
lMvd[ compIdx ] = abs_mvd_greater0_flag[ compIdx ] * ( abs_mvd_minus2[ compIdx
] + 2 ) * ( 1 - 2 * mvd_sign_flag[ compIdx ] )
さらに復号した差分ベクトルlMvd[]は、並進MVDの場合(MotionModelIdc[ x ][ y ] ==
0)にはmvdLXに設定し、制御点MVDの場合(MotionModelIdc[ x ][ y ] != 0)には、mvdCpLXに設定する。
【0108】
if (MotionModelIdc[ x ][ y ] == 0)
mvdLX[ x0 ][ y0 ][ compIdx ] = lMvd[ compIdx ]
else
mvdCpLX[ x0 ][ y0 ][ compIdx ] = lMvd[ compIdx ]<<2
(DMVR)
続いて、DMVR部30375が行うDMVR(Decoder side Motion Vector Refinement)処理について説明する。DMVR部30375は、対象CUに対して、マージフラグmerge_flagがマージ予測モードを適用することを示している場合、又は、スキップフラグskip_flagがスキップモードを適用することを示している場合、マージ予測部30374が導出する当該対象CUの動きベクトルmvLXを、参照画像を用いて修正する。
【0109】
具体的には、マージ予測部30374が導出する予測パラメータが双予測である場合において、2つの参照ピクチャに対応する動きベクトルから導出される予測画像を用いて、動きベクトルを修正する。修正後の動きベクトルmvLXは、インター予測画像生成部309に供給される。
【0110】
(Triangle予測)
続いてTriangle予測について説明する。Triangle予測では、対角線又は反対角線を境界として、対象CUが2つの三角形の予測単位に分割される。それぞれの三角形予測単位における予測画像は、対象CU(三角形予測単位を含む矩形ブロック)の予測画像の各画素に画素の位置に応じた重みつけマスク処理を施すことで導出する。例えば、矩形領域内の三角形領域の画素を1、三角形以外の領域を0とするマスクを乗ずることにより、矩形画像から三角形画像を導出できる。また、インター予測画像を生成した後、適応的な重み付け処理は対角線を挟んだ双方の領域に対して適用され、2つの予測画像を用いた適応的重みつけ処理により対象CU(矩形ブロック)の1つの予測画像が導出される。この処理を、Triangle合成処理と呼ぶ。そして、変換(逆変換)及び量子化(逆量子化)処理が対象CUの全体に対して適用される。なお、Triangle予測は、マージ予測モード又はスキップモードの場合にのみ適用される。
【0111】
Triangle予測部30377は、Triangle予測に用いられる2つの三角形領域に対応する予測パラメータを導出し、インター予測画像生成部309に供給する。Triangle予測では処理の簡略化のために、双予測を用いない構成でもよい。この場合、1つの三角形領域において単方向予測のインター予測パラメータを導出する。なお、2つの予測画像の導出及び予測画像を用いた合成は、動き補償部3091、Triangle合成部30952で行う。
【0112】
ループフィルタ305は、符号化ループ内に設けたフィルタで、ブロック歪やリンギング歪を除去し、画質を改善するフィルタである。ループフィルタ305は、加算部312が生成したCUの復号画像に対し、デブロッキングフィルタ、サンプル適応オフセット(SAO)、適応ループフィルタ(ALF)等のフィルタを施す。
【0113】
参照ピクチャメモリ306は、加算部312が生成したCUの復号画像を、対象ピクチャ及び対
象CU毎に予め定めた位置に記憶する。
【0114】
予測パラメータメモリ307は、復号対象のCTUあるいはCU毎に予め定めた位置に予測パラメータを記憶する。具体的には、予測パラメータメモリ307は、パラメータ復号部302が復号したパラメータ及びエントロピー復号部301が復号した予測モードpredMode等を記憶する。
【0115】
予測画像生成部308には、予測モードpredMode、予測パラメータ等が入力される。また、予測画像生成部308は、参照ピクチャメモリ306から参照ピクチャを読み出す。予測画像生成部308は、予測モードpredModeが示す予測モードで、予測パラメータと読み出した参照ピクチャ(参照ピクチャブロック)を用いてブロックもしくはサブブロックの予測画像を生成する。ここで、参照ピクチャブロックとは、参照ピクチャ上の画素の集合(通常矩形であるのでブロックと呼ぶ)であり、予測画像を生成するために参照する領域である。
【0116】
(インター予測画像生成部309)
予測モードpredModeがインター予測モードを示す場合、インター予測画像生成部309は、インター予測パラメータ復号部303から入力されたインター予測パラメータと読み出した参照ピクチャを用いてインター予測によりブロックもしくはサブブロックの予測画像を生成する。
【0117】
図10は、本実施形態に係る予測画像生成部308に含まれるインター予測画像生成部309の構成を示す概略図である。インター予測画像生成部309は、動き補償部(予測画像生成装置)3091、合成部3095を含んで構成される。
【0118】
(動き補償)
動き補償部3091(補間画像生成部3091)は、インター予測パラメータ復号部303から入力された、インター予測パラメータ(予測リスト利用フラグpredFlagLX、参照ピクチャインデックスrefIdxLX、動きベクトルmvLX)に基づいて、参照ピクチャメモリ306から、参照ピクチャインデックスrefIdxLXで指定された参照ピクチャRefPicLXにおける、対象ブロックの位置を起点として動きベクトルmvLXだけシフトした位置にあるブロックを読み出すことによって補間画像(動き補償画像)を生成する。ここで、動きベクトルmvLXの精度が整数精度でない場合には、動き補償フィルタと呼ばれる小数位置の画素を生成するためのフィルタを施して、動き補償画像を生成する。
【0119】
動き補償部3091は、まず、予測ブロック内座標(x,y)に対応する整数位置(xInt,yInt)および位相(xFrac,yFrac)を以下の式で導出する。
【0120】
xInt = xPb+(mvLX[0]>>(log2(MVPREC)))+x
xFrac = mvLX[0]&(MVPREC -1)
yInt = yPb+(mvLX[1]>>(log2(MVPREC)))+y
yFrac = mvLX[1]&(MVPREC -1)
ここで、(xPb,yPb)は、bW*bHサイズのブロックの左上座標、x=0…bW-1、y=0…bH-1であり、MVPRECは、動きベクトルmvLXの精度(1/MVPREC画素精度)を示す。例えばMVPREC=16。
【0121】
動き補償部3091は、参照ピクチャrefImgに補間フィルタを用いて水平補間処理を行うことで、一時的画像temp[][]を導出する。以下のΣはk=0..NTAP-1のkに関する和、shift1は値のレンジを調整する正規化パラメータ、offset1=1<<(shift1-1)である。
【0122】
temp[x][y] = (ΣmcFilter[xFrac][k]*refImg[xInt+k-NTAP/2+1][yInt]+offset1)>>shift1
続いて、動き補償部3091は、一時的画像temp[][]を垂直補間処理により、補間画像Pred[][]を導出する。以下のΣはk=0..NTAP-1のkに関する和、shift2は値のレンジを調整する正規化パラメータ、offset2=1<<(shift2-1)である。
【0123】
Pred[x][y] = (ΣmcFilter[yFrac][k]*temp[x][y+k-NTAP/2+1]+offset2)>>shift2
以上の補間画像生成処理を、Interpolation(refImg,xPb,yPb,bW,bH,mvLX)で表してもよい。
【0124】
(合成部)
合成部3095は、動き補償部3091から供給される補間画像、インター予測パラメータ復号部303から供給されるインター予測パラメータ、及び、イントラ予測画像生成部310から供給されるイントラ画像を参照して、予測画像を生成し、生成した予測画像を加算部312に供給する。
【0125】
合成部3095は、Combined intra/inter合成部30951、Triangle合成部30952、BDOF部30954を備えている。
【0126】
(Combined intra/inter合成処理)
Combined intra/inter合成部30951は、AMVPにおける単方向予測画像、スキップモードやマージ予測モードによる予測画像、及びイントラ予測画像を複合的に用いることによって予測画像を生成する。
【0127】
(Triangle合成処理)
Triangle合成部30952は、上述したTriangle予測を用いた予測画像を生成する。
【0128】
(BDOF処理)
BDOF部30954は、BDOF(Bi-directional optical flow;双予測勾配変化)処理を行うことによって、予測画像を生成する。BDOF部30954の詳細は、後述する。
【0129】
(重み予測)
重み予測では、動き補償画像PredLXに重み係数を乗算することによりブロックの予測画像を生成する。予測リスト利用フラグの一方(predFlagL0もしくはpredFlagL1)が1(単予測)、かつ、重み予測を用いない場合、動き補償画像PredLX(LXはL0もしくはL1)を画素ビット数bitDepthに合わせる以下の式の処理を行う。
【0130】
Pred[x][y] = Clip3(0,(1<<bitDepth)-1,(PredLX[x][y]+offset1)>>shift1)
ここで、shift1=14-bitDepth、offset1=1<<(shift1-1)である。
また、参照リスト利用フラグの両者(predFlagL0とpredFlagL1)が1(双予測BiPred)、かつ、重み予測を用いない場合、動き補償画像PredL0、PredL1を平均し画素ビット数に合わせる以下の式の処理を行う。
【0131】
Pred[x][y] = Clip3(0,(1<<bitDepth)-1,(PredL0[x][y]+PredL1[x][y]+offset2)>>shift2)
ここで、shift2=15-bitDepth、offset2=1<<(shift2-1)である。
【0132】
さらに、単予測、かつ、重み予測を行う場合、合成部3095は重み予測係数w0とオフセットo0を符号化データから導出し、以下の式の処理を行う。
【0133】
Pred[x][y] = Clip3(0,(1<<bitDepth)-1,((PredLX[x][y]*w0+2^(log2WD-1))>>log2WD)+o0)
ここで、log2WDは所定のシフト量を示す変数である。
【0134】
さらに、双予測BiPred、かつ、重み予測を行う場合、合成部3095は重み予測係数w0、w1、o0、o1を符号化データから導出し、以下の式の処理を行う。
【0135】
Pred[x][y] = Clip3(0,(1<<bitDepth)-1,(PredL0[x][y]*w0+PredL1[x][y]*w1+((o0+o1+1)<<log2WD))>>(log2WD+1))
そして、生成したブロックの予測画像を加算部312に出力する。
【0136】
逆量子化・逆変換部311は、エントロピー復号部301から入力された量子化変換係数を逆量子化して変換係数を求める。この量子化変換係数は、符号化処理において、予測誤差に対してDCT(Discrete Cosine Transform、離散コサイン変換)、DST(Discrete Sine Transform、離散サイン変換)、等の周波数変換を行い量子化して得られる係数である。逆量子化・逆変換部311は、求めた変換係数について逆DCT、逆DST等の逆周波数変換を行い、予測誤差を算出する。逆量子化・逆変換部311は予測誤差を加算部312に出力する。
【0137】
加算部312は、予測画像生成部308から入力されたブロックの予測画像と逆量子化・逆変換部311から入力された予測誤差を画素毎に加算して、ブロックの復号画像を生成する。加算部312はブロックの復号画像を参照ピクチャメモリ306に記憶し、また、ループフィルタ305に出力する。
【0138】
(BDOF予測)
次に、BDOF部30954が行うBDOF処理を用いた予測(BDOF予測)の詳細について説明する。BDOF部30954は、双予測モードにおいて、2つの予測画像(第1の予測画像及び第2の予測画像)及び勾配補正項を参照して予測画像を生成する。
【0139】
図11は、予測画像を導出する処理の流れを説明するフローチャートである。
【0140】
インター予測パラメータ復号部303がL0の単方向予測と判定(S101で、inter_pred_idcが0)した場合、動き補償部3091はL0予測画像PredL0[x][y]を生成(S102)する。インター予測パラメータ復号部303がL1の単方向予測と判定(S101で、inter_pred_idcが1)した場合、動き補償部3091はL1予測画像PredL1[x][y]を生成(S103)する。一方、インター予測パラメータ復号部303が双予測モードであると判定(S101で、inter_pred_idcが2)した場合、以下のS104の処理に続く。S104にて、合成部3095はBDOF処理を行うか否かを示すbdofFlagを参照しBDOF処理の要否を判定する。bdofFlagがTRUEを示すと、BDOF部30954はBDOF処理を実行して双方向予測画像を生成する(S106)。bdofFlagがFALSEを示すと、合成部3095は通常の双方予測画像生成で予測画像を生成する(S105)。
【0141】
BDOF処理を行うか否かを示すbdofFlagは、以下のような条件の場合、TRUEと設定する。
【0142】
インター予測パラメータ復号部303はL0参照画像refImgL0及びL1参照画像refImgL1が異なる参照画像であって、かつ、対象ピクチャに対し2枚のピクチャが反対方向の場合に、bdofFlagにTRUEを導出してもよい。具体的には、対象画像をcurrPicとすると、DiffPicOrderCnt(currPic,refImgL0)*DiffPicOrderCnt(currPic,refImgL1)<0となる条件を満たす場合に、bdofFlagはTRUEを示す。ここで、DiffPicOrderCnt()は、以下のように2枚の画像のPOC(Picture Order Count:ピクチャの表示順序)の差分を導出する関数である。
【0143】
DiffPicOrderCnt(picA,picB) = PicOrderCnt(picA)-PicOrderCnt(picB)
bdofFlagがTRUEを示す条件として、対象ブロックが、サブブロック予測(アフィン予測)でないという条件を追加してもよい。
【0144】
また、bdofFlagがTRUEを示す条件として、重み付き予測において、L0予測とL1予測のいずれもが、重み付き予測を行わない、という条件を加えてもよい。具体的には、L0予測ピクチャに輝度の重み係数w0とオフセットo0が存在するか否かを示すluma_weight_l0_flag[
refIdxL0 ]と、L1予測ピクチャに輝度の重み係数w1とオフセットo1が存在するか否かを示すluma_weight_l1_flag[ refIdxL1 ]が両方ともFALSEの場合、bdofFlagがTRUEを示す条件とする。
【0145】
図12を用いて、bdofFlagがTRUEの場合の、具体的なBDOF部30954が行う処理の内容について説明する。BDOF部30954は、L0,L1予測画像生成部309541と、フラグ設定部309542と、勾配画像生成部309543と、相関パラメータ計算部309544と、動き補償修正値導出部309545と、双方向予測画像生成部309546とを備えている。BDOF部30954は動き補償部3091から受信した補間画像と、インター予測パラメータ復号部303から受信したインター予測パラメータとから予測画像を生成し、生成した予測画像を加算部312に出力する。なお、勾配画像から動き補償修正値bdofOffset(動き補償修正画像)を導出し、PredL0、PredL1の予測画像を修正して導出する処理を、双方向勾配変化処理と呼ぶ。
【0146】
まず、L0,L1予測画像生成部309541では、BDOF処理に用いられる、L0、L1予測画像を生成する。ここで、CUをサブブロックに分割する。これにより、サブブロック単位の並列処理を可能とし、一度の処理に必要なメモリ量を削減できる。
【0147】
具体的な、サブブロックの基本のサイズは16x16であってもよい。例えばCUのサイズがcbWidth、cbHeightの場合、CU内の水平方向のサブブロック数numSbX、垂直方向のサブブロック数numSbY、サブブロックのサイズsbWidth、sbHeightは以下で導出される。
【0148】
numSbX = ( cbWidth > 16 ) ? ( cbWidth >> 4 ) : 1
numSbY = ( cbHeight > 16 ) ? ( cbHeight >> 4 ) : 1
sbWidth = cbWidth / numSbX
sbHeight = cbHeight / numSbY
次に、
図14で示されるサブブロック単位毎のL0,L1予測画像をもとに、BDOF処理をおこなうが、勾配を求めるために、サブブロックの周囲1画素分の補間画像情報を追加で必要とする。この補間画像情報は、後述の勾配画像生成では、通常の補間フィルタではなく近傍の画素を用いる。それ以外の場合は、ピクチャの外側と同様に、周囲の画素をコピーしたパディング領域である。また、BDOF処理の単位は、サブブロック単位以下の4x4画素であり、処理自体は、周囲1画素を加えた、6x6の画素を用いて処理を行う。
【0149】
フラグ設定部309542で、サブブロック単位のBDOF処理を行うか否かを示すフラグsbBdofFlagと、4x4画素単位でのBDOF処理を行うか否かを示すフラグbdofUtilizationFlag[xIdx][yIdx]の値の設定を行う。ここで、サブブロックの幅と高さの画素数をsbWidthとsbHeightとする。xIdxは、0から(sbWidth>>2)-1までの値をとる、4x4画素ブロックの水平方向のアドレスであり、yIdxは、0から(sbHeight>>2)-1までの値をとる、4x4画素ブロックの垂直方向のアドレスである。sbBdofFlagとbdofUtilizationFlag[xIdx][yIdx]は、TRUEの場合、BDOF処理を行い、FALSEの場合、双方向予測処理を行う。
【0150】
まず、サブブロック単位の閾値sbDiffThres、4x4画素ブロック単位の閾値bdofBlkDiffThres、およびサブブロック単位の差分絶対値和sbSumDiffは、次のように導出する。
【0151】
sbDiffThres = 4 * sbWidth*sbHeight
bdofBlkDiffThres = 128
本実施の形態では、sbDiffThresは画素あたり4、bdofBlkDiffThresは128=8*4*4なので
、画素あたり8の値を閾値としているが、この値以外を用いてもよい。例えば、2倍の値、sbDiffThres = 8 * sbWidth*sbHeight、bdofBlkDiffThres = 256でもよい。また、sbDiffThres=0とすることで、サブブロック単位の切り替えをオフにしてもよく、bdofBlkDiffThres=0とすることで、4x4画素ブロック単位の切り替えをオフにしてもよい。
【0152】
まず、sbSumDiffの値を下記のように設定する。
【0153】
sbSumDiff = 0
その上で、4x4画素ブロック毎のxIdx=0..(sbWidth>>2)-1およびyIdx=0..(sbHeight>>2)-1のループを回して、4x4画素単位での差分絶対値和bdofBlkSumDiffおよびbdofUtilizationFlag[xIdx][yIdx]は次のように導出される。
【0154】
bdofBlkSumDiff
= sum4(Abs((PredL0[(xIdx<<2)+1+i][(yIdx<<2)+1+j]>>shift4)
?(PredL1[(xIdx<<2)+1+i][(yIdx<<2)+1+j]>>shift4))) (式BDOF-1)
shift4=Max(InternalBitDepth-4, bitDepth+InternalBitDepth-16)
bdofUtilizationFlag[xIdx][yIdx] = (bdofBlkSumDiff >= bdofBlkDiffThres)
sbSumDiff += bdofBlkSumDiff
つまり、PredL0をshift4によりシフトした値と、PredL1をshift4によりシフトした値との差分の絶対値の総和を導出する。なお、(式BDOF-1)において、(x, y)=((xIdx<<2)+1+i,
yIdx<<2)+1+j)の代わりに、(x,y)をさらにCUのサイズ(nCbW, nCbH)でクリップした値(hx, vy)を用いてもよい。この場合、境界を超える画素はパディングで導出される。
【0155】
hx = Clip3( 1, nCbW, x )
vy = Clip3( 1, nCbH, y )
ここで、sum4()は、i=0..3、j=0..3の引数で4x4画素ブロックの合計を求める関数とし、shift4は、後述する相関パラメータ計算部309544で定義するshift4と同一のものとする。なお、InternalBitDepthは、BDOF部内の計算精度のパラメータで、入力画素ビット長bitDepthとは独立な一定値で、7以上12以下の値とする。例えば、InternalBitDepth=8の場合、shift4はshift4=Max(4, bitDepth-8)となる。
【0156】
HEVCと同様の補間フィルタを用いる場合、PredL0とPredL1の値は、bitDepthが8から12ビットの範囲での演算精度は14ビットであり、InternalBitDepth=8の場合、shift4 = Max(4, bitDepth-8) = 4となり、(式BDOF-1)に示したPredL0, PredL1をshift4で右シフトした後の差分の絶対値和は、bitDepthにかかわらず10ビットの精度での差分絶対値和を計算していることになる。
【0157】
先行技術文献においては、bdofBlkDiffは、PredL0とPredL1の差分絶対値和を右シフトせずに直接求めていた。しかし、本実施の形態では、後述するBDOF部30954の相関パラメータ計算部309544で計算するtheta[x][y]の差分の計算(式BDOF-2)と同一にしており、フラグ設定部309542による閾値判定と、BDOF部30954の予測画像導出とで処理を共有することができる。この結果、先行技術文献では、フラグ設定部309542の計算は、単純に追加の演算量を必要としたが、本実施の形態では、差分の計算を共有できることから、追加部分は、絶対値和を求める部分のみになるため、演算量を大幅に削減できる。
【0158】
bdofUtilizationFlag[xIdx][yIdx]は、bdofBlkSumDiffがbdofBlkDiffThres以上の場合、TRUEに設定し、そうでない場合、FALSEとする。
【0159】
また、sbSumDiffの値は、bdofBlkSumDiffの合計値とする。
【0160】
最後に、sbBdofFlagは、もし、sbSumDiffがsbDiffThresより小さい場合、FALSEに設定し、そうでない場合は、TRUEに設定する。
【0161】
差分の計算を共有することから、このような構成により、フラグ設定部309542では、sbBdofFlagと、bdofUtilizationFlag[xIdx][yIdx]の値の設定をより少ない処理量を行うことができる。
【0162】
フラグ設定部309542の別の実施の形態としては、bdofBlkSumDiffを下式で計算する。
【0163】
bdofBlkSumDiff
= sum42(Abs((PredL0[(xIdx<<2)+1+i][(yIdx<<2)+1+2*j]>>shift4)
?(PredL1[(xIdx<<2)+1+i][(yIdx<<2)+1+2*j]>>shift4)))
ここで、sum42()は、i=0..3、j=0..1の引数で4x2画素ブロックの合計を求める関数である。bdofBlkSumDiffは1ライン飛ばしの4x2画素の差分絶対値和としてもよい。この場合、sbDiffThres、bdofBlkDiffThresは、前記の実施例の半分の値を用いることにし、下記のように設定する。
【0164】
sbDiffThres = 2 * sbWidth*sbHeight
bdofBlkDiffThres = 64
このような構成にすることにより、bdofBlkSumDiffの計算量を半分にすることができる。予測画像生成に直接影響する演算ではないため、処理削減による性能低下はほとんど生じない。
【0165】
図13は、BDOF部30954が予測画像を生成する処理を説明するプローチャートである。まず、フラグ設定(S201)で、サブブロック単位のBDOF処理を行うか否かを示すフラグsbBdofFlagと、4x4画素単位でのBDOF処理を行うか否かを示すフラグbdofUtilizationFlag[xIdx][yIdx]の値の設定を行う。次に、sbBdofFlagの判定(S202)を行い、FALSEならば、サブブロック単位双方向予測画像生成(S203)を行い、TRUEならば、サブブロック単位のBDOF処理(S204)-(S210)を行う。Loop1((S204)から(S210))は、垂直方向のアドレスのループであり、Loop2((S205)から(S209))は、水平方向のアドレスのループである。bdofUtilizationFlag[xIdx][yIdx]の判定(S206)を行い、FALSEならば、4x4画素単位双方向予測画像生成(S207)を行い、TRUEならば、4x4画素単位BDOF処理(S208)を行う。
【0166】
この流れ図では、サブブロック単位と、4x4画素ブロック単位の2段階でBDOF処理を行うか否かを判定していたが、サブブロック単位だけ、或いは、4x4画素ブロック単位のみでも実現してもよい。
【0167】
勾配画像生成部309543では勾配画像を生成する。勾配変化(Optical Flow)では、各点の画素値は変化せず、その位置のみが変化すると仮定する。これは、水平方向の画素値Iの変化(水平勾配値lx)とその位置の変化Vx、及び垂直方向の画素値Iの変化(垂直勾配値ly)とその位置の変化Vy、画素値Iの時間変化ltを用いて、下記で表すことができる。
【0168】
lx * Vx + ly * Vy + lt = 0
以降では位置の変化(Vx,Vy)を補正重みベクトル(u,v)と呼ぶ。
【0169】
具体的には、勾配画像生成部309543は、以下の式から勾配画像lx0、ly0、lx1、ly1を導出する。lx0及びlx1は水平方向に沿った勾配を示し、ly0及びly1は垂直方向に沿った勾配を示す。
【0170】
具体的には、勾配画像生成部309543は、勾配画像lx0、ly0、lx1、ly1の導出を、以下の
ように行う。
【0171】
lx0[x][y] = (PredL0[x+1][y]-PredL0[x-1][y])>>shift0 (式BDOF-3)
ly0[x][y] = (PredL0[x][y+1]-PredL0[x][y-1])>>shift0
lx1[x][y] = (PredL1[x+1][y]-PredL1[x-1][y])>>shift0
ly1[x][y] = (PredL1[x][y+1]-PredL1[x][y-1])>>shift0
ここで、shift0=14-InternalBitDepthである。
【0172】
勾配画像lx0、ly0、lx1、ly1の導出の別の方法としては、下式のように設定してもよい。
【0173】
lx0[x][y] = (PredL0[x+1][y]>>shift0)-(PredL0[x-1][y]>>shift0) (式BDOF-4)
ly0[x][y] = (PredL0[x][y+1]>>shift0)-(PredL0[x][y-1]>>shift0)
lx1[x][y] = (PredL1[x+1][y]>>shift0)-(PredL1[x-1][y]>>shift0)
ly1[x][y] = (PredL1[x][y+1]>>shift0)-(PredL1[x][y-1]>>shift0)
(式BDOF-3)の場合、PredL0とPredL1の最小値と最大値の範囲が16ビットとすると、差分が17ビットとなるため、32ビット演算が必要とされるが、(式BDOF-4)の場合、先に右シフトを行うため、すべての演算が16ビット演算で実行できるため、並列演算命令が使いやすいという利点がある。
【0174】
いずれの場合も、HEVCと同様の補間フィルタを用いる場合、PredL0とPredL1の値は、bitDepthが8から12ビットの範囲ならば、演算精度は14ビットであり、最小値と最大値の範囲は、16ビットである。もし、bitDepthが12より大きい場合、演算精度は(bitDepth+2)ビットであり、最小値と最大値の範囲は、(bitDepth+4)ビットとなる。本実施形態では、InternalBitDepthに応じた値であるshift0だけ右シフトする。そのため、勾配画像lx0、ly0、lx1、ly1の演算精度は、BitDedepthが8以上12以下の場合は(InternalBitDepth+1)ビットとなり、bitDepthが13以上の場合は、(bitDepth+InternalBitDepth-11)となる。
【0175】
次に、相関パラメータ計算部309544は、サブブロック内の4x4画素のブロック毎に勾配積和s1,s2,s3,s5,s6を導出する。ここでは、ブロックの周囲1画素をさらに用いて6x6画素のブロックの画素でのsumからs1,s2,s3,s5,s6を計算する。
【0176】
s1 = sum6(phiX[x][y]* phiX[x][y])
s2 = sum6(phiX[x][y]* phiY[x][y])
s3 = sum6(-theta[x][y]* phiX[x][y])
s5 = sum6(phiY[x][y]* phiY[x][y])
s6 = sum6(-theta[x][y]* phiY[x][y])
ここで、sum(a)は6x6画素のブロック内の座標(x,y)に対するaの総和を表す。
【0177】
theta[x][y]= -(PredL1[x][y]>>shift4)+(PredL0[x][y]>>shift4) (式BDOF-2)
phiX[x][y] = (lx1[x][y] + lx0[x][y])>>shift5
phiY[x][y] = (ly1[x][y] + ly0[x][y])>>shift5
つまり、PredL0[x][y]をshift4によりシフトした値と、PredL1[x][y]をshift4によりシフトした値との差分からtheta[x][y]を導出する。これは、(式BDOF-1)において計算する差分値と同じである。
ここで、shift4、shift5は以下で導出する。
【0178】
shift4=Max(InternalBitDepth-4, bitDept+InternalBitDepth-16)
shift5=Max(InternalBitDepth-7, bitDepth+InternalBitDepth-19)
なお、(式BDOF-2)において、(x, y)の代わりにCUのサイズ(nCbW, nCbH)でクリップした
値(hx, vy)を用いてもよい。この場合、境界を超える画素はパディングで導出される。また、x, yは各々x=xSb-1..xSb+4, y=ySb-1..ySb+4の範囲であってもよい。
【0179】
xSb = (xIdx<<2)+1, ySb = (yIdx<<2)+1
hx = Clip3( 1, nCbW, x )
vy = Clip3( 1, nCbH, y )
この時、thetaの値の演算精度は、bitDepthが8以上ならば常に、(19-InternalBitDepth)ビットとなる。また、画像のbitDepthが8以上ならば、phiXとphiYの演算精度は常に9ビットとなる。そこで、6x6画素のブロックの合計となるs1,s2,s5の演算精度は、bitDepthにかかわらず、23ビット程度である。また、同様に、6x6画素のブロックの合計となるs3,s6の演算精度は、(33-InternalBitDepth)ビット程度である。PredL0とPredL1の最小値、最大値は、bitDepthが8以上12以下の場合、16ビットの範囲であり、bitDepthが13ビット以上の場合、(bitDepth+4)ビットの範囲なので、32ビット整数演算で実現できる。
【0180】
より具体的に、InternalBitDepth=8とした場合は下式で実現する。
【0181】
shift0=6
shift4=Max(4, bitDepth-8)
shift5=Max(1, bitDepth-11)
InternalBitDepth=7とした場合には下式で実現する。
【0182】
shift0=7
shift4=Max(3, bitDepth-9)
shift5=Max(0, bitDepth-12)
相関パラメータ計算部309544の別の構成としては、勾配積和s1,s2,s3,s5,s6は、6x6画素のブロックでなく、4x4画素のブロックで求めてもよい。4x4=16画素のブロックとなるため、6x6=36画素の合計と比べてsumの計算に必要な演算ビットが(Ceil(log2(36))-Ceil(log2(16)))=2ビット少なくてもすむ。
【0183】
shift4=Max(InternalBitDepth-5, bitDept+InternalBitDepth-15)
shift5=Max(InternalBitDepth-8, bitDepth+InternalBitDepth-18)
そのため、上式のようにそれぞれ1ビット小さい値を用いても、32ビット整数演算で実現できる。但し、この場合、InternalBitDepthの値は、8以上12以下とする。また、勾配積和の演算量も削減できる。
図15のように、BDOF処理の単位と読み込み領域が一致するため、
図14の場合と異なり、対象となるサブブロックの周囲1画素分のパディング領域は不要となる。
【0184】
次に、動き補償修正値導出部309545は、導出した勾配積和s1,s2,s3,s5,s6を用いて、4x4画素単位の補正重みベクトル(u, v)を導出する。
【0185】
u = (s3<<3) >> floor(log2(s1))
v = ((s6<<3)-((((u*s2m)<<12)+u*s2s)>>1)) >> floor(log2(s5))
ここでs2m=s2>>12、s2s=s2&((1<<12)-1)である。
【0186】
なお、以下のようにさらにクリップを用いてu, vの範囲を制限しても良い。
【0187】
u=s1>0?Clip3(-th,th,-(s3<<3)>>floor(log2(s1))):0
v=s5>0?Clip3(-th,th,((s6<<3)-((((u*s2m)<<12)+u*s2s)>>1))>>floor(log2(s5))):0
ここで、thは下式で表現される。
【0188】
th = Max(2, 1<<(13-InternalBitDepth))
thはbitDepthとは独立の値になることから、画素単位の補正重みベクトル(u, v)は、InternalBitDepthに関連した値でクリッピングされることになる。画素ビット長bitDepthにかかわらず、例えば、InternalBitDepth=8とすると、th=1<<(13-8)=32となる。また、InternalBitDepth=7とすると、th=1<<(13-7)=64となる。
【0189】
この時、画素単位の補正重みベクトル(u, v)は、動きベクトルの精度や、量子化幅に関係する値とも考えられることから、補正重みベクトル(u, v)の制限するためのしきい値thは、下式のように量子化幅Qpの関数で表現してもよい。
【0190】
th0 = Max(1, 1<<(12-InternalBitDepth))
th = th0 +floor((Qp-32)/6)
なお、勾配積和s3とs6の左3ビットシフトを行わず、下式で導出してもよい。
【0191】
u = s3 >> floor(log2(s1))
v = (s6-((((u*s2m)<<12)+u*s2s)>>1))>> floor(log2(s5))
但し、shift4は下式で導出する。
【0192】
shift4=Max(InternalBitDepth-7, bitDepth+InternalBitDepth-19)
この場合、shift0及びshift5の変更は必要ない。具体的に、InternalBitDepth=8の場合、shift4は下式で導出する。
【0193】
shift4=Max(1, bitDepth-11)
動き補償修正値導出部309545は、4x4画素単位の補正重みベクトル(u, v)と勾配画像lx0、ly0、lx1、ly1を用いて、動き補償修正値bdofOffsetを導出する。
【0194】
bdofOffset[x][y]=((lx1[x][y]-lx0[x][y])*u+(ly1[x][y]-ly0[x][y])*v+1)>>1
あるいはラウンド関数を用いて、bdofOffsetを以下のように導出してもよい。
【0195】
bdofOffset[x][y] = Round(((lx1[x][y]-lx0[x][y])*u)>>1)+Round(((ly1[x][y]-ly0[x][y])*v)>>1)
あるいは、勾配画像lx0、ly0、lx1、ly1の右シフト値のshift0の値を工夫することで、以下のように、右シフトやラウンド関数を用いずに導出することもできる。
【0196】
bdofOffset[x][y]=(lx1[x][y]-lx0[x][y])*u+(ly1[x][y]-ly0[x][y])*v
shift0=15-InternalBitDepth
shift5=Max(InternalBitDepth-8, bitDepth+InternalBitDepth-20)
この場合、InternalBitDepthの選択範囲は、8以上12以下で、shift4の変更は必要ない。具体的に、InternalBitDepth=8の場合は、下式となる。
【0197】
shift0=7
shift5=Max(0, bitDepth-12)
双方向予測画像生成部309546は、上記のパラメータを用いて下式により、4x4画素の予測画像の画素値Predを導出する。
【0198】
Pred[x][y] = Clip3(0, (1<<bitDepth)-1,( PredL0[x][y]+PredL1[x][y]+bdofOffset[x][y]+offset2)>>shift2)
ここで、shift2=Max(3,15-bitDepth)、offset2=1<<(shift2-1)である。
【0199】
以上のような構成であれば、サブブロック単位でのBDOF処理を行うか否かと示すフラグ
や、4x4画素単位でBDOF処理を行うか否かを示すフラグの設定のための演算量を抑えることができる。
【0200】
(動画像符号化装置の構成)
次に、本実施形態に係る動画像符号化装置11の構成について説明する。
図16は、本実施形態に係る動画像符号化装置11の構成を示すブロック図である。動画像符号化装置11は、予測画像生成部101、減算部102、変換・量子化部103、逆量子化・逆変換部105、加算部106、ループフィルタ107、予測パラメータメモリ(予測パラメータ記憶部、フレームメモリ)108、参照ピクチャメモリ(参照画像記憶部、フレームメモリ)109、符号化パラメータ決定部110、パラメータ符号化部111、エントロピー符号化部104を含んで構成される。
【0201】
予測画像生成部101は画像Tの各ピクチャを分割した領域であるCU毎に予測画像を生成する。予測画像生成部101は既に説明した予測画像生成部308と同じ動作であり、説明を省略する。
【0202】
減算部102は、予測画像生成部101から入力されたブロックの予測画像の画素値を、画像Tの画素値から減算して予測誤差を生成する。減算部102は予測誤差を変換・量子化部103に出力する。
【0203】
変換・量子化部103は、減算部102から入力された予測誤差に対し、周波数変換によって変換係数を算出し、量子化によって量子化変換係数を導出する。変換・量子化部103は、量子化変換係数をエントロピー符号化部104及び逆量子化・逆変換部105に出力する。
【0204】
逆量子化・逆変換部105は、動画像復号装置31における逆量子化・逆変換部311(
図7)と同じであり、説明を省略する。算出した予測誤差は加算部106に出力される。
【0205】
エントロピー符号化部104には、変換・量子化部103から量子化変換係数が入力され、パラメータ符号化部111から符号化パラメータが入力される。符号化パラメータには、例えば、参照ピクチャインデックスrefIdxLX、予測ベクトルインデックスmvp_LX_idx、差分ベクトルmvdLX、動きベクトル精度モードamvr_mode、予測モードpredMode、及びマージインデックスmerge_idx等の符号がある。
【0206】
エントロピー符号化部104は、分割情報、予測パラメータ、量子化変換係数等をエントロピー符号化して符号化ストリームTeを生成し、出力する。
【0207】
パラメータ符号化部111は、図示しないヘッダ符号化部1110、CT情報符号化部1111、CU符号化部1112(予測モード符号化部)、およびインター予測パラメータ符号化部112とイントラ予測パラメータ符号化部113を備えている。CU符号化部1112はさらにTU符号化部1114を備えている。
【0208】
以下、各モジュールの概略動作を説明する。パラメータ符号化部111はヘッダ情報、分割情報、予測情報、量子化変換係数等のパラメータの符号化処理を行う。
【0209】
CT情報符号化部1111は、符号化データからQT、MT(BT、TT)分割情報等を符号化する。
【0210】
CU符号化部1112はCU情報、予測情報、TU分割フラグsplit_transform_flag、CU残差フラグcbf_cb、cbf_cr、cbf_luma等を符号化する。
【0211】
TU符号化部1114は、TUに予測誤差が含まれている場合に、QP更新情報(量子化補正値)と量子化予測誤差(residual_coding)を符号化する。
【0212】
CT情報符号化部1111、CU符号化部1112は、インター予測パラメータ(予測モードpredMode、マージフラグmerge_flag、マージインデックスmerge_idx、インター予測識別子inter_pred_idc、参照ピクチャインデックスrefIdxLX、予測ベクトルインデックスmvp_LX_idx、差分ベクトルmvdLX)、イントラ予測パラメータ、量子化変換係数等のシンタックス要素をエントロピー符号化部104に供給する。
【0213】
(インター予測パラメータ符号化部の構成)
パラメータ符号化部112は、符号化パラメータ決定部110から入力された予測パラメータに基づいて、インター予測パラメータを導出する。パラメータ符号化部112は、インター予測パラメータ復号部303がインター予測パラメータを導出する構成と一部同一の構成を含む。
【0214】
予測パラメータ符号化部112の構成について説明する。
図17示すように、パラメータ符号化制御部1121、マージ予測部30374、サブブロック予測部(アフィン予測部)30372、DMVR部30375、MMVD予測部30376、Triangle予測部30377、AMVP予測パラメータ導出部3032、減算部1123を含んで構成される。マージ予測部30374は、マージ予測パラメータ導出部3036を備えている。パラメータ符号化制御部1121は、マージインデックス導出部11211とベクトル候補インデックス導出部11212を含む。また、パラメータ符号化制御部1121は、マージインデックス導出部11211でmerge_idx、affine_flag、base_candidate_idx、distance_idx、direction_idx等を導出し、ベクトル候補インデックス導出部11212でmvpLX等を導出する。マージ予測パラメータ導出部3036、AMVP予測パラメータ導出部3032、アフィン予測部30372、MMVD予測部30376、Triangle予測部30377を総称して動きベクトル導出部(動きベクトル導出装置)と称してもよい。パラメータ符号化部112は、動きベクトル(mvLX、subMvLX)、参照ピクチャインデックスrefIdxLX、インター予測識別子inter_pred_idc、あるいはこれらを示す情報を予測画像生成部101に出力する。またパラメータ符号化部112は、merge_flag、skip_flag、merge_idx、inter_pred_idc、refIdxLX、mvp_lX_idx、mvdLX、amvr_mode、affine_flagをエントロピー符号化部104に出力する。
【0215】
マージインデックス導出部11211は、マージインデックスmerge_idxを導出し、マージ予測パラメータ導出部3036(マージ予測部)に出力する。ベクトル候補インデックス導出部11212は予測ベクトルインデックスmvp_lX_idxを導出する。
【0216】
マージ予測パラメータ導出部3036は、マージインデックスmerge_idxに基づいて、インター予測パラメータを導出する。
【0217】
AMVP予測パラメータ導出部3032は動きベクトルmvLXに基づいて予測ベクトルmvpLXを導出する。AMVP予測パラメータ導出部3032は予測ベクトルmvpLXを減算部1123に出力する。なお、参照ピクチャインデックスrefIdxLX及び予測ベクトルインデックスmvp_lX_idxは、エントロピー符号化部104に出力される。
【0218】
アフィン予測部30372は、サブブロックのインター予測パラメータ(アフィン予測パラメータ)を導出する。
【0219】
減算部1123は、符号化パラメータ決定部110から入力された動きベクトルmvLXから、AMVP予測パラメータ導出部3032の出力である予測ベクトルmvpLXを減算して差分ベクトルmvdLXを生成する。差分ベクトルmvdLXはエントロピー符号化部104に出力される。
【0220】
加算部106は、予測画像生成部101から入力されたブロックの予測画像の画素値と逆量子化・逆変換部105から入力された予測誤差を画素毎に加算して復号画像を生成する。加算
部106は生成した復号画像を参照ピクチャメモリ109に記憶する。
【0221】
ループフィルタ107は加算部106が生成した復号画像に対し、デブロッキングフィルタ、SAO、ALFを施す。なお、ループフィルタ107は、必ずしも上記3種類のフィルタを含まなくてもよく、例えばデブロッキングフィルタのみの構成であってもよい。
【0222】
予測パラメータメモリ108は、符号化パラメータ決定部110が生成した予測パラメータを、対象ピクチャ及びCU毎に予め定めた位置に記憶する。
【0223】
参照ピクチャメモリ109は、ループフィルタ107が生成した復号画像を対象ピクチャ及びCU毎に予め定めた位置に記憶する。
【0224】
符号化パラメータ決定部110は、符号化パラメータの複数のセットのうち、1つのセットを選択する。符号化パラメータとは、上述したQT、BTあるいはTT分割情報、予測パラメータ、あるいはこれらに関連して生成される符号化の対象となるパラメータである。予測画像生成部101は、これらの符号化パラメータを用いて予測画像を生成する。
【0225】
符号化パラメータ決定部110は、複数のセットの各々について情報量の大きさと符号化誤差を示すRDコスト値を算出する。符号化パラメータ決定部110は、算出したコスト値が最小となる符号化パラメータのセットを選択する。これにより、エントロピー符号化部104は、選択した符号化パラメータのセットを符号化ストリームTeとして出力する。符号化パラメータ決定部110は決定した符号化パラメータを予測パラメータメモリ108に記憶する。
【0226】
なお、上述した実施形態における動画像符号化装置11、動画像復号装置31の一部、例えば、エントロピー復号部301、パラメータ復号部302、ループフィルタ305、予測画像生成部308、逆量子化・逆変換部311、加算部312、予測画像生成部101、減算部102、変換・量子化部103、エントロピー符号化部104、逆量子化・逆変換部105、ループフィルタ107、符号化パラメータ決定部110、パラメータ符号化部111をコンピュータで実現するようにしても良い。その場合、この制御機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによって実現しても良い。なお、ここでいう「コンピュータシステム」とは、動画像符号化装置11、動画像復号装置31のいずれかに内蔵されたコンピュータシステムであって、OSや周辺機器等のハードウェアを含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD-ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間、動的にプログラムを保持するもの、その場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含んでも良い。また上記プログラムは、前述した機能の一部を実現するためのものであっても良く、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであっても良い。
【0227】
また、上述した実施形態における動画像符号化装置11、動画像復号装置31の一部、または全部を、LSI(Large Scale Integration)等の集積回路として実現しても良い。動画像符号化装置11、動画像復号装置31の各機能ブロックは個別にプロセッサ化しても良いし、一部、または全部を集積してプロセッサ化しても良い。また、集積回路化の手法はLSIに限らず専用回路、または汎用プロセッサで実現しても良い。また、半導体技術の進歩によりLSIに代替する集積回路化の技術が出現した場合、当該技術による集積回路を用い
ても良い。
【0228】
以上、図面を参照してこの発明の一実施形態について詳しく説明してきたが、具体的な構成は上述のものに限られることはなく、この発明の要旨を逸脱しない範囲内において様々な設計変更等をすることが可能である。
【0229】
〔応用例〕
上述した動画像符号化装置11及び動画像復号装置31は、動画像の送信、受信、記録、再生を行う各種装置に搭載して利用することができる。なお、動画像は、カメラ等により撮像された自然動画像であってもよいし、コンピュータ等により生成された人工動画像(CGおよびGUIを含む)であってもよい。
【0230】
まず、上述した動画像符号化装置11及び動画像復号装置31を、動画像の送信及び受信に利用できることを、
図2を参照して説明する。
【0231】
図2(a)は、動画像符号化装置11を搭載した送信装置PROD_Aの構成を示したブロック図である。図に示すように、送信装置PROD_Aは、動画像を符号化することによって符号化データを得る符号化部PROD_A1と、符号化部PROD_A1が得た符号化データで搬送波を変調することによって変調信号を得る変調部PROD_A2と、変調部PROD_A2が得た変調信号を送信する送信部PROD_A3と、を備えている。上述した動画像符号化装置11は、この符号化部PROD_A1として利用される。
【0232】
送信装置PROD_Aは、符号化部PROD_A1に入力する動画像の供給源として、動画像を撮像するカメラPROD_A4、動画像を記録した記録媒体PROD_A5、動画像を外部から入力するための入力端子PROD_A6、及び、画像を生成または加工する画像処理部A7を更に備えていてもよい。図においては、これら全てを送信装置PROD_Aが備えた構成を例示しているが、一部を省略しても構わない。
【0233】
なお、記録媒体PROD_A5は、符号化されていない動画像を記録したものであってもよいし、伝送用の符号化方式とは異なる記録用の符号化方式で符号化された動画像を記録したものであってもよい。後者の場合、記録媒体PROD_A5と符号化部PROD_A1との間に、記録媒体PROD_A5から読み出した符号化データを記録用の符号化方式に従って復号する復号部(不図示)を介在させるとよい。
【0234】
図2(b)は、動画像復号装置31を搭載した受信装置PROD_Bの構成を示したブロック図である。図に示すように、受信装置PROD_Bは、変調信号を受信する受信部PROD_B1と、受信部PROD_B1が受信した変調信号を復調することによって符号化データを得る復調部PROD_B2と、復調部PROD_B2が得た符号化データを復号することによって動画像を得る復号部PROD_B3と、を備えている。上述した動画像復号装置31は、この復号部PROD_B3として利用される。
【0235】
受信装置PROD_Bは、復号部PROD_B3が出力する動画像の供給先として、動画像を表示するディスプレイPROD_B4、動画像を記録するための記録媒体PROD_B5、及び、動画像を外部に出力するための出力端子PROD_B6を更に備えていてもよい。図においては、これら全てを受信装置PROD_Bが備えた構成を例示しているが、一部を省略しても構わない。
【0236】
なお、記録媒体PROD_B5は、符号化されていない動画像を記録するためのものであってもよいし、伝送用の符号化方式とは異なる記録用の符号化方式で符号化されたものであってもよい。後者の場合、復号部PROD_B3と記録媒体PROD_B5との間に、復号部PROD_B3から取得した動画像を記録用の符号化方式に従って符号化する符号化部(不図示)を介在させ
るとよい。
【0237】
なお、変調信号を伝送する伝送媒体は、無線であってもよいし、有線であってもよい。また、変調信号を伝送する伝送態様は、放送(ここでは、送信先が予め特定されていない送信態様を指す)であってもよいし、通信(ここでは、送信先が予め特定されている送信態様を指す)であってもよい。すなわち、変調信号の伝送は、無線放送、有線放送、無線通信、及び有線通信の何れによって実現してもよい。
【0238】
例えば、地上デジタル放送の放送局(放送設備など)/受信局(テレビジョン受像機など)は、変調信号を無線放送で送受信する送信装置PROD_A/受信装置PROD_Bの一例である。また、ケーブルテレビ放送の放送局(放送設備など)/受信局(テレビジョン受像機など)は、変調信号を有線放送で送受信する送信装置PROD_A/受信装置PROD_Bの一例である。
【0239】
また、インターネットを用いたVOD(Video On Demand)サービスや動画共有サービスなどのサーバ(ワークステーションなど)/クライアント(テレビジョン受像機、パーソナルコンピュータ、スマートフォンなど)は、変調信号を通信で送受信する送信装置PROD_A/受信装置PROD_Bの一例である(通常、LANにおいては伝送媒体として無線または有線の何れかが用いられ、WANにおいては伝送媒体として有線が用いられる)。ここで、パーソナルコンピュータには、デスクトップ型PC、ラップトップ型PC、及びタブレット型PCが含まれる。また、スマートフォンには、多機能携帯電話端末も含まれる。
【0240】
なお、動画共有サービスのクライアントは、サーバからダウンロードした符号化データを復号してディスプレイに表示する機能に加え、カメラで撮像した動画像を符号化してサーバにアップロードする機能を有している。すなわち、動画共有サービスのクライアントは、送信装置PROD_A及び受信装置PROD_Bの双方として機能する。
【0241】
次に、上述した動画像符号化装置11及び動画像復号装置31を、動画像の記録及び再生に利用できることを、
図3を参照して説明する。
【0242】
図3(a)は、上述した動画像符号化装置11を搭載した記録装置PROD_Cの構成を示したブロック図である。図に示すように、記録装置PROD_Cは、動画像を符号化することによって符号化データを得る符号化部PROD_C1と、符号化部PROD_C1が得た符号化データを記録媒体PROD_Mに書き込む書込部PROD_C2と、を備えている。上述した動画像符号化装置11は、この符号化部PROD_C1として利用される。
【0243】
なお、記録媒体PROD_Mは、(1)HDD(Hard Disk Drive)やSSD(Solid State Drive)などのように、記録装置PROD_Cに内蔵されるタイプのものであってもよいし、(2)SDメモリカードやUSB(Universal Serial Bus)フラッシュメモリなどのように、記録装置PROD_Cに接続されるタイプのものであってもよいし、(3)DVD(Digital Versatile Disc:登録商標)やBD(Blu-ray Disc:登録商標)などのように、記録装置PROD_Cに内蔵されたドライブ装置(不図示)に装填されるものであってもよい。
【0244】
また、記録装置PROD_Cは、符号化部PROD_C1に入力する動画像の供給源として、動画像を撮像するカメラPROD_C3、動画像を外部から入力するための入力端子PROD_C4、動画像を受信するための受信部PROD_C5、及び、画像を生成または加工する画像処理部PROD_C6を更に備えていてもよい。図においては、これら全てを記録装置PROD_Cが備えた構成を例示しているが、一部を省略しても構わない。
【0245】
なお、受信部PROD_C5は、符号化されていない動画像を受信するものであってもよいし
、記録用の符号化方式とは異なる伝送用の符号化方式で符号化された符号化データを受信するものであってもよい。後者の場合、受信部PROD_C5と符号化部PROD_C1との間に、伝送用の符号化方式で符号化された符号化データを復号する伝送用復号部(不図示)を介在させるとよい。
【0246】
このような記録装置PROD_Cとしては、例えば、DVDレコーダ、BDレコーダ、HDD(Hard Disk Drive)レコーダなどが挙げられる(この場合、入力端子PROD_C4または受信部PROD_C5が動画像の主な供給源となる)。また、カムコーダ(この場合、カメラPROD_C3が動画像の主な供給源となる)、パーソナルコンピュータ(この場合、受信部PROD_C5または画像処理部C6が動画像の主な供給源となる)、スマートフォン(この場合、カメラPROD_C3または受信部PROD_C5が動画像の主な供給源となる)なども、このような記録装置PROD_Cの一例である。
【0247】
図3(b)は、上述した動画像復号装置31を搭載した再生装置PROD_Dの構成を示したブロックである。図に示すように、再生装置PROD_Dは、記録媒体PROD_Mに書き込まれた符号化データを読み出す読出部PROD_D1と、読出部PROD_D1が読み出した符号化データを復号することによって動画像を得る復号部PROD_D2と、を備えている。上述した動画像復号装置31は、この復号部PROD_D2として利用される。
【0248】
なお、記録媒体PROD_Mは、(1)HDDやSSDなどのように、再生装置PROD_Dに内蔵されるタイプのものであってもよいし、(2)SDメモリカードやUSBフラッシュメモリなどのように、再生装置PROD_Dに接続されるタイプのものであってもよいし、(3)DVDやBDなどのように、再生装置PROD_Dに内蔵されたドライブ装置(不図示)に装填されるものであってもよい。
【0249】
また、再生装置PROD_Dは、復号部PROD_D2が出力する動画像の供給先として、動画像を表示するディスプレイPROD_D3、動画像を外部に出力するための出力端子PROD_D4、及び、動画像を送信する送信部PROD_D5を更に備えていてもよい。図においては、これら全てを再生装置PROD_Dが備えた構成を例示しているが、一部を省略しても構わない。
【0250】
なお、送信部PROD_D5は、符号化されていない動画像を送信するものであってもよいし、記録用の符号化方式とは異なる伝送用の符号化方式で符号化された符号化データを送信するものであってもよい。後者の場合、復号部PROD_D2と送信部PROD_D5との間に、動画像を伝送用の符号化方式で符号化する符号化部(不図示)を介在させるとよい。
【0251】
このような再生装置PROD_Dとしては、例えば、DVDプレイヤ、BDプレイヤ、HDDプレイヤなどが挙げられる(この場合、テレビジョン受像機等が接続される出力端子PROD_D4が動画像の主な供給先となる)。また、テレビジョン受像機(この場合、ディスプレイPROD_D3が動画像の主な供給先となる)、デジタルサイネージ(電子看板や電子掲示板等とも称され、ディスプレイPROD_D3または送信部PROD_D5が動画像の主な供給先となる)、デスクトップ型PC(この場合、出力端子PROD_D4または送信部PROD_D5が動画像の主な供給先となる)、ラップトップ型またはタブレット型PC(この場合、ディスプレイPROD_D3または送信部PROD_D5が動画像の主な供給先となる)、スマートフォン(この場合、ディスプレイPROD_D3または送信部PROD_D5が動画像の主な供給先となる)なども、このような再生装置PROD_Dの一例である。
【0252】
(ハードウェア的実現およびソフトウェア的実現)
また、上述した動画像復号装置31および動画像符号化装置11の各ブロックは、集積回路(ICチップ)上に形成された論理回路によってハードウェア的に実現してもよいし、CPU(Central Processing Unit)を用いてソフトウェア的に実現してもよい。
【0253】
後者の場合、上記各装置は、各機能を実現するプログラムの命令を実行するCPU、上記プログラムを格納したROM(Read Only Memory)、上記プログラムを展開するRAM(Random
Access Memory)、上記プログラムおよび各種データを格納するメモリ等の記憶装置(記録媒体)などを備えている。そして、本発明の実施形態の目的は、上述した機能を実現するソフトウェアである上記各装置の制御プログラムのプログラムコード(実行形式プログラム、中間コードプログラム、ソースプログラム)をコンピュータで読み取り可能に記録した記録媒体を、上記各装置に供給し、そのコンピュータ(またはCPUやMPU)が記録媒体に記録されているプログラムコードを読み出し実行することによっても、達成可能である。
【0254】
上記記録媒体としては、例えば、磁気テープやカセットテープ等のテープ類、フロッピー(登録商標)ディスク/ハードディスク等の磁気ディスクやCD-ROM(Compact Disc Read-Only Memory)/MOディスク(Magneto-Optical disc)/MD(Mini Disc)/DVD(Digital Versatile Disc:登録商標)/CD-R(CD Recordable)/ブルーレイディスク(Blu-ray Disc:登録商標)等の光ディスクを含むディスク類、ICカード(メモリカードを含む)/光カード等のカード類、マスクROM/EPROM(Erasable Programmable Read-Only Memory)/EEPROM(Electrically Erasable and Programmable Read-Only Memory:登録商標)/フラッシュROM等の半導体メモリ類、あるいはPLD(Programmable logic device)やFPGA(Field Programmable Gate Array)等の論理回路類などを用いることができる。
【0255】
また、上記各装置を通信ネットワークと接続可能に構成し、上記プログラムコードを通信ネットワークを介して供給してもよい。この通信ネットワークは、プログラムコードを伝送可能であればよく、特に限定されない。例えば、インターネット、イントラネット、エキストラネット、LAN(Local Area Network)、ISDN(Integrated Services Digital Network)、VAN(Value-Added Network)、CATV(Community Antenna television/Cable Television)通信網、仮想専用網(Virtual Private Network)、電話回線網、移動体通信網、衛星通信網等が利用可能である。また、この通信ネットワークを構成する伝送媒体も、プログラムコードを伝送可能な媒体であればよく、特定の構成または種類のものに限定されない。例えば、IEEE(Institute of Electrical and Electronic Engineers)1394、USB、電力線搬送、ケーブルTV回線、電話線、ADSL(Asymmetric Digital Subscriber Line)回線等の有線でも、IrDA(Infrared Data Association)やリモコンのような赤外線、BlueTooth(登録商標)、IEEE802.11無線、HDR(High Data Rate)、NFC(Near Field Communication)、DLNA(Digital Living Network Alliance:登録商標)、携帯電話網、衛星回線、地上デジタル放送網等の無線でも利用可能である。なお、本発明の実施形態は、上記プログラムコードが電子的な伝送で具現化された、搬送波に埋め込まれたコンピュータデータ信号の形態でも実現され得る。
【0256】
本発明の実施形態は上述した実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能である。すなわち、請求項に示した範囲で適宜変更した技術的手段を組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。