以下、添付の図面を参照して、本願発明をその好適な実施形態に基づいて詳細に説明する。なお、以下の実施形態において示す構成は一例に過ぎず、本発明は図示された構成に限定されるものではない。
<実施形態1>
本発明の実施形態1の画像復号装置が復号する画像符号化フォーマットにおいては1フレームが複数の矩形状の領域であるタイルに分割される。図2に実施形態1におけるタイル構造を示す。図2においては水平7680画素×垂直4320画素のフレームが水平2タイル×垂直2タイルの4個のタイルに分割された様子を示している。本発明の符号化フォーマットではブロックは水平16画素×垂直16画素で構成され、ブロック単位で符号化・復号が行われる。本実施形態ではブロックを16×16画素としているが、本発明はこれに限定されるものではない。ブロックは32×32画素でもよいし、64×64画素でもよい。各タイルサイズはブロックサイズの逓倍であり、図2において各タイルは水平240個×垂直135個のブロックから構成される。前記タイルは更に複数のブロックラインに分割されて符号化されている。ブロックラインとは、図3に示すように、タイル内のブロックをライン状に集合させたものである。図3において、細線による正方形で表されている301はブロックを表し、太線による長方形で表されている302はブロックラインを表している。
本実施形態におけるHEVCによる符号化データのフォーマットを図1に示す。図1の符号化データには、まずシーケンスの符号化に関わる情報が含まれたヘッダ情報であるシーケンス・パラメータ・セットが存在する。さらに、ピクチャの符号化に関わる情報が含まれたヘッダ情報であるピクチャ・パラメータ・セット、スライスの符号化に関わる情報が含まれたヘッダ情報であるスライスヘッダ及び各タイルの符号化データが多重化される。ピクチャ・パラメータ・セットには、タイルデータ分割情報及びブロックラインデータ分割情報が存在する。スライスヘッダにはタイルデータ位置情報及びブロックラインデータ位置情報が存在する。
ピクチャ・パラメータ・セットには、タイルデータ分割情報として、まずフレームがタイルに分割されて符号化されているか否かを示すTileFlagが存在する。TileFlagが1の時はフレームがタイルに分割されて符号化されている事を示し、そうでない場合はフレームがタイルに分割されずに符号化されている事を示す。TileFlagが1の時は、フレーム内の水平タイル数を表すnum_tile_columns_minus1、垂直タイル数を表すnum_tile_rows_minus1、タイル形状を示すuniform_spacing_flagの情報が挿入される。num_tile_columns_minus1及びnum_tile_rows_minus1はそれぞれフレーム内の実際の水平タイル数、垂直タイル数から1を減じた数を示す。なお図1中のNはスライス中のタイル数であり、(num_tile_columns_minus1+1)×(num_tile_rows_minus1+1)により一意に決まる数である。uniform_spacing_flagは、フレーム内の各タイルが同じ大きさであるか否かを示すフラグであり、値が1の時は各タイルが同じ大きさである事を示す。なお図2は各タイルが同じサイズが使用される、uniform_spacing_flag=1である時の例である。このフラグの値が0の時は各タイルの大きさが異なるため、それぞれの大きさを符号にする必要が生じる。
また、ピクチャ・パラメータ・セットにはブロックラインデータ分割情報としてWPPFlagが存在する。WPPFlagが1の時は、各タイルがブロックラインに分割されて符号化されている事を示す。本実施形態では、ブロックラインデータ分割情報及びタイルデータ分割情報を別個のフラグとして用意したが、本発明はこれに限定されず、タイルデータ分割とブロックラインデータ分割が併用される事がわかれば良い。例えば、二つのフラグを統合したシンタックスを用意して以下のように定めてもよい。
該シンタックスの値が0の時はタイルデータ分割がなく、かつブロックラインデータ分割がないことを表す。値が1の時はタイルデータ分割があり、かつブロックラインデータ分割ないことを表す。値が2の時はタイルデータ分割がなく、かつブロックラインデータ分割があることを表す。値が3の時はタイルデータ分割があり、かつブロックラインデータ分割があることを表す。
スライスヘッダには、TileFlagが1の時にはタイルデータ位置情報が存在し、WPPFlagが1の時にはブロックラインデータ位置情報が存在する。タイルデータ位置情報としてnum_tile_entry_point_offsets、tile_entry_point_offsetが存在する。ブロックラインデータ位置情報の中には、タイルの数だけnum_wpp_entry_point_offsets及びwpp_entry_point_offsetのセットが存在する。num_tile_entry_point_offsetsの値は、スライス中のタイル数を表すNから1を減じた値となる。num_wpp_entry_point_offsetsの値は、タイル内のブロックライン数を表すMから1を減じた値となる。TileFlagが0の時は、num_tile_entry_point_offsetsの値は0として扱われる。WPPFlagが0の時は、num_wpp_entry_point_offsetsの符号は省略され、値は0として扱われる。
num_tile_entry_point_offsetsは、当該スライスに存在するタイルの符号化データのエントリポイント数を表す。タイルの符号化データのエントリポイント数は、スライスに含まれるタイル数により一意に定まり、タイル数が2の場合はエントリポイント数が1、タイル数が4ならばエントリポイント数は3になる。本実施形態では、フレームがタイルを4つ含む単一のスライスで構成されているものとする。即ち、num_tile_entry_point_offsetsの値は3である。tile_entry_point_offsetはタイルの符号化データのエントリポイント、即ちタイルの符号化データの先頭位置を表す。tile_entry_point_offsetは、num_tile_entry_point_offsetsの数だけ存在し、tile_entry_point_offset[i]はi番目のタイルの符号化データのエントリポイントを示す。スライスヘッダの直後に、0番目のタイルの符号化データが存在する事がわかっているため、0番目のタイルのエントリポイントは省略される。そして、i−1番目のタイルの符号化データの大きさがtile_entry_point_offset[i]シンタックスとして符号化されている。num_tile_entry_point_offsetsの値が0の時は、tile_entry_point_offsetは不要であるため言及しない。
num_wpp_entry_point_offsetsはタイルに属するブロックラインの符号化データのエントリポイント数を表す。本実施形態では、タイルは垂直135ブロックから成るので、num_wpp_entry_point_offsetsの値は134になる。wpp_entry_point_offsetはブロックラインの符号化データのエントリポイント、即ちブロックラインの符号化データの先頭位置を表す。wpp_entry_point_offset[j]はj番目のブロックラインの符号化データのエントリポイントを示す。0番目のブロックラインの符号化データの先頭位置は、該ブロックラインが属するタイルの符号化データの先頭位置と同じであるため省略される。そして、j−1番目のブロックラインの符号化データの大きさがwpp_entry_point_offsets[j]シンタックスとして符号化される。num_wpp_entry_point_offsetsの値が0の時は、wpp_entry_point_offsetは不要であるため言及しない。
図4に前記画像符号化フォーマットに従った符号化データを復号する画像復号装置の内容を示す。
図4において、401は入力された符号化データのシーケンス・パラメータ・セット、ピクチャ・パラメータ・セット、スライスヘッダ等のヘッダを解析するビットストリーム解析部である。402及び403は、入力された符号化データを、入力された符号化パラメータに基づいてタイル単位で復号を行う復号部である。本実施形態において、タイル復号部を2つ用いる場合について説明するが、本発明はこれに限定されない。404は第一タイル復号部402及び第二タイル復号部403で生成された画像データを成形し、出力するタイル画像データ統合部である。
上記構成において、ビットストリーム解析部401は、ピクチャ・パラメータ・セット及びスライスヘッダを解析し、タイルデータ分割情報、ブロックラインデータ分割情報、タイルデータ位置情報、ブロックラインデータ位置情報を取得する。ビットストリーム解析部401はヘッダに続く符号化データをこれらの情報に基づいて後段の第一タイル復号部402、または第二タイル復号部403に入力する。ここでは、先頭のタイルを0番目として、処理対象のブロックが偶数番目のタイルに属しているのならば第一タイル復号部402へ、奇数番目のタイルに属しているならば第二タイル復号部403へ出力する。図2においては、タイル0とタイル2が第一タイル復号部402で復号され、タイル1とタイル3が第二タイル復号部403で復号される。
第一タイル復号部402及び第二タイル復号部403の詳細について図19のブロック図を用いて説明する。
1901は、処理対象のブロックがタイル内で偶数番目のブロックラインに属するかを判定するセレクタである。セレクタ1901には、タイル単位の符号化データが入力される。そして前記ブロックが偶数番目のブロックライン属しているのならば第一ブロックライン復号部1902へ前記ブロックラインの符号化データを出力し、そうでないならば第二ブロックライン復号部1903へ前記ブロックラインの符号化データを出力する。1902、1903はブロックライン復号部である。ブロックライン復号部1902、1903は入力されたブロックラインの符号化データをブロック単位で復号する。復号においては算術符号化方式の復号が行われる。算術復号が行われ発生確率テーブルを生成・更新する。1904は第一ブロックライン復号部1902で生成された発生確率テーブルを復号情報として保持する第一発生確率テーブル記憶部である。1905は第二ブロックライン復号部1903で生成された発生確率テーブルを復号情報として保持する第二発生確率テーブル記憶部である。1906は第一ブロックライン復号部1902、第二ブロックライン復号部1903で生成された画像データを成形し、出力するブロックライン画像データ統合部である。
図3において、上端のブロックライン(0ライン目)を含む偶数番目のブロックラインを示す白色のブロックは第一ブロックライン復号部1902にて復号され、奇数番目のブロックラインを示す斜線のブロックは第二ブロックライン復号部1903にて復号される。すなわち第一ブロックラインと第二ブロックラインとは隣接する関係にある。
各ブロックライン復号部においては、まず復号対象の符号化データの2値信号に対し発生確率テーブルが選択され、前記発生確率テーブルを基に算術復号が行われ、量子化係数が生成される。次に、前記量子化係数は、量子化パラメータに基づいて逆量子化が行われ、変換係数が生成される。さらに、変換係数は逆直交変換が行われ、予測誤差が生成される。最後に、復号対象のブロックの周辺の画素の参照によるフレーム内予測、または他のフレームの参照によるフレーム間予測が行われ、復号対象のブロックの画像データが生成される。
本実施形態の画像復号装置の動作を、図5のフローチャートを用いて詳細に説明する。本実施形態では符号化データはフレーム単位で入力される。フレームは複数のタイルで構成されており該タイルはブロック単位の符号化データに分割されて復号される。本実施形態では入力をフレーム単位としたが、フレームを分割したスライス単位に入力してもよい。また、本実施形態では、説明を容易にするため、イントラ予測復号の処理のみを説明するが、これに限定されずインター予測復号の処理においても適用可能である。
まず、ステップS501では、ビットストリーム解析部401において、入力されたビットストリームのヘッダが解析される。ここでは、シーケンス・パラメータ・セット、ピクチャ・パラメータ・セット、スライスヘッダ等が解析される。特に、ピクチャ・パラメータ・セットからTileFlag及びWPPFlagが解析され、スライスヘッダからタイルデータ位置情報及びブロックラインデータ位置情報が取得される。
ステップS502では、変数CurTileが0に初期化される。CurTileは処理対象のタイルの番号を示す。ステップS503において、ビットストリーム解析部401で第一タイル復号部402あるいは第二タイル復号部403に送信する送信データ量(処理対象のタイルの符号化データのサイズ)が求められる。
ビットストリーム解析部401でのタイルデータサイズの取得方法に関して図9のフローチャートを用いて説明する。図9において、まずステップS901では、処理対象のタイルがフレーム内の最後のタイルであるか否かが判定される。最後のタイルであるならば(ステップS901でYes)ステップS902に進み、そうでないならばステップS903の処理に進む。
ステップS902では、タイルの符号化データの先頭から次のNALユニットまでのデータサイズが、送信データ量として設定される。NALユニットとは、シーケンス・パラメータ・セットやピクチャ・パラメータ・セット、符号化済みスライスを格納する箱である。NALユニットのデータの先頭には、0x000001等の特定のビット列含まれているため、データの先頭を正しく識別する事ができる。ステップS903では、CurTile番目のタイルの符号化データサイズを表すtile_entry_point_offset[CurTile+1]の値が読み出され、送信データ量が決定される。
図5のフローチャートに戻り、ステップS504では、第一タイル復号部402もしくは第二タイル復号部403においてタイルの復号処理が行われる。この際、ビットストリーム解析部401において、偶数番目のタイルは第一タイル復号部402に、奇数番目のタイルは第二タイル復号部403にそれぞれ送信される。ステップS503で求められたサイズだけデータが送信される。タイル復号処理の詳細は後述する。
ステップS505では、タイル画像データ統合部404において、第一タイル復号部402及び第二タイル復号部403から出力されたタイル画像が統合され、復号画像が生成、出力される。ステップS506では、フレーム内の全てのタイルの復号処理が完了したか否かが判定される。完了したならば(ステップS506でYes)1フレームの復号処理を終了し、完了していないならばステップS507の処理に進む。ステップS507の処理では、CurTileの値がインクリメントされる。この処理は、次のタイルが次の処理対象となることを意味する。
続いて、ステップS504のタイル復号処理に関して図20のフローチャートを用いて詳細に説明する。図20において、まずステップS2001で変数CurBLが0に初期化される。変数CurBLは復号処理対象のブロックラインの番号を表す。
ステップS2002の処理において、セレクタ1901が第一ブロックライン復号部1902あるいは第二ブロックライン復号部1903に送信する送信データ量(処理対象のブロックラインの符号化データのサイズ)が求められる。送信データ量取得方法の詳細については後述する。ステップS2003の処理において、処理対象のブロックラインがタイルの上端のブロックラインであるか否かが判定される。上端のブロックラインならば(ステップS2003でYes)ステップS2004の処理へ、そうでないならばステップS2005の処理へ進む。
ステップS2004はタイルの上端のブロックラインを復号する処理であり、ブロックラインの画像データを再生する。詳細は後述する。ステップS2005の処理は、上端以外のブロックラインを復号する処理であり、ブロックラインの画像データを再生する。ブロックラインの復号に関しては、セレクタ1901において、変数CurBLの値によって、処理対象のブロックラインが偶数番目であるか奇数番目であるかが判定される。偶数番目であるならば第一ブロックライン復号部1902で、そうでないならば第二ブロックライン復号部1903で、それぞれブロックライン単位で並列に復号されるものとする。同じく詳細は後述する。
ステップS2006では、ブロックライン画像データ統合部1906において、第一ブロックライン復号部1902及び第二ブロックライン復号部1903から出力された各ブロックライン画像データを統合し、タイル画像を生成、出力する。ステップS2007では、タイル内の全てのブロックラインの復号処理が完了したか否かが判定される。完了したならば(ステップS2007でYes)タイル復号処理を終了し、そうでないならばステップS2008の処理に進む。
ステップS2008の処理では、CurBLの値がインクリメントされる。これは、処理対象のタイル内の次のブロックラインが処理対象となる事を意味する。ステップS2002の、ビットストリーム解析部401でのブロックラインデータサイズ取得処理に関して図21のフローチャートを用いて詳細に説明する。本処理には、処理対象のブロックラインの番号を表す変数CurBL及び処理対象のタイルの番号を表す変数CurTileが入力として与えられる。
まずステップS2101の処理では、処理対象のブロックラインがタイル内で最後のブロックラインであるか否かが判定される。最後のブロックラインであるならば(ステップS2101でYes)ステップS2103の処理に進み、そうでないならばステップS2102の処理に進む。
ステップS2102の処理ではCurTile番目のタイルのCurBL番目のブロックラインの符号化データサイズを表すwpp_entry_point_offset[CurTile+1][CurBL+1]の値が読み出され送信データ量が決定される。また、ステップS2103の処理において、処理対象のタイルがフレーム内の最終タイルであるか否かが判定される。最終タイルであるならば(ステップS2103でYes)ステップS2104の処理に進み、そうでないならばステップS2105の処理に進む。
ステップS2104の処理では、処理対象のブロックラインの符号化データの先頭から次のNALユニットまでのデータサイズが、最終タイルの最後のブロックラインの送信データ量として設定される。NALユニットのデータの先頭には、0x000001等の特定のビット列含まれているため、データの先頭を正しく識別する事ができる。
ステップS2105の処理では、最終タイルではないタイル内の最後のブロックラインのデータサイズが送信データ量として求められる。タイル内の最後のブロックラインのデータサイズは、wpp_entry_point_offset の要素として与えられていない。そのため、処理対象のタイルの符号化データサイズを表すtile_entry_point_offset[CurTile+1]から、これまでに処理したタイルのデータサイズを減算することで算出される。
図20に戻り、ステップS2004の処理(上端のブロックラインを復号する処理)に関して、図6のフローチャートを用いて詳細に説明する。上端のブロックラインは、偶数番目のブロックラインなので、処理対象のブロックラインの符号化データはセレクタ1901によって第一ブロックライン復号部1902へ入力され復号される。ここで、セレクタ1901は、ステップS2002で取得されたデータ送信量(処理対象のブロックラインの符号化データサイズ)だけ符号化データを第一ブロックライン復号部1902へ出力する。
図6では、まずステップS601において、発生確率テーブルが所定の方法で初期化される。初期化された発生確率テーブルは、ブロックラインの左端のブロックの最初の2値信号を算術復号する際に用いられ、後述するステップS602で随時更新される。以下、ブロックラインの最初のブロックの2値信号を算術復号する際に用いられる発生確率テーブルを、ブロックライン基準発生確率テーブルと記す。
次に、ステップS602では、第一ブロックライン復号部1902によって符号化データがブロック単位で復号され画素データが生成される。ステップS602のブロック単位の復号処理について、図8のフローチャートを用いて詳細に説明する。
図8では、まずステップS801において、符号化データが前記発生確率テーブルに基づいて算術復号され、2値信号が生成される。更に、H.264と同様にシンタックス要素毎に、ユーナリー・バイナリゼーション、固定長バイナリゼーション等の種々の2値化方式で2値化されている前記2値信号を復号し、量子化係数を含むシンタックス要素を生成する。ステップS802では、算術復号された2値信号が、発生確率の高い方のシンボルであったか否かに基づいて前記発生確率テーブルが更新される。ステップS803では、ブロック内の全シンタックス要素が算術復号されたか否かが判定される。全シンタックス要素が算術復号されたならば(ステップS803でYes)ステップS804の処理に進む。そうでないならばステップS801の処理に進み、次のシンタックス要素の復号が行われる。ステップS804では、前記量子化係数が逆量子化され、変換係数が生成される。更に、前記変換係数には逆直交変換が適用され、予測誤差が生成される。ステップS805では、処理対象のブロックの周辺の画素からイントラ予測が行われ予測画像が生成される。更に、前記予測誤差と予測画像を足し合わせる事で、ブロック単位の画像データを生成する。
図6のフローチャートに戻り、ステップS603では、発生確率テーブルを格納する条件を満たしているか否かが判定される。本実施形態では、ステップS602で復号したブロックが、ブロックラインの左端から所定数目のブロックであったか否かを、前記発生確率テーブルを格納する条件とする。前記条件を満たしている際には(ステップS603でYes)ステップS604の処理に進み、発生確率テーブルを第一発生確率テーブルとして第一発生確率テーブル記憶部1904に記憶する。条件を満たしていない場合はステップS605の処理に進む。第一発生確率テーブルは、次のブロックラインの左端のブロックを復号する際のブロックライン基準発生確率テーブルとして用いられる。
次に、ステップS605において、処理対象のブロックラインの全ブロックを復号したか否かが判定される。全てのブロックを復号したならば(ステップS605でYes)上端のブロックラインの復号を終了し、そうでないならばステップS602の処理に進みラスタ順で次のブロックを復号する。
次に、図20のステップS2005の処理(上端以外のブロックラインを復号する処理)に関して、図7のフローチャートを用いて詳細に説明する。処理対象のブロックラインが偶数番目のブロックラインであるならば、第一ブロックライン復号部1902に処理対象のブロックラインの符号化データが入力され復号される。奇数番目のブロックラインであるならば、第二ブロックライン復号部1903に処理対象のブロックラインの符号化データが入力され復号される。ここで、セレクタ1901は、ステップS2002で取得されたデータ送信量(処理対象のブロックラインの符号化データサイズ)だけ符号化データを第一ブロックライン復号部1902もしくは第二ブロックライン復号部1903に出力する。まず、奇数番目のブロックラインを第二ブロックライン復号部1903で復号する際のフローについて説明する。
図7において、まずステップS701において、第一発生確率テーブルが第一発生確率テーブル記憶部1904から、ブロックライン基準発生確率テーブルとして入力される。
ステップS702、S703の処理は、ステップS602、S603の処理と同一であるため説明を省略する。ステップS704の処理では、発生確率テーブルが第二発生確率テーブルとして、第二発生確率テーブル記憶部1905に格納される。第二発生確率テーブルは、次のブロックラインの左端のブロックを算術復号する際にブロックライン基準発生確率テーブルとして用いられる。ステップS705の処理はステップS605と同じであり、奇数番目のブロックライン内の全ブロックの復号処理が終了したかの判定を行う。続いて、偶数番目のブロックラインを第一ブロックライン復号部1902で復号する際のフローを説明する。まず、ステップS701の処理では、第二発生確率テーブルが第二発生確率テーブル記憶部1905からブロックライン基準発生確率テーブルとして入力される。ステップS702〜705の処理に関しては、ステップS602〜S605の処理と同一であるため説明を省略する。
以上の構成と動作により、タイル及び各ブロックラインの符号化データの先頭位置を正しく認識できるため、タイル単位で並列に復号可能とした上で、更にタイル内においてもブロックライン単位に並列に復号が可能になる。これにより、フレームをタイルに分割し、更にタイルをブロックラインに分割可能とする事で、並列性及び符号化効率の両方を高める事ができる。
なお、本実施形態でタイル復号部やブロックライン復号部が2つの場合について説明したが、例えば第三タイル復号部、第三ブロックライン復号部、第三発生確率テーブル記憶部を加えることで、より多くの復号部での並列処理が可能であることは明白である。
<実施形態2>
本発明の実施形態2の画像復号装置が復号する画像符号化フォーマットは、実施形態1と同様に1フレームが複数の矩形状の領域であるタイルに分割される。実施形態2のタイル構造は実施形態1の図2と同一であるため説明を省略する。
本実施形態におけるHEVCによる符号化データのフォーマットを図10に示す。図10の符号化データは、スライスヘッダ以外は実施形態1と同様であるため、スライスヘッダのみを説明する。図10のスライスヘッダには、TileFlagが1もしくはWPPFlagが1の時には位置情報としてnum_entry_point_offsets及びentry_point_offsetが存在する。
TileFlagが1かつWPPFlagが0の時は、フレームが複数タイルに分割され、ブロックラインには分割されずに符号化されていることを意味する。この時、num_entry_point_offsetsはスライス内のタイル数を表すNから1を減じた値となる。entry_point_offset[i]は、i番目のタイルの符号化データのエントリポイントを示す。スライスヘッダの直後に、0番目のタイルの符号化データが存在する事がわかっているため、0番目のタイルのエントリポイントは省略される。そして、i−1番目のタイルの符号化データの大きさがentry_point_offset[i]シンタックスとして符号化されている。
TileFlagが0かつWPPFlagが1の時は、フレームが単一のタイルで構成され、ブロックラインに分割されて符号化されていることを意味する。この時、num_entry_point_offsetsはスライス内のブロックラインの数から1を減じた値となる。entry_point_offset[i]は、i番目のブロックラインの符号化データのエントリポイントを示す。スライスヘッダの直後に、0番目のブロックラインの符号化データが存在する事がわかっているため、0番目のブロックラインのエントリポイントは省略される。そして、i−1番目のブロックラインの符号化データの大きさがentry_point_offset[i]シンタックスとして符号化されている。
TileFlagが1かつWPPFlagが1の時は、フレームが複数のタイルに分割され、各タイルが更にブロックラインに分割されて符号化されていることを意味する。この時、num_entry_point_offsetsの値は、スライス内のタイル数Nとタイル内のブロックライン数Mの積から1を減じた値となる。entry_point_offset[i]は、i番目のブロックラインの符号化データのエントリポイントを示す。スライスヘッダの直後に、0番目のブロックラインの符号化データが存在する事がわかっているため、0番目のブロックラインのエントリポイントは省略される。そして、i−1番目のブロックラインの符号化データの大きさがentry_point_offset[i]シンタックスとして符号化されている。
TileFlagが0かつWPPFlagが0の時、すなわちフレームが単一のタイルで構成され、ブロックラインにも分割されずに符号化されている時はnum_entry_point_offsetsの値は0として扱われる。
本実施形態では、TileFlag及びWPPFlagはいずれも1である。本実施形態における符号化データのスライスは4つのタイルで構成されており、個々のタイルは垂直135ブロックからなるので、num_entry_point_offsetsの値は4×135−1=539となる。
前記画像符号化フォーマットに従った符号化データを復号する、本実施形態の画像復号装置の構成は実施形態1の図4及び図19と同様であるため説明を省略する。
本実施形態の画像復号装置の動作を、図5のフローチャートを用いて詳細に説明する。図5において、まず、ステップS501では、実施形態1と同様に、ピクチャ・パラメータ・セットからTileFlag及びWPPFlagが解析され、スライスヘッダから位置情報が取得される。次に、ステップS502の処理において、変数CurTileが0に初期化される。次に、ステップS503でビットストリーム解析部401において実施形態1とは異なる方法で、第一タイル復号部402あるいは第二タイル復号部403に送信する送信データ量が求められる。
本実施形態のタイルデータサイズの取得方法に関して図11のフローチャートを用いて説明する。図11において、ステップS1101及びステップS1102の処理は、図9のステップS901及びステップS902の処理と同一であるため説明を省略する。
ステップS1103では、タイルの垂直ブロック数から、処理対象のタイル内のエントリポイント数を判定し、entry_point_offsetの対応する各要素を足し合わせて送信データ量として設定する。本実施形態では、タイルの垂直ブロック数は135で固定である。そのため、entry_point_offset[CurTile*135+1]からentry_point_offset[(CurTile+1)*135]までの値が足しあわされ、送信データ量として設定される。各タイルの垂直ブロック数が同一でない場合は、それまでに処理した各タイルのブロックライン数を足し合わせて、足し合わせを開始するentry_point_offset[]の要素の位置を決定する。
図5に戻り、ステップS504の処理では、実施形態1と同様に、第一タイル復号部402もしくは第二タイル復号部403においてタイルの復号処理が行われる。ステップS504のタイル復号処理に関しては、実施形態1と同様図20のフローチャートを用いて説明する。図20では、ステップS2002のブロックラインデータサイズ取得処理を除いては実施形態1と同一であるため、本実施形態ではステップS2002についてのみ図12を用いて説明する。図12において、まずステップS1201で、ビットストリーム解析部401において処理対象のブロックラインがフレーム内の最後のブロックラインか否かが判定される。最後のブロックラインならば(ステップS1201でYes)ステップS1203の処理に進み、そうでないならばステップS1202の処理に進む。
ステップS1202の処理では処理対象のブロックラインの符号化データサイズを表すentry_point_offsetの要素の値が読み出され、送信データ量が決定され、ブロックラインデータサイズ取得処理が終了される。本実施形態では、各タイルの垂直ブロック数が135で固定のため、読み出される要素は、entry_point_offset[CurTile×135+CurBL+1]となる。各タイルの垂直ブロック数が異なる場合は、処理済みのタイルの垂直ブロック数を足し合わせた数字を、CurTile×135の数字と置き換える必要がある。
ステップS1203では、処理対象のブロックラインの符号化データの先頭から次のNALユニットまでのデータサイズが、送信データ量として設定されブロックラインデータサイズ取得処理が終了される。NALユニットのデータの先頭には、0x000001等の特定のビット列含まれているため、データの先頭を正しく識別する事ができる。
図5に戻り、ステップS505からステップS507の処理に関しては、実施形態1と同一であるため説明を省略する。
以上の構成と動作により、各タイル及び各ブロックラインの符号化データの先頭位置を正しく認識できるため、タイル単位で並列に復号可能とした上で、タイル内においてもブロックライン単位に並列に復号が可能になる。実施形態1ではタイルのエントリポイント数及びエントリポイントに加え、ブロックラインのエントリポイント数及びエントリポイントのセットをタイルの数だけシンタックスとして持つ必要があった。本実施形態では、エントリポイントが全てブロックラインの符号化データのサイズで表されるため、タイルのエントリポイントとブロックラインのエントリポイントの情報を別々に持つ必要がないため、より少ない情報量で並列な復号が可能となる。
なお、本実施形態でタイル復号部やブロックライン復号部が2つの場合について説明したが、例えば第三タイル復号部、第三ブロックライン復号部、第三発生確率テーブル記憶部を加えることで、より多くの復号部での並列処理が可能であることは明白である。
<実施形態3>
本発明の実施形態3の画像符号化装置が符号化する画像符号化フォーマットにおいては実施形態1と同様に1フレームが複数の矩形状の領域であるタイルに分割される。実施形態3のタイル構造は実施形態1の図2と同一であるため説明を省略する。但し、これに限定されない。
本実施形態におけるHEVCによる符号化ストリームのフォーマットを図1に示すが、実施形態1と同様であるため説明を省略する。図13に、前記画像符号化フォーマットに従った符号化ストリームを符号化する画像符号化装置の内容を示す。
図13において、1301は、処理対象のブロックが偶数番目のタイルに属するかを判定するタイルセレクタである。タイルセレクタ1301は、前記ブロックが偶数番目のタイルに属しているのならば第一タイル符号化部1302へ前記ブロックを出力し、そうでないならば第二タイル符号化部1303へ前記ブロックを出力する。
1302及び1303は、入力画像をn×n画素(nは2以上の正の整数)に分割したブロックをタイル単位で符号化を行うタイル符号化部である。本実施形態において、タイル符号化部を2つ用いる場合について説明するが、本発明はこれに限定されない。図2においては、タイル0とタイル2が第一タイル符号化部1302で符号化され、タイル1とタイル3が第二タイル符号化部1303で符号化される。
第一タイル符号化部1302及び第二タイル符号化部1303の詳細について図23のブロック図を用いて説明する。
2301は、処理対象のブロックがタイル内で偶数番目のブロックラインに属するか否かを判定し、その判定結果によって出力先を選択するブロックラインセレクタである。2302は第一ブロックライン符号化部であり、偶数番目のブロックラインのブロックの符号化を行う。2302は第二ブロックライン符号化部であり、奇数番目のブロックラインのブロックの符号化を行う。2304は第一ブロックライン符号化部2302で生成された発生確率テーブルを符号化情報として保持する第一発生確率テーブル記憶部である。以下、第一発生確率テーブル記憶部2304に記憶される発生確率テーブルを、第一発生確率テーブルと記す。2305は第二ブロックライン符号化部2303で生成された発生確率テーブルを符号化情報として保持する第二発生確率テーブル記憶部である。以下、第二発生確率テーブル記憶部に記憶される発生確率テーブルを、第二発生確率テーブルと記す。2306は第一ブロックライン符号化部2302で生成された符号化データと、第二ブロックライン符号化部2303で生成された符号化データを統合し、位置情報を含む符号化パラメータと併せて出力するブロックライン統合符号化部である。
ブロックラインセレクタ2301には、タイル単位の画像データが入力される。そして前記ブロックが偶数番目のブロックライン属しているのならば第一ブロックライン符号化部2302へ前記ブロックを出力し、そうでないならば第二ブロックライン符号化部2303へ前記ブロックを出力する。図3において、偶数番目のブロックラインを示す白色のブロックは第一ブロックライン符号化部2302にて符号化され、奇数番目のブロックラインを示す斜線のブロックは第二ブロックライン符号化部2303にて符号化される。上端のブロックラインは0ライン目であるので第一ブロックライン符号化部2302で符号化される。第一ブロックライン符号化部2302及び第二ブロックライン符号化部2303を用いた符号化処理の詳細については後述する。
図13に戻り、1304は第一タイル符号化部1302で生成された符号化データと符号化パラメータ、第二タイル符号化部1303で生成された符号化データと符号化パラメータを統合し、ビットストリームとして出力する統合符号化部である。統合符号化部1304は、TileFlagやWPPFlag等の分割情報をピクチャ・パラメータ・セットに、位置情報をスライスヘッダに統合し出力する。
本実施形態の画像符号化装置の動作を、図14から図17のフローチャートを用いて詳細に説明する。本実施形態では画像はフレーム単位で入力される。フレームは複数のタイルで構成されており、該タイルは更にブロック単位の画像データに分割されて符号化される。本実施形態では入力をフレーム単位としたが、フレームを分割したスライス単位に入力してもよい。また、本実施形態では、説明を容易にするため、イントラ予測符号化の処理のみを説明するが、これに限定されずインター予測符号化の処理においても適用可能である。
図14において、1フレームの符号化について説明する。ステップS1401では、タイルの番号を表す変数CurTileが0に初期化される。ステップS1402では、図13の第一タイル符号化部1302もしくは第二タイル符号化部1303においてタイルの符号化処理が行われる。この際、タイルセレクタ1301において、偶数番目のタイルは第一タイル符号化部1302に、奇数番目のタイルは第二タイル符号化部1303にそれぞれ送信される。タイル符号化処理の詳細について図24のフローチャートを用いて説明する。
図24では、まずステップS2401において、符号化処理対象のブロックラインの番号を表す変数CurBLが0に初期化される。ステップS2402において、符号化処理対象のブロックラインがタイルの上端のブロックラインであるか否かが判定される。上端のブロックラインならば(ステップS2402でYes)ステップS2403の処理へ、そうでないならばステップS2404の処理へ進む。
ステップS2403はタイルの上端のブロックラインを符号化する処理である。ステップS2404の処理は、上端以外のブロックラインを符号化する処理である。これらの詳細は後述する。ステップS2405の処理は、スライスヘッダに格納される位置情報(tile_entry_point_offset及びwpp_entry_point_offset)を設定する処理で、同じく詳細は後述する。
ステップS2406では、ブロックライン統合符号化部2306において、第一ブロックライン符号化部2302及び第二ブロックライン符号化部2303から出力された各符号化データが統合される。更にステップS2405で計算された位置情報を含む符号化パラメータと統合された符号化データが併せて出力される。
ステップS2407では、タイル内の全てのブロックラインの符号化処理が完了したか否かが判定される。完了したならば(ステップS2407でYes)タイル符号化処理を終了し、そうでないならばステップS2408の処理に進む。
ステップS2408では、変数CurBLの値がインクリメントされる。これは、符号化処理対象のタイル内の次のブロックラインが符号化処理対象となる事を意味する。
図14に戻り、ステップS1403では、フレーム内の全てのタイルの符号化処理が完了したか否かが判定される。完了したならば(ステップS1403でYes)ステップS1405の処理に進み、完了していないならばステップS1404の処理に進む。ステップS1404の処理では、タイル番号を表す変数CurTileの値がインクリメントされる。この処理は、次のタイルが次の処理対象となることを意味する。ステップS1405では、統合符号化部1304において、第一タイル符号化部1302及び第二タイル符号化部1303から出力された各符号化データを統合する。更に、ステップS1402で計算された位置情報を含む符号化パラメータを統合してビットストリームを生成、出力する。
次に、図24のタイル符号化処理に含まれるブロックラインの符号化の各処理の詳細について説明する。まず、ステップS2403の処理(上端のブロックラインを符号化する処理)に関して、図15のフローチャートを用いて詳細に説明する。上端のブロックラインは、偶数番目のブロックラインなので、処理対象のブロックラインの画像はタイルセレクタ1301によって第一タイル符号化部1302へ入力され符号化される。
図15では、まずステップS1501において、発生確率テーブルが所定の方法で初期化される。初期化された発生確率テーブルは、ブロックラインの左端のブロックの最初の2値信号を算術符号化する際に用いられ、後述するステップS1502で随時更新される。以下、ブロックラインの最初のブロックの2値信号を算術符号化する際に用いられる発生確率テーブルを、ブロックライン基準発生確率テーブルと記す。
ステップS1502では、第一タイル符号化部1302によって画像がブロック単位で符号化され、符号化データが生成される。ステップS1502のブロック符号化処理について、図16のフローチャートを用いて詳細に説明する。
図16において、ステップS1601では、入力された画像ブロックに対してブロック周辺の画素を利用したイントラ予測が行われ、予測誤差が生成される。ステップS1602では、前記予測誤差に対して直交変換が行われ変換係数が生成される。更に、画像の特性や符号量等に基づいて決定された量子化パラメータを用いて、前記変換係数が量子化され、量子化係数が生成される。ステップS1603では、量子化パラメータや予測モード等の各シンタックス要素が2値化され、2値信号が生成される。シンタックス要素毎に、H.264と同様に、ユーナリー・バイナリゼーション、固定長バイナリゼーション等の種々の2値化の手法が切り替えられて用いられる。更に、前記2値信号は前記発生確率テーブルに基づいて算術符号化される。ステップS1604では、算術符号化された2値信号が、発生確率の高い方のシンボルであったか否かに基づいて前記発生確率テーブルが更新される。ステップS1605では、ブロック内の全シンタックス要素が算術符号化されたか否かが判定される。全シンタックス要素が算術符号化されたならば(ステップS1605でYes)ブロック符号化処理を終了し、そうでないならばステップS1603の処理に進み、次のシンタックス要素の符号化を行う。
図15のフローチャートに戻り、ステップS1503では、発生確率テーブルを格納する条件を満たしているか否かが判定される。本実施形態では、ステップS1602で符号化したブロックが、ブロックラインの左端から所定数目のブロックであったか否かを、前記発生確率テーブルを格納する条件とする。前記条件を満たしている際には(ステップS1503でYes)ステップS1504の処理に進み、発生確率テーブルを第一発生確率テーブルとして第一発生確率テーブル記憶部2304に記憶する。条件を満たしていない場合はステップS1505の処理に進む。第一発生確率テーブルは、次のブロックラインの左端のブロックを符号化する際のブロックライン基準発生確率テーブルとして用いられる。
ステップS1505において、処理対象のブロックラインの全ブロックを符号化したか否かが判定される。全てのブロックを符号化したならば(ステップS1505でYes)上端のブロックラインの符号化を終了し、そうでないならばステップS1502の処理に進みラスタ順で次のブロックを符号化する。
次に、図24のステップS2404の処理(上端以外のブロックラインを符号化する処理)に関して、図17のフローチャートを用いて詳細に説明する。処理対象のブロックラインが偶数番目のブロックラインであるならば第一ブロックライン符号化部2302に処理対象のブロックの画像が入力され符号化される。奇数番目のブロックラインであるならば第二ブロックライン符号化部2303に処理対象のブロックの画像が入力され符号化される。まず、奇数番目のブロックラインを第二ブロックライン符号化部2303で復号する際のフローについて説明する。
ステップS1701において、第一発生確率テーブルが第一発生確率テーブル記憶部2304から、ブロックライン基準発生確率テーブルとして入力される。ステップS1702、S1703の処理は、ステップS1502、S1503の処理と同一であるため説明を省略する。ステップS1704の処理では、発生確率テーブルが第二発生確率テーブルとして、第二発生確率テーブル記憶部2305に格納される。第二発生確率テーブルは、次のブロックラインの左端のブロックを算術符号化する際にブロックライン基準発生確率テーブルとして用いられる。ステップS1705の処理はステップS1505と同じであり、奇数番目のブロックライン内の全ブロックが符号化処理を行う。
続いて、偶数番目のブロックラインを第一ブロックライン符号化部2302で符号化する際のフローを説明する。ステップS1701の処理では、第二発生確率テーブルが第二発生確率テーブル記憶部2305からブロックライン基準発生確率テーブルとして入力される。ステップS1702〜1704の処理に関しては、ステップS1502〜S1504の処理と同一であるため説明を省略する。S1705の処理はS1505と同じであり、偶数番目のブロックライン内の全ブロックが符号化処理を行う。
続いて、図24のステップS2405の、位置情報の計算処理について、図18のフローチャートを用いて詳細に説明する。この処理には入力として、変数CurBL及び変数CurTileが与えられる。
図18では、まずステップS1801で処理対象のブロックラインが、処理対象のタイル内で最後のブロックラインであるか否かが判定される。最後のブロックラインであるならば(ステップS1801でYes)ステップS1803の処理に進み、そうでないならばステップS1802の処理に進む。
ステップS1802の処理では、処理対象のブロックラインの符号化データサイズがシンタックスwpp_entry_point_offset[CurTile+1][CurBL+1]として設定される。wpp_entry_point_offset[CurTile][CurBL]は、CurTile番目のタイル内のCurBL番目のブロックラインの符号化データサイズを表すシンタックスである。
また、ステップS1803の処理において、処理対象のタイルがフレーム内の最後のタイルであるか否かが判定される。最後のタイルであるならば位置情報計算の処理を終了し、そうでないならばステップS1804の処理に進む。ここで、最後のタイルである場合は、最後のタイルの最後のブロックラインであり、ブロックラインのエントリポイントの情報はシンタックスとして符号化されない。
ステップS1804の処理において、処理対象のタイルの符号化データサイズが、CurTile番目のタイルの符号化データサイズを表すシンタックスtile_entry_point_offset[CurTile+1]として設定される。wpp_entry_point_offset及びtile_entry_point_offset[]の値は、図14のステップS1405の処理でスライスヘッダに統合される。
以上の構成と動作により、画像をタイル分割し、さらにブロックライン単位で並列に符号化が行えるようになるため、符号化においても高速な符号化が可能になった。さらに、タイル及び各ブロックラインの符号化データの先頭位置を正しく認識できるため、タイル単位で並列に復号可能とした上で、更にタイル内においてブロックライン単位に並列に復号が可能なビットストリームを符号化可能になる。これにより、フレームをタイルに分割し、更にタイルをブロックライン分割可能とする事で、並列性及び符号化効率の両方を高める事ができる。
なお、本実施形態ではタイル符号化部やブロックライン符号化部が2つの場合について説明した。しかし例えば第三タイル符号化部、第三ブロックライン符号化部、第三発生確率テーブル記憶部を加えることで、より多くの符号化部での並列処理が可能であることは明白である。
<実施形態4>
本発明の実施形態4の画像符号化装置が符号化する画像符号化フォーマットにおいては実施形態1と同様に1フレームが複数の矩形状の領域であるタイルに分割される。実施形態4のタイル構造は実施形態1の図2と同一であるため説明を省略する。但し、これに限定されない。
本実施形態におけるHEVCによる符号化ストリームのフォーマットを図10に示す。図10の符号化ストリームは、実施形態2と同様であり、全てのエントリポイントがブロックラインのエントリポイントで表される。
図13に、本実施形態の画像符号化フォーマットに従った符号化ストリームを符号化する、本実施形態の画像符号化装置の内容を図13及び図23示す。本実施形態の画像符号化装置の構成は実施形態3と同様であるため説明を省略する。
本実施形態の画像符号化装置の動作は、図24のステップS2405の位置情報計算処理を除いて実施形態3と同一であるため、ステップS2405のみを図22を用いて説明する。
図22では、まずステップS2201において処理対象のブロックラインがフレーム内の最後のブロックラインか否かが判定される。最後のブロックラインであるならば(ステップS2201でYes)位置情報計算処理を終了し、最後でないならばステップS2202の処理に進む。ここで、最後のブロックラインである場合は、ブロックラインのエントリポイントの情報はシンタックスとして符号化されない。
ステップS2202では、処理対象のブロックラインの符号化データサイズがentry_point_offsetの要素として設定される。本実施形態では、各タイルの垂直ブロック数が135で固定のため、CurTile番目のタイルのCurBL番目のブロックラインの符号化データサイズは、entry_point_offset[CurTile×135+CurBL+1]として設定される。各タイルの垂直ブロック数が異なる場合は、処理済みのタイルの垂直ブロック数を足し合わせた数字を、CurTile×135の数字と置き換える必要がある。
図24に戻り、ステップS2405の位置情報計算処理で求められた位置情報entry_point_offsetは、実施形態3と同様に、ステップS1405の処理でスライスヘッダのシンタックスとして統合される。
以上の構成と動作により、画像をタイル分割し、さらにブロックライン単位で並列に符号化が行えるようになるため、符号化においても高速な符号化が可能になる。タイル及び各ブロックラインの符号化データの先頭位置を正しく認識できるため、タイル単位で並列に復号可能とした上で、更にタイル内においてブロックライン単位に並列に復号が可能なビットストリームを符号化可能になる。
実施形態3ではタイルのエントリポイント数及びエントリポイントに加え、ブロックラインのエントリポイント数及びエントリポイントのセットをタイルの数だけシンタックスとして持つ必要があった。本実施形態では、エントリポイントが全てブロックラインの符号化データのサイズで表されるため、タイルのエントリポイントとブロックラインのエントリポイントの情報を別々に持つ必要がなく、より少ない情報量で並列な復号が可能なストリームを符号化できる。
なお、本実施形態でタイル符号化部やブロックライン符号化部が2つの場合について説明した。しかし例えば第三タイル符号化部、第三ブロックライン符号化部、第三発生確率テーブル記憶部を加えることで、より多くの符号化部での並列処理が可能であることは明白である。
<実施形態5>
図4、図13、図19、図23に示した各処理部はハードウェアでもって構成しているものとして上記実施形態では説明した。しかし、図4、図13、図19、図23に示した各処理部で行なう処理をコンピュータプログラムでもって構成しても良い。
図25は、上記各実施形態に係る画像表示装置に適用可能なコンピュータのハードウェアの構成例を示すブロック図である。
CPU2501は、RAM2502やROM2503に格納されているコンピュータプログラムやデータを用いてコンピュータ全体の制御を行うと共に、上記各実施形態に係る画像処理装置が行うものとして上述した各処理を実行する。即ち、CPU2501は、図4、図13、図19、図23に示した各処理部として機能することになる。
RAM2502は、外部記憶装置2506からロードされたコンピュータプログラムやデータ、I/F(インターフェース)2507を介して外部から取得したデータなどを一時的に記憶するためのエリアを有する。更に、RAM2502は、CPU2501が各種の処理を実行する際に用いるワークエリアを有する。即ち、RAM2502は、例えば、フレームメモリとして割当てたり、その他の各種のエリアを適宜提供することができる。
ROM2503には、本コンピュータの設定データや、ブートプログラムなどが格納されている。操作部2504は、キーボードやマウスなどにより構成されており、本コンピュータのユーザが操作することで、各種の指示をCPU2501に対して入力することができる。出力部2505は、CPU2501による処理結果を出力する。また出力部2505は例えば液晶ディスプレイのような表示装置で構成して処理結果を表示することができる。
外部記憶装置2506は、ハードディスクドライブ装置に代表される、大容量情報記憶装置である。外部記憶装置2506には、OS(オペレーティングシステム)や、図4、図13、図19、図23に示した各部の機能をCPU2501に実現させるためのコンピュータプログラムが保存されている。更には、外部記憶装置2506には、処理対象としての各画像が保存されていても良い。
外部記憶装置2506に保存されているコンピュータプログラムやデータは、CPU2501による制御に従って適宜RAM2502にロードされ、CPU2501による処理対象となる。I/F2507には、LANやインターネット等のネットワーク、投影装置や表示装置などの他の機器を接続することができ、本コンピュータはこのI/F2507を介して様々な情報を取得したり、送出したりすることができる。2508は上述の各部を繋ぐバスである。
上述の構成からなる作動は前述のフローチャートで説明した作動をCPU2501が中心となってその制御を行う。
<その他の実施形態>
本発明の目的は、前述した機能を実現するコンピュータプログラムのコードを記録した記憶媒体を、システムに供給し、そのシステムがコンピュータプログラムのコードを読み出し実行することによっても達成される。この場合、記憶媒体から読み出されたコンピュータプログラムのコード自体が前述した実施形態の機能を実現し、そのコンピュータプログラムのコードを記憶した記憶媒体は本発明を構成する。また、そのプログラムのコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム(OS)などが実際の処理の一部または全部を行い、その処理によって前述した機能が実現される場合も含まれる。
さらに、以下の形態で実現しても構わない。すなわち、記憶媒体から読み出されたコンピュータプログラムコードを、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込む。そして、そのコンピュータプログラムのコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行って、前述した機能が実現される場合も含まれる。
本発明を上記記憶媒体に適用する場合、その記憶媒体には、先に説明したフローチャートに対応するコンピュータプログラムのコードが格納されることになる。