(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-04-20
(54)【発明の名称】IBCマージリストを使用するエンコーダ、デコーダ、及び対応する方法
(51)【国際特許分類】
H04N 19/593 20140101AFI20220413BHJP
H04N 19/52 20140101ALI20220413BHJP
【FI】
H04N19/593
H04N19/52
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2021525623
(86)(22)【出願日】2020-02-10
(85)【翻訳文提出日】2021-06-28
(86)【国際出願番号】 CN2020074575
(87)【国際公開番号】W WO2020177505
(87)【国際公開日】2020-09-10
(32)【優先日】2019-03-04
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2019-03-07
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】504161984
【氏名又は名称】ホアウェイ・テクノロジーズ・カンパニー・リミテッド
(74)【代理人】
【識別番号】110000877
【氏名又は名称】龍華国際特許業務法人
(72)【発明者】
【氏名】ガオ、ハン
(72)【発明者】
【氏名】エセンリク、セミ
(72)【発明者】
【氏名】ワン、ビャオ
(72)【発明者】
【氏名】コトラ、アナンド メハー
(72)【発明者】
【氏名】チェン、ジアンレ
【テーマコード(参考)】
5C159
【Fターム(参考)】
5C159MA04
5C159NN11
5C159RC12
5C159RC16
5C159RC38
(57)【要約】
本開示は、イントラブロックコピー、IBC、モードのための候補マージリストを構築する方法及びデバイスであって、方法及びデバイスは、左側隣接ブロックが利用可能で左側隣接ブロックがIBCモードを使用している場合、現在のブロックの左側隣接ブロックのブロックベクトルを現在のブロックの初期のマージリストに挿入する段階と、上側隣接ブロックが利用可能で上側隣接ブロックがIBCモードを使用しており、上側隣接ブロックのブロックベクトルが左側隣接ブロックのブロックベクトルと同じでない場合、現在のブロックの上側隣接ブロックのブロックベクトルを初期のマージリストに挿入する段階と、上側隣接ブロックのブロックベクトルが、履歴ベースの動きベクトル予測子、HMVPにおける最後の候補のブロックベクトルと同じでない場合、且つ左側隣接ブロックのブロックベクトルが、HMVPにおける最後の候補のブロックベクトルと同じでない場合、HMVPにおける最後の候補のブロックベクトルを初期のマージリストに挿入する段階と、上述した挿入するプロセスの後の初期のマージリストに従って現在のブロックのブロックベクトルを取得し、現在のブロックのマージ候補インデックスを取得する段階を備える、方法及びデバイスを提供する。
【特許請求の範囲】
【請求項1】
イントラブロックコピー(IBC)モードのための候補マージリストを構築する方法であって、前記方法は、
左側隣接ブロックが利用可能で前記左側隣接ブロックがIBCモードを使用している場合、現在のブロックの前記左側隣接ブロックのブロックベクトルを前記現在のブロックの初期のマージリストに挿入する段階と、
上側隣接ブロックが利用可能で前記上側隣接ブロックがIBCモードを使用しており、前記上側隣接ブロックのブロックベクトルが前記左側隣接ブロックの前記ブロックベクトルと同じでない場合、前記現在のブロックの前記上側隣接ブロックの前記ブロックベクトルを前記初期のマージリストに挿入する段階と、
前記上側隣接ブロックの前記ブロックベクトルが、履歴ベースの動きベクトル予測子(HMVP)における最後の候補のブロックベクトルと同じでない場合、且つ前記左側隣接ブロックの前記ブロックベクトルが、前記HMVPにおける前記最後の候補の前記ブロックベクトルと同じでない場合、前記HMVPにおける前記最後の候補の前記ブロックベクトルを前記初期のマージリストに挿入する段階と
を備える、方法。
【請求項2】
前記方法はさらに、
上述した前記挿入するプロセスの後の前記初期のマージリストに従って前記現在のブロックのブロックベクトルを取得し、前記現在のブロックのマージ候補インデックスを取得する段階
を備える、請求項1に記載の方法。
【請求項3】
イントラブロックコピー(IBC)モードのための候補マージリストを構築する方法であって、前記方法は、
隣接ブロックが利用可能で、前記隣接ブロックがIBCモードを使用している場合、現在のブロックの前記隣接ブロックのブロックベクトルを前記現在のブロックの初期のマージリストに挿入する段階と、
前記隣接ブロックの前記ブロックベクトルが履歴ベースの動きベクトル予測子(HMVP)における最後の候補のブロックベクトルと同じでない場合、前記HMVPにおける前記最後の候補の前記ブロックベクトルを前記初期のマージリストに挿入する段階と、
前記HMVPにおける別の候補のブロックベクトルを前記初期のマージリストに挿入する段階であって、前記HMVPにおける別の候補の前記ブロックベクトルのプルーニングが除去されている、段階と
を備える、方法。
【請求項4】
前記方法はさらに、
上述した前記挿入するプロセスの後の前記初期のマージリストに従って前記現在のブロックのブロックベクトルを取得し、前記現在のブロックのマージ候補インデックスを取得する段階
を備える、請求項3に記載の方法。
【請求項5】
イントラブロックコピー(IBC)モードのための候補マージリストを構築する方法であって、前記方法は、
左側隣接ブロックが利用可能で前記左側隣接ブロックがIBCモードを使用している場合、現在のブロックの前記左側隣接ブロックのブロックベクトルを前記現在のブロックの初期のマージリストに挿入する段階と、
上側隣接ブロックが利用可能で前記上側隣接ブロックがIBCモードを使用しており、前記上側隣接ブロックのブロックベクトルが前記左側隣接ブロックの前記ブロックベクトルと同じでない場合、前記現在のブロックの前記上側隣接ブロックの前記ブロックベクトルを前記初期のマージリストに挿入する段階と、
前記上側隣接ブロックの前記ブロックベクトルが、履歴ベースの動きベクトル予測子(HMVP)における最後の候補のブロックベクトルと同じでない場合、且つ前記左側隣接ブロックの前記ブロックベクトルが、前記HMVPにおける前記最後の候補の前記ブロックベクトルと同じでない場合、前記HMVPにおける前記最後の候補の前記ブロックベクトルを前記初期のマージリストに挿入する段階と、
前記HMVPにおける別の候補のブロックベクトルを前記初期のマージリストに挿入する段階であって、前記HMVPにおける別の候補の前記ブロックベクトルのプルーニングが除去されている、段階と
を備える、方法。
【請求項6】
前記方法はさらに、
上述した前記挿入するプロセスの後の前記初期のマージリストに従って前記現在のブロックのブロックベクトルを取得し、前記現在のブロックのマージ候補インデックスを取得する段階
を備える、請求項5に記載の方法。
【請求項7】
前記初期のマージリストは、最初の前記挿入するプロセスの前の空リストである、請求項5又は6に記載の方法。
【請求項8】
上述した前記挿入するプロセスが順番に実行される、請求項5から7のいずれか一項に記載の方法。
【請求項9】
イントラブロックコピー(IBC)モードのための候補マージリストを構築する方法であって、前記方法は、
隣接ブロックが利用可能で、前記隣接ブロックがIBCモードを使用している場合、現在のブロックの前記隣接ブロックのブロックベクトルを前記現在のブロックの初期のマージリストに挿入する段階と、
前記隣接ブロックの前記ブロックベクトルが履歴ベースの動きベクトル予測子(HMVP)における最後の候補のブロックベクトルと同じでない場合、前記HMVPにおける前記最後の候補の前記ブロックベクトルを前記初期のマージリストに挿入する段階と、
を備え、
前記現在のブロックの前記初期のマージリストにおける前記最後のブロックベクトルは、前記HMVPにおける1つの候補の1つのブロックベクトルである、
方法。
【請求項10】
前記方法はさらに、
上述した前記挿入するプロセスの後の前記初期のマージリストに従って前記現在のブロックのブロックベクトルを取得し、前記現在のブロックのマージ候補インデックスを取得する段階
を備える、請求項9に記載の方法。
【請求項11】
イントラブロックコピー(IBC)モードのための候補マージリストを構築する方法であって、前記方法は、
左側隣接ブロックが利用可能で前記左側隣接ブロックがIBCモードを使用している場合、現在のブロックの前記左側隣接ブロックのブロックベクトルを前記現在のブロックの初期のマージリストに挿入する段階と、
上側隣接ブロックが利用可能で前記上側隣接ブロックがIBCモードを使用しており、前記上側隣接ブロックのブロックベクトルが前記左側隣接ブロックの前記ブロックベクトルと同じでない場合、前記現在のブロックの前記上側隣接ブロックの前記ブロックベクトルを前記初期のマージリストに挿入する段階と、
前記上側隣接ブロックの前記ブロックベクトルが、履歴ベースの動きベクトル予測子(HMVP)における最後の候補のブロックベクトルと同じでない場合、且つ前記左側隣接ブロックの前記ブロックベクトルが、前記HMVPにおける前記最後の候補の前記ブロックベクトルと同じでない場合、前記HMVPにおける前記最後の候補の前記ブロックベクトルを前記初期のマージリストに挿入する段階と、
前記HMVPにおける別の候補のブロックベクトルを前記初期のマージリストに挿入する段階であって、前記HMVPにおける別の候補の前記ブロックベクトルのプルーニングが除去されている、段階と
を備え、
前記現在のブロックの前記初期のマージリストにおける前記最後のブロックベクトルは、前記HMVPにおける前記別の候補の前記ブロックベクトルである、
方法。
【請求項12】
請求項1から11のいずれか一項に記載の方法を実行するための処理回路を備える、エンコーダ。
【請求項13】
請求項1から11のいずれか一項に記載の方法を実行するための処理回路を備える、デコーダ。
【請求項14】
プロセッサに、請求項1から11のいずれか一項に記載の方法を実行させるためのコンピュータプログラム。
【請求項15】
デコーダであって、
1又は複数のプロセッサと、
前記1又は複数のプロセッサに連結され、前記1又は複数のプロセッサによる実行のためのプログラミングを保存する非一時的コンピュータ可読記憶媒体であって、前記プログラミングは、前記1又は複数のプロセッサにより実行される場合、請求項1から11のいずれか一項に記載の方法を実行するように前記デコーダを構成する、非一時的コンピュータ可読記憶媒体と
を備えるデコーダ。
【請求項16】
ビデオデータをビットストリームの形で保存するように構成されている非一時的メモリストレージと、
請求項1から11のいずれか一項に記載の方法を実行するように構成されているビデオデコーダと
を備える、ビデオデータデコーディングデバイス。
【発明の詳細な説明】
【技術分野】
【0001】
本願の(本開示の)実施形態は一般に、画像処理分野に関し、より具体的には、予測のための共有リストに関する。
【背景技術】
【0002】
ビデオコーディング(ビデオエンコーディング及びデコーディング)は、例えば、放送デジタルTV、インターネット及びモバイルネットワークを介したビデオ送信、又はビデオチャット、ビデオ会議、DVD及びブルーレイ(登録商標)ディスク、ビデオコンテンツの取得及び編集システム、セキュリティアプリケーションのカムコーダーなどのリアルタイムの会話型アプリケーションなど、幅広いデジタルビデオアプリケーションで使用される。
【0003】
比較的短いビデオを描画するのであっても、必要とされるビデオデータの量は、かなりのものであり得、その結果、限定的な帯域幅容量を有する通信ネットワークを介してデータがストリームされる又は別の方法で通信されることになる場合、困難が生じる場合がある。したがって、ビデオデータは一般に、現代の遠隔通信ネットワークを介して通信される前に圧縮される。ビデオのサイズは、メモリリソースが限定的である場合があるので、ビデオがストレージデバイスに保存される場合にも問題となり得る。ビデオ圧縮デバイスは、多くの場合、ソースにおけるソフトウェア及び/又はハードウェアを使用して、送信又は保存の前にビデオデータをコードし、それにより、デジタルビデオイメージを表すのに必要とされるデータの量を低減させる。その後、圧縮データは、デスティネーションにおいて、ビデオデータをデコードするビデオ圧縮解除デバイスによって受信される。限定的なネットワークリソース及び増大し続ける高ビデオ品質の需要に鑑みて、画像品質をほとんどから全く犠牲にせずに圧縮比を改善する、改善された圧縮及び圧縮解除技術が望まれている。
【発明の概要】
【0004】
本願の実施形態は、独立請求項に記載のエンコーディング及びデコーディングのための装置及び方法を提供する。
【0005】
前述の目的及び他の目的は、独立請求項の主題により実現される。さらなる実装形態が、従属請求項、説明及び図面から明らかである。
【0006】
本発明の第1態様は、イントラブロックコピー(IBC)モードのための候補マージリストを構築する方法であって、当該方法は、
左側隣接ブロックが利用可能で左側隣接ブロックがIBCモードを使用している場合、現在のブロックの初期のマージリストに現在のブロックの左側隣接ブロックのブロックベクトルを挿入する段階(一例において、初期のマージリストは、この挿入段階の前の空リストである)と、
上側隣接ブロックが利用可能で、上側隣接ブロックがIBCモードを使用しており、上側隣接ブロックのブロックベクトルは左側隣接ブロックのブロックベクトルと同じでない場合、現在のブロックの上側隣接ブロックのブロックベクトルを初期のマージリストに挿入する段階(一例において、初期のマージリストはこの段階の前の空リストであるか、又は、初期のマージリストは、現在のブロックの左側隣接ブロックのブロックベクトルを備える)と、
上側隣接ブロックのブロックベクトルが、履歴ベースの動きベクトル予測子(HMVP)における最後の候補のブロックベクトルと同じでない場合、且つ左側隣接ブロックのブロックベクトルが、HMVPにおける最後の候補のブロックベクトルと同じでない場合、HMVPにおける最後の候補のブロックベクトルを初期のマージリストに挿入する段階と
を備える、方法を開示する。
【0007】
本発明の第2態様は、イントラブロックコピー(IBC)モードのための候補マージリストを構築する方法であって、当該方法は、
隣接ブロックが利用可能で、当該隣接ブロックがIBCモードを使用している場合、現在のブロックの隣接ブロックのブロックベクトルを現在のブロックの初期のマージリストに挿入する段階と、
隣接ブロックのブロックベクトルが履歴ベースの動きベクトル予測子(HMVP)における最後の候補のブロックベクトルと同じでない場合、HMVPにおける最後の候補のブロックベクトルを初期のマージリストに挿入する段階と、
HMVPにおける別の候補のブロックベクトルを初期のマージリストに挿入する段階であって、当該HMVPにおける別の候補のブロックベクトルのプルーニングが除去されている、段階と
を備える、方法を開示する。
【0008】
本発明の第3態様は、イントラブロックコピー(IBC)モードのための候補マージリストを構築する方法であって、当該方法は、
左側隣接ブロックが利用可能で左側隣接ブロックがIBCモードを使用している場合、現在のブロックの初期のマージリストに現在のブロックの左側隣接ブロックのブロックベクトルを挿入する段階(一例において、初期のマージリストは、この挿入段階の前の空リストである)と、
上側隣接ブロックが利用可能で、上側隣接ブロックがIBCモードを使用しており、上側隣接ブロックのブロックベクトルは左側隣接ブロックのブロックベクトルと同じでない場合、現在のブロックの上側隣接ブロックのブロックベクトルを初期のマージリストに挿入する段階(一例において、初期のマージリストはこの段階の前の空リストであるか、又は、初期のマージリストは、現在のブロックの左側隣接ブロックのブロックベクトルを備える)と、
上側隣接ブロックのブロックベクトルが、履歴ベースの動きベクトル予測子(HMVP)における最後の候補のブロックベクトルと同じでない場合、且つ左側隣接ブロックのブロックベクトルが、HMVPにおける最後の候補のブロックベクトルと同じでない場合、HMVPにおける最後の候補のブロックベクトルを初期のマージリストに挿入する段階と、
HMVPにおける別の候補のブロックベクトルを初期のマージリストに挿入する段階であって、当該HMVPにおける別の候補のブロックベクトルのプルーニングが除去されている、段階と
を備える、方法を開示する。
【0009】
本発明の第4態様は、イントラブロックコピー(IBC)モードのための候補マージリストを構築する方法であって、当該方法は、
隣接ブロックが利用可能で、当該隣接ブロックがIBCモードを使用している場合、現在のブロックの隣接ブロックのブロックベクトルを現在のブロックの初期のマージリストに挿入する段階と、
隣接ブロックのブロックベクトルが履歴ベースの動きベクトル予測子(HMVP)における最後の候補のブロックベクトルと同じでない場合、HMVPにおける候補のブロックベクトルを初期のマージリストに挿入する段階と
を備え、
現在のブロックの初期のマージリストにおける最後のブロックベクトルは、HMVPにおける1つの候補の1つのブロックベクトルである、
方法を開示する。
【0010】
本発明の第5態様は、イントラブロックコピー(IBC)モードのための候補マージリストを構築する方法であって、当該方法は、
左側隣接ブロックが利用可能で左側隣接ブロックがIBCモードを使用している場合、現在のブロックの初期のマージリストに現在のブロックの左側隣接ブロックのブロックベクトルを挿入する段階(一例において、初期のマージリストは、この挿入段階の前の空リストである)と、
上側隣接ブロックが利用可能で、上側隣接ブロックがIBCモードを使用しており、上側隣接ブロックのブロックベクトルは左側隣接ブロックのブロックベクトルと同じでない場合、現在のブロックの上側隣接ブロックのブロックベクトルを初期のマージリストに挿入する段階(一例において、初期のマージリストはこの段階の前の空リストであるか、又は、初期のマージリストは、現在のブロックの左側隣接ブロックのブロックベクトルを備える)と、
上側隣接ブロックのブロックベクトルが、履歴ベースの動きベクトル予測子(HMVP)における最後の候補のブロックベクトルと同じでない場合、且つ左側隣接ブロックのブロックベクトルが、HMVPにおける最後の候補のブロックベクトルと同じでない場合、HMVPにおける最後の候補のブロックベクトルを初期のマージリストに挿入する段階と、
HMVPにおける別の候補のブロックベクトルを初期のマージリストに挿入する段階であって、当該HMVPにおける別の候補のブロックベクトルのプルーニングが除去されている、段階と
を備え、
現在のブロックの初期のマージリストにおける最後のブロックベクトルは、HMVPにおける別の候補のブロックベクトルである、方法を開示する。
【0011】
第1態様から第5態様のうちいずれか1つに対する1つの可能な実装において、方法はさらに、上述した挿入するプロセスの後の初期のマージリストに従って現在のブロックのブロックベクトルを取得し、現在のブロックのマージ候補インデックスを取得する段階を備える。
【0012】
第1態様から第5態様のうちいずれか1つに対する1つの可能な実装において、初期のマージリストは、最初の挿入するプロセスの前の空リストである。
【0013】
第1態様から第5態様のうちいずれか1つに対する1つの可能な実装において、上述した挿入するプロセスは順番に実行される。
【0014】
本発明の第6態様は、前述の方法の実施形態のうちいずれか1つを実行するための処理回路を備えるエンコーダ(20)を開示する。
【0015】
本発明の第7態様は、前述の方法の実施形態のうちいずれか1つを実行するための処理回路を備えるデコーダ(30)を開示する。
【0016】
本発明の第8態様は、前述の方法の実施形態のうちいずれか1つを実行するためのプログラムコードを備えるコンピュータプログラム製品を開示する。
【0017】
本発明の第9態様は、1又は複数のプロセッサと、
プロセッサに連結され、プロセッサによる実行のためのプログラミングを保存する非一時的コンピュータ可読記憶媒体であって、プログラミングは、プロセッサにより実行される場合、前述の方法の実施形態のうちいずれか1つを実行するようにデコーダを構成する、非一時的コンピュータ可読記憶媒体と
を備えるデコーダ又はエンコーダを開示する。
【0018】
1又は複数の実施形態の詳細は、添付の図面及び以下の説明に記載されている。他の特徴、目的、及び利点は、明細書、図面、及び特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【0019】
以下、添付の図及び図面を参照しながら、本発明の実施形態がより詳細に説明される。
【
図1A】本発明の実施形態を実装するように構成されているビデオコーディングシステムの例を示すブロック図である。
【
図1B】本発明の実施形態を実装するように構成されているビデオコーディングシステムの別の例を示すブロック図である。
【
図2】本発明の実施形態を実装するように構成されているビデオエンコーダの例を示すブロック図である。
【
図3】本発明の実施形態を実装するように構成されているビデオデコーダの例示的な構造を示すブロック図である。
【
図4】エンコーディング装置又はデコーディング装置の例を示すブロック図である。
【
図5】エンコーディング装置又はデコーディング装置の別の例を示すブロック図である。
【
図6】現在のブロックの隣接ブロックの例を示すブロック図である。
【
図7】本願の実施形態についての例を示す図である。
【
図8】コンテンツ配信サービスを実現するコンテンツ供給システム3100の例示的な構造を示すブロック図である。
【
図9】端末デバイスの例の構造を示すブロック図である。以下では、別途明示的に指定されていない限り、同一の参照符号は、同一又は少なくとも機能的に等価な機能を指す。
【発明を実施するための形態】
【0020】
以下の説明では、本開示の一部をなし、本発明の実施形態の具体的態様又は本発明の実施形態が使用され得る具体的態様を例示として示す、添付の図が参照される。本発明の実施形態は、他の態様において使用されてもよく、図に示されていない構造的又は論理的変化を含んでもよいことが理解される。したがって、以下の詳細な説明は、限定する意味で解釈されず、本発明の範囲は、添付の特許請求の範囲により定義される。
【0021】
例えば、説明された方法に関連する開示は、方法を実行するように構成されている対応するデバイス又はシステムにも当てはまり得、逆もまた同様であることが理解される。例えば、特定の方法の1又は複数の段階が説明される場合、そのような1又は複数のユニットが図において明示的に説明又は図示されていない場合であっても、対応するデバイスは、1又は複数のユニット、例えば、説明された1又は複数の方法の段階を実行する機能ユニット(例えば、1又は複数の段階を実行する1つのユニット、又は、各々が複数の段階のうち1又は複数を実行する複数のユニット)を含み得る。一方、例えば、特定の装置が1又は複数のユニット、例えば、機能ユニットに基づいて説明される場合、そのような1又は複数の段階が図において明示的に説明又は図示されていない場合であっても、対応する方法は、1又は複数ユニットの機能を実行する1つの段階(例えば、1又は複数のユニットの機能を実行する1つの段階、又は、各々が複数のユニットのうち1又は複数の機能を実行する複数の段階)を含み得る。さらに、特に別途の注記しない限り、本明細書に説明されている様々な例示的な実施形態及び/又は態様の特徴を互いに組み合わせ得ることが理解される。
【0022】
ビデオコーディングは典型的には、ビデオ又はビデオシーケンスを形成する一連の画像の処理を指す。「画像」という用語の代わりに、「フレーム」又は「イメージ」という用語が、ビデオコーディング分野での同義語として使用され得る。ビデオコーディング(又は一般にコーディング)は、ビデオエンコーディング及びビデオデコーディングの2つの部分を含む。ビデオエンコーディングはソース側で実行され、典型的には、(より効率的な保存及び/又は送信のために)ビデオ画像を表現するのに必要なデータの量を低減させるように、元のビデオ画像を処理(例えば、圧縮による)することを含む。ビデオデコーディングは、デスティネーション側で実行され、典型的には、ビデオ画像を再構築するように、エンコーダと比較して逆の処理を含む。ビデオ画像の(又は一般に画像)「コーディング」に言及する実施形態は、ビデオ画像又はそれぞれのビデオシーケンスの「エンコーディング」又は「デコーディング」に関すると理解されるものとする。エンコーディング部分とデコーディング部分との組み合わせは、コーデック(コーディング及びデコーディング、Coding and Decoding)とも称される。無損失ビデオコーディングの場合、元のビデオ画像は再構築でき、すなわち、再構築されたビデオ画像は元のビデオ画像と同じ品質である(保存中又は送信中に伝送損失又は他のデータ損失がないと仮定)。不可逆ビデオコーディングの場合、ビデオ画像を表現するデータの量を低減するために、例えば量子化によるさらなる圧縮が実行されるが、これはデコーダにおいて完全に再構築できない、すなわち、再構築されたビデオ画像の品質は、元のビデオ画像の品質に比較して低下又は劣化する。
【0023】
いくつかのビデオコーディング規格は、「不可逆ハイブリッドビデオコーデック」のグループに属する(すなわち、サンプル領域における空間的及び時間的予測と、変換領域において量子化を適用するための2D変換コーディングとを組み合わせる)。ビデオシーケンスの各画像は、典型的には、非重複ブロックのセットに区分化され、コーディングは、典型的には、ブロックレベルで実行される。換言すると、エンコーダにおいて、ビデオは、例えば、空間的(画像内)予測及び/又は時間的(画像間)予測を使用して予測ブロックを生成し、現在のブロック(現在処理されている/処理されることになるブロック)から予測ブロックを減算して残差ブロックを取得し、残差ブロックを変換するとともに変換領域における残差ブロックを量子化して、送信されるデータの量を低減(圧縮)することによって、典型的にはブロック(ビデオブロック)レベルで処理、すなわち、エンコードされ、一方で、デコーダにおいて、現在のブロックを表現のために再構築するために、エンコーダと比較して逆の処理がエンコード又は圧縮されたブロックに適用される。さらに、エンコーダがデコーダの処理ループを繰り返すことにより、後続のブロックの処理のために、すなわち、コーディングのために、両方が同一の予測(例えば、イントラ及びインター予測)及び/又は再構築物を生成することになる。
【0024】
以下、ビデオコーディングシステム10、ビデオエンコーダ20、及びビデオデコーダ30の実施形態が、
図1から
図3に基づいて説明される。
【0025】
図1Aは、本願の技術を利用し得る例示的なコーディングシステム10、例えばビデオコーディングシステム10(又は略してコーディングシステム10)を示す概略ブロック図である。ビデオコーディングシステム10のビデオエンコーダ20(又は略してエンコーダ20)及びビデオデコーダ30(又は略してデコーダ30)は、本願において説明される様々な例に従って技術を実行するように構成され得るデバイスの例を表す。
【0026】
図1Aに示されるように、コーディングシステム10は、エンコードされた画像データ21を、例えば、このエンコードされた画像データをデコーディングするために、デスティネーションデバイス14に提供する(13)ように構成されているソースデバイス12を備える。
【0027】
ソースデバイス12は、エンコーダ20を備え、加えて、すなわち、任意選択的に、画像ソース16と、プリプロセッサ(又は前処理ユニット)18、例えば画像プリプロセッサ18と、通信インタフェース又は通信ユニット22とを備えてよい。
【0028】
画像ソース16は、任意の種類の画像捕捉デバイス、例えば、現実世界の画像を捕捉するカメラ、及び/又は、任意種類の画像生成デバイス、例えば、コンピュータアニメーション化画像を生成するコンピュータグラフィックプロセッサ、又は、現実世界の画像、コンピュータ生成画像(例えば、スクリーンコンテンツ、仮想現実(VR)画像)及び/又はそれらの任意の組み合わせ(例えば、拡張現実(AR)画像)を取得及び/又は提供する任意の種類の他のデバイスを含んでもよく、又は、それらのデバイスであってもよい。画像ソースは、前述の画像の任意のものを保存する任意の種類のメモリ又はストレージであってよい。
【0029】
プリプロセッサ18、及び前処理ユニット18により実行される処理と区別して、画像又は画像データ17は、生画像又は生画像データ17とも称され得る。
【0030】
プリプロセッサ18は、(生)画像データ17を受信するとともに、画像データ17に対して前処理を実行して、前処理された画像19又は前処理された画像データ19を取得するように構成されている。プリプロセッサ18により実行される前処理は、例えば、トリミング、カラーフォーマット変換(例えば、RGBからYCbCr)、色補正、又はノイズ除去を含んでよい。前処理ユニット18は任意選択のコンポーネントでもよいことが理解できる。
【0031】
ビデオエンコーダ20は、前処理された画像データ19を受信するとともに、エンコードされた画像データ21を提供するように構成されている(更なる詳細は、例えば
図2に基づいて下記で説明される)。ソースデバイス12の通信インタフェース22は、通信チャネル13を介して、エンコードされた画像データ21を受信するとともに、エンコードされた画像データ21(又はその任意のさらに処理されたバージョン)を、保存又は直接の再構築のために、別のデバイス、例えばデスティネーションデバイス14又は任意の他のデバイスに送信するように構成されてよい。
【0032】
デスティネーションデバイス14は、デコーダ30(例えば、ビデオデコーダ30)を備え、加えて、すなわち、任意選択的に、通信インタフェース又は通信ユニット28と、ポストプロセッサ32(又は後処理ユニット32)と、ディスプレイデバイス34とを備えてよい。
【0033】
デスティネーションデバイス14の通信インタフェース28は、エンコードされた画像データ21(又はその任意のさらに処理されたバージョン)を、例えばソースデバイス12から直接又は任意の他のソース、例えばストレージデバイス、例えばエンコードされた画像データのストレージデバイスから受信するとともに、エンコードされた画像データ21をデコーダ30に提供するように構成されている。
【0034】
通信インタフェース22及び通信インタフェース28は、ソースデバイス12とデスティネーションデバイス14との間における直接的な通信リンク、例えば直接的な有線又は無線接続を介して、又は、任意の種類のネットワーク、例えば、有線又は無線ネットワーク若しくはそれらの任意の組み合わせ、又は、任意の種類のプライベート及びパブリックネットワーク、又は、それらの任意の種類の組み合わせを介して、エンコードされた画像データ21又はエンコードされたデータを送信又は受信する(13)ように構成されてよい。
【0035】
通信インタフェース22は、例えば、エンコードされた画像データ21を適切なフォーマットに、例えばパケットにパッケージ化する、及び/又は、通信リンク又は通信ネットワークを介した送信のための任意の種類の送信エンコーディング又は処理を使用して、エンコードされた画像データを処理するように構成されてよい。
【0036】
通信インタフェース22のカウンターパートを形成する通信インタフェース28は、例えば、送信されたデータを受信するとともに、任意の種類の対応する送信デコーディング又は処理及び/又はデパッケージングを使用して送信データを処理して、エンコードされた画像データ21を取得するように構成されてよい。
【0037】
通信インタフェース22及び通信インタフェース28は両方とも、
図1Aにおいてソースデバイス12からデスティネーションデバイス14に向く通信チャネル13の矢印で指示するように単方向通信インタフェースとして、又は、双方向通信インタフェースとして構成されてよく、例えば、メッセージを送受信する、例えば、接続を設定し、通信リンク及び/又はデータ送信、例えばエンコードされた画像データの送信に関連する任意の他の情報を確認及びやりとりするように構成されてよい。
【0038】
デコーダ30は、エンコードされた画像データ21を受信するとともに、デコードされた画像データ31又はデコードされた画像31を提供するように構成されている(更なる詳細は、例えば
図3又は
図5に基づいて下記で説明される)。
【0039】
デスティネーションデバイス14のポストプロセッサ32は、デコードされた画像データ31(再構築された画像データとも呼ばれる)、例えばデコードされた画像31を後処理して、後処理された画像データ33、例えば後処理された画像33を取得するように構成される。後処理ユニット32により実行される後処理は、例えば、デコードされた画像データ31を、例えばディスプレイデバイス34による表示のために準備する目的で、例えば、カラーフォーマット変換(例えば、YCbCrからRGB)、色補正、トリミング、若しくは再サンプリング、又は任意の他の処理を含んでよい。
【0040】
デスティネーションデバイス14のディスプレイデバイス34は、画像を、例えばユーザ又は視聴者に表示するために、後処理された画像データ33を受信するように構成されている。ディスプレイデバイス34は、再構築された画像を表示するための任意の種類のディスプレイ、例えば、一体型又は外付けのディスプレイ又はモニタであってもよく、又は、これを含んでもよい。ディスプレイは、例えば、液晶ディスプレイ(LCD)、有機発光ダイオード(OLED)ディスプレイ、プラズマディスプレイ、プロジェクタ、マイクロLEDディスプレイ、液晶オンシリコン(LCoS)、デジタル光プロセッサ(DLP)、又は任意の種類の他のディスプレイを含んでよい。
【0041】
図1Aはソースデバイス12とデスティネーションデバイス14とを別個のデバイスとして示しているが、デバイスの実施形態は、それらの両方又は両方の機能、すなわち、ソースデバイス12又は対応する機能と、デスティネーションデバイス14又は対応する機能とを備えてもよい。そのような実施形態において、ソースデバイス12又は対応する機能及びデスティネーションデバイス14又は対応する機能は、同じハードウェア及び/又はソフトウェアを使用して、又は、別個のハードウェア及び/又はソフトウェア又はそれらの任意の組み合わせにより実装されてもよい。本説明に基づいて当業者には明らかであるように、
図1Aに示されるような、異なるユニットの機能又はソースデバイス12及び/又はデスティネーションデバイス14内の機能の存在及び(正確な)分割は、実際のデバイス及びアプリケーションに応じて変わり得る。
【0042】
エンコーダ20(例えば、ビデオエンコーダ20)又はデコーダ30(例えば、ビデオデコーダ30)又はエンコーダ20とデコーダ30との両方は、1又は複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリートロジック、ハードウェア、ビデオコーディング専用又はそれらの任意の組み合わせなどの、
図1Bに示されるような処理回路を介して実装され得る。エンコーダ20は、
図2のエンコーダ20及び/又は本明細書に記載の任意の他のエンコーダシステム又はサブシステムに関連して説明される様々なモジュールを具現するために処理回路46を介して実装され得る。デコーダ30は、
図3のデコーダ30及び/又は本明細書に記載の任意の他のデコーダシステム又はサブシステムに関連して説明される様々なモジュールを具現するために処理回路46を介して実装され得る。
【0043】
処理回路は、後で説明されるように様々な操作を実行するように構成されてよい。
図5に示されるように、技術がソフトウェアにおいて部分的に実装される場合、デバイスは、好適な非一時的コンピュータ可読記憶媒体におけるソフトウェアに対する命令を保存してよく、ハードウェア内で1又は複数のプロセッサを使用して命令を実行して、本開示の技術を実行してよい。ビデオエンコーダ20及びビデオデコーダ30のいずれかは、
図1Bに示されるように、例えば、単一のデバイス内の組み合わされたエンコーダ/デコーダ(コーデック)の一部として統合されてよい。
【0044】
ソースデバイス12及びデスティネーションデバイス14は、任意の種類のハンドヘルド又はステーショナリデバイス、例えば、ノートブック又はラップトップコンピュータ、携帯電話、スマートフォン、タブレット、又はタブレットコンピュータ、カメラ、デスクトップコンピュータ、セットトップボックス、テレビ、ディスプレイデバイス、デジタルメディアプレイヤ、ビデオゲームコンソール、ビデオストリーミングデバイス(コンテンツサービスサーバ又はコンテンツ配信サーバなど)、ブロードキャスト受信機デバイス、又はブロードキャスト送信機デバイスなどを含む、幅広いデバイスのいずれかを備えてよく、オペレーティングシステムを使用しない又は任意の種類のオペレーティングシステムを使用してよい。いくつかの場合、ソースデバイス12及びデスティネーションデバイス14は、無線通信に対応してよい。したがって、ソースデバイス12及びデスティネーションデバイス14は、無線通信デバイスであってよい。
【0045】
いくつかの場合、
図1Aに示されるビデオコーディングシステム10は、単に例であり、本願の技術は、エンコーディングデバイスとデコーディングデバイスとの間の任意のデータ通信を必ずしも含まないビデオコーディング設定(例えば、ビデオエンコーディング又はビデオデコーディング)に適用されてよい。他の例において、データは、ローカルメモリから取得され、ネットワークを介してストリーム等される。ビデオエンコーディングデバイスは、データをメモリにエンコードして保存してよく、及び/又は、ビデオデコーディングデバイスは、データをメモリから取得してデコードしてよい。いくつかの例において、エンコーディング及びデコーディングは、互いに通信しないが単純にデータをメモリにエンコードする及び/又はメモリからデータを取得してデコードするデバイスにより実行される。
【0046】
説明の便宜上、例えば、ITU-Tビデオコーディング専門家グループ(VCEG)及びISO/IEC動画像専門家グループ(MPEG)のビデオコーディングに関する共同作業チーム(JCT-VC)によって開発された次世代ビデオコーディング規格である、高効率ビデオコーディング(HEVC)又は多用途ビデオコーディング(VVC)のリファレンスソフトウェアを参照して、本発明の実施形態が本明細書で説明される。当業者であれば、本発明の実施形態はHEVC又はVVCに限定されるものではないことを理解するであろう。
【0047】
[エンコーダ及びエンコーディング方法]
図2は、本願の技術を実装するように構成されている例示的なビデオエンコーダ20の概略ブロック図を示す。
図2の例において、ビデオエンコーダ20は、入力201(又は入力インタフェース201)と、残差計算ユニット204と、変換処理ユニット206と、量子化ユニット208と、逆量子化ユニット210と、逆変換処理ユニット212と、再構築ユニット214と、ループフィルタユニット220と、デコードされた画像バッファ(DPB)230と、モード選択ユニット260と、エントロピーエンコーディングユニット270と、出力272(又は出力インタフェース272)とを備える。モード選択ユニット260は、インター予測ユニット244と、イントラ予測ユニット254と、区分化ユニット262とを含んでよい。インター予測ユニット244は、動き推定ユニット及び動き補償ユニット(図示せず)を含んでよい。
図2に示されるビデオエンコーダ20は、ハイブリッドビデオエンコーダ、又は、ハイブリッドビデオコーデックによるビデオエンコーダとも称され得る。
【0048】
残差計算ユニット204と、変換処理ユニット206と、量子化ユニット208と、モード選択ユニット260とは、エンコーダ20の順方向信号経路を形成するものとして言及されてよく、一方、逆量子化ユニット210と、逆変換処理ユニット212と、再構築ユニット214と、バッファ216と、ループフィルタ220と、デコードされた画像バッファ(DPB)230と、インター予測ユニット244と、イントラ予測ユニット254とは、ビデオエンコーダ20の逆方向信号経路を形成するものとして言及されてよい。ビデオエンコーダ20の逆方向信号経路は、デコーダの信号経路に対応する(
図3のビデオデコーダ30を参照)。逆量子化ユニット210と、逆変換処理ユニット212と、再構築ユニット214と、ループフィルタ220と、デコードされた画像バッファ(DPB)230と、インター予測ユニット244と、イントラ予測ユニット254とは、ビデオエンコーダ20の「内蔵デコーダ」を形成するものとも言及される。
【0049】
[画像及び画像区分化(画像及びブロック)]
エンコーダ20は、例えば、入力201を介して、画像17(又は画像データ17)、例えば、ビデオ又はビデオシーケンスを形成する一連の画像のうちの画像を受信するように構成されてよい。受信された画像又は画像データは、前処理された画像19(又は前処理された画像データ19)であってもよい。簡潔さのために、以下の説明では画像17を参照する。画像17は、現在の画像又はコードされる画像とも称され得る(特に、ビデオコーディングにおいて、現在の画像を他の画像、例えば、同じビデオシーケンス、すなわち、現在の画像も含むビデオシーケンスの、以前にエンコードされた及び/又はデコードされた画像から区別するために)。
【0050】
(デジタル)画像は、強度値を有するサンプルの2次元アレイ又はマトリックスであるか、又はそれとみなされ得る。アレイ内のサンプルは、ピクセル(画像要素(picture element)の短縮形)又はペルとも称され得る。アレイ又は画像の水平及び垂直方向(又は軸)におけるサンプルの数は、画像のサイズ及び/又は解像度を定義する。色を表現するために、典型的には3つの色成分が使用され、すなわち、画像は、3つのサンプルアレイで表されてもよく、又は、これを含んでもよい。RBG形式又は色空間では、画像は対応する赤、緑、及び青のサンプルアレイを含む。しかしながら、ビデオコーディングでは、各ピクセルは、典型的には、輝度及びクロミナンス形式又は色空間、例えば、YCbCrで表され、これには、Y(代わりにLが使用される場合もある)で指示される輝度成分と、Cb及びCrで指示される2つのクロミナンス成分とが含まれる。輝度(又は略してルマ(luma))成分Yは、明るさ又は(例えば、グレースケール画像でのような)グレーレベルの強度を表し、一方、2つのクロミナンス(又は略してクロマ)成分Cb及びCrは、色度又は色情報成分を表す。したがって、YCbCr形式の画像は、輝度サンプル値(Y)の輝度サンプルアレイ、及びクロミナンス値(Cb及びCr)の2つのクロミナンスサンプルアレイを含む。
【0051】
RGB形式の画像は、YCbCr形式に転換又は変換され得、その逆もまた同様であり、このプロセスは、色の変換又は転換としても知られている。画像がモノクロの場合、画像は、輝度サンプルアレイのみを含んでよい。したがって、画像は、例えば、モノクロ形式におけるルマサンプルのアレイ、又は、4:2:0、4:2:2、及び4:4:4のカラーフォーマットにおけるルマサンプルのアレイ及びクロマサンプルの2つの対応するアレイであってよい。
【0052】
ビデオエンコーダ20の実施形態は、画像17を複数の(典型的には非重複)画像ブロック203に区分化するように構成されている画像区分化ユニット(
図2には示されない)を備えてよい。これらのブロックは、根ブロック、マクロブロック(H.264/AVC)又はコーディングツリーブロック(CTB)又はコーディングツリーユニット(CTU)(H.265/HEVC及びVVC)とも称され得る。画像区分化ユニットは、ビデオシーケンスのすべての画像と、ブロックサイズを画定する対応するグリッドとに対して同じブロックサイズを使用するか、又は、画像又は画像のサブセット若しくはグループ間でブロックサイズを変化させて、各画像を対応するブロックに区分化するように構成されてよい。
【0053】
さらなる実施形態において、ビデオエンコーダは、画像17のブロック203、例えば、画像17を形成する1つの、いくつかの、又はすべてのブロックを直接受信するように構成されてよい。画像ブロック203は、現在の画像ブロック又はコードされる画像ブロックとも称され得る。
【0054】
画像17と同様にここでも、画像ブロック203は、画像17より寸法が小さいが、強度値(サンプル値)を有するサンプルの2次元アレイ又はマトリックスであるか、又は、それとみなされ得る。換言すると、ブロック203は、例えば、1つのサンプルアレイ(例えば、モノクロ画像17の場合はルマアレイ、又は、カラー画像の場合はルマ若しくはクロマアレイ)、又は、3つのサンプルアレイ(例えば、カラー画像17の場合はルマ及び2つのクロマアレイ)、又は、適用されるカラーフォーマットに応じた任意の他の数及び/又は種類のアレイを備えてよい。ブロック203の水平及び垂直方向(又は軸)のサンプルの数は、ブロック203のサイズを定義する。したがって、ブロックは、例えば、サンプルのM×N(M列×N行)アレイ、又は、変換係数のM×Nアレイであってよい。
【0055】
図2に示されるビデオエンコーダ20の実施形態は、画像17をブロックごとにエンコードするように構成されてよく、例えば、エンコーディング及び予測がブロック203ごとに実行される。
【0056】
図2に示されるビデオエンコーダ20の実施形態はさらに、スライス(ビデオスライスとも称される)を使用して、画像を区分化及び/又はエンコードするように構成されてよく、画像は、1又は複数のスライス(典型的には非重複)を使用して区分化又はエンコードされてよく、各スライスは、1又は複数のブロック(例えば、CTU)を含んでよい。
【0057】
図2に示されるビデオエンコーダ20の実施形態はさらに、タイルグループ(ビデオタイルグループとも称される)及び/又はタイル(ビデオタイルとも称される)を使用して、画像を区分化及び/又はエンコードするように構成されてよく、画像は、1又は複数のタイルグループ(典型的には非重複)を使用して区分化又はエンコードされてよく、各タイルグループは、例えば、1又は複数のブロック(例えば、CTU)若しくは1又は複数のタイルを含んでよく、各タイルは、例えば、長方形状であってよく、1又は複数のブロック(例えば、CTU)、例えば、完全な又は分数ブロックを含んでよい。
【0058】
[残差計算]
残差計算ユニット204は、例えば、サンプルごと(ピクセルごと)に画像ブロック203のサンプル値から予測ブロック265のサンプル値を減算し、サンプル領域における残差ブロック205を取得することによって、画像ブロック203及び予測ブロック265に基づいて(予測ブロック265に関する更なる詳細は後で提供される)、残差ブロック205(残差205とも称される)を計算するように構成されてよい。
【0059】
[変換]
変換処理ユニット206は、残差ブロック205のサンプル値に対して変換、例えば、離散コサイン変換(DCT)又は離散サイン変換(DST)を適用し、変換領域における変換係数207を取得するように構成されてよい。変換係数207は、変換残差係数とも称され得、変換領域における残差ブロック205を表す。
【0060】
変換処理ユニット206は、H.265/HEVCに指定された変換などのDCT/DSTの整数近似を適用するように構成されてよい。直交DCT変換と比較して、そのような整数近似は、典型的には特定の係数によってスケーリングされる。順変換及び逆変換によって処理される残差ブロックのノルムを保存するべく、変換プロセスの一部として追加のスケーリング係数が適用される。スケーリング係数は、典型的には、シフト操作に関して2のべき乗であるスケーリング係数、変換係数のビット深度、精度と実装コストとの間のトレードオフのなどのような特定の制約に基づいて選択される。例えば、特定のスケーリング係数が、例えば、逆変換処理ユニット212による逆変換(及び、例えばビデオデコーダ30における逆変換処理ユニット312による対応する逆変換)に指定され、例えば、エンコーダ20における変換処理ユニット206による順方向変換のための対応するスケーリング係数が、相応に指定されてよい。
【0061】
ビデオエンコーダ20の実施形態(それぞれ変換処理ユニット206)は、変換パラメータ、例えば、単数又は複数の変換のタイプを、例えば、直接又はエントロピーエンコーディングユニット270を介してエンコード若しくは圧縮してから出力するように構成されてよく、その結果、例えば、ビデオデコーダ30は、デコーディングのために変換パラメータを受信して使用してよい。
【0062】
[量子化]
量子化ユニット208は、例えば、スカラ量子化又はベクトル量子化を適用することによって、変換係数207を量子化して、量子化係数209を取得するように構成されてよい。量子化係数209は、量子化変換係数209又は量子化残差係数209とも称され得る。
【0063】
量子化プロセスは、変換係数207のいくつか又はすべてに関連付けられたビット深度を減少させ得る。例えば、nビット変換係数は、量子化中にmビット変換係数に丸められてよく、ここでnはmより大きい。量子化の程度は、量子化パラメータ(QP)を調整することによって変更されてよい。例えば、スカラ量子化の場合、より細かい又はより粗い量子化を達成するために、異なるスケーリングが適用されてよい。量子化段階サイズが小さいほど細かい量子化に対応し、一方で、量子化段階サイズが大きいほど粗い量子化に対応する。適用可能な量子化段階サイズは、量子化パラメータ(QP)によって指示され得る。量子化パラメータは、例えば、適用可能な量子化段階サイズの予め定義されたセットに対するインデックスであってよい。例えば、小さな量子化パラメータは細かい量子化(小さな量子化段階サイズ)に対応し得、大きな量子化パラメータは粗い量子化(大きな量子化段階サイズ)に対応し得るか、又は逆もまた同様である。量子化は、量子化段階サイズによる除算を含んでよく、例えば逆量子化ユニット210による対応する及び/又は逆の量子化解除は、量子化段階サイズによる乗算を含んでよい。いくつかの規格、例えばHEVCに従った実施形態は、量子化段階サイズを決定するのに量子化パラメータを使用するように構成されてよい。一般に、量子化段階サイズは、除算を含む方程式の固定小数点近似を使用する量子化パラメータに基づいて計算され得る。残差ブロックのノルムを復元するために、量子化及び量子化解除に追加のスケーリング係数が導入され得、これは、量子化段階サイズ及び量子化パラメータの方程式の固定小数点近似で使用されるスケーリングに起因して変更され得る。1つの実装例では、逆変換及び量子化解除のスケーリングは組み合わされ得る。代替的に、カスタマイズされた量子化テーブルが使用され、例えばビットストリームにおいてエンコーダからデコーダにシグナリングされてよい。量子化は不可逆演算であり、損失は量子化段階サイズの増加に伴って増加する。
【0064】
ビデオエンコーダ20の実施形態(それぞれ量子化ユニット208)は、量子化パラメータ(QP)を、例えば、直接又はエントロピーエンコーディングユニット270を介してエンコードしてから出力するように構成されてよく、その結果、例えば、ビデオデコーダ30は、デコーディングのために量子化パラメータを受信して適用してよい。
【0065】
[逆量子化]
逆量子化ユニット210は、例えば、量子化ユニット208と同じ量子化段階サイズに基づいて又はそれを使用して量子化ユニット208によって適用される量子化スキームの逆を適用することによって、量子化係数に対して量子化ユニット208の逆量子化を適用し、量子化解除係数211を取得するように構成されている。量子化解除係数211は、量子化解除残差係数211とも称され得、典型的には量子化による損失に起因して変換係数とは同一でないが、変換係数207に対応する。
【0066】
[逆変換]
逆変換処理ユニット212は、変換処理ユニット206により適用される変換の逆変換、例えば、逆離散コサイン変換(DCT)又は逆離散サイン変換(DST)又は他の逆変換を適用し、サンプル領域における再構築された残差ブロック213(又は対応する量子化解除係数213)を取得するように構成されている。再構築された残差ブロック213は、変換ブロック213とも称され得る。
【0067】
[再構築]
再構築ユニット214(例えば、加算器又は合算器214)は、例えば、サンプルごとに、再構築された残差ブロック213のサンプル値と予測ブロック265のサンプル値とを加算することによって、変換ブロック213(すなわち、再構築された残差ブロック213)を予測ブロック265に加算し、サンプル領域における再構築されたブロック215を取得するように構成されている。
【0068】
[フィルタリング]
ループフィルタユニット220(又は、略して「ループフィルタ」220)は、再構築されたブロック215をフィルタして、フィルタリング済みのブロック221を取得するように、又は、一般に、再構築されたサンプルをフィルタして、フィルタリング済みのサンプルを取得するように構成されている。ループフィルタユニットは、例えば、ピクセル遷移を円滑にする、又は、別様にビデオ品質を改善するように構成されている。ループフィルタユニット220は、デブロッキングフィルタ、サンプル適応オフセット(SAO)フィルタ、又は、1又は複数の他のフィルタ、例えば、バイラテラルフィルタ、適応ループフィルタ(ALF)、鮮明化、平滑化フィルタ若しくは協調フィルタ、又は、それらの任意の組み合わせなどの、1又は複数のループフィルタを備えてよい。ループフィルタユニット220が、ループフィルタ内にあるものとして
図2に示されているが、他の構成では、ループフィルタユニット220は、ポストループフィルタとして実装されてもよい。フィルタリング済みのブロック221は、フィルタリング済みの再構築されたブロック221とも称され得る。ビデオエンコーダ20の実施形態(それぞれループフィルタユニット220)は、ループフィルタパラメータ(サンプル適応オフセット情報など)を、例えば、直接又はエントロピーエンコーディングユニット270を介してエンコードしてから出力するように構成されてよく、その結果、例えば、デコーダ30は、デコーディングのために同じループフィルタパラメータ又はそれぞれのループフィルタを受信して適用してよい。
【0069】
[デコードされた画像バッファ]
デコードされた画像バッファ(DPB)230は、ビデオエンコーダ20によってビデオデータをエンコーディングするための参照画像、又は一般に参照画像データを保存するメモリであってよい。DPB230は、シンクロナスDRAM(SDRAM)、磁気抵抗RAM(MRAM)、抵抗RAM(RRAM(登録商標))、又は他のタイプのメモリデバイスを含む、ダイナミックランダムアクセスメモリ(DRAM)などの様々なメモリデバイスのうち任意のものによって形成されてよい。デコードされた画像バッファ(DPB)230は、1又は複数のフィルタリング済みのブロック221を保存するように構成されてよい。デコードされた画像バッファ230はさらに、同じ現在の画像又は異なる画像、例えば、以前に再構築された画像の、他に以前にフィルタリング済みのブロック、例えば、以前に再構築された且つフィルタリング済みのブロック221を保存するように構成されてよく、例えば、インター予測のために、以前に再構築された、すなわち、デコードされた、完全な画像(並びに、対応する参照ブロック及びサンプル)、及び/又は、部分的に再構築された現在の画像(並びに、対応する参照ブロック及びサンプル)を提供してよい。デコードされた画像バッファ(DPB)230は、例えば、再構築されたブロック215がループフィルタユニット220によってフィルタリングされていない場合、1又は複数のフィルタリングされていない再構築されたブロック215、又は一般に、フィルタリングされていない再構築されたサンプル、又は、再構築されたブロック若しくはサンプルの任意の他のさらに処理されたバージョンを保存するように構成されてもよい。
【0070】
[モード選択(区分化及び予測)]
モード選択ユニット260は、区分化ユニット262と、インター予測ユニット244と、イントラ予測ユニット254とを備え、元の画像データ、例えば、元のブロック203(現在の画像17の現在のブロック203)、及び再構築された画像データ、例えば、同じ(現在の)画像の、及び/又は、1又は複数の以前にデコードされた画像からの、デコードされた画像バッファ230又は他のバッファ(例えば、図示しないラインバッファ)からの、例えば、フィルタリングされた及び/又はフィルタリングされていない再構築されたサンプル又はブロックを受信又は取得するように構成されている。再構築された画像データは、予測ブロック265又は予測子265を取得するために、予測、例えば、インター予測又はイントラ予測のための参照画像データとして使用される。
【0071】
モード選択ユニット260は、現在のブロック予測モード(区分化を含まない)と予測モード(例えば、イントラ又はインター予測モード)とに対する区分化を決定又は選択することと、対応する予測ブロック265を生成することであって、対応する予測ブロック265は、残差ブロック205の計算と、再構築されたブロック215の再構築とに使用される、生成することを行うように構成されてよい。
【0072】
モード選択ユニット260の実施形態は、区分化及び予測モード(例えば、モード選択ユニット260によりサポートされるもの又はモード選択ユニット260に利用可能なものから)を選択するように構成されてよく、これにより、最良のマッチング、又は換言すると、最小残差(最小残差は、送信又は保存のための圧縮率がより良好であることを意味する)、又は、最小シグナリングオーバヘッド(最小シグナリングオーバヘッドは、送信又は保存のための圧縮率がより良好であることを意味する)、又は、これら両方を考慮した又は両方のバランスをとったものを提供する。モード選択ユニット260は、レート歪み最適化(RDO)に基づいて区分化及び予測モードを決定する、すなわち、最小レート歪みを提供する予測モードを選択するように構成されてよい。この文脈において「最良」、「最小」、「最適」などのような用語は、全般的な「最良」、「最小」、「最適」などを必ずしも指さず、値が閾値又は他の制約を超過又は下回り、潜在的に「準最適選択」に繋がるが複雑性及び処理時間は低減するような、終了又は選択基準の達成を指してもよい。
【0073】
換言すると、区分化ユニット262は、例えば、四分木区分化(QT)、二分木区分化(BT)、若しくは三分木区分化(TT)又はそれらの任意の組み合わせを繰り返し使用して、ブロック203をより小さなブロック区分又はサブブロック(ここでもブロックを形成する)に区分化することと、例えば、ブロック区分化又はサブブロックの各々のための予測を実行することとを行うように構成されてよく、モード選択は、区分化されたブロック203の木構造の選択を含み、予測モードは、ブロック区分又はサブブロックの各々に適用される。
【0074】
以下では、例示的なビデオエンコーダ20によって実行される、区分化(例えば、区分化ユニット260による)及び予測処理(インター予測ユニット244及びイントラ予測ユニット254による)をより詳細に説明する。
【0075】
[区分化]
区分化ユニット262は、現在のブロック203をより小さい区分、例えば、正方形又は長方形サイズのより小さいブロックに区分化(又は分割)してよい。これらのより小さいブロック(サブブロックとも称され得る)は、さらにより小さい区分にさらに区分化されてよい。これは、ツリー区分化若しくは階層的ツリー区分化とも称され、ここで、例えば根ツリーレベル0(階層レベル0、深度0)にある根ブロックは、再帰的に区分化、例えば、次に低いツリーレベル、例えばツリーレベル1(階層レベル1、深度1)にある節点の2又はそれより多くのブロックに区分化されてよく、これらのブロックは、例えば終了基準が達成されたことで、例えば最大ツリー深度又は最小ブロックサイズに達したことで、区分化が終了するまで、次に低いレベル、例えばツリーレベル2(階層レベル2、深度2)の2又はそれより多くのブロックに再区分化されるなどしてよい。さらに区分化されないブロックは、ツリーの葉ブロック又は葉節点とも称される。2つの区分への区分化を用いるツリーは、二分木(BT)と称され、3つの区分への区分化を用いるツリーは、三分木(TT)と称され、4つの区分への区分化を用いるツリーは、四分木(QT)と称される。
【0076】
前で言及したように、本明細書で使用される「ブロック」という用語は、画像の部分、特に、正方形又は長方形部分であってよい。例えば、HEVC及びVVCを参照すると、ブロックは、コーディングツリーユニット(CTU)、コーディングユニット(CU)、予測ユニット(PU)、及び変換ユニット(TU)、及び/又は、対応するブロック、例えば、コーディングツリーブロック(CTB)、コーディングブロック(CB)、変換ブロック(TB)、若しくは予測ブロック(PB)であるか、又はそれらに対応してよい。
【0077】
例えば、コーディングツリーユニット(CTU)は、ルマサンプルのCTB、3つのサンプルアレイを有する画像のクロマサンプルの2つの対応するCTB、又は、サンプルをコードするのに使用される3つの別個の色平面とシンタックス構造とを使用してコードされた、モノクロ画像若しくは画像のサンプルのCTBであってもよく、又はそれらを含んでもよい。対応して、コーディングツリーブロック(CTB)は、コンポーネントをCTBに分割することが区分化であるように、或るNの値に関してサンプルのN×Nブロックであってよい。例えば、コーディングユニット(CU)は、ルマサンプルのコーディングブロック、3つのサンプルアレイを有する画像のクロマサンプルの2つの対応するコーディングブロック、又は、サンプルをコードするのに使用される3つの別個の色平面とシンタックス構造とを使用してコードされた、モノクロ画像若しくは画像のサンプルのコーディングブロックであってもよく、又はそれらを含んでもよい。対応して、コーディングブロック(CB)は、CTBをコーディングブロックに分割することが区分化であるように、或るM及びNの値に関してサンプルのM×Nブロックであってよい。
【0078】
例えばHEVCに従う実施形態において、コーディングツリーユニット(CTU)は、コーディングツリーとして表される四分木構造を使用することによってCUに分割されてよい。画像エリアを、インターピクチャ(時間)予測を使用してコードするか、又は、イントラピクチャ(空間)予測を使用してコードするかの決定は、CUレベルで行われる。各CUはさらに、PUの分割タイプに従って、1つ、2つ、又は4つのPUに分割することができる。1つのPUの内部では、同じ予測処理が適用され、関連情報はPUベースでデコーダに送信される。PUの分割タイプに基づいて予測処理を適用することによって残差ブロックを取得した後、CUは、CUのコーディングツリーと同様の別の四分木構造に従って変換ユニット(TU)に区分化されることができる。
【0079】
例えば、多用途ビデオコーディング(VVC)と称される、現在開発中の最新のビデオコーディング規格に従う実施形態において、例えば、組み合わされた四分木及び二分木(QTBT)区分化がコーディングブロックを区分化するのに使用される。QTBTブロック構造では、CUは、正方形又は長方形状のいずれかとすることができる。例えば、コーディングツリーユニット(CTU)は、まず四分木構造により区分化される。四分木の葉節点は、二分木又は三分(ternary(or triple))木構造によってさらに区分化される。区分化ツリーの葉節点は、コーディングユニット(CU)と呼ばれ、そのセグメンテーションは、いかなるさらなる区分化も行わずに予測及び変換の処理に使用される。つまり、CU、PU、及びTUは、QTBTコーディングブロック構造において同じブロックサイズを有する。並行して、複数の区分化、例えば、三分木区分化が、QTBTブロック構造と一緒に使用され得る。
【0080】
1つの例において、ビデオエンコーダ20のモード選択ユニット260は、本明細書に記載の区分化技術の任意の組み合わせを実行するように構成されてよい。上述したように、ビデオエンコーダ20は、(例えば予め決定された)予測モードのセットから、最良又は最適な予測モードを決定又は選択するように構成されている。予測モードのセットは、例えば、イントラ予測モード及び/又はインター予測モードを含み得る。
【0081】
[イントラ予測]
イントラ予測モードのセットは、35個の異なるイントラ予測モード、例えば、DC(又はミーン)モード及び平面モードのような無方向性モード、若しくは、例えばHEVCにおいて定義されるような方向性モードを含んでもよく、又は、67個の異なるイントラ予測モード、例えば、DC(又はミーン)モード及び平面モードのような無方向性モード、若しくは、例えばVVCにおいて定義されるような方向性モードを含んでもよい。
【0082】
イントラ予測ユニット254は、同じ現在の画像の隣接ブロックの再構築されたサンプルを使用して、イントラ予測モードのセットのうちのイントラ予測モードに従って、イントラ予測ブロック265を生成するように構成されている。
【0083】
イントラ予測ユニット254(又は一般にモード選択ユニット260)はさらに、イントラ予測パラメータ(又は一般に、ブロックのために選択されたイントラ予測モードを指示する情報)を、エンコードされた画像データ21に含まれるようにシンタックス要素266の形態でエントロピーエンコーディングユニット270に出力するように構成され、その結果、例えば、ビデオデコーダ30は、デコーディングのために予測パラメータを受信及び使用してよい。
【0084】
[インター予測]
インター予測モードのセット(又は可能なインター予測モード)は、利用可能な参照画像(すなわち、例えばDBP230に保存された、以前の少なくとも部分的にデコードされた画像)及び他のインター予測パラメータ、例えば、最良にマッチングする参照ブロックの検索に使用されたのは、参照画像の全体なのか若しくは参照画像の一部のみ、例えば、現在のブロックのエリアの周りの検索窓エリアなのか、及び/又は、例えば、画素補間、例えばハーフ/セミペル及び/又はクオータペル補間が適用されたか否かに依拠する。
【0085】
上記の予測モードに加えて、スキップモード及び/又は直接モードが適用されてよい。インター予測ユニット244は、動き推定(ME)ユニットと動き補償(MC)ユニットとを含み得る(両方とも
図2で図示せず)。動き推定ユニットは、動き推定のために、画像ブロック203(現在の画像17の現在の画像ブロック203)およびデコードされた画像231、又は少なくとも1又は複数の以前に再構築されたブロック、例えば、1又は複数の他の/異なる以前にデコードされた画像231の再構築されたブロックを受信又は取得するように構成されてよい。例えば、ビデオシーケンスは、現在の画像および以前にデコードされた画像231を含んでよく、又は換言すると、現在の画像および以前にデコードされた画像231は、ビデオシーケンスを形成する一連の画像の一部であるか又はそれを形成してよい。エンコーダ20は、例えば、複数の他の画像のうちの同じ又は異なる画像の複数の参照ブロックから参照ブロックを選択し、インター予測パラメータとして参照画像(又は参照画像インデックス)及び/又は参照ブロックの位置(x,y座標)と現在のブロックの位置との間のオフセット(空間的オフセット)を動き推定ユニットに提供するように構成されてよい。このオフセットは、動きベクトル(MV)とも呼ばれる。
【0086】
動き補償ユニットは、インター予測パラメータを取得、例えば受信するとともに、そのインター予測パラメータに基づいて又はそれを使用してインター予測を実行して、インター予測ブロック265を取得するように構成されている。動き補償ユニットにより実行される動き補償は、動き推定によって決定される動き/ブロックベクトルに基づいて予測ブロックをフェッチ又は生成し、場合によってサブピクセル精度までの補間を実行することを伴ってよい。補間フィルタリングは、既知のピクセルサンプルから追加のピクセルサンプルを生成してよく、したがって、画像ブロックをコードするのに使用され得る候補予測ブロックの数を潜在的に増加させる。現在の画像ブロックのPUのための動きベクトルを受信すると、動き補償ユニットは、参照画像リストのうちの1つにおいて動きベクトルが指し示す予測ブロックを位置特定してよい。
【0087】
動き補償ユニットは、ビデオスライスの画像ブロックをデコーディングする際にビデオデコーダ30によって使用される、ブロック及びビデオスライスに関連付けられるシンタックス要素を生成してもよい。スライス及びそれぞれのシンタックス要素に加えて又は代替的に、タイルグループ及び/又はタイル、およびそれぞれのシンタックス要素が生成又は使用され得る。
【0088】
[エントロピーコーディング]
エントロピーエンコーディングユニット270は、例えば、エントロピーエンコーディングアルゴリズム又はスキーム(例えば、可変長コーディング(VLC)スキーム、コンテキスト適応VLCスキーム(CAVLC)、算術コーディングスキーム、バイナリゼーション、コンテキスト適応バイナリ算術コーディング(CABAC)、シンタックスベースのコンテキスト適応バイナリ算術コーディング(SBAC)、確率インターバル区分化エントロピー(PIPE)コーディング、又は、別のエントロピーエンコーディング方法若しくは技術)、又はバイパス(無圧縮)を、量子化係数209、インター予測パラメータ、イントラ予測パラメータ、ループフィルタパラメータ、及び/又は他のシンタックス要素に適用し、例えばエンコードされたビットストリーム21の形態で出力272を介して出力できるエンコードされた画像データ21を取得するように構成され、それにより、例えば、ビデオデコーダ30は、デコーディングのためのパラメータを受信して使用してよい。エンコードされたビットストリーム21は、ビデオデコーダ30に送信されてもよく、又は、後でビデオデコーダ30によって送信又は取得するためにメモリに保存されてもよい。
【0089】
ビデオエンコーダ20の他の構造上の変形は、ビデオストリームをエンコードするのに使用され得る。例えば、非変換ベースのエンコーダ20は、特定のブロック又はフレームのための変換処理ユニット206を用いずに、直接的に残差信号を量子化することができる。別の実装において、エンコーダ20は、単一のユニットに組み合わされた量子化ユニット208及び逆量子化ユニット210を有することができる。
【0090】
[デコーダ及びデコーディング方法]
図3は、本願の技術を実装するように構成されているビデオデコーダ30の例を示す。ビデオデコーダ30は、例えば、エンコーダ20によりエンコードされた、エンコードされた画像データ21(例えば、エンコードされたビットストリーム21)を受信して、デコードされた画像331を取得するように構成されている。エンコードされた画像データ又はビットストリームは、エンコードされた画像データをデコーディングするための情報、例えば、エンコードされたビデオスライスの画像ブロック(及び/又はタイルグループ若しくはタイル)及び関連付けられたシンタックス要素を表すデータを含む。
【0091】
図3の例において、デコーダ30は、エントロピーデコ―ディングユニット304、逆量子化ユニット310、逆変換処理ユニット312、再構築ユニット314(例えば、合算器314)、ループフィルタ320、デコードされた画像バッファ(DBP)330、モード適用ユニット360、インター予測ユニット344、及びイントラ予測ユニット354を備える。インター予測ユニット344は、動き補償ユニットであってもよく、又はそれを含んでもよい。ビデオデコーダ30は、いくつかの例では、
図2のビデオエンコーダ100に関連して説明されたエンコーディングパスに対して概ね逆のデコーディングパスを実行してよい。
【0092】
エンコーダ20に関して説明されたように、逆量子化ユニット210と、逆変換処理ユニット212と、再構築ユニット214と、ループフィルタ220と、デコードされた画像バッファ(DPB)230と、インター予測ユニット344と、イントラ予測ユニット354とは、ビデオエンコーダ20の「内蔵デコーダ」を形成するものとしても言及される。したがって、逆量子化ユニット310は、逆量子化ユニット110と機能的に同一であってよく、逆変換処理ユニット312は、逆変換処理ユニット212と機能的に同一であってよく、再構築ユニット314は、再構築ユニット214と機能的に同一であってよく、ループフィルタ320は、ループフィルタ220と機能的に同一であってよく、デコードされた画像バッファ330は、デコードされた画像バッファ230と機能的に同一であってよい。したがって、ビデオエンコーダ20のそれぞれのユニット及び機能について提供された説明は、ビデオデコーダ30のそれぞれのユニット及び機能に対応するように適用される。
【0093】
[エントロピーデコーディング]
エントロピーデコ―ディングユニット304は、ビットストリーム21(又は一般にエンコードされた画像データ21)をパースし、例えば、エンコードされた画像データ21にエントロピーデコーディングを実行して、例えば量子化係数309及び/又はデコードされたコーディングパラメータ(
図3には図示せず)、例えば、インター予測パラメータ(例えば、参照画像インデックス及び動きベクトル)、イントラ予測パラメータ(例えば、イントラ予測モード又はインデックス)、変換パラメータ、量子化パラメータ、ループフィルタパラメータ、及び/又は他のシンタックス要素のいずれか又はすべてを取得するように構成されている。エントロピーデコ―ディングユニット304は、エンコーダ20のエントロピーエンコーディングユニット270に関して記載されたエンコーディングスキームに対応するデコーディングアルゴリズム又はスキームを適用するように構成されてよい。エントロピーデコ―ディングユニット304はさらに、インター予測パラメータ、イントラ予測パラメータ、及び/又は他のシンタックス要素をモード適用ユニット360に、また他のパラメータをデコーダ30の他のユニットに提供するように構成されてよい。ビデオデコーダ30は、ビデオスライスレベル及び/又はビデオブロックレベルで、シンタックス要素を受信してよい。スライス及びそれぞれのシンタックス要素に加えて又は代替的に、タイルグループ及び/又はタイル、およびそれぞれのシンタックス要素が受信及び/又は使用され得る。
【0094】
[逆量子化]
逆量子化ユニット310は、エンコードされた画像データ21から量子化パラメータ(QP)(又は一般に逆量子化に関連する情報)及び量子化係数を受信する(例えばエントロピーデコ―ディングユニット304によって、例えばパース及び/又はデコーディングすることによって)とともに、量子化パラメータに基づいて、デコードされた量子化係数309に逆量子化を適用し、変換係数311とも称され得る量子化解除係数311を取得するように構成されてよい。逆量子化プロセスは、量子化の程度、また同様に適用されるべき逆量子化の程度を決定するために、ビデオスライス(又はタイル若しくはタイルグループ)内のビデオブロックごとにビデオエンコーダ20によって決定される量子化パラメータの使用を含んでよい。
【0095】
[逆変換]
逆変換処理ユニット312は、変換係数311とも称される量子化解除係数311を受信するとともに、サンプル領域における再構築された残差ブロック213を取得するべく、量子化解除係数311に変換を適用するように構成されてよい。再構築された残差ブロック213は、変換ブロック313とも称され得る。変換は、逆変換、例えば、逆DCT、逆DST、逆整数変換、又は概念的に同様の逆変換プロセスであってよい。逆変換処理ユニット312はさらに、エンコードされた画像データ21から変換パラメータ又は対応する情報を受信し(例えば、エントロピーデコ―ディングユニット304によって、例えばパース及び/又はデコーディングすることによって)、量子化解除係数311に適用されるべき変換を決定するように構成されてよい。
【0096】
[再構築]
再構築ユニット314(例えば、加算器又は合算器314)は、再構築された残差ブロック313を予測ブロック365に加算し、例えば、再構築された残差ブロック313のサンプル値と予測ブロック365のサンプル値とを加算することによって、サンプル領域における再構築されたブロック315を取得するように構成されてよい。
【0097】
[フィルタリング]
ループフィルタユニット320(コーディングループ内又はコーディングループの後のいずれかにある)は、例えば、ピクセル遷移を円滑にするように又はビデオ品質を別様に改善するように、再構築されたブロック315をフィルタして、フィルタリング済みのブロック321を取得するように構成されている。ループフィルタユニット320は、デブロッキングフィルタ、サンプル適応オフセット(SAO)フィルタ、又は、1又は複数の他のフィルタ、例えば、バイラテラルフィルタ、適応ループフィルタ(ALF)、鮮明化、平滑化フィルタ若しくは協調フィルタ、又は、それらの任意の組み合わせなどの、1又は複数のループフィルタを備えてよい。ループフィルタユニット320が、ループフィルタ内にあるものとして
図3に示されているが、他の構成では、ループフィルタユニット320は、ポストループフィルタとして実装されてもよい。
【0098】
[デコードされた画像バッファ]
画像のデコードされたビデオブロック321は、その後、デコードされた画像バッファ330に保存され、デコードされた画像バッファ330は、デコードされた画像331を、他の画像の後続の動き補償のための及び/又はそれぞれ表示を出力するための参照画像として保存する。デコーダ30は、例えば、出力312を介して、ユーザに提示又は閲覧させるために、デコードされた画像311を出力するように構成されている。
【0099】
[予測]
インター予測ユニット344は、インター予測ユニット244(特に、動き補償ユニット)と同一であってよく、イントラ予測ユニット354は、インター予測ユニット254と機能的に同一であってよく、エンコードされた画像データ21から受信(例えば、エントロピーデコ―ディングユニット304によって、例えば、パース及び/又はデコーディングすることによって)された区分化及び/又は予測パラメータ又はそれぞれの情報に基づいて分割又は区分化の決定及び予測を実行する。モード適用ユニット360は、再構築された画像、ブロック、又はそれぞれのサンプル(フィルタリングされた又はフィルタリングされていない)に基づいて、ブロックごとに予測(イントラ予測又はインター予測)を実行して、予測ブロック365を取得するように構成されてよい。
【0100】
ビデオスライスがイントラコーディング済み(I)スライスとしてコードされている場合、モード適用ユニット360のイントラ予測ユニット354は、シグナリングされたイントラ予測モード及び現在の画像の以前にデコードされたブロックからのデータに基づいて、現在のビデオスライスの画像ブロックのための予測ブロック365を生成するように構成されている。ビデオ画像がインターコーディング済みの(すなわち、B又はP)スライスとしてコードされている場合、モード適用ユニット360のインター予測ユニット344(例えば、動き補償ユニット)は、動きベクトル及びエントロピーデコ―ディングユニット304から受信された他のシンタックス要素に基づいて、現在のビデオスライスのビデオブロックのための予測ブロック365を生成するように構成されている。インター予測の場合、予測ブロックは、複数の参照画像リストのうちの1つに含まれる複数の参照画像のうちの1つから生成されてよい。ビデオデコーダ30は、リスト0及びリスト1という参照フレームリストを、デフォルト構築技術を使用して、DPB330に保存された参照画像に基づいて構築してよい。同じ又は同様の技術が、スライス(例えば、ビデオスライス)に加えて又は代替的に、タイルグループ(例えばビデオタイルグループ)及び/又はタイル(例えば、ビデオタイル)を使用する実施形態に適用されてもよく、又は当該実施形態より適用されてもよい。例えば、ビデオは、I、P、又はBタイルグループ及び/又はタイルを使用してコードされてよい。モード適用ユニット360は、動きベクトル又は関連する情報及び他のシンタックス要素をパースすることによって、現在のビデオスライスのビデオブロックのための予測情報を決定するように構成され、デコードされている現在のビデオブロックのための予測ブロックを生成するために上記予測情報を使用する。例えば、モード適用ユニット360は、受信されたシンタックス要素のいくつかを使用して、ビデオスライスのビデオブロックをコードするのに使用された予測モード(例えば、イントラ予測又はインター予測)、インター予測スライスタイプ(例えば、Bスライス、Pスライス、又はGPBスライス)、スライスのための参照画像リストのうちの1又は複数に関する構築情報、スライスの各インターエンコードされたビデオブロックごとの動きベクトル、スライスの各インターコーディング済みのビデオブロックごとのインター予測ステータス、及び現在のビデオスライス内のビデオブロックをデコードするための他の情報を決定する。同じ又は同様の技術が、スライス(例えば、ビデオスライス)に加えて又は代替的に、タイルグループ(例えばビデオタイルグループ)及び/又はタイル(例えば、ビデオタイル)を使用する実施形態に適用されてもよく、又は当該実施形態により適用されてもよい。例えば、ビデオは、I、P、又はBタイルグループ及び/又はタイルを使用してコードされてよい。
図3に示されるビデオデコーダ30の実施形態は、スライス(ビデオスライスとも称される)を使用して、画像を区分化及び/又はデコードするように構成されてよく、画像は、1又は複数のスライス(典型的には非重複)を使用して区分化又はデコードされてよく、各スライスは、1又は複数のブロック(例えば、CTU)を含んでよい。
図3に示されるビデオデコーダ30の実施形態は、タイルグループ(ビデオタイルグループとも称される)及び/又はタイル(ビデオタイルとも称される)を使用して、画像を区分化及び/又はデコードするように構成されてよく、画像は、1又は複数のタイルグループ(典型的には非重複)を使用して区分化又はデコードされてよく、各タイルグループは、例えば、1又は複数のブロック(例えば、CTU)若しくは1又は複数のタイルを含んでよく、各タイルは、例えば、長方形状であってよく、1又は複数のブロック(例えば、CTU)、例えば、完全な又は分数ブロックを含んでよい。
【0101】
ビデオデコーダ30の他の変形は、エンコードされた画像データ21をデコードするのに使用され得る。例えば、デコーダ30は、ループフィルタリングユニット320を用いずに、出力ビデオストリームを生成することができる。例えば、非変換ベースのデコーダ30は、特定のブロック又はフレームのための逆変換処理ユニット312を用いずに、直接的に残差信号を逆量子化することができる。別の実装において、ビデオデコーダ30は、単一のユニットに組み合わされた逆量子化ユニット310及び逆変換処理ユニット312を有し得る。
【0102】
エンコーダ20及びデコーダ30において、現在の段階の処理結果は、さらに処理されて、その後、次の段階に出力されてよいことが理解されるべきである。例えば、補間フィルタリング、動きベクトルの導出又はループフィルタリングの後に、クリップ又はシフトなどの更なる操作が、補間フィルタリング、動きベクトルの導出又はループフィルタリングの処理結果に対して実行されてよい。
【0103】
更なる操作は、現在のブロックの導出された動きベクトル(限定しないが、アフィンモードの制御点動きベクトル、アフィン、平面、ATMVPモードにおけるサブブロック動きベクトル、時間的な動きベクトルなどを含む)に適用されてよいことに留意されたい。例えば、動きベクトルの値は、その表現ビットに従って予め定義された範囲に制限される。動きベクトルの表示ビットがbitDepthである場合、その範囲は、-2^(bitDepth-1)~2^(bitDepth-1)-1であり、ここで「^」はべき乗を意味する。例えば、bitDepthが16に等しく設定されている場合、その範囲は-32768~32767であり、bitDepthが18に等しく設定されている場合、その範囲は-131072~131071である。例えば、導出された動きベクトル(例えば、1つの8×8ブロック内の4個の4×4サブブロックのMV)の値は制限され、その結果、4個の4×4サブブロックMVの整数部分間の最大差は、例えば1ピクセル以下など、Nピクセル以下である。ここでは、bitDepthに従って動きベクトルを制限する2つの方法を提供する。
【0104】
方法1:以下の操作により、オーバフローMSB(最上位ビット)を除去する。
【数1】
ここで、mvxは、イメージブロック又はサブブロックの動きベクトルの水平成分であり、mvyは、イメージブロック又はサブブロックの動きベクトルの垂直成分であり、ux及びuyは中間値を指示する。
【0105】
例えば、式(1)及び(2)の適用後、mvxの値が-32769である場合、結果として得られる値は32767である。コンピュータシステムにおいて、十進数は、2の補数として保存される。
-32769の2の補数は、1,0111,1111,1111,1111(17ビット)であり、その後、MSBは破棄されるので、結果として得られる2の補数は、0111,1111,1111,1111(十進数は32767)である。これは、式(1)及び(2)を適用することによる出力と同じである。
【数2】
操作は、式(5)~(8)に示されるように、mvp及びmvdの合計中に適用されてよい。
【0106】
方法2:値をクリッピングすることによってオーバフローMSBを除去する。
【数3】
ここで、vxは、イメージブロック又はサブブロックの動きベクトルの水平成分であり、vyは、イメージブロック又はサブブロックの動きベクトルの垂直成分であり、x,yおよびzはそれぞれ、MVクリッピングプロセスの3つの入力値に対応し、関数Clip3の定義は、以下の通りである。
【数4】
【0107】
図4は、本開示の実施形態に係るビデオコーディングデバイス400の概略図である。ビデオコーディングデバイス400は、本明細書に記載の開示される実施形態を実装するのに好適なものである。一実施形態において、ビデオコーディングデバイス400は、
図1Aのビデオデコーダ30などのデコーダ、又は、
図1Aのビデオエンコーダ20などのエンコーダであってよい。
【0108】
ビデオコーディングデバイス400は、データを受信するための入口ポート410(又は入力ポート410)及び受信器ユニット(Rx)420と、データを処理するためのプロセッサ、ロジックユニット、又は中央演算処理装置(CPU)430と、データを送信するための送信器ユニット(Tx)440及び出口ポート450(又は出力ポート450)と、データを保存するためのメモリ460とを備える。ビデオコーディングデバイス400は、光又は電気信号の出力又は入力のために、入口ポート410、受信器ユニット420、送信器ユニット440、及び出口ポート450に連結されている光/電気(OE)コンポーネント及び電気/光(EO)コンポーネントを備えてもよい。
【0109】
プロセッサ430は、ハードウェア及びソフトウェアによって実装される。プロセッサ430は、1又は複数のCPUチップ、コア(例えば、マルチコアプロセッサとして)、FPGA、ASIC、およびDSPとして実装されてよい。プロセッサ430は、入口ポート410、受信器ユニット420、送信器ユニット440、出口ポート450、及びメモリ460と通信する。プロセッサ430は、コーディングモジュール470を備える。コーディングモジュール470は、上述した開示される実施形態を実装する。例えば、コーディングモジュール470は、様々なコーディング操作を実装、処理、準備、又は提供する。したがって、コーディングモジュール470を含むことにより、ビデオコーディングデバイス400の機能のかなりの改善が提供され、ビデオコーディングデバイス400の異なる状態への変換がもたらされる。代替的に、コーディングモジュール470は、メモリ460に保存された命令として実装され、プロセッサ430により実行される。メモリ460は、1又は複数のディスク、テープドライブ、及びソリッドステートドライブを備えてよく、プログラムが実行のために選択された場合に係るプログラムを保存するとともに、プログラムの実行中に読み取られる命令及びデータを保存するために、オーバフローデータストレージデバイスとして使用されてよい。メモリ460は、例えば、揮発性及び/又は非揮発性であり得、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、三値連想メモリ(TCAM)、及び/又はスタティックランダムアクセスメモリ(SRAM)であり得る。
【0110】
図5は、例示的な実施形態に係る
図1Aによるソースデバイス12及びデスティネーションデバイス14のいずれか又は両方として使用されてよい装置500の簡略化されたブロック図である。
【0111】
装置500におけるプロセッサ502は、中央演算処理装置とすることができる。代替的に、プロセッサ502は、現在既存の又は今後開発される情報の操作又は処理が可能な任意の他のタイプのデバイス、又は複数のデバイスとすることができる。開示の実装は、示されるような単一のプロセッサ、例えば、プロセッサ502で実施できるが、1つより多くのプロセッサを使用して、速度及び効率の利点が実現できる。
【0112】
装置500におけるメモリ504は、一実装において、リードオンリメモリ(ROM)デバイス又はランダムアクセスメモリ(RAM)デバイスとすることができる。任意の他の好適なタイプのストレージデバイスがメモリ504として使用され得る。メモリ504は、バス512を使用してプロセッサ502によってアクセスされるコード及びデータ506を含み得る。メモリ504はさらに、オペレーティングシステム508及びアプリケーションプログラム510を含み得、アプリケーションプログラム510は、プロセッサ502が本明細書に記載の方法を実行することを可能にする少なくとも1つのプログラムを含む。例えば、アプリケーションプログラム510は、アプリケーション1~Nを含み得、アプリケーション1~Nはさらに、本明細書に記載の方法を実行するビデオコーディングアプリケーションを含む。装置500は、ディスプレイ518などの1又は複数の出力デバイスも含むことができる。ディスプレイ518は、一例において、ディスプレイと、タッチ入力を感知するように動作可能なタッチセンサー素子とを組み合わせたタッチセンサー式ディスプレイであってよい。ディスプレイ518は、バス512を介してプロセッサ502に連結され得る。
【0113】
単一のバスとして本明細書に示されるが、装置500のバス512は、複数のバスで構成され得る。さらに、セカンダリストレージ514は、装置500の他のコンポーネントに直接連結でき、又は、ネットワークを介してアクセスでき、メモリカードなどの単一の統合ユニット又は複数のメモリカードなどの複数のユニットを含むことができる。したがって、装置500は、多種多様な構成で実装されることができる。インター予測ユニット244は、動き推定(ME)ユニットと動き補償(MC)ユニットとを含み得る(
図2で図示せず)。動き推定ユニットは、動き推定のために、画像ブロック203(現在の画像201の現在の画像ブロック203)およびデコードされた画像331、又は少なくとも1又は複数の以前に再構築されたブロック、例えば、1又は複数の他の/異なる以前にデコードされた画像331の再構築されたブロックを受信又は取得するように構成される。例えば、ビデオシーケンスは、現在の画像および以前にデコードされた画像331を含んでよく、又は換言すると、現在の画像および以前にデコードされた画像331は、ビデオシーケンスを形成する一連の画像の一部であるか又はそれを形成してよい。エンコーダ20は、例えば、複数の他の画像のうちの同じ又は異なる画像の複数の参照ブロックから参照ブロックを選択し、インター予測パラメータとして参照画像(又は参照画像インデックス,…)及び/又は参照ブロックの位置(x,y座標)と現在のブロックの位置との間のオフセット(空間的オフセット)を動き推定ユニット(
図2で図示せず)に提供するように構成されてよい。このオフセットは、動きベクトル(MV)とも呼ばれる。マージは、HEVCで使用され、VVCに継承される重要な動き推定ツールである。
【0114】
マージ推定を実行するために、マージ候補リストが構築され、候補リストにおける候補の各々は動きデータを含み、これらの動きデータは、1つ又は2つの参照画像リストが使用されたかどうかを指示する情報を含み、さらに、リストごとの参照インデックス及び動きベクトルなどの他の情報を含む。一例において、マージ候補リストは、以下の候補に基づいて構築される。
a.5個の空間隣接ブロックから導出される4個までの空間マージ候補
b.2つの時間的且つコロケートされたブロックから導出される1つの時間的マージ候補
c.組み合わされた双予測候補及びゼロ動きベクトル候補を含む追加のマージ候補
【0115】
マージ候補リストにおける第1候補は、空間ネイバーである。
図6の右の部分に従って、A1、B1、B0、A0およびB2を、この順序で順次チェックすることによって、4個までの候補がマージリストに挿入される。
【0116】
コーディングブロックが利用可能で動き情報を包含するかどうかをチェックするほか、コーディングブロックのすべての動きデータをマージ候補とする前に、いくつかの追加の冗長チェックが実行される。これらの冗長チェックは、2つのカテゴリに分割できる。
a.リストにおける冗長な動きデータを回避する
b.冗長シンタックスを作成するであろう他の手段によって表現できる2つの区分をマージすることを防止する
【0117】
一例において、Nは空間マージ候補の数であり、完全な冗長チェックは(N・(N-1))/2の動きデータ比較を備える。5個の潜在的な空間マージ候補の場合、マージリストにおけるすべての候補が異なる動きデータを有することを保証するために、10回の動きデータ比較が必要とされる。HEVCの開発中、冗長な動きデータのチェックは、コーディング効率が維持される方法でサブセットまで減少し、一方、比較ロジックは大幅に減少した。最終的に、候補ごとに2回以下の比較が実行され、全体的に5回の比較が結果として行われる。{A1,B1,B0,A0,B2}の順序を考慮すると、B0はB1のみをチェックし、A0はA1のみをチェックし、B2はA1及びB1のみをチェックする。区分化の冗長チェックの一例において、2N×Nの区分化の最下部PUは、候補B1を選択することによって、最上部PUとマージされる。これは、同じ動きデータを有する2つのPUを有する1つのCUをもたらし、これは2N×2NのCUとして等しくシグナリングされ得る。全般的に、このチェックは、長方形及び非対称区分2N×N、2N×nU、2N×nD、N×2N、nR×2N、及びnL×2Nのすべての第2PUに適用される。空間マージ候補の場合、冗長チェックのみが実行され、動きデータは、候補ブロックからコピーされることに留意されたい。したがって、ここでは動きベクトルのスケーリングが必要とされない。
【0118】
時間的マージ候補のための動きベクトルの導出は、時間的な動きベクトル予測(TMVP)と同じである。マージ候補はすべての動きデータを含み、TMVPは1つの動きベクトルのみを含む(すなわち、通常のマージでは最大1つのTMVP候補のみが許容される)ので、動きデータの導出は、スライスタイプに依存する。双予測スライスの場合、TMVPは参照画像リストごとに導出される。リストごとのTMVPの利用可能性に応じて、予測タイプは、双予測に設定されるか、又は、TMVPが利用可能なリストに設定される。すべての関連付けられる参照画像インデックスは、ゼロに等しく設定される。単予測スライスの場合、リスト0のTMVPは、ゼロに等しい参照画像インデックスと一緒に導出される。
【0119】
少なくとも1つのTMVPが利用可能で時間的マージ候補がリストに加えられる場合、冗長チェックは実行されない。これにより、マージリスト構築はコロケートされた画像から独立し、エラー復元力が向上する。時間的マージ候補が冗長であり、したがって、マージ候補リストに含まれない場合を考慮する。コロケートされた画像が失われた場合、デコーダは、時間的候補を導出できず、したがって、それが冗長であるかどうかをチェックできない。すべての後続の候補のインデックス化はこれに影響される。
【0120】
パースのロバスト性のためという理由で、マージ候補リストにおける候補の数は一定である。空間的及び時間的マージ候補が加えられた後、リストは、いっぱいではない場合がある(マージ候補リストにおける候補の数は、固定の数より小さい)。非長さ適応リストインデックスシグナリングに伴うコーディング効率の損失を補償するべく、追加候補が生成される。スライスタイプに応じて、2種類までの候補が、リストを完全にポピュレート(populate)するのに使用される。
a.組み合わされた双予測候補
b.ゼロ動きベクトル候補
【0121】
双予測スライスにおいて、追加候補は、既存の候補に基づいて、ある候補の参照画像リスト0の動きデータと別の候補のリスト1の動きデータとを組み合わせることによって、生成することができる。これは、ある候補、例えば第1候補からΔx0、Δy0、Δt0を、且つ、別の候補、例えば第2候補からΔx1、Δy1、Δt1をコピーすることによって行われる。異なる組み合わせが予め定義されテーブル1に与えられる。
[テーブル1]
【表1】
【0122】
組み合わされた双予測候補を加算した後にリストが依然としていっぱいではない場合、又は、単予測スライスに対して、ゼロ動きベクトル候補が加えられる。ゼロ動きベクトル候補は、単予測スライスの場合は1つのゼロ変位動きベクトルを有し、双予測スライスの場合は2つのゼロ変位動きベクトルを有する。参照インデックスは、ゼロに等しく設定され、参照インデックスの最高回数に達するまで、追加候補ごとに1ずつインクリメントされる。追加候補が依然として加えられる必要がある場合、ゼロに等しい参照インデックスは、追加候補を作成するのに使用される。追加候補に対しては冗長チェックが実行されない。これは、これらのチェックを省略することがコーディング効率の損失をもたらさないからである。
【0123】
インターピクチャ予測モードでコードされたPUごとに、ブロックマージが動きデータを導出するために使用されているか否かを指示するために、merge_flagが使用される。merge_idxは、動き補償予測(MCP)に必要とされる動きデータを提供するマージリストにおける候補を決定するのに使用される。PUレベルシグナリングのほかに、マージリストにおける候補の数が、スライスヘッダーにおいてシグナリングされる。一例において、デフォルト値は5であり、それは5との差(five_minus_max_num_merge_cand)で表される。マージ候補リスト構築プロセスに関しては、リストがマージ候補の最高回数を包含した後に完了するが、全般的なプロセスは変わらない。初期設計において、マージインデックスコーディングの最大値は、リストにおける利用可能な空間的及び時間的候補の数によって与えられる。2つの候補のみが利用可能な場合、インデックスは、フラグとして効率的にコードされることができる。マージインデックスをパースするべく、候補の実際の数を知るためにマージ候補リスト全体が構築される必要がある。
【0124】
HEVCにおけるブロックマージの適用は、スキップモードと組み合わされる。スキップモードは、ビットストリームで明示的にシグナリングされる代わりにブロックの動きデータが推論されることと、ブロックの予測残差がゼロである、すなわち、変換係数が送信されていないこととを指示するために、ブロックに使用される。HEVCにおいて、インターピクチャ予測スライスにおける各CUの開始において、以下を示唆するskip_flagがシグナリングされる。
a.CUは1のPU(2N×2N区分タイプ)のみを包含する。
b.マージモードは、動きデータ(1に等しいmerge_flag)を導出するのに使用される。
c.残差データはビットストリームに存在しない。
【0125】
HEVCにおいて導入され、VVCにおいて固有である別の動き推定ツールは、高度な動きベクトル予測(Advanced Motion Vector Prediction,AMVP)と呼ばれる。AMVPモードにおいて、動きベクトルは、水平(x)及び垂直(y)コンポーネントの観点から、いわゆる動きベクトル予測子(MVP)との差としてコードされる。動きベクトル差(MVD)コンポーネントの計算は、MVDx=MVx-MVPx,MVDy=MVy-MVPyで示される。
【0126】
現在のブロックの動きベクトルは、通常、現在の画像内又は以前にコードされた画像内の隣接ブロックの動きベクトルと相関付けられている。これは、隣接ブロックが同様の動きを有する同じ動いているオブジェクトに対応する可能性が高く、オブジェクトの動きが経時的に突然変化する可能性は低いからである。結果的に、隣接ブロックにおける動きベクトルを予測子として使用することは、シグナリングされた動きベクトルの差のサイズを減らす。MVPは、通常、デコードされた動きベクトルから、空間隣接ブロックから、又はコロケートされた画像内の時間的な隣接ブロックから導出される。HEVCにおいて、MVPを暗黙的に導出する手法は、動きベクトルの競合として既知の技術により置き換えられていて、MVPのリストから、どのMVPが動きベクトルの導出のために使用されるかを明示的にシグナリングする。HEVCにおける可変コーディング四分木ブロック構造は、潜在的なMVP候補として、動きベクトルを伴ういくつかの隣接ブロックを有する1つのブロックを結果としてもたらし得る。例として左側の隣接を挙げると、このケースでは、64×64のルマコーディングツリーブロックがさらに分割されず、且つ、左側のものが最大深度に分割される場合、64×64のルマ予測ブロックは、16個の8×4のルマ予測ブロックを左側に有し得る。動きベクトルの競合を修正して、そのような柔軟なブロック構造を構成するために、高度な動きベクトル予測(AMVP)が導入された。HEVCの開発中、初期のAMVP設計は、コーディング効率と実装しやすい設計との間で良好なトレードオフを提供するために、大幅に簡略化された。
【0127】
AMVPの初期設計は、3つの異なるクラスの予測子(すなわち、空間ネイバーからの3つの動きベクトル、3つの空間予測子の中央値、およびコロケートされた且つ時間的な隣接ブロックからのスケーリングされた動きベクトル)からの5つのMVPを含んでいた。さらに、予測子のリストは、第1位置において最も確からしい動き予測子を配置するようにリオーダリングすることによって、及び、最小のシグナリングオーバヘッドを保証するために冗長候補を除去することによって修正されていた。標準化プロセス全体にわたっての包括的な実験で、この動きベクトル予測及びシグナリングスキームの複雑性を、コーディング効率を過度に犠牲にせずに、どのように低減できるかを調査した。これは、中央値予測子を除去すること、リストにおける候補の数を5から2に減らすこと、リストにおける候補の順序を固定すること、及び冗長チェックの数を減らすことなどの、AMVP設計の大幅な簡略化をもたらした。AMVP候補リストの構築の設計は、以下の2つのMVP候補を含む。
・5つの空間隣接ブロックから導出される2つまでの空間候補MVP
・両方の空間候補MVPが利用可能でない又はそれらが同一である場合、2つの時間的且つコロケートされたブロックから導出される1つの時間的候補MVP
・空間的候補、時間的候補又は両方の候補が利用可能でない場合のゼロ動きベクトル
【0128】
空間候補の説明では、2つの空間候補A及びBに対する導出プロセスの流れが
図7に示される。候補Aの場合、左下の角における2つのブロックA0及びA1からの動きデータは、2パスアプローチにおいて考慮される。第1パスにおいて、候補ブロックのいずれかが、現在のブロックの参照インデックスに等しい参照インデックスを包含するかどうかがチェックされる。確認された第1動きベクトルは、候補Aとしてみなされる。A0及びA1からのすべての参照インデックスが、現在のブロックの参照インデックスと異なる参照画像を指し示す場合、関連付けられる動きベクトルは、そのまま使用されることができない。したがって、第2パスにおいて、動きベクトルは、候補参照画像と現在の参照画像との間の時間的距離に従って、スケーリングされる必要がある。時間的距離は、ピクチャ順序カウント(POC)値間の差の観点から表現され、ここでPOC値は、画像の表示順序を定義するのに使用される。
【0129】
候補Bの場合、候補B0からB2が、A0及びA1と同様の方法で順次チェックされる。しかしながら、第2パスは、ブロックA0及びA1がいかなる動き情報も包含しない、すなわち、利用可能でない又はイントラピクチャ予測を使用してコードされた場合に実行される。その後、確認された場合、候補Aはスケーリングされていない候補Bに等しく設定され、候補Bは、第2の、スケーリングされていない又はスケーリングされた候補Bの変形例に等しく設定される。第2パスは、潜在的なスケーリングされていない候補が依然として存在する可能性がある場合に終了され得、第2パスは、候補B0からB2から導出されたスケーリングされていないMV並びにスケーリングされたMVを検索する。全般的に、この設計は、B0、B1、及びB2から独立してA0及びA1を処理することを可能にする。B0~B2から導出されるスケーリングされたMV又は追加のスケーリングされていないMVを検索するべく、Bの導出は、A0及びA1両方の利用可能性を認識すべきである。この依存性は、候補Bに対する複雑な動きベクトルのスケーリング操作を大幅に減らす。動きベクトルのスケーリングの数を減らすことは、動きベクトル予測子の導出プロセスにおいて複雑性が著しく減少することを表す。
【0130】
時間的候補選択処理の場合、現在のブロックの左及び上における空間隣接ブロックからの動きベクトルが、空間MVP候補としてみなされることが
図6から分かり得る。これは、現在のブロックの右および下におけるブロックがまだデコードされておらず、したがって、それらの動きデータは利用可能でないと説明できる。コロケートされた画像は、既にデコードされた参照画像であるので、同じ位置におけるブロックからの、コロケートされたブロックの右のブロックからの、又は、下のブロックからの動きデータを考慮することも可能である。HEVCにおいて、現在のブロックの右下及び中央におけるブロックは、良好な時間的動きベクトル予測子(TMVP)を提供するのに最も好適であると決定された。これらの候補は
図6に示されており、ここでC0は右下の隣接ブロックを表し、C1は中央ブロックを表す。C0の動きデータがまず考慮され、C0の動きデータが利用可能でない場合、中央においてコロケートされた候補ブロックからの動きデータは、時間的MVP候補Cを導出するのに使用される。C0の動きデータはまた、関連付けられるPUが現在のCTU列を超えてCTUに属する場合に利用可能でないとみなされる。これは、コロケートされた動きデータを保存するためのメモリ帯域幅要件を最小限にする。動きベクトルが同じ参照画像を参照し得る空間MVP候補とは対照的に、動きベクトルのスケーリングは、TMVPに必須である。
【0131】
マージリスト構築及びAMVPリスト構築の両方に対して、マージ又はAMVPリストに対する履歴ベースの動きベクトル予測子(HMVP)が使用される。履歴ベースのMVP(HMVP)マージ候補は、空間MVP及びTMVPの後、マージ/AMVPリストに加えられる。この方法で、以前にコードされたブロックの動き情報はテーブルに保存され、現在のCUのMVPとして使用される。複数のHMVP候補を有するテーブルは、エンコーディング/デコーディングプロセス中に維持される。テーブルは、新たなCTU列が発生した場合にリセット(空に)される。非サブブロックインターコーディングCUが存在するときにはいつでも、関連付けられる動き情報が、新たなHMVP候補としてテーブルの最後のエントリに加えられる。
【0132】
VTM4において、HMVPテーブルのサイズSは6に設定され、これは、6個までの履歴ベースのMVP(HMVP)候補がテーブルに加えられ得ることを指示する。テーブルに新たな動き候補を挿入する場合、制限された先入れ先出し(first-in-first-out,FIFO)ルールが利用され、ここで、テーブルにおいて同一のHMVPが存在するかどうかを確認するために、冗長チェックがまず適用される。テーブルに同一のHMVPが存在する場合、同一のHMVPはテーブルから除去され、その後のすべてのHMVP候補が順方向に移動される。
【0133】
HMVP候補は、マージ候補リスト/AMVPリスト構築プロセスにおいて使用され得る。テーブルにおける最新のいくつかのHMVP候補は、順番にチェックされ、TMVP候補の後に候補リストに挿入される。冗長チェックは、HMVP候補において、空間的又は時間的マージ候補に対して適用される。
【0134】
冗長チェック操作の数を減らすために、以下の簡略化が導入される。マージリストの生成に使用されるHMVP候補の数は、(N<=4)?M:(8-N)に設定され、ここで、Nはマージリストにおける既存の候補の数を指示し、Mはテーブルにおける利用可能なHMVP候補の数を指示する。利用可能なマージ候補の合計数が、最大許容マージ候補から1を引いた数に等しくなると、HMVPからのマージ候補リスト構築プロセスは終了する。インターモードと並行するVVC DraftにおいてIBCモードが導入される。
【0135】
イントラブロックコピー(IBC)は、SCCにおけるHEVC拡張に採用されるツールである。これは、スクリーンコンテンツ材料のコーディング効率を大幅に向上させる。IBCモードはブロックレベルコーディングモードとして実装されるので、CUごとに最適なブロックベクトル(又は動きベクトル)を確認するために、ブロックマッチング(BM)がエンコーダにおいて実行される。ここで、動きベクトルは、現在のブロックから、参照ブロックへの変位を指示するのに使用される。参照ブロックは、現在の画像の内部で既に再構築されている。IBCコーディングされたCUのルマ動きベクトルは整数精度である。クロマ動きベクトルは、同様に整数精度でクリッピングされる。AMVRと組み合わされた場合、IBCモードは、1-pel動きベクトル精度と4-pel動きベクトル精度との間で切り替えることができる。IBCコーディングされたCUは、イントラ又はインター予測モード以外の第3予測モードとして扱われる。
【0136】
メモリ消費及びデコーダの複雑性を減らすために、VTM4におけるIBCは、現在のCTUを含む予め定義されたエリアの再構築された部分が使用されることを可能にする。この制限は、IBCモードがハードウェア実装のためにローカルオンチップメモリを使用して実装されることを可能にする。
【0137】
エンコーダ側において、ハッシュベースの動き推定がIBCに対して実行される。エンコーダは、幅又は高さのいずれかが16ルマサンプルより大きくないブロックに対してRDチェックを実行する。非マージモードの場合、まずハッシュベースの検索を使用してブロックベクトルの検索が実行される。ハッシュ検索が有効な候補を返さない場合、ブロックマッチングベースのローカル検索が実行される。ハッシュベースの検索において、現在のブロックと参照ブロックとの間のハッシュキーマッチング(32ビットCRC)は、すべての許容ブロックサイズに拡張される。現在の画像におけるあらゆる位置に対するハッシュキー計算は、4×4サブブロックに基づいている。より大きいサイズの現在のブロックについて、ハッシュキーは、すべての4×4サブブロックのすべてのハッシュキーが対応する参照位置におけるハッシュキーとマッチングする場合、参照ブロックのそれとマッチングすることが決定される。複数の参照ブロックのハッシュキーが現在のブロックのそれとマッチングすることが判明した場合、各マッチングされる参照のブロックベクトルコストが計算され、そのうち最小のコストを有するものが選択される。
【0138】
ブロックマッチングの検索において、検索範囲は、現在のCTU内の現在のブロックの左及び上におけるN個のサンプルに設定される。CTUの開始において、Nの値は、時間的な参照画像が存在しない場合に128に初期化され、又は、少なくとも1つの時間的な参照画像が存在する場合に64に初期化される。ハッシュヒット率は、ハッシュベースの検索を使用してマッチングを確認したCTUにおけるサンプルのパーセンテージとして定義される。現在のCTUをエンコーディングする間に、ハッシュヒット率が5%を下回る場合、Nは半分に減少する。
【0139】
CUレベルにおいて、IBCモードは、フラグでシグナリングされ、以下のようにIBC AMVPモード又はIBCスキップ/マージモードとしてシグナリングされることができる。
【0140】
IBCスキップ/マージモード:マージ候補インデックスは、隣接する候補のIBCでコードされたブロックからのリストにおいてどのブロックベクトルが現在のブロックを予測するために使用されるかを指示するのに使用される。マージリストは、空間的、HMVP、及びペアワイズ候補から成る。
【0141】
IBC AMVPモードブロックベクトルの差は、動きベクトルの差と同様の方法でコードされる。ブロックベクトルの予測方法は、2つの候補を予測子として使用する。1つは、左側の隣接からのもので、1つは、上方の隣接からのもの(IBCでコードされた場合)である。いずれかの隣接が利用可能でない場合、デフォルトブロックベクトルが予測子として使用される。フラグは、ブロックベクトル予測子インデックスを指示するためにシグナリングされる。
【0142】
IBCが、IBCマージ/スキップモード及びIBC AMVPモードを導入したので、VVC Draft4.0において構築される追加のIBCマージリスト及びAMVPリストが存在する。
【0143】
空間候補(
図6に示される左側隣接ブロックA1、上側隣接ブロックB1、左下隣接ブロックA0、右上隣接ブロックB0、及び左上隣接ブロックB2)、HMVP候補(H
1…H
kであり、kは最大HMVPリストサイズに等しい)、及びペアワイズ候補のみが、VVC Draft4.0においてIBCマージリストを順番に構築するために使用されるので、以下のプルーニングがIBCマージリスト構築中に実行されることが可能である。
・A1とB1との間のプルーニング
・A0とA1との間のプルーニング
・B0とB1との間のプルーニング
・B2とA1との間のプルーニング
・B2とB1との間のプルーニング
・最後のHMVP候補H
kとA1との間のプルーニング
・最後のHMVP候補H
kとB1との間のプルーニング
・最後から2番目のHMVP候補H
k-1とA1との間のプルーニング
・最後から2番目のHMVP候補H
k-1とB1との間のプルーニング
【0144】
プルーニング処理は、2つのIBCマージ候補が同じであるかどうかを比較することを意味する。
【0145】
より具体的には、プルーニング処理は、2つのIBCマージ候補間のブロックベクトルが同じであるかどうかを比較する。
【0146】
要約すると、現在のブロックのIBCマージリストを構築するには、最大9回のプルーニングが必要となる。
【0147】
エンコーダ及びデコーダにおいて、プルーニングは、マージリスト構築プロセスを遅延させる。各プルーニング段階において、「if」条件がチェックされるので、さらなるマージリスト構築プロセスが、この「if」条件のチェックに応じて行われる。マージ候補リストの構築においてより多くのプルーニングが存在するほど、エンコーダ及びデコーダのプロセスがより複雑になる。マージリスト構築の複雑性を減らすべく、以下の解決手段が導入される。
【0148】
[解決手段1]
左の(A1)及び上の(B1)の空間隣接ブロックは、IBCモードを使用して現在のブロックを予測するのに重要であるので、解決手段1では、A1とB1との間の空間隣接ブロックプルーニングは維持され、残りの空間隣接ブロックプルーニングは除去される。HMVP候補プルーニングは維持される。一実施形態において、以下のプルーニングがIBCマージリスト構築中に実行されることが可能である。
・A1とB1との間のプルーニング
・最後のHMVP候補HkとA1との間のプルーニング
・最後のHMVP候補HkとB1との間のプルーニング
・最後から2番目のHMVP候補Hk-1とA1との間のプルーニング
・最後から2番目のHMVP候補Hk-1とB1との間のプルーニング
【0149】
この場合、現在のブロックのIBCマージ候補リストを構築するためのプルーニングの最高回数は9から5に減少する。解決手段は、エンコーダ及びデコーダ両方のIBCマージリスト構築の複雑性を大幅に減少させる。
【0150】
一例において、具体的なIBCマージ候補リストが以下のように構築される。
【0151】
A1隣接ブロックが利用可能でIBCモードを使用している場合、A1ブロックのブロックベクトルは、現在のブロックのIBCマージ候補リストに挿入される。そうでなければ(A1が利用可能でない又はA1がIBCモードを使用していない場合)、A1ブロックのブロックベクトルは現在のブロックのIBCマージ候補リストに挿入されない(第1候補、プルーニングなし)。
【0152】
B1隣接ブロックが利用可能でIBCモードを使用している場合、B1のブロックベクトルがA1と同じであるかどうかをプルーニング(又は決定)する。B1のブロックベクトルがA1のブロックベクトルと同じでない場合、B1ブロックのブロックベクトルは、現在のブロックのIBCマージ候補リストに挿入される。そうでなければ(B1のブロックベクトルがブロックベクトルA1と同じである、又はB1が利用可能でない、又はB1がIBCモードを使用していない場合)、B1ブロックのブロックベクトルは、現在のブロックのIBCマージ候補リストに挿入されない(A1及びB1プルーニング)。
【0153】
B0隣接ブロックが利用可能でIBCモードを使用している場合、B0ブロックのブロックベクトルは、現在のブロックのIBCマージ候補リストに挿入される。そうでなければ(B0が利用可能でない、又はB0がIBCモードを使用していない場合)、B0ブロックのブロックベクトルは現在のブロックのIBCマージ候補リストに挿入されない(プルーニングなし)。
【0154】
A0隣接ブロックが利用可能でIBCモードを使用している場合、A0ブロックのブロックベクトルは、現在のブロックのIBCマージ候補リストに挿入される。そうでなければ(A0が利用可能でない、又はA0がIBCモードを使用していない場合)、A0ブロックのブロックベクトルは現在のブロックのIBCマージ候補リストに挿入されない(プルーニングなし)。
【0155】
B2隣接ブロックが利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが4より小さい場合、B2ブロックのブロックベクトルは、現在のブロックのIBCマージ候補リストに挿入される。そうでなければ(B2が利用可能でない、又はB2がIBCモードを使用していない、又は現在のIBCマージ候補リストのサイズが4より小さくない場合)、B2ブロックのブロックベクトルは現在のブロックのIBCマージ候補リストに挿入されない(プルーニングなし)。
【0156】
最後のHMVP候補Hkが利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが、最大IBCマージ候補数から1を引いた値に等しい値より小さく、Hkのブロックベクトルは、A1及びB1と同じでない場合、Hkのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(Hkが利用可能でない、又はHkがIBCモードを使用していない、又は現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さくない、又はHkのブロックベクトルがA1のブロックベクトルと同じである、又はHkのブロックベクトルがB1のブロックベクトルと同じである場合)、Hkのブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(Hk及びA1、Hk及びB1をプルーニング)。
【0157】
最後から2番目のHMVP候補Hk-1が利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが、最大IBCマージ候補数から1を引いた値に等しい値より小さく、Hk-1のブロックベクトルは、A1及びB1と同じでない場合、Hk-1のブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(Hk-1が利用可能でない、又はHk-1がIBCモードを使用していない、又は現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さくない、又はHk-1のブロックベクトルがA1のブロックベクトルと同じである、又はHk-1のブロックベクトルがB1のブロックベクトルと同じである場合)、Hk-1ブロックのブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(Hk-1及びA1、Hk-1及びB1をプルーニング)。
【0158】
候補が利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さい場合、残りのHMVP候補を1つずつ挿入する(プルーニングなし)。
【0159】
ペアワイズ候補を挿入する。現在のIBCマージ候補リストのサイズは、最大IBCマージ候補数より小さい(プルーニングなし)。
【0160】
[解決手段2]
左の(A1)及び上の(B1)の空間隣接ブロックは、IBCモードを使用して現在のブロックを予測するのに重要であるので、解決手段2では、空間隣接ブロックA1及びB1はIBCマージ候補に挿入されるために維持され、残りの空間隣接ブロック候補は除去される。HMVP候補プルーニングはそのまま維持される。一実施形態において、以下のプルーニングがIBCマージリスト構築中に実行されることが可能である。
・A1とB1との間のプルーニング
・最後のHMVP候補HkとA1との間のプルーニング
・最後のHMVP候補HkとB1との間のプルーニング
・最後から2番目のHMVP候補Hk-1とA1との間のプルーニング
・最後から2番目のHMVP候補Hk-1とB1との間のプルーニング
【0161】
この場合、現在のブロックのIBCマージ候補リストを構築するためのプルーニングの最高回数は9から5に減少する。解決手段は、エンコーダ及びデコーダ両方のIBCマージリスト構築の複雑性を大幅に減少させる。
【0162】
一例において、具体的なIBCマージ候補リストが以下のように構築される。
【0163】
A1隣接ブロックが利用可能でIBCモードを使用している場合、A1ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(A1が利用可能でない又はA1がIBCモードを使用していない場合)、A1ブロックのブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(第1候補、プルーニングなし)。
【0164】
B1隣接ブロックが利用可能でIBCモードを使用している場合、B1のブロックベクトルがA1と同じであるかどうかをプルーニング(又は決定)する。B1のブロックベクトルがA1のブロックベクトルと同じでない場合、B1ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(B1のブロックベクトルがブロックベクトルA1と同じである、又はB1が利用可能でない、又はB1がIBCモードを使用していない場合)、A1ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入しない(A1及びB1プルーニング)。
【0165】
最後のHMVP候補Hkが利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが、最大IBCマージ候補数から1を引いた値に等しい値より小さく、Hkのブロックベクトルは、A1及びB1と同じでない場合、Hkのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(Hkが利用可能でない、又はHkがIBCモードを使用していない、又は現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さくない、又はHkのブロックベクトルがA1のブロックベクトルと同じである、又はHkのブロックベクトルがB1のブロックベクトルと同じである場合)、Hkのブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(Hk及びA1、Hk及びB1をプルーニング)。
【0166】
最後から2番目のHMVP候補Hk-1が利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが、最大IBCマージ候補数から1を引いた値に等しい値より小さく、Hk-1のブロックベクトルは、A1及びB1と同じでない場合、Hk-1のブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(Hk-1が利用可能でない、又はHk-1がIBCモードを使用していない、又は現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さくない、又はHk-1のブロックベクトルがA1のブロックベクトルと同じである、又はHk-1のブロックベクトルがB1のブロックベクトルと同じである場合)、Hk-1のブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(Hk-1及びA1、Hk-1及びB1をプルーニング)。
【0167】
候補が利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さい場合、残りのHMVP候補を1つずつ挿入する(プルーニングなし)。
【0168】
ペアワイズ候補を挿入する。現在のIBCマージ候補リストのサイズは、最大IBCマージ候補数より小さい(プルーニングなし)。
【0169】
[解決手段3]
解決手段3によると、空間隣接ブロックのブロックベクトルプルーニングは同じく維持される。HMVP候補プルーニングの場合、最後のHMVP候補Hkのブロックベクトルは、ブロックベクトル空間隣接ブロックA1及びB1でプルーニングされる。残りのHMVP候補プルーニングは除去される。一実施形態において、以下のプルーニングがIBCマージリスト構築中に実行されることが可能である。
・A1とB1との間のプルーニング
・A0とA1との間のプルーニング
・B0とB1との間のプルーニング
・B2とA1との間のプルーニング
・B2とB1との間のプルーニング
・最後のHMVP候補HkとA1との間のプルーニング
・最後のHMVP候補HkとB1との間のプルーニング
【0170】
この場合、現在のブロックのIBCマージ候補リストを構築するためのプルーニングの最高回数は9から7に減少する。解決手段は、エンコーダ及びデコーダ両方のIBCマージリスト構築の複雑性を大幅に減少させる。
【0171】
一例において、具体的なIBCマージ候補リストが以下のように構築される。
【0172】
A1隣接ブロックが利用可能でIBCモードを使用している場合、A1ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(A1が利用可能でない又はA1がIBCモードを使用していない場合)、A1ブロックのブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(第1候補、プルーニングなし)。
【0173】
B1隣接ブロックが利用可能でIBCモードを使用している場合、B1のブロックベクトルがA1と同じであるかどうかをプルーニング(又は決定)する。B1のブロックベクトルがA1のブロックベクトルと同じでない場合、B1ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(B1のブロックベクトルがブロックベクトルA1と同じである、又はB1が利用可能でない、又はB1がIBCモードを使用していない場合)、A1ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入しない(A1及びB1プルーニング)。
【0174】
B0隣接ブロックが利用可能でIBCモードを使用している場合、B0のブロックベクトルがB1と同じであるかどうかをプルーニング(又は決定)する。B0のブロックベクトルがB1のブロックベクトルと同じでない場合、B0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(B0のブロックベクトルがブロックベクトルB1と同じである、又はB0が利用可能でない、又はB0がIBCモードを使用していない場合)、B0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入しない(B0及びB1プルーニング)。
【0175】
A0隣接ブロックが利用可能でIBCモードを使用している場合、A0のブロックベクトルがA1と同じであるかどうかをプルーニング(又は決定)する。A0のブロックベクトルがA1のブロックベクトルと同じでない場合、A0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(A0のブロックベクトルがブロックベクトルA1と同じである、又はA0が利用可能でない、又はA0がIBCモードを使用していない場合)、A0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入しない(A0及びA1プルーニング)。
【0176】
B2隣接ブロックが利用可能でIBCモードを使用しており、現在のIBCマージリストのサイズが4より小さい場合、B2のブロックベクトルがA1と同じであるかどうか、及びB2のブロックベクトルがB1と同じであるかどうかをプルーニング(又は決定)する。B2のブロックベクトルがA1のブロックベクトルと同じでなく、B2のブロックベクトルがB1と同じでない場合、B2ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(B2のブロックベクトルがブロックベクトルA1又はB1と同じである、又はB0が利用可能でない、又はB0がIBCモードを使用していない場合)、B0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入しない(B2及びA1プルーニング、B2及びB1プルーニング)。
【0177】
最後のHMVP候補Hkが利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが、最大IBCマージ候補数から1を引いた値に等しい値より小さく、Hkのブロックベクトルは、A1及びB1と同じでない場合、Hkのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(Hkが利用可能でない、又はHkがIBCモードを使用していない、又は現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さくない、又はHkのブロックベクトルがA1のブロックベクトルと同じである、又はHkのブロックベクトルがB1のブロックベクトルと同じである場合)、Hkのブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(Hk及びA1、Hk及びB1をプルーニング)。
【0178】
候補が利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが、最大IBCマージ候補数から1を引いた値に等しい値より小さい場合、残りのHMVP候補を1つずつ挿入する(プルーニングなし)。
【0179】
ペアワイズ候補を挿入する。現在のIBCマージ候補リストのサイズは、最大IBCマージ候補数より小さい(プルーニングなし)。
【0180】
[解決手段4]
解決手段4によると、空間隣接ブロックのブロックベクトルプルーニングは同じく維持される。HMVP候補プルーニングの場合、最後のHMVP候補Hk及び最後から2番目のHMVP候補Hk-1のブロックベクトルは、ブロックベクトル空間隣接ブロックA1でプルーニングされる。残りのHMVP候補プルーニングは除去される。一実施形態において、以下のプルーニングがIBCマージリスト構築中に実行されることが可能である。
・A1とB1との間のプルーニング
・A0とA1との間のプルーニング
・B0とB1との間のプルーニング
・B2とA1との間のプルーニング
・B2とB1との間のプルーニング
・最後のHMVP候補HkとA1との間のプルーニング
・最後から2番目のHMVP候補Hk-1とA1との間のプルーニング
【0181】
この場合、現在のブロックのIBCマージ候補リストを構築するためのプルーニングの最高回数は9から7に減少する。解決手段は、エンコーダ及びデコーダ両方のIBCマージリスト構築の複雑性を大幅に減少させる。
【0182】
一例において、具体的なIBCマージ候補リストが以下のように構築される。
【0183】
A1隣接ブロックが利用可能でIBCモードを使用している場合、A1ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(A1が利用可能でない又はA1がIBCモードを使用していない場合)、A1ブロックのブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(第1候補、プルーニングなし)。
【0184】
B1隣接ブロックが利用可能でIBCモードを使用している場合、B1のブロックベクトルがA1と同じであるかどうかをプルーニング(又は決定)する。B1のブロックベクトルがA1のブロックベクトルと同じでない場合、B1ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(B1のブロックベクトルがブロックベクトルA1と同じである、又はB1が利用可能でない、又はB1がIBCモードを使用していない場合)、A1ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入しない(A1及びB1プルーニング)。
【0185】
B0隣接ブロックが利用可能でIBCモードを使用している場合、B0のブロックベクトルがB1と同じであるかどうかをプルーニング(又は決定)する。B0のブロックベクトルがB1のブロックベクトルと同じでない場合、B0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(B0のブロックベクトルがブロックベクトルB1と同じである、又はB0が利用可能でない、又はB0がIBCモードを使用していない場合)、B0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入しない(B0及びB1プルーニング)。
【0186】
A0隣接ブロックが利用可能でIBCモードを使用している場合、A0のブロックベクトルがA1と同じであるかどうかをプルーニング(又は決定)する。A0のブロックベクトルがA1のブロックベクトルと同じでない場合、A0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(A0のブロックベクトルがブロックベクトルA1と同じである、又はA0が利用可能でない、又はA0がIBCモードを使用していない場合)、A0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入しない(A0及びA1プルーニング)。
【0187】
B2隣接ブロックが利用可能でIBCモードを使用しており、現在のIBCマージリストのサイズが4より小さい場合、B2のブロックベクトルがA1と同じであるかどうか、及びB2のブロックベクトルがB1と同じであるかどうかをプルーニング(又は決定)する。B2のブロックベクトルがA1のブロックベクトルと同じでなく、B2のブロックベクトルがB1と同じでない場合、B2ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(B2のブロックベクトルがブロックベクトルA1又はB1と同じである、又はB0が利用可能でない、又はB0がIBCモードを使用していない場合)、B0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入しない(B2及びA1プルーニング、B2及びB1プルーニング)。
【0188】
最後のHMVP候補Hkが利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが、最大IBCマージ候補数から1を引いた値に等しい値より小さく、Hkのブロックベクトルは、A1と同じでない場合、Hkのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(Hkが利用可能でない、又はHkがIBCモードを使用していない、又は現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さくない、又はHkのブロックベクトルがA1のブロックベクトルと同じである場合)、Hkのブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(Hk及びA1をプルーニング)。
【0189】
最後から2番目のHMVP候補Hk-1が利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが、最大IBCマージ候補数から1を引いた値に等しい値より小さく、Hk-1のブロックベクトルは、A1と同じでない場合、Hk-1のブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(Hk-1が利用可能でない、又はHk-1がIBCモードを使用していない、又は現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さくない、又はHk-1のブロックベクトルがA1のブロックベクトルと同じである場合)、Hk-1のブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(Hk-1及びB1をプルーニング)。候補が利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さい場合、残りのHMVP候補を1つずつ挿入する(プルーニングなし)。
【0190】
ペアワイズ候補を挿入する。現在のIBCマージ候補リストのサイズは、最大IBCマージ候補数より小さい(プルーニングなし)。
【0191】
[解決手段5]
解決手段5によると、空間隣接ブロックのブロックベクトルプルーニングは同じく維持される。HMVP候補プルーニングの場合、最後のHMVP候補Hk及び最後から2番目のHMVP候補Hk-1のブロックベクトルは、ブロックベクトル空間隣接ブロックB1でプルーニングされる。残りのHMVP候補プルーニングは除去される。一実施形態において、以下のプルーニングがIBCマージリスト構築中に実行されることが可能である。
・A1とB1との間のプルーニング
・A0とA1との間のプルーニング
・B0とB1との間のプルーニング
・B2とA1との間のプルーニング
・B2とB1との間のプルーニング
・最後のHMVP候補HkとB1との間のプルーニング
・最後から2番目のHMVP候補Hk-1とB1との間のプルーニング
【0192】
この場合、現在のブロックのIBCマージ候補リストを構築するためのプルーニングの最高回数は9から7に減少する。解決手段は、エンコーダ及びデコーダ両方のIBCマージリスト構築の複雑性を大幅に減少させる。
【0193】
一例において、具体的なIBCマージ候補リストが以下のように構築される。
【0194】
A1隣接ブロックが利用可能でIBCモードを使用している場合、A1ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(A1が利用可能でない又はA1がIBCモードを使用していない場合)、A1ブロックのブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(第1候補、プルーニングなし)。
【0195】
B1隣接ブロックが利用可能でIBCモードを使用している場合、B1のブロックベクトルがA1と同じであるかどうかをプルーニング(又は決定)する。B1のブロックベクトルがA1のブロックベクトルと同じでない場合、B1ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(B1のブロックベクトルがブロックベクトルA1と同じである、又はB1が利用可能でない、又はB1がIBCモードを使用していない場合)、A1ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入しない(A1及びB1プルーニング)。
【0196】
B0隣接ブロックが利用可能でIBCモードを使用している場合、B0のブロックベクトルがB1と同じであるかどうかをプルーニング(又は決定)する。B0のブロックベクトルがB1のブロックベクトルと同じでない場合、B0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(B0のブロックベクトルがブロックベクトルB1と同じである、又はB0が利用可能でない、又はB0がIBCモードを使用していない場合)、B0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入しない(B0及びB1プルーニング)。
【0197】
A0隣接ブロックが利用可能でIBCモードを使用している場合、A0のブロックベクトルがA1と同じであるかどうかをプルーニング(又は決定)する。A0のブロックベクトルがA1のブロックベクトルと同じでない場合、A0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(A0のブロックベクトルがブロックベクトルA1と同じである、又はA0が利用可能でない、又はA0がIBCモードを使用していない場合)、A0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入しない(A0及びA1プルーニング)。
【0198】
B2隣接ブロックが利用可能でIBCモードを使用しており、現在のIBCマージリストのサイズが4より小さい場合、B2のブロックベクトルがA1と同じであるかどうか、及びB2のブロックベクトルがB1と同じであるかどうかをプルーニング(又は決定)する。B2のブロックベクトルがA1のブロックベクトルと同じでなく、B2のブロックベクトルがB1と同じでない場合、B2ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(B2のブロックベクトルがブロックベクトルA1又はB1と同じである、又はB0が利用可能でない、又はB0がIBCモードを使用していない場合)、B0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入しない(B2及びA1プルーニング、B2及びB1プルーニング)。
【0199】
最後のHMVP候補Hkが利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが、最大IBCマージ候補数から1を引いた値に等しい値より小さく、Hkのブロックベクトルは、B1と同じでない場合、Hkのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(Hkが利用可能でない、又はHkがIBCモードを使用していない、又は現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さくない、又はHkのブロックベクトルがB1のブロックベクトルと同じである場合)、Hkのブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(Hk及びB1をプルーニング)。
【0200】
最後から2番目のHMVP候補Hk-1が利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが、最大IBCマージ候補数から1を引いた値に等しい値より小さく、Hk-1のブロックベクトルは、B1と同じでない場合、Hk-1のブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(Hk-1が利用可能でない、又はHk-1がIBCモードを使用していない、又は現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さくない、又はHk-1のブロックベクトルがB1のブロックベクトルと同じである場合)、Hk-1のブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(Hk-1及びB1をプルーニング)。
【0201】
候補が利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さい場合、残りのHMVP候補を1つずつ挿入する(プルーニングなし)。
【0202】
ペアワイズ候補を挿入する。現在のIBCマージ候補リストのサイズは、最大IBCマージ候補数より小さい(プルーニングなし)。
【0203】
[解決手段6]
解決手段6によると、この解決手段において、IBCマージ候補リストの最後の候補は、HMVPモードを使用して許容され、この解決手段におけるIBCマージリスト構築のプルーニングプロセスは変更されないが、この方法はより効率的なマージリスト構築方法を導入する。
【0204】
一例において、具体的なIBCマージ候補リストが以下のように構築される。
【0205】
A1隣接ブロックが利用可能でIBCモードを使用している場合、A1ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(A1が利用可能でない又はA1がIBCモードを使用していない場合)、A1ブロックのブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(第1候補、プルーニングなし)。
【0206】
B1隣接ブロックが利用可能でIBCモードを使用している場合、B1のブロックベクトルがA1と同じであるかどうかをプルーニング(又は決定)する。B1のブロックベクトルがA1のブロックベクトルと同じでない場合、B1ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(B1のブロックベクトルがブロックベクトルA1と同じである、又はB1が利用可能でない、又はB1がIBCモードを使用していない場合)、A1ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入しない(A1及びB1プルーニング)。
【0207】
B0隣接ブロックが利用可能でIBCモードを使用している場合、B0のブロックベクトルがB1と同じであるかどうかをプルーニング(又は決定)する。B0のブロックベクトルがB1のブロックベクトルと同じでない場合、B0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(B0のブロックベクトルがブロックベクトルB1と同じである、又はB0が利用可能でない、又はB0がIBCモードを使用していない場合)、B0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入しない(B0及びB1プルーニング)。
【0208】
A0隣接ブロックが利用可能でIBCモードを使用している場合、A0のブロックベクトルがA1と同じであるかどうかをプルーニング(又は決定)する。A0のブロックベクトルがA1のブロックベクトルと同じでない場合、A0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(A0のブロックベクトルがブロックベクトルA1と同じである、又はA0が利用可能でない、又はA0がIBCモードを使用していない場合)、A0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入しない(A0及びA1プルーニング)。
【0209】
B2隣接ブロックが利用可能でIBCモードを使用しており、現在のIBCマージリストのサイズが4より小さい場合、B2のブロックベクトルがA1と同じであるかどうか、及びB2のブロックベクトルがB1と同じであるかどうかをプルーニング(又は決定)する。B2のブロックベクトルがA1のブロックベクトルと同じでなく、B2のブロックベクトルがB1と同じでない場合、B2ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(B2のブロックベクトルがブロックベクトルA1又はB1と同じである、又はB0が利用可能でない、又はB0がIBCモードを使用していない場合)、B0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入しない(B2及びA1プルーニング、B2及びB1プルーニング)。
【0210】
最後のHMVP候補Hkが利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが最大IBCマージ候補数より小さく、Hkのブロックベクトルは、A1及びB1と同じでない場合、Hkのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(Hkが利用可能でない、又はHkがIBCモードを使用していない、又は現在のIBCマージ候補リストのサイズが最大IBCマージ候補数より小さくない、又はHkのブロックベクトルがA1のブロックベクトルと同じである、又はHkのブロックベクトルがB1のブロックベクトルと同じである場合)、Hkのブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(Hk及びA1、Hk及びB1をプルーニング)。
【0211】
最後から2番目のHMVP候補Hk-1が利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが最大IBCマージ候補数より小さく、Hk-1のブロックベクトルは、A1及びB1と同じでない場合、Hk-1のブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(Hk-1が利用可能でない、又はHk-1がIBCモードを使用していない、又は現在のIBCマージ候補リストのサイズが最大IBCマージ候補数より小さくない、又はHk-1のブロックベクトルがA1のブロックベクトルと同じである、又はHk-1のブロックベクトルがB1のブロックベクトルと同じである場合)、Hk-1のブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(Hk-1及びA1、Hk-1及びB1をプルーニング)。
【0212】
候補が利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが最大IBCマージ候補数より小さい場合、残りのHMVP候補を1つずつ挿入する(プルーニングなし)。
【0213】
ペアワイズ候補を挿入する。現在のIBCマージ候補リストのサイズは、最大IBCマージ候補数より小さい(プルーニングなし)。
【0214】
[解決手段7]
解決手段7によると、空間隣接ブロックのブロックベクトルプルーニングは同じく維持される。HMVP候補プルーニングの場合、最後のHMVP候補Hk及び最後から2番目のHMVP候補Hk-1のブロックベクトルは、A1及びB1の第1空間隣接ブロックのブロックベクトルでプルーニングされる。A1又はB1のいずれもIBCマージリスト内に既に存在しない場合、その後、空間候補で証明されるHMVP候補は存在しない。
【0215】
残りのHMVP候補プルーニングは除去される。一実施形態において、以下のプルーニングは、IBCマージリスト構築中にあり得る最悪のケースのプルーニングプロセスである。
・A1とB1との間のプルーニング
・A0とA1との間のプルーニング
・B0とB1との間のプルーニング
・B2とA1との間のプルーニング
・B2とB1との間のプルーニング
・最後のHMVP候補HkとA1との間、又はHkとB1との間のプルーニング
・最後から2番目のHMVP候補Hk-1とA1との間、又はHk-1とB1との間のプルーニング
【0216】
この場合、現在のブロックのIBCマージ候補リストを構築するためのプルーニングの最高回数は9から7に減少する。解決手段は、エンコーダ及びデコーダ両方のIBCマージリスト構築の複雑性を大幅に減少させる。
【0217】
一例において、具体的なIBCマージ候補リストが以下のように構築される。
【0218】
A1隣接ブロックが利用可能でIBCモードを使用している場合、A1ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(A1が利用可能でない又はA1がIBCモードを使用していない場合)、A1ブロックのブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(第1候補、プルーニングなし)。
【0219】
B1隣接ブロックが利用可能でIBCモードを使用している場合、B1のブロックベクトルがA1と同じであるかどうかをプルーニング(又は決定)する。B1のブロックベクトルがA1のブロックベクトルと同じでない場合、B1ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(B1のブロックベクトルがブロックベクトルA1と同じである、又はB1が利用可能でない、又はB1がIBCモードを使用していない場合)、A1ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入しない(A1及びB1プルーニング)。
【0220】
B0隣接ブロックが利用可能でIBCモードを使用している場合、B0のブロックベクトルがB1と同じであるかどうかをプルーニング(又は決定)する。B0のブロックベクトルがB1のブロックベクトルと同じでない場合、B0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(B0のブロックベクトルがブロックベクトルB1と同じである、又はB0が利用可能でない、又はB0がIBCモードを使用していない場合)、B0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入しない(B0及びB1プルーニング)。
【0221】
A0隣接ブロックが利用可能でIBCモードを使用している場合、A0のブロックベクトルがA1と同じであるかどうかをプルーニング(又は決定)する。A0のブロックベクトルがA1のブロックベクトルと同じでない場合、A0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(A0のブロックベクトルがブロックベクトルA1と同じである、又はA0が利用可能でない、又はA0がIBCモードを使用していない場合)、A0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入しない(A0及びA1プルーニング)。
【0222】
B2隣接ブロックが利用可能でIBCモードを使用しており、現在のIBCマージリストのサイズが4より小さい場合、B2のブロックベクトルがA1と同じであるかどうか、及びB2のブロックベクトルがB1と同じであるかどうかをプルーニング(又は決定)する。B2のブロックベクトルがA1のブロックベクトルと同じでなく、B2のブロックベクトルがB1と同じでない場合、B2ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(B2のブロックベクトルがブロックベクトルA1又はB1と同じである、又はB0が利用可能でない、又はB0がIBCモードを使用していない場合)、B0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入しない(B2及びA1プルーニング、B2及びB1プルーニング)。
【0223】
A1がIBCマージリストに既に存在する場合、その後、最後のHMVP候補Hkが利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが、最大IBCマージ候補数から1を引いた値に等しい値より小さく、Hkのブロックベクトルは、A1と同じでない場合、Hkのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(Hkが利用可能でない、又はHkがIBCモードを使用していない、又は現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さくない、又はHkのブロックベクトルがA1のブロックベクトルと同じである場合)、Hkのブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(Hk及びA1をプルーニング)。
【0224】
最後から2番目のHMVP候補Hk-1が利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが、最大IBCマージ候補数から1を引いた値に等しい値より小さく、Hk-1のブロックベクトルは、A1と同じでない場合、Hk-1のブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(Hk-1が利用可能でない、又はHk-1がIBCモードを使用していない、又は現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さくない、又はHk-1のブロックベクトルがA1のブロックベクトルと同じである場合)、Hk-1のブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(Hk-1及びA1をプルーニング)。
【0225】
そうでなければ、A1がIBCマージリストに存在せずB1がIBCマージリストに既に存在する場合、その後、最後のHMVP候補Hkが利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが、最大IBCマージ候補数から1を引いた値に等しい値より小さく、Hkのブロックベクトルは、B1と同じでない場合、Hkのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(Hkが利用可能でない、又はHkがIBCモードを使用していない、又は現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さくない、又はHkのブロックベクトルがB1のブロックベクトルと同じである場合)、Hkのブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(Hk及びB1をプルーニング)。
【0226】
最後から2番目のHMVP候補Hk-1が利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが、最大IBCマージ候補数から1を引いた値に等しい値より小さく、Hk-1のブロックベクトルは、B1と同じでない場合、Hk-1のブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(Hk-1が利用可能でない、又はHk-1がIBCモードを使用していない、又は現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さくない、又はHk-1のブロックベクトルがB1のブロックベクトルと同じである場合)、Hk-1のブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(Hk-1及びB1をプルーニング)。
【0227】
そうでなければ、A1及びB1のいずれもIBCマージリストに用意されていない場合、その後、最後のHMVP候補Hkが利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが、最大IBCマージ候補数から1を引いた値に等しい値より小さい場合、Hkのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(Hkが利用可能でない、又はHkがIBCモードを使用していない、又は現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さくない場合)、Hkのブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(プルーニングなし)。
【0228】
最後から2番目のHMVP候補Hk-1が利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが、最大IBCマージ候補数から1を引いた値に等しい値より小さい場合、Hk-1のブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(Hk-1が利用可能でない、又はHk-1がIBCモードを使用していない、又は現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さくない場合)、Hk-1のブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(プルーニングなし)。
【0229】
候補が利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さい場合、残りのHMVP候補を1つずつ挿入する(プルーニングなし)。
【0230】
ペアワイズ候補を挿入する。現在のIBCマージ候補リストのサイズは、最大IBCマージ候補数より小さい(プルーニングなし)。
【0231】
[解決手段8]
解決手段8によると、空間隣接ブロックのブロックベクトルプルーニングは同じく維持される。
HMVP候補プルーニングでは、
A1がIBCマージリストに既に存在し、B1がIBCマージリストに存在しない場合、最後のHMVP候補Hk及び最後から2番目のHMVP候補Hk-1のブロックベクトルは、A1の空間隣接ブロックのブロックベクトルでプルーニングされる。
B1がIBCマージリストに既に存在し、A1がIBCマージリストに存在しない場合、最後のHMVP候補Hk及び最後から2番目のHMVP候補Hk-1のブロックベクトルは、B1の空間隣接ブロックのブロックベクトルでプルーニングされる。
A1及びB1の両方がIBCマージリストに既に存在する場合、最後のHMVP候補Hkのブロックベクトルは、B1の空間隣接ブロックのブロックベクトルでプルーニングされる。
A1又はB1のいずれもIBCマージリスト内に既に存在しない場合、その後、空間候補で証明されるHMVP候補は存在しない。
【0232】
この場合、現在のブロックのIBCマージ候補リストを構築するためのプルーニングの最高回数は9から7に減少する。解決手段は、エンコーダ及びデコーダ両方のIBCマージリスト構築の複雑性を大幅に減少させる。
【0233】
一例において、具体的なIBCマージ候補リストが以下のように構築される。
【0234】
A1隣接ブロックが利用可能でIBCモードを使用している場合、A1ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(A1が利用可能でない又はA1がIBCモードを使用していない場合)、A1ブロックのブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(第1候補、プルーニングなし)。
【0235】
B1隣接ブロックが利用可能でIBCモードを使用している場合、B1のブロックベクトルがA1と同じであるかどうかをプルーニング(又は決定)する。B1のブロックベクトルがA1のブロックベクトルと同じでない場合、B1ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(B1のブロックベクトルがブロックベクトルA1と同じである、又はB1が利用可能でない、又はB1がIBCモードを使用していない場合)、A1ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入しない(A1及びB1プルーニング)。
【0236】
B0隣接ブロックが利用可能でIBCモードを使用している場合、B0のブロックベクトルがB1と同じであるかどうかをプルーニング(又は決定)する。B0のブロックベクトルがB1のブロックベクトルと同じでない場合、B0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(B0のブロックベクトルがブロックベクトルB1と同じである、又はB0が利用可能でない、又はB0がIBCモードを使用していない場合)、B0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入しない(B0及びB1プルーニング)。
【0237】
A0隣接ブロックが利用可能でIBCモードを使用している場合、A0のブロックベクトルがA1と同じであるかどうかをプルーニング(又は決定)する。A0のブロックベクトルがA1のブロックベクトルと同じでない場合、A0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(A0のブロックベクトルがブロックベクトルA1と同じである、又はA0が利用可能でない、又はA0がIBCモードを使用していない場合)、A0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入しない(A0及びA1プルーニング)。
【0238】
B2隣接ブロックが利用可能でIBCモードを使用しており、現在のIBCマージリストのサイズが4より小さい場合、B2のブロックベクトルがA1と同じであるかどうか、及びB2のブロックベクトルがB1と同じであるかどうかをプルーニング(又は決定)する。B2のブロックベクトルがA1のブロックベクトルと同じでなく、B2のブロックベクトルがB1と同じでない場合、B2ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(B2のブロックベクトルがブロックベクトルA1又はB1と同じである、又はB0が利用可能でない、又はB0がIBCモードを使用していない場合)、B0ブロックのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入しない(B2及びA1プルーニング、B2及びB1プルーニング)。
【0239】
A1がIBCマージリストに既に存在し、B1がリストに存在しない場合、その後、最後のHMVP候補Hkが利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが、最大IBCマージ候補数から1を引いた値に等しい値より小さく、Hkのブロックベクトルは、A1と同じでない場合、Hkのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(Hkが利用可能でない、又はHkがIBCモードを使用していない、又は現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さくない、又はHkのブロックベクトルがA1のブロックベクトルと同じである場合)、Hkのブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(Hk及びA1をプルーニング)。
【0240】
最後から2番目のHMVP候補Hk-1が利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが、最大IBCマージ候補数から1を引いた値に等しい値より小さく、Hk-1のブロックベクトルは、A1と同じでない場合、Hk-1のブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(Hk-1が利用可能でない、又はHk-1がIBCモードを使用していない、又は現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さくない、又はHk-1のブロックベクトルがA1のブロックベクトルと同じである場合)、Hk-1のブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(Hk-1及びA1をプルーニング)。
【0241】
そうでなければ、A1がIBCマージリストに存在せずB1がIBCマージリストに既に存在する場合、その後、最後のHMVP候補Hkが利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが、最大IBCマージ候補数から1を引いた値に等しい値より小さく、Hkのブロックベクトルは、B1と同じでない場合、Hkのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(Hkが利用可能でない、又はHkがIBCモードを使用していない、又は現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さくない、又はHkのブロックベクトルがB1のブロックベクトルと同じである場合)、Hkのブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(Hk及びB1をプルーニング)。
【0242】
最後から2番目のHMVP候補Hk-1が利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが、最大IBCマージ候補数から1を引いた値に等しい値より小さく、Hk-1のブロックベクトルは、B1と同じでない場合、Hk-1のブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(Hk-1が利用可能でない、又はHk-1がIBCモードを使用していない、又は現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さくない、又はHk-1のブロックベクトルがB1のブロックベクトルと同じである場合)、Hk-1のブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(Hk-1及びB1をプルーニング)。
【0243】
そうでなければ、A1及びB1の両方がIBCマージリストに既に存在する場合、その後、最後のHMVP候補Hkが利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが、最大IBCマージ候補数から1を引いた値に等しい値より小さく、HkのブロックベクトルはA1と同じでなく、HkのブロックベクトルはB1と同じでない場合、Hkのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(Hkが利用可能でない、又はHkがIBCモードを使用していない、又は現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さくない、又はHkのブロックベクトルがA1のブロックベクトルと同じである、又はHkのブロックベクトルがB1のブロックベクトルと同じである場合)、Hkのブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(HkとA1とB1とをプルーニング)。
【0244】
そうでなければ、A1及びB1のいずれもIBCマージリストに用意されていない場合、その後、最後のHMVP候補Hkが利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが、最大IBCマージ候補数から1を引いた値に等しい値より小さい場合、Hkのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(Hkが利用可能でない、又はHkがIBCモードを使用していない、又は現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さくない場合)、Hkのブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(プルーニングなし)。
【0245】
最後から2番目のHMVP候補Hk-1が利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが、最大IBCマージ候補数から1を引いた値に等しい値より小さい場合、Hk-1のブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(Hk-1が利用可能でない、又はHk-1がIBCモードを使用していない、又は現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さくない場合)、Hk-1のブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(プルーニングなし)。
【0246】
候補が利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さい場合、残りのHMVP候補を1つずつ挿入する(プルーニングなし)。ペアワイズ候補を挿入する。現在のIBCマージ候補リストのサイズは、最大IBCマージ候補数より小さい(プルーニングなし)。
【0247】
[解決手段9]
解決手段9によると、解決手段1に加えて、空間ネイバーB0はB0及びB1の利用可能性に基づいており、空間ネイバーA0はA0及びA1の利用可能性に基づいており、空間ネイバーB2はB2、B1及びA1の利用可能性に基づいている。
【0248】
例では、
B0隣接ブロックが利用可能でIBCモードを使用しており、B1が利用可能でない場合、B0ブロックのブロックベクトルは、現在のブロックのIBCマージ候補リストに挿入される。そうでなければ(B0が利用可能でない、又はB0がIBCモードを使用していない、又はB1が利用可能である場合)、B0ブロックのブロックベクトルは現在のブロックのIBCマージ候補リストに挿入されない(プルーニングなし)。
【0249】
A0隣接ブロックが利用可能でIBCモードを使用しており、A1が利用可能でない場合、A0ブロックのブロックベクトルは、現在のブロックのIBCマージ候補リストに挿入される。そうでなければ(A0が利用可能でない、又はA0がIBCモードを使用していない、又はA1が利用可能である場合)、A0ブロックのブロックベクトルは現在のブロックのIBCマージ候補リストに挿入されない(プルーニングなし)。
【0250】
B2隣接ブロックが利用可能でIBCモードを使用しており、A1及びB1の両方が利用可能でなく、現在のIBCマージ候補リストのサイズが4より小さい場合、B2ブロックのブロックベクトルは、現在のブロックのIBCマージ候補リストに挿入される。そうでなければ(B2が利用可能でない、又はB2がIBCモードを使用していない、又は現在のIBCマージ候補リストのサイズが4より小さくない、又はA1が利用可能である、又はB1が利用可能である場合)、B2ブロックのブロックベクトルは現在のブロックのIBCマージ候補リストに挿入されない(プルーニングなし)。
【0251】
この解決手段では、さらなる追加のプルーニングが加えられることはないが、解決手段1と比較してより向上したコーディング効率が実現される。
【0252】
[解決手段10]
解決手段10によると、解決手段1から9の任意のものを組み合わせて、IBCマージリスト構築の複雑性を低減することができる。
【0253】
解決手段10の一例において、解決手段2と解決手段3とを組み合わせる。
左の(A1)及び上の(B1)の空間隣接ブロックは、IBCモードを使用して現在のブロックを予測するのに重要であるので、この例において、A1とB1との間の空間隣接ブロックプルーニングは維持され、残りの空間隣接ブロックのブロックベクトルはIBCマージリストに挿入されない。HMVP候補プルーニングの場合、最後のHMVP候補Hkのブロックベクトルは、ブロックベクトル空間隣接ブロックA1及びB1でプルーニングされる。一実施形態において、以下のプルーニングがIBCマージリスト構築中に実行されることが可能である。
・A1とB1との間のプルーニング
・最後のHMVP候補HkとA1との間のプルーニング
・最後のHMVP候補HkとB1との間のプルーニング
【0254】
この場合、現在のブロックのIBCマージ候補リストを構築するためのプルーニングの最高回数は9から3に減少する。解決手段は、エンコーダ及びデコーダ両方のIBCマージリスト構築の複雑性を大幅に減少させる。
【0255】
一例において、IBCマージ候補リストの最後の候補は、HMVPモードを使用して許容される。
【0256】
一例において、具体的なIBCマージ候補リストが以下のように構築される。
【0257】
A1隣接ブロックが利用可能でIBCモードを使用している場合、A1ブロックのブロックベクトルは、現在のブロックのIBCマージ候補リストに挿入される。そうでなければ(A1が利用可能でない又はA1がIBCモードを使用していない場合)、A1ブロックのブロックベクトルは現在のブロックのIBCマージ候補リストに挿入されない(第1候補、プルーニングなし)。
【0258】
B1隣接ブロックが利用可能でIBCモードを使用しており、A1ブロックのブロックベクトルが現在のブロックのIBCマージ候補リストに挿入される場合、B1のブロックベクトルがA1と同じであるかどうかをプルーニング(又は決定)する。B1のブロックベクトルがA1のブロックベクトルと同じでない場合、B1ブロックのブロックベクトルは、現在のブロックのIBCマージ候補リストに挿入される。そうでなければ(B1のブロックベクトルがブロックベクトルA1と同じである、又はB1が利用可能でない、又はB1がIBCモードを使用していない場合)、B1ブロックのブロックベクトルは、現在のブロックのIBCマージ候補リストに挿入されない(A1及びB1プルーニング)。
【0259】
最後のHMVP候補Hkが利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが、最大IBCマージ候補数から1を引いた値に等しい値より小さく、Hkのブロックベクトルは、A1及びB1と同じでない場合、Hkのブロックベクトルを、現在のブロックのIBCマージ候補リストに挿入する。そうでなければ(Hkが利用可能でない、又はHkがIBCモードを使用していない、又は現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さくない、又はHkのブロックベクトルがA1のブロックベクトルと同じである、又はHkのブロックベクトルがB1のブロックベクトルと同じである場合)、Hkのブロックベクトルを現在のブロックのIBCマージ候補リストに挿入しない(Hk及びA1、Hk及びB1をプルーニング)。
【0260】
候補が利用可能でIBCモードを使用しており、現在のIBCマージ候補リストのサイズが最大IBCマージ候補数から1を引いた値より小さい場合、残りのHMVP候補を1つずつ挿入する(プルーニングなし)。
【0261】
いくつかの例では、さらにペアワイズ候補を挿入する。現在のIBCマージ候補リストのサイズは、最大IBCマージ候補数より小さい(プルーニングなし)。
【0262】
一例において、IBC予測モードでコードされたコーディングユニットに対するデコーディングプロセスについては、以下の通りである。
【0263】
[8.6.1 IBC予測モードでコードされたコーディングユニットに対する一般的なデコーディングプロセス]
【0264】
このプロセスへの入力は、以下の通りである。
現在の画像の左上のルマサンプルに対して、現在のコーディングブロックの左上サンプルを指定するルマ位置(xCb、yCb)
ルマサンプルにおける現在のコーディングブロックの幅を指定する変数cbWidth
ルマサンプルにおける現在のコーディングブロックの高さを指定する変数cbHeight
シングルツリー又はデュアルツリーが使用されているかどうかを指定し、デュアルツリーが使用されている場合には、現在のツリーがルマ又はクロマコンポーネントに対応するかどうかを指定する、変数treeType
【0265】
このプロセスの出力は、インループフィルタリングの前の変更された再構築画像である。
【0266】
量子化パラメータの導出プロセスは、ルマ位置(xCb、yCb)、ルマサンプルにおける現在のコーディングブロックの幅cbWidth、ルマサンプルにおける現在のコーディングブロックの高さcbHeight、及び変数treeTypeを入力として呼び出される。
【0267】
変数IsGt4by4は、以下のように導出される。
IsGt4by4=(cbWidth*cbHeight)>16 (1111)
【0268】
IBC予測モードでコードされたコーディングユニットに対するデコーディングプロセスは、以下の順序の段階から成る。
【0269】
1.現在のコーディングユニットのブロックベクトル成分は以下のように導出される。
ブロックベクトル成分の導出プロセスは、ルマコーディングブロックの位置(xCb、yCb)、ルマコーディングブロックの幅cbWidth、及びルマコーディングブロックの高さcbHeightを入力として、ルマブロックベクトルbvLを出力として呼び出される。
treeTypeがSINGLE_TREEに等しい場合、クロマブロックの導出プロセスは、ルマブロックベクトルbvLを入力として、クロマブロックベクトルbvCを出力として呼び出される。
【0270】
2.現在のコーディングユニットの予測サンプルは以下のように導出される。
項目8.6.3.1で指定されるようなIBCブロックに対するデコーディングプロセスは、ルマコーディングブロックの位置(xCb、yCb)、ルマコーディングブロックの幅cbWidth並びにルマコーディングブロックの高さcbHeight、ルマブロックベクトルbvL、0に等しく設定された変数cIdxを入力として、予測ルマサンプルの(cbWidth)×(cbHeight)アレイpredSamplesLであるIBC予測サンプル(predSamples)を出力として呼び出される。
treeTypeがSINGLE_TREEに等しい場合、現在のコーディングユニットの予測サンプルは以下のように導出される。
-項目8.6.3.1で指定されるようなIBCブロックに対するデコーディングプロセスは、ルマコーディングブロックの位置(xCb、yCb)、ルマコーディングブロックの幅cbWidth並びにルマコーディングブロックの高さcbHeight、クロマブロックベクトルbvC、及び1に等しく設定された変数cIdxを入力として、クロマコンポーネントCbの予測クロマサンプルの(cbWidth/SubWidthC)×(cbHeight/SubHeightC)アレイpredSamplesCbであるIBC予測サンプル(predSamples)を出力として呼び出される。
-項目8.6.3.1で指定されるようなIBCブロックのデコーディングプロセスは、ルマコーディングブロックの位置(xCb、yCb)、ルマコーディングブロックの幅cbWidth並びにルマコーディングブロックの高さcbHeight、クロマブロックベクトルbvC、及び2に等しく設定された変数cIdxを入力として、クロマコンポーネントCrの予測クロマサンプルの(cbWidth/SubWidthC)×(cbHeight/SubHeightC)アレイpredSamplesCrであるIBC予測サンプル(predSamples)を出力として呼び出される。
【0271】
3.現在のコーディングユニットの残差サンプルは以下のように導出される。
-インター予測モードでコードされたコーディングブロックの残差信号に対するデコーディングプロセスは、ルマ位置(xCb、yCb)に等しく設定された位置(xTb0、yTb0)、ルマコーディングブロックの幅cbWidthに等しく設定された幅nTbW、ルマコーディングブロックの高さcbHeightに等しく設定された高さnTbH、及び0に等しく設定された変数cIdxを入力として、アレイresSamplesLを出力として呼び出される。
-treeTypeがSINGLE_TREEに等しい場合、インター予測モードでコードされたコーディングブロックの残差信号に対するデコーディングプロセスは、クロマ位置(xCb/SubWidthC、yCb/SubHeightC)に等しく設定された位置(xTb0、yTb0)、クロマコーディングブロックの幅cbWidth/SubWidthCに等しく設定された幅nTbW、クロマコーディングブロックの高さcbHeight/SubHeightCに等しく設定された高さnTbH、1に等しく設定された変数cIdxを入力として、アレイresSamplesCbを出力として呼び出される。
-treeTypeがSINGLE_TREEに等しい場合、インター予測モードでコードされたコーディングブロックの残差信号に対するデコーディングプロセスは、クロマ位置(xCb/SubWidthC、yCb/SubHeightC)に等しく設定された位置(xTb0、yTb0)、クロマコーディングブロックの幅cbWidth/SubWidthCに等しく設定された幅nTbW、クロマコーディングブロックの高さcbHeight/SubHeightCに等しく設定された高さnTbH、2に等しく設定された変数cIdxを入力として、アレイresSamplesCrを出力として呼び出される。
【0272】
4.現在のコーディングユニットの再構築されたサンプルは、以下のように導出される。
-色成分に対する画像再構築プロセスは、(xCb、yCb)に等しく設定されたブロック位置(xCurr、yCurr)、cbWidthに等しく設定されたブロックの幅nCurrSw、cbHeightに等しく設定されたブロックの高さnCurrSh、0に等しく設定された変数cIdx、predSamplesLに等しく設定された(cbWidth)×(cbHeight)アレイpredSamples、及びresSamplesLに等しく設定された(cbWidth)×(cbHeight)アレイresSamplesを入力として呼び出され、出力は、インループフィルタリングの前の変更された再構築画像である。
-treeTypeがSINGLE_TREEに等しい場合、色成分に対する画像再構築プロセスは、(xCb/SubWidthC、yCb/SubHeightC)に等しく設定されたブロック位置(xCurr、yCurr)、cbWidth/SubWidthCに等しく設定されたブロックの幅nCurrSw、cbHeight/SubHeightCに等しく設定されたブロックの高さnCurrSh、1に等しく設定された変数cIdx、predSamplesCbに等しく設定された(cbWidth/SubWidthC)×(cbHeight/SubHeightC)アレイpredSamples、及びresSamplesCbに等しく設定された(cbWidth/SubWidthC)×(cbHeight/SubHeightC)アレイresSamplesを入力として呼び出され、出力は、インループフィルタリングの前の変更された再構築画像である。
-treeTypeがSINGLE_TREEに等しい場合、色成分に対する画像再構築プロセスは、(xCb/SubWidthC、yCb/SubHeightC)に等しく設定されたブロック位置(xCurr、yCurr)、cbWidth/SubWidthCに等しく設定されたブロックの幅nCurrSw、cbHeight/SubHeightCに等しく設定されたブロックの高さnCurrSh、2に等しく設定された変数cIdx、predSamplesCrに等しく設定された(cbWidth/SubWidthC)×(cbHeight/SubHeightC)アレイpredSamples、及びresSamplesCrに等しく設定された(cbWidth/SubWidthC)×(cbHeight/SubHeightC)アレイresSamplesを入力として呼び出され、出力は、インループフィルタリングの前の変更された再構築画像である。
【0273】
[8.6.2 IBCブロックのブロックベクトル成分に対する導出プロセス]
[8.6.2.1 一般]
【0274】
このプロセスへの入力は、以下の通りである。
現在の画像の左上ルマサンプルに対する現在のルマコーディングブロックの左上サンプルのルマ位置(xCb、yCb)
ルマサンプルにおける現在のコーディングブロックの幅を指定する変数cbWidth
ルマサンプルにおける現在のコーディングブロックの高さを指定する変数cbHeight
【0275】
このプロセスの出力は、以下の通りである。
1/16の分数サンプル精度のルマブロックベクトルbvL
【0276】
ルマブロックベクトルbvLは、以下のように導出される。
-項目8.6.2.2で指定されるようなIBCルマブロックベクトル予測に対する導出プロセスは、ルマ位置(xCb、yCb)、変数cbWidth及びcbHeightの入力で呼び出され、出力はルマブロックベクトルbvLである。
【0277】
general_merge_flag[xCb][yCb]が0に等しい場合、以下が適用される。
【0278】
1.変数bvdは以下のように導出される。
bvd[0]=MvdL0[xCb][yCb][0] (1112)
bvd[1]=MvdL0[xCb][yCb][1] (1113)
【0279】
2.動きベクトルに対する丸め処理は、bvLに等しく設定されたmvX、AmvrShiftに等しく設定されたrightShift、AmvrShiftに等しく設定されたleftShiftを入力として、丸め処理されたbvLを出力として呼び出される。
【0280】
3.ルマブロックベクトルbvLは、以下のように変更される。
u[0]=(bvL[0]+bvd[0]+218)%218 (1114)
bvL[0]=(u[0]>=217)?(u[0]-218):u[0] (1115)
u[1]=(bvL[1]+bvd[1]+218)%218 (1116)
bvL[1]=(u[1]>=217)?(u[1]-218):u[1] (1117)
【0281】
注記1-上記で指定されるように、結果として得られる値bvL[0]及びbvL[1]は、常に-217から217-1のまでの範囲内にある。
【0282】
IsGt4by4がTRUEに等しい場合、項目8.6.2.6で指定されるような履歴ベースのブロックベクトル予測子リストに対する更新プロセスは、ルマブロックベクトルbvLで呼び出される。
ルマブロックベクトルbvLを以下の制約に従うものとすることは、ビットストリーム適合性の要件である。
【0283】
CtbSizeYは、((yCb+(bvL[1]>>4))&(CtbSizeY-1))+cbHeightより大きい又はそれに等しい。
【0284】
IbcVirBuf[0][(x+(bvL[0]>>4))&(IbcBufWidthY-1)][(y+(bvL[1]>>4))&(CtbSizeY-1)]は、x=xCb..xCb+cbWidth-1及びy=yCb..yCb+cbHeight-1の-1に等しいものではない。
【0285】
[8.6.2.2 IBCルマブロックベクトル予測に対する導出プロセス]
このプロセスは、CuPredMode[0][xCb][yCb]がMODE_IBCに等しい場合にのみ呼び出される。ここで(xCb、yCb)は、現在の画像の左上ルマサンプルに対して現在のルマコーディングブロックの左上サンプルを指定する。
【0286】
このプロセスへの入力は、以下の通りである。
現在の画像の左上ルマサンプルに対する現在のルマコーディングブロックの左上サンプルのルマ位置(xCb、yCb)
ルマサンプルにおける現在のコーディングブロックの幅を指定する変数cbWidth
ルマサンプルにおける現在のコーディングブロックの高さを指定する変数cbHeight
【0287】
このプロセスの出力は、以下の通りである。
1/16の分数サンプル精度のルマブロックベクトルbvL
【0288】
ルマブロックベクトルbvLは、以下の順序の段階によって導出される。
【0289】
1.IsGt4by4がTRUEに等しい場合、項目8.6.2.3で指定されるような隣接コーディングユニットからの空間ブロックベクトル候補に対する導出プロセスは、ルマコーディングブロックの位置(xCb、yCb)、ルマコーディングブロックの幅cbWidth並びに高さcbHeightを入力として呼び出され、出力は、利用可能性フラグavailableFlagA1、availableFlagB1並びにブロックベクトルbvA1及びbvB1である。
【0290】
2.IsGt4by4がTRUEに等しい場合、ブロックベクトル候補リストであるbvCandListは以下のように構築される。
【数5】
【0291】
3.変数numCurrCandは以下のように導出される。
IsGt4by4はTRUEに等しく、numCurrCandはbvCandListにおけるマージ候補の数に等しく設定される。
【0292】
そうでなければ(IsGt4by4がFALSEに等しい場合)、numCurrCandは0に等しく設定される。
【0293】
4.numCurrCandがMaxNumIbcMergeCandより小さく、NumHmvpIbcCandが0より大きい場合、8.6.2.4で指定されるようなIBC履歴ベースのブロックベクトル候補の導出プロセスは、bvCandList及びnumCurrCandを入力として、変更されたbvCandList及びnumCurrCandを出力として呼び出される。
【0294】
5.numCurrCandがMaxNumIbcMergeCandより小さい場合、numCurrCandがMaxNumIbcMergeCandに等しくなるまで以下を適用する。
bvCandList[numCurrCand][0]は0に等しく設定される。
bvCandList[numCurrCand][1]は0に等しく設定される。
numCurrCandは1だけ増加する。
【0295】
6.変数bvIdxは以下のように導出される。
bvIdx=general_merge_flag[xCb][yCb]?merge_idx[xCb][yCb]:mvp_l0_flag[xCb][yCb] (1119)
【0296】
7.以下の割り当てが行われる。
bvL[0]=bvCandList[mvIdx][0] (1120)
bvL[1]=bvCandList[mvIdx][1] (1121)
【0297】
[8.6.2.3 IBC空間ブロックベクトル候補に対する導出プロセス]
【0298】
このプロセスへの入力は、以下の通りである。
現在の画像の左上ルマサンプルに対する現在のルマコーディングブロックの左上サンプルのルマ位置(xCb、yCb)
ルマサンプルにおける現在のコーディングブロックの幅を指定する変数cbWidth
ルマサンプルにおける現在のコーディングブロックの高さを指定する変数cbHeight
【0299】
このプロセスの出力は以下の通りである。
隣接コーディングユニットの利用可能性フラグavailableFlagA1及びavailableFlagB1
隣接コーディングユニットの1/16の分数サンプル精度のブロックベクトルbvA1及びbvB1
【0300】
availableFlagA1及びmvA1の導出のためには、以下が適用される。
隣接ルマコーディングブロック内のルマ位置(xNbA1、yNbA1)は、(xCb-1,yCb+cbHeight-1)に等しく設定される。
【0301】
隣接ブロックの利用可能性に対する導出プロセスは、(xCb、yCb)に等しく設定された現在のルマ位置(xCurr、yCurr)、隣接ルマ位置(xNbA1、yNbA1)、TRUEに等しく設定されたcheckPredModeY、及び0に等しく設定されたcIdxを入力として呼び出され、出力は、ブロック利用可能性フラグavailableA1に割り当てられる。
【0302】
変数availableFlagA1及びbvA1は以下のように導出される。
availableA1がFALSEに等しい場合、availableFlagA1は0に等しく設定され、bvA1の両方のコンポーネントは0に等しく設定される。
【0303】
そうでなければ、availableFlagA1は1に等しく設定され、以下の割り当てが行われる。
bvA1=MvL0[xNbA1][yNbA1] (1122)
【0304】
availableFlagB1及びbvB1の導出のためには、以下が適用される。
隣接ルマコーディングブロック内のルマ位置(xNbB1、yNbB1)は、(xCb+cbWidth-1,yCb-1)に等しく設定される。
【0305】
隣接ブロックの利用可能性に対する導出プロセスは、(xCb、yCb)に等しく設定された現在のルマ位置(xCurr、yCurr)、隣接ルマ位置(xNbB1、yNbB1)、TRUEに等しく設定されたcheckPredModeY、及び0に等しく設定されたcIdxを入力として呼び出され、出力は、ブロック利用可能性フラグavailableB1に割り当てられる。
【0306】
変数availableFlagB1及びbvB1は以下のように導出される。
以下の条件のうち1又は複数が真である場合、availableFlagB1は0に等しく設定され、bvB1の両方のコンポーネントは0に等しく設定される。
availableB1はFALSEに等しい。
availableA1はTRUEに等しく、ルマ位置(xNbA1、yNbA1)及び(xNbB1、yNbB1)は同じブロックベクトルを有する。
【0307】
そうでなければ、availableFlagB1は1に等しく設定され、以下の割り当てが行われる。
bvB1=MvL0[xNbB1][yNbB1] (1123)
【0308】
[8.6.2.4 IBC履歴ベースのブロックベクトル候補に対する導出プロセス]
【0309】
このプロセスへの入力は、以下の通りである。
ブロックベクトル候補リストbvCandList
リストnumCurrCandにおける利用可能なブロックベクトル候補の数
【0310】
このプロセスの出力は、以下の通りである。
変更されたブロックベクトル候補リストbvCandList
リストnumCurrCandにおける動きベクトル候補の変更された数
【0311】
変数isPrunedA1及びisPrunedB1は、両方ともFALSEに等しく設定される。
【0312】
numCurrCandがMaxNumIbcMergeCandに等しくなるまで、インデックスhMvpIdx=1..NumHmvpIbcCandを有するHmvpIbcCandList[hMvpIdx]における候補ごとに、以下の順序の段階が繰り返される。
【0313】
1.変数sameMotionは以下のように導出される。
以下の条件のすべてが、NがA1又はB1である任意のブロックベクトル候補Nに対して真である場合、sameMotion及びisPrunedNは、両方ともTRUEに等しく設定される。
IsGt4by4はTRUEに等しい。
hMvpIdxは1に等しい。
候補HmvpIbcCandList[NumHmvpIbcCand-hMvpIdx]は、ブロックベクトル候補Nに等しい。
isPrunedNはFALSEに等しい。
【0314】
そうでなければ、sameMotionはFALSEに等しく設定される。
【0315】
2.sameMotionがFALSEに等しい場合、候補HmvpIbcCandList[NumHmvpIbcCand-hMvpIdx]は、以下のようにブロックベクトル候補リストに加えられる。
bvCandList[numCurrCand++]=HmvpIbcCandList[NumHmvpIbcCand-hMvpIdx] (1124)
【0316】
[8.6.2.5 クロマブロックベクトルに対する導出プロセス]
【0317】
このプロセスへの入力は、以下の通りである。
1/16の分数サンプル精度におけるルマブロックベクトルbvL
このプロセスの出力は、1/32分数サンプル精度のクロマブロックベクトルbvCである。クロマブロックベクトルは、対応するルマブロックベクトルから導出される。
クロマブロックベクトルbvCは以下のように導出される。
bvC[0]=((bvL[0]>>(3+SubWidthC))*32 (1125)
bvC[1]=((bvL[1]>>(3+SubHeightC))*32 (1126)
【0318】
[8.6.2.6 履歴ベースのブロックベクトル予測子候補リストに対する更新プロセス]
【0319】
このプロセスへの入力は、以下の通りである。
1/16の分数サンプル精度のルマブロックベクトルbvL
【0320】
候補リストHmvpIbcCandListは、以下の順序の段階によって変更される。
【0321】
1.変数identicalCandExistはFALSEに等しく設定され、変数removeIdxは0に等しく設定される。
【0322】
2.NumHmvpIbcCandが0より大きい場合、hMvpIdx=0..NumHmvpIbcCand-1であるインデックスhMvpIdxごとに、identicalCandExistがTRUEに等しくなるまで以下の段階が適用される。
bvLがHmvpIbcCandList[hMvpIdx]に等しい場合、identicalCandExistはTRUEに等しく設定され、removeIdxはhMvpIdxに等しく設定される。
【0323】
3.候補リストHmvpIbcCandListは以下のように更新される。
identicalCandExistがTRUEに等しい又はNumHmvpIbcCandが5に等しい場合、以下が適用される。
i=(removeIdx+1)..(NumHmvpIbcCand-1)であるインデックスiごとに、HmvpIbcCandList[i-1]はHmvpIbcCandList[i]に等しく設定される。
HmvpIbcCandList[NumHmvpIbcCand-1]はbvLに等しく設定される。
そうでなければ(identicalCandExistがFALSEに等しく、NumHmvpIbcCandが5より小さい場合)、以下が適用される。
HmvpIbcCandList[NumHmvpIbcCand++]はbvLに等しく設定される。
【0324】
[8.6.3 IBCブロックに対するデコーディングプロセス]
[8.6.3.1 一般]
【0325】
このプロセスは、IBC予測モードでコードされたコーディングユニットをデコーディングする場合に呼び出される。
【0326】
このプロセスへの入力は、以下の通りである。
現在の画像の左上のルマサンプルに対して、現在のコーディングブロックの左上サンプルを指定するルマ位置(xCb、yCb)
ルマサンプルにおける現在のコーディングブロックの幅を指定する変数cbWidth
ルマサンプルにおける現在のコーディングブロックの高さを指定する変数cbHeight
ブロックベクトルbv
現在のブロックの色成分インデックスを指定する変数cIdx
【0327】
このプロセスの出力は、以下の通りである。
予測サンプルのアレイpredSamples
【0328】
cIdxが0に等しい場合、x=xCb..xCb+cbWidth-1及びy=yCb..yCb+cbHeight-1には、以下が適用される。
xVb=(x+(bv[0]>>4))&(IbcBufWidthY-1) (1127)
yVb=(y+(bv[1]>>4))&(CtbSizeY-1) (1128)
predSamples[x][y]=ibcVirBuf[0][xVb][yVb] (1129)
【0329】
cIdxが0に等しくない場合、x=xCb/subWidthC..xCb/subWidthC+cbWidth/subWidthC-1及びy=yCb/subHeightC..yCb/subHeightC+cbHeight/subHeightC-1には、以下が適用される。
xVb=(x+(bv[0]>>5))&(IbcBufWidthC-1) (1130)
yVb=(y+(bv[1]>>5))&((CtbSizeY/subHeightC)-1) (1131)
predSamples[x][y]=ibcVirBuf[cIdx][xVb][yVb] (1132)
【0330】
cIdxが0に等しい場合、x=0..cbWidth-1及びy=0..cbHeight-1に対して、以下の割り当てが行われる。
MvL0[xCb+x][yCb+y]=bv (1133)
MvL1[xCb+x][yCb+y]=0 (1134)
RefIdxL0[xCb+x][yCb+y]=-1 (1135)
RefIdxL1[xCb+x][yCb+y]=-1 (1136)
PredFlagL0[xCb+x][yCb+y]=0 (1137)
PredFlagL1[xCb+x][yCb+y]=0 (1138)
BcwIdx[xCb+x][yCb+y]=0 (1139)
【0331】
以下は、上述した実施形態に示されるようなエンコーディング方法並びにデコーディング方法のアプリケーション、及びそれらを使用するシステムの説明である。
【0332】
図8は、コンテンツ配布サービスを実現するためのコンテンツ供給システム3100を示すブロック図である。このコンテンツ供給システム3100は、キャプチャデバイス3102、端末デバイス3106を含み、任意選択的にディスプレイ3126を含む。キャプチャデバイス3102は、通信リンク3104を介して端末デバイス3106と通信する。通信リンクは、上述した通信チャネル13を含んでよい。通信リンク3104は、限定されるものではないが、WIFI(登録商標)、イーサネット(登録商標)、ケーブル、無線(3G/4G/5G)、USB又はそれらの任意の種類の組み合わせなどを含む。
【0333】
キャプチャデバイス3102はデータを生成し、上記の実施形態に示されるようなエンコーディング方法によってデータをエンコードしてよい。代替的に、キャプチャデバイス3102は、ストリーミングサーバ(図示せず)にデータを配信してよく、サーバは、データをエンコードして、エンコードされたデータを端末デバイス3106に送信する。キャプチャデバイス3102は、限定されるものではないが、カメラ、スマートフォン又はパッド、コンピュータ又はラップトップ、ビデオ会議システム、PDA、車載デバイス、又はそれらのいずれかの組み合わせなどを含む。例えば、上述したように、キャプチャデバイス3102はソースデバイス12を含んでよい。データがビデオを含む場合、キャプチャデバイス3102に含まれるビデオエンコーダ20は、ビデオエンコーディング処理を実際に実行してよい。データがオーディオ(すなわち、音声)を含む場合、キャプチャデバイス3102に含まれるオーディオエンコーダは、オーディオエンコーディング処理を実際に実行してよい。いくつかの実際のシナリオについて、キャプチャデバイス3102は、これらを一緒に多重化することにより、エンコードされたビデオ及びオーディオデータを配信する。他の実際のシナリオについて、例えば、ビデオ会議システムにおいて、エンコードされたオーディオデータ及びエンコードされたビデオデータは多重化されない。キャプチャデバイス3102は、エンコードされたオーディオデータ及びエンコードされたビデオデータを別個に端末デバイス3106に配信する。
【0334】
コンテンツ供給システム3100において、端末デバイス310は、エンコードされたデータを受信及び再現する。端末デバイス3106は、データ受信及び復元機能を有するデバイス、例えば、上述したエンコードされたデータをデコーディングすることが可能なスマートフォン又はパッド3108、コンピュータ又はラップトップ3110、ネットワークビデオレコーダ(NVR)/デジタルビデオレコーダ(DVR)3112、TV3114、セットトップボックス(STB)3116、ビデオ会議システム3118、ビデオ監視システム3120、パーソナルデジタルアシスタント(PDA)3122、車載デバイス3124又はそれらのいずれかの組み合わせなどであり得る。例えば、上述したように、端末デバイス3106はデスティネーションデバイス14を含んでよい。エンコードされたデータがビデオを含む場合、端末デバイスに含まれるビデオデコーダ30は、ビデオデコーディングを実行することを優先させる。エンコードされたデータがオーディオを含む場合、端末デバイスに含まれるオーディオデコーダは、オーディオデコーディング処理を実行することを優先させる。
【0335】
ディスプレイを有する端末デバイス、例えば、スマートフォン又はパッド3108、コンピュータ又はラップトップ3110、ネットワークビデオレコーダ(NVR)/デジタルビデオレコーダ(DVR)3112、TV3114、パーソナルデジタルアシスタント(PDA)3122又は車載デバイス3124について、端末デバイスは、デコードされたデータをそのディスプレイに入力できる。ディスプレイを搭載していない端末デバイス、例えば、STB3116、ビデオ会議システム3118又はビデオ監視システム3120について、外部ディスプレイ3126は、デコードされたデータを受信及び示すために、内部でコンタクトされる。
【0336】
このシステム内の各デバイスがエンコーディング又はデコーディングを実行する場合、上述した実施形態に示されるように、画像エンコーディングデバイス又は画像デコーディングデバイスが使用され得る。
【0337】
図9は、端末デバイス3106の例の構造を示す図である。端末デバイス3106がキャプチャデバイス3102からストリームを受信した後に、プロトコル処理ユニット3202は、ストリームの伝送プロトコルを解析する。プロトコルは、限定されるものではないが、リアルタイムストリーミングプロトコル(RTSP)、ハイパーテキストトランスファープロトコル(HTTP)、HTTPライブストリーミングプロトコル(HLS)、MPEG-DASH、リアルタイムトランスポートプロトコル(RTP)、リアルタイムメッセージングプロトコル(RTMP)、又は、それらの任意の種類の組み合わせなどを含む。
【0338】
プロトコル処理ユニット3202がストリームを処理した後に、ストリームファイルが生成される。当該ファイルは、逆多重化ユニット3204に出力される。逆多重化ユニット3204は、多重化されたデータをエンコードされたオーディオデータ及びエンコードされたビデオデータに分離できる。上述したように、いくつかの実際のシナリオについて、例えば、ビデオ会議システムでは、エンコードされたオーディオデータ及びエンコードされたビデオデータは多重化されていない。この状況において、エンコードされたデータは、逆多重化ユニット3204を通すことなく、ビデオデコーダ3206及びオーディオデコーダ3208に送信される。
【0339】
逆多重化処理を介して、ビデオエレメンタリストリーム(ES)、オーディオES、及び任意選択的に字幕が生成される。上述した実施形態において説明したように、ビデオデコーダ30を含むビデオデコーダ3206は、上述した実施形態に示されるようなデコーディング方法により、ビデオESをデコードしてビデオフレームを生成し、このデータを同期ユニット3212に入力する。オーディオデコーダ3208は、オーディオESをデコードしてオーディオフレームを生成し、このデータを同期ユニット3212に入力する。代替的に、ビデオフレームは、それを同期ユニット3212に入力する前に、(
図9に図示されていない)バッファに保存されてよい。同様に、オーディオフレームは、それを同期ユニット3212に入力する前に、(
図9に図示されていない)バッファに保存されてよい。
【0340】
同期ユニット3212は、ビデオフレーム及びオーディオフレームを同期させて、ビデオ/オーディオをビデオ/オーディオディスプレイ3214に供給する。例えば、同期ユニット3212は、ビデオ及びオーディオ情報の提示を同期させる。情報は、コードされたオーディオ及びビジュアルデータの提示に関するタイムスタンプ、及び、データストリームそのものの配信に関するタイムスタンプを使用してシンタックスでコードしてよい。
【0341】
ストリームに字幕が含まれている場合、字幕デコーダ3210は、字幕をデコードし、それをビデオフレーム及びオーディオフレームと同期させ、ビデオ/オーディオ/字幕をビデオ/オーディオ/字幕ディスプレイ3216に供給する。
【0342】
本発明は、上述したシステムに限定されるものではなく、上述した実施形態における画像エンコーディングデバイス又は画像デコーディングデバイスはいずれも、他のシステム、例えば自動車システムに組み込まれることができる。
【0343】
[例1]
イントラブロックコピー(IBC)モードのための候補マージリストを構築する方法であって、当該方法は、
左側隣接ブロックが利用可能で左側隣接ブロックがIBCモードを使用している場合、現在のブロックの初期のマージリストに現在のブロックの左側隣接ブロックのブロックベクトルを挿入する段階(一例において、初期のマージリストは、この挿入段階の前の空リストである)と、
上側隣接ブロックが利用可能で、上側隣接ブロックがIBCモードを使用しており、上側隣接ブロックのブロックベクトルは左側隣接ブロックのブロックベクトルと同じでない場合、現在のブロックの上側隣接ブロックのブロックベクトルを初期のマージリストに挿入する段階(一例において、初期のマージリストはこの段階の前の空リストであるか、又は、初期のマージリストは、現在のブロックの左側隣接ブロックのブロックベクトルを備える)と、
右上隣接ブロックが利用可能で、右上隣接ブロックがIBCモードを使用している場合、現在のブロックの右上隣接ブロックのブロックベクトルを初期のマージリストに挿入する段階(一例において、初期のマージリストは、この段階の前の空リストである、又は、初期のマージリストは現在のブロックの上側隣接ブロックのブロックベクトルを含む、又は、初期のマージリストは現在のブロックの左側隣接ブロックのブロックベクトルを含む、又は、初期のマージリストは現在のブロックの上側隣接ブロックのブロックベクトル及び現在のブロックの左側隣接ブロックのブロックベクトルを含む)と
を備える、方法。
【0344】
[例2]
例1の方法であって、当該方法はさらに、
左下隣接ブロックが利用可能であり、左下隣接ブロックがIBCモードを使用している場合、現在のブロックの左下隣接ブロックのブロックベクトルを初期のマージリストに挿入する段階(一例において、初期のマージリストは、この段階の前の空リストである、又は、初期のマージリストは現在のブロックの上側隣接ブロックのブロックベクトルを含む、又は、初期のマージリストは現在のブロックの左側隣接ブロックのブロックベクトルを含む、又は、初期のマージリストは現在のブロックの上側隣接ブロックのブロックベクトル、及び現在のブロックの左側隣接ブロックのブロックベクトルを含む、又は、初期のマージリストは現在のブロックの上側隣接ブロックのブロックベクトル、現在のブロックの左側隣接ブロックのブロックベクトル、及び右上隣接ブロックのブロックベクトルを含む)
を備える、方法。
【0345】
[例3]
例1又は2の方法であって、当該方法はさらに、
左上隣接ブロックが利用可能で、左上隣接ブロックがIBCモードを使用しており、初期のマージリストにおけるブロックベクトルの数が閾値(例えば、閾値は4である)より小さい場合、現在のブロックの左上隣接ブロックのブロックベクトルを初期のマージリストに挿入する段階(一例において、初期のマージリストは、この段階の前の空リストである、又は、初期のマージリストは現在のブロックの上側隣接ブロックのブロックベクトルを含む、又は、初期のマージリストは現在のブロックの左側隣接ブロックのブロックベクトルを含む、又は、初期のマージリストは現在のブロックの上側隣接ブロックのブロックベクトル、及び現在のブロックの左側隣接ブロックのブロックベクトルを含む、又は、初期のマージリストは現在のブロックの上側隣接ブロックのブロックベクトル、現在のブロックの左側隣接ブロックのブロックベクトル、右上隣接ブロックのブロックベクトルを含む、又は、初期のマージリストは現在のブロックの上側隣接ブロックのブロックベクトル、現在のブロックの左側隣接ブロックのブロックベクトル、右上隣接ブロックのブロックベクトル、及び左下隣接ブロックのブロックベクトルを含む)
を備える、方法。
【0346】
[例4]
例1から3のうちいずれか1つによる方法を実行するための処理回路を備えるエンコーダ(20)。
【0347】
[例5]
例1から3のうちいずれか1つによる方法を実行するための処理回路を備えるデコーダ(30)。
【0348】
[例6]
例1から3のうちいずれか1つによる方法を実行するためのプログラムコードを備えるコンピュータプログラム製品。
【0349】
[例7]
1又は複数のプロセッサと、
プロセッサに連結され、プロセッサによる実行のためのプログラミングを保存する非一時的コンピュータ可読記憶媒体であって、当該プログラミングは、プロセッサにより実行される場合、例1から3のうちいずれか1つによる方法を実行するようにデコーダを構成する、非一時的コンピュータ可読記憶媒体と
を備えるデコーダ又はエンコーダ。
【0350】
[数学演算子]
本願で使用される数学演算子は、Cプログラミング言語で使用されるそれらと同様である。しかしながら、整数除算及び算術シフト演算の結果はより正確に定義され、べき乗及び実数値除算などの追加の演算が定義される。番号付け及びカウントの規定は一般に、例えば、「第1」は0番目に相当し、「第2」は1番目に相当するなど、0から始まる。
【0351】
[算術演算子]
以下の算術演算子は、以下のように定義される。
【表2】
【0352】
[論理演算子]
以下の論理演算子は、以下のように定義される。
x&&y x及びyのブール論理上の「and」
x||y x及びyのブール論理上の「or」
! ブール論理上の「not」
x?y:z xがTRUEであるか又は0に等しくない場合、yの値になり、そうでない場合、zの値になる。
【0353】
[関係演算子]
以下の関係演算子は、以下のように定義される。
> より大きい
>= 以上
< より小さい
<= 以下
= = に等しい
!= に等しくない
関係演算子が、値「na」(非該当)をアサインされているシンタックス要素又は変数に適用される場合、値「na」は、そのシンタックス要素又は変数の区別的な値として扱われる。値「na」は、任意の他の値に等しくないとみなされる。
【0354】
[ビット単位演算子]
以下のビット単位演算子は、以下のように定義される。
& ビット単位の「and」。整数項に対して演算を行う場合、整数値の2の補数表現に対して演算を行う。別の項より少ないビットを含む二進項に対して演算を行う場合、そのより短い項は、0に等しいより上位のビットを追加することによって拡張される。
| ビット単位の「or」。整数項に対して演算を行う場合、整数値の2の補数表現に対して演算を行う。別の項より少ないビットを含む二進項に対して演算を行う場合、そのより短い項は、0に等しいより上位のビットを追加することによって拡張される。
^ ビット単位の「排他的or」。整数項に対して演算を行う場合、整数値の2の補数表現に対して演算を行う。別の項より少ないビットを含む二進項に対して演算を行う場合、そのより短い項は、0に等しいより上位のビットを追加することによって拡張される。
x>>y yの二進数だけの、xの2の補数整数表現の算術右シフト。この関数は、yの非負の整数値に関してのみ定義される。右シフトの結果として最上位ビット(MSB)にシフトされたビットは、シフト操作前のxのMSBに等しい値を有する。
x<<y yの二進数だけの、xの2の補数整数表現の算術左シフト。この関数は、yの非負の整数値に関してのみ定義される。左シフトの結果として最下位ビット(LSB)にシフトされたビットは、0に等しい値を有する。
【0355】
[割当演算子]
以下の算術演算子は、以下のように定義される。
= 割当演算子
+ + インクリメント、すなわち、x+ +はx=x+1に相当する。配列インデックスに使用される場合、インクリメント演算の前の変数の値になる。
- - デクリメント、すなわち、x- -はx=x-1に相当する。配列インデックスに使用される場合、デクリメント演算の前の変数の値になる。
+= 指定された量だけのインクリメント、すなわち、x+=3はx=x+3に相当し、x+=(-3)はx=x+(-3)に相当する。
-= 指定された量だけのデクリメント、すなわち、x-=3はx=x-3に相当し、x-=(-3)はx=x-(-3)に相当する。
【0356】
[範囲の表記]
以下の表記は、値の範囲を指定するのに使用される。
x=y..z xはyからzまでの整数値をとり、x、y及びzは整数でありzはyより大きい。
【0357】
[数学的機能]
以下の数学的機能が定義される。
【数6】
Asin(x) 逆三角サイン関数であり、
-1.0から1.0までの範囲内にある独立変数xに対して演算を行い、
出力値は、ラジアンの単位で、-π÷2からπ÷2までの範囲内にある。
Atan(x) 逆三角タンジェント関数であり、
独立変数xに対して演算を行い、出力値は、ラジアンの単位で、-π÷2からπ÷2までの範囲内にある。
【数7】
Ceil(x) xより大きい又はそれに等しい最も小さい整数
Clip1
Y(x)=Clip3(0,(1<<BitDepth
Y)-1,x)
Clip1
C(x)=Clip3(0,(1<<BitDepth
C)-1,x)
【数8】
Cos(x) ラジアンの単位で独立変数xに対する演算を行う三角コサイン関数である。
Floor(x) xより小さい又はそれに等しい最も大きい整数
【数9】
Ln(x) xの自然対数(底e対数であり、eは自然対数の底2.718281828...である)
Log2(x) 2を底とするxの対数
Log10(x) 10を底とするxの対数
【数10】
【数11】
Round(x)=Sign(x)*Floor(Abs(x)+0.5)
【数12】
Sin(x) ラジアンの単位で独立変数xに対する演算を行う三角サイン関数
【数13】
Swap(x,y)=(y,x)
Tan(x) ラジアンの単位で独立変数xに対する演算を行う三角タンジェント関数である。
【0358】
[演算優先順位の順序]
式の優先順位の順序が括弧を使用して明示的に指示されていない場合、以下のルールが適用される。
-より高い優先順位の演算は、より低い優先順位の任意の演算の前に評価される。
-同じ優先順位の演算は、左から右に順次評価される。
【0359】
以下のテーブルは、演算の優先順位を最高から最低まで指定している。テーブルにおいてより高い位置にあるものは、より高い優先順位を示す。
【0360】
Cプログラミング言語でも使用される演算子の場合、本明細書で使用される優先順位の順序は、Cプログラミング言語で使用されるのと同じである。
【0361】
テーブル:最も高い(テーブルの一番上)から最も低い(テーブルの一番下)までの演算優先順位
【表3】
【0362】
[論理演算のテキストでの説明]
テキストにおいて、論理演算のステートメントが以下の形式で数学的に説明される。
【数14】
は、以下の方式で説明され得る。
...以下の通りである/...以下が適用される:(...as follows/...the following applies:)
-条件0の場合、ステートメント0(If condition0,statement0)
-そうでなければ、条件1の場合、ステートメント1(Otherwise,if condition1,statement1)
...
そうでなければ(残りの条件に対する有益な備考)、ステートメントn(Otherwise(informative remark on remaining condition),statement n)
【0363】
テキスト中のそれぞれの「If...Otherwise,if...Otherwise,...」ステートメントは、「...as follows」又は「...the following applies」の直後に「If...」が続く形で導入される。「If...Otherwise,if...Otherwise,...」の最後の条件は、常に「Otherwise,...」である。
インターリーブされた「If...Otherwise,if...Otherwise,...」ステートメントは、「Otherwise,...」で終わる「...as follows」又は「...the following applies」をマッチングすることによって識別され得る。
【0364】
テキストにおいて、論理演算のステートメントが以下の形式で数学的に説明される。
【数15】
は、以下の方式で説明され得る。
...以下の通りである/...以下が適用される:(...as follows/...the following applies:)
-以下の条件のすべてが真である場合、ステートメント0:(If all of the following conditions are true,statement0:)
-条件0a(condition 0a)
-条件0b(condition 0b)
-そうでなければ、以下の条件の1又は複数が真である場合、ステートメント1:(Otherwise,if one or more of the following conditions are true,statement1:)
-条件1a(condition 1a)
-条件1b(condition 1b)
...
そうでなければ、ステートメントn(Otherwise,statement n)
【0365】
テキストにおいて、論理演算のステートメントが以下の形式で数学的に説明される。
【数16】
は、以下の方式で説明され得る。
条件0の場合、ステートメント0(When condition0,statement0)
条件1の場合、ステートメント1(When condition1,statement1)
【0366】
本発明の実施形態は、主にビデオコーディングに基づいて記載されているが、本明細書に記載のコーディングシステム10、エンコーダ20、及びデコーダ30(及び対応してシステム10)の実施形態、並びに他の実施形態は、静止画像処理又はコーディング、すなわち、ビデオコーディングにおけるような任意の前の又は連続する画像とは独立した個々の画像の処理又はコーディングのために構成されてもよいことに留意されたい。一般に、画像処理コーディングが単一の画像17に限定される場合、インター予測ユニット244(エンコーダ)及び344(デコーダ)だけは利用可能でなくてよい。ビデオエンコーダ20及びビデオデコーダ30のすべての他の機能(ツール又は技術とも称される)は、静止画像処理、例えば、残差計算204/304、変換206、量子化208、逆量子化210/310、(逆)変換212/312、区分化262/362、イントラ予測254/354、及び/又はループフィルタリング220、320、並びにエントロピーコーディング270及びエントロピーデコーディング304に等しく使用され得る。
【0367】
例えばエンコーダ20及びデコーダ30の実施形態、並びに、例えばエンコーダ20及びデコーダ30を参照して本明細書に記載された機能は、ハードウェア、ソフトウェア、ファームウェア、又はそれらの任意の組み合わせで実装されてよい。ソフトウェアにおいて実装される場合、機能は、コンピュータ可読媒体上に保存されるか、又は、通信媒体を介して1又は複数の命令若しくはコードとして送信され、ハードウェアベースの処理ユニットによって実行されてよい。コンピュータ可読媒体は、データ記憶媒体などの有形の媒体に対応するコンピュータ可読記憶媒体、又は、例えば通信プロトコルに従った、コンピュータプログラムの1つの場所から別の場所への移動を容易にする任意の媒体を含む通信媒体を含んでよい。このように、コンピュータ可読媒体は、一般に、(1)非一時的な有形コンピュータ可読記憶媒体、又は、(2)信号若しくは搬送波などの通信媒体に対応してよい。データ記憶媒体は、本開示に記載された技術の実装のための命令、コード、及び/又はデータ構造を取得するために、1若しくは複数のコンピュータ又は1若しくは複数のプロセッサによってアクセスできる任意の利用可能な媒体であってよい。コンピュータプログラム製品は、コンピュータ可読媒体を含んでよい。
【0368】
限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM、CD-ROM若しくは他の光ディスクストレージ、磁気ディスクストレージ若しくは他の磁気ストレージデバイス、フラッシュメモリ、又は、命令若しくはデータ構造の形の所望のプログラムコードを保存するのに使用でき、コンピュータによってアクセスできる、任意の他の媒体を含むことができる。また、任意の接続が、適宜コンピュータ可読媒体と称される。例えば、同軸ケーブル、光ファイバケーブル、ツイストペア、デジタル加入者線(DSL)、又は、赤外線、無線、及びマイクロ波などの無線技術を使用して、ウェブサイト、サーバ、又は他のリモートソースから命令が送信される場合、同軸ケーブル、光ファイバケーブル、ツイストペア、DSL、又は、赤外線、無線、及びマイクロ波などの無線技術が媒体の定義に含まれる。しかしながら、コンピュータ可読記憶媒体及びデータ記憶媒体は、接続、搬送波、信号、又は他の一時的媒体を含まず、その代わりに、非一時的な有形の記憶媒体を指すことが理解されるべきである。本明細書で使用されるディスク(Disk and disc)は、コンパクトディスク(CD)、レーザディスク、光ディスク、デジタル多用途ディスク(DVD)、フロッピーディスク、及びブルーレイディスクを含み、ここで、通常、ディスク(disk)はデータを磁気的に再現するものであり、ディスク(disc)はデータをレーザによって光学的に再現するものである。上記の組み合わせもまた、コンピュータ可読媒体の範囲内に含まれるべきである。
【0369】
命令は、1又は複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルロジックアレイ(FPGA)、又は他の等価な集積回路若しくはディスクリートロジック回路などの1又は複数のプロセッサによって実行されてよい。したがって、本明細書で使用される「プロセッサ」という用語は、前述の構造のいずれか、又は、本明細書に記載の技術の実装に好適な任意の他の構造を指してよい。加えて、いくつかの態様では、本明細書に記載の機能は、エンコーディング及びデコーディングのために構成されている専用ハードウェア及び/又はソフトウェアモジュール内に提供されるか、又は、組み合わされたコーデックに組み込まれてよい。また、本技術は、1若しくは複数の回路又はロジック要素において完全に実装することができる。
【0370】
本開示の技術は、無線ハンドセット、集積回路(IC)又はICのセット(例えば、チップセット)を含む、多種多様なデバイス又は装置において実装されてよい。様々な構成要素、モジュール、又はユニットが、開示された技術を実行するように構成されているデバイスの機能的態様を強調するように本開示において記載されているが、異なるハードウェアユニットによる実現は必ずしも要求されない。むしろ、上述したように、様々なユニットは、コーデックハードウェアユニットにして組み合わされてもよく、又は、上述したように、1又は複数のプロセッサを含む相互運用ハードウェアユニットの集合によって、好適なソフトウェア及び/又はファームウェアと連動して提供されてもよい。
[考えられる他の項目]
[項目1]
イントラブロックコピー、IBC、モードのための候補マージリストを構築する方法であって、上記方法は、
左側隣接ブロックが利用可能で上記左側隣接ブロックがIBCモードを使用している場合、現在のブロックの上記左側隣接ブロックのブロックベクトルを上記現在のブロックの初期のマージリストに挿入する段階と、
上側隣接ブロックが利用可能で上記上側隣接ブロックがIBCモードを使用しており、上記上側隣接ブロックのブロックベクトルが上記左側隣接ブロックの上記ブロックベクトルと同じでない場合、上記現在のブロックの上記上側隣接ブロックの上記ブロックベクトルを上記初期のマージリストに挿入する段階と、
上記上側隣接ブロックの上記ブロックベクトルが、履歴ベースの動きベクトル予測子、HMVPにおける最後の候補のブロックベクトルと同じでない場合、且つ上記左側隣接ブロックの上記ブロックベクトルが、上記HMVPにおける上記最後の候補の上記ブロックベクトルと同じでない場合、上記HMVPにおける上記最後の候補の上記ブロックベクトルを上記初期のマージリストに挿入する段階と
を備える、方法。
[項目2]
上記方法はさらに、
上述した上記挿入するプロセスの後の上記初期のマージリストに従って上記現在のブロックのブロックベクトルを取得し、上記現在のブロックのマージ候補インデックスを取得する段階
を備える、項目1に記載の方法。
[項目3]
イントラブロックコピー、IBC、モードのための候補マージリストを構築する方法であって、上記方法は、
隣接ブロックが利用可能で、上記隣接ブロックがIBCモードを使用している場合、現在のブロックの上記隣接ブロックのブロックベクトルを上記現在のブロックの初期のマージリストに挿入する段階と、
上記隣接ブロックの上記ブロックベクトルが履歴ベースの動きベクトル予測子、HMVPにおける最後の候補のブロックベクトルと同じでない場合、上記HMVPにおける上記最後の候補の上記ブロックベクトルを上記初期のマージリストに挿入する段階と、
上記HMVPにおける別の候補のブロックベクトルを上記初期のマージリストに挿入する段階であって、上記HMVPにおける別の候補の上記ブロックベクトルのプルーニングが除去されている、段階と
を備える、方法。
[項目4]
上記方法はさらに、
上述した上記挿入するプロセスの後の上記初期のマージリストに従って上記現在のブロックのブロックベクトルを取得し、上記現在のブロックのマージ候補インデックスを取得する段階
を備える、項目3に記載の方法。
[項目5]
イントラブロックコピー、IBC、モードのための候補マージリストを構築する方法であって、上記方法は、
左側隣接ブロックが利用可能で上記左側隣接ブロックがIBCモードを使用している場合、現在のブロックの上記左側隣接ブロックのブロックベクトルを上記現在のブロックの初期のマージリストに挿入する段階と、
上側隣接ブロックが利用可能で上記上側隣接ブロックがIBCモードを使用しており、上記上側隣接ブロックのブロックベクトルが上記左側隣接ブロックの上記ブロックベクトルと同じでない場合、上記現在のブロックの上記上側隣接ブロックの上記ブロックベクトルを上記初期のマージリストに挿入する段階と、
上記上側隣接ブロックの上記ブロックベクトルが、履歴ベースの動きベクトル予測子、HMVPにおける最後の候補のブロックベクトルと同じでない場合、且つ上記左側隣接ブロックの上記ブロックベクトルが、上記HMVPにおける上記最後の候補の上記ブロックベクトルと同じでない場合、上記HMVPにおける上記最後の候補の上記ブロックベクトルを上記初期のマージリストに挿入する段階と、
上記HMVPにおける別の候補のブロックベクトルを上記初期のマージリストに挿入する段階であって、上記HMVPにおける別の候補の上記ブロックベクトルのプルーニングが除去されている、段階と
を備える、方法。
[項目6]
上記方法はさらに、
上述した上記挿入するプロセスの後の上記初期のマージリストに従って上記現在のブロックのブロックベクトルを取得し、上記現在のブロックのマージ候補インデックスを取得する段階
を備える、項目5に記載の方法。
[項目7]
上記初期のマージリストは、最初の上記挿入するプロセスの前の空リストである、項目5又は6に記載の方法。
[項目8]
上述した上記挿入するプロセスが順番に実行される、項目5から7のいずれか一項に記載の方法。
[項目9]
イントラブロックコピー、IBC、モードのための候補マージリストを構築する方法であって、上記方法は、
隣接ブロックが利用可能で、上記隣接ブロックがIBCモードを使用している場合、現在のブロックの上記隣接ブロックのブロックベクトルを上記現在のブロックの初期のマージリストに挿入する段階と、
上記隣接ブロックの上記ブロックベクトルが履歴ベースの動きベクトル予測子、HMVPにおける最後の候補のブロックベクトルと同じでない場合、上記HMVPにおける候補のブロックベクトルを上記初期のマージリストに挿入する段階と、
を備え、
上記現在のブロックの上記初期のマージリストにおける上記最後のブロックベクトルは、上記HMVPにおける1つの候補の1つのブロックベクトルである、
方法。
[項目10]
上記方法はさらに、
上述した上記挿入するプロセスの後の上記初期のマージリストに従って上記現在のブロックのブロックベクトルを取得し、上記現在のブロックのマージ候補インデックスを取得する段階
を備える、項目9に記載の方法。
[項目11]
イントラブロックコピー、IBC、モードのための候補マージリストを構築する方法であって、上記方法は、
左側隣接ブロックが利用可能で上記左側隣接ブロックがIBCモードを使用している場合、現在のブロックの上記左側隣接ブロックのブロックベクトルを上記現在のブロックの初期のマージリストに挿入する段階と、
上側隣接ブロックが利用可能で上記上側隣接ブロックがIBCモードを使用しており、上記上側隣接ブロックのブロックベクトルが上記左側隣接ブロックの上記ブロックベクトルと同じでない場合、上記現在のブロックの上記上側隣接ブロックの上記ブロックベクトルを上記初期のマージリストに挿入する段階と、
上記上側隣接ブロックの上記ブロックベクトルが、履歴ベースの動きベクトル予測子、HMVPにおける最後の候補のブロックベクトルと同じでない場合、且つ上記左側隣接ブロックの上記ブロックベクトルが、上記HMVPにおける上記最後の候補の上記ブロックベクトルと同じでない場合、上記HMVPにおける上記最後の候補の上記ブロックベクトルを上記初期のマージリストに挿入する段階と、
上記HMVPにおける別の候補のブロックベクトルを上記初期のマージリストに挿入する段階であって、上記HMVPにおける別の候補の上記ブロックベクトルのプルーニングが除去されている、段階と
を備え、
上記現在のブロックの上記初期のマージリストにおける上記最後のブロックベクトルは、上記HMVPにおける上記別の候補の上記ブロックベクトルである、
方法。
[項目12]
項目1から11のいずれか一項に記載の方法を実行するための処理回路を備える、エンコーダ(20)。
[項目13]
項目1から11のいずれか一項に記載の方法を実行するための処理回路を備える、デコーダ(30)。
[項目14]
項目1から11のいずれか一項に記載の方法を実行するためのプログラムコードを備える、コンピュータプログラム製品。
[項目15]
デコーダであって、
1又は複数のプロセッサと、
上記1又は複数のプロセッサに連結され、上記1又は複数のプロセッサによる実行のためのプログラミングを保存する非一時的コンピュータ可読記憶媒体であって、上記プログラミングは、上記1又は複数のプロセッサにより実行される場合、項目1から11のいずれか一項に記載の方法を実行するように上記デコーダを構成する、非一時的コンピュータ可読記憶媒体と
を備えるデコーダ。
【国際調査報告】