本願の実施例で使用される用語は、本願を限定するのではなく、特定の実施例を説明することを目的としている。本願の実施例及び特許請求の範囲において単数形で使用される「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)を効果的に除去するという目的を達成できる。動画符号化基準のフレーム間予測の部分では、ブロックに基づく動き補償技術が採用され、主な原理はカレント画像の各画素ブロックに対して、前の符号化済み画像の中から最適なマッチングブロックを探すことであり、当該プロセスが動き推定(Motion Estimation、ME)と呼ばれる。
イントラブロックコピーでは同じフレーム参照が可能であり、カレントブロックの参照データが同じフレームから得られる。イントラブロックコピー技術では、カレントブロックのブロックベクトルを用いてカレントブロックの予測値を取得してもよく、例示的に、画面内容の同一のフレーム内には繰り返し出現するテクスチャが大量に存在するという特性により、ブロックベクトルを採用してカレントブロックの予測値を取得するとき、画面内容シーケンスの圧縮効率を高めることができる。
予測画素(Prediction Pixel):符号化済み/復号済み画素の中から導出された画素値を指し、元の画素と予測画素の差により残差を取得して、残差変換、量子化及び係数符号化を行う。フレーム間の予測画素は、カレントブロックに対して参照フレームから導出された画素値を指し、画素位置が離散しているため、内挿演算により最終的な予測画素を取得する必要がある。予測画素が元の画素に近いほど、両者の減算で得た残差のエネルギーが小さく、符号化圧縮性能が高い。
動きベクトル(Motion Vector、MV):フレーム間符号化では、動きベクトルを用いてカレントフレーム画像のカレントブロックと参照フレーム画像の参照ブロックとの間の相対的な変位を表すことができる。各分割されたブロックには、対応する動きベクトルが復号側に伝送され、もし各ブロックの動きベクトルを独立して符号化と伝送を行えば、特にサイズが小さなブロックが多数ある場合、多くのビットが消費される。動きベクトルの符号化に用いるビット数を低減させるために、隣接ブロックの間の空間的相関性を利用して、隣接する符号化済みブロックの動きベクトルに基づいてカレント符号化対象ブロックの動きベクトルを予測し、次に予測差を符号化してもよく、これによって動きベクトルを表すためのビット数を効果的に低減することができる。これに基づいて、カレントブロックの動きベクトルを符号化するとき、最初に隣接する符号化済みブロックの動きベクトルを用いてカレントブロックの動きベクトルを予測し、次に当該動きベクトルの予測値(MVP、Motion Vector Prediction)と動きベクトルの実際の推定値との差、即ち、差分動きベクトル(MVD、Motion Vector Difference)を符号化してもよい。
動き情報(Motion Information):動きベクトルがカレントブロックと特定の参照ブロックとの間の位置オフセットを表すため、指向ブロックの情報を正確に取得するためには、動きベクトルの他に、参照フレーム画像のインデックス情報でカレントブロックがどの参照フレーム画像を用いるかを表す必要がある。動画符号化技術では、カレントフレーム画像に対し、一般に参照フレーム画像リストを確立してもよく、参照フレーム画像インデックス情報は、カレントブロックが参照フレーム画像リスト中の何番目の参照フレーム画像を採用するかを表す。さらに、複数の参照フレーム画像リストをサポートする符号化技術も多くあるため、1つのインデックス値を用いて、どの参照フレーム画像リストを用いるかを表してもよく、当該インデックス値を参照方向と呼ぶことができる。上記で分かるように、動画符号化技術では、動きベクトル、参照フレーム画像インデックス情報、参照方向などの動きに関連する情報をまとめて動き情報と呼ぶことができる。
ブロックベクトル(Block Vector、BV):ブロックベクトルはイントラブロックコピー技術に用いられ、イントラブロックコピー技術ではブロックベクトルを用いて動き補償を行い、即ちブロックベクトルを採用してカレントブロックの予測値を取得する。動きベクトルと違って、ブロックベクトルはカレントブロックとカレントフレームの符号化済みブロック中の最適なマッチングブロックとの間の相対的な変位を表す。同一のフレーム内には繰り返すテクスチャが大量に存在するという特性により、ブロックベクトルを採用してカレントブロックの予測値を取得するとき、圧縮効率を明らかに高めることができる。
フレーム内予測モード:フレーム内符号化では、フレーム内予測モードを用いて動き補償を行い、即ちフレーム内予測モードを採用してカレントブロックの予測値を取得する。例えば、フレーム内予測モードは、Planarモード、DCモード、33通りの角度モードを含んでもよいが、これらに限定されない。表1に示されるのは、フレーム内予測モードの例であり、Planarモードがモード0に対応し、DCモードがモード1に対応し、残りの33通りの角度モードはモード2~モード34に対応する。Planarモードは画素値がゆっくりと変化する領域に適用され、水平方向と垂直方向の2つの線形フィルターを用いて、2つの方向における画素の平均値をカレントブロック画素の予測値とする。DCモードは広くて平坦な領域に適用され、カレントブロックの周囲画素の平均値をカレントブロック画素の予測値とする。角度モードとして33通りの角度モードがあり、新世代の符号化・復号基準VVC(Versatile Video Coding、汎用ビデオ符号化)ではより細分化されている角度モードが採用され、例えば、65通りの角度モードである。
パレットモード(Palette Mode):パレットモードでは、カレントブロックの画素値を小さな画素値集合、即ちパレットで表す。カレントブロック中の画素位置の画素値がパレット中の特定の色に近いとき、当該画素位置をパレット中の対応する色のインデックス値で符号化する。カレントブロック中の画素位置の画素値がパレット中のいずれの色とも類似しないとき、当該画素位置を「エスケープ画素(escape pixel)」で符号化し、直接量子化してからビットストリームに組み入れる必要がある。復号側については、最初にパレットを取得し、例えば、{色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を得る)とフレーム間予測ブロック2(つまり、フレーム間予測モードを採用して複数の画素位置のフレーム間予測値2を得る)とを組み合わせて得られる。TPM予測ブロックは、2つの領域/部分に分割することができ、1つの領域はフレーム間領域1であってもよく、もう1つの領域はフレーム間領域2であってもよく、TPM予測ブロックは、矩形として分布してもよく、TPM予測ブロックの2つのフレーム間領域は、非矩形として分布してもよく、且つ2つのフレーム間領域の間の境界線(例えば、図2Bの点線)は、TPM予測ブロックの主対角線又は副対角線であってもよい。
例示的に、フレーム間領域1の各画素位置については、主にフレーム間予測ブロック1のフレーム間予測値に基づいて決定され、例えば、当該画素位置のフレーム間予測ブロック1のフレーム間予測値及び当該画素位置のフレーム間予測ブロック2のフレーム間予測値を重み付けして、当該画素位置の結合予測値を得、ただし、フレーム間予測ブロック1のフレーム間予測値の重み値の方が大きく、フレーム間予測ブロック2のフレーム間予測値の重み値の方が小さい(0でもよい)。フレーム間領域2の各画素位置については、主にフレーム間予測ブロック2のフレーム間予測値に基づいて決定され、例えば、当該画素位置のフレーム間予測ブロック1のフレーム間予測値及び当該画素位置のフレーム間予測ブロック2のフレーム間予測値を重み付けして、当該画素位置の結合予測値を得、ただし、フレーム間予測ブロック2のフレーム間予測値の重み値の方が大きく、フレーム間予測ブロック1のフレーム間予測値の重み値の方が小さい(0でもよい)。最後に、各画素位置の結合予測値でTPM予測ブロックを構成してもよい。
図2Bに示されるのは、フレーム間ブロックの幾何学的分割(Geometrical partitioning for inter blocks、GEO)モードの概略図であり、GEOモードは、1本の分割線を利用してフレーム間予測ブロックを2つのサブブロックに分割するために用いられ、TPMモードと違って、GEOモードではより多い分割方向を採用することができ、GEOモードでの重み付け予測プロセスはTPMモードと類似している。
GEO予測ブロックは、フレーム間予測ブロック1(つまり、フレーム間予測モードを採用して複数の画素位置のフレーム間予測値1を得る)とフレーム間予測ブロック2(つまり、フレーム間予測モードを採用して複数の画素位置のフレーム間予測値2を得る)とを組み合わせて得られる。GEO予測ブロックは、2つの領域/部分に分割することができ、1つの領域はフレーム間領域1であってもよく、もう1つの領域はフレーム間領域2であってもよい。
例示的に、フレーム間領域1の各画素位置については、主にフレーム間予測ブロック1のフレーム間予測値に基づいて決定され、例えば、当該画素位置のフレーム間予測ブロック1のフレーム間予測値及び当該画素位置のフレーム間予測ブロック2のフレーム間予測値を重み付けして、当該画素位置の結合予測値を得、ただし、フレーム間予測ブロック1のフレーム間予測値の重み値の方が大きく、フレーム間予測ブロック2のフレーム間予測値の重み値の方が小さい(0でもよい)。フレーム間領域2の各画素位置については、主にフレーム間予測ブロック2のフレーム間予測値に基づいて決定され、例えば、当該画素位置のフレーム間予測ブロック1のフレーム間予測値及び当該画素位置のフレーム間予測ブロック2のフレーム間予測値を重み付けして、当該画素位置の結合予測値を得、ただし、フレーム間予測ブロック2のフレーム間予測値の重み値の方が大きく、フレーム間予測ブロック1のフレーム間予測値の重み値の方が小さい(0でもよい)。最後に、各画素位置の結合予測値でGEO予測ブロックを構成してもよい。
例示的に、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~304を含んでもよい。
ステップ301で、カレントブロックに対して重み付け予測を開始すると決定されるとき、カレントブロックに対してカレントブロックの重み付け予測角度を取得する。
例えば、カレントブロックは1つのサブブロックを含んでもよく、つまり、当該サブブロックがカレントブロック自体であり、当該サブブロックの重み付け予測角度を取得することが、カレントブロックの重み付け予測角度を取得することになる。
例示的に、カレントブロックに対して予測するとき、復号側又は符号化側は、最初にカレントブロックに対して重み付け予測を開始するかどうかを決定してもよい。もしカレントブロックに対して重み付け予測を開始するのであれば、本願の実施例の符号化・復号方法を採用し、即ちカレントブロックの重み付け予測角度を取得する。もしカレントブロックに対して重み付け予測を開始しないのであれば、本願の実施例では実現形態を限定しない。
例示的に、カレントブロックに対して重み付け予測を開始すると決定されるとき、カレントブロックの重み付け予測角度を取得する必要があり、重み付け予測角度はカレントブロックの内部の画素位置の指す角度方向を表す。例えば、特定の重み付け予測角度に基づいて、カレントブロックの内部の画素位置の指す角度方向を決定し、当該角度方向はカレントブロックの外部の特定の周辺位置を指す。
ステップ302で、カレントブロックの各画素位置に対して、当該カレントブロックの重み付け予測角度に基づいて当該カレントブロックの外部の周辺位置の中から当該画素位置の指す周辺マッチング位置を決定し、当該周辺マッチング位置に関連する参照重み値に基づいて当該画素位置の目標重み値を決定し、当該画素位置の目標重み値に基づいて当該画素位置の関連重み値を決定する。
例示的に、重み付け予測角度がカレントブロックの内部の画素位置の指す角度方向を表すため、カレントブロックの各画素位置に対して、当該重み付け予測角度に基づいて当該画素位置の指す角度方向を決定し、次いで当該角度方向に基づいて当該カレントブロックの外部の周辺位置の中から当該画素位置の指す周辺マッチング位置を決定する。
カレントブロックの各画素位置に対して、当該画素位置の指す周辺マッチング位置を決定した後、当該周辺マッチング位置に関連する参照重み値を決定してもよく、周辺マッチング位置に関連する参照重み値は予め設定されてもよいし、特定の方法を採用して決定されてもよく、これに関しては限定せず、当該周辺マッチング位置は関連する参照重み値を有しさえすればよい。
次に、当該周辺マッチング位置に関連する参照重み値に基づいて当該画素位置の目標重み値を決定し、例えば、当該周辺マッチング位置に関連する参照重み値を当該画素位置の目標重み値として決定してもよい。
当該画素位置の目標重み値を得た後、当該画素位置の目標重み値に基づいて当該画素位置の関連重み値を決定してもよい。例えば、各画素位置の目標重み値と関連重み値との和は固定のプリセット値であってもよく、したがって、関連重み値はプリセット値と目標重み値との差であってもよい。プリセット値が8で、画素位置の目標重み値が0であるとすると、当該画素位置の関連重み値は8である。もし画素位置の目標重み値が1であれば、当該画素位置の関連重み値は7である。このようにして、目標重み値と関連重み値との和は8であればよい。
ステップ303で、カレントブロックの各画素位置に対して、カレントブロックの第1予測モードに基づいて当該画素位置の第1予測値を決定し、カレントブロックの第2予測モードに基づいて当該画素位置の第2予測値を決定し、当該画素位置の第1予測値、目標重み値、第2予測値及び関連重み値に基づいて、当該画素位置の重み付け予測値を決定する。
例示的に、目標重み値は第1予測モードに対応する重み値であり、関連重み値は第2予測モードに対応する重み値であるとすると、当該画素位置の重み付け予測値は、(当該画素位置の第1予測値*当該画素位置の目標重み値+当該画素位置の第2予測値*当該画素位置の関連重み値)/固定のプリセット値であってもよい。
又は、目標重み値は第2予測モードに対応する重み値であり、関連重み値は第1予測モードに対応する重み値であるとすると、当該画素位置の重み付け予測値は、(当該画素位置の第2予測値*当該画素位置の目標重み値+当該画素位置の第1予測値*当該画素位置の関連重み値)/固定のプリセット値であってもよい。
ステップ304で、各カレントブロックの全ての画素位置の重み付け予測値に基づいてカレントブロックの重み付け予測値を決定する。
例えば、カレントブロックに対して、カレントブロックの全ての画素位置の重み付け予測値でカレントブロックの重み付け予測値を構成する。
以上から分かるように、本願の実施例では、重み値を設定するための効果的な方法を提案し、カレントブロックの各画素位置に合理的な目標重み値を設定できるため、カレントブロックの予測値が元の画素にさらに近づくようにし、これによって予測の正確さを向上させ、予測性能を向上させ、符号化性能を向上させることができる。
実施例2:実施例1において、カレントブロックは1つのサブブロックを含んでもよく、つまり、サブブロックがカレントブロック自体であり、カレントブロックについて、図4Aに示されるのは符号化方法のフローチャートであり、当該方法は符号化側に適用することができ、当該方法はステップ401~407を含んでもよい。
ステップ401で、カレントブロックに対して重み付け予測を開始すると決定されるとき、符号化側はカレントブロックの重み付け予測角度及び重み付け予測位置を取得する。
例示的に、符号化側はカレントブロックに対して重み付け予測を開始することを許可するかどうかを決定する必要があり、許可する場合、カレントブロックの重み付け予測角度及び重み付け予測位置を取得し、後続のステップを実行し、許可しない場合、本願では処理方式を限定しない。
可能な一実施形態では、もしカレントブロックが重み付け予測を開始するための条件を満たしていれば、符号化側はカレントブロックに対して重み付け予測を開始する必要があると決定してもよい。もしカレントブロックが重み付け予測を開始するための条件を満たさなければ、符号化側はカレントブロックに対して重み付け予測を開始する必要はないと決定してもよい。例えば、符号化側は、カレントブロックの特徴情報が特定の条件を満たしているかどうかを判断し、満たしている場合、カレントブロックに対して重み付け予測を開始すると決定し、満たしていない場合、カレントブロックに対して重み付け予測を開始しないと決定してもよい。
例示的に、当該特徴情報は、カレントブロックの位置するカレントフレームのフレームタイプ、カレントブロックのサイズ情報、スイッチ制御情報のいずれか又は任意の組み合わせを含むが、これらに限定されない。当該スイッチ制御情報は、シーケンスレベル(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、コーディングツリーユニット))スイッチ制御情報を含んでもよいが、これらに限定されない。
例えば、もし当該特徴情報がカレントブロックの位置するカレントフレームのフレームタイプであれば、カレントブロックの位置するカレントフレームのフレームタイプが特定の条件を満たしていることは、もしカレントブロックの位置するカレントフレームのフレームタイプがBフレームであれば、フレームタイプは特定の条件を満たしていると決定し、又は、もしカレントブロックの位置するカレントフレームのフレームタイプがIフレームであれば、フレームタイプは特定の条件を満たしていると決定することを含んでもよいが、これらに限定されない。
例えば、もし特徴情報がカレントブロックのサイズ情報であって、例えば、カレントブロックの幅と高さであれば、カレントブロックのサイズ情報が特定の条件を満たしていることは、もし幅が第1値より大きく又は等しく、高さが第2値より大きく又は等しければ、カレントブロックのサイズ情報は特定の条件を満たしていると決定し、又は、もし幅が第3値より大きく又は等しく、高さが第4値より大きく又は等しく、幅が第5値より小さく又は等しく、高さが第6値より小さく又は等しければ、カレントブロックのサイズ情報は特定の条件を満たしていると決定し、又は、もし幅と高さの積が第7値より大きく又は等しければ、カレントブロックのサイズ情報は特定の条件を満たしていると決定することを含んでもよいが、これらに限定されない。前記値は経験に基づいて設定してもよく、例えば、8、16、32、64、128などの値であってもよく、これに関しては限定しない。例えば、第1値は8であり、第2値は8であり、第3値は8であり、第4値は8であり、第5値は64であり、第6値は64であり、第7値は64である。この場合に、もし幅が8より大きく又は等しく、高さが8より大きく又は等しければ、カレントブロックのサイズ情報は特定の条件を満たしていると決定する。又は、もし幅が8より大きく又は等しく、高さが8より大きく又は等しく、幅が64より小さく又は等しく、高さが64より小さく又は等しければ、カレントブロックのサイズ情報は特定の条件を満たしていると決定する。又は、もし幅と高さの積が64より大きく又は等しければ、カレントブロックのサイズ情報は特定の条件を満たしていると決定する。当然ながら、上述したのが単なる例に過ぎず、これに関しては限定しない。
例えば、もし特徴情報がカレントブロックのサイズ情報であって、例えば、カレントブロックの幅と高さであれば、カレントブロックのサイズ情報が特定の条件を満たしていることは、幅はa以上且つb以下であり、高さはa以上且つb以下であることを含んでもよいが、これに限定されない。aは16より小さく又は等しくてもよく、bは16より大きく又は等しくてもよい。例えば、aは8に等しく、bは64に等しく又はbは32に等しい。
例えば、もし特徴情報がスイッチ制御情報であれば、当該スイッチ制御情報が特定の条件を満たしていることは、もしスイッチ制御情報はカレントブロックに対して重み付け予測を開始することを許可することであれば、当該スイッチ制御情報は特定の条件を満たしていると決定することを含んでもよいが、これに限定されない。
例えば、もし当該特徴情報がカレントブロックの位置するカレントフレームのフレームタイプとカレントブロックのサイズ情報であれば、当該フレームタイプが特定の条件を満たし、且つ当該サイズ情報が特定の条件を満たしているとき、カレントブロックの特徴情報は特定の条件を満たしていると決定してもよい。もし当該特徴情報がカレントブロックの位置するカレントフレームのフレームタイプとスイッチ制御情報であれば、当該フレームタイプが特定の条件を満たし、且つ当該スイッチ制御情報が特定の条件を満たしているとき、カレントブロックの特徴情報は特定の条件を満たしていると決定してもよい。もし当該特徴情報がカレントブロックのサイズ情報とスイッチ制御情報であれば、当該サイズ情報が特定の条件を満たし、且つ当該スイッチ制御情報が特定の条件を満たしているとき、カレントブロックの特徴情報は特定の条件を満たしていると決定してもよい。もし当該特徴情報がカレントブロックの位置するカレントフレームのフレームタイプ、カレントブロックのサイズ情報及びスイッチ制御情報であれば、当該フレームタイプが特定の条件を満たし、且つサイズ情報が特定の条件を満たし、且つスイッチ制御情報が特定の条件を満たしているとき、カレントブロックの特徴情報は特定の条件を満たしていると決定してもよい。
可能な一実施形態では、カレントブロックに対して重み付け予測を開始すると決定されるとき、符号化側はカレントブロックの重み付け予測角度及び重み付け予測位置を取得する。図4Bには、特定の重み付け予測角度に基づいて、カレントブロックの内部の画素位置(例えば、画素位置1、画素位置2及び画素位置3)の指す角度方向が示され、当該角度方向はカレントブロックの外部の特定の周辺位置を指す。図4Cには、別の重み付け予測角度に基づいて、カレントブロックの内部の画素位置(例えば、画素位置2、画素位置3及び画素位置4)の指す角度方向が示され、当該角度方向はカレントブロックの外部の特定の周辺位置を指す。
重み付け予測位置(距離パラメータとも呼ばれる)は、カレントブロックの外部の周辺位置の参照重み値を設定するために用いられる。例えば、重み付け予測角度、カレントブロックのサイズなどのパラメータに基づいてカレントブロックの外部の周辺位置の範囲を決定してもよい(図4B及び図4Cを参照)。次に、周辺位置の範囲をN等分し、Nの値は、例えば、4、6、8などと任意に設定することができ、重み付け予測位置は、どの周辺位置をカレントブロックの重み変換の開始位置とするかを表すために用いられ、これによって重み変換の開始位置に基づいてカレントブロックの外部の周辺位置の参照重み値を設定する。
N=8を例として説明すると、図4Dに示されるとおり、全ての周辺位置を8等分した後、7つの重み付け予測位置を得ることができる。重み付け予測位置が0であるとき、周辺位置a0(即ち、点線0の指す周辺位置であり、実際の適用では、点線0が存在せず、点線0は理解の便宜上示す例に過ぎず、点線0~点線6は全ての周辺位置を8等分するために用いられる)をカレントブロックの重み変換の開始位置とすることを表す。重み付け予測位置が1であるとき、周辺位置a1をカレントブロックの重み変換の開始位置とすることを表す。このようにして、重み付け予測位置が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つの重み付け予測位置を取得してもよい。
例示的に、符号化側は、次の方式を採用してカレントブロックの重み付け予測角度及び重み付け予測位置を取得する。
方式1:符号化側と復号側は、カレントブロックの重み付け予測角度として同じ重み付け予測角度を取り決め、カレントブロックの重み付け予測位置として同じ重み付け予測位置を取り決める。例えば、符号化側と復号側は、重み付け予測角度Aをカレントブロックの重み付け予測角度とし、符号化側と復号側は重み付け予測位置a4をカレントブロックの重み付け予測位置とする。
方式2:符号化側は重み付け予測角度リストを構築し、重み付け予測角度リストは、少なくとも1つの重み付け予測角度を含んでもよく、例えば、重み付け予測角度A及び重み付け予測角度Bを含んでもよい。符号化側は重み付け予測位置リストを構築し、重み付け予測位置リストは少なくとも1つの重み付け予測位置を含んでもよく、例えば、重み付け予測位置a0~a6、重み付け予測位置b0~b6などを含んでもよい。符号化側は、重み付け予測角度リスト中の各重み付け予測角度を順にトラバースし、重み付け予測位置リスト中の各重み付け予測位置をトラバースし、つまり、各重み付け予測角度と各重み付け予測位置の組み合わせをトラバースする。重み付け予測角度と重み付け予測位置の各組み合わせに対して、当該組み合わせ中の重み付け予測角度及び重み付け予測位置を、ステップ401で取得したカレントブロックの重み付け予測角度及び重み付け予測位置とし、当該重み付け予測角度と当該重み付け予測位置に基づいてステップ402~ステップ407を実行して、カレントブロックの重み付け予測値を得る。
例えば、符号化側は重み付け予測角度Aと重み付け予測位置a0までトラバースするとき、重み付け予測角度Aと重み付け予測位置a0に基づいてステップ402~ステップ407を実行して、カレントブロックの重み付け予測値A-1を得る。符号化側は重み付け予測角度Aと重み付け予測位置a1までトラバースするとき、重み付け予測角度Aと重み付け予測位置a1に基づいてステップ402~ステップ407を実行して、カレントブロックの重み付け予測値A-2を得る。符号化側は重み付け予測角度Bと重み付け予測位置b0までトラバースするとき、重み付け予測角度Bと重み付け予測位置b0に基づいてステップ402~ステップ407を実行して、カレントブロックの重み付け予測値B-1を得、このように繰り返す。符号化側は、各組み合わせ(重み付け予測角度と重み付け予測位置の組み合わせ)に基づいて、対応する重み付け予測値を得ることができる。
符号化側は重み付け予測角度と重み付け予測位置の組み合わせに基づいて全ての重み付け予測値を得た後、各重み付け予測値に基づいてRDOコスト値を決定し、決定方式に対して限定せず、符号化側は、各組み合わせのRDOコスト値を得て、全てのRDOコスト値の中から最小のRDOコスト値を選択してもよい。
次に、符号化側は、最小のRDOコスト値に対応する組み合わせの重み付け予測角度及び重み付け予測位置をそれぞれカレントブロックの目標重み付け予測角度及び目標重み付け予測位置とし、最後に目標重み付け予測角度の重み付け予測角度リストにおけるインデックス値、及び目標重み付け予測位置の重み付け予測位置リストにおけるインデックス値をビットストリームに組み入れる。インデックス値をビットストリームに組み入れるための具体的な実現方法は、次の実施例の方式2の適用シナリオを参照することができる。
当然ながら、前記方式は単なる例に過ぎず、これに関しては限定せず、カレントブロックの重み付け予測角度及び重み付け予測位置を得ることさえできればよく、例えば、重み付け予測角度リストの中からカレントブロックの重み付け予測角度としてランダムに1つの重み付け予測角度を選択し、重み付け予測位置リストの中からカレントブロックの重み付け予測位置としてランダムに1つの重み付け予測位置を選択してもよい。
ステップ402で、符号化側は、カレントブロックの各画素位置に対して、カレントブロックの重み付け予測角度に基づいてカレントブロックの外部の周辺位置の中から当該画素位置の指す周辺マッチング位置を決定する。本実施例では、区別しやすいように、当該画素位置の指すカレントブロックの外部の周辺位置を、当該画素位置の周辺マッチング位置と呼んでもよい。
例示的に、重み付け予測角度がカレントブロックの内部の画素位置の指す角度方向を表すため、カレントブロックの各画素位置に対して、当該重み付け予測角度に基づいて当該画素位置の指す角度方向を決定し、次いで当該角度方向に基づいて当該画素位置の属するカレントブロックの外部の周辺位置の中から当該画素位置の指す周辺マッチング位置を決定する。
例示的に、カレントブロックの外部の周辺位置は、カレントブロックの外部の上側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つの整数画素位置に対応することであり、それ以外の場合については、本実施例で説明を省略する。
ステップ403で、符号化側は、当該周辺マッチング位置に関連する参照重み値に基づいて当該画素位置の目標重み値を決定する。
例示的に、カレントブロックの各画素位置に対して、当該画素位置の指す周辺マッチング位置を決定した後、符号化側は当該周辺マッチング位置に関連する参照重み値を決定してもよく、当該周辺マッチング位置に関連する参照重み値は予め設定されてもよいし、特定の方法を採用して決定されてもよく、具体的な決定方式は後続の実施例を参照することができる。
次に、符号化側は、当該周辺マッチング位置に関連する参照重み値に基づいて当該画素位置の目標重み値を決定し、例えば、当該周辺マッチング位置に関連する参照重み値を当該画素位置の目標重み値として決定してもよい。
例示的に、カレントブロックの外部の周辺位置に参照重み値を設定してもよく、具体的なプロセスは後続の実施例を参照し、且つ、カレントブロックの外部の周辺位置は整数画素位置であってもよいし又は副画素位置であってもよく、例えば、カレントブロックの外部の整数画素位置に参照重み値を設定してもよく、且つ/又は、カレントブロックの外部の副画素位置に参照重み値を設定してもよい。
可能な一実施形態では、当該周辺マッチング位置に関連する参照重み値に基づいて当該画素位置の目標重み値を決定するのは、次の5つの場合を含んでもよい。場合1:もし当該周辺マッチング位置が整数画素位置であり、且つ当該整数画素位置に参照重み値がすでに設定されているのであれば、当該整数画素位置の参照重み値に基づいて当該画素位置の目標重み値を決定する。場合2:もし当該周辺マッチング位置が整数画素位置であり、且つ当該整数画素位置に参照重み値が設定されていないのであれば、当該整数画素位置の隣接位置の参照重み値に基づいて当該画素位置の目標重み値を決定することができ、例えば、隣接位置の参照重み値に切り上げを行って、当該画素位置の目標重み値を得、又は、隣接位置の参照重み値に切り捨てを行って、当該画素位置の目標重み値を得、又は、当該整数画素位置の隣接位置の参照重み値の内挿に基づいて当該画素位置の目標重み値を決定してもよく、これに関しては限定しない。場合3:もし当該周辺マッチング位置が副画素位置であり、且つ当該副画素位置に参照重み値がすでに設定されているのであれば、当該副画素位置の参照重み値に基づいて当該画素位置の目標重み値を決定する。場合4:もし当該周辺マッチング位置が副画素位置であり、且つ当該副画素位置に参照重み値が設定されていないのであれば、当該副画素位置の隣接位置の参照重み値に基づいて当該画素位置の目標重み値を決定することができ、例えば、隣接位置の参照重み値に切り上げを行って、当該画素位置の目標重み値を得、又は、隣接位置の参照重み値に切り捨てを行って、当該画素位置の目標重み値を得、又は、当該副画素位置の隣接位置の参照重み値の内挿に基づいて当該画素位置の目標重み値を決定してもよく、これに関しては限定しない。場合5:周辺マッチング位置に関連する複数の参照重み値に基づいて当該画素位置の目標重み値を決定し、例えば、当該周辺マッチング位置が整数画素位置であるか副画素位置であるかに関わらず、いずれも周辺マッチング位置の複数の隣接位置の参照重み値を取得してもよい。もし周辺マッチング位置に参照重み値がすでに設定されているのであれば、周辺マッチング位置の参照重み値及び複数の隣接位置の参照重み値に重み付け演算を行って、当該画素位置の目標重み値を得、もし周辺マッチング位置に参照重み値が設定されていないのであれば、複数の隣接位置の参照重み値に重み付け演算を行って、当該画素位置の目標重み値を得る。
当然ながら、前記場合1から場合5はいくつかの例に過ぎず、当該目標重み値の決定方式に対しては限定しない。
ステップ404で、符号化側は、当該画素位置の目標重み値に基づいて当該画素位置の関連重み値を決定する。
ステップ405で、カレントブロックの各画素位置に対して、符号化側は、カレントブロックの第1予測モードに基づいて当該画素位置の第1予測値を決定し、カレントブロックの第2予測モードに基づいて当該画素位置の第2予測値を決定する。
例示的に、第1予測モードは、イントラブロックコピー予測モード、フレーム内予測モード、フレーム間予測モード、パレットモードのいずれか1つであってもよく、第2予測モードは、イントラブロックコピー予測モード、フレーム内予測モード、フレーム間予測モード、パレットモードのいずれか1つであってもよい。例えば、第1予測モードはイントラブロックコピー予測モードであってもよく、第2予測モードはイントラブロックコピー予測モードであってもよく、又は、第1予測モードはフレーム間予測モードであってもよく、第2予測モードはフレーム間予測モードであってもよいなどである。
第1予測モード及び第2予測モードに基づいて予測値を決定するプロセスに関しては、後続の実施例を参照する。
ステップ406で、符号化側は、当該画素位置の第1予測値、当該画素位置の目標重み値、当該画素位置の第2予測値及び当該画素位置の関連重み値に基づいて、当該画素位置の重み付け予測値を決定する。
ステップ407で、符号化側は、カレントブロックの各画素位置の重み付け予測値に基づいてカレントブロックの重み付け予測値を決定する。
以上から分かるように、本願の実施例では、重み値を設定するための効果的な方法を提案し、カレントブロックの各画素位置に合理的な目標重み値を設定できるため、カレントブロックの予測値が元の画素にさらに近づくようにし、これによって予測の正確さを向上させ、予測性能を向上させ、符号化性能を向上させる。
実施例3:実施例1において、カレントブロックは1つのサブブロックを含んでもよく、つまり、サブブロックがカレントブロック自体であり、カレントブロックについて、図4Fに示されるのは復号方法のフローチャートであり、当該方法は復号側に適用することができ、当該方法はステップ411~417を含んでもよい。
ステップ411で、カレントブロックに対して重み付け予測を開始すると決定されるとき、復号側はカレントブロックの重み付け予測角度及び重み付け予測位置を取得する。
例示的に、復号側もカレントブロックに対して重み付け予測を開始することを許可するかどうかを決定する必要があり、許可する場合、カレントブロックの重み付け予測角度及び重み付け予測位置を取得し、後続のステップを実行し、許可しない場合、本願では処理方式を限定しない。
可能な一実施形態では、符号化側はカレントブロックの特徴情報が特定の条件を満たしているかどうかを判断し、満たしている場合、カレントブロックに対して重み付け予測を開始すると決定する。復号側もカレントブロックの特徴情報が特定の条件を満たしているかどうかを判断し、満たしている場合、カレントブロックに対して重み付け予測を開始すると決定し、満たしていない場合、カレントブロックに対して重み付け予測を開始しないと決定する。復号側がどのようにして特徴情報に基づいてカレントブロックに対して重み付け予測を開始するかどうかを決定するかに関しては、ステップ401を参照することができ、ここでは説明を省略する。
別の可能な実施形態では、符号化側は、カレントブロックの特徴情報に基づいてカレントブロックが重み付け予測をサポートするかどうかを決定し、カレントブロックが重み付け予測をサポートするとき、他の方法を採用してカレントブロックに対して重み付け予測を開始するかどうかを決定してもよく、例えば、RDO手法を採用してカレントブロックに対して重み付け予測を開始するかどうかを決定する。カレントブロックに対して重み付け予測を開始するかどうかを決定した後、符号化側がカレントブロックの符号化ビットストリームを送信するとき、当該符号化ビットストリームはカレントブロックに対して重み付け予測を開始するかどうかのシンタックスを含んでもよく、当該シンタックスはカレントブロックに対して重み付け予測を開始するかどうかを表す。復号側がカレントブロックの特徴情報に基づいてカレントブロックが重み付け予測をサポートするかどうかを決定するための具体的な方式は、ステップ401を参照し、ここでは説明を省略する。カレントブロックが重み付け予測をサポートすると決定されるとき、復号側は符号化ビットストリームの中からカレントブロックに対して重み付け予測を開始するかどうかのシンタックスを解析し、当該シンタックスに基づいてカレントブロックに対して重み付け予測を開始するかどうかを決定してもよい。
可能な一実施形態では、カレントブロックに対して重み付け予測を開始すると決定されるとき、復号側は、カレントブロックの重み付け予測角度及び重み付け予測位置を取得し、重み付け予測角度及び重み付け予測位置に関連する解釈は、ステップ401を参照することができ、ここでは説明を省略する。復号側は、次の方式を採用してカレントブロックの重み付け予測角度及び重み付け予測位置を取得することができる。
方式1:復号側と符号化側はカレントブロックの重み付け予測角度として同じ重み付け予測角度を取り決め、カレントブロックの重み付け予測位置として同じ重み付け予測位置を取り決める。具体的な内容は、前の実施例の方式1を参照することができる。
方式2:復号側は重み付け予測角度リストを構築し、当該重み付け予測角度リストは符号化側の重み付け予測角度リストと同じである。復号側は重み付け予測位置リストを構築し、当該重み付け予測位置リストは符号化側の重み付け予測位置リストと同じである。具体的な内容は、前の実施例の方式2を参照することができる。復号側は、カレントブロックの符号化ビットストリームを受信した後、当該符号化ビットストリームの中から指示情報を解析し、当該指示情報に基づいて重み付け予測角度リストの中からカレントブロックの重み付け予測角度として1つの重み付け予測角度を選択し、当該指示情報に基づいて重み付け予測位置リストの中からカレントブロックの重み付け予測位置として1つの重み付け予測位置を選択する。
以下、いくつかの具体的な適用シナリオを参照して、方式2の実現プロセスを説明する。
適用シナリオ1:符号化側が復号側に符号化ビットストリームを送信するとき、当該符号化ビットストリームは指示情報1を含んでもよく、当該指示情報1はカレントブロックの重み付け予測角度(即ち、目標重み付け予測角度)及びカレントブロックの重み付け予測位置(即ち、目標重み付け予測位置)を指示するために用いられる。例えば、当該指示情報1が0であるときは、重み付け予測角度リスト中の最初の重み付け予測角度を指示し、且つ重み付け予測位置リスト中の最初の重み付け予測位置を指示するために用いられ、このようにして、指示情報1の値は、どの重み付け予測角度とどの重み付け予測位置なのかを指示するために用いられ、符号化側と復号側が取り決めさえすればよく、これに関しては限定しない。
復号側は符号化ビットストリームを受信した後、当該符号化ビットストリームの中から指示情報1を解析し、復号側は、当該指示情報1に基づいて、重み付け予測角度リストの中から当該指示情報1に対応する重み付け予測角度を選択し、当該重み付け予測角度をカレントブロックの重み付け予測角度としてもよい。復号側は、当該指示情報1に基づいて、重み付け予測位置リストの中から当該指示情報1に対応する重み付け予測位置を選択し、当該重み付け予測位置をカレントブロックの重み付け予測位置としてもよい。
適用シナリオ2:符号化側が復号側に符号化ビットストリームを送信するとき、当該符号化ビットストリームは指示情報2及び指示情報3を含んでもよい。指示情報2は、カレントブロックの目標重み付け予測角度を指示するために用いられ、例えば、目標重み付け予測角度の重み付け予測角度リストにおけるインデックス値1であり、インデックス値1は、目標重み付け予測角度が重み付け予測角度リスト中の何番目の重み付け予測角度なのかを表す。指示情報3は、カレントブロックの目標重み付け予測位置を指示するために用いられ、例えば、目標重み付け予測位置の重み付け予測位置リストにおけるインデックス値2であり、インデックス値2は目標重み付け予測位置が重み付け予測位置リスト中の何番目の重み付け予測位置なのかを表す。
復号側は符号化ビットストリームを受信した後、符号化ビットストリームの中から指示情報2及び指示情報3を解析し、復号側は、指示情報2に基づいて、重み付け予測角度リストの中から当該インデックス値1に対応する重み付け予測角度を選択し、当該重み付け予測角度をカレントブロックの重み付け予測角度とする。復号側は、当該指示情報3に基づいて、重み付け予測位置リストの中から当該インデックス値2に対応する重み付け予測位置を選択し、当該重み付け予測位置をカレントブロックの重み付け予測位置とする。
適用シナリオ3:符号化側と復号側は好ましい設定組み合わせを取り決めてもよく、当該好ましい設定組み合わせに対して限定せず、実際の経験によって設定してもよく、例えば、重み付け予測角度Aと重み付け予測位置a4とを含む好ましい設定組み合わせ1、重み付け予測角度Bと重み付け予測位置b4とを含む好ましい設定組み合わせ2などを取り決めてもよい。
符号化側はカレントブロックの目標重み付け予測角度及び目標重み付け予測位置を決定した後、目標重み付け予測角度及び目標重み付け予測位置が好ましい設定組み合わせなのかどうかを決定する。そうであれば、符号化側が復号側に符号化ビットストリームを送信するとき、当該符号化ビットストリームは指示情報4及び指示情報5を含んでもよい。指示情報4は、カレントブロックが好ましい設定組み合わせを採用しているかどうかを指示するために用いられ、例えば、指示情報4が第1値(例えば、0)であるのは、カレントブロックが好ましい設定組み合わせを採用していることを表す。指示情報5は、カレントブロックがどの好ましい設定組み合わせを採用しているかを指示するために用いられ、例えば、指示情報5の値が0であるときは、カレントブロックが好ましい設定組み合わせ1を採用していることを指示するために用いられ、指示情報5の値が1であるときは、カレントブロックが好ましい設定組み合わせ2を採用していることを指示するために用いられる。
復号側は、符号化ビットストリームを受信した後、当該符号化ビットストリームの中から指示情報4及び指示情報5を解析することができ、復号側は、当該指示情報4に基づいて、カレントブロックが好ましい設定組み合わせを採用しているかどうかを決定することができる。もし指示情報4が第1値であれば、カレントブロックが好ましい設定組み合わせを採用していると決定する。カレントブロックが好ましい構成組み合わせを採用しているとき、復号側は、指示情報5に基づいて、カレントブロックがどの好ましい設定組み合わせを採用しているかを決定することができ、例えば、指示情報5の値が0であるときに、復号側は、カレントブロックが好ましい設定組み合わせ1を採用していると決定してもよく、即ちカレントブロックの重み付け予測角度は重み付け予測角度Aであり、カレントブロックの重み付け予測位置は重み付け予測位置a4である。もう一例として、指示情報5の値が1であるときに、復号側は、カレントブロックが好ましい設定組み合わせ2を採用していると決定してもよく、即ちカレントブロックの重み付け予測角度は重み付け予測角度Bであり、カレントブロックの重み付け予測位置は重み付け予測位置b4である。
例示的に、もし符号化側と復号側は1組の好ましい設定組み合わせだけを取り決め、例えば、重み付け予測角度Aと重み付け予測位置a4とを含む好ましい設定組み合わせであれば、当該符号化ビットストリームは、指示情報4だけを含み、指示情報5を含まなくてもよく、指示情報4は、カレントブロックが好ましい設定組み合わせを採用していることを指示するために用いられる。復号側が当該符号化ビットストリームの中から指示情報4を解析した後に、もし指示情報4が第1値であれば、復号側はカレントブロックが好ましい設定組み合わせを採用していると決定し、復号側は、当該好ましい設定組み合わせに基づいて、カレントブロックの重み付け予測角度を重み付け予測角度Aとして、カレントブロックの重み付け予測位置を重み付け予測位置a4として決定する。
適用シナリオ4:符号化側と復号側は好ましい設定組み合わせを取り決めてもよく、符号化側はカレントブロックの目標重み付け予測角度及び目標重み付け予測位置を決定した後、目標重み付け予測角度及び目標重み付け予測位置が好ましい設定組み合わせなのかどうかを決定してもよい。そうでなければ、符号化側が復号側に符号化ビットストリームを送信するとき、当該符号化ビットストリームは指示情報4及び指示情報6を含む。指示情報4は、カレントブロックが好ましい設定組み合わせを採用しているかどうかを指示するために用いられ、例えば、指示情報4が第2値(例えば、1)であるのは、カレントブロックが好ましい設定組み合わせを採用していないことを表す。指示情報6は、カレントブロックの目標重み付け予測角度及びカレントブロックの目標重み付け予測位置を指示するために用いられる。
復号側は符号化ビットストリームを受信した後、当該符号化ビットストリームの中から指示情報4及び指示情報6を解析し、復号側は、当該指示情報4に基づいて、カレントブロックが好ましい設定組み合わせを採用しているかどうかを決定する。もし指示情報4が第2値であれば、カレントブロックが好ましい設定組み合わせを採用していないと決定する。カレントブロックが好ましい設定組み合わせを採用していないとき、復号側は、指示情報6に基づいて、重み付け予測角度リストの中から当該指示情報6に対応する重み付け予測角度を選択し、当該重み付け予測角度をカレントブロックの重み付け予測角度としてもよく、復号側は、当該指示情報6に基づいて、重み付け予測位置リストの中から当該指示情報6に対応する重み付け予測位置を選択し、当該重み付け予測位置をカレントブロックの重み付け予測位置としてもよい。
適用シナリオ5:符号化側と復号側は好ましい設定組み合わせを取り決めてもよく、符号化側はカレントブロックの目標重み付け予測角度及び目標重み付け予測位置を決定した後、目標重み付け予測角度及び目標重み付け予測位置が好ましい設定組み合わせなのかどうかを決定してもよい。そうでなければ、符号化側が復号側に符号化ビットストリームを送信するとき、当該符号化ビットストリームは指示情報4、指示情報7及び指示情報8を含んでもよい。例示的に、指示情報4は、カレントブロックが好ましい設定組み合わせを採用しているかどうかを指示するために用いられ、例えば、指示情報4が第2値であるのは、カレントブロックが好ましい構成組み合わせを採用していないことを表す。指示情報7は、カレントブロックの目標重み付け予測角度を指示するために用いられる。指示情報8は、カレントブロックの目標重み付け予測位置を指示するために用いられる。
復号側は符号化ビットストリームを受信した後、当該符号化ビットストリームの中から指示情報4、指示情報7及び指示情報8を解析し、復号側は、当該指示情報4に基づいて、カレントブロックが好ましい設定組み合わせを採用しているかどうかを決定する。もし指示情報4が第2値であれば、カレントブロックが好ましい構成組み合わせを採用していないと決定する。カレントブロックが好ましい設定組み合わせを採用していないとき、復号側は、当該指示情報7に基づいて、重み付け予測角度リストの中から対応する重み付け予測角度を選択し、当該重み付け予測角度をカレントブロックの重み付け予測角度とする。復号側は、当該指示情報8に基づいて、重み付け予測位置リストの中から対応する重み付け予測位置を選択し、当該重み付け予測位置をカレントブロックの重み付け予測位置とする。
当然ながら、上記の方式1と方式2は単なる例に過ぎず、これに関しては限定せず、復号側がカレントブロックの重み付け予測角度(即ち、目標重み付け予測角度)及び重み付け予測位置(即ち、目標重み付け予測位置)を得ることさえできればよい。
ステップ412で、カレントブロックの各画素位置に対して、復号側は、カレントブロックの重み付け予測角度に基づいてカレントブロックの外部の周辺位置の中から当該画素位置の指す周辺マッチング位置を決定する。
ステップ413で、復号側は、当該周辺マッチング位置に関連する参照重み値に基づいて当該画素位置の目標重み値を決定する。
ステップ414で、復号側は、当該画素位置の目標重み値に基づいて当該画素位置の関連重み値を決定する。
ステップ415で、カレントブロックの各画素位置に対して、復号側は、カレントブロックの第1予測モードに基づいて当該画素位置の第1予測値を決定し、カレントブロックの第2予測モードに基づいて当該画素位置の第2予測値を決定する。
ステップ416で、復号側は、当該画素位置の第1予測値、当該画素位置の目標重み値、当該画素位置の第2予測値及び当該画素位置の関連重み値に基づいて、当該画素位置の重み付け予測値を決定する。
ステップ417で、復号側は、カレントブロックの各画素位置の重み付け予測値に基づいてカレントブロックの重み付け予測値を決定する。
例示的に、ステップ412~ステップ417について、その実現プロセスはステップ402~ステップ407を参照することができ、違うのは、ステップ412~ステップ417が復号側の処理フローで、符号化側の処理フローではないことであり、ここでは説明を省略する。
以上から分かるように、本願の実施例では、重み値を設定するための効果的な方法を提案し、カレントブロックの各画素位置に合理的な目標重み値を設定できるため、カレントブロックの予測値が元の画素にさらに近づくようにし、これによって予測の正確さを向上させ、予測性能を向上させ、復号性能を向上させる。
前記実施例2及び実施例3において、カレントブロックが1つのサブブロックを含み、つまりカレントブロックに対して処理を行い、このような処理方式をフレーム間角度重み付け予測(Angular Weighted Prediction、AWP)モードと記すことができる。
実施例4:前記実施例1~実施例3では、重み付け予測角度が関わり、当該重み付け予測角度は任意の角度であってもよく、例えば、180度以内の任意の角度であり、又は、360度以内の任意の角度であり、例えば、10度、20度、30度などであり、当該重み付け予測角度に対して限定しない。可能な一実施形態では、重み付け予測角度が水平角度(例えば、図5Bの角度2)であってもよいし、又は、重み付け予測角度は垂直角度(例えば、図5Bの角度6)であってもよいし、又は、重み付け予測角度の勾配の絶対値(重み付け予測角度の勾配とは重み付け予測角度の正接)は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乗)などであってもよい。例示的に、図5Aには、8通りの重み付け予測角度が示され、これらの重み付け予測角度の勾配の絶対値は2のn乗である。後続の実施例では、重み付け予測角度に対してシフトを行うことができ、したがって、重み付け予測角度の勾配の絶対値が2のn乗であるとき、重み付け予測角度に対してシフトを行うときに、除算を避けることができるため、シフトを実現しやすい。
例示的に、ブロックサイズによってサポートする重み付け予測角度の数は同じでもよいし異なってもよい。
実施例5:前記実施例1~実施例3では、各画素位置に対して、当該画素位置の指す周辺マッチング位置に関連する参照重み値に基づいて、当該画素位置の目標重み値を決定してもよい。実施例2及び実施例3では、周辺マッチング位置がカレントブロックの周辺マッチング位置である。
次の方式を採用して周辺マッチング位置に関連する参照重み値を取得してもよい。カレントブロックの周辺マッチング位置の座標値及びカレントブロックの重み変換開始位置の座標値に基づいて、当該周辺マッチング位置に関連する参照重み値を決定する。
例示的に、もし周辺マッチング位置がカレントブロックの外部の上側1行又は下側1行の周辺位置であれば、周辺マッチング位置の座標値は周辺マッチング位置の横座標値であり、重み変換開始位置の座標値は重み変換開始位置の横座標値である。又は、もし周辺マッチング位置がカレントブロックの外部の左側1列又は右側1列の周辺位置であれば、周辺マッチング位置の座標値は周辺マッチング位置の縦座標値であり、重み変換開始位置の座標値は重み変換開始位置の縦座標値である。
例示的に、カレントブロックの左上コーナーの画素位置(例えば、左上コーナーの最初の画素位置)を座標原点としてもよく、カレントブロックの周辺マッチング位置の座標値(例えば、横座標値又は縦座標値)及びカレントブロックの重み変換開始位置の座標値(例えば、横座標値又は縦座標値)は、いずれも当該座標原点に対する座標値である。当然ながら、カレントブロックの他の画素位置を座標原点としてもよく、実現形態は左上コーナーの画素位置を座標原点とする場合の実現形態と類似している。
可能な一実施形態では、周辺マッチング位置の座標値及びカレントブロックの重み変換開始位置の座標値に基づいて、周辺マッチング位置に関連する参照重み値を決定するとき、周辺マッチング位置の座標値とカレントブロックの重み変換開始位置の座標値との差を計算してもよい。もし当該差が第1閾値より小さければ、周辺マッチング位置に関連する参照重み値を第1閾値と決定し、もし当該差が第2閾値より大きければ、周辺マッチング位置に関連する参照重み値を第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では、各画素位置に対して、当該画素位置の指す周辺マッチング位置に関連する参照重み値に基づいて、当該画素位置の目標重み値を決定してもよい。以下、カレントブロックの周辺マッチング位置を例として説明する。次の方式を採用して周辺マッチング位置に関連する参照重み値を取得してもよい。カレントブロックの参照重み値リストを決定し、当該参照重み値リストは複数の参照重み値を含んでもよく、当該参照重み値リスト中の複数の参照重み値は予め設定され又は重み設定パラメータに基づいて設定されるものである。目標インデックスに基づいて当該参照重み値リストの中から有効数の参照重み値を選択し、有効数の参照重み値に基づいて、カレントブロックの外部の周辺位置の参照重み値を設定する。例示的に、当該有効数はカレントブロックのサイズ及びカレントブロックの重み付け予測角度に基づいて決定されてもよく、当該目標インデックスはカレントブロックのサイズ、カレントブロックの重み付け予測角度及びカレントブロックの重み付け予測位置に基づいて決定されてもよい。
上記で分かるように、カレントブロックの外部の周辺位置に参照重み値が設定されており、つまり各周辺位置がいずれも参照重み値を有しているため、カレントブロックの外部の周辺位置の中から画素位置の指す周辺マッチング位置を決定した後、当該周辺マッチング位置に関連する参照重み値、即ち当該画素位置の目標重み値を決定することができる。
以下、図6Aに示される具体的な実現ステップを参照して、周辺位置の参照重み値を設定する前記プロセスを説明する。
ステップS1で、カレントブロックの参照重み値リストを決定する。
可能な一実施形態では、シーケンスレベルの参照重み値リストを、カレントブロックの参照重み値リストとして決定してもよい。例えば、符号化側と復号側はいずれもシーケンスレベルの参照重み値リストA1を構成してもよく、シーケンスレベルのマルチフレーム画像については、それらの画像がいずれも参照重み値リストA1を使用しており、つまり重み付け予測角度と重み付け予測位置が何なのかに関わらず、シーケンスレベルのマルチフレーム画像の各カレントブロックについては、同一の参照重み値リストA1を共有する。
別の可能な実施形態では、プリセットした参照重み値リストを、カレントブロックの参照重み値リストとして決定してもよい。例えば、符号化側と復号側はいずれも参照重み値リストをプリセットすることができ、複数のシーケンスの全ての画像については、いずれも当該参照重み値リストを使用しており、つまり重み付け予測角度と重み付け予測位置が何なのかに関わらず、複数のシーケンスの全ての画像の各カレントブロックは、当該参照重み値リストを共有する。
別の可能な実施形態では、カレントブロックの重み付け予測角度に対応する参照重み値リストを、カレントブロックの参照重み値リストとして決定してもよい。例えば、符号化側と復号側はいずれも複数の参照重み値リストが構成されており、いくつかの重み付け予測角度が同一の参照重み値リストを共有する。例えば、参照重み値リストA2及び参照重み値リストA3が構成され、重み付け予測角度1と重み付け予測角度2が同一の参照重み値リストA2を共有し、重み付け予測角度3が参照重み値リストA3を使用する。これにより、カレントブロックの重み付け予測角度を得た後、もしカレントブロックの重み付け予測角度が重み付け予測角度1であれば、重み付け予測角度1に対応する参照重み値リストA2をカレントブロックの参照重み値リストとして決定する。
別の可能な実施形態では、カレントブロックの重み付け予測角度及びカレントブロックの重み付け予測位置に対応する参照重み値リストを、カレントブロックの参照重み値リストとして決定してもよい。例えば、符号化側と復号側はいずれも複数の参照重み値リストが構成されており、重み付け予測角度と重み付け予測位置の異なる組み合わせについては、同じ又は異なる参照重み値リストに対応してもよい。例えば、参照重み値リストA4、参照重み値リストA5及び参照重み値リストA6が構成され、重み付け予測角度1と重み付け予測位置0~2が同一の参照重み値リストA4を共有し、重み付け予測角度1と重み付け予測位置3~5が同一の参照重み値リストA5を共有し、重み付け予測角度2と重み付け予測位置0~5が同一の参照重み値リストA6を共有する。これにより、カレントブロックの重み付け予測角度及び重み付け予測位置を得た後、もしカレントブロックの重み付け予測角度が重み付け予測角度1であり、カレントブロックの重み付け予測位置が重み付け予測位置4であれば、重み付け予測角度1と重み付け予測位置4に対応する参照重み値リストA5を、カレントブロックの参照重み値リストと決定する。
別の可能な実施形態では、カレントブロックのサイズとカレントブロックの重み付け予測角度に対応する参照重み値リストを、カレントブロックの参照重み値リストとして決定してもよい。例えば、符号化側と復号側はいずれも複数の参照重み値リストが構成されており、サイズと重み付け予測角度の異なる組み合わせについては、同じ又は異なる参照重み値リストに対応してもよい。例えば、参照重み値リストA7及び参照重み値リストA8が構成され、重み付け予測角度1とサイズ1は参照重み値リストA7を採用し、重み付け予測角度1とサイズ2、重み付け予測角度2とサイズ1はいずれも参照重み値リストA8を採用する。これにより、もしカレントブロックの重み付け予測角度が重み付け予測角度1であり、カレントブロックのサイズがサイズ1であれば、重み付け予測角度1とサイズ1に対応する参照重み値リストA7を、カレントブロックの参照重み値リストとして決定してもよい。
上記で分かるように、カレントブロックの参照重み値リストを決定することができ、当該参照重み値リストは複数の参照重み値を含んでもよく、当該参照重み値リスト中の複数の参照重み値は予め設定され又は重み設定パラメータに基づいて設定されてもよい。
カレントブロックの参照重み値リストに関しては、当該参照重み値リスト中の参照重み値の数が設定された固定値であってもよく、当該固定値は経験に基づいて任意に設定されてもよく、これに関しては限定しない。又は、当該参照重み値リスト中の参照重み値の数はカレントブロックの位置するカレントフレームのサイズ(例えば、幅又は高さ)に関連してもよく、例えば、参照重み値の数がカレントフレームの幅より大きく、又はカレントフレームの幅と同じであってもよく、参照重み値の数がカレントフレームの高さより大きく、又はカレントフレームの高さと同じであってもよく、これに関しては限定せず、参照重み値の数は実際のニーズに応じて選択することができる。
例示的に、参照重み値リスト中の複数の参照重み値については、複数の参照重み値が一致しない参照重み値であってもよく、例えば、参照重み値リスト中の複数の参照重み値は、完全には同じでなくてもよい。
可能な一実施形態では、参照重み値リスト中の複数の参照重み値については、単調増加してもよいし、又は、単調減少してもよい。又は、参照重み値リスト中の複数の参照重み値については、単調増加してから単調減少してもよいし、又は、単調減少してから単調増加してもよい。又は、参照重み値リスト中の複数の参照重み値については、先に複数の第1参照重み値を含み、次に複数の第2参照重み値を含んでもよいし、又は、先に複数の第2参照重み値を含み、次に複数の第1参照重み値を含んでもよい。以下、いくつかの具体的な状況を参照して、前記参照重み値リストの内容を説明する。
場合1:参照重み値リスト中の複数の参照重み値は単調増加又は単調減少してもよい。例えば、参照重み値リストは、[8 8 8 8…8 8 7 6 5 4 3 2 1 0 0 0 0…0 0]であってもよく、つまり参照重み値リスト中の複数の参照重み値が単調減少する。もう一例として、参照重み値リストは、[0 0 0 0…0 0 1 2 3 4 5 6 7 8 8 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であるのは、参照重み値リスト中の最初の位置を表し、y(x)は参照重み値リスト中のx番目の参照重み値を表す。aは重み変換率を表し、sは重み変換の開始位置を表す。Clip3関数は参照重み値が最小値と最大値の間にあるように限定するために用いられ、最小値と最大値はいずれも経験によって設定してもよく、以下、説明の便宜上、最小値が0で、最大値が8であるのを例として説明する。
aは重み変換率を表し、経験によって設定してもよく、例えば、aは0以外の整数であってもよく、例えば、aは、-4、-3、-2、-1、1、2、3、4などであってもよく、説明の便宜上、aが1であるのを例として説明する。もし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は参照重み値の総数の半分よりわずか小さくてもよく、例えば、参照重み値の総数の半分マイナス4であり、又は、sは参照重み値の総数の半分よりわずか大きくてもよく、例えば、参照重み値の総数の半分プラス4である。当然ながら、上述したのがsの値のいくつかの例に過ぎず、当該sの値に対して限定しない。
上記で分かるように、重み設定パラメータに基づいて参照重み値リスト中の参照重み値を設定するとき、ReferenceWeightsWhole[x]=Clip3(0,8,x-Z)、又は、ReferenceWeightsWhole[x]=Clip3(0,8,Z-x)、又は、ReferenceWeightsWhole[x]=Clip3(0,4,x-Z)、又は、ReferenceWeightsWhole[x]=Clip3(0,4,Z-x)の方式を採用することができる。当然ながら、前記方式がいくつかの例に過ぎず、当該実現形態に対して限定しない。
上記の式では、xの値の範囲は0からWholeLength-1であり、xが1であるとき、ReferenceWeightsWhole[x]は参照重み値リスト中の最初の参照重み値を表し、xが2であるとき、ReferenceWeightsWhole[x]は参照重み値リスト中の2番目の参照重み値を表し、このように繰り返す。例示的に、もしカレントブロックの外部の周辺位置が上側1行又は下側1行の周辺位置であれば、WholeLengthはカレントフレームの幅に基づいて決定され、もしカレントブロックの外部の周辺位置が左側1列又は右側1列の周辺位置であれば、WholeLengthはカレントフレームの高さに基づいて決定される。
上記の式a*(x-s)では、もしaが1であれば、a*(x-s)=x-sとなり、即ちClip3(0,8,x-Z)中のx-Zがx-sと同等であり、Zは重み変換の開始位置を表す。もしaが-1であれば、a*(x-s)=s-xとなり、即ちClip3(0,8,Z-x)中のZ-xがs-xと同等であり、Zは重み変換の開始位置を表す。aが他の値であるとき、実現プロセスは類似しており、参照重み値リスト中の参照重み値がy(x)=Clip3(最小値,最大値,a*(x-s))を満たしさえすればよい。Clip3(0,8)は参照重み値を0と8の間に限定するために用いられ、Clip3(0,4)は参照重み値を0と4の間に限定するために用いられる。
上記の式では、Zは重み変換の開始位置を表し、経験によって設定してもよく、例えば、xの値の範囲が0から511で、Zが255であるとすると、Zを式ReferenceWeightsWhole[x]=Clip3(0,8,x-Z)に代入し、0から511の任意の値に対して、ReferenceWeightsWhole[x]を得、即ち512個の参照重み値を得ることができ、512個の参照重み値が参照重み値リストを構成する。例えば、xの値が0から255であるとき、参照重み値はいずれも0であり、xの値が256であるとき、参照重み値は1であり、このようにして、xの値が262であるとき、参照重み値は7であり、xの値が263から511であるとき、参照重み値はいずれも8である。上記で分かるように、aが1であるとき、Clip3(0,8,x-Z)は参照重み値を単調増加させるために用いられる。同様に、Zを他の式に代入して、512個の参照重み値を得、512個の参照重み値に基づいて参照重み値リストを構成してもよく、例えば、aが-1であるとき、Clip3(0,8,Z-x)は参照重み値を単調減少させるために用いられる。Clip3(0,4)は参照重み値を0と4の間に限定するために用いられ、これに関しては説明を省略する。
上記で分かるように、カレントブロックの参照重み値リストを得ることができ、且つ当該参照重み値リストは複数の参照重み値を含んでもよく、当該参照重み値リスト中の複数の参照重み値は単調増加又は単調減少してもよい。可能な一実施形態では、参照重み値リストについては、当該参照重み値リストが目標領域の参照重み値、目標領域の第1隣接領域の参照重み値、目標領域の第2隣接領域の参照重み値をさらに含んでもよい。
目標領域は重み変換の開始位置に基づいて決定される1つ又は複数の参照重み値を含む。例えば、重み変換の開始位置に基づいて、1つの参照重み値を決定し、当該参照重み値を目標領域とする。例えば、重み変換の開始位置sが255であると、259番目の参照重み値を目標領域としてもよいし、又は、258番目の参照重み値を目標領域としてもよいし、又は、260番目の参照重み値を目標領域としてもよく、当然ながら、上述したのがいくつかの例に過ぎず、これに関しては限定しない。もう一例として、重み変換の開始位置に基づいて、複数の参照重み値を決定し、当該複数の参照重み値を目標領域とし、例えば、256~262番目の参照重み値を目標領域とし、又は、258~260番目の参照重み値を目標領域とし、当然ながら、上述したのがいくつかの例に過ぎず、これに関しては限定しない。
例えば、目標領域は参照重み値が4の参照重み値を含んでもよく、例えば、259番目の参照重み値が4であり、したがって、もし目標領域が1つの参照重み値を含めば、当該目標領域は259番目の参照重み値を含んでもよく、又は、目標領域が複数の参照重み値を含めば、当該目標領域は256~262番目の参照重み値、又は258~260番目の参照重み値を含んでもよく、これに関しては限定せず、当該目標領域内に259番目の参照重み値が存在しさえすればよい。
上記で分かるように、目標領域は1つの参照重み値を含んでもよく、又は、目標領域は複数の参照重み値を含んでもよい。もし目標領域が複数の参照重み値を含めば、目標領域の複数の参照重み値は単調増加又は単調減少する。前記単調増加は厳密な単調増加(即ち、目標領域の複数の参照重み値が厳密に単調増加すること)であってもよく、前記単調減少は厳密な単調減少(即ち、目標領域の複数の参照重み値が厳密に単調減少すること)であってもよい。例えば、目標領域の複数の参照重み値は1~7まで単調増加し、又は、目標領域の複数の参照重み値は7~1まで単調減少する。
例示的に、第1隣接領域の参照重み値はいずれも第1参照重み値であり、第2隣接領域の参照重み値は単調増加又は単調減少する。例えば、第1隣接領域の参照重み値がいずれも0であり、目標領域は1つの参照重み値を含み、当該参照重み値は1であり、第2隣接領域の参照重み値は2~8まで単調増加する。
又は、第1隣接領域の参照重み値がいずれも第2参照重み値であり、第2隣接領域の参照重み値がいずれも第3参照重み値であり、第2参照重み値と第3参照重み値は異なる。例えば、第1隣接領域の参照重み値がいずれも0であり、目標領域は複数の参照重み値を含み、複数の参照重み値は1~7まで単調増加し、第2隣接領域の参照重み値がいずれも8であり、言うまでもないが、第1隣接領域の参照重み値と第2隣接領域の参照重み値は異なる。
又は、第1隣接領域及び第2隣接領域の参照重み値は同時に単調増加又は単調減少する。例えば、第1隣接領域の参照重み値は単調増加し、第2隣接領域の参照重み値も単調増加し、もう一例として、第1隣接領域の参照重み値は単調減少し、第2隣接領域の参照重み値も単調減少する。例えば、第1隣接領域の参照重み値は0~3まで単調増加し、目標領域は1つの参照重み値を含み、当該参照重み値が4であり、第2隣接領域の参照重み値は5~8まで単調増加する。
場合2:参照重み値リスト中の複数の参照重み値は単調増加してから単調減少し、又は、複数の参照重み値は単調減少してから単調増加する。例えば、参照重み値リストは、[8 8…8 8 7 6 5 4 3 2 1 0 0…0 0 1 2 3 4 5 6 7 8 8…8 8]であり、つまり参照重み値リスト中の複数の参照重み値は、単調減少してから単調増加する。もう一例として、参照重み値リストは、[0 0…0 0 1 2 3 4 5 6 7 8 8…8 8 7 6 5 4 3 2 1 0 0…0 0]であってもよく、つまり参照重み値リスト中の複数の参照重み値は、単調増加してから単調減少する。当然ながら、上述したのが単なる例に過ぎず、当該参照重み値リストに対して限定しない。
例示的に、参照重み値リスト中の参照重み値は、予め設定されてもよいし、又は、重み設定パラメータに基づいて設定されてもよい。重み設定パラメータは重み変換率及び重み変換の開始位置を含んでもよい。当該重み変換率は経験によって設定される値であってもよく、当該重み変換の開始位置も経験によって設定される値であってもよい。
例示的に、参照重み値の最大値がM1で、参照重み値の最小値がM2であるとすると、参照重み値リスト中の複数の参照重み値については、最大値M1から最小値M2まで単調減少し、次に最小値M2から最大値M1まで単調増加する。又は、最小値M2から最大値M1まで単調増加し、次に最大値M1から最小値M2まで単調減少する。M1が8で、M2が0であるとすると、複数の参照重み値は、8から0まで単調減少してから0から8まで単調増加してもよいし、又は、複数の参照重み値は、0から8まで単調増加してから8から0まで単調減少してもよい。
例示的に、参照重み値リスト中の参照重み値を予め設定するプロセスについては、参照重み値リスト中の複数の参照重み値を任意に設定してもよく、複数の参照重み値は単調増加してから単調減少し、又は、複数の参照重み値は単調減少してから単調増加しさえすればよく、複数の参照重み値に対しては限定しない。
例示的に、重み設定パラメータに基づいて参照重み値リスト中の参照重み値を設定するプロセスについては、最初に第1重み変換率、第2重み変換率、第1重み変換の開始位置、第2重み変換の開始位置を取得し、次に、第1重み変換率、第2重み変換率、第1重み変換の開始位置、第2重み変換の開始位置に基づいて、参照重み値リスト中の複数の参照重み値を決定してもよい。第1重み変換率、第2重み変換率、第1重み変換の開始位置、第2重み変換の開始位置はいずれもプリセット値であってもよく、第1重み変換率、第2重み変換率、第1重み変換の開始位置、第2重み変換の開始位置に対していずれも限定しない。
例えば、次の方式を採用して参照重み値リスト中の参照重み値を決定してもよい。xが[0,k]にあるとき、y(x)=Clip3(最小値,最大値,a1*(x-s1))となる。xが[k+1,t]にあるとき、y(x)=Clip3(最小値,最大値,a2*(x-s2))となる。xは参照重み値リスト中の位置インデックスを表し、例えば、xが1であるのは、参照重み値リスト中の最初の位置を表し、y(x)は参照重み値リスト中のx番目の参照重み値を表す。kは経験によって設定される値であり、これに関しては限定せず、例えば、参照重み値リスト中の参照重み値の総数の半分、又は他の値であってもよく、kがtより小さくさえすればよく、tは参照重み値リスト中の参照重み値の総数である。a1は第1重み変換率を表し、a2は第2重み変換率を表す。s1は第1重み変換の開始位置を表し、s2は第2重み変換の開始位置を表す。
Clip3は参照重み値が最小値と最大値の間にあるように限定するために用いられ、最小値と最大値はいずれも経験によって設定してもよく、以下、説明の便宜上、最小値が0で、最大値が8であるのを例として説明する。
a1とa2はいずれも重み変換率を表し、経験によって設定してもよく、例えば、a1は0以外の整数であってもよく、例えば、a1は、-4、-3、-2、-1、1、2、3、4などであってもよく、a2は、0以外の整数であってもよく、例えば、a2は、-4、-3、-2、-1、1、2、3、4などであってもよい。例示的に、a1が正の整数であるとき、a2は、負の整数であってもよく、a1が負の整数であるとき、a2は、正の整数であってもよい。例えば、a1は、-a2であってもよく、つまり両者の変化率が一致しており、参照重み値の設定に関して言うと、すなわち参照重み値の勾配幅が一致することである。説明の便宜上、a1が1で、a2が-1であるのを例とすると、参照重み値は0から8までは0,1,2,3,4,5,6,7,8を経過する必要があり、次に8から0までは、8,7,6,5,4,3,2,1,0を経過する。又は、参照重み値は8から0までは、8,7,6,5,4,3,2,1,0を経過し、次に0から8までは0,1,2,3,4,5,6,7,8を経過する必要がある。a1が2で、a2が-2であるのを例とすると、参照重み値は0から8までは0,2,4,6,8を経過する必要があり、次に8から0までは、8,6,4,2,0を経過する。又は、参照重み値は8から0までは、8,6,4,2,0を経過し、次に0から8までは0,2,4,6,8を経過する必要がある。
s1とs2はいずれも重み変換の開始位置を表し、経験によって設定してもよく、例えば、s1は区間[0,k]の参照重み値の重み変換の開始位置で、s1はkの半分であってもよく、又は、s1はkの半分よりわずか小さくてもよく、例えば、kの半分マイナス4であり、又は、s1はkの半分よりわずか大きくてもよく、例えば、kの半分プラス4である。当然ながら、上述したのがいくつかの例に過ぎず、s1の値に対して限定しない。s2は区間[k+1,t]の参照重み値の重み変換の開始位置で、s2はq(即ち、tとk+1の差)の半分であってもよく、又は、s2はqの半分よりわずか小さくてもよく、例えば、qの半分マイナス4であり、又は、s2はqの半分よりわずか大きくてもよく、例えば、qの半分プラス4である。当然ながら、上述したのがいくつかの例に過ぎず、s2の値に対して限定しない。
上記で分かるように、カレントブロックの参照重み値リストを得ることができ、且つ当該参照重み値リストは複数の参照重み値を含んでもよく、当該参照重み値リスト中の複数の参照重み値は単調増加してから単調減少してもよく、又は、複数の参照重み値は単調減少してから単調増加してもよい。可能な一実施形態では、参照重み値リストについては、当該参照重み値リストが第1目標領域の参照重み値、第2目標領域の参照重み値、第1目標領域だけに隣接する第1隣接領域の参照重み値、第1目標領域と第2目標領域のどちらにも隣接する第2隣接領域の参照重み値、及び第2目標領域だけに隣接する第3隣接領域の参照重み値をさらに含んでもよい。
第1目標領域は第1重み変換の開始位置に基づいて決定される1つ又は複数の参照重み値を含む。例えば、第1重み変換の開始位置に基づいて、1つの参照重み値を決定し、当該参照重み値を第1目標領域とする。又は、第1重み変換の開始位置に基づいて、複数の参照重み値を決定し、当該複数の参照重み値を第1目標領域とする。もし第1目標領域が複数の参照重み値を含めば、第1目標領域の複数の参照重み値は単調増加又は単調減少する。前記単調増加は第1目標領域の複数の参照重み値が単調増加することであってもよく、前記単調減少は第1目標領域の複数の参照重み値が単調減少することであってもよい。
第2目標領域は第2重み変換の開始位置に基づいて決定される1つ又は複数の参照重み値を含む。例えば、第2重み変換の開始位置に基づいて、1つの参照重み値を決定し、当該参照重み値を第2目標領域とする。又は、第2重み変換の開始位置に基づいて、複数の参照重み値を決定し、当該複数の参照重み値を第2目標領域とする。もし第2目標領域が複数の参照重み値を含めば、第2目標領域の複数の参照重み値は単調増加又は単調減少する。前記単調増加は厳密な単調増加(第2目標領域の複数の参照重み値が厳密に単調増加すること)であってもよく、前記単調減少は厳密な単調減少(第2目標領域の複数の参照重み値が厳密に単調減少すること)であってもよい。
もし第1目標領域の複数の参照重み値が単調増加(例えば、厳密に単調増加)すれば、第2目標領域の複数の参照重み値は単調減少(例えば、厳密に単調減少)する。又は、もし第1目標領域の複数の参照重み値が単調減少(例えば、厳密に単調減少)すれば、第2目標領域の複数の参照重み値は単調増加(例えば、厳密に単調増加)する。
例示的に、第1隣接領域の参照重み値がいずれも第1参照重み値であり、第2隣接領域の参照重み値がいずれも第2参照重み値であり、第3隣接領域の参照重み値がいずれも第3参照重み値である。第1参照重み値と第3参照重み値は同じでもよく、第1参照重み値と第2参照重み値は異なってもよく、第3参照重み値と第2参照重み値は異なってもよい。例えば、第1隣接領域の参照重み値がいずれも0であり、第2隣接領域の参照重み値がいずれも8であり、第3隣接領域の参照重み値がいずれも0であり、又は、第1隣接領域の参照重み値がいずれも8であり、第2隣接領域の参照重み値がいずれも0であり、第3隣接領域の参照重み値がいずれも8である。
又は、第1隣接領域の参照重み値がいずれも第1参照重み値であり、第2隣接領域の参照重み値は単調減少し、第3隣接領域の参照重み値は単調増加する。例えば、第1隣接領域の参照重み値がいずれも8であり、第1目標領域は参照重み値7を含み、第2隣接領域の参照重み値は6から0まで単調減少し、第2目標領域は参照重み値1を含み、第3隣接領域の参照重み値は2から8まで単調増加する。
又は、第1隣接領域の参照重み値は単調減少し、第2隣接領域の参照重み値は単調減少してから単調増加し、第3隣接領域の参照重み値は単調増加する。例えば、第1隣接領域の参照重み値は8から5まで単調減少し、第1目標領域は参照重み値4を含み、第2隣接領域の参照重み値は3から0まで単調減少してから0から3まで単調増加し、第2目標領域は参照重み値4を含み、第3隣接領域の参照重み値は5から8まで単調増加する。
又は、第1隣接領域の参照重み値は単調減少し、第2隣接領域の参照重み値は単調増加し、第3隣接領域の参照重み値がいずれも第3参照重み値である。例えば、第1隣接領域の参照重み値は8から1まで単調減少し、第1目標領域は参照重み値0を含み、第2隣接領域の参照重み値は0から7まで単調増加し、第2目標領域は参照重み値8を含み、第3隣接領域の参照重み値がいずれも8である。
又は、第1隣接領域の参照重み値がいずれも第1参照重み値であり、第2隣接領域の参照重み値は単調増加し、第3隣接領域の参照重み値は単調減少する。例えば、第1隣接領域の参照重み値がいずれも0であり、第1目標領域は参照重み値1を含み、第2隣接領域の参照重み値は2から8まで単調増加し、第2目標領域は参照重み値7を含み、第3隣接領域の参照重み値は6から0まで単調減少する。
又は、第1隣接領域の参照重み値は単調増加し、第2隣接領域の参照重み値は単調増加してから単調減少し、第3隣接領域の参照重み値は単調減少する。例えば、第1隣接領域の参照重み値は0から3まで単調増加し、第1目標領域は参照重み値4を含み、第2隣接領域の参照重み値は5から8まで単調増加してから8から5まで単調減少し、第2目標領域は参照重み値4を含み、第3隣接領域の参照重み値は3から0まで単調減少する。
又は、第1隣接領域の参照重み値は単調増加し、第2隣接領域の参照重み値は単調減少し、第3隣接領域の参照重み値がいずれも第3参照重み値である。例えば、第1隣接領域の参照重み値は0から7まで単調増加し、第1目標領域は参照重み値8を含み、第2隣接領域の参照重み値は8から1まで単調減少し、第2目標領域は参照重み値0を含み、第3隣接領域の参照重み値がいずれも0である。
当然ながら、上述したのがいくつかの例に過ぎず、これに関しては限定せず、参照重み値リスト中の複数の参照重み値が、0から8まで増加してから、8から0まで減少し、又は、8から0まで減少してから、0から8まで増加するという要件を満たしさえすればよい。
場合3:参照重み値リスト中の複数の参照重み値については、先に複数の第1参照重み値を含み、次に複数の第2参照重み値を含んでもよいし、又は、先に複数の第2参照重み値を含み、次に複数の第1参照重み値を含んでもよい。例えば、参照重み値リストは、[8 8…8 8 0 0…0 0]であってもよく、もう一例として、参照重み値リストは、[0 0…0 0 8 8…8 8]であってもよい。
例示的に、参照重み値リスト中の参照重み値は、予め設定されてもよいし、又は、重み設定パラメータに基づいて設定されてもよい。重み設定パラメータは重み変換の開始位置を含んでもよく、重み変換の開始位置は経験によって設定される値であってもよい。
参照重み値リスト中の参照重み値を予め設定するプロセスについては、参照重み値リスト中の複数の参照重み値を任意に設定してもよく、複数の参照重み値は第1参照重み値及び第2参照重み値だけを含みさえすればよい。
重み設定パラメータに基づいて参照重み値リスト中の参照重み値を設定するプロセスについては、最初に重み変換の開始位置を取得し、次に、重み変換の開始位置に基づいて参照重み値リスト中の複数の参照重み値を決定してもよい。例えば、重み変換の開始位置が参照重み値リスト中のs番目の参照重み値を表すと、s番目の参照重み値まで(s番目の参照重み値を含まない)の全ての参照重み値が第1参照重み値(例えば、8)であり、s番目の参照重み値以降(s番目の参照重み値を含む)の全ての参照重み値は第2参照重み値(例えば、0)である。又は、s番目の参照重み値まで(s番目の参照重み値を含まない)の全ての参照重み値が第2参照重み値(例えば、0)であり、s番目の参照重み値以降(s番目の参照重み値を含む)の全ての参照重み値は第1参照重み値(例えば、8)である。
上記のいくつかの場合では、いずれもカレントブロックの参照重み値リストを得ることができ、説明の便宜上、後続の実施例では、場合1の参照重み値リストを例として説明し、それ以外の場合の参照重み値リストの実現プロセスが類似する。
ステップS2で、カレントブロックのサイズ及びカレントブロックの重み付け予測角度に基づいて有効数を決定する。
例示的に、当該有効数はカレントブロックの外部に有効数の周辺位置が存在することを指し、例えば、カレントブロックの内部の画素位置は前記有効数の周辺位置しか指さず、つまり、前記有効数の周辺位置に参照重み値を設定するだけで、カレントブロックの内部の各画素位置の目標重み値を得ることができる。
例示的に、カレントブロックの外部の周辺位置の数はカレントブロックのサイズ及び/又はカレントブロックの重み付け予測角度に基づいて決定され、本実施例では、カレントブロックの外部の周辺位置の数を有効数ValidLengthと記す。
例えば、式:ValidLength=(N+(M>>X))<<1、又は、ValidLength=(M+(N>>X))<<1によって有効数を決定してもよい。上記の式で、ValidLengthは有効数であり、Mはカレントブロックの幅であり、Nはカレントブロックの高さであり、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乗で割ると理解することができる。
ステップS3で、カレントブロックのサイズ、カレントブロックの重み付け予測角度及びカレントブロックの重み付け予測位置に基づいて目標インデックスを決定する。
例示的に、当該目標インデックスは参照重み値リスト中の何番目の参照重み値なのかを指すものであってもよく、例えば、目標インデックスが259であるとき、参照重み値リスト中の259番目の参照重み値を表すことができる。
例えば、式:FirstIndex=(HalfLength-4)-((ValidLength>>1)-a+Y*((ValidLength-1)>>3))、又は、FirstIndex=(HalfLength-4)-((ValidLength>>1)-b+Y*((ValidLength-1)>>3)-((M<<1)>>X))、又は、FirstIndex=(HalfLength-4)-((ValidLength>>1)-c+Y*((ValidLength-1)>>3)-((N<<1)>>X))、又は、FirstIndex=(HalfLength-4)-((ValidLength>>1)-d+Y*((ValidLength-1)>>3))によって目標インデックスを決定してもよい。上記の式で、FirstIndexは目標インデックスであり、ValidLengthは有効数であり、カレントブロックのサイズ及びカレントブロックの重み付け予測角度に基づいて決定され、Yはカレントブロックの重み付け予測位置であり、HalfLength-4の値は重み変換の開始位置であり、Mはカレントブロックの幅であり、Nはカレントブロックの高さであり、Xはカレントブロックの重み付け予測角度の勾配の絶対値のlog2対数であり、a、b、c、dはプリセットした定数である。
前記プロセスでは、ValidLengthがカレントブロックの重み付け予測角度及びカレントブロックのサイズに関連しており、解決手段の簡素化のために、いくつかのパラメータを固定することによって最適化の目的を果たしてもよく、例えば、カレントブロックの重み付け予測角度を固定のパラメータ値として設定してもよく、ValidLengthはカレントブロックのサイズだけに関連する。他の実施例では、ValidLengthの決定方式も類似している。
前記プロセスでは、FirstIndexがカレントブロックの重み付け予測角度、カレントブロックのサイズ、カレントブロックの重み付け予測位置に関連しており、解決手段の簡素化のために、いくつかのパラメータを固定することによって最適化の目的を果たしてもよく、例えば、カレントブロックの重み付け予測角度を固定のパラメータ値として設定してもよく、FirstIndexはカレントブロックのサイズとカレントブロックの重み付け予測位置だけに関連する。又は、カレントブロックの重み付け予測位置を固定のパラメータ値として設定してもよく、FirstIndexはカレントブロックのサイズ及びカレントブロックの重み付け予測角度だけに関連する。又は、カレントブロックの重み付け予測角度及びカレントブロックの重み付け予測位置をいずれも固定のパラメータ値として設定してもよく、当該2つの固定のパラメータ値は異なるカレントブロックの間で同じ又は異なってもよく、FirstIndexはカレントブロックのサイズだけに関連する。他の実施例では、FirstIndex(又はFirstPos)の決定方式も類似しており、本明細書で説明を省略する。
ステップS4で、目標インデックスに基づいて当該参照重み値リストの中から有効数の参照重み値を選択する。
例示的に、目標インデックスがq1で、有効数がrであるとし、もし目標インデックスが参照重み値リスト中の選択されるべき最初の参照重み値となれば、参照重み値リストの中からq1番目からq2番目の参照重み値を選択し、q2とq1の間のインデックスの差がr-1であるため、参照重み値リストの中からr個の参照重み値を選択する。又は、もし目標インデックスが参照重み値リスト中の選択されるべき最後の参照重み値となれば、参照重み値リストの中からq3番目からq1番目の参照重み値を選択し、q1とq3の間のインデックスの差がr-1であるため、参照重み値リストの中からr個の参照重み値を選択する。
当然ながら、前記方式は単なる例に過ぎず、目標インデックスは参照重み値リスト中の選択されるべき中間位置の参照重み値となってもよく、実現形態が類似しているため、ここでは説明を省略する。以下、目標インデックスが参照重み値リスト中の選択されるべき最初の参照重み値となるのを例として説明し、即ちq1番目からq2番目の参照重み値を選択する。
ステップS5で、有効数の参照重み値に基づいて、カレントブロックの外部の周辺位置の参照重み値を設定する。
例示的に、カレントブロックの外部の周辺位置の数は有効数であり、且つ参照重み値リストの中から有効数の参照重み値を選択し、したがって、周辺位置の数が選択の参照重み値の数と同じであり、参照重み値リスト中の有効数の参照重み値を、カレントブロックの外部の周辺位置の参照重み値として設定してもよい。
例えば、有効数の参照重み値の最初の参照重み値に対して、当該参照重み値をカレントブロックの外部の最初の周辺位置の参照重み値として設定し、有効数の参照重み値の2番目の参照重み値に対して、当該参照重み値をカレントブロックの外部の2番目の周辺位置の参照重み値として設定し、このように繰り返す。
可能な一実施形態では、参照重み値リストの中からr個の参照重み値を選択するとすると、参照重み値リストの中から前記r個の参照重み値を抽出し、前記r個の参照重み値をカレントブロックの外部のr個の周辺位置の参照重み値として設定する。又は、参照重み値リストの中からr個の参照重み値を選択するとすると、参照重み値リストの中から前記r個の参照重み値を抽出する必要はなく、参照重み値リスト中の参照重み値をシフトすることによって、前記r個の参照重み値をカレントブロックの外部のr個の周辺位置の参照重み値とする。
実施例7:前記実施例1~実施例3では、各画素位置に対して、当該画素位置の指す周辺マッチング位置に関連する参照重み値に基づいて、当該画素位置の目標重み値を決定してもよい。以下、カレントブロックの周辺マッチング位置を例として説明する。次の方式を採用して周辺マッチング位置に関連する参照重み値を取得してもよい。直接カレントブロックの外部の各周辺位置に参照重み値を設定し、例えば、有効数の参照重み値を取得し(参照重み値リストの中から選択するのではない)、有効数の参照重み値に基づいてカレントブロックの外部の周辺位置の参照重み値を設定する。
例示的に、カレントブロックの外部の周辺位置に設定される参照重み値については、予め設定され又は重み設定パラメータに基づいて設定されてもよいし、当該重み構成パラメータは重み変換率及び重み変換の開始位置を含んでもよい。各カレントブロックの重み変換の開始位置については、当該重み変換の開始位置がカレントブロックの重み付け予測角度、カレントブロックの重み付け予測位置、カレントブロックのサイズの少なくとも1つのパラメータによって決定される。カレントブロックが1つのサブブロックを含むとき、カレントブロックの外部の周辺位置の数(即ち、有効数)はカレントブロックのサイズ及びカレントブロックの重み付け予測角度に基づいて決定される。
上記で分かるように、カレントブロックの外部の周辺位置に参照重み値が設定されており、つまり各周辺位置がいずれも参照重み値を有しているため、カレントブロックの外部の周辺位置から画素位置の指す周辺マッチング位置を決定した後、当該周辺マッチング位置に関連する参照重み値、即ち当該画素位置の目標重み値を決定することができる。
以下、前記周辺位置の参照重み値に対する設定の実現の具体的なプロセスを参照して説明する。
最初に有効数の参照重み値を取得する。次に有効数の参照重み値に基づいて、カレントブロックの外部の周辺位置の参照重み値を設定し、カレントブロックの外部の周辺位置の参照重み値は単調増加又は単調減少してもよい。
なお、前の実施例でも有効数の参照重み値を取得するが、前の実施例の有効数は本実施例の有効数と同じでもよいし異なってもよい。区別するために、前の実施例の有効数を第1有効数と考え、本実施例の有効数を第2有効数と考えてもよい。
例示的に、カレントブロックの外部の周辺位置の数は有効数であり、有効数の参照重み値を取得する必要がある。例えば、次の式を採用して有効数を決定する。ValidLength=(N+(M>>X))<<1であって、NとMはそれぞれカレントブロックの高さと幅であり、Xはカレントブロックの重み付け予測角度の勾配の絶対値のlog2対数で、例えば、0又は1である。
可能な一実施形態では、有効数の参照重み値については、単調増加又は単調減少してもよい。又は、有効数の参照重み値については、単調増加してから単調減少してもよく、若しくは、単調減少してから単調増加してもよい。又は、有効数の参照重み値については、先に複数の第1参照重み値を含み、次に複数の第2参照重み値を含んでもよいし、又は、先に複数の第2参照重み値を含み、次に複数の第1参照重み値を含んでもよい。以下、いくつかの具体的な状況を参照して、これを説明する。
場合1:有効数の参照重み値については、単調増加又は単調減少してもよい。
例示的に、参照重み値は、予め設定されてもよいし、又は、重み設定パラメータに基づいて設定されてもよい。重み設定パラメータは重み変換率及び重み変換の開始位置を含んでもよく、重み変換率は経験によって設定される値であってもよい。重み変換の開始位置は経験によって設定される値であってもよいし、重み付け予測位置によって重み変換の開始位置を決定してもよいし、重み付け予測角度及び重み付け予測位置によって重み変換の開始位置を決定してもよい。
例示的に、複数の参照重み値を予め設定するプロセスについては、複数の参照重み値を任意に設定してもよく、複数の参照重み値は単調増加又は単調減少しさえすればよい。又は、重み設定パラメータに基づいて複数の参照重み値を設定するプロセスについては、最初に重み変換率及び重み変換の開始位置を取得し、次に、重み変換率及び重み変換の開始位置に基づいて、複数の参照重み値を決定してもよい。重み変換の開始位置はカレントブロックの重み付け予測位置によって決定され、又は、重み変換の開始位置はカレントブロックの重み付け予測角度及び重み付け予測位置によって決定される。
例えば、次の方式を採用して参照重み値を決定してもよい。y(x)=Clip3(最小値,最大値,a*(x-s))であって、xは周辺位置のインデックスを表し、即ちxの値の範囲は1から有効値であり、例えば、xが1であるのは、最初の周辺位置を表し、y(x)はx番目の周辺位置の参照重み値を表す。aは重み変換率を表し、sは重み変換の開始位置を表す。
Clip3関数は参照重み値が最小値と最大値の間にあるように限定するために用いられ、最小値と最大値はいずれも経験によって設定してもよく、説明の便宜上、後続のプロセスで、最小値が0で、最大値が8であるのを例として説明する。
aは重み変換率を表し、経験によって設定してもよく、例えば、aは0以外の整数であってもよく、例えば、aは、-4、-3、-2、-1、1、2、3、4などであってもよく、説明の便宜上、aが1であるのを例として説明する。もしaが1であれば、参照重み値は0から8までは0,1,2,3,4,5,6,7,8を経過する必要があり、又は、参照重み値は8から0までは8,7,6,5,4,3,2,1,0を経過する必要がある。例示的に、aが正の整数であるとき、aは周辺位置の数と正の相関を持ってもよく、即ちカレントブロックの外部の周辺位置が多いほど、aの値は大きい。aが負の整数であるとき、aは周辺位置の数と負の相関を持ってもよく、即ちカレントブロックの外部の周辺位置が多いほど、aの値は小さい。当然ながら、上述したのがaの値の例に過ぎず、これに関しては限定しない。
sは重み変換の開始位置を表し、sは重み付け予測位置によって決定されてもよく、例えば、s=f(重み付け予測位置)であり、即ちsは重み付け予測位置に関係する関数である。例えば、カレントブロックの外部の周辺位置の範囲を決定した後、周辺位置の有効数を決定し、全ての周辺位置をN等分してもよく、Nの値は、例えば、4、6、8などと任意に設定することができ、重み付け予測位置はカレントブロックの外部のどの周辺位置をカレントブロックの目標周辺領域とするかを表すために用いられ、当該重み付け予測位置に対応する周辺位置は即ち重み変換の開始位置である。又は、sは重み付け予測角度及び重み付け予測位置によって決定されてもよく、例えば、s=f(重み付け予測角度,重み付け予測位置)であり、即ちsは重み付け予測角度及び重み付け予測位置に関係する関数である。例えば、重み付け予測角度に基づいてカレントブロックの外部の周辺位置の範囲を決定してもよく、カレントブロックの外部の周辺位置の範囲を決定した後、周辺位置の有効数を決定し、全ての周辺位置をN等分してもよく、重み付け予測位置はカレントブロックの外部のどの周辺位置をカレントブロックの目標周辺領域とするかを表すために用いられ、当該重み付け予測位置に対応する周辺位置は即ち重み変換の開始位置である。
上記で分かるように、y(x)=Clip3(最小値,最大値,a*(x-s))で、重み変換率aと重み変換の開始位置sはいずれも既知の値であり、カレントブロックの外部の各周辺位置に対して、当該関数関係によって当該周辺位置の参照重み値を決定することができる。例えば、重み変換率aが2で、重み変換の開始位置sが2であるとすると、当該関数関係はy(x)=Clip3(最小値,最大値,2*(x-2))となり、カレントブロックの外部の各周辺位置xに対して、参照重み値yを得ることができる。
上記で分かるように、カレントブロックの有効数の参照重み値を得ることができ、それらの参照重み値は単調増加又は単調減少してもよい。可能な一実施形態では、カレントブロックの外部の周辺位置の参照重み値は目標領域の参照重み値、目標領域の第1隣接領域の参照重み値、目標領域の第2隣接領域の参照重み値を含む。
目標領域、目標領域の参照重み値、第1隣接領域の参照重み値、第2隣接領域の参照重み値などに関しては前の実施例の場合1の説明を参照することができ、ここでは説明を省略する。
場合2:有効数の参照重み値については、単調増加してから単調減少してもよいし、又は、単調減少してから単調増加してもよい。
例示的に、有効数の参照重み値は、予め設定されてもよいし、又は、重み設定パラメータに基づいて設定されてもよい。重み設定パラメータは重み変換率及び重み変換の開始位置を含んでもよく、重み変換率は経験によって設定される値であってもよい。重み変換の開始位置は経験によって設定される値であってもよいし、重み付け予測位置によって重み変換の開始位置を決定してもよいし、重み付け予測角度及び重み付け予測位置によって重み変換の開始位置を決定してもよい。
例示的に、複数の参照重み値を予め設定するプロセスについては、複数の参照重み値を任意に設定してもよく、複数の参照重み値は単調増加してから単調減少し、又は、複数の参照重み値は単調減少してから単調増加しさえすればよい。重み設定パラメータに基づいて複数の参照重み値を設定するプロセスについては、第1重み変換率、第2重み変換率、第1重み変換の開始位置、第2重み変換の開始位置を取得し、第1重み変換率、第2重み変換率、第1重み変換の開始位置、第2重み変換の開始位置に基づいて、複数の参照重み値を決定してもよい。
例えば、次の方式を採用して複数の参照重み値を決定してもよい。xが[0,k]にあるとき、y(x)=Clip3(最小値,最大値,a1*(x-s1))である。xが[k+1,t]にあるとき、y(x)=Clip3(最小値,最大値,a2*(x-s2))である。xは周辺位置の位置インデックスを表し、例えば、xが1であるのは、最初の周辺位置を表し、y(x)はx番目の周辺位置の参照重み値を表す。kは経験によって設定される値であり、これに関しては限定せず、例えば、有効数の半分、又は他の値であってもよく、kがtより小さくさえすればよく、tは周辺位置の総数、即ち前記有効数である。a1は第1重み変換率を表し、a2は第2重み変換率を表す。s1は第1重み変換の開始位置を表し、s2は第2重み変換の開始位置を表す。
Clip3は参照重み値が最小値と最大値の間にあるように限定するために用いられ、最小値と最大値はいずれも経験によって設定してもよく、説明の便宜上、後続のプロセスで、最小値が0で、最大値が8であるのを例として説明する。
a1とa2はいずれも重み変換率を表し、経験によって設定してもよく、例えば、a1は0以外の整数であってもよく、例えば、-4、-3、-2、-1、1、2、3、4などであり、a2は0以外の整数であってもよく、例えば、-4、-3、-2、-1、1、2、3、4などである。
s1とs2はいずれも重み変換の開始位置を表し、経験によって設定してもよく、s1は区間[0,k]の参照重み値の重み変換の開始位置であり、s2は区間[k+1,t]の参照重み値の重み変換の開始位置である。
s1は重み付け予測位置によって決定されてもよく、例えば、s1=f(重み付け予測位置)であり、即ちs1は重み付け予測位置に関係する関数である。例えば、カレントブロックの外部の周辺位置の範囲を決定した後、全ての周辺位置の中から範囲[0,k]を決定し、範囲[0,k]の全ての周辺位置をN等分し、Nの値を任意に設定することができ、重み付け予測位置は範囲[0,k]中のどの周辺位置をカレントブロックの目標周辺領域とするかを表すために用いられ、当該重み付け予測位置に対応する周辺位置は即ち重み変換の開始位置s1である。又は、s1は重み付け予測角度及び重み付け予測位置によって決定されてもよく、例えば、s1=f(重み付け予測角度,重み付け予測位置)であり、即ちs1は重み付け予測角度及び重み付け予測位置に関係する関数である。例えば、重み付け予測角度に基づいてカレントブロックの外部の周辺位置の範囲を決定してもよく、全ての周辺位置の中から範囲[0,k]を決定し、範囲[0,k]の全ての周辺位置をN等分し、重み付け予測位置は範囲[0,k]中のどの周辺位置をカレントブロックの目標周辺領域とするかを表すために用いられ、これによって重み変換の開始位置s1を得る。
s2は重み付け予測位置によって決定されてもよいし、又は重み付け予測角度及び重み付け予測位置によって決定されてもよく、s2を決定するプロセスはs1を決定するプロセスを参照し、範囲だけが変わり、すなわち範囲が[k+1,t]であり、ここでは説明を省略する。
当然ながら、上述したのが重み変換の開始位置s1及びs2の決定の例に過ぎず、これに関しては限定しない。
上記で分かるように、複数の参照重み値を得ることができ、複数の参照重み値は単調増加してから単調減少してもよく、又は、複数の参照重み値は単調減少してから単調増加してもよい。可能な一実施形態では、カレントブロックの外部の複数の周辺位置の参照重み値は第1目標領域の参照重み値、第2目標領域の参照重み値、第1目標領域だけに隣接する第1隣接領域の参照重み値、第1目標領域と第2目標領域のどちらにも隣接する第2隣接領域の参照重み値、第2目標領域だけに隣接する第3隣接領域の参照重み値をさらに含んでもよい。
第1目標領域、第2目標領域、第1目標領域の参照重み値、第2目標領域の参照重み値、第1隣接領域の参照重み値、第2隣接領域の参照重み値、第3隣接領域の参照重み値などに関しては前の実施例の場合2の説明を参照することができ、ここでは説明を省略する。
場合3:有効数の参照重み値については、先に複数の第1参照重み値を含み、次に複数の第2参照重み値を含んでもよし、又は、先に複数の第2参照重み値を含み、次に複数の第1参照重み値を含んでもよい。有効数の参照重み値については、予め設定されてもよいし、又は、重み設定パラメータに基づいて設定されてもよく、重み設定パラメータは重み変換の開始位置を含んでもよい。重み設定パラメータに基づいて参照重み値を設定するプロセスについては、重み変換の開始位置を取得し、重み変換の開始位置に基づいて複数の参照重み値を決定してもよい。
上記のいくつかの場合では、いずれも有効数の参照重み値を得ることができ、説明の便宜上、後続の実施例では、場合1の参照重み値を例として説明し、それ以外の場合の参照重み値の実現プロセスも類似する。
有効数の参照重み値を得た後、有効数の参照重み値に基づいて、カレントブロックの外部の周辺位置の参照重み値を設定し、カレントブロックの外部の周辺位置の参照重み値は単調増加又は単調減少してもよい。
例示的に、カレントブロックの外部の周辺位置の数は有効数であり、且つ参照重み値の数は有効数であり、したがって、有効数の参照重み値を、カレントブロックの外部の周辺位置の参照重み値として設定してもよい。
例えば、最初の参照重み値をカレントブロックの外部の最初の周辺位置の参照重み値として設定し、2番目の参照重み値をカレントブロックの外部の2番目の周辺位置の参照重み値として設定し、このように繰り返す。
実施例8:前記実施例1~実施例7では、カレントブロックは1つのサブブロックを含んでもよく、つまり、サブブロックがカレントブロック自体であり、カレントブロックについて、MとNをカレントブロック(即ち、カレント予測ユニット)の幅と高さと記し、この場合に、例えば、図6Bに示されるとおり、角度重み付け予測(AWP)モードの重み配列の導出方式は、ステップa1~a4を含んでもよい。
ステップa1で、AwpIdxに基づいてstepIdx、angleIdx、subAngleIdxなどのパラメータを取得する。
AwpIdxは重み付け予測位置及び重み付け予測角度のインデックス値を表し、7通りの重み付け予測位置、8通りの重み付け予測角度が存在するとすると、AwpIdxの値の範囲は0~55である。もし重み付け予測位置が-3から3で(4番目の重み付け予測位置が中心であり、4番目の重み付け予測位置は0であることを表す)、重み付け予測角度のインデックスが0~7であれば、AwpIdxの56個のインデックス値に対応する重み付け予測位置及び重み付け予測角度は、表2に示されるとおりであってもよい。
stepIdxは重み付け予測位置を表し、重み付け予測位置の範囲は-3から3である。例えば、最初の重み付け予測位置について、重み付け予測位置は-3であり、2番目の重み付け予測位置について、重み付け予測位置は-2であり、このようにして、7番目の重み付け予測位置について、重み付け予測位置は3である。
angleIdxは重み付け予測角度の勾配の絶対値のlog2対数(例えば、0、又は1、又は大きな定数)を表し、subAngleIdxは重み付け予測角度の位置する角度エリアを表す。図5Bには、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(角度番号)を式modAngNum=AwpIdx%8に基づいて決定してもよく、次にmodAngNumに基づいて、次の方式を採用してangleIdxを決定してもよい。もしmodAngNumが2に等しければ、angleIdx=7であり、もしmodAngNumが6に等しければ、angleIdx=8であり、そうでなければ、angleIdx=modAngNum%2である。
例示的に、subAngleIdxを式subAngleIdx=modAngNum>>1を採用して決定してもよい。
上記で分かるように、符号化側は、カレントブロックの重み付け予測角度及びカレントブロックの重み付け予測位置を決定した後、当該重み付け予測角度及び当該重み付け予測位置に基づいてAwpIdxの値を決定してもよく、表2を参照する。符号化側が復号側に符号化ビットストリームを送信するとき、当該符号化ビットストリームにAwpIdxの値を付加してもよく、これにより、復号側はAwpIdxの値を得、AwpIdxに基づいてstepIdx、angleIdx及びsubAngleIdxを取得することができる。
例示的に、angleIdxとsubAngleIdxは1つの重み付け予測角度を一意に決定することができ、表3を参照する。当然ながら、他の方式を採用して重み付け予測角度を決定してもよく、例えば、エリア番号の変更などである。
ステップa2で、stepIdx、angleIdx及びsubAngleIdxに基づいて参照重みリストReferenceWeight[x]を構成し、参照重みリストReferenceWeight[x]を構成するのはカレントブロックの外部の周辺位置に参照重み値を設定することでもある。subAngleIdxに基づいて、ReferenceWeight[x]を計算するのは次のいくつかの場合がある。
場合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は位置変更パラメータ(即ち一つの中間パラメータ)を表し、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,x-FirstPos)を採用してカレントブロックの外部の周辺位置の参照重み値を決定してもよく、当該式については、参照重み値の最小値が0であり、参照重み値の最大値が8であり、重み変換率が1であるのを例として説明する。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,x-FirstPos)を採用してカレントブロックの外部の周辺位置の参照重み値を決定してもよく、当該式については、参照重み値の最小値が0であり、参照重み値の最大値が8であり、重み変換率が1であるのを例として説明する。xはカレントブロックの外部の周辺位置のインデックスであってもよく、xの値の範囲は0からValidLength_W-1である。
上記の式で、ValidLength_Wはカレントブロックの外部の周辺位置の数(即ち有効数であり、有効長さとも呼ばれる)を表し、subAngleIdxが2であるとき、重み付け予測角度の指すカレントブロックの外部の周辺位置は、上側1行の周辺位置であってもよく、したがって、有効数をValidLength_Wと記す。例示的に、式:ValidLength_W=(M+(N>>angleIdx))<<1を採用して有効数ValidLength_Wを決定することができる。
上記の式で、DeltaPos_Wは位置変更パラメータ(即ち一つの中間パラメータ)を表し、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,x-FirstPos)を採用してカレントブロックの外部の周辺位置の参照重み値を決定してもよく、当該式については、参照重み値の最小値が0であり、参照重み値の最大値が8であり、重み変換率が1であるのを例として説明する。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]の開始位置が変わっていることである。例えば、図6Cには、角度エリア2及び角度エリア3の例が示され、1/2-pel精度であるとき、参照重みリストReferenceWeights[x]の開始位置は(高さ<<1)>>angleIdxであり、即ち式中のオフセット「-((N<<1)>>angleIdx)」である。角度エリア0と角度エリア1の実現が類似しており、ただし式中のオフセットは「-((M<<1)>>angleIdx)」であり、つまり高さを幅に変えればよい。
ステップa3で、angleIdx及び参照重みリストReferenceWeight[x]に基づいて画素位置の輝度重み値を取得する。subAngleIdxに基づいて、画素位置の輝度重み値を決定するのは次のいくつかの場合がある。
場合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である。
前記ステップa2とステップa3を1つのステップに結合させることができ、即ちステップa2(stepIdx、angleIdx及びsubAngleIdxに基づいて参照重みリストReferenceWeight[x]を構成し、参照重みリストReferenceWeight[x]を構成するのは、即ちカレントブロックの外部の周辺位置に参照重み値を設定する)、及びステップ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で、各場合に係る式の違いは、図6Dに示され、角度エリア2と角度エリア3の例が示される。カレントブロックの左上コーナーを座標原点とするとき、(x,y)の周辺マッチング位置が角度エリア2にあるときの計算式は、x-y>>angleIdxであってもよく、(x,y)の周辺マッチング位置が角度エリア3にあるときの計算式は、x+y>>angleIdxであってもよい。1/2-pel精度であるとき、(x,y)の周辺マッチング位置が角度エリア2にあるときの計算式は、(x<<1)-((y<<1)>>angleIdx)であってもよく、(x,y)の周辺マッチング位置が角度エリア3にあるときの計算式は、(x<<1)+((y<<1)>>angleIdx)であってもよい。角度エリア0と角度エリア1の実現が類似しており、xとyの位置を入れ替えればよい。
実施例9:前記実施例1~実施例3では、第1予測モードに基づいて画素位置の第1予測値を決定し、第2予測モードに基づいて画素位置の第2予測値を決定する必要がある。
本実施例では、第1予測モードがフレーム間予測モードであり、第2予測モードがフレーム間予測モードであるのを例として説明する。
第1予測モードはフレーム間予測モードであり、第2予測モードはフレーム間予測モードであり、動き情報候補リストを構築し、動き情報候補リストは少なくとも2つの動き情報候補を含む。動き情報候補リストの中からカレントブロックの第1目標動き情報として1つの動き情報候補を選択し、動き情報候補リストの中からカレントブロックの第2目標動き情報として別の動き情報候補を選択する。カレントブロックの各画素位置に対して、第1目標動き情報に基づいて当該画素位置の第1予測値を決定し、第2目標動き情報に基づいて当該画素位置の第2予測値を決定する。
例示的に、符号化側及び復号側については、いずれも動き情報候補リストを構築することができ、且つ符号化側の動き情報候補リストと復号側の動き情報候補リストが同じであり、当該動き情報候補リストに対して限定しない。
例示的に、動き情報候補リスト中の動き情報候補はいずれも単一の仮説動き情報であり、例えば、動き情報候補リスト中の動き情報候補は、単方向動き情報であり、双方向動き情報ではない。動き情報候補がいずれも単一の仮説動き情報であるため、動き情報候補リストは、単方向動き情報候補リストであってもよい。
例示的に、動き情報候補リストを構築するとき、最初に空間動き情報(例えば、空間動きベクトル)を入れ、次いで時間動き情報(例えば、時間動きベクトル)を入れてもよい。且つ/又は、動き情報候補リストを構築するとき、最初に単方向動き情報(例えば、単方向動きベクトル)を入れ、次いで双方向動き情報(例えば、双方向動きベクトル)を入れてもよく、これに関しては限定しない。
例示的に、動き情報候補リストに双方向動き情報を入れるとき、最初に双方向動き情報を2つの単方向動き情報に分け、分けられた2つの単方向動き情報を順に動き情報候補リストに入れる。又は、動き情報候補リストに双方向動き情報を入れるとき、最初に双方向動き情報をトリミングして1つの単方向動き情報として、前記1つの単方向動き情報を動き情報候補リストに入れる。例示的に、双方向動き情報をトリミングして1つの単方向動き情報を得るのは、直接List0(参照フレームリスト0)中の単方向動き情報を取得し、又は、直接List1(参照フレームリスト1)中の単方向動き情報を取得し、又は、入れる順番に基づいてList0又はList1中の単方向動き情報を取得すると決定することを含む。
当然ながら、上述したのが動き情報候補リストの例に過ぎず、動き情報候補リスト中の動き情報に対して限定しない。
符号化側については、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予測値を得てもよく、具体的な実現形態は前記例を参照し、ここでは説明を省略する。
上記の場合では、第1予測モードの予測情報の指示情報と第2予測モードの予測情報の指示情報は交換することができ、符号化側と復号側が一致していればよく、これが指示情報の交換であり、解析プロセスに影響せず、つまり解析への依存はない。同一の予測モード候補リストである場合、第1予測モードの予測情報の指示情報と第2予測モードの予測情報の指示情報は等しくてはならず、2つのインデックス値を符号化し、インデックス値aの値が1で、インデックス値bの値が3であるとすると、最初にインデックス値aを符号化するとき、インデックス値bを2(3-1)と符号化してもよく、最初にインデックス値bを符号化するとき、インデックス値bを3と符号化する必要がある。上記で分かるように、最初にインデックス値の小さい指示情報を符号化すると、大きい方のインデックス値の符号化コストを低減することができ、予測モード候補リスト構築方式において、最初の予測モードは左側から来る確率が高く、この経験に基づいて符号化側及び復号側を調整し、最初に左側に隣接する領域の予測情報の指示情報を符号化してもよい。
上記の場合では、予測モード候補リストは、動き情報候補リストであってもよく、第1予測モードの予測情報は、第1目標動き情報であってもよく、第2予測モードの予測情報は、第2目標動き情報であってもよい。符号化ビットストリームでは、最初に第1目標動き情報の指示情報、例えば、インデックス値aを符号化し、次いで第2目標動き情報の指示情報、例えば、インデックス値bを符号化する。また、最初に第2目標動き情報の指示情報、例えば、インデックス値bを符号化し、次いで第1目標動き情報の指示情報、例えば、インデックス値aを符号化してもよい。例えば、インデックス値aの値が1で、インデックス値bの値が3であるとすると、最初にインデックス値aを符号化し、次いでインデックス値bを符号化する。もう一例として、インデックス値bの値が1で、インデックス値aの値が3であるとすると、最初にインデックス値bを符号化し、次いでインデックス値aを符号化する。
実施例10:実施例9については、動き情報候補リストを構築する必要があり、当該動き情報候補リストは、単方向動き情報候補リストであってもよい。図7に示されるのは、カレントブロック及び隣接ブロックの概略図であり、動き情報候補リストを構築するプロセスについては、F、G、C、A、B、Dの順番で、単方向動き情報をList0を優先する順番で順に動き情報候補リストに入れ、且つ入れるプロセスで重複チェック処理を行う必要がある。当然ながら、F、G、C、A、B、Dの順番が一例に過ぎず、他の順番を採用してもよく、これに関しては限定しない。
もし動き情報候補リストが満たなければ、引き続き残りの双方向動き情報を単方向動き情報に分け、List0を優先する順番で順に動き情報候補リストに入れ、且つ入れるプロセスで重複チェック処理を行う必要がある。
最後に、もし動き情報候補リストが満たなければ、引き続き時間的動き情報を単方向動き情報に分け、List0を優先する順番で順に動き情報候補リストに入れ、且つ入れるプロセスで重複チェック処理を行う必要がある。
List0を優先する方法は次のとおりである。もしList0の動き情報が存在すれば、List0の動き情報を動き情報候補リストに入れてもよく、且つ入れるプロセスで重複チェック処理を行う必要がある。もしList1の動き情報が存在すれば、List1の動き情報を動き情報候補リストに入れてもよく、且つ入れるプロセスで重複チェック処理を行う必要がある。
以下、いくつかの具体的な適用シナリオを参照して、動き情報候補リストを構築するプロセスを説明する。
適用シナリオ1:ステップ1で、図7に示されるとおり、F、G、C、A、B、DはカレントブロックEの隣接予測ブロックであり、F、G、C、A、B、Dの順番で(当該順番が変わってもよく、例えば、D、B、A、C、G、Fの順番とし、又は他の順番としてもよく、さらに、いくつかの隣接予測ブロックを削除してもよく、例えば、F、G、C、A、Dだけを採用するなど)、その動き情報(もしあれば)をList0を優先する順番で順に動き情報候補リストに入れ、且つ入れるプロセスで重複チェック処理を行う必要があり、全ての動き情報をチェックし終わるまで、又は動き情報候補リストの長さがX-1に達するまで続ける。
ステップ2で、動き情報候補リストの長さがXより小さいため、導出された時間動き情報のうち、List0を指す単方向動き情報(もしあれば)を動き情報候補リストに入れ、且つ入れるプロセスで重複チェック処理を行う必要がある。
ステップ3で、もし動き情報候補リストの長さがXより小さければ、導出された時間動き情報のうち、List1を指す単方向動き情報(もしあれば)を動き情報候補リストに入れ、且つ入れるプロセスで重複チェック処理を行う必要がある。
ステップ4で、もし動き情報候補リストの長さがXより小さければ、動き情報候補リスト中の最後の単方向動き情報を繰り返し充填してもよく、動き情報候補リストの長さがXになるまで続ける。
前記実施例では、Xは任意の正の整数をとることができ、例えば、Xの値は4、5などであってもよい。
適用シナリオ2:ステップ1で、F、G、C、A、B、DはカレントブロックEの隣接予測ブロックであり、F、G、C、A、B、Dの順番で、その動き情報(もしあれば)をList0を優先する順番で順に動き情報候補リストに入れ、且つ入れるプロセスで重複チェック処理を行う必要があり、全ての動き情報をチェックし終わるまで、又は動き情報候補リストの長さがXに達するまで続ける。
ステップ2で、もし動き情報候補リストの長さがXより小さければ、導出された時間動き情報のうち、List0を指す単方向動き情報(もしあれば)を動き情報候補リストに入れてもよく、且つ入れるプロセスで重複チェック処理を行う必要がある。
ステップ3で、もし動き情報候補リストの長さがXより小さければ、導出された時間動き情報のうち、List1を指す単方向動き情報(もしあれば)を動き情報候補リストに入れ、且つ入れるプロセスで重複チェック処理を行う必要がある。
ステップ4で、もし動き情報候補リストの長さがXより小さければ、動き情報候補リスト中の最後の単方向動き情報を繰り返し充填してもよく、動き情報候補リストの長さがXになるまで続ける。
前記実施例では、Xは任意の正の整数をとることができ、例えば、Xの値は4、5などであってもよい。
例示的に、適用シナリオ1と適用シナリオ2の違いは、適用シナリオ1で時間動き情報に少なくとも1つの位置が予約され、即ちステップ1で、動き情報候補リストの長さが、最大Xに達するのではなく、X-1に達することである。
適用シナリオ3:ステップ1で、F、G、C、A、B、DはカレントブロックEの隣接予測ブロックであり、F、G、C、A、B、Dの順番で、単方向動き情報(もしあれば)を順に動き情報候補リストに入れ、且つ入れるプロセスで重複チェック処理を行う必要があり、全ての動き情報をチェックし終わるまで、又は動き情報候補リストの長さがX-1に達するまで続ける。
ステップ2で、もし動き情報候補リストの長さがX-1より小さければ、F、G、C、A、B、Dの双方向動き情報(もしあれば)をList0を優先する順番で順に動き情報候補リストに入れ、且つ入れるプロセスで重複チェック処理を行う必要があり、全ての双方向動き情報をチェックし終わるまで、又は動き情報候補リストの長さがX-1に達するまで続ける。
ステップ3で、動き情報候補リストの長さがXより小さいため、導出された時間動き情報のうち、List0を指す単方向動き情報(もしあれば)を動き情報候補リストに入れ、且つ入れるプロセスで重複チェック処理を行う必要がある。
ステップ4で、もし動き情報候補リストの長さがXより小さければ、導出された時間動き情報のうち、List1を指す単方向動き情報(もしあれば)を動き情報候補リストに入れ、且つ入れるプロセスで重複チェック処理を行う必要がある。
ステップ5で、もし動き情報候補リストの長さがXより小さければ、動き情報候補リスト中の最後の単方向動き情報を繰り返し充填してもよく、動き情報候補リストの長さがXになるまで続ける。
前記実施例では、Xは任意の正の整数をとることができ、例えば、Xの値は4、5などであってもよい。
可能な一実施形態では、適用シナリオ3の別の説明形態が、次のとおりであってもよい。
ステップ1で、F、G、C、A、B、DはカレントブロックEの隣接予測ブロックであり、F、G、C、A、B、Dの順番で、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の順番で、単方向利用可能な動き情報を順に動き情報候補リストに入れ、且つ入れるプロセスで重複チェック処理を行う必要があり、動き情報候補リストの長さがX-1になるまで、又はトラバースが終了するまで続ける。
ステップ3で、もし動き情報候補リストの長さがX-1より小さければ、F、G、C、A、B、Dの順番で、二方向利用可能の動き情報をList0を指す単方向動き情報及びList1を指す単方向動き情報に分け、順に動き情報候補リストに入れて重複チェックを行い、動き情報候補リストの長さがX-1になるまで、又はトラバースが終了するまで続ける。
ステップ4で、導出された時間双方向動き情報をList0を指す単方向動き情報及びList1を指す単方向動き情報に分け、最初に単方向動き情報の重複チェック処理を行い、もし単方向動き情報が重複しない場合、単方向動き情報を動き情報候補リストに入れ、動き情報候補リストの長さがXになるまで、又はトラバースが終了するまで続ける。
ステップ5で、もし動き情報候補リストの長さがXより小さければ、動き情報候補リスト中の最後の単方向動き情報を繰り返し充填してもよく、動き情報候補リストの長さがXになるまで続ける。
前記実施例では、Xは任意の正の整数をとることができ、例えば、Xの値は4、5などであってもよい。
適用シナリオ4:ステップ1で、F、G、C、A、B、DはカレントブロックEの隣接予測ブロックであり、F、G、C、A、B、Dの順番で、単方向動き情報(もしあれば)を順に動き情報候補リストに入れ、且つ入れるプロセスで重複チェック処理を行う必要があり、全ての単方向動き情報をチェックし終わるまで、又は動き情報候補リストの長さがXに達するまで続ける。。
ステップ2で、もし動き情報候補リストの長さがXより小さければ、F、G、C、A、B、Dの双方向動き情報(もしあれば)をList0を優先する順番で順に動き情報候補リストに入れ、且つ入れるプロセスで重複チェック処理を行う必要があり、全ての双方向動き情報をチェックし終わるまで、又は動き情報候補リストの長さがXに達するまで続ける。。
ステップ3で、もし動き情報候補リストの長さがXより小さければ、導出された時間動き情報のうち、List0を指す単方向動き情報(もしあれば)を動き情報候補リストに入れ、且つ入れるプロセスで重複チェック処理を行う必要がある。
ステップ4で、もし動き情報候補リストの長さがXより小さければ、導出された時間動き情報のうち、List1を指す単方向動き情報(もしあれば)を動き情報候補リストに入れ、且つ入れるプロセスで重複チェック処理を行う必要がある。
ステップ5で、もし動き情報候補リストの長さがXより小さければ、動き情報候補リスト中の最後の単方向動き情報を繰り返し充填してもよく、動き情報候補リストの長さがXになるまで続ける。
前記実施例では、Xは任意の正の整数をとることができ、例えば、Xの値は4、5などであってもよい。
例示的に、適用シナリオ3と適用シナリオ4の違いは、適用シナリオ3で時間動き情報に少なくとも1つの位置が予約され、即ちステップ1で、動き情報候補リストの長さが、最大Xに達するのではなく、X-1に達することである。
前記適用シナリオ1~適用シナリオ4では、時間動き情報の導出に係る解決手段が従来の技術であり、例えば、コロケーテッドフレームのコロケーテッドブロックによってカレントブロックの時間動き情報を導出することなどであり、これに関しては限定しない。
適用シナリオ5:適用シナリオ1~適用シナリオ4では、もし動き情報候補リストの長さがXより小さければ、動き情報候補リスト中の最後の単方向動き情報を繰り返し充填する。適用シナリオ5では、最後の単方向動き情報を繰り返し充填せず、派生によって充填を行う。例えば、動き情報候補リスト中の任意の1つの有効動き情報(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)であってもよい。前記動き情報候補については、動き情報候補を動き情報候補リストに追加するとき、重複チェック処理を行ってもよいし、重複チェック処理を行わなくてもよい。
適用シナリオ6:適用シナリオ1~適用シナリオ4では、動き情報候補リストの長さがXである。実施例9については、動き情報候補リストの中からカレントブロックの目標動き情報として2つの動き情報候補を選択する必要があり、したがって、動き情報候補リストの長さは2からHであってもよく、Hは、経験に基づいて、例えば、4、5などと設定されてもよい。その上で、符号化側は、シーケンスレベルシンタックスによって動き情報候補リストの長さ(即ち、AWPモードの動き情報候補リストの長さ、又はEAWP(Enhanced Angular Weighted Prediction、強化角度重み付け予測)モードの動き情報候補リストの長さ)を設定してもよい。例えば、awp_max_cand_numによって動き情報候補リストの長さを指示してもよく、awp_max_cand_numによって指示される値がaであり、且つaが2からHの間にあるとすると、復号側は、awp_max_cand_numに基づいて動き情報候補リストの長さを決定し、例えば、長さXがaである。又は、awp_max_cand_num_minus2によって動き情報候補リストの長さを指示し、awp_max_cand_num_minus2によって指示される値がaであり、且つaが0から(H-2)の間にあるとすると、復号側は、awp_max_cand_num_minus2に基づいて動き情報候補リストの長さを決定し、例えば、長さXがa+2である。又は、符号化側は、フレームレベルシンタックスによって動き情報候補リストの長さを設定し、例えば、slice_awp_max_cand_numによって動き情報候補リストの長さを指示し、slice_awp_max_cand_numによって指示される値がaであり、且つaが2からHの間にあるとすると、復号側は、slice_awp_max_cand_numに基づいて動き情報候補リストの長さを決定し、例えば、長さXがaである。又は、slice_awp_max_cand_num_minus2によって動き情報候補リストの長さを指示してもよく、slice_awp_max_cand_num_minus2によって指示される値がaであり、且つaが0から(H-2)の間にあるとすると、復号側は、slice_awp_max_cand_num_minus2に基づいて動き情報候補リストの長さを決定し、例えば、長さXがa+2である。
適用シナリオ7:適用シナリオ1~適用シナリオ4では、動き情報候補リストを構築してもよく、適用シナリオ7では、当該動き情報候補リストをAwpUniArrayと記し、AwpUniArray中の動き情報を動き情報候補と呼ぶことができる。実施例9については、AwpUniArrayの中からカレントブロックの目標動き情報として動き情報候補を選択し、次いで当該目標動き情報に基づいて画素位置の予測値を決定してもよい。
実施例9については、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目標動き情報に与え、もし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中の最初の動き情報を第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を指す単方向動き情報画素位置の予測値を採用してもよい。
実施例11:前記実施例1~実施例3では、第1予測モードに基づいて画素位置の第1予測値を決定し、第2予測モードに基づいて画素位置の第2予測値を決定する必要がある。本実施例では、第1予測モードがフレーム間予測モードであり、第2予測モードがフレーム間予測モードであるのを例として説明する。
第1予測モードはフレーム間予測モードであり、第2予測モードはフレーム間予測モードであり、動き情報候補リストを構築し、当該動き情報候補リストは少なくとも2つの動き情報候補を含んでもよい。当該動き情報候補リストの中からカレントブロックの第1の元の動き情報として1つの動き情報候補を選択し、動き情報候補リストの中からカレントブロックの第2の元の動き情報として別の動き情報候補を選択し、第1の元の動き情報と第2の元の動き情報は異なる。次に、第1の元の動き情報に基づいてカレントブロックの第1目標動き情報を決定し、第2の元の動き情報に基づいてカレントブロックの第2目標動き情報を決定する。カレントブロックの各画素位置に対して、第1目標動き情報に基づいて当該画素位置の第1予測値を決定し、第2目標動き情報に基づいて当該画素位置の第2予測値を決定する。
動き情報候補リストを構築するプロセスに関しては、実施例9及び実施例10を参照することができ、ここでは説明を省略する。第1目標動き情報に基づいて第1予測値を決定し、第2目標動き情報に基づいて第2予測値を決定するプロセスに関しては、実施例9を参照することができ、ここでは説明を省略する。実施例9と違うのは、実施例11で、動き情報候補リストの中から選択される動き情報候補を目標動き情報とするのではなく、元の動き情報とすることである。元の動き情報を得た後、さらに元の動き情報に基づいて目標動き情報を取得してもよく、具体的な取得プロセスは後続の実施例を参照する。
上記で分かるように、前記場合については、第1予測モードと第2予測モードの少なくとも1つの予測モードがフレーム間予測モードであるときは、動き情報候補リストを構築してもよく、当該動き情報候補リストには少なくとも1つの動き情報候補が含まれる。次に、当該動き情報候補リストの中から2つの動き情報候補を選択してそれぞれカレントブロックの第1の元の動き情報と第2の元の動き情報としてもよく、第1の元の動き情報に基づいて第1目標動き情報を決定し、第2の元の動き情報に基づいて第2目標動き情報を決定し、次に、当該2つの目標動き情報に基づいて画素位置の2つの予測値を決定する。
どのようにして元の動き情報に基づいて目標動き情報を決定するかに関して、本実施例では単方向動き情報に差分動きベクトルを重ねる解決手段を提案し、例えば、元の動き情報は元の動きベクトルを含み、目標動き情報は目標動きベクトルを含み、元の動きベクトルに基づいてカレントブロックの目標動きベクトルを決定するために、元の動きベクトルに対応する差分動きベクトル(MVD)を取得し、差分動きベクトル及び元の動きベクトルに基づいて目標動きベクトルを決定してもよく、つまり差分動きベクトルと元の動きベクトルの和を目標動きベクトルとする。
実施例12:実施例11を元にして、差分動きベクトルの方向情報及び振幅情報を取り決め、もし方向情報が表す方向は右で、振幅情報の表す振幅は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はそれぞれ一つの値の集合を表し、異なる方向における振幅集合中の各値は完全に同じでもよいし、一部同じでもよいし、完全に異なってもよい。
例示的に、差分動きベクトルは前記方向情報の一部又は全部をサポートしてもよく、差分動きベクトルによってサポートされる振幅Aの値の範囲は、経験によって設定してもよく、少なくとも1つの値であってもよく、これに関しては限定しない。
例えば、差分動きベクトルは上、下、左、右の4つの方向をサポートし、差分動きベクトルは、5通りのステップの長さの設定であって、1/4-pel、1/2-pel、1-pel、2-pel、4-pelをサポートし、即ち振幅Aの値は1、2、4、8、16であってもよい。上記で分かるように、方向が上であるとき、差分動きベクトルは、(0,1)、(0,2)、(0,4)、(0,8)、(0,16)であってもよい。方向が下であるとき、差分動きベクトルは、(0,-1)、(0,-2)、(0,-4)、(0,-8)、(0,-16)であってもよい。方向が左であるとき、差分動きベクトルは、(-1,0)、(-2,0)、(-4,0)、(-8,0)、(-16,0)であってもよい。方向が右であるとき、差分動きベクトルは、(1,0)、(2,0)、(4,0)、(8,0)、(16,0)であってもよい。
もう一例として、差分動きベクトルは上、下、左、右の4つの方向をサポートし、差分動きベクトルは、6通りのステップの長さの設定であって、1/4-pel、1/2-pel、1-pel、2-pel、3-pel、4-pelをサポートし、即ち振幅Aの値は1、2、4、8、12、16であってもよい。上記で分かるように、方向が上であるとき、差分動きベクトルは、(0,1)、(0,2)、(0,4)、(0,8)、(0,12)、(0,16)であってもよく、他の方向の差分動きベクトルに関しては、「上」の方向の実現形態と類似しているため、ここでは説明を省略する。
もう一例として、差分動きベクトルは上、下、左、右、左上、左下、右上、右下の8つの方向をサポートし、差分動きベクトルは、3通りのステップの長さの設定であって、1/4-pel、1/2-pel、1-pelをサポートし、即ち振幅Aの値は1、2、4であってもよい。上記で分かるように、方向が左上であるとき、差分動きベクトルは、(-1,1)、(-2,2)、(-4,4)であってもよく、方向が右上であるとき、差分動きベクトルは、(1,1)、(2,2)、(4,4)であってもよく、他の方向の差分動きベクトルに関しては、「左上、右上」の方向の実現形態と類似しており、差分動きベクトルの値は上記の取り決めを参照することができ、ここでは説明を省略する。
もう一例として、差分動きベクトルは上、下、左、右の4つの方向をサポートし、差分動きベクトルは、4通りのステップの長さの設定であって、1/4-pel、1/2-pel、1-pel、2-pelをサポートし、即ち振幅Aの値は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レベルにおいて解析されたステップの長さの設定に基づいて復号を行う。
説明の便宜上、後続の実施例では、差分動きベクトルが上、下の2つの方向をサポートし、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であってもよく、方向リスト(上,下)中の最初の方向を表し、振幅情報の指示情報は、4であってもよく、ステップの長さの設定リスト(1-pel,2-pel)中の最初のステップの長さの設定を表す。当然ながら、前記プロセスは簡素化した例に過ぎず、これに関しては限定せず、方向情報及び振幅情報を表すことさえできればよい。
例えば、差分動きベクトルは上、下、左、右の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種類の値)を採用して符号化してもよい。
当然ながら、上述したのが符号化方式のいくつかの例に過ぎず、当該符号化方式に対して限定しない。
上記で分かるように、符号化側については、特定の領域内で最適な動きベクトルを見つけ、次に最適な動きベクトルと動きベクトル候補の差を差分動きベクトル(MVD)とし、差分動きベクトルの振幅情報及び方向情報をビットストリームに組み入れ、動きベクトル候補の動き情報候補リストにおけるインデックス値をビットストリームに組み入れてもよい。符号化側は、特定の領域内で最適な動きベクトルを検索するとき、差分動きベクトルの方向及び振幅を取り決め必要があり、即ち、(Ar,0)、(0,-Ad)、(-Al,0)、(0,Au)、(Aru,Aru)、(-Alu,Alu)、(-Ald,-Ald)、(Ard,-Ard)などの差分動きベクトルの限られた範囲内で最適な動きベクトルを検索し、任意の差分動きベクトルの範囲内で最適な動きベクトルを検索するのではない。
復号側については、カレントブロックの符号化ビットストリームを受信した後、符号化ビットストリームの中から動きベクトル候補の動き情報候補リストにおけるインデックス値を解析し、動き情報候補リストの中から当該インデックス値に対応する動きベクトル候補を選択し、当該動きベクトル候補をカレントブロックの元の動きベクトルとしてもよい。復号側は、また、当該符号化ビットストリームの中から差分動きベクトルの方向情報及び振幅情報を解析し、当該方向情報及び振幅情報に基づいて差分動きベクトルを決定してもよい。
次に、復号側は、当該差分動きベクトル及び当該元の動きベクトルに基づいてカレントブロックの目標動きベクトルを決定してもよく、例えば、当該差分動きベクトルと当該元の動きベクトルの和をカレントブロックの目標動きベクトルとしてもよい。
前記実施例を参照すると、符号化側は差分動きベクトルの方向情報を符号化するとき、固定長符号、トランケーテッド・ユーナリコードなどの方式を採用できるため、復号側は固定長符号、トランケーテッド・ユーナリコードなどの方式を採用して、差分動きベクトルの方向情報に対して復号して、差分動きベクトルの方向情報として、例えば、上、下、左、右、左上、左下、右上、右下などを得てもよい。
前記実施例を参照すると、符号化側は差分動きベクトルの振幅情報を符号化するとき、固定長符号、トランケーテッド・ユーナリコードなどの方式を採用できるため、復号側は固定長符号、トランケーテッド・ユーナリコードなどの方式を採用して、差分動きベクトルの振幅情報に対して復号して、差分動きベクトルの振幅情報として、例えば、1/4-pel、1/2-pel、1-pel、2-pelなどのステップの長さの設定を得てもよく、次いで1/4-pel、1/2-pel、1-pel、2-pelなどのステップの長さの設定に基づいて差分動きベクトルの振幅Aの値を決定する。
上記で分かるように、復号側は符号化ビットストリームの中から差分動きベクトルの方向情報及び振幅情報を解析することができ、方向情報及び振幅情報を解析した後、方向情報及び振幅情報に基づいて差分動きベクトルを決定することができる。
可能な一実施形態では、符号化側は符号化ビットストリームの中でフラグ情報を符号化してもよく、当該フラグ情報は、元の動きベクトルに対して差分動きベクトルを重ね、又は元の動きベクトルに対して差分動きベクトルを重ねないことを指示する。当該フラグ情報はEAWPモードのサブモードフラグであってもよく、さらに、EAWPモードをAWPと動きベクトルリファインメント(AWP with motion vector refinement、AWP-MVR)モードと呼んでもよい。復号側は、カレントブロックの符号化ビットストリームを受信した後、最初にカレントブロックの符号化ビットストリームの中から強化角度重み付け予測モードのサブモードフラグを解析する。もし当該サブモードフラグが元の動きベクトルに対して差分動きベクトルを重ねることを指示すれば、復号側は、カレントブロックの符号化ビットストリームの中から差分動きベクトルの方向情報及び振幅情報を解析し、当該方向情報及び当該振幅情報に基づいて差分動きベクトルを決定し、元の動きベクトル及び差分動きベクトルに基づいてカレントブロックの目標動きベクトルを決定する。もし当該サブモードフラグが元の動きベクトルに対して差分動きベクトルを重ねないことを指示すれば、復号側は、差分動きベクトルの方向情報及び振幅情報を解析せず、直接元の動きベクトルをカレントブロックの目標動きベクトルとする。
例示的に、強化角度重み付け予測モードのサブモードフラグが第1サブモード値であるとき、元の動きベクトルに対して差分動きベクトルを重ねることを指示し、強化角度重み付け予測モードのサブモードフラグが第2サブモード値であるとき、元の動きベクトルに対して差分動きベクトルを重ねないことを表す。第1サブモード値と第2サブモード値は経験によって設定してもよく、例えば、第1サブモード値は1で、第2サブモード値は0であり、又は、例えば、第1サブモード値は0で、第2サブモード値は1であり、当然ながら、上述したのが2つの例に過ぎず、これに関しては限定しない。
可能な一実施形態では、実施例11について、第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目標動きベクトルとしてもよい。
実施例13:実施例11を元にして、符号化側については、特定の領域内で最適な動きベクトルを見つけ、次に最適な動きベクトルと動きベクトル候補の差を差分動きベクトル(MVD)とし、差分動きベクトルの情報をビットストリームに組み入れ、動きベクトル候補の動き情報候補リストにおけるインデックス値をビットストリームに組み入れてもよい。
符号化側は、特定の領域内で最適な動きベクトルを検索するとき、任意に検索してもよく、これに関しては限定しない。例えば、動き情報候補リスト中の各動きベクトル候補に対して、当該動きベクトル候補を中心にいくつかのエッジ動きベクトルを見つけ、各エッジ動きベクトルに対応するRDOコスト値を決定し、全てのRDOコスト値の中から最小のRDOコスト値を選択し、最小のRDOコスト値に対応するエッジ動きベクトルを最適な動きベクトルとする。
最適な動きベクトルは動きベクトル候補1に基づいて見つかったとすると、動きベクトル候補1をカレントブロックの元の動きベクトルとし、且つ最適な動きベクトルと動きベクトル候補1の差を、差分動きベクトルとしてもよい。
符号化側は、カレントブロックの符号化ビットストリームの中で動きベクトル候補1の動き情報候補リストにおけるインデックス値、及び差分動きベクトルの情報を符号化してもよく、差分動きベクトルの情報は、水平成分差の情報及び/又は垂直成分差の情報を含んでもよいが、それらに限定されない。そのうち、水平成分差の情報は水平成分差の絶対値及び/又は水平成分差の符号値を含んでもよく、垂直成分差の情報は垂直成分差の絶対値及び/又は垂直成分差の符号値を含んでもよい。
復号側については、カレントブロックの符号化ビットストリームを受信した後、符号化ビットストリームの中から動きベクトル候補の動き情報候補リストにおけるインデックス値を解析し、動き情報候補リストの中から当該インデックス値に対応する動きベクトル候補を選択し、当該動きベクトル候補をカレントブロックの元の動きベクトルとしてもよい。復号側は、また、カレントブロックの符号化ビットストリームの中から差分動きベクトルの水平成分差の情報及び垂直成分差の情報を解析し、差分動きベクトルの水平成分差の情報(例えば、水平成分差の絶対値及び/又は水平成分差の符号値)及び垂直成分差の情報(例えば、垂直成分差の絶対値及び/又は垂直成分差の符号値)に基づいて当該差分動きベクトルを決定してもよい。
次に、復号側は、当該差分動きベクトル及び当該元の動きベクトルに基づいてカレントブロックの目標動きベクトルを決定してもよく、例えば、復号側は、当該差分動きベクトルと当該元の動きベクトルの和をカレントブロックの目標動きベクトルとしてもよい。
例示的に、復号側は、水平成分差の絶対値及び水平成分差の符号値に基づいて、水平成分差を決定し、垂直成分差の絶対値及び垂直成分差の符号値に基づいて、垂直成分差を決定してもよく、水平成分差と垂直成分差の組み合わせは差分動きベクトルであり、つまり差分動きベクトルは当該水平成分差及び当該垂直成分差を含む。
可能な一実施形態では、符号化側は符号化ビットストリームの中で強化角度重み付け予測モードのサブモードフラグを符号化してもよく、当該サブモードフラグは、元の動きベクトルに対して差分動きベクトルを重ね、又は元の動きベクトルに対して差分動きベクトルを重ねないことを指示する。復号側は、カレントブロックの符号化ビットストリームを受信した後、符号化ビットストリームの中から強化角度重み付け予測モードのサブモードフラグを解析する。もし当該サブモードフラグが元の動きベクトルに対して差分動きベクトルを重ねることを指示すれば、符号化ビットストリームの中から差分動きベクトルの水平成分差の情報及び垂直成分差の情報を解析し、水平成分差の情報及び垂直成分差の情報に基づいて差分動きベクトルを決定し、元の動きベクトル及び差分動きベクトルに基づいてカレントブロックの目標動きベクトルを決定する。もし当該サブモードフラグが元の動きベクトルに対して差分動きベクトルを重ねないことを指示すれば、差分動きベクトルの水平成分差の情報及び垂直成分差の情報を解析せず、元の動きベクトルをカレントブロックの目標動きベクトルとする。
可能な一実施形態では、実施例11について、第1の元の動き情報は第1の元の動きベクトルを含み、第1目標動き情報は第1目標動きベクトルを含み、第2の元の動き情報は第2の元の動きベクトルを含み、第2目標動き情報は第2目標動きベクトルを含み、これにより、第1の元の動きベクトルに対応する第1差分動きベクトルを取得し、第1差分動きベクトル及び第1の元の動きベクトルに基づいて第1目標動きベクトルを決定し、即ち第1差分動きベクトルと第1の元の動きベクトルの和を第1目標動きベクトルとしてもよい。第2の元の動きベクトルに対応する第2差分動きベクトルを取得し、第2差分動きベクトル及び第2の元の動きベクトルに基づいて第2目標動きベクトルを決定し、即ち第2差分動きベクトルと第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サブモードフラグ及び第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目標動きベクトルとしてもよい。
実施例14:以下、実施例11~13を元にして、2つの差分動きベクトルの場合について、いくつかの具体的な適用シナリオを参照して、単方向動き情報に差分動きベクトルを重ねることに関連するシンタックスについて説明する。
適用シナリオ1:表4に示されるのは、関連するシンタックスの例であり、SkipFlagはカレントブロックがスキップ(Skip)モードなのかどうかを表し、DirectFlagはカレントブロックが直接(Direct)モードなのかどうかを表し、AwpFlagはカレントブロックがAWPモードなのかどうかを表す。
awp_idx(角度重み付け予測モードインデックス):スキップモード又は直接モードにおける角度重み付け予測モードインデックス値であり、AwpIdx(AwpIdxの定義は実施例8を参照)の値は、awp_idxの値に等しくてもよい。もしビットストリーム中にawp_idxが存在しなければ、AwpIdxの値は0に等しい。
awp_cand_idx0(角度重み付け予測モードの第1動き情報インデックス):スキップモード又は直接モードにおける角度重み付け予測モードの第1動き情報インデックス値である。AwpCandIdx0(関連する定義は実施例10を参照)の値はawp_cand_idx0の値に等しく、もしビットストリーム中にawp_cand_idx0が存在しなければ、AwpCandIdx0の値は0に等しい。
awp_cand_idx1(角度重み付け予測モードの第2動き情報インデックス):スキップモード又は直接モードにおける角度重み付け予測モードの第2動き情報インデックス値である。AwpCandIdx1(関連する定義は実施例10を参照)の値は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によって強化角度重み付け予測モードを制御し、即ちマスタースイッチによって強化角度重み付け予測モードを制御することができる。
例示的に、適用シナリオ1及び適用シナリオ2は、実施例12についての実現形態であってもよい。
適用シナリオ3:表6に示されるのは、関連するシンタックスの例であり、SkipFlagはカレントブロックがSkipモードなのかどうかを表し、DirectFlagはカレントブロックがDirectモードなのかどうかを表し、AwpFlagはカレントブロックがAWPモードなのかどうかを表す。
awp_idx(角度重み付け予測モードインデックス):スキップモード又は直接モードにおける角度重み付け予測モードインデックス値であり、AwpIdxの値はawp_idxの値に等しくてもよい。もしビットストリーム中にawp_idxが存在しなければ、AwpIdxの値は0に等しい。
awp_cand_idx0(角度重み付け予測モードの第1動き情報インデックス):スキップモード又は直接モードにおける角度重み付け予測モードの第1動き情報インデックス値である。AwpCandIdx0(関連する定義は実施例10を参照)の値はawp_cand_idx0の値に等しく、もしビットストリーム中にawp_cand_idx0が存在しなければ、AwpCandIdx0の値は0に等しい。
awp_cand_idx1(角度重み付け予測モードの第2動き情報インデックス):スキップモード又は直接モードにおける角度重み付け予測モードの第2動き情報インデックス値である。AwpCandIdx1(関連する定義は実施例10を参照)の値は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_mv_diff_x_abs0(強化角度重み付け予測モードの第1動きベクトル水平成分差の絶対値)及びawp_mv_diff_y_abs0(強化角度重み付け予測モードの第1動きベクトル垂直成分差の絶対値)は強化角度重み付け予測モードの第1差分動きベクトル値の絶対値であり、AwpMvDiffXAbs0はawp_mv_diff_x_abs0の値に等しく、AwpMvDiffYAbs0はawp_mv_diff_y_abs0の値に等しい。awp_mv_diff_x_sign0(強化角度重み付け予測モードの第1動きベクトル水平成分差の符号値)及びawp_mv_diff_y_sign0(強化角度重み付け予測モードの第1動きベクトル垂直成分差の符号値)は強化角度重み付け予測モードの第1差分動きベクトル値の符号ビットであり、AwpMvDiffXSign0の値はawp_mv_diff_x_sign0の値に等しく、AwpMvDiffYSign0の値はawp_mv_diff_y_sign0の値に等しい。
可能な一実施形態では、もしビットストリーム中にawp_mv_diff_x_sign0又はawp_mv_diff_y_sign0が存在しなければ、AwpMvDiffXSign0又はAwpMvDiffYSign0の値は0である。もしAwpMvDiffXSign0の値が0であれば、AwpMvDiffX0はAwpMvDiffXAbs0に等しく、もしAwpMvDiffXSign0の値が1であれば、AwpMvDiffX0は-AwpMvDiffXAbs0に等しくてもよい。もしAwpMvDiffYSign0の値が0であれば、AwpMvDiffY0はAwpMvDiffYAbs0に等しくてもよく、もしAwpMvDiffYSign0の値が1であれば、AwpMvDiffY0は-AwpMvDiffYAbs0に等しくてもよい。AwpMvDiffX0及びAwpMvDiffY0の値の範囲は-32768~32767である。
例示的に、awp_mv_diff_x_abs1(強化角度重み付け予測モードの第2動きベクトル水平成分差の絶対値)及びawp_mv_diff_y_abs1(強化角度重み付け予測モードの第2動きベクトル垂直成分差の絶対値)は強化角度重み付け予測モードの第2差分動きベクトル値の絶対値であり、AwpMvDiffXAbs1はawp_mv_diff_x_abs1の値に等しく、AwpMvDiffYAbs1はawp_mv_diff_y_abs1の値に等しい。awp_mv_diff_x_sign1(強化角度重み付け予測モードの第2動きベクトル水平成分差の符号値)及びawp_mv_diff_y_sign1(強化角度重み付け予測モードの第2動きベクトル垂直成分差の符号値)は強化角度重み付け予測モードの第2差分動きベクトル値の符号ビットであり、AwpMvDiffXSign1の値はawp_mv_diff_x_sign1の値に等しく、AwpMvDiffYSign1の値はawp_mv_diff_y_sign1の値に等しい。
可能な一実施形態では、もしビットストリーム中にawp_mv_diff_x_sign1又はawp_mv_diff_y_sign1が存在しなければ、AwpMvDiffXSign1又はAwpMvDiffYSign1の値は0である。もしAwpMvDiffXSign1の値が0であれば、AwpMvDiffX1はAwpMvDiffXAbs1に等しく、もしAwpMvDiffXSign1の値が1であれば、AwpMvDiffX1は-AwpMvDiffXAbs1に等しい。もしAwpMvDiffYSign1の値が0であれば、AwpMvDiffY1はAwpMvDiffYAbs1に等しくてもよく、もしAwpMvDiffYSign1の値が1であれば、AwpMvDiffY1は-AwpMvDiffYAbs1に等しくてもよい。AwpMvDiffX1及びAwpMvDiffY1の値の範囲は-32768~32767である。
適用シナリオ4:表7に示されるのは、関連するシンタックスの例であり、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に等しくてもよい。
例示的に、表7のawp_mv_diff_x_abs0、awp_mv_diff_y_abs0、awp_mv_diff_x_sign0、awp_mv_diff_y_sign0、awp_mv_diff_x_abs1、awp_mv_diff_y_abs1、awp_mv_diff_x_sign1及びawp_mv_diff_y_sign1などのパラメータについては、適用シナリオ3を参照することができ、ここでは説明を省略する。
例示的に、適用シナリオ3と適用シナリオ4について、両者の違いは、適用シナリオ3では、シンタックスawp_mvd_flagが存在し、適用シナリオ4では、シンタックスawp_mvd_flagが存在しないことにある。適用シナリオ3では、awp_mvd_flagによって強化角度重み付け予測モードを制御し、即ちマスタースイッチによって強化角度重み付け予測モードを制御することができる。
例示的に、適用シナリオ3及び適用シナリオ4は、実施例13についての実現形態であってもよい。
適用シナリオ3/適用シナリオ4と適用シナリオ1/適用シナリオ2の違いは、適用シナリオ1/適用シナリオ2では、いくつかの好ましいMVDを採用しており、適用シナリオ3/適用シナリオ4では、特定の検索範囲内の全てのMVDが許可されることにあり、例えば、適用シナリオ5の方式を採用して、特定の検索範囲内で全てのMVDを検索してもよい。
適用シナリオ5:表8に示されるのは、関連するシンタックスの例であり、表8にはMVDの符号化方式が示される。表8から分かるように、次のステップを採用してMVDの符号化を実現でき、当然ながら、これが一例に過ぎない。
1.|MVD_X|が0より大きいかどうかを判断し、|…|は絶対値記号であり、MVD_XはMVDの横方向成分を表す。
2.|MVD_Y|が0より大きいかどうかを判断し、|…|は絶対値記号であり、MVD_YはMVDの縦方向成分を表す。
3.もし|MVD_X|が0より大きければ、|MVD_X|は1より大きいかどうかを判断する。
4.もし|MVD_Y|が0より大きければ、|MVD_Y|は1より大きいかどうかを判断する。
5.もし|MVD_X|が1より大きければ、|MVD_X|-2を符号化する。
6.もし|MVD_X|が0より大きければ、MVD_Xの符号ビットを符号化する。
7.もし|MVD_Y|が1より大きければ、|MVD_Y|-2を符号化する。
8.もし|MVD_Y|が0より大きければ、MVD_Yの符号ビットを符号化する。
適用シナリオ6:前記適用シナリオ1~適用シナリオ4を派生させることができ、AWPとEAWPモードを完全に融合させ、即ちスパンに対して0スパンを加えることによって、イネーブルかどうかのフラグビットを符号化する必要はなくなる。例えば、差分動きベクトルは上、下、左、右の4つの方向をサポートし、差分動きベクトルは、0-pel、1/4-pel、1/2-pel、1-pel、2-pel、4-pelの6通りのステップの長さの設定をサポートし、即ちステップの長さの設定の0-pelを加えている。その上で、表4/表5を表9に更新してもよく、表6/表7を表10に更新してもよく、表9及び表10の関連するシンタックスの意味は、表4及び表6を参照することができ、ここでは説明を省略する。
適用シナリオ7:前記実施例はAWPモード、DAWP(二重フレーム間角度重み付け予測)モード及びEAWPモードが関係しており、高レベルシンタックスによってそれらのモードのオン又はオフを制御することができる。例えば、高レベルシンタックス1によってAWPモードのオン又はオフを制御する。もう一例として、高レベルシンタックス2によってDAWPモードのオン又はオフを制御する。もう一例として、高レベルシンタックス3によってEAWPモードのオン又はオフを制御する。もう一例として、高レベルシンタックス4によってAWPモードとDAWPモードが同時にオンするよう制御し、又は、AWPモードとDAWPモードが同時にオフするよう制御する。もう一例として、高レベルシンタックス5によってAWPモードとEAWPモードが同時にオンするよう制御し、又は、AWPモードとEAWPモードが同時にオフするよう制御する。もう一例として、高レベルシンタックス6によってDAWPモードとEAWPモードが同時にオンするよう制御し、又は、DAWPモードとEAWPモードが同時にオフするよう制御する。もう一例として、高レベルシンタックス7によってAWPモード、DAWPモード及びEAWPモードが同時にオンするよう制御し、又は、AWPモード、DAWPモード及びEAWPモードが同時にオフするよう制御する。当然ながら、上述したのがいくつかの例に過ぎず、これに関しては限定しない。
前記実施例では、高レベルシンタックスはシーケンスパラメータセットレベルの高レベルシンタックス、又は画像パラメータセットレベルの高レベルシンタックス、又はスライスヘッダレベルの高レベルシンタックス、又は画像ヘッダレベルの高レベルシンタックスであってもよく、当該高レベルシンタックスに対しては限定しない。例えば、シーケンスパラメータセットレベルの高レベルシンタックスに基づき、sps_awp_enable_flag、sh_awp_enable_flag、awp_enable_flagなどによって、AWPモードのオン又はオフを制御し、又は、EAWPモードのオン又はオフを制御し、又は、複数のモードが同時にオン又は同時にオフするよう制御してもよく、これに関しては限定しない。
例示的に、前記実施例では、元の動き情報に基づいて目標動き情報を取得してもよく、目標動き情報を得た後、カレントブロックの目標動き情報を記憶してもよく、当該記憶方式に対しては限定しない。
例示的に、前記実施例1~実施例14は単独で実現してもよいし、組み合わせて実現してもよい。例えば、実施例1と実施例2を組み合わせて実現することができ、実施例1と実施例3を組み合わせて実現することができ、実施例1、実施例2と実施例3を組み合わせて実現することができる。実施例4は実施例1~3の1つ又は複数と組み合わせて実現することができ、実施例5(又は実施例6、又は実施例7)は実施例2(又は実施例3)と組み合わせて実現することができる。実施例8は実施例2(又は実施例3)と組み合わせて実現することができる。実施例9~実施例14の任意の1つ又は複数の実施例は、実施例1~実施例8の任意の1つ又は複数の実施例と組み合わせて実現できるなどである。当然ながら、上述したのがいくつかの例に過ぎず、当該実施例の間の組み合わせの方式に対して限定しない。
本願の実施例では、前記方法と同じ構想に基づき、さらに、符号化装置及び復号装置を提案し、当該2種の装置はいずれも図8Aに示される装置を参照するように、取得モジュール811と、第1決定モジュール812と、第2決定モジュール813と、第3決定モジュール814と、符号化・復号モジュール815とを含んでもよい。なお、符号化装置については、符号化・復号モジュール815が符号化機能を実現し、復号装置については、符号化・復号モジュール815が復号機能を実現する。
いくつかの例では、符号化装置は、カレントブロックに対して重み付け予測を開始すると決定されるとき、前記カレントブロックに対して前記カレントブロックの重み付け予測角度を取得することを実行するためのモジュール(例えば、取得モジュール811)と、前記カレントブロックの各画素位置に対して、前記カレントブロックの重み付け予測角度に基づいて前記カレントブロックの外部の周辺位置の中から前記画素位置の指す周辺マッチング位置を決定することを実行するためのモジュール(例えば、第1決定モジュール812)と、前記周辺マッチング位置に関連する参照重み値に基づいて前記画素位置の目標重み値を決定し、前記画素位置の目標重み値に基づいて前記画素位置の関連重み値を決定することを実行するためのモジュール(例えば、第2決定モジュール813)と、前記カレントブロックの各画素位置に対して、前記カレントブロックの第1予測モードに基づいて前記画素位置の第1予測値を決定し、前記カレントブロックの第2予測モードに基づいて前記画素位置の第2予測値を決定し、前記第1予測値、前記目標重み値、前記第2予測値及び前記関連重み値に基づいて、前記画素位置の重み付け予測値を決定することを実行するためのモジュール(例えば、第3決定モジュール814)と、前記カレントブロックの全ての画素位置の重み付け予測値に基づいて前記カレントブロックの重み付け予測値を決定することを実行するためのモジュール(例えば、符号化・復号モジュール815)とを含む。
いくつかの例では、復号装置は、カレントブロックに対して重み付け予測を開始すると決定されるとき、前記カレントブロックに対して前記カレントブロックの重み付け予測角度を取得することを実行するためのモジュール(例えば、取得モジュール811)と、前記カレントブロックの各画素位置に対して、前記カレントブロックの重み付け予測角度に基づいて前記カレントブロックの外部の周辺位置の中から前記画素位置の指す周辺マッチング位置を決定することを実行するためのモジュール(例えば、第1決定モジュール812)と、前記周辺マッチング位置に関連する参照重み値に基づいて前記画素位置の目標重み値を決定し、前記画素位置の目標重み値に基づいて前記画素位置の関連重み値を決定することを実行するためのモジュール(例えば、第2決定モジュール813)と、前記カレントブロックの各画素位置に対して、前記カレントブロックの第1予測モードに基づいて前記画素位置の第1予測値を決定し、前記カレントブロックの第2予測モードに基づいて前記画素位置の第2予測値を決定し、前記第1予測値、前記目標重み値、前記第2予測値及び前記関連重み値に基づいて、前記画素位置の重み付け予測値を決定することを実行するためのモジュール(例えば、第3決定モジュール814)と、前記カレントブロックの全ての画素位置の重み付け予測値に基づいて前記カレントブロックの重み付け予測値を決定することを実行するためのモジュール(例えば、符号化・復号モジュール815)とを含む。
前記第2決定モジュール813は、さらに、前記カレントブロックの外部の周辺位置に参照重み値を設定するためにも用いられ、前記カレントブロックの外部の周辺位置の参照重み値は予め設定され又は重み設定パラメータに基づいて設定され、前記重み設定パラメータは重み変換率と重み変換の開始位置とを含む。例示的に、前記重み変換の開始位置は、前記カレントブロックの重み付け予測角度、前記カレントブロックの重み付け予測位置、前記カレントブロックのサイズの少なくとも1つのパラメータによって決定される。
例示的に、前記カレントブロックの外部の周辺位置の数は前記カレントブロックのサイズ及び/又は前記カレントブロックの重み付け予測角度に基づいて決定され、前記カレントブロックの外部の周辺位置の参照重み値は単調増加又は単調減少する。
例示的に、前記カレントブロックの外部の周辺位置の参照重み値は目標領域の参照重み値と、目標領域の第1隣接領域の参照重み値と、目標領域の第2隣接領域の参照重み値とを含み、なお、又は、第1隣接領域の参照重み値はいずれも第2参照重み値であり、第2隣接領域の参照重み値はいずれも第3参照重み値であり、前記第2参照重み値と前記第3参照重み値は異なる。
前記目標領域は1つの参照重み値又は少なくとも2つの参照重み値を含み、もし前記目標領域が少なくとも2つの参照重み値を含む場合、前記目標領域の少なくとも2つの参照重み値は単調増加する。
例示的に、前記カレントブロックの重み付け予測角度は水平角度であり、又は、前記カレントブロックの重み付け予測角度は垂直角度であり、又は、前記カレントブロックの重み付け予測角度の勾配の絶対値は2のn乗であり、nは整数である。
例示的に、前記カレントブロックの外部の周辺位置は整数画素位置、又は副画素位置、又は整数画素位置と副画素位置を含み、前記カレントブロックの外部の周辺位置は、前記カレントブロックの外部の上側1行の周辺位置、又は、前記カレントブロックの外部の左側1列の周辺位置を含む。
第2決定モジュール813は、具体的には、前記周辺マッチング位置が整数画素位置であり、且つ前記整数画素位置に参照重み値が設定されている場合、前記整数画素位置の参照重み値に基づいて前記画素位置の目標重み値を決定し、又は、前記周辺マッチング位置が副画素位置であり、且つ前記副画素位置に参照重み値が設定されている場合、前記副画素位置の参照重み値に基づいて前記画素位置の目標重み値を決定するために用いられる。
例示的に、前記第1予測モードはフレーム間予測モードであり、前記第2予測モードはフレーム間予測モードである。
例示的に、前記第3決定モジュール814は、さらに、動き情報候補リストを構築し、ただし、前記動き情報候補リストには少なくとも2つの動き情報候補が含まれ、前記動き情報候補リストの中から前記カレントブロックの第1目標動き情報として1つの動き情報候補を選択し、前記第1目標動き情報に基づいて前記画素位置の前記第1予測値を決定し、前記動き情報候補リストの中から前記カレントブロックの第2目標動き情報として別の動き情報候補を選択し、前記第2目標動き情報に基づいて前記画素位置の前記第2予測値を決定するために用いられる。
前記第3決定モジュール814は、さらに、動き情報候補リストを構築し、ただし、前記動き情報候補リストには少なくとも2つの動き情報候補が含まれ、前記動き情報候補リストの中から前記カレントブロックの第1の元の動き情報として1つの動き情報候補を選択し、前記第1の元の動き情報に基づいて前記カレントブロックの第1目標動き情報を決定し、前記第1目標動き情報に基づいて前記画素位置の前記第1予測値を決定し、前記動き情報候補リストの中から前記カレントブロックの第2の元の動き情報として別の動き情報候補を選択し、前記第2の元の動き情報に基づいて前記カレントブロックの第2目標動き情報を決定し、前記第2目標動き情報に基づいて前記画素位置の前記第2予測値を決定するために用いられる。
前記第1の元の動き情報は第1の元の動きベクトルを含み、前記第1目標動き情報は第1目標動きベクトルを含み、前記第2の元の動き情報は第2の元の動きベクトルを含み、前記第2目標動き情報は第2目標動きベクトルを含み、前記第3決定モジュール814は、さらに、前記第1の元の動きベクトルに対応する差分動きベクトルを取得し、前記第1元の動きベクトルに対応する差分動きベクトル及び前記第1の元の動きベクトルに基づいて、前記第1目標動きベクトルを決定し、前記第2の元の動きベクトルに対応する差分動きベクトルを取得し、前記第2元の動きベクトルに対応する差分動きベクトル及び前記第2の元の動きベクトルに基づいて、前記第2目標動きベクトルを決定するために用いられる。前記装置が復号側に適用される場合、前記第3決定モジュール814は、さらに、前記カレントブロックの符号化ビットストリームの中から前記対応する差分動きベクトルの方向情報及び振幅情報を解析し、前記対応する差分動きベクトルの方向情報及び振幅情報に基づいて前記対応する差分動きベクトルを決定するために用いられる。
例示的に、方向情報の表す方向が右で、振幅情報の表す振幅がArである場合、差分動きベクトルは(Ar,0)であり、方向情報の表す方向が下で、振幅情報の表す振幅がAdである場合、差分動きベクトルは(0,-Ad)であり、方向情報の表す方向が左で、振幅情報の表す振幅がAlである場合、差分動きベクトルは(-Al,0)であり、方向情報の表す方向が上で、振幅情報の表す振幅がAuである場合、差分動きベクトルは(0,Au)である。
前記第3決定モジュール814は、さらに、前記カレントブロックの符号化ビットストリームの中からフラグ情報を解析し、前記フラグ情報が前記元の動きベクトルに対して差分動きベクトルを重ねることを指示する場合、前記カレントブロックの符号化ビットストリームの中から前記対応する差分動きベクトルの方向情報及び振幅情報を解析するために用いられる。
本願の実施例では、前記方法と同じ構想に基づき、復号デバイス(ビデオデコーダとも呼ばれる)を提供し、ハードウェア的には、そのハードウェアアーキテクチャ概略図として具体的には図8Bを参照することができる。前記復号デバイスは、プロセッサ821と機械可読記憶媒体822とを含み、前記機械可読記憶媒体822には前記プロセッサ821によって実行可能な機械実行可能命令が記憶されており、前記プロセッサ821は、機械実行可能命令を実行することによって、本願の上記の例において開示されている方法を実施するために用いられる。例えば、前記プロセッサ821は、機械実行可能命令を実行することによって、カレントブロックに対して重み付け予測を開始すると決定されるとき、前記カレントブロックに対して、前記カレントブロックの重み付け予測角度を取得するステップと、前記カレントブロックの各画素位置に対して、前記カレントブロックの重み付け予測角度に基づいて前記カレントブロックの外部の周辺位置の中から前記画素位置の指す周辺マッチング位置を決定するステップと、前記周辺マッチング位置に関連する参照重み値に基づいて前記画素位置の目標重み値を決定し、前記画素位置の目標重み値に基づいて前記画素位置の関連重み値を決定するステップと、前記カレントブロックの各画素位置に対して、カレントブロックの第1予測モードに基づいて前記画素位置の第1予測値を決定し、カレントブロックの第2予測モードに基づいて前記画素位置の第2予測値を決定するステップと、前記第1予測値、前記目標重み値、前記第2予測値及び前記関連重み値に基づいて、前記画素位置の重み付け予測値を決定するステップと、前記カレントブロックの全ての画素位置の重み付け予測値に基づいて前記カレントブロックの重み付け予測値を決定するステップと、を実施するために用いられる。
本願の実施例では、前記方法と同じ構想に基づき、符号化デバイス(ビデオエンコーダとも呼ばれる)を提供し、ハードウェアを見れば、そのハードウェアアーキテクチャ概略図として具体的には図8Cを参照することができる。前記符号化デバイスは、プロセッサ831と機械可読記憶媒体832とを含み、前記機械可読記憶媒体832には前記プロセッサ831によって実行可能な機械実行可能命令が記憶されており、前記プロセッサ831は、機械実行可能命令を実行することによって、本願の上記の例において開示されている方法を実施するために用いられる。例えば、前記プロセッサ831は、機械実行可能命令を実行することによって、カレントブロックに対して重み付け予測を開始すると決定されるとき、前記カレントブロックに対して、前記カレントブロックの重み付け予測角度を取得するステップと、前記カレントブロックの各画素位置に対して、前記カレントブロックの重み付け予測角度に基づいて前記カレントブロックの外部の周辺位置の中から前記画素位置の指す周辺マッチング位置を決定するステップと、前記周辺マッチング位置に関連する参照重み値に基づいて前記画素位置の目標重み値を決定し、前記画素位置の目標重み値に基づいて前記画素位置の関連重み値を決定するステップと、前記カレントブロックの各画素位置に対して、カレントブロックの第1予測モードに基づいて前記画素位置の第1予測値を決定し、カレントブロックの第2予測モードに基づいて前記画素位置の第2予測値を決定するステップと、前記第1予測値、前記目標重み値、前記第2予測値及び前記関連重み値に基づいて、前記画素位置の重み付け予測値を決定するステップと、前記カレントブロックの全ての画素位置の重み付け予測値に基づいて前記カレントブロックの重み付け予測値を決定するステップと、を実施するために用いられる。
本願の実施例では、前記方法と同じ構想に基づき、さらに、カメラデバイスを提供し、当該カメラデバイスは前記いずれかの実施例に係る符号化・復号装置を含んでもよく、且つ当該カメラデバイスは前記フローを採用して処理を行うことができる。
本願の実施例では、前記方法と同じ構想に基づき、さらに、機械可読記憶媒体を提供し、前記機械可読記憶媒体にはいくつかのコンピュータ命令が記憶されており、前記コンピュータ命令がプロセッサによって実行されるとき、本願の上記の例において開示されている方法、例えば、前記各実施例に係る符号化・復号方法が実現できる。
前記実施例で説明したシステム、装置、モジュール又はユニットは、コンピュータチップ又はエンティティによって実現されてもよいし、又は、特定の機能を有する製品によって実現される。実現デバイスとして典型的なのはコンピュータであり、コンピュータの具体的な形態は、パーソナルコンピュータ、ラップトップコンピュータ、セルフォン、カメラ付き携帯電話、スマートフォン、携帯情報端末、メディアプレーヤー、ナビゲーション機器、電子メール送受信機器、ゲーム機、タブレットコンピュータ、ウェアラブル機器、又はそれらの機器の任意の何種類の組み合わせであってもよい。説明の便宜上、上記の装置を説明するとき、機能によって様々なユニットに分けてそれぞれ説明する。当然ながら、本願を実施するときは各ユニットの機能を同一の又は複数のソフトウェア及び/又はハードウェアにおいて実現してもよい。
当業者には、本願の実施例が方法、システム、又はコンピュータプログラム製品として提供され得ることが自明である。本願は、ハードウェアだけからなる実施例、ソフトウェアだけからなる実施例、又はソフトウェアとハードウェアを組み合わせた実施例なる形態であってもよい。本願の実施例は、コンピュータ利用可能なプログラムコードを含む1つ又は複数のコンピュータ利用可能な記憶媒体(ディスク記憶装置、CD-ROM、光記憶装置を含むが、それらに限定されない)において実施されるコンピュータプログラム製品なる形態であってもよい。
上述したのは本願の実施例に過ぎず、本願を限定するためのものではない。当業者にとっては、本願は様々な変更及び変化があり得る。本願の趣旨と原理から逸脱することなく修正、同等な置換、改善などを行った場合に、いずれも本願の特許請求の範囲に含まれるものとする。