本発明は多様な変更を加えることができ、多様な実施形態を有することができるところ、特定の実施形態を図面に例示し、詳細に説明するものである。しかしながら、これは本発明を特定の実施形態に対して限定しようとするものではない。本明細書で使用する用語は単に特定の実施形態を説明するために使われたものであって、本発明の技術的思想を限定しようとする意図として使われるものではない。単数の表現は、文脈上、明白に異なる場合を除き、複数の表現を含む。本明細書において、“含む”又は“有する”などの用語は、明細書上に記載された特徴、数字、ステップ、動作、構成要素、部品、又はこれらを組み合わせたものが存在することを指定しようとするものであり、一つ又はその以上の他の特徴又は数字、ステップ、動作、構成要素、部品、若しくはこれらを組み合わせたものの存在又は付加の可能性を予め排除しないことと理解されるべきである。
一方、本発明で説明される図面上の各構成は、映像符号化装置/復号装置で異なる特徴的な機能に関する説明の便宜のために独立的に図示されたものであって、各構成が互いに別個のハードウェア又は別個のソフトウェアで具現することを意味するものではない。例えば、各構成のうち、二つ以上の構成を合わせて一つの構成とすることもできるし、一つの構成を複数の構成に分けることもできる。各構成が統合及び/又は分離された実施形態も本発明の本質から外れない限り、本発明の権利範囲に含まれる。
以下、添付した図面を参照して、本発明の好ましい実施形態をより詳細に説明する。以下、図面上の同一の構成要素に対しては同一の参照符号を使用し、同一の構成要素に対して重複説明は省略する。
図1は、本発明の一実施形態に従う符号化装置(映像符号化装置)を概略的に示すブロック図である。図1を参照すると、符号化装置100は、ピクチャ分割部105、予測部110、変換部115、量子化部120、再整列部125、エントロピ符号化部130、逆量子化部135、逆変換部140、フィルタ部145、及びメモリ150を備える。
ピクチャ分割部105は、入力されたピクチャを少なくとも一つの処理単位ブロックに分割することができる。この際、処理単位としてのブロックは、予測ユニット(以下、‘PU’という)、変換ユニット(以下、‘TU’という)、又は符号化ユニット(以下、‘CU’という)であってよい。
予測部110は、後述するように、インタ予測を実行するインタ予測部と、イントラ予測を実行するイントラ予測部とを含む。予測部110は、ピクチャ分割部105によって分割されたピクチャの処理単位に対して予測を実行して、予測ブロックを生成する。予測部110において、ピクチャの処理単位はCU、TU、又はPUであってよい。また、予測部110は、当該処理単位に対して実施される予測がインタ予測かイントラ予測かを決定し、各予測方法の具体的な内容(例えば、予測モードなど)を定めることができる。この際、予測が実行される処理単位と、予測方法及び予測方法の具体的な内容が定まる処理単位とは異なることがある。例えば、予測の方法、予測モードなどはPU単位で決定され、予測の実行はTU単位で実行することもできる。
インタ予測を通じて、現在ピクチャの先行ピクチャ及び/又は後続ピクチャのうち、少なくとも一つのピクチャの情報に基づいて予測を実行して、予測ブロックを生成することができる。また、イントラ予測を通じて、現在ピクチャ内のピクセル情報に基づいて予測を実行して、予測ブロックを生成することができる。
インタ予測の方法として、スキップモード、マージ(merge)モード、動きベクトル予測(MVP)モードなどを用いることができる。インタ予測では、PUに対して参照ピクチャを選択し、PUと同一のサイズの参照ブロックを選択することができる。参照ブロックは、整数ピクセル単位で選択できる。続いて、現在PUとの残差(residual)信号が最小化され、動きベクトルサイズも最小になる予測ブロックが生成される。
予測ブロックは整数サンプル単位で生成することもでき、1/2ピクセル単位又は1/4ピクセル単位のように、整数以下のピクセル単位で生成することもできる。この際、動きベクトルもまた、整数ピクセル以下の単位で表現できる。例えば、輝度サンプルに対しては1/4ピクセル単位で、色差サンプルに対しては1/8ピクセル単位で表現できる。
インタ予測を通じて選択された参照ピクチャのインデクス、動きベクトル(例えば、動きベクトル予測子)、残差信号などの情報は、エントロピ符号化されて復号装置に伝達される。スキップモードが適用される場合には、予測ブロックを復元ブロックにすることができるため、残差を生成、変換、量子化、転送しないことがある。
イントラ予測を実行する場合には、PU単位で予測モードが定まり、PU単位で予測を実行できる。また、PU単位で予測モードが定まり、TU単位でイントラ予測を実行することもできる。
イントラ予測において、予測モードは、33個の方向性予測モードと、少なくとも二つの非方向性モードとを有することができる。非向性性モードは、DC予測モード及び平面モード(Planar mode)を含むことができる。
イントラ予測では、参照サンプルにフィルタを適用した後、予測ブロックを生成することができる。この際、参照サンプルにフィルタを適用するか否かは、現在ブロックのイントラ予測モード及び/又はサイズによって決定できる。
PUは多様なサイズ/形態のブロックであって、例えばインタ予測の場合、PUは2N×2Nブロック、2N×Nブロック、N×2Nブロック、又はN×Nブロック(Nは、整数)などであってよい。イントラ予測の場合、PUは2N×2Nブロック、又はN×Nブロック(Nは、整数)などであってよい。この際、N×NブロックサイズのPUは特定の場合だけに適用するように設定することができる。例えば、最小サイズCUに対してだけN×NブロックサイズのPUを用いるように定めるか、又はイントラ予測に対してだけ用いるように定めることもできる。また、上述したサイズのPUの他に、N×mNブロック、mN×Nブロック、2N×mNブロック、又はmN×2Nブロック(m<1)などのPUを更に定義して使用することもできる。
生成された予測ブロックと原映像ブロックとの間の残差値(残差ブロック又は残差信号)は変換部115に入力される。また、予測のために使用した予測モード情報、動きベクトル情報などは、残差値と共にエントロピ符号化部130で符号化されて、復号装置に伝達される。
変換部115は、変換単位で残差ブロックに対する変換を実行し、変換係数を生成する。変換部115での変換単位はTUであってもよく、四分木(quad tree)構造を有することができる。この際、変換単位のサイズは所定の最大及び最小サイズの範囲内で定めることができる。変換部115は、残差ブロックを離散コサイン変換(DCT)及び/又は離散サイン変換(DST)を用いて変換することができる。
量子化部120は、変換部115で変換された残差値を量子化して量子化係数を生成することができる。量子化部120で算出された値は、逆量子化部135及び再整列部125に提供される。
再整列部125は、量子化部120から提供された量子化係数を再整列する。量子化係数を再整列することによって、エントロピ符号化部130での符号化能率を高めることができる。再整列部125は、係数走査(Coefficient Scanning)方法を通じて2次元ブロック形態の量子化係数を1次元のベクトル形態に再整列することができる。再整列部125では、量子化部から転送された係数の確率的な統計に基づいて係数走査の順序を変更することによって、エントロピ符号化部130でのエントロピ符号化能率を高めることもできる。
エントロピ符号化部130は、再整列部125によって再整列された量子化係数に対するエントロピ符号化を実行することができる。エントロピ符号化には、例えば、指数ゴロム(Exponential Golomb)、コンテキスト適応可変長符号化(CAVLC)、コンテキストキスト適応2値算術符号化(CABAC)などの符号化方法を使用することができる。エントロピ符号化部130は、再整列部125及び予測部110から伝達を受けたCUの量子化係数情報及びブロックタイプ情報、予測モード情報、分割単位情報、PU情報及び転送単位情報、動きベクトル情報、参照ピクチャ情報、ブロックの補間情報、フィルタ処理情報など、多様な情報を符号化することができる。
また、エントロピ符号化部130は、必要な場合、転送するパラメータセット又は構文(シンタックス)に一定の変更を加えることもできる。
逆量子化部135は量子化部120で量子化された値を逆量子化し、逆変換部140は逆量子化部135で逆量子化された値を逆変換する。逆量子化部135及び逆変換部140で生成された残差値と、予測部110で予測された予測ブロックとを合わせて復元ブロック(Reconstructed Block)を生成できる。
図1では、加算器を通じて、残差ブロックと予測ブロックとを合わせて復元ブロックを生成することを説明している。この際、加算器を、復元ブロックを生成する別途のユニット(復元ブロック生成部)と見ることもできる。
フィルタ部145は、ブロック除去フィルタ、適応ループフィルタ(ALF)、サンプル適応オフセット(SAO)を復元されたピクチャに適用することができる。
ブロック除去フィルタは、復元されたピクチャにおけるブロック間の境界に生じた歪みを除去することができる。ALFは、ブロック除去フィルタによってブロックがフィルタ処理された後、復元された映像と元の映像とを比較した値に基づいてフィルタ処理を実行することができる。ALFは、高能率を適用する場合だけに実行することもできる。SAOは、ブロック除去フィルタが適用された残差ブロックと原映像とのオフセット差をピクセル単位で復元し、バンドオフセット(Band Offset)、エッジオフセット(Edge Offset)などの形態で適用される。
一方、インタ予測に使われる復元ブロックに対してフィルタ部145はフィルタ処理を適用しないこともある。
メモリ150は、フィルタ部145を通じて算出された復元ブロック又はピクチャを記憶することができる。メモリ150に記憶された復元ブロック又はピクチャは、インタ予測を実行する予測部110に提供できる。
図2は、本発明の一実施形態に従う映像復号装置を概略的に示すブロック図である。図2を参照すると、映像復号装置200は、エントロピ復号部210、再整列部215、逆量子化部220、逆変換部225、予測部230、フィルタ部235、及びメモリ240を含むことができる。
映像符号化装置に映像ビットストリームが入力された場合、入力されたビットストリームは、映像符号化装置において映像情報が処理される手続に従って復号できる。
例えば、映像符号化装置でエントロピ符号化を実行するために、CAVLCなどの可変長符号化(以下、‘VLC’という)が使われた場合、エントロピ復号部210も符号化装置で使用したVLCテーブルと同一のVLCテーブルで具現して、エントロピ復号を実行することができる。また、映像符号化装置でエントロピ符号化を実行するために、CABACを用いた場合、エントロピ復号部210はこれに対応してCABACを用いたエントロピ復号を実行することができる。
エントロピ復号部210で復号された情報のうち、予測ブロックを生成するための情報は予測部230に提供され、エントロピ復号部210でエントロピ復号が実行された残差値は再整列部215に入力される。
再整列部215は、エントロピ復号部210でエントロピ復号されたビットストリームを映像符号化装置で再整列した方法に基づいて再整列することができる。再整列部215は、1次元ベクトル形態に表現された係数をまた2次元のブロック形態の係数に復元して再整列することができる。再整列部215は、符号化装置で実行された係数走査に関連した情報の提供を受けて、符号化装置で実行された走査順序に基づいて逆に走査する方法によって再整列を実行することができる。
逆量子化部220は、符号化装置で提供された量子化パラメータと、再整列されたブロックの係数値に基づいて逆量子化を実行することができる。
逆変換部225は、映像符号化装置で実行された量子化結果に対して、符号化装置の変換部が実行したDCT及びDSTに対し、逆DCT及び/又は逆DSTを実行することができる。逆変換は、符号化装置で決定された転送単位又は映像の分割単位に基づいて実行できる。符号化装置の変換部において、DCT及び/又はDSTは、予測方法、現在ブロックのサイズ、及び予測方向など、複数の情報によって選択的に実行することができ、復号装置の逆変換部225は符号化装置の変換部で実行された変換情報に基づいて逆変換を実行することができる。
予測部230は、エントロピ復号部210で提供された予測ブロック生成関連情報と、メモリ240で提供された以前に復号されたブロック及び/又はピクチャ情報とに基づいて予測ブロックを生成することができる。
現在PUに対する予測モードがイントラ予測(intra prediction)モードの場合、現在ピクチャ内のピクセル情報に基づいて予測ブロックを生成するイントラ予測を実行することができる。
現在PUに対する予測モードがインタ予測(inter prediction)モードの場合、現在ピクチャの先行ピクチャ又は後続ピクチャのうち、少なくとも一つのピクチャに含まれた情報に基づいて現在PUに対するインタ予測を実行することができる。この際、映像符号化装置で提供された現在PUのインタ予測に必要な動き情報、例えば動きベクトル、参照ピクチャインデクスなどに関する情報は、符号化装置から受信したスキップフラグ、マージフラグなどから導出できる。
復元ブロックは、予測部230で生成された予測ブロックと、逆変換部225で提供された残差ブロックとを用いて生成できる。図2では、加算器で予測ブロックと残差ブロックとを合わせて復元ブロックを生成することを説明している。この際、加算器は、復元ブロックを生成する別途のユニット(復元ブロック生成部)と見ることができる。
スキップモードが適用される場合には残差が転送されず、予測ブロックを復元ブロックにすることができる。
復元されたブロック及び/又はピクチャは、フィルタ部235に提供できる。フィルタ部235は、復元されたブロック及び/又はピクチャにブロック歪み除去フィルタ、SAO及び/又はALFなどを適用することができる。
メモリ240は、復元されたピクチャ又はブロックを記憶して参照ピクチャ又は参照ブロックに使用できるようにすることができ、また復元されたピクチャを出力部に提供することができる。
一方、上述したように、符号化装置及び復号装置のフィルタ部は、ループ内フィルタとしてブロック除去フィルタ、ALF又はSAOを適用することができる。
ブロック除去フィルタは、ブロック単位の予測、変換、量子化に従うブロック間の歪み(artifacts)を除去する。ブロック除去フィルタは、予測ユニットのエッジ又は変換ユニットのエッジに適用され、ブロック除去フィルタを適用するための所定の最低ブロックサイズを設定することができる。
ブロック除去フィルタを適用するために、まず水平又は垂直フィルタ境界のブロック境界強度(Boundary Strength;以下、bSという)を決定する。bSに基づいてフィルタ処理を実行するか否かをブロック単位で決定する。フィルタ処理を実行することに決定したとき、どんなフィルタを適用するかを定める。適用するフィルタは、弱フィルタ(weak filter)及び強フィルタ(strong filter)のうちから選択できる。フィルタ処理部は、選択されたフィルタを当該ブロックの境界に適用する。
ALFは、後述するSAOを実行した後に適用することもできる。ALFは、ウィナーフィルタ(Wiener filter)を用いて符号化誤差を補償するものであって、SAOとは異なり、スライス内にグローバルに適用される。ALFは、高能率(HE)の場合だけに適用されるようにすることもできる。
SAOは、ブロック歪み除去フィルタを実行した映像に対して、ピクセル単位で原映像映像とのオフセット差を復元する手続である。SAOを通じて符号化誤差を補償することができ、符号化誤差は量子化などに起因したものであってよい。SAOにはバンドオフセット(band offset)と、エッジオフセット(edge offset)との二つのタイプがある。
上述したように、映像復元をブロック単位(例えば、CU、PU、TUなど)で実行する場合には、復元されたブロック間の境界でブロック歪みが発生することがある。ブロック歪みを防止するために、ブロック除去フィルタを適用できるが、ブロック除去フィルタは同一の映像又はピクチャ内でもブロック歪みが生じやすい位置と、ブロック歪みが生じ難い位置とを区分して適用できる。例えば、ブロック歪みが生じやすい位置と、ブロック歪みが生じ難い位置とで、異なる方式によってブロック除去フィルタを適用することができる。
このため、ブロック間の境界がブロック除去フィルタを適用する境界に該当するか、隣り合うブロックがイントラ符号化が適用されたブロックであるかなどを考慮してブロック間の境界に対するbSを決定し、決定されたbSに基づいてブロック歪み除去フィルタを適用することができる。
一方、CUがI_PCM CUの場合、すなわち、イントラ予測が適用されるパルス符号化変調(PCM)CUの場合には、ブロック歪み除去フィルタを適用しない。I_PCMモードは、量子化及び変換過程を経ないため、原映像データと同一の値が復元される。
したがって、最高の画質(原映像画質)を復元するために、I_PCMモードのCU(I_PCM CU)に対してはループ内フィルタを適用しない。例えば、ブロック歪み除去フィルタプロセスにおいて、I_PCM CUに対する量子化パラメータ(qP)を0(zero)に設定して、I_PCM CUにブロック除去フィルタが適用されないようにすることができる。
図3は、本発明によるブロック除去フィルタを適用する方法を概略的に説明する順序図である。図3で説明するブロック歪み除去フィルタは、符号化装置及び復号装置において実行できる。例えば、図1及び図2のフィルタ処理部は、図3で説明するブロック歪み除去フィルタを実行することができる。
ブロック歪み除去フィルタは、現在ピクチャ内のブロック間の垂直エッジに先に適用された後、現在ピクチャ内のブロック間の水平エッジに適用される。垂直エッジに適用されたブロック歪み除去フィルタによって修正されたサンプルを有する現在ピクチャ内の水平エッジにブロック歪み除去フィルタが適用される。
したがって、図3で説明するブロック歪み除去フィルタの手続は、現在ピクチャ内の垂直エッジに適用された後、現在ピクチャ内の水平エッジに適用できる。
ブロック間のエッジに対して図3を参照すると、ブロック歪み除去フィルタを適用するためにブロック境界が導出される(S310)。
フィルタ部は、現在符号化ブロック又は現在最大符号化ユニット(Largest Coding Unit、LCU)(以下、説明の便宜のために本明細書で符号化ブロックとはLCUを含む)のサイズを設定し、現在符号化ブロックの境界が現在ピクチャの境界でないか、現在符号化ブロックの境界がタイルの境界としてブロック除去フィルタが適用される境界であるか、現在符号化ブロックの境界がスライスの境界としてブロック除去フィルタが適用される境界であるか、を判断することができる。
例えば、垂直エッジにブロック除去フィルタを適用する場合、現在符号化ブロックの左側境界が現在ピクチャの左側境界であるとき、ブロック歪み除去フィルタの対象から現在符号化ブロックの左側境界を除外することができる。現在符号化ブロックの左側境界が現在タイルの左側境界であり、現在タイルのエッジにフィルタを適用しないように決定した場合、又は現在符号化ブロックの左側境界が現在スライスの左側境界であり、現在スライスのエッジにフィルタを適用しないように決定した場合は、ブロック歪み除去フィルタの対象から現在符号化ブロックの左側境界を除外することができる。したがって、垂直エッジに対するブロック歪み除去フィルタにおいて、上記の場合でないとき、現在符号化ブロックの左側境界にブロック歪み除去フィルタを適用することができる。
また、水平エッジにブロック除去フィルタを適用する場合、現在符号化ブロックの上側境界が現在ピクチャの上側境界であるとき、ブロック歪み除去フィルタの対象から現在符号化ブロックの上側境界を除外することができる。現在符号化ブロックの上側境界が現在タイルの上側境界であり、現在タイルのエッジにフィルタを適用しないように決定した場合、又は現在符号化ブロックの上側境界が現在スライスの上側境界であり、現在スライスのエッジにフィルタを適用しないように決定した場合には、ブロック歪み除去フィルタの対象から現在符号化ブロックの上側境界を除外することができる。水平エッジに対するブロック歪み除去フィルタにおいて、上記の場合でないときは、現在符号化ブロックの上側境界にブロック歪み除去フィルタを適用することができる。
本明細書において、境界にフィルタ処理を適用することは、境界の両側に位置する所定のサンプルに対してフィルタ処理を実行することを意味する。
フィルタ部は、ピクチャ内の垂直エッジに対するブロック歪み除去フィルタを適用する場合は、変換ブロック及び予測ブロックの垂直エッジに対してブロック境界を導出することができ、ピクチャ内の水平エッジに対するブロック歪み除去フィルタを適用する場合は、変換ブロック及び予測ブロックの水平エッジに対してブロック境界を導出することができる。
変換ブロックのエッジが符号化ブロックのエッジであるときは、当該エッジに対してブロック歪み除去フィルタを適用するか否かに従って変換ブロックの境界を導出することもできる。変換ブロックが分割される場合には、分割される各ブロックに対して境界を導出することができる。
フィルタ部は、予測ブロックのパーティションごとに境界を導出することができる。例えば、予測ブロックのパーティションが2N×Nピクセルブロック、N×Nピクセルブロック、2N×nUピクセルブロック、2N×nDピクセルブロック(N、U、Dはピクセル数に対応する整数であり、nは符号化ブロック内の予測ブロックの個数に対応する整数)の場合、パーティションごとにエッジを導出することができる。
次に、ブロック除去フィルタを適用するブロック境界に対するbSが導出される(S320)。bSは、現在符号化ブロック内のエッジ別に決定される。ピクチャ内の垂直エッジに対してブロック歪み除去フィルタが適用される場合は、垂直エッジ別にbSが導出され、ピクチャ内の水平エッジに対してブロック歪み除去フィルタが適用される場合は、水平エッジ別にbSが導出できる。
bSの導出は、所定の単位別に実行できる。例えば、bSは変換ブロックのエッジごとに導出することもできるし、予測ブロックのエッジごとに導出することもできる。また、bSは所定サイズのブロック単位、例えば8×8ピクセルブロック又は4×4ピクセルブロック単位で導出することもできる。
さらに、bSは現在符号化ブロック内の変換ブロック、予測ブロック、そして予め設定された所定サイズのブロックのうち、特定条件を満たすブロックのエッジに対して導出することもできる。たとえ、変換ブロック(例えば、TU)と予測ブロック(例えば、PU)のうちの小さいブロックと、予め定まったサイズのブロック(例えば、8×8ピクセルブロック)とのうち、より大きいブロックに対してbSが導出することもできる。
言い換えると、bSは、ブロック除去を適用するブロックの境界においてbS決定の単位となるブロックのサイズに対応するピクセル単位(例えば、bS決定の単位がL×Lピクセルブロック(Lは、整数)であるとき、Lピクセル単位)で決定できる。bSの具体的な値を導出することに関しては後述する。
次に、bSに従ってブロック境界にフィルタ処理が実行される(S330)。
例えば、輝度(luma)サンプルの場合、対象エッジに対するbSが所定の基準bS、例えばbSth1以下であるとき、当該エッジに対してはブロック歪み除去フィルタを適用しないようにすることができる。色差(chroma)サンプルの場合にも対象エッジに対するbSが所定の基準bS、例えばbSth2以下の場合には当該エッジにブロック歪み除去フィルタを適用しないようにすることができる。基準bSのbSth1とbSth2とは同一に設定することもできるし、相異なるように設定することもできる。
ブロック歪み除去フィルタを効率的に適用するために追加的なしきい値(説明の便宜のためにTh1という)を設定することもできる。例えば、基準bS値を0に設定した場合、対象エッジに対するbS値が0より大きいときは、Th1を用いてブロックレベルでのブロック歪み除去フィルタに対するオン/オフの可否を決定することができる。例えば、対象エッジから導出した値がTh1より大きいときは、ブロック除去フィルタを対象エッジに適用することもできる。
ブロック歪み除去フィルタがピクチャ内の垂直エッジに適用される場合を先に説明すると、Th1との比較のために対象垂直エッジから導出される値として、特定サンプル行(row)において当該垂直エッジを境界にする二つブロック内のフィルタ処理対象サンプル間の差が考えられる。例えば、k番目のサンプル行(kは、整数)のサンプルに対し、垂直エッジの左側ブロックで垂直エッジに隣接するフィルタ処理対象サンプル間の差の和DLk(例えば、垂直エッジから3個のサンプルがフィルタ処理の対象とするとき、垂直エッジから最初のサンプルと垂直エッジから2番目のサンプルとの差と、垂直エッジから3番目のサンプルと垂直エッジから2番目のサンプルとの差の和)を算出し、垂直エッジの右側ブロック(現在ブロック)で垂直エッジに隣接するフィルタ処理対象サンプル間の差の和DRk(例えば、垂直エッジから3個のサンプルがフィルタ処理の対象とするとき、垂直エッジから最初のサンプルと垂直エッジから2番目のサンプルとの差と、垂直エッジから3番目のサンプルと垂直エッジから2番目のサンプルとの差の和)を導出することができる。DLkとDRkとの和DkをTh1と比較して、DkがTh1より小さい場合、当該垂直エッジにブロック歪み除去フィルタを適用するようにすることができる。DkがTh1より小さいとき、量子化パラメータに基づいて、垂直境界がブロック歪み除去フィルタを適用することが効果的ではない境界(例えば、原ピクチャ内の画像の実際の境界など)とみなして、ブロック除去フィルタを適用することによって原ピクチャによって近いピクチャが復元されると判断することができる。
この際、垂直エッジを境界にする二つのブロック内で上述したように一つのサンプル行に対してだけ隣り合うフィルタ処理対象サンプル間の差の和を考慮せず、複数のサンプル行に対して隣り合うフィルタ処理対象サンプル間の差の和を考慮することもできる。例えば、垂直エッジを境界にする二つのブロックでk番目のサンプル行に対するフィルタ処理対象サンプル間の差の和Dkと、k+j番目の行(jは、整数)に対するフィルタ処理対象サンプル間の差の和Dk+jを合わせたD(=Dk+Dk+j)がしきい値Th1より小さい場合、当該垂直エッジに対するブロック除去フィルタを適用することに決定することもできる。
二つのサンプル行の間の差jを3に設定した場合を例として説明すると、2番目のサンプル行及び5番目のサンプル行に対し、D(=D2+D5)がTh1より小さい場合、ブロック除去フィルタを当該垂直エッジに適用するようにすることができる。2サンプル行の間の差jを3に設定し、0番目のサンプル行及び3番目のサンプル行に対してサンプル間の差の和D(=D0+D3)をTh1と比較してDがTh1より小さい場合、ブロック除去フィルタを当該垂直エッジに適用するようにすることもできる。
この際、各ブロック及びサンプル行に応じた特性を効果的に反映するために、サンプル行ごと、かつブロックごとに求めたフィルタ処理対象サンプル間の差の和に対する絶対値を合わせたD値を導出することもできる。この場合、垂直エッジを境界に左側ブロック(L)及び右側ブロック(R)のk番目のサンプル行及びk+j番目のサンプル行を考慮するD値は次の<式1>のように導出できる。
<式1>
D=abs(DLk)+abs(DLk+j)+abs(DRk)+abs(DRk+j)
上述したように、DLKは左側ブロックのk番目のサンプル行で垂直エッジに隣接したフィルタ処理対象サンプル間の差の和である。ブロック歪み除去フィルタを適用する場合、垂直エッジに隣接した3個のサンプルを対象にするときは、DLKは、垂直エッジ左側ブロックのk番目のサンプル行で垂直エッジから最初のサンプルと垂直エッジから2番目のサンプルとの差と、垂直エッジから3番目のサンプルと垂直エッジから2番目のサンプルとの差の和によって導出できる。DRKは、右側ブロックのk番目のサンプル行で垂直エッジに隣接したフィルタ処理対象サンプル間の差の和である。例えば、ブロック歪み除去フィルタを適用する場合、垂直エッジに隣接した3個のサンプルを対象にするときは、DRKは、垂直エッジ右側ブロックのk番目のサンプル行で垂直エッジから最初のサンプルと垂直エッジから2番目のサンプルとの差と、垂直エッジから3番目のサンプルと垂直エッジから2番目のサンプルとの差の和によって導出できる。
複数のサンプル行を考慮して上述したように、隣接するフィルタ処理対象サンプル間の差値の和を合わせる場合にも、各サンプル行に対する隣接するフィルタ処理対象サンプル間の差の和を考慮することによって、より効果的にブロック歪み除去フィルタを適用することができる。例えば、<式1>を参照すると、kサンプル行だけを考慮してDkを<式2>のように定義することができる。
<式2>
Dk=abs(DLk)+abs(DRk)
例えば、当該垂直エッジに対し、上記の例のとおり、k番目のサンプル行及びk+3番目のサンプル行を考慮する場合、DがTh1より小さく、k番目のサンプル行に対するDk及びk+3番目のサンプル行に対するDk+3が各々Th1の半分(Th1/2)より小さいときは、当該垂直エッジに強フィルタ処理を適用するようにすることができる。これと異なり、DがTh1より小さいが、DkがTh1/2より小さくないか、又はDk+3がTh1/2より小さくない場合には、当該垂直エッジに弱フィルタ処理を適用するようにすることもできる。
弱フィルタ処理を適用する場合には、フィルタ処理対象サンプルのうち、特定サンプルに対してだけフィルタ処理を適用することができ、この場合にフィルタ係数を強フィルタ処理の場合と異なるように適用することもできる。例えば、フィルタ処理対象サンプルが垂直エッジの左右に位置する6個のサンプル(エッジの左側3個サンプル、エッジの右側3個サンプル)である場合を考えれば、強フィルタ処理がフィルタ処理対象サンプルにすべて適用される一方、弱フィルタ処理は対象エッジの左側に位置する二つのサンプルと、対象エッジの右側に位置する二つのサンプルとに適用できる。この際、強フィルタ処理のフィルタ係数と弱フィルタ処理のフィルタ係数とが異なることがある。
ブロック歪み除去フィルタがピクチャ内の水平エッジに適用される場合にも、Th1との比較のために対象水平エッジから導出される値として、特定サンプル列(column)で当該水平エッジを境界にする二つのブロック内のフィルタ処理対象サンプル間の差を考慮することができる。垂直エッジの例で説明したように、k番目のサンプル列(kは、整数)のサンプルに対し、水平エッジの上側ブロックで水平エッジに隣接するフィルタ処理対象サンプル間の差の和DTk(たとえ、ブロック除去フィルタが適用されるとき、水平エッジから3個のサンプルがフィルタ処理の対象とするとき、水平エッジから最初のサンプルと水平エッジから2番目のサンプルとの差と、水平エッジから3番目のサンプルと水平エッジから2番目のサンプルとの差の和)を算出し、水平エッジの下側ブロック(現在ブロック)で水平エッジに隣接するフィルタ処理対象サンプル間の差の和DBk(たとえ、ブロック除去フィルタが適用される場合、水平エッジから3個のサンプルがフィルタ処理の対象とするときは、サンプルが水平エッジから最初のサンプルと水平エッジから2番目のサンプルとの差と、水平エッジから3番目のサンプルと水平エッジから2番目のサンプルとの差の和)を導出することができる。DTkとDBkとの和DkをTh1と比較して、DkがTh1より小さいときは、当該水平エッジにブロック歪み除去フィルタを適用するようにすることができる。
この際、水平エッジを境界にする二つのブロック内で複数のサンプル列に対して隣り合うフィルタ処理対象サンプル間の差の和を考慮することもできる。例えば、水平エッジを境界にする二つのブロックでk番目のサンプル列に対するフィルタ処理対象サンプル間の差の和Dkと、k+j番目の列(jは、整数)に対するフィルタ処理対象サンプル間の差の和Dk+jとを合せたD(=Dk+Dk+j)がしきい値Th1より小さい場合、当該水平エッジに対するブロック除去フィルタを適用することに決定することもできる。
二つのサンプル列間の差jを3に設定した場合を例として説明すると、2番目のサンプル列及び5番目のサンプル列に対し、D(=D2+D5)がTh1より小さい場合、ブロック除去フィルタを当該垂直エッジに適用するようにすることができる。二つのサンプル列間の差jを3に設定し、0番目のサンプル列及び3番目のサンプル列に対してサンプル間の差の和D(=D0+D3)をTh1と比較して、DがTh1より小さい場合、ブロック除去フィルタを当該水平エッジに適用するようにすることもできる。
垂直エッジに対して考慮するサンプル行と、水平エッジに対して考慮するサンプル列とは、対応するサンプル行及びサンプル列であってよい。例えば、垂直エッジに対して0番目のサンプル行及び3番目のサンプル行を対象にしたとき、水平エッジに対しては0番目のサンプル列及び3番目のサンプル列を対象にすることができる。
垂直エッジの場合と同様に、各ブロック及びサンプル列に応じた特性を効果的に反映するために、サンプル列ごと、かつブロックごとに求めたフィルタ処理対象サンプル間の差の和に各々絶対値を取ることもできる。この場合、水平エッジを境界に上側ブロック(T)及び下側ブロック(B)のk番目のサンプル列及びk+j番目のサンプル列を考慮するD値は次の<式3>のように導出できる。
<式3>
D=abs(DTk)+abs(DTk+j)+abs(DBk)+abs(DBk+j)
上述したように、DTKは上側ブロックのk番目のサンプル列で水平エッジに隣接したフィルタ処理対象サンプル間の差の和である。ブロック歪み除去フィルタを適用する場合、水平エッジに隣接した3つのサンプルを対象にするとき、DTKは、水平エッジ上側ブロックのk番目のサンプル列で水平エッジから最初のサンプルと水平エッジから2番目のサンプルとの差と、水平エッジから3番目のサンプルと水平エッジから2番目のサンプルとの差の和によって導出できる。DBKは、下側ブロックのk番目のサンプル列で水平エッジに隣接したフィルタ処理対象サンプル間の差の和である。例えば、ブロック歪み除去フィルタを適用する場合、水平エッジに隣接した3つのサンプルを対象にするとき、DBKは、水平エッジ下側ブロックのk番目のサンプル列で水平エッジから最初のサンプルと水平エッジから2番目のサンプルとの差と、水平エッジから3番目のサンプルと水平エッジから2番目のサンプルとの差の和によって導出できる。
垂直エッジの例で説明したように、サンプル列ごとに、互いに隣接するフィルタ処理対象サンプル間の差の和を考慮することによって、より効果的にブロック歪み除去フィルタを適用することができる。例えば、<式3>を参照すると、kサンプル列だけを考慮してDkを<式4>のように定義することができる。
<式4>
Dk=abs(DTk)+abs(DBk)
例えば、当該水平エッジに対し、上記の例のとおり、k番目のサンプル列及びk+3番目のサンプル列を考慮する場合、DがTh1より小さく、k番目のサンプル列に対するDkとk+3番目のサンプル列に対するDk+3が各々Th1の1/4より小さい場合であって、他のブロック除去パラメータに関する所定の関係を満たすときは、当該水平エッジに強フィルタ処理を適用するようにすることができる。これと異なり、DがTh1より小さいが、DkがTh1/4より小さくないか、又はDk+3がTh1/4より小さくない場合であって、所定の条件を満たすときは、当該水平エッジに弱フィルタ処理を適用するようにすることもできる。
弱フィルタ処理を適用する場合には、フィルタ処理対象サンプルうち、特定サンプルに対してだけフィルタ処理を適用することができ、この場合、強フィルタとは異なるフィルタ係数を適用することもできる。例えば、フィルタ処理対象サンプルが水平エッジの上下に位置する6個のサンプル(エッジの上側3個サンプル、エッジの下側3個サンプル)である場合を考えれば、強フィルタ処理がフィルタ処理対象サンプルにすべて適用される一方、弱フィルタ処理は対象エッジの上側に位置する二つのサンプルと対象エッジの下側に位置する二つのサンプルとに適用できる。この際、強フィルタ処理と弱フィルタ処理とではフィルタ係数が相異することがある。
強フィルタ処理及び弱フィルタ処理は、垂直エッジ及び水平エッジに同一の方法(例えば、同一のフィルタ係数又はオフセットなど)を適用することもできる。
フィルタ部は、上述したように、ブロック除去フィルタを適用するか否か、強フィルタ及び弱フィルタのうち、どちらのフィルタを適用するか、どのサンプルに弱フィルタを適用するかを決定するとき、予め定まった方法(例えば、フィルタ係数又はオフセットなど)に従ってブロック除去フィルタを適用することができる。前述したように、ピクチャ内の垂直エッジに対してブロック歪み除去フィルタを適用した後、ピクチャ内の水平エッジに対してブロック歪み除去フィルタを適用することができる。
図3では、ブロック境界の導出(S310)、bSの導出(S320)、フィルタ処理適用(S330)のような大きなステップでブロック歪み除去フィルタを適用する方法を説明したが、bSの決定からフィルタ処理を適用する過程に対して、上述した内容はより詳細なステップに区分することもできる。
例えば、ピクチャ内の垂直エッジに対する水平ブロック歪み除去フィルタに対し、次のステップを実行してもよい。(1)符号化ブロック(LCUであってよい)内の垂直エッジに対し、bSを決定する。bS決定対象エッジは、TUとPUのうちの小さいブロックに対するエッジ、予め定まった単位ブロック(例えば、8×8ピクセルブロック)のエッジ、又はTUとPUのうちの小さい単位ブロックと予め定まった単位ブロックのうちの大きいブロックのエッジであってよい。(2)bSが0より大きいエッジに対し、ブロックレベルでブロック歪み除去フィルタのオン/オフ決定する。このために、上述したように、境界(エッジ)の両側のブロックのうち、所定サンプル行(例えば、2番目及び5番目のサンプル行)を用いることができる。(3)フィルタ処理をオンにする領域に対してフィルタ処理を適用するか、弱フィルタ処理を適用するかを決定する。(4)弱フィルタ処理を適用する場合、追加的なフィルタ処理オン/オフ決定する。追加的なフィルタ処理オン/オフは、前述したように、特定サンプル別のフィルタ処理オン/オフ決定を含む。(5)現在ピクチャ内の次の符号化ブロック(LCUを含み)に移動して、ステップを反復−ピクチャ内のすべての垂直エッジに対するブロック歪み除去フィルタ処理を実行する。
ピクチャ内の水平エッジに対する垂直ブロック歪み除去フィルタに対しては、次のステップを実行してもよい。(1)符号化ブロック(LCUであってよい)内の水平エッジに対し、bSを決定する。bS決定対象エッジは、TUとPUのうちの小さいブロックに対するエッジ、予め定まった単位ブロック(例えば、8×8ピクセルブロック)のエッジ、TUとPUのうちの小さい単位ブロックと予め定まった単位ブロックのうちの大きいブロックのエッジであってよい。(2)bSが0より大きいエッジに対して、ブロックレベルでブロック歪み除去フィルタのオン/オフを決定する。このために、上述したように、境界(エッジ)の両側のブロックのうち、所定サンプル列(例えば、2番目及び5番目のサンプル列)を用いることができる。(3)フィルタ処理をオンにする領域に対して強フィルタ処理を適用するか、弱フィルタ処理を適用するかを決定する。(4)弱フィルタ処理を適用する場合、追加的なフィルタ処理オン/オフ決定する。追加的なフィルタ処理オン/オフは、前述したように、特定サンプル別のフィルタ処理オン/オフ決定を含む。(5)現在ピクチャ内の次の符号化ブロック(LCUを含み)に移動して、ステップを反復する。ピクチャ内のすべての水平エッジに対するブロック歪み除去フィルタ処理を実行する。
図4は、本発明に従うブロック歪み除去フィルタの実行方式を概略的に説明する図である。図4を参照すると、符号化ブロック(例えば、LCU)単位で当該符号化ブロック内のエッジに対してブロック歪み除去フィルタが実行される(401)。前述したように、現在ピクチャ全体に対して垂直エッジに対するブロック歪み除去フィルタ(水平フィルタ処理)を実行した後、現在ピクチャ全体に対して水平エッジに対するブロック歪み除去フィルタ(垂直フィルタ処理)を実行する。
図5は、bSを求める方法の一例を概略的に説明する順序図である。
説明の便宜のために、本明細書ではブロック歪み除去フィルタプロセスにおいて、現在ブロックをQブロックで表し、現在ブロックに隣り合うブロックとして現在ブロックより先に符号化/復号したブロックをブロックPで表す。例えば、垂直エッジに対するブロック歪み除去フィルタを実行する場合には、垂直エッジを境界に左側ブロックをブロックPとし、右側ブロックをブロックQとする。また、水平エッジに対するブロック歪み除去フィルタを実行する場合には、水平エッジを境界に上側ブロックをブロックPとし、下側ブロックをブロックQとする。
また、ブロックPに属するサンプルをpで表し、ブロックQに属するサンプルをqで表す。例えば、ブロックPに属し、特定サンプル行又は特定サンプル列でブロックPとブロックQとの間の境界(エッジ)からi番目のサンプルをpiとすることができる(i=0,1,2,...)。同様に、ブロックQに属し、特定サンプル行又は特定サンプル列でブロックPとブロックQとの間の境界(エッジ)からi番目のサンプルをqiとすることができる(i=0,1,2,...)。
図5を参照すると、bSを決定するために、まず、ブロックP及び/又はブロックQがイントラ符号化されているか否かを判断する(S510)。
ブロックP及び/又はブロックQがイントラ符号化されている場合には、ブロックPとブロックQとの間の境界がCU境界であるか否かを判断する(S520)。この際、CU境界はLCUの境界であってよい。
ステップS520において、ブロックPとブロックQとの間の境界がCUの境界の場合には、ブロックPとブロックQとの間の境界に対するbSの値を4と決定する(S530)。
ステップS520において、ブロックPとブロックQとの間の境界がCUの境界でない場合には、ブロックPとブロックQとの間の境界に対するbSの値を3に決定する(S540)。
ブロックP及び/又はブロックQがイントラ符号化されていないときは、ブロックP及び/又はブロックQが0でない係数(変換係数)を含むか否かを判断する(S550)。この際、フィルタ部は0でない変換係数の存否を、逆量子化の前の変換係数を基準に判断することができる。また、フィルタ部は0でない変換係数の存否を、逆量子化の後の変換係数を基準に判断することもできる。
ステップS550において、ブロックP及び/又はブロックQが係数(0でない変換係数)を含む場合には、ブロックPとブロックQとの間の境界に対するbSを2と決定する(S560)。
ステップS550において、ブロックP及び/又はブロックQが係数(0でない変換係数)を含まないときは、ブロックPとブロックQとが相異する参照ピクチャ又は相異する動きベクトルを有するか否かを判断する(S570)。
ステップS570において、ブロックPとブロックQとが別個の参照ピクチャ、又は相異する動きベクトルを有する場合には、ブロックPとブロックQとの間の境界に対するbSを1に決定する(S580)。
その他の場合、すなわちブロック歪み除去フィルタを適用しない場合に該当するときは、ブロックPとブロックQとの間の境界に対するbSを0に設定する(S590)。図5では、bSを適用しない場合の一例として、上述した条件にすべて当該しない場合を説明の便宜のために例として説明している。
一方、bS値に従ってブロック歪み除去フィルタに必要な変数の値を設定することもできる。
例えば、図5に図示されたtc offsetのような変数の場合を例として挙げることができる。tcoffsetは、映像特性に最適化されたtc値を決定するためにユーザによって設定される値である。tcは、量子化程度応じたブロック歪みを定量化してブロック歪み除去フィルタと関連したパラメータを決定することに用いられるしきい値の一つである。
図5では、bS値が0、1、又は2の場合にはtcoffsetを0に設定し、bS値が3又は4の場合にはtcoffsetを2に設定する一例を簡単に示している。
一方、効果的にブロック歪み除去フィルタを適用するために、先の図3及び図5で説明したbSを決定するブロック単位及び決定方法を修正して適用することもできる。
bSは、実際にブロック歪み除去フィルタを実行するブロック単位と等しいか、小さい単位で決定できる。
例えば、輝度サンプルに対して実際のブロック歪み除去フィルタを8×8ピクセル単位で実行する場合、bSは4×4ピクセル単位に決定できる。このように、ブロック歪み除去フィルタを実行する単位ブロックのサイズがbSを決定する単位ブロックのサイズより大きい場合には、bSを決定する単位ブロックの境界(エッジ)のうち、ブロック歪み除去フィルタを実行する単位ブロックの境界(エッジ)に該当する境界だけでbSを決定するようにすることができる。言い換えると、L×L(Lは、整数)ピクセルブロック別にbSを決定する場合、ブロック歪み除去フィルタを実行する単位ブロックの境界でLピクセル単位でbSが決定される。
具体的には、bSを決定するブロック単位は4×4ピクセルブロックであり、実際のブロック歪み除去フィルタは8×8ピクセルブロック単位で実行する場合を例として説明すると、bSはブロック歪み除去フィルタが実行される8×8ピクセルブロックの境界で4ピクセル単位で決定される。したがって、ブロック歪み除去フィルタの単位である8×8ピクセルブロックの内部の4×4ピクセルブロックエッジに対しては、bSを決定する必要がない。
図6は、bS値を決定する方法の一例を概略的に説明する図である。図6では、ブロック歪み除去フィルタの単位ブロック600が8×8ピクセルブロックであり、bS決定の単位ブロックが4×4ピクセルブロックである場合を例として説明する。
図6を参照すると、ブロック歪み除去フィルタの単位ブロック600の中にはbSの決定の単位ブロックになる4×4ピクセルブロックの境界(エッジ)であり、かつブロック歪み除去フィルタの単位ブロック600の境界になる垂直エッジ及び水平エッジが存在する。
垂直エッジの場合を例として説明すると、ブロック歪み除去フィルタの単位ブロック600には、bS決定の対象になる二つの垂直エッジ610、620が存在する。図6の例では、最初の垂直エッジ610のbSと2番目垂直エッジ620のbSとを比較して、より大きいbSをブロック歪み除去フィルタの単位ブロック600の垂直エッジに対する代表bSに決定する。
例えば、最初の垂直エッジ610のbSが1であり、2番目垂直エッジ620のbSが2である場合には、2番目垂直エッジ620のbS値である2をブロック歪み除去フィルタの単位ブロック600の左側境界になる垂直エッジに対する代表bS値に決定してもよい。
図6では、説明の便宜のために、垂直エッジに対する場合を例として説明したが、水平エッジの場合にも同一の方法を適用することができる。
図6の例において、二つのbSの値が同一の場合には、二つのbS値のうち、いずれか一つを代表bS値に使用できることは勿論である。
図6のように、ブロック歪み除去フィルタを適用する単位ブロックの内部に位置する境界に対してはbSを導出しない方法、すなわちブロック歪み除去フィルタを適用する単位ブロックの境界(エッジ)であり、かつbSを決定する単位ブロックの境界である場合に対してだけbSを導出する方法の他の例を具体的に説明する。
図7及び図8は、bS値を決定する方法の他の例を概略的に説明する図である。図7及び図8の例では、bS値を2ステップの過程を経て割り当てる方法を例として説明する。具体的には、図7及び図8の例では、4×4ピクセルブロックがbS決定の単位であり、8×8ピクセルブロックがブロック歪み除去フィルタ処理単位である場合、4×4ピクセル単位でbSを決定した後に、8×8ピクセルブロック単位でbSを再割当する方法を説明する。
図7は、bS決定単位ごとにbSを設定する方法の一例を概略的に説明する図である。図7を参照すると、16×16ピクセルブロック(例えば、CU)にbS決定単位になる4×4ピクセルブロック(例えば、TU)が図示したように存在する。各4×4ピクセルブロックの境界ごとにbS値が決定できる。
4×4ピクセルブロックごとにbSを決定するようにする具体的なプロセスの一例(ステップ1)は、以下のとおりである。
<4×4ピクセルブロック単位でbSを設定する方法−ステップ1>
現在ブロック、例えばCU内の左上側にある輝度サンプルの位置を、現在ピクチャの左上側の輝度サンプルを基準に(xC、yC)と特定する。現在ブロックであるCUのサイズを特定する変数をlog2CUSizeとし、bSが決定される垂直エッジと水平エッジは2次元アレイhorEdgeFlags及びverEdgeFlagsによって指示されるとする。この際、2次元アレイのサイズはnS×nSであり、nS=1<<log2CUSizeである。
(xEk、yEj)がエッジ周辺サンプル(エッジサンプル)位置の集合を特定するとする。k=0,…,nE−1であり、j=0,…,nE−1であり、nEは((1<<log2CUSize)>>2)に設定され、xE0=0、yE0=0、xEk+1=xEk+4、yEj+1=yEj+4の関係を有する。
この場合、水平エッジ及び垂直エッジに対してブロック歪み除去フィルタが適用されるサンプルがエッジサンプル位置の集合を特定する(xEk、yEj)に基づいて決定できる。例えば、水平エッジに対し、(1)水平エッジであることを指示する情報が当該エッジにブロック歪み除去フィルタが適用すること(bSが決定すること)を指示するとき(例えば、horEdgeFlags[xEk][yEj]=1)、(2)p0を予測を経て復元されたピクチャの(xC+xEk、yC+yEj−1)に設定し、q0を予測を経て復元されたピクチャの(xC+xEk、yC+yEj)に設定することができ、(3)この際、ブロック歪み除去フィルタの方向は垂直方向となる。
垂直エッジに対しては、(1)垂直エッジであることを指示する情報が当該エッジにブロック歪み除去フィルタが適用すること(bSが決定すること)を指示するとき(例えば、verEdgeFlags[xEk][yEj]=1)、(2)p0を予測を経て復元されたピクチャの(xC+xEk−1、yC+yEj)に設定し、q0を予測を経て復元されたピクチャの(xC+xEk、yC+yEj)に設定することができ、(3)この際、ブロック歪み除去フィルタの方向は水平方向となる。
上述した方法(ステップ1)によれば、現在CU(現在ブロック)内にbS決定単位である4×4ピクセルブロックが何個であるか(現在CUの横及び縦が4ピクセルの何倍数であるか)を計数((1<<log2CUSize)>>2)してnE値に割り当てる。したがって、ステップ1では現在ブロックに対して4ピクセル単位でEn個のbSが横及び縦に設定可能である。bSが4ピクセル単位で決定されるように(xEk、yEj)を4ピクセル単位で増加させる(xEk+1=xEk+4、yEj+1=yEj+4)、すなわち現在ブロック(現在CU)内で4×4ピクセルブロック単位でbSを決定するプロセスを実行できるようにインデクスを増加させる。
上述した方法(ステップ1)に続いて、bS決定単位ごとに設定されたbS値をブロック除去フィルタ処理単位ごとに再割当することができる(ステップ2)。
図8は、ブロック除去フィルタ処理単位ごとにbSを再割当する方法の一例を概略的に説明する図である。図8を参照すると、8×8のブロック除去適用単位ブロックごとにbS値が設定できる。
図8で説明するステップ2では、ステップ1で決定された4×4ピクセルブロック単位のbSを比較して、隣接した2エッジに対するbSのうち、ある一つの値を8×8のブロック除去フィルタ処理単位に対する代表bSに用いる。
例えば、図8で現在CU800の中のブロック除去フィルタ処理単位ブロック810の左側垂直エッジに対し、上側エッジのbSであるbSv1と下側エッジのbSであるbSv2とを比較して、より大きい値をブロック810の左側垂直エッジに対するbS値(bSv)に用いることができる。また、現在CU800内のブロック除去フィルタ処理単位ブロック820の上側水平エッジに対し、左側エッジのbSであるbSh1と右側エッジのbSであるbSh2とを比較して、より大きい値をブロック820の上側水平エッジに対するbS値(bSh)に用いることができる。この際、ステップ1で決定されたbSのうち、ブロック除去フィルタを適用する単位ブロックである8×8ピクセルブロック内に位置するエッジに対するbS値は割り当てられない。
8×8ピクセルブロックごとにbSを再割当してブロック歪み除去フィルタを実行するようにする具体的なプロセスの一例(ステップ2)は以下のとおりである。
<8×8ピクセルブロック単位でbSが割り当ててブロック歪み除去フィルタを実行する方法−ステップ2>
現在ブロック、例えばCU内の左上側にある輝度サンプルの位置を現在ピクチャの左上側輝度サンプルを基準に、(xC、yC)と特定する。現在ブロックであるCUのサイズを特定する変数をlog2CUSizeとし、配列(array)bSは、境界フィルタ処理強度(boundary filtering strength)を特定する。
現在ブロック、例えば現在CUの輝度エッジに対するブロック歪み除去フィルタは、次のようなステップで実行できる。
(1)変数nDを1<<(log2CUSize−3)に設定する。
(2)サイズ(2)×(nD)×(nD)の3次元配列dEdgeのすべての要素を0に初期化する。
(3)サイズ(2)×(nD)×(1<<log2CUSize)の3次元配列dSampleのすべての要素を0に初期化する。
(4)サイズ(2)×(nD)×(nD)の3次元配列bStrengthのすべての要素を0に初期化する。
(5)×Dk値をxC+(k<<3)に設定する。この際、kの値は0,…,nD−1である。各xDk値に対し、yDmをyC+(m<<3)に設定し、以下の手続を実行する。この際、mの値は0,…,nD−1である。
(5−1)垂直エッジに対する境界フィルタ処理強度bSVerを次のとおり導出する。bSVer=Max(bS[0][xDk][yDm+i])。この際、iは0,…,7である。bS[0][xDk][yDm+i]は垂直エッジに対する境界フィルタ処理強度であって、(xDk、yDm+i)を基準に定義されるbS値を意味する。
(5−2)bStrength[0][k][m]の値をbSVer値に設定する。
(5−3)現在CUの輝度サンプル位置(xC、yC)、現在ブロックの輝度サンプル位置(xDk、yDm)、ブロック除去フィルタが適用される垂直エッジであることを指示する情報、境界フィルタ処理強度bSVerに基づいて輝度ブロックエッジに対する決定過程を実行して、決定に関する情報として強フィルタ処理を適用するか、弱フィルタ処理を適用するかを指示するdEdge[0][k][m]及びサイズ8×8の配列dSを決定する。
(5−4)dEdge値を決定するためのdSample[0][k][(m<<3)+i]をdS[i]に設定する。この際、iは0,…,7である。
(5−5)水平エッジに対する境界フィルタ処理強度bSHorを次のとおり導出する。bSHor=Max(bS[1][xDk+i][yDm])。この際、iは0,…,7である。bS[0][xDk+i][yDm]は水平エッジに対する境界フィルタ処理強度であって、(xDk+i、yDm)を基準に定義されるbS値を意味する。
(5−6)bStrength[1][k][m]の値をbSVer値に設定する。
(5−7)現在CUの輝度サンプル位置(xC、yC)、現在ブロックの輝度サンプル位置(xDk、yDm)、ブロック除去フィルタが適用される垂直エッジであることを指示する情報、境界フィルタ処理強度bSHorに基づいて輝度ブロックエッジに対する決定過程を実行して、決定に関する情報として強フィルタ処理を適用するか、弱フィルタ処理を適用するかを指示するdEdge[1][k][m]及びサイズ8×8の配列dSを決定する。
(5−8)dEdge値を決定するためのdSample[1][m][(k<<3)+i]をdS[i]に設定する。この際、iは0,…,7である。
(6)ブロック歪み除去フィルタを適用することに決定されたエッジに対し、bS値、dEdge値、そしてdSample値などに基づいてブロック歪み除去フィルタを実行する。
ステップ2の方法を説明すると、現在ブロック内にあるブロック歪み除去フィルタ処理単位ブロックの個数を表すnDを導出するとき、log2CUSize−3を使用している。すなわち、8×8ピクセルブロック単位で、8×8ピクセルブロックの個数だけ現在ブロック(現在CU)に対してブロック除去フィルタが垂直エッジ及び水平エッジに適用できる。
次に、垂直エッジに対するbS値及び水平エッジに対するbS値を8個のピクセル別に対比して、最も大きいbS値に設定する。例えば、垂直エッジに対するbSであるbSVerは、Max(bS[0][xDk][yDm+i])に設定され、水平エッジに対するbSであるbSHorはMax(bS[1][xDk+i][yDm])に設定され、この際、iは0,…,7となる。i値を0から7まで変更し、8個のピクセルを基準とするbS値を比較して、最も大きいbSを現在ブロック除去フィルタ適用ブロックに対するbSに設定することができる。例えば、垂直エッジに沿って8個のピクセルを基準とする各bSを比較して、最も大きいbSを現在ブロック歪み除去フィルタ適用ブロックの垂直エッジに対するbSに設定し、水平エッジに沿って8個のピクセルを基準とする各bSを比較して、最も大きいbSを現在ブロック歪み除去フィルタ適用ブロックの水平エッジに対するbSに設定することができる。
したがって、ステップ1ではすべての4×4ピクセルブロック(bS決定単位ブロック)の境界ごとにbSを決定するが、ステップ2で、8×8ピクセルブロック(ブロック歪み除去フィルタ処理単位ブロック)の境界で垂直エッジに対するbSであるbSVerと水平エッジに対するbSであるbSHorを設定するため、8×8ピクセルブロックの境界で決定されたbSを用いる。
図7及び図8のステップ1では、4ピクセル単位で処理することを明確に説明するために、((1<<log2CUSize)>>2)、xEk+1=xEk+4、yEj+1=yEj+4などの関係式を用いたが、本発明はこの式に限定されない。例えば、所定のbS決定単位(上記の例では4×4ピクセルブロック)でbSが決定できる場合は、これを表す他の関係を適用してもbS決定単位ごとにbSを設定することができる。
また、図7及び図8のステップ2では、8ピクセル単位で処理することを明確に説明するために、log2CUSize−3などの式を用いたが、本発明はこの式に限定されない。例えば、所定のブロック歪み除去フィルタ処理単位(上記の例では8×8ピクセルブロック)でブロック歪み除去フィルタが適用され、これによってbSを割り当てることができる場合には、これを表す他の式を適用してもブロック歪み除去フィルタ処理単位ごとにbSを再割当することができる。
図7及び図8の例では、輝度サンプルとして現在ブロックがCUの場合を例として説明しているが、本発明はこれに限定されず、色差サンプルの場合又は現在ブロックがCUの以外の処理単位(例えば、PU又はTU)の場合にも適用できる。また、ここではbS決定単位が4×4ピクセルブロックであり、ブロック歪み除去フィルタ処理単位が8×8ピクセルブロックでない場合にも同一に適用できる。
一方、図7及び図8の例において、ステップ1ではすべての4×4ピクセルブロックの境界ごとにbS値を決定/割り当てるが、ステップ2において、8×8ピクセルブロックの境界でbSVerとbSHorを求める。したがって、図7及び図8の例において、8×8ピクセルブロックの内部のエッジに対してbSを決定することは不要な過程となる。
したがって、ブロック歪み除去フィルタプロセスの複雑度を減少させるために、ブロック歪み除去フィルタ処理単位ブロックの境界であり、かつbS決定単位ブロックの境界の場合だけにbSを導出する方法が考えられる。例えば、ブロック歪み除去フィルタ処理単位ブロックごとにbS決定単位でbSを決定する方法(bS導出方法1)と、bS決定単位ごとにbSを決定し、かつbS決定単位の境界がブロック歪み除去フィルタ処理単位ブロックの境界にある条件を付加する方法(bS導出方法2)が考えられる。
まず、ブロック歪み除去フィルタ処理単位ブロックごとにbS決定単位でbSを決定する方法の一例は、次のとおりである。
<bS導出方法1>
現在ブロック、例えばCU内の左上側にある輝度サンプルの位置を現在ピクチャの左上側輝度サンプルを基準に、(xC、yC)と特定する。現在ブロックであるCUのサイズを特定する変数をlog2CUSizeとし、bSが決定される垂直エッジ及び水平エッジは2次元配列horEdgeFlags及びverEdgeFlagsによって指示されるとする。この際、2次元配列のサイズはnS×nSであり、nS=1<<log2CUSizeである。
(xEk、yEj)がエッジ周辺サンプル(エッジサンプル)位置の集合を特定するとする。k=0,…,nE−1であり、j=0,…,nE−1であり、nEは((1<<log2CUSize)>>3)に設定され、xE0=0、yE0=0、xEk+1=xEk+8、yEj+1=yEj+8の関係を有する。
この場合、水平エッジ及び垂直エッジに対してブロック歪み除去フィルタが適用されるサンプルがエッジサンプル位置の集合を特定する(xEk、yEj)に基づいて決定できる。例えば、水平エッジに対し、(1)水平エッジであることを指示する情報が当該エッジにブロック歪み除去フィルタが適用すること(bSが決定すること)を指示したとき(例えば、horEdgeFlags[xEk][yEj]=1)、(2)(xEk+r、yEj)に対して(r=0,1)、予測を経て復元されたピクチャの(xC+xEk、yC+yEj−1)にp0を設定し、予測を経て復元されたピクチャの(xC+xEk、yC+yEj)にq0を設定することができ、(3)この際、ブロック歪み除去フィルタの方向は垂直方向となる。
垂直エッジに対しては、(1)垂直エッジであることを指示する情報が当該エッジにブロック歪み除去フィルタが適用すること(bSが決定すること)を指示したとき(例えば、verEdgeFlags[xEk][yEj]=1)、(2)(xEk、yEj+r)に対して(r=0,1)、予測を経て復元されたピクチャの(xC+xEk−1、yC+yEj)にp0を設定し、予測を経て復元されたピクチャの(xC+xEk、yC+yEj)にq0を設定することができ、(3)この際、ブロック歪み除去フィルタの方向は水平方向となる。
フィルタ方向によって、bSは(Ek、Ej)を基準に決定できる。例えば、bSはbS[filterDir][Ek][Ej]に決定できる。
bS導出方法1を見ると、ブロック歪み除去フィルタ処理単位ブロックごとにbSを決定するエッジを設定する。したがって、ブロック除去適用単位ブロックの境界であり、かつbS決定単位ブロックの境界であるエッジでbSが決定される。bS導出方法1では、ブロック歪み除去フィルタ処理単位が8×8ピクセルブロックであり、bSが4ピクセル単位で決定される場合を例として説明しているため、8×8ピクセルブロックの境界でbSを決定するエッジを設定する。このために、nE=((1<<log2CUSize)>>3)とxEk+1=xEk+8、yEj+1=yEj+8などの関係を適用する。また、水平エッジに対して(xEk+r、yEj)を基準にbSを設定し、ブロック歪み除去フィルタ適用サンプルを特定し、垂直エッジに対して(Ek、yEj+r)を基準にbSを設定し、ブロック歪み除去フィルタ適用サンプルを特定し、かつr値を0と1に限定している。
以後、bS決定を4×4ピクセル単位で実行すると、8×8ピクセルブロックの境界であり、かつ4×4ピクセルの境界であるエッジに対してbSが決定される。言い換えると、8×8ピクセルブロック(ブロック歪み除去フィルタ処理単位ブロック)の境界で、4ピクセル単位(bS決定単位)にbSが決定される。
一方、bS決定単位ごとにbSを決定し、かつbS決定単位がブロック歪み除去フィルタ処理単位ブロックの境界にある条件を付加する方法の一例は、次のとおりである。
<bS導出方法2>
現在ブロック、例えばCU内の左上側にある輝度サンプルの位置を現在ピクチャの左上側輝度サンプルを基準に、(xC、yC)と特定する。現在ブロックであるCUのサイズを特定する変数をlog2CUSizeとし、bSが決定される垂直エッジと水平エッジは2次元配列horEdgeFlagsとverEdgeFlagsによって指示されるとする。この際、2次元配列のサイズはnS×nSであり、nS=1<<log2CUSizeである。
(xEk、yEj)がエッジ周辺サンプル(エッジサンプル)位置の集合を特定するとする。k=0,…,nE−1であり、j=0,…,nE−1であり、nEは((1<<log2CUSize)>>2)に設定され、xE0=0、yE0=0、xEk+1=xEk+4、yEj+1=yEj+4の関係を有する。
この場合、水平エッジ及び垂直エッジに対してブロック歪み除去フィルタが適用されるサンプルがエッジサンプル位置の集合を特定する(xEk、yEj)に基づいて決定できる。例えば、水平エッジに対し、(1)水平エッジであることを指示する情報が当該エッジにブロック歪み除去フィルタが適用すること(bSが決定すること)を指示(例えば、horEdgeFlags[xEk][yEj]=1)し、yEj%2の値が0であるとき、(2)予測を経て復元されたピクチャの(xC+xEk、yC+yEj−1)にp0を設定し、予測を経て復元されたピクチャの(xC+xEk、yC+yEj)にq0を設定することができ、(3)この際、ブロック歪み除去フィルタの方向は垂直方向となる。この際、yEj%2はyEjを2で除した剰余を意味する。
垂直エッジに対しては、(1)垂直エッジであることを指示する情報が当該エッジにブロック歪み除去フィルタが適用すること(bSが決定すること)を指示(例えば、verEdgeFlags[xEk][yEj]=1)し、xEk%2の値が0であるとき、(2)予測を経て復元されたピクチャの(xC+xEk−1、yC+yEj)にp0を設定し、予測を経て復元されたピクチャの(xC+xEk、yC+yEj)にq0を設定することができ、(3)この際、ブロック歪み除去フィルタの方向は水平方向となる。この際、xEk%2はxEkを2で除した剰余を意味する。
フィルタ方向によって、bSは(Ek、Ej)を基準に決定できる。例えば、bSはbS[filterDir][Ek][Ej]に決定できる。
方法1と同様に、方法2もブロック除去適用単位ブロック(8×8ピクセルブロック)の内部にあるエッジに対してはbS決定を行わない。方法2では、4×4ピクセルブロック(bS決定単位ブロック)単位でbSを決定するプロセスを実行し、かつ4×4ブロックのインデクスが偶数の場合、すなわち4×4ブロックの境界が8×8ブロックの境界になる場合だけにbSを決定する。この際、各境界でのbSは図5の例で説明したbS決定方法によって定めることもできるし、後述するように、より簡潔なbS決定方法によって定めることもできる。
図9は、ブロック除去適用単位ブロックの境界とbS決定単位ブロックの境界とが一致する場合、bSを決定する方法の例を概略的に示すものである。図9の例は、方法1及び方法2の適用結果を概略的に説明する。
図9に示すように、現在ブロック(例えば、CU)に対して8×8ピクセルブロックであるブロック歪み除去フィルタ処理単位ブロック910を考慮すると、ブロック910の内部に位置するエッジではbSを決定しない。
一方、bS決定手続をより単純化して複雑度を減らし、ブロック歪み除去フィルタの効果を高めるために、ブロック歪み除去フィルタの単位ブロックに対するエッジのうち、一つのエッジに対するbSだけを導出して、ブロック歪み除去フィルタの単位ブロックのエッジのうち、当該エッジに対する代表bSとして適用する方法を考慮することもできる。
図10は、ブロック歪み除去フィルタを実行する単位ブロックで代表bS値を決定する方法の他の例を概略的に説明する図である。図10においても、ブロック歪み除去フィルタの単位ブロック1000が8×8ピクセルブロックであり、bS決定の単位ブロックが4×4ピクセルブロックである場合を例として説明する。
図10を参照すると、ブロック歪み除去フィルタの単位ブロック1000内のbS決定対象となる二つの垂直エッジ1010、1020のうち、0番目エッジ1010に対してだけbSを決定する。言い換えると、ブロック歪み除去フィルタの単位ブロックごとに0番目bS決定の単位ブロックの垂直エッジ及び水平エッジに対してだけbSを算出し、算出されたbSを当該ブロック歪み除去フィルタの単位ブロックに対する代表bSに用いる。例えば、ブロック歪み除去フィルタの単位ブロックが8×8ピクセルブロックであり、bS決定の単位ブロックが4×4ピクセルブロックである場合、ブロック歪み除去フィルタの単位ブロック内には4個のbS決定の単位ブロックが存在する。このうち、0番目ブロック(左上側ブロック)の垂直エッジ及び水平エッジに対してだけbSを決定してブロック歪み除去フィルタの単位ブロックに対する代表bSに用いることができる。
図10の例のようにbSを決定すると、bSを決定するプロセスを単純化して既存プロセスの1/4に該当するプロセスにbSを決定することができ、bSを記憶するためのメモリも既存プロセスの1/4に縮小することができる。
bSを決定する位置(エッジ)は、上述したように、図6から図10で説明した方法のうちのいずれか一つを使用して決定することができる。この際、bSを設定する位置で具体的にbSを決定する方法は、図5で説明したとおりである。
しかしながら、bSを決定する方法も図5より簡単な方法を適用するようにすることもできる。例えば、図5の例のように、bS値を0から4まで区分して導出しても、ブロック歪み除去フィルタプロセスではbSの値を細分して利用しないことがある。例えば、bS>0だけを判断したり、bS>1だけを判断したり、bS>2だけを判断したりすることができる。
したがって、図5の例のようなbS決定木をより単純化して、ブロック歪み除去フィルタを実行することもできる。
図11は、bSを決定する方法の他の例を概略的に説明する順序図である。
図11を参照すると、まずブロックP及び/又はブロックQがイントラ符号化されているか否かを判断する(S1110)。
P及び/又はQがイントラ符号化されているときは、ブロックPとブロックQとの間の境界に対するbSをbS3に決定する(S1120)。
P及び/又はQがイントラ符号化されていないときは、ブロックP及び/又はブロックQが係数(0でない変換係数)を含むか否かを判断する(S1130)。この際、変換係数は、逆量子化が適用される前の変換係数、又は逆量子化が適用された変換係数であってよい。
ステップS1130において、ブロックP及び/又はブロックQが係数(0でない変換係数)を含むときは、PとQとの間の境界に対するbS値をbS2に決定する(S1140)。
ステップS1130において、ブロックP及び/又はブロックQが係数(0でない変換係数)を含まないときは、ブロックPとブロックQとが別個の参照ピクチャを有するか、ブロックPとブロックQとが別個の動きベクトルを有するか否かを判断する(S1150)。
ステップS1150において、ブロックPとブロックQとが別個の参照ピクチャを有するか、又はブロックPとブロックQとが別個の動きベクトルを有する場合には、ブロックPとブロックQとの間の境界に対するbSをbS1に決定する(S1160)。
その他の場合、すなわちブロック歪み除去フィルタを適用しない場合に該当するときは、ブロックPとブロックQとの間の境界に対するbSをbS0に設定する(S1170)。
ここでは、ステップS1120、S1140、S1160、S1170で決定されるbS値を各々bS3、bS2、bS1、bS0として表したが、これは説明の便宜のためのものである。図11の例において、bS値を4種類に区分して導出するものを勘案すると、bS0乃至bS3の値は図11に示すように、bS0=0、bS1=1、bS2=2、bS3=3/4に設定できる。図11の例では、ステップS1120でbS3が3/4に決定することと説明しているが、これは図5の例においてbS値が3及び4の場合が、図11の例においてbS3の単一値(例えば、3)に決定されることを理解しやすく表したものである。
bS決定木を用いてブロック歪み除去フィルタに必要な変数の値を設定することもできる。図11では、tcoffsetを最も大きいbS値に対しては特定値(例えば、2)に設定し、その他のbS値に対しては0に設定することを一例として簡単に示している。
図11の例に説明されたものより決定分岐(decision branch)を更に減らす方法も考慮することができる。この場合、bS値も図11の例のように、4個(bS0、bS1、bS2、bS3)でなく、3個(bS0、bS1、bS2)から減らしてブロック歪み除去フィルタを用いることができる。
この場合、ブロックP及び/又はブロックQがイントラ符号化されている場合を最も大きいbS値であるbS2に決定し、その他のブロック歪み除去フィルタが適用できる場合に対するbS値をbS1に決定し、ブロック歪み除去フィルタが適用されない場合に対するbS値をbS0に決定することができる。3種類のbS値のうち、いずれか一つの値によって導出することを考慮して、bS0、bS1、bS2の値を例えば、bS0=0、bS1=1、bS2=2に設定することができる。
図12は、上述したように、bS値を3種類の値のうち、いずれか一つに決定する方法を概略的に説明する順序図である。
図12を参照すると、まずブロックP及び/又はブロックQがイントラ符号化されているか否かを判断する(S1210)。
ブロックP及び/又はブロックQがイントラ符号化されている場合は、ブロックPとブロックQとの間の境界に対するbSをbS2に決定する(S1220)。bS2は、図5の例でbS値が3と4の場合(bS=3/4)に対応する。3種類bS値のうち、最も大きい値がbS2であるため、bS2の値を例えば2に設定することができる。
ブロックP及び/又はブロックQがイントラ符号化されていない場合は、ブロックPとブロックQとが0でない係数(変換係数)を含むか、PとQとが相異する参照ピクチャを有するか、又はブロックPとブロックQとが相異する動きベクトルを有するか否かを判断する(S1230)。この際、変換係数は、逆量子化が適用される前の変換係数、又は逆量子化が適用された変換係数であってよい。
ステップS1230において、ブロックPとブロックQとが0でない係数(変換係数)を含むか、ブロックPとブロックQとが相異する参照ピクチャを有するか、又はブロックPとブロックQとが相異する動きベクトルを有する場合には、ブロックPとブロックQとの間の境界に対するbSをbS1に設定する(S1240)。bS1はブロックPとブロックQとがイントラ符号化されていない場合であって、ブロック除去フィルタを適用する場合に対するbS値として、図5の例でbS値が1と2の場合(bS=1/2)に対応する。3種類のbS値のうち、中間値がbS1であるため、bS1の値を例えば1に設定することができる。
その他の場合、すなわちブロック除去フィルタを適用しない場合に該当するとき、bSをbS0に設定する(S1240)。bS0はブロック除去フィルタを適用しない場合に対するbS値であって、図5の例でbS値が0の場合(bS=0)に対応する。3種類のbS値のうち、最も小さい値がbS0であるため、bS0の値を例えば0に設定することができる。
bS決定木を用いてブロック歪み除去フィルタに必要な変数の値を設定することもできる。図12ではtcoffsetを最も大きいbS値に対しては特定値(例えば、2)に設定し、その他のbS値に対しては0に設定することを一例として簡単に示している。
図13は、bS値を3種類の値のうち、いずれか一つに決定する他の方法を概略的に説明する順序図である。図12で説明したbS決定方法(bS決定木)において、発明の理解のために、bSの3値(bS1、bS2、bS3)を0、1、2に明確に設定した例を示すものである。
図13を参照すると、まずブロックP及び/又はブロックQがイントラ符号化されているか否かを判断する(S1310)。
ブロックP及び/又はブロックQがイントラ符号化されている場合は、ブロックPとブロックQとの間の境界に対するbSの値を2に決定する(S1320)。bSが2の場合は、図5の例でbS値が3と4の場合(bS=3/4)に対応する。
ブロックP及び/又はブロックQがイントラ符号化されていない場合は、ブロックPとブロックQとが0でない係数(変換係数)を含むか、ブロックPとブロックQとが相異する参照ピクチャを有するか、又はブロックPとブロックQとが相異する動きベクトルを有するか否かを判断する(S1330)。この際、変換係数は、逆量子化が適用される前の変換係数、又は逆量子化が適用された変換係数であってよい。
ステップS1330において、ブロックPとブロックQとが0でない係数(変換係数)を含むか、ブロックPとブロックQとが相異する参照ピクチャを有するか、又はブロックPとブロックQとが相異する動きベクトルを有する場合には、ブロックPとブロックQとの間の境界に対するbSの値を1に設定する(S1340)。bSが1の場合は、ブロックPとブロックQとがイントラ符号化されず、 ブロック除去フィルタを適用する場合に対するbS値として、図5の例でbS値が1と2の場合(bS=1/2)に対応する。
その他の場合、すなわちブロック除去フィルタを適用しない場合に該当するとき、bSの値を0に設定する(S1340)。bSの値が0の場合は、ブロック除去フィルタを適用しない場合に対するbS値として、図5の例でbS値が0の場合(bS=0)に対応する。
bS決定木を用いてブロック歪み除去フィルタに必要な変数の値を設定することもできる。図13では、tcoffsetを最も大きいbS値に対しては特定値(例えば、2)に設定し、その他のbS値に対しては0に設定することを一例として簡単に示している。
図12及び図13のように、bS値が3種類の値のうち、いずれか一つの値に設定されても、決定木の判断ステップを2ステップに限定する必要はない。より多い判断ステップを経たり、より小さい判断ステップを経たりしても、図5の決定方法で使用する5種類のbS値をより減らして適用することができる。例えば、図12及び図13において、一つのステップで判断するブロックPとブロックQとが0でない係数(変換係数)を含むか、PとQとが相異する参照ピクチャを有するか、又はブロックPとブロックQとが相異する動きベクトルを有するかに関する判断を分けて実行することもできる。
図14は、bS値を3種類の値のうち、いずれか一つに決定する更に他の方法を概略的に説明する順序図である。
図14を参照すると、まずブロックP及び/又はブロックQがイントラ符号化されているか否かを判断する(S1410)。
ブロックP及び/又はブロックQがイントラ符号化されている場合は、ブロックPとブロックQとの間の境界に対するbSの値を2に決定する(S1420)。bSが2の場合は、図5の例でbS値が3と4の場合(bS=3/4)に対応する。
ブロックP及び/又はブロックQがイントラ符号化されていない場合は、ブロックPとブロックQとが0でない係数(変換係数)を含むか否かを判断する(S1430)。この際、変換係数は、逆量子化が適用される前の変換係数、又は逆量子化が適用された変換係数であってよい。
ブロックPとブロックQとが0でない係数(変換係数)を含む場合は、ブロックPとブロックQとの間の境界に対するbSの値を1に設定する(S1440)。この際、bS値が1の場合は、ブロックPとブロックQとがイントラ符号化されておらず、ブロック除去フィルタが適用されるbS値であり、図5の例でbSが2の場合に対応する。
ブロックPとブロックQとが0でない係数(変換係数)を含まない場合には、ブロックPとブロックQとが相異する参照ピクチャを有するか、又はブロックPとブロックQとが相異する動きベクトルを有するか否かを判断する(S1450)。
ステップS1450において、ブロックPとブロックQとが相異する参照ピクチャを有するか、又はブロックPとブロックQとが相異する動きベクトルを有する場合には、ブロックPとブロックQとの間の境界に対するbSの値を1に設定する(S1460)。bS値が1の場合は、ブロックPとブロックQとがイントラ符号化されておらず、ブロック除去フィルタが適用されるbS値であり、図5の例でbS値が1の場合に対応する。
その他の場合、すなわちブロック除去フィルタを適用しない場合に該当するとき、bSの値を0に設定する(S1470)。bSの値が0の場合は、ブロック除去フィルタを適用しない場合に対するbS値として、図5の例でbS値が0の場合(bS=0)に対応する。
bS決定木を用いてブロック歪み除去フィルタに必要な変数の値を設定することもできる。図13では、tcoffsetを最も大きいbS値に対しては特定値(例えば、2)に設定し、その他のbS値に対しては0に設定することを一例として簡単に示している。
以下、bSの値を簡素化して3種類の値のうち、いずれか一つの値によって導出する場合、bS値を導出する方法を具体的に説明する。
まず、発明の理解を助けるために、図5又は図11のように、bSの値を5個の値のうち、いずれか一つの値によって導出する場合の方法を先に説明する。
<bSを5種類の値のうちのいずれか一つの値によって導出する方法>
まず、bSが決定されるエッジを特定する。bSを決定するエッジの特定は、図6から図10を参照して説明した方法のうち、いずれか一つを用いて実行できる。
図6から図10を参照して説明したように、bSが決定されるエッジの特定によってbSを決定する基準位置(xEk、yEj)及びbSを決定するエッジの左右のサンプルであるp0及びq0、ブロック歪み除去フィルタの方向などが導出される。p0及びq0は上述したように(xEk、yEj)に基づいて決定される。
導出されたブロック歪み除去フィルタ方向によって、境界フィルタ処理強度を表す変数bS[filterDir][xEk][yEj]が決定される。例えば、filterDirの値が1であるとき、垂直方向のフィルタ処理を指示し、したがって、水平エッジに対するbSが導出される。filterDirの値が0であるとき、水平方向のフィルタ処理を指示し、したがって、垂直エッジに対するbSが導出される。xEk及びyEjはbSを決定するエッジを特定する。例えば、bSを決定するエッジは、水平エッジの場合(xC+xEk、yC+yEj−1)に設定されるp0と、(xC+xEk、yC+yEj)に設定されるq0との間の境界に特定することができ、垂直エッジの場合、(xC+xEk−1、yC+yEj)に設定されるp0と、(xC+xEk、yC+yEj)に設定されるq0との間の境界に特定できる。
bS[filterDir][xEk][yEj]の値は、次のとおり導出できる。
(1)bS決定対象であるブロックエッジがCUエッジであり、サンプルp0又はq0がイントラ予測モードで符号化されたCUに属するとき、bS、すなわちbS[filterDir][xEk][yEj]値は4に設定される。
(2)サンプルp0又はq0がイントラ予測モードで符号化されたCUに属するが、bS決定対象であるブロックエッジがCUエッジでないときは、bS[filterDir][xEk][yEj]値は3に設定される。
(3)bS決定対象であるブロックエッジがTUエッジであり、サンプルp0又はq0が0でない変換係数レベル(level)を含むTUに属するとき、bS[filterDir][xEk][yEj]値は2に設定される。
(4)その他、ブロック歪み除去フィルタが適用される場合のbS[filterDir][xEk][yEj]値は1に設定される。例えば、図5、図11、図12、図13、及び図14の例では、説明の便宜のために、サンプルp0又はq0がイントラ予測が適用されたブロックに属する場合でなく、かつブロック除去フィルタが適用される場合として、ブロックP及び/又はブロックQが0でない変換係数を含む場合と、ブロックPとブロックQとが相異する動きベクトルを有するか、又は相異する参照ピクチャを有する場合を例として挙げたが、 その他にも多様な場合に0でないbSが設定できる。例えば、(i)ブロックPとブロックQとが互いに異なる個数の動きベクトルを有する場合、(ii)ブロックPに使われた動きベクトルと、ブロックQに使われた動きベクトルとの垂直成分の間の絶対値の差又は水平成分の間の絶対値の差が1/4ピクセル単位で4以上の差がある場合にもbS[filterDir][xEk][yEj]値を1に設定することができる。
(5)(1)から(4)でない場合、すなわちブロック歪み除去フィルタを適用しない場合には、bS[filterDir][xEk][yEj]値を0に設定する。
一方、bS値を5種類の値のうち、いずれか一つの値によって導出する方法の場合とは異なり、図12から図14のように、bS値を3種類の値のうち、いずれか一つの 値によって導出して、より低い複雑度で簡単にbSを導出することもできる。
次に、bS値を3種類の値のうち、いずれか一つの値によって導出する方法の一例を説明する。
<bSを3種類の値のうち、いずれか一つの値によって導出する方法1>
bSが決定されるエッジを特定する。bSを決定するエッジの特定は、図6から図10を参照して説明した方法のうち、いずれか一つを用いて実行できる。
bSが決定されるエッジの特定によってbSを決定する基準位置(xEk、yEj)及びbSを決定するエッジの左右のサンプルであるp0及びq0、ブロック歪み除去フィルタの方向などが導出される。
導出されたブロック歪み除去フィルタ方向によって境界フィルタ処理強度を表す変数bS[filterDir][xEk][yEj]が決定される。例えば、filterDirの値が1であるとき、垂直方向のフィルタ処理を指示し、したがって、水平エッジに対するbSが導出される。filterDirの値が0であるとき、水平方向のフィルタ処理を指示し、したがって、垂直エッジに対するbSが導出される。xEk及びyEjはbSを決定するエッジを特定する。例えば、bSを決定するエッジは、水平エッジの場合、(xC+xEk、yC+yEj−1)に設定されるp0と、(xC+xEk、yC+yEj)に設定されるq0との間の境界に特定することができ、垂直エッジの場合、(xC+xEk−1、yC+yEj)に設定されるp0と、(xC+xEk、yC+yEj)に設定されるq0との間の境界に特定できる。
bS[filterDir][xEk][yEj]の値は、次のとおり導出できる。
(1)サンプルp0又はq0がイントラ予測モードで符号化されたCUに属するとき、bS、すなわちbS[filterDir][xEk][yEj]値は2に設定される。
(2)bS決定対象であるブロックエッジがTUエッジであり、サンプルp0又はq0が0でない変換係数レベル(level)を含むTUに属するとき、bS[filterDir][xEk][yEj]値は1に設定される。
(3)その他、ブロック歪み除去フィルタが適用される場合のbS[filterDir][xEk][yEj]値は1に設定される。例えば、先のbS決定木構造に関する図面と関連して例として説明した(i)p0を含むPU又はq0を含むPUが相異する参照ピクチャを有するか、又は相異する個数の動きベクトルを有する場合、(ii)p0を含むPUに使われた動きベクトルと、q0を含むPUに使われた動きベクトルとの垂直成分の間の絶対値の差又は水平成分の間の絶対値の差が1/4ピクセル単位で4以上の差がある場合、(iii)二つの動きベクトルがp0を含むPUで使われ、二つの動きベクトルがq0を含むPUで使われるとき、同一の参照ピクチャに対応する少なくとも一つの動きベクトル対に対し、動きベクトルの垂直成分の間の絶対値の差又は水平成分の間の絶対値の差が1/4ピクセル単位で4以上の差がある場合などに、bS[filterDir][xEk][yEj]値を1に設定することができる。
(4)(1)から(3)でない場合、すなわちブロック歪み除去フィルタを適用しない場合には、bS[filterDir][xEk][yEj]値を0に設定する。
一方、上述したように、4ステップでbSを導出せず、同一のbS値は同一のステップで導出されるようにすることができる。bS値を3種類のbS値のうち、いずれか一つの値に導出する方法の他の例は、次のとおりである。
<bSを3種類の値のうち、いずれか一つの値によって導出する方法2>
bSが決定されるエッジを特定する。bSを決定するエッジの特定は、図6から図10を参照して説明した方法のうち、いずれか一つを用いて実行できる。
bSが決定されるエッジの特定によってbSを決定する基準位置(xEk、yEj)及びbSを決定するエッジの左右のサンプルであるp0及びq0、ブロック歪み除去フィルタの方向などが導出される。
導出されたブロック歪み除去フィルタ方向によって、境界フィルタ処理強度を表す変数bS[filterDir][xEk][yEj]が決定される。例えば、filterDirの値が1であるとき、垂直方向のフィルタ処理を指示し、したがって、水平エッジに対するbSが導出される。filterDirの値が0であるとき、水平方向のフィルタ処理を指示し、したがって、垂直エッジに対するbSが導出される。xEk及びyEjはbSを決定するエッジを特定する。例えば、bSを決定するエッジは、水平エッジの場合、(xC+xEk、yC+yEj−1)に設定されるp0と、(xC+xEk、yC+yEj)に設定されるq0との間の境界に特定することができ、垂直エッジの場合、(xC+xEk−1、yC+yEj)に設定されるp0と、(xC+xEk、yC+yEj)に設定されるq0との間の境界に特定できる。
bS[filterDir][xEk][yEj]の値は、次のとおり導出できる。
(1)サンプルp0又はq0がイントラ予測モードで符号化されたCUに属するとき、bS、すなわちbS[filterDir][xEk][yEj]値は2に設定される。
(2)その他、ブロック歪み除去フィルタが適用される場合のbS[filterDir][xEk][yEj]値は1に設定される。例えば、bS決定対象であるブロックエッジがTUエッジであり、かつ(i)サンプルp0又はq0が0でない変換係数レベル(level)を含むTUに属する場合、(ii)p0を含むPU及びq0を含むPUが相異する参照ピクチャを有するか、又は相異する個数の動きベクトルを有する場合、(iii)p0を含むPUに使われた動きベクトルと、q0を含むPUに使われた動きベクトルとの垂直成分の間の絶対値の差、又は水平成分の間の絶対値の差が1/4ピクセル単位で4以上の差がある場合、(iv)二つの動きベクトルがp0を含むPUで使われ、二つの動きベクトルがq0を含むPUで使われるとき、同一の参照ピクチャに対応する少なくとも一つの動きベクトル対に対し、動きベクトルの垂直成分の間の絶対値の差、又は水平成分の間の絶対値の差が1/4ピクセル単位で4以上の差がある場合などにbS[filterDir][xEk][yEj]値を1に設定することができる。
(3)(1)及び(2)でない場合、すなわちブロック歪み除去フィルタを適用しない場合には、bS[filterDir][xEk][yEj]値を0に設定する。
一方、bS値が1によって導出される場合をbS決定対象であるブロックエッジがTUのエッジである場合に限定しないこともある。bS値を3種類の値のうち、いずれか一つの値によって導出する方法の更に他の例は、次のとおりである。
<bSを3種類の値のうち、いずれか一つの値によって導出する方法3>
bSが決定されるエッジを特定する。bSを決定するエッジの特定は、図6から図10を参照して説明した方法のうち、いずれか一つを用いて実行できる。
bSが決定されるエッジの特定によってbSを決定する基準位置(xEk、yEj)及びbSを決定するエッジの左右のサンプルであるp0及びq0、ブロック歪み除去フィルタの方向などが導出される。
導出されたブロック歪み除去フィルタ方向によって、境界フィルタ処理強度を表す変数bS[filterDir][xEk][yEj]が決定される。例えば、filterDirの値が1であるとき、垂直方向のフィルタ処理を指示し、したがって、水平エッジに対するbSが導出される。filterDirの値が0であるとき、水平方向のフィルタ処理を指示し、したがって、垂直エッジに対するbSが導出される。xEkとyEjはbSを決定するエッジを特定する。例えば、bSを決定するエッジは、水平エッジの場合、(xC+xEk、yC+yEj−1)に設定されるp0と、(xC+xEk、yC+yEj)に設定されるq0との間の境界に特定することができ、垂直エッジの場合、(xC+xEk−1、yC+yEj)に設定されるp0と、(xC+xEk、yC+yEj)に設定されるq0との間の境界に特定できる。
bS[filterDir][xEk][yEj]の値は、次のとおり導出できる。
(1)サンプルp0又はq0がイントラ予測モードで符号化されたCUに属するとき、bS、すなわちbS[filterDir][xEk][yEj]値は2に設定される。
(2)その他、ブロック歪み除去フィルタが適用される場合のbS[filterDir][xEk][yEj]値は1に設定される。例えば、(i)bS決定対象であるブロックエッジがTUエッジであり、かつサンプルp0又はq0が0でない変換係数レベル(level)を含むTUに属する場合、(ii)p0を含むPU又はq0を含むPUが相異する参照ピクチャを有するか、相異する個数の動きベクトルを有する場合、(iii)p0を含むPUに使われた動きベクトルとq0を含むPUに使われた動きベクトルの垂直成分の間の絶対値の差、又は水平成分の間の絶対値の差が1/4ピクセル単位で4以上の差がある場合、(iv)二つの動きベクトルがp0を含むPUで使われ、二つの動きベクトルがq0を含むPUで使われるとき、同一の参照ピクチャに対応する少なくとも一つの動きベクトル対に対し、動きベクトルの垂直成分の間の絶対値の差、又は水平成分の間の絶対値の差が1/4ピクセル単位で4以上の差がある場合などに、bS[filterDir][xEk][yEj]値を1に設定することができる。
(3)(1)及び(2)でない場合、すなわちブロック歪み除去フィルタを適用しない場合には、bS[filterDir][xEk][yEj]値を0に設定する。
bSを3種類の値のうち、いずれか一つの値によって導出する方法でp0を含むPUとq0を含むPUとで参照ピクチャが相異するということは、どんな参照ピクチャリストを使用するか、参照ピクチャリストの参照ピクチャインデクスが同一であるかにかかわらず、どんなピクチャが参照されたかによって決定される。
一方、今までは輝度サンプルについて説明したが、上述したように、導出したbSを色差サンプルにも適用することができる。
説明したように、bS値の個数を減らして複雑度を低めて、簡単にbSを導出する場合には、色差成分に対するブロック歪み除去フィルタ方法も修正適用する必要がある。
bSを5種類の値のうち、いずれか一つの値によって導出し、これを用いて色差成分(色差サンプル)に対するブロック歪み除去フィルタを適用する方法の一例は、次のとおりである。
<色差サンプルにブロック歪み除去フィルタを適用する方法1>
変数tcを特定する。変数tcは量子化程度に従うブロック歪みを定量化する値であって、tcoffsetに基づいて導出されるか、又は他のブロック除去パラメータに基づいて所定のテーブル上でマップされるように設定できる。
例えば、後述する<表1>のように、量子化パラメータQ、ブロック歪み除去フィルタを適用するかを決定する基準値としてのβなどによってtcが決定できる。
色差サンプルのエッジに対し、<bSを5種類の値のうち、いずれか一つの値によって導出する方法>で説明したように、bSを0から4までの値によって導出したとき、tc値を次のとおり特定できる。(1)bS値が2より大きいとき、概略(round)値を考慮したブロックP及びブロックQに対する量子化パラメータの平均値をqPLとするとき、tcは量子化パラメータQ=Clip(0、55、qPL)に対応する値に決定される。(2)bS値が2以下であるとき、tcは量子化パラメータQ=qPLに対応する値に決定される。
<表1>は、Q、β、t
c間の対応関係の一例を表すものである。
この際、tc=tc´*(1<<(BitDepthY-8))、β=β´*(1<<(BitDepthY-8))の関係であってよい。
色差サンプルに対するブロック歪み除去フィルタが<表1>の値に基づいて特定されたパラメータを用いて実行できる。
まず、垂直エッジに対し、各色差サンプル位置(xC+xB、yC+yB+k)を基準に、次のようにブロック歪み除去フィルタを実行する。この際、k=0,...,3である。
(1)垂直エッジを境界にするブロックPとブロックQにおいて、ブロックPの色差サンプルpi及びブロックQの色差サンプルqi(i=0,1)はqi=s’[xC+xB+i、yC+yB+k]、pi=s’[xC+xB−i−1、yC+yB+k]によって導出される。
(2)bSが2より大きいとき、(i)色差サンプル値pi及びqi(i=0,1)に対してフィルタ処理手続が実行される。(ii)フィルタ処理されたサンプル値p0’及びq0’がサンプル配列内で対応するサンプル位置を次のとおり置き換える。s’[xC+xB、yC+yB+k]=q0’、s’[xC+xB、yC+yB+k]=p0’
水平エッジに対し、次のように色差成分のブロック歪み除去フィルタを実行する。この際、k=0,...,3である。
(1)ブロックPの色差サンプルpi及びブロックQの色差サンプルqi(i=0,1)はqi=s’[xC+xB+i、yC+yB+k]、pi=s’[xC+xB−i−1、yC+yB+k]によって導出される。
(2)bSが2より大きいとき、(i)色差サンプルpi及びqi(i=0,1)に対してフィルタ処理手続が実行される。(ii)フィルタ処理されたサンプルp0’とq0’がサンプル配列内で対応するサンプルを次のとおり置き換える。s’[xC+xB、yC+yB+k]=q0’、s’[xC+xB、yC+yB+k]=p0’
水平エッジに対しては、次のようにブロック歪み除去フィルタを実行する。
(1)水平エッジを境界にするブロックP及びブロックQにおいて、ブロックPの色差サンプルpi及びブロックQの色差サンプルqi(i=0,1)は、qi=s’[xC+xB+k、yC+yB+i]、pi=s’[xC+xB+k、yC+yB−i−1]によって導出される。この際、kは0,...,3の値を有することができる。
(2)bSが2より大きいとき、(i)各色差サンプルpi及びqi(i=0,1)に対してブロック歪み除去フィルタを適用する。(ii)フィルタ処理されたサンプルp0’及びq0’がサンプル配列内で対応するサンプルを次のとおり置き換える。s’[xC+xB、yC+yB+k]=q0’、s’[xC+xB−1、yC+yB+k]=p0’
上述したフィルタ処理過程において、bSの値が2より大きいとき、フィルタ処理されるサンプルは、次の<式5>のように導出される。
<式5>
Δ = Clip3(-tC, tC, ( ( ( ( q0 - p0 ) << 2 ) + p1 - q1 + 4 ) >> 3 ) )
p0’ = Clip1C( p0 + Δ )
q0’ = Clip1C( q0 - Δ )
一方、bS値の個数を減らして複雑度を低めて、簡単に導出したbSを適用する場合には、色差サンプルに対するブロック歪み除去フィルタ方法を次のように適用することができる。
<色差サンプルにブロック歪み除去フィルタを適用する方法2>
変数tcを特定する。変数tcは量子化程度に従うブロック歪みを定量化する値であって、tcoffsetに基づいて導出されるか、又は他のブロック除去パラメータに基づいて所定のテーブル上でマップされるように設定できる。
例えば、後述する<表2>のように、量子化パラメータQ、ブロック歪み除去フィルタを適用するか否かを決定する基準値としてのβなどによってtcが決定できる。
色差サンプルのエッジに対し、<bSを3種類の値のうち、いずれか一つの値によって導出する方法>で説明したように、bSを0から2までの値によって導出したとき、tc値を次のとおり特定できる。(1)bS値が2より大きいとき、概略値を考慮したブロックP及びブロックQに対する量子化パラメータの平均値をqPLとするとき、tcは量子化パラメータQ=Clip(0,55、qPL)に対応する値に決定される。(2)bS値が2以下であるとき、tcは量子化パラメータQ=qPLに対応する値に決定される。
<表2>は、Q、β、t
c間の対応関係の一例を示すものである。
この際、tc=tc´*(1<<(BitDepthY-8))、β=β´*(1<<(BitDepthY-8))の関係にある。
色差サンプルに対するブロック歪み除去フィルタも<表2>の値に基づいて特定されたパラメータを用いて実行できる。
まず、垂直エッジに対し、各色差サンプル位置(xC+xB、yC+yB+k)を基準に次のようにブロック歪み除去フィルタを実行する。この際、k=0,...,3である。
(1)垂直エッジを境界にするブロックP及びブロックQにおいて、ブロックPの色差サンプルpi及びブロックQの色差サンプルqi(i=0,1)はqi=s’[xC+xB+i、yC+yB+k]、pi=s’[xC+xB−i−1、yC+yB+k]によって導出される。
(2)bSが1より大きいとき、(i)色差サンプル値pi及びqi(i=0,1)に対してフィルタ処理手続が実行される。(ii)フィルタ処理されたサンプル値p0’及びq0’がサンプル配列内で対応するサンプル位置を次のとおり置き換える。s’[xC+xB、yC+yB+k]=q0’、s’[xC+xB、yC+yB+k]=p0’
水平エッジに対し、次のように色差成分のブロック歪み除去フィルタを実行する。この際、k=0,...,3である。
(1)ブロックPの色差サンプルpi及びブロックQの色差サンプルqi(i=0,1)はqi=s’[xC+xB+i、yC+yB+k]、pi=s’[xC+xB−i−1、yC+yB+k]によって導出される。
(2)bSが1より大きいとき、(i)色差サンプルpi及びqi(i=0,1)に対してフィルタ処理手続が実行される。(ii)フィルタ処理されたサンプルp0’及びq0’がサンプル配列内で対応するサンプルを次のとおり置き換える。s’[xC+xB、yC+yB+k]=q0’、s’[xC+xB、yC+yB+k]=p0’
水平エッジに対しては、次のようにブロック歪み除去フィルタを実行する。
(1)水平エッジを境界にするブロックP及びブロックQにおいて、ブロックPの色差サンプルpi及びブロックQの色差サンプルqi(i=0,1)はqi=s’[xC+xB+k、yC+yB+i]、pi=s’[xC+xB+k、yC+yB−i−1]によって導出される。この際、kは0,...,3の値を有することができる。
(2)bSが1より大きいとき、(i)各色差サンプルpi及びqi(i=0,1)に対してブロック歪み除去フィルタを適用する。(ii)フィルタ処理されたサンプルp0’及びq0’がサンプル配列内で対応するサンプルを次のとおり置き換える。s’[xC+xB、yC+yB+k]=q0’、s’[xC+xB−1、yC+yB+k]=p0’
上述したフィルタ処理過程において、bSの値が1より大きいとき、フィルタ処理されるサンプルは、次の<式6>のように導出される。
<式6>
Δ = Clip3(-tC, tC, ( ( ( ( q0 - p0 ) << 2 ) + p1 - q1 + 4 ) >> 3 ) )
p0’ = Clip1C( p0 + Δ )
q0’ = Clip1C( q0 - Δ )
一方、ブロック境界でブロック歪みを誘発する主原因のうちの一つは、ブロックベースの動き補償である。これを克服するために重複ブロック動き保証(Overlapped Block Motion Compensation、OBMC)が使用できる。
OBMCを使用する場合には、上述したbS決定過程もOBMCに合うように修正する必要がある。例えば、ブロック間の動き情報が異なるとき、ブロック歪みが甚だしいことがあるため、bSの値0及び1を決定する基準のうちの一つは動き情報の類似性ということができる。しかしながら、OBMC技術を使用すると、動き補償を実行する領域の境界でブロック歪みが減る。結果的に、不要なブロック歪み除去フィルタを減らすことができるが、これを反映してbS決定プロセス(bS決定木)を修正する必要がある。
図15は、OMBCを適用する場合に適用されるbS決定木の一例であって、bSを決定する方法を概略的に説明する順序図である。
図15を参照すると、まずブロックP及び/又はブロックQがイントラ符号化されているか否かを判断する(S1500)。
ブロックP及び/又はブロックQがイントラ符号化されている場合には、ブロックQの境界、すなわちブロックPとブロックQとの境界が符号化ブロックの境界であるか否かを判断する(S1510)。この際、符号化ブロックということはCU及びLCUを含む。
ステップS1510において、ブロックPとブロックQとの境界が符号化ブロックの境界の場合には、ブロックPとブロックQとの間の境界に対するbSの値をbS4(例えば、bS4=4)に決定する(S1520)。
ステップS1520において、ブロックPとブロックQとの境界が符号化ブロックの境界でない場合には、ブロックPとブロックQとの間の境界に対するbSの値をbS3(例えば、bS3=3)に決定する(S1530)。
ステップS1500において、ブロックP及びブロックQがイントラ符号化されていない場合には、ブロックPとブロックQとが単一符号化ブロック(例えば、CU)内の矩形又は非対称パーティション(Partition)内にあるか否かを判断する(S1540)。
ステップS1540において、ブロックPとブロックQとが単一符号化ブロック(例えば、CU)内の矩形又は非対称パーティション内にない場合には、ブロックP及び/又はブロックQが係数(0でない変換係数)を含むか否かを判断する(S1550)。この際、変換係数は、逆量子化が適用される前の変換係数、又は逆量子化が適用された後の変換係数であってよい。
ステップS1550において、ブロックP及び/又はブロックQが係数(0でない変換係数)を含む場合には、ブロックPとブロックQとの間の境界に対するbSをbS2(例えば、bS2=2)に決定する(S1560)。
ステップS1550において、ブロックP及び/又はブロックQが係数(0でない変換係数)を含まないときは、ブロックPとブロックQとが相異する参照ピクチャ又は動きベクトルを有するか否かを判断する(S1570)。
ステップS1570において、ブロックPとブロックQとが相異する参照ピクチャ又は動きベクトルを有する場合には、ブロックPとブロックQとの間の境界に対するbSをbS1(例えば、bS1=1)に決定する(S1580)。
その他の場合、すなわちブロック除去フィルタを適用しない場合に該当するとき、bSをbS0(例えば、bS0=0)に設定する(S1590)。bSをbS0に設定する場合は、ステップS1540でブロックPとブロックQとが単一符号化ブロック(例えば、CU)内の矩形又は非対称パーティション内にない場合、又はステップS1570でブロックPとブロックQとが相異する参照ピクチャ又は動きベクトルを有しない場合を含む。
図15の例でも、先のbS決定に関する例と同様に、bS4>bS3>bS2>bS1>bS0の関係を維持する。したがって、bS0〜bS4の値を上記の例及び図示したように、bS4=4、bS3=3、bS2=2、bS1=1、bS0=0に設定することができる。
また、先の例と同様に、bS決定木を用いてブロック歪み除去フィルタに必要な変数の値を設定することもできる。図15では、最も大きい2bS値に対してはtcoffsetを特定値(例えば、2)に設定し、その他のbS値に対してはtcoffsetを0に設定する一例を簡単に示している。
図15の例では、ブロックPとブロックQとが同一の符号化ブロック(例えば、CU)内にあり、かつ矩形パーティション(例えば、予測ブロック、PUなど)内にあるか、又は非対称パーティション(例えば、予測ブロック、PUなど)内にあるとき、ブロックPとブロックQとの間の境界に対するbSの値を0に決定することができる。
これとは異なり、ブロックPとブロックQとが同一の符号化ブロック(例えば、CU)内にあり、かつ矩形パーティション(例えば、予測ブロック、PUなど)内にあるか、非対称パーティション(例えば、予測ブロック、PUなど)内にある場合、ブロックPの動き情報とブロックQの動き情報との差が大きいとき、ブロックPとブロックQとの間の境界に対するbS値を1に決定し、ブロックPの動き情報とブロックQの動き情報との差が小さいとき、ブロックPとブロックQとの間の境界に対するbSを0に決定することもできる。
図16は、OMBCを適用する場合に適用されるbS決定木の他の例であって、bSを決定する方法を概略的に説明する順序図である。
図16を参照すると、まずP及び/又はQがイントラ符号化されているか否かを判断する(S1600)。
ブロックP及び/又はブロックQがイントラ符号化されている場合には、ブロックQの境界、すなわちブロックPとブロックQとの境界が符号化ブロックの境界であるか否かを判断する(S1610)。この際、符号化ブロックとはCU及びLCUを含む。
ステップS1610において、ブロックPとブロックQとの境界が符号化ブロックの境界である場合には、ブロックPとブロックQとの間の境界に対するbSの値をbS4(例えば、bS4=4)に決定する(S1620)。
ステップS1620において、ブロックPとブロックQとの境界が符号化ブロックの境界でない場合には、ブロックPとブロックQとの間の境界に対するbSの値をbS3(例えば、bS3=3)に決定する(S1630)。
ステップS1600において、ブロックP及びブロックQがイントラ符号化されていない場合には、ブロックPとブロックQとが単一符号化ブロック(例えば、CU)内の矩形又は非対称パーティション(Partition)内にあるか否かを判断する(S1640)。
ステップS1640において、ブロックPとブロックQとが単一符号化ブロック(例えば、CU)内の矩形又は非対称パーティション内にないとき、ブロックP及び/又はブロックQが係数(0でない変換係数)を含むか否かを判断する(S1650)。この際、変換係数は、逆量子化が適用される前の変換係数、又は逆量子化が適用された後の変換係数であってよい。
ステップS1650において、ブロックP及び/又はブロックQが係数(0でない変換係数)を含む場合には、ブロックPとブロックQとの間の境界に対するbSをbS2(例えば、bS2=2)に決定する(S1660)。
ステップS1640において、ブロックPとブロックQとが単一符号化ブロック(例えば、CU)内の矩形又は非対称パーティション内にある場合、又はステップS1650において、ブロックP及び/又はブロックQが係数(0でない変換係数)を含まない場合は、ブロックPとブロックQとが相異する参照ピクチャ又は動きベクトルを有するか否かを判断する(S1670)。
ステップS1670において、ブロックPとブロックQとが相異する参照ピクチャ又は動きベクトルを有する場合には、ブロックPとブロックQとの間の境界に対するbSをbS1(例えば、bS1=1)に決定する(S1680)。
その他の場合、すなわちブロック除去フィルタを適用しない場合に該当するとき、bSをbS0(例えば、bS0=0)に設定する(S1690)。
図16の例でも、先のbS決定に関する例と同様に、bS4>bS3>bS2>bS1>bS0の関係を維持する。したがって、bS0〜bS4の値の例及び図示したように、bS4=4、bS3=3、bS2=2、bS1=1、bS0=0に設定することができる。
上述したように、図16の例ではブロックPとブロックQとが同一の符号化ブロック(例えば、CU)内にあり、かつ矩形パーティション(例えば、予測ブロック、PUなど)内にあるか、又は非対称パーティション(例えば、予測ブロック、PUなど)内にあるとき、ブロックPとブロックQとの間の境界に対するbS値をbS1(例えば、bS=1)に決定することができる。
また、先の例と同様に、bS決定木を用いてブロック歪み除去フィルタに必要な変数の値を設定することもできる。図16では、最も大きい2bS値に対してはtcoffsetを特定値(例えば、2)に設定し、その他のbS値に対してはtcoffsetを0に設定する一例を簡単に示している。
一方、ブロックP及び/又はブロックQがイントラ符号化されている場合、bSの値を区分する必要がないこともある。例えば、図5、図15、又は図16の例のように、Iスライス(イントラ符号化されたスライス)で対象境界が符号化ブロック(例えば、CU)の境界であるかを判断して、符号化ブロックの境界であるとき、bSを4に決定し、その他の境界である場合は、bSを3に決定するとき、すべてのIスライスに対して結局bSの値は3又は4に帰結される。
これと関連して、図12から図14のように、bS決定木を修正して複雑度を低める方法が適用されるとき、結局bSの値は0より大きいか、又は1や2より大きいかを考慮して、単純に適用される可能性もある。したがって、bSの値が3か4かを区別する必要がないこともある。
図17は、bSを決定してブロック歪み除去フィルタを適用する方法の一例を概略的に説明する図である。
図17を参照すると、ブロック歪み除去フィルタを適用するためにbSを決定し(S1710)、決定されたbSによってブロック基盤のフィルタ処理オン/オフを決定し(S1720)、所定のbSに対して強フィルタを適用するか、弱フィルタを適用するかを決定して(S1730)、フィルタ処理を実行する(S1740)。
図17の例において、ブロック除去フィルタを適用する方法は、先の図3に基づいて説明した方法と同一又は類似することを確認することができる。
この際、bS決定ステップ(S1710)では、図5、図15、又は図16のように、ブロックP及び/又はブロックQがイントラ符号化されている場合、対象境界が符号化ブロックの境界であるかを区分してbS値を決定することもできる。
図18は、bSを決定してブロック歪み除去フィルタを適用する方法の他の例を概略的に説明する図である。図18では図17とは異なり、ブロックP及び/又はブロックQがイントラ符号化されている場合(Iスライスの場合)に、bSを追加的に区分して決定しない。
図18を参照すると、ブロック歪み除去フィルタを適用するためにブロックP及び/又はブロックQがイントラ符号化されているか(Iスライスであるか)を判断する(S1810)。
ブロックP及び/又はブロックQがイントラ符号化されていない場合は、図17の例のように、bSを決定する一般的なステップを実行する(S1820)。
ブロックP及び/又はブロックQがイントラ符号化されている場合(Iスライスの場合)は、図17の例とは異なり、bSを一つの値(例えば、4)に決定する(S1830)。
次に、決定されたbSによってブロック基盤のフィルタ処理オン/オフを決定し(S1840)、所定のbSに対して強フィルタを適用するか、弱フィルタを適用するかを決定して(S1450)、フィルタ処理を実行する(S1860)。
図18の例の以外に、先に説明したブロック歪み除去フィルタの方法を修正して適用するもう一つの方法として、図6の例で説明した代表bSを用いる方法を修正してブロック歪み除去フィルタを実行することを考慮することができる。
図6の例では、8×8ピクセルブロック単位でブロック歪み除去フィルタを実行する場合、4×4ピクセル単位で決定される二つのbSのうち、大きい値を有するbSを代表bSに用いる方法を説明した。
図19は、代表bSを決定する方法の一例を概略的に説明する順序図である。
図19を参照すると、代表bSを選定するために、ブロック歪み除去フィルタの単位ブロックでbS1とbS2とのサイズを比較する(S1910)。
ステップS1910において、bS1がbS2より大きいとき、代表bSをbS1に決定する(S1920)。反対に、ステップS1910でbS2がbS1より大きいとき、代表bSをbS2に決定する(S1930)。
bS1及びbS2は、ブロック歪み除去フィルタの単位ブロックで二つの垂直エッジに対するbS、又は2水平エッジに対するbSであってよい。図15の方法は、垂直エッジに対するブロック歪み除去フィルタ過程で実行されて垂直エッジに対する代表bSを決定することに用いられた後に、水平エッジに対するブロック歪み除去フィルタ過程で実行されて水平エッジに対する代表bSを決定することに利用できる。
フィルタ処理部は、決定された代表bSを用いてブロック歪み除去フィルタを実行することができる。
図19の例は、図6の例のように、大きい値を有するbSを代表bSに用いる方法を説明している。これと異なり、過度なブロック歪み除去フィルタを減らし、フィルタ処理の演算量を減少させるために、代表bSを決定する方法を異にすることもできる。
図20は、代表bSを決定する方法の他の例を概略的に説明する順序図である。
図20を参照すると、代表bSを選定するために、ブロック歪み除去フィルタの単位ブロックでbS1とbS2とのサイズを比較する(S2010)。
ステップS2010において、bS1がbS2より小さいとき、代表bSをbS1に決定する(S2020)。反対に、ステップS2010でbS2がbS1より小さいとき、代表bSをbS2に決定する(S2030)。
bS1及びbS2は、ブロック歪み除去フィルタの単位ブロックで二つの垂直エッジに対するbS、又は二つの水平エッジに対するbSであってよい。図20の方法も垂直エッジに対するブロック歪み除去フィルタ過程で実行されて垂直エッジに対する代表bSを決定することに利用された後に、水平エッジに対するブロック歪み除去フィルタ過程で実行されて水平エッジに対する代表bSを決定することに利用できる。
決定された代表bSを用いてフィルタ処理部はブロック歪み除去フィルタを実行することができる。
一方、図17及び図18で説明したように、bS値を5種類の値のうち、いずれか一つの値によって導出して適用しても、実際にブロック歪み除去フィルタを実行する場合には、bS値が0より大きいか、bS値が2より大きいかだけを判断できる。したがって、3種類の区別されるbS値だけあるとき、ピクセル又はブロックの特性によってブロック歪み除去フィルタを効果的に実行することができる。
図21は、bS決定木(bS決定方法)を簡素化する他の方法を概略的に説明する順序図である。
図21を参照すると、まずP及び/又はQがイントラ符号化されているか否かを判断する(S2110)。
ブロックP及び/又はブロックQがイントラ符号化されている場合には、ブロックPとブロックQとの間の境界に対するbSの値を2に決定する(S2120)。
ブロックP及び/又はブロックQがイントラ符号化されていない場合は、ブロックPとブロックQとが0でない係数(変換係数)を含むか、ブロックPとブロックQとが相異する参照ピクチャを有するか、又はブロックPとブロックQとが相異する動きベクトルを有するか否かを判断する(S2130)。
ステップS2130において、ブロックPとブロックQとが0でない係数(変換係数)を含むか、PとQとが相異する参照ピクチャを有するか、又はブロックPとブロックQとが相異する動きベクトルを有する場合には、ブロックPとブロックQとの間の境界に対するbSの値を1に設定する(S2140)。
その他の場合、すなわちブロック除去フィルタを適用しない場合に該当するとき、bSの値を0に設定する(S2140)。
言い換えると、ブロック歪み除去フィルタを適用しない場合であるbS値が0の場合は、PとQとがすべてインタ予測モードで符号化され、動き情報が類似な場合である。この際、動き情報が類似するということは、参照ピクチャが同一であり、動きベクトルの各成分間の差が4より小さい場合(例えば、動きベクトルのx成分の間の差が4より小さく、y成分の間の差も4より小さい場合)である。
この際、ブロックPとブロックQとに対する符号化ブロックフラグ(Coded Block Flag、cbf)が0でない場合、すなわちブロックPとブロックQとに0でない変換係数が存在する場合にも、ブロックPとブロックQとがインタ予測モードに予測され、動き情報が類似すると、bS値を0に決定することができる。その他の場合、すなわち動き情報が類似しないか、又はブロックP及び/又はブロックQがイントラ予測モードで符号化されている場合などにおいて、bSは1又は2に決定できる。
しかしながら、ブロックPとブロックQとに0でない変換係数が存在するとき(cbfの値が0でないとき)、ブロックPとブロックQとの動き情報が類似してbSが0に決定されてもブロック歪み除去フィルタの適用が必要であってよい。0でない変換係数が存在する場合に動き情報が類似してブロック歪み除去フィルタの適用が排除されると、ユーザの主観的な損失及びデータの客観的な損失が発生することがあるためである。
したがって、次のようにbSの値が0になる場合を厳格に判断することもできる。
例えば、上述したように、図21ではエッジを介した二つのブロックP及びQの参照ピクチャが同一であり、ブロックPとブロックQとの動きベクトル成分の間の差が4より小さい場合を動き情報が類似な場合と判断した。したがって、ブロックPの動きベクトルMVPとブロックQの動きベクトルMVQに対し、一つの成分の間の差が4以上になってもbSは0でなくなる。すなわち、MVPのx成分MVp0とMVQのx成分MVQ0との間の差が4以上、又はMVPのy成分MVP1とMVQのy成分MVQ1との間の差が4以上であるとき、bSは0でない値、例えば1に設定される。
したがって、動きベクトルの成分の間の差を4より小さいか、又は4と等しいか4より大きいかによって判断せず、任意のしきい値を設定した後、動きベクトルの成分の間の差をしきい値と比較するようにすることもできる。例えば、MVPのx成分MVp0とMVQのx成分MVQ0との間の差がしきい値Th0以上、又はMVPのy成分MVP1とMVQのy成分MVQ1との間の差がしきい値Th1以上であるとき、bSを1(ブロックP及び/又はブロックQがイントラ予測モードで符号化されている場合は2)に設定することができる。この際、Th0とTh1は同一でありえる。例えば、しきい値が小さいとき、bSの値が0になる場合が減るため、しきい値Th0/Th1を4より小さい値(2又は3)に設定されて、bSの値が0になる場合を減らすことができる。
<式7>は、上記の方法によって、bS値を0にするか、1にするかを決定する方法の一例を表すものである。
<式7>
(1) pcMVP0 -= pcMVQ0; pcMVP0 -= pcMVQ0;
(2) uiBs = (pcMVP0.getAbsHor() >= th) | (pcMVP0.getAbsVer() >= th) |
(pcMVP1.getAbsHor() >= th) | (pcMVP1.getAbsVer() >= th);
<式3>において、(1)はブロックPの動きベクトルとブロックQの動きベクトルに対してx成分の間の差とy成分の間の差を求めるものであり、(2)は各成分の差がしきい値より大きいか否かを判断するものである。
一方、ブロック歪み除去フィルタの複雑度を低めるために、tc_offsetを除去することもできる。
先の色差成分に対するブロック歪み除去フィルタ方法で説明したように、概略値を考慮したブロックP及びブロックQに対する量子化パラメータの平均値をqPLとするとき、(1)bS値が所定の値(例えば、2又は1)より大きいとき、tcは量子化パラメータQ=Clip(0,55、qPL)に対応する値に決定される。(2)bS値が所定の値(例えば、2又は1)以下であるとき、tcは量子化パラメータQ=qPLに対応する値に決定できる。
この際、量子化パラメータQ値とtcとの間の対応関係は、表を通じて特定できる。
<表3>は、ブロック除去パラメータ(Q、t
c、β)の間の対応関係の一例を表すものである。
<表3>では、説明の便宜のために、β及びtcで表したが、本発明はこれに限定されない。例えば、<表3>は<表1>及び<表2>のように、β’及びtc’で表すこともでき、この場合、tc及びβはtc=tc´*(1<<(BitDepthY-8))、β=β´*(1<<(BitDepthY-8))を用いてtc’及びβ’から導出できる。
上述したように、tc及びβは強フィルタ処理を適用するかを決定する基準であってよい。例えば、エッジから最も近いPの3個のサンプルを順にp0、P1、P2とし、エッジから最も近いQの3個のサンプルを順にq0、q1、q2としたとき、(1)abs(p2−2p1+p0)+abs(q2−2q1+q0)=dPqとすると、dPqが(β>>2)より小さいか否かを判断することができる。(2)p0、p1、p2及びq0、q1、q2以外のサンプル、例えばp3及びq3を更に考慮してabs(p3−p0)+abs(q0−q3)が(β>>3)より小さいか否かを判断することができる。(3)また、境界の左右の二つのサンプルp0及びq0に対し、abs(p0−q0)が(5*tc+1)>>1より小さいか否かを判断することができる。上述したように、ブロック内で複数の列又は行を取って判断を実行することができる。例えば、垂直エッジに対しては複数の行を選択して各々の行に対して(1)から(3)を判断することができ、水平エッジに対しては複数の列を選択して各々の列に対して(1)から(3)を判断することができる。
垂直エッジの場合、複数の行に対し、(1)から(3)の結果がすべて基準より小さいと判断されるとき、当該エッジに強フィルタ処理を適用するようにすることができる。水平エッジの場合、複数の列に対し、(1)から(3)の結果がすべて基準より小さいと判断されるとき、当該エッジに強フィルタ処理を適用するようにすることができる。
ブロックPに対する輝度サンプルの量子化パラメータQPPと、ブロックQに対する輝度サンプルの量子化パラメータQPQとを用いて量子化パラメータに関する変数qPLをqPL=((QPQ+QPP+1)>>1)として定義することができる。
bSを5個の値のうち、いずれか一つの値によって導出するとき、bSが2より大きいとき、量子化パラメータQ=Clip3(0、55、qPL+2)に設定することができ、量子化パラメータQとβ値に対応するtc値とを<表3>から取得することができる。この際、bSが2より小さいか等しいとき、Q=qPLに設定し、量子化パラメータQとβ値に対応するtc値とを<表3>から取得することができる。
一方、bSを3個の値のうち、いずれか一つの値によって導出する場合(例えば、図12から図14の例)には、量子化Q値をbS値にかかわらず、一つの値に決定した後、決定された量子化パラメータQ値とβ値に対応するtc値を<表3>から取得することができる。例えば、bS値を3個の値(0,1,2)のうち、いずれか一つの値によって導出する場合には、量子化パラメータQ=Clip3(0、55、qPL+2*bS−2)に決定し、決定された量子化パラメータQ値とβ値に対応するtc値を<表3>から取得することができる。
一方、量子化パラメータQ値を決定するとき、bS値、ブロックP及びブロックQの量子化パラメータ並びにbS値の他にtc_offsetの値を考慮して、より正確なtc値を取得することもできる。例えば、デコーダはスライスヘッダから転送されるtc_offset情報を反映して量子化パラメータQ値を決定することができる。
スライスヘッダから転送されるtc_offset情報は、スライスごとに最適化されたブロック除去フィルタを適用するために転送される値であって、エッジに隣接したqサンプルを含むスライスに対するtc_offset情報として、slice_tc_offset_div2と表すことができる。slice_tc_offset_div2は、tcに対するデフォルトブロック除去パラメータオフセットの値を特定する。
この場合、量子化パラメータQ=Clip3(0,55、qPL+2*bS−2+slice_tc_offset_div2<<1)に設定され、変数tcは設定された量子化パラメータQ値及びβ値に基づいて決定できる。例えば、tcは量子化パラメータQ及びβ値に基づいて、<表3>のように量子化パラメータQ、β、tcの間の関係を規定するテーブルを用いて決定できる。
したがって、スライスヘッダから転送されるtc_offset情報(slice_tc_offset_div2)に基づいてQ値を上述したように決定し、やはり符号化装置から転送されたβ値及びQ値に基づいてtc値を決定することができる。tc値は、上述したように、量子化程度に従うブロック歪みを定量化する値であって、ブロック歪み除去フィルタを適用する場合にフィルタ処理されたピクセル値の範囲(クリップ範囲)を決定する基準として使われることもあり、又は強フィルタ処理を適用するか弱フィルタ処理を適用するかを決定する基準として使われることもある。
図22は、本発明に従って映像を符号化する方法を概略的に説明する順序図である。
図22を参照すると、符号化装置は入力された映像を分割し、現在ブロックに対する予測を実行する(S2210)。現在ブロックに対する予測は符号化装置の予測部で実行することができる。予測部は、現在ブロックに対してイントラ予測を実行することもでき、インタ予測を実行することもできる。イントラ予測を実行するか、インタ予測を実行するかはレート歪み最適化(Rate Distortion Optimization、RDO)などを考慮して決定できる。
スキップモードが適用されないときは、予測部は予測信号を生成し、原映像信号と予測信号との差である残差信号を生成することができる。
符号化装置は、残差信号を変換及び量子化することができる(S2220)。残差信号の変換は変換部で実行することができ、変換された信号(例えば、変換係数)の量子化は量子化部で実行できる。
変換及び量子化された信号は、エントロピ符号化過程を経て転送できる。
符号化装置は、変換及び量子化された信号を逆量子化及び逆変換して現在ブロックを復元する(S2230)。逆量子化及び逆変換された信号は残差信号と加算されて原映像信号に復元される。
符号化装置は、復元された信号にブロック歪み除去フィルタを適用することができる(S2240)。復元された信号はブロック歪み除去フィルタによって原映像に一層近い信号に復元できる。ブロック歪み除去フィルタは、フィルタ部で実行することができ、フィルタ部はブロック歪み除去フィルタを適用した後、SAOを適用することもできる。
ブロック歪み除去フィルタの具体的な方法は、図面と共に前述したとおりである。
ブロック歪み除去フィルタが適用された信号は、復号ピクチャバッファ(DPB)のようなメモリに記憶され、他のブロック又は他のピクチャの予測に参照できる。
ここでは、予測によって残差信号を生成し転送することを説明したが、スキップモードが適用される場合には残差信号を生成/転送しない。
図23は、本発明に従って映像を復号する方法を概略的に説明する順序図である。
図23を参照すると、復号装置は受信したビットストリームをエントロピ復号し、現在ブロックに対する予測を実行する(S2310)。現在ブロックに対する予測は、復号装置内の予測部で実行することができる。予測部は、符号化装置から通知された情報に基づいて現在ブロックに対するインタ予測を実行したり、イントラ予測を実行したりすることができる。予測部は、予測によって現在ブロックに対する予測信号(予測ブロック)を生成する。
復号装置は、現在ブロックに対する予測に基づいて現在ブロックを復元する(S2320)。復号装置は、符号化装置から受信したビットストリームから逆量子化/逆変換を通じて残差信号(残差ブロック)を生成し、予測信号(予測ブロック)と残差信号(予測ブロック)とを加えて復元信号(復元ブロック)を生成することができる。スキップモードが適用された場合には、残差信号が転送されず、予測信号を復元信号にすることができる。
復号装置は、復元信号(復元ブロック)にブロック歪み除去フィルタを適用する(S2330)。ブロック歪み除去フィルタは、復号装置内のフィルタ部で実行できる。フィルタ部は、復元ブロックにブロック歪み除去フィルタを適用して復元ブロックを原映像ブロックに一層近く修正する。
ブロック歪み除去フィルタの具体的な内容は、先の図面と共に詳細に説明したとおりである。
フィルタ部は、ブロック歪み除去フィルタを適用した後、符号化装置から受信した情報に基づいて復元ブロックにSAOを適用することもできる。
フィルタ部を経て復元された信号は、DPBのようなメモリに記憶されて他のブロック又は他のピクチャの予測に参照することができ、復元映像として出力することもできる。
図22及び図23では、発明の理解を助けるために、本発明に従うブロック歪み除去フィルタが符号化/復号過程で適用することを概略的に説明するためのものであり、先の図面と共に詳細に説明した符号化/復号過程のプロセスが共に適用できることに留意する。
図24は、本発明に従ってbSを導出する方法の一例を概略的に説明する順序図である。
図24を参照すると、bSを決定するための境界が導出される(S2410)。bSを決定するための境界は、ブロック歪み除去フィルタを適用する単位ブロックの境界であってよい。又は、bSを決定するための境界はbSを決定する単位ブロックの境界であってよい。又は、bSを決定するための境界はブロック歪み除去フィルタを適用する単位ブロックの境界であり、かつbSを決定する単位ブロックの境界であってよい。
bSを決定するための境界が導出されるとき、bS設定単位別にbSを設定する(S2420)。bSを決定するための境界がブロック歪み除去フィルタを適用する単位ブロックの境界の場合、bSを決定するための境界であり、かつbS決定単位ブロックの境界に該当するエッジごとにbSが設定できる。bSを決定するための境界がbSを決定する単位ブロックの境界の場合、bSを決定する境界であり、かつブロック歪み除去フィルタを適用する単位ブロックの境界に該当するエッジに対してbSが設定できる。bSを決定するための境界がブロック歪み除去フィルタを適用する単位ブロックの境界であり、かつbSを決定する単位ブロックの境界の場合、bSを決定する境界に対してbSが設定できる。
bSを設定する方法は、上述したように、5種類のbS値のうち、いずれか一つの値に当該境界に対するbSを導出することもでき、3種類のbS値のうち、いずれか一つの値に当該境界に対するbSを導出することもできる。その他、複雑度を低めてbSを導出する方法が適用できる。bSを導出/決定する具体的な方法は、上述したとおりである。
図24では、説明の便宜のために、bS決定単位ブロックの境界であり、かつブロック歪み除去フィルタ処理単位ブロックの境界であるエッジに対してbSを決定することを説明したが、本発明はこれに限定されず、前述した代表値を決定する方法などを用いてbSを決定することもできる。
上述した例示的なシステムにおいて、方法は一連のステップ又はブロックであって、順序度に基づいて説明されているが、本発明はステップの順序に限定されるものではなく、あるステップは上述したものと異なるステップと異なる順序で、又は同時に発生することができる。また、上述した実施形態は多様な態様の例示を含む。したがって、本発明は以下の特許請求範囲内に属するすべての他の取替、修正、及び変更を含むことができる。
今まで、本発明に関する説明において、一構成要素が他構成要素に“連結されて”いるとか、“接続されて”いると言及された時には、上記の一構成要素が他構成要素に直接的に連結されているとか、又は接続されていることもできるが、二つの構成要素の間に他の構成要素が存在することもできると理解されるべきである。一方、一構成要素が他構成要素に“直接連結されて”いるとか、“直接接続されて”いると言及された時には、二つの構成要素の間に他の構成要素が存在しないことと理解されるべきである。