(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-12-14
(45)【発行日】2023-12-22
(54)【発明の名称】画像復号装置、画像復号方法
(51)【国際特許分類】
H04N 19/70 20140101AFI20231215BHJP
H04N 19/436 20140101ALI20231215BHJP
【FI】
H04N19/70
H04N19/436
(21)【出願番号】P 2019115750
(22)【出願日】2019-06-21
【審査請求日】2022-06-21
(73)【特許権者】
【識別番号】000001007
【氏名又は名称】キヤノン株式会社
(74)【代理人】
【識別番号】110003281
【氏名又は名称】弁理士法人大塚国際特許事務所
(72)【発明者】
【氏名】大川 浩司
(72)【発明者】
【氏名】志摩 真悟
【審査官】鉢呂 健
(56)【参考文献】
【文献】国際公開第2019/078169(WO,A1)
【文献】特開2014-011638(JP,A)
【文献】BROSS, Benjamin et al.,Versatile Video Coding (Draft 5),Joint Video Experts Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11 14th Meeting: Geneva, CH, 19-27 Mar. 2019, [JVET-N1001-v8],JVET-N1001 (version 8),ITU-T,2019年06月11日,<URL:https://jvet-experts.org/doc_end_user/documents/14_Geneva/wg11/JVET-N1001-v8.zip>: JVET-N1001-v8.docx: pp.18-20,35-37,40-43,81-85,89-97
【文献】WANG, Ye-Kui and Hendry,AHG12: Miscellaneous AHG12 topics,Joint Video Experts Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11 15th Meeting: Gothernburg, SE, 3-12 July 2019, [JVET-O0145-v1],JVET-O0145 (version 1),ITU-T,2019年06月20日,<URL:https://jvet-experts.org/doc_end_user/documents/15_Gothenburg/wg11/JVET-O0145-v1.zip>: JVET-O0145-v1.docx: pp.1-3
【文献】BROSS, Benjamin et al.,Versatile Video Coding (Draft 6),Joint Video Experts Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11 15th Meeting: Gothenburg, SE, 3-12 July 2019, [JVET-O2001-v7],JVET-O2001 (version 7),ITU-T,2019年07月15日,<URL:https://jvet-experts.org/doc_end_user/documents/15_Gothenburg/wg11/JVET-O2001-v7.zip>: JVET-O2001-v7.docx:pp.19-21,37-40,45-49,90-96,108-117
(58)【調査した分野】(Int.Cl.,DB名)
H04N 19/00-19/98
(57)【特許請求の範囲】
【請求項1】
画像を複数のブロックから成るブロック行を1つ以上含む矩形領域に分割して符号化されたビットストリームから
前記画像を復号する画像復号装置であって、
並列処理の有効化に関するentropy_coding_sync_enabled_flagと、前記画像におけるスライスに含まれる複数の矩形領域の内の最初に処理される矩形領域を特定する
ために用いられる第1情報と、前記複数の矩形領域の内の最後に処理される矩形領域を特定する
ために用いられる第2情報と
、前記画像における矩形領域の垂直方向におけるブロックの数に対応する第3情報と、を前記ビットストリームから復号する復号手段と、
前記entropy_coding_sync_enabled_flagの値が第1の値であり、前記ビットストリームのピクチャパラメータセットから復号されたrect_slice_flagがスライスが矩形となるモードが使用されることを示し、且つ、前記画像に含まれる対象のスライスにおいて水平方向又は垂直方向に複数の矩形領域を含む状態において、前記第1情報と前記第2情報と
前記第3情報とに基づいて、前記
対象のスライスに
対し、前記ブロック行の符号データの先頭位置を特定するための情報の数を特定する特定手段と
を備え、
前記復号手段は、前記特定手段によって特定した前記先頭位置を特定するための情報の数と、前記先頭位置を特定するための情報とに少なくとも基づいて、前記ブロック行の符号データを復号する
ことを特徴とする画像復号装置。
【請求項2】
前記復号手段は、
前記矩形領域におけるそれぞれのブロック行を並列に復号
可能であることを特徴とする請求項
1に記載の画像復号装置。
【請求項3】
前記画像は、動画像における各フレームの画像もしくは静止画像であることを特徴とする請求項
1または2に記載の画像復号装置。
【請求項4】
前記複数の矩形領域には前記
画像を分割して得られるそれぞれのタイル内において上から順に番号が付与されていることを特徴とする請求項
1乃至
3の何れか1項に記載の画像復号装置。
【請求項5】
前記矩形領域はブリックであることを特徴とする請求項
1乃至
4の何れか1項に記載の画像復号装置。
【請求項6】
画像を複数のブロックから成るブロック行を1つ以上含む矩形領域に分割して符号化されたビットストリームから
前記画像を復号する画像復号方法であって、
並列処理の有効化に関するentropy_coding_sync_enabled_flagと、前記画像におけるスライスに含まれる複数の矩形領域の内の最初に処理される矩形領域を特定する
ために用いられる第1情報と、前記複数の矩形領域の内の最後に処理される矩形領域を特定する
ために用いられる第2情報と
、前記画像における矩形領域の垂直方向におけるブロックの数に対応する第3情報と、を前記ビットストリームから復号する復号工程と、
前記entropy_coding_sync_enabled_flagの値が第1の値であり、前記ビットストリームのピクチャパラメータセットから復号されたrect_slice_flagがスライスが矩形となるモードが使用されることを示し、且つ、前記画像に含まれる対象のスライスにおいて水平方向又は垂直方向に複数の矩形領域を含む状態において、前記第1情報と前記第2情報と
前記第3情報とに基づいて、前記
対象のスライスに
対し、前記ブロック行の符号データの先頭位置を特定するための情報の数を特定する特定工程と
を備え、
前記復号工程
において、前記特定工程によって特定した前記先頭位置を特定するための情報の数と、前記先頭位置を特定するための情報とに少なくとも基づいて、前記ブロック行の符号データを復号する
ことを特徴とする画像復号方法。
【請求項7】
コンピュータに請求項
6に記載の画像復号方法を実行させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、画像の復号技術に関するものである。
【背景技術】
【0002】
動画像の圧縮記録の符号化方式として、HEVC(High Efficiency Video Coding)符号化方式(以下、HEVCと記す)が知られている。HEVCでは符号化効率向上のため、従来のマクロブロック(16×16画素)より大きなサイズの基本ブロックが採用された。この大きなサイズの基本ブロックはCTU(Coding Tree Unit)と呼ばれ、そのサイズは最大64×64画素である。CTUはさらに予測や変換を行う単位となるサブブロックに分割される。
【0003】
またHEVCでは、ピクチャを複数のタイルまたはスライスに分割して符号化する事が可能である。各タイル間またはスライス間にはデータの依存性が少なく、並列に符号化・復号化処理を実施する事ができる。マルチコアのCPU等で並列に処理を実行し、処理時間を短縮できる事が、タイル、スライス分割の大きな利点の一つとして挙げられる。
【0004】
また、各スライスはHEVCに採用されている従来の2値算術符号化の手法によって符号化される。すなわち、各シンタックス要素が2値化され、2値信号が生成される。各シンタックス要素には、あらかじめ発生確率がテーブル(以下、発生確率テーブル)として与えられ、2値信号は発生確率テーブルに基づいて算術符号化される。この発生確率テーブルは復号時には復号情報として、続く符号の復号に使用される。符号化時には符号化情報として、続く符号化に使用される。そして符号化が行われる毎に、符号化された2値信号が発生確率の高い方のシンボルであったか否か、という統計情報に基づいて発生確率テーブルが更新される。
【0005】
またHEVCには、Wavefront Parallel Processing(以下、WPP)と呼ばれるエントロピー符号化・復号化を並列に処理するための手法がある。WPPでは、あらかじめ指定された位置のブロックを符号化処理した時点での発生確率のテーブルを、次の行の左端のブロックに適用することで、符号化効率の低下を抑制した上で行単位でのブロックの並列符号化処理が可能となる。ブロック行単位での並列処理を可能にする為、スライスヘッダにはビットストリーム中の各ブロック行の先頭位置を示すentry_point_offset_minus1及びその数を示すnum_entry_point_offsetsが符号化される。特許文献1では、WPPに関連する技術が開示されている。
【0006】
近年、HEVCの後継としてさらに高効率な符号化方式の国際標準化を行う活動が開始された。JVET(Joint Video Experts Team)がISO/IECとITU-Tの間で設立され、VVC(Versatile Video Coding)符号化方式(以下、VVC)として標準化が進められている。VVCでは、タイルを更に複数のブロック行から構成される矩形(ブリック)に分割する事が検討されている。そしてスライスは一つ以上のブリックを包含するように構成される。
【先行技術文献】
【特許文献】
【0007】
【発明の概要】
【発明が解決しようとする課題】
【0008】
VVCにおいては、スライスを構成するブリックが予め導出可能であり、更にそのブリックに内包される基本ブロック行の数も他のシンタクスから導出可能である。そのため、該スライスに属する基本ブロック行の先頭位置を示すentry_point_offset_minus1の数を、num_entry_point_offsetを用いずに導出する事が可能である。そのためnum_entry_point_offsetは冗長なシンタクスとなる。本発明では、冗長なシンタクスを減らすことでビットストリームの符号量を減らす技術を提供する。
【課題を解決するための手段】
【0009】
本発明の一様態は、画像を複数のブロックから成るブロック行を1つ以上含む矩形領域に分割して符号化されたビットストリームから前記画像を復号する画像復号装置であって、並列処理の有効化に関するentropy_coding_sync_enabled_flagと、前記画像におけるスライスに含まれる複数の矩形領域の内の最初に処理される矩形領域を特定するために用いられる第1情報と、前記複数の矩形領域の内の最後に処理される矩形領域を特定するために用いられる第2情報と、前記画像における矩形領域の垂直方向におけるブロックの数に対応する第3情報と、を前記ビットストリームから復号する復号手段と、前記entropy_coding_sync_enabled_flagの値が第1の値であり、前記ビットストリームのピクチャパラメータセットから復号されたrect_slice_flagがスライスが矩形となるモードが使用されることを示し、且つ、前記画像に含まれる対象のスライスにおいて水平方向又は垂直方向に複数の矩形領域を含む状態において、前記第1情報と前記第2情報と前記第3情報とに基づいて、前記対象のスライスに対し、前記ブロック行の符号データの先頭位置を特定するための情報の数を特定する特定手段とを備え、前記復号手段は、前記特定手段によって特定した前記先頭位置を特定するための情報の数と、前記先頭位置を特定するための情報とに少なくとも基づいて、前記ブロック行の符号データを復号することを特徴とする。
【発明の効果】
【0010】
本発明の構成によれば、冗長なシンタクスを減らすことでビットストリームの符号量を減らすことができる。
【図面の簡単な説明】
【0011】
【
図1】画像符号化装置の機能構成例を示すブロック図。
【
図2】画像復号装置の機能構成例を示すブロック図。
【
図3】画像符号化装置による入力画像の符号化処理のフローチャート。
【
図4】画像復号装置によるビットストリームの復号処理のフローチャート。
【
図5】コンピュータ装置のハードウェア構成例を示すブロック図。
【
図6】ビットストリームのフォーマットの一例を示す図。
【発明を実施するための形態】
【0012】
以下、添付図面を参照して実施形態を詳しく説明する。尚、以下の実施形態は特許請求の範囲に係る発明を限定するものでない。実施形態には複数の特徴が記載されているが、これらの複数の特徴の全てが発明に必須のものとは限らず、また、複数の特徴は任意に組み合わせられてもよい。さらに、添付図面においては、同一若しくは同様の構成に同一の参照番号を付し、重複した説明は省略する。
【0013】
[第1の実施形態]
先ず、本実施形態に係る画像符号化装置の機能構成例について、
図1のブロック図を用いて説明する。画像分割部102には、符号化対象となる入力画像が入力される。入力画像は動画像を構成する各フレームの画像であっても良いし、静止画像であっても良い。画像分割部102は、入力画像を「一つもしくは複数のタイル」に分割する。タイルは入力画像内の矩形領域を覆う、連続する基本ブロックの集合である。画像分割部102はさらに、それぞれのタイルを一つもしくは複数のブリックに分割する。ブリックは、タイル内の一つもしくは複数の基本ブロックの行(基本ブロック行)で構成される矩形領域(タイル以下の大きさの複数のブロックから成るブロック行を1つ以上含む矩形領域)である。画像分割部102はさらに入力画像を、「一つまたは複数のタイル」あるいは「一つのタイル内の一つ以上のブリック」で構成されるスライスに分割する。スライスは符号化の基本単位であり、スライス毎にスライスの種類を示す情報等のヘッダ情報が付加される。入力画像を4個のタイル、4個のスライス、11個のブリックに分割する例を
図7に示す。左上のタイルは1個のブリック、左下のタイルは2個のブリック、右上のタイルは5個のブリック、右下のタイルは3個のブリックにそれぞれ分割されている。そして左のスライスは3個のブリック、右上のスライスは2個のブリック、右中央のスライスは3個のブリック、右下のスライスは3個のブリックを包含するように構成されている。画像分割部102は、このようにして分割したタイル、ブリック、スライスのそれぞれについて、大きさに関する情報を分割情報として出力する。
【0014】
ブロック分割部103は、画像分割部102から出力された基本ブロック行の画像(基本ブロック行画像)を複数の基本ブロックに分割し、基本ブロック単位の画像(ブロック画像)を後段に出力する。
【0015】
予測部104は、基本ブロック単位の画像をサブブロックに分割し、サブブロック単位でフレーム内予測であるイントラ予測やフレーム間予測であるインター予測などを行い、予測画像を生成する。ブリックを跨いだイントラ予測(他のブリックのブロックの画素を用いたイントラ予測)、ブリックを跨いだ動きベクトルの予測(他のブリックのブロックの動きベクトルを用いた動きベクトルの予測)は行われない。さらに予測部104は、入力された画像と予測画像から予測誤差を算出して出力する。また予測部104は、予測に必要な情報(予測情報)、例えばサブブロック分割方法、予測モードや動きベクトル等の情報も予測誤差と併せて出力する。
【0016】
変換・量子化部105は、予測誤差をサブブロック単位で直交変換して変換係数を求め、該求めた変換係数を量子化して量子化係数を求める。逆量子化・逆変換部106は、変換・量子化部105から出力された量子化係数を逆量子化して変換係数を再生し、さらに該再生した変換係数を逆直交変換して予測誤差を再生する。
【0017】
フレームメモリ108は、再生された画像を格納しておくメモリとして機能する。画像再生部107は、予測部104から出力された予測情報に基づいてフレームメモリ108を適宜参照して予測画像を生成し、該予測画像と入力された予測誤差から再生画像を生成して出力する。
【0018】
インループフィルタ部109は、再生画像に対してデブロッキングフィルタやサンプルアダプティブオフセットなどのインループフィルタ処理を行い、該インループフィルタ処理が施された画像(フィルタ画像)を出力する。
【0019】
符号化部110は、変換・量子化部105から出力された量子化係数および予測部104から出力された予測情報を符号化することで符号データ(符号化データ)を生成し、該生成した符号データを出力する。
【0020】
統合符号化部111は、画像分割部102から出力された分割情報を用いてヘッダ符号データを生成し、該生成したヘッダ符号データと、符号化部110から出力された符号データと、を含むビットストリームを生成して出力する。制御部199は、画像符号化装置全体の動作制御を行うものであり、上記の画像符号化装置の各機能部の動作制御を行う。
【0021】
次に、
図1に示した構成を有する画像符号化装置による入力画像に対する符号化処理について説明する。本実施形態では、説明を容易にするために、イントラ予測符号化の処理のみを説明するが、これに限定されずインター予測符号化の処理においても適用可能である。さらに本実施形態では具体的な説明を行うために、ブロック分割部103は、画像分割部102から出力された基本ブロック行画像を「64×64画素のサイズを有する基本ブロック」を単位に分割するものとして説明する。
【0022】
画像分割部102は入力画像をタイル及びブリックに分割する。画像分割部102による入力画像の分割例を
図8に示す。本実施形態では
図8(a)に示す如く、1152×1152画素のサイズを有する入力画像を9つのタイル(1つのタイルのサイズは384×384画素)に分割する。各タイルには左上からラスタ順にID(タイルID)が付与され、左上のタイルのタイルIDは0、右下のタイルのタイルIDは8である。
【0023】
また、入力画像におけるタイル、ブリック、スライスの分割例を
図8(b)に示す。
図8(b)に示す如く、タイルID=0のタイル及びタイルID=7のタイルは2つのブリック(それぞれのブリックのサイズは384×192画素)に分割される。タイルID=2のタイルは2つのブリック(上側のブリックのサイズは384×128画素、下側のブリックのサイズは384×256画素)に分割される。タイルID=3のタイルは3つのブリック(それぞれのブリックのサイズは384×128画素)に分割される。タイルID=1,4,5,6,8のタイルはブリックに分割しておらず(1つのタイルを1つのブリックに分割することに等価)、その結果、タイル=ブリックとなっている。各ブリックにはラスタ順のタイルの中で上から順にIDが付与される。
図8(b)に示すBIDがブリックのIDである。また入力画像は、BID=0~2に対応するブリックを含むスライス、BID=3に対応するブリックを含むスライス、BID=4に対応するブリックを含むスライス、BID=5~8及び10~12に対応するブリックを含むスライス、BID=9及び13に対応するブリックを含むスライスに分割される。なお、各スライスにも、ラスタ順のスライスの中で上から順にIDが付与されており、例えばスライス0はID=0のスライス、スライス4はID=4のスライスを指すものとする。
【0024】
そして画像分割部102は、分割したタイル、ブリック、スライスのそれぞれについて、大きさに関する情報を分割情報として統合符号化部111に出力する。また画像分割部102は、各ブリックを基本ブロック行画像に分割し、該分割した基本ブロック行画像をブロック分割部103に出力する。
【0025】
ブロック分割部103は、画像分割部102から出力された基本ブロック行画像を複数の基本ブロックに分割し、基本ブロック単位の画像であるブロック画像(64×64画素)を、後段の予測部104に対して出力する。
【0026】
予測部104は、基本ブロック単位の画像をサブブロックに分割し、サブブロック単位で水平予測や垂直予測などのイントラ予測モードを決定し、該決定したイントラ予測モードおよび符号化済の画素から予測画像を生成する。さらに予測部104は、入力された画像と予測画像から予測誤差を算出し、該算出した予測誤差を変換・量子化部105に対して出力する。また予測部104は、サブブロック分割方法やイントラ予測モードなどの情報を予測情報として、符号化部110および画像再生部107に対して出力する。
【0027】
変換・量子化部105は、予測部104から出力された予測誤差をサブブロック単位で直交変換(サブブロックのサイズに対応した直交変換処理)して変換係数(直交変換係数)を求める。そして変換・量子化部105は、該求めた変換係数を量子化して量子化係数を求める。そして変換・量子化部105は、該求めた量子化係数を符号化部110および逆量子化・逆変換部106に対して出力する。
【0028】
逆量子化・逆変換部106は、変換・量子化部105から出力された量子化係数を逆量子化して変換係数を再生し、さらに該再生した変換係数を逆直交変換して予測誤差を再生する。そして逆量子化・逆変換部106は、該再生した予測誤差を画像再生部107に対して出力する。
【0029】
画像再生部107は、予測部104から出力された予測情報に基づいてフレームメモリ108を適宜参照して予測画像を生成し、該予測画像と、逆量子化・逆変換部106から入力された予測誤差と、から再生画像を生成する。そして画像再生部107は、該生成した再生画像をフレームメモリ108に格納する。
【0030】
インループフィルタ部109は、フレームメモリ108から再生画像を読み出し、該読み出した再生画像に対してデブロッキングフィルタやサンプルアダプティブオフセットなどのインループフィルタ処理を行う。そしてインループフィルタ部109は、該インループフィルタ処理が施された画像を再びフレームメモリ108に格納(再格納)する。
【0031】
符号化部110は、変換・量子化部105から出力された量子化係数および予測部104から出力された予測情報をエントロピー符号化することで符号データを生成する。エントロピー符号化の方法は特に指定しないが、ゴロム符号化、算術符号化、ハフマン符号化などを用いることができる。そして符号化部110は、該生成した符号データを統合符号化部111に対して出力する。
【0032】
統合符号化部111は、画像分割部102から出力された分割情報を用いてヘッダ符号データを生成し、該生成したヘッダ符号データと、符号化部110から出力された符号データと、を多重化することでビットストリームを生成して出力する。ビットストリームの出力先は特定の出力先に限るものではなく、画像符号化装置の内部若しくは外部のメモリに出力(格納)しても良いし、LANやインターネットなどのネットワークを介して画像符号化装置と通信可能な外部装置に対して送信しても良い。
【0033】
次に、統合符号化部111が出力するビットストリーム(画像符号化装置が符号化するVVCによる符号データ)のフォーマットの一例を
図6に示す。
図6のビットストリームには、シーケンスの符号化に関わる情報が含まれたヘッダ情報であるシーケンス・パラメータ・セット(SPS)が含まれている。また
図6のビットストリームには、ピクチャの符号化に関わる情報が含まれたヘッダ情報であるピクチャ・パラメータ・セット(PPS)が含まれている。また
図6のビットストリームには、スライスの符号化に関わる情報が含まれたヘッダ情報であるスライスヘッダ(SLH)が含まれている。また
図6のビットストリームには、各ブリック(
図6ではブリック0~ブリック(N-1))の符号データが含まれている。
【0034】
SPSには画像サイズ情報と基本ブロックデータ分割情報とが含まれている。PPSには、タイルの分割情報であるタイルデータ分割情報と、ブリックの分割情報であるブリックデータ分割情報と、スライスの分割情報であるスライスデータ分割情報0と、基本ブロック行データ同期化情報と、が含まれている。SLHには、スライスデータ分割情報1と基本ブロック行データ位置情報とが含まれている。
【0035】
先ず、SPSについて説明する。SPSには画像サイズ情報として情報601であるpic_width_in_luma_samples及び情報602であるpic_height_in_luma_samplesが含まれている。pic_width_in_luma_samplesは入力画像の水平方向のサイズ(画素数)を表しており、pic_height_in_luma_samplesは入力画像の垂直方向のサイズ(画素数)を表している。本実施形態では、入力画像として
図8の入力画像を用いるため、pic_width_in_luma_samples=1152、pic_height_in_luma_samples=1152となる。またSPSには基本ブロックデータ分割情報として情報603であるlog2_ctu_size_minus2が含まれている。log2_ctu_size_minus2は、基本ブロックのサイズを表す。基本ブロックの垂直方向及び水平方向の画素数は1<<(log2_ctu_size_minus2+2)で示される。本実施形態では基本ブロックのサイズは64×64画素であるため、log2_ctu_size_minus2の値は4となる。
【0036】
次に、PPSについて説明する。PPSにはタイルデータ分割情報として情報604~607が含まれている。情報604は、入力画像が複数のタイルに分割されて符号化されているか否かを示すsingle_tile_in_pic_flagである。single_tile_in_pic_flag=1の場合は、入力画像が複数のタイルに分割されて符号化されていないことを示す。一方、single_tile_in_pic_flag=0の場合は、入力画像が複数のタイルに分割されて符号化されていることを示す。
【0037】
情報605は、single_tile_in_pic_flag=0の場合にタイルデータ分割情報に含められる情報である。情報605は、各タイルが同一のサイズを持つか否かを示すuniform_tile_spacing_flagである。uniform_tile_spacing_flag=1の場合は、各タイルが同一のサイズを持つことを示し、uniform_tile_spacing_flag=0の場合は、サイズが同一ではないタイルが存在することを示す。
【0038】
情報606および情報607は、uniform_tile_spacing_flag=1の場合にタイルデータ分割情報に含められる情報である。情報606は、(タイルの水平方向の基本ブロック数-1)を示すtile_cols_width_minus1である。情報607は、(タイルの垂直方向の基本ブロック数-1)を示すtile_rows_height_minus1である。入力画像の水平方向のタイル数は、入力画像の水平方向の基本ブロック数をタイルの水平方向の基本ブロック数で除算した場合の商として得られる。この除算により余りが生じた場合は、商に1を加えた数を「入力画像の水平方向のタイル数」とする。また入力画像の垂直方向のタイル数は、入力画像の垂直方向の基本ブロック数をタイルの垂直方向の基本ブロック数で除算した場合の商として得られる。この除算により余りが生じた場合は、商に1を加えた数を「入力画像の垂直方向のタイル数」とする。また、入力画像内の総タイル数は、入力画像の水平方向のタイル数×入力画像の垂直方向のタイル数を計算することで求めることができる。
【0039】
なお、uniform_tile_spacing_flag=0の場合、他とサイズの異なるタイルが含まれているため、入力画像の水平方向におけるタイルの数、入力画像の垂直方向におけるタイルの数、各タイルの縦横のサイズ、を符号にする。
【0040】
またPPSにはブリックデータ分割情報として情報608~613が含まれている。情報608は、brick_splitting_present_flagである。brick_splitting_present_flag=1の場合は、入力画像内における1つ以上のタイルが複数のブリックに分割されていることを示す。一方、brick_splitting_present_flag=0の場合は、入力画像内におけるそれぞれのタイルが単一のブリックで構成されていることを示す。
【0041】
情報609は、brick_splitting_present_flag=1の場合にブリックデータ分割情報に含められる情報である。情報609は、それぞれのタイルについて、該タイルが複数のブリックに分割されているか否かを示すbrick_split_flag[]である。i番目のタイルが複数のブリックに分割されているかを示すbrick_split_flag[]をbrick_split_flag[i]と表記する。brick_split_flag[i]=1の場合、i番目のタイルが複数のブリックに分割されていることを示し、brick_split_flag[i]=0の場合、i番目のタイルが単一のブリックで構成されていることを示す。
【0042】
情報610は、brick_split_flag[i]=1の場合に、i番目のタイルを構成するそれぞれのブリックのサイズが同一であるか否かを示すuniform_brick_spacing_flag[i]である。全てのiについてbrick_split_flag[i]=0であれば、情報610はブリックデータ分割情報には含まれていない。情報610は、brick_split_flag[i]=1を満たすiについて、uniform_brick_spacing_flag[i]を含む。uniform_brick_spacing_flag[i]=1の場合は、i番目のタイルを構成するそれぞれのブリックのサイズが同一であることを示す。一方、uniform_brick_spacing_flag[i]=0の場合は、i番目のタイルを構成するブリックのうち他とサイズが異なるブリックが存在することを示す。
【0043】
情報611は、uniform_brick_spacing_flag[i]=1の場合にブリックデータ分割情報に含められる情報である。情報611は、(i番目のタイルにおけるブリックの垂直方向の基本ブロック数-1)を示すbrick_height_minus1[i]である。
【0044】
なお、ブリックの垂直方向の基本ブロック数は、該ブリックの垂直方向の画素数を、基本ブロックの垂直方向の画素数(本実施形態では64画素)で除算することで求めることができる。また、タイルを構成するブリック数は、タイルの垂直方向の基本ブロック数をブリックの垂直方向の基本ブロック数で除算した場合の商として得られる。この除算により余りが生じた場合は、商に1を加えた数を「タイルを構成するブリック数」とする。例えばタイルの垂直方向の基本ブロック数が10で、brick_height_minus1の値が2であるとする。このとき、このタイルは上から順に、基本ブロック行数が3のブリック、基本ブロック行数が3のブリック、基本ブロック行数が3のブリック、基本ブロック行数が1のブリック、の4つのブリックに分割されることになる。
【0045】
情報612は、uniform_brick_spacing_flag[i]=0を満たすiについて(i番目のタイルを構成するブリック数-1)を示すnum_brick_rows_minus1[i]である。
【0046】
なお、本実施形態では、uniform_brick_spacing_flag[i]=0の場合は、(i番目のタイルを構成するブリック数-1)を示すnum_brick_rows_minus1[i]をブリックデータ分割情報に含めた。しかし、これに限定されるものではない。
【0047】
例えばbrick_split_flag[i]=1の時点でi番目のタイルを構成するブリックの数が2以上であると想定する。そして、(該タイルを構成するブリックの数-2)を示すnum_brick_rows_minus2[i]をnum_brick_rows_minus1[i]の代わりに符号化しても良い。このようにすることで、該タイルを構成するブリックの数を示すシンタクスのビット数を減らすことができる。例えば、該タイルが2個のブリックにより構成され、num_brick_rows_minus1[i]をゴロム符号化する場合、「1」を示す「010」の3ビットのデータが符号化される。一方で、(該タイルを構成するブリックの数-2)を示すnum_brick_rows_minus2[i]をゴロム符号化する場合、0を示す「0」の1ビットのデータが符号化される。
【0048】
情報613はuniform_brick_spacing_flag[i]=0を満たすiについて(i番目のタイルにおけるj番目のブリックの垂直方向の基本ブロック数-1)を示すbrick_row_height_minus1[i][j]である。brick_row_height_minus1[i][j]はnum_brick_rows_minus1[i]の数だけ符号化される。なお、上述のnum_brick_rows_minus2[i]を用いた場合は、brick_row_height_minus1[i][j]はnum_brick_rows_minus2[i]+1の数だけ符号化される。タイルにおける下端のブリックの垂直方向の基本ブロック数は、該タイルの垂直方向の基本ブロック数から「brick_row_height_minus1+1」の総和を減算することで求めることができる。例えば、タイルの垂直方向の基本ブロック数=10、num_brick_rows_minus1=3、brick_row_height_minus1=2、1、2であるとする。このとき、該タイルにおける下端のブリックの垂直方向の基本ブロック数は10-(3+2+3)=2になる。
【0049】
またPPSにはスライスデータ分割情報0として情報614~618が含まれている。情報614は、single_brick_per_slice_flagである。single_brick_per_slice_flag=1の場合、入力画像内の全てのスライスが単一のブリックで構成されていることを示す。一方、single_brick_per_slice_flag=0の場合、入力画像において1つ以上のスライスが複数のブリックで構成されていることを示す。つまり、それぞれのスライスが1つだけのブリックで構成されることを示す。
【0050】
情報615はrect_slice_flagであり、single_brick_per_slice_flag=0の場合にスライスデータ分割情報0に含められる情報である。rect_slice_flagは、スライスが含むタイルがラスタ順か矩形かを示す。
図9(a)は、rect_slice_flag=0の場合におけるタイルとスライスとの関係を示しており、スライス内のタイルがラスタ順で符号化されることを示している。一方、
図9(b)は、rect_slice_flag=1の場合におけるタイルとスライスとの関係を示しており、スライス内の複数のタイルが矩形状であることを示している。
【0051】
情報616はnum_slices_in_pic_minus1であり、rect_slice_flag=1かつsingle_brick_per_slice_flag=0の場合にスライスデータ分割情報0に含められる情報である。num_slices_in_pic_minus1は、(入力画像におけるスライスの数-1)を示す。
【0052】
情報617は、入力画像におけるそれぞれのスライスについて、該スライス(i番目のスライス)の左上のブリックのインデックスを示すtop_left_brick_idx[i]である。
【0053】
情報618は、入力画像中i番目のスライスにおける左上のブリックのインデックスと右下のブリックのインデックスとの差分を示すbottom_right_brick_idx_delta[i]である。ここで、「入力画像中i番目のスライスにおける左上のブリック」とは、該スライスにおいて最初に処理されるブリックである。また、「入力画像中i番目のスライスにおける右下のブリック」とは、該スライスにおいて最後に処理されるブリックである。
【0054】
ここで、iの範囲は0~num_slices_in_pic_minus1である。ただし、フレーム内の最初のスライスの左上のブリックのインデックスは0と決まっているため、最初のスライスのtop_left_brick_idx[0]は符号化されない。本実施形態では、top_left_brick_idx[i]及びbottom_right_brick_idx_delta[i]のiの範囲を0~num_slices_in_pic_minus1としたが、これに限定されない。例えば、最後のスライス(num_slices_in_pic_minus1番目のスライス)の右下のブリックは、最大のBIDを持つブリックと決まっている。そのため、bottom_right_brick_idx_delta[num_slices_in_pic_minus1]は符号化しなくてもよい。更に、最後のスライス以外のスライスのtop_left_brick_idx[i]及びbottom_right_brick_idx_delta[i]より、最後のスライス以外のスライスが含むブリックは既に特定されている。従って、最後のスライスが含むブリックは、それ以前のスライスに含まれていない全てのブリックと特定することができる。その場合、最後のスライスの左上のブリックは、残されたブリックの中で一番小さいBIDを持つブリックと特定することができる。そのため、top_left_brick_idx[num_slices_in_pic_minus1]も符号化しなくてもよい。そうすることで、ヘッダのビット量をより減らすことができる。
【0055】
またPPSには基本ブロック行データ同期化情報として情報619が符号化されて含まれている。情報619はentropy_coding_sync_enabled_flagである。entropy_coding_sync_enabled_flag=1の場合は、上に隣接する基本ブロック行の所定位置の基本ブロックを処理した時点での発生確率のテーブルを左端のブロックに適用する。これにより、基本ブロック行単位でエントロピー符号化・復号化の並列処理が可能になる。
【0056】
次に、SLHについて説明する。SLHにはスライスデータ分割情報1として情報620~621が符号化されて含まれている。情報620は、rect_slice_flag=1もしくは入力画像中のブリックの数が2以上の場合にスライスデータ分割情報1に含められるslice_addressである。slice_addressは、rect_slice_flag=0の場合はスライスの先頭のBIDを示し、rect_slice_flag=1の場合は、現在のスライスの番号を示す。
【0057】
情報621は、rect_slice_flag=0かつsingle_brick_per_slice_flag=0の場合にスライスデータ分割情報1に含められるnum_bricks_in_slice_minus1である。num_bricks_in_slice_minus1は(スライス中のブリック数-1)を示す。
【0058】
SLHには基本ブロック行データ位置情報として情報622が含まれている。情報622はentry_point_offset_minus1[]である。entry_point_offset_minus1[]は、entropy_coding_sync_enabled_flag=1の場合に、(スライス中の基本ブロック行数-1)の数だけ基本ブロック行データ位置情報に符号化されて含められる。
【0059】
entry_point_offset_minus1[]は、基本ブロック行の符号データのエントリポイント、即ち基本ブロック行の符号データの先頭位置を表す。entry_point_offset_minus1[j-1]はj番目の基本ブロック行の符号データのエントリポイントを示す。0番目の基本ブロック行の符号データの先頭位置は、該基本ブロック行が属するスライスの符号データの先頭位置と同じであるため省略される。そして、{(j-1)番目の基本ブロック行の符号データの大きさ-1}がentry_point_offset_minus1[j-1]として符号化される。
【0060】
次に、本実施形態に画像符号化装置による入力画像の符号化処理(
図6の構成を有するビットストリームの生成処理)について、
図3のフローチャートに従って説明する。
【0061】
まず、ステップS301では、画像分割部102は入力画像をタイル、ブリック、スライスに分割する。そして画像分割部102は、分割したタイル、ブリック、スライスのそれぞれについて、大きさに関する情報を分割情報として統合符号化部111に出力する。また画像分割部102は、各ブリックを基本ブロック行画像に分割し、該分割した基本ブロック行画像をブロック分割部103に出力する。
【0062】
ステップS302では、ブロック分割部103は、基本ブロック行画像を複数の基本ブロックに分割し、基本ブロック単位の画像であるブロック画像を、後段の予測部104に対して出力する。
【0063】
ステップS303では、予測部104は、ブロック分割部103から出力された基本ブロック単位の画像をサブブロックに分割し、サブブロック単位でイントラ予測モードを決定し、該決定したイントラ予測モードおよび符号化済の画素から予測画像を生成する。さらに予測部104は、入力された画像と予測画像から予測誤差を算出し、該算出した予測誤差を変換・量子化部105に対して出力する。また予測部104は、サブブロック分割方法やイントラ予測モードなどの情報を予測情報として、符号化部110および画像再生部107に対して出力する。
【0064】
ステップS304では、変換・量子化部105は、予測部104から出力された予測誤差をサブブロック単位で直交変換して変換係数(直交変換係数)を求める。そして変換・量子化部105は、該求めた変換係数を量子化して量子化係数を求める。そして変換・量子化部105は、該求めた量子化係数を符号化部110および逆量子化・逆変換部106に対して出力する。
【0065】
ステップS305では、逆量子化・逆変換部106は、変換・量子化部105から出力された量子化係数を逆量子化して変換係数を再生し、さらに該再生した変換係数を逆直交変換して予測誤差を再生する。そして逆量子化・逆変換部106は、該再生した予測誤差を画像再生部107に対して出力する。
【0066】
ステップS306では、画像再生部107は、予測部104から出力された予測情報に基づいてフレームメモリ108を適宜参照して予測画像を生成し、該予測画像と、逆量子化・逆変換部106から入力された予測誤差と、から再生画像を生成する。そして画像再生部107は、該生成した再生画像をフレームメモリ108に格納する。
【0067】
ステップS307では、符号化部110は、変換・量子化部105から出力された量子化係数および予測部104から出力された予測情報をエントロピー符号化することで符号データを生成する。
【0068】
ここで、entropy_coding_sync_enabled_flag=1の場合、上に隣接する基本ブロック行の所定の位置の基本ブロックを処理した時点での発生確率テーブルを、次の基本ブロック行の左端の基本ブロックを処理する前に適用する。本実施形態では、entropy_coding_sync_enabled_flag=1であるものとして説明する。
【0069】
ステップS308では、制御部199は、スライス内の全ての基本ブロックの符号化が完了したか否かを判断する。この判断の結果、スライス内の全ての基本ブロックの符号化が完了した場合には、処理はステップS309に進む。一方、スライス内の基本ブロックのうちまだ符号化していない基本ブロック(未符号化の基本ブロック)が残っている場合には、該未符号化の基本ブロックを符号化するべく、処理はステップS303に進む。
【0070】
ステップS309では、統合符号化部111は、画像分割部102から出力された分割情報を用いてヘッダ符号データを生成し、該生成したヘッダ符号データと、符号化部110から出力された符号データと、を含むビットストリームを生成して出力する。
【0071】
入力画像を
図8に示す如く分割した場合、タイルデータ分割情報の、single_tile_in_pic_flagは0、uniform_tile_spacing_flagは1になる。またtile_cols_width_minus1は5、tile_rows_height_minus1は5である。
【0072】
ブリックデータ分割情報のbrick_splitting_present_flagは1である。また、タイルID=1,4,5,6,8に対応するタイルはブリックに分割されていない。然るにbrick_split_flag[1]、brick_split_flag[4]、brick_split_flag[5]、brick_split_flag[6]、brick_split_flag[8]は0である。またタイルID=0,2,3,7に対応するタイルはブリックに分割されている。然るにbrick_split_flag[0]、brick_split_flag[2]、brick_split_flag[3]、brick_split_flag[7]は1である。
【0073】
また、タイルID=0,3,7に対応するタイルは何れも同一サイズのブリックに分割されている。然るにuniform_brick_spacing_flag[0]、uniform_brick_spacing_flag[3]、uniform_brick_spacing_flag[7]は何れも1である。タイルID=2に対応するタイルについては、BID=3のブリックのサイズは、BID=4のブリックのサイズとは異なる。然るに、uniform_brick_spacing_flag[2]は0である。
【0074】
brick_height_minus1[0]は2であり、brick_height_minus1[3]は1である。また、brick_height_minus1[7]は2である。なお、brick_height_minus1はuniform_brick_spacingが1の場合に符号化される。
【0075】
brick_row_height_minus1[2][0]は1である。なお、num_brick_rows_minus1[2]ではなく、代わりに上述のnum_brick_rows_minus2[2]のシンタクスを符号化する場合は、値は0になる。
【0076】
また、本実施形態では、1つのスライスが複数のブリックを含むため、スライスデータ分割情報0におけるsingle_brick_per_slice_flagは0となる。また本実施形態では、スライスが複数のタイルを矩形で内包するため、rect_slice_flagは1である。
図8(b)に示す如く、入力画像におけるスライスの数は5であるため、num_slices_in_pic_minus1は4になる。
【0077】
スライス0のtop_left_brick_idx[0]は0が自明であるため符号化されず、bottom_right_brick_idx_delta[0]は2(=2-0)である。スライス1のtop_left_brick_idx[1]は3であり、bottom_right_brick_idx_delta[1]は0(=3-3)である。スライス2のtop_left_brick_idx[2]は4であり、bottom_right_brick_idx_delta[2]は0(=4-4)である。スライス3のtop_left_brick_idx[3]は5であり、bottom_right_brick_idx_delta[3]は7(=12-5)である。スライス4のtop_left_brick_idx[4]は9であり、bottom_right_brick_idx_delta[4]は4(=13-9)である。なお、上述のように、top_left_brick_idx[4]、bottom_right_brick_idx_delta[4]は符号化しなくてもよい。
【0078】
また、entry_point_offset_minus1[]については、符号化部110より送られた(スライス中の(j-1)番目の基本ブロック行の符号データの大きさ-1)をentry_point_offset_minus1[j-1]として符号化する。スライス中のentry_point_offset_minus1[]の数は、(スライス中の基本ブロック行数-1)と等しい。本実施形態では、bottom_right_brick_idx_delta[0]は2であることからスライス0はBID=0~2のブリックからなることがわかる。
【0079】
ここで、brick_height_minus1[0]は2、tile_rows_height_minus1は5である。これにより、BID=0に対応するブリックの基本ブロック行の数およびBID=1に対応するブリックの基本ブロック行の数は何れも、brick_height_minus1[0]+1=3となる。またBID=2に対応するブリックの基本ブロック行の数はtile_rows_height_minus1+1=6となる。よってスライス0の基本ブロック行数は3+3+6=12である。よってjの範囲は0~10となる。
【0080】
スライス1については、top_left_brick_idx[1]は3、bottom_right_brick_idx_delta[1]は0であることから、BID=3のブリックからなることがわかる。また、brick_row_height_minus1[2][0]が1であることから、スライス1(BID=3のブリック)の基本ブロック行数は2である。よってjの範囲は0のみとなる。
【0081】
スライス2については、top_left_brick_idx[2]が4、bottom_right_brick_idx_delta[2]が0であることから、BID=4のブリックからなることがわかる。また、brick_row_height_minus1[2][0]が1であり、num_brick_rows_minus1[2]が1、tile_rows_height_minus1が5である。これにより、スライス2(BID=4のブリック)の基本ブロック行数は、{(tile_rows_height_minus1+1)-(brick_row_height_minus1[2][0]+1)}=4である。よってjの範囲は0~2となる。
【0082】
スライス3はBID=5~8、10~12のブリックから構成される。tile_rows_height_minus1が5であることから、BID=8及び10のブリックの基本ブロック行数は6(=tile_rows_height_minus1+1)であることがわかる。また、brick_height_minus1[3]が1であることから、BID=5~7のブリックの基本ブロック行数は2(=brick_height_minus1[3]+1)であることがわかる。また、brick_height_minus1[7]が2であることから、BID=11及び12のブリックの基本ブロック行数は3(=brick_height_minus1[7]+1)であることがわかる。よって、スライス3を構成している全てのブリックの基本ブロック行数の合計は、2+2+2+6+6+3+3=24であることがわかる。よってjの範囲は0~22となる。
【0083】
スライス4はBID=9のブリック及びBID=13のブリックから構成される。tile_rows_height_minus1が5であることから、BID=9のブリック及びBID=13のブリックのそれぞれの基本ブロック行数は6(=tile_rows_height_minus1+1)である。よって、スライス4を構成している全てのブリックの基本ブロック行数の合計は、6+6=12であることがわかる。よってjの範囲は0~10になる。
【0084】
このような処理により、各スライスにおける基本ブロック行数が確定する。本実施形態では、他のシンタクスからentry_point_offset_minus1の数を導出することができるので、従来のようにnum_entry_point_offsetを符号化してヘッダに含める必要はない。よって、本実施形態によれば、ビットストリームのデータ量を削減することができる。
【0085】
ステップS310では、制御部199は、入力画像における全ての基本ブロックの符号化が完了したか否かを判断する。この判断の結果、入力画像における全ての基本ブロックの符号化が完了した場合には、処理はステップS311に進む。一方、入力画像において未だ符号化されていない基本ブロックが残っている場合には、処理はステップS303に進み、未だ符号化されていない基本ブロックについて以降の処理を行う。
【0086】
ステップS311では、インループフィルタ部109は、ステップS306で生成された再生画像に対してインループフィルタ処理を行い、該インループフィルタ処理が施された画像を出力する。
【0087】
このように本実施形態によれば、ブリックが有する基本ブロック行の符号データの先頭位置を示す情報がいくつ符号化されているのかを示す情報を符号化してビットストリームに含めなくても良く、該情報が導出可能なビットストリームを生成することができる。
【0088】
[第2の実施形態]
本実施形態では、第1の実施形態に係る画像符号化装置によって生成されたビットストリームを復号する画像復号装置について説明する。なお、ビットストリームの構成など、第1の実施形態と共通する要件については第1の実施形態にて説明したとおりであるため、説明は省略する。
【0089】
本実施形態に係る画像復号装置の機能構成例について、
図2のブロック図を用いて説明する。分離復号部202は、第1の実施形態に係る画像符号化装置によって生成されたビットストリームを取得する。ビットストリームの取得方法は特定の取得方法に限らない。例えば、LANやインターネットなどのネットワークを介して画像符号化装置から直接的もしくは間接的にビットストリームを取得しても良いし、画像復号装置の内部もしくは外部に保存しておいたビットストリームを取得しても良い。そして分離復号部202は、該取得したビットストリームから、復号処理に関する情報や係数に関する符号データを分離し、復号部203へ送る。また分離復号部202は、ビットストリームのヘッダの符号データを復号する。本実施形態では、タイル、ブリック、スライス、基本ブロックの大きさ等の画像の分割に関するヘッダ情報を復号して分割情報を生成し、該生成した分割情報を画像再生部205に出力する。つまり分離復号部202は、
図1の統合符号化部111と逆の動作を行う。
【0090】
復号部203は、分離復号部202から出力された符号データを復号して量子化係数および予測情報を再生する。逆量子化・逆変換部204は、量子化係数に対して逆量子化を行って変換係数を生成し、該生成した変換係数に対して逆直交変換を行うことで予測誤差を再生する。
【0091】
フレームメモリ206は、再生されたピクチャの画像データを格納するためのメモリである。画像再生部205は、入力された予測情報に基づいてフレームメモリ206を適宜参照して予測画像を生成する。そして画像再生部205は、該生成した予測画像と逆量子化・逆変換部204で再生された予測誤差から再生画像を生成する。そして画像再生部205は、再生画像について、分離復号部202から入力された分割情報に基づいてタイル、ブリック、スライスの入力画像中の位置を特定して出力する。
【0092】
インループフィルタ部207は、上記のインループフィルタ部109と同様、再生画像に対してデブロッキングフィルタなどのインループフィルタ処理を行い、インループフィルタ処理が施された画像を出力する。制御部299は、画像復号装置全体の動作制御を行うものであり、上記の画像復号装置の各機能部の動作制御を行う。
【0093】
次に、
図2に示した構成を有する画像復号装置によるビットストリームの復号処理について説明する。以下では、ビットストリームをフレーム単位で画像復号装置に入力するものとして説明するが、1フレーム分の静止画像のビットストリームを画像復号装置に入力するようにしても良い。また、本実施形態では説明を容易にするために、イントラ予測復号処理のみを説明するが、これに限定されずインター予測復号処理においても適用可能である。
【0094】
分離復号部202は、入力されたビットストリームから、復号処理に関する情報や係数に関する符号データを分離し、復号部203へ送る。また分離復号部202は、ビットストリームのヘッダの符号データを復号する。より具体的には分離復号部202は、
図6における基本ブロックデータ分割情報、タイルデータ分割情報、ブリックデータ分割情報、スライスデータ分割情報0、基本ブロック行データ同期化情報、基本ブロック行データ位置情報等を復号して分割情報を生成する。そして分離復号部202は、該生成した分割情報を画像再生部205に出力する。また分離復号部202は、ピクチャデータの基本ブロック単位の符号データを再生し、復号部203に出力する。
【0095】
復号部203は、分離復号部202から出力された符号データを復号して量子化係数および予測情報を再生する。再生された量子化係数は逆量子化・逆変換部204に出力され、再生された予測情報は画像再生部205に出力される。
【0096】
逆量子化・逆変換部204は、入力された量子化係数に対して逆量子化を行って変換係数を生成し、該生成した変換係数に対して逆直交変換を行うことで予測誤差を再生する。再生された予測誤差は画像再生部205に出力される。
【0097】
画像再生部205は、分離復号部202から入力された予測情報に基づいてフレームメモリ206を適宜参照して予測画像を生成する。そして画像再生部205は、該生成した予測画像と逆量子化・逆変換部204で再生された予測誤差から再生画像を生成する。そして画像再生部205は、再生画像について、分離復号部202から入力された分割情報に基づいて、例えば
図7のようなタイル、ブリック、スライスの形状および入力画像中の位置を特定してフレームメモリ206に出力(格納)する。フレームメモリ206に格納された画像は予測の際の参照に用いられる。
【0098】
インループフィルタ部207は、フレームメモリ206から読み出した再生画像に対してデブロッキングフィルタなどのインループフィルタ処理を行い、インループフィルタ処理が施された画像をフレームメモリ206に出力(格納)する。
【0099】
制御部299は、フレームメモリ206に格納された再生画像を出力する。再生画像の出力先は特定の出力先に限らない。例えば制御部299は、画像復号装置が有する表示装置に該再生画像を出力して該表示装置に該再生画像を表示させても良い。また例えば制御部299は、LANやインターネットなどのネットワークを介して再生画像を外部の装置に対して送信しても良い。
【0100】
次に、本実施形態に係る画像復号装置によるビットストリームの復号処理(
図6の構成を有するビットストリームの復号処理)について、
図4のフローチャートに従って説明する。
【0101】
ステップS401では、分離復号部202は、入力されたビットストリームから、復号処理に関する情報や係数に関する符号データを分離し、復号部203へ送る。また分離復号部202は、ビットストリームのヘッダの符号データを復号する。より具体的には、分離復号部202は、
図6における基本ブロックデータ分割情報、タイルデータ分割情報、ブリックデータ分割情報、スライスデータ分割情報、基本ブロック行データ同期化情報、基本ブロック行データ位置情報等を復号して分割情報を生成する。そして分離復号部202は、該生成した分割情報を画像再生部205に出力する。また分離復号部202は、ピクチャデータの基本ブロック単位の符号データを再生し、復号部203に出力する。
【0102】
本実施形態では、ビットストリームの符号化元である入力画像の分割は
図8に示した分割とする。ビットストリームの符号化元である入力画像やその分割に係る情報は分割情報から導出することができる。
【0103】
画像サイズ情報に含まれているpic_width_in_luma_samplesから、入力画像の水平方向のサイズ(横サイズ)が1152画素であることを特定することができる。また、画像サイズ情報に含まれているpic_height_in_luma_samplesから、入力画像の垂直方向のサイズ(縦サイズ)が1152画素であることを特定することができる。
【0104】
また、基本ブロックデータ分割情報のlog2_ctu_size_minus2=4であることから、基本ブロックのサイズを、1<<log2_ctu_size_minus2+2より、64×64画素と導出することができる。
【0105】
また、タイルデータ分割情報のsingle_tile_in_pic_flag=0であることから、入力画像が複数のタイルに分割されていることを特定することができる。そして、uniform_tile_spacing_flag=1であることから、各タイルが(端部を除いて)同一のサイズを有することを特定することができる。
【0106】
また、tile_cols_width_minus1=5、tile_rows_height_minus1=5であることから、各タイルが6×6個の基本ブロックで構成されていることを特定することができる。つまり、各タイルが384×384画素で構成されていることを特定することができる。入力画像が1152×1152画素であることから、該入力画像は水平方向に3つ、垂直方向に3つの9つのタイルに分割されて符号化されていることがわかる。
【0107】
また、ブリックデータ分割情報のbrick_splitting_present_flag=1であることから、入力画像中の少なくとも一つのタイルが複数のブリックに分割されていることを特定することができる。
【0108】
また、brick_split_flag[1]、brick_split_flag[4]、brick_split_flag[5]、brick_split_flag[6]、brick_split_flag[8]は0である。これにより、タイルID=1,4,5,6,8に対応するタイルはブリックに分割されていないことを特定することができる。本実施形態では、すべてのタイルの基本ブロック行数が6であることから、タイルID=1、4、5、6、8に対応するタイルのブリックの基本ブロック行数は6であることがわかる。
【0109】
一方で、brick_split_flag[0]、brick_split_flag[2]、brick_split_flag[3]、brick_split_flag[7]は1である。これにより、タイルID=0,2,3,7に対応するタイルはブリックに分割されていることを特定することができる。また、uniform_brick_spacing_flag[0]、uniform_brick_spacing_flag[3]、uniform_brick_spacing_flag[7]は何れも1である。これにより、タイルID=0,3,7に対応するタイルは何れも同一サイズのブリックに分割されていることを特定することができる。
【0110】
また、brick_height_minus1[0]、brick_height_minus1[7]は何れも2である。然るに、タイルID=0に対応するタイル及びタイルID=7に対応するタイルは何れも、タイル内のブリックの垂直方向の基本ブロック数が3であることを特定することができる。また、タイルID=0に対応するタイル及びタイルID=7に対応するタイルは何れも、該タイル内のブリック数が2(=タイルの基本ブロック行数(6)/タイル内のブリックの垂直方向の基本ブロック数(3))であることを特定することができる。
【0111】
また、brick_height_minus1[3]は1である。然るに、タイルID=3に対応するタイル内のブリックの垂直方向の基本ブロック数が2であることを特定することができる。また、タイルID=3に対応するタイル内のブリック数が3(=タイルの基本ブロック行数(6)/タイル内のブリックの垂直方向の基本ブロック数(2))であることを特定することができる。
【0112】
タイルID=2に対応するタイルについては、num_brick_rows_minus1[2]=1であることから、該タイルは2つのブリックで構成されていることを特定することができる。また、uniform_brick_spacing_flag[2]=0である。これにより、タイルID=2に対応するタイルは、他とサイズが異なるブリックが存在することを特定することができる。そして、brick_row_height_minus1[2][0]=1、brick_row_height_minus1[2][1]=3、全てのタイルの垂直方向の基本ブロック数は6である。これにより、タイルID=2に対応するタイルは上から順に、垂直方向の基本ブロック数が2のブリック、垂直方向の基本ブロック数が4のブリック、で構成されていることを特定することができる。なお、brick_row_height_minus1[2][1]=3は符号化しないようにしてもよい。タイルにおけるブリックの数が2つの場合、タイルの高さと、タイル内の1つ目のブリックの高さ(brick_row_height_minus1[2][0]=1)とから2つ目のブリックの高さを求めることが可能であるためである。
【0113】
また、スライスデータ分割情報0におけるsingle_brick_per_slice_flag=0であることから、少なくとも1つのスライスが複数のブリックで構成されていることを特定することができる。本実施形態では、uniform_brick_spacing_flag[i]=0の場合は、(i番目のタイルを構成するブリック数-1)を示すnum_brick_rows_minus1[i]をブリックデータ分割情報に含めた。しかし、これに限定されるものではない。
【0114】
例えばbrick_split_flag[i]=1の時点でi番目のタイルを構成するブリックの数が2以上であると想定する。そして、(該タイルを構成するブリックの数-2)を示すnum_brick_rows_minus2[i]をnum_brick_rows_minus1[i]の代わりに復号しても良い。このようにすることで、該タイルを構成するブリックの数を示すシンタクスのビット数を減らしたビットストリームを復号することができる。
【0115】
次に、各ブリックの左上及び右下の境界の座標を求める。座標は入力画像の左上を原点とし、基本ブロックの水平位置と垂直位置で示される。例えば、左から3番目、上から2番目の基本ブロックの左上の境界の座標は(3,2)、右下の境界の座標は(4,3)になる。
【0116】
タイルID=0に対応するタイル内のBID=0のブリックの左上の境界の座標は(0,0)である。BID=0のブリックの基本ブロック行数は3で、全てのタイルの水平方向の基本ブロック数は6であるから、右下の境界の座標は(3,3)になる。
【0117】
タイルID=0に対応するタイル内のBID=1のブリックの左上の境界の座標は(0,3)である。BID=1のブリックの基本ブロック行数は3で、全てのタイルの水平方向の基本ブロック数は6であるから、右下の境界の座標は(6,6)になる。
【0118】
タイルID=1に対応するタイル(BID=2のブリック)の左上の境界の座標は(6,0)である。BID=2のブリックの基本ブロック行数は6で、全てのタイルの水平方向の基本ブロック数は6であるから、右下の境界の座標は(12,6)になる。
【0119】
タイルID=2に対応するタイル内のBID=3のブリックの左上の境界の座標は(12,0)である。BID=3のブリックの基本ブロック行数は2であるから、右下の境界の座標は(18,2)になる。
【0120】
タイルID=2に対応するタイル内のBID=4のブリックの左上の境界の座標は(12,2)である。BID=4のブリックの基本ブロック行数は4であるから、右下の境界の座標は(18,6)になる。
【0121】
タイルID=3に対応するタイル内のBID=5のブリックの左上の境界の座標は(0,6)である。BID=5のブリックの基本ブロック行数は2であるから、右下の境界の座標は(6,8)になる。
【0122】
タイルID=3に対応するタイル内のBID=6のブリックの左上の境界の座標は(0,8)である。BID=6のブリックの基本ブロック行数は2であるから、右下の境界の座標は(6,10)になる。
【0123】
タイルID=3に対応するタイル内のBID=7のブリックの左上の境界の座標は(0,10)である。BID=7のブリックの基本ブロック行数は2であるから、右下の境界の座標は(6,12)になる。
【0124】
タイルID=4に対応するタイル(BID=8のブリック)の左上の境界の座標は(6,6)である。BID=8のブリックの基本ブロック行数は6で、全てのタイルの水平方向の基本ブロック数は6であるから、右下の境界の座標は(12,12)になる。
【0125】
タイルID=5に対応するタイル(BID=9のブリック)の左上の境界の座標は(12,6)である。BID=9のブリックの基本ブロック行数は6で、全てのタイルの水平方向の基本ブロック数は6であるから、右下の境界の座標は(18,12)になる。
【0126】
タイルID=6に対応するタイル(BID=10のブリック)の左上の境界の座標は(0,12)である。BID=10のブリックの基本ブロック行数は6で、全てのタイルの水平方向の基本ブロック数は6であるから、右下の境界の座標は(6,18)になる。
【0127】
タイルID=7に対応するタイル内のBID=11のブリックの左上の境界の座標は(6,12)である。BID=11のブリックの基本ブロック行数は3で、全てのタイルの水平方向の基本ブロック数は6であるから、右下の境界の座標は(12,15)になる。
【0128】
タイルID=7に対応するタイル内のBID=12のブリックの左上の境界の座標は(6,15)である。BID=12のブリックの基本ブロック行数は3で、全てのタイルの水平方向の基本ブロック数は6であるから、右下の境界の座標は(12,18)になる。
【0129】
タイルID=8に対応するタイル(BID=13のブリック)の左上の境界の座標は(12,12)である。BID=13のブリックの基本ブロック行数は6で、全てのタイルの水平方向の基本ブロック数は6であるから、右下の境界の座標は(18,18)になる。
【0130】
次に、各スライスに含まれるブリックを特定する。num_slices_in_pic_minus1=4であるため、入力画像におけるスライスの数が5であることを特定することができる。また、処理対象のスライスのslice_addressから対応するブリックが特定可能である。すなわち、slice_addressがNの場合は処理対象のスライスがスライスNであることがわかる。
【0131】
スライス0の場合、bottom_right_brick_idx_delta[0]が2である。これにより、スライス0に含まれるブリックは、BID=0のブリックの左上の境界の座標とBID=2のブリックの右下の境界の座標に囲まれた長方形の領域に含まれるブリックであることを特定することができる。BID=0のブリックの左上の境界の座標は(0,0)、BID=2のブリックの右下の境界は(12,6)であるため、スライス0に含まれるブリックはBID=0~2のブリックであることを特定することができる。
【0132】
スライス1の場合、top_left_brick_idx[1]が3、bottom_right_brick_idx_delta[1]が0であるため、スライス1に含まれるブリックはBID=3のブリックであることを特定することができる。
【0133】
スライス2の場合、top_left_brick_idx[2]が4、bottom_right_brick_idx_delta[2]が0であるため、スライス2に含まれるブリックはBID=4のブリックであることを特定することができる。
【0134】
スライス3の場合、top_left_brick_idx[3]が5、bottom_right_brick_idx_delta[3]が7である。BID=5のブリックの左上の境界の座標が(0,6)、BID=12のブリックの右下の境界の座標が(12,18)であることから、左上座標を(0,6)、右下座標を(12,18)とする領域に含まれるブリックがスライス3に含まれるものと特定できる。その結果、BID=5~8および10~12に対応するブリックがスライス3に含まれるブリックであることを特定することができる。BID=9に対応するブリックの右下の境界の座標は(18,12)、BID=13に対応するブリックの右下の境界の座標は(18,18)であり、何れもスライス3の範囲から外れているため、スライス3に属さないと判断される。
【0135】
スライス4の場合、top_left_brick_idx[4]が9、bottom_right_brick_idx_delta[4]が4である。BID=9のブリックの左上の境界の座標が(12,6)、BID=13のブリックの右下の境界の座標が(18,18)であるので、左上座標を(12,6)、右下座標を(18,18)とする領域に含まれるブリックがスライス4に含まれるものと特定できる。その結果、BID=9および13に対応するブリックがスライス4に含まれるブリックであることを特定することができる。ここで、BID=10に対応するブリックの左上の境界の座標は(0,12)、BID=11に対応するブリックの左上の境界の座標は(6,12)、BID=12に対応するブリックの左上の境界の座標は(6,15)、である。よって何れもスライス4の範囲から外れているため、スライス4に属さないと判断される。
【0136】
本実施形態では、入力画像の最後のスライスであるスライス4に含まれるブリックをtop_left_brick_idx[4]、bottom_right_brick_idx_delta[4]から特定したが、これに限定されない。スライス0~3に含まれるブリックがそれぞれBID=0~2、BID=3、BID=4、BID=5~8及び10~12のブリックであることが既に導出済であり、入力画像がBID=0~13の14個のブリックで構成されていることは導出済である。そのため、最後のスライスに含まれるブリックは、残された、BID=9及び13のブリックであることは特定可能である。従って、top_left_brick_idx[4]及びbottom_right_brick_idx_delta[4]が符号化されていなくても、最後のスライスに含まれるブリックを特定可能である。このようにして、ヘッダ部分のビット量を削減したビットストリームを復号することができる。
【0137】
また、基本ブロック行データ同期化情報におけるentropy_coding_sync_enabled_flag=1である。これにより、(スライス中の(j-1)番目の基本ブロック行の符号データの大きさ-1)を示すentry_point_offset_minus1[j-1]がビットストリーム中に符号化されていることがわかる。その個数は、処理するスライスの基本ブロック行数-1である。
【0138】
本実施形態では上記の通り、各スライスに属するブリックが特定可能であるため、スライスに属するブリックの基本ブロック行数の合計値から1を引いた数だけentry_point_offset_minus1[j]が符号化されている。
【0139】
スライス0の場合、BID=0に対応するブリックの基本ブロック行の数(3)+BID=1に対応するブリックの基本ブロック行の数(3)+BID=2に対応するブリックの基本ブロック行の数(6)の合計値(3+3+6=12)-1=11となる。よって、スライス0については、11のentry_point_offset_minus1[]が符号化されている。この場合、jの範囲は0~10となる。
【0140】
スライス1の場合、BID=3に対応するブリックの基本ブロック行の数(2)-1=1となる。よって、スライス1については、1のentry_point_offset_minus1[]が符号化されている。この場合、jの範囲は0のみとなる。
【0141】
スライス2の場合、BID=4に対応するブリックの基本ブロック行の数(4)-1=3となる。よって、スライス3については、3のentry_point_offset_minus1[]が符号化されている。この場合、jの範囲は0~2となる。
【0142】
スライス3の場合、BID=5~8及び10~12のそれぞれに対応するブリックの基本ブロック行の数の合計値(2+2+2+6+6+3+3=24)-1=23となる。よって、スライス3については、23のentry_point_offset_minus1[]が符号化されている。この場合、jの範囲は0~22となる。
【0143】
スライス4の場合、BID=9に対応するブリックの基本ブロック行の数(6)+BID=13に対応するブリックの基本ブロック行の数(6)の合計値(6+6=12)-1=11となる。よって、スライス4については、11のentry_point_offset_minus1[]が符号化されている。この場合、jの範囲は0~10となる。
【0144】
以上により、従来のようにnum_entry_point_offsetを符号化せずとも、他のシンタクスからentry_point_offset_minus1の数を導出できる。そして各基本ブロック行のデータの先頭位置がわかるため、基本ブロック行毎に並列して復号処理を行うことができる。分離復号部202より導出された分割情報は画像再生部205に送られ、ステップS404で入力画像内における処理対象の位置の特定に用いられる。
【0145】
ステップS402では、復号部203は、分離復号部202で分離された符号データを復号して量子化係数および予測情報を再生する。ステップS403では、逆量子化・逆変換部204は、入力された量子化係数に対して逆量子化を行って変換係数を生成し、該生成した変換係数に対して逆直交変換を行うことで予測誤差を再生する。
【0146】
ステップS404では、画像再生部205は、復号部203から入力された予測情報に基づいてフレームメモリ206を適宜参照して予測画像を生成する。そして画像再生部205は、該生成した予測画像と逆量子化・逆変換部204で再生された予測誤差から再生画像を生成する。そして画像再生部205は、再生画像について、分離復号部202から入力された分割情報に基づいて、タイル、ブリック、スライスの入力画像中の位置を特定してその位置に合成し、フレームメモリ206に出力(格納)する。
【0147】
ステップS405では、制御部299は、入力画像の全ての基本ブロックを復号したか否かを判断する。この判断の結果、入力画像の全ての基本ブロックを復号した場合には、処理はステップS406に進む。一方、入力画像において未だ復号していない基本ブロックが残っている場合には、処理はステップS402に進み、未だ復号していない基本ブロックについて復号処理を行う。
【0148】
ステップS406では、インループフィルタ部207は、フレームメモリ206から読み出した再生画像に対してインループフィルタ処理を行い、インループフィルタ処理が施された画像をフレームメモリ206に出力(格納)する。
【0149】
このように本実施形態によれば、第1の実施形態に係る画像符号化装置によって生成された「ブリックが有する基本ブロック行の先頭位置を示す情報がいくつ符号化されているのかを示す情報を含まないビットストリーム」から入力画像を復号することができる。
【0150】
なお、第1の実施形態に係る画像符号化装置と第2の実施形態に係る画像復号装置とは別個の装置であっても良い。また、第1の実施形態に係る画像符号化装置と第2の実施形態に係る画像復号装置とを1つの装置に統合しても良い。
【0151】
[第3の実施形態]
図1や
図2に示した各機能部はハードウェアで実装しても良いが、一部をソフトウェアで実装しても良い。後者の場合、フレームメモリ108やフレームメモリ206を除く各機能部をソフトウェア(コンピュータプログラム)で実装しても良い。このようなコンピュータプログラムを実行可能なコンピュータ装置は、上記の画像符号化装置や画像復号装置に適用可能である。
【0152】
上記の画像符号化装置や画像復号装置に適用可能なコンピュータ装置のハードウェア構成例について、
図5のブロック図を用いて説明する。なお、
図5に示したハードウェア構成は、上記の画像符号化装置や画像復号装置に適用可能なコンピュータ装置のハードウェア構成の一例に過ぎず、適宜変更/変形が可能である。
【0153】
CPU501はRAM502やROM503に格納されているコンピュータプログラムやデータを用いて各種の処理を実行する。これによりCPU501はコンピュータ装置全体の動作制御を行うと共に、上記の画像符号化装置や画像復号装置が行うものとして説明した各処理を実行若しくは制御する。すなわちCPU501は、
図1や
図2に示した各機能部(フレームメモリ108やフレームメモリ206を除く)として機能することができる。
【0154】
RAM502は、ROM503や外部記憶装置506からロードされたコンピュータプログラムやデータを格納するためのエリア、I/F507を介して外部から受信したデータを格納するためのエリアを有する。またRAM502は、CPU501が各種の処理を実行する際に用いるワークエリアを有する。このようにRAM502は、各種のエリアを適宜提供することができる。ROM503には、コンピュータ装置の設定データや起動プログラムなどが格納されている。
【0155】
操作部504は、キーボード、マウス、タッチパネル画面などのユーザインターフェースであり、ユーザが操作することで各種の指示をCPU501に対して入力することができる。
【0156】
表示部505は、液晶画面やタッチパネル画面などにより構成されており、CPU501による処理結果を画像や文字などでもって表示することができる。なお、表示部505は、画像や文字を投影するプロジェクタなどの装置であっても良い。
【0157】
外部記憶装置506は、ハードディスクドライブ装置などの大容量情報記憶装置である。外部記憶装置506には、OS(オペレーティングシステム)や、上記の画像符号化装置や画像復号装置が行うものとして上述した各処理をCPU501に実行若しくは制御させるためのコンピュータプログラムやデータが保存されている。
【0158】
外部記憶装置506に保存されているコンピュータプログラムには、
図1や
図2においてフレームメモリ108やフレームメモリ206を除く各機能部の機能をCPU501に実行若しくは制御させるためのコンピュータプログラムが含まれている。また、外部記憶装置506に保存されているデータには、上記の説明において既知の情報として説明したものや、符号化や復号に関連する様々な情報が含まれている。
【0159】
外部記憶装置506に保存されているコンピュータプログラムやデータは、CPU501による制御に従って適宜RAM502にロードされ、CPU501による処理対象となる。
【0160】
図1の画像符号化装置が有するフレームメモリ108や
図2の画像符号化装置が有するフレームメモリ206は、上記のRAM502や外部記憶装置506などのメモリ装置を用いて実装可能である。
【0161】
I/F507は、外部の装置との間のデータ通信を行うためのインターフェースである。例えば、コンピュータ装置を画像符号化装置に適用した場合、画像符号化装置は生成したビットストリームをI/F507を介して外部に出力することができる。また、コンピュータ装置を画像復号装置に適用した場合、画像復号装置はビットストリームをI/F507を介して受信することができる。また画像復号装置は、ビットストリームを復号した結果をI/F507を介して外部に送信することができる。CPU501、RAM502、ROM503、操作部504、表示部505、外部記憶装置506、I/F507は何れもバス508に接続されている。
【0162】
なお、上記の説明において使用した具体的な数値は、具体的な説明を行うために使用したものであって、上記の各実施形態がこれらの数値に限定されることを意図したものではない。また、以上説明した各実施形態の一部若しくは全部を適宜組み合わせても構わない。また、以上説明した各実施形態の一部若しくは全部を選択的に用いても構わない。
【0163】
(その他の実施形態)
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
【0164】
発明は上記実施形態に制限されるものではなく、発明の精神及び範囲から離脱することなく、様々な変更及び変形が可能である。従って、発明の範囲を公にするために請求項を添付する。
【符号の説明】
【0165】
102:画像分割部 103:ブロック分割部 104:予測部 105:変換・量子化部 106:逆量子化・逆変換部 107:画像再生部 108:フレームメモリ 109:インループフィルタ部 110:符号化部 111:統合符号化部