(57)【特許請求の範囲】
【請求項１】
ビットストリームから画像を復号する復号方法であって、
前記ビットストリームから、処理対象のブロックのためのパレットに係る情報を取得する取得ステップと、
前記パレットに係る情報を用いて、前記パレットを導出する導出ステップと、
前記導出ステップにおいて導出された前記パレットを用いて、前記処理対象のブロックを復号する復号ステップと
を有し、
前記パレットはエントリのセットを含み、
前記エントリは、インデックスと、画素値を示す情報とを含み、
前記導出ステップにおいて、導出対象のインデックスが対応する画素の上の画素に対応するインデックスを前記導出対象のインデックスとしてコピーして用いる所定のモードを用いて、前記パレットを導出可能であり、
前記パレットに係る情報は、前記所定のモードが連続して適用される画素を特定するためのＲｕｎと、同じインデックスが連続して適用される画素を特定するためのＲｕｎとを含み、
前記パレットに係る情報は、更に、前記処理対象のブロック中の最後のＲｕｎであることを示すフラグであって、当該最後のＲｕｎに対応する連続する画素に対応する各インデックスが前記所定のモードを用いて導出されることを示すフラグを含む
ことを特徴とする復号方法。
【請求項２】
前記復号ステップにおいて、
前記インデックスに対応する画素値に含まれない画素値に対応する逸脱画素値を前記ビットストリームから導出し、少なくとも前記逸脱画素値を用いて、前記処理対象のブロック中の各画素における画素値を順番に導出する
ことを特徴とする請求項１記載の復号方法。
【請求項３】
画像を符号化してビットストリームを生成する符号化方法であって、
処理対象のブロックのためのパレットを用いて、当該処理対象のブロックを符号化する符号化ステップを有し、
前記符号化ステップにおいて、前記処理対象のブロックのためのパレットに係る情報を符号化し、
前記パレットはエントリのセットを含み、
前記エントリは、インデックスと、画素値を示す情報とを含み、
前記パレットに係る情報は、処理対象のインデックスが対応する画素の上の画素に対応するインデックスを前記処理対象のインデックスとしてコピーして用いる所定のモードを用いることを示す情報を含み、
前記パレットに係る情報は、更に、前記所定のモードが連続して適用される画素を特定するためのＲｕｎと、同じインデックスが連続して適用される画素を特定するためのＲｕｎとを含み、
前記パレットに係る情報は、更に、前記処理対象のブロック中の最後のＲｕｎであることを示すフラグであって、当該最後のＲｕｎに対応する連続する画素に対応する各インデックスが前記所定のモードを用いて導出されることを示すフラグを含む
ことを特徴とする符号化方法。
【請求項４】
前記符号化ステップにおいて、
前記インデックスに対応する画素値に含まれない画素値に対応する逸脱画素値を示す情報を符号化する
ことを特徴とする請求項３記載の符号化方法。
【請求項５】
ビットストリームから画像を復号する復号装置であって、
前記ビットストリームから、処理対象のブロックのためのパレットに係る情報を取得する取得手段と、
前記パレットに係る情報を用いて、前記パレットを導出する導出手段と、
前記導出手段において導出された前記パレットを用いて、前記処理対象のブロックを復号する復号手段と
を有し、
前記パレットはエントリのセットを含み、
前記エントリは、インデックスと、画素値を示す情報とを含み、
前記導出手段は、導出対象のインデックスが対応する画素の上の画素に対応するインデックスを前記導出対象のインデックスとしてコピーして用いる所定のモードを用いて、前記パレットを導出可能であり、
前記パレットに係る情報は、前記所定のモードが連続して適用される画素を特定するためのＲｕｎと、同じインデックスが連続して適用される画素を特定するためのＲｕｎとを含み、
前記パレットに係る情報は、更に、前記処理対象のブロック中の最後のＲｕｎであることを示すフラグであって、当該最後のＲｕｎに対応する連続する画素に対応する各インデックスが前記所定のモードを用いて導出されることを示すフラグを含む
ことを特徴とする復号装置。
【請求項６】
画像を符号化してビットストリームを生成する符号化装置であって、
処理対象のブロックのためのパレットを用いて、当該処理対象のブロックを符号化する符号化手段を有し、
前記符号化手段は、前記処理対象のブロックのためのパレットに係る情報を符号化し、
前記パレットはエントリのセットを含み、
前記エントリは、インデックスと、画素値を示す情報とを含み、
前記パレットに係る情報は、処理対象のインデックスが対応する画素の上の画素位対応するインデックスを前記処理対象のインデックスとしてコピーして用いる所定のモードを用いることを示す情報を含み、
前記パレットに係る情報は、更に、前記所定のモードが連続して適用される画素を特定するためのＲｕｎと、同じインデックスが連続して適用される画素を特定するためのＲｕｎとを含み、
前記パレットに係る情報は、更に、前記処理対象のブロック中の最後のＲｕｎであることを示すフラグであって、当該最後のＲｕｎに対応する連続する画素に対応する各インデックスが前記所定のモードを用いて導出されることを示すフラグを含む
ことを特徴とする符号化装置。
【請求項７】
請求項１又は２に記載の復号方法を、コンピュータに実行させることを特徴とするプログラム。
【請求項８】
請求項３又は４に記載の符号化方法を、コンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はビデオ符号化および復号に関する。より正確には、本発明はパレットモード符号化の方法に関する。パレットモードは、ＨＥＶＣレンジ拡張の範囲の中で提供された符号化方法であり、現在、ＨＥＶＣのスクリーンコンテンツ符号化拡張のため検討中である。この符号化方法は、「スクリーンコンテンツ」ビデオシーケンスを対象としたビデオ符号化に対して効率的である。
【背景技術】
【０００２】
本発明は、画素の現在のブロックが、インデックスのブロックを使って符号化される場合の符号化のモードに適用し、該インデックスのブロックは、いわゆるパレットから構築される。
【０００３】
本文書におけるパレットは、インデックスを画素の値に関連付けるエントリを有するルックアップテーブルとして定義される。必然ではないが、通常、画素の値は、その画素に関連付けられた各カラー成分の値で構成され、カラーパレットをもたらす。他方、画素の値を単一の画素成分で構成することもでき、白黒のパレットがもたらされる。
【０００４】
画素ブロックの符号化のこのモードは、一般に、パレット符号化モードと言われる。このモードを、例えば、高効率ビデオ符号化（ＨＥＶＣ（Ｈｉｇｈ  Ｅｆｆｉｃｉｅｎｃｙ  Ｖｉｄｅｏ  Ｃｏｄｉｎｇ）：ＩＳＯ／ＩＥＣ  ２３００８−２  ＭＰＥＧ−Ｈパート２／ＩＴＵ−Ｔ  Ｈ．２６５）国際規格のレンジ拡張に採用することが考慮された。このモードは、ＨＥＶＣのスクリーンコンテンツ符号化（ＳＣＣ：Ｓｃｒｅｅｎ  Ｃｏｎｔｅｎｔ  Ｃｏｄｉｎｇ）拡張のドラフトスペシフィケーションで現在検討中である。
【０００５】
ビデオシーケンス中の画像を符号化するとき、画像は、最初に、符号化ツリーブロック（ＣＴＢ：Ｃｏｄｉｎｇ  Ｔｒｅｅ  Ｂｌｏｃｋ）と言われる、等サイズの画素の符号化エンティティに分割される。符号化ツリーブロックのサイズは、通常、６４×６４画素である。次いで、各符号化ツリーブロックは、より小さなブロックの階層ツリーに分解することができ、そのサイズは変わり得て、符号化対象の実際の画素ブロックとなる。これら符号化対象のより小さなブロックは符号化ユニット（ＣＵ：Ｃｏｄｉｎｇ  Ｕｎｉｔ）と言われる。
【０００６】
個別の符号化ユニットの符号化は、通常、予測される。このことは、最初に予測因子ブロックが算定されることを意味する。次に、予測因子ブロックと符号化ユニットとの間の差異が計算される。この差は、残差または残差ブロックと呼ばれる。次に、この残差が圧縮される。符号化ユニットの実際の符号化情報は、予測因子ブロックおよび圧縮残差を算定の方法を示すためのいくつかの情報で構成される。最良の予測因子ブロックは、効率的に圧縮可能で小さな残差を得るために、符号化ユニットにできるだけ類似したブロックである。
【０００７】
符号化モードは、符号化ユニットの予測符号化方法のための予測因子ブロックを算定するのに使われる方法に基づいて定義される。
【０００８】
第一の符号化モードはＩＮＴＲＡ(イントラ)モードと言われる。ＩＮＴＲＡモードによれば、予測因子ブロックは、現在の画像内の符号化ユニットを直接的に取り囲む画素の値に基づいて構築される。予測因子ブロックは、現在の画像のブロックでなく構成材であることに留意すべきである。予測因子ブロックを構築するため、境界のどの画素群を実際に使い、それらをどのように使うのかを決めるために、１つの方向が用いられる。ＩＮＴＲＡモードの背景にある考え方は、自然画像の一般的一貫性に起因して、符号化ユニットを直接に取り囲む画素は現在の符号化ユニットの画素と類似している可能性が高い、ということである。したがって、これら周囲の画素に基づく予測因子ブロックを用いて、符号化ユニットの画素の値の良好な予測を得ることが可能である。
【０００９】
第二の符号化モードは、ＩＮＴＥＲ（インター）モードと言われる。ＩＮＴＥＲモードによれば、予測因子ブロックは別の画像のブロックである。ＩＮＴＥＲモードの背景にある考え方は、シーケンスにおいて次に続く画像は一般に非常に近似している、ということである。主な差異は、通常、カメラの視野移動に起因するまたはシーン中の被写体の動きに起因する、これらの画像の間での動きからくる。予測因子ブロックは、現在の画像内の符号化ユニットの或る位置に対し、ベクトルが、参照画像中の当該位置を示すことによって算定される。このベクトルは動きベクトルと言われる。このモードによれば、本モードを使うかかる符号化ユニットの符号化は、動きベクトルおよび圧縮残差を含む動き情報を含む。
【００１０】
本文書では、パレットモードと呼ばれる第三の符号化モードに焦点を当てる。パレットモードの旧バージョンによれば、予測因子ブロックは、所与の符号化ブロックに対しパレットからのインデックスのブロックとして定義され、予測因子ブロックは、予測因子ブロック中の各画素の位置に対し、符号化ユニット中で同じ位置を有する（すなわち同一場所配置の）画素の値に最も近い、パレット中の画素値に関連付けられたインデックスを包含する。予測因子ブロックは、しかして、符号化ユニットと同じサイズを有する。（画素ドメインにおける）予測因子ブロックと符号化ユニットとの間の差を表す残差が次いで計算される。また、残差も、符号化ユニットと予測因子ブロックとで同じサイズを有する。
【００１１】
パレット中へのエントリインデックスは、「レベル」と呼ばれることもある。
【００１２】
ＨＥＶＣ  ＳＣＣにおいて検討中のパレットモードの最新のバージョンでは、残差は（図７中で後に説明するように）形成されずにデコーダに送信されることもない。パレットを使って形成されたインデックスのブロックだけが、画素の現在のブロックを表すためにビットストリーム中にコード化される。
【００１３】
一部の画素は、最良のパレットエントリによっても劣悪に表現されることがある。すなわち、これらの画素と最良のパレットエントリとの間の差は大きい。かかる画素を表すためにインデックスを使う価値がないことがある。
【００１４】
しかして、該パレットモードは、かかる画素を識別し、近似のインデックスを用いる代わりに、それらの明示的な画素値を符号化することを可能にする。かかるアプローチは、（パレットエントリによって行われた近似を表す）残差が送信されない場合、特に重要である。画素値が明示的に符号化された、かかる画素は「エスケープ画素」と名付けられ、パレット中の画素値に関連付けられたインデックスのブロックの中には対応するインデックスが設けられない。ＨＥＶＣの現行の実装では、「エスケープ画素」は、画素値に関連付けられていないパレットのエントリインデックスを用いて、インデックスのブロック中でシグナリングされる。
【００１５】
パレットモードのかかる実装において、エスケープ画素値を格納するために、インデックスのブロックおよびパレットに加えて、エスケープ画素値のブロックが構築される。
【００１６】
符号化済みの現在の符号化ユニットを表すビットストリームに加えるため、予測因子ブロック（すなわち、インデックスのブロック）、エスケープ画素値のブロック、ならびに、場合によって残差およびパレットが符号化される。
【００１７】
パレットモードに対するインデックスのブロックを符号化するために、シンタクス要素の複数のセットが用いられ、各セットは、インデックスのブロック中に連続したブロック位置を有する、対応インデックスのグループを生成するための演算を設定する。
【００１８】
ＨＥＶＣのスクリーンコンテンツ符号化拡張の現在のドラフトスペシフィケーションでは、ブロックマトリックス中の上側またはその左側のインデックスを参照してインデックスのブロックの各インデックスを符号化する、「上側コピー」予測および「左側値」予測が提案されている。
【００１９】
「Ｐｒｅｄ  ｍｏｄｅ」と言われる１つのシンタクス要素は、上で定義されたＲｕｎが終了しない限り、インデックスのブロック中のインデックスの対応グループに対して、すなわちブロックの各現在のインデックスに対して、選択された演算または予測モードを指定する。「Ｌｅｖｅｌ」と言われる、随意的な（「Ｐｒｅｄ  ｍｏｄｅ」の関数）第二のシンタクス要素は、「左側値」予測モードにおいてのみ、対応するインデックスのグループに対する新規インデックス値を指定する。さらに、「Ｒｕｎ」と言われる、第三のそして最後のシンタクス要素は、「Ｐｒｅｄ  ｍｏｄｅ」シンタクス要素によって定義された演算が、どのくらいの多くの連続するブロック位置に適用されるかを指定する。言い換えれば、このシンタクス要素は、対応するインデックスのグループ中の（連続するブロック位置を有する）インデックスの数を定義する。
【００２０】
本発明の諸実施形態は、パレットモードの符号化効率を向上する。
【発明の概要】
【課題を解決するための手段】
【００２１】
本発明の復号方法は以下の構成を有する。すなわち、ビットストリームから画像を復号する復号方法であって、前記ビットストリームから、処理対象のブロックのためのパレットに係る情報を取得する取得ステップと、前記パレットに係る情報を用いて、前記パレットを導出する導出ステップと、前記導出ステップにおいて導出された前記パレットを用いて、前記処理対象のブロックを復号する復号ステップとを有し、前記パレットはエントリのセットを含み、前記エントリは、インデックスと、画素値を示す情報とを含み、前記導出ステップにおいて、導出対象のインデックスが対応する画素の上の画素に対応するインデックスを前記導出対象のインデックスとしてコピーして用いる所定のモードを用いて、前記パレットを導出可能であり、前記パレットに係る情報は、前記所定のモードが連続して適用される画素を特定するためのＲｕｎと、同じインデックスが連続して適用される画素を特定するためのＲｕｎとを含み、前記パレットに係る情報は、更に、前記処理対象のブロック中の最後のＲｕｎであることを示すフラグであって、当該最後のＲｕｎに対応する連続する画素に対応する各インデックスが前記所定のモードを用いて導出されることを示すフラグを含む。
本発明の符号化方法は以下の構成を有する。すなわち、画像を符号化してビットストリームを生成する符号化方法であって、処理対象のブロックのためのパレットを用いて、当該処理対象のブロックを符号化する符号化ステップを有し、前記符号化ステップにおいて、前記処理対象のブロックのためのパレットに係る情報を符号化し、前記パレットはエントリのセットを含み、前記エントリは、インデックスと、画素値を示す情報とを含み、前記パレットに係る情報は、処理対象のインデックスが対応する画素の上の画素に対応するインデックスを前記処理対象のインデックスとしてコピーして用いる所定のモードを用いることを示す情報を含み、前記パレットに係る情報は、更に、前記所定のモードが連続して適用される画素を特定するためのＲｕｎと、同じインデックスが連続して適用される画素を特定するためのＲｕｎとを含み、前記パレットに係る情報は、更に、前記処理対象のブロック中の最後のＲｕｎであることを示すフラグであって、当該最後のＲｕｎに対応する連続する画素に対応する各インデックスが前記所定のモードを用いて導出されることを示すフラグを含む。
第一態様において、本発明は、ビットストリームからの画像中の画素の現在のブロックを復号する方法を提供し、本方法は、
インデックスのブロック、エスケープ画素値、およびパレットを得るステップであって、パレットは、それぞれのエントリインデックスを対応画素値に関連付けるエントリセットを含み、エスケープ画素値は、パレット中の画素値に関連付けられたインデックスのブロックの中に対応するインデックスを持たない画素に対する画素値を含む、該得るステップと、
インデックスのブロック、エスケープ画素値、およびパレットから画素の復号された現在のブロックを形成するステップと、
を含み、
インデックスのブロックを得るステップが、
インデックスのブロック中に、連続するブロック位置を有するインデックスのグループを生成するため、ビットストリームからシンタクス要素を取得するステップと、
そのシンタクス要素に基づいて、インデックスのブロックのインデックスを生成するス
テップと、
を含み、
取得されたシンタクス要素は、インデックスのグループの１つを形成するインデックスが、残りのブロック位置の数に関係なくインデックスのブロックの終端までの全ての残りのブロック位置にあるインデックスであることを表す、終端まで−符号語で示されるシンタクス要素を含む。
【００２２】
第二態様において、本発明は、画像中の画素の現在のブロックを符号化する方法を提供し、本方法は、
画素の現在のブロックおよびパレットから、インデックスのブロックおよびエスケープ画素値を生成するステップであって、パレットは、それぞれのエントリインデックスを対応画素値に関連付けるエントリのセットを含み、エスケープ画素値は、パレット中の画素値に関連付けられたインデックスのブロックの中に対応するインデックスを持たない画素に対する画素値を含む、該生成するステップと、
インデックスのブロックおよびエスケープ画素値を符号化するステップと、
を含み、
インデックスのブロックを符号化するステップは、
インデックスのブロック中に連続するブロック位置を有するインデックスのグループを生成するためのシンタクス要素を生成するステップ、
を含み、
該シンタクス要素は、インデックスのグループの１つを形成するインデックスが、残りのブロック位置の数に関係なくインデックスのブロックの終端までの全ての残りのブロック位置にあるインデックスであることを表す、終端まで−符号語で示されるシンタクス要素を含む。
【００２３】
第一および第二態様の実施形態において、終端まで−符号語はフラグを含むことが可能である。エスケープ画素値は、かかるエスケープ画素値のブロックを含んでよい。
【００２４】
諸実施形態において、これらシンタクス要素が、インデックスの定義された数に関連付けられ、インデックスのブロックのインデックスの１グループに対応する、所定符号語を使用し、インデックスのブロック中の最後のブロック位置群に対応するシンタクス要素が、終端まで−符号語を使用する。
【００２５】
インデックスの定義された数に関連付けられた所定符号語は短縮符号語とすることができ、インデックスの他の定義された数に関連付けられた他の所定符号語は、共通の符号語接頭辞と可変の符号語接尾辞とで構成することが可能で、終端まで−符号語はこの共通の符号語接頭辞を含んでよい。例えば、終端まで−符号語は、共通の符号語接頭辞に加え、１ビットの接尾辞を含めればよい。
【００２６】
諸実施形態において、シンタクス要素はセットとして設けられ、シンタクス要素の或るセットに対応するインデックスのグループの生成は、そのセットの第一シンタクス要素により決まり、インデックスを生成するために使われる演算は、
真上のブロック位置にあるインデックスを繰り返すこと、および
セットの第二シンタクス要素中に符号化されたインデックスを繰り返すこと、
のうちの１つである。
【００２７】
さらなる態様において、プログラムを格納した非一時的コンピュータ可読媒体が提供され、該プログラムは、デバイス中のマイクロプロセッサまたはコンピュータシステムによって実行されると、そのデバイスに前述の態様および実施形態のいずれかの方法を遂行させる。
【００２８】
別の態様において、実行されるといずれかの前述の態様または実施形態の方法を遂行させる、コンピュータプログラムが提供される。本コンピュータプログラムは、マシン可読媒体などの担体上に具現化することが可能である。
【００２９】
他の態様において、第二の態様またはその実施形態を用いて生成されるビットストリーム、および前記ビットストリームを格納するストレージ媒体が提供される。かかるストレージ媒体は、例えば、Ｂｌｕ−Ｒａｙディスク、ＤＶＤ、ＣＤ−ＲＯＭ、または別のデバイス可読の媒体の形をとることができよう。
【００３０】
別の態様において、前述の態様または実施形態のいずれかの方法を実行するようになされた手段を含むデバイスが提供される。
【００３１】
本発明のさらなる態様において、ビットストリームからの画像中の画素の現在のブロックを復号するための復号デバイスが提供され、本復号デバイスは、
インデックスのブロック、エスケープ画素値、およびパレットを得るための手段であって、パレットは、それぞれのエントリインデックスを対応画素値に関連付けるエントリのセットを含み、エスケープ画素値は、パレット中の画素値に関連付けられたインデックスのブロックの中に対応するインデックスを持たない画素に対する画素値を含む、該得るための手段と、
インデックスのブロック、エスケープ画素値、およびパレットから画素の復号された現在のブロックを形成するための手段と、
を含み、
インデックスのブロックを得るステップが、
インデックスのブロック中に、連続するブロック位置を有するインデックスのグループを生成するため、ビットストリームからシンタクス要素を取得するステップと、
そのシンタクス要素に基づいて、インデックスのブロックのインデックスを生成するステップと、
を含み、
取得されたシンタクス要素は、インデックスのグループの１つを形成するインデックスが、残りのブロック位置の数に関係なくインデックスのブロックの終端までの全ての残りのブロック位置にあるインデックスであることを表す、終端まで−符号語で示されるシンタクス要素を含む。
【００３２】
本発明のさらに別の態様において、画像中の画素の現在のブロックを符号化するための符号化デバイスが提供され、本符号化デバイスは、
画素の現在のブロックおよびパレットから、インデックスのブロックおよびエスケープ画素値を生成するための手段であって、パレットは、それぞれのエントリインデックスを対応画素値に関連付けるエントリのセットを含み、エスケープ画素値は、パレット中の画素値に関連付けられたインデックスのブロックの中に対応するインデックスを持たない画素に対する画素値を含む、該生成するための手段と、
インデックスのブロックおよびエスケープ画素値を符号化するための手段と、
を含み、
インデックスのブロックを符号化するステップは、
インデックスのブロック中に連続するブロック位置を有するインデックスのグループを生成するためのシンタクス要素を生成するステップ、
を含み、
該シンタクス要素は、インデックスの対応するグループの１つを形成するインデックスが、残りのブロック位置の数に関係なくインデックスのブロックの終端までの全ての残りのブロック位置にあるインデックスであることを表す、終端まで−符号語で示されるシンタクス要素を含む。
【００３３】
別の態様において、本発明は、ビットストリームからの画像中の画素の現在のブロックを復号する方法を提供し、本方法は、
インデックスのブロック、エスケープ画素値、およびパレットを得るステップであって、パレットは、それぞれのエントリインデックスを対応画素値に関連付けるエントリのセットを含み、エスケープ画素値は、パレット中の画素値に関連付けられたインデックスのブロックの中に対応するインデックスを持たない画素に対する画素値を含む、該得るステップと、
インデックスのブロック、エスケープ画素値、およびパレットから画素の復号された現在のブロックを形成するステップと、
を含み、
インデックスのブロックを得るステップが、
インデックスのブロック中に、連続するブロック位置を有するインデックスのグループを生成するため、ビットストリームからシンタクス要素を取得するステップであって、連続するブロック位置の数がランによって示される、該取得するステップと、
そのシンタクス要素に基づいて、インデックスのブロックのインデックスを生成するステップと、
を含み、
取得されたシンタクス要素は、インデックスのグループのランが復号されているブロック中の最後のランであるときを示す、ビットストリーム中のフラグを含む。さらなる態様において、前記復号の方法を遂行するための手段、または遂行するよう構成されたプロセッサを有するデバイス、ならびに実行されると前記復号の方法を遂行させるコンピュータプログラムが提供される。
【００３４】
第二態様において、本発明は、画像中の画素の現在のブロックを符号化する方法を提供し、本方法は、
画素の現在のブロックおよびパレットから、インデックスのブロックおよびエスケープ画素値を生成するステップであって、パレットは、それぞれのエントリインデックスを対応画素値に関連付けるエントリのセットを含み、エスケープ画素値は、パレット中の画素値に関連付けられたインデックスのブロックの中に対応するインデックスを持たない画素に対する画素値を含む、該生成するステップと、
インデックスのブロックおよびエスケープ画素値を符号化するステップと、
を含み、
インデックスのブロックを符号化するステップは、
インデックスのブロック中に連続するブロック位置を有するインデックスのグループを生成するためのシンタクス要素を生成するステップであって、インデックスのグループの連続するブロック位置の数はランによって示される、該生成するステップ、
を含み、
シンタクス要素は、ビットストリーム中のフラグを含み、該フラグは、復号されているブロック中のインデックスのグループのランが最後のランであるときを示す。さらなる態様において、前記復号の方法を遂行するための手段、または遂行するよう構成されたプロセッサを有するデバイス、ならびに実行されると前記方法を遂行させるコンピュータプログラムが提供される。
【００３５】
シンタクス要素の最後のセット（すなわち、符号化ユニット中の最後の画素群に対するセット）は、多くの場合、多数の画素（インデックス）に対し、特に、画像の終端部は通常単調なので画像の最後の符号化ユニットに対して適用される。しかして、かかる「終端まで」値またはフラグの使用は、それが、最後の「Ｒｕｎ」にかかわる多数のインデックスを表す値を符号化するための大量のビットの使用を回避できるので、符号化の効率を向上する。
【００３６】
さらに、（特に復号ループ中の）シンタクス要素の最後のセットに対し処理されるインデックスの数の制御も回避が可能である。これは、「終端まで」値またはフラグのおかげで、全ての残りのインデックスが含まれることが分かっているからである。
【００３７】
或る態様において、本発明は、ビットストリームからの画像中の画素の現在のブロックを復号する方法を提供し、本方法は、
インデックスのブロック、エスケープ画素値のブロック、およびパレットを得るステップであって、パレットは、それぞれのエントリインデックスを対応画素値に関連付けるエントリのセットを含み、エスケープ画素値のブロックは、パレット中の画素値に関連付けられたインデックスのブロックの中に対応するインデックスを持たない画素に対する画素値を含む、該得るステップと、
インデックスのブロック、エスケープ画素値のブロック、およびパレットから画素の復号された現在のブロックを形成するステップと、
を含み、
インデックスのブロックを得るステップが、
インデックスのブロック中に、連続するブロック位置を有するインデックスの対応グループを生成するため、ビットストリームから、各セットが演算を設定するシンタクス要素の複数のセットを得るステップと、
そのシンタクス要素のセットに基づいて、インデックスのブロックのインデックスを生成するステップと、
を含み、
各セット中に与えられた或るシンタクス要素（例えば、ＨＥＶＣのスクリーンコンテンツ符号化のドラフトスペシフィケーション中のＲｕｎ要素）は、インデックスの対応グループを形成するインデックスが、残りのブロック位置の数に関係なくインデックスのブロックの終端までのかかる全ての残りのブロック位置にあるインデックスであることを示す、終端まで−符号語を含め、少なくとも２つ利用可能な符号語から選択された符号語を使用する。
【００３８】
符号語の使用とは、かかる符号語が与えられたシンタクス要素中に設定されることを意味する。
【００３９】
また、画像中の画素の現在のブロックを符号化する方法も提供され、本方法は、
画素の現在のブロックおよびパレットから、インデックスのブロック、エスケープ画素値のブロックを生成するステップであって、パレットは、それぞれのエントリインデックスを対応画素値に関連付けるエントリのセットを含み、エスケープ画素値のブロックは、パレット中の画素値に関連付けられたインデックスのブロックの中に対応するインデックスを持たない画素に対する画素値を含む、該生成するステップと、
インデックスのブロックおよびエスケープ画素値のブロックを符号化するステップと、
を含み、
インデックスのブロックを符号化するステップは、
シンタクス要素の複数のセットを生成するステップであって、各セットは、デコーダが、インデックスのブロック中に連続するブロック位置を有するインデックスの対応グループを生成するための演算を設定する、該生成するステップ、
を含み、
各セット中に与えられた或るシンタクス要素は、インデックスの対応グループを形成するインデックスが、残りのブロック位置の数に関係なくインデックスのブロックの終端までのかかる全ての残りのブロック位置にあるインデックスであることを示す、終端まで−符号語を含め、少なくとも２つ利用可能な符号語のセットから選択された符号語を使用する。
【００４０】
上記に応じて、本発明の前述の実施形態は、ビットストリームからの画像中の画素の現在のブロックを復号するための復号デバイスを提供し、本復号デバイスは、
インデックスのブロック、エスケープ画素値のブロック、およびパレットを得るステップであって、パレットは、それぞれのエントリインデックスを対応画素値に関連付けるエントリのセットを含み、エスケープ画素値のブロックは、パレット中の画素値に関連付けられたインデックスのブロックの中に対応するインデックスを持たない画素に対する画素値を含む、該得るステップと、
インデックスのブロック、エスケープ画素値のブロック、およびパレットから画素の復号された現在のブロックを形成するステップと、
を実行するよう構成された少なくとも１つのマイクロプロセッサを含み、
インデックスのブロックを得るステップが、
ビットストリームからシンタクス要素の複数のセットを得るステップであって、各セットは、インデックスのブロック中に連続するブロック位置を有するインデックスの対応グループを生成するための演算を設定する、該得るステップと、
シンタクス要素のセットに基づいて、インデックスのブロックのインデックスを生成するステップと、
を含み、
各セット中に設けられた或るシンタクス要素は、インデックスの対応グループを形成するインデックスが、残りのブロック位置の数に関係なくインデックスのブロックの終端までのかかる全ての残りのブロック位置にあるインデックスであることを示す、終端まで−符号語を含め、少なくとも２つ利用可能な符号語から選択された符号語を使用する。
【００４１】
さらに、画像中の画素の現在のブロックを符号化するための符号化デバイスが提供され、本符号化デバイスは、
画素の現在のブロックおよびパレットから、インデックスのブロック、およびエスケープ画素値のブロックを生成するステップであって、パレットは、それぞれのエントリインデックスを対応画素値に関連付けるエントリのセットを含み、エスケープ画素値のブロックは、パレット中の画素値に関連付けられたインデックスのブロックの中に対応するインデックスを持たない画素に対する画素値を含む、該生成するステップと、
インデックスのブロックおよびエスケープ画素値のブロックを符号化するステップと、
を実行するよう構成された少なくとも１つのマイクロプロセッサを含み、
インデックスのブロックを符号化するステップは、
シンタクス要素の複数のセットを生成するステップであって、各セットは、デコーダがインデックスのブロック中に連続するブロック位置を有するインデックスの対応グループを生成するための演算を設定する、該生成するステップ、
を含み、
各セット中に与えられた或るシンタクス要素は、インデックスの対応グループを形成するインデックスが、残りのブロック位置の数に関係なくインデックスのブロックの終端までのかかる全ての残りのブロック位置にあるインデックスであることを示す、終端まで−符号語を含め、少なくとも２つ利用可能な符号語のセットから選択された符号語を使用する。
【００４２】
これらの実施形態の随意的特徴が従属請求項に定義されている。これらの特徴のいくつかは、本明細書で方法を参照しながら以下に説明され、それらは、本発明の実施形態によるデバイスに専用のシステム特徴に転用することが可能である。
【００４３】
いくつかの実施形態において、設定シンタクス要素に対する少なくとも２つの利用可能な符号語のセットは、インデックスの定義された数に関連付けられた所定符号語を含み、該設定シンタクス要素は、インデックスのブロック中の最後のブロック位置に対応する最後セットと言われるセットを除き、インデックスのブロックのインデックスのグループに対応する各セットに対し、かかる所定符号語の１つを使用し、該最後セットの設定シンタクス要素は、終端まで−符号語を使用する。
【００４４】
この設定は、既知のシンタクス要素に対し追加の符号語（終端まで−符号語）を挿入することにより符号化効率を節約する。
【００４５】
特定の実施形態によれば、インデックスの定義された数に関連付けられたいくつかの所定符号語は短縮符号語であり、インデックスの他の定義された数に関連付けられた他の所定符号語は、共通の符号語接頭辞と、所定符号語相互の間で異なる符号語接尾辞とで構成され、終端まで−符号語はこの共通の符号語接頭辞を含む。
【００４６】
これらの短縮符号語は、通常、（ビットに関して）共通符号語接頭辞以下の長さである。
【００４７】
この構成は効率的な符号化を提供する。これは、終端まで−符号語が、符号化ユニット（画素のブロック）中で多くて１回は使われるので、インデックスの最頻度の数に対し、短縮符号語を保つことがより効率的であることによる。
【００４８】
ある特定の実施形態において、終端まで−符号語は、共通の符号語接頭辞に加え１ビットの接尾辞を含む。言い換えれば、共通の符号語接頭辞を有する最短の符号語が、「終端まで」符号語に用いられる。これは符号化効率を維持することを意図している。
【００４９】
共通符号語接頭辞と１つの接尾辞とで構成された終端まで−符号語の使用に換えて、終端まで−符号語は、特定の短縮符号語（すなわち共通符号語接頭辞なし）としてもよい。
【００５０】
諸実施形態において、シンタクス要素のセットに対応するインデックスのグループを生成するための演算は、該セットの第一シンタクス要素（例えば、Ｐｒｅｄ＿ｍｏｄｅ要素）によって決まり、これらインデックスを生成するために使われる演算は、
真上部のブロック位置にあるインデックスを繰り返すこと、これは、ＨＥＶＣの「上側コピー」または「上部コピー」モードである、および
当該セットの第二シンタクス要素（例えば、Ｌｅｖｅｌ要素）中に符号化されたインデックスを繰り返すこと、これは、ＨＥＶＣ規格中の「左側コピーモード」または「左側予測モード」または「インデックスモード」として知られるモード、
のうちの１つである。
【００５１】
本発明の他の実施形態は、画像中の画素の現在のブロックを符号化するための方法を対象としており、本方法は、
パレット符号化モードを含め、２つ以上の符号化モードの各々に対し、画素の現在のブロックの符号化を評価するステップ（またはテストするステップ、すなわちテストされた符号化モードのうちから最良のものを選択するため、符号化のコストを見積もるステップ）であって、該パレット符号化モードは、インデックスのブロック（ビットストリーム中に画素の現在のブロックを符号化するために使われる）を構成するために現在のパレットを用い、該現在のパレットは、それぞれのエントリインデックスを対応する画素値に関連付けるエントリのセットを含む、該評価するステップと、
上記の評価に基づいて、画素の現在のブロックを符号化するため、２つ以上の符号化モードから１つの符号化モードを選択するステップと、
を含み、
パレット符号化モードを用いる画素の現在のブロックの符号化を評価するステップが、現在のブロックの画素を引き続き検討し、各検討された画素に対し、
パレット中で、距離閾値を所与として、検討されている画素に十分に近い対応画素値を有するパレットエントリを探すステップと、
パレット中に、距離閾値を所与として、検討されている画素に十分に近いパレットエントリが見付かった場合、エントリインデックスを用いて検討された画素を符号化するステップと、
パレット中に、距離閾値を所与として、検討されている画素に十分に近いパレットエントリが見付からなかった場合、検討された画素をエスケープ符号化するステップであって、該エスケープ符号化は、検討された画素の値の明示的符号化を含む、該エスケープ符号化するステップと、
を含み、
エスケープ符号化された画素の数が画素の現在のブロックに対する所定の閾値を超えた場合、パレット符号化モードを用いる画素の現在のブロックの符号化を評価するステップは中止される。
【００５２】
上記に応じ、画像中の画素の現在のブロックを符号化するための符号化デバイスは、
パレット符号化モードを含め、２つ以上の符号化モードの各々に対し、画素の現在のブロックの符号化を評価するステップであって、該パレット符号化モードは、インデックスのブロックを構築するために現在のパレットを用い、該現在のパレットは、それぞれのエントリインデックスを対応する画素値に関連付けるエントリのセットを含む、該評価するステップと、
上記の評価に基づいて、画素の現在のブロックを符号化するため、２つ以上の符号化モードから１つの符号化モードを選択するステップと、
を実行するよう構成された少なくとも１つのマイクロプロセッサを含み、
パレット符号化モードを用いる画素の現在のブロックの符号化を評価するステップが、現在のブロックの画素を引き続き検討し、各検討された画素に対し、
パレット中で、距離閾値を所与として、検討されている画素に十分に近い対応画素値を有するパレットエントリを探すステップと、
パレット中に、距離閾値を所与として、検討されている画素に十分に近いパレットエントリが見付かった場合、エントリインデックスを用いて検討された画素を符号化するステップと、
パレット中に、距離閾値を所与として、検討されている画素に十分に近いパレットエントリが見付からなかった場合、検討された画素をエスケープ符号化するステップであって、該エスケープ符号化は、検討された画素の値の明示的符号化を含む、該エスケープ符号化するステップと、
を含み、
エスケープ符号化された画素の数が画素の現在のブロックに対する所定の閾値を超えた場合、パレット符号化モードを用いる画素の現在のブロックの符号化を評価するステップは中止される。
【００５３】
この設定のおかげで処理時間を節減することができる。というのは、多数にわたるエスケープ符号化画素は、他の符号化モードに比べて、パレット符号化モードの効率を非常に低くするからである。結果として、この数の多さが判明次第、現在の符号化ユニットの符号化のために無駄な演算を処理する浪費時間を省くことになる。
【００５４】
これらの実施形態の随意的特徴が従属請求項に定義されている。これらの特徴のいくつかは、本明細書で、方法を参照しながら以下に説明されており、それらは、本発明の実施形態によるデバイスに専用のシステム特徴に転用することが可能である。
【００５５】
諸実施形態において、所定の閾値は、例えば３０％など、画素の現在のブロック中の画素の数によって決まる。
【００５６】
他の実施形態において、この処理は、画素がエスケープ符号化される都度カウンタをインクリメントするステップをさらに含み、パレット符号化モードを用いる、画素の現在のブロックの符号化の評価は、カウンタが所定の閾値に達し次第に中止される。処理時間を節減するためのこのアプローチは最適である。
【００５７】
さらに他の実施形態において、パレット符号化モードを用いる画素の現在のブロックの符号化を評価するステップは、
パレット中に、距離閾値を所与として、検討されている画素に十分に近いパレットエントリが見付からなかった場合、パレット中に、検討された画素を新規エントリとして加えるステップと、
画素のブロックの全ての画素が検討されたならば、パレットから少なくとも１つのパレットエントリを除去するステップと、
をさらに含む。
【００５８】
この設定は、現在の符号化ユニットの画素を反映しながらメモリ要件を満たすパレットの動的な構築を可能にする。
【００５９】
或る特定の実施形態において、パレット符号化モードを用いる画素の現在のブロックの符号化を評価するステップは、
パレットエントリを見付けた、または新規パレットエントリを加える際に、見付かったまたは新規のパレットエントリに関連付けられた発生カウンタをインクリメントするステップと、
評価を中止するかしないかを決めるために、除去パレットエントリの発生カウンタの合計を所定の閾値と比較するステップと、
をさらに含む。
【００６０】
本発明の他の発明的な（且つ独立的な）実施形態は、パレット符号化モードを用いて画像中の画素の現在のブロックを符号化する方法を対象としており、本方法は、
画素の現在のブロックと現在のパレットとからインデックスのブロックを構築するステップであって、現在のパレットは、それぞれのエントリインデックスを対応する画素値に関連付けるエントリのセットを含む、該構築するステップと、
インデックスのブロックを符号化するステップと、
を含み、
画素の現在のブロックに対するインデックスのブロックを構築するステップは、画素の現在のブロックの各画素に対し、パレット中で、距離閾値を所与として、検討されている画素に十分に近い対応画素値を有するパレットエントリを探すステップと、見付かったパレットエントリのエントリインデックスをインデックスのブロックに加えるステップと、現在の画素および見付かったパレットエントリのエントリインデックスをメモリ中に格納するステップと、
現在の画素の値が、画素の現在のブロック中の先行の画素の値に等しい場合、メモリ中に格納されたその先行の画素に対するエントリインデックスを読み出すステップと、読み出されたインデックスを、現在の画素に対するエントリインデックスとしてインデックスの予測因子ブロックに加えるステップと、
を含む。
【００６１】
上記に応じ、画像中の画素の現在のブロックを符号化するための符号化デバイスは、
画素の現在のブロックおよび現在のパレットからインデックスのブロックを構築するステップであって、現在のパレットは、それぞれのエントリインデックスを対応する画素値に関連付けるエントリのセットを含む、該構築するステップと、
インデックスのブロックを符号化するステップと、
を実行するよう構成された少なくとも１つのマイクロプロセッサを含み、
画素の現在のブロックに対するインデックスのブロックを構築するステップは、画素の現在のブロックの各画素に対し、パレット中で、距離閾値を所与として、検討されている画素に十分に近い対応画素値を有するパレットエントリを探すステップと、見付かったパレットエントリのエントリインデックスをインデックスのブロックに加えるステップと、現在の画素および見付かったパレットエントリのエントリインデックスをメモリに格納するステップと、
現在の画素の値が、画素の現在のブロック中の先行の画素の値に等しい場合、メモリ中に格納されたその先行の画素に対するエントリインデックスを読み出すステップと、読み出されたインデックスを、現在の画素に対するエントリインデックスとしてインデックスのブロックに加えるステップと、
を含む。
【００６２】
これらの発明的実施形態は、パレット中でインデックスに対する網羅的な探索遂行の回避を可能にする。画像（特に、スクリーンコンテンツ画像）は、多くの場合、高レベルの画素冗長度を有するので、画素間の相等性をテストするための追加処理コストは、平均的に、網羅的探索をしないことにより節減される処理コストより小さい。
【００６３】
「先行の画素」は符号化ユニット中のすでに処理された画素のいずれでもよいが、画素比較の量を制限し、先行の画素を保存するのに必要なメモリを制限するために、対象とする「先行の画素」の数を制限する価値はあり得る。好適な実施形態において、この先行の画素は、画素の現在のブロック中の、現在の画素の直前に先行する画素である。言い換えれば、パレット中にある最後のインデックスは、それが直前に処理されたものと同じであれば、次の画素に対して再使用するためにメモリ中に保持される。別形において、現在の画素の直ぐ前に先行する２つ以上の画素を検討することも可能である。
【００６４】
なお、望ましくは、何時においても、１つだけのエントリインデックスおよび１つだけの「先行」の画素がメモリ中に格納される。これはメモリの必要度を低減する。
【００６５】
現在の画素に直前に先行する画素の検討の別形において、先行の画素は、パレットエントリインデックスがインデックスのブロックに加えられた、画素の現在のブロックの直近の画素である。この設定は、パレットエントリを見付けることができず、したがってレベルのブロックにエントリインデックスが加えられなかった、エスケープ画素を考慮に入れることを可能にする
別の変形において、先行の画素は、画素の現在のブロックの中の現在の画素の上側に位置する画素である。
【００６６】
いくつかの実施形態において、本方法は、現在の画素の値が先行の画素の値と等しいかどうかを判定するため、現在の画素の値と、先行の画素に対してメモリ中に格納された値とを比較するステップをさらに含む。
【００６７】
なお、通常、現在の画素に対するインデックスのブロック中のインデックスとして対応するエントリインデックスを提供するために、（閾値を所与として）最も近いパレットエントリが選択される。
【００６８】
本発明の他の発明的な（且つ独立的な）実施形態は、パレット符号化モードを用いて画像中の画素の現在のブロックを符号化する方法を対象としており、該パレット符号化モードは、それぞれのエントリインデックスを対応する画素値に関連付けるエントリのセットを含む現在のパレットを用い、本方法は、
現在のパレットを予測するための２つ以上のパレット予測モードを用い、画素の現在のブロックの符号化を評価するステップ（またはテストするステップ、すなわちテストされた符号化モードのうちから最良のものを選択するため、符号化コストを見積もるステップ）であって、第一パレット予測モードは、画素の現在のブロック符号化するため、現在のパレットよりはむしろ画像中の画素の先行ブロックの先行パレットを使用する、該評価するステップ、
を含み、
本方法は、
現在のパレット中で再使用される先行パレットのパレットエントリの量を判定するステップと、
再使用されるパレットエントリの量が所定の閾値より低いと判定された場合には、第一パレット予測モードを使う画素の現在のブロックの符号化の評価をスキップするステップと、
をさらに含む。
【００６９】
上記に応じ、画像中の画素の現在のブロックを符号化するための符号化デバイスは、パレット符号化モードを用い、該パレット符号化モードは、それぞれのエントリインデックスを対応する画素値に関連付けるエントリのセットを含む現在のパレットを使用し、本デバイスは、
現在のパレットを予測するために２つ以上のパレット予測モードを用いて、画素の現在のブロックの符号化を評価するステップであって、第一パレット予測モードは、画素の現在のブロックを符号化するために、現在のパレットよりもむしろ画像中の画素の先行ブロックの先行パレットを使用する、該評価するステップと、
現在のパレット中で再使用される、先行パレットのパレットエントリの量を判定するステップと、
再使用されるパレットエントリの量が所定の閾値より低いと判定された場合には、第一パレット予測モードを使う画素の現在のブロックの符号化の評価をスキップするステップと、
を実行するよう構成された少なくとも１つのマイクロプロセッサを含む。
【００７０】
このアプローチは、パレット共用の評価に効果がない状況を早期に検出し、しかして該評価をできるだけ早くスキップすることを可能にする。
【００７１】
本発明の別の態様は、プログラムを格納した非一時的コンピュータ可読媒体に関し、該プログラムは、デバイス中のマイクロプロセッサまたはコンピュータシステムによって実行されると、そのデバイスに上記で定義されたいずれかの方法を遂行させる。
【００７２】
本非一時的コンピュータ可読媒体は、方法およびデバイスに関して上記で述べ下記で述べるものと、特にパレット符号化モードの符号化効率の向上の点で、類似の特徴および利点を有し得る。
【００７３】
本発明のさらに別の態様は、上記で定義されたいずれかの方法の各ステップを実行するようになされた手段を含むデバイスに関する。
【００７４】
本発明のさらなる他の態様は、実質的に本明細書で、添付図面の図１７または１８または１９または２０または２１を参照して説明され、これらの図中に示されるような、画像中の画素の現在のブロックを符号化または復号する方法に関する。
【００７５】
本発明による方法の少なくとも部分は、コンピュータ実装が可能である。したがって、本発明は、全体がハードウェアの実施形態、全体がソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）、または、本明細書中で全て一般的に「回路」、「モジュール」、または「システム」と称する場合もある、ソフトウェアおよびハードウェアの態様を組み合わせた実施形態の形を取ることができる。さらに、本発明は、媒体中に具現化されたコンピュータ可用プログラムコードを有する任意の有形の表現媒体中に具現化されたコンピュータプログラム製品の形を取ることも可能である。
【００７６】
本発明はソフトウェアとして実装可能なので、本発明は、任意の適した搬送媒体上に、プログラム可能装置に提供するためのコンピュータ可読コードとして具現化することが可能である。有形の搬送媒体は、フロッピディスク、ＣＤ−ＲＯＭ、ハードディスクドライブ、磁気テープデバイス、または固体メモリデバイスなどのストレージ媒体を含み得る。一時的搬送媒体は、電気信号、電子信号、光信号、音響信号、磁気信号、もしくは、例えばマイクロ波などの電磁気信号、またはＲＦ信号を含み得る。
【００７７】
本発明の諸実施形態を、単なる例示として、下記の図面を参照して以下に説明することとする。
【図面の簡単な説明】
【００７８】
【図１】ＨＥＶＣエンコーダのアーキテクチャを示す。
【図２】ＨＥＶＣデコーダのアーキテクチャを示す。
【図３】基因領域の概念を示す。
【図４】ＨＥＶＣのレンジおよびスクリーンコンテンツ符号化拡張にサポートされた彩度フォーマットを示す。
【図５】符号化ツリーブロックの符号化ユニットへの分割、およびこれら符号化ユニットの復号スキャン順序を示す。
【図６】ＨＥＶＣのスクリーンコンテンツ符号化拡張において調査中の、デコーダ側でのパレット符号化モードの原理を示す。
【図７】残差を含まない、デコーダ側でのパレット符号化モードの別形を示す。
【図８】符号化ユニットの例を、その対応するレベルのブロックおよび関連するパレットとともに示す。
【図９】レベルの同じブロック、およびレベルのこのブロックを符号化するのに使われたシンタクス要素のセットを示す。
【図１０】パレットモードに関連するシンタクス要素の復号プロセスを示す。
【図１１】復号側で、レベルのブロックを構築するための再構築プロセスを示す。
【図１２】エンコーダでの、例示的なパレット判定のアルゴリズムを示す。
【図１３】パレットモードに対する、エンコーダでのＰｒｅｄ  ｍｏｄｅ、Ｌｅｖｅｌ、およびＲｕｎの選択のシンタクス要素、ならびにエスケープ符号化モードを示す。
【図１４】本発明の１つ以上の実施形態の実装のためのコンピューティングデバイスの概略ブロック図を示す。
【図１５】「Ｒｕｎ」シンタクス要素を符号化するためのアルゴリズムを示す。
【図１６】「Ｒｕｎ」要素を符号化するための別のアルゴリズムを示す。
【図１７】図１５と比べて改良された、「Ｒｕｎ」シンタクス要素を符号化するためのアルゴリズムを示す。
【図１８】図１６と比べて改良された、「Ｒｕｎ」シンタクス要素を符号化するためのアルゴリズムを示す。
【図１９】エスケープ符号化された画素のシグナリングを含め、パレット符号化モードを使って符号化ユニットをレベルのブロックに変換するための改良されたアルゴリズムを示す。
【図２０】パレット符号化モードに対するパレットを構築するための改良されたアルゴリズムを示す。
【図２１】パレット符号化モードを評価するための改良されたアルゴリズムを示す。
【発明を実施するための形態】
【００７９】
図１は、ＨＥＶＣエンコーダのアーキテクチャを示す。このビデオエンコーダでは、当初のシーケンス１０１は、画素のブロック１０２に分割される。次いで各ブロックに符号化モードが反映される。ＨＥＶＣで通常使用される符号化モードの２つのファミリがある。すなわち、空間的予測に基づくモード（ＩＮＴＲＡモード）１０３、ならびに動き推定１０４および動き補償１０５に基づいた、時間的予測に基づくモード（ＩＮＴＥＲ、両方向性、スキップモード）である。ＨＥＶＣスクリーンコンテンツ符号化拡張として知られる、現在設計中のＨＥＶＣの拡張は、追加の符号化モード、すなわち、画素のブロックの符号化について、ＩＮＴＲＡおよびＩＮＴＥＲ符号化モードに匹敵するパレット符号化モードを加える。このパレット符号化モードについては、以降で特に図６〜１３、１５、および１６を参照してさらに詳しく説明する。
【００８０】
ＩＮＴＲＡ符号化ユニットは、ＩＮＴＲＡ予測と呼ばれるプロセスによって、その因果境界にある符号化済み画素から一般に予測される。
【００８１】
ＩＮＴＥＲ符号化モードの時間的予測は、最初に、動き推定ステップ１０４において、符号化ユニットに最も近い参照領域中で参照フレーム１１６と呼ばれる以前のまたは今後のフレームを見出すことにある。この参照領域は予測因子ブロックを構成する。次に、この符号化ユニットが、動き補償ステップ１０５で残差を計算するため予測因子ブロックを用いて予測される。
【００８２】
空間的および時間的予測の双方の場合において、当初の予測因子ブロックから符号化ユニットを差し引くことによって、残差が計算される。
【００８３】
ＩＮＴＲＡ予測では、予測方向が符号化される。時間的予測では、少なくとも１つの動きベクトルが符号化される。但し、動きベクトル符号化に関するビットレートコストをさらに低減するために、動きベクトルは直接には符号化されない。実際は、動きが一様であると仮定すれば、動きベクトルを、その動きベクトルとその周囲の動きベクトルとの間の差として符号化するのがとりわけ有利である。例えば、Ｈ．２６４／ＡＶＣ符号化規格では、動きベクトルは、現在のブロックの上側および左側に位置する３つのブロックの間で計算されたメディアンベクトルに対して符号化される。このメディアンベクトルと現在のブロックの動きベクトルとの間で計算される残差動きベクトルとも呼ばれる差異だけが、ビットストリーム中に符号化される。これは、モジュール「Ｍｖ予測および符号化」１１７において処理される。各符号化ベクトルの値は、動きベクトルフィールド１１８に格納される。予測に使われる隣接の動きベクトルは、動きベクトルフィールド１１８から抽出される。
【００８４】
次いで、モジュール１０６で、例えば、Ｄ＋λ．Ｒなどのラムダベースの基準を用いて、レート歪みパフォーマンスが最適になるモードが選択される。前式のＤは歪みであり、λはラムダまたはラグランジュ係数であり、Ｒはレートである）。冗長部をさらに低減するために、モジュール１０７で、一般にはＤＣＴである変換が、残差ブロックに適用され、モジュール１０８でその係数に量子化が適用される。係数の量子化ブロックは、次いでモジュール１０９で、エントロピー符号化され、その結果がビットストリーム１１０に挿入される。
【００８５】
エンコーダは、次いでモジュール１１１〜１１６で、将来の動き推定のため、符号化されたフレームの復号を行う。これはエンコーダにおける復号ループである。これらのステップは、エンコーダとデコーダとが同じ参照フレームを有することを可能にする。符号化フレームを再構築するために、残差は、モジュール１１１で逆量子化され、画素ドメイン中に「再構築された」残差を供するために、モジュール１１２で逆変換される。符号化モード（ＩＮＴＥＲまたはＩＮＴＲＡ）に従って、この残差はＩＮＴＥＲ予測因子１１４またはＩＮＴＲＡ予測因子１１３に加えられる。
【００８６】
次いで、この最初の再構築が、モジュール１１５で、１つまたはいくつかの種類のポストフィルタリングによってフィルタされる。これらのポストフィルタは、この復号ループに組み込まれている。このことは、エンコーダとデコーダとで同じ参照フレームを用いるために、これらフィルタが、エンコーダとデコーダとで再構築フレームに適用される必要があることを意味する。このポストフィルタリングの目的は、圧縮のアーチファクトを除去することである。
【００８７】
例えば、Ｈ．２６４／ＡＶＣはデブロッキングフィルタを使用する。このフィルタは、残差のＤＣＴ量子化およびブロック動き補償に起因するブロッキングアーチファクトを除去することができる。現在のＨＥＶＣ規格では、デブロッキングフィルタ、サンプル適応オフセット（ＳＡＯ：ｓａｍｐｌｅ  ａｄａｐｔｉｖｅ  ｏｆｆｓｅｔ）の２種類のループフィルタが使われている。
【００８８】
ＨＥＶＣデコーダの原理が図２に表されている。最初にビデオストリーム２０１が、モジュール２０２でエントロピー復号される。次いで、残差データが、モジュール２０３で逆量子化され、残差を形成する画素値を得るためにモジュール２０４で逆変換される。また、モードデータもエントロピー復号され、そのモードの機能で、ＩＮＴＲＡ型の復号またはＩＮＴＥＲ型の復号が行われる。ＩＮＴＲＡモードの場合、ビットストリームからＩＮＴＲＡ予測方向が復号される。次いで、参照領域を探すためにその予測方向が使われる２０５。モードがＩＮＴＥＲの場合、ビットストリームから動き情報が復号される２０２。該情報は、参照フレームのインデックスおよび動きベクトル残差で構成される。動きベクトルを得るために、動きベクトル予測因子が動きベクトル残差に加えられる２１０。次いで、参照フレーム中の参照領域が見付けるために動きベクトルが使われる２０６。復号フレームを再構築するために、その参照領域が残差に加えられる。なお、次の復号動きベクトルの予測に用いるために、復号動きベクトルを使って動きベクトルフィールドデータ２１１が更新される。復号フレームのこの最初の再構築は、次いで、エンコーダ側で使われたのと全く同じポストフィルタを使ってポストフィルタリングされる２０７。デコーダの出力は、圧縮解除されたビデオ２０９である。
【００８９】
図３は、ＨＥＶＣにおけるように、ブロック毎の符号化からもたらされる因果原理を示す。
【００９０】
画像は、ハイレベルで符号化ユニットに分割され、ラスタスキャン順に符号化される。しかして、ブロック３．１を符号化するとき、領域３．３の全てのブロックは既に符号化されており、エンコーダにより利用可能であると見なすことができる。同様に、デコーダにおいてブロック３．１を復号するとき、領域３．３の全てのブロックが既に復号され、しかして再構築されており、デコーダにより利用可能であると見なすことができる。領域３．３は、符号化ユニット３．１の基因領域と呼ばれる。符号化ユニット３．１が符号化されたならば、該ユニットは、次の符号化ユニットに対する基因領域に属することになる。次の符号化ユニットならびに全ての次に来るユニットは、打点域で示された領域３．４に属し、現在の符号化ユニット３．１を符号化するために使用することはできない。基因領域が再構築されたブロックによって構成されていることに注目すべきである。所与の符号化ユニットを符号化するために使われる情報は、この情報が復号で利用できないという理由で、画像の当初のブロックではない。復号で利用可能な情報は、基因領域中の画素のブロックの再構築バージョン、すなわち、これらのブロックの復号バージョンだけである。この理由で、符号化において、基因領域の前に符号化されたブロックが、これらブロックのこの再構築済みバージョンを提供するために復号される。
【００９１】
ブロック３．１を符号化する際に、基因領域中のブロック３．２からの情報を用いることが可能である。ＨＥＶＣスクリーンコンテンツ符号化のドラフトスペシフィケーションでは、変位ベクトル３．５によってこのブロック３．２を示すことが可能であり、該ベクトルはビットストリーム中で送信することができる。
【００９２】
図５は、符号化ツリーブロックの符号化ユニットへの分割、およびこれら符号化ユニットの逐次処理の例示的なスキャン順序を示す。ＨＥＶＣ規格では、ブロック構造体は、符号化ツリーブロック（ＣＴＢ）に編成される。フレームは、いくつかのオーバーラップのない正方形の符号化ツリーブロックを包含する。符号化ツリーブロックのサイズは、６４画素×６４画素〜１６×１６に等しくすることができる。このサイズは、シーケンスのレベルで決定される。符号化効率の点から最も効率的なサイズは、最大の６４×６４である。なお、画像境界を除き、全ての符号化ツリーブロックは同じサイズであり、これは、これらブロックが列を成して配置されることを意味する。境界のＣＴＢのサイズは、残りの画素の量に合わせて変えられる。
【００９３】
各符号化ツリーブロックは、１つ以上の正方形の符号化ユニット（ＣＵ）を包含する。符号化ツリーブロックは、四分ツリー構造に基づいていくつかの符号化ユニットに分割される。符号化ツリーブロック中の各符号化ユニットの処理（符号化または復号）の順序は、ラスタスキャン順序に基づき四分ツリー構造に従う。図５は、１つの符号化ツリーブロック中の符号化ユニットの処理順序の一例を示す。この図で、各符号化ユニット中の数字は、この符号化ツリーブロックの各対応符号化ユニットの処理順序を表す。
【００９４】
一般にＨＥＶＣ  ＲＥｘｔとも呼ばれるＨＥＶＣレンジ拡張は、拡張型ビデオフォーマットを取り扱うための新規ビデオ符号化規格ＨＥＶＣの拡張版である。
【００９５】
この拡張の目的は、追加のカラーフォーマットおよびビット深度によって、およびできる限りロスなく、ビデオシーケンスを符号化するためのさらなるツールを提供することである。具体的には、この拡張版は、４：２：２カラーフォーマット、ならびに４：２：０ビデオフォーマットに加え４：４：４ビデオフォーマットをサポートするため設計されている（図４参照）。カラー画像は、一般に、３つのカラー成分Ｒ、Ｇ、およびＢで構成される。これらの成分は、一般に相関付けられており、画像およびビデオ圧縮において、画像を処理する前にこれらカラー成分を相関解除するのが一般的である。カラー成分を相関解除する最も一般的なフォーマットは、ＹＵＶカラーフォーマットである。ＹＵＶ信号は、通常、３つの入力Ｒ、Ｇ、およびＢの入力フレームに線形変換を適用することによって、画像のＲＧＢ表現から生成される。Ｙは、通常輝度成分と呼ばれ、ＵおよびＶは一般に彩度成分と呼ばれる。また、用語「ＹＵＶ」の代わりに用語「ＹＣｂＣｒ」も一般的に使われている。
【００９６】
３つのカラー成分に対し、相異なるサンプリング比率がよく使われる。サブサンプリングスキームは、一般に、三連比Ｊ：ａ：ｂ（例えば、４：２：２）で表現され、これは、Ｊ画素の幅および２画素の高さの概念領域における輝度および彩度サンプルの数を表す。これらの部分は（それぞれの順に）：
Ｊ：水平方向サンプリング基準（概念領域の幅）（通常４）、
ａ：Ｊ画素の第一行中の彩度サンプル（Ｃｒ、Ｃｂ）の数、
ｂ：Ｊ画素の第二行中の（追加の）彩度サンプル（Ｃｒ、Ｃｂ）の数。
【００９７】
図４は、ＨＥＶＣ  ＲＥｘｔにおける各種の検討対象の彩度フォーマットを示す。これらのフォーマットは、３つのカラー成分の相異なるピクチャサイズ、およびカラー成分の相異なる型の点で異なっている。
【００９８】
４：２：０ＹＵＶ彩度フォーマットにおいて、Ｙ成分領域が、Ｗ画素に等しい幅とＨ画素に等しい高さとを有する場合、ＵおよびＶ成分領域は、両方とも、Ｗ／２画素に等しい幅とＨ／２画素に等しい高さとを有する。
【００９９】
４：２：２ＹＵＶ彩度フォーマットにおいて、Ｙ成分領域が、Ｗ画素に等しい幅とＨ画素に等しい高さとを有する場合、ＵおよびＶ成分領域は、両方とも、Ｗ／２画素に等しい幅とＨ画素に等しい高さとを有する。
【０１００】
４：４：４ＹＵＶまたはＲＧＢ彩度フォーマットにおいて、３つのカラー成分に対する各領域は、同じ幅Ｗおよび高さＨを有する。
【０１０１】
ピクチャが白黒の場合、そのフォーマットは４：０：０に指定される。
【０１０２】
画素の各カラー成分を符号化するために使われるビットの数であるビット深度に関し、現在のＨＥＶＣ規格が、８および１０ビットのビット深度を有する４：２：０のカラーフォーマット（すなわち、２５６〜１，０２４の可能なカラー）を取り扱うことが可能な場合、ＨＥＶＣ  ＲＥｘｔは、８ビット〜１６ビット範囲の拡張されたビット深度を備えた４：２：２および４：４：４ビデオフォーマット（すなわち、最大６５，５３６の可能なカラー）を追加してサポートするように設計されることになっている。これは、カラー成分のより大きなダイナミックレンジを備えるために特に有用である。
【０１０３】
また、ＨＥＶＣ  ＲＥｘｔは、入力シーケンスのロスのない符号化を提供するようにも設計されており、これは入力１０１と正確に同一の復号出力２０９を有するためである。これを達成するために、従来型のＨＥＶＣのロスの多いコーデックに比べて、いくつかのツールが修正または追加された。ロスなしに動作するための例示的な修正または追加の非包括的なリストを以下に提示する：
−  量子化ステップ１０８（デコーダでは２０３）の除去、
−  通常の余弦／正弦変形１０７（デコーダでは２０４）はエラーを生じる可能性があるので、バイパス変換の強制起動、
−  ポストフィルタリング１１５（デコーダでは２０７）など、量子化ノイズの補償に特別に設えられたツールの除去。
【０１０４】
標準化が検討されている、ＨＥＶＣのスクリーンコンテンツ符号化（ＳＣＣ）と呼ばれる新規の拡張において、普通のシーケンスに加え、「スクリーンコンテンツ」ビデオシーケンスを効率的に符号化するための追加のツールが現在設計されている。この「スクリーンコンテンツ」ビデオシーケンスとは、例えば、テキスト、パワーポイントプレゼンテーション、グラフィカルユーザインタフェース、テーブル（例えば、スクリーンショット）などを包含するパーソナルコンピュータまたは任意の他のデバイスから取り込まれたビデオに対応する、非常に特定的なコンテンツを有する特有のビデオシーケンスを指す。一般に４：４：４フォーマット中のこれら特有のビデオシーケンスは、普通のビデオシーケンスに比べて、全く異なる統計データを有する。ビデオ符号化において、ＨＥＶＣを含めて従来式のビデオ符号化ツールのパフォーマンスは、かかる「スクリーンコンテンツ」シーケンスを処理する際に、時として、きわめて不十分な結果を示す。
【０１０５】
「スクリーンコンテンツ」ビデオシーケンスを処理するためＨＥＶＣ  ＳＣＣで現在検討されているツールは、イントラブロックコピーモードおよびパレットモードを含む。これらのモードのプロトタイプは、普通のビデオシーケンスを対象としている従来式の方法に比べて良好な符号化効率を示している。本文書では、このパレット符号化モードに焦点を当てる。
【０１０６】
ＨＥＶＣ  ＳＣＣのパレットモードの実装は予測に基づいている。これは、任意の他のロスのないまたはロスのある符号化方法に変わりなく適用が可能である。これは、動き予測（インターの場合）またはイントラ予測によって行われる予測と同様に、所与の符号化ユニットの符号化のための予測因子を構築するのに、パレット手法が使われることを意味する。予測因子の生成の後、残差符号化ユニットが、変換され、量子化され、符号化される。言い換えれば、図１および２を参照して前述したのと同じプロセスが適用される。
【０１０７】
図７を参照して以下に説明する別の実装において、パレットモードを使って構築されたブロックは、いかなる残差も包含することなくビットストリーム中に直接に符号化される。
【０１０８】
パレットは、一般に、カラーのＮタプルの有限セットを包含するテーブルによって表され、各カラーは、所与のカラー空間中のその成分によって定義される（例えば、ＹＵＶカラー空間に基づく、図８中の８０３を参照のこと）。例えば、典型的な４：４：４ＲＧＢフォーマットにおいて、パレットはＮタプルのＰ要素のリストから成る（ＲＧＢに対してＮ＝３）。さらに正確には、各要素は、ＲＧＢフォーマットでのカラー成分の或る一定のトリプレットに対応する。当然ながら、これはＲＧＢまたはＹＵＶカラーフォーマットに限定はされない。任意の他のカラーフォーマットがパレットによって表現でき、より少ないまたはより大きな数のカラー成分を用いることが可能、すなわちＮは３以外とすることができる。
【０１０９】
エンコーダ側で、ＳＣＣにおいて検討中のパレットモードは、所与の入力符号化ユニットの画素値を、関連するパレット中のエントリを識別する、レベルと呼ばれるインデックスに変換することにある。変換の後、得られた符号化ユニットまたはインデックスのブロックは、レベルから成り、次いで関連するパレットとともにデコーダに送信され、パレットは一般に、符号化ユニットを表すため使われる、有限数のカラートリプレットを有するテーブルである。パレットは有限数のカラーを定義しているので、インデックスブロックへの変換は、通常、当初の入力符号化ユニットへの近似化である。
【０１１０】
エンコーダ側でパレットモードを適用するために、画素の符号化ユニットを変換するための典型的仕方は、次のように行われる。
【０１１１】
−  例えば全体的歪み最小化して符号化するために、画素の符号化ユニットを最良に表すＰ個のトリプレットを見出す；
−  次いで、符号化ユニットの各画素を、Ｐのトリプレット中で最も近いカラーに関連付ける：このとき、符号化する値（またはレベル）は、関連付けられた最も近いカラーのエントリに対応するインデックスである。
【０１１２】
−  さらに、現在処理されている画素値がパレットのどのエントリからも離れている場合は、パレットを使わない方がよいことがある。かかる状況で、ＳＣＣはその画素のエスケープ符号化を用意しており、これは、量子化ステップを適用した後での、ビットストリーム中の画素値の明示的符号化（エスケープ符号化画素）を意味する。
【０１１３】
各符号化ユニットに対し、パレット（すなわち、見出されたＰのトリプレット）、インデックスまたはレベルのブロック、エスケープ符号化画素（「エスケープ画素」のブロックに格納されている）、および、随意的に、当初の符号化ユニットとカラー空間中のインデックスのブロック（これはブロック予測因子である）との間の差を表す残差がビットストリーム１１０中に符号化され、デコーダに送信される。
【０１１４】
デコーダでは、パレットモードは逆方向に変換を演算することにある。これは、符号化ユニットの各画素に対する対応カラーを生成するために、符号化ユニットの各画素に関連付けられた各復号インデックスが、ビットストリームから復号されたパレットの対応カラーによって、または（エスケープ符号化が適用されたかどうかにより）エスケープ画素値によって置き換えられることを意味する。これは、デコーダでのカラー空間におけるインデックスのブロックの構築である。
【０１１５】
図６は、デコーダでのパレット符号化モードの第一実装の原理をさらに示す。ステップ６０２で、現在の符号化ユニットに対する符号化モードがビットストリーム６０１から抽出される。現在のところ、パレットモードは、ビットストリーム中のスキップフラグの前に配置されたフラグによって識別されている（他の符号化モードについては、図１および２を参照して上記で説明した）。このフラグは、単一コンテキストを使って符号化されたＣＡＢＡＣである。このモードがパレットモードの場合６０３、パレットモードの関連シンタクス６０５、すなわちパレット上の情報、レベルのブロック、エスケープ画素のブロック、および随意的に残差、がビットストリーム６０１から抽出され復号される６０４。
【０１１６】
次いで、ステップ６０６の過程で、２つの要素、すなわちパレット６０７およびレベルのブロック６０８が、復号されたデータから構築される。レベルのこのブロックおよび関連付けられたパレットから、画素ドメイン中の符号化ユニット予測因子６１０が構築される６０９。これは、レベルのブロックの各レベルに対し、カラー（ＲＧＢまたはＹＵＶ）が各画素に関連付けられることを意味する。
【０１１７】
次いで、符号化ユニットの残差がビットストリーム６０１から復号される６１１。パレットモードの現在の実装では、パレットモードに関連付けられた残差は、一般的ＨＥＶＣインター残差符号化方法を使って、すなわちゴロム符号化を使って符号化される。符号化ユニットの残差６１２を得るために、従来式の逆量子化および逆変換が行われる。再構築された符号化ユニット６１４を形成するために、ブロック予測因子６１０が、この符号化ユニットの残差６１２に加えられる６１３。
【０１１８】
図６のパレットモード予測のＨＥＶＣ  ＳＣＣの別形を、図７を参照して以下に説明する。図７の７０１〜７０８は、６０１〜６０８とほとんど同様である。
【０１１９】
この別形では、本質的に残差および予測はない。すなわち、パレットによって適正に表現可能な画素だけが、パレットモードの対応エントリを用いて符号化される。
【０１２０】
この特定のコンテキストにおいて、パレットによって適正に表現できない画素は、パレットのカラーエントリを参照せず別途に符号化される。パレットのエントリを使う代わりに、量子化された画素値が明示的に送信される。かかる画素は、前述したように、「エスケープ値」または「エスケープ符号化画素」として知られる。このエスケープモードは、非常に稀な画素をシグナリングするためにいずれかのパレットエントリを用いしかしてパレットエントリを浪費（パレットのサイズには限度があり得る）することなく、取り扱う効率的な方法を提供する。
【０１２１】
画素がエスケープ値として符号化される場合、デコーダが、符号化ユニットのどの画素がエスケープ符号化され、同じ符号化ユニットのどの画素がパレットエントリを使って符号化されているのかを識別できるように、後記で説明するようにエスケープフラグが所定の値に設定される。
【０１２２】
これらの画素のシグナリングの一例は、「Ｐｒｅｄ  ｍｏｄｅ」要素の前に「エスケープ」フラグを加え、或る画素がパレット符号化されているか（パレットエントリからのレベルを使って符号化されているか）あるいはエスケープ符号化（したがって明示的画素値を使って符号化）されているかを示すことである。「エスケープ」フラグの後には明示的画素値が続く（この画素に対しては、「Ｐｒｅｄ  ｍｏｄｅ」、「Ｌｅｖｅｌ」および「Ｒｕｎ」要素は設けられない）。
【０１２３】
或る別形において、どの画素が「エスケープ符号化」画素であるかをシグナリングするために、「エスケープ」情報として、インデックスのブロック中で（「エスケープ符号化」画素に専用の）特定のレベル値を使うことも可能である。
【０１２４】
いずれかの実施形態において、明示的画素値は、可変長符号化を使ってまたは使わないで、予測的に（例えば、隣接の画素値との差として）符号化する、またはしないことができ、エントロピー符号化に対する可能な結果（コンテキスト、およびビット数など）を使い、量子化するまたはしないことができる。
【０１２５】
図６と比べて、いくつかのステップが修正されている。
【０１２６】
残差が符号化されないためシンタクスが僅かに変更されるので、ステップ７０４は、６０５と比べて異なる特定のシンタクス７０５を抽出する。これは、図７のパレットモードでは、パレットエントリによって適正に表現されている場合、パレットモードだけを用いて画素値が符号化されることによる。それ以外の場合、すなわち、（例えば、画素値がパレットエントリによって適正に表現できないため、またはパレットがその最大サイズに達してしまい新規の値を加えることができないため）パレットモードを用いて画素値を符号化できない場合、その画素値はエスケープ値として符号化される。
【０１２７】
ステップ７０６で、図６中のステップ６０６と同様に、復号データから３つの要素、すなわち、パレット７０７、レベルのブロック７０８、およびエスケープ画素値のブロックが構築される。これら全てのデータに基づいて、デコーダは、具体的には非エスケープ画素に対してはパレットを使って符号化ユニットの画素値を再生成し、符号化された明示的画素値からエスケープ画素値を復号することによって、現在の符号化ユニット７１４を生成すること７０９が可能である。
【０１２８】
図８は、エンコーダでのパレットモードの原理を示す。現在の符号化ユニット８０１は、３つのカラー値（Ｙ、Ｕ、Ｖ）または（Ｒ、Ｇ、Ｂ）の代わりに、各画素に対するレベルを包含する、同じサイズのブロック８０２に変換される。このレベルのブロックに関連付けられたパレット８０３が、符号化ユニットの全体的歪みの最小化に基づいて構築され、各エントリに、対応する画素カラー値を有するエントリインデックスまたはレベルを関連付ける。なお、白黒アプリケーションに対しては、画素値は１つだけの成分を包含すればよい。
【０１２９】
図６および７に関連して述べたように、各符号化ユニットに対し、パレット（および、図６だけについて残差）が符号化され、ビットストリーム中に挿入される。同様に、レベルのブロックまたはインデックスのブロックも符号化されてビットストリーム中に挿入され、この符号化の一例を、図９を参照しながら以下に説明する。この例では、レベルのブロックはラスタスキャン順に処理される。
【０１３０】
レベルのブロック９１は、８０２を参照して図８中で示されたものと全く同じである。テーブル９２および９３は、レベルのブロック９１を符号化するために使われる連続のシンタクス要素を表す。テーブル９３は、テーブル９２の続きとして読み取るものとする。本テーブル中のこれらのシンタクス要素は、ブロック９１中の太線によって囲まれたレベルのグループの符号化に対応する。
【０１３１】
このレベルのブロックは、ラスタスキャン順に、連続する画素のグループ毎に符号化される。各グループは、予測方向（すなわち、グループのインデックスを再構築するために使われる予測または再構築モード）を表す第一シンタクス要素、画素または画素群の値すなわちレベルを示す随意的な第二シンタクス要素、繰り返しを示す第三シンタクス要素を用いて符号化される。この繰り返しは、グループ中の画素の数に対応する。
【０１３２】
これら２つのテーブルは、パレットモードに関連付けられた現在のシンタクスを表す。これらのシンタクス要素は、ビットストリーム中で、レベルのブロック９１に関連付けられた符号化情報に相当する。これらのテーブルにおいて、３つの主要シンタクス要素が、パレットモードの演算を完全に表すために用いられ、レベルのブロック９１のレベルを連続して検討する際に、以下のように用いられる。
【０１３３】
「Ｐｒｅｄ  ｍｏｄｅ」と呼ばれる第一シンタクス要素は、２つの符号化モードを区別することを可能にする。「０」に等しい「Ｐｒｅｄ  ｍｏｄｅ」フラグに対応する第一モードでは、現在の画素に対し新規のレベルが使われる。このレベルは、ビットストリーム中で、このフラグの直後にシグナリングされる。「１」に等しい「Ｐｒｅｄ  ｍｏｄｅ」フラグに対応する第二モードでは、「上側コピー」モードが使われる。さらに具体的には、このことは、現在の画素のレベルが、同じ位置から開始してラスタスキャン順に、直ぐ上の行に位置する画素レベルに対応することを意味する。「１」に等しい「Ｐｒｅｄ  ｍｏｄｅ」フラグの場合、レベルの値は、レベルのブロック９１中の真上の画素のレベルの値を参照することによって判明しているので、フラグの直後にレベルをシグナリングする必要はない。
【０１３４】
「Ｌｅｖｅｌ」と呼ばれる第二シンタクス要素は、「Ｐｒｅｄ  ｍｏｄｅ」の第一モードにおいてだけ、現在の画素に対するパレットのレベル値を示す。
【０１３５】
「Ｒｕｎ」と呼ばれる第三シンタクス要素は、「Ｐｒｅｄ  ｍｏｄｅ」の両方のモードにおいて繰り返し値を符号化するために使われる。レベルのブロック９１が、最上部左コーナーから底部右コーナーまで、行毎に左から右へ、最上部から底部へスキャンされると見なせば、Ｒｕｎシンタクス要素は、同じ符号化を有する、ブロック９１中の連続する画素の数、すなわち、現在のシンタクス要素が適用されるインデックスのグループ中のインデックスの数を示す。
【０１３６】
この「Ｒｕｎ」シンタクス要素は、「ｐｒｅｄ  ｍｏｄｅ」フラグの如何によって異なる意味を有する。Ｐｒｅｄ  ｍｏｄｅが０の場合、「Ｒｕｎ」要素は、同じレベル値を有するブロックの連続する画素の数である。例えば、Ｒｕｎ＝８の場合、これは、現在の「Ｌｅｖｅｌ」が現在の画素と後続の８つの画素に適用され、ラスタスキャン順に９つの同一の連続するサンプルに対応することを意味する。
【０１３７】
Ｐｒｅｄ  ｍｏｄｅが１の場合、「Ｒｕｎ」要素は、ブロック９１中の上側の画素のレベル値に一致するレベル値を有する、ブロックの連続する画素の数であり、この場合「上側コピー」モードが適用される。例えば、Ｒｕｎ＝３１の場合、これは、現在の画素のレベルおよび後続の３１の画素が上側の行の画素からコピーされ、該コピーが合計３２の画素に対応することを意味する。
【０１３８】
テーブル９２および９３に関して、これらは、パレットモードを用いてブロック９１を符号化するための８つのステップを表している。各ステップは、「Ｐｒｅｄ  ｍｏｄｅ」フラグの符号化で開始され、「Ｐｒｅｄ  ｍｏｄｅ」フラグが「０」に等しい場合、その後に「Ｌｅｖｅｌ」シンタクス要素が続き、または「Ｐｒｅｄ  ｍｏｄｅ」フラグが「１」に等しい場合、その後に「Ｒｕｎ」シンタクス要素が続く。「Ｌｅｖｅｌ」シンタクス要素の後には常に「Ｒｕｎ」シンタクス要素が続く。
【０１３９】
現在のブロックに対し復号される符号化モードがパレットモードの場合、デコーダは、最初に、このブロックに関するシンタクスを復号し、その後符号化ユニットに対する再構築プロセスを適用する。
【０１４０】
図１０は、パレットモードに関するシンタクス要素の復号プロセス（上記のステップ６０５〜６０６または７０５〜７０６）を示す。最初に、ビットストリーム１００１からパレットのサイズが抽出され、復号される１００２。ステップ１００２で復号されたこのサイズの値に１を加えることによって、パレットの正確なサイズ（Ｐａｌｅｔｔｅ＿ｓｉｚｅ）が得られる。実際は、このサイズは、値０が最小のビット数（１ビット）を有する単進コードを使って符号化され、パレットのサイズが０に等しくなることはあり得ず、０の場合は、ブロック予測因子を構築するために画素値を使うことはできない。
【０１４１】
次いで、パレット値の復号に対応する処理が始まる。ステップ１００４で、パレットのインデックスに対応する変数ｉが０に等しく設定され、次にステップ１００５で、ｉがパレットサイズ（Ｐａｌｅｔｔｅ＿ｓｉｚｅ）に等しいかどうかをチェックするためのテストが行われる。等しくない場合は、ビットストリーム１００１から１つのパレット要素が抽出されて復号され１００６、次いで、ｉに相応する関連レベル／インデックスとともにパレットに加えられる。その後、変数ｉはステップ１００７でインクリメントされる。ｉがパレットサイズに等しい場合１００５、パレットの復号が完了したことになる。
【０１４２】
次に、レベルのブロック９１の復号に対応する処理が行われる。最初に、画素カウンタに対応する変数ｊ、および変数シンタクスｉが０に設定される１００８。次いで、画素カウンタが、ブロック中に包含される画素の数（デコーダは、符号化ツリーブロックの符号化ブロックへの分割を知っているのでこれは既知である−図５参照）に一致するかどうかを知るためにチェックが行われる。ステップ１００９で回答が然りであれば、本処理はステップ１０１７で終了し、そうでない場合は、１つの予測モードに対応するフラグ「Ｐｒｅｄ  ｍｏｄｅ」の値がビットストリーム１００１から抽出され復号される１０１０。
【０１４３】
「Ｐｒｅｄ  ｍｏｄｅ」の値が、復号済みの全ての「Ｐｒｅｄ  ｍｏｄｅ」値を包含するテーブルのインデックスシンタクスｉのところに加えられる。この「Ｐｒｅｄ  ｍｏｄｅ」の値が０に等しい場合、ステップ１０１１で、ビットストリーム１００１から「Ｌｅｖｅｌ」に対応するシンタクス要素が抽出されて復号される１０１２。この変数「Ｌｅｖｅｌ」が、復号済みの全てのレベルを包含するテーブルのインデックスシンタクスｉのところに加えられる。画素カウンタに対応する変数ｊが１つインクリメントされる１０１３。
【０１４４】
次に、ステップ１０１４で「Ｒｕｎ」シンタクス要素が復号される。ステップ１０１１で、シンタクス要素「Ｐｒｅｄ  ｍｏｄｅ」が１に等しい場合は、「Ｒｕｎ」値もステップ１０１４で復号される。このシンタクス要素「Ｒｕｎ」が、復号済みの全てのランを包含するテーブルのインデックスシンタクスｉのところに加えられる。
【０１４５】
次にステップ１０１５で、値ｊが、ステップ１０１４で復号されたＲｕｎの値の分だけインクリメントされる。変数シンタクスｉが、シンタクス要素の次のセットを検討するため、１つインクリメントされる。カウンタｊがブロック中の画素の数に等しい（すなわち、現在の符号化ユニットに対するシンタクス要素の最後のセットが処理済みである）場合、レベルのブロック９１を構築するためのシンタクスは終了されている１０１７。パレットに関するこの処理終了点で、デコーダは、パレット、ならびに、この符号化ユニットのパレットモードに関連する全ての「Ｐｒｅｄ  ｍｏｄｅ」、「Ｌｅｖｅｌ」、および「Ｒｕｎ」シンタクス要素を包含するテーブルを知る。この後、デコーダは、図６または図７を通して説明したように、符号化ユニットの再構築プロセスに進むことができる。
【０１４６】
ここで、インデックスのブロック中の（インデックスが関連付けられた画素値を持たないパレットエントリに対応する）特定のインデックス値が、エスケープ符号化画素をフラグするのに使用でき、明示的エスケープ符号化値がビットストリームから抽出されることを想起する。
【０１４７】
単なる例示として、各シンタクス要素に関連付けることの可能な符号語を以下に示す。当然のことながら、より良好な符号化効率を得るために、他の符号語を使用することも可能である。
【０１４８】
前述の例における３つの値（ＹＵＶまたはＲＧＢ）で構成される各パレット要素は、一般に、（ステップ１０１６で復号された）３つのバイナリコードを使って符号化される。このバイナリコードの長さは、各カラー成分のビット深度に相当する（２５６の値を表現するためには８ビット）。
【０１４９】
ステップ１００２で復号されるパレットサイズは、通常、単進コードを使って符号化される。
【０１５０】
「Ｐｒｅｄ  ｍｏｄｅ」要素は１ビットを使って符号化される。
【０１５１】
「Ｌｅｖｅｌ」要素はバイナリコードまたは切削型バイナリコードを使って符号化される。
【０１５２】
本発明の諸実施形態において、「Ｒｕｎ」要素は可変長コードを使って符号化される。例えば、Ｒｕｎ要素に対する一部の値は、短縮符号語を使って符号化され、他の値は、共通の符号語接頭辞と、互いに異なる符号語接尾辞とから成る他の符号語を使って符号化される。
【０１５３】
下記のテーブルは、Ｒｕｎ要素に対する符号語の例を示す。
【０１５４】
【表１】
0006584501.tif 000002
【０１５５】
図１５は、上記テーブルによって「Ｒｕｎ」要素を符号化するためのアルゴリズムを示し、「Ｒｕｎ」値を符号化するため使われる符号語は前記値により決まる。
【０１５６】
この例において、Ｒｕｎ要素に対する最初の３つの可能値、すなわち、０、１、および２は、短縮符号語を用いて符号化され（当然ながら、程度の差はあれ第一の可能値には短縮符号化値が関わり得る）、Ｒｕｎ要素に対する他の（後続する）可能値は、共通の符号語接頭辞と、相互の符号語の間で異なる符号語接尾辞とで構成された他の符号語を用いて符号化される。
【０１５７】
符号語のこの設計は、Ｒｕｎ要素に対する最初の３つの値（０、１、および２）に優先度を与え、これらは、通常、パレットモードでは非常に頻度が高い。結果として、Ｒｕｎ要素に対する他の高い値は、相当に長い符号語を用いる。
【０１５８】
この図に示されるように、ステップ１５０１で最初のチェックが行われ、当該値が０と対比される。この値が０に等しい場合、ステップ１５０２で、符号語「０」が生成され、現在のＲｕｎ要素の符号化はステップ１５０９で終了する。
【０１５９】
ステップ１５０１での回答が否定の場合、Ｒｕｎ値が１に等しいかどうかを知るために、ステップ１５０３で第二のテストが行われる。応答が肯定の場合、ステップ１５０４で符号語「１０」が生成され、次のステップは１５０９である。
【０１６０】
Ｒｕｎ値が１に等しくない場合、ステップ１５０５でさらなるテストが行われ、Ｒｕｎ値が２と対比される。Ｒｕｎ値が２に等しい場合、ステップ１５０６で符号語「１１０」が生成され、次のステップは１５０９である。
【０１６１】
ステップ１５０５での応答が否定の場合、接頭辞コード「１１１」が生成され、ステップ１５０８で、Ｒｕｎ値の値が次数３の切削型ライスコードを用いて符号化される（ここでは、符号化のための記号はＲｕｎ要素マイナス３の値である）。次いで、ステップ１５０８の後にステップ１５０９が続き、ここでＲｕｎ値の符号化が完了する。
【０１６２】
符号語（短縮符号語「０」、「１０」、「１１０」、および接頭辞＋接尾辞型符号語「１１１ｘ…ｘ」双方とも）は、ビットストリームに直接挿入することができ、あるいは、Ｒｕｎ値の符号化に関する情報の最終的サイズを低減するために、ＣＡＢＡＣのような算術エントロピーコーダを用いて符号化することも可能である。
【０１６３】
図１６は、Ｒｕｎ値「０」に対してだけ短縮符号語を提供する、「Ｒｕｎ」要素を符号化するための別のアルゴリズムであり、しかして図１５よりも少ないステップを含む。
【０１６４】
このプロセスは、ステップ１６０１で開始され、この過程でＲｕｎ値が０と対比される。回答が肯定の場合、ステップ１６０２で符号語「０」が生成され、現在のＲｕｎ要素の符号化はステップ１６０５で終了する。
【０１６５】
ステップ１６０１での回答が否定の（Ｒｕｎ値が０と異なる）場合、「０」と異なる全てのＲｕｎ値に共通の接頭辞コード「１」を形成するため、ステップ１６０３で「１」の符号語が生成される。次に、ステップ１６０４で、ｋ次数の切削型Ｅｘｐ−Ｇｏｌｏｍｂコードを用いてＲｕｎ値が符号化され、コードのための記号はＲｕｎ要素マイナス１の値であり、次数ｋは、符号化ユニットのサイズおよび現在のＲｕｎ要素の現在のスキャン位置を考慮に入れて計算される。次いでステップ１６０５で、現在のＲｕｎ要素の符号化が終了する。
【０１６６】
図１１は、レベルのブロック９１および次いでカラー空間中の対応ブロック（これは、パレットモードの最初の実装のための予測因子として使われることになるか、またはこれは、パレットモードの他の実装のための復号済み現在の符号化ユニットである）を構築するための再構築プロセスを示す。このプロセスの入力データは、前述の図１０の処理で得られたテーブルであり、「Ｐｒｅｄ  ｍｏｄｅ」、「Ｌｅｖｅｌ」、および「Ｒｕｎ」のリストを包含している。さらなる入力データは、ビットストリーム中でシグナリングされた四分ツリー（図５）から分かった、符号化ユニット８０１のサイズである（これはレベルのブロック８０２／９１と同じサイズである）。
【０１６７】
最初のステップ１１０１で、画素カウンタを表す変数ｉが０に等しく設定され、シンタクス要素の各セットを連続して検討するために、変数ｊも同様に０に等しく設定される。ステップ１１０４で、インデックスｊの「Ｐｒｅｄ  ｍｏｄｅ」のテーブルから抽出された要素Ｐｒｅｄ＿ｍｏｄｅ［ｊ］が０に対してチェックされる。
【０１６８】
これが０に等しい場合、現在の画素ｉに対して新規のレベルが符号化される。結果として、位置ｉの画素の値が、レベルのテーブルからのインデックスｊのレベルに等しい値に設定される；Ｂｌｏｃｋ［ｉ］＝Ｌｅｖｅｌ［ｊ］。これがステップ１１０５である。次の画素を検討するため、ステップ１１０６で変数ｉが１つインクリメントされ、ステップ１１０７で、現在のＲｕｎ中の既に処理された画素のカウント専用の変数ｋが０に等しく設定される。
【０１６９】
ステップ１１０８で、ｋが、ランのテーブルのインデックスｊの「Ｒｕｎ」要素に等しいかどうかを判定するためのチェックが行われる：ｋ＝Ｒｕｎ［ｊ］？。等しくない場合、位置ｉの画素のレベルが、位置ｉ−１の画素のレベル値に等しく設定される：Ｂｌｏｃｋ［ｉ］＝Ｂｌｏｃｋ［ｉ−１］。これがステップ１１０９である。次いで、変数ｉおよび変数ｋが、それぞれステップ１１１０および１１１１で１つインクリメントされる。ステップ１１０８でｋ＝Ｒｕｎ［ｊ］であれば、左側レベル値の伝搬は完了し、ステップ１１２０が実施される（以下で説明）。
【０１７０】
ステップ１１０４で、Ｐｒｅｄ＿ｍｏｄｅ［ｊ］が０と異なる場合、ステップ１１１２で変数ｋが０に設定されて「上側コピー」モードが開始される。次に、ステップ１１１３は、（ｋ−１）がランのテーブルのインデックスｊの「Ｒｕｎ」要素に等しいかどうかをチェックする：ｋ＝Ｒｕｎ［ｊ］＋１？。等しくない場合、位置ｉの画素のレベル値が、上側行の位置ｉの画素のレベル値に等しく設定され：Ｂｌｏｃｋ［ｉ］＝Ｂｌｏｃｋ［ｉ−ｗｉｄｔｈ］、この「ｗｉｄｔｈ」は、符号化ユニットの入力サイズから推定されたレベルのブロック（符号化ユニットと同じ）の幅である。これがステップ１１１４である。次に、変数ｉおよび変数ｋが、それぞれステップ１１１５および１１１６で各々１つインクリメントされる。ステップ１１１３で、ｋ＝Ｒｕｎ［ｊ］＋１の場合、予測モード「上側コピー」は完了し、プロセスはステップ１１２０に進む。
【０１７１】
ステップ１１２０で、変数ｉがブロック９１／ＣＵ８０１中の画素の量に等しいかどうかを判定するためのチェックが行われる。等しくない場合、シンタクス要素の次のセットを検討するために、ステップ１１２１で、変数ｊが１つインクリメントとされ、プロセスは、前述したステップ１１０４にループバックする。
【０１７２】
ステップ１１２０で、全ての画素が処理済みとなったならば、ステップ１１２２で最終のレベルのブロック９１が得られている：これはテーブルＢｌｏｃｋ［］に対応する。次いで最終ステップ１１２３（例えば、ステップ７０９に該当する）は、図１０のプロセスを用いて復号されたパレット８０３を使って、各レベルをカラー値に変換することにある。この最終ステップは、ブロック中のこの位置のレベルおよびパレット中の対応エントリに従い、各ブロック位置の画素値（Ｙ、Ｕ、Ｖ）または（Ｒ、Ｇ、Ｂ）に対して行われる
なお、エスケープ画素がそれらの正確な画素値に変換されるのは、このステップ１１２３の過程である。エスケープモードは、レベルテーブルの特定の値を用いてシグナリングすることができる。例えば、パレットが３２の要素を包含する場合、最後の値（３１）を使ってエスケープモードをシグナリングすることが可能で、この特定の値には、パレットエントリは関連付けされず、これは、エスケープ画素が、パレット中の画素値に関連付けられていない値（最後尾の値）を使って、レベルのブロック中に定義されることを意味する。
【０１７３】
しかして、エスケープ画素を識別するために、ステップ１１２３は、Ｂｌｏｃｋ［ｊ］を、エスケープ画素をシグナリングするために割り当てられた特定の値と対比する。ステップ１１２３は、これらエスケープ画素の各々に対し、エスケープ画素の符号化ユニット７１０から対応する正確な画素値を読み出す。
【０１７４】
諸実施形態において、特定のレベル値を用いてエスケープモードをシグナリングすることが可能で、この値には、当該画素の正確な値を定義している３つのカラー成分の値が後続する。
【０１７５】
さらに、エスケープ画素がエンコーダで量子化されている場合は、ステップ１１２３で量子化解除ステップが実施される。
【０１７６】
ＨＥＶＣ  ＳＣＣに導入されたパレットモードの他の態様は、エンコーダによる、現在の符号化ユニットを符号化するために使われるパレットの決定（下記の図１２を参照）ならびにエンコーダでのＰｒｅｄ  ｍｏｄｅ、Ｌｅｖｅｌ、およびＲｕｎシンタクス要素の選択（下記の図１３を参照）に関する。
【０１７７】
図１２は、エンコーダでの例示的なパレット決定アルゴリズムを示す。このプロセスの入力データは、画素の当初の符号化ユニットおよびその符号化ユニットサイズである。この例ではＹＵＶパレットが構築されているが、他の実装では、同様な仕方で構築されたＲＧＢパレットを得ることも可能である。
【０１７８】
ステップ１２０１で、画素カウンタを表す変数ｊが０に設定され、パレットが構築される際にその発達度を追跡するための変数「Ｐａｌｌｅｔｔｅサイズ」も同様に０に設定され、例えば、ロスの多い符号化に対しては９またはロスのない符号化の場合は０に設定される、閾値を表す「ＴＨ」が定義される。実際は、ロスのない符号化では、量子化は完全にスキップされ、ＱＰは、人為的に例えば０に設定される。ロスのない特性は、ＣＵレベルで定義することができる（ピクチャパラメータセットレベル（ＰＰＳ−ｌｅｖｅｌ：Ｐｉｃｔｕｒｅ  Ｐａｒａｍｅｔｅｒ  Ｓｅｔ−ｌｅｖｅｌ）のシンタクス要素ｔｒａｎｓｑｕａｎｔ＿ｂｙｐａｓｓ＿ｅｎａｂｌｅｄ＿ｆｌａｇが１に設定されている場合、シンタクス要素ｃｕ＿ｔｒａｎｓｑｕａｎｔ＿ｂｙｐａｓｓ＿ｆｌａｇが存在し、１に設定される。）
いずれの場合も、符号化ユニットＣＵがロスなしに符号化されると、ここでの目標は、レベルがいかなるミスマッチもなく画素を表現するのを保証することなのでエラーの限度が０に設定される。次いでステップ１２０３で、画素ｐｉ、すなわちスキャン順に従ったインデックスｉを有する画素が当初の符号化ユニット１２０４から読み取られる。次いで、変数ｊが１２０５で０に等しく設定され、ステップ１２０６で、パレットサイズが変数「ｊ」に等しいかどうか（すなわち、構築中のパレットの全てのパレット要素の検討が済んだかどうか）を判定するためのチェックが行われる。
【０１７９】
パレットサイズがｊに等しい場合、ステップ１２０９で、インデックス「ｊ」のパレットが画素値ｐｉに等しく設定される。このことは、現在の画素ｐｉが、それに関連付けられたインデックスｊとともに、パレット中の新規要素になることを意味する。さらに正確には、次の割り当てが行われる：
ＰＡＬＹ［ｊ］＝（Ｙｉ）
ＰＡＬＵ［ｊ］＝（Ｕｉ）
ＰＡＬＶ［ｊ］＝（Ｖｉ）
前式のＰＡＬＹ，Ｕ，Ｖはカラー値を格納するための３つのテーブルである。
【０１８０】
ステップ１２１０でパレットサイズ（Ｐａｌｅｔｔｅ＿ｓｉｚｅ）が１つインクリメントされ、ステップ１２１１で、発生テーブルカウンタが、該インデックス「Ｐａｌｅｔｔｅサイズ」に対して１に等しく設定される。次いで、ステップ１２１３で、現在の符号化ユニットの次の画素「ｉ」を検討するために、変数ｉが１つインクリメントされる。その後ステップ１２１４で、現在の符号化ユニットの全ての画素が処理済みかどうかを判定するためのチェックが行われる。それらが全て処理済みの場合、このプロセスは、後記で説明する順序付けステップ１２１５で完了し、それ以外の場合は、前述したステップ１２０３で次の画素が検討される。
【０１８１】
ステップ１２０３〜１２０６、および１２０９〜１２１１で構成されるプロセス分岐は、ブロックの各画素を反復的に検討し、検討されている画素が、構築中のパレットに既存の全ての要素または要素群からあまりに遠く隔たっている都度、検討された画素の値を有する新規の要素をパレットに加える（テスト１２０７）。
【０１８２】
ステップ１２０６に戻って、ｊがｐａｌｅｔｔｅ＿ｓｉｚｅと異なる場合、ステップ１２０７が実施され、各カラー成分に対し、ｐｉとインデックスｊのパレット要素との間の差の絶対値が計算される。この算式が本図に示されている。全ての絶対差が、所定の閾値ＴＨより真に小さければ、ステップ１２１２で、パレット中の要素「ｊ」に関する発生カウンタが１つインクリメントされる。ステップ１２０７は、構築中のパレットの各要素に対するクラスを生成し、かかるクラスは、ＴＨ限度を前提として、要素のカラーに隣接するカラー群を網羅する。しかして、ステップ１２１２は各々のクラスの発生をカウントする。ステップ１２１２の後には、既に説明したステップ１２１３が続く。
【０１８３】
ステップ１２０３〜１２０７、および１２１２で構成されるプロセス分岐は、ブロックの各画素を反復的に検討し、検討された画素に十分近いパレット要素に関連付けられたカウンタをインクリメントする。
【０１８４】
ステップ１２０７の条件に合致しない場合、構築中のパレット中の次のパレット要素を検討するために、ステップ１２０８で変数ｊが１つインクリメントされる。これは、ステップ１２０７の新規発生を通して、他のパレットカラー要素と現在の画素とを比較するためである。パレット中のどの要素もステップ１２０７の基準を満たさない場合、前述のように、ステップ１２０９、１２１０、および１２１１を参照して新規要素がパレットに加えられる。
【０１８５】
なお、判定モジュール１２０７は、４：４：４（ＹＵＶまたはＲＧＢ）シーケンスに対する各カラー成分を対比することができ、４：２：０シーケンスに対しては、輝度カラー成分もしくは彩度カラー成分のどちらかだけを対比することが可能である。
【０１８６】
図１２のプロセスの終端において、テーブル「Ｃｏｕｎｔｅｒ」は、それぞれのパレット要素によって定義されるクラスの発生の数を包含する。次いでステップ１２１５で、パレット要素は、最も頻度の高い要素がパレット中の最初の位置（最も低いインデックスまたは「レベル」を有するエントリ）になるように、それらの発生に従って順序付けされる。
【０１８７】
また、パレットのサイズは、例えば２４エントリなど、最大サイズに制限することができることに留意する。かかる状況において、ステップ１２１５から得られるパレットのサイズが２４を超える場合、そのパレットは、順序付けされたパレット中の２５番目位置からの要素（エントリ）を除去することによって低減される。これにより構築されたパレットがもたらされる。
【０１８８】
ここで、エンコーダでのＰｒｅｄ  ｍｏｄｅ、Ｌｅｖｅｌ、およびＲｕｎシンタクス要素の選択を見ると、図１３のプロセスの入力データは、画素の当初の符号化ユニット、図１２のプロセスを通して構築されたパレット、および符号化ユニットのサイズである。具体的には、ＩＮＴＲＡ符号化、ＩＮＴＥＲ符号化、およびパレット符号化の間でどの符号化モードを使うべきかを決める際に、この選択評価が行われる。
【０１８９】
最初のステップ１３０１で、画素カウンタを表す変数「ｉ」が０に設定される。以下に説明するプロセスは、ｉから始まる画素に対するシンタクス要素を決めるためのものである。予測の２つのモードが、別々に評価される：本図の右側部分では「Ｐｒｅｄ  ｍｏｄｅ」＝０であり、本図の左側部分では「Ｐｒｅｄ  ｍｏｄｅ」＝１である。
【０１９０】
また一方、これらの予測モードが不成功の場合、１つまたは複数の画素値を明示的に符号化するために、前述で紹介したエスケープモードが用いられる。
【０１９１】
「上側コピー」予測（「Ｐｒｅｄ  ｍｏｄｅ」＝１に対応する）に対し、現在のＲｕｎ中のレベルの数をカウントするのに使われる変数「ｉｃｏｐｙ」が、ステップ１３０３で０に等しく設定される。次いでステップ１３０４で、画素位置ｉ＋ｉｃｏｐｙ：Ｂｌｏｃｋ［ｉ＋ｉｃｏｐｙ］の現在のレベルが、上側行中の真上：Ｂｌｏｃｋ［ｉ＋ｉｃｏｐｙ−ｗｉｄｔｈ］に位置する画素のレベルと対比される。この「ｗｉｄｔｈ」は現在の符号化ユニットの幅に相当する。
【０１９２】
なお、符号化ユニットの各画素のレベルのＢｌｏｃｋ［ｉ＋ｉｃｏｐｙ］は、ステップ１３０８で並行して判定される。このステップは、上記で既に説明したように、位置ｉ＋ｉｃｏｐｙの画素に、最も近いパレット要素（実際上はそのインデックスまたはレベルの）を関連付けることにある。或る別形では、このステップは、位置ｉの画素との距離が所定の閾値より小さな最初のパレット要素を選択することにある。このステップは、位置ｉ、パレット１３０６、および当初の符号化ユニット１３０７を使用する。
【０１９３】
また一方、現在の画素値がパレットのどのエントリからも「遠い」場合、この画素に対しエスケープモードを起動することをシグナリングするため、ステップ１３５０が実施される。エスケープモードは、例えば、或る画素のカラー成分値とパレット中の最も近いエントリとの間の差が所与の閾値を超える場合に用いられる。ステップ１３５０の次に、ステップ１３１９にループする前に、ステップ１３５１で画素カウンタｉが１つインクリメントされる。
【０１９４】
僅かな変形において、上記で定義された特定のレベル値をエスケープ画素に割り当てるステップ１３５０は、ステップ１３０８の内部にありステップ１３５１は削除される。このアプローチは、エスケープ画素をシグナリングするのに使われる特定の値の発生を効率的に符号化しながら、「上側コピー」および「左側値」予測モードを用いることを可能にする。
【０１９５】
ステップ１３０４で、Ｂｌｏｃｋ［ｉ＋ｉｃｏｐｙ］＝Ｂｌｏｃｋ［ｉ＋ｉｃｏｐｙ−ｗｉｄｔｈ］であれば、画素のブロックの次の画素値を検討するため、且つ位置ｉ＋ｉｃｏｐｙの現在の画素レベルを現在の「上側コピー」Ｒｕｎに含めることが可能であることを示すために、変数「ｉｃｏｐｙ」が１つインクリメントされる。ステップ１３０４で、Ｂｌｏｃｋ［ｉ＋ｉｃｏｐｙ］がＢｌｏｃｋ［ｉ＋ｉｃｏｐｙ−ｗｉｄｔｈ］と異なる場合、すなわち、「上側コピー」Ｒｕｎの現在の評価が終了した場合は、変数「ｉｃｏｐｙ」が判定モジュール１３１４に送られる。プロセスのこの段階において、変数「ｉｃｏｐｙ」は、真上の行からコピーされた値の数に相当する。
【０１９６】
左側値予測（「Ｐｒｅｄ  ｍｏｄｅ」＝０に対応する）に対し、Ｒｕｎ値（ｉｌｅｆｔ）を判算定するループは、並行してまたは逐次に処理される。最初に、現在の画素のインデックスｉを格納するのに使われる変数「ｉＳｔａｒｔ」が「ｉ」に設定され、また、インデックス「ｉ」に続く画素のレベルを連続して検討するために使われる変数「ｊ」も「ｉ」に等しく設定され、且つ構築中の現在のＲｕｎをカウントするのに使われる「ｉｌｅｆｔ」は０に等しく設定される。これがステップ１３０９である。次に、ステップ１３１０は、ｊ！＝０、且つ「Ｐｒｅｄ＿ｍｏｄｅ［ｊ−１］」＝０、且つＢｌｏｃｋ［ｊ］＝Ｂｌｏｃｋ［ｊ−１］であるかどうかを判定することにある。Ｐｒｅｄ＿ｍｏｄｅ［］は、予測モード（「上側コピー」予測および左側値予測それぞれに対し１または０）を格納するためにエンコーダによって使われるテーブルである。該テーブルが、引き続く画素が処理されるにつれ、以下に説明するステップ１３１７で漸進的に書き入れられ、このテーブルは、例えばステップ１３０１でゼロ値に初期化されている：任意のｋに対しＰｒｅｄ＿ｍｏｄｅ［ｋ］＝０。
【０１９７】
ステップ１３１０で条件が合致すると、位置ｊの現在の画素レベルを現在の「左側値」Ｒｕｎに含めることが可能なことを示すために、ステップ１３１１で変数「ｉｌｅｆｔ」が１つインクリメントされ、画素のブロックの次の画素値を検討するために、ステップ１３１２で変数ｊが１つインクリメントされる。
【０１９８】
ステップ１３１０の条件が満たされない場合、変数「ｊ」が、それが現在の「左側値」Ｒｕｎに対する検討対象の最初の画素値かどうかを判定するために、「ｉＳｔａｒｔ」と対比される。これがステップ１３１３である。「ｊ」が「ｉＳｔａｒｔ」以下の場合、すなわち、それが現在のＲｕｎに対する検討対象の最初の画素値である場合は、それにより現在のＲｕｎが開始され、前述のステップ１３１２で次の画素値が検討される。「ｊ」が「ｉＳｔａｒｔ」より真に高い場合、すなわち、現在の「左側値」Ｒｕｎの画素値とは異なる最初の画素値が検出された場合は、現在の「左側値」Ｒｕｎの長さに対応する変数「ｉｌｅｆｔ」が判定モジュール１３１４に送られる。なお、「上側コピー」予測に対するループとして、インデックスｉのレベルのＢｌｏｃｋ［ｉ］が、同じループのステップ１３０８で判定される。
【０１９９】
「左側値予測」および「上側コピー」モードに対する最大ランを計算した後、ステップ１３１４で、変数「ｉｌｅｆｔ」と「ｉｃｏｐｙ」とが比較される。これは、「ｉｃｏｐｙ」！＝０で、且つ「ｉｃｏｐｙ」＋２が「ｉｌｅｆｔ」より高いかどうかを判定するためである。これは、上側コピーモードもしくは左側値予測モードを選択するための例示的な基準である。具体的には、左側値予測モードのレベルのレートコストを補償するのに使われるパラメータ「２」は、若干変更することが可能である。とりわけ、追加されるパラメータ（この例では２）は、パレットのサイズ（Ｐａｌｅｔｔｅ＿ｓｉｚｅ）がレベルのコストに直接関連しているので、該サイズに応じて設定するとよい。１つの実施形態において、ステップ１３１４の比較で、演算「＋２」は除外され、「ｉｃｏｐｙ！＝０＆＆ｉｃｏｐｙ＞ｉｌｅｆｔ」がチェックされる。この実施形態は符号化効率を向上させる。
【０２００】
ステップ１３１４の条件は、「ｉｃｏｐｙ」が０に等しいか、またはｉｌｅｆｔ−２以下である場合、ステップ１３１５で「左側予測」モードが選択されることを意味する。この場合、同じステップ１３１５で「ＰｒｅｄＭｏｄｅ」変数が０に等しく設定され、Ｒｕｎ変数が「ｉｌｅｆｔ」に等しく設定される。他方、「ｉｃｏｐｙ」が０と異なり且つ「ｉｌｅｆｔ−２」より真に高い場合、ステップ１３１６で「上側コピー」モードが選択される。この場合、ステップ１３１６で「ＰｒｅｄＭｏｄｅ」変数は１に等しく、Ｒｕｎ変数はｉｃｏｐｙ−１に等しく設定される。
【０２０１】
次いで、エンコーダでの「Ｐｒｅｄ＿ｍｏｄｅ」および「Ｒｕｎ」を包含するテーブルがステップ１３１７で、現在値の「Ｐｒｅｄ＿ｍｏｄｅ」および「Ｒｕｎ」によって更新される。その後にステップ１３１８で、画素のブロック中の検討対象の次の位置が計算され、これは「ラン」値＋１によってインクリメントされた現在の位置ｉに相当する。次いでステップ１３１９で、符号化ユニットの最後の画素が処理されたかどうかを判定するためのチェックが行われる。最後の画素であれば、このプロセスはステップ１３２０で終了し、それ以外の場合は、シンタクス要素の新しいセットを得るため、次の画素位置に対する２つの予測モード「左側予測」および「上側コピー」の評価が、ステップ１３０３および１３０９から始まって評価される。
【０２０２】
このプロセスの終了点において、エンコーダは、符号化ユニットの各サンプルまたは画素に対するレベルを知り、３つのテーブルＰｒｅｄ＿ｍｏｄｅ［］、Ｂｌｏｃｋ［］、およびＲｕｎ［］の内容に基づいて、レベルのブロックの対応シンタクスを符号化することが可能である。
【０２０３】
次いで、ブロックの予測因子を決めるために、エンコーダは、パレットを用い、また、１３５０でエスケープ画素としてシグナリングされた画素のリストも用いて、レベルの定義されたブロックを変換する。
【０２０４】
図１７および１８は、それぞれ図１５および１６におけるものと同じ表現によって、パレットモードでのＲｕｎシンタクス要素を符号化するための、エンコーダでの例示的なアルゴリズムを示す。したがって、入力データは同じである。
【０２０５】
これらのアルゴリズムの例では、１つのフラグ（例えば、Ｒｕｎ要素に対する「終端まで」符号語を介して）が、現在の「Ｒｕｎ」が最後のものであって、残りのインデックスの数に関係なく、すなわち現在のおよび最後のシンタクス要素のセットに対応するインデックスのグループを形成するこれら残りのインデックスの数を指定せずに、現在の符号化ユニットの終端までの全ての残りのインデックスに適用されること、を示すために使われる。このアプローチは、最後のグループ（多くの場合、画像の底部は通常単調なので、少なくとも画像の最後の符号化ユニット対してこのグループは大きくなる）に対するインデックスの正確な数を符号化するために、より長い符号語が必要とされる状況と比べて、一部のビットを節減することを可能にする。
【０２０６】
このアプローチによれば、各セットに設けられるＲｕｎシンタクス要素は、インデックスの対応グループを形成するインデックスが、残りのブロック位置の数に関係なくインデックスのブロックの終端までのかかる全ての残りのブロック位置にあるインデックスであることを示す、終端まで−符号語を含め、少なくとも２つの利用可能な符号語から選択された符号語を使用する。しかして、この終端まで−符号語は、符号化ユニットを構成する最後のセット中のＲｕｎ要素に対して設定することが可能である。但し、これは必須ではなく、一部の符号化ユニットに対しては、前述した従来式のアプローチをなお実装することが可能である。
【０２０７】
なお、終端まで−アプローチをシグナリングするために、従来式のＲｕｎ要素とは別個の、終端まで−バイナリフラグを設けることができる。また一方、Ｒｕｎ要素に対する何らかの従来式符号語と組み合わされたかかるバイナリフラグは、組み込みのＲｕｎ要素の符号語を形成する。これは、本明細書がＲｕｎ要素に対する可能な符号語に重点を置いていることによる。
【０２０８】
図１７と１８とは、Ｒｕｎ値を符号化するのに使われる符号語によって相互に異なる。これらの図に示されるように、現在の符号化ユニットに対する最後のセット中のＲｕｎシンタクス要素は、シンタクス要素の現在のセットに対し「終端まで」オプションを可能にするステップをシグナリングするため、終端まで−符号語を使用する。
【０２０９】
図１７の実施形態において、ステップ１７０１〜１７０７は図１５の対応するステップ（ステップ１５０１〜１５０７）と同一であり、したがって再述はしない。
【０２１０】
ステップ１７０７（プロセスのこの位置では、符号化対象のＲｕｎ値は２よりも大きい）での符号語「１１１」の生成に続き、ステップ１７０８は、現在のＲｕｎが現在の符号化ユニットに対する最後のものかどうか（すなわち、シンタクス要素の現在のセットが最後のものなのかどうか）を判定することから成る。この最後のＲｕｎとは、プロセスが符号化ユニットの一番後の画素（実際にはレベルのブロックの一番後のインデックス）に到達したので、この最後のＲｕｎの符号化の後は、この符号化ユニットに対しては他の演算（「上側コピー」または「左側値」）が行われることはないことを意味する。
【０２１１】
例えば、最後のＲｕｎは、図１３のプロセスの過程で、テスト１３１９が肯定であるときに検出することができる。かかる場合、ステップ１３１７でメモリ中に格納された最後のＲｕｎが、現在の符号化ユニットに対する最後のものである。
【０２１２】
現在のＲｕｎが最後のものである場合、本実施形態の着想は、ステップ１７１０で、最後のＲｕｎが処理されていることを示すために、ビットストリーム中に或るフラグ「１」を符号化することによって、Ｒｕｎの値（これは、多くの場合大きく、しかして相当に長い符号語に繋がりかねない）のシグナリングを回避することである。
【０２１３】
ステップ１７０８での応答が否定の場合、次のステップはステップ１７０９であり、このステップで、現在のＲｕｎが最後のものでないことを告げる或るフラグ「０」が、ビットストリーム中に符号化される。次に、ステップ１７１１で、ステップ１５０８と同様に、Ｒｕｎマイナス３の値が符号化される。
【０２１４】
この構成において、Ｒｕｎ要素の高い値（ステップ１７０９と組み合わせてステップ１７０７からもたらされる「１１１」）に対して使用される共通の符号語接頭辞が、終端まで−符号語を形成するために用いられる。次に、終端まで−符号語の接尾辞部分が最小に、すなわち単一ビットに短縮され（ステップ１７１０）、この終端まで−符号語は、共通の符号語接頭辞を含み、その共通符号語接頭辞に加えて１ビットの接尾辞を含む。
【０２１５】
なお、本発明によって記述された方法の符号化効率を向上するために、ステップ１７０９および１７１０で述べた「終端まで」フラグを、ＣＡＢＡＣのような算術エントロピーコーダを用いて符号化することも可能である。
【０２１６】
また、図１８の実施形態において、終端まで−符号語は、「他の」Ｒｕｎ値（すなわち短縮符号語のないもの）を符号化するのに使われる共通符号語接頭辞も含み、この共通接頭辞バイナリ値に加えて１ビットの接尾辞を含む。ステップ１８０１〜１８０３は、図１６の対応するステップ（ステップ１６０１〜１６０７）と同じであり、したがって再述はしない。
ステップ１８０３での符号語「１」の生成（すなわち、現在のＲｕｎ値は０とは異なる）に続いて、ステップ１８０４は、（ステップ１７０８と同様に）現在のＲｕｎが現在の符号化ユニットに対する最後のものかどうかを判定することにある。
【０２１７】
現在のＲｕｎが最後のものである場合、本実施形態の着想は、最後のＲｕｎが処理されていることを示すために、ステップ１８０５で、ビットストリーム中にフラグ「１」を符号化することによって、Ｒｕｎ長さの値（これは、多くの場合大きく、しかして相当に長い符号語に繋がりかねない）のシグナリングを回避することである。
【０２１８】
ステップ１８０４での応答が否定の場合、次のステップはステップ１８０６であり、このステップで、現在のＲｕｎが最後のものでないことを告げるフラグ「０」が、ビットストリーム中に符号化される。次に、ステップ１８０７で、ステップ１６０４と同様に、Ｒｕｎの値が符号化される。
【０２１９】
図１７および１８は、エンコーダの視点からのプロセスを示す。当業者は、デコーダにおける対応する復号プロセスを直接に推定できるであろう。これは、ビットストリームからのビットを解析し、インデックスの定義された数に関連付けられた所定符号語、もしくは本発明による「終端まで」符号語いずれかの、Ｒｕｎ要素に対する符号語を得ることを意味する。例えば、復号プロセスのステップ１０１４で、「終端まで」符号語が検出されたとき、考慮対象のＲｕｎ値は、プロセスを、それを終了するステップ１０１７に導くために、Ｐｉｘｅｌｓ＿ｉｎ＿Ｂｌｏｃｋ−ｊとすることができる。
【０２２０】
これら２つの図の例は、Ｒｕｎ要素に対する第一の（且つ最も頻度の高い）可能な値（すなわち、図１７に対しては０、１、および２、ならびに図１８に対しては０）への優先度を保持する。これは、ステップ１７０７および１８０３それぞれの後に、最後のＲｕｎをシグナリングするための終端まで−符号語を設けることを意味する。
【０２２１】
他の変形では、ステップ１７０３と１７０５との間に（この場合、終端まで−符号語は例えば「１１０」である）、またはステップ１７０１と１７０３との間に（この場合、終端まで−符号語は例えば「１０」である）、さらには、ステップ１７０１の前に（この場合、終端まで−符号語は例えば「０」である）ステップ１７０８を設けることが可能である。同様に、図１８に対する別の変形では、ステップ１８０１の前に（この場合、終端まで−符号語は例えば「０」である）ステップ１８０４を設けることも可能である。これらの変形において、最後のＲｕｎをシグナリングするためＲｕｎ要素に対し用いられる終端まで−符号語は短縮符号語である。
【０２２２】
ステップ１７０８および１８０４が、それぞれステップ１７０１および１８０１の前にある状況は、「終端まで」フラグがＲｕｎ要素から分離されており、Ｒｕｎ要素の直前に配置されている実施形態と見なせばよい。
【０２２３】
ＨＥＶＣ  ＳＣＣの他の発明的改良は、最後のＲｕｎをシグナリングするために「終端まで」フラグを用いるという前述の着想に依存しないので説明しないが、パレットモードを使う符号化の効率を向上するために、該着想と組み合わせることは可能である。
【０２２４】
前述から、一部の画素がどのパレットエントリによっても適正に表現できない場合、それらは異なって符号化される、すなわち「エスケープ符号化」され、現在の符号化ユニット中で、エスケープ画素とパレット符号化画素とを区別するために、特定のシグナリングが設けられることが分かる。
【０２２５】
エスケープ符号化モードは、明示的画素値の符号化を必要とし、しかして多くのビットの使用を必要とするので、非常に高コストとなる。これは符号化効率に悪影響をもたらすことがある。
【０２２６】
さらに、図１３に戻って参照すると、エンコーダによるパレットモードの評価は、符号化ユニットの各画素に対するインデックス（レベル）を、パレット中に見出すことを必要とする。これがステップ１３０８である。このステップの処理コストは高いことが判明することがある。
【０２２７】
かかる短所を制限するために、エスケープ画素の数が所定の閾値に達したとき、パレットモードの評価を中止するという第一の発明的改良が提案される。かかる評価に対する処理コストは、しかして、（各エスケープ画素がビットストリーム中で多くのビットを必要とするので）圧縮率が低くされるとすぐに劇的に低減される。実際上、パレットモードを用いて現在の符号化ユニットを符号化するため多数のエスケープ画素が必要となる場合、符号化ユニットに対する同時符号化モード（イントラまたはインター）がレート歪みのより良好な妥協点を有し、その結果エンコーダによって選択されることになる、高い可能性がある。
【０２２８】
しかして、第一の発明的改良によるプロセスは、
パレット符号化モードを含め、２つ以上の符号化モードの各々に対し、画素の現在のブロックの符号化を評価するステップであって、該パレット符号化モードは、インデックスのブロックを構築するために現在のパレットを用い、該現在のパレットは、それぞれのエントリインデックスを対応する画素値に関連付けるエントリのセットを含む、該評価するステップと、
上記の評価に基づいて、画素の現在のブロックを符号化するため、２つ以上の符号化モードから１つの符号化モードを選択するステップと、
を含み、
パレット符号化モードを用いる画素の現在のブロックの符号化を評価するステップが、現在のブロックの画素を引き続き検討し、各検討された画素に対し、
パレット中で、距離閾値を所与として、検討されている画素に十分に近い対応画素値を有するパレットエントリを探すステップと、
パレット中に、距離閾値を所与として、検討されている画素に十分に近いパレットエントリが見付かった場合、エントリインデックスを用いて検討された画素を符号化するステップと、
パレット中に、距離閾値を所与として、検討されている画素に十分に近いパレットエントリが見付からなかった場合、検討された画素をエスケープ符号化するステップであって、該エスケープ符号化は、検討された画素の値の明示的符号化（すなわち、この画素に対する予測なし）を含む、該エスケープ符号化するステップと、
を含み、
エスケープ符号化された画素の数が画素の現在のブロックに対する所定の閾値を超えた場合、パレット符号化モードを用いて画素の現在のブロックの符号化を評価するステップは中止される。
【０２２９】
連続する画素の間の冗長性に対して、格納された情報の低コストでの再使用を選好するため、処理された最後の画素および対応するパレットレベルを格納することによって、パレットの評価をスピードアップする第二の発明的改良が提案される。これにより、各画素に対するインデックスの網羅的な探索を回避することができる。
【０２３０】
しかして、第二の発明的改良によるプロセスは、
画素の現在のブロックおよび現在のパレットからインデックスのブロックを構築するステップであって、現在のパレットは、それぞれのエントリインデックスを対応する画素値に関連付けるエントリのセットを含む、該構築するステップと、
インデックスのブロックを符号化するステップと、
を含み、
画素の現在のブロックに対するインデックスのブロックを構築するステップは、画素の現在のブロックの各画素に対し、パレット中で、距離閾値を所与として、検討されている画素に十分に近い対応画素値を有するパレットエントリを探すステップと、見付かったパレットエントリのエントリインデックスをインデックスのブロックに加えるステップと、現在の画素および見付かったパレットエントリのエントリインデックスをメモリに格納するステップと、
現在の画素の値が、画素の現在のブロック中の先行の画素の値に等しい場合、メモリ中に格納されたその先行の画素に対するエントリインデックスを読み出すステップと、読み出されたインデックスを、現在の画素に対するエントリインデックスとしてインデックスのブロックに加えるステップと、
を含む。
【０２３１】
第一および第二の発明的改良は、パレット符号化モードを用いる際に、組み合わせてまたは別個に使用することが可能である。
【０２３２】
図１９は、パレット符号化モードに対するこれら２つの発明的改良の組み合わせを示す。
エンコーダは、現在のパレットを知っており、画素に対応するレベル（またはインデックス）を判断する。これが、例えば前述したステップ１３０８である。
【０２３３】
ステップ１９０９、１９１０、および１９１４は、エスケープ符号化される画素が多過ぎる場合、処理時間を浪費しないために、パレット符号化モードの評価を中止することにある第一の発明的改良を実装する。しかして、パレット符号化モードに対しては、制限された数のエスケープ画素だけが受容される。
【０２３４】
ステップ１９２０、１９２１、および１９２２は、少なくとも見出された最後のインデックスを把握することにある第二の発明的改良を実装する。本図の例において、見出された最後のインデックスだけがメモリに保持されるが、最後の１つ前に見出されたインデックスにも同じことが適用できようし、そのまた前も同様である。
【０２３５】
開始ステップ１９０１で、現在の符号化ユニット中の各画素を連続して検討するための画素カウンタを表す変数「ｉ」、および現在の符号化ユニット中のエスケープ画素の数をカウントするのに使われる変数「Ｃｏｕｎｔ」が０に初期化される。さらに、カウントの閾値を定義する変数「ＴＨ」が、理想的には、ステップ１０８（図１）で使われた量子化パラメータＱＰにより決まる値に設定される。最後になるが、画素値変数「Ｌａｓｔ」およびインデックス変数「ＬＩＤＸ」がメモリ中の「未定義」値に設定される。
【０２３６】
次にステップ１９０３で、当初の符号化ユニット１９０４から、現在の画素Ｐｉが読み取られる。現在の画素値が処理済みの最後の画素に等しいかどうかを知るために、現在の画素Ｐｉと、ステップ１９２０でＬａｓｔの現在の値とが対比される。
【０２３７】
これらが同一の場合、ステップ１９２１で現在の画素に対するインデックスがＬＩＤＸに設定され、これは、現在の画素が処理済みの最後の画素と同じインデックスを有することを意味する。
【０２３８】
その他の場合は、ステップ１９０６で、従来式の探索アルゴリズムを用いて、パレット中の最良のインデックスが探索される。例として、この探索は、例えば、最大成分絶対誤差、絶対誤差の和、平方誤差の和などに基として、Ｐｉと比べて最小の誤差を生じるインデックスを見付けることに基づくことが可能である。
【０２３９】
次に、ステップ１９０７は、見出されたインデックスに対応する（探索アルゴリズムによってもしくはＬＩＤＸを使って得られた）パレットエントリがＰｉを十分に表現しているかどうかをチェックする。このチェックは、上記で定義された閾値ＴＨに基づけばよく、（探索１９０６の過程で計算された）前述の誤差をＴＨと比較することが可能である（ＬＩＤＸが使われた場合、チェック１９０７は常に正となることを意味する）。誤差がＴＨよりも低い場合、パレットエントリインデックスは、表現していると認められる。
【０２４０】
見出されたインデックスに対応するパレットエントリが、Ｐｉを十分に表現している場合、見出されたインデックスをステップ１９１１でＰｉに対して用いる、すなわち、レベルのブロックに加えることができる。次いで、プロセスはステップ１９２２に続く。
【０２４１】
その他の場合は、前に説明したように、現在の画素Ｐｉはステップ１９０８でエスケープ符号化される。これは、画素Ｐｉが「エスケープしている」とシグナリングされ、その値が明示的に符号化されることを意味する。次いでステップ１９０９で、エスケープカウントＣｏｕｎｔがインクリメントされる。
【０２４２】
ステップ１９０９に続いて、エンコーダは、エスケープカウントＣｏｕｎｔが高過ぎる値に到達しているかどうかをチェックする。これを行うために、ステップ１９１０でエンコーダは、Ｃｏｕｎｔと、有利には現在の符号化ユニット中の画素の数によって決まる閾値と、を比較する。
【０２４３】
実施形態において、閾値の値は、例えば１０％、２０％、２５％、または３０％など、現在の符号化ユニット中の画素の数のパーセントを表す。
【０２４４】
閾値の値が高過ぎることが判明した場合、ステップ１９１２で、パレット評価は中止され、一切のさらなるパレット処理（パレット化、ラン判定、符号化レート評価など）はスキップされる。
【０２４５】
高過ぎると認められない場合、プロセスはステップ１９２２に続く。
【０２４６】
インデックス探索を加速するために、次のステップ１９２２は、現在の画素値Ｐｉおよび対応する見出されたインデックスをメモリ中のＬａｓｔおよびＬＩＤＸにそれぞれ格納することにある。
【０２４７】
次いでステップ１９１３で、現在の符号化ユニットの次の画素「ｉ」を検討するために、変数ｉがインクリメントされる。
【０２４８】
次に、現在の符号化ユニットの全ての画素が処理されたかどうかを知るために、ステップ１９１４でチェックが行われる。全て処理されている場合、符号化ユニット全体が「パレット化」されており、本プロセスはステップ１９１５で終了する。それ以外の場合は、既に述べたように、ステップ１９０３で次の画素が検討される。
【０２４９】
図１９の実施形態の別形において、ステップ１９２０および１９２２に対して、画素の現在のブロック中の現在の画素の上側に位置する画素を、上記で定義された「Ｌａｓｔ」画素の代わりに用いることが可能である。これを行うために、符号化ユニットの１つの行全体に対し、画素とインデックスとの間の関連付けを、メモリ中に格納する（すなわち、ステップ１９２２の過程で書き入れる）ことができる。その後、ステップ１９２０は、現在の画素の上側の画素に対応する関連付けを、それが存在する場合読み出せばよい。
【０２５０】
図２０は、パレット算定アルゴリズムの過程で生じるパレット符号化モードに対する２つの発明的改良の、別の組み合わせを示す。
【０２５１】
エンコーダへの入力は、現在の符号化ユニットおよびそのサイズである。本図の例では、ＹＵＶパレットが生成される。当然ながら、当業者は、この例をＲＧＢパレットの構築に容易に適合させることができよう。
【０２５２】
このアルゴリズムは、図１９のものと非常に類似している。ステップ２００３、２００４、２００６、２００７、２０１３、２０１４、２０２０、２０２１、および２０２２は、それぞれ、ステップ１９０３、１９０４、１９０６、１９０７、１９１３、１９１４、１９２０、１９２１、および１９２２と同様である。ステップ２００１は、変数「Ｐａｌｅｔｔｅ＿ｓｉｚｅ」が０に初期化され、変数Ｃｏｕｎｔがもはや存在しないことを除いて、ステップ１９０１と同様である。
【０２５３】
ステップ２０１６および２０１８は、第一の発明的改良を実装する。ステップ２０２０、２０２１、および２０２２は、第二の発明的改良を実装する。
【０２５４】
図１９で行われたように、インデックス探索を加速するために、ステップ２０２０で、現在の画素がＬａｓｔの現在の値と対比される。これらが同一である場合、ステップ２０２１で現在の画素に対するインデックスがＬＩＤＸに設定される。その他の場合は、ステップ２００６で、パレットの中で最良のインデックスが探索される。
【０２５５】
図２０のプロセスは、ステップ２００７の後が図１９のものとは異なり、エンコーダが、見出されたインデックスに対応するパレットエントリがＰｉを十分に表現しているかどうかをチェックする。
【０２５６】
パレットが算定されているので（図２０のプロセスはパレット算定アルゴリズムに属する）、ステップ２００７のチェックが否定である場合、ステップ２００９で、現在の画素Ｐｉが新規パレットエントリとしてパレットに加えられる。
【０２５７】
言い換えれば、距離閾値を所与として、パレット中に画素Ｐｉに十分近いパレットエントリが見付からない場合、検討された画素Ｐｉが、新規パレットエントリとしてパレット中に加えられ、対応するエントリインデックスが、検討される画素に対するインデックスのブロックに加わる。これは、新規パレット要素が画素値Ｐｉに等しく設定され、現在の画素Ｐｉがパレットの１エントリになることを意味する。さらに正確には、以下の割り当てが行われる：
ＰＡＬＹ［ｊ］＝（Ｙｉ）；ＰＡＬＵ［ｊ］＝（Ｕｉ）；ＰＡＬＶ［ｊ］＝（Ｖｉ）、前式のＹｉ、Ｕｉ、Ｖｉは、ＰｉのＹＵＶカラー成分を表す。
【０２５８】
次にステップ２０１０で、この新規パレットエントリの発生の数が１に設定される：Ｃｏｕｎｔｅｒ［Ｐａｌｅｔｔｅ＿ｓｉｚｅ］＝１。次いでステップ２０１１で、変数Ｐａｌｅｔｔｅ＿ｓｉｚｅが１つインクリメントされ、その後ステップ２０２２に続く。
【０２５９】
インデックスが当該画素を表現している場合（チェック２００７が肯定）、ステップ２００２で、パレットを算定するため必要な一切の情報が更新される。具体的には、インデックスに対応するエントリに対するカウンタ（Ｃｏｕｎｔｅｒ［ｉｎｄｅｘ］）がインクリメントされる。プロセスはステップ２０２２に続く。
【０２６０】
ステップ２０２２で、画素値と見出されたインデックスとの間の関連付けが、変数ＬａｓｔおよびＬＩＤＸを更新することによって、メモリ中に格納される。
【０２６１】
次に、現在の符号化ユニットの次の画素「ｉ」を検討するために、ステップ２０１３で変数ｉがインクリメントされる。現在の符号化ユニットの全ての画素が処理されたかどうかを知るために、ステップ２０１４でチェックが行われる。
【０２６２】
全部が処理されていない場合、プロセスは、既に説明したステップ２００３に続く。
【０２６３】
全部が処理されていれば、構築されたパレットの後処理のステップ２０１５に続く。プロセスのこの時点で、テーブル「Ｃｏｕｎｔｅｒ」は、各パレット要素の発生を包含する。
【０２６４】
この後処理には、これらの発生および統計データを考慮に入れることが可能である。
【０２６５】
後処理の例は、ステップ１２１５を参照して前述されている：例えば、パレット要素は、最も頻度の高い要素がパレット中の最初の位置（最小のインデックスまたは「レベル」を備えるエントリ）になるように、それらの発生度（Ｃｏｕｎｔｅｒ［］）に従って順序付けされる。
【０２６６】
次に、最初のＮ個のパレット要素を保持することができ、他のパレット要素は削除してもよい。例えば、パレットのサイズが、例えば２４エントリなど或る最大サイズに制限されている場合、２４より多いエントリを有する構築済みパレットは、順序付けされたパレット中の２５番目の位置以降の要素（エントリ）を削除することによって縮小される。
【０２６７】
ステップ２０１５の次に、ステップ２０１６は、パレットを使って符号化される対象となる、現在の符号化ユニットの画素の数の見積もり、または、対応するパレットエントリがステップ２０１５で削除されてしまったので、ビットストリーム中の明示的に符号化（エスケープ符号化画素）される対象の画素の数の見積もりを算定することにある。これらの見積もりは、対応する（保持または削除された）パレットエントリに対する（Ｃｏｕｎｔｅｒ［］中の）発生の数を合計することによって容易に得ることができる。
【０２６８】
また、ステップ２０１６は、そのエスケープ画素に対して得られた見積もりを所定の閾値（例えば、符号化ユニット中の画素の数のパーセント）と対比することにもある。得られた見積もりが閾値を超える場合、多過ぎるエスケープ符号化画素が明らかにされて、ステップ２０１８でパレットモードの評価は中止される。その他の場合は、パレットモードの評価は、ステップ２０１７で正常に終了する。
【０２６９】
ＨＥＶＣ  ＳＣＣのさらに別の発明的改良は、関係がない場合に評価プロセスを中止することによっても、処理時間を節減することができる。この別の発明的改良は、前述した１つ以上の発明的改良とは別個に、あるいはそれらと組み合わせて実装することができる。
【０２７０】
この改良は、現在のパレットの符号化が、パレット予測因子を用いてかかるパレットを予測することを含むコンテキストにおいて実施される。しかして、これは、パレット符号化モードを用いて画像の画素の現在のブロックを処理する方法に関してい、該パレット符号化モードは、それぞれのエントリインデックスを対応する画素値に関連付けるエントリのセットを含む現在のパレットを使用し、本方法は、少なくとも１つのパレット予測因子から現在のパレットを予測するステップを含む。例えば、このパレット予測因子は、画像中の画素のブロックを処理するため以前に使われた１つのパレットとしてもよく、その一例が同時係属出願ＧＢ１４０３８２３．６に記載されている。
【０２７１】
通常、最良の１つを判定すべく、現在のパレットを予測するための２つ以上のパレット予測モードが評価される。
【０２７２】
パレット予測モードは、前に使われたパレット（すなわち、パレット符号化モードで符号化された直近の符号化ユニットに対するもの）から現在のパレットを予測することから成る。この前に使われたパレットから再使用される各パレット要素／エントリは、エンコーダによって、どのエントリが再使用されるかを示すフラグのセットを介してビットストリーム中にシグナリングされる。このパレット予測モードはエンコーダ側で評価され、標準パレット評価と呼ばれる。
【０２７３】
別のパレット予測モードは、画像中の画素の先行するブロックの先行パレットを、画素の現在のブロックを符号化するための現在のパレットとして、全面的に利用することから成る。言い換えれば、このパレットは、実際上、前に使われたパレットの全てのエントリを再使用する。かかる場合、当該符号化ユニットが前に使用されたパレット全体を再使用することを示すため、符号化ユニットレベルでフラグを使用することができ、この場合、明示的パレット要素は送信されず、当該パレットは、単に前にパレット符号化されたＣＵのものである。また、このパレット予測モードもエンコーダ側で評価され、これはパレット共用評価と呼ばれる。
【０２７４】
エンコーダ側で、２つ以上のパレット予測モードを連続して実行するのは、非常に高コストの評価をもたらす可能性がある。パレット共用評価が非効果的な場合を検知して、それをできるだけ早期にスキップするのが、多くの場合望ましい。
【０２７５】
これはこの第三の発明的改良の意図であって、その例が図２１の発明的ステップ１８０２〜１８０８によって示されている。この改良によれば、パレット共用評価を実施する前に、現在のパレット中で再使用される先行パレットのパレットエントリの量が判定される。この判定に基づいてパレット共用評価をスキップすることができる、すなわち、再使用されるパレットエントリの量が所定の閾値より少ないと判定された場合、第一パレット予測モードを用いる、画素の現在のブロック符号化の評価がスキップされる。
【０２７６】
図２１のプロセスの入力は、完全に既知の現在のパレットである。標準パレット評価２１０１が終了したならば、それを現在のパレットとすることができる。
【０２７７】
標準パレット評価が実施完了したならば（２１０１）、そのパレット要素群は既知となる。ステップ２１０２で、そのパレット符号化モードが、現在の符号化ユニットに対する最良の符号化モードであるかどうかがチェックされる。
【０２７８】
最良でない場合、パレット共用を用いることで状況が改善される可能性は低い。結果的として、パレット評価プロセスはステップ２１１０で終了する。
【０２７９】
最良の場合、現在のパレット中で再使用される前のパレットからの要素の数が、ステップ２１０３〜２１０６のループを介してカウントされる。
【０２８０】
このカウントのループは、ステップ２１０３で、現在ののエントリインデックスを表す変数「ｉ」および再使用されるパレット要素の数を表す変数「Ｃｏｕｎｔ」の両方を０に設定することによって初期化される。次に、ステップ２１０４は、以前のパレットからのｉ番目のパレット要素が再使用されるかどうかをチェックすることから成る。再使用される場合、ステップ２１０５で再使用要素の数がインクリメントされ、プロセスはステップ２１０６に進む。それ以外の場合は、プロセスは直接にステップ２１０６に進む。
【０２８１】
ステップ２１０６は、ｉ番目のパレット要素が前のパレットの最後の要素かどうかをチェックすることから成る。最後でない場合、ステップ２１０４にループバックする前に、ステップ２１０７で「ｉ」をインクリメントすることによって次のパレット要素が選択される。
【０２８２】
ステップ２１０８は、対象パレットが前のパレットの最後のパレット要素のとき、パレット共用評価がスキップ可能かどうかを評価することから成る。
【０２８３】
簡単なチェックは、パレット共用評価を可能にする前に、再使用される現在のパレット要素の最小比率を確実にするために、Ｃｏｕｎｔと現在のパレットのサイズとを比較することにあり得る。
【０２８４】
最小比率に達していない場合（再使用される要素が過少）、パレット共用評価を遂行せずに、パレット評価はステップ２１１０で終了する。
【０２８５】
その他の場合（最小比率に達している）は、ステップ２１０９で、パレット共用評価が従来の方式で遂行され、その後プロセスはステップ２１１０で終了する。
【０２８６】
図１４は、本発明の１つ以上の実施形態の実装のためのコンピューティングデバイス１４００の概略ブロック図である。コンピューティングデバイス１４００は、マイクロコンピュータ、ワークステーション、または軽量携帯デバイスなどのデバイスであってよい。コンピューティングデバイス１４００は、以下の素子に接続された通信バスを含む：
−  マイクロプロセッサなどの、ＣＰＵとも呼ばれる中央処理ユニット１４０１；
−  本発明の実施形態の方法の実行コード、ならびに本発明の実施形態よる方法を実装するために必要な変数およびパラメータを記録するようになされたレジスタを格納するための、ＲＡＭとも呼ばれるランダムアクセスメモリ１４０２であって、そのメモリ容量は、例えば拡張ポートに接続された随意的ＲＡＭによって拡張可能である；
−  本発明の実施形態を実装するためのコンピュータプログラムを格納するための、ＲＯＭとも呼ばれる読み取り専用メモリ１４０３；
−  ネットワークインターフェース１４０４は、通常、通信ネットワークに接続され、それを介して処理対象のデジタルデータが送信または受信される。ネットワークインターフェース１４０４は単一のネットワークインターフェースとすることも、各種のネットワークインターフェース（例えば、有線およびワイヤレスインターフェース、または各種の有線またはワイヤレスインターフェース群）のセットで構成することも可能である。ＣＰＵ１４０１中で実行されるソフトウェアアプリケーションの制御の下で、データパケットが、送信のためネットワークインターフェースに書き込まれ、あるいは受信のためネットワークインターフェースから読み取られる；
−  ユーザインターフェース１４０５は、ユーザからの入力を受信するため、あるいはユーザに情報を表示するために使うことができる；
−  ＨＤとも呼ばれるハードディスク１４０６は、大量ストレージデバイスとして設けることが可能である。
【０２８７】
−  Ｉ／Ｏモジュール１４０７は、ビデオ源またはディスプレイなどの外部デバイスとの間でデータを受信／送信するために使うことができる。
【０２８８】
実行可能コードは、読み取り専用メモリ１４０３中、ハードディスク１４０６上、または例えばディスクなどのリムーバブルデジタル媒体上のいずれかに格納することが可能である。別形によれば、プログラムの実行可能コードは、実行される前に、ハードディスク１４０６などの、通信デバイス１４００のストレージ手段の１つの中に格納すべく、ネットワークインターフェース１４０４を介し、通信ネットワークを用いて受信することができる。
【０２８９】
中央処理ユニット１４０１は、本発明の実施形態によるプログラムまたはプログラム群の命令またはソフトウェアコードの部分の実行を制御および命令するようになされており、これら命令は、前述のストレージ手段の１つの中に格納される。電源投入後、ＣＰＵ１４０１は、当該命令が、例えばプログラムＲＯＭ１４０３またはハードディスク（ＨＤ：ｈａｒｄ−ｄｉｓｃ）１４０６などからロードされた後、ソフトウェアアプリケーションに関し、主ＲＡＭメモリ１４０２からの命令を実行することができる。かかるソフトウェアアプリケーションは、ＣＰＵ１４０１に実行されると、図１７〜２１に示されたフローチャートのステップを遂行させる。
【０２９０】
図１７〜２１中に示されたアルゴリズムの任意のステップを、ＰＣ（「Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ（パーソナルコンピュータ）」）、ＤＳＰ（「Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ（デジタル信号プロセッサ）」）、またはマイクロコントローラなどのプログラム可能コンピューティングマシンによる命令のセットまたはプログラムの実行によって、ソフトウェア中に実装すること、あるいは、ＦＰＧＡ（「Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ（フィールドプログラマブルゲートアレイ）」）またはＡＳＩＣ（「Ａｐｐｌｉｃａｔｉｏｎ−Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ（特定用途向け集積回路）」）などのマシンまたは専用部品によって、ハードウェアの中に別途に実装すること、が可能である。
【０２９１】
特定の実施形態を参照しながら、本発明を上記で説明してきたが、本発明は、これら特定の実施形態に限定されるものでなく、当業者には諸修改が明白であろうが、それらの修改は本発明の範囲に含まれる。
【０２９２】
当業者には、前述の例示的な実施形態を参照することにより、多くのさらなる修改および変形が浮かぶであろう。これらの実施形態は、例としてだけ提示されており本発明の範囲を限定するものでなく、発明の範囲は添付の特許請求の範囲によってのみ定められる。具体的には、適切な場合、各種実施形態からの各種の特徴は置き換えが可能である。
【０２９３】
特許請求の範囲中の用語「含む（ｃｏｍｐｒｉｓｉｎｇ）」は他の要素またはステップを排除せず、不定冠詞「或る（ａまたはａｎ）」は複数を排除しない。相異なる従属請求項において述べられる各種の特徴は、これらの特徴の組み合わせを有利に使用できないことを示すものではない。
【図１】
0006584501.tif 000003
【図２】
0006584501.tif 000004
【図３】
0006584501.tif 000005
【図４】
0006584501.tif 000006
【図５】
0006584501.tif 000007
【図６】
0006584501.tif 000008
【図７】
0006584501.tif 000009
【図８】
0006584501.tif 000010
【図９】
0006584501.tif 000011
【図１０】
0006584501.tif 000012
【図１１】
0006584501.tif 000013
【図１２】
0006584501.tif 000014
【図１３】
0006584501.tif 000015
【図１４】
0006584501.tif 000016
【図１５】
0006584501.tif 000017
【図１６】
0006584501.tif 000018
【図１７】
0006584501.tif 000019
【図１８】
0006584501.tif 000020
【図１９】
0006584501.tif 000021
【図２０】
0006584501.tif 000022
【図２１】
0006584501.tif 000023