(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-07-19
(45)【発行日】2024-07-29
(54)【発明の名称】コーデック方法及び装置、符号化デバイス及び復号化デバイス
(51)【国際特許分類】
H04N 19/513 20140101AFI20240722BHJP
【FI】
H04N19/513
(21)【出願番号】P 2023111468
(22)【出願日】2023-07-06
(62)【分割の表示】P 2021552234の分割
【原出願日】2020-03-11
【審査請求日】2023-07-06
(31)【優先権主張番号】201910182197.8
(32)【優先日】2019-03-11
(33)【優先権主張国・地域又は機関】CN
(73)【特許権者】
【識別番号】519061479
【氏名又は名称】杭州海康威視数字技術股▲ふん▼有限公司
【氏名又は名称原語表記】Hangzhou Hikvision Digital Technology Co.,Ltd.
【住所又は居所原語表記】No.555 Qianmo Road,Binjiang District,Hangzhou,Zhejiang 310051,China
(74)【代理人】
【識別番号】110001519
【氏名又は名称】弁理士法人太陽国際特許事務所
(72)【発明者】
【氏名】陳方棟
【審査官】岩井 健二
(56)【参考文献】
【文献】特開2020-053723(JP,A)
【文献】国際公開第2018/121506(WO,A1)
【文献】Semih Esenlik, et al.,CE9: DMVR with Motion Vector Difference Mirroring (Test 1.6),Joint Video Experts Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11,JVET-K0216-v3,11th Meeting: Ljubljana, SI,2018年07月,pp.1-5
【文献】Fangdong Chen, and Li Wang,CE9: Unidirectional Template based DMVR and its Combination with Simplified Bidirectional DMVR (Test,Joint Video Experts Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11,JVET-L0188_v3,12th Meeting: Macao, CN,2018年10月,pp.1-5
【文献】Jianle Chen, Yan Ye, and Seung Hwan Kim,Algorithm description for Versatile Video Coding and Test Model 4 (VTM 4),Joint Video Experts Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11,JVET-M1002-v1,13th Meeting: Marrakech, MA,2019年02月,pp.35-38
(58)【調査した分野】(Int.Cl.,DB名)
H04N 19/00 - 19/98
(57)【特許請求の範囲】
【請求項1】
現在のブロックに対して動きベクトルリファインメントモードを有効にする場合、前記現在のブロックに含まれる各サブブロックの予測値を確定し、前記現在のブロックに含まれる各サブブロックの予測値に基づいて、前記現在のブロックの予測値を確定することを含む、復号化方法であって、
前記現在のブロックに含まれるサブブロックのそれぞれに対して、予測値を確定することは、
第1の参照フレームおよび第1のオリジナル動きベクトルと、第2の参照フレームおよび第2のオリジナル動きベクトルとを含む前記現在のブロックの動き情報を取得するステップと、
前記現在のブロックの第1のオリジナル動きベクトルに基づいて前記サブブロックに対応する第1の参照ブロックを確定し、現在のブロックの第2のオリジナル動きベクトルに基づいて前記サブブロックに対応する第2の参照ブロックを確定するステップと、
前記第1の参照ブロックの画素値及び前記第2の参照ブロックの画素値に基づいて、最適動きベクトルを取得するステップであって、前記第1のオリジナル動きベクトル又は前記第2のオリジナル動きベクトルであるオリジナル動きベクトルを中心として、前記オリジナル動きベクトルの周囲にある前記オリジナル動きベクトルを含む動きベクトルから動きベクトルを選択して候補動きベクトルと確定することと、取得した前記最適動きベクトルは、前記オリジナル動きベクトル及び各候補動きベクトルから選択されたコスト値が最も小さい動きベクトルであることと、を含むステップと、
前記最適動きベクトルに基づいて、前記第1のオリジナル動きベクトルと前記第2のオリジナル動きベクトルとを調整し、前記第1のオリジナル動きベクトルに対応する第1の目標動きベクトル及び前記第2のオリジナル動きベクトルに対応する第2の目標動きベクトルを取得するステップと、
前記第1の目標動きベクトル及び前記第2の目標動きベクトルに基づいて、前記サブブロックの予測値を確定するステップと、
を含み、
前記オリジナル動きベクトルを中心として、前記オリジナル動きベクトルの周囲にある前記オリジナル動きベクトルを含む動きベクトルから動きベクトルを選択して候補動きベクトルと確定することは、
前記オリジナル動きベクトルを中心として、探索範囲を2とし、前記オリジナル動きベクトル
を含む25個の動きベクトルを探索し、前記25個の動きベクトルを候補動きベクトルと確定することを含み、前記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)}であり、
前記最適動きベクトルに基づいて、前記第1のオリジナル動きベクトルと前記第2のオリジナル動きベクトルとを調整し、前記第1のオリジナル動きベクトルに対応する第1の目標動きベクトル及び前記第2のオリジナル動きベクトルに対応する第2の目標動きベクトルを取得するステップは、
前記最適動きベクトルに基づいて、第1の整数画素動きベクトル調整値と、第1のサブ画素動きベクトル調整値と、第2の整数画素動きベクトル調整値と、第2のサブ画素動きベクトル調整値とを確定することと、
第1の整数画素動きベクトル調整値及び第1のサブ画素動きベクトル調整値に基づいて、第1のオリジナル動きベクトルを調整し、サブブロックの第1の目標動きベクトルを取得することと、
第2の整数画素動きベクトル調整値及び第2のサブ画素動きベクトル調整値に基づいて、第2のオリジナル動きベクトルを調整し、サブブロックの第2の目標動きベクトルを取得することと、を含み、
前記最適動きベクトルに基づいて、第1の整数画素動きベクトル調整値と第1のサブ画素動きベクトル調整値とを確定することは、
前記最適動きベクトルに基づいて、前記最適動きベクトルと前記第1のオリジナル動きベクトルとの差である第1の整数画素動きベクトル調整値を確定することと、
前記最適動きベクトルに対応するコスト値、前記最適動きベクトルに対応するエッジ動きベクトルに対応するコスト値に基づいて、第1のサブ画素動きベクトル調整値を確定することと、を含む、
復号化方法。
【請求項2】
前記第1の参照ブロックの画素値及び前記第2の参照ブロックの画素値に基づいて、前記オリジナル動きベクトルに対応するコスト値と前記候補動きベクトルに対応するコスト値とを取得することにおいて、
候補動きベクトルに対応するコスト値を取得することは、
第1の参照ブロックに基づいて、前記候補動きベクトルに対応する第1のサブ参照ブロックを確定し、第2の参照ブロックに基づいて、前記候補動きベクトルに対応する第2のサブ参照ブロックを確定することと、
垂直2倍のダウンサンプリングを行い、前記第1の参照ブロック及び前記第2の参照ブロックの各画素値の差分絶対値和を取得することと、
取得した差分絶対値和に基づいて、前記候補動きベクトルに対応するコスト値を確定することと、を含み、
オリジナル動きベクトルに対応するコスト値を取得することは、
第1の参照ブロックに基づいて、前記オリジナル動きベクトルに対応する第3のサブ参照ブロックを確定し、第2の参照ブロックに基づいて、前記オリジナル動きベクトルに対応する第4のサブ参照ブロックを確定することと、
垂直2倍のダウンサンプリングを行い、前記第1のサブ参照ブロック及び前記第2のサブ参照ブロックの各画素値の差分絶対値和を取得することと、
取得した差分絶対値和に基づいて、前記オリジナル動きベクトルに対応するコスト値を確定することと、を含む、
請求項1に記載の復号化方法。
【請求項3】
前記最適動きベクトルに対応するコスト値、前記最適動きベクトルに対応するエッジ動きベクトルに対応するコスト値に基づいて、第1のサブ画素動きベクトル調整値を確定することは、
前記最適動きベクトルを中心とした5つの整数画素動きベクトルのコスト値を順次に確定し、前記5つの整数画素動きベクトルは、前記最適動きベクトルを中心として、それぞれ、水平に左へ、水平に右へ、垂直に上へ、垂直に下へシフトするにより取得した5つのエッジ動きベクトルであることと、
前記5つの整数画素動きベクトルのコスト値に基づいて、前記第1のサブ画素動きベクトル調整値を確定することと、を含む、
請求項1に記載の復号化方法。
【請求項4】
第1の目標動きベクトルは、第1のオリジナル動きベクトルと、第1の整数画素動きベクトル調整値と、第1のサブ画素動きベクトル調整値との和であることと、
第2の目標動きベクトルは、第2のオリジナル動きベクトルと、第2の整数画素動きベクトル調整値と、第2のサブ画素動きベクトル調整値との和であることと、
前記第2の整数画素動きベクトル調整値と、前記第1の整数画素動きベクトル調整値とは、互いに反数であることと、
前記第2のサブ画素動きベクトル調整値と、前記第1のサブ画素動きベクトル調整値とは、互いに反数であることと、を特徴とする、
請求項3に記載の復号化方法。
【請求項5】
前記現在のブロックが1つのサブブロックのみを含む場合、当該サブブロックは現在のブロック自体であること、を特徴とする、
請求項1に記載の復号化方法。
【請求項6】
前記最適動きベクトルを取得するステップは、前記第1の参照ブロックの画素値及び前記第2の参照ブロックの画素値に基づいて、前記オリジナル動きベクトルに対応するコスト値と前記候補動きベクトルに対応するコスト値とを取得することと、前記オリジナル動きベクトルに対応するコスト値及び前記候補動きベクトルに対応するコスト値に基づいて、最適動きベクトルとして、前記オリジナル動きベクトルと前記候補動きベクトルとの中から1つの動きベクトルを選択することと、を含む、
請求項1に記載の復号化方法。
【請求項7】
前記第1の目標動きベクトル及び前記第2の目標動きベクトルに基づいて、前記サブブロックの予測値を確定するステップは、前記第1の目標動きベクトルに基づいて、前記サブブロックに対応する第3の参照ブロックを確定し、前記第2の目標動きベクトルに基づいて、前記サブブロックに対応する第4の参照ブロックを確定することと、第3の参照ブロックの画素値及び第4の参照ブロックの画素値に基づいて重み付けを行い、前記サブブロックの予測値を取得することと、を含む、
請求項1に記載の復号化方法。
【請求項8】
現在のブロックに対して動きベクトルリファインメントモードを有効にする場合、前記現在のブロックに含まれる各サブブロックの予測値を確定し、前記現在のブロックに含まれる各サブブロックの予測値に基づいて、前記現在のブロックの予測値を確定することを含む、符号化方法であって、
前記現在のブロックに含まれるサブブロックのそれぞれに対して、予測値を確定することは、
第1の参照フレームおよび第1のオリジナル動きベクトルと、第2の参照フレームおよび第2のオリジナル動きベクトルとを含む前記現在のブロックの動き情報を取得するステップと、
前記現在のブロックの第1のオリジナル動きベクトルに基づいて前記サブブロックに対応する第1の参照ブロックを確定し、現在のブロックの第2のオリジナル動きベクトルに基づいて前記サブブロックに対応する第2の参照ブロックを確定するステップと、
前記第1の参照ブロックの画素値及び前記第2の参照ブロックの画素値に基づいて、最適動きベクトルを取得するステップであって、前記第1のオリジナル動きベクトル又は前記第2のオリジナル動きベクトルであるオリジナル動きベクトルを中心として、前記オリジナル動きベクトルの周囲にある前記オリジナル動きベクトルを含む動きベクトルから動きベクトルを選択して候補動きベクトルと確定することと、取得した前記最適動きベクトルは、前記オリジナル動きベクトル及び各候補動きベクトルから選択されたコスト値が最も小さい動きベクトルであることと、を含むステップと、
前記最適動きベクトルに基づいて、前記第1のオリジナル動きベクトルと前記第2のオリジナル動きベクトルとを調整し、前記第1のオリジナル動きベクトルに対応する第1の目標動きベクトル及び前記第2のオリジナル動きベクトルに対応する第2の目標動きベクトルを取得するステップと、
前記第1の目標動きベクトル及び前記第2の目標動きベクトルに基づいて、前記サブブロックの予測値を確定するステップと、を含み、
前記オリジナル動きベクトルを中心として、前記オリジナル動きベクトルの周囲にある
前記オリジナル動きベクトルを含む動きベクトルから動きベクトルを選択して候補動きベクトルと確定することは、
前記オリジナル動きベクトルを中心として、探索範囲を2とし、前記オリジナル動きベクトル
を含む25個の動きベクトルを探索し、前記25個の動きベクトルを候補動きベクトルと確定することを含み、前記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)}であり、
前記最適動きベクトルに基づいて、前記第1のオリジナル動きベクトルと前記第2のオリジナル動きベクトルとを調整し、前記第1のオリジナル動きベクトルに対応する第1の目標動きベクトル及び前記第2のオリジナル動きベクトルに対応する第2の目標動きベクトルを取得するステップは、
前記最適動きベクトルに基づいて、第1の整数画素動きベクトル調整値と、第1のサブ画素動きベクトル調整値と、第2の整数画素動きベクトル調整値と、第2のサブ画素動きベクトル調整値とを確定することと、
第1の整数画素動きベクトル調整値及び第1のサブ画素動きベクトル調整値に基づいて、第1のオリジナル動きベクトルを調整し、サブブロックの第1の目標動きベクトルを取得することと、
第2の整数画素動きベクトル調整値及び第2のサブ画素動きベクトル調整値に基づいて、第2のオリジナル動きベクトルを調整し、サブブロックの第2の目標動きベクトルを取得することと、を含み、
前記最適動きベクトルに基づいて、第1の整数画素動きベクトル調整値と第1のサブ画素動きベクトル調整値とを確定することは、
前記最適動きベクトルに基づいて、前記最適動きベクトルと前記第1のオリジナル動きベクトルとの差である第1の整数画素動きベクトル調整値を確定することと、
前記最適動きベクトルに対応するコスト値、前記最適動きベクトルに対応するエッジ動きベクトルに対応するコスト値に基づいて、第1のサブ画素動きベクトル調整値を確定することと、を含む、
符号化方法。
【請求項9】
前記最適動きベクトルを取得するステップは、前記第1の参照ブロックの画素値及び前記第2の参照ブロックの画素値に基づいて、前記オリジナル動きベクトルに対応するコスト値と前記候補動きベクトルに対応するコスト値とを取得することと、前記オリジナル動きベクトルに対応するコスト値及び前記候補動きベクトルに対応するコスト値に基づいて、最適動きベクトルとして、前記オリジナル動きベクトルと前記候補動きベクトルとの中から1つの動きベクトルを選択することと、を含む、
請求項8に記載の符号化方法。
【請求項10】
前記第1の目標動きベクトル及び前記第2の目標動きベクトルに基づいて、前記サブブロックの予測値を確定するステップは、前記第1の目標動きベクトルに基づいて、前記サブブロックに対応する第3の参照ブロックを確定し、前記第2の目標動きベクトルに基づいて、前記サブブロックに対応する第4の参照ブロックを確定することと、第3の参照ブロックの画素値及び第4の参照ブロックの画素値に基づいて重み付けを行い、前記サブブロックの予測値を取得することと、を含む、
請求項8に記載の符号化方法。
【請求項11】
プロセッサと、前記プロセッサによって実行可能な機械実行可能な命令を格納する機械
可読記憶媒体とを含み、
前記プロセッサは、機械実行可能な命令を実行することで、
請求項1~7のいずれか1項に記載の方法を実現する
復号化デバイス。
【請求項12】
プロセッサと、前記プロセッサによって実行可能な機械実行可能な命令を格納する機械可読記憶媒体とを含み、前記プロセッサは、機械実行可能な命令を実行することで、現在のブロックに対して動きベクトルリファインメントモードを有効にする場合、前記現在のブロックに含まれる各サブブロックの予測値を確定し、前記現在のブロックに含まれる各サブブロックの予測値に基づいて、前記現在のブロックの予測値を確定することを、実現する符号化デバイスであって、
前記現在のブロックに含まれるサブブロックのそれぞれに対して、予測値を確定することは、
第1の参照フレームおよび第1のオリジナル動きベクトルと、第2の参照フレームおよび第2のオリジナル動きベクトルとを含む前記現在のブロックの動き情報を取得するステップと、
前記現在のブロックの第1のオリジナル動きベクトルに基づいて前記サブブロックに対応する第1の参照ブロックを確定し、現在のブロックの第2のオリジナル動きベクトルに基づいて前記サブブロックに対応する第2の参照ブロックを確定するステップと、
前記第1の参照ブロックの画素値及び前記第2の参照ブロックの画素値に基づいて、最適動きベクトルを取得するステップであって、前記第1のオリジナル動きベクトル又は前記第2のオリジナル動きベクトルであるオリジナル動きベクトルを中心として、前記オリジナル動きベクトルの周囲にある前記オリジナル動きベクトルを含む動きベクトルから動きベクトルを選択して候補動きベクトルと確定することと、取得した前記最適動きベクトルは、前記オリジナル動きベクトル及び各候補動きベクトルから選択されたコスト値が最も小さい動きベクトルであることと、を含むステップと、
前記最適動きベクトルに基づいて、前記第1のオリジナル動きベクトルと前記第2のオリジナル動きベクトルとを調整し、前記第1のオリジナル動きベクトルに対応する第1の目標動きベクトル及び前記第2のオリジナル動きベクトルに対応する第2の目標動きベクトルを取得するステップと、
前記第1の目標動きベクトル及び前記第2の目標動きベクトルに基づいて、前記サブブロックの予測値を確定するステップと、を含み、
前記オリジナル動きベクトルを中心として、前記オリジナル動きベクトルの周囲にある前記オリジナル動きベクトルを含む動きベクトルから動きベクトルを選択して候補動きベクトルと確定することは、
前記オリジナル動きベクトルを中心として、探索範囲を2とし、前記オリジナル動きベクトル
を含む25個の動きベクトルを探索し、前記25個の動きベクトルを候補動きベクトルと確定することを含み、前記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)}であり、
前記最適動きベクトルに基づいて、前記第1のオリジナル動きベクトルと前記第2のオリジナル動きベクトルとを調整し、前記第1のオリジナル動きベクトルに対応する第1の目標動きベクトル及び前記第2のオリジナル動きベクトルに対応する第2の目標動きベクトルを取得するステップは、
前記最適動きベクトルに基づいて、第1の整数画素動きベクトル調整値と、第1のサブ画素動きベクトル調整値と、第2の整数画素動きベクトル調整値と、第2のサブ画素動き
ベクトル調整値とを確定することと、
第1の整数画素動きベクトル調整値及び第1のサブ画素動きベクトル調整値に基づいて、第1のオリジナル動きベクトルを調整し、サブブロックの第1の目標動きベクトルを取得することと、
第2の整数画素動きベクトル調整値及び第2のサブ画素動きベクトル調整値に基づいて、第2のオリジナル動きベクトルを調整し、サブブロックの第2の目標動きベクトルを取得することと、を含み、
前記最適動きベクトルに基づいて、第1の整数画素動きベクトル調整値と第1のサブ画素動きベクトル調整値とを確定することは、
前記最適動きベクトルに基づいて、前記最適動きベクトルと前記第1のオリジナル動きベクトルとの差である第1の整数画素動きベクトル調整値を確定することと、
前記最適動きベクトルに対応するコスト値、前記最適動きベクトルに対応するエッジ動きベクトルに対応するコスト値に基づいて、第1のサブ画素動きベクトル調整値を確定することと、を含む、
符号化デバイス。
【請求項13】
前記最適動きベクトルを取得するステップは、前記第1の参照ブロックの画素値及び前記第2の参照ブロックの画素値に基づいて、前記オリジナル動きベクトルに対応するコスト値と前記候補動きベクトルに対応するコスト値とを取得することと、前記オリジナル動きベクトルに対応するコスト値及び前記候補動きベクトルに対応するコスト値に基づいて、最適動きベクトルとして、前記オリジナル動きベクトルと前記候補動きベクトルとの中から1つの動きベクトルを選択することと、を含む、
請求項12に記載の符号化デバイス。
【請求項14】
前記第1の目標動きベクトル及び前記第2の目標動きベクトルに基づいて、前記サブブロックの予測値を確定するステップは、前記第1の目標動きベクトルに基づいて、前記サブブロックに対応する第3の参照ブロックを確定し、前記第2の目標動きベクトルに基づいて、前記サブブロックに対応する第4の参照ブロックを確定することと、第3の参照ブロックの画素値及び第4の参照ブロックの画素値に基づいて重み付けを行い、前記サブブロックの予測値を取得することと、を含む、
請求項12に記載の符号化デバイス。
【請求項15】
請求項1~7のいずれか1項に記載の方法を実現できるように構成された
復号化装置。
【請求項16】
現在のブロックに対して動きベクトルリファインメントモードを有効にする場合、前記現在のブロックに含まれる各サブブロックの予測値を確定し、前記現在のブロックに含まれる各サブブロックの予測値に基づいて、前記現在のブロックの予測値を確定することを、実現できるように構成された、符号化装置であって、
前記現在のブロックに含まれるサブブロックのそれぞれに対して、予測値を確定することは、
第1の参照フレームおよび第1のオリジナル動きベクトルと、第2の参照フレームおよび第2のオリジナル動きベクトルとを含む前記現在のブロックの動き情報を取得するステップと、
前記現在のブロックの第1のオリジナル動きベクトルに基づいて前記サブブロックに対応する第1の参照ブロックを確定し、現在のブロックの第2のオリジナル動きベクトルに基づいて前記サブブロックに対応する第2の参照ブロックを確定するステップと、
前記第1のオリジナル動きベクトル又は前記第2のオリジナル動きベクトルであるオリジナル動きベクトルを中心として、前記オリジナル動きベクトルの周囲にある前記オリジナル動きベクトルを含む動きベクトルから動きベクトルを選択して候補動きベクトルと確
定することと、取得した最適動きベクトルは、前記オリジナル動きベクトル及び各候補動きベクトルから選択されたコスト値が最も小さい動きベクトルであることと、を含む、前記第1の参照ブロックの画素値及び前記第2の参照ブロックの画素値に基づいて、前記最適動きベクトルを取得するステップと、
前記最適動きベクトルに基づいて、前記第1のオリジナル動きベクトルと前記第2のオリジナル動きベクトルとを調整し、前記第1のオリジナル動きベクトルに対応する第1の目標動きベクトル及び前記第2のオリジナル動きベクトルに対応する第2の目標動きベクトルを取得するステップと、
前記第1の目標動きベクトル及び前記第2の目標動きベクトルに基づいて、前記サブブロックの予測値を確定するステップと、を含み、
前記オリジナル動きベクトルを中心として、前記オリジナル動きベクトルの周囲にある前記オリジナル動きベクトルを含む動きベクトルから動きベクトルを選択して候補動きベクトルと確定することは、
前記オリジナル動きベクトルを中心として、探索範囲を2とし、前記オリジナル動きベクトル
を含む25個の動きベクトルを探索し、前記25個の動きベクトルを候補動きベクトルと確定することを含み、前記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)}であり、
前記最適動きベクトルに基づいて、前記第1のオリジナル動きベクトルと前記第2のオリジナル動きベクトルとを調整し、前記第1のオリジナル動きベクトルに対応する第1の目標動きベクトル及び前記第2のオリジナル動きベクトルに対応する第2の目標動きベクトルを取得するステップは、
前記最適動きベクトルに基づいて、第1の整数画素動きベクトル調整値と、第1のサブ画素動きベクトル調整値と、第2の整数画素動きベクトル調整値と、第2のサブ画素動きベクトル調整値とを確定することと、
第1の整数画素動きベクトル調整値及び第1のサブ画素動きベクトル調整値に基づいて、第1のオリジナル動きベクトルを調整し、サブブロックの第1の目標動きベクトルを取得することと、
第2の整数画素動きベクトル調整値及び第2のサブ画素動きベクトル調整値に基づいて、第2のオリジナル動きベクトルを調整し、サブブロックの第2の目標動きベクトルを取得することと、を含み、
前記最適動きベクトルに基づいて、第1の整数画素動きベクトル調整値と第1のサブ画素動きベクトル調整値とを確定することは、
前記最適動きベクトルに基づいて、前記最適動きベクトルと前記第1のオリジナル動きベクトルとの差である第1の整数画素動きベクトル調整値を確定することと、
前記最適動きベクトルに対応するコスト値、前記最適動きベクトルに対応するエッジ動きベクトルに対応するコスト値に基づいて、第1のサブ画素動きベクトル調整値を確定することと、を含む、
符号化装置。
【請求項17】
前記最適動きベクトルを取得するステップは、前記第1の参照ブロックの画素値及び前記第2の参照ブロックの画素値に基づいて、前記オリジナル動きベクトルに対応するコスト値と前記候補動きベクトルに対応するコスト値とを取得することと、前記オリジナル動きベクトルに対応するコスト値及び前記候補動きベクトルに対応するコスト値に基づいて、最適動きベクトルとして、前記オリジナル動きベクトルと前記候補動きベクトルとの中から1つの動きベクトルを選択することと、を含む、
請求項16に記載の符号化装置。
【請求項18】
前記第1の目標動きベクトル及び前記第2の目標動きベクトルに基づいて、前記サブブロックの予測値を確定するステップは、前記第1の目標動きベクトルに基づいて、前記サブブロックに対応する第3の参照ブロックを確定し、前記第2の目標動きベクトルに基づいて、前記サブブロックに対応する第4の参照ブロックを確定することと、第3の参照ブロックの画素値及び第4の参照ブロックの画素値に基づいて重み付けを行い、前記サブブロックの予測値を取得することと、を含む、
請求項16に記載の符号化装置。
【請求項19】
プロセッサによって実行されると、前記プロセッサに請求項1~7のいずれか1項に記載の方法を実現させるコンピュータ命令が格納される、機械可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本願はコーデック技術、特にコーデック方法及び装置、符号化デバイス及び復号化デバイスに関する。
【背景技術】
【0002】
空間節約の目的を達成するために、ビデオ画像はいずれも符号化済み後に伝送されたものであり、完全なビデオ符号化方法は予測、変換、量子化、エントロピー符号化、フィルタリング等の過程を含んでよい。ここで、予測符号化はイントラ符号化及びインター符号化を含み、インター符号化はビデオの時間領域の相関性を利用し、符号化済み画像に隣接する画素を使用して現在の画像の画素を予測することで、ビデオの時間領域冗長度を効率的に削減することを図る。
【0003】
インター符号化では、現在のフレームのビデオ画像の現在の画像ブロックと参照フレームのビデオ画像の参照画像ブロックとの間の相対変位を動きベクトル(Motion Vector,MV)で表すことができる。例えば、現在のフレームのビデオ画像Aと参照フレームのビデオ画像Bとは強い時間領域相関性が存在する場合、ビデオ画像Aの画像ブロックA1(現在の画像ブロック)を伝送する必要がある時に、ビデオ画像Bにおいて動き探索を行って、画像ブロックA1に最もマッチングする画像ブロックB1(即ち参照画像ブロック)を検出して、画像ブロックA1と画像ブロックB1との間の相対変位、即ち画像ブロックA1の動きベクトルを確定する。
【0004】
符号化側は、画像ブロックA1を復号化側に送信する代わりに、動きベクトルを復号化側に送信してよい。復号化側は、動きベクトルと画像ブロックB1に基づいて画像ブロックA1を取得してよい。明らかに、動きベクトルが占めるビット数は画像ブロックA1が占めるビット数より少ないため、上記方式では大量のビットを節約できる。
【0005】
従来の方式では、現在のブロックが単方向ブロックである場合、現在のブロックの動きベクトル(以下、オリジナル動きベクトルという)を獲得した後、オリジナル動きベクトルを調整して、調整された動きベクトルに基づいて符号化/復号化を行うことによって、符号化性能を向上させることができる。しかし、現在のブロックが双方向ブロックである場合、現在のブロックの第1のオリジナル動きベクトル及び第2のオリジナル動きベクトルを取得した後、どのように第1のオリジナル動きベクトル及び第2のオリジナル動きベクトルを調整するかについては、現在合理的な解決手段がない。即ち、双方向ブロックの状況については、予測品質不良や、予測ミスなどの問題の可能性があるため、符号化性能が低い。
【発明の概要】
【課題を解決するための手段】
【0006】
符号化性能を向上させるコーデック方法、装置及びデバイスを提供する。
【0007】
本願は復号化方法を提供し、前記方法は、
現在のブロックに対して動きベクトルリファインメントモードを有効にする場合、前記現在のブロックに含まれる各サブブロックの予測値を確定し、前記現在のブロックに含まれる各サブブロックの予測値に基づいて、前記現在のブロックの予測値を確定することを含み、前記現在のブロックに含まれるサブブロックのそれぞれに対して、予測値を確定することは、第1の参照フレームおよび第1のオリジナル動きベクトルと、第2の参照フレームおよび第2のオリジナル動きベクトルとを含む前記現在のブロックの動き情報を取得するステップと、前記現在のブロックの第1のオリジナル動きベクトルに基づいて前記サブブロックに対応する第1の参照ブロックを確定し、現在のブロックの第2のオリジナル動きベクトルに基づいて前記サブブロックに対応する第2の参照ブロックを確定するステップと、前記第1の参照ブロックの画素値及び前記第2の参照ブロックの画素値に基づいて、最適動きベクトルを取得するステップであって、前記第1のオリジナル動きベクトル又は前記第2のオリジナル動きベクトルであるオリジナル動きベクトルを中心として、前記オリジナル動きベクトルの周囲にある前記オリジナル動きベクトルを含む動きベクトルから動きベクトルを選択して候補動きベクトルと確定することと、前記第1の参照ブロックの画素値及び前記第2の参照ブロックの画素値に基づいて、前記オリジナル動きベクトルに対応するコスト値と前記候補動きベクトルに対応するコスト値とを取得することと、前記オリジナル動きベクトルに対応するコスト値及び前記候補動きベクトルに対応するコスト値に基づいて、最適動きベクトルとして、前記オリジナル動きベクトルと前記候補動きベクトルとの中から1つの動きベクトルを選択することと、を含むステップと、前記最適動きベクトルに基づいて、前記第1のオリジナル動きベクトルと前記第2のオリジナル動きベクトルとを調整し、前記第1のオリジナル動きベクトルに対応する第1の目標動きベクトル及び前記第2のオリジナル動きベクトルに対応する第2の目標動きベクトルを取得するステップと、前記第1の目標動きベクトル及び前記第2の目標動きベクトルに基づいて、前記サブブロックの予測値を確定するステップであって、前記第1の目標動きベクトルに基づいて、前記サブブロックに対応する第3の参照ブロックを確定し、前記第2の目標動きベクトルに基づいて、前記サブブロックに対応する第4の参照ブロックを確定することと、第3の参照ブロックの画素値及び第4の参照ブロックの画素値に基づいて重み付けを行い、前記サブブロックの予測値を取得することと、を含むステップと、を含む。
【0008】
前記オリジナル動きベクトルを中心として、前記オリジナル動きベクトルの周囲にある前記オリジナル動きベクトルを含む動きベクトルから動きベクトルを選択して候補動きベクトルと確定することは、前記オリジナル動きベクトルを中心として、探索範囲を2とし、前記オリジナル動きベクトル含む25個の動きベクトルを探索し、前記25個の動きベクトルを候補動きベクトルと確定することを含み、前記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)}であってよい。
【0009】
前記第1の参照ブロックの画素値及び前記第2の参照ブロックの画素値に基づいて、前記オリジナル動きベクトルに対応するコスト値と前記候補動きベクトルに対応するコスト値とを取得することにおいて、候補動きベクトルに対応するコスト値を取得することは、第1の参照ブロックに基づいて、前記候補動きベクトルに対応する第1のサブ参照ブロックを確定し、第2の参照ブロックに基づいて、前記候補動きベクトルに対応する第2のサブ参照ブロックを確定することと、垂直2倍のダウンサンプリングを行い、前記第1の参照ブロック及び前記第2の参照ブロックの各画素値の差分絶対値和を取得することと、取得した差分絶対値和に基づいて、前記候補動きベクトルに対応するコスト値を確定することと、を含み、オリジナル動きベクトルに対応するコスト値を取得することは、第1の参照ブロックに基づいて、前記オリジナル動きベクトルに対応する第3のサブ参照ブロックを確定し、第2の参照ブロックに基づいて、前記オリジナル動きベクトルに対応する第4のサブ参照ブロックを確定することと、垂直2倍のダウンサンプリングを行い、前記第1のサブ参照ブロック及び前記第2のサブ参照ブロックの各画素値の差分絶対値和を取得することと、取得した差分絶対値和に基づいて、前記オリジナル動きベクトルに対応するコスト値を確定することと、を含んでよい。
【0010】
前記最適動きベクトルに基づいて、前記第1のオリジナル動きベクトルと前記第2のオリジナル動きベクトルとを調整し、前記第1のオリジナル動きベクトルに対応する第1の目標動きベクトル及び前記第2のオリジナル動きベクトルに対応する第2の目標動きベクトルを取得するステップは、前記最適動きベクトルに基づいて、第1の整数画素動きベクトル調整値と第2の整数画素動きベクトル調整値とを確定することと、前記第1の整数画素動きベクトル調整値に基づいて、前記第1のオリジナル動きベクトルを調整し、前記第1のオリジナル動きベクトルに対応する第1の目標動きベクトルを取得することと、前記第2の整数画素動きベクトル調整値に基づいて、前記第2のオリジナル動きベクトルを調整し、前記第2のオリジナル動きベクトルに対応する第2の目標動きベクトルを取得することと、を含んでよい。
【0011】
前記最適動きベクトルに基づいて、第1の整数画素動きベクトル調整値と第2の整数画素動きベクトル調整値とを確定することは、前記最適動きベクトルに基づいて、前記最適動きベクトルと前記オリジナル動きベクトルとの差である第1の整数画素動きベクトル調整値を確定することと、前記第1の整数画素動きベクトル調整値に基づいて、第2の整数画素動きベクトル調整値を確定し、前記第2の整数画素動きベクトル調整値と前記第1の整数画素動きベクトル調整値とは互いに反数であることと、を含んでよい。
【0012】
前記第1の整数画素動きベクトル調整値に基づいて、前記第1のオリジナル動きベクトルを調整し、前記第1のオリジナル動きベクトルに対応する第1の目標動きベクトルを取得することと、前記第2の整数画素動きベクトル調整値に基づいて、前記第2のオリジナル動きベクトルを調整し、前記第2のオリジナル動きベクトルに対応する第2の目標動きベクトルを取得することとは、前記第1の目標動きベクトルは、前記第1のオリジナル動きベクトルと前記第1の整数画素動きベクトル調整値との和であることと、前記第2の目標動きベクトルは、前記第2のオリジナル動きベクトルと前記第2の整数画素動きベクトル調整値との和であることと、を含んでよい。
【0013】
前記最適動きベクトルに基づいて、前記第1のオリジナル動きベクトルと前記第2のオリジナル動きベクトルとを調整し、前記第1のオリジナル動きベクトルに対応する第1の目標動きベクトル及び前記第2のオリジナル動きベクトルに対応する第2の目標動きベクトルを取得するステップは、前記最適動きベクトルに基づいて、第1の整数画素動きベクトル調整値と、第1のサブ画素動きベクトル調整値と、第2の整数画素動きベクトル調整値と、第2のサブ画素動きベクトル調整値とを確定することと、第1の整数画素動きベクトル調整値及び第1のサブ画素動きベクトル調整値に基づいて、第1のオリジナル動きベクトルを調整し、サブブロックの第1の目標動きベクトルを取得することと、第2の整数画素動きベクトル調整値及び第2のサブ画素動きベクトル調整値に基づいて、第2のオリジナル動きベクトルを調整し、サブブロックの第2の目標動きベクトルを取得することと、を含んでよい。
【0014】
前記最適動きベクトルに基づいて、前記第1のオリジナル動きベクトルと前記第2のオリジナル動きベクトルとを調整し、前記第1のオリジナル動きベクトルに対応する第1の目標動きベクトル及び前記第2のオリジナル動きベクトルに対応する第2の目標動きベクトルを取得するステップは、前記最適動きベクトルに基づいて、第1の整数画素動きベクトル調整値と第1のサブ画素動きベクトル調整値とを確定することと、第1の整数画素動きベクトル調整値及び第1のサブ画素動きベクトル調整値を基づいて、最適オフセット動きベクトルを取得することと、前記最適オフセット動きベクトルに基づいて、前記第1のオリジナル動きベクトルを調整し、前記第1の目標動きベクトルを取得することと、前記最適オフセット動きベクトルの反数に基づいて、前記第2のオリジナル動きベクトルを調整し、前記第2の目標動きベクトルを取得することと、を含んでよい。
【0015】
前記最適動きベクトルに基づいて、第1の整数画素動きベクトル調整値と第1のサブ画素動きベクトル調整値とを確定することは、前記最適動きベクトルに基づいて、前記最適動きベクトルと前記第1のオリジナル動きベクトルとの差である第1の整数画素動きベクトル調整値を確定することと、前記最適動きベクトルに対応するコスト値、前記最適動きベクトルに対応するエッジ動きベクトルに対応するコスト値に基づいて、第1のサブ画素動きベクトル調整値を確定することと、を含んでよい。
【0016】
前記最適動きベクトルに対応するコスト値、前記最適動きベクトルに対応するエッジ動きベクトルに対応するコスト値に基づいて、第1のサブ画素動きベクトル調整値を確定することは、前記最適動きベクトルを中心とした5つの整数画素動きベクトルのコスト値を順次に確定し、前記5つの整数画素動きベクトルは、前記最適動きベクトルを中心として、それぞれ、水平に左へ、水平に右へ、垂直に上へ、垂直に下へシフトするにより取得した5つのエッジ動きベクトルであることと、前記5つの整数画素動きベクトルのコスト値に基づいて、前記第1のサブ画素動きベクトル調整値を確定することと、を含んでよい。
【0017】
第1の目標動きベクトルは、第1のオリジナル動きベクトルと、第1の整数画素動きベクトル調整値と、第1のサブ画素動きベクトル調整値との和であってよく、第2の目標動きベクトルは、第2のオリジナル動きベクトルと、第2の整数画素動きベクトル調整値と、第2のサブ画素動きベクトル調整値との和であってよく、前記第2の整数画素動きベクトル調整値と、前記第1の整数画素動きベクトル調整値とは、互いに反数であってよく、前記第2のサブ画素動きベクトル調整値と、前記第1のサブ画素動きベクトル調整値とは、互いに反数である。
【0018】
前記最適動きベクトルは、前記オリジナル動きベクトル及び各候補動きベクトルから選択されたコスト値が最も小さい動きベクトルであってよい。
【0019】
第1の整数画素動きベクトル調整値における垂直及び/又は水平方向の絶対値が予て設定された値に等しい場合、前記第1の整数画素動きベクトル調整値に基づいて、前記第1のオリジナル動きベクトルを調整し、前記第1のオリジナル動きベクトルに対応する第1の目標動きベクトルを取得してよい。
【0020】
第1の整数画素動きベクトル調整値における垂直及び/又は水平方向の絶対値が予て設定された値に等しくない場合、前記第1の整数画素動きベクトル調整値及び前記第1のサブ画素動きベクトル調整値に基づいて、前記第1のオリジナル動きベクトルを調整し、前記第1のオリジナル動きベクトルに対応する第1の目標動きベクトルを取得してよい。
【0021】
オリジナル動きベクトルに対応するコスト値が予て設定された閾値以上である場合、前記オリジナル動きベクトルに対応するコスト値及び前記候補動きベクトルに対応するコスト値に基づいて、最適動きベクトルとして、前記オリジナル動きベクトルと前記候補動きベクトルとの中から1つの動きベクトルを選択するステップを実行してよく、オリジナル動きベクトルに対応するコスト値が予て設定された閾値小さい場合、前記オリジナル動きベクトルに対応するコスト値及び前記候補動きベクトルに対応するコスト値に基づいて、最適動きベクトルとして、前記オリジナル動きベクトルと前記候補動きベクトルとの中から1つの動きベクトルを選択するステップを実行しなくてよく、前記予て設定された閾値は、前記サブブロックの幅及び高さにより確定される。
【0022】
前記現在のブロックが1つのサブブロックのみを含む場合、当該サブブロックは現在のブロック自体であってよい。
【0023】
前記第1の参照ブロック及び第2の参照ブロックは、輝度成分に基づいて確定した参照ブロックであってよい。
【0024】
前記第1の参照ブロックの画素値及び第2の参照ブロックの画素値のどちらも、バイリニア補間で取得されるものであってよい。
【0025】
前記現在のブロックの第1のオリジナル動きベクトルに基づいて前記サブブロックに対応する第1の参照ブロックを確定し、現在のブロックの第2のオリジナル動きベクトルに基づいて前記サブブロックに対応する第2の参照ブロックを確定するステップは、前記第1のオリジナル動きベクトル及び前記現在のブロックの第1の参照フレームに基づいて、バイリニア補間で第1の参照ブロックを確定することと、前記第2のオリジナル動きベクトル及び前記現在のブロックの第2の参照フレームに基づいて、バイリニア補間で第2の参照ブロックを確定することと、を含んでよく、前記第1の参照ブロックのサイズと前記第2の参照ブロックのサイズとは同じであり、前記第1の参照ブロックの幅値は、前記サブブロックの幅値及び探索範囲に基づいて確定され、前記第1の参照ブロックの高さ値は、前記サブブロックの高さ値及び探索範囲に基づいて確定される。
【0026】
前記現在のブロックの第1のオリジナル動きベクトルに基づいて前記サブブロックに対応する第1の参照ブロックを確定し、現在のブロックの第2のオリジナル動きベクトルに基づいて前記サブブロックに対応する第2の参照ブロックを確定するステップは、前記第1のオリジナル動きベクトルに基づいて、前記現在のブロックの第1の参照フレームから第1の整数画素ブロックを取得し、前記第1の整数画素ブロックに対してバイリニア補間を行って前記第1の参照ブロックを取得することと、前記第2のオリジナル動きベクトルに基づいて、前記現在のブロックの第2の参照フレームから第2の整数画素ブロックを取得し、前記第2の整数画素ブロックに対してバイリニア補間を行って前記第2の参照ブロックを取得することと、を含んでよく、Wは前記サブブロックの幅であり、Hは前記現在のブロックの高さであり、SRは探索範囲である場合、第1の参照ブロック及び第2の参照ブロックの幅値はW+2*SRであり、第1の参照ブロック及び第2の参照ブロックの高さ値はH+2*SRであり、SRの値は2としてよい。
【0027】
第3の参照ブロックの画素値及び第4の参照ブロックの画素値に基づいて重み付けを行う際に、重みが同じであってよい。
【0028】
前記第3の参照ブロックの画素値及び前記第4の参照ブロックの画素値は、8タップの補間フィルタにより補間して取得されてよい。
【0029】
前記第1の目標動きベクトルに基づいて、前記サブブロックに対応する第3の参照ブロックを確定し、前記第2の目標動きベクトルに基づいて、前記サブブロックに対応する第4の参照ブロックを確定することは、前記第1の目標動きベクトルに基づいて、前記現在のブロックの第1の参照フレームから前記サブブロックに対応する第5の参照ブロックを確定し、8タップの補間フィルタにより前記第5の参照ブロックにおける画素値を補間して、前記第3の参照ブロックを取得することと、前記第2の目標動きベクトルに基づいて、前記現在のブロックの第2の参照フレームから前記サブブロックに対応する第6の参照ブロックを確定し、8タップの補間フィルタにより前記第6の参照ブロックにおける画素値を補間して、前記第4の参照ブロックを取得することと、を含んでよく、前記第5の参照ブロックのサイズは、前記サブブロックより大きいであり、前記第6の参照ブロックのサイズは、前記サブブロックより大きいであり、前記サイズは、幅と高さとを含んでよい。
【0030】
前記サブブロックは、輝度成分を含んでよく、前記第1の目標動きベクトル及び前記第2の目標動きベクトルに基づいて、前記サブブロックの予測値を確定するステップは、前記サブブロックの輝度成分に対して、前記第1の目標動きベクトル及び前記第2の目標動きベクトルに基づいて、前記サブブロックに対して重み付け動き補償を行い、前記サブブロックの輝度予測値を取得することを含んでよい。
【0031】
前記サブブロックは、色度成分を含んでよく、前記第1の目標動きベクトル及び前記第2の目標動きベクトルに基づいて、前記サブブロックの予測値を確定するステップは、前記サブブロックの色度成分に対して、前記第1の目標動きベクトル及び前記第2の目標動きベクトルに基づいて、前記サブブロックに対して重み付け動き補償を行い、前記サブブロックの色度予測値を取得することを含んでよい。
【0032】
現在のブロックに対して動きベクトルリファインメントモードを有効にする場合、前記現在のブロックの特徴情報が特定の条件を満たしてよく、前記特徴情報は、現在のブロックに対応する動き情報予測モードと、現在のブロックに対応する動き情報属性と、現在のブロックのサイズ情報とを含んでよく、前記現在のブロックに対して動きベクトルリファインメントモードを有効にする場合、前記現在のブロックの特徴情報が満たす特定の条件は、少なくとも、現在のブロックはMMVDモードを使用しないことと、現在のブロックはMergeモードを使用することと、現在のブロックのサイズは限定範囲内であることと、現在のブロックの動き情報は2つの異なる方向の動き情報を含み、且つ、2つの異なる方向の動き情報に対応する2つの参照フレームが現在のフレームとの距離は同じであってよい。
【0033】
現在のブロックはMMVDモードを使用しないことと、現在のブロックはMergeモードを使用することと、現在のブロックのサイズは限定範囲内であることと、現在のブロックの動き情報属性は2つの異なる方向の動き情報を含み、且つ、2つの異なる方向の動き情報に対応する2つの参照フレームが現在のフレームとの距離は同じであることとの中の何れか1つの条件を満たさない場合、現在のブロックは、動きベクトルリファインメントモードを有効にしないこと、をさらに含んでよい。
【0034】
前記現在のブロックが所在する現在のフレームと、第1の参照フレーム、第2の参照フレームのそれぞれとの間の距離は同じであってよい。
【0035】
前記現在のブロックが1つのサブブロックのみを含む場合、当該サブブロックは前記現在のブロック自体であり、前記第1のオリジナル動きベクトル及び前記第2のオリジナル動きベクトルは、前記現在のブロックのオリジナル動きベクトルであってよい。
【0036】
前記現在のブロックが複数のサブブロックを含む場合、前記複数のサブブロックのそれぞれの前記第1のオリジナル動きベクトル及び前記第2のオリジナル動きベクトルは、前記現在のブロックの2つの異なる方向のオリジナル動きベクトルを共用してよい。
【0037】
本願は符号化方法を提供し、前記方法は、
現在のブロックに対して動きベクトルリファインメントモードを有効にする場合、前記現在のブロックに含まれる各サブブロックの予測値を確定し、前記現在のブロックに含まれる各サブブロックの予測値に基づいて、前記現在のブロックの予測値を確定することを含み、前記現在のブロックに含まれるサブブロックのそれぞれに対して、予測値を確定することは、第1の参照フレームおよび第1のオリジナル動きベクトルと、第2の参照フレームおよび第2のオリジナル動きベクトルとを含む前記現在のブロックの動き情報を取得するステップと、前記現在のブロックの第1のオリジナル動きベクトルに基づいて前記サブブロックに対応する第1の参照ブロックを確定し、現在のブロックの第2のオリジナル動きベクトルに基づいて前記サブブロックに対応する第2の参照ブロックを確定するステップと、前記第1の参照ブロックの画素値及び前記第2の参照ブロックの画素値に基づいて、最適動きベクトルを取得するステップであって、前記第1のオリジナル動きベクトル又は前記第2のオリジナル動きベクトルであるオリジナル動きベクトルを中心として、前記オリジナル動きベクトルの周囲にある前記オリジナル動きベクトルを含む動きベクトルから動きベクトルを選択して候補動きベクトルと確定することと、前記第1の参照ブロックの画素値及び前記第2の参照ブロックの画素値に基づいて、前記オリジナル動きベクトルに対応するコスト値と前記候補動きベクトルに対応するコスト値とを取得することと、前記オリジナル動きベクトルに対応するコスト値及び前記候補動きベクトルに対応するコスト値に基づいて、最適動きベクトルとして、前記オリジナル動きベクトルと前記候補動きベクトルとの中から1つの動きベクトルを選択することと、を含むステップと、前記最適動きベクトルに基づいて、前記第1のオリジナル動きベクトルと前記第2のオリジナル動きベクトルとを調整し、前記第1のオリジナル動きベクトルに対応する第1の目標動きベクトル及び前記第2のオリジナル動きベクトルに対応する第2の目標動きベクトルを取得するステップと、前記第1の目標動きベクトル及び前記第2の目標動きベクトルに基づいて、前記サブブロックの予測値を確定するステップであって、前記第1の目標動きベクトルに基づいて、前記サブブロックに対応する第3の参照ブロックを確定し、前記第2の目標動きベクトルに基づいて、前記サブブロックに対応する第4の参照ブロックを確定することと、第3の参照ブロックの画素値及び第4の参照ブロックの画素値に基づいて重み付けを行い、前記サブブロックの予測値を取得することと、を含むステップと、を含む。
【0038】
本願はコーデック装置を提供し、前記装置は、現在のブロックの特徴情報が特定の条件を満たす場合、前記現在のブロックの第1のオリジナル動きベクトルに基づいて前記現在のブロックに対応する第1の参照ブロックを確定し、前記現在のブロックの第2のオリジナル動きベクトルに基づいて前記現在のブロックに対応する第2の参照ブロックを確定する確定モジュールと、前記第1の参照ブロックの第1の画素値と前記第2の参照ブロックの第2の画素値とに基づいて、前記第1のオリジナル動きベクトルと前記第2のオリジナル動きベクトルとを調整し、前記第1のオリジナル動きベクトルに対応する第1の目標動きベクトルと前記第2のオリジナル動きベクトルに対応する第2の目標動きベクトルとを得る処理モジュールと、前記第1の目標動きベクトル及び前記第2の目標動きベクトルに基づいて前記現在のブロックを符号化又は復号化するコーデックモジュールと、を含む。
【0039】
本願は符号化デバイスを提供し、前記符号化デバイスはプロセッサ及び機械可読記憶媒体を含み、前記プロセッサは、機械実行可能な命令を実行することで、現在のブロックに対して動きベクトルリファインメントモードを有効にする場合、前記現在のブロックに含まれる各サブブロックの予測値を確定し、前記現在のブロックに含まれる各サブブロックの予測値に基づいて、前記現在のブロックの予測値を確定することを、実現し、前記現在のブロックに含まれるサブブロックのそれぞれに対して、予測値を確定することは、第1の参照フレームおよび第1のオリジナル動きベクトルと、第2の参照フレームおよび第2のオリジナル動きベクトルとを含む前記現在のブロックの動き情報を取得するステップと、前記現在のブロックの第1のオリジナル動きベクトルに基づいて前記サブブロックに対応する第1の参照ブロックを確定し、現在のブロックの第2のオリジナル動きベクトルに基づいて前記サブブロックに対応する第2の参照ブロックを確定するステップと、前記第1のオリジナル動きベクトル又は前記第2のオリジナル動きベクトルであるオリジナル動きベクトルを中心として、前記オリジナル動きベクトルの周囲にある前記オリジナル動きベクトルを含む動きベクトルから動きベクトルを選択して候補動きベクトルと確定することと、前記第1の参照ブロックの画素値及び前記第2の参照ブロックの画素値に基づいて、前記オリジナル動きベクトルに対応するコスト値と前記候補動きベクトルに対応するコスト値とを取得することと、前記オリジナル動きベクトルに対応するコスト値及び前記候補動きベクトルに対応するコスト値に基づいて、最適動きベクトルとして、前記オリジナル動きベクトルと前記候補動きベクトルとの中から1つの動きベクトルを選択することと、を含む、前記第1の参照ブロックの画素値及び前記第2の参照ブロックの画素値に基づいて、前記最適動きベクトルを取得するステップと、前記最適動きベクトルに基づいて、前記第1のオリジナル動きベクトルと前記第2のオリジナル動きベクトルとを調整し、前記第1のオリジナル動きベクトルに対応する第1の目標動きベクトル及び前記第2のオリジナル動きベクトルに対応する第2の目標動きベクトルを取得するステップと、前記第1の目標動きベクトル及び前記第2の目標動きベクトルに基づいて、前記サブブロックの予測値を確定するステップであって、前記第1の目標動きベクトルに基づいて、前記サブブロックに対応する第3の参照ブロックを確定し、前記第2の目標動きベクトルに基づいて、前記サブブロックに対応する第4の参照ブロックを確定することと、第3の参照ブロックの画素値及び第4の参照ブロックの画素値に基づいて重み付けを行い、前記サブブロックの予測値を取得することと、を含むステップと、を含む。
【0040】
本願は復号化デバイスを提供し、前記復号化デバイスはプロセッサ及び機械可読記憶媒体を含み、前記プロセッサは、機械実行可能な命令を実行することで、現在のブロックに対して動きベクトルリファインメントモードを有効にする場合、前記現在のブロックに含まれる各サブブロックの予測値を確定し、前記現在のブロックに含まれる各サブブロックの予測値に基づいて、前記現在のブロックの予測値を確定することを、実現し、前記現在のブロックに含まれるサブブロックのそれぞれに対して、予測値を確定することは、第1の参照フレームおよび第1のオリジナル動きベクトルと、第2の参照フレームおよび第2のオリジナル動きベクトルとを含む前記現在のブロックの動き情報を取得するステップと、前記現在のブロックの第1のオリジナル動きベクトルに基づいて前記サブブロックに対応する第1の参照ブロックを確定し、現在のブロックの第2のオリジナル動きベクトルに基づいて前記サブブロックに対応する第2の参照ブロックを確定するステップと、前記第1のオリジナル動きベクトル又は前記第2のオリジナル動きベクトルであるオリジナル動きベクトルを中心として、前記オリジナル動きベクトルの周囲にある前記オリジナル動きベクトルを含む動きベクトルから動きベクトルを選択して候補動きベクトルと確定することと、前記第1の参照ブロックの画素値及び前記第2の参照ブロックの画素値に基づいて、前記オリジナル動きベクトルに対応するコスト値と前記候補動きベクトルに対応するコスト値とを取得することと、前記オリジナル動きベクトルに対応するコスト値及び前記候補動きベクトルに対応するコスト値に基づいて、最適動きベクトルとして、前記オリジナル動きベクトルと前記候補動きベクトルとの中から1つの動きベクトルを選択することと、を含む、前記第1の参照ブロックの画素値及び前記第2の参照ブロックの画素値に基づいて、前記最適動きベクトルを取得するステップと、前記最適動きベクトルに基づいて、前記第1のオリジナル動きベクトルと前記第2のオリジナル動きベクトルとを調整し、前記第1のオリジナル動きベクトルに対応する第1の目標動きベクトル及び前記第2のオリジナル動きベクトルに対応する第2の目標動きベクトルを取得するステップと、前記第1の目標動きベクトル及び前記第2の目標動きベクトルに基づいて、前記サブブロックの予測値を確定するステップであって、前記第1の目標動きベクトルに基づいて、前記サブブロックに対応する第3の参照ブロックを確定し、前記第2の目標動きベクトルに基づいて、前記サブブロックに対応する第4の参照ブロックを確定することと、第3の参照ブロックの画素値及び第4の参照ブロックの画素値に基づいて重み付けを行い、前記サブブロックの予測値を取得することと、を含むステップと、を含む。
【0041】
本願は機械可読記憶媒体を提供し、前記機械可読記憶媒体は、プロセッサによって実行されると、前記プロセッサに前記方法を実現させるコンピュータ命令が格納される。
【0042】
上記した技術案から分かるように、本願の実施例において、直接に第1のオリジナル動きベクトル及び第2のオリジナル動きベクトルに基づいて現在のブロックを符号化又は復号化するのではなく、第1のオリジナル動きベクトル及び第2のオリジナル動きベクトルに基づいて現在のブロックの第1の目標動きベクトル及び第2の目標動きベクトルを確定して、第1の目標動きベクトル及び第2の目標動きベクトルに基づいて現在のブロックを符号化又は復号化できるため、予測品質不良や、予測ミスなどの問題を解決しつつ、符号化性能及び符号化効率を向上させる。
【図面の簡単な説明】
【0043】
本願の実施例又は従来の技術における技術案をより明確に説明するために、以下では本願の実施例又は従来の技術の説明に使用する必要がある図面を簡単に紹介する。明らかに、以下の説明における図面は本願に記載されているいくつかの実施例に過ぎず、当業者であれば、これらの本願の実施例の図面に基づいて他の図面をさらに取得できる。
【0044】
【
図1A】
図1Aは本願の一実施形態における補間の模式図である。
【
図1B】
図1Bは本願の一実施形態におけるビデオ符号化アーキテクチャの模式図である。
【
図2】
図2は本願の一実施形態におけるコーデック方法のフローチャートである。
【
図3】
図3は本願の一実施形態におけるコーデック方法のフローチャートである。
【
図4】
図4は本願の一実施形態におけるコーデック方法のフローチャートである。
【
図5】
図5は本願の実施形態における参照画素の模式図である。
【
図6】
図6は本願の一実施形態における動きベクトルの反復の模式図である。
【
図8】
図8は本願の一実施形態における現在のブロックの空間領域の参照の模式図である。
【
図9】
図9は本発明の一実施形態におけるコーデック装置の構成図である。
【
図10】
図10は本願の一実施形態における復号化デバイスのハードウェア構成図である。
【
図11】
図11は本願の一実施形態における符号化デバイスのハードウェア構成図である。
【発明を実施するための形態】
【0045】
本願の実施形態で用いられる用語は、特定の実施例を説明するためのものに過ぎず、本願を限定するものではない。本願および特許請求の範囲で用いられる「一」や「前記」、「当該」は、その意味が文脈で明示されていない限り、単数形とされる以外、複数形ともされる。本明細書で用いられる用語「及び/又は」とは、互いに関連する項目のうち、任意の1つ又は複数の組合せ、あるいはその全ての可能な組合せを含むこと意味することが理解される。
【0046】
第1、第2、第3などの用語がいろんな情報の説明に用いられるが、これらの情報はこれらの用語に限定されていないことが理解される。これらの用語は、単に同一類型の情報を互いに区別するために用いられる。例えば、本願の範囲から逸脱しない場合であれば、第1の情報を第2の情報と呼ぶことができ、同様に、第2の情報を第1の情報と呼ぶこともできる。用いられる用語「…と」は、文脈に基づいて、「…場合」、「…時」、又は「…の確定に応じて」と解釈され得る。
【0047】
本願の実施例はコーデック方法を提供し、以下の概念に関しうる。
【0048】
イントラ予測とインター予測(intra prediction and inter prediction)技術において、イントラ予測はビデオの空間領域の相関性を利用し、現在の画像の符号化済みブロックの画素を利用して現画素を予測し、ビデオの空間領域の冗長度を削減することを図る。イントラ予測では、複数の予測モードが定義されており、各予測モードはそれぞれ1種類のテクスチャ方向に対応する(DCモードを除く)。現在のブロックの予測画素は、予測方向にそれと隣接するブロックの境界再構成画素値から生成される。例えば、画像のテクスチャが水平配置の場合、水平予測モードを選択すると、画像情報をより良好に予測できる。インター符号化は、ビデオの時間領域の相関性を利用し、ビデオシーケンスは通常強い時間領域相関性があるため、隣接する符号化済み画像画素を用いて現在の画像の画素を予測することで、ビデオの時間領域冗長度を効率的に削減することを図る。主なビデオ符号化標準におけるインター符号化の部分はいずれ
もブロックに基づく動き補償技術を用いる。主な原理は、現在の画像の各画素ブロックに対して、その前の符号化済み画像において最適ブロックを探索することであり、当該過程は動き推定(Motion Estimation,ME)と呼ばれる。
【0049】
動きベクトル(MV,Motion Vector)は、インター符号化において、現在の符号化ブロックとその参照画像における最適マッチングブロックの間との相対変位を表すことに用いられる。区画された各ブロックは、いずれも対応する動きベクトルが復号化側に伝送される。各ブロックの動きベクトルをそれぞれ別々に符号化と伝送を行う場合、特に小サイズのブロックに区画する場合、相当なビットを消費する必要がある。動きベクトルの符号化に用いられるビット数を低減するために、隣接する画像ブロックの間の空間領域の相関性を利用し、隣接する符号化済みブロックの動きベクトルに基づいて、現在符号化されるブロックの動きベクトルを予測して、予測差分を符号化する。これにより、動きベクトルを表すビット数を効果的に低減させることができる。現在のブロックの動きベクトルの符号化処理において、まず、隣接する符号化済みブロックの動きベクトルを用いて現在のブロックの動きベクトルを予測して、動きベクトルの予測値(MVP,MotionVector Prediction)と動きベクトルの真の推定値との差分(MVD,MotionVector Difference)を符号化することで、MVの符号化ビット数を効果的に低減させる。
【0050】
動き情報(Motion Information)は、動きベクトルが現在の画像ブロックとある参照画像ブロックとの位置オフセットを示すため、画像ブロックを指す情報を正確に取得するために、動きベクトルに加えて、どの参照フレーム画像を使用するかを示す参照フレーム画像のインデックス情報も必要である。ビデオ符号化技術において、現在のフレーム画像に対して、一般的に1つの参照フレーム画像リストを確立してよい。参照フレーム画像のインデックス情報は、現在の画像ブロックが、参照フレーム画像リストにおける何番目の参照フレーム画像が用いられているかを示す。また、多くの符号化技術では、複数の参照画像リストがあることサポートする。そのため、もう1つのインデックス値を用いて、どの参照画像リストが用いられているかを示してよい。このインデックス値は参照方向と呼べる。ビデオ符号化技術において、動きベクトル、参照フレームインデックス、参照方向等の動きに関連する情報を動き情報と総称してよい。
【0051】
予測画素(Prediction Signal)は、符号化・復号化済み画素から導出された画素値であり、原画素と予測画素との差分から残差を得て、残差変換量子化及び係数符号化を行う。特殊の場合、インター予測画素は現在のブロックが参照フレーム(再構成画素フレーム)から導出した画素値であり、画素位置が離散的であるため、補間演算で最終的な予測画素を取得する必要がある。予測画素と原画素が近いほど、両者を減算して得た残差エネルギーが小さくなり、符号化圧縮性能が高くなる。
【0052】
補間(Interpolation)については、現在のMVが非整数画素精度である場合、対応する参照フレームから既存の画素値を直接コピーできず、必要な画素値を補間することで取得することしかできない。
図1Aに示すように、オフセットが1/2画素の画素値Y1/2を取得しようとする場合、周囲の既存の画素値Xを補間して取得する必要がある。タップ数がNである補間フィルタを用いると、周囲N個の整数画素を補間して取得する必要がある。
【0053】
動き補償は、補間又はコピーによって現在のブロックの全ての画素値を取得する処理である。
【0054】
ビデオ符号化アーキテクチャは、
図1Bに示すように、本願の実施例の符号化側の処理を実現することに用いられる。また、ビデオ復号化アーキテクチャの模式図が
図1Bと類似しているため、ここでの説明を省略する。また、ビデオ復号化アーキテクチャは、本願の実施例の復号化側の処理を実現することに用いられる。具体的には、ビデオ符号化アーキテクチャ及びビデオ復号化アーキテクチャは、イントラ予測、動き推定/動き補償、参照画像バッファー、ループ内フィルタリング、再構成、変換、量子化、逆変換、逆量子化、エントロピーエンコーダ等のモジュールを含む。符号化側では、これらのモジュール間の協働により、符号化側の処理を実現できる。復号化側では、これらのモジュール間の協働により、復号化側の処理を実現できる。
【0055】
従来の方式では、現在のブロックが双方向ブロックである場合、現在のブロックの第1のオリジナル動きベクトル及び第2のオリジナル動きベクトルを取得した後、どのように第1のオリジナル動きベクトル及び第2のオリジナル動きベクトルを調整するかについては、合理的な解決手段がない。本願の実施例において、現在のブロックが双方向ブロックである時に、まず現在のブロックの特徴情報が特定の条件を満たすか否かを判断し、特定の条件を満たす場合、現在のブロックの第1のオリジナル動きベクトルに基づいて現在のブロックに対応する第1の参照ブロックを確定し、現在のブロックの第2のオリジナル動きベクトルに基づいて現在のブロックに対応する第2の参照ブロックを確定して、第1の参照ブロックの第1の画素値と前記第2の参照ブロックの第2の画素値とに基づいて、第1のオリジナル動きベクトルと第2のオリジナル動きベクトルとを調整し、第1のオリジナル動きベクトルに対応する第1の目標動きベクトルと第2のオリジナル動きベクトルに対応する第2の目標動きベクトルとを得る。
【0056】
このように、第1のオリジナル動きベクトルと第2のオリジナル動きベクトルとを調整して第1の目標動きベクトルと第2の目標動きベクトルとを得ることで、第1の目標動きベクトルと第2の目標動きベクトルとに基づいて現在のブロックを符号化又は復号化できて、符号化性能及び符号化効率を向上させることができる。
【0057】
以下、いくつかの具体的な実施例を参照しながら、本願のコーデック方法を詳細に説明する。
【0058】
実施例1では、
図2が本願の実施例に係るコーデック方法のフローチャートであり、当該方法は復号化側又は符号化側に適用でき、以下のステップを含んでよい。
【0059】
ステップ201では、現在のブロックの特徴情報が特定の条件を満たす場合、現在のブロックの第1のオリジナル動きベクトルに基づいて、現在のブロックに対応する第1の参照ブロックを確定し、現在のブロックの第2のオリジナル動きベクトルに基づいて、現在のブロックに対応する第2の参照ブロックを確定する。当該特徴情報は、現在のブロックに対応する動き情報予測モードと、現在のブロックに対応する動き情報属性と、現在のブロックのサイズ情報とのうちの1つ又は複数を含むが、これらに限定されない。
【0060】
一例では、当該特徴情報が現在のブロックに対応する動き情報予測モードである場合、現在のブロックの特徴情報が特定の条件を満たすことは、現在のブロックに対応する動き情報予測モードが通常マージモードである場合、現在のブロックに対応する動き情報予測モードが特定の条件を満たすことを確定すること、又は、現在のブロックに対応する動き情報予測モードがインター予測値とイントラ予測値を統合して新たな予測値を生成するマージモードである場合、現在のブロックに対応する動き情報予測モードが特定の条件を満たすことを確定することを含むが、これらに限定されない。
【0061】
一例では、特徴情報が現在のブロックに対応する動き情報属性である場合、現在のブロックの特徴情報が特定の条件を満たすことは、現在のブロックに対応する動き情報属性が、現在のブロックの動き情報が2つの異なる方向の動き情報を含むことである場合、現在
のブロックに対応する動き情報属性が特定の条件を満たすことを確定すること、又は、現在のブロックに対応する動き情報属性が、現在のブロックの動き情報が2つの異なる方向の動き情報を含み、2つの異なる方向の動き情報に対応する2つの参照フレームと現在のフレームとの距離が同じであることである場合、現在のブロックに対応する動き情報属性が特定の条件を満たすことを確定すること、又は、現在のブロックに対応する動き情報属性が、現在のブロックの周囲ブロックを利用したことである場合、現在のブロックに対応する動き情報属性が特定の条件を満たすことを確定すること、又は、現在のブロックに対応する動き情報属性が現在のブロックの各サブブロックの動き情報と同じであることである場合、現在のブロックに対応する動き情報属性が特定の条件を満たすことを確定することを含むが、これらに限定されない。
【0062】
例示的に、現在のブロックの動き情報が2つの異なる方向の動き情報を含むこととは、現在のブロックの2つの異なる方向の動き情報がそれぞれ第1の参照フレーム及び第2の参照フレームに対応し、第1の参照フレームが現在のブロックが所在する現在のフレームの前方向に位置し、第2の参照フレームは現在のブロックが所在する現在のフレームの後方向に位置することである。
【0063】
一例では、当該特徴情報が現在のブロックの幅値及び現在のブロックの高さ値を含む現在のブロックのサイズ情報である場合、現在のブロックの特徴情報が特定の条件を満たすことは、現在のブロックの幅値が第1の区間[第1の閾値,第2の閾値]の範囲内である場合、現在のブロックのサイズ情報が特定の条件を満たすことを確定できること、又は、現在のブロックの高さ値が第2の区間[第3の閾値,第4の閾値]の範囲内である場合、現在のブロックのサイズ情報が特定の条件を満たすことを確定できること、又は、現在のブロックの幅値及び現在のブロックの高さ値によって得られた面積が第3の区間[第5の閾値,第6の閾値]の範囲内である場合、現在のブロックのサイズ情報が特定の条件を満たすことを確定できること、又は、前記幅値が第1の区間[第1の閾値,第2の閾値]の範囲内であり、かつ、前記高さ値が第2の区間[第3の閾値,第4の閾値]の範囲内であり、かつ、前記面積が第3の区間[第5の閾値,第6の閾値]の範囲内である場合、現在のブロックのサイズ情報が特定の条件を満たすことを確定できることを含むが、これらに限定されない。
【0064】
例示的に、第1の閾値は第2の閾値より小さくてよく、これらの第1の閾値及び第2の閾値はいずれも限定されず、例えば、第1の閾値が4であり、第2の閾値が128であってよい。第3の閾値は第4の閾値より小さくてよく、これらの第3の閾値及び第4の閾値はいずれも限定されず、例えば、第3の閾値が8であり、第4の閾値が128であってよい。第5の閾値は第6の閾値より小さくてよく、これらの第5の閾値及び第6の閾値はいずれも限定されず、例えば、第5の閾値が64であり、第6の閾値が128*128であってよい。
【0065】
一例では、現在のブロックの第1のオリジナル動きベクトルに基づいて現在のブロックに対応する第1の参照ブロックを確定し、現在のブロックの第2のオリジナル動きベクトルに基づいて現在のブロックに対応する第2の参照ブロックを確定することは、現在のブロックの第1のオリジナル動きベクトルに基づいて、第1の参照フレームから現在のブロックに対応する第1の参照ブロックを確定することと、現在のブロックの第2のオリジナル動きベクトルに基づいて、第2の参照フレームから現在のブロックに対応する第2の参照ブロックを確定することとを含むが、これらに限定されない。第1の参照ブロックにおける各画素点の第1の画素値は、第1の参照ブロックにおける隣接する画素点の画素値を補間することにより得られ、又は、第1の参照ブロックにおける隣接する画素点の画素値をコピーすることにより得られるものである。第2の参照ブロックにおける各画素点の第2の画素値は、第2の参照ブロックにおける隣接する画素点の画素値を補間することにより得られ、又は、第2の参照ブロックにおける隣接する画素点の画素値をコピーすることにより得られるものである。第1の参照ブロックのサイズは、第2の参照ブロックのサイズと同じであり、第1の参照ブロックの幅値は、現在のブロックの幅値及び探索範囲に基づいて確定され、第1の参照ブロックの高さ値は、現在のブロックの高さ値及び探索範囲に基づいて確定される。
【0066】
ステップ202では、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、第1のオリジナル動きベクトルと第2のオリジナル動きベクトルとを調整し、第1のオリジナル動きベクトルに対応する第1の目標動きベクトルと第2のオリジナル動きベクトルに対応する第2の目標動きベクトルとを得る。
【0067】
一例では、現在のブロックが少なくとも1つのサブブロックを含む場合、現在のブロックの各サブブロックに対して、第1の画素値及び第2の画素値に基づいて、第1のオリジナル動きベクトルと第2のオリジナル動きベクトルとを調整し、サブブロックの第1の目標動きベクトル及び第2の目標動きベクトルを得ることができる。
【0068】
一例では、第1の画素値及び第2の画素値に基づいて、第1のオリジナル動きベクトルと第2のオリジナル動きベクトルとを調整し、サブブロックの第1の目標動きベクトル及び第2の目標動きベクトルを取得することは、第1の画素値及び第2の画素値に基づいて、サブブロックの第1の整数画素動きベクトル調整値及び第2の整数画素動きベクトル調整値、及び/又は、サブブロックの第1のサブ画素動きベクトル調整値及び第2のサブ画素動きベクトル調整値を確定することを含むことができる。そして、第1の整数画素動きベクトル調整値及び/又は第1のサブ画素動きベクトル調整値に基づいて、第1のオリジナル動きベクトルを調整し、サブブロックの第1の目標動きベクトルを得ることができる。第2の整数画素動きベクトル調整値及び/又は第2のサブ画素動きベクトル調整値に基づいて、第2のオリジナル動きベクトルを調整し、サブブロックの第2の目標動きベクトルを得る。
【0069】
一例では、第1の画素値及び第2の画素値に基づいて、サブブロックの第1の整数画素動きベクトル調整値及び第2の整数画素動きベクトル調整値、サブブロックの第1のサブ画素動きベクトル調整値及び第2のサブ画素動きベクトル調整値を確定することは、第1のオリジナル動きベクトル又は第2のオリジナル動きベクトルを中心動きベクトルとして確定することと、中心動きベクトルに対応するエッジ動きベクトルを確定することと、第1の画素値及び第2の画素値に基づいて、中心動きベクトルに対応する第1のコスト値及びエッジ動きベクトルに対応する第2のコスト値を取得することと、第1のコスト値及び第2のコスト値に基づいて、中心動きベクトル及びエッジ動きベクトルから1つの動きベクトルを選択して最適動きベクトルとし、終了条件が満たされるか否かを判断することと、終了条件が満たされない場合、最適動きベクトルを中心動きベクトルとして確定し、中心動きベクトルに対応するエッジ動きベクトルを確定することに戻ることと、満たされる場合、最適動きベクトルに基づいてサブブロックの第1の整数画素動きベクトル調整値及び第2の整数画素動きベクトル調整値を確定することと、最適動きベクトルに基づいてサブブロックの第1のサブ画素動きベクトル調整値及び第2のサブ画素動きベクトル調整値を確定することとを含んでよい。
【0070】
一例では,中心動きベクトルに対応するエッジ動きベクトルを確定することは、中心動きベクトル(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+right,y+down)のデフォルト値は(x-S,y-S)である。エッジ動きベクトル(x+S,y)のコスト値がエッジ動きベクトル(x-S,y)のコスト値より小さい場合、rightはSであり、エッジ動きベクトル(x,y+S)のコスト値がエッジ動きベクトル(x,y-S)のコスト値より小さい場合、downはSである。又は、エッジ動きベクトル(x+S,y)のコスト値がエッジ動きベクトル(x-S,y)のコスト値以下である場合、rightはSであり、エッジ動きベクトル(x,y+S)のコスト値がエッジ動きベクトル(x,y-S)のコスト値以下である場合、downはSである。
【0071】
一例では、第1の画素値及び第2の画素値に基づいて、中心動きベクトルに対応する第1のコスト値、エッジ動きベクトルに対応する第2のコスト値を取得することは、ダウンサンプリングされていない第1の画素値及びダウンサンプリングされていない第2の画素値に基づいて、中心動きベクトルに対応する第1のコスト値及びエッジ動きベクトルに対応する第2のコスト値を取得すること、又は、第1の画素値に対してダウンサンプリング操作を行い、第2の画素値に対してダウンサンプリング操作を行い、そして、ダウンサンプリングされた第1の画素値及びダウンサンプリングされた第2の画素値に基づいて、中心動きベクトルに対応する第1のコスト値及びエッジ動きベクトルに対応する第2のコスト値を取得すること、又は、第1の画素値に対してシフト及びダウンサンプリングを行い、第2の画素値に対してシフト及びダウンサンプリング操作を行い、そして、処理済みの第1の画素値及び処理された第2の画素値に基づいて、中心動きベクトルに対応する第1のコスト値及びエッジ動きベクトルに対応する第2のコスト値を取得することを含んでよいが、これらに限定されない。
【0072】
一例では、第1の画素値及び第2の画素値に基づいて、サブブロックの第1の整数画素動きベクトル調整値及び第2の整数画素動きベクトル調整値と、サブブロックの第1のサブ画素動きベクトル調整値及び第2のサブ画素動きベクトル調整値とを確定することは、第1のオリジナル動きベクトル又は第2のオリジナル動きベクトルを中心として、周囲の動きベクトルから一部又は全ての動きベクトルを選択し、選択された動きベクトルを候補動きベクトルとすることと、第1の画素値及び第2の画素値に基づいて、第1のオリジナル動きベクトル又は第2のオリジナル動きベクトルに対応する第3のコスト値と、候補動きベクトルに対応する第4のコスト値とを取得することと、第3のコスト値及び第4のコスト値に基づいて、最適動きベクトルとして、第1のオリジナル動きベクトル又は第2のオリジナル動きベクトルと、候補動きベクトルとの中から1つの動きベクトルを選択することと、最適動きベクトルに基づいて、サブブロックの第1の整数画素動きベクトル調整値及び第2の整数画素動きベクトル調整値を確定することと、最適動きベクトルに基づいて、サブブロックの第1のサブ画素動きベクトル調整値及び第2のサブ画素動きベクトル調整値を確定することとを含んでよい。
【0073】
最適動きベクトルに基づいて、サブブロックの第1の整数画素動きベクトル調整値及び第2の整数画素動きベクトル調整値を確定することは、当該最適動きベクトル及び第1のオリジナル動きベクトルに基づいて、サブブロックの第1の整数画素動きベクトル調整値を確定し、第1の整数画素動きベクトル調整値に基づいて、サブブロックの第2の整数画素動きベクトル調整値を確定することを含んでよいが、これらに限定されない。
【0074】
最適動きベクトルに基づいて、サブブロックの第1のサブ画素動きベクトル調整値及び第2のサブ画素動きベクトル調整値を確定することは、最適動きベクトルに対応するコスト値と、最適動きベクトルに対応するエッジ動きベクトルに対応するコスト値とに基づいて、サブブロックの第1のサブ画素動きベクトル調整値を確定し、第1のサブ画素動きベクトル調整値に基づいて、サブブロックの第2のサブ画素動きベクトル調整値を確定することを含む。
【0075】
ステップ203では、第1の目標動きベクトル及び第2の目標動きベクトルに基づいて、現在のブロックを符号化又は復号化する。例えば、符号化側の場合、符号化側は、第1の目標動きベクトル及び第2の目標動きベクトルに基づいて現在のブロックを符号化処理してよい、復号化側の場合、復号化側は、第1の目標動きベクトル及び第2の目標動きベクトルに基づいて現在のブロックを復号化処理してよい。
【0076】
一例では、現在のブロックの各サブブロックに対して、サブブロックの第1の目標動きベクトルに基づいて、サブブロックに対応する第3の参照ブロックを確定し、サブブロックの第2の目標動きベクトルに基づいて、サブブロックに対応する第4の参照ブロックを確定し、第3の参照ブロックの第3の画素値及び第4の参照ブロックの第4の画素値に基づいて重み付けを行い、サブブロックの予測値を得て、各サブブロックの予測値に基づいて現在のブロックの予測値を確定する。
【0077】
一例では、サブブロックの第1の目標動きベクトルに基づいて、サブブロックに対応する第3の参照ブロックを確定し、サブブロックの第2の目標動きベクトルに基づいて、サブブロックに対応する第4の参照ブロックを確定することは、以下の方式を含んでよい。
【0078】
方式1は、サブブロックの第1の目標動きベクトルに基づいて、第1の参照フレームからサブブロックに対応する第5の参照ブロックを確定し、第5の参照ブロックにおける画素値を補間し、第3の参照ブロックを得る。及び、サブブロックの第2の目標動きベクトルに基づいて、第2の参照フレームからサブブロックに対応する第6の参照ブロックを確定し、第6の参照ブロックにおける画素値を補間し、第4の参照ブロックを得る。
【0079】
方式2は、サブブロックの第1の目標動きベクトルに基づいて、第1の参照フレームからサブブロックに対応する第7の参照ブロックを確定し、第7の参照ブロックにおける画素値を利用して第8の参照ブロックを構築し、第8の参照ブロックにおける画素値を補間し、第3の参照ブロックを得て、サブブロックの第2の目標動きベクトルに基づいて、第2の参照フレームからサブブロックに対応する第9の参照ブロックを確定し、第9の参照ブロックにおける画素値を利用して第10の参照ブロックを構築し、第10の参照ブロックにおける画素値を補間し、第4の参照ブロックを得る。
【0080】
一例では、第1の目標動きベクトル及び第2の目標動きベクトルに基づいて現在のブロックを符号化又は復号化した後、現在のブロックに対して第1の目標動きベクトル及び第2の目標動きベクトルを格納してよい。このように、当該第1の目標動きベクトルと当該第2の目標動きベクトルは現在のフレームのループフィルタリングに用いられ、当該第1の目標動きベクトルと当該第2の目標動きベクトルは後続のフレームの時間領域の参照に用いられ、及び/又は、当該第1の目標動きベクトルと当該第2の目標動きベクトルは現在のフレームの空間領域の参照に用いられる。
【0081】
上記した技術案から分かるように、本願の実施例において、直接に第1のオリジナル動きベクトル及び第2のオリジナル動きベクトルに基づいて現在のブロックを符号化又は復号化するのではなく、第1のオリジナル動きベクトル及び第2のオリジナル動きベクトルに基づいて現在のブロックの第1の目標動きベクトル及び第2の目標動きベクトルを確定して、第1の目標動きベクトル及び第2の目標動きベクトルに基づいて現在のブロックを符号化又は復号化できるため、予測品質不良や、予測ミスなどの問題を解決しつつ、符号化性能及び符号化効率を向上させる。
【0082】
実施例2では、
図3が本願の実施例に係るコーデック方法のフローチャートであり、当該コーデック方法は符号化側に適用でき、当該コーデック方法は以下のステップを含んでよい。
【0083】
ステップ301では、符号化側は、現在のブロックの特徴情報が特定の条件を満たすか否かを判断する。特定の条件を満たす場合、ステップ302を実行し、特定の条件を満たさない場合、本願に係る動きベクトル調整方式を用いる必要がないため、その処理方式を限定しない。
【0084】
一例では、符号化側は、符号化済み情報に基づいて現在のブロックの特性情報が所定の条件を満たすか否かを判断してよい。現在のブロックの特徴情報が特定の条件を満たす場合、現在のブロックの動き情報が正確ではないことを示すため、動きベクトルリファインメントモードを有効にして、ステップ302を実行する。
【0085】
現在のブロックの特徴情報が特定の条件を満たさない場合、現在のブロックの動き情報が正確であることを示すため、動きベクトルリファインメントモードを有効にせず、本願に係る動きベクトル調整方式を用いる必要がない。
【0086】
一例では、現在のブロックの特徴情報は、現在のブロックに対応する動き情報予測モードと、現在のブロックに対応する動き情報属性と、現在のブロックのサイズ情報とのうちの1つ又は複数を含むが、これらに限定されない。
【0087】
現在のブロックの特徴情報が特定の条件を満たすか否かを判断する方式については、後述の実施例を参照する。
【0088】
ステップ302では、符号化側は、現在のブロックの第1のオリジナル動きベクトルに基づいて、第1の参照フレームから現在のブロックに対応する第1の参照ブロックを確定し、現在のブロックの第2のオリジナル動きベクトルに基づいて、第2の参照フレームから現在のブロックに対応する第2の参照ブロックを確定する。区別が容易になるために、第1の参照ブロックにおける各画素点の画素値を第1の画素値とし、第2の参照ブロックにおける各画素点の画素値を第2の画素値とする。
【0089】
一例では、現在のブロックが双方向予測のブロックである場合、現在のブロックには、2つの参照フレームおよび2つのオリジナル動きベクトルを含む双方向動き情報が存在する。例えば、符号化側は従来の方式で双方向動き情報を取得してよく、この取得方式を限定しない。当該双方向動き情報は、第1の参照フレームおよび第1のオリジナル動きベクトルと、第2の参照フレームおよび第2のオリジナル動きベクトルとを含む。
【0090】
符号化側は、第1のオリジナル動きベクトルに基づいて、第1の参照フレームから現在のブロックに対応する第1の参照ブロックを確定してよく、第1の参照ブロックにおける各画素点の画素値は第1の画素値とされる。
【0091】
符号化側は、第2のオリジナル動きベクトルに基づいて、第2の参照フレームから現在のブロックに対応する第2の参照ブロックを確定してよく、第2の参照ブロックにおける各画素点の画素値は第2の画素値とされる。
【0092】
一例では、現在のブロックが所在する現在のフレームと第1の参照フレームとの距離、及び第2の参照フレームと現在のブロックが所在する現在のフレームとの距離は同じであってよい。例えば、第1の参照フレームは第1のフレームであり、現在のフレームは第5のフレームであり、第2の参照フレームは第9のフレームである。勿論、上記は一例に過ぎず、両者の距離は異なってもよい。
【0093】
第1のオリジナル動きベクトルと第2のオリジナル動きベクトルとは、鏡像対称の関係にあってよく、例えば、第1のオリジナル動きベクトルが(4,4)であり、第2のオリジナル動きベクトルが(-4,-4)であり、第1のオリジナル動きベクトルは(2.5,3.5)であり、第2のオリジナル動きベクトルは(-2.5,-3.5)である。勿論、上記は一例に過ぎず、第1のオリジナル動きベクトルと第2のオリジナル動きベクトルとは鏡像対称の関係になくてもよい。
【0094】
第1の参照ブロック及び第2の参照ブロックを確定する方式については、後述の実施例を参照できる。
【0095】
ステップ303では、現在のブロックの各サブブロックに対して、符号化側は第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、第1のオリジナル動きベクトルを調整し、当該サブブロックの第1の目標動きベクトルを得る。符号化側は第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、第2のオリジナル動きベクトルを調整し、当該サブブロックの第2の目標動きベクトルを得る。
【0096】
一例では、現在のブロックに対して動きベクトルリファインメントモードを有効にする場合、符号化側は第1の画素値及び第2の画素値に基づいて、局所探索の方法により、第1のオリジナル動きベクトル及び第2のオリジナル動きベクトルを微調整することで、より良い第1の目標動きベクトル及び第2の目標動きベクトルを取得して、第1の目標動きベクトル及び第2の目標動きベクトルを利用して歪みがより少ない予測値を生成する。
【0097】
一例では、現在のブロックは少なくとも1つのサブブロックを含むことができ、1つのサブブロックのみを含む場合、そのサブブロックは現在のブロック自体である。当該サブブロックに対して、当該サブブロックは第1のオリジナル動きベクトル及び第2のオリジナル動きベクトルに対応し、調整を行った後、当該サブブロックは第1の目標動きベクトル及び第2の目標動きベクトルに対応する。
【0098】
現在のブロックがサブブロックA及びサブブロックBを含む場合、サブブロックAは、第1のオリジナル動きベクトルA1及び第2のオリジナル動きベクトルA2に対応し、調整を行った後、サブブロックAは第1の目標動きベクトルA3及び第2の目標動きベクトルA4に対応する。サブブロックBは、第1のオリジナル動きベクトルB1及び第2のオリジナル動きベクトルB2に対応し、調整を行った後、サブブロックBは第1の目標動きベクトルB3及び第2の目標動きベクトルB4に対応する。
【0099】
サブブロックAに対応する第1のオリジナル動きベクトルA1とサブブロックBに対応する第1のオリジナル動きベクトルB1とは、いずれも現在のブロックの第1のオリジナル動きベクトルであるように、同じであってよい。サブブロックAに対応する第2のオリジナル動きベクトルA2とサブブロックBに対応する第2のオリジナル動きベクトルB2とは、いずれも現在のブロックの第2のオリジナル動きベクトルであるように、同じであってよい。
【0100】
各サブブロックの第1のオリジナル動きベクトルに対してそれぞれに調整を行うため、サブブロックAに対応する第1の目標動きベクトルA3とサブブロックBに対応する第1の目標動きベクトルB3とは、同じであっても、異なってもよい。各サブブロックの第2のオリジナル動きベクトルに対してそれぞれに調整を行うため、サブブロックAに対応する第2の目標動きベクトルA4とサブブロックBに対応する第2の目標動きベクトルB4は、同じであっても、異なってもよい。
【0101】
オリジナル動きベクトルに対する調整方式は、後述の実施例を参照できるため、ここでの説明を省略する。
【0102】
ステップ304では、符号化側は、第1の目標動きベクトル及び第2の目標動きベクトルに基づいて、現在のブロックの各サブブロックに対して動き補償を行う。例えば、現在のブロックがサブブロックAとサブブロックBとを含む場合、サブブロックAに対して、サブブロックAの第1の目標動きベクトル及び第2の目標動きベクトルを用いて動き補償を行い、サブブロックBに対して、サブブロックBの第1の目標動きベクトル及び第2目標動きベクトルを用いて動き補償を行ってよい。
【0103】
動き補償の方式については、後述の実施例を参照できるため、ここでの説明を省略する。
【0104】
ステップ305では、符号化側は、現在のブロックの各サブブロックの第1の目標動きベクトル及び第2の目標動きベクトルを保存し、第1の目標動きベクトル及び第2の目標動きベクトルは後続のブロックの符号化の参照に用いられる。
【0105】
符号化の参照の実現方式については、後述の実施例を参照できるため、ここでの説明を省略する。
【0106】
実施例3では、
図4が本願の実施例に係るコーデック方法のフローチャートであり、当該コーデック方法は復号化側に適用でき、当該コーデック方法は以下のステップを含んでよい。
【0107】
ステップ401では、復号化側は、現在のブロックの特徴情報が特定の条件を満たすか否かを判断する。特定の条件を満たす場合、ステップ402を実行し、特定の条件を満たさない場合、本願が提供する動きベクトル調整方式を用いる必要がなく、その処理方式を限定しない。
【0108】
一例では、復号化側は、符号化側から伝送された符号化ビットストリームを受信し、復号化ずみ情報に基づいて現在のブロックの特性情報が特定条件を満たすか否かを判断できる。現在のブロックの特徴情報が特定の条件を満たす場合、現在のブロックの動き情報が正確ではないことを示すため、動きベクトルリファインメントモードを有効にして、ステップ402を実行する。現在のブロックの特徴情報が特定の条件を満たさない場合、現在のブロックの動き情報が正確であることを示すため、動きベクトルリファインメントモードを有効にせず、本願に係る動きベクトル調整方式を用いる必要がない。
【0109】
ステップ402では、復号化側は、現在のブロックの第1のオリジナル動きベクトルに基づいて、第1の参照フレームから現在のブロックに対応する第1の参照ブロックを確定し、現在のブロックの第2のオリジナル動きベクトルに基づいて、第2の参照フレームから現在のブロックに対応する第2の参照ブロックを確定する。区別が容易になるために、第1の参照ブロックにおける各画素点の画素値を第1の画素値とし、第2の参照ブロックにおける各画素点の画素値を第2の画素値とする。
【0110】
ステップ403では、現在のブロックの各サブブロックに対して、復号化側は、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、第1のオリジナル動きベクトルを調整し、当該サブブロックの第1の目標動きベクトルを得る。復号化側は、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、第2のオリジナル動きベクトルを調整し、当該サブブロックの第2の目標動きベクトルを得る。
【0111】
ステップ404では、現在のブロックの各サブブロックに対して、復号化側は、当該サブブロックの第1の目標動きベクトル及び当該サブブロックの第2の目標動きベクトルに基づいて、当該サブブロックに対して動き補償を行う。
【0112】
ステップ405では、復号化側は、現在のブロックの各サブブロックの第1の目標動きベクトル及び第2の目標動きベクトルを保存し、第1の目標動きベクトル及び第2の目標動きベクトルは後続のブロックの復号化の参照に用いられる。
【0113】
実施例4では、ステップ301及びステップ401は、現在のブロックの特徴情報が特定の条件を満たすか否かを判断することに関する。本実施例において、特徴情報が以下の全ての条件を満たす場合、現在のブロックの特徴情報が特定の条件を満たすことを確定し、動きベクトルリファインメントモードを有効にする。満たさない場合、動きベクトルリファインメントモードを有効にしない。
【0114】
現在のブロックに対応する動き情報属性は、現在のブロックは周囲ブロックの動き情報を直接に利用し、動き情報の差分値を符号化しないことを含む。現在のブロックに対応する動き情報属性は、現在のブロックの各サブブロックの動き情報が同じであり、即ちサブブロック動き情報予測モードは不要であることを含む。現在のブロックに対応する動き情報属性は、現在のブロックの動き情報は2つの異なる方向の動き情報を含むことを含む。現在のブロックのサイズ情報は、現在のブロックのサイズが限定範囲内であることを含む。このサイズが限定範囲内であることについては、後続の実施例で説明する。
【0115】
実施例5では、ステップ301及びステップ401は、現在のブロックの特徴情報が特定の条件を満たすか否かを判断することに関する。本実施例において、特徴情報が以下の全ての条件を満たす場合、現在のブロックの特徴情報が特定の条件を満たすことを確定し、動きベクトルリファインメントモードを有効にする。満たさない場合、動きベクトルリファインメントモードを有効にしない。
【0116】
現在のブロックに対応する動き情報予測モードは、Normal Mergeモード(即ち、通常マージモード)又はCIIPモード(即ち、インター予測子とイントラ予測子とを統合して新たな予測子を生成するためのマージモード)を使用する。又は、現在のブロックに対応する動き情報予測モードは、MMVDモード(即ち、動き情報の差分値を符号化するためのマージモード)、SB Mergeモード(即ち、サブブロック動き情報を使用するマージモード)、又はTPMモード(即ち、3角予測のためのマージモード)を使用しない。
【0117】
現在のブロックに対応する動き情報属性は、現在のブロックの動き情報は2つの異なる方向の動き情報を含み、2つの異なる方向の動き情報に対応する2つの参照フレームが、現在のフレームとの距離は同じであることを含む。現在のブロックのサイズ情報は、現在のブロックのサイズが限定範囲内であることを含む。
【0118】
なお、マージモード(即ち、Mergeモード)は、通常マージモード(Normal
Mergeモードと呼ばれる)、3角予測のためのマージモード(TPMモードと呼ばれる)、動き情報の差分値を符号化するためのマージモード(MMVDモードと呼ばれる)、サブブロック動き情報を使用するマージモード(SB Mergeモードと呼ばれる)、及び、インター予測子とイントラ予測子を統合して新たな予測子を生成するためのマージモード(CIIPモードと呼ばれる)を含むが、これらの類型のマージモードに限定
されない。
【0119】
一例では、Normal Mergeモードは、残差を符号化しない通常マージモード(即ち、skipモード)と、残差を符号化する通常マージモードとを含む。MMVDモードは、残差を符号化しないMMVDモードを含む。
【0120】
実施例6では、ステップ301及びステップ401は、現在のブロックの特徴情報が特定の条件を満たすか否かを判断することに関する。本実施例において、特徴情報が以下の全ての条件を満たす場合、現在のブロックの特徴情報が特定の条件を満たすことを確定し、動きベクトルリファインメントモードを有効にする。満たさない場合、動きベクトルリファインメントモードを有効にしない。
【0121】
現在のブロックに対応する動き情報予測モードは、Normal Mergeモード(即ち、通常マージモード)、CIIPモード(即ち、インター予測子とイントラ予測子とを統合して新たな予測子を生成するためのマージモード)、又はTPMモード(即ち、3角予測のためのマージモード)を用いる。又は、現在のブロックに対応する動き情報予測モードは、MMVDモード(即ち、動き情報の差分値を符号化するためのマージモード)又はSB Mergeモード(即ち、サブブロック動き情報を使用するマージモード)を用いない。
【0122】
現在のブロックに対応する動き情報属性は、現在のブロックの動き情報は2つの異なる方向の動き情報を含み、2つの異なる方向の動き情報に対応する2つの参照フレームが、現在のフレームとの距離は同じであることを含む。現在のブロックのサイズ情報は、現在のブロックのサイズが限定範囲内であることを含む。
【0123】
実施例7では、ステップ301及びステップ401は、現在のブロックの特徴情報が特定の条件を満たすか否かを判断することに関する。本実施例において、特徴情報が以下の全ての条件を満たす場合、現在のブロックの特徴情報が特定の条件を満たすことを確定し、動きベクトルリファインメントモードを有効にする。満たさない場合、動きベクトルリファインメントモードを有効にしない。
【0124】
現在のブロックに対応する動き情報予測モードは、Normal Mergeモード(即ち、通常マージモード)、CIIPモード(即ち、インター予測子とイントラ予測子とを統合して新たな予測子を生成するためのマージモード)、TPMモード(即ち、3角予測のためのマージモード)を用いる。又は、現在のブロックに対応する動き情報予測モードは、MMVDモード(即ち、動き情報の差分値を符号化するためのマージモード)又はSB Mergeモード(即ち、サブブロック動き情報を使用するマージモード)を用いない。
【0125】
現在のブロックに対応する動き情報属性は、現在のブロックの動き情報は2つの異なる方向の動き情報を含み、2つの異なる方向の動き情報に対応する2つの参照フレームが、現在のフレームとの距離は同じであることを含む。現在のブロックのサイズ情報は、現在のブロックのサイズが限定範囲内であることを含む。
【0126】
実施例8では、ステップ301及びステップ401は、現在のブロックの特徴情報が特定の条件を満たすか否かを判断することに関する。本実施例において、特徴情報が以下の全ての条件を満たす場合、現在のブロックの特徴情報が特定の条件を満たすことを確定し、動きベクトルリファインメントモードを有効にする。満たさない場合、動きベクトルリファインメントモードを有効にしない。
【0127】
現在のブロックに対応する動き情報予測モードは、Normal Mergeモード又はCIIPモードを用い、現在のブロックに対応する動き情報予測モードは、MMVDモード、SB Mergeモード、又はTPMモードを用いない。又は、現在のブロックに対応する動き情報予測モードはNormal Mergeモード、CIIPモード、又はTPMモードを用い、現在のブロックに対応する動き情報予測モードは、MMVDモード、又はSB Mergeモードを用いない。又は、現在のブロックに対応する動き情報予測モードはNormal Mergeモード、CIIPモード、TPMモード、又はMMVDモードを用い、現在のブロックに対応する動き情報予測モードはSB Mergeモードを用いない。
【0128】
現在のブロックに対応する動き情報属性は、現在のブロックの動き情報は2つの異なる方向の動き情報を含み、2つの異なる方向の動き情報に対応する2つの参照フレームが、現在のフレームとの距離が同じであることを制限する必要がないこと、即ち、この制限条件を除去することを含む。現在のブロックのサイズ情報は、現在のブロックのサイズが限定範囲内であることを含む。
【0129】
実施例9では、上記実施例4~実施例8における「現在のブロックのサイズが限定範囲内である」については、現在のブロックのサイズが以下の条件を満たす場合、現在のブロックのサイズが限定範囲内であることを確定する。
【0130】
現在のブロックの幅は[第1の閾値,第2の閾値]の範囲内であり、第1の閾値は4であってよく、第2の閾値は128であってよい。現在のブロックの高さは[第3の閾値,第4の閾値]の範囲内であり、第3の閾値は8であってよく、第4の閾値は128であってよい。例示的に、第1の閾値、第2の閾値、第3の閾値、第4の閾値は、いずれも2のn乗であってよく、nは1以上の整数である。現在のブロックの面積は[第5の閾値,第6の閾値]の範囲内であり、第5の閾値は64であってよく、第6の閾値は128*128=16384であってよい。例示的に、第5の閾値、第6の閾値は、いずれも4のm乗であってよく、mは1以上の整数である。上記の例において、[a,b]は、a以上b以下を表すことができる。
【0131】
実施例10では、ステップ302及びステップ402は、第1のオリジナル動きベクトルに基づいて、第1の参照フレームから現在のブロックに対応する第1の参照ブロックを確定し、第1の参照ブロックにおける各画素点の画素値は第1の画素値とされ、第2のオリジナル動きベクトルに基づいて、第2の参照フレームから現在のブロックに対応する第2の参照ブロックを確定し、第2の参照ブロックにおける各画素点の画素値は第2の画素値とされる。これについては以下に説明する。
【0132】
第1の参照ブロックにおける各画素点の第1の画素値は、第1の参照ブロックにおける隣接する画素点の画素値を補間することにより得られ、又は、第1の参照ブロックにおける隣接する画素点の画素値をコピーすることにより得られるものである。第2の参照ブロックにおける各画素点の第2の画素値は、第2の参照ブロックにおける隣接する画素点の画素値を補間することにより得られ、又は、第2の参照ブロックにおける隣接する画素点の画素値をコピーすることにより得られるものである。第1の参照ブロックのサイズは、第2の参照ブロックのサイズと同じであり、第1の参照ブロック/第2の参照ブロックの幅値は、現在のブロックの幅値及び探索範囲に基づいて確定され、第1の参照ブロック/第2の参照ブロックの高さ値は、現在のブロックの高さ値及び探索範囲に基づいて確定される。
【0133】
図5に示すように、仮に現在のブロックの幅がWであり、高さがHであると、第1のオリジナル動きベクトルをMV0とし、第2のオリジナル動きベクトルをMV1とする。第1のオリジナル動きベクトルMV0の第1の参照フレームにおける対応位置から、面積が(W+FS-1)*(H+FS-1)の整数画素ブロックを得て、この整数画素ブロックを整数画素ブロックAとする。第2のオリジナル動きベクトルMV1の第2の参照フレームにおける対応位置から、面積が(W+FS-1)*(H+FS-1)である整数画素ブロックを得て、この整数画素ブロックを整数画素ブロックBとする。
【0134】
一例では、面積が(W+FS-1)*(H+FS-1)である整数画素ブロックAに基づいて、バイリニア補間でサイズが(W+2*SR)*(H+2*SR)である初期参照画素ブロックを取得してよく、この初期参照画素ブロックを第1の参照ブロックとしてよい。面積が(W+FS-1)*(H+FS-1)である整数画素ブロックBに基づいて、バイリニア補間でサイズが(W+2*SR)*(H+2*SR)である初期参照画素ブロックを取得してよく、この初期参照画素ブロックを第2の参照ブロックとしてよい。
【0135】
別の例では、面積が(W+FS-1)*(H+FS-1)の整数画素ブロックAに基づいて、直接にコピーする(補間不要)ことで、サイズが(W+2*SR)*(H+2*SR)の初期参照画素ブロックを取得し、この初期参照画素ブロックを第1の参照ブロックとする。面積が(W+FS-1)*(H+FS-1)である整数画素ブロックBに基づいて、直接にコピーすることで、サイズが(W+2*SR)*(H+2*SR)である初期参照画素ブロックを取得でき、この初期参照画素ブロックを第2の参照ブロックとする。
【0136】
例示的に、輝度成分のみ(複雑度を低減するために、以下、輝度成分のみを使用してコスト値を計算する)に対して、面積が(W+FS-1)*(H+FS-1)である整数画素ブロック(例えば、整数画素ブロックA及び整数画素ブロックB)に基づいて、サイズが(W+2*SR)*(H+2*SR)である初期参照画素ブロック、即ち第1の参照ブロック(例えば、Pred_Inter0)及び第2の参照ブロック(例えば、Pred_Inter1)を取得してよい。
【0137】
一例では、FSは補間フィルタのタップ数であってよく、例えば8などであってよい。
【0138】
バイリニア補間で第1の参照ブロック/第2の参照ブロックを取得することとは、第1の参照ブロック/第2の参照ブロックにおける各画素点の画素値は、第1の参照ブロック/第2の参照ブロックにおける隣接する画素点の画素値を補間することで取得されるものであることを意味するが、これに対しては限定しない。コピーすることで第1の参照ブロック/第2の参照ブロックを取得することとは、第1の参照ブロック/第2の参照ブロックにおける各画素点の画素値は、第1の参照ブロック/第2の参照ブロックにおける隣接する画素点の画素値をコピーすることで取得されるものであることを意味するが、これに対して限定しない。
【0139】
上記実施例を参照し、第1の参照ブロックの面積は(W+2*SR)*(H+2*SR)であり、第2の参照ブロックの面積は(W+2*SR)*(H+2*SR)であり、即ち、第1の参照ブロック/第2の参照ブロックの幅値はW+2*SRであり、第1の参照ブロック/第2の参照ブロックの高さ値はH+2*SRである。Wは現在のブロックの幅であり、Hは現在のブロックの高さであり、SRは探索範囲であり、即ち、後述の実施例の反復回数である。即ち、SRは、目標動きベクトルとオリジナル動きベクトルとの最大水平/垂直成分の補間であり、例えばSRは2などであってよい。
【0140】
第1の参照ブロック及び第2の参照ブロックについては、後続処理における動きベクトル調整に用いられる。
【0141】
実施例11では、ステップ303及びステップ403は、現在のブロックの各サブブロックに対して、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、第1のオリジナル動きベクトルを調整し、サブブロックの第1の目標動きベクトルを得て、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、第2のオリジナル動きベクトルを調整し、サブブロックの第2の目標動きベクトルを得る。
【0142】
1つのサブブロック(現在のブロックにおけるサイズがdx*dyである各サブブロックのような、例えばサイズが16*16であるサブブロック、又はそれよりの小さい1つの整数ブロック)に対する処理を例として、オリジナル動きベクトルの調整処理を説明する。
【0143】
ステップa1では、第1のオリジナル動きベクトル又は第2のオリジナル動きベクトルを中心動きベクトルとして確定する。
【0144】
例えば、第1のオリジナル動きベクトルを(4,4)、第2のオリジナル動きベクトルを(-4,-4)と仮定する場合、第1のオリジナル動きベクトル(4,4)又は第2のオリジナル動きベクトル(-4,-4)を中心動きベクトルとして確定できる。説明の便宜上、第1のオリジナル動きベクトル(4,4)を中心動きベクトルとして確定することを例として説明する。第2のオリジナル動きベクトル(-4,-4)を中心動きベクトルとして確定する流れも同様である。
【0145】
ステップa2では、中心動きベクトルに対応するエッジ動きベクトルを確定する。
【0146】
例えば、中心動きベクトル(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の確定方式は、後続の実施例を参照する。
【0147】
図6に示すように、中心動きベクトル(x,y)を中心とし、即ち中心動きベクトルは(0,0)である。Sが1であり、right及びdownがいずれも1であることを例として、中心動きベクトル(0,0)に対応するエッジ動きベクトルは、エッジ動きベクトル(0,1)と、エッジ動きベクトル(0,-1)と、エッジ動きベクトル(1,0)と、エッジ動きベクトル(-1,0)と、エッジ動きベクトル(1,1)とを含む。
【0148】
ステップa3では、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、中心動きベクトルに対応する第1のコスト値と、各エッジ動きベクトルに対応する第2のコスト値とを取得する。
【0149】
例えば、中心動きベクトル(0,0)に対応するサブ参照ブロックA1は、第1の参照ブロックからコピーによって取得されるものであり、第1の参照ブロックにおける中心動きベクトル(0,0)のサブ参照ブロックである。サブ参照ブロックA1のサイズは、現在のブロックのサイズであり、サブ参照ブロックA1は、第1の参照ブロックの中で最も中心に位置するW*Hのブロックである。
【0150】
中心動きベクトル(0,0)に対応するサブ参照ブロックB1は、第2の参照ブロックからコピーによって取得されるものであり、第2の参照ブロックにおける中心動きベクトル(0,0)のサブ参照ブロックである。サブ参照ブロックB1のサイズは、現在のブロックのサイズであり、サブ参照ブロックB1は、第2の参照ブロックにおける最も中央に位置するW*Hのブロックである。
【0151】
そして、サブ参照ブロックA1の第1の画素値及びサブ参照ブロックB1の第2の画素値を利用し、中心動きベクトル(0、0)に対応するコスト値1を取得し、コスト値の確定方式は後続の実施例を参照する。
【0152】
エッジ動きベクトル(0,1)に対応するサブ参照ブロックA2は、第1の参照ブロックからコピーによって取得されるものであり、第1の参照ブロックにおけるエッジ動きベクトル(0,1)のサブ参照ブロックである。サブ参照ブロックA2のサイズは、現在のブロックのサイズであり、サブ参照ブロックA2は、第1の参照ブロックにおけるW*Hのブロックである。
【0153】
エッジ動きベクトル(0,1)の対称動きベクトル(0,-1)に対応するサブ参照ブロックB2は、第2の参照ブロックからコピーによって取得されるものであり、第2の参照ブロックにおける対称動きベクトル(0,-1)のサブ参照ブロックである。サブ参照ブロックB2のサイズは、現在のブロックのサイズであり、第2の参照ブロックにおけるW*Hのブロックである。
【0154】
そして、サブ参照ブロックA2の第1の画素値及びサブ参照ブロックB2の第2の画素値を利用し、エッジ動きベクトル(0,1)に対応するコスト値2を取得し、コスト値の確定方式は後続の実施例を参照する。
【0155】
エッジ動きベクトル(0,1)に対応するコスト値2の確定方式に基づいて、エッジ動きベクトル(0,-1)に対応するコスト値3と、エッジ動きベクトル(1,0)に対応するコスト値4と、エッジ動きベクトル(-1,0)に対応するコスト値5と、エッジ動きベクトル(1,1)に対応するコスト値6とを確定できる。
【0156】
ステップa4では、第1のコスト値及び第2のコスト値に基づいて、最適動きベクトルとして、中心動きベクトル及びエッジ動きベクトルから1つの動きベクトルを選択する。例えば、コスト値が最も小さい動きベクトルを最適動きベクトルとしてよい。例えば、仮に、エッジ動きベクトル(0,1)に対応するコスト値2が最小である場合、コスト値2に対応するエッジ動きベクトル(0,1)を最適動きベクトルとしてよい。
【0157】
ステップa5では、終了条件を満たすか否かを判断する。終了条件を満たさない場合、最適動きベクトルを中心動きベクトルとして確定し、ステップa2に戻る。終了条件を満たす場合、ステップa6を実行してよい。
【0158】
一例では、反復回数/探索範囲が閾値に達すると終了条件が満たされ、反復回数/探索範囲が閾値に達しないと終了条件が満たされない。例えば、仮に、SRが2である、即ち閾値が2である場合、2回の反復が許容される。反復回数/探索範囲が2回に達した、即ちステップa2~ステップa4が2回実行された場合、終了条件は満たされる。それ以外の場合、終了条件は満たされない。
【0159】
別の例では、中心動きベクトルとエッジ動きベクトルから1つの動きベクトルを選択して最適動きベクトルとした後、最適動きベクトルとして、中心動きベクトルが選択された場合、終了条件が満たされる。
【0160】
ステップa6では、最適動きベクトルに基づいて第1の整数画素動きベクトル調整値(第1のオリジナル動きベクトルを調整することに用いられる)及び第2の整数画素動きベクトル調整値(第2のオリジナル動きベクトルを調整することに用いられる)を確定する
。
【0161】
一例では、最適動きベクトルと第1のオリジナル動きベクトルとに基づいて第1の整数画素動きベクトル調整値を確定し、第1の整数画素動きベクトル調整値に基づいて第2の整数画素動きベクトル調整値を確定し、第2の整数画素動きベクトル調整値と第1の整数画素動きベクトル調整値とは対称する。
【0162】
例えば、1回目の反復では、最適動きベクトルはエッジ動きベクトル(0,1)であり、エッジ動きベクトル(0,1)を中心として2回目の反復を行い、2回目の反復では、最適動きベクトルはエッジ動きベクトル(0,1)である。仮に、これで反復処理が完了した場合、第1の整数画素動きベクトル調整値は(0,2)であり、即ちエッジ動きベクトル(0,1)とエッジ動きベクトル(0,1)との和である。
【0163】
これにより、仮に、第1のオリジナル動きベクトルが(4,4)である場合、1回目の反復では、最適動きベクトルがエッジ動きベクトル(0,1)であり、即ち、最適動きベクトルが最適動きベクトル(4,5)に対応できる。エッジ動きベクトル(0,1)を中心として2回目の反復を行い、2回目の反復では、最適動きベクトルがエッジ動きベクトル(0,1)であり、即ち最適動きベクトルが最適動きベクトル(4,6)に対応できる。
【0164】
以上をまとめると、最適動きベクトル(4,6)及び第1のオリジナル動きベクトル(4,4)に基づいて第1の整数画素動きベクトル調整値を確定し、第1の整数画素動きベクトル調整値は最適動きベクトル(4,6)と第1のオリジナル動きベクトル(4,4)との差であり、即ち第1の整数画素動きベクトル調整値は(0,2)である。
【0165】
そして、第1の整数画素動きベクトル調整値(0,2)に基づいて第2の整数画素動きベクトル調整値を確定し、第2の整数画素動きベクトル調整値は(0,-2)であってよく、即ち(0,2)の反数であってよい。
【0166】
ステップa7では、最適動きベクトルに基づいて第1のサブ画素動きベクトル調整値(第1のオリジナル動きベクトルを調整することに用いられる)及び第2のサブ画素動きベクトル調整値(第2のオリジナル動きベクトルを調整することに用いられる)を確定する。
【0167】
一例では、最適動きベクトルに対応するコスト値、最適動きベクトルに対応するエッジ動きベクトルに対応するコスト値に基づいて、第1のサブ画素動きベクトル調整値を確定し、そして、前記第1のサブ画素動きベクトル調整値に基づいて第2のサブ画素動きベクトル調整値を確定する。
【0168】
例えば、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)となる。
【0169】
上記の式において、SPMVは第1のサブ画素動きベクトル調整値であり、Nは動きベクトル画素精度に関連し、例えば、動きベクトル画素精度が1/2でNが1であり、動きベクトル画素精度が1/4でNが2であり、動きベクトル画素精度が1/8でNが4であり、動きベクトル画素精度が1/16でNが8である。
【0170】
上記の式において、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)のコスト値である。各動きベクトルのコスト値に対して、その確定方式は上記実施例を参照できるため、ここでの説明を省略する。
【0171】
上記方式で第1のサブ画素動きベクトル調整値を確定した後、第1のサブ画素動きベクトル調整値に基づいて第2のサブ画素動きベクトル調整値を確定できる。第2のサブ画素動きベクトル調整値は第1のサブ画素動きベクトル調整値の反数である。例えば、第1のサブ画素動きベクトル調整値が(1,0)である場合、第2のサブ画素動きベクトル調整値は(-1,0)であり、即ち(1,0)の反数である。
【0172】
ステップa8では、第1の整数画素動きベクトル調整値及び/又は第1のサブ画素動きベクトル調整値に基づいて、第1のオリジナル動きベクトルを調整し、第1の目標動きベクトルを得る。
【0173】
例えば、第1の目標動きベクトル=第1のオリジナル動きベクトル+第1の整数画素動きベクトル調整値+第1のサブ画素動きベクトル調整値である。勿論、上記は例示に過ぎず、これに対して限定しない。
【0174】
ステップa9では、第2の整数画素動きベクトル調整値及び/又は第2のサブ画素動きベクトル調整値に基づいて、第2のオリジナル動きベクトルを調整し、第2の目標動きベクトルを得る。
【0175】
例えば、第2の目標動きベクトル=第2のオリジナル動きベクトル+第2の整数画素動きベクトル調整値+第2のサブ画素動きベクトル調整値である。勿論、上記は例示に過ぎず、これに対して限定しない。
【0176】
実施例12では、ステップ303及びステップ403は、現在のブロックの各サブブロックに対して、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、第1のオリジナル動きベクトルを調整し、サブブロックの第1の目標動きベクトルを得て、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、第2のオリジナル動きベクトルを調整し、サブブロックの第2の目標動きベクトルを得る。
【0177】
1つのサブブロック(現在のブロックにおけるサイズがdx*dyである各サブブロックのような、例えばサイズが16*16であるサブブロック、又はそれより小さいブロック)の処理を例として、オリジナル動きベクトルの調整処理を説明する。第1のオリジナル動きベクトルをOrg_MV0とし、第2のオリジナル動きベクトルをOrg_MV1とし、第1のオリジナル動きベクトルOrg_MV0を調整した後、得られた第1の目標動きベクトルをRefined_MV0とし、第2のオリジナル動きベクトルOrg_MV1を調整した後、得られた第2の目標動きベクトルをRefined_MV1とする。
【0178】
ステップb1では、SR回の反復を行い、最適な整数画素MV点の整数画素オフセットを取得し、IntegerDeltaMVとし。IntegerDeltaMVは上記実施例における第1の整数画素動きベクトル調整値である。例えば、まずIntegerDeltaMVを(0,0)に初期化し、毎回の反復で以下の処理を実行する。
【0179】
ステップb11では、deltaMVを(0,0)に設定する。初回の反復の場合、第1の参照ブロックにおける第1のオリジナル動きベクトルの参照画素に基づいて、予測値ブロックA1(即ち、第1の参照ブロックの最も中心にあるW*Hのブロック)をコピーによって取得し、第2の参照ブロックにおける第2のオリジナル動きベクトルの参照画素に基づいて、予測値ブロックB1(即ち、第2の参照ブロックの最も中心にあるW*Hのブロック)をコピーによって取得する。予測値ブロックA1及び予測値ブロックB1に基づいて、初期コスト値cost(初期コスト値は予測値ブロックA1及び予測値ブロックB1に基づくSAD(差分絶対値和、sum of absolute distortion)であり、確定方式は後続の実施例を参照する)を取得する。当該初期コスト値costが4*dx*dy/2より小さい場合、dx及びdyは現在のサブブロックの幅及び高さであり、後続の探索処理を直接にスキップし、ステップb2を実行し、notZeroCostをfalseに設定する。
【0180】
ステップb12では、
図6に示すように、上記初期点を中心として、{Mv(0,1),Mv(0,-1),Mv(1,0),Mv(-1,0),Mv(right,down)}の5つのオフセットMV(これら5つのオフセットMVはいずれもMVOffsetとされる)を順次得て、これら5つのオフセットMVのコスト値の計算及び比較処理を行う。
【0181】
例えば、あるMVOffset(例えば、Mv(0,1)など)に基づいて、第1の参照ブロックと第2の参照ブロックにおいて、このMVOffsetにより2つの予測値ブロック(例えば、第1の参照ブロックにおいて中心位置のオフセットがMVOffsetであるW*Hのブロック、第2の参照ブロックにおいて中心位置のオフセットが-MVOffset(MVOffsetとは逆)であるW*Hのブロック)を取得し、2つの予測値ブロックのダウンサンプリングSADを計算してMVOffsetのコスト値とする。
【0182】
そして、最小コスト値を有するMVOffsetを保留し、最小コスト値を有するMVOffsetをdeltaMVの値に更新し、最小コスト値を有するMVOffsetを次回の反復の新しい中心オフセット点とする。
【0183】
deltaMVに基づいてIntegerDeltaMVの値を更新し、更新後のIntegerDeltaMV=更新前のIntegerDeltaMV+deltaMVであり、即ち現在のIntegerDeltaMVの上にdeltaMVを加える。
【0184】
ステップb13では、反復を行った後、最適MVが依然として初期MV(即ちMVOffsetではない)であるか又は最小コスト値が0である場合、次回の反復探索処理を行わず、ステップb2を実行し、notZeroCostをfalseに設定する。それ以外の場合、反復回数がSRに達すると、ステップb2を実行し、反復回数がSRに達しないと、最適MVを中心として、次回の反復探索処理を行い、即ちステップb11に戻る。
【0185】
反復探索処理が終了した後、IntegerDeltaMVの値、即ちIntegerDeltaMVの最終値、即ち第1の整数画素の動きベクトル調整値が得られ、以下、IntegerDeltaMVとされる。
【0186】
ステップb2では、ステップb1の最適整数画素MV点を中心として、最適サブ画素オフセットMVを取得し、SPMVとする。SPMVは、上記実施例における第1のサブ画素動きベクトル調整値である。例えば、SPMVを(0,0)に初期化してから、以下の
処理を実行してよい。
【0187】
ステップb21では、notZeroCostがfalseでなく、且つdeltaMVが(0、0)である場合のみ、後続処理を行う(即ち、SPMVを取得する必要がある)。それ以外の場合、IntegerDeltaMV及びSPMVを利用してオリジナル動きベクトルを調整するのではなく、IntegerDeltaMVを直接に利用してオリジナル動きベクトルを調整する。
【0188】
ステップ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))である。
【0189】
一例では、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)である。
【0190】
E(-1,0)=E(0,0)である場合、水平に左へ半画素分シフトする(deltaMv[0]=-N)。
E(1,0)=E(0,0)である場合、水平に右へ半画素分シフトする(deltaMv[0]=N)。
E(0,-1)=E(0,0)である場合、垂直に上へ半画素分シフトする(deltaMv[1]=-N)。
E(0,1)=E(0,0)である場合、垂直に下へ半画素分シフトする(deltaMv[1]=N)。
【0191】
以上の処理により、SPMVの値、即ち第1のサブ画素動きベクトル調整値を得ることができる。
【0192】
ステップb3では、ステップb1の整数画素オフセットIntegerDeltaMV及びステップb2のサブ画素オフセットSPMVに基づいて、最適オフセットMVを取得する。この最適オフセットMVをBestMVoffsetとしてよい。なお、BestMVoffset=IntegerDeltaMV+SPMVである。
【0193】
BestMVoffsetに基づいて2つの方向の目標動きベクトルを取得できる。ここで、Refined_MV0=Org_MV0+BestMVoffset、Refined_MV1=Org_MV1-BestMVoffsetである。
【0194】
明らかに、BestMVoffset=IntegerDeltaMV+SPMVであり、即ち、BestMVoffsetは第1の整数画素の動きベクトル調整値と第1のサブ画素の動きベクトル調整値との和である。また、-IntegerDeltaMVは、IntegerDeltaMVの反数、即ち第2の整数画素動きベクトル調整値であり、-SPMVは、SPMVの反数、即ち第2のサブ画素動きベクトル調整値である。そのため、-BestMVoffset=(-IntegerDeltaMV)+(-SPMV)であり、即ち、-BestMVoffsetは第2の整数画素動きベクトル調整値と第2のサブ画素動きベクトル調整値との和である。
【0195】
実施例13では、ステップ303及びステップ403に対して、第1のオリジナル動きベクトルOrg_MV0及び第2のオリジナル動きベクトルOrg_MV1を第1の目標動きベクトルRefined_MV0及び第2の目標動きベクトルRefined_MV1に調整するため実現方式は、実施例12と類似するが、異なる点は以下のとおりである。
【0196】
ステップb11における「当該初期コスト値costが4*dx*dy/2より小さい場合、後続の探索処理を直接にスキップする」ことを取り除き、即ち、初期コスト値costが4*dx*dy/2より小さい場合、「後続の探索処理を直接にスキップする」ことなく、後続の探索処理を継続し、即ちステップb12を実行する必要がある。
【0197】
実施例14では、ステップ303及びステップ403に対して、第1のオリジナル動きベクトルOrg_MV0及び第2のオリジナル動きベクトルOrg_MV1を第1の目標動きベクトルRefined_MV0及び第2の目標動きベクトルRefined_MV1に調整するために、実現方式は実施例12と類似するが、異なる点は以下のとおりである。
ステップb11における「当該初期コスト値costが4*dx*dy/2より小さい場合、後続の探索処理を直接にスキップする」ことを取り除き、即ち、初期コスト値costが4*dx*dy/2より小さい場合、「後続の探索処理を直接にスキップする」ことなく、後続の探索処理を継続し、即ちステップb12を実行する必要がある。
【0198】
ステップb13における「最適MVが依然として初期MV(即ちMVOffsetではない)であるか又は最小コスト値が0である場合、次回の反復探索処理を行わない」ことを取り除き、即ち、最適MVが依然として初期MVであり、又は最小コスト値が0であっても、次回の反復探索処理を行うことができる。
【0199】
実施例15では、ステップ303及びステップ403に対して、第1のオリジナル動きベクトルOrg_MV0及び第2のオリジナル動きベクトルOrg_MV1を第1の目標動きベクトルRefined_MV0及び第2の目標動きベクトルRefined_MV1に調整するために、実現方式は実施例12と類似するが、異なる点は以下のとおりである。
【0200】
「notZeroCost」に関連する処理を取り除き、即ち、ステップb11およびb13は、notZeroCostの値の設定及び保存がされない。ステップb21では、サブ画素オフセット計算処理(即ち、ステップb22)は、notZeroCostがfalseではなく、かつ、deltaMVが(0、0)である場合に限られず、deltaMVが(0、0)である場合も行うことができる。
【0201】
実施例16では、ステップ303及びステップ403に対して、第1のオリジナル動きベクトルOrg_MV0及び第2のオリジナル動きベクトルOrg_MV1を第1の目標動きベクトルRefined_MV0及び第2の目標動きベクトルRefined_MV1に調整するために、実現方式は実施例12と類似するが、異なる点は以下のとおりである。
ステップb21における「notZeroCostがfalseではなく、且つ、deltaMVが(0、0)である場合のみ、後続処理を行う。それ以外の場合、IntegerDeltaMVを直接に利用してオリジナル動きベクトルを調整する」を、「notZeroCostがfalseでなく、且つ、現在の最適整数画素の上下左右に1つの整数画素だけ離れた4つの点のコスト値が既にステップb1で計算によって取得された場合のみ、後続処理を行う。それ以外の場合、IntegerDeltaMVを直接に利用してオリジナル動きベクトルを調整する」に変更する。
【0202】
一例では、「後続処理」は、ステップb22におけるサブ画素オフセット計算処理を指す。
【0203】
一例では、ステップb22におけるサブ画素オフセット計算処理は、最適整数画素の上下左右に1整数画素だけ離れた4つの点のコスト値を使用する必要があるので、ステップb1で既に「最適整数画素の上下左右に1整数画素だけ離れた4つの点のコスト値」を計算して得ることは必要条件である。
【0204】
実施例17では、ステップ303及びステップ403に対して、第1のオリジナル動きベクトルOrg_MV0及び第2のオリジナル動きベクトルOrg_MV1を第1の目標動きベクトルRefined_MV0及び第2の目標動きベクトルRefined_MV1に調整するために、実現方式は実施例12と類似するが、異なる点は以下のとおりである。
【0205】
ステップb21における「notZeroCostがfalseではなく、且つ、deltaMVが(0,0)である場合のみ、後続処理を行う。それ以外の場合、IntegerDeltaMVを直接に利用してオリジナル動きベクトルを調整する」ことを、「現在の最適整数画素の上下左右に1つの整数画素だけ離れた4つの点のコスト値が既にステップb1で計算によって取得された場合のみ、後続処理(即ちサブ画素オフセット計算処理)を行う。それ以外の場合、IntegerDeltaMVを直接に利用してオリジナル動きベクトルを調整する」に変更する。
【0206】
実施例18では、ステップ303及びステップ403に対して、第1のオリジナル動きベクトルOrg_MV0及び第2のオリジナル動きベクトルOrg_MV1を第1の目標動きベクトルRefined_MV0及び第2の目標動きベクトルRefined_MV1に調整するために、実現方式は実施例12と類似するが、異なる点は以下のとおりである。
【0207】
ステップb21における「notZeroCostがfalseではなく、且つ、deltaMVが(0,0)である場合のみ、後続処理を行う。それ以外の場合、IntegerDeltaMVを直接に利用してオリジナル動きベクトルを調整する」ことを、「現在の最適整数画素の上下左右に1つの整数画素だけ離れた4つの点のコスト値が既にステップb1で計算によって取得された場合、後続処理(ステップb22におけるサブ画素オフセット計算処理)を行う。それ以外の場合、ステップb24で処理する」に変更する。
【0208】
ステップb23では、現在の最適整数画素点MV_inter_orgを、それに最も近き且つ周囲の上下左右に1つの整数画素だけ離れた4つの点のコスト値が既にステップb1で計算によって取得された整数画素点MV_inter_nearestに設定する。次に、MV_inter_nearestを中心にステップb22におけるサブ画素オフセット計算処理を行う、即ち、MV_inter_nearestを中心にSPMVを取得する。
【0209】
例えば、現在の最適整数画素点MV_inter_orgの上下左右に1つの整数画素だけ離れた4つの点のコスト値が、全てステップb1で計算によって取得されていない場合、最適整数画素点MV_inter_orgの周囲から1つの整数画素点MV_inter_nearestを選択し、この整数画素点MV_inter_nearestの上下左右に1つの整数画素だけ離れた4つの点のコスト値は、ステップb1で既に計算によって取得されている。
【0210】
そして、整数画素点MV_inter_nearestを現在の最適整数画素点とし、整数画素点MV_inter_nearestを中心としてSPMVを取得し、具体的な取得方式はステップb22を参照する。
【0211】
整数画素点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である。
【0212】
実施例19では、上述の実施例において、中心動きベクトルに対応するエッジ動きベクトル、例えば5つのエッジ動きベクトルを確定する必要がある。例えば、中心動きベクトル(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)とを順次得ることができる。
【0213】
例えば、仮に、(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つのエッジ動きベクトルを順次得ることができる。
【0214】
実施例20では、上記実施例において、エッジ動きベクトル(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に変更する)である。
【0215】
例えば、(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である。
【0216】
例えば、(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である。
【0217】
実施例21では、ステップ303及びステップ403は、現在のブロックの各サブブロックに対して、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて第1のオリジナル動きベクトルを調整し、サブブロックの第1の目標動きベクトルを得て、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて第2のオリジナル動きベクトルを調整し、サブブロックの第2の目標動きベクトルを得る。
【0218】
1つのサブブロック(現在のブロックにおけるサイズがdx*dyである各サブブロックのような、例えばサイズが16*16であるサブブロック、又はそれよりの小さい1つの整数ブロック)に対する処理を例として、オリジナル動きベクトルの調整処理を説明する。
【0219】
ステップc1では、第1のオリジナル動きベクトル又は第2のオリジナル動きベクトルを中心として、周囲の動きベクトルから一部又は全ての動きベクトルを選択し、選択された動きベクトルを候補動きベクトルとする。
【0220】
例えば、第1のオリジナル動きベクトルを中心として、周囲の動きベクトルから一部又は全ての動きベクトルを選択し、候補動きベクトルとしてよく、この選択方式については後述の実施例を参照する。
【0221】
説明の便宜上、後述の実施例において、第1のオリジナル動きベクトルを中心とすることを例として説明する。
【0222】
ステップc2では、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、第1のオリジナル動きベクトルに対応する第3のコスト値と、各候補動きベクトルに対応する第4のコスト値とを取得する。
【0223】
例えば、第1のオリジナル動きベクトルに対応するサブ参照ブロックA1は、第1の参照ブロックからコピーによって取得されるものであり、サブ参照ブロックA1は第1の参照ブロックにおける第1のオリジナル動きベクトルのサブ参照ブロックであり、サブ参照ブロックA1のサイズは現在のブロックのサイズである。第2のオリジナル動きベクトルに対応するサブ参照ブロックB1は、第2の参照ブロックからコピーによって取得されるものであり、サブ参照ブロックB1は第2のオリジナル動きベクトルの第2の参照ブロックにおけるサブ参照ブロックであり、サブ参照ブロックB1のサイズは現在のブロックのサイズである。次に、サブ参照ブロックA1の第1の画素値とサブ参照ブロックB1の第2の画素値とを用いて、第1のオリジナル動きベクトルに対応する第3のコスト値を取得する。
【0224】
各候補動きベクトルに対して、候補動きベクトルに対応するサブ参照ブロックA2は、第1の参照ブロックからコピーによって取得されるものであり、サブ参照ブロックA2は候補動きベクトルの第1の参照ブロックにおけるサブ参照ブロックであり、サブ参照ブロックA2のサイズは現在のブロックのサイズである。候補動きベクトルの対称動きベクトルに対応するサブ参照ブロックB2は、第2の参照ブロックからコピーによって取得されるものであり、サブ参照ブロックB2は対称動きベクトルの第2の参照ブロックにおけるサブ参照ブロックであり、サブ参照ブロックB2のサイズは現在のブロックのサイズである。サブ参照ブロックA2の第1の画素値とサブ参照ブロックB2の第2の画素値とを利用して、候補動きベクトルに対応する第4のコスト値を取得する。
【0225】
ステップc3では、第3のコスト値及び第4のコスト値に基づいて、最適動きベクトルとして、第1のオリジナル動きベクトル及び候補動きベクトルから1つの動きベクトルを選択する。例えば、コスト値が最も小さい動きベクトル(例えば、第1のオリジナル動きベクトル、又は任意1つの候補動きベクトル)を最適動きベクトルとする。
【0226】
ステップc4では、最適動きベクトルに基づいて、第1の整数画素動きベクトル調整値(第1のオリジナル動きベクトルを調整することに用いられる)及び第2の整数画素動きベクトル調整値(第2のオリジナル動きベクトルを調整することに用いられる)を確定する。一例では、最適動きベクトルおよび第1のオリジナル動きベクトルに基づいて、第1の整数画素動きベクトル調整値を確定してよく、第1の整数画素動きベクトル調整値に基づいて、第2の整数画素動きベクトル調整値を確定してよく、第2の整数画素動きベクトル調整値は、第1の整数画素動きベクトル調整値と対称する。
【0227】
例えば、仮に、最適動きベクトルが(4,6)であり、第1のオリジナル動きベクトルが(4,4)である場合、最適動きベクトル(4,6)と第1のオリジナル動きベクトル(4,4)とに基づいて、第1の整数画素動きベクトル調整値を確定する。第1の整数画素動きベクトル調整値は、最適動きベクトル(4,6)と第1のオリジナル動きベクトル(4,4)との差であり、即ち、第1の整数画素動きベクトル調整値は(0,2)である。
【0228】
そして、第1の整数画素動きベクトル調整値(0,2)に基づいて第2の整数画素動きベクトル調整値を確定し、第2の整数画素動きベクトル調整値は(0,-2)であってよく、即ち(0,2)の反数であってよい。
【0229】
ステップc5では、最適動きベクトルに基づいて第1のサブ画素動きベクトル調整値(第1のオリジナル動きベクトルを調整することに用いられる)及び第2のサブ画素動きベクトル調整値(第2のオリジナル動きベクトルを調整することに用いられる)を確定する。
【0230】
一例では、最適動きベクトルに対応するコスト値と、最適動きベクトルに対応するエッジ動きベクトルに対応するコスト値とに基づいて、第1のサブ画素動きベクトル調整値を確定し、そして、前記第1のサブ画素動きベクトル調整値に基づいて第2のサブ画素動きベクトル調整値を確定する。
【0231】
例えば、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)となる。
【0232】
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)のコスト値である。各動きベクトルのコスト値に対して、その確定方式は上記実施例を参照できるため、ここでの説明を省略する。
【0233】
上記方式で第1のサブ画素動きベクトル調整値を確定した後、第1のサブ画素動きベクトル調整値に基づいて第2のサブ画素動きベクトル調整値を確定できる。第2のサブ画素動きベクトル調整値は第1のサブ画素動きベクトル調整値の反数である。例えば、第1のサブ画素動きベクトル調整値が(1,0)である場合、第2のサブ画素動きベクトル調整値は(-1,0)であり、即ち(1,0)の反数である。
【0234】
ステップc6では、第1の整数画素動きベクトル調整値及び/又は第1のサブ画素動きベクトル調整値に基づいて、第1のオリジナル動きベクトルを調整し、第1の目標動きベクトルを得る。
【0235】
例えば、第1の目標動きベクトル=第1のオリジナル動きベクトル+第1の整数画素動きベクトル調整値+第1のサブ画素動きベクトル調整値である。勿論、上記は例示に過ぎず、これに対して限定しない。
【0236】
ステップc7では、第2の整数画素動きベクトル調整値及び/又は第2のサブ画素動きベクトル調整値に基づいて、第2のオリジナル動きベクトルを調整し、第2の目標動きベクトルを得る。
【0237】
例えば、第2の目標動きベクトル=第2のオリジナル動きベクトル+第2の整数画素動きベクトル調整値+第2のサブ画素動きベクトル調整値である。勿論、上記は例示に過ぎず、これに対して限定しない。
【0238】
実施例22では、ステップ303及びステップ403は、現在のブロックの各サブブロックに対して、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて第1のオリジナル動きベクトルを調整し、サブブロックの第1の目標動きベクトルを得て、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて第2のオリジナル動きベクトルを調整し、サブブロックの第2の目標動きベクトルを得る。
【0239】
1つのサブブロック(現在のブロックにおけるサイズがdx*dyである各サブブロックのような、例えばサイズが16*16であるサブブロック、又はそれより小さいブロック)の処理を例として、オリジナル動きベクトルの調整処理を説明する。第1のオリジナル動きベクトルをOrg_MV0とし、第2のオリジナル動きベクトルをOrg_MV1とし、第1の目標動きベクトルをRefined_MV0とし、第2の目標動きベクトルをRefined_MV1としてよい。
【0240】
ステップd1では、第1のオリジナル動きベクトルを中心として、前記第1のオリジナル動きベクトルの周囲の(2*SR+1)*(2*SR+1)個の点から、一部又は全ての動きベクトルを選択する。例えば、SR=2である場合、候補動きベクトルとして、第1のオリジナル動きベクトルの周囲の25個の点の中から一部又は全ての動きベクトルを選択する。次に、第1のオリジナル動きベクトルのコスト値を確定して、各候補動きベクトルのコスト値を確定する。次に、コスト値が最も小さい動きベクトルを最適動きベクトルとする。
【0241】
上記実施例のステップb1と比べて、ステップd1は、反復処理を行う必要がなく、即ち、反復処理によって、1回目の反復で一部の動きベクトルを選択して2回目の反復でさらに一部の動きベクトルを選択するのではなく、1回目で処理対象の全ての候補動きベクトルを選択できる。これにより、全ての処理対象の候補動きベクトルを一度に選択するため、これらの候補動きベクトルに対して並列処理を行って、各候補動きベクトルのコスト値を取得できる。これにより、計算の複雑さを低減し、符号化性能を向上させる。
【0242】
ステップd2では、最適動きベクトルに基づいてIntegerDeltaMVの値を確定し、IntegerDeltaMVの最終値は第1の全画素動きベクトル調整値である。確定方式については説明を省略する。
【0243】
ステップd3では、最適動きベクトルを中心として、最適サブ画素オフセットMVを取得して、SPMVとする。SPMVの値は第1のサブ画素動きベクトル調整値である。
【0244】
ステップd3の実現は、上記ステップb2を参照してよいため、ここでの説明を省略する。
【0245】
ステップd4では、IntegerDeltaMV及びSPMVに基づいて、BestMVoffsetを取得する。例えば、BestMVoffset=IntegerDeltaMV+SPMVである。
BestMVoffsetに基づいて目標動きベクトルを取得する。ここで、Refined_MV0=Org_MV0+BestMVoffsetであり、Refined_MV1=Org_MV1-BestMVoffsetである。
【0246】
実施例23では、ステップ303とステップ403に対して、第1のオリジナル動きベクトルOrg_MV0と第2のオリジナル動きベクトルOrg_MV1とを第1の目標動きベクトルRefined_MV0と第2の目標動きベクトルRefined_MV1とに調整するために、実現方式は実施例21、実施例22と類似する。
【0247】
本実施例では、オリジナル動きベクトルを中心として、オリジナル動きベクトルの周囲の合計(2*SR+1)*(2*SR+1)個の点から、全ての動きベクトルを選択する。例えば、SR=2である場合、オリジナル動きベクトルの周囲の25個の点から全ての動きベクトルを選択し、これらの動きベクトルのコスト値を確定して、各動きベクトルのコスト値を確定する。そして、コスト値が最も小さい動きベクトルを最適動きベクトルとする。
【0248】
実施例24では、ステップ303とステップ403に対して、第1のオリジナル動きベクトルOrg_MV0と第2のオリジナル動きベクトルOrg_MV1とを第1の目標動きベクトルRefined_MV0と第2の目標動きベクトルRefined_MV1とに調整するために、実現方式は実施例21、実施例22と類似する。本実施例において、処理対象の全ての候補動きベクトルを一度に選択するため、これらの候補動きベクトルに対して並列処理を行うことができ、各候補動きベクトルのコスト値を取得し、それにより計算の複雑さを減少させ、符号化性能を向上させる。
【0249】
本実施例では、オリジナル動きベクトルを中心として、オリジナル動きベクトルの周囲の合計(2*SR+1)*(2*SR+1)個の点の中から、オフセットがSRを超えない範囲内の一部の動きベクトルを選択する。例えば、オリジナル動きベクトルを含む(2*SR+1)*(2*SR+1)個の点の中から、N個(Nは1以上、(2*SR+1)*(2*SR+1)以下である)の候補点を選択する。これらのN個の点に対応する動きベクトルのコスト値を確定する。これらのN点のコスト値を一定の順序でスキャンし、最適動きベクトルとして、コスト値が最も小さい動きベクトルを選択する。コスト値が同じである場合、順序の上位にある候補点を優先的に選択する。
【0250】
一例では、仮に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)}であってよい。
【0251】
これらの25個の点の動きベクトルに対応するコスト値を確定し、上記順序でスキャンし、最適オフセットMVとして、コスト値が最も小さい動きベクトルを取得する。最適オフセットMVを利用して、整数画素動きベクトル調整値及びサブ画素動きベクトル調整値を確定できる。確定方式は上記実施例を参照する。
【0252】
別の例では、仮にSR=2である場合、候補点は21個であってよく、これらの候補点の順序は、左から右へ、上から下への順序であってよい。
図7Bに示すように、これらの候補点の順序は、{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)}であってよい。これらの21個の点の動きベクトルに対応するコスト値を確定し、上記順序でスキャンし、最適オフセットMVとして、コスト値が最も小さい動きベクトルを取得する。最適オフセットMVを利用して、整数画素動きベクトル調整値及びサブ画素動きベクトル調整値を確定できる。確定方式は上記実施例を参照する。
【0253】
別の例では、仮にSR=2である場合、候補点は25個であってよく、これらの候補点の順序は、動きベクトル(0、0)を中心として、中心から近い順である。
図7Cに示すように、これらの候補点の順序は、{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を利用して、整数画素動きベクトル調整値及びサブ画素動きベクトル調整値を確定できる。確定方式は上記実施例を参照する。
【0254】
別の例では、仮にSR=2である場合、候補点は21個であってよく、これらの候補点の順序は、動きベクトル(0、0)を中心として、中心から近い順である。
図7Dに示すように、これらの候補点の順序は、{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)}であってよい。
【0255】
これらの21個の点の動きベクトルに対応するコスト値を確定し、上記順序でスキャンし、最適オフセットMVとして、コスト値が最も小さい動きベクトルを取得する。最適オフセットMVを利用して、整数画素動きベクトル調整値及びサブ画素動きベクトル調整値を確定できる。確定方式は上記実施例を参照する。
【0256】
別の例では、SR=2であると仮定する場合、候補点は13個であってよく、これらの候補点の順序は、動きベクトル(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)}であってよい。これらの13個の点の動きベクトルに対応するコスト値を確定し、上記順序でスキャンし、最適オフセットMVとして、コスト値が最も小さい動きベクトルを取得する。最適オフセットMVを利用して、整数画素動きベクトル調整値及びサブ画素動きベクトル調整値を確定できる。確定方式は上記実施例を参照する。
【0257】
実施例25では、ステップ303とステップ403に対して、第1のオリジナル動きベクトルOrg_MV0と第2のオリジナル動きベクトルOrg_MV1とを第1の目標動きベクトルRefined_MV0と第2の目標動きベクトルRefined_MV1とに調整するために、実現方式は実施例21、実施例22と類似する。本実施例において、処理対象の全ての候補動きベクトルを一度に選択するため、これらの候補動きベクトルに対して並列処理を行うことができ、各候補動きベクトルのコスト値を取得し、それにより計算の複雑さを減少させ、符号化性能を向上させる。
【0258】
本実施例では、オリジナル動きベクトルを中心として、オリジナル動きベクトルの周囲の合計(2*SR+1)*(2*SR+1)個の点の中から、オフセットがSRを超えない範囲内の一部の動きベクトルを選択する。例えば、オリジナル動きベクトルを含む(2*SR+1)*(2*SR+1)個の点の中から、N個(Nは1以上、(2*SR+1)*(2*SR+1)以下である)の候補点を選択する。これらのN個の点に対応する動きベクトルのコスト値を確定する。これらのN点のコスト値を一定の順序でスキャンし、最適動きベクトルとして、コスト値が最も小さい動きベクトルを選択する。コスト値が同じである場合、順序の上位にある候補点を優先的に選択する。
【0259】
実施例25が実施例24と異なる点は、実施例24の候補点の位置がいずれも固定され、即ちオリジナル動きベクトルに依存しないことに対して、実施例25の候補点の位置がオリジナル動きベクトルに依存することである。以下、いくつかの具体例を参照しながら説明する。
【0260】
一例では、仮に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(sign_H*1,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である。
【0261】
これらの13個の点の動きベクトルに対応するコスト値を確定し、上記順序でスキャンし、最適オフセットMVとして、コスト値が最も小さい動きベクトルを取得する。最適オフセットMVを利用して、整数画素動きベクトル調整値及びサブ画素動きベクトル調整値を確定できる。確定方式は上記実施例を参照する。
【0262】
別の例では、仮に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(sign_H*1,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である。
【0263】
これらの13個の点の動きベクトルに対応するコスト値を確定し、上記順序でスキャンし、最適オフセットMVとして、コスト値が最も小さい動きベクトルを取得する。最適オフセットMVを利用して、整数画素動きベクトル調整値及びサブ画素動きベクトル調整値を確定できる。確定方式は上記実施例を参照する。
【0264】
実施例26では、上記実施例において、第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、中心動きベクトルに対応する第1のコスト値と、エッジ動きベクトルに対応する第2のコスト値とを取得する。第1の参照ブロックの第1の画素値及び第2の参照ブロックの第2の画素値に基づいて、第1のオリジナル動きベクトルに対応する第3のコスト値と、候補動きベクトルに対応する第4のコスト値とを取得する。
【0265】
一例では、ダウンサンプリングされていない第1の画素値及びダウンサンプリングされていない第2の画素値に基づいて、中心動きベクトルに対応する第1のコスト値と、エッジ動きベクトルに対応する第2のコスト値と、第1のオリジナル動きベクトルに対応する第3のコスト値と、候補動きベクトルに対応する第4のコスト値とを取得してよい。
【0266】
別の例では、第1の画素値に対してダウンサンプリング操作を行い、第2の画素値に対してダウンサンプリング操作を行ってよい。そして、ダウンサンプリング操作された第1の画素値とダウンサンプリング操作された第2の画素値に基づいて、中心動きベクトルに対応する第1のコスト値と、エッジ動きベクトルに対応する第2のコスト値と、第1のオリジナル動きベクトルに対応する第3のコスト値と、候補動きベクトルに対応する第4のコスト値とを取得する。
【0267】
別の例では、第1の画素値に対してシフト及びダウンサンプリング操作を行い、第2の画素値に対してシフト及びダウンサンプリング操作を行ってよい。そして、処理された第1の画素値及び処理された第2の画素値に基づいて、中心動きベクトルに対応する第1のコスト値と、エッジ動きベクトルに対応する第2のコスト値と、第1のオリジナル動きベクトルに対応する第3のコスト値と、候補動きベクトルに対応する第4のコスト値とを取得する。
【0268】
異なる状況に対して、コスト値を確定する方式は類似する。例えば、中心動きベクトルに対応するコスト値を取得するためには、中心動きベクトルに対応するサブ参照ブロックA1を第1の参照ブロックからコピーによって取得し、中心動きベクトルに対応する対称動きベクトルに対応するサブ参照ブロックB1を第2の参照ブロックからコピーによって取得し、サブ参照ブロックA1の第1の画素値及びサブ参照ブロックB1の第2の画素値を利用して、中心動きベクトルに対応するコスト値を取得してよい。エッジ動きベクトルに対応するコスト値を取得するためには、エッジ動きベクトルに対応するサブ参照ブロックA2を第1の参照ブロックからコピーによって取得し、エッジ動きベクトルの対称動きベクトルに対応するサブ参照ブロックB2を第2の参照ブロックからコピーによって取得し、サブ参照ブロックA2の第1の画素値及びサブ参照ブロックB2の第2の画素値を利用し、エッジ動きベクトルに対応するコスト値を取得してよい。
【0269】
以上をまとめると、動きベクトルに対応するコスト値を取得するためには、第1の参照ブロックから当該動きベクトルに対応するサブ参照ブロックを取得し、第2の参照ブロックから当該動きベクトルの対称動きベクトルに対応するサブ参照ブロックを取得してから、2つのサブ参照ブロックの画素値を利用して、当該動きベクトルに対応するコスト値を取得する。
【0270】
実施例27では、実施例26の上で、ダウンサンプリングされていない第1の画素値(即ち、第1の参照ブロックにおけるサブ参照ブロックのダウンサンプリングされていない画素値)とダウンサンプリングされていない第2の画素値(即ち、第2の参照ブロックにおけるサブ参照ブロックのダウンサンプリングされていない画素値)とに基づいて、動きベクトルに対応するコスト値を取得する。
【0271】
一例では、仮に、第1の参照ブロックにおけるサブ参照ブロックがpred0であり、第2の参照ブロックにおけるサブ参照ブロックがpred1である場合、サブ参照ブロックpred0及びサブ参照ブロックpred1の画素を垂直ダウンサンプリングする必要がなく、サブ参照ブロックpred0及びサブ参照ブロックpred1の全ての画素値のSADによってコスト値を確定する。
【0272】
サブ参照ブロックpred0及びサブ参照ブロックpred1の全ての画素値に基づいて、コスト値の計算式は以下のとおりである。
【0273】
【0274】
上記の式において、costはコスト値を表し、Wはサブ参照ブロックの幅値を表し、Hはサブ参照ブロックの高さ値を表し、pred0(i,j)はサブ参照ブロックpred0のi列j行目の画素値を表し、pred1(i,j)はサブ参照ブロックpred1のi列j行目の画素値を表し、abs(x)はxの絶対値を表す。
【0275】
実施例28では、実施例26の上で、第1の画素値に対してダウンサンプリング操作を行い、第2の画素値に対してダウンサンプリング操作を行ってよい。ダウンサンプリング操作された第1の画素値(即ち、第1の参照ブロックにおけるサブ参照ブロックのダウンサンプリング操作された画素値)及びダウンサンプリング操作された第2の画素値(即ち、第2の参照ブロックにおけるサブ参照ブロックのダウンサンプリング操作された画素値)に基づいて、動きベクトルに対応するコスト値を取得してよい。
【0276】
一例では、仮に、第1の参照ブロックにおけるサブ参照ブロックがpred0であり、第2の参照ブロックにおけるサブ参照ブロックがpred1である場合、サブ参照ブロックpred0およびサブ参照ブロックpred1の全ての画素値のSADによって、コスト値を確定する。全ての画素値のSADを利用してコスト値を確定する時に、サブ参照ブロックpred0及びサブ参照ブロックpred1の画素値に対して、垂直N倍(Nは、0より大きい整数であり、2であってよい)のダウンサンプリングを行う。
【0277】
サブ参照ブロックpred0及びサブ参照ブロックpred1の全ての画素値に基づいて、コスト値の計算式は以下のとおりである。
【0278】
【0279】
上記の式において、costはコスト値を表し、Wはサブ参照ブロックの幅値を表し、Hはサブ参照ブロックの高さ値を表し、pred0(i,j)はサブ参照ブロックpred0のi列j行目の画素値を表し、pred1(i,j)はサブ参照ブロックpred1のi列j行目の画素値を表し、abs(x)はxの絶対値を表す。
【0280】
実施例29では、実施例26の上で、第1の画素値に対してシフト及びダウンサンプリング操作を行い、第2の画素値に対してシフト及びダウンサンプリング操作を行い、処理された第1の画素値(第1の参照ブロックにおけるサブ参照ブロックのシフト及びダウンサンプリングされた画素値)及び処理された第2の画素値(第2の参照ブロックにおけるサブ参照ブロックのシフト及びダウンサンプリングされた画素値)に基づいて、動きベクトルに対応するコスト値を取得する。
【0281】
一例では、仮に、第1の参照ブロックにおけるサブ参照ブロックがpred0であり、第2の参照ブロックにおけるサブ参照ブロックがpred1であり、pred0及びpred1はいずれもDビットで格納する。即ち、pred0における各画素値に対していずれもpred0(i,j)格納し、pred1における各画素値に対していずれもpred0(i,j)格納する。
【0282】
Dが8以下である場合、サブ参照ブロックpred0及びサブ参照ブロックpred1の全ての画素値のSADによって、コスト値を確定する。全ての画素値のSADを利用してコスト値を確定する時に、サブ参照ブロックpred0及びサブ参照ブロックpred1の画素値に対して、垂直N倍(Nは、0より大きい整数であり、2であってよい)のダウンサンプリングを行う。サブ参照ブロックpred0及びサブ参照ブロックpred1の全ての画素値に基づいて、コスト値の計算式は以下のとおりである。
【0283】
【0284】
上記の式において、costはコスト値を表し、Wはサブ参照ブロックの幅値を表し、Hはサブ参照ブロックの高さ値を表し、Nはダウンサンプリングのパラメータ、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行目…の差の絶対値和のみを計算する。
【0285】
Dが8より大きい場合、まずサブ参照ブロックpred0及びサブ参照ブロックpred1の全ての画素値を8ビットにシフトすることで、8ビットのpred0及び8ビットのpred1が取得され、pred0-8bit(i,j)及びpred1-8bit(i,j)とされる。その目的は、SAD計算の記憶コストを節約するためであり、8ビットで格納することはさらに高い並列度を図れる
【0286】
【0287】
そして、8ビットのpred0及び8ビットのpred1の画素値に対して、垂直N倍(Nは、0より大きい整数であり、2であってよい)のダウンサンプリングを行う。この場合、コスト値の計算式は以下のとおりである。
【0288】
【0289】
上記の式において、各部の意味は上記実施例を参照し、ここでの説明を省略する。
【0290】
実施例30では、ステップ304及びステップ404は、現在のブロックの各サブブロックに対して、当該サブブロックの第1の目標動きベクトル及び当該サブブロックの第2の目標動きベクトルに基づいて、当該サブブロックに対して動き補償を行う。具体的には、当該サブブロックの第1の目標動きベクトルに基づいて、当該サブブロックに対応する第3の参照ブロックを確定し、当該サブブロックの第2の目標動きベクトルに基づいて、当該サブブロックに対応する第4の参照ブロックを確定する。第3の参照ブロックの第3の画素値及び第4の参照ブロックの第4の画素値に基づいて、重み付けを行い、当該サブブロックの予測値を得る。
【0291】
例えば、サブブロックの2つの目標動きベクトルに基づいて、補間(例えば、8タップの補間)により、2つの方向の参照ブロックを取得する(即ち、3成分の予測値を含む第3の参照ブロック及び第4の参照ブロックを取得する。目標動きベクトルがサブ画素である可能性があるため、補間が必要である)。第3の参照ブロックの第3の画素値及び第4の参照ブロックの第4の画素値に基づいて、重み付けを行い、最終的な予測値(3成分)を得る。
【0292】
一例では、サブブロックの第1の目標動きベクトルに基づいて、第1の参照フレームから当該サブブロックに対応する第5の参照ブロックを確定し、第5の参照ブロックにおける画素値を補間し、第3の参照ブロックを得てよい。サブブロックの第2の目標動きベクトルに基づいて、第2の参照フレームから当該サブブロックに対応する第6の参照ブロックを確定し、第6の参照ブロックにおける画素値を補間し、第4の参照ブロックを得てよい。
【0293】
例えば、仮に、現在のブロックのサイズがW*Hである場合、第1の目標動きベクトルに基づいて、第1の参照フレームからサイズがA*Bである第5の参照ブロックを確定してよい。第5の参照ブロックのサイズA*Bは、補間方式に依存しており、AがWより大きく、BがHより大きいが、これらに対して限定しない。第5の参照ブロックにおける画素値を補間することにより、サイズがW*Hである第3の参照ブロックを取得してよく、ここでの補間方式を限定しない。第2の目標動きベクトルに基づいて第2の参照フレームからサイズA*Bの第6の参照ブロックを確定してよい。第6の参照ブロックのサイズA*Bは補間方式に依存し、AはWより大きく、BはHより大きい。第6の参照ブロックにおける画素値を補間することにより、サイズがW*Hである第4の参照ブロックを取得してよく、ここでの補間方式を限定しない。
【0294】
別の例では、サブブロックの第1の目標動きベクトルに基づいて、第1の参照フレームから当該サブブロックに対応する第7の参照ブロックを確定し、第7の参照ブロックにおける画素値を利用して第8の参照ブロックを構築し、第8の参照ブロックにおける画素値を補間し、第3の参照ブロックを得る。サブブロックの第2の目標動きベクトルに基づいて、第2の参照フレームから当該サブブロックに対応する第9の参照ブロックを確定し、第9の参照ブロックにおける画素値を利用して第10の参照ブロックを構築し、第10の参照ブロックにおける画素値を補間し、第4の参照ブロックを得る。
【0295】
例えば、仮に、現在のブロックのサイズがW*Hである場合、第1の目標動きベクトルに基づいて、第1の参照フレームからサイズがW*Hである第7参照ブロックを確定してよい。第7の参照ブロックにおける画素値に基づいて、サイズがA*Bである第8の参照ブロックを構築し、ここでの構築方式を限定しない。第8の参照ブロックのサイズA*Bは補間方式に依存し、AはWより大きく、BはHより大きいが、これらに対して限定しない。第8の参照ブロックにおける画素値を補間することにより、サイズがW*Hである第3の参照ブロックを得てよい、ここでの補間方式を限定しない。
【0296】
また例えば、仮に、現在のブロックのサイズがW*Hである場合、第2の目標動きベクトルに基づいて、サイズがW*Hである第9の参照ブロックを第2の参照フレームから確定してよい。第9の参照ブロックにおける画素値に基づいて、サイズがA*Bである第10の参照ブロックを構築し、ここでの構築方式を限定しない。第10の参照ブロックのサイズA*Bは補間方式に依存し、AはWより大きく、BはHより大きいが、これらに対して限定しない。第10の参照ブロックにおける画素値を補間することにより、サイズがW*Hである第4の参照ブロックを得てよい、ここでの補間方式を限定しない。
【0297】
実施例31では、目標動きベクトルを取得した後、各サブブロックの目標動きベクトルに基づいて、8タップの補間フィルタにより2つの方向の予測値(即ち、YUVの3成分、即ち、上記第3の参照ブロックの予測値と第4の参照ブロックの予測値)を取得して、重み付け予測値を取得する。
図5に示すように、黒領域及び白領域は、参照フレームから取得された画素値であり、灰領域における画素値については、参照フレームから取得する必要がなく、隣接する画素値をコピーすることによって取得してよい。
【0298】
一例では、まず、白領域における1行目のW+FS-1個の画素値を、灰領域における最初のSR行の画素値にコピーしてよい。白領域における最終行のW+FS-1個の画素値を、灰領域における最終のSR行の画素値にコピーする。次に、白領域における1列目のH+FS-1個の画素及び上下のそれぞれのSR個の取得された灰領域における画素値を、灰領域における最初のSR列の画素値にコピーしてよい。白領域における最終列のH+FS-1個の画素値及び上下のそれぞれのSR個の取得された灰領域の画素値を、灰領域における最終のSR列の画素値にコピーする。
【0299】
別の例では、まず、白領域における1列目のH+FS-1個の画素値を、灰領域における最初のSR列の画素値にコピーできる。白領域における最終列のH+FS-1個の画素値を、灰領域における最終のSR列の画素値にコピーする。次に、白領域における1行目のW+FS-1個の画素値及び左右のそれぞれのSR個の取得された灰領域における画素値を、灰領域における最初のSR行の画素値にコピーする。白領域における最終行のW+FS-1個の画素値及び左右のそれぞれのSR個の取得された灰領域の画素値を、灰領域における最終のSR行の画素値にコピーする。
【0300】
実施例32では、目標動きベクトルを取得した後、各サブブロックの目標動きベクトルに基づいて、8タップの補間フィルタにより、2つの方向の予測値(即ち、YUVの3成分、即ち、第3の参照ブロックの予測値と第4の参照ブロックの予測値)を取得して、重み付けして最終的な予測値を取得する。
図5に示すように、黒領域及び白領域は、参照フレームから取得された画素値であり、灰領域の画素値に対して、隣接する画素値をコピーすることによって取得するのではなく、参照フレームの対応する領域から直接にコピーして取得する。この方法は簡単であり、より良い性能を有しうるが、参照フレームに対するアクセスデータ量を増加させる。
【0301】
実施例33では、目標動きベクトルを取得した後、各サブブロックの目標動きベクトルに基づいて、バイリニア補間フィルタ(ここで、8タップの補間フィルタではない)により2つの方向の予測値(即ち、YUVの3成分、即ち、上述した第3の参照ブロックの予測値と第4の参照ブロックの予測値)を取得して、重み付けして最終的な予測値を取得する。
図5に示すように、黒領域および白領域は、参照フレームから取得された画素値であってよい。タップ数が比較的少ないため、灰領域における画素値は不要である。
【0302】
実施例34では、実施例30~実施例33において、2つの方向の予測値を取得した後、均等加重平均(即ち、2つの方向の予測値の重みが同じである)で最終予測値を取得する。又は、2つの方向の予測値を取得した後、加重平均で最終的な予測値を取得し、2つの予測値の重みは異なってもよい。例えば、2つの予測値の重み比率は1:2や1:3、2:1等であってもよい。
【0303】
符号化側に対して、重みテーブルは1:2、1:3、2:1等の重み比率を含んでよく、符号化側は各重み比率のコスト値を確定して、最小の重み比率を確定してよい。このように、符号化側はコスト値が最小の重み比率に基づいて、加重平均で最終予測値を取得できる。
【0304】
符号化側が復号化側に符号化ビットストリームを送信する時、当該符号化ビットストリームは、重み値比率の重みテーブルにおけるインデックス値を含む。これにより、復号化側は、符号化ビットストリームのインデックス値を解析することにより、そのインデックス値に対応する重み割合を重みテーブルから取得し、重み割合に基づいて加重平均で最終的な予測値を取得する。
【0305】
一例では、重みテーブルは、{-2,3,4,5,10}を含んでよいが、これに限定されない。重み「-2」は、最終予測値=(予測値1*(-2)+予測値2*(8-(-2)))、即ち(-2*予測値1+10*予測値2)/8を示す。重み「10」は、重み比が10:-2、即ち最終予測値=(予測値1*(10)+予測値2*(-2))、即ち(10*予測値1-2*予測値2)/8であることを示す。重み「3」は、重み比が3:5であることを示す。重み「5」は、重み比が5:3であることを示す。重み「4」は、重み比が4:4、即ち、重みが同じであることを示す。
【0306】
実施例35では、ステップ305及びステップ405は、現在のブロックの各サブブロックの第1の目標動きベクトル及び第2の目標動きベクトルを保存する必要があり、第1の目標動きベクトル及び第2の目標動きベクトルは後続のブロックの符号化/復号化の参照に用いられる。例えば、第1の目標動きベクトルと第2の目標動きベクトルとは現在のフレームのループフィルタリングに用いられる。第1の目標動きベクトルと第2の目標動きベクトルとは後続のフレームの時間領域の参照に用いられる。及び/又は、第1の目標動きベクトルと第2の目標動きベクトルとは現在のフレームの空間領域の参照に用いられる。
【0307】
例えば、現在のブロックの各サブブロックの第1目標動きベクトル及び第2目標動きベクトルは、現在のブロックの動き補償のために用いられるが、後続のフレームの時間領域の参照のためにも用いられる。また例えば、現在のブロックの各サブブロックの第1目標動きベクトルと第2目標動きベクトルは、現在のブロックの動き補償に用いられるが、現在のブロックのループフィルタリング過程にも用いられ、さらに、後続のフレームの時間領域の参照に用いられる。
【0308】
また例えば、現在のブロックの各サブブロックの第1の目標動きベクトル及び第2の目標動きベクトルは、現在のブロックの動き補償に用いられるが、現在のブロックのループフィルタリングにも用いられて、さらに、後続のフレームの時間領域参照にも用いられ、現在のフレームの空間領域の参照にも用いられる。これについて、以下に説明する。
【0309】
現在のブロックの各サブブロックの第1目標動きベクトル及び第2目標動きベクトルは、空間領域でのいくつかのLCU(Largest Coding Unit)内のブロックの空間領域の参照に用いられる。コーデック順序が上から下へ、左から右へであるため、現在のブロックの動きベクトルは、現在のLCU内の他のブロックによって参照されてもよく、後続の隣接するLCU内のブロックによって参照されてもよい。目標動きベクトルを取得するために必要な計算量が大きいため、後続のブロックが現在のブロックの目標動きベクトルを参照すると、待ち時間が長くなってしまう。長い待ち時間による遅延を回避するように、少数の空間領域で隣接するブロックのみに対して現在のブロックの目標動きベクトルを参照することを許容し、他のブロックは現在のブロックのオリジナル動きベクトルを参照する。
図8を参照して、これらの少数のブロックは、現在のLCUの下側に位置する下側のLCU及び右下側のLCU内のサブブロックを含み、右側のLCU及び左下側のLCU内のサブブロックは、現在のブロックの目標動きベクトルを参照することができない。
【0310】
実施例36では、以下、一具体例を参照しながら、動きベクトルの調整過程を説明する。動きベクトル調整の具体的なステップは以下のとおりである。後述の「コピー」とは、補間不要で取得できることを意味し、MVが整数画素オフセットである場合、参照フレームから直接にコピーできるが、それ以外の場合、補間で取得する必要がある。
【0311】
ステップe1では、現在のブロックがmerge又はskipモードを用いる場合、以下の処理を実行する。
【0312】
ステップe2では、参照画素値を用意する(仮に、現在のブロックの幅がWであり、高さがHである)。
【0313】
ステップe3に用いられる整数画素ブロックを用意することは、オリジナル動きベクトル(リスト0のオリジナル動きベクトルはOrg_MV0とされ,リスト1のオリジナル動きベクトルはOrg_MV1とされる)に基づいて、2つの面積が(W+FS-1)*(H+FS-1)である3成分の整数画素ブロックを、対応する参照フレームに対応する位置にコピーすることを含む。
【0314】
ステップe4に用いられる整数画素ブロックを用意することは、
図5に示すように、上記(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とされることを含む。
【0315】
2つの異なる方向の動き情報に基づいて、第1の動き補償を行う。例えば、輝度成分(後続の探索処理は輝度成分を用いてコスト値を計算するので、複雑さが低減される)に対して、2つの面積が(W+FS-1)*(H+FS-1)である整数画素参照ブロックに基づいて、バイリニア補間で、サイズが(W+2*SR)*(H+2*SR)である2つの初期参照予測値(Pred_Bilinear0及びPred_Bilinear1とする)を取得し、FSはフィルタのタップ数であり、デフォルトで8であり、SRは探索範囲であり、即ち、目標動きベクトルおよびオリジナル動きベクトルの最大水平/垂直成分の補間であり、デフォルトで2である。Pred_Bilinear0/1は、ステップe3に用いられる。
【0316】
ステップe3では、現在のブロックの各dx*dyのサブブロック(16*16以下の整数ブロック)に対して、それぞれ目標動きベクトル(2つの目標動きベクトルはそれぞれRefined_MV0及びRefined_MV1とする)を取得する。
【0317】
ステップe31では、SR回の反復を行い、最適整数画素のMV点の整数画素オフセットを取得し、IntegerDeltaMVとし、IntegerDeltaMVを(0,0)に初期化する。毎回の反復では、以下の処理が実行される。
【0318】
ステップe311では、deltaMVを(0,0)に設定する。最初の反復である場合、オリジナル動きベクトルに基づいて、参照画素Pred_Bilinear0/1から、コピーすることにより2つの予測値ブロック(実際にはPred_Bilinear0/1の最も中心にあるW*Hのブロック)を取得し、これら2つの予測値ブロックに基づいて、初期コスト値、即ち2つの方向予測値ブロックの垂直2倍のダウンサンプリングされたSADを取得する。
【0319】
当該初期コスト値が4*dx*dy/2より小さい場合、dx及びdyは現サブブロックの幅及び高さであり、後続の探索処理を直接にスキップして、ステップe32を実行し、notZeroCostをfalseに設定する。
【0320】
ステップe312では、
図6に示すように、上記初期点を中心として、{Mv(0,1),Mv(0,-1),Mv(1,0),Mv(-1,0),Mv(right,down)}の5つのオフセットMV(これらの5つのオフセットMVはいずれもMVOffsetとされる)を順次得て、これらの5つのオフセットMVのコスト値の計算及び比較処理を行う。
【0321】
例えば、あるMVOffsetに基づいて、参照画素Pred_Bilinear0/1から、MVOffsetにより2つの予測ブロック(実際には、Pred_Bilinear0において中心位置をMVOffsetだけシフトされたW*Hのブロックと、Pred_Bilinear1において中心位置を-MVOffset(list0とは逆)だけシフトされたW*Hのブロック)を取得し、MVOffsetのコスト値として、これらの2つのブロックのダウンサンプリングSADを計算する。次回の反復の新たな中心オフセット点として、最小コスト値を有するMVOffset(deltaMVに保存する)を保留する
【0322】
Mv(right,down)のデフォルト値は、(-1,-1)である。Mv(1,0)のコスト値がMv(-1,0)のコスト値より小さい場合、rightは1である。Mv(0,1)のコスト値がMv(0,-1)のコスト値より小さい場合、downは1である。
【0323】
deltaMV値に基づいてIntegerDeltaMVを更新する。即ち、=IntegerDeltaMV+deltaMV。
【0324】
ステップe313では、反復を行った後、最適MVが依然として初期MVであるか又は最小コスト値が0である場合、次回の反復探索処理を行わず、ステップe32を実行し、notZeroCostをfalseに設定する。それ以外の場合、反復回数がSRに達すると、ステップe32を実行し、反復回数がSRに達しないと、最適MVを中心として、次回の反復探索処理を行い、即ちステップe311に戻る。
【0325】
ステップe32では、ステップe31の最適整数画素のMV点を中心として、最適サブ画素のオフセットMVを取得し、SPMVとする。SPMVを(0,0)に初期化して、以下の処理を実行する。
【0326】
ステップe321では、notZeroCostがfalseでなく、且つdeltaMVが(0,0)である場合のみ、後続処理を行う。それ以外の場合、IntegerDeltaMVを直接に利用してオリジナル動きベクトルを調整する。
【0327】
ステップ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))。
【0328】
一例では、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)である。
【0329】
E(-1,0)=E(0,0)である場合、水平に左へ半画素分シフトする(deltaMv[0]=-N)。
E(1,0)=E(0,0)である場合、水平に右へ半画素分シフトする(deltaMv[0]=N)。
E(0,-1)=E(0,0)である場合、垂直に上へ半画素分シフトする(deltaMv[1]=-N)。
E(0,1)=E(0,0)である場合、垂直に下へ半画素分シフトする(deltaMv[1]=N)。
【0330】
ステップe33では、ステップe31の整数画素オフセットIntegerDeltaMV及びステップe32のサブ画素オフセットSPMVに基づいて、最適オフセットMVを取得し、BestMVoffsetとする。BestMVoffset=IntegerDeltaMV+SPMVである。BestMVoffsetに基づいて2つの方向の目標動きベクトルを取得してよい。ここで、Refined_MV0=Org_MV0+BestMVoffsetであり、Refined_MV1=Org_MV1-BestMVoffsetである。
【0331】
ステップe4では、各サブブロックの目標動きベクトルに基づいて、8タップの補間を行って2つの方向の予測値を取得し、重み付けを行って最終的な予測値(3成分)を取得する。例えば、各サブブロックの目標動きベクトルRefined_MV0及びRefined_MV1に基づいて、ステップe2で用意されたPred_Inter0/1において、補間によって対応する予測ブロックを取得する(動きベクトルはがサブ画素である可能性があるため、対応する画素ブロックを取得するように、補間は必要である)。
【0332】
ステップe5では、目標動きベクトルは、現在のブロックの動き補償及び後続のフレームの時間領域の参照に用いられる。
【0333】
実施例37では、上記実施例は、個別にまたは任意の組み合わせで実施されてもよい。例えば、実施例13、実施例15、実施例24、実施例29はそれぞれ個別に実施されてよい。実施例13と実施例15、実施例13と実施例24、実施例13と実施例29、実施例15と実施例24、実施例15と実施例29、実施例24と実施例29、実施例13と実施例15と実施例24、実施例13と実施例15と実施例29、実施例15と実施例24と実施例29、実施例13と実施例15と実施例24と実施例29などの組み合わせなどで実施されてよい。勿論、上記はいくつかの例に過ぎず、これに対して限定しない。本願に係る全ての実施例は、いずれも個別にまたは任意の組み合わせで実施できる。
【0334】
実施例38では、
上記方法と同様な発明概念に基づいて、本願の実施例は、さらに、符号化側又は復号化側に適用されるコーデック装置を提供する。
図9は前記装置の構成図であり、
図9に示すように、前記装置は、
現在のブロックの特徴情報が特定の条件を満たす場合、前記現在のブロックの第1のオリジナル動きベクトルに基づいて、前記現在のブロックに対応する第1の参照ブロックを確定し、前記現在のブロックの第2のオリジナル動きベクトルに基づいて、前記現在のブロックに対応する第2の参照ブロックを確定する、確定モジュール91と、前記第1の参照ブロックの第1の画素値と前記第2の参照ブロックの第2の画素値とに基づいて、前記第1のオリジナル動きベクトルと前記第2のオリジナル動きベクトルとを調整し、前記第1のオリジナル動きベクトルに対応する第1の目標動きベクトルと前記第2のオリジナル動きベクトルに対応する第2の目標動きベクトルとを得る、処理モジュール92と、前記第1の目標動きベクトル及び前記第2の目標動きベクトルに基づいて、前記現在のブロックを符号化又は復号化する、コーデックモジュール93と、を含む。
【0335】
前記特徴情報は、前記現在のブロックに対応する動き情報予測モードと、前記現在のブロックに対応する動き情報属性と、前記現在のブロックのサイズ情報とのうちの1つ又は複数を含む。
【0336】
前記特徴情報が前記現在のブロックに対応する動き情報予測モードである場合、前記確定モジュール91は、さらに、前記現在のブロックに対応する動き情報予測モードが通常マージモードである場合、前記現在のブロックに対応する動き情報予測モードが特定の条件を満たすことを確定すること、又は、前記現在のブロックに対応する動き情報予測モードがインター予測値とイントラ予測値を統合して新たな予測値を生成するためのマージモードである場合、前記現在のブロックに対応する動き情報予測モードが特定の条件を満たすことを確定すること、に用いられる。
【0337】
前記特徴情報が前記現在のブロックに対応する動き情報属性である場合、前記確定モジュール91は、さらに、前記現在のブロックに対応する動き情報属性が、前記現在のブロックの動き情報が2つの異なる方向の動き情報を含むことである場合、前記現在のブロックに対応する動き情報属性が特定の条件を満たすことを確定すること、又は、前記現在のブロックに対応する動き情報属性が、前記現在のブロックの動き情報が2つの異なる方向の動き情報を含み、前記2つの異なる方向の動き情報に対応する2つの参照フレームと現在のフレームとの距離が同じであることである場合、前記現在のブロックに対応する動き情報属性が特定の条件を満たすことを確定すること、又は、前記現在のブロックに対応する動き情報属性が、前記現在のブロックの周囲ブロックを利用したことである場合、前記現在のブロックに対応する動き情報属性が特定の条件を満たすことを確定すること、又は、前記現在のブロックに対応する動き情報属性が、前記現在のブロックの各サブブロックの動き情報が同じであることである場合、前記現在のブロックに対応する動き情報属性が特定の条件を満たすことを確定すること、に用いられる。
【0338】
前記特徴情報が前記現在のブロックの幅値及び前記現在のブロックの高さ値を含む前記現在のブロックのサイズ情報である場合、前記確定モジュール91は、さらに、前記現在のブロックの幅値が第1の区間[第1の閾値,第2の閾値]の範囲内である場合、前記現在のブロックのサイズ情報が特定の条件を満たすことを確定すること、又は、前記現在のブロックの高さ値が第2の区間[第3の閾値,第4の閾値]の範囲内である場合、前記現在のブロックのサイズ情報が特定の条件を満たすことを確定すること、又は、前記現在のブロックの幅値及び前記現在のブロックの高さ値によって得られた面積が第3の区間[第5の閾値,第6の閾値]の範囲内である場合、前記現在のブロックのサイズ情報が特定の条件を満たすことを確定すること、又は、前記幅値が第1の区間[第1の閾値,第2の閾値]の範囲内であり、かつ、前記高さ値が第2の区間[第3の閾値,第4の閾値]の範囲内であり、かつ、前記面積が第3の区間[第5の閾値,第6の閾値]の範囲内である場合、現在のブロックのサイズ情報が特定の条件を満たすことを確定すること、に用いられる。
【0339】
前記確定モジュール91は、前記現在のブロックの第1のオリジナル動きベクトルに基づいて前記現在のブロックに対応する第1の参照ブロックを確定し、前記現在のブロックの第2のオリジナル動きベクトルに基づいて前記現在のブロックに対応する第2の参照ブロックを確定する時に、具体的に、前記現在のブロックの第1のオリジナル動きベクトルに基づいて、第1の参照フレームから前記現在のブロックに対応する第1の参照ブロックを確定することと、前記現在のブロックの第2のオリジナル動きベクトルに基づいて、第2の参照フレームから前記現在のブロックに対応する第2の参照ブロックを確定することと、に用いられる。前記第1の参照ブロックにおける各画素点の第1の画素値は、前記第1の参照ブロックにおける隣接する画素点の画素値を補間することにより得られ、又は、前記第1の参照ブロックにおける隣接する画素点の画素値をコピーすることにより得られる。前記第2の参照ブロックにおける各画素点の第2の画素値は、前記第2の参照ブロックにおける隣接する画素点の画素値を補間することにより得られ、又は、前記第2の参照ブロックにおける隣接する画素点の画素値をコピーすることにより得られる。
【0340】
前記処理モジュール92は、前記第1の参照ブロックの第1の画素値及び前記第2の参照ブロックの第2の画素値に基づいて、第1のオリジナル動きベクトルと第2のオリジナル動きベクトルとを調整し、前記第1のオリジナル動きベクトルに対応する第1の目標動きベクトルと、前記第2のオリジナル動きベクトルに対応する第2の目標動きベクトルとを得る時に、具体的に、
前記現在のブロックが少なくとも1つのサブブロックを含む場合、前記現在のブロックの各サブブロックに対して、前記第1の画素値及び前記第2の画素値に基づいて、前記第1のオリジナル動きベクトルと前記第2のオリジナル動きベクトルとを調整し、前記サブブロックの第1の目標動きベクトル及び第2の目標動きベクトルを得ること、に用いられる。
【0341】
例えば、前記第1の画素値及び前記第2の画素値に基づいて、前記サブブロックの第1の整数画素動きベクトル調整値及び第2の整数画素動きベクトル調整値、及び/又は、前記サブブロックの第1のサブ画素動きベクトル調整値及び第2のサブ画素動きベクトル調整値を確定し、前記第1の整数画素動きベクトル調整値及び/又は第1のサブ画素動きベクトル調整値に基づいて、前記第1のオリジナル動きベクトルを調整し、前記サブブロックの第1の目標動きベクトルを得て、前記第2の整数画素動きベクトル調整値及び/又は第2のサブ画素動きベクトル調整値に基づいて、前記第2のオリジナル動きベクトルを調整し、前記サブブロックの第2の目標動きベクトルを得る。
【0342】
前記処理モジュール92は、前記第1の画素値及び前記第2の画素値に基づいて、前記サブブロックの第1の整数画素の動きベクトル調整値及び第2の整数画素の動きベクトル調整値と、前記サブブロックの第1のサブ画素の動きベクトル調整値及び第2のサブ画素の動きベクトル調整値とを確定する時に、具体的に、
前記第1のオリジナル動きベクトル又は第2のオリジナル動きベクトルを中心動きベクトルに確定し、
前記中心動きベクトルに対応するエッジ動きベクトルを確定し、
前記第1の画素値及び前記第2の画素値に基づいて、前記中心動きベクトルに対応する第1のコスト値及び前記エッジ動きベクトルに対応する第2のコスト値を取得し、
前記第1のコスト値及び前記第2のコスト値に基づいて、最適動きベクトルとして、前記中心動きベクトル及び前記エッジ動きベクトルから1つの動きベクトルを選択し、
終了条件が満たされるか否かを判断し、終了条件が満たされない場合、前記最適動きベクトルを中心動きベクトルに確定し、前記中心動きベクトルに対応するエッジ動きベクトルを確定することに戻り、
終了条件が満たされる場合、前記最適動きベクトルに基づいて、前記サブブロックの第1の整数画素動きベクトル調整値及び第2の整数画素動きベクトル調整値を確定し、前記最適動きベクトルに基づいて、前記サブブロックの第1のサブ画素動きベクトル調整値及び第2のサブ画素動きベクトル調整値を確定すること、に用いられる。
【0343】
前記処理モジュール92は、前記中心動きベクトルに対応するエッジ動きベクトルを確定する時に、具体的に、
前記中心動きベクトル(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+right,y+down)のデフォルト値は(x-S,y-S)であり、
エッジ動きベクトル(x+S、y)のコスト値がエッジ動きベクトル(x-S、y)のコスト値より小さい場合、rightはSであり、エッジ動きベクトル(x、y+S)のコスト値がエッジ動きベクトル(x、y-S)のコスト値より小さい場合、downはSであり、又は、エッジ動きベクトル(x+S、y)のコスト値がエッジ動きベクトル(x-S、y)のコスト値以下の場合、rightはSであり、エッジ動きベクトル(x、y+S)のコスト値がエッジ動きベクトル(x、y-S)のコスト値以下の場合、downはSである。
【0344】
前記処理モジュール92は、前記第1の画素値及び前記第2の画素値に基づいて、前記中心動きベクトルに対応する第1のコスト値及び前記エッジ動きベクトルに対応する第2のコスト値を取得する時に、具体的に、
ダウンサンプリングされていない第1の画素値及びダウンサンプリングされていない第2の画素値に基づいて、前記中心動きベクトルに対応する第1のコスト値及び前記エッジ動きベクトルに対応する第2のコスト値を取得すること、又は、
前記第1の画素値に対してダウンサンプリング操作を行い、前記第2の画素値に対してダウンサンプリング操作を行い、ダウンサンプリングされた第1の画素値及びダウンサンプリングされた第2の画素値に基づいて、前記中心動きベクトルに対応する第1のコスト値及び前記エッジ動きベクトルに対応する第2のコスト値を取得すること、又は、
前記第1の画素値に対してシフト及びダウンサンプリング操作を行い、前記第2の画素値に対してシフト及びダウンサンプリング操作を行い、処理された第1の画素値及び処理された第2の画素値に基づいて、前記中心動きベクトルに対応する第1のコスト値及び前記エッジ動きベクトルに対応する第2のコスト値を取得すること、に用いられる。
【0345】
前記処理モジュール92は、前記第1の画素値及び前記第2の画素値に基づいて、前記サブブロックの第1の整数画素の動きベクトル調整値及び第2の整数画素の動きベクトル調整値と、前記サブブロックの第1のサブ画素の動きベクトル調整値及び第2のサブ画素の動きベクトル調整値とを確定する時に、具体的に、
前記第1のオリジナル動きベクトル又は第2のオリジナル動きベクトルを中心として、周囲の動きベクトルから一部又は全ての動きベクトルを選択し、選択された動きベクトルを候補動きベクトルとすることと、
前記第1の画素値及び前記第2の画素値に基づいて、前記第1のオリジナル動きベクトル又は第2のオリジナル動きベクトルに対応する第3のコスト値及び前記候補動きベクトルに対応する第4のコスト値を取得することと、
前記第3のコスト値及び前記第4のコスト値に基づいて、最適動きベクトルとして、前記第1のオリジナル動きベクトル又は第2のオリジナル動きベクトル及び前記候補動きベクトルから1つの動きベクトルを選択することと、
前記最適動きベクトルに基づいて、前記サブブロックの第1の整数画素動きベクトル調整値及び第2の整数画素動きベクトル調整値を確定し、前記最適動きベクトルに基づいて、前記サブブロックの第1のサブ画素動きベクトル調整値及び第2のサブ画素動きベクトル調整値を確定することと、に用いられる。
【0346】
前記処理モジュール92は、前記最適動きベクトルに基づいて前記サブブロックの第1の整数画素動きベクトル調整値及び第2の整数画素動きベクトル調整値を確定する時に、具体的に、前記最適動きベクトル及び前記第1のオリジナル動きベクトルに基づいて、前記サブブロックの第1の整数画素動きベクトル調整値を確定し、前記第1の整数画素動きベクトル調整値に基づいて、前記サブブロックの第2の整数画素動きベクトル調整値を確定すること、に用いられる。
【0347】
前記処理モジュール92は、前記最適動きベクトルに基づいて前記サブブロックの第1のサブ画素動きベクトル調整値及び第2のサブ画素動きベクトル調整値を確定する時に、具体的に、前記最適動きベクトルに対応するコスト値及び前記最適動きベクトルに対応するエッジ動きベクトルに対応するコスト値に基づいて、前記サブブロックの第1のサブ画素動きベクトル調整値を確定し、第1のサブ画素動きベクトル調整値に基づいて、前記サブブロックの第2のサブ画素動きベクトル調整値を確定すること、に用いられる。
【0348】
前記コーデックモジュール93は、前記第1の目標動きベクトル及び前記第2の目標動きベクトルに基づいて前記現在のブロックを符号化又は復号化する時に、具体的に、前記現在のブロックが少なくとも1つのサブブロックを含む場合、前記現在のブロックの各サブブロックに対して、前記サブブロックの第1の目標動きベクトルに基づいて前記サブブロックに対応する第3の参照ブロックを確定し、前記サブブロックの第2の目標動きベクトルに基づいて前記サブブロックに対応する第4の参照ブロックを確定することと、前記第3の参照ブロックの第3の画素値及び前記第4の参照ブロックの第4の画素値に基づいて、重み付けを行い、サブブロックの予測値を得ることと、各サブブロックの予測値に基づいて、前記現在のブロックの予測値を確定することと、に用いられる。
【0349】
前記コーデックモジュール93は、前記サブブロックの第1の目標動きベクトルに基づいて前記サブブロックに対応する第3の参照ブロックを確定し、前記サブブロックの第2の目標動きベクトルに基づいて前記サブブロックに対応する第4の参照ブロックを確定する時に、具体的に、前記サブブロックの第1の目標動きベクトルに基づいて、第1の参照フレームから前記サブブロックに対応する第5の参照ブロックを確定し、前記第5の参照ブロックにおける画素値を補間し、前記第3の参照ブロックを得ることと、
前記サブブロックの第2の目標動きベクトルに基づいて、第2の参照フレームから前記サブブロックに対応する第6の参照ブロックを確定し、前記第6の参照ブロックにおける画素値を補間し、前記第4の参照ブロックを得ることと、に用いられる。
【0350】
前記コーデックモジュール93は、前記サブブロックの第1の目標動きベクトルに基づいて前記サブブロックに対応する第3の参照ブロックを確定し、前記サブブロックの第2の目標動きベクトルに基づいて前記サブブロックに対応する第4の参照ブロックを確定する時に、具体的に、前記サブブロックの第1の目標動きベクトルに基づいて、第1の参照フレームから前記サブブロックに対応する第7の参照ブロックを確定し、前記第7の参照ブロックにおける画素値を利用して第8の参照ブロックを構築し、前記第8の参照ブロックにおける画素値を補間し、前記第3の参照ブロックを得ることと、前記サブブロックの第2の目標動きベクトルに基づいて、第2の参照フレームから前記サブブロックに対応する第9の参照ブロックを確定し、前記第9の参照ブロックにおける画素値を利用して第10の参照ブロックを構築し、前記第10の参照ブロックにおける画素値を補間し、前記第4の参照ブロックを得ることと、に用いられる。
【0351】
前記装置は、さらに、前記現在のブロックのために、前記第1の目標動きベクトル及び第2の目標動きベクトルを格納する、記憶モジュールを含み、前記第1の目標動きベクトル及び第2の目標動きベクトルは、現在のフレームのループフィルタリングに用いられ、前記第1の目標動きベクトル及び前記第2の目標動きベクトルは後続のフレームの時間領域の参照に用いられ、及び/又は、前記第1の目標動きベクトル及び前記第2の目標動きベクトルは、現在のフレームの空間領域の参照に用いられる。
【0352】
実施例39:
本願の実施例に係る復号化デバイスは、ハードウェア的に、そのハードウェア構成模式図について、具体的に
図10を参照できる。前記復号化デバイスは、プロセッサ101と
機械可読記憶媒体102とを含み、前記機械可読記憶媒体102は前記プロセッサ101によって実行可能な機械実行可能な命令を格納し、前記プロセッサ101は、機械実行可能な命令を実行し、本願の上記例示で開示された方法を実現する。例えば、プロセッサは、機械実行可能な命令を実行することに用いられ、
現在のブロックの特徴情報が特定の条件を満たす場合、前記現在のブロックの第1のオリジナル動きベクトルに基づいて、前記現在のブロックに対応する第1の参照ブロックを確定し、前記現在のブロックの第2のオリジナル動きベクトルに基づいて、前記現在のブロックに対応する第2の参照ブロックを確定するステップと、前記第1の参照ブロックの第1の画素値及び前記第2の参照ブロックの第2の画素値に基づいて、第1のオリジナル動きベクトルと第2のオリジナル動きベクトルとを調整し、前記第1のオリジナル動きベクトルに対応する第1の目標動きベクトルと、前記第2のオリジナル動きベクトルに対応する第2の目標動きベクトルとを得るステップと、前記第1の目標動きベクトル及び前記第2の目標動きベクトルに基づいて、前記現在のブロックを復号化するステップと、を実現する。
【0353】
本願の実施例に係る符号化デバイスは、ハードウェア的に、そのハードウェア構成模式図は、具体的に
図11を参照できる。前記符号化デバイスは、プロセッサ111及び機械可読記憶媒体112を含み、前記機械可読記憶媒体112は前記プロセッサ111によって実行可能な機械実行可能な命令を格納し、前記プロセッサ111は、機械実行可能な命令を実行し、本願の上記例示で開示された方法を実現する。例えば、プロセッサ111は、機械実行可能な命令を実行することに用いられ、現在のブロックの特徴情報が特定の条件を満たす場合、前記現在のブロックの第1のオリジナル動きベクトルに基づいて、前記現在のブロックに対応する第1の参照ブロックを確定し、前記現在のブロックの第2のオリジナル動きベクトルに基づいて、前記現在のブロックに対応する第2の参照ブロックを確定するステップと、前記第1の参照ブロックの第1の画素値及び前記第2の参照ブロックの第2の画素値に基づいて、第1のオリジナル動きベクトルと第2のオリジナル動きベクトルとを調整し、前記第1のオリジナル動きベクトルに対応する第1の目標動きベクトルと、前記第2のオリジナル動きベクトルに対応する第2の目標動きベクトルとを得るステップと、前記第1の目標動きベクトル及び前記第2の目標動きベクトルに基づいて前記現在のブロックを符号化するステップと、を実現する。
【0354】
上記方法と同様な発明概念に基づいて、本願の実施例は、さらに、機械可読記憶媒体を提供する。前記機械可読記憶媒体には、複数のコンピュータ命令が格納されており、前記コンピュータ命令がプロセッサによって実行されると、本願の上記例示で開示されたコーデック方法を実現できる。ここで、上記機械可読記憶媒体は、任意の電気、磁気、光学又は他の物理的記憶装置であってよく、例えば実行可能な命令、データ等の情報を含むか又は格納できる。例えば、機械可読記憶媒体は、RAM(Random Access Memory、ランダムアクセスメモリ)、揮発性メモリ、不揮発性メモリ、フラッシュメモリ、メモリドライブ(例えばハードディスクドライブ)、ソリッドステートドライブ、任意のタイプのメモリディスク(例えば光ディスク、DVD等)、あるいは、類似の記憶媒体、又はそれらの組み合わせであってもよい。
【0355】
上記実施例に説明されたシステム、装置、モジュール又はユニットは、具体的にはコンピュータチップ又はエンティティで実現されてもよく、又はある機能を有する製品で実現されてもよい。典型的な実現するデバイスは、コンピュータであり、コンピュータは、具体的に、パーソナルコンピュータ、ラップトップコンピュータ、携帯電話、カメラ付き携帯電話、スマートフォン、携帯情報端末、メディアプレーヤ、ナビゲーションデバイス、電子メール送受信デバイス、ゲームコンソール、タブレットコンピュータ、ウェアラブルデバイス、又はこれらのデバイスの任意のいくつかの組み合わせであってもよい。
【0356】
説明の便宜上、以上の装置を説明する時に、機能により、様々な要素に分けてそれぞれ説明した。勿論、本願を実施する時に、同一又は複数のソフトウェア及び/又はハードウェアで、各要素の機能を実現できる。
【0357】
当業者であれば、本願の実施例は方法、システム、又はコンピュータプログラム製品として提供できることを理解できる。従って、本願は、完全にハードウェアの実施例、完全にソフトウェアの実施例、又はソフトウェアとハードウェアを組み合わせた実施例の形態であってもよい。さらに、本願の実施例は、コンピュータに使用可能なプログラムコードを含む1つ又は複数のコンピュータ使用可能な記憶媒体(ディスクメモリ、CD-ROM、光学メモリなど)に実装されるコンピュータプログラム製品の形であってもよい。
【0358】
本願は、本願の実施例係る方法、デバイス(システム)、及びコンピュータプログラム製品のフローチャート及び/又はブロック図を参照して説明されるものである。フローチャート図及び/又はブロック図における各処理及び/又は各ブロック、そしてフローチャート図及び/又はブロック図における処理及び/又はブロックの組み合わせは、コンピュータプログラム命令で実現できることが理解される。これらのコンピュータプログラム命令を汎用コンピュータ、専用コンピュータ、組み込みプロセッサ、又は他のプログラミング可能なデータ処理デバイスのプロセッサに提供して1つの機械を生成できて、コンピュータ又は他のプログラミング可能なデータ処理デバイスのプロセッサによって実行される命令がフローチャートの1つ又は複数の処理及び/又はブロック図の1つ又は複数のブロックに指定された機能を実現するための装置を生成するように構成される。
【0359】
また、これらのコンピュータプログラム命令はコンピュータ又は他のプログラミング可能なデータ処理デバイスにおける特定の方式で動作するコンピュータ可読メモリに記憶されることができて、当該コンピュータ可読メモリに記憶された命令が、命令装置を含む製品を生成し、当該命令装置がフローチャートの1つ又は複数の処理及び/又はブロック図の1つ又は複数のブロックに指定された機能を実現するように構成される。
【0360】
これらのコンピュータプログラム命令はコンピュータ又は他のプログラミング可能なデータ処理デバイスにインストールされることができて、コンピュータ又は他のプログラミング可能なデータ処理デバイスで一連の処理ステップを実行してコンピュータで処理を実現することで、コンピュータ又は他のプログラミング可能なデータ処理デバイスで実行される命令がフローチャートの1つ又は複数の処理及び/又はブロック図の1つ又は複数のブロックに指定された機能を実現するように構成される。
【0361】
以上は本願の実施例に過ぎず、本願を限定するものではない。当業者にとって、本願に対して様々な変更及び変化を行うことができる。本願の精神及び原理を逸脱しない範囲で行われる任意の変更、等価置換、改良等は、いずれも本願の特許請求の範囲内に含まれる。