JP2022188825A - 画像復号装置及び画像符号化装置 - Google Patents

画像復号装置及び画像符号化装置 Download PDF

Info

Publication number
JP2022188825A
JP2022188825A JP2021097050A JP2021097050A JP2022188825A JP 2022188825 A JP2022188825 A JP 2022188825A JP 2021097050 A JP2021097050 A JP 2021097050A JP 2021097050 A JP2021097050 A JP 2021097050A JP 2022188825 A JP2022188825 A JP 2022188825A
Authority
JP
Japan
Prior art keywords
transform
range
flag
transform coefficients
unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2021097050A
Other languages
English (en)
Inventor
知宏 猪飼
Tomohiro Igai
天洋 周
Tianyang Zhou
友子 青野
Tomoko Aono
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sharp Corp
Original Assignee
Sharp Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sharp Corp filed Critical Sharp Corp
Priority to JP2021097050A priority Critical patent/JP2022188825A/ja
Publication of JP2022188825A publication Critical patent/JP2022188825A/ja
Pending legal-status Critical Current

Links

Images

Abstract

Figure 2022188825000001
【課題】複雑度を低減しつつ変換係数のレンジを拡張する画像復号装置及び画像符号化装置を提供する。
【解決手段】
変換係数のレンジを拡張するかを示すフラグと変換の最大サイズを示すシンタックス要素を復号し、変換の最大サイズを導出するヘッダ復号部と、変換係数のレンジを拡張する場合、ビットデプスに応じた変換係数のレンジを導出し、上記変換係数のレンジに応じて導出される第1シフト値を用いて変換係数に量子化パラメータに依存する値をかけた値を右シフトするスケーリング部とを備え、上記ヘッダ復号部は、変換係数のレンジを拡張するかを示すフラグが有効である場合、変換の最大サイズを所定の値以下に制限することを特徴とする。
【選択図】図23

Description

本発明の実施形態は、画像復号装置及び画像符号化装置に関する。
画像を効率的に伝送又は記録するために、画像を符号化することによって符号化データを生成する画像符号化装置、及び、当該符号化データを復号することによって復号画像を生成する画像復号装置が用いられている。
具体的な画像符号化方式としては、例えば、H.264/AVCやHEVC(High-Efficiency Video
Coding)方式等が挙げられる。
このような画像符号化方式においては、動画像を構成する画像(ピクチャ)は、画像を分割することにより得られるスライス、スライスを分割することにより得られる符号化ツリーユニット(CTU:Coding Tree Unit)、符号化ツリーユニットを分割することで得ら
れる符号化単位(符号化ユニット(Coding Unit:CU)と呼ばれることもある)、及び、
符号化単位を分割することより得られる変換ユニット(TU:Transform Unit)からなる階層構造により管理され、CU毎に符号化/復号される。
また、このような画像符号化方式においては、通常、入力画像を符号化/復号することによって得られる局所復号画像に基づいて予測画像が生成され、当該予測画像を入力画像(原画像)から減算して得られる予測誤差(「差分画像」又は「残差画像」と呼ぶこともある)が符号化される。予測画像の生成方法としては、画面間予測(インター予測)、及び、画面内予測(イントラ予測)が挙げられる。
また、近年の画像符号化及び復号技術として非特許文献1(VVC)が挙げられる。非特
許文献1には、extended_precision_processing_flagフラグに応じて、変換係数のレンジとシフト値をビットデプスに応じて増加させることにより精度を向上させる技術が開示されている。
非特許文献2には、量子化パラメータが小さい場合に変換サイズを32x32までに制限す
ることが開示されている。非特許文献3には、変換係数のシフト値を、残差の大きさによって変更することが知られている。
VVC operation range extensions (Draft 3), JVET-V2005-v1, Joint Video Experts Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29 AHG8: A constraint of max transform size for high bit depth and high bit rate coding, JVET-0067-v1, Joint Video Experts Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29 AHG8: Content Adaptive Transform Precision for High Bit Depth Coding, JVET-0131-v1, Joint Video Experts Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29
非特許文献1の変換係数のレンジを拡張する技術では、変換の積に必要なビット数が16
ビットを超えるために、ソフトウェアではSIMD処理の並列度低下、ハードウェアでは回路規模の増大という課題がある。非特許文献2では、64x64変換を量子化パラメータに応じ
て禁止することにより、量子化パラメータが小さい場合の変換の回路規模を小さくすることができる。しかしながら、量子化パラメータが大きい場合、回路規模低減の効果が得られないという課題がある。非特許文献3では、変換係数のシフト値を、変換係数の値域によって可変的に設定することにより、変換係数のレンジを増やすことなく精度を高めることができる。しかしながら、変換係数の値域の分析のために複雑度やレイテンシが増加する課題がある。さらに変換係数のレンジを拡張する技術を非分離変換に用いると、さらに複雑度が増加するという課題がある。
上記課題を解決するために、本発明の一態様に係る画像復号装置は、
変換係数のレンジを拡張するかを示すフラグと、変換の最大サイズを示すシンタックス要素を復号し、変換の最大サイズを導出するヘッダ復号部と、
変換係数のレンジを拡張する場合に、ビットデプスに応じた変換係数のレンジを導出し、上記変換係数のレンジに応じて導出される第1シフト値を用いて、変換係数に量子化パラメータに依存する値をかけた値を右シフトするスケーリング部と、
上記ヘッダ復号部は、変換係数のレンジを拡張するかを示すフラグが有効である場合に、変換の最大サイズを所定の値以下に制限することを特徴とする。
上記ヘッダ復号部は、変換の最大サイズを示すシンタックス要素が最大サイズを示す場合には、変換係数のレンジを拡張するかを示すフラグを復号せずに、無効と導出し、それ以外の場合に、変換係数のレンジを拡張するかを示すフラグを復号することを特徴とする。
上記ヘッダ復号部は、変換係数のレンジを拡張するかを示すフラグが有効である場合に、変換の最大サイズを所定の値以下に制限する符号化データを復号することを特徴とする。
変換係数のレンジを拡張するかを示すフラグと、非分離変換を行うか否かを示すシンタックス要素をするヘッダ復号部と、
変換係数のレンジを拡張する場合に、ビットデプスに応じた変換係数のレンジを導出し、上記変換係数のレンジに応じて導出される第1シフト値を用いて、変換係数に量子化パラメータに依存する値をかけた値を右シフトするスケーリング部と、
上記ヘッダ復号部は、変換係数のレンジを拡張するかを示すフラグが有効である場合に、非分離変換を行わないことを特徴とする。
上記ヘッダ復号部は、非分離変換を行うことを示すシンタックス要素が有効を示す場合には、変換係数のレンジを拡張するかを示すフラグを復号せずに、無効と導出し、それ以外の場合に、変換係数のレンジを拡張するかを示すフラグを復号することを特徴とする。
上記ヘッダ復号部は、非分離変換を行うことを示すフラグが有効である場合に、変換係数のレンジを拡張しないように制限する符号化データを復号することを特徴とする。
変換係数のレンジを拡張するかを示すフラグと、変換の最大サイズを示すシンタックス要素を復号し、変換の最大サイズを導出するヘッダ復号部と、
ライスパラメータを所定の範囲以上に拡張する場合ことが可能な残差復号部を備え、
上記ヘッダ復号部は、変換係数のレンジを拡張するかを示すフラグが有効である場合、ライスパラメータを拡張しないように制限することを特徴とする。
上記ヘッダ復号部は、ライスパラメータを拡張するかを示すフラグが有効である場合、変換の最大サイズを所定の値以下に制限する符号化データを復号することを特徴とする。
変換係数のレンジを拡張するかを示すフラグと、変換の最大サイズを示すシンタックス要素を復号し、変換の最大サイズを導出するヘッダ符号化部と、
変換係数のレンジを拡張する場合に、ビットデプスに応じた変換係数のレンジを導出し、上記変換係数のレンジに応じて導出される第1シフト値を用いて、変換係数に量子化パラメータに依存する値をかけた値を右シフトするスケーリング部と、
上記ヘッダ復号部は、変換係数のレンジを拡張するかを示すフラグが有効である場合に、変換の最大サイズを所定の値以下に制限することを特徴とする。
変換係数のレンジを拡張するかを示すフラグと、非分離変換を行うか否かを示すシンタックス要素をするヘッダ符号化部と、
変換係数のレンジを拡張する場合に、ビットデプスに応じた変換係数のレンジを導出し、上記変換係数のレンジに応じて導出される第1シフト値を用いて、変換係数に量子化パラメータに依存する値をかけた値を右シフトするスケーリング部と、
上記ヘッダ復号部は、変換係数のレンジを拡張するかを示すフラグが有効である場合に、非分離変換を行わないことを特徴とする。
以上の構成によれば、上記問題の何れかの解決を図ることができる。
本実施形態に係る画像伝送システムの構成を示す概略図である。 本実施形態に係る動画像符号化装置を搭載した送信装置、及び、動画像復号装置を搭載した受信装置の構成について示した図である。PROD_Aは動画像符号化装置を搭載した送信装置を示しており、PROD_Bは動画像復号装置を搭載した受信装置を示している。 本実施形態に係る動画像符号化装置を搭載した記録装置、及び、動画像復号装置を搭載した再生装置の構成について示した図である。PROD_Cは動画像符号化装置を搭載した記録装置を示しており、PROD_Dは動画像復号装置を搭載した再生装置を示している。 符号化ストリームのデータの階層構造を示す図である。 CTUの分割例を示す図である。 動画像復号装置の構成を示す概略図である。 動画像復号装置の概略的動作を説明するフローチャートである。 TU復号部の構成を示す概略図である。 量子化変換係数に関するシンタックス要素を示す図である。 量子化変換係数に関するシンタックス要素を示す図である。 RRCに関するシンタックス表である。 RRCに関するシンタックス表である。 RRCに関するシンタックス表である。 TSRCに関するシンタックス表である。 TSRCに関するシンタックス表である。 動画像符号化装置の構成を示すブロック図である。 ライスパラメータ導出に関する図である。 残差の復号、逆量子化、逆変換の処理を示す図である。 TR符号とEG(k)符号を用いた残差のバイナリゼーションのビット長を説明する図である。 本実施形態における、extended_precision_processing_flagに応じて変換サイズを制限する処理を示すフローチャートである 本実施形態における、extended_precision_processing_flagに応じて変換サイズを制限する処理を示すフローチャートである。 本実施形態におけるTU復号部3024の復号処理を示すシンタックステーブルである。 本実施形態における、extended_precision_processing_flagと変換ブロックのサイズnTbW、nTbHに応じて変換係数レンジを拡張する処理を示すフローチャートである。 本実施形態における、extended_precision_processing_flagと変換ブロックのサイズnTbW、nTbHに応じて変換係数レンジを拡張するか、変換係数に応じてシフト値を可変にするかを切り替える処理を示すフローチャートである。 本実施形態における、extended_precision_processing_flagと変換ブロックのサイズnTbW、nTbHに応じて変換係数レンジを拡張するか、変換係数に応じてシフト値を可変にするかを切り替える処理を示すフローチャートである。 本発明の実施形態のTU復号部3024、逆量子化・逆変換部311の構成を示すブロック図である。 本発明のレンジ拡張と大変換、LFNST排他を説明するシンタックステーブルである。 本発明のライス拡張と大変換、LFNST排他を説明するシンタックステーブルである。 逆量子化・逆変換部の構成例を示す機能ブロック図である。
〔実施形態1〕
以下、図面を参照しながら本発明の実施形態について説明する。
図1は、本実施形態に係る画像伝送システム1の構成を示す概略図である。
画像伝送システム1は、符号化対象画像を符号化した符号化ストリームを伝送し、伝送された符号化ストリームを復号し画像を表示するシステムである。画像伝送システム1は、動画像符号化装置(画像符号化装置)11、ネットワーク21、動画像復号装置(画像復号装置)31、及び画像表示装置(画像表示装置)41を含んで構成される。
動画像符号化装置11には画像Tが入力される。
ネットワーク21は、動画像符号化装置11が生成した符号化ストリームTeを動画像復号装置31に伝送する。ネットワーク21は、インターネット(Internet)、広域ネットワーク(WAN:Wide Area Network)、小規模ネットワーク(LAN:Local Area Network)又はこれらの組み合わせである。ネットワーク21は、必ずしも双方向の通信網に限らず、地上デジタル放送、衛星放送等の放送波を伝送する一方向の通信網であってもよい。また、ネットワーク21は、DVD(Digital Versatile Disc:登録商標)、BD(Blue-ray Disc:登録商標)等の符号化ストリームTeを記録した記憶媒体で代替されてもよい。
動画像復号装置31は、ネットワーク21が伝送した符号化ストリームTeのそれぞれを復号し、復号した1又は複数の復号画像Tdを生成する。
画像表示装置41は、動画像復号装置31が生成した1又は複数の復号画像Tdの全部又は一部を表示する。画像表示装置41は、例えば、液晶ディスプレイ、有機EL(Electro-luminescence)ディスプレイ等の表示デバイスを備える。ディスプレイの形態としては、据え置き、モバイル、HMD等が挙げられる。また、動画像復号装置31が高い処理能力を有する場合には、画質の高い画像を表示し、より低い処理能力しか有しない場合には、高い処理能力、表示能力を必要としない画像を表示する。
<演算子>
本明細書で用いる演算子を以下に記載する。
>>は右ビットシフト、<<は左ビットシフト、&はビットワイズAND、|はビットワイズOR
、|=はOR代入演算子であり、||は論理和を示す。
x?y:zは、xが真(0以外)の場合にy、xが偽(0)の場合にzをとる3項演算子である。
Clip3(a,b,c)は、cをa以上b以下の値にクリップする関数であり、c<aの場合にはaを返
し、c>bの場合にはbを返し、その他の場合にはcを返す関数である(ただし、a<=b)。
abs(a)はaの絶対値を返す関数である。
Int(a)はaの整数値を返す関数である。
floor(a)はa以下の最小の整数を返す関数である。
ceil(a)はa以上の最大の整数を返す関数である。
a/dはdによるaの除算(小数点以下切り捨て)を表す。
<符号化ストリームTeの構造>
本実施形態に係る動画像符号化装置11及び動画像復号装置31の詳細な説明に先立って、動画像符号化装置11によって生成され、動画像復号装置31によって復号される符号化ストリームTeのデータ構造について説明する。
図4は、符号化ストリームTeにおけるデータの階層構造を示す図である。符号化ストリ
ームTeは、例示的に、シーケンス、及びシーケンスを構成する複数のピクチャを含む。図4には、それぞれ、シーケンスSEQを既定する符号化ビデオシーケンス、ピクチャPICTを規定する符号化ピクチャ、スライスSを規定する符号化スライス、スライスデータを規定す
る符号化スライスデータ、符号化スライスデータに含まれる符号化ツリーユニット、符号化ツリーユニットに含まれる符号化ユニットを示す図が示されている。
(符号化ビデオシーケンス)
符号化ビデオシーケンスでは、処理対象のシーケンスSEQを復号するために動画像復号
装置31が参照するデータの集合が規定されている。シーケンスSEQは、図4の符号化ビデオシーケンスに示すように、ビデオパラメータセット(Video Parameter Set)、シーケン
スパラメータセットSPS(Sequence Parameter Set)、ピクチャパラメータセットPPS(Picture Parameter Set)、ピクチャヘッダ(picture header)、ピクチャPICT、及び、付加拡張情報SEI(Supplemental Enhancement Information)を含んでいる。
ビデオパラメータセットVPSは、複数のレイヤから構成されている画像において、複数
の画像に共通する符号化パラメータの集合及び画像に含まれる複数のレイヤ及び個々のレイヤに関連する符号化パラメータの集合が規定されている。
シーケンスパラメータセットSPSでは、対象シーケンスを復号するために動画像復号装
置31が参照する符号化パラメータの集合が規定されている。例えば、ピクチャの幅や高さ
が規定される。なお、SPSは複数存在してもよい。その場合、PPSから複数のSPSの何れか
を選択する。
ピクチャパラメータセットPPSでは、対象シーケンス内の各ピクチャを復号するために
動画像復号装置31が参照する符号化パラメータの集合が規定されている。例えば、ピクチャの復号に用いられる量子化幅の基準値(pic_init_qp_minus26)や重み付き予測の適用を示すフラグ(weighted_pred_flag)及びスケーリングリスト(量子化マトリックス)が含まれる。なお、PPSは複数存在してもよい。その場合、対象シーケンス内の各ピクチャから複数のPPSの何れかを選択する。
ピクチャヘッダでは、1枚の符号化ピクチャに含まれる全てのスライスに共通の符号化パラメータが定義される。例えばPOC(Picture Order Count)や分割に関する符号化パラメータが含まれる。
(符号化ピクチャ)
符号化ピクチャでは、処理対象のピクチャPICTを復号するために動画像復号装置31が参照するデータの集合が規定されている。ピクチャPICTは、図4の符号化ピクチャに示すよ
うに、スライス0~スライスNS-1を含む(NSはピクチャPICTに含まれるスライスの総数)
なお、以下、スライス0~スライスNS-1のそれぞれを区別する必要が無い場合、符号の
添え字を省略して記述することがある。また、以下に説明する符号化ストリームTeに含まれるデータであって、添え字を付している他のデータについても同様である。
(符号化スライス)
符号化スライスでは、処理対象のスライスSを復号するために動画像復号装置31が参照
するデータの集合が規定されている。スライスは、図4の符号化スライスに示すように、
スライスヘッダ、及び、スライスデータを含んでいる。
スライスヘッダには、対象スライスの復号方法を決定するために動画像復号装置31が参照する符号化パラメータ群が含まれる。スライスタイプを指定するスライスタイプ指定情報(slice_type)は、スライスヘッダに含まれる符号化パラメータの一例である。
スライスタイプ指定情報により指定可能なスライスタイプとしては、(1)符号化の際にイントラ予測のみを用いるIスライス、(2)符号化の際に単方向予測、又は、イントラ予測を用いるPスライス、(3)符号化の際に単方向予測、双方向予測、又は、イントラ予測を用いるBスライス等が挙げられる。なお、インター予測は、単予測、双予測に限定されず、より多くの参照ピクチャを用いて予測画像を生成してもよい。以下、P、Bスライスと呼ぶ場合には、インター予測を用いることができるブロックを含むスライスを指す。
なお、スライスヘッダは、ピクチャパラメータセットPPSへの参照(pic_parameter_set_id)を含んでいてもよい。
(符号化スライスデータ)
符号化スライスデータでは、処理対象のスライスデータを復号するために動画像復号装置31が参照するデータの集合が規定されている。スライスデータは、図4の符号化スライ
スヘッダに示すように、CTUを含んでいる。CTUは、スライスを構成する固定サイズ(例えば64x64)のブロックであり、最大符号化単位(LCU:Largest Coding Unit)と呼ぶこともある。
(符号化ツリーユニット)
図4の符号化ツリーユニットには、処理対象のCTUを復号するために動画像復号装置31が参照するデータの集合が規定されている。CTUは、再帰的な4分木分割(QT(Quad Tree)
分割)、2分木分割(BT(Binary Tree)分割)あるいは3分木分割(TT(Ternary Tree)
分割)により符号化処理の基本的な単位である符号化ユニットCUに分割される。BT分割とTT分割を合わせてマルチツリー分割(MT(Multi Tree)分割)と呼ぶ。再帰的な4分木分
割により得られる木構造のノードのことを符号化ノード(Coding Node)と称する。4分木、2分木、及び3分木の中間ノードは、符号化ノードであり、CTU自身も最上位の符号化ノードとして規定される。
CTは、CT情報として、QT分割を行うか否かを示す分割フラグを含む。図5に分割の例を
示す。
CUは符号化ノードの末端ノードであり、これ以上分割されない。CUは符号化処理の基本的な単位となる。
(符号化ユニット)
図4の符号化ユニットに示すように、処理対象の符号化ユニットを復号するために動画
像復号装置31が参照するデータの集合が規定されている。具体的には、CUは、CUヘッダCUH、予測パラメータ、変換パラメータ、量子化変換係数等から構成される。CUヘッダでは予測モード等が規定される。
予測処理は、CU単位で行われる場合と、CUをさらに分割したサブCU単位で行われる場合がある。CUとサブCUのサイズが等しい場合には、CU中のサブCUは1つである。CUがサブCU
のサイズよりも大きい場合、CUは、サブCUに分割される。例えばCUが8x8、サブCUが4x4の場合、CUは水平2分割、垂直2分割からなる、4つのサブCUに分割される。
予測の種類(予測モードCuPredMode)は、イントラ予測(MODE_INTRA)と、インター予測(MODE_INTER)の2つを少なくとも備える。さらにイントラブロツクコピー予測(MODE_IBC)
を備えても良い。イントラ予測、イントラブロツクコピー予測は、同一ピクチャ内の予測であり、インター予測は、互いに異なるピクチャ間(例えば、表示時刻間、レイヤ画像間)で行われる予測処理を指す。
変換・量子化処理はCU単位で行われるが、量子化変換係数は4x4等のサブブロック単位
でエントロピー符号化してもよい。
予測画像は、ブロックに付随する予測パラメータによって導出される。予測パラメータには、イントラ予測とインター予測の予測パラメータがある。
(動画像復号装置の構成)
本実施形態に係る動画像復号装置31(図6)の構成について説明する。
動画像復号装置31は、エントロピー復号部301、パラメータ復号部(予測画像復号装置
)302、ループフィルタ305、参照ピクチャメモリ306、予測パラメータメモリ307、予測画像生成部(予測画像生成装置)308、逆量子化・逆変換部311(スケーリング部)、及び加算部312を含んで構成される。なお、後述の動画像符号化装置11に合わせ、動画像復号装
置31にループフィルタ305が含まれない構成もある。
パラメータ復号部302は、さらに、ヘッダ復号部3020、CT情報復号部3021、及びCU復号
部3022(予測モード復号部)を備えており、CU復号部3022はTU復号部3024を備えている。これらを総称して復号モジュールと呼んでもよい。ヘッダ復号部3020は、符号化データからVPS、SPS、PPS等のパラメータセット情報、スライスヘッダ(スライス情報)を復号す
る。CT情報復号部3021は、符号化データからCTを復号する。CU復号部3022は符号化データからCUを復号する。TU復号部3024は、符号化データから、変換スキップフラグtransform_skip_flagとQP更新情報(量子化補正値)と量子化変換係数(residual_coding)を復号する。
ヘッダ復号部3020は、SPSから非分離変換を利用するか否かを示すフラグsps_lfnst_enabled_flagを復号する。また、ヘッダ復号部3020は、sps_lfnst_enabled_flagが1である場合に、ピクチャヘッダ(PH)からph_lfnst_enabled_flagを復号する。ph_lfnst_enabled_flagが現れない場合には、ph_lfnst_enabled_flagを0と推定(infer)する。あるいは、ph_lfnst_enabled_flagが現れない場合には、ph_lfnst_enabled_flagの値としてsps_lfnst_enabled_flagの値を設定してもよい。
TU復号部3024は、符号化データから変換基底を示すインデックスmts_idxを復号する。
また、TU復号部3024は、符号化データから非分離変換の利用の有無、及び、変換基底を示すパラメータlfnst_idxを復号する。具体的には、TU復号部3024は、CUの幅と高さが4以
上であり、且つ、予測モードがイントラ予測モードである場合に、lfnst_idxを復号する
。なお、lfnst_idxは0の場合、非分離変換の非適用を示し、1の場合、非分離変換の変換
行列(変換基底)のセット(ペア)のうち一方の変換行列を示し、2の場合、上記ペアの
うち他方の変換行列を示す。
TU復号部3024は、変換ユニットのサイズ(tbWidthとtbHeight)が所定の最大サイズ以
下である場合(tbWidth<=MaxTsSize && tbHeight<=MaxTsSize)、transform_skip_flag[x0][y0][cIdx]を復号する。
TU復号部3024は、TUに予測誤差が含まれている場合(例えば、tu_cbf_luma[x0][y0]が
1の場合)、符号化データからQP更新情報と量子化変換係数を復号する。量子化変換係数の導出では複数のモード(例えばRRCモードとTSRCモード)を備えてもよい。具体的には
、変換を用いる通常の予測誤差の導出(RRC:Regular Residual Coding)と、変換を用いな
い変換スキップモードでの予測誤差の導出(TSRC:Transform Skip Residual Coding)とで
、異なる処理を実施してもよい。QP更新情報は、量子化パラメータQPの予測値である量子化パラメータ予測値qPpredからの差分値である。
また、以降では処理の単位としてCTU、CUを使用した例を記載するが、この例に限らず
、サブCU単位で処理をしてもよい。あるいはCTU、CUをブロック、サブCUをサブブロック
と読み替え、ブロックあるいはサブブロック単位の処理としてもよい。
エントロピー復号部301は、外部から入力された符号化ストリームTeに対してエントロ
ピー復号を行って、個々の符号(シンタックス要素)をパースする。エントロピー符号化には、シンタックス要素の種類や周囲の状況に応じて適応的に選択したコンテキスト(確率モデル)を用いてシンタックス要素を可変長符号化する方式と、予め定められた表、あるいは計算式を用いてシンタックス要素を可変長符号化する方式がある。前者の例としてCABAC(Context Adaptive Binary Arithmetic Coding)が挙げられる。パースされた符号には、予測画像を生成するための予測情報及び、差分画像を生成するための予測誤差等がある。
エントロピー復号部301は、分離した符号をパラメータ復号部302に出力する。分離した符号とは、例えば、予測モードCuPredModeである。どの符号を復号するかの制御は、パラ
メータ復号部302の指示に基づいて行われる。
(基本フロー)
図7は動画像復号装置31の概略的動作を説明するフローチャートである。
(S1100:パラメータセット情報復号)ヘッダ復号部3020は、符号化データからVPS、SPS、PPS、SEI、PH等のパラメータセット情報を復号する。
(S1200:スライス情報復号)ヘッダ復号部3020は、符号化データからスライスヘッダ
(スライス情報)を復号する。
以下、動画像復号装置31は、対象ピクチャに含まれる各CTUについて、S1300からS5000
の処理を繰り返すことにより各CTUの復号画像を導出する。
(S1300:CTU情報復号)CT情報復号部3021は、符号化データからCTUを復号する。
(S1400:CT情報復号)CT情報復号部3021は、符号化データからCTを復号する。
(S1500:CU復号)CU復号部3022はS1510、S1520を実施して、符号化データからCUを復
号する。また、CU復号部3022は、符号化データからCU単位で量子化パラメータの差分CuQpDeltaValを復号し、量子化パラメータを導出する。
(S1510:CU情報復号)CU復号部3022は、符号化データからCU情報、予測情報、TU分割
フラグsplit_transform_flag、CU残差フラグcbf_cb、cbf_cr、cbf_luma等を復号する。
(S1520:TU情報復号)TU復号部3024は、TUに予測誤差が含まれている場合に、符号化
データからQP更新情報と量子化変換係数を復号する。
(S2000:予測画像生成)予測画像生成部308は、対象CUに含まれる各ブロックについて、予測情報に基づいて予測画像を生成する。
(S3000:逆量子化・逆変換)逆量子化・逆変換部311は、対象CUに含まれる各TUについて、逆量子化・逆変換処理を実行する。
(S4000:復号画像生成)加算部312は、予測画像生成部308より供給される予測画像と
、逆量子化・逆変換部311より供給される予測誤差とを加算することによって、対象CUの
復号画像を生成する。
(S5000:ループフィルタ)ループフィルタ305は、復号画像にデブロッキングフィルタ、SAO (Sample Adaptive Filter)、ALF (AdaptiveLoopFilter)等のループフィルタをかけ、復号画像を生成する。
(量子化変換係数の導出、残差符号化)
ロスレス符号化や原画の画素間相関が小さい時には、変換を実施しない方が、符号化効率は高い場合がある。変換を実施しない技術を変換スキップ(Transform Skip)と称す。変換スキップは、Identical Transformとも呼ばれ、量子化パラメータに応じた変換係数
のスケーリングのみを行う。変換スキップであるかはシンタックス要素transform_skip_flagを用いて通知される。transform_skip_flagは、Y, Cb, Crの各色コンポーネント(cIdx)ごとに通知されてもよい。
変換を用いる通常の予測誤差の導出(RRC:Regular Residual Coding)と、変換スキップ
モードでの予測誤差の導出(TSRC:Transform Skip Residual Coding)とでは、予測誤差の
符号化方法も復号方法も異なる。
図8はTU復号部3024のブロック図であり、RRC部30241とTSRC部30242が含まれる。RRC部30241は変換を用いる通常の予測誤差を導出する処理部であり、TSRC部30242は変換スキッ
プモードでの予測誤差を導出する処理部である。
図9(a)sps_transform_skip_enabled_flagは、各TUでtransform_skip_flagが通知されるか否かを示すフラグである。sps_transform_skip_enabled_flag=1は、各TUでtransform_skip_flagが通知されることを示す。sps_transform_skip_enabled_flag=0は、各TUでtransform_skip_flagが通知されないことを示。sps_transform_skip_enabled_flagが通知されない場合、0と推定される。
図10(b)のtransform_skip_flag[x0][y0][cIdx]は、左上座標が(x0,y0)、色成分がcIdx
のブロックにおいて、変換が適用されるか否かを示す。transform_skip_flag=1(変換ス
キップモード)の場合、このブロックには変換は適用されない。transform_skip_flag=0
の場合、このブロックに変換が適用されるか否かは他のパラメータに依存する。
図11から図13、および図14から図15は各々、RRC(Regular Residual Coding)、TSRC(Transform Skip Residual Coding)での変換係数(予測誤差)の符号化データの構造(符号化方法)を示すシンタックステーブルである。
(RRC部、RRCモード)
変換スキップしない通常の予測誤差符号化方法(図11から図13)において、RRC部30241は、LAST位置を示すシンタックス要素(図示しない)を復号し、LAST位置(LastSignificantCoeffX, LastSignificantCoeffY)を導出する。LAST位置は、TUの変換係数を低周波数成分から高周波数成分の方向にスキャンする場合の最後の非ゼロ係数の位置である。高周波数成分から順に変換係数(係数)を符号化、復号する場合、LAST位置は最初に復号する量子化変換係数の位置を示す。次に、RRC部30241は、LAST位置を参照してsb_coded_flagを復号する。sb_coded_flagは、サブブロックに非ゼロ係数が含まれるか否かを示すフラグである。サブブロックはTUを4x4単位に分割した領域である。sb_coded_flag=1(サブブロックに非ゼロ係数が含まれる)であれば、RRC部30241はsig_coeff_flagを復号する。sig_coeff_flagは係数値が非ゼロか否かを示すフラグである。sig_coeff_flag=1(係数値は非ゼロ)であれば、RRC部30241はabs_level_gtx_flag、par_level_flag、abs_remainder、dec_abs_levelを復号する。これらは係数の絶対値を示すシンタックス要素である。abs_level_gtx_flag[n][j]はスキャン位置nの係数の絶対値が(j<<1)+1より大きいか否かを表すフラグである。abs_level_gtx_flag[n][j]が通知されない場合、0と推定される。par_level_flag[n]はスキャン位置nの係数のパリティである。par_level_flag[n][j]が通知されない場合、0と推定される。abs_remainder[n]はスキャン位置nの係数の絶対値の残り(remaining)を表し、ゴロム・ライス符号(Golomb-Rice code)により復号される。abs_remainder[n]が通知されない場合、0と推定される。dec_abs_level[n]はスキャン位置nにおける係数の絶対値を導出するための残差の絶対値である。dec_abs_level[n]が通知されない場合、0と推定される。RRC部30241はこれらのシンタックス要素から係数の絶対値を導出する。
上記のように、RRC部30241は、TUのサブブロックにおいてLAST位置を復号することが特徴である。
(TSRC部、TSRCモード)
変換を実施しない場合(変換スキップモード)の予測誤差符号化方法(図14、図15)におい
て、TSRC部30242は、各サブブロックのsb_coded_flagを復号する。sb_coded_flag=1(サブブロックに非ゼロ係数が含まれる)であれば、TSRC部30242は、サブブロック内の位置(xC,
xC)の変換係数のsig_coeff_flag[xC][yC]を復号する。sig_coeff_flag=1(係数値は非ゼ
ロ)であれば、TSRC部30242はcoeff_sign_flag、abs_level_gtx_flag、par_level_flag、abs_remainderを復号する。これらは係数の絶対値を示すシンタックス要素であり、定義は上述の通りである。TSRC部30242はこれらのシンタックス要素から係数の絶対値を導出する。
上記のように、TSRC部30242は、TUのサブブロックにおいてLAST位置を復号しないこと
が特徴である。
(abs_remainderとdec_abs_levelの復号)
TU復号部3024は、符号化データから、ライスパラメータcRiceParamを用いて、残差絶対値のシンタックス値(abs_remainderもしくはdec_abs_level、以下残差と記す)を復号する。当該シンタックスのバイナリゼーションには、プリフィックスとサフィックスとから構成される符号を用いる。プリフィックスとサフィックスとして、ゴロムライス符号のアルファ符号と固定長バイナリゼーションを用いてもよい。サフィックスはEG(k)(Exponential-Golomb code)符号を用いてもよい。シンタックス要素として符号化される、「変換係数の残差の絶対値(残差絶対値)」を単に「残差」と表現する。
本実施形態では、ゴロムライス符号として、Truncated Rice(TR)符号を用い、プリフィックスをprefixValTRとsuffixValTRに分けて符号化し、EG(k)符号では、サフィックスをexp部のexpValとescape部のescapeValに分けて符号化する例を説明する。残差(abs_remainderもしくはdec_abs_level)を1<<cRiceParam、(((1<<expVal))-1)<<cRiceParamで割った商は各々prefixValTRとexpValを用いて符号化される。残差(abs_remainderもしくはdec_abs_level)を1<<cRiceParam、(1<<expVal<<cRiceParam)で割った余りは、各々suffixValTR、escapeValを用いて符号化される。つまり、残差は以下の様に符号化される。
((prefixValTR + ((1<<expVal-1))) << cRiceParam) + suffixValTR + escapeVal
残差が所定の値cMax以下の場合には、prefixValTRとsuffixValTRだけが符号化される。
prefixVal = (prefixValTR<<cRiceParam) + suffixValTR
残差が所定の値より大きい場合(suffixValが存在する場合)、cMaxと等しいprefixValを示すprefixValTRに加えてexpValとescapeValが符号化される。
prefixVal = (prefixValTR<<cRiceParam) = cMax
suffixVal = (((1<<expVal)-1)<<cRiceParam) + escapeVal
ここでは残差は以下で表せる。プリフィックスだけで表せる場合の残差は下式である。
残差=((prefixValTR) << cRiceParam) + suffixValTR
それ以外(プリフィックスだけで表せない場合、もしくは、prefixValTR=6)の場合の残
差は下式である。
残差=((prefixValTR + (1<<(expVal)-1)) << cRiceParam) + escapeVal
また以下のように、prefixVal、suffixValを定義してもよい。
prefixVal = (prefixValTR << cRiceParam) + suffixValTR
suffixVal = (((2<<expVal)-2) << cRiceParam) + escapeVal
(流れ)
TU復号部3024は、まずプリフィックスprefixValの最大値cMaxを、cRiceParamから導出
する。
cMax = 6 << cRiceParam
ここで6はprefixValTRの最大値である。maxPrefixValTRとも呼ぶ。
TU復号部3024は、後述のTruncated Rice(TR)符号のバイナリゼーションに基づいて符号化データからプリフィックスの値(prefixVal)を復号する。なお、プリフィックスと残
差の関係は以下のとおりである。
prefixVal = Min(cMax,abs_remainder[n])
あるいは以下でもよい。
prefixVal = Min(cMax,dec_abs_level)
続いて、残差がcMaxより大きい場合(prefixValだけでは残差を表現できない場合)、TU復号部3024は、以下の関係式を満たすsuffixValをさらに復号する。
suffixVal = abs_remainder[n] - cMax
あるいは以下でもよい。
suffixVal = dec_abs_level - cMax
具体的には、TU復号部3024は、suffixValが存在する場合、符号化データからLimited k-th order Exp-Golomb(EG(k))のバイナリゼーションに基づいてsuffixValを復号する。suffixValが存在する場合とは、TR符号のprefixValのビット列が長さ6(=maxPrefixValTR)、つまり"111111"の場合である。ここで、次数kをcRiceParam、変数maxPreExtLenを11、変数truncSuffixLenを15とする。maxPreExtLenは固定値(11)とせず、変換係数のレンジlog2TransformRangeに応じて導出してもよい。
本実施形態において例えば、maxPreExtLenを以下の式で導出してもよい。
maxPreExtLen = (32 - 6) - log2TransformRange = 26 - log2TransformRange
例えば、log2TransformRangeが後述の(式R-1)の場合、以下のように導出してもよい。
maxPreExtLen = extended_precision_processing_flag ? 26 - Max(15, BitDepth + BDOFFSET) : 11
ここで、maxPreExtLen、escapeLengthは、各々、EG(k)符号におけるexp部とescape部の長さの最大値を示す。log2TransformRangeは、逆量子化・逆変換部311で処理される変換
での係数のレンジを示す変数である。
図19は、prefixValTR、maxPreExtLenとtruncSuffixLenの符号の関係を説明した図であ
る。残差の符号はTR符号のプリフィックス(prefixValTR)と、EG(k)符号のサフィックスから構成され、サフィックスはexp部とescape部から構成される。prefixValTR、escape部の長さは各々maxPrefixValTR、truncSuffixLenであり、exp部の最大長はmaxPreExtLenであ
る。以降では、maxPrefixValTR=6として説明する。
(Truncated Rice(TR)符号のバイナリゼーション)
TRバイナリゼーションの入力symbolValはprefixValであり、TRバイナリゼーションでは、symbolVal(==prefixVal)の(1<<cRiceParam)による商をprefixValTR、余りをsuffixValTRとして符号化する。なお、TR符号の入力symbolValとprefixValTRの関係は以下のとおりである。
prefixValTR = symbolVal>>cRiceParam
prefixValTRは以下の定義でビット列に変換される。prefixValTR<(cMax>>cRiceParam)
の場合、prefixValTR+1の長さのbinIdxでインデックスされたビット列である。binIdx<prefixValTRの場合、ビン(bins)は"1"、binIdx==prefixValTRの場合、ビンは"0"である。それ以外(prefixValTR==(cMax>>cRiceParam)の場合、長さがcMax>>cRiceParamの"1"の列である。なお、ビンとは、"0"か"1"からなるビット列である。binIdxとは、ビット列の先頭からの位置を示す値であり、binIdx=0が先頭(バイナリ列の左端)に対応する。以下にprefixValTRが0~5の場合のビット列(bins)の例を示す。
prefixValTR==0 bins=0
prefixValTR==1 bins=10
prefixValTR==2 bins=110
prefixValTR==3 bins=1110
prefixValTR==4 bins=11110
prefixValTR==5 bins=111110

ただし、symbolVal>=cMax(すなわちprefixVal==(6<<cRiceParam))の場合は下式である。
prefixValTR==6 bins=111111
TR符号のprefixValTRのbinsはtruncatedなアルファ符号(unary符号)である。ここでtruncatedであるとは最大値に一致する場合には、最後の0を省略することを意味する。
cMaxがsymbolValより大きく(symbolVal<cMax)、cRiceParam>0の場合には、TRビン列のsuffixTRが存在し、下記のように導出される。suffixValTRはTRビット列のsuffixである。
suffixValTR = symbolVal - (prefixValTR<<cRiceParam)
また、TRビット列のsuffixのバイナリゼーションは、最大値cMaxFLを(1<<cRiceParam)-1とする、固定長バイナリゼーション(後述)を用いる。
なお、symbolVal==cMaxの場合には、残差のサフィックスは、上記TRバイナリゼーショ
ンのsuffixValTRではなく、EG(k)符号のバイナリゼーションを用いる。
(Limited k-th order Exp-Golomb/EG(k)符号のバイナリゼーション)
残差のsuffixValはEG(k)符号のバイナリゼーションを用いてもよい。EG(k)符号は、次
数k(=cRiceParam)とmaxPreExtLenを入力として得られるバイナリゼーションであり、以下の疑似コードで示す。EG(k)符号は長さmaxPreExtLen以下からなるexp部と、escapeLength長の固定長バイナリゼーションのescape部からなる。preExtLenは、exp部のput(1)の数をカウントする変数であり、exp部で符号化される値espValに等しい。つまりexpVal=preExtLen。対応する残差の値はexpVal<<cRiceParamである。escapeValはescape部で符号化される値である。
// exp部
codeValue = symbolVal >> k
preExtLen = 0
while((preExtLen<maxPreExtLen) && (codeValue > ((2<<preExtLen) - 2)))) {
preExtLen++
put(1)
}
if(preExtLen == maxPreExtLen)
escapeLength = truncSuffixLen
else {
escapeLength = preExtLen + k
put(0)
}
// escape部
symbolVal = symbolVal - (((1<<preExtLen)-1)<<k)
while((escapeLength--)>0)
put((symbolVal>>escapeLength) & 1)
ここで、symbolValは入力値であり、残差からprefixVal(==cMax)を引いた値である。put(X)は、X("0"または"1")をビット列の最後に追加してビット列を作る操作を示す。ビット列の初期値は空({})である。escapeLengthは、symbolValにおいてescape部から出力されるビット位置を示す変数である。
なお、escape部は以下のようにしてもよい。
symbolVal = symbolVal - (((2<<preExtLen)-2)<<k)
while((escapeLength--)>0)
put((symbolVal>>escapeLength) & 1)
(固定長バイナリゼーション)
固定長バイナリゼーションは、最大値cMaxFL、値symbolValに対して、Ceil(Log2(cMaxFL+1))の長さfixedLengthのunsigned整数列(2進数列)を用いて行う。なお、位置binIdxの0が最上位ビット(MSB)に対応し、binIdxが大きくなるにつれて最下位ビット(LSB)に近づく。
(残差の復号のまとめ)
TU復号部3024は、prefixValとsuffixValから構成される残差を復号する。
TU復号部3024は、cRiceParamからcMaxを導出し、cMaxを上限として符号化データからprefixValを復号し、suffixValが存在する場合にはsuffixValを復号する。
具体的には、TU復号部3024は、TRバイナリゼーションのprefixValTRを復号し、symbolVal<cMax、cRiceParam>0(つまりprefixVal<cMax、prefixVal<6)の場合には、さらに符号化データから固定長バイナリゼーションのsuffixValTRを復号する。この場合、suffixValが存在しない。
TU復号部3024は、上記suffixValが存在しない場合、以下の式で、abs_remainder[n]、dec_abs_levelを導出する。
abs_remainder[n] = (prefixValTR<<cRiceParam) + suffixValTR
dec_abs_level[n]= (prefixValTR<<cRiceParam) + suffixValTR
それ以外の場合(prefixVal==cMax、prefixValTR==6の場合)、TU復号部3024は、EG(k)符号によりsuffixValを復号し、下式でabs_remainder[n]、dec_abs_level[n]を導出する。
abs_remainder[n] = cMax + suffixVal
dec_abs_level[n] = cMax + suffixVal
ここで、suffixValがEG(k)符号のexp部のpreExtLenとescape部のescapeValからなる場
合、下記が成り立つ。
suffixVal = (preExtLen<<cRiceParam) + escapeVal
まとめると、TU復号部3024は、符号化データからTRバイナリゼーションのプリフィックスprefixValと、EG(k)符号のexp部のpreExtLenとescape部のescapeValからなるsuffixValを復号して、残差(abs_remainder[n]もしくはdec_abs_level[n])を導出する。
abs_remainder[n] = prefixVal + suffixVal = (prefixValTR<<cRiceParam) + (prefixValTR < 6) ? suffixValTR : (1<<expVal<<cRiceParam) + escapeVal
ここで、(prefixValTR < 6)の場合にpreExtLen=escapeVal=0とすると、
abs_remainder[n] = (prefixValTR+preExtLen)<<cRiceParam + (prefixValTR < 6) ? suffixValTR : escapeVal
dec_abs_level[n]の導出も同様である。
なお、truncatedなアルファ符号のpredfixValTRのbinsとアルファ符号のpredExtLenのbinsを連結した符号もアルファ符号であるので、TR符号のprefixValとEG(k)符号のexp部は一体のものとして復号してもよい。この場合、最大長maxPreExtLen+6のアルファ符号を符号化データから読み取って、アルファ符号の長さprefixtmp(=prefixValTR+expVal)を復号する。ここで、maxPreExtLen+6は、prefixValTRの最大長6と、EG(k)符号のexp部の最大長maxPreExtLenの和である。
TU復号部3024は、1<<cRiceParamの商と余りに分けて、残差を以下のように導出しても
よい。
残差 = (prefixRes << cRiceParam) + suffixRes
復号されたアルファ符号の長さをprefixtmpとすると、残差の指数部prefixResは下式で表される。
prefixRes = (prefixVal<6) ? prefixValTR : prefixValTR + (1<<expVal) - 1
prefixtmp<6の場合はprefixValTR=prefixtmp、prefixtmp>=6の場合はprefixValTR=6、expVal=prefixtmp-6であるので、以下で導出できる。
prefixRes
= (prefixtmp<6) ? prefixtmp : 6 + (1<<(prefixtmp-6)) - 1
= (prefixtmp<6) ? prefixtmp : (1<<(prefixtmp-6)) + 5
また、
prefixRes = (prefixVal<6) ? prefixValTR : prefixValTR + (2<<expVal) - 2
を用いる構成の場合には以下でもよい。
prefixRes
= (prefixtmp<6) ? prefixtmp : 6 + (2<<(prefixtmp-6)) - 2
= (prefixtmp<6) ? prefixtmp : (2<<(prefixtmp-6)) + 4
= (prefixtmp<6) ? prefixtmp : (1<<(prefixtmp-5)) + 4
ここでprefixtmp<6はprefixtmp<5としても処理できる。また、suffixValTRもescapeValもどちらも固定長バイナリゼーションなので、前者をcMaxFLのfixedLength、後者をescapeLength長のfixedLengthとして、同様にsuffixResも復号してよい。
(量子化変換係数)
TU復号部3024(残差復号部30241)は、位置nに対して、順に、符号化データからabs_remainderを復号し、量子化変換係数AbsLevelをAbsLevelPass1とabs_remainderから以下の
式で導出する。nはサブブロック内のスキャン順で最後の係数位置以下で、所定のビット
数を復号するまでの位置のいずれかである。
AbsLevel[xC][yC] = AbsLevelPass1[xC][yC] + 2 * abs_remainder[n]
ここで、AbsLevelPass1[xC][yC] = sig_coeff_flag[xC][yC] + par_level_flag[n] + abs_level_gtx_flag[n][0] + 2 * abs_level_gtx_flag[n][1]。
TU復号部3024は、上記以外(所定のビット数を復号した時のn)の場合、符号化データ
からdec_abs_levelを復号し、以下の式によりAbsLevelを導出する。
if (dec_abs_level[n] == ZeroPos[n])
AbsLevel[xC][yC] = 0
else if (dec_abs_level[n] < ZeroPos)
AbsLevel[xC][yC] = dec_abs_level[n] + 1
else /*dec_abs_level[n] > ZeroPos[n]*/
AbsLevel[xC][yC] = dec_abs_level[n]
ここでZeroPosは以下の式で導出される。
ZeroPos[n] = ( QState < 2 ? 1 : 2 ) << cRiceParam
ここでQStateは依存量子化の状態を示す。
(ライスパラメータ導出)
係数の絶対値を表すシンタックス要素の内、abs_remainder、dec_abs_levelは、ゴロム・ライス符号(またはライス符号)でバイナリ化された値を、バイパス符号(CABACの等確率符号)により復号される。abs_remainderは変換係数の絶対値のオフセットに対する差分であり、dec_abs_levelは変換係数の絶対値である。
なお、ゴロム・ライス符号は、シンタックス要素を前半部(プリフィックス)と後半(リマインダー、サフィックス)の2つの部分に分割して符号化する。プリフィックスには0に近い値を短い符号量で符号化可能なアルファ符号(unary符号)を用いる。サフィックスにはライスパラメータcRiceParamを用いた固定長バイナリゼーションもしくはEG(k)バイナリゼーションを用いる。ライスパラメータが大きいほど、小さな値のビット長はより長く、大きな値のビット長がより短くなる特性がある。シンタックス要素の値の大きさの発生確率に応じて、ライスパラメータを調整することで符号量の削減が可能である。
本実施形態の動画像復号装置、動画像符号化装置では、既に導出された係数の絶対値から、復号するシンタックス要素の値を予測する。そして、その予測値から適切なライスパラメータを導出する。図17を用いて、以下に詳細を示す。
現在のTUの左上座標を(x0,y0)、現在のスキャン位置を(xC,yC)、TUの幅と高さのlog2の値をそれぞれlog2TbWidth、log2TbHeightとする。また係数の絶対値を格納する配列を、
位置(x,y)を用いてAbsLevel[x][y]で表す。図17(a)はabs_remainder、または、dec_abs_levelを復号する際に用いる、係数の周りの復号済係数の位置を示している。周りの係数の絶対値和を表す変数をlocSumAbsとすると、TU復号部3024はRRCにおいてlocSumAbsを以下
のように導出する。
locSumAbs = 0
if(xC < (1<<log2TbWidth)-1) {
locSumAbs += AbsLevel[xC+1][yC]
if(xC < (1<<log2TbWidth)-2)
locSumAbs += AbsLevel[xC+2][yC]
if(yC < (1<<log2TbHeight)-1)
locSumAbs += AbsLevel[xC+1][yC+1]
}
if(yC < (1<<log2TbHeight)-1) {
locSumAbs += AbsLevel[xC][yC+1]
if(yC < (1<<log2TbHeight)-2)
locSumAbs += AbsLevel[xC][yC+2]
}
locSumAbs0 = locSumAbs
locSumAbs = Clip3(0, 31, locSumAbs-baseLevel*5)
1) 係数位置(xC+1,yC)がブロック内にある(xC<(1<<log2TbWidth)-1)とき、locSumAbsにt1(AbsLevel[xC+1][yC])の値を加える。
2) 1)のとき、さらに位置(xC+2,yC)がブロック内にある(xC<(1<<log2TbWidth)-2)とき、locSumAbsにt2(AbsLevel[xC+2][yC])の値を加える。
3) 1)のときさらに位置(xC+1,yC+1)がブロック内にある(yC<(1<<log2TbHeigh)-1)とき、locSumAbsにt3(AbsLevel[xC+1][yC+1])の値を加える。
4) 位置(xC,yC+1)がブロック内にある(yC<(1<<log2TbHeight)-1)とき、locSumAbsにt4(AbsLevel[xC][yC+1])の値を加える。
5) 4)のときさらに位置(xC,yC+2)がブロック内にある(yC<(1<<log2TbHeight)-2)
とき、locSumAbsにt5(AbsLevel[xC][yC+2])の値を加える。
以上の処理から計算されたlocSumAbsを変数baseLevelとクリップ処理によって以下のように更新する。
locSumAbs = Clip3(0, 31, locSumAbs-baseLevel*5)
ここでbaseLevelは、abs_remainderを復号するとき(tcoeff==0)は4、dec_abs_levelを復
号するとき(tcoeff==1)は0としてもよい。tcoeffは復号対象がabs_remainderであるか、dec_abs_levelであるかを示す変数である。
図17(b)に示すテーブルを用いて、導出されたlocSumAbsからabs_remainder、dec_abs_levelの復号に用いられるライスパラメータを導出する。
図示しないが、TU復号部3024は以下のようにテーブルを用いずに、式を用いてライスパラメータcRiceParamを導出してもよい。
if (baseLevel != 0)
cRiceParam = Max(0, floor(log2(15 * locSumAbs)) - 7)
else
cRiceParam = Max(0, floor(log2(9 * locSumAbs) + 20) - 5)
式としては上記のように、周囲の変換係数の和locSumAbsとの積和と、2を底とする対
数を用いることができる。ここでbaseLevel!=0は、abs_remainderの復号に用いる場合を
示し、else以下のbaseLevel==0は、dec_abs_levelの復号に用いる場合を示す。
TU復号部3024は、TSRCにおいて周りの復号済係数を用いず、ライスパラメータcRiceParamを常に1にセットする。
(量子化変換係数の導出、依存量子化)
逆量子化・逆変換部311は、変換係数を逆量子化する。量子化方法として、スカラー量
子化と依存量子化の2つの方法を備える。依存量子化の場合、さらにRRC部30241において逆量子化処理の一部を行ってもよい。
逆量子化・逆変換部311は、量子化パラメータqPと、rectNonTsFlag、量子化マトリックスm[][]の値に応じて、線形スケール値ls[x][y]を以下のように導出する。逆量子化・逆
変換部311は、依存量子化が有効で、かつ、変換スキップが無効の場合と、それ以外とでls[][]の導出方法を切り替える。
if (sh_dep_quant_used_flag && !transform_skip_flag)
ls[x][y] = (m[x][y]*levelScale[rectNonTsFlag][(qP+1)%6]) << ((qP+1)/6)
else
ls[x][y] = (m[x][y]*levelScale[rectNonTsFlag][qP%6]) << (qP/6)
rectNonTsFlag = (transform_skip_flag==0 && (((Log2(nTbW)+Log2(nTbH)) & 1)==1))
? 1 : 0
bdShift1 = transform_skip_flag==1 ? 10 : BitDepth+rectNonTsFlag+((Log2(nTbW)+Log2(nTbH))/2)-5+sh_dep_quant_used_flag
なお、後述のように係数の範囲を拡張する場合には、スケーリングのシフト値bdShift1を以下の式で導出してもよい。
bdShift1 = BitDepth + rectNonTsFlag +(((Log2(nTbW)+Log2(nTbH))/2) + 10 - log2TransformRange + sh_dep_quant_used_flag
(依存量子化ではない場合)
依存量子化ではない場合、逆量子化部3111(スケーリング部31111、変換係数クリップ部31112)は、量子化変換係数と量子化パラメータから一意に変換係数を導出する。例えば変換係数値dを導出する。
TransCoeffLevel[x0][y0][cIdx][xC][yC] = AbsLevel[xC][yC] * (1-2*coeff_sign_flag[n]) <式TC_REGULAR>
dz[xC][yC] = TransCoeffLevel[x0][y0][cIdx][xC][yC]
ls[x][y] = (m[x][y] * levelScale[rectNonTsFlag][qP%6]) << (qP / 6)
dnc[xC][yC] = (dz[xC][yC]*ls[xC][yC]+((1<<bdShift1)>>1)) >> bdShift1
d[xC][yC] = Clip3(CoeffMin, CoeffMax, dnc[xC][yC])
ここでAbsLevelは量子化変換係数値、ls,bdShift1は量子化パラメータqPから導出される
変数である。CoeffMin、CoeffMaxはクリッピングの最小値と最大値であり、以下の式により導出する。
CoeffMin = -(1 << log2TransformRange)
CoeffMax = (1 << log2TransformRange) - 1
log2TransformRangeは変換係数のレンジを示す。log2TransformRange=15の場合、CoeffMin = -(1<<15)、CoeffMax = (1<<15)-1。
変換係数のレンジlog2TransformRangeは、BitDepthに依存して下記により設定してもよい。
log2TransformRange = extended_precision_processing_flag ? Max(15, BitDepth +
BDOFFSET) : 15 (式R-1)
また、以下のようにlog2TransformRangeの最大長を制限してもよい。
log2TransformRange = extended_precision_processing_flag ? Min(Max(15, BitDepth +
BDOFFSET), 20) : 15 (式R-1A)
bitDepth>10の場合にさらに制限してもよい。
log2TransformRange = extended_precision_processing_flag ? Min(Max(15, BitDepth +
BDOFFSET), 20) : 15 (式R-1B)
ここで、BDOFFSETは変換係数の範囲を計算するための固定値であり、4, 5, 6などが適当
である。extended_precision_processing_flagは、変換係数の範囲として拡張レンジを使うか否かを示すフラグである。
(依存量子化の場合)
一方、図11に示すように、依存量子化は異なるレベルを持つ2つの量子化器を備える。TU復号部3024(残差復号部30242)は、量子化変換係数の中間値(AbsLevelPass1、AbsLevel)のパリティを用いて、4つの状態QStateを切り替える。そして、QStateに応じて量子化・逆量子化する。
QState = QStateTransTable[QState][AbsLevelPass1[xC][yC] & 1]
TransCoeffLevel[x0][y0][cIdx][xC][yC] = (2*AbsLevel[xC][yC]-(QState>1 ? 1 : 0)) * (1-2*coeff_sign_flag[n]) <式TC_DQ>
dz[xC][yC] = TransCoeffLevel[x0][y0][cIdx][xC][yC]
逆量子化部3111(スケーリング部31111)は、量子化パラメータを用いて導出される変
数lsを用いてスケーリングを行う。
ls[x][y] = (m[x][y] * levelScale[rectNonTsFlag][(qP+1) % 6]) << ((qP+1) / 6
dnc[xC][yC] = (dz[xC][yC]*ls[xC][yC]+((1<<bdShift1)>>1)) >> bdShift1
逆量子化部3111(変換係数クリップ部31112)は、変換係数をCoeffMinとCoeffMaxの間
にクリップする。
d[xC][yC] = Clip3(CoeffMin, CoeffMax, dnc[xC][yC])
ここで、QStateは状態、QStateTransTable[][]は状態遷移に用いるテーブルで、例えばQStateTransTable[][]={{0,2},{2,0},{1,3},{3,1}}である。
QStateは、QStateTransTable[][]を用いずに以下の式で導出してもよい。
QState =(32040 >>((QState << 2)+((AbsLevelPass1[xC][yC] & 1)<< 1)))&
3
QStateの値により、AbsLevelが同じでも異なるTransCoeffLevel(あるいはd)が導出される。QStateは1つ前に復号した量子化変換係数値を参照して導出されるので、一般的なスカラー(逆)量子化に比べ、係数間の相関を利用した符号化効率の良い(逆)量子化ができる。
(逆変換)
図29は、本実施形態の逆量子化・逆変換部311の構成を示すブロック図である。逆量子
化・逆変換部311は、スケーリング部31111、逆非分離変換部31121、逆コア変換部31123から構成される。
逆量子化・逆変換部311は、エントロピー復号部301から入力された量子化変換係数qd[][]をスケーリング部31111によりスケーリング(逆量子化)して変換係数d[][]を求める。この量子化変換係数qd[][]は、符号化処理において、予測誤差に対してDCT(Discrete Cosine Transform、離散コサイン変換)、DST(Discrete Sine Transform、離散サイン変換)等の変換を行い量子化して得られる係数、もしくは、変換後の係数をさらに非分離変換した係数である。逆量子化・逆変換部311は、lfnst_idx!=0の場合、逆非分離変換部31121により逆変換を行う。さらに変換係数について逆DCT、逆DST等の逆周波数変換を行い、予測誤差を算出する。また、lfnst_idx==0の場合、逆非分離変換部31121での処理を行わず、スケーリング部31111によりスケーリングされた変換係数について逆DCT、逆DST等の逆変換を行い、予測誤差を算出する。逆量子化・逆変換部311は予測誤差を加算部312に出力する。
なお、逆変換及び変換は、対になる処理であるため、変換と逆変換とを互いに置き換えて解釈してもよい。あるいは、逆変換を変換と呼ぶ場合には、変換を順変換と呼んでもよい。例えば、逆非分離変換を非分離変換と呼ぶ場合、非分離変換は順非分離変換と呼んでもよい。また、コア変換を単に変換と呼んでもよい。
逆コア変換部31123(垂直変換部311231)は得られた残差d[][]に対して垂直変換を行う
e[x][y] = Σ(transMatrix[y][j]×d[x][j]) (j = 0..nTbS - 1)
逆コア変換部31123(中間値クリップ部311232)は、第1の中間値e[x][y]をシフト、クリッピングし、第2の中間値g[x][y]を導出する。
g[x][y] = Clip3(CoeffMin, CoeffMax, (e[x][y] + 64) >> 7)
またCoeffMin、CoeffMaxはクリッピングの最小値と最大値である。
逆コア変換部31123(水平変換部311233)は、変換係数d[ ][ ]、又は、修正変換係数d[
][ ]に対し、変換を行い予測誤差r[][]を導出する(S5)。
r[x][y] = Σ(TransMatrix[x][j]×g[j][y]) (j = 0..nTbS - 1)
そして、r[][]に対し、ビットデプス(BitDepth)に応じたシフトを行い、予測画像生成部308で導出される予測画像と同じ精度の誤差resSamples[][]を導出する。例えば、シフトは以下で表現される。
resSamples[x][y] = (r[x][y] + (1 << (bdShift2 - 1))) >> bdShift2 (式BD-1)
ここで、変換後のシフト値bdShift2=5+log2TransformRange-BitDepthを導出する。(式R-1)の場合、
bdShift2 = extended_precision_processing_flag ? (5 + BDOFFSET) : Max(20 - BitDepth, 0)
なお、上記のシフト値bdShift2は、変換サイズのnTbW、nTHが両方とも1より大きい場
合に用いる構成であり、それ以外(変換サイズのnTbW、nTHの大きさのいずれかが1)の
場合ではシフト値を1だけ大きくしてもよい。
bdShift2 = (nTbH>1 && nTbW>1) ? 5 + log2TransformRange - BitDepth : 6 + log2TransformRange - BitDepth
(非分離変換)
逆非分離変換は、動画像復号装置31において、TUの一部又は全領域の変換係数に対して適用される。逆非分離変換が適用された後の変換係数に対して、逆分離変換(DCT2及びDST7等)が適用される。また、TUを4x4のサブブロックに分割し、左上の所定のサブブロックのみに非分離変換及び逆非分離変換が適用される。TUの幅W、高さHのうち、一方が4であるTUのサイズは、例えば、4×4、8×4、4×8、L×4及び4×L(Lは16以上の自然数)が挙げられる。
また、分離変換後の変換係数において一部の低周波数成分のみを伝送する技術をRST(Reduced Secondary Transform)変換、もしくはLFNST(Low Frequency Non-Separable-Transform)と呼ぶ。非分離変換の非ゼロ変換係数の数nonZeroSizeが分離変換のサイズ((1<<log2StSize)x(1<<log2StSize))以下である場合、LFNSTと呼ぶ。
(S2000:非分離変換インデックスの復号)
TU復号部3024は、符号化データから分離変換の変換行列を示すインデックスmts_idxを
復号する。mts_idxはlfnst_idxのあとに復号し、lfnst_idxが0の場合のみ、mtx_idxを復
号する構成であってもよい。つまり、非分離変換を用いない場合(lfnst_idxが0)のみ、mtx_idx!=0で示されるDCT2以外の変換行列を用いる構成でもよい。
また、TU復号部3024は、符号化データからインデックスlfnst_idxを復号する。lfnst_idxは非分離変換の利用の有無、及び、変換行列を示すインデックスである。TU復号部3024はフラグLfnstDcOnlyとフラグLfnstZeroOutSigCoeffFlagを導出する。LfnstDcOnlyは変換係数がDCのみであるかを示すフラグ、LfnstZeroOutSigCoeffFlagは所定の高周波数領域(ゼロアウト領域)に変換係数が存在するかを示すフラグである。TU復号部3024は、LfnstDcOnly==0かつLfnstZeroOutSigCoeffFlag==1のときに、lfnst_idxを復号する。ここでLfnstDcOnly==0はDC係数以外の変換係数があることを示す。LfnstZeroOutSigCoeffFlag==1はゼロアウト領域に非ゼロ変換係数がないことを示す。TU復号部3024は、TUの残差residualを復号する前に、LfnstDcOnly=1、LfnstZeroOutSigCoeffFlag=1にセットする。ラスト係数の位置がDC以外(lastSubBlock==0 && lastScanPos>0)の場合、LfnstDcOnly=0にセットする。高周波数領域にラスト位置がある場合、LfnstZeroOutSigCoeffFlag=0にセットする。高周波数領域にラスト位置がある場合は、例えば、(lastScanPos>7 && (log2TbWidth==2 || log2TbWidth==3)を満たす場合である。TU復号部3024はlfnst_idxを復号しない場合、lfnst_idx=0にセットする。
TU復号部3024は、予測モードがイントラ予測モード、かつ、sps_lfnst_enabled_flagが1の場合、lfnst_idxを復号する。なお、lfnst_idxは、0の場合、非分離変換の非適用を
示し、1の場合、非分離変換行列のセット(ペア)のうち一方の変換を利用することを示
し、2の場合、ペアのうち他方の変換を利用することを示す。
(変換行列の導出)
逆非分離変換部31121は、変換処理で用いる変換行列secTransMatrix[][]を導出する。
具体的には、逆非分離変換部31121は、予測モードがイントラ予測の場合、イントラ予
測モードIntraPredModeから、lfnstTrSetIdを導出する。lfnstTrSetIdは、非分離変換の
変換行列のセットを示す番号である。
非分離変換は、予め定められた複数の変換行列を用いることができ、イントラ予測モードやGPMのモードから、適切な変換行列を選択することで好適な変換が可能になる。
逆非分離変換部31121は、イントラ予測モードIntraPredModeから、テーブルを用いて非分離変換の行列、ここでは変換行列のセット番号(lfnstTrSetId)を導出する。テーブルがnstSetTableIntraの配列の場合、以下のルックアップテーブルを用いてlfnstTrSetIdを導出してもよい。
lfnstTrSetIdx = nstSetTableIntra[IntraPredMode]
nstSetTableIntra[] = {2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2,, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 1, 2}
(S2201:変換サイズ及び入出力サイズの設定)
逆非分離変換では、TUのサイズ(幅W、高さH)に応じて、逆非分離変換のサイズ(4x4又
は8x8)、出力の変換係数の数、適用する変換係数の数及び逆非分離変換を適用するサブ
ブロックの数を導出する。4x4、8x8の逆非分離変換のサイズをnStSize=4、8で示す。また、4x4、8x8の逆非分離変換のサイズは、各々RST4x4、RST8x8と呼んでもよい。以下では、nStOutSizeは出力の変換係数の数、nonZeroSizeは適用する変換係数(入力の変換係数)の数、numStX、numStYは逆非分離変換を適用するサブブロックの数を表わす。
逆非分離変換では、TUが所定のサイズ以上の場合、RST8x8の逆非分離変換により、48の変換係数を出力する。それ以外の場合、RST4x4の逆非分離変換により、16の変換係数を出力する。TUが4x4の場合、8の変換係数からRST4x4を用いて16の変換係数を導出し、TUが8x8の場合には、8の変換係数からRST8x8を用いて48の変換係数を導出する。それ以外の場合には、TUのサイズに応じて16の変換係数から16もしくは48の変換係数を出力する。
W及びHが両方とも8以上の場合、log2StSize = 3、nStOutSize=48
上記以外の場合、log2StSize = 2、nStOutSize=16
nStSize = 1<<log2StSize
W及びHが両方とも4の場合、又は8x8の場合、nonZeroSize = 8
上記以外の場合、nonZeroSize = 16
なお、LFNSTの入力nonZeroSizeは8と16に限定されない。例えば12などでもよい。出力nStOutSizeも16と48に限定されず、32や36、64などでもよい。
numStX = (nTbH == 4 && nTbW > 8) ? 2 : 1
numStY = (nTbW == 4 && nTbH > 8) ? 2 : 1
なお複数のサブブロックに非分離変換を行わず常にnumStX=numStYとしてもよい。
(S2202:1次元配列に並び替え)
逆非分離変換部31121は、TUの一部の変換係数d[][]を一度、1次元配列u[]に並び替え
て処理する。具体的には、逆非分離変換部31121は、領域RUによって示される対象TUの2
次元の変換係数d[][]から、x = 0..nonZeroSize-1の変換係数を参照して、u[]を導出する。xC、yCはTU上の位置であり、スキャン順を示す配列DiagScanOrderと配列u[]の位置xから導出する。xSbIdx、ySbIdxはサブブロックアドレスである。
xC = (xSbIdx<<log2StSize) + DiagScanOrder[log2StSize][log2StSize][x][0]
yC = (ySbIdx<<log2StSize) + DiagScanOrder[log2StSize][log2StSize][x][1]
u[x] = d[xC][yC]
なお、1次元配列にコピーされる範囲を領域RUと呼ぶ。
(S2203:変換処理の適用)
逆非分離変換部31121は、長さがnonZeroSizeのu[]に対して、変換行列secTransMatrix[][]を用いた変換を行い、出力として長さがnStOutSizeの一次元配列の係数v[]を導出する。
逆非分離変換部31121は、以下の式に示すように、変換行列と一次元変数u[]との積和演算を行う。
v[i] = Clip3(CoeffMin, CoeffMax,Σ(secTransMatrix[i][j]*u[j]+64)>>7)
ここで、Σはj=0..nonZeroSize-1までの和である。また、iは0..nStSize-1に対して処理
を行う。CoeffMin、CoeffMaxは変換係数の値の範囲を示す。
(S2204:変換処理後の1次元配列の2次元配置)
逆非分離変換部31121は、変換された一次元配列の係数v[]を再度TU内の所定の位置に配置する。配置方法は、predModeIntraに応じて、変更してもよい。
具体的には、predModeIntra<=34の場合、以下の処理を適用してもよい。
d[x][y] = (y<4) ? v[x+(y<<log2StSize)] : ((x<4) ? v[32+x+((y-4)<<2)] : d[x][y])
それ以外の場合、以下の式を適用する。
d[x][y] = (x<4) ? v[y+(x<<log2StSize)] : ((y<4) ? v[32+y+((x-4) << 2)] : d[x][y])
図18は残差の復号、逆量子化、逆変換の処理を示す図である。すでに説明したように、残差dz[]は、TU復号部3024により1<<(log2CoeffRange+1)の幅の残差が復号される。逆量
子化部3111では、逆量子化されてdnc[][]が得られる。逆量子化部3111は、さらにbdShift
1により右シフトし、クリップにより変数のレンジを1<<(log2TransformRange+1)の幅に制限しd[][]を得る。逆変換部3112は、d[][]を垂直変換し、7で右シフトし、クリップによ
り変数のレンジを1<<(log2TransformRange+1)の幅に制限しg[][]を得る。逆変換部3112は、得られたg[][]を水平変換し、さらにbdShift2の右シフトにより差分画像r[][]を得る。以下の実施形態では、高深度の場合には、bdShift1のシフト数を減らし、bdShift2のシフト数を大きくすることで、変換精度の精度が向上するが、その分、クリップのレンジを広くする必要がある。また、変換に入力される前の残差の幅も大きくする必要がある。以下の実施形態は、このレンジとシフトの値をどのように設定するかに特徴を有する。
(実施形態1:変換係数のレンジに応じた変換サイズの制限)
本実施形態の動画像符号化装置11、動画像復号装置10は、変換係数のレンジを拡張することを示すフラグextended_precision_processing_flagが有効を示す(例えば1)場合に
、変換ブロックの最大サイズを制限してもよい。
図20は、extended_precision_processing_flagに応じて、変換ブロックの最大サイズを制限する処理を示すフローチャートである。S3021で、extended_precision_processing_flagが有効ではない場合、S3022に遷移し、変換ブロックの最大サイズを制限しない。逆にextended_precision_processing_flagが有効な場合、S3023に遷移し、変換ブロックの最
大サイズを制限する。
例えば、パラメータ復号部302は、extended_precision_processing_flagが有効である
場合、変換ブロックの最大サイズMaxTbSizeYを32以下(MaxTbSizeYの対数値MaxTbLog2SizeYは5以下)となるようにクリップしてもよい。
MaxTbSizeY = extended_precision_processing_flag ? Min(32, MaxTbSizeY) : MaxTbSizeY
MaxTbLog2SizeY = extended_precision_processing_flag ? Min(5, MaxTbLog2SizeY) : MaxTbLog2SizeY
図21は、extended_precision_processing_flagに応じて、変換サイズを制限する処理を示すフローチャートである。S3021A1で、extended_precision_processing_flagが有効で
はない場合、S3021A2に遷移する。そして、sps_max_luma_transform_size_TX_flagが有効であるか否かを判定する。sps_max_luma_transform_size_TX_flagは、所定の変換ブロッ
クの最大サイズTX(TXは例えば64、128)を使うか否かを示すフラグである。判定が有効
の場合、S3022Aに遷移し、変換ブロックの最大サイズをTXに設定する。S3021Aでextended_precision_processing_flagが有効な場合、もしくは、S3021A2でsps_max_luma_transform_size_TX_flagが有効ではない場合、S3023Aに遷移し、変換ブロックの最大サイズをTX/2に設定する。
より具体的には、パラメータ復号部302は、extended_precision_processing_flagが有
効ではない場合(例えば0)に限り、変換ブロックの最大サイズを示す変数MaxTbSizeY(
対数値はMaxTbLog2SizeY)として所定の最大サイズ(例えば64、対数値は6)を使うよう
にしてもよい。つまり、パラメータ復号部302は、符号化データから復号したsps_max_luma_transform_size_TX_flagが有効である場合に、さらにextended_precision_processing_flagが有効ではない場合のみ最大サイズTXを使ってもよい。TX=64の場合は下記で示される。
MaxTbLog2SizeY = sps_max_luma_transform_size_64_flag && extended_precision_processing_flag==0 ? 6 : 5
MaxTbSizeY = 1 << MaxTbLog2SizeY
上記のように、パラメータ復号部302は、sps_max_luma_transform_size_TX_flagが有効かつextended_precision_processing_flagが無効の場合、所定の変換ブロックの最大サイズを示す値TX(例えば64、対応値は6)を最大サイズMaxTbSizeYとして設定してもよい。
それ以外の場合に、所定の最大サイズより小さい値(例えば32、対数値は5)をMaxTbSizeYとして設定してもよい。
また、所定の最大サイズの対数値は6(64x64)によらず、7(128x128)や8(256x256)であってもよい。例えば、128x128変換を所定の最大サイズとする構成では、パラメータ復号部302は符号化データからsps_max_luma_transform_size_128_flagを復号して、最大サイズを以下のように導出してもよい。sps_max_luma_transform_size_128_flagは所定の変換ブロックの最大サイズとして128を使うか否かを示すフラグである。
MaxTbLog2SizeY = sps_max_luma_transform_size_128_flag && extended_precision_processing_flag==0 ? 7 : 6
MaxTbSizeY = 1 << MaxTbLog2SizeY
例えば、256x256変換を所定の最大サイズとする構成では、パラメータ復号部302は符号化データからsps_max_luma_transform_size_256_flagを復号して、最大サイズを以下のように導出してもよい。sps_max_luma_transform_size_256_flagは所定の変換ブロックの最大サイズとして256を使うか否かを示すフラグである。
MaxTbLog2SizeY = sps_max_luma_transform_size_256_flag && extended_precision_processing_flag==0 ? 8 : 7
MaxTbSizeY = 1 << MaxTbLog2SizeY
TU復号部3024は、以下のように、cIdxの値、SubWidthC、SubHeightCに応じて、最大変
換サイズmaxTbWidth、maxTbHeightを導出する。cIdxは色コンポーネントを示すインデッ
クスである。SubWidthC、SubHeightCは色差の色サブサンプリングを示す変数である。
maxTbWidth = (cIdx==0) ? MaxTbSizeY : MaxTbSizeY / SubWidthC
maxTbHeight = (cIdx==0) ? MaxTbSizeY : MaxTbSizeY / SubHeightC
図22は、TU復号部3024の復号処理を示すシンタックステーブルである。TU復号部3024は、CUの残差を復号する際に、変換ツリー(図のtransform_tree())を再帰的に復号する。具体的には、変換ツリーのサイズtbWidth、tbHeightの何れかが、最大サイズMaxTbSizeY、MaxTbSizeYを超える場合(tbWidth>MaxTbSizeY || tbHeight>MaxTbSizeY)、変換ツリーの幅もしくは高さを半分に設定して、変換ツリーを再度復号する。逆に、tbWidth、tbHeightの双方がMaxTbSizeY、MaxTbSizeYを超えない場合には、TU復号部3024はtbWidth、tbHeightのサイズの変換ユニット(図ではtransform_unit)を復号する。
transform_unit(x0, y0, tbWidth, tbHeight, treeType, 0, chType)
transform_unitは残差を示す符号化データである。なお、TU復号部3024は以下の式で、垂直方向を先に分割するか否かを示すフラグverSplitFirstを導出し、verSplitFirstが1の場合にtbWidthを1/2とし、verSplitFirstが0の場合にtbHeightを1/2としてもよい。
verSplitFirst = (tbWidth>MaxTbSizeY && tbWidth>tbHeight) ? 1 : 0
trafoWidth = verSplitFirst ? (tbWidth/2) : tbWidth
trafoHeight = !verSplitFirst ? (tbHeight/2) : tbHeight
TU復号部3024は導出された変換サイズtrafoWidth、trafoHeightと左上座標(x0, y0)を
用いて、transform_treeを2つに分割し得られる1つ目のtransform_treeを復号する。
transform_tree(x0, y0, trafoWidth, trafoHeight, treeType, chType)
さらに、TU復号部3024は導出された変換サイズtrafoWidth、trafoHeightと、左上座標(x0+tbWidth, y0)もしくは(x0, y0+tbHeight)を用いて、transform_treeを2つに分割して得られる2つ目のtransform_treeを復号する。なおverSplitFirstが1の場合に、左上座標を(x0+tbWidth, y0)、それ以外の場合に(x0, y0+tbHeight)を用いる。このように、CUの残差の符号化データであるtransform_unitを復号する際にtransform_treeのノードを用いてCUを再帰的に分割する、これにより、残差のブロックサイズ(変換ブロックのサイズ、変換ユニットのサイズ)を上記、sps_max_luma_transform_size_TX_flagや、extended_precision_processing_flagから導出される最大サイズTX以下に制限することができる。エントロピー復号部301はtransform_unitで示されるtbWidth、tbHeightのサイズの量子化変換ブロックを復号する。
(ライスパラメータ導出)
係数の絶対値を表すシンタックス要素の内、abs_remainder、dec_abs_levelは、ゴロム・ライス符号(またはライス符号)でバイナリ化された値を、バイパス復号(CABACの等確率復号)により復号される。abs_remainderは変換係数の絶対値のオフセットに対する差分であり、dec_abs_levelは変換係数の絶対値である。
なお、ゴロム・ライス符号は、シンタックス要素を前半部(プリフィックス)と後半(リマインダー、サフィックス)の2つの部分に分割して符号化する。プリフィックスには0に近い値を短い符号量で符号化可能なアルファ符号(unary符号)を用いる。サフィックスにはライスパラメータcRiceParamを用いた固定長バイナリゼーションもしくはEG(k)バイナリゼーションを用いる。ライスパラメータが大きいほど、小さな値のビット長はより長く、大きな値のビット長がより短くなる特性がある。シンタックス要素の値の大きさの発生確率に応じて、ライスパラメータを調整することで符号量の削減が可能である。
現在のTUの左上座標を(x0,y0)、現在のスキャン位置を(xC,yC)、TUの幅と高さのlog2の値をそれぞれlog2TbWidth、log2TbHeightとする。また係数の絶対値を格納する配列を、
位置(x,y)を用いてAbsLevel[x][y]で表す。図17(a)はabs_remainder、または、dec_abs_levelを復号する際に用いる、係数の周りの復号済係数の位置を示している。周りの係数の絶対値和を表す変数をlocSumAbsとすると、TU復号部3024はRRCにおいてlocSumAbsを以下のように導出する。
locSumAbs = 0
if(xC < (1<<log2TbWidth)-1) {
locSumAbs += AbsLevel[xC+1][yC]
if(xC < (1<<log2TbWidth)-2)
locSumAbs += AbsLevel[xC+2][yC]
if(yC < (1<<log2TbHeight)-1)
locSumAbs += AbsLevel[xC+1][yC+1]
}
if(yC < (1<<log2TbHeight)-1) {
locSumAbs += AbsLevel[xC][yC+1]
if(yC < (1<<log2TbHeight)-2)
locSumAbs += AbsLevel[xC][yC+2]
}
locSumAbs0 = locSumAbs
locSumAbs = Clip3(0, 31, locSumAbs-baseLevel*5)
1) 係数位置(xC+1,yC)がブロック内にある(xC<(1<<log2TbWidth)-1)とき、locSumAbsにt1(AbsLevel[xC+1][yC])の値を加える。ブロック内にない時はHistValueを加えてもよい。
2) 1)のとき、さらに位置(xC+2,yC)がブロック内にある(xC<(1<<log2TbWidth)-2)とき、locSumAbsにt2(AbsLevel[xC+2][yC])の値を加える。ブロック内にない時はHistValueを加えてもよい。
3) 1)のときさらに位置(xC+1,yC+1)がブロック内にある(yC<(1<<log2TbHeigh)-1)とき、locSumAbsにt3(AbsLevel[xC+1][yC+1])の値を加える。ブロック内にない時はHistValueを加えてもよい。
4) 位置(xC,yC+1)がブロック内にある(yC<(1<<log2TbHeight)-1)とき、locSumAbsに
t4(AbsLevel[xC][yC+1])の値を加える。ブロック内にない時はHistValueを加えてもよい

5) 4)のときさらに位置(xC,yC+2)がブロック内にある(yC<(1<<log2TbHeight)-2)
とき、locSumAbsにt5(AbsLevel[xC][yC+2])の値を加える。ブロック内にない時はHistValueを加えてもよい。
以上の処理から計算されたlocSumAbsを変数baseLevelとクリップ処理によって以下のように更新する。
locSumAbs = Clip3(0, 31, locSumAbs-baseLevel*5)
ここでbaseLevelは、abs_remainderを復号するとき(tcoeff==0)は4、dec_abs_levelを復
号するとき(tcoeff==1)は0としてもよい。tcoeffは復号対象がabs_remainderであるか、dec_abs_levelであるかを示す変数である。
テーブルRiceParamTblを用いて、導出されたlocSumAbsからabs_remainder、dec_abs_levelの復号に用いられるライスパラメータcRiceParamを導出する。
cRiceParam = RiceParamTbl[locSumAbs]
RiceParamTbl[]=0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3}
上記はライスパラメータ拡張(以下ライス拡張)を行わない場合であり、ライスパラメータcRiceParamは、0から3の値をとる。
なお、フラグsps_rrc_rice_extension_flagが有効を示す場合、以下の処理を行う。こ
の場合、shiftValの加算などによって、ライスパラメータcRiceParamは、0から3の値を超える値を用いることができる。なお、レンジ拡張を行う場合(extended_precision_processing_flag==1)や、非分離変換を行う場合(sps_lfnst_enabled_flag==1、lfnst_idxが0以外)には、以下のStatCoeffの導出、localSumAbsを用いたshiftValの導出、shiftValによるcRiceParamの更新処理を行わなくてもよい。sps_rrc_rice_extension_flagはバイナリゼーションに使用するライスパラメータの拡張が有効か否かを示すフラグである。
TU復号部3024は以下の疑似コードを用いて、符号化データのresidual_codingからabs_reminderとdec_abs_levelを復号する。また、TU復号部3024はStatCoeffを導出する。updateHistはsps_persistent_rice_adaptation_enabled_flagを参照して、残差(TU)単位で0または1に初期化される。sps_persistent_rice_adaptation_enabled_flag=1の場合、updateHistは1に初期化され、以下の処理が行われる。TUで最初の0より大きいabs_remainderもしくはdec_abs_levelの対数値をStatCoeffに保存する(StatCoeffの値を更新する)。更新する際に現在のStatCoeff[cIdx]の値と平均化することで、変動を抑える。なお、sps_persistent_rice_adaptation_enabled_flagはバイナリゼーションに使用するライスパラメータを、各TUの先頭で初期化するか否かを示すフラグである。
lastScanPos = numSbCoeff
lastSubBlock = (1 << (log2TbWidth + log2TbHeight - (log2SbW + log2SbH))) - 1
HistValue = sps_persistent_rice_adaptation_enabled_flag ? (1 << StatCoeff[cIdx]) : 0
updateHist = sps_persistent_rice_adaptation_enabled_flag ? 1 : 0
if(abs_level_gtx_flag[n][1]) {
abs_remainder[n]
if(updateHist && abs_remainder[n] > 0) {
StatCoeff[cIdx] = (StatCoeff[cIdx] + Floor(Log2(abs_remainder[n])) + 2) >>
1
updateHist = 0
}
}
...
if(sb_coded_flag[xS][yS]) {
dec_abs_level[n]
if(updateHist && dec_abs_level[n] > 0) {
StatCoeff[cIdx] = (StatCoeff[cIdx] + Floor(Log2(dec_abs_level[n]))) >> 1
updateHist = 0
}
}
StatCoeff[idx]は以下のように初期化される。
StatCoeff[idx] = (bitDepth > 10) ? (2 * Floor(Log2(bitDepth - 10)) : 0
sps_persistent_rice_adaptation_enabled_flag=0の場合、StatCoeff[idx]は0に設定され、更新されない。
TU復号部3024は、sps_rrc_rice_extension_flagとlocalSumAbsの値に応じてshiftValを導出する。
if(!sps_rrc_rice_extension_flag) {
shiftVal = 0
}else {
shiftVal = (localSumAbs < Tx[0]) ? Rx[0] : ((localSumAbs < Tx[1]) ? Rx[1] : ((localSumAbs < Tx[2]) ? Rx[2] : ((localSumAbs < Tx[3]) ? Rx[3] : Rx[4])))
}
ここで、Rx[]、Tx[]は以下のテーブルである。
Tx[ ] = {32, 128, 512, 2048}
Rx[ ] = {0, 2, 4, 6, 8}
TU復号部3024は、以下の処理からcRiceParamを導出する。
locSumAbs = locSumAbs >> shiftVal
locSumAbs = Clip3(0, 31, locSumAbs - baseLevel * 5)
cRiceParam = RiceParamTbl[locSumAbs]
TU復号部3024は、ライス拡張を行う場合には0以外になりえる値shiftValを加算し、cRiceParamを更新する。
cRiceParam = cRiceParam + shiftVal
TU復号部3024は、TSRCにおいて周りの復号済係数を用いず、ライスパラメータcRiceParamを常に1にセットする。また、sps_ts_residual_coding_rice_present_in_sh_flagが1の場合、スライスヘッダでsh_ts_residual_coding_rice_idx_minus1を符号化、復号してよい。その場合、以下の式で導出する。sh_ts_residual_coding_rice_idx_minus1を符号化、復号しない場合には0でinferする。sps_ts_residual_coding_rice_present_in_sh_flagはsh_ts_residual_coding_rice_idx_minus1がスライスヘッダに存在するか否かを示すフ
ラグである。sh_ts_residual_coding_rice_idx_minus1はTSRCで使用するライスパラメー
タを規定するパラメータである。
cRiceParam = sh_ts_residual_coding_rice_idx_minus1 + 1
逆量子化・逆変換部311は、tbWidth、tbHeightのサイズの量子化変換ブロックを逆量子化する。そして、変換サイズで指定された変換基底を用いて変換する。
(abs_remainderとdec_abs_levelの復号)
TU復号部3024は、符号化データから、ライスパラメータcRiceParamを用いて、残差絶対値のシンタックス値(abs_remainderもしくはdec_abs_level、以下残差と記す)を復号する。当該シンタックスのバイナリゼーションには、プリフィックスとサフィックスとから構成される符号を用いる。プリフィックスとサフィックスとして、ゴロムライス符号のアルファ符号と固定長バイナリゼーションを用いてもよい。サフィックスはEG(k)(Exponential-Golomb code)符号を用いてもよい。なお、ゴロムライス符号では、プリフィックスをprefixValTRとsuffixValTRに分けて符号化し、EG(k)符号では、サフィックスをexp部のexpValとescape部のescapeValに分けて符号化する。残差を1<<cRiceParam、((1<<expVal))-1)<<cRiceParamで割った商は各々prefixValTRとexpValを用いて符号化される。残差を1<<cRiceParam、(1<<expVal<<cRiceParam)で割った余りは、各々suffixValTR、escapeValを用いて符号化される。つまり、残差は以下の様に符号化される。
((prefixValTR + ((1<<(expVal) -1) ) << cRiceParam) + suffixValTR + escapeVal 残差が所定の値cMax以下の場合には、prefixValTRとsuffixValTRだけが符号化される。
prefixVal = (prefixValTR<<cRiceParam) + suffixValTR
残差が所定の値より大きい場合(suffixValが存在する場合)、cMaxと等しいprefixValを示すprefixValTRに加えてexpValとescapeValが符号化される。
prefixVal = (prefixValTR<<cRiceParam) = cMax
suffixVal = (((1<<expVal)-1)<<cRiceParam) + escapeVal
ここでは残差は以下で表せる。プリフィックスだけで表せる場合の残差は下式である。
残差=((prefixValTR) << cRiceParam) + suffixValTR
それ以外(プリフィックスだけで表せない場合、もしくは、prefixValTR=6)の場合の残
差は下式である。
残差=((prefixValTR + (1<<(expVal)-1 ) << cRiceParam) + escapeVal
また以下のように、prefixVal、suffixValを定義してもよい。
prefixVal = (prefixValTR << cRiceParam) + suffixValTR
suffixVal = (((2<<expVal)-2 << cRiceParam) + escapeVal
上記構成によれば、変換係数のレンジが大きくなる場合(extended_precision_processing_flag==1)に、変換サイズを所定のサイズ以下に制限するため、変換係数のレンジが大きい場合にハードウェア回路の規模を小さくすることができる。この効果は、量子化パラメータに依存せず常に得ることができる。また、変換係数のレンジが大きくならない場合(extended_precision_processing_flag==0)、変換サイズを所定のサイズ以下に制限せず、大きいサイズを使用可能とする。従って、変換係数のレンジが大きくならない場合、符号化効率の低下は生じない効果を奏する。
(実施形態1の続き:変換係数のレンジに応じた非分離変換の制限)
上記、変換係数のレンジ拡張と大きな変換サイズの排他処理を、変換係数のレンジ拡張と非分離変換(特にLFNST)に用いてもよい。
CU符号化部1112(TU符号化部1114)、CU復号部3022(TU復号部3024)は、変換レンジを拡張することが示される場合、非分離変換を行うことを示すフラグを使用しないと設定し
てもよい。例えば、非分離変換(LFNST)を行うことを示すフラグがApplyLfnstFlagの場合
、lfnst_idxを用いて以下のように導出してもよい。
ApplyLfnstFlag[0] = (lfnst_idx > 0) && extended_precision_processing_flag
また、ApplyLfnstFlagを輝度色差別に導出する場合、ApplyLfnstFlag[cIdx]を以下のように導出してもよい。
treeType == SINGLE_TREE or DUAL_TREE_LUMAの場合
ApplyLfnstFlag[0] = (lfnst_idx > 0) && !extended_precision_processing_flag ? 1
: 0
cIdx=1,2に対して次の処理を行う。
ApplyLfnstFlag[cIdx] = (lfnst_idx > 0 && treeType == DUAL_TREE_CHROMA && !extended_precision_processing_flag) ? 1 : 0
また、lfnst_idxを符号化、復号する条件に、!extended_precision_processing_flag(extended_precision_processing_flag==0)を加え、lfnst_idxを符号化、復号しない場合には、lfnst_idx=0とinferしてもよい。
(変形例)
上記、変換係数のレンジ拡張と大きな変換サイズとの排他は、以下のようにシンタックスレベルの排他を用いてもよい。
図27は、変換係数のレンジ拡張と、大変換サイズおよび非分離変換の排他を示すシンタックステーブルである。
図27(a)に示す通り、ヘッダ符号化部1110及びヘッダ復号部3020は、フラグsps_max_luma_transform_size_64_flagが有効を示す場合には、フラグextended_precision_processing_flagを符号化・復号しない。sps_max_luma_transform_size_64_flagは大変換サイズ(ここでは64変換)を用いるか否かを示すフラグである。extended_precision_processing_flagは変換係数のレンジを拡張するか否かを示すフラグである。符号化、復号しない場合、extended_precision_processing_flagは利用しないことを示す値(0)をinferする。
図示しないが、ヘッダ符号化部1110及びヘッダ復号部3020は、extended_precision_processing_flagが有効を示す場合には、sps_max_luma_transform_size_64_flagを符号化・復号しない方法でもよい。符号化、復号しない場合には、sps_max_luma_transform_size_64_flagは利用しないことを示す値(0)をinferする。
上記構成によれば、変換係数のレンジ拡張と大きな変換はシンタックスレベルで排他に扱うことができるため、符号化装置、復号装置の処理を簡略化できる。レンジ拡張を利用しない場合、大きな変換が利用でき、大きな変換を行わない場合、レンジ拡張が利用できるため、排他による符号化効率の低下は最小限になるという効果を奏する。大変換は量子化パラメータが比較的大きい、中から低ビットレートの場合に好適である。レンジ拡張は量子化パラメータが小さい、高ビットレートの場合に好適である。
(変形例のライス拡張の例)
上記は変換係数のレンジ拡張であるが、ライス拡張においても変換係数の復号が複雑化するため、後続の処理である変換を簡略化することが適当である。そのため、ライス拡張と、各種変換処理の排他を行ってもよい。大きな変換サイズとの排他は、以下のようにシンタックスレベルの排他を用いてもよい。
図28は、変換係数のライス拡張と、大変換サイズおよび非分離変換の排他を示すシンタックステーブルである。
図28(a)に示す通り、ヘッダ符号化部1110及びヘッダ復号部3020は、フラグsps_max_luma_transform_size_64_flagが有効を示す場合、sps_rrc_rice_extension_flagやsps_persistent_rice_adaptation_enabled_flagを符号化・復号しない。符号化、復号しない場合には、sps_rrc_rice_extension_flag、sps_persistent_rice_adaptation_enabled_flagは利用しないことを示す値(0)をinferする。sps_max_luma_transform_size_64_flagは大変換サイズ(ここでは64変換)を用いるか否かを示すフラグである。sps_rrc_rice_extension_flagやsps_persistent_rice_adaptation_enabled_flagは変換係数のライス拡張を示すフラグである。
(変形例2)
上記排他は、変換係数のレンジ拡張と非分離変換(特にLFNST)に用いてもよい。
図27(b)に示す通り、ヘッダ符号化部1110及びヘッダ復号部3020は、フラグsps_lfnst_enabled_flagが有効を示す場合、フラグextended_precision_processing_flagを符号化・復号しない。符号化、復号しない場合、extended_precision_processing_flagは利用しないことを示す値(0)をinferする。sps_lfnst_enabled_flagは非分離変換(ここではセカンダリ変換のLFNST)を用いるか否かを示すフラグである。extended_precision_processing_flagは変換係数のレンジ拡張を示すフラグである。
図示しないが、ヘッダ符号化部1110及びヘッダ復号部3020は、extended_precision_processing_flagが有効を示す場合には、sps_lfnst_enabled_flagを符号化・復号しない方法でもよい。符号化、復号しない場合には、sps_lfnst_enabled_flagは利用しないことを示す値(0)をinferする。
図28(b)に示す通り、ヘッダ符号化部1110及びヘッダ復号部3020は、フラグsps_lfnst_enabled_flagが有効を示す場合には、sps_rrc_rice_extension_flagやsps_persistent_rice_adaptation_enabled_flagを符号化・復号しない。符号化、復号しない場合、sps_rrc_rice_extension_flagやsps_persistent_rice_adaptation_enabled_flagは利用しないことを示す値(0)をinferする。sps_lfnst_enabled_flagは非分離変換(ここではセカンダリ変換のLFNST)を用いるか否かを示すフラグである。sps_rrc_rice_extension_flagやsps_persistent_rice_adaptation_enabled_flagは変換係数のライス拡張を示すフラグである。
上記構成によれば、変換係数のレンジ拡張と大きな変換はシンタックスレベルで排他的に通知するため、符号化装置、復号装置の処理を簡略化できる。レンジ拡張を利用しない場合には非分離変換が利用でき、非分離変換を行わない場合には、レンジ拡張が利用できるため、これらのシンタックス要素を排他的に通知することによる符号化効率の低下は最小限になるという効果を奏する。
(変形例1+2)
大変換サイズと非分離変換の両者を変換係数レンジ拡張と排他にしてもよい。
図27(c)に示す通り、ヘッダ符号化部1110及びヘッダ復号部3020は、sps_max_luma_transform_size_64_flagもしくはsps_lfnst_enabled_flagが有効を示す場合、フラグextended_precision_processing_flagを符号化・復号しない。符号化、復号しない場合、extended_precision_processing_flagは利用しないことを示す値(0)をinferする。sps_max_luma_transform_size_64_flagは大変換サイズか否かを示すフラグ、sps_lfnst_enabled_flagは非分離変換(ここではセカンダリ変換のLFNST)を用いるか否かを示すフラグである。extended_precision_processing_flagは変換係数のレンジ拡張を示すフラグである。
図示しないが、ヘッダ符号化部1110及びヘッダ復号部3020は、extended_precision_processing_flagが有効を示す場合、sps_lfnst_enabled_flagとsps_lfnst_enabled_flagを符号化・復号しない方法であってもよい。符号化、復号しない場合、sps_lfnst_enabled_flag、sps_lfnst_enabled_flagは利用しないことを示す値(0)をinferする。
図28(c)に示す通り、ヘッダ符号化部1110及びヘッダ復号部3020は、sps_max_luma_transform_size_64_flagもしくはsps_lfnst_enabled_flagが有効を示す場合、sps_rrc_rice_extension_flagやsps_persistent_rice_adaptation_enabled_flagを符号化・復号しない。符号化、復号しない場合、sps_rrc_rice_extension_flagは利用しないことを示す値(0)をinferする。sps_max_luma_transform_size_64_flagは大変換サイズを用いるか否かを示すフラグ、sps_lfnst_enabled_flagは非分離変換(ここではセカンダリ変換のLFNST)を用いるか否かを示すフラグである。sps_rrc_rice_extension_flag、sps_persistent_rice_adaptation_enabled_flagは変換係数がライス拡張されるか否かを示すフラグである。
(実施形態2:変換のサイズが所定のサイズ以上の場合において、変換のレンジを拡張しない)
本実施形態の動画像符号化装置11、動画像復号装置10は、変換ブロックのサイズに応じて変換係数のレンジを拡張してもよい。
図23は、extended_precision_processing_flagと変換ブロックのサイズnTbW、nTbHに応じて、変換係数レンジを拡張する処理を示すフローチャートである。S3021B1で、extended_precision_processing_flagが有効である場合、S3021B2に遷移し、変換ブロックのサイズが所定の最大サイズTX未満であるかを判定する。判定がYESの場合に、S3022Bに遷移し、変換係数レンジを拡張する。例えばビットデプスに応じてlog2TransformRange=bitDepth+BDOFFSETに設定する。log2TransformRangeは変換係数のレンジを示すパラメータである。S3021B1で、extended_precision_processing_flagが有効ではない場合、もしくは、S3021B2で変換ブロックのサイズが所定の最大サイズTX未満ではない場合、S3023Bに遷移し、変換係数レンジを拡張しない。例えば、log2TransformRange=15に設定する。
TU復号部3024は、transform_unitもしくは残差ブロックのサイズtbWidth、tbHeightが
所定の最大サイズTX以上(もしくは所定の最大サイズと等しい)の場合、extended_precision_processing_flagが有効(==1)でも、変換係数のレンジを示す変数の値を大きくしない。extended_precision_processing_flagは変換係数のレンジを拡張することを示すフラグである。
以下のように、TU復号部3024は、残差のブロックサイズnTbW、nTbHextended_precision_processing_flagに応じて、以下のようにlog2TransformRangeを導出する。
log2TransformRange = extended_precision_processing_flag && nTbW<TX && nTbH<TX ? Max(15, BitDepth+BDOFFSET) : 15 (式R-1TXA)
また、TU復号部3024は、以下の式で導出してもよい。
log2TransformRange = extended_precision_processing_flag && nTbW<=TX/2 && nTbH<=TX/2 ? Max(15, BitDepth+BDOFFSET) : 15 (式R-1TXB)
つまり、nTbW、nTbHが所定のサイズTX未満である場合にだけ、実際の変換係数のレンジをビットデプスに依存して拡張する。
ここでTXは、64、128、256などであってもよい。
また、TX=64の場合、パラメータ復号部302は符号化データからsps_max_luma_transform_size_64_flagを復号して、変換サイズの最大値を以下のように導出してもよい。sps_max_luma_transform_size_64_flagは所定の変換ブロックの最大サイズとして64を使うか否かを示すフラグである。
MaxTbLog2SizeY = sps_max_luma_transform_size_64_flag ? 6 : 5
つまり、TU復号部3024は、以下の式で導出してもよい。
log2TransformRange = extended_precision_processing_flag && nTbW<64 && nTbH<64 ? Max(15, BitDepth+BDOFFSET) : 15 (式R-1T64A)
また、TU復号部3024は、以下の式で導出してもよい。
log2TransformRange = extended_precision_processing_flag && nTbW<=32 && nTbH<=32 ? Max(15, BitDepth+BDOFFSET) : 15 (式R-1T64B)
別の例として、TX= MaxTbLog2SizeYの場合、パラメータ復号部302は符号化データからsps_max_luma_transform_size_TX_flagを復号して、変換サイズの最大値を以下のように導出してもよい。sps_max_luma_transform_size_TX_flagは所定の変換ブロックの最大サイズとしてTXを使うか否かを示すフラグである。
MaxTbLog2SizeY = sps_max_luma_transform_size_TX_flag ? log2(TX) : log2(TX)-1
また、TU復号部3024は変換サイズの最大値を以下の式で導出してもよい。
log2TransformRange = extended_precision_processing_flag && nTbW<(1<<MaxTbLog2SizeY) && nTbH<(1<<MaxTbLog2SizeY) ? Max(15, BitDepth+BDOFFSET) : 15 (式R-1TV)
すでに説明したように、変換係数のクリップのレンジCoeffMin、CoeffMax、bdShift1, bdShift2、maxPreExtLenについても、log2TransformRangeに応じて導出してもよい。
上記において、すでに説明したように、変換係数のレンジを拡張する場合においても、変換係数のレンジの最大値を所定の値(ここでは20)以下にクリップしてもよい。つまり、実施形態に記載のMax(15, BitDepth + BDOFFSET) : 15をMin(Max(15, BitDepth + BDOFFSET), 20) : 15に置き替えてもよい。
また、以下のように変数ExtendedPrecisionFlagを、nTbW、nTbHとextended_precision_processing_flagに応じて導出し、ExtendedPrecisionFlagを用いて、log2TransformRange
、CoeffMin、CoeffMax、bdShift1, bdShift2maxPreExtLenを導出してもよい。ExtendedPrecisionFlagは実際に変換係数のレンジ拡張を行うか否かを示す変数である。
ExtendedPrecisionFlag = extended_precision_processing_flag && nTbW<TX && nTbH<TX ? l : 0
また、以下でもよい。
ExtendedPrecisionFlag = extended_precision_processing_flag && nTbW<=TX/2 && nTbH<=TX/2 ? l : 0
また、以下でもよい。
ExtendedPrecisionFlag = extended_precision_processing_flag && nTbW<64 && nTbH<64 ? l : 0
ExtendedPrecisionFlag = extended_precision_processing_flag && nTbW<=32 && nTbH<=32 ? l : 0
この場合、TU復号部3024は、nTbW, nTbHに応じて導出されたExtendedPrecisionFlagを
用いてlog2TransformRangeを導出する。
log2TransformRange = ExtendedPrecisionFlag ? Max(15, BitDepth+BDOFFSET) : 15
(式R-1TV)
すでに説明したように、変換係数のレンジを拡張する場合、変換係数のレンジの最大値を所定の値(ここでは20)以下にクリップしてもよい。
log2TransformRange = ExtendedPrecisionFlag? Min(Max(15, BitDepth+BDOFFSET), 20) : 15
上記構成によれば、変換サイズが大きい場合であっても、変換係数のレンジ拡張を示すシンタックス要素が有効を示す(extended_precision_processing_flag==1)場合に、実
際に用いる変換サイズを所定のサイズ以下に制限する。そのため、ハードウェア回路の規模を小さくすることができる。この効果は量子化パラメータに依存せず常に得ることができる。また、変換係数のレンジが大きくならない場合(extended_precision_processing_flag==0)には、変換サイズを所定のサイズ以下に制限せず、大きいサイズを使用可能とするため、符号化効率の低下は生じない効果を奏する。
(実施形態3:ビットストリーム制限)
本実施形態の動画像符号化装置11の符号化する符号化データ、動画像復号装置10が復号する符号化データは、extended_precision_processing_flagが有効を示す(例えば1)場
合に、変換ブロックの最大サイズを制限することを、コンフォーマンス制限として備えてもよい。extended_precision_processing_flagは変換係数のレンジを拡張することを示すフラグである。
具体的には、動画像復号装置10は以下のビットストリーム制限をコンフォーマンス制限として備える符号化データを復号してもよい。
extended_precision_processing_flagが1の場合には、nTbW=64もしくはnTbH=64の変換
ブロックを用いてはならない。
コンフォーマンス制限は以下でもよい。
extended_precision_processing_flagが1の場合、変換ブロックのサイズnTbW、nTbHの
いずれもが32以下でなくてはならない。
あるいは、コンフォーマンス制限の以下のいずれかでもよい。
extended_precision_processing_flagが1の場合、sps_max_luma_transform_size_TX_flagは0でなくてはならない。
sps_max_luma_transform_size_TX_flagが1の場合、extended_precision_processing_flagは0でなくてはならない。
sps_max_luma_transform_size_TX_flagとextended_precision_processing_flagがどち
らも1であることを禁止する。
sps_max_luma_transform_size_TX_flagとextended_precision_processing_flagのいず
れかが0でなくてはならない。
上記の構成の動画像復号装置10及び動画像符号化装置11によれば、変換サイズが所定のサイズ以下の場合、変換係数のレンジを拡張した符号化データのみを復号・符号化すればよいので、ハードウェア回路の規模を小さくすることができる効果を奏する。
(ビットストリーム制限の変形例)
上記排他は、変換係数のレンジ拡張と非分離変換(特にLFNST)に用いてもよい。例え
ば以下の制限であってよい。
動画像復号装置10、動画像符号化装置11は以下のビットストリーム制限をコンフォーマンス制限として備える符号化データを復号、符号化してもよい。
extended_precision_processing_flagが1の場合、sps_lfnst_enabled_flaは0でなくて
はならない。
sps_lfnst_enabled_flagが1の場合、extended_precision_processing_flagは0でなくてはならない。
sps_lfnst_enabled_flagとextended_precision_processing_flagがどちらも1であるこ
とを禁止する。
sps_lfnst_enabled_flagとextended_precision_processing_flagのいずれかが0でなく
てはならない。
また、大変換サイズと非分離変換の両者を変換係数レンジ拡張と排他としてもよい。動画像復号装置10、動画像符号化装置11は以下のビットストリーム制限をコンフォーマンス制限として備える符号化データを復号、符号化してもよい。
sps_max_luma_transform_size_64_flagが1もしくはsps_lfnst_enabled_flagが1の場合
、extended_precision_processing_flagは0でなくてはならない
extended_precision_processing_flagが1の場合、sps_max_luma_transform_size_64_flagが0かつsps_lfnst_enabled_flagが0でなくてはならない。
また、大変換サイズと非分離変換は、ライス拡張と排他としてもよい。動画像復号装置10、動画像符号化装置11は以下のビットストリーム制限をコンフォーマンス制限として備える符号化データを復号、符号化してもよい。
sps_max_luma_transform_size_64_flagが1の場合、sps_rrc_rice_extension_flagは0でなくてはならない。
sps_max_luma_transform_size_64_flagが1の場合、sps_persistent_rice_adaptation_enableは0でなくてはならない。
sps_lfnst_enabled_flagが1の場合、sps_rrc_rice_extension_flagは0でなくてはなら
ない。
sps_lfnst_enabled_flagが1の場合、sps_persistent_rice_adaptation_enableは0でな
くてはならない。
sps_max_luma_transform_size_64_flagが1もしくはsps_lfnst_enabled_flagが1の場合
、sps_rrc_rice_extension_flagは0でなくてはならない
sps_max_luma_transform_size_64_flagが1もしくはsps_lfnst_enabled_flagが1の場合
、sps_persistent_rice_adaptation_enableは0でなくてはならない
sps_rrc_rice_extension_flagが1の場合、sps_max_luma_transform_size_64_flagが0かつsps_lfnst_enabled_flagが0でなくてはならない。
sps_persistent_rice_adaptation_enableが1の場合、sps_max_luma_transform_size_64_flagが0かつsps_lfnst_enabled_flagが0でなくてはならない。
(実施形態4:ブロックサイズが大きい場合だけ変換係数依存シフトを用いる構成)
図24は、extended_precision_processing_flagと変換ブロックのサイズnTbW、nTbHに応じて、変換係数レンジを拡張するか、変換係数に応じてシフト値を可変に設定するかを切り替える処理を示すフローチャートである。S3021C1で、extended_precision_processing_flagが有効ではない場合、S3024Cに遷移し、変換係数レンジを拡張しない。例えば、S3024Cにおいて、TU復号部3024もしくはTU符号化部1114は、変換係数のレンジを示す変数log2TransformRangeを通常の値15に設定する。この場合、復号される残差の変換係数のレンジ(例えば後述のLog2ResidualRange)に依存せずシフト値bdShift1、bdShift2を導出する。Log2ResidualRangeは符号化データを復号して得られる残差(変換係数)の大きさを示す変数、つまり、スケーリング前の変換係数の実際のレンジを示す変数である。
log2TransformRange = 15
CoeffMin = -(1 << log2TransformRange)
CoeffMax = (1 << log2TransformRange) - 1
bdShift1 = BitDepth + rectNonTsFlag +(((Log2(nTbW)+Log2(nTbH))/2) + 10 - log2TransformRange + sh_dep_quant_used_flag
bdShift2 = (nTbH>1 && nTbW>1) ? 5 + log2TransformRange - BitDepth : 6 + log2TransformRange - BitDepth
S3021C1で、extended_precision_processing_flagが有効である場合、S3021C2に遷移し、変換ブロックのサイズが所定の最大サイズTX未満であるかを判定する。S3021C2の判定がYESの場合、S3022Cに遷移し、ビットデプスに応じて変換係数レンジを拡張する。例えばS3022Cにおいて、TU復号部3024もしくはTU符号化部1114は、log2TransformRange = bitDepth+BDOFFSETに設定する。(式R-1)に限定されず、(式R-1A)、(式R-1B)...(式R-1TXA)... (式R-1TV)などの変形例を利用してもよい。そして、変換係数に依存せずシフト値bdShift1、bdShift2を導出する。
log2TransformRange = bitDepth + BDOFFSET
CoeffMin = -(1 << log2TransformRange)
CoeffMax = (1 << log2TransformRange) - 1
bdShift1 = BitDepth + rectNonTsFlag +(((Log2(nTbW)+Log2(nTbH))/2) + 10 - log2TransformRange + sh_dep_quant_used_flag
bdShift2 = (nTbH>1 && nTbW>1) ? 5 + log2TransformRange - BitDepth : 6 + log2TransformRange - BitDepth
S3021C2の判定がNOの場合、つまり、変換ブロックのサイズが所定の最大サイズTX未満で
はない場合、S3023Cに遷移し、変換係数レンジlog2TransformRangeを拡張せず、変換係数に応じてシフト値bdShift1、bdShift2を導出する。S3023Cにおいて、TU復号部3024もしくはTU符号化部1114は、スケーリング前の変換係数に応じて導出される変数Log2ResidualRangeを用いて、例えば、以下のようにシフト値を導出する。
log2TransformRange = 15
CoeffMin = -(1 << log2TransformRange)
CoeffMax = (1 << log2TransformRange) - 1
bdShift1 = BitDepth + rectNonTsFlag +(((Log2(nTbW)+Log2(nTbH))/2) + 10 - Log2ResidualRange + sh_dep_quant_used_flag
bdShift2 = (nTbH>1 && nTbW>1) ? 5 + Log2ResidualRange - BitDepth : 6 + Log2ResidualRange - BitDepth
まとめると、TU復号部3024もしくはTU符号化部1114は、以下の式を用いてパラメータを
導出してもよい。maxRangeは後述する残差(変換係数)の大きさから導出される変数である。
log2TransformRange = extended_precision_processing_flag && (nTbW<TX && nTbH<TX) && bitDepth>10 ? bitDepth+6 : 15
CoeffMin = -(1 << log2TransformRange)
CoeffMax = (1 << log2TransformRange) - 1
Log2ResidualRange = extended_precision_processing_flag && (nTbW>=TX || nTbH>=TX)&& bitDepth>10 ? Ceil(maxRange) : log2TransformRange
bdShift1 = BitDepth + rectNonTsFlag +(((Log2(nTbW)+Log2(nTbH))/2) + 10 - Log2ResidualRange + sh_dep_quant_used_flag
bdShift2 = (nTbH>1 && nTbW>1) ? 5 + Log2ResidualRange - BitDepth : 6 + Log2ResidualRange - BitDepth
また、さらに以下のように非分離変換をするかをブロックサイズに依存して導出してもよい。
ApplyLfnstFlag[0] = (lfnst_idx > 0) && ((extended_precision_processing_flag ==0) || (nTbW >= TX || nTbH >= TX))
つまり、extended_precision_processing_flag==0の場合や変換ブロックのサイズが所定
の最大サイズTX未満ではない場合は、lfnst_idxの値に応じて非分離変換を行うが、それ
以外の場合には、非分離変換を行わないのでApplyLfnstFlag[0]=0とする。
またlfnst_idxを符号化、復号する条件に、((extended_precision_processing_flag==0) || (nTbW>=TX || nTbH>=TX))を加え、符号化、復号しない場合にはlfnst_idx=0とinferしてもよい。
上記図24の構成によれば、ブロックサイズが大きい時だけ、変換係数の値域を分析し、変換係数のシフト値を実際の変換係数の大きさに応じて設定することにより、複雑度やレイテンシを低減させることができる効果を奏する。一般にブロックサイズが大きいほど処理に余裕がある。処理に余裕がないブロックサイズが小さい場合、変換係数の値域の分析を行わない。またブロックサイズが大きい場合、変換係数のレンジの拡張を行わないため、レイテンシに伴う複雑度が大きくなることを防ぐことができる。
(実施形態5:ブロックサイズが小さい場合だけ変換係数依存シフトを用いる構成)
実施形態5は実施形態4と同種の構成であるが、変換係数依存シフト(実際の変換係数の大きさのレンジに応じたシフト)を用いる場合の条件が異なる。
図25は、extended_precision_processing_flagと変換ブロックのサイズnTbW、nTbHに応じて、変換係数レンジを拡張するか、変換係数に応じてシフト値を可変に設定するかを切り替える処理を示す別のフローチャートである。S3021D1で、TU復号部3024もしくはTU符
号化部1114は、extended_precision_processing_flagが有効ではない場合、S3024Dに遷移し、変換係数レンジを拡張しない。例えばlog2TransformRange=15に設定する。
log2TransformRange = 15
CoeffMin = -(1 << log2TransformRange)
CoeffMax = (1 << log2TransformRange) - 1
bdShift1 = BitDepth + rectNonTsFlag +(((Log2(nTbW)+Log2(nTbH))/2) + 10 - log2TransformRange + sh_dep_quant_used_flag
bdShift2 = (nTbH>1 && nTbW>1) ? 5 + log2TransformRange - BitDepth : 6 + log2TransformRange - BitDepth
この場合、TU復号部3024もしくはTU符号化部1114は変換係数に依存せずシフト値を導出する。
S3021D1で、extended_precision_processing_flagが有効である場合、S3021D2に遷移し、変換ブロックのサイズが所定の最大サイズTX未満であるかを判定する。S3021D2の判定がNOの場合、S3022Dに遷移し、変換係数レンジを拡張する。S3022Dにおいて、TU復号部3024もしくはTU符号化部1114は、例えばビットデプスに応じてlog2TransformRange=bitDepth+BDOFFSETに設定し、変換係数に依存せずシフト値を導出する。
log2TransformRange=bitDepth + BDOFFSET
CoeffMin = -(1 << log2TransformRange)
CoeffMax = (1 << log2TransformRange) - 1
bdShift1 = BitDepth + rectNonTsFlag +(((Log2(nTbW)+Log2(nTbH))/2) + 10 - Log2TransformRange + sh_dep_quant_used_flag
bdShift2 = (nTbH>1 && nTbW>1) ? 5 + log2TransformRange - BitDepth : 6 + log2TransformRange - BitDepth
S3021D2の判定がYES、つまり、変換ブロックのサイズが所定の最大サイズTX未満である場合、TU復号部3024もしくはTU符号化部1114は変換係数レンジlog2TransformRangeを拡張せず、変換係数に応じてシフト値bdShift1、bdShift2を導出する。具体的には、S3023Dにおいて、TU復号部3024もしくはTU符号化部1114は、Log2ResidualRangeに応じて、例えば、
以下のように導出する。Log2ResidualRangeは符号化データから復号される変換係数を参
照して導出される変数である。
log2TransformRange = 15
CoeffMin = -(1 << log2TransformRange)
CoeffMax = (1 << log2TransformRange) - 1
bdShift1 = BitDepth + rectNonTsFlag +(((Log2(nTbW)+Log2(nTbH))/2) + 10 - Log2ResidualRange + sh_dep_quant_used_flag
bdShift2 = (nTbH>1 && nTbW>1) ? 5 + Log2ResidualRange - BitDepth : 6 + Log2ResidualRange - BitDepth
ただし、ビットデプスが16ビットの場合、16ビットに制限するのは難しいため、変換係数のレンジlog2TransformRangeを以下としてもよい。
log2TransformRange = BitDepth == 16 ? 16: 15
bdShift1 = BitDepth + rectNonTsFlag +(((Log2(nTbW)+Log2(nTbH))/2) + 10 - Log2ResidualRange + sh_dep_quant_used_flag
bdShift2 = (nTbH>1 && nTbW>1) ? 5 + Log2ResidualRange - BitDepth : 6 + Log2ResidualRange - BitDepth
まとめると、TU復号部3024もしくはTU符号化部1114は、以下の式においてシフト値を導出してもよい。ここで、maxRangeは後述する残差(変換係数)の大きさから導出される変数である。
log2TransformRange = extended_precision_processing_flag && (nTbW>=TX && nTbH>=TX) && bitDepth>10 ? bitDepth + 6 : 15
CoeffMin = -(1 << log2TransformRange)
CoeffMax = (1 << log2TransformRange) - 1
Log2ResidualRange = extended_precision_processing_flag && (nTbW<TX && nTbH<TX)&& bitDepth>10 ? Ceil(maxRange) : log2TransformRange
bdShift1 = BitDepth + rectNonTsFlag +(((Log2(nTbW)+Log2(nTbH))/2) + 10 - Log2ResidualRange + sh_dep_quant_used_flag
bdShift2 = (nTbH>1 && nTbW>1) ? 5 + Log2ResidualRange - BitDepth : 6 + Log2ResidualRange - BitDepth
また、さらに以下のように非分離変換をするかをブロックサイズに依存して導出してもよい。
ApplyLfnstFlag[0] = (lfnst_idx > 0) && ((extended_precision_processing_flag ==0) || (nTbW < TX && nTbH < TX))
つまり、extended_precision_processing_flag == 0の場合や変換ブロックのサイズが所
定の最大サイズTX未満である場合は、lfnst_idxの値に応じて非分離変換を行うが、それ
以外の場合には、非分離変換を行わないのでApplyLfnstFlag[0] = 0とする。
またlfnst_idxを符号化、復号する条件に、((extended_precision_processing_flag ==0) || (nTbW < TX && nTbH < TX))を加え、符号化、復号しない場合にはlfnst_idx=0とinferしてもよい。
上記図25の構成によれば、ブロックサイズが小さい時だけ変換係数のシフト値を、変換係数の値域の分析から可変的に設定することにより、分析に必要な一時メモリのサイズを低減させることができる効果を奏する。一般にブロックサイズが小さいほどメモリ増加での影響が小さい。またブロックサイズが小さい場合、変換係数のレンジの拡張を行うことから、符号化効率を高く保つことができる。
図24の構成と図25の構成は、レイテンシが重視される設計か、メモリサイズが重視される設計かに応じて選択することが好ましい。レイテンシ的には図24の構成が高速であり、メモリサイズ的には図25の構成が小メモリである。
(実施形態4と実施形態5のより具体的な構成例)
図26は、本発明の実施形態のTU復号部3024、逆量子化・逆変換部311の構成を示すブロ
ック図である。TU復号部3024のRRC部30241は、残差復号部30242、残差レンジ導出部30243、変換係数レンジ導出部30244から構成される。逆量子化・逆変換部311は、逆量子化部3111(スケーリング部31111、係数クリップ部31112)、逆コア変換部31123(垂直変換部31123、中間クリップ部31124、水平変換部31125)から構成される。残差復号部30242、逆量
子化・逆変換部311はすでに説明済みであるので、ここでは、残差レンジ導出部30243、変換係数レンジ導出部30244の動作を説明する。
残差レンジ導出部30243は、スケーリングのシフト値を導出するために、スケーリング
前の変換係数の値域を導出する。具体的には、幅nTbW、高さnTbHの残差ブロックの変換係数の絶対値AbsLevel[xC][yC]の最大値maxLevelを導出してもよい。
maxLevel = 0
for (yC in 0..nTbH-1) {
for (xC in 0..nTbW-1) {
if (maxLevel < AbsLevel[xC][yC]) {
maxLevel = AbsLevel
}
}
}
あるいは残差レンジ導出部30243は、、幅nTbW、高さnTbHの残差ブロックの変換係数TransCoeffLevel[x0][y0][cIdx][xC][yC]の絶対値の最大値maxLevelを導出してもよい。
maxLevel = 0
for (yC in 0..nTbH-1) {
for (xC in 0..nTbW-1) {
if (maxLevel < Abs(TransCoeffLevel[x0][y0][cIdx][xC][yC]) {
maxLevel = Abs(TransCoeffLevel[x0][y0][cIdx][xC][yC])
}
}
}
なお、レンジが2の指数で表現される場合、通例-N~N-1までの間をとりえることから、残差レンジ導出部30243は、残差が正か負かを区別してmaxLevelを求めてもよい。
maxLevel = 0
for (yC in 0..nTbH-1) {
for (xC in 0..nTbW-1) {
if (TransCoeffLevel[x0][y0][cIdx][xC][yC] > 0) {
if maxLevel < TransCoeffLevel[x0][y0][cIdx][xC][yC])
maxLevel = TransCoeffLevel[x0][y0][cIdx][xC][yC]
}
}
if (TransCoeffLevel[x0][y0][cIdx][xC][yC] < 0) {
if maxLevel < -TransCoeffLevel[x0][y0][cIdx][xC][yC]-1)
maxLevel = -TransCoeffLevel[x0][y0][cIdx][xC][yC]-1
}
}
}
}
また、残差レンジ導出部30243は、以下を用いてmaxLevelを導出してもよい。
maxLevel = 0
for (yC in 0..nTbH-1) {
for (xC in 0..nTbW-1) {
if (maxLevel < TransCoeffLevel[x0][y0][cIdx][xC][yC]) {
maxLevel = TransCoeffLevel[x0][y0][cIdx][xC][yC]
}
if (maxLevel < -TransCoeffLevel[x0][y0][cIdx][xC][yC]-1) {
maxLevel = -TransCoeffLevel[x0][y0][cIdx][xC][yC]-1
}
}
}
を用いてもよい。この場合、-N~N-1のレンジにおいて、maxLevel=N-1となるため最後にmaxLevel=maxLevel+1としてもよい。
また残差レンジ導出部30243は、以下を用いてmaxLevelを導出してもよい。
maxLevel = 0
for (yC in 0..nTbH-1) {
for (xC in 0..nTbW-1) {
if (maxLevel < TransCoeffLevel[x0][y0][cIdx][xC][yC]+1) {
maxLevel = TransCoeffLevel[x0][y0][cIdx][xC][yC]+1
}
if (maxLevel < -TransCoeffLevel[x0][y0][cIdx][xC][yC]) {
maxLevel = -TransCoeffLevel[x0][y0][cIdx][xC][yC]
}
}
}
また、上記においてmaxLevelは、色コンポーネントごとに求めてもよい。この場合、変数maxLevelの代わりにmaxLevel[cIdx]の配列を用いる。またブロックの左上位置(x0, y0)に依存して導出してもよい。この場合、maxLevel[cIdx][x0][y0]を用いる。
変換係数レンジ導出部30244は、変換係数の最大値の対数値Log2ResidualRangeを以下の式で導出する。
Log2ResidualRange=Ceil(maxLevel)
また、さらにクリップによってLog2ResidualRangeを所定の範囲に納めてもよい。
Log2ResidualRange = Clip(0, 15, Log2ResidualRange)
また、ビットデプスが16ビットの場合において、16ビットに制限するのは難しいため、ビットデプスが16ビットの場合には16ビットに制限してもよい。
Log2ResidualRange = Clip(0, (BitDepth == 16 ? 16 : 15), Log2ResidualRange)
変換係数レンジ導出部30244は、Log2ResidualRangeを用いて、シフト値bdShift1、bdShift2を以下の式で導出してもよい。
bdShift1 = BitDepth + rectNonTsFlag +(((Log2(nTbW)+Log2(nTbH))/2) + 10 - Log2ResidualRange + sh_dep_quant_used_flag
bdShift2 = (nTbH>1 && nTbW>1) ? 5 + Log2ResidualRange - BitDepth : 6 + Log2ResidualRange - BitDepth
逆量子化部3111のスケーリング部31111では、bdShift1によるシフトを用いて残差のス
ケーリングを行う。逆コア変換部31123の水平変換部31123でも同様に、bdShift2によるシフトを行って、BitDepth精度の残差画像を導出する。
なお、図24に照らし合わせて適応的な処理を説明する。
extended_precision_processing_flag==0の場合、変換係数レンジ導出部30244は変換係数レンジlog2TransformRangeをBitDepthに依存せずに固定の値として、例えば、以下の式を用いて導出する(S3024C)。
log2TransformRange = 15
bdShift1 = BitDepth + rectNonTsFlag +(((Log2(nTbW)+Log2(nTbH))/2) + 10 - log2TransformRange + sh_dep_quant_used_flag
bdShift2 = (nTbH>1 && nTbW>1) ? 5 + log2TransformRange - BitDepth : 6 + log2TransformRange - BitDepth
extended_precision_processing_flag==1かつ変換ブロックサイズが所定サイズ未満の
場合、変換係数レンジ導出部30244はlog2TransformRangeをBitDepth依存の値に拡張し、
例えば、以下の式を用いて導出する(S3022C)。
log2TransformRange = BitDepth + 6
bdShift1 = BitDepth + rectNonTsFlag +(((Log2(nTbW)+Log2(nTbH))/2) + 10 - log2TransformRange + sh_dep_quant_used_flag = rectNonTsFlag +(((Log2(nTbW)+Log2(nTbH))/2) + 4 + sh_dep_quant_used_flag
bdShift2 = (nTbH>1 && nTbW>1) ? 5 + log2TransformRange - BitDepth : 6 + log2TransformRange - BitDepth
extended_precision_processing_flag==1かつ変換ブロックサイズが所定サイズ以上の
場合、変換係数レンジ導出部30244はlog2TransformRangeをBitDepth依存の値に拡張せず
固定の値15とする。そして、シフト値を残差のレンジ(例えば残差の最大値の対数値Log2ResidualRange)に応じて導出する(S3023C)。例えば、以下の式を用いて導出する。
log2TransformRange = 15
bdShift1 = BitDepth + rectNonTsFlag +(((Log2(nTbW)+Log2(nTbH))/2) + 10 - Log2ResidualRange + sh_dep_quant_used_flag
bdShift2 = (nTbH>1 && nTbW>1) ? 5 + Log2ResidualRange - BitDepth : 6 + Log2ResidualRange - BitDepth
ただし上述したように、BitDepth==16の場合には、以下のようにレンジを拡張しても構わない。
log2TransformRange = BitDepth == 16 ? 16 : 15
図25に照らし合わせて適応的な処理を説明する。
extended_precision_processing_flag==0の場合、変換係数レンジ導出部30244は変換係数レンジlog2TransformRangeをBitDepth依存の値に拡張せずに固定の値として、例えば、以下の式を用いて導出する(S3024D)。
log2TransformRange = 15
bdShift1 = BitDepth + rectNonTsFlag +(((Log2(nTbW)+Log2(nTbH))/2) + 10 - log2TransformRange + sh_dep_quant_used_flag
bdShift2 = (nTbH>1 && nTbW>1) ? 5 + log2TransformRange - BitDepth : 6 + log2TransformRange - BitDepth
extended_precision_processing_flag==1かつ変換ブロックサイズが所定サイズ以上の
場合、変換係数レンジ導出部30244は以下の式を用いて、変換係数レンジlog2TransformRangeをBitDepth依存の値に拡張して、例えば、以下の式を用いて導出する(S3022D)。
log2TransformRange = BitDepth + 6
bdShift1 = BitDepth + rectNonTsFlag +(((Log2(nTbW)+Log2(nTbH))/2) + 10 - log2TransformRange + sh_dep_quant_used_flag
bdShift2 = (nTbH>1 && nTbW>1) ? 5 + log2TransformRange - BitDepth : 6 + log2TransformRange - BitDepth
extended_precision_processing_flag==1かつ変換ブロックサイズが所定サイズ未満の
場合、変換係数レンジ導出部30244は以下の式を用いて、変換係数レンジlog2TransformRangeをBitDepth依存の値に拡張せずに固定の値としながら、シフト値を残差のレンジLog2ResidualRangeに応じて導出する(S3023D)。例えば、以下の式を用いて導出する。
log2TransformRange = 15
bdShift1 = BitDepth + rectNonTsFlag +(((Log2(nTbW)+Log2(nTbH))/2) + 10 - Log2ResidualRange + sh_dep_quant_used_flag
bdShift2 = (nTbH>1 && nTbW>1) ? 5 + Log2ResidualRange - BitDepth : 6 + Log2ResidualRange - BitDepth
ただし上述したように、BitDepth==16の場合には、以下のようにレンジを拡張しても構わない。
log2TransformRange = BitDepth == 16 ? 16 : 15
逆量子化・逆変換部311は、エントロピー復号部301から入力された量子化変換係数をスケーリング(逆量子化)して変換係数d[][]を求める。この量子化変換係数は、符号化処
理において、予測誤差に対してDCT(Discrete Cosine Transform、離散コサイン変換)、DST(Discrete Sine Transform、離散サイン変換)等の変換を行い量子化して得られる係数である。逆量子化・逆変換部311はtransform_skip_flagが0の場合、スケーリング済み
の変換係数d[][]に対して、逆DCT、逆DST等の逆周波数変換を行い、予測誤差res[][]を算出する。逆量子化・逆変換部311はtransform_skip_flagが1の場合、res[x][y]=d[x][y]とする。逆量子化・逆変換部311は予測誤差を加算部312に出力する。
なお、逆変換及び変換は、対になる処理であるため、変換と逆変換とを互いに置き換えて解釈してもよい。あるいは、逆変換を変換と呼ぶ場合には、変換を順変換と呼んでもよい。例えば、逆非分離変換を非分離変換と呼ぶ場合、非分離変換は順非分離変換と呼んでもよい。また、分離変換を単に変換と呼ぶ。
加算部312は、予測画像生成部308から入力されたブロックの予測画像と逆量子化・逆変換部311から入力された予測誤差を画素毎に加算して、ブロックの復号画像を生成する。
加算部312はブロックの復号画像を参照ピクチャメモリ306に記憶し、また、ループフィルタ305に出力する。
(動画像符号化装置の構成)
次に、本実施形態に係る動画像符号化装置11の構成について説明する。図16は、本実施形態に係る動画像符号化装置11の構成を示すブロック図である。動画像符号化装置11は、予測画像生成部101、減算部102、変換・量子化部103、逆量子化・逆変換部105、加算部106、ループフィルタ107、予測パラメータメモリ(予測パラメータ記憶部、フレームメモリ)108、参照ピクチャメモリ(参照画像記憶部、フレームメモリ)109、符号化パラメータ決定部110、パラメータ符号化部111、エントロピー符号化部104を含んで構成される。
予測画像生成部101は画像Tの各ピクチャを分割した領域であるCU毎に予測画像を生成する。予測画像生成部101は既に説明した予測画像生成部308と同じ動作であり、説明を省略する。
減算部102は、予測画像生成部101から入力されたブロックの予測画像の画素値を、画像Tの画素値から減算して予測誤差を生成する。減算部102は予測誤差を変換・量子化部103
に出力する。
変換・量子化部103は、減算部102から入力された予測誤差に対し、周波数変換によって変換係数を算出し、量子化によって量子化変換係数を導出する。変換・量子化部103は、
量子化変換係数をエントロピー符号化部104及び逆量子化・逆変換部105に出力する。
逆量子化・逆変換部105は、動画像復号装置31における逆量子化・逆変換部311(図10)と同じであり、説明を省略する。算出した予測誤差は加算部106に出力される。
エントロピー符号化部104には、変換・量子化部103から量子化変換係数が入力され、パラメータ符号化部111から符号化パラメータが入力される。符号化パラメータは、例えば
、予測モードを示すpredModeである。predModeはイントラ予測を示すMODE_INTRA、インター予測を示すMODE_INTERのいずれでもよいし、MODE_INTRA、MODE_INTER、画面内のブロックをコピーして予測画像とするイントラブロックコピー予測を示すMODE_IBCであってもよい。
エントロピー符号化部104は、分割情報、予測パラメータ、量子化変換係数等をエント
ロピー符号化して符号化ストリームTeを生成し、出力する。
パラメータ符号化部111は、図示しないヘッダ符号化部1110、CT情報符号化部1111、CU
符号化部1112(予測モード符号化部)、及びインター予測パラメータ符号化部112とイン
トラ予測パラメータ符号化部113を備えている。CU符号化部1112はさらにTU符号化部1114
を備えている。
以下、各モジュールの概略動作を説明する。パラメータ符号化部111はヘッダ情報、分
割情報、予測情報、量子化変換係数等のパラメータの符号化処理を行う。
CT情報符号化部1111は、符号化データからQT、MT(BT、TT)分割情報等を符号化する。
CU符号化部1112はCU情報、予測情報、TU分割フラグ、CU残差フラグ等を符号化する。
TU符号化部1114は、TUに予測誤差が含まれている場合に、QP更新情報と量子化変換係数を符号化する。TU符号化部1114は、TU復号部3024で説明したように、TR符号とEG(k)符号
で残差を符号化する。つまり、TR符号、EG(k)符号に用いて、残差の絶対値を示すシンタ
ックス要素(abs_remainder、dec_abs_level)を符号化する。符号化に用いるライスパラメータの導出方法、TR符号のプリフィックスの最大値、exp部の最大長maxPreExtLen、escape部の長さtruncSuffixLenは、画像復号装置で説明した方法のいずれかを用いる。変換・量子化部103、逆量子化・逆変換部105も、画像復号装置で説明したような、CoeffMin, CoeffMax, bdShift1, bdShift2の値を用いることができる。
つまり、TU符号化部1114は、図26に示すように、変換ブロック中の復号装置における逆量子化・スケーリング前(符号化装置における量子化・スケーリング後)の変換係数の値の実際のレンジLog2ResidualRangeに応じて、適応的に、bdShift1、bdShift2を導出して
もよい。さらに、図24, 図25に示すように、extended_precision_flagと、変換ブロック
サイズnTbW、nTbHの大きさに依存して、変換係数のレンジlog2TransformRangeと、bdShift1、bdShift2を導出してもよい。
CT情報符号化部1111、CU符号化部1112は、インター予測パラメータ、イントラ予測パラメータ、量子化変換係数等のシンタックス要素をエントロピー符号化部104に供給する。
加算部106は、予測画像生成部101から入力されたブロックの予測画像の画素値と逆量子化・逆変換部105から入力された予測誤差を画素毎に加算して復号画像を生成する。加算
部106は生成した復号画像を参照ピクチャメモリ109に記憶する。
ループフィルタ107は加算部106が生成した復号画像に対し、デブロッキングフィルタ、SAO、ALFを施す。なお、ループフィルタ107は、必ずしも上記3種類のフィルタを含まな
くてもよく、例えばデブロッキングフィルタのみの構成であってもよい。
SAOは、サンプル単位で分類結果に応じたオフセットを加算するフィルタであり、ALFは、伝送したフィルタ係数と参照画像(もしくは参照画像と対象画素との差異)の積和を用いるフィルタである。
予測パラメータメモリ108は、符号化パラメータ決定部110が生成した予測パラメータを、対象ピクチャ及びCU毎に予め定めた位置に記憶する。
参照ピクチャメモリ109は、ループフィルタ107が生成した復号画像を対象ピクチャ及びCU毎に予め定めた位置に記憶する。
符号化パラメータ決定部110は、符号化パラメータの複数のセットのうち、1つのセット
を選択する。符号化パラメータとは、上述したQT、BTあるいはTT分割情報、予測パラメータ、あるいはこれらに関連して生成される符号化の対象となるパラメータである。予測画像生成部101は、これらの符号化パラメータを用いて予測画像を生成する。
符号化パラメータ決定部110は、複数のセットの各々について情報量の大きさと符号化
誤差を示すRDコスト値を算出する。符号化パラメータ決定部110は、算出したコスト値が
最小となる符号化パラメータのセットを選択する。これにより、エントロピー符号化部104は、選択した符号化パラメータのセットを符号化ストリームTeとして出力する。符号化パラメータ決定部110は決定した符号化パラメータを予測パラメータメモリ108に記憶する。
なお、上述した実施形態における動画像符号化装置11、動画像復号装置31の一部、例えば、エントロピー復号部301、パラメータ復号部302、ループフィルタ305、予測画像生成
部308、逆量子化・逆変換部311、加算部312、予測画像生成部101、減算部102、変換・量
子化部103、エントロピー符号化部104、逆量子化・逆変換部105、ループフィルタ107、符号化パラメータ決定部110、パラメータ符号化部111をコンピュータで実現するようにしてもよい。その場合、この制御機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによって実現してもよい。なお、ここでいう「コンピュータシステム」とは、動画像符号化装置11、動画像復号装置31の何れかに内蔵されたコンピュータシステムであって、OSや周辺機器等のハードウェアを含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD-ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間、動的にプログラムを保持するもの、その場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含んでもよい。また上記プログラムは、前述した機能の一部を実現するためのものであってもよく、さらに前述した機能をコンピュータシステムに既に記録されているプログラムとの組み合わせで実現できるものであってもよい。
また、上述した実施形態における動画像符号化装置11、動画像復号装置31の一部、又は全部を、LSI(Large Scale Integration)等の集積回路として実現してもよい。動画像符号化装置11、動画像復号装置31の各機能ブロックは個別にプロセッサ化してもよいし、一部、又は全部を集積してプロセッサ化してもよい。また、集積回路化の手法はLSIに限らず専用回路、又は汎用プロセッサで実現してもよい。また、半導体技術の進歩によりLSIに代替する集積回路化の技術が出現した場合、当該技術による集積回路を用いてもよい。
以上、図面を参照してこの発明の一実施形態について詳しく説明してきたが、具体的な構成は上述のものに限られることはなく、この発明の要旨を逸脱しない範囲内において様々な設計変更等をすることが可能である。
〔応用例〕
上述した動画像符号化装置11及び動画像復号装置31は、動画像の送信、受信、記録、再生を行う各種装置に搭載して利用することができる。なお、動画像は、カメラ等により撮像された自然動画像であってもよいし、コンピュータ等により生成された人工動画像(CG及びGUIを含む)であってもよい。
まず、上述した動画像符号化装置11及び動画像復号装置31を、動画像の送信及び受信に
利用できることを、図2を参照して説明する。
図2には、動画像符号化装置11を搭載した送信装置PROD_Aの構成を示したブロック図が
示されている。図に示すように、送信装置PROD_Aは、動画像を符号化することによって符号化データを得る符号化部PROD_A1と、符号化部PROD_A1が得た符号化データで搬送波を変調することによって変調信号を得る変調部PROD_A2と、変調部PROD_A2が得た変調信号を送信する送信部PROD_A3と、を備えている。上述した動画像符号化装置11は、この符号化部PROD_A1として利用される。
送信装置PROD_Aは、符号化部PROD_A1に入力する動画像の供給源として、動画像を撮像
するカメラPROD_A4、動画像を記録した記録媒体PROD_A5、動画像を外部から入力するための入力端子PROD_A6、及び、画像を生成又は加工する画像処理部A7を更に備えていてもよ
い。図においては、これら全てを送信装置PROD_Aが備えた構成を例示しているが、一部を省略しても構わない。
なお、記録媒体PROD_A5は、符号化されていない動画像を記録したものであってもよい
し、伝送用の符号化方式とは異なる記録用の符号化方式で符号化された動画像を記録したものであってもよい。後者の場合、記録媒体PROD_A5と符号化部PROD_A1との間に、記録媒体PROD_A5から読み出した符号化データを記録用の符号化方式に従って復号する復号部(
不図示)を介在させるとよい。
また、図2には、動画像復号装置31を搭載した受信装置PROD_Bの構成を示したブロック
図が示されている。図に示すように、受信装置PROD_Bは、変調信号を受信する受信部PROD_B1と、受信部PROD_B1が受信した変調信号を復調することによって符号化データを得る復調部PROD_B2と、復調部PROD_B2が得た符号化データを復号することによって動画像を得る復号部PROD_B3と、を備えている。上述した動画像復号装置31は、この復号部PROD_B3として利用される。
受信装置PROD_Bは、復号部PROD_B3が出力する動画像の供給先として、動画像を表示す
るディスプレイPROD_B4、動画像を記録するための記録媒体PROD_B5、及び、動画像を外部に出力するための出力端子PROD_B6を更に備えていてもよい。図においては、これら全て
を受信装置PROD_Bが備えた構成を例示しているが、一部を省略しても構わない。
なお、記録媒体PROD_B5は、符号化されていない動画像を記録するためのものであって
もよいし、伝送用の符号化方式とは異なる記録用の符号化方式で符号化されたものであってもよい。後者の場合、復号部PROD_B3と記録媒体PROD_B5との間に、復号部PROD_B3から
取得した動画像を記録用の符号化方式に従って符号化する符号化部(不図示)を介在させるとよい。
なお、変調信号を伝送する伝送媒体は、無線であってもよいし、有線であってもよい。また、変調信号を伝送する伝送態様は、放送(ここでは、送信先が予め特定されていない送信態様を指す)であってもよいし、通信(ここでは、送信先が予め特定されている送信態様を指す)であってもよい。すなわち、変調信号の伝送は、無線放送、有線放送、無線通信、及び有線通信の何れによって実現してもよい。
例えば、地上デジタル放送の放送局(放送設備等)/受信局(テレビジョン受像機等)は、変調信号を無線放送で送受信する送信装置PROD_A/受信装置PROD_Bの一例である。また、ケーブルテレビ放送の放送局(放送設備等)/受信局(テレビジョン受像機等)は、変調信号を有線放送で送受信する送信装置PROD_A/受信装置PROD_Bの一例である。
また、インターネットを用いたVOD(Video On Demand)サービスや動画共有サービス等のサーバ(ワークステーション等)/クライアント(テレビジョン受像機、パーソナルコンピュータ、スマートフォン等)は、変調信号を通信で送受信する送信装置PROD_A/受信装置PROD_Bの一例である(通常、LANにおいては伝送媒体として無線又は有線の何れかが用いられ、WANにおいては伝送媒体として有線が用いられる)。ここで、パーソナルコンピュータには、デスクトップ型PC、ラップトップ型PC、及びタブレット型PCが含まれる。また、スマートフォンには、多機能携帯電話端末も含まれる。
なお、動画共有サービスのクライアントは、サーバからダウンロードした符号化データを復号してディスプレイに表示する機能に加え、カメラで撮像した動画像を符号化してサーバにアップロードする機能を有している。すなわち、動画共有サービスのクライアントは、送信装置PROD_A及び受信装置PROD_Bの双方として機能する。
次に、上述した動画像符号化装置11及び動画像復号装置31を、動画像の記録及び再生に利用できることを、図3を参照して説明する。
図3には、上述した動画像符号化装置11を搭載した記録装置PROD_Cの構成を示したブロ
ック図が示されている。図に示すように、記録装置PROD_Cは、動画像を符号化することによって符号化データを得る符号化部PROD_C1と、符号化部PROD_C1が得た符号化データを記録媒体PROD_Mに書き込む書込部PROD_C2と、を備えている。上述した動画像符号化装置11
は、この符号化部PROD_C1として利用される。
なお、記録媒体PROD_Mは、(1)HDD(Hard Disk Drive)やSSD(Solid State Drive)等のように、記録装置PROD_Cに内蔵されるタイプのものであってもよいし、(2)SDメモリカードやUSB(Universal Serial Bus)フラッシュメモリ等のように、記録装置PROD_Cに
接続されるタイプのものであってもよいし、(3)DVD(Digital Versatile Disc:登録商標)やBD(Blu-ray Disc:登録商標)等のように、記録装置PROD_Cに内蔵されたドライブ
装置(不図示)に装填されるものであってもよい。
また、記録装置PROD_Cは、符号化部PROD_C1に入力する動画像の供給源として、動画像
を撮像するカメラPROD_C3、動画像を外部から入力するための入力端子PROD_C4、動画像を受信するための受信部PROD_C5、及び、画像を生成又は加工する画像処理部PROD_C6を更に備えていてもよい。図においては、これら全てを記録装置PROD_Cが備えた構成を例示しているが、一部を省略しても構わない。
なお、受信部PROD_C5は、符号化されていない動画像を受信するものであってもよいし
、記録用の符号化方式とは異なる伝送用の符号化方式で符号化された符号化データを受信するものであってもよい。後者の場合、受信部PROD_C5と符号化部PROD_C1との間に、伝送用の符号化方式で符号化された符号化データを復号する伝送用復号部(不図示)を介在させるとよい。
このような記録装置PROD_Cとしては、例えば、DVDレコーダ、BDレコーダ、HDD(Hard Disk Drive)レコーダ等が挙げられる(この場合、入力端子PROD_C4又は受信部PROD_C5が
動画像の主な供給源となる)。また、カムコーダ(この場合、カメラPROD_C3が動画像の
主な供給源となる)、パーソナルコンピュータ(この場合、受信部PROD_C5又は画像処理
部C6が動画像の主な供給源となる)、スマートフォン(この場合、カメラPROD_C3又は受
信部PROD_C5が動画像の主な供給源となる)等も、このような記録装置PROD_Cの一例であ
る。
また、図3には、上述した動画像復号装置31を搭載した再生装置PROD_Dの構成を示した
ブロック図が示されている。図に示すように、再生装置PROD_Dは、記録媒体PROD_Mに書き込まれた符号化データを読み出す読出部PROD_D1と、読出部PROD_D1が読み出した符号化データを復号することによって動画像を得る復号部PROD_D2と、を備えている。上述した動画像復号装置31は、この復号部PROD_D2として利用される。
なお、記録媒体PROD_Mは、(1)HDDやSSD等のように、再生装置PROD_Dに内蔵されるタイプのものであってもよいし、(2)SDメモリカードやUSBフラッシュメモリ等のように
、再生装置PROD_Dに接続されるタイプのものであってもよいし、(3)DVDやBD等のよう
に、再生装置PROD_Dに内蔵されたドライブ装置(不図示)に装填されるものであってもよい。
また、再生装置PROD_Dは、復号部PROD_D2が出力する動画像の供給先として、動画像を
表示するディスプレイPROD_D3、動画像を外部に出力するための出力端子PROD_D4、及び、動画像を送信する送信部PROD_D5を更に備えていてもよい。図においては、これら全てを
再生装置PROD_Dが備えた構成を例示しているが、一部を省略しても構わない。
なお、送信部PROD_D5は、符号化されていない動画像を送信するものであってもよいし
、記録用の符号化方式とは異なる伝送用の符号化方式で符号化された符号化データを送信するものであってもよい。後者の場合、復号部PROD_D2と送信部PROD_D5との間に、動画像を伝送用の符号化方式で符号化する符号化部(不図示)を介在させるとよい。
このような再生装置PROD_Dとしては、例えば、DVDプレイヤ、BDプレイヤ、HDDプレイヤ等が挙げられる(この場合、テレビジョン受像機等が接続される出力端子PROD_D4が動画
像の主な供給先となる)。また、テレビジョン受像機(この場合、ディスプレイPROD_D3
が動画像の主な供給先となる)、デジタルサイネージ(電子看板や電子掲示板等とも称され、ディスプレイPROD_D3又は送信部PROD_D5が動画像の主な供給先となる)、デスクトップ型PC(この場合、出力端子PROD_D4又は送信部PROD_D5が動画像の主な供給先となる)、ラップトップ型又はタブレット型PC(この場合、ディスプレイPROD_D3又は送信部PROD_D5が動画像の主な供給先となる)、スマートフォン(この場合、ディスプレイPROD_D3又は
送信部PROD_D5が動画像の主な供給先となる)等も、このような再生装置PROD_Dの一例で
ある。
(ハードウェア的実現及びソフトウェア的実現)
また、上述した動画像復号装置31及び動画像符号化装置11の各ブロックは、集積回路(ICチップ)上に形成された論理回路によってハードウェア的に実現してもよいし、CPU(Central Processing Unit)を用いてソフトウェア的に実現してもよい。
後者の場合、上記各装置は、各機能を実現するプログラムの命令を実行するCPU、上記
プログラムを格納したROM(Read Only Memory)、上記プログラムを展開するRAM(Random
Access Memory)、上記プログラム及び各種データを格納するメモリ等の記憶装置(記録媒体)等を備えている。そして、本発明の実施形態の目的は、上述した機能を実現するソフトウェアである上記各装置の制御プログラムのプログラムコード(実行形式プログラム、中間コードプログラム、ソースプログラム)をコンピュータで読み取り可能に記録した記録媒体を、上記各装置に供給し、そのコンピュータ(又はCPUやMPU)が記録媒体に記録されているプログラムコードを読み出し実行することによっても、達成可能である。
上記記録媒体としては、例えば、磁気テープやカセットテープ等のテープ類、フロッピー(登録商標)ディスク/ハードディスク等の磁気ディスクやCD-ROM(Compact Disc Read-Only Memory)/MOディスク(Magneto-Optical disc)/MD(Mini Disc)/DVD(Digital Versatile Disc:登録商標)/CD-R(CD Recordable)/ブルーレイディスク(Blu-ray Disc:登録商標)等の光ディスクを含むディスク類、ICカード(メモリカードを含む)/光カード等のカード類、マスクROM/EPROM(Erasable Programmable Read-Only Memory)/EEPROM(Electrically Erasable and Programmable Read-Only Memory:登録商標)/フラッシュROM等の半導体メモリ類、あるいはPLD(Programmable logic device)やFPGA(Field Programmable Gate Array)等の論理回路類等を用いることができる。
また、上記各装置を通信ネットワークと接続可能に構成し、上記プログラムコードを通信ネットワークを介して供給してもよい。この通信ネットワークは、プログラムコードを伝送可能であればよく、特に限定されない。例えば、インターネット、イントラネット、エキストラネット、LAN(Local Area Network)、ISDN(Integrated Services Digital Network)、VAN(Value-Added Network)、CATV(Community Antenna television/Cable Television)通信網、仮想専用網(Virtual Private Network)、電話回線網、移動体通信網、衛星通信網等が利用可能である。また、この通信ネットワークを構成する伝送媒体も、プログラムコードを伝送可能な媒体であればよく、特定の構成又は種類のものに限定されない。例えば、IEEE(Institute of Electrical and Electronic Engineers)1394、USB、電力線搬送、ケーブルTV回線、電話線、ADSL(Asymmetric Digital Subscriber Line)回線等の有線でも、IrDA(Infrared Data Association)やリモコンのような赤外線、BlueTooth(登録商標)、IEEE802.11無線、HDR(High Data Rate)、NFC(Near Field Communication)、DLNA(Digital Living Network Alliance:登録商標)、携帯電話網、衛星回線、地上デジタル放送網等の無線でも利用可能である。なお、本発明の実施形態は、上記プログラムコードが電子的な伝送で具現化された、搬送波に埋め込まれたコンピュータデータ信号の形態でも実現され得る。
本発明の実施形態は上述した実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能である。すなわち、請求項に示した範囲で適宜変更した技術的手段を組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。
本発明の実施形態は、画像データが符号化された符号化データを復号する動画像復号装置、及び、画像データが符号化された符号化データを生成する動画像符号化装置に好適に適用することができる。また、動画像符号化装置によって生成され、動画像復号装置によって参照される符号化データのデータ構造に好適に適用することができる。
31 動画像復号装置
301 エントロピー復号部
302 パラメータ復号部
3020 ヘッダ復号部
308 予測画像生成部
311 逆量子化・逆変換部
312 加算部
11 動画像符号化装置
101 予測画像生成部
102 減算部
103 変換・量子化部
104 エントロピー符号化部
105 逆量子化・逆変換部(スケーリング部)
107 ループフィルタ
110 符号化パラメータ決定部
111 パラメータ符号化部
1110 ヘッダ符号化部
1111 CT情報符号化部
1112 CU符号化部(予測モード符号化部)
1114 TU符号化部
311 逆量子化・逆変換部(スケーリング部)
3111 逆量子化部
3112 逆変換部
31123 逆コア変換部

Claims (10)

  1. 変換係数のレンジを拡張するかを示すフラグと、変換の最大サイズを示すシンタックス要素を復号し、変換の最大サイズを導出するヘッダ復号部と、
    変換係数のレンジを拡張する場合、ビットデプスに応じた変換係数のレンジを導出し、上記変換係数のレンジに応じて導出される第1シフト値を用いて、変換係数に量子化パラメータに依存する値をかけた値を右シフトするスケーリング部とを備え、
    上記ヘッダ復号部は、変換係数のレンジを拡張するかを示すフラグが有効である場合、変換の最大サイズを所定の値以下に制限することを特徴とする画像復号装置。
  2. 上記ヘッダ復号部は、変換の最大サイズを示すシンタックス要素が最大サイズを示す場合、変換係数のレンジを拡張するかを示すフラグを復号せず、無効として導出し、それ以外の場合、変換係数のレンジを拡張するかを示すフラグを復号することを特徴とする請求項1に記載の画像復号装置。
  3. 上記ヘッダ復号部は、変換係数のレンジを拡張するかを示すフラグが有効である場合、変換の最大サイズを所定の値以下に制限された符号化データを復号することを特徴とする請求項1に記載の画像復号装置。
  4. 変換係数のレンジを拡張するかを示すフラグと、非分離変換を行うか否かを示すシンタックス要素をするヘッダ復号部と、
    変換係数のレンジを拡張する場合、ビットデプスに応じた変換係数のレンジを導出し、上記変換係数のレンジに応じて導出される第1シフト値を用いて、変換係数に量子化パラメータに依存する値をかけた値を右シフトするスケーリング部とを備え、
    上記ヘッダ復号部は、変換係数のレンジを拡張するかを示すフラグが有効である場合、非分離変換を行わないことを特徴とする画像復号装置。
  5. 上記ヘッダ復号部は、非分離変換を行うことを示すシンタックス要素が有効を示す場合、変換係数のレンジを拡張するかを示すフラグを復号せず、無効として導出し、それ以外の場合、変換係数のレンジを拡張するかを示すフラグを復号することを特徴とする請求項4に記載の画像復号装置。
  6. 上記ヘッダ復号部は、非分離変換を行うことを示すフラグが有効である場合、変換係数のレンジを拡張しないように制限された符号化データを復号することを特徴とする請求項4に記載の画像復号装置。
  7. 変換係数のレンジを拡張するかを示すフラグと、変換の最大サイズを示すシンタックス要素を復号し、変換の最大サイズを導出するヘッダ復号部と、
    ライスパラメータを所定の範囲以上に拡張することが可能な残差復号部を備え、
    上記ヘッダ復号部は、変換係数のレンジを拡張するかを示すフラグが有効である場合、ライスパラメータを拡張しないように制限することを特徴とする画像復号装置。
  8. 上記ヘッダ復号部は、ライスパラメータを拡張するかを示すフラグが有効である場合、変換の最大サイズが所定の値以下に制限された符号化データを復号することを特徴とする請求項7に記載の画像復号装置。
  9. 変換係数のレンジを拡張するかを示すフラグと、変換の最大サイズを示すシンタックス要素を符号化し、変換の最大サイズを導出するヘッダ符号化部と、
    変換係数のレンジを拡張する場合に、ビットデプスに応じた変換係数のレンジを導出し、上記変換係数のレンジに応じて導出される第1シフト値を用いて、変換係数に量子化パ
    ラメータに依存する値をかけた値を右シフトするスケーリング部と、
    上記ヘッダ符号化部は、変換係数のレンジを拡張するかを示すフラグが有効である場合、変換の最大サイズを所定の値以下に制限することを特徴とする画像符号化装置。
  10. 変換係数のレンジを拡張するかを示すフラグと、非分離変換を行うか否かを示すシンタックス要素をするヘッダ符号化部と、
    変換係数のレンジを拡張する場合に、ビットデプスに応じた変換係数のレンジを導出し、上記変換係数のレンジに応じて導出される第1シフト値を用いて、変換係数に量子化パラメータに依存する値をかけた値を右シフトするスケーリング部とを備え、
    上記ヘッダ符号化部は、変換係数のレンジを拡張するかを示すフラグが有効である場合に、非分離変換を行わないことを特徴とする画像符号化装置。
JP2021097050A 2021-06-10 2021-06-10 画像復号装置及び画像符号化装置 Pending JP2022188825A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2021097050A JP2022188825A (ja) 2021-06-10 2021-06-10 画像復号装置及び画像符号化装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2021097050A JP2022188825A (ja) 2021-06-10 2021-06-10 画像復号装置及び画像符号化装置

Publications (1)

Publication Number Publication Date
JP2022188825A true JP2022188825A (ja) 2022-12-22

Family

ID=84533195

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021097050A Pending JP2022188825A (ja) 2021-06-10 2021-06-10 画像復号装置及び画像符号化装置

Country Status (1)

Country Link
JP (1) JP2022188825A (ja)

Similar Documents

Publication Publication Date Title
WO2016203881A1 (ja) 算術復号装置及び算術符号化装置
CN112514386B (zh) 网格编解码量化系数编解码
CN115315957A (zh) 视频译码中的带色度缩放的亮度映射(lmcs)
JP7402016B2 (ja) 画像復号装置及び画像符号化装置
US11949914B2 (en) Image decoding apparatus and image coding apparatus
JP7369191B2 (ja) しきい値とライスパラメータとを使用した係数復号のための正規コード化ビン低減
US11128876B2 (en) Joint coefficient coding of transform skip and BDPCM mode for 4:4:4 color formats
JP2022523789A (ja) 変換スキップモードのための係数コーディング
CN113196776B (zh) 预测图像生成装置、运动图像解码装置、运动图像编码装置以及预测图像生成方法
CN113728650A (zh) 自适应环路滤波器集合索引信令
US20200314423A1 (en) Fixed filters with non-linear adaptive loop filter in video coding
US11470334B2 (en) Rice parameter derivation for lossless/lossy coding modes for video coding
CN114009049A (zh) 用于针对视频译码的低频不可分离变换信令的上下文建模
US11134258B2 (en) Predictive coefficient coding
US20230239504A1 (en) Video decoding apparatus and video coding apparatus
CN116458156A (zh) 视频译码中的基于上下文的变换索引信令
JP2022188825A (ja) 画像復号装置及び画像符号化装置
WO2022131243A1 (ja) 画像復号装置及び画像符号化装置
JP2021150703A (ja) 画像復号装置及び画像符号化装置
JP2022178335A (ja) 画像復号装置及び画像符号化装置
JP2023006203A (ja) 画像復号装置及び画像符号化装置
US11451779B2 (en) Scaling list signalling for video coding
US11818353B2 (en) Reduced complexity transforms for high bit-depth video coding
JP2022045909A (ja) 画像復号装置及び画像符号化装置
JP2021013110A (ja) 画像復号装置および画像符号化装置

Legal Events

Date Code Title Description
RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20221207