本明細書で使われる用語は、本開示における機能を考慮する上に、可能な限り、現在広く使われている一般的な用語を選択したが、これは、当分野に従事する技術者の意図、慣例又は新しい技術の出現などによって変わってよい。また、特定の場合は、出願人が任意に選定した用語もあり、この場合、該当する発明の説明部分においてその意味が記載されるであろう。したがって、本明細書で使われる用語は、単純な用語の名称ではなくその用語の持つ実質的な意味と本明細書全般にわたる内容に基づいて解釈されるべきということは明らかである。
本明細書において一部の用語は次のように解釈されてよい。コーディングは、場合によって、エンコーディング又はデコーディングと解釈されてよい。本明細書において、ビデオ信号のエンコーディング(符号化)を行ってビデオ信号ビットストリームを生成する装置は、エンコーディング装置或いはエンコーダと称され、ビデオ信号ビットストリームのデコーディング(復号化)を行ってビデオ信号を復元する装置は、デコーディング装置或いはデコーダと称される。また、本明細書において、ビデオ信号処理装置は、エンコーダ及びデコーダの両方を含む概念の用語として使われる。情報(information)は、値(values)、パラメータ(parameter)、係数(coefficients)、成分(elements)などのいずれをも含む用語であり、場合によって異なる意味で解釈されてよいので、本開示はこれに限定されない。「ユニット」は、映像処理の基本単位又はピクチャーの特定の位置のことを指す意味で使われ、ルマ(luma)成分とクロマ(chroma)成分の両方を含むイメージ領域のことを指す。また、「ブロック」は、ルマ成分及びクロマ成分(すなわち、Cb及びCr)のうち特定の成分を含むイメージ領域のことを指す。ただし、実施例によって「ユニット」、「ブロック」、「パーティション」及び「領域」などの用語は、同じ意味で使われてもよい。また、本明細書において、ユニットは、コーディングユニット、予測ユニット、変換ユニットのいずれをも含む概念で使われてよい。ピクチャーは、フィールド或いはフレームのことを指し、それらの用語は実施例によって同じ意味で使われてよい。
図1は、本開示の一実施例に係るビデオ信号エンコーディング装置の概略的なブロック図である。図1を参照すると、本開示のエンコーディング装置100は、変換部110、量子化部115、逆量子化部120、逆変換部125、フィルタリング部130、予測部150及びエントロピーコーディング部160を含む。
変換部110は、受信したビデオ信号と予測部150で生成された予測信号との差であるレジデュアル信号を変換して変換係数値を取得する。例えば、離散コサイン変換(Discrete Cosine Transform,DCT)、離散サイン変換(Discrete Sine Transform,DST)又はウェーブレット変換(Wavelet Transform)などが用いられてよい。離散コサイン変換及び離散サイン変換は、入力されたピクチャー信号をブロック形態に分けて変換を行う。変換において、変換領域内の値の分布と特性によってコーディング効率が変わってよい。量子化部115は、変換部110から出力された変換係数値を量子化する。
コーディング効率を上げるために、ピクチャー信号をそのままコードするのではなく、予測部150で、既にコードされた領域を用いてピクチャーを予測し、予測されたピクチャーに、原本ピクチャーと予測ピクチャーとのレジデュアル値を足して復元ピクチャーを取得する方法が用いられる。エンコーダとデコーダでミスマッチが発生することを防ぐために、エンコーダで予測を行う際には、デコーダでも使用可能な情報を使用しなければならない。そのために、エンコーダでは、符号化した現在ブロックを再び復元する過程を行う。逆量子化部120では変換係数値を逆量子化し、逆変換部125では逆量子化された変換係数値を用いてレジデュアル値を復元する。一方、フィルタリング部130は、復元されたピクチャーの品質改善及び符号化効率の向上のためのフィルタリング演算を行う。例えば、デブロッキングフィルター、サンプル適応的オフセット(Sample Adaptive Offset,SAO)及び適応的ループフィルターなどが含まれてよい。フィルタリングを経たピクチャーは、出力されるか、或いは参照ピクチャーとして用いるために復号ピクチャーバッファー(Decoded Picture Buffer,DPB)156に保存される。
予測部150は、イントラ予測部152とインター予測部154を含む。イントラ予測部152は、現在ピクチャー内でイントラ(intra)予測を行い、インター予測部154は、復号ピクチャーバッファー156に保存された参照ピクチャーを用いて現在ピクチャーを予測するインター(inter)予測を行う。イントラ予測部152は、現在ピクチャー内の復元されたサンプルからイントラ予測を行い、イントラ符号化情報をエントロピーコーディング部160に伝達する。イントラ符号化情報は、イントラ予測モード、MPM(Most Probable Mode)フラグ、MPMインデックスのうち少なくとも1つを含むことができる。イントラ符号化情報は、参照サンプルに関する情報を含むことができる。インター予測部154は、モーション推定部154a及びモーション補償部154bを含んで構成されてよい。モーション推定部154aは、復元された参照ピクチャーの特定領域を参照して現在領域のモーションベクトル値を取得する。モーション推定部154aは、参照領域に関するモーション情報セット(参照ピクチャーインデックス、モーションベクトル情報など)をエントロピーコーディング部160に伝達する。モーション補償部154bは、モーション推定部154aから伝達されたモーションベクトル値を用いてモーション補償を行う。インター予測部154は、参照領域に関するモーション情報を含むインター符号化情報をエントロピーコーディング部160に伝達する。
更なる実施例によって、予測部150は、イントラブロックコピー(block copy,BC)予測部(図示せず)を含むことができる。イントラBC予測部は、現在ピクチャー内の復元されたサンプルからイントラBC予測を行い、イントラBC符号化情報をエントロピーコーディング部160に伝達する。イントラBC予測部は、現在ピクチャー内の特定領域を参照して、現在領域の予測に用いられる参照領域を示すブロックベクトル値を取得する。イントラBC予測部は、取得されたブロックベクトル値を用いてイントラBC予測を行うことができる。イントラBC予測部は、イントラBC符号化情報をエントロピーコーディング部160に伝達する。イントラBC符号化情報はブロックベクトル情報を含むことができる。
上のようなピクチャー予測が行われる場合に、変換部110は、原本ピクチャーと予測ピクチャー間のレジデュアル値を変換して変換係数値を取得する。この時、変換は、ピクチャー内で特定ブロック単位で行われてよく、特定ブロックのサイズは、既に設定された範囲内で可変してよい。量子化部115は、変換部110で生成された変換係数値を量子化してエントロピーコーディング部160に伝達する。
エントロピーコーディング部160は、量子化された変換係数を示す情報、イントラ符号化情報、及びインター符号化情報などをエントロピーコーディングしてビデオ信号ビットストリームを生成する。エントロピーコーディング部160では可変長コーディング(Variable Length Coding,VLC)方式と算術コーディング(arithmetic coding)方式などが用いられてよい。可変長コーディング(VLC)方式は、入力されるシンボルを連続したコードワードに変換するが、コードワードの長さは可変してよい。例えば、頻繁に発生するシンボルは短いコードワードで、頻繁に発生しないシンボルは長いコードワードで表現する。可変長コーディング方式として、コンテキストベースの適応型可変長コーディング(Context-based Adaptive Variable Length Coding,CAVLC)方式が用いられてよい。算術コーディングは、連続したデータシンボルを一つの素数に変換するが、算術コーディングは、各シンボルを表現するために必要な最適の素数ビットを得ることができる。算術コーディングとして、コンテキストベースの適応型算術符号化(Context-based Adaptive Binary Arithmetic Code,CABAC)が用いられてよい。例えば、エントロピーコーディング部160は、量子化された変換係数を示す情報を二進化することができる。また、エントロピーコーディング部160は、二進化された情報を算術コーディングしてビットストリームを生成することができる。
前記生成されたビットストリームは、NAL(Network Abstraction Layer)ユニットを基本単位にしてカプセル化される。NALユニットは、符号化された整数個のコーディングツリーユニット(coding tree unit)を含む。ビデオデコーダでビットストリームを復号化するためには、まず、ビットストリームをNALユニット単位に分離した後、分離されたそれぞれのNALユニットを復号化しなければならない。一方、ビデオ信号ビットストリームの復号化のために必要な情報は、ピクチャーパラメータセット(Picture Parameter Set,PPS)、シーケンスパラメータセット(Sequence Parameter Set,SPS)、ビデオパラメータセット(Video Parameter Set,VPS)などのような上位レベルセットのRBSP(Raw Byte Sequence Payload)で伝送されてよい。
一方、図1のブロック図は、本開示の一実施例に係るエンコーディング装置100を示していするが、分離して表示されたブロックは、エンコーディング装置100のエレメントを論理的に区別して示すものである。したがって、前述したエンコーディング装置100のエレメントは、デバイスの設計に応じて1つのチップとして又は複数のチップとして装着されてよい。一実施例によれば、前述したエンコーディング装置100の各エレメントの動作は、プロセッサ(図示せず)によって行われてよい。
図2は、本開示の一実施例に係るビデオ信号デコーディング装置200の概略的なブロック図である。図2を参照すると、本開示のデコーディング装置200は、エントロピーデコーディング部210、逆量子化部220、逆変換部225、フィルタリング部230及び予測部250を含む。
エントロピーデコーディング部210は、ビデオ信号ビットストリームをエントロピーデコードし、各領域に対する変換係数情報、イントラ符号化情報、インター符号化情報などを抽出する。例えば、エントロピーデコーディング部210は、ビデオ信号ビットストリームから特定領域の変換係数情報に対する二進化コードを取得することができる。また、エントロピーデコーディング部210は、二進化コードを逆二進化し、量子化された変換係数を取得する。逆量子化部220は、量子化された変換係数を逆量子化し、逆変換部225は、逆量子化された変換係数を用いてレジデュアル値を復元する。ビデオ信号処理装置200は、逆変換部225から取得されたレジデュアル値を予測部250から取得された予測値と合算して元来の画素値を復元する。
一方、フィルタリング部230は、ピクチャーに対するフィルタリングを行って画質を向上させる。ここには、ブロック歪み現象を減少させるためのデブロッキングフィルター及び/又はピクチャー全体の歪み除去のための適応的ループフィルターなどが含まれてよい。フィルタリングを経たピクチャーは、出力されるか、或いは次のピクチャーに対する参照ピクチャーとして利用するために復号ピクチャーバッファー(DPB)256に保存される。
予測部250は、イントラ予測部252及びインター予測部254を含む。予測部250は、前述したエントロピーデコーディング部210で復号化された符号化タイプ、各領域に対する変換係数、イントラ/インター符号化情報などを用いて予測ピクチャーを生成する。復号化が行われる現在ブロックを復元するために、現在ブロックが含まれた現在ピクチャー又は他のピクチャーの復号化された領域が用いられてよい。復元に現在ピクチャーのみを利用する、すなわちイントラ予測(又は、イントラ予測及びイントラBC予測)のみを行うピクチャー(又は、タイル/スライス)を、イントラピクチャー又はIピクチャー(又は、タイル/スライス)といい、イントラ予測とインター予測の両方を行うことができるピクチャー(又は、タイル/スライス)を、インターピクチャー(又は、タイル/スライス)という。インターピクチャー(又は、タイル/スライス)のうち、各ブロックのサンプル値を予測するために最大で1つのモーションベクトル及び参照ピクチャーインデックスを利用するピクチャー(又は、タイル/スライス)を、予測ピクチャー(predictive picture)又はPピクチャー(又は、タイル/スライス)といい、最大で2つのモーションベクトル及び参照ピクチャーインデックスを利用するピクチャー(又は、タイル/スライス)を、双予測ピクチャー(Bi-predictive picture)又はBピクチャー(又は、タイル/スライス)という。言い換えると、Pピクチャー(又は、タイル/スライス)は、各ブロックを予測するために最大で1つのモーション情報セットを利用し、Bピクチャー(又は、タイル/スライス)は各ブロックを予測するために最大で2つのモーション情報セットを利用する。ここで、モーション情報セットは、1つ以上のモーションベクトルと1つの参照ピクチャーインデックスを含む。
イントラ予測部252は、イントラ符号化情報及び現在ピクチャー内の復元されたサンプルを用いて予測ブロックを生成する。前述したように、イントラ符号化情報は、イントラ予測モード、MPM(Most Probable Mode)フラグ、MPMインデックスのうち少なくとも1つを含むことができる。イントラ予測部252は、現在ブロックの左側及び/又は上側に位置している復元されたサンプルを参照サンプルとして用いて現在ブロックのサンプル値を予測する。本開示において、復元されたサンプル、参照サンプル及び現在ブロックのサンプルはピクセルを表すことができる。また、サンプル値(sample value)は、ピクセル値を表すことができる。
一実施例によれば、参照サンプルは、現在ブロックの周辺ブロックに含まれたサンプルであってよい。例えば、参照サンプルは、現在ブロックの左側境界に隣接したサンプル及び/又は上側境界に隣接したサンプルであってよい。また、参照サンプルは、現在ブロックの周辺ブロックのサンプルのうち、現在ブロックの左側境界から既に設定された距離以内のライン上に位置するサンプル及び/又は現在ブロックの上側境界から既に設定された距離以内のライン上に位置するサンプルであってよい。この時、現在ブロックの周辺ブロックは、現在ブロックに隣接した左側(L)ブロック、上側(A)ブロック、下左側(Below Left,BL)ブロック、上右側(Above Right,AR)ブロック又は上左側(Above Left,AL)ブロックのうち少なくとも1つを含むことができる。
インター予測部254は、復号ピクチャーバッファー256に保存された参照ピクチャー及びインター符号化情報を用いて予測ブロックを生成する。インター符号化情報は、参照ブロックに対する現在ブロックのモーション情報セット(参照ピクチャーインデックス、モーションベクトル情報など)を含むことができる。インター予測には、L0予測、L1予測及び双予測(Bi-prediction)があり得る。L0予測は、L0ピクチャーリストに含まれた1個の参照ピクチャーを用いた予測であり、L1予測は、L1ピクチャーリストに含まれた1個の参照ピクチャーを用いた予測を意味する。そのためには、1セットのモーション情報(例えば、モーションベクトル及び参照ピクチャーインデックス)が必要であり得る。双予測方式では、最大で2個の参照領域を利用できるが、この2個の参照領域は、同じ参照ピクチャーに存在してもよく、異なるピクチャーにそれぞれ存在してもよい。すなわち、双予測方式では、最大で2セットのモーション情報(例えば、モーションベクトル及び参照ピクチャーインデックス)が用いられてよいが、2個のモーションベクトルが同一の参照ピクチャーインデックスに対応してもよく、異なる参照ピクチャーインデックスに対応してもよい。この時、参照ピクチャーは、時間的に現在ピクチャー以前又は以後のいずれにも表示(又は、出力)されてよい。また、双予測方式で、2個の参照領域は2個の参照ピクチャーリストに存在してよい。
インター予測部254は、モーションベクトル及び参照ピクチャーインデックスを用いて現在ブロックの参照ブロックを取得することができる。前記参照ブロックは、参照ピクチャーインデックスに対応する参照ピクチャー内に存在する。また、モーションベクトルによって特定されたブロックのサンプル値又はその補間(interpolation)された値が現在ブロックの予測子(predictor)として用いられてよい。サブペル(sub-pel)単位のピクセル正確度を有するモーション予測のために、例えば、ルマ信号に対して8タップ補間フィルターが、クロマ信号に対して4タップ補間フィルターが用いられてよい。ただし、サブペル単位のモーション予測のための補間フィルターは、これに限定されない。このように、インター予測部254は、以前に復元されたピクチャーから現在ユニットのテキスチャーを予測するモーション補償(motion compensation)を行う。この時、インター予測部はモーション情報セットを用いることができる。
更なる実施例によって、予測部250は、イントラBC予測部(図示せず)を含むことができる。イントラBC予測部は、現在ピクチャー内の復元されたサンプルからイントラBC予測を行い、イントラBC符号化情報をエントロピーコーディング部160に伝達する。イントラBC予測部は、現在ピクチャー内の特定領域を指示する現在領域のブロックベクトル値を取得する。イントラBC予測部は、取得されたブロックベクトル値を用いてイントラBC予測を行うことができる。イントラBC予測部は、イントラBC符号化情報をエントロピーコーディング部160に伝達する。イントラBC符号化情報はブロックベクトル情報を含むことができる。
前記イントラ予測部252又はインター予測部254から出力された予測値、及び逆変換部225から出力されたレジデュアル値が加算され、復元されたビデオピクチャーが生成される。すなわち、ビデオ信号デコーディング装置200は、予測部250で生成された予測ブロックと逆変換部225から取得されたレジデュアルを用いて現在ブロックを復元する。
一方、図2のブロック図は、本開示の一実施例に係るデコーディング装置200を示しているが、分離して表示されたブロックは、デコーディング装置200のエレメントを論理的に区別して示すものである。したがって、前述したデコーディング装置200のエレメントは、デバイスの設計によって1つのチップとして又は複数のチップとして装着されてよい。一実施例によれば、前述したデコーディング装置200の各エレメントの動作はプロセッサ(図示せず)によって行われてよい。
図3には、ピクチャー内でコーディングツリーユニット(Coding Tree Unit,CTU)がコーディングユニット(Coding Units,CUs)に分割される実施例を示す。ビデオ信号のコーディング過程において、ピクチャーはコーディングツリーユニット(CTU)のシーケンスに分割されてよい。コーディングツリーユニットは、ルマ(luma)サンプルのNXNブロックと、これに対応するクロマ(chroma)サンプルの2個のブロックで構成される。コーディングツリーユニットは複数のコーディングユニットに分割されてよい。コーディングツリーユニットは分割されずにリーフノードになってもよい。この場合、コーディングツリーユニット自体がコーディングユニットになり得る。コーディングユニットは、上述したビデオ信号の処理過程、すなわち、イントラ/インター予測、変換、量子化及び/又はエントロピーコーディングなどの過程でピクチャーを処理するための基本単位のことを指す。1つのピクチャー内でコーディングユニットのサイズ及び形状は一定でなくてよい。コーディングユニットは、正方形或いは長方形の形状を有してよい。長方形コーディングユニット(或いは、長方形ブロック)は、垂直コーディングユニット(或いは、垂直ブロック)と水平コーディングユニット(或いは、水平ブロック)を含む。本明細書において、垂直ブロックは、高さが幅よりも大きいブロックであり、水平ブロックは、幅が高さよりも大きいブロックである。また、本明細書において、正方形でない(non-square)ブロックは長方形ブロックを表すことができるが、本開示はこれに限定されない。
図3を参照すると、コーディングツリーユニットは、まず、クアッドツリー(Quad Tree,QT)構造に分割される。すなわち、クアッドツリー構造において2N×2Nサイズを有する1つのノードは、N×Nサイズを有する4個のノードに分割されてよい。本明細書において、クアッドツリーは、4進(quaternary)ツリーと呼ぶこともできる。クアッドツリー分割は再帰的に行われてよく、全ノードが同じ深さに分割される必要はない。
一方、前述したクアッドツリーのリーフノード(leaf node)は、マルチタイプツリー(Multi-Type Tree,MTT)構造にさらに分割されてよい。本開示の実施例によれば、マルチタイプツリー構造では、1つのノードが水平或いは垂直分割の2進(binary、バイナリ)或いは3進(ternary、ターナリー)ツリー構造に分割されてよい。すなわち、マルチタイプツリー構造には、垂直バイナリ分割、水平バイナリ分割、垂直ターナリー分割及び水平ターナリー分割の4つの分割構造が存在する。本開示の実施例によれば、前記各ツリー構造において、ノードの幅及び高さはいずれも2の累乗値を有してよい。例えば、バイナリツリー(Binary Tree,BT)構造において、2N×2Nサイズのノードは、垂直バイナリ分割によって2個のN×2Nノードに分割され、水平バイナリ分割によって2個の2N×Nノードに分割されてよい。また、ターナリーツリー(Ternary Tree,TT)構造において、2N×2Nサイズのノードは、垂直ターナリー分割によって(N/2)×2N、N×2N及び(N/2)×2Nのノードに分割され、水平バイナリ分割によって2N×(N/2)、2N×N及び2N×(N/2)のノードに分割されてよい。このようなマルチタイプツリー分割は再帰的に行われてよい。
マルチタイプツリーのリーフノードはコーディングユニットになり得る。コーディングユニットに対する分割が指示されていないか或いはコーディングユニットが最大変換長に比べて大きくない場合に、該当のコーディングユニットはそれ以上の分割無しで予測及び変換の単位として用いられる。一方、前述したクアッドツリー及びマルチタイプツリーにおいて、次のパラメータのうち少なくとも1つが事前に定義されるか、或いはPPS、SPS、VPSなどのような上位レベルセットのRBSPで伝送されてよい。1)CTUサイズ:クアッドツリーのルートノード(root node)サイズ、2)最小QTサイズ(MinQtSize):許容された最小QTリーフノードサイズ、3)最大BTサイズ(MaxBtSize):許容された最大BTルートノードサイズ、4)最大TTサイズ(MaxTtSize):許容された最大TTルートノードサイズ、5)最大MTT深さ(MaxMttDepth):QTのリーフノードからのMTT分割の最大許容深さ、6)最小BTサイズ(MinBtSize):許容された最小BTリーフノードサイズ、7)最小TTサイズ(MinTtSize):許容された最小TTリーフノードサイズ。
図4には、クアッドツリー及びマルチタイプツリーの分割をシグナルする方法の一実施例を示す。前述したクアッドツリー及びマルチタイプツリーの分割をシグナルするために、既に設定されたフラグが用いられてよい。図4を参照すると、クアッドツリーノードの分割されるか否かを示すフラグ‘qt_split_flag’、マルチタイプツリーノードの分割されるか否かを示すフラグ‘mtt_split_flag’、マルチタイプツリーノードの分割方向を示すフラグ‘mtt_split_vertical_flag’又はマルチタイプツリーノードの分割形状を示すフラグ‘mtt_split_binary_flag’のうち少なくとも1つが用いられてよい。
本開示の実施例によれば、コーディングツリーユニットはクアッドツリーのルートノードであり、クアッドツリー構造にまず分割されてよい。クアッドツリー構造では、それぞれのノード‘QT_node’別に‘qt_split_flag’がシグナルされる。‘qt_split_flag’の値が1の場合に、該当のノードは、4個の正方形ノードに分割され、‘qt_split_flag’の値が0の場合に、該当のノードは、クアッドツリーのリーフノード‘QT_leaf_node’となる。
それぞれのクアッドツリーリーフノード‘QT_leaf_node’は、マルチタイプツリー構造にさらに分割されてよい。マルチタイプツリー構造では、それぞれのノード‘MTT_node’別に‘mtt_split_flag’がシグナルされる。‘mtt_split_flag’の値が1の場合に、該当のノードは、複数の長方形ノードに分割され、‘mtt_split_flag’の値が0の場合に、該当のノードは、マルチタイプツリーのリーフノード‘MTT_leaf_node’となる。マルチタイプツリーノード‘MTT_node’が複数の長方形ノードに分割される場合(すなわち、‘mtt_split_flag’の値が1の場合)に、ノード‘MTT_node’のための‘mtt_split_vertical_flag’及び’mtt_split_binary_flag’がさらにシグナルされてよい。‘mtt_split_vertical_flag’の値が1の場合にノード‘MTT_node’の垂直分割が示され、‘mtt_split_vertical_flag’の値が0の場合にノード‘MTT_node’の水平分割が示される。また、‘mtt_split_binary_flag’の値が1の場合に、ノード‘MTT_node’は2個の長方形ノードに分割され、‘mtt_split_binary_flag’の値が0の場合に、ノード‘MTT_node’は3個の長方形ノードに分割される。
コーディングのためのピクチャー予測(モーション補償)は、それ以上分割されないコーディングユニット(すなわち、コーディングユニットツリーのリーフノード)を対象になされる。このような予測を行う基本単位を、以下では予測ユニット(prediction unit)又は予測ブロック(prediction block)という。
以下、本明細書で使われるユニットという用語は、予測を行う基本単位である前記予測ユニットを代替する用語として使われてよい。ただし、本開示がこれに限定されるものではなく、より広義には、前記コーディングユニットを含む概念で理解されてもよい。
図5及び図6には、本開示の実施例に係るイントラ予測方法をさらに具体的に示す。前述したように、イントラ予測部は、現在ブロックの左側及び/又は上側に位置している復元されたサンプルを参照サンプルとして用いて現在ブロックのサンプル値を予測する。
まず、図5には、イントラ予測モードにおいて現在ブロックの予測のために用いられる参照サンプルの一実施例を示す。一実施例によれば、参照サンプルは、現在ブロックの左側境界に隣接したサンプル及び/又は上側境界に隣接したサンプルであってよい。図5に示すように、現在ブロックのサイズがW×Hであり、現在ブロックに隣接した単一参照ライン(line)のサンプルがイントラ予測に用いられる場合に、現在ブロックの左側及び/又は上側に位置している最大で2W+2H+1個の周辺サンプルを用いて参照サンプルが設定されてよい。
本開示の更なる実施例によれば、現在ブロックのイントラ予測のために複数の参照ライン上のサンプルが用いられてよい。複数の参照ラインは、現在ブロックの境界から、既に設定された距離以内に位置しているn個のラインで構成されてよい。この場合、現在ブロックのイントラ予測のために用いられる少なくとも1つの参照ラインを示す別の参照ライン情報がシグナルされてよい。具体的に、参照ライン情報は、複数の参照ラインのうちいずれか1つを示すインデックスを含むことができる。
また、参照サンプルとして用いられる少なくとも一部のサンプルがまだ復元されていない場合に、イントラ予測部は、参照サンプルパディング過程を行って参照サンプルを取得することができる。また、イントラ予測部は、イントラ予測の誤差を減らすために、参照サンプルフィルタリング過程を行うことができる。すなわち、周辺サンプル及び/又は参照サンプルパディング過程によって取得された参照サンプルにフィルタリングを行い、フィルタリングされた参照サンプルを取得することができる。イントラ予測部は、このように取得された参照サンプルを用いて現在ブロックのサンプルを予測する。イントラ予測部は、フィルタリングされていない参照サンプル又はフィルタリングされた参照サンプルを用いて現在ブロックのサンプルを予測する。本開示において、周辺サンプルは、少なくとも1つの参照ライン上のサンプルを含むことができる。例えば、周辺サンプルは、現在ブロックの境界に隣接したライン上の隣接サンプルを含むことができる。
次に、図6には、イントラ予測に用いられる予測モードの一実施例を示す。イントラ予測のために、イントラ予測方向を示すイントラ予測モード情報がシグナルされてよい。イントラ予測モード情報は、イントラ予測モードセットを構成する複数のイントラ予測モードのうちいずれか1つを示す。現在ブロックがイントラ予測ブロックである場合に、デコーダは、ビットストリームから現在ブロックのイントラ予測モード情報を受信する。デコーダのイントラ予測部は、抽出されたイントラ予測モード情報に基づいて現在ブロックに対するイントラ予測を行う。
本開示の実施例によれば、イントラ予測モードセットは、イントラ予測に用いられる全てのイントラ予測モード(例えば、総67個のイントラ予測モード)を含むことができる。より具体的に、イントラ予測モードセットは、平面モード、DCモード、及び複数の(例えば、65個の)角度モード(すなわち、方向モード)を含むことができる。それぞれのイントラ予測モードは、既に設定されたインデックス(すなわち、イントラ予測モードインデックス)で示されてよい。例えば、図6に示すように、イントラ予測モードインデックス0は、平面モードを示し、イントラ予測モードインデックス1は、DCモードを示す。また、イントラ予測モードインデックス2~66は、異なる角度モードをそれぞれ示すことができる。角度モードは、既に設定された角度範囲以内の異なる角度をそれぞれ示す。例えば、角度モードは、時計回り方向に45°~-135°の角度範囲(すなわち、第1角度範囲)以内の角度を示すことができる。前記角度モードは、12時方向を基準に定義されてよい。この時、イントラ予測モードインデックス2は、水平対角(Horizontal Diagonal,HDIA)モードを示し、イントラ予測モードインデックス18は、水平(Horizontal,HOR)モードを示し、イントラ予測モードインデックス34は、対角(Diagonal,DIA)モードを示し、イントラ予測モードインデックス50は、垂直(Vertical,VER)モードを示し、イントラ予測モードインデックス66は、垂直対角(Vertical Diagonal,VDIA)モードを示す。
一方、既に設定された角度範囲は、現在ブロックの形状によって異なるように設定されてよい。例えば、現在ブロックが長方形ブロックである場合に、時計回り方向に45°を超える又は-135°未満の角度を示す広角モードがさらに用いられてよい。現在ブロックが水平ブロックである場合に、角度モードは、時計回り方向に(45+offset1)°~(-135+offset1)°の角度範囲(すなわち、第2角度範囲)以内の角度を示すことができる。この時、第1角度範囲を外れる角度モード67~80がさらに用いられてよい。また、現在ブロックが垂直ブロックである場合に、角度モードは、時計回り方向に(45-offset2)°~(-135-offset2)°の角度範囲(すなわち、第3角度範囲)以内の角度を示すことができる。この時、第1角度範囲を外れる角度モード-10~-1がさらに用いられてよい。本開示の実施例によれば、offset1及びoffset2の値は、長方形ブロックの幅と高さとの比率によって個別に決定されてよい。また、offset1及びoffset2は、正数であってよい。
本開示の更なる実施例によれば、イントラ予測モードセットを構成する複数の角度モードは、基本角度モードと拡張角度モードを含むことができる。このとき、拡張角度モードは基本角度モードに基づいて決定されてよい。
一実施例によれば、基本角度モードは、既存HEVC(High Efficiency Video Coding)標準のイントラ予測で用いられる角度に対応するモードであり、拡張角度モードは、次世代ビデオコーデック標準のイントラ予測で新しく追加される角度に対応するモードであってよい。より具体的に、基本角度モードは、イントラ予測モード{2,4,6,…,66}のいずれか1つに対応する角度モードであり、拡張角度モードは、イントラ予測モード{3,5,7,…,65}のいずれか1つに対応する角度モードであってよい。すなわち、拡張角度モードは、第1角度範囲内で基本角度モード間の角度モードであってよい。したがって、拡張角度モードが示す角度は、基本角度モードが示す角度に基づいて決定されてよい。
他の実施例によれば、基本角度モードは、既に設定された第1角度範囲以内の角度に対応するモードであり、拡張角度モードは、前記第1角度範囲を外れる広角モードであってよい。すなわち、基本角度モードは、イントラ予測モード{2,3,4,…,66}のいずれか1つに対応する角度モードであり、拡張角度モードは、イントラ予測モード{-10,-9,…,-1}及び{67,68,…,76}のいずれか1つに対応する角度モードであってよい。拡張角度モードが示す角度は、対応する基本角度モードが示す角度の反対側角度と決定されてよい。したがって、拡張角度モードが示す角度は、基本角度モードが示す角度に基づいて決定されてよい。一方、拡張角度モードの個数はこれに限定されず、現在ブロックのサイズ及び/又は形状によって更なる拡張角度が定義されてもよい。例えば、拡張角度モードは、イントラ予測モード{-14,-13,…,-1}及び{67,68,…,80}のいずれか1つに対応する角度モードと定義されてよい。一方、イントラ予測モードセットに含まれるイントラ予測モードの総個数は、前述した基本角度モードと拡張角度モードの構成によって可変してよい。
前記実施例において、拡張角度モード間の間隔は、対応する基本角度モード間の間隔に基づいて設定されてよい。例えば、拡張角度モード{3,5,7,…,65}間の間隔は、対応する基本角度モード{2,4,6,…,66}間の間隔に基づいて決定されてよい。また、拡張角度モード{-10,-9,…,-1}間の間隔は、対応する反対側の基本角度モード{56,57,…,65}間の間隔に基づいて決定され、拡張角度モード{67,68,…,76}間の間隔は、対応する反対側の基本角度モード{3,4,…,12}間の間隔に基づいて決定されてよい。拡張角度モード間の角度間隔は、対応する基本角度モード間の角度間隔と同一に設定されてよい。また、イントラ予測モードセットにおいて拡張角度モードの個数は、基本角度モードの個数以下に設定されてよい。
本開示の実施例によれば、拡張角度モードは、基本角度モードに基づいてシグナルされてよい。例えば、広角モード(すなわち、拡張角度モード)は、第1角度範囲以内の少なくとも1つの角度モード(すなわち、基本角度モード)を代替することができる。代替される基本角度モードは、広角モードの反対側に対応する角度モードであってよい。すなわち、代替される基本角度モードは、広角モードが示す角度の反対方向の角度に対応するか或いは前記反対方向の角度から既に設定されたオフセットインデックスだけ外れる角度に対応する角度モードである。本開示の実施例によれば、既に設定されたオフセットインデックスは、1である。代替される基本角度モードに対応するイントラ予測モードインデックスは、広角モードに再びマップされ、該当の広角モードをシグナルすることができる。例えば、広角モード{-10,-9,…,-1}は、イントラ予測モードインデックス{57,58,…,66}によってそれぞれシグナルされてよく、広角モード{67,68,…,76}は、イントラ予測モードインデックス{2,3,…,11}によってそれぞれシグナルされてよい。このように、基本角度モードのためのイントラ予測モードインデックスが拡張角度モードをシグナルするようにすることにより、各ブロックのイントラ予測に用いられる角度モードの構成が互いに異なっても、同一セットのイントラ予測モードインデックスがイントラ予測モードのシグナリングに用いられ得る。したがって、イントラ予測モード構成の変化によるシグナリングオーバーヘッドが最小化し得る。
一方、拡張角度モードの使用されるか否かは、現在ブロックの形状及びサイズのうち少なくとも1つに基づいて決定されてよい。一実施例によれば、現在ブロックのサイズが既に設定されたサイズよりも大きい場合に、現在ブロックのイントラ予測のために拡張角度モードが用いられ、そうでない場合に、現在ブロックのイントラ予測のために基本角度モードのみが用いられてよい。他の実施例によれば、現在ブロックが正方形以外のブロックである場合に、現在ブロックのイントラ予測のために拡張角度モードが用いられ、現在ブロックが正方形ブロックである場合に、現在ブロックのイントラ予測のために基本角度モードのみが用いられてよい。
イントラ予測部は、現在ブロックのイントラ予測モード情報に基づき、現在ブロックのイントラ予測に用いられる参照サンプル及び/又は補間された参照サンプルを決定する。イントラ予測モードインデックスが特定角度モードを示す場合に、現在ブロックの現在サンプルから前記特定角度に対応する参照サンプル又は補間された参照サンプルが、現在サンプルの予測に用いられる。したがって、イントラ予測モードによって異なるセットの参照サンプル及び/又は補間された参照サンプルがイントラ予測に用いられてよい。参照サンプル及びイントラ予測モード情報を用いて現在ブロックのイントラ予測が行われたら、デコーダは、逆変換部から取得された現在ブロックのレジデュアル信号を現在ブロックのイントラ予測値に足して現在ブロックのサンプル値を復元する。
以下、図7を参照して、本開示の一実施例に係るインター予測方法について説明する。本開示において、インター予測方法は、並進運動(translation motion)に最適化された一般インター予測方法及びアファイン(affine)モデルベースのインター予測方法を含むことができる。また、モーションベクトルは、一般インター予測方法によるモーション補償のための一般モーションベクトル及びアファインモーション補償のためのコントロールポイントモーションベクトル(control point motion vector)のうち少なくとも1つを含むことができる。
図7には、本開示の一実施例に係るインター予測方法を示す。前述したように、デコーダは、復号化された他のピクチャーの復元されたサンプルを参照して現在ブロックを予測することができる。図7を参照すると、デコーダは、現在ブロック701のモーション情報セットに基づき、参照ピクチャー720内の参照ブロック702を取得する。この時、モーション情報セットは、参照ピクチャーインデックス及びモーションベクトル703を含むことができる。参照ピクチャーインデックスは、参照ピクチャーリストで現在ブロックのインター予測のための参照ブロックが含まれた参照ピクチャー720を示す。一実施例によって、参照ピクチャーリストは、前述したL0ピクチャーリスト又はL1ピクチャーリストのうち少なくとも1つを含むことができる。モーションベクトル703は、現在ピクチャー710内で現在ブロック701の座標値と参照ピクチャー720内で参照ブロック702の座標値間のオフセットを示す。デコーダは、参照ブロック702のサンプル値に基づいて現在ブロック701の予測子を取得し、該予測子を用いて現在ブロック701を復元する。
具体的に、エンコーダは、復元順序が先であるピクチャーから現在ブロックと類似のブロックを探索し、前述した参照ブロックを取得することができる。例えば、エンコーダは、既に設定された探索領域内で、現在ブロックとサンプル値の差の和が最小になる参照ブロックを探索することができる。この時、現在ブロックと参照ブロックのサンプルの間の類似度を測定するために、SAD(Sum Of Absolute Difference)又はSATD(Sum of Hadamard Transformed Difference)のうち少なくとも1つが用いられてよい。ここで、SADは、2ブロックに含まれたサンプル値の差のそれぞれの絶対値を全て合算した値であってよい。また、SATDは、2ブロックに含まれたサンプル値の差をアダマール変換(Hadamard Transform)して取得されたアダマール変換係数の絶対値を全て合算した値であってよい。
一方、現在ブロックは、1つ以上の参照領域を用いて予測されてよい。前述したように、現在ブロックは、2個以上の参照領域を利用する双予測方式によってインター予測されてよい。一実施例によって、デコーダは、現在ブロックの2個のモーション情報セットに基づいて2個の参照ブロックを取得することができる。また、デコーダは、取得された2個の参照ブロックのそれぞれのサンプル値に基づき、現在ブロックの第1予測子及び第2予測子を取得することができる。また、デコーダは、第1予測子及び第2予測子を用いて現在ブロックを復元することができる。例えば、デコーダは、第1予測子及び第2予測子のサンプル別平均に基づいて現在ブロックを復元することができる。
前述したように、現在ブロックのモーション補償のために、1つ以上のモーション情報セットがシグナルされてよい。この時、複数のブロックのそれぞれのモーション補償のためのモーション情報セット間の類似性が用いられてよい。例えば、現在ブロックの予測に用いられるモーション情報セットは、既に復元された他のサンプルのうちいずれか1つの予測に用いられたモーション情報セットから誘導されてよい。これにより、エンコーダ及びデコーダはシグナリングオーバーヘッドを減少させることができる。
例えば、現在ブロックのモーション情報セットと同一又は類似のモーション情報セットに基づいて予測された可能性のある複数の候補ブロックが存在し得る。デコーダは、マージ候補リスト(merge candidate list)を生成することができる。デコーダは、該当の複数の候補ブロックに基づいてマージ候補リストを生成することができる。ここで、マージ候補リストは、現在ブロックよりも先に復元されたサンプルのうち、現在ブロックのモーション情報セットに関連したモーション情報セットに基づいて予測された可能性のあるサンプルに対応する候補を含むことができる。マージ候補リストは、空間的候補又は時間的候補を含むことができる。マージ候補リストは現在ブロックよりも先に復元されたサンプルの位置に基づいて生成されてよい。現在ブロックよりも先に復元されたサンプルは、現在ブロックの隣ブロックであってよい。現在ブロックの隣ブロックは、現在ブロックに隣接したブロックを意味できる。エンコーダとデコーダは、あらかじめ定義された規則に従って現在ブロックのマージ候補リストを構成することができる。この時、エンコーダとデコーダがそれぞれ構成したマージ候補リストは、互いに同一であってよい。例えば、エンコーダ及びデコーダは、現在ピクチャー内で現在ブロックの位置に基づいて現在ブロックのマージ候補リストを構成することができる。本開示において、特定ブロックの位置は、特定ブロックを含むピクチャー内で特定ブロックの左上端(top-left)サンプルの相対的な位置を表す。
図8は、本開示の一実施例によって、現在ブロックのモーションベクトルがシグナルされる方法を示す図である。本開示の一実施例によって、現在ブロックのモーションベクトルは、現在ブロックのモーションベクトル予測子(motion vector predictor,MVP)から誘導されてよい。一実施例によって、現在ブロックのモーションベクトルを誘導するために参照されるモーションベクトル予測子は、モーションベクトル予測子(motion vector predictor,MVP)候補リストを用いて取得されてよい。MVP候補リストは、既に設定された個数のMVP候補(Candidate1,Candidate2,...,Candidate N)を含むことができる。
一実施例によって、MVP候補リストは、空間的候補又は時間的候補のうち少なくとも1つを含むことができる。空間的候補は、現在ピクチャー内で現在ブロックから一定の範囲以内の周辺ブロックの予測に用いられたモーション情報セットであってよい。空間的候補は、現在ブロックの周辺ブロックのうち、利用可能な周辺ブロックに基づいて構成されてよい。また、時間的候補は、現在ピクチャーと他のピクチャー内のブロックの予測に用いられたモーション情報セットであってよい。例えば、時間的候補は、特定参照ピクチャー内で現在ブロックの位置に対応する特定ブロックに基づいて構成されてよい。この時、特定ブロックの位置は、前記参照ピクチャー内で特定ブロックの左上端(top-left)サンプルの位置を表す。更なる実施例によって、MVP候補リストは、ゼロモーションベクトルを含むことができる。更なる実施例によって、現在ブロックのMVP候補リストが含むMVP候補に対するラウンディング(rounding)プロセスが行われてよい。この時、後述する現在ブロックのモーションベクトル差分値のレゾリューションが用いられてよい。例えば、現在ブロックのMVP候補はそれぞれ、現在ブロックのモーションベクトル差分値のレゾリューションに基づいてラウンディングされてよい。
本開示において、MVP候補リストは、改善された時間的モーションベクトル候補(advanced temporal motion vector prediction,ATMVP、又はsubblock-based temporal motion vector prediction,SbTMVP)リスト、マージインター予測のためのマージ候補リスト、アファインモーション補償のためのコントロールポイントモーションベクトル候補リスト、サブブロックベースのモーション補償のための時間的モーションベクトル候補(subblock-based temporal motion vecto prediction,STMVP)リスト、及びそれらの組合せを含むことができる。
一実施例によって、エンコーダ810及びデコーダ820は、現在ブロックのモーション補償のためのMVP候補リストを構成することができる。例えば、現在ブロックよりも先に復元されたサンプルのうち、現在ブロックのモーション情報セットと同一又は類似のモーション情報セットに基づいて予測された可能性のあるサンプルに対応する候補が存在し得る。エンコーダ810及びデコーダ820は、該当の複数の候補ブロックに基づいて現在ブロックのMVP候補リストを構成することができる。この時、エンコーダ810及びデコーダ820は、エンコーダ810とデコーダ820間にあらかじめ定義された規則に従ってMVP候補リストを構成することができる。すなわち、エンコーダ810及びデコーダ820のそれぞれにおいて構成されたMVP候補リストは、互いに同一でってよい。
また、あらかじめ定義された規則は、現在ブロックの予測モードによって異なってもよいい。例えば、現在ブロックの予測モードがアファインモデルベースのアファイン予測モードである場合に、エンコーダ及びデコーダは、アファインモデルに基づく第1方法を用いて現在ブロックのMVP候補リストを構成することができる。第1方法は、コントロールポイントモーションベクトル候補リストを取得する方法であってよい。一方、現在ブロックの予測モードがアファインモデルに基づいていない一般インター予測モードである場合に、エンコーダ及びデコーダは、アファインモデルに基づいていない第2方法を用いて現在ブロックのMVP候補リストを構成することができる。この時、第1方法及び第2方法は、互いに異なる方法であってよい。
デコーダ820は、現在ブロックのMVP候補リストが含む少なくとも1つのMVP候補のいずれか1つに基づいて現在ブロックのモーションベクトルを誘導することができる。例えば、エンコーダ810は、現在ブロックのモーションベクトルを誘導するために参照されるモーションベクトル予測子を示すMVPインデックス(index)をシグナルすることができる。シグナルするということは、エンコーダが信号をビットストリームとして生成し、デコーダ820がビットストリームからパースすることを意味できる。MVPインデックスは、マージ候補リストに対するマージインデックスを含むことができる。デコーダ820は、シグナルされたMVPインデックスに基づいて現在ブロックのモーションベクトル予測子を取得することができる。デコーダ820は、モーションベクトル予測子を用いて現在ブロックのモーションベクトルを誘導することができる。一実施例によって、デコーダ820は、MVP候補リストから取得されたモーションベクトル予測子を、別のモーションベクトル差分値無しで、現在ブロックのモーションベクトルとして使用することができる。例えば、デコーダ820は、マージインデックスに基づいてマージリストからモーションベクトルを選択することができる。
デコーダ820は、現在ブロックのモーションベクトルに基づいて現在ブロックを復元することができる。MVP候補リストから取得されたモーションベクトル予測子が、別のモーションベクトル差分値無しで現在ブロックのモーションベクトルとして用いられるインター予測モードは、マージモードと呼ぶことができる。
他の実施例によって、デコーダ820は、現在ブロックのモーションベクトルのための別のモーションベクトル差分値(motion vector difference)を取得することができる。デコーダ820は、MVP候補リストから取得されたモーションベクトル予測子と現在ブロックのモーションベクトル差分値を合算して現在ブロックのモーションベクトルを取得することができる。この場合、エンコーダ810は、現在ブロックのモーションベクトルとモーションベクトル予測子間の差を表すモーションベクトル差分値(MV difference)をシグナルすることができる。モーションベクトル差分値がシグナルされる方法については、図9を用いて具体的に説明する。デコーダ820は、モーションベクトル差分値(MV difference)に基づいて現在ブロックのモーションベクトルを取得することができる。デコーダ820は、現在ブロックのモーションベクトルに基づいて現在ブロックを復元することができる。
さらに、現在ブロックのモーション補償のための参照ピクチャーインデックスがシグナルされてよい。エンコーダ810は、参照ブロックを含む参照ピクチャーを示す参照ピクチャーインデックスをシグナルすることができる。デコーダ820は、シグナルされた参照ピクチャーインデックスに基づき、現在ブロックの復元に参照される参照ピクチャーのPOCを取得することができる。この時、参照ピクチャーのPOCが、現在ブロックのモーションベクトルを誘導するために参照されるMVPに対応する参照ピクチャーのPOCと異なることがある。この場合、デコーダ820は、モーションベクトルスケーリングを行うことができる。すなわち、デコーダ820は、MVPをスケーリングしてMVP’を取得することができる。この時、モーションベクトルスケーリングは、現在ピクチャーのPOC、現在ブロックのシグナルされた参照ピクチャーのPOC、及びMVPに対応する参照ピクチャーのPOCに基づいて行われてよい。また、デコーダ820は、MVP’を現在ブロックのモーションベクトル予測子として用いることができる。
前述したように、現在ブロックのモーションベクトルは、現在ブロックのモーションベクトル予測子とモーションベクトル差分値を合算して取得することができる。この時、モーションベクトル差分値は、エンコーダからシグナルされてよい。エンコーダは、モーションベクトル差分値をエンコードしてモーションベクトル差分値を示す情報を生成し、シグナルすることができる。以下では、本開示の一実施例によってモーションベクトル差分値がシグナルされる方法について説明する。
図9は、本開示の一実施例によって現在ブロックのモーションベクトル差分値がシグナルされる方法を示す図である。一実施例によって、モーションベクトル差分値を示す情報は、モーションベクトル差分値の絶対値情報又はモーションベクトル差分値の符号情報のうち少なくとも1つを含むことができる。モーションベクトル差分値の絶対値と符号は別個にエンコードされてよい。
一実施例によって、モーションベクトル差分値の絶対値は、値自体でシグナルされなくてもよい。エンコーダは、モーションベクトル差分値の絶対値の特性を示す少なくとも1つのフラグを用いて、シグナルされる値のサイズを減らすことができる。デコーダは、シグナルされた値から、少なくとも1つのフラグを用いてモーションベクトル差分値の絶対値を誘導することができる。
例えば、少なくとも1つのフラグは、モーションベクトル差分値の絶対値がNよりも大きいか否かを示す第1フラグを含むことができる。この時、Nは整数であってよい。モーションベクトル差分値の絶対値のサイズがNよりも大きい場合に、活性化された第1フラグと共に(モーションベクトル差分値の絶対値-N)値がシグナルされてよい。この時、活性化されたフラグは、モーションベクトル差分値の絶対値のサイズがNよりも大きい場合を示すことができる。デコーダは、活性化された第1フラグ及びシグナルされた値に基づいてモーションベクトル差分値の絶対値を取得することができる。
図9を参照すると、モーションベクトル差分値の絶対値が‘0’よりも大きいか否かを示す第2フラグ(abs_mvd_greater0_flag)がシグナルされてよい。第2フラグ(abs_mvd_greater0_flag[])が、モーションベクトル差分値の絶対値が‘0’よりも大きくないことを示す場合に、モーションベクトル差分値の絶対値は‘0’であってよい。また、第2フラグ(abs_mvd_greater0_flag)が、モーションベクトル差分値の絶対値が‘0’よりも大きいことを示す場合に、デコーダは、モーションベクトル差分値に対する他の情報を用いてモーションベクトル差分値の絶対値を取得することができる。
一実施例によって、モーションベクトル差分値の絶対値が‘1’よりも大きいか否かを示す第3フラグ(abs_mvd_greater1_flag)がシグナルされてよい。第3フラグ(abs_mvd_greater1_flag)が、モーションベクトル差分値の絶対値が‘1’よりも大きくないことを示す場合に、デコーダは、モーションベクトル差分値の絶対値が‘1’であると判断できる。
逆に、第3フラグ(abs_mvd_greater1_flag)が、モーションベクトル差分値の絶対値が‘1’よりも大きいことを示す場合に、デコーダは、モーションベクトル差分値に対するさらに他の情報を用いてモーションベクトル差分値の絶対値を取得することができる。例えば、(モーションベクトル差分値の絶対値-2)値(abs_mvd_minus2)がシグナルされてよい。モーションベクトル差分値の絶対値が‘1’よりも大きい場合に、モーションベクトル差分値の絶対値は2以上の値であり得るためである。
前述したように、現在ブロックのモーションベクトル差分値の絶対値は、少なくとも1つのフラグに変形されてよい。例えば、モーションベクトル差分値の変形された絶対値は、モーションベクトル差分値のサイズによって(モーションベクトル差分値の絶対値-N)を示すことができる。一実施例によって、モーションベクトル差分値の変形された絶対値は、少なくとも1つのビットでシグナルされてよい。この時、モーションベクトル差分値の変形された絶対値を示すためにシグナルされるビットの個数は、可変的であってよい。エンコーダは、モーションベクトル差分値の変形された絶対値を可変長二進化方法を用いてエンコードすることができる。例えば、エンコーダは、可変長二進化方法として、切捨単項(truncated unary)二進化、単項(unary)二進化、切捨ライス(truncated rice)又は指数ゴロム(exp-Golomb)二進化のうち少なくとも1つを用いることができる。
また、モーションベクトル差分値の符号は、符号フラグ(mvd_sign_flag)でシグナルされてよい。一方、モーションベクトル差分値の符号は、符号ビットハイディング(sign-bit-hiding)によって暗黙的にシグナルされてもよい。
また、図9で、[0]と[1]は、componentインデックスを示すことができる。例えば、x-component、y-componentを示すことができる。
図10は、本開示の一実施例に係る適用的モーションベクトルレゾリューション(adaptive motion vector resolution)シグナリングを示す図である。
本開示の一実施例をよれば、モーションベクトル又はモーションベクトル差分値(motion vector difference)を示すレゾリューション(resolution)は、様々であり得る。言い換えると、モーションベクトル又はモーションベクトル差分値がコードされるレゾリューションは、様々であり得る。例えば、レゾリューションは、ピクセル(pixel,pel)に基づいて示すことができる。例えば、1/4(quarter)、1/2(half)、1(integer)、2、4ピクセルなどの単位でモーションベクトル又はモーションベクトル差分値をシグナルすることができる。例えば、16を示したいときに、1/4単位にすれば64でコードし(1/4*64=16)、1単位にすれば16でコードし(1*16=16)、4単位にすれば4でコードすることができる(4*4=16)。すなわち、次のように値を決定することができる。
valueDetermined=resolution*valuePerResolution
ここで、valueDeterminedは、伝達する値、本実施例ではモーションベクトル又はモーションベクトル差分値であってよい。また、valuePerResolutionは、[/レゾリューション]単位で示す値であってよい。
この時、モーションベクトル又はモーションベクトル差分値でシグナルする値がレゾリューションで割り切れない場合には、ラウンディング(rounding)などにより、予測(prediction)性能が最良であるモーションベクトル又はモーションベクトル差分値ではなく不正確な値を送ることがある。高いレゾリューションを使用すると、不正確さを低減させることができるが、コードされる値が大きいため多いビットを使用することがあり、低いレゾリューションを使用すると、不正確さが増加することがあるが、コードされる値が小さいため少ないビットを使用することができる。
また、前記レゾリューションをブロック、CU、スライスなどの単位で個別に設定することが可能である。したがって、単位に合わせて適応的にレゾリューションを適用することができる。
前記レゾリューションは、エンコーダからデコーダにシグナルされてよい。この時、レゾリューションに対するシグナリングは、前述した可変長(variable length)に2進化(binarization)したシグナリングであってよい。このような場合、最も小さい値(最も前にある値)に該当するインデックスでシグナルすれば、シグナリングオーバーヘッドが低減する。
一実施例として、高いレゾリューション(細かいシグナリング)から低いレゾリューションの順にシグナリングインデックスにマッチさせることができる。
図10は、3つのレゾリューションに対するシグナリングを示している。このような場合、3つのシグナリングは、0、10、11でよく、3つのシグナリングのそれぞれが、レゾリューション1、レゾリューション2、レゾリューション3に該当し得る。レゾリューション1をシグナルするためには1ビットが必要であり、残りのレゾリューションをシグナルするために2ビットが必要であり、よって、レゾリューション1をシグナルする時にシグナリングオーバーヘッドが少ない。図10の例では、レゾリューション1、レゾリューション2、レゾリューション3がそれぞれ、1/4、1、4pelである。
以下の発明において、モーションベクトルレゾリューションは、モーションベクトル差分値のレゾリューションを意味できる。
図11は、本開示の一実施例に係るインター予測(inter prediction)関連シンタックス(syntax)を示す図である。
本開示の一実施例をよれば、インター予測方法は、スキップモード、マージモード、インターモードなどを含むことができる。一実施例をよれば、スキップモードではレジデュアル信号(residual signal)が伝送されなくてよい。また、スキップモードにおいてマージモードのようなMV決定方法を使用することができる。スキップモードの使用されるか否かは、スキップフラグ(skip flag)によって決定されてよい。図11を参照すると、cu_skip_flag値によって、スキップモードの使用されるか否かが決定されてよい。
一実施例をよれば、マージモードでは、モーションベクトル差分値を使用しなくてよい。モーションベクトルインデックスに基づいてモーションベクトルを決定することができる。マージモードの使用されるか否かは、マージフラグ(merge flag)によって決定されてよい。図11を参照すると、merge_flag値によって、マージモードの使用されるか否かが決定されてよい。また、スキップモードを使用しない場合にマージモードを使用することが可能である。
スキップモード又はマージモードにおいて1つ以上の候補リスト(candidate list)種類の中で選択的に使用することが可能である。例えば、マージ候補(merge candidate)又はサブブロックマージ候補(subblock merge candidate)を使用することが可能である。また、マージ候補は、空間的隣候補(spatial neighboring candidate)、時間的候補(temporal candidate)などを含むことができる。また、マージ候補は、現在ブロック(CU)全体に対するモーションベクトルを使用する候補を含むことができる。すなわち、現在ブロックに属する各サブブロックのモーションベクトルが同一候補を含むことができる。また、サブブロックマージ候補は、サブブロックベースの時間的MV、アファインマージ候補などを含むことができる。また、サブブロックマージ候補は、現在ブロック(CU)のサブブロック別に異なるモーションベクトルを使用することが可能な候補を含むことができる。アファインマージ候補は、アファインモーション予測のコントロールポイントモーションベクトルを決定する際に、モーションベクトル差分値を使用しないで決定する方法で作った方法であってよい。また、サブブロックマージ候補は、現在ブロックでサブブロック単位でモーションベクトルを決定する方法を含むことができる。例えば、サブブロックマージ候補は、前述したサブブロックベースの時間的MVとアファインマージ候補の他にも、平面(planar)MV、回帰ベースMV(regression based MV)、STMVPなどを含むことができる。
一実施例をよれば、インターモードではモーションベクトル差分値を使用することができる。モーションベクトルインデックスに基づいてモーションベクトル予測子を決定し、前記モーションベクトル予測子とモーションベクトル差分値に基づいてモーションベクトルを決定することができる。インターモードの使用されるか否かは、他のモードの使用されるか否かによって決定されてよい。さらに他の実施例として、インターモードの使用されるか否かは、フラグによって決定されてよい。図11では、他のモードであるスキップモードとマージモードを使用しない場合にインターモードを使用する例を示している。
インターモードは、AMVPモード、アファインインターモードなどを含むことができる。インターモードは、モーションベクトル予測子とモーションベクトル差分値に基づいてモーションベクトルを決定するモードであってよい。アファインインターモードは、アファインモーション予測のコントロールポイントモーションベクトルを決定する時にモーションベクトル差分値を使用する方法であってよい。
図11を参照すると、スキップモード又はマージモードと決定された後に、サブブロックマージ候補を使用するか、マージ候補を使用するかを決定することができる。例えば、特定条件を満たす場合にサブブロックマージ候補を使用するか否かを示すmerge_subblock_flagをパースすることができる。また、前記特定条件は、ブロックサイズと関連した条件であってよい。例えば、幅(width)、高さ(height)、面積(area)などに関する条件でよく、これらを組み合わせて使用することができる。図11を参照すると、例えば、現在ブロック(CU)の幅及び高さが特定値以上である時の条件であってよい。merge_subblock_flagをパースする場合には、その値を0と推論(infer)することができる。仮にmerge_subblock_flagが1の場合にサブブロックマージ候補を使用し、0の場合にマージ候補を使用するものであってよい。サブブロックマージ候補を使用する場合に候補インデックスであるmerge_subblock_idxをパースすることができ、マージ候補を使用する場合に、候補インデックスであるmerge_idxをパースすることができる。この時、候補リストの最大個数が1である場合には、パースしなくてもよい。merge_subblock_idx又はmerge_idxをパースしない場合には、0と推論できる。
図11は、coding_unit関数を示しているが、イントラ予測関連内容は省略されているものでよく、図11は、インター予測と決定された場合を示すものでよい。
図12は、本開示の一実施例に係る多仮説予測(multi-hypothesis prediction)を示す図である。
前述したように、予測ブロック(prediction ブロック)に基づいてエンコード、デコードすることができる。本開示の一実施例によれば、多数の予測に基づいて予測ブロックを生成することができる。これを多仮説予測(multi-hypothesis(MH)prediction)と呼ぶことができる。前記予測は、ある予測方法によって生成したブロックを意味できる。また、前記多数の予測における予測方法は、イントラ予測、インター予測などの方法を含むことができる。または、前記多数の予測における予測方法は、さらに細分して、マージモード、AMVPモード、イントラ予測の特定モードなどを意味するものであってもよい。
また、多数の予測に基づいて予測ブロックを生成する方法として、多数の予測を加重和(weighted sum)することが可能である。
または、多数の予測の最大個数が既に設定されていてよい。例えば、多数の予測の最大個数は、2であってよい。したがって、単予測(uni prediction)の場合に2個の予測から、双予測(bi prediction)の場合に2個(1つの参照リストからの予測にのみ多数の予測を使用する場合)又は4個(2つの参照リストからの予測に多数の予測を使用する場合)の予測から予測ブロックを生成することが可能である。
または、多数の予測において使用可能な予測モードが既に設定されていてよい。または、多数の予測において使用可能な予測モード組合せが既に設定されていてよい。例えば、インター予測とイントラ予測で生成した予測を使用することが可能である。この時、インター予測やイントラ予測の一部のモードのみを多仮説予測に使用することが可能である。例えば、インター予測のうちマージモードのみを多仮説予測に使用することが可能である。または、インター予測のうちサブブロックマージ以外のマージモードのみを多仮説予測に使用することが可能である。または、イントラ予測のうち特定イントラモードのみを多仮説予測に使用することが可能である。例えば、イントラ予測のうち平面、DC、垂直、水平モードを含むモードのみを多仮説予測に使用することが可能である。
したがって、例えば、マージモードとイントラ予測への予測に基づいて予測ブロックを生成することが可能である。この時、イントラ予測には、平面、DC、垂直、水平モードのみを許容することが可能である。
図12を参照すると、予測1と予測2に基づいて予測ブロックを生成している。この時、予測1と予測2の加重和によって予測ブロックを生成しており、この時、予測1と予測2の加重値はそれぞれ、w1とw2である。
また、本開示の一実施例によれば、多数の予測に基づいて予測ブロックを生成する時に、多数の予測の加重値はブロック内における位置に基づくものでよい。または、多数の予測の加重値は、予測を生成するモードに基づくものでよい。
例えば、予測を生成するモードのいずれか1つがイントラ予測である場合に、予測モードに基づいて加重値を決定することができる。例えば、予測を生成するモードのいずれか1つがイントラ予測であり、方向モード(directional mode)である場合に、参照サンプルから遠くにある位置の加重値を上げることができる。より具体的に、予測を生成するモードのいずれか1つがイントラ予測であり、方向モードであり、他の予測を生成するモードがインター予測である場合に、参照サンプルの遠い側のイントラ予測に基づいて生成した予測の加重値を上げることができる。これは、インター予測の場合に、空間的隣候補に基づいてモーション補償をすることができ、その場合、現在ブロックとMCのために参照した空間的隣ブロックの動きが同一又は類似である確率があり、空間的隣ブロックの近傍の予測と動きがあるオブジェクトを含む領域の予測が、他の部分に比べて正確である確率がある。すると、空間的隣ブロックの反対側の近くに、他の部分に比べてレジデュアル信号がより多く残ることがあるが、多仮説予測においてイントラ予測を使用することによってこれを相殺することができる。イントラ予測の参照サンプル位置は、インター予測の空間的隣候補の近傍であり得るので、そこから遠い側の加重値を上げることができる。
さらに他の例として、予測を生成するモードのいずれか1つがイントラ予測であり、方向モードである場合に、参照サンプルから近くにある位置の加重値を上げることができる。より具体的に、予測を生成するモードのいずれか1つがイントラ予測であり、方向モードであり、他の予測を生成するモードがインター予測である場合に、参照サンプルから近い側のイントラ予測に基づいて生成した予測の加重値を上げることができる。これは、イントラ予測において、参照サンプルの近傍で高い予測正確度を有し得るためである。
さらに他の例として、予測を生成するモードのいずれか1つがイントラ予測であり、方向モードでない場合(例えば、平面、DCモードである場合)に、加重値はブロックにおける位置に関係なく一定であることが可能である。
また、多仮説予測において予測2に対する加重値は、予測1に対する加重値に基づいて決定されることが可能である。
次は、多数の予測に基づいて予測サンプルpbSamplesを決定する例を示す式である。
pbSamples[ x ][ y ] = Clip3( 0, ( 1 << bitDepth ) - 1, ( w * predSamples [ x ][ y ] + (8- w) * predSamplesIntra [ x ][ y ] ) >> 3 )
上記の式で、xとyは、ブロック内におけるサンプルの座標を示すことができ、次の範囲であってよい。x=0..nCbW-1及びy=0..nCbH-1。また、nCbWとnCbHはそれぞれ、現在ブロックの幅と高さであってよい。また、predSamplesは、インター予測によって生成したブロック/サンプルであり、predSamplesIntraは、イントラ予測によって生成したブロック/サンプルであってよい。また、加重値wは、次のように決定されてよい。
- If predModeIntra is INTRA_PLANAR or INTRA_DC or nCbW < 4 or nCbH < 4 or cIdx > 0, w is set equal to 4.
- Otherwise, if predModeIntra is INTRA_ANGULAR50 and y < (nCbH/4), w is set equal to 6.
- Otherwise, if predModeIntra is INTRA_ANGULAR50 and (nCbH/4) <= y < (nCbH/2), w is set equal to 5.
- Otherwise, if predModeIntra is INTRA_ANGULAR50 and (nCbH/2) <= y < (3 * nCbH/4), w is set equal to 4.
- Otherwise, if predModeIntra is INTRA_ANGULAR50 and (3 * nCbH/4) <= y < nCbH, w is set equal to 3.
- Otherwise, if predModeIntra is INTRA_ANGULAR18 and x < (nCbW/4), w is set equal to 6.
- Otherwise, if predModeIntra is INTRA_ANGULAR18 and (nCbW/4) <= x < (nCbW/2), w is set equal to 5.
- Otherwise, if predModeIntra is INTRA_ANGULAR18 and (nCbW/2) <= x < (3 * nCbW/4), w is set equal to 4.
- Otherwise, if predModeIntra is INTRA_ANGULAR18 and (3 * nCbW/4) <= x < nCbW, w is set equal to 3.
図13は、本開示の一実施例に係る多仮説予測関連シンタックスを示す図である。
図13を参照すると、mh_intra_flagは、多仮説予測の使用されるか否かを示すフラグであってよい。一実施例をよれば、多仮説予測は、mh_conditionsを満たす場合にのみ使用することが可能であり、mh_conditionsを満たさない場合に、mh_intra_flagをパースしないで0と推論することが可能である。例えば、mh_conditionsは、ブロックサイズに関する条件(condition)を含むことができる。また、mh_conditionsは、特定モードを使用するか否かに関する条件を含むことができる。例えば、merge_flagが1であり、サブブロック_merge_flagが0である場合に、mh_intra_flagをパースすることが可能である。
また、本開示の一実施例をよれば、多仮説予測におけるモードを決定するために、候補モードを多数のリストに分けて入れ、どのリストを使用するかをシグナルすることが可能である。図13を参照すると、mh_intra_luma_mpm_flagが多数のlistのうちどのリストを使用するかを示すフラグであってよい。仮にmh_intra_luma_mpm_flagが存在しない場合に、1と推論することが可能である。また、本開示の一実施例として、前記多数のリストは、MPMリストとnon-MPMリストであってよい。
また、本開示の一実施例をよれば、前記多数のリストのうちどのリストでどのインデックスの候補を使用するかを示すためにインデックスをシグナルすることができる。図13を参照すると、mh_intra_luma_mpm_idxがそのインデックスであってよい。また、一実施例として、インデックスは、特定リストが選択された場合にのみシグナルすることが可能である。図13を参照すると、mh_intra_luma_mpm_flagでいずれかのリストが決定された場合にのみ、mh_intra_luma_mpm_idxをパースすることができる。
例えば、図12で説明した一実施例のように、インター予測で生成した予測とイントラ予測で生成した予測に基づいて多仮説予測を行うことができる。また、インター予測を使用することがシグナルされた場合にのみ多仮説予測を行うことが可能である。または、マージモードのようなインター予測の特定モードを使用することがシグナルされた場合にのみ多仮説予測を行うことが可能である。その場合、インター予測に対するシグナリングは、別に行わなくて済む。また、一実施例として、イントラ予測で予測を生成する時に、候補モードは総4個であってよい。そして、総4個の候補モードをList1、List2に3個、1個に分けて入れることができる。この時、List2が選択された場合にインデックスをシグナルしなくて済む。また、List1が選択された場合にインデックスをシグナルすることができるが、List1に含まれた候補は3個であるので、可変長コーディング(variable length coding)でシグナルし、インデックスシグナリングに1ビット又は2ビットが必要であり得る。
図14は、本開示の一実施例に係る多仮説予測関連シンタックスを示す図である。
図13で説明したように、どのリストを使用するかを示すシグナリングが存在し得るが、図13~図14においてmh_intra_luma_mpm_flagがそれに該当し得る。
本開示の一実施例によれば、どのリストを使用するかを示すシグナリングは、特定の場合にのみ明示的にシグナルされてよい。また、明示的にシグナルされない場合に、既に設定された方法の通りにシグナリングの値を推論することができる。図14を参照すると、mh_mpm_infer_conditionの条件を満たす場合に、明示的シグナリングが存在しなく、条件を満たさない場合に、明示的シグナリングが存在してよい。また、mh_mpm_infer_condition条件を満たす場合に、mh_intra_luma_mpm_flagが存在しなく、その場合には1と推論できる。すなわち、MPMリストを使用すると推論できる。
図15は、本開示の一実施例に係る多仮説予測関連シンタックスを示す図である。
図13~図14で説明したように、どのリストを使用するかを示すシグナリングが存在してよく、ある条件を満たす場合にその値を推論できる。
本開示の一実施例によれば、どのリストを使用するかを示すシグナリング値を推論する条件は、現在ブロックサイズに基づき得る。例えば、現在ブロックの幅及び高さに基づき得る。より具体的に、現在ブロックの幅及び高さのうち大きいものが小さいもののn倍よりも大きい場合に、シグナリング値を推論することが可能である。例えば、nは2であってよい。
図15を参照すると、どのリストを使用するかを示すシグナリング値を推論する条件は、現在ブロックの幅及び高さのうち大きいものが小さいものの2倍よりも大きい条件であってよい。現在ブロックの幅、高さがそれぞれcbWidth、cbHeightであるとすれば、Abs(Log2(cbWidth/cbHeight))値は、cbWidthとcbHeightが同一である時に0、2倍差である時に1となる。したがって、cbWidthとcbHeightの差が2倍よりも大きい場合に、Abs(Log2(cbWidth/cbHeight))値は1よりも大きくなる(2以上)。
図16は、本開示の一実施例に係る多仮説予測モード決定方法を示す図である。
図13~図15で説明したように、モード決定は、多数のリストに基づいてなされてよい。前記モードは、イントラ予測に基づく予測を生成するイントラモードを意味できる。また、前記多数のリストがList1とList2を含むことができる。図16を参照すると、List1_flagでList1を使用するか否かを判断できる。また、List1に属し得る候補は多数であり、List2に属し得る候補は1個であってよい。また、多数のリストは2個のリストであってよい。
仮にList1_flagが推論される場合に、その値をList1を使用するものと推論できる。その場合、List1でどの候補を使用するかを示すインデックスであるList1_インデックスをパースすることができる。また、仮にList1_flagが推論されない場合、List1_flagをパースすることができる。仮にList1_flagが1である場合に、List1_インデックスをパースすることができ、List1_flagが1でない場合に、インデックスをパースしなくてよい。また、List1_flagが1である場合に、インデックスに基づいてList1の候補モードの中から実際に使用するモードを決定することができる。また、List1_flagが1でない場合に、インデックス無しでList2の候補モードを実際に使用するモードと決定することができる。すなわち、List1ではフラグ及びインデックスに基づいてモードが決定され、List2ではフラグに基づいてモードが決定されてよい。
図17は、本開示の一実施例に係る候補リスト生成方法を示す図である。
本開示の一実施例によれば、リスト内の候補モードを決定するインデックスを可変長コーディングする場合に、コーディング効率を上げるために、候補リストに含まれるモード順序を決定する方法が存在してよい。例えば、List1に含まれるモード順序を決定する方法が存在してよい。このとき、モード順序を決定するために、現在ブロック周辺のモードを参照することができる。また、List2は、現在ブロック周辺のモードを参照しないで決定することができる。例えば、現在ブロック周辺のモードを参照してList1を生成し、List1に含まれていないモードをList2に含めることができる。
また、List1はMPMモードであり、List2はnon-MPMモードであってよい。また全候補モードは4個であり、List1に3個、List2に1個のモードが含まれてよい。
図17を参照すると、List1が用いられるか否かを示すシグナリングであるList1_flagが存在してよい。仮にList1が用いられる場合に、List1を生成し、List1中のモードが選択されてよい。この時、List1生成とList1の使用されるか否かの確認は、いかなる順序であってもよい。ただし、List1が用いられる状況では、List1の使用されるか否かを確認する前又は後にList1が生成されてよい。また、List1が用いられる場合に、List2を生成する過程を行わなくて済む。仮にList1が使用されない場合にList2を生成し、List2中のモードが選択されてよい。この時、List2を生成するためにList1を生成することが可能である。そして、候補モードのうち、List1に含まれない候補をList2に含めることが可能である。
また、本開示の一実施例によれば、List1生成方法は、List1の使用されるか否か(List1_flag値)、List1の使用されるか否かを推論するか否かなどに関係なく同一であってよい。
この時、Listシグナリングとモードシグナリングは、図16などで前述した実施例に従うことができる。
次に、図16~図17で説明した多数のリスト生成方法をさらに説明する。前記多数のリストは、List1とList2を含むことができる。また、前記多数のリストは、特に多仮説予測過程で使用するリストであってよい。
本開示の一実施例によれば、現在ブロック周辺のモードを参照して多数のリストを生成することができる。また、前記多数のリストから選択したモードを用いてイントラ予測をし、前記イントラ予測をインター予測と結合(多仮説予測)して予測ブロックとして使用することができる。一実施例として、前記多数のリストに含まれてよいモード(候補モード)は、イントラ予測方法の平面モード、DCモード、垂直モード、水平モードであってよい。また、垂直モードは、図6でインデックス50のモードで、水平モードは、図6でインデックス18のモードであってよい。また、平面モードとDCモードはそれぞれ、インデックス0、1であってよい。
本開示の一実施例によれば、現在ブロック周辺のモードを参照してcandModeListを生成することができる。また、candModeListは、先の実施例で説明したList1であってよい。一実施例として、現在ブロック周辺のモード或いは現在ブロック周辺のモードに基づくモードであるcandIntraPredModeXが存在してよい。ここで、XはA、Bなどの、現在ブロック周辺の特定位置に該当することを示すための文字であってよい。
一実施例として、多数のcandIntraPredModeXが一致するか否かに基づいてcandModeListを生成することができる。例えば、candIntraPredModeXは2つの位置に対して存在してよく、それをcandIntraPredModeAとcandIntraPredModeBと表すことができる。仮にcandIntraPredModeAとcandIntraPredModeBが同一である場合、candModeListは平面モードとDCモードを含むことができる。
仮にcandIntraPredModeAとcandIntraPredModeBとが同一であり、その値が平面モード又はDCモードを示す場合に、candIntraPredModeAとcandIntraPredModeBが示すモードをcandModeListに追加することができる。また、この場合、平面モードとDCモードのうち、candIntraPredModeAとcandIntraPredModeBが示していないモードをcandModeListに追加することができる。また、この場合、平面モード又はDCモードではなく既に設定されたモードをcandModeListに追加することができる。一実施例として、この場合、平面モード、DCモード、前記既に設定されたモードのcandModeList内における順序が既に設定されていてよい。例えば、平面、DC、前記既に設定されたモードの順序であってよい。すなわち、candModeList[0]=平面モード、candModeList[1]=DCモード、candModeList[2]=前記既に設定されたモードであってよい。また、前記既に設定されたモードは、垂直モードであってよい。さらに他の実施例として、この場合、平面モード、DCモード、前記既に設定されたモードのうち、candIntraPredModeAとcandIntraPredModeBが示すモードがcandModeListの最先頭に位置し、平面モードとDCモードのうち、candIntraPredModeAとcandIntraPredModeBが示していないモードがcandModeListの次に位置し、前記既に設定されたモードがその次に位置することが可能である。
また、仮にcandIntraPredModeAとcandIntraPredModeBが同一であり、その値が平面モードとDCモードを示さない場合に、candIntraPredModeAとcandIntraPredModeBが示すモードを、candModeListに追加することができる。また、平面モードとDCモードがcandModeListに追加されてよい。また、この場合、candIntraPredModeAとcandIntraPredModeBが示すモードと平面モード、DCモードのcandModeList内における順序は、既に設定されていてよい。また、既に設定された順序は、candIntraPredModeAとcandIntraPredModeBが示すモード、平面モード、DCモードの順であってよい。すなわち、candModeList[0]=candIntraPredModeA、candModeList[1]=平面モード、candModeList[2]=DCモードであってよい。
また、仮に、candIntraPredModeAとcandIntraPredModeBが異なる場合に、candIntraPredModeAとcandIntraPredModeBはいずれもcandModeListに追加することができる。またcandIntraPredModeAとcandIntraPredModeBは特定の順序に従ってcandModeListに含まれてよい。例えば、candIntraPredModeA、candIntraPredModeBの順にcandModeListに含まれてよい。また、候補モード間に既に設定された順序があってよく、前記既に設定された順序に従うモードのうち、candIntraPredModeAとcandIntraPredModeB以外のモードをcandModeListに追加することができる。また、前記candIntraPredModeAとcandIntraPredModeB以外のモードは、candModeList内でcandIntraPredModeAとcandIntraPredModeBよりも後に位置してよい。また、前記既に設定された順序は、平面モード、DCモード、垂直モードであってよい。または、前記既に設定された順序は、平面モード、DCモード、垂直モード、水平モードであってよい。すなわち、candModeList[0]=candIntraPredModeA、candModeList[1]=candIntraPredModeBであってよく、candModeList[2]は平面モード、DCモード、垂直モードのうち、candIntraPredModeAでなく、candIntraPredModeBでない最先頭にあるモードであってよい。
また、候補モードのうち、candModeListに含まれていないモードがcandIntraPredModeCになってよい。また、candIntraPredModeCはList2に含まれてよい。また、これは、前述したList1が用いられる否かを示すシグナリングが、使用しないと示す場合に、candIntraPredModeCを決めることが可能である。
また、List1を使用する場合に、candModeListの中でインデックスによってモードを決定し、List1を使用しない場合にList2のモードを使用することが可能である。
また、説明したように、candModeListを生成した後に、candModeListを修正する過程が追加されてよい。例えば、現在ブロックサイズ条件によって、前記修正する過程をさらに行っても行わなくてもよい。例えば、前記現在ブロックサイズ条件は、現在ブロックの幅と高さに基づき得る。例えば、現在ブロックの幅と高さのうち、大きいものが、小さいもののn倍よりも大きい場合に、前記修正する過程をさらに行うことができる。nは2であってよい。
また、前記修正する過程は、candModeListにいずれかのモードが含まれているとき、そのモードを他のモードに代替する過程であってよい。例えば、candModeListに垂直モードが含まれているとき、垂直モードに代えて水平モードをcandModeListに入れることができる。または、candModeListに垂直モードが含まれているとき、垂直モードに代えて前記candIntraPredModeCをcandModeListに入れることができる。しかし、前述したcandModeListを生成すると、平面モードとDCモードは常にcandModeListに含まれてよく、この場合、candIntraPredModeCは水平モードであってよい。また、このような修正する過程を使用することは、現在ブロックの高さが幅に比べてn倍よりも大きい時であってよい。例えば、nは2であってよい。これは、高さが幅よりも大きい場合に、ブロックの下方はイントラ予測の参照サンプルから遠いため、垂直モードの正確度が低いことがあるためである。または、このような修正する過程を使用することは、List1を使用すると推論される場合であってよい。
前記修正する過程のさらに他の例として、candModeListに水平モードが含まれているとき、水平モードに代えて垂直モードをcandModeListに入れることができる。または、candModeListに水平モードが含まれているとき、水平モードに代えて前記candIntraPredModeCをcandModeListに入れることができる。しかし、前述したcandModeListを生成すると平面モードとDCモードは常にcandModeListに含まれてよく、この場合、candIntraPredModeCは垂直モードであってよい。また、このような修正する過程を使用することは、現在ブロックの幅が高さに比べてn倍よりも大きい時であってよい。例えば、nは2であってよい。これは、幅が高さよりも大きい場合に、ブロック右側はイントラ予測の参照サンプルから遠いため、水平モードの正確度が低いことがあるためである。または、このような修正する過程を使用することは、List1を使用すると推論される場合であってよい。
上述したリスト設定方法の例を、下記に再び述べる。下記において、IntraPredModeYは、多仮説予測においてイントラ予測のために使用するモードであってよい。また、これは、ルマ成分(luma component)のモードであってよい。一実施例として、多仮説予測においてクロマ成分(chroma component)のイントラ予測モードは、ルマ成分のモードに追従してよい。また、mh_intra_luma_mpm_flagは、どのリストを使用するかを示すシグナリングであってよい。すなわち、例えば、図13~図15のmh_intra_luma_mpm_flag、図16~図17のList1_flagであってよい。また、mh_intra_luma_mpm_idxは、リスト内のどの候補を使用するかを示すインデックスであってよい。すなわち、例えば、図13~図15のmh_intra_luma_mpm_idx、図16のList1_インデックスであってよい。またxCb、yCbは、現在ブロックの上左端(top-left)のx、y座標であってよい。また、cbWidthとcbHeightは、現在ブロックの幅と高さであってよい。
The candModeList[ x ] with x = 0..2 is derived as follows:
A. If candIntraPredModeB is equal to candIntraPredModeA, the following applies:
a. If candIntraPredModeA is less than 2 (i.e., equal to INTRA_PLANAR or INTRA_DC), candModeList[ x ] with x = 0..2 is derived as follows:
candModeList[ 0 ] = INTRA_PLANAR
candModeList[ 1 ] = INTRA_DC
candModeList[ 2 ] = INTRA_ANGULAR50
b. Otherwise, candModeList[ x ] with x = 0..2 is derived as follows:
candModeList[ 0 ] = candIntraPredModeA
candModeList[ 1 ] = INTRA_PLANAR
candModeList[ 2 ] = INTRA_DC
B. Otherwise (candIntraPredModeB is not equal to candIntraPredModeA), the following applies:
a. candModeList[ 0 ] and candModeList[ 1 ] are derived as follows:
candModeList[ 0 ] = candIntraPredModeA
candModeList[ 1 ] = candIntraPredModeB
b. If neither of candModeList[ 0 ] and candModeList[ 1 ] is equal to INTRA_PLANAR, candModeList[ 2 ] is set equal to INTRA_PLANAR,
c. Otherwise, if neither of candModeList[ 0 ] and candModeList[ 1 ] is equal to INTRA_DC, candModeList[ 2 ] is set equal to INTRA_DC,
d. Otherwise, candModeList[ 2 ] is set equal to INTRA_ANGULAR50.
IntraPredModeY[ xCb ][ yCb ] is derived by applying the following procedure:
A. If mh_intra_luma_mpm_flag[ xCb ][ yCb ] is equal to 1, the
IntraPredModeY[ xCb ][ yCb ] is set equal to candModeList[ intra_luma_mpm_idx[ xCb ][ yCb ] ].
B. Otherwise, IntraPredModeY[ xCb ][ yCb ] is set to equal to candIntraPredModeC, derived by applying the following steps:
a. If neither of candModeList[ x ], x = 0..2 is equal to INTRA_PLANAR, candIntraPredModeC is set equal to INTRA_PLANAR,
b. Otherwise, if neither of candModeList[ x ], x = 0..2 is equal to INTRA_DC, candIntraPredModeC is set equal to INTRA_DC,
c. Otherwise, if neither of candModeList[ x ], x = 0..2 is equal to INTRA_ANGULAR50, candIntraPredModeC is set equal to INTRA_ANGULAR50,
d. Otherwise, if neither of candModeList[ x ], x = 0..2 is equal to INTRA_ANGULAR18. candIntraPredModeC is set equal to INTRA_ANGULAR18,
The variable IntraPredModeY[ x ][ y ] with x = xCb..xCb + cbWidth - 1 and y = yCb..yCb + cbHeight - 1 is set to be equal to IntraPredModeY[ xCb ][ yCb ]. One additional setting is when cbHeight is larger than double of cbWidth, mh_intra_luma_mpm_flag[ xCb ][ yCb ] is inferred to be 1 and if candModeList[ x ], x = 0..2 is equal to INTRA_ANGULAR50, candModeList[ x ] is replaced with candIntraPredModeC. Another additional setting is when cbWidth is larger than double of cbHeight, mh_intra_luma_mpm_flag[ xCb ][ yCb ] is inferred to be 1 and if candModeList[ x ], x = 0..2 is equal to INTRA_ANGULAR18, candModeList[ x ] is replaced with candIntraPredModeC.
図18は、本開示の一実施例に係る多仮説予測において参照する周辺位置を示す図である。
前述したように、多仮説予測の候補リストを作る過程で周辺位置を参照することができる。例えば、前述したcandIntraPredModeXが必要であり得る。この時、参照する現在ブロック周辺のAとBの位置は、図18に示すNbAとNbBであってよい。すなわち、現在ブロックの上左端の直ぐ左側と直ぐ上側であってよい。仮に現在ブロックの上左端の位置が図18に示しているようにCbであり、その座標が(xCb,yCb)であるとき、NbAは、(xNbA,yNbA)=(xCb-1,yCb)であり、NbBは、(xNbB,yNbB)=(xCb,yCb-1)であってよい。
図19は、本開示の一実施例に係る周辺のモードを参照する方法を示す図である。
前述したように、多仮説予測の候補リストを作る過程で周辺位置を参照することができる。また、周辺のモードをそのまま使用するか周辺のモードに基づくモードを使用してリストを生成することが可能である。周辺位置を参照して得たモードがcandIntraPredModeXであってよい。
一実施例として、周辺位置が使用不可である場合に、candIntraPredModeXは、既に設定されたモードになってよい。使用不可な場合は、周辺位置がインター予測を使用した場合、定められたデコーディング、エンコーディングの順序上モード決定がされていない場合などを含むことができる。
または、周辺位置が多仮説予測を使用しない場合に、candIntraPredModeXは、既に設定されたモードになってよい。
または、周辺位置が現在ブロックの属したCTUを越えて上にある場合に、candIntraPredModeXは、既に設定されたモードになってよい。さらに他の例として、周辺位置が現在ブロックの属したCTUを外れる場合に、candIntraPredModeXは、既に設定されたモードになってよい。
また、一実施例として、前記既に設定されたモードは、DCモードであってよい。さらに他の実施例として、前記既に設定されたモードは、平面モードであってよい。
また、仮に周辺位置のモードがスレショルド(threshold)角度を超えるか否か或いは周辺位置のモードのインデックスがスレショルドを超えるか否かによってcandIntraPredModeXを設定することができる。例えば、周辺位置のモードのインデックスが対角モードインデックス(diagonal mode index)よりも大きい場合に、candIntraPredModeXを垂直モードインデックスに設定することができる。また、周辺位置のモードのインデックスが対角モードインデックス以下であり、方向モードである場合に、candIntraPredModeXを水平モードインデックスに設定することができる。対角モードインデックスは、図6でモード34であってよい。
また、仮に周辺位置のモードが平面モード又はDCモードである場合に、candIntraPredModeXは、そのまま平面モード又はDCモードに設定されてよい。
図19を参照すると、mh_intra_flagは、多仮説予測を使用するか(使用したか)否かを示すシグナリングであってよい。また、隣ブロックで使用したイントラ予測モードがXであってよい。また、現在ブロックが多仮説予測を使用でき、周辺ブロックのモードに基づくcandIntraPredModeを使用して候補リストを生成できるが、周辺が多仮説予測を使用していないので、周辺ブロックのイントラ予測モードがいずれであっても、また、周辺ブロックがイントラ予測を使用したか否かにかかわらず、candIntraPredModeを、既に設定されたモードであるDCモードに設定することができる。
上述した周辺モード参照方法の例を、下記に再び述べる。
For X being replaced by either A or B, the variables candIntraPredModeX are derived as follows:
1. The availability derivation process for a block as specified in Neighbouring blocks availability checking process is invoked with the location ( xCurr, yCurr ) set equal to ( xCb, yCb ) and the neighbouring location ( xNbY, yNbY ) set equal to ( xNbX, yNbX ) as inputs, and the output is assigned to availableX.
2. The candidate intra prediction mode candIntraPredModeX is derived as follows:
A. If one or more of the following conditions are true, candIntraPredModeX is set equal to INTRA_DC.
a. The variable availableX is equal to FALSE.
b. mh_intra_flag[ xNbX ][ yNbX ] is not equal to 1.
c. X is equal to B and yCb - 1 is less than ( ( yCb >> CtbLog2SizeY ) << CtbLog2SizeY ).
B. Otherwise, if IntraPredModeY[ xNbX ][ yNbX ] > INTRA_ANGULAR34, candIntraPredModeX is set equal to INTRA_ANGULAR50.
C. Otherwise, if IntraPredModeY[ xNbX ][ yNbX ] <= INTRA_ANGULAR34 and IntraPredModeY[ xNbX ][ yNbX ] > INTRA_DC, candIntraPredModeX is set equal to INTRA_ANGULAR18.
D. Otherwise, candIntraPredModeX is set equal to IntraPredModeY[ xNbX ][ yNbX ].
前述したリスト設定方法においてcandIntraPredModeXは、前記周辺モード参照方法によって決定されてよい。
図20は、本開示の一実施例に係る候補リスト生成方法を示す図である。
図13~図17で説明したList1とList2生成方法によれば、現在ブロック周辺のモードを参照してList1を生成し、候補モードのうちList1に含まれていないモードをList2に入れることができる。ピクチャーにおいて空間的な類似性があるので、周辺のモードを参照しているものは、優先順位の高いものであり得る。すなわち、List1がList2に比べて優先順位が高くてよい。しかしながら、図13~図17で説明したList1とList2シグナリング方法によれば、リストを決定するシグナリングが推論されない場合にList1のモードを使用するので、フラグとインデックスを使用してシグナルし、List2のモードを使用するので、フラグのみを使用することができる。すなわち、List2のシグナリングが相対的に少ないビットを使用することができる。しかし、優先順位の高いリストのモードに相対的多いビットがシグナリングのために用いられることは、コーディング効率の側面でよくないことがある。したがって、本開示のような優先順位の高いリスト及びモードに相対的少ないビットのシグナリングを使用する方法があり得る。
本開示の一実施例によれば、List1のみ使用可能か否かによって候補リスト生成方法が異なってよい。List1のみ使用可能か否かは、使用するリストを示すシグナリングが推論されるか否かを示すことができる。例えば、候補モードを有し、既に設定された方法によって生成するList3がある場合には、List3をList1とList2に分けて入れることができる。例えば、既に設定された方法によって生成するList3及び生成方法は、前述したcandModeList及びその生成方法であってよい。仮に、使用するリストを示すシグナリングが推論される場合に、List1のみを使用することができ、その場合、List3の先頭部からList1に埋めることができる。また、仮に、使用するリストを示すシグナリングが推論されない場合に、List1又はList2が使用されてよく、その場合、List3の先頭部からList2に満たし、残りをList1に満たすことができる。また、この場合、List1を埋める時にもList3の順序で埋めることが可能である。すなわち、現在ブロック周辺のモードを参照してcandIntraPredModeXを候補リストに入れることができるが、candIntraPredModeXを、リストを示すシグナリングが推論される場合にList1に入れ、推論されない場合にList2に入れることができる。List2のサイズが1であってよく、その場合、candIntraPredModeAを、リストを示すシグナリングが推論される場合にList1に入れ、推論されない場合にList2に入れることができる。candIntraPredModeAは、前記List3の最先頭のモードであるList3[0]であってよい。したがって、本開示では、場合によってList1とList2の両方に、周辺モードに基づくモードであるcandIntraPredModeAがそのまま入ってよい。一方、図13~図17で説明した方法では、candIntraPredModeAはList1にのみ入ることができた。また、本開示では、List1生成方法が、使用するリストを示すシグナリングが推論されるか否かによって異なってくる。
図20を参照すると、候補モードは、多仮説予測のイントラ予測を生成するために使用できる候補であってよい。使用するリストを示すシグナリングであるList1_flagが推論されるか否かによって候補リスト生成方法が異なってよい。仮に推論される場合には、List1を使用すると推論されてよく、List1のみを使用できるので、List3の最上位にあるものからList1に入れることができる。List3を生成する際には、周辺のモードに基づくモードを最上位に入れることができる。また、仮に推論されない場合には、List1とList2の両方とも用いられていので、List3の最上位にあるものから、シグナリングの少ないList2に入れることができる。そして、List1が必要である場合に、例えば、List1を使用するとシグナルされた場合に、List3のうち、List2に含まれた以外のものをList1に入れることができる。
本開示において、List3を使用して説明した部分があるが、これは概念的な説明でよく、実際にList3を保存しないでList1、List2を生成することが可能である。
下の実施例によって、候補リストを作る方法と図16~図17で説明した候補リスト作る方法を、場合によって使用することが可能である。例えば、どのリストを使用するかを示すシグナリングが推論されるか否かによって、2種類の候補リストを作る方法のいずれかを選択することができる。また、これは、多仮説予測の場合であってよい。また、下のList1は3個のモードが入ってよく、List2は1個のモードが入ってよい。また、モードシグナリング方法は、図13~図16で説明したように、List1のモードはフラグ及びインデックスでシグナルし、List2のモードはフラグでシグナルすることが可能である。
一実施例として、candIntraPredModeAとcandIntraPredModeBが同一であり、candIntraPredModeAが平面モード又はDCモードの時に、List2[0]=平面モード、List1[0]=DCモード、List1[1]=垂直モード、List1[2]=水平モードであってよい。
さらに他の実施例として、candIntraPredModeAとcandIntraPredModeBが同一であり、candIntraPredModeAが平面モード又はDCモードの時に、List2[0]=candIntraPredModeA、List1[0]=!candIntraPredModeA、List1[1]=垂直モード、List1[2]=水平モードであってよい。
一実施例として、candIntraPredModeAとcandIntraPredModeBが同一であり、candIntraPredModeAが方向モードの時に、List2[0]=candIntraPredModeA、List1[0]=平面モード、List1[1]=DCモード、List1[2]=垂直モードであってよい。
一実施例として、candIntraPredModeAとcandIntraPredModeBが異なる場合に、List2[0]=candIntraPredModeA、List1[0]=candIntraPredModeBであってよい。List1[1]とList1[2]は、平面モード、DCモード、垂直モード、水平モードのうち、candIntraPredModeAとcandIntraPredModeBでないものから埋めることができる。
図21は、本開示の一実施例に係る候補リスト生成方法を示す図である。
先の実施例では多数のリストに基づいてモードを決定する方法を説明した。図21の発明では、多数のリストではなく1つのリストに基づいてモードを決定することができる。
図21を参照すると、図21(a)に示すように、多仮説予測の候補モードを全て含む1つの候補リストを生成することができる。候補リストが1つであるので、図21(b)を参照すると、リストを選択するシグナリングは存在しなく、候補リストのモードのうちどのモードを使用するかを示すインデックスシグナリングがあってよい。したがって、多仮説予測の使用されるか否かを示すmh_intra_flagが1である場合に、候補インデックスであるmh_intra_luma_idxをパースすることができる。
一実施例によれば、多仮説予測の候補リスト生成方法は、既存イントラ予測においてMPMリスト生成方法に基づくものでよい。
一実施例によれば、多仮説予測の候補リスト生成方法は、前述した図17で説明したList1とList2生成方法においてList1とList2の順序でつなぎ合わせた形態であってよい。
すなわち、多仮説予測の候補リストをcandModeListとすれば、本実施例においてcandModeListのサイズが4であってよい。仮にcandIntraPredModeAとcandIntraPredModeBが同一であり、平面モード又はDCモードである場合に、candModeListは、既に設定された順序によって決定されてよい。例えば、candModeList[0]=平面モード、candModeList[1]=DCモード、candModeList[2]=垂直モード、candModeList[3]=水平モードであってよい。
さらに他の例として、仮にcandIntraPredModeAとcandIntraPredModeBが同一であり、平面モード又はDCモードである場合に、candModeList[0]=candIntraPredModeA、candModeList[1]=!candIntraPredModeA、candModeList[2]=垂直モード、candModeList[3]=水平モードであってよい。
仮にcandIntraPredModeAとcandIntraPredModeBが同一であり、方向モードである場合に、candModeList[0]=candIntraPredModeA、candModeList[1]=平面モード、candModeList[2]=DCモード、candModeList[3]=candIntraPredModeA、平面モード及びDCモード以外のモードであってよい。
仮にcandIntraPredModeAとcandIntraPredModeBが異なる場合に、candModeList[0]=candIntraPredModeA、candModeList[1]=candIntraPredModeBであってよい。また、candModeList[2]とcandModeList[3]は、候補モードの既に設定された順序によって、candIntraPredModeAとcandIntraPredModeB以外のモードを順次に入れることができる。前記既に設定された順序は、平面モード、DCモード、垂直モード、水平モードであってよい。
本開示の一実施例によれば、ブロックサイズ条件によって候補リストが異なってよい。仮に、ブロック幅と高さのうち、相対的に大きいものが残りもののn倍よりも大きい場合に、候補リストはより短くてよい。例えば、幅が高さのn倍よりも大きい場合に、図21で説明した候補リストにおいて水平モードを候補リストから除き、その次にあるモードを繰り上げて埋めることができる。また、高さが幅のn倍よりも大きい場合に、図21で説明した候補リストにおいて垂直モードを候補リストから除き、その次にあるモードを繰り上げて埋めることができる。したがって、幅が高さのn倍よりも大きい場合には、候補リストサイズが3であってよい。また、幅が高さのn倍よりも大きい場合には、そうでない場合に比べて候補リストのサイズが小さい又は同一であってよい。
本開示の一実施例によれば、図21の実施例の候補インデックスは可変長コーディングされてよい。これは、使用される確率が比較的高いモードをリストの先頭部に埋めることによってシグナリング効率を上げるためのものであってよい。
さらに他の実施例によれば、図21の実施例の候補インデックスは、固定長コーディング(fixed length coding)されてよい。多仮説予測において使用するモード個数は、2の指数乗個数であってよい。例えば、前述したように、4個のイントラ予測モードの中から使用することができる。この場合、固定長コーディングしても割り当てられない値が発生しないので、シグナリングにおいて不要な部分が発生しないためである。また、固定長コーディングされる場合に、リスト構成(list construction)される場合の数は、1個であってよい。いずれのインデックスをシグナルしてもビット数が同一であるためである。
一実施例によれば、候補インデックスが場合によって可変長コーディング又は固定長コーディングされてよい。例えば、先の実施例のように、場合によって候補リストサイズが変わってよい。一実施例として、候補リストサイズによって、候補インデックスが可変長コーディング又は固定長コーディングされてよい。例えば、候補リストサイズが2の指数乗である場合に固定長コーディングされ、2の指数乗でない場合に可変長コーディングされてよい。すなわち、先の実施例によれば、ブロックサイズ条件によってコーディング方法が変わってよい。
本開示の実施例によれば、多仮説予測を使用する時にDCモードを使用する場合は、ブロック全体に対して多数の予測間の加重値が同一であるので、予測ブロックの加重値を調節することと同一であり得る。したがって、多仮説予測においてDCモードを除外させることができる。
一実施例として、多仮説予測において平面モード、垂直モード、水平モードのいずれかのみを使用することが可能である。この場合、図21に示しているように、1つのリストを使用して多仮説予測をシグナルすることが可能である。また、インデックスシグナリングに可変長コーディングを使用することができる。一実施例として、固定された順序で リストを生成することができる。例えば、平面モード、垂直モード、水平モードの順であってよい。さらに他の実施例として、現在ブロック周辺のモードを参照してリストを生成することができる。例えば、仮にcandIntraPredModeAとcandIntraPredModeBが同一である場合に、candModeList[0]=candIntraPredModeAであってよい。仮にcandIntraPredModeAとcandIntraPredModeBが同一であり、candIntraPredModeAが平面モードである場合に、candModeList[1]とcandModeList[2]は、既に設定された順序に従って設定することができる。仮にcandIntraPredModeAとcandIntraPredModeBが同一であり、candIntraPredModeAが平面モードでない場合に、candModeList[1]=平面モード、candModeList[2]=candIntraPredModeAではなく、平面モード以外のモードであってよい。仮にcandIntraPredModeAとcandIntraPredModeBが異なる場合に、candModeList[0]=candIntraPredModeA、candModeList[1]=candIntraPredModeB、candModeList[2]=candIntraPredModeAではなく、candIntraPredModeB以外のモードであってよい。
さらに他の実施例として、多仮説予測において3つのモードのいずれかのみを使用することが可能である。前記3つのモードは、平面モードとDCモードを含んでよい。また、前記3つのモードは、垂直モードと水平モードのいずれか一つを条件によって含んでよい。前記条件は、ブロックサイズに関連した条件であってよい。例えば、ブロックの幅と高さのいずれが大きいかによって、水平モードを含むか垂直モードを含むかを決定することが可能である。例えば、ブロックの幅が高さよりも大きい場合に垂直モードを含むことができる。ブロックの高さが幅よりも大きい場合に水平モードを含むことができる。ブロックの高さと幅が同一である場合に、垂直モード又は水平モードのうち、約束されているモードを含むことができる。
一実施例として、固定された順序でリストを生成することができる。例えば、平面モード、DCモード、垂直又は水平モードの順であってよい。さらに他の実施例として、現在ブロック周辺のモードを参照してリストを生成することができる。例えば、仮にcandIntraPredModeAとcandIntraPredModeBが同一である場合に、candModeList[0]=candIntraPredModeAであってよい。仮にcandIntraPredModeAとcandIntraPredModeBが同一であり、candIntraPredModeAが方向モードでない場合に、candModeList[1]とcandModeList[2]は、既に設定された順序に従って設定することができる。仮にcandIntraPredModeAとcandIntraPredModeBが同一であり、candIntraPredModeAが方向モードである場合に、candModeList[1]=平面モード、candModeList[2]=DCモードであってよい。仮にcandIntraPredModeAとcandIntraPredModeBが異なる場合に、candModeList[0]=candIntraPredModeA、candModeList[1]=candIntraPredModeB、candModeList[2]=candIntraPredModeAではなく、candIntraPredModeB以外のモードであってよい。
本開示のさらに他の実施例によれば、多仮説予測において2つのモードのいずれかのみを使用することが可能である。前記2つのモードは、平面モードを含むことが可能である。また、前記2つのモードは、垂直モードと水平モードのいずれか一つを条件によって含むことが可能である。前記条件は、ブロックサイズに関連した条件であってよい。例えば、ブロックの幅と高さのいずれが大きいかによって、水平モードを含むか垂直モードを含むかを決定することが可能である。例えば、ブロックの幅が高さよりも大きい場合に、垂直モードを含むことができる。ブロックの高さが幅よりも大きい場合に、水平モードを含むことができる。ブロックの高さと幅が同一である場合に、垂直モード又は水平モードのうち、約束されているモードを含むことができる。この場合、多仮説予測においてどのモードを使用するかを示すためのフラグがシグナルされてよい。一実施例によれば、ブロックサイズによって特定モードを除外させることができる。例えば、ブロックサイズが小さい場合に特定モードを除外させることができる。例えば、ブロックサイズが小さい場合に、多仮説予測において平面モードのみを使用することが可能である。仮に特定モードが除外されると、モードシグナリングを省略したり減らしてシグナルすることが可能である。
本開示のさらに他の実施例によれば、多仮説予測において1つのモードだけを使用することが可能である。前記1つのモードは、平面モードであってよい。さらに他の実施例として、前記1つのモードは、垂直モードと水平モードの中から、ブロックサイズに基づいて定められることが可能である。例えば、ブロックの幅と高さのうちいずれのものが大きいかによって、垂直モードと水平モードの中から決定されてよい。例えば、ブロックの幅が高さよりも大きい場合に垂直モードと決定され、ブロックの高さが幅よりも大きい場合に水平モードと決定されてよい。仮にブロックの幅と高さが同一である場合に、既に設定されたモードと決定することが可能である。仮にブロックの幅と高さが同一である場合に、水平モード又は垂直モードのうち、既に設定されたモードと決定することが可能である。仮にブロックの幅と高さが同一である場合に、平面モード又はDCモードのうち、既に設定されたモードと決定することが可能である。
また、本開示の実施例によれば、多仮説予測で生成した予測をフリップするフリッピング(flipping)シグナリングが存在してよい。これにより、多仮説予測において1つのモードが選択されたとしても、フリッピングによって反対側レジデュアルをなくす効果を有することができる。また、これにより、多仮説予測において使用可能な候補モードを減らす効果を有することができる。より具体的に、例えば、前記実施例のうち、1つのモードのみを使用する場合に、フリッピングを使用することが可能である。これにより、予測性能を高めることができる。前記フリッピングは、x軸に対するフリッピング又はy軸に対するフリッピング又はx、yの両軸に対するフリッピングを意味できる。一実施例として、多仮説予測において選択されたモードに基づいてフリッピング方向が決定されることが可能である。例えば、多仮説予測において選択されたモードが平面モードである場合に、x、y両軸に対するフリッピングであると決定できる。またx、y両軸に対してフリッピングすることは、ブロック形状(block shape)によることであってよい。例えば、ブロックが正方形でない場合に、x、y両軸に対してフリッピングしないと決定できる。例えば、多仮説予測において選択されたモードが水平モードである場合に、x軸に対するフリッピングであると決定できる。例えば、多仮説予測において選択されたモードが垂直モードである場合に、y軸に対するフリッピングであると決定できる。また、多仮説予測において選択されたモードがDCモードである場合に、フリッピングがないと決定し、明示的シグナルしなくてよい。
また、多仮説予測においてDCモードは、イルミネーション補償(illumination compensation)と類似の効果を有し得る。したがって、本開示の一実施例によれば、多仮説予測においてDCモードとイルミネーション補償方法のいずれか一方を使用すると、いずれか他方を使用しなくてよい。
また、多仮説予測は、一般化した双予測(generalized bi-prediction,GBi)と類似の効果を有し得る。例えば、多仮説予測においてDCモードはGBiと類似の効果を有し得る。GBiは、ブロック単位、CU単位で双予測の2つの参照ブロック間の加重値を調節する手法であってよい。したがって、本開示の一実施例によれば、多仮説予測(又は、多仮説予測においてDCモード)とGBi方法ののいずれか一方を使用すると、いずれか他方を使用しなくてよい。また、これは、多仮説予測の予測のうち双予測であるものを含む場合であってよい。例えば、多仮説予測の選択されたマージ候補が双予測である場合に、GBiを使用しなくてよい。これらの実施例において、多仮説予測とGBi間の関係は、多仮説予測の特定モード、例えば、DCモードを使用する時に限ってよい。または、GBi関連シグナリングが多仮説予測関連シグナリングよりも前に存在する場合に、GBiを使用すると、多仮説予測又は多仮説予測の特定モードを使用しなくてよい。
ある方法を使用しないということは、該ある方法に対するシグナリングをせず、関連シンタックスをパースしないことを意味できる。
図22は、本開示の一実施例に係る多仮説予測において参照する周辺位置を示す図である。
前述したように、多仮説予測の候補リストを作る過程で周辺位置を参照することができる。例えば、前述したcandIntraPredModeXが必要であり得る。この時、参照する現在ブロック周辺のAとBの位置は、図22に示すNbAとNbBであってよい。仮に現在ブロックの上左端位置が図18に示しているようにCbであり、その座標が(xCb,yCb)のときに、NbAは(xNbA,yNbA)=(xCb-1,yCb+cbHeight-1)であり、NbBは(xNbB,yNbB)=(xCb+cbWidth-1,yCb-1)であってよい。ここで、cbWidthとcbHeightはそれぞれ、現在ブロックの幅、高さであってよい。また、多仮説予測の候補リストを作る過程で、周辺位置は、イントラ予測のMPMリスト生成において参照する周辺位置と同一であってよい。
さらに他の実施例として、多仮説予測の候補リストを作る過程で参照する周辺位置は、現在ブロックの左側中央と上側中央の近くであってよい。例えば、NbAとNbBは、(xCb-1,yCb+cbHeight/2-1)、(xCb+cbWidth/2-1,yCb-1)であってよい。または、NbAとNbBは、(xCb-1,yCb+cbHeight/2)、(xCb+cbWidth/2,yCb-1)であってよい。
図23は、本開示の一実施例に係る周辺のモードを参照する方法を示す図である。
前述したように、多仮説予測の候補リストを作る過程で周辺位置を参照できるが、図19の実施例では、周辺位置が多仮説予測を使用しない場合に、candIntraPredModeXを既に設定されたモードに設定した。これは、candIntraPredModeXを設定する際に周辺位置のモードがそのままcandIntraPredModeXにならない場合があるためである。
したがって、本開示の一実施例によれば、周辺位置が多仮説予測を使用していなくとも、周辺位置が使用したモードが多仮説予測に用いられるモードである場合に、candIntraPredModeXを、周辺位置が使用したモードに設定することができる。多仮説予測に用いられるモードは、平面モード、DCモード、垂直モード、水平モードであってよい。
または、周辺位置が多仮説予測を使用していなくとも、周辺位置が使用したモードが特定モードである場合に、candIntraPredModeXを、周辺位置が使用したモードに設定することができる。
または、周辺位置が多仮説予測を使用していなくとも、周辺位置が使用したモードが垂直モード或いは高さモードである場合に、candIntraPredModeXを、周辺位置が使用したモードに設定することができる。または、周辺位置が現在ブロック上側である場合に周辺位置が多仮説予測を使用していなくとも、周辺位置が使用したモードが垂直モードである場合に、candIntraPredModeXを、周辺位置が使用したモードに設定することができる。また、周辺位置が現在ブロック左側である場合に周辺位置が多仮説予測を使用していなくとも、周辺位置が使用したモードが水平モードである場合に、candIntraPredModeXを、周辺位置が使用したモードに設定することができる。
図23を参照すると、mh_intra_flagは、多仮説予測を使用するか(使用したか)否かを示すシグナリングであってよい。また、隣ブロックで使用したイントラ予測モードが水平モードであってよい。また、現在ブロックが多仮説予測を使用することができ、周辺ブロックのモードに基づくcandIntraPredModeを用いて候補リストを生成できるが、周辺が多仮説予測を使用していなくとも、周辺ブロックのイントラ予測モードが特定モード、例えば水平モードであるので、candIntraPredModeを水平モードに設定することができる。
上述した周辺モード参照方法の例を、図19の他の実施例と結合して下記に再び述べる。
For X being replaced by either A or B, the variables candIntraPredModeX are derived as follows:
1. The availability derivation process for a block as specified in Neighbouring blocks availability checking process is invoked with the location ( xCurr, yCurr ) set equal to ( xCb, yCb ) and the neighbouring location ( xNbY, yNbY ) set equal to ( xNbX, yNbX ) as inputs, and the output is assigned to availableX.
2. The candidate intra prediction mode candIntraPredModeX is derived as follows:
A. If one or more of the following conditions are true, candIntraPredModeX is set equal to INTRA_DC.
a. The variable availableX is equal to FALSE.
b. mh_intra_flag[ xNbX ][ yNbX ] is not equal to 1, and IntraPredModeY[ xNbX ][ yNbX ] is neither INTRA_ANGULAR50 nor INTRA_ANGULAR18.
c. X is equal to B and yCb - 1 is less than ( ( yCb >> CtbLog2SizeY ) << CtbLog2SizeY ).
B. Otherwise, if IntraPredModeY[ xNbX ][ yNbX ] > INTRA_ANGULAR34, candIntraPredModeX is set equal to INTRA_ANGULAR50.
C. Otherwise, if IntraPredModeY[ xNbX ][ yNbX ] <= INTRA_ANGULAR34 and IntraPredModeY[ xNbX ][ yNbX ] > INTRA_DC, candIntraPredModeX is set equal to INTRA_ANGULAR18.
D. Otherwise, candIntraPredModeX is set equal to IntraPredModeY[ xNbX ][ yNbX ].
次は、さらに他の実施例である。
For X being replaced by either A or B, the variables candIntraPredModeX are derived as follows:
1. The availability derivation process for a block as specified in Neighbouring blocks availability checking process is invoked with the location ( xCurr, yCurr ) set equal to ( xCb, yCb ) and the neighbouring location ( xNbY, yNbY ) set equal to ( xNbX, yNbX ) as inputs, and the output is assigned to availableX.
2. The candidate intra prediction mode candIntraPredModeX is derived as follows:
A. If one or more of the following conditions are true, candIntraPredModeX is set equal to INTRA_DC.
a. The variable availableX is equal to FALSE.
b. mh_intra_flag[ xNbX ][ yNbX ] is not equal to 1, and IntraPredModeY[ xNbX ][ yNbX ] is neither INTRA_PLANAR, INTRA_DC, INTRA_ANGULAR50 nor INTRA_ANGULAR18.
c. X is equal to B and yCb - 1 is less than ( ( yCb >> CtbLog2SizeY ) << CtbLog2SizeY ).
B. Otherwise, if IntraPredModeY[ xNbX ][ yNbX ] > INTRA_ANGULAR34, candIntraPredModeX is set equal to INTRA_ANGULAR50.
C. Otherwise, if IntraPredModeY[ xNbX ][ yNbX ] <= INTRA_ANGULAR34 and IntraPredModeY[ xNbX ][ yNbX ] > INTRA_DC, candIntraPredModeX is set equal to INTRA_ANGULAR18.
D. Otherwise, candIntraPredModeX is set equal to IntraPredModeY[ xNbX ][ yNbX ].
前述したリスト設定方法においてcandIntraPredModeXは、前記周辺モード参照方法によって決定されてよい。
図24は、本開示の一実施例に係る周辺サンプル使用を示す図である。
前述したように、多仮説予測を使用する場合に、イントラ予測を他の予測と結合して使用することが可能である。したがって、多仮説予測を使用する場合に、現在ブロック周辺のサンプルを参照サンプルとして使用してイントラ予測を生成することができる。
本開示の一実施例によれば、多仮説予測を使用する場合に、再構成(reconstructed)サンプルを使用するモードを使用することができる。また、多仮説予測を使用しない場合に、再構成サンプルを使用するモードを使用しなくてよい。前記再構成サンプルは、現在ブロック周辺の再構成サンプルであってよい。
前記再構成サンプルを使用するモードの例としてテンプレートマッチング(template matching)があり得る。あるブロックを基準に既に設定された位置の再構成サンプルをテンプレートと定義することができる。テンプレートマッチングを、現在ブロックのテンプレートと比較しようとするブロックのテンプレートのコスト(cost)を比較して、コストが小さいブロックを探す動作であってよい。この時、コストは、テンプレートの絶対差分値(absolute difference)の和、差分値(difference)の自乗の和などと定義することができる。例えば、現在ブロックと参照ピクチャーのブロック間のテンプレートマッチングを用いて、現在ブロックと類似すると予想されるブロックを検索することが可能であり、これに基づいてモーションベクトルを設定するか或いはモーションベクトルをリファイン(refine)することができる。
前記再構成サンプルを使用するモードの例として、再構成サンプルを使用するモーション補償、モーションベクトルリファインメントなどがあり得る。
現在ブロック周辺の再構成サンプルを使用するためには、現在ブロックをデコードする時に、周辺ブロックのデコーディングが完了することを待たなければならない。この場合、現在ブロックと周辺ブロックを並列処理(parallel processing)することが困難であり得る。したがって、多仮説予測を使用しない場合に、並列処理を可能にするために、現在ブロック周辺の再構成サンプルを使用するモードを使用しなくてよい。また、多仮説予測を使用する場合に、現在ブロック周辺の再構成サンプルを使用してイントラ予測を生成できるので、現在ブロック周辺の再構成サンプルを使用する他のモードも使用することができる。
また、本開示の一実施例によれば、多仮説予測を使用しても、候補インデックスによって、現在ブロック周辺の再構成サンプルを使用しても使用しなくてもよい。一実施例として、候補インデックスがスレショルドよりも小さいときに、現在ブロック周辺の再構成サンプルを使用してよい。候補インデックスが小さければ、候補インデックスシグナリングビット数が少なく、候補正確度が高くになり得るが、コーディング効率の高いものに再構成サンプルを使用して正確度をさらに上げることが可能である。他の実施例として、候補インデックスがスレショルドよりも大きいときに、現在ブロック周辺の再構成サンプルを使用してよい。候補インデックスが大きければ、候補インデックスシグナリングビット数が多く、候補正確度が低くなり得るが、正確度の低い候補に現在ブロック周辺の再構成サンプルを使用することによって正確度を補完することができる。
本開示の一実施例によれば、多仮説予測を使用する場合に、現在ブロック周辺の再構成サンプルを使用してインター予測を生成し、前記インター予測を多仮説予測のイントラ予測と結合して予測ブロックを生成することが可能である。
図24を参照すると、現在ブロックが多仮説予測を使用するか否かを示すシグナリングであるmh_intra_flag値が1である。現在ブロックが多仮説予測を使用するので、現在ブロック周辺の再構成サンプルを使用するモードを使用することができる。
図25は、本開示の一実施例に係る変換モード(transform mode)を示す図である。
本開示の一実施例によれば、ブロックのサブパート(sub-part)のみを変換(transform)する変換モードが存在してよい。このような変換モードを、サブブロック変換(sub-block transform,SBT)又は空間変化変換(spatially varying transform,SVT)などと呼ぶことができる。例えば、CU又はPUが多数のTUに分けられ、多数のTUのうち一部のみを変換することができる。例えば、多数のTUのいずれか1つのTUのみを変換することができる。前記多数のTUのうち変換しないTUは、レジデュアルが0であるものとすることができる。
図25を参照すると、1つのCU又はPUを多数のTUに分けるタイプとして、SVT-VとSVT-Hの2種類があり得る。SVT-Vは、多数のTUの高さがCU又はPUの高さと同一であり、多数のTUの幅がCU又はPUの幅と異なるタイプであってよい。SVT-Hは、多数のTUの高さがCU又はPUの高さと異なり、多数のTUの幅がCU又はPUの幅と同一なタイプであってよい。一実施例として、SVT-Vの変換するTUの幅及び位置はシグナルされてよい。また、SVT-Hの変換するTUの高さ及び位置はシグナルされてよい。
一実施例によれば、SVTタイプと位置、幅又は高さによる変換カーネルが既に設定されていてよい。
このように、CU又はPUの一部のみを変換するモードがあることは、予測後にレジデュアルがCU又はPUの一部に主に存在し得るためでである。
すなわち、SBTは、TUに対するスキップモードと同一の概念を有する。既存のスキップモードは、CUに対するスキップモードであってよい。
図25を参照すると、SVT-V、SVT-Hの各タイプに対してAと表示された変換する位置が2箇所であると定義されており、幅又は高さがCUの幅又はCUの高さの1/2又は1/4と定義されている。また、Aと表示された領域以外の部分は、レジデュアルを0値にすることができる。
また、SBTを使用できる条件が存在してよい。例えば、SBTが可能な条件は、ブロックサイズに関連した条件、高いレベル(例えば、シーケンス、スライス、タイルなど)シンタックスで使用されるか否かを示すシグナリング値などを含むことができる。
図26は、本開示の一実施例に係る多仮説予測と変換モード間の関係を示す図である。
本開示の一実施例によれば、多仮説予測と変換モード間には相関関係を有し得る。例えば、いずれか一方が使用されるか否かによって、いずれか他方が使用されるか否かが決定されてよい。または、いずれか一方のモードによって、いずれか他方のモードが使用されるか否かが決定されてよい。または、いずれか一方のモードが使用されるか否かによって、いずれか他方のモードが使用されるか否かが決定されてよい。
一実施例として、前記変換モードは、図25で説明したSVTであってよい。すなわち、多仮説予測の使用されるか否かによって、SVTの使用されるか否かが決定されてよい。または、SVTの使用されるか否かによって、多仮説予測の使用されるか否かが決定されてよい。多仮説予測によってブロック全体に対する予測性能が良くなり、ブロックの一部にのみレジデュアルが集まる現象が少なく起き得るためである。
本開示の一実施例によれば、多仮説予測の使用されるか否か或いは多仮説予測のモードによって、SVTの変換するTUの位置が制限されてよい。または、多仮説予測の使用されるか否か或いは多仮説予測のモードによって、SVTの変換するTUの幅(SVT-V)又は高さ(SVT-H)が制限されてよい。したがって、位置、幅又は高さに関するシグナリングを減らすことができる。例えば、SVT変換するTUの位置が、多仮説予測においてイントラ予測の加重値が大きい可能がある側でないことがある。加重値が大きい側のレジデュアルは、多仮説予測によって減らすことができるためである。したがって、多仮説予測を使用する時に、SVTにおいて加重値の大きい側を変換するモードはなくてもよい。例えば、多仮説予測において水平モード又は垂直モードを使用する場合に、図25のポジション1を省略することが可能である。さらに他の実施例として、多仮説予測において平面モードを使用する場合に、SVT変換するTUの位置が制限されてよい。例えば、多仮説予測において平面モードを使用する場合に、図25のポジション0を省略することが可能である。これは、多仮説予測において平面モードを使用する場合に、イントラ予測の参照サンプルの近く部分は、参照サンプル値と類似の値が出ることがあり、これにより、参照サンプルの近くのレジデュアルが小さいことがあるためである。
さらに他の例として、多仮説予測を使用する場合に、可能なSVT変換するTUの幅又は高さの値は変わってよい。または、多仮説予測において特定モードを使用する場合に、可能なSVT変換するTUの幅又は高さの値は変わってよい。例えば、多仮説予測を使用する場合に、ブロックのうち広い部分にレジデュアルが多く残らずに済むので、SVT変換するTUの幅又は高さの大きい値は除外させてよい。または、多仮説予測を使用する場合に、多仮説予測において加重値が変わる単位と同じSVT変換するTUの幅又は高さの値は除外させてよい。
図26を参照すると、SBTの使用されるか否かを示すcu_sbt_flagと、多仮説予測の使用されるか否かを示すmh_intra_flagが存在してよい。図面を参照すると、mh_intra_flagが0である場合に、cu_sbt_flagをパースすることができる。また、cu_sbt_flagが存在しない場合に、0と推論できる。
多仮説予測においてイントラ予測を結合することとSBTはいずれも、該当の技術を使用しなかった時にCU又はPUの一部にのみレジデュアルが多く残り得る問題を解決するためのものである。したがって、両技術の連関性があり得るので、一つの技術の使用されるか否か或いは一つの技術の特定モードの使用されるか否かなどを、他の技術に関するものに基づいて決定することができる。
また、図26で、sbtblockConditionsは、SBTが可能な条件を示すことができる。SBTが可能な条件は、ブロックサイズに関連した条件、高いレベル(例えば、シーケンス、スライス、タイルなど)シンタックスにおいて使用されるか否かのシグナリング値などを含むことができる。
図27は、本開示の一実施例に係る色(color)成分の関係を示す図である。
図27を参照すると、色フォーマット(color format)がクロマフォーマット情報(chroma_format_idc)、Chroma format、separate_colour_plane_flagなどによって示されてよい。
仮にモノクロームである場合に、1個のサンプルアレイのみ存在し得る。また、SubWidthC、SubHeightCがいずれも1であってよい。
仮に4:2:0サンプリングである場合に、クロマアレイが2個存在し得る。また、クロマアレイはルマアレイの半幅、半高さであってよい。幅に関する情報(SubWidthC)、高さに関する情報(SubHeightC)はいずれも2であってよい。
幅に関する情報(SubWidthC)と高さに関する情報(SubHeightC)は、クロマアレイがルマアレイと比較してどのようなサイズを有するかを示すことができ、クロマアレイの幅又は高さがルマアレイの半サイズである場合に、幅に関する情報(SubWidthC)又は高さに関する情報(SubHeightC)は2であり、クロマアレイの幅又は高さがルマアレイと同じサイズである幅に関する情報(SubWidthC)又は高さに関する情報(SubHeightC)は、1であってよい。
仮に4:2:2サンプリングである場合に、クロマアレイが2個存在し得る。また、クロマアレイは、ルマアレイの半幅、同一高さであってよい。SubWidthC、SubHeightCはそれぞれ、2、1であってよい。
仮に4:4:4サンプリングである場合に、クロマアレイはルマアレイと同じ幅、同じ高さであってよい。SubWidthC、SubHeightCはいずれも、1であってよい。このとき、separate_colour_plane_flagに基づいて処理が異なってよい。仮にseparate_colour_plane_flagが0である場合に、クロマアレイは、ルマアレイと幅、高さが同一であってよい。仮にseparate_colour_plane_flagが1である場合に、3個の色平面(color plane)(luma,Cb,Cr)はそれぞれ処理することができる。separate_colour_plane_flagに関係なく4:4:4である場合に、SubWidthC、SubHeightCはいずれも1であってよい。
仮に、separate_colour_plane_flagが1である場合に、1つのスライスに1つの色成分に該当するものだけが存在することが可能である。separate_colour_plane_flagが0である場合に、1つのスライスに多数の色成分に該当するものが存在することが可能である。
図27を参照すると、4:2:2である場合にのみSubWidthC、SubHeightCが異なることが可能である。したがって、4:2:2である場合に、ルマ基準幅対高さの関係が、クロマ基準幅対高さの関係が異なってよい。
例えばルマサンプル基準幅が幅Lであり、クロマサンプル基準幅が幅Cである場合に、仮に幅Lと幅Cが対応(corresponding)である場合に、両者の関係は次のの通りでよい。
widthC = widthL / SubWidthC
すなわち、widthL = widthC * SubWidthC
また、同様に、ルマサンプル基準高さがheightLであり、クロマサンプル基準高さがheightCである場合に、仮にheightLとheightCが対応(corresponding)である場合に、両者の関係は次の通りでよい。
heightC = heightL / SubHeightC
すなわち、heightL = heightC * SubHeightC
また、色成分を示す値が存在してよい。例えば、cIdxが色成分を示すことができる。例えば、cIdxは、色成分インデックスであってよい。仮にcIdxが0であれば、ルマ成分を示すことができる。また、cIdxが0でなければ、クロマ成分を示すことができる。また、cIdxが1であれば、クロマCb成分を示すことができる。また、cIdxが2であれば、クロマCr成分を示すことができる。
図28は、本開示の一実施例に係る色成分の関係を示す図である。
図28(a)、(b)、(c)はそれぞれ、4:2:0、4:2:2、4:4:4の場合を示している。
図28(a)を参照すると、水平方向においてルマサンプル2個当りにクロマサンプルが1個(Cb 1個、Cr 1個)位置してよい。また、垂直方向においてルマサンプル2個当りにクロマサンプルが1個(Cb 1個、Cr 1個)位置してよい。
図28(b)を参照すると、水平方向においてルマサンプル2個当りにクロマサンプルが1個(Cb 1個、Cr 1個)位置してよい。また、垂直方向においてルマサンプル1個当りにクロマサンプルが1個(Cb 1個、Cr 1個)位置してよい。
図28(c)を参照すると、水平方向においてルマサンプル1個当りにクロマサンプルが1個(Cb 1個、Cr 1個)位置してよい。また、垂直方向においてルマサンプル1個当りにクロマサンプルが1個(Cb 1個、Cr 1個)位置してよい。
前述したように、このような関係によって、図27で説明したSubWidthC、SubHeightCが決定されてよく、SubWidthC、SubHeightCに基づいてルマサンプル基準、クロマサンプル基準間の変換を行うことができる。
図29は、本開示の一実施例に係る周辺参照位置を示す図である。
本開示の実施例によれば、予測を行う際に周辺位置を参照することができる。例えば、前述したように、CIIPを行う際に周辺位置を参照することができる。CIIPは、前述した多仮説予測であってよい。CIIPは、組み合わせられたイントラピクチャーマージ及びイントラピクチャー予測(combined inter-picture merge and intra-picture prediction)であってよい。すなわち、CIIPは、インター予測(例えば、マージモードインター予測)とイントラ予測とを結合させた予測方法であってよい。
本開示の実施例によれば、周辺位置を参照してインター予測とイントラ予測とを結合させることが可能である。例えば、周辺位置を参照してインター予測対イントラ予測の比率を決定することが可能である。または、周辺位置を参照してインター予測とイントラ予測とを結合させる時に加重値を決定することが可能である。または、周辺位置を参照してインター予測とイントラ予測を加重和(加重平均)する時に加重値を決定することが可能である。
本開示の実施例によれば、参照する周辺位置は、NbAとNbBを含むことができる。NbAとNbBの座標はそれぞれ、(xNbA,yNbA)、(xNbB,yNbB)であってよい。
また、NbAは、現在ブロックの左側位置であってよい。より具体的に、現在ブロックの上左端座標が(xCb,yCb)であり、現在ブロックの幅、高さがそれぞれcbWidth、cbHeightである場合に、NbAは、(xCb-1,yCb+cbHeight-1)であってよい。現在ブロックの上左端座標(xCb,yCb)は、ルマサンプルを基準にした値であってよい。または、現在ブロックの上左端座標(xCb,yCb)は、現在ピクチャーの上左端ルマサンプルに対する現在ルマコーディングブロックの上左端サンプルルマ位置であってよい。また、前記cbWidth、cbHeightは、該当の色成分を基準にした値であってよい。前述した座標は、ルマ成分(ルマブロック)に対するものであってよい。例えば、cbWidth、cbHeightは、ルマ成分を基準にした値であってよい。
また、NbBは、現在ブロックの上側(above)位置であってよい。より具体的に、現在ブロックの上左端座標が(xCb,yCb)であり、現在ブロックの幅、高さがそれぞれcbWidth、cbHeightである場合に、NbBは、(xCb+cbWidth-1,yCb-1)であってよい。現在ブロックの上左端座標(xCb,yCb)は、ルマサンプルを基準にした値であってよい。または、現在ブロックの上左端座標(xCb,yCb)は、現在ピクチャーの上左端ルマサンプルに対する現在ルマコーディングブロックの上左端サンプルルマ位置であってよい。また、前記cbWidth、cbHeightは、該当の色成分を基準にした値であってよい。前述した座標は、ルマ成分(ルマブロック)に対するものであってよい。例えば、cbWidth、cbHeightは、ルマ成分を基準にした値であってよい。
図29を参照すると、上端にルマブロックと表示したブロックに対して上左端、NbAの座標、NbBの座標などを表記している。
また、NbAは、現在ブロックの左側位置であってよい。より具体的に、現在ブロックの上左端座標が(xCb,yCb)であり、現在ブロックの幅、高さがそれぞれcbWidth、cbHeightである場合に、NbAは、(xCb-1,yCb+2*cbHeight-1)であってよい。現在ブロックの上左端座標(xCb,yCb)は、ルマサンプルを基準にした値であってよい。または、現在ブロックの上左端座標(xCb,yCb)は、現在ピクチャーの上左端ルマサンプルに対する現在ルマコーディングブロックの上左端サンプルルマ位置であってよい。また、前記cbWidth、cbHeightは、該当の色成分を基準にした値であってよい。前述した座標は、クロマ成分(クロマブロック)に対するものであってよい。例えば、cbWidth、cbHeightは、クロマ成分を基準にした値であってよい。また、この座標は、4:2:0フォーマットである場合に該当し得る。
また、NbBは、現在ブロックの上側(above)位置であってよい。より具体的に、現在ブロックの上左端座標が(xCb,yCb)であり、現在ブロックの幅、高さがそれぞれcbWidth、cbHeightである場合に、NbBは、(xCb+2*cbWidth-1,yCb-1)であってよい。現在ブロックの上左端座標(xCb,yCb)は、ルマサンプルを基準にした値であってよい。または、現在ブロックの上左端座標(xCb,yCb)は、現在ピクチャーの上左端ルマサンプルに対する現在ルマコーディングブロックの上左端サンプルルマ位置であってよい。また、前記cbWidth、cbHeightは、該当の色成分を基準にした値であってよい。前述した座標は、クロマ成分(クロマブロック)に対するものであってよい。例えば、cbWidth、cbHeightは、クロマ成分を基準にした値であってよい。また、この座標は、4:2:0フォーマット又は4:2:2フォーマットである場合に該当し得る。
図29を参照すると、下端にクロマブロックと表示したブロックに対して上左端、NbAの座標、NbBの座標などを表記している。
図30は、本開示の一実施例に係る重み付きサンプル予測過程(weighted sample prediction process)を示す図である。
図30の実施例は、2つ以上の予測信号(prediction signal)を結合する方法に関するものであってよい。また、図30の実施例は、CIIPを使用する場合に適用可能である。また、図30の実施例は、図29で説明した周辺位置参照方法を含むことができる。
図30の方程式(equation)(8-838)を参照すると、スケール情報(scallFact)を次のように説明できる。
scallFact = (cIdx == 0) ? 0 : 1
すなわち、現在ブロックの色成分に関する情報(cIdx)が0である場合に、スケール情報(scallFact)を0に設定し、現在ブロックの色成分に関する情報(cIdx)が0でない場合に、スケール情報(scallFact)を1に設定することができる。本開示の実施例において、x?y:zは、xが真(true)である場合又はxが0でない場合に、y値を示し、そうでない場合(xが偽(false)である場合(又は、xが0である場合))に、z値を示すことができる。
また、参照する周辺位置NbAとNbBの座標である(xNbA,yNbA)、(xNbB,yNbB)を設定することができる。図29で説明した実施例によれば、ルマ成分に対して(xNbA,yNbA)、(xNbB,yNbB)はそれぞれ、(xCb-1,yCb+cbHeight-1)、(xCb+cbWidth-1,yCb-1)であり、クロマ成分(chroma component)に対して(xNbA,yNbA)、(xNbB,yNbB)はそれぞれ、(xCb-1,yCb+2*cbHeight-1)、(xCb+2*cbWidth-1,yCb-1)であってよい。また、2^nを掛ける演算は、nビットを左シフト(left shift)することと同一であってよい。例えば、2を掛ける演算は、1ビットを左シフトすることと同一であってよい。また、xをnビット左シフトすることを“x<<n”と表すことができる。また、2^nで割る演算は、nビットを右シフト(right shift)することと同一であってよい。また、2^nで割って小数点以下を捨てる演算は、nビットを右シフトすることと同一であってよい。例えば、2で割る演算は、1ビットを右シフトすることと同一であってよい。また、xをnビット右シフトすることを“x>>n”と表すことができる。したがって、(xCb-1,yCb+2*cbHeight-1)、(xCb+2*cbWidth-1,yCb-1)を、(xCb-1,yCb+(cbHeight<<1)-1)、(xCb+(cbWidth<<1)-1,yCb-1)と表すことができる。したがって、上述したルマ成分(luma component)に対する座標とクロマ成分(chroma component)に対する座標を共に表すと、次の通りでよい。
(xNbA, yNbA) = (xCb - 1, yCb + (cbHeight << scallFact) - 1)
(xNbB, yNbB) = (xCb + (cbWidth<<scallFact) - 1, yCb - 1)
ここで、スケール情報(scallFact)は、前述したように、(cIdx==0)?0:1であってよい。このとき、cbWidth、cbHeightは、各色成分を基準に示したものでよい。例えば、ルマ成分(luma component)を基準にした幅、高さがそれぞれcbWidthL、cbHeightLのとき、ルマ成分(luma component)に対する重み付きサンプル予測過程を行う時にcbWidth、cbHeightはそれぞれcbWidthL、cbHeightLであってよい。また、ルマ成分(luma component)を基準にした幅、高さがそれぞれcbWidthL、cbHeightLのとき、クロマ成分(chroma component)に対する重み付きサンプル予測過程を行う時にcbWidth、cbHeightはそれぞれcbWidthL/SubWidthC、cbHeightL/SubHeightCであってよい。
また、一実施例によれば、周辺位置を参照して該当の位置の予測モード(prediction mode)を判断することができる。例えば、予測モード(prediction mode)がイントラ予測(intra prediciton)であるか否かを判断できる。また、予測モード(prediction mode)は、CuPredModeによって示されてよい。CuPredModeがMODE_INTRAである場合に、イントラ予測(intra prediciton)を使用するものであってよい。また、CuPredMode値は、MODE_INTRA、MODE_INTER、MODE_IBC、MODE_PLTであってよい。CuPredModeがMODE_INTERである場合に、イントラ予測(inter prediction)を使用するものであってよい。また、CuPredModeがMODE_IBCである場合に、イントラコピー(intra block copy,IBC)を使用するものであってよい。また、CuPredModeがMODE_PLTである場合に、バレットモード(palette mode)を使用するものであってよい。また、CuPredModeは、チャネルタイプ(chType)、位置によって示されてよい。例えば、CuPredMode[chType][x][y]と示されてよく、この値は、(x,y)位置においてチャネルタイプchTypeに対するCuPredMode値であってよい。また、chTypeは、ツリータイプに基づくものであってよい。例えば、ツリータイプ(treeType)は、SINGLE_TREE、DUAL_TREE_LUMA、DUAL_TREE_CHROMAなどの値に設定されてよい。SINGLE_TREEである場合に、ルマ成分とクロマ成分のブロック分割(block partitioning)が共有される部分があり得る。例えば、SINGLE_TREEである場合に、ルマ成分とクロマ成分のブロック分割が同一であってよい。または、SINGLE_TREEである場合に、ルマ成分とクロマ成分のブロック分割が同一であるか或いは一部同一であってよい。または、SINGLE_TREEである場合に、ルマ成分とクロマ成分のブロック分割が、同一のシンタックスエレメント(syntax element)値によって行われてよい。また、DUAL TREEである場合に、ルマ成分とクロマ成分のブロック分割が独立的であってよい。または、DUAL TREEである場合に、ルマ成分とクロマ成分のブロック分割が個別のシンタックスエレメント値によって行われてよい。また、DUAL TREEである場合に、treeType値はDUAL_TREE_LUMA又はDUAL_TREE_CHROMAであってよい。仮にtreeTypeがDUAL_TREE_LUMAである場合に、DUAL TREEを使用し、ルマ成分に対する処理であることを示すことができる。仮にtreeTypeがDUAL_TREE_CHROMAである場合に、DUAL TREEを使用し、クロマ成分に対する処理であることを示すことができる。また、chTypeは、ツリータイプがDUAL_TREE_CHROMAであるか否かに基づいて決定されてよい。例えば、chTypeはtreeTypeがDUAL_TREE_CHROMAである場合、1に設定され、treeTypeがDUAL_TREE_CHROMAでない場合、0に設定されてよい。したがって、図30を参照すると、CuPredMode[0][xNbX][yNbY]値を判断することができる。Xは、AとBに代替されてよい。すなわち、NbA、NbB位置に対するCuPredMode値を判断することができる。
また、周辺位置に対する予測モードを判断したものに基づいてisIntraCodedNeighbourX値を設定することができる。例えば、周辺位置に対するCuPredModeがMODE_INTRAであるか否かによってisIntraCodedNeighbourX値を設定できる。仮に周辺位置に対するCuPredModeがMODE_INTRAである場合に、isIntraCodedNeighbourX値をTRUEに設定し、周辺位置に対するCuPredModeがMODE_INTRAでない場合に、isIntraCodedNeighbourX値をFALSEに設定することができる。上述しており、後述する本開示において、Xは、A又はBなどに取り替わってよい。また、Xと書かれているものは、X位置に該当することを示すことができる。
また、一実施例によれば、周辺位置を参照して該当の位置が利用可能か否かを判断することができる。該当の位置が利用可能か否かによってavailableXに設定することができる。また、availableXに基づいてisIntraCodedNeighbourXを設定することができる。例えば、availableXがTRUEである場合にisIntraCodedNeighbourXをTRUEに設定し、例えば、availableXがFALSEである場合にisIntraCodedNeighbourXをFALSEに設定することができる。図30を参照すると、該当の位置が利用可能か否かは、“The derivation process for neighbouring block availability”によって判断されてよい。また、該当の位置が利用可能か否かは、該当の位置が現在ピクチャー内側にあるか否かに基づいて判断することができる。該当の位置が(xNbY,yNbY)である場合に、xNbY又はyNbYが0よりも小さいと現在ピクチャーを外れたものであり、availableXがFALSEに設定されてよい。また、xNbYがピクチャー幅以上である場合に、現在ピクチャーを外れたものであり、availableXがFALSEに設定されてよい。ピクチャー幅は、pic_width_in_luma_samplesによって示されてよい。また、yNbYがピクチャー高さ以上である場合、現在ピクチャーを外れたものであり、availableXがFALSEに設定されてよい。ピクチャー高さはpic_height_in_luma_samplesによって示されてよい。また、該当の位置が現在ブロックと異なるブリック(brick)又は他のスライスにある場合に、availableXがFALSEに設定されてよい。また、該当の位置の再構成(reconstruction)が完了していない場合に、availableXがFALSEに設定されてよい。最構成の完了したか否かは、IsAvailable[cIdx][xNbY][yNbY]によって示されてよい。したがって、要すると、下記の条件のいずれか1つを満たす場合、availableXをFALSEに設定し、そうでない場合(下記の条件を全て満たさない場合)、availableXをTRUEに設定することができる。
条件1:xNbY<0
条件2:yNbY<0
条件3:xNbY>=pic_width_in_luma_samples
条件4:yNbY>=pic_height_in_luma_samples
条件5:IsAvailable[cIdx][xNbY][yNbY]==FALSE
条件6:該当の位置(周辺位置(xNbY,yNbY)位置)が現在ブロックと異なるブリック(又は、異なるスライス)に属している場合
また、オプションによって現在位置と該当の位置が同一のCuPredModeであるか否かを判断し、availableXを設定することができる。
説明した2つの条件を結合してisIntraCodedNeighbourXを設定することができる。例えば、次の条件を全て満たす場合にisIntraCodedNeighbourXをTRUEに設定し、そうでない場合(次の条件のいずれか1つでも満たさない場合)にisIntraCodedNeighbourXをFALSEに設定することができる。
条件1:availableX==TRUE
条件2:CuPredMode[0][xNbX][yNbX]==MODE_INTRA
また、本開示の実施例によれば、多数のコード情報(isIntraCodedNeighbourX)に基づいてCIIPの重み付け(weighting)を決定することができる。例えば、多数のコード情報(isIntraCodedNeighbourX)に基づいてインター予測とイントラ予測とを結合させる時に重み付けを決定することができる。例えば、左側ブロックに関するコード情報(isIntraCodedNeighbourA)と上側ブロックに関するコード情報(isIntraCodedNeighbourB)に基づいて決定することができる。一実施例によれば、左側ブロックに関するコード情報(isIntraCodedNeighbourA)と上側ブロックに関するコード情報(isIntraCodedNeighbourB)がいずれもTRUEである場合に、加重値(w)を3に設定することができる。例えば、加重値(w)はCIIPの重み付け又は重み付けを決定する値であってよい。また、左側ブロックに関するコード情報(isIntraCodedNeighbourA)と上側ブロックに関するコード情報(isIntraCodedNeighbourB)がいずれもFALSEである場合に、wを1に設定することができる。また、左側ブロックに関するコード情報(isIntraCodedNeighbourA)と上側ブロックに関するコード情報(isIntraCodedNeighbourB)のいずれか1つでもFALSEである場合(2つのうち1つがTRUEである場合と同様。)に、加重値(w)を2に設定することができる。すなわち、周辺位置がイントラ予測で予測されたかに基づいて又は周辺位置がどれくらいイントラ予測で予測されたかに基づいて加重値(w)を設定するものであってよい。
また、加重値(w)は、イントラ予測に該当する重み付けであってよい。また、インター予測に該当する重み付けは、加重値(w)に基づいて決定されてよい。例えば、インター予測に該当する重み付けは、(4-w)であってよい。図30の方程式(8-840)を参照すると、2つ以上の予測信号を結合する時に、次の通りにすることができる。
predSampleComb[x][y] = (w*predSamplesIntra[x][y] + (4-w)*predSamplesInter[x][y] + 2 ) >> 2
ここで、第2サンプル(predSamplesIntra)、第1サンプル(predSamplesInter)は、予測信号であってよい。例えば、第2サンプル(predSamplesIntra)、第1サンプル(predSamplesInter)はそれぞれ、イントラ予測によって予測された予測信号、インター予測(例えば、マージモード、より具体的にレギュラー(regular)マージモード)によって予測された予測信号であってよい。また、組合せ予測サンプル(predSampleComb)は、CIIPで用いられる予測信号であってよい。
また、図30の方程式(8-840)を行う前に結合前の予測信号をアップデートする過程が含まれてよい。例えば、図30の方程式(8-839)のような過程でアップデートすることができる。例えば、予測信号をアップデートする過程は、CIIPのインター予測信号をアップデートする過程であってよい。
図31は、本開示の一実施例に係る周辺参照位置を示す図である。
図29~図30で周辺参照位置について説明したが、説明した位置を全ての場合(例えば、全てのクロマブロック)に使用すると問題が発生することがあり、この問題を図31で説明する。
図31の実施例は、クロマブロックを示している。図29~図30で、クロマブロックに対してルマサンプルを基準にしたNbA、NbB座標はそれぞれ、(xCb-1,yCb+2*cbHeight-1)、(xCb+2*cbWidth-1,yCb-1)であった。しかし、SubWidthC又はSubHeightCが1である場合、図29で示した位置と異なる図31の位置を示すことがある。上の座標でcbWidth、cbHeightに2を掛けたものは、cbWidth、cbHeightは各色成分(この実施例ではクロマ成分)を基準にして示しており、座標をルマ基準で示すので、4:2:0の場合にルマサンプル対クロマサンプル個数を補償するためのものであってよい。すなわち、ルマサンプルx軸基準2個に該当するクロマサンプル1個であり、ルマサンプルy軸基準2個に該当するクロマサンプル1個である場合の座標を、ルマ基準で示すためのものでよい。したがって、SubWidthC又はSubHeightCが1である場合に、異なる位置を示すことがある。したがって、このようにクロマブロックに対して常に(xCb-1,yCb+2*cbHeight-1)、(xCb+2*cbWidth-1,yCb-1)位置を使用すると、現在クロマブロックから遠く離れた位置を参照することがある。また、この場合、現在ブロックのルマブロックで使用する相対的な位置とクロマブロックで使用する相対的な位置とが一致しないことがある。また、クロマブロックに対して異なる位置を参照してしまうため、現在ブロックと連関性の少ない位置を参照して重み付けを設定することがあり、或いは、ブロックデコーディング順序上、デコーディング/再構成が行われないことがあった。
図31を参照すると、4:4:4である場合、すなわちSubWidthCとSubHeightCがいずれも1である場合の上述したルマ基準座標の位置を示している。実線で表示したクロマブロックから離れた位置にNbA,NbBが存在してよい。
図32は、本開示の一実施例に係る重み付きサンプル予測過程を示す図である。
図32の実施例は、図29~図31で説明した問題を解決するための実施例であってよい。また、前述した内容は省略してよい。
図30でスケール情報(scallFact)に基づいて周辺位置を設定し、図31で説明したように、スケール情報(scallFact)は、SubWidthCとSubHeightCが2である場合に位置を変換するための値であった。
しかし、前述したように、色フォーマット(color format)によって問題が発生することがあり、クロマサンプル(chroma sample)対ルマサンプル(luma sample)の比率は、横と縦が異なることがあるので、本開示の実施例によれば、スケール情報(scallFact)を横(幅)と縦(高さ)に分離できる。
本開示の実施例によれば、x軸のスケール情報(scallFactWidth)とy軸のスケール情報(scallFactHeight)が存在してよく、x軸のスケール情報(scallFactWidth)とy軸のスケール情報(scallFactHeight)に基づいて周辺位置を設定することができる。また、周辺位置はルマサンプル(ルマブロック)を基準に設定したものであってよい。
ビデオ信号処理装置は、クロマフォーマット情報(chroma_format_idc)に基づいて幅に関する情報(SubWidthC)及び高さに関する情報(SubHeightC)を取得する段階を行うことができる。ここで、クロマフォーマット情報(chroma_format_idc)は、コーディングツリーユニット(Coding Tree Unit)、スライス(slice)、タイル(tile)、タイルグループ(tile group)、映像(picture)、又はシーケンス(sequence)単位のいずれか1つでシグナルされてよい。
ビデオ信号処理装置は、図27に示した表に基づき、クロマフォーマット情報(chroma_format_idc)に基づいて幅に関する情報(SubWidthC)及び高さに関する情報(SubHeightC)を取得することができる。
ビデオ信号処理装置は、幅に関する情報(SubWidthC)又は現在ブロックの色成分に関する情報(cIdx)に基づいてx軸のスケール情報(scallFactWidth)を取得する段階(8-838)を行うことができる。より具体的に、x軸のスケール情報(scallFactWidth)は、現在ブロックの色成分に関する情報(cIdx)及び幅に関する情報(SubWidthC)に基づいて設定されてよい。例えば、現在ブロックの色成分に関する情報(cIdx)が0であるか或いは幅に関する情報(SubWidthC)が1である場合に、x軸のスケール情報(scallFactWidth)を0に設定でき、そうでない場合(現在ブロックの色成分に関する情報(cIdx)が0でなく、幅に関する情報(SubWidthC)が1でない場合(SubWidthCが2である場合))に、x軸のスケール情報(scallFactWidth)を1に設定することができる。図32の方程式(8-838)を参照すると、次のように示すことができる。
scallFactWidth = ( cIdx == 0 || SubWidthC == 1) ? 0 : 1
また、ビデオ信号処理装置は、高さに関する情報(SubHeightC)又は現在ブロックの色成分に関する情報(cIdx)に基づいてy軸のスケール情報(scallFactHeight )を取得する段階(8-839)を行うことができる。
また、y軸のスケール情報(scallFactHeight)は、現在ブロックの色成分に関する情報(cIdx)及び高さに関する情報(SubHeightC)に基づいて設定することができる。例えば、現在ブロックの色成分に関する情報(cIdx)が0であるか或いは高さに関する情報(SubHeightC)が1である場合に、y軸のスケール情報(scallFactHeight)を0に設定でき、そうでない場合(現在ブロックの色成分に関する情報(cIdx)が0でなく、高さに関する情報(SubHeightC)が1でない場合(SubHeightCが2である場合))に、y軸のスケール情報(scallFactHeight)を1に設定することができる。図32の方程式(8-839)を参照すると、次のように示すことができる。
scallFactHeight = ( cIdx == 0 || SubHeightC == 1) ? 0 : 1
また、x軸のスケール情報(scallFactWidth)に基づいて周辺位置のx座標を示すことができ、y軸のスケール情報(scallFactHeight)に基づいて周辺位置のy座標を示すことができる。ビデオ信号処理装置は、y軸のスケール情報(scallFactHeight)に基づいて左側ブロック(NbA)の位置を決定する段階を行うことができる。また、ビデオ信号処理装置は、x軸のスケール情報(scallFactWidth)に基づいて上側ブロック(NbB)の位置を決定する段階を行うことができる。例えば、x軸のスケール情報(scallFactWidth)に基づいて上側ブロック(NbB)の座標を設定できる。例えば、y軸のスケール情報(scallFactHeight)に基づいて左側ブロック(NbA)の座標を設定できる。また、前述したように、ここで、x軸のスケール情報(scallFactWidth)に基づくことは、幅に関する情報(SubWidthC)に基づくことであってよく、y軸のスケール情報(scallFactHeight)に基づくことは、高さに関する情報(SubHeightC)に基づくことであってよい。例えば、周辺位置座標は、次の通りでよい。
(xNbA, yNbA) = (xCb - 1, yCb + (cbHeight << scallFactHeight) - 1)
(xNbB, yNbB) = (xCb + (cbWidth<<scallFactWidth) - 1, yCb - 1)
(xCb,yCb)は、現在ピクチャーの上左端ルマサンプルに対する現在ルマブロック(ルマコーディングブロック)の上左端サンプルルマ位置であってよい。cbWidth、cbHeightはそれぞれ、現在ブロックの幅(width)、高さ(height)であってよい。このとき、xCb、yCbは、前述したように、ルマサンプル基準に示した座標であってよい。また、cbWidth、cbHeightは、各色成分を基準に示したものであってよい。
したがって、クロマブロックであり、SubWidthCが1である場合に、(xNbB,yNbB)=(xCb+cbWidth-1,yCb-1)であってよい。すなわち、この場合、ルマブロックに対するNbB座標とクロマブロックに対するNbB座標が同一であってよい。また、クロマブロックであり、SubHeightCが1である場合に、(xNbA,yNbA)=(xCb-1,yCb+cbHeight-1)であってよい。すなわち、この場合、ルマブロックに対するNbA座標とクロマブロックに対するNbA座標が同一であってよい。
したがって、図32の実施例は、4:2:0フォーマットの場合には、図29~図30の実施例と同一の周辺座標を設定し、4:2:2フォーマット又は4:4:4フォーマットの場合には、図29~図30の実施例と異なる周辺座標を設定できる。
ビデオ信号処理装置は、左側ブロック(NbA)及び上側ブロック(NbB)に基づいて加重値(w)を決定する段階を行うことができる。図32は、図30で説明したのと類似であっよい。すなわち、図32で説明した周辺位置座標に基づいて予測モード又は利用可能性(availability)を判断し、CIIPの重み付けを決定することができる。図32に関する説明のうち、図30と重複する一部の説明は省略されてよい。
図32を参照すると、ビデオ信号処理装置は、2つの条件を結合してコード情報(isIntraCodedNeighbourX)を設定することができる。例えば、次の条件を全て満たす場合に、コード情報(isIntraCodedNeighbourX)をTRUEに設定し、そうでない場合(次の条件のうち少なくとも1つを満たさない場合)に、コード情報(isIntraCodedNeighbourX)をFALSEに設定することができる。
条件1:availableX==TRUE
条件2:CuPredMode[0][xNbX][yNbX]==MODE_INTRA
より具体的に、ライン3210を参照すると、ビデオ信号処理装置は、左側ブロックが利用可能(availableA==TRUE)であり、左側ブロックの予測モードがイントラ予測(CuPredMode[0][xNbA][yNbA]is equal to MODE_INTRA)である場合に、左側ブロックに関するコード情報(isIntraCodedNeighbourA)をTRUEに設定する段階を行うことができる。
また、ビデオ信号処理装置は、左側ブロックが利用可能でないか、左側ブロックの予測モードがイントラ予測でない場合に、左側ブロックに関するコード情報をFALSEに設定する段階を行うことができる。
また、ビデオ信号処理装置は、上側ブロックが利用可能(availableB==TRUE)であり、上側ブロックの予測モードがイントラ予測(CuPredMode[0][xNbB][yNbB]is equal to MODE_INTRA)である場合に、上側ブロックに関するコード情報(isIntraCodedNeighbourB)をTRUEに設定する段階を行うことができる。
また、ビデオ信号処理装置は、上側ブロックが利用可能でないか、上側ブロックの予測モードがイントラ予測でない場合に、上側ブロックに関するコード情報をFALSEに設定する段階を行うことができる。
ライン3220を参照すると、左側ブロックに関するコード情報(isIntraCodedNeighbourA)及び上側ブロックに関するコード情報(isIntraCodedNeighbourB)がいずれもTRUEである場合に、ビデオ信号処理装置は、加重値(w)を3と決定する段階を行うことができる。また、左側ブロックに関するコード情報(isIntraCodedNeighbourA)及び上側ブロックに関するコード情報(isIntraCodedNeighbourB)がいずれもFALSEである場合に、ビデオ信号処理装置は加重値(w)を1と決定する段階を行うことができる。また、左側ブロックに関するコード情報(isIntraCodedNeighbourA)及び上側ブロックに関するコード情報(isIntraCodedNeighbourB)のいずれか1つのみがTRUEである場合に、ビデオ信号処理装置は加重値(w)を2と決定する段階を行うことができる。
ビデオ信号処理装置は、現在ブロックをマージモードと予測した第1サンプル(predSamplesInter)を取得する段階を行うことができる。また、ビデオ信号処理装置は、現在ブロックをイントラモードと予測した第2サンプル(predSamplesIntra)を取得する段階を行うことができる。
ビデオ信号処理装置は、加重値(w)、第1サンプル(predSamplesInter)、及び第2サンプル(predSamplesIntra)に基づき、現在ブロックに対する組合せ予測サンプル(predSampleComb)を取得する段階(8-841)を行うことができる。例えば、ビデオ信号処理装置は、下記のような式に基づいて組合せ予測サンプル(predSampleComb)を取得することができる。
predSampleComb[x][y] = (w*predSamplesIntra[x][y] + (4-w)*predSamplesInter[x][y] + 2 ) >> 2
ここで、predSamplesCombは、組合せ予測サンプルを意味し、wは、加重値を意味し、predSamplesIntraは、第2サンプルを意味し、predSamplesInterは、第1サンプルを意味し、[x]は、現在ブロックに含まれたサンプルのx軸座標を意味し、[y]は、現在ブロックに含まれたサンプルのy軸座標を意味できる。
本開示において、周辺位置と周辺位置座標は同じ意味で使われてよい。
図33は、本開示の一実施例に係る重み付きサンプル予測過程を示す図である。
図33の実施例は、図32で説明した周辺位置座標を他の方式で表現したものである。したがって、前述と重複する内容は省略してもよい。
前述したように、ビットシフト(bit shift)を掛け算で表現することができる。図32は、ビットシフトを用いて示し、図33は、掛け算を用いて示したものであってよい。
一実施例によれば、x軸のスケール情報(scallFactWidth)は、現在ブロックの色成分に関する情報(cIdx)及び幅に関する情報(SubWidthC)に基づいて設定することができる。例えば、現在ブロックの色成分に関する情報(cIdx)が0であるか或いは幅に関する情報(SubWidthC)が1である場合に、x軸のスケール情報(scallFactWidth)を1に設定でき、そうでない場合(cIdxが0でなく、幅に関する情報(SubWidthC)が1でない場合(SubWidthCが2である場合))に、x軸のスケール情報(scallFactWidth)を2に設定することができる。図33の方程式(8-838)を参照すると、次のように示すことができる。
scallFactWidth = ( cIdx == 0 || SubWidthC == 1) ? 1 : 2
また、y軸のスケール情報(scallFactHeight)は、現在ブロックの色成分に関する情報(cIdx)及び高さに関する情報(SubHeightC)に基づいて設定することができる。例えば、現在ブロックの色成分に関する情報(cIdx)が0であるか或いは高さに関する情報(SubHeightC)が1である場合に、y軸のスケール情報(scallFactHeight)を1に設定でき、そうでない場合(cIdxが0でなく、高さに関する情報(SubHeightC)が1でない場合(SubHeightCが2である場合))に、y軸のスケール情報(scallFactHeight)を2に設定することができる。図33方程式(8-839)を参照すると、次のように示すことができる。
scallFactHeight = ( cIdx == 0 || SubHeightC == 1) ? 1 : 2
また、x軸のスケール情報(scallFactWidth)に基づいて周辺位置のx座標を示すことができ、y軸のスケール情報(scallFactHeight)に基づいて周辺位置のy座標を示すことができる。例えば、x軸のスケール情報(scallFactWidth)に基づいてNbBの座標を設定することができる。例えば、y軸のスケール情報(scallFactHeight)に基づいてNbAの座標を設定することができる。また、前述したように、ここでx軸のスケール情報(scallFactWidth)に基づくことは、SubWidthCに基づくことであってよく、y軸のスケール情報(scallFactHeight)に基づくことは、SubHeightCに基づくことであってよい。例えば、周辺位置座標は、次の通りでよい。
(xNbA, yNbA) = (xCb - 1, yCb + (cbHeight * scallFactHeight) - 1)
(xNbB, yNbB) = (xCb + (cbWidth * scallFactWidth) - 1, yCb - 1)
この時、xCb、yCbは、前述したように、ルマサンプル基準に示した座標であってよい。また、cbWidth、cbHeightは、各色成分を基準に示したものであってよい。
図34は、本開示の一実施例に係る重み付きサンプル予測過程を示す図である。
図30、図32、図33などの実施例において周辺位置を参照して該当の位置が利用可能か否か判断した。この時、色成分(color component)を示すインデックスであるcIdxを、0(ルマ成分)に設定した。また、該当の位置が利用可能か否かを判断するとき、現在ブロックの色成分に関する情報(cIdx)は、該当の位置cIdxの再構成(reconstruction)の完了したか否かを判断するために使用することができる。すなわち、該当の位置が利用可能か否かを判断するとき、cIdxは、IsAvailable[cIdx][xNbY][yNbY]値を判断するために使用することができる。しかし、クロマブロックに対する重み付きサンプル予測過程を行うとき、cIdx0に該当するIsAvailable値を参照すると、誤った判断をすることがある。例えば、周辺位置を含むブロックのルマ成分の再構成が完了していないが、クロマ成分の再構成が完了した場合に、cIdxが0のとき、IsAvailable[0][xNbY][yNbY]はFALSEであり、IsAvailable[cIdx][xNbY][yNbY]はTRUEであってよい。したがって、実際に周辺が利用可能であるにもかかわらず利用可能でないと判断できる場合が発生する。図34の実施例では、この問題を解決するために、周辺位置を参照して該当の位置が利用可能か否かを判断するとき、現在コーディングブロックのcIdxを入力(input)として使用することができる。すなわち、“the derivation process for neighbouring block availability”を呼び出す(invoke)時に、入力であるcIdxとして現在コーディングブロックのcIdxを入れることができる。
また、図32~図33で説明した内容は、省略していてよい。
また、前述した周辺位置の予測モードを判断する時に、chType0に該当するCuPredModeであるCuPredMode[0][xNbX][yNbY]を参照したが、仮に現在ブロックに対するchTypeが一致しない場合に、誤ったパラメータを参照することがある。したがって、本開示の実施例によれば、周辺位置の予測モードを判断する時に、現在ブロックに該当するchType値に該当するCuPredMode[chType][xNbX][yNbY]を参照することができる。
図35は、本開示の一実施例に係るCIIP加重値導出(CIIP weight derivation)を示す図である。
図29~図34で説明した実施例においてCIIP加重値導出関連内容を説明しており、本実施例では前述の内容を省略していてよい。
また、図29~図34で説明した実施例において、多数の色成分(color component)に対して相対的に同じ位置に基づいてCIIPで使用する重み付けを決定することができた。したがって、これは、クロマ成分(chroma component)に対してルマ成分(luma component)について説明した隣位置(neighboring locations)に基づき、CIIPで使用する重み付けを決定できるということを意味できる。また、したがって、これは多数の色成分に対してルマ成分について説明した隣位置に基づき、CIIPで使用する重み付けを決定できるということを意味できる。また、したがって、これは多数の色成分に対して同じ隣位置に基づき、CIIPで使用する重み付けを決定できるということを意味できる。また、これは多数の色成分に対してCIIPで使用する重み付けが同一であることを意味できる。前述したように、隣位置の予測モードを参照するものであり得るためである。または、色成分野に対して相対的に同じ位置の予測モードが同一であり得るためである。より具体的に、各色成分に対する既に設定された位置に該当する予測モードが色成分野に対して同一である場合に、多数の色成分に対してCIIPで使用する重み付けが同一であってよい。また、インター予測を使用できる場合に、各色成分に対する既に設定された位置に該当する予測モードが、色成分野に対して同一であってよい。または、Pスライス又はBスライスである場合に、各色成分に対する既に設定された位置に該当する予測モードが、色成分野に対して同一であってよい。これは、Pスライス又はBスライスである場合にSINGLE_TREEであり得るためである。
また、前述したように、前記ルマ成分について説明した隣位置は、次の通りでよい。
(xNbA, yNbA) = (xCb - 1, yCb + cbHeight - 1)
(xNbB, yNbB) = (xCb + cbWidth - 1, yCb - 1)
要するに、本開示の実施例によれば、多数の色成分に対してCIIPで使用する重み付けは、同一であってよい。より具体的に、ルマ成分に対して導出(derive)したCIIPで使用する重み付けをクロマ成分に対して使用することが可能である。これは、多数の色成分に対して重み付けを導出する過程を多数回行うことを防止するためのものであってよい。また、クロマ成分に対しても、前記(xNbA,yNbA)、(xNbB,yNbB)に基づく加重値(weighting value)を使用することができる。このとき、前記(xNbA,yNbA)、(xNbB,yNbB)におけるcbHeight、cbWidthは、ルマサンプルに基づく値であってよい。また、前記(xNbA,yNbA)、(xNbB,yNbB)におけるxCb,yCb値は、ルマサンプルに基づく値であってよい。すなわち、クロマ成分に対しても、ルマサンプルを基準にした幅、高さ、座標に基づく隣位置に基づいて決定した加重値(weighting value)をCIIPに使用することが可能である。
図35を参照すると、導出した加重値(weighting value)を各色成分、すなわちY、Cb、Crに対して全て使用している。すなわち、同一の加重値(weighting value)を全ての色成分に対するCIIPに使用している。
図36は、本開示の一実施例に係るCIIP過程を示す図である。
図36の実施例は、図35で説明した実施例と関連していてよい。また、図36の実施例は、図35で説明した実施例の構造を示すことができる。また、図36の実施例において、図29~図35で説明した内容は省略していてよい。
図35で説明したように、各色成分(color component)に対してCIIPを使用する場合に、同一の加重値(weighting value)を使用することが可能である。
図36を参照すると、ciip_flagは、CIIPの使用されるか否かを示すシグナリングであってよい。仮にCIIPを使用する場合、図36に言及された過程(process)を行うことができる。仮にCIIPを使用する場合に、加重値導出過程(weighting value derivation process)を行うことが可能である。このとき、加重値導出過程は、色成分に関係なく行うことが可能である。加重値導出過程は、図30で説明した過程(process)を含むことができる。この時、隣位置は、色成分と関係なく定められることが可能である。例えば、下のような隣位置を使用することができる。
(xNbA, yNbA) = (xCb - 1, yCb + cbHeight - 1)
(xNbB, yNbB) = (xCb + cbWidth - 1, yCb - 1)
また、図36を参照すると、加重値導出過程の入力(input)であるxCb、yCb、cbWidth、cbHeightと前記隣位置のxCb、yCb、cbWidth、cbHeightは、現在行っている色成分に関係なく既に設定された成分基準であってよい。例えば、ルマサンプル基準の値であってよい。すなわち、クロマ成分に対して加重値導出過程を行う時に、ルマサンプル基準のxCb、yCb、cbWidth、cbHeightに基づき得る。より具体的に、クロマ成分に対して加重値導出過程を行う時に、ルマサンプル基準のxCb、yCb、cbWidth、cbHeightに基づいて隣位置を設定し、これに基づいて加重値(weighting value)を決定することができる。
加重値導出過程に基づいて加重値wを設定することができる。図36の加重値導出過程は、図30で説明した加重値wを設定する過程であってよい。このとき、説明したように、色成分と関係ない隣位置を使用することができる。
また、図36を参照すると、CIIPを使用する場合に、一般イントラサンプル予測過程(general intra sample prediction process)及び重み付きサンプル予測過程を行うことができる。また、これは、各色成分野に対して行うことができる。重み付きサンプル予測過程は、図30で説明した重み付けを使用してインター予測とイントラ予測とを結合する過程を含むことができる。例えば、重み付きサンプル予測過程は、図30の方程式(8-840)を用いて結合する過程を含むことができる。また、本開示の実施例によれば、重み付きサンプル予測過程は、加重値(weighting value)に基づいて行うことができ、多数の色成分野に対して同一の加重値(weighting value)を使用することが可能である。また、重み付きサンプル予測(weighted sample prediction)で使用する加重値(weighting value)は、前述した加重値導出過程に基づいて決定された加重値wであってよい。
また、図36を参照すると、重み付きサンプル予測過程の入力であるコーディングブロックの幅、高さは、各色成分を基準に示した値であってよい。図36を参照すると、ルマ成分である場合(cIdxが0である場合)に、幅、高さはそれぞれcbWidth、cbHeightであり、クロマ成分である場合(cIdxが0でない場合;cIdxが1又は2である場合)に、幅、高さはそれぞれcbWidth/SubWidthC、cbHeight/SubHeightCであってよい。
すなわち、ある色成分に対して、他の色成分に基づいて決定した加重値(weighting value)を利用し、前記ある色成分を基準にした幅、高さを用いて重み付きサンプル予測過程を行うことができる。または、ある色成分に対して、他の色成分を基準にした幅、高さに基づいて決定した加重値(weighting value)を利用し、前記ある色成分を基準にした幅、高さを用いて重み付きサンプル予測過程を行うことができる。この時、前記ある色成分はクロマ成分であり、前記他の色成分は、ルマ成分であってよい。さらに他の実施例として、前記ある色成分はルマ成分であり、前記他の色成分はクロマ成分であってよい。
これは、具現を簡単にするためのものでよい。例えば、図36に示した過程が各色成分別に行われてよいが、加重値導出過程を色成分に関係なく行わせることにより、加重値導出過程の具現を簡単にすることができる。または、これは、反復する過程(process)を行わないようにするためのものであってもよい。
図37は、本開示の一実施例に係るMV及びMVDの範囲を示す図である。
本開示の実施例によれば、MVD生成方法或いはMVD決定方法が多数存在し得る。MVDは、前述したモーションベクトル差分値(Motion vector difference)であってよい。また、モーションベクトル(MV)生成方法或いはMV決定方法が多数存在し得る。
例えば、MVD決定方法は、シンタックスエレメントの値から決定する方法を含むことができる。例えば、図9で説明したようなシンタックスエレメントに基づいてMVDを決定することができる。これについて図40でさらに説明する。
また、MVD決定方法は、MMVD(merge with MVD)モード使用時に決定する方法を含むことができる。例えば、マージモードを使用する時に使用するMVDが存在してよい。これについて図38~図39でさらに説明する。
本開示の実施例において、MV又はMVDは、アファインモーション補償を行うためのコントロールポイントモーションベクトル(control point motion vector,CPMV)に対するものを含むことができる。すなわち、MV、MVDはそれぞれ、CPMV、CPMVDを含むことができる。
本開示の一実施例によれば、MV又はMVDが示し得る範囲が制限されてよい。これにより、制限されたリソース、制限されたビット数を用いてMV又はMVDを表現し保存し、MV又はMVDを用いた演算をすることができる。本開示の実施例において、MV又はMVDが示し得る範囲をそれぞれ、MV範囲(MV range)、MVD範囲(MVD range)ということができる。
一実施例によれば、MV範囲又はMVD範囲は、-2^Nから(2^N-1)までであってよい。このとき、-2^Nと(2^N-1)を含む範囲であってよい。さらに他の実施例によれば、MV範囲又はMVD範囲は、(-2^N+1)から2^Nまでであってよい。このとき、(-2^N+1)と2^Nを含む範囲であってよい。この実施例において、Nは整数、例えば、正の整数であってよい。より具体的に、Nは15又は17であってよい。また、この時、MV範囲又はMVD範囲をN+1ビットを用いて示すことが可能である。
また、説明した制限的なMV範囲又は制限的なMVD範囲を具現するために、クリッピング(clipping)、モジュール(modulus)演算を行うことが可能である。例えば、ある段階(例えば、最終段階前)のMV又はMVDをクリッピング又はモジュール演算して、MV範囲又はMVD範囲内の値が導出されるようにすることができる。または、制限的なMV範囲又は制限的なMVD範囲を具現するために、MV又はMVDを示すシンタックスエレメントの2進化表現範囲を制限することができる。
本開示の一実施例によれば、MV範囲とMVD範囲が異なってよい。また、MVD決定方法が多数存在し、MVD1とMVD2とが異なる方法によって決定されたMVDであってよい。本開示のさらに他の実施例によれば、MVD1範囲とMVD2範囲とが異なってもよい。互いに異なる範囲(range)を使用することは、互いに異なるリソース又は互いに異なるビット数を使用するためのものであってよく、これにより、ある要素に対して不要に広い範囲を示さなくて済む。
一実施例によれば、MVD1は、図40又は図9で説明するMVDであってよい。または、MVD1は、AMVP、インターモード、アファインインターモードのMVDであってよい。または、MVD1は、マージモードを使用しない時のMVDであってよい。マージモードの使用されるか否かは、merge_flag又はgeneral_merge_flagによって示されてよい。例えば、merge_flag又はgeneral_merge_flagが1である場合に、マージモードを使用するものであり、0である場合にマージモードを使用しないものであってよい。
一実施例によれば、MVD2は、図38~図39で説明するMVDであってよい。または、MVD2は、MMVDモードのMVDであってよい。または、MVD2は、マージモードを使用する時のMVDであってよい。
一実施例によれば、MVは、最終モーション補償又は予測に用いられるMVであってよい。または、MVは候補リストに入るMVであってよい。または、MVは、コロケーテッドモーションベクトル(collocated motion vector)(時間的モーションベクトル)であってよい。または、MVは、MVPにMVDを足した値であってよい。または、MVは、CPMVであってよい。または、MVは、CPMVPにCPMVDを足した値であってよい。または、MVは、アファインMCにおいて各サブブロックに対するMVであってよい。前記サブブロックに対するMVは、CPMVから導出されたMVであってよい。または、MVは、MMVDのMVであってよい。
本開示の実施例によれば、MVD2範囲は、MVD1範囲又はMV範囲よりも狭くてよい。また、MVD1範囲とMV範囲は同一であってよい。一実施例によれば、MVD1範囲とMV範囲は、-2^17から(2^17-1)まで(inclusive)であってよい。また、MVD2範囲は、-2^15から(2^15-1)まで(inclusive)であってよい。
図37を参照すると、点線で表した四角形は、MV範囲又はMVD範囲を示している。また、内側四角形は、MVD2範囲を示したものでよい。外側の四角形は、MVD1範囲又はMV範囲を示したものでよい。すなわち、MVD2範囲は、MVD1範囲又はMV範囲と異なってよい。図面中の範囲(range)は、図面の点から示し得るベクトル(vector)範囲を示したものでよい。例えば、前述したように、MVD2範囲は、-2^15から(2^15-1)まで(inclusive)であってよい。また、MVD1範囲又はMV範囲は、-2^17から(2^17-1)まで(inclusive)であってよい。仮に、MV又はMVDがx-pel単位の値である場合に、MV又はMVDが示す値は、実際に(MV*x)又は(MVD*x)ピクセルであってよい。例えば、1/16-pel単位の値である場合に、(MV/16)又は(MVD/16)ピクセルを示すものであってよい。この実施例において、MVD2範囲の場合、最大絶対値が32768であり、これが仮に1/16-pel単位の値である場合、(MVD2値)/16の値が最大で2048ピクセルとなる。したがって、8Kピクチャーを完全にカバーできなくなる。MVD1範囲又はMV範囲の場合、最大絶対値が131072であり、1/16-pel単位を使用する時に、最大で8192ピクセルを示すことができる。したがって、8Kピクチャーを完全にカバーすることができる。8Kレゾリューションは、横長(又は、横又は縦のうち長いものの長さ)が7680ピクセル又は8192ピクセルであるレゾリューションを示すことができる。例えば、7680×4320などのピクチャーが8Kレゾリューションであってよい。
図38は、本開示の一実施例に係るMMVDを示す図である。
本開示の実施例によれば、MMVDは、merge mode with MVD、merge with MVDであり、マージモードにMVDを使用する方法であってよい。例えば、マージ候補とMVDに基づいてMVを生成できる。また、MMVDのMVDは、図9又は図40のMVD、又は前述したMVD1に比べて、示し得る範囲が限定的であり得る。例えば、MMVDのMVDは、水平成分、垂直成分のいずれか1つのみ存在することが可能である。また、MMVDのMVDが示し得る値の絶対値は、互いに等間隔でないことがある。図38(a)は、中心の点線形状の点からMMVDのMVDが示し得る点(point)を示している。
図38(b)は、MMVD関連シンタックスを示している。一実施例によれば、MMVDの使用されるか否かを示す上位レベルシグナリングが存在してよい。ここで、シグナリングとは、ビットストリームからパースすることを意味できる。上位レベルは、現在ブロック、現在コーディングブロックを含む単位でよく、例えば、スライス、シーケンス、タイル、タイルグループ、CTUなどであってよい。MMVDの使用されるか否かを示す上位レベルシグナリングは、上位レベルMMVD活性情報(sps_mmvd_enabled_flag)であってよい。上位レベルMMVD活性情報(sps_mmvd_enabled_flag)が1である場合に、MMVDが活性化されることを示し、上位レベルMMVD活性情報(sps_mmvd_enabled_flag)が0である場合に、MMVDが活性化されないことを示すことができる。ただし、これに限定されるものではなく、上位レベルMMVD活性情報(sps_mmvd_enabled_flag)0である場合に、MMVDが活性化されることを示し、上位レベルMMVD活性情報(sps_mmvd_enabled_flag)が1である場合に、MMVDが活性化されないことを示すことができる。
仮にMMVDの使用されるか否かを示す上位レベルシグナリングである上位レベルMMVD活性情報(sps_mmvd_enabled_flag)が1である場合に、追加のシグナリングによって現在ブロックにMMVDの使用されるか否かを示すことができる。すなわち、ビデオ信号処理装置は、上位レベルMMVD活性情報がMMVDの活性を示す場合に、現在ブロックにMMVDを使用するか否かを示すMMVDマージ情報(mmvd_merge_flag)をビットストリームからパースする段階を行うことができる。MMVDの使用されるか否かを示すシグナリングは、MMVDマージ情報(mmvd_merge_flag)であってよい。MMVDマージ情報(mmvd_merge_flag)が1である場合、現在ブロックに対してMMVDが使用されることを意味できる。MMVDマージ情報(mmvd_merge_flag)が0である場合に、現在ブロックに対してMMVDが使用されないことを意味できる。ただし、これに限定されるものではなく、MMVDマージ情報(mmvd_merge_flag)が0である場合に、現在ブロックに対してMMVDが使用されることを意味し、MMVDマージ情報(mmvd_merge_flag)が1である場合に、現在ブロックに対してMMVDが使用されないことを意味できる。
仮にMMVDマージ情報(mmvd_merge_flag)が1(使用することを示す値)である場合に、MMVD関連シンタックスエレメントをパースすることができる。MMVD関連シンタックスエレメントは、mmvd_cand_flag、MMVDの距離に関連した情報(mmvd_distance_idx)、MMVDの方向に関連した情報(mmvd_direction_idx)のうち少なくとも1つを含むことができる。
一実施例として、mmvd_cand_flagは、MMVDモードで使用するMVPを示すことができる。または、mmvd_cand_flagは、MMVDモードで使用するマージ候補を示すことができる。また、MMVDのMVDは、MMVDの距離に関連した情報(mmvd_distance_idx)とMMVDの方向に関連した情報(mmvd_direction_idx)に基づいて決定されてよい。ここで、MMVDのMVDは、MVDに関する情報(mMvdLX)を示すことができる。例えば、MMVDの距離に関連した情報(mmvd_distance_idx)は、MMVDのMVDの絶対値に関連した値を示し、MMVDの方向に関連した情報(mmvd_direction_idx)は、MMVDのMVDの方向に関連した値を示すことができる。
図39は、本開示の一実施例に係るMMVDのMVD導出(MVD derivation)を示す図である。
図39の左側を参照すると、ビデオ信号処理装置は、MMVDマージ情報(mmvd_merge_flag)に基づき、現在ブロックにMMVDが用いられるか否かを決定することができる。また、現在ブロックにMMVDを使用する場合に、MVD導出過程を行うことができる。MVD導出過程は、図39右側に示した8.5.2.7であってよい。また、8.5.2.7の出力(output)であるMVDは、MMVDのMVDであってよく、MMVDに関する情報(mMvdLX)であってよい。既に説明したように、MMVDに関する情報(mMvdLX)は、MMVDの距離に関連した情報(mmvd_distance_idx)とMMVDの方向に関連した情報(mmvd_direction_idx)に基づいて取得できる。ここで、Xは0、1で代替されてよく、それぞれ、参照リストL0、参照リストL1に該当するものであってよい。
また、図39に示したように、MMVDのMVD又はMMVDに関する情報(mMvdLX)を、前の過程で導出したモーションベクトル(MV)であるmvLXに足すことができる((8-281)、(8-282))。ここで、Xは0、1などで代替されてよく、それぞれ、第1参照リスト(reference list L0)、第2参照リスト(reference list L1)に該当するものであってよい。また、ここで、MMVDのMVDは、MMVDに関する情報(mMvdLX)を示すことができる。また、ビデオ信号処理装置は、MVDを足した修正されたモーションベクトル(mvLX)の範囲(range)を制限する過程を行うことができる。例えば、クリッピングを行うことができる((8-283)、(8-284))。例えば、前述したMV範囲に制限することができる。例えば、-2^17から(2^17-1)まで(inclusive)に制限することができる。
本開示において、Clip3(x,y,z)は、クリッピングを示すものであってよい。。例えば、Clip3(x,y,z)の結果は、1)z<xの場合にx、2)z>yの場合にy、3)その他の場合にz、になり得る。したがって、Clip3(x,y,z)の結果、結果(result)の範囲は、x<=result<=yであってよい。
本実施例において、mvLX[0][0][comp]、mMvdLX[comp]において、compはx-component又はy-componentを示すことができる。例えば、それぞれ、水平成分、垂直成分を示すものであってよい。
また、ビデオ信号処理装置は、修正されたモーションベクトル(mvLX)に基づいて現在ブロックを予測できる。また、ビデオ信号処理装置は、修正されたモーションベクトル(mvLX)に基づいて現在ブロックを復元することができる。既に説明したように、修正されたモーションベクトル(mvLX)は、MMVDに関する情報(mMvdLX)を、モーションベクトル(MV)であるmvLXに足した値であってよい。
また、MMVDのMVD導出過程は、図39の右側と同一であってよい。図面のMMVDオフセット(MmvdOffset)は、前述したMMVD関連シンタックスエレメントに基づく値であってよい。例えば、MMVDオフセット(MmvdOffset)は、MMVDの距離に関連した情報(mmvd_distance_idx)、MMVDの方向に関連した情報(mmvd_direction_idx)に基づく値であってよい。要するに、距離に関連した情報(mmvd_distance_idx)及びMMVDの方向に関連した情報(mmvd_direction_idx)のうち少なくとも1つに基づいてMMVDオフセット(MmvdOffset)が取得されてよい。また、MMVDオフセット(MmvdOffset)に基づいてMMVDに関する情報(mMvdLX)が導出されてよい。
一実施例によれば、双予測である場合(predFlagLXがどの参照リストを使用するかを示すことができ、Xは0、1で代替されてよく、L0及びL1はそれぞれ第1参照リスト(reference list L0)及び第2参照リスト(reference list L1)に該当してよい。)POC(picture order count)に基づいてMMVDのMVDとしてMMVDオフセット(MmvdOffset)をそのまま使用するか、MMVDオフセット(MmvdOffset)に基づいて演算した値を使用するか、ある参照リストに対する値にMMVDオフセット(MmvdOffset)をそのまま使用するか、ある参照リストに対する値に、MMVDオフセット(MmvdOffset)に基づいて演算した値を使用するかなどを決定することができる。
一実施例によれば、第1参照リスト(reference list L0)と第2参照リスト(reference list L1)の両方に対するMVDを取得するために、MMVDオフセット(MmvdOffset)を使用する場合があり得る((8-350)~(8-353))。例えば、第1POC差(currPocDiffL0)と第2POC差(currPocDiffL1)が同一である場合であってよい。POC差(currPocDiffLX)は、現在ピクチャーのPOCと参照リストLXの参照ピクチャーのPOC間の差であってよく、Xは、0と1で代替されてよい。第1POC差(currPocDiffL0)及び第2POC差(currPocDiffL1)はそれぞれ、図39の(8-348)、(8-349)によって決定されてよい。DiffPicOrderCntは、次のように演算できる。
DiffPicOrderCnt( picA, picB ) = PicOrderCnt( picA ) - PicOrderCnt( picB )
PicOrderCnt(picX)は、ピクチャーpicXのPOC値を示すものであってよい。
また、図39でcurrPicは、現在ピクチャー(picture)を示すものであってよい。また、RefPicList[X][refIdxLX]は、参照リストLXでrefIdxLXを使用する時に参照ピクチャーを示すものであってよい。
一実施例によれば、第2参照リスト(reference list L1)に対するMVDに、MmvdOffsetに基づいて演算した値を使用する場合があり得る((8-354)~(8-363))。このとき、第1参照リスト(reference list L0)に対するMVDとしてMMVDオフセット(MmvdOffset)値をそのまま使用することが可能である。この場合は、Abs(currPocDiffL0)がAbs(currPocDiffL1)と同一であるか或いは大きい場合であってよい。または、Abs(currPocDiffL0)がAbs(currPocDiffL1)よりも大きい場合であってよい。
一実施例によれば、第1参照リスト(reference list L0)に対するMVDに、MMVDオフセット(MmvdOffset)に基づいて演算した値を使用する場合があり得る((8-364)~(8-373))。このとき、第2参照リスト(reference list L1)に対するMVDとしてMMVDオフセット(MmvdOffset)値をそのまま使用することが可能である。この場合は、Abs(currPocDiffL0)がAbs(currPocDiffL1)よりも小さい場合であってよい。または、Abs(currPocDiffL0)がAbs(currPocDiffL1)より小さい又は同一である場合であってよい。
一実施例によれば、MMVDオフセット(MmvdOffset)に基づいて演算することは、MVスケーリング(MV scaling)を示すものであってよい。MVスケーリングは、図39の(8-356)~(3-361)又は(8-366)~(3-371)であってよい。前者は、第1MMVDに関する情報(mMvdL0)又はMMVDオフセット(MmvdOffset)に基づくスケーリング(scaling)であり、スケールされたMVである第2MMVDに関する情報(mMvdL1)を作る過程であってよく、後者は、第2MMVDに関する情報(mMvdL1)又はMMVDオフセット(MmvdOffset)に基づくスケーリング(scaling)であり、スケールされた(scaled)モーションベクトル(MV)である第1MMVDに関する情報(mMvdL0)を作る過程であってよい。MVスケーリングは、第1POC差(currPocDiffL0)、第2POC差(currPocDiffL1)に基づく値であるスケール要素(distScaleFactor((8-359)、(8-369)))に基づく演算であってよい。また、MVスケーリングは、スケール要素(distScaleFactor)とスケールるMVを掛けた値に基づく演算であってよい((8-360)、(8-361)、(8-370)、(8-371))。また、MVスケーリングは、MV範囲を制限する過程を含むことができる。例えば、図39の(8-360)、(8-361)、(8-370)、(8-371)に範囲(range)制限過程が含まれていてよい。例えば、MVスケーリングは、クリッピング過程を含むことができる。本開示の実施例によれば、この時、前述したMVD2範囲を使用することができる。例えば、-2^15から(2^15-1)まで(inclusive)と範囲を制限することができる。すなわち、MMVDのMVD範囲を-2^15から(2^15-1)まで(inclusive)と制限できる。例えば、すなわち、MMVDのMVD導出過程は、distScaleFactorとスケールするMVを掛けた値に基づく値を、-2^15から(2^15-1)まで(inclusive)と制限する過程を含むことができる。例えば、Clip3(-2^15,2^15-1,x)過程がMMVDのMVD導出過程に含まれてよい。より具体的に、mMvdLXは、次のように決定されてよい。
mMvdLX = Clip3(-2^15, 2^15 - 1, (distScaleFactor*mMvdLY + 128 - (distScaleFactor*mMvdLY >=0 )) >> 8 )
このとき、Yは0又は1でよく、!Xであってよい。また、mMvdLYは、MmvdOffsetであってよい。distScaleFactorは、(8-359)又は(8-369)に示した値であってよく、currPocDiffL0とcurrPocDiffL1に基づく値であってよい。ただし、MMVDのMVD、MMVDに関する情報(mMvdLX)又はスケールされたMVの範囲が、-2^15から(2^15-1)までと限定されるものではない。MMVDのMVD、MMVDに関する情報(mMvdLX)又はスケールされたMVの範囲は、-2^17から(2^17-1)までであってよい。これについては図43で説明する。
本過程は、L0とL1に対する参照ピクチャーがいずれもロングターム参照ピクチャー(long-term reference picture)でない場合に行うことが可能である。
一実施例によれば、MMVDオフセット(MmvdOffset)に基づいて演算することは、第1POC差(currPocDiffL0)と第2POC差(currPocDiffL1)に基づいてMMVDオフセット(MmvdOffset)又は負のMMVDオフセット(-MmvdOffset)を示すものであってよい((8-362)、(8-363)、(8-372)、(8-373))。本過程は、L0とL1に対する参照ピクチャーのうち少なくとも1つが、ロングターム参照ピクチャーである場合に行うことが可能である。
また、仮にuni-予測である場合に、mMvdLXで(に) MmvdOffsetをそのまま使用することが可能である((8-374)、(8-375))。
図40は、本開示の一実施例に係るMVD及びMV導出を示す図である。
図40の実施例は、図37のMV範囲又はMVD1範囲を使用する例であってよい。図40の実施例は、-2^17から(2^17-1)まで(inclusive)の範囲を使用する例であってよい。
図40を参照すると、図9などで説明したシンタックスエレメントに基づいてlMvdを導出(derive)することができる(7-161)。また、lMvdは、-2^17から(2^17-1)まで(inclusive)の範囲であってよい。また、MvdLX、MvdCpLXなどの値がlMvdに設定されてよい。また、lMvd、MvdLX、MvdCpLXなどは、前述したMVD1であってよい。
またAMVP、インターモードなどを使用する場合に、MV範囲を-2^17から(2^17-1)まで(inclusive)と制限することができる。この場合は、マージモードを使用しない場合であってよい。図40を参照すると、(8-264)~(8-267)は、MV範囲制限過程を含むことができる。図面を参照すると、uLXは、MVP(mvpLX)とMVD(mvdLX)を足し算したものに基づく値であってよい。また、ULXに基づき、最終MVであるmvLXを計算することができる。図40は、モジュール(modulus)演算を含んでいるが、この演算によって示す値を、一定ビット数以下に表現できるように制限されてよい。例えば、(%2^18)を計算することによって18ビットで表現できるようにすることができる。したがって、MV範囲を-2^17から(2^17-1)まで(inclusive)と制限できる。(8-265)、(8-267)は、MVPとMVD足し算する際に発生し得るオーバーフロー(overflow)を解決する役割を担うことができる。
図41は、本開示の一実施例に係るMV、CPMV導出(CPMV derivation)を示す図である。
図41の実施例は、図37のMV範囲又はMVD1範囲を使用する例であってよい。図40の実施例は、-2^17から(2^17-1)まで(inclusive)の範囲を使用する例であってよい。
図41(a)は、コロゲーテッドモーションベクトル(時間的モーションベクトル)を導出する方法を示したものであってよい。この過程は、MVスケーリングを含むことができる。この時、distScaleFactorとスケールするMV(mvCol)に基づく値をクリッピングする演算を含むことができる((8-398))。この時、クリッピングを-131072、131071の範囲(inclusive)の結果が出るようにすることができる。-131072は、-2^17と同じ値である。131071は、2^17-1と同じ値である。
図41(b)は、CPMV(cpMvLX)を導出する過程の一部を示す図である。この時も同様、範囲(range)を制限するためのクリッピング過程が含まれてよい。この時、範囲は、-2^17から(2^17-1)まで(inclusive)であってよい。
図41(c)は、サブブロックベースのMVを導出する過程の一部を示す図である。サブブロックベースのMVは、アファインMC、サブブロックベースの時間的MV予測などを使用する時のMVであってよい。この時も同様、範囲を制限するためのクリッピング過程が含まれてよい。この時、範囲は、-2^17から(2^17-1)まで(inclusive)であってよい。図面のxSbIdx、ySbIdxはそれぞれ、x軸に対するサブブロックインデックス、y軸に対するサブブロックインデックスを示すことができる。
図42は、本開示の一実施例に係るMV及びMVDの範囲を示す図である。
前述した部分は本実施例で説明を省略していてよい。
前述したように、MVD生成方法或いはMVD決定方法が多数存在し得る。MVDは、前述したモーションベクトル差分値(Motion vector difference)であってよい。また、MV生成方法或いはMV決定方法が多数存在し得る。
そして、このとき、本開示の一実施例によれば、MV又はMVDが示し得る範囲が制限的であってよい。
本開示の一実施例によれば、MV範囲とMVD範囲は、同一であってよい。また、MVD生成方法が存在し、MVD生成方法1によって生成したMVDがMVD1であり、MVD生成方法2によって生成したMVDがMVD2であってよい。この時、MVD1範囲とMVD2範囲は同一であってよい。また、前記MV範囲、MVD範囲、MVD1範囲、MVD2範囲は、-2^Nから(2^N-1)までであってよい。このとき、-2^Nと(2^N-1)を含む範囲であってよい。さらに他の実施例によれば、MV範囲又はMVD範囲は、(-2^N+1)から2^Nまでであってよい。このとき、(-2^N+1)と2^Nを含む範囲であってよい。これらの実施例において、Nは整数、例えば、正の整数であってよい。より具体的に、Nは17であってよい。また、このとき、MV範囲又はMVD範囲をN+1ビットを用いて示すことができる。したがって、MV範囲、MVD範囲、MVD1範囲、MVD2範囲はいずれも、-2^17から(2^17-1)までであってよい。
また、先の図面で説明したように、MV、MVD1、MVD2などが定義されてよい。すなわち、MVは、最終モーション補償又は予測に用いられるMVなどを意味でき、これについて図37の説明を参照できる。また、MVD1は、図40又は図9で説明するMVDであってよい。または、MVD1は、AMVP、インターモード、アファインインターモードのMVD、又はマージモードを使用しない時のMVDであってよく、これについて図37の説明を参照できる。また、MVD2は、図38~図39で説明するMVD、又はMMVDモードのMVDであってよく、これについて図37の説明を参照できる。ここでMMVDモードのMVDは、MMVDに関する情報(mMvdLX)であってよい。
したがって、一実施例によれば、AMVP、インターモード、アファインインターモードのMVD及びMMVDのMVDはいずれも、示し得る範囲が同一であってよい。さらに、最終MVも範囲が同一であってよい。より具体的に、AMVP、インターモード、アファインインターモードのMVD及びMMVDのMVDはいずれも、範囲が-2^17から(2^17-1)まで(inclusive)であってよい。さらに、最終MVも範囲が-2^17から(2^17-1)まで(inclusive)であってよい。
これにより、あるサイズのピクチャーを、MV、MVDが完全にカバー可能になる。また、あるMV、又はMVD1が示し得る範囲があるとき、MVD2も同一の範囲を表現可能になる。したがって、例えば、MVD2を使用する方法が表現範囲によって他の方法に比べて制限的に使用されなくて済む。また、MV、MVD1などがいずれの範囲を示し得るとき、MVD2が同一の範囲を示すようにすることは、ハードウェア又はソフトウェアにおいて追加のリソースを必要としなくて済む。仮にMVD2又はMMVDのMVDが-2^17から(2^17-1)まで(inclusive)を表現できれば、最大絶対値が131072であり、これが1/16-pel単位の値である場合に最大で8192ピクセルを示すことができる。したがって、8Kピクチャーを完全にカバーすることができる。
図42を参照すると、外側の点線は、MV、MVD1、MVD2が中央の点から示し得る範囲を表示している。そして、MV範囲、MVD1範囲、MVD2範囲はいずれも同一であってよい。例えば、MV範囲、MVD1範囲、MVD2範囲は、-2^17から(2^17-1)まで(inclusive)の範囲(range)であってよい。また、この範囲は、8Kピクチャーを全て含むことができる。すなわち、最悪のケースとして、ピクチャーの端から端を示す場合にも、前記MV、MVD1、MVD2範囲は、それを示すことが可能になる。したがって、これにより、より良好なモーションベクトルを示すことができ、モーション補償がよくなされるとといえ、レジデュアルが減り、コーディング効率(coding efficiency)が増大する効果を奏することができる。
図43は、本開示の一実施例に係るMMVDのMVD導出を示す図である。
図43は、図39の一部を修正したものであってよい。図43の実施例において、図39で説明した内容は省略してよい。または、前述した内容が省略されていてよい。
MMVDを使用する場合に、MVD導出過程を行うことができる。MVD導出過程は、図43に示した8.5.2.7であってよい。また、8.5.2.7の出力であるMVDは、MMVDのMVDであってよく、MMVDに関する情報(mMvdLX)であってよい。既に説明したように、MMVDに関する情報(mMvdLX)は、MMVDの距離に関連した情報(mmvd_distance_idx)とMMVDの方向に関連した情報(mmvd_direction_idx)に基づいて取得されてよい。
より具体的に、図43と一緒に説明する。図43を参照すると、ビデオ信号処理装置は、MMVDオフセット(MmvdOffset)を取得することができる。ビデオ信号処理装置は、MMVDに関する情報(mMvdLX)を取得するためにMMVDオフセット(MmvdOffset)を取得することができる。MMVDオフセット(MmvdOffset)は、前述したMMVD関連シンタックスエレメントに基づく値であってよい。例えばMMVDオフセット(MmvdOffset)は、MMVDの距離に関連した情報(mmvd_distance_idx)、MMVDの方向に関連した情報(mmvd_direction_idx)に基づく値であってよい。
一実施例によれば、ビデオ信号処理装置は、predFlagLXに基づいて現在ブロックが双予測で予測されるか否かを決定することができる。predFlagLXは、どの参照リスト(reference list)を使用するかを示すことができる。ここで、Xは0、1で代替されてよく、L0及びL1はそれぞれ、参照リストL0及びL1に該当し得る。predFlagL0が1である場合に、第1参照リストが使用されることを示すことができる。また、predFlagL0が0である場合に、第1参照リストが使用されないことを示すことができる。predFlagL1が1である場合に、第2参照リストが使用されることを示すことができる。また、predFlagL1が0である場合に、第2参照リストが使用されないことを示すことができる。
図43で、predFlagL0及びpredFlagL1がいずれも1である場合に、双予測を示すことができる。双予測は、第1参照リスト及び第2参照リストが両方とも使用されることを示すことができる。第1参照リスト及び第2参照リストが用いられる場合に、ビデオ信号処理装置は、現在ブロックを含む現在ピクチャー(currPic)及び第1参照リストに基づく第1参照ピクチャー(RefPicList[0][refIdxL0])間のPOC(Picture Order Count)の差を第1POC差(currPocDiffL0)として取得する段階(8-348)を行うことができる。また、第1参照リスト及び第2参照リストが用いられる場合に、ビデオ信号処理装置は、現在ピクチャー(currPic)及び第1リストに基づく第2参照ピクチャー(RefPicList[1][refIdxL1])間のPOC(Picture Order Count)の差を第2POC差(currPocDiffL1)として取得する段階(8-349)を行うことができる。
POC差(currPocDiffLX)は、現在ピクチャーのPOCと参照リスト(reference list LX)の参照ピクチャー(reference list)のPOC間の差であってよく、Xは0と1で代替されてよい。第1POC差(currPocDiffL0)及び第2POC差(currPocDiffL1)はそれぞれ、図43の(8-348)、(8-349)によって決定されてよい。DiffPicOrderCntは、次のように演算できる。
DiffPicOrderCnt( picA, picB ) = PicOrderCnt( picA ) - PicOrderCnt( picB )
PicOrderCnt(picX)は、ピクチャーpicXのPOC値を示すものであってよい。
ビデオ信号処理装置は、MMVDオフセット(MmvdOffset)、第1POC差(currPocDiffL0)、及び第2POC差(currPocDiffL1)のうち少なくとも1つに基づき、第1参照リストに関連した第1MMVDに関する情報(mMvdL0)及び第2参照リストに関連した第2MMVDに関する情報(mMvdL1)を取得する段階を行うことができる。ここで、MMVDに関する情報(mMvdLX)は、第1MMVDに関する情報(mMvdL0)及び第2MMVDに関する情報(mMvdL1)を含むことができる。ビデオ信号処理装置が第1MMVDに関する情報(mMvdL0)及び第2MMVDに関する情報(mMvdL1)を取得する過程については、以下に詳細に説明する。
ビデオ信号処理装置は、POC(picture order count)に基づいてMMVDのMVDとしてMMVDオフセット(MmvdOffset)をそのまま使用するか、MMVDオフセット(MmvdOffset)に基づいて演算した値を使用するか、ある参照リスト(reference list)に対する値にMMVDオフセット(MmvdOffset)をそのまま使用するか、ある参照リスト(reference list)に対する値にMMVDオフセット(MmvdOffset)に基づいて演算した値を使用するかなどを決定することができる。
第1POC差(currPocDiffL0)及び第2POC差(currPocDiffL1)が同一である場合に、ビデオ信号処理装置は、MMVDオフセット(MmvdOffset)を第1MMVDに関する情報(mMvdL0)として取得する段階(8-350,8-351)を行うことができる。また、第1POC差(currPocDiffL0)及び第2POC差(currPocDiffL1)が同一である場合に、ビデオ信号処理装置は、MMVDオフセット(MmvdOffset)を第2MMVDに関する情報(mMvdL1)として取得する段階(8-352、8-353)を行うことができる。
ビデオ信号処理装置は、第1POC差の絶対値(Abs(currPocDiffL0))が第2POC差の絶対値(Abs(currPocDiffL1))よりも大きいか否かを決定することができる。また、ビデオ信号処理装置は、第1POC差の絶対値(Abs(currPocDiffL0))が第2POC差の絶対値(Abs(currPocDiffL1))より大きい或いは同一である場合に、MMVDオフセット(MmvdOffset)を第1MMVDに関する情報(mMvdL0)として取得する段階(8-354、8-355)を行うことができる。
第1参照ピクチャー(RefPicList[0][refIdxL0])がロングターム参照ピクチャーでなく、第2参照ピクチャー(RefPicList[1][refIdxL1])がロングターム参照ピクチャーでない場合に、ビデオ信号処理装置は、第1MMVDに関する情報(mMvdL0)をスケーリングして第2MMVDに関する情報(mMvdL1)を取得する段階(8-356~8-361)を行うことができる。スケールのためにスケール要素(distScaleFactor)が用いられてよい。スケール要素(distScaleFactor)は、第1POC差(currPocDiffL0)及び第2POC差(currPocDiffL1)のうち少なくとも1つに基づいて取得されてよい。
第1参照ピクチャーがロングターム参照ピクチャーであるか、或いは第2参照ピクチャーがロングターム参照ピクチャーである場合に、ビデオ信号処理装置は、第1MMVDに関する情報(mMvdL0)の絶対値をスケールせずに第2MMVDに関する情報(mMvdL1)を取得する段階(8-362、8-363)を行うことができる。ここで、スケールしないということは、第1MMVDに関する情報(mMvdL0)の絶対値を変更しないという意味であってよい。すなわち、ビデオ信号処理装置は、第1MMVDに関する情報(mMvdL0)の符号を変更して又は変更しないで、第2MMVDに関する情報(mMvdL1)を取得することができる。ビデオ信号処理装置は、第1POC差(currPocDiffL0)及び第2POC差(currPocDiffL1)の符号が同一である場合に、第2MMVDに関する情報(mMvdL1)を、第1MMVDに関する情報(mMvdL0)に設定することができる。また、ビデオ信号処理装置は、第1POC差(currPocDiffL0)及び第2POC差(currPocDiffL1)の符号が異なる場合に、第2MMVDに関する情報(mMvdL1)を、第1MMVDに関する情報(mMvdL0)の符号を変更して設定することができる。
ビデオ信号処理装置は、第1POC差の絶対値(Abs(currPocDiffL0))が第2POC差の絶対値(Abs(currPocDiffL1))よりも小さいか否かを決定することができる。第1POC差の絶対値(Abs(currPocDiffL0))が第2POC差の絶対値(Abs(currPocDiffL1))よりも小さい場合に、ビデオ信号処理装置は、MMVDオフセット(MmvdOffset)を第2MMVDに関する情報(mMvdL1)として取得する段階(8-364、8-365)を行うことができる。
第1参照ピクチャー(RefPicList[0][refIdxL0])がロングターム参照ピクチャーでなく、第2参照ピクチャー(RefPicList[1][refIdxL1])がロングターム参照ピクチャーでない場合に、ビデオ信号処理装置は、第2MMVDに関する情報(mMvdL1)をスケーリングし、第1MMVDに関する情報(mMvdL0)を取得する段階(8-366~8-371)を行うことができる。スケールのためにスケール要素(distScaleFactor)が用いられてよい。スケール要素(distScaleFactor)は、第1POC差(currPocDiffL0)及び第2POC差(currPocDiffL1)のうち少なくとも1つに基づいて取得されてよい。
第1参照ピクチャー(RefPicList[0][refIdxL0])がロングターム参照ピクチャーであるか、或いは第2参照ピクチャー(RefPicList[1][refIdxL1])がロングターム参照ピクチャーである場合に、ビデオ信号処理装置は、第2MMVDに関する情報(mMvdL1)の絶対値をスケールせずに第1MMVDに関する情報(mMvdL0)を取得する段階(8-372,8-373)を行うことができる。ここで、スケールしないということは、第2MMVDに関する情報(mMvdL1)の絶対値を変更しないという意味であってよい。すなわち、ビデオ信号処理装置は、第2MMVDに関する情報(mMvdL1)の符号を変更して又は変更しないで、第1MMVDに関する情報(mMvdL0)を取得することができる。ビデオ信号処理装置は、第1POC差(currPocDiffL0)及び第2POC差(currPocDiffL1)の符号が同一である場合に、第1MMVDに関する情報(mMvdL0)を第2MMVDに関する情報(mMvdL1)に設定することができる。また、ビデオ信号処理装置は、第1POC差(currPocDiffL0)及び第2POC差(currPocDiffL1)の符号が異なる場合に、第1MMVDに関する情報(mMvdL0)を第2MMVDに関する情報(mMvdL1)の符号を変更して設定することができる。
図43で、predFlagL0及びpredFlagL1のうち少なくとも1つが1でない場合に、単予測(uni-prediction)を示すことができる。単予測である場合に、MMVDに関する情報(mMvdLX)としてMMVDオフセット(MmvdOffset)をそのまま使用することができる((8-374)、(8-375))。
既に説明したように、ビデオ信号処理装置は、MMVDに関する情報(mMvdLX)を取得するために、MMVDの距離に関連した情報及びMMVDの方向に関連した情報に基づいてMMVDオフセットを取得する段階を行うことができる。
第1参照リストのみが用いられる場合(predFlagL0==1)に、ビデオ信号処理装置は、MMVDオフセット(MmvdOffset)をスケールせず、第1参照リストに関連した第1MMVDに関する情報(mMvdL0)として取得する段階(8-374,8-375)を行うことができる。
第2参照リストのみが用いられる場合(predFlagL1==1)に、ビデオ信号処理装置は、MMVDオフセット(MmvdOffset)をスケールせず、第2参照リストに関連した第2MMVDに関する情報(mMvdL1)として取得する段階(8-374、8-375)を行うことができる。
前述したように、MMVDのMVDの範囲は制限的であってよい。ここで、MMVDのMVDは、MMVDに関する情報(mMvdLX)であってよい。本開示の実施例によれば、MMVDのMVDの範囲は、他の方法で決定するMVD(例えば、図9のシンタックスエレメントに基づくMVD)の範囲と同一であってよい。また、MMVDのMVDの範囲は、最終MVの範囲と同一であってよい。本開示の実施例によれば、MMVDのMVD範囲又はMMVDに関する情報(mMvdLX)の範囲は、-2^17から2^17-1までであってよく、このとき、-2^17と2^17-1を含む範囲であってよい。
また、前述したように、MMVDのMVD導出過程においてMVスケーリング過程を含むことができる。また、MMVDのMVD導出過程において範囲(range)を制限するためのクリッピング動作が含まれてよい。
図43を参照すると、MMVDに関する情報(mMvdLX)は、クリッピング動作に基づくものでよい。このとき、Xは0又は1で代替されてよく、これはそれぞれ、第1参照リスト(reference list L0)、第2参照リスト(reference list L1)に該当し得る。例えば、MMVDに関する情報(mMvdLX)は、Clip3動作に基づくものでよい。例えば、MMVDに関する情報(mMvdLX)は、Clip3(-2^17,2^17-1,x)に基づくものでよい。このとき、xは第1POC差(currPocDiffL0)、第2POC差(currPocDiffL1)、又はMMVDオフセット(MmvdOffset)に基づく値であってよい。例えば、xはスケール要素(distScaleFactor)とMMVDオフセット(MmvdOffset)に基づく値であってよい。図43の(8-360)、(8-361)、(8-370)、(8-371)は、MVD範囲を制限するためのクリッピング動作を含んでいる。
更なる実施例として、図42~図43において、MV、MVD、MVD1、MVD2間の統一した範囲(range)、多数のMVD生成方法によるMVD、MMVDのMVD範囲は、-2^N+1から2^Nまでであってよく、このとき、-2^N+1と2^Nを含む範囲であってよい。より具体的に、Nは17であってよい。すなわち、MV、MVD、MVD1、MVD2間の統一した範囲、多数のMVD生成方法によるMVD、MMVDのMVD範囲は、-2^17+1から2^17までであってよく、このとき、-2^17+1と2^17を含む範囲であってよい。この場合、MVDを18ビットで表現することができる。
本開示の一実施例によれば、クロマMVの範囲は、ルマMVの範囲と異なってよい。例えば、クロマMVは、ルマMVに比べて解像度が高くてよい。すなわち、クロマMVの1ユニットは、ルマMVの1ユニットよりも小さいピクセルを表現することができる。例えば、ルマMVは、1/16-pel単位であってよい。また、クロマMVは1/32-pel単位であってよい。
また、クロマMVは、ルマMVに基づくものでよい。例えば、クロマMVは、ルマMVにいずれの値を掛けて決定されてよい。前記いずれの値は、水平成分に対して2/SubWidthC、垂直成分に対して2/SubHeightCであってよい。前記いずれの値が含む2は、クロマMVの解像度がルマMVの解像度よりも2倍高いために含まれた値であってよい。また、SubWidthC、SubHeightCは、色フォーマット(color format)によって決定される値であってよい。また、SubWidthC、SubHeightCは、クロマサンプルサンプリング(chorma sample sampling)に対する値であってよい。例えば、SubWidthC、SubHeightCは、ルマサンプルに対してクロマサンプルがどれだけ存在するかに関する値であってよい。また、SubWidthC、SubHeightCは、1又は2であってよい。
本開示の実施例によれば、クロマMVの解像度がルマMVの解像度よりも高い時に、クロマMVの範囲がルマMVの範囲よりも広くてよい。これは、ルマMVがカバーする領域をクロマMVもカバーするためのものであってよい。例えば、クロマMVの範囲は、ルマMVの範囲の2倍であってよい。例えば、クロマMV範囲は、-2^18~2^18-1までであってよく、このとき、-2^18と2^18-1を含む範囲であってよい。また、ルマMV範囲は、-2^17から2^17-1までであってよく、このとき、-2^17と2^17-1を含む範囲であってよい。
また、クロマMVの範囲は、色フォーマットよって可変してよい。例えば、SubWidthC又はSubHeightCが1である場合に、クロマMVの範囲は、ルマMVの範囲と異なってよい。このとき、クロマMVの範囲は、ルマMVの範囲の2倍であってよい。例えば、クロマMV範囲は、-2^18から2^18-1までであってよく、このとき、-2^18と2^18-1を含む範囲であってよく、ルマMV範囲は、-2^17から2^17-1までであってよく、このとき、-2^17と2^17-1を含む範囲であってよい。また、SubWidthCとSubHeightCが2である場合に、クロマMVの範囲は、ルマMVの範囲と同一であってよい。このとき、範囲は-2^17から2^17-1までであってよく、このとき、-2^17と2^17-1を含む範囲であってよい。これは、クロマMVとルマMVが示し得る範囲を統一させるためのものであってよい。
本開示の実施例において、4:2:0フォーマットである場合に、SubWidthC、SubHeightCはそれぞれ、2、2であってよい。4:2:2フォーマットである場合に、SubWidthC、SubHeightCはそれぞれ、2、1であってよい。4:4:4フォーマットである場合に、SubWidthC、SubHeightCはそれぞれ、1、1であってよい。
上述した本開示の実施例は、様々な手段によって具現されてよい。例えば、本開示の実施例は、ハードウェア、ファームウェア(firmware)、ソフトウェア又はそれらの結合などによって具現されてよい。
ハードウェアによる具現では、本開示の実施例による方法は、1つ又はそれ以上のASIC(Application Specific Integrated Circuit)、DSP(Digital Signal Processor)、DSPD(Digital Signal Processing Device)、PLD(Programmable Logic Device)、FPGA(Field Programmable Gate Array)、プロセッサ、コントローラ、マイクロコントローラ、マイクロプロセッサなどによって具現されてよい。
ファームウェア又はソフトウェアによる具現では、本開示の実施例による方法は、以上で説明された機能又は動作を実行するモジュール、手順又は関数などの形態で具現されてよい。ソフトウェアコードは、メモリに記憶されてプロセッサによって駆動されてよい。前記メモリは、プロセッサの内部又は外部に配されてよく、既に公知の様々な手段によってプロセッサとデータを交換することができる。
前述した本開示の説明は例示のためのものであり、本開示の属する技術の分野における通常の知識を有する者は、本開示の技術的思想や必須の特徴を変更することなく別の具体的な形態に容易に変形可能であるということが理解できよう。したがって、以上に述べた実施例は、如何なる面においても例示的なものであり、限定的でないものと解釈されるべきである。例えば、単一型として説明されている各構成要素は、分散して実施されてもよく、同様に、分散していると説明されている構成要素も、結合した形態で実施されてよい。
本開示の範囲は、上の詳細な説明よりは、後述する特許特許請求の範囲によって示され、特許請求の範囲の意味及び範囲、そしてその均等概念から導出される変更又は変形された形態はいずれも、本開示の範囲に含まれるものと解釈されるべきである。