本発明は、パレットモードを用いる符号化を改善し、特に信号伝達コストを大幅に低減するために考案された。
本発明は、画素ブロックを符号化する際に使用されるパレットを予測することによって、パレットモードの符号化を向上させる。これにより、エンコーダからデコーダに伝送されるパレットに関する情報が減り、信号伝達コストが大幅に低減される。
本発明のある態様によれば、パレット符号化モードを用いて、画像に含まれる画素ブロックを符号化又は復号する処理を実行する方法であって、前記パレット符号化モードは、エントリインデックスと画素値とが関連付けられたエントリを複数含むパレットを用いるモードであり、前記方法は、現在の画素ブロックのためのパレット予測子として2つ以上のパレットからエントリを選択して、当該現在のパレットを予測する予測ステップを含み、前記2つ以上のパレットは、前記現在の画素ブロックの直前の画素ブロックである第1の画素ブロックの処理で使用された第1のパレットと、前記第1の画素ブロックの直前の画素ブロックである第2の画素ブロックの処理で使用された第2のパレットとを含み、前記予測ステップにおいて、前記第1のパレットのエントリと、前記第2のパレットのエントリの内、前記第1のパレットのエントリとして使用されなかったエントリとを、前記現在の画素ブロックのための前記パレット予測子として選択する。
本発明の第1の態様によると、パレット符号化モードを用いて画像の現在の画素ブロックを処理する方法が提供され、パレット符号化モードが、1セットのエントリを備え、各エントリインデックスを対応する画素値と関連付ける現在のパレットを用い、該方法が、2つ以上のパレットのエントリから現在のパレットを予測するステップを含み、2つ以上のパレットが画素ブロックを処理するために以前に使用されたパレットであり、現在のパレットの予測が、2つ以上のパレットのうちあるパレットからエントリを選択する工程を含み、エントリの前記選択がフラグのビットマップに基づき、各フラグが、あるパレット内の対応エントリが別のパレット内のエントリを生成するエントリとして選択されるか否かを定義し、前記選択されたエントリが、別のパレットを生成するエントリの未選択を定義するビットマップのフラグに対応するあるパレットのエントリを含む。このように、別のパレットを予測するとき、破棄されている前記あるパレットのエントリを検索して、現在のパレットまたはそのパレット予測子を強化することができる。
一つの実施形態では、前記他のパレットは2つまたはそれ以上のパレットのうちの別のパレットである。
一つの実施形態では、前記別のパレットは、画像内の現在の画素ブロックの直前の画素ブロックを処理するために使用されたパレットである。
一つの実施形態では、前記他のパレットは、画像内の現在の画素ブロックの直前の画素ブロックの直前の上記画像内の画素ブロックを処理するために使用されたパレットである。
一つの実施形態では、フラグのビットマップは、ビットマップの所定位置に少なくとも1つの要素を含み、ビットマップが、別のパレットを生成するあるパレットのエントリの選択を定義する少なくとも1つの追加フラグを所定位置の後に含むか否かを信号伝達する。
一つの実施形態では、現在のパレットは、2つ以上のパレットから構築されるパレット予測子から生成される。
一つの実施形態では、パレット予測子を構築する工程は、画像内の現在の画素ブロックの直前の画素ブロックを処理するために最後に使用されたパレットからエントリをすべて選択する工程と、画像内の別の画素ブロックを処理するために使用される別のパレットから少なくとも1つのエントリを選択する工程と、を有する。この構成により、従来のパレット予測子(普通は最後に使用したパレット)を、特に上述したように選択される、関連性の高い追加エントリで補足することができる。
一つの実施形態では、現在のパレットが、フラグのビットマップを用いてパレット予測子から生成され、その各フラグが、パレット予測子内の対応エントリが現在のパレット内のエントリを生成するエントリとして選択されるか否かを定義する。
一つの実施形態では、構築中のパレット予測子に既に類似するエントリが存在しない場合、2つ以上のパレットのエントリが構築中のパレット予測子に追加される。
本発明の第2の態様によると、デジタル画像のシーケンスをビットストリームに符号化する方法が提供され、画像の少なくとも1つのブロックが、第1の態様による現在の画素ブロックを処理する方法を含むパレット符号化モードを用いて符号化される。
本発明の第3の態様によると、デジタル画像の符号化シーケンスを有するビットストリームを復号する方法が提供され、画像の少なくとも1つのブロックが、第1の態様による現在の画素ブロックの処理方法を含むパレット符号化モードを用いて符号化されている。
本発明の第4の態様によると、パレット符号化モードを用いて画像の現在の画素ブロックを処理する装置が提供され、パレット符号化モードが、1セットのエントリを備え、各エントリインデックスを対応する画素値と関連付ける現在のパレットを用い、該装置が、2つ以上のパレットのエントリから現在のパレットを予測する予測モジュールを備え、2つ以上のパレットが画素ブロックを処理するために以前に使用されたパレットであり、現在のパレットの予測が、2つ以上のパレットのうちあるパレットからエントリを選択する工程を備え、エントリの前記選択がフラグのビットマップに基づき、各フラグが、あるパレット内の対応エントリが別のパレット内のエントリを生成するエントリとして選択されるか否かを定義し、選択されたエントリが、別のパレットを生成するエントリの未選択を定義するビットマップのフラグに対応するあるパレットのエントリを含む。
本発明の第5の態様によると、パレット符号化モードを用いて画像の現在の画素ブロックを処理する装置が提供され、パレット符号化モードが、1セットのエントリを備え、各エントリインデックスを対応する画素値と関連付ける現在のパレットを用い、該装置が、上記第1の態様の処理方法を実行する。
本発明の第6の態様によると、デジタル画像のシーケンスをビットストリームに符号化する装置が提供され、該装置が、第2の態様による方法を実行する手段を有する。
本発明の第7の態様によると、デジタル画像のシーケンスを有するビットストリームを復号する装置が提供され、該装置が、第3の態様による方法を実行する手段を有する。
本発明の第8の態様によると、プログラムを記憶する非一時的コンピュータ可読媒体が提供され、1セットのエントリを備え、各エントリインデックスを対応する画素値と関連付ける現在のパレットを用いるパレット符号化モードを用いて画像の現在の画素ブロックを処理する装置内のマイクロプロセッサまたはコンピュータシステムによって実行されると、装置に、2つ以上のパレットのエントリから現在のパレットを予測するステップを実行させる。2つ以上のパレットは画素ブロックを処理するために以前に使用されたパレットであり、現在のパレットの予測が、2つ以上のパレットのうちあるパレットからエントリを選択する工程を備え、エントリの前記選択がフラグのビットマップに基づき、各フラグが、あるパレット内の対応エントリが別のパレット内のエントリを生成するエントリとして選択されるか否かを定義し、選択されたエントリが、別のパレットを生成するエントリの未選択を定義するビットマップのフラグに対応するあるパレットのエントリを含む。
第9の態様によると、コンピュータによる実行時、第1、第2、第3の態様のいずれかの方法をコンピュータに実行させる命令を有するコンピュータプログラムが提供される。
本発明のさらなる態様によると、パレット符号化モードを用いて画像の現在の画素ブロックを処理する方法が提供され、該パレット符号化モードは、1セットのエントリを備え、各エントリインデックスを対応する画素値と関連付ける現在のパレットを用いる。
該方法は、2つ以上のパレットのエントリから現在のパレットを予測するステップを備え、該2つ以上のパレットは画素ブロックを処理するために以前に使用されたパレットである。
したがって、上述したように、現在のパレットに関する、より少ない情報をデコーダに伝送することによってビットストリームにおける信号伝達を低減する。本明細書で後述するように、パレット予測子は2つ以上のパレットから形成され、現在のパレットのすべてまたは一部を、パレット予測子を用いて予測することができるであろう。よって、本発明は、パレットを生成する単独のパレット予測子がごく少数の要素を有することが分かっているときに不良パレットを有することを防止する。これはこのようなパレット予測子があったときに起こるであろう。
一つの変形例では、パレット符号化モードは、現在のパレットを用いて、現在の画素ブロックを予測するインデックスの予測ブロックを構築し、該方法は、パレット予測子を用いて現在のパレットを予測するステップを有する。
したがって、本発明の他複数の態様によると、パレット符号化モードを用いて画像の現在の画素ブロックを処理する装置、すなわち、場合に応じてエンコーダまたはデコーダが提供され、該パレット符号化モードが、1セットのエントリを備え、各エントリインデックスを対応する画素値と関連付ける現在のパレットを用いる。
該装置は、2つ以上のパレットのエントリから現在のパレットを予測するよう構成された予測モジュールを備え、該2つ以上のパレットは画素ブロックを処理するために以前に使用されたパレットである。
一つの変形例では、パレット符号化モードは、現在のパレットを用いて、現在の画素ブロックを予測するインデックスの予測ブロックを構築し、予測モジュールは、パレット予測子を用いて現在のパレットを予測するように構成される。
本発明の実施形態の複数の選択的なの特徴は添付の請求項で定義する。これらの特徴のいくつかは方法を参照して後述するが、本発明の実施形態による装置専用のシステムの特徴に置き換えることができる。
本発明の幾つかの実施形態では、現在のパレットの予測は、2つ以上のパレットのうちのあるパレットからエントリを選択する工程を備え、エントリの前記選択がフラグのビットマップに基づき、各フラグが、あるパレット内の対応エントリが別のパレットを生成するエントリとして選択されるか否かを定義する。これは、フラグのビットマップにより、幾つかのパレットに関してどの要素/エントリが既に再利用されているか、どの要素/エントリが破棄されているかを知ることができるからである。この情報のおかげで、パレット予測子または現在のパレットを、現在処理中の画素ブロックに偶然関連する場合のある破棄された要素で補強することができる。
特に、選択エントリが、別のパレットを生成するためのエントリの未選択を定義するビットマップのフラグに対応するあるパレットのエントリを含む場合である。このようなフラグは、エントリが以前に破棄されていることを意味する。
幾つかの特徴では、前記他のパレットは2つまたはそれ以上のパレットのうちの他のパレットである。つまり、2つのパレットが一方の他方に基づく予測に起因して密接に関連し合う場合、2つのパレットを使用して現在のパレットを予測する。この構成は、たとえば最後に使用したパレットを用いて新たなパレットを予測する際に起こりうる。
よって、他のパレットを予測するとき、破棄されていたあるパレットのエントリを検索して、現在のパレットまたはそのパレット予測子を強化することができる。
特に、他のパレットは、(符号化/復号順により)画像内の現在の画素ブロックに直接(すなわち直に)先行する画素ブロックを処理するために最後に使用されたパレットとしても良い。また、あるパレットと他のパレットは、(同じ符号化/復号順により)画像内の現在の画素ブロックの直前の最後の2つの画素ブロックを処理するために使用された2つのパレットとしても良い。特に、あるパレットは、画像内の現在の画素ブロックの直前の画素ブロックの直前の画像内の画素ブロックを処理するために使用されたパレットとしても良い。これらの構成は、連続的で近接する画素ブロック間の冗長性を利用して、効率的な符号化を行う。
他の複数の特徴によると、フラグのビットマップは、ビットマップの所定位置に他のパレットを生成するあるパレットのエントリの選択を定義する少なくとも1つの追加フラグを所定位置の後に含むか否かを信号伝達するための少なくとも1つの要素を含む。これにより、ビットマップのサイズが低減されて、信号伝達コストも低減される。これは、パレットの構築方法によっては、あるパレットの最後のエントリが古く、無効な要素になりがちだからである。したがって、ビットマップの最後のフラグはすべて0に設定されて、あるパレットからの対応エントリの未選択を定義する可能性が高い。
上述の幾つかの実施形態では、現在のパレットが、2つ以上のパレットから構築されるパレット予測子から生成される。
幾つかの具体的な実施形態では、パレット予測子を構築する工程が、画像内の現在の画素ブロックの直前の画素ブロックを処理するために最後に使用されたパレットから全エントリを選択する工程と、画像内の別の画素ブロックを処理するために使用された別のパレットから少なくとも1つのエントリを選択する工程と、を有する。この構成により、従来のパレット予測子(普通は最後に使用したパレット)を、特に上述したように選択される、関連性の高い追加エントリで補足することができる。
複数の他の具体的な実施形態では、現在のパレットが、フラグのビットマップを用いてパレット予測子から生成され、その各フラグが、パレット予測子内の対応エントリが現在のパレット内のエントリを生成するエントリとして選択されるか否かを定義する。
幾つかの実施形態では、構築中のパレット予測子に既に類似するエントリが存在しない場合、2つ以上のパレットのエントリが構築中のパレット予測子に追加される。これは冗長さを防ぐためである。
幾つかの実施形態では、画像の複数の画素ブロックが、所定の走査順に応じて処理され、現在の画素ブロックに関するパレット予測子が、パレット符号化モードに従い以前に処理された画素ブロックを予測するために使用された1セットのパレットから選択される。これは、過去のパレットに基づくので、現在のパレットのインター予測である。この構造は、大量の情報を有する過去のパレットが、現在の画素ブロックを処理する際に、両側(エンコーダとデコーダ)で利用可能であるため、信号伝達コストを大幅に低減する可能性がある。よって、効率的なパレット予測を実行することができる。
複数の具体的な実施形態では、現在の画素ブロックに対するパレット予測子は、パレット符号化モードに従い処理された最後の画素ブロックに使用されたパレットである。言い換えると、パレット予測子として選択される、最後に使用された(たとえば復号された)パレットである。これにより、連続的に処理された画素ブロックは空間的に近い場合が多いので、それらの画素ブロック間の高い画素冗長性を利用している。また、最後のパレットのみ記憶すればよいので、過去に使用したパレットを記憶するメモリのコストも低減される。加えて、過去に使用されたどのパレットが現在の画素ブロックに対するパレット予測子として使用されるかを指定する必要がないため、符号化ビットストリーム内のビットを節減することができる。
複数の他の具体的な実施形態では、現在の画素ブロックのパレット予測子が、パレット符号化モードに従い以前に処理され、現在の画素ブロックに隣接する複数の画素ブロックに使用された、1セットのパレットから選択される。実際には、これは通常、現在の画素ブロックの上または左の画素ブロックである。これも隣接する画素ブロック間の高画素冗長性を利用している。
さらに複数の他の具体的な実施形態では、以前に処理された画素ブロックに対して使用されたパレットのセットは、現在の画素ブロックがスライスや個々のタイルなどの画素ブロックから成る新たな符号化エンティティを開始する、あるいはそれぞれが画素ブロックから成る新たな符号化エンティティのラインを開始する場合、リセットされる。一つの変形例では、新たな画像またはフレーム毎にリセットが発生しても良い。これにより、符号化エンティティまたは符号化エンティティのライン(たとえば、HEVCの符号化ツリーブロック)を並行処理できるため、画像処理(符号化または復号)を加速することができる。さらに、新たな符号化エンティティのライン毎のリセットは、符号化エンティティ毎のリセットよりも効率的な画素ブロックの符号化であることが証明されている。
HEVC規格に記載される個々のタイルは、少なくとも1つのスライスを備え、他のタイルから空間的に独立している。
一つの具体的な特徴によると、パレットのセットが空パレットにリセットされる。
一つの変形例では、リセットされたパレットのセットはバイデフォルトパレットを有する。よって、この構成では、リセットの場合でも、すなわち、新たな符号化エンティティが処理されるときでも、パレット予測を提供することができる。このため、新たな符号化エンティティにおける最初の符号化ユニットの信号伝達コストをさらに低減することができる。
この変形例では、バイデフォルトパレットは、色空間全体に均等に分布される画素値に対応する1セットの所定のエントリを有していても良い。たとえば、YUV色空間で表される画素に対して(RGB色空間にも同様に当てはまる)、画素値はY成分全体に均等に分布し、一方、各色成分を符号化するのに使用されるビット深度を(すなわち、UおよびVは、色空間における対応成分の中央値を取る)、たとえば1<<(bitdepth−1)または(MAX+1)/2とし、UおよびV成分の値は可能な最大値MAXの半分に固定すればよい。
本発明の複数の他の実施形態では、参照パレット予測子は、画像を形成する画素ブロックの各符号化エンティティと関連付けられ、現在の画素ブロックに対するパレット予測子が、現在の画素ブロックを含む符号化エンティティと関連付けられている参照パレット予測子である。本発明のこれらの実施形態により、符号化エンティティ(たとえばCTB)レベルで超効率的なパレット予測子を定義することができる。一例として、単独の参照パレット予測子は、上記のリセットと同じ精神で単独の符号化エンティティのラインに対して定義することができる。このため、参照パレット予測子をデコーダに信号伝達するコストが低減される。
複数の具体的な実施形態では、符号化エンティティと関連付けられている参照パレット予測子が、符号化エンティティを構成する各画素ブロックのパレット予測子として使用される。このため、限定された量の情報、すなわち、参照パレット予測子が符号化エンティティ全体に必要とされる。これは、従来のパレットモードと比較して信号伝達コストを大幅に低減するためである。
参照パレット予測子が、画像を符号化するビットストリームに挿入されることが好ましい。このため、デコーダは、符号化エンティティ内の各画素ブロックに対してパレット予測を効率的に実行するこれらの参照パレット予測子を、つまり、こうした予測子を決定する複雑な機構を必要とせずに、有することができる。
エンコーダに関する複数の具体的な実施形態では、該方法は、符号化エンティティに対する参照パレット予測子として、符号化エンティティの全画素ブロックを予測するのに使用されるパレットから速度歪み基準を最小化するパレットを選択する工程をさらに有することができる。次に、エンコーダは、ビットストリーム内の選択された参照パレット予測子をデコーダに信号伝達すべきである。これにより、符号化エンティティの全パレットに対して最適なパレットが選択される。
エンコーダに関する一つの変形例では、該方法は、符号化エンティティに関する参照パレット予測子として、符号化エンティティの最大画素ブロックを予測するのに使用されるパレットを選択する工程をさらに有することができる。次に、エンコーダは、ビットストリーム内の選択された参照パレット予測子をデコーダに信号伝達すべきである。この参照パレット予測子の選択の実行は非常に簡易であり、複雑ではない。
本発明のさらなる複数の他の実施形態では、現在の画素ブロックに対するするパレット予測子は、現在の画素ブロックに隣接する画素値に対応するエントリを含む。これは、空間的に近接する画素間の高画素冗長性を利用するためである。
複数の具体的な実施形態では、現在の画素ブロックに隣接する画素は、現在の画素ブロックの上側および左側に隣接する画素から選択される。これにより、ブロック毎のHEVC符号化の因果効果を前提とし、エンコーダとデコーダで常に利用可能な画素への依存を維持しつつ、上記の特定の利点がさらに向上する。実際には、従来の走査順では、現在の画素ブロックの上側と左側に隣接するブロックは既に再構成されている。
特定の特徴によると、現在の画素ブロックに隣接する画素は、左上、右上、左下などの現在の画素ブロックに対して隣接する画素を含む。当然ながら、これらの3つの特定の画素は、選択された近接画素を形成するであろう。これらの画素は、従来のイントラ予測モードに使用される画素である。それらは、少ない情報で現在の画素ブロックの画素に関する情報を提供する。
複数の他の具体的な実施形態では、所定数の画素が、パレット予測子のエントリとして、現在の画素ブロックと隣接する所定セットの画素から選択され、選択される画素は、所定セットの画素内の画素間の最大空間距離を有する。これにより多様性が生まれ、二重画素を防止する。
さらに複数の他の具体的な実施形態では、画素クラスは各隣接画素に関連付けられ、隣接画素は、現在の画素ブロックに隣接する所定セットの画素内の対応クラスの発生数に応じて順序付けられ、パレット予測子の下位エントリインデックスを、より頻出する画素クラスを有する隣接画素に与える。これにより、適宜パレット予測子を符号化する際のコストが低減される。なお、ある画素に関連付けられるクラスは、ある画素値の周囲の画素値、たとえばあるマージンによって定義することができる。
本発明のさらに複数の他の実施形態では、現在のパレットが順序付けられたエントリを有し、パレット予測子を用いて現在のパレットを予測する工程が、同じ現在のパレットの先行エントリから現在のパレットのエントリを予測する工程を有する。言い換えると、パレットのあるエントリを処理する際、パレット予測子は、色パレットのあるエントリに先行するエントリから成る(を含む)。これは、色パレットのイントラ予測に類似する。
複数の具体的な実施形態では、現在のパレットのあるエントリは、同じ現在のパレット内のあるエントリの直前エントリから予測される。これにより、現在のエントリを予測するために使用される先行エントリに関する情報を(デコーダに)送信する必要がないため、ビットストリーム内の信号伝達(ひいては符号化コスト)が低減される。
同様に、現在のパレットの全エントリが、最初のエントリを除き、同じ現在のパレット内の直前のエントリから予測することができる。これによっても、ビットストリーム内の信号伝達が低減される。これは、全エントリが予測されるので、どのエントリは予測され、どのエントリが予測されないかを特定する必要がないためである。
パレット予測子を取得する上記実施形態の全部または一部を組み合わせることができる。このような組み合わせを考慮に入れて、現在のパレットを予測するのに使用されるパレット予測子は、したがって次のうち2つ以上を組み合わせる。
以前に処理された画素ブロックを予測するのに使用されたパレットと、
現在の画素ブロックを含む符号化エンティティに関連付けられる参照パレット予測子と、
現在の画素ブロックに隣接する画素値に対応するエントリと、
現在のパレット内で予測される現在のエントリに先行する現在のパレットの少なくとも1つのエントリ。
次に、パレット予測子からの現在のパレットの予測に目を向けると、幾つかの実施例が考えられる。
本発明の複数の実施形態では、パレット予測子を用いて現在のパレットを予測する工程が、フラグのビットマップを取得する工程を有し、各フラグは、パレット予測子内の対応エントリが現在のパレット内のエントリとして選択されるか否かを定義する。この構成は、パレット予測子からの実際の予測を定義する(メモリと符号化)コストが低い。コストはビットマップに限定される。
複数の具体的な実施形態では、フラグのビットマップは、パレット予測子内のエントリ数と同数のビットを有し、ビットマップ内の各ビットの位置が、パレット予測子内に対応位置を有するエントリが現在のパレットのエントリとして選択されるか否かを定義する。この構成により、符号化効率を改善する。ビットマップのサイズをさらに低減することのできる一つの変形例は、現在のパレットのエントリとして選択される最後のエントリでビットマップを停止することが考えられる。上述したように、パレット予測子内のエントリは発生順に順序付けられているために、これは特に有益である。幾つかの実施形態では、この結果、パレット予測子の最後のエントリは、現在のパレットでは統計上あまり使用されない。
複数の他の具体的な実施形態では、該方法は、パレット予測子から選択されるエントリを有する現在のパレットの最後に追加エントリを追加する工程をさらに有していても良い。これらの追加エントリは、(復号ループを用いるデコーダおよびエンコーダの両方で)復号される追加画素に対するエントリと、(従来のパレット符号化モードのように)たとえばエンコーダによって構築され、デコーダに(ビットストリーム内で)送信される所定のパレットからのエントリとすることができる。これにより、現在のパレットの符号化効率が高まる。
本発明の複数の他の実施形態では、パレット予測子を用いて現在のパレットを予測する工程が、現在のパレットの少なくとも1つの対応エントリとパレット予測子のエントリとの差に相当する少なくとも1つ(おそらくは2つ以上)のエントリ残差を取得する工程を有する。つまり、パレット予測からの残差をデコーダに送信しなければならない。この構成により、(予測子から現在のパレットへのエントリのコピーに基づき)上述の実施形態よりも精密なパレットを取得することができる。
複数の具体的な実施形態では、現在のパレットとパレット予測子とは各自の順序付けられたエントリを有し、各エントリ残差は、現在のパレットのエントリと、同一のエントリインデックスを有するパレット予測子のエントリとの間の差に相当する。これにより、現在のエントリを予測するために予測子のどのエントリが使用されるかに関する情報を(デコーダに)送信する必要がないため、ビットストリーム内の信号伝達(ひいては符号化コスト)が低減される。
同様に、残差は、パレット予測子内の同一のエントリインデックスを有する対応エントリを有する現在のパレットの全エントリに対して取得することができる。このため、さらにどのエントリが予測を必要とするか、およびどのエントリが予測を必要としないかを特定する必要がないため、ビットストリームにおける信号伝達が低減される。
なお、エントリのコピーまたは残差に基づく予測の両方を、上述の方法のいずれかを用いて取得されるパレット予測子と共に利用することができる。現在のパレットがイントラ予測される場合を例外とする。この場合は残差アプローチのみが使用できる(さもなければ2つのエントリがパレット内で同じになる)
幾つかの実施形態では、現在のパレットのエントリの画素値が色成分を有し、色成分のサブパートのみがパレット予測子を用いて予測される。実質上、3つの色成分のうち1つまたは2つの色成分を予測されるであろう。これにより、ビットストリームにおける処理および信号伝達が低減される。
本発明の他の一つの態様は、パレット符号化モードを用いて画像の現在の画素ブロックを処理する装置に関し、パレット符号化モードが、1セットのエントリを有し、各エントリインデックスを対応する画素値と関連付ける現在のパレットを用い、該装置が、上記で定義した処理方法のどの実施形態も実行するように構成される。
本発明の他の態様は、プログラムを記憶する非一時的コンピュータ可読媒体に関し、このプログラムが、1セットのエントリを備え、各エントリインデックスを対応する画素値と関連付ける現在のパレットを用いるパレット符号化モードを用いて画像の現在の画素ブロックを処理する装置のマイクロプロセッサまたはコンピュータシステムによって実行されると、装置に、画素ブロックを処理するために以前に使用された2つ以上のパレットのエントリから現在のパレットを予測するステップを実行させる。
前記非一時的コンピュータ可読媒体は、方法および装置に関して上述または後述する特徴および利点、特にパレット予測モードの符号化効率を向上させる特徴および利点に類似する特徴および利点を有することができる。
本発明の一つの他の態様は、パレット符号化モードを用いて画像の現在の画素ブロックを処理する方法に関し、パレット符号化モードは、現在のパレットを用いてインデックスの予測ブロックを構築して現在の画素ブロックを予測する。現在のパレットは、1セットの各エントリインデックスを対応する画素値と関連付けるエントリを有する。これらは、実質的に添付の図13、14、15、17、19、21、または22を参照して本明細書で説明され、それらの図面に描かれている。
本発明のさらなる態様によると、パレットモードにより画像の現在の画素ブロックを符号化および復号する方法が提供され、パレットモードは、現在のブロックの画素の少なくとも1つの成分を表す1セットの値を有する色パレットを用い、該方法は、色パレット予測子を取得する工程と、色パレット予測子を用いて現在のブロックの色パレットを予測する工程とを有する。
前記画像の複数のブロックは所定の走査順と色パレット予測子とに従い順序付けられ、色パレット予測子が、画像のある因果領域におけるパレットモードに応じて符号化される最後のブロックの色パレットから決定されることが好ましい。
一つの実施形態では、現在の色パレットの値が、色パレット予測子に含まれる値から予測される。色パレットの値は順序付けられ、現在の色パレットの値は、前記値が色パレット予測子内で同じ次数を有する値から予測されるか否かを示すフラグに関連付けられるであろう。一つの実施形態では、ある因果領域が、現在の画素ブロックを有する符号化エンティティの既に再構成された部分である。
一つの実施形態では、複数の色パレットの値は順序付けられ、現在のパレットの値は、前記値が色パレット予測子内で同じ次数を有する値から予測されるか否かを示すフラグに関連付けられる。
複数の実施形態では、色パレット予測子は、画像の各符号化エンティティに関連付けられる。色パレット予測子は、現在のブロックに隣接する画素から取得することができるであろう。
本発明の一つの更なる態様では、パレットモードにより画像の現在の画素ブロックを符号化または復号する方法が提供され、前記パレットモードは、現在のブロックの画素の少なくとも1つの成分を表す1セットの値を有する色パレットを用い、該方法は、色パレット予測子を取得する工程と、色パレット予測子を用いて現在のブロックの色パレットを予測する工程とを備え、色パレット予測子を用いて現在のブロックの色パレットを予測する工程は、フラグのビットマップを取得する工程を備え、各フラグが、色パレット予測子内の対応エントリが現ブロックの色パレットのエントリとして選択されるか否かを定義する。
フラグのビットマップは、色パレット予測子内のエントリ数と同数のビットを有し、ビットマップ内の各ビットの位置が、色パレット予測子内に対応位置を有するエントリが現在のブロックの色パレットのエントリとして選択されるか否かを定義する。
一つの実施形態では、該方法は、色パレット予測子から選択されるエントリを有する現在のブロックの色パレットの最後に追加エントリを追加する工程をさらに有する。
本発明のさらに一つの他の態様によると、パレットモードにより画像の現在の画素ブロックを符号化または復号する方法が提供され、パレットモードは、現在のブロックの画素の少なくとも1つの成分を表す1セットの値を有する色パレットを用い、該方法は、色パレット予測子を取得する工程と、色パレット予測子を用いて現在のブロックの色パレットを予測する工程とを有し、画像の画素ブロックが走査順に従い処理され、現在の画素ブロックのパレット予測子が、パレット符号化モードにより以前に処理された画素ブロックを予測するのに使用された1セットのパレットから選択され、以前に処理された画素ブロックのために使用された前記パレットのセットが、現在の画素ブロックが、各々が画素ブロックを有する新たな符号化エンティティのラインが開始される際にリセットされる。好ましくは、パレットのセットはデフォルトパレットにリセットされる。
本発明によると、パレット符号化モードを用いて画像の現在の画素ブロックを処理する方法が提供され、パレット符号化モードが、現在のパレットを用いてインデックスの予測ブロックを構築して現在の画素ブロックを予測し、現在のパレットが、各エントリインデックスを対応する画素値と関連付ける1セットのエントリを有し、該方法が、パレット予測子を用いて現在のパレットを予測するステップを有する。
一つの実施形態では、一つの画像の複数の画素ブロックは所定の走査順に応じて処理され、現在の画素ブロックに対するパレット予測子が、パレット符号化モードに従い以前に処理された画素ブロックを予測するために使用された1セットのパレットから選択される。好ましくは、現在の画素ブロックに関するパレット予測子は、パレット符号化モードを用いて処理された最後の画素ブロックに使用されたパレットである。現在の画素ブロックのパレット予測子は、パレット符号化モードに従い以前に処理され、現在の画素ブロックに隣接する画素ブロックに対して使用された、1セットのパレットから選択することができる。
以前に処理された画素ブロックに対して使用されたパレットのセットは、現在の画素ブロックが複数の画素ブロックから成る新たな符号化エンティティを開始する、あるいはそれぞれが複数の画素ブロックから成る新たな符号化エンティティのラインを開始する場合、好ましくはリセットされる。パレットのセットは、ヌルセットまたはバイデフォルトパレットにリセットすることができる。バイデフォルトパレットは、色空間全体に均等に分布される画素値に対応する1セットの所定のエントリを有する。
一つの実施形態では、参照パレット予測子は、画像を形成する画素ブロックの各符号化エンティティと関連付けられ、現在の画素ブロックに対するパレット予測子が、現在の画素ブロックを含む符号化エンティティと関連付けられている参照パレット予測子である。符号化エンティティと関連付けられている参照パレット予測子は、符号化エンティティを構成する各画素ブロックに対するパレット予測子として使用される。好ましくは、参照パレット予測子が、画像を符号化するビットストリームに挿入される。該方法は、符号化エンティティに対する参照パレット予測子として、符号化エンティティの最大画素ブロックを予測するのに使用されるパレットを選択する工程をさらに有していても良い。一つの実施形態では、該方法は、符号化エンティティに関する参照パレット予測子として、符号化エンティティのすべての画素ブロックを予測するのに使用されるパレットから速度歪み基準を最小化するパレットを選択する工程をさらに有していても良い。
一つの実施形態では、現在の画素ブロックに対するパレット予測子は、現在の画素ブロックに隣接する複数の画素値に対応する複数のエントリを含む。現在の画素ブロックに隣接する画素は、現在の画素ブロックの上側および左側に隣接する画素から選択することができる。現在の画素ブロックに隣接する画素は、隣接する現在の画素ブロックに対して隣接左上、右下、左下などの画素を含むことができる。一つの実施形態では、一つの画素クラスは各隣接画素と関連付けられ、複数の隣接画素は現在の画素ブロックに隣接する所定のセットの画素内の対応クラスの発生数に応じて順序付けられ、パレット予測子の下位エントリインデックスを、より頻出する画素クラスを有する隣接画素に与える。好ましくは、所定数の画素が、パレット予測子のエントリとして、現在の画素ブロックに隣接する所定のセットの画素から選択され、選択された画素は、所定のセットの画素内の画素間で最大の空間距離を有する画素である。
一つの実施形態では、現在のパレットが順序付けられた複数のエントリを有し、パレット予測子を用いて現在のパレットを予測する工程は、同じ現在のパレットの先行するエントリから現在のパレットのエントリを予測する工程を有する。現在のパレットのあるエントリは、同じ現在のパレット内のあるエントリの直前のエントリから予測することができる。現在のパレットの全エントリが、最初のエントリを除き、同じ現在のパレット内の直前のエントリから予測することができる。
一つの実施形態では、現在のパレットを予測するのに使用されるパレット予測子は、次のうち2つ以上を組み合わせる。以前に処理された画素ブロックを予測するのに使用されたパレット、現在の画素ブロックを含む符号化エンティティに関連付けられた参照パレット予測子、現在の画素ブロックに隣接する画素値に対応するエントリ、現在のパレットにおいて予測されるべき現在のエントリに先行する現在のパレットの少なくとも1つのエントリ。
一つの実施形態では、パレット予測子を用いて現在のパレットを予測する工程は、パレット予測子の対応エントリが現在のパレットのエントリとして選択されるか否かを定義するフラグのビットマップを取得する工程を有する。このフラグのビットマップは、パレット予測子内のエントリ数と同数のビットを有することができ、ビットマップ内の各ビットの位置が、パレット予測子内に対応位置を有するエントリが現在のパレットのエントリとして選択されるか否かを定義する。さらなる一つの実施形態では、該方法は、パレット予測子から選択されるエントリを有する現在のパレットの最後に追加エントリを追加する工程をさらに有することができる。
一つの実施形態では、パレット予測子を用いて現在のパレットを予測する工程は、現在のパレットの少なくとも1つの対応エントリとパレット予測子のエントリとの差に相当する少なくとも1つのエントリ残差を取得する工程を有する。現在のパレットとパレット予測子とは各自の順序付けられたエントリを有することができ、各エントリ残差は、同一のエントリインデックスを有する、現在のパレットのエントリと、パレット予測子のエントリとの間の差に相当する。残差は、パレット予測子内の同一のエントリインデックスを有する対応エントリを有する現在のパレットの全エントリに対して取得することが好ましい。
一つの実施形態では、現在のパレットのエントリの画素値が色成分を有し、色成分のサブパートのみがパレット予測子を用いて予測される。
本発明のもう一つの態様によると、パレット符号化モードを用いて画像の現在の画素ブロックを処理する装置が提供され、パレット符号化モードが、現在のパレットを用いてインデックスの予測ブロックを構築して現在の画素ブロックを予測し、現在のパレットが、各エントリインデックスを対応する画素値と関連付ける1セットのエントリを有し、該装置は、パレット予測子を用いて現在のパレットを予測するように構成される予測モジュールを有する。
本発明のさらなる一つの態様によると、パレット符号化モードを用いて画像の現在の画素ブロックを処理する装置が提供され、パレット符号化モードが、現在のパレットを用いてインデックスの予測ブロックを構築して現在の画素ブロックを予測し、現在のパレットが、各エントリインデックスを対応する画素値と関連付ける1セットのエントリを有し、該装置は、さらに提供される方法と上述の実施形態のいずれかに応じて処理方法を実行するように構成される。
本発明による方法の少なくとも一部はコンピュータで実行しても良い。したがって、本発明は、完全なハードウェア実施形態、完全なソフトウェア実施形態(ファームウェア、常駐ソフトウェア、マイクロコードなど)、あるいは、本明細書では「回路」、「モジュール」、または「システム」と概略的に称することができるソフトウェアとハードウェアの態様を組み合わせた実施形態の形状を取ることができる。さらに、本発明は、コンピュータ利用可能なプログラムコードを埋め込んだ任意の有形の表現媒体として具体化されたコンピュータプログラム製品の形状を取ることもできる。
本発明はソフトウェアで実現することができるため、プログラム可能な装置に提供するための、適切なキャリア媒体上のコンピュータ可読符号として具体化することができる。有形のキャリア媒体は、フロッピーディスク、CD−ROM、ハードディスクドライブ、磁気テープ装置、またはソリッドステートメモリなどの記憶媒体を含むであろう。一時的キャリア媒体は、電気信号、電子信号、光信号、音響信号、磁気信号、マイクロ波やRF信号などの電磁信号、といった信号を含むであろう。
図1は、HEVCエンコーダアーキテクチャを示す。ビデオエンコーダでは、元のシーケンス101は画素ブロック102に分割される。次に、符号化モードが各ブロックに割り当てられる。HEVCで通常使用される符号化モードには2つのファミリーがあり、空間予測またはINTRAモード103に基づくモードと、動き推定104および動き補償105に基づく時間予測またはINTERモードに基づくモードである。HEVC RExtとして知られる現在設計中のHEVC拡張は、画素ブロックを符号化するINTRAおよびINTER符号化モードに匹敵する追加符号化モード、すなわちパレット符号化モードを追加する。このパレット符号化モードを、特に図7〜13を参照してより詳細に以下に説明する。
INTRA符号化ユニットは、INTRA予測と呼ばれるプロセスによって、因果境界で符号化画素から通常は予測される。
INTER符号化モードの時間予測は、第1に、動き推定ステップ104で、参照領域が符号化ユニットに最も近い参照フレーム116と称される過去または将来のフレームで探すことにある。この参照領域は予測ブロックを構成する。次に、この符号化ユニットは、動き補償ステップ105で残差を算出する予測ブロックを用いて予測される。
空間予測と時間予測のいずれの場合も、残差は元の予測ブロックから符号化ユニットを減算することによって算出される。
INTRA予測では、予測方向が符号化される。時間予測では、少なくとも1つの動きベクトルが符号化される。しかし、動きベクトル符号化に関連するビットレートコストをさらに低減するため、動きベクトルは直接符号化されない。実際、動きが一様であると仮定すると、動きベクトルを、この動きベクトルと周囲の別の動きベクトルとの差として符号化することが特に有利である。たとえばH.264/AVC符号化規格では、動きベクトルは、現在のブロックの上と左に位置する3ブロック間で算出される中央ベクトルに対して符号化される。中央ベクトルと現在のブロック動きベクトル間で算出される、残差動きベクトルとも称される差のみが、ビットストリームに符号化される。これは、モジュール「Mv予測/符号化」117で処理される。各符号化ベクトルの値は動きベクトルフィールド118に記憶される。予測に使用される隣接動きベクトルは、動きベクトルフィールド118から抽出される。
次に、速度歪み性能を最適化するモードが、モジュール106で選択される。冗長性をさらに低減するため、変換、通常はDCTがモジュール107の残差ブロックに適用され、量子化がモジュール108の係数に適用される。次に、係数の量子化ブロックは、モジュール109でエントロピー符号化され、その結果がビットストリーム110に挿入される。
次いで、エンコーダが、モジュール111〜116での未来の動き推定のために符号化フレームの復号を実行する。これは、エンコーダでの復号ループである。これらのステップにより、エンコーダとデコーダに同じ参照フレームを持たせることができる。符号化フレームを再構成するには、画素ドメインに「再構成された」残差を提供するため、残差はモジュール111で逆量子化され、モジュール112で逆変換される。符号化モード(INTERまたはINTRA)によると、この残差がINTER予測子114またはINTRA予測子113に追加される。
次に、この第1の再構成が、1種以上のポストフィルタリングによってモジュール115でフィルタリングされる。これらのポストフィルタリングは復号ループに一体化される。つまり、エンコーダとデコーダで同じ参照フレームを使用するため、エンコーダとデコーダでそれらを再構成フレームに適用する必要がある。このポストフィルタリングの目的は、圧縮アーチファクトを除去することである。
HEVCデコーダの原理を図2に示す。まず、ビデオストリーム201がモジュール202でエントロピー復号される。次に、残差データがモジュール203で逆量子化され、モジュール204で逆変換されて、画素値を取得する。モードデータもエントロピー復号され、モードに応じて、INTRA型復号またはINTER型復号が実行される。INTRAモードの場合、INTRA予測方向がビットストリームから復号される。次に、予測方向を用いて参照領域205の位置を決定する。INTERモードの場合、動き情報がビットストリーム202から復号される。これは、参照フレームインデックスと動きベクトル残差とから成る。動きベクトル予測子が動きベクトル残差に追加されて動きベクトル210を取得する。次に、動きベクトルを用いて、参照フレーム206内の参照領域の位置を決定する。なお、動きベクトルフィールドデータ211は、次の復号動きベクトルの予測に使用するために、復号動きベクトルで更新される。次いで、この復号フレームの第1の再構成が、エンコーダ側で使用されたのと全く同じポストフィルタを用いてポストフィルタリング207される。デコーダの出力は復元されたビデオ209である。
図3は、HEVCにおけるブロック毎の符号化から生じる因果原理を示す。
高レベルでは、一つの画像はラスタ走査順で符号化される複数の符号化ユニットに分割される。よって、ブロック3.1を符号化する際、領域3.3の全ブロックは既にすべて符号化されており、エンコーダに適用可能であるとみなすことができる。同様に、デコーダでブロック3.1を復号する際、領域3.3の全ブロックは既に復号され、よって再構成されており、デコーダに適用可能であるとみなすことができる。領域3.3は符号化ユニット3.1の因果領域と称される。いったん符号化ユニット3.1が符号化されると、その領域は次の符号化ユニットの因果領域に属する。以降のすべての符号化ユニットと同様に次の符号化ユニットは、点で描いた領域として示される領域3.4に属し、現在の符号化ユニット3.1の符号化に使用することはできない。因果領域が再構成ブロックによって構成されることを指摘しておく価値はあるであろう。ある符号化ユニットを符号化するのに使用される情報は、この情報を復号に利用できないため、画像の元のブロックではない。復号に利用される唯一の情報は、因果領域内の画素ブロックの再構成バージョン、すなわちこれらのブロックの復号バージョンである。このため、符号化時、因果領域の予め符号化されたブロックは復号されて、これらのブロックの再構成バージョンを提供する。
ブロック3.1を符号化する際、因果領域内のブロック3.2からの情報を使用することができる。HEVCレンジ拡張の設計仕様では、ビットストリームないで伝送可能な変位ベクトル3.5が、このブロック3.2を示すことができる。
図5は、符号化ツリーブロックの符号化ユニットへの分割と、これらの符号化ユニットを連続的に処理する例示の走査順を示す。HEVC規格では、ブロック構造は符号化ツリーブロック(CTB)によって編成される。1フレームは、幾つかの非重複な正方形の符号化ツリーブロックを含む。符号化ツリーブロックのサイズは64x64〜16x16である。サイズはシーケンスレベルで決定される。符号化効率の点で、最も効率的なサイズは最大の64x64である。なお、すべての符号化ツリーブロックは画像境界を除き同一のサイズであり、列をなして配置される。境界のCTBのサイズは、残りの画素量に応じて適応される。
各符号化ツリーブロックは1つ以上の正方形符号化ユニット(CU)を含む。符号化ツリーブロックは、クワッドツリー構造に基づき幾つかの符号化ユニットに分割される。符号化ツリーブロック内の各符号化ユニットの処理(符号化または復号)順は、ラスタ走査順に基づくクワッドツリー構造に従う。図5は、符号化ユニットの処理順序の1例を示す。本図では、各符号化ユニット内の数字は、符号化ツリーブロックの対応する各符号化ユニットの処理順序を示す。
HEVCでは、幾つかの方法を使用して、様々なシンタックス要素、たとえばブロック残差、予測ブロックに関する情報(動きベクトル、INTRA予測方向など)を符号化する。HEVCは、コンテキスト適応型二値算術符号化方式(CABAC)、ゴロム−ライス符号、または固定長符号化と称される簡易二値表現などの何種類かのエントロピー符号化を使用する。大抵の場合、二値符号化プロセスが実行されて様々なシンタックス要素を表す。この二値符号化プロセスは非常に明確であり、様々なシンタックス要素に依存する。
たとえば、「coeff_abs_level_remaining」というシンタックス要素は、係数残差の絶対値またはその一部を含む。この二値符号化プロセスの概念は、第1の値に対してはゴロム−ライス符号、それより高位の値に対しては指数ゴロムを使用することである。より具体的には、ゴロム次数と称されるあるパラメータに応じて、つまり、たとえば0〜3の値などの第1の値を表すためには、ゴロム−ライス符号が使用され、次に4以上などのより高位の値を表すためには、指数ゴロム符号が使用される。ゴロム次数は、ゴロム−ライス符号と指数ゴロム符号の両方で使用されるパラメータである。
図6は、復号側の原理を示す。復号プロセスの入力データはビットストリーム601とライスゴロムパラメータまたはゴロム次数として知られる次数である。このプロセスの出力は復号シンボル612である。
プリフィックス値がステップ602で1に等しく設定されると、1ビットがステップ601でビットストリームから抽出され、可変フラグが復号値603に等しく設定される。このフラグがステップ604で0に等しい場合、プリフィックス値は605でインクリメントされ、別のビットがビットストリームから603で抽出される。フラグ値が1に等しいとき、判定モジュール606は、プリフィックス値が厳密に3より小さいか否かをチェックする。これが真であれば、N次ビットがビットストリーム601から608で抽出されて、変数「codeword」に設定される。これはゴロム−ライス表現に対応する。シンボル値612は、ステップ609に示すように((prefix<<Order)+codeword)に等しく設定される。ただし、「<<」は左シフト演算子である。
プリフィックスがステップ606で3以上である場合、次のステップは610であり、N=(prefix−3+Order)ビットがビットストリームから抽出され、可変「codeword」610に設定される。シンボル値611は、((1<<(prefix−3))+2)<<Order)+codewordに等しく設定される。これは指数ゴロム表現に対応する。
以下、この復号プロセス、および対称的に対応する符号化プロセスは Golomb_Hと称され、入力パラメータはゴロム指数に対応する。簡易にGolomb_H(Order)と記すことができる。
HEVCでは、残差などの幾つかのシンタックス要素に関しては、エントロピー符号化を符号化される信号に適応させるため、ゴロム指数が更新される。更新式は、係数が大きな値を取るときにゴロム指数を増加させることによってゴロム符号サイズを低減するように試みる。HEVC規格では、更新は以下の式によって行われる。
Order = Min cLastRiceOrder + ( cLastAbsLevel > ( 3 * ( 1
≪ cLastRiceOrder ) ) ? 1 = 0 ), 4 )
ただし、cLastRiceOrderは最後に使用されたOrderであり、cLastAbsLevelは最後に復号されたcoeff_abs_level_remainingである。なお、符号化または復号される最初のパラメータに関しては、cLastRiceOrderとcLastAbsLevelは0に等しく設定されることに注意されたい。また、この式では、パラメータOrderは4の値を超えることはできないことに留意されたい。ただし、表現(C?A:B)は、条件Cが真である場合には値Aを有し、条件Cが偽である場合に値Bを有する。
一般的にはHEVC RExtと称されるHEVCレンジ拡張が、新ビデオ符号化規格HEVC用に現在草案中である。
この拡張の目的は、ビデオシーケンスを追加の色フォーマットとビット深度、およびおそらくは可逆に符号化する追加のツールを提供することである。具体的には、この拡張は、4;2.0ビデオフォーマットに加えて、4:2:2色フォーマットと同様に4:4:4ビデオフォーマットをサポートするように設計される(図4を参照)。色画像は一般的に3つの色成分R、G、Bから成る。これらの成分は一般的に相関関係があり、画像およびビデオ圧縮において画像処理前に色成分の相関関係を失わせることがごく一般的である。色成分の相関性を失わせる最も一般的なフォーマットがYUV色フォーマットである。YUV信号は、通常3つのR、G、B入力フレームに一次変換を適用することによって、画像のRGB表現から生成される。通常、Yは輝度成分と称され、UとVは色度成分と称される。一般的には「YUV」の代わりに「YCbCr」という用語も使用される。
ある画素の各色成分を符号化するのに使用されるビット数であるビット深度に関しては、現行のHEVC規格は8および10ビットのビット深度(すなわち256〜1024の可能な色)の4:2:0色フォーマットに対処することができるが、8〜16ビット(すなわち最大65536の可能な色)の拡張ビット深度で4:2:2および4:4:4ビデオフォーマットを追加でサポートすべく、HEVC RExtが設計されつつある。これは、より動的な色成分を有する上で特に有益である。
また、HEVC RExtは、入力シーケンスの無損失符号化を提供する、すなわち、入力101と厳密に同一である復号出力209を有するように設計される。これを実現するため、従来の非可逆HEVCコーデックと比べて、多数のツールが変更または追加されている。無損失を実現する非包括的な変更または追加例を以下紹介する。
−量子化ステップ108(デコーダでは203)の除去
−通常コサイン/サイン変換107としてバイパス変換の強制的始動がエラーを導入する場合がある(デコーダでは204);
−ポストフィルタリング115(デコーダでは207)などの、量子化ノイズの補償のために調整されたたツールの除去
HEVC RExtに対して、高ビット深度に対応し、可逆符号化を含む拡張フォーマットのビデオ圧縮(4:2:2および4:4:4)を処理するアプリケーションによって要求される超高品質を考慮して、ゴロム指数の更新式はさらに修正されている。HEVC RExtに対して、更新式は以下のように変更されている。
Order=Min(cLastRiceOrder+(cLastAbsLevel≫(2+cLastRiceOrder)),7)
この式では、Orderの最大値は7である。さらに、変換ブロックのサブブロックのためのcoeff_abs_level_remainingの最初の符号化に対しては、ゴロム指数は以下と等しく設定される。
Order=Max(0,cRiceOrder−(transform_skip_flag||cu_transquant_bypass_flag?1:2))
ただし、
−変数「transform_skip_flag」は、変換(たとえばDCT107または204)が現在の符号化ユニットではスキップされる場合は1に設定され、変換が使用される場合は0に設定される。
−変数「cu_transquant_bypass_flag」は、符号化ユニットが可逆に符号化される場合は1に設定され、そうでない場合は0に設定される。
−変数「cRiceOrder」は、変換ブロックの別のサブブロックから最後に使用されたOrderに等しく設定され、そうでない場合は0に設定される。
HEVC RExt用の追加ツールが、ナチュラルシーケンスに加えて「screen content」ビデオシーケンスを効率的に符号化するために現在設計中である。「screen content」ビデオシーケンスは、テキスト、PowerPointプレゼンテイション、グラフィカルユーザインタフェース、表(たとえばスクリーンショット)などを含む、その他任意の装置のパソコンから取得されるビデオシーケンスに対応する、非常に具体的なコンテンツを有する特定のビデオシーケンスを指す。これらの特定のビデオシーケンスは、ナチュラルビデオシーケンスと全く異なる統計値を有する。ビデオ符号化では、HEVCを含む従来のビデオ符号化ツールの性能は、このような「screen content」を処理する際に失望することとなる。
「screen content」ビデオシーケンスを処理するのにHEVC RExtに現在議論されている現在のツールには、イントラブロックコピーモードとパレットモードとがある。これらのモードのプロトタイプは、ナチュラルビデオシーケンスを対象とする従来の方法と比べて優れた符号化効率を有することが証明されている。本願はパレット符号化モードに焦点を当てる。
HEVC RExtのパレットモードは予測モードである。つまり、パレット方法は、動き予測(インターの場合)またはイントラ予測によって実行される予測に類似するある符号化ユニットの符号化予測子を構築するために使用される。予測生成後、残りの符号化ユニットが変換され、量子化され、符号化される。言い換えると、図1および2を参照して上述したものと同じプロセスが適用される。
一般的には、パレットは、有限セットのN組の色を含む表によって表され、各色はある色空間内の成分によって定義される(たとえばYUV色空間に基づく図8の803を参照)。たとえば、標準的なRGBフォーマットでは、パレットはN組のP要素のリスト(ただし、RGBの場合はN=3)から成る。より正確には、各要素は、RGBフォーマットの色成分の固定トリプレットに対応する。当然ながら、これはRGBまたはYUV色フォーマットに限定されない。任意のその他の色フォーマットもパレットによって表すことができ、より少ないまたは多い数の色成分を使用することができる。つまり、Nは3と異なっていてもよい。
エンコーダ側では、RExtにおいて考慮中のパレットモードは、ある入力符号化ユニットの画素値を、関連付けられたパレットにおけるエントリを特定するレベルと称されるインデックスに変換することに帰着するであろう。変換後、結果として生じる符号化ユニットまたはブロックはレベルから成り、その後対応付けられたパレット、一般的にはは符号化ユニットを表すのに使用される色の有限数のトリプレットを有する表、と共にデコーダに伝送される。パレットは有限数の色を定義するので、インデックスブロックへの変換は通常は元の入力符号化ユニットに近似する。
エンコーダ側でパレットモードを適用するには、画素の符号化ユニットを変換する例示的方法は以下のように実行する。
−たとえば、全体の歪みを最小化することによって、符号化する画素の符号化ユニットを最もよく表すP個のトリプレットを発見する。
−次に、符号化ユニットの各画素にP個のトリプレットの中での最も近い色を関連付ける。符号化する値(またはレベル)(ひいてはインデックスのブロックの一部を成す)は関連付けられた最も近い色のエントリに対応するインデックスである。インデックスの予測ブロックは、画素毎に最も近い色を定義するエントリを特定するため、パレットのエントリと符号化ユニットの各画素とを比較することによって、このようにパレットから取得される。
各符号化ユニットに対して、パレット(すなわち、発見されたP個のトリプレット)、インデックスまたはレベルのブロック、および元の符号化ユニットと色空間内のインデックスのブロックとの間の差(これはブロック予測子である)を表す残差が、ビットストリーム110において符号化されて、デコーダに送信される。
デコーダでは、パレットモードは、反対方向に変換を実行することにに帰着するであろう。つまり、符号化ユニットの各画素と関連付けられる各復号インデックスは、符号化ユニットの各画素に対応する色を再構成するため、ビットストリームから復号されるパレット内の対応色によって置き換えられる。これは、色空間内のインデックスのブロック(すなわち、符号化ユニット予測子の)の再構成である。パレットモードは予測モードであるため、対応残差がビットストリームから復号され、その後、再構成された符号化ユニット予測子に加算されて最終的に再構成された符号化ユニットを構築する。
図7は、デコーダでのパレットモードの原理をさらに示す。ステップ702で、現在の符号化ユニットの予測モードがビットストリーム701から抽出される。現在、パレットモードは、ビットストリーム内のスキップフラグの前に位置するフラグによって特定される(他の符号化モードは図1および2を参照して上述されている)。このフラグは、単独のコンテキストを使用して符号化されるCABACである。このモードがパレットモードである場合703、パレットモードの関連したシンタックス705、すなわち、パレット、レベルのブロック、残差に関する情報がビットストリーム701から抽出され、復号される704。
次に、ステップ706の期間、2つの要素が復号データであるパレット707とレベルのブロック708とから構築される。このレベルのブロックと対応付けられたパレットから、画素ドメイン710の符号化ユニット予測子が構築される709。つまり、レベルのブロックの各レベルに対して、色(RGBまたはYUV)が各画素と関連付けられる。
次に、符号化ユニット残差がビットストリーム701から復号される711。パレットモードの現在の実施では、パレットモードに関連付けられている残差は、一般的なHEVCインター残差符号化方法、すなわちゴロム符号化を用いて符号化される。符号化ユニットの残差を取得するため、従来の逆量子化と逆変換が実行される。再構成された符号化ユニット714を形成するため、ブロック予測子710がこの符号化ユニット残差712に追加される713。
図8は、エンコーダでのパレットモードの原理を示す。現在の符号化ユニット801は、3色値(Y、U、V)または(R、G、B)の代わりに各画素のレベルを含む同じサイズのブロック802に変換される。このレベルのブロックと関連付けられるパレット803は、符号化ユニットの全体歪みの最小化に基づき構築され、各エントリでエントリインデックスまたはレベルと対応する画素色値とを関連付ける。なお、単色アプリケーションの場合、画素値は1つの成分のみを含むことができる。
図7と関連して述べたように、パレット(ならびに残差)が符号化されて、符号化ユニット毎にビットストリームに挿入される。同様に、レベルのブロック(符号化ユニット予測子に対応)が符号化され、ビットストリームに挿入され、符号化の1例を図9を参照して以下に示す。本例では、レベルのブロックが水平順に走査される。
レベルのブロック91は、802を参照して図8に示す例と全く同一である。表92および93は、レベルのブロック91を符号化するのに使用される連続的シンタックス要素について記載する。表93は、表92の隣接として読むべきである。表内のシンタックス要素は、ブロック91内の太線によって囲まれるレベル群の符号化に対応する。
レベルのブロックは、走査順に連続的画素群別に符号化される。各群は、予測方向を示す第1のシンタックス要素、反復を示す第2の要素、画素値、すなわちレベルを示す任意の第3の要素を用いて符号化される。反復は群内の画素数に対応する。
これらの2つの表は、パレットモードに関連付けられる現在のシンタックスを表す。これらのシンタックス要素は、レベルのブロック91に対して、ビットストリームにおいて関連付けられた符号化情報に相当する。これらの表では、3つの主要シンタックス要素を使用してパレットモードの動作を完全に表し、レベルのブロック91のレベルを連続的に検討する際に以下のように使用する。
「Pred mode」と称される第1のシンタックス要素により、2つの符号化モードを区別することができる。「Pred mode」フラグが「0」に等しい場合に対応する第1のモードでは、新たなレベルが現在の画素に対して使用される。レベルはビットストリームのこのフラグ後すぐに信号伝達される。「Pred mode」フラグが「1」に等しい場合に対応する第2のモードでは、「コピーアップ」モードが使用される。より具体的には、現在の画素レベルは、ラスタ走査順では同じ位置で始まる直上のラインに位置する画素レベルに対応する。「Pred mode」フラグが「1」に等しい場合、レベルの値がレベルのブロック91の直上の画素のレベルの値を参照することで分かるため、フラグ直後のレベルを信号伝達する必要がない。
「Level」と称される第2のシンタックス要素は、第1のモード「Pred mode」でのみ現在の画素に対するパレットのレベル値を示す。
「Run」と称される第3のシンタックス要素は、「Pred mode」の両モードにおいて反復値を符号化するのに使用される。レベルのブロック91が上左隅から下右隅に、列毎に左から右に上から下へ走査されることを考慮すると、Runシンタックス要素は、同一の符号化を有するブロック91の連続的画素の数を与える。
この「Run」シンタックス要素は、「pred mode」フラグによって異なる意味を有する。Pred modeが0の場合、「Run」要素は、同じレベル値を有する予測ブロックの隣接画素の数である。たとえば、Runが8の場合、現在の「レベル」が、ラスタ走査順による9個の同一の隣接サンプルに対応する、現在の画素と以下の8画素に適用される。
Pred modeが1のとき、「Run」要素は、ブロック91内のそれらの上の画素のレベル値に対応するレベル値を有する予測ブロックの隣接画素の数である。すなわち、「コピーアップ」モードが適用される。たとえば、Runが31の場合、現在の画素のレベルが、合計32画素に相当する、上のラインの画素と以下の31画素からコピーされる。
表92および93は、パレットモードを使用することによってブロック91を表す8つのステップを示す。各ステップは「Pred mode」フラグの符号化で開始され、「Pred mode」フラグが「0」のとき、「Level」シンタックス要素が後に続き、「Pred mode」フラグが「1」のとき、「Run」シンタックス要素が後に続く。「Level」シンタックス要素は常に「Run」シンタックス要素が後に続く。
現在のブロックに対して復号される予測モードがパレットモードであるとき、デコーダは最初にこのブロックに関連するシンタックスを復号し、符号化ユニット用の再構成プロセスを適用する。
図10は、パレットモードに関連するシンタックス要素の復号プロセスを示す。まず、パレットのサイズが、ビットストリーム1001から抽出され、復号される1002。パレットの正確なサイズ(Palette_size)は、ステップ1002で復号されるサイズ値に1を加算することによって取得される。実際には、サイズは、値0が最小ビット(1ビット)を取り、パレットのサイズが0と等しくなることができず、さもなければ画素値を用いてブロック予測子を構築できない単項符号を用いて符号化される。
次に、パレット値の復号に対応するプロセスが開始される。パレットのインデックスに対応する変数iは、ステップ1004で0に等しく設定され、次に、ステップ1005でテストが実行されて、iがパレットサイズ(Palette_size)に等しいか否かをチェックする。ステップ1005でパレットサイズと異なる場合、1つのパレット要素がビットストリーム1001から抽出され、ステップ1006で復号されて、対応レベル/インデックスがiに等しいものと共にパレットに追加される。次に、ステップ1007を通じて変数iがインクリメントされる。ステップ1005でiがパレットサイズと等しい場合、パレットは完全に復号されている。
次に、レベルのブロック91の復号に対応するプロセスを実行する。まず、画素カウンタに対応する変数jが0に設定され、変数syntax_iも0に設定される1008。次に、画素カウンタがブロックに含まれる画素数に対応するか否かがチェックされる。ステップ1009で回答がイエスの場合、プロセスはステップ1017で終了し、さもなければ、1つの予測モードに対応するフラグ「Pred mode」の値がビットストリーム1001から抽出され、復号される1010。
「Pred mode」の値は、すべての復号された「Pred mode」値を含むインデックスsyntax_iで表に追加される。ステップ1011でこの「Pred mode」の値が0に等しい場合、「Level」に対応するシンタックス要素がビットストリーム1001から抽出され、復号される1012。この変数「Level」は、すべての復号されたレベルを含むインデックスsyntax_iで表に追加される。画素カウンタに対応する変数jが1インクリメントされる1013。
次に、ステップ1014で「Run」シンタックス要素が復号される。ステップ1011でシンタックス要素「Pred Mode」が1に等しい場合、ステップ1014で「Run」値も復号される。このシンタックス要素「Run」は、すべての復号されたランを含むインデックスsyntax_iで表に追加される。
次に、ステップ1015で、値jがステップ1014で復号されるランの値ずつインクリメントされる。次のシンタックス要素のセットを検討するため変数syntax_iが1インクリメントされる。カウンタjがブロック内の画素数に等しい場合、レベルのブロック91を構築するシンタックスが終了する1017。パレットに関連するこのプロセスの終了時、デコーダは、パレットと、この符号化ユニットのパレットモードに関連付けられる「Pred mode」、「Level」、「Run」シンタックス要素のすべてのリストを含む表とを知っている。デコーダは、図7に示すような符号化ユニットの再構成プロセスを続行することができる。
図10に示す本実施形態のわずかな変形例では、「Pred mode」要素はレベルのブロック91の最上部の画素の第1行に対しては提供されない。これは、画素が一つ上の行でレベルを与えられていないために「コピーアップ」モードを実行できないからである。したがって、ステップ1009でjがブロック幅未満である限り、「Pred mode」要素は提供されず、ステップ1010〜1011がショートカットされることによってステップ1012を直接実行する。なお、このわずかな変形が符号化されたレベルのブロックのサイズを低減させることに注意されたい。
図10の上記実施形態またはそのわずかな変形例と組み合わせることのできる一つの実施形態では、単独のレベルのブロックの代わりに複数のレベルのブロックを生成することができる。つまり、複数のレベルが画素の全部または一部に対して利用される。たとえば、別のレベルのブロックを残りの成分のうちの少なくとも1つ(たとえばUとV)に対して構築しつつ、第1のレベルのブロックを第1の色成分(たとえばY)に対して構築しても良い。当然ながら、3つの色成分に関する3つのレベルのブロックも考えても良い。複数のレベルのブロックを有する選択と、色成分との対応は、特定のフラグを用いてビットストリームに信号伝達しても良い。一つの変形例では、これは画像の色フォーマットによって示唆されるであろう。
図10のプロセスは図7のパレットモード予測プロセスに関連して説明したが、図7では符号化ユニット予測子に追加される前に残差はステップ711および712で符号化され、よって抽出され、復号される。
図7に示すパレットモード予測プロセスの一つの変形例では、残差を提供することができない(すなわち、符号化側で符号化される)。そのため、図7でのステップ711、712、713は行われず、再構成された符号化ユニット714が符号化ユニット予測子710と同じになる。
しかし、パレットのレベルによって不適切に記載される符号化ユニットの画素がまだ存在する。つまり、パレット内に対応する関連レベルが発見されていない。これらの画素は、対応する値がレベルのブロックで設定されていないために「escape」画素と称する。
よって、レベルのブロックに対する図10のプロセス中に構築されるシンタックス要素は、これらの「escape」画素に関して元の符号化ユニットから明らかな画素値で補完することができる。明示的な画素値は信号伝達され、ビットストリームに伝送することができる。
画素の信号伝達の1例は、画素がパレット符号化される(したがってステップ1010を経る)のか、エスケープ符号化される(したがって明示的画素値を有する)のかを示す「Pred mode」要素(すなわち、ステップ1010前)の前に「escape」フラグを追加することである。「escape」フラグの後に明示的な画素値が続く(「Pred mode」、「Level」、「Run」要素はこの画素には提供されない)。
「escape」フラグに対する一つの変形例では、特定のレベル値(「escape」画素に固有であり、ステップ1012で取得される)を使用して、「escape」画素を信号伝達することができる。この場合、「Run」要素は明示的画素値とすべきである。この具体値は、構築中のパレットが最大サイズに達することによってのみ発生し、パレットサイズ毎のエスケープ値を信号伝達するコストを節減するするであろう。
どの実施形態でも、明示的画素値は、エントロピー符号化のありうる結果(コンテキスト、ビット数など)として、予測的に(たとえば、隣接画素値との差として)符号化してもしないでも良く、また、量子化してもしなくてもよい。
再度パレットを参照し、上記例では3つの値から成る各パレット要素は、一般的には3つの二値符号を用いて符号化される。二値符号の長さは各色成分のビット深度に相当する。パレットサイズは、普通は単項符号を用いて符号化される。「Pred mode」要素は1ビット(およびもしあれば「escape」フラグ)を用いて符号化される。「Level」要素は、bと等しい二値符号長の二値符号を用いて符号化され、ただし2bはパレットサイズの最小整数以上である。「Run」要素は、図6に関連して説明したようにGolomb_H(Order=3)を用いて符号化される。
図11は、レベルのブロック91と、予測子として使用しなければならない色空間内のブロック予測子とを構築する再構成プロセスを示す。このプロセスの入力データは、上記図10のプロセスを用いて取得され、「Pred mode」、「Level」、「Run」のリストを含む表である。なお、当業者であれば、下記の教示を「escape」画素の存在に依存する実施形態に適用することができる。
「Pred mode」、「Level」、「Run」要素への入力データ追加項目は、ビットストリームに信号伝達されるクワッドツリー(図5)から既知な符号化ユニット801のサイズ(レベルのブロック802/91のサイズと同じ)である。
第1のステップ1101で、画素カウンタを表す変数iは0と等しく設定され、シンタックス要素の各セットを連続的に検討するため、変数jも0に等しく設定される。ステップ1104で、インデックスjの「Pred mode」の表から抽出される要素Pred_mode[j]が0に照らしてチェックされる。
もし0と等しければ、現在の画素iに関して新たなレベルが符号化される。その結果、位置iの画素値が、レベルの表からインデックスjのレベル;Block[i]=Level[j]に等しく設定される。これがステップ1105である。ステップ1106で変数iが1インクリメントされて次の画素を検討し、ステップ1107で現在のランで既に処理された画素をカウントする専用の変数kが0に等しく設定される。
ステップ1108のインデックスj:k=Run[j]でkがランの表の「Run」要素に等しいか否かを判定するチェックが実行される。等しくない場合、位置iの画素のレベルは、位置i−1の画素のレベル値と等しく設定される。Block[i]=Block[i−1]。これがステップ1109である。次に、ステップ1110および1111で変数iと変数kがそれぞれ1インクリメントされる。ステップ1108でk=Run[j]である場合、左のレベル値の伝播が終了し、ステップ1120が実行される(後述する)。
ステップ1104でPred_mode[j]が0と異なる場合、「コピーアップ」モードは、ステップ1112で0に等しく設定された変数kから始まる。次に、ステップ1113で、(k−1)がインデックスj:k=Run[j]+1でランの表の「Run」要素と等しいか否かをチェックする。等しくない場合、位置iの画素のレベル値は、上のラインの位置iの画素のレベル値と等しく設定される。Block[i]=Block[i−width]。ただし「width」は、符号化ユニットの入力サイズから推定されるレベルのブロック(符号化ユニットと同じ)の幅である。これがステップ1114である。次に、ステップ1115および1116で変数iと変数kがそれぞれ1インクリメントされる。ステップ1113でk=Run[j]+1の場合、予測モード「コピーアップ」が終了して、プロセスはステップ1120に進む。
ステップ1120で、変数iがブロック91/CU801内の画素量に等しいか否かを判定するチェックが実行される。等しくない場合、変数jがステップ1121で1インクリメントされて次のセットのシンタックス要素を検討し、プロセスは上述のステップ1104に戻る。
全画素がステップ1120で処理されていた場合、最後のレベルのブロック91がステップ1122で取得される。これは、表Block[]に対応する。次に、最後のステップ1123は、図10のプロセスを用いて復号されるパレット803を使用して色値の各レベルを変換することに帰着するであろう(画素値を直接有する「escape」画素を除く)。この最後のステップは、ブロック内の位置のレベルと、パレット内の対応エントリとに応じて各ブロック位置で、画素値(Y、U、V)または(R、G、B)に影響を与える。
HEVC RExtに導入されるようなパレットモードの複数の他の態様は、現在の符号化ユニットを符号化するのに使用されるパレットのエンコーダによる判定と(下記図12を参照)、エンコーダでのPred mode、Level、Runシンタックス要素の選択(下記図13を参照)とに関する。
図12は、エンコーダでの例示的パレット判定アルゴリズムを示す。このプロセスの入力データは、元の画素の符号化ユニットとその符号化ユニットのサイズである。本例では、YUVパレットが構築されるが、他の実施では、同じようにRGBパレットが構築されるかもしれない。
第1のステップ1201では、画素カウンタを表す変数jが0に設定され、構築中のパレットの成長を追う変数「Palette_size」も0に設定され、閾値を表す変数「TH」が9に設定される。次に、ステップ1203で、走査順に従いインデックスiを有する画素piは、ステップ1203で元の符号化ユニット1204から読み出される。次いで、変数jが1205で0に等しく設定され、ステップ1206で、パレットサイズが変数「j」と等しいか否か(つまり構築中のパレットの全パレット要素が検討されたか否か)を判定するチェックが実行される。
パレットサイズがjに等しい場合、インデックス「j」でのパレットはステップ1209で画素値piに等しく設定される。つまり、現在の画素piがパレット内で新要素となり、インデックスjがそれに関連付けられる。より精密には、以下の割当てが実行される。
PALY[j]=(Yi)
PALU[j]=(Ui)
PALV[j]=(Vi)
ただし、PALY,U,Vは色値を記憶する3つの表である。
パレットサイズ(Palette_size)はステップ1210で1インクリメントされ、ステップ1211でインデックス「Palette size」に対して発生表Counterが1に等しく設定される。次に、ステップ1213で変数iが1インクリメントされ、現在の符号化ユニットの次の画素「i」を検討する。次いで、ステップ1214で、現在の符号化ユニットの全画素が処理されたか否かを判定するチェックが実行される。すべてが処理されていたら、後述する順序付けステップ1215によってプロセスが終了し、そうでなければ、次の画素が上述のステップ1203で検討される。
ステップ1206に戻ると、jがpalette_sizeと異なる場合、piとインデックスjでのパレット要素間の各色成分に対する絶対値を算出するステップ1207が実行される。式は図面に示す。絶対差がすべて厳密に所定閾値TH未満である場合、パレット内の要素「j」に関する発生カウンタがステップ1212で1インクリメントされる。ステップ1207は、マージンTHを前提として、要素の色に隣接する色を包含するクラスなど、構築中のパレットの各要素に関するクラスを生成する。よって、ステップ1212は各クラスの発生をカウントする。ステップ1212の次には、上述のステップ1213が続く。
ステップ1207の条件が満たされない場合、変数jがステップ1208で1インクリメントされて、パレット内の次のパレット要素を検討する。これは、ステップ1207の新たな発生を通じて他のパレット色要素と現在の画素とを比較することである。パレット内のどの要素もステップ1207の基準を満たさない場合、ステップ1209、1210、1211を参照して上述したように新たな要素がパレットに追加される。
なお、判定モジュール1207は、4:4:4(YUVまたはRGB)シーケンスに対して各色要素を比較することができ、4:2:0シーケンスに対してはルーマ色成分のみを比較することができる。
図12のプロセスの最後で、表「Counter」は、各パレット要素によって定義されるクラスの発生数を含む。次に、パレット要素は、それらの発生に従って最も頻出する要素がパレット内で最初の位置(最下位のインデックスまたは「レベル」を有するエントリ)に来るように、ステップ1215で順序付けられる。
なお、パレットのサイズは、最大サイズ、たとえば24エントリに限定することができることも分かるであろう。このような場合、ステップ1215から生じるパレットのサイズが24を超過する場合、パレットは順序付けられたパレットの25番目の位置から要素(エントリ)を排除することによって低減される。これにより、パレットが構築される。
次に、エンコーダでのPred mode、Level、Runシンタックス要素の選択に目を向けると、図13のプロセスの入力データは、元の画素の符号化ユニット、図12のプロセスを通じて構築されるパレット、および符号化ユニットのサイズである。特に、INTRA符号化、INTER符号化、およびパレット符号化のうち、どの符号化モードを使用しなければならないかを判定する際に、推定が実行される。
第1のステップ1301で、画素カウンタを表す変数「i」が0に設定される。後述のプロセスは、iから始まる画素に対してシンタックス要素を決定するよう試みる。2つの予測モードは個々に推定される。図の右側は「Pred mode」=0であり、図の左側は「Pred mode」=1である。
「コピーアップ」予測(「Pred mode」=1に対応)に対して、ステップ1303で、現在のRun内のレベルの数をカウントするために使用される変数「icopy」が0に等しく設定される。次に、ステップ1304で、画素位置iの現在のレベル:Block[i+icopy]が、上のラインの直上に配置された画素のレベルと比較される。Block[i+icopy−width]の「width」は現在の符号化ユニットの幅に相当する。なお、符号化ユニットの各画素のレベルBlock[i+icopy]は、ステップ1308で並行して判定される。このステップは、位置iの画素と、上述した最も近いパレット要素(実質上そのインデックスまたはレベル)とを関連付けることに帰着するであろう。このステップは、位置i、パレット1306、および元の符号化ユニット1307を使用する。
ステップ1304でBlock[i+icopy]=Block[i+icopy−width]の場合、ステップ1305で変数「icopy」が1インクリメントされ、画素ブロックの次の画素値を検討して、位置i+icopyでの現在の画素レベルを現在の「コピーアップ」Runに含めることができることを示す。ステップ1304でBlock[i+icopy]がBlock[i+icopy−width]と異なる、つまり、「コピーアップ」Runの現在の推定が終了した場合、変数「icopy」が判定モジュール1314に送信される。プロセスのこの段階で、変数「icopy」は、直上のラインからコピーされた値の数に相当する。
左値予測(「Pred mode」=0に対応)に対して、Run値(ileft)を判定するループが、並行して、または順次処理される。まず、現在の画素のインデックスiを記憶するのに使用される変数「iStart」が「i」に設定され、インデックス「i」に続く画素レベルを連続的に検討するのに使用される変数「j」も「i」に等しく設定され、構築中の現在のRunをカウントするのに使用される変数「ileft」が0に等しく設定される。これがステップ1309である。次に、ステップ1310は、j!=0であるか、ならびに「Pred_mode[j−1]」=0、およびBlock[j]=Block[j−1]であるか否かを判定することに帰着するであろう。Pred_Mode[]は予測モードを記憶するエンコーダによって使用される表である(「コピーアップ」予測と左値予測のそれぞれに対して1または0のいずれか)。それは、隣接画素が処理されるに従って、後述されるステップ1317で順次埋められ、たとえばステップ1301においてゼロ値で初期化されている:Pred_mode[k]=0(任意のkの場合)。
ステップ1310の条件が満たされる場合、ステップ1311で変数「ileft」が1インクリメントされ、位置jでの現在の画素レベルを現在の「左値」Runに含めることができることを示し、変数jがステップ1312で1インクリメントされ、画素ブロックの次の画素値を検討する。
ステップ1310での条件が満たされない場合、変数「j」が「iStart」と比較されて、最初の画素値を現在の「左値」Runに対して検査すべきか否かを判定する。これがステップ1313である。「j」が「iStart」以下である、つまり現在のRunに対して検査すべき最初の画素値である場合、現在のRunを開始し、次の画素値が上述のステップ1312で検討される。「j」が厳密に「iStart」より高い、つまり現在の「left value」Runの画素値と異なる最初の画素値が検出された場合、現在の「left value」Runの長さに対応する変数「ileft」が判定モジュール1314に送信される。なお、「コピーアップ」予測のためのループとして、インデックスiでのレベルBlock[i]が、ステップ1308で同じループで判定される。
「左値予測」と「コピーアップ」モードに対する最大runの算出後、ステップ1314で変数「ileft」および「icopy」が比較される。これは、「icopy」!=0および「icopy」+2が「ileft」より高いか否かを判定することである。これは、コピーアップモードまたは左値予測モードのいずれかを選択する例示的基準である。特に、パラメータ「2」はわずかに変更することができる。
ステップ1314の条件は、「icopy」が0である、あるいはileft−2以下である場合、「左値予測」モードがステップ1315で選択されることである。この場合、同じくステップ1315で、「PredMode」変数が0に等しく設定され、Run変数が「ileft」に等しく設定される。一方、「icopy」が0と異なり、「ileft−2」よりも厳密に高い場合、ステップ1316で「コピーアップ」モードが選択される。その場合、ステップ1316で、「PredMode」変数が1に等しく設定され、Run変数がicopy−1に設定される。
次に、エンコーダで「Pred_mode」と「Run」を含む表は、ステップ1317で現在の値「Predmode」および「Run」で更新される。次いで、画素ブロックにおいて検討する次の位置がステップ1318で算出され、該位置は「run」値+1ずつインクリメントされた現在の位置iに対応する。次いで、ステップ1319で、符号化ユニットの最後の画素が処理されたか否かを判定するチェックが実行される。これが当てはまる場合、プロセスがステップ1320で終了する。さもなければ、2つの予測モード「左予測」および「コピーアップ」が、次の画素位置に関してステップ1303および1309を始点に評価されて、新たなセットのシンタックス要素を取得する。
このプロセスの最後で、エンコーダは、符号化ユニットの各サンプルのレベルが分かっており、3つの表Pred_mode[]、Block[]、およびRun[]のコンテンツに基づきレベルのブロックの対応シンタックスを符号化することができる。
上述したように、HEVC RExtで現在設計中のパレットモードは、符号化ユニット毎に送信すべきパレットを必要とする。これは、ビットストリーム内の大量データ、ひいては多額の符号化コストを意味する。発明者らは、符号化効率を向上するパレットモードの改良を企図した。
本発明の一つの態様によると、現在の符号化ユニットに対する現在のパレットが、パレット予測子を用いて予測される。本発明に関する一つの変形例では、現在のパレットが2つ以上のパレットのエントリから予測され、2つ以上のパレットは、たとえば2つ以上のパレットから構築されたパレット予測子を用いて画素ブロックを処理するために以前に使用されたパレットである。これにより、符号化ユニットと関連付けられたパレット毎に送信されるべき情報量を低減することができる。各種実施形態を以下に説明する。
本発明のアプローチは予測ベースであるため、図14〜18、22、24〜26を参照して、まず現在の符号化ユニットに関する予測子の取得について述べ、次に図19〜22および27を参照して、デコーダへの予測を実際に記載するシンタックス要素について述べる。
本発明を実施する復号プロセスの概略的ステップを、上述の図7に基づく図14に示す。当業者であれば、ビットストリームを適切に構築するエンコーダ側の対応する動作をすぐに理解するであろう。図14のブロック14xxは図7のブロック7xxと同様である。図示するように、本発明の主要概念はステップ1406で実施され、パレットが、ビットストリームから完全に復号される代わりに、パレット予測子1416から少なくとも部分的に予測される。パレット予測子を取得する後述の幾つかの方法1415は、以下を取得することを含む。
以前に処理された画素ブロックまたは符号化ユニットを予測するために使用されるパレットと、
現在の符号化ユニットを含む符号化エンティティに関連付けられた参照パレット予測子と、
現在の符号化ユニットに隣接する画素値に対応するエントリと、
現在のパレット内で予測される現在のエントリに先行する現在のパレットの少なくとも1つのエントリ。
パレット予測子を取得する複数の第1の実施形態によると、画像の複数の画素ブロックは、図5を参照して上述したように所定の走査順に従い処理され、一つのCTBの複数のCUが走査順に従い符号化/復号される。次に、現在の画素ブロックに対するパレット予測子が、以前に処理された画素ブロックを予測するために使用された1セットのパレットから選択される。好ましくは、現在の画素ブロックに関するパレット予測子は、最後に処理された画素ブロックに対して使用されたパレットである。これは、(最後に処理された符号化ユニットに対して)最後に使用された復号パレットをメモリに記憶することによって実行することができる。当然ながら、既に使用されたパレットの中から別のパレットをパレット予測子として選択しても良く、その場合、上記選択されたパレットの識別子をデコーダに提供すべきである。
使用される走査順に従い、最後に使用されたパレット、ひいてはパレット予測子は、現在の符号化ユニットと隣接する、以前に処理された符号化ユニットのために使用されたパレットのうちの1つであることが通常分かる。これにより、符号化ユニット間の高冗長性を考慮に入れて、効率的な符号化を行うことを保証する。たとえば、図5に基づき、パレット予測子は、左または上の符号化ユニット15、17、12、13を処理するために使用されたパレットのうちの1つとすることができる。
現在の符号化ユニットの実際のコンテンツからほど遠いコンテンツを有するパレット予測子が原因である不十分なパレット予測を回避するため、具体的な実施形態は、最後に使用されたパレット(または、以前に使用されたパレットのセット)のリセットを提供する。このようなリセットは、新たなCTB毎に、すなわち、現在の符号化ユニットが画素ブロックから成る新たな符号化エンティティを開始するとき、あるいは上述したような新たなCTBのラインまたは列、あるいは新たなフレーム毎に、実行することができる。
また、このようなリセットにより、エンコーダまたはデコーダは、各CTB(またはCTBの列またはフレーム)に対してパレットモードを並列して推定することができる。しかし、2CTBの符号化ユニット間の相関関係が存在する場合が多いため、リセットは好ましくは新たなCTBの列毎に実行される。これは、複数のCTB(それぞれを正方形で示す)を有するフレームを示す図14aを用いて示される。太線の左側のCTBは、新たなCTBのラインが開始されるので、最後に使用されたパレットがリセットされるCTBである。
また、このようなリあるラインの最初のCTBでのリセットは、フレームレベルでのリセットよりも効率的なアプローチである。これは、CTBが水平ラスタ走査順で符号化されるからであり、CTBのラインの最初のCTBに対して、最後に使用されたパレットが、空間的に離れたCTB(真上のCTBラインの最後の1つ)から予測の可能性を秘めている。CTB間に空間的距離があることを仮定すると、両者間の相関関係が非常に低いため、各自のパレット間の依存性(予測)は重要ではない。
最後に使用されたパレットのリセットは、現在のパレットを予測できるパレット予測子として利用可能なパレットが存在しないことを意味する場合がある。その場合、現在のパレット、たとえば、ラインの最初のCTBにおいて処理されるパレット、まさに最初の符号化ユニットは予測することができない。このリセットは、Previous_Palette_size変数を0に設定する(最後に使用されたパレットのサイズを記憶する)ことによって実行することができるであろう。
加えて、最後に使用されたパレットのリセットは、何の値も予測できないために、パレットモードの全体の符号化コストも大幅に増加させてしまい、それによって、より小さなパレットサイズ、ひいてはさらに小さく非効率なパレット予測子にバイアスがかかる。これは、ブロック内の新たな要素が他のブロックによって再利用可能であるため、最初のブロックに対して使用されたビットが実際には相互的になるからである。通常の解決策は、ブロックに対する符号化決定が、数個のブロックが符号化された後で初めて選択されるViterbiなどの動的プログラミングアルゴリズムを用いることであろう。しかしながら、これは非常に複雑であり、簡易な解決策が好ましい。
こうした符号化コストの増大のため、符号化モードセレクタ(ステップ106を参照)がパレットモードを選択するのはごく稀で、リセット直後ではない(それ故、遅延あり)。しかし、符号化ユニットを符号化するためにパレットモードを選択させることが有益である。このため、実施形態は、リセット発生後の符号化ユニットの最初の符号化のビット符号化コスト(すなわち、空のまたはデフォルトのパレット予測子で)をごまかすことによって、パレットモードが選択される可能性を高めることを提供する。これは、本来かかるべきコストよりも低いビット符号化コストを有することによって、パレットモードが選択される可能性を高めることである。
符号化に使用された誤情報を提供して、ビット符号化コストを人為的に低下させることができる。色成分に関するこの誤った、またはごまかしの情報、すなわち「ボーナス」は、コーデックの動作点(すなわち、ビットがもたらすはずの歪みの改善量)、クロマフォーマット、関連する少なくとも1つの色成分、および/または現在の符号化ユニットに関するパレット内の要素の数に依存することができる。
たとえば、RGBまたはYUV要素のパレットのケースについて考えられ、各成分R/G/B/Y/U/Vはたとえば8ビット成分である。したがって、パレットリセット後の第1の符号化ユニットに対して使用されたパレットの1エントリの符号化から生じるビットコストは、通常3x8=24ビットである。しかし、本明細書に記載の実施形態では、ボーナスを適用して、たとえばわずか8ビットに人為的に低減することによって、このビットコストを矯正することができる。よって、ステップ106では、パレットモードが選択される可能性が高い。
2つ以上のレベルが1画素を表すのに必要な複数の具体的な実施形態(たとえば、成分Yに1レベル、UおよびVの対の成分に1レベル)では、画素ブロックを符号化するのに2つ以上のパレットが実際に使用される。ボーナスは2つ以上のパレットのそれぞれに適用することができる。たとえば、2つのパレット、一方はY成分用、他方はU+V成分が提供される場合、ボーナスは、1つのY要素のビットコストを8ビットから4ビットに変更し、1つのU+V要素のビットコストを16ビットから6ビットに変更することに帰着するであろう。
最初に処理された符号化ユニットのパレットを予測することは有益であるため、一つの変形例は、バイデフォルトパレットが、CTBのラインの最初の符号化ユニットに関するパレット予測子として使用されるように、最後に使用されたパレットをバイデフォルトパレットで置き換えることを含む。バイデフォルトパレットを生成する様々な方法(エンコーダとデコーダは同じように動作する)が考えられる。1例として、バイデフォルトパレットは、色空間全体に均等に分布された色値に対応する1セットの所定のエントリを含んでも良いる。同等分布は3つの色成分に関することができる。しかし、好適な実施形態では、色値はY成分全体にわたって均等に分布することができる。UおよびV成分値は、たとえば色空間におけるUまたはV成分の中央値で固定される。UおよびV値は、ビット深度値/2またはビット深度>>1を割り当てることによって、成分のビット深度から直接算出することができる。ただし、「>>」は右シフト演算子である。Y成分に沿った分布例は以下の式である。
YLevel=(Level*bit−depth)/Previous_Palette_size
ただし、Levelは、上述したようなデフォルト表のエントリインデックスに対応し(ひいては、新たな値Y毎に1インクリメントされる)、ビット深度はY成分のビット深度である。なお、Previous_Palette_sizeは、最後に使用されたパレット、最後に復号されたCTB、またはCTBのラインもしくはフレームから算出された平均Palette_size、あるいは4などの所定数と等しくすることができる。
パレット予測子を取得する複数の他の実施形態によると、参照パレット予測子は、CTB、CTBのライン、スライス、スライスセグメント、タイル、フレーム、またはシーケンスなど、画像を形成する符号化ユニットの符号化エンティティと関連付けられる。現在の画素ブロックに対するパレット予測子は、現在の画素ブロックを含む符号化エンティティに関連付けられた参照パレット予測子である。これらの実施形態では、符号化エンティティに対して参照パレット予測子をビットストリーム内で送信する必要がある。
図15は、ビットストリームで送信される参照パレット予測子に基づく復号プロセスを示す。この図は図14に基づくため、ブロック1501〜1514はブロック1401〜1414と類似するが、ただし、モジュール1506は、ビットストリームから復号される参照パレット予測子1516を用いてパレットを構築する。当然ながら、対応するプロセスはエンコーダでも、参照パレット予測子をビットストリームに含めるために実行される。
CTBの復号(またはCTBライン、スライス、フレームなどの復号)の開始時、参照パレット予測子1516がステップ1515でビットストリームから抽出される。なお、参照パレット予測子を使用すると、現在の符号化エンティティCTBのどの符号化ユニットに対しても、ビットストリームにパレットが提供されない場合がある。この場合、符号化ユニットに対してどのパレットも復号しないように信号伝達するため、1つのフラグをビットストリームに設け、そこから抽出することができる。一つの変形例では、このフラグはPalette_sizeに値0を使用することによって置き換えて、現在の符号化ユニットに対してパレットを復号すべきでないことをデコーダに知らせても良い。この変形は、上記ステップ1003で復号されたSize+1の代わりに、Palette_sizeを復号されたSizeと等しくする必要がある。参照パレット予測子の使用を信号伝達するのに使用されるビットを節減するため、現在のCTBの少なくとも1つのCUがパレット符号化モードを用いて符号化される場合、参照パレット予測子をCTBの最後に送信することができる。
いずれにせよ、参照パレット予測子は必要に応じて抽出および復号されて、現在のCTBの符号化ユニットのうちの1つを復号する。モジュール1502は予測モードを抽出する。それがパレットモードでない場合(テスト1503)、デコーダは対応モードでCUを復号する1517。そうでなければ(パレットモード)、現在の符号化ユニットに関するパレットを図7に示すように復号する。しかし、本実施形態におけるパレット1507の構築1506は、参照パレット予測子1516に依存する。この依存性とその対応するシンタックス要素1505の例を後述する。
図7および13のために上述したように符号化ユニットが復号されると(1517、1520)、デコーダは、ステップ1518でそれがCTBの最後の符号化ユニットであったか否かをチェックする。なお、この図は、他のシンタックス要素を含むことのできるCTBのフルシンタックス復号を含んでいない。最後の符号化ユニットではなかった場合、ステップ1502で次のCUの予測モードが抽出される。最後の符号化ユニットであった場合、CTBを完全に復号する残りのプロセスが実行され(図示せず)、デコーダが、ステップ1519でフレームの最後のCTBであったか否かをチェックする。最後のCTBでなかった場合、次のCTBの参照パレット予測子が上述のステップ1515でビットストリームから抽出される。当然ながら、この図は完全ではなく、本発明に関係しない幾つかの復号ステップは省略されている。
述べたように、送信された参照パレット予測子は、現在のCTB内の各符号化ユニットCUに対して使用されるパレット予測子として使用される。後述するように、参照パレット予測子を使用してパレットの要素を予測することができる。あるいは、一つの変形例では、参照パレット予測子を現在の符号化ユニットに関するパレットとして使用することができる。その場合、参照パレット予測子1516が直接モジュール1509に送信されることによって、モジュール1507はもはや必要とされない。
エンコーダでの参照パレット予測子の選択は、符号化効率に貢献するであろう。幾つかのアルゴリズムを利用して「最適」参照パレット予測子を判定することができる。たとえば、現在のCTB内の最大符号化ユニットを予測するために使用されるパレットを、CTB用の参照パレット予測子として選択することができる。もう一つの例では、現在のCTBを構成する全符号化ユニットを予測するために使用されるパレットから、速度歪み基準を最小化するパレットを、CTB用の参照パレット予測子として決定し使用することができる。当然ながら、他の選択基準も使用することができる。
パレット予測子を取得する複数のさらに別の実施形態では、現在の符号化ユニットに関するパレット予測子は、現在の符号化ユニットに隣接する画素値に対応するエントリを含む。これらの実施形態では、現在のCUのパレット予測子は、図16に例示するように隣接画素から抽出される。
本例では、選択された画素は、図3を参照して上記のように定義した因果領域に属するため、現在の画素ブロックの上側と左側とに隣接する画素である。これらの隣接画素は図面ではグレイで示す。詳細には、選択画素は固定数であり、たとえばINTRA予測モードで使用されるのと同じ3つの画素(図ではダークグレイの画素1601〜1603)、すなわち、左上、右上、左下などの隣接する現在の符号化ユニットに関連する画素である。当然ながら、別の画素数も考えられる。選択すべき関連する画素はエンコーダとデコーダの両方で分かっていて、追加の信号伝達情報は必要とされないことが望ましい。しかし、幾つかの実施形態は、エンコーダで特定画素、次いでビットストリームでの信号伝達、選択画素の数、選択画素を予見することができる。
一つの実施形態では、限定された隣接画素のセットが検討される。たとえば、画素が最大空間距離を有するようにこの画素セットが選択される。これにより様々な種類が生成され、重複画素が防止される。
図17は、隣接画素に基づく現在の符号化ユニットに対するパレット予測子の生成を示す。上述したように、パレット予測子内の要素の順番は重要である。これには、パレット要素(ここでは隣接画素)に対するクラスを定義する必要がある。この判定プロセスは、エンコーダとデコーダの両方で実行することができる。
一つの実施形態では、隣接画素1701が1702で分類される。なお、隣接画素は、現在の符号化ユニットに直接隣接しない画素を含むことができる。検討されたセットの隣接画素の各隣接画素は、パレット予測子内の既存のエントリからの色距離に応じて、たとえば図12のステップ1207の基準を用いてクラス(ひいてはエントリインデックス)と関連付けられる。一つの実施形態では、クラスが図16に示す3つの画素1601〜1603によって定義される。この結果、非順序付けパレット予測子1703となる。加えて、分類1702中、各クラスの発生1704がカウントされる。
非順序付けパレット予測子1703と発生1704に基づき、順序付けエントリを有する、たとえば最初に最も頻出するエントリを有するパレット予測子1706がステップ1705で構築される。なお、わずかしか発生しない(たとえば閾値以下の)エントリは、パレット予測子から廃棄しても良い。
一つの実施形態では、同一クラスの2画素は全く同一の画素値を有する(よって、分類に使用される基準は絶対値を含まず、閾値THを0に設定する必要がある)。なお、テキストまたはスクリーンショットを含むHEVC RExt(ひいてはパレットモード)により対象とされる画像では、隣接符号化ユニット内に異なる値はほとんど存在しない。よって、画素値の独自性に基づき画素を分類することが妥当である。
図18は、分類の1例を示す。1801は、第1の画素値(クラス「1」で表す)、第2の画素値(「2」で表す)、または第3の画素値(「3」で表す)の隣接画素を有する現在の符号化ユニットを示す。隣接画素のセットは、表1802内の関連クラスで表される。表1802は、各クラスと関連付けられた発生を示す。表1802から構築されるパレット予測子は、発生に応じてクラスを順序付け、重要でない予測子エントリ(ここでは、少数の発生、本例では2によりクラス「1」に対応するエントリ)を排除することによって表1803に示される。予測子エントリを排除するため、アルゴリズムは、隣接画素数、クラス数、および/または最も確度の高い隣接画素の発生を考慮に入れることができる。
パレット予測子を取得する複数のさらに別の実施形態では、現在のパレットが順序付けられたエントリを有し、パレット予測子を用いて現在のパレットを予測することが、同じ現在のパレットの先行するエントリから現在のパレットのエントリを予測することを含む。言い換えると、パレットのあるエントリを処理する際、パレット予測子は、現在構築中の色パレットのあるエントリに先行するエントリから成る(を含む)。よって、現在のパレットはイントラ予測される。
これは、適時ビットストリーム内で信号伝達に基づき、予測パレットを取得するための復号プロセスを示す図22に示される。図22は、図10の左上部分に対応する部分、すなわち予測パレットだけを生成を再現する。よって、ブロック予測子91を定義するシンタックス要素を取得するため、図10の残りの部分を実行する必要がある。
図示するように、Palette_sizeは、ステップ2201および2202で復号され算出される。次に、最初のパレット要素が復号される。パレットはイントラ予測されるので、最初のパレット要素は予測されず、ビットストリームから直接復号される。次に、各パレットエントリを連続的に検討するために提供される変数iは、ステップ2204で1に等しく設定される。他のパレット要素は次の複数のステップを通じて復号される。具体的には、パレット要素毎に、フラグ、すなわちUse_Predがステップ2206で復号されて、インデックスiでのパレット要素がイントラ予測を使用するか否か(テスト2207)を判定する。イントラ予測を使用しない場合、パレット要素がステップ2208でビットストリームから直接復号される。そうでない場合、現在のパレット要素予測子のインデックスに対応するインデックスjが、ステップ2210でビットストリームから復号される。なお、エンコーダは、ビットを節減するためインデックスiに関連してインデックスjを符号化している場合があり、その場合はデコーダが反対に動作する。次に、ステップ2211で残差が復号され、ステップ2212でパレット要素Pal[i]がRes[i]+Pal[j]に等しく設定され、パレットに追加される。次に、インデックスiがステップ2209で1インクリメントされ、次のパレット要素を検討する。いったん全パレット要素が復号されたら(テスト2205)、プロセスは図10のステップ1008に続く。
一つの実施形態では、パレット要素iの要素予測子は、パレット要素i−1、すなわち、現在のパレット内の現在のパレット要素の直前のパレットエントリである。このような場合、モジュール2210は省略することができ、予測される際にパレット要素Pal[i]はRes[i]+Pal[i−1]に等しく設定される。一つの実施形態では、最初のパレットエントリを除く全パレットエントリが、現在のパレット内の要素の直前のパレット要素から予測される。このような場合、デコーダはイントラ予測を用いてパレット要素を取得する/復号する方法を知っているため、Use_predフラグは省略することができる。つまり、モジュール2206および2208は省略することができる。
パレット要素のイントラ予測の符号化効率を向上させるため、パレット要素は、エンコーダでの発生ではなくその値に応じて順序付けすることができる。
さらに複数の他の実施形態によると、現在のパレットは2つ以上のパレットのエントリから予測される。つまり、パレット予測子は2つ以上のパレットから構築することができる。具体的には、2つ以上のパレットを部分的または完全に融合して、現在のパレットに対して新たなパレット予測子を形成することができる。
これは、上述した予測機構が、たとえば以前に処理した画素ブロックを予測するのに使用された1セットのパレットから、パレット予測子として選択された単独のパレットに依存するからであろう。これはパレット予測子の質に影響を与えるであろう。たとえば、連続画素ブロックB1、B2、B3の中で、ブロックB1およびB3はそれぞれ多数の異なる画素から成るが、B2は異なる画素がほとんどない場合、次のパレットのためのパレット予測子として直前パレットを使用するということから、(パレット要素のほとんどない)B2のパレットがB3用のパレット予測子として使用される。しかし、この場合、B3用のパレット予測子内の要素数、ひいてはB3用のパレットを効率的に予測する能力が大幅に低下する。
発明者らは、2つ以上のパレットを組み合わせて新パレットを構築して新画素ブロックを処理することが有効であることを発見した。
図24は、既存の2つ以上のパレットからパレット予測子を構築する概略的ステップを示すフローチャートである。既存のパレットは、現在のパレットの全部または一部、最後のパレット予測子(参照パレット予測子を含む)、空間的または時間的に隣接するパレット、バイデフォルトパレット(たとえば、成分がすべて0であるようなバイデフォルトパレット要素を含む)を含であろう。
図24のプロセスでは、Pは考慮に入れた既存のパレットの数を表す。pal0〜palP−1は対応するパレットである。「pred」はプロセスによって形成されるパレット予測子である。NMAXはパレット要素の最大数である。Jk, k∈[0;P[はパレットpalk内の要素数である。「i」はP個のパレットpal0〜palP−1のそれぞれを連続的に検討するためのパレットカウンタを表す変数である。「n」は構築中のパレット予測子「pred」内のパレット要素の現在数を表す変数である。「j」は現在のパレットpaliの各パレット要素を連続的に検討するパレット要素カウンタを表す変数である。
パレットpal0〜palP−1は、たとえば低インデックスを有する最近のパレットを最初に処理するために順序付けされるであろう。これは、より最近の要素をパレット予測子の開始にできる限り近く追加するためである。
プロセスは、ステップ2400で、検討する最初のパレット(「i」=0)と、構築されるパレット予測子「pred」内の現在の予測子要素(「n」=0)とを初期化することによって開始される。次に、プロセスは、各パレットpaliを連続的に検討するループに入る。
ステップ2401で、パレット要素カウンタ「j」が0に初期化されて、現在のパレットpaliの最初のパレット要素を検討する。
ステップ2402で、現在のパレットpaliの現在のパレット要素pali[j]が、このパレット要素のパレット予測子「pred」への追加をトリガする、あるいはトリガしない特定の基準を満たすか否かをチェックする。
トリガ基準は、単にpali[j]とパレット予測子「pred」(すなわちpred[0]〜pred[n−1])に既に追加されている要素とを比較することに依存し、pali[j]がpred[0]〜pred[n−1]と異なる場合、現在のパレット要素を「pred」に追加することを決定し、pali[j]が「pred」の1要素と同一である場合、現在のパレット要素を「pred」に追加しないことを決定しても良い。なお、2つの要素pali[j]とpred[k]間の比較は、厳密な比較または厳密な類似(成分間の厳密な同等性)であってもよいし、緩やかな比較/類似(要素の対応成分間の差が各閾値未満である)であってもよい。一つの変形例では、特定量のn個の要素pred[k]のみを、比較の際に「n」の値に応じた正確な量に含めても良い。これは、比較の回数が急上昇する可能性があるためである。比較にたとえばn/2または最大4つの要素を用いることで、符号化効率と複雑さとの良好なトレードオフとすることができる。
しかしながら、図19〜21を参照して後述するように、Use_predフラグのビットマップなどの他の複数のトリガ基準も含めても良い。これらのUse_predフラグは、たとえば各パレットエントリを1つずつパレット予測子エントリと比較することによって、どの値が現在のパレットの値として再利用できるかを信号伝達するために、エンコーダによって生成される。特に、有益なことに、このアプローチは、パレット要素を明示的に送信しない、あるいはパレット要素を複写しないことを可能にする。フラグの数は、パレット予測子のサイズと、要素がどのように信号伝達されるかに依存する。
ステップ2402の結果、現在のパレット要素pali[j]をパレット予測子「pred」に追加するか否かが決定される。
現在のパレット要素pali[j]を追加しないと決定される場合、プロセスはステップ2405に進む。
現在のパレット要素pali[j]を追加すると決定される場合、プロセスはステップ2403に進み、現在の予測子要素pred[n]が現在のパレット要素pali[j]に設定される。次に、「pred」内の次の予測子要素は「n」インクリメントすることによって選択される。
次に、ステップ2404は、「pred」内の最大数の予測子要素が決定されたか否かをチェックすることから成る。決定されていない場合、プロセスはステップ2405に進む。そうでなければ、パレット予測子「pred」は完全に決定され、プロセスはステップ2409で終了する。
ステップ2405で、現在のパレットpaliの次の要素は、パレット要素カウンタ「j」をインクリメントすることによって選択される。
ステップ2406で、現在のパレットpaliのパレット要素がすべて検討され処理されたか否かつまりj<Jiがチェックされる。そうでない場合、プロセスループがステップ2402に戻って、次のパレット要素pali[j]を処理する。現在のパレットpali全体が処理されていれば、プロセスはステップ2407に進み、全パレットpal0〜palP−1がまだ処理されていない場合(ステップ2408でチェック)、パレットカウンタ「i」がインクリメントされて次のパレットを検討する。
全パレットpal0〜palP−1が処理されると、プロセスはステップ2409で終了する。
なお、パレット予測子を取得する上記各種実施形態は部分的または完全に組み合わせて、パレット要素の全部または一部を予測するための幾つかの基礎を提供することができる。
次に、デコーダへのパレット予測を実際に記述するシンタックス要素に目を向けて、図19〜21を参照するが、上述の図22はパレット予測を定義する機構を既に導入している。パレット予測子が検索されると考えられ、そのサイズ(Predictor_of_palette_size)は既知である。
シンタックス要素に関する複数の実施形態では、パレット予測子を用いて現在のパレットを予測することは、フラグのビットマップを取得することを有し、各フラグは、パレット予測子内の対応エントリが上記現在のパレット内のエントリとして選択されるか否かを定義する。その結果、デコーダに適切なパレット予測子を検索させることのできる情報に加え、デコーダにビットマップを送信するだけでよい。このビットマップは、現在の符号化ユニットのHEVC RExtに定義されるように、パレットの代わりに送信することができる。
ビットマップのシンタックスはM個のフラグを含み、Mはパレット予測子内の要素数に等しい。i番目に復号されたフラグは、パレット予測子からの要素iを使用して、現在の符号化ユニットに関する現在のパレットを埋める(予測する)か否かを定義する。一つの変形例では、パレット予測子内の最初の要素に対応するフラグから、要素予測子として使用しなければならない最後の要素に対応するフラグまでの少数のフラグに限定しても良い。ビットマップのサイズは、パレットサイズがHEVC RExtビットストリームで特定されるのと同じようにビットストリーム内で特定される。
たとえば、1に等しいフラグ(ビット)と関連付けられるパレット予測子の要素が、最初に利用可能な位置で現在のパレット内にコピーされ、その順序を保つ。
一つの他の実施形態では、追加エントリは、パレット予測子から選択されたエントリを有する現在のパレットの最後に追加される。たとえば、まず、ビットマップがビットストリームから復号され、パレット予測子の対応エントリが現在のパレットにコピーされた後、従来のパレット送信と同様に追加画素を現在のパレットの最後に追加するであろう。
予測パレット要素を追加パレット要素として提供しようとする一つの実施形態では、Palette_sizeの決定は、予測パレット要素の数によって増大するように構成される。そうするため、Palette_sizeは、復号されたサイズ+ビットマップ(Palette_pred_enable_size)で1に等しく設定されたフラグの数に等しく設定される。Palette_pred_enabled_sizeが0に等しい場合、Palette_sizeはステップ1003に記載するように復号されたサイズ+1に等しく設定される。
図19は、フラグのビットマップに基づく、これらの実施形態のパレットシンタックスの復号を示す。図22に関しては、図19は図10に基づくが、パレット復号に関する部分のみを示す。
まず、上述の実施形態のいずれかに従って、パレット予測子1902がステップ1901で取得される。加えて、Predictor_of_palette_size1903も取得される。モジュール1905はビットストリーム1904からN個のフラグを復号する。ただし、N=Predictor_of_palette_size。
1に等しい各フラグに対して、パレット予測子からの対応要素が、ステップ1906中、最初に利用可能なインデックスで現在のパレット1907に追加される。ビットマップにおいて1に等しいフラグ数を表すPalette_pred_enabled_size1908が、判定モジュール1910に送信される。パレットの残りのサイズもビットストリーム1909から復号される。判定モジュール1910は、Palette_pred_enabled_sizeが0と等しいか否かを判定する。0と等しい、つまり、現在のパレットに予測パレット要素が存在しない場合、Palette_sizeはステップ1911で復号されたSize+1に等しく設定され、現在のパレットの各エントリを連続的に検討するのに使用される変数iがステップ1912で0に等しく設定される。Palette_pred_enabled_sizeが0と異なる、つまり、現在のパレットに少なくとも1つの予測パレット要素が存在する場合、Palette_sizeはステップ1913で復号されたSize+Palette_pred_enabled_sizeに等しく設定され、変数iはPalette_pred_enabled_sizeに等しく設定される。次に、パレット要素の復号ループが、図10のステップ1005、1006、1007に対応するステップ1915、1916、1917を通じて実行される。変数iがPalette_sizeと等しい場合に、このループが停止する。復号されたパレット要素1916が、現在のパレット1907の最後、すなわち、予測されたパレット要素の後に追加される。一つの実施形態では、Palette_sizeはステップ1913で常に復号されたSize+Palette_pred_enabled_sizeに等しく設定されて実施を簡易化するため、モジュール1910、1911、1912を省略することができる。
なお、フラグの値「0」および「1」は反転させても良い、つまり、パレット予測子内の対応要素が構築中のパレットの要素を予測するのに使用されない場合、フflag=1が使用される(flag=0の場合は逆)。
このフラグの値の意味の反転は、「開始符号エミュレーション」と称される現象を防止するのに有益である。一連のバイトが開始符号と呼ばれるものに一致する場合、開始符号を一致させなくし、独自の開始符号を有するために、ビットストリームのサイズを増大させる拡張プロセスを通じて一連のバイトを変換しなければならない。0の代わりに1を使用することによって、サイズの増大が回避される。
図20は、図19のプロセスの1例を示す。図14〜18を参照して上述した実施形態のいずれかを用いて取得されるパレット予測子は、インデックスまたはレベルと色値とを関連付ける5つの要素を含む表2001である。ビットマップの復号フラグを表2002に示す。本例では、2つのフラグが1に等しく設定され、パレット予測子のレベル0に1つ、レベル2に1つである。よって、対応パレット要素が現在のパレット2003に追加され、第1の利用可能なレベルがそれぞれレベル0とレベル1である。次いで、新たなパレットエントリを、HEVC RExtで提案されるようにビットストリームから復号し、位置2および3に追加することができる。
なお、パレット予測子を送信する際、パレット予測子に対応するフラグ(ビットマップ)のみが必要とされる。信号伝達を低減するため、単独の参照パレット予測子を送信する同じCTB、スライス、タイル、スライスセグメント、フレーム、またはシーケンスに属する全符号化ユニットに対して同じビットマップを使用しても良い。
Use_predフラグのビットマップは、図19および20を参照した上記の説明で定義されている。次に再度、図24、より具体的にはステップ2402を参照すると、構築中のパレット予測子「pred」への現在のパレット要素pali[j]の追加を認証するトリガ基準が使用される。上述したように、このトリガ基準は、Use_predフラグのビットマップを含むであろう。
幾つかの実施形態では、構築中のパレット予測子は、上述したようなフラグのビットマップを用いて、第2のパレット(予測子として使用)に基づき予測されている第1のパレットからのエントリを含み、各フラグは、第2のパレットの対応エントリが第1のパレットのエントリを予測するエントリとして選択されるか否かを定義する。この実施形態では特に、パレット予測子は、第1のパレットを予測するエントリの未選択を定義するビットマップのフラグに対応する第2のパレットのエントリを含むことによっても構築される。
図25は、このようなアプローチの例示的実施例を示す。
図示する3つの符号化ユニットCU1〜CU3は、現在の画像で処理中の連続符号化ユニットとすることができる。
参照符号2500は、CU1を処理する(符号化する、または復号する)ために使用されるパレットを表す。このパレットは、本特許出願に記載する機構を用いて、ビットストリームで符号化されている(ひいては、デコーダによって検索される)、あるいは予測されている。
上述したように最後に使用されたパレットに基づく予測子生成機構を用いて、このパレット2500はパレット2501を構築するためのパレット予測子として使用されてCU2を処理する。パレット2501の予測は、上述したようにUse_predフラグのビットマップ2506に基づく。次のCUのパレットを予測するために対応要素をそれぞれ使用するか否かに応じて、フラグが値1または0を取ることを想起すべきである。一つの変形例では、flag=1は対応要素を選択しないことを意味し、flag=0は次のCUのパレットを予測する要素を選択することを意味することができる。
その結果、本例では、パレット予測子2500の第1、第3、第4、第5の要素が、ビットマップ2506に定義されるようにパレット2501にコピーされる。第2の要素2502は再利用されない(ビットマップ2506ではflag=0)。なお、追加パレット要素2503は、上述の機構に基づき、構築中のパレット2501の最後に追加しても良い(たとえば、ビットストリームで明示的に送信される)。
また、パレット2501はパレット予測子として使用されてCU3を処理するパレットを構築する。図に示す例では、パレット2501の全要素が、CU3に対するパレットにコピーされる(ステップ2504)。本例に対する一つの変形例では、ビットマップ(図示せず)は、パレット2501にコピーすべき要素を定義するビットマップ2506と同様、CU3に対してパレット2501のどの要素をパレットにコピーすべきかを特定するために備えられていても良い。
本発明の実施形態に特有に、パレット予測子2500は、パレットを構築する予測子としても使用されてCU3を処理する。
このような構築を達成するため、パレット予測子2505はパレット2500および2501から構築される。上述したように、パレット2501の全要素がパレット予測子2505にコピーされる(ステップ2504)。本例では、パレット2501を予測するエントリの未選択を定義するビットマップのフラグに対応するパレット予測子2500のエントリ(すなわち、通常、flag=0、たとえば要素2502)が、パレット予測子2505に追加される(ステップ2508)。これは、コピーステップ2504のおかげで、パレット予測子2500の他のエントリが既にパレット予測子2505に存在するからである。この要素2502の選択は、ビットマップ2506内のフラグのおかげで非常に迅速に実行することができる。
ビットマップは、パレット予測子2505に基づきパレットを予測してCU3を処理するために提供されても良い。
当然ながら、パレット予測子2505は、直接CU3を処理するパレットであってもよい。しかし、パレット予測子2505は、以前のパレットで定義された全要素を含むので成長し続ける。パレット予測子の要素は、Use_predフラグの値にかかわらず、もはや適合する要素が予測子に追加されない限界まで成長する。
要素2502の追加はパレット予測子2505の最後に実行されることが好ましい。結果として生じるパレット予測子は、上述の状況と比較して強化されることを直接観察することができるであろう。
パレット予測子の最後に未使用要素を追加する特定の利点の1つは、要素は、古さと使用レベルによって近似的に順序付けられることである。この結果、最も有益でなく、最も排除される可能性が高い、パレット予測子内の最後の要素を有することができる。よって、この要素を含む各パレットを用いて、最後のM(定義される整数M)個の画素ブロックを処理する際、たとえば該要素の使用回数に基づき、構築中のパレット予測子から幾つかの要素を排除する決定を下すことができる。
当然ながら、このプロセスは、パレット予測子にまず未使用要素を投入する、あるいは、パレット2401から要素のいくつかが挿入されるようにしても良い。
なお、過去のパレットから未使用の要素を選択することで、要素が独自であり、Use_predフラグが冗長でないことを保証する。よって、パレット予測子効率が最大化する。
2つ以上のパレットからのパレット予測子の構築を含む本発明の上記アプローチは、図19のパレット予測子構築ステップ1901に影響を与えるだけである。
図26は、上記アプローチで、予測子2505などのパレット予測子を構築するステップ1901の一つの実施形態を示しており、その実施形態は、図24を参照して上述した概略的なステップよりも具体的である。このようなパレット予測子2505は、対応ビットマップ(図示せず)のUse_predフラグに基づき、CU3を処理するパレットを構築するために使用される。
図25の例を参照してこのプロセスを要約すると、アレイ「pal」が表すCU2パレット2501の要素を予測子要素「pred」のアレイにコピーすることに帰着するであろう(ステップ2504)。「pred」は、パレットアレイ「pal」から要素をコピーするのに使用される一時的バッファである。このプロセスの最後で、「pred」はパレット予測子である。
加えて、可能なスタッフ要素(たとえば2502)が「pred」、さらには既にコピーされた要素に追加される。
構造「pred」は、最大NMAXの要素を含む。理想的には、NMAXはパレット内の要素の最大数よりも大きくすることができる。符号化効率とメモリ間の良好な折衷は、NMAX=64、すなわち、本例のパレットの最大サイズの2倍であることが分かっている。
「pal」は、最後に使用されたパレット、すなわち図25の例のパレット2501を記憶すること専用のNcur要素を含む構造である。
「last」は、過去のパレットまたは予測子、たとえば、最後に使用されたパレットのパレット予測子、すなわち図25の例のパレット予測子2500の記憶すること専用のNlast要素を含む構造である。対応するUse−predフラグも、メモリ、たとえばいわゆる「Use_pred」アレイに記憶される。
なお、「pal」は最後に使用されたパレットであり、「last」はこの最後に使用されたパレットのパレット予測子である。
ステップ2600は、「pal」のコピーを「pred」に初期化する。各構造の最初の要素は、ループカウンタ「i」を0に設定することによって選択される。次に、コピーループがステップ2601で開始される。「pred」の現在の要素は「pred」のうちの1つに等しく設定される。次いで、ステップ2602は、ループカウンタ「i」をインクリメントすることによって「pal」の次の要素を選択することができる。
次に、ステップ2603は、構築中のパレット予測子「pred」またはパレット「pal」のいずれかの最後の要素に達したか否か(「pred」の場合はNMAX、「pal」の場合はNcur)をチェックする。
最後の要素に達していなければ、プロセスループはステップ2601に戻り、次の要素をコピーする。そうでなければ、プロセスはステップ2604に進む。
本発明の本実施形態による、他のパレット、ここでは過去のパレット2500のパレット予測子2505の構築への貢献は、以下のステップ2604〜2608から生じる。
これらのステップにより、図25で2508を付すスタッフ作業が可能になる。これらの作業は、先行パレット「pal」のコピーから生じる要素に加えて、「pred」への追加要素を提供する。
ステップ2604では、ループカウンタ「j」を0に初期化することによって、過去のパレット「last」の最初の要素を選択する。
次に、ステップ2605が発生し、「pred」または「last」のいずれかの最後の要素に達したか否かがチェックされる。
達していない場合、プロセスはステップ2606で続く。そうでなければ、プロセスはステップ2609で終了する。
ステップ2606は、「last」内の現在の要素「j」が既に再使用されているか否かをチェックすることに帰着するであろう。上記のステップ2402と同様、このステップは、「Use_pred」アレイ内のこの要素に関連付けられたUse_predフラグが0(未再使用)または1(再使用)のいずれに設定されるかをチェックすることに帰着するであろう。一つの変形例では、現在の要素が構築中の「pred」に既に存在するか否かを認証することに帰着するであろう。
再使用されない場合、ステップ2607が発生し、現在の要素「j」が「last」から「pred」に追加される(「pred」の最後)。したがって、「pred」の次の要素は「i」をインクリメントすることによって選択される。
いずれにせよ、「last」内の次の要素は、ステップ2608で「j」をインクリメントすることによって選択される。
「last」または「pred」の全要素が処理されると、プロセスはステップ2609で終了する。
なお、図26のプロセスにおける次の繰り返しに対して、構造「last」は、CU3のパレット予測子2505を記憶する「pred」のコピーを受信することによって、CU3(最後に使用されたパレットである可能性の高い)に対して使用されたパレットのパレット予測子を記憶するように更新することができる。なお、(新たな符号化ユニットCU4を処理する際)次の繰り返しのために最後に使用されたパレットが、CU3に対してパレット予測子2505から構築されるパレットである。したがって、このパレットは、次の繰り返しのために「pal」に記憶しなければならない、CU3に対して構築されるパレットである。
上述したように、本実施形態は、パレット予測子のサイズが増大し続ける傾向になるように各新パレット予測子を構築する方法を提供する。当然ながら、数NMAXは、パレット予測子の最大サイズまでの限定を提供する。しかし、NMAXは通常かなり大きく選択されて、パレットの最大サイズよりも大きいことが多い。
なお、新たに構築されたパレット予測子から新パレットの予測を実行するため、Use_predフラグのビットマップをクライエント装置に提供しなければならないことを想起すべきである。NMAXの値が大きいほど、ビットマップ内の外部Use_predフラグの数が大きくなる。このため、各フラグは少なくとも1ビットを要するので送信コストがかかる。
追加の技法を使用せずにこれらの外部コストを軽減する方法は、NcurおよびNlastの組み合わせとしてNMAXを算出することである。たとえば、NMAXはfact*Nlastと定義することができ、factは色フォーマットと影響を与えられた成分とに依存するであろう。たとえば、4:4:4:色フォーマットに対して、fact=6、他のフォーマットでは、ルーマの場合、fact=1、クロマの場合、fact=2である。
しかし、このアプローチは、最適な解決策ではないことが判明しており、特に図26の実施形態の場合、最適NMAXは約64であると判定されている。
下記の図27で提案される実施形態は、サイズを低減するために、ビットマップに対する修正シンタックスを提供する。具体的には、フラグのビットマップが、上記ビットマップの所定位置に少なくとも1つの要素を含み、ビットマップが、別のパレットを予測するパレット予測子のエントリの選択を定義する少なくとも1つの追加フラグを所定位置の後に含むか否かを信号伝達する。
図27は、パレット(たとえばCU3を処理するパレット)を予測するパレット予測子(たとえば予測子2505)と関連付けられたUse_predフラグに対する修正されたシンタックスを示す。なお、修正シンタックスはどのビットマップにも使用することができる。
上述のビットマップ(すなわち、修正シンタックス無し)は図27の上側に示す。このビットマップは通常2つの部分を含む。
部分2700は、「0」に設定されるフラグと「1」に設定されるフラグが混在する。部分2700は、「1」に設定される最後のフラグで終了する。この部分は、予測パレットで使用されるパレット予測子の全要素を定義する。
部分2701は、「0」に設定され、未再使用の要素に対応するフラグからのみ成る、ビットマップの残りの部分である。なお、ビットマップの最後の部分は、対応要素は普通古くてあまり使用されない要素であるため、「0」のみから成るのが普通である。
なお、2つの部分への分割は、ここでは例示のためだけに提供される。本発明による修正シンタックスが実施されない場合、ビットマップ2700+2701が提供される。
このビットマップの下方には、修正シンタックスを含むビットマップが示される。サイズが大幅に低減されていることが分かる。
修正シンタックスは、一連のUse_predフラグの特定位置に追加要素またはビットを挿入することによって、連続「0」フラグ2702の存在を活用する。
1例として、ビット2703および2704は、ビットマップにおいて「1」に設定された他のUse_predフラグがその後存在するか否かを示すために追加されている。
これらの追加ビットは指定「end−of−prediction」フラグであり、パレット予測子内の対応エントリが、現在構築中のパレット内のエントリを予測するエントリとして選択されるか否かを示す表示を提供しない。逆に、これらの追加フラグは、Use_predフラグを右にシフトさせる。
1例として、「end−of−prediction」フラグは、ビットマップの残りの部分に1に等しい他のフラグが存在することを示す値「0」を取り、一方、ビットマップの残りの部分に1に等しい他のフラグが存在しないことを示す値「1」を取るかもしれない。
2703および2704の例に関して、フラグ2703の値「0」は、サブパート2705において1に設定されているフラグによって実証されるように、ビットマップを用いて予測する残りの要素が存在することを示しており、一方、もはや予測される要素が存在しないため(他の全Use_predフラグが0に設定される)、フラグ2704が1に設定される。
結果として、whileフラグ2703および2704が追加され、サブパート2701は完全にスキップすることができるが、本例ではサブパート2702のみがスキップされて、送信コストが低減される。
追加の「end−of−prediction」フラグの位置は、パレットモードの特性に応じて予め定義されることが、好ましい。しかし、それらの位置は、以下を考慮に入れて選択すべきである。
小さなパレットに対して多すぎるUse_predフラグを送信することを回避するため、早めにend−of−predictionフラグを有する価値がある。
定期的な間隔で、理想的には2の累乗で、ビットマップを容易にパースできるようにend−of−predictionフラグを有する価値がある。
これを考慮に入れて、一つの実施形態は、end−of−predictionフラグに対する所定位置、4番目のUse_predフラグ位置の後、16番目のUse_predフラグ後に開始する8Use_predフラグ毎、24番目のUse_predフラグ後など、を提供する。
図27の下側は、ビットマップの修正シンタックスを復号するステップを示すフローチャートである。
プロセスのステップ2715〜2717は修正シンタックスに固有である。
ステップ2710は、ループカウンタ「i」を0に、予測要素の数「j」を0に設定することによって復号ループを初期化する。
次に、ステップ2711は、偶然予測子が空である(N=0)場合があるため、パレット予測子に要素が残っているか否か(i<N)、復号するフラグが残っていないか否か(要素の最大数NMAXを有するパレット)をチェックする。
さらに処理する要素がない場合、プロセスはステップ2718で終了する。
そうでない場合、Use_predフラグがステップ2712で、パレット予測子の要素iに対して復号される。
ステップ2713で、要素iが構築中のパレットを予測するのに使用されるか否かが判定される。たとえば、1に設定されるフラグは、パレット予測子の対応要素iが使用されることを意味する。
肯定の場合、使用要素の数「j」がステップ2714でインクリメントされる。
いずれにせよ、プロセスは、修正シンタックスがない場合のようにステップ2719に直接進むのではなく、ステップ2715を続ける。
ステップ2715は、「end−of−prediction」フラグ(たとえば2703または2704)が現在のi番目のUse_predフラグの次に存在するか否かをチェックする。たとえば、チェックは、「i」の値(たとえば、上で示唆したように4、16、24、・・・)に基づくことができる。
次のフラグが「end−of−prediction」フラグではない場合、ステップ2719に進むことによって通常のプロセスが再開する。
そうでなければ、「end−of−prediction」フラグがステップ2716で復号される。いったん復号されれば、ステップ2717は、「end−of−prediction」フラグが予測の最後を示す、すなわち1にセットされるか否かを判定する。
「end−of−prediction」フラグが予測の最後を示さない場合、ステップ2719で、ループカウンタ「i」のインクリメントを通じて次のUse_predフラグを選択することによって、Use_predフラグの復号が進む。
「end−of−prediction」フラグが予測の最後を示す場合、プロセスが2718で終了する。
このプロセスの結果として、すべての関連Use_predフラグが取得されて、パレット予測子のどの要素が、構築中のパレットを予測するために使用すべきかが判定されることになる。なお、Use_predフラグが取得されていない要素は未使用とみなさなければならない。
シンタックス要素に関する複数の他の実施形態では、パレット予測子を用いて現在のパレットを予測することが、現在のパレットの少なくとも1つの対応エントリとパレット予測子のエントリとの差に相当する少なくとも1つ(おそらくは2つ以上)のエントリ残差を取得することを有する。これらの実施形態では、現在のパレット要素とパレット予測子間の残差がビットストリームで送信される。残差Res[i]はPal[i]−Pal_Pred[j]と等しい。
ただし、Res[i]はレベルiに対する残差であり、Pal[i]はレベルiに対する現在のパレット要素であり、Pal_Pred[j]はレベルjによって特定される要素予測子である。なお、パレット予測子jは通常、デコーダによって分かっていない限り、送信する必要がある(たとえば、jがiに対して固定される。j=iなど)。
3つの色成分に関する残差の復号は、パレット要素の復号と異なる。事実、従来技術に記載されるように、パレット要素は、Nビットの固定長で符号化され、N=3*ビット深度である。残差に対しては、ビットを節減するため、各色空間残差は、ゴロム符号などの適応符号で符号化しても良い(ブロック残差の係数と同様)。
図21は、パレット要素と要素予測子との上記残差を有することに基づく復号プロセスを示す。また、この図は、パレット復号に関係する部分のみを示す。加えて、図の簡略化のため、ビットストリームは図示していない。
ステップ2101でパレットの復号されたサイズがビットストリームから抽出され、ステップ2102でPalette_sizeが復号されたSize+1に等しく設定される。各パレットエントリを連続的に検討するために使用される変数iは、ステップ2103で0に設定される。次に、パレットを復号するループは、全パレットエントリが処理されたか否かを判定するテスト2104から始まる。パレット要素iに対して、ステップ2105でflag Use_predがビットストリームから復号されて、パレット要素iが予測を使用するか否かを判定する(テスト2106)。パレット要素iが予測を使用しない場合、従来の機構を用いてステップ2107で復号され、iに等しいレベルでパレットに追加される。次いで、ステップ2108で変数iが1インクリメントされて次のパレット要素を検討する。パレット要素iが予測を使用する場合、ステップ2112で予測子インデックスjがビットストリームから復号される。なお、符号化効率の目的上、予測子インデックスjを符号化するのに使用される符号長はPredictor_of_Palette_size2110に依存する。よって、並行してパレット予測子2110が上述したように取得され、Predictor_of_Palette_size2011も取得される。
いったん予測子インデックスjが分かると、ステップ2113でパレット要素の残差Res[i]もビットストリームから復号される。次に、パレット予測子Pal_Pred2111を用いて、ステップ2114でパレット要素Pal[i]が式Res[i]+Pal_Pred[j]から算出される。次いで、パレット要素Pal[i]が現在のパレットに追加される。次に、変数iがステップ2108で1インクリメントされ、次のパレット要素を検討する。このプロセスの最後で現在のパレットは復号されている。
一つの実施形態では、インデックスjがiに等しく設定され、その場合、予測子インデックスjはもはやデコーダに送信する必要はない。したがって、モジュール2112は省略することができる。加えて、パレット予測子内の同一のエントリインデックス/レベルを有する対応エントリを有する現在のパレットの全要素に対して残差を取得することができる。この場合、iがPredictor_of_Palette_size以上である場合、残差は復号されない。さらに、デコーダはPredictor_of_Palette_sizeに基づきどのパレット要素を予測すべきかを知っているため、flag Use_predはもはや必要ではない。したがって、モジュール2105および2106は省略することができる。これらのアプローチは、予測子の信号伝達を排除することによって、パレット予測に必要な信号伝達ビット数を低減する。発生に応じてパレット要素が順序付けされると有益である。
複数の実施形態では、3つ(またはそれ以上)のうち1つまたは2つのみの色成分が予測される。
パレット予測子を取得する方法(図14〜18、22、24〜26)と、パレット予測子からパレットの予測を定義し信号伝達する方法(図19〜22、27)をいくつか上述した。これらの複数の実施形態は組み合わせることができ、現在のパレットがイントラ予測される場合を除いて、残差アプローチのみを使用することができる(そうでなければ、2つのエントリがパレット内で同じになる)。好適な実施形態では、パレット予測子は、CTBのラインまたはCTB毎にリセットされる、最後に復号されるCUであり、パレット予測子は、パレット予測子の要素を構築中の現在のパレットにコピーしなければならないか否かを示すフラグビットマップと共に信号伝達される。
図23は、本発明の1つ以上の実施形態を実施する演算装置2300の概略ブロック図である。演算装置2300は、マイクロコンピュータ、ワークステーション、または軽量携帯装置で良い。演算装置2300は、以下の構成要素に接続される通信バスを有する。
−CPUで示されるマイクロプロセッサなどの中央処理部2301
−本発明の実施形態の方法の実行用コードを記憶するRAMと示されるランダムアクセスメモリ2302、ならびに本発明の実施形態により画像の少なくとも一部を符号化または復号する方法を実行するのに必要な変数およびパラメータを記録するレジスタ。それらの記憶容量は、たとえば拡張ポートに接続される任意のRAMによって拡張することができる。
−本発明の実施形態を実施するコンピュータプログラムを記憶する、ROMで示す読出し専用メモリ2303
−通常は処理対象のデジタルデータを送受信する通信ネットワークに接続されるネットワークインタフェース2304。ネットワークインタフェース2304は、単独のネットワークインタフェースとする、あるいは1セットの様々なネットワークインタフェース(たとえば、有線および無線インタフェース、または各種有線または無線インタフェース)から構成することができる。データパケットは、CPU2301で動作するソフトウェアアプリケーションの制御下で、送信用のネットワークインタフェースに書き込む、あるいは受信用のネットワークインタフェースから読み取ることができる。
−ユーザインタフェース2305は、ユーザからの入力を受信し、ユーザへの情報を表示するために使用することのできる
−大量記憶装置として提供することができる、HDで示すハードディスク2306
−I/Oモジュール2307はビデオ源やディスプレイなどの外部装置との間でデータを送受信するために使用することができる。
実行可能コードは、読出し専用メモリ2303、ハードディスク2306、または、たとえばディスクなどの脱着可能なデジタル媒体に記憶することができる。一つの変形例によると、プログラムの実行可能コードは、実行前にハードディスク2306などの通信装置2300の記憶手段のうちの1つに記憶するため、ネットワークインタフェース2304を介して通信ネットワークによって受信することができる。
中央処理部2301は、1つまたは複数の本発明の実施形態に従う一つまたは複数のプログラムのソフトウェアコードの命令または一部の実行を制御指示するように構成され、その命令は上記記憶手段のうちの1つに記憶される。電源投入後、CPU2301は、命令がたとえばプログラムROM2303またはハードディスク(HD)2306からロードされた後、ソフトウェアアプリケーションに関連する主RAMメモリ2302からの命令を実行することができる。このようなソフトウェアアプリケーションはCPU2301によって実行されると、図14、15、17、19、21、22、24〜27に示すフローチャートのステップを実行させる。
図14、15、17、19、21、22、24〜27に示すアルゴリズムのどのステップも、PC(「パーソナルコンピュータ」)、DSP(「デジタル信号プロセッサ」)、またはマイクロコントローラなどのプログラマブル演算器を用いて1セットの命令またはプログラムを実行することによってソフトウェア的に実施することができる、あるいは、FPGA(「フィールドプログラマブルゲートアレイ」)またはASIC(「特定用途向け集積回路」)などのマシンまたは専用コンポーネントを用いてハードウェア的に実施することができる。
ここで、本発明は具体的な実施形態を参照して説明したが、本発明は具体的な実施形態に限定されず、当業者にとっては本発明の範囲に属する変更が自明であろう。
上記の例示的実施形態を参照することで、多くの他の修正および変形が当業者に示唆され、それらの変更および変形は例示のためだけに提示され、添付の請求項によってのみ定義される発明の範囲を限定するものではない。具体的には、異なる実施形態の異なる特徴は適宜交換することができる。
請求項において、「有する (comprising)」という文言は、他の要素またはステップを排除せず、不定冠詞「a」または「an」は複数を除外しない。異なる特徴が互いに異なる従属項において記載されるという事実だけでは、これらの特徴の組み合わせを有効に利用できないことを意味しない。