[第1の実施の形態]
まず、本発明の実施の形態の前提となる技術を説明する。
2003年に、国際標準化機構(ISO)と国際電気標準会議(IEC)のジョイント技術委員会(ISO/IEC)と、国際電気通信連合電気通信標準化部門(ITU−T)の共同作業によってAVCと呼ばれる動画像符号化方式(ISO/IECでは14496−10、ITU−TではH.264の規格番号がつけられている)が国際標準として制定された。AVCではループフィルタとしてデブロックフィルタが利用される。
最初に、デブロックフィルタについて説明する。デブロックフィルタは、量子化パラメータやイントラ予測(画面内予測)であるかインター予測(動き補償予測)であるかなどの情報によって、デブロックフィルタの強度をブロック単位で適応的に変え、ブロックの境界付近の画素間の画素値の差によってデブロックフィルタのON/OFFを画素単位で制御しながら、ブロック間の量子化幅や予測方法の相違などによって生じるブロックの境界付近の誤差を画素単位で補正して誤差を低減する技術である。デブロックフィルタは、視覚的に目立ちやすいブロック境界の誤差を低減して主観画質を向上させ、さらに、ブロック境界の誤差を低減した画像を参照画像として用いることにより、インター予測の効率を向上させる効果がある。
デブロックフィルタの制御情報として、AVCではデブロックフィルタをスライス単位でON/OFFするためのフラグ、デブロックフィルタの適用度合い(画素単位のON/OFF)を調整するための情報がスライスヘッダにある。
近年のハードウェアやCPUは並列処理を前提とした構成を取ることが一般的となりつつあり、動画像符号化も並列処理に対応することが重要な課題となっている。画像のサイズが大きくなるほどこの課題は大きくなる。そのため、一般的な動画像符号化方式であるAVCなどでは、動画像ピクチャを複数の領域に分割し、各領域を並列に符号化または復号するためにスライスが用いられる。スライスを並列に処理する場合、各スライス境界のデブロックフィルタの処理が課題となる。AVCのデブロックフィルタでは、画像の左上のブロックからラスタースキャン順に各ブロックについて垂直方向のフィルタと水平方向のフィルタが順に処理されるため、領域境界のデブロックフィルタを事前に処理することができない。そのため、AVCではスライス単位でデブロックフィルタをON/OFFするためのフラグが導入されており、ループフィルタを含めた並列処理を容易に実現する場合などに利用されている。
しかし、AVCのデブロックフィルタはブロックの境界付近の画素しか補正できないため、ブロック境界ではないブロック内部の画素に誤差が生じた場合に、予測効率が良くならない可能性があった。そこで、ブロック境界のみならず、ブロックの内部の画素を補正するフィルタとしてSAOフィルタ(Sample Adaptative Offset Filter)を導入する。
ここで、SAOフィルタの概要について説明する。SAOフィルタはブロックの境界付近の画素のみならず、ブロックの内部の全ての画素に対して所定のオフセット値を加え、画素を補正するフィルタである。ブロックの内部の全ての画素に対して処理を行うため、デブロックフィルタのようにブロック間の相違などの情報を利用して詳細な適応処理をすることは困難で、デブロックフィルタよりもより細かい領域単位でオフセット値を調整して性能の向上を図る必要がある。細かい領域単位でオフセット値を調整することで誤差の補正の精度は向上するが、細かい領域単位でオフセット値を符号化するための符号量が増加するため、これを抑制する必要がある。SAOフィルタの詳細については後述する。
以下、SAOフィルタを効果的に動作させることのできる動画像符号化装置及び動画像復号装置を実現する。
(符号化ツリーブロック)
本実施の形態では、入力された画像信号(ピクチャ)は符号化ツリーブロック単位に分割されて符号化と復号の処理がなされる。符号化ツリーブロック(CTB)は階層的に4分割されて、符号化ユニット(CU)となる。CTB内の各CUはそれぞれイントラ予測またはインター予測を用いて予測符号化される。
本実施の形態では、CTBを64(画素)×64(画素)、最大の分割回数を3回とする。そのため、CUの大きさとして、8×8、16×16、32×32、64×64が存在する。図1はCTBとCUの関係を説明する図である。
本実施の形態では、CTBを64(画素)×64(画素)、CTBの最大の分割回数を3回とするが、この組み合わせに限定されない。また、CUはさらに1つから4つの予測ブロックに分割されて、それぞれの予測ブロックについてイントラ予測またはインター予測を用いて予測符号化されてもよい。
(ピクチャ)
ピクチャは符号化と復号の単位となる1枚の画像である。ピクチャには、イントラ予測のみを用いたIピクチャ、イントラ予測と単予測のインター予測を用いたPピクチャ、イントラ予測と、単予測と双予測のインター予測を用いたBピクチャがある。
(タイル)
本実施の形態では、ピクチャを垂直方向と水平方向に分割された領域として定義することのできるタイルを導入する。
次に図を用いてタイルについて説明する。図2はタイルについて説明する図である。図2(a)はピクチャが垂直方向に2つに分割されて、ピクチャがタイル0とタイル1で構成される例である。図2(b)はピクチャが垂直方向と水平方向にそれぞれ2つに分割されて、ピクチャがタイル0からタイル3で構成される例である。ピクチャ内のタイルはラスタースキャン順に処理される。また、タイル内のCTBはラスタースキャン順に処理される。ここでは、説明を容易にするためにタイルがピクチャ内で同一の大きさとなるようにしているが、タイルは同一の大きさである必要はない。図2(a)と図2(b)で示されるように、タイルは矩形領域として定義される。
(スライス)
本実施の形態では、スライスはタイル内のCTBをラスタースキャン順に包含する。ここでは、ピクチャ内のスライスは1つであるとして説明するが、スライスは1つのタイル内の1以上のCTBから構成することができる。すなわち、タイルは1以上のスライスに分割されることもできる。また、スライスは複数のタイルを包含することもできる。すなわち、複数のタイルを1つのスライスにまとめることもできる。
本実施の形態では、タイルを導入することで、スライスでは実現できなかった垂直方向に領域を分割することができる。垂直方向に領域を分割することで、各タイルの水平画素数を減ずることができ、各タイルを独立処理(並列処理)する場合に、ラインメモリ量を削減することができる。一方、タイルに分割することで垂直方向の境界が長くなるため、垂直方向の境界の処理が符号化効率や視覚的な違和感などとして認識されて課題となる。これは大画面になるほど影響が大きくなる。また、タイル内のCTBはラスタースキャン順に処理されてスライスはタイル内のCTBをラスタースキャン順に包含する構成とするため、タイルとスライスを組み合わせることで、スライスの垂直方向の境界についても同様の課題が生じる場合がある。なお、スライスのみで領域を構成する場合、垂直方向の境界はスライスの開始CTBにのみ発生するため、垂直方向の境界に対する課題は小さい。
以下、図面とともに本発明の好適な実施の形態に係る動画像符号化装置、動画像符号化方法および動画像符号化プログラム、ならびに動画像復号装置、動画像復号方法および動画像復号プログラムの詳細について説明する。なお、図面の説明において同一要素には同一符号を付与して重複する説明を省略する。
(動画像符号化装置100の構成)
図3は、第1の実施の形態に係る動画像符号化装置100の構成を説明する図である。動画像符号化装置100は、入力される動画像を、1ピクチャ単位で符号化する装置である。
動画像符号化装置100は、CPU(Central Processing Unit)、フレームメモリ、ハードディスクなどを備える情報処理装置などのハードウェアにより実現される。動画像符号化装置100は、上記の構成要素が動作することにより、以下に説明する機能的な構成要素を実現する。
本実施の形態の動画像符号化装置100は、画像データ取得部101、CTB符号化部102、フィルタパラメータ決定部103、フィルタパラメータ符号化部105、ループフィルタ104、フレームメモリ106、符号列多重部107、及び符号化制御部110を含む。符号化制御部110は、タイル設定部111、ループフィルタ設定部112、及び領域情報設定部113を含む。
(動画像符号化装置100の機能と動作)
図4は、第1の実施の形態に係る動画像符号化装置100の動作を説明するフローチャートである。以下、図3と図4を用いて、各部の機能と動作について説明する。ここでは、入力されるピクチャのサイズは768×384、ビット深度は8ビットとする。この場合、CTBは水平方向に12個、垂直方向に6個存在し、ピクチャ内で72個のCTBが存在する。以降、ピクチャの水平方向のCTB数をNumCtbInPicWidthとする。ビット深度が8ビットであるため、画素値は0から255となる。入力されたピクチャは、GOP(Group of Picture)として一般的なM=3、N=15で符号化され、IピクチャはIスライスだけ、PピクチャはPスライスだけ、BピクチャはBスライスだけで符号化されるものとする。ここでは、ピクチャのサイズを768×384としてCTBの倍数に設定したがこれに限定されない。また、GOPをM=3、N=15としたが、IピクチャだけとなるN=1などとしてもよく、これらに限定されない。
最初に、タイル設定部111は、タイルを設定する(S100)。これ以降、特に断らない限り、ピクチャは図2(b)のように4つのタイルから構成されるものとする。
次に、ループフィルタ設定部112は、ループフィルタ情報を設定する(S101)。ここで、ループフィルタ情報について説明する。ループフィルタ情報とは、ループフィルタインタリーブフラグ(loopfilter_interleave_flag)である。ループフィルタインタリーブフラグは、フィルタパラメータの符号化単位がCTB単位で多重化するかピクチャ単位で多重化するかを示すフラグである。ループフィルタインタリーブフラグが1であれば、フィルタパラメータがCTB単位で多重化されることを示し、ループフィルタインタリーブフラグが0であれば、フィルタパラメータがピクチャ単位で多重化されることを示す。以降、フラグは0または1の値の1ビットの情報であるとする。
本実施の形態では、loopfilter_interleave_flagは1に設定される。つまり、フィルタパラメータはCTB単位で多重化される。
まず、領域情報設定部113は、CTBに対してCTBアドレスとCTB符号順序を設定する(S102)。ここで、CTBアドレスとCTB符号順序について説明する。図5はCTBアドレスとCTB符号順序を説明する図である。
図5(a)はピクチャ内の各CTBに設定されるCTBアドレスを示す。CTBアドレスは図5(a)のように、ピクチャ内の各CTBに対してラスタースキャン順に1ずつインクリメントして設定される。図5(b)は図2(b)のようにピクチャが4つのタイルから構成される場合のピクチャ内の各CTBに設定されるCTB符号順序を示す。第1のタイルはCTB符号順序が0から17であり、第2のタイルはCTB符号順序が18から35であり、第3のタイルはCTB符号順序が36から53であり、第4のタイルはCTB符号順序が54から71である。CTB符号順序は図5(b)のように、タイル内の各CTBに対してラスタースキャン順に1ずつインクリメントして設定される。図5で示されるように、タイルが垂直方向に分割される場合、CTBアドレス(CTBのアドレス順序)と、CTBが符号化される順序とが同一とはならないブロックが発生する。また、図5で示されるように、CTBアドレスはピクチャに応じたラスタースキャン順で定まり、CTB符号順序はタイルに応じたラスタースキャン順で定まる。
図5で示されるように、CTBアドレスはタイルに依存せずピクチャのサイズによって設定され、CTB符号順序はピクチャのサイズとタイルのサイズによって設定される。つまり、CTBアドレスはピクチャ内の位置を示し、CTBアドレスによってCTBのピクチャ内での位置関係を得ることができる。CTBがいずれのタイルに属するかを識別するのに、CTBアドレスとCTB符号順序のそれぞれまたは両方を用いてもよい。
また、符号化制御部110は、SPS、PPS、スライスヘッダなどピクチャを符号化するために必要となる情報を必要に応じて設定して管理する。SPS、PPS、スライスヘッダについては後述する。そして、画像データ取得部101、CTB符号化部102、フィルタパラメータ決定部103、フィルタパラメータ符号化部105、ループフィルタ104、フレームメモリ106、及び符号列多重部107を制御して符号化ストリームを生成する。
なお、タイル、ループフィルタ情報、SPS、PPS、スライスヘッダなどピクチャを符号化するために必要となる情報は動画像符号化装置100内で共有されているものとし、これらデータのフローの説明は特に断らない限り省略する。
次に、CTB符号順序に従って、ピクチャ内の全てのCTBについて以下の処理が繰り返し行われる(S103からS111)。
次に、画像データ取得部101は、符号化対象となるCTBである符号化対象CTBのピクチャ内の位置に基づいて、端子10より入力される画像データから符号化対象CTBに該当するCTBの原画像データを取得する(S104)。そして、画像データ取得部101はCTBの原画像データをCTB符号化部102に供給する。また、画像データ取得部101はCTBの原画像データをフィルタパラメータ決定部103に供給する。ここで、符号化対象CTBが属するタイルを符号化対象タイル、符号化対象CTBが属するスライスを符号化対象スライスとする。
次に、エントロピー符号部の設定が行われる(S105)。ここで、エントロピー符号部の設定について説明する。符号化対象CTBがスライスまたはタイルの最初のCTBであれば、CTB符号化部102はCTB符号化部102の内部のエントロピー符号部を初期化し、フィルタパラメータ符号化部105はフィルタパラメータ符号化部105の内部のエントロピー符号部を初期化する。なお、CTB符号化部102の内部のエントロピー符号部とフィルタパラメータ符号化部105の内部のエントロピー符号部は、AVCで利用されている算術符号化のCABACであるとする。
次に、CTB符号化部102は、画像データ取得部101より供給されるCTBの原画像データをスライスタイプに基づいて、画面内予測(イントラ予測)や動き補償予測(インター予測)を行って誤差信号を算出し、誤差信号について直交変換や量子化処理を用いて符号化し、CTB符号列を生成するとともに、局部復号を行って復号画像データを生成する(S106)。なお、CTB符号化部102で行われる符号化の処理は、CTBを階層的に符号化して量子化などによって符号化歪が生じる可能性のある方法であればよく、ここでは詳細な説明は省略する。また、局部復号についても一般的な動画像符号化で行われる手法であるためここでは詳細な説明は省略するが、復号画像データは、動画像符号化装置100の出力する符号化ストリームを復号した際に得られる画像データである。CTB符号化部102は、生成したCTB符号列を符号列多重部107に供給する。また、CTB符号化部102は、復号画像データをフィルタパラメータ決定部103とループフィルタ104に供給する。
次に、フィルタパラメータ決定部103は、画像データ取得部101より供給されるCTBの原画像データとCTB符号化部102より供給される復号画像データに基づいてフィルタパラメータを決定する(S107)。フィルタパラメータ決定部103は、フィルタパラメータをフィルタパラメータ符号化部105とループフィルタ104に供給する。フィルタパラメータ決定部103の詳細については後述する。
ループフィルタ104は、フィルタパラメータ決定部103より供給されるフィルタパラメータに基づいてCTB符号化部102より供給される復号画像データに対してループフィルタを実行する(S108)。ループフィルタを実行して得た新たな復号画像データをフレームメモリ106に供給する。
次に、フィルタパラメータ符号化部105は、フィルタパラメータ決定部103より供給されるフィルタパラメータをループフィルタユニットに符号化し(S109)、ループフィルタユニットを符号列多重部107に供給する。フィルタパラメータ符号化部105とループフィルタユニットについては後述する。
次に、符号列多重部107は、CTB符号化部102より供給されるCTB符号列とフィルタパラメータ符号化部105より供給されるループフィルタユニットを、必要に応じてSPS、PPS、スライスヘッダなどとともに符号化ストリームとして多重化し(S110)、符号化ストリームを端子11より出力する。符号列多重部107の詳細については後述する。
ピクチャ内の全てのCTBについて処理が完了すれば、処理を終了する。
(フィルタパラメータ決定部103)
続いて、フィルタパラメータ決定部103の詳細な構成について説明する。図6はフィルタパラメータ決定部103の構成を説明する図である。図6で示されるように、フィルタパラメータ決定部103は、フィルタパラメータ設定部120、ループフィルタ実行部121、誤差計測部122、及びフィルタパラメータ確定部123で構成される。端子12はCTB符号化部102に接続され、端子13は画像データ取得部101に接続され、端子14はフィルタパラメータ符号化部105とループフィルタ104に接続されている。ループフィルタ実行部121は、フィルタタイプ判定部130、エッジタイプフィルタ131、バンドタイプフィルタ132を含む。
引き続いて、フィルタパラメータ決定部103の動作について説明する。図7はフィルタパラメータ決定部103の動作を説明するフローチャートである。以下、図6と図7を用いて、フィルタパラメータ決定部103の動作について説明する。
最初に、フィルタパラメータ設定部120は、端子12より供給される復号画像データと端子13より供給される原画像データに基づいて、フィルタパラメータ候補リストを生成し(S120)、生成したフィルタパラメータ候補リストをループフィルタ実行部121に供給する。フィルタパラメータ設定部120の詳細については後述する。
次に、フィルタパラメータ候補リストに登録されている全てのフィルタパラメータについて以下の処理が繰り返される(S121からS126)。
まず、ループフィルタ実行部121は、端子12より供給される復号画像データに対してフィルタパラメータに基づいてループフィルタを適用して新たな復号画像データを生成し(S122)、当該復号画像データを誤差計測部122に供給する。ループフィルタ実行部121の詳細については後述する。
誤差計測部122は、ループフィルタ実行部121より供給される復号画像データと端子13より供給される原画像データの誤差評価値を算出する(S123)。ここでは、誤差評価値はブロック内の復号画像データと原画像データの絶対差分和(SAD)とする。
次に、誤差計測部122は、誤差評価値が最小であるか検査する(S124)。誤差評価値が最小であれば(S124のY)、フィルタパラメータをフィルタパラメータ確定部123に供給し、フィルタパラメータ確定部123は当該フィルタパラメータを保持する(S125)。
誤差評価値が最小でなければ(S124のN)、次のフィルタパラメータが処理される(S126)。フィルタパラメータ候補リストに登録されている全てのフィルタパラメータの処理が完了すると、フィルタパラメータ確定部123が保持している誤差評価値が最小であるフィルタパラメータをフィルタパラメータとして確定して(S127)、処理を終了する。
ここでは、誤差評価値としてSADを用いたが、フィルタパラメータが算出できればよく、これに限定されずSSDなどを用いても良い。また、復号画像データと原画像データの誤差だけでなく、フィルタパラメータを伝送するのに必要な符号量を加味して評価しても良い。
(フィルタパラメータ設定部120)
続いて、フィルタパラメータ設定部120の詳細について説明する。
最初に、フィルタパラメータについて説明する。フィルタパラメータは、フィルタタイプ、バンド幅、バンド位置、オフセット0、オフセット1、オフセット2、オフセット3、オフセット4で構成される。
フィルタタイプには、フィルタタイプ0、フィルタタイプ1、フィルタタイプ2、フィルタタイプ3、フィルタタイプ4、及びフィルタタイプ5の6つがある。
フィルタタイプ0はループフィルタを処理しないことを示し、フィルタタイプ1はループフィルタがバンドタイプフィルタであることを示し、フィルタタイプ2からフィルタタイプ5はループフィルタがエッジタイプフィルタであることを示す。
フィルタパラメータ設定部120は、復号画像データと原画像データの誤差評価値が閾値以下であれば、フィルタタイプをフィルタタイプ0だけで構成されるフィルタパラメータ候補リストを生成し、誤差評価値が閾値以下でなければ、フィルタパラメータが取り得る全ての組み合わせのフィルタパラメータを含むフィルタパラメータ候補リストを生成する。
(ループフィルタ実行部121)
続いて、ループフィルタ実行部121の詳細について説明する。ループフィルタ実行部121は、フィルタタイプ判定部130とエッジタイプフィルタ131、バンドタイプフィルタ132で構成される。
引き続いて、ループフィルタ実行部121の動作について説明する。
最初に、フィルタタイプ判定部130は、フィルタタイプの判定をする。フィルタタイプが0であれば、端子12より供給される復号画像データをフィルタ適用後の復号画像データとして誤差計測部122に出力する。フィルタタイプが1であれば、バンドタイプフィルタ132は、端子12より供給される復号画像データにフィルタパラメータに基づいてバンドタイプフィルタを適用し、フィルタ適用後の復号画像データを誤差計測部122に出力する。フィルタタイプが2から5であれば、エッジタイプフィルタ131は、端子12より供給される復号画像データにフィルタパラメータに基づいてエッジタイプフィルタを適用し、フィルタ適用後の復号画像データを誤差計測部122に出力する。
(エッジタイプフィルタ131)
続いて、エッジタイプフィルタ131の詳細について説明する。エッジタイプフィルタ131は、エッジアングル設定部141、隣接画素設定部142、エッジタイプ判定部143、エッジオフセット値設定部144、およびエッジオフセット値加算部145を含む。
図8はエッジタイプフィルタ131の動作を説明するフローチャートである。以下、図8を用いて、エッジタイプフィルタ131の動作を説明する。
最初に、エッジアングル設定部141は、エッジアングルの判定を行う(S130)。エッジアングルnはフィルタタイプnとする。nは2,3,4,5である。次に、符号化ツリーブロック内の64個の画素Xに対してラスタースキャン順に以下の処理を繰り返して行う(S131からS139)。Xは0、1、2、・・・、63である。
まず、隣接画素設定部142は、エッジアングルに応じた隣接画素Aと隣接画素Bを設定する(S132)。エッジアングルに応じた隣接画素Aと隣接画素Bについては後述する。次に、隣接画素設定部142は隣接画素Aまたは隣接画素Bがピクチャ外であるか検査する(S133)。隣接画素Aまたは隣接画素Bがピクチャ外であれば(S133のY)、エッジオフセット値設定部144はオフセット値を0に設定して(S137)、エッジオフセット値加算部145は画素Xにオフセット値を加算して処理画素X'を算出する(S138)。隣接画素Aまたは隣接画素Bがピクチャ外でなければ(S133のN)、loopfilter_interleave_flagが1であるか検査する(S140)。loopfilter_interleave_flagが1であれば(S140のY)、隣接画素設定部142は隣接画素Aまたは隣接画素Bがタイル外であるか検査する(S134)。隣接画素Aまたは隣接画素Bがタイル外であるとは、隣接画素Aまたは隣接画素Bが画素Xとは異なるタイルに属するCTBに含まれることである。loopfilter_interleave_flagが1でなければ(S140のN)、エッジタイプ判定部143は、エッジタイプの判定をする(S135)。
隣接画素Aまたは隣接画素Bがタイル外であれば(S134のY)、エッジオフセット値設定部144はオフセット値を0に設定して(S137)、エッジオフセット値加算部145は画素Xにオフセット値を加算して処理画素X'を算出する(S138)。隣接画素Aまたは隣接画素Bがタイル外でなければ(S134のN)、エッジタイプ判定部143は、エッジタイプの判定をする(S135)。エッジタイプの判定については後述する。次に、エッジオフセット値設定部144は、オフセット値の設定をする(S136)。次に、エッジオフセット値加算部145は、画素Xにオフセット値を加算して処理画素X'を算出する(S138)。処理画素X'の算出については後述する。
(エッジアングルに応じた隣接画素Aと隣接画素B)
図9はエッジアングルに応じた隣接画素Aと隣接画素Bを説明する図である。エッジアングル1の場合、隣接画素Aは画素Xの左の画素、隣接画素Bは画素Xの右の画素となる(図9(a))。エッジアングル2の場合、隣接画素Aは画素Xの上の画素、隣接画素Bは画素Xの下の画素となる(図9(b))。エッジアングル3の場合、隣接画素Aは画素Xの右上の画素、隣接画素Bは画素Xの左下の画素となる(図9(c))。エッジアングル4の場合、隣接画素Aは画素Xの左上の画素、隣接画素Bは画素Xの右下の画素となる(図9(d))。このように、水平方向、垂直方向、右斜め方向、及び左斜め方向に対してエッジタイプフィルタを作用させることで、各方向に生じた誤差を補正することが可能となる。ここで、エッジアングル1、エッジアングル2、エッジアングル3、及びエッジアングル4はそれぞれ、フィルタタイプ2、フィルタタイプ3、フィルタタイプ4、及びフィルタタイプ5に割り当てられる。
以上のように、エッジタイプフィルタ131において、フィルタパラメータがCTB単位で多重化されている(loopfilter_interleave_flagが1)場合、隣接画素Aまたは隣接画素Bがタイル外であれば、オフセット値を0に設定してループフィルタを作用させないようにすることで、ループフィルタの動作をCTB単位で完結させることができる。そのため、図10のようにCTB内の画素で右辺や下辺がタイル境界に接しているCTB内の画素Xにループフィルタを作用させるために必要となるフィルタ適用前の画素Aと画素Xは、タイル境界を跨いで保持される必要がなくなる。
(エッジタイプの判定)
エッジタイプは、画素Xと隣接画素Aの差分の符号と、画素Xと隣接画素Bの差分の符号の和を加算した値である符号和SSで決定する。画素mの画素値をP(m)とすると、符号和SSは式(1)で算出される。
SS=Sign(P(X)−P(A))+Sign(P(X)−P(B)); 式(1)
ここで、Sign(i)は入力値iが0未満であれば−1を、入力値iが0以上であれば1を返す関数である。
SSが0、−2、−1、1、2である場合のエッジタイプをそれぞれ0、1、2、3、4とする。エッジタイプの0、1、2、3、4のオフセット値としてオフセット0、オフセット1、オフセット2、オフセット3、オフセット4がそれぞれ設定される。ここで、SSが0である場合は画素X、隣接画素A、及び隣接画素Bが直線的に並んでいるため、誤差はないとしてオフセット0は0に設定する。SSが0でない場合は歪みを補正するためオフセット0からオフセット4のそれぞれを適切な値に設定する。
(エッジタイプフィルタの処理画素X'の算出)
画素Xのエッジタイプフィルタ適用後の処理画素X'は式(2)で算出される。
P(X')=P(X)+OFFSET[SS]; 式(2)
ここで、OFFSET[m]はオフセットmである(m=0,1,・・・,4)。
以上のように、エッジタイプフィルタでは、水平方向、垂直方向、右斜め方向、及び左斜め方向に対して、隣接画素との差分の符号によって、画素単位で適応的に誤差を補正することが可能となる。
(バンドタイプフィルタ132)
続いて、バンドタイプフィルタ132の詳細について説明する。バンドタイプフィルタ132は、ハンド幅設定部151、バンド位置設定部152、バンドオフセット値設定部153、およびバンドオフセット値加算部154を含む。
図11はバンドタイプフィルタ132の動作を説明するフローチャートである。以下、図11を用いて、バンドタイプフィルタの動作を説明する。
最初に、ハンド幅設定部151は、バンド幅を設定する(S150)。
(バンド幅)
ここで、バンド幅について説明する。バンド幅は、入力画像の取り得る画素値の範囲を複数のバンドに分割する際のバンド幅である。本実施の形態では、バンド幅は32とする。本実施の形態では入力画像は8ビットであるため0から255までの画素値の範囲を有するため、0から31(バンド0)、32から63(バンド1)、64から95(バンド2)、96から127(バンド3)、128から159(バンド4)、160から191(バンド5)、192から223(バンド6)、224から255(バンド7)の8つのバンドに分割される。
このようにバンド幅を設定して、バンド幅を大きくすることで、広範囲の画素値を一括して補正することができ、バンド幅を小さくすることで、狭範囲の画素値を一括して補正することができる。例えば、あるピクチャ内の画素の取り得る画素値のレンジが広い場合にはバンド幅が大きくなるようにし、あるピクチャ内の画素の取り得る画素値のレンジが狭い場合には、バンド幅が小さくなるようにして、ピクチャの特性に応じて、復号画像を適切に補正することができる。本実施の形態ではバンド幅は固定値として説明しているが、入力画像の取り得る画素値の範囲を1以上のバンドに分割できればよく、16や128でもよい。また、バンド幅をPPSなどに多重化して伝送し、ピクチャ内の画素の取り得る画素値のレンジなどに合わせて適応的に変更することで、効果的にバンドタイプフィルタを作用させることができる。
ステップS150に続いて、3つのバンド位置について以下の処理が繰り返される(S151からS158)。ここで、3つのバンド位置について説明する。1番目のバンド位置はフィルタパラメータに含まれるバンド位置である。2番目のバンド位置は1番目のバンド位置を1つだけずらしたバンド位置となる。例えば、1番目のバンド位置がバンド2であったとすると、2番目のバンド位置はバンド3となる。同様に、3番目のバンド位置は2番目のバンド位置を1つだけずらしたバンド位置となる。
バンド位置設定部152は、b番目のバンド位置を設定する(S152)。ここで、bは0と1である。バンド位置は、バンド幅によって分割されたバンドのいずれかを示す値であって、ここでは、0から7までの整数となる。例えば、バンド位置の0はバンド0を示し、バンド位置の2はバンド3を示す。
ステップS152に続いて、バンドオフセット値設定部153は、バンド毎のオフセット値を設定する(S153)。バンド位置で示されたバンドのオフセット値はオフセット0に設定されて、バンド位置で示されたバンド以外のバンドのオフセット値は0に設定される。
次に、画素値の符号化ツリーブロック内の64個の画素Xに対してラスタースキャン順に以下の処理が行なわれる(S154からS157)。Xは0、1、・・・、63である。
まず、バンドオフセット値加算部154は、画素Xの属するバンドであるxbを決定する(S155)。次に、バンドオフセット値加算部154は、画素Xに画素Xが属するバンドのオフセット値Ob[xb]を加算して処理画素X'を算出する(S156)。
(バンドタイプフィルタの処理画素X'の算出)
画素Xのバンドタイプフィルタ適用後の処理画素X'は式(3)で算出される。
P(X')=P(X)+Ob[xb];式(3)
以上のように、バンドタイプフィルタは特定範囲内の画素値の画素だけを補正することができるため、平坦領域に発生し易いノイズなどを低減する効果がある。特に、4:2:0フォーマットなど輝度信号より解像度を減らした色差信号については、輝度信号よりもがDCに誤差が発生し易くエッジが少ないため、バンドタイプフィルタの効果が大きい。また、隣接画素を参照しないためエッジタイプのオフセットよりもフィルタリングの処理量やメモリ量を少なく実現することができる。
(ループフィルタ104)
続いて、ループフィルタ104について説明する。ループフィルタ104は、ループフィルタ実行部121と同一の機能と動作を有するため、ここでの説明は省略する。
(フィルタパラメータ符号化部105)
続いて、フィルタパラメータ符号化部105の詳細について説明する。図12は符号化対象CTBと符号化対象CTBに隣接するCTBを説明する図である。図13はフィルタパラメータ符号化部105の動作を説明するフローチャートである。以下、図12と図13を用いて、フィルタパラメータ符号化部105の動作を説明する。
最初に、隣接CTBの有効性であるavailable_left_ctb_flagとavailable_above_ctb_flagを導出する(S160)。次に、available_left_ctb_flagが1であるか検査する(S161)。available_left_ctb_flagが1であれば(S161のY)、符号化対象CTBと符号化対象CTBの左に位置するCTBのフィルタパラメータが同一であるか検査する(S162)。ここで、符号化対象CTBの左に位置するCTBは図12のCTBのAである。符号化対象CTBと符号化対象CTBの左に位置するCTBのフィルタパラメータが同一であれば(S162のY)、loopfilter_merge_left_flagを1としてloopfilter_merge_left_flagを符号化し(S163)、処理を終了する。符号化対象CTBと符号化対象CTBの左に位置するCTBのフィルタパラメータが同一でなければ(S162のN)、loopfilter_merge_left_flagを0としてloopfilter_merge_left_flagを符号化する(S164)。
available_left_ctb_flagが1でない場合と(S161のN)、ステップS164に続いて、available_above_ctb_flagが1であるか検査する(S165)。available_above_ctb_flagが1であれば(S165のY)、符号化対象CTBと符号化対象CTBの上に位置するCTBのフィルタパラメータが同一であるか検査する(S166)。ここで、符号化対象CTBの上に位置するCTBは図12のCTBのBである。符号化対象CTBと符号化対象CTBの上に位置するCTBのフィルタパラメータが同一であれば(S166のY)、loopfilter_merge_above_flagを1としてloopfilter_merge_above_flagを符号化し(S167)、処理を終了する。符号化対象CTBと符号化対象CTBの上に位置するCTBのフィルタパラメータが同一でなければ(S166のN)、loopfilter_merge_above_flagを0としてloopfilter_merge_above_flagを符号化する(S168)。ステップS168に続いて、ループフィルタ符号化パラメータであるloopfilter_cod_param()を符号化する。ここで、ループフィルタ符号化パラメータはフィルタパラメータの全ての要素を符号化した符号列である。
なお、フィルタパラメータ符号化部105は、符号化対象CTBの左と上に位置するCTBのフィルタパラメータを参照するため、ピクチャ内の全てのCTBのフィルタパラメータを保持しているものとする。
ここで、CTB単位でフィルタパラメータを符号化する場合、全てのフィルタパラメータをループフィルタ符号化パラメータとして符号化すると、フィルタパラメータの符号化に膨大な符号量が必要となって、画像データを符号化したCTB符号列に十分に符号量を割り当てることができなくなり、結果的に符号化効率が低下する可能性がある。また、同一オブジェクトに属するCTBに対して異なるフィルタパラメータを用いた場合、同一オブジェクト内でのループフィルタの特性の相違がブロック歪みとして視覚的に認識される可能性がある。そのため、一般的には同一オブジェクト内ではフィルタパラメータは同一になるようにフィルタパラメータが設定される可能性が高い。よって、以上のように、符号化対象CTBのフィルタパラメータが符号化対象CTBに隣接する符号化済みのCTBのフィルタパラメータと同一である場合には、符号化対象CTBのフィルタパラメータとして符号化対象CTBに隣接する符号化済みのCTBのフィルタパラメータを利用することを示す1ビットのフラグを符号化することで、視覚的な劣化を伴うことなく、ループフィルタ符号化パラメータに要する符号量を1ビットに削減して、符号化効率を向上させることができる。なお、ループフィルタ符号化パラメータの詳細については後述するが、ループフィルタ符号化パラメータの符号化に要する符号量は1ビットよりも十分に大きな符号量となる。一方、符号化対象CTBのフィルタパラメータが符号化対象CTBに隣接する符号化済みのCTBのフィルタパラメータと同一でない場合には、符号化対象CTBのフィルタパラメータとして符号化対象CTBに隣接する符号化済みのCTBのフィルタパラメータを利用しないことを示す1ビットのフラグを符号化し、ループフィルタ符号化パラメータを符号化することで、CTB毎にフィルタパラメータを変更できる。
ここで、隣接CTBの有効性であるavailable_left_ctb_flagとavailable_above_ctb_flagの導出について説明する。図14は隣接CTBの有効性の導出を説明するフローチャートである。最初に、available_left_ctb_flagとavailable_above_ctb_flagは1に設定される(S180)。次に、符号化対象CTBの左辺がピクチャ境界に接しているか検査する(S181)。符号化対象CTBの左辺がピクチャ境界に接していれば(S181のY)、available_left_ctb_flagを0とする(S184)。符号化対象CTBの左辺がピクチャ境界に接していなければ(S181のN)、符号化対象CTBの左辺がタイル境界に接しているか検査する(S182)。ここで、符号化対象CTBの左辺がタイル境界に接しているとは、符号化対象CTBと符号化対象CTBの左に位置するCTBが別のタイルに属することである。一方、符号化対象CTBの左辺がタイル境界に接していないとは、符号化対象CTBと、符号化対象CTBの左に位置するCTBとが同一のタイルに属することである。符号化対象CTBの左辺がタイル境界に接していれば(S182のY)、loopfilter_interleave_flagが1であるか検査する(S183)。loopfilter_interleave_flagが1であれば(S183のY)、available_left_ctb_flagを0とする(S184)。loopfilter_interleave_flagが1でない場合(S183のN)は、ステップS184はスキップされる。符号化対象CTBの左辺がタイル境界に接していない場合(S182のN)は、ステップS183とステップS184はスキップされる。
次に、符号化対象CTBの上辺がピクチャ境界に接しているか検査する(S185)。符号化対象CTBの上辺がピクチャ境界に接していれば(S185のY)、available_above_ctb_flagを0とする(S188)。符号化対象CTBの上辺がピクチャ境界に接していなければ(S185のN)、符号化対象CTBの上辺がタイル境界に接しているか検査する(S186)。ここで、符号化対象CTBの上辺がタイル境界に接しているとは、符号化対象CTBと符号化対象CTBの上に位置するCTBが別のタイルに属することである。一方、符号化対象CTBの上辺がタイル境界に接していないとは、符号化対象CTBと、符号化対象CTBの上に位置するCTBとが同一のタイルに属することである。符号化対象CTBの上辺がタイル境界に接していれば(S186のY)、loopfilter_interleave_flagが1であるか検査する(S187)。loopfilter_interleave_flagが1であれば(S187のY)、available_above_ctb_flagを0とする(S188)。loopfilter_interleave_flagが1でない場合(S187のN)は、ステップS188はスキップされる。符号化対象CTBの上辺がタイル境界に接していない場合(S186のN)は、ステップS187とステップS188はスキップされる。
ここで、フィルタパラメータがCTB単位で多重化され(loopfilter_interleave_flagが1)、符号化処理がタイル単位で独立(並列)に行なわれるような場合に、符号化対象CTBの左辺がタイル境界に接している符号化対象CTBについて、左に位置するCTBからフィルタパラメータを取得することを許可すると、左に位置するCTBのフィルタパラメータが確定されるまで、符号化対象CTBとフィルタパラメータと左に位置するCTBのフィルタパラメータとが同一であるか検査することができないため、待ち時間が生じる可能性がある。そこで、CTBの左辺がタイル境界に接しているような符号化対象CTBについては、左に位置するCTBのフィルタパラメータの利用を禁止する。さらに、available_left_ctb_flagを0としてloopfilter_merge_left_flagを符号化しないようにすることで、loopfilter_merge_left_flagの符号量を削減し、符号化効率の低下を抑制する。また、loopfilter_merge_left_flagを符号化しないようにすることで、明示的に左に位置するCTBのフィルタパラメータの利用を禁止することができる。同様に、符号化対象CTBの上辺がタイル境界に接している場合に、available_above_ctb_flagを0としてloopfilter_merge_above_flagを符号化しないようにすることで符号化効率の低下を抑制し、明示的に上に位置するCTBのフィルタパラメータの利用を禁止することができる。
(シンタックス)
続いて、本実施の形態に係るシンタックスについて説明する。符号化においてはシンタックスに含まれる各要素が符号化ストリーム中に符号化される。一方、復号においては、シンタックスに含まれる各要素が符号化ストリームから復号されて、符号化において符号化された要素と同じ値を取得することができる。これ以降、特に断らない限り、シンタックスを構成する各要素は固定長ビットで符号列となる。図15と図16はシンタックスを説明する図である。以下、図15と図16を用いて、シンタックスについて説明する。ここでは、説明を容易にするためにシンタックスを構成する各要素は固定長ビットで符号列となるとしたが、可変長ビットとしてもよい。
最初に、SPS(Sequence Parameter Set)について説明する。SPSはシーケンス(符号化ストリーム)の特性を決定するためのパラメータ群を定義するパラメータセットである。ピクチャのサイズ、ビット深度、CTBのサイズ、CTBの分割回数などが定義される。
続いて、PPS(Picture Parameter Set)について説明する。図15(a)はPPSのシンタックスの一例を説明する図である。PPSはピクチャの特性を決定するためのパラメータ群を定義するパラメータセットである。PPSには、loopfilter_interleave_flag、pic_loopfilter_param()、tiles_coding_flag、num_tile_columns_minus1、num_tile_rows_minus1、uniform_spacing_flag、colmn_width、colmn_heightがシンタックスに従って設置され、動画像符号化において符号化され、動画像復号において復号される。
PPSのシンタックス要素であるtiles_coding_flag、num_tile_columns_minus1、num_tile_rows_minus1、uniform_spacing_flag、colmn_width、colmn_heightはタイル情報である。tiles_coding_flagは、1であればピクチャは複数のタイルで構成され、0であればピクチャはタイルとして構成されないことを示す。num_tile_columns_minus1とnum_tile_rows_minus1はそれぞれタイルを垂直方向と水平方向に分割する数を示す。uniform_spacing_flagはピクチャを予め定められた方法で分割するか否かを決定する情報である。ここでは、予め定められた方法とは、ピクチャを同じ大きさのタイルに分割することを示す。colmn_width[i]とcolmn_height[i]はそれぞれi番目のタイルの幅と高さを示す。図2(b)の場合は、num_tile_columns_minus1とnum_tile_rows_minus1は1、uniform_spacing_flagは1として符号化される。なお、シーケンス単位でタイルの構成が変更されない場合、これらタイル情報のシンタックス要素をSPSに設置することもできる。
(スライスヘッダ)
続いて、スライスヘッダについて説明する。図15(b)はスライスヘッダのシンタックスの一例を説明する図である。スライスヘッダはスライスの特性を決定するためのパラメータ群を定義するヘッダ情報である。スライスヘッダには、slice_address、slice_type、num_of_tiles、tile_positionがシンタックスに従って設置され、動画像符号化において符号化され、動画像復号において復号される。
slice_address(スライスアドレス)は、スライスに含まれる最初のCTBのCTBアドレスを示す。slice_type(スライスタイプ)は、イントラ予測のみを用いたIスライス、イントラ予測と単予測のインター予測(動き補償予測)を用いたPスライス、イントラ予測と、単予測と双予測のインター予測を用いたBスライスを示す値である。num_of_tilesはスライスに含まれるタイル数を示す。tile_positionはタイルの先頭バイトのスライスヘッダの先頭バイトからのバイト数を示す。
(ループフィルタに関するシンタックス)
図16(a)はPPS内のピクチャループフィルタパラメータ(pic_loopfilter_param())のシンタックスの一例を説明する図である。ピクチャループフィルタパラメータには、loopfilter_unit()がシンタックスに従って設置され、動画像符号化において符号化され、動画像復号において復号される。num_of_ctbsはピクチャ内の総CTB数であって、PPS内にはピクチャ内の全てのCTBのloopfilter_unit()が格納される。
図16(b)はループフィルタ符号化パラメータ(loopfilter_cod_param())のシンタックスの一例を説明する図である。ループフィルタ符号化パラメータには、loopfilter_type_idx、loopfilter_band_position、loopfilter_offsetがシンタックスに従って設置され、動画像符号化において符号化され、動画像復号において復号される。
loopfilter_type_idxはフィルタパラメータのフィルタタイプを示すインデックスであって、0から5の整数である。loopfilter_type_idxは3ビットの符号列である。loopfilter_band_positionはフィルタパラメータのバンド位置であって、0から7までの整数を示す3ビットの符号列である。loopfilter_offsetはフィルタパラメータのオフセットであって、loopfilter_type_idxが1の場合は−32から31までの整数であって6ビットの符号列となり、loopfilter_type_idxが2から5の場合は0から31までの整数であって5ビットの符号列となる。
ここで、エッジタイプフィルタに要する符号量はloopfilter_type_idxの3ビットとloopfilter_offsetの5ビットが4個であり、23ビットとなる。バンドタイプフィルタに要する符号量はloopfilter_type_idxの3ビットとloopfilter_band_positionの3ビットとoopfilter_offsetの6ビットが3個であり、24ビットとなる。
ここで、本実施の形態ではエッジタイプフィルタとバンドタイプフィルタのオフセット数をそれぞれ4個と3個に設定している。これは、バンドタイプフィルタのフィルタパラメータはエッジタイプフィルタのフィルタパラメータよりも1個あたりの符号量が大きいため、エッジタイプフィルタとバンドタイプフィルタのそれぞれに要する符号量を均衡させるためである。エッジタイプフィルタとバンドタイプフィルタのそれぞれに要する符号量を均衡させることで、エッジタイプフィルタとバンドタイプフィルタのそれぞれのループフィルタ符号化パラメータの符号化時間と復号時間を均衡させることができ、ハードウェアの回路設計やソフトウェアの設計を容易にすることができる。ここでは、エッジタイプフィルタとバンドタイプフィルタのオフセット数をそれぞれ4個と3個に設定したが、例えば、エッジタイプフィルタとバンドタイプフィルタのオフセット数をそれぞれ2個と1個などのように設定してもよい。
図16(c)はループフィルタユニット(loopfilter_unit())のシンタックスの一例を説明する図である。ループフィルタユニットには、loopfilter_merge_left_flag、loopfilter_merge_above_flag、loopfilter_cod_param()がシンタックスに従って設置され、動画像符号化において符号化され、動画像復号において復号される。
(符号列多重部107の機能と動作)
以下、符号列多重部107によって多重化される符号化ストリームの構成について説明する。図17は第1の実施の形態による符号化ストリームの構成の一例を説明する図である。図17はloopfilter_interleave_flagが1である場合の符号化ストリームの構成を示す。SPSは符号列多重部107によって符号化されて、符号化ストリームの先頭に多重化される。PPSは符号列多重部107によって符号化されて、ピクチャの先頭に多重化される。スライスヘッダは符号列多重部107によって符号化されて、スライスの先頭に多重化される。スライスヘッダに続いて、そのスライスに属するCTBについてCTB符号順序に以下の処理が繰り返し行われる。まず、CTBのループフィルタユニットが多重化されて、その後にCTB符号列が多重化される。
ここで、SPS、PPS、スライスヘッダには一般的な同期コードが付与されて、SPS、PPS、スライスヘッダは符号化ストリーム中から分離できるようになる。また、タイルにはヘッダが付与されないが、スライスヘッダのtile_positionによって符号化ストリーム中から分離できる。
以上のように、loopfilter_interleave_flagを1に設定してCTB符号順序にCTBのフィルタパラメータをCTB単位で多重化することで、フィルタパラメータの伝送遅延を抑制した動画像符号化装置を実現することができる。
(動画像復号装置200の構成)
図18は、第1の実施の形態に係る動画像復号装置200の構成を説明する図である。動画像復号装置200は、動画像符号化装置100によって生成された符号化ストリームが入力されて、ピクチャ単位で復号ピクチャを再生する装置である。
動画像復号装置200は、CPU(Central Processing Unit)、フレームメモリ、ハードディスクなどを備える情報処理装置などのハードウェアにより実現される。動画像復号装置200は、上記の構成要素が動作することにより、以下に説明する機能的な構成要素を実現する。
本実施の形態の動画像復号装置200は、符号列分離部201、CTB復号部202、ループフィルタ203、フィルタパラメータ復号部204、フレームメモリ205、及び復号制御部210を含む。
(動画像復号装置200の機能と動作)
復号制御部210は、領域情報、ループフィルタ情報、SPS、PPS、スライスヘッダなどピクチャを復号するために必要となる情報を管理して、符号列分離部201、CTB復号部202、ループフィルタ203、フィルタパラメータ復号部204、フレームメモリ205を制御して符号化ストリームを復号する。なお、領域情報、ループフィルタ情報、SPS、PPS、スライスヘッダなどピクチャを復号するために必要となる情報は動画像復号装置200内で共有されているものとし、これらデータのフローの説明は省略する。
図19は、第1の実施の形態に係る動画像復号装置200の動作を説明するフローチャートである。図18はピクチャ単位の復号動作を示す。以下、図18と図19を用いて、各部の機能と動作について説明する。
本実施の形態では、loopfilter_interleave_flagは1に設定された符号化ストリームが入力されるとする。
最初に、符号列分離部201は、端子20より入力される符号化ストリームからピクチャストリームを取得する(S500)。ここで、ピクチャストリームとはピクチャ単位の符号化ストリームであり、ピクチャストリームの最初のCTBの符号列の前にSPSが存在する場合にはSPSも含まれる。
次に、符号列分離部201は、タイルストリームにSPSが含まれていればSPSを復号し、ピクチャのサイズを取得する。また、図15のシンタックスに従ってPPSを復号し、ループフィルタ情報とタイル情報を取得する(S501)。
復号制御部210は、ピクチャのサイズとタイル情報から領域情報を導出する。ここで、領域情報は動画像符号化装置100で設定された領域情報と同じ情報が導出されるものとする。なお、ピクチャのサイズとタイル情報によって設定されるCTBアドレス(CTBのアドレス順序)と、CTBが符号化される順序との関係も動画像符号化装置100で設定された動画像符号化装置100で設定された関係と同一となる。
次に、ピクチャストリームに含まれる全てのCTBについて、以下の処理が繰り返し行われる(S502からS508)。
まず、スライスヘッダがあれば、図15のシンタックスに従ってスライスヘッダを復号してスライスアドレスを取得し、スライスアドレスをCTBアドレスとし、領域情報からCTBアドレスに該当するCTB符号順序を得る。スライスヘッダがなければCTB符号順序を1だけインクリメントし、領域情報からCTB符号順序に該当するCTBアドレスを得る(S503)。ここで、CTBアドレスは、CTB符号順序から図5に示すCTBアドレスとCTB符号順序の関係に基づいて導出される。例えば、CTB符号順序が8のCTBのCTBアドレスは14となる。次のCTBではCTB符号順序が1だけインクリメントされて9となり、CTBアドレスは15となる。以上のように、CTB符号順序からCTBアドレスとCTB符号順序の関係に基づいてCTBアドレスを得る。
次に、CTB復号部202は、CTB復号部202内部のエントロピー復号部の設定をする(S504)。ここで、CTB復号部202の内部のエントロピー復号部は、動画像符号化装置100によって生成された符号列を復号可能なCABACであって、スライスまたはタイルの開始において初期化される。
次に、符号列分離部201は復号対象CTBのループフィルタユニットをフィルタパラメータ復号部204に供給し、フィルタパラメータ復号部204はループフィルタユニットをフィルタパラメータに復号して(S505)、当該フィルタパラメータをループフィルタ203に供給する。フィルタパラメータ復号部204の詳細については後述する。
次に、符号列分離部201は復号対象CTBのCTB符号列をCTB復号部202に供給し、CTB復号部202は復号対象CTBのCTB符号列を復号して、復号対象CTBの復号画像データを取得して(S506)、当該復号画像データをループフィルタ203に供給する。
次に、ループフィルタ203は、CTB復号部202より供給される復号画像データに対して、符号列分離部201より供給されるフィルタパラメータに基づいてループフィルタを実行し(S507)、新たな復号画像データを生成して、当該復号画像データをフレームメモリ205に供給する。ループフィルタ203は動画像符号化装置100のループフィルタ104と同一の機能を有するため、説明は省略する。
(フィルタパラメータ復号部204の機能と動作)
続いて、フィルタパラメータ復号部204の機能と動作について説明する。
図20はフィルタパラメータ復号部204の動作を説明するフローチャートである。以下、図20を用いて、フィルタパラメータ復号部204の機能と動作について説明する。
最初に、フィルタパラメータ復号部204は、available_left_ctb_flagとavailable_above_ctb_flagを導出する(S510)。ここで、available_left_ctb_flagとavailable_above_ctb_flagの導出方法は図14で説明した処理において「符号化対象CTB」を「復号対象CTB」に置き換えたものと同一である。
次に、available_left_ctb_flagが1であるか検査する(S511)。available_left_ctb_flagが1であれば(S511のY)、loopfilter_merge_left_flagを復号する(S512)。次に、loopfilter_merge_left_flagが1であるか検査する(S513)。loopfilter_merge_left_flagが1であれば(S513のY)、復号対象CTBの左に位置するCTBのフィルタパラメータを復号対象CTBのフィルタパラメータとして(S514)、処理を終了する。
available_left_ctb_flagが1でないか(S511のN)、loopfilter_merge_left_flagが1でなければ(S513のN)、available_above_ctb_flagが1であるか検査する(S515)。available_above_ctb_flagが1であれば(S515のY)、loopfilter_merge_above_flagを復号する(S516)。次に、loopfilter_merge_above_flagが1であるか検査する(S517)。loopfilter_merge_above_flagが1であれば(S517のY)、復号対象CTBの上に位置するCTBのフィルタパラメータを復号対象CTBのフィルタパラメータとして(S518)、処理を終了する。available_above_ctb_flagが1でないか(S515のN)、loopfilter_merge_above_flagが1でなければ(S517のN)、loopfilter_cod_param()を復号して(S519)、処理を終了する。
以上のように、loopfilter_interleave_flagを1に設定してCTB符号順序にCTBのフィルタパラメータをCTB単位で分離して復号し、CTB単位でループフィルタを実行することで、ピクチャ内の全てのCTBの復号処理の完了直後に復号画像データを出力することのできる低遅延な動画像復号装置を実現することができる。なお、フィルタパラメータ復号部204は、復号対象CTBの左と上に位置するCTBのフィルタパラメータを参照するため、ピクチャ内の全てのCTBのフィルタパラメータを保持しているものとする。
また、復号対象CTBの左辺がタイル境界に接している場合、復号対象CTBのフィルタパラメータとして復号対象CTBの左に位置する復号済みのCTBのフィルタパラメータを利用すると、復号対象CTBの左辺が接しているCTBの処理が終了するまで復号対象CTBのフィルタパラメータが確定できなくなる。そこで、復号対象CTBの左辺がタイル境界に接している場合、復号対象CTBのフィルタパラメータとして復号対象CTBの左に位置する復号済みのCTBのフィルタパラメータを利用するか否かを示すフラグであるloopfilter_merge_left_flagを復号しないことで、復号対象CTBの左に位置する復号済みのCTBのフィルタパラメータを利用不能とする。このようにすることで、復号対象CTBの左辺がタイル境界に接している場合でも、復号対象CTBのループフィルタユニットを復号した直後にフィルタパラメータを得ることを可能とする。そして、復号対象CTBの左辺が接しているCTBの処理の終了を待つことなく、ループフィルタ203の処理をCTB単位で動作させて、ループフィルタ適用後の復号画像データの出力遅延を最小限に低減することができる。
同様に、復号対象CTBの上辺がタイル境界に接している場合、復号対象CTBのフィルタパラメータとして復号対象CTBの上に位置する復号済みのCTBのフィルタパラメータを利用するか否かを示すフラグであるloopfilter_merge_above_flagを復号しないことで、復号対象CTBの上に位置する復号済みのCTBのフィルタパラメータを利用不能とする。このようにすることで、復号対象CTBの上辺がタイル境界に接している場合でも、復号対象CTBのループフィルタユニットを復号した直後にフィルタパラメータを得ることを可能とする。そして、復号対象CTBの上辺が接しているCTBの処理の終了を待つことなく、ループフィルタ203の処理をCTB単位で動作させて、ループフィルタ適用後の復号画像データの出力遅延を最小限に低減することができる。
[第2の実施の形態]
次に、第2の実施の形態について説明する。第2の実施の形態は第1の実施の形態とはloopfilter_interleave_flagが0に設定されることが異なる。つまり、フィルタパラメータはピクチャ単位で符号化される。
以下、第1の実施の形態とは異なる点について説明する。
最初に、本実施の形態に係る動画像符号化装置100の動作を説明する。図21は、第2の実施の形態に係る動画像符号化装置100の動作を説明するフローチャートである。図21に示すように、ステップS107からステップS110がピクチャ内の全てのCTBの符号化処理がなされた後に実行される。CTBアドレスの順序に従って、ピクチャ内の全てのCTBについてステップS107、ステップS108、ステップS109の処理が繰り返し行われる(S112からS113)。
次に、ピクチャの全てのCTBについて、符号列多重部107はCTB符号化部102より供給されるCTB符号列とフィルタパラメータ符号化部105より供給されるループフィルタユニットを、必要に応じてSPS、PPS、スライスヘッダなどとともに符号化ストリームとして多重化する(S110)。ここで、符号列多重部107によって多重化される符号化ストリームの構成について説明する。図22は第2の実施の形態による符号化ストリームの構成の一例を説明する図である。図22はloopfilter_interleave_flagが0である場合の符号化ストリームの構成を示す。SPSは符号化ストリームの先頭に多重化される。PPSはピクチャの先頭に多重化される。このとき、PPSにはループフィルタユニットをピクチャ単位でまとめたピクチャループフィルタパラメータが多重化される。スライスの先頭にはスライスヘッダが多重化される。スライスヘッダに続いて、そのスライスに属するCTBについてCTB符号順序にCTB符号列が多重化される。
また、ステップS105のエントロピー符号部の設定の動作が異なる。本実施の形態では、符号化対象CTBがスライスまたはタイルの最初のCTBである場合、フィルタパラメータ符号化部105はフィルタパラメータ符号化部105の内部のエントロピー符号部を初期化しない。
ここで、フィルタパラメータの符号化について、第1の実施の形態ではloopfilter_interleave_flagが1に設定されていたため、符号化対象CTBの左辺がタイル境界に接している場合、available_left_ctb_flagが0に設定されたが、第2の実施の形態ではloopfilter_interleave_flagが0に設定されるため、符号化対象CTBの左辺がタイル境界に接している場合でも、available_left_ctb_flagが1に設定される。そのため、符号化対象CTBの左辺がタイル境界に接している場合でもloopfilter_merge_left_flagを符号化することが可能となって、符号化効率を向上させることができる。同様に符号化対象CTBの上辺がタイル境界に接している場合でもloopfilter_merge_left_flagを符号化することが可能となって、符号化効率を向上させることができる。
また、loopfilter_interleave_flagを0に設定してフィルタパラメータをピクチャ単位でまとめて多重化することで、フィルタパラメータの符号量を抑制した符号化装置を実現することができる。
続いて、本実施の形態に係る動画像復号装置200の動作を説明する。図23は第2の実施の形態に係る動画像復号装置200の動作を説明するフローチャートである。図23に示すように、ステップS505とステップS507がピクチャ内の全てのCTBの復号処理がなされた後に実行される。CTBアドレスの順序に従って、ピクチャ内の全てのCTBについてステップS505、ステップS507の処理が繰り返し行われる(S510からS511)。
ここで、本実施の形態におけるステップS505について説明する。符号列分離部201はピクチャループフィルタパラメータ中の復号対象CTBのループフィルタユニットをフィルタパラメータ復号部204に供給し、フィルタパラメータ復号部204はループフィルタユニットをフィルタパラメータに復号して(S505)、当該フィルタパラメータをループフィルタ203に供給する。
また、ループフィルタ203の動作が異なる。本実施の形態では、ループフィルタはピクチャ内の全てのCTBの復号処理がなされた後に実行されるため、ループフィルタ203はピクチャ内の全てのCTBの復号画像データを保持している。
また、ステップS504のエントロピー復号部の設定の動作が異なる。本実施の形態では、復号対象CTBがスライスまたはタイルの最初のCTBであっても、フィルタパラメータ復号部204はフィルタパラメータ復号部204の内部のエントロピー復号部を初期化しないことが第1の実施の形態とは異なる。
以上のように、本実施の形態に係る動画像復号装置200は、本実施の形態に係る動画像符号化装置100によって生成された符号化ストリームを復号し、復号画像データを出力することができる。
[第3の実施の形態]
次に、第3の実施の形態について説明する。本実施の形態は第1の実施の形態とはループフィルタを適用する画素が異なる。第1の実施の形態ではCTBで完結するようにループフィルタを動作させたが、本実施の形態ではCTBを跨ってループフィルタを実行させることを可能とする。
以下、第1の実施の形態とは異なる点について説明する。
最初に、PPSのシンタックスが異なる。図24は、第3の実施の形態に係るPPSのシンタックスを説明する図である。PPSにloopfilter_across_tiles_flagが追加されることが第1の実施の形態とは異なる。loopfilter_across_tiles_flagはループフィルタをタイル境界に跨って処理することを許可するか否かを示す1ビットのフラグである。loopfilter_across_tiles_flagが1であれば、ループフィルタをタイル境界に跨って処理することを許可し、loopfilter_across_tiles_flagが0であれば、ループフィルタをタイル境界に跨って処理することを許可しない。本実施の形態では、loopfilter_across_tiles_flagは1であるとする。
図25は、第3の実施の形態に係る動画像符号化装置100の動作を説明するフローチャートである。図25を用いて第1の実施の形態とは異なる本実施の形態に係る動画像符号化装置100の動作を説明する。ステップS102に引き続いて、ピクチャの全てのCTBのフィルタパラメータが決定される(S112)。ここで、ピクチャの全てのCTBのフィルタパラメータが決定される方法については、例えば、一般的な2パスのエンコードや前のピクチャのデータを参照にして生成するなどの手法で実現できる。
また、ステップS107の代わりにステップS115が実施される。ステップS115では、ステップS112で決定されたフィルタパラメータについて、符号化対象のCTBのフィルタパラメータが取得される。
また、ステップS111に引き続いて、タイル境界を跨る画素についてループフィルタを実行する(S116)。タイル境界を跨る画素とは、垂直方向のタイル境界であれば、タイル境界の左に位置する画素とタイル境界の右に位置する画素であり、水平方向のタイル境界であれば、タイル境界の上に位置する画素とタイル境界の下に位置する画素である。ステップS116は、ステップS103からステップS111をタイル単位で独立処理(並列処理)させる場合に必要な処理である。
以上のように、ピクチャ内の全てのCTBのフィルタパラメータをCTB単位の符号化処理の前に決定し、ピクチャ内の全てのCTBについてCTB単位の符号化処理が終了した後にループフィルタを実行することで、符号化ストリームの出力は、CTB単位の符号化処理で出力することができるため、低遅延の動画像符号化装置を実現することができる。
図26は、第3の実施の形態に係る動画像復号装置200の動作を説明するフローチャートである。図26を用いて第1の実施の形態とは異なる本実施の形態に係る動画像復号装置200の動作を説明する。ステップS506の次にステップS507が実施されない。ステップS508に引き続いて、ピクチャ内の全てのCTBについて、CTBアドレスの順序でステップS512とステップS507の処理が繰り返し行われる(S510からS511)。以下、ステップS512とステップS507について説明する。
処理対象CTBのloopfilter_merge_left_flagが1であれば、処理対象CTBの左に位置するCTBからフィルタパラメータを取得する。処理対象CTBのloopfilter_merge_left_flagが0で、処理対象CTBのloopfilter_merge_above_flagが1であれば、処理対象CTBの上に位置するCTBからフィルタパラメータを取得する。処理対象CTBのloopfilter_merge_left_flagが0で、処理対象CTBのloopfilter_merge_above_flagが0であれば、処理対象CTBのファイルパラメータを取得する(S512)。
ループフィルタ104は、処理対象CTBの復号画像データに対して、処理対象CTBのフィルタパラメータに基づいてループフィルタを実行し、新たな復号画像データを生成して、当該復号画像データをフレームメモリ205に供給する(S507)。ここでは、ループフィルタ104はピクチャ内のすべてのCTBの復号画像データを保持しているとするが、CTB復号部202より供給される復号画像データをフレームメモリ205に供給して記憶させ、ステップS507ではフレームメモリ205から処理対象CTBの復号画像データを取得するようにしてもよい。
続いて、エッジタイプフィルタ131の動作について説明する。図27は第3の実施の形態のエッジタイプフィルタ131の動作を説明するフローチャートである。ステップS140が第1の実施の形態とは異なる。ステップS140では、loopfilter_across_tiles_flagが1であれば、ステップS134の画素Aまたは画素Bがタイル外であるかの検査結果をスキップして、エッジタイプフィルタを実行するステップであるステップS135以降の動作を行う。
このように、loopfilter_interleave_flagが1としてフィルタパラメータの伝送遅延を小さくする場合でも、loopfilter_across_tiles_flagが1であれば、エッジタイプフィルタにおいてタイル外の画素Aと画素Bを参照することで、タイル境界の左右または上下に接する2画素にループフィルタを適用することが可能となって、タイル境界の歪を低減することができる。また動き補償予測などで利用される参照ピクチャの画質が改善されるため、符号化効率を向上させることができる。
続いて、フィルタパラメータ符号化部105とフィルタパラメータ復号部204の動作における隣接CTBの有効性であるavailable_left_ctb_flagとavailable_above_ctb_flagの導出について説明する。図28は第3の実施の形態における隣接CTBの有効性の導出を説明するフローチャートである。ステップS190とステップS191が追加されている点が第1の実施の形態とは異なる。ステップS190とステップS191はloopfilter_across_tiles_flagが1であるか検査する。以下、ステップS190とステップS191について説明する。
loopfilter_across_tiles_flagが1であれば(S190のY)、ステップ182、ステップ183、及びステップ184がスキップされて、符号化対象CTBの左辺がタイル境界に接しているか否かに関わらずavailable_left_ctb_flagが1に設定される。loopfilter_across_tiles_flagが1でなければ(S190のN)、ステップS182が実行される。
loopfilter_across_tiles_flagが1であれば(S190のY)、ステップ186、ステップ187、及びステップ188がスキップされて、符号化対象CTBの上辺がタイル境界に接しているか否かに関わらずavailable_above_ctb_flagが1に設定される。loopfilter_across_tiles_flagが1でなければ(S191のN)、ステップS186が実行される。
以上のように、loopfilter_across_tiles_flagが1に設定される場合、フィルタパラメータの符号化では、タイル境界を跨いでフィルタパラメータを取得することを示すフラグであるloopfilter_merge_left_flagとloopfilter_merge_above_flagの符号化を許可し、タイル境界を跨いでフィルタパラメータが同一となるような場合、loopfilter_merge_left_flagやloopfilter_merge_above_flagを1に設定してフィルタパラメータに要する符号量を1ビットにすることで、符号化効率を向上させることができる。
また、loopfilter_across_tiles_flagが1に設定される場合、ファイルユニットの復号では、loopfilter_merge_left_flag、loopfilter_merge_above_flag、及びloopfilter_cod_param()を復号しておき、全てのCTBの復号処理が終了した後で、ループフィルタを実行する前にloopfilter_merge_left_flagが1であるCTBについては当該CTBの左に位置するCTBからフィルタパラメータを取得し、loopfilter_merge_above_flagが1であるCTBについては当該CTBの上に位置するCTBからフィルタパラメータを取得するようにすることで、フィルタパラメータの復号処理を停止させることなく、ピクチャの全てのCTBの復号処理が終了した後にループフィルタを正確に実行させることができる。
ここで、ファイルユニットのシンタックス要素において最も複雑な構造を有するloopfilter_cod_param()を事前に復号しておくことで、フィルタパラメータを取得する遅延を最小限に抑制することができる。
また、ループフィルタの実行遅延を抑制する場合には、ステップS505において、タイル境界の外のフィルタパラメータを利用しないCTBについてはループフィルタを実行しておき、全てのCTBの復号処理が終了した後で、タイル境界の外のフィルタパラメータを利用するCTBについてループフィルタを実行するようにしてもよい。
[第4の実施の形態]
次に、第4の実施の形態について説明する。第4の実施の形態は第3の実施の形態とはタイル境界におけるフィルタリングとフィルタパラメータの符号化の制御が異なる。
以下、第3の実施の形態とは異なる点について説明する。
最初に、PPSのシンタックスが異なる。図29は、第4の実施の形態に係るPPSのシンタックスを説明する図である。PPSにloopfilter_interleave_across_tiles_flagが追加されることが第3の実施の形態とは異なる。loopfilter_interleave_across_tiles_flagはタイル境界を跨ってフィルタパラメータを取得することを許可するか否かを示す1ビットのフラグである。loopfilter_interleave_across_tiles_flagが1であれば、タイル境界を跨ってフィルタパラメータを取得することを許可し、loopfilter_interleave_across_tiles_flagが0であれば、タイル境界を跨ってフィルタパラメータを取得することを許可しない。本実施の形態では、loopfilter_interleave_across_tiles_flagは0であるとする。
続いて、フィルタパラメータ符号化部105とフィルタパラメータ復号部204の動作における隣接CTBの有効性であるavailable_left_ctb_flagとavailable_above_ctb_flagの導出について説明する。図30は第4の実施の形態における隣接CTBの有効性の導出を説明するフローチャートである。ステップS190とステップS191が第3の実施の形態とは異なる。ステップS190とステップS191はloopfilter_interleave_across_tiles_flagが1であるか検査する。
続いて、動画像復号装置200の動作を説明する。図37は、第4の実施の形態に係る動画像復号装置200の動作を説明するフローチャートである。図37を用いて第3の実施の形態とは異なる本実施の形態に係る動画像復号装置200の動作を説明する。
ステップS506に続いて、タイル境界に接する画素以外の画素についてループフィルタが実行される(S520)。また、ステップS508に続いて、タイル境界に接する画素についてループフィルタが実行される(S521)。
以上のように、loopfilter_interleave_flagを1、loopfilter_across_tiles_flagを1、loopfilter_interleave_across_tiles_flagを0に設定することで、全てのCTBの復号処理が終了した後のループフィルタに係る処理を、タイル境界に接する画素だけにすることで、タイル境界の歪を低減しながらループフィルタの実行遅延を最小限にすることができる。また、ピクチャ内のすべてのCTBの復号処理が完了した後にループフィルタを実行させるために記憶する必要のある復号画素を、タイル境界に接する画素に対する隣接画素Aと隣接画素Bだけにすることができ、復号画像データの記憶容量を削減することができる。また、loopfilter_interleave_flagを1、loopfilter_across_tiles_flagを1、loopfilter_interleave_across_tiles_flagを1に設定することで、第3の実施の形態と同じ効果を得ることができる。
[第5の実施の形態]
次に、第5の実施の形態について説明する。第5の実施の形態は第1の実施の形態とは利用可能なフィルタタイプが異なる。第1の実施の形態ではタイル境界に位置するCTBとそれ以外のCTBにおいて利用可能なフィルタタイプは同一であったが、本実施の形態ではタイル境界に位置するCTBとそれ以外のCTBにおいて利用可能なフィルタタイプが異なる。
以下、第1の実施の形態とは異なる点について説明する。
図31は第5の実施の形態におけるCTBの位置に応じて利用可能なフィルタタイプを説明するための図である。図31を用いてCTBの位置に応じて利用可能なフィルタタイプについて説明する。available_left_ctb_flagとavailable_above_ctb_flagが共に0で、CTBの左辺と上辺が共にピクチャ境界とタイル境界に接しないCTBについては、第1の実施の形態と同様にフィルタタイプ0からフィルタタイプ5まで全てのフィルタタイプの利用を許可して、フィルタタイプの昇順にloopfliter_type_idxを0から割り当てる。CTBの左辺がピクチャ境界またはタイル境界に接するCTBについては、フィルタタイプ1とフィルタタイプ2だけを利用を許可し、フィルタタイプ1とフィルタタイプ2にloopfliter_type_idxとしてそれぞれ0と1を割り当てる。CTBの上辺がピクチャ境界またはタイル境界に接するCTBについては、フィルタタイプ1とフィルタタイプ3だけを利用を許可し、フィルタタイプ1とフィルタタイプ3にloopfliter_type_idxとしてそれぞれ0と1を割り当てる。
次に、エッジタイプフィルタ131の動作について説明する。図32は第5の実施の形態におけるエッジタイプフィルタ131の動作を説明するフローチャートである。画素Aまたは画素Bがピクチャ境界であるか検査するステップS133、画素Aまたは画素Bがタイル境界であるか検査するステップS134、オフセット値を0に設定するステップS137が省略されている点が異なる。
以上のように、loopfilter_interleave_flagが1である場合、CTBの左辺がピクチャ境界またはタイル境界に接するCTBについては、ピクチャ境界またはタイル境界の外の画素を参照するフィルタタイプであるフィルタタイプ2、フィルタタイプ4、及びフィルタタイプ5を無効とすることで、ピクチャ境界またはタイル境界の外の画素を参照する必要がなくなるため、エッジタイプフィルタ131のステップS133、ステップS134、及びステップS137が不要となって、エッジタイプフィルタ131の処理量を削減することができる。同様に、CTBの上辺がピクチャ境界またはタイル境界に接するCTBについては、ピクチャ境界またはタイル境界の外の画素を参照するフィルタタイプであるフィルタタイプ1、フィルタタイプ4、及びフィルタタイプ5を無効とすることで、ピクチャ境界またはタイル境界の外の画素を参照する必要がなくなるため、エッジタイプフィルタ131のステップS133、ステップS134、及びステップS137が不要となって、エッジタイプフィルタ131の処理量を削減することができる。
また、有効なフィルタタイプのみにloopfliter_type_idxを割り当てることで、CTBの左辺または上辺がピクチャ境界またはタイル境界に接するCTBについては、loopfliter_type_idxの符号量を1ビットのフラグに削減することで、符号化効率を向上させることができる。ここで、フィルタタイプ0、つまりループフィルタを処理しないフィルタタイプについては、フィルタタイプ1またはフィルタタイプ2でオフセットを0として設定することで対応できる。
さらに、第3の実施の形態や第4の実施の形態における動画像符号化装置において、本実施の形態のようにタイル境界におけるフィルタタイプに制限を設けることで、常にCTBで完結した低遅延の動画像符号化装置と動画像復号装置を実現することが可能となる。
[第6の実施の形態]
次に、第6の実施の形態について説明する。第6の実施の形態は第4の実施の形態とはloopfliter_type_idxの符号列とavailable_left_ctb_flagとavailable_above_ctb_flagの導出が異なる。
以下、第4の実施の形態とは異なる点について説明する。
最初に、loopfliter_type_idxの符号列が異なる。図33は、第6の実施の形態に係るloopfliter_type_idxの符号列を説明する図である。loopfliter_type_idxの0はフィルタタイプ0を示し、符号列(bin)は'0'である。loopfliter_type_idxの1はフィルタタイプ1を示し、符号列(bin)は'10'となる。loopfliter_type_idxの2はフィルタタイプ2を示し、符号列(bin)は'1100'となる。loopfliter_type_idxの3はフィルタタイプ3を示し、符号列(bin)は'1101'となる。loopfliter_type_idxの4はフィルタタイプ4を示し、符号列(bin)は'1110'となる。loopfliter_type_idxの5はフィルタタイプ5を示し、符号列(bin)は'1111'となる。
ここで、バンドタイプフィルタのフィルタパラメータはエッジタイプフィルタのフィルタパラメータよりも1個あたりの符号量が大きいため、バンドタイプフィルタのloopfliter_type_idxにエッジタイプフィルタloopfliter_type_idxよりも短い符号量を割り当てることで、エッジタイプフィルタとバンドタイプフィルタのそれぞれに要する符号量を均衡させることができる。
エッジタイプフィルタとバンドタイプフィルタのそれぞれに要する符号量を均衡させることで、エッジタイプフィルタとバンドタイプフィルタのそれぞれのループフィルタ符号化パラメータの符号化時間と復号時間を均衡させることができ、ハードウェアの回路設計やソフトウェアの設計を容易にすることができる。ここでは、バンドタイプフィルタのloopfliter_type_idxを2ビット、エッジタイプフィルタloopfliter_type_idxを4ビットに設定したが、バンドタイプフィルタのloopfliter_type_idxがエッジタイプフィルタloopfliter_type_idxよりも短い符号量であれば、これに限定されない。
次に、available_left_ctb_flagとavailable_above_ctb_flagの導出が異なる。続いて、フィルタパラメータ符号化部105とフィルタパラメータ復号部204の動作における隣接CTBの有効性であるavailable_left_ctb_flagとavailable_above_ctb_flagの導出について説明する。図34は第6の実施の形態における隣接CTBの有効性の導出を説明するフローチャートである。ステップS196とステップS197が追加されている点が第4の実施の形態とは異なる。以下、ステップS196とステップS197について説明する。
符号化対象CTBの左に位置するCTBのフィルタパラメータのフィルタタイプがフィルタタイプ0(フィルタOFF)であるか検査する(S196)。符号化対象CTBの左に位置するCTBのフィルタパラメータのフィルタタイプがフィルタタイプ0であれば(S196のY)、available_left_ctb_flagを0とする(S184)。符号化対象CTBの左に位置するCTBのフィルタパラメータのフィルタタイプがフィルタタイプ0でなければ(S196のN)、S182を実行する。
符号化対象CTBの上に位置するCTBのフィルタパラメータのフィルタタイプがフィルタタイプ0(フィルタOFF)であるか検査する(S197)。符号化対象CTBの上に位置するCTBのフィルタパラメータのフィルタタイプがフィルタタイプ0であれば(S197のY)、available_above_ctb_flagを0とする(S188)。符号化対象CTBの上に位置するCTBのフィルタパラメータのフィルタタイプがフィルタタイプ0でなければ(S197のN)、S186を実行する。
ここで、フィルタタイプがフィルタタイプ0である場合、loopfliter_type_idxは1ビットであるため、loopfilter_merge_left_flagやloopfilter_merge_above_flagを用いて符号化するよりも少ない符号量で済む可能性が高い。これは、左に位置するCTBのフィルタパラメータのフィルタタイプがフィルタタイプ0であれば、loopfilter_merge_left_flagの1ビットで済むが、左に位置するCTBのフィルタパラメータのフィルタタイプがフィルタタイプ0でなく、上に位置するCTBのフィルタパラメータのフィルタタイプがフィルタタイプ0であれば、loopfilter_merge_left_flagとloopfilter_merge_above_flagの2ビットとなり、左に位置するCTBのフィルタパラメータのフィルタタイプがフィルタタイプ0でなく、上に位置するCTBのフィルタパラメータのフィルタタイプがフィルタタイプ0でなければ、loopfilter_merge_left_flag、loopfilter_merge_above_flag、loopfliter_type_idxの3ビットとなるためである。
したがって、フィルタタイプがフィルタタイプ0である場合、loopfilter_merge_left_flagとloopfilter_merge_above_flagを符号化せず、ループフィルタ符号化パラメータだけを符号化するようにして符号化効率を向上させることができる。
[第7の実施の形態]
次に、第7の実施の形態について説明する。第7の実施の形態は第6の実施の形態とはループフィルタユニットのシンタックスとloopfliter_type_idxの符号列が異なる。
以下、第6の実施の形態とは異なる点について説明する。
最初に、ループフィルタユニットのシンタックスが異なる。図35は第7の実施の形態に係るループフィルタユニットのシンタックスを説明する図である。ループフィルタ許可フラグであるenable_loopfilter_flagが追加されている。enable_loopfilter_flagはCTBのループフィルタのONとOFFを制御するフラグであって、enable_loopfilter_flagが1であるCTBについてはループフィルタを実行し、enable_loopfilter_flagが0であるCTBについてはループフィルタを実行しない。
次に、loopfliter_type_idxの符号列が異なる。図36は、第7の実施の形態に係るloopfliter_type_idxの符号列を説明する図である。loopfliter_type_idxの0はフィルタタイプ1を示し、符号列(bin)は'0'である。loopfliter_type_idxの1はフィルタタイプ2を示し、符号列(bin)は'100'となる。loopfliter_type_idxの2はフィルタタイプ3を示し、符号列(bin)は'101'となる。loopfliter_type_idxの3はフィルタタイプ4を示し、符号列(bin)は'110'となる。loopfliter_type_idxの4はフィルタタイプ5を示し、符号列(bin)は'111'となる。
次に、フィルタパラメータ符号化部105とフィルタパラメータ復号部204の動作における隣接CTBの有効性であるavailable_left_ctb_flagとavailable_above_ctb_flagの導出が異なる。第6の実施の形態とは、ステップS196とステップS197が異なり、ステップS196とステップS197について説明する。
符号化対象CTBの左に位置するCTBのフィルタパラメータのループフィルタ許可フラグが0であるか検査する(S196)。符号化対象CTBの左に位置するCTBのフィルタパラメータのループフィルタ許可フラグが0であれば(S196のY)、available_left_ctb_flagを0とする(S184)。符号化対象CTBの左に位置するCTBのフィルタパラメータのループフィルタ許可フラグが0でなければ(S196のN)、S182を実行する。
符号化対象CTBの上に位置するCTBのフィルタパラメータのループフィルタ許可フラグが0であるか検査する(S197)。符号化対象CTBの上に位置するCTBのフィルタパラメータのループフィルタ許可フラグが0であれば(S197のY)、available_above_ctb_flagを0とする(S188)。符号化対象CTBの上に位置するCTBのフィルタパラメータのループフィルタ許可フラグが0でなければ(S197のN)、S186を実行する。
以上述べた実施の形態の動画像符号化装置と動画像復号装置では、領域の境界としてタイル境界を説明したが、タイル内のCTBはラスタースキャン順に処理されてスライスはタイル内のCTBをラスタースキャン順に包含するようにタイルとスライスを構成した場合に、タイルとスライスを組み合わせることで、スライス境界についてもタイル境界をスライス境界に置き換えることで同様に適用することができる。
以上述べた実施の形態の動画像符号化装置と動画像復号装置では、ループフィルタとしてSAOフィルタを用いたが、例えば、デブロックフィルタとSAOフィルタを組み合わせることもできる。
以上述べた実施の形態の動画像符号化装置が出力する動画像の符号化ストリームは、実施の形態で用いられた符号化方法に応じて復号することができるように特定のデータフォーマットを有しており、動画像符号化装置に対応する動画像復号装置がこの特定のデータフォーマットの符号化ストリームを復号することができる。
動画像符号化装置と動画像復号装置の間で符号化ストリームをやりとりするために、有線または無線のネットワークが用いられる場合、符号化ストリームを通信路の伝送形態に適したデータ形式に変換して伝送してもよい。その場合、動画像符号化装置が出力する符号化ストリームを通信路の伝送形態に適したデータ形式の符号化データに変換してネットワークに送信する動画像送信装置と、ネットワークから符号化データを受信して符号化ストリームに復元して動画像復号装置に供給する動画像受信装置とが設けられる。
動画像送信装置は、動画像符号化装置が出力する符号化ストリームをバッファするメモリと、符号化ストリームをパケット化するパケット処理部と、パケット化された符号化データをネットワークを介して送信する送信部とを含む。動画像受信装置は、パケット化された符号化データをネットワークを介して受信する受信部と、受信された符号化データをバッファするメモリと、符号化データをパケット処理して符号化ストリームを生成し、動画像復号装置に提供するパケット処理部とを含む。
以上の符号化及び復号に関する処理は、ハードウェアを用いた伝送、蓄積、受信装置として実現することができるのは勿論のこと、ROM(リード・オンリ・メモリ)やフラッシュメモリ等に記憶されているファームウェアや、コンピュータ等のソフトウェアによっても実現することができる。そのファームウェアプログラム、ソフトウェアプログラムをコンピュータ等で読み取り可能な記録媒体に記録して提供することも、有線あるいは無線のネットワークを通してサーバから提供することも、地上波あるいは衛星ディジタル放送のデータ放送として提供することも可能である。
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。