本発明の実施例で使用される用語は、特定の実施例を記述するためだけのものであり、本発明を限定するものではない。本発明の実施例及び特許請求の範囲で使用される単数形の「1つの」、「前記」及び「該」は、文脈が他の意味を明確に示さない限り、複数形も含むことを意図している。本明細書で使用される用語「及び/又は」は、関連付けられたリストされた1つ又は複数のアイテムを含む任意の又は全ての可能な組み合わせを意味することも理解されるべきである。本発明の実施例では様々な情報を記述するために第1、第2、第3などの用語を採用する可能性があるが、これらの情報はこれらの用語に限定されるべきではないことを理解されたい。これらの用語は、同じタイプの情報を互いに区別するためにのみ使用される。例えば、本発明の実施例の範囲から逸脱することなく、文脈に応じて、第1情報は、第2情報と呼ばれてもよく、同様に、第2情報は、第1情報と呼ばれてもよい。さらに、使用される用語「もし」は、「…時」、又は「…である場合」、又は「決定に応答する」と解釈されてもよい。
本発明の実施例では符号化・復号方法、装置及びその機器を提案し、以下の概念に関してもよい。
イントラ予測(intra prediction)、インター予測(inter prediction)及びIBC(イントラブロックコピー)予測である。
イントラ予測とは、ビデオ空間領域の冗長性を除去するという目的を達成するために、ビデオ空間領域の相関に基づいて、符号化済みブロックを用いて予測を行うことである。イントラ予測は、複数の予測モードを規定しており、各予測モードが1つのテクスチャ方向に対応し(DCモードを除く)、例えば、画像テクスチャが水平状に配置されていれば、水平予測モードは画像情報をよりよく予測することができる。
インター予測とは、ビデオ時間領域の相関に基づいて、ビデオシーケンスが比較的強い時間領域相関を含むため、隣接する符号化済み画像の画素を用いて現在の画像の画素を予測し、ビデオ時間領域の冗長性を効果的に除去するという目的を達成することができる。
イントラブロックコピー(IBC、Intra Block Copy)とは、同じフレームの参照を許可し、現在ブロックの参照データが同一フレームに由来するものであり、イントラブロックコピーはイントラブロック複製とも呼ばれてもよい。イントラブロックコピー技術では、現在ブロックのブロックベクトルを用いて現在ブロックの予測値を取得することができ、例示的には、スクリーンコンテンツ内の同一フレーム内に繰り返し発生するテクスチャが多数存在するという特性に基づいて、ブロックベクトルを用いて現在ブロックの予測値を取得するとき、スクリーンコンテンツシーケンスの圧縮効率を向上させることができる。
予測画素(Prediction Signal):予測画素とは符号化・復号済みの画素から導出される画素値であり、元の画素と予測画素との差により残差を得て、さらに残差の変換量子化及び係数符号化を行う。インター予測画素とは、現在ブロックが参照フレームから導出する画素値であり、画素位置が離散的であるため、補間演算によって最終的な予測画素を取得する必要がある。予測画素と元の画素が近いほど、両者を減算して得られた残差エネルギーが小さくなり、符号化圧縮性能が高くなる。
動きベクトル(Motion Vector、MV):インター予測では、動きベクトルを用いて現在フレームの現在ブロックと参照フレームの参照ブロックとの間の相対変位を表すことができる。分割された各ブロックは、復号側に伝送すべき対応する動きベクトルがあり、各ブロックの動きベクトルを独立に符号化して伝送すると、特にサイズが小さなブロックが多数ある場合、多くのビットが消費される。動きベクトルを符号化するためのビット数を低減するために、隣接ブロック間の空間相関を利用して、隣接する符号化済みブロックの動きベクトルに基づいて現在ブロックの動きベクトルを予測し、そして予測差を符号化し、このように動きベクトルを表すビット数を効果的に低減することができる。現在ブロックの動きベクトルを符号化するとき、まず隣接する符号化済みブロックの動きベクトルを用いて現在ブロックの動きベクトルを予測し、そして該動きベクトルの予測値(MVP、Motion Vector Prediction)と動きベクトルの真の推定値との間の差値(MVD、Motion Vector Difference)を符号化することができる。
動き情報(Motion Information):動きベクトルは現在ブロックとある参照ブロックとの間の位置ずれを表すので、ブロックを指す情報を正確に取得するために、動きベクトルに加えて、現在ブロックがどの参照フレーム画像を用いるかを表す参照フレーム画像のインデックス情報が必要である。ビデオ符号化技術では、現在フレームに対して、通常1つの参照フレーム画像リストを確立することができ、参照フレーム画像インデックス情報は現在ブロックが参照フレーム画像リスト内の何番目の参照フレーム画像を採用したかを表す。
さらに、多くの符号化技術は、複数の参照フレーム画像リストをサポートするので、どの参照フレーム画像リストが用いられたかを表すために、1つのインデックス値を用いることもでき、このインデックス値が参照方向と呼ばれてもよい。以上のように、ビデオ符号化技術では、動きベクトル、参照フレームインデックス、及び参照方向など、動きに関する情報を総称して動き情報と呼ぶことができる。
レート歪み最適化(Rate-Distortion Optimized):符号化効率を評価するには、ビットレートとPSNR(Peak Signal to Noise Ratio、ピーク信号対雑音比)の2つの指標があり、ビットストリームが小さいほど、圧縮率が大きく、PSNRが大きいほど、再構成画像の画質が良く、モード選択時に、判別式は実質的に両者の総合的な評価である。例えば、モードに対応するコスト:J(mode)=D+λ*Rであり、ここで、DはDistortion(歪み)を表し、通常SSE指標を用いて測定することができ、SSEとは再構成画像ブロックと元の画像との差値の2乗平均和であり、λはラグランジュ乗数であり、Rは該モードにおける画像ブロックの符号化に必要な実際のビット数であり、モード情報、動き情報、及び残差などの符号化に必要なビットの総和を含む。モード選択時に、RDO原則を用いて符号化モードを比較決定すれば、通常最適な符号化性能を保証することができる。
ビデオ符号化フレームワーク:図1を参照すると、ビデオ符号化フレームワークを用いて本発明の実施例の符号化側処理フローを実現することができ、ビデオ復号フレームワークの概略図は図1と類似しており、ここではその説明を省略し、ビデオ復号フレームワークを用いて本発明の実施例の復号側処理フローを実現することができる。例示的には、ビデオ符号化フレームワーク及びビデオ復号フレームワークには、イントラ予測/インター予測、動き推定/動き補償、参照画像バッファ、ループ内フィルタリング、再構成、変換、量子化、逆変換、逆量子化、エントロピーエンコーダなどのモジュールが含まれてもよいが、これらに限定されない。符号化側では、これらのモジュール間の連携により、符号化側処理フローを実現することができ、復号側では、これらのモジュール間の連携により、復号側処理フローを実現することができる。
関連技術では、現在ブロックは矩形であってもよいが、実際の物体のエッジは矩形ではないことが多いので、物体のエッジには2つの異なるオブジェクト(前景に存在する物体及び背景など)が存在することが多い。2つのオブジェクトの動きが一致しない場合、矩形分割ではこの2つのオブジェクトをうまく分割できず、そのために、現在ブロックを2つの非矩形サブブロックに分割し、かつ2つの非矩形サブブロックを重み付け予測することができる。例示的には、重み付け予測は、複数の予測値を利用して重み付け操作を行い、それによって最終的な予測値を得ることであり、重み付け予測は、インター及びイントラの結合重み付け予測(Combined inter/intra prediction、CIIP)、インター及びインターの結合重み付け予測、イントラ及びイントラの結合重み付け予測などを含んでもよい。結合重み付け予測の重み値について、現在ブロックの異なる画素位置に同じ重み値を設定してもよいし、現在ブロックの異なる画素位置に異なる重み値を設定してもよい。
図2Aを参照すると、インターイントラ結合重み付け予測の概略図である。
CIIP予測ブロックは、イントラ予測ブロック(即ちイントラ予測モードを採用して画素位置のイントラ予測値を得る)とインター予測ブロック(即ちインター予測モードを採用して画素位置のインター予測値を得る)とを重み付けして得られ、各画素位置で採用されるイントラ予測値とインター予測値との重み比が1:1である。例えば、各画素位置について、該画素位置のイントラ予測値と該画素位置のインター予測値とを重み付けし、該画素位置の結合予測値を得、最終的に各画素位置の結合予測値でCIIP予測ブロックを構成する。
図2Bを参照すると、インター三角分割重み付け予測(Triangular Partition Mode、TPM)の概略図である。
TPM予測ブロックは、インター予測ブロック1(即ちインター予測モード1を用いて画素位置のインター予測値を得る)とインター予測ブロック2(即ちインター予測モード2を用いて画素位置のインター予測値を得る)とを組み合わせて得られる。TPM予測ブロックは、2つの領域に分割されてもよく、一方の領域がインター領域1であってもよく、他方の領域がインター領域2であってもよく、TPM予測ブロックの2つのインター領域は非矩形として分布してもよく、破線境界線の角度は主対角線又は副対角線の両方であってもよい。
インター領域1の各画素位置について、主にインター予測ブロック1のインター予測値に基づいて該画素位置の予測値を決定し、例えば、該画素位置のインター予測ブロック1のインター予測値と該画素位置のインター予測ブロック2のインター予測値とを重み付けするとき、インター予測ブロック1のインター予測値の重み値が比較的大きく、インター予測ブロック2のインター予測値の重み値が比較的小さく(さらには0)、該画素位置の結合予測値を得る。インター領域2の各画素位置について、主にインター予測ブロック2のインター予測値に基づいて該画素位置の予測値を決定し、例えば、該画素位置のインター予測ブロック1のインター予測値と該画素位置のインター予測ブロック2のインター予測値とを重み付けするとき、インター予測ブロック2のインター予測値の重み値が比較的大きく、インター予測ブロック1のインター予測値の重み値が比較的小さく(さらには0)、該画素位置の結合予測値を得る。
図2Cを参照すると、インターイントラ結合三角重み付け予測の概略図である。インターイントラ結合重み付け予測を修正することにより、CIIP予測ブロックのインター領域及びイントラ領域は三角重み付け分割予測の重み分布を呈する。
CIIP予測ブロックは、イントラ予測ブロック(即ちイントラ予測モードを採用して画素位置のイントラ予測値を得る)とインター予測ブロック(即ちインター予測モードを採用して画素位置のインター予測値を得る)とを組み合わせて得られる。CIIP予測ブロックは、2つの領域に分割されてもよく、一方の領域がイントラ領域であってもよく、他方の領域がインター領域であってもよく、CIIP予測ブロックのインターイントラは非矩形状に分布してもよく、破線境界線領域は混合重み付け方式を採用するか又は直接分割が可能であり、かつ該破線境界線の角度は主対角線又は副対角線の両方であってもよく、イントラ領域及びインター領域の位置は可変である。
イントラ領域の各画素位置について、主にイントラ予測値に基づいて該画素位置の予測値を決定し、例えば、該画素位置のイントラ予測値と該画素位置のインター予測値とを重み付けするとき、イントラ予測値の重み値が比較的大きく、インター予測値の重み値が比較的小さく、該画素位置の結合予測値を得る。インター領域の各画素位置について、主にインター予測値に基づいて該画素位置の予測値を決定し、例えば、該画素位置のイントラ予測値と該画素位置のインター予測値とを重み付けするとき、インター予測値の重み値が比較的大きく、イントラ予測値の重み値が比較的小さく、該画素位置の結合予測値を得る。
図2Dを参照すると、インターブロック幾何学的分割モード(Geometrical partitioning for inter blocks、GEO)の概略図であり、GEOモードは、1本の分割線を利用してインター予測ブロックを2つのサブブロックに分割するために用いられ、TPMモードとは異なり、GEOモードはより多くの分割方向を採用することができ、GEOモードの重み付け予測プロセスはTPMモードと類似している。
GEO予測ブロックは、インター予測ブロック1(即ちインター予測モード1を採用して画素位置のインター予測値を得る)とインター予測ブロック2(即ちインター予測モード2を採用して画素位置のインター予測値を得る)とを組み合わせて得られる。GEO予測ブロックは、2つの領域に分割されてもよく、一方の領域がインター領域1であってもよく、他方の領域がインター領域2であってもよい。
インター領域1の各画素位置について、主にインター予測ブロック1のインター予測値に基づいて該画素位置の予測値を決定し、例えば、該画素位置のインター予測ブロック1のインター予測値と該画素位置のインター予測ブロック2のインター予測値とを重み付けするとき、インター予測ブロック1のインター予測値の重み値が比較的大きく、インター予測ブロック2のインター予測値の重み値が比較的小さい。インター領域2の各画素位置について、主にインター予測ブロック2のインター予測値に基づいて該画素位置の予測値を決定し、例えば、該画素位置のインター予測ブロック1のインター予測値と該画素位置のインター予測ブロック2のインター予測値とを重み付けするとき、インター予測ブロック2のインター予測値の重み値が比較的大きく、インター予測ブロック1のインター予測値の重み値が比較的小さい。
例示的には、GEO予測ブロックの重み値の設定は分割線からの画素位置の距離に関わり、図2Eを参照すると、画素位置A、画素位置B及び画素位置Cは分割線の右下側に位置し、画素位置D、画素位置E及び画素位置Fは分割線の左上側に位置する。画素位置A、画素位置B及び画素位置Cにとって、インター領域2の重み値はB≧A≧Cのように順序付けられ、インター領域1の重み値はC≧A≧Bのように順序付けられる。画素位置D、画素位置E及び画素位置Fにとって、インター領域1の重み値はD≧F≧Eのように順序付けられ、インター領域2の重み値はE≧F≧Dのように順序付けられる。上記方式は画素位置と分割線との距離を計算する必要があり、続いて画素位置の重み値を決定する。
上記様々なケースについて、重み付け予測を実現するために、いずれも現在ブロックの各画素位置の重み値を決定する必要があり、それにより、画素位置の重み値に基づいて該画素位置を重み付け予測する。しかし、関連技術では、重み値を設定する有効な方式がなく、合理的な重み値を設定できないため、予測効果が低く、符号化性能が悪いなどの問題がある。
上記発見について、本発明の実施例では重み値の導出方式を提案し、現在ブロックの外部の周辺位置の参照重み値に基づいて、現在ブロックの各画素位置の目標重み値を決定することができ、各画素位置に合理的な目標重み値を設定することができ、予測正確性を向上させ、予測性能を向上させ、符号化性能を向上させ、予測値が元の画素により近い。
以下、いくつかの具体的な実施例を参照して、本発明の実施例における符号化・復号方法を詳細に説明する。
実施例1:図3を参照すると、符号化・復号方法の概略フローチャートであり、該方法は、復号側(ビデオデコーダとも呼ばれてもよい)又は符号化側(ビデオエンコーダとも呼ばれてもよい)に適用されてもよく、該方法は、以下を含んでもよい。
ステップ301において、現在ブロックに対して重み付け予測を開始すると決定した場合、現在ブロックの重み予測角度及び重み設定パラメータを取得し、該重み設定パラメータは重み変換率と重み変換の開始位置とを含む。重み変換の開始位置は、現在ブロックの重み予測角度と、現在ブロックの重み予測位置と、現在ブロックのサイズとのうちの少なくとも1つのパラメータによって決定されてもよい。
例示的には、現在ブロックを予測する必要がある場合、復号側又は符号化側はまず現在ブロックに対して重み付け予測を開始するか否かを決定することができる。現在ブロックに対して重み付け予測を開始する場合、本発明の実施例の符号化・復号方法を採用し、即ちステップ301及び後続のステップを実行する。現在ブロックに対して重み付け予測を開始しない場合、実現方式は本発明の実施例では制限されない。
例示的には、現在ブロックに対して重み付け予測を開始すると決定した場合、現在ブロックの重み予測角度、現在ブロックの重み予測位置、及び現在ブロックの重み変換率を取得することができる。そして、現在ブロックの重み予測角度、現在ブロックの重み予測位置及び現在ブロックのサイズのうちの少なくとも1つに基づいて、現在ブロックの重み変換の開始位置を決定することができる。以上により、現在ブロックの重み予測角度、現在ブロックの重み変換率及び現在ブロックの重み変換の開始位置を得ることができる。
ステップ302において、現在ブロックの重み設定パラメータに基づいて現在ブロックの外部の周辺位置に参照重み値を設定する。
例示的には、現在ブロックの外部の周辺位置の数は、現在ブロックのサイズ及び/又は現在ブロックの重み予測角度に基づいて決定されてもよく、例えば、現在ブロックのサイズ及び/又は現在ブロックの重み予測角度に基づいて現在ブロックの外部の周辺位置の数Mを決定し、かつ現在ブロックの重み設定パラメータに基づいてM個の周辺位置に参照重み値を設定する。
例示的には、現在ブロックの外部の周辺位置の参照重み値は単調増加してもよく、又は、現在ブロックの外部の周辺位置の参照重み値は単調減少してもよい。例えば、現在ブロックの外部の周辺位置の参照重み値の配置は00…0024688…88であってもよく、又は、現在ブロックの外部の周辺位置の参照重み値の配置は88…8864200…00であってもよい。
例示的には、現在ブロックの外部の周辺位置は、整数画素位置、又は、サブ画素位置、又は、整数画素位置及びサブ画素位置を含んでもよい。現在ブロックの外部の周辺位置は、現在ブロックの外部の上側1行の周辺位置、又は、現在ブロックの外部の左側1列の周辺位置、又は、現在ブロックの外部の下側1行の周辺位置、又は、現在ブロックの外部の右側1列の周辺位置を含んでもよいが、これらに限定されない。もちろん、上記は周辺位置の例示に過ぎず、これに対して制限しない。
可能な一実施形態では、現在ブロックの外部の周辺位置の参照重み値は、目標領域の参照重み値、目標領域の第1隣接領域の参照重み値、及び目標領域の第2隣接領域の参照重み値を含む。
例示的には、第1隣接領域の参照重み値はいずれも第1参照重み値であり、第2隣接領域の参照重み値は単調増加する。又は、第1隣接領域の参照重み値はいずれも第1参照重み値であり、第2隣接領域の参照重み値は単調減少する。又は、第1隣接領域の参照重み値はいずれも第2参照重み値であり、第2隣接領域の参照重み値はいずれも第3参照重み値であり、かつ該第2参照重み値は該第3参照重み値とは異なる。又は、第1隣接領域の参照重み値は単調増加し、第2隣接領域の参照重み値は単調増加する。又は、第1隣接領域の参照重み値は単調減少し、第2隣接領域の参照重み値は単調減少する。
例示的には、目標領域は、1つの参照重み値又は少なくとも2つの参照重み値を含み、目標領域が少なくとも2つの参照重み値を含む場合、目標領域の少なくとも2つの参照重み値は単調増加するか又は単調減少する。
ステップ303において、現在ブロックの各画素位置について、現在ブロックの重み予測角度に基づいて現在ブロックの外部の周辺位置から該画素位置が指す周辺マッチング位置を決定し、該周辺マッチング位置に関連付けられた参照重み値に基づいて、該画素位置の目標重み値を決定し、該画素位置の目標重み値に基づいて該画素位置の関連付けられた重み値を決定する。
例示的には、重み予測角度は、現在ブロックの内部の画素位置が指す角度方向を表し、例えば、ある重み予測角度に基づいて、該重み予測角度に対応する角度方向は現在ブロックのある外部周辺位置を指す。これに基づいて、現在ブロックの各画素位置について、該重み予測角度に基づいて該画素位置が指す角度方向を決定し、続いて該角度方向に基づいて現在ブロックの外部の周辺位置から該画素位置が指す周辺マッチング位置を決定する。
現在ブロックの各画素位置について、該画素位置が指す周辺マッチング位置を決定した後、該周辺マッチング位置に関連付けられた参照重み値に基づいて、該画素位置の目標重み値を決定し、例えば、該周辺マッチング位置に関連付けられた参照重み値を該画素位置の目標重み値として決定する。そして、該画素位置の目標重み値に基づいて該画素位置の関連付けられた重み値を決定し、例えば、各画素位置の目標重み値と関連付けられた重み値との和は、いずれも固定のプリセット数値であってもよく、したがって、関連付けられた重み値は、プリセット数値と目標重み値との差であってもよい。プリセット数値が8であり、画素位置の目標重み値が0であると仮定すると、該画素位置の関連付けられた重み値は8であり、画素位置の目標重み値が1であれば、該画素位置の関連付けられた重み値は7であり、このように類推し、目標重み値と関連付けられた重み値との和は8であればよい。
ステップ304において、少なくとも1つの候補動き情報を含む動き情報候補リストを取得し、該動き情報候補リストに基づいて現在ブロックの第1目標動き情報及び第2目標動き情報を取得する。
ステップ305において、現在ブロックの各画素位置について、現在ブロックの第1目標動き情報に基づいて該画素位置の第1予測値を決定し、現在ブロックの第2目標動き情報に基づいて該画素位置の第2予測値を決定し、該第1予測値、該目標重み値、該第2予測値及び該関連付けられた重み値に基づいて、該画素位置の重み付け予測値を決定する。
例示的には、目標重み値が第1目標動き情報に対応する重み値であり、関連付けられた重み値が第2目標動き情報に対応する重み値であると仮定すると、該画素位置の重み付け予測値は、(該画素位置の第1予測値*該画素位置の目標重み値+該画素位置の第2予測値*該画素位置の関連付けられた重み値)/固定のプリセット数値であってもよい。あるいは、目標重み値が第2目標動き情報に対応する重み値であり、関連付けられた重み値が第1目標動き情報に対応する重み値であると仮定すると、該画素位置の重み付け予測値は、(該画素位置の第2予測値*該画素位置の目標重み値+該画素位置の第1予測値*該画素位置の関連付けられた重み値)/固定のプリセット数値であってもよい。
ステップ306において、現在ブロックの全ての画素位置の重み付け予測値に基づいて現在ブロックの重み付け予測値を決定する。
例えば、現在ブロックの全ての画素位置の重み付け予測値で現在ブロックの重み付け予測値を構成する。
以上の技術案から分かるように、本発明の実施例では、重み値を設定する有効な方式を提案することで、現在ブロックの各画素位置に合理的な目標重み値を設定することができ、それによって予測の正確性を向上させ、予測性能を向上させ、符号化性能を向上させ、現在ブロックの予測値を元の画素により近づけることができ、かつ符号化性能の向上をもたらす。
実施例2:本発明の実施例は、別の符号化・復号方法を提案し、符号化側に適用されてもよく、該方法は、以下を含む。
ステップa1において、現在ブロックに対して重み付け予測を開始すると決定した場合、符号化側は現在ブロックの重み予測角度、現在ブロックの重み予測位置、及び現在ブロックの重み変換率を取得する。例示的には、符号化側は現在ブロックに対して重み付け予測を開始するか否かを決定し、そうであれば、ステップa1及び後続のステップを実行し、そうでなければ、処理方式について本発明では制限されない。
可能な一実施形態では、現在ブロックが重み付け予測を開始する条件を満たす場合、現在ブロックに対して重み付け予測を開始すると決定する。現在ブロックが重み付け予測を開始する条件を満たさない場合、現在ブロックに対して重み付け予測を開始しないと決定する。例えば、現在ブロックの特徴情報が特定の条件を満たすか否かを判断する。そうであれば、現在ブロックに対して重み付け予測を開始すると決定し、そうでなければ、現在ブロックに対して重み付け予測を開始しないと決定する。特徴情報は、現在ブロックの位置する現在フレームのフレームタイプ、現在ブロックのサイズ情報、及びスイッチ制御情報のうちの1つ又は任意の組み合わせを含むが、これらに限定されない。スイッチ制御情報は、シーケンスレベル(SPS、SH)スイッチ制御情報、又は、画像レベル(PPS:Picture Parameter Set、PH:Picture Header)スイッチ制御情報、又は、スライスレベル(Slice、Tile、Patch)、又は、最大符号化ユニットレベル(LCU:Largest Coding Unit、CTU:Coding Tree Unit)、又はブロックレベル(CU:Coding Unit、PU:Prediction Unit、TU:Transform Units)スイッチ制御情報を含んでもよいが、これらに限定されない。
例えば、特徴情報が現在ブロックの位置する現在フレームのフレームタイプである場合、現在ブロックの位置する現在フレームのフレームタイプが特定の条件を満たすことは、現在ブロックの位置する現在フレームのフレームタイプがBフレームである場合、フレームタイプが特定の条件を満たすと決定すること、あるいは、現在ブロックの位置する現在フレームのフレームタイプがIフレームである場合、フレームタイプが特定の条件を満たすと決定することを含んでもよいが、これらに限定されない。
例えば、特徴情報が現在ブロックのサイズ情報、例えば現在ブロックの幅及び高さである場合、サイズ情報が特定の条件を満たすことは、幅が第1数値以上であり、高さが第2数値以上である場合、現在ブロックのサイズ情報が特定の条件を満たすと決定すること、あるいは、幅が第3数値以上であり、高さが第4数値以上であり、幅が第5数値以下であり、高さが第6数値以下である場合、現在ブロックのサイズ情報が特定の条件を満たすと決定すること、あるいは、幅と高さとの積が第7数値以上である場合、現在ブロックのサイズ情報が特定の条件を満たすと決定することを含むが、これらに限定されない。上記数値は経験的に設定されてもよく、例えば8、16、32、64、128などであってもいい。例えば、第1数値は8、第2数値は8、第3数値は8、第4数値は8、第5数値は64、第6数値は64、第7数値は64である。以上のように、幅が8以上であり、高さが8以上である場合、現在ブロックのサイズ情報が特定の条件を満たすと決定する。あるいは、幅が8以上であり、高さが8以上であり、幅が64以下であり、高さが64以下である場合、現在ブロックのサイズ情報が特定の条件を満たすと決定する。あるいは、幅と高さとの積が64以上である場合、現在ブロックのサイズ情報が特定の条件を満たすと決定する。
例えば、特徴情報が現在ブロックのサイズ情報、例えば現在ブロックの幅及び高さである場合、現在ブロックのサイズ情報が特定の条件を満たすことは、幅がa以上であり、かつb以下であり、高さがa以上であり、かつb以下であることを含んでもよいが、これに限定されない。aは16以下であってもよく、bは16以上であってもよい。例えば、aは8に等しく、bは64に等しいか又はbは32に等しい。
例えば、特徴情報がスイッチ制御情報である場合、該スイッチ制御情報が特定の条件を満たすことは、現在ブロックが重み付け予測を開始することをスイッチ制御情報が許可する場合、該スイッチ制御情報が特定の条件を満たすと決定することを含んでもよいが、これに限定されない。
例えば、特徴情報が現在ブロックの位置する現在フレームのフレームタイプ、現在ブロックのサイズ情報であれば、フレームタイプが特定の条件を満たし、かつサイズ情報が特定の条件を満たす場合、現在ブロックの特徴情報が特定の条件を満たすと決定することができる。あるいは、特徴情報が現在ブロックの位置する現在フレームのフレームタイプ、スイッチ制御情報であれば、フレームタイプが特定の条件を満たし、かつスイッチ制御情報が特定の条件を満たす場合、現在ブロックの特徴情報が特定の条件を満たすと決定することができる。あるいは、特徴情報が現在ブロックのサイズ情報、スイッチ制御情報であれば、サイズ情報が特定の条件を満たし、かつスイッチ制御情報が特定の条件を満たす場合、現在ブロックの特徴情報が特定の条件を満たすと決定することができる。あるいは、特徴情報が現在ブロックの位置する現在フレームのフレームタイプ、現在ブロックのサイズ情報、及びスイッチ制御情報であれば、フレームタイプが特定の条件を満たし、サイズ情報が特定の条件を満たし、かつスイッチ制御情報が特定の条件を満たす場合、現在ブロックの特徴情報が特定の条件を満たすと決定することができる。
可能な一実施形態では、現在ブロックに対して重み付け予測を開始すると決定した場合、符号化側は現在ブロックの重み予測角度、現在ブロックの重み予測位置、及び現在ブロックの重み変換率を取得することができる。
例示的には、重み予測角度は、現在ブロックの内部の画素位置が指す角度方向を表し、図4Aを参照すると、ある重み予測角度に基づいて、現在ブロックの内部の画素位置(例えば画素位置1、画素位置2及び画素位置3)が指す角度方向を示し、該角度方向は現在ブロックの外部のある周辺位置を指す。図4Bを参照すると、別の重み予測角度に基づいて、現在ブロックの内部の画素位置(例えば画素位置2、画素位置3及び画素位置4)が指す角度方向を示し、該角度方向は現在ブロックの外部のある周辺位置を指す。
例示的には、重み予測位置(距離パラメータとも呼ばれてもよい)は、現在ブロックの外部の周辺位置の参照重み値を設定するために用いられる。例えば、図4A又は図4Bを参照すると、現在ブロックの重み予測角度、現在ブロックのサイズなどのパラメータに基づいて、現在ブロックの外部の周辺位置の範囲(即ち現在ブロックの外部の周辺位置の数)を決定する。
そして、周辺位置の範囲をN等分し、Nの値は、任意に設定されてもよく、例えば4、6、8などであり、8を例に説明し、重み予測位置は現在ブロックの外部のどの周辺位置を現在ブロックの重み変換の開始位置とするかを表すために用いられ、それによって重み変換の開始位置に基づいて現在ブロックの外部の周辺位置の参照重み値を設定する。
図4Cを参照すると、全ての周辺位置を8等分した後、7つの重み予測位置を得ることができる。その上で、重み予測位置が0である場合、周辺位置a0(即ち破線0が指す周辺位置であり、実際の適用では、破線0が存在せず、破線0は理解の容易のための例示であり、破線0~破線6は全ての周辺位置を8等分するために用いられる)を現在ブロックの外部の周辺位置の重み変換の開始位置とすることを表すことができる。このように類推し、重み予測位置が6である場合、周辺位置a6を現在ブロックの外部の周辺位置の重み変換の開始位置とすることを表す。
異なる重み予測角度について、Nの値は異なってもよく、例えば、重み予測角度Aについて、Nの値が6であることは、重み予測角度Aに基づいて決定した周辺位置の範囲を6等分することを表し、重み予測角度Bについて、Nの値が8であることは、重み予測角度Bに基づいて決定した周辺位置の範囲を8等分することを表す。
異なる重み予測角度について、Nの値は同じであってもよく、Nの値が同じである場合、重み予測位置の数は異なってもよく、例えば重み予測角度Aについて、Nの値が8であることは、重み予測角度Aに基づいて決定した周辺位置の範囲を8等分することを表し、重み予測角度Bについて、Nの値が8であることは、重み予測角度Bに基づいて決定した周辺位置の範囲を8等分することを表し、しかし、重み予測角度Aに対応する重み予測位置はa1からa5の計5つの位置を選択し、重み予測角度Bに対応する重み予測位置はa0からa6の計7つの位置を選択する。
上記は周辺位置の範囲をN等分する例であり、実際の適用では、不均一な分割方式を採用することもでき、例えば、N等分ではなく、周辺位置の範囲をN部に分割し、これに対して制限しない。
全ての周辺位置を8等分した後、7つの重み予測位置を得ることができ、ステップa1において、符号化側は7つの重み予測位置から1つの重み予測位置を取得してもよいし、7つの重み予測位置から一部の重み予測位置(例えば5つの重み予測位置)を選択し、5つの重み予測位置から1つの重み予測位置を取得してもよい。
例示的には、重み変換率は現在ブロックの外部の周辺位置の参照重み値の変換率を表し、参照重み値の変化速度を表すために用いられ、重み変換率は0ではない任意の数であってもよく、例えば重み変換率は-4、-2、-1、1、2、4、0.5、0.75、1.5などであってもよい。重み変換率の絶対値が1であり、即ち重み変換率が-1又は1である場合、参照重み値の変化速度が1であることを表し、参照重み値が0から8まで0、1、2、3、4、5、6、7、8などの数値を経過する必要があり、参照重み値が8から0まで8、7、6、5、4、3、2、1、0などの数値を経過する必要がある。重み変換率の絶対値が2であり、即ち重み変換率が-2又は2である場合、参照重み値の変化速度が2であることを表し、参照重み値が0から8まで0、2、4、6、8などの数値を経過する必要があり、参照重み値が8から0まで8、6、4、2、0などの数値を経過する必要がある。重み変換率の絶対値が4であり、即ち重み変換率が-4又は4である場合、参照重み値の変化速度が4であることを表し、参照重み値が0から8まで0、4、8などの数値を経過する必要があり、参照重み値が8から0まで8、4、0などの数値を経過する必要がある。重み変換率の絶対値が0.5であり、即ち重み変換率が-0.5又は0.5である場合、参照重み値の変化速度が0.5であることを表し、参照重み値が0から8まで0、0、1、1、2、2、3、3、4、4、5、5、6、6、7、7、8、8などの数値を経過する必要があり、参照重み値が8から0まで8、8、7、7、6、6、5、5、4、4、3、3、2、2、1、1、0、0などの数値を経過する必要がある。もちろん、上記例は0から8であり、0及び8は任意の数に置き換えることができる。
ステップa2において、符号化側は現在ブロックの重み変換率及び重み変換の開始位置(重み変換率及び重み変換の開始位置は重み設定パラメータと呼ばれてもよい)に基づいて現在ブロックの外部の周辺位置に参照重み値を設定する。
例示的には、重み変換の開始位置は、現在ブロックの重み予測角度、現在ブロックの重み予測位置、現在ブロックのサイズのうちの少なくとも1つによって決定されてもよく、したがって、現在ブロックの重み予測角度、現在ブロックの重み予測位置及び現在ブロックのサイズのうちの少なくとも1つに基づいて、現在ブロックの重み変換の開始位置を決定することができる。そして、現在ブロックの重み変換率及び重み変換の開始位置に基づいて現在ブロックの外部の周辺位置に参照重み値を設定する。
ステップa3において、現在ブロックの各画素位置について、符号化側は現在ブロックの重み予測角度に基づいて現在ブロックの外部の周辺位置から該画素位置が指す周辺マッチング位置を決定する。区別の便宜のために、本実施例では、該画素位置が指す現在ブロックの外部の周辺位置を、該画素位置の周辺マッチング位置と呼んでもよい。
例示的には、重み予測角度が現在ブロックの内部の画素位置が指す角度方向を表すので、現在ブロックの各画素位置について、該重み予測角度に基づいて該画素位置が指す角度方向を決定し、続いて該角度方向に基づいて現在ブロックの外部の周辺位置から該画素位置が指す周辺マッチング位置を決定する。
現在ブロックの外部の周辺位置は、現在ブロックの外部の上側1行の周辺位置を含んでもよく、例えば現在ブロックの外部の上側n1行目の周辺位置であり、n1は1であってもよいし、2、3などであってもよく、これに対して制限しない。あるいは、現在ブロックの外部の周辺位置は、現在ブロックの外部の左側1列の周辺位置を含んでもよく、例えば現在ブロックの外部の左側n2列目の周辺位置であり、n2は1であってもよいし、2、3などであってもよく、これに対して制限しない。あるいは、現在ブロックの外部の周辺位置は、現在ブロックの外部の下側1行の周辺位置を含んでもよく、例えば現在ブロックの外部の下側n3行目の周辺位置であり、n3は1であってもよいし、2、3などであってもよく、これに対して制限しない。あるいは、現在ブロックの外部の周辺位置は、現在ブロックの外部の右側1列の周辺位置を含んでもよく、例えば現在ブロックの外部の右側n4列目の周辺位置であり、n4は1であってもよいし、2、3などであってもよく、これに対して制限しない。
もちろん、上記は周辺位置のいくつかの例示に過ぎず、これに対して制限せず、実際の適用では、現在ブロックの外部の周辺位置を利用することに加えて、現在ブロックの内部位置を利用してもよく、即ち現在ブロックの内部位置を用いて現在ブロックの外部の周辺位置を置き換えてもよく、例えば、現在ブロックの内部n5行目に位置する内部位置であり、n5は1であってもよいし、2、3などであってもよく、また例えば、現在ブロックの内部n6列目に位置する内部位置であり、n6は1であってもよいし、2、3などであってもよい。もちろん、内部位置の長さ(即ち、現在ブロック内の該内部位置に位置する一行)は現在ブロックの範囲を超えてもよく、例えば第n7行の位置は現在ブロックの範囲を超えてもよく、即ち両側に延在する。
もちろん、現在ブロックの内部位置及び現在ブロックの外部の周辺位置を同時に用いることもできる。
現在ブロックの内部位置を用いるか、又は、現在ブロックの内部位置及び現在ブロックの外部の周辺位置を同時に用いる場合について、該現在ブロックを内部位置の位置する行によって上下2つの小ブロックに分割するか、又は、内部位置の位置する列によって左右2つの小ブロックに分割することができ、このとき、2つの小ブロックは、同じ重み予測角度及び同じ重み予測位置を有する。
例示的には、現在ブロックの外部の周辺位置は、画素位置の間、即ちサブ画素位置に位置してもよく、このとき、現在ブロックの外部周辺位置は、単にx行目として記述することができず、x行目とy行目との間に位置するサブ画素位置行として記述する。
説明の便宜上、後続の実施例では、現在ブロックの外部の上側1行目の周辺位置、又は、現在ブロックの外部の左側1列目の周辺位置を例にとり、他の周辺位置の場合について、実現方式はこれと類似している。
例示的には、現在ブロックの外部の周辺位置の範囲について、ある範囲が現在ブロックの外部の周辺位置の範囲であることを予め指定してもよく、あるいは、重み予測角度に基づいて現在ブロックの外部の周辺位置の範囲を決定してもよく、例えば、重み予測角度に基づいて現在ブロックの内部の各画素位置が指す周辺位置を決定し、全ての画素位置が指す周辺位置の境界は、現在ブロックの外部の周辺位置の範囲であってもよく、この周辺位置の範囲に対して制限しない。
現在ブロックの外部の周辺位置は、整数画素位置を含んでもよく、あるいは、現在ブロックの外部の周辺位置は、非整数画素位置を含んでもよく、非整数画素位置は、サブ画素位置であってもよく、例えば1/2サブ画素位置、1/4サブ画素位置、3/4サブ画素位置などであり、これに対して制限せず、あるいは、現在ブロックの外部の周辺位置は、整数画素位置及びサブ画素位置を含んでもよい。
例示的には、現在ブロックの外部の2つの周辺位置は、1つの整数画素位置に対応してもよく、あるいは、現在ブロックの外部の4つの周辺位置は、1つの整数画素位置に対応してもよく、あるいは、現在ブロックの外部の1つの周辺位置は、1つの整数画素位置に対応してもよく、あるいは、現在ブロックの外部の1つの周辺位置は、2つの整数画素位置に対応してもよい。もちろん、上記はいくつかの例示に過ぎず、これに対して制限せず、周辺位置と整数画素位置との関係は任意に設定されてもよい。
図4A及び図4Bを参照すると、1つの周辺位置が1つの整数画素位置に対応し、図4Dを参照すると、2つの周辺位置が1つの整数画素位置に対応し、他の場合について、本実施例では説明を省略する。
ステップa4において、符号化側は周辺マッチング位置に関連付けられた参照重み値に基づいて、該画素位置の目標重み値を決定する。
現在ブロックの各画素位置について、該画素位置が指す周辺マッチング位置を決定した後、符号化側は該周辺マッチング位置に関連付けられた参照重み値を決定し、かつ該周辺マッチング位置に関連付けられた参照重み値に基づいて、該画素位置の目標重み値を決定し、例えば、該周辺マッチング位置に関連付けられた参照重み値を該画素位置の目標重み値として決定する。
可能な一実施形態では、符号化側が周辺マッチング位置に関連付けられた参照重み値に基づいて、該画素位置の目標重み値を決定することは、ケース1~ケース5を含んでもよく、ケース1において、該周辺マッチング位置が整数画素位置であり、かつ該整数画素位置に参照重み値が既に設定されている場合、該整数画素位置の参照重み値に基づいて該画素位置の目標重み値を決定する。
ケース2において、該周辺マッチング位置が整数画素位置であり、かつ該整数画素位置に参照重み値が設定されていない場合、該整数画素位置の隣接位置の参照重み値に基づいて該画素位置の目標重み値を決定することができる。例えば、隣接位置の参照重み値に切り上げ操作を行い、該画素位置の目標重み値を得るか、あるいは、隣接位置の参照重み値に切り下げ操作を行い、該画素位置の目標重み値を得るか、あるいは、該整数画素位置の隣接位置の参照重み値の補間に基づいて該画素位置の目標重み値を決定することができ、これに対して制限しない。
ケース3において、該周辺マッチング位置がサブ画素位置であり、かつ該サブ画素位置に参照重み値が既に設定されている場合、該サブ画素位置の参照重み値に基づいて該画素位置の目標重み値を決定することができる。
ケース4において、該周辺マッチング位置がサブ画素位置であり、かつ該サブ画素位置に参照重み値が設定されていない場合、該サブ画素位置の隣接位置の参照重み値に基づいて該画素位置の目標重み値を決定することができる。例えば、隣接位置の参照重み値に切り上げ操作を行い、該画素位置の目標重み値を得るか、あるいは、隣接位置の参照重み値に切り下げ操作を行い、該画素位置の目標重み値を得るか、あるいは、該サブ画素位置の隣接位置の参照重み値の補間に基づいて該画素位置の目標重み値を決定することができ、これに対して制限しない。
ケース5において、周辺マッチング位置に関連付けられた複数の参照重み値に基づいて該画素位置の目標重み値を決定し、例えば、周辺マッチング位置が整数画素位置又はサブ画素位置である場合、周辺マッチング位置の複数の隣接位置の参照重み値を取得する。周辺マッチング位置に参照重み値が既に設定されている場合、周辺マッチング位置の参照重み値及び複数の隣接位置の参照重み値に基づいて重み付け演算を行い、該画素位置の目標重み値を得、周辺マッチング位置に参照重み値が設定されていない場合、複数の隣接位置の参照重み値に基づいて重み付け演算を行い、該画素位置の目標重み値を得る。
ステップa5において、符号化側は該画素位置の目標重み値に基づいて該画素位置の関連付けられた重み値を決定する。
例示的には、各画素位置について、該画素位置の目標重み値と該画素位置の関連付けられた重み値との和は、固定のプリセット数値であってもよく、即ち関連付けられた重み値は、プリセット数値と目標重み値との差であってもよい。これに基づいて、プリセット数値が8であり、該画素位置の目標重み値が2であると仮定すると、該画素位置の関連付けられた重み値は6である。
ステップa6において、符号化側は少なくとも1つの候補動き情報を含む動き情報候補リストを取得し、該動き情報候補リストに基づいて現在ブロックの第1目標動き情報及び第2目標動き情報を取得する。
ステップa7において、現在ブロックの各画素位置について、符号化側は現在ブロックの第1目標動き情報に基づいて該画素位置の第1予測値を決定し、かつ現在ブロックの第2目標動き情報に基づいて該画素位置の第2予測値を決定する。
ステップa8において、符号化側は該画素位置の第1予測値、該画素位置の目標重み値、該画素位置の第2予測値及び該画素位置の関連付けられた重み値に基づいて、該画素位置の重み付け予測値を決定する。
例えば、該画素位置の重み付け予測値は、(該画素位置の第1予測値*該画素位置の目標重み値+該画素位置の第2予測値*該画素位置の関連付けられた重み値)/固定のプリセット数値であってもよい。
ステップa9において、符号化側は現在ブロックの全ての画素位置の重み付け予測値に基づいて現在ブロックの重み付け予測値を決定する。
実施例3:本発明の実施例は、別の符号化・復号方法を提案し、復号側に適用されてもよく、該方法は、以下を含む。
ステップb1において、現在ブロックに対して重み付け予測を開始すると決定した場合、復号側は現在ブロックの重み予測角度、現在ブロックの重み予測位置、及び現在ブロックの重み変換率を取得する。例示的には、復号側は現在ブロックに対して重み付け予測を開始するか否かを決定し、そうであれば、ステップb1及び後続のステップを実行し、そうでなければ、処理方式は本発明では制限されない。
可能な一実施形態では、符号化側は現在ブロックの特徴情報が特定の条件を満たすか否かを判断し、そうであれば、現在ブロックに対して重み付け予測を開始すると決定する。復号側も現在ブロックの特徴情報が特定の条件を満たすか否かを判断し、そうであれば、現在ブロックに対して重み付け予測を開始すると決定し、そうでなければ、現在ブロックに対して重み付け予測を開始しないと決定する。復号側が特徴情報に基づいて現在ブロックが重み付け予測を開始するか否かをどのように決定するかについて、符号化側の決定方式と類似しており、ここでは繰り返して説明しない。
別の可能な実施形態では、符号化側は現在ブロックの特徴情報に基づいて現在ブロックが重み付け予測をサポートするか否かを決定し、現在ブロックが重み付け予測をサポートする場合、他のポリシーを採用して現在ブロックに対して重み付け予測を開始するか否かを決定することもでき、例えばレート歪み最適化を採用して現在ブロックに対して重み付け予測を開始するか否かを決定する。現在ブロックに対して重み付け予測を開始するか否かを決定した後、符号化側が現在ブロックの符号化ビットストリームを送信するとき、該符号化ビットストリームは重み付け予測を開始するか否かのシンタックスを含んでもよく、該シンタックスは現在ブロックが重み付け予測を開始するか否かを表す。復号側は現在ブロックの特徴情報に基づいて現在ブロックが重み付け予測をサポートするか否かを決定し、具体的な方式は符号化側の決定方式と類似しており、ここではその説明を省略する。現在ブロックが重み付け予測をサポートする場合、復号側は符号化ビットストリームから重み付け予測を開始するか否かのシンタックスを解析し、かつ該シンタックスに基づいて現在ブロックに対して重み付け予測を開始するか否かを決定することもできる。
例示的には、現在ブロックに対して重み付け予測を開始すると決定した場合、復号側は現在ブロックの重み予測角度、現在ブロックの重み予測位置、及び現在ブロックの重み変換率を取得することもでき、該重み予測角度、該重み予測位置及び該重み変換率に関する説明は、ステップa1を参照することができ、ここでは繰り返して説明しない。
ステップb2において、復号側は現在ブロックの重み変換率及び重み変換の開始位置(重み変換率及び重み変換の開始位置は重み設定パラメータと呼ばれてもよい)に基づいて現在ブロックの外部の周辺位置に参照重み値を設定する。
例示的には、復号側は現在ブロックの重み予測角度、現在ブロックの重み予測位置及び現在ブロックのサイズのうちの少なくとも1つに基づいて、現在ブロックの重み変換の開始位置を決定することができる。そして、復号側は現在ブロックの重み変換率及び重み変換の開始位置に基づいて現在ブロックの外部の周辺位置に参照重み値を設定する。
ステップb3において、現在ブロックの各画素位置について、復号側は現在ブロックの重み予測角度に基づいて現在ブロックの外部の周辺位置から該画素位置が指す周辺マッチング位置を決定する。
ステップb4において、復号側は該周辺マッチング位置に関連付けられた参照重み値に基づいて、該画素位置の目標重み値を決定する。
ステップb5において、復号側は該画素位置の目標重み値に基づいて該画素位置の関連付けられた重み値を決定する。
ステップb6において、復号側は少なくとも1つの候補動き情報を含む動き情報候補リストを取得し、該動き情報候補リストに基づいて現在ブロックの第1目標動き情報及び第2目標動き情報を取得する。
ステップb7において、現在ブロックの各画素位置について、復号側は現在ブロックの第1目標動き情報に基づいて該画素位置の第1予測値を決定し、かつ現在ブロックの第2目標動き情報に基づいて該画素位置の第2予測値を決定する。
ステップb8において、復号側は該画素位置の第1予測値、該画素位置の目標重み値、該画素位置の第2予測値及び該画素位置の関連付けられた重み値に基づいて、該画素位置の重み付け予測値を決定する。
ステップb9において、復号側は現在ブロックの全ての画素位置の重み付け予測値に基づいて現在ブロックの重み付け予測値を決定する。
例示的には、ステップb2~ステップb8について、その実現プロセスは、ステップa2~ステップa8を参照することができ、異なる点は、ステップb2~ステップb8が符号化側の処理フローではなく、復号側の処理フローである点であり、ここではその説明を省略する。
実施例4:図5を参照すると、符号化・復号方法の概略フローチャートであり、該方法は、復号側(ビデオデコーダとも呼ばれてもよい)又は符号化側(ビデオエンコーダとも呼ばれてもよい)に適用されてもよく、該方法は、以下を含んでもよい。
ステップ501において、現在ブロックに対して重み付け予測を開始すると決定した場合、現在ブロックの重み予測角度及び重み設定パラメータを取得し、該重み設定パラメータは重み変換率と重み変換の開始位置とを含む。重み変換の開始位置は、現在ブロックの重み予測角度と、現在ブロックの重み予測位置と、現在ブロックのサイズとのうちの少なくとも1つのパラメータによって決定されてもよい。
ステップ502において、現在ブロックの重み設定パラメータに基づいて現在ブロックの外部の周辺位置に参照重み値を設定する。
ステップ503において、現在ブロックの各画素位置について、現在ブロックの重み予測角度に基づいて現在ブロックの外部の周辺位置から該画素位置が指す周辺マッチング位置を決定し、該周辺マッチング位置に関連付けられた参照重み値に基づいて、該画素位置の目標重み値を決定し、該画素位置の目標重み値に基づいて該画素位置の関連付けられた重み値を決定する。
例示的には、ステップ501~ステップ503は、ステップ301~ステップ303を参照することができ、ここでは繰り返して説明しない。
ステップ504において、参照フレーム情報を取得し、かつ該参照フレーム情報に対応する動きベクトル候補リストを取得し、該動きベクトル候補リストは少なくとも1つの候補動きベクトルを含み、該参照フレーム情報は第1参照フレーム情報と第2参照フレーム情報とを含み、該動きベクトル候補リストに基づいて現在ブロックの第1目標動きベクトル及び第2目標動きベクトルを取得する。
ステップ505において、現在ブロックの各画素位置について、現在ブロックの第1目標動き情報に基づいて該画素位置の第1予測値を決定し、現在ブロックの第2目標動き情報に基づいて該画素位置の第2予測値を決定し、該第1予測値、該目標重み値、該第2予測値及び該関連付けられた重み値に基づいて、該画素位置の重み付け予測値を決定する。
可能な一実施形態では、現在ブロックの該第1目標動き情報は、現在ブロックの該第1目標動きベクトルと該第1目標動きベクトルに対応する第1参照フレーム情報とを含んでもよく、現在ブロックの該第2目標動き情報は、現在ブロックの該第2目標動きベクトルと該第2目標動きベクトルに対応する第2参照フレーム情報とを含んでもよい。
例示的には、第1参照フレーム情報と第2参照フレーム情報とは同じであってもよく、あるいは、第1参照フレーム情報と第2参照フレーム情報とは異なってもよい。第1参照フレーム情報と第2参照フレーム情報とが同じである場合、第1目標動きベクトルが指す参照フレームと第2目標動きベクトルが指す参照フレームとは同一フレームであり、第1参照フレーム情報と第2参照フレーム情報とが異なる場合、第1目標動きベクトルが指す参照フレームと第2目標動きベクトルが指す参照フレームとは異なるフレームである。
ステップ506において、現在ブロックの全ての画素位置の重み付け予測値に基づいて現在ブロックの重み付け予測値を決定する。
例示的には、符号化・復号方法が符号化側に適用される場合、ステップ501~ステップ506の詳細なフローについて、実施例2によって実現することもでき、異なる点は、ステップa6において、符号化側が取得したのは動きベクトル候補リストであり、かつ該動きベクトル候補リストに基づいて現在ブロックの第1目標動きベクトル及び第2目標動きベクトルを取得し、第1目標動きベクトル及び第1目標動きベクトルに対応する第1参照フレーム情報に基づいて第1目標動き情報を得、第2目標動きベクトル及び第2目標動きベクトルに対応する第2参照フレーム情報に基づいて第2目標動き情報を得る点であり、ここではその説明を省略する。
例示的には、符号化・復号方法が復号側に適用される場合、ステップ501~ステップ506の詳細なフローについて、実施例3によって実現することもでき、異なる点は、ステップb6において、復号側が取得したのは動きベクトル候補リストであり、かつ該動きベクトル候補リストに基づいて現在ブロックの第1目標動きベクトル及び第2目標動きベクトルを取得し、第1目標動きベクトル及び第1目標動きベクトルに対応する第1参照フレーム情報に基づいて第1目標動き情報を得、第2目標動きベクトル及び第2目標動きベクトルに対応する第2参照フレーム情報に基づいて第2目標動き情報を得る点であり、ここではその説明を省略する。
以上の技術案から分かるように、本発明の実施例では、重み値を設定する有効な方式を提案することで、現在ブロックの各画素位置に合理的な目標重み値を設定することができ、それによって予測の正確性を向上させ、予測性能を向上させ、符号化性能を向上させ、現在ブロックの予測値を元の画素により近づけることができ、かつ符号化性能の向上をもたらす。
実施例5:実施例1~実施例4では、重み予測角度に基づいて重み付け処理を行う必要があり、このような重み付け処理方式をインター角度重み付け予測(Angular Weighted Prediction、AWP)モードと記してもよく、即ち、現在ブロックがAWPモードをサポートする場合、実施例1~実施例4を採用して現在ブロックを予測し、現在ブロックの予測値を得る。
実施例1~実施例4は、重み予測角度に関し、該重み予測角度は、任意の角度であってもよく、例えば180度内の任意の角度、又は、360度内の任意の角度であり、この重み予測角度を制限せず、例えば10度、20度、30度などであってもいい。
可能な一実施形態では、該重み予測角度は水平角度であってもよく、又は、該重み予測角度は垂直角度であってもよく、又は、該重み予測角度の傾きの絶対値(重み予測角度の傾きの絶対値はつまり重み予測角度のtan値である)は、2のn乗であってもよく、nは整数、例えば正の整数、0、負の整数などである。
例えば、該重み予測角度の傾きの絶対値は、1(即ち2の0乗)、又は2(即ち2の1乗)、又は1/2(即ち2の-1乗)、又は4(即ち2の2乗)、又は1/4(即ち2の-2乗)、又は8(即ち2の3乗)、又は1/8(即ち2の-3乗)などであってもよい。例示的には、図6を参照すると、8種類の重み予測角度を示し、これらの重み予測角度の傾きの絶対値は2のn乗である。
本発明の実施例では、重み予測角度にシフト操作を行ってもよく、重み予測角度にシフト操作を行う例について後続の実施例を参照し、したがって、重み予測角度の傾きの絶対値が2のn乗である場合、重み予測角度にシフト操作を行うとき、除算操作が発生することを回避することができ、それによってシフト実現を便利にする。
例示的には、異なるブロックサイズ(即ち現在ブロックのサイズ)によってサポートされる重み予測角度の数は、同じであっても異なっていてもよい。例えば、ブロックサイズAは8種類の重み予測角度をサポートし、ブロックサイズB及びブロックサイズCは6種類の重み予測角度をサポートするなどである。
実施例6:上記実施例1~実施例4では、符号化側/復号側は現在ブロックの重み変換率及び現在ブロックの重み変換の開始位置に基づいて現在ブロックの外部の周辺位置に参照重み値を設定する必要がある。可能な一実施形態では、現在ブロックの外部の各周辺位置について、該周辺位置の座標値、該重み変換の開始位置の座標値、及び該重み変換率に基づいて、該周辺位置の参照重み値を設定する、という方式を採用することができる。
例示的には、現在ブロックの外部の各周辺位置について、該周辺位置が現在ブロックの外部の上側1行又は下側1行の周辺位置である場合、該周辺位置の座標値は横座標値であってもよく、重み変換の開始位置の座標値は横座標値であってもよい。又は、該周辺位置が現在ブロックの外部の左側1列又は右側1列の周辺位置である場合、該周辺位置の座標値は縦座標値であってもよく、重み変換の開始位置の座標値は縦座標値であってもよい。
例示的には、現在ブロックの左上隅の画素位置(例えば左上隅の最初の画素位置)を座標原点としてもよく、現在ブロックの周辺位置の座標値(例えば横座標値又は縦座標値)及び重み変換の開始位置の座標値(例えば横座標値又は縦座標値)は、いずれも該座標原点に対する座標値である。もちろん、現在ブロックの他の画素位置を座標原点としてもよく、実現方式は左上隅の画素位置を座標原点とする実現方式と類似している。
可能な一実施形態では、まず該周辺位置の座標値と重み変換の開始位置の座標値との差値を決定し、かつ該差値と現在ブロックの重み変換率との積を決定する。該積が第1数値(即ち参照重み値の最小値、例えば0など)よりも小さい場合、該周辺位置に関連付けられた参照重み値が第1数値であると決定し、該積が第2数値(即ち参照重み値の最大値、例えば8など)よりも大きい場合、該周辺位置に関連付けられた参照重み値が第2数値であると決定し、該積が第1数値以上であり、かつ該積が第2数値以下である場合、該周辺位置に関連付けられた参照重み値が該積であると決定する。別の可能な実施形態では、該周辺位置の座標値と重み変換の開始位置の座標値との大小関係に基づいて、該周辺位置に関連付けられた参照重み値を直接決定することもできる。例えば、該周辺位置の座標値が重み変換の開始位置の座標値よりも小さい場合、該周辺位置に関連付けられた参照重み値が第1数値であると決定し、該周辺位置の座標値が重み変換の開始位置の座標値以上である場合、該周辺位置に関連付けられた参照重み値が第2数値であると決定する。また例えば、該周辺位置の座標値が重み変換の開始位置の座標値よりも小さい場合、該周辺位置に関連付けられた参照重み値が第2数値であると決定し、該周辺位置の座標値が重み変換の開始位置の座標値以上である場合、該周辺位置に関連付けられた参照重み値が第1数値であると決定する。
例示的には、第1数値及び第2数値はいずれも経験的に設定されてもよく、かつ第1数値は第2数値よりも小さく、この第1数値及び第2数値の両方に対して制限しない。例えば、第1数値は予め約束された参照重み値の最小値、例えば0であり、第2数値は予め約束された参照重み値の最大値、例えば8であり、もちろん、0及び8も例示に過ぎない。
例示的には、図4Cを参照すると、全ての周辺位置を8等分した後、7つの重み予測位置を得ることができ、重み予測位置が0である場合、周辺位置a0を表し、重み変換の開始位置の座標値が周辺位置a0の座標値である。重み予測位置が1である場合、周辺位置a1を表し、重み変換の開始位置の座標値が周辺位置a1の座標値であり、このように類推し、重み変換の開始位置の座標値の決定方式について、ここではその説明を省略する。
実施例7:実施例1~実施例4では、符号化側/復号側は現在ブロックの重み変換率及び現在ブロックの重み変換の開始位置に基づいて現在ブロックの外部の周辺位置に参照重み値を設定する必要がある。可能な一実施形態では、現在ブロックの重み予測角度、現在ブロックの重み変換率及び現在ブロックの重み予測位置を取得し、現在ブロックの重み予測位置に基づいて現在ブロックの重み変換の開始位置を決定し、該重み変換の開始位置及び該重み変換率に基づいて重み設定パラメータを決定し、即ち該重み設定パラメータは重み変換の開始位置及び重み変換率を含み、そして、該重み設定パラメータに基づいて現在ブロックの外部の周辺位置の参照重み値を決定する、という方式を採用することができる。
以下、具体的なステップを参照して、現在ブロックの外部の周辺位置に参照重み値を設定するプロセスについて説明する。
ステップc1において、有効数の参照重み値を取得する。
例示的には、現在ブロックの外部の周辺位置の数は有効数であり、ステップc1において、有効数の参照重み値を取得する必要があり、該有効数は現在ブロックのサイズ及び/又は現在ブロックの重み予測角度に基づいて決定されてもよい。例えば、ValidLength=(N+(M>>X))<<1という方式を採用して該有効数を決定し、N及びMはそれぞれ現在ブロックの高さ及び幅であり、Xは現在ブロックの重み予測角度の傾きの絶対値のlog2対数値であり、例えば0又は1である。
可能な一実施形態では、有効数の参照重み値について、単調増加するか、又は、単調減少してもよい。又は、有効数の参照重み値について、複数の第1数値を最初に含み、複数の第2数値を後に含むか、又は、複数の第2数値を最初に含み、複数の第1数値を後に含んでもよい。以下、いくつかの具体的なケースを参照して、これについて説明する。
ケース1:有効数の参照重み値について、単調増加するか、又は、単調減少してもよい。例えば、有効数の参照重み値は[88...88765432100...00]であってもよく、即ち単調減少する。また例えば、有効数の参照重み値は[00...00123456788...88]であってもよく、即ち単調増加する。もちろん、上記は例示に過ぎず、これに対して制限しない。
例示的には、参照重み値は重み設定パラメータに基づいて設定されてもよく、該重み設定パラメータは重み変換率及び重み変換の開始位置を含んでもよく、重み変換率の取得方式は後続の実施例を参照することができ、重み変換の開始位置は経験的に設定された数値であってもよく、重み予測位置から重み変換の開始位置を決定してもよいし、重み予測角度及び重み予測位置から重み変換の開始位置を決定してもよく、これに対して制限しない。
有効数の参照重み値について、最初から最後までの順に、単調増加するか又は単調減少してもよい。例えば、参照重み値の最大値はM1であり、参照重み値の最小値はM2であり、有効数の参照重み値について、最大値M1から最小値M2まで単調減少し、又は、最小値M2から最大値M1まで単調増加する。M1が8であり、M2が0であると仮定すると、複数の参照重み値は、8から0まで単調減少するか、又は0から8まで単調増加してもよい。
例示的には、まず重み変換率及び重み変換の開始位置を取得し、そして、重み変換率及び重み変換の開始位置に基づいて、複数の参照重み値を決定してもよい。例えば、y=Clip3(最小値、最大値、a*(x-s))という方式を採用して参照重み値を決定し、xは周辺位置のインデックスを表し、即ちxの値範囲は1~有効数値であり、例えばxは1であり、1番目の周辺位置を表し、yは1番目の周辺位置の参照重み値を表し、xは2であり、2番目の周辺位置を表し、yは2番目の周辺位置の参照重み値を表す。aは重み変換率を表し、sは重み変換の開始位置を表す。
Clip3は参照重み値が最小値と最大値との間にあることを制限するために用いられ、最小値及び最大値はいずれも経験的に設定されてもよく、説明の便宜上、後続のプロセスでは、最小値が0であり、最大値が8であることを例に説明する。
aは重み変換率を表し、aは0ではない整数であってもよく、例えばaは-4、-2、-1、1、2、4などであってもよく、このaの値に対して制限しない。aの絶対値が1である場合、参照重み値は0から8まで0、1、2、3、4、5、6、7、8を経過する必要があるか、又は、参照重み値は8から0まで8、7、6、5、4、3、2、1、0を経過する必要がある。
sは重み変換の開始位置を表し、sは重み予測位置によって決定されてもよく、例えば、s=f(重み予測位置)であり、即ちsは重み予測位置に関する関数である。例えば、現在ブロックの外部の周辺位置の範囲が決定された後、周辺位置の有効数を決定し、かつ全ての周辺位置をN等分することができ、Nの値は任意に設定されてもよく、例えば4、6、8などであり、重み予測位置は現在ブロックの外部のどの周辺位置を現在ブロックの目標周辺位置として採用するかを表すために用いられ、この重み予測位置に対応する周辺位置は重み変換の開始位置である。又は、sは重み予測角度及び重み予測位置によって決定されてもよく、例えば、s=f(重み予測角度、重み予測位置)であり、即ちsは重み予測角度及び重み予測位置に関する関数である。例えば、重み予測角度に基づいて現在ブロックの外部の周辺位置の範囲を決定することができ、現在ブロックの外部の周辺位置の範囲が決定された後、周辺位置の有効数を決定し、かつ全ての周辺位置をN等分することができ、重み予測位置は現在ブロックの外部のどの周辺位置を現在ブロックの目標周辺位置として採用するかを表すために用いられ、この重み予測位置に対応する周辺位置は重み変換の開始位置である。
以上のように、y=Clip3(最小値、最大値、a*(x-s))では、重み変換率a及び重み変換の開始位置sはいずれも既知値であり、現在ブロックの外部の各周辺位置について、該関数関係によって該周辺位置の参照重み値を決定することができる。例えば、重み変換率aが2であり、重み変換の開始位置sが2であると仮定すると、該関数関係はy=2*(x-2)であってもよく、現在ブロックの外部の各周辺位置xについて、参照重み値yを得ることができる。
以上のように、現在ブロックの有効数の参照重み値を得ることができ、これらの参照重み値は単調増加するか又は単調減少する。可能な一実施形態では、現在ブロックの外部の周辺位置の参照重み値は、目標領域の参照重み値、目標領域の第1隣接領域の参照重み値、及び目標領域の第2隣接領域の参照重み値を含む。
例示的には、目標領域は1つの参照重み値又は少なくとも2つの参照重み値を含む。例えば、重み変換の開始位置に基づいて、1つの参照重み値を決定し、この参照重み値を目標領域の参照重み値とする。また例えば、重み変換の開始位置に基づいて、少なくとも2つの参照重み値を決定し、この少なくとも2つの参照重み値を目標領域の参照重み値とする。
目標領域が少なくとも2つの参照重み値を含む場合、目標領域の少なくとも2つの参照重み値は単調増加するか又は単調減少する。単調増加は、厳密な単調増加(即ち目標領域の少なくとも2つの参照重み値の厳密な単調増加)であってもよく、単調減少は、厳密な単調減少(即ち目標領域の少なくとも2つの参照重み値の厳密な単調減少)であってもよい。例えば、目標領域の参照重み値は1~7まで単調増加し、又は、目標領域の参照重み値は7~1まで単調減少する。
例示的には、第1隣接領域の参照重み値はいずれも第1参照重み値であってもよく、第2隣接領域の参照重み値は単調増加してもよい。例えば、第1隣接領域の参照重み値はいずれも0であってもよく、目標領域は1つの参照重み値を含み、該参照重み値は1であり、第2隣接領域の参照重み値は2~8まで単調増加する。
又は、第1隣接領域の参照重み値はいずれも第1参照重み値であってもよく、第2隣接領域の参照重み値は単調減少してもよい。例えば、第1隣接領域の参照重み値はいずれも8であってもよく、目標領域は1つの参照重み値を含み、該参照重み値は7であり、第2隣接領域の参照重み値は6~0まで単調減少する。
又は、第1隣接領域の参照重み値はいずれも第2参照重み値であり、第2隣接領域の参照重み値はいずれも第3参照重み値であり、第2参照重み値は第3参照重み値とは異なる。例えば、第1隣接領域の参照重み値はいずれも0であり、目標領域は少なくとも2つの参照重み値を含み、参照重み値は1~7まで単調増加し、第2隣接領域の参照重み値はいずれも8であり、明らかに、第1隣接領域の参照重み値は第2隣接領域の参照重み値とは異なる。
又は、第1隣接領域の参照重み値は単調増加するか又は単調減少し、第2隣接領域の参照重み値は単調増加するか又は単調減少し、例えば、第1隣接領域の参照重み値は単調増加し、第2隣接領域の参照重み値も単調増加し、また例えば、第1隣接領域の参照重み値は単調減少し、第2隣接領域の参照重み値も単調減少する。例えば、第1隣接領域の参照重み値は0~3まで単調増加し、目標領域は1つの参照重み値を含み、該参照重み値は4であり、第2隣接領域の参照重み値は5~8まで単調増加する。
ケース2:有効数の参照重み値について、先に複数の第1数値を含み、後に複数の第2数値を含んでもよく、又は、先に複数の第2数値を含み、後に複数の第1数値を含んでもよい。例えば、有効数の参照重み値は、[88...8800...00]又は[00...0088...88]であってもよい。例示的には、重み変換の開始位置に基づいて複数の参照重み値を決定することができる。例えば、重み変換の開始位置はs番目の参照重み値を表し、したがって、s番目の参照重み値の前(s番目の参照重み値を含まない)の全ての参照重み値は第1数値(例えば8)であり、s番目の参照重み値の後(s番目の参照重み値を含む)の全ての参照重み値は第2数値(例えば0)である。又は、s番目の参照重み値の前の全ての参照重み値は第2数値であり、s番目の参照重み値の後の全ての参照重み値は第1数値である。
ステップc2において、有効数の参照重み値に基づいて、現在ブロックの外部の周辺位置の参照重み値を設定する。
例示的には、現在ブロックの外部の周辺位置の数が有効数であり、かつ参照重み値の数が有効数であるため、有効数の参照重み値を、現在ブロックの外部の周辺位置の参照重み値として設定することができる。
例えば、1番目の参照重み値を現在ブロックの外部の1番目の周辺位置の参照重み値として設定し、2番目の参照重み値を現在ブロックの外部の2番目の周辺位置の参照重み値として設定することができ、このように類推する。
以上のように、現在ブロックの外部の周辺位置に参照重み値を既に設定し、即ち各周辺位置がいずれも参照重み値を有するため、現在ブロックの外部の周辺位置から画素位置が指す周辺マッチング位置を決定した後、該周辺マッチング位置に関連付けられた参照重み値、つまり該画素位置の目標重み値を決定することができる。
以下、いくつかの具体的な適用シーンを参照して、上記プロセスの実施方式について説明する。例示的には、後続のいくつかの適用シーンでは、現在ブロックのサイズがM*Nであると仮定し、Mが現在ブロックの幅であり、Nが現在ブロックの高さである。Xは重み予測角度のtan値のlog2対数値であり、例えば0又は1である。Yは重み予測位置のインデックス値であり、a、b、c、dは予め設定された定数値である。ValidLengthは有効数を表し、FirstPosは重み変換の開始位置を表し、ReferenceWeights[i]はi番目の周辺位置の参照重み値を表し、Clip3は参照重み値が最小値0と最大値8との間にあることを制限するために用いられ、iは現在ブロックの外部の周辺位置のインデックスを表し、aは重み変換率の絶対値を表す。
適用シーン1:現在ブロックのサイズ及び現在ブロックの重み予測角度に基づいて有効数(参照重み有効長さ、即ちValidLengthとも呼ばれてもよい)を決定し、かつ重み変換の開始位置(即ちFirstPos)を取得する。例えば、ValidLength=(N+(M>>X))<<1の式によりValidLengthを決定し、FirstPos=(ValidLength>>1)-a+Y*((ValidLength-1)>>3)の式によりFirstPosを決定することができる。その上で、ReferenceWeights[i]=Clip3(0,8,a*(i-FirstPos))の式により現在ブロックの各周辺位置の参照重み値を導出する。iの値範囲は0~ValidLength-1、又は1~ValidLengthであってもよい。現在ブロックの周辺位置の参照重み値ReferenceWeights[i]を得た後、SampleWeight[x][y]=ReferenceWeights[(y<<1)+((x<<1)>>X)]の式により現在ブロックの画素位置(x,y)の目標重み値を導出し、<<は左シフトを表し、>>は右シフトを表す。
適用シーン2:ValidLength=(N+(M>>X))<<1の式によりValidLengthを決定し、FirstPos=(ValidLength>>1)-b+Y*((ValidLength-1)>>3)-((M<<1)>>X)の式によりFirstPosを決定することができる。その上で、ReferenceWeights[i]=Clip3(0,8,a*(i-FirstPos))の式により現在ブロックの各周辺位置の参照重み値を導出する。SampleWeight[x][y]=ReferenceWeights[(y<<1)-((x<<1)>>X)]の式により現在ブロックの各画素位置(x,y)の目標重み値を導出することができる。
適用シーン3:ValidLength=(M+(N>>X))<<1の式によりValidLengthを決定し、FirstPos=(ValidLength>>1)-c+Y*((ValidLength-1)>>3)-((N<<1)>>X)の式によりFirstPosを決定することができる。その上で、ReferenceWeights[i]=Clip3(0,8,a*(i-FirstPos))の式により現在ブロックの各周辺位置の参照重み値を導出することができる。SampleWeight[x][y]=ReferenceWeights[(x<<1)-((y<<1)>>X)]の式により現在ブロックの各画素位置(x,y)の目標重み値を導出することができる。
適用シーン4:ValidLength=(M+(N>>X))<<1の式によりValidLengthを決定し、FirstPos=(ValidLength>>1)-d+Y*((ValidLength-1)>>3)の式によりFirstPosを決定することができ、その上で、ReferenceWeights[i]=Clip3(0,8,a*(i-FirstPos))の式により現在ブロックの各周辺位置の参照重み値を導出することができる。SampleWeight[x][y]=ReferenceWeights[(x<<1)+((y<<1)>>X)]の式により現在ブロックの各画素位置(x,y)の目標重み値を導出することができる。
適用シーン5:図7を参照すると、4種類の重み変換率の参照重み値の概略図を示す。
重み変換率の絶対値が1である場合、即ち重み変換率が1であるか又は重み変換率が-1である場合、ReferenceWeights[i]=Clip3(0,8,1*(i-FirstPos))の式により現在ブロックの各周辺位置の参照重み値を導出することができ、上記式はReferenceWeight[i]=Clip3(0,8,i-FirstPos)と等価であってもよい。該ケースでは、図7に示す第1ケースを参照すると、FirstPosは4であってもよく、即ち1番目から4番目の周辺位置の参照重み値は0であり、5番目の周辺位置の参照重み値は1であり、6番目の周辺位置の参照重み値は2であり、このように類推する。
重み変換率の絶対値が2である場合、即ち重み変換率が2であるか又は重み変換率が-2である場合、ReferenceWeights[i]=Clip3(0,8,2*(i-FirstPos))の式により現在ブロックの各周辺位置の参照重み値を導出し、上記式はReferenceWeight[i]=Clip3(0,8,(i-FirstPos)<<1)と等価であってもよい。該ケースでは、図7に示す第2ケースを参照すると、FirstPosは6であってもよく、即ち1番目から6番目の周辺位置の参照重み値は0であり、7番目の周辺位置の参照重み値は2であり、8番目の周辺位置の参照重み値は4であり、このように類推する。
重み変換率の絶対値が4である場合、即ち重み変換率が4であるか又は重み変換率が-4である場合、ReferenceWeights[i]=Clip3(0,8,4*(i-FirstPos))の式により現在ブロックの各周辺位置の参照重み値を導出することができ、上記式はReferenceWeight[i]=Clip3(0,8,(i-FirstPos)<<2)と等価であってもよい。該ケースでは、図7に示す第3ケースを参照すると、FirstPosは7であってもよく、1番目から7番目の周辺位置の参照重み値は0であり、8番目の周辺位置の参照重み値は4であり、9~17番目の周辺位置の参照重み値は8であり、このように類推する。
重み変換率の絶対値が8である場合、即ち重み変換率が8であるか又は重み変換率が-8である場合、ReferenceWeights[i]=Clip3(0,8,8*(i-FirstPos))の式により現在ブロックの各周辺位置の参照重み値を導出し、上記式はReferenceWeight[i]=Clip3(0,8,(i-FirstPos)<<3)と等価であってもよい。該ケースでは、図7に示す第4ケースを参照すると、FirstPosは8であってもよく、即ち1番目から8番目の周辺位置の参照重み値は0であり、9番目の周辺位置の参照重み値は9であり、10~17番目の周辺位置の参照重み値は8であり、このように類推する。
以上のように、重み変換率の絶対値が1である場合、FirstPosは4であり、重み変換率の絶対値が2である場合、FirstPosは6(即ち重み変換率1の場合のFirstPos+2)であり、重み変換率の絶対値が4である場合、FirstPosは7(即ち重み変換率1の場合のFirstPos+3)であり、これに基づいて、参照重み値が4の位置を揃えることができる。
例示的には、現在ブロックについて、重み変換率切り替えをサポートし、かつ重み変換率切り替えを開始する際に、図7に示す4種類の重み変換率の参照重み値分布例から1つを選択して切り替えることができ、それによって画像又は画像の局所領域に重み変換率の切り替えを行うことにより、いくつかの画像表示シーンにおける画像表示のジャンプが目立つことを弱めることを達成する。例えば、いくつかの画像表示シーンではジャンプが比較的目立つという問題を解決する必要があり、AWPモードの重み変化率切り替えはこの問題を解決することができる。例えば、混合画像コンテンツは、部分的なスクリーンコンテンツ、アニメーション、アニメーションを含む画像などを含み、スクリーンコンテンツを含むある領域に対して重み変換率切り替えを行い、ジャンプが比較的目立つという問題を解決することができる。
上記プロセスでは、ValidLengthは現在ブロックの重み予測角度及び現在ブロックのサイズに関連し、技術案の簡略化のために、最適化の目的を達成するためにいくつかのパラメータを定数化することができる。例えば、現在ブロックの重み予測角度を固定のパラメータ値として設定することができ、ValidLengthは現在ブロックのサイズのみに関連する。FirstPosは現在ブロックの重み予測角度、現在ブロックのサイズ、現在ブロックの重み予測位置に関連し、技術案の簡略化のために、最適化の目的を達成するためにいくつかのパラメータを定数化することができ、例えば、現在ブロックの重み予測角度を固定のパラメータ値として設定することができ、FirstPosは現在ブロックのサイズ及び現在ブロックの重み予測位置のみに関連する。又は、現在ブロックの重み予測位置を固定のパラメータ値として設定し、FirstPosは現在ブロックのサイズ及び現在ブロックの重み予測角度のみに関連する。又は、現在ブロックの重み予測角度及び現在ブロックの重み予測位置をいずれも固定のパラメータ値として設定し、この2つの固定のパラメータ値は同じであっても異なっていてもよく、FirstPosは現在ブロックのサイズのみに関連している。
実施例8:実施例1~実施例4では、符号化側/復号側は現在ブロックの重み変換率及び現在ブロックの重み変換の開始位置に基づいて現在ブロックの外部の周辺位置に参照重み値を設定する必要がある。可能な一実施形態では、M及びNが現在ブロックの幅及び高さであると記し、角度重み付け予測モード(AWP)の重みアレイ導出方式は、以下を含む。
ステップd1において、AwpIdxに基づいてstepIdx、angleIdx及びsubAngleIdxなどのパラメータを取得する。
例示的には、AwpIdxは重み予測位置及び重み予測角度のインデックス値を表し、7種類の重み予測位置、8種類の重み予測角度が存在すると仮定すると、AwpIdxの値範囲は0~55である。重み予測位置が-3から3(4番目の重み予測位置が中心であり、4番目の重み予測位置が0であることを表す)であり、重み予測角度のインデックスが0~7である場合、AwpIdxの56個のインデックス値に対応する重み予測位置及び重み予測角度は、表1を参照することができる。
例示的には、stepIdxは重み予測位置(例えば重み予測位置のインデックス値)を表し、重み予測位置の範囲は-3から3であってもよい。例えば、1番目の重み予測位置について、重み予測位置のインデックス値は-3であり、2番目の重み予測位置について、重み予測位置のインデックス値は-2であり、このように類推し、7番目の重み予測位置について、重み予測位置のインデックス値は3である。
angleIdxは重み予測角度の傾きの絶対値のlog2対数値(例えば0、又は1、又は大きな定数)を表し、subAngleIdxは重み予測角度の位置する角度パーティションを表す。図8Aを参照すると、8種類の重み予測角度を示し、重み予測角度0のangleIdxは重み予測角度0の傾きの絶対値のlog2対数値であり、重み予測角度1のangleIdxは重み予測角度1の傾きの絶対値のlog2対数値であり、このように類推し、重み予測角度7のangleIdxは重み予測角度7の傾きの絶対値のlog2対数値である。重み予測角度0及び重み予測角度1は角度パーティション0に位置し、重み予測角度2及び重み予測角度3は角度パーティション1に位置し、重み予測角度4及び重み予測角度5は角度パーティション2に位置し、重み予測角度6及び重み予測角度7は角度パーティション3に位置する。
例示的には、stepIdx=(AwpIdx>>3)-3の式を採用してstepIdxを決定することができる。
例示的には、modAngNum=AwpIdx%8の式に基づいてmodAngNum(角度番号)を決定することができ、modAngNumに基づいて、以下の方式を採用してangleIdxを決定することができ:modAngNumが2に等しい場合、angleIdx=7であり、modAngNumが6に等しい場合、angleIdx=8であり、そうでなければ、angleIdx=modAngNum%2である。
例示的には、subAngleIdx=modAngNum>>1の式を採用してsubAngleIdxを決定することができる。
以上のように、符号化側は現在ブロックの重み予測角度及び現在ブロックの重み予測位置を決定した後、該重み予測角度及び該重み予測位置に基づいてAwpIdxの値を決定することができ、表1を参照されたい。符号化側が符号化ビットストリームを復号側に送信するとき、該符号化ビットストリームにはAwpIdxの値が付加されることができ、これに基づいて、復号側はAwpIdxの値を得て、かつAwpIdxに基づいてstepIdx、angleIdx及びsubAngleIdxを取得することができる。
例示的には、angleIdx及びsubAngleIdxは1つの重み予測角度を一意に決定することができ、表2を参照されたく、もちろん、例えば、パーティション番号を変更するなど、他の方式を採用して重み予測角度を決定することもできる。
ステップd2において、stepIdx、angleIdx及びsubAngleIdxに基づいて現在ブロックの外部の周辺位置に参照重み値を設定する。
ケース1において、subAngleIdxが0であり、即ち重み予測角度が角度パーティション0に位置し、例えば、重み予測角度が重み予測角度0又は重み予測角度1である場合、FirstPos=(ValidLength_H>>1)-6+DeltaPos_Hの式を採用して重み変換の開始位置FirstPosを決定することができる。そして、ReferenceWeights[x]=Clip3(0,8,x-FirstPos)の式を採用して現在ブロックの外部の周辺位置の参照重み値を決定することができ、該式では、参照重み値の最小値が0であり、参照重み値の最大値が8であり、重み変換率が1であることを例に説明し、つまり、上記式はReferenceWeights[x]=Clip3(最小値、最大値、a*(x-FirstPos))と等価であってもよい。xは現在ブロックの外部の周辺位置のインデックスであってもよく、xの値範囲は0~ValidLength_H-1であり、aは重み変換率を表す。
上記式では、ValidLength_Hは現在ブロックの外部の周辺位置の数(即ち有効数であり、有効長さとも呼ばれてもよい)を表すことができ、subAngleIdxが0である場合、重み予測角度が指す現在ブロックの外部の周辺位置は、左側1列の周辺位置であってもよく、したがって、有効数をValidLength_Hと記すことができる。例示的には、ValidLength_H=(N+(M>>angleIdx))<<1の式を採用して有効数ValidLength_Hを決定することができる。ここで1ビット左シフトするのは、式が1/2-pel精度を採用し、1-pel精度であれば、ValidLength_H=(N+(M>>angleIdx))であり、1/4-pel精度であれば、ValidLength_H=(N+(M>>angleIdx))<<2であり、2-pel精度であれば、ValidLength_H=(N+(M>>angleIdx))>>1であり、他の画素精度はこのように類推し、ここではその説明を省略する。以降の式では、関連する一部の>>1操作は、画素精度の違いによって変更される可能性がある。
上記式では、DeltaPos_Hは位置変化量パラメータ(即ち1つの中間パラメータ)を表し、subAngleIdxが0である場合、重み予測角度が指す現在ブロックの外部の周辺位置は、現在ブロックの外部の左側1列の周辺位置であってもよいので、位置変化量パラメータをDeltaPos_Hと記すことができる。例示的には、DeltaPos_H=stepIdx*((ValidLength_H>>3)-1)の式を採用してDeltaPos_Hを決定することができる。
ケース2において、subAngleIdxが1であり、即ち重み予測角度が角度パーティション1に位置し、例えば、重み予測角度が重み予測角度2又は重み予測角度3である場合、FirstPos=(ValidLength_H>>1)-4+DeltaPos_H-((M<<1)>>angleIdx)の式を採用して重み変換の開始位置FirstPosを決定することができる。そして、ReferenceWeights[x]=Clip3(0,8,a*(x-FirstPos))の式を採用して現在ブロックの外部の周辺位置の参照重み値を決定し、該式では、参照重み値の最小値が0であり、参照重み値の最大値が8であり、重み変換率がaであることを例に説明する。xは現在ブロックの外部の周辺位置のインデックスであってもよく、xの値範囲は0~ValidLength_H-1である。
上記式では、ValidLength_H及びDeltaPos_Hはケース1を参照することができ、ここではその説明を省略する。
ケース3において、subAngleIdxが2であり、即ち重み予測角度が角度パーティション2に位置し、例えば、重み予測角度が重み予測角度4又は重み予測角度5である場合、FirstPos=(ValidLength_W>>1)-4+DeltaPos_W-((N<<1)>>angleIdx)の式を採用して重み変換の開始位置FirstPosを決定することができる。そして、ReferenceWeights[x]=Clip3(0,8,a*(x-FirstPos))の式を採用して現在ブロックの外部の周辺位置の参照重み値を決定し、該式では、参照重み値の最小値が0であり、参照重み値の最大値が8であり、重み変換率がaであることを例に説明する。xは現在ブロックの外部の周辺位置のインデックスであってもよく、xの値範囲は0~ValidLength_W-1である。
上記式では、ValidLength_Wは現在ブロックの外部の周辺位置の数(即ち有効数であり、有効長さと呼ばれてもよい)を表し、subAngleIdxが2である場合、重み予測角度が指す現在ブロックの外部の周辺位置は、上側1行の周辺位置であってもよく、したがって、有効数をValidLength_Wと記す。例示的には、ValidLength_W=(M+(N>>angleIdx))<<1の式を採用して有効数ValidLength_Wを決定することができる。
上記式では、DeltaPos_Wは位置変化量パラメータ(即ち1つの中間パラメータ)を表し、subAngleIdxが2である場合、重み予測角度が指す現在ブロックの外部の周辺位置は、現在ブロックの外部の上側1行の周辺位置であってもよく、したがって、位置変化量パラメータをDeltaPos_Wと記すことができる。例示的には、DeltaPos_W=stepIdx*((ValidLength_W>>3)-1)の式を採用してDeltaPos_Wを決定することができる。
ケース4において、subAngleIdxが3であり、即ち重み予測角度が角度パーティション3に位置し、例えば、重み予測角度が重み予測角度6又は重み予測角度7である場合、FirstPos=(ValidLength_W>>1)-6+DeltaPos_Wの式を採用して重み変換の開始位置FirstPosを決定することができる。そして、ReferenceWeights[x]=Clip3(0,8,a*(x-FirstPos))の式を採用して現在ブロックの外部の周辺位置の参照重み値を決定することができ、該式では、参照重み値の最小値が0であり、参照重み値の最大値が8であり、重み変換率がaであることを例に説明する。xは現在ブロックの外部の周辺位置のインデックスであってもよく、xの値範囲は0~ValidLength_W-1である。
上記式では、ValidLength_W及びDeltaPos_Wはケース3を参照することができ、ここではその説明を省略する。
以上のように、subAngleIdxに基づいてどのケースを採用して処理すべきかを決定することができ、例えば、ケース1及びケース2では、angleIdx及びstepIdxに基づいてValidLength_H及びDeltaPos_Hを決定し、かつValidLength_H及びDeltaPos_Hに基づいてFirstPosを決定し、続いてFirstPosに基づいて参照重み値を設定することができる。ケース3及びケース4では、angleIdx及びstepIdxに基づいてValidLength_W及びDeltaPos_Wを決定することができ、かつValidLength_W及びDeltaPos_Wに基づいてFirstPosを決定し、続いてFirstPosに基づいて参照重み値を設定することができる。
上記各ケースにおける式の違いは、現在ブロックの左上隅を座標原点とするとき、参照重み値ReferenceWeights[x]の開始位置が変化することである。例えば、図8Bを参照すると、角度パーティション2及び角度パーティション3の例を示し、1/2-pel精度の場合、参照重み値ReferenceWeights[x]の開始位置は(高さ<<1)>>angleIdxであり、即ち式中のオフセット「-((N<<1)>>angleIdx)」である。角度パーティション0及び角度パーティション1の実現は類似しているが、式中のオフセットは「-((M<<1)>>angleIdx)」であり、即ち高さを幅に変更すればよいだけである。
ステップd3において、angleIdx及び参照重み値ReferenceWeights[x]に基づいて画素位置の輝度重み値を取得する。
ケース1において、subAngleIdxが0である場合、AwpWeightArrayY[x][y]=ReferenceWeights[(y<<1)+((x<<1)>>angleIdx)]の式を採用して画素位置(x,y)の輝度重み値を決定することができる。(y<<1)+((x<<1)>>angleIdx)は画素位置(x,y)が指す周辺位置を表し、ReferenceWeights[(y<<1)+((x<<1)>>angleIdx)]は該周辺位置の参照重み値を表す。xの値範囲は0~M-1であり、yの値範囲は0~N-1である。
ケース2において、subAngleIdxが1である場合、AwpWeightArrayY[x][y]=ReferenceWeights[(y<<1)-((x<<1)>>angleIdx)]の式を採用して画素位置(x,y)の輝度重み値を決定することができ、(y<<1)-((x<<1)>>angleIdx)は画素位置(x,y)が指す周辺位置を表し、ReferenceWeights[(y<<1)-((x<<1)>>angleIdx)]は該周辺位置の参照重み値を表す。xの値範囲は0~M-1であり、yの値範囲は0~N-1である。
ケース3において、subAngleIdxが2である場合、AwpWeightArrayY[x][y]=ReferenceWeights[(x<<1)-((y<<1)>>angleIdx)]の式を採用して画素位置(x,y)の輝度重み値を決定することができ、(x<<1)-((y<<1)>>angleIdx)は画素位置(x,y)が指す周辺位置を表し、ReferenceWeights[(x<<1)-((y<<1)>>angleIdx)]は該周辺位置の参照重み値を表す。xの値範囲は0~M-1であり、yの値範囲は0~N-1である。
ケース4において、subAngleIdxが3である場合、AwpWeightArrayY[x][y]=ReferenceWeights[(x<<1)+((y<<1)>>angleIdx)]の式を採用して画素位置(x,y)の輝度重み値を決定することができ、(x<<1)+((y<<1)>>angleIdx)は画素位置(x,y)が指す周辺位置を表し、ReferenceWeights[(x<<1)+((y<<1)>>angleIdx)]は該周辺位置の参照重み値を表す。xの値範囲は0~M-1であり、yの値範囲は0~N-1である。
上記ステップd2及びステップd3は1つのステップに統合することができ、即ちステップd2(stepIdx、angleIdx及びsubAngleIdxに基づいて現在ブロックの外部の周辺位置に参照重み値を設定する)及びステップd3(angleIdx及び参照重み値ReferenceWeight[x]に基づいて輝度重み値を取得する)は、stepIdx、angleIdx及びsubAngleIdxに基づいて画素位置の輝度重み値を取得し、即ち周辺位置の座標値及び重み変換開始位置の座標値に基づいて決定されるように統合される。
ケース1を例にとって、subAngleIdxが0であり、即ち重み予測角度が角度パーティション0に位置し、例えば重み予測角度が重み予測角度0又は重み予測角度1である場合、FirstPos=(ValidLength_H>>1)-6+DeltaPos_Hの式を採用して重み変換の開始位置FirstPosを決定する。そして、AwpWeightArrayY[x][y]=Clip3(0,8,(y<<1)+((x<<1)>>angleIdx)-FirstPos)の式を採用して画素位置(x,y)の輝度重み値を決定し、(y<<1)+((x<<1)>>angleIdx)は画素位置(x,y)が指す周辺マッチング位置を表す。
ステップd4において、画素位置の輝度重み値に基づいて該画素位置の色度重み値を取得し、該画素位置の輝度重み値及び該画素位置の色度重み値は、該画素位置の目標重み値を設定することができる。
例えば、色度解像度のフォーマットが4:2:0である場合、AwpWeightArrayUV[x][y]=AwpWeightArrayY[x<<1][y<<1]の式を採用して画素位置(x,y)の色度重み値を決定する。また例えば、色度解像度のフォーマットが4:4:4である場合、AwpWeightArrayUV[x][y]=AwpWeightArrayY[x][y]の式を採用して画素位置(x,y)の色度重み値を決定する。ここで、xの値範囲は0~M/2-1であり、yの値範囲は0~N/2-1である。
ステップd4の別の実現方式は、angleIdx及び参照重み値ReferenceWeight[x]に基づいて画素位置の色度重み値を取得することであるため、輝度重み値に基づいて色度重み値を取得する必要がない。例えば、色度解像度のフォーマットが4:2:0である場合、angleIdx及び参照重み値ReferenceWeight[x]に基づいて画素位置の色度重み値を取得する。
例えば、subAngleIdxが0である場合、AwpWeightArrayUV[x][y]=ReferenceWeights[(y<<2)+((x<<2)>>angleIdx)]の式を採用して画素位置(x,y)の色度重み値を決定することができる。
例えば、subAngleIdxが1である場合、AwpWeightArrayUV[x][y]=ReferenceWeights[(y<<2)-((x<<2)>>angleIdx)]の式を採用して画素位置(x,y)の色度重み値を決定することができる。
例えば、subAngleIdxが2である場合、AwpWeightArrayUV[x][y]=ReferenceWeights[(x<<2)-((y<<2)>>angleIdx)]の式を採用して画素位置(x,y)の色度重み値を決定することができる。
例えば、subAngleIdxが3である場合、AwpWeightArrayUV[x][y]=ReferenceWeights[(x<<2)+((y<<2)>>angleIdx)]の式を採用して画素位置(x,y)の色度重み値を決定することができる。
上記各式では、xの値範囲は0~M-1であり、yの値範囲は0~N-1である。
ステップd3及びステップd4では、各ケースにおける式の違いは、図8Cが示した角度パーティション2及び角度パーティション3の例示を参照し、下記の通りである。現在ブロックの左上隅を座標原点とするとき、(x,y)のマッチング位置の角度パーティション2での計算式は、x-y>>angleIdxであってもよく、(x,y)のマッチング位置の角度パーティション3での計算式は、x+y>>angleIdxであってもよい。1/2-pel精度の場合、(x,y)のマッチング位置の角度パーティション2での計算式は、(x<<1)-(y<<1)>>angleIdxであってもよく、(x,y)のマッチング位置の角度パーティション3での計算式は、(x<<1)+(y<<1)>>angleIdxであってもよい。角度パーティション0及び角度パーティション1の実現は類似しており、(x,y)の位置を交換するだけでよい。
実施例9:実施例1~実施例4では、符号化側/復号側は現在ブロックの重み変換率を取得する必要があり、現在ブロックが重み変換率切り替えモードをサポートする場合、現在ブロックの重み変換率指示情報を取得し、かつ該重み変換率指示情報に基づいて現在ブロックの重み変換率を決定する、という方式を採用して現在ブロックの重み変換率を取得する。例示的には、該重み変換率指示情報が第1指示情報である場合、現在ブロックの重み変換率は第1重み変換率であり、重み変換率指示情報が第2指示情報である場合、現在ブロックの重み変換率は第2重み変換率である。現在ブロックが重み変換率切り替えモードをサポートしない場合、予め設定された重み変換率を現在ブロックの重み変換率として決定する。
以上のように、現在ブロックが重み変換率切り替えモードをサポートする場合、現在ブロックの重み変換率は第1重み変換率又は第2重み変換率であってもよく、かつ第1重み変換率は第2重み変換率とは異なり、即ち、現在ブロックの重み変換率は可変であり、それによって統一された重み変換率を採用するのではなく、重み変換率を適応的に切り替えることができる。
例示的には、切り替え制御情報が現在ブロックの重み変換率切り替えモードの開始を許可する場合、現在ブロックは重み変換率切り替えモードをサポートし、切り替え制御情報が現在ブロックの重み変換率切り替えモードの開始を許可しない場合、現在ブロックは重み変換率切り替えモードをサポートしない。該切り替え制御情報は、シーケンスレベル切り替え制御情報、フレームレベル切り替え制御情報、Slice(スライス)レベル切り替え制御情報、Tile(スライス)レベル切り替え制御情報、Patch(スライス)レベル切り替え制御情報、CTU(Coding Tree Unit、符号化ツリーユニット)レベル切り替え制御情報、LCU(Largest Coding Unit、最大符号化ユニット)レベル切り替え制御情報、ブロックレベル切り替え制御情報、CU(Coding Unit、符号化ユニット)レベル切り替え制御情報、PU(Prediction Unit、予測ユニット)レベル切り替え制御情報などを含んでもよいが、これらに限定されない。
符号化側では、切り替え制御情報を知り、かつ切り替え制御情報が現在ブロックの重み変換率切り替えモードの開始を許可するか否かを知り、続いて現在ブロックが重み変換率切り替えモードをサポートするか否かを決定することができる。符号化側は切り替え情報をビットストリームに符号化し、それにより復号側がビットストリームから切り替え制御情報を解析し、切り替え制御情報が現在ブロックの重み変換率切り替えモードの開始を許可するか否かを知り、続いて現在ブロックが重み変換率切り替えモードをサポートするか否かを決定する。符号化側は、切り替え制御情報をビットストリームに符号化する代わりに、復号側によって切り替え制御情報を暗黙的に導出し、切り替え制御情報が現在ブロックの重み変換率切り替えモードの開始を許可するか否かを知り、続いて現在ブロックが重み変換率切り替えモードをサポートするか否かを決定することもできる。
シーケンスレベル切り替え制御情報を例にとって、シーケンスレベル切り替え制御情報はawp_adptive_flag(インター角度重み付け予測適応フラグビット)であってもよく、awp_adptive_flagが第1値である場合、シーケンスレベル切り替え制御情報が現在シーケンスの重み変換率切り替えモードの開始を許可し、それによって現在ブロックの重み変換率切り替えモードの開始を許可することを表し、awp_adptive_flagが第2値である場合、シーケンスレベル切り替え制御情報が現在シーケンスの重み変換率切り替えモードの開始を許可せず、それによって現在ブロックの重み変換率切り替えの開始を許可しないことを表す。例示的には、第1値は1であり、第2値は0であるか、又は、第1値は0であり、第2値は1である。もちろん、上記は第1値及び第2値の例示に過ぎず、これに対して制限しない。他のタイプの切り替え制御情報について、実現プロセスはシーケンスレベル切り替え制御情報と類似しており、ここではその説明を省略する。
可能な一実施形態では、現在ブロックの重み変換率指示情報は現在ブロックに対応するSCC(Screen Content Coding、スクリーンコンテンツ符号化)識別子であってもよく、第1指示情報は現在ブロックがスクリーンコンテンツ符号化に属することを示すために用いられ、第2指示情報は現在ブロックが非スクリーンコンテンツ符号化に属することを示すために用いられる。その上で、現在ブロックに対応するSCC識別子を取得し、かつ該SCC識別子に基づいて現在ブロックの重み変換率を決定することができる。例えば、該SCC識別子は現在ブロックがスクリーンコンテンツ符号化に属することを示すために用いられる場合、現在ブロックの重み変換率は第1重み変換率であり、該SCC識別子は現在ブロックが非スクリーンコンテンツ符号化に属することを示すために用いられる場合、現在ブロックの重み変換率は第2重み変換率である。
例示的には、第1重み変換率の絶対値は第2重み変換率の絶対値よりも大きくてもよい。例えば、第1重み変換率の絶対値は4であってもよく、第2重み変換率の絶対値は1又は2であってもよい。また例えば、第1重み変換率の絶対値は2であってもよく、第2重み変換率の絶対値は1であってもよい。また例えば、第1重み変換率の絶対値は8であってもよく、第2重み変換率の絶対値は1又は2又は4であってもよい。また例えば、第1重み変換率の絶対値は8又は4であってもよく、第2重み変換率の絶対値は1又は2であってもよい。もちろん、上記はいくつかの例示に過ぎず、これに対して制限せず、第1重み変換率の絶対値が第2重み変換率の絶対値よりも大きければよい。
例示的には、SCC識別子は、シーケンスレベルSCC識別子、フレームレベルSCC識別子、SliceレベルSCC識別子、TileレベルSCC識別子、PatchレベルSCC識別子、CTUレベルSCC識別子、LCUレベルSCC識別子、ブロックレベルSCC識別子、CUレベルSCC識別子、PUレベルSCC識別子などを含んでもよいが、これらに限定されず、これに対して制限しない。例えば、現在ブロックに対応するシーケンスレベルSCC識別子を現在ブロックに対応するSCC識別子として決定するか、又は、現在ブロックに対応するフレームレベルSCC識別子を現在ブロックに対応するSCC識別子として決定することができ、このように類推し、現在ブロックに対応するSCC識別子を取得できればよい。
例示的には、符号化側では、現在ブロックがスクリーンコンテンツ符号化に属するか、非スクリーンコンテンツ符号化に属するかを決定することができる。現在ブロックがスクリーンコンテンツ符号化に属する場合、符号化側は現在ブロックの重み変換率が第1重み変換率であると決定する。現在ブロックが非スクリーンコンテンツ符号化に属する場合、符号化側は現在ブロックの重み変換率が第2重み変換率であると決定する。又は、符号化側では、現在ブロックに対応するSCC識別子を取得することができ、該SCC識別子は現在ブロックがスクリーンコンテンツ符号化に属することを示すために用いられる場合、符号化側は現在ブロックの重み変換率が第1重み変換率であると決定する。該SCC識別子は現在ブロックが非スクリーンコンテンツ符号化に属することを示すために用いられる場合、符号化側は現在ブロックの重み変換率が第2重み変換率であると決定する。
符号化側はSCC識別子(例えばシーケンスレベルSCC識別子、フレームレベルSCC識別子、SliceレベルSCC識別子など)をビットストリームに符号化することができ、それによって復号側はビットストリームから該SCC識別子を解析し、かつ該SCC識別子を現在ブロックに対応するSCC識別子として決定し、例えば、現在ブロックに対応するシーケンスレベルSCC識別子を現在ブロックに対応するSCC識別子として決定することができる。以上のように、復号側は現在ブロックに対応するSCC識別子を知ることができ、該SCC識別子は現在ブロックがスクリーンコンテンツ符号化に属することを示すために用いられる場合、復号側は現在ブロックの重み変換率が第1重み変換率であると決定する。該SCC識別子は現在ブロックが非スクリーンコンテンツ符号化に属することを示すために用いられる場合、復号側は現在ブロックの重み変換率が第2重み変換率であると決定する。例えば、SCC識別子が第1値である場合、現在ブロックがスクリーンコンテンツ符号化に属することを示すために用いられ、SCC識別子が第2値である場合、現在ブロックが非スクリーンコンテンツ符号化に属することを示すために用いられる。第1値は1であり、第2値は0であるか、又は、第1値は0であり、第2値は1である。もちろん、上記は第1値及び第2値の例示に過ぎず、これに対して制限しない。
符号化側はSCC識別子をビットストリームに符号化する代わりに、復号側と一致する情報を利用してSCC識別子を暗黙的に導出してもよく、このとき復号側はSCC識別子を暗黙的に導出し、かつ該SCC識別子を現在ブロックに対応するSCC識別子として決定することもできる。例えば、連続する複数のフレームがいずれもスクリーンコンテンツ符号化である場合、現在フレームがスクリーンコンテンツ符号化であることを導出し、したがって、復号側はフレームレベルSCC識別子を暗黙的に導出し、かつ該SCC識別子を現在ブロックに対応するSCC識別子として決定し、かつ該SCC識別子は現在ブロックがスクリーンコンテンツ符号化に属することを示すために用いられる。例えば、連続する複数のフレームがいずれも非スクリーンコンテンツ符号化である場合、現在フレームが非スクリーンコンテンツ符号化であることを導出し、したがって、復号側はフレームレベルSCC識別子を暗黙的に導出し、かつ該SCC識別子は現在ブロックが非スクリーンコンテンツ符号化に属することを示すために用いられる。例えば、現在画像のすべての選択されたモードに対するIBCモードの占有率が一定の割合未満である場合、次の1フレームを非スクリーンコンテンツ符号化として決定し、そうでない場合、スクリーンコンテンツ符号化として決定し続ける。もちろん、上記方式はSCC識別子を暗黙的に導出する例示に過ぎず、この暗黙的な導出方式に対して制限しない。以上のように、復号側は現在ブロックに対応するSCC識別子を取得することができ、該SCC識別子は現在ブロックがスクリーンコンテンツ符号化に属することを示すために用いられる場合、復号側は現在ブロックの重み変換率が第1重み変換率であると決定する。該SCC識別子は現在ブロックが非スクリーンコンテンツ符号化に属することを示すために用いられる場合、復号側は現在ブロックの重み変換率が第2重み変換率であると決定する。例えば、SCC識別子が第1値である場合、現在ブロックがスクリーンコンテンツ符号化に属することを示すために用いられ、SCC識別子が第2値である場合、現在ブロックが非スクリーンコンテンツ符号化に属することを示すために用いられる。
以上のように、現在ブロックの重み変換率は第1重み変換率又は第2重み変換率であってもよく、即ち現在ブロックの重み変換率は切り替え可能であり、かつ重み変換率の切り替えはあるレベルのSCC明示的識別子又はSCC暗黙識別子に依存し、SCC明示的識別子とは、復号側がビットストリームからSCC識別子を解析するように、scc_flag(SCC識別子)をビットストリームに符号化するものであり、SCC暗黙識別子とは、復号側が入手可能な情報に基づいてSCC識別子を適応的に導出するものである。
あるレベルのSCC識別子は、現在シーケンスのSCC識別子を示し、該SCC識別子が現在シーケンスに属する全てのブロックのSCC識別子として用いられるシーケンスレベルのSCC識別子と、現在フレームのSCC識別子を示し、該SCC識別子が現在フレームに属する全てのブロックのSCC識別子として用いられるフレームレベルのSCC識別子と、現在SliceのSCC識別子を示し、該SCC識別子が現在Sliceに属する全てのブロックのSCC識別子として用いられるSliceレベルのSCC識別子と、現在TileのSCC識別子を示し、該SCC識別子が現在Tileに属する全てのブロックのSCC識別子として用いられるTileレベルのSCC識別子と、現在PatchのSCC識別子を示し、該SCC識別子が現在Patchに属する全てのブロックのSCC識別子として用いられるPatchレベルのSCC識別子と、現在CTUのSCC識別子を示し、該SCC識別子が現在CTUに属する全てのブロックのSCC識別子として用いられるCTUレベルのSCC識別子と、現在LCUのSCC識別子を示し、該SCC識別子が現在LCUに属する全てのブロックのSCC識別子として用いられるLCUレベルのSCC識別子と、現在ブロックのSCC識別子を示し、該SCC識別子が現在ブロックに属する全てのブロックのSCC識別子として用いられるブロックレベルのSCC識別子と、現在CUのSCC識別子を示し、該SCC識別子が現在CUに属するSCC識別子として用いられるCUレベルのSCC識別子と、現在PUのSCC識別子を示し、該SCC識別子が現在PUに属するSCC識別子として用いられるPUレベルのSCC識別子と、を含む。
例示的には、第2重み変換率をデフォルトの重み変換率としてもよく、SCC識別子は現在ブロックが非スクリーンコンテンツ符号化に属することを示すために用いられる場合、重み変換率を切り替える必要がなく、即ち現在ブロックの重み変換率が第2重み変換率であると決定する。SCC識別子は現在ブロックがスクリーンコンテンツ符号化に属することを示すために用いられる場合、重み変換率を切り替える必要があり、即ち現在ブロックの重み変換率が第1重み変換率であると決定する。又は、第1重み変換率をデフォルトの重み変換率としてもよく、SCC識別子は現在ブロックが非スクリーンコンテンツ符号化に属することを示すために用いられる場合、重み変換率を切り替える必要があり、即ち現在ブロックの重み変換率が第2重み変換率であると決定する。SCC識別子は現在ブロックがスクリーンコンテンツ符号化に属することを示すために用いられる場合、重み変換率を切り替える必要がなく、即ち現在ブロックの重み変換率が第1重み変換率であると決定する。
以上のように、現在ブロックがスクリーンコンテンツ符号化に属する場合、現在ブロックの重み変換率は第1重み変換率であり、現在ブロックが非スクリーンコンテンツ符号化に属する場合、現在ブロックの重み変換率は第2重み変換率であり、かつ第1重み変換率の絶対値は第2重み変換率の絶対値よりも大きく、例えば第1重み変換率の絶対値は4であり、第2重み変換率の絶対値は1であり、それにより、SCCシーケンスに属する現在ブロックの重み変換率の絶対値は増加し、即ち変換速度は増加する。
別の可能な実施形態では、現在ブロックの重み変換率指示情報は現在ブロックに対応する重み変換率切り替え識別子であってもよく、第1指示情報は現在ブロックが重み変換率切り替えを必要としないことを示すために用いられ、第2指示情報は現在ブロックが重み変換率切り替えを必要とすることを示すために用いられる。その上で、現在ブロックに対応する重み変換率切り替え識別子を取得し、かつ該重み変換率切り替え識別子に基づいて現在ブロックの重み変換率を決定することができる。例えば、該重み変換率切り替え識別子は現在ブロックが重み変換率切り替えを必要としないことを示すために用いられる場合、現在ブロックの重み変換率は第1重み変換率であってもよく、該重み変換率切り替え識別子は現在ブロックが重み変換率切り替えを必要とすることを示すために用いられる場合、現在ブロックの重み変換率は第2重み変換率であってもよい。第1重み変換率の絶対値は第2重み変換率の絶対値に等しくない。
例えば、第1重み変換率の絶対値は第2重み変換率の絶対値よりも大きくてもよく、例えば第1重み変換率の絶対値は4であってもよく、第2重み変換率の絶対値は1又は2である。又は、第1重み変換率の絶対値は2であってもよく、第2重み変換率の絶対値は1である。又は、第1重み変換率の絶対値は8であってもよく、第2重み変換率の絶対値は1又は2又は4である。また例えば、第1重み変換率の絶対値は第2重み変換率の絶対値よりも小さくてもよく、例えば第1重み変換率の絶対値は1であってもよく、第2重み変換率の絶対値は2又は4又は8であってもよい。又は、第1重み変換率の絶対値は2であってもよく、第2重み変換率の絶対値は4又は8であってもよい。又は、第1重み変換率の絶対値は4であってもよく、第2重み変換率の絶対値は8であってもよい。もちろん、上記はいくつかの例示に過ぎず、第1重み変換率の絶対値が第2重み変換率の絶対値に等しくない限り、これに対して制限しない。
例示的には、重み変換率切り替え識別子は、シーケンスレベル重み変換率切り替え識別子、フレームレベル重み変換率切り替え識別子、Sliceレベル重み変換率切り替え識別子、Tileレベル重み変換率切り替え識別子、Patchレベル重み変換率切り替え識別子、CTUレベル重み変換率切り替え識別子、LCUレベル重み変換率切り替え識別子、ブロックレベル重み変換率切り替え識別子、CUレベル重み変換率切り替え識別子、PUレベル重み変換率切り替え識別子などを含んでもよいが、これらに限定されず、これに対して制限しない。
例えば、現在ブロックに対応するシーケンスレベル重み変換率切り替え識別子を現在ブロックに対応する重み変換率切り替え識別子として決定するか、又は、現在ブロックに対応するフレームレベル重み変換率切り替え識別子を現在ブロックに対応する重み変換率切り替え識別子として決定することができ、このように類推し、現在ブロックに対応する重み変換率切り替え識別子を取得できればよい。
例示的には、第1重み変換率をデフォルトの重み変換率としてもよく、符号化側では、現在ブロックが重み変換率の切り替えを必要とするか否かを知ることができ、現在ブロックが重み変換率の切り替えを必要としない場合、符号化側は現在ブロックの重み変換率が第1重み変換率であると決定する。現在ブロックが重み変換率の切り替えを必要とする場合、符号化側は現在ブロックの重み変換率が第2重み変換率であると決定する。又は、符号化側では、現在ブロックに対応する重み変換率切り替え識別子を知ることができ、該重み変換率切り替え識別子は現在ブロックが重み変換率切り替えを必要としないことを示すために用いられる場合、符号化側は現在ブロックの重み変換率が第1重み変換率であると決定することができる。該重み変換率切り替え識別子は現在ブロックが重み変換率切り替えを必要とすることを示すために用いられる場合、符号化側は現在ブロックの重み変換率が第2重み変換率であると決定する。
例えば、符号化側は、第1重み変換率に対応するレート歪みコスト値1と、第2重み変換率に対応するレート歪みコスト値2とを決定する。レート歪みコスト値1がレート歪みコスト値2よりも小さければ、現在ブロックは重み変換率切り替えを必要としないと決定し、レート歪みコスト値2がレート歪みコスト値1よりも小さければ、現在ブロックは重み変換率切り替えを必要とすると決定する。
符号化側は重み変換率切り替え識別子(例えばシーケンスレベル重み変換率切り替え識別子など)をビットストリームに符号化することができ、それによって復号側はビットストリームから該重み変換率切り替え識別子を解析し、かつ該重み変換率切り替え識別子を現在ブロックに対応する重み変換率切り替え識別子として決定する。以上のように、復号側は現在ブロックに対応する重み変換率切り替え識別子を知ることができ、該重み変換率切り替え識別子は現在ブロックが重み変換率切り替えを必要としないことを示すために用いられる場合、復号側は現在ブロックの重み変換率が第1重み変換率であると決定する。該重み変換率切り替え識別子は現在ブロックが重み変換率切り替えを必要とすることを示すために用いられる場合、復号側は現在ブロックの重み変換率が第2重み変換率であると決定する。例えば、重み変換率切り替え識別子が第1値である場合、現在ブロックが重み変換率切り替えを必要としないことを示し、重み変換率切り替え識別子が第2値である場合、現在ブロックが重み変換率切り替えを必要とすることを示す。第1値は1であり、第2値は0であるか、又は、第1値は0であり、第2値は1である。もちろん、上記は第1値及び第2値の例示に過ぎず、これに対して制限しない。
符号化側は重み変換率切り替え識別子をビットストリームに符号化する代わりに、復号側により重み変換率切り替え識別子を暗黙的に導出し、かつ該重み変換率切り替え識別子を、現在ブロックに対応する重み変換率切り替え識別子として決定することもできる。例えば、連続する複数のブロックがいずれも重み変換率切り替えを必要とする場合、現在ブロックも重み変換率切り替えを必要とし、復号側は重み変換率切り替え識別子を暗黙的に導出し、該重み変換率切り替え識別子を現在ブロックに対応する重み変換率切り替え識別子として決定し、かつ該重み変換率切り替え識別子は、現在ブロックが重み変換率切り替えを必要とすることを示す。連続する複数のブロックがいずれも重み変換率切り替えを必要としない場合、現在ブロックも重み変換率切り替えを必要とせず、復号側は重み変換率切り替え識別子を暗黙的に導出し、かつ重み変換率切り替え識別子は現在ブロックが重み変換率切り替えを必要としないことを示す。もちろん、上記方式は、重み変換率切り替え識別子を暗黙的に導出する例に過ぎず、この導出方式に対して制限しない。以上のように、復号側は現在ブロックに対応する重み変換率切り替え識別子を知ることができ、該重み変換率切り替え識別子は現在ブロックが重み変換率切り替えを必要としないことを示す場合、現在ブロックの重み変換率が第1重み変換率であると決定する。該重み変換率切り替え識別子は現在ブロックが重み変換率切り替えを必要とすることを示す場合、現在ブロックの重み変換率が第2重み変換率であると決定する。
以上のように、現在ブロックの重み変換率は第1重み変換率又は第2重み変換率であってもよく、即ち現在ブロックの重み変換率は切り替え可能であり、重み変換率の切り替えはあるレベルの重み変換率切り替え識別子(refine_flag)に依存し、該refine_flagは明示的識別子又は暗黙識別子であり、明示的識別子は、復号側がビットストリームからrefine_flagを解析するように、refine_flagをビットストリームに符号化することを示し、暗黙識別子は、符号化・復号側が得られた情報からrefine_flagを適応的に導出することを示す。
例示的には、あるレベルのrefine_flagは、現在シーケンスのrefine_flagを示し、現在シーケンスに属する全てのブロックのrefine_flagとして用いられるシーケンスレベルのrefine_flagと、現在フレームのrefine_flagを示し、現在フレームに属する全てのブロックのrefine_flagとして用いられるフレームレベルのrefine_flagと、現在Sliceのrefine_flagを示し、現在Sliceに属する全てのブロックのrefine_flagとして用いられるSliceレベルのrefine_flagと、現在Tileのrefine_flagを示し、現在Tileに属する全てのブロックのrefine_flagとして用いられるTileレベルのrefine_flagと、現在Patchのrefine_flagを示し、現在Patchに属する全てのブロックのrefine_flagとして用いられるPatchレベルのrefine_flagと、現在CTUのrefine_flagを示し、現在CTUに属する全てのブロックのrefine_flagとして用いられるCTUレベルのrefine_flagと、現在LCUのrefine_flagを示し、現在LCUに属する全てのブロックのrefine_flagとして用いられるLCUレベルのrefine_flagと、現在ブロックのrefine_flagを示し、現在ブロックに属するrefine_flagとして用いられるブロックレベルのrefine_flagと、現在CUのrefine_flagを示し、現在CUに属するrefine_flagとして用いられるCUレベルのrefine_flagと、現在PUのrefine_flagを示し、現在PUに属するrefine_flagとして用いられるPUレベルのrefine_flagと、を含む。もちろん、上記はいくつかの例示に過ぎず、これに対して制限しない。
例示的には、第1重み変換率をデフォルトの重み変換率としてもよく、重み変換率切り替え識別子は現在ブロックが重み変換率切り替えを必要としないことを示すために用いられる場合、重み変換率の切り替えを行わず、即ち現在ブロックの重み変換率が第1重み変換率であると決定する。重み変換率切り替え識別子は現在ブロックが重み変換率切り替えを必要とすることを示すために用いられる場合、重み変換率の切り替えを行い、即ち現在ブロックの重み変換率が第2重み変換率であると決定する。
実施例10:実施例1~実施例4では、符号化側/復号側は現在ブロックの重み予測角度及び重み予測位置を取得する必要があり、実施例9では、現在ブロックの重み変換率、例えば第1重み変換率又は第2重み変換率を取得することができ、その上で、以下の方式を採用して現在ブロックの重み予測角度及び重み予測位置を取得する。
方式1として、符号化側及び復号側は、現在ブロックの重み予測角度として同じ重み予測角度を約束し、かつ現在ブロックの重み予測位置として同じ重み予測位置を約束する。例えば、符号化側及び復号側は、重み予測角度Aを現在ブロックの重み予測角度とし、符号化側及び復号側は、重み予測位置4を現在ブロックの重み予測位置とする。
方式2として、符号化側は、重み予測角度A及び重み予測角度Bのような少なくとも1つの重み予測角度を含む重み予測角度リストを構築する。符号化側は、少なくとも1つの重み予測位置、例えば重み予測位置0~重み予測位置6を含む重み予測位置リストを構築する。重み予測角度リスト内の各重み予測角度を順にトラバースし、重み予測位置リスト内の各重み予測位置をトラバースし、即ち、各重み予測角度及び各重み予測位置の組み合わせをトラバースする。各組み合わせをステップa1で取得した重み予測角度及び重み予測位置として、該重み予測角度、該重み予測位置及び重み変換率に基づいて、現在ブロックの重み付け予測値を得る。
例えば、符号化側は、重み予測角度A及び重み予測位置0をトラバースすると、重み予測角度A及び重み予測位置0に基づいて現在ブロックの重み付け予測値を取得する。重み予測角度A及び重み予測位置1をトラバースすると、重み予測角度A及び重み予測位置1に基づいて現在ブロックの重み付け予測値を取得する。重み予測角度B及び重み予測位置0をトラバースすると、重み予測角度B及び重み予測位置0に基づいて現在ブロックの重み付け予測値を取得し、このように類推する。符号化側は、重み予測角度と重み予測位置との各組み合わせに基づいて、現在ブロックの重み付け予測値を取得することができる。
符号化側は、重み予測角度と重み予測位置との組み合わせに基づいて現在ブロックの重み付け予測値を取得した後、現在ブロックの重み付け予測値に基づいてレート歪みコスト値を決定することができ、このレート歪みコスト値の決定方式に対して制限せず、符号化側は、各組み合わせのレート歪みコスト値を取得し、かつ全てのレート歪みコスト値から最小レート歪みコスト値を選択することができる。
そして、符号化側は、最小レート歪みコスト値に対応する重み予測角度及び重み予測位置の組み合わせを目標重み予測角度及び目標重み予測位置とし、最後に、目標重み予測角度の重み予測角度リストにおけるインデックス値と、目標重み予測位置の重み予測位置リストにおけるインデックス値とをビットストリームに符号化する。
復号側では、復号側は重み予測角度リストを構築し、該重み予測角度リストは符号化側の重み予測角度リストと同じであり、重み予測角度リストは、少なくとも1つの重み予測角度を含む。重み予測位置リストを構築し、該重み予測位置リストは符号化側の重み予測位置リストと同じであり、重み予測位置リストは、少なくとも1つの重み予測位置を含む。復号側は、現在ブロックの符号化ビットストリームを受信した後、符号化ビットストリームから指示情報を解析し、該指示情報に基づいて重み予測角度リストから1つの重み予測角度を現在ブロックの重み予測角度として選択し、該指示情報に基づいて重み予測位置リストから1つの重み予測位置を現在ブロックの重み予測位置として選択する。
適用シーン1:符号化側が符号化ビットストリームを復号側に送信するとき、該符号化ビットストリームは、現在ブロックの重み予測角度(即ち目標重み予測角度)及び現在ブロックの重み予測位置(即ち目標重み予測位置)を示すための指示情報1を含むことができる。例えば、指示情報1が0の場合、重み予測角度リスト内の1番目の重み予測角度を示し、かつ重み予測位置リスト内の1番目の重み予測位置を示すために用いられ、指示情報1が1の場合、重み予測角度リスト内の1番目の重み予測角度を示し、かつ重み予測位置リスト内の2番目の重み予測位置を示すために用いられ、このように類推し、指示情報1の値がどの重み予測角度とどの重み予測位置とを示すために用いられるかについて、符号化側と復号側とで約束される限り、本実施例では限定しない。
復号側は、符号化ビットストリームを受信した後、該符号化ビットストリームから指示情報1を解析し、該指示情報1に基づいて、復号側は、現在ブロックの重み予測角度として、重み予測角度リストから該指示情報1に対応する重み予測角度を選択することができる。該指示情報1に基づいて、復号側は、現在ブロックの重み予測位置として、該指示情報1に対応する重み予測位置を重み予測位置リストから選択することができる。
適用シーン2:符号化側が符号化ビットストリームを復号側に送信するとき、該符号化ビットストリームは、指示情報2と指示情報3とを含むことができる。指示情報2は、現在ブロックの目標重み予測角度を示すために用いられ、例えば目標重み予測角度の重み予測角度リストにおけるインデックス値1であり、インデックス値1は目標重み予測角度が重み予測角度リストの何番目の重み予測角度であるかを表す。指示情報3は、現在ブロックの目標重み予測位置を示すために用いられ、例えば目標重み予測位置の重み予測位置リストにおけるインデックス値2であり、インデックス値2は目標重み予測位置が重み予測位置リストの何番目の重み予測位置であるかを表す。復号側は、符号化ビットストリームを受信した後、符号化ビットストリームから指示情報2と指示情報3を解析し、指示情報2に基づいて、該インデックス値1に対応する重み予測角度を、現在ブロックの重み予測角度として重み予測角度リストから選択する。該指示情報3に基づいて、該インデックス値2に対応する重み予測位置を、現在ブロックの重み予測位置として重み予測位置リストから選択する。
適用シーン3:符号化側と復号側は、好ましい設定の組み合わせを約束することができ、この好ましい設定の組み合わせに対して制限せず、実際の経験に基づいて設定することができ、例えば、符号化側と復号側は、重み予測角度Aと重み予測位置4を含む好ましい設定の組み合わせ1、重み予測角度Bと重み予測位置4を含む好ましい設定の組み合わせ2を約束する。
符号化側は、現在ブロックの目標重み予測角度と目標重み予測位置とを決定した後、目標重み予測角度と目標重み予測位置とが好ましい設定の組み合わせであるか否かを決定する。そうである場合、符号化側が符号化ビットストリームを復号側に送信するとき、該符号化ビットストリームは指示情報4と指示情報5を含むことができる。指示情報4は、現在ブロックが好ましい設定の組み合わせを採用するか否かを示すために用いられ、例えば指示情報4が第1値(例えば0)である場合、現在ブロックが好ましい設定の組み合わせを採用することを表す。指示情報5は、現在ブロックがどの好ましい設定の組み合わせを採用するかを示すために用いられ、例えば指示情報5が0である場合、現在ブロックが好ましい設定の組み合わせ1を採用することを示すために用いられ、指示情報5が1である場合、現在ブロックが好ましい設定の組み合わせ2を採用することを示すために用いられる。
復号側は、符号化ビットストリームを受信した後、該符号化ビットストリームから指示情報4と指示情報5を解析し、該指示情報4に基づいて、復号側は、現在ブロックが好ましい設定の組み合わせを採用するか否かを決定する。指示情報4が第1値である場合、現在ブロックが好ましい設定の組み合わせを採用すると決定する。現在ブロックが好ましい設定の組み合わせを採用する場合、復号側は、指示情報5に基づいて、現在ブロックがどの好ましい設定の組み合わせを採用するかを決定し、例えば指示情報5が0である場合、現在ブロックが好ましい設定の組み合わせ1を採用すると決定し、即ち現在ブロックの重み予測角度が重み予測角度Aであり、現在ブロックの重み予測位置が重み予測位置4である。また例えば、指示情報5が1である場合、現在ブロックが好ましい設定の組み合わせ2を採用すると決定し、即ち現在ブロックの重み予測角度が重み予測角度Bであり、現在ブロックの重み予測位置が重み予測位置4である。
例示的には、符号化側及び復号側が、例えば、重み付け予測角度A及び重み予測位置4を含む好ましい設定の組み合わせのような1組の好ましい設定の組み合わせのみを約束する場合、該符号化ビットストリームは、指示情報5を含まず、現在ブロックが好ましい設定の組み合わせを採用することを示すための指示情報4を含むことができる。復号側は、該符号化ビットストリームから指示情報4を解析した後、指示情報4が第1値であれば、現在ブロックが好ましい設定の組み合わせを採用すると決定し、該好ましい設定の組み合わせに基づいて、現在ブロックの重み予測角度が重み予測角度Aであり、現在ブロックの重み予測位置が重み予測位置4であると決定する。
適用シーン4:符号化側と復号側は、好ましい設定の組み合わせを約束することができ、符号化側は、現在ブロックの目標重み予測角度と目標重み予測位置を決定した後、目標重み予測角度と目標重み予測位置が好ましい設定の組み合わせであるか否かを決定する。そうでない場合、符号化側が符号化ビットストリームを復号側に送信するとき、該符号化ビットストリームは指示情報4と指示情報6を含む。指示情報4は、現在ブロックが好ましい設定の組み合わせを採用するか否かを示すために用いられ、例えば指示情報4が第2値(例えば1)である場合、現在ブロックが好ましい設定の組み合わせを採用しないことを表す。指示情報6は、現在ブロックの目標重み予測角度と、現在ブロックの目標重み予測位置を示すために用いられる。例えば、指示情報6が0の場合、重み予測角度リストの1番目の重み予測角度を示し、かつ重み予測位置リストの1番目の重み予測位置を示すために用いられ、このように類推する。
復号側は、符号化ビットストリームを受信した後、該符号化ビットストリームから指示情報4と指示情報6を解析し、該指示情報4に基づいて、復号側は、現在ブロックが好ましい設定の組み合わせを採用するか否かを決定する。指示情報4が第2値である場合、現在ブロックが好ましい設定の組み合わせを採用しないと決定する。現在ブロックが好ましい設定の組み合わせを採用しない場合、復号側は、指示情報6に基づいて、重み予測角度リストから該指示情報6に対応する重み予測角度を、現在ブロックの重み予測角度として選択し、該指示情報6に基づいて、復号側は、重み予測位置リストから該指示情報6に対応する重み予測位置を、現在ブロックの重み予測位置として選択することができる。
適用シーン5:符号化側と復号側は、好ましい設定の組み合わせを約束することができ、符号化側は、現在ブロックの目標重み予測角度と目標重み予測位置を決定した後、目標重み予測角度と目標重み予測位置が好ましい設定の組み合わせであるか否かを決定する。そうでない場合、符号化側が符号化ビットストリームを復号側に送信するとき、該符号化ビットストリームは、指示情報4、指示情報7及び指示情報8を含む。例示的には、指示情報4は、現在ブロックが好ましい設定の組み合わせを採用するか否かを示すために用いられ、例えば指示情報4が第2値である場合、現在ブロックが好ましい設定の組み合わせを採用しないことを表す。指示情報7は、現在ブロックの目標重み予測角度を示すために用いられ、例えば目標重み予測角度の重み予測角度リストにおけるインデックス値1であり、インデックス値1は目標重み予測角度が重み予測角度リストの何番目の重み予測角度であるかを表し、指示情報8は、現在ブロックの目標重み予測位置を示すために用いられ、例えば目標重み予測位置の重み予測位置リストにおけるインデックス値2であり、インデックス値2は目標重み予測位置が重み予測位置リストの何番目の重み予測位置であるかを表す。
復号側は、符号化ビットストリームを受信した後、該符号化ビットストリームから指示情報4、指示情報7及び指示情報8を解析し、該指示情報4に基づいて、復号側は、現在ブロックが好ましい設定の組み合わせを採用するか否かを決定する。指示情報4が第2値である場合、現在ブロックが好ましい設定の組み合わせを採用しないと決定する。現在ブロックが好ましい設定の組み合わせを採用しない場合、復号側は、該指示情報7に基づいて、該インデックス値1に対応する重み予測角度を、現在ブロックの重み予測角度として重み予測角度リストから選択する。復号側は、該指示情報8に基づいて、該インデックス値2に対応する重み予測位置を、現在ブロックの重み予測位置として重み予測位置リストから選択する。
実施例11:実施例1~実施例4では、符号化側/復号側は、現在ブロックの重み変換率を取得する必要があり、現在ブロックが重み変換率切り替えモードをサポートする場合、以下の方式を採用して現在ブロックの重み変換率を取得する:現在ブロックの重み変換率指示情報を取得し、予め設定されたルックアップテーブルから該重み変換率指示情報に対応する重み変換率を選択し、該予め設定されたルックアップテーブルは、少なくとも2つの重み変換率を含む。選択した重み変換率を現在ブロックの重み変換率として決定する。
予め設定されたルックアップテーブルは、少なくとも2つの重み変換率を含むので、現在ブロックが重み変換率切り替えモードをサポートする場合、少なくとも2つの重み変換率から現在ブロックの重み変換率を選択することができ、即ち、現在ブロックの重み変換率が可変であり、それによって統一された重み変換率を採用するのではなく、重み変換率を適応的に切り替えることができる。
例示的には、切り替え制御情報が現在ブロックの重み変換率切り替えモードの開始を許可する場合、現在ブロックは重み変換率切り替えモードをサポートし、切り替え制御情報が現在ブロックの重み変換率切り替えモードの開始を許可しない場合、現在ブロックは重み変換率切り替えモードをサポートせず、現在ブロックが重み変換率切り替えモードをサポートするか否かについて、実施例9を参照されたい。
可能な一実施形態では、予め設定されたルックアップテーブルは、少なくとも2つの重み変換率を含んでもよく、重み変換率指示情報は、重み変換率インデックス情報(ルックアップテーブル内の全ての重み変換率のうちの特定の重み変換率を示すために用いられる)を含んでもよい。これに基づいて、該重み変換率インデックス情報に対応する重み変換率を該ルックアップテーブルから選択することができる。
符号化側では、1つのルックアップテーブルのみが存在する場合、ルックアップテーブルにおける各重み変換率に対して、符号化側は、該重み変換率に対応するレート歪みコスト値を決定し、かつ最小レート歪みコスト値に対応する重み変換率を現在ブロックの目標重み変換率として、目標重み変換率のルックアップテーブルにおけるインデックス情報、即ち該ルックアップテーブルにおける何番目の重み変換率であるかを表す重み変換率インデックス情報を決定することができる。
復号側では、1つのルックアップテーブルのみが存在する場合、符号化側が現在ブロックの符号化ビットストリームを復号側に送信するとき、該符号化ビットストリームには、目標重み変換率のルックアップテーブルにおけるインデックス情報を示すための重み変換率インデックス情報が付加されることができる。復号側は、該重み変換率インデックス情報に対応する重み変換率を、現在ブロックの目標重み変換率として該ルックアップテーブルから選択する。
実施例12:実施例1~実施例4では、符号化側/復号側は、現在ブロックの重み予測角度、現在ブロックの重み予測位置及び現在ブロックの重み変換率を取得する必要があり、実施例11では、現在ブロックの重み変換率を取得することができ、その上で、以下の方式を採用して現在ブロックの重み予測角度及び重み予測位置を取得することができる。
方式1として、符号化側及び復号側は、現在ブロックの重み予測角度として同じ重み予測角度を約束し、かつ現在ブロックの重み予測位置として同じ重み予測位置を約束する。例えば、符号化側及び復号側は、重み予測角度Aを現在ブロックの重み予測角度とし、符号化側及び復号側は、重み予測位置4を現在ブロックの重み予測位置とする。
方式2として、符号化側は、少なくとも1つの重み予測角度を含む重み予測角度リストを構築する。符号化側は、少なくとも1つの重み予測位置を含む重み予測位置リストを構築する。符号化側は、少なくとも2つのルックアップテーブルを構築し、第1ルックアップテーブルと第2ルックアップテーブルを例にとって、第1ルックアップテーブルは少なくとも1つの重み変換率を含み、第2ルックアップテーブルは少なくとも1つの重み変換率を含む。符号化側は目標ルックアップテーブルを決定し、決定方式は実施例11を参照し、目標ルックアップテーブルが第1ルックアップテーブルであることを例とする。符号化側は、重み予測角度リスト内の各重み予測角度を順にトラバースし、重み予測位置リスト内の各重み予測位置をトラバースし、目標ルックアップテーブル内の各重み変換率をトラバースし、即ち、各重み予測角度、各重み予測位置、及び各重み変換率の組み合わせをトラバースする。重み予測角度、重み予測位置及び重み変換率の組み合わせについて、ステップa1で取得した重み予測角度、重み予測位置及び重み変換率として、重み予測角度、重み予測位置及び重み変換率に基づいて、現在ブロックの重み付け予測値を得る。
以上のように、符号化側は、各組み合わせに基づいて現在ブロックの重み付け予測値を得ることができる。現在ブロックの重み付け予測値を得た後、符号化側は、現在ブロックの重み付け予測値に基づいてレート歪みコスト値を決定することができ、即ち、符号化側は、各組み合わせのレート歪みコスト値を取得し、かつ全てのレート歪みコスト値から最小レート歪みコスト値を選択することができる。
そして、符号化側は、最小レート歪みコスト値に対応する重み予測角度、重み予測位置及び重み変換率をそれぞれ目標重み予測角度、目標重み予測位置及び目標重み変換率とし、最後に、目標重み予測角度の重み予測角度リストにおけるインデックス値、目標重み予測位置の重み予測位置リストにおけるインデックス値、及び目標重み変換率の目標ルックアップテーブルにおけるインデックス値を、いずれも現在ブロックのビットストリームに符号化する。
復号側について、復号側は、符号化側の重み予測角度リストと同じ重み予測角度リストを構築し、復号側は、符号化側の重み予測位置リストと同じ重み予測位置リストを構築し、復号側は、符号化側の第1ルックアップテーブルと同じ第1ルックアップテーブル及び符号化側の第2ルックアップテーブルと同じ第2ルックアップテーブルを構築する。復号側は、現在ブロックの符号化ビットストリームを受信した後、該符号化ビットストリームから指示情報を解析し、該指示情報に基づいて、重み予測角度リストから1つの重み予測角度を現在ブロックの重み予測角度として選択し、該指示情報に基づいて、重み予測位置リストから1つの重み予測位置を現在ブロックの重み予測位置として選択し、重み予測角度及び重み予測位置の取得方式は、実施例10を参照し、ここではその説明を省略する。復号側は、現在ブロックの符号化ビットストリームを受信した後、目標ルックアップテーブル(例えば、第1ルックアップテーブル又は第2ルックアップテーブル)を決定し、かつ重み変換率インデックス情報に基づいて目標ルックアップテーブルから1つの重み変換率を現在ブロックの重み変換率として選択することができ、重み変換率の取得方式については、実施例11を参照し、ここではその説明を省略する。
実施例13:上記実施例1~実施例3では、符号化側/復号側は動き情報候補リストを取得する必要があり、例えば、動き情報候補リストに追加すべき、少なくとも1つの利用可能な動き情報を取得し、少なくとも1つの利用可能な動き情報に基づいて動き情報候補リストを取得する、という方式を採用して動き情報候補リストを取得する。例示的には、少なくとも1つの利用可能な動き情報は、空間領域動き情報と、時間領域動き情報と、HMVP(History-based Motion Vector Prediction、履歴ベースの動きベクトル予測)動き情報と、予め設定された動き情報とのうちの少なくとも1つを含むが、これらに限定されない。
例示的には、空間領域動き情報について、以下のような方式を採用して動き情報候補リストに追加すべき、少なくとも1つの利用可能な動き情報を取得する:現在ブロックの空間領域隣接ブロックについて、空間領域隣接ブロックが存在し、かつ空間領域隣接ブロックがインター予測モードを採用する場合、該空間領域隣接ブロックの動き情報を利用可能な動き情報として決定する。
例示的には、時間領域動き情報について、以下のような方式を採用して動き情報候補リストに追加すべき、少なくとも1つの利用可能な動き情報を取得する:現在ブロックの予め設定された位置(例えば、現在ブロックの左上隅画素位置)に基づいて、現在ブロックの参照フレームから該予め設定された位置に対応する時間領域隣接ブロックを選択し、かつ該時間領域隣接ブロックの動き情報を利用可能な動き情報として決定する。
例示的には、予め設定された動き情報について、以下のような方式を採用して動き情報候補リストに追加すべき、少なくとも1つの利用可能な動き情報を取得する:予め設定された動き情報を利用可能な動き情報として決定し、該予め設定された動き情報は動き情報候補リストに既に存在する候補動き情報に基づいて導出されたデフォルト動き情報を含んでもよいがこれに限定されない。
可能な一実施形態では、少なくとも1つの利用可能な動き情報に基づいて、以下のような方式で動き情報候補リストを取得する:動き情報候補リストに現在追加すべき、利用可能な動き情報について、利用可能な動き情報が単方向動き情報であり、かつ該単方向動き情報が動き情報候補リストに既に存在する候補動き情報と重複しない場合、該単方向動き情報を動き情報候補リストに追加し、利用可能な動き情報が双方向動き情報である場合、該双方向動き情報を第1単方向動き情報及び第2単方向動き情報にクリップし、第1単方向動き情報が動き情報候補リストに既に存在する候補動き情報と重複しない場合、該第1単方向動き情報を動き情報候補リストに追加する。
上記実施例では、第1単方向動き情報は第1参照フレームリスト内の参照フレームを指す単方向動き情報であってもよく、第2単方向動き情報は第2参照フレームリスト内の参照フレームを指す単方向動き情報であってもよい。
可能な一実施形態では、List0はフォワード参照フレームリストであってもよく、List1はバックワード参照フレームリストであってもよい。
上記実施例では、単方向動き情報及び動き情報候補リストに既に存在する候補動き情報に対する重複チェック操作は、単方向動き情報が指す参照フレームのPOC(Picture Order Count、表示順序)が候補動き情報が指す参照フレームのPOCと同じであり、かつ該単方向動き情報の動きベクトルが該候補動き情報の動きベクトルと同じである場合、該単方向動き情報が該候補動き情報と重複すると決定し、そうでない場合、該単方向動き情報が該候補動き情報と重複しないと決定することを含んでもよいが、これらに限定されない。
第1単方向動き情報及び動き情報候補リストに既に存在する候補動き情報に対する重複チェック操作は、第1単方向動き情報が指す参照フレームリストが候補動き情報が指す参照フレームリストと同じであり、かつ該第1単方向動き情報のrefIdxが該候補動き情報のrefIdxと同じであり、かつ該第1単方向動き情報の動きベクトルが該候補動き情報の動きベクトルと同じである場合、該第1単方向動き情報が該候補動き情報と重複すると決定し、そうでない場合、該第1単方向動き情報が該候補動き情報と重複しないと決定すること、あるいは、第1単方向動き情報が指す参照フレー参照フレームのPOCが候補動き情報が指す参照フレームのPOCと同じであり、かつ該第1単方向動き情報の動きベクトルが該候補動き情報の動きベクトルと同じである場合、該第1単方向動き情報が該候補動き情報と重複すると決定し、そうでない場合、該第1単方向動き情報が該候補動き情報と重複しないと決定することを含んでもよいが、これらに限定されない。
第2単方向動き情報及び動き情報候補リストに既に存在する候補動き情報に対する重複チェック操作は、第2単方向動き情報が指す参照フレームリストが候補動き情報が指す参照フレームリストと同じであり、かつ該第2単方向動き情報のrefIdxが該候補動き情報のrefIdxと同じであり、かつ該第2単方向動き情報の動きベクトルが該候補動き情報の動きベクトルと同じである場合、該第2単方向動き情報が該候補動き情報と重複すると決定し、そうでない場合、該第2単方向動き情報が該候補動き情報と重複しないと決定すること、あるいは、第2単方向動き情報が指す参照フレームのPOCが候補動き情報が指す参照フレームのPOCと同じであり、かつ該第2単方向動き情報の動きベクトルが該候補動き情報の動きベクトルと同じである場合、該第2単方向動き情報が該候補動き情報と重複すると決定し、そうでない場合、該第2単方向動き情報が該候補動き情報と重複しないと決定することを含んでもよいが、これらに限定されない。
例示的には、上記プロセスは単方向動き情報が指す参照フレームのPOCが候補動き情報が指す参照フレームのPOCと同じであるか否かを比較する必要があり、なお、参照フレームのPOCは参照フレームが同じであるか否かを確認する例示に過ぎず、POC以外にも、参照フレームが同じであるか否かを確認することができる他の属性、例えば参照フレームのDOC(Decoding Order Count、復号順序)などを採用してもよく、これに対して制限しない。以上のように、単方向動き情報が指す参照フレームのDOCが候補動き情報が指す参照フレームのDOCと同じであるか否かを比較することもでき、実現原理はPOCの実現原理と類似している。
実施例14:実施例13について、空間領域動き情報(本明細書では現在ブロックの空間領域隣接ブロックの動き情報を空間領域動き情報と呼ぶ)及び/又は時間領域動き情報(本明細書では現在ブロックの時間領域隣接ブロックの動き情報を時間領域動き情報と呼ぶ)を利用して動き情報候補リストを取得することができ、したがって、まず空間領域動き情報及び/又は時間領域動き情報から利用可能な動き情報を選択する必要がある。図9Aを参照すると、現在ブロックの空間領域隣接ブロックの概略図であり、空間領域動き情報はF、G、C、A、B、Dなどの空間領域隣接ブロックの動き情報であってもよく、時間領域動き情報は少なくとも1つであってもよい。
空間領域動き情報について、以下の方式を採用して動き情報候補リストに追加すべき利用可能な動き情報を取得することができる。
方式11として、図9Aを参照すると、F、G、C、A、B、Dは現在ブロックEの空間領域隣接ブロックであり、F、G、C、A、B、Dの動き情報の「利用可能」性を決定することができる。例示的には、Fが存在しかつインター予測モードを採用する場合、Fの動き情報は利用可能な動き情報であり、そうでない場合、Fの動き情報は利用不可能な動き情報である。Gが存在しかつインター予測モードを採用する場合、Gの動き情報は利用可能な動き情報であり、そうでない場合、Gの動き情報は利用不可能な動き情報である。Cが存在しかつインター予測モードを採用する場合、Cの動き情報は利用可能な動き情報であり、そうでない場合、Cの動き情報は利用不可能な動き情報である。Aが存在しかつインター予測モードを採用する場合、Aの動き情報は利用可能な動き情報であり、そうでない場合、Aの動き情報は利用不可能な動き情報である。Bが存在しかつインター予測モードを採用する場合、Bの動き情報は利用可能な動き情報であり、そうでない場合、Bの動き情報は利用不可能な動き情報である。Dが存在しかつインター予測モードを採用する場合、Dの動き情報は利用可能な動き情報であり、そうでない場合、Dの動き情報は利用不可能な動き情報である。
方式12として、F、G、C、A、B、Dは現在ブロックEの空間領域隣接ブロックであり、F、G、C、A、B、Dの動き情報の「利用可能」性を決定する。Fが存在しかつインター予測モードを採用する場合、Fの動き情報は利用可能な動き情報であり、そうでない場合、Fの動き情報は利用不可能な動き情報である。Gが存在しかつインター予測モードを採用し、Gの動き情報がFの動き情報と異なる場合、Gの動き情報は利用可能な動き情報であり、そうでない場合、Gの動き情報は利用不可能な動き情報である。Cが存在しかつインター予測モードを採用し、Cの動き情報がGの動き情報と異なる場合、Cの動き情報は利用可能な動き情報であり、そうでない場合、Cの動き情報は利用不可能な動き情報である。Aが存在しかつインター予測モードを採用し、Aの動き情報がFの動き情報と異なる場合、Aの動き情報は利用可能な動き情報であり、そうでない場合、Aの動き情報は利用不可能な動き情報である。Bが存在しかつインター予測モードを採用し、Bの動き情報がGの動き情報と異なる場合、Bの動き情報は利用可能な動き情報であり、そうでない場合、Bの動き情報は利用不可能な動き情報である。Dが存在しかつインター予測モードを採用し、Dの動き情報がAの動き情報と異なり、かつDの動き情報がGの動き情報と異なる場合、Dの動き情報は利用可能な動き情報であり、そうでない場合、Dの動き情報は利用不可能な動き情報である。
方式13として、F、G、C、A、B、Dは現在ブロックEの空間領域隣接ブロックであり、F、G、C、A、B、Dの動き情報の「利用可能」性を決定することができる。例示的には、Fが存在しかつインター予測モードを採用する場合、Fの動き情報は利用可能な動き情報であり、そうでない場合、Fの動き情報は利用不可能な動き情報である。Gが存在しかつインター予測モードを採用し、Gの動き情報がFの動き情報と異なる場合、Gの動き情報は利用可能な動き情報であり、そうでない場合、Gの動き情報は利用不可能な動き情報である。Cが存在しかつインター予測モードを採用し、Cの動き情報がGの動き情報と異なる場合、Cの動き情報は利用可能な動き情報であり、そうでない場合、Cの動き情報は利用不可能な動き情報である。Aが存在しかつインター予測モードを採用し、Aの動き情報がFの動き情報と異なる場合、Aの動き情報は利用可能な動き情報であり、そうでない場合、Aの動き情報は利用不可能な動き情報である。Bが存在しかつインター予測モードを採用する場合、Bの動き情報は利用可能な動き情報であり、そうでない場合、Bの動き情報は利用不可能な動き情報である。Dが存在しかつインター予測モードを採用し、Dの動き情報がAの動き情報と異なり、かつDの動き情報がGの動き情報と異なる場合、Dの動き情報は利用可能な動き情報であり、そうでない場合、Dの動き情報は利用不可能な動き情報である。
例示的には、方式12及び方式13では、空間領域隣接ブロックの動き情報が利用可能な動き情報であるか否かを決定するとき、2つの空間領域隣接ブロックの動き情報が同じであるか否かを比較する必要があり得、例えば、Gの動き情報がFの動き情報と同じであるか否かを比較し、動き情報が同じであるか否かの比較プロセスは、実際には動き情報の重複チェック操作であり、重複チェック結果として重複する場合、動き情報の比較結果として同じであり、重複チェック結果として重複しない場合、動き情報の比較結果として異なる。動き情報の重複チェック操作については、後続の実施例を参照することができ、ここではその説明を省略する。
時間領域動き情報について、以下の方式を採用して動き情報候補リストに追加すべき利用可能な動き情報を取得することができる。
方式21として、現在ブロックの予め設定された位置に基づいて、現在ブロックの参照フレームから該予め設定された位置に対応する時間領域隣接ブロックを選択し、かつ該時間領域隣接ブロックの動き情報を利用可能な動き情報として決定する。例えば、現在ブロックの位置する現在フレームがBフレームである場合、co-located参照フレームのco-locatedブロックに基づいて単方向動き情報又は双方向動き情報を導出し、該単方向動き情報又は双方向動き情報を利用可能な動き情報とする。現在フレームがPフレームである場合、co-located参照フレームのco-locatedブロックに基づいて単方向動き情報を導出し、該単方向動き情報を利用可能な動き情報とする。
例示的には、co-locatedブロックはco-located参照フレームにおける現在ブロックの予め設定された位置に対応する時間領域隣接ブロックであり、現在ブロックの予め設定された位置は経験的に設定されてもよく、この現在ブロックの予め設定された位置に対して制限せず、例えば現在ブロックの左上隅画素位置、現在ブロックの右上隅画素位置、現在ブロックの左下隅画素位置、現在ブロックの右下隅画素位置、現在ブロックの中心画素位置などである。co-located参照フレームに関して予め設定された参照フレームであってもよく、例えば現在ブロックのList0における1つの参照フレームをco-located参照フレームとし、導出された参照フレームであってもよく、例えば現在ブロックのList0における現在フレームに最も近い参照フレームをco-located参照フレームとし、ビットストリームから解析された参照フレームであってもよく、例えば復号側では、ビットストリームからco-located参照フレームの情報を解析し、続いてco-located参照フレームを決定することができる。
現在ブロックの位置する現在フレームがBフレームである場合、co-locatedブロックの動き情報に基づいて単方向動き情報又は双方向動き情報を導出し、現在ブロックの位置する現在フレームがPフレームである場合、co-locatedブロックの動き情報に基づいて単方向動き情報を導出する。
方式22として、現在ブロックの重み予測角度及び重み予測位置に基づいて、現在ブロックの目標位置を決定し、現在ブロックの参照フレームから該目標位置に対応する時間領域隣接ブロックを選択し、かつ該時間領域隣接ブロックの動き情報を利用可能な動き情報として決定する。例えば、現在ブロックの重み予測角度及び重み予測位置に基づいて、現在ブロックの目標位置を決定することができ、例えば現在ブロックの重み予測角度及び重み予測位置のインデックス値に基づいて、現在ブロックの目標位置を決定する。そして、現在ブロックの目標位置に基づいてco-located参照フレームのco-locatedブロックを決定することができ、現在ブロックの位置する現在フレームがBフレームである場合、co-located参照フレームのco-locatedブロックに基づいて単方向動き情報又は双方向動き情報を導出し、該単方向動き情報又は双方向動き情報を利用可能な動き情報とする。現在フレームがPフレームである場合、co-located参照フレームのco-locatedブロックに基づいて単方向動き情報を導出し、該単方向動き情報を利用可能な動き情報とする。
co-locatedブロックはco-located参照フレームにおける現在ブロックの目標位置に対応する時間領域隣接ブロックであり、目標位置は現在ブロックの左上隅画素位置、右上隅画素位置、左下隅画素位置、右下隅画素位置などであってもよい。
例えば、現在ブロックの重み予測角度及び現在ブロックの重み予測位置に基づいて、現在ブロックの重み行列を得ることができ、図9Bを参照すると、右上側重み部分の割合が比較的小さく(黒色部分)、空間領域動き情報と黒色部分との相関が比較的低いので、時間領域動き情報の選択が右上側重み部分に偏って、それにより適切な候補動き情報を提供することができ、その上で、co-locatedブロックは現在ブロックの右上隅画素位置(即ち割合が比較的小さい重み部分)に対応する時間領域隣接ブロックであってもよく、即ち、現在ブロックの目標位置は現在ブロックの右上隅画素位置である。
同様に、図9Cを参照すると、現在ブロックの重み予測角度及び現在ブロックの重み予測位置に基づいて、現在ブロックの目標位置が現在ブロックの右下隅画素位置であると決定することができる。図9Dを参照すると、現在ブロックの重み予測角度及び現在ブロックの重み予測位置に基づいて、現在ブロックの目標位置が現在ブロックの左下隅画素位置であると決定することができる。
利用可能な動き情報を得た後、各利用可能な動き情報(例えば空間領域動き情報、時間領域動き情報など)について、以下の方式の1つ又は組み合わせを採用して利用可能な動き情報を動き情報候補リストに追加することができる。
方式31として、重複チェック処理を行わない。例えば、利用可能な動き情報が単方向動き情報である場合、該単方向動き情報を動き情報候補リストに追加する。利用可能な動き情報が双方向動き情報である場合、該双方向動き情報を第1単方向動き情報及び第2単方向動き情報にクリップし、かつクリップした後のある単方向動き情報を動き情報候補リストに追加し、例えば、該第1単方向動き情報を動き情報候補リストに追加することができる。
方式32として、半分重複チェック処理を行い、即ち双方向動き情報の残りの半分を重複チェックしない。例えば、利用可能な動き情報が単方向動き情報であり、かつ単方向動き情報が動き情報候補リストに既に存在する候補動き情報と重複しない場合、該単方向動き情報を動き情報候補リストに追加する。利用可能な動き情報が双方向動き情報である場合、該双方向動き情報を第1単方向動き情報及び第2単方向動き情報にクリップし、かつある単方向動き情報を動き情報候補リストに追加し、例えば、双方向動き情報における第1単方向動き情報が動き情報候補リストに既に存在する候補動き情報と重複しない場合、該第1単方向動き情報を動き情報候補リストに追加する。
方式33として、完全重複チェック処理を行う。例えば、利用可能な動き情報が単方向動き情報であり、かつ単方向動き情報が動き情報候補リストに既に存在する候補動き情報と重複しない場合、単方向動き情報を動き情報候補リストに追加する。利用可能な動き情報が双方向動き情報である場合、該双方向動き情報を第1単方向動き情報及び第2単方向動き情報にクリップし、かつある単方向動き情報を動き情報候補リストに追加し、例えば、双方向動き情報における第1単方向動き情報が動き情報候補リストに既に存在する候補動き情報と重複しない場合、第1単方向動き情報を動き情報候補リストに追加し、第1単方向動き情報が動き情報候補リストに既に存在する候補動き情報と重複し、かつ双方向動き情報における第2単方向動き情報が動き情報候補リストに既に存在する候補動き情報と重複しない場合、第2単方向動き情報を動き情報候補リストに追加する。
方式31、方式32及び方式33では、第1単方向動き情報は第1参照フレームリスト内の参照フレームを指す単方向動き情報であってもよく、第2単方向動き情報は第2参照フレームリスト内の参照フレームを指す単方向動き情報であってもよい。
例示的には、動き情報候補リストに既に存在する候補動き情報の総数(即ち利用可能な動き情報を動き情報候補リストに追加するとき、該動き情報候補リストに現在既に存在する候補動き情報の総数)が偶数である場合、第1参照フレームリストはList0であり、第2参照フレームリストはList1であり、動き情報候補リストに既に存在する候補動き情報の総数が奇数である場合、第1参照フレームリストはList1であり、第2参照フレームリストはList0である。あるいは、動き情報候補リストに既に存在する候補動き情報の総数が奇数である場合、第1参照フレームリストはList0であり、第2参照フレームリストはList1であり、動き情報候補リストに既に存在する候補動き情報の総数が偶数である場合、第1参照フレームリストはList1であり、第2参照フレームリストはList0である。あるいは、第1参照フレームリストはList0であり、第2参照フレームリストはList1である。あるいは、第1参照フレームリストはList1であり、第2参照フレームリストはList0である。
上記実施例では、単方向動き情報(例えば単方向動き情報、第1単方向動き情報、第2単方向動き情報など)及び動き情報候補リストに既に存在する候補動き情報に対する重複チェック操作に関し、重複チェック操作の結果として重複するか又は重複しない。2つの空間領域隣接ブロックの動き情報に対する重複チェックにも関し、重複チェック操作の結果として重複するか又は重複しない。後続の実施例19では、双方向動き情報及び動き情報候補リストに既に存在する候補動き情報に対する重複チェック操作にも関し、重複チェック操作の結果として重複するか又は重複しない。
説明の便宜上、重複チェック操作を行う2つの動き情報を動き情報1及び動き情報2と呼び、動き情報1が重複チェックすべき単方向動き情報である場合、動き情報2は動き情報候補リストに既に存在する候補動き情報であり、動き情報1が重複チェックすべき双方向動き情報である場合、動き情報2は動き情報候補リストに既に存在する候補動き情報であり、動き情報1が利用可能性を決定する必要な空間領域隣接ブロックの動き情報である場合、動き情報2は利用可能性を決定済みの空間領域隣接ブロックの動き情報であり、方式12を参照し、例えばFの動き情報が利用可能である場合、Gの動き情報が利用可能であるか否かを決定する必要があるとき、動き情報1はGの動き情報であり、動き情報2はFの動き情報である。
該重複チェック操作について、以下の方式を採用して実現することができる。
方式41として、List+refIdx+MV_x+MV_yに基づいて重複チェック操作を行う。例えば、まず指されているListリストが同じであるか否か(即ちList0を指すか、List1を指すか、List0及びList1を同時に指すか)をチェックし、さらにrefidxが同じであるか否かをチェックし、さらにMVが同じであるか否かをチェックする(即ち水平成分が同じであるか否か、及び垂直成分が同じであるか否か)。
例示的には、まず動き情報1が指す参照フレームリストと動き情報2が指す参照フレームリストとが同じであるか否かを問い合わせ、異なる場合、動き情報1が動き情報2と重複しない。同じである場合、動き情報1のrefIdxと動き情報2のrefIdxとが同じであるか否かを問い合わせ、異なる場合、動き情報1が動き情報2と重複しない。同じである場合、動き情報1の動きベクトルと動き情報2の動きベクトルとが同じであるか否かを問い合わせ、そうでない場合、動き情報1が動き情報2と重複せず、そうである場合、動き情報1が動き情報2と重複すると決定する。
例示的には、動き情報1が指す参照フレームリストと動き情報2が指す参照フレームリストとがいずれもList0である場合、両者は同じであり、あるいは、動き情報1が指す参照フレームリストと動き情報2が指す参照フレームリストとがいずれもList1である場合、両者は同じであり、あるいは、動き情報1が指す参照フレームリストがList0であり、動き情報2が指す参照フレームリストがList1である場合、両者は異なり、あるいは、動き情報1が指す参照フレームリストがList1であり、動き情報2が指す参照フレームリストがList0である場合、両者は異なり、あるいは、動き情報1が指す参照フレームリストがList0であり、動き情報2が指す参照フレームリストがList0及びList1である場合、両者は異なり、あるいは、動き情報1が指す参照フレームリストがList1であり、動き情報2が指す参照フレームリストがList0及びList1である場合、両者は異なり、あるいは、動き情報1が、参照フレームリストList0における参照フレームインデックスがrefIdx0の参照フレームを指し、かつList1における参照フレームインデックスがrefIdx1の参照フレームを指し、動き情報2が、List0における参照フレームインデックスがrefIdx2の参照フレームを指し、かつList1における参照フレームインデックスがrefIdx3の参照フレームを指し、refIdx0がrefIdx2に等しくなく、又はrefIdx1がrefIdx3に等しくない場合、両者は異なる。もちろん、上記は参照フレームリストを比較するいくつかの例示に過ぎず、これに対して制限しない。
例示的には、動き情報1の動きベクトルの水平成分が動き情報2の動きベクトルの水平成分と同じであり、かつ動き情報1の動きベクトルの垂直成分が動き情報2の動きベクトルの垂直成分と同じである場合、動き情報1の動きベクトルが動き情報2の動きベクトルと同じであることを表す。
方式42として、POC+MV_x+MV_yに基づいて重複チェック操作を行う。
例えば、まず指す参照フレームのPOCが同じであるか否かを問い合わせ(即ちList0における参照フレームインデックスがrefIdx0の参照フレームを指すPOCが、List1における参照フレームインデックスがrefIdx1の参照フレームを指すPOCに等しい場合、同様に同じであると判定し、単方向動き情報及び単方向動き情報に対する重複チェック、及び、双方向動き情報及び双方向動き情報に対する重複チェックの両方に適用する)、さらにMVが同じであるか否かを問い合わせる(即ち水平成分が同じであるか否か、及び垂直成分が同じであるか否か)。
例示的には、まず動き情報1が指す参照フレームのPOCと動き情報2が指す参照フレームのPOCとが同じであるか否かを問い合わせ、異なる場合、動き情報1が動き情報2と重複しない。同じである場合、動き情報1の動きベクトルと動き情報2の動きベクトルとが同じであるか否かを続けて問い合わせ、異なる場合、動き情報1は動き情報2と重複せず、同じである場合、動き情報1が動き情報2と重複すると決定する。
例示的には、指す参照フレームのPOCが同じであることは、以下を含んでもよい。動き情報1がList0における参照フレームインデックスがrefIdx0の参照フレームを指し、かつ動き情報2がList0における参照フレームインデックスがrefIdx0の参照フレームを指し、かつ動き情報1が指す参照フレームのPOCが動き情報2が指す参照フレームのPOCと同じである。あるいは、動き情報1がList1における参照フレームインデックスがrefIdx1の参照フレームを指し、かつ動き情報2がList1における参照フレームインデックスがrefIdx1の参照フレームを指し、かつ動き情報1が指す参照フレームのPOCが動き情報2が指す参照フレームのPOCと同じである。あるいは、動き情報1がList0における参照フレームインデックスがrefIdx0の参照フレームを指し、かつ動き情報2がList1における参照フレームインデックスがrefIdx1の参照フレームを指し、かつ動き情報1が指す参照フレームのPOCが動き情報2が指す参照フレームのPOCと同じである。あるいは、動き情報1がList1における参照フレームインデックスがrefIdx1の参照フレームを指し、かつ動き情報2がList0における参照フレームインデックスがrefIdx0の参照フレームを指し、かつ動き情報1が指す参照フレームのPOCが動き情報2が指す参照フレームのPOCと同じである。あるいは、動き情報1が、List0における参照フレームインデックスがrefIdx0の参照フレームを指し、かつList1における参照フレームインデックスがrefIdx1の参照フレームを指し、動き情報2が、List0における参照フレームインデックスがrefIdx2の参照フレームを指し、かつList1における参照フレームインデックスがrefIdx3の参照フレームを指し、動き情報1が指すList0における参照フレームインデックスがrefIdx0の参照フレームのPOCが、動き情報2が指すList1における参照フレームインデックスがrefIdx3の参照フレームのPOCと同じであり、かつ動き情報1が指すList1における参照フレームがrefIdx1の参照フレームのPOCが、動き情報2が指すList0における参照フレームインデックスがrefIdx2の参照フレームのPOCと同じである。もちろん、上記は参照フレームのPOCが同じであるいくつかの例示に過ぎず、これに対して制限しない。
例示的には、上記プロセスは参照フレームのPOCに重複チェックを行うプロセスであり、なお、参照フレームのPOCは重複チェック操作の一例に過ぎず、POC以外にも、参照フレームが同じであるか否かを確認することができる他の属性、例えば参照フレームのDOCなどを採用してもよく、これに対して制限しない。以上のように、上記POCをDOCに置き換えることができる。
以上のように、動き情報候補リストを取得することができ、該動き情報候補リストはAwpUniArrayとも呼ばれてもよく、以下、いくつかの具体的な適用シーンを参照して、上記動き情報候補リストの取得プロセスを説明する。後続の適用シーンでは、動き情報候補リストの長さがXであると仮定し、即ちX個の利用可能な動き情報を追加する必要があり、利用可能な動き情報を動き情報候補リストに追加した後、既に追加された動き情報を候補動き情報と呼ぶ。
適用シーン1:空間領域動き情報を動き情報候補リストに追加し、リスト長さがXに等しい場合、追加プロセスを終了し、リスト長さがXよりも小さい場合、リスト長さがXになるまで、予め設定された動き情報を動き情報候補リストに追加する。
例示的には、まず動き情報候補リストに追加すべき利用可能な動き情報(即ち空間領域動き情報)を決定する。例えば、方式11を採用して利用可能な動き情報を決定し、又は、方式12を採用して利用可能な動き情報を決定し、又は、方式13を採用して利用可能な動き情報を決定する。方式12又は方式13を採用して利用可能な動き情報を決定するとき、2つの空間領域隣接ブロックの動き情報の重複チェック操作に関し、方式41を採用して重複チェック操作を行い、あるいは、方式42を採用して重複チェック操作を行うことができる。
例示的には、図9Aを参照すると、F、G、C、A、B、Dにおいて利用可能な動き情報の順序(該順序が可変である)に従って、利用可能な動き情報を動き情報候補リストに追加する。各利用可能な動き情報について、方式31を採用して該利用可能な動き情報を動き情報候補リストに追加してもよいし、方式32を採用して該利用可能な動き情報を動き情報候補リストに追加してもよいし、方式33を採用して該利用可能な動き情報を動き情報候補リストに追加してもよい。
例示的には、方式32又は方式33を採用して該利用可能な動き情報を動き情報候補リストに追加するとき、単方向動き情報及び動き情報候補リストに既に存在する候補動き情報に重複チェック操作を行うこともでき、例えば、方式41を採用して重複チェック操作を行うことができ、あるいは、方式42を採用して重複チェック操作を行うことができる。
適用シーン2:時間領域動き情報を動き情報候補リストに追加し、リスト長さがXに等しい場合、追加プロセスを終了し、リスト長さがXよりも小さい場合、リスト長さがXになるまで、予め設定された動き情報を動き情報候補リストに追加する。
例示的には、まず動き情報候補リストに追加すべき利用可能な動き情報(即ち時間領域動き情報)を決定する。例えば、方式21を採用して利用可能な動き情報を決定し、又は、方式22を採用して利用可能な動き情報を決定する。
例示的には、各利用可能な動き情報について、方式31を採用して該利用可能な動き情報を動き情報候補リストに追加してもよいし、方式32を採用して該利用可能な動き情報を動き情報候補リストに追加してもよいし、方式33を採用して該利用可能な動き情報を動き情報候補リストに追加してもよい。
例示的には、方式32又は方式33を採用して該利用可能な動き情報を動き情報候補リストに追加するとき、単方向動き情報及び動き情報候補リストに既に存在する候補動き情報に重複チェック操作を行うこともでき、例えば、方式41を採用して重複チェック操作を行うことができ、あるいは、方式42を採用して重複チェック操作を行うことができる。
適用シーン3:空間領域動き情報と時間領域動き情報を共に動き情報候補リストに追加し(空間領域動き情報は時間領域動き情報の前に位置してもよく、時間領域動き情報は空間領域動き情報の前に位置してもよく、説明の便宜上、後続は空間領域動き情報が時間領域動き情報の前に位置することを例に)、リスト長さがXに等しい場合、追加プロセスを終了し、リスト長さがXよりも小さい場合、リスト長さがXになるまで、予め設定された動き情報を動き情報候補リストに追加する。
例示的には、動き情報候補リストに追加すべき利用可能な動き情報(即ち空間領域動き情報及び時間領域動き情報)を決定する。例えば、方式11及び方式21を採用して利用可能な動き情報を決定し、又は、方式11及び方式22を採用して利用可能な動き情報を決定し、又は、方式12及び方式21を採用して利用可能な動き情報を決定し、又は、方式12及び方式22を採用して利用可能な動き情報を決定し、又は、方式13及び方式21を採用して利用可能な動き情報を決定し、又は、方式13及び方式22を採用して利用可能な動き情報を決定する。もちろん、上記はいくつかの例示に過ぎず、これに対して制限しない。
方式12又は方式13を採用して利用可能な動き情報を決定するとき、2つの空間領域隣接ブロックの動き情報の重複チェック操作に関し、方式41を採用して重複チェック操作を行い、あるいは、方式42を採用して重複チェック操作を行うことができる。
例示的には、F、G、C、A、B、Dにおける利用可能な動き情報の順序、及び時間領域動き情報(即ち利用可能な動き情報)の順序に従って、利用可能な動き情報を動き情報候補リストに追加する。各利用可能な動き情報について、方式31を採用して該利用可能な動き情報を動き情報候補リストに追加し、又は方式32を採用して該利用可能な動き情報を動き情報候補リストに追加し、又は方式33を採用して該利用可能な動き情報を動き情報候補リストに追加する。
例示的には、方式32又は方式33を採用して該利用可能な動き情報を動き情報候補リストに追加するとき、単方向動き情報及び動き情報候補リストに既に存在する候補動き情報に重複チェック操作を行うこともでき、例えば、方式41を採用して重複チェック操作を行うことができ、あるいは、方式42を採用して重複チェック操作を行うことができる。
以上のように、空間領域動き情報及び時間領域動き情報の順序に基づいて、リスト長さがXに等しくなるまで、空間領域動き情報と時間領域動き情報を共に動き情報候補リストに追加することができ、あるいは、トラバースが終了するとき、リスト長さがXよりも小さい場合、リスト長さがXになるまで、予め設定された動き情報を動き情報候補リストに追加する。
適用シーン4:空間領域動き情報を動き情報候補リストに追加した後、少なくともY個の位置を時間領域動き情報に確保し、時間領域動き情報は双方向動き情報又は単方向動き情報である。例示的には、空間領域動き情報を動き情報候補リストに追加し、リスト長さがX-Yに等しい場合、空間領域動き情報の追加プロセスを終了し、又は空間領域動き情報のトラバースが終了し、リスト長さがX-Yよりも小さい場合、空間領域動き情報の追加プロセスを終了する。そして、時間領域動き情報を動き情報候補リストに追加し、リスト長さがXに等しい場合、時間領域動き情報の追加プロセスを終了し、又は時間領域動き情報のトラバースが終了し、リスト長さがXよりも小さい場合、時間領域動き情報の追加プロセスを終了し、リスト長さがXになるまで、予め設定された動き情報を動き情報候補リストに追加する。
例示的には、動き情報候補リストに追加すべき利用可能な動き情報(即ち空間領域動き情報及び時間領域動き情報)を決定する。例えば、方式11及び方式21を採用して利用可能な動き情報を決定し、又は、方式11及び方式22を採用して利用可能な動き情報を決定し、又は、方式12及び方式21を採用して利用可能な動き情報を決定し、又は、方式12及び方式22を採用して利用可能な動き情報を決定し、又は、方式13及び方式21を採用して利用可能な動き情報を決定し、又は、方式13及び方式22を採用して利用可能な動き情報を決定する。もちろん、上記はいくつかの例示に過ぎず、これに対して制限しない。
方式12又は方式13を採用して利用可能な動き情報を決定するとき、2つの空間領域隣接ブロックの動き情報の重複チェック操作に関し、方式41を採用して重複チェック操作を行い、あるいは、方式42を採用して重複チェック操作を行うことができる。
例示的には、F、G、C、A、B、Dにおける利用可能な動き情報(即ち空間領域動き情報)の順序に従って、リスト長さがX-Yに等しくなり、又は空間領域動き情報のトラバースが終了するまで、利用可能な動き情報を動き情報候補リストに追加する。そして、リスト長さがXに等しくなり、又は時間領域動き情報のトラバースが終了するまで、時間領域動き情報(即ち利用可能な動き情報)を動き情報候補リストに追加する。利用可能な動き情報の追加プロセスでは、各利用可能な動き情報について、方式31を採用して該利用可能な動き情報を動き情報候補リストに追加し、又は方式32を採用して該利用可能な動き情報を動き情報候補リストに追加し、又は方式33を採用して該利用可能な動き情報を動き情報候補リストに追加する。
例示的には、方式32又は方式33を採用して該利用可能な動き情報を動き情報候補リストに追加するとき、単方向動き情報及び動き情報候補リストに既に存在する候補動き情報に重複チェック操作を行うこともでき、例えば、方式41を採用して重複チェック操作を行うことができ、あるいは、方式42を採用して重複チェック操作を行うことができる。
上記各適用シーンでは、Xは任意の正の整数をとることができ、例えば、Xの値は4、5などであってもよい。
上記各適用シーンでは、いずれも予め設定された動き情報(デフォルト動き情報とも呼ばれてもよい)を動き情報候補リストに追加することが可能であり、予め設定された動き情報の実現方式については、以下の方式を含んでもよいが、これらに限定されない。
方式51として、予め設定された動き情報はゼロ動き情報であり、例えばListXを指しかつrefIdxがListXにおける参照フレーム数よりも小さいゼロ動きベクトルである。例えば、ゼロパディングを行うことができ、即ち動き情報は(0,0,ref_idx3,ListZ)であってもよい。
方式52として、動き情報候補リストに既に存在する候補動き情報に基づいてデフォルト動き情報を導出する。
例えば、拡大又は縮小する必要があるx軸方向又はy軸方向の絶対値をtemp_valと、結果をresultと記す。
1、temp_val<8である場合、result=8であり、あるいは、result=-8である。
例示的には、候補動き情報のx軸方向のtemp_valが8未満であれば、デフォルト動き情報のx軸方向の動きベクトルは8であり、あるいは、デフォルト動き情報のx軸方向の動きベクトルは-8である。
候補動き情報のy軸方向のtemp_valが8未満であれば、デフォルト動き情報のy軸方向の動きベクトルは8であり、あるいは、デフォルト動き情報のy軸方向の動きベクトルは-8である。
2、上記1を満たさないと仮定すると、temp_val<=64である場合、result=(temp_val*5+2)>>2であり、あるいは、result=(temp_val*3+2)>>2であり、正負符号は候補動き情報の動きベクトルの正負符号と同じである。
例示的には、候補動き情報のx軸方向の動きベクトルが正であり、かつx軸方向の動きベクトルの絶対値(即ちtemp_val)が64以下である場合、デフォルト動き情報のx軸方向の動きベクトルは(temp_val*5+2)>>2であり、候補動き情報のx軸方向の動きベクトルが負であり、かつx軸方向の動きベクトルの絶対値(即ちtemp_val)が64以下である場合、デフォルト動き情報のx軸方向の動きベクトルはresult=(temp_val*3+2)>>2である。
デフォルト動き情報に対するy軸方向の動きベクトルは、x軸方向の動きベクトルと類似している。
3、上記1及び2を満たさないと仮定すると、temp_val<=128である場合、result=(temp_val*9+4)>>3であり、あるいは、result=(temp_val*7+4)>>3であり、正負符号は候補動き情報の動きベクトルの正負符号と同じである。
4、上記1を満たさず、2を満たさず、かつ3を満たさないと仮定すると、result=(temp_val*33+16)>>5であり、あるいは、result=(temp_val*31+16)>>5であり、正負符号は候補動き情報の動きベクトルの正負符号と同じである。
方式53として、動き情報候補リストに既に存在する候補動き情報に基づいてデフォルト動き情報を導出する。
例えば、動き情報候補リストのいずれかの有効な候補動き情報(x,y,ref_idx,ListX)を基に、ref_idx及びListXはそれぞれ参照フレームインデックス及び参照フレームリストであり、かつ両者を総称して参照フレーム情報と呼び、(x+a,y+b,ref_idx,ListX)、a、bは任意の整数をとることと、(k1*x,k1*y,ref_idx_new1,ListX)、k1は0ではない任意の正の整数であり、即ち動きベクトルにスケール操作を行うことと、(k2*x,k2*y,ref_idx_new2,ListY)、k2は0ではない任意の正の整数であり、即ち動きベクトルにスケール操作を行うことと、のうちの少なくとも1つの動き情報を追加することができる。
方式54として、予め設定された動き情報は動き情報候補リストに既に存在する候補動き情報であり、即ちパディング(padding)操作を行うとき、動き情報候補リストに既に存在する候補動き情報を採用して充填操作を繰り返すことができる。例えば、動き情報候補リストに既に存在する最後の単方向動き情報を採用して重複充填を行うことができる。
以上のように、リスト長さがXよりも小さく、予め設定された動き情報を動き情報候補リストに追加する必要がある場合、リスト長さがXになるまで、方式51の予め設定された動き情報を動き情報候補リストに追加することができる。あるいは、リスト長さがXになるまで、方式52の予め設定された動き情報を動き情報候補リストに追加することができる。あるいは、リスト長さがXになるまで、方式53の予め設定された動き情報を動き情報候補リストに追加することができる。あるいは、リスト長さがXになるまで、方式51及び方式52の予め設定された動き情報を動き情報候補リストに追加することができる。あるいは、リスト長さがXになるまで、方式51及び方式53の予め設定された動き情報を動き情報候補リストに追加することができる。あるいは、リスト長さがXになるまで、方式52及び方式53の予め設定された動き情報を動き情報候補リストに追加することができる。あるいは、リスト長さがXになるまで、方式51、方式52及び方式53の予め設定された動き情報を動き情報候補リストに追加することができる。
例示的には、上記方式を採用して、予め設定された動き情報を動き情報候補リストに追加した後、リスト長さが依然としてXよりも小さい場合、方式54の予め設定された動き情報を動き情報候補リストに追加することができ、即ち、リスト長さがXになるまで、動き情報候補リストに既に存在する候補動き情報を採用して充填操作を繰り返す。
別の可能な実施形態では、リスト長さがXよりも小さく、予め設定された動き情報を動き情報候補リストに追加する必要がある場合、直接方式54の予め設定された動き情報を動き情報候補リストに追加することができ、即ち、リスト長さがXになるまで、動き情報候補リストに既に存在する候補動き情報を採用して充填操作を繰り返す。
上記実施例では、予め設定された動き情報は単方向動き情報であってもよいし、双方向動き情報であってもよい。予め設定された動き情報が単方向動き情報であれば、該予め設定された動き情報を動き情報候補リストに追加するとき、重複チェック操作を行ってもよいし、重複チェック操作を行わなくてもよい。重複チェック操作を行わない場合、直接該予め設定された動き情報を動き情報候補リストに追加する。重複チェック操作を行う場合、方式41を採用して重複チェック操作を行い、あるいは、方式42を採用して重複チェック操作を行うことができる。重複チェック操作の結果として重複しない場合、該予め設定された動き情報を動き情報候補リストに追加する。重複チェック操作の結果として重複する場合、該予め設定された動き情報を動き情報候補リストに追加しない。
実施例15:実施例1~実施例3では、符号化側/復号側は動き情報候補リスト(実施例13及び14を参照)を得た後、該動き情報候補リストに基づいて現在ブロックの第1目標動き情報及び第2目標動き情報を取得することができ、第1目標動き情報及び第2目標動き情報の取得方式については、以下の方式を採用して実現することができる。
方式1として、動き情報候補リストから1つの候補動き情報を現在ブロックの第1目標動き情報として選択し、動き情報候補リストからもう1つの候補動き情報を現在ブロックの第2目標動き情報として選択する。
例示的には、符号化側及び復号側では、いずれも動き情報候補リストを取得することができ、符号化側の動き情報候補リストは復号側の動き情報候補リストと同じであり、この動き情報候補リストに対して制限しない。
符号化側では、レート歪み最適化に基づいて、動き情報候補リストから1つの候補動き情報を現在ブロックの第1目標動き情報として選択し、動き情報候補リストからもう1つの候補動き情報を現在ブロックの第2目標動き情報として選択することができ、第1目標動き情報と第2目標動き情報とは異なり、これに対して制限しない。
可能な一実施形態では、符号化側が符号化ビットストリームを復号側に送信するとき、該符号化ビットストリームには指示情報aと指示情報bとが付加されることができ、指示情報aは現在ブロックの第1目標動き情報のインデックス値1を示すために用いられ、インデックス値1は第1目標動き情報が動き情報候補リストの何番目の候補動き情報であるかを表す。指示情報bは現在ブロックの第2目標動き情報のインデックス値2を示すために用いられ、インデックス値2は第2目標動き情報が動き情報候補リストの何番目の候補動き情報であるかを表す。例示的には、インデックス値1とインデックス値2とは異なるものであってもよい。
復号側は、符号化ビットストリームを受信した後、符号化ビットストリームから指示情報aと指示情報bを解析する。復号側は、指示情報aに基づいて、動き情報候補リストからインデックス値1に対応する候補動き情報を選択し、該候補動き情報を現在ブロックの第1目標動き情報とする。復号側は、指示情報bに基づいて、動き情報候補リストからインデックス値2に対応する候補動き情報を選択し、該候補動き情報を現在ブロックの第2目標動き情報とする。
別の可能な実施形態では、符号化側が符号化ビットストリームを復号側に送信するとき、該符号化ビットストリームには指示情報aと指示情報cとが付加されることができ、該指示情報aは現在ブロックの第1目標動き情報のインデックス値1を示すために用いられてもよく、インデックス値1は第1目標動き情報が動き情報候補リストの何番目の候補動き情報であるかを表す。該指示情報cはインデックス値2とインデックス値1との差値を示すために用いられてもよく、インデックス値2は第2目標動き情報が動き情報候補リストの何番目の候補動き情報であるかを表す。例示的には、インデックス値1とインデックス値2とは異なるものであってもよい。
復号側は、符号化ビットストリームを受信した後、符号化ビットストリームから指示情報aと指示情報cを解析することができる。復号側は、指示情報aに基づいて、動き情報候補リストからインデックス値1に対応する候補動き情報を選択し、該候補動き情報を現在ブロックの第1目標動き情報としてもよい。復号側は、指示情報cに基づいて、インデックス値2とインデックス値1との差値を得て、そしてこの差値及びインデックス値1に基づいてインデックス値2を決定し、そして復号側は、動き情報候補リストからインデックス値2に対応する候補動き情報を選択し、該候補動き情報を現在ブロックの第2目標動き情報としてもよい。
例示的には、第1目標動き情報の指示情報と第2目標動き情報の指示情報とは、交換可能であり、符号化側と復号側とが一致すればよく、ここでは指示情報の交換であり、解析プロセスに影響せず、即ち解析依存が存在しない。第1目標動き情報の指示情報と第2目標動き情報の指示情報は等しくはならず、2つのインデックス値を符号化し、インデックス値aの値が1であり、インデックス値bの値が3であると仮定し、インデックス値aを先に符号化する場合、インデックス値bは2(即ち、3-1)を符号化することができ、インデックス値bを先に符号化する場合、インデックス値bは3を符号化する必要がある。以上のように、インデックス値が小さい指示情報を先に符号化すると、大きなインデックス値の符号化コストを低減することができる。例えば、第1目標動き情報の指示情報、例えばインデックス値aを先に符号化し、第2目標動き情報の指示情報、例えばインデックス値bを後に符号化する。第2目標動き情報の指示情報、例えばインデックス値bを先に符号化し、第1目標動き情報の指示情報、例えばインデックス値aを後に符号化してもよい。例えば、インデックス値aの値が1であり、インデックス値bの値が3であると仮定すると、インデックス値aを先に符号化し、インデックス値bを後に符号化する。また例えば、インデックス値bの値が1であり、インデックス値aの値が3であると仮定すると、インデックス値bを先に符号化し、インデックス値aを後に符号化する。
方式2として、動き情報候補リストから候補動き情報を現在ブロックの第1の元の動き情報として選択し、かつ動き情報候補リストから候補動き情報を現在ブロックの第2の元の動き情報として選択し、例示的には、該第1の元の動き情報と該第2の元の動き情報とは異なっていてもよく、即ち動き情報候補リストから2つの異なる候補動き情報を第1の元の動き情報及び第2の元の動き情報として選択し、あるいは、該第1の元の動き情報と該第2の元の動き情報とは同じであってもよく、即ち動き情報候補リストから同じ候補動き情報を第1の元の動き情報及び第2の元の動き情報として選択する。そして、該第1の元の動き情報に基づいて現在ブロックの第1目標動き情報を決定し、かつ該第2の元の動き情報に基づいて現在ブロックの第2目標動き情報を決定する。例示的には、該第1目標動き情報と該第2目標動き情報とは異なっていてもよい。
どのように元の動き情報に基づいて目標動き情報を決定するかについて、本実施例では単方向動き情報に動きベクトル差(Angular Weighted Prediction with Motion Vector Refinement、AWP_MVR)を重畳する手段を提供し、例えば、第1の元の動き情報は第1の元の動きベクトルを含み、第1目標動き情報は第1目標動きベクトルを含み、第2の元の動き情報は第2の元の動きベクトルを含み、第2目標動き情報は第2目標動きベクトルを含み、その上で、第1の元の動きベクトルに対応する第1動きベクトル差(即ちMVD)を取得することができ、第1動きベクトル差及び第1の元の動きベクトルに基づいて第1目標動きベクトル(即ち第1動きベクトル差と第1の元の動きベクトルとの和を第1目標動きベクトルとする)を決定する。第2の元の動きベクトルに対応する第2動きベクトル差を取得することができ、第2動きベクトル差及び第2の元の動きベクトルに基づいて第2目標動きベクトル(即ち第2動きベクトル差と第2の元の動きベクトルとの和を第2目標動きベクトルとする)を決定する。
例示的には、第1目標動きベクトルを決定するとき、第1動きベクトル差を重畳しなくてもよく、即ち第1の元の動きベクトルを第1目標動きベクトルとして決定する。しかし、第2目標動きベクトルを決定するとき、第2動きベクトル差を重畳してもよく、即ち第2動きベクトル差及び第2の元の動きベクトルに基づいて第2目標動きベクトルを決定する。
あるいは、第2目標動きベクトルを決定するとき、第2動きベクトル差を重畳しなくてもよく、即ち第2の元の動きベクトルを第2目標動きベクトルとして決定する。しかし、第1目標動きベクトルを決定するとき、第1動きベクトル差を重畳してもよく、即ち第1動きベクトル差及び第1の元の動きベクトルに基づいて第1目標動きベクトルを決定する。
あるいは、第1目標動きベクトルを決定するとき、第1動きベクトル差を重畳してもよく、即ち第1動きベクトル差及び第1の元の動きベクトルに基づいて第1目標動きベクトルを決定する。第2目標動きベクトルを決定するとき、第2動きベクトル差を重畳してもよく、即ち第2動きベクトル差及び第2の元の動きベクトルに基づいて第2目標動きベクトルを決定する。
例示的には、第1動きベクトル差の方向情報及び振幅情報を取得し、かつ第1動きベクトル差の方向情報及び振幅情報に基づいて第1動きベクトル差を決定する。及び、第2動きベクトル差の方向情報及び振幅情報を取得し、かつ第2動きベクトル差の方向情報及び振幅情報に基づいて第2動きベクトル差を決定することができる。
例示的には、復号側では、以下のような方式で第1動きベクトル差の方向情報を取得してもよい:復号側が現在ブロックの符号化ビットストリームから第1動きベクトル差の方向情報を解析し、あるいは、復号側が現在ブロックの重み予測角度に基づいて第1動きベクトル差の方向情報を導出する。復号側では、以下のような方式で第2動きベクトル差の方向情報を取得してもよい:復号側が現在ブロックの符号化ビットストリームから第2動きベクトル差の方向情報を解析し、あるいは、復号側が現在ブロックの重み予測角度に基づいて第2動きベクトル差の方向情報を導出する。
例示的には、復号側では、現在ブロックの符号化ビットストリームから第1動きベクトル差の振幅情報を解析する、という方式を採用して第1動きベクトル差の振幅情報を取得することができる。現在ブロックの符号化ビットストリームから第2動きベクトル差の振幅情報を解析する、という方式を採用して第2動きベクトル差の振幅情報を取得することができる。
可能な一実施形態では、符号化側及び復号側は動きベクトル差の方向情報及び振幅情報を約束することができ、方向情報が方向を右向きと表し、振幅情報が振幅をAと表す場合、動きベクトル差は(A,0)であり、方向情報が方向を下向きと表し、振幅情報が振幅をAと表す場合、動きベクトル差は(0,-A)であり、方向情報が方向を左向きと表し、振幅情報が振幅をAと表す場合、動きベクトル差は(-A,0)であり、方向情報が方向を上向きと表し、振幅情報が振幅をAと表す場合、動きベクトル差は(0,A)であり、方向情報が方向を右上向きと表し、振幅情報が振幅をAと表す場合、動きベクトル差は(A,A)であり、方向情報が方向を左上向きと表し、振幅情報が振幅をAと表す場合、動きベクトル差は(-A,A)であり、方向情報が方向を左下向きと表し、振幅情報が振幅をAと表す場合、動きベクトル差は(-A,-A)であり、方向情報が方向を右下向きと表し、振幅情報が振幅をAと表す場合、動きベクトル差は(A,-A)である。もちろん、上記はいくつかの例示に過ぎず、この方向情報及び振幅情報に対して制限しない。
例示的には、動きベクトル差は、上記方向情報の一部又は全部をサポートすることができ、動きベクトル差がサポートする振幅Aの値の範囲は、経験的に設定されてもよく、少なくとも1つの値であってもよいが、これに対して制限しない。例えば、動きベクトル差は上、下、左、右などの方向をサポートし、動きベクトル差は1/4-pel、1/2-pel、1-pel、2-pel、4-pelの5種類のステップ構成をサポートし、即ち振幅Aの値は1、2、4、8、16である。以上のように、方向が上向きの場合、動きベクトル差は、(0,1)、(0,2)、(0,4)、(0,8)、(0,16)であってもよい。方向が下向きの場合、動きベクトル差は、(0,-1),(0,-2),(0,-4),(0,-8),(0,-16)であってもよい。方向が左向きの場合、動きベクトル差は、(-1,0)、(-2,0)、(-4,0)、(-8,0)、(-16,0)であってもよい。方向が右向きの場合、動きベクトル差は、(1,0)、(2,0)、(4,0)、(8,0)、(16,0)であってもよい。
また例えば、動きベクトル差は上、下、左、右などの方向をサポートし、動きベクトル差は1/4-pel、1/2-pel、1-pel、2-pel、3-pel、4-pelの6種類のステップ構成をサポートし、即ち振幅Aの値は1、2、4、8、12、16であってもよい。
また例えば、動きベクトル差は上、下、左、右、左上、左下、右上、右下などの8つの方向をサポートし、動きベクトル差は1/4-pel、1/2-pel、1-pelの3種類のステップ構成をサポートし、即ち振幅Aの値は1、2、4であってもよい。
また例えば、動きベクトル差は上、下、左、右などの4つの方向をサポートし、動きベクトル差は1/4-pel、1/2-pel、1-pel、2-pelの4種類のステップ構成をサポートし、即ち振幅Aの値は1、2、4、8であってもよい。
もちろん、上記は、いくつかの例を示したに過ぎず、これに対して制限しない。例えば、動きベクトル差がサポートする方向は任意に選択可能であり、例えば、上、下、左、右、左上、左下などの6つの方向をサポートするか、又は、上、下などの2つの方向をサポートするなどであってもいい。また例えば、動きベクトル差がサポートするステップ構成は可変であり、柔軟な設定が可能となる。また例えば、量子化パラメータQPなどの符号化パラメータに基づいてステップ構成を適応的に設定することができ、例えば大きいQPでは1-pel、2-pel、4-pel、8-pelを、小さいQPでは1/4-pel、1/2-pel、1-pel、2-pelを採用する。また例えば、復号側がシーケンスレベル、画像レベル、フレームレベル、Sliceレベル、tileレベル、patchレベル、CTUレベルから解析したステップ構成に基づいて復号操作を行うことができるように、シーケンスレベル、画像レベル、フレームレベル、Sliceレベル、tileレベル、patchレベル、CTUレベルなどに適切なステップ構成を設定することができる。
説明の便宜上、後続の実施例では、動きベクトル差が上、下などの方向をサポートし、1-pel、2-pelなどのステップ構成をサポートすると仮定し、1/4-pel精度で説明する場合、動きベクトル差は、(0,4)、(0,8)、(0,-4)、(0,-8)、即ち、(0,1<<2)、(0,1<<3)、(0,-1<<2)、(0,-1<<3)であってもよい。
符号化側では、動き情報候補リストを取得した後、動き情報候補リストにおける各候補動き情報組み合わせを順次トラバースし、該候補動き情報組み合わせは2つの候補動き情報を含み、1つの候補動き情報を第1の元の動き情報とし、もう1つの候補動き情報を第2の元の動き情報とする。なお、第1の元の動き情報と第2の元の動き情報とは同じであってもよいし(即ち動き情報候補リストから選択された2つの候補動き情報は同じである)、異なっていてもよい。第1の元の動き情報と第2の元の動き情報とが同じであれば、異なる動きベクトル差を重畳することによって第1目標動き情報と第2目標動き情報とが異なることを保証することができる。各候補動き情報組み合わせについて、動きベクトル差組み合わせを順次トラバースし、該動きベクトル差組み合わせは第1動きベクトル差と第2動きベクトル差とを含み、第1動きベクトル差と第2動きベクトル差とは同じであっても異なっていてもよい。例えば、2つの動きベクトル差が存在し、それぞれ動きベクトル差1及び動きベクトル差2であり、動きベクトル差組み合わせ1は動きベクトル差1及び動きベクトル差1であり、動きベクトル差組み合わせ2は動きベクトル差1(即ち第1動きベクトル差)及び動きベクトル差2であり、動きベクトル差組み合わせ3は動きベクトル差2(即ち第1動きベクトル差)及び動きベクトル差1であり、動きベクトル差組み合わせ4は動きベクトル差2及び動きベクトル差2である。
例示的には、現在トラバースされている候補動き情報組み合わせ及び動きベクトル差組み合わせについて、第1の元の動き情報と第2の元の動き情報とが異なる場合、第1動きベクトル差と第2動きベクトル差とは同じであっても異なっていてもよい。第1の元の動き情報と第2の元の動き情報とが同じである場合、第1動きベクトル差と第2動きベクトル差とは異なっていてもよい。
現在トラバースされている候補動き情報組み合わせ及び動きベクトル差組み合わせについて、第1の元の動き情報の動きベクトルと第1動きベクトル差との和を第1目標動きベクトルとし、第2の元の動き情報の動きベクトルと第2動きベクトル差との和を第2目標動きベクトルとし、第1目標動きベクトル及び第2目標動きベクトルに基づいてレート歪みコスト値を決定し、この決定方式に対して制限しない。各候補動き情報組み合わせ及び各動きベクトル差組み合わせについて上記処理を行い、いずれもレート歪みコスト値を得る。そして、全てのレート歪みコスト値から最小レート歪みコスト値を選択し、現在ブロックの符号化ビットストリームにおいて最小レート歪みコスト値に対応する候補動き情報組み合わせ(第1の元の動き情報及び第2の元の動き情報)の情報及び動きベクトル差組み合わせ(第1動きベクトル差及び第2動きベクトル差)の情報を符号化する。
例えば、現在ブロックの符号化ビットストリームに、最小レート歪みコスト値に対応する第1の元の動き情報の動き情報候補リストにおけるインデックス値、最小レート歪みコスト値に対応する第2の元の動き情報の動き情報候補リストにおけるインデックス値、最小レート歪みコスト値に対応する第1動きベクトル差の方向情報及び振幅情報、最小レート歪みコスト値に対応する第2動きベクトル差の方向情報及び振幅情報を符号化する。例えば、第1動きベクトル差の方向情報又は第2動きベクトル差の方向情報について、該方向情報の指示情報は0であってもよく、方向リスト内の1番目の方向を表すために用いられる。第1動きベクトル差の振幅情報又は第2動きベクトル差の振幅情報について、該振幅情報の指示情報は0であってもよく、ステップ構成リスト内の1番目のステップ構成を表す。
例えば、動きベクトル差が上、下、左、右などの4つの方向をサポートし、動きベクトル差が1/4-pel、1/2-pel、1-pel、2-pel、4-pelなどの5種類のステップ構成をサポートする場合、動きベクトル差の方向情報は2bin固定長符号(計4種類の値)で符号化することができ、2bin固定長符号の4つの値はそれぞれ上、下、左、右の4つの方向を表す。動きベクトル差の振幅情報は、トランケーテッド・ユーナリ(Truncated Unary)で符号化することができ、即ちトランケーテッド・ユーナリにより5種類のステップ構成を表す。
また例えば、動きベクトル差が上、下、左、右の4つの方向をサポートし、動きベクトル差が1/4-pel、1/2-pel、1-pel、2-pel、3-pel、4-pelの6種類のステップ構成をサポートする場合、動きベクトル差の方向情報は2bin固定長符号(計4種類の値)で符号化することができ、動きベクトル差の振幅情報はトランケーテッド・ユーナリで符号化することができる。
また例えば、動きベクトル差が上、下、左、右、左上、左下、右上、右下の8つの方向をサポートし、動きベクトル差が1/4-pel、1/2-pel、1-pelなどの3種類のステップ構成をサポートする場合、動きベクトル差の方向情報は3bin固定長符号(計8種類の値)で符号化することができ、動きベクトル差の振幅情報はトランケーテッド・ユーナリで符号化することができる。
また例えば、動きベクトル差が上、下、左、右の4つの方向をサポートし、動きベクトル差が1/4-pel、1/2-pel、1-pel、2-pelの4種類のステップ構成をサポートする場合、これに基づいて、動きベクトル差の方向情報はトランケーテッド・ユーナリで符号化することができ、動きベクトル差の振幅情報は2bin固定長符号(計4種類の値)で符号化することができる。
もちろん、上記は符号化方式のいくつかの例に過ぎず、この符号化方式に対して制限しない。
以上のように、符号化側では、一定領域内で最適動きベクトル(即ち目標動きベクトル)を探索し、その後最適動きベクトルと元の動きベクトルとの差値を、動きベクトル差(MVD)とし、動きベクトル差の振幅情報及び方向情報をビットストリームに符号化する。符号化側は、一定領域内で最適動きベクトルを探索する際、動きベクトル差の方向及び振幅を約束する必要があり、即ち、(A,0),(0,-A),(-A,0),(0,A),(A,A),(-A,A),(-A,-A),(A,-A)などの動きベクトル差の限定範囲内で、最適動きベクトルを探索する。
復号側では、現在ブロックの符号化ビットストリームを受信した後、符号化ビットストリームから第1の元の動き情報の動き情報候補リストにおけるインデックス値を解析し、かつ動き情報候補リストから該インデックス値に対応する候補動き情報を選択し、該候補動き情報を現在ブロックの第1の元の動き情報とすることができる。復号側は符号化ビットストリームから第2の元の動き情報の動き情報候補リストにおけるインデックス値を解析し、かつ動き情報候補リストから該インデックス値に対応する候補動き情報を選択し、該候補動き情報を現在ブロックの第2の元の動き情報とすることができる。
復号側は該符号化ビットストリームから第1動きベクトル差の方向情報及び振幅情報を解析し、かつ該方向情報及び該振幅情報に基づいて第1動きベクトル差を決定することができる。及び、復号側は、該符号化ビットストリームから第2動きベクトル差の方向情報及び振幅情報を解析し、かつ該方向情報及び該振幅情報に基づいて第2動きベクトル差を決定することもできる。
そして、復号側は第1動きベクトル差及び第1の元の動き情報に基づいて現在ブロックの第1目標動き情報を決定し、かつ第2動きベクトル差及び第2の元の動き情報に基づいて現在ブロックの第2目標動き情報を決定することができる。
例示的には、第1動きベクトル差の方向情報及び第1動きベクトル差の振幅情報に基づいて第1動きベクトル差を決定するとき、第1動きベクトル差の方向情報が方向を右向きと表し、第1動きベクトル差の振幅情報が振幅をAと表す場合、第1動きベクトル差は(A,0)であり、第1動きベクトル差の方向情報が方向を下向きと表し、第1動きベクトル差の振幅情報が振幅をAと表す場合、第1動きベクトル差は(0,-A)であり、第1動きベクトル差の方向情報が方向を左向きと表し、第1動きベクトル差の振幅情報が振幅をAと表す場合、第1動きベクトル差は(-A,0)であり、第1動きベクトル差の方向情報が方向を上向きと表し、第1動きベクトル差の振幅情報が振幅をAと表す場合、第1動きベクトル差は(0,A)である。第2動きベクトル差の方向情報及び第2動きベクトル差の振幅情報に基づいて第2動きベクトル差を決定するとき、第2動きベクトル差の方向情報が方向を右向きと表し、第2動きベクトル差の振幅情報が振幅をAと表す場合、第2動きベクトル差は(A,0)であり、第2動きベクトル差の方向情報が方向を下向きと表し、第2動きベクトル差の振幅情報が振幅をAと表す場合、第2動きベクトル差は(0,-A)であり、第2動きベクトル差の方向情報が方向を左向きと表し、第2動きベクトル差の振幅情報が振幅をAと表す場合、第2動きベクトル差は(-A,0)であり、第2動きベクトル差の方向情報が方向を上向きと表し、第2動きベクトル差の振幅情報が振幅をAと表す場合、第2動きベクトル差は(0,A)である。
上記実施例を参照すると、符号化側は動きベクトル差の方向情報を符号化する際に、固定長符号、トランケーテッド・ユーナリなどの方式を採用することができ、したがって、復号側は固定長符号、トランケーテッド・ユーナリなどの方式を採用して、動きベクトル差の方向情報を復号し、動きベクトル差の方向情報、例えば、上、下、左、右、左上、左下、右上、右下などを取得することができる。
上記実施例を参照すると、符号化側は動きベクトル差の振幅情報を符号化する際に、固定長符号、トランケーテッド・ユーナリなどの方式を採用することができ、したがって、復号側は固定長符号、トランケーテッド・ユーナリなどの方式を採用して、動きベクトル差の振幅情報を復号し、動きベクトル差の振幅情報、例えば1/4-pel、1/2-pel、1-pel、2-pelなどのステップ構成を取得し、続いて1/4-pel、1/2-pel、1-pel、2-pelなどのステップ構成に基づいて動きベクトル差の振幅Aの値を決定することができる。
可能な一実施形態では、符号化側は符号化ビットストリームにおいて強調角度重み付け予測モードの第1サブモードフラグ及び第2サブモードフラグを符号化することもでき、該第1サブモードフラグは第1の元の動き情報に動きベクトル差を重畳するか、あるいは、第1の元の動き情報に動きベクトル差を重畳しないことを示す。該第2サブモードフラグは第2の元の動き情報に動きベクトル差を重畳するか、あるいは、第2の元の動き情報に動きベクトル差を重畳しないことを示す。
復号側は現在ブロックの符号化ビットストリームを受信した後、まず現在ブロックの符号化ビットストリームから強調角度重み付け予測モードの第1サブモードフラグ及び第2サブモードフラグを解析することができる。第1サブモードフラグは第1の元の動き情報に動きベクトル差を重畳することを示す場合、現在ブロックの符号化ビットストリームから第1動きベクトル差の方向情報及び振幅情報を解析し、かつ第1動きベクトル差の方向情報及び振幅情報に基づいて第1動きベクトル差を決定し、続いて第1の元の動き情報及び第1動きベクトル差に基づいて現在ブロックの第1目標動き情報を決定する。第1サブモードフラグは第1の元の動き情報に動きベクトル差を重畳しないことを示す場合、第1動きベクトル差の方向情報及び振幅情報を解析せず、直接第1の元の動き情報を現在ブロックの第1目標動き情報とすることができる。第2サブモードフラグは第2の元の動き情報に動きベクトル差を重畳することを示す場合、現在ブロックの符号化ビットストリームから第2動きベクトル差の方向情報及び振幅情報を解析し、かつ第2動きベクトル差の方向情報及び振幅情報に基づいて第2動きベクトル差を決定し、続いて第2の元の動き情報及び第2動きベクトル差に基づいて現在ブロックの第2目標動き情報を決定する。第2サブモードフラグは第2の元の動き情報に動きベクトル差を重畳しないことを示す場合、第2動きベクトル差の方向情報及び振幅情報を解析せず、直接第2の元の動き情報を現在ブロックの第2目標動き情報とすることができる。
例示的には、強調角度重み付け予測モードの第1サブモードフラグが第1値である場合、第1の元の動き情報に動きベクトル差を重畳することを示し、強調角度重み付け予測モードの第1サブモードフラグが第2値である場合、第1の元の動き情報に動きベクトル差を重畳しないことを表す。強調角度重み付け予測モードの第2サブモードフラグが第1値である場合、第2の元の動き情報に動きベクトル差を重畳することを示し、強調角度重み付け予測モードの第2サブモードフラグが第2値である場合、第2の元の動き情報に動きベクトル差を重畳しないことを表す。第1値及び第2値は経験的に設定されてもよく、例えば第1値は1であり、第2値は0であり、あるいは、例えば第1値は0であり、第2値は1である。
上記実施例では、復号側は現在ブロックの符号化ビットストリームから第1動きベクトル差の方向情報及び第2動きベクトル差の方向情報を解析し、実際の適用では、現在ブロックの重み予測角度に基づいて第1動きベクトル差の方向情報を導出し、かつ現在ブロックの重み予測角度に基づいて第2動きベクトル差の方向情報を導出することもできる。
例えば、現在ブロックの重み予測角度は角度方向を表し、図6に示す8種類の角度方向を参照し、現在ブロックの重み予測角度は8種類の角度方向のうちのある角度方向を表し、復号側にとって、全ての方向情報(例えば上、下、左、右、左上、左下、右上、右下など)から該角度方向にマッチングする方向情報を選択し、直接該方向情報を第1動きベクトル差の方向情報及び第2動きベクトル差の方向情報とすることができる。
該角度方向にマッチングする方向情報は、該方向情報と該角度方向との間の角度差が予め設定された角度であるか又は予め設定された角度に近く、あるいは、全ての方向情報の中で、該方向情報と該角度方向との間の角度差と予め設定された角度との差値が最小であることを含んでもよい。該予め設定された角度は経験的に設定されてもよく、例えば該予め設定された角度は90度であってもよい。
例示的には、符号化側では、レート歪みコスト値の方式を採用して第1動きベクトル差の方向情報及び第2動きベクトル差の方向情報を決定する必要がなく、現在ブロックの重み予測角度に基づいて第1動きベクトル差の方向情報を導出し、かつ現在ブロックの重み予測角度に基づいて第2動きベクトル差の方向情報を導出することもできる。符号化側が現在ブロックの符号化ビットストリームを復号側に送信するとき、第1動きベクトル差の方向情報及び第2動きベクトル差の方向情報を符号化せず、復号側によって第1動きベクトル差の方向情報及び第2動きベクトル差の方向情報を導出することもできる。
実施例16:実施例15では、復号側は符号化ビットストリームから第1動きベクトル差の振幅情報及び第2動きベクトル差の振幅情報を解析することができ、可能な一実施形態では、符号化側及び復号側は同じ動きベクトル差振幅リストを構築することができ、符号化側は第1動きベクトル差の振幅情報の該動きベクトル差振幅リストにおける振幅インデックスを決定し、かつ符号化ビットストリームは第1動きベクトル差の振幅インデックスを含む。復号側は現在ブロックの符号化ビットストリームから第1動きベクトル差の振幅インデックスを解析し、かつ該動きベクトル差振幅リストから該振幅インデックスに対応する振幅情報を選択し、該振幅情報は即ち第1動きベクトル差の振幅情報である。符号化側は第2動きベクトル差の振幅情報の該動きベクトル差振幅リストにおける振幅インデックスを決定し、かつ符号化ビットストリームは第2動きベクトル差の振幅インデックスを含む。復号側は現在ブロックの符号化ビットストリームから第2動きベクトル差の振幅インデックスを解析し、かつ該動きベクトル差振幅リストから該振幅インデックスに対応する振幅情報を選択し、該振幅情報は即ち第2動きベクトル差の振幅情報である。
別の可能な実施形態では、符号化側及び復号側は同じ少なくとも2つの動きベクトル差振幅リストを構築することができ、例えば符号化側及び復号側は同じ動きベクトル差振幅リスト1を構築し、かつ同じ動きベクトル差振幅リスト2を構築する。符号化側はまず動きベクトル差振幅リストの指示情報に基づいて、全ての動きベクトル差振幅リストから目標動きベクトル差振幅リストを選択し、符号化側は第1動きベクトル差の振幅情報の該目標動きベクトル差振幅リストにおける振幅インデックスを決定し、かつ符号化ビットストリームは第1動きベクトル差の振幅インデックスを含む。
符号化側は第2動きベクトル差の振幅情報の該目標動きベクトル差振幅リストにおける振幅インデックスを決定することもでき、かつ符号化ビットストリームは第2動きベクトル差の振幅インデックスを含んでもよい。復号側は現在ブロックの符号化ビットストリームから第2動きベクトル差の振幅インデックスを解析し、かつ該目標動きベクトル差振幅リストから該振幅インデックスに対応する振幅情報を選択することができ、該振幅情報は即ち第2動きベクトル差の振幅情報である。
例示的には、動きベクトル差振幅リストの指示情報は、任意のレベルの指示情報であってもよく、例えば、シーケンスレベルの動きベクトル差振幅リストの指示情報、フレームレベルの動きベクトル差振幅リストの指示情報、Sliceレベルの動きベクトル差振幅リストの指示情報、Tileレベルの動きベクトル差振幅リストの指示情報、Patchレベルの動きベクトル差振幅リストの指示情報、CTUレベルの動きベクトル差振幅リストの指示情報、LCUレベルの動きベクトル差振幅リストの指示情報、ブロックレベルの動きベクトル差振幅リストの指示情報、CUレベルの動きベクトル差振幅リストの指示情報、PUレベルの動きベクトル差振幅リストの指示情報であってもよく、これに対して制限せず、説明の便宜上、フレームレベルの動きベクトル差振幅リストの指示情報を例にとって、フレームレベルの動きベクトル差振幅リストの指示情報はawp_umve_offset_list_flagであってもよく、awp_umve_offset_list_flagによって動きベクトル差振幅リストの切り替えを制御する。
例えば、符号化側及び復号側は動きベクトル差振幅リスト1及び動きベクトル差振幅リスト2を構築することができ、表3及び表4を参照されたい。動きベクトル差振幅リスト1を2値化処理し、かつ動きベクトル差振幅リスト2を2値化処理することができ、この処理方式に対して制限しない。例えば、動きベクトル差振幅リスト1に対してトランケーテッド・ユーナリを採用し、動きベクトル差振幅リスト2に対してトランケーテッド・ユーナリを採用し、あるいは、動きベクトル差振幅リスト1に対してトランケーテッド・ユーナリを採用し、動きベクトル差振幅リスト2に対して固定長符号を採用し、あるいは、動きベクトル差振幅リスト1に対して固定長符号を採用し、動きベクトル差振幅リスト2に対してトランケーテッド・ユーナリを採用し、これに対して制限せず、表5及び表6を参照されたい。
上記適用シーンでは、awp_umve_offset_list_flagによって動きベクトル差振幅リストの切り替えを制御し、即ち表3に示す動きベクトル差振幅リストを採用するか、又は表4に示す動きベクトル差振幅リストを採用するかを制御する。例えば、awp_umve_offset_list_flagの値が第1値である場合、表3に示す動きベクトル差振幅リストは目標動きベクトル差振幅リストであり、awp_umve_offset_list_flagの値が第2値である場合、表4に示す動きベクトル差振幅リストは目標動きベクトル差振幅リストであり、あるいは、awp_umve_offset_list_flagの値が第2値である場合、表3に示す動きベクトル差振幅リストは目標動きベクトル差振幅リストであり、awp_umve_offset_list_flagの値が第1値である場合、表4に示す動きベクトル差振幅リストは目標動きベクトル差振幅リストである。
目標動きベクトル差振幅リストが表3である場合、符号化側は表5に示す2値化方式を採用して符号化し、復号側は表5に示す2値化方式を採用して復号する。目標動きベクトル差振幅リストが表4である場合、符号化側は表6に示す2値化方式を採用して符号化し、復号側は表6に示す2値化方式を採用して復号する。
実施例17:実施例15又は実施例16に加えて、第1動きベクトル差及び第2動きベクトル差について、以下、具体的な適用シーンを参照して、単方向動き情報に動きベクトル差AWP_MVRを重畳することに関連するシンタックスについて説明する。
適用シーン1:表7を参照すると、関連するシンタックスの例であり、SkipFlagは、現在ブロックがSkipモードであるか否かを表し、DirectFlagは、現在ブロックがDirectモードであるか否かを表し、AwpFlagは、現在ブロックがAWPモードであるか否かを表す。
awp_idx(角度重み付け予測モードインデックス):スキップモード又はダイレクトモードでの角度重み付け予測モードインデックス値であり、AwpIdxの値は、awp_idxの値に等しくてもよい。awp_idxがビットストリームに存在しない場合、AwpIdxの値は0に等しい。
awp_cand_idx0(角度重み付け予測モードの第1動き情報インデックス):スキップモード又はダイレクトモードでの角度重み付け予測モードの第1動き情報インデックス値である。AwpCandIdx0の値はawp_cand_idx0の値に等しく、awp_cand_idx0がビットストリームに存在しない場合、AwpCandIdx0の値は0に等しい。
awp_cand_idx1(角度重み付け予測モードの第2動き情報インデックス):スキップモード又はダイレクトモードでの角度重み付け予測モードの第2動き情報インデックス値である。AwpCandIdx1の値はawp_cand_idx1の値に等しく、awp_cand_idx1がビットストリームに存在しない場合、AwpCandIdx1の値は0に等しい。
awp_mvd_flag(強調角度重み付け予測モードフラグ)は、2値変数であり、awp_mvd_flagが第1値(例えば1)である場合、現在ブロックが強調角度重み付け予測モードであることを表し、awp_mvd_flagが第2値(例えば0)である場合、現在ブロックが非強調角度重み付け予測モードであることを表す。例示的には、AwpMvdFlagの値は、awp_mvd_flagの値に等しくてもよく、awp_mvd_flagがビットストリームに存在しない場合、AwpMvdFlagの値は0に等しい。
awp_mvd_sub_flag0(強調角度重み付け予測モードの第1サブモードフラグ)は、2値変数であってもよく、awp_mvd_sub_flag0が第1値である場合、角度重み付け予測モードの第1動き情報に動き情報差を重畳する必要があることを表すことができ、awp_mvd_sub_flag0が第2値である場合、角度重み付け予測モードの第1動き情報に動き情報差を重畳する必要がないことを表すことができる。例示的には、AwpMvdSubFlag0の値はawp_mvd_sub_flag0の値に等しくてもよく、awp_mvd_sub_flag0がビットストリームに存在しない場合、AwpMvdSubFlag0の値は0に等しい。
awp_mvd_sub_flag1(強調角度重み付け予測モードの第2サブモードフラグ)は、2値変数であってもよく、awp_mvd_sub_flag1が第1値である場合、角度重み付け予測モードの第2動き情報に動き情報差を重畳する必要があることを表すことができ、awp_mvd_sub_flag1が第2値である場合、角度重み付け予測モードの第2動き情報に動き情報差を重畳する必要がないことを表すことができる。例示的には、AwpMvdSubFlag1の値はawp_mvd_sub_flag1の値に等しくてもよく、awp_mvd_sub_flag1がビットストリームに存在しない場合、以下の場合が存在してもよく、AwpMvdFlagが1に等しい場合、AwpMvdSubFlag1の値は1に等しく、そうでない場合、AwpMvdSubFlag1の値は0に等しくてもよい。
awp_mvd_dir0(第1動き情報の動きベクトル差の方向インデックス値)は、角度重み付け予測モードの第1動き情報の動きベクトル差の方向インデックス値である。例示的には、AwpMvdDir0の値はawp_mvd_dir0の値に等しくてもよく、awp_mvd_dir0がビットストリームに存在しない場合、AwpMvdDir0の値は0に等しくてもよい。
awp_mvd_step0(第1動き情報の動きベクトル差のステップインデックス値)、角度重み付け予測モードの第1動き情報の動きベクトル差のステップインデックス値。例示的には、AwpMvdStep0の値はawp_mvd_step0の値に等しくてもよく、awp_mvd_step0がビットストリームに存在しない場合、AwpMvdStep0の値は0に等しくてもよい。
awp_mvd_dir1(第2動き情報の動きベクトル差の方向インデックス値)、角度重み付け予測モードの第2動き情報の動きベクトル差の方向インデックス値。例示的には、AwpMvdDir1の値はawp_mvd_dir1の値に等しくてもよい。awp_mvd_dir1がビットストリームに存在しない場合、AwpMvdDir1の値は0に等しくてもよい。
awp_mvd_step1(第2動き情報の動きベクトル差のステップインデックス値)、角度重み付け予測モードの第2動き情報の動きベクトル差のステップインデックス値。例示的には、AwpMvdStep1の値はawp_mvd_step1の値に等しくてもよい。awp_mvd_step1がビットストリームに存在しない場合、AwpMvdStep1の値は0に等しくてもよい。
適用シーン2:表8を参照すると、関連するシンタックスの例であり、SkipFlagは、現在ブロックがSkipモードであるか否かを表し、DirectFlagは、現在ブロックがDirectモードであるか否かを表し、AwpFlagは、現在ブロックがAWPモードであるか否かを表す。
awp_idx、awp_cand_idx0及びawp_cand_idx1については、適用シーン1を参照することができ、ここではその説明を省略する。
awp_mvd_sub_flag0(強調角度重み付け予測モードの第1サブモードフラグ)は、2値変数であってもよく、awp_mvd_sub_flag0が第1値である場合、角度重み付け予測モードの第1動き情報に動き情報差を重畳する必要があることを表すことができ、awp_mvd_sub_flag0が第2値である場合、角度重み付け予測モードの第1動き情報に動き情報差を重畳する必要がないことを表すことができる。例示的には、AwpMvdSubFlag0の値はawp_mvd_sub_flag0の値に等しくてもよく、awp_mvd_sub_flag0がビットストリームに存在しない場合、AwpMvdSubFlag0の値は0に等しい。
awp_mvd_sub_flag1(強調角度重み付け予測モードの第2サブモードフラグ)は、2値変数であってもよく、awp_mvd_sub_flag1が第1値である場合、角度重み付け予測モードの第2動き情報に動き情報差を重畳する必要があることを表すことができ、awp_mvd_sub_flag1が第2値である場合、角度重み付け予測モードの第2動き情報に動き情報差を重畳する必要がないことを表すことができる。例示的には、AwpMvdSubFlag1の値はawp_mvd_sub_flag1の値に等しくてもよく、awp_mvd_sub_flag1がビットストリームに存在しない場合、AwpMvdSubFlag1の値は0に等しくてもよい。
awp_mvd_dir0、awp_mvd_step0、awp_mvd_dir1、awp_mvd_step1については、適用シーン1を参照されたい。
例示的には、適用シーン1及び適用シーン2について、両者の違いは、適用シーン1にはシンタックスawp_mvd_flagが存在し、適用シーン2にはシンタックスawp_mvd_flagが存在しない点である。適用シーン1では、awp_mvd_flagによって強調角度重み付け予測モードを制御し、即ちトータルスイッチによって強調角度重み付け予測モードを制御することができる。
適用シーン3:適用シーン1及び適用シーン2を派生し、AWPモードとAWP_MVRモードを融合し、即ちスパンに0スパン増加し、それによってイネーブルか否かを示すフラグビットを符号化する必要がない。例えば、動きベクトル差は上、下、左、右などの方向をサポートし、動きベクトル差は、0-pel、1/4-pel、1/2-pel、1-pel、2-pel、4-pelのようなステップ構成をサポートし、即ちステップ構成0-pelを追加する。その上で、表7/表8は表9に更新されてもよく、関連するシンタックスは表7を参照する。
例示的には、各適用シーンについて、関連するシンタックスにおけるシンタックス元素の順序を相応して調整することができ、例えば、表8に示す関連するシンタックスについて、シンタックス元素の順序を相応して調整し、表10に示す関連するシンタックスを得ることができる。
表8及び表10から分かるように、awp_cand_idx0及びawp_cand_idx1の順序を調整することができ、例示的には、表10において、awp_cand_idx0及びawp_cand_idx1の解析方式は、AwpMvdSubFlag0、AwpMvdSubFlag1、AwpMvdDir0、AwpMvdStep0、AwpMvdDir1、及びAwpMvdStep1のうちの1つ以上の値に基づいて調整することができる。例えば、AwpMvdSubFlag0と、AwpMvdSubFlag1とのうちの少なくとも1つの値が1である場合、awp_cand_idx0及びawp_cand_idx1の解析方式は完全に一致し、そうでない場合、解析方式は一致しない。
例示的には、AwpMvdSubFlag0は第1の元の動き情報にMVDを重畳するか否かを表し、重畳する場合、AwpMvdDir0及びAwpMvdStep0に基づいて第1の元の動き情報に対応するMVD値を決定し、AwpMvdSubFlag1は第2の元の動き情報にMVDを重畳するか否かを表し、重畳する場合、AwpMvdDir1及びAwpMvdStep1に基づいて第2の元の動き情報に対応するMVD値を決定する。明らかに、1つの元の動き情報にMVDを重畳し、もう1つの元の動き情報にMVDを重畳せず、又は2つの元の動き情報に重畳されたMVD値が異なる場合、第1の元の動き情報と第2の元の動き情報とが同じであることを許可し、awp_cand_idx0は第1の元の動き情報のインデックス値を表し、awp_cand_idx1は第2の元の動き情報のインデックス値を表し、したがって、awp_cand_idx0及びawp_cand_idx1の解析方式は完全に一致し、即ち完全な動き情報候補リストからawp_cand_idx0に対応する第1の元の動き情報を解析し、かつ完全な動き情報候補リストからawp_cand_idx1に対応する第2の元の動き情報を解析する。
2つの元の動き情報のいずれもMVDが重畳されていないか、あるいは、2つの元の動き情報に重畳されたMVD値が同じである場合、第1の元の動き情報は第2の元の動き情報と異なり、これに基づいて、awp_cand_idx0及びawp_cand_idx1の解析方式は一致せず、完全な動き情報候補リストからawp_cand_idx0に対応する第1の元の動き情報を解析し、第2の元の動き情報は第1の元の動き情報と異なるので、完全な動き情報候補リストからawp_cand_idx1に対応する第2の元の動き情報を解析するのではなく、第1の元の動き情報を除外した上で、不完全な動き情報候補リストからawp_cand_idx1に対応する第2の元の動き情報を解析する。
動き情報候補リストAwpUniArrayに基づいて、AwpUniArrayから2つの候補動き情報を選択し、該2つの候補動き情報に基づいて現在ブロックの第1目標動き情報及び第2目標動き情報を決定する。例えば、復号側は符号化ビットストリームからAwpCandIdx0及びAwpCandIdx1を解析し、AwpUniArrayにおけるAwpCandIdx0+1番目の動き情報をmvAwp0L0、mvAwp0L1、RefIdxAwp0L0、及びRefIdxAwp0L1に割り当てる。AwpUniArrayにおけるAwpCandIdx1+1番目の動き情報をmvAwp1L0、mvAwp1L1、RefIdxAwp1L0、RefIdxAwp1L1に割り当てる。もちろん、AwpUniArrayにおけるAwpCandIdx0+1番目の動き情報をmvAwp1L0、mvAwp1L1、RefIdxAwp1L0、RefIdxAwp1L1に割り当て、AwpUniArrayにおけるAwpCandIdx1+1番目の動き情報をmvAwp0L0、mvAwp0L1、RefIdxAwp0L0、RefIdxAwp0L1に割り当てることもできる。
AwpCandIdx0は第1目標動き情報のインデックス値を表し、したがって、AwpUniArrayにおけるAwpCandIdx0+1番目の動き情報を第1目標動き情報に割り当てることができる。例えば、AwpCandIdx0が0である場合、AwpUniArrayにおける1番目の動き情報を第1目標動き情報に割り当て、このように類推する。
mvAwp0L0、mvAwp0L1、RefIdxAwp0L0、及びRefIdxAwp0L1を合わせて第1目標動き情報とし、即ち第1目標動き情報はList0を指す単方向動き情報及びList1を指す単方向動き情報を含む。
AwpUniArrayにおけるAwpCandIdx0+1番目の動き情報がList0を指す単方向動き情報である場合、第1目標動き情報はList0を指す単方向動き情報を含み、かつList1を指す単方向動き情報はヌルである。
AwpUniArrayにおけるAwpCandIdx0+1番目の動き情報がList1を指す単方向動き情報である場合、第1目標動き情報はList1を指す単方向動き情報を含み、かつList0を指す単方向動き情報はヌルである。
例示的には、mvAwp0L0及びRefIdxAwp0L0は第1目標動き情報のうちList0を指す単方向動き情報を表し、mvAwp0L1及びRefIdxAwp0L1は第1目標動き情報のうちList1を指す単方向動き情報を表す。
RefIdxAwp0L0が有効であれば、List0を指す単方向動き情報が有効であることを表し、したがって、第1目標動き情報の予測モードはPRED_List0である。RefIdxAwp0L1が有効であれば、List1を指す単方向動き情報が有効であることを表し、したがって、第1目標動き情報の予測モードはPRED_List1である。
例示的には、AwpCandIdx1は第2目標動き情報のインデックス値を表し、したがって、AwpUniArrayにおけるAwpCandIdx1+1番目の動き情報を第2目標動き情報に割り当てることができる。例えば、AwpCandIdx1が0である場合、AwpUniArrayにおける1番目の動き情報を第2目標動き情報に割り当て、このように類推する。
mvAwp1L0、mvAwp1L1、RefIdxAwp1L0、RefIdxAwp1L1を合わせて第2目標動き情報とし、即ち第2目標動き情報はList0を指す単方向動き情報及びList1を指す単方向動き情報を含む。
AwpUniArrayにおけるAwpCandIdx1+1番目の動き情報がList0を指す単方向動き情報である場合、第2目標動き情報はList0を指す単方向動き情報を含み、かつList1を指す単方向動き情報はヌルである。
AwpUniArrayにおけるAwpCandIdx1+1番目の動き情報がList1を指す単方向動き情報である場合、第2目標動き情報はList1を指す単方向動き情報を含み、かつList0を指す単方向動き情報はヌルである。
例示的には、mvAwp1L0及びRefIdxAwp1L0は第2目標動き情報のうちList0を指す単方向動き情報を表し、mvAwp1L1及びRefIdxAwp1L1は第2目標動き情報のうちList1を指す単方向動き情報を表す。
RefIdxAwp1L0が有効であれば、List0を指す単方向動き情報が有効であることを表し、したがって、第2目標動き情報の予測モードはPRED_List0である。RefIdxAwp1L1が有効であれば、List1を指す単方向動き情報が有効であることを表し、したがって、第2目標動き情報の予測モードはPRED_List1である。
いくつかの適用では、参照フレームの記憶空間が限られているため、現在フレームがBフレームであるが、List0がList1内の参照フレームのPOCと一致し、即ち同一フレームである場合、AWPモードの性能を最大化するために、伝送された2つの動き情報のシンタックス元素を再設計し、即ち本実施例の方式を採用して動き情報を伝送することができる。一方、Pフレームの場合、同一フレームを指す2つの動きベクトルが一定範囲内に制限され、Pフレームの帯域制限を増加させない場合、AWPモードはPフレームに適用されることができる。
上記発見について、本実施例では、第1目標動き情報が指す参照フレームと第2目標動き情報が指す参照フレームとが同一フレームである場合、即ちAWPモードの2つの動きベクトルが同一フレームを指す場合、第2目標動き情報の動きベクトルは第1目標動き情報の動きベクトルから導出されることができ、即ち1番目の動き情報はインデックス値を伝達し、2番目の動き情報は1番目の動き情報の上でMVDを重畳したものであり、MVDの符号化方式は実施例15又は16を参照する。
表11を参照すると、シンタックス元素の例であり、awp_mvd_dir0は制限角度重み付け予測モードの第1動き情報の動きベクトル差の方向インデックス値を表し、AwpMvdDir0の値はawp_mvd_dir0の値に等しく、ビットストリームにawp_mvd_dir0が存在しない場合、AwpMvdDir0の値は0に等しい。awp_mvd_step0は制限角度重み付け予測モードの第1動き情報の動きベクトル差のステップインデックス値を表し、AwpMvdStep0の値はawp_mvd_step0の値に等しく、ビットストリームにawp_mvd_step0が存在しない場合、AwpMvdStep0の値は0に等しい。awp_mvd_dir1は制限角度重み付け予測モードの第2動き情報の動きベクトル差の方向インデックス値を表し、AwpMvdIdx1の値はawp_mvd_dir1の値に等しく、ビットストリームにawp_mvd_dir1が存在しない場合、AwpMvdDir1の値は0に等しい。awp_mvd_step1は制限角度重み付け予測モードの第2動き情報の動きベクトル差のステップインデックス値を表し、AwpMvdStep1の値はawp_mvd_step1の値に等しく、ビットストリームにawp_mvd_step1が存在しない場合、AwpMvdStep1の値は0に等しい。
以上のように、awp_cand_idxに基づいて元の動き情報(元の動き情報は元の動きベクトルを含む)に基づいて、awp_mvd_dir0及びawp_mvd_step0から第1動きベクトル差MVD0及び第2動きベクトル差MVD1を決定することができる。その上で、元の動きベクトル及び第1動きベクトル差MVD0に基づいて第1目標動きベクトルを決定し、例えば元の動きベクトル+MVD0である。第1目標動きベクトル及び第2動きベクトル差MVD1に基づいて第2目標動きベクトルを決定し、例えば第1目標動きベクトル+MVD1である。第1目標動きベクトルを得た後、第1目標動きベクトルに基づいて第1目標動き情報を得て、第1目標動き情報は第1目標動きベクトルを含む。第2目標動きベクトルを得た後、第2目標動きベクトルに基づいて第2目標動き情報を得て、第2目標動き情報は第2目標動きベクトルを含む。
また例えば、元の動きベクトル及び第1動きベクトル差MVD0に基づいて第1目標動きベクトルを決定し、例えば元の動きベクトル+MVD0である。元の動きベクトル及び第2動きベクトル差MVD1に基づいて第2目標動きベクトルを決定し、例えば元の動きベクトル+MVD1である。第1目標動きベクトルを得た後、第1目標動きベクトルに基づいて第1目標動き情報を得て、第1目標動き情報は第1目標動きベクトルを含む。第2目標動きベクトルを得た後、第2目標動きベクトルに基づいて第2目標動き情報を得て、第2目標動き情報は第2目標動きベクトルを含む。
表12を参照すると、シンタックス元素の別の例であり、awp_mvd_dir及びawp_mvd_stepは、2番目の動き情報(即ち第2目標動き情報)の、1番目の動き情報(即ち第1目標動き情報)におけるMVDのシンタックス表現を構成する。awp_mvd_dirは制限角度重み付け予測モードの動きベクトル差の方向インデックス値を表し、AwpMvdDirの値はawp_mvd_dirの値に等しく、ビットストリームにawp_mvd_dirが存在しない場合、AwpMvdDirの値は0に等しい。awp_mvd_stepは制限角度重み付け予測モードの動きベクトル差のステップインデックス値を表し、AwpMvdStepの値はawp_mvd_stepの値に等しく、ビットストリームにawp_mvd_stepが存在しない場合、AwpMvdStepの値は0に等しい。
以上のように、awp_cand_idxに基づいて元の動き情報(元の動き情報は元の動きベクトルを含む)を決定し、awp_mvd_dir及びawp_mvd_stepに基づいて動きベクトル差MVDを決定することができる。
その上で、元の動きベクトルに基づいて第1目標動きベクトルを決定し、例えば第1目標動きベクトルは元の動きベクトルである。第1目標動きベクトル及び動きベクトル差MVDに基づいて第2目標動きベクトルを決定し、例えば第1目標動きベクトル+MVDである。第1目標動きベクトルを得た後、第1目標動きベクトルに基づいて第1目標動き情報を得て、第1目標動き情報は第1目標動きベクトルを含む。第2目標動きベクトルを得た後、第2目標動きベクトルに基づいて第2目標動き情報を得て、第2目標動き情報は第2目標動きベクトルを含む。
また例えば、元の動きベクトル及び動きベクトル差MVDに基づいて第1目標動きベクトルを決定し、例えば元の動きベクトル+MVDである。元の動きベクトル及び動きベクトル差MVDに基づいて第2目標動きベクトルを決定し、例えば元の動きベクトル-MVDである。あるいは、元の動きベクトル及び動きベクトル差MVDに基づいて第1目標動きベクトルを決定し、例えば元の動きベクトル-MVDである。元の動きベクトル及び動きベクトル差MVDに基づいて第2目標動きベクトルを決定し、例えば元の動きベクトル+MVDである。第1目標動きベクトルを得た後、第1目標動きベクトルに基づいて第1目標動き情報を得て、第1目標動き情報は第1目標動きベクトルを含む。第2目標動きベクトルを得た後、第2目標動きベクトルに基づいて第2目標動き情報を得て、第2目標動き情報は第2目標動きベクトルを含む。以上のことから、MVDが2つの反対方向に同時に作用し、それにより元の動き情報が2つの目標動き情報を導出することを可能にすることが分かる。
可能な一実施形態では、MVDのシンタックス表現は、水平成分と垂直成分の別々の表現でもよく、表13を参照すると、水平成分と垂直成分を別々に表現する例である。awp_mv_diff_x_absは制限角度重み付け予測モードの動きベクトルの水平成分差の絶対値を表し、awp_mv_diff_y_absは制限角度重み付け予測モードの動きベクトルの垂直成分差の絶対値を表す。awp_mv_diff_x_signは制限角度重み付け予測モードの動きベクトルの水平成分差の符号値を表し、awp_mv_diff_y_signは制限角度重み付け予測モードの動きベクトルの垂直成分差の符号値を表す。
例示的には、制限角度重み付け予測モードの動きベクトル差値の絶対値は、AwpMvDiffXAbsがawp_mv_diff_x_absの値に等しく、AwpMvDiffYAbsがawp_mv_diff_y_absの値に等しい。
例示的には、制限角度重み付け予測モードの動きベクトル差値の符号ビットは、AwpMvDiffXSignの値がawp_mv_diff_x_signの値に等しく、AwpMvDiffYSignの値がawp_mv_diff_y_sign0に等しい。ビットストリームにawp_mv_diff_x_sign又はawp_mv_diff_y_signが存在しない場合、AwpMvDiffXSign又はAwpMvDiffYSignの値は0である。AwpMvDiffXSignの値が0である場合、AwpMvDiffXはAwpMvDiffXAbsに等しく、AwpMvDiffXSignの値が1である場合、AwpMvDiffXは-AwpMvDiffXAbsに等しい。AwpMvDiffYSignの値が0である場合、AwpMvDiffYはAwpMvDiffYAbsに等しく、AwpMvDiffYSignの値が1である場合、AwpMvDiffYは-AwpMvDiffYAbsに等しい。AwpMvDiffX及びAwpMvDiffYの値範囲は-32768~32767である。
別の可能な実施形態では、表14を参照すると、別々に表現する別の例である。表14に基づいて、|MVD_X|が0よりも大きいか否かを判断することができ、|...|は絶対値符号であり、MVD_XはMVDの横方向成分を表し、|MVD_Y|が0よりも大きいか否かを判断し、|...|は絶対値符号であり、MVD_YはMVDの縦方向成分を表し、|MVD_X|が0よりも大きい場合、|MVD_X|が1よりも大きいか否かを判断し、|MVD_Y|が0よりも大きい場合、|MVD_Y|が1よりも大きいか否かを判断し、|MVD_X|が1よりも大きい場合、|MVD_X|-2を符号化し、|MVD_X|が0よりも大きい場合、MVD_Xの符号ビットを符号化し、|MVD_Y|が1よりも大きい場合、|MVD_Y|-2を符号化し、|MVD_Y|が0よりも大きい場合、MVD_Yの符号ビットを符号化する。
実施例19:実施例1~実施例3では、符号化側/復号側は動き情報候補リストを取得する必要があり、例えば、動き情報候補リストに追加すべき、少なくとも1つの利用可能な動き情報を取得し、少なくとも1つの利用可能な動き情報に基づいて動き情報候補リストを取得する、という方式を採用して動き情報候補リストを取得する。例示的には、少なくとも1つの利用可能な動き情報は、空間領域動き情報と、時間領域動き情報と、予め設定された動き情報とのうちの少なくとも1つを含んでもよいが、これらに限定されず、各利用可能な動き情報の取得方式は、実施例13を参照することができ、ここではその説明を省略する。
例示的には、少なくとも1つの利用可能な動き情報に基づいて動き情報候補リストを取得することは、動き情報候補リストに現在追加すべき利用可能な動き情報について、利用可能な動き情報を動き情報候補リストに追加することを含んでもよい。例えば、利用可能な動き情報について、利用可能な動き情報が単方向動き情報であるか双方向動き情報であるかに関わらず、いずれも利用可能な動き情報を動き情報候補リストに追加する。実施例13及び実施例14と異なる点は、利用可能な動き情報が双方向動き情報である場合、双方向動き情報を第1単方向動き情報及び第2単方向動き情報にクリップする必要がなく、直接双方向動き情報を動き情報候補リストに追加し、即ち動き情報候補リストが双方向動き情報を含んでもよい点である。
例示的には、利用可能な動き情報を動き情報候補リストに追加するとき、利用可能な動き情報に重複チェック操作を行ってもよいし、利用可能な動き情報に重複チェック操作を行わなくてもよく、これに対して制限しない。利用可能な動き情報に重複チェック操作を行う場合、List+refIdx+MV_x+MV_yに基づいて重複チェック操作を行うことができ、あるいは、POC+MV_x+MV_yに基づいて重複チェック操作を行うことができ、この重複チェック操作の方式についての説明を省略し、実施例14を参照することができる。
実施例20:実施例1~実施例3では、符号化側/復号側は動き情報候補リストを得た後、該動き情報候補リストに基づいて現在ブロックの第1目標動き情報及び第2目標動き情報を取得することができ、第1目標動き情報が指す参照フレームと第2目標動き情報が指す参照フレームとが同一フレームであると決定した場合、動き情報候補リスト内の候補動き情報はいずれも双方向動き情報であってもよい。
例示的には、第1目標動き情報が指す参照フレームと第2目標動き情報が指す参照フレームとが同一フレームであると限定する場合、即ちAWPモードの2つの動きベクトルが同一フレームを指す場合、動き情報候補リストを構築するとき、動き情報候補リストに追加される利用可能な動き情報はいずれも双方向動き情報である。これに基づいて、符号化側では、レート歪みコスト値を採用して動き情報候補リストから1つの候補動き情報を選択することができ、符号化側が現在ブロックの符号化ビットストリームを復号側に送信するとき、該候補動き情報の動き情報候補リストにおけるインデックス値が付加されることができ、復号側では、該インデックス値に基づいて動き情報候補リストから1つの候補動き情報を選択することができる。
実施例21:実施例4では、符号化側/復号側は動きベクトル候補リストを取得する必要があり、例えば、参照フレーム情報(即ち現在ブロックの参照フレーム情報)を取得し、かつ該参照フレーム情報に対応する動きベクトル候補リスト(即ち現在ブロックの動きベクトル候補リスト)を取得し、即ち動きベクトル候補リストは参照フレーム情報に対して作成されたものである。例示的には、該参照フレーム情報は第1参照フレーム情報と第2参照フレーム情報とを含んでもよく、したがって、該動きベクトル候補リストは第1参照フレーム情報(例えば参照フレームインデックス及び参照フレーム方向など)に対応する動きベクトル候補リストと第2参照フレーム情報(例えば参照フレームインデックス及び参照フレーム方向など)に対応する動きベクトル候補リストとを含んでもよく、第1参照フレーム情報は第1目標動きベクトルに対応する参照フレーム情報であり、第2参照フレーム情報は第2目標動きベクトルに対応する参照フレーム情報である。
例示的には、符号化側では、第1参照フレーム情報及び第2参照フレーム情報を取得することができ、例えば、レート歪みコスト値に基づいて、1つの参照フレームリストから第1参照フレーム情報及び第2参照フレーム情報を選択してもよいし、2つの参照フレームリストから第1参照フレーム情報及び第2参照フレーム情報を選択してもよく、例えば、2つの参照フレームリストはそれぞれList0及びList1であり、List0から第1参照フレーム情報を選択し、List1から第2参照フレーム情報を選択する。
例示的には、復号側では、第1参照フレーム情報及び第2参照フレーム情報を取得することができ、例えば、現在ブロックの符号化ビットストリームにおけるインデックス情報に基づいて、1つの参照フレームリストから第1参照フレーム情報及び第2参照フレーム情報を選択してもよいし、2つの参照フレームリストから第1参照フレーム情報及び第2参照フレーム情報を選択してもよく、例えば、2つの参照フレームリストはそれぞれList0及びList1であり、第1参照フレーム情報のインデックス情報に基づいて、List0から第1参照フレーム情報を選択し、第2参照フレーム情報のインデックス情報に基づいて、List1から第2参照フレーム情報を選択する。
もちろん、上記は第1参照フレーム情報及び第2参照フレーム情報を取得する例示に過ぎず、これに対して制限しない。
可能な一実施形態では、第1参照フレーム情報と第2参照フレーム情報とは同じであってもよく、この場合、第1目標動きベクトルが指す参照フレームと第2目標動きベクトルが指す参照フレームとは同一フレームであり、第1参照フレーム情報に対応する動きベクトル候補リストと第2参照フレーム情報に対応する動きベクトル候補リストとは同一の動きベクトル候補リストであり、即ち、符号化側/復号側が取得したのは同一の動きベクトル候補リストである。
別の可能な実施形態では、第1参照フレーム情報と第2参照フレーム情報とは異なっていてもよく、この場合、第1目標動きベクトルが指す参照フレームと第2目標動きベクトルが指す参照フレームとは異なるフレームであり、第1参照フレーム情報に対応する動きベクトル候補リストと第2参照フレーム情報に対応する動きベクトル候補リストとは異なる動きベクトル候補リストであり、即ち符号化側/復号側が取得したのは2つの異なる動きベクトル候補リストである。
説明の便宜上、1つの動きベクトル候補リストであっても、2つの異なる動きベクトル候補リストであっても、いずれも第1参照フレーム情報に対応する動きベクトル候補リスト及び第2参照フレーム情報に対応する動きベクトル候補リストと記す。
これに基づいて、以下の方式を採用して現在ブロックの第1目標動きベクトル及び第2目標動きベクトルを取得することができる。
方式1として、第1参照フレーム情報に対応する動きベクトル候補リストから1つの候補動きベクトルを現在ブロックの第1目標動きベクトルとして選択し、第2参照フレーム情報に対応する動きベクトル候補リストから1つの候補動きベクトルを現在ブロックの第2目標動きベクトルとして選択する。第2目標動きベクトルと第1目標動きベクトルとは異なっていてもよい。
符号化側では、レート歪み最適化に基づいて、第1参照フレーム情報に対応する動きベクトル候補リストから1つの候補動きベクトルを現在ブロックの第1目標動きベクトルとして選択し、第2参照フレーム情報に対応する動きベクトル候補リストから1つの候補動きベクトルを現在ブロックの第2目標動きベクトルとして選択することができ、これに対して制限しない。
可能な一実施形態では、符号化側が符号化ビットストリームを復号側に送信するとき、該符号化ビットストリームには指示情報a及び指示情報bが付加されることができ、指示情報aは現在ブロックの第1目標動きベクトルのインデックス値1を示すために用いられ、インデックス値1は第1目標動きベクトルが第1参照フレーム情報に対応する動きベクトル候補リスト内の何番目の候補動きベクトルであるかを表す。指示情報bは現在ブロックの第2目標動きベクトルのインデックス値2を示すために用いられ、インデックス値2は第2目標動きベクトルが第2参照フレーム情報に対応する動きベクトル候補リスト内の何番目の候補動きベクトルであるかを表す。
復号側は符号化ビットストリームを受信した後、符号化ビットストリームから指示情報a及び指示情報bを解析する。指示情報aに基づいて、復号側は第1参照フレーム情報に対応する動きベクトル候補リストからインデックス値1に対応する候補動きベクトルを選択し、該候補動きベクトルを現在ブロックの第1目標動きベクトルとする。指示情報bに基づいて、復号側は第2参照フレーム情報に対応する動きベクトル候補リストからインデックス値2に対応する候補動きベクトルを選択し、該候補動きベクトルを現在ブロックの第2目標動きベクトルとする。
方式2として、第1参照フレーム情報に対応する動きベクトル候補リストから1つの候補動きベクトルを現在ブロックの第1の元の動きベクトルとして選択し、かつ第2参照フレーム情報に対応する動きベクトル候補リストから1つの候補動きベクトルを現在ブロックの第2の元の動きベクトルとして選択し、例示的には、該第1の元の動きベクトルと該第2の元の動きベクトルとは異なっていてもよく、あるいは、該第1の元の動きベクトルと該第2の元の動きベクトルとは同じであってもよい。そして、該第1の元の動きベクトルに基づいて現在ブロックの第1目標動きベクトルを決定し、かつ該第2の元の動きベクトルに基づいて現在ブロックの第2目標動きベクトルを決定する。例示的には、該第1目標動きベクトルと該第2目標動きベクトルとは異なっていてもよい。
どのように元の動きベクトルに基づいて目標動きベクトルを決定するかについて、本実施例では単方向動きベクトルに動きベクトル差を重畳する手段を提供し、例えば、第1の元の動きベクトルに対応する第1動きベクトル差(即ちMVD)を取得し、かつ第1動きベクトル差及び第1の元の動きベクトルに基づいて第1目標動きベクトルを決定することができる(即ち第1動きベクトル差と第1の元の動きベクトルとの和を第1目標動きベクトルとする)。あるいは、第1の元の動きベクトルを第1目標動きベクトルとして決定することができる。及び、第2の元の動きベクトルに対応する第2動きベクトル差を取得し、かつ第2動きベクトル差及び第2の元の動きベクトルに基づいて第2目標動きベクトルを決定することができる(即ち第2動きベクトル差と第2の元の動きベクトルとの和を第2目標動きベクトルとする)。あるいは、第2の元の動きベクトルを第2目標動きベクトルとして決定する。
例示的には、第1動きベクトル差の方向情報及び振幅情報を取得し、かつ第1動きベクトル差の方向情報及び振幅情報に基づいて第1動きベクトル差を決定する。及び、第2動きベクトル差の方向情報及び振幅情報を取得し、かつ第2動きベクトル差の方向情報及び振幅情報に基づいて前記第2動きベクトル差を決定することができる。
例示的には、復号側では、以下のような方式を採用して第1動きベクトル差の方向情報を取得することができる:復号側が現在ブロックの符号化ビットストリームから第1動きベクトル差の方向情報を解析し、あるいは、復号側が現在ブロックの重み予測角度に基づいて第1動きベクトル差の方向情報を導出する。復号側では、以下のような方式を採用して第2動きベクトル差の方向情報を取得することができる:復号側が現在ブロックの符号化ビットストリームから第2動きベクトル差の方向情報を解析し、あるいは、復号側が現在ブロックの重み予測角度に基づいて第2動きベクトル差の方向情報を導出する。
例示的には、復号側では、現在ブロックの符号化ビットストリームから第1動きベクトル差の振幅情報を解析する、という方式を採用して第1動きベクトル差の振幅情報を取得することができる。現在ブロックの符号化ビットストリームから第2動きベクトル差の振幅情報を解析する、という方式を採用して第2動きベクトル差の振幅情報を取得することができる。
可能な一実施形態では、符号化側及び復号側は動きベクトル差の方向情報及び振幅情報を約束することができ、方向情報が方向を右向きと表し、振幅情報が振幅をAと表す場合、動きベクトル差は(A,0)であり、方向情報が方向を下向きと表し、振幅情報が振幅をAと表す場合、動きベクトル差は(0,-A)であり、方向情報が方向を左向きと表し、振幅情報が振幅をAと表す場合、動きベクトル差は(-A,0)であり、方向情報が方向を上向きと表し、振幅情報が振幅をAと表す場合、動きベクトル差は(0,A)であり、方向情報が方向を右上向きと表し、振幅情報が振幅をAと表す場合、動きベクトル差は(A,A)であり、方向情報が方向を左上向きと表し、振幅情報が振幅をAと表す場合、動きベクトル差は(-A,A)であり、方向情報が方向を左下向きと表し、振幅情報が振幅をAと表す場合、動きベクトル差は(-A,-A)であり、方向情報が方向を右下向きと表し、振幅情報が振幅をAと表す場合、動きベクトル差は(A,-A)である。もちろん、上記はいくつかの例示に過ぎず、この方向情報及び振幅情報に対して制限しない。
例示的には、動きベクトル差に関する紹介について、実施例15を参照することができ、ここではその説明を省略する。
符号化側では、レート歪みコスト値に基づいて第1参照フレーム情報に対応する動きベクトル候補リストから第1の元の動きベクトルを選択し、第2参照フレーム情報に対応する動きベクトル候補リストから第2の元の動きベクトルを選択し、レート歪みコスト値に基づいて第1の元の動きベクトルに対応する第1動きベクトル差の方向情報及び振幅情報と、第2の元の動きベクトルに対応する第2動きベクトル差の方向情報及び振幅情報と、を決定することができる。符号化側が符号化ビットストリームを復号側に送信するとき、符号化ビットストリームにおいて第1の元の動きベクトルの第1参照フレーム情報に対応する動きベクトル候補リストにおけるインデックス値、第2の元の動きベクトルの第2参照フレーム情報に対応する動きベクトル候補リストにおけるインデックス値、第1動きベクトル差の方向情報及び振幅情報、及び第2動きベクトル差の方向情報及び振幅情報を符号化する。
復号側では、現在ブロックの符号化ビットストリームを受信した後、第1の元の動きベクトルの第1参照フレーム情報に対応する動きベクトル候補リストにおけるインデックス値に基づいて、第1参照フレーム情報に対応する動きベクトル候補リストから第1の元の動きベクトルを選択し、第2の元の動きベクトルの第2参照フレーム情報に対応する動きベクトル候補リストにおけるインデックス値に基づいて、第2参照フレーム情報に対応する動きベクトル候補リストから第2の元の動きベクトルを選択する。
復号側は符号化ビットストリームから第1動きベクトル差の方向情報及び振幅情報を解析し、かつ該方向情報及び該振幅情報に基づいて第1動きベクトル差を決定することもでき、及び、該符号化ビットストリームから第2動きベクトル差の方向情報及び振幅情報を解析し、かつ該方向情報及び該振幅情報に基づいて第2動きベクトル差を決定することができる。
例示的には、符号化ビットストリームには第1の元の動きベクトルに対応する第1参照フレーム情報をさらに含んでもよく、復号側は第1の元の動きベクトル及び第1の元の動きベクトルに対応する第1参照フレーム情報に基づいて、第1の元の動き情報を決定することができる。符号化ビットストリームには第2の元の動きベクトルに対応する第2参照フレーム情報をさらに含んでもよく、復号側は第2の元の動きベクトル及び第2の元の動きベクトルに対応する第2参照フレーム情報に基づいて、第2の元の動き情報を決定することができる。
そして、復号側は第1動きベクトル差及び第1の元の動き情報に基づいて現在ブロックの第1目標動き情報を決定し、かつ第2動きベクトル差及び第2の元の動き情報に基づいて現在ブロックの第2目標動き情報を決定することができる。
例示的には、符号化側は符号化ビットストリームにおいて強調角度重み付け予測モードの第1サブモードフラグ及び第2サブモードフラグを符号化することもでき、第1サブモードフラグは第1の元の動きベクトルに動きベクトル差を重畳するか、又は第1の元の動きベクトルに動きベクトル差を重畳しないことを示す。第2サブモードフラグは第2の元の動きベクトルに動きベクトル差を重畳するか、又は第2の元の動きベクトルに動きベクトル差を重畳しないことを示す。関連する処理は実施例15を参照し、ここではその説明を省略する。
上記実施例では、復号側は現在ブロックの符号化ビットストリームから第1動きベクトル差の方向情報及び第2動きベクトル差の方向情報を解析し、実際の適用では、現在ブロックの重み予測角度に基づいて第1動きベクトル差の方向情報を導出し、かつ現在ブロックの重み予測角度に基づいて第2動きベクトル差の方向情報を導出することもできる。
符号化側では、現在ブロックの重み予測角度に基づいて第1動きベクトル差の方向情報を導出し、かつ現在ブロックの重み予測角度に基づいて第2動きベクトル差の方向情報を導出することもできる。
例示的には、復号側は符号化ビットストリームから第1動きベクトル差の振幅情報及び第2動きベクトル差の振幅情報を解析することができ、可能な一実施形態では、符号化側及び復号側は同じ動きベクトル差振幅リストを構築することができ、符号化側は第1動きベクトル差の振幅情報の該動きベクトル差振幅リストにおける振幅インデックスを決定し、かつ符号化ビットストリームは第1動きベクトル差の振幅インデックスを含む。復号側は現在ブロックの符号化ビットストリームから第1動きベクトル差の振幅インデックスを解析し、かつ該動きベクトル差振幅リストから該振幅インデックスに対応する振幅情報を選択し、該振幅情報は即ち第1動きベクトル差の振幅情報である。符号化側は第2動きベクトル差の振幅情報の該動きベクトル差振幅リストにおける振幅インデックスを決定し、かつ符号化ビットストリームは第2動きベクトル差の振幅インデックスを含む。復号側は現在ブロックの符号化ビットストリームから第2動きベクトル差の振幅インデックスを解析し、かつ該動きベクトル差振幅リストから該振幅インデックスに対応する振幅情報を選択し、該振幅情報は即ち第2動きベクトル差の振幅情報である。
別の可能な実施形態では、符号化側及び復号側は同じ少なくとも2つの動きベクトル差振幅リストを構築することができ、例えば符号化側及び復号側は同じ動きベクトル差振幅リスト1を構築し、かつ同じ動きベクトル差振幅リスト2を構築する。符号化側はまず動きベクトル差振幅リストの指示情報に基づいて、全ての動きベクトル差振幅リストから目標動きベクトル差振幅リストを選択し、符号化側は第1動きベクトル差の振幅情報の該目標動きベクトル差振幅リストにおける振幅インデックスを決定し、かつ符号化ビットストリームは第1動きベクトル差の振幅インデックスを含む。
符号化側は第2動きベクトル差の振幅情報の該目標動きベクトル差振幅リストにおける振幅インデックスを決定することもでき、かつ符号化ビットストリームは第2動きベクトル差の振幅インデックスを含んでもよい。復号側は現在ブロックの符号化ビットストリームから第2動きベクトル差の振幅インデックスを解析し、かつ該目標動きベクトル差振幅リストから該振幅インデックスに対応する振幅情報を選択することができ、該振幅情報は即ち第2動きベクトル差の振幅情報である。
例示的には、動きベクトル差振幅リストに関する内容について、実施例16を参照することができ、ここではその説明を省略する。
実施例22:実施例4では、符号化側/復号側は第1参照フレーム情報に対応する動きベクトル候補リスト及び第2参照フレーム情報に対応する動きベクトル候補リストに基づいて、現在ブロックの第1目標動きベクトル及び第2目標動きベクトルを取得することができ、第1目標動きベクトルが指す参照フレームと第2目標動きベクトルが指す参照フレームとが同一フレームである場合、第1参照フレーム情報と第2参照フレーム情報とは同じであり、即ち第1参照フレーム情報に対応する動きベクトル候補リストと第2参照フレーム情報に対応する動きベクトル候補リストとは同一であり、これに基づいて、動きベクトル候補リストから1つの候補動きベクトルを現在ブロックの元の動きベクトルとして選択し、元の動きベクトルに基づいて現在ブロックの第1目標動きベクトルを決定し、第1目標動きベクトルに基づいて現在ブロックの第2目標動きベクトルを決定するか、又は、元の動きベクトルに基づいて現在ブロックの第2目標動きベクトルを決定する、という方式を採用して第1目標動きベクトル及び第2目標動きベクトルを取得する。
例示的には、元の動きベクトルに対応する動きベクトル差を取得し、該元の動きベクトルに基づいて現在ブロックの第1目標動きベクトルを決定し、第1目標動きベクトル及び該動きベクトル差に基づいて現在ブロックの第2目標動きベクトルを決定する。あるいは、該元の動きベクトルに対応する動きベクトル差を取得し、該元の動きベクトル及び該動きベクトル差に基づいて現在ブロックの第1目標動きベクトルを決定し、該元の動きベクトル及び該動きベクトル差に基づいて現在ブロックの第2目標動きベクトルを決定する。あるいは、該元の動きベクトルに対応する第1動きベクトル差及び第2動きベクトル差を取得し、該元の動きベクトル及び第1動きベクトル差に基づいて現在ブロックの第1目標動きベクトルを決定し、該第1目標動きベクトル及び第2動きベクトル差に基づいて現在ブロックの第2目標動きベクトルを決定する。あるいは、該元の動きベクトルに対応する第1動きベクトル差及び第2動きベクトル差を取得し、該元の動きベクトル及び第1動きベクトル差に基づいて現在ブロックの第1目標動きベクトルを決定し、該元の動きベクトル及び第2動きベクトル差に基づいて現在ブロックの第2目標動きベクトルを決定する。
上記実施例では、第1目標動きベクトルと第2目標動きベクトルとは異なっていてもよい。
実施例21又は実施例22では、動き情報候補リストを構築するのではなく、第1参照フレーム情報に対応する動きベクトル候補リスト及び第2参照フレーム情報に対応する動きベクトル候補リストを構築し、例えば、参照フレームリストListXに対する第refIdxフレームを採用して動きベクトル候補リストを構築し、構築方式はインター通常モードの動きベクトル候補リスト構築方式であってもよいし、実施例13又は実施例14に加えて、参照フレームへの制限を加え、参照フレームへの制限を加える場合、動き情報候補リストは動きベクトル候補リストであってもよい。例示的には、動きベクトル候補リストを構築する場合、利用可能性を判定する際に参照フレームへの判断を追加し、あるいは、単方向動きベクトルを追加する際に、スケール操作(Scale)を行うなどの手段を採用することができる。
実施例1~実施例4では、符号化側/復号側は第1目標動き情報に基づいて画素位置の第1予測値を決定し、第2目標動き情報に基づいて画素位置の第2予測値を決定することができ、該プロセスはインター予測プロセスを参照することができ、これに対して制限しない。例示的には、第1目標動き情報に基づいて画素位置の第1予測値を決定する場合、インター重み付け予測モードを採用して画素位置の第1予測値を得ることができる。例えば、まず第1目標動き情報を利用して画素位置の初期予測値を決定し、そして該初期予測値に予め設定された係数を乗算し、調整予測値を得る。調整予測値が最大予測値よりも大きい場合、最大予測値を現在ブロックの第1予測値とし、調整予測値が最小予測値よりも小さい場合、最小予測値を現在ブロックの第1予測値とし、調整予測値が最小予測値以上であり、かつ最大予測値以下である場合、調整予測値を現在ブロックの第1予測値とする。もちろん、上記方式は例示に過ぎず、これに対して制限しない。同様に、第2目標動き情報に基づいて画素位置の第2予測値を決定する場合、インター重み付け予測モードを採用して画素位置の第2予測値を得ることもでき、具体的な実現方式は上記例を参照し、ここでは繰り返して説明しない。
例示的には、実施例1~実施例3、実施例5~実施例12、及び実施例13~実施例20は、単独で実現されてもよいし、組み合わせて実現されてもよい。例えば、実施例1と実施例2とは組み合わせて実現され、実施例1と実施例3とは組み合わせて実現され、実施例1と実施例5~実施例12のうちの少なくとも1つの実施例とは組み合わせて実現され、実施例1と実施例13~実施例20のうちの少なくとも1つの実施例とは組み合わせて実現され、実施例2と実施例5~実施例12のうちの少なくとも1つの実施例とは組み合わせて実現され、実施例2と実施例13~実施例20のうちの少なくとも1つの実施例とは組み合わせて実現され、実施例3と実施例5~実施例12のうちの少なくとも1つの実施例とは組み合わせて実現され、実施例3と実施例13~実施例20のうちの少なくとも1つの実施例とは組み合わせて実現され、もちろん、実施例間の組み合わせ方式を制限しない。
例示的には、実施例4、実施例5~実施例12、実施例21~実施例22は、単独で実現されてもよいし、組み合わせて実現されてもよい。例えば、実施例4と実施例5~実施例12のうちの少なくとも1つの実施例とは組み合わせて実現され、実施例4と実施例21とは組み合わせて実現され、実施例4と実施例22とは組み合わせて実現され、実施例4と実施例21、実施例22とは組み合わせて実現され、もちろん、実施例間の組み合わせ方式を制限しない。
実施例23:上記方法と同様の出願思想に基づいて、本発明の実施例はさらに符号化・復号装置を提案し、前記装置は符号化側又は復号側に適用され、図10Aを参照すると、前記装置の構成図であり、前記装置は、以下を含む。
取得モジュール111は、現在ブロックに対して重み付け予測を開始すると決定した場合、前記現在ブロックの重み予測角度及び重み設定パラメータを取得するために用いられる。設定モジュール112は、前記重み設定パラメータに基づいて前記現在ブロックの外部の周辺位置に参照重み値を設定するために用いられる。決定モジュール113は、前記現在ブロックの各画素位置について、前記重み予測角度に基づいて前記現在ブロックの外部の周辺位置から前記画素位置が指す周辺マッチング位置を決定し、前記周辺マッチング位置に関連付けられた参照重み値に基づいて前記画素位置の目標重み値を決定し、前記画素位置の目標重み値に基づいて前記画素位置の関連付けられた重み値を決定するために用いられる。前記取得モジュール111はさらに、少なくとも1つの候補動き情報を含む動き情報候補リストを取得し、前記動き情報候補リストに基づいて前記現在ブロックの第1目標動き情報及び第2目標動き情報を取得するために用いられる。前記決定モジュール113はさらに、前記現在ブロックの第1目標動き情報に基づいて前記画素位置の第1予測値を決定し、前記現在ブロックの第2目標動き情報に基づいて前記画素位置の第2予測値を決定し、前記第1予測値、前記目標重み値、前記第2予測値及び前記関連付けられた重み値に基づいて、前記画素位置の重み付け予測値を決定して、前記現在ブロックの全ての画素位置の重み付け予測値に基づいて前記現在ブロックの重み付け予測値を決定するために用いられる。
例示的には、前記取得モジュール111が動き情報候補リストを取得する際に、具体的には、
動き情報候補リストに追加すべき少なくとも1つの利用可能な動き情報を取得すること、及び前記少なくとも1つの利用可能な動き情報に基づいて、前記動き情報候補リストを取得することに用いられ、前記利用可能な動き情報は、空間領域動き情報と、時間領域動き情報と、予め設定された動き情報とのうちの少なくとも1つを含む。
例示的には、前記取得モジュール111が前記少なくとも1つの利用可能な動き情報に基づいて、前記動き情報候補リストを取得する際に具体的には、動き情報候補リストに現在追加すべき利用可能な動き情報について、
前記利用可能な動き情報が単方向動き情報である場合、前記単方向動き情報を動き情報候補リストに追加する。
前記利用可能な動き情報が双方向動き情報である場合、前記双方向動き情報を第1単方向動き情報及び第2単方向動き情報にクリップし、前記第1単方向動き情報を動き情報候補リストに追加する。
あるいは、動き情報候補リストに現在追加すべき利用可能な動き情報について、
前記利用可能な動き情報が単方向動き情報であり、且つ前記単方向動き情報が動き情報候補リストに既に存在する候補動き情報と重複しない場合、前記単方向動き情報を動き情報候補リストに追加する。
前記利用可能な動き情報が双方向動き情報である場合、前記双方向動き情報を第1単方向動き情報及び第2単方向動き情報にクリップし、前記第1単方向動き情報が動き情報候補リストに既に存在する候補動き情報と重複しない場合、前記第1単方向動き情報を動き情報候補リストに追加する。
あるいは、動き情報候補リストに現在追加すべき利用可能な動き情報について、
前記利用可能な動き情報が単方向動き情報であり、且つ前記単方向動き情報が動き情報候補リストに既に存在する候補動き情報と重複しない場合、前記単方向動き情報を動き情報候補リストに追加する。
前記利用可能な動き情報が双方向動き情報である場合、前記双方向動き情報を第1単方向動き情報及び第2単方向動き情報にクリップし、第1単方向動き情報が動き情報候補リストに既に存在する候補動き情報と重複しない場合、前記第1単方向動き情報を動き情報候補リストに追加し、第1単方向動き情報が動き情報候補リストに既に存在する候補動き情報と重複し、かつ第2単方向動き情報が動き情報候補リストに既に存在する候補動き情報と重複しない場合、前記第2単方向動き情報を動き情報候補リストに追加する。
例示的には、前記取得モジュール111が前記動き情報候補リストに基づいて前記現在ブロックの第1目標動き情報及び第2目標動き情報を取得する際に具体的には、前記動き情報候補リストから候補動き情報を前記現在ブロックの第1の元の動き情報として選択し、かつ前記動き情報候補リストから候補動き情報を前記現在ブロックの第2の元の動き情報として選択し、前記第1の元の動き情報に基づいて前記現在ブロックの第1目標動き情報を決定し、前記第2の元の動き情報に基づいて前記現在ブロックの第2目標動き情報を決定する。
例示的には、前記第1の元の動き情報は第1の元の動きベクトルを含み、前記第1目標動き情報は第1目標動きベクトルを含み、前記取得モジュール111が前記第1の元の動き情報に基づいて前記現在ブロックの第1目標動き情報を決定する際に具体的には、前記第1の元の動きベクトルに対応する第1動きベクトル差を取得して、前記第1動きベクトル差及び前記第1の元の動きベクトルに基づいて前記第1目標動きベクトルを決定し、あるいは、前記第1の元の動きベクトルを前記第1目標動きベクトルとして決定する。前記第2の元の動き情報は第2の元の動きベクトルを含み、前記第2目標動き情報は第2目標動きベクトルを含み、前記取得モジュール111が前記第2の元の動き情報に基づいて前記現在ブロックの第2目標動き情報を決定する際に具体的には、前記第2の元の動きベクトルに対応する第2動きベクトル差を取得して、前記第2動きベクトル差及び前記第2の元の動きベクトルに基づいて前記第2目標動きベクトルを決定し、あるいは、前記第2の元の動きベクトルを前記第2目標動きベクトルとして決定する。
例示的には、前記第1目標動き情報が指す参照フレームと前記第2目標動き情報が指す参照フレームとが同一フレームである場合、前記取得モジュール111が前記動き情報候補リストに基づいて前記現在ブロックの第1目標動き情報及び第2目標動き情報を取得する際に具体的には、前記動き情報候補リストから1つの候補動き情報を前記現在ブロックの元の動き情報として選択し、前記元の動き情報に基づいて前記現在ブロックの第1目標動き情報を決定して、前記第1目標動き情報に基づいて前記現在ブロックの第2目標動き情報を決定し、あるいは、前記元の動き情報に基づいて前記現在ブロックの第2目標動き情報を決定する。
例示的には、前記元の動き情報は元の動きベクトルを含み、前記第1目標動き情報は第1目標動きベクトルを含み、前記第2目標動き情報は第2目標動きベクトルを含み、前記取得モジュール111は具体的には、前記元の動きベクトルに対応する動きベクトル差を取得し、前記元の動きベクトルに基づいて前記現在ブロックの第1目標動きベクトルを決定して、前記第1目標動きベクトル及び前記動きベクトル差に基づいて前記現在ブロックの第2目標動きベクトルを決定するために用いられ、あるいは、前記元の動きベクトルに対応する動きベクトル差を取得し、前記元の動きベクトル及び前記動きベクトル差に基づいて前記現在ブロックの第1目標動きベクトルを決定して、前記元の動きベクトル及び前記動きベクトル差に基づいて前記現在ブロックの第2目標動きベクトルを決定するために用いられ、あるいは、前記元の動きベクトルに対応する第1動きベクトル差及び第2動きベクトル差を取得し、前記元の動きベクトル及び前記第1動きベクトル差に基づいて前記現在ブロックの第1目標動きベクトルを決定して、前記第1目標動きベクトル及び前記第2動きベクトル差に基づいて前記現在ブロックの第2目標動きベクトルを決定するために用いられ、あるいは、前記元の動きベクトルに対応する第1動きベクトル差及び第2動きベクトル差を取得し、前記元の動きベクトル及び前記第1動きベクトル差に基づいて前記現在ブロックの第1目標動きベクトルを決定して、前記元の動きベクトル及び前記第2動きベクトル差に基づいて前記現在ブロックの第2目標動きベクトルを決定するために用いられる。
上記実施例では、第1目標動きベクトルと第2目標動きベクトルとは異なっていてもよい。
上記方法と同様の出願思想に基づいて、本発明の実施例はさらに符号化・復号装置を提案し、前記装置は符号化側又は復号側に適用され、図10Bを参照すると、前記装置の構成図であり、以下を含む。
取得モジュール121は、現在ブロックに対して重み付け予測を開始すると決定した場合、前記現在ブロックの重み予測角度及び重み設定パラメータを取得するために用いられる。設定モジュール122は、前記重み設定パラメータに基づいて前記現在ブロックの外部の周辺位置に参照重み値を設定するために用いられ、決定モジュール123は、前記現在ブロックの各画素位置について、前記重み予測角度に基づいて前記現在ブロックの外部の周辺位置から前記画素位置が指す周辺マッチング位置を決定し、前記周辺マッチング位置に関連付けられた参照重み値に基づいて前記画素位置の目標重み値を決定して、前記画素位置の目標重み値に基づいて前記画素位置の関連付けられた重み値を決定するために用いられる。前記取得モジュール121はさらに、参照フレーム情報を取得し、かつ前記参照フレーム情報に対応する動きベクトル候補リストを取得するために用いられ、前記動きベクトル候補リストは少なくとも1つの候補動きベクトルを含み、前記参照フレーム情報は第1参照フレーム情報と第2参照フレーム情報とを含み、前記動きベクトル候補リストに基づいて前記現在ブロックの第1目標動きベクトル及び第2目標動きベクトルを取得するために用いられる。前記決定モジュール123はさらに、前記現在ブロックの第1目標動き情報に基づいて前記画素位置の第1予測値を決定し、前記現在ブロックの第2目標動き情報に基づいて前記画素位置の第2予測値を決定して、前記第1予測値、前記目標重み値、前記第2予測値及び前記関連付けられた重み値に基づいて、前記画素位置の重み付け予測値を決定するために用いられ、前記第1目標動き情報は第1目標動きベクトル及び前記第1目標動きベクトルに対応する第1参照フレーム情報を含み、前記第2目標動き情報は第2目標動きベクトル及び前記第2目標動きベクトルに対応する第2参照フレーム情報を含み、前記現在ブロックの全ての画素位置の重み付け予測値に基づいて前記現在ブロックの重み付け予測値を決定するために用いられる。
例示的には、前記重み設定パラメータは重み変換率を含み、前記現在ブロックが重み変換率切り替えモードをサポートする場合、前記取得モジュール121は、前記現在ブロックの重み変換率指示情報を取得し、前記重み変換率指示情報に基づいて前記現在ブロックの重み変換率を決定する方式を採用して前記現在ブロックの重み変換率を取得しここで、前記重み変換率指示情報が第1指示情報である場合、前記現在ブロックの重み変換率が第1重み変換率であり、前記重み変換率指示情報が第2指示情報である場合、前記現在ブロックの重み変換率が第2重み変換率である。
例示的には、前記現在ブロックの重み変換率指示情報は前記現在ブロックに対応する重み変換率切り替え識別子であり、前記第1指示情報は前記現在ブロックが重み変換率切り替えを必要としないことを示すために用いられ、前記第2指示情報は前記現在ブロックが重み変換率切り替えを必要とすることを示すために用いられる。
前記重み設定パラメータは重み変換率と重み変換の開始位置とを含み、前記設定モジュール122が前記重み設定パラメータに基づいて前記現在ブロックの外部の周辺位置に参照重み値を設定する際に具体的には、
前記現在ブロックの外部の周辺位置について、前記周辺位置の座標値、前記重み変換の開始位置の座標値、及び前記重み変換率に基づいて、前記周辺位置の参照重み値を設定する。
例示的には、前記動きベクトル候補リストは第1参照フレーム情報に対応する動きベクトル候補リストと第2参照フレーム情報に対応する動きベクトル候補リストとを含み、前記取得モジュール121が前記動きベクトル候補リストに基づいて前記現在ブロックの第1目標動きベクトル及び第2目標動きベクトルを取得する際に具体的には、
前記第1参照フレーム情報に対応する動きベクトル候補リストから1つの候補動きベクトルを前記現在ブロックの第1の元の動きベクトルとして選択し、かつ前記第2参照フレーム情報に対応する動きベクトル候補リストから1つの候補動きベクトルを前記現在ブロックの第2の元の動きベクトルとして選択し、前記第1の元の動きベクトルに基づいて前記現在ブロックの第1目標動きベクトルを決定し、及び前記第2の元の動きベクトルに基づいて前記現在ブロックの第2目標動きベクトルを決定するために用いられる。
例示的には、前記取得モジュール121が前記第1の元の動きベクトルに基づいて前記現在ブロックの第1目標動きベクトルを決定する際に具体的には、前記第1の元の動きベクトルに対応する第1動きベクトル差を取得して、前記第1動きベクトル差及び前記第1の元の動きベクトルに基づいて前記第1目標動きベクトルを決定し、あるいは、第1の元の動きベクトルを第1目標動きベクトルとして決定するために用いられる。
例示的には、前記取得モジュール121が前記第2の元の動きベクトルに基づいて前記現在ブロックの第2目標動きベクトルを決定する際に具体的には、前記第2の元の動きベクトルに対応する第2動きベクトル差を取得して、前記第2動きベクトル差及び前記第2の元の動きベクトルに基づいて前記第2目標動きベクトルを決定し、あるいは、第2の元の動きベクトルを第2目標動きベクトルとして決定するために用いられる。
例示的には、前記第1目標動きベクトルが指す参照フレームと前記第2目標動きベクトルが指す参照フレームとが同一フレームである場合、前記第1参照フレーム情報は前記第2参照フレーム情報と同じであり、前記動きベクトル候補リストは1つの動きベクトル候補リストであり、前記取得モジュール121が前記動きベクトル候補リストに基づいて前記現在ブロックの第1目標動きベクトル及び第2目標動きベクトルを取得する際に具体的には、前記動きベクトル候補リストから1つの候補動きベクトルを前記現在ブロックの元の動きベクトルとして選択し、前記元の動きベクトルに基づいて前記現在ブロックの第1目標動きベクトルを決定して、及び前記第1目標動きベクトルに基づいて前記現在ブロックの第2目標動きベクトルを決定し、あるいは、前記元の動きベクトルに基づいて前記現在ブロックの第2目標動きベクトルを決定する。
例示的には、前記取得モジュール121は具体的には、
前記元の動きベクトルに対応する動きベクトル差を取得し、前記元の動きベクトルに基づいて前記現在ブロックの第1目標動きベクトルを決定し、前記第1目標動きベクトル及び前記動きベクトル差に基づいて前記現在ブロックの第2目標動きベクトルを決定するために用いられ、あるいは、前記元の動きベクトルに対応する動きベクトル差を取得し、前記元の動きベクトル及び前記動きベクトル差に基づいて前記現在ブロックの第1目標動きベクトルを決定し、前記元の動きベクトル及び前記動きベクトル差に基づいて前記現在ブロックの第2目標動きベクトルを決定するために用いられ、あるいは、前記元の動きベクトルに対応する第1動きベクトル差及び第2動きベクトル差を取得し、前記元の動きベクトル及び前記第1動きベクトル差に基づいて前記現在ブロックの第1目標動きベクトルを決定し、前記第1目標動きベクトル及び前記第2動きベクトル差に基づいて前記現在ブロックの第2目標動きベクトルを決定するために用いられ、あるいは、前記元の動きベクトルに対応する第1動きベクトル差及び第2動きベクトル差を取得し、前記元の動きベクトル及び前記第1動きベクトル差に基づいて前記現在ブロックの第1目標動きベクトルを決定し、前記元の動きベクトル及び前記第2動きベクトル差に基づいて前記現在ブロックの第2目標動きベクトルを決定するために用いられる。
上記実施例では、第1目標動きベクトルと第2目標動きベクトルとは異なっていてもよい。
上記方法と同様の出願思想に基づいて、本発明の実施例によって提供される復号機器(ビデオデコーダとも呼ばれてもよい)は、ハードウェアレベルでは、そのハードウェアアーキテクチャ概略図は具体的には図10Cを参照することができる。プロセッサ131と、前記プロセッサ131によって実行可能な機械実行可能命令を記憶した機械可読記憶媒体132とを含み、前記プロセッサ131は、機械実行可能命令を実行することにより、本発明の上記例で開示された方法を実施する。例えば、前記プロセッサ131は、機械実行可能命令を実行することにより、
現在ブロックに対して重み付け予測を開始すると決定した場合、前記現在ブロックの重み予測角度及び重み設定パラメータを取得するステップと、
前記重み設定パラメータに基づいて前記現在ブロックの外部の周辺位置に参照重み値を設定するステップと、
前記現在ブロックの各画素位置について、前記重み予測角度に基づいて前記現在ブロックの外部の周辺位置から前記画素位置が指す周辺マッチング位置を決定し、前記周辺マッチング位置に関連付けられた参照重み値に基づいて前記画素位置の目標重み値を決定し、前記画素位置の目標重み値に基づいて前記画素位置の関連付けられた重み値を決定するステップと、
少なくとも1つの候補動き情報を含む動き情報候補リストを取得し、前記動き情報候補リストに基づいて前記現在ブロックの第1目標動き情報及び第2目標動き情報を取得するステップと、
前記現在ブロックの第1目標動き情報に基づいて前記画素位置の第1予測値を決定し、前記現在ブロックの第2目標動き情報に基づいて前記画素位置の第2予測値を決定し、前記第1予測値、前記目標重み値、前記第2予測値及び前記関連付けられた重み値に基づいて、前記画素位置の重み付け予測値を決定するステップと、
前記現在ブロックの全ての画素位置の重み付け予測値に基づいて前記現在ブロックの重み付け予測値を決定するステップと、を実施する。あるいは、前記プロセッサ131は、機械実行可能命令を実行することにより、
現在ブロックに対して重み付け予測を開始すると決定した場合、前記現在ブロックの重み予測角度及び重み設定パラメータを取得するステップと、
前記重み設定パラメータに基づいて前記現在ブロックの外部の周辺位置に参照重み値を設定するステップと、
前記現在ブロックの各画素位置について、前記重み予測角度に基づいて前記現在ブロックの外部の周辺位置から前記画素位置が指す周辺マッチング位置を決定し、前記周辺マッチング位置に関連付けられた参照重み値に基づいて前記画素位置の目標重み値を決定し、前記画素位置の目標重み値に基づいて前記画素位置の関連付けられた重み値を決定するステップと、
参照フレーム情報を取得し、かつ前記参照フレーム情報に対応する動きベクトル候補リストを取得し、前記動きベクトル候補リストは少なくとも1つの候補動きベクトルを含み、前記参照フレーム情報は第1参照フレーム情報と第2参照フレーム情報とを含み、前記動きベクトル候補リストに基づいて前記現在ブロックの第1目標動きベクトル及び第2目標動きベクトルを取得するステップと、
前記現在ブロックの第1目標動き情報に基づいて前記画素位置の第1予測値を決定し、前記現在ブロックの第2目標動き情報に基づいて前記画素位置の第2予測値を決定し、前記第1予測値、前記目標重み値、前記第2予測値及び前記関連付けられた重み値に基づいて、前記画素位置の重み付け予測値を決定し、ここで、前記第1目標動き情報は第1目標動きベクトル及び前記第1目標動きベクトルに対応する第1参照フレーム情報を含み、前記第2目標動き情報は第2目標動きベクトル及び前記第2目標動きベクトルに対応する第2参照フレーム情報を含むステップと、
前記現在ブロックの全ての画素位置の重み付け予測値に基づいて前記現在ブロックの重み付け予測値を決定するステップと、を実施する。
上記方法と同様の出願思想に基づいて、本発明の実施例によって提供される符号化機器(ビデオエンコーダとも呼ばれてもよい)は、ハードウェアレベルでは、そのハードウェアアーキテクチャ概略図は具体的には図10Dを参照することができる。プロセッサ141と、前記プロセッサ141によって実行可能な機械実行可能命令を記憶した機械可読記憶媒体142とを含み、前記プロセッサ141は機械実行可能命令を実行することにより、本発明の上記例で開示された方法を実施する。例えば、前記プロセッサ141は、機械実行可能命令を実行することにより、
現在ブロックに対して重み付け予測を開始すると決定した場合、前記現在ブロックの重み予測角度及び重み設定パラメータを取得するステップと、
前記重み設定パラメータに基づいて前記現在ブロックの外部の周辺位置に参照重み値を設定するステップと、
前記現在ブロックの各画素位置について、前記重み予測角度に基づいて前記現在ブロックの外部の周辺位置から前記画素位置が指す周辺マッチング位置を決定し、前記周辺マッチング位置に関連付けられた参照重み値に基づいて前記画素位置の目標重み値を決定し、前記画素位置の目標重み値に基づいて前記画素位置の関連付けられた重み値を決定するステップと、
少なくとも1つの候補動き情報を含む動き情報候補リストを取得し、前記動き情報候補リストに基づいて前記現在ブロックの第1目標動き情報及び第2目標動き情報を取得するステップと、
前記現在ブロックの第1目標動き情報に基づいて前記画素位置の第1予測値を決定し、前記現在ブロックの第2目標動き情報に基づいて前記画素位置の第2予測値を決定し、前記第1予測値、前記目標重み値、前記第2予測値及び前記関連付けられた重み値に基づいて、前記画素位置の重み付け予測値を決定するステップと、
前記現在ブロックの全ての画素位置の重み付け予測値に基づいて前記現在ブロックの重み付け予測値を決定するステップと、を実施する。あるいは、前記プロセッサ141は、機械実行可能命令を実行することにより、
現在ブロックに対して重み付け予測を開始すると決定した場合、前記現在ブロックの重み予測角度及び重み設定パラメータを取得するステップと、
前記重み設定パラメータに基づいて前記現在ブロックの外部の周辺位置に参照重み値を設定するステップと、
前記現在ブロックの各画素位置について、前記重み予測角度に基づいて前記現在ブロックの外部の周辺位置から前記画素位置が指す周辺マッチング位置を決定し、前記周辺マッチング位置に関連付けられた参照重み値に基づいて前記画素位置の目標重み値を決定し、前記画素位置の目標重み値に基づいて前記画素位置の関連付けられた重み値を決定するステップと、
参照フレーム情報を取得し、かつ前記参照フレーム情報に対応する動きベクトル候補リストを取得し、前記動きベクトル候補リストは少なくとも1つの候補動きベクトルを含み、前記参照フレーム情報は第1参照フレーム情報と第2参照フレーム情報とを含み、前記動きベクトル候補リストに基づいて前記現在ブロックの第1目標動きベクトル及び第2目標動きベクトルを取得するステップと、
前記現在ブロックの第1目標動き情報に基づいて前記画素位置の第1予測値を決定し、前記現在ブロックの第2目標動き情報に基づいて前記画素位置の第2予測値を決定し、前記第1予測値、前記目標重み値、前記第2予測値及び前記関連付けられた重み値に基づいて、前記画素位置の重み付け予測値を決定し、ここで、前記第1目標動き情報は第1目標動きベクトル及び前記第1目標動きベクトルに対応する第1参照フレーム情報を含み、前記第2目標動き情報は第2目標動きベクトル及び前記第2目標動きベクトルに対応する第2参照フレーム情報を含むステップと、
前記現在ブロックの全ての画素位置の重み付け予測値に基づいて前記現在ブロックの重み付け予測値を決定するステップと、を実施する。
上記方法と同様の出願思想に基づいて、本発明の実施例はさらに機械可読記憶媒体を提供し、前記機械可読記憶媒体にいくつかのコンピュータ命令が記憶され、前記コンピュータ命令がプロセッサによって実行されるとき、本発明の上記例で開示された方法、例えば上記各実施例における符号化・復号方法を実現させることができる。
上記実施例で説明したシステム、装置、モジュール又はユニットは、具体的にはコンピュータチップ又はエンティティによって実現されてもよく、又は何らかの機能を有する製品によって実現されてもよい。典型的な実現機器は、パーソナルコンピュータ、ラップトップコンピュータ、携帯電話、カメラ付き電話、スマートフォン、携帯情報端末、メディアプレーヤ、ナビゲーション機器、電子メール送受信機器、ゲーム機、タブレット、ウェアラブル機器、又はこれらの機器の任意のいくつかの機器の組み合わせの形態を採用することができるコンピュータである。説明の便宜上、以上の装置を説明するときに機能に応じて様々なユニットに分けてそれぞれ説明する。もちろん、本発明の実施に際して各ユニットの機能を同一又は複数のソフトウェア及び/又はハードウェアで実現することができる。
当業者には、本発明の実施例が、方法、システム、又はコンピュータプログラム製品として提供されることができることが理解されるであろう。本発明は、全体的にハードウェアの実施例、全体的にソフトウェアの実施例、又はソフトウェアとハードウェアの態様を組み合わせた実施例の形態を採用することができる。本発明の実施例は、コンピュータ利用可能プログラムコードを内部に含む1つ以上のコンピュータ利用可能記憶媒体(磁気ディスク記憶装置、CD-ROM、光学記憶装置などを含むが、これらに限定されない)上に実施されるコンピュータプログラム製品の形態を採用することができる。
以上の説明は、本発明の実施例に過ぎず、本発明を限定するものではない。本発明は、当業者にとって様々な修正及び変形が可能である。本発明の精神及び原理内でなされたあらゆる修正、等価置換、改良などは、本発明の特許請求の範囲内に含まれるべきである。