本発明の実施例で使用される用語は、特定の実施例を説明するためだけのものであり、本発明を限定するものではない。本発明の実施例及び特許請求の範囲で使用される単数形の「1つの」、「前記」及び「該」は、文脈が他の意味を明確に示さない限り、複数形も含むことを意図している。本明細書で使用される用語「及び/又は」は、関連する列挙項目の1つ又は複数の任意の又は全ての可能な組み合わせを含むこと意味することも理解されるべきである。本発明の実施例では様々な情報を説明するために第1、第2、第3などの用語を用いる可能性があるが、これらの情報はこれらの用語に限定されるべきではないことを理解されたい。これらの用語は、同じタイプの情報を互いに区別するためにのみ使用される。例えば、本発明の実施例の範囲から逸脱することなく、第1情報は、第2情報と呼ばれてもよく、同様に、第2情報は、文脈に応じて第1情報と呼ばれてもよい。さらに、使用される用語「もし」は、「…時」、又は「…である場合」、又は「決定に応答する」と解釈されてもよい。
本発明の実施例では符号化・復号方法、装置及びそのデバイスを提案し、それはイントラ予測(intra prediction)、インター予測(inter prediction)及びIBC(Intra Block Copy、イントラブロックコピー)予測などの概念に関してもよい。
イントラ予測は、ビデオの空間的相関性に基づいて、カレント画像の符号化済みブロックの画素を用いてカレントブロックの画素を予測することで、ビデオの空間的冗長性(spatial redundancy)を低減するという目的を達成する。イントラ予測には、複数の予測モードが規定されており、各予測モードは1つのテクスチャ方向(DC(Direct Current、直流)モードを除く)に対応しており、例えば、画像のテクスチャが水平に並ぶように配置されている場合、水平予測モードは画像情報をよりよく予測することができる。
インター予測は、ビデオの時間的相関性に基づいて、ビデオシーケンスが比較的強い時間的相関性を含むため、隣接する符号化済み画像の画素を用いてカレント画像の画素を予測し、ビデオの時間的冗長性(temporal redundancy)を効果的に低減するという目的を達成することができる。
イントラブロックコピーでは同じフレームの参照が可能であり、カレントブロックの参照データは同じフレームに由来する。イントラブロックコピー技術では、カレントブロックのブロックベクトルを用いてカレントブロックの予測値を取得することができ、例示的に、画面内容の同一のフレーム内に繰り返し現れるテクスチャが大量に存在するという特性に基づいて、ブロックベクトルを採用してカレントブロックの予測値を取得するとき、画面内容シーケンスの圧縮効率を向上させることができる。
予測画素(Prediction Pixel)とは、符号化・復号済みの画素から導出される画素値であり、元の画素と予測画素との差により残差を得て、残差変換、量子化及び係数符号化を行う。インター予測画素とは、カレントブロックに対して参照フレームから導出される画素値であり、画素位置が離散的であるため、内挿演算によって最終的な予測画素を取得する必要がある。予測画素と元の画素が近いほど、両者を減算した残差エネルギーが小さく、符号化圧縮性能が高くなる。
動きベクトル(Motion Vector、MV)。インター予測では、動きベクトルを用いてカレントフレームのカレントブロックと参照フレームの参照ブロックとの間の相対的な変位を表すことができる。分割された各ブロックは、対応する動きベクトルを復号側に転送し、各ブロックの動きベクトルを独立して符号化と転送を行うと、特にサイズが小さなブロックが多数ある場合、多くのビットが消費される。動きベクトルの符号化に用いるビット数を低減するために、隣接ブロック間の空間的相関性を利用して、隣接する符号化済みブロックの動きベクトルに基づいてカレントブロックの動きベクトルを予測し、そして予測差を符号化すると、動きベクトルを表すビット数を効果的に低減することができる。カレントブロックの動きベクトルを符号化するとき、まず隣接する符号化済みブロックの動きベクトルを用いてカレントブロックの動きベクトルを予測し、そして該動きベクトルの予測値(MVP、Motion Vector Prediction)と動きベクトルの実際の推定値との差、つまり差分動きベクトル(MVD、Motion Vector Difference)を符号化してもよい。
動き情報(Motion Information)。動きベクトルは、カレントブロックとある参照ブロックとの間の位置オフセットを表すため、指向ブロックの情報を正確に取得するためには、動きベクトルに加えて、カレントブロックがどの参照フレーム画像を採用しているかを表す参照フレーム画像のインデックス情報が必要である。ビデオ符号化技術では、カレントフレームについて、通常、1つの参照フレーム画像リストを作成してもよく、参照フレーム画像インデックス情報は、カレントブロックが参照フレーム画像リストの何番目の参照フレーム画像を採用しているかを表す。また、多くの符号化技術は複数の参照フレーム画像リストをサポートしているため、どの参照フレーム画像リストが採用されているかを表す1つのインデックス値を採用してもよく、このインデックス値は参照方向と呼ばれてもよい。以上のように、ビデオ符号化技術では、動きベクトル、参照フレーム画像インデックス情報、参照方向などの動きに関する情報をまとめて動き情報と呼んでもよい。
ブロックベクトル(Block Vector、BV)はイントラブロックコピー技術に適用され、イントラブロックコピー技術はブロックベクトルを用いて動き補償を行い、即ちブロックベクトルを採用してカレントブロックの予測値を取得する。動きベクトルとは異なり、ブロックベクトルはカレントブロックとカレントフレームの符号化済みブロック内の最適なマッチングブロックとの間の相対的な変位を表す。同一のフレーム内に繰り返すテクスチャが多く存在するという特性に基づいて、ブロックベクトルを採用してカレントブロックの予測値を取得するとき、圧縮効率を大幅に向上させることができる。
イントラ予測モード:イントラ予測では、イントラ予測モードを用いて動き補償を行い、即ちイントラ予測モードを採用してカレントブロックの予測値を取得する。例えば、イントラ予測モードは、Planarモード、DCモード及び多種類の角度モードを含んでもよいが、これらに限定されない。Planarモードは、画素値がゆっくりと変化する領域に適用され、水平方向と垂直方向の2つの線形フィルタを用いて、2つの方向の画素の平均値をカレントブロックの画素の予測値とする。DCモードは、大面積の平坦な領域に適用され、カレントブロックの周囲画素の平均値をカレントブロックの予測値とする。角度モードには33種類の角度モード又は65種類の角度モードがある。
パレットモード(Palette Mode)。パレットモードでは、カレントブロックの画素値を、小さな画素値集合、即ちパレットで表す。カレントブロック内の画素位置の画素値がパレット内のある色に近い場合、該画素位置をパレット内の対応する色のインデックス値で符号化する。カレントブロック内の画素位置の画素値がパレット内のいずれの色とも似ていない場合、該画素位置に対して「エスケープ画素値(escape pixel)」で符号化し、直接量子化してビットストリームに符号化する必要がある。復号側にとっては、まず1つのパレット、例えば、{色A、色B、色C}を記憶したパレットを取得し、そして各画素位置に対してエスケープ画素値であるか否かをまず確認し、エスケープ画素でなければ、ビットストリームから画素位置のインデックスを取得し、該画素位置のインデックスに基づいてパレットから色を取得して該画素位置に与え、そうでなければ、エスケープ画素値を解析する。
レート歪み最適化(Rate-Distortion Optimization、RDO)原則。符号化効率を評価するには、ビットレートとPSNR(Peak Signal to Noise Ratio、ピーク信号対雑音比)の2つの指標があり、ビットストリームが小さいほど、圧縮率が大きく、PSNRが大きいほど、再構成画像の品質が良く、モードを選択する時に、判別式は実質的に両者に対する総合的な評価である。例えば、モードに対応するコスト(cost):J(mode)=D+λ*Rであり、ただし、DはDistortion(歪み)を表し、通常はSSE(Sum of the Squared Errors、残差平方和)指標を用いて評価することができ、SSEとは再構成画像ブロックとソース画像との差の平均二乗和であり、λはラグランジュ乗数であり、Rは該モードにおける画像ブロックを符号化するのに必要な実際のビット数であり、符号化モード情報、動き情報、残差などに必要なビットの総和を含む。モードを選択する時に、RDO原則を用いて符号化モードを比較決定すると、通常、符号化性能が最適であることを保証することができる。
ビデオ符号化フレームワーク。図1に示すようなビデオ符号化フレームワークを用いて本発明の実施例の符号化側の処理フローを実現することができ、ビデオ復号フレームワークの概略図は図1と類似し、ここでは説明を省略し、ビデオ復号フレームワークを用いて本発明の実施例の復号側の処理フローを実現することができる。例示的に、ビデオ符号化フレームワーク及びビデオ復号フレームワークには、イントラ予測/インター予測、動き推定/動き補償、参照画像バッファ、インループフィルタリング、再構成、変換、量子化、逆変換、逆量子化、エントロピーエンコーダなどのモジュールが含まれてもよいが、これらに限定されない。符号化側では、これらのモジュール間の連携により、符号化側の処理フローを実現することができ、復号側では、これらのモジュール間の連携により、復号側の処理フローを実現することができる。
例示的に、カレントブロックは矩形であってもよく、実際の物体のエッジは矩形ではないことが多いので、物体のエッジには、2つの異なる対象(例えば、前景に存在する物体と背景など)が存在することが多い。2つの対象の動きが一致しない場合、矩形分割はこの2つのオブジェクトをうまく分割することができないため、カレントブロックを2つの非矩形サブブロックに分割し、2つの非矩形サブブロックを重み付け予測してもよい。例示的に、重み付け予測は複数の予測値を利用して重み付け演算を行うことで、最終的な予測値を得ることであり、重み付け予測は、インターとイントラを結合させる重み付け予測、インターとインターを結合させる重み付け予測、イントラとイントラを結合させる重み付け予測などを含んでもよい。重み付け予測の重み値について、カレントブロックの異なる画素位置に同じ重み値を設定してもよいし、カレントブロックの異なる画素位置に異なる重み値を設定してもよい。
図2Aに示されるのは、インター重み付け予測三角分割モード(Triangular Partition Mode、TPM)の概略図である。
TPM予測ブロックは、インター予測ブロック1(即ちインター予測モード1を採用して複数の画素位置のインター予測値1を得る)とインター予測ブロック2(即ちインター予測モード2を採用して複数の画素位置のインター予測値2を得る)との組み合わせにより得られる。TPM予測ブロックは2つの領域/部分に分割されてもよく、1つの領域はインター領域1であってもよく、もう1つの領域はインター領域2であってもよく、TPM予測ブロックは矩形として分布してもよく、TPM予測ブロックの2つのインター領域は非矩形として分布してもよく、かつ2つのインター領域間の境界線(図2Aの破線)はTPM予測ブロックの主対角線又は副対角線であってもよい。
インター領域1の各画素位置は、主にインター予測ブロック1のインター予測値1に基づいて決定され、例えば、該画素位置のインター予測ブロック1のインター予測値1と該画素位置のインター予測ブロック2のインター予測値2とを重み付けし、該画素位置の結合予測値を得、ここで、インター予測値1の重み値が比較的大きく、インター予測値2の重み値が比較的小さい(0であってもよい)。インター領域2の各画素位置は、主にインター予測ブロック2のインター予測値2に基づいて決定され、例えば、該画素位置のインター予測ブロック1のインター予測値1と該画素位置のインター予測ブロック2のインター予測値2とを重み付けし、該画素位置の結合予測値を得て、ここで、インター予測値2の重み値が比較的大きく、インター予測値1の重み値が比較的小さい(0であってもよい)。その後、各画素位置の結合予測値でTPM予測ブロックを構成してもよい。
図2Bに示されるのは、インターブロック幾何学的分割(Geometrical partitioning for inter blocks、GEO)モードの概略図であり、GEOモードは1本の分割線を用いてインター予測ブロックを2つのサブブロックに分割するために用いられ、TPMモードとは異なり、GEOモードはより多くの分割方向を採用することができ、GEOモードの重み付け予測プロセスはTPMモードと類似する。
GEO予測ブロックは、インター予測ブロック1(即ちインター予測モード1を採用して複数の画素位置のインター予測値1を得る)とインター予測ブロック2(即ちインター予測モード2を採用して複数の画素位置のインター予測値2を得る)との組み合わせにより得られる。GEO予測ブロックは2つの領域/部分に分割されてもよく、1つの領域はインター領域1であってもよく、もう1つの領域はインター領域2であってもよい。
インター領域1の各画素位置は、主にインター予測ブロック1のインター予測値1に基づいて決定され、例えば、該画素位置のインター予測ブロック1のインター予測値1と該画素位置のインター予測ブロック2のインター予測値2とを重み付けするとき、インター予測値1の重み値が比較的大きく、インター予測値2の重み値が比較的小さい。インター領域2の各画素位置は、主にインター予測ブロック2のインター予測値2に基づいて決定され、例えば、該画素位置のインター予測ブロック1のインター予測値1と該画素位置のインター予測ブロック2のインター予測値2とを重み付けするとき、インター予測値2の重み値が比較的大きく、インター予測値1の重み値が比較的小さい。
例示的に、GEO予測ブロックの重み値設定は、画素位置の分割線に対する距離に依存し、図2Cに示されるとおり、画素位置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個の周辺位置に参照重み値を設定する。
例示的に、カレントブロック外部の周辺位置の参照重み値は単調増加してもよいか、又は、カレントブロック外部の周辺位置の参照重み値は単調減少してもよい。例えば、カレントブロック外部の周辺位置の参照重み値は0 0 … 0 0 2 4 6 8 8 … 8 8であってもよく、又は、カレントブロック外部の周辺位置の参照重み値は8 8 … 8 8 6 4 2 0 0 … 0 0であってもよい。
例示的に、カレントブロック外部の周辺位置は、整数画素位置、又は、副画素位置、又は、整数画素位置と副画素位置を含んでもよい。カレントブロック外部の周辺位置は、カレントブロック外部の上側1行の周辺位置、又は、カレントブロック外部の左側1列の周辺位置、又は、カレントブロック外部の下側1行の周辺位置、又は、カレントブロック外部の右側1列の周辺位置を含んでもよいが、これらに限定されない。もちろん、上記は周辺位置の例に過ぎず、これに関しては限定しない。
可能な一実施形態では、カレントブロック外部の周辺位置の参照重み値は、目標領域の参照重み値、目標領域の第1隣接領域の参照重み値、目標領域の第2隣接領域の参照重み値を含む。つまり、カレントブロック外部の周辺位置を目標領域、目標領域の第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予測モードに基づいて該画素位置の第2予測値を決定し、該第1予測値、該目標重み値、該第2予測値及び該関連重み値に基づいて、該画素位置の重み付け予測値を決定する。
例示的に、目標重み値が第1予測モードに対応する重み値であり、関連重み値が第2予測モードに対応する重み値であると仮定すると、該画素位置の重み付け予測値は、(該画素位置の第1予測値*該画素位置の目標重み値+該画素位置の第2予測値*該画素位置の関連重み値)/固定のプリセット数値であってもよい。
又は、目標重み値が第2予測モードに対応する重み値であり、関連重み値が第1予測モードに対応する重み値であると仮定すると、該画素位置の重み付け予測値は、(該画素位置の第2予測値*該画素位置の目標重み値+該画素位置の第1予測値*該画素位置の関連重み値)/固定のプリセット数値であってもよい。
ステップ305、カレントブロックの全ての画素位置の重み付け予測値に基づいてカレントブロックの重み付け予測値を決定する。
例えば、カレントブロックの全ての画素位置の重み付け予測値でカレントブロックの重み付け予測値を構成する。
以上の技術案から分かるように、本発明の実施例では、重み値を設定する有効な方式を提案し、カレントブロックの各画素位置に合理的な目標重み値を設定することができ、カレントブロックの予測値を元の画素により近づけることができ、それによって予測の正確性を向上させ、予測性能を向上させ、符号化性能を向上させる。
実施例2:実施例1に基づいて、本発明の実施例では別の符号化・復号方法を提案し、図4Aに示されるのは、符号化・復号方法のフローチャートであり、該方法は符号化側に適用されてもよく、該方法は以下のステップを含んでもよい。
ステップ401、カレントブロックに対する重み付け予測を開始すると決定される際に、符号化側はカレントブロックの重み予測角度、カレントブロックの重み予測位置及びカレントブロックの重み変換率を取得する。例示的に、符号化側はカレントブロックに対する重み付け予測を開始するか否かを決定し、そうであれば、ステップ401及び後続のステップを実行し、そうでなければ、本発明では処理方式を限定しない。
可能な一実施形態では、カレントブロックが重み付け予測を開始する条件を満たす場合、符号化側はカレントブロックに対する重み付け予測を開始すると決定してもよい。カレントブロックが重み付け予測を開始する条件を満たさない場合、カレントブロックに対する重み付け予測を開始しないと決定する。例えば、カレントブロックの特徴情報が特定の条件を満たすか否かを判断する。満たす場合、カレントブロックに対する重み付け予測を開始すると決定し、満たさない場合、カレントブロックに対する重み付け予測を開始しないと決定する。特徴情報は、カレントブロックの位置するカレントフレームのフレームタイプ、カレントブロックのサイズ情報、スイッチ制御情報のうちの1つ又は任意の組み合わせを含むが、これらに限定されない。スイッチ制御情報は、シーケンスレベル(SPS(Sequence Paramater Set、シーケンスパラメータセット)、SH(Sequence Header、シーケンスヘッダ))スイッチ制御情報、画像レベル(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 Unit、変換ユニット))スイッチ制御情報のうちの1つ又は任意の組み合わせを含んでもよいが、これらに限定されない。
例えば、特徴情報がカレントブロックの位置するカレントフレームのフレームタイプである場合、カレントブロックの位置するカレントフレームのフレームタイプが特定の条件を満たすことは、カレントブロックの位置するカレントフレームのフレームタイプがBフレームである場合、フレームタイプが特定の条件を満たすと決定し、又は、カレントブロックの位置するカレントフレームのフレームタイプがIフレームである場合、フレームタイプが特定の条件を満たすと決定することを含んでもよいが、これらに限定されない。
例えば、特徴情報がカレントブロックのサイズ情報、例えばカレントブロックの幅及び高さである場合、カレントブロックのサイズ情報が特定の条件を満たすことは、幅が第1幅数値以上であり、高さが第2高さ数値以上である場合、カレントブロックのサイズ情報が特定の条件を満たすと決定し、又は、幅が第3幅数値以上であり、高さが第4高さ数値以上であり、幅が第5幅数値以下であり、高さが第6高さ数値以下である場合、カレントブロックのサイズ情報が特定の条件を満たすと決定し、又は、幅と高さとの積が積数値以上である場合、カレントブロックのサイズ情報が特定の条件を満たすと決定することを含むが、これらに限定されない。上記数値は経験に基づいて設定されてもよく、例えば8、16、32、64、128などである。例えば、第1幅数値は8であり、第2高さ数値は8であり、第3幅数値は8であり、第4高さ数値は8であり、第5幅数値は64であり、第6高さ数値は64であり、積数値は64である。以上のように、幅が8以上であり、高さが8以上である場合、カレントブロックのサイズ情報が特定の条件を満たすと決定する。又は、幅が8以上であり、高さが8以上であり、幅が64以下であり、高さが64以下である場合、カレントブロックのサイズ情報が特定の条件を満たすと決定する。又は、幅と高さとの積が64以上である場合、カレントブロックのサイズ情報が特定の条件を満たすと決定する。上記は例示に過ぎず、これに関しては限定しない。
例えば、特徴情報がカレントブロックのサイズ情報、例えばカレントブロックの幅及び高さである場合、カレントブロックのサイズ情報が特定の条件を満たすことは、幅がa以上b以下であり、高さがa以上b以下であることを含んでもよいが、これに限定されない。aは16以下であってもよく、bは16以上であってもよい。例えば、aは8に等しく、bは64に等しいか又はbは32に等しい。
例えば、特徴情報がスイッチ制御情報である場合、該スイッチ制御情報が特定の条件を満たすことは、スイッチ制御情報がカレントブロックの重み付け予測の開始を許可する場合、該スイッチ制御情報が特定の条件を満たすと決定することを含んでもよいが、これに限定されない。
例えば、特徴情報がカレントブロックの位置するカレントフレームのフレームタイプ及びカレントブロックのサイズ情報である場合、フレームタイプが特定の条件を満たし、かつサイズ情報が特定の条件を満たす場合、カレントブロックの特徴情報が特定の条件を満たすと決定してもよい。又は、特徴情報がカレントブロックの位置するカレントフレームのフレームタイプ及びスイッチ制御情報である場合、フレームタイプが特定の条件を満たし、かつスイッチ制御情報が特定の条件を満たす場合、カレントブロックの特徴情報が特定の条件を満たすと決定してもよい。又は、特徴情報がカレントブロックのサイズ情報及びスイッチ制御情報である場合、サイズ情報が特定の条件を満たし、かつスイッチ制御情報が特定の条件を満たす場合、カレントブロックの特徴情報が特定の条件を満たすと決定してもよい。又は、特徴情報がカレントブロックの位置するカレントフレームのフレームタイプ、カレントブロックのサイズ情報及びスイッチ制御情報である場合、フレームタイプが特定の条件を満たし、サイズ情報が特定の条件を満たし、かつスイッチ制御情報が特定の条件を満たす場合、カレントブロックの特徴情報が特定の条件を満たすと決定してもよい。
可能な一実施形態では、カレントブロックに対する重み付け予測を開始すると決定される際に、符号化側はカレントブロックの重み予測角度、カレントブロックの重み予測位置及びカレントブロックの重み変換率を取得してもよい。
例示的に、重み予測角度はカレントブロック内部の画素位置が指す角度方向を表し、図4Bには、ある重み予測角度に基づいて、カレントブロック内部の画素位置(例えば画素位置1、画素位置2及び画素位置3)の指す角度方向を示し、該角度方向はカレントブロック外部のある周辺位置を指す。図4Cには、別の重み予測角度に基づいて、カレントブロック内部の画素位置(例えば画素位置2、画素位置3及び画素位置4)の指す角度方向を示し、該角度方向はカレントブロック外部のある周辺位置を指す。
例示的に、重み予測位置(距離パラメータと呼ばれてもよい)はカレントブロック外部の周辺位置の参照重み値を設定するために用いられる。例えば、図4B又は図4Cに示すように、カレントブロックの重み予測角度、カレントブロックのサイズなどのパラメータに基づいて、カレントブロック外部の周辺位置の範囲(例えばカレントブロック外部の周辺位置の数)を決定する。
そして、周辺位置の範囲をN等分し、Nの値は任意に設定してもよく、例えば4、6、8などであり、8を例に説明し、重み予測位置はカレントブロック外部のどの周辺位置をカレントブロックの重み変換の開始位置とするかを表すために用いられ、それによって重み変換の開始位置に基づいてカレントブロック外部の周辺位置の参照重み値を設定する。
図4Dに示すように、全ての周辺位置を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に対応する重み予測位置はb0からb6の合計7つの位置を選択する。
上記は周辺位置の範囲をN等分する例であり、実際の適用では、不等分割の方式を採用してもよく、例えば、N等分ではなく、周辺位置の範囲をN部に分割し、これに関しては限定はない。
全ての周辺位置を8等分した後、7つの重み予測位置を得ることができ、ステップ401において、符号化側は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などの数値を経過する必要がある。重み変換率の絶対値が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を任意の数に置き換えてもよい。
ステップ402、符号化側はカレントブロックの重み変換率及び重み変換の開始位置に基づいてカレントブロック外部の周辺位置に参照重み値を設定する。
例示的に、重み変換の開始位置は、カレントブロックの重み予測角度、カレントブロックの重み予測位置、カレントブロックのサイズのうちの少なくとも1つのパラメータによって決定されてもよく、したがって、カレントブロックの重み予測角度、カレントブロックの重み予測位置及びカレントブロックのサイズのうちの少なくとも1つに基づいて、カレントブロックの重み変換の開始位置を決定してもよい。そして、カレントブロックの重み変換率及び重み変換の開始位置に基づいてカレントブロック外部の周辺位置に参照重み値を設定する。
ステップ403、カレントブロックの各画素位置に対して、符号化側はカレントブロックの重み予測角度に基づいてカレントブロック外部の周辺位置から該画素位置の指す周辺マッチング位置を決定する。区別を容易にするために、本実施例では、該画素位置の指すカレントブロック外部の周辺位置を、該画素位置の周辺マッチング位置と呼んでもよい。
例示的に、重み予測角度はカレントブロック内部の画素位置が指す角度方向を表すので、カレントブロックの各画素位置に対して、該重み予測角度に基づいて該画素位置の指す角度方向を決定し、続いて該角度方向に基づいてカレントブロック外部の周辺位置から該画素位置の指す周辺マッチング位置を決定する。
カレントブロック外部の周辺位置は、カレントブロック外部の上側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つの整数画素位置に対応してもよい。もちろん、上記はいくつかの例示に過ぎず、これに関しては限定せず、周辺位置と整数画素位置との関係は任意に設定されてもよい。
図4B及び図4Cに示すように、1つの周辺位置が1つの整数画素位置に対応し、図4Eに示すように、2つの周辺位置が1つの整数画素位置に対応し、他の場合について、本実施例では説明を省略する。
ステップ404、符号化側は周辺マッチング位置に関連する参照重み値に基づいて該画素位置の目標重み値を決定する。
カレントブロックの各画素位置に対して、該画素位置の指す周辺マッチング位置を決定した後、符号化側は該周辺マッチング位置に関連する参照重み値を決定し、該周辺マッチング位置に関連する参照重み値に基づいて該画素位置の目標重み値を決定し、例えば、該周辺マッチング位置に関連する参照重み値を該画素位置の目標重み値として決定する。
可能な一実施形態では、符号化側が周辺マッチング位置に関連する参照重み値に基づいて該画素位置の目標重み値を決定することは、以下のいくつかの場合を含んでもよい。
場合1、該周辺マッチング位置が整数画素位置であり、かつ該整数画素位置に参照重み値が設定されている場合、該整数画素位置の参照重み値に基づいて該画素位置の目標重み値を決定する。
場合2、該周辺マッチング位置が整数画素位置であり、かつ該整数画素位置に参照重み値が設定されていない場合、該整数画素位置の隣接位置の参照重み値に基づいて該画素位置の目標重み値を決定してもよい。例えば、隣接位置の参照重み値に切り上げを行い、該画素位置の目標重み値を得るか、又は、隣接位置の参照重み値に切り捨てを行い、該画素位置の目標重み値を得るか、又は、該整数画素位置の隣接位置の参照重み値の内挿に基づいて該画素位置の目標重み値を決定してもよく、これに関しては限定しない。
場合3、該周辺マッチング位置が副画素位置であり、かつ該副画素位置に参照重み値が設定されている場合、該副画素位置の参照重み値に基づいて該画素位置の目標重み値を決定することができる。
場合4、該周辺マッチング位置が副画素位置であり、かつ該副画素位置に参照重み値が設定されていない場合、該副画素位置の隣接位置の参照重み値に基づいて該画素位置の目標重み値を決定してもよい。例えば、隣接位置の参照重み値に切り上げを行い、該副画素位置の目標重み値を得るか、又は、隣接位置の参照重み値に切り捨てを行い、該副画素位置の目標重み値を得るか、又は、該副画素位置の隣接位置の参照重み値の内挿に基づいて該副画素位置の目標重み値を決定してもよく、これに関しては限定しない。
場合5、周辺マッチング位置に関連する複数の参照重み値に基づいて該画素位置の目標重み値を決定し、例えば、周辺マッチング位置が整数画素位置又は副画素位置である場合、周辺マッチング位置の複数の隣接位置の参照重み値を取得する。周辺マッチング位置に参照重み値が設定されている場合、周辺マッチング位置の参照重み値及び複数の隣接位置の参照重み値に基づいて重み付け演算を行い、該画素位置の目標重み値を得る。周辺マッチング位置に参照重み値が設定されていない場合、複数の隣接位置の参照重み値に基づいて重み付け演算を行い、該画素位置の目標重み値を得る。
ステップ405、符号化側は該画素位置の目標重み値に基づいて該画素位置の関連重み値を決定する。
例示的に、各画素位置について、該画素位置の目標重み値と該画素位置の関連重み値との和は、固定のプリセット数値であってもよく、即ち関連重み値は、プリセット数値と目標重み値との差であってもよい。これに基づいて、プリセット数値が8であると仮定し、該画素位置の目標重み値が2であれば、該画素位置の関連重み値は6である。
ステップ406、カレントブロックの各画素位置に対して、符号化側はカレントブロックの第1予測モードに基づいて該画素位置の第1予測値を決定し、カレントブロックの第2予測モードに基づいて該画素位置の第2予測値を決定する。
例示的に、第1予測モードは、イントラブロックコピー予測モード、イントラ予測モード、インター予測モード、パレットモードのうちのいずれかであってもよく、第2予測モードは、イントラブロックコピー予測モード、イントラ予測モード、インター予測モード、パレットモードのうちのいずれかであってもよい。例えば、第1予測モードはイントラブロックコピー予測モードであってもよく、第2予測モードはイントラブロックコピー予測モードであってもよく、又は、第1予測モードはイントラブロックコピー予測モードであってもよく、第2予測モードはイントラ予測モードであってもよく、又は、第1予測モードはイントラブロックコピー予測モードであってもよく、第2予測モードはインター予測モードであってもよく、又は、第1予測モードはイントラブロックコピー予測モードであってもよく、第2予測モードはパレットモードであってもよく、このように類推し、第1予測モード及び第2予測モードの両方に関しては限定しない。
第1予測モード及び第2予測モードに基づいて予測値を決定するプロセスについて、後続の実施例を参照する。
ステップ407、符号化側は該画素位置の第1予測値、該画素位置の目標重み値、該画素位置の第2予測値及び該画素位置の関連重み値に基づいて、該画素位置の重み付け予測値を決定する。
例えば、該画素位置の重み付け予測値は、(該画素位置の第1予測値*該画素位置の目標重み値+該画素位置の第2予測値*該画素位置の関連重み値)/固定のプリセット数値であってもよい。
ステップ408、符号化側はカレントブロックの全ての画素位置の重み付け予測値に基づいてカレントブロックの重み付け予測値を決定する。
以上の技術案から分かるように、本発明の実施例では、重み値を設定する有効な方式を提案し、カレントブロックの各画素位置に合理的な目標重み値を設定することができ、カレントブロックの予測値を元の画素により近づけることができ、それによって予測の正確性を向上させ、予測性能を向上させ、符号化性能を向上させる。
実施例3:実施例1に基づいて、本発明の実施例では別の符号化・復号方法を提案し、図4Fに示すように、符号化・復号方法のフローチャートであり、該方法は復号側に適用されてもよく、該方法は以下のステップを含んでもよい。
ステップ411、カレントブロックに対する重み付け予測を開始すると決定される際に、復号側はカレントブロックの重み予測角度、カレントブロックの重み予測位置、及びカレントブロックの重み変換率を取得する。例示的に、復号側はカレントブロックに対する重み付け予測を開始するか否かを決定し、開始する場合、ステップ411及び後続のステップを実行し、開始しない場合、本発明では処理方式を限定しない。
可能な一実施形態では、符号化側はカレントブロックの特徴情報が特定の条件を満たすか否かを判断し、満たす場合、カレントブロックに対する重み付け予測を開始すると決定する。復号側もカレントブロックの特徴情報が特定の条件を満たすか否かを判断し、満たす場合、カレントブロックに対する重み付け予測を開始すると決定し、満たさない場合、カレントブロックに対する重み付け予測を開始しないと決定する。復号側がどのように特徴情報に基づいてカレントブロックが重み付け予測を開始するか否かを決定するかについて、ステップ401を参照することができ、ここではその説明を省略する。
別の可能な実施形態では、符号化側はカレントブロックの特徴情報に基づいてカレントブロックが重み付け予測をサポートするか否かを決定し、カレントブロックが重み付け予測をサポートする場合、他の方式を採用してカレントブロックに対する重み付け予測を開始するか否かを決定してもよく、例えばRDO原則を採用してカレントブロックに対する重み付け予測を開始するか否かを決定する。カレントブロックに対する重み付け予測を開始するか否かを決定した後、符号化側はカレントブロックの符号化ビットストリームを送信する際に、該符号化ビットストリームは、重み付け予測を開始するか否かのシンタックスを含んでもよく、該シンタックスはカレントブロックに対する重み付け予測を開始するか否かを表す。復号側はまずカレントブロックの特徴情報に基づいてカレントブロックが重み付け予測をサポートするか否かを決定し、カレントブロックが重み付け予測をサポートする場合、復号側は符号化ビットストリームから重み付け予測を開始するか否かのシンタックスを解析し、該シンタックスに基づいてカレントブロックに対する重み付け予測を開始するか否かを決定する。
例示的に、カレントブロックに対する重み付け予測を開始すると決定される際に、復号側はカレントブロックの重み予測角度、カレントブロックの重み予測位置及びカレントブロックの重み変換率を取得してもよく、該重み予測角度、該重み予測位置及び該重み変換率に関する説明は、ステップ401を参照することができ、ここではその説明を省略する。
ステップ412、復号側はカレントブロックの重み変換率及び重み変換の開始位置に基づいてカレントブロック外部の周辺位置に参照重み値を設定する。
例示的に、復号側はカレントブロックの重み予測角度、カレントブロックの重み予測位置及びカレントブロックのサイズのうちの少なくとも1つに基づいて、カレントブロックの重み変換の開始位置を決定してもよい。そして、復号側はカレントブロックの重み変換率及び重み変換の開始位置に基づいてカレントブロック外部の周辺位置に参照重み値を設定する。
ステップ413、カレントブロックの各画素位置に対して、復号側はカレントブロックの重み予測角度に基づいてカレントブロック外部の周辺位置から該画素位置の指す周辺マッチング位置を決定する。
ステップ414、復号側は該周辺マッチング位置に関連する参照重み値に基づいて該画素位置の目標重み値を決定する。
ステップ415、復号側は該画素位置の目標重み値に基づいて該画素位置の関連重み値を決定する。
ステップ416、カレントブロックの各画素位置に対して、復号側はカレントブロックの第1予測モードに基づいて該画素位置の第1予測値を決定し、カレントブロックの第2予測モードに基づいて該画素位置の第2予測値を決定する。
ステップ417、復号側は該画素位置の第1予測値、該画素位置の目標重み値、該画素位置の第2予測値及び該画素位置の関連重み値に基づいて、該画素位置の重み付け予測値を決定する。
ステップ418、復号側はカレントブロックの全ての画素位置の重み付け予測値に基づいてカレントブロックの重み付け予測値を決定する。
例示的に、ステップ412~ステップ418について、その実現プロセスはステップ402~ステップ408を参照してもよく、相違点は、ステップ412~ステップ418が復号側の処理フローであり、符号化側の処理フローではない点であり、ここではその説明を省略する。
以上の技術案から分かるように、本発明の実施例では、重み値を設定する有効な方式を提案し、カレントブロックの各画素位置に合理的な目標重み値を設定することができ、カレントブロックの予測値を元の画素により近づけ、それによって予測の正確性を向上させ、予測性能を向上させ、符号化・復号性能を向上させる。
実施例4:実施例1~実施例3では、重み予測角度に基づいて重み付け処理を行う必要があり、このような重み付け処理方式をインター角度重み付け予測(Angular Weighted Prediction、AWP)モードと記すことができ、即ち、カレントブロックがAWPモードをサポートする場合、実施例1~実施例3を採用してカレントブロックを予測し、カレントブロックの予測値を得る。
実施例1~実施例3は重み予測角度に関し、該重み予測角度は任意の角度であってもよく、例えば180度内の任意の角度、又は、360度内の任意の角度、例えば10度、20度、30度などであり、この重み予測角度に関しては限定しない。
可能な一実施形態では、該重み予測角度は水平角度(図7Bの角度2のように)であってもよく、又は、該重み予測角度は垂直角度(図7Bの角度6のように)であってもよく、又は、該重み予測角度の勾配の絶対値(重み予測角度の勾配の絶対値はつまり重み予測角度の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乗)などであってもよい。例示的に、図5には、8種類の重み予測角度を示し、これらの重み予測角度の勾配の絶対値は2のn乗である。
本発明の実施例では、重み予測角度のシフト操作を行ってもよく、重み予測角度のシフト操作を行う例について後続の実施例を参照し、したがって、重み予測角度の勾配の絶対値が2のn乗である場合、重み予測角度のシフト操作を行う際に、除算を回避することができ、それによってシフトを実現しやすい。
例示的に、異なるブロックサイズ(即ちカレントブロックのサイズ)によってサポートされる重み予測角度の数は、同じであっても異なっていてもよい。例えば、ブロックサイズAは8種類の重み予測角度をサポートし、ブロックサイズB及びブロックサイズCは6種類の重み予測角度をサポートするなどである。
実施例5:上記実施例1~実施例3では、符号化側/復号側はカレントブロックの重み変換率及びカレントブロックの重み変換の開始位置に基づいてカレントブロック外部の周辺位置に参照重み値を設定する必要がある。可能な一実施形態では、カレントブロック外部の各周辺位置に対して、該周辺位置の座標値、該重み変換の開始位置の座標値、及び該重み変換率に基づいて、該周辺位置の参照重み値を設定するという方式を採用してもよい。
例示的に、カレントブロック外部の各周辺位置に対して、該周辺位置がカレントブロック外部の上側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も例示に過ぎない。
例示的に、図4Dに示すように、全ての周辺位置を8等分した後、7つの重み予測位置を得ることができ、重み予測位置が0である場合、周辺位置a0を表し、重み変換の開始位置の座標値が周辺位置a0の座標値である。重み予測位置が1である場合、周辺位置a1を表し、重み変換の開始位置の座標値が周辺位置a1の座標値であり、このように類推し、重み変換の開始位置の座標値の決定方式について、ここではその説明を省略する。
実施例6:実施例1~実施例3では、符号化側/復号側はカレントブロックの重み変換率及びカレントブロックの重み変換の開始位置に基づいてカレントブロック外部の周辺位置に参照重み値を設定する必要がある。可能な一実施形態では、カレントブロックの重み予測角度、カレントブロックの重み変換率及びカレントブロックの重み予測位置を取得し、カレントブロックの重み予測位置に基づいてカレントブロックの重み変換の開始位置を決定し、該重み変換の開始位置及び該重み変換率に基づいて重み設定パラメータを決定し、即ち該重み設定パラメータは重み変換の開始位置及び重み変換率を含み、そして、該重み設定パラメータに基づいてカレントブロック外部の周辺位置の参照重み値を決定するという方式を採用してもよい。
以下、具体的な実現方法を参照して、カレントブロック外部の周辺位置に参照重み値を設定するプロセスについて説明する。
まず有効数の参照重み値を取得し、そして有効数の参照重み値に基づいて、カレントブロック外部の周辺位置の参照重み値を設定する。
例示的に、カレントブロック外部の周辺位置の数は有効数であり、有効数の参照重み値を取得する必要があり、該有効数はカレントブロックのサイズ及び/又はカレントブロックの重み予測角度に基づいて決定されてもよい。例えば、ValidLength=(N+(M>>X))<<1という方式を採用して該有効数ValidLengthを決定し、Nはカレントブロックの高さであり、Mはカレントブロックの幅であり、Xはカレントブロックの重み予測角度の勾配の絶対値のlog2対数値であり、例えば0又は1であり、<<は左シフトを表し、>>は右シフトを表す。
a<<bは、本発明ではaを2の補数整数表現の形でbビット左にシフトすると理解されてもよく、かつbが正数であるときにこの演算が定義される。簡単に言えば、a<<bは、aに2のb乗を掛けると理解されてもよい。a>>bは、本発明ではaを2の補数整数表現の形でbビット右シフトすると理解されてもよく、かつbが正数であるときにこの演算が定義される。簡単に言えば、a>>bは、aを2のb乗で割ると理解されてもよい。
可能な一実施形態では、有効数の参照重み値について、単調増加するか、又は、単調減少してもよい。又は、有効数の参照重み値について、複数の第1重み数値を最初に含み、複数の第2重み数値を後に含むか、又は、複数の第2重み数値を最初に含み、複数の第1重み数値を後に含んでもよい。以下、いくつかの具体的な場合を参照して説明する。
場合1:有効数の参照重み値について、単調増加するか、又は、単調減少してもよい。例えば、有効数の参照重み値は[8 8 ... 8 8 7 6 5 4 3 2 1 0 0 ... 0 0]であってもよく、即ち単調減少する。また例えば、有効数の参照重み値は[0 0 ... 0 0 1 2 3 4 5 6 7 8 8 ... 8 8]であってもよく、即ち単調増加する。もちろん、上記は例示に過ぎず、これに関しては限定しない。
例示的に、参照重み値は重み設定パラメータに基づいて設定されてもよく、該重み設定パラメータは重み変換率及び重み変換の開始位置を含んでもよく、重み変換率の取得方式は後続の実施例を参照することができ、重み変換の開始位置は経験によって設定された数値であってもよく、重み予測位置から重み変換の開始位置を決定してもよいし、重み予測角度及び重み予測位置から重み変換の開始位置を決定してもよく、これに関しては限定しない。
有効数の参照重み値について、最初から最後までの順に、単調増加するか又は単調減少してもよい。例えば、参照重み値の最大値はM1であり、参照重み値の最小値はM2であり、有効数の参照重み値について、最大値M1から最小値M2まで単調減少し、又は、最小値M2から最大値M1まで単調増加する。M1が8であり、M2が0であると仮定すると、複数の参照重み値は、8から0まで単調減少するか、又は0から8まで単調増加してもよい。
例示的に、まず重み変換率及び重み変換の開始位置を取得し、そして、重み変換率及び重み変換の開始位置に基づいて、複数の参照重み値を決定してもよい。例えば、y(x)=Clip3(最小値、最大値、a*(x-s))という方式を採用して参照重み値を決定し、xは周辺位置のインデックスを表し、即ちxの値範囲は1-有効数値であり、例えばxは1であり、1番目の周辺位置を表し、y(x)はx番目の周辺位置の参照重み値を表し、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(x)=Clip3(最小値、最大値、a*(x-s))では、重み変換率a及び重み変換の開始位置sはいずれも既知値であり、カレントブロック外部の各周辺位置xに対して、該関数関係によって該周辺位置の参照重み値y(x)を決定することができる。例えば、重み変換率aが2であり、重み変換の開始位置sが2であると仮定すると、該関数関係はy(x)=Clip3(最小値、最大値、2*(x-2))であってもよく、カレントブロック外部の各周辺位置xに対して、参照重み値y(x)を得ることができる。
以上のように、カレントブロックの有効数の参照重み値を得ることができ、これらの参照重み値は単調増加するか又は単調減少する。可能な一実施形態では、カレントブロック外部の周辺位置の参照重み値は、目標領域の参照重み値、目標領域の第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:有効数の参照重み値について、先に複数の第3数値を含み、後に複数の第4数値を含んでもよく、又は、先に複数の第4数値を含み、後に複数の第3数値を含んでもよい。例えば、有効数の参照重み値は、[8 8 ... 8 8 0 0 ... 0 0]又は[0 0 ... 0 0 8 8 ... 8 8]であってもよい。例示的に、重み変換の開始位置に基づいて複数の参照重み値を決定してもよい。例えば、重み変換の開始位置はs番目の参照重み値を表し、したがって、s番目の参照重み値の前(s番目の参照重み値を含まない)の全ての参照重み値は第3数値(例えば8)であり、s番目の参照重み値の後(s番目の参照重み値を含む)の全ての参照重み値は第4数値(例えば0)である。又は、s番目の参照重み値の前の全ての参照重み値は第4数値であり、s番目の参照重み値の後の全ての参照重み値は第3数値である。
有効数の参照重み値を得た後、有効数の参照重み値に基づいて、カレントブロック外部の周辺位置の参照重み値を設定する。
例示的に、カレントブロック外部の周辺位置の数が有効数であり、かつ参照重み値の数が有効数であると、有効数の参照重み値を、カレントブロック外部の周辺位置の参照重み値として設定してもよい。例えば、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:図6には、4種類の重み変換率の参照重み値の概略図を示す。
重み変換率の絶対値が1である場合、即ち重み変換率が1であるか又は重み変換率が-1である場合、ReferenceWeights[i]=Clip3(0,8,1*(i-FirstPos))の式によりカレントブロックの各周辺位置の参照重み値を導出してもよく、上記式はReferenceWeight[i]=Clip3(0,8,i-FirstPos)と等価であってもよい。該場合では、図6に示す第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)と等価であってもよい。該場合では、図6に示す第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)と等価であってもよい。該場合では、図6に示す第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)と等価であってもよい。該場合では、図6に示す第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の位置を合わせることができる。
例示的に、カレントブロックについて、重み変換率切り替えをサポートし、かつ重み変換率切り替えを開始する際に、図6に示す4種類の重み変換率の参照重み値分布例から1つを選択して切り替えることができ、それによって画像又は画像の局所領域に重み変換率の切り替えを行うことにより、いくつかの画像表示シナリオにおける画像表示のジャンプが目立つことを弱める。例えば、いくつかの画像表示シナリオではジャンプが比較的目立つという問題を解決する必要がある場合、AWPモードの重み変化率切り替えはこの問題を解決することができる。例えば、混合画像コンテンツは、部分的なスクリーンコンテンツ、アニメーション、アニメーションを含む画像などを含み、スクリーンコンテンツを含むある領域に重み変換率切り替えを行ってもよく、ジャンプが比較的目立つという問題を解決する。
上記プロセスでは、ValidLengthはカレントブロックの重み予測角度及びカレントブロックのサイズに関連し、技術案の簡略化のために、最適化のためにいくつかのパラメータを定数化してもよい。例えば、カレントブロックの重み予測角度を固定のパラメータ値として設定してもよく、ValidLengthはカレントブロックのサイズのみに関連する。FirstPosはカレントブロックの重み予測角度、カレントブロックのサイズ、カレントブロックの重み予測位置に関連する。また例えば、カレントブロックの重み予測角度を固定のパラメータ値として設定してもよく、FirstPosはカレントブロックのサイズ及びカレントブロックの重み予測位置のみに関連する。又は、カレントブロックの重み予測位置を固定のパラメータ値として設定し、FirstPosはカレントブロックのサイズ及びカレントブロックの重み予測角度のみに関連する。又は、カレントブロックの重み予測角度及びカレントブロックの重み予測位置をいずれも固定のパラメータ値として設定し、この2つの固定のパラメータ値は同じであっても異なっていてもよく、FirstPosはカレントブロックのサイズのみに関連する。
実施例7:実施例1~実施例3では、符号化側/復号側はカレントブロックの重み変換率及びカレントブロックの重み変換の開始位置に基づいてカレントブロック外部の周辺位置に参照重み値を設定する必要がある。可能な一実施形態では、M及びNがそれぞれカレントブロックの幅及び高さであると記し、図7Aに示すように、角度重み付け予測モード(AWP)の重みアレイ導出方式は、以下を含む。
ステップa1、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は重み予測角度が位置する角度エリアを表す。図7Bには、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に基づいて、modAngNumが2に等しい場合、angleIdx=7であり、modAngNumが6に等しい場合、angleIdx=8であり、そうでなければ、angleIdx=modAngNum%2の方式を採用してangleIdxを決定してもよい。
例示的に、subAngleIdx=modAngNum>>1の式を採用してsubAngleIdxを決定してもよい。
以上のように、表1に示すように、符号化側はカレントブロックの重み予測角度及びカレントブロックの重み予測位置を決定した後、該重み予測角度及び該重み予測位置に基づいてAwpIdxの値を決定することができる。符号化側が復号側に符号化ビットストリームを送信する場合、該符号化ビットストリームにAwpIdxの値を付加してもよく、これに基づいて、復号側はAwpIdxの値を得ることができ、AwpIdxに基づいてstepIdx、angleIdx及びsubAngleIdxを取得する。
例示的に、表2に示すように、angleIdx及びsubAngleIdxは1つの重み予測角度を一意に決定することができ、もちろん、例えば、エリア番号を変更するなど、他の方式を採用して重み予測角度を決定することもできる。
ステップa2、stepIdx、angleIdx及びsubAngleIdxに基づいてカレントブロック外部の周辺位置に参照重み値を設定する。ステップa2は以下のような場合がある。
場合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]の開始位置が変化することである。例えば、図7Cには、角度エリア2及び角度エリア3の例を示し、1/2-pel精度の場合、参照重み値ReferenceWeights[x]の開始位置は(高さ<<1)>>angleIdxであり、即ち式中のオフセット「-((N<<1)>>angleIdx)」である。角度エリア0及び角度エリア1の実現は類似しているが、式中のオフセットは「-((M<<1)>>angleIdx)」であり、即ち高さを幅に変更すればよいだけである。
ステップa3、angleIdx及び参照重み値ReferenceWeights[x]に基づいて画素位置の輝度重み値を取得する。
場合1、subAngleIdxが0である場合、AwpWeightArrayY[x][y]=ReferenceWeights[(y<<1)+((x<<1)>>angleIdx)]の式を採用して画素位置(x,y)の輝度重み値を決定してもよく(y<<1)+((x<<1)>>angleIdx)、(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)、(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)、(y<<1)+((x<<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)、(y<<1)+((x<<1)>>angleIdx)は画素位置(x,y)の指す周辺位置を表し、ReferenceWeights[(x<<1)+((y<<1)>>angleIdx)]は該周辺位置の参照重み値を表す。xの値範囲は0からM-1であり、yの値範囲は0からN-1である。
上記ステップa2及びステップa3は1つのステップに統合してもよく、即ちステップa2(stepIdx、angleIdx及びsubAngleIdxに基づいてカレントブロック外部の周辺位置に参照重み値を設定する)とステップa3(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)の指す周辺マッチング位置を表す。他の場合は同様である。
ステップa4、画素位置の輝度重み値に基づいて該画素位置の色度重み値を取得し、該画素位置の輝度重み値及び該画素位置の色度重み値は、該画素位置の目標重み値を構成することができる。
例えば、色度解像度のフォーマットが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である。
ステップa4の別の実現方式は、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である。
ステップa3及びステップa4では、各場合における式の違いについて、図7Dには、角度エリア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)の位置を交換するだけでよい。
実施例8:実施例1~実施例3では、符号化側/復号側はカレントブロックの重み変換率を取得する必要があり、カレントブロックが重み変換率切り替えモードをサポートする場合、カレントブロックの第1重み変換率指示情報を取得し、該第1重み変換率指示情報に基づいてカレントブロックの重み変換率を決定するという方式を採用してカレントブロックの重み変換率を取得する。例示的に、該第1重み変換率指示情報が第1指示情報である場合、カレントブロックの重み変換率は第1重み変換率であり、第1重み変換率指示情報が第2指示情報である場合、カレントブロックの重み変換率は第2重み変換率である。カレントブロックが重み変換率切り替えモードをサポートしない場合、予め設定された重み変換率をカレントブロックの重み変換率として決定する。第1重み変換率指示情報はカレントブロックが位置するLCU、位置するフレーム、位置する画像、位置するシーケンスなどから取得することができる。例示的に、第1重み変換率指示情報は、画像レベル指示情報であってもよく、例えばPPS、PHレベル指示情報である。
以上のように、カレントブロックが重み変換率切り替えモードをサポートする場合、カレントブロックの重み変換率は第1重み変換率又は第2重み変換率であってもよく、かつ第1重み変換率は第2重み変換率とは異なり、即ち、カレントブロックの重み変換率は可変であり、それによって統一された一つの重み変換率を採用するのではなく、重み変換率を適応的に切り替えることができる。
例示的に、切り替え制御情報がカレントブロックの重み変換率切り替えモードの開始を許可する場合、カレントブロックは重み変換率切り替えモードをサポートし、切り替え制御情報がカレントブロックの重み変換率切り替えモードの開始を許可しない場合、カレントブロックは重み変換率切り替えモードをサポートしない。該切り替え制御情報は、シーケンスレベル切り替え制御情報、画像レベル切り替え制御情報、Slice(スライス)レベル切り替え制御情報、Tile(スライス)レベル切り替え制御情報、Patch(スライス)レベル切り替え制御情報、CTUレベル切り替え制御情報、LCUレベル切り替え制御情報、ブロックレベル切り替え制御情報、CUレベル切り替え制御情報、PUレベル切り替え制御情報などを含んでもよいが、これらに限定されない。
符号化側では、切り替え制御情報を知り、かつ切り替え制御情報がカレントブロックの重み変換率切り替えモードの開始を許可するか否かを知り、続いてカレントブロックが重み変換率切り替えモードをサポートするか否かを決定することができる。符号化側は、切り替え制御情報をビットストリームに符号化してもよく、それによって復号側がビットストリームから切り替え制御情報を解析し、切り替え制御情報がカレントブロックの重み変換率切り替えモードの開始を許可するか否かを知り、続いてカレントブロックが重み変換率切り替えモードをサポートするか否かを決定する。符号化側は、切り替え制御情報をビットストリームに符号化する代わりに、復号側によって切り替え制御情報を暗黙的に導出し、切り替え制御情報がカレントブロックの重み変換率切り替えモードの開始を許可するか否かを知り、続いてカレントブロックが重み変換率切り替えモードをサポートするか否かを決定してもよい。
シーケンスレベル切り替え制御情報を例に、シーケンスレベル切り替え制御情報はawp_adptive_flag(インター角度重み付け予測適応フラグビット)であってもよく、awp_adptive_flagが第1値である場合、シーケンスレベル切り替え制御情報がカレントシーケンスの重み変換率切り替えモードの開始を許可することを表し、それによってカレントブロックの重み変換率切り替えモードの開始を許可し、awp_adptive_flagが第2値である場合、シーケンスレベル切り替え制御情報がカレントシーケンスの重み変換率切り替えモードの開始を許可しないことを表す、それによってカレントブロックの重み変換率切り替えの開始を許可しない。例示的に、第1値は1であり、第2値は0であるか、又は、第1値は0であり、第2値は1である。もちろん、上記は第1値及び第2値の例示に過ぎず、これに関しては限定しない。他のタイプの切り替え制御情報について、実現プロセスはシーケンスレベル切り替え制御情報と類似し、ここではその説明を省略する。
可能な一実施形態では、カレントブロックの第1重み変換率指示情報はカレントブロックに対応する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モードの占有率が一定の割合未満である場合、次のフレームを非スクリーンコンテンツ符号化として決定し、そうでない場合スクリーンコンテンツ符号化が続く。もちろん、上記方式は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識別子として用いられ、SliceレベルがカレントSliceのSCC識別子を示し、該SCC識別子がカレントSliceに属する全てのブロックのSCC識別子として用いられ、TileレベルがカレントTileのSCC識別子を示し、該SCC識別子がカレントTileに属する全てのブロックのSCC識別子として用いられ、PatchレベルがカレントPatchのSCC識別子を示し、該SCC識別子がカレントPatchに属する全てのブロックのSCC識別子として用いられ、CTUレベルがカレントCTUのSCC識別子を示し、該SCC識別子がカレントCTUに属する全てのブロックのSCC識別子として用いられ、LCUレベルがカレントLCUのSCC識別子を示し、該SCC識別子がカレントLCUに属する全てのブロックのSCC識別子として用いられ、ブロックレベルがカレントブロックのSCC識別子を示し、該SCC識別子がカレントブロックに属するSCC識別子として用いられ、CUレベルがカレントCUのSCC識別子を示し、該SCC識別子がカレントCUに属するSCC識別子として用いられ、PUレベルがカレントPUのSCC識別子を示し、該SCC識別子がカレントPUに属するSCC識別子として用いられることである。
例示的に、第2重み変換率をデフォルトの重み変換率としてもよく、SCC識別子はカレントブロックが非スクリーンコンテンツ符号化に属することを示すために用いられる場合、重み変換率を切り替える必要がなく、即ちカレントブロックの重み変換率が第2重み変換率であると決定する。SCC識別子はカレントブロックがスクリーンコンテンツ符号化に属することを示すために用いられる場合、重み変換率を切り替える必要があり、即ちカレントブロックの重み変換率が第1重み変換率であると決定する。又は、第1重み変換率をデフォルトの重み変換率としてもよく、SCC識別子はカレントブロックが非スクリーンコンテンツ符号化に属することを示すために用いられる場合、重み変換率を切り替える必要があり、即ちカレントブロックの重み変換率が第2重み変換率であると決定する。SCC識別子はカレントブロックがスクリーンコンテンツ符号化に属することを示すために用いられる場合、重み変換率を切り替える必要がなく、即ちカレントブロックの重み変換率が第1重み変換率であると決定する。
例示的に、図8Aに示されるのは、SCCシーケンス(即ちスクリーンコンテンツ符号化に属するシーケンス)の概略図であり、図8Bに示されるのは、自然シーケンス(即ち非スクリーンコンテンツ符号化に属するシーケンス)の概略図である。SCCシーケンスの場合、色の変化は1つの画素で完了し、自然シーケンスの場合、色の変化は、いくつかの画素の遷移を経る必要がある。以上のことから、SCCシーケンスは、通常、色が一致する大きい領域及び急激な色変化などの特徴を持ち、SCCシーケンスに対する重み付け予測もそのような特徴に適応すべきであり、したがって、AWPモードの重み値は、滑らかに遷移する特徴を減らし、即ち重み変換率を増加させてSCCシーケンスの特徴に適応すべきであることが分かる。以上のように、カレントブロックがスクリーンコンテンツ符号化に属する場合、カレントブロックの重み変換率は第1重み変換率であり、カレントブロックが非スクリーンコンテンツ符号化に属する場合、カレントブロックの重み変換率は第2重み変換率であり、かつ第1重み変換率の絶対値は第2重み変換率の絶対値より大きく、例えば第1重み変換率の絶対値は4であり、第2重み変換率の絶対値は1であり、それによってSCCシーケンスに属するカレントブロックの重み変換率の絶対値は増加し、即ち変換速度は増加する。例えば、表3に示されるのは、SCCシーケンスに対する実際のテストの性能ゲイン(例えばBD-rate性能ゲイン)であり、重み変換率が1から4に切り替わるときの性能ゲインを表すために用いられる。表3から、SCCシーケンス1のYチャネル成分について、重み変換率が1から4に切り替わるとき、-1.83%のBD-rate性能ゲインが得られ、同等の客観的品質条件下で、重み変換率を切り替えることによりビットレートを1.83%下げることができることに相当することが分かる。SCCシーケンス1のUチャネル成分について、重み変換率が1から4に切り替わるとき、ビットレートを1.19%下げることができ、SCCシーケンス1のVチャネル成分について、重み変換率が1から4に切り替わるとき、ビットレートを1.05%下げることができる。重み変換率が1から4に切り替わるとき、符号化側の符号化複雑度はそのままとなり、復号側の復号複雑度は101%増加する。他のSCCシーケンスについても、重み変換率が1から4に切り替わるとき、ビットレートを下げることができ、以上のように、性能ゲインを上げることができる。
別の可能な実施形態では、カレントブロックの第1重み変換率指示情報はカレントブロックに対応する重み変換率切り替え識別子であってもよく、第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重み変換率に対応するRDOコスト値1と、第2重み変換率に対応するRDOコスト値2とを決定する。RDOコスト値1がRDOコスト値2より小さければ、カレントブロックは重み変換率切り替えを行う必要がないことを決定し、RDOコスト値2がRDOコスト値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として用いられ、SliceレベルがカレントSliceのrefine_flagを示し、カレントSliceに属する全てのブロックのrefine_flagとして用いられ、TileレベルがカレントTileのrefine_flagを示し、カレントTileに属する全てのブロックのrefine_flagとして用いられ、PatchレベルがカレントPatchのrefine_flagを示し、カレントPatchに属する全てのブロックのrefine_flagとして用いられ、CTUレベルがカレントCTUのrefine_flagを示し、カレントCTUに属する全てのブロックのrefine_flagとして用いられ、LCUレベルがカレントLCUのrefine_flagを示し、カレントLCUに属する全てのブロックのrefine_flagとして用いられ、ブロックレベルがカレントブロックのrefine_flagを示し、カレントブロックに属するrefine_flagとして用いられ、CUレベルがカレントCUのrefine_flagを示し、カレントCUに属するrefine_flagとして用いられ、PUレベルがカレントPUのrefine_flagを示し、カレントPUに属するrefine_flagとして用いられることである。もちろん、上記はいくつかの例示に過ぎず、これに関しては限定しない。
例示的に、第1重み変換率をデフォルトの重み変換率としてもよく、重み変換率切り替え識別子はカレントブロックが重み変換率切り替えを行う必要がないことを示すために用いられる場合、重み変換率の切り替えを行わず、即ちカレントブロックの重み変換率が第1重み変換率であると決定する。重み変換率切り替え識別子はカレントブロックが重み変換率切り替えを行う必要があることを示すために用いられる場合、重み変換率の切り替えを行い、即ちカレントブロックの重み変換率が第2重み変換率であると決定する。
実施例9:実施例1~実施例3では、符号化側/復号側はカレントブロックの重み予測角度及び重み予測位置を取得する必要があり、実施例8では、カレントブロックの重み変換率、例えば第1重み変換率又は第2重み変換率を取得することができ、その上で、以下の方式を採用してカレントブロックの重み予測角度及び重み予測位置を取得する。
方式1、符号化側及び復号側は、カレントブロックの重み予測角度として同じ重み予測角度を取り決め、かつカレントブロックの重み予測位置として同じ重み予測位置を取り決める。例えば、符号化側及び復号側は、重み予測角度Aをカレントブロックの重み予測角度とし、符号化側及び復号側は、重み予測位置4をカレントブロックの重み予測位置とする。
方式2、符号化側は、重み予測角度A及び重み予測角度Bのような少なくとも1つの重み予測角度を含む重み予測角度リストを構築する。符号化側は、少なくとも1つの重み予測位置、例えば重み予測位置0~重み予測位置番号6を含む重み予測位置リストを構築する。符号化側は、重み予測角度リスト内の各重み予測角度を順にトラバースし、重み予測位置リスト内の各重み予測位置をトラバースし、即ち、各重み予測角度及び各重み予測位置の組み合わせをトラバースする。重み予測角度と重み予測位置の各組み合わせに対して、ステップ401で取得する重み予測角度及び重み予測位置として、該重み予測角度、該重み予測位置及び重み変換率(実施例8で取得)に基づいて、ステップ402~ステップ408を実行し、カレントブロックの重み付け予測値を取得する。
例えば、符号化側は、重み予測角度A及び重み予測位置0までトラバースするとき、重み予測角度A及び重み予測位置0に基づいて、ステップ402~408を実行し、カレントブロックの重み付け予測値A-0を取得する。符号化側は、重み予測角度A及び重み予測位置1までトラバースするとき、重み予測角度A及び重み予測位置1に基づいて、ステップ402~408を実行し、カレントブロックの重み付け予測値A-1を取得する。符号化側は、重み予測角度B及び重み予測位置0までトラバースするとき、重み予測角度B及び重み予測位置0に基づいてステップ402~ステップ408を実行し、カレントブロックの重み付け予測値B-0を取得し、このように類推する。符号化側は、各組み合わせ(重み予測角度と重み予測位置との組み合わせ)に基づいて、対応する重み付け予測値を取得することができる。
符号化側は、重み予測角度と重み予測位置との組み合わせに基づいて各重み付け予測値を取得した後、各重み付け予測値に基づいて対応するRDOコスト値を決定してもよく、このRDOコスト値の決定方式については限定せず、符号化側は、各々の組み合わせのRDOコスト値を取得し、全てのRDOコスト値から最小RDOコスト値を選択してもよい。
そして、符号化側は、最小RDOコスト値に対応する重み予測角度及び重み予測位置の組み合わせをそれぞれ目標重み予測角度及び目標重み予測位置とし、最後に、目標重み予測角度の重み予測角度リストにおけるインデックス値と、目標重み予測位置の重み予測位置リストにおけるインデックス値とをビットストリームに符号化する。
もちろん、上記方式は例示に過ぎず、これに関しては限定せず、カレントブロックの重み予測角度及び重み予測位置を取得できればよい。例えば、重み予測角度リストから、1つの重み予測角度を、カレントブロックの重み予測角度としてランダムに選択し、重み予測位置リストから、1つの重み予測位置を、カレントブロックの重み予測位置としてランダムに選択してもよい。
復号側では、復号側は重み予測角度リストを構築し、該重み予測角度リストは符号化側の重み予測角度リストと同じであり、該重み予測角度リストは、少なくとも1つの重み予測角度、例えば、重み予測角度A及び重み予測角度Bを含む。復号側は重み予測位置リストを構築し、該重み予測位置リストは符号化側の重み予測位置リストと同じであり、該重み予測位置リストは、少なくとも1つの重み予測位置、例えば、重み予測位置0~重み予測位置番号6を含む。復号側は、カレントブロックの符号化ビットストリームを受信すると、該符号化ビットストリームから指示情報を解析し、該指示情報に基づいて重み予測角度リストから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に対応する重み予測位置を選択し、該重み予測位置をカレントブロックの重み予測位置とする。
実施例10:実施例1~実施例3では、符号化側/復号側は、カレントブロックの重み変換率を取得する必要があり、カレントブロックが重み変換率切り替えモードをサポートする場合、カレントブロックの第2重み変換率指示情報を取得し、予め設定されたルックアップテーブルから該第2重み変換率指示情報に対応する重み変換率を選択し、該予め設定されたルックアップテーブルは、少なくとも2つの重み変換率を含み、選択した重み変換率をカレントブロックの重み変換率として決定する方式を採用してカレントブロックの重み変換率を取得する。
予め設定されたルックアップテーブルは、少なくとも2つの重み変換率を含むので、カレントブロックが重み変換率切り替えモードをサポートする場合、少なくとも2つの重み変換率からカレントブロックの重み変換率を選択してもよく、即ち、カレントブロックの重み変換率が可変であり、それによって統一された重み変換率を採用するのではなく、重み変換率を適応的に切り替えることができる。
例示的に、切り替え制御情報がカレントブロックの重み変換率切り替えモードの開始を許可する場合、カレントブロックは重み変換率切り替えモードをサポートし、切り替え制御情報がカレントブロックの重み変換率切り替えモードの開始を許可しない場合、カレントブロックは重み変換率切り替えモードをサポートせず、カレントブロックが重み変換率切り替えモードをサポートするか否かについて、実施例8を参照する。
可能な一実施形態では、予め設定されたルックアップテーブルは、少なくとも2つの重み変換率を含んでもよく、第2重み変換率指示情報は、重み変換率インデックス情報(ルックアップテーブル内の全ての重み変換率のうちの特定の重み変換率を示すために用いられる)を含んでもよい。これに基づいて、該重み変換率インデックス情報に対応する重み変換率を該ルックアップテーブルから選択することができる。
符号化側では、1つのルックアップテーブルのみが存在する場合、ルックアップテーブルにおける各重み変換率に対して、符号化側は、該重み変換率に対応するRDOコスト値を決定し、最小のRDOコスト値に対応する重み変換率をカレントブロックの目標重み変換率として、目標重み変換率のルックアップテーブルにおけるインデックス情報、即ち重み変換率インデックス情報を決定してもよく、該重み変換率インデックス情報は該ルックアップテーブルにおける何番目の重み変換率であるかを表す。
復号側では、1つのルックアップテーブルのみが存在する場合、符号化側がカレントブロックの符号化ビットストリームを復号側に送信するとき、該符号化ビットストリームに、目標重み変換率のルックアップテーブルにおけるインデックス情報を示すための重み変換率インデックス情報を付加してもよい。復号側は、該重み変換率インデックス情報に対応する重み変換率を、カレントブロックの目標重み変換率として該ルックアップテーブルから選択する。
別の可能な実施形態では、予め設定されたルックアップテーブルは、少なくとも2つのルックアップテーブルを含んでもよく、各ルックアップテーブルは、少なくとも1つの重み変換率を含んでもよく、第2重み変換率指示情報は、ルックアップテーブルインデックス情報(全てのルックアップテーブルのうちの特定のルックアップテーブルを示すために用いられる)及び重み変換率インデックス情報(ルックアップテーブルにおける全ての重み変換率のうちの特定の重み変換率を示すために用いられる)を含んでもよい。これに基づいて、少なくとも2つのルックアップテーブルから該ルックアップテーブルインデックス情報に対応する目標ルックアップテーブルを選択し、目標ルックアップテーブルから該重み変換率インデックス情報に対応する重み変換率を選択することができる。
例示的に、予め設定されたルックアップテーブルは、第1ルックアップテーブルと第2ルックアップテーブルとを含んでもよく、第2ルックアップテーブルに含まれる重み変換率の絶対値の最大値は、第1ルックアップテーブルに含まれる重み変換率の絶対値の最大値より大きく、例えば、第2ルックアップテーブルに含まれる重み変換率の絶対値が4、8であり、第1ルックアップテーブルに含まれる重み変換率の絶対値が5、7であり、明らかに、第2ルックアップテーブルに含まれる重み変換率の絶対値の最大値が8であり、第1ルックアップテーブルに含まれる重み変換率の絶対値の最大値が7であることが分かる。第2ルックアップテーブルに含まれる重み変換率の絶対値は、第1ルックアップテーブルに含まれる重み変換率の絶対値と完全に同一ではなく、例えば、第2ルックアップテーブルに含まれる重み変換率の絶対値が4、8であり、第1ルックアップテーブルに含まれる重み変換率の絶対値が1、2、4であり、2つのルックアップテーブルに含まれる重み変換率の絶対値は完全に同一ではない。又は、第2ルックアップテーブルに含まれる重み変換率の絶対値は、第1ルックアップテーブルに含まれる重み変換率の絶対値と全く異なり、例えば、第2ルックアップテーブルに含まれる重み変換率の絶対値が4、8であり、第1ルックアップテーブルに含まれる重み変換率の絶対値が1、2であり、2つのルックアップテーブルに含まれる重み変換率の絶対値は全く異なる。
例示的に、第2重み変換率指示情報は、ルックアップテーブルインデックス情報と、重み変換率インデックス情報とを含み、該ルックアップテーブルインデックス情報は、カレントブロックに対応するSCC識別子であってもよく、かつ該SCC識別子はカレントブロックがスクリーンコンテンツ符号化に属することを示すために用いられ、又は、該SCC識別子はカレントブロックが非スクリーンコンテンツ符号化に属することを示すために用いられる。該SCC識別子はカレントブロックが非スクリーンコンテンツ符号化に属することを示すために用いられる場合、該SCC識別子に対応する目標ルックアップテーブルは、第1ルックアップテーブルである。該SCC識別子はカレントブロックがスクリーンコンテンツ符号化に属することを示すために用いられる場合、該SCC識別子に対応する目標ルックアップテーブルは、第2ルックアップテーブルである。
以上のように、カレントブロックに対応するSCC識別子(即ち、ルックアップテーブルインデックス情報)と重み変換率インデックス情報を取得し、該SCC識別子はカレントブロックが非スクリーンコンテンツ符号化に属することを示すために用いられる場合、目標ルックアップテーブルは第1ルックアップテーブルであると決定し、第1ルックアップテーブルから該重み変換率インデックス情報に対応する重み変換率を選択し、選択した重み変換率をカレントブロックの重み変換率として決定してもよい。該SCC識別子はカレントブロックがスクリーンコンテンツ符号化に属することを示すために用いられる場合、目標ルックアップテーブルは第2ルックアップテーブルであると決定し、第2ルックアップテーブルから該重み変換率インデックス情報に対応する重み変換率を選択し、選択した重み変換率をカレントブロックの重み変換率として決定する。これまで、カレントブロックの重み変換率を得ることに成功する。
符号化側では、符号化側がSCC識別子を取得するプロセスについて、実施例8を参照することができ、ここではその説明を省略する。
SCC識別子はカレントブロックが非スクリーンコンテンツ符号化に属することを示すために用いられる場合、目標ルックアップテーブルは第1ルックアップテーブルであってもよく、第1ルックアップテーブル内の各重み変換率について、符号化側は、該重み変換率に対応するRDOコスト値を決定し、最小のRDOコスト値に対応する重み変換率をカレントブロックの目標重み変換率とし、目標重み変換率の第1ルックアップテーブルにおけるインデックス情報、即ち重み変換率インデックス情報を決定する。SCC識別子はカレントブロックがスクリーンコンテンツ符号化に属することを示すために用いられる場合、目標ルックアップテーブルは第2ルックアップテーブルであってもよく、第2ルックアップテーブル内の各重み変換率について、符号化側は、該重み変換率に対応するRDOコスト値を決定し、最小のRDOコスト値に対応する重み変換率をカレントブロックの目標重み変換率とし、目標重み変換率の第2ルックアップテーブルにおけるインデックス情報、即ち重み変換率インデックス情報を決定し、該重み変換率インデックス情報は第2ルックアップテーブルの何番目の重み変換率であるかを表す。
復号側では、復号側がSCC識別子を取得するプロセスについて、実施例8を参照することができ、ここではその説明を省略する。
符号化側がカレントブロックの符号化ビットストリームを復号側に送信するとき、該符号化ビットストリームに重み変換率インデックス情報を付加してもよく、該重み変換率インデックス情報は第1ルックアップテーブル又は第2ルックアップテーブルにおける目標重み変換率のインデックス情報を示すために用いられる。SCC識別子はカレントブロックが非スクリーンコンテンツ符号化に属することを示すために用いられる場合、目標ルックアップテーブルは第1ルックアップテーブルであってもよく、復号側は、第1ルックアップテーブルから、カレントブロックの重み変換率として、該重み変換率インデックス情報(該重み変換率インデックス情報は第1ルックアップテーブルの何番目の重み変換率であるかを表す)に対応する重み変換率を選択する。SCC識別子はカレントブロックがスクリーンコンテンツ符号化に属することを示すために用いられる場合、目標ルックアップテーブルは第2ルックアップテーブルであってもよく、復号側は、第2ルックアップテーブルから、カレントブロックの重み変換率として、該重み変換率インデックス情報(該重み変換率インデックス情報は第2ルックアップテーブルの何番目の重み変換率であるかを表す)に対応する重み変換率を選択する。
実施例11:実施例1~実施例3では、符号化側/復号側は、カレントブロックの重み予測角度、カレントブロックの重み予測位置及びカレントブロックの重み変換率を取得する必要があり、実施例10では、カレントブロックの重み変換率を取得してもよく、その上で、以下の方式を採用してカレントブロックの重み予測角度及び重み予測位置を取得してもよい。
方式1、符号化側及び復号側は、カレントブロックの重み予測角度として同じ重み予測角度を取り決め、かつカレントブロックの重み予測位置として同じ重み予測位置を取り決める。例えば、符号化側及び復号側は、重み予測角度Aをカレントブロックの重み予測角度とし、符号化側及び復号側は、重み予測位置4をカレントブロックの重み予測位置とする。
方式2、符号化側は、重み予測角度A及び重み予測角度Bのような少なくとも1つの重み予測角度を含む重み予測角度リストを構築する。符号化側は、少なくとも1つの重み予測位置、例えば重み予測位置0~重み予測位置番号6を含む重み予測位置リストを構築する。符号化側は、少なくとも2つのルックアップテーブルを構築し、第1ルックアップテーブルと第2ルックアップテーブルを例に、第1ルックアップテーブルは少なくとも1つの重み変換率を含み、第2ルックアップテーブルは少なくとも1つの重み変換率を含む。符号化側は目標ルックアップテーブルを決定し、決定方式は実施例10を参照し、目標ルックアップテーブルが第1ルックアップテーブルであることを例とする。符号化側は、重み予測角度リスト内の各重み予測角度を順にトラバースし、重み予測位置リスト内の各重み予測位置をトラバースし、目標ルックアップテーブル内の各重み変換率をトラバースし、即ち、各重み予測角度、各重み予測位置、及び各重み変換率の組み合わせをトラバースする。重み予測角度、重み予測位置、及び重み変換率の各組み合わせに対して、ステップ401で取得する重み予測角度、重み予測位置、及び重み変換率として、重み予測角度、重み予測位置、及び重み変換率に基づいて、ステップ402~408を実行し、カレントブロックの重み付け予測値を取得する。
以上のように、符号化側は、各組み合わせ(即ち、重み予測角度、重み予測位置及び重み変換率の組み合わせ)に対して、カレントブロックに対応する重み付け予測値を得ることができる。カレントブロックの各重み付け予測値を得た後、符号化側は、カレントブロックの各重み付け予測値に基づいて対応するRDOコスト値を決定してもよく、該RDOコスト値の決定方式について限定せず、符号化側は、各組み合わせのRDOコスト値を得て、全てのRDOコスト値から最小のRDOコスト値を選択してもよい。
そして、符号化側は、最小RDOコスト値に対応する重み予測角度、重み予測位置及び重み変換率をそれぞれ目標重み予測角度、目標重み予測位置及び目標重み変換率とし、最後に、目標重み予測角度の重み予測角度リストにおけるインデックス値、目標重み予測位置の重み予測位置リストにおけるインデックス値、及び目標重み変換率の目標ルックアップテーブルにおけるインデックス値を、いずれもカレントブロックのビットストリームに符号化する。
復号側について、復号側は、符号化側の重み予測角度リストと同じ重み予測角度リストを構築し、復号側は、符号化側の重み予測位置リストと同じ重み予測位置リストを構築し、復号側は、符号化側のルックアップテーブルと同じルックアップテーブルを構築する。復号側は、カレントブロックの符号化ビットストリームを受信すると、該符号化ビットストリームから指示情報を解析し、該指示情報に基づいて、重み予測角度リストから1つの重み予測角度をカレントブロックの重み予測角度として選択し、該指示情報に基づいて、重み予測位置リストから1つの重み予測位置をカレントブロックの重み予測位置として選択し、重み予測角度及び重み予測位置の取得方式は、実施例9を参照し、ここではその説明を省略する。復号側は、カレントブロックの符号化ビットストリームを受信すると、目標ルックアップテーブル(例えば、第1ルックアップテーブル、第2ルックアップテーブル)を決定し、重み変換率インデックス情報に基づいて目標ルックアップテーブルから1つの重み変換率をカレントブロックの重み変換率として選択してもよく、重み変換率の取得方式については、実施例10を参照し、ここではその説明を省略する。
実施例12:上記実施例1~実施例3では、第1予測モードに基づいて画素位置の第1予測値を決定し、第2予測モードに基づいて画素位置の第2予測値を決定する必要がある。
本実施例では、第1予測モードがインター予測モードであり、第2予測モードがインター予測モードである例を説明する。
場合1、第1予測モードがインター予測モードであり、第2予測モードがインター予測モードであり、少なくとも2つの動き情報候補を含む動き情報候補リストを取得する。動き情報候補リストから1つの動き情報候補をカレントブロックの第1目標動き情報として選択し、動き情報候補リストから別の動き情報候補をカレントブロックの第2目標動き情報として選択する。カレントブロックの各画素位置に対して、第1目標動き情報に基づいて該画素位置の第1予測値を決定し、第2目標動き情報に基づいて該画素位置の第2予測値を決定する。
例示的に、符号化側及び復号側では、いずれも動き情報候補リストを取得することができ、符号化側の動き情報候補リストと復号側の動き情報候補リストは同じであり、この動き情報候補リストについては限定しない。
例示的に、動き情報候補リストの動き情報候補は、いずれも単一仮説動き情報であり、例えば、動き情報候補リストの動き情報候補は、単方向動き情報のみであり、双方向動き情報ではない。明らかに、動き情報候補は、いずれも単一仮説動き情報であるため、動き情報候補リストは、単方向動き情報候補リストであってもよい。
動き情報候補リストの取得プロセスについて、後続の実施例を参照することができ、ここではその説明を省略する。
符号化側では、RDO原則に基づいて、動き情報候補リストから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目標動き情報に基づいて画素位置の第1予測値を決定し、第2目標動き情報に基づいて画素位置の第2予測値を決定するプロセスについて、インター予測プロセスを参照することができ、これに関しては限定しない。
例示的に、第1目標動き情報に基づいて画素位置の第1予測値を決定する場合、インター重み付け予測モードを採用して画素位置の第1予測値を取得してもよい。例えば、第1目標動き情報を用いて画素位置の初期予測値を決定し、そして該初期予測値に予め設定された係数を乗算し、調整予測値を得る。調整予測値が最大予測値より大きい場合、最大予測値をカレントブロックの第1予測値とし、調整予測値が最小予測値よりも小さい場合、最小予測値をカレントブロックの第1予測値とし、調整予測値が最小予測値以上であり、最大予測値以下である場合、調整予測値をカレントブロックの第1予測値とする。もちろん、上記方式は例示に過ぎず、これに関しては限定しない。
同様に、第2目標動き情報に基づいて画素位置の第2予測値を決定する場合、インター重み付け予測モードを採用して画素位置の第2予測値を取得してもよく、具体的な実現方式は上記例を参照し、ここではその説明を省略する。
場合2、第1予測モードがインター予測モードであり、第2予測モードがインター予測モードであり、第1動き情報候補リスト及び第2動き情報候補リストを取得し、第1動き情報候補リストは少なくとも1つの動き情報候補を含み、第2動き情報候補リストは少なくとも1つの動き情報候補を含む。第1動き情報候補リストから1つの動き情報候補を、カレントブロックの第1目標動き情報として選択し、第2動き情報候補リストから1つの動き情報候補を、カレントブロックの第2目標動き情報として選択する。カレントブロックの各画素位置に対して、第1目標動き情報に基づいて該画素位置の第1予測値を決定し、第2目標動き情報に基づいて該画素位置の第2予測値を決定する。
例示的に、符号化側及び復号側では、いずれも第1動き情報候補リスト及び第2動き情報候補リストを取得することができ、符号化側の第1動き情報候補リストは復号側の第1動き情報候補リストと同じであり、符号化側の第2動き情報候補リストは復号側の第2動き情報候補リストと同じである。
第1動き情報候補リスト内の動き情報候補は、いずれも単一仮説動き情報であり、即ち、第1動き情報候補リスト内の動き情報候補について、単方向動き情報のみであり、双方向動き情報ではない。明らかに、動き情報候補は、いずれも単一仮説動き情報であるため、第1動き情報候補リストは、単方向動き情報候補リストであってもよい。
第2動き情報候補リスト内の動き情報候補は、いずれも単一仮説動き情報であり、即ち、第2動き情報候補リスト内の動き情報候補について、単方向動き情報のみであり、双方向動き情報ではない。明らかに、動き情報候補は、いずれも単一仮説動き情報であるため、第2動き情報候補リストは、単方向動き情報候補リストであってもよい。
第1動き情報候補リスト及び第2動き情報候補リストの取得プロセスについて、後続の実施例をする。
符号化側では、RDO原則に基づいて、第1動き情報候補リストから1つの動き情報候補をカレントブロックの第1目標動き情報として選択し、第2動き情報候補リストから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目標動き情報として選択する。
上記場合において、第1予測モードの予測情報の指示情報と第2予測モードの予測情報の指示情報とは、入れ替え可能であり、符号化側と復号側とが一致すればよく、ここでは指示情報の入れ替えであり、解析プロセスに影響を与えず、即ち解析への依存はない。同一の予測モード候補リストの場合、第1予測モードの予測情報の指示情報と第2予測モードの予測情報の指示情報とは等しくならず、2つのインデックス値を符号化すると仮定して、インデックス値aの値が1、インデックス値bの値が3であり、先にインデックス値aを符号化するとき、インデックス値bは2(3-1)と符号化してもよく、先にインデックス値bを符号化するとき、インデックス値bは3と符号化する必要がある。以上のように、まず小さいインデックス値の指示情報を符号化し、大きいインデックス値の符号化コストを下げることができ、予測モード候補リスト構築方式において、最初の予測モードは左側から来る確率が高く、この経験に基づいて符号化側と復号側の調整を行い、左側に隣接する領域の予測情報の指示情報を先に符号化してもよい。
以下、場合1を参照して説明するが、他の場合についても場合1と同様である。場合1において、予測モード候補リストは、動き情報候補リストであってもよく、第1予測モードの予測情報は、第1目標動き情報であってもよく、第2予測モードの予測情報は、第2目標動き情報であってもよい。符号化ビットストリームにおいて、第1目標動き情報の指示情報、例えばインデックス値aを先に符号化し、その後、第2目標動き情報の指示情報、例えばインデックス値bを後に符号化する。第2目標動き情報の指示情報、例えばインデックス値bを先に符号化し、その後に第1目標動き情報の指示情報、例えばインデックス値aを符号化してもよい。例えば、インデックス値aの値が1であり、インデックス値bの値が3であると仮定すると、インデックス値aを先に符号化し、インデックス値bを後に符号化する。また例えば、インデックス値bの値が1であり、インデックス値aの値が3であると仮定すると、インデックス値bを先に符号化し、インデックス値aを後に符号化する。
実施例13:上記実施例1~実施例3では、第1予測モードに基づいて画素位置の第1予測値を決定し、第2予測モードに基づいて画素位置の第2予測値を決定する必要がある。例示的に、第1予測モードは、イントラブロックコピー予測モード、イントラ予測モード、インター予測モード、パレットモードのうちのいずれかであってもよく、第2予測モードは、イントラブロックコピー予測モード、イントラ予測モード、インター予測モード、パレットモードのいずれかであってもよい。
本実施例では、第1予測モードがインター予測モードであり、第2予測モードがインター予測モードである例を説明する。第1予測モードはインター予測モードであるので、これに基づいて、カレントブロックの第1予測モードに基づいて画素位置の第1予測値を決定するステップは、少なくとも1つの動き情報候補を含む動き情報候補リストを取得するステップと、動き情報候補リストから1つの動き情報候補をカレントブロックの元の動き情報として選択するステップと、元の動き情報に基づいてカレントブロックの目標動き情報を決定するステップと、目標動き情報に基づいて画素位置の第1予測値を決定するステップと、を含む。
場合1、第1予測モードがインター予測モードであり、第2予測モードがインター予測モードであり、少なくとも2つの動き情報候補を含み得る動き情報候補リストを取得する。該動き情報候補リストから、1つの動き情報候補をカレントブロックの第1の元の動き情報として選択し、動き情報候補リストから別の動き情報候補をカレントブロックの第2の元の動き情報として選択し、第1の元の動き情報と第2の元の動き情報とは異なる。そして、第1の元の動き情報に基づいてカレントブロックの第1目標動き情報を決定し、第2の元の動き情報に基づいてカレントブロックの第2目標動き情報を決定する。カレントブロックの各画素位置に対して、第1目標動き情報に基づいて該画素位置の第1予測値を決定し、第2目標動き情報に基づいて該画素位置の第2予測値を決定する。
動き情報候補リストの取得プロセスについて、後続の実施例を参照することができ、ここではその説明を省略する。第1目標動き情報に基づいて第1予測値を決定し、第2目標動き情報に基づいて第2予測値を決定するプロセスについて、実施例12を参照することができ、ここでその説明を省略する。実施例12との違いは、実施例13では、動き情報候補リストから選択した動き情報候補が、目標動き情報ではなく、元の動き情報とされる点である。元の動き情報を取得した後、元の動き情報に基づいて目標動き情報を取得することも可能であるが、具体的な取得プロセスは、後続の実施例を参照する。
場合2、第1予測モードがインター予測モードであり、第2予測モードがインター予測モードであり、第1動き情報候補リスト及び第2動き情報候補リストを取得し、第1動き情報候補リストは少なくとも1つの動き情報候補を含み、第2動き情報候補リストは少なくとも1つの動き情報候補を含む。第1動き情報候補リストから1つの動き情報候補をカレントブロックの第1の元の動き情報として選択し、第1の元の動き情報に基づいてカレントブロックの第1目標動き情報を決定する。第2動き情報候補リストから1つの動き情報候補をカレントブロックの第2の元の動き情報として選択し、第2の元の動き情報に基づいてカレントブロックの第2目標動き情報を決定する。カレントブロックの各画素位置に対して、第1目標動き情報に基づいて該画素位置の第1予測値を決定し、第2目標動き情報に基づいて該画素位置の第2予測値を決定する。実施例12との違いは、実施例13では、動き情報候補リストから選択した動き情報候補が、目標動き情報ではなく、元の動き情報とされる点である。元の動き情報を取得した後、元の動き情報に基づいて目標動き情報を取得することも可能であるが、具体的な取得プロセスは、後続の実施例を参照する。
以上のように、上記場合について、予測モードがインター予測モードである場合、少なくとも1つの動き情報候補を含む動き情報候補リストを取得してもよい。そして、該動き情報候補リストから動き情報候補をカレントブロックの元の動き情報として選択し、かつ第1の元の動き情報に基づいて第1目標動き情報を決定し、第2の元の動き情報に基づいて第2目標動き情報を決定してもよい。そして、該目標動き情報に基づいて画素位置の予測値を決定する。
元の動き情報に基づいて目標動き情報をどのように決定するかについて、本実施例では単方向動き情報に差分動きベクトルを重ねる手法(Motion Vector Refinement)を示し、例えば、元の動き情報は、元の動きベクトルを含み、目標動き情報は、目標動きベクトルを含み、元の動きベクトルに基づいてカレントブロックの目標動きベクトルを決定するためには、元の動きベクトルに対応する差分動きベクトル(MVD)を取得し、差分動きベクトルと元の動きベクトルに基づいて目標動きベクトルを決定し、即ち、差分動きベクトルと元の動きベクトルとの和を目標動きベクトルとしてもよい。
実施例14:実施例13を基に、差分動きベクトルの方向情報及び振幅情報を取り決め、方向情報が方向を右向き、振幅情報が振幅をArと表すと、差分動きベクトルは(Ar,0)となり、方向情報が方向を下向き、振幅情報が振幅をAdと表すと、差分動きベクトルは(0,-Ad)となり、方向情報が方向を左向き、振幅情報が振幅をAlと表すと、差分動きベクトルは(-Al,0)となり、方向情報が方向を上向き、振幅情報が振幅をAuと表すと、差分動きベクトルは(0,Au)となり、方向情報が方向を右上向き、振幅情報が振幅をAruと表すと、差分動きベクトルは(Aru,Aru)となり、方向情報が方向を左上向き、振幅情報が振幅をAluと表すと、差分動きベクトルは(-Alu,Alu)となり、方向情報が方向を左下向き、振幅情報が振幅をAldと表すと、差分動きベクトルは(-Ald,-Ald)となり、方向情報が方向を右下向き、振幅情報が振幅をArdと表すと、差分動きベクトルは(Ard,-Ard)となる。
なお、上記振幅Ar、Ad、Al、Au、Aru、Alu、Ald及びArdは、それぞれ1つの値の集合を表しており、異なる方向における振幅の集合における各値は、全て同じであってもよいし、部分的に同じであってもよいし、全て異なっていてもよい。
例示的に、差分動きベクトルは、上記方向情報の一部又は全部をサポートしてもよく、差分動きベクトルがサポートする振幅の値の範囲は、経験に基づいて設定されてもよく、少なくとも1つの値であってもよく、これに関しては限定しない。
例えば、差分動きベクトルは上、下、左、右などの4つの方向をサポートし、差分動きベクトルは1/4-pel、1/2-pel、1-pel、2-pel、4-pelの5種類のステップの長さの設定をサポートし、即ち振幅の値は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)であってもよい。
また例えば、差分動きベクトルは上、下、左、右などの4つの方向をサポートし、差分動きベクトルは1/4-pel、1/2-pel、1-pel、2-pel、3-pel、4-pelの6種類のステップの長さの設定をサポートし、即ち振幅の値は1、2、4、8、12、16であってもよい。以上のように、方向が上向きの場合、差分動きベクトルは、(0,1)、(0,2)、(0,4)、(0,8)、(0,12)、(0,16)であってもよく、他の方向の差分動きベクトルに関しては、「上」の実現方式と類似するため、ここではその説明を省略する。
また例えば、差分動きベクトルは上、下、左、右、左上、左下、右上、右下などの8つの方向をサポートし、差分動きベクトルは1/4-pel、1/2-pel、1-pelの3種類のステップの長さの設定をサポートし、即ち振幅の値は1、2、4であってもよい。以上のように、方向が左上向きの場合、差分動きベクトルは、(-1,1)、(-2,2)、(-4,4)であってもよく、方向が右上向きの場合、差分動きベクトルは、(1,1),(2,2),(4,4)であってもよく、他の方向の差分動きベクトルに関しては、「左上、右上」の実現方式と類似するため、ここではその説明を省略する。
また例えば、差分動きベクトルは上、下、左、右などの4つの方向をサポートし、差分動きベクトルは1/4-pel、1/2-pel、1-pel、2-pelの4種類のステップの長さの設定をサポートし、即ち振幅の値は1、2、4、8であってもよい。
もちろん、上記は、いくつかの例を示したに過ぎず、これに関しては限定しない。例えば、差分動きベクトルがサポートする方向は、上、下、左、右、左上、左下などの6つの方向をサポートするか、又は、上、下などの2つの方向をサポートするなど、任意に選択することが可能である。また例えば、差分動きベクトルがサポートするステップの長さの設定は可変であり、柔軟な設定が可能となる。また例えば、量子化パラメータQP(Quantization Parameter)などの符号化パラメータに基づいてステップの長さの設定を適応的に設定してもよく、例えば比較的大きい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)であってもよい。
符号化側では、動き情報候補リストを取得した後、動き情報候補リスト内の各動きベクトル候補を順にトラバースする。動きベクトル候補1までトラバースするとき、動きベクトル候補1と差分動きベクトル(0,4)との和を動きベクトル候補1-1とし、動きベクトル候補1-1に対応するRDOコスト値1-1を決定するが、その決定プロセスについては限定しない。動きベクトル候補1と差分動きベクトル(0,8)との和を動きベクトル候補1-2とし、動きベクトル候補1-2に対応するRDOコスト値1-2を決定する。動きベクトル候補1と差分動きベクトル(0,-4)との和を動きベクトル候補1-3とし、動きベクトル候補1-3に対応するRDOコスト値1-3を決定し、動きベクトル候補1と差分動きベクトル(0,-8)との和を動きベクトル候補1-4とし、動きベクトル候補1-4に対応するRDOコスト値1-4を決定する。
このように類推し、RDOコスト値を取得するために、トラバースした各動きベクトル候補に対して、いずれも上記方式を採用して処理を行ってもよい。全ての動きベクトル候補のトラバースが完了した後、全てのRDOコスト値から最小のRDOコスト値を選択し、RDOコスト値1-1が最小であると仮定すると、符号化側は、動きベクトル候補1の動き情報候補リストにおけるインデックス値、差分動きベクトル(0,4)の方向情報及び振幅情報を符号化ビットストリームに符号化してもよく、ここで、方向情報は差分動きベクトル(0,4)の方向が上向きであることを表すために用いられ、振幅情報は差分動きベクトル(0,4)の振幅が4であることを表すために用いられる。例えば、方向情報の指示情報は0であってもよく、方向リスト(上、下)の第1方向を表し、振幅情報の指示情報は4であってもよく、ステップの長さの設定リスト(1-pel、2-pel)の第1ステップの長さの設定を表す。もちろん、上記プロセスは、簡略化した例に過ぎず、方向情報及び振幅情報を表すことができるものであれば、これに関しては限定しない。
例えば、差分動きベクトルが上、下、左、右などの4つの方向をサポートし、差分動きベクトルが1/4-pel、1/2-pel、1-pel、2-pel、4-pelなどの5種類のステップの長さの設定をサポートする場合、差分動きベクトルの方向情報は2bin固定長符号(計4種類の値)で符号化してもよく、2bin固定長符号の4つの値はそれぞれ上、下、左、右などの4つの方向を表す。差分動きベクトルの振幅情報は、トランケーテッド・ユーナリコードで符号化してもよく、即ちトランケーテッド・ユーナリコードにより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種類の値)で符号化してもよい。
もちろん、上記は符号化方式のいくつかの例に過ぎず、この符号化方式については限定しない。
以上のように、符号化側では、一定領域内で最適動きベクトルを検索し、その後最適動きベクトルと動きベクトル候補との差を、差分動きベクトルとし、差分動きベクトルの振幅情報及び方向情報をビットストリームに符号化し、動きベクトル候補の動き情報候補リストにおけるインデックス値をビットストリームに符号化してもよい。符号化側は、一定領域内で最適動きベクトルを検索する際、差分動きベクトルの方向及び振幅を取り決め、即ち、(Ar,0)、(0,-Ad)、(-Al,0)、(0,Au)、(Aru,Aru)、(-Alu,Alu)、(-Ald,-Ald)、(Ard,-Ard)などの差分動きベクトルの限定範囲内で、最適動きベクトルを検索する必要があり、任意の差分動きベクトルの範囲で最適動きベクトルを検索するのではない。
復号側では、カレントブロックの符号化ビットストリームを受信すると、符号化ビットストリームから動きベクトル候補の動き情報候補リストにおけるインデックス値を解析し、動き情報候補リストから該インデックス値に対応する動きベクトル候補を選択し、該動きベクトル候補をカレントブロックの元の動きベクトルとしてもよい。復号側はまた、該符号化ビットストリームから差分動きベクトルの方向情報及び振幅情報を解析し、該方向情報及び振幅情報に基づいて差分動きベクトルを決定してもよい。
そして、復号側は、該差分動きベクトル及び該元の動きベクトルに基づいてカレントブロックの目標動きベクトルを決定してもよく、例えば、該差分動きベクトルと該元の動きベクトルとの和を、カレントブロックの目標動きベクトルとしてもよい。
上記実施例を参照すると、方向情報及び振幅情報に基づいて差分動きベクトルを決定する際に、方向情報が方向を右向き、振幅情報が振幅をArと表すと、差分動きベクトルは(Ar,0)となり、方向情報が方向を下向き、振幅情報が振幅をAdと表すと、差分動きベクトルは(0,-Ad)となり、方向情報が方向を左向き、振幅情報が振幅をAlと表すと、差分動きベクトルは(-Al,0)となり、方向情報が方向を上向き、振幅情報が振幅をAuと表すと、差分動きベクトルは(0,Au)となり、方向情報が方向を右上向き、振幅情報が振幅をAruと表すと、差分動きベクトルは(Aru,Aru)となり、方向情報が方向を左上向き、振幅情報が振幅をAluと表すと、差分動きベクトルは(-Alu,Alu)となり、方向情報が方向を左下向き、振幅情報が振幅をAldと表すと、差分動きベクトルは(-Ald,-Ald)となり、方向情報が方向を右下向き、振幅情報が振幅をArdと表すと、差分動きベクトルは(Ard,-Ard)となる。
上記実施例を参照すると、符号化側は差分動きベクトルの方向情報を符号化する際に、固定長符号、トランケーテッド・ユーナリコードなどの方式をしてもよく、したがって、復号側は固定長符号、トランケーテッド・ユーナリコードなどの方式を採用して、差分動きベクトルの方向情報を復号し、差分動きベクトルの方向情報、例えば、上、下、左、右、左上、左下、右上、右下などを取得してもよい。
上記実施例を参照すると、符号化側は差分動きベクトルの振幅情報を符号化する際に、固定長符号、トランケーテッド・ユーナリコードなどの方式を採用してもよく、したがって、復号側は固定長符号、トランケーテッド・ユーナリコードなどの方式を採用して、差分動きベクトルの振幅情報を復号し、差分動きベクトルの振幅情報、例えば1/4-pel、1/2-pel、1-pel、2-pelなどのステップの長さの設定を取得し、続いて1/4-pel、1/2-pel、1-pel、2-pelなどのステップの長さの設定に基づいて差分動きベクトルの振幅の値を決定してもよい。
以上のように、復号側は、符号化ビットストリームから差分動きベクトルの方向情報及び振幅情報を解析することができ、方向情報及び振幅情報を解析した後、方向情報及び振幅情報に基づいて差分動きベクトルを決定することができる。
可能な一実施形態では、符号化側は、元の動きベクトルに差分動きベクトルを重ねるか、又は、元の動きベクトルに差分動きベクトルを重ねないことを指示するフラグ情報を符号化ビットストリームに符号化してもよい。該フラグ情報は、強調角度重み付け予測モードのサブモードフラグであってもよく、また、強調角度重み付け予測モードは、AWPと動きベクトルリファインメント(AWP with motion vector refinement、AWP-MVR)モードと呼ばれてもよい。復号側は、カレントブロックの符号化ビットストリームを受信すると、まずカレントブロックの符号化ビットストリームから該フラグ情報を解析する。該フラグ情報が、元の動きベクトルに差分動きベクトルを重ねることを指示する場合、復号側はカレントブロックの符号化ビットストリームから差分動きベクトルの方向情報及び振幅情報を解析し、該方向情報及び該振幅情報に基づいて差分動きベクトルを決定し、さらに元の動きベクトル及び差分動きベクトルに基づいてカレントブロックの目標動きベクトルを決定する。該フラグ情報が、元の動きベクトルに差分動きベクトルを重ねないことを指示する場合、復号側は差分動きベクトルの方向情報及び振幅情報を解析せず、元の動きベクトルをそのままカレントブロックの目標動きベクトルとする。
例示的に、強調角度重み付け予測モードのサブモードフラグが第1サブモードの値である場合、元の動きベクトルに差分動きベクトルを重ねることを指示し、強調角度重み付け予測モードのサブモードフラグが第2サブモードの値である場合、元の動きベクトルに差分動きベクトルを重ねないことを指示する。第1サブモードの値及び第2サブモードの値は、経験によって設定されてもよく、例えば第1サブモードの値が1であり、第2サブモードの値が0であり、又は、例えば第1サブモードの値が0であり、第2サブモードの値が1であり、もちろん、上記は2つの例示に過ぎず、これに関しては限定しない。
可能な一実施形態では、実施例13の場合1又は場合2について、第1の元の動き情報は第1の元の動きベクトルを含み、第1目標動き情報は第1目標動きベクトルを含み、第2の元の動き情報は第2の元の動きベクトルを含み、第2目標動き情報は第2目標動きベクトルを含み、これに基づいて、第1の元の動きベクトルに対応する第1差分動きベクトルを取得し、第1差分動きベクトル及び第1の元の動きベクトルに基づいて第1目標動きベクトルを決定してもよく、即ち第1差分動きベクトルと第1の元の動きベクトルとの和を第1目標動きベクトルとする。第2の元の動きベクトルに対応する第2差分動きベクトルを取得し、第2差分動きベクトル及び第2の元の動きベクトルに基づいて第2目標動きベクトルを決定してもよく、即ち第2差分動きベクトルと第2の元の動きベクトルとの和を第2目標動きベクトルとする。
符号化側では、RDO原則を採用して第1の元の動きベクトルに対応する第1差分動きベクトル、及び、第2の元の動きベクトルに対応する第2差分動きベクトルを決定してもよく、その決定プロセスについての説明は省略する。
符号化側がカレントブロックの符号化ビットストリームを復号側に送信するとき、符号化ビットストリームに、第1差分動きベクトルの方向情報及び振幅情報、及び、第2差分動きベクトルの方向情報及び振幅情報を付加してもよい。
復号側では、カレントブロックの符号化ビットストリームを受信すると、復号側は、該符号化ビットストリームから第1差分動きベクトルの方向情報及び振幅情報を解析し、第1差分動きベクトルの方向情報及び振幅情報に基づいて第1差分動きベクトルを決定してもよい。該符号化ビットストリームから第2差分動きベクトルの方向情報及び振幅情報を解析し、第2差分動きベクトルの方向情報及び振幅情報に基づいて第2差分動きベクトルを決定してもよい。そして、復号側は、第1差分動きベクトル及び第1の元の動きベクトルに基づいてカレントブロックの第1目標動きベクトルを決定し、第2差分動きベクトル及び第2の元の動きベクトルに基づいてカレントブロックの第2目標動きベクトルを決定してもよい。
可能な一実施形態では、符号化側はさらに、符号化ビットストリームに、強調角度重み付け予測モードの第1サブモードフラグ及び第2サブモードフラグを符号化してもよく、第1サブモードフラグは、第1の元の動きベクトルに差分動きベクトルを重ねるか、又は第1の元の動きベクトルに差分動きベクトルを重ねないことを指示する。第2サブモードフラグは、第2の元の動きベクトルに差分動きベクトルを重ねるか、又は第2の元の動きベクトルに差分動きベクトルを重ねないことを指示する。
可能な一実施形態では、上記第1サブモードフラグは、符号化ビットストリームにおける第1フラグビットであってもよく、上記第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目標動きベクトルとしてもよい。
実施例15:実施例13及び実施例14を基に、2つの差分動きベクトルの場合について、以下、いくつかの具体的な適用シナリオを参照して、単方向動き情報に差分動きベクトルを重ねることに関連するシンタックスについて説明する。
適用シナリオ1:表4に示されるのは、関連するシンタックスの例であり、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(強調角度重み付け予測モードフラグ)は、バイナリ変数であり、awp_mvd_flagが第1値(例えば1)である場合、カレントブロックが強調角度重み付け予測モードであることを表し、awp_mvd_flagが第2値(例えば0)である場合、カレントブロックが非強調角度重み付け予測モードであることを表す。例示的に、AwpMvdFlagの値は、awp_mvd_flagの値に等しくてもよく、awp_mvd_flagがビットストリームに存在しない場合、AwpMvdFlagの値は0に等しい。
awp_mvd_sub_flag0(強調角度重み付け予測モードの第1サブモードフラグ)は、バイナリ変数であってもよく、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サブモードフラグ)は、バイナリ変数であってもよく、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動き情報の差分動きベクトル方向インデックス値である。例示的に、AwpMvdIdx1の値はawp_mvd_dir1の値に等しくてもよい。awp_mvd_dir1がビットストリームに存在しない場合、AwpMvdDir1の値は0に等しくてもよい。
awp_mvd_step1(第2動き情報の差分動きベクトルステップの長さインデックス値)は、角度重み付け予測モードの第2動き情報の差分動きベクトルステップの長さインデックス値である。例示的に、AwpMvdStep1の値はawp_mvd_step1の値に等しくてもよい。awp_mvd_step1がビットストリームに存在しない場合、AwpMvdStep1の値は0に等しくてもよい。
適用シナリオ2:表5に示されるのは、関連するシンタックスの例であり、SkipFlagは、カレントブロックがSkipモードであるか否かを表し、DirectFlagは、カレントブロックがDirectモードであるか否かを表し、AwpFlagは、カレントブロックがAWPモードであるか否かを表す。
awp_idx、awp_cand_idx0及びawp_cand_idx1に関しては、適用シナリオ1を参照することができ、ここではその説明を省略する。
awp_mvd_sub_flag0(強調角度重み付け予測モードの第1サブモードフラグ)は、バイナリ変数であってもよく、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サブモードフラグ)は、バイナリ変数であってもよく、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スパンを追加することができ、それによってイネーブルか否かのフラグビットを符号化する必要がない。例えば、差分動きベクトルは上、下、左、右などの4つの方向をサポートし、差分動きベクトルは0-pel、1/4-pel、1/2-pel、1-pel、2-pel、4-pelの6種類のステップの長さの設定をサポートし、即ち1ステップの長さの設定0-pelを追加する。その上で、表4/表5は表6に更新されてもよく、表6における関連するシンタックスの意味は、表4を参照することができ、ここではその説明を省略する。
例示的に、上記実施例では、元の動き情報に基づいて目標動き情報を取得し、目標動き情報を取得した後、カレントブロックの目標動き情報を記憶してもよく、当該記憶方式に対しては限定しない。
実施例16:実施例12及び実施例13では、動き情報候補リストを取得する必要があり、動き情報候補リストを取得する過程において、動き情報候補リストに追加される少なくとも1つの利用可能な動き情報を取得し、少なくとも1つの利用可能な動き情報に基づいて、動き情報候補リストを取得してもよい。例えば、動き情報候補リストにカレント追加される利用可能な動き情報について、該利用可能な動き情報が単方向動き情報であり、かつ該単方向動き情報が動き情報候補リストに既に存在する動き情報候補と重複しない場合、該単方向動き情報を動き情報候補リストに追加する。該利用可能な動き情報が双方向動き情報であり、かつ該双方向動き情報のうちの第1単方向動き情報が、動き情報候補リストに既に存在する動き情報候補と重複しない場合、第1単方向動き情報を動き情報候補リストに追加する。該利用可能な動き情報が双方向動き情報であり、該双方向動き情報のうちの第1単方向動き情報が、動き情報候補リストに既に存在する動き情報候補と重複し、かつ該双方向動き情報のうちの第2単方向動き情報が、動き情報候補リストに既に存在する動き情報候補と重複しない場合、第2単方向動き情報を動き情報候補リストに追加する。
例示的に、第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つの利用可能な動き情報は、空間動き情報、時間動き情報、HMVP(History-based Motion Vector Prediction、履歴ベースの動きベクトル予測)動き情報、及び予め設定された動き情報の少なくとも1つを含んでもよいが、これらに限定されない。
例示的に、上記動き情報候補リストは、単方向動き情報候補リストであってもよく、図9に示されるのは、カレントブロックと隣接ブロックの概略図であり、動き情報候補リストの取得プロセスについて、F、G、C、A、B、Dの順序に基づいて、単方向の空間動き情報を動き情報候補リストに追加して重複チェックし、単方向の時間動き情報を動き情報候補リストに追加して重複チェックし、最後に、動き情報候補リストが満たない場合、繰り返し充填を行う。もちろん、F、G、C、A、B、Dの順序は一例に過ぎず、他の順序を採用してもよく、これに関しては限定しない。
重複チェックとは、動き情報候補リストに追加される動き情報を、動き情報候補リストに既に存在する動き情報候補のそれぞれと比較し、動き情報候補リストに既に存在する動き情報候補の全てと重複しない場合、重複しないとみなし、動き情報候補リストに既に存在するいずれかの動き情報候補と重複する場合、重複するとみなす。
以下、いくつかの具体的な適用シナリオを参照して、動き情報候補リストの取得プロセスについて説明する。
適用シナリオ1:空間動き情報と時間動き情報とが共に動き情報候補リストに追加される。
第1ステップにおいて、図9に示すように、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の動き情報は利用不可能な動き情報である。
第2ステップにおいて、F、G、C、A、B、Dで利用可能な動き情報の順序(該順序は可変であり、かつ利用可能な動き情報のみを含む)、及び時間動き情報(利用可能な動き情報を含む)の順序に従って、AwpUniArrayの長さがXになるか、又はトラバースが終了するまで、利用可能な動き情報を動き情報候補リストAwpUniArrayに追加する。
場合1、動き情報候補リストにカレント追加される利用可能な動き情報について、該利用可能な動き情報が双方向動き情報(即ち参照フレームリストList0を指す単方向動き情報と参照フレームリストList1を指す単方向動き情報とを含む)である場合、動き情報候補リストに既に存在する動き情報候補の総数(即ち動き情報候補リストAwpUniArrayのカレント長さ)の偶奇性に従って、該利用可能な動き情報をどのように動き情報候補リストAwpUniArrayに追加するかを確認する。該利用可能な動き情報を、便宜上、第1利用可能な動き情報と呼ばれてもよい。
方式1、動き情報候補リストAwpUniArrayに既に存在する動き情報候補の総数が偶数であれば、第1利用可能な動き情報のうち参照フレームリストList0を指す単方向動き情報と、動き情報候補リストAwpUniArray内の単方向動き情報との重複チェック処理を行う。重複しない場合、参照フレームリストList0を指す単方向動き情報を動き情報候補リストAwpUniArrayに追加する。重複する場合、第1利用可能な動き情報のうち参照フレームリストList1を指す単方向動き情報と、動き情報候補リストAwpUniArray内の単方向動き情報との重複チェック処理を行う。重複しない場合、参照フレームリストList1を指す単方向動き情報を動き情報候補リストAwpUniArrayに追加する。
又は、動き情報候補リストAwpUniArrayに既に存在する動き情報候補の総数が奇数であれば、第1利用可能な動き情報のうち参照フレームリストList1を指す単方向動き情報と、動き情報候補リストAwpUniArray内の単方向動き情報との重複チェック処理を行う。重複しない場合、参照フレームリストList1を指す単方向動き情報を動き情報候補リストAwpUniArrayに追加する。重複する場合、第1利用可能な動き情報のうち参照フレームリストList0を指す単方向動き情報と、動き情報候補リストAwpUniArray内の単方向動き情報との重複チェック処理を行う。重複しない場合、参照フレームリストList0を指す単方向動き情報を動き情報候補リストAwpUniArrayに追加する。
方式2、動き情報候補リストAwpUniArrayに既に存在する動き情報候補の総数が奇数であれば、第1利用可能な動き情報のうち参照フレームリストList0を指す単方向動き情報と、動き情報候補リストAwpUniArray内の単方向動き情報との重複チェック処理を行う。重複しない場合、参照フレームリストList0を指す単方向動き情報を動き情報候補リストAwpUniArrayに追加する。重複する場合、第1利用可能な動き情報のうち参照フレームリストList1を指す単方向動き情報と、動き情報候補リストAwpUniArray内の単方向動き情報との重複チェック処理を行う。重複しない場合、参照フレームリストList1を指す単方向動き情報を動き情報候補リストAwpUniArrayに追加する。
又は、動き情報候補リストAwpUniArrayに既に存在する動き情報候補の総数が偶数であれば、第1利用可能な動き情報のうち参照フレームリストList1を指す単方向動き情報と、動き情報候補リストAwpUniArray内の単方向動き情報との重複チェック処理を行う。重複しない場合、参照フレームリストList1を指す単方向動き情報を動き情報候補リストAwpUniArrayに追加する。重複する場合、第1利用可能な動き情報のうち参照フレームリストList0を指す単方向動き情報と、動き情報候補リストAwpUniArray内の単方向動き情報との重複チェック処理を行う。重複しない場合、参照フレームリストList0を指す単方向動き情報を動き情報候補リストAwpUniArrayに追加する。
場合2、動き情報候補リストにカレント追加される利用可能な動き情報について、該利用可能な動き情報が単方向動き情報であれば、該単方向動き情報と、動き情報候補リストAwpUniArray内の単方向動き情報との重複チェック処理を行う。重複しない場合、該単方向動き情報を動き情報候補リストAwpUniArrayに追加する。
第3ステップにおいて、動き情報候補リストAwpUniArrayの長さがX未満である場合、リストの長さがXになるまで、動き情報候補リストAwpUniArray内の最後の単方向動き情報に対して繰り返し充填を行う。
例示的に、適用シナリオ1において、時間動き情報は、単方向動き情報又は双方向動き情報であってもよい。例えば、Pフレームでは、時間動き情報は単方向動き情報であり、Bフレームでは、時間動き情報は双方向動き情報である。
適用シナリオ2:空間動き情報が動き情報候補リストに追加された後、時間動き情報にY個の位置が予約され、かつ時間動き情報が双方向動き情報であり、即ち動き情報候補リストにはY個の時間動き情報が含まれる。
第1ステップにおいて、F、G、C、A、B、Dの動き情報の「利用可能」性を決定し、適用シナリオ1を参照する。
第2ステップにおいて、F、G、C、A、B、Dで利用可能な動き情報の順序(該順序は可変であり、かつ利用可能な動き情報のみを含む)に従って、利用可能な動き情報(各空間利用可能な動き情報)を、動き情報候補リストAwpUniArrayの長さがX-Yになるか、又は、利用可能な動き情報のトラバースが終了するまで、動き情報候補リストAwpUniArrayに追加する。
適用シナリオ2の第2ステップは、適用シナリオ1の第2ステップを参照することができ、ここでは繰り返し説明しない。
第3ステップにおいて、動き情報候補リストにカレント追加される時間動き情報(例えば双方向時間動き情報であり、かつ利用可能な動き情報である)について、動き情報候補リストに既に存在する動き情報候補の総数(即ち動き情報候補リストのカレント長さ)の偶奇性に従って、該時間動き情報を動き情報候補リストAwpUniArrayに追加する。
方式1、動き情報候補リストAwpUniArrayに既に存在する動き情報候補の総数が偶数であれば、該時間動き情報のうち参照フレームリストList0を指す単方向動き情報と、動き情報候補リストAwpUniArray内の単方向動き情報との重複チェック処理を行う。重複しない場合、参照フレームリストList0を指す単方向動き情報を動き情報候補リストAwpUniArrayに追加する。重複する場合、該時間動き情報のうち参照フレームリストList1を指す単方向動き情報と、動き情報候補リストAwpUniArray内の単方向動き情報との重複チェック処理を行う。重複しない場合、参照フレームリストList1を指す単方向動き情報を動き情報候補リストAwpUniArrayに追加する。
又は、動き情報候補リストAwpUniArrayに既に存在する動き情報候補の総数が奇数であれば、該時間動き情報のうち参照フレームリストList1を指す単方向動き情報と、動き情報候補リストAwpUniArray内の単方向動き情報との重複チェック処理を行う。重複しない場合、参照フレームリストList1を指す単方向動き情報を動き情報候補リストAwpUniArrayに追加する。重複する場合、該時間動き情報のうち参照フレームリストList0を指す単方向動き情報と、動き情報候補リストAwpUniArray内の単方向動き情報との重複チェック処理を行う。重複しない場合、参照フレームリストList0を指す単方向動き情報を動き情報候補リストAwpUniArrayに追加する。
方式2、動き情報候補リストAwpUniArrayに既に存在する動き情報候補の総数が奇数であれば、該時間動き情報のうち参照フレームリストList0を指す単方向動き情報と、動き情報候補リストAwpUniArray内の単方向動き情報との重複チェック処理を行う。重複しない場合、参照フレームリストList0を指す単方向動き情報を動き情報候補リストAwpUniArrayに追加する。重複する場合、該時間動き情報のうち参照フレームリストList1を指す単方向動き情報と、動き情報候補リストAwpUniArray内の単方向動き情報との重複チェック処理を行う。重複しない場合、参照フレームリストList1を指す単方向動き情報を動き情報候補リストAwpUniArrayに追加する。
又は、動き情報候補リストAwpUniArrayに既に存在する動き情報候補の総数が偶数であれば、該時間動き情報のうち参照フレームリストList1を指す単方向動き情報と、動き情報候補リストAwpUniArray内の単方向動き情報との重複チェック処理を行う。重複しない場合、参照フレームリストList1を指す単方向動き情報を動き情報候補リストAwpUniArrayに追加する。重複する場合、該時間動き情報のうち参照フレームリストList0を指す単方向動き情報と、動き情報候補リストAwpUniArray内の単方向動き情報との重複チェック処理を行う。重複しない場合、参照フレームリストList0を指す単方向動き情報を動き情報候補リストAwpUniArrayに追加する。
第4ステップにおいて、動き情報候補リストAwpUniArrayの長さがX未満である場合、リストの長さがXになるまで、動き情報候補リストAwpUniArray内の最後の単方向動き情報に対して繰り返し充填を行う。
適用シナリオ3:空間動き情報が動き情報候補リストに追加された後、時間動き情報にY個の位置が予約され、かつ時間動き情報が単方向動き情報であり、即ち動き情報候補リストにはY個の時間動き情報が含まれる。
第1ステップにおいて、F、G、C、A、B、Dの動き情報の「利用可能」性を決定し、適用シナリオ1を参照する。
第2ステップにおいて、F、G、C、A、B、Dで利用可能な動き情報の順序(該順序は可変であり、かつ利用可能な動き情報のみを含む)に従って、利用可能な動き情報(各空間利用可能な動き情報)を、動き情報候補リストAwpUniArrayの長さがX-Yになるか、又は、利用可能な動き情報のトラバースが終了するまで、動き情報候補リストAwpUniArrayに追加する。
適用シナリオ3の第2ステップは、適用シナリオ1の第2ステップを参照することができ、ここでは繰り返し説明しない。
第3ステップにおいて、動き情報候補リストにカレント追加される時間動き情報(例えば単方向時間動き情報であり、かつ利用可能な動き情報である)について、該時間動き情報と、動き情報候補リストAwpUniArray内の単方向動き情報との重複チェック処理を行う。重複しない場合、該時間動き情報を動き情報候補リストAwpUniArrayに追加する。
第4ステップにおいて、動き情報候補リストAwpUniArrayの長さがX未満である場合、リストの長さがXになるまで、動き情報候補リストAwpUniArray内の最後の単方向動き情報に対して繰り返し充填を行う。
適用シナリオ4:空間動き情報と時間動き情報とが共に動き情報候補リストに追加される。
第1ステップにおいて、F、G、C、A、B、Dの動き情報の「利用可能」性を決定し、適用シナリオ1を参照する。
第2ステップにおいて、F、G、C、A、B、Dで利用可能な動き情報の順序(該順序は可変であり、かつ利用可能な動き情報のみを含む)、及び時間動き情報(利用可能な動き情報を含む)の順序に従って、AwpUniArrayの長さがXになるか、又はトラバースが終了するまで、利用可能な動き情報を動き情報候補リストAwpUniArrayに追加する。
場合1、動き情報候補リストにカレント追加される利用可能な動き情報について、利用可能な動き情報が双方向動き情報(即ち参照フレームリストList0を指す単方向動き情報と参照フレームリストList1を指す単方向動き情報とを含む)である場合、該利用可能な動き情報を動き情報候補リストAwpUniArrayに追加する。該利用可能な動き情報は、便宜上、第2利用可能な動き情報と呼ばれてもよい。
方式1、第2利用可能な動き情報のうち参照フレームリストList0を指す単方向動き情報と、動き情報候補リストAwpUniArray内の単方向動き情報との重複チェック処理を行う。重複しない場合、参照フレームリストList0を指す単方向動き情報を動き情報候補リストAwpUniArrayに追加する。重複する場合、第2利用可能な動き情報のうち参照フレームリストList1を指す単方向の動き情報と、動き情報候補リストAwpUniArray内の単方向動き情報との重複チェック処理を行う。重複しない場合、参照フレームリストList1を指す単方向動き情報を動き情報候補リストAwpUniArrayに追加する。
方式2、第2利用可能な動き情報のうち参照フレームリストList1を指す単方向動き情報と、動き情報候補リストAwpUniArray内の単方向動き情報との重複チェック処理を行う。重複しない場合、参照フレームリストList1を指す単方向動き情報を動き情報候補リストAwpUniArrayに追加する。重複する場合、第2利用可能な動き情報のうち参照フレームリストList0を指す単方向動き情報と、動き情報候補リストAwpUniArray内の単方向動き情報との重複チェック処理を行う。重複しない場合、参照フレームリストList0を指す単方向動き情報を動き情報候補リストAwpUniArrayに追加する。
場合2、動き情報候補リストにカレント追加される利用可能な動き情報について、該利用可能な動き情報が単方向動き情報であれば、該単方向動き情報と、動き情報候補リストAwpUniArray内の単方向動き情報との重複チェック処理を行う。重複しない場合、該単方向動き情報を動き情報候補リストAwpUniArrayに追加する。
第3ステップにおいて、動き情報候補リストAwpUniArrayの長さがX未満である場合、リストの長さがXになるまで、動き情報候補リストAwpUniArray内の最後の単方向動き情報に対して繰り返し充填を行う。
例示的に、適用シナリオ4では、時間動き情報は、単方向動き情報又は双方向動き情報であってもよい。例えば、Pフレームでは、時間動き情報は単方向動き情報であり、Bフレームでは、時間動き情報は双方向動き情報である。
適用シナリオ5:空間動き情報が動き情報候補リストに追加された後、時間動き情報にY個の位置が予約され、かつ時間動き情報が双方向動き情報であり、即ち動き情報候補リストにはY個の時間動き情報が含まれる。
第1ステップにおいて、F、G、C、A、B、Dの動き情報の「利用可能」性を決定し、適用シナリオ1を参照する。
第2ステップにおいて、F、G、C、A、B、Dで利用可能な動き情報の順序(該順序は可変であり、かつ利用可能な動き情報のみを含む)に従って、利用可能な動き情報(即ち各空間領域利用可能な動き情報)を、動き情報候補リストAwpUniArrayの長さがX-Yになるか、又は、利用可能な動き情報のトラバースが終了するまで、動き情報候補リストAwpUniArrayに追加する。
適用シナリオ5の第2ステップは、適用シナリオ1の第2ステップを参照することができ、ここでは繰り返し説明しない。
第3ステップにおいて、動き情報候補リストにカレント追加される時間動き情報(例えば双方向時間動き情報であり、かつ利用可能な動き情報である)について、該時間動き情報を動き情報候補リストAwpUniArrayに追加する。
方式1、該時間動き情報のうち参照フレームリストList0を指す単方向動き情報と、動き情報候補リストAwpUniArray内の単方向動き情報との重複チェック処理を行う。重複しない場合、参照フレームリストList0を指す単方向動き情報を動き情報候補リストAwpUniArrayに追加する。重複する場合、該時間動き情報のうち参照フレームリストList1を指す単方向動き情報と、動き情報候補リストAwpUniArray内の単方向動き情報との重複チェック処理を行う。重複しない場合、参照フレームリストList1を指す単方向動き情報を動き情報候補リストAwpUniArrayに追加する。
方式2、該時間動き情報のうち参照フレームリストList1を指す単方向動き情報と、動き情報候補リストAwpUniArray内の単方向動き情報との重複チェック処理を行う。重複しない場合、参照フレームリストList1を指す単方向動き情報を動き情報候補リストAwpUniArrayに追加する。重複する場合、該時間動き情報のうち参照フレームリストList0を指す単方向動き情報と、動き情報候補リストAwpUniArray内の単方向動き情報との重複チェック処理を行う。重複しない場合、参照フレームリストList0を指す単方向動き情報を動き情報候補リストAwpUniArrayに追加する。
第4ステップにおいて、動き情報候補リストAwpUniArrayの長さがX未満である場合、リストの長さがXになるまで、動き情報候補リストAwpUniArray内の最後の単方向動き情報に対して繰り返し充填を行う。
空間動き情報が動き情報候補リストに追加された後、時間動き情報にY個の位置が予約され、かつ時間動き情報が単方向動き情報であり、即ち動き情報候補リストにはY個の時間動き情報が含まれる。
第1ステップにおいて、F、G、C、A、B、Dの動き情報の「利用可能」性を決定し、適用シナリオ1を参照する。
第2ステップにおいて、適用シナリオ4の第2ステップを参照することができ、ここでは繰り返し説明しない。
第3ステップにおいて、動き情報候補リストにカレント追加される時間動き情報(例えば単方向時間動き情報であり、かつ利用可能な動き情報である)について、該時間動き情報と、動き情報候補リストAwpUniArray内の単方向動き情報との重複チェック処理を行う。重複しない場合、該時間動き情報を動き情報候補リストAwpUniArrayに追加する。
第4ステップにおいて、動き情報候補リストAwpUniArrayの長さがX未満である場合、リストの長さがXになるまで、動き情報候補リストAwpUniArray内の最後の単方向動き情報に対して繰り返し充填を行う。
上記各適用シナリオでは、Xは任意の正の整数をとってもよく、例えば、Xの値は4、5などであってもよい。
上記各適用シナリオでは、動き情報候補リストAwpUniArrayの長さがX未満である場合、リストの長さがXになるまで、動き情報候補リストAwpUniArray内の最後の単方向動き情報に対して繰り返し充填を行う。実際の適用では、最後の単方向動き情報に対して繰り返し充填を行う前に、動き情報を派生することによって、有効な動き情報を増加させてもよい。例えば、動き情報候補リスト内のいずれかの有効な動き情報(x,y,ref_idx,ListX)を基に、ref_idx及びListXはそれぞれ参照フレームインデックス及び参照フレームリストであり、かつ両者は総称して参照フレーム情報と呼ばれ、以下の少なくとも1つの動き情報を追加してもよい:(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を除く任意の正の整数であり、即ち動きベクトルに対してスケールを行う。また、ゼロ動き情報を追加してもよく、即ち動き情報は(0,0,ref_idx3,ListZ)であってもよい。上記の動き情報について、該動き情報を動き情報候補リストに追加する際に、重複チェック処理を行ってもよいし、重複チェック処理を行わなくてもよい。その後も、動き情報候補リストAwpUniArrayの長さが依然としてX未満であれば、上記繰り返し充填を継続してもよい。
上記各適用シナリオでは、空間動き情報及び時間動き情報に加えて、動き情報候補リストAwpUniArrayにHMVP動き情報を追加してもよく、このHMVP動き情報の追加プロセスについては限定しない。
上記各適用シナリオでは、動き情報候補リストAwpUniArrayを構築してもよく、AwpUniArrayにおける動き情報を動き情報候補と呼んでもよく、そしてAwpUniArrayから動き情報候補をカレントブロックの目標動き情報として選択し、続いて該目標動き情報に基づいて画素位置の予測値を決定してもよい。
可能な一実施形態では、AwpUniArrayから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目標動き情報に与え、AwpCandIdx0が1であれば、AwpUniArrayにおける2番目の動き情報を第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であり、即ちList0を指す単方向動き情報画素位置の予測値を採用してもよい。
RefIdxAwp0L1が有効であれば、List1を指す単方向動き情報が有効であることを表すので、第1目標動き情報の予測モードはPRED_List1であり、即ちList1を指す単方向動き情報画素位置の予測値を採用してもよい。
例示的に、AwpCandIdx1が第2目標動き情報のインデックス値を表すため、AwpUniArrayにおけるAwpCandIdx1+1番目の動き情報を第2目標動き情報に与えることができる。例えば、AwpCandIdx1が0であれば、AwpUniArrayにおける1番目の動き情報を第2目標動き情報に与え、AwpCandIdx1が1であれば、AwpUniArrayにおける2番目の動き情報を第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であり、即ちList0を指す単方向動き情報画素位置の予測値を採用してもよい。
RefIdxAwp1L1が有効であれば、List1を指す単方向動き情報が有効であることを表すので、第2目標動き情報の予測モードはPRED_List1であり、即ちList1を指す単方向動き情報画素位置の予測値を採用してもよい。
別の可能な実施形態では、AwpUniArrayから1つの動き情報候補を、カレントブロックの目標動き情報として選択してもよい。復号側は、符号化ビットストリームからAwpCandIdxを解析し、かつAwpUniArrayにおけるAwpCandIdx+1番目の動き情報を、mvAwpL0、mvAwpL1、RefIdxAwpL0、RefIdxAwpL1に与えてもよい。AwpCandIdxは、目標動き情報のインデックス値を表し、mvAwpL0、mvAwpL1、RefIdxAwpL0、RefIdxAwpL1を合わせて目標動き情報とし、mvAwpL0とRefIdxAwpL0は、目標動き情報のうちList0を指す単方向動き情報を表し、mvAwpL1とRefIdxAwpL1は、目標動き情報のうちList1を指す単方向動き情報を表す。
例示的に、実施例1~16は、単独で実現されてもよいし、組み合わせて実現されてもよい。例えば、実施例1と実施例2は組み合わせて実現され、実施例1と実施例3は組み合わせて実現され、実施例1、実施例2、及び実施例3は、組み合わせて実現されてもよく、実施例4は、実施例1~3のうちの1つ以上と組み合わせて実現されてもよく、実施例5は、実施例1~3のうちの1つ以上と組み合わせて実現されてもよく、実施例6は、実施例1~3のうちの1つ以上と組み合わせて実現されてもよく、実施例7は、実施例1~3のうちの1つ以上と組み合わせて実現されてもよく、実施例8は、実施例1~3のうちの1つ以上と組み合わせて実現されてもよく、実施例9は、実施例1~3のうちの1つ以上と組み合わせて実現されてもよく、実施例10は、実施例1~3のうちの1つ以上と組み合わせて実現されてもよく、実施例11は、実施例1~3のうちの1つ以上と組み合わせて実現されてもよく、実施例12は、実施例1~3のうちの1つ以上と組み合わせて実現されてもよく、実施例13は、実施例1~3のうちの1つ以上と組み合わせて実現されてもよく、実施例14は、実施例1~3のうちの1つ以上と組み合わせて実現されてもよく、実施例15は、実施例1~3のうちの1つ以上と組み合わせて実現されてもよく、実施例16は、実施例1~3のうちの1つ以上と組み合わせて実現されてもよく、もちろん、上記はいくつかの例示に過ぎず、実施例間の組み合わせ方式については限定しない。
なお、上記実施例では、符号化側で用いる方法と復号側で用いる方法は、互いに参照可能なものである。
実施例17:上記方法と同じ構想に基づいて、本発明の実施例はさらに符号化側又は復号側に適用される符号化・復号装置を提案し、図10Aに示されるのは、前記装置の構成図であり、取得モジュール111と、設定モジュール112と、決定モジュール113とを含む。
取得モジュール111は、カレントブロックに対する重み付け予測を開始すると決定される際に、前記カレントブロックの重み予測角度及び重み設定パラメータを取得するために用いられ、ここで、前記重み設定パラメータは重み変換率及び重み変換の開始位置を含む。
設定モジュール112は、前記重み設定パラメータに基づいてカレントブロック外部の周辺位置に参照重み値を設定するために用いられる。
決定モジュール113は、前記カレントブロックの各画素位置に対して、前記重み予測角度に基づいて前記カレントブロック外部の周辺位置から前記画素位置の指す周辺マッチング位置を決定し、前記周辺マッチング位置に関連する参照重み値に基づいて前記画素位置の目標重み値を決定し、前記画素位置の目標重み値に基づいて前記画素位置の関連重み値を決定し、前記カレントブロックの第1予測モードに基づいて前記画素位置の第1予測値を決定し、前記カレントブロックの第2予測モードに基づいて前記画素位置の第2予測値を決定し、前記第1予測値、前記目標重み値、前記第2予測値及び前記関連重み値に基づいて、前記画素位置の重み付け予測値を決定し、前記カレントブロックの全ての画素位置の重み付け予測値に基づいて前記カレントブロックの重み付け予測値を決定するために用いられる。
前記カレントブロックが重み変換率切り替えモードをサポートする場合、前記取得モジュール111は、前記カレントブロックの第1重み変換率指示情報を取得し、前記第1重み変換率指示情報に基づいて前記カレントブロックの重み変換率を決定し、ここで、前記第1重み変換率指示情報が第1指示情報であれば、前記カレントブロックの重み変換率は第1重み変換率であり、前記第1重み変換率指示情報が第2指示情報であれば、前記カレントブロックの重み変換率は第2重み変換率である、という方式を採用して前記カレントブロックの重み変換率を取得する。
前記第1重み変換率指示情報は、画像レベル指示情報であり、前記カレントブロックの前記第1重み変換率指示情報は、前記カレントブロックに対応する重み変換率切り替え識別子を表し、前記第1指示情報は、前記カレントブロックが重み変換率切り替えを行う必要がないことを示すために用いられ、前記第2指示情報は、前記カレントブロックが重み変換率切り替えを行う必要があることを示すために用いられる。第1重み変換率の絶対値は第2重み変換率の絶対値に等しくない。
前記カレントブロックが重み変換率切り替えモードをサポートする場合、前記取得モジュール111は、前記カレントブロックの第2重み変換率指示情報を取得し、予め設定されたルックアップテーブルから前記第2重み変換率指示情報に対応する重み変換率を選択し、ここで、前記予め設定されたルックアップテーブルは少なくとも2つの重み変換率を含み、選択した重み変換率を前記カレントブロックの重み変換率として決定する、という方式を採用して前記カレントブロックの重み変換率を取得する。
例示的に、前記設定モジュール112は前記重み設定パラメータに基づいて前記カレントブロック外部の周辺位置に参照重み値を設定するときに具体的には、前記カレントブロック外部の各周辺位置に対して、前記周辺位置の座標値、前記重み変換の開始位置の座標値及び前記重み変換率に基づいて、前記周辺位置の前記参照重み値を設定するために用いられる。
例示的に、前記重み変換の開始位置は、前記重み予測角度、前記カレントブロックの重み予測位置及び前記カレントブロックのサイズの少なくとも1つによって決定される。前記カレントブロック外部の周辺位置の数は、前記カレントブロックのサイズ及び/又は前記カレントブロックの重み予測角度に基づいて決定される。前記カレントブロック外部の周辺位置の参照重み値は単調増加する。前記カレントブロック外部の周辺位置は、整数画素位置又は副画素位置の少なくとも1つを含む。前記カレントブロック外部の周辺位置は、前記カレントブロック外部の上側1行の周辺位置、又は、前記カレントブロック外部の左側1列の周辺位置の少なくとも1つを含む。
前記カレントブロック外部の周辺位置の参照重み値は、目標領域の参照重み値、目標領域の第1隣接領域の参照重み値、目標領域の第2隣接領域の参照重み値を含む。ここで、前記第1隣接領域の前記参照重み値はいずれも第2参照重み値であり、前記第2隣接領域の前記参照重み値はいずれも第3参照重み値であり、ここで、前記第2参照重み値は前記第3参照重み値とは異なる。前記目標領域は、1つの参照重み値又は少なくとも2つの参照重み値を含み、ここで、前記目標領域が前記少なくとも2つの参照重み値を含む場合、前記目標領域の前記少なくとも2つの参照重み値は単調増加する。
前記重み予測角度は水平角度であり、又は、前記重み予測角度は垂直角度であり、又は、前記重み予測角度の勾配の絶対値は2のn乗であり、nは整数である。
例示的に、前記決定モジュール113はさらに、前記周辺マッチング位置が整数画素位置であり、かつ前記整数画素位置に参照重み値が設定されている場合、前記整数画素位置の参照重み値に基づいて前記画素位置の目標重み値を決定し、又は、前記周辺マッチング位置が副画素位置であり、かつ前記副画素位置に参照重み値が設定されている場合、前記副画素位置の参照重み値に基づいて前記画素位置の目標重み値を決定するために用いられる。
前記第1予測モードがインター予測モードである場合、前記決定モジュール113はさらに、動き情報候補リストを取得し、前記動き情報候補リストは少なくとも1つの動き情報候補を含み、前記動き情報候補リストから1つの動き情報候補を前記カレントブロックの元の動き情報として選択し、前記元の動き情報に基づいて前記カレントブロックの目標動き情報を決定し、前記目標動き情報に基づいて前記画素位置の第1予測値を決定するために用いられる。
前記元の動き情報は元の動きベクトルを含み、前記目標動き情報は目標動きベクトルを含み、前記決定モジュール113はさらに、前記元の動きベクトルに対応する差分動きベクトルを取得し、前記差分動きベクトル及び前記元の動きベクトルに基づいて目標動きベクトルを決定するために用いられる。
復号側では、前記決定モジュール113はさらに、前記カレントブロックの符号化ビットストリームから前記差分動きベクトルの方向情報及び振幅情報を解析し、前記差分動きベクトルの方向情報及び振幅情報に基づいて前記差分動きベクトルを決定するために用いられる。
方向情報が方向を右向き、振幅情報が振幅をArと表すと、差分動きベクトルは(Ar,0)となり、方向情報が方向を下向き、振幅情報が振幅をAdと表すと、差分動きベクトルは(0,-Ad)となり、方向情報が方向を左向き、振幅情報が振幅をAlと表すと、差分動きベクトルは(-Al,0)となり、方向情報が方向を上向き、振幅情報が振幅をAuと表すと、差分動きベクトルは(0,Au)となる。
復号側では、前記決定モジュール113はさらに、前記カレントブロックの符号化ビットストリームからフラグ情報を解析し、前記フラグ情報が前記元の動きベクトルに差分動きベクトルを重ねることを指示する場合、前記カレントブロックの符号化ビットストリームから前記差分動きベクトルの方向情報及び振幅情報を解析するために用いられる。
前記決定モジュール113はさらに、動き情報候補リストに追加される少なくとも1つの利用可能な動き情報を取得し、少なくとも1つの利用可能な動き情報に基づいて、動き情報候補リストを構築するために用いられる。
前記少なくとも1つの利用可能な動き情報は、空間動き情報、時間動き情報、予め設定された動き情報の少なくとも1つを含む。
装置の実施例については、基本的に方法の実施例に対応するため、関連する箇所は方法の実施例の一部の説明を参照すればよい。上記で説明された装置の実施例は、単に概略的なものであり、ここで分離コンポーネントとして説明されたユニットは、物理的に分離されてもされなくてもよく、ユニットとして示されたコンポーネントは、物理ユニットであってもよいし、そうでなくてもよく、即ち1つの場所に位置してもよく、又は複数のネットワークユニットに分布してもよい。実際の必要に応じてその一部又は全部のモジュールを選択して本実施例の手段の目的を実現してもよい。当業者は創造的な労力を払うことなく、理解し、実施することができる。
上記方法と同じ構想に基づいて、本発明の実施例によって提供される復号デバイス(ビデオデコーダとも呼ばれてもよい)は、ハードウェア的には、そのハードウェアアーキテクチャ概略図が具体的に図10Bを参照することができる。プロセッサ121と、機械可読記憶媒体122とを含み、前記機械可読記憶媒体122には前記プロセッサ121により実行可能な機械実行可能命令が記憶されており、前記プロセッサ121は、機械実行可能命令を実行することによって本発明の上記各例に開示された方法を実現するために用いられる。例えば、前記プロセッサ121は、機械実行可能命令を実行することによって、カレントブロックに対する重み付け予測を開始すると決定される際に、前記カレントブロックの重み予測角度及び重み設定パラメータを取得するステップであって、前記重み設定パラメータは重み変換率及び重み変換の開始位置を含むステップと、前記重み設定パラメータに基づいて前記カレントブロック外部の周辺位置に参照重み値を設定するステップと、前記カレントブロックの各画素位置に対して、前記重み予測角度に基づいて前記カレントブロック外部の周辺位置から前記画素位置の指す周辺マッチング位置を決定するステップと、前記周辺マッチング位置に関連する参照重み値に基づいて前記画素位置の目標重み値を決定し、前記画素位置の目標重み値に基づいて前記画素位置の関連重み値を決定するステップと、前記カレントブロックの第1予測モードに基づいて前記画素位置の第1予測値を決定し、前記カレントブロックの第2予測モードに基づいて前記画素位置の第2予測値を決定するステップと、前記第1予測値、前記目標重み値、前記第2予測値及び前記関連重み値に基づいて、前記画素位置の重み付け予測値を決定するステップと、前記カレントブロックの全ての画素位置の重み付け予測値に基づいて前記カレントブロックの重み付け予測値を決定するステップと、を実現するために用いられる。
上記方法と同じ構想に基づいて、本発明の実施例によって提供される符号化デバイス(ビデオエンコーダとも呼ばれてもよい)は、ハードウェア的には、そのハードウェアアーキテクチャ概略図が具体的には図10Cを参照することができる。プロセッサ131と、機械可読記憶媒体132とを含み、前記機械可読記憶媒体132には前記プロセッサ131により実行可能な機械実行可能命令が記憶されており、前記プロセッサ131は、機械実行可能命令を実行することによって本発明の上記各例に開示された方法を実現するために用いられる。例えば、前記プロセッサ131は、機械実行可能命令を実行することによって、カレントブロックに対する重み付け予測を開始すると決定される際に、前記カレントブロックの重み予測角度及び重み設定パラメータを取得するステップであって、前記重み設定パラメータは重み変換率及び重み変換の開始位置を含むステップと、前記重み設定パラメータに基づいて前記カレントブロック外部の周辺位置に参照重み値を設定するステップと、前記カレントブロックの各画素位置に対して、前記重み予測角度に基づいて前記カレントブロック外部の周辺位置から前記画素位置の指す周辺マッチング位置を決定するステップと、前記周辺マッチング位置に関連する参照重み値に基づいて前記画素位置の目標重み値を決定し、前記画素位置の目標重み値に基づいて前記画素位置の関連重み値を決定するステップと、前記カレントブロックの第1予測モードに基づいて前記画素位置の第1予測値を決定し、前記カレントブロックの第2予測モードに基づいて前記画素位置の第2予測値を決定するステップと、前記第1予測値、前記目標重み値、前記第2予測値及び前記関連重み値に基づいて、前記画素位置の重み付け予測値を決定するステップと、前記カレントブロックの全ての画素位置の重み付け予測値に基づいて前記カレントブロックの重み付け予測値を決定するステップと、を実現するために用いられる。
上記方法と同じ構想に基づいて、本発明の実施例ではカメラデバイスをさらに提供し、該カメラデバイスは、上記いずれかの実施例における符号化・復号装置を含んでもよく、かつ該カメラデバイスは上記フローを採用して処理を行うことができる。
上記方法と同じ構想に基づいて、本発明の実施例は、いくつかのコンピュータ命令を記憶した機械可読記憶媒体をさらに提供し、前記コンピュータ命令がプロセッサによって実行されると、上記各実施例における符号化・復号方法のような本発明の上記例に開示された方法を実現することができる。
上記実施例で説明したシステム、装置、モジュール又はユニットは、コンピュータチップ又はエンティティによって実現されてもよいし、又は、特定の機能を有する製品によって実現される。実現デバイスとして典型的なのはコンピュータであり、コンピュータの具体的な形態は、パーソナルコンピュータ、ラップトップコンピュータ、セルフォン、カメラ付き携帯電話、スマートフォン、携帯情報端末、メディアプレーヤー、ナビゲーションデバイス、電子メール送受信デバイス、ゲーム機、タブレットコンピュータ、ウェアラブルデバイス、又はそれらのデバイスの任意の何種類の組み合わせであってもよい。説明の便宜上、上記の装置を説明するとき、機能によって様々なユニットに分けてそれぞれ説明する。当然ながら、本発明を実施するときは各ユニットの機能を同一の又は複数のソフトウェア及び/又はハードウェアにおいて実現してもよい。
当業者には、本発明の実施例が方法、システム、又はコンピュータプログラム製品として提供され得ることが自明である。本発明は、ハードウェアだけからなる実施例、ソフトウェアだけからなる実施例、又はソフトウェアとハードウェアを組み合わせた実施例なる形態であってもよい。本発明の実施例は、コンピュータ利用可能なプログラムコードを含む1つ又は複数のコンピュータ利用可能な記憶媒体(ディスク記憶装置、CD-ROM、光記憶装置を含むが、それらに限定されない)において実施されるコンピュータプログラム製品なる形態であってもよい。
上述したのは本発明の実施例に過ぎず、本発明を限定するためのものではない。当業者にとっては、本発明は様々な変更及び変化があり得る。本発明の趣旨と原理から逸脱することなく修正、同等な置換、改善などを行った場合に、いずれも本発明の特許請求の範囲に含まれるものとする。
場合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である。