(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024081785
(43)【公開日】2024-06-18
(54)【発明の名称】符号化及び復号方法、装置及びデバイス
(51)【国際特許分類】
H04N 19/513 20140101AFI20240611BHJP
H04N 19/105 20140101ALI20240611BHJP
H04N 19/176 20140101ALI20240611BHJP
H04N 19/139 20140101ALI20240611BHJP
H04N 19/147 20140101ALI20240611BHJP
H04N 19/159 20140101ALI20240611BHJP
【FI】
H04N19/513 200
H04N19/105
H04N19/176
H04N19/139
H04N19/147
H04N19/159
【審査請求】有
【請求項の数】12
【出願形態】OL
(21)【出願番号】P 2024060914
(22)【出願日】2024-04-04
(62)【分割の表示】P 2022520621の分割
【原出願日】2020-10-28
(31)【優先権主張番号】201911072766.X
(32)【優先日】2019-11-05
(33)【優先権主張国・地域又は機関】CN
(71)【出願人】
【識別番号】508219313
【氏名又は名称】杭州海康威視数字技術股▲フン▼有限公司
(74)【代理人】
【識別番号】100110364
【弁理士】
【氏名又は名称】実広 信哉
(74)【代理人】
【識別番号】100133400
【弁理士】
【氏名又は名称】阿部 達彦
(72)【発明者】
【氏名】▲陳▼ 方▲棟▼
(57)【要約】 (修正有)
【課題】符号化性能を向上させる符号化及び復号方法、装置及びデバイスを提供する。
【解決手段】復号方法は、現在ブロックに対して動きベクトル調整モードを用いると決定する場合、現在ブロックに含まれる少なくとも1つのサブブロックのうちの各サブブロックに対して、サブブロックの第1のオリジナル動きベクトルに基づいて第1の参照ブロックを決定し、サブブロックの第2のオリジナル動きベクトルに基づいて第2の参照ブロックを決定するステップと、第1のオリジナル動きベクトル及び第2のオリジナル動きベクトルを調整し、第1のターゲット動きベクトル及び第2のターゲット動きベクトルを得るステップと、第1のターゲット動きベクトル及び第2のターゲット動きベクトルに基づいてサブブロックの予測値を決定するステップと、全てのサブブロックの予測値に基づいて現在ブロックの予測値を決定するステップと、を含む。
【選択図】
図4
【特許請求の範囲】
【請求項1】
復号方法であって、
現在ブロックに対して動きベクトル調整モードを用いると決定する場合、前記動きベクトル調整モードに基づいて前記現在ブロックに対して動き補償を行い、前記現在ブロックの予測値を取得するステップを含み、
前記動きベクトル調整モードに基づいて前記現在ブロックに対して動き補償を行い、前記現在ブロックの予測値を取得するステップは、
前記現在ブロックに含まれる少なくとも1つのサブブロックのうちの各サブブロックに対して、
前記サブブロックの第1のオリジナル動きベクトルに基づいて前記サブブロックに対応する第1の参照ブロックを決定し、前記サブブロックの第2のオリジナル動きベクトルに基づいて、前記サブブロックに対応する第2の参照ブロックを決定するステップと、
前記第1の参照ブロックの第1の画素値及び前記第2の参照ブロックの第2の画素値に基づいて、前記第1のオリジナル動きベクトル及び前記第2のオリジナル動きベクトルを調整し、前記第1のオリジナル動きベクトルに対応する第1のターゲット動きベクトル及び前記第2のオリジナル動きベクトルに対応する第2のターゲット動きベクトルを得るステップと、
前記第1のターゲット動きベクトル及び前記第2のターゲット動きベクトルに基づいて前記サブブロックの予測値を決定するステップと、
全てのサブブロックの予測値に基づいて前記現在ブロックの予測値を決定するステップと、を含み、
ピクチャレベル制御情報が、現在ブロックが動きベクトル調整モードをイネーブルすることを示すように構成されることと、
現在ブロックが普通融合モードを用いること、
現在ブロックがインターイントラ予測の組合せ(CIIP)モード及び動き差分符号化の融合(MMVD)モードを用いないこと、
現在ブロックが双方向の予測を用いること、
ここで、現在ブロックの予測値が、双方向の予測に用いられる2つの参照ピクチャの参照ブロックを重み付けて取得され、現在ブロックの2つの参照ピクチャの重み付けウェイトが同じであり、2つの参照ピクチャの方向が異なり、一方の参照ピクチャが現在ピクチャの前にあり、他方の参照ピクチャが現在ピクチャの後にあり、前記2つの参照ピクチャから前記現在ピクチャまでの距離が同じであること、
ここで、重み付けウェイトが同じであることは、ピクチャレベルの重み付けウェイトが同じであること、及びブロックレベルの重み付けウェイトが同じであることを含むこと、
前記2つの参照ピクチャがともに短期参照ピクチャであること、
前記2つの参照ピクチャのサイズがともに前記現在ピクチャのサイズと同じであること、
現在ブロックのサイズが、幅が8以上、高さが8以上、面積が128以上であること、を含む条件が満たされる場合、現在ブロックに対して動きベクトル調整モードを用いると決定するステップを更に含み、
前記第1の参照ブロックの第1の画素値及び前記第2の参照ブロックの第2の画素値に基づいて、前記第1のオリジナル動きベクトル及び前記第2のオリジナル動きベクトルを調整し、前記第1のオリジナル動きベクトルに対応する第1のターゲット動きベクトル及び前記第2のオリジナル動きベクトルに対応する第2のターゲット動きベクトルを得るステップは、
初期動きベクトルの周りの、該初期動きベクトルを含む(2*SR+1)*(2*SR+1)個の動きベクトルから、全ての動きベクトルを候補動きベクトルとして選択するステップと、
前記第1の参照ブロックの第1の画素値及び前記第2の参照ブロックの第2の画素値に基づいて前記候補動きベクトルのコスト値を決定し、コスト値が最も小さい動きベクトルを最適な動きベクトルとするステップと、
前記最適な動きベクトルに基づいて前記第1のオリジナル動きベクトル及び前記第2のオリジナル動きベクトルを調整し、前記第1のオリジナル動きベクトルに対応する第1のターゲット動きベクトル及び前記第2のオリジナル動きベクトルに対応する第2のターゲット動きベクトルを得るステップと、を含み、
前記初期動きベクトルは、前記第1のオリジナル動きベクトル又は前記第2のオリジナル動きベクトルであり、
SRは、探索範囲を表し、SRの値が2である場合、25個の候補動きベクトルの探索の順序は、{Mv(0,0),Mv(-2,-2),Mv(-1,-2),Mv(0,-2),Mv(1,-2),Mv(2,-2),Mv(-2,-1),Mv(-1,-1),Mv(0,-1),Mv(1,-1),Mv(2,-1),Mv(-2,0),Mv(-1,0),Mv(0,0),Mv(1,0),Mv(2,0),Mv(-2,1),Mv(-1,1),Mv(0,1),Mv(1,1),Mv(2,1),Mv(-2,2),Mv(-1,2),Mv(0,2),Mv(1,2),Mv(2,2)}であり、Mv(0,0)は、前記初期動きベクトルであり、Mv(0,0)を除く他の候補動きベクトルは、前記初期動きベクトルのオフセット動きベクトルであることを特徴とする復号方法。
【請求項2】
前記サブブロックの第1のオリジナル動きベクトルに基づいて前記サブブロックに対応する第1の参照ブロックを決定し、前記サブブロックの第2のオリジナル動きベクトルに基づいて、前記サブブロックに対応する第2の参照ブロックを決定するステップは、
前記サブブロックの第1のオリジナル動きベクトルに基づいて、第1の参照ピクチャから前記サブブロックに対応する第1の参照ブロックを決定するステップであって、前記第1の参照ブロックにおける各画素点の画素値は、第1の参照ブロックにおける近傍画素点の画素値を補間して得られるものであるか、又は、第1の参照ブロックにおける近傍画素点の画素値をコピーして得られるものである、ステップと、
前記サブブロックの第2のオリジナル動きベクトルに基づいて、第2の参照ピクチャから前記サブブロックに対応する第2の参照ブロックを決定するステップであって、前記第2の参照ブロックにおける各画素点の画素値は、第2の参照ブロックにおける近傍画素点の画素値を補間して得られるものであるか、又は、第2の参照ブロックにおける近傍画素点の画素値をコピーして得られるものである、ステップと、を含むことを特徴とする請求項1に記載の方法。
【請求項3】
ピクチャレベル制御情報が、現在ブロックが動きベクトル調整モードをイネーブルすることを示すように構成されること、
現在ブロックが普通融合モードを用いること、
現在ブロックがインターイントラ予測の組合せ(CIIP)モード及び動き差分符号化の融合(MMVD)モードを用いないことと、
現在ブロックが双方向の予測を用いること、
ここで、現在ブロックの予測値が、双方向の予測に用いられる2つの参照ピクチャの参照ブロックを重み付けて取得され、現在ブロックの2つの参照ピクチャの重み付けウェイトが同じであり、2つの参照ピクチャの方向が異なり、一方の参照ピクチャが現在ピクチャの前にあり、他方の参照ピクチャが現在ピクチャの後にあり、前記2つの参照ピクチャから前記現在ピクチャまでの距離が同じであること、
ここで、重み付けウェイトが同じであることは、ピクチャレベルの重み付けウェイトが同じであること、及びブロックレベルの重み付けウェイトが同じであることを含むこと、
前記2つの参照ピクチャがともに短期参照ピクチャであること、
前記2つの参照ピクチャのサイズがともに前記現在ピクチャのサイズと同じであること、
現在ブロックのサイズが、幅が8以上、高さが8以上、面積が128以上であること、を含む条件のうちのいずれかが満たされない場合、現在ブロックに対して動きベクトル調整モードを用いないと決定するステップを更に含む、ことを特徴とする請求項1に記載の方法。
【請求項4】
符号化方法であって、
現在ブロックに対して動きベクトル調整モードを用いると決定する場合、前記動きベクトル調整モードに基づいて前記現在ブロックに対して符号化を行うステップを含み、
前記動きベクトル調整モードに基づいて前記現在ブロックに対して符号化を行うステップは、
前記現在ブロックに含まれる少なくとも1つのサブブロックのうちの各サブブロックに対して、
前記サブブロックの第1のオリジナル動きベクトルに基づいて前記サブブロックに対応する第1の参照ブロックを決定し、前記サブブロックの第2のオリジナル動きベクトルに基づいて、前記サブブロックに対応する第2の参照ブロックを決定するステップと、
前記第1の参照ブロックの第1の画素値及び前記第2の参照ブロックの第2の画素値に基づいて、前記第1のオリジナル動きベクトル及び前記第2のオリジナル動きベクトルを調整し、前記第1のオリジナル動きベクトルに対応する第1のターゲット動きベクトル及び前記第2のオリジナル動きベクトルに対応する第2のターゲット動きベクトルを得るステップと、
前記第1のターゲット動きベクトル及び前記第2のターゲット動きベクトルに基づいて前記サブブロックの予測値を決定するステップと、
全てのサブブロックの予測値に基づいて前記現在ブロックの予測値を決定するステップと、を含み、
ピクチャレベル制御情報が、現在ブロックが動きベクトル調整モードをイネーブルすることを示すように構成されることと、
現在ブロックが普通融合モードを用いること、
現在ブロックがインターイントラ予測の組合せ(CIIP)モード及び動き差分符号化の融合(MMVD)モードを用いないこと、
現在ブロックが双方向の予測を用いること、
ここで、現在ブロックの予測値が、双方向の予測に用いられる2つの参照ピクチャの参照ブロックを重み付けて取得され、現在ブロックの2つの参照ピクチャの重み付けウェイトが同じであり、2つの参照ピクチャの方向が異なり、一方の参照ピクチャが現在ピクチャの前にあり、他方の参照ピクチャが現在ピクチャの後にあり、前記2つの参照ピクチャから前記現在ピクチャまでの距離が同じであること、
ここで、重み付けウェイトが同じであることは、ピクチャレベルの重み付けウェイトが同じであること、及びブロックレベルの重み付けウェイトが同じであることを含むこと、
前記2つの参照ピクチャがともに短期参照ピクチャであること、
前記2つの参照ピクチャのサイズがともに前記現在ピクチャのサイズと同じであること、
現在ブロックのサイズが、幅が8以上、高さが8以上、面積が128以上であること、を含む条件が満たされる場合、現在ブロックに対して動きベクトル調整モードを用いると決定するステップを更に含み、
前記第1の参照ブロックの第1の画素値及び前記第2の参照ブロックの第2の画素値に基づいて、前記第1のオリジナル動きベクトル及び前記第2のオリジナル動きベクトルを調整し、前記第1のオリジナル動きベクトルに対応する第1のターゲット動きベクトル及び前記第2のオリジナル動きベクトルに対応する第2のターゲット動きベクトルを得るステップは、
初期動きベクトルの周りの、該初期動きベクトルを含む(2*SR+1)*(2*SR+1)個の動きベクトルから、全ての動きベクトルを候補動きベクトルとして選択するステップと、
前記第1の参照ブロックの第1の画素値及び前記第2の参照ブロックの第2の画素値に基づいて前記候補動きベクトルのコスト値を決定し、コスト値が最も小さい動きベクトルを最適な動きベクトルとするステップと、
前記最適な動きベクトルに基づいて前記第1のオリジナル動きベクトル及び前記第2のオリジナル動きベクトルを調整し、前記第1のオリジナル動きベクトルに対応する第1のターゲット動きベクトル及び前記第2のオリジナル動きベクトルに対応する第2のターゲット動きベクトルを得るステップと、を含み、
前記初期動きベクトルは、前記第1のオリジナル動きベクトル又は前記第2のオリジナル動きベクトルであり、
SRは、探索範囲を表し、SRの値が2である場合、25個の候補動きベクトルの探索の順序は、{Mv(0,0),Mv(-2,-2),Mv(-1,-2),Mv(0,-2),Mv(1,-2),Mv(2,-2),Mv(-2,-1),Mv(-1,-1),Mv(0,-1),Mv(1,-1),Mv(2,-1),Mv(-2,0),Mv(-1,0),Mv(0,0),Mv(1,0),Mv(2,0),Mv(-2,1),Mv(-1,1),Mv(0,1),Mv(1,1),Mv(2,1),Mv(-2,2),Mv(-1,2),Mv(0,2),Mv(1,2),Mv(2,2)}であり、Mv(0,0)は、前記初期動きベクトルであり、Mv(0,0)を除く他の候補動きベクトルは、前記初期動きベクトルのオフセット動きベクトルであることを特徴とする符号化方法。
【請求項5】
復号装置であって、
現在ブロックに対して動きベクトル調整モードを用いると決定するための決定モジュールと、
現在ブロックに対して動きベクトル調整モードを用いると決定する場合、前記動きベクトル調整モードに基づいて前記現在ブロックに対して動き補償を行い、前記現在ブロックの予測値を取得するための動き補償モジュールと、を備え、
前記動き補償モジュールは、
前記現在ブロックに含まれる少なくとも1つのサブブロックのうちの各サブブロックに対して、
前記サブブロックの第1のオリジナル動きベクトルに基づいて前記サブブロックに対応する第1の参照ブロックを決定し、前記サブブロックの第2のオリジナル動きベクトルに基づいて、前記サブブロックに対応する第2の参照ブロックを決定し、
前記第1の参照ブロックの第1の画素値及び前記第2の参照ブロックの第2の画素値に基づいて、前記第1のオリジナル動きベクトル及び前記第2のオリジナル動きベクトルを調整し、前記第1のオリジナル動きベクトルに対応する第1のターゲット動きベクトル及び前記第2のオリジナル動きベクトルに対応する第2のターゲット動きベクトルを得、
前記第1のターゲット動きベクトル及び前記第2のターゲット動きベクトルに基づいて前記サブブロックの予測値を決定し、
全てのサブブロックの予測値に基づいて前記現在ブロックの予測値を決定するために使用され、
前記動き補償モジュールは、更に、
ピクチャレベル制御情報が、現在ブロックが動きベクトル調整モードをイネーブルすることを示すように構成されることと、
現在ブロックが普通融合モードを用いること、
現在ブロックがインターイントラ予測の組合せ(CIIP)モード及び動き差分符号化の融合(MMVD)モードを用いないこと、
現在ブロックが双方向の予測を用いること、
ここで、現在ブロックの予測値が、双方向の予測に用いられる2つの参照ピクチャの参照ブロックを重み付けて取得され、現在ブロックの2つの参照ピクチャの重み付けウェイトが同じであり、2つの参照ピクチャの方向が異なり、一方の参照ピクチャが現在ピクチャの前にあり、他方の参照ピクチャが現在ピクチャの後にあり、前記2つの参照ピクチャから前記現在ピクチャまでの距離が同じであること、
ここで、重み付けウェイトが同じであることは、ピクチャレベルの重み付けウェイトが同じであること、及びブロックレベルの重み付けウェイトが同じであることを含むこと、
前記2つの参照ピクチャがともに短期参照ピクチャであること、
前記2つの参照ピクチャのサイズがともに前記現在ピクチャのサイズと同じであること、
現在ブロックのサイズが、幅が8以上、高さが8以上、面積が128以上であること、を含む条件が満たされる場合、現在ブロックに対して動きベクトル調整モードを用いると決定するために使用され、
前記第1の参照ブロックの第1の画素値及び前記第2の参照ブロックの第2の画素値に基づいて、前記第1のオリジナル動きベクトル及び前記第2のオリジナル動きベクトルを調整し、前記第1のオリジナル動きベクトルに対応する第1のターゲット動きベクトル及び前記第2のオリジナル動きベクトルに対応する第2のターゲット動きベクトルを得ることは、
初期動きベクトルの周りの、該初期動きベクトルを含む(2*SR+1)*(2*SR+1)個の動きベクトルから、全ての動きベクトルを候補動きベクトルとして選択することと、
前記第1の参照ブロックの第1の画素値及び前記第2の参照ブロックの第2の画素値に基づいて前記候補動きベクトルのコスト値を決定し、コスト値が最も小さい動きベクトルを最適な動きベクトルとすることと、
前記最適な動きベクトルに基づいて前記第1のオリジナル動きベクトル及び前記第2のオリジナル動きベクトルを調整し、前記第1のオリジナル動きベクトルに対応する第1のターゲット動きベクトル及び前記第2のオリジナル動きベクトルに対応する第2のターゲット動きベクトルを得ることと、を含み、
前記初期動きベクトルは、前記第1のオリジナル動きベクトル又は前記第2のオリジナル動きベクトルであり、
SRは、探索範囲を表し、SRの値が2である場合、25個の候補動きベクトルの探索の順序は、{Mv(0,0),Mv(-2,-2),Mv(-1,-2),Mv(0,-2),Mv(1,-2),Mv(2,-2),Mv(-2,-1),Mv(-1,-1),Mv(0,-1),Mv(1,-1),Mv(2,-1),Mv(-2,0),Mv(-1,0),Mv(0,0),Mv(1,0),Mv(2,0),Mv(-2,1),Mv(-1,1),Mv(0,1),Mv(1,1),Mv(2,1),Mv(-2,2),Mv(-1,2),Mv(0,2),Mv(1,2),Mv(2,2)}であり、Mv(0,0)は、前記初期動きベクトルであり、Mv(0,0)を除く他の候補動きベクトルは、前記初期動きベクトルのオフセット動きベクトルであることを特徴とする復号装置。
【請求項6】
前記動き補償モジュールは、更に、
ピクチャレベル制御情報が、現在ブロックが動きベクトル調整モードをイネーブルすることを示すように構成されること、
現在ブロックが普通融合モードを用いること、
現在ブロックがインターイントラ予測の組合せ(CIIP)モード及び動き差分符号化の融合(MMVD)モードを用いないことと、
現在ブロックが双方向の予測を用いること、
ここで、現在ブロックの予測値が、双方向の予測に用いられる2つの参照ピクチャの参照ブロックを重み付けて取得され、現在ブロックの2つの参照ピクチャの重み付けウェイトが同じであり、2つの参照ピクチャの方向が異なり、一方の参照ピクチャが現在ピクチャの前にあり、他方の参照ピクチャが現在ピクチャの後にあり、前記2つの参照ピクチャから前記現在ピクチャまでの距離が同じであること、
ここで、重み付けウェイトが同じであることは、ピクチャレベルの重み付けウェイトが同じであること、及びブロックレベルの重み付けウェイトが同じであることを含むこと、
前記2つの参照ピクチャがともに短期参照ピクチャであること、
前記2つの参照ピクチャのサイズがともに前記現在ピクチャのサイズと同じであること、
現在ブロックのサイズが、幅が8以上、高さが8以上、面積が128以上であること、を含む条件のうちのいずれかが満たされない場合、現在ブロックに対して動きベクトル調整モードを用いないと決定するために使用される、ことを特徴とする請求項5に記載の装置。
【請求項7】
前記動き補償モジュールは、前記サブブロックの第1のオリジナル動きベクトルに基づいて前記サブブロックに対応する第1の参照ブロックを決定し、前記サブブロックの第2のオリジナル動きベクトルに基づいて、前記サブブロックに対応する第2の参照ブロックを決定するとき、
前記サブブロックの第1のオリジナル動きベクトルに基づいて、第1の参照ピクチャから前記サブブロックに対応する第1の参照ブロックを決定するために使用され、前記第1の参照ブロックにおける各画素点の画素値は、第1の参照ブロックにおける近傍画素点の画素値を補間して得られるものであるか、又は、第1の参照ブロックにおける近傍画素点の画素値をコピーして得られるものであり、
前記サブブロックの第2のオリジナル動きベクトルに基づいて、第2の参照ピクチャから前記サブブロックに対応する第2の参照ブロックを決定するために使用され、前記第2の参照ブロックにおける各画素点の画素値は、第2の参照ブロックにおける近傍画素点の画素値を補間して得られるものであるか、又は、第2の参照ブロックにおける近傍画素点の画素値をコピーして得られるものであることを特徴とする請求項5に記載の装置。
【請求項8】
符号化装置であって、
現在ブロックに対して動きベクトル調整モードを用いると決定するための決定モジュールと、
現在ブロックに対して動きベクトル調整モードを用いると決定する場合、前記動きベクトル調整モードに基づいて前記現在ブロックに対して符号化を行うための動き補償モジュールと、を備え、
前記動き補償モジュールは、
前記現在ブロックに含まれる少なくとも1つのサブブロックのうちの各サブブロックに対して、
前記サブブロックの第1のオリジナル動きベクトルに基づいて前記サブブロックに対応する第1の参照ブロックを決定し、前記サブブロックの第2のオリジナル動きベクトルに基づいて、前記サブブロックに対応する第2の参照ブロックを決定し、
前記第1の参照ブロックの第1の画素値及び前記第2の参照ブロックの第2の画素値に基づいて、前記第1のオリジナル動きベクトル及び前記第2のオリジナル動きベクトルを調整し、前記第1のオリジナル動きベクトルに対応する第1のターゲット動きベクトル及び前記第2のオリジナル動きベクトルに対応する第2のターゲット動きベクトルを得、
前記第1のターゲット動きベクトル及び前記第2のターゲット動きベクトルに基づいて前記サブブロックの予測値を決定し、
全てのサブブロックの予測値に基づいて前記現在ブロックの予測値を決定するために使用され、
前記動き補償モジュールは、更に、
ピクチャレベル制御情報が、現在ブロックが動きベクトル調整モードをイネーブルすることを示すように構成されることと、
現在ブロックが普通融合モードを用いること、
現在ブロックがインターイントラ予測の組合せ(CIIP)モード及び動き差分符号化の融合(MMVD)モードを用いないこと、
現在ブロックが双方向の予測を用いること、
ここで、現在ブロックの予測値が、双方向の予測に用いられる2つの参照ピクチャの参照ブロックを重み付けて取得され、現在ブロックの2つの参照ピクチャの重み付けウェイトが同じであり、2つの参照ピクチャの方向が異なり、一方の参照ピクチャが現在ピクチャの前にあり、他方の参照ピクチャが現在ピクチャの後にあり、前記2つの参照ピクチャから前記現在ピクチャまでの距離が同じであること、
ここで、重み付けウェイトが同じであることは、ピクチャレベルの重み付けウェイトが同じであること、及びブロックレベルの重み付けウェイトが同じであることを含むこと、
前記2つの参照ピクチャがともに短期参照ピクチャであること、
前記2つの参照ピクチャのサイズがともに前記現在ピクチャのサイズと同じであること、
現在ブロックのサイズが、幅が8以上、高さが8以上、面積が128以上であること、を含む条件が満たされる場合、現在ブロックに対して動きベクトル調整モードを用いると決定するために使用され、
前記第1の参照ブロックの第1の画素値及び前記第2の参照ブロックの第2の画素値に基づいて、前記第1のオリジナル動きベクトル及び前記第2のオリジナル動きベクトルを調整し、前記第1のオリジナル動きベクトルに対応する第1のターゲット動きベクトル及び前記第2のオリジナル動きベクトルに対応する第2のターゲット動きベクトルを得ることは、
初期動きベクトルの周りの、該初期動きベクトルを含む(2*SR+1)*(2*SR+1)個の動きベクトルから、全ての動きベクトルを候補動きベクトルとして選択することと、
前記第1の参照ブロックの第1の画素値及び前記第2の参照ブロックの第2の画素値に基づいて前記候補動きベクトルのコスト値を決定し、コスト値が最も小さい動きベクトルを最適な動きベクトルとすることと、
前記最適な動きベクトルに基づいて前記第1のオリジナル動きベクトル及び前記第2のオリジナル動きベクトルを調整し、前記第1のオリジナル動きベクトルに対応する第1のターゲット動きベクトル及び前記第2のオリジナル動きベクトルに対応する第2のターゲット動きベクトルを得ることと、を含み、
前記初期動きベクトルは、前記第1のオリジナル動きベクトル又は前記第2のオリジナル動きベクトルであり、
SRは、探索範囲を表し、SRの値が2である場合、25個の候補動きベクトルの探索の順序は、{Mv(0,0),Mv(-2,-2),Mv(-1,-2),Mv(0,-2),Mv(1,-2),Mv(2,-2),Mv(-2,-1),Mv(-1,-1),Mv(0,-1),Mv(1,-1),Mv(2,-1),Mv(-2,0),Mv(-1,0),Mv(0,0),Mv(1,0),Mv(2,0),Mv(-2,1),Mv(-1,1),Mv(0,1),Mv(1,1),Mv(2,1),Mv(-2,2),Mv(-1,2),Mv(0,2),Mv(1,2),Mv(2,2)}であり、Mv(0,0)は、前記初期動きベクトルであり、Mv(0,0)を除く他の候補動きベクトルは、前記初期動きベクトルのオフセット動きベクトルであることを特徴とする符号化装置。
【請求項9】
復号デバイスであって、プロセッサ及び機械読み取り可能な記憶媒体を含み、
前記機械読み取り可能な記憶媒体には、前記プロセッサにより実行可能な機械実行可能命令が記憶され、
前記プロセッサは、機械実行可能命令を実行することで、請求項1~請求項3のいずれか1項に記載の復号方法を実施するために用いられることを特徴とする復号デバイス。
【請求項10】
符号化デバイスであって、プロセッサ及び機械読み取り可能な記憶媒体を含み、
前記機械読み取り可能な記憶媒体には、前記プロセッサにより実行可能な機械実行可能命令が記憶され、
前記プロセッサは、機械実行可能命令を実行することで、請求項4に記載の符号化方法を実施するために用いられることを特徴とする符号化デバイス。
【請求項11】
コンピュータ命令が記憶されている非一時的記憶媒体であって、
前記コンピュータ命令がプロセッサによって実行されるとき、請求項1~請求項3のいずれか1項に記載の復号方法が実施されることを特徴とする非一時的記憶媒体。
【請求項12】
コンピュータ命令が記憶されている非一時的記憶媒体であって、
前記コンピュータ命令がプロセッサによって実行されるとき、請求項4に記載の符号化方法が実施されることを特徴とする非一時的記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は符号化及び復号技術分野に関し、特に符号化及び復号方法、装置及びデバイスに関する。
【背景技術】
【0002】
空間を節約する目的を達成するために、ビデオ画像は全て符号化されてから伝送され、完全なビデオ符号化方法は、予測、変換、量子化、エントロピー符号化、フィルタリングなどのプロセスを含むことができる。予測符号化は、イントラ符号化及びインター符号化を含み、インター符号化は、ビデオ時間域の関連性を利用して、近傍した符号化された画像の画素を用いて現在の画像の画素を予測し、ビデオの時間領域の冗長性を効果的に除去する目的を達成する。インター符号化では、動きベクトル(Motion Vector、MV)を用いて、現在ピクチャの現在ブロックと参照ピクチャの参照ブロックとの間の相対変位を表すことができる。例えば、現在ピクチャAと参照ピクチャBとの時間領域関連性が高く、現在ピクチャAの現在ブロックA1を伝送する必要があると、参照ピクチャBにおいて動き探索を行い、現在ブロックA1と最もマッチングするブロックB1(すなわち、参照ブロック)を探索し、現在ブロックA1と参照ブロックB1との間の相対変位を決定し、該相対変位は、現在ブロックA1の動きベクトルである。符号化側は、現在ブロックA1を復号側に送信するのではなく、動きベクトルを復号側に送信し、復号側は動きベクトル及び参照ブロックB1に基づいて現在ブロックA1を得ることができる。明らかに、動きベクトルが占有するビット数は、現在ブロックA1が占有するビット数より小さいので、大量のビットを節約することができる。
【0003】
関連技術では、現在ブロックが単方向ブロックである場合、現在ブロックの動きベクトル(以降、オリジナル動きベクトルと呼ばれる)を取得した後、オリジナル動きベクトルを調整し、調整後の動きベクトルに基づいて符号化/復号することができ、符号化性能を向上させる。しかし、現在ブロックが双方向ブロックである場合、現在ブロックの第1のオリジナル動きベクトル及び第2のオリジナル動きベクトルを取得した後、例えば、どのように第1のオリジナル動きベクトル及び第2のオリジナル動きベクトルを調整するかは、現在、合理的な解決策がなく、つまり、双方向のブロックのシーンでは、高くない予測品質、予測エラーなどの問題があるため、符号化性能が低下する。
【発明の概要】
【0004】
本発明は、符号化及び復号方法、装置及びデバイスを提供し、符号化性能を向上させることができる。
【0005】
本発明は符号化及び復号方法を提供し、前記方法は、
制御情報として、現在ブロックが動きベクトル調整モードを用いることを許可するという条件、
現在ブロックの予測モードが普通融合モードであるか、又は、現在ブロックの予測モードが融合モード又はスキップモードであり、現在ブロックの予測モードが普通融合モード以外の他のモードではないという条件、
現在ブロックの予測値が2つの参照ピクチャからの参照ブロックを重み付けて取得され、前記2つの参照ピクチャの表示順序がそれぞれ現在ピクチャの前と後にあり、前記2つの参照ピクチャから現在ピクチャまでの距離が同じであるという条件、
現在ブロックの2つの参照ピクチャの重み付けウェイトが同じであるという条件、
現在ブロックの2つの参照ピクチャがともに短期参照ピクチャであるという条件、
現在ブロックの幅、高さ及び面積が全て限定範囲内にあるという条件、
現在ブロックの2つの参照ピクチャのサイズがともに現在ピクチャのサイズと同じであるという条件が全て満たされれば、現在ブロックに対して動きベクトル調整モードを起動すると決定するステップと、
現在ブロックに対して動きベクトル調整モードを起動すると決定する場合、前記現在ブロックに対して動き補償を行うステップとを含む。
【0006】
本発明は符号化及び復号装置を提供し、前記装置は、
制御情報として、現在ブロックが動きベクトル調整モードを用いることを許可するという条件、
現在ブロックの予測モードが普通融合モードであるか、又は、現在ブロックの予測モードが融合モード又はスキップモードであり、現在ブロックの予測モードが普通融合モード以外の他のモードではないという条件、
現在ブロックの予測値が2つの参照ピクチャからの参照ブロックを重み付けて取得され、前記2つの参照ピクチャの表示順序がそれぞれ現在ピクチャの前と後にあり、前記2つの参照ピクチャから現在ピクチャまでの距離が同じであるという条件、
現在ブロックの2つの参照ピクチャの重み付けウェイトが同じであるという条件、
現在ブロックの2つの参照ピクチャがともに短期参照ピクチャであるという条件、
現在ブロックの幅、高さ及び面積が全て限定範囲内にあるという条件、
現在ブロックの2つの参照ピクチャのサイズがともに現在ピクチャのサイズと同じであるという条件が全て満たされれば、現在ブロックに対して動きベクトル調整モードを起動すると決定するための決定モジュールと、
現在ブロックに対して動きベクトル調整モードを起動すると決定する場合、現在ブロックに対して動き補償を行うための動き補償モジュールとを含む。
【0007】
本発明は、符号化デバイスを提供し、プロセッサ及び機械読み取り可能な記憶媒体を含み、前記機械読み取り可能な記憶媒体には、前記プロセッサにより実行可能な機械実行可能命令が記憶され、
前記プロセッサは、機械実行可能命令を実行することで、以下のステップを実現するために用いられる。
制御情報として、現在ブロックが動きベクトル調整モードを用いることを許可するという条件、
現在ブロックの予測モードが普通融合モードであるか、又は、現在ブロックの予測モードが融合モード又はスキップモードであり、現在ブロックの予測モードが普通融合モード以外の他のモードではないという条件、
現在ブロックの予測値が2つの参照ピクチャからの参照ブロックを重み付けて取得され、前記2つの参照ピクチャの表示順序がそれぞれ現在ピクチャの前と後にあり、前記2つの参照ピクチャから現在ピクチャまでの距離が同じであるという条件、
現在ブロックの2つの参照ピクチャの重み付けウェイトが同じであるという条件、
現在ブロックの2つの参照ピクチャがともに短期参照ピクチャであるという条件、
現在ブロックの幅、高さ及び面積が全て限定範囲内にあるという条件、
現在ブロックの2つの参照ピクチャのサイズがともに現在ピクチャのサイズと同じであるという条件が全て満たされれば、現在ブロックに対して動きベクトル調整モードを起動すると決定するステップ、
現在ブロックに対して動きベクトル調整モードを起動すると決定する場合、前記現在ブロックに対して動き補償を行うステップ。
【0008】
本発明は、復号デバイスを提供し、プロセッサ及び機械読み取り可能な記憶媒体を含み、前記機械読み取り可能な記憶媒体には、前記プロセッサにより実行可能な機械実行可能命令が記憶され、
前記プロセッサは、機械実行可能命令を実行することで、以下のステップを実現するために用いられる。
制御情報として、現在ブロックが動きベクトル調整モードを用いることを許可するという条件、
現在ブロックの予測モードが普通融合モードであるか、又は、現在ブロックの予測モードが融合モード又はスキップモードであり、現在ブロックの予測モードが普通融合モード以外の他のモードではないという条件、
現在ブロックの予測値が2つの参照ピクチャからの参照ブロックを重み付けて取得され、前記2つの参照ピクチャの表示順序がそれぞれ現在ピクチャの前と後にあり、前記2つの参照ピクチャから現在ピクチャまでの距離が同じであるという条件、
現在ブロックの2つの参照ピクチャの重み付けウェイトが同じであるという条件、
現在ブロックの2つの参照ピクチャがともに短期参照ピクチャであるという条件、
現在ブロックの幅、高さ及び面積が全て限定範囲内にあるという条件、
現在ブロックの2つの参照ピクチャのサイズがともに現在ピクチャのサイズと同じであるという条件が全て満たされれば、現在ブロックに対して動きベクトル調整モードを起動すると決定するステップ、
現在ブロックに対して動きベクトル調整モードを起動すると決定する場合、前記現在ブロックに対して動き補償を行うステップ。
【発明の効果】
【0009】
以上の技術的解決手段からわかるように、本発明の実施例では、現在ブロックに対して動きベクトル調整モードを起動すると決定する場合、第1のオリジナル動きベクトル及び第2のオリジナル動きベクトルに基づいて予測値を決定するのではなく、第1のオリジナル動きベクトル及び第2のオリジナル動きベクトルに基づいて第1のターゲット動きベクトル及び第2のターゲット動きベクトルを取得し、第1のターゲット動きベクトル及び第2のターゲット動きベクトルに基づいて予測値を決定し、高くない予測品質や予測誤差などの問題を解決し、符号化性能及び符号化効率を向上させる。
【図面の簡単な説明】
【0010】
【
図1A】本発明の一実施の形態における補間の概略図である。
【
図1B】本発明の一実施の形態におけるビデオ符号化フレームワークの概略図である。
【
図2】本発明の一実施の形態における符号化及び復号方法のフローチャートである。
【
図3】本発明の一実施の形態における符号化及び復号方法のフローチャートである。
【
図4】本発明の一実施の形態における符号化及び復号方法のフローチャートである。
【
図5】本発明の一実施の形態で取得された参照ブロックの概略図である。
【
図6】本発明の一実施の形態における動きベクトルの反復の概略図である。
【
図7A】本発明の一実施の形態における候補点の順序の概略図である。
【
図7B】本発明の一実施の形態における候補点の順序の概略図である。
【
図7C】本発明の一実施の形態における候補点の順序の概略図である。
【
図7D】本発明の一実施の形態における候補点の順序の概略図である。
【
図7E】本発明の一実施の形態における候補点の順序の概略図である。
【
図7F】本発明の一実施の形態における候補点の順序の概略図である。
【
図7G】本発明の一実施の形態における候補点の順序の概略図である。
【
図8】本発明の一実施の形態における参照ブロックを拡張する概略図である。
【
図9A】本発明の一実施の形態における符号化及び復号装置の構造図である。
【
図9B】本発明の一実施の形態における復号デバイスのハードウェアアーキテクチャ図である。
【
図9C】本発明の一実施の形態における符号化デバイスのハードウェアアーキテクチャ図である。
【発明を実施するための形態】
【0011】
本発明の実施形態において使用される用語は、本発明の実施形態を限定するものではなく、特定の実施形態を説明する目的でのみ使用されるものである。本願の実施形態及び特許請求の範囲において使用される単数形の「1つ」、「記載」及び「この」は、文脈が他の意味を明確に示さない限り、複数形を含むことも意図される。本明細書で使用される用語の「及び/または」は、関連してリストされた1つまたは複数のアイテムを含む任意のまたは全ての可能な組合せを意味することも理解されたい。本発明の実施形態では、用語の第1、第2、第3を適用して多様な情報を説明する可能性があるが、これらの情報はこれらに限定されるべきではないことを理解されたい。これらの用語は、同一類型の情報を相互に区別するためにのみ使用される。例えば、本願の範囲から逸脱することなく、第1の情報は第2の情報と称されてもよく、同様に、第2の情報は第1の情報と称されてもよい。文脈によって、なお、使用される言葉の「若し」は、「…するとき」又は「…する場合」又は「…に応えて」として解釈することができる。
【0012】
本発明の実施例では、符号化及び復号方法、装置及びデバイスを提供し、以下の概念に関する。
【0013】
イントラ予測及びインター予測(intra prediction and inter prediction)技術:イントラ(フレーム内)予測とは、ビデオの空間領域の関連性を利用して、現在の画像の符号化されたブロックの画素を用いて現在の画素を予測することによって、ビデオの空間領域の冗長性を除去する目的を達成することである。インター(フレーム間)予測とは、ビデオの時間領域の関連性を利用し、ビデオシーケンスが通常より高い時間領域関連性を持っているため、近傍した符号化された画像画素を用いて現在の画像の画素を予測することによって、ビデオの時間領域の冗長性を効果的に除去するという目的を達成することである。主なビデオ符号化標準のインター予測部分は、ブロックに基づいた動き補償技術を用い、主な原理は、現在の画像の各画素ブロックに対して、前の符号化された画像のうち、1つの最適マッチングブロックを探索することであり、該プロセスは動き推定と呼ばれる。
【0014】
動きベクトル(Motion Vector、MV):インター符号化において、動きベクトルを用いて、現在ブロックとその参照ピクチャにおける最適マッチングブロックとの間の相対変位を表す。分割されたブロックはそれぞれに対応する動きベクトルが復号側に伝送され、各ブロックの動きベクトルを独立して符号化して伝送し、特に小サイズのブロックに分割すると、非常に多くのビットを消費する必要がある。動きベクトルを符号化するビット数を低減させるために、近傍する画像ブロック間の空間関連性を用いて、近傍した符号化されたブロックの動きベクトルに基づいて現在ブロックの動きベクトルを予測し、次に予測差分を符号化し、それにより、動きベクトルを表すビット数を効果的に低減させる。現在ブロックの動きベクトルを符号化するとき、近傍した符号化されたブロックの動きベクトルを用いて現在ブロックの動きベクトルを予測し、動きベクトルの予測値(MVP、Motion Vector Prediction)と動きベクトルの実推定値との差分(MVD、MotionVector Difference)を符号化し、符号化ビット数を効果的に低減させる。
【0015】
動き情報(Motion Information):動きベクトルは、現在ブロックの参照ブロックに対する位置オフセットを表し、従って、向いている画像ブロックの情報を正確に取得するために、動きベクトルのほか、どの参照ピクチャを用いるかを示すには参照ピクチャのインデックス情報が必要とされる。現在ピクチャの画像に対して、参照ピクチャリストを作成し、参照ピクチャインデックス情報は、現在ブロックが参照ピクチャリストにおける何番目の参照ピクチャを用いるかを示す。多くの符号化技術は、さらに、複数の参照ピクチャリストをサポートし、従って、参照方向と呼ばれる1つのインデックス値を利用して、どの参照ピクチャリストを用いるかを表すことができる。動きベクトル、参照ピクチャインデックス、参照方向など、動きに関連する情報は動き情報と呼ばれる。
【0016】
補間(Interpolation):現在の動きベクトルが非整数画素精度であれば、直接現在ブロックに対応する参照ピクチャから既存の画素値をコピーすることができず、現在ブロックの所要画素値は、補間により取得するしかできない。
図1Aに示すように、オフセットが1/2画素の画素値Y
1/2を取得する必要があれば、周りの既存の画素値Xを補間して取得することができる。例示的には、タップ数がNの補間フィルタを用いれば、周りのN個の整数画素を補間して取得する必要がある。
【0017】
動き補償:動き補償とは、補間又はコピーすることで、現在ブロックの全ての画素値を取得するプロセスである。
【0018】
融合モード(Merge mode):普通融合モード(すなわち、Normal Mergeモード、regular Mergeモードとも呼ばれる)、サブブロック融合モード(サブブロック動き情報を用いた融合モード、Subblock融合モードとも呼ばれる)、MMVDモード(動き差分を符号化する融合モード、merge with MVDモードとも呼ばれる)、CIIPモード(インターイントラ予測を組み合わせて新しい予測値を生成する融合モード、combine inter intra prediciton modeとも呼ばれる)、TPMモード(三角予測用の融合モード、triangular prediction modeとも呼ばれる)、GEOモード(任意の幾何学的分割形状に基づく融合モード、Geometrical Partitioningとも呼ばれる)を含む。
【0019】
スキップモード(skip mode):スキップモードは特殊な融合モードであり、スキップモードの融合モードとの相違点は、スキップモードでは残差分を符号化する必要がないことである。現在ブロックがスキップモードである場合、CIIPモードはデフォルトでオフであるが、普通融合モード、サブブロック融合モード、MMVDモード、TPMモード、GEOモードは依然として適用可能である。
【0020】
例示的には、普通融合モード、サブブロック融合モード、MMVDモード、CIIPモード、TPMモード、GEOモードなどに基づいて、如何に予測値を生成するかを決定する。予測値を生成した後、融合モードでは、予測値及び残差分を利用して再構築値を取得することができる。スキップモードでは、残差分は存在せず、予測値を直接利用して再構築値を取得する。
【0021】
シーケンスパラメータセット(SPS、sequence parameter set):シーケンスパラメータセットには、全シーケンスおいてあるツールのイネーブル・ディセーブルが許可されているかどうかを決定するフラグがある。フラグの値が1であれば、ビデオシーケンスにおいて、該フラグに対応するツールをイネーブルにすることが許可され、フラグの値が0であれば、ビデオシーケンスにおいて、該フラグに対応するツールを符号化プロセスにおいてイネーブルにすることが許可されない。
【0022】
普通融合モード:候補動き情報リストから1つの動き情報を選択し、該動き情報に基づいて現在ブロックの予測値を生成し、当該候補動き情報リストは、空間領域が近傍するブロック候補動き情報、時間領域が近傍するブロック候補動き情報、空間領域が近傍しないブロック候補動き情報、既存の動き情報に基づいて組み合わせて取得する動き情報、デフォルト動き情報などを含む。
【0023】
MMVDモード:普通融合モードの候補動き情報リストに基づいて、普通融合モードの候補動き情報リストから1つの動き情報を基準動き情報として選択し、テーブルルックアップ方法により動き情報差分を取得する。基準動き情報及び動き情報差分に基づいて最終的な動き情報を取得し、該最終的な動き情報に基づいて現在ブロックの予測値を生成する。
【0024】
CIIPモード:イントラ予測値とインター予測値とを組み合わせて現在ブロックの新しい予測値を取得する。
【0025】
サブブロック融合モード:サブブロック融合モードは、Affine融合モード及びサブブロックTMVPモードを含む。
【0026】
Affine(アフィン)融合モードは、普通融合モードに同様であり、候補動き情報リストから1つの動き情報を選択し、該動き情報に基づいて現在ブロックの予測値を生成する。普通融合モードとの相違点は、普通融合モードの候補動き情報リストにおける動き情報が2パラメータの並進動きベクトルであるが、Affine融合モードの候補動き情報リストにおける動き情報が4パラメータのAffine動き情報であるか、又は、6パラメータのAffine動き情報であることである。
【0027】
サブブロックTMVP(subblock-based temporal motion vector prediction)モードは、時間領域参照ピクチャにおいて、現在ブロックの予測値を生成するために、あるブロックの動き情報を直接再使用し、該ブロック内の各サブブロックの動き情報は同じではなくてもよい。
【0028】
TPMモード:1つのブロックを2つの三角形サブブロック(45度及び135度の2つの三角形サブブロックがある)に分割し、この2つの三角形サブブロックは異なる単方向動き情報を有し、TPMモードは予測プロセスにのみ用いられ、後続の変換、量子化プロセスに影響を及ぼさず、ここの単方向動き情報も候補動き情報リストから直接取得されたものである。
【0029】
GEOモード:GEOモードはTPMモードと類似であるが、分割形状が異なる。GEOモードでは、1つの四角形ブロックを任意の形状の2つのサブブロック(TPMの2つの三角形サブブロックの形状を除く任意の他の形状、例えば、1つの三角形サブブロックと1つの五角形サブブロック、又は、1つの三角形サブブロックと1つの四角形サブブロック、又は、2つの台形サブブロックなど)に分割し、この分割形状は限定されない。GEOモードで分割されるこの2つのサブブロックは異なる単方向動き情報を有する。
【0030】
以上の例から分かるように、本実施例に係る融合モード及びスキップモードとは、候補動き情報リストから1つの動き情報を直接選択し、現在ブロックの予測値を生成する予測モードであり、これらの予測モードは符号化側で動き探索プロセスを行う必要がなく、MMVDモード以外の他のモードは、動き情報差分を符号化する必要がない。
【0031】
ビデオ符号化フレームワーク:
図1Bに示すように、本発明の実施例の符号化側の処理プロセスはビデオ符号化フレームワークを用いて実現することができ、また、ビデオ復号フレームワークの概略図は
図1Bと同様であり、ここでは省略する。本発明の実施例の復号側の処理プロセスは、ビデオ復号フレームワークを用いて実現することができる。具体的には、ビデオ符号化フレームワーク及びビデオ復号フレームワークは、イントラ予測、動き推定/動き補償、参照ピクチャバッファ、ループフィルタリング、再構築、変換、量子化、逆変換、逆量子化、エントロピーエンコーダなどのモジュールを含む。符号化側では、これらのモジュール間の連携により、符号化側の処理プロセスを実現することができ、復号側では、これらのモジュール間の連携により、復号側の処理プロセスを実現することができる。
【0032】
関連技術において、現在ブロックが双方向ブロックである場合、現在ブロックの第1のオリジナル動きベクトル及び第2のオリジナル動きベクトルを取得した後、如何に第1のオリジナル動きベクトル及び第2のオリジナル動きベクトルを調整するかは、合理的な解決策がない。
【0033】
本発明の実施例では、現在ブロックが双方向ブロックである場合、2つの異なる方向からの動きベクトルがミラー対称の関係を有することが多いことを考慮すると、該特性に基づいて冗長性をさらに除去することができる。例えば、動きベクトル調整モードを提供することができ、動きベクトル調整モードでは、オリジナル動きベクトルに基づいて予測値を取得し、復号側の局所探索法により、動きベクトルを微調整し、歪みのより小さい予測値を生成するために、より良い動きベクトルを取得する。
【0034】
例示的には、現在ブロックに対して動きベクトル調整モードを起動(enable)すると決定する場合、現在ブロックの各サブブロックに対して、該サブブロックの第1のオリジナル動きベクトルに基づいて、該サブブロックに対応する第1の参照ブロックを決定し、該サブブロックの第2のオリジナル動きベクトルに基づいて、該サブブロックに対応する第2の参照ブロックを決定し、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、第1のオリジナル動きベクトル及び第2のオリジナル動きベクトルを調整し、第1のターゲット動きベクトル及び第2のターゲット動きベクトルを得、そして、第1のターゲット動きベクトル及び第2のターゲット動きベクトルに基づいて該サブブロックの予測値を決定し、上記方式は、高くない予測品質や予測エラーなどの問題を解決し、符号化性能及び符号化効率を向上させる。
【0035】
以下、いくつかの具体的な実施形態に関連して、本発明の符号化及び復号方法を詳細に説明する。
【0036】
実施例1:
図2に示すように、本発明の実施例において提供された符号化及び復号方法のフローチャートであり、該符号化及び復号方法は、復号側又は符号化側に適用することができ、該符号化及び復号方法は、ステップ201及び202を含むことができる。
【0037】
ステップ201において、
制御情報として、現在ブロックが動きベクトル調整モードを用いることを許可するという条件、
現在ブロックの予測モードが普通融合モードであるか、又は、現在ブロックの予測モードが融合モード又はスキップモードであり、現在ブロックの予測モードが普通融合モード以外の他のモードではないという条件、
現在ブロックの予測値が2つの参照ピクチャからの参照ブロックを重み付けて取得され、2つの参照ピクチャの表示順序がそれぞれ現在ピクチャの前と後にあり、2つの参照ピクチャから現在ピクチャまでの距離が同じであるという条件、
現在ブロックの2つの参照ピクチャの重み付けウェイトが同じであるという条件、
現在ブロックの2つの参照ピクチャがともに短期参照ピクチャであるという条件、
現在ブロックの幅、高さ及び面積が全て限定範囲内にあるという条件、
現在ブロックの2つの参照ピクチャのサイズがともに現在ピクチャのサイズと同じであるという条件が全て満たされれば、現在ブロックに対して動きベクトル調整モードを起動すると決定するステップを含むことができる。
【0038】
1つの可能な実施の形態では、
制御情報として、現在ブロックが動きベクトル調整モードを用いることを許可するという条件、
現在ブロックの予測モードが普通融合モードであるか、又は、現在ブロックの予測モードが融合モード又はスキップモードであり、現在ブロックの予測モードが普通融合モード以外の他のモードではないという条件、
現在ブロックの予測値が2つの参照ピクチャからの参照ブロックを重み付けて取得され、2つの参照ピクチャの表示順序がそれぞれ現在ピクチャの前と後にあり、2つの参照ピクチャから現在ピクチャまでの距離が同じであるという条件、
現在ブロックの2つの参照ピクチャの重み付けウェイトが同じであるという条件、
現在ブロックの2つの参照ピクチャがともに短期参照ピクチャであるという条件、
現在ブロックの幅、高さ及び面積が全て限定範囲内にあるという条件、
現在ブロックの2つの参照ピクチャのサイズがともに現在ピクチャのサイズと同じであるという条件のうちのいずれかが満たされなければ、現在ブロックに対して動きベクトル調整モードを起動しないと決定する。
【0039】
上記実施例では、7つの条件が与えられ、前記7つの条件に基づいて、現在ブロックに対して動きベクトル調整モードを起動するか否かを決定する。実際の応用では、さらに前記7つの条件のうち一部の条件を選択し、選択した一部の条件に基づいて現在ブロックに対して動きベクトル調整モードを起動するか否かを決定してもよい。例えば、前記7つの条件のうち5つの条件を選択し、この選択方式は制限されず、任意の5つの条件であってもよい。選択した5つの条件が全て満たされれば、現在ブロックに対して動きベクトル調整モードを起動すると決定する。選択した5つの条件のうちのいずれかが満たされなければ、現在ブロックに対して動きベクトル調整モードを起動しないと決定する。もちろん、前記7つの条件のうち他の数の条件を選択してもよく、これについては限定しない。
【0040】
上記実施例では、融合モード又はスキップモードは、普通融合モード、サブブロック融合モード、MMVDモード、CIIPモード、TPMモード、及びGEOモードを含む。現在ブロックの予測モードが普通融合モード以外の他のモードではないことは、予測モードがサブブロック融合モード、MMVDモード、CIIPモード、TPMモードやGEOモードなどではないことを意味する。
【0041】
例えば、現在ブロックの予測モードは、融合モード又はスキップモードである場合、MMVDモードでもなく、CIIPモードでもない。
【0042】
現在ブロックの予測モードが融合モード又はスキップモードであり、現在ブロックの予測モードがMMVDモードではなく、現在ブロックの予測モードがCIIPモードでもなく、現在ブロックの予測モードがサブブロック融合モードではなく、現在ブロックの予測モードがTPMモードでもなく、現在ブロックの予測モードがGEOモードでもないと決定する場合、現在ブロックの予測モードが普通融合モード以外の他のモードではないと決定することができる。つまり、現在ブロックの予測モードが普通融合モードであることを排除法により決定する。
【0043】
上記実施例では、現在ブロックの予測値が2つの参照ピクチャからの参照ブロックを重み付けて取得されることは、現在ブロックが双方向の予測モードを用い、すなわち、現在ブロックの予測値が2つの参照ピクチャからの参照ブロックを重み付けて取得されることを意味する。
【0044】
上記実施例では、現在ブロックは、第1の動き情報及び第2の動き情報とされた2つのリストの動き情報に対応するものであってもよく、第1の動き情報は、第1の参照ピクチャ及び第1のオリジナル動きベクトルを含み、第2の動き情報は、第2の参照ピクチャ及び第2のオリジナル動きベクトルを含む。上記2つの参照ピクチャは、第1の参照ピクチャ及び第2の参照ピクチャであってもよい。2つの参照ピクチャの表示順序がそれぞれ現在ピクチャの前と後にあることは、第1の参照ピクチャが現在ブロックのある現在ピクチャの前にあり、第2の参照ピクチャが現在ピクチャの後にあることを意味する。例示的には、第1の参照ピクチャは、第1のリスト(例えば、list0)にある前方向参照ピクチャとも呼ばれ、第2の参照ピクチャは、第2のリスト(例えば、list1)にある後方向参照ピクチャとも呼ばれる。
【0045】
上記実施例では、現在ブロックの幅、高さ及び面積が全て限定範囲内にあることは、幅が第1の閾値以上であり、高さが第2の閾値以上であり、面積が第3の閾値以上であること、又は、幅が第1の閾値以上であり、高さが第2の閾値以上であり、面積が第4の閾値よりも大きいことを含む。例示的には、該第3の閾値は該第4の閾値よりも大きくてもよい。例えば、第1の閾値は8であってもよく、第2の閾値は8であってもよく、第3の閾値は128であってもよく、第4の閾値は64であってもよい。もちろん、上記数値はいくつかの例にすぎず、これについては限定しない。
【0046】
上記実施例では、制御情報として、現在ブロックが動きベクトル調整モードを用いることを許可することは、シーケンスレベル制御情報(例えば、マルチピクチャの制御情報)として、現在ブロックが動きベクトル調整モードを用いることを許可すること、及び/又は、ピクチャレベル制御情報(例えば、1ピクチャの制御情報)として、現在ブロックが動きベクトル調整モードを用いることを許可することを含むことができるがこれに限られない。
【0047】
ステップ202において、現在ブロックに対して動きベクトル調整モードを起動すると決定する場合、現在ブロックに対して動き補償を行う。
【0048】
1つの可能な実施の形態では、現在ブロックに対して動きベクトル調整モードを起動すると決定する場合、現在ブロックに含まれる少なくとも1つのサブブロックのうちの各サブブロックに対して、該サブブロックの第1のオリジナル動きベクトルに基づいて該サブブロックに対応する第1の参照ブロックを決定し、該サブブロックの第2のオリジナル動きベクトルに基づいて、該サブブロックに対応する第2の参照ブロックを決定し、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、第1のオリジナル動きベクトル及び第2のオリジナル動きベクトルを調整し、第1のオリジナル動きベクトルに対応する第1のターゲット動きベクトル及び第2のオリジナル動きベクトルに対応する第2のターゲット動きベクトルを得、第1のターゲット動きベクトル及び第2のターゲット動きベクトルに基づいて該サブブロックの予測値を決定する。各サブブロックの予測値を得た後、各サブブロックの予測値に基づいて現在ブロックの予測値を決定することができる。
【0049】
例示的には、該サブブロックの第1のオリジナル動きベクトルに基づいて該サブブロックに対応する第1の参照ブロックを決定し、該サブブロックの第2のオリジナル動きベクトルに基づいて、該サブブロックに対応する第2の参照ブロックを決定するステップは、
該サブブロックの第1のオリジナル動きベクトルに基づいて、第1の参照ピクチャから該サブブロックに対応する第1の参照ブロックを決定するステップであって、該第1の参照ブロックにおける各画素点の画素値は、該第1の参照ブロックにおける近傍画素点の画素値を補間して得られるものであるか、又は、該第1の参照ブロックにおける近傍画素点の画素値をコピーして得られるものである、ステップと、
該サブブロックの第2のオリジナル動きベクトルに基づいて、第2の参照ピクチャから該サブブロックに対応する第2の参照ブロックを決定するステップであって、該第2の参照ブロックにおける各画素点の画素値は、該第2の参照ブロックにおける近傍画素点の画素値を補間して得られるものであるか、又は、該第2の参照ブロックにおける近傍画素点の画素値をコピーして得られるものである、ステップとを含むことができるがこれに限られない。
【0050】
例示的には、第1の参照ブロックのサイズは第2の参照ブロックのサイズと同じであり、第1の参照ブロックの幅は該サブブロックの幅及び探索範囲に基づいて決定され、第1の参照ブロックの高さ値は該サブブロックの高さ及び探索範囲に基づいて決定される。
【0051】
例示的には、現在ブロックに含まれる各サブブロックに対して、該サブブロックに対応する第1の参照ブロックの第1の画素値及び該サブブロックに対応する第2の参照ブロックの第2の画素値に基づいて、該サブブロックの第1のオリジナル動きベクトル及び該サブブロックの第2のオリジナル動きベクトルを調整し、第1のオリジナル動きベクトルに対応する第1のターゲット動きベクトル及び第2のオリジナル動きベクトルに対応する第2のターゲット動きベクトル、すなわち、該サブブロックの第1のターゲット動きベクトル及び第2のターゲット動きベクトルを得る。
【0052】
1つの可能な実施の形態では、初期動きベクトルを中心とし、該初期動きベクトルの周りの、該初期動きベクトルを含む動きベクトルから、一部又は全ての動きベクトルを選択し、選択した動きベクトルを候補動きベクトルとして決定し、該初期動きベクトルは第1のオリジナル動きベクトル又は第2のオリジナル動きベクトルである。次に、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、該初期動きベクトル及び各候補動きベクトルから1つの動きベクトルを最適な動きベクトルとして選択する。次に、最適な動きベクトルに基づいて第1のオリジナル動きベクトルを調整し、第1のオリジナル動きベクトルに対応する第1のターゲット動きベクトルを得、最適な動きベクトルに基づいて第2のオリジナル動きベクトルを調整し、第2のオリジナル動きベクトルに対応する第2のターゲット動きベクトルを得る。
【0053】
例示的には、前記最適な動きベクトルに基づいて第1のオリジナル動きベクトルを調整し、第1のオリジナル動きベクトルに対応する第1のターゲット動きベクトルを得、最適な動きベクトルに基づいて第2のオリジナル動きベクトルを調整し、第2のオリジナル動きベクトルに対応する第2のターゲット動きベクトルを得るステップは、最適な動きベクトルに基づいてサブブロックの第1の整数画素動きベクトル調整値、第2の整数画素動きベクトル調整値、第1の小数画素動きベクトル調整値及び第2の小数画素動きベクトル調整値を決定するステップと、第1の整数画素動きベクトル調整値及び第1の小数画素動きベクトル調整値に基づいて、第1のオリジナル動きベクトルを調整し、サブブロックの第1のターゲット動きベクトルを得るステップと、第2の整数画素動きベクトル調整値及び第2の小数画素動きベクトル調整値に基づいて、第2のオリジナル動きベクトルを調整し、サブブロックの第2のターゲット動きベクトルを得るステップとを含むことができる。
【0054】
例示的には、現在ブロックに含まれる少なくとも1つのサブブロックのうちの各サブブロックに対して、該サブブロックの第1のターゲット動きベクトル及び該サブブロックの第2のターゲット動きベクトルに基づいて該サブブロックの予測値を決定することができ、このプロセスについては詳しく説明しない。
【0055】
1つの可能な実施の形態では、最適な動きベクトルが初期動きベクトルと同じであれば、該サブブロックの第1のターゲット動きベクトルに基づいて、第1の参照ピクチャから該サブブロックに対応する第3の参照ブロックを決定し、該サブブロックの第2のターゲット動きベクトルに基づいて、第2の参照ピクチャから該サブブロックに対応する第4の参照ブロックを決定する。次に、該第3の参照ブロックの画素値及び該第4の参照ブロックの画素値を重み付けし、該サブブロックの予測値を得る。
【0056】
別の可能な実施の形態では、最適な動きベクトルが初期動きベクトルと異なければ、第1の参照ピクチャから第5の参照ブロックを決定し、該第5の参照ブロックを拡張し、第6の参照ブロックを得、次に、該サブブロックの第1のターゲット動きベクトルに基づいて、該第6の参照ブロックから該サブブロックに対応する第3の参照ブロックを選択する。第2の参照ピクチャから第7の参照ブロックを決定し、該第7の参照ブロックを拡張し、第8の参照ブロックを得、該サブブロックの第2のターゲット動きベクトルに基づいて、該第8の参照ブロックから該サブブロックに対応する第4の参照ブロックを選択する。次に、該第3の参照ブロックの画素値及び該第4の参照ブロックの画素値を重み付けし、該サブブロックの予測値を得る。
【0057】
上記実施例では、第3の参照ブロックの画素値及び第4の参照ブロックの画素値を重み付けし、該サブブロックの予測値を得ることは、第3の参照ブロックの画素値、第3の参照ブロックの画素値に対応する第1のウェイト、第4の参照ブロックの画素値、第4の参照ブロックの画素値に対応する第2のウェイトに対して重み付け処理を行い、該サブブロックの予測値を得ることを含むことができるがこれに限られない。例示的には、第1のウェイトと、第2のウェイトとは、同じであってもよい。
【0058】
例示的には、各サブブロックの予測値を得た後、各サブブロックの予測値を組み合わせ、現在ブロックの予測値を得てもよいが、この現在ブロックの予測値の決定プロセスは限定されない。
【0059】
以上の技術的解決手段から分かるように、本発明の実施例では、現在ブロックに対して動きベクトル調整モードを起動すると決定する場合、第1のオリジナル動きベクトル及び第2のオリジナル動きベクトルに基づいて予測値を決定するのではなく、第1のオリジナル動きベクトル及び第2のオリジナル動きベクトルに基づいて第1のターゲット動きベクトル及び第2のターゲット動きベクトルを取得し、第1のターゲット動きベクトル及び第2のターゲット動きベクトルに基づいて予測値を決定する。これにより、高くない予測品質や予測誤差などの問題を解決し、符号化性能及び符号化効率を向上させる。
【0060】
実施例2:上記方法と同様の発想に基づいて、
図3に示すように、本発明の実施例において提供された別の符号化及び復号方法のフローチャートであり、該方法は符号化側に適用することができ、該方法は、ステップ301~ステップ305を含むことができる。
【0061】
ステップ301において、符号化側は現在ブロックに対して動きベクトル調整モードを起動するか否かを決定する。そうである場合、ステップ302を行い、そうではない場合、本発明において提供された動きベクトル調整方式を用いる必要がなく、この状況の処理は限定されない。
【0062】
一例では、符号化側が現在ブロックに対して動きベクトル調整モードを起動すると決定する場合、現在ブロックの動き情報が十分に正確ではないことが示されるため、現在ブロックに対して動きベクトル調整モードを起動し(すなわち、本発明の技術的解決手段)、ステップ302を行う。
【0063】
符号化側が現在ブロックに対して動きベクトル調整モードを起動しないと決定する場合、現在ブロックの動き情報が十分に正確あることが示されるため、現在ブロックに対して動きベクトル調整モードを起動せず、本発明において提供された動きベクトル調整方式を用いなくてもよい。
【0064】
ステップ302において、現在ブロックに含まれる少なくとも1つのサブブロックのうちの各サブブロックに対して、符号化側は該サブブロックの第1のオリジナル動きベクトルに基づいて、第1の参照ピクチャから該サブブロックに対応する第1の参照ブロックを決定し、該サブブロックの第2のオリジナル動きベクトルに基づいて、第2の参照ピクチャから該サブブロックに対応する第2の参照ブロックを決定する。区別の便宜上、第1の参照ブロックにおける各画素点の画素値は第1の画素値と呼ばれ、第2の参照ブロックにおける各画素点の画素値は第2の画素値と呼ばれる。
【0065】
一例では、現在ブロックが双方向の予測を用いたブロックである場合、現在ブロックの各サブブロックに対して、双方向の動き情報があり得る。この双方向の動き情報は、2つの参照ピクチャ及び2つのオリジナル動きベクトルを含むことができ、該双方向の動き情報は、第1の参照ピクチャ、第1のオリジナル動きベクトル、第2の参照ピクチャ及び第2のオリジナル動きベクトルを含むことができる。
【0066】
第1のオリジナル動きベクトルに基づいて、符号化側は第1の参照ピクチャからサブブロックに対応する第1の参照ブロックを決定し、第1の参照ブロックにおける各画素点の画素値は第1の画素値と呼ばれる。第2のオリジナル動きベクトルに基づいて、符号化側は第2の参照ピクチャからサブブロックに対応する第2の参照ブロックを決定し、第2の参照ブロックにおける各画素点の画素値は第2の画素値と呼ばれる。
【0067】
一例では、現在ブロックが位置する現在ピクチャと第1の参照ピクチャとの距離は、第2の参照ピクチャと現在ブロックが位置する現在ピクチャとの距離と同じであってもよい。例えば、第1の参照ピクチャは第1フレーム、現在ピクチャは第5フレーム、第2の参照ピクチャは第9フレームである。
【0068】
一例では、第1のオリジナル動きベクトルと第2のオリジナル動きベクトルとは、ミラー対称であってもよく、例えば、第1のオリジナル動きベクトルは(4,4)、第2のオリジナル動きベクトルは(-4,-4)である。第1のオリジナル動きベクトルは(2.5,3.5)、第2のオリジナル動きベクトルは(-2.5,-3.5)である。もちろん、上記は単なる例であり、これについては限定しない。
【0069】
第1の参照ブロック及び第2の参照ブロックの決定方式については、後続の実施例を参照することができ、ここでは省略する。
【0070】
ステップ303において、符号化側は第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、第1のオリジナル動きベクトルを調整し、サブブロックの第1のターゲット動きベクトルを得、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、第2のオリジナル動きベクトルを調整し、サブブロックの第2のターゲット動きベクトルを得る。
【0071】
一例では、現在ブロックに対して動きベクトル調整モードを起動する場合、符号化側は第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、局所探索法によって、第1のオリジナル動きベクトル及び第2のオリジナル動きベクトルを微調整することにより、より良い第1のターゲット動きベクトル及び第2のターゲット動きベクトルを取得し、そして、第1のターゲット動きベクトル及び第2のターゲット動きベクトルを用いて、歪みの小さい予測値を生成する。
【0072】
一例では、現在ブロックは、少なくとも1つのサブブロックを含んでもよい。現在ブロックが1つのサブブロックのみを含む場合、該サブブロックは現在ブロックそのものである。現在ブロックの各サブブロックは第1のオリジナル動きベクトル及び第2のオリジナル動きベクトルに対応し、調整後、該サブブロックは第1のターゲット動きベクトル及び第2のターゲット動きベクトルに対応する。
【0073】
例示的には、現在ブロックがサブブロックA及びサブブロックBを含む場合、サブブロックAは、第1のオリジナル動きベクトルA1及び第2のオリジナル動きベクトルA2に対応し、調整後、サブブロックAは第1のターゲット動きベクトルA3及び第2のターゲット動きベクトルA4に対応するようになる。サブブロックBは、第1のオリジナル動きベクトルB1及び第2のオリジナル動きベクトルB2に対応し、調整後、サブブロックBは第1のターゲット動きベクトルB3及び第2のターゲット動きベクトルB4に対応するようになる。
【0074】
例示的には、サブブロックAに対応する第1のオリジナル動きベクトルA1と、サブブロックBに対応する第1のオリジナル動きベクトルB1とは同じであってもよく、ともに現在ブロックの第1のオリジナル動きベクトルである。サブブロックAに対応する第2のオリジナル動きベクトルA2とサブブロックBに対応する第2のオリジナル動きベクトルB2とは同じであってもよく、ともに現在ブロックの第2のオリジナル動きベクトルである。
【0075】
各サブブロックの第1のオリジナル動きベクトルをそれぞれ調整し、従って、サブブロックAに対応する第1のターゲット動きベクトルA3とサブブロックBに対応する第1のターゲット動きベクトルB3とは同じであっても異なっていてもよい。
【0076】
各サブブロックの第2のオリジナル動きベクトルをそれぞれ調整し、従って、サブブロックAに対応する第2のターゲット動きベクトルA4と、サブブロックBに対応する第2のターゲット動きベクトルB4とは同じであっても異なっていてもよい。
【0077】
オリジナル動きベクトルの調整方式については、後の実施形態を参照することができ、ここでは省略する。
【0078】
ステップ304において、符号化側は第1のターゲット動きベクトル及び第2のターゲット動きベクトルに基づいてサブブロックの予測値を決定する。
【0079】
ステップ305において、符号化側は各サブブロックの予測値に基づいて現在ブロックの予測値を決定する。
【0080】
例えば、現在ブロックがサブブロックA及びサブブロックBを含む場合、サブブロックAの第1のターゲット動きベクトル及び第2のターゲット動きベクトルを用いてサブブロックAの予測値を決定し、サブブロックBの第1のターゲット動きベクトル及び第2のターゲット動きベクトルを用いてサブブロックBの予測値を決定し、サブブロックAの予測値及びサブブロックBの予測値は、現在ブロックの予測値である。
【0081】
例示的には、符号化側は現在ブロックの各サブブロックの第1のターゲット動きベクトル及び第2のターゲット動きベクトルを記憶し、又は、現在ブロックの各サブブロックの第1のオリジナル動きベクトル及び第2のオリジナル動きベクトルを記憶し、又は、現在ブロックの各サブブロックの第1のオリジナル動きベクトル、第2のオリジナル動きベクトル、第1のターゲット動きベクトル及び第2のターゲット動きベクトルを記憶する。
【0082】
実施例3:上記の方法と同様の発想に基づいて、
図4に示すように、本発明の実施例において提供された別の符号化及び復号方法のフローチャートであり、該方法は復号側に適用することができ、該方法は、ステップ401~ステップ405を含むことができる。
【0083】
ステップ401において、復号側は現在ブロックに対して動きベクトル調整モードを起動するか否かを決定する。そうである場合、ステップ402を行い、そうではない場合、本発明において提供された動きベクトル調整方式を採用する必要はなく、この場合の処理は限定されない。
【0084】
一例では、復号側が現在ブロックに対して動きベクトル調整モードを起動すると決定する場合、現在ブロックの動き情報が不正確であることが示されるため、現在ブロックに対して動きベクトル調整モードを起動し(すなわち、本発明の技術的解決手段)、ステップ402を行う。
【0085】
復号側が現在ブロックに対して動きベクトル調整モードを起動しないと決定する場合、現在ブロックの動き情報が十分に正確であることが示されるため、現在ブロックに対して動きベクトル調整モードを起動せず、本発明において提供された動きベクトル調整方式を用いなくてもよい。
【0086】
ステップ402において、現在ブロックに含まれる少なくとも1つのサブブロックのうちの各サブブロックに対して、復号側は該サブブロックの第1のオリジナル動きベクトルに基づいて、第1の参照ピクチャから該サブブロックに対応する第1の参照ブロックを決定し、該サブブロックの第2のオリジナル動きベクトルに基づいて、第2の参照ピクチャから該サブブロックに対応する第2の参照ブロックを決定する。区別の便宜上、第1の参照ブロックにおける各画素点の画素値は第1の画素値と呼ばれ、第2の参照ブロックにおける各画素点の画素値は第2の画素値と呼ばれる。
【0087】
ステップ403において、復号側は第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、第1のオリジナル動きベクトルを調整し、サブブロックの第1のターゲット動きベクトルを得、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、第2のオリジナル動きベクトルを調整し、サブブロックの第2のターゲット動きベクトルを得る。
【0088】
ステップ404において、復号側は第1のターゲット動きベクトル及び第2のターゲット動きベクトルに基づいてサブブロックの予測値を決定する。
【0089】
ステップ405において、復号側は各サブブロックの予測値に基づいて現在ブロックの予測値を決定する。
【0090】
例示的には、復号側は現在ブロックの各サブブロックの第1のターゲット動きベクトル及び第2のターゲット動きベクトルを記憶し、又は、現在ブロックの各サブブロックの第1のオリジナル動きベクトル及び第2のオリジナル動きベクトルを記憶し、又は、現在ブロックの各サブブロックの第1のオリジナル動きベクトル、第2のオリジナル動きベクトル、第1のターゲット動きベクトル及び第2のターゲット動きベクトルを記憶する。
【0091】
例示的には、ステップ401~ステップ405はステップ301~ステップ305を参照することができ、ここでは省略される。
【0092】
実施例4:上記実施例は、現在ブロックに対して動きベクトル調整モードを起動するか否かに係るものであり、以下に説明する。
【0093】
1つの可能な実施の形態では、以下の起動条件を与えることができる。もちろん、以下のこれらの起動条件は一例にすぎず、実際の応用では、以下のこれらの起動条件を任意に組み合わせることができ、これについては限定しない。例示的には、以下の起動条件の全てがいずれも満たされれば、現在ブロックに対して動きベクトル調整モードを起動すると決定する。
【0094】
1、制御情報として、現在ブロックが動きベクトル調整モードを用いることを許可する。
【0095】
例示的には、該制御情報は、シーケンスレベル制御情報及び/又はピクチャレベル制御情報を含むことができるがこれに限られない。
【0096】
1つの可能な実施の形態では、シーケンスレベル(例えば、マルチフレーム画像)制御情報は、制御フラグ(例えば、sps_cur_tool_enabled_flag)を含むことができ、ピクチャレベル(例えば、1フレームの画像)制御情報は、制御フラグ(例えば、pic_cur_tool_disabled_flag)を含むことができる。sps_cur_tool_enabled_flagが第1の値であり、pic_cur_tool_disabled_flagが第2の値であるであると、現在ブロックが動きベクトル調整モードを用いることを許可することが示される。
【0097】
例示的には、sps_cur_tool_enabled_flagは、シーケンスにおける全ての画像が動きベクトル調整モードを用いることを許可するか否かを示す。pic_cur_tool_disabled_flagは、現在の画像内の各ブロックが動きベクトル調整モードを用いることを許可しないか否かを示す。sps_cur_tool_enabled_flagが第1の値であると、シーケンスにおける全ての画像が動きベクトル調整モードを用いることを許可することが示される。pic_cur_tool_disabled_flagが第2の値であると、現在の画像内の各ブロックが動きベクトル調整モードを用いることを許可することが示される。
【0098】
例示的には、sps_cur_tool_enabled_flagが第2の値である及び/又はpic_cur_tool_disabled_flagが第1の値であると、現在ブロックが動きベクトル調整モードを用いることを許可しないことが示され、すなわち、制御情報として、現在ブロックが動きベクトル調整モードを用いることを許可しない。
【0099】
別の可能な実施の形態では、シーケンスレベル(例えば、マルチフレーム画像)制御情報は、制御フラグ(例えば、sps_cur_tool_disabled_flag)を含むことができ、ピクチャレベル(例えば、1フレームの画像)制御情報は、制御フラグビット(例えば、pic_cur_tool_disabled_flag)を含むことができる。sps_cur_tool_disabled_flagが第2の値であり、pic_cur_tool_disabled_flagが第2の値であると、現在ブロックが動きベクトル調整モードを用いることを許可することが示される。
【0100】
例示的には、sps_cur_tool_disabled_flagは、シーケンスにおける全ての画像が動きベクトル調整モードを用いることを許可しないか否かを示す。pic_cur_tool_disabled_flagは、現在の画像内の各ブロックが動きベクトル調整モードを用いることを許可しないか否かを示す。sps_cur_tool_disabled_flagが第2の値であると、シーケンスにおける全ての画像が動きベクトル調整モードを用いることを許可することが示される。pic_cur_tool_disabled_flagが第2の値であると、現在の画像内の各ブロックが動きベクトル調整モードを用いることを許可することが示される。
【0101】
例示的には、sps_cur_tool_disabled_flagが第1の値である及び/又はpic_cur_tool_disabled_flagが第1の値であると、現在ブロックが動きベクトル調整モードを用いることを許可しないことが示され、すなわち、制御情報として、現在ブロックが動きベクトル調整モードを用いることを許可しない。
【0102】
別の可能な実施の形態では、シーケンスレベル(例えば、マルチフレーム画像)制御情報は制御フラグビット(例えば、sps_cur_tool_enabled_flag)を含むことができ、ピクチャレベル(例えば、1フレームの画像)制御情報は、制御フラグビット(例えば、pic_cur_tool_enabled_flag)を含むことができる。sps_cur_tool_enabled_flagが第1の値であり、pic_cur_tool_enabled_flagが第1の値であると、現在ブロックが動きベクトル調整モードを用いることを許可することが示される。
【0103】
例示的には、sps_cur_tool_enabled_flagは、シーケンスにおける全ての画像が動きベクトル調整モードを用いることを許可するか否かを示す。pic_cur_tool_enabled_flagは、現在の画像内の各ブロックが動きベクトル調整モードを用いることを許可するか否かを示す。sps_cur_tool_enabled_flagが第1の値であると、シーケンスにおける全ての画像が動きベクトル調整モードを用いることを許可することが示される。pic_cur_tool_enabled_flagが第1の値であると、現在の画像内の各ブロックが動きベクトル調整モードを用いることを許可することが示される。
【0104】
例示的には、sps_cur_tool_enabled_flagが第2の値である及び/又はpic_cur_tool_enabled_flagが第2の値であると、現在ブロックが動きベクトル調整モードを用いることを許可しないことが示され、すなわち、制御情報として、現在ブロックが動きベクトル調整モードを用いることを許可しない。
【0105】
別の可能な実施の形態では、シーケンスレベル(例えば、マルチフレーム画像)制御情報は、制御フラグ(例えば、sps_cur_tool_disabled_flag)を含むことができ、ピクチャレベル(例えば、1フレームの画像)制御情報は、制御フラグ(例えば、pic_cur_tool_enabled_flag)を含むことができる。sps_cur_tool_disabled_flagが第2の値であり、pic_cur_tool_enabled_flagが第1の値であると、現在ブロックが動きベクトル調整モードを用いることを許可することが示される。
【0106】
例示的には、sps_cur_tool_disabled_flagは、シーケンスにおける全ての画像が動きベクトル調整モードを用いることを許可しないか否かを示す。pic_cur_tool_enabled_flagは、現在の画像内の各ブロックが動きベクトル調整モードを用いることを許可するか否かを示す。sps_cur_tool_disabled_flagが第2の値であると、シーケンスにおける全ての画像が動きベクトル調整モードを用いることを許可することが示される。pic_cur_tool_enabled_flagが第1の値であると、現在の画像内の各ブロックが動きベクトル調整モードを用いることを許可することが示される。
【0107】
例示的には、sps_cur_tool_disabled_flagが第1の値である及び/又はpic_cur_tool_enabled_flagが第2の値であると、現在ブロックが動きベクトル調整モードを用いることを許可しないことが示され、すなわち、制御情報として、現在ブロックが動きベクトル調整モードを用いることを許可しない。
【0108】
上記実施例では、第1の値は1、第2の値は0であってもよく、又は、第1の値は0、第2の値は1であってもよい。もちろん、上記は例にすぎず、これについては限定しない。
【0109】
例示的には、本明細書のフレーム又はピクチャは画像に相当し、現在ピクチャが現在画像を表すと、参照ピクチャが参照画像を表す。
【0110】
2、現在ブロックの予測モードが普通融合モードであるか、又は、現在ブロックの予測モードが融合モード又はスキップモードであり、現在ブロックの予測モードが普通融合モード以外の他のモードではない。
【0111】
1つの可能な実施の形態では、現在ブロックの予測モード(例えば、インター予測モード)が融合モード又はスキップモードであり、現在ブロックの予測モードが普通融合モード以外の他のモード(例えば、サブブロック融合モード、MMVDモード、CIIPモード、TPMモード、GEOモードなど)ではない場合、現在ブロックが動きベクトル調整モードを用いることを許可することが示される。例えば、現在ブロックの予測モードが融合モード又はスキップモードである場合、現在ブロックの予測モードがMMVDモードではなく、現在ブロックの予測モードがCIIPモードではない場合、現在ブロックが動きベクトル調整モードを用いることを許可することが示される。
【0112】
例示的には、現在ブロックの予測モードが融合モードではなく、現在ブロックの予測モードがスキップモードではない場合、現在ブロックが動きベクトル調整モードを用いることを許可せず、すなわち、起動条件2が満たされないことが示される。
【0113】
例示的には、現在ブロックの予測モードが融合モード又はスキップモードであり、現在ブロックの予測モードが普通融合モード以外の他のモード(例えば、サブブロック融合モード、MMVDモード、CIIPモード、TPMモード、GEOモードなど)である場合、現在ブロックが動きベクトル調整モードを用いることを許可せず、すなわち、起動条件2が満たされないことが示される。
【0114】
別の可能な実施の形態では、現在ブロックの予測モードが普通融合モード(例えば、regular mergeモード)である場合、現在ブロックが動きベクトル調整モードを用いることを許可することが示される。例示的には、普通融合モードは、現在ブロック動き情報リストにおけるある動き情報を現在ブロックの動き情報として再使用して、現在ブロックの予測値を生成する。
【0115】
例示的には、現在ブロックの予測モードが普通融合モードではない場合、現在ブロックが動きベクトル調整モードを用いることを許可せず、すなわち、起動条件2が満たされないことが示される。
【0116】
3、現在ブロックの予測値が2つの参照ピクチャからの参照ブロックを重み付けて取得され、2つの参照ピクチャの表示順序がそれぞれ現在ピクチャの前と後にあり、2つの参照ピクチャから現在ピクチャまでの距離が同じである。現在ブロックの予測値が2つの参照ピクチャからの参照ブロックを重み付けて取得されることとは、現在ブロックが双方向の予測モードを用いること、すなわち、現在ブロックの予測値が2つの参照ピクチャからの参照ブロックを重み付けて取得されることを意味する。例示的には、現在ブロックは、第1の動き情報及び第2の動き情報とされた2つのリストの動き情報に対応するものであってもよく、第1の動き情報は、第1の参照ピクチャ及び第1のオリジナル動きベクトルを含み、第2の動き情報は、第2の参照ピクチャ及び第2のオリジナル動きベクトルを含む。2つの参照ピクチャの表示順序がそれぞれ現在ピクチャの前と後にあることとは、第1の参照ピクチャが現在ブロックのある現在ピクチャの前にあり、第2の参照ピクチャが現在ピクチャの後に位置することを意味する。
【0117】
1つの可能な実施の形態では、現在ブロックに2つのリスト(例えば、list0及びlist1)の動き情報(例えば、2つの参照ピクチャ及び2つの動きベクトル)があり、2つの参照ピクチャの表示順序がそれぞれ現在ピクチャの前と後にあり、2つの参照ピクチャから現在ピクチャのまでの距離が同じである場合、現在ブロックが動きベクトル調整モードを用いることを許可することが示される。
【0118】
2つの参照ピクチャの表示順序がそれぞれ現在ピクチャの前と後にあり、2つの参照ピクチャから現在ピクチャのまでの距離が同じである場合、現在ピクチャの表示順序番号POC_Curと、list0の参照ピクチャの表示順序番号POC_0と、list1の参照ピクチャの表示順序番号POC_1との相対関係で示すことができる。即ち、(POC_0-POC_Cur)が(POC_Cur-POC_0)に完全に等しい。
【0119】
例示的には、現在ブロックは双方向の予測を用い、現在ブロックに対応する2つの参照ピクチャは異なる方向からのものであり、つまり、現在ブロックに対応する一方の参照ピクチャは現在ピクチャの前にあり、現在ブロックに対応する他方の参照ピクチャは現在ピクチャの後にある。
【0120】
例示的には、「現在ブロックに2つの参照ピクチャがあり、2つの参照ピクチャの表示順序がそれぞれ現在ピクチャの前と後にあり、2つの参照ピクチャから現在ピクチャまでの距離が同じである」という上記条件は、以下のように表すことができる。
【0121】
例示的には、現在ブロックに1つの参照ピクチャしかない場合、現在ブロックが動きベクトル調整モードを用いることを許可せず、すなわち、起動条件3が満たされないことが示される。又は、現在ブロックに2つの参照ピクチャがあるが、2つの参照ピクチャの表示順序がともに現在ピクチャの前にある場合、現在ブロックが動きベクトル調整モードを用いることを許可せず、すなわち、起動条件3が満たされないことが示される。又は、現在ブロックに2つの参照ピクチャがあるが、2つの参照ピクチャの表示順序がともに現在ピクチャの後にある場合、現在ブロックが動きベクトル調整モードを用いることを許可せず、すなわち、起動条件3が満たされないことが示される。又は、現在ブロックに2つの参照ピクチャがあり、2つの参照ピクチャの表示順序がそれぞれ現在ピクチャの前と後にあるが、2つの参照ピクチャから現在ピクチャまでの距離が異なる場合、現在ブロックが動きベクトル調整モードを用いることを許可せず、すなわち、起動条件3が満たされないことが示される。
【0122】
4、現在ブロックの2つの参照ピクチャの重み付けウェイトが同じである。
【0123】
1つの可能な実施の形態では、現在ブロックの2つの参照ピクチャの重み付けウェイトが同じである場合、現在ブロックが動きベクトル調整モードを用いることを許可することが示される。例示的には、2つの参照ピクチャのピクチャレベルの重み付けウェイトが同じであり、例えば、参照ピクチャrefIdxL0の輝度重み付けウェイト(luma_weight_l0_flag[refIdxL0])が参照ピクチャrefIdxL1の輝度重み付けウェイト(luma_weight_l1_flag[refIdxL1])に等しい場合、現在ブロックの2つの参照ピクチャの重み付けウェイトが同じであることが示される。又は、2つの参照ピクチャのブロックレベルの重み付けウェイトが同じであり、例えば、現在ブロックのブロックレベル重み付け値のインデックスBcwIdx[xCb][yCb]が0である場合、現在ブロックの2つの参照ピクチャの重み付けウェイトが同じであることが示される。又は、2つの参照ピクチャのピクチャレベルの重み付けウェイトが同じであり、2つの参照ピクチャのブロックレベルの重み付けウェイトが同じである場合、現在ブロックの2つの参照ピクチャの重み付けウェイトが同じであることが示される。
【0124】
例示的には、現在ブロックの2つの参照ピクチャの重み付けウェイトが異なる場合、現在ブロックが動きベクトル調整モードを用いることを許可せず、すなわち、起動条件4が満たされないことが示される。例えば、2つの参照ピクチャのピクチャレベルの重み付けウェイトが異なる場合、現在ブロックの2つの参照ピクチャの重み付けウェイトが異なることが示される。又は、2つの参照ピクチャのブロックレベルの重み付けウェイトが異なる場合、現在ブロックの2つの参照ピクチャの重み付けウェイトが異なることが示される。又は、2つの参照ピクチャのピクチャレベルの重み付けウェイトが異なり、2つの参照ピクチャのブロックレベルの重み付けウェイトが異なる場合、現在ブロックの2つの参照ピクチャの重み付けウェイトが異なることが示される。
【0125】
例示的には、現在ブロックの2つの参照ピクチャの重み付けウェイトは、双方向の重み付け補償のときに用いられるウェイトである。例えば、現在ブロックの各サブブロックに対して、該各サブブロックの2つの予測値を取得した後(取得プロセスは、後続の実施例を参照)、この2つの予測値を重み付けし、該サブブロックの最終予測値を得る必要がある。この2つの予測値を重み付けするとき、この2つの予測値に対応するウェイトは、現在ブロックの2つの参照ピクチャの重み付けウェイトであり、すなわち、この2つの予測値に対応するウェイトは同じである。
【0126】
5、現在ブロックの2つの参照ピクチャがともに短期参照ピクチャである。又は、現在ブロックの2つの参照ピクチャがともに長期参照ピクチャではない。
【0127】
1つの可能な実施の形態では、現在ブロックの2つの参照ピクチャがともに短期参照ピクチャである場合、現在ブロックが動きベクトル調整モードを用いることを許可することが示される。短期参照ピクチャは、現在ピクチャに近い参照ピクチャを意味し、一般に実際の画像フレームである。
【0128】
例示的には、現在ブロックの2つの参照ピクチャがともに短期参照ピクチャではない場合、現在ブロックが動きベクトル調整モードを用いることを許可せず、すなわち、起動条件5が満たされないことが示される。又は、現在ブロックの1つの参照ピクチャが短期参照ピクチャではない場合、現在ブロックが動きベクトル調整モードを用いることを許可せず、すなわち、起動条件5が満たされないことが示される。又は、現在ブロックの2つの参照ピクチャがともに短期参照ピクチャではない場合、現在ブロックが動きベクトル調整モードを用いることを許可せず、すなわち、起動条件5が満たされないことが示される。
【0129】
別の可能な実施の形態では、現在ブロックの2つの参照ピクチャがともに長期参照ピクチャではない場合、現在ブロックが動きベクトル調整モードを用いることを許可することが示される。長期参照ピクチャの表示番号POCには実際の意味がなく、長期参照ピクチャは、現在ピクチャから離れる参照ピクチャ、又は、数フレームの実際の画像を合成した画像フレームを意味する。
【0130】
例示的には、現在ブロックの1つの参照ピクチャが長期参照ピクチャである場合、現在ブロックが動きベクトル調整モードを用いることを許可せず、すなわち、起動条件5が満たされないことが示される。又は、現在ブロックの2つの参照ピクチャがともに長期参照ピクチャである場合、現在ブロックが動きベクトル調整モードを用いることを許可せず、すなわち、起動条件5が満たされないことが示される。
【0131】
6、現在ブロックの幅、高さ及び面積が全て限定範囲内にある。
【0132】
1つの可能な実施の形態では、現在ブロックの幅cbWidthが第1の閾値(例えば8)以上であり、現在ブロックの高さcbHeightが第2の閾値(例えば8)以上であり、現在ブロックの面積(cbHeight*cbWidth)が第3の閾値(例えば、128)以上である場合、現在ブロックが動きベクトル調整モードを用いることを許可することが示される。
【0133】
例示的には、現在ブロックの幅cbWidthが第1の閾値未満である場合、現在ブロックが動きベクトル調整モードを用いることを許可せず、すなわち、起動条件6が満たされないことが示される。又は、現在ブロックの高さcbHeightが第2の閾値未満である場合、現在ブロックが動きベクトル調整モードを用いることを許可せず、すなわち、起動条件6が満たされないことが示される。又は、現在ブロックの面積が第3の閾値未満である場合、現在ブロックが動きベクトル調整モードを用いることを許可せず、すなわち、起動条件6が満たされないことが示される。
【0134】
別の可能な実施の形態では、現在ブロックの幅cbWidthが第1の閾値(例えば8)以上であり、現在ブロックの高さcbHeightが第2の閾値(例えば8)以上であり、現在ブロックの面積(cbHeight*cbWidth)が第4の閾値(例えば64)よりも大きい場合、現在ブロックが動きベクトル調整モードを用いることを許可することが示される。
【0135】
例示的には、現在ブロックの幅cbWidthが第1の閾値未満である場合、現在ブロックが動きベクトル調整モードを用いることを許可せず、すなわち、起動条件6が満たされないことが示される。又は、現在ブロックの高さcbHeightが第2の閾値未満である場合、現在ブロックが動きベクトル調整モードを用いることを許可せず、すなわち、起動条件6が満たされないことが示される。又は、現在ブロックの面積が第4の閾値以下である場合、現在ブロックが動きベクトル調整モードを用いることを許可せず、すなわち、起動条件6が満たされないことが示される。
【0136】
7、現在ブロックの2つの参照ピクチャのサイズが現在ピクチャのサイズと同じである。
【0137】
1つの可能な実施の形態では、list0の参照ピクチャのサイズが現在ピクチャのサイズと同じであり、例えば、list0の参照ピクチャの幅が現在ピクチャの幅と同じであり、list0の参照ピクチャの高さが現在ピクチャの高さと同じであり、list1の参照ピクチャのサイズが現在ピクチャのサイズと同じであり、例えば、list1の参照ピクチャの幅が現在ピクチャの幅と同じであり、list1の参照ピクチャの高さが現在ピクチャの高さと同じである場合、現在ブロックが動きベクトル調整モードを用いることを許可することが示される。
【0138】
例示的には、現在ブロックの2つの参照ピクチャのうちの少なくとも1つの参照ピクチャのサイズが現在ピクチャのサイズが異なる場合、現在ブロックが動きベクトル調整モードを用いることを許可せず、すなわち、起動条件7が満たされないことが示される。例えば、list0の参照ピクチャの幅が現在ピクチャの幅と異なる場合、現在ブロックが動きベクトル調整モードを用いることを許可しないことが示される。又は、list0の参照ピクチャの高さが現在ピクチャの高さと異なる場合、現在ブロックが動きベクトル調整モードを用いることを許可しないことが示される。又は、list1の参照ピクチャの幅が現在ピクチャの幅と異なる場合、現在ブロックが動きベクトル調整モードを用いることを許可しないことが示される。又は、list1の参照ピクチャの高さが現在ピクチャの高さと異なる場合、現在ブロックが動きベクトル調整モードを用いることを許可しないことが示される。
【0139】
実施例5:上記実施例では、現在ブロックの各サブブロックに対して、該サブブロックの第1のオリジナル動きベクトルに基づいて、第1の参照ピクチャから該サブブロックに対応する第1の参照ブロックを決定し、第1の参照ブロックにおける各画素点の画素値は第1の画素値と呼ばれ、該サブブロックの第2のオリジナル動きベクトルに基づいて、第2の参照ピクチャから該サブブロックに対応する第2の参照ブロックを決定し、第2の参照ブロックにおける各画素点の画素値は第2の画素値と呼ばれることに関する。以下に説明する。
【0140】
第1の参照ブロックにおける各画素点の第1の画素値は、第1の参照ブロックにおける近傍画素点の画素値を補間して得られるものであるか、又は、第1の参照ブロックにおける近傍画素点の画素値をコピーして得られるものである。
【0141】
第2の参照ブロックにおける各画素点の第2の画素値は、第2の参照ブロックにおける近傍画素点の画素値を補間して得られるものであるか、又は、第2の参照ブロックにおける近傍画素点の画素値をコピーして得られるものである。
【0142】
第1の参照ブロックのサイズは第2の参照ブロックのサイズと同じであり、第1の参照ブロック/第2の参照ブロックの幅はサブブロックの幅と探索範囲に基づいて決定され、第1の参照ブロック/第2の参照ブロックの高さはサブブロックの高さと探索範囲に基づいて決定される。
【0143】
例えば、現在ブロックのdx*dyのサブブロックの各々(例えば、16*16のサブブロック、又はより小さいサブブロック、又はより大きいサブブロック。より小さいサブブロックは8*8であってもよく、より大きいサブブロックは32*32であってもよいが、これについては限定しない。例示的には、サブブロックの大きさは、現在ブロックの大きさと同じであってもよく、すなわち、サブブロックは現在ブロックであり、例えば、現在ブロックは、8*16である場合、大きさが8*16の1つのサブブロックのみを含む。一方、サブブロックの大きさは、現在ブロックの大きさと異なってもよい。例えば、現在ブロックは、8*32である場合、8*16の2つのサブブロックを含むことができる。もちろん、上記は例にすぎず、説明の便利上のために、以下、16*16のサブブロックを例として説明する)に関しては、サブブロックの幅がdxであり、サブブロックの高さがdyであり、第1のオリジナル動きベクトルをMV0とし、第2のオリジナル動きベクトルをMV1とする。
【0144】
第1のオリジナル動きベクトルMV0の第1の参照ピクチャにおける対応位置に基づいて、面積が(dx+filtersize-1)*(dy+filtersize-1)の整数画素ブロックを得、この整数画素ブロックを整数画素ブロックAとすることができる。
【0145】
第2のオリジナル動きベクトルMV1の第2の参照ピクチャにおける対応位置に基づいて、面積が(dx+filtersize-1)*(dy+filtersize-1)の整数画素ブロックを得、この整数画素ブロックを整数画素ブロックBとすることができる。
【0146】
1つの可能な実施の形態では、面積が(dx+filtersize-1)*(dy+filtersize-1)の整数画素ブロックAをベースとして、バイリニア補間により、サイズが(dx+2*IterNum)*(dy+2*IterNum)の初期参照画素ブロックを取得し、この初期参照画素ブロックを第1の参照ブロックとすることができる。面積が(dx+filtersize-1)*(dy+filtersize-1)の整数画素ブロックBをベースとして、バイリニア補間により、サイズが(dx+2*IterNum)*(dy+2*IterNum)の初期参照画素ブロックを取得し、この初期参照画素ブロックを第2の参照ブロックとすることができる。
【0147】
別の可能な実施の形態では、面積が(dx+filtersize-1)*(dy+filtersize-1)の整数画素ブロックAをベースとして、直接コピー(補間不要)することにより、サイズが(dx+2*IterNum)*(dy+2*IterNum)の初期参照画素ブロックを取得し、この初期参照画素ブロックを第1の参照ブロックとする。面積が(dx+filtersize-1)*(dy+filtersize-1)の整数画素ブロックBをベースとして、直接コピーすることにより、サイズが(dx+2*IterNum)*(dy+2*IterNum)の初期参照画素ブロックを取得し、この初期参照画素ブロックを第2の参照ブロックとする。
【0148】
例示的には、輝度成分のみに対して(後続の探索プロセスにおいて、輝度成分のみを用いてコスト値を計算することで、複雑さを低減させる)、面積が(dx+filtersize-1)*(dy+filtersize-1)の整数画素ブロック(例えば、整数画素ブロックA及び整数画素ブロックB)をベースとして、サイズが(dx+2*IterNum)*(dy+2*IterNum)の初期参照画素ブロックを取得し、該初期参照画素ブロックは第1の参照ブロック(例えば、Pred_Inter0)及び第2の参照ブロック(例えば、Pred_Inter1)である。
【0149】
一例では、filtersizeは、8など、補間フィルタのタップ数であってもよいが、これについては限定しない。
【0150】
一例では、バイリニア補間により第1の参照ブロック/第2の参照ブロックを取得することとは、第1の参照ブロック/第2の参照ブロックにおける各画素点の画素値が、第1の参照ブロック/第2の参照ブロックにおける近傍画素点の画素値を補間して得られるものであることを意味する。コピーにより第1の参照ブロック/第2の参照ブロックを取得することとは、第1の参照ブロック/第2の参照ブロックにおける各画素点の画素値が、第1の参照ブロック/第2の参照ブロックにおける近傍画素点の画素値をコピーして得られるものであることを意味する。
【0151】
上記実施例を参照すると、第1の参照ブロックの面積は(dx+2*IterNum)*(dy+2*IterNum)、第2の参照ブロックの面積は(dx+2*IterNum)*(dy+2*IterNum)であり、例えば、第1の参照ブロック/第2の参照ブロックの幅値はdx+2*IterNumであり、第1の参照ブロック/第2の参照ブロックの高さ値はdy+2*IterNumである。dxはサブブロックの幅であり、dyはサブブロックの高さであり、IterNumは、後続の実施例の反復回数などの探索範囲SRであってもよく、IterNumはターゲット動きベクトルとオリジナル動きベクトルの最大水平/垂直成分補間であってもよく、例えば、IterNumは2などであってもよい。
【0152】
図5に示すように、16*16のサブブロックに対して、第1のオリジナル動きベクトルMV0の第1の参照ピクチャにおける対応位置に基づいて、面積が23(すなわち、16+8-1)*23の整数画素ブロックAを得る。面積が23*23の整数画素ブロックAをベースとして、バイリニア補間により、サイズが20(すなわち16+2*2)*20の第1の参照ブロックを取得することができる。同様に、16*16のサブブロックに対して、第2のオリジナル動きベクトルMV1の第2の参照ピクチャにおける対応位置に基づいて、面積が23*23の整数画素ブロックBを得る。面積が23*23の整数画素ブロックBをベースとして、サイズが20*20の第2の参照ブロックを取得する。
【0153】
第1の参照ブロック及び第2の参照ブロックは、後続プロセスにおける動きベクトルの調整に用いられる。
【0154】
実施例6:上記実施例では、現在ブロックの各サブブロックに対して、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、第1のオリジナル動きベクトルを調整し、サブブロックの第1のターゲット動きベクトルを得、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、第2のオリジナル動きベクトルを調整し、サブブロックの第2のターゲット動きベクトルを得ることに関する。1つのサブブロック(例えば、現在ブロックの、大きさがdx*dyのサブブロックの各々)の処理プロセスを例として、オリジナル動きベクトルの調整プロセスについて説明する。
【0155】
ステップa1において、第1のオリジナル動きベクトル又は第2のオリジナル動きベクトルを中心動きベクトルとして決定する。
【0156】
例えば、第1のオリジナル動きベクトルを(4,4)、第2のオリジナル動きベクトルを(-4,-4)とし、第1のオリジナル動きベクトル(4,4)又は第2のオリジナル動きベクトル(-4,-4)を中心動きベクトルとして決定する。
【0157】
説明の便利上のために、この後、第1のオリジナル動きベクトル(4,4)を中心動きベクトルとして決定することを例とし、第2のオリジナル動きベクトル(-4,-4)を中心動きベクトルとして決定するプロセスが類似であり、ここで詳しく説明しない。
【0158】
ステップa2において、中心動きベクトルに対応するエッジ動きベクトルを決定する。
【0159】
例えば、中心動きベクトル(x,y)を異なる方向にSだけオフセットして、異なる方向のエッジ動きベクトル(x,y+S)、エッジ動きベクトル(x,y-S)、エッジ動きベクトル(x+S,y)、エッジ動きベクトル(x-S,y)、エッジ動きベクトル(x+right,y+down)を得る。例示的には、rightはS又は-Sであってもよく、downはS又は-Sであってもよく、right及びdownの決定方式については、後続の実施例を参照することができる。
図6に示すように、中心動きベクトル(x,y)を中心とし、すなわち、中心動きベクトルが(0,0)であり、Sが1であり、right及びdownがともに1であることを例とすると、中心動きベクトル(0,0)に対応するエッジ動きベクトルは、エッジ動きベクトル(0,1)、エッジ動きベクトル(0,-1)、エッジ動きベクトル(1,0)、エッジ動きベクトル(-1,0)、エッジ動きベクトル(1,1)を含む。
【0160】
ステップa3において、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、中心動きベクトルに対応する第1のコスト値、及び各エッジ動きベクトルに対応する第2のコスト値を取得する。
【0161】
例えば、第1の参照ブロックからコピーして中心動きベクトル(0,0)に対応するサブ参照ブロックA1を取得し、サブ参照ブロックA1は、中心動きベクトル(0,0)の第1の参照ブロックにおけるサブ参照ブロックである。第2の参照ブロックからコピーして中心動きベクトル(0,0)に対応するサブ参照ブロックB1を取得し、サブ参照ブロックB1は、中心動きベクトル(0,0)の第2の参照ブロックにおけるサブ参照ブロックである。次に、サブ参照ブロックA1の第1の画素値及びサブ参照ブロックB1の第2の画素値を用いて、中心動きベクトル(0,0)に対応するコスト値1を取得し、コスト値の決定方式については、後続の実施例を参照することができる。
【0162】
第1の参照ブロックからコピーしてエッジ動きベクトル(0,1)に対応するサブ参照ブロックA2を取得し、サブ参照ブロックA2は、エッジ動きベクトル(0,1)の第1の参照ブロックにおけるサブ参照ブロックである。第2の参照ブロックからコピーしてエッジ動きベクトル(0,1)の対称動きベクトル(0,-1)に対応するサブ参照ブロックB2を取得し、サブ参照ブロックB2は、対称動きベクトル(0,-1)の第2の参照ブロックにおけるサブ参照ブロックである。サブ参照ブロックA2の第1の画素値及びサブ参照ブロックB2の第2の画素値を用いて、エッジ動きベクトル(0,1)に対応するコスト値2を取得し、コスト値の決定方式については、後続の実施例を参照することができる。
【0163】
エッジ動きベクトル(0,1)に対応するコスト値2の決定方式に従って、エッジ動きベクトル(0,-1)に対応するコスト値3、エッジ動きベクトル(1,0)に対応するコスト値4、エッジ動きベクトル(-1,0)に対応するコスト値5、エッジ動きベクトル(1,1)に対応するコスト値6を決定することができるが、ここで詳しく説明しない。
【0164】
ステップa4において、第1のコスト値及び第2のコスト値に基づいて、中心動きベクトル及びエッジ動きベクトルから1つの動きベクトルを最適な動きベクトルとして選択する。例えば、コスト値が最も小さい動きベクトルを最適な動きベクトルとすることができる。
【0165】
例えば、エッジ動きベクトル(0,1)に対応するコスト値2が最も小さいと、コスト値2に対応するエッジ動きベクトル(0,1)を最適な動きベクトルとすることができる。もちろん、ここでは一例にすぎず、これについては限定しない。
【0166】
ステップa5において、終了条件を満たすか否かを判断する。そうではなければ、該最適な動きベクトルを中心動きベクトルとして決定し、ステップa2に戻ることができる。そうであれば、ステップa6を行うことができる。
【0167】
一例では、反復回数/探索範囲が閾値に達すると、終了条件を満たす一方、反復回数/探索範囲が閾値に達さないと、終了条件を満たさない。例えば、SRを2、すなわち、閾値を2とし、反復回数/探索範囲が2回に達しており、すなわち、ステップa2~ステップa4を2回行っていると、終了条件を満たす。そうではないと、終了条件を満たさない。
【0168】
別の例では、中心動きベクトル及びエッジ動きベクトルから1つの動きベクトルを最適な動きベクトルとして選択した後、中心動きベクトルを最適な動きベクトルとして選択すれば、終了条件を満たすことができる。
【0169】
ステップa6において、最適な動きベクトルに基づいて、第1の整数画素動きベクトル調整値(第1のオリジナル動きベクトルを調整することに用いられる)及び第2の整数画素動きベクトル調整値(第2のオリジナル動きベクトルを調整することに用いられる)を決定する。
【0170】
一例では、最適な動きベクトル及び第1のオリジナル動きベクトルに基づいて第1の整数画素動きベクトル調整値を決定し、第1の整数画素動きベクトル調整値に基づいて第2の整数画素動きベクトル調整値を決定し、例示的には、第2の整数画素動きベクトル調整値は、第1の整数画素動きベクトル調整値と対称的であってもよい。
【0171】
例えば、初めての反復プロセスにおいて、最適な動きベクトルはエッジ動きベクトル(0,1)であり、エッジ動きベクトル(0,1)を中心として2回目の反復を行い、2回目の反復プロセスにおいて、最適な動きベクトルはエッジ動きベクトル(0,1)であり、ここまで反復プロセスが完了すると仮定すると、第1の整数画素動きベクトル調整値は(0,2)すなわちエッジ動きベクトル(0,1)とエッジ動きベクトル(0,1)との和である。これに基づいて、第1のオリジナル動きベクトルを(4,4)とすると、初めての反復プロセスにおいて、最適な動きベクトルはエッジ動きベクトル(0,1)であり、すなわち、最適な動きベクトルは最適な動きベクトル(4,5)に対応する。エッジ動きベクトル(0,1)を中心として2回目の反復を行い、2回目の反復プロセスにおいて、最適な動きベクトルはエッジ動きベクトル(0,1)であり、すなわち、最適な動きベクトルは最適な動きベクトル(4,6)に対応する。以上のように、最適な動きベクトル(4,6)及び第1のオリジナル動きベクトル(4,4)に基づいて第1の整数画素動きベクトル調整値を決定し、第1の整数画素動きベクトル調整値は最適な動きベクトル(4,6)と第1のオリジナル動きベクトル(4,4)との差分であり、すなわち、第1の整数画素動きベクトル調整値は(0,2)である。第1の整数画素動きベクトル調整値(0,2)に基づいて第2の整数画素動きベクトル調整値を決定し、第2の整数画素動きベクトル調整値は(0,-2)すなわち(0,2)の対称値であってもよい。
【0172】
ステップa7において、最適な動きベクトルに基づいて第1の小数画素動きベクトル調整値(第1のオリジナル動きベクトルを調整することに用いられる)及び第2の小数画素動きベクトル調整値(第2のオリジナル動きベクトルを調整することに用いられる)を決定する。
【0173】
一例では、最適な動きベクトルに対応するコスト値、及び最適な動きベクトルに対応するエッジ動きベクトルに対応するコスト値に基づいて、第1の小数画素動きベクトル調整値を決定し、次に、前記第1の小数画素動きベクトル調整値に基づいて、第2の小数画素動きベクトル調整値を決定する。例えば、x0=N*(E(-1,0)-E(1,0))/(E(-1,0)+E(1,0)-2*E(0,0))であり,y0=N*(E(0,-1)-E(0,1))/(E(0,-1)+E(0,1)-2*E(0,0))である。1/2、1/4、1/8及び1/16の動きベクトル画素精度の場合、Nは1、2、4及び8である。次に、(x0,y0)の値をdeltaMvに与え、SPMV=deltaMv/2Nとなる。現在、1/16の動きベクトル画素精度の場合、SPMVは(x0/16,y0/16)である。
【0174】
上記式において、SPMVは、第1の小数画素動きベクトル調整値であってもよく、Nは、動きベクトル画素精度に関連するものであってもよく、例えば、動きベクトル画素精度は1/2、Nは1である;動きベクトル画素精度は1/4、Nは2である;動きベクトル画素精度は1/8、Nは4である;動きベクトル画素精度は1/16、Nは8である。
【0175】
上記式において、E(0,0)は最適な動きベクトルのコスト値を表す。E(-1,0)は、最適な動きベクトルを中心とした、最適な動きベクトル(0,0)のエッジ動きベクトル(-1,0)のコスト値である。E(1,0)は、最適な動きベクトルを中心とした、最適な動きベクトル(0,0)のエッジ動きベクトル(1,0)のコスト値である。E(0,-1)は、最適な動きベクトルを中心とした、最適な動きベクトル(0,0)のエッジ動きベクトル(0,-1)のコスト値である。E(0,1)は、最適な動きベクトルを中心とした、最適な動きベクトル(0,0)のエッジ動きベクトル(0,1)のコスト値である。各動きベクトルのコスト値の決定方式については、上記例を参照し、ここで詳しく説明しない。
【0176】
上記方式を用いて第1の小数画素動きベクトル調整値を決定した後、第1の小数画素動きベクトル調整値に基づいて、第1の小数画素動きベクトル調整値の対称値である第2の小数画素動きベクトル調整値を決定することができる。例えば、第1の小数画素動きベクトル調整値が(1,0)であれば、第2の小数画素動きベクトル調整値は(-1,0)すなわち第1の小数画素動きベクトル調整値(1,0)の対称値であってもよい。
【0177】
ステップa8において、第1の整数画素動きベクトル調整値及び/又は第1の小数画素動きベクトル調整値に基づいて、第1のオリジナル動きベクトルを調整し、第1のターゲット動きベクトルを得る。例えば、第1のターゲット動きベクトル=第1のオリジナル動きベクトル+第1の整数画素動きベクトル調整値+第1の小数画素動きベクトル調整値である。
【0178】
ステップa9において、第2の整数画素動きベクトル調整値及び/又は第2の小数画素動きベクトル調整値に基づいて、第2のオリジナル動きベクトルを調整し、第2のターゲット動きベクトルを得る。例えば、第2のターゲット動きベクトル=第2のオリジナル動きベクトル+第2の整数画素動きベクトル調整値+第2の小数画素動きベクトル調整値である。
【0179】
実施例7:上記実施例では、現在ブロックの各サブブロックに対して、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、第1のオリジナル動きベクトルを調整し、サブブロックの第1のターゲット動きベクトルを得、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、第2のオリジナル動きベクトルを調整し、サブブロックの第2のターゲット動きベクトルを得ることに関する。1つのサブブロック(例えば、現在ブロックの、大きさがdx*dyのサブブロックの各々)の処理プロセスを例として、オリジナル動きベクトルの調整プロセスについて説明する。
【0180】
本実施例では、第1のオリジナル動きベクトルをOrg_MV0とし、第2のオリジナル動きベクトルをOrg_MV1とし、第1のオリジナル動きベクトルOrg_MV0を調整した後、得られた第1のターゲット動きベクトルをRefined_MV0とし、第2のオリジナル動きベクトルOrg_MV1を調整した後、得られた第2のターゲット動きベクトルをRefined_MV1とする。
【0181】
ステップb1において、SR回の反復を行い、最適な整数画素MV点の整数画素オフセットを取得し、IntegerDeltaMVとし、IntegerDeltaMVは、上記実施例における第1の整数画素動きベクトル調整値である。例えば、まず、IntegerDeltaMVを(0,0)に初期化し、毎回の反復では、以下のプロセスを行う。
【0182】
ステップb11において、deltaMVを(0,0)とする。初回反復では、第1のオリジナル動きベクトルの第1の参照ブロックにおける参照画素に基づいて、コピーして予測値ブロックA1(すなわち、第1の参照ブロックの最中心にあるdx*dyのブロック)を取得し、第2のオリジナル動きベクトルの第2の参照ブロックにおける参照画素に基づいて、コピーして予測値ブロックB1(すなわち、第2の参照ブロックの最中心にあるdx*dyのブロック)を取得する。予測値ブロックA1及び予測値ブロックB1に基づいて、初期コスト値costを取得する(初期コスト値は予測値ブロックA1及び予測値ブロックB1に基づいたSAD(絶対差分和、sum of abstract distortion)であり、決定方式は、後続の実施例を参照)。該初期コスト値costがdx*dy(dx及びdyが現在のサブブロックの幅及び高さである)未満であると、後続の探索プロセスを直接スキップし、ステップb2を行い、notZeroCostをfalseとして設定する。
【0183】
ステップb12において、例えば、
図6に示すように、上記初期点を中心とし、{Mv(0,1),Mv(0,-1),Mv(1,0),Mv(-1,0),Mv(right, down)}の順で5つのオフセットMV(この5つのオフセットMVは全てMVOffsetと呼ばれる)を得、この5つのオフセットMVのコスト値の計算及び比較プロセスを行う。例えば、あるMVOffset(例えば、Mv(0,1)など)に基づいて、第1の参照ブロック及び第2の参照ブロックでは、このMVOffsetによって2つの予測値ブロック(例えば、第1の参照ブロックにおいて中心位置オフセットMVOffsetを行ったdx*dyブロック、及び、第2の参照ブロックにおいて中心位置オフセット-MVOffset(MVOffsetと逆)を行ったdx*dyブロック)を取得し、2つの予測値ブロックのダウンサンプリングSADをMVOffsetのコスト値として計算する。
【0184】
次に、コスト値が最も小さいMVOffsetを残し、コスト値が最も小さいMVOffsetをdeltaMVの値に更新し、コスト値が最も小さいMVOffsetを次の反復の新しい中心オフセット点とする。
【0185】
deltaMVに基づいてIntegerDeltaMVの値を更新し、更新後のIntegerDeltaMV=更新前のIntegerDeltaMV+deltaMVであり、すなわち、現在のIntegerDeltaMVにdeltaMVを加える。
【0186】
ステップb13において、反復後、最適なMVが引き続き初期MVである(すなわち、MVOffsetではない)又は最小コスト値が0であると、次の反復探索プロセスを行わず、ステップb2を行い、notZeroCostをfalseとして設定する。
【0187】
そうでない場合は、反復回数がSRに達すると、ステップb2を行い、反復回数がSRに達さないと、最適なMVを中心とし、次の反復探索プロセスを行い、すなわち、ステップb11に戻る。
【0188】
反復探索プロセスの終了後、IntegerDeltaMVの値、すなわち、第1の整数画素動きベクトル調整値であるIntegerDeltaMVの最終値を得、この後、IntegerDeltaMVとする。
【0189】
ステップb2において、ステップb1の最適な整数画素MV点を中心とし、最適な小数画素オフセットMVを取得し、SPMVとし、SPMVは、上記実施例における第1の小数画素動きベクトル調整値である。
【0190】
例えば、まず、SPMVを(0,0)に初期化し、次に以下のプロセスを行う。
【0191】
ステップb21において、notZeroCostがfalseではなく、deltaMVが(0,0)である場合のみ、後続処理を行うことができ(すなわち、SPMVを取得する必要がある)、そうでない場合は、IntegerDeltaMV及びSPMVを用いてオリジナル動きベクトルを調整するのではなく、直接IntegerDeltaMVを用いてオリジナル動きベクトルを調整する。
【0192】
ステップb22において、E(x,y)をステップb1で得られた最適なMV点を(x,y)だけオフセットしたMVに対応するコスト値(ステップb1で計算されたコスト値)として表す。中心及び上下左右の5つの点のE(x,y)に基づいて、E(x,y)が最も小さい点のオフセット(x0,y0):x0=N*(E(-1,0)-E(1,0))/(E(-1,0)+E(1,0)-2*E(0,0))、y0=N*(E(0,-1)-E(0,1))/(E(0,-1)+E(0,1)-2*E(0,0))を得ることができる。一例では、1/2、1/4、1/8及び1/16の動きベクトル画素精度の場合、Nは1、2、4及び8である。次に、(x0,y0)の値をdeltaMvに与え、SPMV=deltaMv/2Nとなる。現在、1/16の動きベクトル画素精度の場合、SPMVは(x0/16,y0/16)であってもよい。
【0193】
E(-1,0)=E(0,0)であれば、水平に左へ半分の画素だけオフセットする(deltaMv[0]=-N)。
【0194】
E(1,0)=E(0,0)であれば、水平に右へ半分の画素だけオフセットする(deltaMv[0]=N)。
【0195】
E(0,-1)=E(0,0)であれば、垂直に上へ半分の画素だけオフセットする(deltaMv[1]=-N)。
【0196】
E(0,1)=E(0,0)であれば、垂直に下へ半分の画素だけオフセットする(deltaMv[1]=N)。
【0197】
上記処理によって、SPMVの値、すなわち第1の小数画素動きベクトル調整値を得ることができる。
【0198】
ステップb3において、ステップb1の整数画素オフセットIntegerDeltaMV及びステップb2の小数画素オフセットSPMVに基づいて、最適なオフセットMVを取得し、この最適なオフセットMVをBestMVoffsetとすることができる。また、BestMVoffset=IntegerDeltaMV+SPMVである。BestMVoffsetに基づいて2つの方向のターゲット動きベクトル:Refined_MV0=Org_MV0+BestMVoffset;Refined_MV1=Org_MV1-BestMVoffsetを得ることができる。
【0199】
明らかに、BestMVoffset=IntegerDeltaMV+SPMV、すなわち第1の整数画素動きベクトル調整値と第1の小数画素動きベクトル調整値との和である。また、-IntegerDeltaMVは、IntegerDeltaMVの対称値、すなわち第2の整数画素動きベクトル調整値であり、-SPMVは、SPMVの対称値、すなわち第2の小数画素動きベクトル調整値であり、従って、-BestMVoffset=(-IntegerDeltaMV)+(-SPMV)、すなわち第2の整数画素動きベクトル調整値と第2の小数画素動きベクトル調整値との和である。
【0200】
実施例8:一例では、第1のオリジナル動きベクトルOrg_MV0及び第2のオリジナル動きベクトルOrg_MV1を第1のターゲット動きベクトルRefined_MV0及び第2のターゲット動きベクトルRefined_MV1に調整するために、実現形態は実施例7と同様であるが、相違点は、以下のとおりである。ステップb11の「該初期コスト値costがdx*dy未満であると、後続の探索プロセスを直接スキップする」を除去し、つまり、初期コスト値costがdx*dy未満であっても、「後続の探索プロセスを直接スキップする」ことなく、後続の探索プロセスを続行し、すなわち、ステップb12を行う必要がある。
【0201】
実施例9:第1のオリジナル動きベクトルOrg_MV0及び第2のオリジナル動きベクトルOrg_MV1を第1のターゲット動きベクトルRefined_MV0及び第2のターゲット動きベクトルRefined_MV1に調整するために、実現形態は実施例7と同様であるが、相違点は、以下のとおりである。ステップb11の「該初期コスト値costがdx*dy未満であると、後続の探索プロセスを直接スキップする」を除去し、つまり、初期コスト値costがdx*dy未満であっても、「後続の探索プロセスを直接スキップする」ことなく、後続の探索プロセスを続行し、すなわち、ステップb12を行う必要がある。ステップb13の「最適なMVが引き続き初期MVである(すなわち、MVOffsetではない)又は最小コスト値が0であると、次の反復探索プロセスを行わない」を除去し、つまり、最適なMVが引き続き初期MVであっても又は最小コスト値が0であっても、次の反復探索プロセスを行う。
【0202】
実施例10:一例では、第1のオリジナル動きベクトルOrg_MV0及び第2のオリジナル動きベクトルOrg_MV1を第1のターゲット動きベクトルRefined_MV0及び第2のターゲット動きベクトルRefined_MV1に調整するために、実現形態は実施例7と同様であるが、相違点は、以下のとおりである。「notZeroCost」の関連プロセスを除去し、つまり、ステップb11及びステップb13において、notZeroCostの値を設定記憶しない。ステップb21において、notZeroCostがfalseではなく、deltaMVが(0,0)である場合のみ、小数画素のオフセット計算プロセスを行うのではなく、deltaMVが(0,0)である限り、小数画素のオフセット計算プロセス(すなわち、ステップb22)を行うことができる。
【0203】
実施例11:一例では、第1のオリジナル動きベクトルOrg_MV0及び第2のオリジナル動きベクトルOrg_MV1を第1のターゲット動きベクトルRefined_MV0及び第2のターゲット動きベクトルRefined_MV1に調整するために、実現形態は実施例7と同様であるが、相違点は、以下のとおりである。ステップb21の「notZeroCostがfalseではなく、deltaMVが(0,0)である場合のみ、後続処理を行い、そうでない場合は、直接IntegerDeltaMVを用いてオリジナル動きベクトルを調整する」を「notZeroCostがfalseではなく、現在の最適な整数画素の上下左右に1つの整数画素を隔てた4つの点のコスト値がステップb1において計算して取得された場合のみ、後続処理を行い、そうでない場合は、直接IntegerDeltaMVを用いてオリジナル動きベクトルを調整する」に変更する。一例では、「後続処理」は、ステップb22の小数画素のオフセット計算プロセスを意味する。
【0204】
一例では、ステップb22の小数画素のオフセット計算プロセスにおいて、最適な整数画素の上下左右に1つの整数画素を隔てた4つの点のコスト値を用いる必要があり、従って、ステップb1において「最適な整数画素の上下左右に1つの整数画素を隔てた4つの点のコスト値」を計算して取得したことは、必要条件であり得る。
【0205】
実施例12:第1のオリジナル動きベクトルOrg_MV0及び第2のオリジナル動きベクトルOrg_MV1を第1のターゲット動きベクトルRefined_MV0及び第2のターゲット動きベクトルRefined_MV1に調整するために、実現形態は実施例7と同様であるが、相違点は、以下のとおりである。ステップb21の「notZeroCostがfalseではなく、deltaMVが(0,0)である場合のみ、後続処理を行い、そうでない場合は、直接IntegerDeltaMVを用いてオリジナル動きベクトルを調整する」を「現在の最適な整数画素の上下左右に1つの整数画素を隔てた4つの点のコスト値がステップb1において計算して取得された場合のみ、後続処理(すなわち小数画素のオフセット計算プロセス)を行い、そうでない場合は、IntegerDeltaMVを用いてオリジナル動きベクトルを調整する」に変更する。
【0206】
実施例13:第1のオリジナル動きベクトルOrg_MV0及び第2のオリジナル動きベクトルOrg_MV1を第1のターゲット動きベクトルRefined_MV0及び第2のターゲット動きベクトルRefined_MV1に調整するために、実現形態は実施例7と同様であるが、相違点は、以下のとおりである。ステップb21の「notZeroCostがfalseではなく、deltaMVが(0,0)である場合のみ、後続処理を行い、そうでない場合は、直接IntegerDeltaMVを用いてオリジナル動きベクトルを調整する」を「現在の最適な整数画素の上下左右に1つの整数画素を隔てた4つの点のコスト値がステップb1において計算して取得された場合、後続処理(ステップb22の小数画素のオフセット計算プロセス)を行い、そうでない場合は、ステップb23を用いて処理する」に変更する。
【0207】
ステップb23において、現在の最適な整数画素点MV_inter_orgを、距離が最も近く、周りの上下左右に1つの整数画素を隔てた4つの点のコスト値がステップb1で計算して取得された整数画素点MV_inter_nearestとする。次に、MV_inter_nearestを中心とし、ステップb22の小数画素のオフセット計算プロセスを行い、つまり、MV_inter_nearestを中心としてSPMVを取得する。例えば、現在の最適な整数画素点MV_inter_orgの上下左右に1つの整数画素を隔てた4つの点のコスト値が全てステップb1で計算して取得されたわけではないと、最適な整数画素点MV_inter_orgの周りから1つの整数画素点MV_inter_nearestを選択し、整数画素点MV_inter_nearestの上下左右に1つの整数画素を隔てた4つの点のコスト値は、全てステップb1で計算して取得されたものである。
【0208】
次に、整数画素点MV_inter_nearestを現在の最適な整数画素点とし、整数画素点MV_inter_nearestを中心としてSPMVを取得し、具体的な取得方式はステップb22を参照する。整数画素点MV_inter_nearestを中心としてSPMVを取得するとき、ステップb22を参照し、x0及びy0を計算するとき、x0及びy0を[-2N,2N]の範囲内に制限することができる。x0/y0が2Nよりも大きいと、x0/y0に2Nの値を与える。x0/y0が-2N未満であると、x0/y0に-2Nの値を与える。1/2、1/4、1/8及び1/16の動きベクトル画素精度の場合、Nは1、2、4及び8である。
【0209】
実施例14:上記実施例では、中心動きベクトルに対応するエッジ動きベクトルを決定する必要がある。例えば、中心動きベクトル(x,y)を異なる方向へSだけオフセットし、異なる方向のエッジ動きベクトル(x,y+S)、エッジ動きベクトル(x,y-S)、エッジ動きベクトル(x+S,y)、エッジ動きベクトル(x-S,y)、及びエッジ動きベクトル(x+right,y+down)を順に得る。又は、中心動きベクトル(x,y)を異なる方向へSだけオフセットし、異なる方向のエッジ動きベクトル(x,y-S)、エッジ動きベクトル(x,y+S)、エッジ動きベクトル(x-S,y)、エッジ動きベクトル(x+S,y)、及びエッジ動きベクトル(x+right,y+down)を順に得る。例えば、(x,y)を(0,0)、Sを1とすると、(0,1)、(0,-1)、(1,0)、(-1,0)、(right,down)の順序で、5つのエッジ動きベクトルを得る。又は、(0,-1)、(0,1)、(-1,0)、(1,0)、(right,down)の順序で、5つのエッジ動きベクトルを得る。
【0210】
実施例15:上記実施例では、エッジ動きベクトル(x+right,y+down)のデフォルト値は(x-S,y-S)である。エッジ動きベクトル(x+S,y)のコスト値がエッジ動きベクトル(x-S,y)のコスト値未満であると、rightはSである(-SからSに変更する)。エッジ動きベクトル(x,y+S)のコスト値がエッジ動きベクトル(x,y-S)のコスト値未満であると、downはSである(-SからSに変更する)。又は、エッジ動きベクトル(x+S,y)のコスト値がエッジ動きベクトル(x-S,y)のコスト値以下であると、rightはSである(-SからSに変更する)。エッジ動きベクトル(x,y+S)のコスト値がエッジ動きベクトル(x,y-S)のコスト値以下であると、downはSである(-SからSに変更する)。
【0211】
(0,1)、(0,-1)、(1,0)、(-1,0)、(right,down)の順序で、5つのエッジ動きベクトルを得、(right,down)のデフォルト値は(-1,-1)である。エッジ動きベクトル(1,0)のコスト値がエッジ動きベクトル(-1,0)のコスト値未満であると、rightは1である。エッジ動きベクトル(0,1)のコスト値がエッジ動きベクトル(0,-1)のコスト値未満であると、downは1である。又は、エッジ動きベクトル(1,0)のコスト値がエッジ動きベクトル(-1,0)のコスト値以下であると、rightは1である。エッジ動きベクトル(0,1)のコスト値がエッジ動きベクトル(0,-1)のコスト値以下であると、downは1である。例えば、(0,-1)、(0,1)、(-1,0)、(1,0)、(right,down)の順序で、5つのエッジ動きベクトルを得、(right,down)のデフォルト値は(-1,-1)である。エッジ動きベクトル(1,0)のコスト値がエッジ動きベクトル(-1,0)のコスト値未満であると、rightは1である。エッジ動きベクトル(0,1)のコスト値がエッジ動きベクトル(0,-1)のコスト値未満であると、downは1である。又は、エッジ動きベクトル(1,0)のコスト値がエッジ動きベクトル(-1,0)のコスト値以下であると、rightは1である。エッジ動きベクトル(0,1)のコスト値がエッジ動きベクトル(0,-1)のコスト値以下であると、downは1である。
【0212】
実施例16:上記実施例では、現在ブロックの各サブブロックに対して、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、第1のオリジナル動きベクトルを調整し、サブブロックの第1のターゲット動きベクトルを得、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、第2のオリジナル動きベクトルを調整し、サブブロックの第2のターゲット動きベクトルを得ることに関する。1つのサブブロック(例えば、現在ブロックの、大きさがdx*dyのサブブロックの各々)の処理プロセスを例として、オリジナル動きベクトルの調整プロセスについて説明する。
【0213】
ステップc1において、初期動きベクトルを中心とし、初期動きベクトルの周りの、該初期動きベクトルを含む動きベクトルから、一部又は全ての動きベクトルを選択し、選択した動きベクトルを候補動きベクトルとする。例示的には、初期動きベクトルは第1のオリジナル動きベクトル又は第2のオリジナル動きベクトルであってもよい。例えば、第1のオリジナル動きベクトルを中心とし、第1のオリジナル動きベクトルの周りの、第1のオリジナル動きベクトルを含む動きベクトルから、一部又は全ての動きベクトルを候補動きベクトルとして選択する。この選択方式は、後続の実施例を参照してもよい。又は、第2のオリジナル動きベクトルを中心とし、第2のオリジナル動きベクトルの周りの、第2のオリジナル動きベクトルを含む動きベクトルから、一部又は全ての動きベクトルを候補動きベクトルとして選択してもよい。この選択方式については、後続の実施例を参照する。説明の便利上のために、後続の実施例では、以下、第1のオリジナル動きベクトルが中心であること、すなわち、初期動きベクトルが第1のオリジナル動きベクトルであることを例とする。
【0214】
例示的には、初期動きベクトルを中心とし、該初期動きベクトルの周りの、該初期動きベクトルを含む(2*SR+1)*(2*SR+1)個の動きベクトルから、一部又は全ての動きベクトルを選択し、選択した動きベクトルを候補動きベクトルとして決定し、前記SRは探索範囲である。初期動きベクトルの周りの、該初期動きベクトルを含む(2*SR+1)*(2*SR+1)個の動きベクトルから、一部又は全ての動きベクトルを選択し、選択した動きベクトルを候補動きベクトルとして決定するとき、動きベクトルの探索順序は、左から右への順序、上から下への順序を含むことができる。
【0215】
SRが2であると、初期動きベクトルの周りの、初期動きベクトルを含む25個の動きベクトルから全ての動きベクトルを選択し、選択した動きベクトルを候補動きベクトルとして決定する。動きベクトルの探索の順序は、{Mv(-2,-2),Mv(-1,-2),Mv(0,-2),Mv(1,-2),Mv(2,-2),Mv(-2,-1),Mv(-1,-1),Mv(0,-1),Mv(1,-1),Mv(2,-1),Mv(-2,0),Mv(-1,0),Mv(0,0),Mv(1,0),Mv(2,0),Mv(-2,1),Mv(-1,1),Mv(0,1),Mv(1,1),Mv(2,1),Mv(-2,2),Mv(-1,2),Mv(0,2),Mv(1,2),Mv(2,2)}であるか、又は、{Mv(0,0),Mv(-2,-2),Mv(-1,-2),Mv(0,-2),Mv(1,-2),Mv(2,-2),Mv(-2,-1),Mv(-1,-1),Mv(0,-1),Mv(1,-1),Mv(2,-1),Mv(-2,0),Mv(-1,0),Mv(0,0),Mv(1,0),Mv(2,0),Mv(-2,1),Mv(-1,1),Mv(0,1),Mv(1,1),Mv(2,1),Mv(-2,2),Mv(-1,2),Mv(0,2),Mv(1,2),Mv(2,2)}である。
【0216】
SRが2であると、初期動きベクトルの周りの、初期動きベクトルを含む21個の動きベクトルから一部の動きベクトルを選択し、選択した動きベクトルを候補動きベクトルとして決定する。動きベクトルの探索の順序は、{Mv(-1,-2),Mv(0,-2),Mv(1,-2),Mv(-2,-1),Mv(-1,-1),Mv(0,-1),Mv(1,-1),Mv(2,-1),Mv(-2,0),Mv(-1,0),Mv(0,0),Mv(1,0),Mv(2,0),Mv(-2,1),Mv(-1,1),Mv(0,1),Mv(1,1),Mv(2,1),Mv(-1,2),Mv(0,2),Mv(1,2)}であるか、又は、{Mv(0,0),Mv(-1,-2),Mv(0,-2),Mv(1,-2),Mv(-2,-1),Mv(-1,-1),Mv(0,-1),Mv(1,-1),Mv(2,-1),Mv(-2,0),Mv(-1,0),Mv(0,0),Mv(1,0),Mv(2,0),Mv(-2,1),Mv(-1,1),Mv(0,1),Mv(1,1),Mv(2,1),Mv(-1,2),Mv(0,2),Mv(1,2)}である。
【0217】
ステップc2において、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、第1のオリジナル動きベクトル(すなわち、初期動きベクトル)に対応する第3のコスト値、各候補動きベクトルに対応する第4のコスト値を取得する。
【0218】
例えば、第1の参照ブロックからコピーして第1のオリジナル動きベクトルに対応するサブ参照ブロックA1を取得することができ、該サブ参照ブロックA1は、該第1のオリジナル動きベクトルの第1の参照ブロックにおけるサブ参照ブロックであってもよい。次に、第2の参照ブロックからコピーして第2のオリジナル動きベクトルに対応するサブ参照ブロックB1を取得することができ、該サブ参照ブロックB1は、該第2のオリジナル動きベクトルの第2の参照ブロックにおけるサブ参照ブロックである。次に、サブ参照ブロックA1の第1の画素値及びサブ参照ブロックB1の第2の画素値を用いて、第1のオリジナル動きベクトルに対応する第3のコスト値を取得することができる。各候補動きベクトルに対して、第1の参照ブロックからコピーして候補動きベクトルに対応するサブ参照ブロックA2を取得することができ、該サブ参照ブロックA2は、候補動きベクトルの第1の参照ブロックにおけるサブ参照ブロックである。次に、第2の参照ブロックからコピーして候補動きベクトルの対称動きベクトルに対応するサブ参照ブロックB2を取得し、該サブ参照ブロックB2は、対称動きベクトルの第2の参照ブロックにおけるサブ参照ブロックである。サブ参照ブロックA2の第1の画素値及びサブ参照ブロックB2の第2の画素値を用いて、候補動きベクトルに対応する第4のコスト値を取得する。
【0219】
ステップc3において、第3のコスト値及び第4のコスト値に基づいて、第1のオリジナル動きベクトル及び各候補動きベクトルから1つの動きベクトルを選択し、選択した動きベクトルを最適な動きベクトルとして決定する。例えば、コスト値が最も小さい動きベクトル(例えば、第1のオリジナル動きベクトル、又はいずれかの候補動きベクトル)を最適な動きベクトルとすることができる。
【0220】
ステップc4において、最適な動きベクトルに基づいて第1の整数画素動きベクトル調整値(第1のオリジナル動きベクトルを調整することに用いられる)及び第2の整数画素動きベクトル調整値(第2のオリジナル動きベクトルを調整することに用いられる)を決定する。例えば、最適な動きベクトル及び第1のオリジナル動きベクトルに基づいて第1の整数画素動きベクトル調整値を決定し、第1の整数画素動きベクトル調整値に基づいて、第2の整数画素動きベクトル調整値を決定し、第2の整数画素動きベクトル調整値と第1の整数画素動きベクトル調整値とは、対称的である。
【0221】
例えば、最適な動きベクトルを(4,6)、第1のオリジナル動きベクトルを(4,4)とすると、最適な動きベクトル(4,6)及び第1のオリジナル動きベクトル(4,4)に基づいて第1の整数画素動きベクトル調整値を決定し、第1の整数画素動きベクトル調整値は最適な動きベクトル(4,6)と第1のオリジナル動きベクトル(4,4)との差分であり、すなわち、第1の整数画素動きベクトル調整値は(0,2)である。次に、第1の整数画素動きベクトル調整値(0,2)に基づいて第2の整数画素動きベクトル調整値を決定し、第2の整数画素動きベクトル調整値は(0,-2)、すなわち、(0,2)の対称値であってもよい。
【0222】
ステップc5において、最適な動きベクトルに基づいて第1の小数画素動きベクトル調整値(第1のオリジナル動きベクトルを調整することに用いられる)及び第2の小数画素動きベクトル調整値(第2のオリジナル動きベクトルを調整することに用いられる)を決定する。例えば、最適な動きベクトルに対応するコスト値、及び最適な動きベクトルに対応するエッジ動きベクトルに対応するコスト値に基づいて、第1の小数画素動きベクトル調整値を決定し、次に、前記第1の小数画素動きベクトル調整値に基づいて、第2の小数画素動きベクトル調整値を決定する。
【0223】
例えば、x0=N*(E(-1,0)-E(1,0))/(E(-1,0)+E(1,0)-2*E(0,0))であり、y0=N*(E(0,-1)-E(0,1))/(E(0,-1)+E(0,1)-2*E(0,0))である。1/2、1/4、1/8及び1/16の動きベクトル画素精度の場合、Nは1、2、4及び8である。次に、(x0,y0)の値をdeltaMvに与え、SPMV=deltaMv/2Nとなる。現在、1/16の動きベクトル画素精度の場合、SPMVは(x0/16,y0/16)となる。SPMVは、第1の小数画素動きベクトル調整値である。E(0,0)は最適な動きベクトルのコスト値を表し、E(-1,0)は、最適な動きベクトルを中心とした、最適な動きベクトル(0,0)のエッジ動きベクトル(-1,0)のコスト値であり、E(1,0)は、最適な動きベクトルを中心とした、最適な動きベクトル(0,0)のエッジ動きベクトル(1,0)のコスト値であり、E(0,-1)は、最適な動きベクトルを中心とした、最適な動きベクトル(0,0)のエッジ動きベクトル(0,-1)のコスト値であり、E(0,1)は、最適な動きベクトルを中心とした、最適な動きベクトル(0,0)のエッジ動きベクトル(0,1)のコスト値である。各動きベクトルのコスト値の決定方式については、上記実施例を参照する。上記方式を用いて第1の小数画素動きベクトル調整値を決定した後、第1の小数画素動きベクトル調整値に基づいて、第1の小数画素動きベクトル調整値の対称値である第2の小数画素動きベクトル調整値を決定することができる。例えば、第1の小数画素動きベクトル調整値が(1,0)であれば、第2の小数画素動きベクトル調整値は(-1,0)、すなわち、(1,0)の対称値である。
【0224】
ステップc6において、第1の整数画素動きベクトル調整値及び/又は第1の小数画素動きベクトル調整値に基づいて第1のオリジナル動きベクトルを調整し、第1のオリジナル動きベクトルに対応する第1のターゲット動きベクトルを得る。例えば、第1のターゲット動きベクトル=第1のオリジナル動きベクトル+第1の整数画素動きベクトル調整値+第1の小数画素動きベクトル調整値である。
【0225】
ステップc7において、第2の整数画素動きベクトル調整値及び/又は第2の小数画素動きベクトル調整値に基づいて、第2のオリジナル動きベクトルを調整し、第2のオリジナル動きベクトルに対応する第2のターゲット動きベクトルを得る。例えば、第2のターゲット動きベクトル=第2のオリジナル動きベクトル+第2の整数画素動きベクトル調整値+第2の小数画素動きベクトル調整値である。
【0226】
実施例17:上記実施例では、現在ブロックの各サブブロックに対して、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、第1のオリジナル動きベクトルを調整し、サブブロックの第1のターゲット動きベクトルを得、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、第2のオリジナル動きベクトルを調整し、サブブロックの第2のターゲット動きベクトルを得ることに関する。1つのサブブロック(例えば、現在ブロックの、大きさがdx*dyのサブブロックの各々)の処理プロセスを例として、オリジナル動きベクトルの調整プロセスについて説明する。
【0227】
第1のオリジナル動きベクトルをOrg_MV0、第2のオリジナル動きベクトルをOrg_MV1、第1のターゲット動きベクトルをRefined_MV0、第2のターゲット動きベクトルをRefined_MV1とすることができる。
【0228】
ステップd1において、第1のオリジナル動きベクトルを中心とし、第1のオリジナル動きベクトルの周りの、第1のオリジナル動きベクトルを含む(2*SR+1)*(2*SR+1)個の点から、一部又は全ての動きベクトルを選択する。例えば、SR=2の場合、第1のオリジナル動きベクトルの周りの、第1のオリジナル動きベクトルを含む25個の点から一部又は全ての動きベクトルを選択し、選択したこれらの動きベクトルを候補動きベクトルとする。第1のオリジナル動きベクトルのコスト値を決定し、各候補動きベクトルのコスト値を決定する。コスト値が最も小さい動きベクトルを最適な動きベクトルとする。上記実施例のステップb1に比べて、ステップd1において、反復プロセスを行う必要がなく、すなわち、初めての反復で一部の動きベクトルを選択して2回目の反復でもう一部の動きベクトルを選択する反復プロセスを行うことなく、全ての処理すべき候補動きベクトルを1回だけで選択することができる。これにより、全ての処理すべき候補動きベクトルを1回だけで選択することができ、従って、これらの候補動きベクトルを並列処理し、各候補動きベクトルのコスト値を得、それにより、計算の複雑さを低減し、符号化性能を向上させることができる。
【0229】
ステップd2において、最適な動きベクトルに基づいてIntegerDeltaMVの値を決定し、IntegerDeltaMVの最終値は、第1の整数画素動きベクトル調整値であり、この決定方式について詳しく説明せず、上記実施例を参照することができる。
【0230】
ステップd3において、最適な動きベクトルを中心とし、最適な小数画素オフセットMVを取得し、最適な小数画素オフセットをSPMVとし、SPMVの値は、第1の小数画素動きベクトル調整値である。
【0231】
ステップd3の実現プロセスについては、上記ステップb2を参照することができ、ここで詳しく説明しない。
【0232】
ステップd4において、IntegerDeltaMV及びSPMVに基づいて、BestMVoffsetを取得する。例えば、BestMVoffset=IntegerDeltaMV+SPMVである。次に、BestMVoffsetに基づいてターゲット動きベクトル:Refined_MV0=Org_MV0+BestMVoffset、Refined_MV1=Org_MV1-BestMVoffsetを取得することができる。
【0233】
実施例18:第1のオリジナル動きベクトルOrg_MV0及び第2のオリジナル動きベクトルOrg_MV1を第1のターゲット動きベクトルRefined_MV0及び第2のターゲット動きベクトルRefined_MV1に調整するために、実現形態は、実施例16、実施例17と同様である。本実施例では、オリジナル動きベクトルを中心とし、オリジナル動きベクトルの周りの、該オリジナル動きベクトルを含む合計(2*SR+1)*(2*SR+1)個の点から、全ての動きベクトルを選択することができる。例えば、SR=2の場合、オリジナル動きベクトルの周りの、該オリジナル動きベクトルを含む25個の点から全ての動きベクトルを選択し、これらの動きベクトルのコスト値を決定し、各動きベクトルのコスト値を決定する。コスト値が最も小さい動きベクトルを最適な動きベクトルとする。
【0234】
実施例19:第1のオリジナル動きベクトルOrg_MV0及び第2のオリジナル動きベクトルOrg_MV1を第1のターゲット動きベクトルRefined_MV0及び第2のターゲット動きベクトルRefined_MV1に調整するために、実現形態は、実施例16、実施例17と同様である。本実施例では、全ての処理すべき候補動きベクトルを1回だけで選択し、従って、これらの候補動きベクトルを並列処理し、各候補動きベクトルのコスト値を得ることができ、それにより、計算の複雑さを低減し、符号化性能を向上させる。本実施例では、オリジナル動きベクトルを中心とし、オリジナル動きベクトルの周りの、オリジナル動きベクトルを含む合計(2*SR+1)*(2*SR+1)個の点から、オフセットがSR範囲を超えない一部の動きベクトルを選択する。
【0235】
例えば、オリジナル動きベクトルを含む(2*SR+1)*(2*SR+1)個の点から、N個の(Nは1以上、(2*SR+1)*(2*SR+1)以下である)候補点を選択する。次に、このN個の点に対応する動きベクトルのコスト値を決定する。例示的には、このN個の点のコスト値を一定の順序で走査し、コスト値が最も小さい動きベクトルを最適な動きベクトルとして選択することができる。コスト値が同じであると、順序が前の候補点を優先に選択する。例示的には、コスト値の決定方式としては、候補動きベクトルにより取得された2つの予測値のダウンサンプリングSADに基づいてコスト値を決定する。
【0236】
一例では、SR=2とする場合、候補点は25個であってもよく、これらの候補点の順序としては、左から右への順序、上から下への順序を用いることができる。
図7Aに示すように、これらの候補点の順序は{Mv(-2,-2),Mv(-1,-2),Mv(0,-2),Mv(1,-2),Mv(2,-2),Mv(-2,-1),Mv(-1,-1),Mv(0,-1),Mv(1,-1),Mv(2,-1),Mv(-2,0),Mv(-1,0),Mv(0,0),Mv(1,0),Mv(2,0),Mv(-2,1),Mv(-1,1),Mv(0,1),Mv(1,1),Mv(2,1),Mv(-2,2),Mv(-1,2),Mv(0,2),Mv(1,2),Mv(2,2)}であってもよい。又は、
図7Bに示すように、これらの候補点の順序は、{Mv(0,0),Mv(-2,-2),Mv(-1,-2),Mv(0,-2),Mv(1,-2),Mv(2,-2),Mv(-2,-1),Mv(-1,-1),Mv(0,-1),Mv(1,-1),Mv(2,-1),Mv(-2,0),Mv(-1,0),Mv(0,0),Mv(1,0),Mv(2,0),Mv(-2,1),Mv(-1,1),Mv(0,1),Mv(1,1),Mv(2,1),Mv(-2,2),Mv(-1,2),Mv(0,2),Mv(1,2),Mv(2,2)}であってもよい。
【0237】
この25個の点の動きベクトルに対応するコスト値を決定し、上記順序で走査し、コスト値が最も小さい動きベクトルを最適なオフセットMVとして取得し、最適なオフセットMVを用いて整数画素動きベクトル調整値及び小数画素動きベクトル調整値を決定することができ、決定方式は上記実施例を参照し、ここで詳しく説明しない。
【0238】
別の例では、SR=2とする場合、候補点は21個であってもよく、これらの候補点の順序としては、左から右への順序、上から下への順序を用いることができる。
図7Cに示すように、これらの候補点の順序は{Mv(-1,-2),Mv(0,-2),Mv(1,-2),Mv(-2,-1),Mv(-1,-1),Mv(0,-1),Mv(1,-1),Mv(2,-1),Mv(-2,0),Mv(-1,0),Mv(0,0),Mv(1,0),Mv(2,0),Mv(-2,1),Mv(-1,1),Mv(0,1),Mv(1,1),Mv(2,1),Mv(-1,2),Mv(0,2),Mv(1,2)}であってもよい。又は、
図7Dに示すように、これらの候補点の順序は{Mv(0,0),Mv(-1,-2),Mv(0,-2),Mv(1,-2),Mv(-2,-1),Mv(-1,-1),Mv(0,-1),Mv(1,-1),Mv(2,-1),Mv(-2,0),Mv(-1,0),Mv(0,0),Mv(1,0),Mv(2,0),Mv(-2,1),Mv(-1,1),Mv(0,1),Mv(1,1),Mv(2,1),Mv(-1,2),Mv(0,2),Mv(1,2)}であってもよい。
【0239】
この21個の点の動きベクトルに対応するコスト値を決定し、上記順序で走査し、コスト値が最も小さい動きベクトルを最適なオフセットMVとして取得し、最適なオフセットMVを用いて整数画素動きベクトル調整値及び小数画素動きベクトル調整値を決定することができ、決定方式は上記実施例を参照し、ここで詳しく説明しない。
【0240】
別の例では、SR=2とする場合、候補点は25個であってもよく、これらの候補点の順序としては、動きベクトル(0,0)を中心とし、中心に近い順を用いる。
図7Eに示すように、これらの候補点の順序は、{Mv(0,0),Mv(-1,0),Mv(0,-1),Mv(1,0),Mv(0,1),Mv(-1,1),Mv(-1,-1),Mv(1,-1),Mv(1,1),Mv(0,2),Mv(-2,0),Mv(0,-2),Mv(2,0),Mv(1,2),Mv(-1,2),Mv(-2,1),Mv(-2,-1),Mv(-1,-2),Mv(1,-2),Mv(2,-1),Mv(2,1),Mv(-2,2),Mv(-2,-2),Mv(2,-2),Mv(2,2)}であってもよい。この25個の点の動きベクトルに対応するコスト値を決定し、上記順序で走査し、コスト値が最も小さい動きベクトルを最適なオフセットMVとして取得し、最適なオフセットMVを用いて整数画素動きベクトル調整値及び小数画素動きベクトル調整値を決定することができ、決定方式については、上記実施例を参照し、ここで詳しく説明しない。
【0241】
別の例では、SR=2とする場合、候補点は21個であってもよく、これらの候補点の順序としては、動きベクトル(0,0)を中心とし、中心に近い順を用いる。
図7Fに示すように、これらの候補点の順序は、{Mv(0,0),Mv(-1,0),Mv(0,-1),Mv(1,0),Mv(0,1),Mv(-1,1),Mv(-1,-1),Mv(1,-1),Mv(1,1),Mv(0,2),Mv(-2,0),Mv(0,-2),Mv(2,0),Mv(1,2),Mv(-1,2),Mv(-2,1),Mv(-2,-1),Mv(-1,-2),Mv(1,-2),Mv(2,-1),Mv(2,1)}である。この21個の点の動きベクトルに対応するコスト値を決定し、上記順序で走査し、コスト値が最も小さい動きベクトルを最適なオフセットMVとして取得し、最適なオフセットMVを用いて整数画素動きベクトル調整値及び小数画素動きベクトル調整値を決定し、決定方式については、上記実施例を参照する。
【0242】
別の例では、SR=2とする場合、候補点は13個であってもよく、これらの候補点の順序としては、動きベクトル(0,0)を中心とし、中心に近い順を用いる。
図7Gに示すように、これらの候補点の順序は、{Mv(0,0),Mv(-1,0),Mv(0,-1),Mv(1,0),Mv(0,1),Mv(-1,1),Mv(-1,-1),Mv(1,-1),Mv(1,1),Mv(0,2),Mv(-2,0),Mv(0,-2),Mv(2,0)}である。この13個の点の動きベクトルに対応するコスト値を決定し、上記順序で走査し、コスト値が最も小さい動きベクトルを最適なオフセットMVとして取得し、最適なオフセットMVを用いて整数画素動きベクトル調整値及び小数画素動きベクトル調整値を決定することができ、決定方式については、上記実施例を参照する。
【0243】
上記実施例では、1番目の候補動きベクトルがMv(0,0)であると、1番目の候補動きベクトルMv(0,0)のコストSAD(0,0)に対して、SAD(0,0)=SAD(0,0)-SAD(0,0)/4という処理を行い、つまり、強制的に1/4減少させ、他の候補動きベクトルのコストSADに対して上記処理を行わない。
【0244】
1つの可能な実施の形態では、上記候補動きベクトルの検査プロセスにおいて、以下の早期終了方式が存在する。
【0245】
1番目の候補動きベクトル(Mv(0,0))のコストSAD(0,0)が閾値dx*dy未満であると、後続の候補動きベクトルの検査を行わず、つまり、サブブロックの最適な整数画素のオフセットがMv(0,0)である。
【0246】
ある候補動きベクトルのコストが0であると、後続の候補動きベクトルの検査を行わず、現在の候補動きベクトルを最適な整数画素オフセットとする。
【0247】
上記候補動きベクトルの検査プロセスにおいて、上記いずれかの早期終了の状況があると、後続の小数画素オフセットの計算プロセスを行わず、つまり、直接整数画素オフセットによってサブブロックのターゲット動きベクトルを取得する。
【0248】
実施例20:第1のオリジナル動きベクトルOrg_MV0及び第2のオリジナル動きベクトルOrg_MV1を第1のターゲット動きベクトルRefined_MV0及び第2のターゲット動きベクトルRefined_MV1に調整するために、実現形態は、実施例16、実施例17と同様である。本実施例では、全ての処理すべき候補動きベクトルを1回だけで選択し、従って、これらの候補動きベクトルを並列処理し、各候補動きベクトルのコスト値を得、それにより、計算の複雑さを低減し、符号化性能を向上させることができる。本実施例では、オリジナル動きベクトルを中心とし、(2*SR+1)*(2*SR+1)個の点から、オフセットがSR範囲を超えない一部の動きベクトルを選択する。例えば、オリジナル動きベクトルを含む(2*SR+1)*(2*SR+1)個の点から、N個の(Nは1以上、(2*SR+1)*(2*SR+1)以下である)候補点を選択する。このN個の点に対応する動きベクトルのコスト値を決定する。このN個の点のコスト値を一定の順序で走査し、コスト値が最も小さい動きベクトルを最適な動きベクトルとして選択する。コスト値が同じであると、順序が前の候補点を優先に選択する。
【0249】
実施例19とは異なり、実施例19の候補点の位置はいずれも固定されており、すなわち、オリジナル動きベクトルに関係なく、実施例20の候補点の位置は、オリジナル動きベクトルに関連している。以下、いくつかの具体例を併せて説明する。
【0250】
一例では、SR=2とする場合、候補点は13個であってもよく、これらの候補点の順序としては、動きベクトル(0,0)を中心とし、中心に近い順を用いる。中心から第1層の候補点の順序は、オリジナル動きベクトルの大きさに関係ないが、中心から第2層の候補点の順序は、オリジナル動きベクトルの大きさに関連している。これらの候補点の順序は、{Mv(0,0),Mv(-1,0),Mv(0,-1),Mv(1,0),Mv(0,1),Mv(-1,1),Mv(-1,-1),Mv(1,-1),Mv(1,1),Mv(sign_H*2,0),Mv(sign_H*2,sign_V*1),Mv(0,sign_V*2),Mv(0,sign_V*2)}である。第1のオリジナル動きベクトルをMV0、水平成分をMV0_Hor、垂直成分をMV0_Verとする。MV0_Horが0以上であると、sign_H=1である。そうでないと、sign_H=-1である。MV0_Verが0以上であると、sign_V=1である。そうでないと、sign_V=-1である。この13個の点の動きベクトルに対応するコスト値を決定し、上記順序で走査し、コスト値が最も小さい動きベクトルを最適なオフセットMVとして取得し、最適なオフセットMVを用いて整数画素動きベクトル調整値及び小数画素動きベクトル調整値を決定することができ、決定方式については、上記実施例を参照する。
【0251】
別の例では、SR=2とする場合、候補点は13個であってもよく、これらの候補点の順序としては、動きベクトル(0,0)を中心とし、中心に近い順を用いる。中心から第1層の候補点の順序は、オリジナル動きベクトルの大きさに関係ないが、中心から第2層の候補点の順序は、オリジナル動きベクトルの大きさに関連している。これらの候補点の順序は、{Mv(0,0),Mv(-1,0),Mv(0,-1),Mv(1,0),Mv(0,1),Mv(-1,1),Mv(-1,-1),Mv(1,-1),Mv(1,1),Mv(sign_H*2,0),Mv(sign_H*2,sign_V*1),Mv(0,sign_V*2),Mv(0,sign_V*2)}である。第1のオリジナル動きベクトルをMV0、水平成分をMV0_Hor、垂直成分をMV0_Verとする。MV0_Horが0よりも大きいと、sign_H=1である。そうでないと、sign_H=-1である。MV0_Verが0よりも大きいと、sign_V=1である。そうでないと、sign_V=-1である。この13個の点の動きベクトルに対応するコスト値を決定し、上記順序で走査し、コスト値が最も小さい動きベクトルを最適なオフセットMVとして取得し、最適なオフセットMVを用いて整数画素動きベクトル調整値及び小数画素動きベクトル調整値を決定することができ、決定方式については、上記実施例を参照する。
【0252】
実施例21:上記実施例では、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、中心動きベクトルに対応する第1のコスト値、エッジ動きベクトルに対応する第2のコスト値を取得し、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、第1のオリジナル動きベクトルに対応する第3のコスト値、候補動きベクトルに対応する第4のコスト値を取得することに関する。一例では、ダウンサンプリングされていない第1の画素値及びダウンサンプリングされていない第2の画素値に基づいて、中心動きベクトルに対応する第1のコスト値、エッジ動きベクトルに対応する第2のコスト値、第1のオリジナル動きベクトルに対応する第3のコスト値、候補動きベクトルに対応する第4のコスト値を取得する。又は、第1の画素値に対してダウンサンプリング操作を行い、第2の画素値に対してダウンサンプリング操作を行い、ダウンサンプリングされた第1の画素値及びダウンサンプリングされた第2の画素値に基づいて、中心動きベクトルに対応する第1のコスト値、エッジ動きベクトルに対応する第2のコスト値、第1のオリジナル動きベクトルに対応する第3のコスト値、候補動きベクトルに対応する第4のコスト値を取得する。又は、第1の画素値に対してシフト及びダウンサンプリング操作を行い、第2の画素値に対してシフト及びダウンサンプリング操作を行い、次に、操作後の第1の画素値及び操作後の第2の画素値に基づいて、中心動きベクトルに対応する第1のコスト値、エッジ動きベクトルに対応する第2のコスト値、第1のオリジナル動きベクトルに対応する第3のコスト値、候補動きベクトルに対応する第4のコスト値を取得する。
【0253】
異なる場合には、コスト値の決定方式は同様である。例えば、中心動きベクトルに対応するコスト値を取得するために、第1の参照ブロックからコピーして中心動きベクトルに対応するサブ参照ブロックA1を取得し、第2の参照ブロックからコピーして中心動きベクトルの対称動きベクトルに対応するサブ参照ブロックB1を取得し、サブ参照ブロックA1の第1の画素値及びサブ参照ブロックB1の第2の画素値を用いて、中心動きベクトルに対応するコスト値を取得することができる。エッジ動きベクトルに対応するコスト値を取得するために、第1の参照ブロックからコピーしてエッジ動きベクトルに対応するサブ参照ブロックA2を取得し、第2の参照ブロックからコピーしてエッジ動きベクトルの対称動きベクトルに対応するサブ参照ブロックB2を取得し、サブ参照ブロックA2の第1の画素値及びサブ参照ブロックB2の第2の画素値を用いて、エッジ動きベクトルに対応するコスト値を取得することができ、他も同様である。
【0254】
以上のように、動きベクトルに対応するコスト値を取得するために、第1の参照ブロックから該動きベクトルに対応するサブ参照ブロックを取得し、第2の参照ブロックから該動きベクトルの対称動きベクトルに対応するサブ参照ブロックを取得し、次に2つのサブ参照ブロックの画素値を用いて該動きベクトルに対応するコスト値を取得することができ、このプロセスについて詳しく説明しない。
【0255】
実施例22:実施例21をベースにして、ダウンサンプリングされていない第1の画素値(すなわち、第1の参照ブロックにおけるサブ参照ブロックのダウンサンプリングされていない画素値)及びダウンサンプリングされていない第2の画素値(すなわち、第2の参照ブロックにおけるサブ参照ブロックのダウンサンプリングされていない画素値)に基づいて、動きベクトルに対応するコスト値を取得する。例えば、第1の参照ブロックにおけるサブ参照ブロックをpred0、第2の参照ブロックにおけるサブ参照ブロックをpred1とすると、サブ参照ブロックpred0及びサブ参照ブロックpred1の画素に対して垂直ダウンサンプリングを行うことなく、サブ参照ブロックpred0及びサブ参照ブロックpred1の全ての画素値のSADに基づいてコスト値を決定する。
【0256】
サブ参照ブロックpred0及びサブ参照ブロックpred1の全ての画素値に基づいて、コスト値の計算式は、以下のとおりである。
【0257】
【0258】
上記式において、costはコスト値を表すことができ、Wはサブ参照ブロックの幅値であってもよく、Hはサブ参照ブロックの高さ値であってもよく、pred0(i,j)はサブ参照ブロックpred0の第i列第j行の画素値を表すことができ、pred1(i,j)はサブ参照ブロックpred1の第i列第j行の画素値を表すことができ、abs(x)はxの絶対値を表すことができる。
【0259】
実施例23:実施例21をベースにして、第1の画素値に対してダウンサンプリング操作を行い、第2の画素値に対してダウンサンプリング操作を行い、ダウンサンプリングされた第1の画素値(すなわち、第1の参照ブロックにおけるサブ参照ブロックのダウンサンプリングされた画素値)及びダウンサンプリングされた第2の画素値(すなわち、第2の参照ブロックにおけるサブ参照ブロックのダウンサンプリングされた画素値)に基づいて、動きベクトルに対応するコスト値を取得することができる。例えば、第1の参照ブロックにおけるサブ参照ブロックをpred0、第2の参照ブロックにおけるサブ参照ブロックをpred1とすると、サブ参照ブロックpred0及びサブ参照ブロックpred1の全ての画素値のSADに基づいてコスト値を決定する。全ての画素値のSADを用いてコスト値を決定するとき、サブ参照ブロックpred0及びサブ参照ブロックpred1の画素値を垂直にN倍(Nは0よりも大きい整数であり、2であってもよい)ダウンサンプリングする。
【0260】
サブ参照ブロックpred0及びサブ参照ブロックpred1の全ての画素値に基づいて、コスト値の計算式は、以下のとおりである。
【0261】
【0262】
上記式において、costはコスト値を表すことができ、Wはサブ参照ブロックの幅値であってもよく、Hはサブ参照ブロックの高さ値であってもよく、Nはダウンサンプリングのパラメータを表すことができ、0よりも大きい整数であり、2であってもよく、pred0(1+N(i-1),j)はサブ参照ブロックpred0の第1+N(i-1)列第j行の画素値を表すことができ、pred1(1+N(i-1),j)はサブ参照ブロックpred1の第1+N(i-1)列第j行の画素値を表すことができ、abs(x)はxの絶対値を表すことができる。
【0263】
実施例24:実施例21をベースにして、第1の画素値に対してシフト及びダウンサンプリング操作を行い、第2の画素値に対してシフト及びダウンサンプリング操作を行い、操作後の第1の画素値(第1の参照ブロックにおけるサブ参照ブロックのシフトしてダウンサンプリングされた画素値)及び操作後の第2の画素値(第2の参照ブロックにおけるサブ参照ブロックのシフトしてダウンサンプリングされた画素値)に基づいて、動きベクトルに対応するコスト値を取得する。例えば、第1の参照ブロックにおけるサブ参照ブロックをpred0、第2の参照ブロックにおけるサブ参照ブロックをpred1とすると、pred0及びpred1はともにDビットで記憶され、すなわち、pred0における各画素値はいずれもDビットで記憶され、pred1における各画素値はいずれもDビットで記憶される。
【0264】
Dが8以下であると、サブ参照ブロックpred0及びサブ参照ブロックpred1の全ての画素値のSADに基づいてコスト値を決定する。全ての画素値のSADを用いてコスト値を決定するとき、サブ参照ブロックpred0及びサブ参照ブロックpred1の画素値を垂直にN倍(Nは0よりも大きい整数であり、2であってもよい)ダウンサンプリングする。サブ参照ブロックpred0及びサブ参照ブロックpred1の全ての画素値に基づいて、コスト値の計算式は、以下のとおりである。
【0265】
【0266】
上記式において、costはコスト値を表し、Wはサブ参照ブロックの幅値であり、Hはサブ参照ブロックの高さ値であり、Nはダウンサンプリングのパラメータを表し、0よりも大きい整数であり、2であってもよく、pred0(1+N(i-1),j)はサブ参照ブロックpred0の第1+N(i-1)列第j行の画素値を表し、pred1(1+N(i-1),j)はサブ参照ブロックpred1の第1+N(i-1)列第j行の画素値を表し、abs(x)はxの絶対値を表し、よって、第1行、第N+1行、第2N+1行…の差分の絶対値の和を計算することが分かる。
【0267】
Dが8よりも大きいと、まず、サブ参照ブロックpred0及びサブ参照ブロックpred1の全ての画素値を8ビットにシフトし、8ビットのpred0及び8ビットのpred1を取得し、pred0-8bit(i,j)及びpred1-8bit(i,j)とする。SAD計算の記憶コストを節約し、8ビットの記憶がより高い並列度を実現できることを目的とする。
【0268】
【0269】
次に、8ビットのpred0及び8ビットのpred1の画素値を垂直にN倍(Nは0よりも大きい整数であり、2であってもよい)ダウンサンプリングし、このように、コスト値の計算式は以下の式であってもよい。
【0270】
【0271】
上記式において、各表現式の意味については、上記実施例を参照し、ここで詳しく説明しない。
【0272】
実施例25:上記実施例では、現在ブロックの各サブブロックに対して、該サブブロックの第1のターゲット動きベクトル及び第2のターゲット動きベクトルに基づいて、該サブブロックの予測値を決定し、各サブブロックの予測値に基づいて現在ブロックの予測値を決定する。例えば、サブブロックの第1のターゲット動きベクトル及び第2のターゲット動きベクトルに基づいて、補間(例えば、8タップ補間)により2つの方向の参照ブロック(すなわち、3つの成分の予測値を含む第3の参照ブロック及び第4の参照ブロックであり、ターゲット動きベクトルは小数画素である可能性があるため、補間する必要がある)を取得する。次に、第3の参照ブロックの第3の画素値及び第4の参照ブロックの第4の画素値に基づいて重み付けし、最終的な予測値(例えば、3つの成分の予測値)を得る。
【0273】
1つの可能な実施の形態では、最適な動きベクトルが初期動きベクトル(すなわち、第1のオリジナル動きベクトル又は第2のオリジナル動きベクトル)と同じであれば、サブブロックの第1のターゲット動きベクトルに基づいて、第1の参照ピクチャから該サブブロックに対応する第3の参照ブロックを決定し、該サブブロックの第2のターゲット動きベクトルに基づいて、第2の参照ピクチャから該サブブロックに対応する第4の参照ブロックを決定する。該第3の参照ブロックの画素値及び該第4の参照ブロックの画素値を重み付けし、該サブブロックの予測値を得る。
【0274】
例えば、サブブロックの大きさをdx*dyとすると、第1のターゲット動きベクトルに基づいて第1の参照ピクチャから大きさがdx*dyの第3の参照ブロックを決定する。例えば、第1の参照ピクチャから大きさがA*Bの参照ブロックを決定し、A*Bの大きさは、補間方式に関連しており、例えば、Aはdxよりも大きく、Bはdyよりも大きいが、これについては限定しない。該参照ブロックにおける画素値を補間することにより、大きさがdx*dyの第3の参照ブロックを得ることができるが、この補間方式は限定されない。第2のターゲット動きベクトルに基づいて第2の参照ピクチャから大きさがdx*dyの第4の参照ブロックを決定する。例えば、第2の参照ピクチャから大きさがA*Bの参照ブロックを決定し、A*Bの大きさは、補間方式に関連しており、例えば、Aはdxよりも大きく、Bはdyよりも大きいが、これについては限定しない。該参照ブロックにおける画素値を補間することにより、大きさがdx*dyの第4の参照ブロックを得ることができるが、この補間方式は限定されない。
【0275】
別の可能な実施の形態では、最適な動きベクトルが初期動きベクトルと異なれば、第1の参照ピクチャから第5の参照ブロックを決定し、該第5の参照ブロックを拡張し、第6の参照ブロックを得、次に、該サブブロックの第1のターゲット動きベクトルに基づいて、該第6の参照ブロックから該サブブロックに対応する第3の参照ブロックを選択する。第2の参照ピクチャから第7の参照ブロックを決定し、該第7の参照ブロックを拡張し、第8の参照ブロックを得、該サブブロックの第2のターゲット動きベクトルに基づいて、該第8の参照ブロックから該サブブロックに対応する第4の参照ブロックを選択する。次に、該第3の参照ブロックの画素値及び該第4の参照ブロックの画素値を重み付けし、該サブブロックの予測値を得る。
【0276】
例えば、サブブロックの大きさをdx*dyとすると、第1のオリジナル動きベクトルに基づいて第1の参照ピクチャから大きさがdx*dyの第5の参照ブロックを決定する。例えば、第1の参照ピクチャから大きさがA*Bの参照ブロックを決定し、A*Bの大きさは、補間方式に関連しており、例えば、Aはdxよりも大きく、Bはdyよりも大きいが、これについては限定しない。該参照ブロックにおける画素値を補間することにより、大きさがdx*dyの第5の参照ブロックを得ることができるが、この補間方式は限定されない。次に、第5の参照ブロックを拡張し、第6の参照ブロックを得、例えば、近傍値をコピーすることによって、第5の参照ブロックの上下左右に充填し、充填後の参照ブロックを大きさがdx*dyよりも大きい第6の参照ブロックとする。次に、サブブロックの第1のターゲット動きベクトルに基づいて、第6の参照ブロックから、サブブロックに対応した大きさがdx*dyの第3の参照ブロックを選択する。
【0277】
サブブロックの大きさをdx*dyとすると、第2のオリジナル動きベクトルに基づいて第2の参照ピクチャから大きさがdx*dyの第7の参照ブロックを決定する。例えば、第2の参照ピクチャから大きさがA*Bの参照ブロックを決定し、A*Bの大きさは、補間方式に関連しており、例えば、Aはdxよりも大きく、Bはdyよりも大きいが、これについては限定しない。該参照ブロックにおける画素値を補間することにより、大きさがdx*dyの第7の参照ブロックを得ることができるが、この補間方式は限定されない。次に、第7の参照ブロックを拡張し、第8の参照ブロックを得、例えば、近傍値をコピーすることによって、第7の参照ブロックの上下左右に充填し、充填後の参照ブロックを大きさがdx*dyよりも大きい第8の参照ブロックとする。次に、サブブロックの第2のターゲット動きベクトルに基づいて、第8の参照ブロックから、サブブロックに対応した大きさがdx*dyの第4の参照ブロックを選択する。
【0278】
実施例26:ターゲット動きベクトルを取得した後、各サブブロックのターゲット動きベクトルに基づいて、8タップ補間フィルタによって2つの方向の予測値(すなわち、YUVの3つの成分、すなわち、上記第3の参照ブロックの予測値及び第4の参照ブロックの予測値)を取得し、重み付けして最終的な予測値を取得する。又は、各サブブロックのターゲット動きベクトルに基づいて、バイリニア補間フィルタ(ここでは、8タップ補間フィルタではない)によって2つの方向の予測値(すなわち、YUVの3つの成分、すなわち、上記第3の参照ブロックの予測値及び第4の参照ブロックの予測値)を取得し、重み付けして最終的な予測値を取得する。
【0279】
実施例27:2つの方向の予測値を取得した後、平均値を重み付け平均する(すなわち、2つの方向の予測値のウェイトが同じである)ことによって、最終的な予測値を取得する。又は、2つの方向の予測値を取得した後、重み付け平均して最終的な予測値を取得し、2つの予測値のウェイトは、異なってもよい。例えば、2つの予測値のウェイト比率は1:2、1:3、2:1などであってもよい。符号化側に関しては、ウェイトテーブルは、1:2、1:3、2:1などのウェイト比率を含むことができ、符号化側は各ウェイト比率のコスト値を決定し、コスト値が最も小さいウェイト比率を決定することができ、このように、符号化側はコスト値が最も小さいウェイト比率に基づいて、重み付け平均して最終的な予測値を取得する。符号化側が復号側に符号化ビットストリームを送信するとき、該符号化ビットストリームには、ウェイト比率のウェイトテーブルにおけるインデックス値が含まれる。このように、復号側は、符号化ビットストリームのインデックス値を解析することで、ウェイトテーブルから該インデックス値に対応するウェイト比率を取得し、ウェイト比率に基づいて重み付け平均して最終的な予測値を取得する。
【0280】
一例では、ウェイトテーブルは、{-2,3,4,5,10}を含むことができるがこれに限られない。例示的には、2つのウェイトの和は8であってもよい。2つのウェイトの和が8である限り、各ウェイトは、負の値であってもよい。
【0281】
例えば、ウェイト「-2」は、負の値であり、一方の予測値のウェイトは-2であると、他方の予測値のウェイトは10であり、すなわち、2つのウェイトの和は8である。この場合、最終予測値=(予測値1*(-2)+予測値2*(8-(-2)))である。
【0282】
また例えば、ウェイト「10」は、一方の予測値のウェイトが10であるが、他方の予測値のウェイトが-2であり、すなわち、2つのウェイトの和が8であることを表し、この場合、最終予測値=(予測値1*(10)+予測値2*(-2))である。
【0283】
また例えば、ウェイト「3」は、一方の予測値のウェイトが3であるが、他方の予測値のウェイトが5であり、すなわち、2つのウェイトの和が8であることを表し、この場合、最終予測値=(予測値1*(3)+予測値2*(5))である。
【0284】
また例えば、ウェイト「5」は、一方の予測値のウェイトが5であるが、他方の予測値のウェイトが3であり、すなわち、2つのウェイトの和が8であることを表し、この場合、最終予測値=(予測値1*(5)+予測値2*(3))である。
【0285】
また例えば、ウェイト「4」は、一方の予測値のウェイトが4であるが、他方の予測値のウェイトが4であり、すなわち、2つのウェイトの和が8であることを表し、この場合、最終予測値=(予測値1*(4)+予測値2*(4))である。
【0286】
1つの可能な実施の形態では、現在ブロックの各サブブロックに対して、上記実施例を参照し、第3の参照ブロックの第3の画素値及び第4の参照ブロックの第4の画素値を得、次に、第3の参照ブロックの第3の画素値及び第4の参照ブロックの第4の画素値に基づいて重み付けし、最終的な予測値を得る。例えば、第3の画素値、第3の画素値に対応する第1のウェイト、第4の画素値、第4の画素値に対応する第2のウェイトに対して重み付け処理を行い、該サブブロックの予測値を得る。平均値を重み付け平均する(すなわち、2つのウェイトが同じである)によって最終的な予測値を取得すると、第1のウェイトは第2のウェイトが同じである。
【0287】
実施例28:上記実施例では、現在ブロックの各サブブロックの第1のターゲット動きベクトル及び第2のターゲット動きベクトルを記憶し、又は、現在ブロックの各サブブロックの第1のオリジナル動きベクトル及び第2のオリジナル動きベクトルを記憶し、又は、現在ブロックの各サブブロックの第1のオリジナル動きベクトル、第2のオリジナル動きベクトル、第1のターゲット動きベクトル及び第2のターゲット動きベクトルを記憶する。記憶された動きベクトルは、後続ブロックの符号化/復号参照に用いられる。
【0288】
例えば、現在ブロックの各サブブロックの第1のターゲット動きベクトル及び第2のターゲット動きベクトルを記憶することを例として説明し、第1のターゲット動きベクトル及び第2のターゲット動きベクトルは、現在ピクチャのループフィルタリングに用いられ、第1のターゲット動きベクトル及び第2のターゲット動きベクトルは、後続フレームの時間領域参照に用いられ、及び/又は、第1のターゲット動きベクトル及び第2のターゲット動きベクトルは、現在ピクチャの空間領域参照に用いられる。例えば、現在ブロックの各サブブロックの第1のターゲット動きベクトル及び第2のターゲット動きベクトルは、現在ブロックの動き補償に用いられてもよいし、後続フレームの時間領域参照に用いられてもよい。また例えば、現在ブロックの各サブブロックの第1のターゲット動きベクトル及び第2のターゲット動きベクトルは、現在ブロックの動き補償に用いられてもよいし、現在ブロックのループフィルタリングプロセスに用いられてもよいし、後続フレームの時間領域参照に用いられてもよい。また例えば、現在ブロックの各サブブロックの第1のターゲット動きベクトル及び第2のターゲット動きベクトルは、現在ブロックの動き補償に用いられてもよいし、現在ブロックのループフィルタリングプロセスに用いられてもよいし、後続フレームの時間領域参照に用いられてもよいし、現在ピクチャの空間領域参照に用いられてもよい。以下、これについて説明する。
【0289】
現在ブロックの各サブブロックの第1のターゲット動きベクトル及び第2のターゲット動きベクトルは、空間領域におけるあるLCU(Largest Coding Unit、最大符号化ユニット)内のブロックの空間領域参照に用いられてもよい。符号化及び復号順序は、上から下、左から右であり、従って、現在ブロックの動きベクトルは現在のLCU内の他のブロックによって参照されてもよいし、後続の近傍するLCU内のブロックによって参照されてもよい。取得したターゲット動きベクトルに必要な計算量が大きいため、後続ブロックが現在ブロックのターゲット動きベクトルを参照すると、長い時間待つ必要がある。待ちすぎることによる遅延を回避するために、少数の空間領域が近傍するブロックのみは現在ブロックのターゲット動きベクトルを参照することができ、他のブロックは現在ブロックのオリジナル動きベクトルを参照する。
【0290】
例示的には、これらの少数のブロックは、現在のLCUの下側に位置する下側LCU及び右下側LCU内に位置するサブブロックを含むが、右側LCU及び左側LCU内に位置するサブブロックは、現在ブロックのターゲット動きベクトルを参照することができない。
【0291】
実施例29:以下、具体例を参照して、動きベクトルの調整プロセスを説明する。動きベクトルを調整する具体的なステップは以下のとおりであってもよい。以下の「コピー」によると、補間をせずに取得できることが示され、MV(すなわち、動きベクトル)が整数画素オフセットであれば、参照ピクチャから直接コピーすることができ、そうでなければ、補間を行う必要がある。
【0292】
ステップe1において、現在ブロックに対して動きベクトル調整モードを起動すると、以下のプロセスを行う。
【0293】
ステップe2において、参照画素値を準備する(現在ブロックの幅をW、高をHとする)。
【0294】
ステップe3のための整数画素ブロックを準備する:
図8に示すように、オリジナル動きベクトル(list0のオリジナル動きベクトルをOrg_MV0、list1のオリジナル動きベクトルをOrg_MV1とする)に基づいて、対応する参照ピクチャの対応位置から、面積が(W+FS-1)*(H+FS-1)でありかつ3つの成分を有する2つの整数画素ブロックをコピーする。また、ステップe4のための整数画素ブロックを準備する:上記(W+FS-1)*(H+FS-1)の整数画素ブロックをベースにして、(W+FS-1)*(H+FS-1)でありかつ3つの成分を有する整数画素ブロックを上下左右へそれぞれSR行/列だけ拡張し、拡張後、面積が(W+FS-1+2*SR)*(H+FS-1+2*SR)でありかつ3つの成分を有する整数画素ブロックを得、Pred_Inter0及びPred_Inter1とする。例示的には、内層黒色領域のサイズは現在ブロックのサイズであり、外部拡張白色領域はオリジナル動きベクトルを8タップフィルタで補間するに必要なさらなる参照画素であり、外層黒色領域はターゲット動きベクトルを8タップフィルタで補間するに必要なさらなる参照画素である。
【0295】
内層W*Hの黒色領域及び白色領域は、参照ピクチャから画素値を取得する一方、外層黒色領域の画素値は、参照ピクチャから取得する必要がなく、近傍する画素値をコピーすることで取得することができる。一例では、白色領域の第1行のW+FS-1個の画素値を外層黒色領域の最初のSR行の画素値にコピーする。白色領域の最後行のW+FS-1個の画素値を外層黒色領域の最後のSR行の画素値にコピーする。次に、白色領域の第1列のH+FS-1個の画素値及び上下各SR個の取得された外層黒色領域の画素値を外層黒色領域の最初のSR列の画素値にコピーする。白色領域の最後列のH+FS-1個の画素値及び上下各SR個の取得された外層黒色領域の画素値を外層黒色の最後のSR列の画素値にコピーする。別の例では、白色領域の第1列H+FS-1個の画素値を外層黒色領域の最初のSR列の画素値にコピーする。白色領域の最後列のH+FS-1個の画素値を外層黒色領域の最後のSR列の画素値にコピーする。次に、白色領域の第1行のW+FS-1個の画素値及び左右各SR個の取得された外層黒色領域の画素値を外層黒色領域の最初のSR行の画素値にコピーする。白色領域の最後行のW+FS-1個の画素値及び左右各SR個の取得された外層黒色領域の画素値を外層黒色領域の最後のSR行の画素値にコピーする。
【0296】
2つの異なる方向の動き情報に基づいて初めての動き補償を行う。例えば、輝度成分(後続の探索プロセスにおいて、輝度成分を用いてコスト値を計算する)に対して、面積が(W+FS-1)*(H+FS-1)の2つの整数画素参照ブロックをベースとして、バイリニア補間により、サイズが(W+2*SR)*(H+2*SR)の2つの初期参照予測値ブロックを取得し(Pred_Bilinear0及びPred_Bilinear1とする)、FSはフィルタタップの数であり、デフォルトで8であり、SRは探索範囲、すなわちターゲット動きベクトルとオリジナル動きベクトルの最大水平/垂直成分補間であり、デフォルトで2である。Pred_Bilinear0/1は、ステップe3に用いられる。
【0297】
ステップe3において、現在ブロックのdx*dyサブブロックのそれぞれに対して、ターゲット動きベクトルを取得する(2つの方向のターゲット動きベクトルのそれぞれをRefined_MV0及びRefined_MV1とする)。
【0298】
ステップe31において、SR回の反復を行い、最適な整数画素MV点の整数画素オフセットを取得し、IntegerDeltaMVとし、IntegerDeltaMVを(0,0)に初期化し、毎回の反復では、以下のプロセスを行う。
【0299】
ステップe311において、deltaMVを(0,0)とする。初回の反復プロセスにおいて、オリジナル動きベクトルに基づいて、参照画素Pred_Bilinear0/1においてコピーして2つの予測値ブロック(Pred_Bilinear0/1の最中心にあるW*Hのブロック)を取得し、この2つの予測値ブロックに基づいて、初期コスト値、すなわち2つの方向の予測値ブロックを垂直に2倍ダウンサンプリングしたSADを取得する。該初期コスト値がdx*dy(dx及びdyは、現在のサブブロックの幅及び高さである)未満であると、後続の探索プロセスを直接スキップし、ステップステップe32を行い、notZeroCostをfalseとして設定する。
【0300】
ステップe312において、上記初期点を中心として、{Mv(-2,-2),Mv(-1,-2),Mv(0,-2),Mv(1,-2),Mv(2,-2),Mv(-2,-1),Mv(-1,-1),Mv(0,-1),Mv(1,-1),Mv(2,-1),Mv(-2,0),Mv(-1,0),Mv(1,0),Mv(2,0),Mv(-2,1),Mv(-1,1),Mv(0,1),Mv(1,1),Mv(2,1),Mv(-2,2),Mv(-1,2),Mv(0,2),Mv(1,2),Mv(2,2)}の順序で24個のオフセットMV(この24個のオフセットMVはいずれもMVOffsetと呼ばれる)を得、これらのオフセットMVのコスト値の計算と比較プロセスを行う。例えば、あるMVOffsetに基づいて、参照画素Pred_Bilinear0/1において、MVOffsetにより2つの予測値ブロック(すなわちPred_Bilinear0において中心位置オフセットMVOffsetを行ったW*Hのブロック、及び、Pred_Bilinear1において中心位置オフセット-MVOffset(list0と逆)を行ったW*Hのブロック)を取得し、この2つのブロックのダウンサンプリングSADをMVOffsetのコスト値として計算する。コスト値が最も小さいMVOffsetを残す(deltaMVに記憶する)。
【0301】
deltaMV値に基づいてIntegerDeltaMV:IntegerDeltaMV=deltaMVを更新する。
【0302】
ステップe313において、1回の反復後、最適なMVが引き続き初期MVである又は最小コスト値が0であると、次の反復探索プロセスを行わず、ステップe32を行い、notZeroCostをfalseとして設定する。
【0303】
ステップe32において、ステップe31の最適な整数画素MV点を中心とし、最適な小数画素オフセットMVを取得し、SPMV(すなわち、subMV)とし、SPMVを(0,0)に初期化し、次に以下のプロセスを行う。
【0304】
ステップe321において、notZeroCostがfalseではなく、deltaMVが(0,0)である場合のみ、後続処理を行い、そうでない場合は、直接IntegerDeltaMVを用いてオリジナル動きベクトルを調整する。
【0305】
ステップe322において、E(x,y)をステップe31で得られた最適なMV点を(x,y)だけオフセットしたMVに対応するコスト値(ステップe31で計算されたコスト値)として表す。中心及び上下左右の5つの点のE(x,y)に基づいて、E(x,y)が最も小さい点のオフセット(x0,y0):x0=N*(E(-1,0)-E(1,0))/(E(-1,0)+E(1,0)-2*E(0,0))、y0=N*(E(0,-1)-E(0,1))/(E(0,-1)+E(0,1)-2*E(0,0))を得ることができる。一例では、1/2、1/4、1/8及び1/16の動きベクトル画素精度の場合、Nは1、2、4及び8である。次に、(x0,y0)の値をdeltaMvに与え、SPMV=deltaMv/2Nとなる。現在、1/16の動きベクトル画素精度の場合、SPMVは(x0/16,y0/16)であってもよい。
【0306】
E(-1,0)=E(0,0)であれば、水平に左へ半分の画素だけオフセットする(deltaMv[0]=-N)。
【0307】
E(1,0)=E(0,0)であれば、水平に右へ半分の画素だけオフセットする(deltaMv[0]=N)。
【0308】
E(0,-1)=E(0,0)であれば、垂直に上へ半分の画素だけオフセットする(deltaMv[1]=-N)。
【0309】
E(0,1)=E(0,0)であれば、垂直に下へ半分の画素だけオフセットする(deltaMv[1]=N)。
【0310】
ステップe33において、ステップe31の整数画素オフセットIntegerDeltaMV及びステップe32の小数画素オフセットSPMVに基づいて、最適なオフセットMVを取得し、最適なオフセットMVをBestMVoffsetとする。BestMVoffset=IntegerDeltaMV+SPMVである。BestMVoffsetに基づいて、2つの方向のターゲット動きベクトル:Refined_MV0=Org_MV0+BestMVoffset、Refined_MV1=Org_MV1-BestMVoffsetを取得する。
【0311】
ステップe4において、各サブブロックのターゲット動きベクトルに基づいて、8タップ補間を行って2つの方向にある3つの成分の予測値を取得し、重み付けして最終的な予測値(例えば、3つの成分の予測値)を取得する。例えば、各サブブロックのターゲット動きベクトルRefined_MV0及びRefined_MV1に基づいて、ステップe2で準備されたPred_Inter0/1において、補間により対応する予測ブロックを取得する(動きベクトルが小数画素である可能性があるため、対応する画素ブロックを取得するに補間する必要がある)。
【0312】
ステップe5において、ターゲット動きベクトルを現在ブロックの動き補償(すなわち、各サブブロックの予測値及び現在ブロックの予測値を取得する)及び後続フレームの時間領域参照に用い、現在ピクチャのループフィルタリング及び空間領域参照に用いない。
【0313】
実施例30:実施例29との相違点は、参照画素の準備プロセスがdx*dyのサブブロックの各々に移されて行われることである。参照画素を準備するとき、(dx+(filtersize-1))*(dy+(filtersize-1))の画素ブロックのみを準備し、探索して得られた最適な動きベクトルがオリジナル動きベクトルではければ、参照画素を拡張する。そうでなければ、拡張しない。現在ブロックのdx*dyのサブブロックのそれぞれに対して、ターゲット動きベクトルを取得し、ターゲット動きベクトルに基づいて動き補償を行い、重み付けして最終的な予測値を取得し、以下のプロセスは、現在ブロックのdx*dyのサブブロックの各々に対して行われる。
【0314】
ステップf1において、現在ブロックに対して動きベクトル調整モードを起動すると、以下のプロセスを行う。
【0315】
ステップf2において、ステップf3のための整数画素ブロックを準備する:例えば、輝度成分のみに対して、オリジナル動きベクトル(list0のオリジナル動きベクトルをOrg_MV0、list1のオリジナル動きベクトルをOrg_MV1とする)に基づいて、対応する参照ピクチャの対応位置から面積が(dx+(filtersize-1))*(dy+(filtersize-1))の2つの整数画素ブロックを取得する。
【0316】
例示的には、filtersizeは、フィルタタップ数であってもよく、デフォルトで8である。
【0317】
ステップf3において、現在ブロックのdx*dyサブブロックのそれぞれに対して、ターゲット動きベクトル(2つの方向のターゲット動きベクトルのそれぞれをRefined_MV0及びRefined_MV1とする)を取得する。
【0318】
例示的には、ステップf3の実現プロセスはステップe3を参照することができ、ここで繰り返し説明しない。
【0319】
例えば、オリジナル動きベクトルに基づいて初めての動きベクトル補償を行う。輝度成分のみに対して、bilinear補間により、サイズが(dx+2*IterNum)*(dy+2*IterNum)の初期予測値を取得し、IterNumはデフォルトで2であり、IterNumは探索範囲SRであってもよく、IterNumはターゲット動きベクトルとオリジナル動きベクトルの最大水平/垂直成分補間であってもよい。上記得られたオリジナル動きベクトルの初期予測値はm_cYuvPredTempL0/1に記憶される。
【0320】
25個の点のコスト値を計算し、最適な整数画素MV点の整数画素オフセットを取得する。1番目の点であると(MVのオフセットが(0,0)である)、初期cost(costは2つの方向の予測値を垂直に2倍ダウンサンプリングしたSADである)を取得し、該costがdx*dy未満であると、後続の探索プロセスを直接スキップする(notZeroCostをfalseとして設定する)。上記初期点を中心として、24個の点のcostの計算と比較を行い、costが最も小さい点を次のステップの新しい中心点として残す。最適な整数画素MV点を中心とし、最適な1/16画素の小数画素オフセットを取得する。整数画素オフセット及び小数画素オフセットに基づいて、最適なオフセットMVを取得し、最適なオフセットMVをBestMVoffsetとする。BestMVoffset=IntegerDeltaMV+SPMVである。BestMVoffsetに基づいて、2つの方向のターゲット動きベクトル:Refined_MV0=Org_MV0+BestMVoffset、Refined_MV1=Org_MV1-BestMVoffsetを取得する。
【0321】
ステップf4において、最適なオフセットMVが(0,0)であると、以下のステップを行わない(すなわち、オリジナル動きベクトルを用いると、さらなる拡張を行わない)。最適なオフセットMVが(0,0)ではないと、整数画素を再取得し(上記ステップにおいて参照画素を拡張しなかったため、オフセット後、必要とされる参照画素が上記ステップで取得された参照画素の範囲を超える)、以下のステップを行う。
【0322】
list0の参照ピクチャ及びlist1の参照ピクチャに対して、U/V成分のそれぞれに対して(ステップf2において輝度成分が取得されたので):参照ピクチャから(dxc+(filtersizeC-1))*(dyc+(filtersizeC-1))の整数画素値を取得し、dxc及びdycはサンプリングレートに関連するものであり、YUVが420サンプリングレートであると、dxc=dx/2、dyc=dy/2である。もちろん、ここでは例にすぎず、dxc及びdycは限定されない。filtersizeCは4であってもよく、もちろん、ここでは例にすぎず、filtersizeCは限定されない。また例えば、直接参照ピクチャからdx*dyの整数画素値を取得してもよいが、これについては限定しない。
【0323】
list0の参照ピクチャ及びlist1の参照ピクチャに対して、3つの成分にそれぞれ充填する。例えば、近傍値をコピーする方法によって、上記ステップにおいて得られた整数画素値(例えば、(dxc+(filtersizeC-1))*(dyc+(filtersizeC-1))の整数画素値)をベースとして、上下左右に充填する(例えば、充填幅及び輝度成分が2であり、420のクロマ成分が1である)。例示的には、ここで、現在のサブブロックの周り(現在のCUブロック内)における使用可能な整数画素値を用いていない。
【0324】
ステップf5において、各サブブロックのターゲット動きベクトル及び2つの参照画素ブロック(ステップf4において得られた)に基づいて、8タップ補間を行って2つの方向にある3つの成分の予測値を取得し、重み付けして最終的な予測値(例えば3つの成分の予測値)を取得する。
【0325】
実施例31:上記実施例は、単独で実施してもよいし、任意に組み合わせて実施してもよく、これについては限定しない。
【0326】
例えば、実施例4は、実施例2と組み合わせて実施してもよく、実施例4は、実施例3と組み合わせて実施してもよい。
【0327】
実施例5は、実施例2と組み合わせて実施してもよく、実施例5は、実施例2、実施例4と組み合わせて実施してもよく、実施例5は、実施例3と組み合わせて実施してもよく、実施例5は、実施例3、実施例4と組み合わせて実施してもよい。
【0328】
実施例6は、単独で実施してもよく、実施例7は、単独で実施してもよく、実施例8は、実施例7と組み合わせて実施してもよく、実施例9は、実施例7と組み合わせて実施してもよく、実施例10は、実施例7と組み合わせて実施してもよく、実施例11は、実施例7と組み合わせて実施してもよく、実施例12は、実施例7と組み合わせて実施してもよく、実施例13は、実施例7と組み合わせて実施してもよく、実施例14は、実施例7と組み合わせて実施してもよく、実施例15は、実施例7と組み合わせて実施してもよい。
【0329】
実施例16は、単独で実施してもよく、実施例17は、単独で実施してもよく、実施例18は、実施例17と組み合わせて実施してもよく、実施例19は、実施例17と組み合わせて実施してもよく、実施例20は、実施例17と組み合わせて実施してもよい。
【0330】
実施例21は、実施例6と組み合わせて実施してもよく、実施例21は、実施例16と組み合わせて実施してもよく、実施例21は、実施例7と組み合わせて実施してもよく、実施例21は、実施例17と組み合わせて実施してもよく、実施例22は、実施例21と組み合わせて実施してもよく、実施例23は、実施例21と組み合わせて実施してもよく、実施例24は、実施例21と組み合わせて実施してもよい。
【0331】
実施例25は、実施例2と組み合わせて実施してもよく、実施例25は、実施例2、実施例4と組み合わせて実施してもよく、実施例25は、実施例3と組み合わせて実施してもよく、実施例25は、実施例3、実施例4と組み合わせて実施してもよい。
【0332】
実施例26は、実施例25と組み合わせて実施してもよく、実施例27は、実施例25と組み合わせて実施してもよい。
【0333】
実施例28は、実施例2と組み合わせて実施してもよく、実施例28は、実施例2、実施例4と組み合わせて実施してもよく、実施例28は、実施例3と組み合わせて実施してもよく、実施例28は、実施例3、実施例4と組み合わせて実施してもよい。
【0334】
実施例29は、単独で実施してもよく、実施例29は、実施例4と組み合わせて実施してもよい。実施例30は、単独で実施してもよく、実施例30は、実施例4と組み合わせて実施してもよい。もちろん、上記は本願のいくつかの例に過ぎないが、これに限定されるものではなく、本願に係る全ての実施例は、単独で実施してもよいし、組み合わせて実施してもよく、これについては詳述しない。
【0335】
実施例32、
上記方法と同様の発明構想に基づいて、本発明の実施例は、符号化側又は復号側に適用される符号化及び復号装置をさらに提供し、例えば、
図9Aに示すように、前記装置の構造図であり、前記装置は、
制御情報として、現在ブロックが動きベクトル調整モードを用いることを許可するという条件、
現在ブロックの予測モードが普通融合モードであるか、又は、現在ブロックの予測モードが融合モード又はスキップモードであり、現在ブロックの予測モードが普通融合モード以外の他のモードではないという条件、
現在ブロックの予測値が2つの参照ピクチャからの参照ブロックを重み付けて取得され、前記2つの参照ピクチャの表示順序がそれぞれ現在ピクチャの前と後にあり、前記2つの参照ピクチャから現在ピクチャまでの距離が同じであるという条件、
現在ブロックの2つの参照ピクチャの重み付けウェイトが同じであるという条件、
現在ブロックの2つの参照ピクチャがともに短期参照ピクチャであるという条件、
現在ブロックの幅、高さ及び面積が全て限定範囲内にあるという条件、
現在ブロックの2つの参照ピクチャのサイズがともに現在ピクチャのサイズと同じであるという条件が全て満たされれば、現在ブロックに対して動きベクトル調整モードを起動すると決定するための決定モジュール911と、
現在ブロックに対して動きベクトル調整モードを起動すると決定する場合、現在ブロックに対して動き補償を行うための動き補償モジュール912とを含む。
【0336】
前記動き補償モジュール912は、具体的には、前記現在ブロックに含まれる少なくとも1つのサブブロックのうちの各サブブロックに対して、
前記サブブロックの第1のオリジナル動きベクトルに基づいて前記サブブロックに対応する第1の参照ブロックを決定し、前記サブブロックの第2のオリジナル動きベクトルに基づいて前記サブブロックに対応する第2の参照ブロックを決定し、前記第1の参照ブロックの第1の画素値及び前記第2の参照ブロックの第2の画素値に基づいて、前記第1のオリジナル動きベクトル及び前記第2のオリジナル動きベクトルを調整し、前記第1のオリジナル動きベクトルに対応する第1のターゲット動きベクトル及び前記第2のオリジナル動きベクトルに対応する第2のターゲット動きベクトルを得、前記第1のターゲット動きベクトル及び前記第2のターゲット動きベクトルに基づいて前記サブブロックの予測値を決定し、
各サブブロックの予測値に基づいて前記現在ブロックの予測値を決定するために用いられる。
【0337】
前記決定モジュール911は、さらに、
制御情報として、現在ブロックが動きベクトル調整モードを用いることを許可するという条件、
現在ブロックの予測モードが普通融合モードであるか、又は、現在ブロックの予測モードが融合モード又はスキップモードであり、現在ブロックの予測モードが普通融合モード以外の他のモードではないという条件、
現在ブロックの予測値が2つの参照ピクチャからの参照ブロックを重み付けて取得され、前記2つの参照ピクチャの表示順序がそれぞれ現在ピクチャの前と後にあり、前記2つの参照ピクチャから現在ピクチャまでの距離が同じであるという条件、
現在ブロックの2つの参照ピクチャの重み付けウェイトが同じであるという条件、
現在ブロックの2つの参照ピクチャがともに短期参照ピクチャであるという条件、
現在ブロックの幅、高さ及び面積が全て限定範囲内にあるという条件、
現在ブロックの2つの参照ピクチャのサイズがともに現在ピクチャのサイズと同じであるという条件のうちのいずれかが満たされなければ、現在ブロックに対して動きベクトル調整モードを起動しないと決定するために用いられる。
【0338】
前記制御情報として、現在ブロックが動きベクトル調整モードを用いることを許可することは、シーケンスレベル制御情報として、現在ブロックが動きベクトル調整モードを用いることを許可すること、及び/又は、ピクチャレベル制御情報として、現在ブロックが動きベクトル調整モードを用いることを許可することを含む。
【0339】
現在ブロックの幅、高さ及び面積が全て限定範囲内にあることは、幅が第1の閾値以上、高さが第2の閾値以上、面積が第3の閾値以上であること、又は、幅が第1の閾値以上、高さが第2の閾値以上、面積が第4の閾値よりも大きいことを含み、前記第3の閾値は前記第4の閾値よりも大きい。
【0340】
前記第1の閾値は8、前記第2の閾値は8、前記第3の閾値は128、前記第4の閾値は64である。
【0341】
前記動き補償モジュール912は、前記サブブロックの第1のオリジナル動きベクトルに基づいて前記サブブロックに対応する第1の参照ブロックを決定し、前記サブブロックの第2のオリジナル動きベクトルに基づいて前記サブブロックに対応する第2の参照ブロックを決定するとき、具体的には、
前記サブブロックの第1のオリジナル動きベクトルに基づいて、第1の参照ピクチャから前記サブブロックに対応する第1の参照ブロックを決定し、前記第1の参照ブロックにおける各画素点の画素値は、第1の参照ブロックにおける近傍画素点の画素値を補間して得られるものであるか、又は、第1の参照ブロックにおける近傍画素点の画素値をコピーして得られるものであり、
前記サブブロックの第2のオリジナル動きベクトルに基づいて、第2の参照ピクチャから前記サブブロックに対応する第2の参照ブロックを決定し、前記第2の参照ブロックにおける各画素点の画素値は、第2の参照ブロックにおける近傍画素点の画素値を補間して得られるものであるか、又は、第2の参照ブロックにおける近傍画素点の画素値をコピーして得られるものである。
【0342】
前記動き補償モジュール912は、前記第1の参照ブロックの第1の画素値及び前記第2の参照ブロックの第2の画素値に基づいて、前記第1のオリジナル動きベクトル及び前記第2のオリジナル動きベクトルを調整し、前記第1のオリジナル動きベクトルに対応する第1のターゲット動きベクトル及び前記第2のオリジナル動きベクトルに対応する第2のターゲット動きベクトルを得るとき、具体的には、
初期動きベクトルを中心とし、前記初期動きベクトルの周りの、前記初期動きベクトルを含む動きベクトルから、一部又は全ての動きベクトルを選択し、選択した動きベクトルを候補動きベクトルとして決定し、前記初期動きベクトルは、前記第1のオリジナル動きベクトル又は前記第2のオリジナル動きベクトルであり、
前記第1の参照ブロックの第1の画素値及び前記第2の参照ブロックの第2の画素値に基づいて、前記初期動きベクトル及び各候補動きベクトルから1つの動きベクトルを最適な動きベクトルとして選択し、
前記最適な動きベクトルに基づいて前記第1のオリジナル動きベクトルを調整し、前記第1のオリジナル動きベクトルに対応する第1のターゲット動きベクトルを得、前記最適な動きベクトルに基づいて前記第2のオリジナル動きベクトルを調整し、前記第2のオリジナル動きベクトルに対応する第2のターゲット動きベクトルを得るために用いられる。
【0343】
前記動き補償モジュール912は、前記最適な動きベクトルに基づいて前記第1のオリジナル動きベクトルを調整し、前記第1のオリジナル動きベクトルに対応する第1のターゲット動きベクトルを得、前記最適な動きベクトルに基づいて前記第2のオリジナル動きベクトルを調整し、前記第2のオリジナル動きベクトルに対応する第2のターゲット動きベクトルを得るとき、具体的には、
前記最適な動きベクトルに基づいて前記サブブロックの第1の整数画素動きベクトル調整値、第2の整数画素動きベクトル調整値、第1の小数画素動きベクトル調整値及び第2の小数画素動きベクトル調整値を決定し、
前記第1の整数画素動きベクトル調整値及び前記第1の小数画素動きベクトル調整値に基づいて、前記第1のオリジナル動きベクトルを調整し、前記サブブロックの第1のターゲット動きベクトルを得、
前記第2の整数画素動きベクトル調整値及び前記第2の小数画素動きベクトル調整値に基づいて、前記第2のオリジナル動きベクトルを調整し、前記サブブロックの第2のターゲット動きベクトルを得るために用いられる。
【0344】
前記最適な動きベクトルが前記初期動きベクトルと同じである場合、前記動き補償モジュール912は、前記第1のターゲット動きベクトル及び前記第2のターゲット動きベクトルに基づいて前記サブブロックの予測値を決定するとき、具体的には、
前記サブブロックの第1のターゲット動きベクトルに基づいて、第1の参照ピクチャから前記サブブロックに対応する第3の参照ブロックを決定し、
前記サブブロックの第2のターゲット動きベクトルに基づいて、第2の参照ピクチャから前記サブブロックに対応する第4の参照ブロックを決定し、
第3の参照ブロックの画素値及び第4の参照ブロックの画素値を重み付けし、前記サブブロックの予測値を得るために用いられる。
【0345】
前記最適な動きベクトルが前記初期動きベクトルと異なる場合、前記動き補償モジュール912は、前記第1のターゲット動きベクトル及び前記第2のターゲット動きベクトルに基づいて前記サブブロックの予測値を決定するとき、具体的には、
第1の参照ピクチャから第5の参照ブロックを決定し、前記第5の参照ブロックを拡張し、第6の参照ブロックを得、前記サブブロックの第1のターゲット動きベクトルに基づいて、前記第6の参照ブロックから前記サブブロックに対応する第3の参照ブロックを選択し、
第2の参照ピクチャから第7の参照ブロックを決定し、前記第7の参照ブロックを拡張し、第8の参照ブロックを得、前記サブブロックの第2のターゲット動きベクトルに基づいて、前記第8の参照ブロックから前記サブブロックに対応する第4の参照ブロックを選択し、
第3の参照ブロックの画素値及び第4の参照ブロックの画素値を重み付けし、前記サブブロックの予測値を得るために用いられる。
【0346】
前記動き補償モジュール912は、第3の参照ブロックの画素値及び第4の参照ブロックの画素値を重み付けし、前記サブブロックの予測値を得るとき、具体的には、前記第3の参照ブロックの画素値、前記第3の参照ブロックの画素値に対応する第1のウェイト、前記第4の参照ブロックの画素値、前記第4の参照ブロックの画素値に対応する第2のウェイトに対して重み付け処理を行い、前記サブブロックの予測値を得、前記第1のウェイトと前記第2のウェイトは同じである。
【0347】
ハードウェアの観点から、本発明の実施例に係る復号デバイスのハードウェアアーキテクチャの概略図は、具体的には、
図9Bを参照することができる。プロセッサ921及び機械読み取り可能な記憶媒体922を含み、前記機械読み取り可能な記憶媒体922には、前記プロセッサ921により実行可能な機械実行可能命令が記憶され、前記プロセッサ921は、機械実行可能命令を実行することで、本発明の上記例に開示されている方法を実施するために用いられる。例えば、プロセッサは、機械実行可能命令を実行することで、以下のステップを実現するために用いられる。
【0348】
制御情報として、現在ブロックが動きベクトル調整モードを用いることを許可するという条件、
現在ブロックの予測モードが普通融合モードであるか、又は、現在ブロックの予測モードが融合モード又はスキップモードであり、現在ブロックの予測モードが普通融合モード以外の他のモードではないという条件、
現在ブロックの予測値が2つの参照ピクチャからの参照ブロックを重み付けて取得され、前記2つの参照ピクチャの表示順序がそれぞれ現在ピクチャの前と後にあり、前記2つの参照ピクチャから現在ピクチャまでの距離が同じであるという条件、
現在ブロックの2つの参照ピクチャの重み付けウェイトが同じであるという条件、
現在ブロックの2つの参照ピクチャがともに短期参照ピクチャであるという条件、
現在ブロックの幅、高さ及び面積が全て限定範囲内にあるという条件、
現在ブロックの2つの参照ピクチャのサイズがともに現在ピクチャのサイズと同じであるという条件が全て満たされれば、現在ブロックに対して動きベクトル調整モードを起動すると決定するステップ、
現在ブロックに対して動きベクトル調整モードを起動すると決定する場合、前記現在ブロックに対して動き補償を行うステップ。
【0349】
ハードウェアの観点から、本発明の実施例に係る符号化デバイスのハードウェアアーキテクチャの概略図は、具体的には、
図9Cを参照することができる。プロセッサ931及び機械読み取り可能な記憶媒体932を含み、前記機械読み取り可能な記憶媒体932には、前記プロセッサ931より実行可能な機械実行可能命令が記憶され、前記プロセッサ931は、機械実行可能命令を実行することで、本発明の上記例に開示されている方法を実施するために用いられる。例えば、プロセッサは、機械実行可能命令を実行することで、以下のステップを実現するために用いられる。
【0350】
制御情報として、現在ブロックが動きベクトル調整モードを用いることを許可するという条件、
現在ブロックの予測モードが普通融合モードであるか、又は、現在ブロックの予測モードが融合モード又はスキップモードであり、現在ブロックの予測モードが普通融合モード以外の他のモードではないという条件、
現在ブロックの予測値が2つの参照ピクチャからの参照ブロックを重み付けて取得され、前記2つの参照ピクチャの表示順序がそれぞれ現在ピクチャの前と後にあり、前記2つの参照ピクチャから現在ピクチャまでの距離が同じであるという条件、
現在ブロックの2つの参照ピクチャの重み付けウェイトが同じであるという条件、
現在ブロックの2つの参照ピクチャがともに短期参照ピクチャであるという条件、
現在ブロックの幅、高さ及び面積が全て限定範囲内にあるという条件、
現在ブロックの2つの参照ピクチャのサイズがともに現在ピクチャのサイズと同じであるという条件が全て満たされれば、現在ブロックに対して動きベクトル調整モードを起動すると決定するステップ、
現在ブロックに対して動きベクトル調整モードを起動すると決定する場合、前記現在ブロックに対して動き補償を行うステップ。
【0351】
上記方法と同様の発明構想に基づいて、本発明の実施例は、複数のコンピュータ命令が記憶される機械読み取り可能な記憶媒体をさらに提供し、前記コンピュータ命令がプロセッサによって実行されると、本発明の上記例に開示されている符号化及び復号方法を実施することができる。上記機械読み取り可能な記憶媒体は任意の電子、磁性、光学又は他の物理的記憶装置であってもよく、実行可能なコマンド、データ等の情報を含むか又は記憶することができる。例えば、機械読み取り可能な記憶媒体は、RAM(Radom Access Memory、ランダムアクセスメモリ)、揮発性メモリ、不揮発性メモリ、フラッシュメモリ、記憶ドライブ(例えばハードディスクドライブ)、ソリッドステートドライブ、任意のタイプの記憶ディスク(例えば光ディスク、dvd等)、又は類似の記憶媒体、又はそれらの組み合わせであってもよい。
【0352】
上記方法と同様の発明構想に基づいて、本発明の実施例は、コンピュータ命令を含むコンピュータプログラム製品をさらに提供し、前記コンピュータ命令がプロセッサにより実行されると、本発明の上記例に開示されている符号化及び復号方法を実施することができる。
【0353】
上記方法と同様の発明構想に基づいて、本発明の実施例は、プロセッサ及び機械読み取り可能な記憶媒体を含む符号化及び復号システムをさらに提供し、前記機械読み取り可能な記憶媒体には、前記プロセッサにより実行可能な機械実行可能命令が記憶される。前記機械実行可能命令がプロセッサにより実行されると、本発明の上記例に開示されている符号化及び復号方法を実施することができる。
【0354】
上記実施例に説明されたシステム、装置、モジュール又はユニットは、具体的にはコンピュータチップ又はエンティティにより実現されてもよく、又はある機能を有する製品により実現されてもよい。従来の実現デバイスはコンピュータであり、コンピュータの具体的な形態はパーソナルコンピュータ、ラップトップコンピュータ、携帯電話、カメラ電話、スマートフォン、パーソナルデジタルアシスタント、メディアプレーヤ、ナビゲーション装置、電子メール送受信装置、ゲームコンソール、タブレットコンピュータ、ウェアラブル装置又はこれらの装置のうちの任意の複数種の装置の組み合わせであってもよい。説明しやすいために、以上の装置を説明する時に機能で様々なユニットに分けてそれぞれ説明する。当然のことながら、本発明を実施する時に各ユニットの機能を同一又は複数のソフトウェア及び/又はハードウェアで実現することができる。
【0355】
当業者に理解されるように、本発明の実施例は方法、システム、又はコンピュータプログラム製品として提供することができる。したがって、本発明は完全なハードウェア実施例、完全なソフトウェア実施例、又はソフトウェアとハードウェアを組み合わせる実施例の形を採用することができる。本発明の実施例は、コンピュータ使用可能なプログラムコードを含む1つ又は複数のコンピュータ使用可能な記憶媒体(ディスクメモリ、CD-ROM、光学メモリ等を含むがこれらに限定されない)で実施されたコンピュータプログラム製品の形式を採用することができる。本願は、本願の実施例に係る方法、デバイス(システム)、及びコンピュータプログラム製品のフローチャート及び/又はブロック図を参照して説明される。コンピュータプログラム命令によりフローチャート及び/又はブロック図における各フロー及び/又はブロック、及びフローチャート及び/又はブロック図におけるフロー及び/又はブロックの組み合わせを実現できることを理解すべきである。これらのコンピュータプログラム命令を汎用コンピュータ、専用コンピュータ、組み込みプロセッサ又は他のプログラム可能なデータ処理装置のプロセッサに提供してマシンを生成することができ、コンピュータ又は他のプログラム可能なデータ処理装置のプロセッサにより実行された命令によって、フローチャートの1つのフロー又は複数のフロー及び/又はブロック図の1つのブロック又は複数のブロックにおいて指定された機能を実現するための装置を生成する。
【0356】
これらのコンピュータプログラム命令は、コンピュータ又は他のプログラマブルデータ処理機器が特定の方式で動作するようにガイドできるコンピュータ読み取り可能なメモリに記憶されてもよく、それにより、該コンピュータ読み取り可能なメモリに記憶された命令は命令装置を含む製品を生成し、該命令装置はフローチャートの1つのフロー又は複数のフロー及び/又はブロック図の1つのブロック又は複数のブロックにおいて指定された機能を実現する。これらのコンピュータプログラム命令はコンピュータ又は他のプログラム可能なデータ処理装置にロードされてもよく、それによりコンピュータ又は他のプログラム可能な機器で一連の操作ステップを実行してコンピュータにより実現された処理を生成し、それによりコンピュータ又は他のプログラム可能な機器で実行された命令はフローチャートの1つのフロー又は複数のフロー及び/又はブロック図の1つのブロック又は複数のブロックにおいて指定された機能を実現するためのステップを提供する。
【0357】
以上は、本願の実施例に過ぎず、本願を限定するものではない。当業者にとって、本発明は様々な変更及び変更が可能である。本発明の精神と原理の範囲内で行われたいかなる修正、同等置換、改善などは、本発明の請求項請求の範囲に含まれるべきである。