IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ グァンドン オッポ モバイル テレコミュニケーションズ コーポレーション リミテッドの特許一覧

特開2024-69564ビデオエンコーディング/デコーディング方法、ビデオエンコーダ、ビデオデコーダ、ビデオエンコーディング装置、ビデオデコーディング装置及びコンピュータ可読記憶媒体
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024069564
(43)【公開日】2024-05-21
(54)【発明の名称】ビデオエンコーディング/デコーディング方法、ビデオエンコーダ、ビデオデコーダ、ビデオエンコーディング装置、ビデオデコーディング装置及びコンピュータ可読記憶媒体
(51)【国際特許分類】
   H04N 19/52 20140101AFI20240514BHJP
   H04N 19/70 20140101ALI20240514BHJP
【FI】
H04N19/52
H04N19/70
【審査請求】有
【請求項の数】13
【出願形態】OL
(21)【出願番号】P 2024042901
(22)【出願日】2024-03-18
(62)【分割の表示】P 2021522451の分割
【原出願日】2019-11-08
(31)【優先権主張番号】10-2018-0136262
(32)【優先日】2018-11-08
(33)【優先権主張国・地域又は機関】KR
(31)【優先権主張番号】10-2018-0167979
(32)【優先日】2018-12-21
(33)【優先権主張国・地域又は機関】KR
(71)【出願人】
【識別番号】516227559
【氏名又は名称】オッポ広東移動通信有限公司
【氏名又は名称原語表記】GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP., LTD.
【住所又は居所原語表記】No. 18 Haibin Road,Wusha, Chang’an,Dongguan, Guangdong 523860 China
(74)【代理人】
【識別番号】100120031
【弁理士】
【氏名又は名称】宮嶋 学
(74)【代理人】
【識別番号】100107582
【弁理士】
【氏名又は名称】関根 毅
(74)【代理人】
【識別番号】100152205
【弁理士】
【氏名又は名称】吉田 昌司
(74)【代理人】
【識別番号】100137523
【弁理士】
【氏名又は名称】出口 智也
(74)【代理人】
【識別番号】100120385
【弁理士】
【氏名又は名称】鈴木 健之
(72)【発明者】
【氏名】リー、ベグン
(57)【要約】      (修正有)
【課題】マージオフセットベクトルをシグナリングするビデオエンコーディング/デコーディング方法、ビデオエンコーダ、ビデオデコーダ、ビデオエンコーディング装置、ビデオデコーディング装置及びコンピュータ可読記憶媒体を提供する。
【解決手段】ビデオデコーディング方法は、現在のブロックにマージオフセットベクトルエンコーディング方法が適用されるか否かを決定するステップと、前記現在のブロックに対するマージ候補リストを生成するステップと、前記マージ候補リストに基づいて、前記現在のブロックに対するマージ候補を特定するステップと、前記マージ候補に基づいて、前記現在のブロックに対する動きベクトルを誘導するステップと、を含む。
【選択図】図14
【特許請求の範囲】
【請求項1】
ビデオデコーディング方法であって、
現在のブロックにマージオフセットベクトルエンコーディング方法が適用されるか否かを決定するステップと、
前記現在のブロックに対するマージ候補リストを生成するステップと、
前記マージ候補リストに基づいて、前記現在のブロックに対するマージ候補を特定するステップと、
前記マージ候補に基づいて、前記現在のブロックに対する動きベクトルを誘導するステップと、
を含み、
前記現在のブロックに前記マージオフセットベクトルエンコーディング方法が適用される場合、前記現在のブロックの動きベクトルは、前記マージ候補の動きベクトルにオフセットベクトルを加算して誘導され、前記マージ候補リストが含むことができるマージ候補の最大数が1である場合、インデックス情報をデコードせずに前記マージ候補が決定され、前記インデックス情報は前記現在のブロックのマージ候補を示し、
ベクトル大きさ候補の最大値又は最小値のうちの少なくとも1つは、前記現在のブロックに対する動きベクトルの精度に応じて異なるように設定される、
ことを特徴とするビデオデコーディング方法。
【請求項2】
前記オフセットベクトルの大きさは、ベクトル大きさ候補のうちの1つを特定する第一インデックス情報に基づいて決定される、
ことを特徴とする請求項1に記載のビデオデコーディング方法。
【請求項3】
前記ベクトル大きさ候補の最大値又は最小値のうちの少なくとも1つは、前記ベクトル大きさ候補の数値を示すフラグの値に基づいて異なるように設定され、前記フラグはピクチャレベルでシグナルリングされる、
ことを特徴とする請求項2に記載のビデオデコーディング方法。
【請求項4】
前記オフセットベクトルの方向は、ベクトル方向候補のうちのいずれか1つを特定する第二インデックス情報に基づいて決定される、
ことを特徴とする請求項2~3のいずれか一項に記載のビデオデコーディング方法。
【請求項5】
ビデオエンコーディング方法であって、
現在のブロックにマージオフセットベクトルエンコーディング方法が適用されるか否かを決定するステップと、
前記現在のブロックに対するマージ候補リストを生成するステップと、
前記マージ候補リストに基づいて、前記現在のブロックに対するマージ候補を特定するステップと、
前記マージ候補に基づいて、前記現在のブロックに対する動きベクトルを誘導するステップと、
を含み、
前記現在のブロックに前記マージオフセットベクトルエンコーディング方法が適用される場合、前記現在のブロックの動きベクトルは、前記マージ候補の動きベクトルにオフセットベクトルを加算して誘導され、前記マージ候補リストが含むことができるマージ候補の最大数が1である場合、インデックス情報のエンコーディングは省略され、前記インデックス情報は前記現在のブロックのマージ候補を示し、
ベクトル大きさ候補の最大値又は最小値のうちの少なくとも1つは、前記現在のブロックに対する動きベクトルの精度に応じて異なるように設定される、
ことを特徴とするビデオエンコーディング方法。
【請求項6】
複数のベクトル大きさ候補のうちの前記オフセットベクトルの大きさを示すベクトル大きさ候補を特定するための第一インデックス情報をエンコードするステップをさらに含む、
ことを特徴とする請求項5に記載のビデオエンコーディング方法。
【請求項7】
前記ベクトル大きさ候補の数値を示すフラグをエンコードするステップをさらに含み、前記フラグの値に応じて前記ベクトル大きさ候補の最大値又は最小値のうちの少なくとも1つが異なるように設定され、前記フラグは、ピクチャレベルでエンコードされる、
ことを特徴とする請求項6に記載のビデオエンコーディング方法。
【請求項8】
複数のベクトル方向候補のうちの前記オフセットベクトルの方向を示すベクトル方向候補を特定するための第二インデックス情報をエンコードするステップをさらに含む、
ことを特徴とする請求項6~7のいずれか一項に記載のビデオエンコーディング方法。
【請求項9】
ビデオデコーダであって、
プロセッサ及びメモリを含み、
前記メモリはコンピュータプログラムを格納するために用いられ、前記プロセッサは、前記メモリに格納されたコンピュータプログラムを実行することにより、請求項1~4のいずれか一項に記載の方法を実行するために用いられる、
ことを特徴とするビデオデコーダ。
【請求項10】
ビデオエンコーダであって、
メモリ及びプロセッサを含み、
前記メモリはコンピュータプログラムを格納するために用いられ、前記プロセッサは、前記メモリに格納されたコンピュータプログラムを実行することにより、請求項5~8のいずれか一項に記載の方法を実行するために用いられる、
ことを特徴とするビデオエンコーダ。
【請求項11】
ビデオデコーディング装置であって、
現在のブロックにマージオフセットベクトルエンコーディング方法が適用されるか否かを決定し、前記現在のブロックに対するマージ候補リストを生成し、前記マージ候補リストに基づいて前記現在のブロックに対するマージ候補を特定し、前記マージ候補に基づいて前記現在のブロックに対する動きベクトルを誘導するインター予測部を含み、
前記現在のブロックに前記マージオフセットベクトルエンコーディング方法が適用される場合、前記現在のブロックの動きベクトルは、前記マージ候補の動きベクトルにオフセットベクトルを加算して誘導され、前記マージ候補リストが含むことができるマージ候補の最大数が1である場合、インデックス情報をデコードせずに前記マージ候補が決定され、前記インデックス情報は前記現在のブロックのマージ候補を示し、ベクトル大きさ候補の最大値又は最小値のうちの少なくとも1つは、前記現在のブロックに対する動きベクトルの精度に応じて異なるように設定される、
ことを特徴とするビデオデコーディング装置。
【請求項12】
ビデオエンコーディング装置であって、
現在のブロックにマージオフセットベクトルエンコーディング方法が適用されるか否かを決定し、前記現在のブロックに対するマージ候補リストを生成し、前記マージ候補リストに基づいて前記現在のブロックに対するマージ候補を特定し、前記マージ候補に基づいて前記現在のブロックに対する動きベクトルを誘導するインター予測部を含み、
前記現在のブロックに前記マージオフセットベクトルエンコーディング方法が適用される場合、前記現在のブロックの動きベクトルは、前記マージ候補の動きベクトルにオフセットベクトルを加算して誘導され、前記マージ候補リストが含むことができるマージ候補の最大数が1である場合、インデックス情報のエンコーディングは省略され、前記インデックス情報は前記現在のブロックのマージ候補を示し、ベクトル大きさ候補の最大値又は最小値のうちの少なくとも1つは、前記現在のブロックに対する動きベクトルの精度に応じて異なるように設定される、
ことを特徴とするビデオエンコーディング装置。
【請求項13】
コンピュータ可読記憶媒体であって、
コンピュータプログラムを格納するために用いられ、前記コンピュータプログラムがプロセッサによって実行されると、請求項1~4のいずれか一項に記載の方法又は請求項5~8のいずれか一項に記載の方法を実行する、
ことを特徴とするコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ビデオエンコーディング/デコーディング方法、ビデオエンコーダ、ビデオデコーダ、ビデオエンコーディング装置、ビデオデコーディング装置及びコンピュータ可読記憶媒体に関する。
【背景技術】
【0002】
ディスプレイパネルがますます大型化になることに伴って、ますますさらに高品質のビデオサービスが要求されている。高精細ビデオサービスの最大の問題は、データ量が大幅に増加するものであり、このような問題を解決するために、ビデオ圧縮率を向上させるための研究が活発に行われている。代表的な例として、2009年にMPEG(Motion Picture Experts Group)とITU-T(International Telecommunication Union-Telecommunication)傘下のVCEG(Video Coding Experts Group)は、JCT-VC(Joint Collaborative Team on Video Coding)を結成した。H.264 / AVCに比べて、JCT-VCは約2倍の圧縮性能を有するビデオ圧縮標準であるHEVC(High Efficiency Video Coding)を提案し、2013年1月25日に標準は承認された。高精細ビデオサービスの急激な発展に伴い、HEVCの性能もますますその限界を示している。
【発明の概要】
【0003】
本発明は、独立請求項によって明示される。さらなる実施例は、従属請求項によって明示される。
【0004】
本発明に係るビデオデコーディング方法は、現在のブロックにマージオフセットベクトルエンコーディング方法が適用されるか否かを決定するステップと、前記現在のブロックに対するマージ候補リストを生成するステップと、前記マージ候補リストに基づいて、前記現在のブロックに対するマージ候補を特定するステップと、及び前記マージ候補に基づいて、前記現在のブロックに対する動きベクトルを誘導するステップと、を含む。この時、前記現在のブロックに前記マージオフセットベクトルエンコーディング方法が適用される場合、前記現在のブロックの動きベクトルは、前記マージ候補の動きベクトルにオフセットベクトルを加算して誘導され、前記マージ候補リストが含むことができるマージ候補の最大数が複数である場合、前記現在のブロックの前記マージ候補は、前記マージ候補のうちのいずれか1つを示すビットストリームからデコードされるインデックス情報に基づいて選択され、前記最大数が1である場合、前記インデックス情報をデコードせずに前記マージ候補が決定されることができる。
【0005】
本発明に係るビデオエンコーディング方法は、現在のブロックにマージオフセットベクトルエンコーディング方法が適用されるか否かを決定するステップと、前記現在のブロックに対するマージ候補リストを生成するステップと、前記マージ候補リストに基づいて、前記現在のブロックに対するマージ候補を特定するステップと、前記マージ候補に基づいて、前記現在のブロックに対する動きベクトルを誘導するステップと、を含み、前記現在のブロックに前記マージオフセットベクトルエンコーディング方法が適用される場合、前記現在のブロックの動きベクトルは、前記マージ候補の動きベクトルにオフセットベクトルを加算して誘導され、前記マージ候補リストが含むことができるマージ候補の最大数が複数である場合、前記マージ候補のうちの前記現在のブロックの前記マージ候補を示すインデックス情報はエンコードされ、前記最大数が1である場合、前記インデックス情報のエンコーディングは省略される。
【0006】
本発明に係るビデオでコーダは、プロセッサ及びメモリを含み、前記メモリはコンピュータプログラムを格納するために用いられ、前記プロセッサは、前記メモリに格納されたコンピュータプログラムを実行することにより、現在のブロックにマージオフセットベクトルエンコーディング方法が適用されるか否かを決定し、前記現在のブロックに対するマージ候補リストを生成し、前記マージ候補リストに基づいて前記現在のブロックに対するマージ候補を特定し、前記マージ候補に基づいて前記現在のブロックに対する動きベクトルを誘導する。前記現在のブロックに前記マージオフセットベクトルエンコーディング方法が適用される場合、前記現在のブロックの動きベクトルは、前記マージ候補の動きベクトルにオフセットベクトルを加算して誘導され、前記マージ候補リストが含むことができるマージ候補の最大数が複数である場合、前記現在のブロックの前記マージ候補は、前記マージ候補のうちのいずれか1つを示すビットストリームからデコードされるインデックス情報に基づいて選択され、前記最大数が1である場合、前記インデックス情報をデコードせずに前記マージ候補が決定される。
【0007】
本発明に係るビデオエンコーダは、プロセッサ及びメモリを含み、前記メモリはコンピュータプログラムを格納するために用いられ、前記プロセッサは、前記メモリに格納されたコンピュータプログラムを実行することにより、現在のブロックにマージオフセットベクトルエンコーディング方法が適用されるか否かを決定し、前記現在のブロックに対するマージ候補リストを生成し、前記マージ候補リストに基づいて前記現在のブロックに対するマージ候補を特定し、前記マージ候補に基づいて前記現在のブロックに対する動きベクトルを誘導する。前記現在のブロックに前記マージオフセットベクトルエンコーディング方法が適用される場合、前記現在のブロックの動きベクトルは、前記マージ候補の動きベクトルにオフセットベクトルを加算して誘導され、前記マージ候補リストが含むことができるマージ候補の最大数が複数である場合、前記マージ候補のうちの前記現在のブロックの前記マージ候補を示すインデックス情報はエンコードされ、前記最大数が1である場合、前記インデックス情報のエンコーディングは省略される。
【0008】
本発明に係るビデオデコーディング装置は、現在のブロックにマージオフセットベクトルエンコーディング方法が適用されるか否かを決定し、前記現在のブロックに対するマージ候補リストを生成し、前記マージ候補リストに基づいて前記現在のブロックに対するマージ候補を特定し、前記マージ候補に基づいて前記現在のブロックに対する動きベクトルを誘導するインター予測部を含み、前記現在のブロックに前記マージオフセットベクトルエンコーディング方法が適用される場合、前記現在のブロックの動きベクトルは、前記マージ候補の動きベクトルにオフセットベクトルを加算して誘導され、前記マージ候補リストが含むことができるマージ候補の最大数が複数である場合、前記現在のブロックの前記マージ候補は、前記マージ候補のうちのいずれか1つを示すビットストリームからデコードされるインデックス情報に基づいて選択され、前記最大数が1である場合、前記インデックス情報をデコードせずに前記マージ候補が決定される。
【0009】
本発明に係るビデオエンコーディング装置は、現在のブロックにマージオフセットベクトルエンコーディング方法が適用されるか否かを決定し、前記現在のブロックに対するマージ候補リストを生成し、前記マージ候補リストに基づいて前記現在のブロックに対するマージ候補を特定し、前記マージ候補に基づいて前記現在のブロックに対する動きベクトルを誘導するインター予測部を含み、前記現在のブロックに前記マージオフセットベクトルエンコーディング方法が適用される場合、前記現在のブロックの動きベクトルは、前記マージ候補の動きベクトルにオフセットベクトルを加算して誘導され、前記マージ候補リストが含むことができるマージ候補の最大数が複数である場合、前記マージ候補のうちの前記現在のブロックの前記マージ候補を示すインデックス情報はエンコードされ、前記最大数が1である場合、前記インデックス情報のエンコーディングは省略される。
【0010】
本発明に係るコンピュータ可読記憶媒体は、コンピュータプログラムを格納するために用いられ、前記コンピュータプログラムがプロセッサによって実行されると、ビデオデコーディング方法又はビデオエンコーディング方法を実行する。
【図面の簡単な説明】
【0011】
図1図1は、本発明の一実施形態に係るビデオエンコーダ(エンコーダ)を示すブロック図である。
図2図2は、本発明の一実施形態に係るビデオデコーダ(デコーダ)を示すブロック図である。
図3図3は、本発明の一実施形態に係る基本的なコーディングツリーユニットを示す図である。
図4図4は、コーディングブロックの様々な分割形態を示す図である。
図5図5は、コーディングツリーユニットの分割パターンを示す図である。
図6図6は、データ基本ユニットの形態を示す図である。
図7図7は、コーディングブロックが複数のサブブロックに分割される例を示す図である。
図8図8は、コーディングブロックが複数のサブブロックに分割される例を示す図である。
図9図9は、本発明の一実施形態に係るインター予測方法のフローチャートである。
図10図10は、オブジェクトの非線形運動を示す図である。
図11図11は、本発明の一実施形態に係るアフィンモーションに基づくインター予測方法のフローチャートである。
図12図12は、各アフィンモーションモデルのアフィンシードベクトルを例示した図である。
図13図13は、4パラメータモーションモデルにおけるサブブロックのアフィンベクトルを例示した図である。
図14図14は、マージモードにおける現在のブロックの動き情報を誘導する過程のフローチャートである。
図15図15は、マージ候補を誘導するために使用される候補ブロックを例示した図である。
図16図16は、基準サンプルの位置を示す図である。
図17図17は、マージ候補を誘導するために使用される候補ブロックを例示した図である。
図18図18は、基準サンプルの位置が変更される例を示す図である。
図19図19は、基準サンプルの位置が変更される例を示す図である。
図20図20は、インター領域モーション情報テーブルを更新する様態を示す図である。
図21図21は、インター領域マージ候補テーブルを更新する様態を示す図である。
図22図22は、既に格納されたインター領域マージ候補のインデックスが更新される例を示す図である。
図23図23は代表サブブロックの位置を示す図である。
図24図24は、各インター予測モードごとにインター領域モーション情報テーブルが生成される例を示す図である。
図25図25は、長期モーション情報テーブルに含まれているインター領域マージ候補がマージ候補リストに追加された例を示す図である。
図26図26は、マージ候補のうちの一部のみに対して冗長性検査が実行される例を示す図である。
図27図27は、特定のマージ候補との冗長性検査が省略した例を示す図である。
図28図28は、オフセットベクトルの大きさを示すdistance_idx及びオフセットベクトルの方向を示すdirection_idxの値によるオフセットベクトルを示す図である。
図29図29は、オフセットベクトルの大きさを示すdistance_idx及びオフセットベクトルの方向を示すdirection_idxの値によるオフセットベクトルを示す図である。
図30図30は、三角分割技法が適用される場合、コーディングブロックの分割様態を示す図である。
図31図31は、各サブユニットのオフセットベクトルが異なるように設定された例を示す図である。
図32図32は、リファインマージ候補が取ることができる動きベクトル候補を示す図である。
図33図33は、マージリファインメントオフセットリストの構成を示す図である。
図34図34は、マージオフセット候補によって特定されるオフセットベクトルを示す図である。
図35図35は、マージオフセット候補によって特定されるオフセットベクトルを示す図である。
図36図36は、モーションベクトル予測候補を誘導するために使用される候補ブロックを示す図である。
図37図37は、リファインモーションベクトル予測候補として設定することができる動きベクトル候補を示す図である。
図38図38は、予測ベクトルリファインメントオフセットリストの構成を示す図である。
【発明を実施するための形態】
【0012】
以下、図面を参照して、本発明の実施例を詳細に説明する。
【0013】
本発明に係るビデオデコーディング方法は、現在のブロックにマージオフセットベクトルエンコーディング方法が適用されるか否かを決定するステップと、前記現在のブロックに対するマージ候補リストを生成するステップと、前記マージ候補リストに基づいて、前記現在のブロックに対するマージ候補を特定するステップと、及び前記マージ候補に基づいて、前記現在のブロックに対する動きベクトルを誘導するステップと、を含む。この時、前記現在のブロックに前記マージオフセットベクトルエンコーディング方法が適用される場合、前記現在のブロックの動きベクトルは、前記マージ候補の動きベクトルにオフセットベクトルを加算して誘導され、前記マージ候補リストが含むことができるマージ候補の最大数が複数である場合、前記現在のブロックの前記マージ候補は、前記マージ候補のうちのいずれか1つを示すビットストリームからデコードされるインデックス情報に基づいて選択され、前記最大数が1である場合、前記インデックス情報をデコードせずに前記マージ候補が決定されることができる。
【0014】
一実施形態では、前記オフセットベクトルの大きさは、ベクトル大きさ候補のうちの1つを特定する第一インデックス情報に基づいて決定される。
【0015】
一実施形態では、前記ベクトル大きさ候補の最大値又は最小値のうちの少なくとも1つは、前記ベクトル大きさ候補の数値を示すフラグの値に基づいて異なるように設定される。
【0016】
一実施形態では、前記フラグはピクチャレベルでシグナルリングされる。
【0017】
一実施形態では、前記ベクトル大きさ候補の最大値又は最小値のうちの少なくとも1つは、前記現在のブロックに対する動きベクトルの精度に応じて異なるように設定される。
【0018】
一実施形態では、前記オフセットベクトルの大きさは、前記第一インデックス情報によって特定されたベクトル大きさ候補が示す値にビットシフト演算を適用することにより獲得する。
【0019】
一実施形態では、前記オフセットベクトルの方向は、ベクトル方向候補のうちのいずれか1つを特定する第二インデックス情報に基づいて決定される。
【0020】
本発明に係るビデオエンコーディング方法は、現在のブロックにマージオフセットベクトルエンコーディング方法が適用されるか否かを決定するステップと、前記現在のブロックに対するマージ候補リストを生成するステップと、前記マージ候補リストに基づいて、前記現在のブロックに対するマージ候補を特定するステップと、前記マージ候補に基づいて、前記現在のブロックに対する動きベクトルを誘導するステップと、を含み、前記現在のブロックに前記マージオフセットベクトルエンコーディング方法が適用される場合、前記現在のブロックの動きベクトルは、前記マージ候補の動きベクトルにオフセットベクトルを加算して誘導され、前記マージ候補リストが含むことができるマージ候補の最大数が複数である場合、前記マージ候補のうちの前記現在のブロックの前記マージ候補を示すインデックス情報はエンコードされ、前記最大数が1である場合、前記インデックス情報のエンコーディングは省略される。
【0021】
一実施形態では、ビデオエンコーディング方法は、複数のベクトル大きさ候補のうちの前記オフセットベクトルの大きさを示すベクトル大きさ候補を特定するための第一インデックス情報をエンコードするステップをさらに含む。
【0022】
一実施形態では、ビデオエンコーディング方法は、前記ベクトル大きさ候補の数値を示すフラグをエンコードするステップをさらに含み、前記フラグの値に応じて前記ベクトル大きさ候補の最大値又は最小値のうちの少なくとも1つが異なるように設定される。
【0023】
一実施形態では、前記フラグは、ピクチャレベルでエンコードされる。
【0024】
一実施形態では、前記ベクトル大きさ候補の最大値又は最小値のうちの少なくとも1つは、前記現在のブロックに対する動きベクトルの精度に応じて異なるように設定される。
【0025】
一実施形態では、前記ベクトル大きさ候補は、前記オフセットベクトルの大きさにビットシフト演算を適用することによって誘導された値を有する。
【0026】
一実施形態では、ビデオエンコーディング方法は、数のベクトル方向候補のうちの前記オフセットベクトルの方向を示すベクトル方向候補を特定するための第二インデックス情報をエンコードするステップをさらに含む。
【0027】
本発明に係るビデオデコーダは、プロセッサ及びメモリを含み、前記メモリはコンピュータプログラムを格納するために用いられ、前記プロセッサは、前記メモリに格納されたコンピュータプログラムを実行することにより、現在のブロックにマージオフセットベクトルエンコーディング方法が適用されるか否かを決定し、前記現在のブロックに対するマージ候補リストを生成し、前記マージ候補リストに基づいて前記現在のブロックに対するマージ候補を特定し、前記マージ候補に基づいて前記現在のブロックに対する動きベクトルを誘導する。前記現在のブロックに前記マージオフセットベクトルエンコーディング方法が適用される場合、前記現在のブロックの動きベクトルは、前記マージ候補の動きベクトルにオフセットベクトルを加算して誘導され、前記マージ候補リストが含むことができるマージ候補の最大数が複数である場合、前記現在のブロックの前記マージ候補は、前記マージ候補のうちのいずれか1つを示すビットストリームからデコードされるインデックス情報に基づいて選択され、前記最大数が1である場合、前記インデックス情報をデコードせずに前記マージ候補が決定される。
【0028】
本発明に係るビデオエンコーダは、プロセッサ及びメモリを含み、前記メモリはコンピュータプログラムを格納するために用いられ、前記プロセッサは、前記メモリに格納されたコンピュータプログラムを実行することにより、現在のブロックにマージオフセットベクトルエンコーディング方法が適用されるか否かを決定し、前記現在のブロックに対するマージ候補リストを生成し、前記マージ候補リストに基づいて前記現在のブロックに対するマージ候補を特定し、前記マージ候補に基づいて前記現在のブロックに対する動きベクトルを誘導する。前記現在のブロックに前記マージオフセットベクトルエンコーディング方法が適用される場合、前記現在のブロックの動きベクトルは、前記マージ候補の動きベクトルにオフセットベクトルを加算して誘導され、前記マージ候補リストが含むことができるマージ候補の最大数が複数である場合、前記マージ候補のうちの前記現在のブロックの前記マージ候補を示すインデックス情報はエンコードされ、前記最大数が1である場合、前記インデックス情報のエンコーディングは省略される。
【0029】
本発明に係るビデオデコーディング装置は、現在のブロックにマージオフセットベクトルエンコーディング方法が適用されるか否かを決定し、前記現在のブロックに対するマージ候補リストを生成し、前記マージ候補リストに基づいて前記現在のブロックに対するマージ候補を特定し、前記マージ候補に基づいて前記現在のブロックに対する動きベクトルを誘導するインター予測部を含み、前記現在のブロックに前記マージオフセットベクトルエンコーディング方法が適用される場合、前記現在のブロックの動きベクトルは、前記マージ候補の動きベクトルにオフセットベクトルを加算して誘導され、前記マージ候補リストが含むことができるマージ候補の最大数が複数である場合、前記現在のブロックの前記マージ候補は、前記マージ候補のうちのいずれか1つを示すビットストリームからデコードされるインデックス情報に基づいて選択され、前記最大数が1である場合、前記インデックス情報をデコードせずに前記マージ候補が決定される。
【0030】
本発明に係るビデオエンコーディング装置は、現在のブロックにマージオフセットベクトルエンコーディング方法が適用されるか否かを決定し、前記現在のブロックに対するマージ候補リストを生成し、前記マージ候補リストに基づいて前記現在のブロックに対するマージ候補を特定し、前記マージ候補に基づいて前記現在のブロックに対する動きベクトルを誘導するインター予測部を含み、前記現在のブロックに前記マージオフセットベクトルエンコーディング方法が適用される場合、前記現在のブロックの動きベクトルは、前記マージ候補の動きベクトルにオフセットベクトルを加算して誘導され、前記マージ候補リストが含むことができるマージ候補の最大数が複数である場合、前記マージ候補のうちの前記現在のブロックの前記マージ候補を示すインデックス情報はエンコードされ、前記最大数が1である場合、前記インデックス情報のエンコーディングは省略される。
【0031】
本発明に係るコンピュータ可読記憶媒体は、コンピュータプログラムを格納するために用いられ、前記コンピュータプログラムがプロセッサによって実行されると、ビデオデコーディング方法又はビデオエンコーディング方法を実行する。
【0032】
本発明は、さらに、ビデオ信号をエンコーディング/デコーディングする際、オフセットベクトルに基づいてマージ候補から誘導された動きベクトルをリファインする方法、及びこの方法を実行するための装置を提供することができる。
【0033】
本発明は、さらに、ビデオ信号をエンコーディング/デコーディングする際、オフセットベクトルのシグナリングする方法及びこの方法を実行するための装置を提供することができる。
【0034】
本発明によれば、オフセットベクトルに基づいてマージ候補の動きベクトルをリファインすることにより、インター予測効率を向上させることができる。
【0035】
本発明によれば、オフセットベクトルの大きさ及び方向を適応的に決定することにより、インター予測効率を向上させることができる。
【0036】
ビデオのエンコーディング及びデコーディングは、ブロックユニットで行われる。一例として、コーディングブロック、変換ブロック、又は予測ブロックに対して、変換、量子化、予測、インループフィルタリング、又は復元などのエンコーディング/デコーディング処理が実行されることができる。
【0037】
以下、エンコーディング/デコーディングの対象であるブロックを「現在のブロック」と呼ぶ。一例として、現在のエンコーディング/デコーディングプロセスステップに基づいて、現在のブロックはコーディングブロック、変換ブロック、又は予測ブロックを示すことができる。
【0038】
さらに、本明細書で使用される用語「ユニット」は、特定のエンコーディング/デコーディング処理を実行するための基本ユニットを表し、「ブロック」という用語は、所定の大きさのサンプルアレイを示すことが理解され得る。別の説明がない限り、「ブロック」と「ユニット」は、同じ意味で使用されることができる。一例として、後述される実施例では、コーディングブロックとコーディングユニットは、同じ意味を有することが理解され得る。
【0039】
図1は、本発明の一実施形態に係るビデオエンコーダ(エンコーダ)を示すブロック図である。
【0040】
図1を参照すると、ビデオエンコーディング装置100は、ピクチャー分割部110、予測部120,125、変換部130、量子化部135、再整列部160、エントロピーコーディング部165、逆量子化部140、逆変換部145、フィルタ部150及びメモリ155を含むことができる。
【0041】
ビデオエンコーディング装置において、異なる特徴的機能を示すために、図1に示された各構成部は独立して図示しているが、各構成部が分離されたハードウェアや1つのソフトウェア構成ユニットで構成されることを意味しない。つまり、各構成部にとって、便利に説明するために、含まれる各構成部を羅列し、各構成部のうちの少なくとも2つの構成部が組み合わされて1つの構成部を形成するか、又は1つの構成部が複数の構成部に分かれて機能を実行することができ、これらの各構成部が統合された実施例及び分離された実施例も本発明の本質から逸脱しない限り、本発明の権利範囲に含まれる。
【0042】
また、一部の構成要素は、本発明の本質的な機能を実行するために不可欠の構成要素ではなく、ただ性能を向上させるための選択的な構成要素であることができる。本発明は、ただ性能を向上させるために用いられる構成要素を除いた本発明の本質を実現するために不可欠な構成部のみを含むことができ、ただ性能を向上させるために用いられる選択的な構成要素を除く、必要な構成要素のみを含む構造も、本発明の権利範囲に含まれる。
【0043】
ピクチャー分割部110は、入力されたピクチャーを少なくとも1つの処理ユニットに分割することができる。このとき、処理ユニットは予測ユニット(Prediction Unit:PU)であることができ、変換ユニット(Transform Unit:TU)であることもでき、コーディングユニット(Coding Unit:CU)であることもできる。ピクチャー分割部110は、1つのピクチャーを複数のコーディングユニット、予測ユニット及び変換ユニットの組み合わせに分割して、所定の基準(例えば、コスト関数)に基づいて、1つのコーディングユニット、予測ユニット及び変換ユニットの組み合わせを選択して、ピクチャーをエンコードすることができる。
【0044】
例えば、1つのピクチャーを複数のコーディングユニットに分割することができる。ピクチャーをコーディングユニットに分割するために、クワッドツリー構造(Quad Tree Structure)のような再帰的なツリー構造を使用することができ、1つのビデオ又は最大サイズのコーディングユニット(largest coding unit)をルート(root)として、他のコーディングユニットに分割されるコーディングユニットは、分割されたコーディングユニットの数だけの子ノードを持って分割されることができる。一定の制限に応じてこれ以上分割されないコーディングユニットは、リーフノードになる。つまり、1つのコーディングユニットに対して正方形分割のみが可能であると仮定した場合、1つのコーディングユニットは、最大4つの他のコーディングユニットに分割されることができる。
【0045】
以下、本発明の実施例において、コーディングユニットは、エンコーディングを実行するユニットの意味で使用することができ、デコーディングを実行するユニットの意味で使用することもできる。
【0046】
予測ユニットは、1つのコーディングユニット内で、同じサイズの少なくとも1つの正方形又は長方形などの形状を持って分割されたものであることができ、1つのコーディングユニット内で分割された予測ユニットのうちのいずれか1つの予測ユニットが他の予測ユニットと異なる形状及び/又はサイズを有するように分割されたものであることもできる。
【0047】
コーディングユニットに基づいてイントラ予測を実行する予測ユニットを生成する際、最小コーディングユニットがない場合、複数の予測ユニットN×Nに分割せずにイントラ予測を行うことができる。
【0048】
予測部120,125は、インター予測を実行するインター予測部120とイントラ予測を実行するイントラ予測部125を含むことができる。予測ユニットに対してインター予測を実行するか又はイントラ予測を実行するかを決定し、各予測方法によって具体的な情報(例えば、イントラ予測モード、モーションベクトル、参照ピクチャなどである)を決定することができる。このとき、予測が実行される処理ユニットと予測方法及び具体的な内容が決まれた処理ユニットは異なることができる。例えば、予測方法と予測モードなどは予測ユニットで決定され、予測の実行は変換ユニットで実行されることもできる。生成された予測ブロックと元のブロックの間の残差値(残差ブロック)は、変換部130に入力されることができる。また、予測のために使用した予測モード情報、モーションベクトル情報などは、残差値とともにエントロピーコーディング部165でエンコードされてデコーダに転送されることができる。特定のエンコーディングモードを使用する場合、予測部120,125によって予測ブロックを生成せずに、元のブロックをそのままエンコードしてデコーダに伝送することもできる。
【0049】
インター予測部120は、現在のピクチャーの前のピクチャー又は後のピクチャーのうちの少なくとも1つのピクチャーの情報に基づいて予測ユニットを予測することができ、場合によって、現在のピクチャー内のエンコードされた部分領域の情報に基づいて予測ユニットを予測することもできる。インター予測部120は、参照ピクチャー補間部、モーション予測部、モーション補償部を含むことができる。
【0050】
参照ピクチャー補間部は、メモリ155から参照ピクチャー情報を受けて、参照ピクチャーで整数画素以下の画素情報を生成することができる。輝度画素の場合、1/4画素単位で整数画素以下の画素情報を生成するために、フィルタ係数が変化するDCTベースの8タブ補間フィルタ(DCT-based Interpolation Filter)が使用されることができる。色差信号の場合、1/8画素単位で整数画素以下の画素情報を生成するために、フィルタ係数が変化するDCTベースの4タブ補間フィルタ(DCT-based Interpolation Filter)が使用されることができる。
【0051】
モーション予測部は参照ピクチャー補間部によって補間された参照ピクチャに基づいてモーション予測を実行することができる。モーションベクトルを計算する方法として、FBMA(Full search-based Block Matching Algorithm)、TSS(Three Step Search)、NTS(New Three-Step Search Algorithm)などの様々な方法が使用されることができる。モーションベクトルは、補間された画素に基づいて、1/2又は1/4画素単位の動きベクトル値を有することができる。モーション予測部は、モーション予測方法を変化させて、現在の予測ユニットを予測することができる。モーション予測方法として、スキップ(Skip)方法、マージ(Merge)方法、AMVP(Advanced Motion Vector Prediction)方法、イントラブロックコピー(Intra Block Copy)方法などの様々な方法が使用されることができる。
【0052】
イントラ予測部125は、現在のピクチャーの画素情報である、現在のブロックの周りの参照ピクセル情報に基づいて予測単位を生成することができる。現在予測単位の周辺ブロックがインター予測を行ったブロックであり、参照ピクセルがインター予測を行ったピクセルである場合、インター予測を行ったブロックに含まれる参照ピクセルを周辺のイントラ予測を行ったブロックの参照画素情報に置き換えて使用することができる。つまり、参照画素が使用可能ではない場合、使用可能ではない参照画素情報を利用可能な参照画素のうちの少なくとも1つの参照画素に置き換えて使用することができる。
【0053】
イントラ予測において、予測モードは、予測方向にしたがって参照ピクセル情報を使用する方向性予測モードと、予測を行うときに方向性情報を使用しない非方向性モードと、を含む。輝度情報を予測するためのモードと色差情報を予測するためのモードは異なることができ、色差情報を予測するために、輝度情報を予測するために使用されたイントラ予測モード情報又は予測された輝度信号情報を活用することができる。
【0054】
イントラ予測を実行する際、予測ユニットのサイズと変換ユニットのサイズが同じである場合、予測ユニットの左側に存在するピクセル、左上に存在するピクセル、上端に存在するピクセルに基づいて、予測ユニットに対してイントラ予測を行うことができる。しかし、イントラ予測を実行する際、予測ユニットのサイズと変換ユニットのサイズが異なる場合、変換ユニットに基づく参照ピクセルを利用してイントラ予測を行うことができる。また、最小コーディングユニットにのみN×N分割を使用するイントラ予測を使用することができる。
【0055】
イントラ予測方法は、予測モードによって参照画素にAIS(Adaptive Intra Smoothing)フィルタを適用した後、予測ブロックを生成することができる。参照画素に適用されるAISフィルタの種類は異なることができる。イントラ予測方法を実行するために、現在の予測ユニットのイントラ予測モードは、現在の予測ユニットの周辺に存在する予測ユニットのイントラ予測モードから予測することができる。周辺予測ユニットから予測されたモード情報を利用して現在の予測ユニットの予測モードを予測する場合、現在の予測ユニットと周辺予測ユニットのイントラ予測モードが同じであると、所定のフラグ情報を利用して、現在の予測ユニットと周辺予測ユニットの予測モードが同じである情報を送信することができ、もし現在の予測ユニットと周辺予測ユニットの予測モードが異なる場合、エントロピーコーディングを実行して、現在のブロックの予測モード情報をエンコードすることができる。
【0056】
また、予測部120,125によって生成された予測ユニットに基づいて予測を実行した予測ユニットと予測ユニットの元のブロックとの間の差値である残差値(Residual)情報を含む残差ブロックを生成することができる。生成された残差ブロックは、変換部130に入力されることができる。
【0057】
変換部130は、DCT(Discrete Cosine Transform)又はDST(Discrete Sine Transform)のような変換方法を使用して、元のブロックと予測部120,125によって生成された予測ユニットとの間の残差値(residual)情報を含む残差ブロックを変換させることができる。ここで、DCT変換コアはDCT2又はDCT8のうちの少なくとも1つを含み、DST変換コアはDST7を含む。残差ブロックを変換させるためにDCTを適用するか又はDSTを適用するかは、残差ブロックを生成するために使用された予測ユニットのイントラ予測モード情報に基づいて決定することができる。残差ブロックの変換をスキップすることもできる。残差ブロックの変換をスキップするか否かを示すフラグをエンコードすることができる。変換スキップは、大きさが閾値以下である残差ブロック、ルマ成分又は4:4:4フォーマットの下でのクロマ成分に対して許容されることができる。
【0058】
量子化部135は、変換部130によって周波数領域に変換された値を量子化することができる。量子化係数は、ブロック又はビデオの重要度に応じて変化することができる。量子化部135で算出された値は、逆量子化部140と再整列部160に提供することができる。
【0059】
再整列部160は、量子化された残差値に対して係数値の再整列を行うことができる。
【0060】
再整列部160は、係数スキャン(Coefficient Scanning)方法によって、2次元のブロック形態係数を1次元のベクトル形態に変更することができる。例えば、再整列部160は、ジグザグスキャン(Zig-Zag Scan)方法を利用して、DC係数から高周波領域の係数までスキャンして1次元ベクトルの形態に変更することができる。変換ユニットのサイズ及びイントラ予測モードに基づいて、ジグザグスキャンの代わりに、2次元のブロック形態係数を列方向にスキャンする垂直スキャン、2次元のブロック形態係数を行方向にスキャンする水平スキャンが使用されることもできる。つまり、変換ユニットのサイズ及びイントラ予測モードに基づいて、ジグザグスキャン、垂直方向スキャン及び水平方向スキャンのうちのどのスキャン方法を使用するかを決定することができる。
【0061】
エントロピーコーディング部165は、再整列部160によって算出された値に基づいてエントロピーコーディングを実行することができる。エントロピーコーディングは、例えば、指数ゴルロム(Exponential Golomb)、CAVLC(Context-Adaptive Variable Length Coding)、CABAC(Context-Adaptive Binary Arithmetic Coding)などのさまざまなエンコーディング方法を使用することができる。
【0062】
エントロピーコーディング部165は、再整列部160及び予測部120,125からコーディングユニットの残差値係数情報、ブロックタイプ情報、予測モード情報、分割ユニット情報、予測ユニット情報、送信ユニット情報、モーションベクトル情報、参照フレーム情報、ブロックの補間情報、フィルタリング情報など様々な情報をエンコードすることができる。
【0063】
エントロピーコーディング部165は、再整列部160から入力されたコーディングユニットの係数値をエントロピエンコードすることができる。
【0064】
逆量子化部140は量子化部135によって量子化された値を逆量子化し、逆変換部145は変換部130によって変換された値を逆変換する。逆量子化部140及び逆変換部145から生成された残差値(Residual)は予測部120,125に含まれている動き推定部、動き補償部及びイントラ予測部によって予測された予測ユニットと組み合わせて復元ブロック(Reconstructed Block)を生成することができる。
【0065】
フィルタ部150は、ディブロッキングフィルタ、オフセット補正部、ALF(Adaptive Loop Filter)のうちの少なくとも1つを含むことができる。
【0066】
ディブロッキングフィルタは、復元されたピクチャーでブロック間の境界によって生成されたブロック歪みを除去することができる。ディブロッキングを行うかどうかを判断するために、ブロックに含まれている幾つの列又は行に含まれているピクセルに基づいて、現在のブロックにディブロッキングフィルタを適用するか否かを判断することができる。ブロックにディブロッキングフィルタを適用する場合、必要なディブロッキングフィルタリング強度に応じて強いフィルタ(Strong Filter)又は弱いフィルタ(Weak Filter)を適用することができる。また、ディブロッキングフィルタを適用する際、垂直フィルタリング及び水平フィルタリングを実行する際、水平方向フィルタリングと垂直方向フィルタリングが並行処理されるようにすることができる。
【0067】
オフセット補正部は、ディブロッキングを行ったビデオに対して、ピクセルユニットで元のビデオとのオフセットを補正することができる。特定のピクチャーに対するオフセット補正を実行するために、ビデオに含まれたピクセルを一定数の領域に区分してから、オフセットを実行しようとする領域を決定し、対応する領域にオフセットを適用する方法又は各ピクセルのエッジ情報を考慮してオフセットを適用する方法を使用することができる。
【0068】
ALF(Adaptive Loop Filtering)は、フィルタリングされた復元ビデオと元のビデオを比較した値に基づいて実行されることができる。ビデオに含まれているピクセルを所定のグループに分けてから、対応するグループに適用される1つのフィルタを決定し、グループごとに差別的にフィルタリングを行うことができる。ALFを適用するか否かに関連した情報である輝度信号は、符号化ユニット(Coding Unit、CU)ごとに送信することができ、それぞれのブロックに応じて適用されるALFフィルタの形状及びフィルタ係数は異なることができる。また、適用対象のブロックの特性に関係なく、同じ形態(固定された形態)のALFフィルタが適用されることもできる。
【0069】
メモリ155は、フィルタ部150を介して計算された復元ブロック又はピクチャーを格納することができ、格納された復元ブロック又はピクチャーはインター予測を行うときに予測部120,125に提供されることができる。
【0070】
図2は、本発明の一実施形態に係るビデオデコーダ(デコーダ)を示すブロック図である。
【0071】
図2を参照すると、ビデオデコーダ200は、エントロピデコーディング部210、再整列部215、逆量子化部220、逆変換部225、予測部230,235、フィルタ部240、メモリ245を含むことができる。
【0072】
ビデオデコーダからビデオビットストリームが入力された場合、入力されたビットストリームは、ビデオエンコーダの手順とは逆の手順でデコードすることができる。
【0073】
エントロピデコーディング部210は、ビデオエンコーダのエントロピーコーディング部でエントロピーコーディングを実行する手順とは逆の手順でエントロピデコーディングを実行することができる。例えば、ビデオエンコーダで実行された方法に対応して、指数ゴルロム(Exponential Golomb)、CAVLC(Context-Adaptive Variable Length Coding)、CABAC(Context-Adaptive Binary Arithmetic Coding)のような様々な方法が適用されることができる。
【0074】
エントロピデコーディング部210は、エンコーダで実行されるイントラ予測及びインター予測に関する情報をデコードすることができる。
【0075】
再整列部215は、エンコーディング部で実行される再整列方法に基づいて、エントロピデコーディング部210からエントロピーデコードされたビットストリームに対して再整列を実行することができる。1次元ベクトルの形態で表現された係数を再び2次元のブロック形態の係数に復元して再整列することができる。再整列部215は、エンコーディング部で実行された係数スキャンに関連する情報を受け、対応するエンコーディング部で実行されたスキャン順序に基づいて、逆にスキャンする方法を使用して再整列することができる。
【0076】
逆量子化部220は、エンコーダで提供された量子化パラメータと再整列されたブロックの係数値に基づいて逆量子化を実行することができる。
【0077】
逆変換部225は、ビデオエンコーダによって実行された量子化結果に対して、変換部によって実行される変換、即ちDCT又はDSTに対して逆変換を実行することができ、即ち逆DCT又は逆DSTを実行することができる。ここで、DCT変換コアはDCT2又はDCT8のうちの少なくとも1つを含み、DST変換コアはDST7を含むことができる。又はビデオエンコーダで変換がスキップされた場合、逆変換部225も逆変換を実行しないことがある。逆変換は、ビデオエンコーダで決定された送信ユニットに基づいて実行することができる。ビデオデコーダの逆変換部225は、予測方法、現在のブロックのサイズ、予測方向などの複数の情報に基づいて変換技法(例えば、DCT又はDST)が選択的に実行されることができる。
【0078】
予測部230,235は、エントロピデコーディング部210から提供された予測ブロックの生成に関連する情報及びメモリ245から提供された以前にデコードされたブロック又はピクチャー情報に基づいて予測ブロックを生成することができる。
【0079】
上述したように、ビデオエンコーダの動作と同様に、イントラ予測を実行する際、予測ユニットのサイズと変換ユニットのサイズが同じである場合、予測ユニットの左側に存在するピクセル、左上に存在するピクセル、上端に存在するピクセルに基づいて、予測ユニットに対してイントラ予測を行うことができる。しかし、イントラ予測を実行する際、予測ユニットのサイズと変換ユニットのサイズが異なる場合、変換ユニットに基づく参照ピクセルを利用してイントラ予測を行うことができる。また、最小コーディングユニットにのみN×N分割を使用するイントラ予測を使用することができる。
【0080】
予測部230、235は、予測ユニット判別部、インター予測部及びイントラ予測部を含むことができる。予測ユニット判別部は、エントロピデコーディング部210から入力された予測ユニット情報、イントラ予測方法の予測モード情報、インター予測方法のモーション予測に関する情報などの様々な情報を受信し、現在のコーディングユニットで予測ユニットを区分し、予測ユニットがインター予測及びイントラ予測のうちのどちらを実行するか否かを判別することができる。インター予測部230は、ビデオエンコーダで提供された現在の予測ユニットのインター予測に必要な情報を利用して、現在の予測ユニットを含む現在のピクチャーの前のピクチャー又は後のピクチャーのうちの少なくとも1つのピクチャーに含まれた情報に基づいて、現在の予測ユニットに対してインター予測を行うことができる。又は、現在の予測ユニットを含む現在のピクチャー内で以前に復元されたいくつかの領域の情報に基づいて、インター予測を行うこともできる。
【0081】
インター予測を実行するために、コーディングユニットに基づいて、対応するコーディングユニットに含まれた予測ユニットのモーション予測方法がスキップモード(Skip Mode)、マージモード(Merge Mode)、モーションベクトル予測モード(AMVP Mode)、イントラブロックコピーモードのどのような方法であるかを判断することができる。
【0082】
イントラ予測部235は、現在のピクチャー内の画素情報に基づいて予測ブロックを生成することができる。予測ユニットがイントラ予測を行った予測ユニットである場合、ビデオエンコーダから提供された予測ユニットのイントラ予測モード情報に基づいてイントラ予測を行うことができる。イントラ予測部235は、AIS(Adaptive Intra Smoothing)フィルタ、参照画素補間部、DCフィルタを含むことができる。AISフィルタは現在のブロックの参照画素に対してフィルタリングを実行する部分として、現在の予測ユニットの予測モードに基づいてフィルタを適用するか否かを決定して、AISフィルタを適用することができる。ビデオエンコーダで提供された予測ユニットの予測モード及びAISフィルタ情報を利用して、現在のブロックの参照画素に対してAISフィルタリングを行うことができる。現在のブロックの予測モードがAISフィルタリングを実行しないモードである場合、AISフィルタは適用されないことがある。
【0083】
予測ユニットの予測モードが参照画素を補間した画素値に基づいてイントラ予測を実行する予測ユニットである場合、参照画素補間部は参照画素を補間して、整数値以下の画素ユニットの参照画素を生成することができる。現在の予測ユニットの予測モードが参照画素を補間しなく予測ブロックを生成する予測モードである場合、参照画素は補間されないことがある。現在のブロックの予測モードがDCモードである場合、DCフィルタはフィルタリングによって予測ブロックを生成することができる。
【0084】
復元されたブロック又はピクチャーは、フィルタ部240に提供されることができる。フィルタ部240は、ディブロッキングフィルタ、オフセット補正部、ALFを含むことができる。
【0085】
ビデオエンコーダから対応するブロック又はピクチャーにディブロッキングフィルタを適用したか否かに関する情報、デブロッキングフィルタを適用した場合、強いフィルタ又は弱いフィルタを適用したか関する情報を受信することができる。ビデオデコーダのディブロッキングフィルタはビデオエンコーダから提供されたディブロッキングフィルタに関連する情報を受信し、ビデオエンコーダは対応するブロックに対してディブロッキングフィルタ処理を実行することができる。
【0086】
オフセット補正部は、エンコードする際、ビデオに適用されるオフセット補正のタイプ及びオフセット値情報などに基づいて、復元されたビデオに対してオフセット補正を行うことができる。
【0087】
ALFは、エンコーダから提供されたALFを適用するか否かに関する情報、ALF係数情報などに基づいて、コーディングユニットに適用されることができる。このようなALF情報は、特定のパラメータセットに含まれて提供されることができる。
【0088】
メモリ245は、復元されたピクチャー又はブロックを格納して、参照ピクチャ又は参照ブロックとして使用できるようにすることができ、さらに復元されたピクチャーを出力部に提供することができる。
【0089】
図3は、本発明の一実施形態に係る基本的なコーディングツリーユニットを示す図である。
【0090】
最大サイズのコーディングブロックをコーディングツリーブロックと定義することができる。1つのピクチャーは、複数のコーディングツリーユニット(Coding Tree Unit、CTU)に分割される。コーディングツリーユニットは、最大サイズのコーディングユニットであり、LCU(Largest Coding Unit)と呼ばれることもできる。図3は、1つのピクチャーが複数のコーディングツリーユニットに分割された例を示す。
【0091】
コーディングツリーユニットのサイズは、ピクチャーレベル又はシーケンスレベルで定義することができる。この目的のために、コーディングツリーユニットのサイズを示す情報は、ピクチャーパラメータセット又はシーケンスパラメータセットによってシグナルリングすることができる。
【0092】
一例として、シーケンス内のピクチャー全体のコーディングツリーユニットのサイズが128×128に設定されることができる。または、ピクチャーレベルで128×128又は256×256のうちのいずれか1つをコードツリーユニットのサイズとして決定することができる。一例として、第一ピクチャーではコーディングツリーユニットのサイズが128×128に設定され、第二ピクチャーではコーディングツリーユニットのサイズが256×256に設定されることができる。
【0093】
コーディングツリーユニットを分割してコーディングブロックを生成することができる。コーディングブロックはエンコード/デコードを実行するための基本ユニットを示す。一例として、コーディングブロックごとに予測又は変換が行われるか、又はコーディングブロックごとに予測エンコーディングモードが決定されることができる。ここで、予測エンコーディングモードは、予測ビデオを生成する方法を示す。一例として、予測エンコーディングモードは、画面内予測(Intra Prediction、イントラ予測)、画面間予測(Inter Prediction、インター予測)、現在のピクチャー参照(Current Picture Referencing、CPR、又はイントラブロックコピー(Intra Block Copy、IBC))、又は複合予測(Combined Prediction)を含むことができる。コーディングブロックに対して、イントラ予測、インター予測、現在ピクチャー参照又は複合予測のうちの少なくとも1つの予測エンコーディングモードを用いて、コーディングブロックの予測ブロックを生成することができる。
【0094】
現在のブロックの予測エンコーディングモードを示す情報がビットストリームを介してシグナルリングされることができる。一例として、前記情報は、予測エンコーディングモードがイントラモードであるか又はインターモードであるかを示す1ビットフラグであることができる。現在のブロックの予測エンコーディングモードがインターモードとして決定された場合にのみ、現在のピクチャー参照又は複合予測を使用することができる。
【0095】
現在のピクチャー参照は、現在のピクチャを参照ピクチャに設定し、現在のピクチャー内の既にエンコーディング/デコーディングが完了した領域から、現在のブロックの予測ブロックを獲得するためのものである。ここで、現在のピクチャーは、現在のブロックを含むピクチャを意味する。現在のピクチャー参照が現在のブロックに適用されるか否かを示す情報がビットストリームを介してシグナルリングされることができる。一例として、前記情報は、1ビットフラグであることができる。前記フラグが真の場合、現在のブロックの予測エンコーディングは現在ピクチャー参照として決定され、前記フラグが偽である場合、現在のブロックの予測モードはインター予測として決定されることができる。
【0096】
又は、現在のブロックの予測エンコーディングモードは、参照ピクチャーインデックスに基づいて決定されることができる。一例として、参照ピクチャーインデックスが現在のピクチャーを指す場合、現在のブロックの予測エンコーディングモードは現在ピクチャー参照として決定されることができる。参照ピクチャーインデックスが現在ピクチャー以外の他のピクチャーを指す場合、現在のブロックの予測エンコーディングモードはインター予測として決定されることができる。つまり、現在のピクチャー参照は、現在ピクチャー内のエンコーディング/デコーディングが完了した領域の情報を利用した予測方法であり、インター予測はエンコーディング/デコーディングが完了した他のピクチャーの情報を利用した予測方法である。
【0097】
複合予測は、イントラ予測、インター予測及び現在のピクチャ参照のうちの両方以上を組み合わせたエンコーディングモードを示す。一例として、複合予測が適用される場合、イントラ予測、インター予測又現在のピクチャー参照のうちのいずれか1つに基づいて第一予測ブロックが生成され、他の1つに基づいて第二予測ブロックが生成されることができる。第一予測ブロック及び第二予測ブロックが生成されると、第一予測ブロック及び第二予測ブロックの平均演算又は加重合計演算を介して最終的予測ブロックが生成されることができる。複合予測が適用されるか否かを示す情報はビットストリームを介してシグナルリングされることができる。前記情報は、1ビットのフラグであることができる。
【0098】
図4は、コーディングブロックの様々な分割形態を示す図である。
【0099】
コーディングブロックは、クワッドツリー分割、バイナリツリー分割又はトリプルツリー分割に基づいて、複数のコーディングブロックに分割されることができる。分割されたコーディングブロックもクワッドツリー分割、バイリツリー分割又はトリプルツリー分割に基づいて、再び複数のコーディングブロックに分割されることができる。
【0100】
クワッドツリー分割は、現在のブロックを4つのブロックに分割する分割手法を示す。クワッドツリー分割の結果、現在のブロックは4つの正方形のパーティションに分割されることができる(図4の(a)「SPLIT_QT」を参照)。
【0101】
バイナリツリー分割は、現在のブロックを2つのブロックに分割する分割手法を示す。垂直方向に沿って(即ち、現在のブロックを横切る垂直線を利用する)現在のブロックを2つのブロックに分割することを垂直方向バイナリツリー分割と呼称することができ、水平方向に沿って(即ち、現在のブロックを横切る水平線を利用する)現在のブロックを2つのブロックに分割することを水平方向バイナリツリー分割と呼称することができる。バイナリツリーの分割結果、現在のブロックは、2つの非正方形のパーティションに分割されることができる。図4の(b)「SPLIT_BT_VER」は、垂直方向のバイナリツリー分割結果を示したものであり、図4の(c)「SPLIT_BT_HOR」は、水平方向のバイナリツリー分割結果を示したものである。
【0102】
トリプルツリー分割は、現在のブロックを3つのブロックに分割する分割手法を示す。垂直方向に沿って(即ち、現在のブロックを横切る2つの垂直線を利用する)現在のブロックを3つのブロックに分割することを垂直方向トリプルツリー分割と呼称することができ、水平方向に沿って(即ち、現在のブロックを横切る2つの水平線を利用する)現在のブロックを3つのブロックに分割することを水平方向トリプルツリー分割と呼称することができる。トリプルツリー分割結果、現在のブロックは、3つの非正方形のパーティションに分割されることができる。この際、現在のブロックの中央に位置するパーティションの幅/高さは、他のパーティションの幅/高さの2倍であることができる。図4の(d)「SPLIT_TT_VER」は、垂直方向のトリプルツリー分割結果を示したものであり、図4の(e)「SPLIT_TT_HOR」は、水平方向のトリプルツリー分割結果を示したものである。
【0103】
コーディングツリーユニットの分割回数は分割深さ(Partitioning Depth)として定義することができる。コーディングツリーユニットの最大分割深さは、シーケンス又はピクチャーレベルで決定されることができる。これにより、コーディングツリーユニットの最大分割深さは、シーケンス又はピクチャーごとに異なることがある。
【0104】
又は、各分割手法の最大分割深さを個別的に決定することができる。一例として、クワッドツリー分割が許可される最大分割深さは、バイナリツリー分割及び/又はトリプルツリー分割が許可される最大分割深さと異なることがある。
【0105】
エンコーダは、ビットストリームを介して、現在のブロックの分割タイプ又は分割深さのうちの少なくとも一つを示す情報をシグナルリングすることができる。デコーダは、ビットストリームから解析された前記情報に基づいて、コーディングツリーユニットの分割タイプと分割深さを決定することができる。
【0106】
図5は、コーディングツリーユニットの分割パターンを示す図である。
【0107】
クワッドツリー分割、バイナリツリー分割及び/又はトリプルツリー分割などの分割手法を利用して、コーディングブロックを分割することをマルチツリー分割(Multi Tree Partitioning)と呼称することができる。
【0108】
コーディングブロックにマルチツリー分割を適用して生成されたコーディングブロックを下位コーディングブロックと呼称することができる。コーディングブロックの分割深さがkである場合、下位コーディングブロックの分割深さは、k+1に設定される。
【0109】
逆に、分割深さがk+1であるコーディングブロックに対して、分割深さがkであるコードブロックを上位コーディングブロックと呼称することができる。
【0110】
現在のコーディングブロックの分割タイプは、上位コーディングブロックの分割タイプ又は隣接コーディングブロックの分割タイプのうちの少なくとも1つに基づいて決定されることができる。ここで、隣接コーディングブロックは、現在のコーディングブロックに隣接し、現在のコーディングブロックの上端隣接ブロック、左側隣接ブロック、又は左上隅に隣接する隣接ブロックのうちの少なくとも1つを含むことができる。ここで、分割タイプは、クワッドツリー分割するか否か、バイナリツリー分割するか否か、バイナリツリー分割方向、トリプルツリー分割するか否か、又はトリプルツリー分割方向のうちの少なくとも1つを含むことができる。
【0111】
コーディングブロックの分割形態を決定するために、コーディングブロックが分割されるか否かを示す情報はビットストリームを介してシグナルリングされることができる。前記情報は、1ビットのフラグ「split_cu_flag」であり、前記フラグが真の場合、マルチツリー分割技術によってコーディングブロックが分割されることを示す。
【0112】
split_cu_flagが真の場合、コーディングブロックがクワッドツリー分割されるか否かを示す情報はビットストリームを介してシグナルリングされることができる。前記情報は、1ビットのフラグsplit_qt_flagであり、上記フラグが真の場合、コーディングブロックは4つのブロックに分割されることができる。
【0113】
一例として、図5に示した例では、コーディングツリーユニットがクワッドツリー分割されることに伴って、分割深さが1である4つの符号化ブロックが生成されることを示した。また、クワッドツリー分割結果として、生成された4つのコーディングブロックのうちの第一コーディングブロックと第四コーディングブロックに再びクワッドツリー分割が適用されたことを示した。その結果、分割深さが2である4つのコーディングブロックが生成されることができる。
【0114】
また、分割深さが2であるコーディングブロックに再びクワッドツリー分割を適用することにより、分割深さが3であるコーディングブロックを生成することができる。
【0115】
コーディングブロックにクワッドツリー分割が適用されない場合、コーディングブロックの大きさ、コーディングブロックがピクチャー境界に位置するか否か、最大分割深さ又は隣接ブロックの分割形態のうちの少なくとも1つを考慮して、前記コーディングブロックにバイナリツリー分割又はトリプルツリー分割を実行するか否かを決定することができる。前記コーディングブロックにバイナリツリー分割又はトリプルツリー分割が行われると判定された場合、分割方向を示す情報がビットストリームを介してシグナルリングされることができる。前記情報は、1ビットフラグmtt_split_cu_vertical_flagであることができる。前記フラグに基づいて、分割方向が垂直方向であるか又は水平方向であるかを決定することができる。加えて、バイナリツリー分割又はトリプルツリー分割のうちのどちらがコーディングブロックに適用されるかを示す情報はビットストリームを介してシグナルリングされることができる。前記情報は、1ビットフラグmtt_split_cu_binary_flagであることができる。前記フラグに基づいて、前記コーディングブロックにバイナリツリー分割が適用されるか又はトリプルツリー分割が適用されるかを決定することができる。
【0116】
一例として、図5に図示された例では、分割深さ1であるコーディングブロックに垂直方向のバイナリツリー分割が適用され、前記分割結果で生成されたコーディングブロックにおいて、左側コーディングブロックには垂直方向のトリプルツリー分割が適用され、右側コーディングブロックには垂直方向のバイナリツリーの分割が適用されたことが図示されている。
【0117】
ビデオをエンコード又はデコードする装置において、ハードウェアの性能上の閾値よりも大きい領域では処理し難い問題が発生する。一例として、ハードウェアの性能上、最大4096個のサンプルを同時に処理することができる場合、4096個よりさらに多いサンプルを有する領域では、64x64サイズのデータユニットを重複アクセスして処理することを必要とする問題とデータを同時処理することができない問題が発生することができる。このように、データ処理の基本ユニットは、パイプラインベースのデータ基本ユニット(Virtual Processing Data Unit、VPDU、以下、データ基本ユニットとする)と定義することができる。
【0118】
データ基本ユニットは、正方形、非正方形又は長方形のタイプに分類されることができる。
【0119】
図6は、データの基本ユニットの形態を示す図である。
【0120】
データ基本ユニットは、同時に処理可能な最大サンプルの個数と同じであるか又は小さな数のサンプルを含むことができる。一例として、図6の(a)に図示された例のように、64x64サイズの正方形のブロックをデータ基本ユニットで設定することができる。又は、非正方形のブロックがデータ基本ユニットで設定されることができる。一例として、図6の(b)又は図6の(c)に図示された例のように、32x128サイズのブロック又は64x32サイズのブロックがデータの基本ユニットで設定されることができる。
【0121】
図示されていないが、三角形、L字型(L-shaped)又は多角形のデータ基本ユニットが定義されることもできる。
【0122】
データ基本ユニットを決定するための情報がビットストリームを介してシグナルリングされることができる。前記情報は、データ基本ユニットの大きさ又は形状のうちの少なくとも1つを決定するためのものであることができる。前記情報に基づいて、非正方形のデータ基本ユニットを許容するか否か、または非長方形のデータ基本ユニットを許容するか否かを決定することができる。
【0123】
又は、または、エンコーダとデコーダは、データ基本ユニットの大きさ又は形状のうちの少なくとも1つを予め定義することができる。
【0124】
コーディングブロックの分割形態を許可するか否かは、データ基本ユニットの大きさを考慮して決定することができる。一例として、コーディングブロックの分割結果として生成されるコーディングブロックがデータ基本ユニットより大きい場合、前記分割を許可しないことができる。又は、コーディングブロックの分割結果として生成される非正方形のコーディングブロックがデータ基本ユニットよりも大きい場合、前記分割を許可しないことができる。一例として、コーディングブロックの幅又は高さが閾値よりも大きい場合、又はコーディングブロックに含まれるサンプルの数が閾値よりも大きい場合、バイナリツリー分割又はトリプルツリー分割を許可しないことができる。これにより、バイナリツリー分割又はトリプルツリーの分割に関する情報のエンコーディングが省略されることができる。
【0125】
又は、データ基本ユニットより大きいコーディングブロックを必ず分割するように設定することができる。あるいは、データ基本ユニットよりも大きいコーディングブロックに対して、必ずバイナリツリー分割又はトリプルツリー分割を実行するように設定することができる。これにより、データ基本ユニットより大きいコーディングブロックに対して、コーディングブロックを分割するか否を示すフラグsplit_flagがエンコードされなくても、フラグの値が1に誘導されることができる。
【0126】
他の例として、データ基本ユニットより大きいコーディングブロックを複数のサブブロックに分割することができる。ここで、サブブロックは、予測のための基本ユニットである予測ユニット又は変換及び/又は量子化のための基本ユニットである変換ユニットに設定されることができる。この際、コーディングブロックを複数の予測ユニットに分割することはVPDU予測ユニットパーティショニングとして定義され、コーディングブロックを複数の変換ユニットに分割することはVPDU変換ユニットパーティションとして定義されることができる。
【0127】
コーディングブロックにVPDU予測ユニットパーティション又はVPDU変換ユニットパーティショニングのうち少なくとも1つが適用されることができる。VPDU予測ユニットパーティショニングの適用によるコーディングブロックの分割タイプはVPDU変換ユニットパーティショニングの適用によるコーディングブロックの分割タイプと同じに設定することができる。
【0128】
コーディングブロックにVPDU予測ユニットパーティショニングのみが適用される場合、サブブロックごとに予測が行われるが、変換及び/又は量子化はコーディングブロックを対象に実行されることができる。このとき、予測エンコーディングモード、イントラ予測モード又はインター予測モードのような予測モードは、コーディングブロックを対象に決定することができる。
【0129】
コーディングブロックにVPDU変換ユニットパーティショニングのみが適用される場合、サブブロックに対して予測が行われるが、変換及び/又は量子化はサブブロックごとに実行されることができる。
【0130】
図7及び図8は、コーディングブロックが複数のサブブロックに分割される例を示した図である。
【0131】
図7は、正方形データ基本ユニットのみが許可される場合の分割様相を示す図であり、図8は、正方形データ基本ユニットと非正方形データ基本ユニットが許可される場合の分割様相を示す図である。
【0132】
正方形データ基本ユニットのみが許可されると仮定した場合、図7の(a)と(b)において、CU0とCU3は異なる2つのVPDUで定義され、CU1は異なる4つのVPDUで定義される。これにより、CU0とCU3を2つのサブブロックに分割し、CU1を4つのサブブロックに分割することができる。
【0133】
正方形データ基本ユニットと非正方形データ基本ユニットが許可されると仮定した場合、図8の(a)と(b)において、CU0とCU3は1つのVPDUで定義可能な反面、CU1は異なる2つのVPDUを利用して定義することができる。これにより、CU0とCU3はサブブロックに分割されていないが、CU1は2つのサブブロックに分割されることができる。
【0134】
このとき、CU1は正方形サブブロック又は非正方形サブブロックに分割されることができる。一例として、CU1を上下に分割する水平線に基づいて、CU1を2つの正方形のサブブロックに分割することができる。又はCU1を左右に分割する垂直線に基づいて、CU1を2つの非正方形のサブブロックに分割することができる。
【0135】
コーディングブロックに適用できる複数の分割タイプ候補が存在する場合、ビットストリームを介して複数の分割タイプ候補のうちのいずれか1つを示す情報をシグナルリングすることができる。一例として、前記情報は、コーディングブロックが正方形のサブブロックに分割されるか否か、又はコーディングブロックが非正方形のサブブロックに分割されるか否かを示すことができる。
【0136】
あるいは、コーディングブロックを正方形のサブブロックに分割することがコーディングブロックを非正方形のサブブロックに分割することよりも高い優先順位を持つように設定することができる。例えば、コーディングブロックを非正方形のサブブロックに分割することは、コーディングブロックを正方形のサブブロックに分割することができないときに許可されることができる。
【0137】
あるいは、親ノードであるコーディングブロックの分割形態に基づいて、コーディングブロックの分割形態を決定することができる。一例として、親ノードであるコーディングブロックがトリプルツリーに基づいて分割された場合、コーディングブロックが正方形のサブブロックに分割されるように設定することができる。一方、親ノードであるコーディングブロックがバイナリツリー又はトリプルツリーに基づいて分割された場合、コーディングブロックが非正方形のサブブロックに分割されるように設定することができる。
【0138】
インター予測は、前ピクチャーの情報を利用して、現在のブロックを予測する予測エンコーディングモードである。一例として、前のピクチャーにおける現在のブロックと同じ位置のブロック(以下、コールケイテッドブロック、Collocated block)を現在のブロックの予測ブロックに設定することができる。以下、現在のブロックと同じ位置のブロックに基づいて生成された予測ブロックをコールケイテッド予測ブロック(Collocated Prediction Block)と呼称することにする。
【0139】
一方、前ピクチャーに存在するオブジェクトが現在のピクチャーの他の位置に移動した場合、オブジェクトの動きを利用して、現在のブロックを効果的に予測することができる。例えば、前のピクチャと現在のピクチャを比較することにより、オブジェクトの移動方向とサイズを知ることができれば、オブジェクトの動き情報を考慮して、現在のブロックの予測ブロック(又は、予測ビデオ)を生成することができる。以下、動き情報を利用して生成された予測ブロックを動き予測ブロックと呼称することができる。
【0140】
現在のブロックで予測ブロックを差分して、残差ブロック(residual block)を生成することができる。このとき、オブジェクトの動きが存在する場合、コロケイテッド予測ブロックの代わりに動き予測ブロックを使用することにより、残差ブロックのエネルギーを削減し、従って残差ブロックの圧縮性能を向上させることができる。
【0141】
上述したように、動き情報を利用して予測ブロックを生成することを動き補償予測と呼称することができる。大部分のインター予測では、動き補償予測に基づいて予測ブロックを生成することができる。
【0142】
動き情報は、モーションベクトル、参照ピクチャインデックス、予測方向又は双方向重みインデックスのうちの少なくとも1つを含むことができる。モーションベクトルは、オブジェクトの移動方向及びサイズを示す。参照ピクチャインデックスは参照ピクチャーリストに含まれる参照ピクチャのうちの現在のブロックの参照ピクチャを特定する。予測方向は単方向L0予測、単方向L1予測又は双方向予測(L0予測及びL1予測)のうちのいずれか1つを指す。現在のブロックの予測方向に応じて、L0方向の動き情報又はL1方向の動き情報のうちの少なくとも1つが使用することができる。双方向重みインデックスは、L0予測ブロックに適用される重みとL1予測ブロックに適用される重みを特定する。
【0143】
図9は、本発明の一実施形態に係るインター予測方法のフローチャートである。
【0144】
図9を参照すると、インター予測方法は、現在のブロックのインター予測モードを決定するステップ(S901)と、決定されたインター予測モードに応じて現在のブロックの動き情報を獲得するテップ(S902)と、取得された動き情報に基づいて現在のブロックの動き補償予測を実行するテップと(S903)と、を含む。
【0145】
ここで、インター予測モードは、現在のブロックの動き情報を決定するための様々な手法を示し、並進(Translation)動き情報を利用するインター予測モードと、アフィン(Affine)動き情報を利用するインター予測モードと、を含むことができる。一例として、並進動き情報を利用するインター予測モードは、マージモード及びモーションベクトル予測モードを含み、アフィン動き情報を利用するインター予測モードは、アフィンマージモード及びアフィンモーションベクトル予測モードを含むことができる。現在のブロックの動き情報は、インター予測モードに応じて、現在のブロックに隣接する隣接ブロック又はビットストリームから解析された情報に基づいて決定されることができる。
【0146】
以下、アフィン動き情報を利用するインター予測方法について詳細に説明する。
【0147】
図10は、オブジェクトの非線形運動を示す図である。
【0148】
ビデオで物体の非線形動きが発生することができる。一例として、図10に示されたように、カメラズームイン(Zoom-in)、ズームアウト(Zoom-out)、回転(Rotation)又はアフィン変換などのオブジェクトの非線形動きが発生することができる。オブジェクトの非線形動きが発生した場合、並進動きベクトルによって、オブジェクトの動きを効果的に表現することはできない。従って、オブジェクトの非線形動きが発生する部分は、並進動きの代わりにアフィン動きを利用して、エンコーディング効率を向上させることができる。
【0149】
図11は、本発明の一実施形態に係るアフィンモーションに基づくインター予測方法のフローチャートである。
【0150】
現在のブロックにアフィンモーションに基づくインター予測手法が適用されるか否かは、ビットストリームから解析された情報に基づいて決定することができる。具体的には、現在のブロックにアフィンマージモードが適用されるか否かを示すフラグ又は現在のブロックにアフィンモーションベクトル予測モードが適用されるか否かを示すフラグのうちの少なくとも1つに基づいて、現在のブロックにアフィンモーションに基づくインター予測手法が適用されるか否かを決定することができる。
【0151】
現在のブロックにアフィンモーションに基づくインター予測手法が適用される場合、現在のブロックのアフィンモーションモデルを決定することができる(S1101)。アフィンモーションモデルは、6パラメータアフィンモーションモデル又は4パラメータアフィンモーションモデルのうちの少なくとも1つとして決定することができる。6パラメータアフィンモーションモデルは、6つのパラメータを利用して、アフィンモーションを表現したものであり、4パラメータアフィンモーションモデルは、4つのパラメータを利用して、アフィンモーションを表現したものである。
【0152】
式(1)は、6パラメータを利用して、アフィンモーションを表現したものである。アフィンモーションはアフィンシードベクトルによって決定される所定の領域の並進動きを示す。
【0153】
[式1]
【0154】
【数1】
【0155】
6つのパラメータを利用してアフィンモーションを表現する場合、複雑な動きを表現することができるが、各パラメータのエンコーディングに必要なビット数が多くなって、エンコーディング効率が低下することができる。これにより、4つのパラメータを利用して、アフィンモーションを表現することもできる。数学式2は、4パラメータを利用して、アフィンモーションを表現したものである。
【0156】
[式2]
【0157】
【数2】
【0158】
現在のブロックのアフィンモーションモデルを決定するための情報がエンコードされてビットストリームを介してシグナルリングされることができる。一例として、前記情報は、1ビットのフラグ「affine_type_flag」であることができる。前記フラグの値が0であることは、4パラメータアフィンモーションモデルが適用されることを示し、前記フラグの値が1であることは、6パラメータアフィンモーションモデルが適用されることを示す。前記フラグは、スライス、タイル又はブロック(例えば、コーディングブロック又はコーディングツリーユニット)単位でエンコードすることができる。スライスレベルでフラグがシグナルリングされる場合、前記スライスレベルで決定されたアフィンモーションモデルは前記スライスに属する全てのブロックに適用されることができる。
【0159】
或いは、現在のブロックのアフィンインター予測モードに基づいて、現在のブロックのアフィンモーションモデルを決定することができる。一例として、アフィンマージモードが適用される場合、現在のブロックのアフィンモーションモデルを4パラメータモーションモデルとして決定することができる。一方、アフィンモーションベクトル予測モードが適用される場合、現在のブロックのアフィンモーションモデルを決定するための情報をエンコードしてビットストリームを介してシグナルリングされることができる。一例として、現在ブロックのアフィンモーションベクトル予測モードが適用される場合、1ビットのフラグ「affine_type_flag」に基づいて、現在のブロックのアフィンモーションモデルを決定することができる。
【0160】
次に、現在のブロックのアフィンシードベクトルを誘導することができる(S1102)。4パラメータアフィンモーションモデルを選択すると、現在のブロックの2つのコントロールポイントでのモーションベクトルを誘導することができる。一方、6パラメータアフィンモーションモデルを選択すると、現在のブロックの3つのコントロールポイントでのモーションベクトルを誘導することができる。コントロールポイントでのモーションベクトルをアフィンシードベクトルと呼称することができる。コントをポイントは、現在のブロックの左上隅、右上隅又は左下隅のうちの少なくとも1つを含むことができる。
【0161】
図12は、各アフィンモーションモデルのアフィンシードベクトルを例示した図である。
【0162】
パラメータアフィンモーションモデルにおいて、左上隅、右上隅又は左下隅のうちの2つのアフィンシードベクトルを誘導することができる。一例として、図12の(a)に示されたように、4パラメータアフィンモーションモデルを選択すると、現在のブロックの左上隅(例えば、左上のサンプル(x1、y1))のアフィンシードベクトルsv0及び現在のブロックの右上隅(例えば、右上のサンプル(x1、y1))のアフィンシードベクトルsv1を利用して、アフィンベクトルを誘導することができる。左上隅のアフィンシードベクトルの代わりに左下隅のアフィンシードベクトルを使用するか、右上隅のアフィンシードベクトルの代わりに左下隅のアフィンシードベクトルを使用することもできる。
【0163】
パラメータアフィンモーションモデルにおいて、左上隅、右上隅及び左下隅のアフィンシードベクトルを誘導することができる。一例として、図12の(b)に示されたように、6パラメータアフィンモーションモデルを選択すると、現在のブロックの左上隅(例えば、左上のサンプル(x1、y1))のアフィンシードベクトルsv0、現在のブロックの右上隅(例えば、右上のサンプル(x1、y1))のアフィンシードベクトルsv1及び現在のブロックの左上隅(例えば、左上のサンプル(x2、y2))のアフィンシードベクトルsv2を利用してアフィンベクトルを誘導することができる。
【0164】
後述される実施例において、4パラメータアフィンモーションモデルにおいて、左上のコントロールポイント及び右上のコントロールポイントのアフィンシードベクトルをそれぞれ第一アフィンシードベクトル及び第二アフィンシードベクトルと呼称する。後述される第一アフィンシードベクトル及び第二アフィンシードベクトルを利用する実施形態において、第一アフィンシードベクトル及び第二アフィンシードベクトルのうちの少なくとも1つは、左下のコントロールポイントのアフィンシードベクトル(第三アフィンシードベクトル)又は右下のコントロールポイントのアフィンシードベクトル(第四アフィンシードベクトル)に置き換えることができる。
【0165】
また、6パラメータアフィンモーションモデルにおいて、左上のコントロールポイント、右上のコントロールポイント及び左下のコントロールポイントのアフィンシードベクトルをそれぞれ第一アフィンシードベクトル、第二アフィンシードベクトル及び第三アフィンシードベクトルと呼称することにする。後述される第一アフィンシードベクトル、第二アフィンシードベクトル及び第三アフィンシードベクトルを利用する実施形態において、第一アフィンシードベクトル、第二アフィンシードベクトル及び第三アフィンシードベクトルの少なくとも1つは右下のコントロールポイントのアフィンシードベクトル(第四アフィンシードベクトル)に置き換えることができる。
【0166】
アフィンシードベクトルを利用して、各サブブロックのアフィンベクトルを誘導することができる(S1103)。ここで、アフィンベクトルはアフィンシードベクトルに基づいて誘導される並進モーションベクトルを示す。サブブロックのアフィンベクトルをアフィンサブブロックモーションベクトル又はサブブロックモーションベクトルと呼称することができる。
【0167】
図13は、4パラメータモーションモデルにおけるサブブロックのアフィンベクトルを例示した図である。
【0168】
サブブロックのアフィンベクトルは、コントロールポイントの位置、サブブロックの位置及びアフィンシードベクトルに基づいて誘導することができる。一例として、式3は、アフィンサブブロックベクトルを誘導する例を示す。
【0169】
[式3]
【0170】
【数3】
【0171】
上記式3で(x、y)はサブブロックの位置を示す。ここで、サブブロックの位置は、サブブロックに含まれた基準サンプルの位置を示す。基準サンプルは、サブブロックの左上隅に位置するサンプルを、或いは、x軸の座標又はy軸の座標のうちの少なくとも1つが中央位置であるサンプルであることができる。(x0、y0)は第一コントロールポイントの位置を示し、(sv0x、sv0y)は第一アフィンシードベクトルを示す。なお、(x1、y1)は第二コントロールポイントの位置を示し、(sv1x、sv1y)は第二アフィンシードベクトルを示す。
【0172】
第一コントロールポイント及び第二コントロールポイントがそれぞれ現在のブロックの左上隅及び右上隅に対応する場合、x1-x0は、現在のブロックの幅と同じ値に設定することができる。
【0173】
以後、各サブブロックのアフィンベクトルを用いて、各サブブロックの動き補償予測を行うことができる(S1104)。動き補償予測の実行結果、各サブブロックの予測ブロックが生成されることができる。サブブロックの予測ブロックが現在のブロックの予測ブロックに設定されることができる。
【0174】
次に、並進動き情報を利用するインター予測方法について詳細に説明する。
【0175】
現在のブロックの動き情報は、現在のブロック以外の他のブロックの動き情報から誘導されることができる。ここで、他のブロックは、現在のブロックの前にインター予測によってエンコード/デコードされたブロックであることができる。現在のブロックの動き情報を他のブロックの動き情報と同じに設定することをマージモードとして定義することができる。また、他のブロックの動きベクトルを現在ブロックの動きベクトルの予測値に設定することをモーションベクトル予測モードとして定義することができる。
【0176】
図14は、マージモードにおける現在のブロックの動き情報を誘導する過程のフローチャートである。
【0177】
現在のブロックのマージ候補を誘導することができる(S1401)。現在のブロックのマージ候補は、現在のブロックの前にインター予測によってエンコード/デコードされたブロックから誘導されることができる。
【0178】
図15は、マージ候補を誘導するために使用される候補ブロックを例示した図である。
【0179】
候補ブロックは、現在のブロックに隣接するサンプルを含む隣接ブロック又は現在のブロックに隣接していないサンプルを含む非隣接ブロックのうちの少なくとも1つを含むことができる。以下、候補ブロックを決定するサンプルを基準サンプルとして定義する。なお、現在のブロックに隣接する基準サンプルを隣接基準サンプルと呼称して、現在のブロックに隣接していない基準サンプルを非隣接基準サンプルと呼称することにする。
【0180】
隣接基準サンプルは、現在のブロックの最左側列の隣接列又は現在のブロックの最上端行の隣接行に含まれることができる。一例として、現在ブロックの左上のサンプルの座標を(0、0)とするとき、(-1、H-1)の位置の基準サンプルを含むブロック、(W-1、-1)の位置の基準サンプルを含むブロック、(W、-1)の位置の基準サンプルを含むブロック、(-1、H)の位置の基準サンプルを含むブロック、又は(-1、-1)の位置の基準サンプルを含むブロックのうちの少なくとも1つが候補ブロックとして使用されることができる。図面を参照すると、インデックス0~インデックス4の隣接ブロックが候補ブロックとして使用されることができる。
【0181】
非隣接基準サンプルは、現在のブロックに隣接する基準サンプルとx軸の距離又はy軸の距離のうちの少なくとも1つがすでに定義された値を持つサンプルを示す。一例として、左側基準サンプルとのx軸距離がすでに定義された値である基準サンプルを含むブロック、上端基準サンプルとのy軸の距離がすでに定義された値である非隣接サンプルを含むブロック、又は左上基準サンプルとのx軸の距離及びy軸の距離がすでに定義された値である非隣接サンプルを含むブロックのうちの少なくとも1つが候補ブロックとして使用されることができる。すでに定義された値は、4、8、12、16などの自然数であることができる。図面を参照すると、インデックス5~26のブロックのうちの少なくとも1つが候補ブロックとして使用されることができる。
【0182】
隣接基準サンプルと同じ垂直線、水平線又は対角線に位置していないサンプルを非隣接基準サンプルとして設定することもできる。
【0183】
図16は、基準サンプルの位置を示す図である。
【0184】
図16に示された例のように、上端非隣接基準サンプルのx座標は、上端隣接基準サンプルのx座標と異なるように設定されることができる。一例として、上端隣接基準サンプルの位置が(W-1、-1)である場合、上端隣接基準サンプルからy軸に向ってNだけ離れた上端非隣接基準サンプルの位置は((W/2)-1、 -1-N)に設定され、上端隣接基準サンプルからy軸に向って2Nだけ離れた上端非隣接基準サンプルの位置は(0、-1-2N)に設定されることができる。即ち、非隣接基準サンプルの位置は、隣接基準サンプルの位置及び隣接基準サンプルとの距離に基づいて決定されることができる。
【0185】
以下、候補ブロックのうちの隣接基準サンプルを含む候補ブロックを隣接ブロックと呼称し、非隣接基準サンプルを含むブロックを非隣接ブロックと呼称することにする。
【0186】
現在のブロックと候補ブロックとの間の距離が閾値以上である場合、上記候補ブロックはマージ候補として利用できないように設定されることができる。上記閾値は、コーディングツリーユニットのサイズに基づいて決定されることができる。一例として、閾値は、コーディングツリーユニットの高さ(ctu_height)又はコーディングツリーユニットの高さからオフセットを加算又は減算した値(例えば、ctu_height±N)に設定されることができる。オフセットNはエンコーダー及びデコーダーで既に定義された値であり、4、8、16、32、又はctu_heightに設定されることができる。
【0187】
現在のブロックのy軸座標と候補ブロックに含まれたサンプルのy軸座標との間の差分が閾値よりも大きい場合、候補ブロックはマージ候補として利用できないように決定することができる。
【0188】
或いは、現在のブロックと同じコーディングツリーユニットに属さない候補ブロックはマージ候補として利用できないように設定されることができる。一例として、基準サンプルが、現在のブロックが属するコーディングツリーユニットの上端境界を超える場合、前記基準サンプルを含む候補ブロックはマージ候補として利用できないように設定されることができる。
【0189】
もし、現在のブロックの上端境界がコーディングツリーユニットの上端境界と隣接する場合、多数の候補ブロックがマージ候補として利用できないと判断されて、現在のブロックのエンコーディング/デコーディング効率が低下することができる。このような問題点を解消するために、現在のブロックの左側に位置する候補ブロックの数が現在のブロックの上端に位置する候補ブロックの数よりも多くなるように候補ブロックを設定することができる。
【0190】
図17は、マージ候補を誘導するために使用される候補ブロックを例示した図である。
【0191】
図17に示された例のように、現在のブロックの上端N個のブロック列に属する上端ブロックと現在のブロックの左側M個のブロック列に属する左側ブロックを候補ブロックとして設定することができる。このとき、MをNよりさらに大きく設定して、左側候補ブロックの数を上端候補ブロックの数よりさらに大きく設定することができる。
【0192】
一例として、現在のブロック内の基準サンプルのy軸座標と候補ブロックとして利用できる上端ブロックのy軸座標の差分が現在のブロックの高さのN倍を超えないように設定することができる。また、現在のブロック内の基準サンプルのx軸座標と候補ブロックとして利用できる左側ブロックのx軸座標の差分が現在のブロックの幅のM倍を超えないように設定することができる。
【0193】
一例として、図17に示された例において、現在のブロックの上端2つのブロック列に属するブロック及び現在のブロックの左側5つのブロック列に属するブロックが候補ブロックとして設定されていることが図示されている。
【0194】
別の例として、候補ブロックと現在のブロックが同じコーディングツリーユニットに属していない場合、前記候補ブロックの代わりに、現在のブロックと同じコーディングツリーユニットに属するブロック又は前記コーディングツリーユニットの境界に隣接する基準サンプルを含むブロックを利用してマージ候補を誘導することができる。
【0195】
図18は、基準サンプルの位置が変更される例を示す図である。
【0196】
基準サンプルが現在のブロックと異なるコーディングツリーユニットに含まれ、前記基準サンプルが前記コーディングツリーユニットの境界に隣接していない場合、前記基準サンプルの代わりに、前記コーディングツリーユニットの境界に隣接する基準サンプルを利用して、候補ブロックを決定することができる。
【0197】
一例として、図18の(a)と(b)に示された例において、現在のブロックの上端境界とコーディングツリーユニットの上端境界が接する場合、現在のブロックの上端の基準サンプルは現在のブロックと異なるコーディングツリーユニットに属することになる。現在のブロックと異なるコーディングツリーユニットに属する基準サンプルにおいて、コーディングツリーユニットの上端境界に隣接しない基準サンプルをコーディングツリーユニットの上端境界に隣接するサンプルに置き換えることができる。
【0198】
一例として、図18の(a)に示された例のように、6位置の基準サンプルをコーディングツリーユニットの上端境界に位置する6′位置のサンプルに置き換え、図18の(b)に示された例のように、15位置の基準サンプルをコーディングツリーユニットの上端境界に位置する15′位置のサンプルに置き換えることができる。このとき、代替サンプルのy座標はコーディングツリーユニットの隣接位置に変更され、代替サンプルのx座標は基準サンプルと同じように設定されることができる。一例として、6′位置のサンプルは6位置のサンプルと同じx座標を持ち、15′位置のサンプルは15位置のサンプルと同じx座標を持つことができる。
【0199】
或いは、基準サンプルのx座標からオフセットを加算又は減算したものを代替サンプルのx座標として設定されることができる。一例として、現在ブロックの上端に位置する隣接基準サンプルと非隣接基準サンプルのx座標が同じ場合、基準サンプルのx座標からオフセットを加算又は減算したものを代替サンプルのx座標として設定することができる。これは、非隣接基準サンプルを替える代替サンプルが他の非隣接基準サンプル又は隣接標準サンプルと同じ位置になることを防止するためである。
【0200】
図19は、基準サンプルの位置が変更される例を示す図である。
【0201】
現在のブロックと異なるコーディングツリーユニットに含まれ、コーディングツリーユニットの境界に隣接していない基準サンプルをコーディングツリーユニットの境界に位置するサンプルに置き換える場合、基準サンプルのx座標からオフセットを加算又は減算した値を代替サンプルのx座標として設定することができる。
【0202】
一例として、図19に示された例において、6位置の基準サンプル及び15位置の基準サンプルは、それぞれy座標がコーディングツリーユニットの上端境界に隣接する行と同じ6′位置のサンプル及び15′位置のサンプルに置き換えることができる。このとき、6′位置のサンプルのx座標は、6位置の基準サンプルのx座標からW/2を差分した値に設定され、15′位置のサンプルのx座標は15位置の基準サンプルのx座標からW-1を差分した値に設定されることができる。
【0203】
図18及び図19に示された例とは異なり、現在のブロックの最上端行の上端に位置する行のy座標又はコーディングツリーユニットの上端境界のy座標を代替サンプルのy座標として設定することもできる。
【0204】
図示されなかったが、コーディングツリーユニットの左側境界を基準として基準サンプルを替えるサンプルを決定することもできる。一例として、基準サンプルが現在のブロックと同じコーディングツリーユニットに含まれず、コーディングツリーユニットの左側境界にも隣接しない場合、前記基準サンプルをコーディングツリーユニットの左側境界に隣接するサンプルに置き換えることができる。このとき、代替サンプルは、基準サンプルと同じy座標を持つか、基準サンプルのy座標からオフセットを加算又は差分して得られたy座標を持つことができる。
【0205】
以後、代替サンプルを含むブロックを候補ブロックとして設定し、前記候補ブロックに基づいて、現在のブロックのマージ候補を誘導することができる。
【0206】
現在のブロックと異なるピクチャに含まれている時間的隣接ブロックからマージ候補を誘導することもできる。一例として、コロケイテッドピクチャーに含まれているコールケイテッドブロックからマージ候補を誘導することができる。
【0207】
マージ候補の動き情報は、候補ブロックの動き情報と同じように設定されることができる。一例として、候補ブロックのモーションベクトル、参照ピクチャインデックス、予測方向又は双方向の重みインデックスのうちの少なくとも1つをマージ候補の動き情報として設定することができる。
【0208】
マージ候補を含むマージ候補リストを生成することができる(S1402)。前記マージ候補は、現在のブロックに隣接する隣接ブロックから誘導された隣接マージ候補及び非隣接ブロックから誘導される非隣接マージ候補に区分されることができる。
【0209】
マージ候補リスト内のマージ候補のインデックスは、所定の順序で割り当てることができる。一例として、隣接マージ候補に割り当てられるインデックスが非隣接マージ候補に割り当てられるインデックスよりも小さい値を有することができる。又は、図15又は図17に図示された各ブロックのインデックスに基づいて、各マージ候補にインデックスを割り当てることができる。
【0210】
マージ候補に複数のマージ候補が含まれる場合、複数のマージ候補のうちの少なくとも1つを選択することができる(S1403)。この際、現在のブロックの動き情報が隣接マージ候補から誘導されるか否かを示す情報がビットストリームを介してシグナルリングされることができる。前記情報は、1ビットのフラグであることができる。一例として、現在ブロックの動き情報が隣接マージ候補から誘導されるか否かを示す構文要素(syntax element)isAdjancentMergeFlagがビットストリームを介してシグナルリングされることができる。構文要素isAdjancentMergeFlagの値が1である場合、現在のブロックの動き情報は、隣接マージ候補に基づいて誘導されることができる。一方、構文要素isAdjancentMergeFlagの値が0である場合、現在のブロックの動き情報は非隣接マージ候補に基づいて誘導されることができる。
【0211】
表1は、構文要素isAdjancentMergeFlagを含む構文テーブルを示す。
【0212】
【表1】
【0213】
複数のマージ候補のうちのいずれか1つを特定するための情報がビットストリームを介してシグナルリングされることができる。一例として、マージ候補リストに含まれているマージ候補のうちのいずれか1つのインデックスを示す情報がビットストリームを介してシグナルリングされることができる。
【0214】
isAdjacentMergeflagが1である場合、隣接マージ候補のいずれか1つを特定する構文要素merge_idxがシグナルリングされることができる。構文要素merge_idxの最大値は、隣接マージ候補の数から1を差分した値として設定されることができる。
【0215】
isAdjacentMergeflagが0である場合、非隣接マージ候補のうちのいずれか1つを特定する構文要素NA_merge_idxがシグナルリングされることができる。構文要素NA_merge_idxは非隣接マージ候補のインデックスから隣接マージ候補の数を差分した値を示す。デコーダは、NA_merge_idxによって特定されたインデックスに隣接マージ候補の数を加えて、非隣接マージ候補を選択することができる。
【0216】
マージ候補リストに含まれるマージ候補の数が閾値よりも小さい場合、インター領域モーション情報テーブルに含まれるマージ候補をマージ候補リストに追加することができる。ここで、閾値は、マージ候補リストが含むことができる最大マージ候補の数又は最大マージ候補の数からオフセットを差し引いた値であることができる。オフセットは、1又は2などの自然数であることができる。インター領域モーション情報テーブルは、現在のブロックの前にエンコード/デコードされたブロックに基づいて誘導されたマージ候補を含むことができる。
【0217】
インター領域モーション情報テーブルは、現在のピクチャ内のインター予測に基いてエンコード/デコードされたブロックから誘導されるマージ候補を含む。一例として、インター領域モーション情報テーブルに含まれるマージ候補の動き情報は、インター予測に基づいてエンコード/デコードされたブロックの動き情報と同じように設定されることができる。ここで、動き情報はモーションベクトル、参照ピクチャインデックス、予測方向又は双方向の重みインデックスのうちの少なくとも一つを含むことができる。
【0218】
便利に説明するために、インター領域モーション情報テーブルに含まれるマージ候補をインター領域マージ候補と呼称する。
【0219】
インター領域モーション情報テーブルに含まれる最大マージ候補の数は、エンコーダ及びデコーダで予め定義されていることができる。一例として、インター領域モーション情報テーブルに含まれる最大マージ候補の数は、1、2、3、4、5、6、7、8又はそれ以上(例えば、16)であることができる。
【0220】
或いは、インター領域モーション情報テーブルの最大マージ候補の数を示す情報がビットストリームを介してシグナルリングされることができる。前記情報は、シーケンス、ピクチャー、又はスライスレベルでシグナルリングされることができる。
【0221】
或いは、インター領域モーション情報テーブルの最大マージ候補の数は、ピクチャーのサイズ、スライスのサイズ又はコーディングツリーユニットのサイズに基づいて決定されることができる。
【0222】
インター領域モーション情報テーブルは、ピクチャ、スライス、タイル、ブリック、コーディングツリーユニット、又はコーディングツリーユニットライン(行又は列)単位で初期化されることができる。一例として、スライスが初期化される場合、インター領域モーション情報テーブルも初期化され、インター領域モーション情報テーブルはどのようなマージ候補も含まないことがある。
【0223】
或いは、インター領域モーション情報テーブルを初期化するか否かを示す情報がビットストリームを介してシグナルリングされることもできる。前記情報は、スライス、タイル、ブリック又はブロックレベルでシグナルリングされることができる。前記情報がインター領域モーション情報テーブルを初期化することを指示する前に、既に構成されたインター領域モーション情報テーブルが使用されることができる。
【0224】
或いは、ピクチャーパラメータセット又はスライスヘッダを介して初期インター領域マージ候補に関する情報がシグナルリングされることができる。スライスが初期化されても、インター領域モーション情報テーブルは、初期インター領域マージ候補を含むことができる。従って、スライス内の最初のエンコーディング/デコーディング対象であるブロックに対してインター領域マージ候補を利用することができる。
【0225】
エンコーディング/デコーディング順序でブロックをエンコード/デコードし、インター予測に基づいてエンコード/デコードされたブロックをエンコーディング/デコーディング順序で順次にインター領域マージ候補として設定することができる。
【0226】
図20は、インター領域モーション情報テーブルを更新する様態を示す図である。
【0227】
現在のブロックに対してインター予測が行われた場合(S2001)、現在のブロックに基づいてインター領域マージ候補を誘導することができる(S2002)。インター領域マージ候補の動き情報は、現在のブロックの動き情報と同じように設定されることができる。
【0228】
インター領域モーション情報テーブルが空の状態である場合(S2003)、現在のブロックに基づいて誘導されたインター領域マージ候補をインター領域モーション情報テーブルに追加することができる(S2004)。
【0229】
インター領域モーション情報テーブルが既にインター領域マージ候補を含む場合(S2003)、現在のブロックの動き情報(又は、これに基づいて誘導されたインター領域マージ候補)に対して冗長性検査を実施することができる(S2005)。冗長性検査は、インター領域モーション情報テーブルに既に格納されたインター領域マージ候補の動き情報と現在のブロックの動き情報が同じであるか否かを決定するためのものである。冗長性検査は、インター領域モーション情報テーブルに既に格納された全てのインター領域マージ候補を対象として実行されることができる。或いは、インター領域モーション情報テーブルに既に格納されたインター領域マージ候補におけるインデックスが閾値以上又は閾値以下であるインター領域マージ候補を対象として冗長性検査を実行することができる。
【0230】
現在のブロックの動き情報と同じ動き情報を有するインター予測マージ候補が含まれていない場合、現在のブロックに基づいて誘導されたインター領域マージ候補をインター領域モーション情報テーブルに追加することができる(S2008)。インター予測マージ候補が同じであるか否かは、インター予測マージ候補の動き情報(例えば、モーションベクトル及び/又は参照ピクチャーインデックスなど)が同じであるか否かに基づいて決定されることができる。
【0231】
このとき、インター領域モーション情報テーブルに既に最大数のインター領域マージ候補が格納されている場合(S2006)、最も古いインター領域マージ候補を削除して(S2007)、現在のブロックに基づいて誘導されたインター領域マージ候補をインター領域モーション情報テーブルに追加することができる(S2008)。
【0232】
インター領域マージ候補は、それぞれインデックスによって識別されることができる。現在のブロックから誘導されたインター領域マージ候補がインター領域モーション情報テーブルに追加される場合、前記インター領域マージ候補に最も低いインデックス(例えば、0)を割り当て、既に格納されたインター領域マージ候補のインデックスを1ずつ増加させることができる。このとき、インター領域モーション情報テーブルに既に最大数のインター予測マージ候補が格納された場合、インデックスが最大のインター領域マージ候補が除去される。
【0233】
或いは、現在のブロックから誘導されたインター領域マージ候補がインター領域モーション情報テーブルに追加される場合、前記インター領域マージ候補に最も大きいインデックスを割り当てることができる。一例として、インター領域モーション情報テーブルに既に格納されたインター予測マージ候補の数が最大値より小さい場合、前記インター領域マージ候補には既に格納されたインター予測マージ候補の数と同じ値のインデックスが割り当てられることができる。或いは、インター領域モーション情報テーブルに既に格納されたインター予測マージ候補の数が最大値と同じ場合、前記インター領域マージ候補には最大値から1を差し引いたインデックスが割り当てられることができる。なお、インデックスが最も小さいインター領域マージ候補が除去され、残りの既に格納されたインター領域マージ候補のインデックスが1ずつ減少される。
【0234】
図21は、インター領域マージ候補テーブルを更新する様態を示す図である。
【0235】
現在のブロックから誘導されたインター領域マージ候補がインター領域マージ候補テーブルに追加されて、前記インター領域マージ候補に最も大きいインデックスが割り当てられると仮定する。なお、インター領域マージ候補テーブルには既に最大数のインター領域マージ候補が格納されていると仮定する。
【0236】
現在のブロックから誘導されたインター領域マージ候補HmvpCand[n +1]をインター領域マージ候補テーブルHmvpCandListに追加する場合、既に格納されたインター領域マージ候補のうちのインデックスが最も小さいインター領域マージ候補HmvpCand[0]を削除し、残りのインター領域マージ候補のインデックスを1ずつ減少させることができる。なお、現在のブロックから誘導されたインター領域マージ候補HmvpCand[n+1]のインデックスを最大値(図21に図示された例では、nである)に設定することができる。
【0237】
現在のブロックに基づいて誘導されたインター領域マージ候補と同じインター領域マージ候補が既に格納されている場合(S2005)、現在のブロックに基づいて誘導されたインター領域マージ候補をインター領域モーション情報テーブルに追加しなくてもよい(S2009)。
【0238】
或いは、現在のブロックに基づいて誘導されたインター領域マージ候補をインター領域モーション情報テーブルに追加しながら、前記インター領域マージ候補と同じである既に格納されたインター領域マージ候補を削除することもできる。この場合、既に格納されたインター領域マージ候補のインデックスを新たに更新することと同じ効果が得られる。
【0239】
図22は、既に格納されたインター領域マージ候補のインデックスが更新される例を示す図である。
【0240】
現在のブロックに基づいて誘導されたインター領域マージ候補mvCandと同じである既に格納されたインター予測マージ候補のインデックスがhIdxある場合、前記既に格納されたインター予測マージ候補を削除し、インデックスがhIdxより大きいインター予測マージ候補のインデックスを1だけ減少させることができる。一例として、図22に示された例では、mvCandと同じHmvpCand[2]がインター領域モーション情報テーブルHvmpCandListから削除され、HmvpCand[3]からHmvpCand[n]までのインデックスが1ずつ減少することが図示されている。
【0241】
そして、現在のブロックに基づいて誘導されたインター領域マージ候補mvCandをインター領域モーション情報テーブルの最後に追加することができる。
【0242】
或いは、現在のブロックに基づいて誘導されたインター領域マージ候補と同じである、既に格納されたインター領域マージ候補に割り当てられたインデックスを更新することができる。例えば、既に格納されたインター領域マージ候補のインデックスを最小値又は最大値に変更することができる。
【0243】
所定の領域に含まれたブロックの動き情報は、インター領域モーション情報テーブルに追加されないように設定することができる。一例として、マージ処理領域に含まれているブロックの動き情報に基づいて誘導されるインター領域マージ候補はインター領域モーション情報テーブルに追加しないことができる。マージ処理領域に含まれたブロックに対してエンコーディング/デコーディング順序が定義されていなく、これらのいずれか1つの動き情報を他のブロックのインター予測時に利用することは不適切である。従って、マージ処理領域に含まれるブロックに基づいて誘導されたインター領域マージ候補は、インター領域モーション情報テーブルに追加しないことができる。
【0244】
サブブロックユニットで動き補償予測が行われた場合、現在のブロックに含まれた複数のサブブロックのうちの代表サブブロックの動き情報に基づいてインター領域マージ候補を誘導することができる。一例として、現在ブロックに対してサブブロックマージ候補が使用された場合、サブブロックのうちの代表サブブロックの動き情報に基づいて、インター領域マージ候補を誘導することができる。
【0245】
サブブロックの動きベクトルは、次の順序で誘導されることができる。先ず、現在のブロックのマージ候補リストに含まれているマージ候補のうちのいずれか1つを選択し、選択されたマージ候補のモーションベクトルに基づいて、初期シフトベクトル(shVector)を誘導することができる。そして、コーディングブロック内の各サブブロックの基準サンプル(例えば、左上端のサンプル又は中間位置のサンプル)の位置(xSb、ySb)に初期シフトベクトルを加算して、基準サンプルの位置が(xColSb、yColSb)であるシフトサブブロックを誘導することができる。下記の式4は、シフトサブブロックを誘導するための数式を示す。
【0246】
[式4]
【0247】
【数4】
【0248】
それから、(xColSb、yColSb)を含むサブブロックの中心位置に対応するコロケイテッドブロックのモーションベクトルを(xSb、ySb)を含むサブブロックのモーションベクトルとして設定することができる。
【0249】
代表サブブロックは、現在のブロックの左上のサンプル又は中央のサンプルを含むサブブロックを意味することができる。
【0250】
図23は代表サブブロックの位置を示す図である。
【0251】
図23の(a)は、現在のブロックの左上に位置するサブブロックが代表サブブロックとして設定された例を示し、図23の(b)は、現在のブロックの中央に位置するサブブロックが代表サブブロックとして設定された例を示す。サブブロックユニットで動き補償予測が行われた場合、現在のブロックの左上のサンプルを含むサブブロック又は現在のブロックの中央のサンプルを含むサブブロックの動きベクトルに基づいて、現在のブロックのインター領域マージ候補を誘導することができる。
【0252】
現在のブロックのインター予測モードに基づいて、現在のブロックをインター領域マージ候補として利用するか否かを決定することもできる。一例として、アフィンモーションモデルに基づいてエンコード/デコードされたブロックは、インター領域マージ候補として使用できないように設定されることができる。従って、現在のブロックがインター予測によってエンコード/デコードされたとしても、現在のブロックのインター予測モードがアフィン予測モードである場合、現在のブロックに基づいてインター予測モーション情報テーブルを更新しないことがある。
【0253】
或いは、アフィンモーションモデルに基づいてエンコード/デコードされたブロックに含まれているサブブロックのうちの少なくとも1つのサブブロックベクトルに基づいて、インター領域マージ候補を誘導することもできる。一例として、現在ブロックの左上に位置するサブブロック、中央に位置するサブブロック又は右上に位置するサブブロックを利用して、インター領域マージ候補を誘導することができる。或いは、複数のサブブロックのサブブロックベクトルの平均値をインター領域マージ候補の動きベクトルとして設定することもできる。
【0254】
或いは、アフィンモーションモデルに基づいてエンコード/デコードされたブロックのアフィンシードベクトルの平均値に基づいて、インター領域マージ候補を誘導することもできる。一例として、現在ブロックの第一アフィンシードベクトル、第二アフィンシードベクトル又は第三アフィンシードベクトルのうちの少なくとも1つの平均をインター領域マージ候補の動きベクトルとして設定することができる。
【0255】
或いは、各インター予測モードごとにインター領域モーション情報テーブルを構成することができる。一例として、イントラブロックコピーによってエンコード/デコードされたブロックのためのインター領域モーション情報テーブル、並進モーションモデルに基づいてエンコード/デコードされたブロックのためのインター領域モーション情報テーブル、又はアフィンモーションモデルに基づいてエンコード/デコードされたブロックのためのインター領域モーション情報テーブルのうちの少なくとも1つが定義されることができる。現在のブロックのインター予測モードに応じて、複数のインター領域モーション情報テーブルのうちのいずれか1つが選択されることができる。
【0256】
図24は、各インター予測モードごとにインター領域モーション情報テーブルが生成される例を示す図である。
【0257】
ブロックが非ファインモーションモデルに基づいてエンコード/デコードされた場合、前記ブロックに基づいて誘導されたインター領域マージ候補mvCandはインター領域非ファインモーション情報テーブルHmvpCandListに追加されることができる。一方、ブロックがアフィンモーションモデルに基づいてエンコード/デコードされた場合、前記ブロックに基づいて誘導されたインター領域マージ候補mvAfCandはインター領域アフィンモーション情報テーブルHmvpAfCandListに追加されることができる。
【0258】
アフィンモーションモデルに基づいてエンコード/デコードされたブロックから誘導されるインター領域マージ候補には、前記ブロックのアフィンシードベクトルが格納されることができる。従って、前記インター領域マージ候補を、現在のブロックのアフィンシードベクトルを誘導するためのマージ候補として利用することができる。
【0259】
説明したインター領域モーション情報テーブルに加えて、追加インター領域モーション情報テーブルを定義することもできる。上述したインター領域モーション情報テーブル(以下、第一インター領域モーション情報テーブルという)に加えて、長期モーション情報テーブル(以下、第二インター領域モーション情報テーブルという)を定義することができる。ここで、長期モーション情報テーブルは、長期マージ候補を含む。
【0260】
第一インター領域モーション情報テーブル及び第二インター領域モーション情報テーブルが全て空である場合、先ず、第二インター領域モーション情報テーブルにインター領域マージ候補を追加することができる。第二インター領域モーション情報テーブルに使用可能なインター領域マージ候補の数が最大数に達した後にのみ、第一インター領域モーション情報テーブルにインター領域マージ候補を追加することができる。
【0261】
或いは、1つのインター予測マージ候補を第二インター領域モーション情報テーブル及び第一インター領域モーション情報テーブルの両方に追加することもできる。
【0262】
このとき、構成が完了した第二インター領域モーション情報テーブルは、これ以上更新されないことができる。或いは、デコードされた領域がスライスの所定の比率以上である場合、第二インター領域モーション情報テーブルを更新することができる。或いは、N個のコーディングツリーユニットラインごとに第二インター領域モーション情報テーブルを更新することができる。
【0263】
一方、第一インター領域モーション情報テーブルは、インター予測によってエンコード/デコードされたブロックが発生するたびに更新されることができる。ただし、第二インター領域モーション情報テーブルに追加されるインター領域マージ候補は、第一インター領域モーション情報テーブルを更新するために使用されないように設定することもできる。
【0264】
第一インター領域モーション情報テーブル又は第二インター領域モーション情報テーブルのうちのいずれか1つを選択するための情報がビットストリームを介してシグナルリングされることができる。マージ候補リストに含まれているマージ候補の数が閾値よりも小さい場合、前記情報が指示するインター領域モーション情報テーブルに含まれるマージ候補をマージ候補リストに追加することができる。
【0265】
或いは、現在のブロックの大きさ、形状、インター予測モード、双方向予測するか否か、動きベクトルリファインするか否か、又は三角パーティショニングするか否かに基づいて、インター領域モーション情報テーブルを選択することもできる。
【0266】
或いは、第一インター領域モーション情報テーブルに含まれるインター領域マージ候補を追加しても、マージ候補リストに含まれているマージ候補の数が最大マージ数よりも小さい場合、第二インター領域モーション情報テーブルに含まれているインター領域マージ候補をマージ候補リストに追加することができる。
【0267】
図25は、長期モーション情報テーブルに含まれているインター領域マージ候補がマージ候補リストに追加された例を示す図である。
【0268】
マージ候補リストに含まれているマージ候補の数が最大数よりも小さい場合、第一インター領域モーション情報テーブルHmvpCandListに含まれているインター領域マージ候補をマージ候補リストに追加することができる。第一インター領域モーション情報テーブルに含まれているインター領域マージ候補をマージ候補リストに追加しても、マージ候補リストに含まれているマージ候補の数が最大数よりも小さい場合、長期モーション情報テーブルHmvpLTCandListに含まれているインター領域マージ候補をマージ候補リストに追加することができる。
【0269】
表2は、長期モーション情報テーブルに含まれているインター領域マージ候補をマージ候補リストに追加するプロセスを示す。
【0270】
【表2】
【0271】
インター領域マージ候補が動き情報に加えて追加情報を含むように設定することができる。一例として、インター領域マージ候補は、ブロックのサイズ、形状、又はブロックのパーティション情報を追加格納することができる。現在のブロックのマージ候補リストを構成する際、インター予測マージ候補にのうち、現在のブロックと同じ又は類似のサイズ、形状、又はパーティション情報を有するインター予測マージ候補のみを使用したり、現在のブロックと同じ又は類似の大きさ、形状、又はパーティション情報を有するインター予測マージ候補を先ずマージ候補リストに追加することができる。
【0272】
或いは、ブロックのサイズ、形状、又はパーティション情報ごとにインター領域モーション情報テーブルを生成することができる。複数のインター領域モーション情報テーブルのうち、現在のブロックの形状、サイズ、又はパーティション情報に合致するインター領域モーション情報テーブルを使用して、現在のブロックのマージ候補リストを生成することができる。
【0273】
現在のブロックのマージ候補リストに含まれているマージ候補の数が閾値よりも小さい場合、インター領域モーション情報テーブルに含まれているインター領域マージ候補をマージ候補リストに追加することができる。前記追加過程は、インデックス基準昇順又は降順で実行される。一例として、インデックスが最も大きいインター領域マージ候補からマージ候補リストに追加することができる。
【0274】
インター領域モーション情報テーブルに含まれているインター領域マージ候補をマージ候補リストに追加しようとする場合、インター領域マージ候補とマージ候補リストに既に格納されたマージ候補との間の冗長性検査が実行されることができる。
【0275】
一例として、表3は、インター領域マージ候補がマージ候補リストに追加される過程を示す。
【0276】
【表3】
【0277】
冗長性検査は、インター領域モーション情報テーブルに含まれているインター領域マージ候補の一部に対してのみ実行されることができる。一例として、インデックスが閾値以上又は閾値以下であるインター領域マージ候補のみに対して冗長検査が行われることができる。又はインデックスが最も大きいN個のマージ候補又はインデックスが最も小さいN個のマージ候補のみに対して冗長検査が行われることができる。
【0278】
或いは、マージ候補リストに既に格納されたマージ候補のうちの一部のみに対して冗長検査を実行することができる。一例として、インデックスが閾値以上又は閾値以下であるマージ候補又は特定の位置のブロックから誘導されたマージ候補のみに対して冗長検査が行われることができる。ここで、特定の位置は、現在のブロックの左側隣接ブロック、上部隣接ブロック、右上隣接ブロック又は左下隣接ブロックのうちの少なくとも1つを含むことができる。
【0279】
図26は、マージ候補のうちの一部のみに対して冗長性検査が実行される例を示す図である。
【0280】
インター領域マージ候補HmvpCand[j]をマージ候補リストに追加しようとする場合、インター領域マージ候補に対して、インデックスが最も大きい2つのマージ候補mergeCandList[NumMerge-2]及びmergeCandList[NumMerge-1]との冗長性チェックを実行することができる。ここで、NumMergeは使用可能な空間的マージ候補及び時間的マージ候補の数を示すことができる。
【0281】
図示された例とは異なり、インター領域マージ候補HmvpCand[j]をマージ候補リストに追加しようとする場合、インター領域マージ候補に対して、インデックスが最も小さい最大2つのマージ候補との冗長性検査を実行することもできる。例えば、mergeCandList[0]及びmergeCandList[1]に対して、HmvpCand[j]と同じであるか否かを確認することができる。又は特定の位置から誘導されたマージ候補のみに対して冗長検査を実行することができる。一例として、現在ブロックの左側に位置する周辺ブロックから誘導されたマージ候補又は現在のブロックの上端に位置する周辺ブロックから誘導されたマージ候補のうちの少なくとも1つに対して冗長性検査を実行することができる。マージ候補リストに特定の位置から誘導されたマージ候補が存在しない場合、冗長性検査なしでインター領域マージ候補をマージ候補リストに追加することができる。
【0282】
第一インター領域マージ候補と同じマージ候補が発見された場合、第二インター領域マージ候補に対して冗長性検査を実行する時、前記第一インター領域マージ候補と同じマージ候補との冗長性検査を省略することができる。
【0283】
図27は、特定のマージ候補との冗長性検査が省略した例を示す図である。
【0284】
インデックスがiであるインター領域マージ候補HmvpCand[i]をマージ候補リストに追加しようとする場合、前記インター領域マージ候補とマージ候補リストに既に格納されたマージ候補との間の冗長性検査が実行される。このとき、インター領域マージ候補HmvpCand[i]と同じマージ候補mergeCandList[j]が発見された場合、インター領域マージ候補HmvpCand[i]をマージ候補リストに追加せずに、インデックスがi-1であるインター領域マージ候補HmvpCand[i-1]とマージ候補との間の冗長性チェックを実行することができる。このとき、インター領域マージ候補HmvpCand[i-1]とマージ候補mergeCandList[j]との間の冗長性検査は省略されることができる。
【0285】
一例として、図27に示された例では、HmvpCand[i]とmergeCandList[2]が同じであると判断された。従って、HmvpCand[i]はマージ候補リストに追加されず、HmvpCand[i-1]の冗長性検査が実行されることができる。このとき、HvmpCand[i-1]とmergeCandList[2]との間の冗長性検査は省略されることができる。
【0286】
現在のブロックのマージ候補リストに含まれているマージ候補の数が閾値よりも小さい場合、インター領域マージ候補に加えて、ペアワイズマージ候補又はゼロマージ候補のうち少なくとも1つをさらに含むこともある。フェアワイズマージ候補は、2つ以上のマージ候補の動きベクトルを平均した値を動きベクトルとするマージ候補を意味し、ゼロマージ候補は、モーションベクトルが0であるマージ候補を意味する。
【0287】
現在のブロックのマージ候補リストは、以下の手順でマージ候補が追加されることができる。
【0288】
空間的マージ候補-時間的マージ候補-インター領域マージ候補-(インター領域アフィンマージ候補)-ペアワイズマージ候補 -ゼロマージ候補
【0289】
空間的マージ候補は隣接ブロック又は非隣接ブロックのうちの少なくとも1つから誘導されるマージ候補を意味し、時間的マージ候補は前の参照ピクチャから誘導されるマージ候補を意味する。インター領域アフィンマージ候補は、アフィンモーションモデルでエンコード/デコードされたブロックから誘導されるインター領域マージ候補を示す。
【0290】
インター領域モーション情報テーブルはモーションベクトル予測モードにも使用されることができる。一例として、現在ブロックの動きベクトル予測候補リストに含まれている動きベクトル予測候補の数が閾値よりも小さい場合、インター領域モーション情報テーブルに含まれているインター領域マージ候補を現在のブロックの動きベクトル予測候補として設定することができる。具体的には、インター領域マージ候補の動きベクトルを動きベクトル予測候補として設定することができる。
【0291】
現在のブロックの動きベクトル予測候補リストに含まれている動きベクトル予測候補のうちのいずれか1つが選択されると、選択された候補を現在のブロックの動きベクトル予測子として設定することができる。以後、現在のブロックの動きベクトル残差値をデコードした後、動きベクトル予測子と動きベクトル残差値を加算することにより、現在のブロックの動きベクトルを獲得することができる。
【0292】
現在のブロックの動きベクトル予測候補リストは次の順序で構成されることができる。
【0293】
空間的モーションベクトル予測候補-時間的モーションベクトル予測候補-インター領域マージ候補 -(インター領域アフィンマージ候補)-ゼロモーションベクトル予測候補
【0294】
空間的モーションベクトル予測候補は、隣接ブロック又は非隣接ブロックのうちの少なくとも1つから誘導されるモーションベクトル予測候補を意味し、時間的モーションベクトル予測候補は、前の参照ピクチャから誘導されるモーションベクトル予測候補を意味する。インター領域アフィンマージ候補は、アフィンモーションモデルでエンコード/デコードされたブロックから誘導されたインター領域モーションベクトル予測候補を示す。ゼロモーションベクトル予測候補は、動きベクトルの値が0である候補を示す。
【0295】
現在のブロックのマージ候補が選択されると、選択されたマージ候補の動きベクトルを初期動きベクトルとして設定し、初期動きベクトルにオフセットベクトルを加算又は減算して誘導された動きベクトルを用いて、現在のブロックの動き補償予測を実行することができる。マージ候補の動きベクトルにオフセットベクトルを加算又は減算して新しい動きベクトルを誘導することをマージオフセットベクトルエンコーディング方法と定義することができる。
【0296】
マージオフセットエンコーディング方法を使用するか否かを示す情報がビットストリームを介してシグナルリングされることができる。前記情報は、1ビットのフラグmerge_offset_vector_flagであることができる。一例として、merge_offset_vector_flagの値が1であることは、現在のブロックにマージオフセットベクトルエンコーディング方法が適用されることを示す。現在のブロックにマージオフセットベクトルエンコーディング方法が適用される場合、マージ候補の動きベクトルにオフセットベクトルを加算又は減算して、現在のブロックの動きベクトルを誘導することができる。merge_offset_vector_flagの値が0であることは、現在のブロックにマージオフセットベクトルエンコーディング方法が適用されないことを示す。マージオフセットベクトルエンコーディング方法が適用されない場合、マージ候補の動きベクトルが現在ブロックの動きベクトルとして設定されることができる。
【0297】
スキップモードが適用されるか否かを示すスキップフラグの値が真の場合、又はマージモードが適用されるか否かを示すマージフラグの値が真の場合にのみ、前記フラグはシグナルリングされることができる。一例として、現在ブロックにスキップモードが適用されることを示すskip_flagの値が1である場合、又は現在のブロックにマージモードが適用されることを示すmerge_flagの値が1である場合、merge_offset_vector_flagがエンコードされてシグナルリングされることができる。
【0298】
現在のブロックにマージオフセットエンコーディング方法が適用されると決定された場合、マージ候補リストに含まれているマージ候補のうちのいずれか1つを特定する情報、オフセットベクトルの大きさを示す情報又はオフセットベクトルの方向を示す情報のうち少なくとも1つが追加シグナルリングされることができる。
【0299】
マージ候補リストが含むことができるマージ候補の最大数を決定するための情報がビットストリームを介してシグナルリングされることができる。一例として、マージ候補リストが含むことができるマージ候補の最大数は、6以下の自然数として設定されることができる。
【0300】
現在のブロックにマージオフセットエンコーディング方法が適用されると決定された場合、既に設定された最大数のマージ候補だけが現在のブロックの初期動きベクトルとして設定されることができる。即ち、マージオフセットエンコーディング方法が適用されるか否かに応じて、現在のブロックが利用可能なマージ候補の数が適応的に決定されることができる。一例として、merge_offset_vector_flagの値が0に設定された場合、現在のブロックが利用できるマージ候補の最大数はM個に設定されるが、merge_offset_vector_flagの値が1に設定された場合、現在のブロックが利用できるマージ候補の最大数はN個に設定されることができる。ここで、Mはマージ候補リストが含むことができるマージ候補の最大数を示し、NはMと同じであるかMよりも小さい自然数を示す。
【0301】
一例として、Mが6であり、Nが2である場合、マージ候補リストに含まれているマージ候補のうち、インデックスが最も小さい2つのマージ候補が現在のブロックに利用可能であると設定されることができる。従って、インデックスの値が0であるマージ候補の動きベクトル又はインデックスの値が1であるマージ候補の動きベクトルが現在ブロックの初期動きベクトルとして設定されることができる。もし、MとNが同じである場合(例えば、MとNが2である場合)、マージ候補リストに含まれているすべてのマージ候補が現在のブロックに利用可能であると設定されることができる。
【0302】
或いは、隣接ブロックをマージ候補として利用可能であるか否かは、現在のブロックにマージオフセットベクトルエンコーディング方法が適用されるか否かに基づいて決定されることができる。一例として、merge_offset_vector_flagの値が1である場合、現在のブロックの右上隅に隣接する隣接ブロック又は左下隅に隣接する隣接ブロックのうちの少なくとも1つをマージ候補として使用できないように設定することができる。従って、現在のブロックにマージオフセットベクトルエンコーディング方法が適用される場合、現在のブロックの右上隅に隣接する隣接ブロック又は左下隅に隣接する隣接ブロックのうちの少なくとも1つの動きベクトルは初期動きベクトルとして設定されることができない。又は、merge_offset_vector_flagの値が1である場合、現在のブロックの時間的隣接ブロックは、マージ候補として使用できないように設定されることができる。
【0303】
現在のブロックにマージオフセットベクトルエンコーディング方法が適用される場合、ペアワイズマージ候補又はゼロマージ候補のうちの少なくとも1つを利用しないように設定することができる。従って、merge_offset_vector_flagの値が1である場合、マージ候補リストに含まれているマージ候補の数が最大数よりも小さい場合であっても、ペアワイズマージ候補又はゼロマージ候補のうちの少なくとも1つはマージ候補リストに追加されないことができる。
【0304】
マージ候補の動きベクトルを現在のブロックの初期動きベクトルとして設定することができる。このとき、現在のブロックが利用できるマージ候補の数が複数である場合、複数のマージ候補のうちのいずれか1つを特定する情報がビットストリームを介してシグナルリングされることができる。一例として、マージ候補リストが含むことができるマージ候補の最大数が1よりも大きい場合、複数のマージ候補のうちのいずれか1つを指す情報merge_idxがビットストリームを介してシグナルリングされることができる。即ち、マージオフセットエンコーディング方法によって、複数のマージ候補のうちのいずれか1つを特定するための情報merge_idxを介してマージ候補が特定されることができる。現在のブロックの初期動きベクトルは、merge_idxが指すマージ候補の動きベクトルとして設定されることができる。
【0305】
一方、現在のブロックが利用できるマージ候補の数が1である場合、マージ候補を特定するための情報のシグナルリングを省略することができる。一例として、マージ候補リストが含むことができるマージ候補の最大数が1より大きくない場合、マージ候補を特定するための情報merge_idxのシグナルリングを省略することができる。即ち、マージオフセットエンコーディング方法の下で、マージ候補リストに1つのマージ候補が含まれている場合、マージ候補を特定するための情報merge_idxのエンコーディングを省略し、マージ候補リストに含まれているマージ候補に基づいて初期動きベクトルを決定することができる。前記マージ候補の動きベクトルが現在ブロックの初期動きベクトルとして設定されることができる。
【0306】
別の例として、現在ブロックのマージ候補を決定してから、現在のブロックにマージオフセットベクトルエンコーディング方法を適用するか否かを決定することもできる。一例として、マージ候補が含むことのできるマージ候補の最大数が1よりも大きい場合、マージ候補のうちのいずれか1つを特定するための情報merge_idxをシグナルリングすることができる。merge_idxに基づいてマージ候補を選択してから、現在のブロックにマージオフセットベクトルエンコーディング方法が適用されるか否かを示すmerge_offset_vector_flagをデコードすることができる。表4は、上述した実施形態に係る構文テーブルを示した図である。
【0307】
【表4】
【0308】
別の例として、現在ブロックのマージ候補を決定してから、決定されたマージ候補のインデックスがマージオフセットベクトルエンコーディング方法を適用する時に利用できるマージ候補の最大数よりも小さい場合に限り、現在のブロックにマージオフセットベクトルエンコーディング方法を適用するか否かを決定することもできる。一例として、インデックス情報merge_idxの値がNよりも小さい場合に限り、現在のブロックにマージオフセットベクトルエンコーディング方法を適用するか否かを示すmerge_offset_vector_flagをエンコードしてシグナルリングすることができる。インデックス情報merge_idxの値がNと同じであるかNよりも大きい場合、merge_offset_vector_flagのエンコーディングが省略されることができる。merge_offset_vector_flagのエンコーディングが省略された場合、現在のブロックにマージオフセットベクトルエンコーディング方法が適用されないと決定することができる。
【0309】
或いは、現在のブロックのマージ候補を決定してから、決定されたマージ候補が双方向動き情報を持っているか否か、又は単方向動き情報を持っているか否かを考慮して、現在のブロックにマージオフセットベクトルエンコーディング方法を適用するか否かを決定することができる。一例として、インデックス情報merge_idxの値がNよりも小さく、前記インデックス情報によって選択されたマージ候補が双方向動き情報を持っている場合に限り、現在のブロックにマージオフセットベクトルエンコーディング方法を適用するか否かを示すmerge_offset_vector_flagをエンコードしてシグナルリングすることができる。或いは、インデックス情報merge_idxの値がNよりも小さく、前記インデックス情報によって選択されたマージ候補が単方向動き情報を持っている場合に限り、現在のブロックにマージオフセットベクトルエンコーディング方法を適用するか否かを示すmerge_offset_vector_flagをエンコードしてシグナルリングすることができる。
【0310】
或いは、現在のブロックの大きさ、形状、又は現在のブロックがコーディングツリーユニットの境界に接するか否かのうちの少なくとも1つに基づいて、マージオフセットベクトルエンコーディング方法を適用するか否かを決定することができる。現在のブロックの大きさ、形状、又は現在のブロックがコーディングツリーユニットの境界に接するか否かのうちの少なくとも1つが既に設定され条件を満たしていない場合、現在のブロックにマージオフセットベクトルエンコーディング方法を適用するか否かを示すmerge_offset_vector_flagのエンコーディングを省略することができる。
【0311】
マージ候補が選択されると、マージ候補の動きベクトルを現在のブロックの初期動きベクトルとして設定することができる。そして、オフセットベクトルの大きさを示す情報及びオフセットベクトルの方向を示す情報をデコードして、オフセットベクトルを決定することができる。オフセットベクトルは、水平方向成分又は垂直方向成分を持つことができる。
【0312】
オフセットベクトルの大きさを示す情報は、ベクトル大きさ候補のうちのいずれか1つを示すインデックス情報であることができる。一例として、ベクトル大きさ候補のうちのいずれか1つを示すインデックス情報distance_idxがビットストリームを介してシグナルリングされることができる。表5は、インデックス情報distance_idxの2値化及びdistance_idxによるオフセットベクトルの大きさを決定するための変数DistFromMergeMVの値を示す。
【0313】
【表5】
【0314】
オフセットベクトルの大きさは、変数DistFromMergeMVを既に設定された値で除算して誘導されることができる。式5は、オフセットベクトルの大きさを決定する例を示す。
【0315】
[式5]
【0316】
【数5】
【0317】
前記式5によると、変数DistFromMegeMVを4で除算して得る値又は変数DistFromMergeMVを左側に向って2だけビットシフトした値をオフセットベクトルの大きさとして設定することができる。
【0318】
表5に示された例より多い数のベクトル大きさ候補又は少ない数のベクトル大きさ候補を使用するか、動きベクトルオフセットサイズ候補の範囲を表5に示した例と異なるように設定することもできる。一例として、オフセットベクトルの水平方向成分又は垂直方向成分の大きさが2サンプルの距離より大きくないように設定することができる。表6は、インデックス情報distance_idxの2値化及びdistance_idxによるオフセットベクトルの大きさを決定するための変数DistFromMergeMVの値を示す。
【0319】
【表6】
【0320】
或いは、動きベクトル精度に基づいて、動きベクトルオフセットサイズ候補の範囲を異なるように設定することができる。一例として、現在のブロックの動きベクトルの精度が少数ペル(fractional-pel)である場合、インデックス情報distance_idxの値に対応する変数DistFromMergeMVの値は1、2、4、8、16などに設定されることができる。ここで、少数ペルは1/16ペル(pel)、オクトペル(Octo-pel)、クォーターペル(Quarter-pel)又はハーフペル(Half-pel)のうちの少なくとも1つを含む。一方、現在のブロックの動きベクトルの精度が整数ペル(integer-pel)である場合、インデックス情報distance_idxの値に対応する変数DistFromMergeMVの値は4、8、16、32、64などに設定されることができる。即ち、現在のブロックの動きベクトルの精度に応じて、変数DistFromMergeMVを決定するために参照するテーブルが異なるように設定されることができる。
【0321】
一例として、現在ブロック又はマージ候補の動きベクトルの精度がクオーターペルである場合、表5を利用して、distance_idxが指す変数DistFromMergeMVを誘導することができる。一方、現在のブロック又はマージ候補の動きベクトルの精度が整数ペルである場合、表5のdistance_idxが指す変数DistFromMergeMVの値のN倍(例えば、4倍)を取った値を変数DistFromMergeMVの値として誘導することができる。
【0322】
動きベクトルの精度を決定するための情報がビットストリームを介してシグナルリングされることができる。一例として、前記情報は、シーケンス、ピクチャー、スライス又はブロックレベルでシグナルリングされることができる。従って、ベクトル大きさ候補の範囲は、ビットストリームを介してシグナルリングされる動きベクトルの精度に関する情報によって異なるように設定されることができる。或いは、現在のブロックのマージ候補に基づいて、動きベクトルの精度が決定されることができる。一例として、現在ブロックの動きベクトルの精度は、マージ候補の動きベクトルの精度と同じように設定されることができる。
【0323】
或いは、オフセットベクトルの探索範囲を決定するための情報をビットストリームを介してシグナルリングすることができる。探索範囲に基づいて、ベクトル大きさ候補の数、ベクトル大きさ候補のうちの最小値又は最大値のうちの少なくとも1つが決定されることができる。一例として、オフセットベクトルの探索範囲を決定するためのフラグmerge_offset_vector_flagがビットストリームを介してシグナルリングされることができる。前記情報は、シーケンスヘッダ、ピクチャヘッダ又はスライスヘッダを介してシグナルリングされることができる。
【0324】
一例として、merge_offset_extend_range_flagの値が0であると、オフセットベクトルの大きさが2を超えないように設定されることができる。従って、DistFromMergeMVの最大値は8に設定されることができる。一方、merge_offset_extend_range_flag値が1であると、オフセットベクトルの大きさが32サンプルの距離を超えないように設定されることができる。従って、DistFromMergeMVの最大値は128に設定されることができる。
【0325】
オフセットベクトルの大きさが閾値より大きいか否かを示すフラグを用いて、オフセットベクトルの大きさを決定することができる。一例として、オフセットベクトルの大きさが閾値より大きいか否かを示すフラグdistance_flagがビットストリームを介してシグナルリングされることができる。閾値は1、2、4、8又は16であることができる。一例として、distance_flagが1であることは、オフセットベクトルの大きさが4より大きいことを示す。一方、distance_flagが0であることは、オフセットベクトルの大きさが4以下であることを示す。
【0326】
オフセットベクトルの大きさが閾値より大きい場合、インデックス情報distance_idxを用いて、オフセットベクトルの大きさと閾値との間の差分値を誘導することができる。或いは、オフセットベクトルの大きさが閾値以下である場合、インデックス情報distance_idxを用いて、オフセットベクトルの大きさを決定することができる。表7は、distance_flag及びdistance_idxのエンコーディングの様相を示した構文テーブルである。
【0327】
【表7】
【0328】
式6はdistance_flagとdistance_idxを利用して、オフセットベクトルの大きさを決定するための変数DistFromMergeMVを誘導する例を示す。
【0329】
[式6]
【0330】
【数6】
【0331】
式6で、distance_flagの値は1または0に設定されることができる。distance_idxの値は、1、2、4、8、16、32、64、128などに設定されることができる。Nは閾値によって決定される係数を示す。一例として、閾値が4である場合、Nは16に設定されることができる。
【0332】
オフセットベクトルの方向を示す情報は、ベクトル方向候補のいずれか1つを示すインデックス情報であることができる。一例として、ベクトル方向候補のうちのいずれか1つを示すインデックス情報direction_idxがビットストリームを介してシグナルリングされることができる。表8は、インデックス情報direction_idxの2値化及びdirection_idxによるオフセットベクトルの方向を示す。
【0333】
【表8】
【0334】
表8で、sign[0]は水平方向を示し、sign[1]は垂直方向を示す。+1は、オフセットベクトルのx成分又はy成分の値が+であることを示し、-1はオフセットベクトルのx成分又はy成分の値が-であることを示す。式7は、オフセットベクトルの大きさ及び方向に基づいてオフセットベクトルを決定する例を示す。
【0335】
[式7]
【0336】
【数7】
【0337】
式7でoffsetMV[0]はオフセットベクトルの垂直方向成分を示し、offsetMV[1]はオフセットベクトルの水平方向成分を示す。
【0338】
図28は、オフセットベクトルの大きさを示すdistance_idx及びオフセットベクトルの方向を示すdirection_idxの値によるオフセットベクトルを示す図である。
【0339】
図28に示された例のように、オフセットベクトルの大きさ及び方向は、distance_idx及びdirection_idxの値に基づいて決定することができる。オフセットベクトルの最大の大きさは閾値を超えないように設定されることができる。ここで、閾値は、エンコーダとデコーダで既に定義された値を持つことができる。一例として、閾値は、32サンプルの距離であることができる。或いは、初期動きベクトルの大きさに応じて、閾値が決定されることができる。一例として、水平方向の閾値は初期動きベクトルの水平方向成分の大きさに基づいて設定され、垂直方向の閾値は初期動きベクトルの垂直方向成分の大きさに基づいて設定されることができる。
【0340】
マージ候補が双方向動き情報を持っている場合、マージ候補のL0動きベクトルを現在のブロックのL0初期動きベクトルとして設定し、マージ候補のL1動きベクトルを現在のブロックのL1初期動きベクトルとして設定することができる。この時、マージ候補のL0参照ピクチャと現在ピクチャとの間の出力順序差分値(以下、L0差分値という)及びマージ候補のL1参照ピクチャと現在ピクチャとの間の出力順序差分値(以下、L1差分値とする)を考慮して、L0オフセットベクトル及びL1オフセットベクトルを決定することができる。
【0341】
先ず、L0差分値及びL1差分値の符号が同じである場合、L0オフセットベクトルとL1オフセットベクトルは同じように設定されることができる。一方、L0差分値及びL1差分値の符号が異なる場合、L1オフセットベクトルは、L0オフセットベクトルと逆方向に設定されることができる。
【0342】
L0オフセットベクトルの大きさとL1オフセットベクトルの大きさは同じように設定されることができる。或いは、L0差分値とL1差分値に基づいて、L0オフセットベクトルをスケーリングすることにより、L1オフセットベクトルの大きさを決定することができる。
【0343】
一例として、式8はL0差分値とL1差分値の符号が同じである場合、L0オフセットベクトル及びL1オフセットベクトルを示す。
【0344】
[式8]
【0345】
【数8】
【0346】
式8で、offsetMVL0[0]はL0オフセットベクトルの水平方向成分を示し、offsetMVL0[1]はL0オフセットベクトルの垂直方向成分を示す。offsetMVL1[0]はL1オフセットベクトルの水平方向成分を示し、offsetMVL1[1]はL1オフセットベクトルの垂直方向成分を示す。
【0347】
式9は、L0差分値とL1差分値の符号が異なる場合、L0オフセットベクトル及びL1オフセットベクトルを示す。
【0348】
[式9]
【0349】
【数9】
【0350】
4つより多い数のベクトル方向候補を定義することもできる。表9及び表10は、8つのベクトル方向候補が定義された例を示す。
【0351】
【表9】
【0352】
【表10】
【0353】
表9及び表10において、sign[0]及びsign[1]の絶対値が0より大きいと、オフセットベクトルが対角方向であることを示す。表8が利用される場合、対角方向のオフセットベクトルのx軸及びy軸成分の大きさはabs(offsetMV)に設定されるが、表9が利用される場合、対角方向のオフセットベクトルのx軸及びy軸成分の大きさはabs(offsetMV/2)に設定されることができる。
【0354】
図29は、オフセットベクトルの大きさを示すdistance_idx及びオフセットベクトルの方向を示すdirection_idxの値によるオフセットベクトルを示す図である。
【0355】
図29の(a)は、表8が適用される場合の例示であり、図29の(b)は、表9が適用される場合の例示である。
【0356】
ベクトル方向候補の数又は大きさのうちの少なくとも1つを決定するための情報がビットストリームを介してシグナルリングされることができる。一例として、ベクトル方向候補を決定するためのフラグmerge_offset_direction_range_flagがビットストリームを介してシグナルリングされることができる。前記フラグは、シーケンス、ピクチャー又はスライスレベルでシグナルリングされることができる。一例として、前記フラグの値が0である場合、表8に例示された4つのベクトル方向候補を利用することができる。一方、前記フラグの値が1である場合、表9又は表10に例示された8つのベクトル方向候補を利用することができる。
【0357】
或いは、オフセットベクトルの大きさに基づいて、ベクトル方向候補の数又は大きさのうちの少なくとも1つを決定することができる。一例として、オフセットベクトルの大きさを決定するための変数DistFromMergeMVの値が閾値と同じであるか又は閾値より小さい場合、表9又は表10に例示された8つのベクトル方向候補を使用することができる。一方、変数DistFromMergeMVの値が閾値より大きい場合、表8に例示された4つのベクトル方向候補を使用することができる。
【0358】
或いは、初期動きベクトルのx成分の値MVx及びy成分の値MVyに基づいて、ベクトル方向候補の数又は大きさのうちの少なくとも1つを決定することができる。一例として、MVx及びMVy差分又は差分の絶対値が閾値以下である場合、表9又は表10に例示された8つのベクトル方向候補を使用することができる。一方、MVx及びMVy差分又は差分の絶対値が閾値より大きい場合、表8に例示された4つのベクトル方向候補を使用することができる。
【0359】
現在のブロックの動きベクトルは、初期動きベクトルにオフセットベクトルを加えて誘導されることができる。式10は、現在のブロックの動きベクトルを決定する例を示す。
【0360】
[式10]
【0361】
【数10】
【0362】
式10において、mvL0は現在のブロックのL0動きベクトルを示し、mvL1は現在のブロックのL1動きベクトルを示す。mergeMVL0は現在のブロックのL0初期動きベクトル(即ち、マージ候補のL0動きベクトル)を示し、mergeMVL1は現在のブロックのL1初期動きベクトルを示す。[0]は動きベクトルの水平方向成分を示し、[1]は動きベクトルの垂直方向成分を示す。
【0363】
コーディングブロックを複数のサブユニットに分割してから、各サブユニットに対してインター予測を実行する場合にも、マージオフセットベクトルエンコーディング方法を適用することができる。ここで、サブユニット単位でインター予測を実行することは、ATMVP(Advanced Temporal Motion Vector Prediction)、STMVP(Spatial Temporal Motion Vector Predition)又は三角分割技法のうちの少なくとも1つを含むことができる。
【0364】
一例として、ATMVP方法において、初期動きベクトルは次のように誘導されることができる。
【0365】
先ず、コーディングブロックに隣接する隣接ブロックから誘導されたマージ候補の動きベクトルを用いて、初期シフトベクトルを誘導することができる。そして、初期シフトベクトルを利用して、コーディングブロックに含まれたサブブロックのシフトブロックを誘導することができる。式11は、シフトブロックの位置を示した図である。
【0366】
[式11]
【0367】
【数11】
【0368】
式11において、(xColSb、yColSb)はシフトブロックの左上端のサンプルの位置を示し、(xSb、ySb)はサブブロックの左上端のサンプルの位置を示す。shVectorはシフトベクトルを示す。
【0369】
シフトブロックが決定されると、コールケイテッドピクチャー内のシフトブロックと同じ位置であるコロケイテッドブロックの動きベクトルはサブブロックの動きベクトルとして設定することができる。即ち、コロケイテッドブロック内の(xColSb、yColSb)位置のサンプルを含むコールケイテッドブロックの動きベクトルは、(xSb、ySb)位置のサンプルを含むサブブロックの動きベクトルとして設定することができる。
【0370】
三角パーティショニング手法が適用される場合、コーディングブロックは、三角形のサブユニットに分割されることができる。一例として、コーディングブロックは、コーディングブロックの左上端と右下端を接続する対角線又はコーディングブロックの右上端と左下端を接続する対角線によって2つのサブユニットに分割されることができる。
【0371】
図30は、三角分割技法が適用される場合、コーディングブロックの分割様態を示す図である。
【0372】
三角形の各サブユニットの動き情報は、マージ候補によって特定することができる。各サブユニットに対して、マージ候補のうちのいずれか1つを示すインデックス情報がシグナルリングされることができる。一例として、第一サブユニットのインデックス情報merge_1st_idxは、第一サブユニットのマージ候補を特定し、第二サブユニットのインデックス情報merge_2nd_idxは、第二サブユニットのマージ候補を特定することができる。
【0373】
各サブユニットの初期動きベクトルを個別的に決定することができる。一例として、コーディングブロックにアフィンモーションモデルが適用された場合、コーディングブロックのアフィンシードベクトルから誘導されたサブブロックのアフィンベクトルをサブブロックの初期動きベクトルとして設定することができる。各サブブロックの動きベクトルは、初期動きベクトルにオフセットベクトルを加算又は減算して誘導されることができる。
【0374】
複数のサブユニットに分割されたコーディングブロックにマージオフセットベクトルエンコーディング方法が適用される場合、複数のサブユニットは同じオフセットベクトルを使用するように設定されることができる。即ち、複数のサブユニットのそれぞれの初期動きベクトルは、同じオフセットベクトルを利用して修正することができる。
【0375】
或いは、コーディングブロックを複数のサブユニットに分割し、各サブユニットのオフセットベクトルを個別的に決定することができる。従って、サブユニットのうちの少なくとも1つのオフセットベクトルが他のサブユニットのオフセットベクトルとは異なるように設定されることができる。
【0376】
図31は、各サブユニットのオフセットベクトルが異なるように設定された例を示す図である。
【0377】
図31に示された例のように、サブユニットごとにオフセットベクトルの大きさを示す情報distance_idx及びオフセットベクトルの方向を示す情報direction_idxをエンコードしてシグナルリングすることができる。
【0378】
或いは、全てのサブユニットのオフセットベクトルの大きさを同じに設定するが、サブユニットのオフセットベクトルの方向は個別的に設定することができる。一例として、サブユニットがコーディングレベルでシグナルリングされるdistance_idxの値を共有するように設定し、各サブユニットごとにdirection_idxをエンコードしてシグナルリングすることができる。
【0379】
或いは、全てのサブユニットのオフセットベクトルの方向を同じに設定するが、サブユニットのオフセットベクトルの大きさは個別的に設定することができる。一例として、サブユニットがコーディングレベルでシグナルリングされるdirection_idxの値を共有するように設定し、各サブユニットごとにdistance_idxをエンコードしてシグナルリングすることができる。
【0380】
コーディングブロックを分割して生成された複数のサブユニットのうちの一部のみにマージオフセットベクトルエンコーディング方法を適用することもできる。一例として、現在ブロックが第一サブユニット及び第二サブユニットに分割された場合、第一サブユニットの動きベクトルは、マージ候補の動きベクトルと同じに設定し、第二サブユニットの動きベクトルは、マージ候補の動きベクトルにオフセットベクトルを加算して誘導することができる。
【0381】
オフセットベクトルを決定するための情報をシグナルリングすることの代わりに、デコーダがオフセットベクトルを誘導することもできる。具体的には、サブブロックに含まれた予測サンプルの水平方向グラディエント(gradient)の平均値及び垂直方向グラディエント(gradient)の平均値を用いて、オフセットベクトルを誘導することができる。
【0382】
ここで、グラディエントは、参照ピクチャ内の予測サンプルに対応する復元サンプル及び前記復元サンプルに隣接する隣接サンプルの差分に基づいて誘導されることができる。一例として、水平方向グラディエントは、復元サンプルと左側及び/又は右側に隣接する復元サンプルとの差分を示し、垂直方向グラディエントは、復元サンプルと上部及び/又は下部に隣接する復元サンプルとの差分を示すことができる。
【0383】
マージ候補リストに含まれているマージ候補において、基準マージ候補の動きベクトルにオフセットベクトルを加算又は減算して誘導された動きベクトルを有するマージ候補をマージ候補リストに追加することができる。基準マージ候補の動きベクトルにオフセットベクトルを加算又は減算して誘導された動きベクトルを有するマージ候補をリファインマージ候補と呼称することができる。
【0384】
リファインマージ候補の動きベクトルを除いた残りの動き情報は、基準マージ候補と同じに設定することができる。
【0385】
図32は、リファインマージ候補が取ることができる動きベクトル候補を示す図である。
【0386】
基準マージ候補の動きベクトルが(MvLX[0]、MvLX[1])である場合、リファインマージ候補の動きベクトルは、基準マージ候補の動きベクトルのx成分又はy成分のうちの少なくとも1つにオフセットを加算又は減算して誘導されることができる。一例として、リファインマージ候補の動きベクトルは、(MvLX[0]+ M、MvLX[1])、(MvLX[0]-M、MvLX[1])、(MvLX[0]、MvLX[1]+ M)又は(MvLX[0]、MvLX[1]-M)に設定されることができる。Mは、オフセットベクトルの大きさを示す。
【0387】
基準マージ候補は、マージ候補リスト内の既に定義されたインデックス値を持つマージ候補であることができる。一例として、マージ候補リストに含まれたマージ候補において、インデックス値が最も小さいマージ候補(即ち、インデックス値が0であるマージ候補)、又はインデックスの値が最も大きいマージ候補が基準マージ候補として設定されることができる。或いは、インター領域モーション情報テーブル内のインデックス値が最も小さいインター領域マージ候補又はインデックスの値が最も大きいインター領域マージ候補が基準マージ候補として設定されることができる。
【0388】
或いは、双方向動き情報を持つマージ候補において、インデックス値が最も小さいマージ候補を基準マージ候補として設定することができる。即ち、候補ブロックを順番に探索したとき、最初に発見された双方向マージ候補を基準マージ候補として設定することができる。
【0389】
現在のブロックの大きさ、形状、又はコーディングツリーユニットの境界に接するか否かに基づいて、基本マージ候補を選択することもできる。一例として、現在のブロックが正方形である場合、又は現在のブロックは高さが幅より大きい非正方形である場合、インデックスが0であるマージ候補又は現在のブロックの上端に位置する隣接ブロックから誘導されたマージ候補を基準マージ候補として設定することができる。現在のブロックは幅が高さより大きい非正方形である場合、インデックスが1であるマージ候補又は現在のブロックの左側に位置する隣接ブロックから誘導されたマージ候補を基準マージ候補として設定することができる。
【0390】
或いは、基準マージ候補を特定する情報がビットストリームを介してシグナルリングされることができる。前記情報は、マージ候補リストに含まれているマージ候補のうちのいずれか1つを特定するインデックス情報であることができる。
【0391】
リファインマージ候補を使用するか否かを示す情報がビットストリームを介してシグナルリングされることができる。前記情報は、1ビットのフラグであることができる。前記フラグの値が1である場合、基準マージ候補に基づいて生成されたリファインマージ候補をマージ候補リストに追加することができる。一方、上記フラグの値が0である場合、マージ候補リストはリファインマージ候補を含まない。
【0392】
或いは、マージ候補リストに既に追加されたマージ候補の数は、マージ候補リストが含むことができるマージ候補の最大数より小さい場合、マージ候補リストにリファインマージ候補を追加することができる。ここで、既に追加されたマージ候補は、空間的マージ候補者、時間的マージ候補、インター領域マージ候補又はペアワイズマージ候補のうちの少なくとも1つを含むことができる。一例として、マージ候補リストに含まれた空間的マージ候補、時間的マージ候補又はインター領域マージ候補のうちの少なくとも1つの数が閾値以下である場合、リファインマージ候補をマージ候補リストに追加することができる。
【0393】
或いは、マージ候補リストに既に追加されたマージ候補の数が閾値以上である場合、リファインマージ候補を利用することもできる。
【0394】
リファインマージ候補を利用するか否かに応じて、マージ候補リストが含むことができるマージ候補の最大数は異なるように設定されることができる。一例として、リファインマージ候補を利用しないように設定された場合、マージ候補リストが含むことができるマージ候補の最大数はN個に設定されるが、リファインマージ候補を使用するように設定された場合、マージ候補リストが含むことができるマージ候補の最大数はN+n個に設定されることができる。
【0395】
リファインマージ候補はマージ候補リストに既に追加されたマージ候補より大きいインデックスを持つことができる。一例として、表11は、マージ候補リストの構成例を示す。
【0396】
【表11】
【0397】
表11において、mergeCand[X]は、インデックスがXであるマージ候補を示す。mvLx[0]は、基準マージ候補のx成分動きベクトルを示し、mvLx[1]は、基準マージ候補のy成分動きベクトルを示す。一例として、基準マージ候補がmergeCand[0]である場合、mvLx[0]及びmvLx[1]は、mergeCand[0]の動きベクトルを示すことができる。
【0398】
オフセットベクトルの大きさMはエンコーダとデコーダで既に定義されることができる。一例として、オフセットベクトルの大きさMは、1又は4のように、4以下の整数に設定されることができる。
【0399】
或いは、オフセットベクトルを決定するための情報がビットストリームを介してシグナルリングされることができる。前記情報は、シーケンス、ピクチャー、スライス又はブロックレベルでシグナルリングされることができる。一例として、上述したオフセットベクトルの大きさを決定するための情報distance_idx又はオフセットベクトルの方向を決定するための情報direction_idxのうちの少なくとも1つを利用して、オフセットベクトルを決定することができる。
【0400】
表11に示された例のように、基準マージ候補に基づいて誘導された少なくとも1つのリファインマージ候補をマージ候補リストに追加することができる。既に追加されたマージ候補の中に動き情報がリファインマージ候補と同じであるマージ候補が存在する場合、リファインマージ候補をマージ候補リストに追加しないことができる。一例として、基準マージ候補mergeCand[0]に基づいて誘導されたリファインマージ候補がmergeCand[1]乃至mergeCand[5]のうちのいずれか1つと同じである場合、リファインマージ候補をマージ候補リストに追加しないことができる。
【0401】
或いは、動き情報がリファインマージ候補と同じであるマージ候補が存在する場合、オフセットベクトルを変更したり、動き情報がリファインマージ候補と同じであるマージ候補をリファインマージ候補にリセットして、リファインマージ候補を再誘導することができる。一例として、基準マージ候補mergeCand[0]に基づいて誘導されたリファインマージ候補mergeCand[6]の動き情報がマージ候補mergeCand[2]と同じである場合、リファインマージ候補mergeCand[6]の動きベクトルをマージ候補mergeCand[2]の動きベクトルにオフセットベクトルを加算又は減算した値に変更することができる。一例として、mergeCand[6]の動きベクトルを(mergeCand[0]_mxLx[0]+M、mergeCand[0]_mvLx[1])から(mergeCand[2]_mxLx[0]+ M、mergeCand[2]_mvLx[1])に変更することができる。ここで、mergeCand[X]_mvLxは、インデックスがXであるマージ候補の動きベクトルを示す。
【0402】
別の例として、少なくとも1つ以上のマージオフセット候補を含むマージリファインメントオフセットリストを利用して、オフセットベクトルを決定することができる。現在のブロックのインデックス情報によって特定されたマージ候補が基準マージ候補である場合、マージリファインメントオフセットリストを利用してオフセットベクトルを決定することができる。そして、マージ候補の動きベクトルにオフセットベクトルを加算又は減算して、現在のブロックの動きベクトルを誘導することができる。基準マージ候補は、マージ候補リスト内の既に定義されたインデックス値を持つマージ候補であることができる。一例として、マージ候補リストに含まれているマージ候補のうち、インデックスの値が最も小さいマージ候補(即ち、インデックスの値が0であるマージ候補)、又はインデックスの値が最も大きいマージ候補が基準マージ候補として設定されることができる。或いは、インター領域モーション情報テーブル内のインデックスの値が最も小さいインター領域マージ候補又はインデックスの値が最も大きいインター領域マージ候補が基準マージ候補として設定されることができる。
【0403】
図33は、マージリファインメントオフセットリストの構成を示す図である。
【0404】
図33において、基準マージ候補は、インデックスが6であるマージ候補であると仮定する。
【0405】
マージ候補のうちのいずれか1つを示すインデックス情報merge_idxによって特定されたマージ候補のインデックスが6ではない場合、マージ候補の動きベクトルを現在のブロックの動きベクトルとして設定することができる。
【0406】
一方、インデックス情報merge_idxによって特定されたマージ候補のインデックスが6である場合、マージリファインメントオフセットリストを利用して、オフセットベクトルを誘導することができる。マージリファインメントオフセットリストに含まれたマージオフセット候補のうちのいずれか1つを特定するインデックス情報MrgOffset_idxがビットストリームを介してシグナルリングされることができる。
【0407】
オフセットベクトルが特定されると、基準マージ候補の動きベクトルにオフセットベクトルを加算又は減算して、現在のブロックの動きベクトルを誘導することができる。
【0408】
マージリファインメントオフセットリストは、少なくとも1つ以上のマージオフセット候補を含むことができる。一例として、マージリファインメントオフセットリストが含むマージオフセット候補の数は4個、8個又は16個であることができる。
【0409】
図34及び図35は、マージオフセット候補によって特定されるオフセットベクトルを示す図である。
【0410】
図34は、マージオフセット候補の数が8個である場合の例を示し、図35は、マージオフセット候補の数が16個である場合の例を示す。
【0411】
図34の(a)に示された例のように、マージオフセット候補が示すオフセットベクトルは、水平方向の動きベクトルの絶対値及び/又は垂直方向の動きベクトルの絶対値が固定値を持つように設定されることができる。或いは、図35に示された例のように、マージオフセット候補のうち、インデックスが閾値よりも小さいマージオフセット候補が示すオフセットベクトルは、水平方向の動きベクトルの絶対値及び/又は垂直方向の動きベクトルの絶対値が第一値を持つように設定され、他のマージオフセット候補が示すオフセットベクトルは、水平方向の動きベクトルの絶対値及び/又は垂直方向の動きベクトルの絶対値が第二値を持つように設定されることができる。
【0412】
或いは、図34の(b)に示された例のように、マージオフセット候補が示すオフセットベクトルは、水平方向の動きベクトルの絶対値と垂直方向の動きベクトルの絶対値との合計が固定値を持つように設定されることができる。
【0413】
複数の基準マージ候補を設定することもできる。一例として、マージ候補リストに含まれたマージ候補のうち、インデックスが最も小さい2つのマージ候補を基準マージ候補として設定することができる。従って、インデックス情報merge_idxによって特定されたマージ候補のインデックスが0又は1である場合、マージリファインメントオフセットリストを利用してオフセットベクトルを誘導することができる。又は、マージ候補リストに含まれたマージ候補のうちのインデックスが最も小さいマージ候補及びインター領域マージ候補リストに含まれたマージ候補のうちのインデックスが最も大きいマージ候補を基準マージ候補として設定することができる。
【0414】
モーションベクトル予測モードにおいて、現在のブロックの動きベクトルは、動き予測ベクトルに動き差分ベクトルを加えて誘導されることができる。現在のブロックの動き予測ベクトルは、少なくとも1つの動き予測ベクトル候補を含むモーションベクトル予測候補リストに基づいて決定されることができる。一例として、動き予測ベクトル候補のうちのいずれか1つを現在のブロックの動き予測ベクトルとして設定することができる。
【0415】
モーションベクトル予測候補は、現在のブロックの空間的隣接ブロック又は現在のブロックの時間的隣接ブロックのうちの少なくとも1つに基づいて誘導されることができる。
【0416】
図36は、モーションベクトル予測候補を誘導するために使用される候補ブロックを示す図である。
【0417】
空間的隣接ブロックは、現在のブロックの上端に位置する上端隣接ブロック及び現在のブロックの左側に位置する左側隣接ブロックを含むことができる。上端隣接ブロックは(xCb+ CbW、yCb-1)位置のサンプルを含むブロックB0、(xCb+ CbW-1、yCb-1)位置のサンプルを含むブロックB1、(xCb-1、yCb-1)位置のサンプルを含むブロックB2又は(xCb、yCb-1)位置のサンプルを含むブロックB3のうちの少なくとも1つを含むことができる。ここで、(xCb、yCb)は、現在のブロックの左上端サンプルの位置を示し、CbWは現在のブロックの幅を示す。左側隣接ブロックは、(xCb-1、yCb+ CbH)位置のサンプルを含むブロックA0、(xCb-1、yCb+ CbH-1)位置のサンプルを含むブロックA1又は(xCb-1、yCb)位置のサンプルを含むブロックA2のうちの少なくとも1つを含むことができる。ここで、CbHは現在のブロックの高さを示す。
【0418】
時間的隣接ブロックは、コロケイテッドブロック内の現在のブロックと同じ位置及びサイズを有するブロックの中央のサンプルを含むブロックC0又は前記ブロックの右上隅に隣接するサンプルを含むブロックC1のうちの少なくとも1つを含むことができる。
【0419】
モーションベクトル予測候補リストが含むことができるモーションベクトル予測候補の最大数は2つであることができる。モーションベクトル予測候補の誘導順序は次のとおりである。
【0420】
1.左側隣接ブロックA0又は左側隣接ブロックA1のうちの少なくとも1つが利用可能である場合、利用可能なブロックの動きベクトルをモーションベクトル予測候補として設定する。
【0421】
2.上端隣接ブロックB0、上端隣接ブロックB1又は上端隣接ブロックB2のうちの少なくとも1つが利用可能である場合、利用可能なブロックの動きベクトルをモーションベクトル予測候補として設定する。
【0422】
3.時間的隣接ブロックが利用可能である場合、時間的動きベクトルをモーションベクトル予測候補として設定する。
【0423】
4.ゼロモーションベクトルをモーションベクトル予測候補として設定する。
【0424】
或いは、1~3の順序にしたがって誘導されたモーションベクトル予測候補の数が2つより小さい場合、インター領域モーション情報テーブルに含まれた動きベクトルをモーションベクトル予測候補として設定することもできる。インター領域モーション情報テーブルが利用可能である場合、モーションベクトル予測候補は次の順序にしたがって誘導されることができる。
【0425】
1.左側隣接ブロックA0又は左側隣接ブロックA1のうちの少なくとも1つが利用可能である場合、利用可能なブロックの動きベクトルをモーションベクトル予測候補として設定する。
【0426】
2.上端隣接ブロックB0、上端隣接ブロックB1又は上端隣接ブロックB2のうちの少なくとも1つが利用可能である場合、利用可能なブロックの動きベクトルをモーションベクトル予測候補として設定する。
【0427】
3.時間的隣接ブロックが利用可能である場合、時間的動きベクトルをモーションベクトル予測候補として設定する。
【0428】
4.インター領域モーション情報テーブルに含まれた動きベクトルをモーションベクトル予測候補として設定する。
【0429】
5.ゼロモーションベクトルをモーションベクトル予測候補として設定する。
【0430】
基準モーションベクトル予測候補の動きベクトルにオフセットベクトルを加算又は減算して誘導された動きベクトルを有するモーションベクトル予測候補をモーションベクトル予測候補リストに追加することもできる。基準モーションベクトル予測候補の動きベクトルにオフセットベクトルを加算又は減算して誘導された動きベクトルを有するモーションベクトル予測候補をリファインモーションベクトル予測候補と呼称することができる。
【0431】
図37は、リファインモーションベクトル予測候補として設定することができる動きベクトル候補を示す図である。
【0432】
基準モーションベクトル予測候補の動きベクトルが(MvpLX[0]、MvpLX[1])である場合、リファインモーションベクトル予測候補の動きベクトルは、基準モーションベクトル予測候補の動きベクトルのx成分又はy成分のうちの少なくとも1つにオフセットを加算又は減算して誘導されることができる。一例として、リファインモーションベクトル予測候補の動きベクトルは、(MvpLX[0]+ M、MvpLX[1])、(MvpLX[0]-M、MvpLX[1])、(MvpLX[0]、MvpLX[1]+ M)又は(MvpLX[0]、MvpLX[1]-M)に設定されることができる。Mは、オフセットベクトルの大きさを示す。
【0433】
オフセットベクトルの大きさMはエンコーダ及びデコーダで既に定義されることができる。一例として、オフセットベクトルの大きさMは、1又は4のように、4以下の整数に設定されることができる。
【0434】
或いは、オフセットベクトルを決定するための情報がビットストリームを介してシグナルリングされることができる。前記情報は、シーケンス、ピクチャー、スライス又はブロックレベルでシグナルリングされることができる。一例として、上述したオフセットベクトルの大きさを決定するための情報distance_idx又はオフセットベクトルの方向を決定するための情報direction_idxのうちの少なくとも1つを利用して、オフセットベクトルを決定することができる。
【0435】
基準モーションベクトル予測候補は、モーションベクトル予測候補リスト内の既に定義されたインデックス値を持つモーションベクトル予測候補であることができる。一例として、モーションベクトル予測候補リストに含まれたモーションベクトル予測候補のうち、インデックスの値が0であるモーションベクトル予測候補又はインデックスの値が1であるモーションベクトル予測候補が基準モーションベクトル予測候補として設定されることができる。
【0436】
別の例として、少なくとも1つ以上の予測ベクトルオフセット候補を含むマージリファインメントオフセットリストを利用して、オフセットベクトルを決定することができる。現在のブロックのインデックス情報によって特定されたモーションベクトル予測候補が基準モーションベクトル予測候補である場合、予測ベクトルリファインメントオフセットリストを利用して、オフセットベクトルを決定することができる。そして、モーションベクトル予測候補の動きベクトルにオフセットベクトルを加算又は減算して、現在のブロックの動き予測ベクトルを誘導することができる。基準モーションベクトル予測候補は、モーションベクトル予測候補リスト内の既に定義されたインデックス値を持つモーションベクトル予測候補であることができる。一例として、モーションベクトル予測候補リストに含まれたモーションベクトル予測候補のうち、インデックスの値が最も小さいモーションベクトル予測候補又はインデックスの値が最も大きいモーションベクトル予測候補が基準モーションベクトル予測候補として設定されることができる。
【0437】
予測ベクトルオフセットリファインメントリストを利用してオフセットベクトルを算出する場合、予測ベクトル候補リストが含むことができる予測ベクトル候補の最大数を2よりも大きな値に設定することもできる。
【0438】
図38は、予測ベクトルリファインメントオフセットリストの構成を示す図である。
【0439】
図38では、基準予測ベクトル候補はインデックスが2である予測ベクトル候補であると仮定する。
【0440】
予測ベクトル候補のうちのいずれか1つを示すインデックス情報AMVPcand_idxによって特定された予測ベクトル候補のインデックスが2でない場合、予測ベクトル候補の動きベクトルを現在ブロックの動き予測ベクトルとして設定することができる。
【0441】
一方、インデックス情報AMVPcand_idxによって特定された予測ベクトル候補のインデックスが2である場合、予測ベクトルリファインメントオフセットリストを利用してオフセットベクトルを誘導することができる。予測ベクトルリファインメントオフセットリストに含まれた予測ベクトルオフセット候補のうちのいずれか1つを特定するインデックス情報AMVPOffset_idxがビットストリームを介してシグナルリングされることができる。
【0442】
オフセットベクトルが特定されると、基準予測ベクトル候補の動きベクトルにオフセットベクトルを加算又は減算して、現在のブロックの動き予測ベクトルを誘導することができる。
【0443】
コーディングブロックがアフィンモーションモデルに基づいてエンコードされた場合にも、動きベクトルのリファイン技法が利用されることができる。一例として、アフィンモーションベクトル予測モードが適用される場合、アフィンシード予測ベクトルにアフィンシード差分ベクトルを加えて、コーディングブロックのアフィンシードベクトルを誘導することができる。ここで、アフィンシード予測ベクトルは、コーディングブロックの空間的隣接ブロック又は時間的隣接ブロックのアフィンシードベクトルに基づいて誘導されることができる。アフィンシード差分ベクトルは、ビットストリームからシグナルリングされる情報に基づいて決定されることができる。このとき、全てのコントロールポイントに対して同じアフィンシード差分ベクトルを適用することができる。或いは、アフィンシードベクトルを決定するための情報が各制御ポイントにシグナルリングされることができる。
【0444】
コーディングブロックのアフィンシードベクトルに基づいてサブブロックのアフィンベクトルが誘導されると、アフィンベクトルを初期動きベクトルに設定してから、オフセットベクトルを誘導することができる。各サブブロックの動きベクトルは、初期動きベクトルにオフセットベクトルを加算又は減算して誘導することができる。
【0445】
オフセットベクトルを決定するための情報をシグナルリングすることの代わりに、デコードがオフセットベクトルを誘導することもできる。具体的には、サブブロックに含まれた予測サンプルの水平方向グラディエント(gradient)の平均値及び垂直方向グラディエント(gradient)の平均値を用いて、オフセットベクトルを誘導することができる。
【0446】
イントラ予測は、現在のブロックの周りでエンコード/デコードされた復元サンプルを用いて、現在のブロックを予測するものである。このとき、インループフィルター(in-loop filter)が適用される前の復元サンプルが現在のブロックのイントラ予測に使用されることができる。
【0447】
イントラ予測技法は、マトリックス(Matrix)に基づくイントラ予測及び周辺復元サンプルとの方向性を考慮した一般的なイントラ予測を含む。現在のブロックのイントラ予測技法を指示する情報がビットストリームを介してシグナルリングされることができる。前記情報は、1ビットのフラグであることができる。或いは、現在のブロックの位置、サイズ、形状、又は隣接ブロックのイントラ予測技法のうちの少なくとも1つに基づいて、現在のブロックのイントラ予測技法を決定することができる。一例として、現在のブロックがピクチャーの境界を越えて存在する場合、マトリックスに基づくイントラ予測は現在のブロックに適用されないように設定することができる。
【0448】
マトリックスに基づくイントラ予測は、エンコーダ/デコーダで既に格納されたマトリックスと、現在のブロックの周りの復元サンプルの間の行列積に基づいて、現在のブロックの予測ブロックを獲得する方法である。既に格納された複数のマトリックスのうちのいずれか1つを特定するための情報がビットストリームを介してシグナルリングされることができる。デコーダは、前記情報及び現在のブロックの大きさに基づいて、現在のブロックのイントラ予測のためのマトリックスを決定することができる。
【0449】
一般的なイントラ予測は、非方向性イントラ予測モード又は方向性イントラ予測モードに基づいて、現在のブロックの予測ブロックを獲得する方法である。
【0450】
元もビデオから予測ビデオを差分して、誘導された残差ビデを誘導することができる。このとき、残差ビデオを周波数ドメインに変更したとき、周波数成分のうちの高周波成分を除去されても、ビデオの主観的画質は大幅に低下しない。従って、高周波成分の値を小さく変換したり、高周波成分の値を0に設定すると、視覚的歪みが大きく発生しなく、圧縮効率を向上させる効果がある。上記の特性を反映して、残差ビデオを2次元周波数成分に分解するために、現在のブロックを変換することができる。前記変換は、DCT(Discrete Cosine Transform)又はDST(Discrete Sine Tranform)などの変換技法を用いて行うことができる。
【0451】
DCT又はDSTを使用して現在のブロックを変換してから、変換された現在のブロックを再び変換することができる。このとき、DCT又はDSTに基づく変換を第一変換と定義し、第一変換が適用されたブロックを再び変換することを第二変換と定義することができる。
【0452】
第一変換は、複数の変換コア候補のうちのいずれか1つを利用して実行されることができる。一例として、第一変換は、DCT2、DCT8又はDCT7のうちのいずれか1つを利用して実行されることができる。
【0453】
水平方向と垂直方向に対して異なる変換コアが使用されることもある。水平方向の変換コア及び垂直方向の変換コアの組み合わせを示す情報がビットストリームを介してシグナルリングされることもできる。
【0454】
第一変換及び第二変換の実行単位が異なることができる。一例として、8×8ブロックは第一変換を実行し、変換された8×8ブロックのうちの4×4サイズのサブブロックは第二変換を実行することができる。このとき、第二変換が実行されていない残余領域の変換係数を0に設定することもできる。
【0455】
或いは、4×4ブロックは第一変換を実行し、変換された4×4ブロックを含む8×8サイズの領域は第二変換を実行することもできる。
【0456】
第二変換の実行するか否かを示す情報がビットストリームを介してシグナルリングされることができる。
【0457】
デコーダは第二変換の逆変換(第二逆変換)を実行し、その実行結果に対して第一変換の逆変換(第一逆変換)を実行することができる。前記第二逆変換及び第一逆変換を実行した結果、現在のブロックの残差信号を獲得することができる。
【0458】
量子化はブロックのエネルギーを低減するためのものであり、量子化プロセスは変換係数を特定の定数値に除算する過程を含む。前記定数値は量子化パラメータによって誘導されることができ、量子化パラメータは1~63の間の値として定義されることができる。
【0459】
エンコーダで変換及び量子化を実行すると、デコーダは逆量子化及び逆変換を介して残差ブロックを獲得することができる。デコーダは、予測ブロックと残差ブロックを加えて、現在のブロックの復元ブロックを獲得することができる。
【0460】
現在のブロックの復元ブロックが獲得されると、インループフィルタ(In-loop filtering)を介して量子化及びエンコーディング過程で発生する情報の損失を減らすことができる。インループフィルタは、ディブロッキングフィルタ(Deblocking filter)、サンプル適応的オフセットフィルタ(Sample Adaptive Offset filter、SAO)又は適応的ループフィルタ(Adaptive Loop Filter、ALF)のうちの少なくとも1つを含むことができる。
【0461】
デコーディングプロセス又はエンコーディングプロセスを中心として説明した実施例を、エンコーディングプロセス又はデコーディングプロセスに適用することは、本発明の範囲に含まれる。所定の順序で説明された実施例を、説明された順序と異なる順序で変更することも、本発明の範囲に含まれる。
【0462】
上述した実施例は、一連のステップ又はフローチャートに基づいて説明されているが、これは本発明の時系列順序を限定するものではなく、必要に応じて同時に実行されるか、又は他の順序で実行されることができる。また、上述した実施例において、ブロック図を構成する構成要素(例えば、ユニット、モジュールなど)のそれぞれは、ハードウェアデバイス又はソフトウェアに具現されることができ、複数の構成要素が結合して1つのハードウェアデバイス又はソフトウェアに具現されることもできる。上述した実施例は、様々なコンピュータコンポーネントを介して実行されるプログラムコマンドの形態で具現されて、コンピュータ可読記録媒体に記録されることができる。コンピュータ可読記録媒体は、プログラムコマンド、データファイル、データ構造などを単独に又は組み合わせて含むことができる。コンピュータ可読記録媒体の例として、ハードディスク、フロッピーディスク及び磁気テープなどのような磁気媒体、CD-ROM、DVDなどの光記録媒体、フロッピーティカルディスク(floptical disk)のような磁気-光学媒体(magneto-optical media)、及びROM、RAM、フラッシュメモリなどのような、プログラムコマンドを格納して実行するように特別に構成されたハードウェアデバイスが含まれる。前記ハードウェアデバイスは、本発明に係る処理を実行するために、1つ以上のソフトウェアモジュールを使用して作動するように構成することができ、その逆も同様である。
【0463】
本発明は、ビデオをエンコード/デコードする電子デバイスに適用することができる。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24
図25
図26
図27
図28
図29
図30
図31
図32
図33
図34
図35
図36
図37
図38