(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-30
(45)【発行日】2024-10-08
(54)【発明の名称】画像復号装置および方法
(51)【国際特許分類】
H04N 19/109 20140101AFI20241001BHJP
H04N 19/147 20140101ALI20241001BHJP
H04N 19/176 20140101ALI20241001BHJP
H04N 19/436 20140101ALI20241001BHJP
【FI】
H04N19/109
H04N19/147
H04N19/176
H04N19/436
(21)【出願番号】P 2023220432
(22)【出願日】2023-12-27
(62)【分割の表示】P 2020563093の分割
【原出願日】2019-12-16
【審査請求日】2023-12-28
(31)【優先権主張番号】P 2018248147
(32)【優先日】2018-12-28
(33)【優先権主張国・地域又は機関】JP
(73)【特許権者】
【識別番号】000002185
【氏名又は名称】ソニーグループ株式会社
(74)【代理人】
【識別番号】100121131
【氏名又は名称】西川 孝
(74)【代理人】
【氏名又は名称】稲本 義雄
(74)【代理人】
【識別番号】100168686
【氏名又は名称】三浦 勇介
(72)【発明者】
【氏名】菱沼 信介
(72)【発明者】
【氏名】近藤 健治
【審査官】岩井 健二
(56)【参考文献】
【文献】国際公開第2018/173895(WO,A1)
【文献】国際公開第2012/046435(WO,A1)
【文献】Chih-Wei Hsu et al.,CE1-related: Constraint for binary and ternary partitions,Joint Video Experts Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11,JVET-K0556-v2,11th Meeting: Ljubljana, SI,2018年07月,pp.1-3
【文献】Xiaoyu Xiu, Yuwen He and Yan Ye,CE9-related: Complexity reduction and bit-width control for bi-directional optical flow (BIO),Joint Video Experts Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11,JVET-L0256_v2,12th Meeting: Macao, CN,2018年09月,pp.1-15
【文献】Kenji Kondo, Masaru Ikeda and Teruhiko Suzuki,Non-CE9: On early termination for BDOF,Joint Video Experts Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11,JVET-M0073-r2,13th Meeting: Marrakech, MA,2019年01月,pp.1-5
【文献】Huanbang Chen et al.,CE9-related: BDOF buffer reduction and enabling VPDU based application,Joint Video Experts Team (JVET) of ITU-T SG 16 WP 3 and ISO/IEC JTC 1/SC 29/WG 11,JVET-M0890-v2,13th Meeting: Marrakech, MA,2019年01月,pp.1-3
(58)【調査した分野】(Int.Cl.,DB名)
H04N 19/00 - 19/98
(57)【特許請求の範囲】
【請求項1】
インター予測処理に用いられるCooding Unit(CU)を、Optical Flowの手法により時間的に前後の1フレームずつを参照する双方向性予測(BIO)を行うか否かについての判定に用いるコスト計算のための処理単位として8×8、16×16、32×32、または64×64のいずれかに仮想的に分割する制御部と、
前記CUの予測ブロックのSum of Absolute Difference(SAD)と、前記処理単位のサイズに応じたBIO閾値との比較に基づいて、前記BIOを適用するか否かを決定するBIO適用判定部と
を備える画像復号装置。
【請求項2】
前記BIO適用判定部は、前記SADが前記BIO閾値より小さいとき、前記BIOを適用するか否かを示すBIO適用フラグを不適用に変更する
請求項1に記載の画像復号装置。
【請求項3】
制御部と、BIO適用判定部とを備える画像復号装置の画像復号方法であって、
前記制御部は、インター予測処理に用いられるCooding Unit(CU)を、Optical Flowの手法により時間的に前後の1フレームずつを参照する双方向性予測(BIO)を行うか否かについての判定に用いるコスト計算のための処理単位として8×8、16×16、32×32、または64×64のいずれかに仮想的に分割し、
前記BIO適用判定部は、前記CUの予測ブロックのSum of Absolute Difference(SAD)と、前記処理単位のサイズに応じたBIO閾値との比較に基づいて、前記BIOを適用するか否かを決定する
画像復号方法。
【請求項4】
前記BIO適用判定部は、前記SADが前記BIO閾値より小さいとき、前記BIOを適用するか否かを示すBIO適用フラグを不適用に変更する
請求項3に記載の画像復号方法。
【発明の詳細な説明】
【技術分野】
【0001】
本技術は、画像復号装置および方法に関し、特に、バッファサイズを削減することができるようにした画像復号装置および方法に関する。
【背景技術】
【0002】
AVC/H.264やHEVC/H.265に続く次世代コーデックとしてVVCの規格標準化が進められている。
【0003】
VVC規格では、最大128x128の大きなCU(Coding Unit)が採用されているが、特にHW Decoder実装での回路規模や消費電力の増大などを考慮して、VPDU(Virtual Pipeline Data Units)という概念も導入されている。
【0004】
VPDUのサイズは、各パイプラインステージが滞りなく処理可能となるバッファサイズである。VPDUのサイズは、TU(Transform Unit)の最大サイズに合わせる場合が多い。
【0005】
VVCでは64x64が最大TUサイズであり、VPDUにもこの大きさが想定されている。VVCでは1つのCUに1つのPUが対応しており、VPDUより大きなサイズのPUに対してインター予測処理をする必要がある。この場合でもPUを仮想的なvPU(virtual PU)に分割しての処理が可能であり、VPDUとの整合性もよく、後述するBIO(Bi-directional optical flow)が採用されるまではリーズナブルなHWリソースでの実装が可能であった。
【0006】
Optical Flowの手法は動画像中の物体の動きを検出し、ある時間経過後にどの方向に動くかを推定する画像処理手法である。このOptical Flowの手法をコーデックのインター予測のオプションとして追加することで符号化効率が向上する。時間的に前後の1フレームずつを参照するBi予測(双方向予測)でOptical Flowの手法を使うことから、特にBIOと呼ばれている(非特許文献1参照)。
【0007】
通常のBi予測では最適なMVと予測MV(PMV)の間に差異があるため差分MV(MVD)を符号化しているのに対して、BIOを適用したBi予測では予測MV(PMV)で生成した予測ブロック同士に対してOptical Flow手法で勾配(G)や速度(V)を求め、通常のBi予測と同等の結果を得ている。このような場合、差分MV(MVD)の符号化が不要または削減できるので符号化効率が改善される(非特許文献2参照)。
【0008】
一方で、BIOで求めている勾配(G)や速度(V)の計算コストは非常に高い。そのため勾配(G)や速度(V)を計算したものの、その絶対値が小さいなどの理由で通常のBi予測で得られる予測値とほとんど差がない場合は、費用対効果の面でリダクションが特に求められる。
【0009】
様々な提案がされているBIOのリダクション手法の1つに、L0予測ブロックとL1予測ブロックが生成された段階でブロック同士のSAD(Sum of Absolute Difference)を計算して、SAD値がある閾値を下回った場合はBIOを適用せず、通常のBi予測を実行するというものがある。
【0010】
これはSAD値が小さいと速度(V)も小さくなりBIOの効果があまり得られない傾向を考慮したもので、効果が見込めない場合には高コストな計算を省略するアーリーターミネーションとして機能する。
【先行技術文献】
【非特許文献】
【0011】
【文献】Jianle Chen , Yan Ye , Seung Hwan Kim、“Algorithm description for Versatile Video Coding and Test Model 3 (VTM 3)”、[online]、平成30年9月24日、Experts Team (JVET)、[平成30年12月21日検索]、インターネット, < http://phenix.it-sudparis.eu/jvet/doc_end_user/documents/12_Macao/wg11/JVET-L1002-v1.zip >
【文献】Xiaoyu Xiu, Yuwen He, Yan Ye、“CE9-related: Complexity reduction and bit-width control for bi-directional optical flow (BIO)”、[online]、平成30年9月24日、Experts Team (JVET)、[平成30年12月21日検索]、インターネット, < http://phenix.it-sudparis.eu/jvet/doc_end_user/documents/12_Macao/wg11/JVET-L0256-v3.zip >
【発明の概要】
【発明が解決しようとする課題】
【0012】
上述したBIOのリダクション手法を適用した場合、PU全体でL0とL1予測ブロックのSADを計算し、閾値と比較してBIO処理の適用可否を判定し、処理が分岐するような流れになっている。そのため、VPDUより大きなPUでインター予測する場合に、PUを仮想的に複数のvPUに分割処理することが困難になってしまった。
【0013】
この場合、勾配計算や速度計算のために必要になるバッファは、PUよりひと回り大きな領域が必要となり、BIOを含むインター予測処理部において、大きなバッファリソースが必要になってしまう。
【0014】
本技術はこのような状況に鑑みてなされたものであり、バッファサイズを削減することができるようにするものである。
【課題を解決するための手段】
【0015】
本技術の一側面の画像復号装置は、インター予測処理に用いられるCooding Unit(CU)を、Optical Flowの手法により時間的に前後の1フレームずつを参照する双方向性予測(BIO)を行うか否かについての判定に用いるコスト計算のための処理単位として8×8、16×16、32×32、または64×64のいずれかに仮想的に分割する制御部と、前記CUの予測ブロックのSum of Absolute Difference(SAD)と、前記処理単位のサイズに応じたBIO閾値との比較に基づいて、前記BIOを適用するか否かを決定するBIO適用判定部とを備える。
【0016】
本技術の一側面の画像復号方法は、制御部と、BIO適用判定部とを備える画像復号装置の画像復号方法であって、前記制御部は、インター予測処理に用いられるCooding Unit(CU)を、Optical Flowの手法により時間的に前後の1フレームずつを参照する双方向性予測(BIO)を行うか否かについての判定に用いるコスト計算のための処理単位として8×8、16×16、32×32、または64×64のいずれかに仮想的に分割し、前記BIO適用判定部は、前記CUの予測ブロックのSum of Absolute Difference(SAD)と、前記処理単位のサイズに応じたBIO閾値との比較に基づいて、前記BIOを適用するか否かを決定する。
【0017】
本技術の一側面においては、インター予測処理に用いられるCooding Unit(CU)が、Optical Flowの手法により時間的に前後の1フレームずつを参照する双方向性予測(BIO)を行うか否かについての判定に用いるコスト計算のための処理単位として8×8、16×16、32×32、または64×64のいずれかに仮想的に分割され、前記CUの予測ブロックのSum of Absolute Difference(SAD)と、前記処理単位のサイズに応じたBIO閾値との比較に基づいて、前記BIOを適用するか否かが決定される。
【図面の簡単な説明】
【0018】
【
図1】VPDUを導入せず、パイプラインを組んだ例を示す図である。
【
図2】
図1の場合のインターPU処理の1つであるBi予測を説明するフローチャートである。
【
図3】VPDUを導入して、効率的にパイプラインを組んだ例を示す図である。
【
図4】
図3の場合のインターPU処理の1つであるBi予測を説明するフローチャートである。
【
図6】BIOを適用したBi予測の例を示す図である。
【
図7】通常のBi予測の2ブロック分割の例を示す図である。
【
図8】BIOを適用したBi予測の2ブロック分割の例を示す図である。
【
図9】本技術の一実施形態に係る符号化装置の構成例を示すブロック図である。
【
図10】符号化装置の符号化処理の詳細を説明するフローチャートである。
【
図11】
図10に続く、符号化装置の符号化処理の詳細を説明するフローチャートである。
【
図12】本開示を適用した復号装置の一実施の形態の構成例を示すブロック図である。
【
図13】復号装置の復号処理の詳細を説明するフローチャートである。
【
図14】インター予測部の構成例を示すブロック図である。
【
図15】従来のBIOを含むBi予測を説明するフローチャートである。
【
図16】
図15に続く、従来のBIOを含むBi予測を説明するフローチャートである。
【
図17】本技術の第1の実施の形態のBIOを含むBi予測を説明するフローチャートである。
【
図18】
図17に続く、本技術の第1の実施の形態のBIOを含むBi予測を説明するフローチャートである。
【
図19】PUサイズ、vPU番号、および処理位置とサイズの対応関係を示す図である。
【
図20】従来の動作と、本技術の第1の実施の形態の動作を実施した場合の比較を示す図である。
【
図21】従来の動作と、本技術の第1の実施の形態の動作を実施した場合の比較を示す図である。
【
図22】PUがVPDUより大きい場合に、vPU番号が0のBIO判定結果を他のvPUでも用いた例を示す図である。
【
図23】PUがVPDUより大きい場合に、vPU番号が0のBIO判定結果を他のvPUでも用いた例を示す図である。
【
図26】各vPU内の部分的なSAD値でBIOの適用判定を行う例を示す図である。
【
図27】各vPU内の部分的なSAD値でBIOの適用判定を行う例を示す図である。
【
図28】各vPUのBIO_vPU_ONの判定のための部分的なSAD計算領域の判定処理を説明するフローチャートである。
【
図29】
図28に続く、各vPUのBIO_vPU_ONの判定のための部分的なSAD計算領域の判定処理を説明するフローチャートである。
【
図30】本技術の第2の実施の形態の動作例として、インター予測部51が行うBIOを含むBi予測を説明するフローチャートである。
【
図31】
図30に続く、本技術の第2の実施の形態の動作例として、インター予測部51が行うBIOを含むBi予測を説明するフローチャートである。
【
図32】BIO_MAX_SAD_BLOCK_SIZEとsPUの対応関係を示す図である。
【
図33】本技術の第3の実施の形態の動作例として、インター予測部51が行うBIOを含むBi予測を説明するフローチャートである。
【
図34】
図33に続く、本技術の第3の実施の形態の動作例として、インター予測部51が行うBIOを含むBi予測を説明するフローチャートである。
【
図35】BIO_MAX_SAD_BLOCK_SIZEを2とした場合の各PUのSADを計算する領域の例を示す図である。
【
図36】BIO_MAX_SAD_BLOCK_SIZEを2とした場合の各PUのSADを計算する領域の例を示す図である。
【
図37】本技術の第4の実施の形態の動作例として、インター予測部51が行うBIOを含むBi予測を説明するフローチャートである。
【
図38】
図37に続く、本技術の第4の実施の形態の動作例として、インター予測部51が行うBIOを含むBi予測を説明するフローチャートである。
【
図39】本技術の第5の実施の形態の動作例として、インター予測部51が行うBIOを含むBi予測を説明するフローチャートである。
【
図40】
図39に続く、本技術の第5の実施の形態の動作例として、インター予測部51が行うBIOを含むBi予測を説明するフローチャートである。
【
図41】コンピュータの構成例を示すブロック図である。
【発明を実施するための形態】
【0019】
以下、本技術を実施するための形態について説明する。説明は以下の順序で行う。
0.概要
1.第1の実施の形態(vPUによる分割の例)
2.第2の実施の形態(フラグによる動作の共有の例)
3.第3の実施の形態(sPUによる分割の例)
4.第4の実施の形態(BIOの使用禁止の例)
5.第5の実施の形態(常時BIOの適用の例)
6.第6の実施の形態(コンピュータ)
【0020】
<0.概要>
【0021】
AVC/H.264やHEVC/H.265に続く次世代コーデックとしてVVCの規格標準化が進められている。
【0022】
VVC規格では、最大128x128の大きなCU(Coding Unit)が採用されているが、HW Decoder実装での回路規模や消費電力の増大などを特に考慮して、VPDU(Virtual Pipeline Data Units)という概念も導入されている。
【0023】
VPDUのサイズは、各パイプラインステージが滞りなく処理可能となるバッファサイズである。VPDUのサイズは、TU(Transform Unit)の最大サイズに合わせる場合が多い。
【0024】
VVCでは64x64が最大TUサイズであり、VPDUにもこの大きさが想定されている。VVCでは1つのCUに1つのPUが対応しており、VPDUのサイズより大きなサイズのPUに対してインター予測処理を行う必要がある。この場合でもPUを仮想的なvPU(virtual PU)に分割しての処理が可能でありVPDUとの整合性もよく、後述するBIO(Bi-directional optical flow)が採用されるまでは、
図1乃至
図4に示すように、バッファを少なくできるため、リーズナブルなHWリソースでの実装が可能であった。
【0025】
<VPDUを導入しない場合のパイプラインの例>
図1は、VPDUを導入せずに、パイプラインを組んだ例を示す図である。
【0026】
図1の上には、CU、インターPU、およびTUの各ブロックが示されている。
【0027】
CUの最大サイズは、128×128である。インターPUの最大サイズは、128×128である。VVCにおいては、1つのCUに1つのPUが対応する。TUは、TU0乃至TU3からなり、各TUの最大サイズは64×64である。TUのサイズは、VPDUのサイズでもある。
【0028】
図1の上側に示されるように、CUは、インターPU処理により生成されたインターPUと、TU処理により得られたTUとが加算されてなる。
【0029】
図1の下側には、インターPU処理、TU処理、およびローカルデコード処理からなるパイプラインが示されている。
【0030】
パイプラインにおいては、インターPUの処理とTU0乃至TU3の処理とが並列に行われ、両方が完了したときに、CUのローカルデコード処理が開始される。したがって、インターPUの処理では、128×128のバッファが必要であり、TUの処理では、PUとの待ち合わせ用に128×128のバッファが必要である。
【0031】
図2は、
図1の場合のインターPUの処理の1つであるBi予測(双方向予測)を説明するフローチャートである。
【0032】
ステップS1において、インター予測のパラメータが取得される。
【0033】
ステップS2において、L0予測ブロックが生成される。
【0034】
ステップS3において、L1予測ブロックが生成される。
【0035】
ステップS4において、L0予測ブロックとL1予測ブロックとから、Bi予測ブロックPUが生成される。
【0036】
なお、ステップS2乃至S4においては、最大バッファサイズとして、PUのサイズが必要となる。
【0037】
<VPDUを導入した場合のパイプラインの例>
図3は、VPDUを導入して、効率的にパイプラインを組んだ例を示す図である。
【0038】
なお、
図3において、
図1の説明と共通する点については、適宜、省略される。
【0039】
図3の上側には、CU、インターPU、およびTUの各ブロックが示されている。CUは、
図1と異なり、PUがvPUに仮想的に分割されて処理されたことで、分割されたCU(0)乃至CU(3)で構成されている。PUは、仮想的なvPU(0)乃至vPU(3)で構成されている。
【0040】
図3の下側には、インターPU処理、TU処理、およびローカルデコード処理からなるパイプラインが示されている。
【0041】
パイプラインにおいては、インターPUにおけるvPU(0)乃至vPU(3)の処理とTU0乃至TU3の処理とが並列に行われる。したがって、vPU(0)の処理とTU0の処理が完了したときに、CU(0)のローカルデコード処理が開始される。vPU(1)の処理とTU1の処理が完了したときに、CU(1)のローカルデコード処理が開始される。vPU(2)の処理とTU2の処理が完了したときに、CU(2)のローカルデコード処理が開始される。vPU(3)の処理とTU3の処理が完了したときに、CU(3)のローカルデコード処理が開始される。
【0042】
このようにパイプラインを組むことで、インターPU処理においては、64×64のバッファがあればよく、TU処理におけるvPU待ち合わせ用バッファのサイズは、64×64で十分足りる。
【0043】
図4は、
図3の場合のインターPUの処理の1つであるBi予測を説明するフローチャートである。
【0044】
ステップS11において、インター予測のパラメータが取得される。
【0045】
ステップS12において、PU内に含まれるvPU数が取得される。
【0046】
ステップS13において、vPU番号に0が設定される。
【0047】
ステップS14において、vPU番号がvPU数より小さいか否かが判定される。ステップS14において、vPU番号がvPU数より小さいと判定された場合、処理は、ステップS15に進む。
【0048】
ステップS15において、vPU番号からPU内のvPUの位置とサイズが取得される。
【0049】
ステップS16において、vPUの領域のL0予測ブロックが生成される。
【0050】
ステップS17において、vPUの領域のL1予測ブロックが生成される。
【0051】
ステップS18において、L0予測ブロックとL1予測ブロックとから、Bi予測ブロックvPUが生成される。
【0052】
ステップS19において、vPU番号がインクリメントされ、その後、ステップS14に戻り、それ以降の処理が繰り返される。
【0053】
また、ステップS14において、vPU番号がvPU数以上であると判定された場合、Bi予測は終了される。
【0054】
なお、ステップS16乃至S17においては、最大バッファサイズとして、PUよりも小さいVPDUのサイズがあればよい。
【0055】
Optical Flowの手法は動画像中の物体の動きを検出し、ある時間経過後にどの方向に動くかを推定する画像処理手法である。このOptical Flowの手法をコーデックのインター予測のオプションとして追加することで符号化効率が向上する。時間的に前後の1フレームずつを参照するBi予測でOptical Flowの手法を使うことから、特にBIOと呼ばれている。
【0056】
<通常のBi予測の例>
図5は、通常のBi予測の例を示す図である。
【0057】
図5においては、左から右への矢印が表示順の時間を表している。また、BピクチャにおけるBi予測ブロックのBi予測値について、L0方向の参照面0と、L1方向の参照面1において、最適なMVを求める例が示されている。以下の図についても同様である。
【0058】
Bi予測値には、参照面0におけるL0予測ブロックの画素L0と、参照面1におけるL1予測ブロックの画素L1が対応しており、Bi予測値は、(L0+L1)/2で求められる。
【0059】
図5に示すように、通常のBi予測では、最適なMV(MV_L0,MV_L1)と予測MV(MVP_L0,MVP_L1)の間に差異があるため、差分MV(MVD_L0,MVD_L1)を符号化する必要がある。
【0060】
<BIOを適用したBi予測の例>
図6は、BIOを適用したBi予測の例を示す図である。
【0061】
図6においては、BIOを適用したBi予測として、予測MV(MVP_L0,MVP_L1)で生成した予測ブロック同士に対してOptical Flow手法で勾配(G)や速度(V)を求める例が示されている。予測ブロック同士に対してOptical Flow手法で勾配(G)や速度(V)を求めることで、通常のBi予測と同等の結果が得られる。
【0062】
BIOを適用したBi予測の場合、予測MV(MVP_L0,MVP_L1)をそのままMV(MV_L0,MV_L1)とするので、差分MV(MVD_L0,MVD_L1)を符号化する必要がないため、符号化効率が改善する。
【0063】
Bi予測値には、参照面0におけるL0予測ブロックの画素L0’と、参照面1におけるL1予測ブロックの画素L1’がほぼ対応しており、Bi予測値は、(L0’+L1’+B)/2で求められる。すなわち、L0予測ブロックとL1予測ブロックから勾配(G:Gx,Gy)と速度(V:Vx,Vy)を計算し、補正値B=Vx*Gx+Vy*Gyを求める必要がある。
【0064】
<Bi予測の2ブロック分割の例>
図7は、通常のBi予測の2ブロック分割の例を示す図である。
【0065】
通常のBi予測では、2つのブロックに分割しているため、
図7に示すように、2つのブロック分のブロック分割情報と2つの差分MV(MVD)がそれぞれ求められる。したがって、2つのブロック分のブロック分割情報と2つの差分MV(MVD)を符号化する必要がある。
【0066】
<BIOを適用したBi予測の2ブロック分割の例>
図8は、BIOを適用したBi予測の2ブロック分割の例を示す図である。
【0067】
BIOを適用したBi予測では、2つのブロックがあっても、
図8に示すように、ブロックを分割せずにOptical Flow手法で勾配(G)と速度(V)が求められるので、通常Bi予測と同等の結果が得られる。
【0068】
以上のように、
図8のBIOを適用したBi予測では、
図7のBi予測で必要であったブロック分割情報の符号化の不要または削減が可能となったり、
図7のBi予測で必要であった差分MV(MVD)の符号化が不要または削除が可能となったりするので、符号化効率を改善することができる。
【0069】
一方で、BIOで求めている勾配(G)および速度(V)の計算コストは非常に高い。そのため勾配(G) および速度(V)を計算したにもかかわらず、その絶対値が小さいなどの理由で通常のBi予測で得られる予測値とほとんど差がない場合は、費用対効果の面でリダクションが特に求められる。
【0070】
様々な提案がされているBIOのリダクション手法の1つに、L0予測ブロックとL1予測ブロックが生成された段階でブロック同士のSAD(Sum of Absolute Difference)を計算して、SAD値がある閾値を下回った場合はBIOを適用せず、通常のBi予測を実行するというものがある。
【0071】
これはSAD値が小さいと速度(V)も小さくなりBIOの効果があまり得られない傾向を考慮したもので、効果が見込めない場合には高コストな計算を省略するアーリーターミネーションとして機能する。
【0072】
上述したBIOのリダクション手法を適用した場合、PU全体でL0とL1予測ブロックのSADを計算し、閾値と比較してBIO処理の適用可否を判定し、処理が分岐するような流れになっている。そのため、VPDUより大きなPUでインター予測する場合に、PUを仮想的に複数のvPUに分割処理することが困難になってしまった。
【0073】
この場合、勾配計算や速度計算のために必要になるバッファは、PUよりひと回り大きな領域が必要となり、BIOを含むインター予測を行う部において、大きなバッファリソースが必要になってしまう。
【0074】
また、上述したBIOのリダクション手法をHW実装した場合、BIOを含むインター予測のパイプライン遅延とTU処理のパイプライン遅延が大きく異なるため、スループットを維持するためのHW実装難易度も高くなってしまう。
【0075】
そこで、本技術においては、BIOなどの双方向予測を行うか否かについての判定に用いるコストを計算する処理単位(例えば、PU)がVPDUサイズ相当の分割処理単位(例えば、vPU)またはVPDUサイズ以下の分割処理単位(例えば、後述するsPU)に分割され、分割処理単位に基づいて計算されたコストを用いて判定が行われる。なお、VPDUサイズ相当は、VPDUのサイズより一回り大きいサイズを表す。
【0076】
なお、本明細書において、ブロックサイズについての「AがBより大きい」は、「Aの水平サイズがBの水平サイズより大きい」または「Aの垂直サイズがBの垂直サイズより大きい」ことを意味する。
【0077】
また、ブロックサイズについての「AがB以下である」は、「Aの水平サイズがBの水平サイズ以下であり、かつ、Aの垂直サイズがBの垂直サイズ以下である」ことを意味する。
【0078】
以下、本技術について詳しく説明する。
【0079】
<1.第1の実施の形態(vPUによる分割の例)>
<符号化装置の構成例>
【0080】
図9は、本技術の一実施形態に係る符号化装置の構成例を示すブロック図である。
【0081】
図9の符号化装置1は、A/D変換部31、画面並べ替えバッファ32、演算部33、直交変換部34、量子化部35、可逆符号化部36、蓄積バッファ37、逆量子化部38、逆直交変換部39、および加算部40を有する。また、符号化装置1は、デブロックフィルタ41、適応オフセットフィルタ42、適応ループフィルタ43、フレームメモリ44、スイッチ45、イントラ予測部46、動き予測・補償部47、予測画像選択部48、およびレート制御部49を有する。
【0082】
A/D変換部31は、入力される符号化対象のフレーム単位の画像をA/D変換する。A/D変換部31は、変換後のデジタル信号である画像を画面並べ替えバッファ32に出力して記憶させる。
【0083】
画面並べ替えバッファ32は、表示順のフレーム単位の画像を、GOP構造に応じて、符号化順に並べ替える。画面並べ替えバッファ32は、並べ替え後の画像を、演算部33、イントラ予測部46、および動き予測・補償部47に出力する。
【0084】
演算部33は、画面並べ替えバッファ32から供給される画像から、予測画像選択部48から供給される予測画像を減算することにより符号化を行う。演算部33は、減算後の画像を、残差情報(差分)として直交変換部34に出力する。なお、予測画像選択部48から予測画像が供給されない場合、演算部33は、画面並べ替えバッファ32から読み出された画像をそのまま残差情報として直交変換部34に出力する。
【0085】
直交変換部34は、演算部33からの残差情報に対して直交変換処理を行う。直交変換部34は、直交変換処理後の画像を量子化部35に出力する。
【0086】
量子化部35は、直交変換部34から供給される直交変換処理後の画像を量子化する。量子化部35は、量子化後の量子化値を可逆符号化部36に出力する。
【0087】
可逆符号化部36は、最適イントラ予測モードを示す情報であるイントラ予測モード情報をイントラ予測部46から取得する。また、可逆符号化部36は、最適インター予測モードを示す情報であるインター予測モード情報と、動き情報および参照画像情報などのインター予測のパラメータとを動き予測・補償部47から取得する。
【0088】
また、可逆符号化部36は、適応オフセットフィルタ42からオフセットフィルタに関するオフセットフィルタ情報を取得し、適応ループフィルタ43からフィルタ係数を取得する。
【0089】
可逆符号化部36は、量子化部35から供給される量子化値に対して、可変長符号化(例えば、CAVLC(Context-Adaptive Variable Length Coding))、算術符号化(例えば、CABAC(Context-Adaptive Binary Arithmetic Coding))などの可逆符号化を行う。
【0090】
また、可逆符号化部36は、イントラ予測モード情報、または、インター予測モード情報、インター予測のパラメータ、オフセットフィルタ情報、並びにフィルタ係数を、符号化に関する符号化情報として可逆符号化する。可逆符号化部36は、可逆符号化された符号化情報と量子化値を、符号化データとして蓄積バッファ37に出力し、蓄積させる。
【0091】
蓄積バッファ37は、可逆符号化部36から供給される符号化データを、一時的に記憶する。また、蓄積バッファ37は、記憶している符号化データを、符号化ストリームとして後段に出力する。
【0092】
また、量子化部35より出力された量子化値は、逆量子化部38にも入力される。逆量子化部38は、量子化値を逆量子化する。逆量子化部38は、逆量化後の直交変換処理結果を逆直交変換部39に出力する。
【0093】
逆直交変換部39は、逆量子化部38から供給される直交変換処理結果に対して逆直交変換処理を行う。逆直交変換の方式としては、例えば、IDCT(逆離散コサイン変換)とIDST(逆離散サイン変換)がある。逆直交変換部39は、逆直交変換処理の結果得られる残差情報を加算部40に出力する。
【0094】
加算部40は、逆直交変換部39から供給される残差情報と、予測画像選択部48から供給される予測画像を加算し、復号を行う。加算部40は、復号された画像をデブロックフィルタ41とフレームメモリ44に出力する。
【0095】
デブロックフィルタ41は、加算部40から供給される復号された画像に対して、ブロック歪を除去するデブロックフィルタ処理を行う。デブロックフィルタ41は、デブロックフィルタ処理後の画像を適応オフセットフィルタ42に出力する。
【0096】
適応オフセットフィルタ42は、デブロックフィルタ41によるデブロックフィルタ処理後の画像に対して、主にリンギングを除去する適応オフセットフィルタ(SAO(Sample adaptive offset))処理を行う。
【0097】
適応オフセットフィルタ42は、適応オフセットフィルタ処理後の画像を適応ループフィルタ43に出力する。また、適応オフセットフィルタ42は、適応オフセットフィルタ処理の種類とオフセットを示す情報を、オフセットフィルタ情報として可逆符号化部36に出力する。
【0098】
適応ループフィルタ43は、例えば、2次元のウィナーフィルタ(Wiener Filter)により構成される。適応ループフィルタ43は、適応オフセットフィルタ処理後の画像に対して、適応ループフィルタ(ALF(Adaptive Loop Filter))処理を行う。
【0099】
適応ループフィルタ43は、適応ループフィルタ処理後の画像をフレームメモリ44に出力する。また、適応ループフィルタ43は、適応ループフィルタ処理に用いられたフィルタ係数を可逆符号化部36に出力する。
【0100】
フレームメモリ44は、適応ループフィルタ43から供給される画像と、加算部40から供給される画像を蓄積する。フレームメモリ44に蓄積されたフィルタ処理が行われていない画像のうちのCUに隣接する画像は、周辺画像としてスイッチ45を介してイントラ予測部46に出力される。一方、フレームメモリ44に蓄積されたフィルタ処理が行われた画像は、参照画像としてスイッチ45を介して動き予測・補償部47に出力される。
【0101】
イントラ予測部46は、PU単位で、フレームメモリ44からスイッチ45を介して読み出された周辺画像を用いて、候補となる全てのイントラ予測モードのイントラ予測処理を行う。
【0102】
また、イントラ予測部46は、画面並べ替えバッファ32から読み出された画像と、イントラ予測処理により予測された予測画像とに基づいて、候補となる全てのイントラ予測モードに対してRDコストを算出する。イントラ予測部46は、算出したRDコストが最小となるイントラ予測モードを、最適イントラ予測モードに決定する。
【0103】
イントラ予測部46は、最適イントラ予測モードで生成された予測画像を、予測画像選択部48に出力する。イントラ予測部46は、最適イントラ予測モードで生成された予測画像の選択が通知された場合、イントラ予測モード情報を可逆符号化部36に出力する。なお、イントラ予測モードとはPUのサイズ、予測方向などを表すモードである。
【0104】
動き予測・補償部47は、候補となる全てのインター予測モードの動き予測・補償処理を行う。動き予測・補償部47は、予測した動きを補償し、予測画像を生成するインター予測部51を含む。
【0105】
動き予測・補償部47は、画面並べ替えバッファ32から供給される画像と、フレームメモリ44からスイッチ45を介して読み出される参照画像に基づいて、候補となる全てのインター予測モードの動き情報(動きベクトル)を検出する。
【0106】
動き予測・補償部47は、インター予測部51に、検出した動き情報に対応する、フレーム内のPU位置、PUサイズ、予測方向、参照画像情報、動き情報などを、インター予測のパラメータとして供給する。
【0107】
インター予測部51は、動き予測・補償部47から供給されるインター予測のパラメータを用いて、BIO処理を含むBi予測などにより予測画像を生成する。
【0108】
動き予測・補償部47は、画面並べ替えバッファ32から供給される画像と、インター予測部51により生成された予測画像とに基づいて、候補となる全てのインター予測モードに対してRDコストを算出する。動き予測・補償部47は、RDコストが最小となるインター予測モードを、最適インター予測モードに決定する。
【0109】
決定された最適インター予測モードのRDコストと予測画像は、予測画像選択部48に出力される。決定された最適インター予測モードに対応するインター予測のパラメータは、可逆符号化部36に出力される。
【0110】
予測画像選択部48は、イントラ予測部46から供給される最適イントラ予測モードと動き予測・補償部47から供給される最適インター予測モードのうちの、対応するRDコストが小さい方を、最適予測モードに決定する。そして、予測画像選択部48は、最適予測モードの予測画像を、演算部33および加算部40に出力する。
【0111】
レート制御部49は、蓄積バッファ37に蓄積された符号化データに基づいて、オーバーフローあるいはアンダーフローが発生しないように、量子化部35の量子化動作のレートを制御する。
【0112】
<符号化装置の動作>
図10および
図11は、符号化装置の符号化処理の詳細を説明するフローチャートである。
【0113】
図10のステップS31において、A/D変換部31は、符号化対象として入力されたフレーム単位の画像をA/D変換する。A/D変換部31は、変換後のデジタル信号である画像を画面並べ替えバッファ32に出力して記憶させる。
【0114】
ステップS32において、画面並べ替えバッファ32は、表示順のフレームの画像を、GOP構造に応じて、符号化順に並べ替える。画面並べ替えバッファ32は、並べ替え後のフレーム単位の画像を、演算部33、イントラ予測部46、および動き予測・補償部47に出力する。
【0115】
ステップS33において、イントラ予測部46は、候補となる全てのイントラ予測モードのイントラ予測処理を行う。また、イントラ予測部46は、画面並べ替えバッファ32から読み出された画像と、イントラ予測処理により予測された予測画像とに基づいて、候補となる全てのイントラ予測モードに対してRDコストを算出する。イントラ予測部46は、RDコストが最小となるイントラ予測モードを、最適イントラ予測モードに決定する。イントラ予測部46は、最適イントラ予測モードで生成された予測画像を予測画像選択部48に出力する。
【0116】
ステップS34において、動き予測・補償部47は、候補となる全てのインター予測モードの動き予測・補償処理を行う。
【0117】
動き予測・補償部47は、画面並べ替えバッファ32から供給される画像と、フレームメモリ44からスイッチ45を介して読み出される参照画像に基づいて、候補となる全てのインター予測モードの動き情報(動きベクトル)を検出する。
【0118】
インター予測部51は、動き予測・補償部47から供給されるインター予測のパラメータを用いて、BIO処理を含むBi予測などにより予測画像を生成する。
【0119】
動き予測・補償部47は、画面並べ替えバッファ32から供給される画像と、インター予測部51により生成された予測画像とに基づいて、候補となる全てのインター予測モードに対してRDコストを算出する。動き予測・補償部47は、RDコストが最小となるインター予測モードを、最適インター予測モードに決定する。
【0120】
決定された最適インター予測モードのRDコストと予測画像は、予測画像選択部48に出力される。決定された最適インター予測モードにおけるインター予測のパラメータは、可逆符号化部36に出力される。
【0121】
ステップS35において、予測画像選択部48は、最適イントラ予測モードおよび最適インター予測モードのRDコストに基づいて、RDコストが最小となる方を、最適予測モードに決定する。そして、予測画像選択部48は、最適予測モードの予測画像を、演算部33および加算部40に出力する。
【0122】
ステップS36において、予測画像選択部48は、最適予測モードが最適インター予測モードであるかどうかを判定する。ステップS36で最適予測モードが最適インター予測モードであると判定された場合、予測画像選択部48は、最適インター予測モードで生成された予測画像の選択を動き予測・補償部47に通知する。
【0123】
そして、ステップS37において、動き予測・補償部47は、インター予測モード情報とインター予測のパラメータとを可逆符号化部36に出力する。その後、処理は、ステップS39に進む。
【0124】
一方、ステップS36で最適予測モードが最適イントラ予測モードである場合、予測画像選択部48は、最適イントラ予測モードで生成された予測画像の選択をイントラ予測部46に通知する。そして、ステップS38において、イントラ予測部46は、イントラ予測モード情報を可逆符号化部36に出力する。その後、処理は、ステップS39に進む。
【0125】
ステップS39において、演算部33は、画面並べ替えバッファ32から供給される画像から、予測画像選択部48から供給される予測画像を減算することにより符号化を行う。演算部33は、減算後の画像を、残差情報として直交変換部34に出力する。
【0126】
ステップS40において、直交変換部34は、残差情報に対して直交変換処理を行う。直交変換部34は、直交変換処理後の直交変換処理結果を量子化部35に出力する。
【0127】
ステップS41において、量子化部35は、直交変換部34から供給される直交変換処理結果を量子化する。量子化部35は、量子化後の量子化値を可逆符号化部36と逆量子化部38に出力する。
【0128】
図11のステップS42において、逆量子化部38は、量子化部35からの量子化値に対して逆量子化を行う。逆量子化部38は、逆量化後の直交変換処理結果を逆直交変換部39に出力する。
【0129】
ステップS43において、逆直交変換部39は、直交変換処理結果に対して逆直交変換処理を行う。逆直交変換部39は、逆直交変換処理後の残差情報を加算部40に出力する。
【0130】
ステップS44において、加算部40は、逆直交変換部39から供給される残差情報と、予測画像選択部48から供給される予測画像を加算し、復号を行う。加算部40は、復号された画像をデブロックフィルタ41とフレームメモリ44に出力する。
【0131】
ステップS45において、デブロックフィルタ41は、加算部40から供給される画像に対して、デブロックフィルタ処理を行う。デブロックフィルタ41は、デブロックフィルタ処理後の画像を適応オフセットフィルタ42に出力する。
【0132】
ステップS46において、適応オフセットフィルタ42は、デブロックフィルタ処理後の画像に対して適応オフセットフィルタ処理を行う。適応オフセットフィルタ42は、適応オフセットフィルタ処理後の画像を適応ループフィルタ43に出力する。また、適応オフセットフィルタ42は、オフセットフィルタ情報を可逆符号化部36に出力する。
【0133】
ステップS47において、適応ループフィルタ43は、適応オフセットフィルタ処理後の画像に対して、適応ループフィルタ処理を行う。適応ループフィルタ43は、適応ループフィルタ処理後の画像をフレームメモリ44に出力する。また、適応ループフィルタ43は、適応ループフィルタ処理で用いられたフィルタ係数を可逆符号化部36に出力する。
【0134】
ステップS48において、フレームメモリ44は、適応ループフィルタ43から供給される画像と加算部40から供給される画像を蓄積する。フレームメモリ44に蓄積されたフィルタ処理が行われていない画像のうちのCUに隣接する画像は、周辺画像としてスイッチ45を介してイントラ予測部46に出力される。一方、フレームメモリ44に蓄積されたフィルタ処理が行われた画像は、参照画像としてスイッチ45を介して動き予測・補償部47に出力される。
【0135】
ステップS49において、可逆符号化部36は、イントラ予測モード情報、または、インター予測モード情報、インター予測のパラメータ、オフセットフィルタ情報、並びにフィルタ係数を、符号化情報として可逆符号化する。
【0136】
ステップS50において、可逆符号化部36は、量子化部35から供給される量子化値を可逆符号化する。そして、可逆符号化部36は、ステップS49の処理で可逆符号化された符号化情報と可逆符号化された量子化値から、符号化データを生成し、蓄積バッファ37に出力する。
【0137】
ステップS51において、蓄積バッファ37は、可逆符号化部36から供給される符号化データを、一時的に蓄積する。
【0138】
ステップS52において、レート制御部49は、蓄積バッファ37に蓄積された符号化データに基づいて、オーバーフローあるいはアンダーフローが発生しないように、量子化部35の量子化動作のレートを制御する。その後、符号化処理は終了される。
【0139】
なお、
図10および
図11の符号化処理では、説明を簡単化するため、常に、イントラ予測処理と動き予測・補償処理が行われるようにしたが、実際には、ピクチャタイプ等によっていずれか一方のみが行われる場合もある。
【0140】
<復号装置の構成例>
図12は、
図9の符号化装置から伝送される符号化ストリームを復号する、本開示を適用した復号装置の一実施の形態の構成例を示すブロック図である。
【0141】
図12の復号装置101は、蓄積バッファ131、可逆復号部132、逆量子化部133、逆直交変換部134、加算部135、デブロックフィルタ136、適応オフセットフィルタ137、適応ループフィルタ138、および画面並べ替えバッファ139を有する。また、復号装置101は、D/A変換部140、フレームメモリ141、スイッチ142、イントラ予測部143、インター予測部51、およびスイッチ144を有する。
【0142】
復号装置101の蓄積バッファ131は、
図9の符号化装置1から伝送される符号化ストリームの符号化データを受け取り、蓄積する。蓄積バッファ131は、蓄積されている符号化データを可逆復号部132に出力する。
【0143】
可逆復号部132は、蓄積バッファ131からの符号化データに対して、可変長復号や、算術復号などの可逆復号を施すことで、量子化値と符号化情報を得る。可逆復号部132は、量子化値を逆量子化部133に出力する。符号化情報は、イントラ予測モード情報、インター予測モード情報、インター予測のパラメータ、オフセットフィルタ情報、フィルタ係数などで構成される。
【0144】
また、可逆復号部132は、イントラ予測モード情報などをイントラ予測部143に出力する。可逆復号部132は、インター予測のパラメータ、インター予測モード情報などをインター予測部51に出力する。
【0145】
可逆復号部132は、イントラ予測モード情報またはインター予測モード情報をスイッチ144に出力する。可逆復号部132は、オフセットフィルタ情報を適応オフセットフィルタ137に出力する。可逆復号部132は、フィルタ係数を適応ループフィルタ138に出力する。
【0146】
逆量子化部133、逆直交変換部134、加算部135、デブロックフィルタ136、適応オフセットフィルタ137、適応ループフィルタ138、フレームメモリ141、スイッチ142、イントラ予測部143、およびインター予測部51は、
図9の逆量子化部38、逆直交変換部39、加算部40、デブロックフィルタ41、適応オフセットフィルタ42、適応ループフィルタ43、フレームメモリ44、スイッチ45、イントラ予測部46、および動き予測・補償部47とそれぞれ同様の処理を行う。これにより、画像が復号される。
【0147】
具体的には、逆量子化部133は、
図9の逆量子化部38と同様に構成される。逆量子化部133は、可逆復号部132からの量子化値を逆量子化する。逆量子化部133は、逆量子化後の直交変換処理結果を逆直交変換部134に出力する。
【0148】
逆直交変換部134は、
図9の逆直交変換部39と同様に構成される。逆直交変換部134は、逆量子化部133から供給される直交変換処理結果に対して逆直交変換処理を行う。逆直交変換部134は、逆直交変換処理後の残差情報を加算部135に出力する。
【0149】
加算部135は、逆直交変換部134から供給される残差情報と、スイッチ144から供給される予測画像を加算することにより、復号を行う。加算部135は、復号された画像をデブロックフィルタ136とフレームメモリ141に出力する。
【0150】
デブロックフィルタ136は、加算部135から供給される画像に対してデブロックフィルタ処理を行い、デブロックフィルタ処理後の画像を適応オフセットフィルタ137に出力する。
【0151】
適応オフセットフィルタ137は、可逆復号部132からのオフセットフィルタ情報が表すオフセットを用いて、デブロックフィルタ処理後の画像に対して、オフセットフィルタ情報が表す種類の適応オフセットフィルタ処理を行う。適応オフセットフィルタ137は、適応オフセットフィルタ処理後の画像を、適応ループフィルタ138に出力する。
【0152】
適応ループフィルタ138は、適応オフセットフィルタ137から供給される画像に対して、可逆復号部132から供給されるフィルタ係数を用いて、適応ループフィルタ処理を行う。適応ループフィルタ138は、適応ループフィルタ処理後の画像をフレームメモリ141および画面並べ替えバッファ139に出力する。
【0153】
画面並べ替えバッファ139は、適応ループフィルタ処理後の画像をフレーム単位で記憶する。画面並べ替えバッファ139は、符号化順のフレーム単位の画像を、元の表示順に並び替え、D/A変換部140に出力する。
【0154】
D/A変換部140は、画面並べ替えバッファ139から供給されるフレーム単位の画像をD/A変換し、出力する。
【0155】
フレームメモリ141は、適応ループフィルタ処理後の画像と加算部135から供給される画像を蓄積する。フレームメモリ141に蓄積されたフィルタ処理が行われていない画像のうちのCUに隣接する画像は、周辺画像としてスイッチ142を介してイントラ予測部143に供給される。一方、フレームメモリ141に蓄積されたフィルタ処理が行われた画像は、参照画像として、スイッチ142を介してインター予測部51に出力される。
【0156】
イントラ予測部143は、フレームメモリ141からスイッチ142を介して読み出された周辺画像を用いて、可逆復号部132から供給されるイントラ予測モード情報が示す最適イントラ予測モードのイントラ予測処理を行う。イントラ予測部143は、その結果生成される予測画像をスイッチ144に出力する。
【0157】
インター予測部51は、
図9と同様に構成される。インター予測部51は、可逆復号部132から供給されるインター予測のパラメータを用いて、インター予測モード情報が示す最適インター予測モードのインター予測を行い、予測画像を生成する。
【0158】
インター予測部51は、フレームメモリ141からスイッチ142を介して、可逆復号部132から供給されるインター予測のパラメータの参照画像情報により特定される参照画像を読み出す。インター予測部51は、可逆復号部132から供給されるインター予測のパラメータの動き情報および読み出した参照画像を用いて、BIO処理を含むBi予測などにより予測画像を生成する。生成された予測画像は、スイッチ144に出力される。
【0159】
スイッチ144は、可逆復号部132からイントラ予測モード情報が供給された場合、イントラ予測部143から供給される予測画像を加算部135に出力する。一方、可逆復号部132からインター予測モード情報が供給された場合、スイッチ144は、インター予測部51から供給される予測画像を加算部135に出力する。
【0160】
<復号装置の動作>
図13は、復号装置の復号処理の詳細を説明するフローチャートである。
【0161】
図13のステップS131において、復号装置101の蓄積バッファ131は、図示せぬ前段から供給されるフレーム単位の符号化データを受け取り、蓄積する。蓄積バッファ131は、蓄積されている符号化データを可逆復号部132に出力する。
【0162】
ステップS132において、可逆復号部132は、蓄積バッファ131からの符号化データを可逆復号し、量子化値と符号化情報を得る。可逆復号部132は、量子化値を逆量子化部133に出力する。
【0163】
可逆復号部132は、イントラ予測モード情報などをイントラ予測部143に出力する。可逆復号部132は、インター予測のパラメータ、インター予測モード情報などをインター予測部51に出力する。
【0164】
また、可逆復号部132は、イントラ予測モード情報またはインター予測モード情報をスイッチ144に出力する。可逆復号部132は、オフセットフィルタ情報を適応オフセットフィルタ137に供給し、フィルタ係数を適応ループフィルタ138に出力する。
【0165】
ステップS133において、逆量子化部133は、可逆復号部132から供給される量子化値を逆量子化する。逆量子化部133は、逆量子化後の直交変換処理結果を逆直交変換部134に出力する。
【0166】
ステップS134において、逆直交変換部134は、逆量子化部133から供給される直交変換処理結果に対して直交変換処理を行う。
【0167】
ステップS135において、インター予測部51は、可逆復号部132からインター予測モード情報が供給されたかどうかを判定する。ステップS135でインター予測モード情報が供給されたと判定された場合、処理はステップS136に進む。
【0168】
ステップS136において、インター予測部51は、可逆復号部132から供給される参照画像特定情報に基づいて参照画像を読み出し、動き情報と参照画像を用いて、インター予測モード情報が示す最適インター予測モードの動き補償処理を行う。例えば、インター予測部51は、BIO処理を含むBi予測などにより予測画像を生成する。インター予測部51は、生成した予測画像を、スイッチ144を介して加算部135に出力する。その後、処理は、ステップS138に進む。
【0169】
一方、ステップS135でインター予測モード情報が供給されていないと判定された場合、すなわち、イントラ予測モード情報がイントラ予測部143に供給された場合、処理はステップS137に進む。
【0170】
ステップS137において、イントラ予測部143は、フレームメモリ141からスイッチ142を介して読み出された周辺画像を用いて、イントラ予測モード情報が示すイントラ予測モードのイントラ予測処理を行う。イントラ予測部143は、イントラ予測処理の結果生成される予測画像を、スイッチ144を介して加算部135に出力する。その後、処理は、ステップS138に進む。
【0171】
ステップS138において、加算部135は、逆直交変換部134から供給される残差情報と、スイッチ144から供給される予測画像を加算することにより、復号を行う。加算部135は、復号された画像をデブロックフィルタ136とフレームメモリ141に出力する。
【0172】
ステップS139において、デブロックフィルタ136は、加算部135から供給される画像に対してデブロックフィルタ処理を行い、ブロック歪を除去する。デブロックフィルタ136は、デブロックフィルタ処理後の画像を適応オフセットフィルタ137に出力する。
【0173】
ステップS140において、適応オフセットフィルタ137は、可逆復号部132から供給されるオフセットフィルタ情報に基づいて、デブロックフィルタ処理後の画像に対して、適応オフセットフィルタ処理を行う。適応オフセットフィルタ137は、適応オフセットフィルタ処理後の画像を、適応ループフィルタ138に出力する。
【0174】
ステップS141において、適応ループフィルタ138は、適応オフセットフィルタ137から供給される画像に対して、可逆復号部132から供給されるフィルタ係数を用いて、適応ループフィルタ処理を行う。適応ループフィルタ138は、適応ループフィルタ処理後の画像をフレームメモリ141および画面並べ替えバッファ139に供給する。
【0175】
ステップS142において、フレームメモリ141は、加算部135から供給される画像と、適応ループフィルタ138から供給される画像を蓄積する。フレームメモリ141に蓄積されたフィルタ処理が行われていない画像のうちのCUに隣接する画像は、周辺画像としてスイッチ142を介してイントラ予測部143に供給される。一方、フレームメモリ141に蓄積されたフィルタ処理が行われた画像は、参照画像として、スイッチ142を介してインター予測部51に供給される。
【0176】
ステップS143において、画面並べ替えバッファ139は、適応ループフィルタ138から供給される画像をフレーム単位で記憶し、符号化順のフレーム単位の画像を、元の表示順に並び替え、D/A変換部140に出力する。
【0177】
ステップS144において、D/A変換部140は、適応ループフィルタ処理後の画像をD/A変換し、出力する。
【0178】
<インター予測部の構成例>
図14は、インター予測部の構成例を示すブロック図である。
【0179】
図14において、インター予測部51は、インター予測制御部201、L0予測ブロック生成部202、L1予測ブロック生成部203、BIOコスト計算部204、BIO適用判定部205、Bi予測ブロック生成部206、BIO処理を含むBi予測ブロック生成部207、Bi予測ブロック選択部208、および予測ブロック選択部209から構成される。
【0180】
インター予測制御部201には、符号化装置1の場合、動き予測・補償部47から(復号装置101の場合、可逆復号部132から)インター予測のパラメータが供給される。
【0181】
インター予測のパラメータは、フレーム内のPU位置、PUサイズ、予測方向(L0,L1,Biのうちいずれか1つが設定される)、参照画像情報、動き情報などからなる。
【0182】
インター予測制御部201は、例えば、CPU(Central Processing Unit)やマイクロプロセッサなどから構成される。インター予測制御部201は、CPUにより所定のプログラムを実行し、インター予測パラメータの内容に応じて、各部を制御する。
【0183】
インター予測制御部201は、L0予測のパラメータをL0予測ブロック生成部202に供給し、L0予測ブロック生成部202を制御する。L0予測のパラメータは、PU位置、PUサイズ、参照画像情報REFIDX_L0、動き情報MV_L0からなる。
【0184】
インター予測制御部201は、L1予測のパラメータをL1予測ブロック生成部203に供給し、L1予測ブロック生成部203を制御する。L1予測のパラメータは、PU位置、PUサイズ、参照画像情報REFIDX_L1、動き情報MV_L1からなる。
【0185】
インター予測制御部201は、Bi予測のパラメータを、BIOコスト計算部204、Bi予測ブロック生成部206、およびBIO処理を含むBi予測ブロック生成部207に供給し、BIOコスト計算部204、Bi予測ブロック生成部206、およびBIO処理を含むBi予測ブロック生成部207を制御する。Bi予測のパラメータは、PUサイズなどからなる。
【0186】
インター予測制御部201は、BIO閾値をBIO適用判定部205に供給し、BIO適用判定部205を制御する。
【0187】
インター予測制御部201は、予測方向を予測ブロック選択部209に供給し、予測ブロック選択部209を制御する。
【0188】
L0予測ブロック生成部202は、予測方向がL0またはBiのときに動作する。L0予測ブロック生成部202は、インター予測制御部201から供給されるL0予測のパラメータに基づいて、フレームメモリ44にアクセスし、参照画像からL0予測画像を生成する。生成されたL0予測画像は、L0予測ブロック生成部202から、BIOコスト計算部204、BIO適用判定部205、Bi予測ブロック生成部206、BIO処理を含むBi予測ブロック生成部207、および予測ブロック選択部209に供給される。
【0189】
L1予測ブロック生成部203は、予測方向がL1またはBiのときに動作する。L1予測ブロック生成部203は、インター予測制御部201から供給されるL1予測のパラメータに基づいて、フレームメモリ44にアクセスし、参照画像からL1予測画像を生成する。生成されたL1予測画像は、L1予測ブロック生成部203から、BIOコスト計算部204、BIO適用判定部205、Bi予測ブロック生成部206、BIO処理を含むBi予測ブロック生成部207、および予測ブロック選択部209に供給される。
【0190】
BIOコスト計算部204は、予測方向がBiのとき動作する。BIOコスト計算部204は、インター予測制御部201から供給されるBi予測のパラメータに基づいて、L0予測ブロック生成部202から供給されるL0予測画像とL1予測ブロック生成部203から供給されるL1予測画像とのSADを計算する。計算されたSADは、BIOコスト計算部204からBIO適用判定部205に供給される。
【0191】
BIO適用判定部205は、予測方向がBiのとき動作する。BIO適用判定部205は、インター予測制御部201から供給されるBIO閾値と、BIOコスト計算部204から供給されるSADとを比較し、BIO_ONフラグを決定する。BIO閾値よりもSADが大きいとき、BIO_ONフラグが、BIO適用を示すBIO_ON=1に決定され、BIO閾値よりもSADが小さいとき、BIO_ONフラグが、BIO不適用を示すBIO_ON=0に決定される。
【0192】
決定されたBIO_ONフラグは、BIO適用判定部205から、Bi予測ブロック生成部206、BIO処理を含むBi予測ブロック生成部207、Bi予測ブロック選択部208に供給される。
【0193】
Bi予測ブロック生成部206は、BIO適用判定部205から供給されるBIO_ONフラグに基づいて、予測方向がBiで、BIO_ON=0のとき動作する。Bi予測ブロック生成部206は、インター予測制御部201から供給されるBi予測のパラメータに基づいて、L0予測ブロック生成部202から供給されるL0予測画像とL1予測ブロック生成部203から供給されるL1予測画像とから、Bi予測画像を生成する。生成されたBi予測画像は、Bi予測ブロック生成部206からBi予測ブロック選択部208に供給される。
【0194】
BIO処理を含むBi予測ブロック生成部207は、BIO適用判定部205から供給されるBIO_ONフラグに基づいて、予測方向がBiで、BIO_ON=1のとき動作する。Bi予測ブロック生成部206は、インター予測制御部201から供給されるBi予測のパラメータに基づいて、L0予測ブロック生成部202から供給されるL0予測画像とL1予測ブロック生成部203から供給されるL1予測画像とから、BIO処理を含むBi予測画像を生成する。生成されたBIO処理を含むBi予測画像は、BIO処理を含むBi予測ブロック生成部207からBi予測ブロック選択部208に供給される。
【0195】
Bi予測ブロック選択部208は、BIO適用判定部205から供給されるBIO_ONフラグに基づいて、Bi予測画像を選択する。Bi予測ブロック選択部208は、BIO_ON=0の場合、Bi予測ブロック生成部206から供給されるBi予測画像を選択し、BIO_ON=1の場合、BIO処理を含むBi予測ブロック生成部207から供給されるBIO処理を含むBi予測画像を選択する。選択されたBi予測画像は、Bi予測ブロック選択部208から予測ブロック選択部209に供給される。
【0196】
予測ブロック選択部209は、インター予測制御部201から供給される予測方向に応じて、予測画像を選択し、選択した予測画像を、インター予測の予測画像として、後段の
図9の予測画像選択部48(または
図12のスイッチ144)に出力する。
【0197】
予測ブロック選択部209は、予測方向がL0である場合、L0予測ブロック生成部202から供給されるL0予測画像を選択し、予測方向がL1である場合、L1予測ブロック生成部203から供給されるL1予測画像を選択する。予測ブロック選択部209は、予測方向がBiである場合、Bi予測ブロック選択部208から供給されるBi予測画像を選択する。
【0198】
<インター予測部の動作例>
図15および
図16は、インター予測部51が行うBIOを含むBi予測を説明するフローチャートである。
【0199】
なお、この処理は、後述する本技術のBIOを含むBi予測処理と比較するための従来のBIOを含むBi予測処理である。また、このBIOを含むBi予測処理は、符号化側と復号側の両方で行われる処理であり、
図10のステップS34で行われる動き予測・補償処理の一部の処理であり、
図13のステップS136で行われるインター予測処理の一部の処理である。
【0200】
図15のステップS301において、インター予測制御部201は、動き予測・補償部47から供給されるインター予測のパラメータを取得する。なお、復号装置101の場合、インター予測のパラメータは、可逆復号部132から供給される。
【0201】
インター予測のパラメータは、フレーム内のPU位置、PUサイズ、予測方向(L0,L1,Biのうちいずれか1つが設定される)、参照画像情報、動き情報などからなる。
【0202】
インター予測制御部201は、L0予測のパラメータをL0予測ブロック生成部202に供給する。L0予測のパラメータは、PU位置、PUサイズ、参照画像情報REFIDX_L0、動き情報MV_L0からなる。インター予測制御部201は、L1予測のパラメータをL1予測ブロック生成部203に供給する。L1予測のパラメータは、PU位置、PUサイズ、参照画像情報REFIDX_L1、動き情報MV_L1からなる。
【0203】
インター予測制御部201は、Bi予測のパラメータを、BIOコスト計算部204、Bi予測ブロック生成部206、およびBIO処理を含むBi予測ブロック生成部207に供給する。Bi予測のパラメータは、PUサイズを示す情報である。
【0204】
インター予測制御部201は、BIO閾値をBIO適用判定部205に供給する。インター予測制御部201は、予測方向を予測ブロック選択部209に供給し、予測ブロック選択部209を制御する。
【0205】
ステップS302において、L0予測ブロック生成部202は、インター予測制御部201から供給されるL0予測のパラメータに基づいて、フレームメモリ44にアクセスし、参照画像からL0予測ブロックを生成する。なお、復号装置101の場合、参照画像は、フレームメモリ141にアクセスされて参照される。
【0206】
ステップS303において、L1予測ブロック生成部203は、インター予測制御部201から供給されるL1予測のパラメータに基づいて、フレームメモリ44にアクセスし、参照画像からL1予測ブロックを生成する。
【0207】
ステップS302およびS303の処理における最大バッファサイズは、PU´サイズである。PU´サイズは、PUのサイズ相当のサイズであり、PUのサイズより一回り大きいサイズを表す。
【0208】
ステップS304において、BIOコスト計算部204は、4×4単位に、L0予測ブロック生成部202から供給されるL0予測画像とL1予測ブロック生成部203から供給されるL1予測画像とのSADを計算する。4×4単位にSADを計算し、積み上げることで、SADの総和であるSAD_4×4ブロックが取得される。
【0209】
ステップS305において、BIOコスト計算部204は、PU単位に、L0予測ブロック生成部202から供給されるL0予測画像とL1予測ブロック生成部203から供給されるL1予測画像とのSADを計算する。PU単位にSADを計算し、積み上げることで、SADの総和であるSAD_PUが取得される。取得されたSAD_PUは、BIOコスト計算部204からBIO適用判定部205に供給される。
【0210】
ステップS306において、BIO適用判定部205は、BIO_PU_ONフラグを、BIOコスト計算部204から供給されるSAD_PU>=インター予測制御部201から供給されるBIO閾値_PUに基づいて決定する。決定されたBIO_PU_ONフラグは、BIO適用判定部205から、Bi予測ブロック生成部206、BIO処理を含むBi予測ブロック生成部207、Bi予測ブロック選択部208に供給される。
【0211】
BIO閾値よりもSADが大きいとき、BIO_PU_ONフラグが、BIO適用を示すBIO_PU_ON=1に決定され、BIO閾値よりもSADが小さいとき、BIO_PU_ONフラグが、BIO不適用を示すBIO_PU_ON=0に決定される。
【0212】
ステップS307において、Bi予測ブロック生成部206およびBIO処理を含むBi予測ブロック生成部207は、BIO_PU_ONフラグが1であるか否かを判定する。
【0213】
ステップS307において、BIO_PU_ONフラグが1ではないと判定された場合、処理は、ステップS308に進む。
【0214】
ステップS308において、Bi予測ブロック生成部206は、L0予測ブロック生成部202から供給されるL0予測画像とL1予測ブロック生成部203から供給されるL1予測画像とから、Bi予測ブロックPUを生成する。生成されたBi予測ブロックPUは、Bi予測ブロック生成部206からBi予測ブロック選択部208に供給される。その後、BIOを含むBi予測処理は終了される。
【0215】
ステップS308の処理における最大バッファサイズは、PUサイズである。
【0216】
一方、ステップS307において、BIO_PU_ONフラグが1であると判定された場合、処理は、ステップS309に進む。
【0217】
以降のステップS309乃至S320においては、BIO処理を含むBi予測ブロック生成部207により、BIO処理を含むBi予測画像の生成処理が行われる。
【0218】
ステップS309において、BIO処理を含むBi予測ブロック生成部207は、L0予測ブロック生成部202から供給されるL0予測画像とL1予測ブロック生成部203から供給されるL1予測画像とから、複数の勾配を計算する。ステップS309の処理における最大バッファサイズは、PU´サイズ×9個である。
【0219】
ステップS310において、BIO処理を含むBi予測ブロック生成部207は、PU内に含まれる4×4ブロック数を取得する。
【0220】
ステップS311において、BIO処理を含むBi予測ブロック生成部207は、4×4ブロック番号に0を設定する。
【0221】
図16のステップS312において、BIO処理を含むBi予測ブロック生成部207は、4×4ブロック番号が4×4ブロック数より小さいか否かを判定する。
【0222】
ステップS312において、4×4ブロック番号が4×4ブロック数より小さいと判定された場合、処理は、ステップS313に進む。
【0223】
ステップS313において、BIO処理を含むBi予測ブロック生成部207は、4×4ブロック番号からPU内の位置とSAD_4×4を取得する。
【0224】
ステップS314において、BIO処理を含むBi予測ブロック生成部207は、BIO_4×4_ONをSAD_4×4>=BIO閾値_4×4に基づいて決定する。
【0225】
ステップS315において、BIO処理を含むBi予測ブロック生成部207は、BIO_4×4_ONフラグが1であるか否かを判定する。
【0226】
ステップS315において、BIO_4×4_ONフラグが1ではないと判定された場合、処理は、ステップS316に進む。
【0227】
ステップS316において、BIO処理を含むBi予測ブロック生成部207は、4×4ブロック番号の領域のL0予測画像とL1予測画像からBi予測値を生成する。
【0228】
ステップS315において、BIO_4×4_ONフラグが1であると判定された場合、処理は、ステップS317に進む。
【0229】
ステップS317において、BIO処理を含むBi予測ブロック生成部207は、4×4ブロック番号の領域の複数の勾配から速度を計算する。
【0230】
ステップS318において、BIO処理を含むBi予測ブロック生成部207は、4×4ブロック番号の領域のL0予測画像、L1予測画像、勾配、および速度からBIO予測値を生成する。
【0231】
ステップS316およびS318の後、処理は、ステップS319に進む。
【0232】
ステップS319において、BIO処理を含むBi予測ブロック生成部207は、予測値を、バッファにおける4×4ブロック番号の位置に保存する。ステップ319の処理における最大バッファサイズは、PUサイズである。
【0233】
ステップS320において、BIO処理を含むBi予測ブロック生成部207は、4×4ブロック番号をインクリメントする。その後、ステップS312に戻り、それ以降の処理が繰り返される。
【0234】
ステップS308の後、または、ステップS312において、4×4ブロック番号が4×4ブロック数より小さくないと判定された場合、BIOを含むBi予測は終了される。
【0235】
なお、上述したBIOを含むBi処理においては、ステップS305で、PU全体でL0予測ブロックとL1予測ブロックのSADが計算され、ステップS306において、SADと閾値とを比較してBIO処理の適用可否が判定されて、ステップS307において、処理が分岐されている。
【0236】
そのため、VPDUより大きなPUでインター予測する場合に、PUを仮想的に複数のvPUに分割処理することが困難になってしまった。その結果、ステップS302、S303、およびS309で必要になるバッファは、ステップS309の勾配計算やステップS317の速度計算のためにPUより一回り大きな領域であるPU´が必要となっている。PU´の最大サイズは、PUの水平サイズと垂直サイズとをそれぞれ2加算した結果である130×130のサイズである。
【0237】
さらに、ステップS308では、PUサイズのバッファが必要となる。これらのことは、BIOを含むインター予測部51では、大きなバッファリソースが必要となることを意味する。
【0238】
また、このバッファを必要とするインター予測部51をHW(ハードウェア)実装した場合、BIOを含むインター予測のパイプライン遅延とTU処理のパイプライン遅延が大きく異なるため、スループットを維持するためのHW実装難易度も高くなってしまう。
【0239】
これは、符号化側、復号側の両方に関わる。符号化側では、CUを常に64×64以下に分解するなどの自己制約で回避することは可能であるが、符号化側の自由度を確保するためにも解決方法があると望ましい。規格適合が求められる復号側では、大きなHWリソースが必要不可欠である。
【0240】
そこで、上述したように、本技術においては、BIOなどの双方向予測を行うか否かについての判定に用いるコストを計算する処理単位をVPDUサイズ相当の分割処理単位またはVPDUサイズ以下の分割処理単位に分割し、分割処理単位に基づいて計算されたコストを用いて判定を行うようにした。
【0241】
VPDUサイズ相当は、VPDUサイズより一回り大きな領域であるVPDU´サイズを表す。
【0242】
<インター予測部の動作例>
図17および
図18は、本技術の第1の実施の形態の動作例として、インター予測部51が行うBIOを含むBi予測を説明するフローチャートである。
【0243】
図17および
図18においては、符号化装置1の場合について説明するが、復号装置101の場合も同様の処理が行われるので、その説明については省略される。
【0244】
ステップS401において、インター予測制御部201は、動き予測・補償部47から供給されるインター予測のパラメータを取得する。
【0245】
ステップS402において、インター予測制御部201は、PU内に含まれるvPU数を取得する。すなわち、PUがVPDUより大きい場合、PUは、仮想的に複数のvPUに分割されている。PUが128×128である場合、vPU数には4が設定される。PUが128×64または64×128である場合、vPU数には2が設定される。PUが64×64以下である場合、vPU数には1が設定される。vPU数が1である場合は、仮想的な分割はなされず、実質的に、
図15および
図16と同様の処理が行われる。
【0246】
ステップS403において、インター予測制御部201は、最初に処理するvPU番号として0を設定する。
【0247】
ステップS404において、インター予測制御部201は、vPU番号がvPU数より小さいか否かを判定する。
【0248】
ステップS404において、vPU番号がvPU数より小さいと判定された場合、処理は、ステップS405に進む。
【0249】
ステップS405において、インター予測制御部201は、PUサイズとvPU番号から、PU内のどの領域を処理するかを示すvPUの位置とサイズを取得する。
【0250】
図19は、PUサイズ、vPU番号、および処理位置とサイズの対応関係を示す図である。
【0251】
PUサイズが128×128において、vPU番号が0のとき、処理する位置が左上であり、サイズが64×64である。vPU番号が1のとき、処理する位置が右上であり、サイズが64×64である。vPU番号が2のとき、処理する位置が左下であり、サイズが64×64である。vPU番号が3のとき、処理する位置が右下であり、サイズが64×64である。
【0252】
PUサイズが128×64において、vPU番号が0のとき、処理する位置が左であり、サイズが64×64である。vPU番号が1のとき、処理する位置が右であり、サイズが64×64である。
【0253】
PUサイズが64×128において、vPU番号が0のとき、処理する位置が上であり、サイズが64×64である。vPU番号が1のとき、処理する位置が下であり、サイズが64×64である。
【0254】
PUサイズが64×64以下において、vPU番号が0のとき、処理する位置がPUそのものである。
【0255】
図17に戻って、ステップS405で取得されたvPUの位置とサイズは、L0予測ブロック生成部202およびL1予測ブロック生成部203に供給される。
【0256】
ステップS406において、L0予測ブロック生成部202は、vPU番号の領域のL0予測ブロックを生成する。
【0257】
ステップS407において、L1予測ブロック生成部203は、vPU番号の領域のL1予測ブロックを生成する。
【0258】
ステップ406およびS407の処理における最大バッファサイズは、例えば、ステップS413の勾配計算やステップS421の速度計算で必要となる一回り大きな領域が含まれるVPDU´サイズである。VPDU´サイズは、VPDUのサイズより一回り大きいサイズである、上述したVPDUサイズ相当を表し、例えば、水平・垂直サイズをそれぞれ2を加算した結果である66×66とされる。
【0259】
後段のBIO適用判定は最大でもVPDUサイズのSAD値で行われるため、ここで生成されたL0予測ブロックやL1予測ブロックを保存しておくバッファサイズも、VPDUサイズをベースとすることができる。
【0260】
ステップS408において、BIOコスト計算部204は、vPU内の4×4単位に、L0予測ブロック生成部202から供給されるL0予測画像とL1予測ブロック生成部203から供給されるL1予測画像とのSADを計算する。4×4単位にSADを計算し、積み上げることで、SADの総和であるSAD_4×4ブロックが取得される。
【0261】
後段において、速度計算の単位である4×4ブロックでも、再度BIOの適用判定を行い、効果が見込めない場合のアーリーターミネーションとするため、このSAD_4×4ブロックも保存しておく必要がある。ただし、SAD_4×4ブロックの保存のためのバッファサイズは、
図15のステップS304と比較して、1/4のサイズに削減することができる。
【0262】
ステップS409において、BIOコスト計算部204は、vPU単位に、L0予測ブロック生成部202から供給されるL0予測画像とL1予測ブロック生成部203から供給されるL1予測画像とのSADを計算する。vPU単位にSADを計算し、積み上げることで、SADの総和であるSAD_vPUが取得される。取得されたSAD_vPUは、BIOコスト計算部204からBIO適用判定部205に供給される。
【0263】
ステップS410において、BIO適用判定部205は、BIO_vPU_ONフラグを、BIOコスト計算部204から供給されるSAD_vPU>=インター予測制御部201から供給されるBIO閾値_vPUに基づいて決定する。BIO閾値_vPUは、BIO閾値_PUが、ステップS405で求めたvPUのサイズに応じた値にスケールされた値である。
【0264】
決定されたBIO_vPU_ONフラグは、BIO適用判定部205から、Bi予測ブロック生成部206、BIO処理を含むBi予測ブロック生成部207、Bi予測ブロック選択部208に供給される。
【0265】
ステップS411において、Bi予測ブロック生成部206およびBIO処理を含むBi予測ブロック生成部207は、BIO_vPU_ONフラグが1であるか否かを判定する。
【0266】
ステップS411において、BIO_vPU_ONフラグが1ではないと判定された場合、vPU全体に対してBIOの効果がないとして、処理は、ステップS412に進む。
【0267】
ステップS412において、Bi予測ブロック生成部206は、L0予測ブロック生成部202から供給されるL0予測画像とL1予測ブロック生成部203から供給されるL1予測画像とから、Bi予測ブロックvPUを生成する。生成されたBi予測ブロックvPUは、バッファに保存されるとともに、Bi予測ブロック生成部206からBi予測ブロック選択部208に供給される。
【0268】
HW実装時にパイプラインを組む場合、vPUのインター予測と並列にVPDU単位のTU処理も実行されており、このタイミングで次の処理が開始できるようになる。そのため、ここに用意しておくBi予測を保存しておくバッファも最大VPDUサイズであればよい。その後、処理は、
図18のステップS425に進む。
【0269】
一方、ステップS411において、BIO_vPU_ONフラグが1であると判定された場合、処理は、ステップS413に進む。
【0270】
ステップS413において、BIO処理を含むBi予測ブロック生成部207は、L0予測ブロック生成部202から供給されるL0予測ブロックとL1予測ブロック生成部203から供給されるL1予測ブロックとから、複数の勾配を計算する。
【0271】
ステップS413では、L0予測ブロックとL1予測ブロックとから9種類の中間パラメータが計算される。L0予測ブロックとL1予測ブロック同士の変化量やそれぞれの予測ブロックでの水平・垂直方向でのそれぞれの画素値の変化量が計算されるので、それらをまとめて勾配と呼ぶ。勾配は、予測ブロックと同じ画素数ずつ計算する必要があるため、ここで、必要となるバッファは最大VPDU´サイズ×9個でよい。
【0272】
図18のステップS414において、BIO処理を含むBi予測ブロック生成部207は、vPU内に含まれる4×4ブロック数を取得する。例えば、vPUが64×64の場合、4×4ブロック数は256個となる。Optical flowでは、ピクセル単位で速度を求めて予測値を計算するのが最も予測精度がよいが、それには、膨大な計算が必要となる。BIOでは、性能とコストのトレードオフで、4×4ブロック単位に速度を計算することで、バランスをとっている。
【0273】
ステップS415において、BIO処理を含むBi予測ブロック生成部207は、最初に処理する4×4ブロック番号として0を設定する。
【0274】
ステップS416において、BIO処理を含むBi予測ブロック生成部207は、4×4ブロック番号が4×4ブロック数より小さいか否かを判定する。
【0275】
ステップS416において、4×4ブロック番号が4×4ブロック数より小さいと判定された場合、処理は、ステップS417に進む。
【0276】
ステップS417において、BIO処理を含むBi予測ブロック生成部207は、4×4ブロック番号からvPU内の位置とSAD_4×4を取得する。4×4ブロックは、ラスタスキャン順で処理されていく。
【0277】
ステップS418において、BIO処理を含むBi予測ブロック生成部207は、BIO_4×4_ONをSAD_4×4>=BIO閾値_4×4に基づいて決定する。
【0278】
ステップS419において、BIO処理を含むBi予測ブロック生成部207は、BIO_4×4_ONフラグが1であるか否かを判定する。
【0279】
ステップS419において、BIO_4×4_ONフラグが1ではないと判定された場合、4×4ブロックに対してBIOの効果が見込めないとし、処理は、ステップS420に進む。
【0280】
ステップS420において、BIO処理を含むBi予測ブロック生成部207は、4×4ブロック番号の領域のL0予測画像とL1予測画像との平均を計算することで、Bi予測値を生成する。
【0281】
ステップS419において、BIO_4×4_ONフラグが1であると判定された場合、処理は、ステップS421に進む。
【0282】
ステップS421において、BIO処理を含むBi予測ブロック生成部207は、4×4ブロック番号の領域の複数の勾配から速度を計算する。
【0283】
ステップS422において、BIO処理を含むBi予測ブロック生成部207は、4×4ブロック番号の領域のL0予測画像、L1予測画像、勾配、および速度からBIO予測値を生成する。
【0284】
ステップS420およびS422の後、処理は、ステップS423に進む。
【0285】
ステップS423において、BIO処理を含むBi予測ブロック生成部207は、ステップS420またはステップS422で生成された予測値を、バッファにおける4×4ブロック番号の位置に保存する。ステップ423の処理における最大バッファサイズは、VPDUサイズである。バッファは、S412の処理で用いるバッファと共通化してもよい。
【0286】
ステップS424において、BIO処理を含むBi予測ブロック生成部207は、4×4ブロック番号をインクリメントする。その後、ステップS416に戻り、それ以降の処理が繰り返される。
【0287】
ステップS412の後、または、ステップS416において、4×4ブロック番号が4×4ブロック数以上であると判定された場合、処理は、ステップS425に進む。
【0288】
ステップS425において、インター予測制御部201は、vPU番号をインクリメントし、ステップS404に戻り、それ以降の処理が繰り返される。
【0289】
ステップS404において、vPU番号がvPU数以上であると判定された場合、BIO処理を含むBi予測は終了される。
【0290】
図20および
図21は、従来の動作と、本技術の第1の実施の形態の動作を実施した場合の比較を示す図である。
【0291】
図20の上側においては、CU(PU)128×128で、VPDU=64×64の場合における最初にBIOの適用判定のためにSADを計算した範囲が、従来の動作と本技術の第1の実施の形態の動作の場合についてそれぞれ示されている。CU(PU)128×128の場合、CU(PU)は、BIO_vPU_ON判定のためのSAD計算領域であるvPUが4つに分割されている。
【0292】
図20の下側においては、CU(PU)128×64で、VPDU=64×64の場合における最初にBIOの適用判定のためにSADを計算した範囲が、従来の動作と本技術の第1の実施の形態の動作の場合についてそれぞれ示されている。CU(PU)128×64の場合、CU(PU)は、BIO_vPU_ON判定のためのSAD計算領域であるvPUが左右の2つに分割されている。
【0293】
図21の上側においては、CU(PU)64×128で、VPDU=64×64の場合における最初にBIOの適用判定のためにSADを計算した範囲が、従来の動作と本技術の第1の実施の形態の動作の場合についてそれぞれ示されている。CU(PU)64×128の場合、CU(PU)は、BIO_vPU_ON判定のためのSAD計算領域であるvPUが上下の2つに分割されている。
【0294】
図21の下側においては、CU(PU)64×64以下で、VPDU=64×64の場合における最初にBIOの適用判定のためにSADを計算した範囲が、従来の動作と本技術の第1の実施の形態の動作の場合についてそれぞれ示されている。CU(PU)64×64以下の場合、CU(PU)は、BIO_vPU_ON判定のためのSAD計算領域であるvPUが分割されず、1つで構成される。
【0295】
従来動作では、PU全体のSADが必要なため、広範囲のL0予測ブロックとL1予測ブロックとを予め準備、保存しておく必要があるが、本技術では、VPDUより大きなPUでは仮想的に分割したvPU毎にBIOの適用判定を行うため、予め準備、保存しておくL0予測ブロックとL1予測ブロックのバッファを削減することが可能である。
【0296】
また、
図15および
図16のステップS308、S309、およびS319で用いるバッファと比較して、
図17および
図18のステップS412、S413、およびS423で用いるバッファも1/4の削減が可能となる。
【0297】
BIOのような復号側で2つの予測ブロックを生成し、コスト計算から判定を行い、インター予測の符号化効率を改善させるツールとして、FRUC(Frame Rate Up-Conversion)やDMVR(Decoder-side motion vector refinement)がある。BIOのアーリーターミネーション目的と異なり、FRUCやDMVRでは、MV補正を目的としてPUサイズより大きなL0予測ブロックとL1予測ブロックとが生成され、SADまたは類似するコスト計算が行われている。
【0298】
PUがVPDUより大きい場合には、本技術と同様の対応が必要となる。FRUCやDMVRでも本技術のように、PUがVPDUより大きい場合、仮想的に複数のvPUに分割し、vPU毎にMV補正することで対応することができる。
【0299】
ここまで上述してきた従来動作のPU全体でのSAD計算とBIOの適用判定、または、本技術のvPU毎のSAD計算とBIOの適用判定は、大枠でのアーリーターミネーションが主な目的であるため、さらなる削減を行うことができる。
【0300】
<変形例1>
上述した第1の実施の形態では、PUがVPDUより大きい場合に、仮想的に複数のvPUに分割し、vPU毎にSAD計算をしてBIOの適用判定する例を説明した。PUを構成するvPUは、元々同じPUに含まれているということで、ある部分的な傾向が異なる部分の傾向と似ているのではないかと考えられる。
【0301】
図22および
図23は、上述した傾向を前提とし、変形例1として、PUがVPDUより大きい場合に、vPU番号が0のBIO判定結果を、他のvPUでも用いた例を示す図である。
【0302】
図22の上側においては、CU(PU)128×128で、VPDU=64×64の場合における最初にBIOの適用判定のためにSADを計算した範囲が示されている。CU(PU)128×128の場合、CU(PU)は、4つに分割されたBIO_vPU_ON判定のためのSAD計算領域であるvPUのうち、左上(vPU番号=0)のvPUについてSADが計算され、残りのvPU(右上、左下、右上)においては、vPU番号=0のvPUの結果がコピーして用いられる。
【0303】
図22の下側においては、CU(PU)128×64で、VPDU=64×64の場合における最初にBIOの適用判定のためにSADを計算した範囲が示されている。CU(PU)128×64の場合、CU(PU)は、2つに分割されたBIO_vPU_ON判定のためのSAD計算領域であるvPUのうち、左(vPU番号=0)のvPUについてSADが計算され、残りのvPU(右)においては、vPU番号=0のvPUの結果がコピーして用いられる。
【0304】
図23の上側においては、CU(PU)64×128で、VPDU=64×64の場合における最初にBIOの適用判定のためにSADを計算した範囲が示されている。CU(PU)128×64の場合、CU(PU)は、2つに分割されたBIO_vPU_ON判定のためのSAD計算領域であるvPUのうち、上(vPU番号=0)のvPUについてSADが計算され、残りのvPU(下)においては、vPU番号=0のvPUの結果がコピーして用いられる。
【0305】
図23の下側においては、CU(PU)64×64以下で、VPDU=64×64の場合における最初にBIOの適用判定のためにSADを計算した範囲が示されている。CU(PU)64×64以下の場合、CU(PU)は、BIO_vPU_ON判定のためのSAD計算領域であるvPUが分割されず、1つで構成される。
【0306】
<インター予測部の動作例>
図24および
図25は、
図23の場合のBIOを含むBi予測を説明するフローチャートである。
【0307】
図24および
図25のステップS501乃至S508と、ステップS510乃至S526は、
図17および
図18のステップS401乃至S425と基本的に同様の処理を行うので、その説明は繰り返しになるので、適宜、省略される。
【0308】
図25のステップS508において、BIOコスト計算部204は、vPU内の4×4単位に、L0予測ブロック生成部202から供給されるL0予測画像とL1予測ブロック生成部203から供給されるL1予測画像とのSADを計算する。4×4単位にSADを計算し、積み上げることで、SADの総和であるSAD_4×4ブロックが取得される。
【0309】
ステップS509において、BIOコスト計算部204は、vPU番号が0であるか否かを判定する。
【0310】
ステップS509において、vPU番号が0であると判定された場合、ステップS510に進む。
【0311】
ステップS510において、BIOコスト計算部204は、vPU単位に、L0予測ブロック生成部202から供給されるL0予測画像とL1予測ブロック生成部203から供給されるL1予測画像とのSADを計算する。vPU単位にSADを計算し、積み上げることで、SADの総和であるSAD_vPUが取得される。取得されたSAD_vPUは、BIOコスト計算部204からBIO適用判定部205に供給される。
【0312】
ステップS511において、BIO適用判定部205は、BIO_vPU_ONフラグを、BIOコスト計算部204から供給されるSAD_vPU>=インター予測制御部201から供給されるBIO閾値_vPUに基づいて決定する。その後、処理は、ステップS512に進む。
【0313】
一方、vPU番号が0ではないと判定された場合、ステップS510およびS511はスキップされ、処理は、ステップS512に進む。
【0314】
以上のように、PUにおいて、ラスタスキャン順に最初に位置するvPUのときだけ、vPUのSADの積み上げとBIOの判定を行うようにしたので、アーリーターミネーションに係る処理や処理時間を短縮することができる。
【0315】
<変形例2>
図26および
図27は、変形例2として、各vPU内の部分的なSAD値でBIOの適用判定を行う例を示す図である。
【0316】
図26の上側においては、CU(PU)128×128で、VPDU=64×64の場合における最初にBIOの適用判定のためにSADを計算した範囲が示されている。CU(PU)128×128の場合、CU(PU)は、2つに分割されたBIO_vPU_ON判定のためのSAD計算領域である各vPUにおいて、左上の一部分の領域(32×32)についてSADが計算される。
【0317】
図26の下側においては、CU(PU)128×64で、VPDU=64×64の場合における最初にBIOの適用判定のためにSADを計算した範囲が示されている。CU(PU)128×64の場合、CU(PU)は、2つに分割されたBIO_vPU_ON判定のためのSAD計算領域である各vPUにおいて、左上の一部分の領域(32×32)についてSADが計算される。
【0318】
図27の上側においては、CU(PU)64×128で、VPDU=64×64の場合における最初にBIOの適用判定のためにSADを計算した範囲が示されている。CU(PU)128×64の場合、CU(PU)は、2つに分割されたBIO_vPU_ON判定のためのSAD計算領域である各vPUにおいて、左上の一部分の領域(32×32)についてSADが計算される。
【0319】
図27の下側においては、CU(PU)64×64以下で、VPDU=64×64の場合における最初にBIOの適用判定のためにSADを計算した範囲が示されている。CU(PU)64×64以下の場合、CU(PU)は、BIO_vPU_ON判定のためのSAD計算領域であるvPUが分割されず、左上の一部分の領域(32×32)についてSADが計算される。
【0320】
以上のように、
図26および
図27においては、各vPUの左上1/4の領域でBIOの適用判定を行う例が示されているが、左上1/4の領域はHWでパイプラインを組む場合との相性も考慮されている。BIOの適用判定が可能となるのは、左上1/4領域のL0予測ブロックとL1予測ブロックが準備できたときだからである。
【0321】
各vPUの一部の領域のみ、BIOの適用判定に用いるようにすることで、各パイプラインステージに用意しておくバッファをVPDUサイズからさらに削減することができる。
【0322】
なお、一部の領域は、どんな大きさでもよく、例えば、0×0のサイズでコスト計算(SAD)をすることも可能である。すなわち、0ということは、コスト計算しないで、アーリーターミネーションをスキップすることと同意である。
【0323】
さらに、各vPUのBIO_vPU_ONの判定するために必要なSADを計算する領域を動的に変更することも可能である。
【0324】
<インター予測部の動作例>
図28および
図29は、各vPUのBIO_vPU_ONの判定のための部分的なSAD計算領域の判定処理を説明するフローチャートである。
【0325】
図28および
図29では、L0予測ブロックとL1予測ブロックを生成するための2つのMVを水平成分と垂直成分の4つに分けて、参照位置が一番離れているものが動き情報として精度が悪いと仮定して、その領域をBIOで補正する効果があるかが判定される。この処理は、例えば、
図25のステップS509の前に行われる。この場合、ステップS509においては、設置された領域であるか否かが判定され、ステップS510およびS511の処理は、設定された領域のみ行われるようなフローが考えられる。
【0326】
ステップS601において、インター予測制御部201は、L0予測のMVL0x、MVL0yとL1予測のMVL1x、MVL1yとを取得する。
【0327】
ステップS602において、インター予測制御部201は、4つのMVから絶対値最大のMVを選択してMV_MAXに代入する。
【0328】
ステップS603において、インター予測制御部201は、|MV_MAX|<MV_閾値であるか否かを判定する。
【0329】
ステップS603において、|MV_MAX|<MV_閾値であると判定された場合、処理は、ステップS604に進む。
【0330】
ステップS604において、インター予測制御部201は、vPUの中心部をSAD計算領域に設定する。
【0331】
ステップS605において、インター予測制御部201は、PUサイズ<vPUサイズであるか否かを判定する。
【0332】
ステップS605において、PUサイズ<vPUサイズであると判定された場合、処理は、ステップS606に進む。
【0333】
ステップS606において、インター予測制御部201は、水平サイズ=水平PUサイズ/2とし、垂直サイズ=垂直PUサイズ/2とする。
【0334】
ステップS605において、PUサイズ<vPUサイズではないと判定された場合、処理は、ステップS607に進む。
【0335】
ステップS607において、インター予測制御部201は、水平サイズ=水平vPUサイズ/2とし、垂直サイズ=垂直vPUサイズ/2とする。
【0336】
一方、ステップS603において、|MV_MAX|<MV_閾値ではないと判定された場合、処理は、ステップS608に進む。
【0337】
ステップS608において、インター予測制御部201は、MV_MAX==MVL0x||MV_MAX==MVL1xであるか否かを判定する。
【0338】
ステップS608において、MV_MAX==MVL0x||MV_MAX==MVL1xであると判定された場合、処理は、ステップS609に進む。
【0339】
ステップS609において、インター予測制御部201は、MV_MAXが0より小さいか否かを判定する。
【0340】
ステップS609において、MV_MAXが0より小さいと判定された場合、処理は、ステップS610に進む。
【0341】
ステップS610において、インター予測制御部201は、vPUの左側をSAD計算領域に設定する。
【0342】
ステップS609において、MV_MAXが0以上であると判定された場合、処理は、ステップS611に進む。
【0343】
ステップS611において、インター予測制御部201は、vPUの右側をSAD計算領域に設定する。
【0344】
ステップS610またはS611の後、処理は、ステップS612に進む。
【0345】
ステップS612において、インター予測制御部201は、PUサイズ<vPUサイズであるか否かを判定する。
【0346】
ステップS612において、PUサイズ<vPUサイズであると判定された場合、処理は、ステップS613に進む。
【0347】
ステップS613において、インター予測制御部201は、水平サイズ=水平PUサイズ/4とし、垂直サイズ=垂直PUサイズとする。
【0348】
ステップS612において、PUサイズ<vPUサイズではないと判定された場合、処理は、ステップS614に進む。
【0349】
ステップS614において、インター予測制御部201は、水平サイズ=水平vPUサイズ/4とし、垂直サイズ=垂直vPUサイズとする。
【0350】
また、ステップS608において、MV_MAX==MVL0x||MV_MAX==MVL1xではないと判定された場合、処理は、ステップS615に進む。
【0351】
ステップS615において、インター予測制御部201は、MV_MAX<0であるか否かを判定する。
【0352】
ステップS615において、MV_MAX<0であると判定された場合、処理は、ステップS616に進む。
【0353】
ステップS616において、インター予測制御部201は、vPUの上側をSAD計算領域に設定する。
【0354】
ステップS615において、MV_MAX<0ではないと判定された場合、処理は、ステップS617に進む。
【0355】
ステップS617において、インター予測制御部201は、vPUの下側をSAD計算領域に設定する。
【0356】
ステップS616またはS617の後、処理は、ステップS618に進む。
【0357】
ステップS618において、インター予測制御部201は、PUサイズ<vPUサイズであるか否かを判定する。
【0358】
ステップS618において、PUサイズ<vPUサイズであると判定された場合、処理は、ステップS619に進む。
【0359】
ステップS619において、インター予測制御部201は、水平サイズ=水平PUサイズとし、垂直サイズ=垂直PUサイズ/4とする。
【0360】
ステップS618において、PUサイズ<vPUサイズではないと判定された場合、処理は、ステップS620に進む。
【0361】
ステップS620において、インター予測制御部201は、水平サイズ=水平vPUサイズとし、垂直サイズ=垂直vPUサイズ/4とする。
【0362】
ステップS606、ステップS607、ステップS613、ステップS614、ステップS619、およびステップS620の後、処理は、
図29のステップS621に進む。
【0363】
ステップS621において、インター予測制御部201は、水平サイズ<4であるか否かを判定する。
【0364】
ステップS621において、水平サイズ<4であると判定された場合、処理は、ステップS622に進む。
【0365】
ステップS622において、インター予測制御部201は、水平サイズ=4とし、処理は、ステップS623に進む。
【0366】
ステップS621において、水平サイズ<4ではないと判定された場合、ステップS622はスキップされ、処理は、ステップS623に進む。
【0367】
ステップS623において、インター予測制御部201は、垂直サイズ<4であるか否かを判定する。
【0368】
ステップS623において、垂直サイズ<4であると判定された場合、処理は、ステップS624に進む。
【0369】
ステップS624において、インター予測制御部201は、垂直サイズ=4とし、BIO_vPU_ON判定のための部分的なSAD計算領域の判定処理は終了される。
【0370】
ステップS623において、垂直サイズ<4ではないと判定された場合、ステップS624はスキップされ、BIO_vPU_ON判定のための部分的なSAD計算領域の判定処理は終了される。
【0371】
以上のような部分的にSAD計算を行ってのBIOの適用判定を行うような処理も、FRUCやDMVRに適用することは可能である。しかしながら、BIOのアーリーターミネーション目的とは異なり、FRUCやDMVRでは、SADまたは類似のコスト計算とその後の判定が、ダイレクトにインター予測精度に反映される。したがって、コスト計算を省略した場合のペナルティが大きくなる恐れがあるため、部分的にSAD計算を行い、BIOの適用判定を行うような処理は、BIO特有の処理といえる。
【0372】
<2.第2の実施の形態(フラグによる動作の共有の例)>
第2の実施の形態では、第1の実施の形態と同様に、PUがVPDUより大きい場合、PUが仮想的にvPUに分割され、vPU単位で処理が行われる。
【0373】
第1の実施の形態との違いとしては、第2の実施の形態においては、符号化装置1と復号装置101の間で送受信されるビットストリームに、BIO_PU_ONフラグを1ビット含ませることで、符号化装置1と復号装置101で動作を共有させることができる。
【0374】
<インター予測部の動作例>
図30および
図31は、本技術の第2の実施の形態の動作例として、インター予測部51が行うBIOを含むBi予測を説明するフローチャートである。
【0375】
図30および
図31のステップS701乃至S708と、ステップS715乃至S728は、
図17および
図18のステップS401乃至S408と、ステップS412乃至S425と基本的に同様の処理を行うので、その説明は繰り返しになるので、適宜、省略される。
【0376】
図30のステップS708において、BIOコスト計算部204は、vPU内の4×4単位に、L0予測ブロック生成部202から供給されるL0予測画像とL1予測ブロック生成部203から供給されるL1予測画像とのSADを計算する。4×4単位にSADを計算し、積み上げることで、SADの総和であるSAD_4×4ブロックが取得される。
【0377】
ステップS709において、インター予測制御部201は、vPU数が1であるか否かを判定する。
【0378】
ステップS709において、vPU数が1であると判定された場合、処理は、ステップS710に進む。ステップS710およびS711においては、PU単位と同様な処理が行われる。
【0379】
ステップS710において、BIOコスト計算部204は、BIOコスト計算部204は、vPU単位に、L0予測ブロック生成部202から供給されるL0予測画像とL1予測ブロック生成部203から供給されるL1予測画像とのSADを計算する。vPU単位にSADを計算し、積み上げることで、SADの総和であるSAD_PUが取得される。取得されたSAD_PUは、BIOコスト計算部204からBIO適用判定部205に供給される。
【0380】
ステップS711において、BIO適用判定部205は、BIO_PU_ONフラグを、BIOコスト計算部204から供給されるSAD_PU>=インター予測制御部201から供給されるBIO閾値_PUに基づいて決定する。その後、処理は、ステップS714に進む。
【0381】
ステップS709において、vPU番号が1ではないと判定された場合、処理は、ステップS712に進む。
【0382】
ステップS712において、インター予測制御部201は、vPU番号が0であるか否かを判定する。
【0383】
ステップS709において、vPU番号が0であると判定された場合、処理は、ステップS713に進む。
【0384】
ステップS713において、インター予測制御部201は、BIO_PU_ONを設定する。符号化装置1の場合、動き探索(ME)結果などから決定されたBIO_PU_ONが設定される。復号装置101の場合、ストリームから取得されたBIO_PU_ONが設定される。
【0385】
ステップS712において、vPU番号が0ではいと判定された場合、ステップS713をスキップし、処理は、
図31のステップS714に進む。
【0386】
ステップS714において、BIO_PU_ONフラグが1であるか否かが判定される。
【0387】
ステップS714において、BIO_PU_ONフラグが1ではないと判定された場合、PU全体に対してBIOの効果がないとして、処理は、ステップS715に進む。
【0388】
ステップS715において、Bi予測ブロック生成部206は、L0予測ブロック生成部202から供給されるL0予測画像とL1予測ブロック生成部203から供給されるL1予測画像とから、Bi予測ブロックvPUを生成する。生成されたBi予測ブロックvPUは、バッファに保存するとともに、Bi予測ブロック生成部206からBi予測ブロック選択部208に供給される。
【0389】
一方、ステップS714において、BIO_PU_ONフラグが1であると判定された場合、処理は、ステップS716に進む。
【0390】
ステップS716において、BIO処理を含むBi予測ブロック生成部207は、L0予測ブロック生成部202から供給されるL0予測ブロックとL1予測ブロック生成部203から供給されるL1予測ブロックとから、複数の勾配を計算する。
【0391】
以上のように、ビットストリームに、BIO_PU_ONフラグを含ませることにより、符号化装置1と復号装置101で動作を共有化することが可能となる。
【0392】
なお、ビットストリームにフラグを含ませることは、符号化効率の悪化が懸念されるので、BIO_PU_ONフラグは、すべてのレイヤーに含ませるのではなく、1ビットの価値が相対的に小さいPUがVPDUより大きい場合に限定する。PUがVPDUより大きい以外の場合のPUでは、
図30のステップS709乃至S713に示すように、第1の実施の形態の場合と同様に、PUでSAD値を計算して、BIO適用判定するようにする。
【0393】
BIO_PU_ONフラグがビットストリームに含まれる場合は、符号化装置1が自由に0または1にしてよい。符号化装置1が十分に高性能であれば、BIO_PU_ONフラグを0と1の両方で動き補償して、良好な結果が得られた方を決定するような判定方法もある。また、PUサイズに応じて128×128は、BIO_PU_ONフラグを0、それ以外は1に決めうちする判定方法でもよい。
【0394】
一方、復号装置101では、PUがVPDUより大きいBi予測モードのCUのPUレイヤーでBIO_PU_ONフラグが復号されているので、vPU番号が0のとき、ステップS713でBIO_PU_ONフラグを取得して、処理が進められる。vPU番号が1以降のvPUでは、BIO_PU_ONフラグが設定済みのため、処理は、ステップS713をスキップし、ステップS712から、ステップS714に進む。
【0395】
上述した第2の実施の形態と同様の手法をFRUCやDMVRに適用するのは、不可能ではないが、殆ど意味がない。なぜならば、MV補正のためのデータをビットストリームでもつのは、差分MV(MVD)を符号化することと同義であるからである。
【0396】
<3.第3の実施の形態(sPUによる分割の例)>
第3の実施の形態では、第1の実施の形態と仮想的な分割のサイズが異なり、PUがVPDUより大きい場合、PUが仮想的にsPUに分割され、sPU単位で処理が行われる。
【0397】
すなわち、SAD計算して、BIOの適用判定する処理単位は、VPDU境界を跨がすVPDUサイズ以下であればよいので、第3の実施の形態では、別途、与えられた情報でPUが複数のsPUに仮想的に分割され、sPU毎にBIOの適用判定が行われる。
【0398】
情報の与え方としては、BIO_MAX_SAD_BLOCK_SIZEのような変数をビットストリームに追加し含めることで、符号化装置1と復号装置101で共有する。
【0399】
図32は、BIO_MAX_SAD_BLOCK_SIZEとsPUの対応関係を示す図である。
【0400】
BIO_MAX_SAD_BLOCK_SIZEが1の場合、sPUサイズは、8×8とされる。BIO_MAX_SAD_BLOCK_SIZEが2の場合、sPUサイズは、16×16とされる。BIO_MAX_SAD_BLOCK_SIZEが3の場合、sPUサイズは、32×32とされる。BIO_MAX_SAD_BLOCK_SIZEが4の場合、sPUサイズは、64×64とされる。
【0401】
BIO_MAX_SAD_BLOCK_SIZEの値は、個々の符号化装置1の性能によって任意の値を設定してもよいし、規格として、Profile/Level制約として決めておいてもよい。扱うピクチャサイズに応じて、SD以下で0、HDで1、4Kで2、8kで3のようなLevel制約である。
【0402】
<インター予測部の動作例>
図33および
図34は、本技術の第3の実施の形態の動作例として、インター予測部51が行うBIOを含むBi予測を説明するフローチャートである。
【0403】
なお、
図33および
図34のステップS801乃至S825は、vPUが、サイズの異なるsPUと入れ替わっただけであり、
図17および
図18のステップS401乃至S425と基本的に同様の処理を行うので、その説明は繰り返しになるので、適宜、省略される。
【0404】
図35および
図36は、BIO_MAX_SAD_BLOCK_SIZEを2とした場合の各PUのSADを計算する領域の例を示す図である。
【0405】
図35の上側においては、CU(PU)128×128で、VPDU=64×64で、BIO_MAX_SAD_BLOCK_SIZEを2(sPU=32×32)とした場合の各sPUのSADを計算する領域が示されている。
図35の上側の場合、sPUは、VPDUの境界を跨がず、PUを16分割している。
【0406】
図35の下側においては、CU(PU)128×64で、VPDU=64×64で、BIO_MAX_SAD_BLOCK_SIZEを2(sPU=32×32)とした場合の各sPUのSADを計算する領域が示されている。
図35の下側の場合、sPUは、VPDUの境界を跨がず、PUを8分割している。
【0407】
図36の上側においては、CU(PU)64×128で、VPDU=64×64で、BIO_MAX_SAD_BLOCK_SIZEを2(sPU=32×32)とした場合の各sPUのSADを計算する領域が示されている。
図36の上側の場合、sPUは、VPDUの境界を跨がず、PUを8分割している。
【0408】
図36の下側においては、CU(PU)64×64以下で、VPDU=64×64で、BIO_MAX_SAD_BLOCK_SIZEを2(sPU=32×32)とした場合の各sPUのSADを計算する領域が示されている。
図36の上側の場合、sPUは、VPDUの境界を跨がず、PUを4分割している。
【0409】
以上のように、本技術の第3の実施の形態においては、別途、与えられた情報でPUが複数のsPUに仮想的に分割され、sPU毎にBIOの適用判定が行われる。これにより、vPUの場合のバッファサイズより、バッファサイズをさらに小さくすることができる。
【0410】
<4.第4の実施の形態(BIOの使用禁止の例)>
第4の実施の形態では、PUがVPDUより大きい場合、BIOを使用しないように制約される。これにより、バッファサイズが削減可能である。
【0411】
<インター予測部の動作例>
図37および
図38は、本技術の第4の実施の形態の動作例として、インター予測部51が行うBIOを含むBi予測を説明するフローチャートである。
【0412】
図37および
図38のステップS901乃至S907、およびS926は、
図17および
図18のステップS401乃至S407、およびS425と基本的に同様の処理を行うので、その説明は繰り返しになるので、適宜、省略される。また、
図37および
図38のステップS909乃至S925は、
図15および
図16のステップS304乃至S320と基本的に同様の処理を行うので、その説明は繰り返しになるので、適宜、省略される。
【0413】
ステップS907において、L1予測ブロック生成部203は、vPU番号の領域のL1予測ブロックを生成する。
【0414】
ステップS908において、インター予測制御部201は、1<vPU数であるか否かを判定する。
【0415】
ステップS908において、1<vPU数ではないと判定された場合、ステップS909に進む。vPU数が1である場合、すなわち、vPU=PUであり、ステップS909以降においては、
図15のステップS309以降の処理と同様の処理が行われる。
【0416】
ステップS908において、1<vPU数であると判定された場合、
図38のステップS913に進む。
【0417】
また、ステップS912において、BIO_vPU_ONフラグが1ではないと判定された場合、vPU全体に対してBIOの効果がないとして、処理は、ステップS913に進む。
【0418】
ステップS913において、Bi予測ブロック生成部206は、L0予測ブロック生成部202から供給されるL0予測画像とL1予測ブロック生成部203から供給されるL1予測画像とから、Bi予測ブロックvPUを生成する。生成されたBi予測ブロックvPUは、バッファに保存するとともに、Bi予測ブロック生成部206からBi予測ブロック選択部208に供給される。
【0419】
以上のように、
図37および
図38においては、ステップS907乃至S913に、複数のvPUがあるか否か、すなわち、PUがVPDUより大きいか否かを判定する条件分岐ステップとして、ステップS908が追加されている。
【0420】
PUがVPDUより大きい場合は、ステップS908からステップS913の通常のBi予測に分岐されるので、BIOを使用しないため、PU全体でのSAD値を計算する必要がなく、
図4と同様に、PUを仮想的なvPUに分割しての処理が可能となる。
【0421】
ステップS908からステップS909に分岐してからのステップS909乃至S925は、従来のBIOを含むBi予測(
図15および
図16のS304乃至S320)と同様の処理である。ただし、ステップS909に分岐するのは、PUがVPDU以下の場合であるので、PU全体でSAD計算する場合、VPDU以下のリソースがあれば十分足りる。
【0422】
<5.第5の実施の形態(常時BIOの適用の例)>
第5の実施の形態では、PUがVPDUより大きい場合、常時BIOを適用するようにすることで、バッファサイズを削減するようにした。
【0423】
<インター予測部の動作例>
図39および
図40は、本技術の第5の実施の形態の動作例として、インター予測部51が行うBIOを含むBi予測を説明するフローチャートである。
【0424】
図39および
図40のステップS1001乃至S1008、およびS1026は、
図17および
図18のステップS401乃至S408、およびS425と基本的に同様の処理を行うので、その説明は繰り返しになるので、適宜、省略される。また、
図39および
図40のステップS1014乃至S1025は、
図15および
図16のステップS309乃至S320と基本的に同様の処理を行うので、その説明は繰り返しになるので、適宜、省略される。
【0425】
ステップS1008において、BIOコスト計算部204は、vPU内の4×4単位に、L0予測ブロック生成部202から供給されるL0予測画像とL1予測ブロック生成部203から供給されるL1予測画像とのSADを計算する。4×4単位にSADを計算し、積み上げることで、SADの総和であるSAD_4×4ブロックが取得される。
【0426】
ステップS1009において、インター予測制御部201は、1<vPU数であるか否かを判定する。
【0427】
ステップS1009において、1<vPU数ではないと判定された場合、処理は、ステップS1010に進む。
【0428】
ステップS1010において、BIOコスト計算部204は、PU単位に、L0予測ブロック生成部202から供給されるL0予測画像とL1予測ブロック生成部203から供給されるL1予測画像とのSADを計算する。PU単位にSADを計算し、積み上げることで、SADの総和であるSAD_PUが取得される。取得されたSAD_PUは、BIOコスト計算部204からBIO適用判定部205に供給される。
【0429】
ステップS1011において、BIO適用判定部205は、BIO_PU_ONフラグを、BIOコスト計算部204から供給されるSAD_PU>=インター予測制御部201から供給されるBIO閾値_PUに基づいて決定する。
【0430】
ステップS1012において、BIO_PU_ONフラグが1であるか否かが判定される。
【0431】
ステップS1012において、BIO_PU_ONフラグが1ではないと判定された場合、vPU全体に対してBIOの効果がないとして、処理は、
図40のステップS1013に進む。
【0432】
ステップS1013において、Bi予測ブロック生成部206は、L0予測ブロック生成部202から供給されるL0予測画像とL1予測ブロック生成部203から供給されるL1予測画像とから、Bi予測ブロックvPUを生成する。生成されたBi予測ブロックvPUは、バッファに保存するとともに、Bi予測ブロック生成部206からBi予測ブロック選択部208に供給される。
【0433】
ステップS1012において、BIO_PU_ONフラグが1であると判定された場合、処理は、
図40のステップS1014に進む。
【0434】
また、ステップS1009において、1<vPU数であると判定された場合、ステップS1014に進む。
【0435】
ステップS1014以降においては、
図15のステップS309乃至S320と同様のBIO処理が行われる。
【0436】
以上のように、
図39および
図40においては、ステップS1009において、複数のvPUがあるか否か、すなわち、PUがVPDUより大きいか否かを判定する条件分岐が追加される。
【0437】
PUがVPDUより大きい場合は、S1010乃至S1012のSAD計算から閾値判定までをバイパスして、ステップS1014以降のBIOを適用する処理に入るため、PU全体でSADの計算をする必要がなく、
図4と同様に、PUを仮想的なvPUに分割しての処理が可能となる。
【0438】
ステップS1010乃至S1012に入るのは、PUがVPDU以下の場合のため、PU全体でSAD計算するにしてもVPDU以下のリソースがあれば十分足りる。
【0439】
なお、第5の実施の形態は、FRUCやDMVRに適用することはできない。BIOのSAD計算はアーリーターミネーション目的のため、第5の実施の形態のようにPUサイズのようなほかの判定基準にてコスト計算を回避することが可能である。FRUCやDMVRのコスト計算はMV補正の根幹処理であり、回避することが困難であるからである。
【0440】
以上、本技術によれば、BIOなどの双方向予測を行うか否かについての判定に用いるコストを計算する処理単位をVPDUサイズ相当の分割処理単位(例えば、vPU)またはVPDUサイズ以下の分割処理単位(例えば、sPU)に分割し、分割された処理単位に基づいて計算されたコストを用いて判定を行うようにした。これにより、バッファサイズを削減することができる。
【0441】
VVCでBIOを実施可能であるため、必要な各種バッファのサイズを、従来のバッファサイズの1/4に削減することができる。
【0442】
また、HW構成を最適化することも可能となり、一部のバッファを、従来の1/4より大幅に削減しつつ、BIOを実装することが可能となる。
【0443】
<6.第6の実施の形態(コンピュータ)>
<コンピュータの構成例>
上述した一連の処理は、ハードウェアにより実行することもできるし、ソフトウェアにより実行することもできる。一連の処理をソフトウェアにより実行する場合には、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または汎用のパーソナルコンピュータなどに、プログラム記録媒体からインストールされる。
【0444】
図41は、上述した一連の処理をプログラムにより実行するコンピュータのハードウェアの構成例を示すブロック図である。
【0445】
CPU(Central Processing Unit)301、ROM(Read Only Memory)302、RAM(Random Access Memory)303は、バス304により相互に接続されている。
【0446】
バス304には、さらに、入出力インタフェース305が接続されている。入出力インタフェース305には、キーボード、マウスなどよりなる入力部306、ディスプレイ、スピーカなどよりなる出力部307が接続される。また、入出力インタフェース305には、ハードディスクや不揮発性のメモリなどよりなる記憶部308、ネットワークインタフェースなどよりなる通信部309、リムーバブルメディア311を駆動するドライブ310が接続される。
【0447】
以上のように構成されるコンピュータでは、CPU301が、例えば、記憶部308に記憶されているプログラムを入出力インタフェース305及びバス304を介してRAM303にロードして実行することにより、上述した一連の処理が行われる。
【0448】
CPU301が実行するプログラムは、例えばリムーバブルメディア311に記録して、あるいは、ローカルエリアネットワーク、インターネット、デジタル放送といった、有線または無線の伝送媒体を介して提供され、記憶部308にインストールされる。
【0449】
なお、コンピュータが実行するプログラムは、本明細書で説明する順序に沿って時系列に処理が行われるプログラムであっても良いし、並列に、あるいは呼び出しが行われたとき等の必要なタイミングで処理が行われるプログラムであっても良い。
【0450】
なお、本明細書において、システムとは、複数の構成要素(装置、モジュール(部品)等)の集合を意味し、すべての構成要素が同一筐体中にあるか否かは問わない。したがって、別個の筐体に収納され、ネットワークを介して接続されている複数の装置、及び、1つの筐体の中に複数のモジュールが収納されている1つの装置は、いずれも、システムである。
【0451】
なお、本明細書に記載された効果はあくまで例示であって限定されるものでは無く、また他の効果があってもよい。
【0452】
本技術の実施の形態は、上述した実施の形態に限定されるものではなく、本技術の要旨を逸脱しない範囲において種々の変更が可能である。
【0453】
例えば、本技術は、1つの機能をネットワークを介して複数の装置で分担、共同して処理するクラウドコンピューティングの構成をとることができる。
【0454】
また、上述のフローチャートで説明した各ステップは、1つの装置で実行する他、複数の装置で分担して実行することができる。
【0455】
さらに、1つのステップに複数の処理が含まれる場合には、その1つのステップに含まれる複数の処理は、1つの装置で実行する他、複数の装置で分担して実行することができる。
【0456】
<構成の組み合わせ例>
本技術は、以下のような構成をとることもできる。
<1> インター予測処理に用いられるCooding Unit(CU)を、Optical Flowの手法により時間的に前後の1フレームずつを参照する双方向性予測(BIO)を行うか否かについての判定に用いるコスト計算のための処理単位として8×8、16×16、32×32、または64×64のいずれかに仮想的に分割する制御部と、
前記CUの予測ブロックのSum of Absolute Difference(SAD)と、前記処理単位のサイズに応じたBIO閾値との比較に基づいて、前記BIOを適用するか否かを決定するBIO適用判定部と
を備える画像復号装置。
<2> 前記BIO適用判定部は、前記SADが前記BIO閾値より小さいとき、前記BIOを適用するか否かを示すBIO適用フラグを不適用に変更する
<1>に記載の画像復号装置。
<3> 制御部と、BIO適用判定部とを備える画像復号装置の画像復号方法であって、
前記制御部は、インター予測処理に用いられるCooding Unit(CU)を、Optical Flowの手法により時間的に前後の1フレームずつを参照する双方向性予測(BIO)を行うか否かについての判定に用いるコスト計算のための処理単位として8×8、16×16、32×32、または64×64のいずれかに仮想的に分割し、
前記BIO適用判定部は、前記CUの予測ブロックのSum of Absolute Difference(SAD)と、前記処理単位のサイズに応じたBIO閾値との比較に基づいて、前記BIOを適用するか否かを決定する
画像復号方法。
<4> 前記BIO適用判定部は、前記SADが前記BIO閾値より小さいとき、前記BIOを適用するか否かを示すBIO適用フラグを不適用に変更する
<3>に記載の画像復号方法。
【符号の説明】
【0457】
1 符号化装置, 36 可逆符号化部, 47 動き予測・補償部, 51 インター予測部, 101 復号装置, 132 可逆復号部,201 インター予測制御部, 202 L0予測ブロック生成部, 203 L1予測ブロック生成部, 204 BIOコスト計算部, 205 BIO適用判定部, 206 Bi予測ブロック生成部, 207 BIO処理を含むBi予測ブロック生成部, 208 Bi予測ブロック選択部, 209 予測ブロック選択部