(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-03
(45)【発行日】2024-09-11
(54)【発明の名称】非線形クリッピングのアダプティブループフィルタ
(51)【国際特許分類】
H04N 19/117 20140101AFI20240904BHJP
H04N 19/136 20140101ALI20240904BHJP
H04N 19/176 20140101ALI20240904BHJP
H04N 19/70 20140101ALI20240904BHJP
【FI】
H04N19/117
H04N19/136
H04N19/176
H04N19/70
(21)【出願番号】P 2023109613
(22)【出願日】2023-07-03
(62)【分割の表示】P 2021528450の分割
【原出願日】2019-11-29
【審査請求日】2023-07-03
(32)【優先日】2018-12-21
(33)【優先権主張国・地域又は機関】GB
(32)【優先日】2019-02-08
(33)【優先権主張国・地域又は機関】GB
(73)【特許権者】
【識別番号】000001007
【氏名又は名称】キヤノン株式会社
(74)【代理人】
【識別番号】110003281
【氏名又は名称】弁理士法人大塚国際特許事務所
(72)【発明者】
【氏名】タケ, ジョナサン
(72)【発明者】
【氏名】ジスケ, クリストフ
(72)【発明者】
【氏名】ラロシュ, ギローム
(72)【発明者】
【氏名】オンノ, パトリス
【審査官】松元 伸次
(56)【参考文献】
【文献】欧州特許出願公開第02477403(EP,A1)
【文献】国際公開第2017/194312(WO,A2)
【文献】米国特許出願公開第2011/0274158(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
H04N 19/00-19/98
(57)【特許請求の範囲】
【請求項1】
画像における1以上の画像部分を、アダプティブループフィルタを用いてフィルタリングする符号化方法であって、
前記画像における画像部分の第1のサンプルの値に対して、該第1のサンプルの複数の近傍サンプルの値に基づいて、前記フィルタリングを実行し、
前記フィルタリングは、前記複数の近傍サンプルに対応する複数のクリッピング関数を少なくとも含む非線形の数式を用いて実行され、
前記複数のクリッピング関数におけるクリッピング関数は、
前記第1のサンプルの値と、該第1のサンプルの近傍サンプルの値との差分値が、該クリッピング関数で規定される値の範囲内である場合に、前記差分値を出力し、
前記差分値が前記値の範囲外である場合は、該クリッピング関数で規定される値を出力し、
前記第1のサンプルの値に対する前記フィルタリングに用いられる前記複数のクリッピング関数それぞれは、対応する前記第1のサンプルの近傍サンプルの位置に応じた、前記値の範囲を規定するためのパラメータを用いる関数であり、
複数のクリッピング値からそれぞれクリッピング値を識別するインデックスに関連付けられる、
ことを特徴とする方法。
【請求項2】
前記複数のクリッピング関数におけるクリッピング関数は、
max(-b、min(b,d))、min(b、max(-b,d))、max(c-b、min(c+b,n))、及び、min(c+b、max(c-b,n))のいずれかと同じ結果を出力する関数であり、
ここで、cは前記第1のサンプルの値、nは前記第1のサンプルの近傍サンプルの値、d=n-c、bは前記値の範囲を規定するためのパラメータである
ことを特徴とする請求項1に記載の方法。
【請求項3】
前記複数のクリッピング関数に含まれる前記パラメータは、複数のパラメータから、使用されるパラメータを識別するためのインデックスを使用して決定される
ことを特徴とする請求項1または2に記載の方法。
【請求項4】
前記画像を符号化してビットストリームを生成すること、
を更に有することを特徴とする請求項1~3のいずれか1項に記載の方法。
【請求項5】
画像における1以上の画像部分を、アダプティブループフィルタを用いてフィルタリングする復号方法であって、
前記画像における画像部分の第1のサンプルの値に対して、該第1のサンプルの複数の近傍サンプルの値に基づいて、前記フィルタリングを実行し、
前記フィルタリングは、前記複数の近傍サンプルに対応する複数のクリッピング関数を少なくとも含む非線形の数式を用いて実行され、
前記複数のクリッピング関数におけるクリッピング関数は、
前記第1のサンプルの値と、該第1のサンプルの近傍サンプルの値との差分値が、該クリッピング関数で規定される値の範囲内である場合に、前記差分値を出力し、
前記差分値が前記値の範囲外である場合は、該クリッピング関数で規定される値を出力し、
前記第1のサンプルの値に対する前記フィルタリングに用いられる前記複数のクリッピング関数それぞれは、対応する前記第1のサンプルの近傍サンプルの位置に応じた、前記値の範囲を規定するためのパラメータを用いる関数であり、
複数のクリッピング値からそれぞれクリッピング値を識別するインデックスに関連付けられる、
ことを特徴とする方法。
【請求項6】
前記複数のクリッピング関数におけるクリッピング関数は、
max(-b、min(b,d))、min(b、max(-b,d))、max(c-b、min(c+b,n))、及び、min(c+b、max(c-b,n))のいずれかと同じ結果を出力する関数であり、
ここで、cは前記第1のサンプルの値、nは前記第1のサンプルの近傍サンプルの値、d=n-c、bは前記値の範囲を規定するためのパラメータである
ことを特徴とする請求項5に記載の方法。
【請求項7】
前記複数のクリッピング関数に含まれる前記パラメータは、複数のパラメータから、使用されるパラメータを識別するためのインデックスを使用して決定される
ことを特徴とする請求項5又は6に記載の方法。
【請求項8】
前記画像を得るため、ビットストリームからデータを復号すること、
を更に有することを特徴とする請求項5~7のいずれか1項に記載の方法。
【請求項9】
画像における1以上の画像部分を、アダプティブループフィルタを用いてフィルタリングする符号化装置であって、
前記画像における画像部分の第1のサンプルの値に対して、該第1のサンプルの複数の近傍サンプルの値に基づいて、前記フィルタリングを実行するフィルタリング手段を有し、
前記フィルタリングは、前記複数の近傍サンプルに対応する複数のクリッピング関数を少なくとも含む非線形の数式を用いて実行され、
前記複数のクリッピング関数におけるクリッピング関数は、
前記第1のサンプルの値と、該第1のサンプルの近傍サンプルの値との差分値が、該クリッピング関数で規定される値の範囲内である場合に、前記差分値を出力し、
前記差分値が前記値の範囲外である場合は、該クリッピング関数で規定される値を出力し、
前記第1のサンプルの値に対する前記フィルタリングに用いられる前記複数のクリッピング関数それぞれは、対応する前記第1のサンプルの近傍サンプルの位置に応じた、前記値の範囲を規定するためのパラメータを用いる関数である
複数のクリッピング値からそれぞれクリッピング値を識別するインデックスに関連付けられる、
ことを特徴とする装置。
【請求項10】
画像における1以上の画像部分を、アダプティブループフィルタを用いてフィルタリングする復号装置であって、
前記画像における画像部分の第1のサンプルの値に対して、該第1のサンプルの複数の近傍サンプルの値に基づいて、前記フィルタリングを実行するフィルタリング手段を有し、
前記フィルタリングは、前記複数の近傍サンプルに対応する複数のクリッピング関数を少なくとも含む非線形の数式を用いて実行され、
前記複数のクリッピング関数におけるクリッピング関数は、
前記第1のサンプルの値と、該第1のサンプルの近傍サンプルの値との差分値が、該クリッピング関数で規定される値の範囲内である場合に、前記差分値を出力し、
前記差分値が前記値の範囲外である場合は、該クリッピング関数で規定される値を出力し、前記第1のサンプルの値に対する前記フィルタリングに用いられる前記複数のクリッピング関数それぞれは、対応する前記第1のサンプルの近傍サンプルの位置に応じた、前記値の範囲を規定するためのパラメータを用いる関数である
複数のクリッピング値からそれぞれクリッピング値を識別するインデックスに関連付けられる、
ことを特徴とする装置。
【請求項11】
コンピュータに、請求項1~8のいずれか1項に記載の方法を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ビデオコンポーネントのブロックの符号化又は復号に関する。本発明の実施形態は、そのような構成要素のサンプルをフィルタリングするためのフィルタを制御するときに特に使用されるが、これに限定されるものではなく、特に、排他的ではないが、アダプティブループフィルタ(adaptive loop filter)の制御に関する。
【背景技術】
【0002】
ビデオ符号化は、画像符号化を含む(画像がビデオの単一フレームに相当する)。ビデオ符号化では、変換係数の量子化や動き補償(補間フィルタを使用して行われることが多い)などの一部の符号化ツールでは、しばしば歪みバイアス/効果(一定の文脈において系統的であるか、少なくともランダムではないように見える歪み)をもたらす。これらのバイアス/アーチファクトを補償し、符号化効率を改善する(または少なくとも良好なレベルを維持する)ために、ポストフィルタまたはインループフィルタと呼ばれるいくつかの特定の符号化ツールが使用される。デブロッキングフィルタ(DBF)、サンプルアダプティブオフセット(SAO)フィルタまたはアダプティブループフィルタ(ALF)が、このような符号化ツールのいくつかの例である。インループフィルタは符号化ループ内で適用され、その結果、現在のフレームに提供される画質の向上は現在のフレームに基づいて符号化される次のフレームの符号化効率の向上を可能にする。例えば、DCT係数の量子化は、ビデオ圧縮には効率的であるが、サンプルの圧縮ブロックの境界にブロッキングアーチファクト(バイアス)をもたらすことが多い。デブロッキングフィルタは、そのようなアーチファクトから生じる望ましくない影響を低減する。デブロッキング(DBFを使用する)は(別のフレームの動き補償のための参照フレームとして機能する前に)符号化ループ内の復号フレームを、(例えば、それを表示する直前に)符号化ループからフレームをデブロッキングすることと比較して、動き補償の符号化効率を大幅に向上させる。
【発明の概要】
【0003】
本発明は特に、復号されたフレーム/画像における望ましくない圧縮アーチファクトを低減するためにループ内フィルタとしても適用されるアダプティブループフィルタ(ALF)に関する。ALFはビデオ符号化エキスパートグループ/動画エキスパートグループ(VCEG/MPEG)標準化グループによって研究されており、VVC(Versatile Video Coding)標準、例えば、VVCテストモデルソフトウェアの第3バージョン(VTM-3.0またはVVC Draft バージョン3)での使用が検討されている。
【0004】
本発明の実施形態の目的は、ビデオコンポーネントのブロックの前述の符号化または復号の1つまたは複数の問題または欠点に対処することである。
【0005】
ALFは効率的な符号化ツールであるが、その線形フィルタリングは画質改善については準最適解である。本発明は、ALFによる非線形フィルタリングを可能にして、その効率および/または性能を改善する。
【0006】
本発明の態様によれば、添付の特許請求の範囲に記載されるような装置/デバイス、方法、プログラム、コンピュータ可読記憶媒体、および信号が提供される。本発明の他の特徴は、従属請求項および説明から明らかになるのであろう。
【0007】
本発明の第1の態様によれば、画像の1以上の画像部分に対するアダプティブループフィルタを制御する方法が提供され、この方法は、画像部分の第1のサンプル値の1以上の隣接サンプル値に基づいて画像部分の第1のサンプルに対してフィルタリングを制御することを含み、制御することは、1以上の隣接サンプル値を変数として有する非線形関数を使用する。適切には、非線形関数の変数は、2以上の隣接サンプル値を含む。適切には、非線形関数の変数は、第1のサンプル値と、1つ以上の隣接するサンプル値の位置に依存する第1の変数とをさらに含む。適切には、第1の変数は、2以上の隣接サンプル値の位置に依存する。適切には、非線形関数の出力はアダプティブループフィルタの入力(または入力パラメータ)として使用される。
【0008】
本発明の第2の態様によれば、画像の1以上の画像部分ためのフィルタを制御する方法が提供され、この方法は、画像部分の第1のサンプル値の1以上の隣接するサンプル値に基づく、前記第1のサンプルに対するフィルタリングを制御することを含み、この制御することは、第1のサンプル値、1以上の隣接サンプル値、及び、第1の変数含む複数の減数を持つ非線形関数を使用し、前記第1の変数は前記1以上の隣接するサンプル値の位置に依存する。適切には、複数の変数は、2以上の隣接サンプル値を含む。適切には、第1の変数は、2以上の隣接サンプル値の位置に依存する。適切には、フィルタはアダプティブループフィルタである。
【0009】
本発明の第3の態様によれば、画像の1以上の画像部分のためのフィルタを制御する方法が提供され、この方法は、画像部分の第1のサンプル値の1以上の隣接サンプル値に基づいて、第1のサンプルへのフィルタリングを制御することを含み、この制御することは、第1のサンプル値、1以上の隣接サンプル値、およびクリッピングパラメータに基づいて、1以上の制御パラメータを持つ1以上のクリッピング関数を使用する。適切には、1以上の制御パラメータは、第1のサンプル値、2以上の隣接サンプル値、および、クリッピングパラメータに基づく。適切には、フィルタはアダプティブループフィルタである。適切には、1以上のクリッピング関数の各々は、max(-b、min(b,d))、min(b、max(-b,d))、max(c-b、min(c+b,n))、またはmin(c+b、max(c-b,n))のうちの1つであり、ここでcは第1のサンプル値、nは隣接するサンプル値、d=n-cであり、bはクリッピングパラメータである。
【0010】
本発明の第4の態様によれば、画像の1以上の画像部分についてのアダプティブループフィルタを制御する方法が提供され、この方法は、画像部分の第1のサンプル値の1以上の隣接サンプル値に基づいて、第1のサンプルに対してのフィルタリングを制御することを含み、この制御することは、第1のサンプル値と1以上の隣接サンプル値とを、非線形結合を、アダプティブループフィルタの入力パラメータとして使用する。適切には、アダプティブループフィルタは、VTM3.0に規定されている通りである。
【0011】
本発明の第5の態様によれば、画像の1以上の画像部分についてのアダプティブループフィルタを制御する方法が提供され、この方法は、画像部分の第1のサンプル値の2以上の隣接サンプル値に基づいて、第1のサンプルに対してフィルタリングを制御することを含み、この制御することは、2以上の隣接サンプル値の非線形結合をアダプティブループフィルタの入力パラメータとして使用する。適切には、アダプティブループフィルタがVTM3.0に規定されている通りである。
【0012】
本発明の第4および第5の態様について、以下の特徴が、その実施形態に従って提供されてもよい。好ましくは、非線形結合は非線形関数の一部である。適切には、アダプティブループフィルタのための入力パラメータが、1以上の隣接サンプル値の位置に依存する第1の変数をさらに有する。適切には、第1の変数は、2以上の隣接サンプル値の位置に依存する。適切には、非線形結合は、第1のサンプル値、1つ(または2つ以上)の隣接サンプル値、および第1の変数である。
【0013】
本発明の第6の態様によれば、画像の1以上の部分を処理する方法が提供される。ここで、画像部分は、クロマサンプルおよびルマサンプルに関連付けられている。この方法は、ビットストリーム、または画像部分の第1のサンプル値と1以上の隣接サンプル値から得る情報に基づいて、第1の態様、第2の態様、第3の態様、第4の態様、または第5の態様による方法を使用して制御されるフィルタを使用するか使用しないか、前記フィルタの使用を可にするか不可にするか、または第1のサンプル値上にフィルタリングするときに前記フィルタとともに使用するためのフィルタリングパラメータ、のうちの少なくとも1つを決定することを含む。適切には、ビットストリームから取得可能な情報は、フラグまたはインデックスを含む。適切には、ビットストリームから取得可能な情報は、前記フィルタを識別するための情報、使用または使用しないことを示すためのフラグ、有効化または無効化を示すためのフラグ、前記フィルタと共に使用するための第1の変数に関する情報、または値範囲を指定するためのクリッピングパラメータに関する情報のうちの1つ以上を含む。適切には、第1の変数に関する情報は値を指定するため、または第1の関数を識別するための値を第1の変数として識別するためのものである。適切には、第1の変数は、1以上の隣接サンプル値の位置に依存する(またはそれに基づいて変化することができる)。適切には、第1の変数が2以上の隣接サンプル値の位置に依存する。
【0014】
本発明の第7の態様によれば、1以上の画像を符号化する方法が提供され、この方法は、画像の1以上の部分について、第1の態様、第2の態様、第3の態様、第4の態様、または第5の態様によるフィルタを制御すること、または第6の態様による処理を含む。適切には方法は、画像を受信することと、受信した画像を符号化し、ビットストリームを生成すること、符号化された画像を処理することをさらに含み、処理することは、第1の態様、第2の態様、第3の態様、第4の態様、または第5の態様に従った制御すること、または第6の態様に従って処理することを含む。適切には第6の態様に依存する場合、本方法は、ビットストリーム内に前記情報を提供することをさらに含む。適切には、本方法は、複数の利用可能な関数から非線形関数または1以上のクリッピング関数を選択すること、符号化画像を処理するときに選択された関数を使用すること、選択された関数を識別するための情報をビットストリーム内に提供することをさらに含む。
【0015】
本発明の第8の態様によれば、1以上の画像を復号する方法が提供され、この方法は、画像の1以上の部分について、第1の態様、第2の態様、第3の態様、第4の態様、または第5の態様によるフィルタを制御すること、または第6の態様に従って処理することを含む。適切には方法は、ビットストリームを受信すること、画像を得るため受信されたビットストリームから情報を復号すること、得た画像を処理することをさらに含み、処理すること、第1の態様、第2の態様、第3の態様、第4の態様、または第5の態様に従って制御すること、または第6の態様に従って処理することを含む。適切には第6の態様に依存する場合、本方法はビットストリームから前記情報を取得することをさらに含む。適切には、本方法は、ビットストリームから、複数の利用可能な関数から非線形関数または1以上のクリッピング関数を識別するための情報を取得すること、得られた画像を処理するときに識別された関数を使用することをさらに含む。
【0016】
本発明の第9の態様によれば、画像の1以上の部分についてのフィルタを制御するのデバイスが提供され、このデバイスは、第1の態様、第2の態様、第3の態様、第4の態様、第5の態様、または第6の態様による方法を実行するように構成されたコントローラを備える。
【0017】
本発明の第10の態様によれば、画像を符号化するデバイスが提供され、このデバイスは、第9の態様に係る制御デバイスを備える。適切には、デバイスは第7の態様による方法を実行するように構成される。
【0018】
本発明の第11の態様によれば、画像を復号するデバイスが提供され、このデバイスは、第9の態様に従う制御デバイスを備える。適切には、このデバイスは、第8の態様による方法を実行するように構成される。
【0019】
本発明の第12の態様によれば、画像の1以上の画像部分についてのアダプティブループフィルタを制御する方法が提供され、この方法は、画像部分の第1のサンプル値の複数の隣接するサンプル値に基づいて、第1のサンプルのフィルタリングを制御することを有し、前記制御ことは、非線形関数を使用することを含み、この非線形関数は、前記1以上の隣接サンプル値に基づいく1以上の変数を有する。隣接(neighbouring)サンプル(値)は、隣接(adjacent)するサンプル(値)に限定されず、第1のサンプル(値)の周辺または近傍のサンプル(値)も含むことが理解される。適切には、制御することは、アダプティブループフィルタの入力パラメータとして、非線形関数の変数を決定するために使用されない、または非線形関数の変数として使用されない、1以上の他の隣接サンプルの1以上の隣接サンプル値を使用することを含む。適切には、1以上の(または前記)非線形関数における変数を決定するために使用される、またはそれらとして使用される隣接サンプルは、第1のサンプルが交点における十字、または平行四辺形の形状に配置される。
適切には、1以上の非線形関の変数を決定するため、または、1以上の非線形関の変数としての値となる隣接サンプルが、以下に示す形状に配置される:8個の隣接サンプルが非線形関数における変数を決定するため使用される、または、非線形関数における変数として使用されるとき、第1のサンプル値を交点に有する高さ5サンプル、幅5サンプルのクロス形、又は、各辺の長さが3サンプルの中空の平行四辺形、又は、12個の隣接サンプルが1以上の非線形関数における変数を決定するために使用される、または、1以上の非線形関数における変数として使用されるとき、各辺が3サンプルの長さの平行四辺形である。適切には、交点位置(及び/又は、中心位置)に第1のサンプルを持つクロス形は、次の形状の1つである:垂直および水平線の交差する“+”、または、斜め線の交差“X”(対角交差)である。適切には、前記(中空の)平行四辺形は、正方形、長方形、または菱形(diamond shape)のうちの1つである。適切には、前記(中空の)平行四辺形は、中心に位置する第1のサンプルの周りもしくは囲む。或いは、1以上の(又は前記)非線形関数における変数を判定するための使用される、もしくは、1以上の(又は前記)非線形関数における変数として使用される隣接サンプルが、中心位置にその第1のサンプルを持つ以下の形状に配置される:垂直線“|”、水平線“-”、左上から右下への斜め線“\”、または右上から左下への斜線“/”である。あるいは、1以上の(または前記)非線形関数の変数を判定するために使用される、又は、1以上の(または前記)非線形関数の変数として使用される隣接サンプルは、(中空の)多角形の形状に配置される。適切には、前記(中空の)多角形は、中心に位置する第1のサンプル位置の周りにあるか、またはそれを取り囲む。あるいは、1以上の(または前記)非線形関数における変数を決定するために使用される、または、1以上の(または前記)非線形関数における変数として使用される隣接サンプルは、前述の形状の任意の組合せの形状に配置される。適切には、フィルタ変数は、2以上の隣接するサンプル間で共有される。適切には、隣接サンプルの配置形状は、中心に関して対称性を有する。適切には、十字形、平行四辺形、または多角形の形状が、中心に関して対称性を有する。あるいは、隣接サンプルの配列の形状は、中心の周りに対称性を有さない。適切には、十字形、又は平行四辺形が中心に関して対称性を有さない。適切には、第1のサンプルおよび複数の隣接サンプル値の隣接サンプルが、以下の形状に配置される:交点に第1のサンプルを有するクロス形、或いは、平行四辺形、或いは、中空の平行四辺形である。適切には、第1のサンプル及び複数の隣接サンプル値の隣接サンプルが、平行四辺形の形状に配置される:ここで、複数の隣接サンプル値が24個の隣接サンプルの値からなる場合は各辺が4サンプルの長さを持つ、または、複数の隣接サンプル値が12個の隣接サンプルの値からなる場合は各辺が3サンプルの長さを持つ。適切には、第1のサンプルが交点(及び/又は、中心)にあるクロス形は、垂直および水平線の交差する“+”、または斜線が交差する“X”(対角線交差)のうちの1つである。適切には、前記(中空)平行四辺形は、正方形、長方形、または菱形のうちの1つである。適切には、前記(中空)平行四辺形は、中心に位置する第1のサンプルの周りにあるか、またはそれを取り囲む。あるいは、第1のサンプルおよび複数の隣接サンプル値の隣接サンプルは、第1のサンプルを中心にて次の形状に配置される:垂直線“|”、 水平線“-”、左上から右下への斜め線“\”、または右上から左下への斜め線“/”である。あるいは、第1のサンプル及び複数の隣接サンプル値の複数の隣接サンプルは、(中空の)多角形の形状に配置される。適切には、前記(中空の)多角形は、中心に位置する第1のサンプル位置の周りにあるか、またはそれを取り囲む。あるいは、第1のサンプル及び複数の隣接サンプル値の隣接サンプルは、前述の形状の任意の組み合わせの形状に配置される。適切には、フィルタ変数は、2つ以上の隣接するサンプル間で共有される。適切には、隣接サンプルの配置形状は、中心に関して対称性を有する。好適には十字形、平行四辺形、または多角形が中心に関して対称性を有する。あるいは、隣接サンプルの配置形状は、中心に関して対称性を有さない。適切には、クロス形状、平行四辺形、または多角形の形状は、中心に関して対称性を持たない。適切には、第1のサンプルおよび隣接サンプルは、ルマ成分サンプルである。あるいは、第1のサンプルおよび隣接サンプルは、がロマ成分サンプルである。適切には、(または1以上)非線形関数の変数は、第1のサンプル値をさらに含み、(または1以上)非線形関数は、第1のサンプル値と1以上の隣接サンプル値のそれぞれとの間の差に適用される。適切には(または1つ以上の)非線形関数の変数は、更に、第1のサンプル値と、1以上の隣接サンプルの位置に依存する1以上のフィルタ変数を含み、各フィルタ変数は2以上の隣接サンプルについて同じであり、(または1つ以上の)非線形関数は第1のサンプル値と、同じフィルタ変数を有する2以上の隣接サンプルの2以上の隣接サンプル値のそれぞれ1つとの間の2つ以上の差の和に適用される。適切には、(または1つ以上の)非線形関数の出力は、アダプティブループフィルタの入力(または入力パラメータ)として使用される。適切には、非線形関数は、1以上のクリッピング関数を含み、1以上のクリッピング関数の各々は、次のいずれかである:max(-b、min(b,d))、min(b、max(-b,d))、max(c-b、min(c+b,n))、min(c+b、max(c-b,n))、max(-b、min(b,d1+d2))、min(b、max(-b,d1+d2))、max(2*c-b,min(2*c+b,n1+n2))、または、min(2*c+b、max(2*c-b,n1+n2))、ここで、cは第1のサンプル値、nまたはn1またはn2は隣接サンプル値、d=n-c、d1=n1-c、d2=n2-cであり、bはクリップパラメータである。
【0020】
本発明の第13の態様によれば、画像の1以上の部分を処理する方法が提供され、ここで画像部分はクロマサンプルおよびルマサンプルに関連付けれれいる。そして、この方法は、ビットストリーム、または、画像部分の第1のサンプル値とその1以上の隣接サンプル値から得た情報に基づき、第12の態様の方法を使用して制御されるフィルタを使用するかどうか、前記フィルタの使用を可とするか不可とするか、または第1のサンプル値をフィルタリングするときに前記フィルタとともに使用するためのフィルタパラメータまたはフィルタ変数のうちの少なくとも1つを決定することを含む。適切には、ビットストリームから得られる情報は、ルマ成分またはクロマ成分のうちの1つのために提供されるフラグを含み、そのフラグはその成分のために、第12の態様の方法を使用して制御されるフィルタを使用すべきか否か、または前記フィルタの使用を可とするか不可とするかの少なくとも1つを示す。適切には、フラグは、適応パラメータセット(adaptation parameter set)に提供される。好適には、ビットストリームから取得される情報は、1以上の画像部分のために提供されるフラグを含み、そのフラグは、第12の態様の手法を使用して制御されるフィルタを使用すべきか否か、または前記フィルタの使用を可とするか不可とするかのうち、少なくとも1以上の画像部分のために示す。適切には、フラグは、適応パラメータセットにて提供される。
【0021】
本発明の第14の態様によれば、1以上の画像を符号化する方法が提供され、この方法は、画像の1以上の部分について、第12の態様の方法に従ってフィルタを制御すること、または第13の態様の方法に従って処理することを含む。適切には、この方法は、画像を受信すること、受信した画像を符号化し、ビットストリームを生成すること、符号化された画像を処理することをさらに含み、前記処理することは、第12の態様の方法に従って制御すること、または第13の態様の方法に従って処理することを含む。適切には、(第13の態様に依存する場合)方法は、ビットストリーム内に前記情報を提供することをさらに含む。適切には、非線形関数は、1以上のクリッピング関数を含み、(または1つまたは複数の)非線形関数の変数は、その値が(または1つまたは複数の)非線形関数内の変数として使用される1以上の複数の隣接サンプルの位置に依存する1以上のフィルタ変数をさらに含み、前記情報を提供することはビットストリーム内に1以上のクリッピングパラメータを提供することを含み、位置に関するフィルタ変数がゼロである場合、その位置における隣接サンプルの隣接サンプル値に適用されるクリッピング関数とともに使用されるクリッピングパラメータはビットストリーム内に提供されない。適切には、この方法は、複数の利用可能な関数から、非線形関数または1以上のクリッピング関数を選択すること、符号化画像を処理するときに選択された関数を使用すること、選択された関数を識別するための情報をビットストリーム内に提供することをさらに含む。
【0022】
本発明の第15の態様によれば、1以上の画像を復号する方法が提供され、この方法は、画像の1以上の部分について、第12の態様の方法に従ってフィルタを制御すること、または第13の態様の方法に従って処理することを含む。
好適には、方法は、ビットストリームを受信すること、画像を得るために受信したビットストリームから情報を復号すること、得た画像を処理することをさらに含み、この処理することは、第12の態様の方法による制御、または第13の態様の方法による処理を含む。適切には、(第13の態様に依存する場合)方法は、ビットストリームから前記情報を得ることをさらに含む。適切には、非線形関数は1以上のクリッピング関数を含み、(または1以上の)非線形関数の変数はその値が(または1以上の)非線形関数の変数として使用される1以上の隣接サンプルの位置に依存する1以上のフィルタ変数をさらに含み、位置に関するフィルタ変数がゼロである場合、クリッピング関数はその位置における隣接サンプルの隣接サンプル値に適用されない。適切には、本方法は、ビットストリームから、複数の利用可能な関数から、非線形関数または1以上のクリッピング関数を識別するための情報を得ること、得た画像を処理するときに識別された関数を使用することをさらに含む。
【0023】
本発明の第16の態様によれば、デバイスが提供される。このデバイスは、第12の態様または第13の態様の方法を実行するように構成されたコントローラと、第14の態様の方法を実行するように構成されたエンコーダ、又は、第15の態様の方法を実行するように構成されたデコーダとを備える。
【0024】
本発明の第17の態様によれば、画像の1つまたは複数の部分のためのフィルタを制御するためのデバイスが提供され、デバイスは、第12の態様または第13の態様の方法を実行するように構成されたコントローラを備える。
【0025】
本発明の第18の態様によれば、画像を符号化するデバイスが提供される。このデバイスは、第17の態様の制御装置を備える。適切には、デバイスは第14の態様の方法を実行するように構成される。
【0026】
本発明の第19の態様によれば、画像を復号するデバイスが提供される。このデバイスは、第17の態様の制御装置を備える。適切には、このデバイスは、第15の態様の方法を実行するように構成される。
【0027】
本発明の第20の態様によれば、プログラムが提供される。このプログラムは、コンピュータまたはプロセッサ上で実行されるときに、コンピュータまたはプロセッサに、第1の態様、第2の態様、第3の態様、第4の態様、第5の態様、第6の態様、第7の態様、第8の態様、第12の態様、第13の態様、第14の態様、または第15の態様による方法を実行させるプログラムが提供される。
【0028】
本発明の第21の態様によれば、第20の態様に係るコンピュータプログラムを記憶したコンピュータ読み取り可能な記憶媒体が提供される。
【0029】
本発明の第22の態様によれば、第7の態様または第14の態様による方法を使用して符号化され、ビットストリームによって表される、画像のための情報データセットを搬送する信号が提供され、この画像は再構成可能なサンプルのセットを含み、各再構成可能なサンプルはサンプル値を有する。情報データセットは、第1の再構成可能なサンプルの隣接サンプルのサンプル値に基づいて第1の再構成可能なサンプルに対するフィルタリングを制御するための制御データを含む。
【0030】
本発明の前述の態様について、以下の特徴が、本発明の実施形態に従って提供されてもよい。好適には、非線形関数は、クリッピング関数、鋸歯カーネル関数、三角形カーネル関数、またはガウスカーネル関数のうちの1つまたは複数を含む。適切には、非線形関数が1以上のクリッピング関数を含み、1つ以上のクリッピング関数の各々は、max(-b、min(b,d))、min(b、max(-b,d))、max(c-b,min(c+b,d))、min(c+b,max(c-b,d))、max(-b、min(b,d1+d2))、min(b,max(-b,d1+d2))、max(2*c-b,min(2*c+b,n1+n2))、または、min(2*c+b、max(2*c-b,n1+n2))のうちの1つであり、ここで、cは第1のサンプル値であり、nまたはn1又はn2は隣接サンプル値であり、d=n-c、d1=n1-c、d2=n2-c、d2=n2-cであり、bはクリッピングパラメータである。適切には、(複数の)変数は(数学的)非線形関数の独立変数であり、非線形関数の出力はその従属変数である。適切には、隣接サンプルの位置は、第1のサンプルの位置からの相対距離または相対変位として定義される。適切には、隣接するサンプルの位置は(ラスタ)走査順序におけるその位置として定義される(適切には(ラスタ)走査順序における第1のサンプルの位置に対して)。適当には、アダプティブループフィルタは、非線形関数を使用するフィルタリングを行う。適切には、非線形関数の出力は、アダプティブループフィルタの入力(または入力パラメータ)として使用される。適切には、1以上の入力(パラメータ)にアダプティブループフィルタを適用することは、その変数として1以上の入力(パラメータ)を有する線形関数を使用することを含む。適切には、アダプティブループフィルタはVTM3.0に規定されている通りである。
【0031】
本発明のさらに別の態様はコンピュータまたはプロセッサによって実行されるときに、コンピュータまたはプロセッサに前述の態様の方法のいずれかを実行させるプログラムに関する。プログラムは、それ自体で提供されてもよく、またはキャリア媒体上で、キャリア媒体によって、またはキャリア媒体内で搬送されてもよい。キャリア媒体は非一時的であってもよく、例えば、記憶媒体、特にコンピュータ可読記憶媒体であってもよい。搬送媒体はまた、一時的なもの、例えば、信号または他の伝送媒体であってもよい。信号は、インターネットを含む任意の適切なネットワークを介して送信されてもよい。
【0032】
本発明のさらに別の態様は、前述のデバイス態様のいずれかによるデバイスを備えるカメラに関する。本発明のさらに別の態様によれば、前述のデバイス態様のいずれかによるデバイスおよび/または前述のカメラ態様を具現化するカメラを備えるモバイルデバイスが提供される。
【0033】
本発明の一態様における任意の特徴は、任意の適切な組み合わせで、本発明の他の態様に適用されてもよい。特に、方法の態様は、装置の態様に適用されてもよく、逆もまた同様である。さらに、ハードウェアで実施される特徴は、ソフトウェアで実施されてもよく、その逆も可能である。ここに記載されたソフトウェアおよびハードウェアの機能についての言及は、すべて適宜解釈される必要がある。本明細書に記載されるような任意の装置特徴は、方法特徴として提供されてもよく、逆もまた同様である。本明細書で使用されるように、手段+機能特徴は、適切にプログラムされたプロセッサおよび関連するメモリなど、それらの対応する構造に関して代替的に表現されてもよい。また、本発明の任意の態様において説明され、定義された様々な特徴の特定の組合せは、独立して実装および/または供給および/または使用されることができることを理解されたい。
【図面の簡単な説明】
【0034】
ここで、本発明の実施形態を、単なる例として、以下の図面を参照して説明する:
【
図1】VTM-3.0の典型的な復号ループにおいてALFが行われる場合を示す図。
【
図2】ALFのVTM-3.0に存在するシンタックス要素の概略を示すフローチャート。
【
図3-a】本発明の一実施形態による、クロマ成分をフィルタリングするためのステップを示すフローチャート。
【
図3-b】本発明の一実施形態によるクロマフィルタのためのフィルタ形状および係数配置を提供する図。
【
図4-a】本発明の一実施形態による、ルマ成分をフィルタリングするためのステップを示すフローチャート。
【
図4-b】本発明の一実施形態によるルマフィルタのフィルタ形状および4つの可能な係数アレンジメントを提供する図。
【
図5】本発明の一実施形態による修正シンタックス要素の概略を示すフローチャート。
【
図6】VTM-3.0におけるALFにおける線形フィルタのブロック図。
【
図7】本発明の一実施形態による非線形フィルタのブロック図。
【
図8】本発明の一実施形態による、
図7のフィルタの非線形部分がディスエーブルされたときに得られる線形フィルタのブロック図。
【
図9】本発明の一実施形態によるALF符号化プロセスを示すフローチャート。
【
図10】本発明の実施形態による符号化方法のステップを示すフローチャート。
【
図11】本発明の実施形態による復号方法のステップを示すフローチャート。
【
図12】本発明の1つまたは複数の実施形態を実施することができるデータ通信システムを概略的に示すブロック図。
【
図13】本発明の1つまたは複数の実施形態を実施することができる処理装置の構成要素を示すブロック図。
【
図14】本発明の1つまたは複数の実施形態を実施することができるネットワークカメラシステムを示す図。
【
図15】本発明の1つまたは複数の実施形態を実施することができるスマートフォンを示す図。
【
図16-a】本発明の実施形態によるクリップ位置の数を減らした7x7のダイヤモンドフィルタ形状を提供する図。
【
図16-b】本発明の実施形態によるクリップ位置の数を減らした5x5のダイヤモンドフィルタ形状を提供する図。
【発明を実施するための形態】
【0035】
以下に説明する本発明の実施形態は、画像の符号化及び復号の改善に関する。
【0036】
この明細書において、「シグナリング」がフィルタを制御するための1つ以上のパラメータに関するビットストリーム情報、例えば、モード/方式または他のフィルタ制御関連情報の使用、不使用、有効化、または無効化のためのビットストリーム情報への挿入(符号化における提供/包含/符号化)または抽出/取得(復号)を参照することができる。
【0037】
この明細書において、「スライス」という用語は、画像部分の例として使用される(このような画像部分の他の例がタイル又はタイルグループであり、これはタイルのグループ/設定である)。本発明の実施形態はスライスの代わりに、画像部分(例えば、タイル又はタイルグループ)と、画像部分/タイル/タイルグループのヘッダ(スライスヘッダの代わりに)、画像部分/タイル/タイルグループのタイプ(スライスタイプの代わりに)、及び画像部分/タイル/タイルグループの統計値(スライス統計値の代わりに)のような適切に修正されたパラメータ/値/シンタックスとに基づいて実施されてもよいことが理解される。本発明の実施形態では、スライスヘッダまたはシーケンスパラメータセット(sequence parameter set:SPS)の代わりに、適応パラメータセット(APS)またはタイル(グループ)ヘッダを使用して、ALFパラメータ(またはALFフィルタリングを使用するための情報)をシグナリングすることもできることも理解されたい。APSがALFパラメータ(またはALFフィルタリングを使用するための情報)を信号送信するために使用される場合、スライスヘッダまたはタイルグループヘッダを使用して、たとえば、適応セット識別子(APS_id)を示すことによって、ALFパラメータ(またはALFフィルタリングを使用するための情報)を取得するためにどのAPSを使用する必要があるかを示すことができる。また、スライス、タイルグループ、タイル、コーディングツリーユニット(CTU)/最大コーディングユニット(LCU)、コーディングツリーブロック(CTB)、コーディングユニット(CU)、予測ユニット(PU)、変換ユニット(TU)、またはピクセル/サンプルのブロックのいずれかを画像部分と呼ぶことができることも理解される。
【0038】
フィルタまたはツールが「アクティブ」と記述される場合、フィルタ/ツールは「利用可」または「使用可能」または使用されることを示し、「非アクティブ」と記述される場合、フィルタ/ツールは「利用不可」または「使用不可」または使用されないことを示し、「クラス」は1つまたは複数の要素のグループ、グループ化、カテゴリ、または分類を指す。さらに、フラグが「アクティブ」と記述される場合、そのフラグが、関連するフィルタ/ツールが「アクティブ」であることを意味することも理解される。
【0039】
アダプティブループフィルタ(Adaptive Loop Filter)(ALF)
図1は、VTM-3.0の典型的な復号ループにおいてALFが行われる場合を示している。101において、画像部分(例えば、スライス)は、符号化ツリー単位(CTU:VVCにおける最大の符号化単位、典型的には128×128サンプル/ピクセルサイズ)で復号される。CTUは、特定の予測スキーム/モードを使用して符号化され、多くの場合、残差ブロックの非可逆符号化を使用して符号化される矩形ブロックまたは符号化ユニット(CU)に分割される。ブロックベースの符号化の使用により、符号化されたブロック間の境界でブロッキングアーチファクトが見えることがある。102において、復号された画像部分は次に、DBFによって処理されて、これらのアーチファクトが低減/除去される。典型的にはブロック予測のための残差(ブロック)を符号化するために、残差値はDCTのような変換を用いて(残留エネルギーを少数の係数で圧縮するために)変換され、変換された係数は符号化コストを低減するために量子化される。この量子化はしばしば、再構成されたブロック(すなわち、フレームバッファ106に記憶された参照フレーム内のブロック)に幾つかのリンギングアーチファクトを導入する。103において、DBFの出力画像部分は、次いで、SAOフィルタによって処理される。これは低計算コストでこれらのアーチファクトのいくつかを低減するのに有用である。104では、SAOフィルタの出力画像部分がALFによって処理される。ALFは、例えば、「リンギング」のようなアーチファクトをさらに低減することができる。ALFはより高次の誤差モデリング能力を有するが、より高い計算コストとなる。ALFの出力画像部分は、その後、出力(例えば、表示部または表示部と通信するための通信インターフェース)105に送られる。それは時間予測(時間予測ツールが使用される場合)のために使用することができるように、(そこに格納された参照フレームの一部として)フレームバッファ106に入れることもできる。これが、DBF、SAOフィルタ、およびALFが「ループ内」フィルタと呼ばれる理由である。エンコーダはインループフィルタのいくつかをディスエーブルにして、デコーディング時にそれらがバイパスされるようにすることができる(すなわち、フィルタリングが実行されず、ディスエーブルにされたツールに対応するステップの出力がその入力と同じである)。また、いくつかの場合、処理される画像部分は、スライスに限定されず、1つまたは複数のスライスを含むフルフレームであってもよく、スライス境界(2つ以上存在する場合)を横切ってフィルタを適用して、それらの境界上のアーチファクトを低減する可能性がある。多成分画像(例えば、YCrCbフォーマットの画像)の場合、DBF、SAOフィルタ、またはALF処理は各成分に個別に、場合によっては異なるように(例えば、他の成分に対して異なるフィルタリングパラメータを使用して)適用される。
【0040】
図2は、ALFのためのVTM-3.0に存在するシンタックス要素の概要を示す。シーケンスパラメータセット(SPS) は、ALF ツールがビデオシーケンス(201) に対してアクティブであるかどうかを示し、もしそうなら、スライスヘッダはALF がスライス(202) に対してアクティブかどうかを示し、ALF を制御するためのフィルタパラメータ(203 ~207) を提供する。202においてALFがアクティブであるとき、それは少なくともルマ(Luma)成分に対してアクティブであり、スライスヘッダはさらに、ALFが各クロマ(Chroma)成分に対してアクティブであるかどうかを示す(203)。
【0041】
ALFは、1つのルマ成分上で2つ以上のフィルタを使用することができる。すなわち、異なるフィルタ構成が同じフィルタ係数(後述)を共有することができるので、フィルタ係数の複数のテーブルを使用することができる。VTM‐3.0ソフトウェアの構文要素スキームでは、これらの異なるフィルタ構成は個別に区別できず、異なる構成を持つフィルタが同じフィルタと見なされる。以下の説明では、係数の異なるテーブルを明示的に参照する場合を除いて、単一のフィルタに対する同じ参照が使用される。シンタックス要素スキームにおける単一のフィルタのこの共有は、フィルタリングされた画像上の統計が回転された直交および/またはミラー構成について同じであること、すなわち、基準サンプル構成のために設計された1つの基準フィルタが直交および/またはミラーサンプル構成をフィルタリングするために回転および/またはミラーリングされるように指定されることを考慮することによって、フィルタに割り当てられるビット数を低減する効果的な方法である。スライスヘッダは、符号化されたルマフィルタの数(204)を含む(これは一つ以上である)。
【0042】
ルマ(Luma)サンプルをフィルタリングするとき、ALFは(隣接するサンプルの構成に従って)サンプルを25の可能なクラス(カテゴリ/分類/グループ)のうちの1つに局所的に分類(カテゴリ化)し、(その特定のクラス/カテゴリ/分類/グループに関連付けられる/割り当てられる)フィルタを選択し、それらのサンプルに局所的に適用する。ここでは、サンプルがブロック単位(典型的には4×4サンプル、例えばVTM-3.0)又はCU単位で処理されるので、「局所的に」分類、及び「局所的に」適用、という用語が使用される。選択/選択されたルマフィルタは、選択されたルマフィルタを識別するためのインデックス/情報などを使用して、ビットストリームでシグナリングされる。符号化プロセス中に使用されるルマフィルタの数が1より多い場合、スライスヘッダはこれらのルマフィルタを識別/選択するための1つまたは複数のインデックス(例えば、25個のクラスに使用される25個までのフィルタのインデックス、各インデックスは、これらのクラスのうちの1つに使用されるルマフィルタに対応する)も含む(205)。符号化処理で使用されるルマフィルタの数が1である場合、この単一のルマフィルタが全てのクラスに適用される。
【0043】
次に、スライス・ヘッダは、ルマフィルタ(206)の各々についての全てのフィルタ係数(またはフィルタ・パラメータ)(すなわち、符号化プロセス中に使用されるルマフィルタの各々についての係数テーブル)と、それに続くクロマ(Chroma)フィルタ(207)についてのフィルタ係数とを含む。VTM-3.0では、2つのクロマ成分が両方のクロマ成分に対してALFがアクティブ(すなわち、イネーブル)であるとき、同じクロマフィルタを共有することに留意されたい。
【0044】
ALFがアクティブであるとき、ALFがアクティブである成分の各々について、フィルタリングはCTUごとにイネーブルされ得る。符号化されたビットストリームの内部では、各CTUについて、符号化されたスライスデータはALFがアクティブである各成分ごとに、そのCTUの成分(208、209、および210)上でALFがイネーブルされているかどうか、およびそのCTUのその成分のサンプルがALFを使用してフィルタリングされなければならないかどうかを示すために、1つのエントロピー符号化されたフラグを含む。このフラグは、コンテキスト適応のバイナリ算術符号化(CABAC)を使用して符号化される。
【0045】
VTM-3.0では、ルマフィルタ206の係数のシグナリングは以下のように実行される:
[1] “alf係数デルタフラグ(alf coefficients delta flag)”が最初にシグナリングされる。このフラグは、いくつかのフィルタをディスエーブルすることができるかどうかを示す。「alf係数デルタフラグ」がゼロであり、ルマフィルタの数が1より大きい場合、「coeffデルタ予測モードフラグ(coeff delta pred mode flag)」がシグナリングされ、フィルタ係数エンコードが予測(prediction)を使用することを示す(より詳細は後述)。
[2] VTM-3.0では、(exp-)Golomb符号化を使用してルマ係数を符号化するために、3(2 for Chroma)(exp-)Golomb構成を使用する。(exp-)Golomb符号化の唯一のパラメータは、(exp-)Golomb 次数((order)しばしば「k」と記される)である。各構成には(exp-)Golomb インデックス(index)がある。フィルタ係数の(exp-)Golomb符号化のパラメータは、(exp-)Golomb符号の「最小次数」のための可変長符号(VLC)を使用してシグナリングされ、次いで、各(exp-)Golombインデックスのために、(exp-)Golomb次数がそのインデックスおよび次のインデックスのために増加されなければならない場合(第1のインデックスのための「最小次数」で開始する)をシグナリングするためのフラグがシグナリングされる。
[3] その後、“alf係数デルタフラグ”がいくつかのフィルタが有効であることを示す場合、フィルタが無効であるかどうか(つまりコーディングされていないかどうか)を示すフラグがフィルタごとにシグナリングされる。
[4] 次に、フィルタ係数が、(exp-)Golombパラメータを記憶するテーブルから(固定テーブル内の)フィルタ係数インデックスに関連する(exp-)Golombインデックスで取られた(exp-)Golomb次数を有する(符号付き整数のための)exp-)Golombコードを使用して、各(ディスエーブルされていない)フィルタについてシグナリングされる。
【0046】
“coeffデルタ予測モードフラグ(coeff delta pred mode flag)”がシグナリングされる場合、フィルタ係数エンコードが予測(prediction)を使用することを示す。これは、1以上のフィルタインデックス(すなわち、各フィルタを識別するインデックス)を有する「現在の」フィルタのフィルタ係数が「現在の」フィルタのフィルタ係数と以前に処理されたフィルタのフィルタ係数との間の差として符号化される(例えば、フィルタ係数予測子として以前に処理されたフィルタのフィルタ係数を使用して、すなわち、予測を使用して、フィルタ係数残差値としてエンコードされる)ことを意味する。第1のフィルタ(フィルタ・インデックス0を有する)は、予測なしに符号化される。
【0047】
クロマフィルタ207の係数のシグナリングは、「alf係数デルタ・フラグ(alf coefficients delta flag)」がなく、「coeffデルタ予測モードフラグ」がなく、3つの代わりに2つの(exp-)ゴロム・インデックスがあることを除いて、ルマフィルタと同様に実行される。
【0048】
図3-aは、本発明の一実施形態によるクロマ成分をフィルタリングするためのステップを示すフローチャートであり、
図3-bは、本発明の一実施形態によるクロマフィルタのためのフィルタ形状および係数配置を提供する。
【0049】
図3-aにおいて、ALFフィルタリングがLuma成分とChroma成分との間で異なって適用される。簡単な場合から始める場合、
図3-aは、クロマ成分をフィルタリングするための主要なステップを提供する。入力画像部分301(例えば、タイル又はタイルグループ)は、フィルタリングされるべきクロマサンプルを含む。入力フィルタリングパラメータ302は、
図2のALFシンタックス要素を参照して説明したALFパラメータ(例えば、“ALF係数デルタフラグ”、“coeffデルタ予測モードフラグ”、フィルタ係数、またはALFの任意の他のフラグまたはフィルタパラメータ)を含む。クロマフィルタの符号化フィルタ係数を使用し、303にて、クロマフィルタが導出/取得される。
【0050】
変形例では、クロマフィルタがサイズ5×5、すなわち高さ5サンプル、幅5サンプルのダイヤモンド形状/パターン/マスク/支持体を有する(
図3-bの306参照)。Chromaフィルタのフィルタ係数は、「Chroma」フィルタの中心に対して対称になるように整理されている。このChroma フィルタには6つの符号化フィルタ係数があり、0 ~ 5 の番号のインデックスが付いている。この係数は図に示す対応する係数位置に配置されている。インデックス番号の上付き記号(“+”または“-”)は同じフィルタ係数を共有する異なる係数位置間で区別できるように提供され、すなわち、2つの対称な(同じフィルタ係数を共有するという意味で)隣接するものを参照するとき、i
+は、(ラスタ)走査順序でフィルタリングされるサンプルの後に(すなわち、フィルタ形状/パターン/マスク/サポートの中心で)符号化/復号化/処理/記憶/アクセスされるインデックスiに対応し、i
-は(ラスタ)走査順序でフィルタリングされるサンプルの前に符号化/復号化/処理/記憶/アクセスされるインデックスiを有する隣接するサンプルに対応する。クロマフィルタ形状の中心に対する7番目の係数(指数番号6を有する係数位置)は、他のフィルタ係数から推定/導出される。7番目の係数の値は、固定小数点演算(w
i=インデックスiのフィルタ係数)で評価される値、1-2.Σ
i<6w
iに等しい。すなわち、係数位置0~5に対する全てのフィルタ係数の和を、1から2倍(対称性のため)引いたものに等しい。したがって、7番目の係数を含む菱形のすべての係数の合計は、左側7ビットシフトが適用される1である(1<<7)。ここで、7は符号化されたフィルター係数のビット精度から固定小数点演算のための1を引いたものである。これが、"フィルタ係数の総数から1を引いたもの"の半分だけが、ビットストリーム内で符号化されるフィルタ係数の数である理由である。
【0051】
ALFがアクティブである(すなわち、適用される)各クロマ成分サンプルについて、ステップ304におけるフィルタリングは、出力画像部分305を得るために以下のように実行される。入力画像部分の現在のサンプルごとに、
- 現在のサンプルがCTUに属し、ALFがイネーブルされている場合、および(現在のサンプルがダイヤモンド形状の中心に配置されている)クロマフィルタのダイヤモンド形状における係数位置のためのフィルタ係数を得るために必要な現在のサンプルの隣接するサンプルが利用可能である場合(例えば、画像の境界上の境界拡張を使用して、またはスライスの境界上で利用可能である場合には隣接するスライスサンプルを使用して)、位置(x,y)における現在のサンプルI(x、y)と同じ位置における出力フィルタリングされたサンプルは、
に等しい。
ここで、iとjはフィルタ形状(すなわち、現在のサンプルの位置(x,y))の中心に対する2つの整数オフセット(水平および垂直)である。w(i,j)はオフセット(i,j)におけるフィルタ係数である。N=7は、オフセット(i,j)におけるフィルタ係数w(i,j)の表現において使用される実数(固定小数点表現)の小数部の整数近似のためのビット数である。I(x+i、y+j)は現在のサンプル位置(x、y)に対するオフセット(i,j)における入力サンプル値である。O(x,y)は、位置(x、y)に対する出力フィルタリングされたサンプル値である。a<<Nは、Nビット左へのビットシフトを、整数値aに適用されることを示す。これは、整数を2のN乗倍することと等価である。a>>Nは、Nビット右へのビットシフトを、整数値aに適用されることを示す。ここで、式(1)の括弧内の和の結果はほとんどの場合正であるため、Nのべき乗を2で整数除算することと等価である。負の数については、負の数が負(少なくとも-1)のままとなるように右シフトすると符号が伝播する。ALFの出力は一般に、0から2のビットの付加さの累乗から1を引いた値の間でクリップされるので、非整数部分はない。N=7は、ALF演算のためにVVCに固定された小数精度を提供するが、他の実施形態では他の値を使用することができる。右シフト>>Nを実行する前の加算(1<<(N-1))の効果は、スカラー積の固定小数点結果の丸めである。
- そうでなければ、現在のサンプル値をそれと同じ位置で(すなわち、このALFを適用せずに)出力する。
【0052】
本実施形態の変形例によれば、フィルタを実装しながら行われる乗算演算の回数を減らし、表記を簡略化するために、中心に関して対称なフィルタ形状を有するALFフィルタについて、式(1)を次のように再定式化することができる。
ここで、O
nは、ラスタ走査順序インデックス/位置nにおける出力サンプルである。ラスタ走査順序インデックスnによって、我々は、サンプルインデックスはサンプルの行において左から右に増加し、次いで、上から下に増加することを意味する。I
n
cは、出力サンプルと同じ位置における入力サンプルである(かつ、フィルタの中心における入力サンプルの位置に対応する)。I
n
i-は、n未満のラスタスキャン順における、フィルタのフィルタ形状/パターン/マスク/サポートにおけるI
n
cの第i番目(ラスタ走査順序において)の隣接入力サンプルである。I
n
i+は、I
n
cのフィルタの中心位置の周りのI
n
i-鏡像空間位置における隣接入力サンプルである。従って、中心に関して対称である形状は、I
n
i-がフィルタの形状/パターン/マスク/サポート内にあるとき、I
n
i+はフィルタの同じフィルタ形状/パターン/マスク/サポート内にあることを意味する。w
iは、隣接する入力サンプルI
n
i-及びI
n
i+に関連するフィルタ係数である。w
cは、中心入力サンプルI
n
cに対するフィルタ係数であり、cは符号化されたフィルタ係数の数である(これは、その隣接するフィルタ係数から評価できるので符号化されない中心フィルタ係数に対するインデックス値と同じである)。値i及び関連する位置I
n
i-、I
n
i+は、
図3-bのフィルタ形状306における、インデックス値及び上付き符号(“+”又は“-”)付きインデックス値に対応し、例えば、フィルタ形状の中心のフィルタ係数のインデックスcは、i=c=“6”である。
【0053】
図4-aは本発明の一実施形態によるルマ成分をフィルタリングするためのステップを示すフローチャートであり、
図4-bは、本発明の一実施形態によるルマフィルタのフィルタ形状、および、4つの可能な係数配列を提供する。
【0054】
図4-aは、ルマ成分のフィルタリングプロセスの主要なステップを示す。入力画像部分401は、フィルタリングされるルマサンプルを含む。入力フィルタリングパラメータ402は、
図2のALFシンタックス要素を参照して説明されたALFパラメータ(例えば、“ALF係数デルタフラグ”、“coeffデルタ予測モードフラグ”、フィルタ係数、またはALFのための任意の他のフラグまたはフィルタパラメータ)を含む。フィルタリングの前に、画像部分の内容が403で分析される。この解析の主な目的は、局所的なコンテンツの向きおよびアクティビティのレベルの決定を許可/可能にすることである(ステップ405参照)。これは、コンテンツが均質であるか、又は何らかの鋭い変化(おおよそコンテンツの強度又はコントラスト)を有するか、及びコンテンツが(例えば、エッジ又は配向されたテクスチャに基づいて)支配的な配向を有するか、及びその支配的な配向がどの配向であるかのローカル推定/評価を許可/可能にする。例えば、VTM-3.0において、この分析は、水平および垂直(すなわち、サンプルの4分の1)の2つのサンプル毎に4つの方向(水平、垂直、および2つの対角線)について計算されたラプラシアン値を使用する局所勾配分析を含む。入力画像部分のサンプルをブロック404(例えば、VTM-3.0における4×4サンプル)に分割し、分析の結果を使用することによって、ステップ405において、各ブロックは25の可能なクラスのうちの1つに分類され、各クラスはブロック内のサンプルについて計算されたラプラシアン値に従って、インデックスを使用して識別可能である(すなわち、ブロックは25のカテゴリ/分類/グループのうちの1つに分類される)。例えば、VTM-3.0では、それは16のラプラシアン値(4つのサンプル上の4つの向き)を使用することに対応する。この分類は指向性の強さのアクティビティの分割を達成し、斜め方向から水平方向と垂直方向を解離する。また、ステップ405において、各ブロックは転置インデックスに関連付けられる。この転置インデックス(例えば、“transposeIdx”)は、コンテンツの向きを完全に表す/示すために、分類に対する相補的/追加的な情報として見ることができる。4つの可能な転置インデックスがある。ブロックのクラスが、そのブロックが水平または垂直のいずれかであることを示す場合、転置インデックスは、更に、向きが北から南、東から西、西から東、または南から北であるかどうかを示す。ブロックのクラスが、そのブロックが対角線であることを示す場合、転置インデックスは、更に、向きが北西から南東、北東から南西、南西から北東、または南東から北西のいずれであるかをさらに示す。
【0055】
クラスインデックスおよび転置インデックスは、所与のサンプルのブロックに対するアダプティブループフィルタパラメータとして見ることができる。ステップ406では、これらのパラメータを用いて、ブロックのサンプルの各々をフィルタリングするために使用されるルマフィルタを導出する。
図2を参照して前述したように、402において、各クラスは、ルマフィルタの係数テーブルのインデックスに関連付けられる。4×4ブロックのルマフィルタを導出するために、転置インデックスは、
図4-bに示される4つの形状/パターン409、410、411、または412のうちの1つを選択することを許容/可能にする。パターンは(例えば、スキャン(ning)順序に基づいて)符号化されたフィルタ係数をどのように編成してルマフィルタを構築するかを示し、これは、204~206についての説明で説明したように、ブロックのクラスに関連付けられる。ルマフィルタには、サイズ7×7 のダイヤモンド形状がある。各ルマフィルタに対して12個の符号化されたフィルタ係数(インデックス番号0~11)がある。フィルタ形の中心に対する13番目の係数(指数12)は、上述のクロマフィルタの中心係数に対するのと同じ方法で、他のフィルタ係数から推定/導出される。
【0056】
出力画像部分408を得るためのステップ407におけるフィルタリングは、フィルタリングがクロマフィルタによって実行されたのと同じ方法で、すなわちサンプルの各現在のブロックに対して実行されたのと同じ方法で実行され、現在のブロックに対して406において導出され/取得されたルマフィルタは現在のブロックの各現在のサンプルに適用される。
【0057】
ルマサンプルをフィルタリングするとき、向きベース分類(クラス)および関連する転置(transposeIdx)のために、各クラスについて最適なALFフィルタ(すなわち、局所的な向き、例えば、局所的な勾配に基づいて選択される“向きベースフィルタフィルタ(orientation based filters)”、特に高い活動(例えば、高い局所的な勾配)を有するものは、向きフィルタになる傾向がある。最も低いアクティビティを有する領域、すなわち、局所勾配が比較的小さいクラスに属するブロックを有する領域では、そのような向きはあまり顕著ではなく、そのようなブロックに対する向きベースフィルタは向きフィルタではない傾向がある。
【0058】
向きベースフィルタは、エッジのシャープさにあまり影響を与えずに、エッジ周辺をフィルタリングするのに適している。以下に説明するように、クラスは、フィルタのシグナリングコストを低減するために一緒にグループ化することができる。クラスのこのグループ化を用いても、フィルタ最適化は一般に、方向付けられたフィルタを得ることにつながる。このような向きベース(ALF)フィルタでは、局所勾配が水平方向に沿っている場合、フィルタの向きは一般に垂直である(すなわち、最も高い係数(絶対値で)は一般に、中央の上下の位置にあり、一方、左側及び中央の右側の係数は一般に、ゼロに近くなる)。同様に、局所勾配が垂直方向に沿っている場合、フィルタの向きは一般に水平であり、局所勾配が、斜め方向に沿っている場合、フィルタの向きは一般に、局所勾配のその斜め方向に垂直である方向に沿っている。
【0059】
VTM-3.0においてクロマサンプルをフィルタリングするとき、ルマサンプルフィルタリングとは対照的に、分類が使用されない(およびクロマはしばしば滑らかである)ので、使用されるフィルタは一般に、すべての方向に対してより応答性があり、向きフィルタではない(または無期ベースフィルタではない)。
【0060】
図3-b及び
図4-bの両方のフィルタ形状は、中心画素に関して対称である。この対称性は、VTMソフトウェアにおけるALFの設計において選択されているが、実施形態の変形形態では非対称形状も使用することができる。次に、13個の入力サンプルについて7個の係数を共有する代わりに、
図3-bと同じフィルタサポート/マスクに対して最大13個の係数を使用することができた。そして、25の入力サンプルについて13の係数を共有する代わりに、
図4-bと同じフィルタサポート/マスクに対して最大25の係数を使用することができた。他の変形例では、フィルサポート/マスクでさえ非対称である。変形例では、フィルタの形状/パターン/サポート/マスクがALFパラメータと共に伝送される。
【0061】
他の変形では、フィルタ形状/パターン/サポート/マスクが、ダイヤモンド形状とは異なる。例えば、変形例では正方形であり、別の変形例では長方形であり、さらに別の変形例では六角形であり、別の変形例では八角形である。
【0062】
いくつかの変形例では、フィルタ形状/パターン/サポート/マスクが全てのクラス向きについて同じではない。一変形形態では、形状が水平クラス/transposeIdx向き構成のための水平矩形(例えば“-”)、垂直クラス/transposeIdx向き構成のための垂直矩形(例えば“|”)、NW-SEおよびSE-NWクラス/transposeIdx向き構成のための北-西 南-東(NW-SE、例えば“\”)矩形、NE-SWおよびSW-NEクラス/transposeIdx向き構成のための北-東 南-西(NE-SW、例えば「/」)矩形である。他の変形形態ではフィルタ形状/パターン/サポート/マスクが水平-垂直に十字(“+”)、対角十字(“X”)、垂直セグメント(“|”), 水平セグメント(“-”)、左上から右下への対角セグメント(“\”)、右上から左下への対角セグメント(“/”)、または前述のフィルタ形状/パターン/サポート/マスクの任意の組合せである。
【0063】
図6は、ALFにおける線形フィルタのブロック図を提供する。これは、フィルタリングが式(1)に機能的に対応し、“C”601が現在のサンプルのサンプル値に対応するI(x,y)であり、“S0”602から“Sn”603は、それぞれ隣接するサンプル値I(x+i,y+j)に対応し、ここで(i,j)≠(0,0)である。“wC”604は現在のサンプルのフィルタ係数のw(0,0)に対応し、“w0”605から“wn”606は、それぞれ位置(x+i,y+j)における隣接するサンプルのフィルタ係数のw(i,j)に対応し、ここで(i,j)≠(0,0である。“O”607はALFフィルタの出力であるO(x,y)、すなわち、現在のサンプルのフィルタリングされたサンプル値である。このプロセスは入力として、整数入力サンプル値(すなわち“C”および“S0”~“Sn”)のテーブルと、入力重みのテーブル、すなわち、固定小数点精度を有する実数の整数表現の“wC”および“w0”~“wn”(またはフィルタ係数)とを取る。このテーブルは、固定小数点精度を有する実数の整数表現で、整数入力サンプル値のテーブルと同じ数の要素を有することに留意されたい。2つのテーブルは、同じ数の要素を有し、要素ごとに乗算され、これらの乗算の結果はともに合計される(すなわち、これらの2つのテーブルの要素の線形結合が得られる)。この演算の結果は、実数の固定小数点精度近似である。この固定小数点値は整数値に丸められ、結果は1つの出力サンプル値“O”になる。
【0064】
エンコーダの観点から、ALFは、ウィナーフィルタ(Wiener Filter)によってインスパイアされる。ウィナーフィルタは線形フィルタ(しばしば信号/画像処理における線形畳み込みフィルタとして適用される)であり、それは、1)有限数の観測されたプロセス/変数(その入力)の線形結合である推定されたランダムプロセス/変数(その出力),2)所望のプロセス/変数(その目標、すなわちアーチファクトが発生する前の元の画像)、との間の平均二乗誤差を最小化する。信号/画像処理において、有限インパルス応答(FIR)ウィナーフィルタは、例えば、ソース分離または雑音除去における応用を有する。画像符号化の場合、対象は元の画像(圧縮/量子化によって変更される前)であり、入力は圧縮画像からのサンプルであり、フィルタを適用することによって改善したい。
【0065】
X(これは観察されたランダムプロセスの実現の入力行列であり、各列はランダムプロセスの各1つに対して1つの実現(realization)を含む)と、y(これは観察されたランダムプロセスに対する所望のプロセスの実現を同じ列インデックスで含む出力行ベクトルである)の最小二乗解は、
である。
ここで、ウィナーフィルタ係数は^Wに対応する。
【0066】
なお、“実現”は、ランダム変数の観測または観測値、すなわち、実際に観測される値であることが理解される。
【0067】
VTM-3.0 ALFエンコーダでは、FIRウィナーフィルタ(または機能的に均等の最小二乗解決策)が使用され、ALFパラメータの符号化コスト(FIRフィルタ係数を符号化するためのコストによって主に支配される)と、符号化されたALFパラメータ(FIRフィルタ)を使用して画像をフィルタリングすることによって得られる歪みゲインとの間の、レート/歪み(R/D)の妥協点を最適化する。ALFパラメータを符号化するためのレート(すなわち、符号化コスト)を懸念しない場合、そして与えられたフレームのピーク信号対ノイズ比(PSNR)を最大化することが唯一の目標とする場合(時間的影響を考慮しない場合)、ウィナーフィルタは、VTM-3.0におけるALFフィルタリング設計のための最適解を達成することを可能にするのであろう。したがって、本発明の一実施形態によるALFエンコーダは、それと共に提供される線形ALFフィルタと同じまたは類似のフィルタを使用することができる。
【0068】
図9は本発明の一実施形態によるALF符号化プロセスを示すフローチャートを示し、実施形態は
図6を参照して記載されたVTM-3.0のALFを修正することによって実施される。本発明の他の実施形態によれば、他のALFは、前記他の実施形態を実施するために同じ方法で修正され得ることが理解される。
【0069】
ALF符号化プロセスは、901のルマサンプルの各4×4ブロックに対するクラスインデックスおよび転置インデックスを決定することによって開始する。
【0070】
次に、902において、ウィーナーフィルタを導出するために使用される統計が抽出/取得される。これらの統計量は、式(3)におけるXXTに対応する(自己(auto-)共分散統計量(covariance statistics)と、式(3)のXyT式に対応する相互共分散統計量(cross-covariance statistics)である。これらは、XXT及びXyTそれぞれをN(Xの列数、すなわち、フィルタへのサンプル数)で割ることで、(自己)共分散行列および相互共分散行列を構築/取得/推定するために使用される。これら(自己)共分散行列および相互共分散行列は、各クラス、ルマ成分サンプルの各CTU、および、各クロマ成分サンプル902の各CTUについて、構築/取得/推定される902。以下の説明では、用語“(相互)共分散行列統計”および“(相互)共分散行列”は、同じことを指すために互換的に使用される。これら2つの間の差は、“(相互)共分散行列統計”が値を累算(または合計)することによって得られるのに対し、“(相互)共分散行列”も値を累算(または合計)することによって得られるものの、その後、累算の数によって正規化される(期待値を推定するため)点であると理解される。
【0071】
所与のCTU/クラス/成分に対して、Xは以下のように得られる。フィルタの形状は対称であると考えられるので、Xにおける行の数は、フィルタのフィルタ係数の数に対応する。Xの1つの行(最後の行)は、フィルタ形状における中心サンプルの実現(フィルタ形状の中心は所与のCTU/クラス/成分に属する)を含み、一方、インデックスiを有する他の行は、フィルタ形状におけるインデックiスを有する2つの対称サンプルの合計(対称サンプルは所与のCTU/クラス/成分に属するフィルタ形状の中心の近傍である)を含む。ルマ成分のサンプルの場合、転置インデックスは
図4-bの異なる形状に従ってフィルタ形状のサンプル位置を転置するためにも使用され、その結果、Xの各行iはインデックスiを有するフィルタの形状に属するサンプルのサンプル統計を含む。例えば、
図4-bの形状については、X
i,jは、i<12においては、形状におけるインデックスiでの(j番目のフィルタされたサンプル)の2つの対称隣接の合計含み、i=12では、j番目のフィルタサンプルを含む。ここで、X
i,jは、マトリックスXの行i、列jの値である。
【0072】
ベクトルyは、すべてのターゲットサンプル値を含む(すなわち、yiは、その圧縮前のソース/オリジナル画像におけるj番目のサンプルの値である)。
【0073】
X行列は、実際には構築/計算されない。代わりにXXTは、XiXi
Tの結果を反復的に合計することで計算される。ここで、Xiは、所与のサンプル位置についてのXの第i番目の列がである。
【0074】
yベクトルは、実際には構築/計算されない。代わりにXyTは、Xiyi
Tの結果を反復的に合計することで計算される。ここで、yiはyの第i番目の要素であり、入力Xiを用いて、第i番目のサンプルをフィルタリングするときのターゲットサンプル値に対応する。
【0075】
VTM‐3.0では、ALFエンコーダはR/Dコストの低減を試みる。このR/Dコストは、レート歪妥協のラグランジュ最適化のD+λRに等しい。ここで、Dはディストーション(二次誤差)で、Rはレートであり、λは主にVTM-3.0 のエンコーダ量子化パラメータ(QP)、スライスタイプ(イントラまたはインター)、圧縮された成分のタイプ(ルマまたはクロマ) に基づいてエンコーダによって決定される。ALFエンコーダは、まず、このラグランジュR/Dコストを最小化することによってALFパラメータの最適化を試みる。
【0076】
ALFがルマ成分のコストを削減する場合、つまり、ALFがアクティブでないときの出力スライスの歪みが、ALFがアクティブなときの歪みとALF パラメーターをシグナルするのに必要なレートのλ倍を加えた値よりも大きい場合、エンコーダはルマ成分のアクティブなALFと判断する。次に、ルマ成分に対してアクティブである場合、クロマ成分に対するALFパラメータを最適化し、それらのクロマ成分をシグナリングするR/Dコストを改善することができるかどうかを調べようとする。これに基づいて、エンコーダは、これらの成分それぞれのALF を有効化/有効化する方が良いかどうかを判断できる。
【0077】
本発明の一実施形態によれば、ALFエンコーダは、そのALFパラメータに対して同じまたは機能的に均等な最適化プロセスを実行する。このような実施形態の変形例によれば、ALFパラメータ最適化プロセスの開始時に、ALFは、すべてのCTUに対してアクティブに設定される903。共分散行列と相互共分散行列を構築するためのスライスレベルでの統計は、ALFがアクティブ/有効な各CTU の統計を集計することによって得られる。1つの行列はそのクラスに属するものとして分類された4×4サンプルブロックのすべてのサンプルについて得られた統計を使用して、ルマ成分についての各クラスについて計算され904,1つの行列はクロマについての2つのクロマ成分の統計を集約(合計)することによって計算される912。
【0078】
ルマのフィルタ最適化処理は、クラスを結合/マージするための25グループのフィルタを検索する、すなわち、25個のフィルタの第1のグループ、24個のフィルタの第2のグループ、そして、1つのフィルタの最後のグループ(フィルタの可能な数ごとに1つのグループ)まで探すことで開始する905。エンコーダは各クラスに対して1 つのフィルタから始まる(そのため、合計で25 個のフィルタ)。これはそのクラスのブロックのサンプルの共分散と相互共分散から計算されるウィナーフィルタである。これは、25個のフィルタの第1のグループである。それは、フィルタを一緒にマージすることによって、すなわち、フィルタの関連するクラスを一緒にマージしてより正確にすることによって、フィルタの数を(1つずつ、そして1つだけが残るまで、全ての所望のグループを得るために)反復的に減少させようと試みる。エンコーダは、最初に2つの異なるフィルタに関連付けられたクラスに共通のフィルタを共用させる(すなわち、エンコーダは、2つのクラスをマージして1つの関連付けられたフィルタを共用する)。どのフィルタをマージすべきか(すなわち、どのクラスをマージすべきか)を決定するために、各フィルタについて共分散および相互共分散統計が決定される。エンコーダは、1つまたは複数のクラス(インデックス)に関連付けられた各フィルタについて、そのクラス(複数可)に関連付けられたサンプルのすべてのブロックに対してフィルタリングを実行するためにフィルタを使用した後に得られた総残差誤差を推定/評価する。次いで、フィルタ(およびそれらの関連するクラス)の各対について、エンコーダは、マージされた共分散および相互共分散統計を計算して、マージされたクラスのウィーナフィルタと、決定されたウィーナフィルタを用いてクラスインデックスに関連するサンプルのすべてのブロックをフィルタリングした後に得られた総残差とを決定する。次に、エンコーダは(2つのフィルタに関連付けられたクラスに関連付けられた統計から導出された)マージされたフィルタの総残差誤差と、(1つのフィルタの総残差誤差を別のフィルタと加算することによる)これら2つのフィルタの総残差誤差の合計との間の差が最小である2つのフィルタを決定し、(このマージされたフィルタが次のフィルタマージ反復の準備ができるように)これら2つのフィルタをマージする。要するに、エンコーダはarg min(Err(a+b)-Err(a)-Err(b))を最小にする一対の2つの異なるフィルタの統計をマージ(a,b)する。ここで、Err(x)は、フィルタ統計xの誤差を返し、a+bは2つのフィルタ統計a,bのマージされた統計である。
【0079】
ここまでは、倍精度浮動小数点値を用いて、統計量、フィルタ、誤差を推定している。ここで、エンコーダは、ルマフィルタを符号化するための最良のR/Dコスト妥協点を見つけようとする906。フィルタ/クラスの25個のグループが決定されると(25個のフィルタから開始して1個のフィルタまで)、各グループについて、ALFエンコーダは、各フィルタについて(整数値符号化および固定小数点精度計算のための)整数フィルタ係数を導出する。次に、異なる代替符号化方式が使用されるときの、R/Dコスト妥協に関して最良のフィルタを探索する。第1の代替は、(exp-)Golomb符号化を使用して、すべてのフィルタのすべての係数を符号化することである。第2の代替はフィルタのデルタ符号化を使用することであり、各フィルタのフィルタ係数は、((exp-)Golomb符号化を使用して)、前のフィルタのフィルタ係数との差として符号化される。第3の代替(R/D最適化)は、1つのフラグを有するいくつかのフィルタをディスエーブルすることを可能にし、ディスエーブルされていないフィルタのすべてのフィルタ係数を((exp-)Golomb符号化を使用して)符号化する。最初の2つの代替はビットレートの低減につながることができ、一方、第3の選択は、より少ないビットレートに対してより多くの歪みにつながることができる。
【0080】
エンコーダは、R/Dコストを最小限に抑えるフィルタグループおよび符号化の妥協をとる/選択する/選択する。
【0081】
使用するルマフィルタがエンコーダによって決定/選択されると、各CTUについて、エンコーダはCTU統計量を使用して、CTUのルマサンプルをフィルタリングするR/Dコストが、同じCTUのルマサンプルをフィルタリングしないR/Dコストよりも良好であるかどうかを調べる。良好でない場合には、そのCTUのルマサンプルに対してALFがディスエーブルされる907。エンコーダはCTU(ALFが有効になっている)の共分散および相互共分散統計に関するスライス統計を更新しながら、ルマのためのルマフィルタ最適化ステップにループバックする904。例えば、VTM-3.0では、エンコーダは更に4回ループバックする。
【0082】
ルマ成分サンプルにALFを適用するか否かの間のR/Dコスト差に応じて、エンコーダは、908にて、ALFがルマ成分に対してアクティブ/イネーブルされるべきか否かを決定する。
【0083】
ALFがLuma成分に対してアクティブ/イネーブルされることになった場合、エンコーダは、910において、クロマ成分の処理に進む。また、ALFがルマ成分に対して非アクティブ/ディスエーブルされることになった場合、911において、ALFはアクティブ/ディスエーブルされていないとしてシグナリングされ、ALF符号化プロセスは終了する。
【0084】
クロマ成分のALF符号化プロセスは、ALFがスライスのすべてのCTUに対してアクティブ/イネーブルであるという条件で、2つのクロマ成分の統計を組み合わせることから開始する912。
【0085】
次に、エンコーダはクロマフィルタを決定する913。エンコーダは、まず両方のクロマ成分のCTU 統計を使用して(浮動小数点)ウィナーフィルタを決定する。それは整数フィルタ係数を導出する。次に、各クロマ成分について、エンコーダはCTU統計を使用して、CTUのクロマ成分をフィルタリングするR/Dコストが、CTUのクロマ成分をフィルタリングしないR/Dコストよりも優れているかどうかを確認する。良好でない場合、ALFは、そのCTUのクロマ成分サンプルに対してディスエーブルされる914。またエンコーダが所与のクロマ成分のすべてのCTUについてALFをアクティブにすべきでない(すなわち、ディスエーブルにすべきである)と判定した場合、エンコーダはそのクロマ成分上のALFをディスエーブルにし、したがって、各CTUについて、0である「イネーブルフラグ」を符号化する必要はない915。
【0086】
エンコーダはその後、916にて、CTU(ALFが有効である)に対するクロマ成分の共分散および相互共分散統計に関するスライス統計を更新しながら、クロマフィルタ最適化ステップにループバックすることができる。例えば、VTM-3.0では、エンコーダはさらに2回ループバックする。
【0087】
次いで、エンコーダは、917にて、決定されたALFパラメータを用いて(すなわち、ステップ913からの決定されたクロマフィルタを用いて)、本発明の実施形態によるALFを適用する。エンコーダ構成に応じて、結果として得られる画像は出力され、かつ/または参照フレームバッファに置かれる。エンコーダは最後に、最良のR/Dコストパラメータ、すなわちALFイネーブルフラグを符号化し、ALFイネーブルフラグがアクティブ/イネーブルを示す場合、決定されたALFパラメータを符号化する918。
【0088】
変形例によれば、他のALFパラメータの最適化プロセスを実行して、ALFのこれらのパラメータを最適化することができることを理解されたい。
【0089】
非線形フィルタリング機能を持つALF
ステップ304および407で使用される線形フィルタリングは、非線形性を導入し、フィルタリング結果を改善する(フィルタリング品質と符号化効率との間のより良い妥協を得る)本発明の実施形態に従って修正することができる。ALFフィルタリングの目標は、符号化ツール(例えば、量子化ノイズ/エラー)によって導入されたいくつかの“ノイズ”を除去することである。このようなノイズを除去するために、信号を平滑化し、小さな局所変動を低減するために、ローパス線形フィルタがしばしば使用される。このような種類のフィルタは、フィルタリングされた出力、特にコントラストが強い領域、例えばエッジ付近にぼけを導入する可能性がある。例えば、バイラテラルフィルタのような非線形フィルタは、より効率的なノイズ除去を可能にするために開発されており、一方、エッジの周囲であっても、より少ないぼけまたはリンギング効果を導入する。そうするために、これらの非線形フィルタは、しばしば、線形フィルタのような、その局所近傍(すなわち、隣接サンプル)に基づくサンプルのフィルタリングに依存するが、非常に異なる値を有するサンプルよりも、フィルタリングされるサンプルに類似した値を有するサンプルにより多くの注意(または重み)を払う。近傍値の重み付けは、非線形関数(すなわち、非線形マッピング)を使用して実行されることが多い。これらの種類の非線形フィルタは線形フィルタよりも複雑であることが多く、それらのパラメータを最適化することは困難であることがあり、および/または、新しいALFデザインにおいてこのような種類のフィルタを使用したい場合には線形フィルタよりも柔軟性が低いことがある。
【0090】
本発明の一実施形態によれば、VTM-3.0(または前述の実施形態またはその変形のいずれか)のALFは、ALFの並列化可能な設計を保持する動作を含む比較的低い複雑度で非線形性を導入することによって修正される。
【0091】
VTM-3.0のALFを見ると、実数を用いて式(1)を再定式化して式を単純化することによって、我々は、
(固定小数点表現と整数丸めに関連する演算を除去する)を得る。
このALFにおいて、条件:
が満たされる。これは、ALF のすべてのフィルタ係数の合計が1 であることを意味する。次に、式(4)を次のように再定式化することができることが分かる。
次に、出力サンプルO(x,y)は、入力サンプルI(x, y)(同じ位置)を、フィルタ係数ベクトルとローカル勾配ベクトル(入力サンプルの隣接サンプルと入力サンプル自体との間の差として計算されたローカル勾配のベクトル)との間のスカラー積に加算した結果である。言い換えれば、出力サンプル(すなわち、フィルタリングされたサンプル値)は、入力サンプルをフィルタ係数と局所勾配との線形結合に加算した結果である。
【0092】
本発明の一実施形態によれば、フィルタのためにこの通常の線形公式を使用する代わりに、ALFフィルタリング処理は、ALFフィルタに非線形性を導入するように修正される。この非線形性は、オフセット(i,j)における局所勾配dを第1のパラメータとしてとり、その値が第2のパラメータb=k(i,j)に応じて変化する多変量関数K(d、b)を使用して達成される。式(6)におけるスカラー積におけるオフセット(i.j)に対する局所勾配を使用する代わりに、K(d,b)がスカラープ積において使用され、その結果、局所勾配と共に非線形に変化する出力サンプルO(x,y)が得られる。
ここで、K(d,b)は、その第1のパラメータ/変数d=I(x+i.y+j)-I(x,y)(位置(x+i,y+j)における隣接サンプル値と位置(x、y)における現在サンプル値との間の差として計算されたオフセット(i,j)における局所勾配)として、および、その第2のパラメータ/変数b=k(i,j)(追加のフィルタリングパラメータ)としてとる関数である。追加のフィルタパラメータk(i,j)は、w(i,j)と同時に決定される。一実施形態では、k(i,j)及びw(i,j)の値は、(例えば、歪みを最小限に抑えるために)フィルタリングおよび信号処理を最適化するように決定される。この最適化プロセスは、ALF を使用しているエンコーダによって実行される。このような最適化プロセスの例については後述する。
【0093】
したがって、本発明の実施形態によれば、入力サンプル値は、入力サンプル自体と、入力サンプルの近傍である入力サンプルの適応非線形変換との線形結合を使用することによってフィルタリングされる。適応非線形変換は、フィルタリングされる入力サンプルの位置と関連して、近傍の入力サンプルの相対位置に依存する。
【0094】
このような修正ALFでは、実在するb、ゼロに等しくない現存するαという条件を満たす特定のKについて、例えばK(d,b)が、全てのdについて、dで乗算したαに等しいくなるように、線形フィルタリングを実現することができる。
【0095】
したがって、bのいくつかの値(すなわち、関数K(d,b)が条件(8)を満たす)について線形関数(すなわち、線形マッピング)のように振る舞う関数K(d,b)を選択することによって、実施形態の修正ALFフィルタリング処理が、標準線形ALFを使用するのと少なくとも同程度に効率的であることが保証される(すなわち、最悪の場合、修正ALFは、VTM-3.0のALFと同じレベルの効率を達成することができる)。例えば、クリッピング関数が使用される場合、パラメータbは線形関数として動作するように、最大可能整数値に設定することができる(理想的には無限大に設定されるべきであるが、制限整数精度スキームにおける最大可能整数値を使用して同じ効果を達成することができる)。
【0096】
本発明のいくつかの実施形態では、ALFフィルタリングは代替の公式/フィルタリング公式を使用することに留意されたい。局所勾配および追加のパラメータ/変数をとる多変量関数K(d、b)は、隣接するサンプル値、フィルタリングされるサンプル値、および追加のパラメータ/変数の3つのパラメータ/変数をとる別の多変量関数によって置き換えられる。式(4)と同様の表記を用い、条件(5)を満たしながら、式(7)を用いて再定式化する
ここで、K'(n,c,b)は、そのパラメータ/変数として、隣接するサンプル値(n)、フィルタリングされる現在のサンプル値(c)、および、追加のフィルタリングパラメータ/変数(b)をとる関数である。
【0097】
本発明の一実施形態によれば、クロマ成分(304)およびルマ成分(407)の両方に対するフィルタリングステップは(式(1)を参照して説明したように)整数算術を使用して実施される非線形公式(好ましくは式(7)を使用するが、代わりに式(9)を使用する)でこのフィルタリングを使用するように修正される。
【0098】
代替実施形態によれば、任意の選択が複雑さに基づく、例えば、2つのフィルタリングステップ(304)または(407)のうちの1つのみが、非線形定式化と共にフィルタを使用するように修正される。
【0099】
いくつかの実施形態によれば、パラメータ/変数b=k(i,j)は2つ以上の次元を有し、例えば、K(d、b=(Sb,Db))=f(d、Sb,Db)は以下を用いることができる。
ここで、S
b及びD
b値は、(i,j)によって変化する。
2つ以上の次元を有するパラメータ/変数/機能を使用することは、フィルタリングを改善することをしばしば可能にするが、フィルタパラメータをシグナリングするためにより高いコストとなる。さらに、それは、エンコーダにおいてより高い次元空間でフィルタパラメータを最適化するときに、より複雑さを招き、しばしば、デコーダにおいて機能を計算することはより複雑である(より多くのフィルタパラメータはしばしば、それらを使用するより多くの演算を意味する)。一実施形態では、bは単一の次元を有し、多くのALFアプリケーションに対して良好な妥協を達成することができる。
【0100】
いくつかの実施形態によれば、関数Kは、異なるオフセット(i.j)のための2つ以上の異なる関数を含む関数であってもよい。いくつかの実施形態では、フィルタ形状/パターン内の関数の構成/配置は、エンコーダおよびデコーダの両方で事前定義される。あるいは、関数の構成が事前定義された構成セットの中から選ぶ/選択され、選択された構成を示すインデックスが送信/シグナリングされる。他の実施形態では、関数がフィルタ形状/パターン内の各係数インデックス(中心位置を除く)についての所定の関数セットの中から選択され、そのインデックスが送信/シグナリングされる。そのような実施形態の変形では、各関数は単一の変数関数であり(すなわち、K関数もはや追加のパラメータ/変数bを有さない)、したがって、bパラメータをシグナリングする代わりに、関数インデックスがシグナリングされる。このような変形では、多変量公式、例えばK(d、b)=Kb(d)公式を使用するものと考えることができる。たとえば、bは関数セットの中から単一の変数関数Kbを選択するための整数インデックスである。
【0101】
いくつかの実施形態によれば、関数Kは、ルマフィルタとクロマフィルタとでは同じではない。いくつかの実施形態によれば、関数Kは、各ルマフィルタについて同じではない。これらの実施形態のいくつかでは、各フィルタについて、選択された関数のインデックスがスライスヘッダに提供される。
【0102】
本発明の一実施形態によれば、Kは計算が簡単になるように(過度の復号化の複雑さを導入しないように)選択される。例えば、そのような実施形態では、Kは単にクリッピング関数:
K(d,b)=max(-b,min(-b,d)). (11)
である。または同等に
K(d,b)=min(b,max(-b,d)). (12)
である。
以下に説明する代替関数のいくつかとは対照的に、クリッピング関数は局所勾配の高い値に対して消失しない(換言すれば、クリッピング関数f(x)は、xが不等性に近づくにつれてゼロに向かって収束しない)。しかし、このような単純な関数を使用した圧縮結果は、より複雑な関数を使用した場合と同じくらい効率的であり、より良好でさえあり得ることが実験的に観察されている。実際、クリッピング関数は局所勾配の高い値に対して消失するのではなく、単にそれらをクリッピングするだけで、鋭いエッジ遷移を考慮し続けることを可能にし、一方、その鋭いエッジ遷移領域の周りに存在する高い分散の影響を制限することができる。アーチファクトは鋭い遷移の周りにより強く発生するので、これは興味深い。
式(9)のフィルタリング公式を用いたこのクリッピング関数Kの等価関数K’は、
K’(n,c,b)=max(c-b,min(c+b,n)). (13)
である。または、同等に、
K’(n,c,b)=min(c+b,max(c-b,n)).
である。
クリッピング関数は、bが最大可能サンプル値(例えば、画像ビット深度の2乗)以上になるとすぐに、式(8)を満たす。
【0103】
以下の説明では、“クリッピングレンジ”または“クリッピングパラメータ”は、K又はK’のパラメータ/変数を参照するために使用されている。このような表現は、非線形関数パラメータを参照するための一般的な表現であると考えることができることが理解される。同様に、“クリッピング”または“クリッピング関数”は、上記またはその機能的に同等の関数K又はK’を参照または説明するために使用されてもよい。
【0104】
別の実施形態では、Kは別の非線形関数であってもよい。変形例では、Kは反対称関数であり、例えば、
に対応する1つのこぎり歯期間、又は、
であるときの式(10)の特定のケースに対応するいくつかの三角形期間であり、又は例えば、双方向フィルタ:
と同様の方法でガウスカーネルを使用することもできる。例えば、Kは上記のバリアントの反対称関数のように、ある閾値より上(または下)にゼロに設定される任意の関数であってもよい。
【0105】
一実施形態によれば、ALFフィルタリングを実行するために必要とされるサンプルラインバッファの数を低減する(すなわち、例えばデコーダにおいてフィルタリングを実行するときに、メモリ内で処理/アクセス/保持される必要がある入力画像成分のサンプル数を低減する)ため、非線形ALFが線形ALFの代わりに使用される。
【0106】
一変形によれば、トレードオフ/妥協として、ルマフィルタのためのフィルタ形状/パターンのサイズは、7×7ダイヤモンド形状からより小さなフィルタ形状/パターンに低減される。たとえば、ルマフィルタについて(
図3-b の「クロマ」フィルタと同じ形状であるが、以前としてトランスポーズインデックスバリアントを使用する)の5×5のダイヤモンド形状が使用される。これは依然として、7×7ダイヤモンド形状のルマフィルタ(例えば、
図4-bに示されるもの)を有する線形のみのALFと同様の符号化利得を達成することができるが、処理/アクセス/格納するためのサンプルの数が低減され(例えば、サンプルラインバッファの数が低減される)、また、演算の複雑さが低減され、すなわち、良好な符号化利得を達成しながら、ALFフィルタを処理するために必要とされる乗算の数が各フィルタリングされた入力サンプル当たり6だけ低減される。
【0107】
変形例によれば、サンプルに対してALFフィルタリングを実行するとき、非線形ALFが、線形ALFのために使用されたものであろうすべての隣接サンプルに基づいて使用される。別の変形例によれば、サンプルに対してALFフィルタリングを実行するとき、線形ALFと共に使用されたものであろう隣接サンプルのいくつかのみが非線形ALFと共に使用され、残りの隣接サンプルは線形ALFと共に使用される。さらに別の変形例によれば、サンプルに対してALFフィルタリングを実行するとき、線形ALFと共に使用されたものであろう隣接サンプルのいくつかのみが非線形ALFと共に使用され、隣接サンプルの残りも線形ALFと共に使用されない。
【0108】
変形例によれば、これらのフィルタ形状/パターンの対称性を利用することによって、線形および/または非線形ALFフィルタの実施を単純化するために式(2)と同じ表記を使用して、式(4)の線形関数を次のように再定式化することができる。
上記は、ALFの場合には以下の条件を満たす。
式(6)の線形関数は、次のように再定式化することもできる。
また、式(7)の非線形関数は次のようになる。
ここで、K
iは、フィルタ係数w
iに関連するフィルタクリッピングパラメータである。
【0109】
最後に、式(9)の非線形関数は次のように再定式化できる。
この実施形態の変形例によれば、K’関数またはK関数はクリッピング関数である。
【0110】
一実施形態によれば、式(17)の関数Kを処理するための演算回数と比較して、非線形関数の処理に含まれる演算回数を減らすため、代わりに少なくとも2つの隣接差分の和に非線形性が導入される(すなわち、その変数として2つ以上の局所勾配の和を持つ非線形関数が使用されてもよい):
式(19)は、必ずしも式(17)と等価ではなく、式(19)を用いたフィルタは効率が悪くなり得るが、計算量は減少する。変形例によれば、シグナリング/符号化されたクリッピングパラメータ/値の数は、例えばKがクリッピング関数である場合、式(17)の数と変わらない。
【0111】
複雑さが低減された方程式(18)に基づく同様に導出される方程式は、2つ以上の隣接差分値(局所勾配)の和を変数として有する関数K’を用いて、別の変形例に従って使用することができることが理解される。
【0112】
図7は、本発明の一実施形態による非線形フィルタのブロック図を提供する。このブロック図は、VTM-3.0内のALF内の線形フィルタの置換であり得る(またはALF内の線形フィルタに加えた、付加的な非線形フィルタであり得る)。これは、式(11)のクリッピング関数を使用して、整数固定小数点算術を用いて式(7)を実施することに対応する。“C”701はI(x,Y)に対応し、“S0”702から“Sn”703は、(i,j)≠(0,0)における、I(x+i,y+j)に対応する。“k0”704から“kn”705は、(i,j)≠(0,0)における、k(i,j)に対応し、“w0”706から“wn”707は、(i,j)≠(0,0)における、w(i,j)に対応し、そして、“O”708はO(x,y)に対応する。
【0113】
図5は本発明の一実施形態による変更されたシンタックス要素の概略を伴うフローチャートであり、前述の及びそれらの関連する実施形態/変形の非線形関数(及びそのパラメータ)を実施するために使用され得るシンタックス要素の例を提供する。この実施形態では、各フィルタに対する式(7)(または(9))’の符号化フィルタ係数が、それ自体のクリッピング範囲に関連付けられ、したがって、k(i,j)はオフセット(i,j)と共に変化する異なる値を有することができる。シンタックス要素の大部分は、VTM-3.0で既に使用され、
図2を参照して説明されたものと同じであり、
図5の501、502、503、504、505、506、507、508、509、510は
図2の201、202、203、204、205、206、207、208、209、210と同じシグナリングおよびセマンティクスを有する。新しいシンタクス要素は、各ルマフィルタ511のクリッピングパラメータ、ルマフィルタ(506)のすべてのフィルタ係数、および、例えばスライスヘッダでシグナリングされ得る各ルマフィルタ(511)のすべてのクリッピングパラメータである。このシグナリングの後に、クロマフィルタのすべてのフィルタ係数(507)およびクロマ・フィルタのすべてのクリッピング・パラメータ(512)のシグナリングが続く。
【0114】
一実施形態によれば、任意のフィルタについて、シグナリングされるクリッピングパラメータの数は、シグナリングされるフィルタ係数の数と同じである。オフセット(i,j)に対するクリッピングパラメータは、同じ位置(x+i,y+j)におけるフィルタ係数に対するのと同じ方法で得られる。クロマについては
図3-aのステップ303のフィルタ係数導出プロセスについて説明したのと同じ方法で(ただし、クロマクリッピングパラメータを用いて)処理され、ルマについては
図4-aのステップ406のフィルタ係数導出プロセスについて説明したのと同じ方法で(ただし、ルマフィルタクリッピングパラメータを用いて)処理される。
【0115】
代替実施形態では、フィルタごとに1つのクリッピングパラメータのみが存在し、このクリッピングパラメータはすべてのフィルタ位置(i.j)≠(0,0)について使用される。
【0116】
代替実施形態では、クリッピングパラメータの数はフィルタ係数の数よりも少ない。この実施形態の変形では、これらのクリッピングパラメータがオフセット(i,j)を有するフィルタ位置のサブセット(事前定義または決定されてもよい)に使用される。他のフィルタ位置については、通常の線形フィルタリングが実行される(すなわち、換言すれば、これらの他のフィルタ位置において、Kは同一性関数であるとみなされる)か、または代替的に、事前定義されたクリッピングパラメータ値が使用される。
【0117】
このような実施形態の変形例を、
図16-aおよび
図16-bを参照して説明する。これらの変形例ではクリッピング関数がフィルタ位置のサブセットに適用され、すなわち、クリッピングパターン/形状/サポート/マスクは、フィルタ形状/パターン内のフィルタ位置のサブセットのみを含み、その結果、フィルタリング処理中に、隣接するサンプル値/位置のサブセットのみがクリッピングされる(例えば、非線形関数はそのサブセットのみからのサンプル値に適用される)。クリッピング操作は、計算的に高価であり得るので、このようにフィルタリングに含まれるクリッピング操作の数を減少させることは、フィルタリングプロセスの複雑さおよび計算コストを減少させ得る。
【0118】
図16-aは、低減された数のクリップ/クリッピング位置を有する7×7ダイヤモンドフィルタ形状を提供し、7×7フィルタ形状、例えば、輝度のためのALFを用いてフィルタリングを実行するときに必要とされるクリッピング動作の数を低減するためのクリップ/クリッピング位置の3つの可能な配置/例を示す。
図16-aに示されるクリッピングパターンを使用することによって、クリッピング動作がすべてのフィルタ(入力)位置に適用されないため、フィルタリングを実行するためのクリッピング動作の数が減少する、すなわち、フィルタ位置のサブセット(事前に定義されてもよいし、シグナリングされてもよいし、推論されてもよい)のみがクリッピング動作に使用される(すなわち、非線形関数と共に使用される)。
図16-aにおいて、クリップされたサンプル位置は、クリッピングパターン1601、1602、および1603において“X”によってマークされる。クリッピングパターン1601、1602はクリッピング回数を3分の2に減らし、クリッピングパターン1603はこの回数を1/2に減らす。これらのクリッピングパターン1601、1602および1603は、7×7ダイヤモンドフィルタ形状を使用する場合、出力の正確さとフィルタ処理に含まれる複雑さとの間の良好な妥協点を打つ。クリッピングパターン1601、1602、および1603は、ALF(すなわち、ローカルコンテンツの向きおよびアクティビティのレベルに基づく分類のために構築されたフィルタ、例えば、VTM3.0におけるルマフィルタ)の向きに基づく非線形ALFに対して良好に機能する。しかし、分類が使用されない場合、パターン1602または1603を使用することが好ましい。
【0119】
他の変形例によれば、より多くの又はより少ないクリップ位置が使用されてもよいことが理解される。例えば、クリッピングパターン1601の代わりに、列全体および行全体(中心位置を除く)をクリッピングしてもよいし(すなわち、中心位置を除いて、上から下および左から右への交差)、クリッピングパターン1602の代わりに、外縁上の位置(すなわち、より大きい菱形/平行四辺形クリッピングパターン)をクリッピングしてもよい。クリップ位置の他の変形例では、クリッピングパターン/形状/支援/マスクが対角線の十字“X”(中心位置を除く)、垂直セグメント“|” (中心位置を除く)、水平セグメント“-”(中心位置を除く)、左上から右下への対角線セグメント“\”(中心位置を除く)、右上から左下への対角線セグメント「/」、または前述のクリッピングパターン/形状/サポート/マスクの任意の組合せを形成する。
【0120】
図16-bは、クリップ/クリッピング位置の数を減らした5×5ダイヤモンドフィルタ形状を提供し、5×5フィルタ形状でフィルタリングを実行するときに必要とされるクリッピング操作の数を減らすための2つのクリップ/クリッピング位置の可能な配置/構成を示す。
図16-aと同様に、
図16-bに示すクリッピングパターン、すなわちクリッピングパターン1604および1605を使用することによって、5×5ダイヤモンドフィルタ形状でフィルタリングする場合に、このフィルタリング処理中に含まれるクリッピング操作の数を減らすことが可能である。クリッピングパターン1604および1605は、ALF(すなわち、ローカルコンテンツの向きおよびアクティビティのレベルに基づく分類のために構築されたフィルタ、例えば、VTM3.0におけるルマフィルタ)の向き基づく、非線形ALFに対して良好に機能する。しかし、分類が使用されない場合、パターン1605を使用することが好ましい。
【0121】
クリッピングパターン1602および1605は、向き(例えば、VTM-3.0における水平方向、垂直方向、または対角線方向の分類に依存するルマフィルタとは対照的に、クロマフィルタにとってより良好である)に基づく分類を使用しないフィルタに対して良好に働く。というのは、水平方向および垂直方向の近傍が、対角線方向の近傍よりも統計的に信頼性が高いため(ユークリッド距離が大きいため)である。したがって、信頼性の低い対角近傍サンプルのフィルタ位置だけにクリッピング操作を使用する方が、より信頼性の高い水平および垂直方向近傍サンプルのフィルタ位置よりも有利である。
【0122】
向きに基づくフィルタ(すなわち、分類に基づく向きに対して得たフィルタ)を使用すると、クリッピング操作は一般に、フィルタの向きに垂直なフィルタ位置でサンプリングに適用される。例えば、1601のクリッピングパターンは、対角方向を有するクラスのフィルタよりも、水平方向または垂直方向を有するクラスのフィルタの方が良好に機能する。クリッピングパターン1602は4つのクラスの向きについてもほぼ同様に機能するが、水平及び垂直の向きについてはパターン1601よりも効率的ではない。したがって、1601および1602におけるクリッピングパターンは、7×7フィルタパターンを使用するルマフィルタに対してほぼ同等に平均して実行され、1604および1605におけるクリッピングパターンは5×5フィルタパターンを使用するルマフィルタに対してほぼ同等に平均して実行される。
【0123】
変形例によれば、向きベースフィルタを改善するために、クリッピングパターンが、フィルタ方位に基づいて予め定義されたパターンから選択される。例えば、クリッピングパターン1601は、水平フィルターまたは垂直フィルター上で使用され、クリッピングパターン1602は対角フィルター上で使用される。さらに別の変形形態では、垂直フィルタのために選択されたクリッピングパターンが水平フィルタのために選択されたクリッピングパターンとは異なり(例えば、それぞれが他方の90°回転されたバージョンである)、2つの対角フィルタ配向のためのクリッピングパターンも異なる(例えば、それぞれが他方の90°回転されたバージョンである)。さらに別の変形例では、クリッピングパターンがサンプル値の各4×4ブロックに対する転置インデックス(tranposeIdx)に従って選択される。
【0124】
変形例によれば、各フィルタに対して1つの所定のクリッピングパターンがある。別の変形例によれば、使用可能な複数(例えば、所定数)のクリッピングパターンがあり、各フィルタインデックスに対して、選択されたクリッピングパターンに対する(クリッピングパターン)インデックスが例えば、APS又はタイルグループヘッダにおいて、ALFパラメータで符号化/シグナリングされる。さらに別の変形例によれば、クリッピングパターンは、ALFパラメータを用いてシグナリングされる。例えば、クリッピングパターンのシグナリングは、フラグのシーケンスを符号化/復号することによって実行されてもよく、フィルタ(パターン)位置インデックス当たり1つのフラグ(例えば、符号化/復号されたフィルタ係数インデックスに等しい)であり、各フラグは、対応するインデックスに対してクリッピングが適用されるべきか、実際に適用されないべきかを示す。あるいはクリッピングパターンのシグナリングが、クリッピング位置インデックス自体を符号化/復号することによって、またはクリッピング位置ではないフィルタ(パターン)位置インデックスを符号化することによって実行されてもよい(好ましくはより少ない数のビットがシグナリングされることを必要とするどちらか)。
【0125】
変形例によれば、クリッピングパターンが使用される(所定であるか否かにかかわらず)場合、クリッピングパラメータは、クリッピング動作が適用されるフィルタ(パターン)位置についてのみシグナリングされる。
【0126】
いくつかの変形例では、単一命令、複数データ(SIMD)並列化実装を中断しないために、クリッピングはすべてのフィルタ位置に適用されるが、クリッピングパラメータが提供されない位置のクリッピングパラメータは線形出力(例えば、変形例では恒等関数の出力)を有するとみなされる。
【0127】
代替実施形態では、1つまたは複数のクリッピングパラメータが共有されるので、クリッピングパラメータの数はフィルタ係数の数よりも少ない。例えば、
図3-bおよび
図4-bのフィルタ形状では、いくつかの係数インデックスが同じクリッピングパラメータを共有することができる。変形例によれば、クリッピングパラメータのインデックスは、(対称性のために)形状サイズの半分から(中心係数位置のクリッピングパラメータがないために)1を引いたものに等しい数の要素を含むテーブルに示される。このテーブルは、クリッピングパラメータインデックスを各フィルタ係数に関連付けることを可能にする。変形例によれば、このテーブルは、コーデックによって固定/プリセットされる。変形例に従って、複数の固定/プリセットテーブルが定義され、テーブルからクリッピングパラメータを識別するためのインデックスが、例えばスライスヘッダ内にシグナリングされる。代替変形例では、このようなテーブルのコンテンツが、たとえばスライスヘッダーでシグナリングされ、すべてのルマフィルタで共有される。
【0128】
一実施形態では、クリッピングパラメータがとることができる値の数が小さくなるように制限される(エンコーダの複雑さ、及びエンコーディングコスト対小さい品質の利点を低減するために)。クリッピングパラメータに許可された値は、整数値インデックスでインデックスされる。好ましくは、増加順または減少順でインデックスが作成される。次に、これらのインデックスは、クリッピングパラメータのテーブルの各要素にマッピングすることができる。次に、クリッピングパラメータ値をシグナリングする代わりに、テーブル内の関連するクリッピングパラメータ値のインデックス(p)がシグナリングされる。テーブル内のフィルタインデックスがpである実施形態では、pの可能な値の数を減らすために中間テーブルを使用する必要はない。関数のテーブル内で利用可能な関数の数を直接減らすことが可能であり、したがって、そのサイズを減らすことが可能である。
【0129】
一実施形態では、クリッピングパラメータ値が2の累乗:2pに制限される。次に、符号化されるものがpとなる。pの最大値は、入力画像のビット深度Bdである(同じ結果を提供するので、より高い値は必要ではない)。代替実施形態では、pの代わりに、符号化されるものはBd-pである。別の実施形態では、pの範囲が、pminとpmax間にあるように制限される。例えば、pmin=3、Pmax=Bd-1である。その後、p-pmin又はpmax-pがシグナリングすることができる。
【0130】
一実施形態では、クロマフィルタの許可/許容/利用可能なクリッピングパラメータ値は、ルマフィルタの値と同じではない。
【0131】
一実施形態によれば、スライス内のクリッピングパラメータに使用される、テーブルpmin内の最小インデックスおよびテーブルPmax内の最大インデックスはスライスヘッダ内に提供され、その結果、可能なクリッピングパラメータ値の数はそれらをシグナリングするときに制限/制限され得る。一実施形態によれば、pmin及びpmaxは、ルマフィルタおよびクロマフィルタによって共有される。代替の実施形態では、pmin及びpmaxは、ルマについてのみ提供され、クロマインデックスは限定されない。別の代替実施形態では、pmin及びpmaxは、ルマ用およびクロマ用のスライスヘッダに提供される。
【0132】
代替の実施形態によれば、許可されたクリッピングパラメータ値の1つのテーブルが、ルマおよびクロマの両成分についてスライスヘッダ内でシグナリングされるか、あるいは、2つのテーブル、すなわち、1つはルマ、1つはクロマのテーブルについてシグナリングされる。
【0133】
本発明の一実施形態では、クリッピングパラメータ511および512は、スライス・ヘッダ内でシグナリングされない。その代わりに、そのクリッピングパラメータは、フィルタリングされたサンプルに信号を送るために使用された量子化パラメータ(QP)を使用し、フィルタのクラスインデックスに基づいて、エンコーダ/デコーダにて決定される。
【0134】
代替実施形態では、クリッピングパラメータ511および512は、スライスヘッダ内でシグナリングされる。しかし、フィルタリング処理では、それらは直接使用されない。その代わり、フィルタリングされたサンプルに使用された量子化パラメータ(QP) に応じて、クリッピングパラメータがスケーリングされる。
【0135】
一実施形態では、ルマフィルタのクリッピングパラメータは、各フィルタに提供されない。クリッピングパラメータの2 つのテーブルのみが、全てのルマスフィルタで共有され、スライスヘッダ内にシグナリングされる。1つのテーブルは水平/垂直クラス用であり、他のテーブルは対角クラス用である。各クラスのクリッピングパラメータは、
図4-bの係数配列を使用し、クラスのアクティビティのレベルから決定された固定値に応じてクリッピングパラメータをスケーリング(すなわち、乗算)することによって、クラスの向きに従ってこれら2つのテーブルから導出される。スケーリングは、4×4ブロックを分類するときにアクティビティのレベルを考慮に入れる。例えば、高レベルのアクティビティの領域(例えば、エッジの近く)については、低レベルのアクティビティの領域(例えば、均一な領域)と比較した場合に、より高いクリッピング値を使用することができる。
【0136】
一実施形態では、スライス・ヘッダ内の1ビットが、各フィルタの各フィルタクリッピングインデックスに対してクリッピングがイネーブル/ディスエーブルされることをシグナルする。クリッピングパラメータ毎に1つの許容クリッピング値しかない実施形態では、ビットがクリッピングがアクティブであることを示す場合、クリッピング値が使用される(すなわち、クリッピングパラメータ値に対して他の何もシグナリングされない)。あるいは複数のクリッピング値が許可される場合、1つのクリッピングインデックスのビットがそのフィルタクリッピングインデックスについてクリッピングが無効であることを示す場合は、クリッピング値はシグナリングされないが、他の場合、クリッピング値はシグナリングされる。
【0137】
ここで、フィルタクリッピングインデックスは、フィルタ形状におけるフィルタ係数インデックスに関連するクリッピングパラメータのインデックスに対応する。
【0138】
一実施形態では、許容されるクリッピング値は、スライスタイプ(例えば、INTRA、B、又はPとすることができる)に依存する。
【0139】
実施形態の変形例では、許容されるクリッピング値がBまたはPスライスにおけるルマについては{ 6、32、181、1024 }、BまたはP_sliceにおけるクロマについては{ 4、25、161、1024 }、INTRAスライスにおけるルマについては{ 10、102、1024 }、および/またはINTRAスライスにおけるクロマについては{ 4、24、1024 }である。したがって、任意のクリッピングパラメータは、これらのセットのうちの1つに属する値をとることができる(したがって、スライスタイプおよびフィルタリングされた成分に属する)。また、セット内のその値のインデックスは、クリッピングパラメータごとに、フィルタごとにスライスヘッダにエンコードされる。
【0140】
変形例では、許容されるクリッピング値のテーブルは次のように定義される:
ここで、Nはテーブル内のクリッピング値の数(つまりテーブルのサイズ)、M は最大クリッピング値(テーブル内の最後のエントリで、例えばM=2
DまたはM=2
D-1、ここでDはテーブルが定義されている成分のサンプルビット深度である)、そして、“round”は丸め演算子(たとえば、最も近い整数) である。
【0141】
変形例では、許容されるクリッピング値のテーブルは次のように定義される:
ここで、Nはテーブル内のクリッピング値の数(つまりテーブルのサイズ)、Mは最大クリッピング値(テーブル内の最後のエントリ、たとえば、またはDをサンプルビット深度とした場合はM=2
D、又はM=2
D-1)、Aは最小のクリッピング値(テーブル内の最初のエントリ)、“round”は丸め演算子(たとえば、最も近い整数) である。
【0142】
一実施形態では、許容されるクリッピング値は、各フィルタクリッピングインデックスについて同じではない。
【0143】
差分値にクリッピング機能を使用する変形例では、すなわち、式(11)または式(12)の関数Kを隣接サンプル値と中心値との間の差に適用する場合は、最大許容クリッピング値は、クリッピングの出力におけるビット数が低減されるように定義される。これにより、これらの変形例に従ってフィルタリングを実行するハードウェア実装で処理する必要があるビット数を制限できる。このように、これにより、例えば、チップ内の論理ゲート/トランジスタの数を減らすことができる。乗算演算子の入力端におけるビット数を減らすことは、乗算が多くの論理ゲートを必要とするので、特に興味深い。例えば、最大許容クリッピング値を、2のサンプルビット深度から1を引いた累乗から1を引いた値(すなわち、2^(ビット深度-1)-1?1に等しい最大クリッピング)に設定することにより、クリッピングの出力端で、したがって乗算演算子の入力端で、最大ビット数を1だけ減らすことができる。そして、サンプルビット深度マイナス2(すなわち、2^(ビット深度-2)-1に等しい最大クリッピング)を使用することにより、最大ビット数を2だけ減少させることができる。
【0144】
APSを使用する実施形態では、イントラスライスとインタースライス(又はイントラ及びインターピクチャ/画像部分/タイルグループ)との間の区別が、APSがイントラ及びインタースライス/ピクチャ/タイルグループ/画像部分によって共有されるので、クリッピング値導出中に可能でないことがある。その場合、許容されるクリッピング値の所定のテーブルは、もはやスライス/画像部分/タイルグループタイプに依存することができない。したがって、1つのデフォルトクリッピング値テーブルは、すべてのスライス/ピクチャ/タイルグループ/画像部分タイプによって共有される。変形例では、例えば、複雑さを減らすことを考慮して、クリッピング値がデフォルトクリッピング値テーブルからのクリッピング値のサブセットに制限されるかどうかをエンコーダに決定させる(次いで、デコーダにシグナリングする)。
【0145】
変形例では、使用可能なクリッピング値のクリッピング値テーブルが、ALFパラメータと共にAPSにおいてシグナリングされる。したがって、エンコーダ(およびデコーダ)は、任意のクリッピング値を使用し、使用されたクリッピング値をそれ自体のクリッピング値テーブルとともにシグナリングすることができる。
【0146】
変形例では、複数のデフォルトクリッピング値テーブルがある。たとえば、1つはインタースライスに使用され、もう1つはイントラスライスに使用される。使用されたテーブルを識別するための情報、例えば、使用されたテーブルのインデックスは、ALFパラメータと共にAPSに提供される。変形例では、デフォルトのクリッピング値テーブルはルマとクロマで異なる。
【0147】
一実施形態では、フィルタの出力値も、入力サンプル値および追加のクリッピングパラメータ(クリッピングパラメータのテーブルに追加することができる)に応じてクリッピングされる。
【0148】
一実施形態によれば、ALFアクティブフラグに加えて、NLALF(非線形(NonLinear)ALF)アクティブフラグが非線形ALFが、アクティブ/使用/イネーブルであることを示すために、例えば、SPS内のシーケンスレベルに、または代替として、例えば、ピクチャヘッダ内のフレームレベルに置かれる。このフラグがアクティブである(すなわち、非線形ALFがアクティブであることを示す)場合、ALFのシンタックス要素は、非線形フィルタ、例えば
図5のフィルタパラメータを含む。フラグが非アクティブである(すなわち、非線形ALFがアクティブではあることを示さない)場合、ALFのシンタックス要素は、線形フィルタ、例えば
図2のフィルタパラメータのみを含む。
【0149】
一実施形態によれば、ALFフラグがスライスヘッダにおいてアクティブである場合、NLALFアクティブフラグがスライスヘッダに置かれる。このNLALFフラグがアクティブである場合、各ルマフィルタ構文要素511のクリッピングパラメータおよびクロマフィルタ512のクリッピングパラメータは、スライスヘッダ内に存在する。このNLALFフラグが非アクティブである場合、シンタックス要素511および512は、スライスヘッダに存在せず、ALFは通常の線形フィルタリングを使用する。
【0150】
代替実施形態によれば、別個のNLALFアクティブフラグが各成分タイプであるルマおよびクロマに対して提供され、これらのフラグの一方または両方が非線形ALFが特定の成分のサンプル上で使用されるべきかどうかを示すために使用される(例えば、それらは、シーケンスレベルで、またはスライスヘッダ内など、NLALFアクティブフラグと同じ場所に提供される)。変形例では、非線形ALFがルマ上で使用され、線形ALFがクロマ上で使用される。代替的な変形例では、非線形ALFがクロマ上で使用され、線形ALFがルマ上で使用される。
【0151】
変形例では、NLALFルマアクティブフラグとNLALFクロマアクティブフラグがスライスヘッダに提供される。NLALFルマアクティブフラグは、非線形アダプティブループフィルタがルマ成分で使用されるかどうか、したがって非線形ALFのクリッピングパラメータが各ルマフィルタについてシグナリングされるかどうかを示す。NLALFクロマアクティブフラグは、非線形アダプティブループフィルタがクロマ成分に使用されるかどうか、したがって非線形ALFのクリッピングパラメータがクロマフィルタのためにシグナリングされるかどうかを示す。
【0152】
変形例では、NLALFクロマアクティブフラグはシグナリングされないが、NLALFルマアクティブフラグがゼロに等しい場合、ゼロに等しいと推測され、その結果、非線形ALFはクロマのみでは使用できない。
【0153】
変形例では、非線形ALFは常にルマに使用され(デフォルトではNLALFルマアクティブフラグは使用されない、または、対応するデフォルト値であると仮定されてもよい)、NLALFクロマアクティブフラグは非線形ALFまたは線形ALFがクロマに使用されるかどうかを示すために使用される。別の変形例では、線形ALFが(デフォルトではNLALFルマアクティブフラグは使用されない、または対応するデフォルト値であると仮定される)ルマに常に使用され、NLALFクロマアクティブフラグが非線形ALFまたは線形ALFがクロマに使用されるかどうかを示すために使用される。変形例では、NLALFルマアクティブフラグが、非線形ALF又は線形ALFがルマに使用されるかどうか示すために使用され、非線形ALFは常にクロマに使用される(デフォルトではしたがって、NLALFクロマアクティブフラグは使用されないか、または対応するデフォルト値であると仮定されてもよい)。変形例ではNLALFルマアクティブフラグが、非線形ALFまたは線形ALFがルマに使用されるかどうかを示すために使用され、線形ALFはクロマに常に使用される(デフォルトではNLALFクロマアクティブフラグは使用されないか、または対応するデフォルト値であると仮定されてもよい)。
【0154】
一実施形態では、NLALFフラグ(又はNLALFルマアクティブフラグ又はNLALFクロマアクティブフラグ)が、NLALFフラフがSPS内でアクティブである場合にのみ、スライスヘッダに入れられる。NLALFアクティブフラグ(またはNLALFルマアクティブフラグまたはNLALFクロマアクティブフラグ)が存在しない場合、デフォルトでは非アクティブと見なされる。
【0155】
一実施形態では、NLALFフラグは、SPSおよびスライスヘッダ内のALFフラグを置き換える。古典的な(線形のみの)ALFは、クリッピング関数が許容されるクリッピングパラメータ値に対して線形出力を可能にする実施形態を除いて、もはや使用することができない。
【0156】
一実施形態によれば、クリッピングパラメータのシグナリグは、フィルタ係数の場合と同様の方法で行われる。クリッピングパラメータの(exp-)Golomb符号化のためのパラメータが最初にシグナリングされる:VLCコードが(exp-)Golombコードの最小次数をシグナリングするために使用され、次いで、各(exp-)Golombインデックス(例えば、ルマフィルタのための3つのインデックスおよびクロマのための2つのインデックス)のために、フラグは、(exp-)Golomb次数が現在のインデックスおよび次のインデックス(最小次数から開始する)のために増加されなければならないかどうかをシグナリングするために使用される。
【0157】
次に、クリッピングパラメータは、(exp-)Golombパラメータを記憶するテーブルからの(例えばフィルタ係数と同じ固定テーブル内の)係数インデックスに関連する(exp-)Golombインデックスを用いて取られた(exp-)Golomb順次数を有する(符号なし整数の)(exp-)Golombコードを使用して、各(ディスエーブルされていない)フィルタについてシグナリングされる。
【0158】
代替の実施形態によれば、各符号化フィルタについて、(exp-)Golomb符号化パラメータ値が、例えばスライスヘッダにおいてシグナリングされ、各クリッピングパラメータ値が、符号無し整数(exp-)Golomb符号化のために、提供された(exp-)Golomb符号化パラメータ値を使用して符号化される。
【0159】
一実施形態によれば、(exp-)Golomb符号化パラメータ値は、利用可能な(exp-)Golomb符号化パラメータ値のテーブル内のインデックスとしてシグナリングされる。
【0160】
一実施形態によれば、フラグは、例えば、ルマフィルタのクリッピング・パラメータがデルタモードを使用してシグナリングされるかどうかを示すフラグ、がスライスヘッダ内にシグナリングされる。デルタモードがアクティブであるとき、第1のフィルタクリッピングパラメータは前述のように符号化されるが、後続のフィルタクリッピングパラメータの各々は後続のフィルタクリッピングパラメータと前に符号化されたフィルタクリッピングパラメータとの間の差として符号化される。その場合、差分は符号付き整数(exp-)Golomb エンコードを使用してエンコードされる。
【0161】
一実施形態によれば、フラグは、例えば、フィルタのクリッピングパラメータがデルタモードを使用できるかどうかを示すフラグは、スライスヘッダ内にシグナリングされる。一実施形態によれば、デルタモードがアクティブであるとき、各フィルタについてフラグがシグナリングされる。このフラグは、フィルタのクリッピングパラメータがデルタモードを使用するか否かを示す。一実施形態によれば、デルタモードが所与のフィルタのクリッピングパラメータを符号化するためにアクティブであるとき、クリッピングパラメータは1つずつ符号化され、最初のものは符号無し(exp-)Golomb符号化を使用し、後続するものはクリッピングパラメータと以前に符号化されたクリッピングパラメータの値との間の差の符号付き(exp-)Golomb符号化を使用する。
【0162】
代替実施形態によれば、クリッピングパラメータがとり得る値の数は、2つの異なる値に制限される。次に、単一ビットが、どっちのリッピングパラメータ値を使用しなければならないかをシグナリングするための使用される((exp-)Golombパラメータを提供する必要はない)。
【0163】
一実施形態によれば、クリッピングパラメータの条件付きシグナリングが実行され、不要なデータのシグナリング(例えば、フィルタ係数がゼロであるか、またはデコーダ側のフィルタに対する既知の値に等しい場合)を最小限に抑える。変形例では、例えば、クリッピングパラメータがシグナリングされる前に、スライスヘッダにおいてフィルタ係数がシグナリングされ、ゼロに等しいフィルタの各i番目のフィルタ係数について、その対応するi番目のクリッピングパラメータはシグナリングされない。これは、i番目のクリッピングがフィルタにとって有用ではないからである。というのは、フィルタの結果がゼロ係数によって乗算され、その結果、フィルタリングされた出力に対するi番目のクリッピングからの影響がないためである。1つの変形例では、クリッピングがデフォルト値(例えば、サンプルビット深度に従った最大可能値)に設定される。別の変形例では、フィルタリング処理は、ゼロ係数が乗算されると予想される入力サンプルにクリッピングを適用しない。
【0164】
一実施形態によれば、非線形フィルタがそのルマフィルタに使用されるか否かを示すために、各ルマフィルタに対してフラグがシグナリングされる。変形例では、ルマフィルタのクリッピングパラメータ/値は、非線形フィルタがそのルマフィルタに使用される場合(すなわち、フラグがアクティブである場合)にのみシグナリングされる。
【0165】
一実施形態によれば、非線形フィルタがそのクロマフィルタと共に使用されるか否かを示すために、クロマフィルタに対してフラグがシグナリングされる。変形例では、クロマフィルタのクリッピングパラメータ/値が、非線形フィルタがそのクロマフィルタに使用される場合(すなわち、フラグがアクティブである場合)にのみシグナリングされる。
【0166】
実施形態によれば、ALFパラメータおよびフラグなどのALF関連情報のシグナリングは、APSシンタックス(テーブル1)、タイルグループヘッダシンタックス(テーブル2)、コーディングツリーユニットシンタックス(テーブル3)、および/またはVVCドラフトバージョン3と同じ構文命名規則を使用する以下に示す非線形ALFデータ構文(テーブル4)のうちの1つ以上を使用して実行される。変形例によれば、4つのシンタックス全て(例えば、テーブル1~4)は、ALF関連情報をシグナリングするために使用される。別の変形例によれば、4つのシンタックスのサブセットは、ALF関連情報をシグナリングするために使用される。
【0167】
テーブル1と2は、ALFパラメータ(alf_data等) を提供/シグナリングするための高レベルシンタックスを示す。
テーブル1 - アダプテーションパラメータセット(APS)シンタックス
テーブル2 - タイルグループヘッダシンタックス
【0168】
他の実施形態(またはその変形)に関連して説明されるスライス(ヘッダ)はテーブル2のタイルグループヘッダシンタックス(tile group header syntax)によって示されるように、タイルグループ(ヘッダ)によって置き換えられる。したがって、“tile_group_ALF_enabled_flag”は、
図2の202および
図5の502のシンタックス要素に対応し、ALFがタイルグループに対してアクティブであるかどうかを表す。さらに、ALFデータシンタックス要素は、タイルグループヘッダには提供されない(他の実施形態ではスライスと共に、スライスヘッダに提供されてもよい)。代わりに、ALFデータシンタックス要素はテーブル1に示すように、アダプテーションパラメータセット(Adaptation Parameter Set:APS)と呼ばれる特定のパラメータ設定で提供される。ALFデータは、ALFシンタックス要素を含み、APSにおけるALFデータシンタックス要素の提供は、同一および/または異なる復号化画像における複数のタイルグループ間など、複数のタイルグループ間でALFパラメータを共有することを可能にする。
【0169】
テーブル1のアダプテーションパラメータセット(APS)シンタックスは、任意のアダプテーションパラメータセットのシグナリングを定義するために使用される。変形例では、APSは、非“ビデオ符号化レイヤ”(VCL)“ネットワーク抽象化レイヤ”(NAL)ユニット(例えば、“APS_NUT”またはAPS NALユニットタイプと呼ばれる)に含まれる。
【0170】
APSの各シンタックス要素のセマンティクスは次のとおりである。
アダプテーションパラメータセットセマンティクス
Adaptation_parameter_set_idは、他のシンタックス要素によって参照されるAPSを識別する。adaptation_parameter_set_id の値は、0から63までの範囲内である必要がある。
【0171】
テーブル2 のタイルグループヘッダーシンタックスは、各タイルグループヘッダーを定義するために使用される。タイルグループヘッダは、各タイルグループに対して提供される。タイルグループは、タイルのセットを含み、各タイルはCTUのセットを含む。
【0172】
タイルグループヘッダのシンタックス要素のセマンティクスは次のとおりである:
グループヘッダセマンティクス
tile_group_APS_id は、タイルグループが参照するAPS のadaptation_parameter_set_id を特定する。tile_group_aps_idの値は、0から63の範囲内である。adaptation_parameter_set_idがtile_group_APS_idに等しいAPS NALLユニットのTemporalIdは、符号化タイルグループNALユニットのTemporalId以下でなければならない。
【0173】
テーブル3は、CTUレベルで、ALFがアクティブである各成分に使用されるALF(enable)フラグをシグナリングするためのシンタックス要素を提供する。これは、
図2の208、209、および210、ならびに
図5の508、509、および510で使用されるシンタックス要素に対応する。
テーブル3 - コーディングツリーユニットシンタックス
【0174】
テーブル3のコーディングツリーユニットシンタックスは、(符号化された)符号化ツリーユニットを定義するために使用される。コーディングツリーユニットの各シンタックス要素のセマンティクスは次のとおりである:
コーディングツリーユニットセマンティクス
CTUは、コーディング四分木構造のルートノードである。
alf_ctb_flag[cIdx][xCtb>>Log2CtbSize][yCtb>>Log2CtbSize]=1の場合、アダプティブループフィルタが、ルマロケーション(xCtb、yCtb)のコーディングツリーユニットのcIdx によって示される色成分のコーディングツリーブロックに適用されることを特定する。alf_ctb_flag[cIdx][xCtb>>Log2CtbSize][yCtb>>Log2CtbSize]=0の場合、アダプティブループフィルタが、ルマロケーション(xCtb、yCtb)のコーディングツリーユニットのcIdx によって示される色成分のコーディングツリーブロックに適用されないことを特定する。
【0175】
alf_ctb_flag[cIdx][xCtb>>Log2CtbSize][yCtb>>Log2CtbSize]が存在しない場合、0 と推測される。
【0176】
テーブル4は、非線形ALFパラメータ(すなわち、非線形ALFデータシンタックス)をシグナリングするためのシンタックス要素を提供し、これは、VVCドラフトバージョン3のALFデータシンタックス要素に基づいて構築される。これらのシンタックス要素は、
図2のシンタックス要素上に構築される
図5の非線形ALFシンタックス要素を参照して、本明細書に記載される変形例において使用されるシンタックス要素上に構築される。
テーブル4 - 非線形ALFデータシンタックス
【0177】
テーブル4の非線形アダプティブループフィルタ(ALF)データシンタックスは、適応パラメータセット(テーブル1に示される)を定義するために使用される。非線形ALFデータシンタックス要素のセマンティックスは以下の通りである:
アダプティブループフィルタデータセマンティクス
alf_chroma_idcが0に等しい場合、アダプティブループフィルタがCbおよびCr色成分に適用されないことを特定する。alf_chroma_idcが1に等しい場合、アダプティブループフィルタがCb色成分に適用されることを特定する。
alf_chroma_idcが2に等しい場合、アダプティブループフィルタがCr色成分に適用されることを示す。alf_chroma_idcが3に等しい場合、アダプティブループフィルタがCbおよびCr色成分に適用されることを示す。
【0178】
切り捨て後の単項2値tu(v)の最大値maxValは、3に等しく設定される。
【0179】
異なるアダプティブループフィルタ数を特定する変数NumAlfFilterは、25に等しく設定される。
【0180】
alf_luma_num_filters_signalled_minus1 +1は、ルマ係数をシグナリングできるアダプティブループフィルタクラスの数を特定する。alf_luma_num_filters_signalled_minus1 の値は、0 からNumAlfFilters-1 までの範囲内である必要がある。
【0181】
切り捨て後のバイナリ二値化tb(v) の最大値maxValは、NumAlfFilters-1 に等しく設定される。
【0182】
alf_luma_coeff_delta_idx[filtIdx]は、0からNumAlfFilters-1までの範囲のfiltIdxで示されるフィルタクラスのシグナリングされたアダプティブループフィルタルマ係数デルタのインデックスを指定する。alf_luma_coeff_delta_idx[filtIdx]が存在しない場合、0 に等しいと推測される。
【0183】
切り捨て後のバイナリニ値化tb(v) の最大値maxVal は、alf_luma_num_filters_signalled_minus1 に設定される。
【0184】
alf_luma_coeff_delta_flag が1 に等しい場合、alf_luma_coeff_delta_prediction_flag がシグナリングされないことを示す。alf_luma_coeff_delta_flag が0 の場合、alf_luma_coeff_delta_prediction_flag がシグナリングされる可能性があることを示す。
【0185】
alf_luma_coeff_delta_prediction_flag が1 に等しい場合、シグナリングされたルマフィルタ係数デルタが、以前のルミナンス係数のデルタから予測されることを特定する。alf_luma_coeff_delta_prediction_flag が0 に等しい場合、シグナリングされたルマフィルタ係数デルタが、以前のルマ係数のデルタから予測されないことを指定する。存在しない場合、alf_luma_coeff_delta_prediction_flag は0 に等しいと推測される。
【0186】
alf_luma_min_eg_order_minus1 + 1 は、ルマフィルタ係数のシグナリングのためのexp-Golomb コードの最小の次数を特定する。alf_luma_min_eg_order_minus1 の値は、0 以上6 以下の範囲とする。
【0187】
alf_luma_eg_order_increase_flag[i]が1に等しい場合、ルマフィルタ係数シグナリングのexp-Golomb符号の最小次数が1だけインクリメントされることを特定する。alf_luma_eg_order_increase_flag[i]が0に等しい場合、ルマフィルタ係数シグナリングのexp-Golomb符号の最小次数が1だけインクリメントされないことを特定する。
【0188】
alf_luma_coeff_delta_abs[sigFiltIdx][j]の値をデコードするために使用されるexp-Golomb符号の次数expGoOrderY[i]は、次のように導出される:
expGoOrder[i]=alf_luma_min_eg_oreder_minus1+1+ald_luma_eg_order_increase_flag[i]
【0189】
alf_luma_coeff_flag[sigFiltIdx]が1に等しい場合、sigFiltIdxで表されるルマフィルタの係数がシグナリングされることを特定する。alf_luma_coeff_flag[sigFiltIdx]が0に等しい場合、sigFiltIdxで表されるルマフィルタの全ての係数が0にセットされることを特定する。
【0190】
alf_luma_coeff_delta_abs[sigFiltIdx][j]は、sigFiltIdxで表されるシグナリングされたルマフィルタのj番目の係数デルタの絶対値を特定する。alf_luma_coeff_delta_abs[sigFiltIdx][j]が存在しない場合、0 に等しいと推測される。
【0191】
exp-Golombのバイナリuek(v)の次数kは、次のように導出される:
golombOrderIdxY[]={0、0、1、0、0、1、2、1、0、0、1、2 }
k=expGoOrderY[golombOrderIdxY[j]]
【0192】
alf_luma_coeff_delta_sign[sigFiltIdx][j]は、sigFiltIdx が示すフィルタのj 番目のルマ係数の符号を次のように指定する:- もしalf_Luma_coeff_delta_sign[sigFiltIdx][j]が0に等しい場合、対応するルマフィルタ係数は正の値を持つ。
- それ以外(alf_Luma_coeff_delta_sign[sigFiltIdx][j]が1に等しい場合)、対応するルマフィルタ係数は負の値を持つ。
【0193】
alf_luma_coeff_delta_sign[sigFiltIdx][j]が存在しない場合、0に等しいと推測される。
【0194】
sigFiltIdxが0~alf_luma_num_filter_signaled_minus1、jが0~11であるときの、変数filterCoefficients[sigFiltIdx][j]は次のように初期化される。
filterCoefficients[sigFiltIdx][j]=alf_luma_coeff_delta_abs[sigFiltIdx][j]*(1-2*alf_Luma_coeff_delta_sign[sigFiltIdx][j])
【0195】
alf_luma_coeff_delta_prediction_flagが1に等しい場合、sigFiltIdxgが1~alf_luma_num_filters_signalled_minus1で、jが0~11である場合のfilterCoefficients[sigFiltIdx]「j」は、次のように変形される。
filterCoefficents[sigFiltIdx][j]+=filterCoefficients[sigFiltIdx-1][j]
【0196】
filtIdxが0~NumAlfFilter-1で、jが0~11であるときの要素AlfCoefL「filtIdx」[j]でのルマフィルタ係数alfCoeffLは、次のように導出される。
AlfCoeffL[filtIdx][j]=filterCoefficients[alf_luma_coeff_delta_idx[filtIdx][j]
【0197】
filtIdxが0~NumAlfFilters-1での、最後のフィルタ係数AlfCoeffL[filtIdx][12]は、次のように導出される。
AlfCoeffL[filtIdx][12]=128
【0198】
filtIdxが0~NumAlfFilter-1、jが0~11におけるAlfCoeffL[filtIdx][j]の値は-2^7 ~ 2^7 -1 の範囲であり、AlfCoeffL[filtIdx][12]の値は0~ 2^8 -1 の範囲内であることが、ビットストリームの適合の要件である。
【0199】
alf_chroma_min_eg_order_minus1 + 1 は、クロマフィルタ係数シグナリングのexp-Golomb符号の最小次数を特定する。alf_chroma_min_eg_order_minus1の値は、0~6以の範囲内とする。
【0200】
alf_Chroma_eg_order_increase_flag[i]が1に等しい場合、クロマフィルタ係数シグナリングのためのexp-Golomb符号の最小次数を1だけインクリメントすることを特定する。alf_Chroma_eg_order_increase_flag[i]が0に等しい場合、クロマフィルタ係数シグナリングのためのexp-Golomb符号の最小次数を1だけインクリメントしないことを特定する。
【0201】
alf_chroma_coeff_abs[j]の値をデコードするために使用されるexp-Golomb符号の次数expGoOrderC[i]は、次のように導出される:
expGoOrderC[i]=alf_chroma_min_eg_order_minus1+1+alf_chroma_eg_order_increase_flag[i]
【0202】
alf_chroma_coeff_abs[j]は、j番目のクロマフィルタ係数の絶対値を特定する。alf_chroma_coeff_abs[j]が存在しない場合、0に等しいと推測される。
【0203】
exp-Golombバイナリuek()の次数は、次のように導出される。
golombOrderIdxC[]={0、0、1、0、0、1}
k=expGoOrderC[golombOrderIdxC[j]]
【0204】
alf_chroma_coeff_sign[j]は、j番目のクロマフィルタ係数の符号を特定するもので、次の通りである。
- もし、alf_chroma_coeff_sign[j]が0に等しい場合は、対応するクロマフィルタ係数は正の値を持つ
- これ以外(alf_chroma_coeff_sign[j]が1に等しい)の場合は、対応するクロマフィルタ係数は負の正を持つ。
【0205】
alf_chroma_coeff_sign[j]が存在しない場合は、0に等しいと推測される。
【0206】
要素cC[j]を持ち、jが0~5の場合のクロマフィルタ係数alfCoeffCは、次のように導出される。
AlfCoeffC[j]=alf_chroma_coeff_abs[j]*(1-2*alf_chroma_coeff_sign[j])
【0207】
j=6の場合の最後のフィルタ係数は、次のように導出される。
AlfCoeffC[6]=128
【0208】
jが0~5の場合のAlfCoeffC[j]の値は、-2^7~2^7-1の範囲内にあり、AlfCoeffC[6]は0~2^8-1の範囲内にあることが、ビットストリーム適合の要件である。
【0209】
alf_luma_clipが0に等しい場合は線形アダプティブループフィルタがルマ成分に適用されることを特定し、alf_luma_clipが1に等しい場合は、非線形アダプティブループフィルタがルマ成分に適用されること特定する。
【0210】
alf_chroma_clipが0に等しい場合は線形アダプティブループフィルタがクロマ成分に適用されることを特定し、alf_chroma_clipが1に等しい場合は、非線形アダプティブループフィルタがクロマ成分に適用されること特定する。alf_chroma_clipが存在しない場合は0であると推測される。
【0211】
alf_luma_clip_default_tableが1に等しい場合、デフォルトのalf_luma_clipping_valu[]テーブルが、クリッピングインデックスをクリッピング値に変換するために使用される。alf_luma_clip_default_tableが0に等しい場合は。alf_luma_clipping_value[]テーブルがalf_data()内に存在することを示す。
【0212】
alf_luma_num_clipping_values_minus1 + 1 は、alf_luma_clipping_value[]テーブルのサイズを示す。存在しない場合、bitDepthY に等しいと推測される。
【0213】
alf_luma_clipping_value[clipIdx]は、alf_luma_clip_idx[][]テーブルにてクリッピングインデックスclipIdxがシグナリングされたときに使用するクリッピング値を特定する。存在しない場合、alf_luma_clipping_value[]={1 << bitDepthY、1 <<(bitDepthY-1)、...、8、4、2 }であるとと推測される。
【0214】
便宜上、alf_luma_clipping_value[alf_luma_num_clipping_values_minus1+1]は、1 << bitDepthYに等しいと推論される。
【0215】
alf_chroma_clip_default_table が1に等しい場合は、クリッピングインデックスをクリッピング値に変換するためにデフォルトのalf_chroma_clipping_value[]テーブルが使用されること特定し、alf_chroma_clip_default_table が0に等しい場合は、alf_data()内にalf_chroma_clipping_value[]テーブルが存在することを示す。
【0216】
alf_chroma_num_clipping_values_minus1 + 1 は、alf_chroma_clipping_value[]テーブルのサイズを示す。存在しない場合、それはbitDepthCに等しいと推測される。
【0217】
alf_chroma_clipping_value[clipIdx]は、alf_chroma_clip_idx[][]テーブル内に、インデックスクリップclipIdx がシグナリングされるときに使用されるクリッピング値を特定する。存在しない場合、alf_chroma_clipping_value[]={1 << bitDepthC、1 <<(bitDepthC-1)、...、8、4、2 } と推測される。
【0218】
便宜上、alf_chroma_clipping_value[alf_chroma_num_clipping_values_minus1 + 1 ] は、1<<bitDepthCと等しいと推測される。
【0219】
alf_luma_filter_clip[sigFiltIdx]が0 に等しい場合、sigFiltIdx で示されるルナフィルタで線形アダプティブループフィルタが適用されることを特定する。alf_luma_filter_clip[sigFiltIdx]が1に等しい場合、sigFiltIdx が示すルナフィルタで非線形アダプティブループフィルタが適用されることを特定する。
【0220】
alf_luma_clip_min_eg_order_minus1 + 1 は、ルマフィルタ係数シグナリングのexp-Golomb符号の最小次数を特定する。alf_luma_clip_min_eg_order_minus1 の値は、0~6の範囲内とする。
【0221】
alf_luma_clip_eg_order_increase_flag[i]が1に等しい場合、ルマフィルタ係数シグナリングのexp-Golomb符号の最小次数が1だけインクリメントされることを特定する。alf_luma_clip_eg_order_increase_flag[i]が0 に等しい場合、ルマフィルタ係数シグナリングのexp-Golomb符号の最小次数が1だけインクリメントされないことを特定する。
【0222】
alf_luma_clip_idx[sigFiltIdx][j]の値をデコードするために使用されるexp-Golomb符号の次数expGoOrderYClip[i]は、次のように導出される:
expGoOrderYClip[i]=alf_luma_clip_min_eg_order_minus1+1+alf_luma_clip_eg_order_increase_flag[i]
【0223】
alf_luma_clip_idx[sigFiltIdx][j]は、sigFiltIdxで表されるシグナリングされたルマフィルタのj番目の係数で乗算する前に使用されるクリッピングのクリッピングインデックスを特定する。alf_luma_clip_idx[sigFiltIdx][j]が存在しない場合、alf_luma_num_clipping_values_minus1+1(クリッピング無し)に等しいと推測される。
【0224】
exp-Golombバイナリuek(v)の次数kは、次のように導出される:
golombOrderIdxYClip[]={0、0、1、0、0、1、2、1、0、0、1、2 }
k = expGoOrderYClip[golombOrderIdxYClip[j]]
【0225】
sigFiltIdxが0~alf_luma_num_filters_signalled_minus1で、jが0~11である場合の変数filterClips[sigFiltIdx][j]は、次のように初期化される。
filterClips[sigFiltIdx][j]=ald_luma_clipping_value[alf_luma_clip_idx[sigFiltIdx][j]]
【0226】
要素AlfClipC[filtIdx][j]を持ち、filtIdxが0~NumAlfFilters-1、Jが0~11である場合の、ルマフィルタクリッピング値AlfClipLは、次のように初期化される。
AlfClipL[filtIdx][j]=filterClips[alf_luma_coeff_delta_idx[filtIdx]][j]
【0227】
alf_chroma_clip_min_eg_order_minus1+1は、クロマフィルタ係数シグナリングのexp-Golomb符号の最小次数を特定する。alf_chroma_clip_min_eg_order_minus1の値は、0~7の範囲内とする。
【0228】
alf_chroma_clip_eg_order_increase_flag[i]が1に等しい場合、クロマフィルタ係数シグナリングのexp-Golomb符号の最小次数は1だけ増加することを特定する。alf_chroma_clip_eg_order_increase_flag[i]が0に等しい場合、クロマフィルタ係数シグナリングのexp-Golomb符号の最小次数は1だけ増加しないことを特定する。
【0229】
alf_chroma_coeff_abs[j]の値をデコードする際に使用するexp-Golomb符号の次数expGoOrderC[i]は、次のように導出される。
expGoOrderC[i]=alf_chroma_clip_eg_order_minus1+1+alf_chroma_clip_eg_order_increase_flag[i]
【0230】
alf_chroma_clip_inx[j]は、クロマフィルタのj番目の係数で乗算する前に使用されるクリッピングのクリッピングインデックスを特定する。alf_chroma_clip_inx[j]が存在しない場合は、alf_chroma_num_clip_values_minus1+1(クリッピング無し)に等しいと推測される。
【0231】
exp-Golombバイナリuek(v)の次数kは次のように導出される。
golombOrderIdxC[]={0,0,1,0.0,1}
k=expGoOrderC[golombOrderIdxC[j]]
【0232】
jが0~5における要素AltClipC[j]を持つ、クロマフィルタクリッピング値AlfClipCは、次のように導出される。
AlfClipC[j]=alf_chroma_clipping_value[alf_chroma_clip_idx[j]]
【0233】
変形例によれば、alf_luma_num_clipping_values_minus1 は、alf_luma_num_clipping_values_minus2 に置き換えられ、クリッピング値はindex=1 からalf_luma_num_clipping_values_minus2+1 に提供され、alf_luma_clipping_value[]の最初の値alf_luma_clipping_value[ 0]=1<<bitDepthY として推測される。alf_chroma_num_clipping_values_minus1 は、alf_chroma_num_clipping_values_minus2 に置き換えられ、クリッピング値はindex=1 からalf_chroma_num_clipping_values_minus2+1 に提供され、alf_chroma_clipping_value[]の最初の値は、alf_chroma_clipping_value[ 0]= 1<<bitDepthC として推測される。
【0234】
変形例によれば、アダプティブループフィルタリング処理は、上記のシンタックス要素を使用する。このような変形例は、以下のVVCドラフト仕様書の表記規則を用いて、以下のよう説明される。
アダプティブループフィルタ処理
一般
このプロセスの入力は、アダプティブループフィルタrecPictureL、recPictureCb、およびrecPictureCrの前の、再構成画像サンプルアレイである。
このプロセスの出力は、アダプティブループフィルタalfPictureL、alfPictureCb、およびalfPictureCrの後の、修正された再構成されたピクチャサンプルアレイである。
【0235】
アダプティブループフィルタalfPictureL,alfPictureCb,alfPictureCrの後の修正後の再構成されたピクチャアンプルアレイにおけるサンプル値は、最初は、アダプティブループフィルタrecPictureL、recPictureCb、recPictureCrそれぞれを適用する以前の再構成されたピクチャサンプル値に等しくなるようにセットされる。
【0236】
tile_group_alf_enabled_flag が1に等しいとき、rx=0~PicWidthCtbs-1、ry」=0~PicHeighyInCtBs-1とする、ルマコーディングツリーブロックロケーション(rx、ry)を持つすべてのコーディングツリーユニットについて、次のように適用がなされる。
【0237】
alf_ctb_flag[0][rx][ry]が1に等しい場合、“ルマサンプルのコーディングツリーブロックフィルタリング処理”の句で特定されているルマサンプルのコーディングツリーブロックフィルタリング処理が、recPictureL、alfPictureL、及び、ルマコーディングツリーブロックロケーション(xCtb、yCtb) が入力として(rx << CtbLog2SizeY、ry << CtLog2SizeY) として読み出され、その出力は修正されたフィルタリング後のピクチャalfPictureLとなる。
【0238】
alf_ctb_flag[1][rx][ry]が1に等しい場合、“クロマサンプルのコーディングツリーブロックフィルタリング処理”の句で特定されているクロマサンプルのコーディングツリーブロックフィルタリング処理が、recPictureCbに等しいRecPictureセット、alfPictureCbに等しいalfPictureセット、及び、クロマコーディングツリーブロックロケーション(xCtbc、yCtbC) が入力として(rx <<(CtbLog2SizeY-1)、ry << (CtLog2SizeY-1))として読み出され、その出力は修正されたフィルタリング後のピクチャalfPictureCbとなる。
【0239】
alf_ctb_flag[2][rx][ry]が1に等しい場合、“クロマサンプルのコーディングツリーブロックフィルタリング処理”の句で特定されているクロマサンプルのコーディングツリーブロックフィルタリング処理が、
recPictureCrに等しいRecPictureセット、alfPictureCrに等しいalfPictureセット、及び、クロマコーディングツリーブロックロケーション(xCtbc、yCtbC) が入力として(rx << (CtbLog2SizeY-1)、ry <<(CtLog2SizeYー1))として読み出され、その出力は修正されたフィルタリング後のピクチャalfPictureCrとなる。
【0240】
ルマサンプルのためのコーディングツリーブロックフィルタリング処理
このプロセスの入力は、アダプティブループフィルタリングプロセスの前の再構成されたルマピクチャサンプルアレイrecPictureL、フィルタリングされた再構成されたルマピクチャサンプルアレイalfPictureL、現在の画像の左上サンプルに対する現在のルマ符号化ツリーブロックの左上サンプルを特定するルマロケーション(xCtb、yCtb)である。
このプロセスの出力は、修正されフィルタリング後の再構成ルマピクチャサンプルアレイalfPictureLである。
【0241】
“ALF転置のための導出プロセスおよび輝度サンプルのためのフィルタインデックス”のフィルタインデックス節の導出プロセスは、ロケーション(xCtb、yCtb)および再構成されたルマピクチャサンプルアレイrecPictureLを入力とし呼び出され、x、y=0~CtbSizeY-1における、filtIdx[x][y]およびtransposeIdx[x][y]は出力として呼びだされる。
【0242】
フィルタリングされた再構成ルマサンプルalfPictureL[x][y]の導出のために、現在のルマコーディングツリーブロックrecPictureL[x][y]内の各再構成ルマサンプルは、x、y = 0~CtbSize-1にて、次のようにフィルタリングされる。
filtIdx[x][y]によって指定されるフィルタに対応するルマフィルタ係数f[j]のアレイおよびルマフィルタクリッピングc[j]のアレイは、j = 0~12で以下のように導出される。
f[j]=AlfCoeffL[FiltIdx[x][y]][j]
c[j]=AlfClipL[FiltIdx[x][y]][j]
【0243】
ルマフィルタ係数filterCoeffおよびフィルタクリッピング値filterClipは、以下のようにtransposeIdx[x][y]に応じて導出される:
transposeIndex[x][y]==1の場合
FilterCoeff[]={f[9]、f[4]、f[10]、f[8]、f[1]、f[5]、f[11]、f[7]、f[3]、f[0]、f[2]、f[6]、f[12]}
filterClip[]={c[9]、c[4]、c[10]、c[8]、c[1]、c[5]、c[11]、c[7]、c[3]、c[0]、c[2]、c[6]、c[12]}
そうではなく、transposeIndex[x][y]==2の場合
filterCoeff[]={f[0]、f[3]、f[2]、f[1]、f[8]、f[7]、f[6]、f[5]、f[4]、f[9]、f[10]、f[11]、f[12]}
filterClip[]={c[0]、c[3]、c[2]、c[1]、c[8]、c[7]、c[6]、c[5]、c[4]、c[9]、c[10]、c[11]、c[12]}
そうではなく、transposeIndex[x][y]==3の場合、
filterCoeff[]={f[9]、f[8]、f[10]、f[4]、f[3]、f[7]、f[11]、f[5]、f[1]、f[0]、f[2]、f[6]、f[12]}
filterClip[]={c[9]、c[8]、c[10]、c[4]、c[3]、c[7]、c[11]、c[5]、c[1]、c[0]、c[2]、c[6]、c[12]}
それ以外の場合は
filterCoeff[]={f[0]、f[1]、f[2]、f[3]、f[4]、f[5]、f[6]、f[7]、f[8]、f[9]、f[10]、f[11]、f[12]}
filterClip[]={c[0]、c[1]、c[2]、c[3]、c[4]、c[5]、c[6]、c[7]、c[8]、c[9]、c[10]、c[11]、c[12]}
【0244】
ルマサンプルの所与のアレイrecPicture内の対応するルマサンプル(x、y)の各々のロケーション(hx、vy)は、以下のように導出される:
hx= Clip3(0、pic_width_in_luma_samples-1、xCtb+x)
vy= Clip3(0、pic_height_in_luma_samples - 1、yCtb+yy)
【0245】
変数currは、以下のように導出される: curr=recPicture[hx、vy]
【0246】
変数sumは次のように導出される:
sum=filterCoeff[0]*(Clip3(-filterClip[0],filterClip[0],recPictureL[hx、vy+3]-curr)+Clip3(-filterClip[0],filterClip[0],recPictureL[hx,vy-3]-curr))
+filterCoeff[1]*(Clip3(-filterClip[1],filterClip[1],recPictureL[hx+1、vy+2]-curr)+Clip3(-filterClip[1],filterClip[1],recPictureL[hx-1,vy-2]-curr))
+filterCoeff[2]*(Clip3(-filterClip[2],filterClip[2],recPictureL[hx、vy+2]-curr)+Clip3(-filterClip[2],filterClip[2],recPictureL[hx,vy-2]-curr))
+filterCoeff[3]*(Clip3(-filterClip[3],filterClip[3],recPictureL[hx-1、vy+2]-curr)+Clip3(-filterClip[3],filterClip[3],recPictureL[hx+1,vy-2]-curr))
+filterCoeff[4]*(Clip3(-filterClip[4],filterClip[4],recPictureL[hx+2、vy+1]-curr)+Clip3(-filterClip[4],filterClip[4],recPictureL[hx-2,vy-1]-curr))
+filterCoeff[5]*(Clip3(-filterClip[5],filterClip[5],recPictureL[hx+1、vy+1]-curr)+Clip3(-filterClip[5],filterClip[5],recPictureL[hx-1,vy-1]-curr))
+filterCoeff[6]*(Clip3(-filterClip[6],filterClip[6],recPictureL[hx、vy+1]-curr)+Clip3(-filterClip[6],filterClip[6],recPictureL[hx,vy-1]-curr))
+filterCoeff[7]*(Clip3(-filterClip[7],filterClip[7],recPictureL[hx-1、vy+1]-curr)+Clip3(-filterClip[7],filterClip[7],recPictureL[hx+1,vy-1]-curr))
+filterCoeff[8]*(Clip3(-filterClip[8],filterClip[8],recPictureL[hx-2、vy+1]-curr)+Clip3(-filterClip[8],filterClip[8],recPictureL[hx+2,vy-1]-curr))
+filterCoeff[9]*(Clip3(-filterClip[9],filterClip[9],recPictureL[hx+3、vy]-curr)+Clip3(-filterClip[9],filterClip[9],recPictureL[hx-3,vy]-curr))
+filterCoeff[10]*(Clip3(-filterClip[10],filterClip[10],recPictureL[hx+2、vy]-curr)+Clip3(-filterClip[10],filterClip[10],recPictureL[hx-2,vy]-curr))
+filterCoeff[11]*(Clip3(-filterClip[11],filterClip[11],recPictureL[hx+1、vy]-curr)+Clip3(-filterClip[11],filterClip[11],recPictureL[hx-1,vy]-curr))
+filterCoeff[12]*recPictureL[hx、vy]
【0247】
sum=(sum + 64)>> 7
【0248】
修正されフィルタリング後の再構成ルマピクチャサンプルalfPictureL[xCtb][yCtb+y]は、以下のように導出される:
alfPictureL[xCtb+x][yCtb+y]=Clip3(0,(1<<BitDepthY)-1,sum)
【0249】
ALF転置およびルマサンプルのためのフィルタインデックスの導出プロセス
このプロセスの入力は、現在のピクチャの左上のサンプルに対する現在のルマコーディングツリーブロックの左上のサンプルを指定するルマロケーション(xCtb、yCtb)、アダプティブループフィルタリングプロセスの前の再構成されたルマピクチャサンプルアレイrecPictureLである。
このプロセスの出力は、
分類フィルタインデックスアレイfiltIdx[x][y]、ここでx、y = 0~CtbSizeY-1
転置インデックスアレイtransposeIdx[x][y]、ここでx、y=0~CtbSize-1
である。
【0250】
ルマサンプルの所与のアレイrecPicture内の対応するルマサンプル(x、y)の各々のロケーション(hx、vy)は、以下のように導出される:
hx = Clip3(0、pic_width_in_luma_samples-1,x)
vy = Clip3(0、pic_height_in_luma_samples-1、y)
【0251】
分類フィルタインデックスアレイfiltIdx、および転置インデックスアレイtransposeIdxは、以下の順序付けられたステップによって導出される:
【0252】
1) x、y=-2~CtbSizeY+1である場合の変数filtH[x][y]、filtV[x][y]、filtD0[x][y]およびfiltD1[x][y]を以下のように導出する。
x及びyの両方が偶数である、もしくは、xとyの両方が非偶数である場合は次のように適用する。
filtH[x][y]=Abs((recPicture[hxCtb+x,vyCtb+y]<<1)-recPicture[hxCtb+x-1,vyCtb+y]-recPicture[hxCtb+x+1,vyCtb+y])
filtV[x][y]=Abs((recPicture[hxCtb+x,vyCtb+y]<<1)-recPicture[hxCtb+x,vyCtb+y-1]-recPicture[hxCtb+x,vyCtb+y+1])
filtD0[x][y]=Abs((recPicture[hxCtb+x,vyCtb+y]<<1)-recPicture[hxCtb+x-1,vyCtb+y-1]-recPicture[hxCtb+x+1,vyCtb+y+1])
filtD1[x][y]=Abs((recPicture[hxCtb+x,vyCtb+y]<<1)-recPicture[hxCtb+x+1,vyCtb+y-1]-recPicture[hxCtb+x-1,vyCtb+y+1])
さもなければ。filtH[x][y],filtV[x][y],filtD0[x][y],filtD1[x][y]は0に等しくなるようにセットする。
【0253】
2) x、yが0~(CtbSizeY-1)>>2である場合の変数varTempH1[x][y]、varTempV1[x][y]、varTempD01[x][y]、varTempD11[x][y]、及び、varTemp[x][y]を以下のように導出する。
sumH[x][y]=ΣiΣj filtH[(x<<2)+1][(y<<2)+j]、ここでx、yは-2~5である。
sumV[x][y]=ΣiΣj filtV[(x<<2)+1][(y<<2)+j]、ここでx、yは-2~5である。
sumD0[x][y]=ΣiΣj filtD0[(x<<2)+1][(y<<2)+j]、ここでx、yは-2~5である。
sumD1[x][y]=ΣiΣj filtD1[(x<<2)+1][(y<<2)+j]、ここでx、yは-2~5である。
sumOfHV[x][y]=sumH[x][y]+sumV[x][y]
【0254】
3) x,yが0~CtbSizeY-1である場合の変数dir1[x][y]、dir2[x][y]、dirS[x][y]を以下のように導出する。
変数hv1,hv0、及びdirHVについて以下のように導出する。
sumV[x>>2][y>>2]がsumH[x>>2][y>>2]より大きい場合は次を適応する。
hv1=sumV[x>>2][y>>2]
hv0=sumH[x>>2][y>>2]
dirHV=1
さもなければ、次を適用する。
hv1=sumH[x>>2][y>>2]
hv0=sumV[x>>2][y>>2]
dirHV=3
変数d1,d0及びdirDは次のように導出する。
sumD0[x>>2][y>>2]がsumD1[x>>2][y>>2]よりも大きい場合は次を適用する。
d1=sumD0[x>>2][y>>2]
d0=sumD1[x>>2][y>>2]
dirD=0
さもなければ、次を適用する
d1=sumD1[x>>2][y>>2]
d0=sumD0[x>>2][y>>2]
dirD=2
変数hvd1,hvd0は次のように導出する。
hvd1=(d1*hv0>hv1*d0)? d1:hv1
hvd0=(d1*hv0>hv1*d0)? d0:hv0
変数dirS[x][y],dir1[x][y]及びdir2[x][y]は次のように導出する。
dir1[x][y]=(d1*hv0>hv1*d0)? dirD:dirHV
dir2[x][y]=(d1*hv0>hv1*d0)? dirHV:dirD
dirS[x][y]=(hdv1>2*hdv0) ? 1:((hdv1*2>9*hvd0) ? 2:0)
【0255】
4) x、yが0~CtbSizeY-1の場合の変数avgVar[x][y]は以下のように導出する。
varTab[]={0,1,2,2,2,2,2,3,3,3,3,3,3,3,3,4}
avgVar[x][y]=varTab[Clip3(0,15,(sumOfHV[x>>2][y>>2]*64)>>(3+BitDepthY))])
【0256】
5) x=y=0からCtbSizeY-1である場合の、分離フィルタインデックスアレイfiltIdx[x][y]、及び、転置インデックスアレイtransposeIdx[x][y]は以下のように導出する。
transposeTable[]={0、1、0、2、2、3、1、3 }
transposeIdx[x][y]=transposeTable[dir[x][y]*2+(dir2[x][y]>>1)]
filtIdx[x][y]=avgVar[x][y]
dirS[x][y]が0に等しくないとき、fiktIdx[x][y]は次のように修正される。
filtIdx[x][y]+=(((dir1[x][y]&0x1)<<1)+dirS[x][y]*5
【0257】
クロマサンプルに対するコードツリーブロックフィルタ処理
このプロセスの入力は、アダプティブループフィルタリングプロセスの前の再構成されたクロマピクチャサンプルアレイrecPicture、フィルタリングされた再構成されたクロマピクチャサンプルアレイalfPicture、現在のピクチャの左上サンプルに対する現在のクロマコードツリーブロックの左上サンプルを指定するクロマロケーション(xCtbC,yCtbC)である。
このプロセスの出力は、修正されフィルタリングされた再構成されたクロマピクチャサンプルアレイalfPictureである。
【0258】
現在のクロマコードツリーブロックのサイズctbSizeCは、以下のように導出される:
ctbSizeC=CtbSizeY/SubWidthC
【0259】
フィルタリングされた再構成クロマサンプルalfPicture[x][y]の導出のために、現在のクロマコードツリーブロックrecPicture[x][y]内の各再構成クロマサンプルは、x、yが0~ctSizeC-1において、以下のようにフィルタリングされる。
クロマサンプルの所与のアレイrecPicturer内の対応するクロマサンプル(x、y)の各々の位置(hx、vy)は、以下のように導出される:
hx=Clip3(0、pic_width_in_luma_samples/SubWidthC-1,xCtbC+x)
vy=Clip3(0、pic_height_in_luma_samples/SubHeightC-1,yCtbC+y)
【0260】
変数currは次のように導出される。
curr=recPicture[hx、vy]
【0261】
変数sumは、次のように導出される。
sum= AlfCoeffCC[0]*(Clip3(-AlfClipC[0]、AlfClipC[0]、recPicture[hx、vy + 2] - curr) + Clip3(-AlfClipC[0]、AlfClipC[0]、recPicture[hx、vy- 2] - curr))
+ AlfCoeffC[1]*(Clip3(-AlfClipC[1]、AlfClipC[1]、recPicture[hx + 1、vy + 1]-curr) + Clip3(-AlfClipC[1]、AlfClipC[1]、recPicture[hx - 1、vy - 1]-curr))
+ AlfCoeffC[2]*(Clip3(-AlfClipC[2]、AlfClipC[2]、recPicture[hx、vy + 1]-curr)+ Clip3(-AlfClipC[2]、AlfClipC[2]、recPicture[hx、vy -1]-curr))
+ AlfCoeffC[ 3]*(Clip3(-AlfClipC[3]、AlfClipC[3]、recPicture[hx-1、vy + 1]-curr) + Clip3(-AlfClipC[3]、AlfClipC[3]、recPicture[hx + 1、vy - 1]- curr))
+ AlfCoeffC[ 4]*(Clip3(-AlfClipC[4]、AlfClipC[4]、recPicture[hx + 2、vy]-curr) + Clip3(-AlfClipC[4]、AlfClipC[4]、recPicture[hx-2、vy]-curr))
+ AlfCoeffC[5]*(Clip3(-AlfClipC[5]、AlfClipC[5]、recPicture[hx + 1、vy]-curr) + Clip3(-AlfClipC[5]、AlfClipC[5]、recPicture[hx-1、vy]-curr))
+ AldCoeffC[6]* recPicture[hx,vy]
【0262】
sum=(sum+64)>>7
【0263】
修正されフィルタリング後の再構成クロマピクチャサンプルalfPicture[xCtbC+x][yCtbC+y]は、以下のように導出される。
alfPicture[xCtbC+x][yCtbC+y]=Clip3(0,(1<<BitDepthC)-1,sum)
【0264】
上記の変形例では、クリッピング動作が、隣接サンプルとフィルタリングされたサンプルとの間の差に適用される(すなわち、式(7)が使用される)。式(9)を使用する別の変形では、そのセマンティクスおよびフィルタリング処理が以下のように修正される(上記の変形のセマンティクスおよびフィルタリング処理に基づいて修正される)。
- AlfCoeffL[filtIdx][12]は、以下のように導出される:
AlfCoeffL[filtIdx][12] = 128- Σk(AlfCoeffL[filtIdx][k]<<1)、ここで、k = 0~11である。
- AlfCoeffC[6]は、以下のように導出される:
AlfCoeffC[6] = 128 - Σk(AlfCoeffC[k]<<1)、ここでk=0~5である。
- AlfCoeffL[filtIdx][12]及びAlfCoeffC[6]のビット深度の制限(これらは0~2^8-1の範囲内にあるものとする)は、より良いフィルタリング性能を得るために、0~2^9-1まで、又は、0~2^10-1の範囲内にまで緩和される。
【0265】
これは、クリッピング演算ではより良い効率のため、隣接サンプル位置に関連する係数がより高く(絶対値で)なければならないことがしばしば起こるからである(なぜなら、フィルタ入力サンプルは非線形関数が適用されると、より信頼性が高く、すなわち、より良いフィルタリングを提供する可能性が高いからである)。その結果、これらの係数の合計(中心係数を含まない)が-128(固定小数点表現では)低くなることが頻繁に起こり、その結果、中心係数は256(固定小数点表現では)より高くなければならない。従って、中心係数を0~2^8-1の規範範囲に制限することは、エンコーダがそれらの動的/振幅を減少させることによって、サブ最適係数を見つける必要があることを意味し、その結果、効率的なフィルタリングがより少なくなる。中心係数に10ビット精度の規範的範囲(すなわち、0~2^10-1の範囲)を使用することによって、エンコーダが準最適フィルタ係数を使用しなければならない頻度はるかに低くなり、したがって、全体的なフィルタリング品質は、8ビット精度と比較して向上する。ALF線形フィルタリングでは、中心係数上の8ビットへの制限が、近傍フィルタ入力サンプルがしばしばより小さい重み(すなわち、より小さい係数)を有するので、フィルタ効率にあまり影響を及ぼさない。クリッピング、すなわちALF非線形フィルタリングではあるが、最適なフィルタは近傍サンプルにより多くの重みを与える可能性があり、これはいったんクリッピングされるとより信頼性が高くなる。
【0266】
“ルマサンプルのためのコーディングツリーブロックフィルタリング処理"における変数sumは、以下のように導出される。
sum= filterfCoeff[0]*(Clip3(curr-filterClip[0]、curr+filterClip[0]、recPictureL[hx、vy+3])+Clip3(curr-filterClip[0]、curr+filterClip[0]、recPictureL[hx、vy-3]))
+ filterCoeff[1]*(Clip3(curr-filterClip[1]、curr+filterClip[1]、recPictureL[hx+1、vy+2])+Clip(curr-filterClip[1]、curr+filterClip[1]、recPictureL[hx-1、vy-2]))
+filterCoeff[2]*(Clip3(curr-filterClip[2]、curr+filterClip[2]、recPictureL[hx、vy+2])+Clip3(curr-filterClip[2]、curr+filterClip[2]、recPictureL[hx、vy-2]))
+filterCoeff[3]*(Clip3(curr-filterClip[3]、curr+filterClip[3]、recPictureL[hx-1、vy+2])+Clip3(curr-filterClip[3]、curr+filterClip[3]、recPictureL[hx+1、vy-2]))
+filterCoeff[4]*(Clip3(curr-filterClip[4]、curr+filterClip[4]、recPictureL[hx+2、vy+1])+Clip3(curr-filterClip[4]、curr+filterClip[4]、recPictureL[hx-2、vy-1]))
+filterCoeff[5]*(Clip3(curr-filterClip[5]、curr+filterClip[5]、recPictureL[hx+1、vy+1])+Clip3(curr-filterClip[5]、curr+filterClip[5]、recPictureL[hx-1、vy-1]))
+filterCoeff[6]*(Clip3(curr-filterClip[6]、curr+filterClip[6]、recPictureL[hx、vy+1])+Clip3(curr-filterClip[6]、curr+filterClip[6]、recPictureL[hx、vy-1]))
+filterCoeff[7]*(Clip3(curr-filterClip[7]、curr+filterClip[7]、recPictureL[hx-1、vy+1])+Clip3(curr-filterClip[7]、curr+filterClip[7]、recPictureL[hx+1、vy-1]))
+filterCoeff[8]*(Clip3(curr-filterClip[8]、curr+filterClip[8]、recPictureL[hx-2、vy+1])+Clip3(curr-filterClip[8]、curr+filterClip[8]、recPictureL[hx+2、vy-1]))
+filterCoeff[9]*(Clip3(curr-filterClip[9]、curr+filterClip[9]、recPictureL[hx+3、vy])+Clip3(curr-filterClip[9]、curr+filterClip[9]、recPictureL[hx-3、vy]))
+filterCoeff[10]*(Clip3(curr-filterClip[10]、curr+filterClip[10]、recPictureL[hx+2、vy])+Clip3(curr-filterClip[10]、curr+filterClip[10]、recPictureL[hx-2、vy]))
+filterCoeff[11]*(Clip3(curr-filterClip[11]、curr+filterClip[11]、recPictureL[hx+1、vy])+Clip3(curr-filterClip[11]、curr+filterClip[11]、recPictureL[hx-1、vy]))
+filterCoeff[12]*recPictureL[hx、vy]
【0267】
sum=(sum+64)>>7
【0268】
“クロマサンプルのためのコーディングツリーブロックフィルタリング処理”における変数sumは、以下のように導出される:
sum= AlfCieffC[0]*(Clip3(curr-AlfClipC[0]、curr+AlfClipC[0]、recPicture[hx、vy + 2])+Clip3(curr-AlfClipC[0]、AlfClipC[0]、recPicture[hx、vy-2]))
+AlfCieffC[1]*(Clip3(curr-AlfClipC[1]、curr+AlfClipC[1]、recPicture[hx+1、vy+1])+Clip3(curr-AlfClipC[1]、curr+AlfClipC[1]、recPicture[hx-1、vy-1]))
+AlfCieffC[2]*(Clip3(curr-AlfClipC[2]、curr+AlfClipC[2]、recPicture[hx、vy+1])+Clip3(curr-AlfClipC[2]、curr+AlfClipC[2]、recPicture[hx、vy-1]))
+AlfCieffC[3]*(Clip3(curr-AlfClipC[3]、curr+AlfClipC[3]、recPicture[hx-1、vy+1])+Clip3(curr-AlfClipC[3]、curr+AlfClipC[3]、recPicture[hx+1、vy-1]))
+AlfCieffC[4]*(Clip3(curr-AlfClipC[4]、curr+AlfClipC[4]、recPicture[hx+2、vy])+Clip3(curr-AlfClipC[4]、curr+AlfClipC[4]、recPicture[hx-2、vy]))
+AlfCieffC[5]*(Clip3(curr-AlfClipC[5]、curr+AlfClipC[5]、recPicture[hx+1、vy])+Clip3(curr-AlfClipC[5]、curr+AlfClipC[5]、recPicture[hx-1、vy]))
+AlfCieffC[6]*recPicture[hx、vy]
【0269】
sum=(sum+64)>>7
【0270】
隣接サンプル値と中心サンプル値との間の差に適用されるクリッピングも使用する、Lumaフィルタのため(ALFを適用するために必要なバッファライン数を減らすため))の5×5ダイヤモンドフィルタ形状を使用する別の変形例では、テーブル4の非線形ALFデータシンタックスが以下のように修正される(以前に提示されたALFデータシンタックスに行われた変更が両方とも下線および太字であり、可能な限り繰り返される部分は省略される):
テーブル5 - 非線形ALFの修正部分
【0271】
ルナフィルタのALF係数の数は13 になるため、最後の係数フィルタの初期化処理は次のようになる。
filtIdx=0~NumAlfFilters-1における、最後のフィルタ係数AlfCoeffL[filtIdx][6]は以下のように導出される・
AlfCoeffL[filtIdx][6]=128
【0272】
ビットストリーム適合性要件では、filtIdx=0~NumAlfFilters-1、j=0~11における、AlfCoeffL[filtIdx][j]は、-2^7~2^7-1内にあり、AlfCoeffL[filtIdx][6]は0~2^8-1の範囲内になければならない。
【0273】
“ルマサンプルのためのコーディングツリーブロックフィルタリング処理”のための、“ルマサンプルのためのALF転置及びフィルタインデックスの導出”のフィルタインデックスの導出は以下のように修正される(以前に提示されたALFデータシンタックスに対して行われた変更が下線および太字の両方で示され、可能な限り繰り返される部分は省略される)。
【0274】
フィルタインデックス節“ALF転置及びルマサンプルのフィルタインデックスの導出プロセス”は、ロケーション(xCtb、yCtb)、および再構成されたルマピクチャサンプルアレイrecPictureLを入力とし、x、y=0~CtSizeY-1におけるfiltIdx[x][y]およびtransposeIdx[x][y]を呼び出される。
【0275】
フィルタリングされた再構成輝度サンプルalfPictureL[x][y]の導出のために、現在のルマコーディングツリーブロックrecPictureL[x][y]内の各再構成ルマサンプルは、x、y =0~CtbSizeY-1にて、以下のようにフィルタリングされる。
【0276】
filtIdx[x][y]によって指定されるフィルタに対応するルマフィルタ係数f[j]のアレイ、及び、ルマフィルタクリッピングc[j]のアレイは、j =0~6では以下のように導出される。
f[j]=AlfCoeffL[x][y][j]
c[j]=AlfClipL[x][y][j]
【0277】
ルマフィルタ係数filterCoeffおよびフィルタクリッピング値filterClipは、以下のようにtransposeIdx[x][y]に応じて導出される。
transposeIndex[x][y]==1の場合
filterCoeff[]={f[4]、f[1]、f[5]、f[3]、f[0]、f[2]、f[6]}
filterClip[]={c[4]、c[1]、c[5]、c[3]、c[0]、c[2]、c[6]}
そうではなく、transposeIndex[x][y]==2の場合、
filterCoeff[]={f[0]、f[3]、f[2]、f[1]、f[4]、f[5]、f[6]}
filterClip[]={c[0]、c[3]、c[2]、c[1]、c[4]、c[5]、c[6]}
そうではなく、transposeIndex[x][y]==3の場合、
filterCoeff[]={f[4]、f[3]、f[5]、f[1]、f[0]、f[2]、f[6]}
filterClip[]={C[4]、c[3]、c[5]、c[1]、c[0]、c[2]、c[6]}
それ以外の場合
filterCoeff[]={f[0]、f[1]、f[2]、f[3]、f[4]、f[5]、f[6]}
filterClip[]={c[0]、c[1]、c[2]、c[3]、c[4]、c[5]、c[6]}
【0278】
ルマサンプルの所与のアレイrecPicture内の対応するルマサンプル(x、y)の各々の位置(hx、vy)は、以下のように導出される。
hx=Clip3(0、pic_width_in_luma_samples-1、xCtb + x)
vy=Clip3(0、pic_height_in_luma_samples - 1、yCtb + y)
【0279】
変数currは、以下のように導出される: curr=recPictureL[hx、vy]
【0280】
変数sumは次のように導出される。
sum= filterCoeff[0]*(Clip3(-filter[0],filterClip[0]、recPictureL[hx、vy + 2]- curr)+Clip3(-filterClip[0]、filterClip[0]、recPictureL[hx、vy-2]-curr))
+ filterCoeff[1]*(Clip3(-filterClip[1]、filterClip[1]、recPictureL[hx+1、vy+1]-curr)+Clip3(-filterClip[1]、filterClip[1]、recPictureL[hx-1、vy-1]-curr))
+ filterCoeff[2]*(Clip3(-filterClip[2]、filterClip[2]、recPictureL[hx、vy+1]-curr)+Clip3(-filterClip[2]、filterClip[2]、recPictureL[hx、vy-1]-curr))
+ filterCoeff[3]*(Clip3(-filterClip[3]、filterClip[3]、recPictureL[hx-1、vy+1]-curr)+Clip3(-filterClip[3]、filterClip[3]、recPictureL[hx+1、vy-1]-curr))
+ filterCoeff[4]*(Clip3(-filterClip[4]、filterClip[4]、recPictureL[hx+2、vy]-curr)+Clip3(-filterClip[4]、filterClip[4]、recPictureL[hx-2、vy]-curr))
+ filterCoeff[5]*(Clip3(-filterClip[5]、filterClip[5]、recPictureL[hx+1、vy]-curr)+Clip3(-filterClip[5]、filterClip[5]、recPictureL[hx-1、vy]-curr))
+ filterCoeff[6]*recPictureL[hx、vy]
【0281】
sum=(sum+64)>>7
【0282】
修正されフィルタリングされた再構成ルマ画像サンプルalfPictureL[xCtb+x][yCtb+y]は、以下のように導出される。
alfPictureL[xCtb+x][yCtb+y]=Clip3(0、(1<<BitDepthY)-1、sum)
【0283】
近傍と中心との間の差異を使用しない変形例では、k=0~5において、AlfCoeffL[filtIdx][6]=128-Σk(AlfCoeffL[filtIdx][k])が使用される。フィルタリングでは、フィルタリングのクリッピングパラメータと同様の変更も行われる。
【0284】
別の変形例では、フィルタのために7×7ダイヤモンド形状を使用するが、ルマフィルタのために
図16-aのクリッピングパターン1601、クロマフィルタのために
図16-bのクリッピングパターン1605を使用して、テーブル4の非線形ALFデータシンタックスは以下のように修正される(以前に例示されたテーブル4のALFデータシンタックスに行われた変更、両方とも下線および太字であり、可能な限り繰り返される部分は省略される)。
テーブル6 - 非線形ALFデータシンタックスの修正部分
【0285】
AlfClipPatL[]は、Lumaフィルタの定数クリッピングパターンテーブルであり、以下のように設定される:
AlfClipPatL[]={0、0、1、0、0、0、1、0、0、0、1、1}
【0286】
AlfClipPatC[]はChromaフィルタの定数クリッピングパターンテーブルであり、以下のように設定される:
AlfClipPatC[]={1、1、0、1、1、0}
【0287】
セマンティクスの一部は、以下のように修正される。
- “ルマサンプルのためのコーディングツリーブロックフィルタリングプロセス”における変数sumは、以下のように導出される.
sum=filterCoeff[0]*(recPictureL[hx、vy+3]-curr + recPicture[hx、vy-3]-curr)
+filterCoeff[1]*(recPicure[hx+1、vy+2]-curr)+recPictureL[hx-1、vy-2]-curr)
+filterCoeff[2]*(Clip3(-filterClip[2]、filterClip[2]、recPictureL[hx、vy+2]-curr)+Clip3(-filterClip[2]、filterClip[2]、recPictureL[hx、vy-2]-curr))
+ filterCoeff[3]*(recPictureL[hx-1、vy+2]-curr+recPictureL[hx+1、vy-2]-curr)
+ filterCoeff[4]*(recPictureL[hx+2、vy+1]-curr+recPictureL[hx-2、vy-1]-curr)
+ filterCoeff[5]*(recPictureL[hx+1、vy+1]-curr+recPictureL[hx-1、vy-1]-curr)
+ filterCoeff[6]*(Clip3(-filterClip[6]、filterClip[6]、recPictureL[hx、vy+1]-curr)+Clip3(-filterClip[6]、filterClip[6]、recPictureL[hx、vy-1]-curr))
+ filterCoeff[7]*(recPictureL[hx-1、vy+1]-curr+recPictureL[hx+1、vy-1]-curr)
+ filterCoeff[8]*(recPictureL[hx-2、vy+1]-curr+recPictureL[hx+2、vy-1]-curr)
+ filterCoeff[9]*(recPictureL[hx+3、vy]-curr+recPictureL[hx-3、vy]-curr)
+filterCoeff[ 10]*(Clip3(-filterClip[10]、filterClip[10]、recPictureL[hx+2、vy]-curr)+Clip3(-filterClip[10]、filterClip[10]、recPictureL[hx-2、vy]-curr))
+filterCoeff[ 11]*(Clip3(-filterClip[11]、filterClip[11]、recPictureL[hx+1、vy]-curr)+Clip3(-filterClip[11]、filterClip[11]、recPictureL[hx-1、vy]-curr))
+filterCoeff[ 12]*recPictureL[hx、vy]
【0288】
sum=(sum+64)>>7
【0289】
“クロマサンプルのためのコーディングツリーブロックフィルタリング処理」における変数sumは、以下のように導出される。
sum=AlfCoeffC[0]*(Clip3(-AlfClipC[0]、AlfClipC[0]、recPicture[hx、vy+2]-curr)+Clip3(-AlfClipC[0]、AlfClipC[0]、recPicture[hx、vy-2]-curr))
+AlfCoeffC[1]*(Clip3(-AlfClipC[1]、AlfClipC[1]、recPicture[hx+1、vy+1]-curr)+Clip3(-AlfClipC[1]、AlfClipC[1]、recPicture[hx-1、vy-1]-curr))
+AlfCoeffC[2]*(recPicture[hx、vy+1]-curr+recPicture[hx、vy-1]-curr)
+AlfCoeffC[3]*(Clip3(-AlfClipC[3]、AlfClipC[3]、recPicture[hx-1、vy+1]-curr)+Clip3(-AlfClipC[3]、AlfClipC[3]、recPicture[hx+1、vy-1]-curr))
+AlfCoeffC[4]*(Clip3(-AlfClipC[4]、AlfClipC[4]、recPicture[hx+2、vy]-curr)+Clip3(-AlfClipC[4]、AlfClipC[4]、recPicture[hx-2、vy]-curr))
+AlfCoeffC[5]*(recPicture[hx+1、vy]-curr+recPicture[hx-1、vy]-curr)
+AlfCoeffC[6]*recPicture[hx、vy]
【0290】
他のクリッピングパターンを使用する他の変形形態は、前述の変形形態から容易に導出することができることが理解される。同様に、クリッピングの数を減らす(すなわち、クリッピング位置を減らす、すなわち、式(17)および
図7のように、ルマ成分についてはクリッピング無しが、“f[12]”無し、“c[12]”無し、“filterCoeff[12]”無し、及び、“(sum=curr+(sum+64)>>7)”無しとなるように、現在(中心)サンプル値“curr”に適用される)、及び/又は、隣接サンプルと中心サンプルとの間の差を使用しない変形例も導出することができる。
【0291】
図8は、本発明の一実施形態に従った、
図7のフィルタの非線形部分が無効にされたときに得られる線形フィルタのブロック図である。一実施形態によれば、ALFがアクティブであり、非線形ALFが非アクティブである場合、フィルタリングのために線形ALFが使用される。このような実施形態の変形例では、非線形ALFが(7)式で定義され、
図7に図示されるように使用され、(4)式で定義され、
図6に図示されるような線形ALFを使用する代わりに、式(6)で定義され、
図8に図示されるように線形フィルタリングが実行される。ハードウェア設計では、非線形フィルタと線形フィルタとの間の共通回路部品を共有することが可能になる。
図7と
図8を比較すると、最小/最大演算は単にバイパスされ、サンプル値に直接進む。このアプローチを使用するもう1つの利点は、エンコーダがフィルタを設計する際に、各フィルタのすべてのフィルタ係数の合計が1であることを確実にする必要がないことである。このデザインの結果、現在のサンプルを除き、係数ごとに1つの減算を加え、現在のサンプルに対して1つの乗算を除去できるいうことである。
【0292】
図7の設計はまた、クリッピングパラメータがとり得る最大値が十分に低い場合に、乗算を実施するためのハードウェアビットを節約するという利点を有する。
【0293】
一実施形態によれば、
図5のスライスヘッダ内にシグナリングされるALFのシンタックス要素は、もはやスライスヘッダでシグナリングされず、代わりに、例えばピクチャヘッダでフレームレベルでシグナリングされる。次に、スライスヘッダ内に、フレームレベルで提供されるパラメータがスライス内で直接使用されること、もしくは、フレームレベルで提供されるパラメータが“フレッシュ”(すなわち、更新されること)されなければならないことをシグナルするための1つまたは複数のフラグ/シンタックス要素がある。スライスレベルでの、このリフレッシュは、スライスヘッダ内にて行われる。フィルタ係数および/またはクリッピングパラメータのリフレッシュは、フレームレベルで示される値とスライスで使用する値との間の差を符号化することによって行われる。一実施形態によれば、スライスヘッダ内の追加のシンタックス要素は、フィルタ係数および/またはクリッピングパラメータの値がスライスヘッダ内で差分として符号化されているかどうか、またはそれらの値が符号化されているかどうかを示す。
【0294】
一実施形態によれば、(スライスヘッダ内の)スライスレベルで定義されたフィルタ係数および/またはクリッピングパラメータは、(例えば、各CTUについて)より細かい粒度レベル(granularity level)で更新することができる。更新が実行されるべきかどうかを示すシンタックス要素は、更新が実行されなければならないことを示すときに、更新データだけでなく、スライスデータ内でエントロピー符号化される。一実施形態では、符号化ビットストリームにおいて、各CTUについて、符号化されたスライスデータは、ルマフィルタ/クリッピングパラメータを更新する必要があるかどうかを示すエントロピー符号化されたフラグを1つ含む。フラグが更新が行われるべきであることを示す場合、フィルタ係数の各テーブルについて、エントロピー符号化フラグはフィルタが更新されなければならないかどうかを示す。フィルタを更新しなければならない場合、係数のオフセット(スライス内の基準値との差、または同じスライスに属する以前に符号化されたCTU内の基準値との差)および/またはクリッピングパラメータのオフセットはエントロピー符号化される。
【0295】
一実施形態によれば、エンコーダの観点から、
図9を参照して説明したVTM-3.0のALF符号化プロセスの主な論理ステップが維持される。主な変更は、フィルタを構築するために抽出される統計の性質、およびフィルタが決定される方法である。
単純なウィーナーフィルタ(Wiener Filter)演算の代わりに、クリッピングパラメータを繰り返し最適化して、最良のクリッピングパラメータ及び関連する非線形Wウィーナーフィルタ係数を見つる。
【0296】
一実施形態によれば、我々はNK、1つのクリッピングパラメータが取ることができる値の数の限界を定義する。NKは小さくでき、例えば、NK=12もしくは、それ以下である。次に、ステップ902において、共分散および相互共分散行列統計を計算する代わりに、エンコーダは、NK×NKクリッピング共分散行列統計の2エントリテーブルE、および、NKクリッピング相互共分散行列統計の1エントリテーブルyを構築する(1つの共分散行列統計および1つの相互共分散行列統計の代わりに)。
【0297】
クリッピング共分散行列E
c[a][b]は、
から推定される共分散行列である。ここで、X
mは、C
m番目のクリッピング値を使用するときの入力のN個の実数(観測値)を含む。たとえば、
図4-bの形状を使用すると、X
i
mは、所与のサンプル位置に対して得たX
mの第iカラムであり、X
i,j
mは、i<N
C(
図4-bのルマフィルタではN
C=12がフィルタ係数の数-1)において、m番目のクリッピングパラメータを用いて、(第j番目のフフィルタリングされたサンプル)の隣接サンプルとm番目のクリッピング値との間の差のクリッピング結果の合計(sum)を含む。ここで、形状における2つの対称な隣接に対して、及び、i=12とした場合の第j番目のフィルタされたサンプル、ここで、X
i,j
mは行i、列jにおける値である。
【0298】
クリッピング相互共分散行列yC[C]は、所望のフィルター出力(すなわち、オリジナルサンプル)の実現値とXCの実現値との間の相互共分散行列である。
【0299】
我々は、
に等しいクリッピングパラメータを使用して、フィルタを構築/テストするとき、
を定義する(ここで、例えばルマフィルタではN
C=12が、フィルタ係数の数-1にであり、ゼロに等しい最後の値は便利であり、他の値は中心係数12がクリッピングされないので、別の値を使用することができ、同じ結果を有することになる)。
我々は、i<N
c,j<N
Cであり、k<N
cであるときのy[k]=y
c[C[k]][k]について、E[i,j]=E
C[C[i]][C[j]][i,j]となるクリッピングパラメータの共分散行列Eおよび相互共分散行列yを算出する。次に、我々は、線形ALFについて前述したように、この2つの行列を用いてウィナーフィルタを構築する。
【0300】
ステップ904にて、共分散行列と相互共分散行列の統計を組合せる代わりに、エンコーダは、各クリッピング-共分散行列とクリッピング-相互共分散行列の統計を組合せる(ここでも、この組合せは、統計を合計することによって行われる)。
【0301】
ステップ905にて、フィルタの最適化されたグループ(すなわち、最適化されたマージされたフィルタ)を見つけるために使用される方法は、以前と同様である。主な違いは、試験/比較された各フィルタについて、ただ1つのウィーナーフィルタを計算する代わりに、クリッピングパラメータが反復的に最適化され、各ステップは特定のクリッピングパラメータについてウィーナーフィルタを計算し、フィルタの出力誤差(統計行列上で計算される)を最小化することである。単純な最適化アルゴリズムは、すべてのクリッピングパラメータ値(Ci)がゼロに設定される(または中央クリッピング値または任意のデフォルト値に設定される)から開始し、次いで、ループ内の以下のステップに従い、フィルタを改善(すなわち、出力誤差を低減する)していくことである:各クリッピングパラメータ値について、利用可能/許可される場合、次のクリッピングパラメータ値をとり(すなわち、インデックス<最大インデックス値)、このクリッピングパラメータ値を用いて計算されたウィーナーフィルタがより良好である場合、このクリッピングパラメータ値を用いて計算されたウィーナーフィルタは利用可能/許可される場合(すなわち、インデックス>0)、このクリッピングパラメータ値を用いて計算されたウィーナーフィルタがより良好である。2つのフィルタをグループ化する場合、1つの戦略は、各クリッピングパラメータ値が2つのフィルタの各クリッピングパラメータ値の平均に設定された状態で最適化を開始することであり得る。
【0302】
ステップ906、907、908、909、910および911には、実際の変更はない。
【0303】
ステップ912にて、結合された統計変更はステップ904について説明したものと同じである。ステップ913におけるクロマフィルタの決定は、ステップ905について説明したフィルタ最適化に対応する。ALFパラメータが各フィルタについて決定されたクリッピングパラメータを含むステップ918を除いて、他のステップは変更されない。
【0304】
「通常の」ALFを用いるVTM-3.0では、エンコーダが浮動小数点値から整数フィルタ係数を導出するとき、エンコーダは最初に浮動小数点値の固定小数点値への量子化を実行する:各フィルタ係数について、フィルタ係数乗算を固定小数点精度で最も近い整数値に丸めることに留意されたい。次に、フィルタ係数を反復的に調整して(丸め誤差を補正するために)、フィルタ効率を改善しようとする。また、エンコーダは、すべてのフィルタ係数の合計が(固定小数点精度で乗算された)1に等しく、中心サンプルのフィルタ係数が最大値を超えないことを保証しなければならない(乗算におけるその使用があまり多くのビットを使用することにならないことを保証するため)。
【0305】
隣接サンプルとの差がフィルタの入力として使用される本発明の実施形態では、中心係数が常に1であるので、それが最大値を超えないことを確実にする必要はない。また、全てのフィルタ係数の和の値を追跡する必要もない。
【0306】
これらの実施形態の利点は、符号化効率の改善である。
これらの実施形態の説明はルマ成分およびクロマ成分に言及しているが、それらは単一のルマ成分またはRGB成分などの他の成分に容易に適合させることができる。
【0307】
前述の実施形態または変形例では、本発明が、
図3-aおよび
図4-aの304および407のフィルタリングを修正して、フィルタ入力に非線形関数を使用して非線形フィルタリング効果を得る。
図2はまた、非線形関数のための追加のパラメータをシグナリングするための新しいシンタックス要素を追加するように修正される(実施形態の一例を
図5を参照して説明した)。暗黙のうちに、302および402における入力フィルタリングパラメータは、非線形関数のための追加パラメータをさらに含むように修正される。最後に、303および406におけるフィルタ導出は修正され、フィルタに対する非線形関数を導出する(すなわち、「非線形フィルタ」を導出する)。従って、ほとんどの状況において、出力画像部分305及び408は、VTM-3.0において生成されるものと同じではなく、等価/比較可能な入力サンプルに対してより高い品質を有し、及び/又は出力画質と符号化効率との間のより良い妥協を達成する。別の実施形態/変形形態では、ALF自体が前述の非線形関数のいずれかを使用してフィルタリングするように動作するように修正されることを理解されたい。
【0308】
本発明の実施形態の実施
前述の実施形態のうちの1つまたは複数は、1つまたは複数の前述の実施形態の方法ステップを実行するエンコーダまたはデコーダの形態で実装され得る。以下の実施形態は、そのような実装を例示する。
【0309】
例えば、前述の実施形態のいずれかによるアダプティブループフィルタは、
図10のエンコーダによって実行されるポストフィルタリング9415、または
図11のデコーダによって実行されるポストフィルタリング9567において使用され得る。
【0310】
図10は、本発明の一実施形態によるエンコーダのブロック図を示す。エンコーダは、接続されたモジュールによって表され、各モジュールは例えば、デバイスの中央処理装置(CPU)によって実行されるべきプログラム命令の形態で、本発明の1つまたは複数の実施形態による画像シーケンスの画像を符号化する少なくとも1つの実施形態を実施する方法の少なくとも1つの対応するステップを実施するように適合される。
【0311】
9401のデジタル画像i0~inのオリジナルシーケンスは、エンコーダ9400によって入力として受信される。各デジタル画像は、時には画素(以下、画素と呼ぶ)とも呼ばれるサンプルのセット(集合)によって表される。ビットストリーム9410は、符号化プロセスの実施後にエンコーダ9400によって出力される。ビットストリーム9410は、複数の符号化単位またはスライスのような画像部分のためのデータを含み、各スライスは、スライスを符号化するために使用される符号化パラメータの符号化値を送信するためのスライスヘッダと、符号化されたビデオデータを含むスライス本体とを含む。
【0312】
9401の入力デジタル画像i0~inは、モジュール9402によってピクセルのブロックに分割される。ブロックは画像部分に対応し、可変サイズであってもよい(例えば、4×4、8×8、16×16、32×32、64×64、128×128ピクセル、および、いくつかの矩形ブロックサイズも考慮することができる)。符号化モードは、各入力ブロックに対して選択される。空間予測符号化(イントラ予測)に基づく符号化モードと、時間予測に基づく符号化モード(インター符号化、MERGE、SKIP)との2つの符号化モードのファミリが提供される。可能な符号化モードがテストされる。
【0313】
モジュール9403は、符号化されるべき所与のブロックが当該符号化されるべき前記ブロックの近傍の画素から計算された予測子によって予測されるイントラ予測処理を実施する。選択されたイントラ予測子の指示、および所与のブロックとその予測子との間の差は、イントラ符号化が選択された場合に残差を提供するために符号化される。
【0314】
時間的予測は、動き推定モジュール9404および動き補償モジュール9405によって実施される。最初に、参照画像9416のセットの中から参照画像が選択され、符号化されるべき所与のブロックに最も近いエリア(画素値類似性に関して最も近い)で参照エリアまたは画像部分とも呼ばれる参照画像の部分が、動き推定モジュール9404によって選択される。次に、動き補償モジュール9405は、選択された領域を使用して、符号化されるブロックを予測する。選択された参照領域と所与のブロックとの間の差は、残差ブロック/データとも呼ばれ、動き補償モジュール9405によって計算される。選択された参照領域は動き情報(例えば、動きベクトル)を用いて示される。
【0315】
したがって、両方の場合(空間的予測および時間的予測)において、SKIPモードになり場合は、残差はオリジナルのブロックから予測を減算することによって計算される。
【0316】
モジュール9403によって実施されるINTRA予測では、予測方向が符号化される。モジュール9404、9405、9416、9418、9417によって実施されるインター予測では、少なくとも1つの動きベクトルまたは、そのような動きベクトルを識別するための情報(データ)が時間予測のために符号化される。インター予測が選択された場合、動きベクトルおよび残差ブロックに関連する情報が符号化される。ビットレートをさらに低減するために、動きが均一であると仮定すると、動きベクトルは、動きベクトル予測子に対する差によって符号化される。1組の動き情報予測子候補からの動きベクトル予測子は、動きベクトル予測符号化モジュール9417によって動きベクトルフィールド9418から得られる。
【0317】
エンコーダ9400は、さらに、レート歪み基準などの符号化コスト基準を適用することによって、符号化モードを選択するための選択モジュール9406を含む。冗長性をさらに低減するために、変換モジュール9407によって変換(DCTなど)が残差ブロックに適用され、得られた変換データは、次いで、量子化モジュール9408によって量子化され、エントロピー符号化モジュール9409によってエントロピー符号化される。最後に、SKIPモードになく、選択された符号化モードは残差ブロックの符号化を必要とする場合には、符号化されている現在のブロックの符号化された残差ブロックはビットストリーム9410に挿入される。
【0318】
エンコーダ9400は、後続の画像の動き推定のための参照画像(例えば、参照画像/ピクチャ9416内のもの)を生成するために、符号化された画像の復号も行う。これにより、ビットストリームを受信するエンコーダ及びデコーダが同じ参照フレームを有することを可能にする(例えば、再構成された画像又は再構成された画像部分が使用される)。逆量子化(「逆量子化」)モジュール9411は、量子化されたデータの逆量子化(「逆量子化」)を実行し、その後、逆変換モジュール9412によって実行される逆変換が続く。イントラ予測モジュール9413は、予測情報を使用して、所与のブロックにどの予測を使用すべきかを決定し、動き補償モジュール9414は、モジュール9412によって得られた残差を、参照画像9416の設定から得られた参照領域に実際に加算する。その後、モジュール9415によってポストフィルタリングが適用され、画素の再構成フレーム(画像または画像部分)をフィルタリングして、参照画像9416のセットの別の参照画像を得る。
【0319】
図11は、本発明の一実施形態による、エンコーダからデータを受信するために使用され得るデコーダ9560のブロック図を示す。デコーダは、接続されたモジュールによって表され、各モジュールは例えば、デバイスのCPUによって実行されるプログラム命令の形成で、デコーダ9560によって実装される方法の対応するステップを実装するように構成される。
【0320】
受信するデコーダ9560は、符号化単位(例えば、画像部分、ブロックまたは符号化単位に対応するデータ)を含むビットストリーム9561を受信する。各符号化単位は、符号化パラメータに関する情報を含むヘッダと、符号化されたビデオデータを含むボディとから構成される。
図10に関して説明したように、符号化されたビデオデータはエントロピー符号化され、動き情報(例えば、動きベクトル予測子のインデックス)は所与の画像部分(例えば、ブロックまたはCU)について、所定のビット数で符号化される。受信された符号化ビデオデータは、モジュール9562によってエントロピーデコードされる。次いで、残留データは、モジュール9563によって逆量子化され、次いで、逆変換がモジュール9564によって適用され、ピクセル値が得られる。
【0321】
符号化モードを示すモードデータもエントロピーデコードされ、このモードに基づいて、画像データの符号化ブロック(単位/セット/グループ)に対してINTRAタイプデコードまたはINTERタイプデコードが行われる。INTRAモードの場合、ビットストリームにおいて指定されたイントラ予測モードに基づき、イントラ予測子がイントラ予測モジュール9565によって決定される(例えば、イントラ予測モードは、ビットストリームにおいて提供されるデータを使用して決定可能である)。モードがINTERモードである場合、エンコーダによって使用される参照領域を見つける(識別する)ために、動き予測情報がビットストリームから抽出/取得される。動き予測情報は、例えば、参照フレームインデックスと、動きベクトル残差とを含む。動きベクトル予測子は、動きベクトル復号モジュール9570によって動きベクトル残差に加算され、動きベクトルが得られる。
【0322】
動きベクトル復号モジュール9570は、動き予測によって符号化された各画像部分(例えば、現在のブロックまたはCU)に対して動きベクトル復号を適用する。現在のブロックの動きベクトル予測子のインデックスが得られると、画像部分(例えば、現在のブロックまたはCU)に関連する動きベクトルの実際の値が復号され、モジュール9566によって動き補償を適用するために使用することができる。復号された動きベクトルによって示される参照画像部分が、モジュール9566が動き補償を実行することができるように、参照画像9568の設定から抽出/取得される。動きベクトルフィールドデータ9571は、後に復号される動きベクトルの予測に使用されるために、復号された動きベクトルで更新される。
【0323】
最後に、復号されたブロックが得られる。適切には、ポストフィルタリングがポストフィルタリングモジュール9567によって適用される。デコードされたビデオ信号9569が、デコーダ9560によって、最終的に得られ、提供される。
【0324】
図12は、本発明の1つまたは複数の実施形態を実施することができるデータ通信システムを示す。データ通信システムは、データ通信ネットワーク9200を介して、データストリーム9204のデータパケットを受信装置、この場合はクライアント端末9202に送信するように動作可能な送信装置、この場合はサーバ9201を含む。データ通信ネットワーク9200は、ワイドエリアネットワーク(WAN)またはローカルエリアネットワーク(LAN)であってもよい。このようなネットワークは例えば、無線ネットワーク(WiFi/802.11aまたはbまたはg)、イーサネットネットワーク、インターネットネットワーク、または複数の異なるネットワークから構成される混合ネットワークであってもよい。本発明の特定の実施形態では、データ通信システムがサーバ9201が同じデータコンテンツを複数のクライアントに送信するデジタルテレビ放送システムであってもよい。
【0325】
サーバ9201によって提供されるデータストリーム9204は、ビデオおよびオーディオデータを表すマルチメディアデータから構成されてもよい。オーディオおよびビデオデータストリームは、本発明のいくつかの実施形態ではそれぞれマイクロフォンおよびカメラを使用してサーバ9201によってキャプチャされ得る。いくつかの実施形態において、データストリームはサーバ9201上に記憶されてもよく、あるいは別のデータプロバイダからサーバ9201によって受信されてもよく、あるいはサーバ9201で生成されてもよい。サーバ9201は特に、エンコーダへの入力として提示されるデータのよりコンパクトな表現である送信のための圧縮ビットストリームを提供するために、ビデオストリームおよびオーディオストリームを符号化するためのエンコーダを備える。伝送されるデータの品質対伝送されるデータの量のより良好な比を得るために、ビデオデータの圧縮は例えば、高効率ビデオ符号化(HEVC)フォーマット、またはH.264/Advanced Video Coding(Advanced video Coding)フォーマット、またはVersatile Video Coding(VVC)フォーマットに従ってもよい。クライアント9202は、送信されたビットストリームを受信し、再構成されたビットストリームをデコードして、表示装置上でビデオ画像を再生し、スピーカによってオーディオデータを再生する。
【0326】
この実施形態ではストリーミングシナリオが考慮されるが、本発明のいくつかの実施形態では、エンコーダとデコーダとの間のデータ通信が例えば、光ディスクなどの媒体記憶デバイスを使用して実行され得ることが理解されるのであろう。本発明の1つまたは複数の実施形態では、ビデオ画像が画像の再構成されたピクセルに適用して最終画像内にフィルタリングされたピクセルを提供するために、補償オフセットを表すデータと共に送信され得る。
【0327】
図13は、本発明の少なくとも1つの実施形態を実施するように構成された処理装置9300を概略的に示す。処理装置9300は、マイクロコンピュータ、ワークステーション、ユーザ端末、またはライトポータブル装置などの装置とすることができる。デバイス/装置9300は、通信バス9313を備え、これは以下の構成が接続される:
- マイクロプロセッサのよう、CPUとして示される中央演算装置9311;
- デバイス9300を動作させるための、および/または本発明を実施するためのコンピュータプログラム/命令を格納するための、ROMとして示される、読み出し専用メモリ9307;
- 本発明の実施形態の実行可能コード、ならびに本発明の実施形態に係るデジタル画像のシーケンスを符号化する方法および/またはビットストリームを復号する方法を実現するために必要な変数およびパラメータを記録するように構成されたレジスタを記憶するための、RAMと示される、ランダムアクセスメモリ9312と、
- 処理されるデジタルデータが送信または受信される通信ネットワーク9303に接続された通信インターフェース9302。
【0328】
オプションで、装置9300は、以下の構成要素を含むこともできる:
- 本発明の1つまたは複数の実施形態の方法を実施するためのコンピュータプログラム、および本発明の1つまたは複数の実施形態の実施中に使用または生成されるデータを記憶するための、ハードディスクなどのデータ記憶手段9304;
- ディスク9306(例えば記憶媒体)のためのディスクドライブ9305、ここでディスク駆動9305は、ディスク9306からデータを読み取るか、またはディスク9306にデータを書き込むように構成されている。または、
- キーボード9310、タッチスクリーン、または他の任意のポインティング/入力手段によって、データを表示し、および/またはユーザとのグラフィカルインターフェースとして機能するためのスクリーン9309。
【0329】
装置9300は例えば、デジタルカメラ9320またはマイクロフォン9308などの様々な周辺機器に接続することができる。ここで各周辺機器は、マルチメディアデータを装置9300に供給するように入出力カード(図示せず)に接続される。
【0330】
通信バス9313は、装置9300に含まれる、またはそれに接続された種々の要素間の通信および相互運用性を提供する。バスの表現は限定的ではなく、特に、中央演算処理装置9311は、装置9300の任意の要素に直接または装置9300の別の要素によって命令を通信するように動作可能である。
【0331】
ディスク9306は例えばコンパクトディスク、書き換え可能、またはそわないなどの任意の情報媒体、ZIPディスクまたはメモリカードによって置き換えることができ、一般的に言えば、マイクロコンピュータまたはプロセッサによって読み取ることができる情報記憶手段によって置き換えることができ、装置に統合されているか、または組み込まれていない、可能であれば取り外し可能であり、実行がデジタル画像のシーケンスを符号化する方法および/または本発明によるビットストリームを復号する方法を可能にする1つ以上のプログラムを記憶するように構成されている。
【0332】
実行可能コードは、読み出し専用メモリ9307、ハードディスク9304、または先に説明したような例えばディスク9306のようなリムーバブルデジタル媒体のいずれかに格納することができる。変形例によれば、プログラムの実行可能コードは例えばハードディスク9304内で実行される前に装置9300の記憶手段の1つに記憶されるために、インターフェース9302を介して、通信ネットワーク9303によって受信することができる。
【0333】
中央演算処理装置9311は、前述の記憶手段の1つに記憶された命令で本発明によるプログラムまたはプログラムのソフトウェアコードの命令または部分の実行を制御し、指示するように構成されている。電源を入れると、例えばハードディスク9304、ディスク9306、または読み出し専用メモリ9307上の不揮発性メモリに記憶されているプログラムまたはプログラムが、ランダムアクセスメモリ9312に転送され、その後、プログラムまたはプログラムの実行可能コード、ならびに本発明を実施するために必要な変数およびパラメータを記憶するためのレジスタを含む。
【0334】
この実施形態では、装置は本発明を実施するためにソフトウェアを使用するプログラマブル装置である。しかしながら、代替的に、本発明はハードウェア(例えば、特定用途向け集積回路(ASIC)の形態)で実施されてもよい。
【0335】
本発明の実施形態の実施
また、本発明の他の実施形態によれば、前述の実施形態によるデコーダがコンピュータ、携帯電話(携帯電話)、タブレット、またはコンテンツをユーザに提供/表示することができる任意の他のタイプのデバイス(例えば、ディスプレイ装置)などのユーザ端末に提供されることも理解される。さらに別の実施形態によれば、前述の実施形態によるエンコーダはエンコーダがエンコードするためのコンテンツをキャプチャし、提供するカメラ、ビデオカメラ、またはネットワークカメラ(例えば、閉回路テレビまたはビデオ監視カメラ)も備える画像キャプチャ装置に提供される。2つのこのような実施形態が、
図14および15を参照して以下に提供される。
【0336】
図14は、ネットワークカメラ9452およびクライアント装置9454を備えるネットワークカメラシステム9450のブロック図である。
【0337】
ネットワークカメラ9452は、撮像部9456、符号化部9458、通信部9460、および制御部9462を含む。ネットワークカメラ9452とクライアント装置9454は、ネットワーク9200を介して相互に通信可能に接続されている。撮像部9456は、レンズおよびイメージセンサ(例えば、電荷結合素子(CCD)または相補型金属酸化膜半導体(CMOS))を含み、物体の画像を捕捉し、その画像に基づいて画像データを生成する。この画像は、静止画像であってもよいし、ビデオ画像であってもよい。撮像ユニットはまた、ズーム手段および/またはパン手段を備えてもよく、これらは、(光学的またはデジタル的に)それぞれズームまたはパンするように適合されている。符号化部9458は、上記の一以上の実施形態で説明した符号化方法を用いて画像データを符号化する。符号化部9458は、上記実施の形態で説明した符号化方法の少なくとも1つを用いる。別の例として、符号化部9458は、前述の実施形態で説明した符号化方法の組合せを使用することができる。
【0338】
ネットワークカメラ9452の通信部9460は、符号化部9458により符号化された符号化画像データをクライアント装置9454に送信する。また、通信部9460は、クライアント装置9454からのコマンドを受信してもよい。コマンドは、符号化部9458による符号化のためのパラメータを設定するコマンドを含む。制御部9462は、通信部9460が受信したコマンドやユーザ入力に応じて、ネットワークカメラ9452内の他の部を制御する。
【0339】
クライアント装置9454は、通信部9464と、復号部9466と、制御部9468とを備える。クライアント装置9454の通信部9464は、ネットワークカメラ9452にコマンドを送信してもよい。また、クライアント装置9454の通信部9464は、ネットワークカメラ9452から符号化画像データを受信する。復号部9466は、上記実施の形態で説明した復号方法を用いて、符号化画像データを復号する。また、例えば、復号部9466は、上記実施の形態で説明した復号方法の組合せを用いることができる。クライアントユニット9454の制御部9468は、通信部9464が受信したユーザ操作やコマンドに従って、クライアントユニット9454内の他の部を制御する。また、クライアント装置9454の制御部9468は、復号部9466により復号された画像を表示するように、表示装置9470を制御してもよい。
【0340】
また、クライアント装置9454の制御部9468は表示装置9470を制御し、ネットワークカメラ9452のパラメータの値、例えば、符号化部9458による符号化のためのパラメータの値を指定するGUI(Graphical User Interface)を表示させても良い。また、クライアントユニット9454の制御部9468は、表示ユニット9470が表示するGUIに対するユーザの操作入力に応じて、クライアントユニット9454内の他のユニットを制御してもよい。また、クライアント装置9454の制御部9468は、表示装置9470が表示するGUIに対するユーザ操作入力に応じて、ネットワークカメラ9452のパラメータの値を指定するコマンドをネットワークカメラ9452に送信するように、クライアント装置9454の通信ユニット9464を制御してもよい。
【0341】
図15は、スマートフォン9500を示す図である。スマートフォン9500は、通信部9502と、復号/符号化部9504と、制御部9506と、表示部9508とを備える。
【0342】
通信部9502は、ネットワーク9200を介して符号化画像データを受信する。復号/符号化部9504は、通信ユニット9502が受信した符号化画像データをデコードする。復号/符号化部9504は、上記の一以上の実施の形態で説明した復号方法を用いて、符号化画像データを復号する。また、復号/符号化部9504は、上記実施形態で説明した符号化方法または復号方法のうちの少なくとも1つを用いることができる。別の例として、復号/符号化部9504は、前述の実施形態で説明した復号方法または符号化方法の組合せを使用することができる。制御部9506は、通信部9502が受信したユーザ操作やコマンドに応じて、スマートフォン9500内の他のユニットを制御する。例えば、制御部9506は、復号/符号化部9504によって復号された画像を表示するように、表示部9508を制御する。
【0343】
スマートフォンは、画像またはビデオを記録するための画像記録デバイス9510(例えば、デジタルカメラおよび関連する回路)をさらに備えることができる。このような記録された画像や映像は、制御部9506の指示の下、復号/符号化部9504によって符号化されてもよい。スマートフォンは、モバイルデバイスの向きを感知するように構成されたセンサ9512をさらに備えてもよい。このようなセンサは、加速度計、ジャイロスコープ、コンパス、全地球測位(GPS)ユニット又は同様の位置センサを含むことができる。そのようなセンサ9512はスマートフォンが向きを変更するかどうかを判定することができ、そのような情報は、ビデオストリームを符号化するときに使用され得る。
【0344】
本発明を実施形態を参照して説明してきたが、本発明は開示された実施形態に限定されないことを理解されたい。添付の特許請求の範囲に定義されるように、本発明の範囲から逸脱することなく、様々な変更および修正を行うことができることは、当業者には理解されよう。本明細書(任意の添付の特許請求の範囲、要約書、および図面を含む)に開示された特徴のすべて、および/またはそのように開示された任意の方法またはプロセスのステップのすべては、そのような特徴および/またはステップの少なくともいくつかが相互に排他的である組合せを除いて、任意の組合せで組み合わせることができる。本明細書(任意の添付の特許請求の範囲、要約書、および図面を含む)に開示される各特徴は特に断らない限り、同じ、同等の、または同様の目的を果たす代替の特徴によって置き換えることができる。したがって、特に断らない限り、開示される各特徴は、同等または同様の機能の一般的なシリーズの一例にすぎない。
【0345】
また、上述の比較、決定、評価、選択、実行、実行、または考慮の任意の結果、例えば、符号化またはフィルタリングプロセス中に行われる選択はビットストリーム中のデータ、例えば、フラグまたは結果を示す情報に示されるか、またはそれらから決定可能/推論可能であり得、その結果、示されるか、または決定された/推論された結果は例えば、デコード処理中に、比較、決定、評価、選択、実行、実行、または考慮を実際に実行する代わりに、処理において使用され得ることが理解される。
【0346】
特許請求の範囲において、単語「有する」は他の要素又はステップを排除するものではなく、不定冠詞「a」又は「an」は複数を排除するものではない。異なる特徴が相互に異なる従属請求項に記載されているという単なる事実は、これらの特徴の組合せが有利に使用されることができないことを示すものではない。クレームに記載されている参照符号は例示のみを目的としたものであり、クレームの範囲に限定的な影響を及ぼさない。
【0347】
前述の実施形態では、説明された機能がハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実施される場合、機能は、1つ以上の命令またはコードとして、コンピュータ可読媒体上に記憶され、またはそれを介して送信され、ハードウェアベースの処理ユニットによって実行されてもよい。
【0348】
コンピュータ可読媒体はデータ記憶媒体のような有形の媒体に対応するコンピュータ可読記憶媒体、または例えば通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を容易にする任意の媒体を含む通信媒体を含んでいてもよい。このようにして、コンピュータ可読媒体は一般に、(1)非一時的である有形のコンピュータ可読記憶媒体、または(2)信号または搬送波などの通信媒体に対応することができる。データ記憶媒体は本開示に記載される技術の実施のための命令、コードおよび/またはデータ構造を検索するために、1つ以上のコンピュータまたは1つ以上のプロセッサによってアクセス可能な任意の利用可能な媒体であってもよい。コンピュータプログラム製品は、コンピュータ可読媒体を含み得る。限定ではなく、一例として、このようなコンピュータ可読記憶媒体はRAM、ROM、EEPROM、CD-ROM又は他の光ディスク記憶装置、磁気ディスク記憶装置、又は他の磁気記憶装置、フラッシュメモリ、又は所望のプログラムコードを命令又はデータ構造の形成で記憶するために使用することができ、コンピュータによってアクセスすることができる他の任意の媒体を含むことができる。また、任意のコネクションは、コンピュータ可読媒体と適切に呼ばれる。例えば、命令が同軸ケーブル、光ファイバケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。しかし、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時的な媒体を含まず、代わりに非一時的な有形の記憶媒体を対象とすることを理解されたい。本明細書で使用されるディスクおよびディスクはコンパクトディスク(CD)、レーザディスク、光ディスク、デジタル多用途ディスク(DVD)、フロッピー(登録商標)ディスク、およびブルーレイディスクを含み、ここで、ディスクは通常、磁気的にデータを再生し、ディスクは、レーザで光学的にデータを再生する。上記の組合せは、コンピュータ読み取り可能な媒体の範囲内にも含まれるべきである。
【0349】
命令は、1つまたは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲート/論理アレイ(FPGA)、または他の同等の集積またはディスクリート論理回路などの1つまたは複数のプロセッサによって実行され得る。したがって、本明細書で使用される「プロセッサ」という用語は、前述の構造のいずれか、または本明細書で説明される技術の実装に適した他の任意の構造を指すことがある。さらに、いくつかの態様では本明細書に記載する機能性が符号化および復号化のために構成された専用のハードウェアおよび/またはソフトウェアモジュール内で提供されてもよく、あるいは結合されたコーデックに組み込まれてもよい。また、本技術は、1つまたは複数の回路または論理素子で完全に実装することができる。
【0350】
本発明を実施形態を参照して説明してきたが、本発明は開示された実施形態に限定されないことを理解されたい。疑義を避けるために、以下の記述は説明の一部を形成する。特許請求の範囲は明細書に従い、そのようにラベル付けされる。
【0351】
ステートメント1. 画像の1以上の画像部分に対するアダプティブループフィルタを制御する方法であって、画像部分の第1のサンプル値に対するフィルタリングを、該第1のサンプル値の複数の隣接サンプル値に基づいて、フィルタリングを制御することを有し、前記制御することは、非線形関数を用いることを含み、当該非線形関数は、1以上の隣接サンプル値と、適用パラメータセット(Adaptation Parameter Set)内にシグナリングされる1以上のフィルタ変数に基づく1以上の変数を持つ。
【0352】
ステートメント2. 前記非線形関数は、1以上のクリッピング関数と1以上のフィルタ変数を有し、このフィルタ変数は適用パラメータセット内に提供される情報を用いて決定される1以上のクリッピングパラメータを有する、ステートメント1の方法。
【0353】
ステートメント3. 2以上のクリッピング関数は、前記適応パラメータセット内にシグナリングされる情報を用いて決定される同じクリッピングパラメータを共有する、ステートメント2の方法。
【0354】
ステートメント4. クリッピング関数に使用するクリッピングパラメータは、複数のクリッピングパラメータ値からクリッピングパラメータを識別するインデックスを用いて決定され、前記複数のクリッピングパラメータの1つはbitdepthに基づく最大サンプル地に対応する、ステートメント2又は3の方法。より適切には、前記インデックスは適応パラメータセット内に提供されている。
【0355】
ステートメント5. クリッピング関数に使用するクリッピングパラメータは、複数のクリッピングパラメータ値からクリッピングパラメータを識別するインデックスを用いて決定され、第1のサンプル値がルマサンプル値のとき、及び、第1のサンプル値がクロマサンプル値のときの両方で同じ数の値を含む、ステートメント2~4のいずれか1つの方法。適切には、複数のクリッピングパラメータ値は、4つの値(許可、利用可、可能)を含む。適切には、複数のクリッピングパラメータ値は、画像の1以上の画像部分の1以上について同じ数の値(許可、利用可、可能)を含む。適切には、複数のクリッピングパラメータ値は、画像の1以上の画像部分の2以上についての4つの値(許可、利用可、可能)を含む。適切には、複数のクリッピングパラメータ値は、画像の全画像部分、又は、画像のシーケンスにおける全画像部分について同じ数の値(許可、利用可、可能)を含む。適切には、複数のクリッピングパラメータ値は、画像の全画像部分、又は、画像のシーケンスにおける全画像部分について4つの値(許可、利用可、可能)を含む。
【0356】
ステートメント6. シグナリングされる1以上のフィルタ変数の数は、1以上の隣接サンプル値に基づく1以上の変数の数より少ない、先行するステートメントのいずれか1つの方法。適切には、シグナリングされる1以上のフィルタ変数の数は、1以上の隣接サンプル値に基づく1以上の変数の数の半分である。
【0357】
ステートメント7. 1以上の隣接サンプル値に基づく1以上の変数は、前記第1のサンプル値と、前記1以上の隣接サンプル値の各々との差を有する、先行するステートメントのいずれか1つの方法。
【0358】
ステートメント8. 前記非線形関数の出力は、前記アダプティブループフィルタに入力パラメータとして使用される、先行するステートメントのいずれか1つの方法。適切には、1以上の非線形関数(又はクリッピング関数)からのの出力は、アダプティブループフィルタの入力パラメータとして使用される。
【0359】
ステートメント9. 前記アダプティブループフィルタは1以上のフィルタ係数を使用し、フィルタ係数と関連するフィルタ変数は隣接サンプル値のインデックスを用いて決定される、ステートメント8の方法。
【0360】
ステートメント10. 隣接サンプル値のインデックスは、スキャン順における位置と関連付けられ、前記関連付けは転置インデックスを用いて導出される、ステートメント9の方法。適切には、導出される関連付けは、
図4-bの4つの可能な配列409で示す{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; 401で示す {9, 4, 10, 8, 1, 5, 11, 7, 3, 0, 2, 6}; 402で示す{0, 3, 2, 1, 8, 7, 6, 5, 4, 9, 10, 11}; or、412で示す {9, 8, 10, 4, 3, 7, 11, 5, 1, 0, 2, 6}の1つに対応する。
【0361】
ステートメント11. 前記非線形関数は1以上のクリッピング関数を有し、当該1以上のクリッピング関数の各々は、max(-b,min(b,d))、min(b,max(-b,d))、max(c-b,min(c+b,n))、min(c+b,max(c-b,n))、max(-b,min(b,d1+d2))、min(b,max(-b,d1+d2))、max(2*c-b,min(2*c+b,n1+n2))、min(2*c+b,max(2*c-b,n1+n2))のいずれか返す、ここで、cは第1のサンプル値、n又はn1又はn2は隣接サンプル値、d=n-c、d1=n1-c、d2=n2-c、及び、bはクリッピングパラメータである、先行するステートメントのいずれか1つの方法。
【0362】
ステートメント12. 画像の1以上の部分を処理する方法であって、前記画像部分はクロマサンプル及びルマサンプルと関連付けられている、前記方法は、ビットストリーム、或いは、画像部分の第1のサンプル値とその隣接サンプル値から得られる情報に基づいて、先行するステートメントのいずれかの方法を用いて制御されるフィルタを使用するか使用しないか、前記フィルタの使用を可とするか不可とするか、或いは、前記第1のサンプル値をフィルタリングするときの前記フィルタで使用するフィルタリングパラメータ、フィルタ係数もしくはフィルタ変数の1つを決定する。
【0363】
ステートメント13. 前記ビットストリームから得られる情報は、ルマ成分もしくはクロマ成分の1つに提供されるフラグを含み、このフラグは、その成分について、ステートメント1~10のいずれか1つの方法を使用して制御されるフィルタを使用するか使用しないか、或いは、前記フィルタの使用を可とするか不可とするかの少なくとも1つを示す。
【0364】
ステートメント14. 前記ビットストリームから得られる情報は、1以上の画像部分に対して提供されるフラグを有し、このフラグは1以上の画像部分について、ステートメント1~10のいずれか1つの方法を用いて制御されるフィルタを使用するか使用しないか、又は、前記フィルタの使用を可とするか不可とするかを示す。
【0365】
ステートメント15. 1以上の画像を符号化する方法であって、画像の1以上の画像部分について、ステートメント1~10のいずれか1つの方法に従ってフィルタを制御すること、又は、ステートメント12~14のいずれか1つの方法に従った処理することを有す。
【0366】
ステートメント16. 更に、画像を受信すること、受信した画像を符号化してビットストリームを生成すること、符号化された画像を処理することを含み、ここで前記処理することは、ステートメント1~10のいずれか1つの方法に従った制御すること、又は、ステートメント12~14のいずれか1つの方法に従って処理することをを含む。
【0367】
ステートメント17. 更に、前記情報を前記ビットストリーム内に提供することを有する、ステートメント12~14のいずれか1つに引用する場合のステートメント15の方法。
【0368】
ステートメント18. 前記非線形関数の変数は、1以上の隣接サンプル値のインデックスに依存する1以上のフィルタ係数を更に有し、前記情報を提供することは、1以上のクリッピングパラメータを決定するためのインデックス、隣接サンプル値のインデックスと、スキャン順における位置との間の関連を導出するためのインデックスを、ビットストリームに提供することを有する、ステートメント11を引用する場合のステートメント17の方法。適切には、導出された関連付けは
図4-bの4つの可能な配列:配列409で示す{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; 401で示す {9, 4, 10, 8, 1, 5, 11, 7, 3, 0, 2, 6}; 402で示す{0, 3, 2, 1, 8, 7, 6, 5, 4, 9, 10, 11}; or、412で示す {9, 8, 10, 4, 3, 7, 11, 5, 1, 0, 2, 6}の1つに対応する。
【0369】
ステートメント19. 更に、複数の利用可能な関数から、非線形関数、もしくは1以上のクリッピング関数を選択すること、符号化された画像を処理するときに選択された関数を使用すること、選択された関数を識別する情報を、ビットストリーム内に提供することを更に有する、ステートメント16~18のいずれか1つの方法。
【0370】
ステートメント20. 1以上の画像を復号する方法であって、前記方法は、画像の1以上の画像部分について、ステートメント1~11のいずれか1つに従ってフィルタを制御すること、或いは、ステートメント12~14のいずれか1つの方法に従って処理することを含む。
【0371】
ステートメント21. 更に、ビットストリームを受信すること、画像を得るため受信したビットストリームからの情報を復号すること、得られた画像を処理することを有し、前記処理することは、ステートメント1~11のいずれか1つの方法に従って制御すること、又は、ステートメント12~14のいずれか1つの方法に従って処理することを含む。
【0372】
ステートメント22. 更に、前記ビットストリームから前記情報を得ることを含む、ステートメント12~14のいずれか1つを引用する場合のステートメント21の方法。
【0373】
ステートメント23. 前記非線形関数の変数は、前記1以上の隣接サンプル値のインデックスに依存する1以上のフィルタ係数を有し、前記方法は更に、前記ビットストリームから、1以上のクリッピングパラメータを決定するためのインデックス、及び、隣接サンプル値のインデックスとスキャン順における位置との間に関連付けを導出するためのインデックスを得ること有する、ステートメント11を引用する場合のステートメント21の方法。適切には、導出される関連付けは、
図4-bの4つの可能な配列:409で示す{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; 401で示す {9, 4, 10, 8, 1, 5, 11, 7, 3, 0, 2, 6}; 402で示す{0, 3, 2, 1, 8, 7, 6, 5, 4, 9, 10, 11}; or、412で示す {9, 8, 10, 4, 3, 7, 11, 5, 1, 0, 2, 6}の1つに対応する。
【0374】
ステートメント24 更に、複数の利用可能な関数から非線形関数を識別するための情報、または、1以上のクリッピング関数を識別する情報を、ビットストリームから得ること、及び、得た画像を処理するとき、識別された関数を使用することをを含む、ステートメント21~23のいずれか1つの方法。
【0375】
ステートメント25. ステートメント1~10,または2~14のいずれか1つの方法を実行するように構成されるコントローラ、ステートメント15~19のいずれか1つの方法を実行するように構成されるエンコーダ、もしくは、ステートメント20~24のいずれか1つの方法を実行するように構成されるデコーダとを有するデバイス。
【0376】
ステートメント26. コンピュータもしくはプロセッサ上で実行されるプログラムであって、前記コンピュータもしくはプロセッサに、ステートメント1~11,12~14,15~19、又は、20~24のいずれか1つの方法を実行させるためのプログラム。
【0377】
ステートメント27. ステートメント26のコンピュータプログラムを格納するコンピュータ可読記憶媒体。
【0378】
ステートメント28. ステートメント15~19のいずれか1項に記載の方法を用いて符号化された画像に対する情報データセットを搬送し、ビットストリームで表される信号であって、前記画像は、再構成可能なサンプルのセットを含み、各再構成可能なサンプルは、サンプル値を有し、情報データセットは、第1の再構成可能なサンプルに隣接するサンプルのサンプル値に基づいて、前記第1の再構成可能なサンプルに対するフィルタリングを制御するための制御データを含む、信号。